ZGlmZiAtLWdpdCBhL0NSRURJVFMgYi9DUkVESVRTCmluZGV4IGNjMzQ1M2EuLjY2ZTgyNDYgMTAwNjQ0Ci0tLSBhL0NSRURJVFMKKysrIGIvQ1JFRElUUwpAQCAtMTYyMCw3ICsxNjIwLDggQEAKIAogTjogSmVzcGVyIEp1aGwKIEU6IGplc3Blci5qdWhsQGdtYWlsLmNvbQotRDogVmFyaW91cyBmaXhlcywgY2xlYW51cHMgYW5kIG1pbm9yIGZlYXR1cmVzLgorRDogVmFyaW91cyBmaXhlcywgY2xlYW51cHMgYW5kIG1pbm9yIGZlYXR1cmVzIGFsbCBvdmVyIHRoZSB0cmVlLgorRDogV3JvdGUgaW5pdGlhbCB2ZXJzaW9uIG9mIHRoZSBoZGFwcyBkcml2ZXIgKHNpbmNlIHBhc3NlZCBvbiB0byBvdGhlcnMpLgogUzogTGVtbm9zdmVqIDEsIDMudHYKIFM6IDIzMDAgQ29wZW5oYWdlbiBTLgogUzogRGVubWFyawpAQCAtMjQ3Nyw3ICsyNDc4LDggQEAKIFM6IFVuaXRlZCBLaW5nZG9tCiAKIE46IElhbiBTLiBOZWxzb24KLUU6IGlhbi5uZWxzb25AZWNob3N0YXIuY29tCitFOiBuZWxzb25pc0BlYXJ0aGxpbmsubmV0CitQOiAxMDI0RC8wMEQzRDk4MyAzRUZEIDdCODYgQjg4OCBEN0UyIDI5QjYgIDlFOTcgNTc2RiAxQjk3IDAwRDMgRDk4MwogRDogTWlub3IgbW1hcCBhbmQgaWRlIGhhY2tzCiBTOiAxMzcwIEF0bGFudGlzIEF2ZS4KIFM6IExhZmF5ZXR0ZSBDTywgODAwMjYKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUgYi9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCmluZGV4IDZkMjQxMmUuLjI5YzE4OTYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vQ29kaW5nU3R5bGUKKysrIGIvRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZQpAQCAtNTMyLDYgKzUzMiw0MCBAQAogc29tZXRoaW5nIGl0IHdvdWxkIGhhdmUgZG9uZSBhbnl3YXkuCiAKIAorCQlDaGFwdGVyIDE2OiBGdW5jdGlvbiByZXR1cm4gdmFsdWVzIGFuZCBuYW1lcworCitGdW5jdGlvbnMgY2FuIHJldHVybiB2YWx1ZXMgb2YgbWFueSBkaWZmZXJlbnQga2luZHMsIGFuZCBvbmUgb2YgdGhlCittb3N0IGNvbW1vbiBpcyBhIHZhbHVlIGluZGljYXRpbmcgd2hldGhlciB0aGUgZnVuY3Rpb24gc3VjY2VlZGVkIG9yCitmYWlsZWQuICBTdWNoIGEgdmFsdWUgY2FuIGJlIHJlcHJlc2VudGVkIGFzIGFuIGVycm9yLWNvZGUgaW50ZWdlcgorKC1FeHh4ID0gZmFpbHVyZSwgMCA9IHN1Y2Nlc3MpIG9yIGEgInN1Y2NlZWRlZCIgYm9vbGVhbiAoMCA9IGZhaWx1cmUsCitub24temVybyA9IHN1Y2Nlc3MpLgorCitNaXhpbmcgdXAgdGhlc2UgdHdvIHNvcnRzIG9mIHJlcHJlc2VudGF0aW9ucyBpcyBhIGZlcnRpbGUgc291cmNlIG9mCitkaWZmaWN1bHQtdG8tZmluZCBidWdzLiAgSWYgdGhlIEMgbGFuZ3VhZ2UgaW5jbHVkZWQgYSBzdHJvbmcgZGlzdGluY3Rpb24KK2JldHdlZW4gaW50ZWdlcnMgYW5kIGJvb2xlYW5zIHRoZW4gdGhlIGNvbXBpbGVyIHdvdWxkIGZpbmQgdGhlc2UgbWlzdGFrZXMKK2ZvciB1cy4uLiBidXQgaXQgZG9lc24ndC4gIFRvIGhlbHAgcHJldmVudCBzdWNoIGJ1Z3MsIGFsd2F5cyBmb2xsb3cgdGhpcworY29udmVudGlvbjoKKworCUlmIHRoZSBuYW1lIG9mIGEgZnVuY3Rpb24gaXMgYW4gYWN0aW9uIG9yIGFuIGltcGVyYXRpdmUgY29tbWFuZCwKKwl0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhbiBlcnJvci1jb2RlIGludGVnZXIuICBJZiB0aGUgbmFtZQorCWlzIGEgcHJlZGljYXRlLCB0aGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBhICJzdWNjZWVkZWQiIGJvb2xlYW4uCisKK0ZvciBleGFtcGxlLCAiYWRkIHdvcmsiIGlzIGEgY29tbWFuZCwgYW5kIHRoZSBhZGRfd29yaygpIGZ1bmN0aW9uIHJldHVybnMgMAorZm9yIHN1Y2Nlc3Mgb3IgLUVCVVNZIGZvciBmYWlsdXJlLiAgSW4gdGhlIHNhbWUgd2F5LCAiUENJIGRldmljZSBwcmVzZW50IiBpcworYSBwcmVkaWNhdGUsIGFuZCB0aGUgcGNpX2Rldl9wcmVzZW50KCkgZnVuY3Rpb24gcmV0dXJucyAxIGlmIGl0IHN1Y2NlZWRzIGluCitmaW5kaW5nIGEgbWF0Y2hpbmcgZGV2aWNlIG9yIDAgaWYgaXQgZG9lc24ndC4KKworQWxsIEVYUE9SVGVkIGZ1bmN0aW9ucyBtdXN0IHJlc3BlY3QgdGhpcyBjb252ZW50aW9uLCBhbmQgc28gc2hvdWxkIGFsbAorcHVibGljIGZ1bmN0aW9ucy4gIFByaXZhdGUgKHN0YXRpYykgZnVuY3Rpb25zIG5lZWQgbm90LCBidXQgaXQgaXMKK3JlY29tbWVuZGVkIHRoYXQgdGhleSBkby4KKworRnVuY3Rpb25zIHdob3NlIHJldHVybiB2YWx1ZSBpcyB0aGUgYWN0dWFsIHJlc3VsdCBvZiBhIGNvbXB1dGF0aW9uLCByYXRoZXIKK3RoYW4gYW4gaW5kaWNhdGlvbiBvZiB3aGV0aGVyIHRoZSBjb21wdXRhdGlvbiBzdWNjZWVkZWQsIGFyZSBub3Qgc3ViamVjdCB0bwordGhpcyBydWxlLiAgR2VuZXJhbGx5IHRoZXkgaW5kaWNhdGUgZmFpbHVyZSBieSByZXR1cm5pbmcgc29tZSBvdXQtb2YtcmFuZ2UKK3Jlc3VsdC4gIFR5cGljYWwgZXhhbXBsZXMgd291bGQgYmUgZnVuY3Rpb25zIHRoYXQgcmV0dXJuIHBvaW50ZXJzOyB0aGV5IHVzZQorTlVMTCBvciB0aGUgRVJSX1BUUiBtZWNoYW5pc20gdG8gcmVwb3J0IGZhaWx1cmUuCisKKwogCiAJCUFwcGVuZGl4IEk6IFJlZmVyZW5jZXMKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbCBiL0RvY3VtZW50YXRpb24vRG9jQm9vay9rZXJuZWwtYXBpLnRtcGwKaW5kZXggZjhmZTg4Mi4uNmQ0YjFlZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL2tlcm5lbC1hcGkudG1wbAorKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2sva2VybmVsLWFwaS50bXBsCkBAIC0xODEsMjcgKzE4MSw2IEBACiAgICAgIDwvc2VjdDE+CiAgIDwvY2hhcHRlcj4KIAotICA8Y2hhcHRlciBpZD0icHJvYyI+Ci0gICAgIDx0aXRsZT5UaGUgcHJvYyBmaWxlc3lzdGVtPC90aXRsZT4KLSAKLSAgICAgPHNlY3QxPjx0aXRsZT5zeXNjdGwgaW50ZXJmYWNlPC90aXRsZT4KLSFFa2VybmVsL3N5c2N0bC5jCi0gICAgIDwvc2VjdDE+Ci0KLSAgICAgPHNlY3QxPjx0aXRsZT5wcm9jIGZpbGVzeXN0ZW0gaW50ZXJmYWNlPC90aXRsZT4KLSFJZnMvcHJvYy9iYXNlLmMKLSAgICAgPC9zZWN0MT4KLSAgPC9jaGFwdGVyPgotCi0gIDxjaGFwdGVyIGlkPSJkZWJ1Z2ZzIj4KLSAgICAgPHRpdGxlPlRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW08L3RpdGxlPgotIAotICAgICA8c2VjdDE+PHRpdGxlPmRlYnVnZnMgaW50ZXJmYWNlPC90aXRsZT4KLSFFZnMvZGVidWdmcy9pbm9kZS5jCi0hRWZzL2RlYnVnZnMvZmlsZS5jCi0gICAgIDwvc2VjdDE+Ci0gIDwvY2hhcHRlcj4KLQogICA8Y2hhcHRlciBpZD0idmZzIj4KICAgICAgPHRpdGxlPlRoZSBMaW51eCBWRlM8L3RpdGxlPgogICAgICA8c2VjdDE+PHRpdGxlPlRoZSBGaWxlc3lzdGVtIHR5cGVzPC90aXRsZT4KQEAgLTIzNCw2ICsyMTMsNTAgQEAKICAgICAgPC9zZWN0MT4KICAgPC9jaGFwdGVyPgogCisgIDxjaGFwdGVyIGlkPSJwcm9jIj4KKyAgICAgPHRpdGxlPlRoZSBwcm9jIGZpbGVzeXN0ZW08L3RpdGxlPgorIAorICAgICA8c2VjdDE+PHRpdGxlPnN5c2N0bCBpbnRlcmZhY2U8L3RpdGxlPgorIUVrZXJuZWwvc3lzY3RsLmMKKyAgICAgPC9zZWN0MT4KKworICAgICA8c2VjdDE+PHRpdGxlPnByb2MgZmlsZXN5c3RlbSBpbnRlcmZhY2U8L3RpdGxlPgorIUlmcy9wcm9jL2Jhc2UuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KKyAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgorIUVmcy9zeXNmcy9maWxlLmMKKyFFZnMvc3lzZnMvc3ltbGluay5jCishRWZzL3N5c2ZzL2Jpbi5jCisgIDwvY2hhcHRlcj4KKworICA8Y2hhcHRlciBpZD0iZGVidWdmcyI+CisgICAgIDx0aXRsZT5UaGUgZGVidWdmcyBmaWxlc3lzdGVtPC90aXRsZT4KKyAKKyAgICAgPHNlY3QxPjx0aXRsZT5kZWJ1Z2ZzIGludGVyZmFjZTwvdGl0bGU+CishRWZzL2RlYnVnZnMvaW5vZGUuYworIUVmcy9kZWJ1Z2ZzL2ZpbGUuYworICAgICA8L3NlY3QxPgorICA8L2NoYXB0ZXI+CisKKyAgPGNoYXB0ZXIgaWQ9InJlbGF5ZnMiPgorICAgICA8dGl0bGU+cmVsYXkgaW50ZXJmYWNlIHN1cHBvcnQ8L3RpdGxlPgorCisgICAgIDxwYXJhPgorCVJlbGF5IGludGVyZmFjZSBzdXBwb3J0CisJaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBhbiBlZmZpY2llbnQgbWVjaGFuaXNtIGZvciB0b29scyBhbmQKKwlmYWNpbGl0aWVzIHRvIHJlbGF5IGxhcmdlIGFtb3VudHMgb2YgZGF0YSBmcm9tIGtlcm5lbCBzcGFjZSB0bworCXVzZXIgc3BhY2UuCisgICAgIDwvcGFyYT4KKworICAgICA8c2VjdDE+PHRpdGxlPnJlbGF5IGludGVyZmFjZTwvdGl0bGU+CishRWtlcm5lbC9yZWxheS5jCishSWtlcm5lbC9yZWxheS5jCisgICAgIDwvc2VjdDE+CisgIDwvY2hhcHRlcj4KKwogICA8Y2hhcHRlciBpZD0ibmV0Y29yZSI+CiAgICAgIDx0aXRsZT5MaW51eCBOZXR3b3JraW5nPC90aXRsZT4KICAgICAgPHNlY3QxPjx0aXRsZT5OZXR3b3JraW5nIEJhc2UgVHlwZXM8L3RpdGxlPgpAQCAtMzQ5LDEzICszNzIsNiBAQAogICAgICA8L3NlY3QxPgogICA8L2NoYXB0ZXI+CiAKLSAgPGNoYXB0ZXIgaWQ9InN5c2ZzIj4KLSAgICAgPHRpdGxlPlRoZSBGaWxlc3lzdGVtIGZvciBFeHBvcnRpbmcgS2VybmVsIE9iamVjdHM8L3RpdGxlPgotIUVmcy9zeXNmcy9maWxlLmMKLSFFZnMvc3lzZnMvc3ltbGluay5jCi0hRWZzL3N5c2ZzL2Jpbi5jCi0gIDwvY2hhcHRlcj4KLQogICA8Y2hhcHRlciBpZD0ic2VjdXJpdHkiPgogICAgICA8dGl0bGU+U2VjdXJpdHkgRnJhbWV3b3JrPC90aXRsZT4KICFFc2VjdXJpdHkvc2VjdXJpdHkuYwpAQCAtMzg2LDYgKzQwMiw3IEBACiAtLT4KICFFZHJpdmVycy9iYXNlL2RyaXZlci5jCiAhRWRyaXZlcnMvYmFzZS9jb3JlLmMKKyFFZHJpdmVycy9iYXNlL2NsYXNzLmMKICFFZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMKICFFZHJpdmVycy9iYXNlL3RyYW5zcG9ydF9jbGFzcy5jCiAhRWRyaXZlcnMvYmFzZS9kbWFwb29sLmMKQEAgLTQzNyw2ICs0NTQsMTEgQEAKICFFYmxvY2svbGxfcndfYmxrLmMKICAgPC9jaGFwdGVyPgogCisgIDxjaGFwdGVyIGlkPSJjaHJkZXYiPgorCTx0aXRsZT5DaGFyIGRldmljZXM8L3RpdGxlPgorIUVmcy9jaGFyX2Rldi5jCisgIDwvY2hhcHRlcj4KKwogICA8Y2hhcHRlciBpZD0ibWlzY2RldiI+CiAgICAgIDx0aXRsZT5NaXNjZWxsYW5lb3VzIERldmljZXM8L3RpdGxlPgogIUVkcml2ZXJzL2NoYXIvbWlzYy5jCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svdXNiLnRtcGwKaW5kZXggMzIwYWYyNS4uMzYwODQ3MiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3VzYi50bXBsCisrKyBiL0RvY3VtZW50YXRpb24vRG9jQm9vay91c2IudG1wbApAQCAtNDMsNTkgKzQzLDUyIEBACiAKICAgICA8cGFyYT5BIFVuaXZlcnNhbCBTZXJpYWwgQnVzIChVU0IpIGlzIHVzZWQgdG8gY29ubmVjdCBhIGhvc3QsCiAgICAgc3VjaCBhcyBhIFBDIG9yIHdvcmtzdGF0aW9uLCB0byBhIG51bWJlciBvZiBwZXJpcGhlcmFsCi0gICAgZGV2aWNlcy4gIFVTQiB1c2VzIGEgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggdGhlIGhvc3QgYXQgdGhlCisgICAgZGV2aWNlcy4gIFVTQiB1c2VzIGEgdHJlZSBzdHJ1Y3R1cmUsIHdpdGggdGhlIGhvc3QgYXMgdGhlCiAgICAgcm9vdCAodGhlIHN5c3RlbSdzIG1hc3RlciksIGh1YnMgYXMgaW50ZXJpb3Igbm9kZXMsIGFuZAotICAgIHBlcmlwaGVyYWwgZGV2aWNlcyBhcyBsZWF2ZXMgKGFuZCBzbGF2ZXMpLgorICAgIHBlcmlwaGVyYWxzIGFzIGxlYXZlcyAoYW5kIHNsYXZlcykuCiAgICAgTW9kZXJuIFBDcyBzdXBwb3J0IHNldmVyYWwgc3VjaCB0cmVlcyBvZiBVU0IgZGV2aWNlcywgdXN1YWxseQogICAgIG9uZSBVU0IgMi4wIHRyZWUgKDQ4MCBNYml0L3NlYyBlYWNoKSB3aXRoCiAgICAgYSBmZXcgVVNCIDEuMSB0cmVlcyAoMTIgTWJpdC9zZWMgZWFjaCkgdGhhdCBhcmUgdXNlZCB3aGVuIHlvdQogICAgIGNvbm5lY3QgYSBVU0IgMS4xIGRldmljZSBkaXJlY3RseSB0byB0aGUgbWFjaGluZSdzICJyb290IGh1YiIuCiAgICAgPC9wYXJhPgogCi0gICAgPHBhcmE+VGhhdCBtYXN0ZXIvc2xhdmUgYXN5bW1ldHJ5IHdhcyBkZXNpZ25lZCBpbiBwYXJ0IGZvcgotICAgIGVhc2Ugb2YgdXNlLiAgSXQgaXMgbm90IHBoeXNpY2FsbHkgcG9zc2libGUgdG8gYXNzZW1ibGUKLSAgICAobGVnYWwpIFVTQiBjYWJsZXMgaW5jb3JyZWN0bHk6ICBhbGwgdXBzdHJlYW0gInRvLXRoZS1ob3N0IgotICAgIGNvbm5lY3RvcnMgYXJlIHRoZSByZWN0YW5ndWxhciB0eXBlLCBtYXRjaGluZyB0aGUgc29ja2V0cyBvbgotICAgIHJvb3QgaHVicywgYW5kIHRoZSBkb3duc3RyZWFtIHR5cGUgYXJlIHRoZSBzcXVhcmlzaCB0eXBlCi0gICAgKG9yIHRoZXkgYXJlIGJ1aWx0IGluIHRvIHRoZSBwZXJpcGhlcmFsKS4KLSAgICBTb2Z0d2FyZSBkb2Vzbid0IG5lZWQgdG8gZGVhbCB3aXRoIGRpc3RyaWJ1dGVkIGF1dG9jb25maWd1cmF0aW9uCi0gICAgc2luY2UgdGhlIHByZS1kZXNpZ25hdGVkIG1hc3RlciBub2RlIG1hbmFnZXMgYWxsIHRoYXQuCi0gICAgQXQgdGhlIGVsZWN0cmljYWwgbGV2ZWwsIGJ1cyBwcm90b2NvbCBvdmVyaGVhZCBpcyByZWR1Y2VkIGJ5Ci0gICAgZWxpbWluYXRpbmcgYXJiaXRyYXRpb24gYW5kIG1vdmluZyBzY2hlZHVsaW5nIGludG8gaG9zdCBzb2Z0d2FyZS4KKyAgICA8cGFyYT5UaGF0IG1hc3Rlci9zbGF2ZSBhc3ltbWV0cnkgd2FzIGRlc2lnbmVkLWluIGZvciBhIG51bWJlciBvZgorICAgIHJlYXNvbnMsIG9uZSBiZWluZyBlYXNlIG9mIHVzZS4gIEl0IGlzIG5vdCBwaHlzaWNhbGx5IHBvc3NpYmxlIHRvCisgICAgYXNzZW1ibGUgKGxlZ2FsKSBVU0IgY2FibGVzIGluY29ycmVjdGx5OiAgYWxsIHVwc3RyZWFtICJ0byB0aGUgaG9zdCIKKyAgICBjb25uZWN0b3JzIGFyZSB0aGUgcmVjdGFuZ3VsYXIgdHlwZSAobWF0Y2hpbmcgdGhlIHNvY2tldHMgb24KKyAgICByb290IGh1YnMpLCBhbmQgYWxsIGRvd25zdHJlYW0gY29ubmVjdG9ycyBhcmUgdGhlIHNxdWFyaXNoIHR5cGUKKyAgICAob3IgdGhleSBhcmUgYnVpbHQgaW50byB0aGUgcGVyaXBoZXJhbCkuCisgICAgQWxzbywgdGhlIGhvc3Qgc29mdHdhcmUgZG9lc24ndCBuZWVkIHRvIGRlYWwgd2l0aCBkaXN0cmlidXRlZAorICAgIGF1dG8tY29uZmlndXJhdGlvbiBzaW5jZSB0aGUgcHJlLWRlc2lnbmF0ZWQgbWFzdGVyIG5vZGUgbWFuYWdlcyBhbGwgdGhhdC4KKyAgICBBbmQgZmluYWxseSwgYXQgdGhlIGVsZWN0cmljYWwgbGV2ZWwsIGJ1cyBwcm90b2NvbCBvdmVyaGVhZCBpcyByZWR1Y2VkIGJ5CisgICAgZWxpbWluYXRpbmcgYXJiaXRyYXRpb24gYW5kIG1vdmluZyBzY2hlZHVsaW5nIGludG8gdGhlIGhvc3Qgc29mdHdhcmUuCiAgICAgPC9wYXJhPgogCi0gICAgPHBhcmE+VVNCIDEuMCB3YXMgYW5ub3VuY2VkIGluIEphbnVhcnkgMTk5NiwgYW5kIHdhcyByZXZpc2VkCisgICAgPHBhcmE+VVNCIDEuMCB3YXMgYW5ub3VuY2VkIGluIEphbnVhcnkgMTk5NiBhbmQgd2FzIHJldmlzZWQKICAgICBhcyBVU0IgMS4xICh3aXRoIGltcHJvdmVtZW50cyBpbiBodWIgc3BlY2lmaWNhdGlvbiBhbmQKICAgICBzdXBwb3J0IGZvciBpbnRlcnJ1cHQtb3V0IHRyYW5zZmVycykgaW4gU2VwdGVtYmVyIDE5OTguCi0gICAgVVNCIDIuMCB3YXMgcmVsZWFzZWQgaW4gQXByaWwgMjAwMCwgaW5jbHVkaW5nIGhpZ2ggc3BlZWQKLSAgICB0cmFuc2ZlcnMgYW5kIHRyYW5zYWN0aW9uIHRyYW5zbGF0aW5nIGh1YnMgKHVzZWQgZm9yIFVTQiAxLjEKKyAgICBVU0IgMi4wIHdhcyByZWxlYXNlZCBpbiBBcHJpbCAyMDAwLCBhZGRpbmcgaGlnaC1zcGVlZAorICAgIHRyYW5zZmVycyBhbmQgdHJhbnNhY3Rpb24tdHJhbnNsYXRpbmcgaHVicyAodXNlZCBmb3IgVVNCIDEuMQogICAgIGFuZCAxLjAgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkuCiAgICAgPC9wYXJhPgogCi0gICAgPHBhcmE+VVNCIHN1cHBvcnQgd2FzIGFkZGVkIHRvIExpbnV4IGVhcmx5IGluIHRoZSAyLjIga2VybmVsIHNlcmllcwotICAgIHNob3J0bHkgYmVmb3JlIHRoZSAyLjMgZGV2ZWxvcG1lbnQgZm9ya2VkIG9mZi4gIFVwZGF0ZXMKLSAgICBmcm9tIDIuMyB3ZXJlIHJlZ3VsYXJseSBmb2xkZWQgYmFjayBpbnRvIDIuMiByZWxlYXNlcywgYnJpbmdpbmcKLSAgICBuZXcgZmVhdHVyZXMgc3VjaCBhcyA8ZmlsZW5hbWU+L3NiaW4vaG90cGx1ZzwvZmlsZW5hbWU+IHN1cHBvcnQsCi0gICAgbW9yZSBkcml2ZXJzLCBhbmQgbW9yZSByb2J1c3RuZXNzLgotICAgIFRoZSAyLjUga2VybmVsIHNlcmllcyBjb250aW51ZWQgc3VjaCBpbXByb3ZlbWVudHMsIGFuZCBhbHNvCi0gICAgd29ya2VkIG9uIFVTQiAyLjAgc3VwcG9ydCwKLSAgICBoaWdoZXIgcGVyZm9ybWFuY2UsCi0gICAgYmV0dGVyIGNvbnNpc3RlbmN5IGJldHdlZW4gaG9zdCBjb250cm9sbGVyIGRyaXZlcnMsCi0gICAgQVBJIHNpbXBsaWZpY2F0aW9uICh0byBtYWtlIGJ1Z3MgbGVzcyBsaWtlbHkpLAotICAgIGFuZCBwcm92aWRpbmcgaW50ZXJuYWwgImtlcm5lbGRvYyIgZG9jdW1lbnRhdGlvbi4KKyAgICA8cGFyYT5LZXJuZWwgZGV2ZWxvcGVycyBhZGRlZCBVU0Igc3VwcG9ydCB0byBMaW51eCBlYXJseSBpbiB0aGUgMi4yIGtlcm5lbAorICAgIHNlcmllcywgc2hvcnRseSBiZWZvcmUgMi4zIGRldmVsb3BtZW50IGZvcmtlZC4gIFVwZGF0ZXMgZnJvbSAyLjMgd2VyZQorICAgIHJlZ3VsYXJseSBmb2xkZWQgYmFjayBpbnRvIDIuMiByZWxlYXNlcywgd2hpY2ggaW1wcm92ZWQgcmVsaWFiaWxpdHkgYW5kCisgICAgYnJvdWdodCA8ZmlsZW5hbWU+L3NiaW4vaG90cGx1ZzwvZmlsZW5hbWU+IHN1cHBvcnQgYXMgd2VsbCBtb3JlIGRyaXZlcnMuCisgICAgU3VjaCBpbXByb3ZlbWVudHMgd2VyZSBjb250aW51ZWQgaW4gdGhlIDIuNSBrZXJuZWwgc2VyaWVzLCB3aGVyZSB0aGV5IGFkZGVkCisgICAgVVNCIDIuMCBzdXBwb3J0LCBpbXByb3ZlZCBwZXJmb3JtYW5jZSwgYW5kIG1hZGUgdGhlIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisgICAgKEhDRHMpIG1vcmUgY29uc2lzdGVudC4gIFRoZXkgYWxzbyBzaW1wbGlmaWVkIHRoZSBBUEkgKHRvIG1ha2UgYnVncyBsZXNzCisgICAgbGlrZWx5KSBhbmQgYWRkZWQgaW50ZXJuYWwgImtlcm5lbGRvYyIgZG9jdW1lbnRhdGlvbi4KICAgICA8L3BhcmE+CiAKICAgICA8cGFyYT5MaW51eCBjYW4gcnVuIGluc2lkZSBVU0IgZGV2aWNlcyBhcyB3ZWxsIGFzIG9uCiAgICAgdGhlIGhvc3RzIHRoYXQgY29udHJvbCB0aGUgZGV2aWNlcy4KLSAgICBCZWNhdXNlIHRoZSBMaW51eCAyLnggVVNCIHN1cHBvcnQgZXZvbHZlZCB0byBzdXBwb3J0IG1hc3MgbWFya2V0Ci0gICAgcGxhdGZvcm1zIHN1Y2ggYXMgQXBwbGUgTWFjaW50b3NoIG9yIFBDLWNvbXBhdGlibGUgc3lzdGVtcywKLSAgICBpdCBkaWRuJ3QgYWRkcmVzcyBkZXNpZ24gY29uY2VybnMgZm9yIHRob3NlIHR5cGVzIG9mIFVTQiBzeXN0ZW1zLgotICAgIFNvIGl0IGNhbid0IGJlIHVzZWQgaW5zaWRlIG1hc3MtbWFya2V0IFBEQXMsIG9yIG90aGVyIHBlcmlwaGVyYWxzLgotICAgIFVTQiBkZXZpY2UgZHJpdmVycyBydW5uaW5nIGluc2lkZSB0aG9zZSBMaW51eCBwZXJpcGhlcmFscworICAgIEJ1dCBVU0IgZGV2aWNlIGRyaXZlcnMgcnVubmluZyBpbnNpZGUgdGhvc2UgcGVyaXBoZXJhbHMKICAgICBkb24ndCBkbyB0aGUgc2FtZSB0aGluZ3MgYXMgdGhlIG9uZXMgcnVubmluZyBpbnNpZGUgaG9zdHMsCi0gICAgYW5kIHNvIHRoZXkndmUgYmVlbiBnaXZlbiBhIGRpZmZlcmVudCBuYW1lOgotICAgIHRoZXkncmUgY2FsbGVkIDxlbXBoYXNpcz5nYWRnZXQgZHJpdmVyczwvZW1waGFzaXM+LgotICAgIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgcHJlc2VudCBnYWRnZXQgZHJpdmVycy4KKyAgICBzbyB0aGV5J3ZlIGJlZW4gZ2l2ZW4gYSBkaWZmZXJlbnQgbmFtZToKKyAgICA8ZW1waGFzaXM+Z2FkZ2V0IGRyaXZlcnM8L2VtcGhhc2lzPi4KKyAgICBUaGlzIGRvY3VtZW50IGRvZXMgbm90IGNvdmVyIGdhZGdldCBkcml2ZXJzLgogICAgIDwvcGFyYT4KIAogICAgIDwvY2hhcHRlcj4KQEAgLTEwMywxNyArOTYsMTQgQEAKIDxjaGFwdGVyIGlkPSJob3N0Ij4KICAgICA8dGl0bGU+VVNCIEhvc3QtU2lkZSBBUEkgTW9kZWw8L3RpdGxlPgogCi0gICAgPHBhcmE+V2l0aGluIHRoZSBrZXJuZWwsCi0gICAgaG9zdC1zaWRlIGRyaXZlcnMgZm9yIFVTQiBkZXZpY2VzIHRhbGsgdG8gdGhlICJ1c2Jjb3JlIiBBUElzLgotICAgIFRoZXJlIGFyZSB0d28gdHlwZXMgb2YgcHVibGljICJ1c2Jjb3JlIiBBUElzLCB0YXJnZXR0ZWQgYXQgdHdvIGRpZmZlcmVudAotICAgIGxheWVycyBvZiBVU0IgZHJpdmVyLiAgVGhvc2UgYXJlCi0gICAgPGVtcGhhc2lzPmdlbmVyYWwgcHVycG9zZTwvZW1waGFzaXM+IGRyaXZlcnMsIGV4cG9zZWQgdGhyb3VnaAotICAgIGRyaXZlciBmcmFtZXdvcmtzIHN1Y2ggYXMgYmxvY2ssIGNoYXJhY3Rlciwgb3IgbmV0d29yayBkZXZpY2VzOwotICAgIGFuZCBkcml2ZXJzIHRoYXQgYXJlIDxlbXBoYXNpcz5wYXJ0IG9mIHRoZSBjb3JlPC9lbXBoYXNpcz4sCi0gICAgd2hpY2ggYXJlIGludm9sdmVkIGluIG1hbmFnaW5nIGEgVVNCIGJ1cy4KLSAgICBTdWNoIGNvcmUgZHJpdmVycyBpbmNsdWRlIHRoZSA8ZW1waGFzaXM+aHViPC9lbXBoYXNpcz4gZHJpdmVyLAotICAgIHdoaWNoIG1hbmFnZXMgdHJlZXMgb2YgVVNCIGRldmljZXMsIGFuZCBzZXZlcmFsIGRpZmZlcmVudCBraW5kcwotICAgIG9mIDxlbXBoYXNpcz5ob3N0IGNvbnRyb2xsZXIgZHJpdmVyIChIQ0QpPC9lbXBoYXNpcz4sCisgICAgPHBhcmE+SG9zdC1zaWRlIGRyaXZlcnMgZm9yIFVTQiBkZXZpY2VzIHRhbGsgdG8gdGhlICJ1c2Jjb3JlIiBBUElzLgorICAgIFRoZXJlIGFyZSB0d28uICBPbmUgaXMgaW50ZW5kZWQgZm9yCisgICAgPGVtcGhhc2lzPmdlbmVyYWwtcHVycG9zZTwvZW1waGFzaXM+IGRyaXZlcnMgKGV4cG9zZWQgdGhyb3VnaAorICAgIGRyaXZlciBmcmFtZXdvcmtzKSwgYW5kIHRoZSBvdGhlciBpcyBmb3IgZHJpdmVycyB0aGF0IGFyZQorICAgIDxlbXBoYXNpcz5wYXJ0IG9mIHRoZSBjb3JlPC9lbXBoYXNpcz4uCisgICAgU3VjaCBjb3JlIGRyaXZlcnMgaW5jbHVkZSB0aGUgPGVtcGhhc2lzPmh1YjwvZW1waGFzaXM+IGRyaXZlcgorICAgICh3aGljaCBtYW5hZ2VzIHRyZWVzIG9mIFVTQiBkZXZpY2VzKSBhbmQgc2V2ZXJhbCBkaWZmZXJlbnQga2luZHMKKyAgICBvZiA8ZW1waGFzaXM+aG9zdCBjb250cm9sbGVyIGRyaXZlcnM8L2VtcGhhc2lzPiwKICAgICB3aGljaCBjb250cm9sIGluZGl2aWR1YWwgYnVzc2VzLgogICAgIDwvcGFyYT4KIApAQCAtMTIyLDIxICsxMTIsMjEgQEAKICAgICAgCiAgICAgPGl0ZW1pemVkbGlzdD4KIAotCTxsaXN0aXRlbT48cGFyYT5VU0Igc3VwcG9ydHMgZm91ciBraW5kcyBvZiBkYXRhIHRyYW5zZmVyCi0JKGNvbnRyb2wsIGJ1bGssIGludGVycnVwdCwgYW5kIGlzb2Nocm9ub3VzKS4gIFR3byB0cmFuc2ZlcgotCXR5cGVzIHVzZSBiYW5kd2lkdGggYXMgaXQncyBhdmFpbGFibGUgKGNvbnRyb2wgYW5kIGJ1bGspLAotCXdoaWxlIHRoZSBvdGhlciB0d28gdHlwZXMgb2YgdHJhbnNmZXIgKGludGVycnVwdCBhbmQgaXNvY2hyb25vdXMpCisJPGxpc3RpdGVtPjxwYXJhPlVTQiBzdXBwb3J0cyBmb3VyIGtpbmRzIG9mIGRhdGEgdHJhbnNmZXJzCisJKGNvbnRyb2wsIGJ1bGssIGludGVycnVwdCwgYW5kIGlzb2Nocm9ub3VzKS4gIFR3byBvZiB0aGVtIChjb250cm9sCisJYW5kIGJ1bGspIHVzZSBiYW5kd2lkdGggYXMgaXQncyBhdmFpbGFibGUsCisJd2hpbGUgdGhlIG90aGVyIHR3byAoaW50ZXJydXB0IGFuZCBpc29jaHJvbm91cykKIAlhcmUgc2NoZWR1bGVkIHRvIHByb3ZpZGUgZ3VhcmFudGVlZCBiYW5kd2lkdGguCiAJPC9wYXJhPjwvbGlzdGl0ZW0+CiAKIAk8bGlzdGl0ZW0+PHBhcmE+VGhlIGRldmljZSBkZXNjcmlwdGlvbiBtb2RlbCBpbmNsdWRlcyBvbmUgb3IgbW9yZQogCSJjb25maWd1cmF0aW9ucyIgcGVyIGRldmljZSwgb25seSBvbmUgb2Ygd2hpY2ggaXMgYWN0aXZlIGF0IGEgdGltZS4KLQlEZXZpY2VzIHRoYXQgYXJlIGNhcGFibGUgb2YgaGlnaCBzcGVlZCBvcGVyYXRpb24gbXVzdCBhbHNvIHN1cHBvcnQKLQlmdWxsIHNwZWVkIGNvbmZpZ3VyYXRpb25zLCBhbG9uZyB3aXRoIGEgd2F5IHRvIGFzayBhYm91dCB0aGUKLQkib3RoZXIgc3BlZWQiIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgdXNlZC4KKwlEZXZpY2VzIHRoYXQgYXJlIGNhcGFibGUgb2YgaGlnaC1zcGVlZCBvcGVyYXRpb24gbXVzdCBhbHNvIHN1cHBvcnQKKwlmdWxsLXNwZWVkIGNvbmZpZ3VyYXRpb25zLCBhbG9uZyB3aXRoIGEgd2F5IHRvIGFzayBhYm91dCB0aGUKKwkib3RoZXIgc3BlZWQiIGNvbmZpZ3VyYXRpb25zIHdoaWNoIG1pZ2h0IGJlIHVzZWQuCiAJPC9wYXJhPjwvbGlzdGl0ZW0+CiAKLQk8bGlzdGl0ZW0+PHBhcmE+Q29uZmlndXJhdGlvbnMgaGF2ZSBvbmUgb3IgbW9yZSAiaW50ZXJmYWNlIiwgZWFjaAorCTxsaXN0aXRlbT48cGFyYT5Db25maWd1cmF0aW9ucyBoYXZlIG9uZSBvciBtb3JlICJpbnRlcmZhY2VzIiwgZWFjaAogCW9mIHdoaWNoIG1heSBoYXZlICJhbHRlcm5hdGUgc2V0dGluZ3MiLiAgSW50ZXJmYWNlcyBtYXkgYmUKIAlzdGFuZGFyZGl6ZWQgYnkgVVNCICJDbGFzcyIgc3BlY2lmaWNhdGlvbnMsIG9yIG1heSBiZSBzcGVjaWZpYyB0bwogCWEgdmVuZG9yIG9yIGRldmljZS48L3BhcmE+CkBAIC0xNjIsNyArMTUyLDcgQEAKIAk8L3BhcmE+PC9saXN0aXRlbT4KIAogCTxsaXN0aXRlbT48cGFyYT5UaGUgTGludXggVVNCIEFQSSBzdXBwb3J0cyBzeW5jaHJvbm91cyBjYWxscyBmb3IKLQljb250cm9sIGFuZCBidWxrIG1lc3NhZ2luZy4KKwljb250cm9sIGFuZCBidWxrIG1lc3NhZ2VzLgogCUl0IGFsc28gc3VwcG9ydHMgYXN5bmNobm91cyBjYWxscyBmb3IgYWxsIGtpbmRzIG9mIGRhdGEgdHJhbnNmZXIsCiAJdXNpbmcgcmVxdWVzdCBzdHJ1Y3R1cmVzIGNhbGxlZCAiVVJCcyIgKFVTQiBSZXF1ZXN0IEJsb2NrcykuCiAJPC9wYXJhPjwvbGlzdGl0ZW0+CkBAIC00NjMsMTQgKzQ1MywyNSBAQAogCSAgICBmaWxlIGluIHlvdXIgTGludXgga2VybmVsIHNvdXJjZXMuCiAJICAgIDwvcGFyYT4KIAotCSAgICA8cGFyYT5PdGhlcndpc2UgdGhlIG1haW4gdXNlIGZvciB0aGlzIGZpbGUgZnJvbSBwcm9ncmFtcwotCSAgICBpcyB0byBwb2xsKCkgaXQgdG8gZ2V0IG5vdGlmaWNhdGlvbnMgb2YgdXNiIGRldmljZXMKLQkgICAgYXMgdGhleSdyZSBwbHVnZ2VkIG9yIHVucGx1Z2dlZC4KLQkgICAgVG8gc2VlIHdoYXQgY2hhbmdlZCwgeW91J2QgbmVlZCB0byByZWFkIHRoZSBmaWxlIGFuZAotCSAgICBjb21wYXJlICJiZWZvcmUiIGFuZCAiYWZ0ZXIiIGNvbnRlbnRzLCBzY2FuIHRoZSBmaWxlc3lzdGVtLAotCSAgICBvciBzZWUgaXRzIGhvdHBsdWcgZXZlbnQuCi0JICAgIDwvcGFyYT4KKwkgICAgPHBhcmE+VGhpcyBmaWxlLCBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSBwb2xsKCkgc3lzdGVtIGNhbGwsIGNhbgorCSAgICBhbHNvIGJlIHVzZWQgdG8gZGV0ZWN0IHdoZW4gZGV2aWNlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZDoKKzxwcm9ncmFtbGlzdGluZz5pbnQgZmQ7CitzdHJ1Y3QgcG9sbGZkIHBmZDsKIAorZmQgPSBvcGVuKCIvcHJvYy9idXMvdXNiL2RldmljZXMiLCBPX1JET05MWSk7CitwZmQgPSB7IGZkLCBQT0xMSU4sIDAgfTsKK2ZvciAoOzspIHsKKwkvKiBUaGUgZmlyc3QgdGltZSB0aHJvdWdoLCB0aGlzIGNhbGwgd2lsbCByZXR1cm4gaW1tZWRpYXRlbHkuICovCisJcG9sbCgmYW1wO3BmZCwgMSwgLTEpOworCisJLyogVG8gc2VlIHdoYXQncyBjaGFuZ2VkLCBjb21wYXJlIHRoZSBmaWxlJ3MgcHJldmlvdXMgYW5kIGN1cnJlbnQKKwkgICBjb250ZW50cyBvciBzY2FuIHRoZSBmaWxlc3lzdGVtLiAgKFNjYW5uaW5nIGlzIG1vcmUgcHJlY2lzZS4pICovCit9PC9wcm9ncmFtbGlzdGluZz4KKwkgICAgTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3IgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBmb3IgaW5mb3JtYXRpb25hbAorCSAgICBhbmQgZGVidWcgcHVycG9zZXMuICBJdCB3b3VsZCBiZSBtb3JlIGFwcHJvcHJpYXRlIHRvIHVzZSBwcm9ncmFtcworCSAgICBzdWNoIGFzIHVkZXYgb3IgSEFMIHRvIGluaXRpYWxpemUgYSBkZXZpY2Ugb3Igc3RhcnQgYSB1c2VyLW1vZGUKKwkgICAgaGVscGVyIHByb2dyYW0sIGZvciBpbnN0YW5jZS4KKwkgICAgPC9wYXJhPgogCTwvc2VjdDE+CiAKIAk8c2VjdDE+CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL0hPV1RPIGIvRG9jdW1lbnRhdGlvbi9IT1dUTwppbmRleCAxZDY1NjA0Li5kNmYzZGQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0hPV1RPCisrKyBiL0RvY3VtZW50YXRpb24vSE9XVE8KQEAgLTM3NSw2ICszNzUsMjYgQEAKIHByb2JsZW0uCiAKIAorTWFuYWdpbmcgYnVnIHJlcG9ydHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK09uZSBvZiB0aGUgYmVzdCB3YXlzIHRvIHB1dCBpbnRvIHByYWN0aWNlIHlvdXIgaGFja2luZyBza2lsbHMgaXMgYnkgZml4aW5nCitidWdzIHJlcG9ydGVkIGJ5IG90aGVyIHBlb3BsZS4gTm90IG9ubHkgeW91IHdpbGwgaGVscCB0byBtYWtlIHRoZSBrZXJuZWwKK21vcmUgc3RhYmxlLCB5b3UnbGwgbGVhcm4gdG8gZml4IHJlYWwgd29ybGQgcHJvYmxlbXMgYW5kIHlvdSB3aWxsIGltcHJvdmUKK3lvdXIgc2tpbGxzLCBhbmQgb3RoZXIgZGV2ZWxvcGVycyB3aWxsIGJlIGF3YXJlIG9mIHlvdXIgcHJlc2VuY2UuIEZpeGluZworYnVncyBpcyBvbmUgb2YgdGhlIGJlc3Qgd2F5cyB0byBlYXJuIG1lcml0IGFtb25nc3QgdGhlIGRldmVsb3BlcnMsIGJlY2F1c2UKK25vdCBtYW55IHBlb3BsZSBsaWtlIHdhc3RpbmcgdGltZSBmaXhpbmcgb3RoZXIgcGVvcGxlJ3MgYnVncy4KKworVG8gd29yayBpbiB0aGUgYWxyZWFkeSByZXBvcnRlZCBidWcgcmVwb3J0cywgZ28gdG8gaHR0cDovL2J1Z3ppbGxhLmtlcm5lbC5vcmcuCitJZiB5b3Ugd2FudCB0byBiZSBhZHZpc2VkIG9mIHRoZSBmdXR1cmUgYnVnIHJlcG9ydHMsIHlvdSBjYW4gc3Vic2NyaWJlIHRvIHRoZQorYnVnbWUtbmV3IG1haWxpbmcgbGlzdCAob25seSBuZXcgYnVnIHJlcG9ydHMgYXJlIG1haWxlZCBoZXJlKSBvciB0byB0aGUKK2J1Z21lLWphbml0b3IgbWFpbGluZyBsaXN0IChldmVyeSBjaGFuZ2UgaW4gdGhlIGJ1Z3ppbGxhIGlzIG1haWxlZCBoZXJlKQorCisJaHR0cDovL2xpc3RzLm9zZGwub3JnL21haWxtYW4vbGlzdGluZm8vYnVnbWUtbmV3CisJaHR0cDovL2xpc3RzLm9zZGwub3JnL21haWxtYW4vbGlzdGluZm8vYnVnbWUtamFuaXRvcnMKKworCisKIE1haWxpbmcgbGlzdHMKIC0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dCBiL0RvY3VtZW50YXRpb24vSVBNSS50eHQKaW5kZXggMDI1NjgwNS4uNzc1NmUwOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9JUE1JLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL0lQTUkudHh0CkBAIC0zMjYsOSArMzI2LDEyIEBACiAKIEZvciByZWNlaXZpbmcgY29tbWFuZHMsIHlvdSBoYXZlIHRvIGluZGl2aWR1YWxseSByZWdpc3RlciBjb21tYW5kcyB5b3UKIHdhbnQgdG8gcmVjZWl2ZS4gIENhbGwgaXBtaV9yZWdpc3Rlcl9mb3JfY21kKCkgYW5kIHN1cHBseSB0aGUgbmV0Zm4KLWFuZCBjb21tYW5kIG5hbWUgZm9yIGVhY2ggY29tbWFuZCB5b3Ugd2FudCB0byByZWNlaXZlLiAgT25seSBvbmUgdXNlcgotbWF5IGJlIHJlZ2lzdGVyZWQgZm9yIGVhY2ggbmV0Zm4vY21kLCBidXQgZGlmZmVyZW50IHVzZXJzIG1heSByZWdpc3RlcgotZm9yIGRpZmZlcmVudCBjb21tYW5kcy4KK2FuZCBjb21tYW5kIG5hbWUgZm9yIGVhY2ggY29tbWFuZCB5b3Ugd2FudCB0byByZWNlaXZlLiAgWW91IGFsc28KK3NwZWNpZnkgYSBiaXRtYXNrIG9mIHRoZSBjaGFubmVscyB5b3Ugd2FudCB0byByZWNlaXZlIHRoZSBjb21tYW5kIGZyb20KKyhvciB1c2UgSVBNSV9DSEFOX0FMTCBmb3IgYWxsIGNoYW5uZWxzIGlmIHlvdSBkb24ndCBjYXJlKS4gIE9ubHkgb25lCit1c2VyIG1heSBiZSByZWdpc3RlcmVkIGZvciBlYWNoIG5ldGZuL2NtZC9jaGFubmVsLCBidXQgZGlmZmVyZW50IHVzZXJzCittYXkgcmVnaXN0ZXIgZm9yIGRpZmZlcmVudCBjb21tYW5kcywgb3IgdGhlIHNhbWUgY29tbWFuZCBpZiB0aGUKK2NoYW5uZWwgYml0bWFza3MgZG8gbm90IG92ZXJsYXAuCiAKIEZyb20gdXNlcmxhbmQsIGVxdWl2YWxlbnQgSU9DVExzIGFyZSBwcm92aWRlZCB0byBkbyB0aGVzZSBmdW5jdGlvbnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vU3VibWl0Q2hlY2tsaXN0IGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKaW5kZXggYTEwYmZiNi4uN2FjNjFmNiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKKysrIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXRDaGVja2xpc3QKQEAgLTYxLDMgKzYxLDggQEAKICAgICBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dC4KIAogMTg6IEFsbCBuZXcgbW9kdWxlIHBhcmFtZXRlcnMgYXJlIGRvY3VtZW50ZWQgd2l0aCBNT0RVTEVfUEFSTV9ERVNDKCkKKworMTk6IEFsbCBuZXcgdXNlcnNwYWNlIGludGVyZmFjZXMgYXJlIGRvY3VtZW50ZWQgaW4gRG9jdW1lbnRhdGlvbi9BQkkvLgorICAgIFNlZSBEb2N1bWVudGF0aW9uL0FCSS9SRUFETUUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKzIwOiBDaGVjayB0aGF0IGl0IGFsbCBwYXNzZXMgYG1ha2UgaGVhZGVyc19jaGVjaycuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nRHJpdmVycwppbmRleCA2YmQzMGZkLi41OGJlYWQwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdEcml2ZXJzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ0RyaXZlcnMKQEAgLTU5LDExICs1OSwxMSBAQAogCQlhcmUgdGhlIHNhbWUgcGVyc29uL2VudGl0eS4gSWYgbm90LCB0aGUgbmFtZSBvZgogCQl0aGUgcGVyc29uL2VudGl0eSBhdXRob3JpemluZyB1c2Ugb2YgR1BMIHNob3VsZCBiZQogCQlsaXN0ZWQgaW4gY2FzZSBpdCdzIG5lY2Vzc2FyeSB0byB2ZXJpZnkgdGhlIHdpbGwgb2YKLQkJdGhlIGNvcHJpZ2h0IG93bmVyLgorCQl0aGUgY29weXJpZ2h0IG93bmVyLgogCiBJbnRlcmZhY2VzOglJZiB5b3VyIGRyaXZlciB1c2VzIGV4aXN0aW5nIGludGVyZmFjZXMgYW5kIGJlaGF2ZXMgbGlrZQogCQlvdGhlciBkcml2ZXJzIGluIHRoZSBzYW1lIGNsYXNzIGl0IHdpbGwgYmUgbXVjaCBtb3JlIGxpa2VseQotCQl0byBiZSBhY2NlcHRlZCB0aGFuIGlmIGl0IGludmVudHMgZ3JhdHVpdG91cyBuZXcgb25lcy4gCisJCXRvIGJlIGFjY2VwdGVkIHRoYW4gaWYgaXQgaW52ZW50cyBncmF0dWl0b3VzIG5ldyBvbmVzLgogCQlJZiB5b3UgbmVlZCB0byBpbXBsZW1lbnQgYSBjb21tb24gQVBJIG92ZXIgTGludXggYW5kIE5UCiAJCWRyaXZlcnMgZG8gaXQgaW4gdXNlcnNwYWNlLgogCkBAIC04OCw3ICs4OCw3IEBACiAJCWl0IHdpbGwgZ28gaW4gdGhlIGJpdGJ1Y2tldC4KIAogQ29udHJvbDoJSW4gZ2VuZXJhbCBpZiB0aGVyZSBpcyBhY3RpdmUgbWFpbnRhaW5hbmNlIG9mIGEgZHJpdmVyIGJ5Ci0JCXRoZSBhdXRob3IgdGhlbiBwYXRjaGVzIHdpbGwgYmUgcmVkaXJlY3RlZCB0byB0aGVtIHVubGVzcyAKKwkJdGhlIGF1dGhvciB0aGVuIHBhdGNoZXMgd2lsbCBiZSByZWRpcmVjdGVkIHRvIHRoZW0gdW5sZXNzCiAJCXRoZXkgYXJlIHRvdGFsbHkgb2J2aW91cyBhbmQgd2l0aG91dCBuZWVkIG9mIGNoZWNraW5nLgogCQlJZiB5b3Ugd2FudCB0byBiZSB0aGUgY29udGFjdCBhbmQgdXBkYXRlIHBvaW50IGZvciB0aGUKIAkJZHJpdmVyIGl0IGlzIGEgZ29vZCBpZGVhIHRvIHN0YXRlIHRoaXMgaW4gdGhlIGNvbW1lbnRzLApAQCAtMTAwLDcgKzEwMCw3IEBACiBWZW5kb3I6CQlCZWluZyB0aGUgaGFyZHdhcmUgdmVuZG9yIGFuZCBtYWludGFpbmluZyB0aGUgZHJpdmVyIGlzCiAJCW9mdGVuIGEgZ29vZCB0aGluZy4gSWYgdGhlcmUgaXMgYSBzdGFibGUgd29ya2luZyBkcml2ZXIgZnJvbQogCQlvdGhlciBwZW9wbGUgYWxyZWFkeSBpbiB0aGUgdHJlZSBkb24ndCBleHBlY3QgJ3dlIGFyZSB0aGUKLQkJdmVuZG9yJyB0byBnZXQgeW91ciBkcml2ZXIgY2hvc2VuLiBJZGVhbGx5IHdvcmsgd2l0aCB0aGUgCisJCXZlbmRvcicgdG8gZ2V0IHlvdXIgZHJpdmVyIGNob3Nlbi4gSWRlYWxseSB3b3JrIHdpdGggdGhlCiAJCWV4aXN0aW5nIGRyaXZlciBhdXRob3IgdG8gYnVpbGQgYSBzaW5nbGUgcGVyZmVjdCBkcml2ZXIuCiAKIEF1dGhvcjoJCUl0IGRvZXNuJ3QgbWF0dGVyIGlmIGEgbGFyZ2UgTGludXggY29tcGFueSB3cm90ZSB0aGUgZHJpdmVyLApAQCAtMTE2LDE3ICsxMTYsMTMgQEAKIAlmdHAuPz8ua2VybmVsLm9yZzovcHViL2xpbnV4L2tlcm5lbC8uLi4KIAk/PyA9PSB5b3VyIGNvdW50cnkgY29kZSwgc3VjaCBhcyAidXMiLCAidWsiLCAiZnIiLCBldGMuCiAKLUxpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3Q6CQkKK0xpbnV4IGtlcm5lbCBtYWlsaW5nIGxpc3Q6CiAJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogCVttYWlsIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcgdG8gc3Vic2NyaWJlXQogCiBMaW51eCBEZXZpY2UgRHJpdmVycywgVGhpcmQgRWRpdGlvbiAoY292ZXJzIDIuNi4xMCk6CiAJaHR0cDovL2x3bi5uZXQvS2VybmVsL0xERDMvICAoZnJlZSB2ZXJzaW9uKQogCi1LZXJuZWwgdHJhZmZpYzoKLQlXZWVrbHkgc3VtbWFyeSBvZiBrZXJuZWwgbGlzdCBhY3Rpdml0eSAobXVjaCBlYXNpZXIgdG8gcmVhZCkKLQlodHRwOi8vd3d3Lmtlcm5lbHRyYWZmaWMub3JnL2tlcm5lbC10cmFmZmljLwotCiBMV04ubmV0OgogCVdlZWtseSBzdW1tYXJ5IG9mIGtlcm5lbCBkZXZlbG9wbWVudCBhY3Rpdml0eSAtIGh0dHA6Ly9sd24ubmV0LwogCTIuNiBBUEkgY2hhbmdlczoKQEAgLTE0NSwxMSArMTQxLDggQEAKIExpbnV4IFVTQiBwcm9qZWN0OgogCWh0dHA6Ly93d3cubGludXgtdXNiLm9yZy8KIAotSG93IHRvIE5PVCB3cml0ZSBrZXJuZWwgZHJpdmVyIGJ5IGFyamFudkByZWRoYXQuY29tCi0JaHR0cDovL3Blb3BsZS5yZWRoYXQuY29tL2FyamFudi9vbHNwYXBlci5wZGYKK0hvdyB0byBOT1Qgd3JpdGUga2VybmVsIGRyaXZlciBieSBBcmphbiB2YW4gZGUgVmVuOgorCWh0dHA6Ly93d3cuZmVucnVzLm9yZy9ob3ctdG8tbm90LXdyaXRlLWEtZGV2aWNlLWRyaXZlci1wYXBlci5wZGYKIAogS2VybmVsIEphbml0b3I6CiAJaHR0cDovL2phbml0b3Iua2VybmVsbmV3Ymllcy5vcmcvCi0KLS0tCi1MYXN0IHVwZGF0ZWQgb24gMTcgTm92IDIwMDUuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzIGIvRG9jdW1lbnRhdGlvbi9TdWJtaXR0aW5nUGF0Y2hlcwppbmRleCBkNDJhYjRjLi4zMDJkMTQ4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL1N1Ym1pdHRpbmdQYXRjaGVzCisrKyBiL0RvY3VtZW50YXRpb24vU3VibWl0dGluZ1BhdGNoZXMKQEAgLTE3MywxNSArMTczLDE1IEBACiB0cml2aWFsQGtlcm5lbC5vcmcgbWFuYWdlZCBieSBBZHJpYW4gQnVuazsgd2hpY2ggY29sbGVjdHMgInRyaXZpYWwiCiBwYXRjaGVzLiBUcml2aWFsIHBhdGNoZXMgbXVzdCBxdWFsaWZ5IGZvciBvbmUgb2YgdGhlIGZvbGxvd2luZyBydWxlczoKICBTcGVsbGluZyBmaXhlcyBpbiBkb2N1bWVudGF0aW9uCi0gU3BlbGxpbmcgZml4ZXMgd2hpY2ggY291bGQgYnJlYWsgZ3JlcCgxKS4KKyBTcGVsbGluZyBmaXhlcyB3aGljaCBjb3VsZCBicmVhayBncmVwKDEpCiAgV2FybmluZyBmaXhlcyAoY2x1dHRlcmluZyB3aXRoIHVzZWxlc3Mgd2FybmluZ3MgaXMgYmFkKQogIENvbXBpbGF0aW9uIGZpeGVzIChvbmx5IGlmIHRoZXkgYXJlIGFjdHVhbGx5IGNvcnJlY3QpCiAgUnVudGltZSBmaXhlcyAob25seSBpZiB0aGV5IGFjdHVhbGx5IGZpeCB0aGluZ3MpCi0gUmVtb3ZpbmcgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zL21hY3JvcyAoZWcuIGNoZWNrX3JlZ2lvbikuCisgUmVtb3ZpbmcgdXNlIG9mIGRlcHJlY2F0ZWQgZnVuY3Rpb25zL21hY3JvcyAoZWcuIGNoZWNrX3JlZ2lvbikKICBDb250YWN0IGRldGFpbCBhbmQgZG9jdW1lbnRhdGlvbiBmaXhlcwogIE5vbi1wb3J0YWJsZSBjb2RlIHJlcGxhY2VkIGJ5IHBvcnRhYmxlIGNvZGUgKGV2ZW4gaW4gYXJjaC1zcGVjaWZpYywKICBzaW5jZSBwZW9wbGUgY29weSwgYXMgbG9uZyBhcyBpdCdzIHRyaXZpYWwpCi0gQW55IGZpeCBieSB0aGUgYXV0aG9yL21haW50YWluZXIgb2YgdGhlIGZpbGUuIChpZS4gcGF0Y2ggbW9ua2V5CisgQW55IGZpeCBieSB0aGUgYXV0aG9yL21haW50YWluZXIgb2YgdGhlIGZpbGUgKGllLiBwYXRjaCBtb25rZXkKICBpbiByZS10cmFuc21pc3Npb24gbW9kZSkKIFVSTDogPGh0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgva2VybmVsL3Blb3BsZS9idW5rL3RyaXZpYWwvPgogCkBAIC0yMDksNiArMjA5LDE5IEBACiB5b3UgdG8gcmUtc2VuZCB0aGVtIHVzaW5nIE1JTUUuCiAKIAorV0FSTklORzogU29tZSBtYWlsZXJzIGxpa2UgTW96aWxsYSBzZW5kIHlvdXIgbWVzc2FnZXMgd2l0aAorLS0tLSBtZXNzYWdlIGhlYWRlciAtLS0tCitDb250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9dXMtYXNjaWk7IGZvcm1hdD1mbG93ZWQKKy0tLS0gbWVzc2FnZSBoZWFkZXIgLS0tLQorVGhlIHByb2JsZW0gaXMgdGhhdCAiZm9ybWF0PWZsb3dlZCIgbWFrZXMgc29tZSBvZiB0aGUgbWFpbGVycworb24gcmVjZWl2aW5nIHNpZGUgdG8gcmVwbGFjZSBUQUJzIHdpdGggc3BhY2VzIGFuZCBkbyBzaW1pbGFyCitjaGFuZ2VzLiBUaHVzIHRoZSBwYXRjaGVzIGZyb20geW91IGNhbiBsb29rIGNvcnJ1cHRlZC4KKworVG8gZml4IHRoaXMganVzdCBtYWtlIHlvdXIgbW96aWxsYSBkZWZhdWx0cy9wcmVmL21haWxuZXdzLmpzIGZpbGUgdG8gbG9vayBsaWtlOgorcHJlZigibWFpbG5ld3Muc2VuZF9wbGFpbnRleHRfZmxvd2VkIiwgZmFsc2UpOyAvLyBSRkMgMjY0Nj09PT09PT0KK3ByZWYoIm1haWxuZXdzLmRpc3BsYXkuZGlzYWJsZV9mb3JtYXRfZmxvd2VkX3N1cHBvcnQiLCB0cnVlKTsKKworCiAKIDcpIEUtbWFpbCBzaXplLgogCkBAIC0yNDUsMTMgKzI1OCwxMyBAQAogSXQgaXMgcXVpdGUgY29tbW9uIGZvciBMaW51cyB0byAiZHJvcCIgeW91ciBwYXRjaCB3aXRob3V0IGNvbW1lbnQuCiBUaGF0J3MgdGhlIG5hdHVyZSBvZiB0aGUgc3lzdGVtLiAgSWYgaGUgZHJvcHMgeW91ciBwYXRjaCwgaXQgY291bGQgYmUKIGR1ZSB0bwotKiBZb3VyIHBhdGNoIGRpZCBub3QgYXBwbHkgY2xlYW5seSB0byB0aGUgbGF0ZXN0IGtlcm5lbCB2ZXJzaW9uCisqIFlvdXIgcGF0Y2ggZGlkIG5vdCBhcHBseSBjbGVhbmx5IHRvIHRoZSBsYXRlc3Qga2VybmVsIHZlcnNpb24uCiAqIFlvdXIgcGF0Y2ggd2FzIG5vdCBzdWZmaWNpZW50bHkgZGlzY3Vzc2VkIG9uIGxpbnV4LWtlcm5lbC4KLSogQSBzdHlsZSBpc3N1ZSAoc2VlIHNlY3Rpb24gMiksCi0qIEFuIGUtbWFpbCBmb3JtYXR0aW5nIGlzc3VlIChyZS1yZWFkIHRoaXMgc2VjdGlvbikKLSogQSB0ZWNobmljYWwgcHJvYmxlbSB3aXRoIHlvdXIgY2hhbmdlCi0qIEhlIGdldHMgdG9ucyBvZiBlLW1haWwsIGFuZCB5b3VycyBnb3QgbG9zdCBpbiB0aGUgc2h1ZmZsZQotKiBZb3UgYXJlIGJlaW5nIGFubm95aW5nIChTZWUgRmlndXJlIDEpCisqIEEgc3R5bGUgaXNzdWUgKHNlZSBzZWN0aW9uIDIpLgorKiBBbiBlLW1haWwgZm9ybWF0dGluZyBpc3N1ZSAocmUtcmVhZCB0aGlzIHNlY3Rpb24pLgorKiBBIHRlY2huaWNhbCBwcm9ibGVtIHdpdGggeW91ciBjaGFuZ2UuCisqIEhlIGdldHMgdG9ucyBvZiBlLW1haWwsIGFuZCB5b3VycyBnb3QgbG9zdCBpbiB0aGUgc2h1ZmZsZS4KKyogWW91IGFyZSBiZWluZyBhbm5veWluZy4KIAogV2hlbiBpbiBkb3VidCwgc29saWNpdCBjb21tZW50cyBvbiBsaW51eC1rZXJuZWwgbWFpbGluZyBsaXN0LgogCkBAIC00NzYsMTAgKzQ4OSwxMCBAQAogQW5kcmV3IE1vcnRvbiwgIlRoZSBwZXJmZWN0IHBhdGNoIiAodHBwKS4KICAgPGh0dHA6Ly93d3cuemlwLmNvbS5hdS9+YWtwbS9saW51eC9wYXRjaGVzL3N0dWZmL3RwcC50eHQ+CiAKLUplZmYgR2FyemlrLCAiTGludXgga2VybmVsIHBhdGNoIHN1Ym1pc3Npb24gZm9ybWF0LiIKK0plZmYgR2FyemlrLCAiTGludXgga2VybmVsIHBhdGNoIHN1Ym1pc3Npb24gZm9ybWF0Ii4KICAgPGh0dHA6Ly9saW51eC55eXoudXMvcGF0Y2gtZm9ybWF0Lmh0bWw+CiAKLUdyZWcgS3JvYWgtSGFydG1hbiAiSG93IHRvIHBpc3Mgb2ZmIGEga2VybmVsIHN1YnN5c3RlbSBtYWludGFpbmVyIi4KK0dyZWcgS3JvYWgtSGFydG1hbiwgIkhvdyB0byBwaXNzIG9mZiBhIGtlcm5lbCBzdWJzeXN0ZW0gbWFpbnRhaW5lciIuCiAgIDxodHRwOi8vd3d3Lmtyb2FoLmNvbS9sb2cvMjAwNS8wMy8zMS8+CiAgIDxodHRwOi8vd3d3Lmtyb2FoLmNvbS9sb2cvMjAwNS8wNy8wOC8+CiAgIDxodHRwOi8vd3d3Lmtyb2FoLmNvbS9sb2cvMjAwNS8xMC8xOS8+CkBAIC00ODgsOSArNTAxLDkgQEAKIE5PISEhISBObyBtb3JlIGh1Z2UgcGF0Y2ggYm9tYnMgdG8gbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZyBwZW9wbGUhCiAgIDxodHRwOi8vbWFyYy50aGVhaW1zZ3JvdXAuY29tLz9sPWxpbnV4LWtlcm5lbCZtPTExMjExMjc0OTkxMjk0NCZ3PTI+CiAKLUtlcm5lbCBEb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlCitLZXJuZWwgRG9jdW1lbnRhdGlvbi9Db2RpbmdTdHlsZToKICAgPGh0dHA6Ly9zb3NkZy5vcmcvfmNveXdvbGYvbHhyL3NvdXJjZS9Eb2N1bWVudGF0aW9uL0NvZGluZ1N0eWxlPgogCi1MaW51cyBUb3J2YWxkJ3MgbWFpbCBvbiB0aGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdDoKK0xpbnVzIFRvcnZhbGRzJ3MgbWFpbCBvbiB0aGUgY2Fub25pY2FsIHBhdGNoIGZvcm1hdDoKICAgPGh0dHA6Ly9sa21sLm9yZy9sa21sLzIwMDUvNC83LzE4Mz4KIC0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMgYi9Eb2N1bWVudGF0aW9uL2FjY291bnRpbmcvZ2V0ZGVsYXlzLmMKaW5kZXggNzk1Y2EzOS4uYjExNzkyYSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL2dldGRlbGF5cy5jCisrKyBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy9nZXRkZWxheXMuYwpAQCAtMjg1LDcgKzI4NSw3IEBACiAJaWYgKG1hc2tzZXQpIHsKIAkJcmMgPSBzZW5kX2NtZChubF9zZCwgaWQsIG15cGlkLCBUQVNLU1RBVFNfQ01EX0dFVCwKIAkJCSAgICAgIFRBU0tTVEFUU19DTURfQVRUUl9SRUdJU1RFUl9DUFVNQVNLLAotCQkJICAgICAgJmNwdW1hc2ssIHNpemVvZihjcHVtYXNrKSk7CisJCQkgICAgICAmY3B1bWFzaywgc3RybGVuKGNwdW1hc2spICsgMSk7CiAJCVBSSU5URigiU2VudCByZWdpc3RlciBjcHVtYXNrLCByZXR2YWwgJWRcbiIsIHJjKTsKIAkJaWYgKHJjIDwgMCkgewogCQkJcHJpbnRmKCJlcnJvciBzZW5kaW5nIHJlZ2lzdGVyIGNwdW1hc2tcbiIpOwpAQCAtMzE1LDcgKzMxNSw4IEBACiAJCX0KIAkJaWYgKG1zZy5uLm5sbXNnX3R5cGUgPT0gTkxNU0dfRVJST1IgfHwKIAkJICAgICFOTE1TR19PSygoJm1zZy5uKSwgcmVwX2xlbikpIHsKLQkJCXByaW50ZigiZmF0YWwgcmVwbHkgZXJyb3IsICBlcnJubyAlZFxuIiwgZXJybm8pOworCQkJc3RydWN0IG5sbXNnZXJyICplcnIgPSBOTE1TR19EQVRBKCZtc2cpOworCQkJcHJpbnRmKCJmYXRhbCByZXBseSBlcnJvciwgIGVycm5vICVkXG4iLCBlcnItPmVycm9yKTsKIAkJCWdvdG8gZG9uZTsKIAkJfQogCkBAIC0zODMsNyArMzg0LDcgQEAKIAlpZiAobWFza3NldCkgewogCQlyYyA9IHNlbmRfY21kKG5sX3NkLCBpZCwgbXlwaWQsIFRBU0tTVEFUU19DTURfR0VULAogCQkJICAgICAgVEFTS1NUQVRTX0NNRF9BVFRSX0RFUkVHSVNURVJfQ1BVTUFTSywKLQkJCSAgICAgICZjcHVtYXNrLCBzaXplb2YoY3B1bWFzaykpOworCQkJICAgICAgJmNwdW1hc2ssIHN0cmxlbihjcHVtYXNrKSArIDEpOwogCQlwcmludGYoIlNlbnQgZGVyZWdpc3RlciBtYXNrLCByZXR2YWwgJWRcbiIsIHJjKTsKIAkJaWYgKHJjIDwgMCkKIAkJCWVycihyYywgImVycm9yIHNlbmRpbmcgZGVyZWdpc3RlciBjcHVtYXNrXG4iKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy90YXNrc3RhdHMtc3RydWN0LnR4dCBiL0RvY3VtZW50YXRpb24vYWNjb3VudGluZy90YXNrc3RhdHMtc3RydWN0LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjFjNzk3Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9hY2NvdW50aW5nL3Rhc2tzdGF0cy1zdHJ1Y3QudHh0CkBAIC0wLDAgKzEsMTYxIEBACitUaGUgc3RydWN0IHRhc2tzdGF0cworLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBkb2N1bWVudCBjb250YWlucyBhbiBleHBsYW5hdGlvbiBvZiB0aGUgc3RydWN0IHRhc2tzdGF0cyBmaWVsZHMuCisKK1RoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgZ3JvdXBzIG9mIGZpZWxkcyBpbiB0aGUgc3RydWN0IHRhc2tzdGF0czoKKworMSkgQ29tbW9uIGFuZCBiYXNpYyBhY2NvdW50aW5nIGZpZWxkcworICAgIElmIENPTkZJR19UQVNLU1RBVFMgaXMgc2V0LCB0aGUgdGFza3N0YXRzIGludGVmYWNlIGlzIGVuYWJsZWQgYW5kCisgICAgdGhlIGNvbW1vbiBmaWVsZHMgYW5kIGJhc2ljIGFjY291bnRpbmcgZmllbGRzIGFyZSBjb2xsZWN0ZWQgZm9yCisgICAgZGVsaXZlcnkgYXQgZG9fZXhpdCgpIG9mIGEgdGFzay4KKzIpIERlbGF5IGFjY291bnRpbmcgZmllbGRzCisgICAgVGhlc2UgZmllbGRzIGFyZSBwbGFjZWQgYmV0d2VlbgorICAgIC8qIERlbGF5IGFjY291bnRpbmcgZmllbGRzIHN0YXJ0ICovCisgICAgYW5kCisgICAgLyogRGVsYXkgYWNjb3VudGluZyBmaWVsZHMgZW5kICovCisgICAgVGhlaXIgdmFsdWVzIGFyZSBjb2xsZWN0ZWQgaWYgQ09ORklHX1RBU0tfREVMQVlfQUNDVCBpcyBzZXQuCiszKSBFeHRlbmRlZCBhY2NvdW50aW5nIGZpZWxkcworICAgIFRoZXNlIGZpZWxkcyBhcmUgcGxhY2VkIGJldHdlZW4KKyAgICAvKiBFeHRlbmRlZCBhY2NvdW50aW5nIGZpZWxkcyBzdGFydCAqLworICAgIGFuZAorICAgIC8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIGVuZCAqLworICAgIFRoZWlyIHZhbHVlcyBhcmUgY29sbGVjdGVkIGlmIENPTkZJR19UQVNLX1hBQ0NUIGlzIHNldC4KKworRnV0dXJlIGV4dGVuc2lvbiBzaG91bGQgYWRkIGZpZWxkcyB0byB0aGUgZW5kIG9mIHRoZSB0YXNrc3RhdHMgc3RydWN0LCBhbmQKK3Nob3VsZCBub3QgY2hhbmdlIHRoZSByZWxhdGl2ZSBwb3NpdGlvbiBvZiBlYWNoIGZpZWxkIHdpdGhpbiB0aGUgc3RydWN0LgorCisKK3N0cnVjdCB0YXNrc3RhdHMgeworCisxKSBDb21tb24gYW5kIGJhc2ljIGFjY291bnRpbmcgZmllbGRzOgorCS8qIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIHN0cnVjdC4gVGhpcyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvCisJICogVEFLU1RBVFNfVkVSU0lPTiwgd2hpY2ggaXMgZGVmaW5lZCBpbiA8bGludXgvdGFza3N0YXRzLmg+LgorCSAqIEVhY2ggdGltZSB0aGUgc3RydWN0IGlzIGNoYW5nZWQsIHRoZSB2YWx1ZSBzaG91bGQgYmUgaW5jcmVtZW50ZWQuCisJICovCisJX191MTYJdmVyc2lvbjsKKworICAJLyogVGhlIGV4aXQgY29kZSBvZiBhIHRhc2suICovCisJX191MzIJYWNfZXhpdGNvZGU7CQkvKiBFeGl0IHN0YXR1cyAqLworCisgIAkvKiBUaGUgYWNjb3VudGluZyBmbGFncyBvZiBhIHRhc2sgYXMgZGVmaW5lZCBpbiA8bGludXgvYWNjdC5oPgorCSAqIERlZmluZWQgdmFsdWVzIGFyZSBBRk9SSywgQVNVLCBBQ09NUEFULCBBQ09SRSwgYW5kIEFYU0lHLgorCSAqLworCV9fdTgJYWNfZmxhZzsJCS8qIFJlY29yZCBmbGFncyAqLworCisgIAkvKiBUaGUgdmFsdWUgb2YgdGFza19uaWNlKCkgb2YgYSB0YXNrLiAqLworCV9fdTgJYWNfbmljZTsJCS8qIHRhc2tfbmljZSAqLworCisgIAkvKiBUaGUgbmFtZSBvZiB0aGUgY29tbWFuZCB0aGF0IHN0YXJ0ZWQgdGhpcyB0YXNrLiAqLworCWNoYXIJYWNfY29tbVtUU19DT01NX0xFTl07CS8qIENvbW1hbmQgbmFtZSAqLworCisgIAkvKiBUaGUgc2NoZWR1bGluZyBkaXNjaXBsaW5lIGFzIHNldCBpbiB0YXNrLT5wb2xpY3kgZmllbGQuICovCisJX191OAlhY19zY2hlZDsJCS8qIFNjaGVkdWxpbmcgZGlzY2lwbGluZSAqLworCisJX191OAlhY19wYWRbM107CisJX191MzIJYWNfdWlkOwkJCS8qIFVzZXIgSUQgKi8KKwlfX3UzMglhY19naWQ7CQkJLyogR3JvdXAgSUQgKi8KKwlfX3UzMglhY19waWQ7CQkJLyogUHJvY2VzcyBJRCAqLworCV9fdTMyCWFjX3BwaWQ7CQkvKiBQYXJlbnQgcHJvY2VzcyBJRCAqLworCisgIAkvKiBUaGUgdGltZSB3aGVuIGEgdGFzayBiZWdpbnMsIGluIFtzZWNzXSBzaW5jZSAxOTcwLiAqLworCV9fdTMyCWFjX2J0aW1lOwkJLyogQmVnaW4gdGltZSBbc2VjIHNpbmNlIDE5NzBdICovCisKKyAgCS8qIFRoZSBlbGFwc2VkIHRpbWUgb2YgYSB0YXNrLCBpbiBbdXNlY10uICovCisJX191NjQJYWNfZXRpbWU7CQkvKiBFbGFwc2VkIHRpbWUgW3VzZWNdICovCisKKyAgCS8qIFRoZSB1c2VyIENQVSB0aW1lIG9mIGEgdGFzaywgaW4gW3VzZWNdLiAqLworCV9fdTY0CWFjX3V0aW1lOwkJLyogVXNlciBDUFUgdGltZSBbdXNlY10gKi8KKworICAJLyogVGhlIHN5c3RlbSBDUFUgdGltZSBvZiBhIHRhc2ssIGluIFt1c2VjXS4gKi8KKwlfX3U2NAlhY19zdGltZTsJCS8qIFN5c3RlbSBDUFUgdGltZSBbdXNlY10gKi8KKworICAJLyogVGhlIG1pbm9yIHBhZ2UgZmF1bHQgY291bnQgb2YgYSB0YXNrLCBhcyBzZXQgaW4gdGFzay0+bWluX2ZsdC4gKi8KKwlfX3U2NAlhY19taW5mbHQ7CQkvKiBNaW5vciBQYWdlIEZhdWx0IENvdW50ICovCisKKwkvKiBUaGUgbWFqb3IgcGFnZSBmYXVsdCBjb3VudCBvZiBhIHRhc2ssIGFzIHNldCBpbiB0YXNrLT5tYWpfZmx0LiAqLworCV9fdTY0CWFjX21hamZsdDsJCS8qIE1ham9yIFBhZ2UgRmF1bHQgQ291bnQgKi8KKworCisyKSBEZWxheSBhY2NvdW50aW5nIGZpZWxkczoKKwkvKiBEZWxheSBhY2NvdW50aW5nIGZpZWxkcyBzdGFydAorCSAqCisJICogQWxsIHZhbHVlcywgdW50aWwgdGhlIGNvbW1lbnQgIkRlbGF5IGFjY291bnRpbmcgZmllbGRzIGVuZCIgYXJlCisJICogYXZhaWxhYmxlIG9ubHkgaWYgZGVsYXkgYWNjb3VudGluZyBpcyBlbmFibGVkLCBldmVuIHRob3VnaCB0aGUgbGFzdAorCSAqIGZldyBmaWVsZHMgYXJlIG5vdCBkZWxheXMKKwkgKgorCSAqIHh4eF9jb3VudCBpcyB0aGUgbnVtYmVyIG9mIGRlbGF5IHZhbHVlcyByZWNvcmRlZAorCSAqIHh4eF9kZWxheV90b3RhbCBpcyB0aGUgY29ycmVzcG9uZGluZyBjdW11bGF0aXZlIGRlbGF5IGluIG5hbm9zZWNvbmRzCisJICoKKwkgKiB4eHhfZGVsYXlfdG90YWwgd3JhcHMgYXJvdW5kIHRvIHplcm8gb24gb3ZlcmZsb3cKKwkgKiB4eHhfY291bnQgaW5jcmVtZW50ZWQgcmVnYXJkbGVzcyBvZiBvdmVyZmxvdworCSAqLworCisJLyogRGVsYXkgd2FpdGluZyBmb3IgY3B1LCB3aGlsZSBydW5uYWJsZQorCSAqIGNvdW50LCBkZWxheV90b3RhbCBOT1QgdXBkYXRlZCBhdG9taWNhbGx5CisJICovCisJX191NjQJY3B1X2NvdW50OworCV9fdTY0CWNwdV9kZWxheV90b3RhbDsKKworCS8qIEZvbGxvd2luZyBmb3VyIGZpZWxkcyBhdG9taWNhbGx5IHVwZGF0ZWQgdXNpbmcgdGFzay0+ZGVsYXlzLT5sb2NrICovCisKKwkvKiBEZWxheSB3YWl0aW5nIGZvciBzeW5jaHJvbm91cyBibG9jayBJL08gdG8gY29tcGxldGUKKwkgKiBkb2VzIG5vdCBhY2NvdW50IGZvciBkZWxheXMgaW4gSS9PIHN1Ym1pc3Npb24KKwkgKi8KKwlfX3U2NAlibGtpb19jb3VudDsKKwlfX3U2NAlibGtpb19kZWxheV90b3RhbDsKKworCS8qIERlbGF5IHdhaXRpbmcgZm9yIHBhZ2UgZmF1bHQgSS9PIChzd2FwIGluIG9ubHkpICovCisJX191NjQJc3dhcGluX2NvdW50OworCV9fdTY0CXN3YXBpbl9kZWxheV90b3RhbDsKKworCS8qIGNwdSAid2FsbC1jbG9jayIgcnVubmluZyB0aW1lCisJICogT24gc29tZSBhcmNoaXRlY3R1cmVzLCB2YWx1ZSB3aWxsIGFkanVzdCBmb3IgY3B1IHRpbWUgc3RvbGVuCisJICogZnJvbSB0aGUga2VybmVsIGluIGludm9sdW50YXJ5IHdhaXRzIGR1ZSB0byB2aXJ0dWFsaXphdGlvbi4KKwkgKiBWYWx1ZSBpcyBjdW11bGF0aXZlLCBpbiBuYW5vc2Vjb25kcywgd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgY291bnQKKwkgKiBhbmQgd3JhcHMgYXJvdW5kIHRvIHplcm8gc2lsZW50bHkgb24gb3ZlcmZsb3cKKwkgKi8KKwlfX3U2NAljcHVfcnVuX3JlYWxfdG90YWw7CisKKwkvKiBjcHUgInZpcnR1YWwiIHJ1bm5pbmcgdGltZQorCSAqIFVzZXMgdGltZSBpbnRlcnZhbHMgc2VlbiBieSB0aGUga2VybmVsIGkuZS4gbm8gYWRqdXN0bWVudAorCSAqIGZvciBrZXJuZWwncyBpbnZvbHVudGFyeSB3YWl0cyBkdWUgdG8gdmlydHVhbGl6YXRpb24uCisJICogVmFsdWUgaXMgY3VtdWxhdGl2ZSwgaW4gbmFub3NlY29uZHMsIHdpdGhvdXQgYSBjb3JyZXNwb25kaW5nIGNvdW50CisJICogYW5kIHdyYXBzIGFyb3VuZCB0byB6ZXJvIHNpbGVudGx5IG9uIG92ZXJmbG93CisJICovCisJX191NjQJY3B1X3J1bl92aXJ0dWFsX3RvdGFsOworCS8qIERlbGF5IGFjY291bnRpbmcgZmllbGRzIGVuZCAqLworCS8qIHZlcnNpb24gMSBlbmRzIGhlcmUgKi8KKworCiszKSBFeHRlbmRlZCBhY2NvdW50aW5nIGZpZWxkcworCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIHN0YXJ0ICovCisKKwkvKiBBY2N1bXVsYXRlZCBSU1MgdXNhZ2UgaW4gZHVyYXRpb24gb2YgYSB0YXNrLCBpbiBNQnl0ZXMtdXNlY3MuCisJICogVGhlIGN1cnJlbnQgcnNzIHVzYWdlIGlzIGFkZGVkIHRvIHRoaXMgY291bnRlciBldmVyeSB0aW1lCisJICogYSB0aWNrIGlzIGNoYXJnZWQgdG8gYSB0YXNrJ3Mgc3lzdGVtIHRpbWUuIFNvLCBhdCB0aGUgZW5kIHdlCisJICogd2lsbCBoYXZlIG1lbW9yeSB1c2FnZSBtdWx0aXBsaWVkIGJ5IHN5c3RlbSB0aW1lLiBUaHVzIGFuCisJICogYXZlcmFnZSB1c2FnZSBwZXIgc3lzdGVtIHRpbWUgdW5pdCBjYW4gYmUgY2FsY3VsYXRlZC4KKwkgKi8KKwlfX3U2NAljb3JlbWVtOwkJLyogYWNjdW11bGF0ZWQgUlNTIHVzYWdlIGluIE1CLXVzZWMgKi8KKworICAJLyogQWNjdW11bGF0ZWQgdmlydHVhbCBtZW1vcnkgdXNhZ2UgaW4gZHVyYXRpb24gb2YgYSB0YXNrLgorCSAqIFNhbWUgYXMgYWNjdF9yc3NfbWVtMSBhYm92ZSBleGNlcHQgdGhhdCB3ZSBrZWVwIHRyYWNrIG9mIFZNIHVzYWdlLgorCSAqLworCV9fdTY0CXZpcnRtZW07CQkvKiBhY2N1bXVsYXRlZCBWTSB1c2FnZSBpbiBNQi11c2VjICovCisKKyAgCS8qIEhpZ2ggd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSBpbiBkdXJhdGlvbiBvZiBhIHRhc2ssIGluIEtCeXRlcy4gKi8KKwlfX3U2NAloaXdhdGVyX3JzczsJCS8qIEhpZ2gtd2F0ZXJtYXJrIG9mIFJTUyB1c2FnZSAqLworCisgIAkvKiBIaWdoIHdhdGVybWFyayBvZiBWTSAgdXNhZ2UgaW4gZHVyYXRpb24gb2YgYSB0YXNrLCBpbiBLQnl0ZXMuICovCisJX191NjQJaGl3YXRlcl92bTsJCS8qIEhpZ2gtd2F0ZXIgdmlydHVhbCBtZW1vcnkgdXNhZ2UgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgZm91ciBmaWVsZHMgYXJlIEkvTyBzdGF0aXN0aWNzIG9mIGEgdGFzay4gKi8KKwlfX3U2NAlyZWFkX2NoYXI7CQkvKiBieXRlcyByZWFkICovCisJX191NjQJd3JpdGVfY2hhcjsJCS8qIGJ5dGVzIHdyaXR0ZW4gKi8KKwlfX3U2NAlyZWFkX3N5c2NhbGxzOwkJLyogcmVhZCBzeXNjYWxscyAqLworCV9fdTY0CXdyaXRlX3N5c2NhbGxzOwkJLyogd3JpdGUgc3lzY2FsbHMgKi8KKworCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIGVuZCAqLworCit9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0IGIvRG9jdW1lbnRhdGlvbi9jcHVzZXRzLnR4dAppbmRleCA3NmI0NDI5Li44NDJmMGQxIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2NwdXNldHMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vY3B1c2V0cy50eHQKQEAgLTIxNywxMSArMjE3LDExIEBACiB0byByZXByZXNlbnQgdGhlIGNwdXNldCBoaWVyYXJjaHkgcHJvdmlkZXMgZm9yIGEgZmFtaWxpYXIgcGVybWlzc2lvbgogYW5kIG5hbWUgc3BhY2UgZm9yIGNwdXNldHMsIHdpdGggYSBtaW5pbXVtIG9mIGFkZGl0aW9uYWwga2VybmVsIGNvZGUuCiAKLVRoZSBjcHVzIGZpbGUgaW4gdGhlIHJvb3QgKHRvcF9jcHVzZXQpIGNwdXNldCBpcyByZWFkLW9ubHkuCi1JdCBhdXRvbWF0aWNhbGx5IHRyYWNrcyB0aGUgdmFsdWUgb2YgY3B1X29ubGluZV9tYXAsIHVzaW5nIGEgQ1BVCi1ob3RwbHVnIG5vdGlmaWVyLiAgSWYgYW5kIHdoZW4gbWVtb3J5IG5vZGVzIGNhbiBiZSBob3RwbHVnZ2VkLAotd2UgZXhwZWN0IHRvIG1ha2UgdGhlIG1lbXMgZmlsZSBpbiB0aGUgcm9vdCBjcHVzZXQgcmVhZC1vbmx5Ci1hcyB3ZWxsLCBhbmQgaGF2ZSBpdCB0cmFjayB0aGUgdmFsdWUgb2Ygbm9kZV9vbmxpbmVfbWFwLgorVGhlIGNwdXMgYW5kIG1lbXMgZmlsZXMgaW4gdGhlIHJvb3QgKHRvcF9jcHVzZXQpIGNwdXNldCBhcmUKK3JlYWQtb25seS4gIFRoZSBjcHVzIGZpbGUgYXV0b21hdGljYWxseSB0cmFja3MgdGhlIHZhbHVlIG9mCitjcHVfb25saW5lX21hcCB1c2luZyBhIENQVSBob3RwbHVnIG5vdGlmaWVyLCBhbmQgdGhlIG1lbXMgZmlsZQorYXV0b21hdGljYWxseSB0cmFja3MgdGhlIHZhbHVlIG9mIG5vZGVfb25saW5lX21hcCB1c2luZyB0aGUKK2NwdXNldF90cmFja19vbmxpbmVfbm9kZXMoKSBob29rLgogCiAKIDEuNCBXaGF0IGFyZSBleGNsdXNpdmUgY3B1c2V0cyA/CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2VzLnR4dAppbmRleCA2NmM3MjVmLi5hZGRjNjdiIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2RldmljZXMudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNlcy50eHQKQEAgLTI1NDMsNiArMjU0Myw5IEBACiAJCSA2NCA9IC9kZXYvdXNiL3JpbzUwMAlEaWFtb25kIFJpbyA1MDAKIAkJIDY1ID0gL2Rldi91c2IvdXNibGNkCVVTQkxDRCBJbnRlcmZhY2UgKGluZm9AdXNibGNkLmRlKQogCQkgNjYgPSAvZGV2L3VzYi9jcGFkMAlTeW5hcHRpY3MgY1BhZCAobW91c2UvTENEKQorCQkgNjcgPSAvZGV2L3VzYi9hZHV0dXgwCTFzdCBPbnRyYWsgQURVIGRldmljZQorCQkgICAgLi4uCisJCSA3NiA9IC9kZXYvdXNiL2FkdXR1eDEwCTEwdGggT250cmFrIEFEVSBkZXZpY2UKIAkJIDk2ID0gL2Rldi91c2IvaGlkZGV2MAkxc3QgVVNCIEhJRCBkZXZpY2UKIAkJICAgIC4uLgogCQkxMTEgPSAvZGV2L3VzYi9oaWRkZXYxNQkxNnRoIFVTQiBISUQgZGV2aWNlCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0IGIvRG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dAppbmRleCBjMTJkMzlhLi5hYTBkMzIyIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZiL2ludGVsZmIudHh0CisrKyBiL0RvY3VtZW50YXRpb24vZmIvaW50ZWxmYi50eHQKQEAgLTEsMTYgKzEsMTkgQEAKLUludGVsIDgzME0vODQ1Ry84NTJHTS84NTVHTS84NjVHLzkxNUcgRnJhbWVidWZmZXIgZHJpdmVyCitJbnRlbCA4MzBNLzg0NUcvODUyR00vODU1R00vODY1Ry85MTVHLzk0NUcgRnJhbWVidWZmZXIgZHJpdmVyCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAKIEEuIEludHJvZHVjdGlvbgotCVRoaXMgaXMgYSBmcmFtZWJ1ZmZlciBkcml2ZXIgZm9yIHZhcmlvdXMgSW50ZWwgODEwLzgxNSBjb21wYXRpYmxlCisJVGhpcyBpcyBhIGZyYW1lYnVmZmVyIGRyaXZlciBmb3IgdmFyaW91cyBJbnRlbCA4eHgvOXh4IGNvbXBhdGlibGUKIGdyYXBoaWNzIGRldmljZXMuICBUaGVzZSB3b3VsZCBpbmNsdWRlOgogCiAJSW50ZWwgODMwTQotCUludGVsIDgxMEU4NDVHCisJSW50ZWwgODQ1RwogCUludGVsIDg1MkdNCiAJSW50ZWwgODU1R00KIAlJbnRlbCA4NjVHCiAJSW50ZWwgOTE1RworCUludGVsIDkxNUdNCisJSW50ZWwgOTQ1RworCUludGVsIDk0NUdNCiAKIEIuICBMaXN0IG9mIGF2YWlsYWJsZSBvcHRpb25zCiAKQEAgLTc4LDcgKzgxLDcgQEAKIFNlcGFyYXRlIGVhY2ggb3B0aW9uL29wdGlvbi1wYWlyIGJ5IGNvbW1hcyAoLCkgYW5kIHRoZSBvcHRpb24gZnJvbSBpdHMgdmFsdWUKIHdpdGggYW4gZXF1YWxzIHNpZ24gKD0pIGFzIGluIHRoZSBmb2xsb3dpbmc6CiAKLXZpZGVvPWk4MTBmYjpvcHRpb24xLG9wdGlvbjI9dmFsdWUyCit2aWRlbz1pbnRlbGZiOm9wdGlvbjEsb3B0aW9uMj12YWx1ZTIKIAogU2FtcGxlIFVzYWdlCiAtLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dCBiL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAppbmRleCA2MTFhY2MzLi45MzY0ZjQ3IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CkBAIC00NiwxNyArNDYsOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJc2JwMjogbW9kdWxlIHBhcmFtZXRlciAiZm9yY2VfaW5xdWlyeV9oYWNrIgotV2hlbjoJSnVseSAyMDA2Ci1XaHk6CVN1cGVyY2VkZWQgYnkgcGFyYW1ldGVyICJ3b3JrYXJvdW5kcyIuIEJvdGggcGFyYW1ldGVycyBhcmUgbWVhbnQgdG8gYmUKLQl1c2VkIGFkLWhvYyBhbmQgZm9yIHNpbmdsZSBkZXZpY2VzIG9ubHksIGkuZS4gbm90IGluIG1vZHByb2JlLmNvbmYsCi0JdGhlcmVmb3JlIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlIHJlcGxhY2VtZW50IHNob3VsZCBiZSBsb3cuCi1XaG86CVN0ZWZhbiBSaWNodGVyIDxzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlPgotCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQogV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgotV2hlbjoJSnVseSAyMDA2CitXaGVuOglEZWNlbWJlciAyMDA2CiBXaHk6CVY0TDEgQVAxIHdhcyByZXBsYWNlZCBieSBWNEwyIEFQSS4gZHVyaW5nIG1pZ3JhdGlvbiBmcm9tIDIuNCB0byAyLjYKIAlzZXJpZXMuIFRoZSBvbGQgQVBJIGhhdmUgbG90cyBvZiBkcmF3YmFja3MgYW5kIGRvbid0IHByb3ZpZGUgZW5vdWdoCiAJbWVhbnMgdG8gd29yayB3aXRoIGFsbCB2aWRlbyBhbmQgYXVkaW8gc3RhbmRhcmRzLiBUaGUgbmV3ZXIgQVBJIGlzCkBAIC03MCw2ICs2MSwxOCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAorV2hhdDoJc3lzX3N5c2N0bAorV2hlbjoJSmFudWFyeSAyMDA3CitXaHk6CVRoZSBzYW1lIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSB0aHJvdWdoIC9wcm9jL3N5cyBhbmQgdGhhdCBpcyB0aGUKKwlpbnRlcmZhY2UgdXNlciBzcGFjZSBwcmVmZXJzIHRvIHVzZS4gQW5kIHRoZXJlIGRvIG5vdCBhcHBlYXIgdG8gYmUKKwlhbnkgZXhpc3RpbmcgdXNlciBpbiB1c2VyIHNwYWNlIG9mIHN5c19zeXNjdGwuICBUaGUgYWRkaXRpb25hbAorCW1haW50ZW5hbmNlIG92ZXJoZWFkIG9mIGtlZXBpbmcgYSBzZXQgb2YgYmluYXJ5IG5hbWVzIGdldHMKKwlpbiB0aGUgd2F5IG9mIGRvaW5nIGEgZ29vZCBqb2Igb2YgbWFpbnRhaW5pbmcgdGhpcyBpbnRlcmZhY2UuCisKK1dobzoJRXJpYyBCaWVkZXJtYW4gPGViaWVkZXJtQHhtaXNzaW9uLmNvbT4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKIFdoYXQ6CVBDTUNJQSBjb250cm9sIGlvY3RsIChuZWVkZWQgZm9yIHBjbWNpYS1jcyBbY2FyZG1nciwgY2FyZGN0bF0pCiBXaGVuOglOb3ZlbWJlciAyMDA1CiBGaWxlczoJZHJpdmVycy9wY21jaWEvOiBwY21jaWFfaW9jdGwuYwpAQCAtMjE3LDE0ICsyMjAsNiBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJU3VwcG9ydCBmb3IgdGhlIE1JUFMgRVY5NjEwMCBldmFsdWF0aW9uIGJvYXJkCi1XaGVuOglTZXB0ZW1iZXIgMjAwNgotV2h5OglEb2VzIG5vIGxvbmdlciBidWlsZCBzaW5jZSBhdCBsZWFzdCBOb3ZlbWJlciAxNSwgMjAwMywgYXBwYXJlbnRseQotCW5vIHVzZXJiYXNlIGxlZnQuCi1XaG86CVJhbGYgQmFlY2hsZSA8cmFsZkBsaW51eC1taXBzLm9yZz4KLQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KIFdoYXQ6CVN1cHBvcnQgZm9yIHRoZSBNb21lbnR1bSAvIFBNQy1TaWVycmEgSmFndWFyIEFUWCBldmFsdWF0aW9uIGJvYXJkCiBXaGVuOglTZXB0ZW1iZXIgMjAwNgogV2h5OglEb2VzIG5vIGxvbmdlciBidWlsZCBzaW5jZSBxdWl0ZSBzb21lIHRpbWUsIGFuZCB3YXMgbmV2ZXIgcG9wdWxhciwKQEAgLTMyMSwzICszMTYsMTIgQEAKIFdobzoJS2F5IFNpZXZlcnMgPGtheS5zaWV2ZXJzQHN1c2UuZGU+CiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXaGF0OglpMmMtaXNhCitXaGVuOglEZWNlbWJlciAyMDA2CitXaHk6CWkyYy1pc2EgaXMgYSBub24tc2Vuc2UgYW5kIGRvZXNuJ3QgZml0IGluIHRoZSBkZXZpY2UgZHJpdmVyCisJbW9kZWwuIERyaXZlcnMgcmVseWluZyBvbiBpdCBhcmUgYmV0dGVyIGltcGxlbWVudGVkIGFzIHBsYXRmb3JtCisJZHJpdmVycy4KK1dobzoJSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9Mb2NraW5nCmluZGV4IDI0N2Q3ZjYuLmViMWE2Y2EgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvTG9ja2luZworKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL0xvY2tpbmcKQEAgLTM1NiwxMCArMzU2LDkgQEAKIHByb3RvdHlwZXM6CiAJbG9mZl90ICgqbGxzZWVrKSAoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOwogCXNzaXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci0Jc3NpemVfdCAoKmFpb19yZWFkKSAoc3RydWN0IGtpb2NiICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KTsKIAlzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQlzc2l6ZV90ICgqYWlvX3dyaXRlKSAoc3RydWN0IGtpb2NiICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwKLQkJCWxvZmZfdCk7CisJc3NpemVfdCAoKmFpb19yZWFkKSAoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOworCXNzaXplX3QgKCphaW9fd3JpdGUpIChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCk7CiAJaW50ICgqcmVhZGRpcikgKHN0cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogCWludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MudHh0CmluZGV4IDdkYjcxZDYuLjcyNDBlZTcgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnR4dApAQCAtMzksNiArMzksOCBAQAogICAyLjkJQXBwbGV0YWxrCiAgIDIuMTAJSVBYCiAgIDIuMTEJL3Byb2Mvc3lzL2ZzL21xdWV1ZSAtIFBPU0lYIG1lc3NhZ2UgcXVldWVzIGZpbGVzeXN0ZW0KKyAgMi4xMgkvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCisgIDIuMTMJL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBQcmVmYWNlCkBAIC0xOTYyLDYgKzE5NjQsMjIgQEAKIG1heGltdW0gIG1lc3NhZ2Ugc2l6ZSB2YWx1ZSAoaXQgaXMgZXZlcnkgIG1lc3NhZ2UgcXVldWUncyBhdHRyaWJ1dGUgc2V0IGR1cmluZwogaXRzIGNyZWF0aW9uKS4KIAorMi4xMiAvcHJvYy88cGlkPi9vb21fYWRqIC0gQWRqdXN0IHRoZSBvb20ta2lsbGVyIHNjb3JlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmaWxlIGNhbiBiZSB1c2VkIHRvIGFkanVzdCB0aGUgc2NvcmUgdXNlZCB0byBzZWxlY3Qgd2hpY2ggcHJvY2Vzc2VzCitzaG91bGQgYmUga2lsbGVkIGluIGFuICBvdXQtb2YtbWVtb3J5ICBzaXR1YXRpb24uICBHaXZpbmcgaXQgYSBoaWdoIHNjb3JlIHdpbGwKK2luY3JlYXNlIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcHJvY2VzcyBiZWluZyBraWxsZWQgYnkgdGhlIG9vbS1raWxsZXIuICBWYWxpZAordmFsdWVzIGFyZSBpbiB0aGUgcmFuZ2UgLTE2IHRvICsxNSwgcGx1cyB0aGUgc3BlY2lhbCB2YWx1ZSAtMTcsIHdoaWNoIGRpc2FibGVzCitvb20ta2lsbGluZyBhbHRvZ2V0aGVyIGZvciB0aGlzIHByb2Nlc3MuCisKKzIuMTMgL3Byb2MvPHBpZD4vb29tX3Njb3JlIC0gRGlzcGxheSBjdXJyZW50IG9vbS1raWxsZXIgc2NvcmUKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGlzIGZpbGUgY2FuIGJlIHVzZWQgdG8gY2hlY2sgdGhlIGN1cnJlbnQgc2NvcmUgdXNlZCBieSB0aGUgb29tLWtpbGxlciBpcyBmb3IKK2FueSBnaXZlbiA8cGlkPi4gVXNlIGl0IHRvZ2V0aGVyIHdpdGggL3Byb2MvPHBpZD4vb29tX2FkaiB0byB0dW5lIHdoaWNoCitwcm9jZXNzIHNob3VsZCBiZSBraWxsZWQgaW4gYW4gb3V0LW9mLW1lbW9yeSBzaXR1YXRpb24uCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU3VtbWFyeQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy92ZnMudHh0CmluZGV4IDFjYjdlOGIuLmNkMDdjMjEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdmZzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Zmcy50eHQKQEAgLTY5OSw5ICs2OTksOSBAQAogc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB7CiAJbG9mZl90ICgqbGxzZWVrKSAoc3RydWN0IGZpbGUgKiwgbG9mZl90LCBpbnQpOwogCXNzaXplX3QgKCpyZWFkKSAoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Ci0Jc3NpemVfdCAoKmFpb19yZWFkKSAoc3RydWN0IGtpb2NiICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KTsKIAlzc2l6ZV90ICgqd3JpdGUpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQlzc2l6ZV90ICgqYWlvX3dyaXRlKSAoc3RydWN0IGtpb2NiICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KTsKKwlzc2l6ZV90ICgqYWlvX3JlYWQpIChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCk7CisJc3NpemVfdCAoKmFpb193cml0ZSkgKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKIAlpbnQgKCpyZWFkZGlyKSAoc3RydWN0IGZpbGUgKiwgdm9pZCAqLCBmaWxsZGlyX3QpOwogCXVuc2lnbmVkIGludCAoKnBvbGwpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CiAJaW50ICgqaW9jdGwpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NyBiL0RvY3VtZW50YXRpb24vaHdtb24vaXQ4NwppbmRleCA5NTU1YmUxLi5lNzgzZmQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2l0ODcKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9pdDg3CkBAIC0xMywxMiArMTMsMjUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBTdXBlciBJL08gY29uZmlnIHNwYWNlICg4IEkvTyBwb3J0cykKICAgICBEYXRhc2hlZXQ6IFB1YmxpY2x5IGF2YWlsYWJsZSBhdCB0aGUgSVRFIHdlYnNpdGUKICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy8KKyAgKiBJVDg3MTZGCisgICAgUHJlZml4OiAnaXQ4NzE2JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxNkZfVjAuMy5aSVAKKyAgKiBJVDg3MThGCisgICAgUHJlZml4OiAnaXQ4NzE4JworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBmcm9tIFN1cGVyIEkvTyBjb25maWcgc3BhY2UgKDggSS9PIHBvcnRzKQorICAgIERhdGFzaGVldDogUHVibGljbHkgYXZhaWxhYmxlIGF0IHRoZSBJVEUgd2Vic2l0ZQorICAgICAgICAgICAgICAgaHR0cDovL3d3dy5pdGUuY29tLnR3L3Byb2R1Y3RfaW5mby9maWxlL3BjL0lUODcxOEZfVjAuMi56aXAKKyAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaXRlLmNvbS50dy9wcm9kdWN0X2luZm8vZmlsZS9wYy9JVDg3MThGX1YwJTIwM18oZm9yJTIwQyUyMHZlcnNpb24pLnppcAogICAqIFNpUzk1MCAgIFtjbG9uZSBvZiBJVDg3MDVGXQogICAgIFByZWZpeDogJ2l0ODcnCiAgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IGZyb20gU3VwZXIgSS9PIGNvbmZpZyBzcGFjZSAoOCBJL08gcG9ydHMpCiAgICAgRGF0YXNoZWV0OiBObyBsb25nZXIgYmUgYXZhaWxhYmxlCiAKLUF1dGhvcjogQ2hyaXN0b3BoZSBHYXV0aHJvbiA8Y2hyaXNnQDAtaW4uY29tPgorQXV0aG9yczoKKyAgICBDaHJpc3RvcGhlIEdhdXRocm9uIDxjaHJpc2dAMC1pbi5jb20+CisgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKIAogTW9kdWxlIFBhcmFtZXRlcnMKQEAgLTQzLDI2ICs1Niw0NiBAQAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLVRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIElUODcwNUYsIElUODcxMkYgYW5kIFNpUzk1MCBjaGlwcy4KLQotVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyBJVDg3MTJGLCB3aGljaCBhZGRzIFNNQnVzIGFjY2VzcywgYW5kIGEgVklECi1pbnB1dCwgdXNlZCB0byByZXBvcnQgdGhlIFZjb3JlIHZvbHRhZ2Ugb2YgdGhlIFBlbnRpdW0gcHJvY2Vzc29yLgotVGhlIElUODcxMkYgYWRkaXRpb25hbGx5IGZlYXR1cmVzIFZJRCBpbnB1dHMuCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBJVDg3MDVGLCBJVDg3MTJGLCBJVDg3MTZGLAorSVQ4NzE4RiBhbmQgU2lTOTUwIGNoaXBzLgogCiBUaGVzZSBjaGlwcyBhcmUgJ1N1cGVyIEkvTyBjaGlwcycsIHN1cHBvcnRpbmcgZmxvcHB5IGRpc2tzLCBpbmZyYXJlZCBwb3J0cywKIGpveXN0aWNrcyBhbmQgb3RoZXIgbWlzY2VsbGFuZW91cyBzdHVmZi4gRm9yIGhhcmR3YXJlIG1vbml0b3JpbmcsIHRoZXkKIGluY2x1ZGUgYW4gJ2Vudmlyb25tZW50IGNvbnRyb2xsZXInIHdpdGggMyB0ZW1wZXJhdHVyZSBzZW5zb3JzLCAzIGZhbgogcm90YXRpb24gc3BlZWQgc2Vuc29ycywgOCB2b2x0YWdlIHNlbnNvcnMsIGFuZCBhc3NvY2lhdGVkIGFsYXJtcy4KIAorVGhlIElUODcxMkYgYW5kIElUODcxNkYgYWRkaXRpb25hbGx5IGZlYXR1cmUgVklEIGlucHV0cywgdXNlZCB0byByZXBvcnQKK3RoZSBWY29yZSB2b2x0YWdlIG9mIHRoZSBwcm9jZXNzb3IuIFRoZSBlYXJseSBJVDg3MTJGIGhhdmUgNSBWSUQgcGlucywKK3RoZSBJVDg3MTZGIGFuZCBsYXRlIElUODcxMkYgaGF2ZSA2LiBUaGV5IGFyZSBzaGFyZWQgd2l0aCBvdGhlciBmdW5jdGlvbnMKK3Rob3VnaCwgc28gdGhlIGZ1bmN0aW9uYWxpdHkgbWF5IG5vdCBiZSBhdmFpbGFibGUgb24gYSBnaXZlbiBzeXN0ZW0uCitUaGUgZHJpdmVyIGR1bWJseSBhc3N1bWUgaXQgaXMgdGhlcmUuCisKK1RoZSBJVDg3MThGIGFsc28gZmVhdHVyZXMgVklEIGlucHV0cyAodXAgdG8gOCBwaW5zKSBidXQgdGhlIHZhbHVlIGlzCitzdG9yZWQgaW4gdGhlIFN1cGVyLUkvTyBjb25maWd1cmF0aW9uIHNwYWNlLiBEdWUgdG8gdGVjaG5pY2FsIGxpbWl0YXRpb25zLAordGhpcyB2YWx1ZSBjYW4gY3VycmVudGx5IG9ubHkgYmUgcmVhZCBvbmNlIGF0IGluaXRpYWxpemF0aW9uIHRpbWUsIHNvCit0aGUgZHJpdmVyIHdvbid0IG5vdGljZSBhbmQgcmVwb3J0IGNoYW5nZXMgaW4gdGhlIFZJRCB2YWx1ZS4gVGhlIHR3bwordXBwZXIgVklEIGJpdHMgc2hhcmUgdGhlaXIgcGlucyB3aXRoIHZvbHRhZ2UgaW5wdXRzIChpbjUgYW5kIGluNikgc28geW91CitjYW4ndCBoYXZlIGJvdGggb24gYSBnaXZlbiBib2FyZC4KKworVGhlIElUODcxNkYsIElUODcxOEYgYW5kIGxhdGVyIElUODcxMkYgcmV2aXNpb25zIGhhdmUgc3VwcG9ydCBmb3IKKzIgYWRkaXRpb25hbCBmYW5zLiBUaGV5IGFyZSBub3QgeWV0IHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyLgorCitUaGUgSVQ4NzE2RiBhbmQgSVQ4NzE4RiwgYW5kIGxhdGUgSVQ4NzEyRiBhbmQgSVQ4NzA1RiBhbHNvIGhhdmUgb3B0aW9uYWwKKzE2LWJpdCB0YWNob21ldGVyIGNvdW50ZXJzIGZvciBmYW5zIDEgdG8gMy4gVGhpcyBpcyBiZXR0ZXIgKG5vIG1vcmUgZmFuCitjbG9jayBkaXZpZGVyIG1lc3MpIGJ1dCBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBvbGRlciBjaGlwcyBhbmQKK3JldmlzaW9ucy4gRm9yIG5vdywgdGhlIGRyaXZlciBvbmx5IHVzZXMgdGhlIDE2LWJpdCBtb2RlIG9uIHRoZQorSVQ4NzE2RiBhbmQgSVQ4NzE4Ri4KKwogVGVtcGVyYXR1cmVzIGFyZSBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMuIEFuIGFsYXJtIGlzIHRyaWdnZXJlZCBvbmNlCiB3aGVuIHRoZSBPdmVydGVtcGVyYXR1cmUgU2h1dGRvd24gbGltaXQgaXMgY3Jvc3NlZC4KIAogRmFuIHJvdGF0aW9uIHNwZWVkcyBhcmUgcmVwb3J0ZWQgaW4gUlBNIChyb3RhdGlvbnMgcGVyIG1pbnV0ZSkuIEFuIGFsYXJtIGlzCi10cmlnZ2VyZWQgaWYgdGhlIHJvdGF0aW9uIHNwZWVkIGhhcyBkcm9wcGVkIGJlbG93IGEgcHJvZ3JhbW1hYmxlIGxpbWl0LiBGYW4KLXJlYWRpbmdzIGNhbiBiZSBkaXZpZGVkIGJ5IGEgcHJvZ3JhbW1hYmxlIGRpdmlkZXIgKDEsIDIsIDQgb3IgOCkgdG8gZ2l2ZSB0aGUKLXJlYWRpbmdzIG1vcmUgcmFuZ2Ugb3IgYWNjdXJhY3kuIE5vdCBhbGwgUlBNIHZhbHVlcyBjYW4gYWNjdXJhdGVseSBiZQotcmVwcmVzZW50ZWQsIHNvIHNvbWUgcm91bmRpbmcgaXMgZG9uZS4gV2l0aCBhIGRpdmlkZXIgb2YgMiwgdGhlIGxvd2VzdAotcmVwcmVzZW50YWJsZSB2YWx1ZSBpcyBhcm91bmQgMjYwMCBSUE0uCit0cmlnZ2VyZWQgaWYgdGhlIHJvdGF0aW9uIHNwZWVkIGhhcyBkcm9wcGVkIGJlbG93IGEgcHJvZ3JhbW1hYmxlIGxpbWl0LiBXaGVuCisxNi1iaXQgdGFjaG9tZXRlciBjb3VudGVycyBhcmVuJ3QgdXNlZCwgZmFuIHJlYWRpbmdzIGNhbiBiZSBkaXZpZGVkIGJ5CithIHByb2dyYW1tYWJsZSBkaXZpZGVyICgxLCAyLCA0IG9yIDgpIHRvIGdpdmUgdGhlIHJlYWRpbmdzIG1vcmUgcmFuZ2Ugb3IKK2FjY3VyYWN5LiBXaXRoIGEgZGl2aWRlciBvZiAyLCB0aGUgbG93ZXN0IHJlcHJlc2VudGFibGUgdmFsdWUgaXMgYXJvdW5kCisyNjAwIFJQTS4gTm90IGFsbCBSUE0gdmFsdWVzIGNhbiBhY2N1cmF0ZWx5IGJlIHJlcHJlc2VudGVkLCBzbyBzb21lIHJvdW5kaW5nCitpcyBkb25lLgogCiBWb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiB2b2x0cy4gQW4KIGFsYXJtIGlzIHRyaWdnZXJlZCBpZiB0aGUgdm9sdGFnZSBoYXMgY3Jvc3NlZCBhIHByb2dyYW1tYWJsZSBtaW5pbXVtIG9yCkBAIC03MSw5ICsxMDQsOSBAQAogaW5wdXRzIGNhbiBtZWFzdXJlIHZvbHRhZ2VzIGJldHdlZW4gMCBhbmQgNC4wOCB2b2x0cywgd2l0aCBhIHJlc29sdXRpb24gb2YKIDAuMDE2IHZvbHQuIFRoZSBiYXR0ZXJ5IHZvbHRhZ2UgaW44IGRvZXMgbm90IGhhdmUgbGltaXQgcmVnaXN0ZXJzLgogCi1UaGUgVklEIGxpbmVzIChJVDg3MTJGIG9ubHkpIGVuY29kZSB0aGUgY29yZSB2b2x0YWdlIHZhbHVlOiB0aGUgdm9sdGFnZQotbGV2ZWwgeW91ciBwcm9jZXNzb3Igc2hvdWxkIHdvcmsgd2l0aC4gVGhpcyBpcyBoYXJkY29kZWQgYnkgdGhlIG1haW5ib2FyZAotYW5kL29yIHByb2Nlc3NvciBpdHNlbGYuIEl0IGlzIGEgdmFsdWUgaW4gdm9sdHMuCitUaGUgVklEIGxpbmVzIChJVDg3MTJGL0lUODcxNkYvSVQ4NzE4RikgZW5jb2RlIHRoZSBjb3JlIHZvbHRhZ2UgdmFsdWU6Cit0aGUgdm9sdGFnZSBsZXZlbCB5b3VyIHByb2Nlc3NvciBzaG91bGQgd29yayB3aXRoLiBUaGlzIGlzIGhhcmRjb2RlZCBieQordGhlIG1haW5ib2FyZCBhbmQvb3IgcHJvY2Vzc29yIGl0c2VsZi4gSXQgaXMgYSB2YWx1ZSBpbiB2b2x0cy4KIAogSWYgYW4gYWxhcm0gdHJpZ2dlcnMsIGl0IHdpbGwgcmVtYWluIHRyaWdnZXJlZCB1bnRpbCB0aGUgaGFyZHdhcmUgcmVnaXN0ZXIKIGlzIHJlYWQgYXQgbGVhc3Qgb25jZS4gVGhpcyBtZWFucyB0aGF0IHRoZSBjYXVzZSBmb3IgdGhlIGFsYXJtIG1heSBhbHJlYWR5CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcCBiL0RvY3VtZW50YXRpb24vaHdtb24vazh0ZW1wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhYjQ0NWEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2s4dGVtcApAQCAtMCwwICsxLDUyIEBACitLZXJuZWwgZHJpdmVyIGs4dGVtcAorPT09PT09PT09PT09PT09PT09PT0KKworU3VwcG9ydGVkIGNoaXBzOgorICAqIEFNRCBLOCBDUFUKKyAgICBQcmVmaXg6ICdrOHRlbXAnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IFBDSSBzcGFjZQorICAgIERhdGFzaGVldDogaHR0cDovL3d3dy5hbWQuY29tL3VzLWVuL2Fzc2V0cy9jb250ZW50X3R5cGUvd2hpdGVfcGFwZXJzX2FuZF90ZWNoX2RvY3MvMzI1NTkucGRmCisKK0F1dGhvcjogUnVkb2xmIE1hcmVrCitDb250YWN0OiBSdWRvbGYgTWFyZWsgPHIubWFyZWtAc2guY3Z1dC5jej4KKworRGVzY3JpcHRpb24KKy0tLS0tLS0tLS0tCisKK1RoaXMgZHJpdmVyIHBlcm1pdHMgcmVhZGluZyB0ZW1wZXJhdHVyZSBzZW5zb3IocykgZW1iZWRkZWQgaW5zaWRlIEFNRCBLOCBDUFVzLgorT2ZmaWNpYWwgZG9jdW1lbnRhdGlvbiBzYXlzIHRoYXQgaXQgd29ya3MgZnJvbSByZXZpc2lvbiBGIG9mIEs4IGNvcmUsIGJ1dAoraW4gZmFjdCBpdCBzZWVtcyB0byBiZSBpbXBsZW1lbnRlZCBmb3IgYWxsIHJldmlzaW9ucyBvZiBLOCBleGNlcHQgdGhlIGZpcnN0Cit0d28gcmV2aXNpb25zIChTSC1CMCBhbmQgU0gtQjMpLgorCitUaGVyZSBjYW4gYmUgdXAgdG8gZm91ciB0ZW1wZXJhdHVyZSBzZW5zb3JzIGluc2lkZSBzaW5nbGUgQ1BVLiBUaGUgZHJpdmVyCit3aWxsIGF1dG8tZGV0ZWN0IHRoZSBzZW5zb3JzIGFuZCB3aWxsIGRpc3BsYXkgb25seSB0ZW1wZXJhdHVyZXMgZnJvbQoraW1wbGVtZW50ZWQgc2Vuc29ycy4KKworTWFwcGluZyBvZiAvc3lzIGZpbGVzIGlzIGFzIGZvbGxvd3M6CisKK3RlbXAxX2lucHV0IC0gdGVtcGVyYXR1cmUgb2YgQ29yZSAwIGFuZCAicGxhY2UiIDAKK3RlbXAyX2lucHV0IC0gdGVtcGVyYXR1cmUgb2YgQ29yZSAwIGFuZCAicGxhY2UiIDEKK3RlbXAzX2lucHV0IC0gdGVtcGVyYXR1cmUgb2YgQ29yZSAxIGFuZCAicGxhY2UiIDAKK3RlbXA0X2lucHV0IC0gdGVtcGVyYXR1cmUgb2YgQ29yZSAxIGFuZCAicGxhY2UiIDEKKworVGVtcGVyYXR1cmVzIGFyZSBtZWFzdXJlZCBpbiBkZWdyZWVzIENlbHNpdXMgYW5kIG1lYXN1cmVtZW50IHJlc29sdXRpb24gaXMKKzEgZGVncmVlIEMuIEl0IGlzIGV4cGVjdGVkIHRoYXQgZnV0dXJlIENQVSB3aWxsIGhhdmUgYmV0dGVyIHJlc29sdXRpb24uIFRoZQordGVtcGVyYXR1cmUgaXMgdXBkYXRlZCBvbmNlIGEgc2Vjb25kLiBWYWxpZCB0ZW1wZXJhdHVyZXMgYXJlIGZyb20gLTQ5IHRvCisyMDYgZGVncmVlcyBDLgorCitUZW1wZXJhdHVyZSBrbm93biBhcyBUQ2FzZU1heCB3YXMgc3BlY2lmaWVkIGZvciBwcm9jZXNzb3JzIHVwIHRvIHJldmlzaW9uIEUuCitUaGlzIHRlbXBlcmF0dXJlIGlzIGRlZmluZWQgYXMgdGVtcGVyYXR1cmUgYmV0d2VlbiBoZWF0LXNwcmVhZGVyIGFuZCBDUFUKK2Nhc2UsIHNvIHRoZSBpbnRlcm5hbCBDUFUgdGVtcGVyYXR1cmUgc3VwcGxpZWQgYnkgdGhpcyBkcml2ZXIgY2FuIGJlIGhpZ2hlci4KK1RoZXJlIGlzIG5vIGVhc3kgd2F5IGhvdyB0byBtZWFzdXJlIHRoZSB0ZW1wZXJhdHVyZSB3aGljaCB3aWxsIGNvcnJlbGF0ZQord2l0aCBUQ2FzZU1heCB0ZW1wZXJhdHVyZS4KKworRm9yIG5ld2VyIHJldmlzaW9ucyBvZiBDUFUgKHJldiBGLCBzb2NrZXQgQU0yKSB0aGVyZSBpcyBhIG1hdGhlbWF0aWNhbGx5Citjb21wdXRlZCB0ZW1wZXJhdHVyZSBjYWxsZWQgVENvbnRyb2wsIHdoaWNoIG11c3QgYmUgbG93ZXIgdGhhbiBUQ29udHJvbE1heC4KKworVGhlIHJlbGF0aW9uc2hpcCBpcyBmb2xsb3dpbmc6CisKK3RlbXAxX2lucHV0IC0gVGpPZmZzZXQqMiA8IFRDb250cm9sTWF4LAorCitUak9mZnNldCBpcyBub3QgeWV0IGV4cG9ydGVkIGJ5IHRoZSBkcml2ZXIsIFRDb250cm9sTWF4IGlzIHVzdWFsbHkKKzcwIGRlZ3JlZXMgQy4gVGhlIHJ1bGUgb2YgdGhlIHRodW1iIC0+IENQVSB0ZW1wZXJhdHVyZSBzaG91bGQgbm90IGNyb3NzCis2MCBkZWdyZWVzIEMgdG9vIG11Y2guCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3Z0MTIxMSBiL0RvY3VtZW50YXRpb24vaHdtb24vdnQxMjExCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmE2MzMKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3Z0MTIxMQpAQCAtMCwwICsxLDIwNiBAQAorS2VybmVsIGRyaXZlciB2dDEyMTEKKz09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBWSUEgVlQxMjExCisgICAgUHJlZml4OiAndnQxMjExJworICAgIEFkZHJlc3NlcyBzY2FubmVkOiBub25lLCBhZGRyZXNzIHJlYWQgZnJvbSBTdXBlci1JL08gY29uZmlnIHNwYWNlCisgICAgRGF0YXNoZWV0OiBQcm92aWRlZCBieSBWSUEgdXBvbiByZXF1ZXN0IGFuZCB1bmRlciBOREEKKworQXV0aG9yczogSnVlcmcgSGFlZmxpZ2VyIDxqdWVyZ2hAZ21haWwuY29tPgorCitUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgZHJpdmVyIGZvciBrZXJuZWwgMi40IGJ5IE1hcmsgRC4gU3R1ZGViYWtlciBhbmQKK2l0cyBwb3J0IHRvIGtlcm5lbCAyLjYgYnkgTGFycyBFa21hbi4KKworVGhhbmtzIHRvIEpvc2VwaCBDaGFuIGFuZCBGaW9uYSBHYXR0IGZyb20gVklBIGZvciBwcm92aWRpbmcgZG9jdW1lbnRhdGlvbiBhbmQKK3RlY2huaWNhbCBzdXBwb3J0LgorCisKK01vZHVsZSBQYXJhbWV0ZXJzCistLS0tLS0tLS0tLS0tLS0tLQorCisqIHVjaF9jb25maWc6IGludAlPdmVycmlkZSB0aGUgQklPUyBkZWZhdWx0IHVuaXZlcnNhbCBjaGFubmVsIChVQ0gpCisJCQljb25maWd1cmF0aW9uIGZvciBjaGFubmVscyAxLTUuCisJCQlMZWdhbCB2YWx1ZXMgYXJlIGluIHRoZSByYW5nZSBvZiAwLTMxLiBCaXQgMCBtYXBzIHRvCisJCQlVQ0gxLCBiaXQgMSBtYXBzIHRvIFVDSDIgYW5kIHNvIG9uLiBTZXR0aW5nIGEgYml0IHRvIDEKKwkJCWVuYWJsZXMgdGhlIHRoZXJtYWwgaW5wdXQgb2YgdGhhdCBwYXJ0aWN1bGFyIFVDSCBhbmQKKwkJCXNldHRpbmcgYSBiaXQgdG8gMCBlbmFibGVzIHRoZSB2b2x0YWdlIGlucHV0LgorCisqIGludF9tb2RlOiBpbnQJCU92ZXJyaWRlIHRoZSBCSU9TIGRlZmF1bHQgdGVtcGVyYXR1cmUgaW50ZXJydXB0IG1vZGUuCisJCQlUaGUgb25seSBwb3NzaWJsZSB2YWx1ZSBpcyAwIHdoaWNoIGZvcmNlcyBpbnRlcnJ1cHQKKwkJCW1vZGUgMC4gSW4gdGhpcyBtb2RlLCBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgaXMgY2xlYXJlZAorCQkJd2hlbiB0aGUgc3RhdHVzIHJlZ2lzdGVyIGlzIHJlYWQgYnV0IGlzIHJlZ2VuZXJhdGVkIGFzCisJCQlsb25nIGFzIHRoZSB0ZW1wZXJhdHVyZSBzdGF5cyBhYm92ZSB0aGUgaHlzdGVyZXNpcworCQkJbGltaXQuCisKK0JlIGF3YXJlIHRoYXQgb3ZlcnJpZGluZyBCSU9TIGRlZmF1bHRzIG1pZ2h0IGNhdXNlIHNvbWUgdW53YW50ZWQgc2lkZSBlZmZlY3RzIQorCisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGUgVklBIFZUMTIxMSBTdXBlci1JL08gY2hpcCBpbmNsdWRlcyBjb21wbGV0ZSBoYXJkd2FyZSBtb25pdG9yaW5nCitjYXBhYmlsaXRpZXMuIEl0IG1vbml0b3JzIDIgZGVkaWNhdGVkIHRlbXBlcmF0dXJlIHNlbnNvciBpbnB1dHMgKHRlbXAxIGFuZAordGVtcDIpLCAxIGRlZGljYXRlZCB2b2x0YWdlIChpbjUpIGFuZCAyIGZhbnMuIEFkZGl0aW9uYWxseSwgdGhlIGNoaXAKK2ltcGxlbWVudHMgNSB1bml2ZXJzYWwgaW5wdXQgY2hhbm5lbHMgKFVDSDEtNSkgdGhhdCBjYW4gYmUgaW5kaXZpZHVhbGx5Citwcm9ncmFtbWVkIHRvIGVpdGhlciBtb25pdG9yIGEgdm9sdGFnZSBvciBhIHRlbXBlcmF0dXJlLgorCitUaGlzIGNoaXAgYWxzbyBwcm92aWRlcyBtYW51YWwgYW5kIGF1dG9tYXRpYyBjb250cm9sIG9mIGZhbiBzcGVlZHMgKGFjY29yZGluZwordG8gdGhlIGRhdGFzaGVldCkuIFRoZSBkcml2ZXIgb25seSBzdXBwb3J0cyBhdXRvbWF0aWMgY29udHJvbCBzaW5jZSB0aGUgbWFudWFsCittb2RlIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGFzIGFkdmVydGlzZWQgaW4gdGhlIGRhdGFzaGVldC4gSW4gZmFjdCBJIGNvdWxkbid0CitnZXQgbWFudWFsIG1vZGUgdG8gd29yayBhdCBhbGwhIEJlIGF3YXJlIHRoYXQgYXV0b21hdGljIG1vZGUgaGFzbid0IGJlZW4KK3Rlc3RlZCB2ZXJ5IHdlbGwgKGR1ZSB0byB0aGUgZmFjdCB0aGF0IG15IEVQSUEgTTEwMDAwIGRvZXNuJ3QgaGF2ZSB0aGUgZmFucworY29ubmVjdGVkIHRvIHRoZSBQV00gb3V0cHV0cyBvZiB0aGUgVlQxMjExIDotKCkuCisKK1RoZSBmb2xsb3dpbmcgdGFibGUgc2hvd3MgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSB2dDEyMTEgaW5wdXRzIGFuZCB0aGUKK3N5c2ZzIG5vZGVzLgorCitTZW5zb3IgICAgICAgICAgVm9sdGFnZSBNb2RlICAgVGVtcCBNb2RlICAgRGVmYXVsdCBVc2UgKGZyb20gdGhlIGRhdGFzaGVldCkKKy0tLS0tLSAgICAgICAgICAtLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUmVhZGluZyAxICAgICAgICAgICAgICAgICAgICAgIHRlbXAxICAgICAgIEludGVsIHRoZXJtYWwgZGlvZGUKK1JlYWRpbmcgMyAgICAgICAgICAgICAgICAgICAgICB0ZW1wMiAgICAgICBJbnRlcm5hbCB0aGVybWFsIGRpb2RlCitVQ0gxL1JlYWRpbmcyICAgaW4wICAgICAgICAgICAgdGVtcDMgICAgICAgTlRDIHR5cGUgdGhlcm1pc3RvcgorVUNIMiAgICAgICAgICAgIGluMSAgICAgICAgICAgIHRlbXA0ICAgICAgICsyLjVWCitVQ0gzICAgICAgICAgICAgaW4yICAgICAgICAgICAgdGVtcDUgICAgICAgVmNjUCAocHJvY2Vzc29yIGNvcmUpCitVQ0g0ICAgICAgICAgICAgaW4zICAgICAgICAgICAgdGVtcDYgICAgICAgKzVWCitVQ0g1ICAgICAgICAgICAgaW40ICAgICAgICAgICAgdGVtcDcgICAgICAgKzEyVgorKzMuM1YgICAgICAgICAgIGluNSAgICAgICAgICAgICAgICAgICAgICAgIEludGVybmFsIFZDQyAoKzMuM1YpCisKKworVm9sdGFnZSBNb25pdG9yaW5nCistLS0tLS0tLS0tLS0tLS0tLS0KKworVm9sdGFnZXMgYXJlIHNhbXBsZWQgYnkgYW4gOC1iaXQgQURDIHdpdGggYSBMU0Igb2YgfjEwbVYuIFRoZSBzdXBwb3J0ZWQgaW5wdXQKK3JhbmdlIGlzIHRodXMgZnJvbSAwIHRvIDIuNjBWLiBWb2x0YWdlIHZhbHVlcyBvdXRzaWRlIG9mIHRoaXMgcmFuZ2UgbmVlZAorZXh0ZXJuYWwgc2NhbGluZyByZXNpc3RvcnMuIFRoaXMgZXh0ZXJuYWwgc2NhbGluZyBuZWVkcyB0byBiZSBjb21wZW5zYXRlZCBmb3IKK3ZpYSBjb21wdXRlIGxpbmVzIGluIHNlbnNvcnMuY29uZiwgbGlrZToKKworY29tcHV0ZSBpbnggQCooMStSMS9SMiksIEAvKDErUjEvUjIpCisKK1RoZSBib2FyZCBsZXZlbCBzY2FsaW5nIHJlc2lzdG9ycyBhY2NvcmRpbmcgdG8gVklBJ3MgcmVjb21tZW5kYXRpb24gYXJlIGFzCitmb2xsb3dzLiBBbmQgdGhpcyBpcyBvZiBjb3Vyc2UgdG90YWxseSBkZXBlbmRlbnQgb24gdGhlIGFjdHVhbCBib2FyZAoraW1wbGVtZW50YXRpb24gOi0pIFlvdSB3aWxsIGhhdmUgdG8gZmluZCBkb2N1bWVudGF0aW9uIGZvciB5b3VyIG93bgorbW90aGVyYm9hcmQgYW5kIGVkaXQgc2Vuc29ycy5jb25mIGFjY29yZGluZ2x5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEV4cGVjdGVkCitWb2x0YWdlICAgICAgIFIxICAgICBSMiAgICAgRGl2aWRlciAgIFJhdyBWYWx1ZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKysyLjVWICAgICAgICAgMksgICAgIDEwSyAgICAxLjIgICAgICAgMjA4MyBtVgorVmNjUCAgICAgICAgICAtLS0gICAgLS0tICAgIDEuMCAgICAgICAxNDAwIG1WICgxKQorKzVWICAgICAgICAgICAxNEsgICAgMTBLICAgIDIuNCAgICAgICAyMDgzIG1WCisrMTJWICAgICAgICAgIDQ3SyAgICAxMEsgICAgNS43ICAgICAgIDIxMDUgbVYKKyszLjNWIChpbnQpICAgMksgICAgIDMuNEsgICAxLjU4OCAgICAgMzMwMCBtViAoMikKKyszLjNWIChleHQpICAgNi44SyAgIDEwSyAgICAxLjY4ICAgICAgMTk2NCBtVgorCisoMSkgRGVwZW5kaW5nIG9uIHRoZSBDUFUgKDEuNFYgaXMgZm9yIGEgVklBIEMzIE5laGVtaWFoKS4KKygyKSBSMSBhbmQgUjIgZm9yIDMuM1YgKGludCkgYXJlIGludGVybmFsIHRvIHRoZSBWVDEyMTEgY2hpcCBhbmQgdGhlIGRyaXZlcgorICAgIHBlcmZvcm1zIHRoZSBzY2FsaW5nIGFuZCByZXR1cm5zIHRoZSBwcm9wZXJseSBzY2FsZWQgdm9sdGFnZSB2YWx1ZS4KKworRWFjaCBtZWFzdXJlZCB2b2x0YWdlIGhhcyBhbiBhc3NvY2lhdGVkIGxvdyBhbmQgaGlnaCBsaW1pdCB3aGljaCB0cmlnZ2VycyBhbgorYWxhcm0gd2hlbiBjcm9zc2VkLgorCisKK1RlbXBlcmF0dXJlIE1vbml0b3JpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGVtcGVyYXR1cmVzIGFyZSByZXBvcnRlZCBpbiBtaWxsaWRlZ3JlZSBDZWxzaXVzLiBFYWNoIG1lYXN1cmVkIHRlbXBlcmF0dXJlCitoYXMgYSBoaWdoIGxpbWl0IHdoaWNoIHRyaWdnZXJzIGFuIGFsYXJtIGlmIGNyb3NzZWQuIFRoZXJlIGlzIGFuIGFzc29jaWF0ZWQKK2h5c3RlcmVzaXMgdmFsdWUgd2l0aCBlYWNoIHRlbXBlcmF0dXJlIGJlbG93IHdoaWNoIHRoZSB0ZW1wZXJhdHVyZSBoYXMgdG8gZHJvcAorYmVmb3JlIHRoZSBhbGFybSBpcyBjbGVhcmVkICh0aGlzIGlzIG9ubHkgdHJ1ZSBmb3IgaW50ZXJydXB0IG1vZGUgMCkuIFRoZQoraW50ZXJydXB0IG1vZGUgY2FuIGJlIGZvcmNlZCB0byAwIGluIGNhc2UgdGhlIEJJT1MgZG9lc24ndCBkbyBpdAorYXV0b21hdGljYWxseS4gU2VlIHRoZSAnTW9kdWxlIFBhcmFtZXRlcnMnIHNlY3Rpb24gZm9yIGRldGFpbHMuCisKK0FsbCB0ZW1wZXJhdHVyZSBjaGFubmVscyBleGNlcHQgdGVtcDIgYXJlIGV4dGVybmFsLiBUZW1wMiBpcyB0aGUgVlQxMjExCitpbnRlcm5hbCB0aGVybWFsIGRpb2RlIGFuZCB0aGUgZHJpdmVyIGRvZXMgYWxsIHRoZSBzY2FsaW5nIGZvciB0ZW1wMiBhbmQKK3JldHVybnMgdGhlIHRlbXBlcmF0dXJlIGluIG1pbGxpZGVncmVlIENlbHNpdXMuIEZvciB0aGUgZXh0ZXJuYWwgY2hhbm5lbHMKK3RlbXAxIGFuZCB0ZW1wMy10ZW1wNywgc2NhbGluZyBkZXBlbmRzIG9uIHRoZSBib2FyZCBpbXBsZW1lbnRhdGlvbiBhbmQgbmVlZHMKK3RvIGJlIHBlcmZvcm1lZCBpbiB1c2Vyc3BhY2UgdmlhIHNlbnNvcnMuY29uZi4KKworVGVtcDEgaXMgYW4gSW50ZWwtdHlwZSB0aGVybWFsIGRpb2RlIHdoaWNoIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgZm9ybXVsYSB0bworY29udmVydCBiZXR3ZWVuIHN5c2ZzIHJlYWRpbmdzIGFuZCByZWFsIHRlbXBlcmF0dXJlczoKKworY29tcHV0ZSB0ZW1wMSAoQC1PZmZzZXQpL0dhaW4sIChAKkdhaW4pK09mZnNldAorCitBY2NvcmRpbmcgdG8gdGhlIFZJQSBWVDEyMTEgQklPUyBwb3J0aW5nIGd1aWRlLCB0aGUgZm9sbG93aW5nIGdhaW4gYW5kIG9mZnNldAordmFsdWVzIHNob3VsZCBiZSB1c2VkOgorCitEaW9kZSBUeXBlICAgICAgT2Zmc2V0ICAgR2FpbgorLS0tLS0tLS0tLSAgICAgIC0tLS0tLSAgIC0tLS0KK0ludGVsIENQVSAgICAgICA4OC42MzggICAwLjk1MjgKKyAgICAgICAgICAgICAgICA2NS4wMDAgICAwLjk2ODYgICAqKQorVklBIEMzIEV6cmEgICAgIDgzLjg2OSAgIDAuOTUyOAorVklBIEMzIEV6cmEtVCAgIDczLjg2OSAgIDAuOTUyOAorCisqKSBUaGlzIGlzIHRoZSBmb3JtdWxhIGZyb20gdGhlIGxtX3NlbnNvcnMgMi4xMC4wIHNlbnNvcnMuY29uZiBmaWxlLiBJIGRvbid0Citrbm93IHdoZXJlIGl0IGNvbWVzIGZyb20gb3IgaG93IGl0IHdhcyBkZXJpdmVkLCBpdCdzIGp1c3QgbGlzdGVkIGhlcmUgZm9yCitjb21wbGV0ZW5lc3MuCisKK1RlbXAzLXRlbXA3IHN1cHBvcnQgTlRDIHRoZXJtaXN0b3JzLiBGb3IgdGhlc2UgY2hhbm5lbHMsIHRoZSBkcml2ZXIgcmV0dXJucwordGhlIHZvbHRhZ2VzIGFzIHNlZW4gYXQgdGhlIGluZGl2aWR1YWwgcGlucyBvZiBVQ0gxLVVDSDUuIFRoZSB2b2x0YWdlIGF0IHRoZQorcGluIChWcGluKSBpcyBmb3JtZWQgYnkgYSB2b2x0YWdlIGRpdmlkZXIgbWFkZSBvZiB0aGUgdGhlcm1pc3RvciAoUnRoKSBhbmQgYQorc2NhbGluZyByZXNpc3RvciAoUnMpOgorCitWcGluID0gMjIwMCAqIFJ0aCAvIChScyArIFJ0aCkgICAoMjIwMCBpcyB0aGUgQURDIG1heCBsaW1pdCBvZiAyMjAwIG1WKQorCitUaGUgZXF1YXRpb24gZm9yIHRoZSB0aGVybWlzdG9yIGlzIGFzIGZvbGxvd3MgKGdvb2dsZSBpdCBpZiB5b3Ugd2FudCB0byBrbm93Cittb3JlIGFib3V0IGl0KToKKworUnRoID0gUm8gKiBleHAoQiAqICgxIC8gVCAtIDEgLyBUbykpICAgKFRvIGlzIDI5OC4xNUsgKDI1QykgYW5kIFJvIGlzIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vbWluYWwgcmVzaXN0YW5jZSBhdCAyNUMpCisKK01pbmdsaW5nIHRoZSBhYm92ZSB0d28gZXF1YXRpb25zIGFuZCBhc3N1bWluZyBScyA9IFJvIGFuZCBCID0gMzQzNSB5aWVsZHMgdGhlCitmb2xsb3dpbmcgZm9ybXVsYSBmb3Igc2Vuc29ycy5jb25mOgorCitjb21wdXRlIHRlbXB4IDEgLyAoMSAvIDI5OC4xNSAtIChgICgyMjAwIC8gQCAtIDEpKSAvIDM0MzUpIC0gMjczLjE1LAorICAgICAgICAgICAgICAyMjAwIC8gKDEgKyAoXiAoMzQzNSAvIDI5OC4xNSAtIDM0MzUgLyAoMjczLjE1ICsgQCkpKSkKKworCitGYW4gU3BlZWQgQ29udHJvbAorLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIFZUMTIxMSBwcm92aWRlcyAyIHByb2dyYW1tYWJsZSBQV00gb3V0cHV0cyB0byBjb250cm9sIHRoZSBzcGVlZHMgb2YgMgorZmFucy4gV3JpdGluZyBhIDIgdG8gYW55IG9mIHRoZSB0d28gcHdtWzEtMl1fZW5hYmxlIHN5c2ZzIG5vZGVzIHdpbGwgcHV0IHRoZQorUFdNIGNvbnRyb2xsZXIgaW4gYXV0b21hdGljIG1vZGUuIFRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgY29udHJvbGxlciB0aGF0Citjb250cm9scyBib3RoIFBXTSBvdXRwdXRzIGJ1dCBlYWNoIFBXTSBvdXRwdXQgY2FuIGJlIGluZGl2aWR1YWxseSBlbmFibGVkIGFuZAorZGlzYWJsZWQuCisKK0VhY2ggUFdNIGhhcyA0IGFzc29jaWF0ZWQgZGlzdGluY3Qgb3V0cHV0IGR1dHktY3ljbGVzOiBmdWxsLCBoaWdoLCBsb3cgYW5kCitvZmYuIEZ1bGwgYW5kIG9mZiBhcmUgaW50ZXJuYWxseSBoYXJkLXdpcmVkIHRvIDI1NSAoMTAwJSkgYW5kIDAgKDAlKSwKK3Jlc3BlY3RpdmVseS4gSGlnaCBhbmQgbG93IGNhbiBiZSBwcm9ncmFtbWVkIHZpYQorcHdtWzEtMl1fYXV0b19wb2ludFsyLTNdX3B3bS4gRWFjaCBQV00gb3V0cHV0IGNhbiBiZSBhc3NvY2lhdGVkIHdpdGggYQorZGlmZmVyZW50IHRoZXJtYWwgaW5wdXQgYnV0IC0gYW5kIGhlcmUncyB0aGUgd2VpcmQgcGFydCAtIG9ubHkgb25lIHNldCBvZgordGhlcm1hbCB0aHJlc2hvbGRzIGV4aXN0IHRoYXQgY29udHJvbHMgYm90aCBQV01zIG91dHB1dCBkdXR5LWN5Y2xlcy4gVGhlCit0aGVybWFsIHRocmVzaG9sZHMgYXJlIGFjY2Vzc2libGUgdmlhIHB3bVsxLTJdX2F1dG9fcG9pbnRbMS00XV90ZW1wLiBOb3RlCit0aGF0IGV2ZW4gdGhvdWdoIHRoZXJlIGFyZSAyIHNldHMgb2YgNCBhdXRvIHBvaW50cyBlYWNoLCB0aGV5IG1hcCB0byB0aGUgc2FtZQorcmVnaXN0ZXJzIGluIHRoZSBWVDEyMTEgYW5kIHByb2dyYW1taW5nIG9uZSBzZXQgaXMgc3VmZmljaWVudCAoYWN0dWFsbHkgb25seQordGhlIGZpcnN0IHNldCBwd20xX2F1dG9fcG9pbnRbMS00XV90ZW1wIGlzIHdyaXRhYmxlLCB0aGUgc2Vjb25kIHNldCBpcworcmVhZC1vbmx5KS4KKworUFdNIEF1dG8gUG9pbnQgICAgICAgICAgICAgUFdNIE91dHB1dCBEdXR5LUN5Y2xlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3B3bVsxLTJdX2F1dG9fcG9pbnQ0X3B3bSAgIGZ1bGwgc3BlZWQgZHV0eS1jeWNsZSAoaGFyZC13aXJlZCB0byAyNTUpCitwd21bMS0yXV9hdXRvX3BvaW50M19wd20gICBoaWdoIHNwZWVkIGR1dHktY3ljbGUKK3B3bVsxLTJdX2F1dG9fcG9pbnQyX3B3bSAgIGxvdyBzcGVlZCBkdXR5LWN5Y2xlCitwd21bMS0yXV9hdXRvX3BvaW50MV9wd20gICBvZmYgZHV0eS1jeWNsZSAoaGFyZC13aXJlZCB0byAwKQorCitUZW1wIEF1dG8gUG9pbnQgICAgICAgICAgICAgVGhlcm1hbCBUaHJlc2hvbGQKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorcHdtWzEtMl1fYXV0b19wb2ludDRfdGVtcCAgIGZ1bGwgc3BlZWQgdGVtcAorcHdtWzEtMl1fYXV0b19wb2ludDNfdGVtcCAgIGhpZ2ggc3BlZWQgdGVtcAorcHdtWzEtMl1fYXV0b19wb2ludDJfdGVtcCAgIGxvdyBzcGVlZCB0ZW1wCitwd21bMS0yXV9hdXRvX3BvaW50MV90ZW1wICAgb2ZmIHRlbXAKKworTG9uZyBzdG9yeSBzaG9ydCwgdGhlIGNvbnRyb2xsZXIgaW1wbGVtZW50cyB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSB0byBzZXQgdGhlCitQV00gb3V0cHV0IGR1dHktY3ljbGUgYmFzZWQgb24gdGhlIGlucHV0IHRlbXBlcmF0dXJlOgorCitUaGVybWFsIFRocmVzaG9sZCAgICAgICAgICAgICBPdXRwdXQgRHV0eS1DeWNsZQorICAgICAgICAgICAgICAgICAgICAoUmlzaW5nIFRlbXApICAgICAgICAgICAoRmFsbGluZyBUZW1wKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICBmdWxsIHNwZWVkIGR1dHktY3ljbGUgICBmdWxsIHNwZWVkIGR1dHktY3ljbGUKK2Z1bGwgc3BlZWQgdGVtcAorICAgICAgICAgICAgICAgICAgICBoaWdoIHNwZWVkIGR1dHktY3ljbGUgICBmdWxsIHNwZWVkIGR1dHktY3ljbGUKK2hpZ2ggc3BlZWQgdGVtcAorICAgICAgICAgICAgICAgICAgICBsb3cgc3BlZWQgZHV0eS1jeWNsZSAgICBoaWdoIHNwZWVkIGR1dHktY3ljbGUKK2xvdyBzcGVlZCB0ZW1wCisgICAgICAgICAgICAgICAgICAgIG9mZiBkdXR5LWN5Y2xlICAgICAgICAgIGxvdyBzcGVlZCBkdXR5LWN5Y2xlCitvZmYgdGVtcApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWUzYjc4Ci0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi93ODM2MjdlaGYKQEAgLTAsMCArMSw4NSBAQAorS2VybmVsIGRyaXZlciB3ODM2MjdlaGYKKz09PT09PT09PT09PT09PT09PT09PT09CisKK1N1cHBvcnRlZCBjaGlwczoKKyAgKiBXaW5ib25kIFc4MzYyN0VIRi9FSEcgKElTQSBhY2Nlc3MgT05MWSkKKyAgICBQcmVmaXg6ICd3ODM2MjdlaGYnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKKyAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC11c2EuY29tL3Byb2R1Y3RzL3dpbmJvbmRfcHJvZHVjdHMvcGRmcy9QQ0lDL1c4MzYyN0VIRl8lMjBXODM2MjdFSEdiLnBkZgorCitBdXRob3JzOgorICAgICAgICBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KKyAgICAgICAgWXVhbiBNdSAoV2luYm9uZCkKKyAgICAgICAgUnVkb2xmIE1hcmVrIDxyLm1hcmVrQHNoLmN2dXQuY3o+CisKK0Rlc2NyaXB0aW9uCistLS0tLS0tLS0tLQorCitUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIHRoZSBXaW5ib25kIFc4MzYyN0VIRiBhbmQgVzgzNjI3RUhHCitzdXBlciBJL08gY2hpcHMuIFdlIHdpbGwgcmVmZXIgdG8gdGhlbSBjb2xsZWN0aXZlbHkgYXMgV2luYm9uZCBjaGlwcy4KKworVGhlIGNoaXBzIGltcGxlbWVudCB0aHJlZSB0ZW1wZXJhdHVyZSBzZW5zb3JzLCBmaXZlIGZhbiByb3RhdGlvbgorc3BlZWQgc2Vuc29ycywgdGVuIGFuYWxvZyB2b2x0YWdlIHNlbnNvcnMsIGFsYXJtcyB3aXRoIGJlZXAgd2FybmluZ3MgKGNvbnRyb2wKK3VuaW1wbGVtZW50ZWQpLCBhbmQgc29tZSBhdXRvbWF0aWMgZmFuIHJlZ3VsYXRpb24gc3RyYXRlZ2llcyAocGx1cyBtYW51YWwKK2ZhbiBjb250cm9sIG1vZGUpLgorCitUZW1wZXJhdHVyZXMgYXJlIG1lYXN1cmVkIGluIGRlZ3JlZXMgQ2Vsc2l1cyBhbmQgbWVhc3VyZW1lbnQgcmVzb2x1dGlvbiBpcyAxCitkZWdDIGZvciB0ZW1wMSBhbmQgMC41IGRlZ0MgZm9yIHRlbXAyIGFuZCB0ZW1wMy4gQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIHdoZW4KK3RoZSB0ZW1wZXJhdHVyZSBnZXRzIGhpZ2hlciB0aGFuIGhpZ2ggbGltaXQ7IGl0IHN0YXlzIG9uIHVudGlsIHRoZSB0ZW1wZXJhdHVyZQorZmFsbHMgYmVsb3cgdGhlIEh5c3RlcmVzaXMgdmFsdWUuCisKK0ZhbiByb3RhdGlvbiBzcGVlZHMgYXJlIHJlcG9ydGVkIGluIFJQTSAocm90YXRpb25zIHBlciBtaW51dGUpLiBBbiBhbGFybSBpcwordHJpZ2dlcmVkIGlmIHRoZSByb3RhdGlvbiBzcGVlZCBoYXMgZHJvcHBlZCBiZWxvdyBhIHByb2dyYW1tYWJsZSBsaW1pdC4gRmFuCityZWFkaW5ncyBjYW4gYmUgZGl2aWRlZCBieSBhIHByb2dyYW1tYWJsZSBkaXZpZGVyICgxLCAyLCA0LCA4LCAxNiwgMzIsIDY0IG9yCisxMjgpIHRvIGdpdmUgdGhlIHJlYWRpbmdzIG1vcmUgcmFuZ2Ugb3IgYWNjdXJhY3kuIFRoZSBkcml2ZXIgc2V0cyB0aGUgbW9zdAorc3VpdGFibGUgZmFuIGRpdmlzb3IgaXRzZWxmLiBTb21lIGZhbnMgbWlnaHQgbm90IGJlIHByZXNlbnQgYmVjYXVzZSB0aGV5CitzaGFyZSBwaW5zIHdpdGggb3RoZXIgZnVuY3Rpb25zLgorCitWb2x0YWdlIHNlbnNvcnMgKGFsc28ga25vd24gYXMgSU4gc2Vuc29ycykgcmVwb3J0IHRoZWlyIHZhbHVlcyBpbiBtaWxsaXZvbHRzLgorQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KK29yIG1heGltdW0gbGltaXQuCisKK1RoZSBkcml2ZXIgc3VwcG9ydHMgYXV0b21hdGljIGZhbiBjb250cm9sIG1vZGUga25vd24gYXMgVGhlcm1hbCBDcnVpc2UuCitJbiB0aGlzIG1vZGUsIHRoZSBjaGlwIGF0dGVtcHRzIHRvIGtlZXAgdGhlIG1lYXN1cmVkIHRlbXBlcmF0dXJlIGluIGEKK3ByZWRlZmluZWQgdGVtcGVyYXR1cmUgcmFuZ2UuIElmIHRoZSB0ZW1wZXJhdHVyZSBnb2VzIG91dCBvZiByYW5nZSwgZmFuCitpcyBkcml2ZW4gc2xvd2VyL2Zhc3RlciB0byByZWFjaCB0aGUgcHJlZGVmaW5lZCByYW5nZSBhZ2Fpbi4KKworVGhlIG1vZGUgd29ya3MgZm9yIGZhbjEtZmFuNC4gTWFwcGluZyBvZiB0ZW1wZXJhdHVyZXMgdG8gcHdtIG91dHB1dHMgaXMgYXMKK2ZvbGxvd3M6CisKK3RlbXAxIC0+IHB3bTEKK3RlbXAyIC0+IHB3bTIKK3RlbXAzIC0+IHB3bTMKK3Byb2cgIC0+IHB3bTQgKHRoZSBwcm9ncmFtbWFibGUgc2V0dGluZyBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIpCisKKy9zeXMgZmlsZXMKKy0tLS0tLS0tLS0KKworcHdtWzEtNF0gLSB0aGlzIGZpbGUgc3RvcmVzIFBXTSBkdXR5IGN5Y2xlIG9yIERDIHZhbHVlIChmYW4gc3BlZWQpIGluIHJhbmdlOgorCSAgIDAgKHN0b3ApIHRvIDI1NSAoZnVsbCkKKworcHdtWzEtNF1fZW5hYmxlIC0gdGhpcyBmaWxlIGNvbnRyb2xzIG1vZGUgb2YgZmFuL3RlbXBlcmF0dXJlIGNvbnRyb2w6CisJKiAxIE1hbnVhbCBNb2RlLCB3cml0ZSB0byBwd20gZmlsZSBhbnkgdmFsdWUgMC0yNTUgKGZ1bGwgc3BlZWQpCisJKiAyIFRoZXJtYWwgQ3J1aXNlCisKK1RoZXJtYWwgQ3J1aXNlIG1vZGUKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgdGhlIHRlbXBlcmF0dXJlIGlzIGluIHRoZSByYW5nZSBkZWZpbmVkIGJ5OgorCitwd21bMS00XV90YXJnZXQgICAgLSBzZXQgdGFyZ2V0IHRlbXBlcmF0dXJlLCB1bml0IG1pbGxpZGVncmVlIENlbGNpdXMKKwkJICAgICAocmFuZ2UgMCAtIDEyNzAwMCkKK3B3bVsxLTRdX3RvbGVyYW5jZSAtIHRvbGVyYW5jZSwgdW5pdCBtaWxsaWRlZ3JlZSBDZWxjaXVzIChyYW5nZSAwIC0gMTUwMDApCisKK3RoZXJlIGFyZSBubyBjaGFuZ2VzIHRvIGZhbiBzcGVlZC4gT25jZSB0aGUgdGVtcGVyYXR1cmUgbGVhdmVzIHRoZSBpbnRlcnZhbCwKK2ZhbiBzcGVlZCBpbmNyZWFzZXMgKHRlbXAgaXMgaGlnaGVyKSBvciBkZWNyZWFzZXMgaWYgbG93ZXIgdGhhbiBkZXNpcmVkLgorVGhlcmUgYXJlIGRlZmluZWQgc3RlcHMgYW5kIHRpbWVzLCBidXQgbm90IGV4cG9ydGVkIGJ5IHRoZSBkcml2ZXIgeWV0LgorCitwd21bMS00XV9taW5fb3V0cHV0IC0gbWluaW11bSBmYW4gc3BlZWQgKHJhbmdlIDEgLSAyNTUpLCB3aGVuIHRoZSB0ZW1wZXJhdHVyZQorICAgICAgICAgICAgICAgICAgICAgIGlzIGJlbG93IGRlZmluZWQgcmFuZ2UuCitwd21bMS00XV9zdG9wX3RpbWUgIC0gaG93IG1hbnkgbWlsbGlzZWNvbmRzIFttc10gbXVzdCBlbGFwc2UgdG8gc3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBmYW4gb2ZmLiAod2hlbiB0aGUgdGVtcGVyYXR1cmUgd2FzIGJlbG93CisgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCByYW5nZSkuCisKK05vdGU6IGxhc3QgdHdvIGZ1bmN0aW9ucyBhcmUgaW5mbHVlbmNlZCBieSBvdGhlciBjb250cm9sIGJpdHMsIG5vdCB5ZXQgZXhwb3J0ZWQKKyAgICAgIGJ5IHRoZSBkcml2ZXIsIHNvIGEgY2hhbmdlIG1pZ2h0IG5vdCBoYXZlIGFueSBlZmZlY3QuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4Mzc5MWQKaW5kZXggODNhMzgzNi4uMTliMmVkNyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9od21vbi93ODM3OTFkCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNzkxZApAQCAtNSw3ICs1LDcgQEAKICAgKiBXaW5ib25kIFc4Mzc5MUQKICAgICBQcmVmaXg6ICd3ODM3OTFkJwogICAgIEFkZHJlc3NlcyBzY2FubmVkOiBJMkMgMHgyYyAtIDB4MmYKLSAgICBEYXRhc2hlZXQ6IGh0dHA6Ly93d3cud2luYm9uZC11c2EuY29tL3Byb2R1Y3RzL3dpbmJvbmRfcHJvZHVjdHMvcGRmcy9QQ0lDL1c4Mzc5MURhLnBkZgorICAgIERhdGFzaGVldDogaHR0cDovL3d3dy53aW5ib25kLXVzYS5jb20vcHJvZHVjdHMvd2luYm9uZF9wcm9kdWN0cy9wZGZzL1BDSUMvVzgzNzkxRF9XODM3OTFHYi5wZGYKIAogQXV0aG9yOiBDaGFybGVzIFNwaXJha2lzIDxiZXphdXJAZ21haWwuY29tPgogCkBAIC0yMCw2ICsyMCw5IEBACiAgICAgQ2h1bmhhbyBIdWFuZyA8RFpTaGVuQFdpbmJvbmQuY29tLnR3PiwKICAgICBSdWRvbGYgTWFyZWsgPHIubWFyZWtAc2guY3Z1dC5jej4KIAorQWRkaXRpb25hbCBjb250cmlidXRvcnM6CisgICAgU3ZlbiBBbmRlcnMgPGFuZGVyc0BhbmR1cmFzLmRlPgorCiBNb2R1bGUgUGFyYW1ldGVycwogLS0tLS0tLS0tLS0tLS0tLS0KIApAQCAtNDYsNyArNDksOCBAQAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLVRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNzkxRCBjaGlwLgorVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM3OTFEIGNoaXAuIFRoZSBXODM3OTFHCitjaGlwIGFwcGVhcnMgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIFc4Mzc5MUQgYnV0IGlzIGxlYWQgZnJlZS4KIAogRGV0ZWN0aW9uIG9mIHRoZSBjaGlwIGNhbiBzb21ldGltZXMgYmUgZm9pbGVkIGJlY2F1c2UgaXQgY2FuIGJlIGluIGFuCiBpbnRlcm5hbCBzdGF0ZSB0aGF0IGFsbG93cyBubyBjbGVhbiBhY2Nlc3MgKEJhbmsgd2l0aCBJRCByZWdpc3RlciBpcyBub3QKQEAgLTcxLDM0ICs3NSwzNiBAQAogQW4gYWxhcm0gaXMgdHJpZ2dlcmVkIGlmIHRoZSB2b2x0YWdlIGhhcyBjcm9zc2VkIGEgcHJvZ3JhbW1hYmxlIG1pbmltdW0KIG9yIG1heGltdW0gbGltaXQuCiAKLUFsYXJtcyBhcmUgcHJvdmlkZWQgYXMgb3V0cHV0IGZyb20gYSAicmVhbHRpbWUgc3RhdHVzIHJlZ2lzdGVyIi4gVGhlCi1mb2xsb3dpbmcgYml0cyBhcmUgZGVmaW5lZDoKK1RoZSBiaXQgb3JkZXJpbmcgZm9yIHRoZSBhbGFybSAicmVhbHRpbWUgc3RhdHVzIHJlZ2lzdGVyIiBhbmQgdGhlCisiYmVlcCBlbmFibGUgcmVnaXN0ZXJzIiBhcmUgZGlmZmVyZW50LgogCi1iaXQgLSBhbGFybSBvbjoKLTAgIC0gVmNvcmUKLTEgIC0gVklOUjAKLTIgIC0gKzMuM1ZJTgotMyAgLSA1VkRECi00ICAtIHRlbXAxCi01ICAtIHRlbXAyCi02ICAtIGZhbjEKLTcgIC0gZmFuMgotOCAgLSArMTJWSU4KLTkgIC0gLTEyVklOCi0xMCAtIC01VklOCi0xMSAtIGZhbjMKLTEyIC0gY2hhc3NpcwotMTMgLSB0ZW1wMwotMTQgLSBWSU5SMQotMTUgLSByZXNlcnZlZAotMTYgLSB0YXJ0MQotMTcgLSB0YXJ0MgotMTggLSB0YXJ0MwotMTkgLSBWU0IKLTIwIC0gVkJBVAotMjEgLSBmYW40Ci0yMiAtIGZhbjUKLTIzIC0gcmVzZXJ2ZWQKK2luMCAoVkNPUkUpICA6ICBhbGFybXM6IDB4MDAwMDAxIGJlZXBfZW5hYmxlOiAweDAwMDAwMQoraW4xIChWSU5SMCkgIDogIGFsYXJtczogMHgwMDAwMDIgYmVlcF9lbmFibGU6IDB4MDAyMDAwIDw9PSBtaXNtYXRjaAoraW4yICgrMy4zVklOKTogIGFsYXJtczogMHgwMDAwMDQgYmVlcF9lbmFibGU6IDB4MDAwMDA0CitpbjMgKDVWREQpICAgOiAgYWxhcm1zOiAweDAwMDAwOCBiZWVwX2VuYWJsZTogMHgwMDAwMDgKK2luNCAoKzEyVklOKSA6ICBhbGFybXM6IDB4MDAwMTAwIGJlZXBfZW5hYmxlOiAweDAwMDEwMAoraW41ICgtMTJWSU4pIDogIGFsYXJtczogMHgwMDAyMDAgYmVlcF9lbmFibGU6IDB4MDAwMjAwCitpbjYgKC01VklOKSAgOiAgYWxhcm1zOiAweDAwMDQwMCBiZWVwX2VuYWJsZTogMHgwMDA0MDAKK2luNyAoVlNCKSAgICA6ICBhbGFybXM6IDB4MDgwMDAwIGJlZXBfZW5hYmxlOiAweDAxMDAwMCA8PT0gbWlzbWF0Y2gKK2luOCAoVkJBVCkgICA6ICBhbGFybXM6IDB4MTAwMDAwIGJlZXBfZW5hYmxlOiAweDAyMDAwMCA8PT0gbWlzbWF0Y2gKK2luOSAoVklOUjEpICA6ICBhbGFybXM6IDB4MDA0MDAwIGJlZXBfZW5hYmxlOiAweDAwNDAwMAordGVtcDEgICAgICAgIDogIGFsYXJtczogMHgwMDAwMTAgYmVlcF9lbmFibGU6IDB4MDAwMDEwCit0ZW1wMiAgICAgICAgOiAgYWxhcm1zOiAweDAwMDAyMCBiZWVwX2VuYWJsZTogMHgwMDAwMjAKK3RlbXAzICAgICAgICA6ICBhbGFybXM6IDB4MDAyMDAwIGJlZXBfZW5hYmxlOiAweDAwMDAwMiA8PT0gbWlzbWF0Y2gKK2ZhbjEgICAgICAgICA6ICBhbGFybXM6IDB4MDAwMDQwIGJlZXBfZW5hYmxlOiAweDAwMDA0MAorZmFuMiAgICAgICAgIDogIGFsYXJtczogMHgwMDAwODAgYmVlcF9lbmFibGU6IDB4MDAwMDgwCitmYW4zICAgICAgICAgOiAgYWxhcm1zOiAweDAwMDgwMCBiZWVwX2VuYWJsZTogMHgwMDA4MDAKK2ZhbjQgICAgICAgICA6ICBhbGFybXM6IDB4MjAwMDAwIGJlZXBfZW5hYmxlOiAweDIwMDAwMAorZmFuNSAgICAgICAgIDogIGFsYXJtczogMHg0MDAwMDAgYmVlcF9lbmFibGU6IDB4NDAwMDAwCit0YXJ0MSAgICAgICAgOiAgYWxhcm1zOiAweDAxMDAwMCBiZWVwX2VuYWJsZTogMHgwNDAwMDAgPD09IG1pc21hdGNoCit0YXJ0MiAgICAgICAgOiAgYWxhcm1zOiAweDAyMDAwMCBiZWVwX2VuYWJsZTogMHgwODAwMDAgPD09IG1pc21hdGNoCit0YXJ0MyAgICAgICAgOiAgYWxhcm1zOiAweDA0MDAwMCBiZWVwX2VuYWJsZTogMHgxMDAwMDAgPD09IG1pc21hdGNoCitjYXNlX29wZW4gICAgOiAgYWxhcm1zOiAweDAwMTAwMCBiZWVwX2VuYWJsZTogMHgwMDEwMDAKK3VzZXJfZW5hYmxlICA6ICBhbGFybXM6IC0tLS0tLS0tIGJlZXBfZW5hYmxlOiAweDgwMDAwMAorCisqKiogTk9URTogSXQgaXMgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHVzZXItc3BhY2UgY29kZSB0byBoYW5kbGUgdGhlIGZhY3QKK3RoYXQgdGhlIGJlZXAgZW5hYmxlIGFuZCBhbGFybSBiaXRzIGFyZSBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIHdoZW4gdXNpbmcgdGhhdAorZmVhdHVyZSBvZiB0aGUgY2hpcC4KIAogV2hlbiBhbiBhbGFybSBnb2VzIG9mZiwgeW91IGNhbiBiZSB3YXJuZWQgYnkgYSBiZWVwaW5nIHNpZ25hbCB0aHJvdWdoIHlvdXIKIGNvbXB1dGVyIHNwZWFrZXIuIEl0IGlzIHBvc3NpYmxlIHRvIGVuYWJsZSBhbGwgYmVlcGluZyBnbG9iYWxseSwgb3Igb25seQpAQCAtMTA5LDUgKzExNSw2IEBACiAKIFc4Mzc5MUQgVE9ETzoKIC0tLS0tLS0tLS0tLS0tLQotUHJvdmlkZSBhIHBhdGNoIGZvciBwZXItZmlsZSBhbGFybXMgYXMgZGlzY3Vzc2VkIG9uIHRoZSBtYWlsaW5nIGxpc3QKK1Byb3ZpZGUgYSBwYXRjaCBmb3IgcGVyLWZpbGUgYWxhcm1zIGFuZCBiZWVwIGVuYWJsZXMgYXMgZGVmaW5lZCBpbiB0aGUgaHdtb24KKwlkb2N1bWVudGF0aW9uIChEb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZSkKIFByb3ZpZGUgYSBwYXRjaCBmb3Igc21hcnQtZmFuIGNvbnRyb2wgKHN0aWxsIG5lZWQgYXBwcm9wcmlhdGUgbW90aGVyYm9hcmQvZmFucykKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2J1c3Nlcy9pMmMtdmlhcHJvIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KaW5kZXggMTY3NzU2Ni4uMjU2ODAzNCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KKysrIGIvRG9jdW1lbnRhdGlvbi9pMmMvYnVzc2VzL2kyYy12aWFwcm8KQEAgLTcsOSArNywxMiBAQAogICAqIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gVlQ4MkM2ODZBL0IKICAgICBEYXRhc2hlZXQ6IFNvbWV0aW1lcyBhdmFpbGFibGUgYXQgdGhlIFZJQSB3ZWJzaXRlCiAKLSAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZUODIzMSwgVlQ4MjMzLCBWVDgyMzNBLCBWVDgyMzUsIFZUODIzN1IKKyAgKiBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIFZUODIzMSwgVlQ4MjMzLCBWVDgyMzNBCiAgICAgRGF0YXNoZWV0OiBhdmFpbGFibGUgb24gcmVxdWVzdCBmcm9tIFZJQQogCisgICogVklBIFRlY2hub2xvZ2llcywgSW5jLiBWVDgyMzUsIFZUODIzN1IsIFZUODIzN0EsIFZUODI1MQorICAgIERhdGFzaGVldDogYXZhaWxhYmxlIG9uIHJlcXVlc3QgYW5kIHVuZGVyIE5EQSBmcm9tIFZJQQorCiBBdXRob3JzOgogCUt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiwKIAlNYXJrIEQuIFN0dWRlYmFrZXIgPG1kc3h5ejEyM0B5YWhvby5jb20+LApAQCAtMzksNiArNDIsOCBAQAogIGRldmljZSAxMTA2OjgyMzUgICAoVlQ4MjMxIGZ1bmN0aW9uIDQpCiAgZGV2aWNlIDExMDY6MzE3NyAgIChWVDgyMzUpCiAgZGV2aWNlIDExMDY6MzIyNyAgIChWVDgyMzdSKQorIGRldmljZSAxMTA2OjMzMzcgICAoVlQ4MjM3QSkKKyBkZXZpY2UgMTEwNjozMjg3ICAgKFZUODI1MSkKIAogSWYgbm9uZSBvZiB0aGVzZSBzaG93IHVwLCB5b3Ugc2hvdWxkIGxvb2sgaW4gdGhlIEJJT1MgZm9yIHNldHRpbmdzIGxpa2UKIGVuYWJsZSBBQ1BJIC8gU01CdXMgb3IgZXZlbiBVU0IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2kyYy9pMmMtc3R1YiBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCmluZGV4IGQ2ZGNiMTMuLjljYzA4MWUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCisrKyBiL0RvY3VtZW50YXRpb24vaTJjL2kyYy1zdHViCkBAIC02LDkgKzYsMTIgQEAKIHR5cGVzIG9mIFNNQnVzIGNvbW1hbmRzOiB3cml0ZSBxdWljaywgKHIvdykgYnl0ZSwgKHIvdykgYnl0ZSBkYXRhLCBhbmQKIChyL3cpIHdvcmQgZGF0YS4KIAorWW91IG5lZWQgdG8gcHJvdmlkZSBhIGNoaXAgYWRkcmVzcyBhcyBhIG1vZHVsZSBwYXJhbWV0ZXIgd2hlbiBsb2FkaW5nCit0aGlzIGRyaXZlciwgd2hpY2ggd2lsbCB0aGVuIG9ubHkgcmVhY3QgdG8gU01CdXMgY29tbWFuZHMgdG8gdGhpcyBhZGRyZXNzLgorCiBObyBoYXJkd2FyZSBpcyBuZWVkZWQgbm9yIGFzc29jaWF0ZWQgd2l0aCB0aGlzIG1vZHVsZS4gIEl0IHdpbGwgYWNjZXB0IHdyaXRlCi1xdWljayBjb21tYW5kcyB0byBhbGwgYWRkcmVzc2VzOyBpdCB3aWxsIHJlc3BvbmQgdG8gdGhlIG90aGVyIGNvbW1hbmRzIChhbHNvCi10byBhbGwgYWRkcmVzc2VzKSBieSByZWFkaW5nIGZyb20gb3Igd3JpdGluZyB0byBhbiBhcnJheSBpbiBtZW1vcnkuICBJdCB3aWxsCitxdWljayBjb21tYW5kcyB0byBvbmUgYWRkcmVzczsgaXQgd2lsbCByZXNwb25kIHRvIHRoZSBvdGhlciBjb21tYW5kcyAoYWxzbwordG8gb25lIGFkZHJlc3MpIGJ5IHJlYWRpbmcgZnJvbSBvciB3cml0aW5nIHRvIGFuIGFycmF5IGluIG1lbW9yeS4gIEl0IHdpbGwKIGFsc28gc3BhbSB0aGUga2VybmVsIGxvZ3MgZm9yIGV2ZXJ5IGNvbW1hbmQgaXQgaGFuZGxlcy4KIAogQSBwb2ludGVyIHJlZ2lzdGVyIHdpdGggYXV0by1pbmNyZW1lbnQgaXMgaW1wbGVtZW50ZWQgZm9yIGFsbCBieXRlCkBAIC0yMSw2ICsyNCwxMSBAQAogCTMuIGxvYWQgdGhlIHRhcmdldCBzZW5zb3JzIGNoaXAgZHJpdmVyIG1vZHVsZQogCTQuIG9ic2VydmUgaXRzIGJlaGF2aW9yIGluIHRoZSBrZXJuZWwgbG9nCiAKK1BBUkFNRVRFUlM6CisKK2ludCBjaGlwX2FkZHI6CisJVGhlIFNNQnVzIGFkZHJlc3MgdG8gZW11bGF0ZSBhIGNoaXAgYXQuCisKIENBVkVBVFM6CiAKIFRoZXJlIGFyZSBpbmRlcGVuZGVudCBhcnJheXMgZm9yIGJ5dGUvZGF0YSBhbmQgd29yZC9kYXRhIGNvbW1hbmRzLiAgRGVwZW5kaW5nCkBAIC0zMyw2ICs0MSw5IEBACiBjaGlwcykgdGhpcyBtb2R1bGUgd2lsbCBub3Qgd29yayB3ZWxsIC0gYWx0aG91Z2ggaXQgY291bGQgYmUgZXh0ZW5kZWQgdG8KIHN1cHBvcnQgdGhhdCBwcmV0dHkgZWFzaWx5LgogCitPbmx5IG9uZSBjaGlwIGFkZHJlc3MgaXMgc3VwcG9ydGVkIC0gYWx0aG91Z2ggdGhpcyBtb2R1bGUgY291bGQgYmUKK2V4dGVuZGVkIHRvIHN1cHBvcnQgbW9yZS4KKwogSWYgeW91IHNwYW0gaXQgaGFyZCBlbm91Z2gsIHByaW50ayBjYW4gYmUgbG9zc3kuICBUaGlzIG1vZHVsZSByZWFsbHkgd2FudHMKIHNvbWV0aGluZyBsaWtlIHJlbGF5ZnMuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKaW5kZXggYzkxOGNjMy4uMTM3ZTk5MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQKQEAgLTExMCw2ICsxMTAsMTMgQEAKIGl0IHdpbGwgYXBwZWFyIGFzIGEga2VybmVsIGFyZ3VtZW50IHJlYWRhYmxlIHZpYSAvcHJvYy9jbWRsaW5lIGJ5IHByb2dyYW1zCiBydW5uaW5nIG9uY2UgdGhlIHN5c3RlbSBpcyB1cC4KIAorVGhlIG51bWJlciBvZiBrZXJuZWwgcGFyYW1ldGVycyBpcyBub3QgbGltaXRlZCwgYnV0IHRoZSBsZW5ndGggb2YgdGhlCitjb21wbGV0ZSBjb21tYW5kIGxpbmUgKHBhcmFtZXRlcnMgaW5jbHVkaW5nIHNwYWNlcyBldGMuKSBpcyBsaW1pdGVkIHRvCithIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzLiBUaGlzIGxpbWl0IGRlcGVuZHMgb24gdGhlIGFyY2hpdGVjdHVyZQorYW5kIGlzIGJldHdlZW4gMjU2IGFuZCA0MDk2IGNoYXJhY3RlcnMuIEl0IGlzIGRlZmluZWQgaW4gdGhlIGZpbGUKKy4vaW5jbHVkZS9hc20vc2V0dXAuaCBhcyBDT01NQU5EX0xJTkVfU0laRS4KKworCiAJNTNjN3h4PQkJW0hXLFNDU0ldIEFtaWdhIFNDU0kgY29udHJvbGxlcnMKIAkJCVNlZSBoZWFkZXIgb2YgZHJpdmVycy9zY3NpLzUzYzd4eC5jLgogCQkJU2VlIGFsc28gRG9jdW1lbnRhdGlvbi9zY3NpL25jcjUzYzd4eC50eHQuCkBAIC01NzMsOCArNTgwLDYgQEAKIAlnc2NkPQkJW0hXLENEXQogCQkJRm9ybWF0OiA8aW8+CiAKLQlndDk2MTAwZXRoPQlbTkVUXSBNSVBTIEdUOTYxMDAgQWR2YW5jZWQgQ29tbXVuaWNhdGlvbiBDb250cm9sbGVyCi0KIAlndXM9CQlbSFcsT1NTXQogCQkJRm9ybWF0OiA8aW8+LDxpcnE+LDxkbWE+LDxkbWExNj4KIApAQCAtMTMyNiw3ICsxMzMxLDcgQEAKIAlwdC4JCVtQQVJJREVdCiAJCQlTZWUgRG9jdW1lbnRhdGlvbi9wYXJpZGUudHh0LgogCi0JcXVpZXQ9CQlbS05MXSBEaXNhYmxlIGxvZyBtZXNzYWdlcworCXF1aWV0CQlbS05MXSBEaXNhYmxlIG1vc3QgbG9nIG1lc3NhZ2VzCiAKIAlyMTI4PQkJW0hXLERSTV0KIApAQCAtMTM3Miw2ICsxMzc3LDkgQEAKIAkJCVJlc2VydmVzIGEgaG9sZSBhdCB0aGUgdG9wIG9mIHRoZSBrZXJuZWwgdmlydHVhbAogCQkJYWRkcmVzcyBzcGFjZS4KIAorCXJlc2V0X2RldmljZXMJW0tOTF0gRm9yY2UgZHJpdmVycyB0byByZXNldCB0aGUgdW5kZXJseWluZyBkZXZpY2UKKwkJCWR1cmluZyBpbml0aWFsaXphdGlvbi4KKwogCXJlc3VtZT0JCVtTV1NVU1BdCiAJCQlTcGVjaWZ5IHRoZSBwYXJ0aXRpb24gZGV2aWNlIGZvciBzb2Z0d2FyZSBzdXNwZW5kCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKaW5kZXggMDBkOTM2MC4uNTVhN2U0ZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKQEAgLTM2LDYgKzM2LDI4IEBACiAKIC0gJ2V2ZXIgdXNlZCcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbID09ICF1bnVzZWQgICAgICAgIF0KIAorV2hlbiBsb2NraW5nIHJ1bGVzIGFyZSB2aW9sYXRlZCwgdGhlc2UgNCBzdGF0ZSBiaXRzIGFyZSBwcmVzZW50ZWQgaW4gdGhlCitsb2NraW5nIGVycm9yIG1lc3NhZ2VzLCBpbnNpZGUgY3VybGllcy4gIEEgY29udHJpdmVkIGV4YW1wbGU6CisKKyAgIG1vZHByb2JlLzIyODcgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazoKKyAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLS4ufSwgYXQ6IFs8YzAyODY3ZmQ+XSBtdXRleF9sb2NrKzB4MjEvMHgyNAorCisgICBidXQgdGFzayBpcyBhbHJlYWR5IGhvbGRpbmcgbG9jazoKKyAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLS4ufSwgYXQ6IFs8YzAyODY3ZmQ+XSBtdXRleF9sb2NrKzB4MjEvMHgyNAorCisKK1RoZSBiaXQgcG9zaXRpb24gaW5kaWNhdGVzIGhhcmRpcnEsIHNvZnRpcnEsIGhhcmRpcnEtcmVhZCwKK3NvZnRpcnEtcmVhZCByZXNwZWN0aXZlbHksIGFuZCB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBpbiBlYWNoCitpbmRpY2F0ZXM6CisKKyAgICcuJwkgYWNxdWlyZWQgd2hpbGUgaXJxcyBlbmFibGVkCisgICAnKycgIGFjcXVpcmVkIGluIGlycSBjb250ZXh0CisgICAnLScgIGFjcXVpcmVkIGluIHByb2Nlc3MgY29udGV4dCB3aXRoIGlycXMgZGlzYWJsZWQKKyAgICc/JyAgcmVhZC1hY3F1aXJlZCBib3RoIHdpdGggaXJxcyBlbmFibGVkIGFuZCBpbiBpcnEgY29udGV4dAorCitVbnVzZWQgbXV0ZXhlcyBjYW5ub3QgYmUgcGFydCBvZiB0aGUgY2F1c2Ugb2YgYW4gZXJyb3IuCisKKwogU2luZ2xlLWxvY2sgc3RhdGUgcnVsZXM6CiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2JvbmRpbmcudHh0CmluZGV4IGFmYWM3ODAuLmRjOTQyZWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvYm9uZGluZy50eHQKQEAgLTE5Miw2ICsxOTIsMTcgQEAKIGFycF9pbnRlcnZhbAogCiAJU3BlY2lmaWVzIHRoZSBBUlAgbGluayBtb25pdG9yaW5nIGZyZXF1ZW5jeSBpbiBtaWxsaXNlY29uZHMuCisKKwlUaGUgQVJQIG1vbml0b3Igd29ya3MgYnkgcGVyaW9kaWNhbGx5IGNoZWNraW5nIHRoZSBzbGF2ZQorCWRldmljZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhleSBoYXZlIHNlbnQgb3IgcmVjZWl2ZWQKKwl0cmFmZmljIHJlY2VudGx5ICh0aGUgcHJlY2lzZSBjcml0ZXJpYSBkZXBlbmRzIHVwb24gdGhlCisJYm9uZGluZyBtb2RlLCBhbmQgdGhlIHN0YXRlIG9mIHRoZSBzbGF2ZSkuICBSZWd1bGFyIHRyYWZmaWMgaXMKKwlnZW5lcmF0ZWQgdmlhIEFSUCBwcm9iZXMgaXNzdWVkIGZvciB0aGUgYWRkcmVzc2VzIHNwZWNpZmllZCBieQorCXRoZSBhcnBfaXBfdGFyZ2V0IG9wdGlvbi4KKworCVRoaXMgYmVoYXZpb3IgY2FuIGJlIG1vZGlmaWVkIGJ5IHRoZSBhcnBfdmFsaWRhdGUgb3B0aW9uLAorCWJlbG93LgorCiAJSWYgQVJQIG1vbml0b3JpbmcgaXMgdXNlZCBpbiBhbiBldGhlcmNoYW5uZWwgY29tcGF0aWJsZSBtb2RlCiAJKG1vZGVzIDAgYW5kIDIpLCB0aGUgc3dpdGNoIHNob3VsZCBiZSBjb25maWd1cmVkIGluIGEgbW9kZQogCXRoYXQgZXZlbmx5IGRpc3RyaWJ1dGVzIHBhY2tldHMgYWNyb3NzIGFsbCBsaW5rcy4gSWYgdGhlCkBAIC0yMTMsNiArMjI0LDU0IEBACiAJbWF4aW11bSBudW1iZXIgb2YgdGFyZ2V0cyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQgaXMgMTYuICBUaGUKIAlkZWZhdWx0IHZhbHVlIGlzIG5vIElQIGFkZHJlc3Nlcy4KIAorYXJwX3ZhbGlkYXRlCisKKwlTcGVjaWZpZXMgd2hldGhlciBvciBub3QgQVJQIHByb2JlcyBhbmQgcmVwbGllcyBzaG91bGQgYmUKKwl2YWxpZGF0ZWQgaW4gdGhlIGFjdGl2ZS1iYWNrdXAgbW9kZS4gIFRoaXMgY2F1c2VzIHRoZSBBUlAKKwltb25pdG9yIHRvIGV4YW1pbmUgdGhlIGluY29taW5nIEFSUCByZXF1ZXN0cyBhbmQgcmVwbGllcywgYW5kCisJb25seSBjb25zaWRlciBhIHNsYXZlIHRvIGJlIHVwIGlmIGl0IGlzIHJlY2VpdmluZyB0aGUKKwlhcHByb3ByaWF0ZSBBUlAgdHJhZmZpYy4KKworCVBvc3NpYmxlIHZhbHVlcyBhcmU6CisKKwlub25lIG9yIDAKKworCQlObyB2YWxpZGF0aW9uIGlzIHBlcmZvcm1lZC4gIFRoaXMgaXMgdGhlIGRlZmF1bHQuCisKKwlhY3RpdmUgb3IgMQorCisJCVZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIG9ubHkgZm9yIHRoZSBhY3RpdmUgc2xhdmUuCisKKwliYWNrdXAgb3IgMgorCisJCVZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIG9ubHkgZm9yIGJhY2t1cCBzbGF2ZXMuCisKKwlhbGwgb3IgMworCisJCVZhbGlkYXRpb24gaXMgcGVyZm9ybWVkIGZvciBhbGwgc2xhdmVzLgorCisJRm9yIHRoZSBhY3RpdmUgc2xhdmUsIHRoZSB2YWxpZGF0aW9uIGNoZWNrcyBBUlAgcmVwbGllcyB0bworCWNvbmZpcm0gdGhhdCB0aGV5IHdlcmUgZ2VuZXJhdGVkIGJ5IGFuIGFycF9pcF90YXJnZXQuICBTaW5jZQorCWJhY2t1cCBzbGF2ZXMgZG8gbm90IHR5cGljYWxseSByZWNlaXZlIHRoZXNlIHJlcGxpZXMsIHRoZQorCXZhbGlkYXRpb24gcGVyZm9ybWVkIGZvciBiYWNrdXAgc2xhdmVzIGlzIG9uIHRoZSBBUlAgcmVxdWVzdAorCXNlbnQgb3V0IHZpYSB0aGUgYWN0aXZlIHNsYXZlLiAgSXQgaXMgcG9zc2libGUgdGhhdCBzb21lCisJc3dpdGNoIG9yIG5ldHdvcmsgY29uZmlndXJhdGlvbnMgbWF5IHJlc3VsdCBpbiBzaXR1YXRpb25zCisJd2hlcmVpbiB0aGUgYmFja3VwIHNsYXZlcyBkbyBub3QgcmVjZWl2ZSB0aGUgQVJQIHJlcXVlc3RzOyBpbgorCXN1Y2ggYSBzaXR1YXRpb24sIHZhbGlkYXRpb24gb2YgYmFja3VwIHNsYXZlcyBtdXN0IGJlCisJZGlzYWJsZWQuCisKKwlUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaW4gbmV0d29yayBjb25maWd1cmF0aW9ucyBpbiB3aGljaAorCW11bHRpcGxlIGJvbmRpbmcgaG9zdHMgYXJlIGNvbmN1cnJlbnRseSBpc3N1aW5nIEFSUHMgdG8gb25lIG9yCisJbW9yZSB0YXJnZXRzIGJleW9uZCBhIGNvbW1vbiBzd2l0Y2guICBTaG91bGQgdGhlIGxpbmsgYmV0d2VlbgorCXRoZSBzd2l0Y2ggYW5kIHRhcmdldCBmYWlsIChidXQgbm90IHRoZSBzd2l0Y2ggaXRzZWxmKSwgdGhlCisJcHJvYmUgdHJhZmZpYyBnZW5lcmF0ZWQgYnkgdGhlIG11bHRpcGxlIGJvbmRpbmcgaW5zdGFuY2VzIHdpbGwKKwlmb29sIHRoZSBzdGFuZGFyZCBBUlAgbW9uaXRvciBpbnRvIGNvbnNpZGVyaW5nIHRoZSBsaW5rcyBhcworCXN0aWxsIHVwLiAgVXNlIG9mIHRoZSBhcnBfdmFsaWRhdGUgb3B0aW9uIGNhbiByZXNvbHZlIHRoaXMsIGFzCisJdGhlIEFSUCBtb25pdG9yIHdpbGwgb25seSBjb25zaWRlciBBUlAgcmVxdWVzdHMgYW5kIHJlcGxpZXMKKwlhc3NvY2lhdGVkIHdpdGggaXRzIG93biBpbnN0YW5jZSBvZiBib25kaW5nLgorCisJVGhpcyBvcHRpb24gd2FzIGFkZGVkIGluIGJvbmRpbmcgdmVyc2lvbiAzLjEuMC4KKwogZG93bmRlbGF5CiAKIAlTcGVjaWZpZXMgdGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcywgdG8gd2FpdCBiZWZvcmUgZGlzYWJsaW5nCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvcGt0Z2VuLnR4dCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CmluZGV4IDQ0ZjJmNzYuLjE4ZDM4NWMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CisrKyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9wa3RnZW4udHh0CkBAIC0xMDAsNiArMTAwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBhcmU6IElQU1JDX1JORCAjSVAgU291cmNlIGlzIHJhbmRvbSAoYmV0d2VlbiBtaW4vbWF4KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQRFNUX1JORCwgVURQU1JDX1JORCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVEUERTVF9STkQsIE1BQ1NSQ19STkQsIE1BQ0RTVF9STkQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNUExTX1JORCwgVklEX1JORCwgU1ZJRF9STkQKIAogIHBnc2V0ICJ1ZHBfc3JjX21pbiA5IiAgIHNldCBVRFAgc291cmNlIHBvcnQgbWluLCBJZiA8IHVkcF9zcmNfbWF4LCB0aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3ljbGUgdGhyb3VnaCB0aGUgcG9ydCByYW5nZS4KQEAgLTEyNSw2ICsxMjYsMjEgQEAKIAogIHBnc2V0ICJtcGxzIDAiCQkgIHR1cm4gb2ZmIG1wbHMgKG9yIGFueSBpbnZhbGlkIGFyZ3VtZW50IHdvcmtzIHRvbyEpCiAKKyBwZ3NldCAidmxhbl9pZCA3NyIgICAgICAgc2V0IFZMQU4gSUQgMC00MDk1CisgcGdzZXQgInZsYW5fcCAzIiAgICAgICAgIHNldCBwcmlvcml0eSBiaXQgMC03IChkZWZhdWx0IDApCisgcGdzZXQgInZsYW5fY2ZpIDAiICAgICAgIHNldCBjYW5vbmljYWwgZm9ybWF0IGlkZW50aWZpZXIgMC0xIChkZWZhdWx0IDApCisKKyBwZ3NldCAic3ZsYW5faWQgMjIiICAgICAgc2V0IFNWTEFOIElEIDAtNDA5NQorIHBnc2V0ICJzdmxhbl9wIDMiICAgICAgICBzZXQgcHJpb3JpdHkgYml0IDAtNyAoZGVmYXVsdCAwKQorIHBnc2V0ICJzdmxhbl9jZmkgMCIgICAgICBzZXQgY2Fub25pY2FsIGZvcm1hdCBpZGVudGlmaWVyIDAtMSAoZGVmYXVsdCAwKQorCisgcGdzZXQgInZsYW5faWQgOTk5OSIgICAgID4gNDA5NSByZW1vdmUgdmxhbiBhbmQgc3ZsYW4gdGFncworIHBnc2V0ICJzdmxhbiA5OTk5IiAgICAgICA+IDQwOTUgcmVtb3ZlIHN2bGFuIHRhZworCisKKyBwZ3NldCAidG9zIFhYIiAgICAgICAgICAgc2V0IGZvcm1lciBJUHY0IFRPUyBmaWVsZCAoZS5nLiAidG9zIDI4IiBmb3IgQUYxMSBubyBFQ04sIGRlZmF1bHQgMDApCisgcGdzZXQgInRyYWZmaWNfY2xhc3MgWFgiIHNldCBmb3JtZXIgSVB2NiBUUkFGRklDIENMQVNTIChlLmcuICJ0cmFmZmljX2NsYXNzIEI4IiBmb3IgRUYgbm8gRUNOLCBkZWZhdWx0IDAwKQorCiAgcGdzZXQgc3RvcCAgICAJICAgICAgICAgIGFib3J0cyBpbmplY3Rpb24uIEFsc28sIF5DIGFib3J0cyBnZW5lcmF0b3IuCiAKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ub21tdS1tbWFwLnR4dCBiL0RvY3VtZW50YXRpb24vbm9tbXUtbW1hcC50eHQKaW5kZXggYjg4ZWJlNC4uNzcxNGY1NyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9ub21tdS1tbWFwLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL25vbW11LW1tYXAudHh0CkBAIC0xMTYsNiArMTE2LDkgQEAKICAoKikgQSBsaXN0IG9mIGFsbCB0aGUgbWFwcGluZ3Mgb24gdGhlIHN5c3RlbSBpcyB2aXNpYmxlIHRocm91Z2ggL3Byb2MvbWFwcyBpbgogICAgICBuby1NTVUgbW9kZS4KIAorICgqKSBBIGxpc3Qgb2YgYWxsIHRoZSBtYXBwaW5ncyBpbiB1c2UgYnkgYSBwcm9jZXNzIGlzIHZpc2libGUgdGhyb3VnaAorICAgICAvcHJvYy88cGlkPi9tYXBzIGluIG5vLU1NVSBtb2RlLgorCiAgKCopIFN1cHBseWluZyBNQVBfRklYRUQgb3IgYSByZXF1ZXN0aW5nIGEgcGFydGljdWxhciBtYXBwaW5nIGFkZHJlc3Mgd2lsbAogICAgICByZXN1bHQgaW4gYW4gZXJyb3IuCiAKQEAgLTEyNSw2ICsxMjgsNDkgQEAKICAgICAgZXJyb3Igd2lsbCByZXN1bHQgaWYgdGhleSBkb24ndC4gVGhpcyBpcyBtb3N0IGxpa2VseSB0byBiZSBlbmNvdW50ZXJlZAogICAgICB3aXRoIGNoYXJhY3RlciBkZXZpY2UgZmlsZXMsIHBpcGVzLCBmaWZvcyBhbmQgc29ja2V0cy4KIAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorSU5URVJQUk9DRVNTIFNIQVJFRCBNRU1PUlkKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JvdGggU1lTViBJUEMgU0hNIHNoYXJlZCBtZW1vcnkgYW5kIFBPU0lYIHNoYXJlZCBtZW1vcnkgaXMgc3VwcG9ydGVkIGluIE5PTU1VCittb2RlLiAgVGhlIGZvcm1lciB0aHJvdWdoIHRoZSB1c3VhbCBtZWNoYW5pc20sIHRoZSBsYXR0ZXIgdGhyb3VnaCBmaWxlcyBjcmVhdGVkCitvbiByYW1mcyBvciB0bXBmcyBtb3VudHMuCisKKworPT09PT09PQorRlVURVhFUworPT09PT09PQorCitGdXRleGVzIGFyZSBzdXBwb3J0ZWQgaW4gTk9NTVUgbW9kZSBpZiB0aGUgYXJjaCBzdXBwb3J0cyB0aGVtLiAgQW4gZXJyb3Igd2lsbAorYmUgZ2l2ZW4gaWYgYW4gYWRkcmVzcyBwYXNzZWQgdG8gdGhlIGZ1dGV4IHN5c3RlbSBjYWxsIGxpZXMgb3V0c2lkZSB0aGUKK21hcHBpbmdzIG1hZGUgYnkgYSBwcm9jZXNzIG9yIGlmIHRoZSBtYXBwaW5nIGluIHdoaWNoIHRoZSBhZGRyZXNzIGxpZXMgZG9lcyBub3QKK3N1cHBvcnQgZnV0ZXhlcyAoc3VjaCBhcyBhbiBJL08gY2hhcmRldiBtYXBwaW5nKS4KKworCis9PT09PT09PT09PT09CitOTy1NTVUgTVJFTUFQCis9PT09PT09PT09PT09CisKK1RoZSBtcmVtYXAoKSBmdW5jdGlvbiBpcyBwYXJ0aWFsbHkgc3VwcG9ydGVkLiAgSXQgbWF5IGNoYW5nZSB0aGUgc2l6ZSBvZiBhCittYXBwaW5nLCBhbmQgbWF5IG1vdmUgaXRbKl0gaWYgTVJFTUFQX01BWU1PVkUgaXMgc3BlY2lmaWVkIGFuZCBpZiB0aGUgbmV3IHNpemUKK29mIHRoZSBtYXBwaW5nIGV4Y2VlZHMgdGhlIHNpemUgb2YgdGhlIHNsYWIgb2JqZWN0IGN1cnJlbnRseSBvY2N1cGllZCBieSB0aGUKK21lbW9yeSB0byB3aGljaCB0aGUgbWFwcGluZyByZWZlcnMsIG9yIGlmIGEgc21hbGxlciBzbGFiIG9iamVjdCBjb3VsZCBiZSB1c2VkLgorCitNUkVNQVBfRklYRUQgaXMgbm90IHN1cHBvcnRlZCwgdGhvdWdoIGl0IGlzIGlnbm9yZWQgaWYgdGhlcmUncyBubyBjaGFuZ2Ugb2YKK2FkZHJlc3MgYW5kIHRoZSBvYmplY3QgZG9lcyBub3QgbmVlZCB0byBiZSBtb3ZlZC4KKworU2hhcmVkIG1hcHBpbmdzIG1heSBub3QgYmUgbW92ZWQuICBTaGFyZWFibGUgbWFwcGluZ3MgbWF5IG5vdCBiZSBtb3ZlZCBlaXRoZXIsCitldmVuIGlmIHRoZXkgYXJlIG5vdCBjdXJyZW50bHkgc2hhcmVkLgorCitUaGUgbXJlbWFwKCkgZnVuY3Rpb24gbXVzdCBiZSBnaXZlbiBhbiBleGFjdCBtYXRjaCBmb3IgYmFzZSBhZGRyZXNzIGFuZCBzaXplIG9mCithIHByZXZpb3VzbHkgbWFwcGVkIG9iamVjdC4gIEl0IG1heSBub3QgYmUgdXNlZCB0byBjcmVhdGUgaG9sZXMgaW4gZXhpc3RpbmcKK21hcHBpbmdzLCBtb3ZlIHBhcnRzIG9mIGV4aXN0aW5nIG1hcHBpbmdzIG9yIHJlc2l6ZSBwYXJ0cyBvZiBtYXBwaW5ncy4gIEl0IG11c3QKK2FjdCBvbiBhIGNvbXBsZXRlIG1hcHBpbmcuCisKK1sqXSBOb3QgY3VycmVudGx5IHN1cHBvcnRlZC4KKworCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogUFJPVklESU5HIFNIQVJFQUJMRSBDSEFSQUNURVIgREVWSUNFIFNVUFBPUlQKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3BjaWVhZXItaG93dG8udHh0IGIvRG9jdW1lbnRhdGlvbi9wY2llYWVyLWhvd3RvLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmMyNTEyCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi9wY2llYWVyLWhvd3RvLnR4dApAQCAtMCwwICsxLDI1MyBAQAorICAgVGhlIFBDSSBFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIgR3VpZGUgSE9XVE8KKwkJVC4gTG9uZyBOZ3V5ZW4JPHRvbS5sLm5ndXllbkBpbnRlbC5jb20+CisJCVlhbm1pbiBaaGFuZwk8eWFubWluLnpoYW5nQGludGVsLmNvbT4KKwkJCQkwNy8yOS8yMDA2CisKKworMS4gT3ZlcnZpZXcKKworMS4xIEFib3V0IHRoaXMgZ3VpZGUKKworVGhpcyBndWlkZSBkZXNjcmliZXMgdGhlIGJhc2ljcyBvZiB0aGUgUENJIEV4cHJlc3MgQWR2YW5jZWQgRXJyb3IKK1JlcG9ydGluZyAoQUVSKSBkcml2ZXIgYW5kIHByb3ZpZGVzIGluZm9ybWF0aW9uIG9uIGhvdyB0byB1c2UgaXQsIGFzCit3ZWxsIGFzIGhvdyB0byBlbmFibGUgdGhlIGRyaXZlcnMgb2YgZW5kcG9pbnQgZGV2aWNlcyB0byBjb25mb3JtIHdpdGgKK1BDSSBFeHByZXNzIEFFUiBkcml2ZXIuCisKKzEuMiBDb3B5cmlnaHQgqSBJbnRlbCBDb3Jwb3JhdGlvbiAyMDA2LgorCisxLjMgV2hhdCBpcyB0aGUgUENJIEV4cHJlc3MgQUVSIERyaXZlcj8KKworUENJIEV4cHJlc3MgZXJyb3Igc2lnbmFsaW5nIGNhbiBvY2N1ciBvbiB0aGUgUENJIEV4cHJlc3MgbGluayBpdHNlbGYKK29yIG9uIGJlaGFsZiBvZiB0cmFuc2FjdGlvbnMgaW5pdGlhdGVkIG9uIHRoZSBsaW5rLiBQQ0kgRXhwcmVzcworZGVmaW5lcyB0d28gZXJyb3IgcmVwb3J0aW5nIHBhcmFkaWdtczogdGhlIGJhc2VsaW5lIGNhcGFiaWxpdHkgYW5kCit0aGUgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIGNhcGFiaWxpdHkuIFRoZSBiYXNlbGluZSBjYXBhYmlsaXR5IGlzCityZXF1aXJlZCBvZiBhbGwgUENJIEV4cHJlc3MgY29tcG9uZW50cyBwcm92aWRpbmcgYSBtaW5pbXVtIGRlZmluZWQKK3NldCBvZiBlcnJvciByZXBvcnRpbmcgcmVxdWlyZW1lbnRzLiBBZHZhbmNlZCBFcnJvciBSZXBvcnRpbmcKK2NhcGFiaWxpdHkgaXMgaW1wbGVtZW50ZWQgd2l0aCBhIFBDSSBFeHByZXNzIGFkdmFuY2VkIGVycm9yIHJlcG9ydGluZworZXh0ZW5kZWQgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgcHJvdmlkaW5nIG1vcmUgcm9idXN0IGVycm9yIHJlcG9ydGluZy4KKworVGhlIFBDSSBFeHByZXNzIEFFUiBkcml2ZXIgcHJvdmlkZXMgdGhlIGluZnJhc3RydWN0dXJlIHRvIHN1cHBvcnQgUENJCitFeHByZXNzIEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBjYXBhYmlsaXR5LiBUaGUgUENJIEV4cHJlc3MgQUVSCitkcml2ZXIgcHJvdmlkZXMgdGhyZWUgYmFzaWMgZnVuY3Rpb25zOgorCistCUdhdGhlcnMgdGhlIGNvbXByZWhlbnNpdmUgZXJyb3IgaW5mb3JtYXRpb24gaWYgZXJyb3JzIG9jY3VycmVkLgorLQlSZXBvcnRzIGVycm9yIHRvIHRoZSB1c2Vycy4KKy0JUGVyZm9ybXMgZXJyb3IgcmVjb3ZlcnkgYWN0aW9ucy4KKworQUVSIGRyaXZlciBvbmx5IGF0dGFjaGVzIHJvb3QgcG9ydHMgd2hpY2ggc3VwcG9ydCBQQ0ktRXhwcmVzcyBBRVIKK2NhcGFiaWxpdHkuCisKKworMi4gVXNlciBHdWlkZQorCisyLjEgSW5jbHVkZSB0aGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgRHJpdmVyIGludG8gdGhlIExpbnV4IEtlcm5lbAorCitUaGUgUENJIEV4cHJlc3MgQUVSIFJvb3QgZHJpdmVyIGlzIGEgUm9vdCBQb3J0IHNlcnZpY2UgZHJpdmVyIGF0dGFjaGVkCit0byB0aGUgUENJIEV4cHJlc3MgUG9ydCBCdXMgZHJpdmVyLiBJZiBhIHVzZXIgd2FudHMgdG8gdXNlIGl0LCB0aGUgZHJpdmVyCitoYXMgdG8gYmUgY29tcGlsZWQuIE9wdGlvbiBDT05GSUdfUENJRUFFUiBzdXBwb3J0cyB0aGlzIGNhcGFiaWxpdHkuIEl0CitkZXBlbmRzIG9uIENPTkZJR19QQ0lFUE9SVEJVUywgc28gcGxzLiBzZXQgQ09ORklHX1BDSUVQT1JUQlVTPXkgYW5kCitDT05GSUdfUENJRUFFUiA9IHkuCisKKzIuMiBMb2FkIFBDSSBFeHByZXNzIEFFUiBSb290IERyaXZlcgorVGhlcmUgaXMgYSBjYXNlIHdoZXJlIGEgc3lzdGVtIGhhcyBBRVIgc3VwcG9ydCBpbiBCSU9TLiBFbmFibGluZyB0aGUgQUVSCitSb290IGRyaXZlciBhbmQgaGF2aW5nIEFFUiBzdXBwb3J0IGluIEJJT1MgbWF5IHJlc3VsdCB1bnByZWRpY3RhYmxlCitiZWhhdmlvci4gVG8gYXZvaWQgdGhpcyBjb25mbGljdCwgYSBzdWNjZXNzZnVsIGxvYWQgb2YgdGhlIEFFUiBSb290IGRyaXZlcgorcmVxdWlyZXMgQUNQSSBfT1NDIHN1cHBvcnQgaW4gdGhlIEJJT1MgdG8gYWxsb3cgdGhlIEFFUiBSb290IGRyaXZlciB0bworcmVxdWVzdCBmb3IgbmF0aXZlIGNvbnRyb2wgb2YgQUVSLiBTZWUgdGhlIFBDSSBGVyAzLjAgU3BlY2lmaWNhdGlvbiBmb3IKK2RldGFpbHMgcmVnYXJkaW5nIE9TQyB1c2FnZS4gQ3VycmVudGx5LCBsb3RzIG9mIGZpcm13YXJlcyBkb24ndCBwcm92aWRlCitfT1NDIHN1cHBvcnQgd2hpbGUgdGhleSB1c2UgUENJIEV4cHJlc3MuIFRvIHN1cHBvcnQgc3VjaCBmaXJtd2FyZXMsCitmb3JjZWxvYWQsIGEgcGFyYW1ldGVyIG9mIHR5cGUgYm9vbCwgY291bGQgZW5hYmxlIEFFUiB0byBjb250aW51ZSB0bworYmUgaW5pdGlhdGVkIGFsdGhvdWdoIGZpcm13YXJlcyBoYXZlIG5vIF9PU0Mgc3VwcG9ydC4gVG8gZW5hYmxlIHRoZQord2Fsa2Fyb3VuZCwgcGxzLiBhZGQgYWVyZHJpdmVyLmZvcmNlbG9hZD15IHRvIGtlcm5lbCBib290IHBhcmFtZXRlciBsaW5lCit3aGVuIGJvb3Rpbmcga2VybmVsLiBOb3RlIHRoYXQgZm9yY2Vsb2FkPW4gYnkgZGVmYXVsdC4KKworMi4zIEFFUiBlcnJvciBvdXRwdXQKK1doZW4gYSBQQ0ktRSBBRVIgZXJyb3IgaXMgY2FwdHVyZWQsIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBvdXRwdXRlZCB0bworY29uc29sZS4gSWYgaXQncyBhIGNvcnJlY3RhYmxlIGVycm9yLCBpdCBpcyBvdXRwdXRlZCBhcyBhIHdhcm5pbmcuCitPdGhlcndpc2UsIGl0IGlzIHByaW50ZWQgYXMgYW4gZXJyb3IuIFNvIHVzZXJzIGNvdWxkIGNob29zZSBkaWZmZXJlbnQKK2xvZyBsZXZlbCB0byBmaWx0ZXIgb3V0IGNvcnJlY3RhYmxlIGVycm9yIG1lc3NhZ2VzLgorCitCZWxvdyBzaG93cyBhbiBleGFtcGxlLgorKy0tLS0tLSBQQ0ktRXhwcmVzcyBEZXZpY2UgRXJyb3IgLS0tLS0rCitFcnJvciBTZXZlcml0eSAgICAgICAgICA6IFVuY29ycmVjdGVkIChGYXRhbCkKK1BDSUUgQnVzIEVycm9yIHR5cGUgICAgIDogVHJhbnNhY3Rpb24gTGF5ZXIKK1Vuc3VwcG9ydGVkIFJlcXVlc3QgICAgIDogRmlyc3QKK1JlcXVlc3RlciBJRCAgICAgICAgICAgIDogMDUwMAorVmVuZG9ySUQ9ODA4NmgsIERldmljZUlEPTAzMjloLCBCdXM9MDVoLCBEZXZpY2U9MDBoLCBGdW5jdGlvbj0wMGgKK1RMQiBIZWFkZXI6CiswNDAwMDAwMSAwMDIwMGEwMyAwNTAxMDAwMCAwMDA1MDEwMAorCitJbiB0aGUgZXhhbXBsZSwgJ1JlcXVlc3RlciBJRCcgbWVhbnMgdGhlIElEIG9mIHRoZSBkZXZpY2Ugd2hvIHNlbmRzCit0aGUgZXJyb3IgbWVzc2FnZSB0byByb290IHBvcnQuIFBscy4gcmVmZXIgdG8gcGNpIGV4cHJlc3Mgc3BlY3MgZm9yCitvdGhlciBmaWVsZHMuCisKKworMy4gRGV2ZWxvcGVyIEd1aWRlCisKK1RvIGVuYWJsZSBBRVIgYXdhcmUgc3VwcG9ydCByZXF1aXJlcyBhIHNvZnR3YXJlIGRyaXZlciB0byBjb25maWd1cmUKK3RoZSBBRVIgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUgd2l0aGluIGl0cyBkZXZpY2UgYW5kIHRvIHByb3ZpZGUgY2FsbGJhY2tzLgorCitUbyBzdXBwb3J0IEFFUiBiZXR0ZXIsIGRldmVsb3BlcnMgbmVlZCB1bmRlcnN0YW5kIGhvdyBBRVIgZG9lcyB3b3JrCitmaXJzdGx5LgorCitQQ0kgRXhwcmVzcyBlcnJvcnMgYXJlIGNsYXNzaWZpZWQgaW50byB0d28gdHlwZXM6IGNvcnJlY3RhYmxlIGVycm9ycworYW5kIHVuY29ycmVjdGFibGUgZXJyb3JzLiBUaGlzIGNsYXNzaWZpY2F0aW9uIGlzIGJhc2VkIG9uIHRoZSBpbXBhY3RzCitvZiB0aG9zZSBlcnJvcnMsIHdoaWNoIG1heSByZXN1bHQgaW4gZGVncmFkZWQgcGVyZm9ybWFuY2Ugb3IgZnVuY3Rpb24KK2ZhaWx1cmUuCisKK0NvcnJlY3RhYmxlIGVycm9ycyBwb3NlIG5vIGltcGFjdHMgb24gdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlCitpbnRlcmZhY2UuIFRoZSBQQ0kgRXhwcmVzcyBwcm90b2NvbCBjYW4gcmVjb3ZlciB3aXRob3V0IGFueSBzb2Z0d2FyZQoraW50ZXJ2ZW50aW9uIG9yIGFueSBsb3NzIG9mIGRhdGEuIFRoZXNlIGVycm9ycyBhcmUgZGV0ZWN0ZWQgYW5kCitjb3JyZWN0ZWQgYnkgaGFyZHdhcmUuIFVubGlrZSBjb3JyZWN0YWJsZSBlcnJvcnMsIHVuY29ycmVjdGFibGUKK2Vycm9ycyBpbXBhY3QgZnVuY3Rpb25hbGl0eSBvZiB0aGUgaW50ZXJmYWNlLiBVbmNvcnJlY3RhYmxlIGVycm9ycworY2FuIGNhdXNlIGEgcGFydGljdWxhciB0cmFuc2FjdGlvbiBvciBhIHBhcnRpY3VsYXIgUENJIEV4cHJlc3MgbGluawordG8gYmUgdW5yZWxpYWJsZS4gRGVwZW5kaW5nIG9uIHRob3NlIGVycm9yIGNvbmRpdGlvbnMsIHVuY29ycmVjdGFibGUKK2Vycm9ycyBhcmUgZnVydGhlciBjbGFzc2lmaWVkIGludG8gbm9uLWZhdGFsIGVycm9ycyBhbmQgZmF0YWwgZXJyb3JzLgorTm9uLWZhdGFsIGVycm9ycyBjYXVzZSB0aGUgcGFydGljdWxhciB0cmFuc2FjdGlvbiB0byBiZSB1bnJlbGlhYmxlLAorYnV0IHRoZSBQQ0kgRXhwcmVzcyBsaW5rIGl0c2VsZiBpcyBmdWxseSBmdW5jdGlvbmFsLiBGYXRhbCBlcnJvcnMsIG9uCit0aGUgb3RoZXIgaGFuZCwgY2F1c2UgdGhlIGxpbmsgdG8gYmUgdW5yZWxpYWJsZS4KKworV2hlbiBBRVIgaXMgZW5hYmxlZCwgYSBQQ0kgRXhwcmVzcyBkZXZpY2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHNlbmQgYW4KK2Vycm9yIG1lc3NhZ2UgdG8gdGhlIFBDSUUgcm9vdCBwb3J0IGFib3ZlIGl0IHdoZW4gdGhlIGRldmljZSBjYXB0dXJlcworYW4gZXJyb3IuIFRoZSBSb290IFBvcnQsIHVwb24gcmVjZWl2aW5nIGFuIGVycm9yIHJlcG9ydGluZyBtZXNzYWdlLAoraW50ZXJuYWxseSBwcm9jZXNzZXMgYW5kIGxvZ3MgdGhlIGVycm9yIG1lc3NhZ2UgaW4gaXRzIFBDSSBFeHByZXNzCitjYXBhYmlsaXR5IHN0cnVjdHVyZS4gRXJyb3IgaW5mb3JtYXRpb24gYmVpbmcgbG9nZ2VkIGluY2x1ZGVzIHN0b3JpbmcKK3RoZSBlcnJvciByZXBvcnRpbmcgYWdlbnQncyByZXF1ZXN0b3IgSUQgaW50byB0aGUgRXJyb3IgU291cmNlCitJZGVudGlmaWNhdGlvbiBSZWdpc3RlcnMgYW5kIHNldHRpbmcgdGhlIGVycm9yIGJpdHMgb2YgdGhlIFJvb3QgRXJyb3IKK1N0YXR1cyBSZWdpc3RlciBhY2NvcmRpbmdseS4gSWYgQUVSIGVycm9yIHJlcG9ydGluZyBpcyBlbmFibGVkIGluIFJvb3QKK0Vycm9yIENvbW1hbmQgUmVnaXN0ZXIsIHRoZSBSb290IFBvcnQgZ2VuZXJhdGVzIGFuIGludGVycnVwdCBpZiBhbgorZXJyb3IgaXMgZGV0ZWN0ZWQuCisKK05vdGUgdGhhdCB0aGUgZXJyb3JzIGFzIGRlc2NyaWJlZCBhYm92ZSBhcmUgcmVsYXRlZCB0byB0aGUgUENJIEV4cHJlc3MKK2hpZXJhcmNoeSBhbmQgbGlua3MuIFRoZXNlIGVycm9ycyBkbyBub3QgaW5jbHVkZSBhbnkgZGV2aWNlIHNwZWNpZmljCitlcnJvcnMgYmVjYXVzZSBkZXZpY2Ugc3BlY2lmaWMgZXJyb3JzIHdpbGwgc3RpbGwgZ2V0IHNlbnQgZGlyZWN0bHkgdG8KK3RoZSBkZXZpY2UgZHJpdmVyLgorCiszLjEgQ29uZmlndXJlIHRoZSBBRVIgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKKworQUVSIGF3YXJlIGRyaXZlcnMgb2YgUENJIEV4cHJlc3MgY29tcG9uZW50IG5lZWQgY2hhbmdlIHRoZSBkZXZpY2UKK2NvbnRyb2wgcmVnaXN0ZXJzIHRvIGVuYWJsZSBBRVIuIFRoZXkgYWxzbyBjb3VsZCBjaGFuZ2UgQUVSIHJlZ2lzdGVycywKK2luY2x1ZGluZyBtYXNrIGFuZCBzZXZlcml0eSByZWdpc3RlcnMuIEhlbHBlciBmdW5jdGlvbgorcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyBjb3VsZCBiZSB1c2VkIHRvIGVuYWJsZSBBRVIuIFNlZQorc2VjdGlvbiAzLjMuCisKKzMuMi4gUHJvdmlkZSBjYWxsYmFja3MKKworMy4yLjEgY2FsbGJhY2sgcmVzZXRfbGluayB0byByZXNldCBwY2kgZXhwcmVzcyBsaW5rCisKK1RoaXMgY2FsbGJhY2sgaXMgdXNlZCB0byByZXNldCB0aGUgcGNpIGV4cHJlc3MgcGh5c2ljYWwgbGluayB3aGVuIGEKK2ZhdGFsIGVycm9yIGhhcHBlbnMuIFRoZSByb290IHBvcnQgYWVyIHNlcnZpY2UgZHJpdmVyIHByb3ZpZGVzIGEKK2RlZmF1bHQgcmVzZXRfbGluayBmdW5jdGlvbiwgYnV0IGRpZmZlcmVudCB1cHN0cmVhbSBwb3J0cyBtaWdodAoraGF2ZSBkaWZmZXJlbnQgc3BlY2lmaWNhdGlvbnMgdG8gcmVzZXQgcGNpIGV4cHJlc3MgbGluaywgc28gYWxsCit1cHN0cmVhbSBwb3J0cyBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gcmVzZXRfbGluayBmdW5jdGlvbnMuCisKK0luIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIsIGEgbmV3IHBvaW50ZXIsIHJlc2V0X2xpbmssIGlzCithZGRlZC4KKworcGNpX2Vyc19yZXN1bHRfdCAoKnJlc2V0X2xpbmspIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKworU2VjdGlvbiAzLjIuMi4yIHByb3ZpZGVzIG1vcmUgZGV0YWlsZWQgaW5mbyBvbiB3aGVuIHRvIGNhbGwKK3Jlc2V0X2xpbmsuCisKKzMuMi4yIFBDSSBlcnJvci1yZWNvdmVyeSBjYWxsYmFja3MKKworVGhlIFBDSSBFeHByZXNzIEFFUiBSb290IGRyaXZlciB1c2VzIGVycm9yIGNhbGxiYWNrcyB0byBjb29yZGluYXRlCit3aXRoIGRvd25zdHJlYW0gZGV2aWNlIGRyaXZlcnMgYXNzb2NpYXRlZCB3aXRoIGEgaGllcmFyY2h5IGluIHF1ZXN0aW9uCit3aGVuIHBlcmZvcm1pbmcgZXJyb3IgcmVjb3ZlcnkgYWN0aW9ucy4KKworRGF0YSBzdHJ1Y3QgcGNpX2RyaXZlciBoYXMgYSBwb2ludGVyLCBlcnJfaGFuZGxlciwgdG8gcG9pbnQgdG8KK3BjaV9lcnJvcl9oYW5kbGVycyB3aG8gY29uc2lzdHMgb2YgYSBjb3VwbGUgb2YgY2FsbGJhY2sgZnVuY3Rpb24KK3BvaW50ZXJzLiBBRVIgZHJpdmVyIGZvbGxvd3MgdGhlIHJ1bGVzIGRlZmluZWQgaW4KK3BjaS1lcnJvci1yZWNvdmVyeS50eHQgZXhjZXB0IHBjaSBleHByZXNzIHNwZWNpZmljIHBhcnRzIChlLmcuCityZXNldF9saW5rKS4gUGxzLiByZWZlciB0byBwY2ktZXJyb3ItcmVjb3ZlcnkudHh0IGZvciBkZXRhaWxlZAorZGVmaW5pdGlvbnMgb2YgdGhlIGNhbGxiYWNrcy4KKworQmVsb3cgc2VjdGlvbnMgc3BlY2lmeSB3aGVuIHRvIGNhbGwgdGhlIGVycm9yIGNhbGxiYWNrIGZ1bmN0aW9ucy4KKworMy4yLjIuMSBDb3JyZWN0YWJsZSBlcnJvcnMKKworQ29ycmVjdGFibGUgZXJyb3JzIHBvc2Ugbm8gaW1wYWN0cyBvbiB0aGUgZnVuY3Rpb25hbGl0eSBvZgordGhlIGludGVyZmFjZS4gVGhlIFBDSSBFeHByZXNzIHByb3RvY29sIGNhbiByZWNvdmVyIHdpdGhvdXQgYW55Citzb2Z0d2FyZSBpbnRlcnZlbnRpb24gb3IgYW55IGxvc3Mgb2YgZGF0YS4gVGhlc2UgZXJyb3JzIGRvIG5vdAorcmVxdWlyZSBhbnkgcmVjb3ZlcnkgYWN0aW9ucy4gVGhlIEFFUiBkcml2ZXIgY2xlYXJzIHRoZSBkZXZpY2UncworY29ycmVjdGFibGUgZXJyb3Igc3RhdHVzIHJlZ2lzdGVyIGFjY29yZGluZ2x5IGFuZCBsb2dzIHRoZXNlIGVycm9ycy4KKworMy4yLjIuMiBOb24tY29ycmVjdGFibGUgKG5vbi1mYXRhbCBhbmQgZmF0YWwpIGVycm9ycworCitJZiBhbiBlcnJvciBtZXNzYWdlIGluZGljYXRlcyBhIG5vbi1mYXRhbCBlcnJvciwgcGVyZm9ybWluZyBsaW5rIHJlc2V0CithdCB1cHN0cmVhbSBpcyBub3QgcmVxdWlyZWQuIFRoZSBBRVIgZHJpdmVyIGNhbGxzIGVycm9yX2RldGVjdGVkKGRldiwKK3BjaV9jaGFubmVsX2lvX25vcm1hbCkgdG8gYWxsIGRyaXZlcnMgYXNzb2NpYXRlZCB3aXRoaW4gYSBoaWVyYXJjaHkgaW4KK3F1ZXN0aW9uLiBmb3IgZXhhbXBsZSwKK0VuZFBvaW50PD09PkRvd25zdHJlYW1Qb3J0IEI8PT0+VXBzdHJlYW1Qb3J0IEE8PT0+Um9vdFBvcnQuCitJZiBVcHN0cmVhbSBwb3J0IEEgY2FwdHVyZXMgYW4gQUVSIGVycm9yLCB0aGUgaGllcmFyY2h5IGNvbnNpc3RzIG9mCitEb3duc3RyZWFtIHBvcnQgQiBhbmQgRW5kUG9pbnQuCisKK0EgZHJpdmVyIG1heSByZXR1cm4gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVIsCitQQ0lfRVJTX1JFU1VMVF9ESVNDT05ORUNULCBvciBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VULCBkZXBlbmRpbmcgb24KK3doZXRoZXIgaXQgY2FuIHJlY292ZXIgb3IgdGhlIEFFUiBkcml2ZXIgY2FsbHMgbW1pb19lbmFibGVkIGFzIG5leHQuCisKK0lmIGFuIGVycm9yIG1lc3NhZ2UgaW5kaWNhdGVzIGEgZmF0YWwgZXJyb3IsIGtlcm5lbCB3aWxsIGJyb2FkY2FzdAorZXJyb3JfZGV0ZWN0ZWQoZGV2LCBwY2lfY2hhbm5lbF9pb19mcm96ZW4pIHRvIGFsbCBkcml2ZXJzIHdpdGhpbgorYSBoaWVyYXJjaHkgaW4gcXVlc3Rpb24uIFRoZW4sIHBlcmZvcm1pbmcgbGluayByZXNldCBhdCB1cHN0cmVhbSBpcworbmVjZXNzYXJ5LiBBcyBkaWZmZXJlbnQga2luZHMgb2YgZGV2aWNlcyBtaWdodCB1c2UgZGlmZmVyZW50IGFwcHJvYWNoZXMKK3RvIHJlc2V0IGxpbmssIEFFUiBwb3J0IHNlcnZpY2UgZHJpdmVyIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhlCitmdW5jdGlvbiB0byByZXNldCBsaW5rLiBGaXJzdGx5LCBrZXJuZWwgbG9va3MgZm9yIGlmIHRoZSB1cHN0cmVhbQorY29tcG9uZW50IGhhcyBhbiBhZXIgZHJpdmVyLiBJZiBpdCBoYXMsIGtlcm5lbCB1c2VzIHRoZSByZXNldF9saW5rCitjYWxsYmFjayBvZiB0aGUgYWVyIGRyaXZlci4gSWYgdGhlIHVwc3RyZWFtIGNvbXBvbmVudCBoYXMgbm8gYWVyIGRyaXZlcgorYW5kIHRoZSBwb3J0IGlzIGRvd25zdHJlYW0gcG9ydCwgd2Ugd2lsbCB1c2UgdGhlIGFlciBkcml2ZXIgb2YgdGhlCityb290IHBvcnQgd2hvIHJlcG9ydHMgdGhlIEFFUiBlcnJvci4gQXMgZm9yIHVwc3RyZWFtIHBvcnRzLAordGhleSBzaG91bGQgcHJvdmlkZSB0aGVpciBvd24gYWVyIHNlcnZpY2UgZHJpdmVycyB3aXRoIHJlc2V0X2xpbmsKK2Z1bmN0aW9uLiBJZiBlcnJvcl9kZXRlY3RlZCByZXR1cm5zIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSIGFuZAorcmVzZXRfbGluayByZXR1cm5zIFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRCwgdGhlIGVycm9yIGhhbmRsaW5nIGdvZXMKK3RvIG1taW9fZW5hYmxlZC4KKworMy4zIGhlbHBlciBmdW5jdGlvbnMKKworMy4zLjEgaW50IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkgbG9jYXRlcyB0aGUgUENJIEV4cHJlc3MgQUVSIGNhcGFiaWxpdHkKK2luIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiBzcGFjZS4gSWYgdGhlIGRldmljZSBkb2Vzbid0IHN1cHBvcnQKK1BDSS1FeHByZXNzIEFFUiwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC4KKworMy4zLjIgaW50IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CitwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGVuYWJsZXMgdGhlIGRldmljZSB0byBzZW5kIGVycm9yCittZXNzYWdlcyB0byByb290IHBvcnQgd2hlbiBhbiBlcnJvciBpcyBkZXRlY3RlZC4gTm90ZSB0aGF0IGRldmljZXMKK2Rvbid0IGVuYWJsZSB0aGUgZXJyb3IgcmVwb3J0aW5nIGJ5IGRlZmF1bHQsIHNvIGRldmljZSBkcml2ZXJzIG5lZWQKK2NhbGwgdGhpcyBmdW5jdGlvbiB0byBlbmFibGUgaXQuCisKKzMuMy4zIGludCBwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3BjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nIGRpc2FibGVzIHRoZSBkZXZpY2UgdG8gc2VuZCBlcnJvcgorbWVzc2FnZXMgdG8gcm9vdCBwb3J0IHdoZW4gYW4gZXJyb3IgaXMgZGV0ZWN0ZWQuCisKKzMuMy40IGludCBwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3BjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzIGNsZWFudXBzIHRoZSB1bmNvcnJlY3RhYmxlCitlcnJvciBzdGF0dXMgcmVnaXN0ZXIuCisKKzMuNCBGcmVxdWVudCBBc2tlZCBRdWVzdGlvbnMKKworUTogV2hhdCBoYXBwZW5zIGlmIGEgUENJIEV4cHJlc3MgZGV2aWNlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlIGFuCitlcnJvciByZWNvdmVyeSBoYW5kbGVyIChwY2lfZHJpdmVyLT5lcnJfaGFuZGxlciBpcyBlcXVhbCB0byBOVUxMKT8KKworQTogVGhlIGRldmljZXMgYXR0YWNoZWQgd2l0aCB0aGUgZHJpdmVyIHdvbid0IGJlIHJlY292ZXJlZC4gSWYgdGhlCitlcnJvciBpcyBmYXRhbCwga2VybmVsIHdpbGwgcHJpbnQgb3V0IHdhcm5pbmcgbWVzc2FnZXMuIFBsZWFzZSByZWZlcgordG8gc2VjdGlvbiAzIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCitROiBXaGF0IGhhcHBlbnMgaWYgYW4gdXBzdHJlYW0gcG9ydCBzZXJ2aWNlIGRyaXZlciBkb2VzIG5vdCBwcm92aWRlCitjYWxsYmFjayByZXNldF9saW5rPworCitBOiBGYXRhbCBlcnJvciByZWNvdmVyeSB3aWxsIGZhaWwgaWYgdGhlIGVycm9ycyBhcmUgcmVwb3J0ZWQgYnkgdGhlCit1cHN0cmVhbSBwb3J0cyB3aG8gYXJlIGF0dGFjaGVkIGJ5IHRoZSBzZXJ2aWNlIGRyaXZlci4KKworUTogSG93IGRvZXMgdGhpcyBpbmZyYXN0cnVjdHVyZSBkZWFsIHdpdGggZHJpdmVyIHRoYXQgaXMgbm90IFBDSQorRXhwcmVzcyBhd2FyZT8KKworQTogVGhpcyBpbmZyYXN0cnVjdHVyZSBjYWxscyB0aGUgZXJyb3IgY2FsbGJhY2sgZnVuY3Rpb25zIG9mIHRoZQorZHJpdmVyIHdoZW4gYW4gZXJyb3IgaGFwcGVucy4gQnV0IGlmIHRoZSBkcml2ZXIgaXMgbm90IGF3YXJlIG9mCitQQ0kgRXhwcmVzcywgdGhlIGRldmljZSBtaWdodCBub3QgcmVwb3J0IGl0cyBvd24gZXJyb3JzIHRvIHJvb3QKK3BvcnQuCisKK1E6IFdoYXQgbW9kaWZpY2F0aW9ucyB3aWxsIHRoYXQgZHJpdmVyIG5lZWQgdG8gbWFrZSBpdCBjb21wYXRpYmxlCit3aXRoIHRoZSBQQ0kgRXhwcmVzcyBBRVIgUm9vdCBkcml2ZXI/CisKK0E6IEl0IGNvdWxkIGNhbGwgdGhlIGhlbHBlciBmdW5jdGlvbnMgdG8gZW5hYmxlIEFFUiBpbiBkZXZpY2VzIGFuZAorY2xlYW51cCB1bmNvcnJlY3RhYmxlIHN0YXR1cyByZWdpc3Rlci4gUGxzLiByZWZlciB0byBzZWN0aW9uIDMuMy4KKwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9ydC1tdXRleC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9ydC1tdXRleC1kZXNpZ24udHh0CmluZGV4IGM0NzJmZmEuLjRiNzM2ZDIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcnQtbXV0ZXgtZGVzaWduLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3J0LW11dGV4LWRlc2lnbi50eHQKQEAgLTMzMywxMSArMzMzLDExIEBACiAKIHVuc2lnbmVkIGxvbmcgX2NtcHhjaGcodW5zaWduZWQgbG9uZyAqQSwgdW5zaWduZWQgbG9uZyAqQiwgdW5zaWduZWQgbG9uZyAqQykKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBUID0gKkE7Ci0gICAgICAgIGlmICgqQSA9PSAqQikgewotICAgICAgICAgICAgICAgICpBID0gKkM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFQ7CisJdW5zaWduZWQgbG9uZyBUID0gKkE7CisJaWYgKCpBID09ICpCKSB7CisJCSpBID0gKkM7CisJfQorCXJldHVybiBUOwogfQogI2RlZmluZSBjbXB4Y2hnKGEsYixjKSBfY21weGNoZygmYSwmYiwmYykKIApAQCAtNTgyLDcgKzU4Miw3IEBACiB0cnlfdG9fdGFrZV9ydF9tdXRleCBpcyB1c2VkIGV2ZXJ5IHRpbWUgdGhlIHRhc2sgdHJpZXMgdG8gZ3JhYiBhIG11dGV4IGluIHRoZQogc2xvdyBwYXRoLiAgVGhlIGZpcnN0IHRoaW5nIHRoYXQgaXMgZG9uZSBoZXJlIGlzIGFuIGF0b21pYyBzZXR0aW5nIG9mCiB0aGUgIkhhcyBXYWl0ZXJzIiBmbGFnIG9mIHRoZSBtdXRleCdzIG93bmVyIGZpZWxkLiAgWWVzLCB0aGlzIGNvdWxkIHJlYWxseQotYmUgZmFsc2UsIGJlY2F1c2UgaWYgdGhlIHRoZSBtdXRleCBoYXMgbm8gb3duZXIsIHRoZXJlIGFyZSBubyB3YWl0ZXJzIGFuZAorYmUgZmFsc2UsIGJlY2F1c2UgaWYgdGhlIG11dGV4IGhhcyBubyBvd25lciwgdGhlcmUgYXJlIG5vIHdhaXRlcnMgYW5kCiB0aGUgY3VycmVudCB0YXNrIGFsc28gd29uJ3QgaGF2ZSBhbnkgd2FpdGVycy4gIEJ1dCB3ZSBkb24ndCBoYXZlIHRoZSBsb2NrCiB5ZXQsIHNvIHdlIGFzc3VtZSB3ZSBhcmUgZ29pbmcgdG8gYmUgYSB3YWl0ZXIuICBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHRvCiBwbGF5IG5pY2UgZm9yIHRob3NlIGFyY2hpdGVjdHVyZXMgdGhhdCBkbyBoYXZlIENNUFhDSEcuICBCeSBzZXR0aW5nIHRoaXMgZmxhZwpAQCAtNzM1LDcgKzczNSw3IEBACiBpbiB0aGUgc2xvdyBwYXRoIHRvby4gIElmIGEgd2FpdGVyIG9mIGEgbXV0ZXggd29rZSB1cCBiZWNhdXNlIG9mIGEgc2lnbmFsCiBvciB0aW1lb3V0IGJldHdlZW4gdGhlIHRpbWUgdGhlIG93bmVyIGZhaWxlZCB0aGUgZmFzdCBwYXRoIENNUFhDSEcgY2hlY2sgYW5kCiB0aGUgZ3JhYmJpbmcgb2YgdGhlIHdhaXRfbG9jaywgdGhlIG11dGV4IG1heSBub3QgaGF2ZSBhbnkgd2FpdGVycywgdGh1cyB0aGUKLW93bmVyIHN0aWxsIG5lZWRzIHRvIG1ha2UgdGhpcyBjaGVjay4gSWYgdGhlcmUgYXJlIG5vIHdhaXRlcnMgdGhhbiB0aGUgbXV0ZXgKK293bmVyIHN0aWxsIG5lZWRzIHRvIG1ha2UgdGhpcyBjaGVjay4gSWYgdGhlcmUgYXJlIG5vIHdhaXRlcnMgdGhlbiB0aGUgbXV0ZXgKIG93bmVyIGZpZWxkIGlzIHNldCB0byBOVUxMLCB0aGUgd2FpdF9sb2NrIGlzIHJlbGVhc2VkIGFuZCBub3RoaW5nIG1vcmUgaXMKIG5lZWRlZC4KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9zZWNsdmwudHh0IGIvRG9jdW1lbnRhdGlvbi9zZWNsdmwudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NzI3NGQxLi4wMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vc2VjbHZsLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLUJTRCBTZWN1cmUgTGV2ZWxzIExpbnV4IFNlY3VyaXR5IE1vZHVsZQotTWljaGFlbCBBLiBIYWxjcm93IDxtaWtlQGhhbGNyb3cudXM+Ci0KLQotSW50cm9kdWN0aW9uCi0KLVVuZGVyIHRoZSBCU0QgU2VjdXJlIExldmVscyBzZWN1cml0eSBtb2RlbCwgc2V0cyBvZiBwb2xpY2llcyBhcmUKLWFzc29jaWF0ZWQgd2l0aCBsZXZlbHMuIExldmVscyByYW5nZSBmcm9tIC0xIHRvIDIsIHdpdGggLTEgYmVpbmcgdGhlCi13ZWFrZXN0IGFuZCAyIGJlaW5nIHRoZSBzdHJvbmdlc3QuIFRoZXNlIHNlY3VyaXR5IHBvbGljaWVzIGFyZQotZW5mb3JjZWQgYXQgdGhlIGtlcm5lbCBsZXZlbCwgc28gbm90IGV2ZW4gdGhlIHN1cGVydXNlciBpcyBhYmxlIHRvCi1kaXNhYmxlIG9yIGNpcmN1bXZlbnQgdGhlbS4gVGhpcyBoYXJkZW5zIHRoZSBtYWNoaW5lIGFnYWluc3QgYXR0YWNrZXJzCi13aG8gZ2FpbiByb290IGFjY2VzcyB0byB0aGUgc3lzdGVtLgotCi0KLUxldmVscyBhbmQgUG9saWNpZXMKLQotTGV2ZWwgLTEgKFBlcm1hbmVudGx5IEluc2VjdXJlKToKLSAtIENhbm5vdCBpbmNyZWFzZSB0aGUgc2VjdXJlIGxldmVsCi0KLUxldmVsIDAgKEluc2VjdXJlKToKLSAtIENhbm5vdCBwdHJhY2UgdGhlIGluaXQgcHJvY2VzcwotCi1MZXZlbCAxIChEZWZhdWx0KToKLSAtIC9kZXYvbWVtIGFuZCAvZGV2L2ttZW0gYXJlIHJlYWQtb25seQotIC0gSU1NVVRBQkxFIGFuZCBBUFBFTkQgZXh0ZW5kZWQgYXR0cmlidXRlcywgaWYgc2V0LCBtYXkgbm90IGJlIHVuc2V0Ci0gLSBDYW5ub3QgbG9hZCBvciB1bmxvYWQga2VybmVsIG1vZHVsZXMKLSAtIENhbm5vdCB3cml0ZSBkaXJlY3RseSB0byBhIG1vdW50ZWQgYmxvY2sgZGV2aWNlCi0gLSBDYW5ub3QgcGVyZm9ybSByYXcgSS9PIG9wZXJhdGlvbnMKLSAtIENhbm5vdCBwZXJmb3JtIG5ldHdvcmsgYWRtaW5pc3RyYXRpdmUgdGFza3MKLSAtIENhbm5vdCBzZXR1aWQgYW55IGZpbGUKLQotTGV2ZWwgMiAoU2VjdXJlKToKLSAtIENhbm5vdCBkZWNyZW1lbnQgdGhlIHN5c3RlbSB0aW1lCi0gLSBDYW5ub3Qgd3JpdGUgdG8gYW55IGJsb2NrIGRldmljZSwgd2hldGhlciBtb3VudGVkIG9yIG5vdAotIC0gQ2Fubm90IHVubW91bnQgYW55IG1vdW50ZWQgZmlsZXN5c3RlbXMKLQotCi1Db21waWxhdGlvbgotCi1UbyBjb21waWxlIHRoZSBCU0QgU2VjdXJlIExldmVscyBMU00sIHNlY2x2bC5rbywgZW5hYmxlIHRoZQotU0VDVVJJVFlfU0VDTFZMIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiAgVGhpcyBpcyBmb3VuZCB1bmRlciBTZWN1cml0eQotb3B0aW9ucyAtPiBCU0QgU2VjdXJlIExldmVscyBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gbWVudS4KLQotCi1CYXNpYyBVc2FnZQotCi1PbmNlIHRoZSBtYWNoaW5lIGlzIGluIGEgcnVubmluZyBzdGF0ZSwgd2l0aCBhbGwgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzCi1sb2FkZWQgYW5kIGFsbCB0aGUgZmlsZXN5c3RlbXMgbW91bnRlZCwgeW91IGNhbiBsb2FkIHRoZSBzZWNsdmwua28KLW1vZHVsZToKLQotIyBpbnNtb2Qgc2VjbHZsLmtvCi0KLVRoZSBtb2R1bGUgZGVmYXVsdHMgdG8gc2VjdXJlIGxldmVsIDEsIGV4Y2VwdCB3aGVuIGNvbXBpbGVkIGRpcmVjdGx5Ci1pbnRvIHRoZSBrZXJuZWwsIGluIHdoaWNoIGNhc2UgaXQgZGVmYXVsdHMgdG8gc2VjdXJlIGxldmVsIDAuIFRvIHJhaXNlCi10aGUgc2VjdXJlIGxldmVsIHRvIDIsIHRoZSBhZG1pbmlzdHJhdG9yIHdyaXRlcyBgYDInJyB0byB0aGUKLXNlY2x2bC9zZWNsdmwgZmlsZSB1bmRlciB0aGUgc3lzZnMgbW91bnQgcG9pbnQgKGFzc3VtZWQgdG8gYmUgL3N5cyBpbgotdGhlc2UgZXhhbXBsZXMpOgotCi0jIGVjaG8gLW4gIjIiID4gL3N5cy9zZWNsdmwvc2VjbHZsCi0KLUFsdGVybmF0aXZlbHksIHlvdSBjYW4gaW5pdGlhbGl6ZSB0aGUgbW9kdWxlIGF0IHNlY3VyZSBsZXZlbCAyIHdpdGgKLXRoZSBpbml0bHZsIG1vZHVsZSBwYXJhbWV0ZXI6Ci0KLSMgaW5zbW9kIHNlY2x2bC5rbyBpbml0bHZsPTIKLQotQXQgdGhpcyBwb2ludCwgaXQgaXMgaW1wb3NzaWJsZSB0byByZW1vdmUgdGhlIG1vZHVsZSBvciByZWR1Y2UgdGhlCi1zZWN1cmUgbGV2ZWwuICBJZiB0aGUgYWRtaW5pc3RyYXRvciB3aXNoZXMgdG8gaGF2ZSB0aGUgb3B0aW9uIG9mIGRvaW5nCi1zbywgaGUgbXVzdCBwcm92aWRlIGEgbW9kdWxlIHBhcmFtZXRlciwgc2hhMV9wYXNzd2QsIHRoYXQgc3BlY2lmaWVzCi10aGUgU0hBMSBoYXNoIG9mIHRoZSBwYXNzd29yZCB0aGF0IGNhbiBiZSB1c2VkIHRvIHJlZHVjZSB0aGUgc2VjdXJlCi1sZXZlbCB0byAwLgotCi1UbyBnZW5lcmF0ZSB0aGlzIFNIQTEgaGFzaCwgdGhlIGFkbWluaXN0cmF0b3IgY2FuIHVzZSBPcGVuU1NMOgotCi0jIGVjaG8gLW4gImJvb2dhYm9vZ2EiIHwgb3BlbnNzbCBzaGExCi1hYmVkYTRlMGYzM2RlZmE1MTc0MTIxNzU5MmJmNTk1ZWZiOGQyODljCi0KLUluIG9yZGVyIHRvIHVzZSBwYXNzd29yZC1pbnN0aWdhdGVkIHNlY3VyZSBsZXZlbCByZWR1Y3Rpb24sIHRoZSBTSEExCi1jcnlwdG8gbW9kdWxlIG11c3QgYmUgbG9hZGVkIG9yIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbDoKLQotIyBpbnNtb2Qgc2hhMS5rbwotCi1UaGUgYWRtaW5pc3RyYXRvciBjYW4gdGhlbiBpbnNtb2QgdGhlIHNlY2x2bCBtb2R1bGUsIGluY2x1ZGluZyB0aGUKLVNIQTEgaGFzaCBvZiB0aGUgcGFzc3dvcmQ6Ci0KLSMgaW5zbW9kIHNlY2x2bC5rbwotICAgICAgICAgc2hhMV9wYXNzd2Q9YWJlZGE0ZTBmMzNkZWZhNTE3NDEyMTc1OTJiZjU5NWVmYjhkMjg5YwotCi1UbyByZWR1Y2UgdGhlIHNlY3VyZSBsZXZlbCwgd3JpdGUgdGhlIHBhc3N3b3JkIHRvIHNlY2x2bC9wYXNzd2QgdW5kZXIKLXlvdXIgc3lzZnMgbW91bnQgcG9pbnQ6Ci0KLSMgZWNobyAtbiAiYm9vZ2Fib29nYSIgPiAvc3lzL3NlY2x2bC9wYXNzd2QKLQotVGhlIFNlcHRlbWJlciAyMDA0IGVkaXRpb24gb2YgU3lzIEFkbWluIE1hZ2F6aW5lIGhhcyBhbiBhcnRpY2xlIGFib3V0Ci10aGUgQlNEIFNlY3VyZSBMZXZlbHMgTFNNLiAgSSBlbmNvdXJhZ2UgeW91IHRvIHJlZmVyIHRvIHRoYXQgYXJ0aWNsZQotZm9yIGEgbW9yZSBpbi1kZXB0aCB0cmVhdG1lbnQgb2YgdGhpcyBzZWN1cml0eSBtb2R1bGU6Ci0KLWh0dHA6Ly93d3cuc2FtYWcuY29tL2RvY3VtZW50cy9zPTkzMDQvc2FtMDQwOWEvMDQwOWEuaHRtCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3NoL25ldy1tYWNoaW5lLnR4dCBiL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CmluZGV4IGViMmRkMmUuLjczOTg4ZTAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CisrKyBiL0RvY3VtZW50YXRpb24vc2gvbmV3LW1hY2hpbmUudHh0CkBAIC00MSwxMSArNDEsNiBAQAogICAgICAgICB8CiAJLi4gbW9yZSBib2FyZHMgaGVyZSAuLi4KIAotSXQgc2hvdWxkIGFsc28gYmUgbm90ZWQgdGhhdCBlYWNoIGJvYXJkIGlzIHJlcXVpcmVkIHRvIGhhdmUgc29tZSBjZXJ0YWluCi1oZWFkZXJzLiBBdCB0aGUgdGltZSBvZiB0aGlzIHdyaXRpbmcsIGlvLmggaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBuZWVkcwotdG8gYmUgcHJvdmlkZWQgZm9yIGVhY2ggYm9hcmQsIGFuZCBjYW4gZ2VuZXJhbGx5IGp1c3QgcmVmZXJlbmNlIGdlbmVyaWMKLWZ1bmN0aW9ucyAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlzYV9wb3J0MmFkZHIpLgotCiBOZXh0LCBmb3IgY29tcGFuaW9uIGNoaXBzOgogLgogYC0tIGFyY2gKQEAgLTEwNCwxMiArOTksMTMgQEAKIEJvdGggdGhlIFNvbHV0aW9uIEVuZ2luZSBhbmQgdGhlIGhwNnh4IGJvYXJkcyBhcmUgYW4gZXhhbXBsZSBvZiB0aGlzLgogCiBBZnRlciB5b3UgaGF2ZSBzZXR1cCB5b3VyIG5ldyBhcmNoL3NoL2JvYXJkcy8gZGlyZWN0b3J5LCByZW1lbWJlciB0aGF0IHlvdQotYWxzbyBtdXN0IGFkZCBhIGRpcmVjdG9yeSBpbiBpbmNsdWRlL2FzbS1zaCBmb3IgaGVhZGVycyBsb2NhbGl6ZWQgdG8gdGhpcwotYm9hcmQuIEluIG9yZGVyIHRvIGludGVyb3BlcmF0ZSBzZWFtbGVzc2x5IHdpdGggdGhlIGJ1aWxkIHN5c3RlbSwgaXQncyBiZXN0Ci10byBoYXZlIHRoaXMgZGlyZWN0b3J5IHRoZSBzYW1lIGFzIHRoZSBhcmNoL3NoL2JvYXJkcy8gZGlyZWN0b3J5IG5hbWUsCi10aG91Z2ggaWYgeW91ciBib2FyZCBpcyBhZ2FpbiBwYXJ0IG9mIGEgZmFtaWx5LCB0aGUgYnVpbGQgc3lzdGVtIGhhcyB3YXlzCi1vZiBkZWFsaW5nIHdpdGggdGhpcywgYW5kIHlvdSBjYW4gZmVlbCBmcmVlIHRvIG5hbWUgdGhlIGRpcmVjdG9yeSBhZnRlcgotdGhlIGZhbWlseSBtZW1iZXIgaXRzZWxmLgorc2hvdWxkIGFsc28gYWRkIGEgZGlyZWN0b3J5IGluIGluY2x1ZGUvYXNtLXNoIGZvciBoZWFkZXJzIGxvY2FsaXplZCB0byB0aGlzCitib2FyZCAoaWYgdGhlcmUgYXJlIGdvaW5nIHRvIGJlIG1vcmUgdGhhbiBvbmUpLiBJbiBvcmRlciB0byBpbnRlcm9wZXJhdGUKK3NlYW1sZXNzbHkgd2l0aCB0aGUgYnVpbGQgc3lzdGVtLCBpdCdzIGJlc3QgdG8gaGF2ZSB0aGlzIGRpcmVjdG9yeSB0aGUgc2FtZQorYXMgdGhlIGFyY2gvc2gvYm9hcmRzLyBkaXJlY3RvcnkgbmFtZSwgdGhvdWdoIGlmIHlvdXIgYm9hcmQgaXMgYWdhaW4gcGFydCBvZgorYSBmYW1pbHksIHRoZSBidWlsZCBzeXN0ZW0gaGFzIHdheXMgb2YgZGVhbGluZyB3aXRoIHRoaXMgKHZpYSBpbmNkaXIteQorb3ZlcmxvYWRpbmcpLCBhbmQgeW91IGNhbiBmZWVsIGZyZWUgdG8gbmFtZSB0aGUgZGlyZWN0b3J5IGFmdGVyIHRoZSBmYW1pbHkKK21lbWJlciBpdHNlbGYuCiAKIFRoZXJlIGFyZSBhIGZldyB0aGluZ3MgdGhhdCBlYWNoIGJvYXJkIGlzIHJlcXVpcmVkIHRvIGhhdmUsIGJvdGggaW4gdGhlCiBhcmNoL3NoL2JvYXJkcyBhbmQgdGhlIGluY2x1ZGUvYXNtLXNoLyBoZWlyYXJjaHkuIEluIG9yZGVyIHRvIGJldHRlcgpAQCAtMTIyLDYgKzExOCw3IEBACiAgKiBhcmNoL3NoL2JvYXJkcy92YXBvci9zZXR1cC5jIC0gU2V0dXAgY29kZSBmb3IgaW1hZ2luYXJ5IGJvYXJkCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPiAvKiBmb3IgYm9hcmRfdGltZV9pbml0KCkgKi8KIAogY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCiB7CkBAIC0xNTIsNzkgKzE0OSw1NyBAQAogfQogCiBPdXIgbmV3IGltYWdpbmFyeSBib2FyZCB3aWxsIGFsc28gaGF2ZSB0byB0aWUgaW50byB0aGUgbWFjaHZlYyBpbiBvcmRlciBmb3IgaXQKLXRvIGJlIG9mIGFueSB1c2UuIEN1cnJlbnRseSB0aGUgbWFjaHZlYyBpcyBzbG93bHkgb24gaXRzIHdheSBvdXQsIGJ1dCBpcyBzdGlsbAotcmVxdWlyZWQgZm9yIHRoZSB0aW1lIGJlaW5nLiBBcyBzdWNoLCBsZXQgdXMgdGFrZSBhIGxvb2sgYXQgd2hhdCBuZWVkcyB0byBiZQotZG9uZSBmb3IgdGhlIG1hY2h2ZWMgYXNzaWdubWVudC4KK3RvIGJlIG9mIGFueSB1c2UuCiAKIG1hY2h2ZWMgZnVuY3Rpb25zIGZhbGwgaW50byBhIG51bWJlciBvZiBjYXRlZ29yaWVzOgogCiAgLSBJL08gZnVuY3Rpb25zIHRvIElPIG1lbW9yeSAoaW5iIGV0YykgYW5kIFBDSS9tYWluIG1lbW9yeSAocmVhZGIgZXRjKS4KLSAtIEkvTyByZW1hcHBpbmcgZnVuY3Rpb25zIChpb3JlbWFwIGV0YykKLSAtIHNvbWUgaW5pdGlhbGlzYXRpb24gZnVuY3Rpb25zCi0gLSBhICdoZWFydGJlYXQnIGZ1bmN0aW9uCi0gLSBzb21lIG1pc2NlbGxhbmVvdXMgZmxhZ3MKKyAtIEkvTyBtYXBwaW5nIGZ1bmN0aW9ucyAoaW9wb3J0X21hcCwgaW9wb3J0X3VubWFwLCBldGMpLgorIC0gYSAnaGVhcnRiZWF0JyBmdW5jdGlvbi4KKyAtIFBDSSBhbmQgSVJRIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzLgorIC0gQ29uc2lzdGVudCBhbGxvY2F0b3JzIChmb3IgYm9hcmRzIHRoYXQgbmVlZCBzcGVjaWFsIGFsbG9jYXRvcnMsCisgICBwYXJ0aWN1bGFybHkgZm9yIGFsbG9jYXRpbmcgb3V0IG9mIHNvbWUgYm9hcmQtc3BlY2lmaWMgU1JBTSBmb3IgRE1BCisgICBoYW5kbGVzKS4KIAotVGhlIHRyZWUgY2FuIGJlIGJ1aWx0IGluIHR3byB3YXlzOgotIC0gYXMgYSBmdWxseSBnZW5lcmljIGJ1aWxkLiBBbGwgZHJpdmVycyBhcmUgbGlua2VkIGluLCBhbmQgYWxsIGZ1bmN0aW9ucwotICAgZ28gdGhyb3VnaCB0aGUgbWFjaHZlYwotIC0gYXMgYSBtYWNoaW5lIHNwZWNpZmljIGJ1aWxkLiBJbiB0aGlzIGNhc2Ugb25seSB0aGUgcmVxdWlyZWQgZHJpdmVycwotICAgd2lsbCBiZSBsaW5rZWQgaW4sIGFuZCBzb21lIG1hY3JvcyBtYXkgYmUgcmVkZWZpbmVkIHRvIG5vdCBnbyB0aHJvdWdoCi0gICB0aGUgbWFjaHZlYyB3aGVyZSBwZXJmb3JtYW5jZSBpcyBpbXBvcnRhbnQgKGluIHBhcnRpY3VsYXIgSU8gZnVuY3Rpb25zKS4KK1RoZXJlIGFyZSBtYWNodmVjIGZ1bmN0aW9ucyBhZGRlZCBhbmQgcmVtb3ZlZCBvdmVyIHRpbWUsIHNvIGFsd2F5cyBiZSBzdXJlIHRvCitjb25zdWx0IGluY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaCBmb3IgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIG1hY2h2ZWMuCiAKLVRoZXJlIGFyZSB0aHJlZSB3YXlzIGluIHdoaWNoIElPIGNhbiBiZSBwZXJmb3JtZWQ6Ci0gLSBub25lIGF0IGFsbC4gVGhpcyBpcyByZWFsbHkgb25seSB1c2VmdWwgZm9yIHRoZSAndW5rbm93bicgbWFjaGluZSB0eXBlLAotICAgd2hpY2ggdXMgZGVzaWduZWQgdG8gcnVuIG9uIGEgbWFjaGluZSBhYm91dCB3aGljaCB3ZSBrbm93IG5vdGhpbmcsIGFuZAotICAgc28gYWxsIGFsbCBJTyBpbnN0cnVjdGlvbnMgZG8gbm90aGluZy4KLSAtIGZ1bGx5IGN1c3RvbS4gSW4gdGhpcyBjYXNlIGFsbCBJTyBmdW5jdGlvbnMgZ28gdG8gYSBtYWNoaW5lIHNwZWNpZmljCi0gICBzZXQgb2YgZnVuY3Rpb25zIHdoaWNoIGNhbiBkbyB3aGF0IHRoZXkgbGlrZQotIC0gYSBnZW5lcmljIHNldCBvZiBmdW5jdGlvbnMuIFRoZXNlIHdpbGwgY29wZSB3aXRoIG1vc3Qgc2l0dWF0aW9ucywKLSAgIGFuZCByZWx5IG9uIGEgc2luZ2xlIGZ1bmN0aW9uLCBtdl9wb3J0MmFkZHIsIHdoaWNoIGlzIGNhbGxlZCB0aHJvdWdoIHRoZQotICAgbWFjaGluZSB2ZWN0b3IsIGFuZCBjb252ZXJ0cyBhbiBJTyBhZGRyZXNzIGludG8gYSBtZW1vcnkgYWRkcmVzcywgd2hpY2gKLSAgIGNhbiBiZSByZWFkIGZyb20vd3JpdHRlbiB0byBkaXJlY3RseS4KK1RoZSBrZXJuZWwgd2lsbCBhdXRvbWF0aWNhbGx5IHdyYXAgaW4gZ2VuZXJpYyByb3V0aW5lcyBmb3IgdW5kZWZpbmVkIGZ1bmN0aW9uCitwb2ludGVycyBpbiB0aGUgbWFjaHZlYyBhdCBib290IHRpbWUsIGFzIG1hY2h2ZWMgZnVuY3Rpb25zIGFyZSByZWZlcmVuY2VkCit1bmNvbmRpdGlvbmFsbHkgdGhyb3VnaG91dCBtb3N0IG9mIHRoZSB0cmVlLiBTb21lIGJvYXJkcyBoYXZlIGluY3JlZGlibHkKK3NwYXJzZSBtYWNodmVjcyAoc3VjaCBhcyB0aGUgZHJlYW1jYXN0IGFuZCBzaDAzKSwgd2hlcmVhcyBvdGhlcnMgbXVzdCBkZWZpbmUKK3ZpcnR1YWxseSBldmVyeXRoaW5nIChydHM3NzUxcjJkKS4KIAotVGh1cyBhZGRpbmcgYSBuZXcgbWFjaGluZSBpbnZvbHZlcyB0aGUgZm9sbG93aW5nIHN0ZXBzIChJIHdpbGwgYXNzdW1lIEkgYW0KLWFkZGluZyBhIG1hY2hpbmUgY2FsbGVkIHZhcG9yKToKK0FkZGluZyBhIG5ldyBtYWNoaW5lIGlzIHJlbGF0aXZlbHkgdHJpdmlhbCAodXNpbmcgdmFwb3IgYXMgYW4gZXhhbXBsZSk6CiAKLSAtIGFkZCBhIG5ldyBmaWxlIGluY2x1ZGUvYXNtLXNoL3ZhcG9yL2lvLmggd2hpY2ggY29udGFpbnMgcHJvdG90eXBlcyBmb3IKK0lmIHRoZSBib2FyZC1zcGVjaWZpYyBkZWZpbml0aW9ucyBhcmUgcXVpdGUgbWluaW1hbGlzdGljLCBhcyBpcyB0aGUgY2FzZSBmb3IKK3RoZSB2YXN0IG1ham9yaXR5IG9mIGJvYXJkcywgc2ltcGx5IGhhdmluZyBhIHNpbmdsZSBib2FyZC1zcGVjaWZpYyBoZWFkZXIgaXMKK3N1ZmZpY2llbnQuCisKKyAtIGFkZCBhIG5ldyBmaWxlIGluY2x1ZGUvYXNtLXNoL3ZhcG9yLmggd2hpY2ggY29udGFpbnMgcHJvdG90eXBlcyBmb3IKICAgIGFueSBtYWNoaW5lIHNwZWNpZmljIElPIGZ1bmN0aW9ucyBwcmVmaXhlZCB3aXRoIHRoZSBtYWNoaW5lIG5hbWUsIGZvcgogICAgZXhhbXBsZSB2YXBvcl9pbmIuIFRoZXNlIHdpbGwgYmUgbmVlZGVkIHdoZW4gZmlsbGluZyBvdXQgdGhlIG1hY2hpbmUKICAgIHZlY3Rvci4KIAotICAgVGhpcyBpcyB0aGUgbWluaW11bSB0aGF0IGlzIHJlcXVpcmVkLCBob3dldmVyIHRoZXJlIGFyZSBhbXBsZQotICAgb3Bwb3J0dW5pdGllcyB0byBvcHRpbWlzZSB0aGlzLiBJbiBwYXJ0aWN1bGFyLCBieSBtYWtpbmcgdGhlIHByb3RvdHlwZXMKLSAgIGlubGluZSBmdW5jdGlvbiBkZWZpbml0aW9ucywgaXQgaXMgcG9zc2libGUgdG8gaW5saW5lIHRoZSBmdW5jdGlvbiB3aGVuCi0gICBidWlsZGluZyBtYWNoaW5lIHNwZWNpZmljIHZlcnNpb25zLiBOb3RlIHRoYXQgdGhlIG1hY2hpbmUgdmVjdG9yCi0gICBmdW5jdGlvbnMgd2lsbCBzdGlsbCBiZSBuZWVkZWQsIHNvIHRoYXQgYSBtb2R1bGUgYnVpbHQgZm9yIGEgZ2VuZXJpYwotICAgc2V0dXAgY2FuIGJlIGxvYWRlZC4KKyAgIE5vdGUgdGhhdCB0aGVzZSBwcm90b3R5cGVzIGFyZSBnZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBzZXR0aW5nCisgICBfX0lPX1BSRUZJWCB0byBzb21ldGhpbmcgc2Vuc2libGUuIEEgdHlwaWNhbCBleGFtcGxlIHdvdWxkIGJlOgogCi0gLSBhZGQgYSBuZXcgZmlsZSBhcmNoL3NoL2JvYXJkcy92YXBvci9tYWNoLmMuIFRoaXMgY29udGFpbnMgdGhlIGRlZmluaXRpb24KLSAgIG9mIHRoZSBtYWNoaW5lIHZlY3Rvci4gV2hlbiBidWlsZGluZyB0aGUgbWFjaGluZSBzcGVjaWZpYyB2ZXJzaW9uLCB0aGlzCi0gICB3aWxsIGJlIHRoZSByZWFsIG1hY2hpbmUgdmVjdG9yICh2aWEgYW4gYWxpYXMpLCB3aGlsZSBpbiB0aGUgZ2VuZXJpYwotICAgdmVyc2lvbiBpcyB1c2VkIHRvIGluaXRpYWxpc2UgdGhlIG1hY2hpbmUgdmVjdG9yLCBhbmQgdGhlbiBmcmVlZCwgYnkKLSAgIG1ha2luZyBpdCBpbml0ZGF0YS4gVGhpcyBzaG91bGQgYmUgZGVmaW5lZCBhczoKKwkjZGVmaW5lIF9fSU9fUFJFRklYIHZhcG9yCisgICAJI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CiAKLSAgICAgc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3ZhcG9yIF9faW5pdG12ID0gewotICAgICAgIC5tdl9uYW1lID0gInZhcG9yIiwKLSAgICAgfQotICAgICBBTElBU19NVih2YXBvcikKKyAgIHNvbWV3aGVyZSBpbiB0aGUgYm9hcmQtc3BlY2lmaWMgaGVhZGVyLiBBbnkgYm9hcmRzIGJlaW5nIHBvcnRlZCB0aGF0IHN0aWxsCisgICBoYXZlIGEgbGVnYWN5IGlvLmggc2hvdWxkIHJlbW92ZSBpdCBlbnRpcmVseSBhbmQgc3dpdGNoIHRvIHRoZSBuZXcgbW9kZWwuCiAKLSAtIGZpbmFsbHkgYWRkIGEgZmlsZSBhcmNoL3NoL2JvYXJkcy92YXBvci9pby5jLCB3aGljaCBjb250YWlucwotICAgZGVmaW5pdGlvbnMgb2YgdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW8gZnVuY3Rpb25zLgorIC0gQWRkIG1hY2hpbmUgdmVjdG9yIGRlZmluaXRpb25zIHRvIHRoZSBib2FyZCdzIHNldHVwLmMuIEF0IGEgYmFyZSBtaW5pbXVtLAorICAgdGhpcyBtdXN0IGJlIGRlZmluZWQgYXMgc29tZXRoaW5nIGxpa2U6CiAKLUEgbm90ZSBhYm91dCBpbml0aWFsaXNhdGlvbiBmdW5jdGlvbnMuIFRocmVlIGluaXRpYWxpc2F0aW9uIGZ1bmN0aW9ucyBhcmUKLXByb3ZpZGVkIGluIHRoZSBtYWNoaW5lIHZlY3RvcjoKLSAtIG12X2FyY2hfaW5pdCAtIGNhbGxlZCB2ZXJ5IGVhcmx5IG9uIGZyb20gc2V0dXBfYXJjaAotIC0gbXZfaW5pdF9pcnEgLSBjYWxsZWQgZnJvbSBpbml0X0lSUSwgYWZ0ZXIgdGhlIGdlbmVyaWMgU0ggaW50ZXJydXB0Ci0gICBpbml0aWFsaXNhdGlvbgotIC0gbXZfaW5pdF9wY2kgLSBjdXJyZW50bHkgbm90IHVzZWQKKwlzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdmFwb3IgX19pbml0bXYgPSB7CisJCS5tdl9uYW1lID0gInZhcG9yIiwKKwl9OworCUFMSUFTX01WKHZhcG9yKQogCi1Bbnkgb3RoZXIgcmVtYWluaW5nIGZ1bmN0aW9ucyB3aGljaCBuZWVkIHRvIGJlIGNhbGxlZCBhdCBzdGFydCB1cCBjYW4gYmUKLWFkZGVkIHRvIHRoZSBsaXN0IHVzaW5nIHRoZSBfX2luaXRjYWxscyBtYWNybyAob3IgbW9kdWxlX2luaXQgaWYgdGhlIGNvZGUKLWNhbiBiZSBidWlsdCBhcyBhIG1vZHVsZSkuIE1hbnkgZ2VuZXJpYyBkcml2ZXJzIHByb2JlIHRvIHNlZSBpZiB0aGUgZGV2aWNlCi10aGV5IGFyZSB0YXJnZXRpbmcgaXMgcHJlc2VudCwgaG93ZXZlciB0aGlzIG1heSBub3QgYWx3YXlzIGJlIGFwcHJvcHJpYXRlLAotc28gYSBmbGFnIGNhbiBiZSBhZGRlZCB0byB0aGUgbWFjaGluZSB2ZWN0b3Igd2hpY2ggd2lsbCBiZSBzZXQgb24gdGhvc2UKLW1hY2hpbmVzIHdoaWNoIGhhdmUgdGhlIGhhcmR3YXJlIGluIHF1ZXN0aW9uLCByZWR1Y2luZyB0aGUgcHJvYmUgdG8gYQotc2luZ2xlIGNvbmRpdGlvbmFsLgorIC0gZmluYWxseSBhZGQgYSBmaWxlIGFyY2gvc2gvYm9hcmRzL3ZhcG9yL2lvLmMsIHdoaWNoIGNvbnRhaW5zIGRlZmluaXRpb25zIG9mCisgICB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbyBmdW5jdGlvbnMgKGlmIHRoZXJlIGFyZSBlbm91Z2ggdG8gd2FycmFudCBpdCkuCiAKIDMuIEhvb2tpbmcgaW50byB0aGUgQnVpbGQgU3lzdGVtCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMzAzLDQgKzI3OCwzIEBACiBvbGRjb25maWcgKHByb21wdGluZyB5b3UgZm9yIGFueSBuZXcgb3B0aW9ucyBzaW5jZSB0aGUgdGltZSBvZiBjcmVhdGlvbiksCiBhbmQgc3RhcnQgeW91IG9uIHlvdXIgd2F5IHRvIGhhdmluZyBhIGZ1bmN0aW9uYWwga2VybmVsIGZvciB5b3VyIG5ldwogYm9hcmQuCi0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vc2gvcmVnaXN0ZXItYmFua3MudHh0IGIvRG9jdW1lbnRhdGlvbi9zaC9yZWdpc3Rlci1iYW5rcy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY3MTlmMgotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vc2gvcmVnaXN0ZXItYmFua3MudHh0CkBAIC0wLDAgKzEsMzMgQEAKKwlOb3RlcyBvbiByZWdpc3RlciBiYW5rIHVzYWdlIGluIHRoZSBrZXJuZWwKKwk9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSW50cm9kdWN0aW9uCistLS0tLS0tLS0tLS0KKworVGhlIFNILTMgYW5kIFNILTQgQ1BVIGZhbWlsaWVzIHRyYWRpdGlvbmFsbHkgaW5jbHVkZSBhIHNpbmdsZSBwYXJ0aWFsIHJlZ2lzdGVyCitiYW5rIChzZWxlY3RlZCBieSBTUi5SQiwgb25seSByMCAuLi4gcjcgYXJlIGJhbmtlZCksIHdoZXJlYXMgb3RoZXIgZmFtaWxpZXMKK21heSBoYXZlIG1vcmUgZnVsbC1mZWF0dXJlZCBiYW5raW5nIG9yIHNpbXBseSBubyBzdWNoIGNhcGFiaWxpdGllcyBhdCBhbGwuCisKK1NSLlJCIGJhbmtpbmcKKy0tLS0tLS0tLS0tLS0KKworSW4gdGhlIGNhc2Ugb2YgdGhpcyB0eXBlIG9mIGJhbmtpbmcsIGJhbmtlZCByZWdpc3RlcnMgYXJlIG1hcHBlZCBkaXJlY3RseSB0bworcjAgLi4uIHI3IGlmIFNSLlJCIGlzIHNldCB0byB0aGUgYmFuayB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgb3RoZXJ3aXNlIGxkYy9zdGMKK2NhbiBzdGlsbCBiZSB1c2VkIHRvIHJlZmVyZW5jZSB0aGUgYmFua2VkIHJlZ2lzdGVycyAoYXMgcjBfYmFuayAuLi4gcjdfYmFuaykKK3doZW4gaW4gdGhlIGNvbnRleHQgb2YgYW5vdGhlciBiYW5rLiBUaGUgZGV2ZWxvcGVyIG11c3Qga2VlcCB0aGUgU1IuUkIgdmFsdWUKK2luIG1pbmQgd2hlbiB3cml0aW5nIGNvZGUgdGhhdCB1dGlsaXplcyB0aGVzZSBiYW5rZWQgcmVnaXN0ZXJzLCBmb3Igb2J2aW91cworcmVhc29ucy4gVXNlcnNwYWNlIGlzIGFsc28gbm90IGFibGUgdG8gcG9rZSBhdCB0aGUgYmFuazEgdmFsdWVzLCBzbyB0aGVzZSBjYW4KK2JlIHVzZWQgcmF0aGVyIGVmZmVjdGl2ZWx5IGFzIHNjcmF0Y2ggcmVnaXN0ZXJzIGJ5IHRoZSBrZXJuZWwuCisKK1ByZXNlbnRseSB0aGUga2VybmVsIHVzZXMgc2V2ZXJhbCBvZiB0aGVzZSByZWdpc3RlcnMuCisKKwktIHIwX2JhbmssIHIxX2JhbmsgKHJlZmVyZW5jZWQgYXMgazAgYW5kIGsxLCB1c2VkIGZvciBzY3JhdGNoCisJICByZWdpc3RlcnMgd2hlbiBkb2luZyBleGNlcHRpb24gaGFuZGxpbmcpLgorCS0gcjJfYmFuayAodXNlZCB0byB0cmFjayB0aGUgRVhQRVZUL0lOVEVWVCBjb2RlKQorCQktIFVzZWQgYnkgZG9fSVJRKCkgYW5kIGZyaWVuZHMgZm9yIGRvaW5nIGlycSBtYXBwaW5nIGJhc2VkIG9mZgorCQkgIG9mIHRoZSBpbnRlcnJ1cHQgZXhjZXB0aW9uIHZlY3RvciBqdW1wIHRhYmxlIG9mZnNldAorCS0gcjZfYmFuayAoZ2xvYmFsIGludGVycnVwdCBtYXNrKQorCQktIFRoZSBTUi5JTUFTSyBpbnRlcnJ1cHQgaGFuZGxlciBtYWtlcyB1c2Ugb2YgdGhpcyB0byBzZXQgdGhlCisJCSAgaW50ZXJydXB0IHByaW9yaXR5IGxldmVsICh1c2VkIGJ5IGxvY2FsX2lycV9lbmFibGUoKSkKKwktIHI3X2JhbmsgKGN1cnJlbnQpCisKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL2Vycm9yLWNvZGVzLnR4dAppbmRleCA4NjdmNGMzLi4zOWM2OGY4IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3VzYi9lcnJvci1jb2Rlcy50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi91c2IvZXJyb3ItY29kZXMudHh0CkBAIC05OCwxMyArOTgsMTMgQEAKIAkJCWVycm9yLCBhIGZhaWx1cmUgdG8gcmVzcG9uZCAob2Z0ZW4gY2F1c2VkIGJ5CiAJCQlkZXZpY2UgZGlzY29ubmVjdCksIG9yIHNvbWUgb3RoZXIgZmF1bHQuCiAKLS1FVElNRURPVVQgKCoqKQkJTm8gcmVzcG9uc2UgcGFja2V0IHJlY2VpdmVkIHdpdGhpbiB0aGUgcHJlc2NyaWJlZAorLUVUSU1FICgqKikJCU5vIHJlc3BvbnNlIHBhY2tldCByZWNlaXZlZCB3aXRoaW4gdGhlIHByZXNjcmliZWQKIAkJCWJ1cyB0dXJuLWFyb3VuZCB0aW1lLiAgVGhpcyBlcnJvciBtYXkgaW5zdGVhZCBiZQogCQkJcmVwb3J0ZWQgYXMgLUVQUk9UTyBvciAtRUlMU0VRLgogCi0JCQlOb3RlIHRoYXQgdGhlIHN5bmNocm9ub3VzIFVTQiBtZXNzYWdlIGZ1bmN0aW9ucwotCQkJYWxzbyB1c2UgdGhpcyBjb2RlIHRvIGluZGljYXRlIHRpbWVvdXQgZXhwaXJlZAotCQkJYmVmb3JlIHRoZSB0cmFuc2ZlciBjb21wbGV0ZWQuCistRVRJTUVET1VUCQlTeW5jaHJvbm91cyBVU0IgbWVzc2FnZSBmdW5jdGlvbnMgdXNlIHRoaXMgY29kZQorCQkJdG8gaW5kaWNhdGUgdGltZW91dCBleHBpcmVkIGJlZm9yZSB0aGUgdHJhbnNmZXIKKwkJCWNvbXBsZXRlZCwgYW5kIG5vIG90aGVyIGVycm9yIHdhcyByZXBvcnRlZCBieSBIQy4KIAogLUVQSVBFICgqKikJCUVuZHBvaW50IHN0YWxsZWQuICBGb3Igbm9uLWNvbnRyb2wgZW5kcG9pbnRzLAogCQkJcmVzZXQgdGhpcyBzdGF0dXMgd2l0aCB1c2JfY2xlYXJfaGFsdCgpLgpAQCAtMTYzLDYgKzE2MywzIEBACiB1c2JfY29udHJvbF9tc2coKToKIHVzYl9idWxrX21zZygpOgogLUVUSU1FRE9VVAkJVGltZW91dCBleHBpcmVkIGJlZm9yZSB0aGUgdHJhbnNmZXIgY29tcGxldGVkLgotCQkJSW4gdGhlIGZ1dHVyZSB0aGlzIGNvZGUgbWF5IGNoYW5nZSB0byAtRVRJTUUsCi0JCQl3aG9zZSBkZWZpbml0aW9uIGlzIGEgY2xvc2VyIG1hdGNoIHRvIHRoaXMgc29ydAotCQkJb2YgZXJyb3IuCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3VzYi91c2Itc2VyaWFsLnR4dCBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CmluZGV4IDAyYjBmN2IuLmEyZGVlNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdXNiL3VzYi1zZXJpYWwudHh0CkBAIC00MzMsNiArNDMzLDExIEBACiAgIFNlZSBodHRwOi8vd3d3LnV1aGF1cy5kZS9saW51eC9wYWxtY29ubmVjdC5odG1sIGZvciB1cC10by1kYXRlCiAgIGluZm9ybWF0aW9uIG9uIHRoaXMgZHJpdmVyLgogCitBSVJjYWJsZSBVU0IgRG9uZ2xlIEJsdWV0b290aCBkcml2ZXIKKyAgSWYgdGhlcmUgaXMgdGhlIGNkY19hY20gZHJpdmVyIGxvYWRlZCBpbiB0aGUgc3lzdGVtLCB5b3Ugd2lsbCBmaW5kIHRoYXQgdGhlCisgIGNkY19hY20gY2xhaW1zIHRoZSBkZXZpY2UgYmVmb3JlIEFJUmNhYmxlIGNhbi4gVGhpcyBpcyBzaW1wbHkgY29ycmVjdGVkCisgIGJ5IHVubG9hZGluZyBib3RoIG1vZHVsZXMgYW5kIHRoZW4gbG9hZGluZyB0aGUgYWlyY2FibGUgbW9kdWxlIGJlZm9yZQorICBjZGNfYWNtIG1vZHVsZQogCiBHZW5lcmljIFNlcmlhbCBkcml2ZXIKIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CmluZGV4IDAwZDlhMWYuLjY2OWEwOWEgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKQEAgLTcsMTAgKzcsMTAgQEAKICAgNiAtPiBBdmVyVFYgU3R1ZGlvIDMwMyAoTTEyNikgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MDAwYl0KICAgNyAtPiBNU0kgVFYtQG55d2hlcmUgTWFzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjI6ODYwNl0KICAgOCAtPiBMZWFkdGVrIFdpbmZhc3QgRFYyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYyMF0KLSAgOSAtPiBMZWFkdGVrIFBWUiAyMDAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjYzYiwxMDdkOjY2M0NdCisgIDkgLT4gTGVhZHRlayBQVlIgMjAwMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2M2IsMTA3ZDo2NjNjLDEwN2Q6NjYzMl0KICAxMCAtPiBJT0RBVEEgR1YtVkNQMy9QQ0kgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwZmM6ZDAwM10KICAxMSAtPiBQcm9saW5rIFBsYXlUViBQVlIKLSAxMiAtPiBBU1VTIFBWUi00MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDgyM10KKyAxMiAtPiBBU1VTIFBWUi00MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzEwNDM6NDgyMywxNDYxOmMxMTFdCiAgMTMgLT4gTVNJIFRWLUBueXdoZXJlCiAgMTQgLT4gS1dvcmxkL1ZTdHJlYW0gWFBlcnQgRFZCLVQgICAgICAgICAgICAgICAgICAgICAgICAgIFsxN2RlOjA4YTZdCiAgMTUgLT4gRFZpQ08gRnVzaW9uSERUViBEVkItVDEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmRiMDBdCkBAIC01MSwzICs1MSw3IEBACiAgNTAgLT4gTlBHIFRlY2ggUmVhbCBUViBGTSBUb3AgMTAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjA4NDJdCiAgNTEgLT4gV2luRmFzdCBEVFYyMDAwIEggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxMDdkOjY2NWVdCiAgNTIgLT4gR2VuaWF0ZWNoIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxNGYxOjAwODRdCisgNTMgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjMwMDAgVHJpTW9kZSBBbmFsb2cvRFZCLVMvRFZCLVQgIFswMDcwOjE0MDRdCisgNTQgLT4gTm9yd29vZCBNaWNybyBUViBUdW5lcgorIDU1IC0+IFNoZW56aGVuIFR1bmdzdGVuIEFnZXMgVGVjaCBURS1EVFYtMjUwIC8gU3dhbm4gT0VNICBbYzE4MDpjOTgwXQorIDU2IC0+IEhhdXBwYXVnZSBXaW5UVi1IVlIxMzAwIERWQi1UL0h5YnJpZCBNUEVHIEVuY29kZXIgICBbMDA3MDo5NjAwLDAwNzA6OTYwMSwwMDcwOjk2MDJdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggOTA2OGI2Ni4uOTRjZjY5NSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtNTgsNyArNTgsNyBAQAogIDU3IC0+IEF2ZXJtZWRpYSBBVmVyVFYgR08gMDA3IEZNICAgICAgICAgICAgICAgWzE0NjE6ZjMxZl0KICA1OCAtPiBBRFMgVGVjaCBJbnN0YW50IFRWIChzYWE3MTM1KSAgICAgICAgICAgIFsxNDIxOjAzNTAsMTQyMTowMzUxLDE0MjE6MDM3MCwxNDIxOjEzNzBdCiAgNTkgLT4gS3dvcmxkL1RldmlvbiBWLVN0cmVhbSBYcGVydCBUViBQVlI3MTM0Ci0gNjAgLT4gTGlmZVZpZXcvVHlwaG9vbiBGbHlEVkItVCBEdW8gQ2FyZGJ1cyAgICBbNTE2ODowNTAyLDRlNDI6MDUwMl0KKyA2MCAtPiBMaWZlVmlldy9UeXBob29uL0dlbml1cyBGbHlEVkItVCBEdW8gQ2FyZGJ1cyBbNTE2ODowNTAyLDRlNDI6MDUwMiwxNDg5OjA1MDJdCiAgNjEgLT4gUGhpbGlwcyBUT1VHSCBEVkItVCByZWZlcmVuY2UgZGVzaWduICAgICBbMTEzMToyMDA0XQogIDYyIC0+IENvbXBybyBWaWRlb01hdGUgVFYgR29sZCtJSQogIDYzIC0+IEt3b3JsZCBYcGVydCBUViBQVlI3MTM0CkBAIC04Myw3ICs4Myw3IEBACiAgODIgLT4gTVNJIFRWQEFueXdoZXJlIHBsdXMgICAgICAgICAgICAgICAgICAgICBbMTQ2Mjo2MjMxXQogIDgzIC0+IFRlcnJhdGVjIENpbmVyZ3kgMjUwIFBDSSBUViAgICAgICAgICAgICAgWzE1M2I6MTE2MF0KICA4NCAtPiBMaWZlVmlldyBGbHlEVkIgVHJpbyAgICAgICAgICAgICAgICAgICAgIFs1MTY4OjAzMTldCi0gODUgLT4gQXZlclRWIERWQi1UIDc3NyAgICAgICAgICAgICAgICAgICAgICAgICBbMTQ2MToyYzA1XQorIDg1IC0+IEF2ZXJUViBEVkItVCA3NzcgICAgICAgICAgICAgICAgICAgICAgICAgWzE0NjE6MmMwNSwxNDYxOjJjMDVdCiAgODYgLT4gTGlmZVZpZXcgRmx5RFZCLVQgLyBHZW5pdXMgVmlkZW9Xb25kZXIgRFZCLVQgWzUxNjg6MDMwMSwxNDg5OjAzMDFdCiAgODcgLT4gQURTIEluc3RhbnQgVFYgRHVvIENhcmRidXMgUFRWMzMxICAgICAgICBbMDMzMToxNDIxXQogIDg4IC0+IFRldmlvbi9LV29ybGQgRFZCLVQgMjIwUkYgICAgICAgICAgICAgICAgWzE3ZGU6NzIwMV0KQEAgLTk0LDMgKzk0LDYgQEAKICA5MyAtPiBNZWRpb24gNzEzNCBCcmlkZ2UgIzIgICAgICAgICAgICAgICAgICAgIFsxNmJlOjAwMDVdCiAgOTQgLT4gTGlmZVZpZXcgRmx5RFZCLVQgSHlicmlkIENhcmRidXMgICAgICAgICBbNTE2ODozMzA2LDUxNjg6MzUwMl0KICA5NSAtPiBMaWZlVmlldyBGbHlWSURFTzMwMDAgKE5UU0MpICAgICAgICAgICAgIFs1MTY5OjAxMzhdCisgOTYgLT4gTWVkaW9uIE1kODgwMCBRdWFkcm8gICAgICAgICAgICAgICAgICAgICBbMTZiZTowMDA3LDE2YmU6MDAwOF0KKyA5NyAtPiBMaWZlVmlldyBGbHlEVkItUyAvQWNvcnAgVFYxMzREUyAgICAgICAgIFs1MTY4OjAzMDAsNGU0MjowMzAwXQorIDk4IC0+IFByb3RldXMgUHJvIDIzMDkgICAgICAgICAgICAgICAgICAgICAgICAgWzA5MTk6MjAwM10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwppbmRleCBmYzk0ZmYyLi5iYjdjMmNhIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCkBAIC01NCw2ICs1NCwxMiBAQAogCQkJCWRyb3BvdXRzLgogCQljaHJvbWFfYWdjPTAvMQlBR0Mgb2YgY2hyb21hIHNpZ25hbCwgb2ZmIGJ5IGRlZmF1bHQuCiAJCWFkY19jcnVzaD0wLzEJTHVtaW5hbmNlIEFEQyBjcnVzaCwgb24gYnkgZGVmYXVsdC4KKwkJaTJjX3VkZWxheT0gICAgIEFsbG93IHJlZHVjZSBJMkMgc3BlZWQuIERlZmF1bHQgaXMgNSB1c2VjcworCQkJCShtZWFuaW5nIDY2LDY3IEticHMpLiBUaGUgZGVmYXVsdCBpcyB0aGUKKwkJCQltYXhpbXVtIHN1cHBvcnRlZCBzcGVlZCBieSBrZXJuZWwgYml0YmFuZworCQkJCWFsZ29yaXRtLiBZb3UgbWF5IHVzZSBsb3dlciBudW1iZXJzLCBpZiBJMkMKKwkJCQltZXNzYWdlcyBhcmUgbG9zdCAoMTYgaXMga25vd24gdG8gd29yayBvbgorCQkJCWFsbCBzdXBwb3J0ZWQgY2FyZHMpLgogCiAJCWJ0dHZfZ3Bpbz0wLzEKIAkJZ3Bpb21hc2s9CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUyMTNlZAotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMgpAQCAtMCwwICsxLDExNiBAQAorVGhlIGN4MjM0MTYgY2FuIHByb2R1Y2UgKGFuZCB0aGUgY3gyMzQxNSBjYW4gYWxzbyByZWFkKSByYXcgWVVWIG91dHB1dC4gVGhlCitmb3JtYXQgb2YgYSBZVVYgZnJhbWUgaXMgc3BlY2lmaWMgdG8gdGhpcyBjaGlwIGFuZCBpcyBjYWxsZWQgSE0xMi4gJ0hNJyBzdGFuZHMKK2ZvciAnSGF1cHBhdWdlIE1hY3JvYmxvY2snLCB3aGljaCBpcyBhIG1pc25vbWVyIGFzICdDb25leGFudCBNYWNyb2Jsb2NrJyB3b3VsZAorYmUgbW9yZSBhY2N1cmF0ZS4KKworVGhlIGZvcm1hdCBpcyBZVVYgNDoyOjAgd2hpY2ggdXNlcyAxIFkgYnl0ZSBwZXIgcGl4ZWwgYW5kIDEgVSBhbmQgViBieXRlIHBlcgorZm91ciBwaXhlbHMuCisKK1RoZSBkYXRhIGlzIGVuY29kZWQgYXMgdHdvIG1hY3JvYmxvY2sgcGxhbmVzLCB0aGUgZmlyc3QgY29udGFpbmluZyB0aGUgWQordmFsdWVzLCB0aGUgc2Vjb25kIGNvbnRhaW5pbmcgVVYgbWFjcm9ibG9ja3MuCisKK1RoZSBZIHBsYW5lIGlzIGRpdmlkZWQgaW50byBibG9ja3Mgb2YgMTZ4MTYgcGl4ZWxzIGZyb20gbGVmdCB0byByaWdodAorYW5kIGZyb20gdG9wIHRvIGJvdHRvbS4gRWFjaCBibG9jayBpcyB0cmFuc21pdHRlZCBpbiB0dXJuLCBsaW5lLWJ5LWxpbmUuCisKK1NvIHRoZSBmaXJzdCAxNiBieXRlcyBhcmUgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIHRvcC1sZWZ0IGJsb2NrLCB0aGUKK3NlY29uZCAxNiBieXRlcyBhcmUgdGhlIHNlY29uZCBsaW5lIG9mIHRoZSB0b3AtbGVmdCBibG9jaywgZXRjLiBBZnRlcgordHJhbnNtaXR0aW5nIHRoaXMgYmxvY2sgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGJsb2NrIG9uIHRoZSByaWdodCB0byB0aGUKK2ZpcnN0IGJsb2NrIGlzIHRyYW5zbWl0dGVkLCBldGMuCisKK1RoZSBVViBwbGFuZSBpcyBkaXZpZGVkIGludG8gYmxvY2tzIG9mIDE2eDggVVYgdmFsdWVzIGdvaW5nIGZyb20gbGVmdAordG8gcmlnaHQsIHRvcCB0byBib3R0b20uIEVhY2ggYmxvY2sgaXMgdHJhbnNtaXR0ZWQgaW4gdHVybiwgbGluZS1ieS1saW5lLgorCitTbyB0aGUgZmlyc3QgMTYgYnl0ZXMgYXJlIHRoZSBmaXJzdCBsaW5lIG9mIHRoZSB0b3AtbGVmdCBibG9jayBhbmQKK2NvbnRhaW4gOCBVViB2YWx1ZSBwYWlycyAoMTYgYnl0ZXMgaW4gdG90YWwpLiBUaGUgc2Vjb25kIDE2IGJ5dGVzIGFyZSB0aGUKK3NlY29uZCBsaW5lIG9mIDggVVYgcGFpcnMgb2YgdGhlIHRvcC1sZWZ0IGJsb2NrLCBldGMuIEFmdGVyIHRyYW5zbWl0dGluZwordGhpcyBibG9jayB0aGUgZmlyc3QgbGluZSBvZiB0aGUgYmxvY2sgb24gdGhlIHJpZ2h0IHRvIHRoZSBmaXJzdCBibG9jayBpcwordHJhbnNtaXR0ZWQsIGV0Yy4KKworVGhlIGNvZGUgYmVsb3cgaXMgZ2l2ZW4gYXMgYW4gZXhhbXBsZSBvbiBob3cgdG8gY29udmVydCBITTEyIHRvIHNlcGFyYXRlCitZLCBVIGFuZCBWIHBsYW5lcy4gVGhpcyBjb2RlIGFzc3VtZXMgZnJhbWVzIG9mIDcyMHg1NzYgKFBBTCkgcGl4ZWxzLgorCitUaGUgd2lkdGggb2YgYSBmcmFtZSBpcyBhbHdheXMgNzIwIHBpeGVscywgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHNwZWNpZmllZAord2lkdGguCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgdW5zaWduZWQgY2hhciBmcmFtZVs1NzYqNzIwKjMvMl07CitzdGF0aWMgdW5zaWduZWQgY2hhciBmcmFtZXlbNTc2KjcyMF07CitzdGF0aWMgdW5zaWduZWQgY2hhciBmcmFtZXVbNTc2KjcyMCAvIDRdOworc3RhdGljIHVuc2lnbmVkIGNoYXIgZnJhbWV2WzU3Nio3MjAgLyA0XTsKKworc3RhdGljIHZvaWQgZGVfbWFjcm9feSh1bnNpZ25lZCBjaGFyKiBkc3QsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGRzdHJpZGUsIGludCB3LCBpbnQgaCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgeSwgeCwgaTsKKworICAgIC8vIGRlc2NyYW1ibGUgWSBwbGFuZQorICAgIC8vIGRzdHJpZGUgPSA3MjAgPSB3CisgICAgLy8gVGhlIFkgcGxhbmUgaXMgZGl2aWRlZCBpbnRvIGJsb2NrcyBvZiAxNngxNiBwaXhlbHMKKyAgICAvLyBFYWNoIGJsb2NrIGluIHRyYW5zbWl0dGVkIGluIHR1cm4sIGxpbmUtYnktbGluZS4KKyAgICBmb3IgKHkgPSAwOyB5IDwgaDsgeSArPSAxNikgeworCWZvciAoeCA9IDA7IHggPCB3OyB4ICs9IDE2KSB7CisJICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCW1lbWNweShkc3QgKyB4ICsgKHkgKyBpKSAqIGRzdHJpZGUsIHNyYywgMTYpOworCQlzcmMgKz0gMTY7CisJICAgIH0KKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkZV9tYWNyb191dih1bnNpZ25lZCBjaGFyICpkc3R1LCB1bnNpZ25lZCBjaGFyICpkc3R2LCB1bnNpZ25lZCBjaGFyICpzcmMsIGludCBkc3RyaWRlLCBpbnQgdywgaW50IGgpCit7CisgICAgdW5zaWduZWQgaW50IHksIHgsIGk7CisKKyAgICAvLyBkZXNjcmFtYmxlIFUvViBwbGFuZQorICAgIC8vIGRzdHJpZGUgPSA3MjAgLyAyID0gdworICAgIC8vIFRoZSBVL1YgdmFsdWVzIGFyZSBpbnRlcmxhY2VkIChVVlVWLi4uKS4KKyAgICAvLyBBZ2FpbiwgdGhlIFVWIHBsYW5lIGlzIGRpdmlkZWQgaW50byBibG9ja3Mgb2YgMTZ4MTYgVVYgdmFsdWVzLgorICAgIC8vIEVhY2ggYmxvY2sgaW4gdHJhbnNtaXR0ZWQgaW4gdHVybiwgbGluZS1ieS1saW5lLgorICAgIGZvciAoeSA9IDA7IHkgPCBoOyB5ICs9IDE2KSB7CisJZm9yICh4ID0gMDsgeCA8IHc7IHggKz0gOCkgeworCSAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQlpbnQgaWR4ID0geCArICh5ICsgaSkgKiBkc3RyaWRlOworCisJCWRzdHVbaWR4KzBdID0gc3JjWzBdOyAgZHN0dltpZHgrMF0gPSBzcmNbMV07CisJCWRzdHVbaWR4KzFdID0gc3JjWzJdOyAgZHN0dltpZHgrMV0gPSBzcmNbM107CisJCWRzdHVbaWR4KzJdID0gc3JjWzRdOyAgZHN0dltpZHgrMl0gPSBzcmNbNV07CisJCWRzdHVbaWR4KzNdID0gc3JjWzZdOyAgZHN0dltpZHgrM10gPSBzcmNbN107CisJCWRzdHVbaWR4KzRdID0gc3JjWzhdOyAgZHN0dltpZHgrNF0gPSBzcmNbOV07CisJCWRzdHVbaWR4KzVdID0gc3JjWzEwXTsgZHN0dltpZHgrNV0gPSBzcmNbMTFdOworCQlkc3R1W2lkeCs2XSA9IHNyY1sxMl07IGRzdHZbaWR4KzZdID0gc3JjWzEzXTsKKwkJZHN0dVtpZHgrN10gPSBzcmNbMTRdOyBkc3R2W2lkeCs3XSA9IHNyY1sxNV07CisJCXNyYyArPSAxNjsKKwkgICAgfQorCX0KKyAgICB9Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIEZJTEUgKmZpbjsKKyAgICBpbnQgaTsKKworICAgIGlmIChhcmdjID09IDEpIGZpbiA9IHN0ZGluOworICAgIGVsc2UgZmluID0gZm9wZW4oYXJndlsxXSwgInIiKTsKKworICAgIGlmIChmaW4gPT0gTlVMTCkgeworCWZwcmludGYoc3RkZXJyLCAiY2Fubm90IG9wZW4gaW5wdXRcbiIpOworCWV4aXQoLTEpOworICAgIH0KKyAgICB3aGlsZSAoZnJlYWQoZnJhbWUsIHNpemVvZihmcmFtZSksIDEsIGZpbikgPT0gMSkgeworCWRlX21hY3JvX3koZnJhbWV5LCBmcmFtZSwgNzIwLCA3MjAsIDU3Nik7CisJZGVfbWFjcm9fdXYoZnJhbWV1LCBmcmFtZXYsIGZyYW1lICsgNzIwICogNTc2LCA3MjAgLyAyLCA3MjAgLyAyLCA1NzYgLyAyKTsKKwlmd3JpdGUoZnJhbWV5LCBzaXplb2YoZnJhbWV5KSwgMSwgc3Rkb3V0KTsKKwlmd3JpdGUoZnJhbWV2LCBzaXplb2YoZnJhbWV2KSwgMSwgc3Rkb3V0KTsKKwlmd3JpdGUoZnJhbWV1LCBzaXplb2YoZnJhbWV1KSwgMSwgc3Rkb3V0KTsKKyAgICB9CisgICAgZmNsb3NlKGZpbik7CisgICAgcmV0dXJuIDA7Cit9CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLnZiaSBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUudmJpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MDdjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLnZiaQpAQCAtMCwwICsxLDQ1IEBACisKK0Zvcm1hdCBvZiBlbWJlZGRlZCBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBWQkkgZGF0YQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBmb3JtYXQgb2YgdGhlIFZCSSBkYXRhCitlbWJlZGRlZCBpbiBhbiBNUEVHLTIgcHJvZ3JhbSBzdHJlYW0uIFRoaXMgZm9ybWF0IGlzIGluIHBhcnQgZGljdGF0ZWQgYnkgc29tZQoraGFyZHdhcmUgbGltaXRhdGlvbnMgb2YgdGhlIGl2dHYgZHJpdmVyICh0aGUgZHJpdmVyIGZvciB0aGUgQ29uZXhhbnQgY3gyMzQxNS82CitjaGlwcyksIGluIHBhcnRpY3VsYXIgYSBtYXhpbXVtIHNpemUgZm9yIHRoZSBWQkkgZGF0YS4gQW55dGhpbmcgbG9uZ2VyIGlzIGN1dAorb2ZmIHdoZW4gdGhlIE1QRUcgc3RyZWFtIGlzIHBsYXllZCBiYWNrIHRocm91Z2ggdGhlIGN4MjM0MTUuCisKK1RoZSBhZHZhbnRhZ2Ugb2YgdGhpcyBmb3JtYXQgaXMgaXQgaXMgdmVyeSBjb21wYWN0IGFuZCB0aGF0IGFsbCBWQkkgZGF0YSBmb3IKK2FsbCBsaW5lcyBjYW4gYmUgc3RvcmVkIHdoaWxlIHN0aWxsIGZpdHRpbmcgd2l0aGluIHRoZSBtYXhpbXVtIGFsbG93ZWQgc2l6ZS4KKworVGhlIHN0cmVhbSBJRCBvZiB0aGUgVkJJIGRhdGEgaXMgMHhCRC4gVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgZW1iZWRkZWQgZGF0YSBpcworNCArIDQzICogMzYsIHdoaWNoIGlzIDQgYnl0ZXMgZm9yIGEgaGVhZGVyIGFuZCAyICogMTggVkJJIGxpbmVzIHdpdGggYSAxIGJ5dGUKK2hlYWRlciBhbmQgYSA0MiBieXRlcyBwYXlsb2FkIGVhY2guIEFueXRoaW5nIGJleW9uZCB0aGlzIGxpbWl0IGlzIGN1dCBvZmYgYnkKK3RoZSBjeDIzNDE1LzYgZmlybXdhcmUuIEJlc2lkZXMgdGhlIGRhdGEgZm9yIHRoZSBWQkkgbGluZXMgd2UgYWxzbyBuZWVkIDM2IGJpdHMKK2ZvciBhIGJpdG1hc2sgZGV0ZXJtaW5pbmcgd2hpY2ggbGluZXMgYXJlIGNhcHR1cmVkIGFuZCA0IGJ5dGVzIGZvciBhIG1hZ2ljIGNvb2tpZSwKK3NpZ25pZnlpbmcgdGhhdCB0aGlzIGRhdGEgcGFja2FnZSBjb250YWlucyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUViBWQkkgZGF0YS4KK0lmIGFsbCBsaW5lcyBhcmUgdXNlZCwgdGhlbiB0aGVyZSBpcyBubyBsb25nZXIgcm9vbSBmb3IgdGhlIGJpdG1hc2suIFRvIHNvbHZlIHRoaXMKK3R3byBkaWZmZXJlbnQgbWFnaWMgbnVtYmVycyB3ZXJlIGludHJvZHVjZWQ6CisKKydpdHYwJzogQWZ0ZXIgdGhpcyBtYWdpYyBudW1iZXIgdHdvIHVuc2lnbmVkIGxvbmdzIGZvbGxvdy4gQml0cyAwLTE3IG9mIHRoZSBmaXJzdAordW5zaWduZWQgbG9uZyBkZW5vdGUgd2hpY2ggbGluZXMgb2YgdGhlIGZpcnN0IGZpZWxkIGFyZSBjYXB0dXJlZC4gQml0cyAxOC0zMSBvZgordGhlIGZpcnN0IHVuc2lnbmVkIGxvbmcgYW5kIGJpdHMgMC0zIG9mIHRoZSBzZWNvbmQgdW5zaWduZWQgbG9uZyBhcmUgdXNlZCBmb3IgdGhlCitzZWNvbmQgZmllbGQuCisKKydJVFYwJzogVGhpcyBtYWdpYyBudW1iZXIgYXNzdW1lcyBhbGwgVkJJIGxpbmVzIGFyZSBjYXB0dXJlZCwgaS5lLiBpdCBpbXBsaWNpdGx5CitpbXBsaWVzIHRoYXQgdGhlIGJpdG1hc2tzIGFyZSAweGZmZmZmZmZmIGFuZCAweGYuCisKK0FmdGVyIHRoZXNlIG1hZ2ljIGNvb2tpZXMgKGFuZCB0aGUgOCBieXRlIGJpdG1hc2sgaW4gY2FzZSBvZiBjb29raWUgJ2l0djAnKSB0aGUKK2NhcHR1cmVkIFZCSSBsaW5lcyBzdGFydDoKKworRm9yIGVhY2ggbGluZSB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgNCBiaXRzIG9mIHRoZSBmaXJzdCBieXRlIGNvbnRhaW4gdGhlIGRhdGEgdHlwZS4KK1Bvc3NpYmxlIHZhbHVlcyBhcmUgc2hvd24gaW4gdGhlIHRhYmxlIGJlbG93LiBUaGUgcGF5bG9hZCBpcyBpbiB0aGUgZm9sbG93aW5nIDQyCitieXRlcy4KKworSGVyZSBpcyB0aGUgbGlzdCBvZiBwb3NzaWJsZSBkYXRhIHR5cGVzOgorCisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVEVMRVRFWFQgICAgICAgMHgxICAgICAvLyBUZWxldGV4dCAodXNlcyBsaW5lcyA2LTIyIGZvciBQQUwpCisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfQ0MgICAgICAgICAgICAgMHg0ICAgICAvLyBDbG9zZWQgQ2FwdGlvbnMgKGxpbmUgMjEgTlRTQykKKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9XU1MgICAgICAgICAgICAweDUgICAgIC8vIFdpZGUgU2NyZWVuIFNpZ25hbCAobGluZSAyMyBQQUwpCisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgMHg3ICAgICAvLyBWaWRlbyBQcm9ncmFtbWluZyBTeXN0ZW0gKFBBTCkgKGxpbmUgMTYpCisKK0hhbnMgVmVya3VpbCA8aHZlcmt1aWxAeHM0YWxsLm5sPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dCBiL0RvY3VtZW50YXRpb24veDg2XzY0L2Jvb3Qtb3B0aW9ucy50eHQKaW5kZXggNDMwM2UwYy4uNzRiNzdmOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi94ODZfNjQvYm9vdC1vcHRpb25zLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3g4Nl82NC9ib290LW9wdGlvbnMudHh0CkBAIC0xOTksNiArMTk5LDExIEBACiAgICBhbGxvd2VkICBvdmVyd3JpdGUgaW9tbXUgb2ZmIHdvcmthcm91bmRzIGZvciBzcGVjaWZpYyBjaGlwc2V0cy4KICAgIHNvZnQJIFVzZSBzb2Z0d2FyZSBib3VuY2UgYnVmZmVyaW5nIChkZWZhdWx0IGZvciBJbnRlbCBtYWNoaW5lcykKICAgIG5vYXBlcnR1cmUgRG9uJ3QgdG91Y2ggdGhlIGFwZXJ0dXJlIGZvciBBR1AuCisgICBhbGxvd2RhYyBBbGxvdyBETUEgPjRHQgorCSAgICBXaGVuIG9mZiBhbGwgRE1BIG92ZXIgPjRHQiBpcyBmb3JjZWQgdGhyb3VnaCBhbiBJT01NVSBvciBib3VuY2UKKwkgICAgYnVmZmVyaW5nLgorICAgbm9kYWMgICAgRm9yYmlkIERNQSA+NEdCCisgICBwYW5pYyAgICBBbHdheXMgcGFuaWMgd2hlbiBJT01NVSBvdmVyZmxvd3MKIAogICBzd2lvdGxiPXBhZ2VzWyxmb3JjZV0KIApkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA3NjdhNDM0Li5mMGNkNWEzIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtNTAxLDcgKzUwMSw3IEBACiAKIEJMT0NLIExBWUVSCiBQOglKZW5zIEF4Ym9lCi1NOglheGJvZUBzdXNlLmRlCitNOglheGJvZUBrZXJuZWwuZGsKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFQ6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvYXhib2UvbGludXgtMi42LWJsb2NrLmdpdAogUzoJTWFpbnRhaW5lZApAQCAtODUxLDcgKzg1MSw3IEBACiBNOglEb3VnbGFzX1dhcnplY2hhQGRlbGwuY29tCiBTOglNYWludGFpbmVkCiAKLURFVklDRS1NQVBQRVIKK0RFVklDRS1NQVBQRVIgIChMVk0pCiBQOglBbGFzZGFpciBLZXJnb24KIEw6CWRtLWRldmVsQHJlZGhhdC5jb20KIFc6CWh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZG0KQEAgLTEzODAsNyArMTM4MCw3IEBACiAKIElERS9BVEFQSSBDRFJPTSBEUklWRVIKIFA6CUplbnMgQXhib2UKLU06CWF4Ym9lQHN1c2UuZGUKK006CWF4Ym9lQGtlcm5lbC5kawogTDoJbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZwogVzoJaHR0cDovL3d3dy5rZXJuZWwuZGsKIFM6CU1haW50YWluZWQKQEAgLTEzOTgsMzYgKzEzOTgsMjkgQEAKIEw6CWxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIAotSUVFRSAxMzk0IEVUSEVSTkVUIChldGgxMzk0KQotTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3d3dy5saW51eDEzOTQub3JnLwotUzoJT3JwaGFuCi0KIElFRUUgMTM5NCBTVUJTWVNURU0KIFA6CUJlbiBDb2xsaW5zCiBNOgliY29sbGluc0BkZWJpYW4ub3JnCi1QOglKb2R5IE1jSW50eXJlCi1NOglzY2pvZHlAbW9kZXJuZHVjay5jb20KK1A6CVN0ZWZhbiBSaWNodGVyCitNOglzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlCiBMOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0CiBXOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCi1UOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L3Njam9keS9pZWVlMTM5NC5naXQKK1Q6CWdpdCBrZXJuZWwub3JnOi9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvaWVlZTEzOTQvbGludXgxMzk0LTIuNi5naXQKIFM6CU1haW50YWluZWQKIAotSUVFRSAxMzk0IE9IQ0kgRFJJVkVSCi1QOglCZW4gQ29sbGlucwotTToJYmNvbGxpbnNAZGViaWFuLm9yZwotUDoJSm9keSBNY0ludHlyZQotTToJc2Nqb2R5QG1vZGVybmR1Y2suY29tCitJRUVFIDEzOTQgSVBWNCBEUklWRVIgKGV0aDEzOTQpCitQOglTdGVmYW4gUmljaHRlcgorTToJc3RlZmFuckBzNXI2LmluLWJlcmxpbi5kZQogTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3d3dy5saW51eDEzOTQub3JnLwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIEZpeGVzCiAKIElFRUUgMTM5NCBQQ0lMWU5YIERSSVZFUgogUDoJSm9keSBNY0ludHlyZQogTToJc2Nqb2R5QG1vZGVybmR1Y2suY29tCitQOglTdGVmYW4gUmljaHRlcgorTToJc3RlZmFuckBzNXI2LmluLWJlcmxpbi5kZQogTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3d3dy5saW51eDEzOTQub3JnLwotUzoJTWFpbnRhaW5lZAorUzoJT2RkIEZpeGVzCiAKIElFRUUgMTM5NCBSQVcgSS9PIERSSVZFUgogUDoJQmVuIENvbGxpbnMKQEAgLTE0MzUsMTYgKzE0MjgsNiBAQAogUDoJRGFuIERlbm5lZHkKIE06CWRhbkBkZW5uZWR5Lm9yZwogTDoJbGludXgxMzk0LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAotVzoJaHR0cDovL3d3dy5saW51eDEzOTQub3JnLwotUzoJTWFpbnRhaW5lZAotCi1JRUVFIDEzOTQgU0JQMgotUDoJQmVuIENvbGxpbnMKLU06CWJjb2xsaW5zQGRlYmlhbi5vcmcKLVA6CVN0ZWZhbiBSaWNodGVyCi1NOglzdGVmYW5yQHM1cjYuaW4tYmVybGluLmRlCi1MOglsaW51eDEzOTQtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci1XOglodHRwOi8vd3d3LmxpbnV4MTM5NC5vcmcvCiBTOglNYWludGFpbmVkCiAKIElNUyBUV0lOVFVSQk8gRlJBTUVCVUZGRVIgRFJJVkVSCkBAIC0yMDYyLDcgKzIwNDUsNyBAQAogVzoJaHR0cDovL3d3dy5saW51eC1heDI1Lm9yZy8KIFM6CU1haW50YWluZWQKIAotTkVUV09SSyBCTE9DSyBERVZJQ0UKK05FVFdPUksgQkxPQ0sgREVWSUNFIChOQkQpCiBQOglQYXVsIENsZW1lbnRzCiBNOglQYXVsLkNsZW1lbnRzQHN0ZWVsZXllLmNvbQogUzoJTWFpbnRhaW5lZApAQCAtMjU0OCw3ICsyNTMxLDcgQEAKIAogU0NTSSBDRFJPTSBEUklWRVIKIFA6CUplbnMgQXhib2UKLU06CWF4Ym9lQHN1c2UuZGUKK006CWF4Ym9lQGtlcm5lbC5kawogTDoJbGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmcKIFc6CWh0dHA6Ly93d3cua2VybmVsLmRrCiBTOglNYWludGFpbmVkCkBAIC0yNjc5LDcgKzI2NjIsNiBAQAogUDoJRGFuaWVsIERyYWtlCiBNOglkc2RAZ2VudG9vLm9yZwogVzoJaHR0cDovL3NvZnRtYWMuc2lwc29sdXRpb25zLm5ldC8KLUw6CXNvZnRtYWMtZGV2QHNpcHNvbHV0aW9ucy5uZXQKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIApAQCAtMjgxMSw2ICsyNzkzLDEyIEBACiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnID8KIFM6CVN1cHBvcnRlZAogCitTUElERVJORVQgTkVUV09SSyBEUklWRVIgZm9yIENFTEwKK1A6CUppbSBMZXdpcworTToJamltQGprbGV3aXMuY29tCitMOgluZXRkZXZAdmdlci5rZXJuZWwub3JnCitTOglTdXBwb3J0ZWQKKwogU1JNIChBbHBoYSkgZW52aXJvbm1lbnQgYWNjZXNzCiBQOglKYW4tQmVuZWRpY3QgR2xhdwogTToJamJnbGF3QGx1Zy1vd2wuZGUKQEAgLTI4MzUsMTIgKzI4MjMsOSBAQAogU1VQRVJIIChzaCkKIFA6CVBhdWwgTXVuZHQKIE06CWxldGhhbEBsaW51eC1zaC5vcmcKLVA6CUthenVtb3RvIEtvamltYQotTToJa2tvamltYUByci5paWo0dS5vci5qcAotTDoJbGludXhzaC1kZXZAbGlzdHMuc291cmNlZm9yZ2UubmV0CitMOglsaW51eHNoLWRldkBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgKHN1YnNjcmliZXJzLW9ubHkpCiBXOglodHRwOi8vd3d3LmxpbnV4LXNoLm9yZwogVzoJaHR0cDovL3d3dy5tMTduLm9yZy9saW51eC1zaC8KLVc6CWh0dHA6Ly93d3cucnIuaWlqNHUub3IuanAvfmtrb2ppbWEvbGludXgtc2g0Lmh0bWwKIFM6CU1haW50YWluZWQKIAogU1VQRVJINjQgKHNoNjQpCkBAIC0yOTkxLDcgKzI5NzYsNyBAQAogCiBVTklGT1JNIENEUk9NIERSSVZFUgogUDoJSmVucyBBeGJvZQotTToJYXhib2VAc3VzZS5kZQorTToJYXhib2VAa2VybmVsLmRrCiBMOglsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCiBXOglodHRwOi8vd3d3Lmtlcm5lbC5kawogUzoJTWFpbnRhaW5lZApAQCAtMzMxMCw2ICszMjk1LDEyIEBACiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21jaGVoYWIvdjRsLWR2Yi5naXQKIFM6CU1haW50YWluZWQKIAorVlQxMjExIEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCitQOglKdWVyZyBIYWVmbGlnZXIKK006CWp1ZXJnaEBnbWFpbC5jb20KK0w6CWxtLXNlbnNvcnNAbG0tc2Vuc29ycy5vcmcKK1M6CU1haW50YWluZWQKKwogVlQ4MjMxIEhBUkRXQVJFIE1PTklUT1IgRFJJVkVSCiBQOglSb2dlciBMdWNhcwogTToJcm9nZXJAcGxhbmJpdC5jby51awpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUgYi9NYWtlZmlsZQppbmRleCA4MGRhYzAyLi40YzZjNWUzIDEwMDY0NAotLS0gYS9NYWtlZmlsZQorKysgYi9NYWtlZmlsZQpAQCAtMTM4NSw5ICsxMzg1LDEzIEBACiBlbmRpZiAjaWZlcSAoJChtaXhlZC10YXJnZXRzKSwxKQogCiBQSE9OWSArPSBjaGVja3N0YWNrIGtlcm5lbHJlbGVhc2Uga2VybmVsdmVyc2lvbgorCisjIFVzZSAkKFNVQkFSQ0gpIGhlcmUgaW5zdGVhZCBvZiAkKEFSQ0gpIHNvIHRoYXQgdGhpcyB3b3JrcyBmb3IgVU1MLgorIyBJbiB0aGUgVU1MIGNhc2UsICQoU1VCQVJDSCkgaXMgdGhlIG5hbWUgb2YgdGhlIHVuZGVybHlpbmcKKyMgYXJjaGl0ZWN0dXJlLCB3aGlsZSBmb3IgYWxsIG90aGVyIGFyY2hlcywgaXQgaXMgdGhlIHNhbWUgYXMgJChBUkNIKS4KIGNoZWNrc3RhY2s6CiAJJChPQkpEVU1QKSAtZCB2bWxpbnV4ICQkKGZpbmQgLiAtbmFtZSAnKi5rbycpIHwgXAotCSQoUEVSTCkgJChzcmMpL3NjcmlwdHMvY2hlY2tzdGFjay5wbCAkKEFSQ0gpCisJJChQRVJMKSAkKHNyYykvc2NyaXB0cy9jaGVja3N0YWNrLnBsICQoU1VCQVJDSCkKIAoga2VybmVscmVsZWFzZToKIAkkKGlmICQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcva2VybmVsLnJlbGVhc2UpLCAkKFEpZWNobyAkKEtFUk5FTFJFTEVBU0UpLCBcCmRpZmYgLS1naXQgYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oIGIvYXJjaC9hbHBoYS9rZXJuZWwvcHJvdG8uaAppbmRleCAyYTZlM2RhLi4yMWY3MTI4IDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC9wcm90by5oCisrKyBiL2FyY2gvYWxwaGEva2VybmVsL3Byb3RvLmgKQEAgLTEsNSArMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKIC8qIFByb3RvdHlwZXMgb2YgZnVuY3Rpb25zIHVzZWQgYWNyb3NzIG1vZHVsZXMgaGVyZSBpbiB0aGlzIGRpcmVjdG9yeS4gICovCiAKQEAgLTE4MSw5ICsxODMsMTYgQEAKIGV4dGVybiB2b2lkIHN3aXRjaF90b19zeXN0ZW1fbWFwKHZvaWQpOwogZXh0ZXJuIHZvaWQgc3JtX3BhZ2luZ19zdG9wKHZvaWQpOwogCi0vKiAuLi9tbS9yZW1hcC5jICovCi1leHRlcm4gaW50IF9fYWxwaGFfcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCAKLQkJCQkgICAgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CitzdGF0aWMgaW5saW5lIGludAorX19hbHBoYV9yZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCisJCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXBncHJvdF90IHByb3Q7CisKKwlwcm90ID0gX19wZ3Byb3QoX1BBR0VfVkFMSUQgfCBfUEFHRV9BU00gfCBfUEFHRV9LUkUKKwkJCXwgX1BBR0VfS1dFIHwgZmxhZ3MpOworCXJldHVybiBpb3JlbWFwX3BhZ2VfcmFuZ2UoYWRkcmVzcywgYWRkcmVzcyArIHNpemUsIHBoeXNfYWRkciwgcHJvdCk7Cit9CiAKIC8qIGlycS5jICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYyBiL2FyY2gvYWxwaGEva2VybmVsL3RpbWUuYwppbmRleCBiMTkxY2M3Li41ODFkZGNjIDEwMDY0NAotLS0gYS9hcmNoL2FscGhhL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hbHBoYS9rZXJuZWwvdGltZS5jCkBAIC01NCw4ICs1NCw2IEBACiAjaW5jbHVkZSAicHJvdG8uaCIKICNpbmNsdWRlICJpcnFfaW1wbC5oIgogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7CS8qIGtlcm5lbC90aW1lci5jICovCi0KIHN0YXRpYyBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcpOwogCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwpAQCAtMTMyLDcgKzEzMCw3IEBACiAJbnRpY2tzID0gZGVsdGEgPj4gRklYX1NISUZUOwogCiAJd2hpbGUgKG50aWNrcyA+IDApIHsKLQkJZG9fdGltZXIocmVncyk7CisJCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTQxMyw3ICs0MTEsNyBAQAogZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIGxvbmcgc2VjLCB1c2VjLCBsb3N0LCBzZXE7CisJdW5zaWduZWQgbG9uZyBzZWMsIHVzZWMsIHNlcTsKIAl1bnNpZ25lZCBsb25nIGRlbHRhX2N5Y2xlcywgZGVsdGFfdXNlYywgcGFydGlhbF90aWNrOwogCiAJZG8gewpAQCAtNDIzLDE0ICs0MjEsMTMgQEAKIAkJc2VjID0geHRpbWUudHZfc2VjOwogCQl1c2VjID0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKIAkJcGFydGlhbF90aWNrID0gc3RhdGUucGFydGlhbF90aWNrOwotCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwogCiAjaWZkZWYgQ09ORklHX1NNUAogCS8qIFVudGlsIGFuZCB1bmxlc3Mgd2UgZmlndXJlIG91dCBob3cgdG8gZ2V0IGNwdSBjeWNsZSBjb3VudGVycwogCSAgIGluIHN5bmMgYW5kIGtlZXAgdGhlbSB0aGVyZSwgd2UgY2FuJ3QgdXNlIHRoZSBycGNjIHRyaWNrcy4gICovCi0JZGVsdGFfdXNlYyA9IGxvc3QgKiAoMTAwMDAwMCAvIEhaKTsKKwlkZWx0YV91c2VjID0gMDsKICNlbHNlCiAJLyoKIAkgKiB1c2VjID0gY3ljbGVzICogdGlja3NfcGVyX2N5Y2xlICogMioqNDggKiAxZTYgLyAoMioqNDggKiB0aWNrcykKQEAgLTQ0Niw4ICs0NDMsNyBAQAogCSAqLwogCiAJZGVsdGFfdXNlYyA9IChkZWx0YV9jeWNsZXMgKiBzdGF0ZS5zY2FsZWRfdGlja3NfcGVyX2N5Y2xlIAotCQkgICAgICArIHBhcnRpYWxfdGljawotCQkgICAgICArIChsb3N0IDw8IEZJWF9TSElGVCkpICogMTU2MjU7CisJCSAgICAgICsgcGFydGlhbF90aWNrKSAqIDE1NjI1OwogCWRlbHRhX3VzZWMgPSAoKGRlbHRhX3VzZWMgLyAoKDFVTCA8PCAoRklYX1NISUZULTYtMSkpICogSFopKSArIDEpIC8gMjsKICNlbmRpZgogCkBAIC00ODAsMTIgKzQ3NiwxMSBAQAogCSAgIHRpbWUuICBXaXRob3V0IHRoaXMsIGEgZnVsbC10aWNrIGVycm9yIGlzIHBvc3NpYmxlLiAgKi8KIAogI2lmZGVmIENPTkZJR19TTVAKLQlkZWx0YV9uc2VjID0gKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogKE5TRUNfUEVSX1NFQyAvIEhaKTsKKwlkZWx0YV9uc2VjID0gMDsKICNlbHNlCiAJZGVsdGFfbnNlYyA9IHJwY2MoKSAtIHN0YXRlLmxhc3RfdGltZTsKIAlkZWx0YV9uc2VjID0gKGRlbHRhX25zZWMgKiBzdGF0ZS5zY2FsZWRfdGlja3NfcGVyX2N5Y2xlIAotCQkgICAgICArIHN0YXRlLnBhcnRpYWxfdGljawotCQkgICAgICArICgoamlmZmllcyAtIHdhbGxfamlmZmllcykgPDwgRklYX1NISUZUKSkgKiAxNTYyNTsKKwkJICAgICAgKyBzdGF0ZS5wYXJ0aWFsX3RpY2spICogMTU2MjU7CiAJZGVsdGFfbnNlYyA9ICgoZGVsdGFfbnNlYyAvICgoMVVMIDw8IChGSVhfU0hJRlQtNi0xKSkgKiBIWikpICsgMSkgLyAyOwogCWRlbHRhX25zZWMgKj0gMTAwMDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9NYWtlZmlsZSBiL2FyY2gvYWxwaGEvbW0vTWFrZWZpbGUKaW5kZXggNmVkZDlhMC4uMDkzOTljNSAxMDA2NDQKLS0tIGEvYXJjaC9hbHBoYS9tbS9NYWtlZmlsZQorKysgYi9hcmNoL2FscGhhL21tL01ha2VmaWxlCkBAIC00LDYgKzQsNiBAQAogCiBFWFRSQV9DRkxBR1MgOj0gLVdlcnJvcgogCi1vYmoteQk6PSBpbml0Lm8gZmF1bHQubyBleHRhYmxlLm8gcmVtYXAubworb2JqLXkJOj0gaW5pdC5vIGZhdWx0Lm8gZXh0YWJsZS5vCiAKIG9iai0kKENPTkZJR19ESVNDT05USUdNRU0pICs9IG51bWEubwpkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9tbS9mYXVsdC5jIGIvYXJjaC9hbHBoYS9tbS9mYXVsdC5jCmluZGV4IDYyMmRhYmQuLjg4NzE1MjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEvbW0vZmF1bHQuYworKysgYi9hcmNoL2FscGhhL21tL2ZhdWx0LmMKQEAgLTE5Myw3ICsxOTMsNyBAQAogCS8qIFdlIHJhbiBvdXQgb2YgbWVtb3J5LCBvciBzb21lIG90aGVyIHRoaW5nIGhhcHBlbmVkIHRvIHVzIHRoYXQKIAkgICBtYWRlIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4gICovCiAgb3V0X29mX21lbW9yeToKLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvYWxwaGEvbW0vcmVtYXAuYyBiL2FyY2gvYWxwaGEvbW0vcmVtYXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTc4MzU2Yy4uMDAwMDAwMAotLS0gYS9hcmNoL2FscGhhL21tL3JlbWFwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw4NiArMCwwIEBACi0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLQotc3RhdGljIGlubGluZSB2b2lkIAotcmVtYXBfYXJlYV9wdGUocHRlX3QgKiBwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLCAKLQkgICAgICAgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlhZGRyZXNzICY9IH5QTURfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUE1EX1NJWkUpCi0JCWVuZCA9IFBNRF9TSVpFOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7Ci0JcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7Ci0JZG8gewotCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7Ci0JCQlwcmludGsoInJlbWFwX2FyZWFfcHRlOiBwYWdlIGFscmVhZHkgZXhpc3RzXG4iKTsKLQkJCUJVRygpOwotCQl9Ci0JCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgCi0JCQkJICAgICBfX3BncHJvdChfUEFHRV9WQUxJRCB8IF9QQUdFX0FTTSB8IAotCQkJCSAgICAgICAgICAgICAgX1BBR0VfS1JFIHwgX1BBR0VfS1dFIHwgZmxhZ3MpKSk7Ci0JCWFkZHJlc3MgKz0gUEFHRV9TSVpFOwotCQlwZm4rKzsKLQkJcHRlKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCAKLXJlbWFwX2FyZWFfcG1kKHBtZF90ICogcG1kLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgCi0JCQkJICAgICBhZGRyZXNzICsgcGh5c19hZGRyLCBmbGFncyk7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwotCQlwbWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLWludAotX19hbHBoYV9yZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCi0JCQkgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXBnZF90ICogZGlyOwotCWludCBlcnJvciA9IDA7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQotCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCWRpciA9IHBnZF9vZmZzZXQoJmluaXRfbW0sIGFkZHJlc3MpOwotCWZsdXNoX2NhY2hlX2FsbCgpOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7Ci0JZG8gewotCQlwbWRfdCAqcG1kOwotCQlwbWQgPSBwbWRfYWxsb2MoJmluaXRfbW0sIGRpciwgYWRkcmVzcyk7Ci0JCWVycm9yID0gLUVOT01FTTsKLQkJaWYgKCFwbWQpCi0JCQlicmVhazsKLQkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywKLQkJCSAgICAgICAgICAgcGh5c19hZGRyICsgYWRkcmVzcywgZmxhZ3MpKQotCQkJYnJlYWs7Ci0JCWVycm9yID0gMDsKLQkJYWRkcmVzcyA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwotCQlkaXIrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JcmV0dXJuIGVycm9yOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9LY29uZmlnIGIvYXJjaC9hcm0vS2NvbmZpZwppbmRleCBmODFhNjIzLi5mOTM2MmVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9LY29uZmlnCisrKyBiL2FyY2gvYXJtL0tjb25maWcKQEAgLTE3LDYgKzE3LDEwIEBACiAJICBFdXJvcGUuICBUaGVyZSBpcyBhbiBBUk0gTGludXggcHJvamVjdCB3aXRoIGEgd2ViIHBhZ2UgYXQKIAkgIDxodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvPi4KIAorY29uZmlnIEdFTkVSSUNfVElNRQorCWJvb2wKKwlkZWZhdWx0IG4KKwogY29uZmlnIE1NVQogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTUxLDYgKzU1LDEwIEBACiAJYm9vbAogCWRlZmF1bHQgeQogCitjb25maWcgVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVAorCWJvb2wKKwlkZWZhdWx0IHkKKwogY29uZmlnIEhBUkRJUlFTX1NXX1JFU0VORAogCWJvb2wKIAlkZWZhdWx0IHkKQEAgLTkxLDcgKzk5LDcgQEAKIAogY29uZmlnIFZFQ1RPUlNfQkFTRQogCWhleAotCWRlZmF1bHQgMHhmZmZmMDAwMCBpZiBNTVUKKwlkZWZhdWx0IDB4ZmZmZjAwMDAgaWYgTU1VIHx8IENQVV9ISUdIX1ZFQ1RPUgogCWRlZmF1bHQgRFJBTV9CQVNFIGlmIFJFTUFQX1ZFQ1RPUlNfVE9fUkFNCiAJZGVmYXVsdCAweDAwMDAwMDAwCiAJaGVscApAQCAtMTk4LDE2ICsyMDYsMjcgQEAKIAloZWxwCiAJICBTdXBwb3J0IGZvciBNb3Rvcm9sYSdzIGkuTVggZmFtaWx5IG9mIHByb2Nlc3NvcnMgKE1YMSwgTVhMKS4KIAotY29uZmlnIEFSQ0hfSU9QM1hYCi0JYm9vbCAiSU9QM3h4LWJhc2VkIgorY29uZmlnIEFSQ0hfSU9QMzJYCisJYm9vbCAiSU9QMzJ4LWJhc2VkIgogCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IFBMQVRfSU9QCiAJc2VsZWN0IFBDSQogCWhlbHAKLQkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QM1hYIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorCSAgU3VwcG9ydCBmb3IgSW50ZWwncyA4MDIxOSBhbmQgSU9QMzJYIChYU2NhbGUpIGZhbWlseSBvZgorCSAgcHJvY2Vzc29ycy4KKworY29uZmlnIEFSQ0hfSU9QMzNYCisJYm9vbCAiSU9QMzN4LWJhc2VkIgorCWRlcGVuZHMgb24gTU1VCisJc2VsZWN0IFBMQVRfSU9QCisJc2VsZWN0IFBDSQorCWhlbHAKKwkgIFN1cHBvcnQgZm9yIEludGVsJ3MgSU9QMzNYIChYU2NhbGUpIGZhbWlseSBvZiBwcm9jZXNzb3JzLgogCiBjb25maWcgQVJDSF9JWFA0WFgKIAlib29sICJJWFA0eHgtYmFzZWQiCiAJZGVwZW5kcyBvbiBNTVUKKwlzZWxlY3QgR0VORVJJQ19USU1FCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSW50ZWwncyBJWFA0WFggKFhTY2FsZSkgZmFtaWx5IG9mIHByb2Nlc3NvcnMuCiAKQEAgLTMwOCw3ICszMjcsOSBAQAogCiBzb3VyY2UgImFyY2gvYXJtL21hY2gtaW50ZWdyYXRvci9LY29uZmlnIgogCi1zb3VyY2UgImFyY2gvYXJtL21hY2gtaW9wM3h4L0tjb25maWciCitzb3VyY2UgImFyY2gvYXJtL21hY2gtaW9wMzJ4L0tjb25maWciCisKK3NvdXJjZSAiYXJjaC9hcm0vbWFjaC1pb3AzM3gvS2NvbmZpZyIKIAogc291cmNlICJhcmNoL2FybS9tYWNoLWl4cDR4eC9LY29uZmlnIgogCkBAIC0zNDgsNiArMzY5LDkgQEAKIGNvbmZpZyBBUkNIX0FDT1JOCiAJYm9vbAogCitjb25maWcgUExBVF9JT1AKKwlib29sCisKIHNvdXJjZSBhcmNoL2FybS9tbS9LY29uZmlnCiAKICMgIGJvb2wgJ1VzZSBYU2NhbGUgUE1VIGFzIHRpbWVyIHNvdXJjZScgQ09ORklHX1hTQ0FMRV9QTVVfVElNRVIKQEAgLTYwMiw2ICs2MjYsNyBAQAogCiBjb25maWcgQUxJR05NRU5UX1RSQVAKIAlib29sCisJZGVwZW5kcyBvbiBDUFVfQ1AxNV9NTVUKIAlkZWZhdWx0IHkgaWYgIUFSQ0hfRUJTQTExMAogCWhlbHAKIAkgIEFSTSBwcm9jZXNzb3JzIGNhbiBub3QgZmV0Y2gvc3RvcmUgaW5mb3JtYXRpb24gd2hpY2ggaXMgbm90CkBAIC02MzMsMTEgKzY1OCwxMiBAQAogCWhleCAiQ29tcHJlc3NlZCBST00gYm9vdCBsb2FkZXIgQlNTIGFkZHJlc3MiCiAJZGVmYXVsdCAiMCIKIAloZWxwCi0JICBUaGUgYmFzZSBhZGRyZXNzIG9mIDY0S2lCIG9mIHJlYWQvd3JpdGUgbWVtb3J5IGluIHRoZSB0YXJnZXQKLQkgIGZvciB0aGUgUk9NLWFibGUgekltYWdlLCB3aGljaCBtdXN0IGJlIGF2YWlsYWJsZSB3aGlsZSB0aGUKLQkgIGRlY29tcHJlc3NvciBpcyBydW5uaW5nLiAgUGxhdGZvcm1zIHdoaWNoIG5vcm1hbGx5IG1ha2UgdXNlIG9mCi0JICBST00tYWJsZSB6SW1hZ2UgZm9ybWF0cyBub3JtYWxseSBzZXQgdGhpcyB0byBhIHN1aXRhYmxlCi0JICB2YWx1ZSBpbiB0aGVpciBkZWZjb25maWcgZmlsZS4KKwkgIFRoZSBiYXNlIGFkZHJlc3Mgb2YgYW4gYXJlYSBvZiByZWFkL3dyaXRlIG1lbW9yeSBpbiB0aGUgdGFyZ2V0CisJICBmb3IgdGhlIFJPTS1hYmxlIHpJbWFnZSB3aGljaCBtdXN0IGJlIGF2YWlsYWJsZSB3aGlsZSB0aGUKKwkgIGRlY29tcHJlc3NvciBpcyBydW5uaW5nLiBJdCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBob2xkIHRoZQorCSAgZW50aXJlIGRlY29tcHJlc3NlZCBrZXJuZWwgcGx1cyBhbiBhZGRpdGlvbmFsIDEyOCBLaUIuCisJICBQbGF0Zm9ybXMgd2hpY2ggbm9ybWFsbHkgbWFrZSB1c2Ugb2YgUk9NLWFibGUgekltYWdlIGZvcm1hdHMKKwkgIG5vcm1hbGx5IHNldCB0aGlzIHRvIGEgc3VpdGFibGUgdmFsdWUgaW4gdGhlaXIgZGVmY29uZmlnIGZpbGUuCiAKIAkgIElmIFpCT09UX1JPTSBpcyBub3QgZW5hYmxlZCwgdGhpcyBoYXMgbm8gZWZmZWN0LgogCkBAIC04MzIsNyArODU4LDcgQEAKIAogc291cmNlICJkcml2ZXJzL2Nvbm5lY3Rvci9LY29uZmlnIgogCi1pZiBBTElHTk1FTlRfVFJBUAoraWYgQUxJR05NRU5UX1RSQVAgfHwgIUNQVV9DUDE1X01NVQogc291cmNlICJkcml2ZXJzL210ZC9LY29uZmlnIgogZW5kaWYKIApAQCAtODQ0LDcgKzg3MCw3IEBACiAKIHNvdXJjZSAiZHJpdmVycy9hY29ybi9ibG9jay9LY29uZmlnIgogCi1pZiBQQ01DSUEgfHwgQVJDSF9DTFBTNzUwMCB8fCBBUkNIX0lPUDNYWCB8fCBBUkNIX0lYUDRYWCBcCitpZiBQQ01DSUEgfHwgQVJDSF9DTFBTNzUwMCB8fCBBUkNIX0lPUDMyWCB8fCBBUkNIX0lPUDMzWCB8fCBBUkNIX0lYUDRYWCBcCiAJfHwgQVJDSF9MNzIwMCB8fCBBUkNIX0xIN0E0MFggfHwgQVJDSF9QWEEgfHwgQVJDSF9SUEMgXAogCXx8IEFSQ0hfUzNDMjQxMCB8fCBBUkNIX1NBMTEwMCB8fCBBUkNIX1NIQVJLIHx8IEZPT1RCUklER0UgXAogCXx8IEFSQ0hfSVhQMjNYWApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vS2NvbmZpZy1ub21tdSBiL2FyY2gvYXJtL0tjb25maWctbm9tbXUKaW5kZXggZTE1NzRiZS4uZjA4NzM3NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vS2NvbmZpZy1ub21tdQorKysgYi9hcmNoL2FybS9LY29uZmlnLW5vbW11CkBAIC0yNSw2ICsyNSwxNCBAQAogCWhleCAnRkxBU0ggU2l6ZScgaWYgU0VUX01FTV9QQVJBTQogCWRlZmF1bHQgMHgwMDQwMDAwMAogCitjb25maWcgUFJPQ0VTU09SX0lECisJaGV4CisJZGVmYXVsdCAweDAwMDA3NzAwCisJZGVwZW5kcyBvbiAhQ1BVX0NQMTUKKwloZWxwCisJICBJZiBwcm9jZXNzb3IgaGFzIG5vIENQMTUgcmVnaXN0ZXIsIHRoaXMgcHJvY2Vzc29yIElEIGlzCisJICB1c2VkIGluc3RlYWQgb2YgdGhlIGF1dG8tcHJvYmluZyB3aGljaCB1dGlsaXplcyB0aGUgcmVnaXN0ZXIuCisKIGNvbmZpZyBSRU1BUF9WRUNUT1JTX1RPX1JBTQogCWJvb2wgJ0luc3RhbGwgdmVjdG9ycyB0byB0aGUgYmVnaW5pbmcgb2YgUkFNJyBpZiBEUkFNX0JBU0UKIAlkZXBlbmRzIG9uIERSQU1fQkFTRQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vTWFrZWZpbGUgYi9hcmNoL2FybS9NYWtlZmlsZQppbmRleCA5Mjg3M2NkLi4yYTBiMmM4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9NYWtlZmlsZQorKysgYi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNTUsNyArNTUsMTIgQEAKICMgVGhpcyBzZWxlY3RzIGhvdyB3ZSBvcHRpbWlzZSBmb3IgdGhlIHByb2Nlc3Nvci4KIHR1bmUtJChDT05GSUdfQ1BVX0FSTTYxMCkJOj0tbXR1bmU9YXJtNjEwCiB0dW5lLSQoQ09ORklHX0NQVV9BUk03MTApCTo9LW10dW5lPWFybTcxMAordHVuZS0kKENPTkZJR19DUFVfQVJNN1RETUkpCTo9LW10dW5lPWFybTd0ZG1pCiB0dW5lLSQoQ09ORklHX0NQVV9BUk03MjBUKQk6PS1tdHVuZT1hcm03dGRtaQordHVuZS0kKENPTkZJR19DUFVfQVJNNzQwVCkJOj0tbXR1bmU9YXJtN3RkbWkKK3R1bmUtJChDT05GSUdfQ1BVX0FSTTlURE1JKQk6PS1tdHVuZT1hcm05dGRtaQordHVuZS0kKENPTkZJR19DUFVfQVJNOTQwVCkJOj0tbXR1bmU9YXJtOXRkbWkKK3R1bmUtJChDT05GSUdfQ1BVX0FSTTk0NlQpCTo9JChjYWxsIGNjLW9wdGlvbiwtbXR1bmU9YXJtOWUsLW10dW5lPWFybTl0ZG1pKQogdHVuZS0kKENPTkZJR19DUFVfQVJNOTIwVCkJOj0tbXR1bmU9YXJtOXRkbWkKIHR1bmUtJChDT05GSUdfQ1BVX0FSTTkyMlQpCTo9LW10dW5lPWFybTl0ZG1pCiB0dW5lLSQoQ09ORklHX0NQVV9BUk05MjVUKQk6PS1tdHVuZT1hcm05dGRtaQpAQCAtMTAxLDcgKzEwNiw4IEBACiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lOVEVHUkFUT1IpIDo9IGludGVncmF0b3IKICB0ZXh0b2ZzLSQoQ09ORklHX0FSQ0hfQ0xQUzcxMVgpICAgOj0gMHgwMDAyODAwMAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9DTFBTNzExWCkgICA6PSBjbHBzNzExeAotIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzWFgpCSAgIDo9IGlvcDN4eAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzMlgpCSAgIDo9IGlvcDMyeAorIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JT1AzM1gpCSAgIDo9IGlvcDMzeAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFA0WFgpCSAgIDo9IGl4cDR4eAogIG1hY2hpbmUtJChDT05GSUdfQVJDSF9JWFAyMDAwKSAgICA6PSBpeHAyMDAwCiAgbWFjaGluZS0kKENPTkZJR19BUkNIX0lYUDIzWFgpICAgIDo9IGl4cDIzeHgKQEAgLTE1Nyw2ICsxNjMsNyBAQAogY29yZS0kKENPTkZJR19WRlApCQkrPSBhcmNoL2FybS92ZnAvCiAKICMgSWYgd2UgaGF2ZSBhIGNvbW1vbiBwbGF0Zm9ybSBkaXJlY3RvcnksIHRoZW4gaW5jbHVkZSBpdCBpbiB0aGUgYnVpbGQuCitjb3JlLSQoQ09ORklHX1BMQVRfSU9QKQkJKz0gYXJjaC9hcm0vcGxhdC1pb3AvCiBjb3JlLSQoQ09ORklHX0FSQ0hfT01BUCkJKz0gYXJjaC9hcm0vcGxhdC1vbWFwLwogCiBkcml2ZXJzLSQoQ09ORklHX09QUk9GSUxFKSAgICAgICs9IGFyY2gvYXJtL29wcm9maWxlLwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCmluZGV4IDJhZGMxNTI3Li5hZGRkYzcxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL01ha2VmaWxlCkBAIC01MSw3ICs1MSwxMSBAQAogZW5kaWYKIAogaWZlcSAoJChDT05GSUdfQ1BVX0JJR19FTkRJQU4pLHkpCitpZmVxICgkKENPTkZJR19DUFVfQ1AxNSkseSkKIE9CSlMJCSs9IGJpZy1lbmRpYW4ubworZWxzZQorIyBUaGUgZW5kaWFuIHNob3VsZCBiZSBzZXQgYnkgaC93IGRlc2lnbi4KK2VuZGlmCiBlbmRpZgogCiAjCmRpZmYgLS1naXQgYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL2hlYWQuUwppbmRleCAxNGE5ZmY5Li5lNWFiNTFiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9ib290L2NvbXByZXNzZWQvaGVhZC5TCisrKyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9oZWFkLlMKQEAgLTIwLDExICsyMCwyMSBAQAogI2lmZGVmIERFQlVHCiAKICNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19JQ0VEQ0MpCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y2CisJCS5tYWNybwlsb2Fkc3AsIHJiCisJCS5lbmRtCisJCS5tYWNybwl3cml0ZWIsIGNoLCByYgorCQltY3IJcDE0LCAwLCBcY2gsIGMwLCBjNSwgMAorCQkuZW5kbQorI2Vsc2UKIAkJLm1hY3JvCWxvYWRzcCwgcmIKIAkJLmVuZG0KIAkJLm1hY3JvCXdyaXRlYiwgY2gsIHJiCiAJCW1jcglwMTQsIDAsIFxjaCwgYzAsIGMxLCAwCiAJCS5lbmRtCisjZW5kaWYKKwogI2Vsc2UKIAogI2luY2x1ZGUgPGFzbS9hcmNoL2RlYnVnLW1hY3JvLlM+CkBAIC00MiwxMiArNTIsNiBAQAogCQlhZGQJXHJiLCBccmIsICMweDAwMDEwMDAwCUAgU2VyMQogI2VuZGlmCiAJCS5lbmRtCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKLQkJLm1hY3JvIGxvYWRzcCwgcmIKLSAgICAgICAgICAgICAgICBtb3YgICAJXHJiLCAjMHhmZjAwMDAwMAotICAgICAgICAgICAgICAgIG9yciAgICAgXHJiLCBccmIsICMweDAwZmYwMDAwCi0gICAgICAgICAgICAgICAgb3JyICAgICBccmIsIFxyYiwgIzB4MDAwMGY3MDAgICBAIGxvY2F0aW9uIG9mIHRoZSBVQVJUCi0JCS5lbmRtCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0MTApCiAJCS5tYWNybyBsb2Fkc3AsIHJiCiAJCW1vdglccmIsICMweDUwMDAwMDAwCkBAIC03OCw5ICs4MiwxMSBAQAogCQlrcGhleAlyNiwgOAkJLyogcHJvY2Vzc29yIGlkICovCiAJCWtwdXRjCSMnOicKIAkJa3BoZXgJcjcsIDgJCS8qIGFyY2hpdGVjdHVyZSBpZCAqLworI2lmZGVmIENPTkZJR19DUFVfQ1AxNQogCQlrcHV0YwkjJzonCiAJCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAKIAkJa3BoZXgJcjAsIDgJCS8qIGNvbnRyb2wgcmVnICovCisjZW5kaWYKIAkJa3B1dGMJIydcbicKIAkJa3BoZXgJcjUsIDgJCS8qIGRlY29tcHJlc3NlZCBrZXJuZWwgc3RhcnQgKi8KIAkJa3B1dGMJIyctJwpAQCAtNTAzLDcgKzUwOSwxMSBAQAogICovCiAKIGNhbGxfY2FjaGVfZm46CWFkcglyMTIsIHByb2NfdHlwZXMKKyNpZmRlZiBDT05GSUdfQ1BVX0NQMTUKIAkJbXJjCXAxNSwgMCwgcjYsIGMwLCBjMAlAIGdldCBwcm9jZXNzb3IgSUQKKyNlbHNlCisJCWxkcglyNiwgPUNPTkZJR19QUk9DRVNTT1JfSUQKKyNlbmRpZgogMToJCWxkcglyMSwgW3IxMiwgIzBdCQlAIGdldCB2YWx1ZQogCQlsZHIJcjIsIFtyMTIsICM0XQkJQCBnZXQgbWFzawogCQllb3IJcjEsIHIxLCByNgkJQCAocmVhbCBeIG1hdGNoKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYyBiL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKaW5kZXggYWNlM2ZiNTguLjI4Mzg5MWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2Jvb3QvY29tcHJlc3NlZC9taXNjLmMKKysrIGIvYXJjaC9hcm0vYm9vdC9jb21wcmVzc2VkL21pc2MuYwpAQCAtMzAsNiArMzAsMjUgQEAKICNpbmNsdWRlIDxhc20vYXJjaC91bmNvbXByZXNzLmg+CiAKICNpZmRlZiBDT05GSUdfREVCVUdfSUNFRENDCisKKyNpZmRlZiBDT05GSUdfQ1BVX1Y2CisKK3N0YXRpYyB2b2lkIGljZWRjY19wdXRjKGludCBjaCkKK3sKKwlpbnQgc3RhdHVzLCBpID0gMHg0MDAwMDAwOworCisJZG8geworCQlpZiAoLS1pIDwgMCkKKwkJCXJldHVybjsKKworCQlhc20gdm9sYXRpbGUgKCJtcmMgcDE0LCAwLCAlMCwgYzAsIGMxLCAwIiA6ICI9ciIgKHN0YXR1cykpOworCX0gd2hpbGUgKHN0YXR1cyAmICgxIDw8IDI5KSk7CisKKwlhc20oIm1jciBwMTQsIDAsICUwLCBjMCwgYzUsIDAiIDogOiAiciIgKGNoKSk7Cit9CisKKyNlbHNlCisKIHN0YXRpYyB2b2lkIGljZWRjY19wdXRjKGludCBjaCkKIHsKIAlpbnQgc3RhdHVzLCBpID0gMHg0MDAwMDAwOwpAQCAtNDQsNiArNjMsOCBAQAogCWFzbSgibWNyIHAxNCwgMCwgJTAsIGMxLCBjMCwgMCIgOiA6ICJyIiAoY2gpKTsKIH0KIAorI2VuZGlmCisKICNkZWZpbmUgcHV0YyhjaCkJaWNlZGNjX3B1dGMoY2gpCiAjZGVmaW5lIGZsdXNoKCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vaWNzdDMwNy5jIGIvYXJjaC9hcm0vY29tbW9uL2ljc3QzMDcuYwppbmRleCBiYWZlOGIxLi42ZDA5NGMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vaWNzdDMwNy5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0MzA3LmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGlkeDJzKSk7CiAKLQlpZiAoaSA+IEFSUkFZX1NJWkUoaWR4MnMpKQorCWlmIChpID49IEFSUkFZX1NJWkUoaWR4MnMpKQogCQlyZXR1cm4gdmNvOwogCiAJdmNvLnMgPSBpZHgyc1tpXTsKQEAgLTExOSw3ICsxMTksNyBAQAogCQkJYnJlYWs7CiAJfSB3aGlsZSAoaSA8IEFSUkFZX1NJWkUoaWR4MnMpKTsKIAotCWlmIChpID4gQVJSQVlfU0laRShpZHgycykpCisJaWYgKGkgPj0gQVJSQVlfU0laRShpZHgycykpCiAJCXJldHVybiB2Y287CiAKIAl2Y28ucyA9IGlkeDJzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29tbW9uL2ljc3Q1MjUuYyBiL2FyY2gvYXJtL2NvbW1vbi9pY3N0NTI1LmMKaW5kZXggOTQzZWY4OC4uM2QzNzdjNSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29tbW9uL2ljc3Q1MjUuYworKysgYi9hcmNoL2FybS9jb21tb24vaWNzdDUyNS5jCkBAIC01NSw3ICs1NSw3IEBACiAJCQlicmVhazsKIAl9IHdoaWxlIChpIDwgQVJSQVlfU0laRShpZHgycykpOwogCi0JaWYgKGkgPiBBUlJBWV9TSVpFKGlkeDJzKSkKKwlpZiAoaSA+PSBBUlJBWV9TSVpFKGlkeDJzKSkKIAkJcmV0dXJuIHZjbzsKIAogCXZjby5zID0gaWR4MnNbaV07CkBAIC0xMTgsNyArMTE4LDcgQEAKIAkJCWJyZWFrOwogCX0gd2hpbGUgKGkgPCBBUlJBWV9TSVpFKGlkeDJzKSk7CiAKLQlpZiAoaSA+IEFSUkFZX1NJWkUoaWR4MnMpKQorCWlmIChpID49IEFSUkFZX1NJWkUoaWR4MnMpKQogCQlyZXR1cm4gdmNvOwogCiAJdmNvLnMgPSBpZHgyc1tpXTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYyBiL2FyY2gvYXJtL2NvbW1vbi9sb2NvbW8uYwppbmRleCA0ZTBkY2FlLi4xODFlZjFlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vbG9jb21vLmMKKysrIGIvYXJjaC9hcm0vY29tbW9uL2xvY29tby5jCkBAIC0xMjEsNiArMTIxLDEzIEBACiAJCS5vZmZzZXQJCT0gMCwKIAkJLmxlbmd0aAkJPSAwLAogCX0sCisJeworCQkuZGV2aWQJCT0gTE9DT01PX0RFVklEX1NQSSwKKwkJLmlycQkJPSB7fSwKKwkJLm5hbWUJCT0gImxvY29tby1zcGkiLAorCQkub2Zmc2V0CQk9IExPQ09NT19TUEksCisJCS5sZW5ndGgJCT0gMHgzMCwKKwl9LAogfTsKIAogCkBAIC0zNzQsNyArMzgxLDcgQEAKIAlzdHJ1Y3QgaXJxZGVzYyAqZDsKIAl2b2lkIF9faW9tZW0gKm1hcGJhc2UgPSBnZXRfaXJxX2NoaXBkYXRhKGlycSk7CiAKLQlyZXEgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJUikgJiAweDAwMEY7CisJcmVxID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSUlSKSAmIDB4MDAwRjsKIAlpZiAocmVxKSB7CiAJCWlycSA9IExPQ09NT19JUlFfU1BJX1NUQVJUOwogCQlkID0gaXJxX2Rlc2MgKyBpcnE7CkBAIC0zOTEsMzUgKzM5OCwzNSBAQAogewogCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJV0UpOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJV0UpOwogCXIgfD0gKDB4MDAwMSA8PCAoaXJxIC0gTE9DT01PX0lSUV9TUElfU1RBUlQpKTsKLQlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJV0UpOworCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJV0UpOwogCi0JciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSUlTKTsKKwlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSUlTKTsKIAlyICY9IH4oMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUElJUyk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSSArIExPQ09NT19TUElJUyk7CiAKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJV0UpOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJV0UpOwogCXIgJj0gfigweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfU1BJX1NUQVJUKSk7Ci0JbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSVdFKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSVdFKTsKIH0KIAogc3RhdGljIHZvaWQgbG9jb21vX3NwaV9tYXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXZvaWQgX19pb21lbSAqbWFwYmFzZSA9IGdldF9pcnFfY2hpcGRhdGEoaXJxKTsKIAl1bnNpZ25lZCBpbnQgcjsKLQlyID0gbG9jb21vX3JlYWRsKG1hcGJhc2UgKyBMT0NPTU9fU1BJSUUpOworCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUEkgKyBMT0NPTU9fU1BJSUUpOwogCXIgJj0gfigweDAwMDEgPDwgKGlycSAtIExPQ09NT19JUlFfU1BJX1NUQVJUKSk7Ci0JbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSUlFKTsKKwlsb2NvbW9fd3JpdGVsKHIsIG1hcGJhc2UgKyBMT0NPTU9fU1BJICsgTE9DT01PX1NQSUlFKTsKIH0KIAogc3RhdGljIHZvaWQgbG9jb21vX3NwaV91bm1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdm9pZCBfX2lvbWVtICptYXBiYXNlID0gZ2V0X2lycV9jaGlwZGF0YShpcnEpOwogCXVuc2lnbmVkIGludCByOwotCXIgPSBsb2NvbW9fcmVhZGwobWFwYmFzZSArIExPQ09NT19TUElJRSk7CisJciA9IGxvY29tb19yZWFkbChtYXBiYXNlICsgTE9DT01PX1NQSSArIExPQ09NT19TUElJRSk7CiAJciB8PSAoMHgwMDAxIDw8IChpcnEgLSBMT0NPTU9fSVJRX1NQSV9TVEFSVCkpOwotCWxvY29tb193cml0ZWwociwgbWFwYmFzZSArIExPQ09NT19TUElJRSk7CisJbG9jb21vX3dyaXRlbChyLCBtYXBiYXNlICsgTE9DT01PX1NQSSArIExPQ09NT19TUElJRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbG9jb21vX3NwaV9jaGlwID0gewpAQCAtODE0LDEyICs4MjEsMTUgQEAKIAlyZXR1cm4gKHN0cnVjdCBsb2NvbW8gKilkZXZfZ2V0X2RydmRhdGEobGRldi0+ZGV2LnBhcmVudCk7CiB9CiAKLXZvaWQgbG9jb21vX2dwaW9fc2V0X2RpcihzdHJ1Y3QgbG9jb21vX2RldiAqbGRldiwgdW5zaWduZWQgaW50IGJpdHMsIHVuc2lnbmVkIGludCBkaXIpCit2b2lkIGxvY29tb19ncGlvX3NldF9kaXIoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IGRpcikKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGxvY29tb19jaGlwX2RyaXZlcihsZGV2KTsKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHI7CiAKKwlpZiAoIWxjaGlwKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXIgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fR1BEKTsKQEAgLTgzNiwxMiArODQ2LDE1IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIH0KIAotdW5zaWduZWQgaW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzKQoraW50IGxvY29tb19ncGlvX3JlYWRfbGV2ZWwoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGxvY29tb19jaGlwX2RyaXZlcihsZGV2KTsKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHJldDsKIAorCWlmICghbGNoaXApCisJCXJldHVybiAtRU5PREVWOworCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CiAJcmV0ID0gbG9jb21vX3JlYWRsKGxjaGlwLT5iYXNlICsgTE9DT01PX0dQTCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKQEAgLTg1MCwxMiArODYzLDE1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotdW5zaWduZWQgaW50IGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgYml0cykKK2ludCBsb2NvbW9fZ3Bpb19yZWFkX291dHB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzKQogewotCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gbG9jb21vX2NoaXBfZHJpdmVyKGxkZXYpOworCXN0cnVjdCBsb2NvbW8gKmxjaGlwID0gZGV2X2dldF9kcnZkYXRhKGRldik7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgcmV0OwogCisJaWYgKCFsY2hpcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIAlyZXQgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fR1BPKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsY2hpcC0+bG9jaywgZmxhZ3MpOwpAQCAtODY0LDEyICs4ODAsMTUgQEAKIAlyZXR1cm4gcmV0OwogfQogCi12b2lkIGxvY29tb19ncGlvX3dyaXRlKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHNldCkKK3ZvaWQgbG9jb21vX2dwaW9fd3JpdGUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgYml0cywgdW5zaWduZWQgaW50IHNldCkKIHsKLQlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGxvY29tb19jaGlwX2RyaXZlcihsZGV2KTsKKwlzdHJ1Y3QgbG9jb21vICpsY2hpcCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IHI7CiAKKwlpZiAoIWxjaGlwKQorCQlyZXR1cm47CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmbGNoaXAtPmxvY2ssIGZsYWdzKTsKIAogCXIgPSBsb2NvbW9fcmVhZGwobGNoaXAtPmJhc2UgKyBMT0NPTU9fR1BPKTsKQEAgLTEwNTgsOSArMTA3Nyw5IEBACiAJc3RydWN0IGxvY29tbyAqbGNoaXAgPSBsb2NvbW9fY2hpcF9kcml2ZXIoZGV2KTsKIAogCWlmICh2cikKLQkJbG9jb21vX2dwaW9fd3JpdGUoZGV2LCBMT0NPTU9fR1BJT19GTF9WUiwgMSk7CisJCWxvY29tb19ncGlvX3dyaXRlKGRldi0+ZGV2LnBhcmVudCwgTE9DT01PX0dQSU9fRkxfVlIsIDEpOwogCWVsc2UKLQkJbG9jb21vX2dwaW9fd3JpdGUoZGV2LCBMT0NPTU9fR1BJT19GTF9WUiwgMCk7CisJCWxvY29tb19ncGlvX3dyaXRlKGRldi0+ZGV2LnBhcmVudCwgTE9DT01PX0dQSU9fRkxfVlIsIDApOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmxjaGlwLT5sb2NrLCBmbGFncyk7CiAJbG9jb21vX3dyaXRlbChicHdmLCBsY2hpcC0+YmFzZSArIExPQ09NT19GUk9OVExJR0hUICsgTE9DT01PX0FMUyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jIGIvYXJjaC9hcm0vY29tbW9uL3NoYXJwc2xfcG0uYwppbmRleCA1OWI1ZGRlLi5mNDEyZGVkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb21tb24vc2hhcnBzbF9wbS5jCisrKyBiL2FyY2gvYXJtL2NvbW1vbi9zaGFycHNsX3BtLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNkZWZpbmUgU0hBUlBTTF9DSEFSR0VfRklOSVNIX1RJTUUgICAgICAgICAgICAgKG1zZWNzX3RvX2ppZmZpZXMoMTAqNjAqMTAwMCkpIC8qIDEwIG1pbiAqLwogI2RlZmluZSBTSEFSUFNMX0JBVENIS19USU1FICAgICAgICAgICAgICAgICAgICAobXNlY3NfdG9famlmZmllcygxNSoxMDAwKSkgICAgLyogMTUgc2VjICovCiAjZGVmaW5lIFNIQVJQU0xfQkFUQ0hLX1RJTUVfU1VTUEVORCAgICAgICAgICAgICg2MCoxMCkgICAgICAgICAgICAgICAgICAgICAgICAvKiAxMCBtaW4gKi8KKwogI2RlZmluZSBTSEFSUFNMX1dBSVRfQ09fVElNRSAgICAgICAgICAgICAgICAgICAxNSAgLyogMTUgc2VjICovCiAjZGVmaW5lIFNIQVJQU0xfV0FJVF9ESVNDSEFSR0VfT04gICAgICAgICAgICAgIDEwMCAvKiAxMDAgbXNlYyAqLwogI2RlZmluZSBTSEFSUFNMX0NIRUNLX0JBVFRFUllfV0FJVF9USU1FX1RFTVAgICAxMCAgLyogMTAgbXNlYyAqLwpAQCAtNTc1LDYgKzU3Niw5IEBACiAJd2hpbGUgKGNvcmdpX2VudGVyX3N1c3BlbmQoYWxhcm1fdGltZSxhbGFybV9zdGF0dXMsc3RhdGUpKQogCQl7fQogCisJaWYgKHNoYXJwc2xfcG0ubWFjaGluZm8tPmVhcmx5cmVzdW1lKQorCQlzaGFycHNsX3BtLm1hY2hpbmZvLT5lYXJseXJlc3VtZSgpOworCiAJZGV2X2RiZyhzaGFycHNsX3BtLmRldiwgIlNoYXJwU0wgcmVzdW1pbmcuLi5cbiIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2VwOTN4eF9kZWZjb25maWcKaW5kZXggMjk0OGI0NS4uM2I0ODAyYSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9lcDkzeHhfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvZXA5M3h4X2RlZmNvbmZpZwpAQCAtMTI2LDYgKzEyNiw3IEBACiAjIEVQOTN4eCBQbGF0Zm9ybXMKICMKIENPTkZJR19NQUNIX0VEQjkzMDI9eQorQ09ORklHX01BQ0hfRURCOTMxMj15CiBDT05GSUdfTUFDSF9FREI5MzE1PXkKIENPTkZJR19NQUNIX0VEQjkzMTVBPXkKIENPTkZJR19NQUNIX0dFU0JDOTMxMj15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzMnhfZGVmY29uZmlnCnNpbWlsYXJpdHkgaW5kZXggNjYlCnJlbmFtZSBmcm9tIGFyY2gvYXJtL2NvbmZpZ3MvZXA4MDIxOV9kZWZjb25maWcKcmVuYW1lIHRvIGFyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZwppbmRleCAzYzczYjcwLi4wZDY3ZjY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL2VwODAyMTlfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvaW9wMzJ4X2RlZmNvbmZpZwpAQCAtMSw1MCArMSw2MyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjEyLXJjMS1iazIKLSMgU3VuIE1hciAyNyAyMjozNDoxMiAyMDA1CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmM3CisjIFR1ZSBTZXAgMTkgMDA6MzA6MTggMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CitDT05GSUdfSEFSRElSUVNfU1dfUkVTRU5EPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CiBDT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKIENPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfR0VORVJJQ19JT01BUD15CitDT05GSUdfVkVDVE9SU19CQVNFPTB4ZmZmZjAwMDAKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCiAKICMKICMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCiAjCiBDT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19DTEVBTl9DT01QSUxFPXkKIENPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKIAogIwogIyBHZW5lcmFsIHNldHVwCiAjCiBDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQogQ09ORklHX1NXQVA9eQogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKIENPTkZJR19TWVNDVEw9eQogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19VSUQxNj15CitDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAogQ09ORklHX0tBTExTWU1TPXkKK0NPTkZJR19LQUxMU1lNU19BTEw9eQogIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKIENPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX1JUX01VVEVYRVM9eQogQ09ORklHX0ZVVEVYPXkKIENPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKK0NPTkZJR19TTEFCPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CiAjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKIENPTkZJR19CQVNFX1NNQUxMPTAKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAogCiAjCiAjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CkBAIC01MiwyNCArNjUsNTIgQEAKIENPTkZJR19NT0RVTEVTPXkKIENPTkZJR19NT0RVTEVfVU5MT0FEPXkKICMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQogIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAogIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKIENPTkZJR19LTU9EPXkKIAogIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfQkxLX0RFVl9JT19UUkFDRSBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0NGUT15CisjIENPTkZJR19ERUZBVUxUX05PT1AgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0iY2ZxIgorCisjCiAjIFN5c3RlbSBUeXBlCiAjCisjIENPTkZJR19BUkNIX0FBRUMyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1JFQUxWSUVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfQVQ5MSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9FUDkzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JT1AzWFg9eQorIyBDT05GSUdfQVJDSF9ORVRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAorQ09ORklHX0FSQ0hfSU9QMzJYPXkKKyMgQ09ORklHX0FSQ0hfSU9QMzNYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lYUDIzWFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX1BOWDQwMDggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldApAQCAtNzcsMjggKzExOCwxOSBAQAogIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAogCiAjCi0jIElPUDN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCisjIElPUDMyeCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCiAjCiAKICMKLSMgSU9QM3h4IFBsYXRmb3JtIFR5cGVzCisjIElPUDMyeCBQbGF0Zm9ybSBUeXBlcwogIwotIyBDT05GSUdfQVJDSF9JUTgwMzIxIGlzIG5vdCBzZXQKK0NPTkZJR19NQUNIX0dMQU5UQU5LPXkKK0NPTkZJR19BUkNIX0lRODAzMjE9eQogQ09ORklHX0FSQ0hfSVEzMTI0ND15Ci0jIENPTkZJR19BUkNIX0lRODAzMzEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JUTgwMzMyIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0VQODAyMTk9eQotQ09ORklHX0FSQ0hfSU9QMzIxPXkKLSMgQ09ORklHX0FSQ0hfSU9QMzMxIGlzIG5vdCBzZXQKLQotIwotIyBJT1AzeHggQ2hpcHNldCBGZWF0dXJlcwotIworQ09ORklHX01BQ0hfTjIxMDA9eQorQ09ORklHX1BMQVRfSU9QPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTA5LDcgKzE0MSw2IEBACiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwpAQCAtMTIxLDggKzE1Miw3IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX05BTUVTPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTMzLDYgKzE2MywxOSBAQAogIyBLZXJuZWwgRmVhdHVyZXMKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTE0MCw3ICsxODMsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2Niw2ICsyMDksOTMgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNzcsNiArMzA3LDEzIEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTIwMCw2ICszMzcsNyBAQAogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTIyNSwxOCArMzYzLDE4IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGYwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDA4MDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4MAorQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAKK0NPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MQogIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKIAogIwogIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKQEAgLTI0NSw3ICszODMsNiBAQAogIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CiAKICMKQEAgLTI2MSw2ICszOTgsMTEgQEAKICMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKIAogIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKICMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CiAjCiAjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKQEAgLTI3Miw3ICs0MTQsNiBAQAogIwogIyBCbG9jayBkZXZpY2VzCiAjCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKQEAgLTI4NCwxNyArNDI1LDkgQEAKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAogCiAjCkBAIC0zMDUsNiArNDM4LDcgQEAKICMKICMgU0NTSSBkZXZpY2Ugc3VwcG9ydAogIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CiBDT05GSUdfU0NTST15CiBDT05GSUdfU0NTSV9QUk9DX0ZTPXkKIApAQCAtMzE2LDYgKzQ1MCw3IEBACiAjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CiBDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CiAKICMKICMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCkBAIC0zMzAsMTAgKzQ2NSwxMiBAQAogIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCiAjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAogIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldApAQCAtMzQ0LDI1ICs0ODEsMTkgQEAKICMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKQEAgLTM3Nyw4ICs1MDgsNyBAQAogQ09ORklHX01EX1JBSUQwPXkKIENPTkZJR19NRF9SQUlEMT15CiAjIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotQ09ORklHX01EX1JBSUQ1PXkKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01EX1JBSUQ0NTYgaXMgbm90IHNldAogIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKICMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0CiBDT05GSUdfQkxLX0RFVl9ETT15CkBAIC0zOTIsNiArNTIyLDkgQEAKICMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAogIwogIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAogCiAjCiAjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKQEAgLTQwNCw3MSArNTM3LDggQEAKICMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CiAKICMKLSMgTmV0d29ya2luZyBzdXBwb3J0CisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKICMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAogQ09ORklHX05FVERFVklDRVM9eQogIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAogIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CkBAIC00ODEsMTQgKzU1MSwyMSBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKICMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCiAjCiBDT05GSUdfTkVUX0VUSEVSTkVUPXkKIENPTkZJR19NSUk9eQogIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKICMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKICMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfRE05MDAwIGlzIG5vdCBzZXQKIAogIwogIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydApAQCAtNTI2LDE2ICs2MDMsMjMgQEAKICMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAotIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1I4MTY5X05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJQV9WRUxPQ0lUWSBpcyBub3Qgc2V0CiAjIENPTkZJR19USUdPTjMgaXMgbm90IHNldAorIyBDT05GSUdfQk5YMiBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCiAjCisjIENPTkZJR19DSEVMU0lPX1QxIGlzIG5vdCBzZXQKICMgQ09ORklHX0lYR0IgaXMgbm90IHNldAogIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19NWVJJMTBHRSBpcyBub3Qgc2V0CiAKICMKICMgVG9rZW4gUmluZyBkZXZpY2VzCkBAIC01NTgsNiArNjQyLDggQEAKICMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAogIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAogCiAjCiAjIElTRE4gc3Vic3lzdGVtCkBAIC01OTUsNyArNjgxLDYgQEAKICMKICMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKICMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15CiAKICMKICMgQ2hhcmFjdGVyIGRldmljZXMKQEAgLTYwMyw2ICs2ODgsNyBAQAogQ09ORklHX1ZUPXkKIENPTkZJR19WVF9DT05TT0xFPXkKIENPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1ZUX0hXX0NPTlNPTEVfQklORElORyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAogCiAjCkBAIC02MTAsNyArNjk2LDkgQEAKICMKIENPTkZJR19TRVJJQUxfODI1MD15CiBDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKIENPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CiAjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CiAKICMKQEAgLTYxOCw2ICs3MDYsNyBAQAogIwogQ09ORklHX1NFUklBTF9DT1JFPXkKIENPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAogQ09ORklHX1VOSVg5OF9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZUz15CiBDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKQEAgLTYzMSw4ICs3MjAsOCBAQAogIyBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX0hXX1JBTkRPTT15CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAogIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CkBAIC02NDcsNiArNzM2LDcgQEAKICMgVFBNIGRldmljZXMKICMKICMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorIyBDT05GSUdfVEVMQ0xPQ0sgaXMgbm90IHNldAogCiAjCiAjIEkyQyBzdXBwb3J0CkBAIC02NzEsMTQgKzc2MSwxMyBAQAogIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotQ09ORklHX0kyQ19JT1AzWFg9eQotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorQ09ORklHX0kyQ19JT1AzWFg9eQorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKQEAgLTY4OSwxNSArNzc4LDQ1IEBACiAjIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0CiAKICMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKKyMgTWlzY2VsbGFuZW91cyBJMkMgQ2hpcCBzdXBwb3J0CiAjCi0jIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BQklUVUdVUlUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldApAQCAtNzEyLDM2ICs4MzEsNDUgQEAKICMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogCiAjCiAjIE1pc2MgZGV2aWNlcwogIwogCiAjCisjIExFRCBkZXZpY2VzCisjCisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRyaXZlcnMKKyMKKworIworIyBMRUQgVHJpZ2dlcnMKKyMKKworIwogIyBNdWx0aW1lZGlhIGRldmljZXMKICMKICMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fVjRMMj15CiAKICMKICMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwpAQCAtNzUxLDYgKzg3OSw3IEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKICMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKIAogIwpAQCAtNzU4LDYgKzg4Nyw3IEBACiAjCiAjIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0CiBDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAogCiAjCiAjIFNvdW5kCkBAIC03NjksNyArODk5LDEyNSBAQAogIwogQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQogQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKKyMgQ09ORklHX1VTQl9ERVZJQ0VGUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTz15CitDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQ9eQorQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEPXkKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9VSENJX0hDRD15CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworIyBDT05GSUdfVVNCX0hJRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9YUEFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVElfUkVNT1RFMiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVVFUlNXQUxEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0lTVVNCVkdBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCiAKICMKICMgVVNCIEdhZGdldCBTdXBwb3J0CkBAIC03ODIsMTAgKzEwMzAsMTcgQEAKICMgQ09ORklHX01NQyBpcyBub3Qgc2V0CiAKICMKKyMgUmVhbCBUaW1lIENsb2NrCisjCitDT05GSUdfUlRDX0xJQj15CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorCisjCiAjIEZpbGUgc3lzdGVtcwogIwogQ09ORklHX0VYVDJfRlM9eQogIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CiBDT05GSUdfRVhUM19GUz15CiBDT05GSUdfRVhUM19GU19YQVRUUj15CiAjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CkBAIC03OTUsMjIgKzEwNTAsMjIgQEAKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04MzAsMTIgKzEwODUsMTAgQEAKICMKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAogQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAogCiAjCiAjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKQEAgLTg1MCw4ICsxMTAzLDkgQEAKICMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAogQ09ORklHX0pGRlMyX0ZTPXkKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCi0jIENPTkZJR19KRkZTMl9GU19OQU5EIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0ZTX05PUl9FQ0MgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CiBDT05GSUdfSkZGUzJfWkxJQj15CiBDT05GSUdfSkZGUzJfUlRJTUU9eQpAQCAtODY4LDE2ICsxMTIyLDE5IEBACiAjCiBDT05GSUdfTkZTX0ZTPXkKIENPTkZJR19ORlNfVjM9eQorIyBDT05GSUdfTkZTX1YzX0FDTCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAogIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKIENPTkZJR19ORlNEPXkKIENPTkZJR19ORlNEX1YzPXkKKyMgQ09ORklHX05GU0RfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAogQ09ORklHX1JPT1RfTkZTPXkKIENPTkZJR19MT0NLRD15CiBDT05GSUdfTE9DS0RfVjQ9eQogQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKIENPTkZJR19TVU5SUEM9eQogIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldApAQCAtODg2LDYgKzExNDMsNyBAQAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBQYXJ0aXRpb24gVHlwZXMKQEAgLTkwNSw2ICsxMTYzLDcgQEAKICMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBUk1BX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKIAogIwpAQCAtOTIxLDExICsxMTgwLDM0IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19ERVRFQ1RfU09GVExPQ0tVUD15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQorIyBDT05GSUdfREVCVUdfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19WTSBpcyBub3Qgc2V0CiBDT05GSUdfRlJBTUVfUE9JTlRFUj15CisjIENPTkZJR19VTldJTkRfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURfSU5MSU5JTkcgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfVVNFUj15CisjIENPTkZJR19ERUJVR19XQUlUUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19FUlJPUlMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0xMPXkKKyMgQ09ORklHX0RFQlVHX0lDRURDQyBpcyBub3Qgc2V0CiAKICMKICMgU2VjdXJpdHkgb3B0aW9ucwpAQCAtOTQ2LDcgKzEyMjgsOSBAQAogIyBMaWJyYXJ5IHJvdXRpbmVzCiAjCiAjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAogQ09ORklHX0NSQzMyPXkKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcgYi9hcmNoL2FybS9jb25maWdzL2lvcDMzeF9kZWZjb25maWcKc2ltaWxhcml0eSBpbmRleCA3NCUKcmVuYW1lIGZyb20gYXJjaC9hcm0vY29uZmlncy9pcTgwMzMxX2RlZmNvbmZpZwpyZW5hbWUgdG8gYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCmluZGV4IDQ2Yzc5ZTEuLjJhOGZjMTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMV9kZWZjb25maWcKKysrIGIvYXJjaC9hcm0vY29uZmlncy9pb3AzM3hfZGVmY29uZmlnCkBAIC0xLDUwICsxLDYzIEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDE1OjEzOjM3IDIwMDUKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzcKKyMgVHVlIFNlcCAxOSAwMDozMDo0MiAyMDA2CiAjCiBDT05GSUdfQVJNPXkKIENPTkZJR19NTVU9eQotQ09ORklHX1VJRDE2PXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKK0NPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKICMKIENPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQogQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgogCiAjCiAjIEdlbmVyYWwgc2V0dXAKICMKIENPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CiBDT05GSUdfU1dBUD15CiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiAjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CiBDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0FMTD15CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfRUxGX0NPUkU9eQogQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfUlRfTVVURVhFUz15CiBDT05GSUdfRlVURVg9eQogQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CiBDT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CiAKICMKICMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKQEAgLTUyLDI0ICs2NSw1MiBAQAogQ09ORklHX01PRFVMRVM9eQogQ09ORklHX01PRFVMRV9VTkxPQUQ9eQogIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CiAjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CiAjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAogQ09ORklHX0tNT0Q9eQogCiAjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisKKyMKICMgU3lzdGVtIFR5cGUKICMKKyMgQ09ORklHX0FSQ0hfQUFFQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUkVBTFZJRVcgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0VQOTNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lPUDNYWD15CisjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9JT1AzM1g9eQogIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfSVhQMjNYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hfUE5YNDAwOCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0CkBAIC03NywyOCArMTE4LDE3IEBACiAjIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAKICMKLSMgSU9QM3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKKyMgSU9QMzN4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKICMKIAogIwotIyBJT1AzeHggUGxhdGZvcm0gVHlwZXMKKyMgSU9QMzN4IFBsYXRmb3JtIFR5cGVzCiAjCi0jIENPTkZJR19BUkNIX0lRODAzMjEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JUTMxMjQ0IGlzIG5vdCBzZXQKIENPTkZJR19BUkNIX0lRODAzMzE9eQotIyBDT05GSUdfTUFDSF9JUTgwMzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA4MDIxOSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JT1AzMzE9eQotCi0jCi0jIElPUDN4eCBDaGlwc2V0IEZlYXR1cmVzCi0jCi1DT05GSUdfSU9QMzMxX1NURVBEPXkKK0NPTkZJR19NQUNIX0lRODAzMzI9eQorQ09ORklHX1BMQVRfSU9QPXkKIAogIwogIyBQcm9jZXNzb3IgVHlwZQpAQCAtMTA5LDcgKzEzOSw2IEBACiBDT05GSUdfQ1BVX0FCUlRfRVY1VD15CiBDT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQogQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQogCiAjCiAjIFByb2Nlc3NvciBGZWF0dXJlcwpAQCAtMTIxLDggKzE1MCw3IEBACiAjIEJ1cyBzdXBwb3J0CiAjCiBDT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX05BTUVTPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CiAKICMKICMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydApAQCAtMTMzLDYgKzE2MSwxOSBAQAogIyBLZXJuZWwgRmVhdHVyZXMKICMKICMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfTk9fSURMRV9IWiBpcyBub3Qgc2V0CitDT05GSUdfSFo9MTAwCisjIENPTkZJR19BRUFCSSBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0RJU0NPTlRJR01FTV9FTkFCTEUgaXMgbm90IHNldAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NDA5NgorIyBDT05GSUdfUkVTT1VSQ0VTXzY0QklUIGlzIG5vdCBzZXQKIENPTkZJR19BTElHTk1FTlRfVFJBUD15CiAKICMKQEAgLTE0MCw3ICsxODEsNyBAQAogIwogQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAogQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKK0NPTkZJR19DTURMSU5FPSJjb25zb2xlPXR0eVMwLDExNTIwMCByb290PS9kZXYvbmZzIGlwPWJvb3RwIgogIyBDT05GSUdfWElQX0tFUk5FTCBpcyBub3Qgc2V0CiAKICMKQEAgLTE2Niw2ICsyMDcsOTMgQEAKICMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCiAjCiAjIENPTkZJR19QTSBpcyBub3Qgc2V0CisjIENPTkZJR19BUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTVJPVVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorIyBDT05GSUdfU1lOX0NPT0tJRVMgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UUkFOU1BPUlQ9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CitDT05GSUdfSU5FVF9ESUFHPXkKK0NPTkZJR19JTkVUX1RDUF9ESUFHPXkKKyMgQ09ORklHX1RDUF9DT05HX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19UQ1BfQ09OR19CSUM9eQorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUV09SS19TRUNNQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAogCiAjCiAjIERldmljZSBEcml2ZXJzCkBAIC0xNzcsNiArMzA1LDEzIEBACiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CiAjIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAogCiAjCiAjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKQEAgLTIwMCw2ICszMzUsNyBAQAogIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GVEwgaXMgbm90IHNldAogIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CiAKICMKICMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKQEAgLTIyMiw2ICszNTgsNyBAQAogQ09ORklHX01URF9DRklfSTI9eQogIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PVFAgaXMgbm90IHNldAogQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQogIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKQEAgLTIyOSwxOCArMzY2LDE4IEBACiAjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PQlNPTEVURV9DSElQUyBpcyBub3Qgc2V0CiAKICMKICMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwogIwogIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAogQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGMwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDA4MDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHgwCiBDT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKICMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CiAKICMKICMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCkBAIC0yNDksNyArMzg2LDYgQEAKICMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CiAjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAogIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKICMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAogCiAjCkBAIC0yNjUsNiArNDAxLDExIEBACiAjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CiAKICMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCiAjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAogIwogIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CkBAIC0yNzYsNyArNDE3LDYgQEAKICMKICMgQmxvY2sgZGV2aWNlcwogIwotIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CkBAIC0yODgsMTcgKzQyOCw5IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT04MTkyCi0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorQ09ORklHX0JMS19ERVZfUkFNX0JMT0NLU0laRT0xMDI0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU8gU2NoZWR1bGVycwotIwotQ09ORklHX0lPU0NIRURfTk9PUD15Ci1DT05GSUdfSU9TQ0hFRF9BUz15Ci1DT05GSUdfSU9TQ0hFRF9ERUFETElORT15Ci1DT05GSUdfSU9TQ0hFRF9DRlE9eQogIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKIAogIwpAQCAtMzA5LDYgKzQ0MSw3IEBACiAjCiAjIFNDU0kgZGV2aWNlIHN1cHBvcnQKICMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAogQ09ORklHX1NDU0k9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKQEAgLTMyMCw2ICs0NTMsNyBAQAogIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAogQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAogCiAjCiAjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwpAQCAtMzM0LDEwICs0NjgsMTIgQEAKICMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBU19BVFRSUyBpcyBub3Qgc2V0CiAKICMKICMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwogIworIyBDT05GSUdfSVNDU0lfVENQIGlzIG5vdCBzZXQKICMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKQEAgLTM0OCwyNSArNDg0LDE5IEBACiAjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CkBAIC0zODEsOCArNTExLDcgQEAKIENPTkZJR19NRF9SQUlEMD15CiBDT05GSUdfTURfUkFJRDE9eQogIyBDT05GSUdfTURfUkFJRDEwIGlzIG5vdCBzZXQKLUNPTkZJR19NRF9SQUlENT15Ci0jIENPTkZJR19NRF9SQUlENiBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9SQUlENDU2IGlzIG5vdCBzZXQKICMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0CiAjIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVZfRE09eQpAQCAtMzk2LDYgKzUyNSw5IEBACiAjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKICMKICMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKIAogIwogIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CkBAIC00MDgsNzEgKzU0MCw4IEBACiAjIENPTkZJR19JMk8gaXMgbm90IHNldAogCiAjCi0jIE5ldHdvcmtpbmcgc3VwcG9ydAorIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0CiAjCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKIENPTkZJR19ORVRERVZJQ0VTPXkKICMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKICMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldApAQCAtNDg1LDYgKzU1NCwxMCBAQAogIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKIAogIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKworIwogIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKICMKICMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0CkBAIC01MDEsMTQgKzU3NCwyMCBAQAogIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CiAjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAogIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CiAjIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKICMKKyMgQ09ORklHX0NIRUxTSU9fVDEgaXMgbm90IHNldAogIyBDT05GSUdfSVhHQiBpcyBub3Qgc2V0CiAjIENPTkZJR19TMklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ZUkkxMEdFIGlzIG5vdCBzZXQKIAogIwogIyBUb2tlbiBSaW5nIGRldmljZXMKQEAgLTUzMSw2ICs2MTAsOCBAQAogIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKICMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CiAKICMKICMgSVNETiBzdWJzeXN0ZW0KQEAgLTU2OCw3ICs2NDksNiBAQAogIwogIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAogIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKIAogIwogIyBDaGFyYWN0ZXIgZGV2aWNlcwpAQCAtNTc2LDYgKzY1Niw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CiAKICMKQEAgLTU4Myw3ICs2NjQsOSBAQAogIwogQ09ORklHX1NFUklBTF84MjUwPXkKIENPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfODI1MF9QQ0k9eQogQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTQKICMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKIAogIwpAQCAtNTkxLDYgKzY3NCw3IEBACiAjCiBDT05GSUdfU0VSSUFMX0NPUkU9eQogQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CiBDT05GSUdfVU5JWDk4X1BUWVM9eQogQ09ORklHX0xFR0FDWV9QVFlTPXkKIENPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgpAQCAtNjA0LDggKzY4OCw4IEBACiAjIFdhdGNoZG9nIENhcmRzCiAjCiAjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKICMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKICMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKQEAgLTYyMCw2ICs3MDQsNyBAQAogIyBUUE0gZGV2aWNlcwogIwogIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CiAKICMKICMgSTJDIHN1cHBvcnQKQEAgLTY0NCwxNCArNzI5LDEzIEBACiAjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0lPUDNYWD15Ci0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CitDT05GSUdfSTJDX0lPUDNYWD15CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAogIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKICMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldApAQCAtNjYyLDE1ICs3NDYsNDUgQEAKICMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKIAogIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAorIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKICMKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FCSVRVR1VSVSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CkBAIC02ODUsMzYgKzc5OSw0NSBAQAogIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CiAjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAogIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTJEIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKICMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdFSEYgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CiAKICMKICMgTWlzYyBkZXZpY2VzCiAjCiAKICMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCiAjIE11bHRpbWVkaWEgZGV2aWNlcwogIwogIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19WNEwyPXkKIAogIwogIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCkBAIC03MjQsNiArODQ3LDcgQEAKICMKICMgR3JhcGhpY3Mgc3VwcG9ydAogIworQ09ORklHX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkIgaXMgbm90IHNldAogCiAjCkBAIC03MzEsNiArODU1LDcgQEAKICMKICMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKIENPTkZJR19EVU1NWV9DT05TT0xFPXkKKyMgQ09ORklHX0JBQ0tMSUdIVF9MQ0RfU1VQUE9SVCBpcyBub3Qgc2V0CiAKICMKICMgU291bmQKQEAgLTc0Miw5ICs4NjcsMTQgQEAKICMKIENPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQogIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKIAogIworIyBOT1RFOiBVU0JfU1RPUkFHRSBlbmFibGVzIFNDU0ksIGFuZCAnU0NTSSBkaXNrIHN1cHBvcnQnCisjCisKKyMKICMgVVNCIEdhZGdldCBTdXBwb3J0CiAjCiAjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKQEAgLTc1NSwxMCArODg1LDE3IEBACiAjIENPTkZJR19NTUMgaXMgbm90IHNldAogCiAjCisjIFJlYWwgVGltZSBDbG9jaworIworQ09ORklHX1JUQ19MSUI9eQorIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIwogIyBGaWxlIHN5c3RlbXMKICMKIENPTkZJR19FWFQyX0ZTPXkKICMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAogQ09ORklHX0VYVDNfRlM9eQogQ09ORklHX0VYVDNfRlNfWEFUVFI9eQogIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldApAQCAtNzY4LDIyICs5MDUsMjIgQEAKIENPTkZJR19GU19NQkNBQ0hFPXkKICMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CiBDT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0CiAjIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAogQ09ORklHX1hGU19TRUNVUklUWT15CiBDT05GSUdfWEZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAogIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAogIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CiAjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CiBDT05GSUdfRE5PVElGWT15CiAjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKIAogIwogIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCkBAIC04MDMsMTIgKzk0MCwxMCBAQAogIwogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0CiBDT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CiAKICMKICMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwpAQCAtODM0LDE2ICs5NjksMTkgQEAKICMKIENPTkZJR19ORlNfRlM9eQogQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKICMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAogQ09ORklHX05GU0Q9eQogQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAogIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CiAjIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0CiBDT05GSUdfUk9PVF9ORlM9eQogQ09ORklHX0xPQ0tEPXkKIENPTkZJR19MT0NLRF9WND15CiBDT05GSUdfRVhQT1JURlM9eQorQ09ORklHX05GU19DT01NT049eQogQ09ORklHX1NVTlJQQz15CiAjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAogIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CkBAIC04NTIsNiArOTkwLDcgQEAKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CiAKICMKICMgUGFydGl0aW9uIFR5cGVzCkBAIC04NzEsNiArMTAxMCw3IEBACiAjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CiAKICMKQEAgLTg4NywxMSArMTAyNywzNCBAQAogIyBLZXJuZWwgaGFja2luZwogIwogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKIENPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUldTRU1TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLX1NMRUVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0xPQ0tJTkdfQVBJX1NFTEZURVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKIENPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAogQ09ORklHX0ZSQU1FX1BPSU5URVI9eQorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VEX0lOTElOSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX1VTRVI9eQorIyBDT05GSUdfREVCVUdfV0FJVFEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRVJST1JTIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19MTD15CisjIENPTkZJR19ERUJVR19JQ0VEQ0MgaXMgbm90IHNldAogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKQEAgLTkxMiw1ICsxMDc1LDcgQEAKICMgTGlicmFyeSByb3V0aW5lcwogIwogIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKICMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfUExJU1Q9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXEzMTI0NF9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMyNDY3MTYuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pcTMxMjQ0X2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkyMiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDAyOjEwOjM4IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotQ09ORklHX0lLQ09ORklHPXkKLUNPTkZJR19JS0NPTkZJR19QUk9DPXkKLSMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKLUNPTkZJR19LQUxMU1lNUz15Ci0jIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX0ZVTEw9eQotQ09ORklHX0ZVVEVYPXkKLUNPTkZJR19FUE9MTD15Ci1DT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQotQ09ORklHX1NITUVNPXkKLUNPTkZJR19DQ19BTElHTl9GVU5DVElPTlM9MAotQ09ORklHX0NDX0FMSUdOX0xBQkVMUz0wCi1DT05GSUdfQ0NfQUxJR05fTE9PUFM9MAotQ09ORklHX0NDX0FMSUdOX0pVTVBTPTAKLSMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAotQ09ORklHX0JBU0VfU01BTEw9MAotCi0jCi0jIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0Ci0jCi1DT05GSUdfTU9EVUxFUz15Ci1DT05GSUdfTU9EVUxFX1VOTE9BRD15Ci0jIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKLUNPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKLSMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0Ci1DT05GSUdfS01PRD15Ci0KLSMKLSMgU3lzdGVtIFR5cGUKLSMKLSMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRUJTQTExMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0ZPT1RCUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lPUDNYWD15Ci0jIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MNzIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1BYQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1JQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NBMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1MzQzI0MTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TSEFSSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0xIN0E0MFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9PTUFQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfVkVSU0FUSUxFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU1YIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSDcyMFggaXMgbm90IHNldAotCi0jCi0jIElPUDN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zCi0jCi0KLSMKLSMgSU9QM3h4IFBsYXRmb3JtIFR5cGVzCi0jCi0jIENPTkZJR19BUkNIX0lRODAzMjEgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSVEzMTI0ND15Ci0jIENPTkZJR19BUkNIX0lRODAzMzEgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9JUTgwMzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRVA4MDIxOSBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JT1AzMjE9eQotIyBDT05GSUdfQVJDSF9JT1AzMzEgaXMgbm90IHNldAotCi0jCi0jIElPUDN4eCBDaGlwc2V0IEZlYXR1cmVzCi0jCi0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX05BTUVTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi1DT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLSMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAotIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9JMT15Ci1DT05GSUdfTVREX0NGSV9JMj15Ci0jIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSU5URUxFWFQ9eQotIyBDT05GSUdfTVREX0NGSV9BTURTVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX1VUSUw9eQotIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcwotIwotIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAotQ09ORklHX01URF9QSFlTTUFQPXkKLUNPTkZJR19NVERfUEhZU01BUF9TVEFSVD0weGYwMDAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfTEVOPTB4MDA4MDAwMDAKLUNPTkZJR19NVERfUEhZU01BUF9CQU5LV0lEVEg9MgotIyBDT05GSUdfTVREX0FSTV9JTlRFR1JBVE9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9FREI3MzEyIGlzIG5vdCBzZXQKLQotIwotIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKLSMKLSMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTEtNVEQgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAotCi0jCi0jIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKLQotIwotIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKLSMKLSMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAotCi0jCi0jIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAotIwotCi0jCi0jIEJsb2NrIGRldmljZXMKLSMKLSMgQ09ORklHX0JMS19ERVZfRkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0xPT1AgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfUkFNPXkKLUNPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgotQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9ODE5MgotIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAotCi0jCi0jIElPIFNjaGVkdWxlcnMKLSMKLUNPTkZJR19JT1NDSEVEX05PT1A9eQotQ09ORklHX0lPU0NIRURfQVM9eQotQ09ORklHX0lPU0NIRURfREVBRExJTkU9eQotQ09ORklHX0lPU0NIRURfQ0ZRPXkKLSMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0Ci0KLSMKLSMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAotIwotIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfU0NTST15Ci1DT05GSUdfU0NTSV9QUk9DX0ZTPXkKLQotIwotIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQotIwotQ09ORklHX0JMS19ERVZfU0Q9eQotIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ0hSX0RFVl9TRz15Ci0KLSMKLSMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCi0jCi0jIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKLSMKLSMgQ09ORklHX1NDU0lfU1BJX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRkNfQVRUUlMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9JU0NTSV9BVFRSUyBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBsb3ctbGV2ZWwgZHJpdmVycwotIwotIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAotIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RNWDMxOTFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfRUFUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9HRFRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAotQ09ORklHX1NDU0lfUUxBMlhYWD15Ci0jIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLUNPTkZJR19NRD15Ci1DT05GSUdfQkxLX0RFVl9NRD15Ci0jIENPTkZJR19NRF9MSU5FQVIgaXMgbm90IHNldAotQ09ORklHX01EX1JBSUQwPXkKLUNPTkZJR19NRF9SQUlEMT15Ci0jIENPTkZJR19NRF9SQUlEMTAgaXMgbm90IHNldAotQ09ORklHX01EX1JBSUQ1PXkKLSMgQ09ORklHX01EX1JBSUQ2IGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX01VTFRJUEFUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRF9GQVVMVFkgaXMgbm90IHNldAotQ09ORklHX0JMS19ERVZfRE09eQotIyBDT05GSUdfRE1fQ1JZUFQgaXMgbm90IHNldAotIyBDT05GSUdfRE1fU05BUFNIT1QgaXMgbm90IHNldAotIyBDT05GSUdfRE1fTUlSUk9SIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RNX1pFUk8gaXMgbm90IHNldAotIyBDT05GSUdfRE1fTVVMVElQQVRIIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyTyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29ya2luZyBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLUNPTkZJR19QQUNLRVQ9eQotQ09ORklHX1BBQ0tFVF9NTUFQPXkKLSMgQ09ORklHX05FVExJTktfREVWIGlzIG5vdCBzZXQKLUNPTkZJR19VTklYPXkKLSMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAotQ09ORklHX0lORVQ9eQotQ09ORklHX0lQX01VTFRJQ0FTVD15Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUD15Ci0jIENPTkZJR19JUF9QTlBfREhDUCBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QX0JPT1RQPXkKLSMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9NUk9VVEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9UQ1BESUFHPXkKLSMgQ09ORklHX0lQX1RDUERJQUdfSVBWNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CUklER0UgaXMgbm90IHNldAotIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUNORVQgaXMgbm90IHNldAotIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUFggaXMgbm90IHNldAotIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAotIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBUEIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAotIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCi0jCi0jIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0NMU19ST1VURSBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayB0ZXN0aW5nCi0jCi0jIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JUIGlzIG5vdCBzZXQKLUNPTkZJR19ORVRERVZJQ0VTPXkKLSMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAotIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RVTiBpcyBub3Qgc2V0Ci0KLSMKLSMgQVJDbmV0IGRldmljZXMKLSMKLSMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCi0jCi0jIENPTkZJR19ORVRfRVRIRVJORVQgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0jIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAotIyBDT05GSUdfREwySyBpcyBub3Qgc2V0Ci1DT05GSUdfRTEwMDA9eQotQ09ORklHX0UxMDAwX05BUEk9eQotIyBDT05GSUdfRTEwMDBfRElTQUJMRV9QQUNLRVRfU1BMSVQgaXMgbm90IHNldAotIyBDT05GSUdfTlM4MzgyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IQU1BQ0hJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1lFTExPV0ZJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19SODE2OSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSzk4TElOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0jIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKLSMgQ09ORklHX1MySU8gaXMgbm90IHNldAotCi0jCi0jIFRva2VuIFJpbmcgZGV2aWNlcwotIwotIyBDT05GSUdfVFIgaXMgbm90IHNldAotCi0jCi0jIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQotIwotIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKLQotIwotIyBXYW4gaW50ZXJmYWNlcwotIwotIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZEREkgaXMgbm90IHNldAotIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKLSMKLUNPTkZJR19JTlBVVD15Ci0KLSMKLSMgVXNlcmxhbmQgaW50ZXJmYWNlcwotIwotQ09ORklHX0lOUFVUX01PVVNFREVWPXkKLSMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLSMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKLUNPTkZJR19TT1VORF9HQU1FUE9SVD15Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci0jIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAotCi0jCi0jIFNlcmlhbCBkcml2ZXJzCi0jCi1DT05GSUdfU0VSSUFMXzgyNTA9eQotQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQotQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTQKLSMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKLQotIwotIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0Ci0jCi1DT05GSUdfU0VSSUFMX0NPUkU9eQotQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQotQ09ORklHX1VOSVg5OF9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKLQotIwotIyBJUE1JCi0jCi0jIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAotCi0jCi0jIFdhdGNoZG9nIENhcmRzCi0jCi0jIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCi0jCi0jIENPTkZJR19EUk0gaXMgbm90IHNldAotIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgVFBNIGRldmljZXMKLSMKLSMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAotCi0jCi0jIEkyQyBzdXBwb3J0Ci0jCi1DT05GSUdfSTJDPXkKLUNPTkZJR19JMkNfQ0hBUkRFVj15Ci0KLSMKLSMgSTJDIEFsZ29yaXRobXMKLSMKLSMgQ09ORklHX0kyQ19BTEdPQklUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENGIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEdPUENBIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAotQ09ORklHX0kyQ19JT1AzWFg9eQotIyBDT05GSUdfSTJDX0lTQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ3gyMDBfQUNCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU1RVQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZPT0RPTzMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIFNlbnNvcnMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfU0VOU09SIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FTQjEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ0hFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0ZTQ1BPUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzTDc4NVRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNjI3SEYgaXMgbm90IHNldAotCi0jCi0jIE90aGVyIEkyQyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX1NFTlNPUlNfRUVQUk9NIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19SVEM4NTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAotCi0jCi0jIE1pc2MgZGV2aWNlcwotIwotCi0jCi0jIE11bHRpbWVkaWEgZGV2aWNlcwotIwotIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKLQotIwotIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCi0jCi0jIENPTkZJR19EVkIgaXMgbm90IHNldAotCi0jCi0jIEdyYXBoaWNzIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZCIGlzIG5vdCBzZXQKLQotIwotIyBDb25zb2xlIGRpc3BsYXkgZHJpdmVyIHN1cHBvcnQKLSMKLSMgQ09ORklHX1ZHQV9DT05TT0xFIGlzIG5vdCBzZXQKLUNPTkZJR19EVU1NWV9DT05TT0xFPXkKLQotIwotIyBTb3VuZAotIwotIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotCi0jCi0jIFVTQiBzdXBwb3J0Ci0jCi1DT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15Ci1DT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQotIyBDT05GSUdfVVNCIGlzIG5vdCBzZXQKLQotIwotIyBVU0IgR2FkZ2V0IFN1cHBvcnQKLSMKLSMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAotCi0jCi0jIE1NQy9TRCBDYXJkIHN1cHBvcnQKLSMKLSMgQ09ORklHX01NQyBpcyBub3Qgc2V0Ci0KLSMKLSMgRmlsZSBzeXN0ZW1zCi0jCi1DT05GSUdfRVhUMl9GUz15Ci0jIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19FWFQzX0ZTPXkKLUNPTkZJR19FWFQzX0ZTX1hBVFRSPXkKLSMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAotQ09ORklHX0pCRD15Ci0jIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAotQ09ORklHX0ZTX01CQ0FDSEU9eQotIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBYRlMgc3VwcG9ydAotIwotQ09ORklHX1hGU19GUz15Ci1DT05GSUdfWEZTX0VYUE9SVD15Ci0jIENPTkZJR19YRlNfUlQgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19YRlNfU0VDVVJJVFk9eQotQ09ORklHX1hGU19QT1NJWF9BQ0w9eQotIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX0RFVkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFVlBUU19GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfVE1QRlM9eQotIyBDT05GSUdfVE1QRlNfWEFUVFIgaXMgbm90IHNldAotIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKLUNPTkZJR19SQU1GUz15Ci0KLSMKLSMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcwotIwotIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9GUz15Ci1DT05GSUdfSkZGUzJfRlNfREVCVUc9MAotIyBDT05GSUdfSkZGUzJfRlNfTkFORCBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9GU19OT1JfRUNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAotQ09ORklHX0pGRlMyX1pMSUI9eQotQ09ORklHX0pGRlMyX1JUSU1FPXkKLSMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIEZpbGUgU3lzdGVtcwotIwotQ09ORklHX05GU19GUz15Ci1DT05GSUdfTkZTX1YzPXkKLSMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAotQ09ORklHX05GU0Q9eQotQ09ORklHX05GU0RfVjM9eQotIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNEX1RDUCBpcyBub3Qgc2V0Ci1DT05GSUdfUk9PVF9ORlM9eQotQ09ORklHX0xPQ0tEPXkKLUNPTkZJR19MT0NLRF9WND15Ci1DT05GSUdfRVhQT1JURlM9eQotQ09ORklHX1NVTlJQQz15Ci0jIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAotIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBhcnRpdGlvbiBUeXBlcwotIwotQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15Ci0jIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0jIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQotQ09ORklHX0ZSQU1FX1BPSU5URVI9eQotQ09ORklHX0RFQlVHX1VTRVI9eQotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLSMgQ09ORklHX0tFWVMgaXMgbm90IHNldAotIyBDT05GSUdfU0VDVVJJVFkgaXMgbm90IHNldAotCi0jCi0jIENyeXB0b2dyYXBoaWMgb3B0aW9ucwotIwotIyBDT05GSUdfQ1JZUFRPIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcwotIwotCi0jCi0jIExpYnJhcnkgcm91dGluZXMKLSMKLSMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1JDMzI9eQotIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKLUNPTkZJR19aTElCX0lORkxBVEU9eQotQ09ORklHX1pMSUJfREVGTEFURT15CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9pcTgwMzIxX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjAwMGRhNy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9jb25maWdzL2lxODAzMjFfZGVmY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsODQzICswLDAgQEAKLSMKLSMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMi1yYzEtYmsyCi0jIFN1biBNYXIgMjcgMTM6MjQ6MTAgMjAwNQotIwotQ09ORklHX0FSTT15Ci1DT05GSUdfTU1VPXkKLUNPTkZJR19VSUQxNj15Ci1DT05GSUdfUldTRU1fR0VORVJJQ19TUElOTE9DSz15Ci1DT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQotQ09ORklHX0dFTkVSSUNfSU9NQVA9eQotCi0jCi0jIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucwotIwotQ09ORklHX0VYUEVSSU1FTlRBTD15Ci1DT05GSUdfQ0xFQU5fQ09NUElMRT15Ci1DT05GSUdfQlJPS0VOX09OX1NNUD15Ci0KLSMKLSMgR2VuZXJhbCBzZXR1cAotIwotQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLUNPTkZJR19CU0RfUFJPQ0VTU19BQ0NUPXkKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1RfVjMgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19LT0JKRUNUX1VFVkVOVD15Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9GVUxMPXkKLUNPTkZJR19GVVRFWD15Ci1DT05GSUdfRVBPTEw9eQotQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKLUNPTkZJR19DQ19BTElHTl9MQUJFTFM9MAotQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKLUNPTkZJR19DQ19BTElHTl9KVU1QUz0wCi0jIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKLUNPTkZJR19CQVNFX1NNQUxMPTAKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15Ci0jIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAotQ09ORklHX0tNT0Q9eQotCi0jCi0jIFN5c3RlbSBUeXBlCi0jCi0jIENPTkZJR19BUkNIX0NMUFM3NTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ0xQUzcxMVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9DTzI4NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VCU0ExMTAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9GT09UQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci1DT05GSUdfQVJDSF9JT1AzWFg9eQotIyBDT05GSUdfQVJDSF9JWFA0WFggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JWFAyMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTDcyMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9QWEEgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9SUEMgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TQTExMDAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9TM0MyNDEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0hBUksgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9MSDdBNDBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfT01BUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0g3MjBYIGlzIG5vdCBzZXQKLQotIwotIyBJT1AzeHggSW1wbGVtZW50YXRpb24gT3B0aW9ucwotIwotCi0jCi0jIElPUDN4eCBQbGF0Zm9ybSBUeXBlcwotIwotQ09ORklHX0FSQ0hfSVE4MDMyMT15Ci0jIENPTkZJR19BUkNIX0lRMzEyNDQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JUTgwMzMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfSVE4MDMzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0VQODAyMTkgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSU9QMzIxPXkKLSMgQ09ORklHX0FSQ0hfSU9QMzMxIGlzIG5vdCBzZXQKLQotIwotIyBJT1AzeHggQ2hpcHNldCBGZWF0dXJlcwotIwotCi0jCi0jIFByb2Nlc3NvciBUeXBlCi0jCi1DT05GSUdfQ1BVXzMyPXkKLUNPTkZJR19DUFVfWFNDQUxFPXkKLUNPTkZJR19DUFVfMzJ2NT15Ci1DT05GSUdfQ1BVX0FCUlRfRVY1VD15Ci1DT05GSUdfQ1BVX0NBQ0hFX1ZJVlQ9eQotQ09ORklHX0NQVV9UTEJfVjRXQkk9eQotQ09ORklHX0NQVV9NSU5JQ0FDSEU9eQotCi0jCi0jIFByb2Nlc3NvciBGZWF0dXJlcwotIwotIyBDT05GSUdfQVJNX1RIVU1CIGlzIG5vdCBzZXQKLUNPTkZJR19YU0NBTEVfUE1VPXkKLQotIwotIyBCdXMgc3VwcG9ydAotIwotQ09ORklHX1BDST15Ci0jIENPTkZJR19QQ0lfTEVHQUNZX1BST0MgaXMgbm90IHNldAotQ09ORklHX1BDSV9OQU1FUz15Ci0KLSMKLSMgUENDQVJEIChQQ01DSUEvQ2FyZEJ1cykgc3VwcG9ydAotIwotIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgRmVhdHVyZXMKLSMKLSMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAotQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKLQotIwotIyBCb290IG9wdGlvbnMKLSMKLUNPTkZJR19aQk9PVF9ST01fVEVYVD0weDAKLUNPTkZJR19aQk9PVF9ST01fQlNTPTB4MAotQ09ORklHX0NNRExJTkU9ImlwPWJvb3Qgcm9vdD1uZnMgY29uc29sZT10dHlTMCwxMTUyMDAiCi0jIENPTkZJR19YSVBfS0VSTkVMIGlzIG5vdCBzZXQKLQotIwotIyBGbG9hdGluZyBwb2ludCBlbXVsYXRpb24KLSMKLQotIwotIyBBdCBsZWFzdCBvbmUgZW11bGF0aW9uIG11c3QgYmUgc2VsZWN0ZWQKLSMKLUNPTkZJR19GUEVfTldGUEU9eQotIyBDT05GSUdfRlBFX05XRlBFX1hQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0ZQRV9GQVNURlBFIGlzIG5vdCBzZXQKLQotIwotIyBVc2Vyc3BhY2UgYmluYXJ5IGZvcm1hdHMKLSMKLUNPTkZJR19CSU5GTVRfRUxGPXkKLUNPTkZJR19CSU5GTVRfQU9VVD15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlRIVVIgaXMgbm90IHNldAotCi0jCi0jIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucwotIwotIyBDT05GSUdfUE0gaXMgbm90IHNldAotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi1DT05GSUdfTVREPXkKLSMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ09OQ0FUIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEFSVElUSU9OUz15Ci1DT05GSUdfTVREX1JFREJPT1RfUEFSVFM9eQotQ09ORklHX01URF9SRURCT09UX0RJUkVDVE9SWV9CTE9DSz0tMQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUU19SRUFET05MWT15Ci0jIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUZTX1BBUlRTIGlzIG5vdCBzZXQKLQotIwotIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycwotIwotQ09ORklHX01URF9DSEFSPXkKLUNPTkZJR19NVERfQkxPQ0s9eQotIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GVEwgaXMgbm90IHNldAotIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAotCi0jCi0jIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCi0jCi1DT05GSUdfTVREX0NGST15Ci0jIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0dFTl9QUk9CRT15Ci0jIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhmMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAwODAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAotIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0Ci0KLSMKLSMgSVNETiBzdWJzeXN0ZW0KLSMKLSMgQ09ORklHX0lTRE4gaXMgbm90IHNldAotCi0jCi0jIElucHV0IGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfSU5QVVQ9eQotCi0jCi0jIFVzZXJsYW5kIGludGVyZmFjZXMKLSMKLUNPTkZJR19JTlBVVF9NT1VTRURFVj15Ci0jIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAotIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgSS9PIHBvcnRzCi0jCi0jIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci1DT05GSUdfU09VTkRfR0FNRVBPUlQ9eQotCi0jCi0jIENoYXJhY3RlciBkZXZpY2VzCi0jCi1DT05GSUdfVlQ9eQotQ09ORklHX1ZUX0NPTlNPTEU9eQotQ09ORklHX0hXX0NPTlNPTEU9eQotIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKLQotIwotIyBTZXJpYWwgZHJpdmVycwotIwotQ09ORklHX1NFUklBTF84MjUwPXkKLUNPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKLUNPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00Ci0jIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAotIwotQ09ORklHX1NFUklBTF9DT1JFPXkKLUNPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKLUNPTkZJR19VTklYOThfUFRZUz15Ci1DT05GSUdfTEVHQUNZX1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2Ci0KLSMKLSMgSVBNSQotIwotIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKLQotIwotIyBXYXRjaGRvZyBDYXJkcwotIwotIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAotIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAotIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RUTEsgaXMgbm90IHNldAotIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAotIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAotCi0jCi0jIEZ0YXBlLCB0aGUgZmxvcHB5IHRhcGUgZGV2aWNlIGRyaXZlcgotIwotIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotQ09ORklHX0kyQz15Ci1DT05GSUdfSTJDX0NIQVJERVY9eQotCi0jCi0jIEkyQyBBbGdvcml0aG1zCi0jCi0jIENPTkZJR19JMkNfQUxHT0JJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDRiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxHT1BDQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0Ci0jCi0jIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19JODEwIGlzIG5vdCBzZXQKLUNPTkZJR19JMkNfSU9QM1hYPXkKLSMgQ09ORklHX0kyQ19JU0EgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QUk9TQVZBR0UgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NBVkFHRTQgaXMgbm90IHNldAotIyBDT05GSUdfU0N4MjAwX0FDQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQ0FfSVNBIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBTZW5zb3JzIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX1NFTlNPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BU0IxMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NIRVIgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19GU0NQT1MgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNOTAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVzgzNzgxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKLQotIwotIyBPdGhlciBJMkMgQ2hpcCBzdXBwb3J0Ci0jCi0jIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUlRDODU2NCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKLQotIwotIyBNaXNjIGRldmljZXMKLSMKLQotIwotIyBNdWx0aW1lZGlhIGRldmljZXMKLSMKLSMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0Ci0KLSMKLSMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcwotIwotIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKLQotIwotIyBHcmFwaGljcyBzdXBwb3J0Ci0jCi0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQotQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKLSMgQ09ORklHX1VTQiBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIEdhZGdldCBTdXBwb3J0Ci0jCi0jIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKLQotIwotIyBNTUMvU0QgQ2FyZCBzdXBwb3J0Ci0jCi0jIENPTkZJR19NTUMgaXMgbm90IHNldAotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci1DT05GSUdfRVhUM19GUz15Ci1DT05GSUdfRVhUM19GU19YQVRUUj15Ci0jIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLUNPTkZJR19KQkQ9eQotIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19GU19NQkNBQ0hFPXkKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgWEZTIHN1cHBvcnQKLSMKLUNPTkZJR19YRlNfRlM9eQotQ09ORklHX1hGU19FWFBPUlQ9eQotIyBDT05GSUdfWEZTX1JUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1hGU19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfWEZTX1NFQ1VSSVRZPXkKLUNPTkZJR19YRlNfUE9TSVhfQUNMPXkKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKLUNPTkZJR19ETk9USUZZPXkKLSMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKLQotIwotIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQc2V1ZG8gZmlsZXN5c3RlbXMKLSMKLUNPTkZJR19QUk9DX0ZTPXkKLUNPTkZJR19TWVNGUz15Ci0jIENPTkZJR19ERVZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERVZQVFNfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX1RNUEZTPXkKLSMgQ09ORklHX1RNUEZTX1hBVFRSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0Ci1DT05GSUdfSkZGUzJfRlM9eQotQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKLSMgQ09ORklHX0pGRlMyX0ZTX05BTkQgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlNfTk9SX0VDQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKLUNPTkZJR19KRkZTMl9aTElCPXkKLUNPTkZJR19KRkZTMl9SVElNRT15Ci0jIENPTkZJR19KRkZTMl9SVUJJTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAotIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgTmV0d29yayBGaWxlIFN5c3RlbXMKLSMKLUNPTkZJR19ORlNfRlM9eQotQ09ORklHX05GU19WMz15Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLUNPTkZJR19ORlNEPXkKLUNPTkZJR19ORlNEX1YzPXkKLSMgQ09ORklHX05GU0RfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTRF9UQ1AgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTE9DS0RfVjQ9eQotQ09ORklHX0VYUE9SVEZTPXkKLUNPTkZJR19TVU5SUEM9eQotIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKLSMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAotIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBQYXJ0aXRpb24gVHlwZXMKLSMKLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQotIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKLUNPTkZJR19NU0RPU19QQVJUSVRJT049eQotIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAotCi0jCi0jIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0Ci0jCi0jIENPTkZJR19OTFMgaXMgbm90IHNldAotCi0jCi0jIFByb2ZpbGluZyBzdXBwb3J0Ci0jCi0jIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBoYWNraW5nCi0jCi0jIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAotQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKLUNPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKLUNPTkZJR19GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19ERUJVR19VU0VSPXkKLQotIwotIyBTZWN1cml0eSBvcHRpb25zCi0jCi0jIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKLQotIwotIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKLSMKLSMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKLSMKLQotIwotIyBMaWJyYXJ5IHJvdXRpbmVzCi0jCi0jIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAotQ09ORklHX0NSQzMyPXkKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0Ci1DT05GSUdfWkxJQl9JTkZMQVRFPXkKLUNPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZyBiL2FyY2gvYXJtL2NvbmZpZ3MvaXE4MDMzMl9kZWZjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDExOTU5YjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vY29uZmlncy9pcTgwMzMyX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDkxNiArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTItcmMxLWJrMgotIyBTdW4gTWFyIDI3IDE3OjMzOjM5IDIwMDUKLSMKLUNPTkZJR19BUk09eQotQ09ORklHX01NVT15Ci1DT05GSUdfVUlEMTY9eQotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKLUNPTkZJR19HRU5FUklDX0lPTUFQPXkKLQotIwotIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKLSMKLUNPTkZJR19FWFBFUklNRU5UQUw9eQotQ09ORklHX0NMRUFOX0NPTVBJTEU9eQotQ09ORklHX0JST0tFTl9PTl9TTVA9eQotCi0jCi0jIEdlbmVyYWwgc2V0dXAKLSMKLUNPTkZJR19MT0NBTFZFUlNJT049IiIKLUNPTkZJR19TV0FQPXkKLUNPTkZJR19TWVNWSVBDPXkKLSMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0Ci1DT05GSUdfQlNEX1BST0NFU1NfQUNDVD15Ci0jIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUX1YzIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNDVEw9eQotIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAotIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0Ci1DT05GSUdfS09CSkVDVF9VRVZFTlQ9eQotIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAotIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAotQ09ORklHX0tBTExTWU1TPXkKLSMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15Ci1DT05GSUdfU0hNRU09eQotQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCi1DT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKLUNPTkZJR19DQ19BTElHTl9MT09QUz0wCi1DT05GSUdfQ0NfQUxJR05fSlVNUFM9MAotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0KLSMKLSMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKLSMKLUNPTkZJR19NT0RVTEVTPXkKLUNPTkZJR19NT0RVTEVfVU5MT0FEPXkKLSMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAotQ09ORklHX09CU09MRVRFX01PRFBBUk09eQotIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAotIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKLUNPTkZJR19LTU9EPXkKLQotIwotIyBTeXN0ZW0gVHlwZQotIwotIyBDT05GSUdfQVJDSF9DTFBTNzUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0NMUFM3MTFYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfQ08yODUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9FQlNBMTEwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfRk9PVEJSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAotQ09ORklHX0FSQ0hfSU9QM1hYPXkKLSMgQ09ORklHX0FSQ0hfSVhQNFhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfSVhQMjAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0w3MjAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUFhBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUlBDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfU0ExMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfUzNDMjQxMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX1NIQVJLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSQ0hfTEg3QTQwWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX09NQVAgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9WRVJTQVRJTEUgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JTVggaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0Ci0KLSMKLSMgSU9QM3h4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMKLSMKLQotIwotIyBJT1AzeHggUGxhdGZvcm0gVHlwZXMKLSMKLSMgQ09ORklHX0FSQ0hfSVE4MDMyMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lRMzEyNDQgaXMgbm90IHNldAotIyBDT05GSUdfQVJDSF9JUTgwMzMxIGlzIG5vdCBzZXQKLUNPTkZJR19NQUNIX0lRODAzMzI9eQotIyBDT05GSUdfQVJDSF9FUDgwMjE5IGlzIG5vdCBzZXQKLUNPTkZJR19BUkNIX0lPUDMzMT15Ci0KLSMKLSMgSU9QM3h4IENoaXBzZXQgRmVhdHVyZXMKLSMKLSMgQ09ORklHX0lPUDMzMV9TVEVQRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvY2Vzc29yIFR5cGUKLSMKLUNPTkZJR19DUFVfMzI9eQotQ09ORklHX0NQVV9YU0NBTEU9eQotQ09ORklHX0NQVV8zMnY1PXkKLUNPTkZJR19DUFVfQUJSVF9FVjVUPXkKLUNPTkZJR19DUFVfQ0FDSEVfVklWVD15Ci1DT05GSUdfQ1BVX1RMQl9WNFdCST15Ci1DT05GSUdfQ1BVX01JTklDQUNIRT15Ci0KLSMKLSMgUHJvY2Vzc29yIEZlYXR1cmVzCi0jCi0jIENPTkZJR19BUk1fVEhVTUIgaXMgbm90IHNldAotQ09ORklHX1hTQ0FMRV9QTVU9eQotCi0jCi0jIEJ1cyBzdXBwb3J0Ci0jCi1DT05GSUdfUENJPXkKLSMgQ09ORklHX1BDSV9MRUdBQ1lfUFJPQyBpcyBub3Qgc2V0Ci1DT05GSUdfUENJX05BTUVTPXkKLQotIwotIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAotCi0jCi0jIEtlcm5lbCBGZWF0dXJlcwotIwotIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0Ci1DT05GSUdfQUxJR05NRU5UX1RSQVA9eQotCi0jCi0jIEJvb3Qgb3B0aW9ucwotIwotQ09ORklHX1pCT09UX1JPTV9URVhUPTB4MAotQ09ORklHX1pCT09UX1JPTV9CU1M9MHgwCi1DT05GSUdfQ01ETElORT0iaXA9Ym9vdCByb290PW5mcyBjb25zb2xlPXR0eVMwLDExNTIwMCIKLSMgQ09ORklHX1hJUF9LRVJORUwgaXMgbm90IHNldAotCi0jCi0jIEZsb2F0aW5nIHBvaW50IGVtdWxhdGlvbgotIwotCi0jCi0jIEF0IGxlYXN0IG9uZSBlbXVsYXRpb24gbXVzdCBiZSBzZWxlY3RlZAotIwotQ09ORklHX0ZQRV9OV0ZQRT15Ci0jIENPTkZJR19GUEVfTldGUEVfWFAgaXMgbm90IHNldAotIyBDT05GSUdfRlBFX0ZBU1RGUEUgaXMgbm90IHNldAotCi0jCi0jIFVzZXJzcGFjZSBiaW5hcnkgZm9ybWF0cwotIwotQ09ORklHX0JJTkZNVF9FTEY9eQotQ09ORklHX0JJTkZNVF9BT1VUPXkKLSMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FSVEhVUiBpcyBub3Qgc2V0Ci0KLSMKLSMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zCi0jCi0jIENPTkZJR19QTSBpcyBub3Qgc2V0Ci0KLSMKLSMgRGV2aWNlIERyaXZlcnMKLSMKLQotIwotIyBHZW5lcmljIERyaXZlciBPcHRpb25zCi0jCi1DT05GSUdfU1RBTkRBTE9ORT15Ci1DT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAotCi0jCi0jIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKLSMKLUNPTkZJR19NVEQ9eQotIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAotQ09ORklHX01URF9QQVJUSVRJT05TPXkKLUNPTkZJR19NVERfUkVEQk9PVF9QQVJUUz15Ci1DT05GSUdfTVREX1JFREJPT1RfRElSRUNUT1JZX0JMT0NLPS0xCi1DT05GSUdfTVREX1JFREJPT1RfUEFSVFNfVU5BTExPQ0FURUQ9eQotQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZPXkKLSMgQ09ORklHX01URF9DTURMSU5FX1BBUlRTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9BRlNfUEFSVFMgaXMgbm90IHNldAotCi0jCi0jIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCi0jCi1DT05GSUdfTVREX0NIQVI9eQotQ09ORklHX01URF9CTE9DSz15Ci0jIENPTkZJR19GVEwgaXMgbm90IHNldAotIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0Ci0KLSMKLSMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKLSMKLUNPTkZJR19NVERfQ0ZJPXkKLSMgQ09ORklHX01URF9KRURFQ1BST0JFIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfR0VOX1BST0JFPXkKLUNPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TPXkKLUNPTkZJR19NVERfQ0ZJX05PU1dBUD15Ci0jIENPTkZJR19NVERfQ0ZJX0JFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0xFX0JZVEVfU1dBUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0dFT01FVFJZIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15Ci1DT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQotQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAotQ09ORklHX01URF9DRklfSTE9eQotQ09ORklHX01URF9DRklfSTI9eQotIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKLUNPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKLSMgQ09ORklHX01URF9DRklfQU1EU1REIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0Ci1DT05GSUdfTVREX0NGSV9VVElMPXkKLSMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9YSVAgaXMgbm90IHNldAotCi0jCi0jIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKLSMKLSMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKLUNPTkZJR19NVERfUEhZU01BUD15Ci1DT05GSUdfTVREX1BIWVNNQVBfU1RBUlQ9MHhjMDAwMDAwMAotQ09ORklHX01URF9QSFlTTUFQX0xFTj0weDAwODAwMDAwCi1DT05GSUdfTVREX1BIWVNNQVBfQkFOS1dJRFRIPTEKLSMgQ09ORklHX01URF9BUk1fSU5URUdSQVRPUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfRURCNzMxMiBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCi0jCi0jIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAotIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NVERfQkxLTVREIGlzIG5vdCBzZXQKLSMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAotCi0jCi0jIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycwotIwotIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAotIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKLQotIwotIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0Ci0jCi0jIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKLQotIwotIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKLSMKLQotIwotIyBCbG9jayBkZXZpY2VzCi0jCi0jIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAotIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKLUNPTkZJR19CTEtfREVWX1JBTT15Ci1DT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKLUNPTkZJR19CTEtfREVWX1JBTV9TSVpFPTgxOTIKLSMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKLUNPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCi0jIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci0jIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1NDU0k9eQotQ09ORklHX1NDU0lfUFJPQ19GUz15Ci0KLSMKLSMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKLSMKLUNPTkZJR19CTEtfREVWX1NEPXkKLSMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAotIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAotQ09ORklHX0NIUl9ERVZfU0c9eQotCi0jCi0jIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcwotIwotIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9DT05TVEFOVFMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9MT0dHSU5HIGlzIG5vdCBzZXQKLQotIwotIyBTQ1NJIFRyYW5zcG9ydCBBdHRyaWJ1dGVzCi0jCi0jIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAotCi0jCi0jIFNDU0kgbG93LWxldmVsIGRyaXZlcnMKLSMKLSMgQ09ORklHX0JMS19ERVZfM1dfWFhYWF9SQUlEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfM1dfOVhYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FDQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQUFDUkFJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzdYWFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9BSUM3WFhYX09MRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0FJQzc5WFggaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKLSMgQ09ORklHX01FR0FSQUlEX05FV0dFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NRUdBUkFJRF9MRUdBQ1kgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfQlVTTE9HSUMgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ19GQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKLUNPTkZJR19TQ1NJX1FMQTJYWFg9eQotIyBDT05GSUdfU0NTSV9RTEEyMVhYIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBMjJYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1FMQTIzMDAgaXMgbm90IHNldAotIyBDT05GSUdfU0NTSV9RTEEyMzIyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfUUxBNjMxMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAotCi0jCi0jIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCi0jCi1DT05GSUdfTUQ9eQotQ09ORklHX0JMS19ERVZfTUQ9eQotQ09ORklHX01EX0xJTkVBUj15Ci1DT05GSUdfTURfUkFJRDA9eQotQ09ORklHX01EX1JBSUQxPXkKLSMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0Ci1DT05GSUdfTURfUkFJRDU9eQotIyBDT05GSUdfTURfUkFJRDYgaXMgbm90IHNldAotIyBDT05GSUdfTURfTVVMVElQQVRIIGlzIG5vdCBzZXQKLSMgQ09ORklHX01EX0ZBVUxUWSBpcyBub3Qgc2V0Ci1DT05GSUdfQkxLX0RFVl9ETT15Ci0jIENPTkZJR19ETV9DUllQVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9TTkFQU0hPVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NSVJST1IgaXMgbm90IHNldAotIyBDT05GSUdfRE1fWkVSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETV9NVUxUSVBBVEggaXMgbm90IHNldAotCi0jCi0jIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKLSMKLSMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0Ci0KLSMKLSMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAotIwotIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAotCi0jCi0jIEkyTyBkZXZpY2Ugc3VwcG9ydAotIwotIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JraW5nIHN1cHBvcnQKLSMKLUNPTkZJR19ORVQ9eQotCi0jCi0jIE5ldHdvcmtpbmcgb3B0aW9ucwotIwotQ09ORklHX1BBQ0tFVD15Ci1DT05GSUdfUEFDS0VUX01NQVA9eQotIyBDT05GSUdfTkVUTElOS19ERVYgaXMgbm90IHNldAotQ09ORklHX1VOSVg9eQotIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0Ci1DT05GSUdfSU5FVD15Ci1DT05GSUdfSVBfTVVMVElDQVNUPXkKLSMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0Ci1DT05GSUdfSVBfUE5QPXkKLSMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKLUNPTkZJR19JUF9QTlBfQk9PVFA9eQotIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAotIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lQX1RDUERJQUc9eQotIyBDT05GSUdfSVBfVENQRElBR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQVjYgaXMgbm90IHNldAotIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lQWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19YMjUgaXMgbm90IHNldAotIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKLQotIwotIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKLSMKLSMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfQ0xTX1JPVVRFIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lSREEgaXMgbm90IHNldAotIyBDT05GSUdfQlQgaXMgbm90IHNldAotQ09ORklHX05FVERFVklDRVM9eQotIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAotIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAotIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKLQotIwotIyBBUkNuZXQgZGV2aWNlcwotIwotIyBDT05GSUdfQVJDTkVUIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKLSMKLSMgQ09ORklHX05FVF9FVEhFUk5FVCBpcyBub3Qgc2V0Ci0KLSMKLSMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKLUNPTkZJR19FMTAwMD15Ci1DT05GSUdfRTEwMDBfTkFQST15Ci0jIENPTkZJR19FMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAotIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKLSMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAotIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKLQotIwotIyBFdGhlcm5ldCAoMTAwMDAgTWJpdCkKLSMKLSMgQ09ORklHX0lYR0IgaXMgbm90IHNldAotIyBDT05GSUdfUzJJTyBpcyBub3Qgc2V0Ci0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0jIENPTkZJR19UUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfRkRESSBpcyBub3Qgc2V0Ci0jIENPTkZJR19ISVBQSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUFAgaXMgbm90IHNldAotIyBDT05GSUdfU0xJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotCi0jCi0jIElTRE4gc3Vic3lzdGVtCi0jCi0jIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotIyBDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVggaXMgbm90IHNldAotQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKLSMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UU0RFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0Ci0KLSMKLSMgSW5wdXQgRGV2aWNlIERyaXZlcnMKLSMKLSMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIEkvTyBwb3J0cwotIwotIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAotIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAotQ09ORklHX1NPVU5EX0dBTUVQT1JUPXkKLQotIwotIyBDaGFyYWN0ZXIgZGV2aWNlcwotIwotQ09ORklHX1ZUPXkKLUNPTkZJR19WVF9DT05TT0xFPXkKLUNPTkZJR19IV19DT05TT0xFPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLSMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX0RSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKLQotIwotIyBUUE0gZGV2aWNlcwotIwotIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0Ci0KLSMKLSMgSTJDIHN1cHBvcnQKLSMKLUNPTkZJR19JMkM9eQotQ09ORklHX0kyQ19DSEFSREVWPXkKLQotIwotIyBJMkMgQWxnb3JpdGhtcwotIwotIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAotCi0jCi0jIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfSTgxMCBpcyBub3Qgc2V0Ci1DT05GSUdfSTJDX0lPUDNYWD15Ci0jIENPTkZJR19JMkNfSVNBIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUFJPU0FWQUdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TQVZBR0U0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NDeDIwMF9BQ0IgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKLSMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfUENBX0lTQSBpcyBub3Qgc2V0Ci0KLSMKLSMgSGFyZHdhcmUgU2Vuc29ycyBDaGlwIHN1cHBvcnQKLSMKLSMgQ09ORklHX0kyQ19TRU5TT1IgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfQVNCMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDSEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfRlNDUE9TIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19MTTkwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0Ci0KLSMKLSMgT3RoZXIgSTJDIENoaXAgc3VwcG9ydAotIwotIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAotIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKLSMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRU5TT1JTX1JUQzg1NjQgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAotIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRkIgaXMgbm90IHNldAotCi0jCi0jIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAotIwotIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAotQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQotCi0jCi0jIFNvdW5kCi0jCi0jIENPTkZJR19TT1VORCBpcyBub3Qgc2V0Ci0KLSMKLSMgVVNCIHN1cHBvcnQKLSMKLUNPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKLUNPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15Ci0jIENPTkZJR19VU0IgaXMgbm90IHNldAotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBGaWxlIHN5c3RlbXMKLSMKLUNPTkZJR19FWFQyX0ZTPXkKLSMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAotQ09ORklHX0VYVDNfRlM9eQotQ09ORklHX0VYVDNfRlNfWEFUVFI9eQotIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0Ci1DT05GSUdfSkJEPXkKLSMgQ09ORklHX0pCRF9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfRlNfTUJDQUNIRT15Ci0jIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFhGUyBzdXBwb3J0Ci0jCi1DT05GSUdfWEZTX0ZTPXkKLUNPTkZJR19YRlNfRVhQT1JUPXkKLSMgQ09ORklHX1hGU19SVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19YRlNfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX1hGU19TRUNVUklUWT15Ci1DT05GSUdfWEZTX1BPU0lYX0FDTD15Ci0jIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0Ci1DT05GSUdfRE5PVElGWT15Ci0jIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcwotIwotIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VREZfRlMgaXMgbm90IHNldAotCi0jCi0jIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAotIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHNldWRvIGZpbGVzeXN0ZW1zCi0jCi1DT05GSUdfUFJPQ19GUz15Ci1DT05GSUdfU1lTRlM9eQotIyBDT05GSUdfREVWRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfREVWUFRTX0ZTX1hBVFRSIGlzIG5vdCBzZXQKLUNPTkZJR19UTVBGUz15Ci0jIENPTkZJR19UTVBGU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAotQ09ORklHX1JBTUZTPXkKLQotIwotIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLUNPTkZJR19ORlNfVjM9eQotIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0Ci1DT05GSUdfTkZTRD15Ci1DT05GSUdfTkZTRF9WMz15Ci0jIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKLUNPTkZJR19ST09UX05GUz15Ci1DT05GSUdfTE9DS0Q9eQotQ09ORklHX0xPQ0tEX1Y0PXkKLUNPTkZJR19FWFBPUlRGUz15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi1DT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEPXkKLSMgQ09ORklHX0FDT1JOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19PU0ZfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FNSUdBX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci1DT05GSUdfTVNET1NfUEFSVElUSU9OPXkKLSMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAotIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAotIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRklfUEFSVElUSU9OIGlzIG5vdCBzZXQKLQotIwotIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAotIwotIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKLQotIwotIyBQcm9maWxpbmcgc3VwcG9ydAotIwotIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKLQotIwotIyBLZXJuZWwgaGFja2luZwotIwotIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAotIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKLUNPTkZJR19MT0dfQlVGX1NISUZUPTE0Ci1DT05GSUdfREVCVUdfQlVHVkVSQk9TRT15Ci1DT05GSUdfRlJBTUVfUE9JTlRFUj15Ci1DT05GSUdfREVCVUdfVVNFUj15Ci0KLSMKLSMgU2VjdXJpdHkgb3B0aW9ucwotIwotIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi0jIENPTkZJR19DUllQVE8gaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NSQzMyIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnIGIvYXJjaC9hcm0vY29uZmlncy9zM2MyNDEwX2RlZmNvbmZpZwppbmRleCBmMjA4MTRlLi5hODMyMjI2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9jb25maWdzL3MzYzI0MTBfZGVmY29uZmlnCisrKyBiL2FyY2gvYXJtL2NvbmZpZ3MvczNjMjQxMF9kZWZjb25maWcKQEAgLTEsMTQgKzEsMTkgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNy1naXQ5Ci0jIFN1biBKdW4gMjUgMjM6NTY6MzIgMjAwNgorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4CisjIFdlZCBTZXAgMjAgMjA6Mjc6MzEgMjAwNgogIwogQ09ORklHX0FSTT15CiBDT05GSUdfTU1VPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKK0NPTkZJR19IQVJESVJRU19TV19SRVNFTkQ9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQogQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKIENPTkZJR19WRUNUT1JTX0JBU0U9MHhmZmZmMDAwMAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKIAogIwogIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKQEAgLTI2LDE0ICszMSwxNSBAQAogQ09ORklHX1NZU1ZJUEM9eQogIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKICMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAogIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAogIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAogQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLUNPTkZJR19VSUQxNj15CiBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkU9eQogIyBDT05GSUdfRU1CRURERUQgaXMgbm90IHNldAorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19TWVNDVEw9eQogQ09ORklHX0tBTExTWU1TPXkKICMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CiAjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKQEAgLTQ2LDYgKzUyLDggQEAKIENPTkZJR19FUE9MTD15CiBDT05GSUdfU0hNRU09eQogQ09ORklHX1NMQUI9eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKICMgQ09ORklHX1RJTllfU0hNRU0gaXMgbm90IHNldAogQ09ORklHX0JBU0VfU01BTEw9MAogIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CkBAIC04NCw3ICs5Miw3IEBACiAjIENPTkZJR19BUkNIX0lOVEVHUkFUT1IgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9SRUFMVklFVyBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX1ZFUlNBVElMRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0FUOTFSTTkyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQVJDSF9BVDkxIGlzIG5vdCBzZXQKICMgQ09ORklHX0FSQ0hfQ0xQUzc1MDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9DTFBTNzExWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0NPMjg1IGlzIG5vdCBzZXQKQEAgLTk0LDcgKzEwMiw4IEBACiAjIENPTkZJR19BUkNIX05FVFggaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9INzIwWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lNWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19BUkNIX0lPUDNYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNIX0lPUDMzWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDRYWCBpcyBub3Qgc2V0CiAjIENPTkZJR19BUkNIX0lYUDIwMDAgaXMgbm90IHNldAogIyBDT05GSUdfQVJDSF9JWFAyM1hYIGlzIG5vdCBzZXQKQEAgLTEyMiwxMyArMTMxLDE4IEBACiBDT05GSUdfQVJDSF9TM0MyNDQwPXkKIENPTkZJR19TTURLMjQ0MF9DUFUyNDQwPXkKIENPTkZJR19TTURLMjQ0MF9DUFUyNDQyPXkKK0NPTkZJR19NQUNIX1MzQzI0MTM9eQogQ09ORklHX01BQ0hfU01ESzI0MTM9eQogQ09ORklHX01BQ0hfVlIxMDAwPXkKIENPTkZJR19NQUNIX1JYMzcxNT15CiBDT05GSUdfTUFDSF9PVE9NPXkKIENPTkZJR19NQUNIX05FWENPREVSXzI0NDA9eQorQ09ORklHX01BQ0hfVlNUTVM9eQogQ09ORklHX1MzQzI0MTBfQ0xPQ0s9eQorQ09ORklHX1MzQzI0MTBfUE09eQorQ09ORklHX0NQVV9TM0MyNDEwX0RNQT15CiBDT05GSUdfQ1BVX1MzQzI0MTA9eQorQ09ORklHX1MzQzI0MTJfUE09eQogQ09ORklHX0NQVV9TM0MyNDEyPXkKIENPTkZJR19DUFVfUzNDMjQ0WD15CiBDT05GSUdfQ1BVX1MzQzI0NDA9eQpAQCAtMTU2LDcgKzE3MCw3IEBACiBDT05GSUdfQ1BVXzMyPXkKIENPTkZJR19DUFVfQVJNOTIwVD15CiBDT05GSUdfQ1BVX0FSTTkyNlQ9eQotQ09ORklHX0NQVV8zMnY0PXkKK0NPTkZJR19DUFVfMzJ2NFQ9eQogQ09ORklHX0NQVV8zMnY1PXkKIENPTkZJR19DUFVfQUJSVF9FVjRUPXkKIENPTkZJR19DUFVfQUJSVF9FVjVUSj15CkBAIC0yMDAsNiArMjE0LDcgQEAKIENPTkZJR19GTEFUX05PREVfTUVNX01BUD15CiAjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKIENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00MDk2CisjIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAogQ09ORklHX0FMSUdOTUVOVF9UUkFQPXkKIAogIwpAQCAtMzA0LDcgKzMxOSw2IEBACiAjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CiAjIENPTkZJR19YMjUgaXMgbm90IHNldAogIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKICMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CiAjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKIApAQCAtNDYwLDYgKzQ3NCw3IEBACiBDT05GSUdfQkxLX0RFVl9SQU09eQogQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CiBDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CitDT05GSUdfQkxLX0RFVl9SQU1fQkxPQ0tTSVpFPTEwMjQKIENPTkZJR19CTEtfREVWX0lOSVRSRD15CiAjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKIENPTkZJR19BVEFfT1ZFUl9FVEg9bQpAQCAtNjQwLDYgKzY1NSw3IEBACiBDT05GSUdfVlQ9eQogQ09ORklHX1ZUX0NPTlNPTEU9eQogQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQ9eQogIyBDT05GSUdfQ09NUFVUT05FIGlzIG5vdCBzZXQKICMgQ09ORklHX1JPQ0tFVFBPUlQgaXMgbm90IHNldApAQCAtNzE2LDYgKzczMiw3IEBACiAjIFVTQi1iYXNlZCBXYXRjaGRvZyBDYXJkcwogIwogIyBDT05GSUdfVVNCUENXQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKICMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKIENPTkZJR19TM0MyNDEwX1JUQz15CiAjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKQEAgLTg1NywxMiArODc0LDEyIEBACiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKICMKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKIENPTkZJR19GQj15CiBDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKIENPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQogQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQogIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAotQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQogIyBDT05GSUdfRkJfQkFDS0xJR0hUIGlzIG5vdCBzZXQKIENPTkZJR19GQl9NT0RFX0hFTFBFUlM9eQogIyBDT05GSUdfRkJfVElMRUJMSVRUSU5HIGlzIG5vdCBzZXQKQEAgLTk5NSw3ICsxMDEyLDcgQEAKICMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VTQl9DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldApAQCAtMTA5NSw2ICsxMTEyLDcgQEAKIENPTkZJR19KRkZTMl9GU19ERUJVRz0wCiBDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQogIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CiAjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKIENPTkZJR19KRkZTMl9aTElCPXkKIENPTkZJR19KRkZTMl9SVElNRT15CkBAIC0xMjAyLDE0ICsxMjIwLDE5IEBACiAjCiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiBDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0tFUk5FTD15CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNgogQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKICMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU0xBQiBpcyBub3Qgc2V0Ci1DT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SVF9NVVRFWEVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUX01VVEVYX1RFU1RFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19ERUJVR19TUElOTE9DSyBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTVVURVhFUz15CisjIENPTkZJR19ERUJVR19SV1NFTVMgaXMgbm90IHNldAogIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKICMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAogQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0U9eQogQ09ORklHX0RFQlVHX0lORk89eQpAQCAtMTI1MSwzICsxMjc0LDQgQEAKICMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CiBDT05GSUdfWkxJQl9JTkZMQVRFPXkKIENPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9hcG0uYyBiL2FyY2gvYXJtL2tlcm5lbC9hcG0uYwppbmRleCAzM2M1NTY4Li5lY2Y0Zjk0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2FwbS5jCkBAIC0yNSw2ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8YXNtL2FwbS5oPiAvKiBhcG1fcG93ZXJfaW5mbyAqLwogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KQEAgLTgwLDcgKzgxLDcgQEAKICAqLwogc3RhdGljIGludCBzdXNwZW5kc19wZW5kaW5nOwogc3RhdGljIGludCBhcG1fZGlzYWJsZWQ7Ci1zdGF0aWMgaW50IGFybV9hcG1fYWN0aXZlOworc3RhdGljIHN0cnVjdCB0YXNrX3N0cnVjdCAqa2FwbWRfdHNrOwogCiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3dhaXRxdWV1ZSk7CiBzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlKTsKQEAgLTk3LDcgKzk4LDYgQEAKICAqIHRvIGJlIHN1c3BlbmRpbmcgdGhlIHN5c3RlbS4KICAqLwogc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGthcG1kX3dhaXQpOwotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTihrYXBtZF9leGl0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soa2FwbWRfcXVldWVfbG9jayk7CiBzdGF0aWMgc3RydWN0IGFwbV9xdWV1ZSBrYXBtZF9xdWV1ZTsKIApAQCAtNDY4LDE2ICs0NjgsMTMgQEAKIAogc3RhdGljIGludCBrYXBtZCh2b2lkICphcmcpCiB7Ci0JZGFlbW9uaXplKCJrYXBtZCIpOwotCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOwotCiAJZG8gewogCQlhcG1fZXZlbnRfdCBldmVudDsKIAogCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoa2FwbWRfd2FpdCwKLQkJCQkhcXVldWVfZW1wdHkoJmthcG1kX3F1ZXVlKSB8fCAhYXJtX2FwbV9hY3RpdmUpOworCQkJCSFxdWV1ZV9lbXB0eSgma2FwbWRfcXVldWUpIHx8IGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7CiAKLQkJaWYgKCFhcm1fYXBtX2FjdGl2ZSkKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCiAJCXNwaW5fbG9ja19pcnEoJmthcG1kX3F1ZXVlX2xvY2spOwpAQCAtNTA4LDcgKzUwNSw3IEBACiAJCX0KIAl9IHdoaWxlICgxKTsKIAotCWNvbXBsZXRlX2FuZF9leGl0KCZrYXBtZF9leGl0LCAwKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBfX2luaXQgYXBtX2luaXQodm9pZCkKQEAgLTUyMCwxMyArNTE3LDE0IEBACiAJCXJldHVybiAtRU5PREVWOwogCX0KIAotCWFybV9hcG1fYWN0aXZlID0gMTsKLQotCXJldCA9IGtlcm5lbF90aHJlYWQoa2FwbWQsIE5VTEwsIENMT05FX0tFUk5FTCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJYXJtX2FwbV9hY3RpdmUgPSAwOworCWthcG1kX3RzayA9IGt0aHJlYWRfY3JlYXRlKGthcG1kLCBOVUxMLCAia2FwbWQiKTsKKwlpZiAoSVNfRVJSKGthcG1kX3RzaykpIHsKKwkJcmV0ID0gUFRSX0VSUihrYXBtZF90c2spOworCQlrYXBtZF90c2sgPSBOVUxMOwogCQlyZXR1cm4gcmV0OwogCX0KKwlrYXBtZF90c2stPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCXdha2VfdXBfcHJvY2VzcyhrYXBtZF90c2spOwogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIAljcmVhdGVfcHJvY19pbmZvX2VudHJ5KCJhcG0iLCAwLCBOVUxMLCBhcG1fZ2V0X2luZm8pOwpAQCAtNTM1LDEwICs1MzMsNyBAQAogCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFwbV9kZXZpY2UpOwogCWlmIChyZXQgIT0gMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeSgiYXBtIiwgTlVMTCk7Ci0KLQkJYXJtX2FwbV9hY3RpdmUgPSAwOwotCQl3YWtlX3VwKCZrYXBtZF93YWl0KTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigma2FwbWRfZXhpdCk7CisJCWt0aHJlYWRfc3RvcChrYXBtZF90c2spOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC01NDksOSArNTQ0LDcgQEAKIAltaXNjX2RlcmVnaXN0ZXIoJmFwbV9kZXZpY2UpOwogCXJlbW92ZV9wcm9jX2VudHJ5KCJhcG0iLCBOVUxMKTsKIAotCWFybV9hcG1fYWN0aXZlID0gMDsKLQl3YWtlX3VwKCZrYXBtZF93YWl0KTsKLQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZrYXBtZF9leGl0KTsKKwlrdGhyZWFkX3N0b3Aoa2FwbWRfdHNrKTsKIH0KIAogbW9kdWxlX2luaXQoYXBtX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL2RlYnVnLlMgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwppbmRleCBhNTc0N2U1Li41NjE3NTY2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZGVidWcuUworKysgYi9hcmNoL2FybS9rZXJuZWwvZGVidWcuUwpAQCAtMjEsNiArMjEsMzYgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHX0lDRURDQykKIAkJQEAgZGVidWcgdXNpbmcgQVJNIEVtYmVkZGVkSUNFIERDQyBjaGFubmVsCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfVjYpCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQkuZW5kbQorCisJCS5tYWNybwlzZW5kdWFydCwgcmQsIHJ4CisJCW1jcglwMTQsIDAsIFxyZCwgYzAsIGM1LCAwCisJCS5lbmRtCisKKwkJLm1hY3JvCWJ1c3l1YXJ0LCByZCwgcngKKzEwMDE6CisJCW1yYwlwMTQsIDAsIFxyeCwgYzAsIGMxLCAwCisJCXRzdAlccngsICMweDIwMDAwMDAwCisJCWJlcQkxMDAxYgorCQkuZW5kbQorCisJCS5tYWNybwl3YWl0dWFydCwgcmQsIHJ4CisJCW1vdglccmQsICMweDIwMDAwMDAKKzEwMDE6CisJCXN1YnMJXHJkLCBccmQsICMxCisJCWJtaQkxMDAyZgorCQltcmMJcDE0LCAwLCBccngsIGMwLCBjMSwgMAorCQl0c3QJXHJ4LCAjMHgyMDAwMDAwMAorCQlibmUJMTAwMWIKKzEwMDI6CisJCS5lbmRtCisKKyNlbHNlCisKIAkJLm1hY3JvCWFkZHJ1YXJ0LCByeAogCQkuZW5kbQogCkBAIC00Niw5ICs3NiwxMiBAQAogCQlibmUJMTAwMWIKIDEwMDI6CiAJCS5lbmRtCisKKyNlbmRpZgkvKiBDT05GSUdfQ1BVX1Y2ICovCisKICNlbHNlCiAjaW5jbHVkZSA8YXNtL2FyY2gvZGVidWctbWFjcm8uUz4KLSNlbmRpZgorI2VuZGlmCS8qIENPTkZJR19ERUJVR19JQ0VEQ0MgKi8KIAogLyoKICAqIFVzZWZ1bCBkZWJ1Z2dpbmcgcm91dGluZXMKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9lY2FyZC5jIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKaW5kZXggZWNhMjQ4ZC4uM2UxNGIxMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL2VjYXJkLmMKQEAgLTI5NSw3ICsyOTUsNyBAQAogICovCiBzdGF0aWMgdm9pZCBlY2FyZF9jYWxsKHN0cnVjdCBlY2FyZF9yZXF1ZXN0ICpyZXEpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGNvbXBsZXRpb24pOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXBsZXRpb24pOwogCiAJcmVxLT5jb21wbGV0ZSA9ICZjb21wbGV0aW9uOwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TIGIvYXJjaC9hcm0va2VybmVsL2VudHJ5LWFybXYuUwppbmRleCBkZTRlMzMxLi5iZDYyM2I3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvZW50cnktYXJtdi5TCisrKyBiL2FyY2gvYXJtL2tlcm5lbC9lbnRyeS1hcm12LlMKQEAgLTE5MSw2ICsxOTEsOSBAQAogX19pcnFfc3ZjOgogCXN2Y19lbnRyeQogCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJYmwJdHJhY2VfaGFyZGlycXNfb2ZmCisjZW5kaWYKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogCWdldF90aHJlYWRfaW5mbyB0c2sKIAlsZHIJcjgsIFt0c2ssICNUSV9QUkVFTVBUXQkJQCBnZXQgcHJlZW1wdCBjb3VudApAQCAtMjExLDYgKzIxNCwxMCBAQAogI2VuZGlmCiAJbGRyCXIwLCBbc3AsICNTX1BTUl0JCUAgaXJxcyBhcmUgYWxyZWFkeSBkaXNhYmxlZAogCW1zcglzcHNyX2N4c2YsIHIwCisjaWZkZWYgQ09ORklHX1RSQUNFX0lSUUZMQUdTCisJdHN0CXIwLCAjUFNSX0lfQklUCisJYmxlcQl0cmFjZV9oYXJkaXJxc19vbgorI2VuZGlmCiAJbGRtaWEJc3AsIHtyMCAtIHBjfV4JCQlAIGxvYWQgcjAgLSBwYywgY3BzcgogCiAJLmx0b3JnCkBAIC0zOTgsNiArNDA1LDkgQEAKIF9faXJxX3VzcjoKIAl1c3JfZW50cnkKIAorI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUworCWJsCXRyYWNlX2hhcmRpcnFzX29mZgorI2VuZGlmCiAJZ2V0X3RocmVhZF9pbmZvIHRzawogI2lmZGVmIENPTkZJR19QUkVFTVBUCiAJbGRyCXI4LCBbdHNrLCAjVElfUFJFRU1QVF0JCUAgZ2V0IHByZWVtcHQgY291bnQKQEAgLTQxMiw2ICs0MjIsOSBAQAogCXRlcQlyMCwgcjcKIAlzdHJuZQlyMCwgW3IwLCAtcjBdCiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfVFJBQ0VfSVJRRkxBR1MKKwlibAl0cmFjZV9oYXJkaXJxc19vbgorI2VuZGlmCiAKIAltb3YJd2h5LCAjMAogCWIJcmV0X3RvX3VzZXIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMgYi9hcmNoL2FybS9rZXJuZWwvaGVhZC1ub21tdS5TCmluZGV4IGFjOWViM2QuLmYzNTlhMTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9oZWFkLW5vbW11LlMKKysrIGIvYXJjaC9hcm0va2VybmVsL2hlYWQtbm9tbXUuUwpAQCAtOSw3ICs5LDYgQEAKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogICoKICAqICBDb21tb24ga2VybmVsIHN0YXJ0dXAgY29kZSAobm9uLXBhZ2VkIE1NKQotICogICAgZm9yIDMyLWJpdCBDUFVzIHdoaWNoIGhhcyBhIHByb2Nlc3MgSUQgcmVnaXN0ZXIoQ1AxNSkuCiAgKgogICovCiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgpAQCAtNDAsNyArMzksMTEgQEAKIEVOVFJZKHN0ZXh0KQogCW1zcgljcHNyX2MsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERSBAIGVuc3VyZSBzdmMgbW9kZQogCQkJCQkJQCBhbmQgaXJxcyBkaXNhYmxlZAorI2lmbmRlZiBDT05GSUdfQ1BVX0NQMTUKKwlsZHIJcjksID1DT05GSUdfUFJPQ0VTU09SX0lECisjZWxzZQogCW1yYwlwMTUsIDAsIHI5LCBjMCwgYzAJCUAgZ2V0IHByb2Nlc3NvciBpZAorI2VuZGlmCiAJYmwJX19sb29rdXBfcHJvY2Vzc29yX3R5cGUJCUAgcjU9cHJvY2luZm8gcjk9Y3B1aWQKIAltb3ZzCXIxMCwgcjUJCQkJQCBpbnZhbGlkIHByb2Nlc3NvciAocjU9MCk/CiAJYmVxCV9fZXJyb3JfcAkJCQlAIHllcywgZXJyb3IgJ3AnCkBAIC01OCw2ICs2MSw3IEBACiAgKi8KIAkudHlwZQlfX2FmdGVyX3Byb2NfaW5pdCwgJWZ1bmN0aW9uCiBfX2FmdGVyX3Byb2NfaW5pdDoKKyNpZmRlZiBDT05GSUdfQ1BVX0NQMTUKIAltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIHJlYWQgY29udHJvbCByZWcKICNpZmRlZiBDT05GSUdfQUxJR05NRU5UX1RSQVAKIAlvcnIJcjAsIHIwLCAjQ1JfQQpAQCAtNzMsNyArNzcsMTMgQEAKICNpZmRlZiBDT05GSUdfQ1BVX0lDQUNIRV9ESVNBQkxFCiAJYmljCXIwLCByMCwgI0NSX0kKICNlbmRpZgorI2lmZGVmIENPTkZJR19DUFVfSElHSF9WRUNUT1IKKwlvcnIJcjAsIHIwLCAjQ1JfVgorI2Vsc2UKKwliaWMJcjAsIHIwLCAjQ1JfVgorI2VuZGlmCiAJbWNyCXAxNSwgMCwgcjAsIGMxLCBjMCwgMAkJQCB3cml0ZSBjb250cm9sIHJlZworI2VuZGlmIC8qIENPTkZJR19DUFVfQ1AxNSAqLwogCiAJbW92CXBjLCByMTMJCQkJQCBjbGVhciB0aGUgQlNTIGFuZCBqdW1wCiAJCQkJCQlAIHRvIHN0YXJ0X2tlcm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCmluZGV4IDI5ODM2M2QuLjFiMDYxNTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC9tb2R1bGUuYworKysgYi9hcmNoL2FybS9rZXJuZWwvbW9kdWxlLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgvYXJjaC9hcm0va2VybmVsL21vZHVsZS5jCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMiBSdXNzZWxsIEtpbmcuCisgKiAgTW9kaWZpZWQgZm9yIG5vbW11IGJ5IEh5b2sgUy4gQ2hvaQogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpAQCAtMzIsNiArMzMsNyBAQAogI2RlZmluZSBNT0RVTEVfU1RBUlQJKCgodW5zaWduZWQgbG9uZykmX2V0ZXh0ICsgflBHRElSX01BU0spICYgUEdESVJfTUFTSykKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX01NVQogdm9pZCAqbW9kdWxlX2FsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwpAQCAtNDYsNiArNDgsMTIgQEAKIAogCXJldHVybiBfX3ZtYWxsb2NfYXJlYShhcmVhLCBHRlBfS0VSTkVMLCBQQUdFX0tFUk5FTCk7CiB9CisjZWxzZSAvKiBDT05GSUdfTU1VICovCit2b2lkICptb2R1bGVfYWxsb2ModW5zaWduZWQgbG9uZyBzaXplKQoreworCXJldHVybiBzaXplID09IDAgPyBOVUxMIDogdm1hbGxvYyhzaXplKTsKK30KKyNlbmRpZiAvKiAhQ09ORklHX01NVSAqLwogCiB2b2lkIG1vZHVsZV9mcmVlKHN0cnVjdCBtb2R1bGUgKm1vZHVsZSwgdm9pZCAqcmVnaW9uKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvYXJtL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggMzA3OTUzNS4uYmYzNWMxNyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0va2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2FybS9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0yMjEsMTYgKzIyMSwyNiBAQAogCQlwcm9jZXNzb3JfbW9kZXNbcHJvY2Vzc29yX21vZGUocmVncyldLAogCQl0aHVtYl9tb2RlKHJlZ3MpID8gIiAoVCkiIDogIiIsCiAJCWdldF9mcygpID09IGdldF9kcygpID8gImtlcm5lbCIgOiAidXNlciIpOworI2lmIENPTkZJR19DUFVfQ1AxNQogCXsKLQkJdW5zaWduZWQgaW50IGN0cmwsIHRyYW5zYmFzZSwgZGFjOworCQl1bnNpZ25lZCBpbnQgY3RybDsKIAkJICBfX2FzbV9fICgKIAkJIgltcmMgcDE1LCAwLCAlMCwgYzEsIGMwXG4iCi0JCSIJbXJjIHAxNSwgMCwgJTEsIGMyLCBjMFxuIgotCQkiCW1yYyBwMTUsIDAsICUyLCBjMywgYzBcbiIKLQkJOiAiPXIiIChjdHJsKSwgIj1yIiAodHJhbnNiYXNlKSwgIj1yIiAoZGFjKSk7Ci0JCXByaW50aygiQ29udHJvbDogJTA0WCAgVGFibGU6ICUwOFggIERBQzogJTA4WFxuIiwKLQkJICAJY3RybCwgdHJhbnNiYXNlLCBkYWMpOworCQk6ICI9ciIgKGN0cmwpKTsKKwkJcHJpbnRrKCJDb250cm9sOiAlMDRYXG4iLCBjdHJsKTsKIAl9CisjaWZkZWYgQ09ORklHX0NQVV9DUDE1X01NVQorCXsKKwkJdW5zaWduZWQgaW50IHRyYW5zYmFzZSwgZGFjOworCQkgIF9fYXNtX18gKAorCQkiCW1yYyBwMTUsIDAsICUwLCBjMiwgYzBcbiIKKwkJIgltcmMgcDE1LCAwLCAlMSwgYzMsIGMwXG4iCisJCTogIj1yIiAodHJhbnNiYXNlKSwgIj1yIiAoZGFjKSk7CisJCXByaW50aygiVGFibGU6ICUwOFggIERBQzogJTA4WFxuIiwKKwkJICAJdHJhbnNiYXNlLCBkYWMpOworCX0KKyNlbmRpZgorI2VuZGlmCiB9CiAKIHZvaWQgc2hvd19yZWdzKHN0cnVjdCBwdF9yZWdzICogcmVncykKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMgYi9hcmNoL2FybS9rZXJuZWwvdGltZS5jCmluZGV4IDA5YTY3ZDcuLmIwMzAzMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9hcm0va2VybmVsL3RpbWUuYwpAQCAtMzcsOCArMzcsNiBAQAogICovCiBzdHJ1Y3Qgc3lzX3RpbWVyICpzeXN0ZW1fdGltZXI7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLQogLyogdGhpcyBuZWVkcyBhIGJldHRlciBob21lICovCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogCkBAIC02OSwxMCArNjcsMTIgQEAKICAqLwogaW50ICgqc2V0X3J0Yykodm9pZCk7CiAKKyNpZm5kZWYgQ09ORklHX0dFTkVSSUNfVElNRQogc3RhdGljIHVuc2lnbmVkIGxvbmcgZHVtbXlfZ2V0dGltZW9mZnNldCh2b2lkKQogewogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgpAQCAtMjMwLDIwICsyMzAsMTYgQEAKICNkZWZpbmUJZG9fbGVkcygpCiAjZW5kaWYKIAorI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHNlcTsKLQl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYywgbG9zdDsKKwl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYzsKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJCXVzZWMgPSBzeXN0ZW1fdGltZXItPm9mZnNldCgpOwotCi0JCWxvc3QgPSBqaWZmaWVzIC0gd2FsbF9qaWZmaWVzOwotCQlpZiAobG9zdCkKLQkJCXVzZWMgKz0gbG9zdCAqIFVTRUNTX1BFUl9KSUZGWTsKLQogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgKz0geHRpbWUudHZfbnNlYyAvIDEwMDA7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CkBAIC0yNzYsNyArMjcyLDYgQEAKIAkgKiBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQogCSAqLwogCW5zZWMgLT0gc3lzdGVtX3RpbWVyLT5vZmZzZXQoKSAqIE5TRUNfUEVSX1VTRUM7Ci0JbnNlYyAtPSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiBUSUNLX05TRUM7CiAKIAl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwogCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CkBAIC0yOTEsNiArMjg2LDcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOworI2VuZGlmIC8qICFDT05GSUdfR0VORVJJQ19USU1FICovCiAKIC8qKgogICogc2F2ZV90aW1lX2RlbHRhIC0gU2F2ZSB0aGUgb2Zmc2V0IGJldHdlZW4gc3lzdGVtIHRpbWUgYW5kIFJUQyB0aW1lCkBAIC0zMzMsNyArMzI5LDcgQEAKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CiAJZG9fbGVkcygpOwogCWRvX3NldF9ydGMoKTsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTUwMCw4ICs0OTYsMTAgQEAKIAogdm9pZCBfX2luaXQgdGltZV9pbml0KHZvaWQpCiB7CisjaWZuZGVmIENPTkZJR19HRU5FUklDX1RJTUUKIAlpZiAoc3lzdGVtX3RpbWVyLT5vZmZzZXQgPT0gTlVMTCkKIAkJc3lzdGVtX3RpbWVyLT5vZmZzZXQgPSBkdW1teV9nZXR0aW1lb2Zmc2V0OworI2VuZGlmCiAJc3lzdGVtX3RpbWVyLT5pbml0KCk7CiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0va2VybmVsL3RyYXBzLmMgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwppbmRleCBhZWVlZDgwLi5iZWRlMzgwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL2FybS9rZXJuZWwvdHJhcHMuYwpAQCAtMTkxLDcgKzE5MSw3IEBACiAJaWYgKHRzayAhPSBjdXJyZW50KQogCQlmcCA9IHRocmVhZF9zYXZlZF9mcCh0c2spOwogCWVsc2UKLQkJYXNtKCJtb3YlPyAlMCwgZnAiIDogIj1yIiAoZnApKTsKKwkJYXNtKCJtb3YgJTAsIGZwIiA6ICI9ciIgKGZwKSA6IDogImNjIik7CiAKIAljX2JhY2t0cmFjZShmcCwgMHgxMCk7CiAJYmFycmllcigpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmMKaW5kZXggMDk4NWIxYy4uZGNmNjEzNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMC5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlICJnZW5lcmljLmgiCisjaW5jbHVkZSAiY2xvY2suaCIKIAogc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBhdDkxcm05MjAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0gewogCXsKQEAgLTI2LDg3ICsyNywyMjQgQEAKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1BJLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NQSSksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9TU0MyLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1NTQzIpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfU1NDMSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9TU0MxKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1NTQzAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfU1NDMCksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9VUzMsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVVMzKSwKLQkJLmxlbmd0aAkJPSBTWl8xNkssCi0JCS50eXBlCQk9IE1UX0RFVklDRSwKLQl9LCB7Ci0JCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1VTMiwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9VUzIpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVVMxLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VTMSksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9VUzAsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfVVMwKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFSTTkyMDBfQkFTRV9TUEkpLAogCQkubGVuZ3RoCQk9IFNaXzE2SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfRU1BQywKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9FTUFDKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFSTTkyMDBfQkFTRV9FTUFDKSwKIAkJLmxlbmd0aAkJPSBTWl8xNkssCiAJCS50eXBlCQk9IE1UX0RFVklDRSwKIAl9LCB7CiAJCS52aXJ0dWFsCT0gQVQ5MV9WQV9CQVNFX1RXSSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9UV0kpLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVJNOTIwMF9CQVNFX1RXSSksCiAJCS5sZW5ndGgJCT0gU1pfMTZLLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwgewogCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9NQ0ksCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihBVDkxX0JBU0VfTUNJKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFSTTkyMDBfQkFTRV9NQ0kpLAogCQkubGVuZ3RoCQk9IFNaXzE2SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVURQLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1VEUCksCi0JCS5sZW5ndGgJCT0gU1pfMTZLLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UsCi0JfSwgewotCQkudmlydHVhbAk9IEFUOTFfVkFfQkFTRV9UQ0IxLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9CQVNFX1RDQjEpLAotCQkubGVuZ3RoCQk9IFNaXzE2SywKLQkJLnR5cGUJCT0gTVRfREVWSUNFLAotCX0sIHsKLQkJLnZpcnR1YWwJPSBBVDkxX1ZBX0JBU0VfVENCMCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFfQkFTRV9UQ0IwKSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEFUOTFSTTkyMDBfQkFTRV9VRFApLAogCQkubGVuZ3RoCQk9IFNaXzE2SywKIAkJLnR5cGUJCT0gTVRfREVWSUNFLAogCX0sIHsKIAkJLnZpcnR1YWwJPSBBVDkxX1NSQU1fVklSVF9CQVNFLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MV9TUkFNX0JBU0UpLAotCQkubGVuZ3RoCQk9IEFUOTFfU1JBTV9TSVpFLAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oQVQ5MVJNOTIwMF9TUkFNX0JBU0UpLAorCQkubGVuZ3RoCQk9IEFUOTFSTTkyMDBfU1JBTV9TSVpFLAogCQkudHlwZQkJPSBNVF9ERVZJQ0UsCiAJfSwKIH07CiAKLXZvaWQgX19pbml0IGF0OTFybTkyMDBfbWFwX2lvKHZvaWQpCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIENsb2NrcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAqIFRoZSBwZXJpcGhlcmFsIGNsb2Nrcy4KKyAqLworc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKKwkubmFtZQkJPSAidWRjX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VEUCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0geworCS5uYW1lCQk9ICJvaGNpX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VIUCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIGV0aGVyX2NsayA9IHsKKwkubmFtZQkJPSAiZXRoZXJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfRU1BQywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7CisJLm5hbWUJCT0gIm1jaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9NQ0ksCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0geworCS5uYW1lCQk9ICJ0d2lfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVFdJLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQwX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMCwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7CisJLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9VUzEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0geworCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfVVMyLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKKwkubmFtZQkJPSAidXNhcnQzX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1VTMywKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7CisJLm5hbWUJCT0gInNwaV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9TUEksCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwaW9BX2NsayA9IHsKKwkubmFtZQkJPSAicGlvQV9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9BLAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9Oworc3RhdGljIHN0cnVjdCBjbGsgcGlvQl9jbGsgPSB7CisJLm5hbWUJCT0gInBpb0JfY2xrIiwKKwkucG1jX21hc2sJPSAxIDw8IEFUOTFSTTkyMDBfSURfUElPQiwKKwkudHlwZQkJPSBDTEtfVFlQRV9QRVJJUEhFUkFMLAorfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIHBpb0NfY2xrID0geworCS5uYW1lCQk9ICJwaW9DX2NsayIsCisJLnBtY19tYXNrCT0gMSA8PCBBVDkxUk05MjAwX0lEX1BJT0MsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUEVSSVBIRVJBTCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwaW9EX2NsayA9IHsKKwkubmFtZQkJPSAicGlvRF9jbGsiLAorCS5wbWNfbWFzawk9IDEgPDwgQVQ5MVJNOTIwMF9JRF9QSU9ELAorCS50eXBlCQk9IENMS19UWVBFX1BFUklQSEVSQUwsCit9OworCitzdGF0aWMgc3RydWN0IGNsayAqcGVyaXBoX2Nsb2Nrc1tdIF9faW5pdGRhdGEgPSB7CisJJnBpb0FfY2xrLAorCSZwaW9CX2NsaywKKwkmcGlvQ19jbGssCisJJnBpb0RfY2xrLAorCSZ1c2FydDBfY2xrLAorCSZ1c2FydDFfY2xrLAorCSZ1c2FydDJfY2xrLAorCSZ1c2FydDNfY2xrLAorCSZtbWNfY2xrLAorCSZ1ZGNfY2xrLAorCSZ0d2lfY2xrLAorCSZzcGlfY2xrLAorCS8vIHNzYyAwIC4uIHNzYzIKKwkvLyB0YzAgLi4gdGM1CisJJm9oY2lfY2xrLAorCSZldGhlcl9jbGssCisJLy8gaXJxMCAuLiBpcnE2Cit9OworCisvKgorICogVGhlIGZvdXIgcHJvZ3JhbW1hYmxlIGNsb2Nrcy4KKyAqIFlvdSBtdXN0IGNvbmZpZ3VyZSBwaW4gbXVsdGlwbGV4aW5nIHRvIGJyaW5nIHRoZXNlIHNpZ25hbHMgb3V0LgorICovCitzdGF0aWMgc3RydWN0IGNsayBwY2swID0geworCS5uYW1lCQk9ICJwY2swIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0swLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMCwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2sxID0geworCS5uYW1lCQk9ICJwY2sxIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0sxLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMSwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2syID0geworCS5uYW1lCQk9ICJwY2syIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0syLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMiwKK307CitzdGF0aWMgc3RydWN0IGNsayBwY2szID0geworCS5uYW1lCQk9ICJwY2szIiwKKwkucG1jX21hc2sJPSBBVDkxX1BNQ19QQ0szLAorCS50eXBlCQk9IENMS19UWVBFX1BST0dSQU1NQUJMRSwKKwkuaWQJCT0gMywKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxcm05MjAwX3JlZ2lzdGVyX2Nsb2Nrcyh2b2lkKQogewotCWlvdGFibGVfaW5pdChhdDkxcm05MjAwX2lvX2Rlc2MsIEFSUkFZX1NJWkUoYXQ5MXJtOTIwMF9pb19kZXNjKSk7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwZXJpcGhfY2xvY2tzKTsgaSsrKQorCQljbGtfcmVnaXN0ZXIocGVyaXBoX2Nsb2Nrc1tpXSk7CisKKwljbGtfcmVnaXN0ZXIoJnBjazApOworCWNsa19yZWdpc3RlcigmcGNrMSk7CisJY2xrX3JlZ2lzdGVyKCZwY2syKTsKKwljbGtfcmVnaXN0ZXIoJnBjazMpOwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEdQSU8KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgYXQ5MXJtOTIwMF9ncGlvW10gPSB7CisJeworCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9BLAorCQkub2Zmc2V0CQk9IEFUOTFfUElPQSwKKwkJLmNsb2NrCQk9ICZwaW9BX2NsaywKKwl9LCB7CisJCS5pZAkJPSBBVDkxUk05MjAwX0lEX1BJT0IsCisJCS5vZmZzZXQJCT0gQVQ5MV9QSU9CLAorCQkuY2xvY2sJCT0gJnBpb0JfY2xrLAorCX0sIHsKKwkJLmlkCQk9IEFUOTFSTTkyMDBfSURfUElPQywKKwkJLm9mZnNldAkJPSBBVDkxX1BJT0MsCisJCS5jbG9jawkJPSAmcGlvQ19jbGssCisJfSwgeworCQkuaWQJCT0gQVQ5MVJNOTIwMF9JRF9QSU9ELAorCQkub2Zmc2V0CQk9IEFUOTFfUElPRCwKKwkJLmNsb2NrCQk9ICZwaW9EX2NsaywKKwl9Cit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIEFUOTFSTTkyMDAgcHJvY2Vzc29yIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwordm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0aWFsaXplKHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaywgdW5zaWduZWQgc2hvcnQgYmFua3MpCit7CisJLyogTWFwIHBlcmlwaGVyYWxzICovCisJaW90YWJsZV9pbml0KGF0OTFybTkyMDBfaW9fZGVzYywgQVJSQVlfU0laRShhdDkxcm05MjAwX2lvX2Rlc2MpKTsKKworCS8qIEluaXQgY2xvY2sgc3Vic3lzdGVtICovCisJYXQ5MV9jbG9ja19pbml0KG1haW5fY2xvY2spOworCisJLyogUmVnaXN0ZXIgdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBjbG9ja3MgKi8KKwlhdDkxcm05MjAwX3JlZ2lzdGVyX2Nsb2NrcygpOworCisJLyogSW5pdGlhbGl6ZSBHUElPIHN1YnN5c3RlbSAqLworCWF0OTFfZ3Bpb19pbml0KGF0OTFybTkyMDBfZ3BpbywgYmFua3MpOworfQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAgSW50ZXJydXB0IGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCiAvKgogICogVGhlIGRlZmF1bHQgaW50ZXJydXB0IHByaW9yaXR5IGxldmVscyAoMCA9IGxvd2VzdCwgNyA9IGhpZ2hlc3QpLgogICovCkBAIC0xNDUsMTAgKzI4MywxNCBAQAogCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTYpICovCiB9OwogCi12b2lkIF9faW5pdCBhdDkxcm05MjAwX2luaXRfaXJxKHVuc2lnbmVkIGludCBwcmlvcml0eVtOUl9BSUNfSVJRU10pCit2b2lkIF9faW5pdCBhdDkxcm05MjAwX2luaXRfaW50ZXJydXB0cyh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbTlJfQUlDX0lSUVNdKQogewogCWlmICghcHJpb3JpdHkpCiAJCXByaW9yaXR5ID0gYXQ5MXJtOTIwMF9kZWZhdWx0X2lycV9wcmlvcml0eTsKIAorCS8qIEluaXRpYWxpemUgdGhlIEFJQyBpbnRlcnJ1cHQgY29udHJvbGxlciAqLwogCWF0OTFfYWljX2luaXQocHJpb3JpdHkpOworCisJLyogRW5hYmxlIEdQSU8gaW50ZXJydXB0cyAqLworCWF0OTFfZ3Bpb19pcnFfc2V0dXAoKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC0xYXJtLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtMWFybS5jCmluZGV4IGRjNzllMDkuLjM2ZWVjZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC0xYXJtLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLTFhcm0uYwpAQCAtMzQsMjAgKzM0LDExIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IG9uZWFybV9pbml0X2lycSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgQUlDIGNvbnRyb2xsZXIgKi8KLQlhdDkxcm05MjAwX2luaXRfaXJxKE5VTEwpOwotCi0JLyogU2V0IHVwIHRoZSBHUElPIGludGVycnVwdHMgKi8KLQlhdDkxX2dwaW9faXJxX3NldHVwKFBRRlBfR1BJT19CQU5LUyk7Ci19CiAKIC8qCiAgKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgpAQCAtNjIsMTUgKzUzLDE4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBvbmVhcm1fbWFwX2lvKHZvaWQpCiB7Ci0JYXQ5MXJtOTIwMF9tYXBfaW8oKTsKLQotCS8qIEluaXRpYWxpemUgY2xvY2tzOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2Nsb2NrX2luaXQoMTg0MzIwMDApOworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KKwlhdDkxcm05MjAwX2luaXRpYWxpemUoMTg0MzIwMDAsIEFUOTFSTTkyMDBfUFFGUCk7CiAKIAkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCiAJYXQ5MV9pbml0X3NlcmlhbCgmb25lYXJtX3VhcnRfY29uZmlnKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IG9uZWFybV9pbml0X2lycSh2b2lkKQoreworCWF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBvbmVhcm1fZXRoX2RhdGEgPSB7CiAJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAogCS5pc19ybWlpCT0gMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jYXJtZXZhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY2FybWV2YS5jCmluZGV4IDJjMTM4YjUuLjUwZTUxMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jYXJtZXZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNhcm1ldmEuYwpAQCAtMzUsMjAgKzM1LDExIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGNhcm1ldmFfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIEFJQyBjb250cm9sbGVyICovCi0JYXQ5MXJtOTIwMF9pbml0X2lycShOVUxMKTsKLQotCS8qIFNldCB1cCB0aGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JYXQ5MV9ncGlvX2lycV9zZXR1cChCR0FfR1BJT19CQU5LUyk7Ci19CiAKIC8qCiAgKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgpAQCAtNjMsMTUgKzU0LDE5IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjYXJtZXZhX21hcF9pbyh2b2lkKQogewotCWF0OTFybTkyMDBfbWFwX2lvKCk7Ci0KLQkvKiBJbml0aWFsaXplIGNsb2NrczogMjAuMDAwIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9jbG9ja19pbml0KDIwMDAwMDAwKTsKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMjAuMDAwIE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDIwMDAwMDAwLCBBVDkxUk05MjAwX0JHQSk7CiAKIAkvKiBTZXR1cCB0aGUgc2VyaWFsIHBvcnRzIGFuZCBjb25zb2xlICovCiAJYXQ5MV9pbml0X3NlcmlhbCgmY2FybWV2YV91YXJ0X2NvbmZpZyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBjYXJtZXZhX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKKwogc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgY2FybWV2YV9ldGhfZGF0YSA9IHsKIAkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCiAJLmlzX3JtaWkJPSAxLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjMzNy5jCmluZGV4IDc5NGQzZmIuLjhlZWFlNDkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1jc2IzMzcuYworKysgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiMzM3LmMKQEAgLTM0LDIwICszNCwxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBjc2IzMzdfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIEFJQyBjb250cm9sbGVyICovCi0JYXQ5MXJtOTIwMF9pbml0X2lycShOVUxMKTsKLQotCS8qIFNldCB1cCB0aGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JYXQ5MV9ncGlvX2lycV9zZXR1cChCR0FfR1BJT19CQU5LUyk7Ci19CiAKIC8qCiAgKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgpAQCAtNjIsMTAgKzUzLDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGNzYjMzN19tYXBfaW8odm9pZCkKIHsKLQlhdDkxcm05MjAwX21hcF9pbygpOwotCi0JLyogSW5pdGlhbGl6ZSBjbG9ja3M6IDMuNjg2NCBNSHogY3J5c3RhbCAqLwotCWF0OTFfY2xvY2tfaW5pdCgzNjg2NDAwKTsKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMy42ODY0IE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDM2ODY0MDAsIEFUOTFSTTkyMDBfQkdBKTsKIAogCS8qIFNldHVwIHRoZSBMRURzICovCiAJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIwLCBBVDkxX1BJTl9QQjEpOwpAQCAtNzQsNiArNjMsMTEgQEAKIAlhdDkxX2luaXRfc2VyaWFsKCZjc2IzMzdfdWFydF9jb25maWcpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgY3NiMzM3X2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGNzYjMzN19ldGhfZGF0YSA9IHsKIAkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzIsCiAJLmlzX3JtaWkJPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCmluZGV4IGM4YjZmMzMuLmEyOWZhMGU4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtY3NiNjM3LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWNzYjYzNy5jCkBAIC0zMywyMCArMzMsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgY3NiNjM3X2luaXRfaXJxKHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBBSUMgY29udHJvbGxlciAqLwotCWF0OTFybTkyMDBfaW5pdF9pcnEoTlVMTCk7Ci0KLQkvKiBTZXQgdXAgdGhlIEdQSU8gaW50ZXJydXB0cyAqLwotCWF0OTFfZ3Bpb19pcnFfc2V0dXAoQkdBX0dQSU9fQkFOS1MpOwotfQogCiAvKgogICogU2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbi4KQEAgLTYxLDEwICs1Miw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBjc2I2MzdfbWFwX2lvKHZvaWQpCiB7Ci0JYXQ5MXJtOTIwMF9tYXBfaW8oKTsKLQotCS8qIEluaXRpYWxpemUgY2xvY2tzOiAzLjY4NjQgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2Nsb2NrX2luaXQoMzY4NjQwMCk7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDMuNjg2NCBNSHogY3J5c3RhbCAqLworCWF0OTFybTkyMDBfaW5pdGlhbGl6ZSgzNjg2NDAwLCBBVDkxUk05MjAwX0JHQSk7CiAKIAkvKiBTZXR1cCB0aGUgTEVEcyAqLwogCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BCMiwgQVQ5MV9QSU5fUEIyKTsKQEAgLTczLDYgKzYyLDExIEBACiAJYXQ5MV9pbml0X3NlcmlhbCgmY3NiNjM3X3VhcnRfY29uZmlnKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGNzYjYzN19pbml0X2lycSh2b2lkKQoreworCWF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBjc2I2MzdfZXRoX2RhdGEgPSB7CiAJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEMwLAogCS5pc19ybWlpCT0gMCwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1kay5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKaW5kZXggNjU4NzMwMy4uYzY5OWYzOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWRrLmMKQEAgLTM3LDIwICszNywxMSBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvYm9hcmQuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKICNpbmNsdWRlICJnZW5lcmljLmgiCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBka19pbml0X2lycSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgQUlDIGNvbnRyb2xsZXIgKi8KLQlhdDkxcm05MjAwX2luaXRfaXJxKE5VTEwpOwotCi0JLyogU2V0IHVwIHRoZSBHUElPIGludGVycnVwdHMgKi8KLQlhdDkxX2dwaW9faXJxX3NldHVwKEJHQV9HUElPX0JBTktTKTsKLX0KIAogLyoKICAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCkBAIC02NSwxMCArNTYsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQgZGtfbWFwX2lvKHZvaWQpCiB7Ci0JYXQ5MXJtOTIwMF9tYXBfaW8oKTsKLQotCS8qIEluaXRpYWxpemUgY2xvY2tzOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2Nsb2NrX2luaXQoMTg0MzIwMDApOworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxOC40MzIgTUh6IGNyeXN0YWwgKi8KKwlhdDkxcm05MjAwX2luaXRpYWxpemUoMTg0MzIwMDAsIEFUOTFSTTkyMDBfQkdBKTsKIAogCS8qIFNldHVwIHRoZSBMRURzICovCiAJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEIyLCBBVDkxX1BJTl9QQjIpOwpAQCAtNzcsNiArNjYsMTEgQEAKIAlhdDkxX2luaXRfc2VyaWFsKCZka191YXJ0X2NvbmZpZyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBka19pbml0X2lycSh2b2lkKQoreworCWF0OTFybTkyMDBfaW5pdF9pbnRlcnJ1cHRzKE5VTEwpOworfQorCiBzdGF0aWMgc3RydWN0IGF0OTFfZXRoX2RhdGEgX19pbml0ZGF0YSBka19ldGhfZGF0YSA9IHsKIAkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCiAJLmlzX3JtaWkJPSAxLApAQCAtMTI4LDYgKzEyMiwyOSBAQAogI2VuZGlmCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBka19uYW5kX3BhcnRpdGlvbltdID0geworCXsKKwkJLm5hbWUJPSAiTkFORCBQYXJ0aXRpb24gMSIsCisJCS5vZmZzZXQJPSAwLAorCQkuc2l6ZQk9IE1URFBBUlRfU0laX0ZVTEwsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqbmFuZF9wYXJ0aXRpb25zKGludCBzaXplLCBpbnQgKm51bV9wYXJ0aXRpb25zKQoreworCSpudW1fcGFydGl0aW9ucyA9IEFSUkFZX1NJWkUoZGtfbmFuZF9wYXJ0aXRpb24pOworCXJldHVybiBka19uYW5kX3BhcnRpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBfX2luaXRkYXRhIGRrX25hbmRfZGF0YSA9IHsKKwkuYWxlCQk9IDIyLAorCS5jbGUJCT0gMjEsCisJLmRldF9waW4JPSBBVDkxX1BJTl9QQjEsCisJLnJkeV9waW4JPSBBVDkxX1BJTl9QQzIsCisJLy8gLmVuYWJsZV9waW4JPSAuLi4gbm90IHRoZXJlCisJLnBhcnRpdGlvbl9pbmZvCT0gbmFuZF9wYXJ0aXRpb25zLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGRrX2JvYXJkX2luaXQodm9pZCkKIHsKIAkvKiBTZXJpYWwgKi8KQEAgLTE1Myw2ICsxNzAsOCBAQAogCWF0OTFfc2V0X2dwaW9fb3V0cHV0KEFUOTFfUElOX1BCNywgMSk7CS8qIHRoaXMgTU1DIGNhcmQgc2xvdCBjYW4gb3B0aW9uYWxseSB1c2UgU1BJIHNpZ25hbGluZyAoQ1MzKS4gKi8KIAlhdDkxX2FkZF9kZXZpY2VfbW1jKCZka19tbWNfZGF0YSk7CiAjZW5kaWYKKwkvKiBOQU5EICovCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmRrX25hbmRfZGF0YSk7CiAJLyogVkdBICovCiAvLwlka19hZGRfZGV2aWNlX3ZpZGVvKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWI5MjAwLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWI5MjAwLmMKaW5kZXggYTNlMmRmOS4uYzZlMGQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWViOTIwMC5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lYjkyMDAuYwpAQCAtMzUsMjAgKzM1LDExIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGViOTIwMF9pbml0X2lycSh2b2lkKQotewotCS8qIEluaXRpYWxpemUgQUlDIGNvbnRyb2xsZXIgKi8KLQlhdDkxcm05MjAwX2luaXRfaXJxKE5VTEwpOwotCi0JLyogU2V0IHVwIHRoZSBHUElPIGludGVycnVwdHMgKi8KLQlhdDkxX2dwaW9faXJxX3NldHVwKEJHQV9HUElPX0JBTktTKTsKLX0KIAogLyoKICAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCkBAIC02MywxNSArNTQsMTggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGViOTIwMF9tYXBfaW8odm9pZCkKIHsKLQlhdDkxcm05MjAwX21hcF9pbygpOwotCi0JLyogSW5pdGlhbGl6ZSBjbG9ja3M6IDE4LjQzMiBNSHogY3J5c3RhbCAqLwotCWF0OTFfY2xvY2tfaW5pdCgxODQzMjAwMCk7CisJLyogSW5pdGlhbGl6ZSBwcm9jZXNzb3I6IDE4LjQzMiBNSHogY3J5c3RhbCAqLworCWF0OTFybTkyMDBfaW5pdGlhbGl6ZSgxODQzMjAwMCwgQVQ5MVJNOTIwMF9CR0EpOwogCiAJLyogU2V0dXAgdGhlIHNlcmlhbCBwb3J0cyBhbmQgY29uc29sZSAqLwogCWF0OTFfaW5pdF9zZXJpYWwoJmViOTIwMF91YXJ0X2NvbmZpZyk7CiB9CiAKK3N0YXRpYyB2b2lkIF9faW5pdCBlYjkyMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxcm05MjAwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKwogc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgZWI5MjAwX2V0aF9kYXRhID0gewogCS5waHlfaXJxX3Bpbgk9IEFUOTFfUElOX1BDNCwKIAkuaXNfcm1paQk9IDEsCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQtZWsuYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCmluZGV4IDg2ODE5MjMuLjgzMGViNzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1lay5jCkBAIC0zNywyMCArMzcsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIEFJQyBjb250cm9sbGVyICovCi0JYXQ5MXJtOTIwMF9pbml0X2lycShOVUxMKTsKLQotCS8qIFNldCB1cCB0aGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JYXQ5MV9ncGlvX2lycV9zZXR1cChCR0FfR1BJT19CQU5LUyk7Ci19CiAKIC8qCiAgKiBTZXJpYWwgcG9ydCBjb25maWd1cmF0aW9uLgpAQCAtNjUsMTAgKzU2LDggQEAKIAogc3RhdGljIHZvaWQgX19pbml0IGVrX21hcF9pbyh2b2lkKQogewotCWF0OTFybTkyMDBfbWFwX2lvKCk7Ci0KLQkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDE4NDMyMDAwLCBBVDkxUk05MjAwX0JHQSk7CiAKIAkvKiBTZXR1cCB0aGUgTEVEcyAqLwogCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BCMSwgQVQ5MV9QSU5fUEIyKTsKQEAgLTc3LDYgKzY2LDExIEBACiAJYXQ5MV9pbml0X3NlcmlhbCgmZWtfdWFydF9jb25maWcpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgZWtfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxcm05MjAwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKwogc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEgZWtfZXRoX2RhdGEgPSB7CiAJLnBoeV9pcnFfcGluCT0gQVQ5MV9QSU5fUEM0LAogCS5pc19ybWlpCT0gMSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1rYWZhLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQta2FmYS5jCmluZGV4IGJmNzYwYzUuLjkxZTMwMTkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ib2FyZC1rYWZhLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWthZmEuYwpAQCAtMzQsMjAgKzM0LDExIEBACiAjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CiAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ib2FyZC5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8uaD4KIAogI2luY2x1ZGUgImdlbmVyaWMuaCIKIAotc3RhdGljIHZvaWQgX19pbml0IGthZmFfaW5pdF9pcnEodm9pZCkKLXsKLQkvKiBJbml0aWFsaXplIEFJQyBjb250cm9sbGVyICovCi0JYXQ5MXJtOTIwMF9pbml0X2lycShOVUxMKTsKLQotCS8qIFNldCB1cCB0aGUgR1BJTyBpbnRlcnJ1cHRzICovCi0JYXQ5MV9ncGlvX2lycV9zZXR1cChQUUZQX0dQSU9fQkFOS1MpOwotfQogCiAvKgogICogU2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbi4KQEAgLTYyLDEwICs1Myw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBrYWZhX21hcF9pbyh2b2lkKQogewotCWF0OTFybTkyMDBfbWFwX2lvKCk7Ci0KLQkvKiBJbml0aWFsaXplIGNsb2NrczogMTguNDMyIE1IeiBjcnlzdGFsICovCi0JYXQ5MV9jbG9ja19pbml0KDE4NDMyMDAwKTsKKwkvKiBJbml0aWFsaXplIHByb2Nlc3NvcjogMTguNDMyIE1IeiBjcnlzdGFsICovCisJYXQ5MXJtOTIwMF9pbml0aWFsaXplKDE4NDMyMDAwLCBBVDkxUk05MjAwX1BRRlApOwogCiAJLyogU2V0IHVwIHRoZSBMRURzICovCiAJYXQ5MV9pbml0X2xlZHMoQVQ5MV9QSU5fUEI0LCBBVDkxX1BJTl9QQjQpOwpAQCAtNzQsNiArNjMsMTEgQEAKIAlhdDkxX2luaXRfc2VyaWFsKCZrYWZhX3VhcnRfY29uZmlnKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0IGthZmFfaW5pdF9pcnEodm9pZCkKK3sKKwlhdDkxcm05MjAwX2luaXRfaW50ZXJydXB0cyhOVUxMKTsKK30KKwogc3RhdGljIHN0cnVjdCBhdDkxX2V0aF9kYXRhIF9faW5pdGRhdGEga2FmYV9ldGhfZGF0YSA9IHsKIAkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQzQsCiAJLmlzX3JtaWkJPSAwLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWtiOTIwMi5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWtiOTIwMi5jCmluZGV4IGYwNmQyYjUuLjI3MmZlNDNiIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvYm9hcmQta2I5MjAyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2JvYXJkLWtiOTIwMi5jCkBAIC0zNSwyMCArMzUsMTEgQEAKICNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KIAotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2JvYXJkLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgogCiAjaW5jbHVkZSAiZ2VuZXJpYy5oIgogCi1zdGF0aWMgdm9pZCBfX2luaXQga2I5MjAyX2luaXRfaXJxKHZvaWQpCi17Ci0JLyogSW5pdGlhbGl6ZSBBSUMgY29udHJvbGxlciAqLwotCWF0OTFybTkyMDBfaW5pdF9pcnEoTlVMTCk7Ci0KLQkvKiBTZXQgdXAgdGhlIEdQSU8gaW50ZXJydXB0cyAqLwotCWF0OTFfZ3Bpb19pcnFfc2V0dXAoUFFGUF9HUElPX0JBTktTKTsKLX0KIAogLyoKICAqIFNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24uCkBAIC02MywxMCArNTQsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2luaXQga2I5MjAyX21hcF9pbyh2b2lkKQogewotCWF0OTFybTkyMDBfbWFwX2lvKCk7Ci0KLQkvKiBJbml0aWFsaXplIGNsb2NrczogMTAgTUh6IGNyeXN0YWwgKi8KLQlhdDkxX2Nsb2NrX2luaXQoMTAwMDAwMDApOworCS8qIEluaXRpYWxpemUgcHJvY2Vzc29yOiAxMCBNSHogY3J5c3RhbCAqLworCWF0OTFybTkyMDBfaW5pdGlhbGl6ZSgxMDAwMDAwMCwgQVQ5MVJNOTIwMF9QUUZQKTsKIAogCS8qIFNldCB1cCB0aGUgTEVEcyAqLwogCWF0OTFfaW5pdF9sZWRzKEFUOTFfUElOX1BDMTksIEFUOTFfUElOX1BDMTgpOwpAQCAtNzUsNiArNjQsMTEgQEAKIAlhdDkxX2luaXRfc2VyaWFsKCZrYjkyMDJfdWFydF9jb25maWcpOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQga2I5MjAyX2luaXRfaXJxKHZvaWQpCit7CisJYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHMoTlVMTCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgYXQ5MV9ldGhfZGF0YSBfX2luaXRkYXRhIGtiOTIwMl9ldGhfZGF0YSA9IHsKIAkucGh5X2lycV9waW4JPSBBVDkxX1BJTl9QQjI5LAogCS5pc19ybWlpCT0gMCwKQEAgLTk1LDYgKzg5LDI5IEBACiAJLndpcmU0CQk9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gX19pbml0ZGF0YSBrYjkyMDJfbmFuZF9wYXJ0aXRpb25bXSA9IHsKKwl7CisJCS5uYW1lCT0gIm5hbmRfZnMiLAorCQkub2Zmc2V0CT0gMCwKKwkJLnNpemUJPSBNVERQQVJUX1NJWl9GVUxMLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gKm5hbmRfcGFydGl0aW9ucyhpbnQgc2l6ZSwgaW50ICpudW1fcGFydGl0aW9ucykKK3sKKwkqbnVtX3BhcnRpdGlvbnMgPSBBUlJBWV9TSVpFKGtiOTIwMl9uYW5kX3BhcnRpdGlvbik7CisJcmV0dXJuIGtiOTIwMl9uYW5kX3BhcnRpdGlvbjsKK30KKworc3RhdGljIHN0cnVjdCBhdDkxX25hbmRfZGF0YSBfX2luaXRkYXRhIGtiOTIwMl9uYW5kX2RhdGEgPSB7CisJLmFsZQkJPSAyMiwKKwkuY2xlCQk9IDIxLAorCS8vIC5kZXRfcGluCT0gLi4uIG5vdCB0aGVyZQorCS5yZHlfcGluCT0gQVQ5MV9QSU5fUEMyOSwKKwkuZW5hYmxlX3Bpbgk9IEFUOTFfUElOX1BDMjgsCisJLnBhcnRpdGlvbl9pbmZvCT0gbmFuZF9wYXJ0aXRpb25zLAorfTsKKwogc3RhdGljIHZvaWQgX19pbml0IGtiOTIwMl9ib2FyZF9pbml0KHZvaWQpCiB7CiAJLyogU2VyaWFsICovCkBAIC0xMTEsNiArMTI4LDggQEAKIAlhdDkxX2FkZF9kZXZpY2VfaTJjKCk7CiAJLyogU1BJICovCiAJYXQ5MV9hZGRfZGV2aWNlX3NwaShOVUxMLCAwKTsKKwkvKiBOQU5EICovCisJYXQ5MV9hZGRfZGV2aWNlX25hbmQoJmtiOTIwMl9uYW5kX2RhdGEpOwogfQogCiBNQUNISU5FX1NUQVJUKEtCOTIwMCwgIktCOTIweCIpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5jCmluZGV4IGVkYzJjYzguLmE0M2IwNjEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5jCkBAIC0yOSw3ICsyOSw3IEBACiAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KIAotI2luY2x1ZGUgImdlbmVyaWMuaCIKKyNpbmNsdWRlICJjbG9jay5oIgogCiAKIC8qCkBAIC0zOCwyMyArMzgsMTUgQEAKICAqIFBMTEIgYmUgdXNlZCBhdCBvdGhlciByYXRlcyAob24gYm9hcmRzIHRoYXQgZG9uJ3QgbmVlZCBVU0IpLCBldGMuCiAgKi8KIAotc3RydWN0IGNsayB7Ci0JY29uc3QgY2hhcgkqbmFtZTsJCS8qIHVuaXF1ZSBjbG9jayBuYW1lICovCi0JY29uc3QgY2hhcgkqZnVuY3Rpb247CS8qIGZ1bmN0aW9uIG9mIHRoZSBjbG9jayAqLwotCXN0cnVjdCBkZXZpY2UJKmRldjsJCS8qIGRldmljZSBhc3NvY2lhdGVkIHdpdGggZnVuY3Rpb24gKi8KLQl1bnNpZ25lZCBsb25nCXJhdGVfaHo7Ci0Jc3RydWN0IGNsawkqcGFyZW50OwotCXUzMgkJcG1jX21hc2s7Ci0Jdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7Ci0JdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLwotCXVuc2lnbmVkCXByaW1hcnk6MTsKLQl1bnNpZ25lZAlwbGw6MTsKLQl1bnNpZ25lZAlwcm9ncmFtbWFibGU6MTsKLQl1MTYJCXVzZXJzOwotfTsKKyNkZWZpbmUgY2xrX2lzX3ByaW1hcnkoeCkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1BSSU1BUlkpCisjZGVmaW5lIGNsa19pc19wcm9ncmFtbWFibGUoeCkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1BST0dSQU1NQUJMRSkKKyNkZWZpbmUgY2xrX2lzX3BlcmlwaGVyYWwoeCkJKCh4KS0+dHlwZSAmIENMS19UWVBFX1BFUklQSEVSQUwpCiAKLXN0YXRpYyBzcGlubG9ja190CWNsa19sb2NrOwotc3RhdGljIHUzMgkJYXQ5MV9wbGxiX3VzYl9pbml0OworCitzdGF0aWMgTElTVF9IRUFEKGNsb2Nrcyk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNsa19sb2NrKTsKKworc3RhdGljIHUzMiBhdDkxX3BsbGJfdXNiX2luaXQ7CiAKIC8qCiAgKiBGb3VyIHByaW1hcnkgY2xvY2sgc291cmNlczogIHR3byBjcnlzdGFsIG9zY2lsbGF0b3JzICgzMkssIG1haW4pLCBhbmQKQEAgLTY3LDIxICs1OSwyMCBAQAogCS5yYXRlX2h6CT0gQVQ5MV9TTE9XX0NMT0NLLAogCS51c2VycwkJPSAxLAkJLyogYWx3YXlzIG9uICovCiAJLmlkCQk9IDAsCi0JLnByaW1hcnkJPSAxLAorCS50eXBlCQk9IENMS19UWVBFX1BSSU1BUlksCiB9Owogc3RhdGljIHN0cnVjdCBjbGsgbWFpbl9jbGsgPSB7CiAJLm5hbWUJCT0gIm1haW4iLAogCS5wbWNfbWFzawk9IEFUOTFfUE1DX01PU0NTLAkvKiBpbiBQTUNfU1IgKi8KIAkuaWQJCT0gMSwKLQkucHJpbWFyeQk9IDEsCisJLnR5cGUJCT0gQ0xLX1RZUEVfUFJJTUFSWSwKIH07CiBzdGF0aWMgc3RydWN0IGNsayBwbGxhID0gewogCS5uYW1lCQk9ICJwbGxhIiwKIAkucGFyZW50CQk9ICZtYWluX2NsaywKIAkucG1jX21hc2sJPSBBVDkxX1BNQ19MT0NLQSwJLyogaW4gUE1DX1NSICovCiAJLmlkCQk9IDIsCi0JLnByaW1hcnkJPSAxLAotCS5wbGwJCT0gMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZIHwgQ0xLX1RZUEVfUExMLAogfTsKIAogc3RhdGljIHZvaWQgcGxsYl9tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQpAQCAtOTQsNiArODUsNyBAQAogCX0gZWxzZQogCQl2YWx1ZSA9IDA7CiAKKwkvLyBSRVZJU0lUOiBBZGQgd29yay1hcm91bmQgZm9yIEFUOTFSTTkyMDAgRXJyYXRhICMyNiA/CiAJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9DS0dSX1BMTEJSLCB2YWx1ZSk7CiAKIAlkbyB7CkBAIC0xMDcsOCArOTksNyBAQAogCS5wbWNfbWFzawk9IEFUOTFfUE1DX0xPQ0tCLAkvKiBpbiBQTUNfU1IgKi8KIAkubW9kZQkJPSBwbGxiX21vZGUsCiAJLmlkCQk9IDMsCi0JLnByaW1hcnkJPSAxLAotCS5wbGwJCT0gMSwKKwkudHlwZQkJPSBDTEtfVFlQRV9QUklNQVJZIHwgQ0xLX1RZUEVfUExMLAogfTsKIAogc3RhdGljIHZvaWQgcG1jX3N5c19tb2RlKHN0cnVjdCBjbGsgKmNsaywgaW50IGlzX29uKQpAQCAtMTMzLDQxICsxMjQsNiBAQAogCS5tb2RlCQk9IHBtY19zeXNfbW9kZSwKIH07CiAKLSNpZmRlZiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTCi0vKgotICogVGhlIGZvdXIgcHJvZ3JhbW1hYmxlIGNsb2NrcyBjYW4gYmUgcGFyZW50ZWQgYnkgYW55IHByaW1hcnkgY2xvY2suCi0gKiBZb3UgbXVzdCBjb25maWd1cmUgcGluIG11bHRpcGxleGluZyB0byBicmluZyB0aGVzZSBzaWduYWxzIG91dC4KLSAqLwotc3RhdGljIHN0cnVjdCBjbGsgcGNrMCA9IHsKLQkubmFtZQkJPSAicGNrMCIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMCwKLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi0JLnByb2dyYW1tYWJsZQk9IDEsCi0JLmlkCQk9IDAsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMSA9IHsKLQkubmFtZQkJPSAicGNrMSIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMSwKLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi0JLnByb2dyYW1tYWJsZQk9IDEsCi0JLmlkCQk9IDEsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMiA9IHsKLQkubmFtZQkJPSAicGNrMiIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMiwKLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi0JLnByb2dyYW1tYWJsZQk9IDEsCi0JLmlkCQk9IDIsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGNrMyA9IHsKLQkubmFtZQkJPSAicGNrMyIsCi0JLnBtY19tYXNrCT0gQVQ5MV9QTUNfUENLMywKLQkubW9kZQkJPSBwbWNfc3lzX21vZGUsCi0JLnByb2dyYW1tYWJsZQk9IDEsCi0JLmlkCQk9IDMsCi19OwotI2VuZGlmCS8qIENPTkZJR19BVDkxX1BST0dSQU1NQUJMRV9DTE9DS1MgKi8KLQogCiAvKgogICogVGhlIG1hc3RlciBjbG9jayBpcyBkaXZpZGVkIGZyb20gdGhlIENQVSBjbG9jayAoYnkgMS00KS4gIEl0J3MgdXNlZCBmb3IKQEAgLTE4NywxMzEgKzE0MywyMSBAQAogCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0RSLCBjbGstPnBtY19tYXNrKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjbGsgdWRjX2NsayA9IHsKLQkubmFtZQkJPSAidWRjX2NsayIsCi0JLnBhcmVudAkJPSAmbWNrLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VRFAsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG9oY2lfY2xrID0gewotCS5uYW1lCQk9ICJvaGNpX2NsayIsCi0JLnBhcmVudAkJPSAmbWNrLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VSFAsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIGV0aGVyX2NsayA9IHsKLQkubmFtZQkJPSAiZXRoZXJfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX0VNQUMsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIG1tY19jbGsgPSB7Ci0JLm5hbWUJCT0gIm1jaV9jbGsiLAotCS5wYXJlbnQJCT0gJm1jaywKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFfSURfTUNJLAotCS5tb2RlCQk9IHBtY19wZXJpcGhfbW9kZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB0d2lfY2xrID0gewotCS5uYW1lCQk9ICJ0d2lfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1RXSSwKLQkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQwX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQwX2NsayIsCi0JLnBhcmVudAkJPSAmbWNrLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VUzAsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHVzYXJ0MV9jbGsgPSB7Ci0JLm5hbWUJCT0gInVzYXJ0MV9jbGsiLAotCS5wYXJlbnQJCT0gJm1jaywKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFfSURfVVMxLAotCS5tb2RlCQk9IHBtY19wZXJpcGhfbW9kZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayB1c2FydDJfY2xrID0gewotCS5uYW1lCQk9ICJ1c2FydDJfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1VTMiwKLQkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgdXNhcnQzX2NsayA9IHsKLQkubmFtZQkJPSAidXNhcnQzX2NsayIsCi0JLnBhcmVudAkJPSAmbWNrLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9VUzMsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHNwaV9jbGsgPSB7Ci0JLm5hbWUJCT0gInNwaTBfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1NQSSwKLQkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvQV9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0FfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1BJT0EsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKLXN0YXRpYyBzdHJ1Y3QgY2xrIHBpb0JfY2xrID0gewotCS5uYW1lCQk9ICJwaW9CX2NsayIsCi0JLnBhcmVudAkJPSAmbWNrLAotCS5wbWNfbWFzawk9IDEgPDwgQVQ5MV9JRF9QSU9CLAotCS5tb2RlCQk9IHBtY19wZXJpcGhfbW9kZSwKLX07Ci1zdGF0aWMgc3RydWN0IGNsayBwaW9DX2NsayA9IHsKLQkubmFtZQkJPSAicGlvQ19jbGsiLAotCS5wYXJlbnQJCT0gJm1jaywKLQkucG1jX21hc2sJPSAxIDw8IEFUOTFfSURfUElPQywKLQkubW9kZQkJPSBwbWNfcGVyaXBoX21vZGUsCi19Owotc3RhdGljIHN0cnVjdCBjbGsgcGlvRF9jbGsgPSB7Ci0JLm5hbWUJCT0gInBpb0RfY2xrIiwKLQkucGFyZW50CQk9ICZtY2ssCi0JLnBtY19tYXNrCT0gMSA8PCBBVDkxX0lEX1BJT0QsCi0JLm1vZGUJCT0gcG1jX3BlcmlwaF9tb2RlLAotfTsKK3N0YXRpYyBzdHJ1Y3QgY2xrIF9faW5pdCAqYXQ5MV9jc3NfdG9fY2xrKHVuc2lnbmVkIGxvbmcgY3NzKQoreworCXN3aXRjaCAoY3NzKSB7CisJCWNhc2UgQVQ5MV9QTUNfQ1NTX1NMT1c6CisJCQlyZXR1cm4gJmNsazMyazsKKwkJY2FzZSBBVDkxX1BNQ19DU1NfTUFJTjoKKwkJCXJldHVybiAmbWFpbl9jbGs7CisJCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEE6CisJCQlyZXR1cm4gJnBsbGE7CisJCWNhc2UgQVQ5MV9QTUNfQ1NTX1BMTEI6CisJCQlyZXR1cm4gJnBsbGI7CisJfQogCi1zdGF0aWMgc3RydWN0IGNsayAqY29uc3QgY2xvY2tfbGlzdFtdID0gewotCS8qIGZvdXIgcHJpbWFyeSBjbG9ja3MgLS0gTVVTVCBCRSBGSVJTVCEgKi8KLQkmY2xrMzJrLAotCSZtYWluX2NsaywKLQkmcGxsYSwKLQkmcGxsYiwKLQotCS8qIFBMTEIgY2hpbGRyZW4gKFVTQikgKi8KLQkmdWRwY2ssCi0JJnVocGNrLAotCi0jaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUwotCS8qIHByb2dyYW1tYWJsZSBjbG9ja3MgKi8KLQkmcGNrMCwKLQkmcGNrMSwKLQkmcGNrMiwKLQkmcGNrMywKLSNlbmRpZgkvKiBDT05GSUdfQVQ5MV9QUk9HUkFNTUFCTEVfQ0xPQ0tTICovCi0KLQkvKiBNQ0sgYW5kIHBlcmlwaGVyYWxzICovCi0JJm1jaywKLQkmdXNhcnQwX2NsaywKLQkmdXNhcnQxX2NsaywKLQkmdXNhcnQyX2NsaywKLQkmdXNhcnQzX2NsaywKLQkmbW1jX2NsaywKLQkmdWRjX2NsaywKLQkmdHdpX2NsaywKLQkmc3BpX2NsaywKLQkmcGlvQV9jbGssCi0JJnBpb0JfY2xrLAotCSZwaW9DX2NsaywKLQkmcGlvRF9jbGssCi0JLy8gc3NjMC4uc3NjMgotCS8vIHRjMC4udGM1Ci0JLy8gaXJxMC4uaXJxNgotCSZvaGNpX2NsaywKLQkmZXRoZXJfY2xrLAotfTsKLQorCXJldHVybiBOVUxMOworfQogCiAvKgogICogQXNzb2NpYXRlIGEgcGFydGljdWxhciBjbG9jayB3aXRoIGEgZnVuY3Rpb24gKGVnLCAidWFydCIpIGFuZCBkZXZpY2UuCkBAIC0zMjksMTQgKzE3NSwxMiBAQAogCWNsay0+ZGV2ID0gZGV2OwogfQogCi0vKiBjbG9ja3MgYXJlIGFsbCBzdGF0aWMgZm9yIG5vdzsgbm8gcmVmY291bnRpbmcgbmVjZXNzYXJ5ICovCisvKiBjbG9ja3MgY2Fubm90IGJlIGRlLXJlZ2lzdGVyZWQgbm8gcmVmY291bnRpbmcgbmVjZXNzYXJ5ICovCiBzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpCiB7Ci0JaW50IGk7CisJc3RydWN0IGNsayAqY2xrOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfbGlzdCk7IGkrKykgewotCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbG9ja19saXN0W2ldOwotCisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZjbG9ja3MsIG5vZGUpIHsKIAkJaWYgKHN0cmNtcChpZCwgY2xrLT5uYW1lKSA9PSAwKQogCQkJcmV0dXJuIGNsazsKIAkJaWYgKGNsay0+ZnVuY3Rpb24gJiYgKGRldiA9PSBjbGstPmRldikgJiYgc3RyY21wKGlkLCBjbGstPmZ1bmN0aW9uKSA9PSAwKQpAQCAtNDI0LDcgKzI2OCw3IEBACiAJdW5zaWduZWQJcHJlc2NhbGU7CiAJdW5zaWduZWQgbG9uZwlhY3R1YWw7CiAKLQlpZiAoIWNsay0+cHJvZ3JhbW1hYmxlKQorCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKIApAQCAtNDQ2LDcgKzI5MCw3IEBACiAJdW5zaWduZWQJcHJlc2NhbGU7CiAJdW5zaWduZWQgbG9uZwlhY3R1YWw7CiAKLQlpZiAoIWNsay0+cHJvZ3JhbW1hYmxlKQorCWlmICghY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY2xrLT51c2VycykKIAkJcmV0dXJuIC1FQlVTWTsKQEAgLTQ4NCw3ICszMjgsNyBAQAogCiAJaWYgKGNsay0+dXNlcnMpCiAJCXJldHVybiAtRUJVU1k7Ci0JaWYgKCFwYXJlbnQtPnByaW1hcnkgfHwgIWNsay0+cHJvZ3JhbW1hYmxlKQorCWlmICghY2xrX2lzX3ByaW1hcnkocGFyZW50KSB8fCAhY2xrX2lzX3Byb2dyYW1tYWJsZShjbGspKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xrX2xvY2ssIGZsYWdzKTsKIApAQCAtNDk3LDYgKzM0MSwxOCBAQAogfQogRVhQT1JUX1NZTUJPTChjbGtfc2V0X3BhcmVudCk7CiAKKy8qIGVzdGFibGlzaCBQQ0swLi5QQ0szIHBhcmVudGFnZSBhbmQgcmF0ZSAqLworc3RhdGljIHZvaWQgaW5pdF9wcm9ncmFtbWFibGVfY2xvY2soc3RydWN0IGNsayAqY2xrKQoreworCXN0cnVjdCBjbGsJKnBhcmVudDsKKwl1MzIJCXBja3I7CisKKwlwY2tyID0gYXQ5MV9zeXNfcmVhZChBVDkxX1BNQ19QQ0tSKGNsay0+aWQpKTsKKwlwYXJlbnQgPSBhdDkxX2Nzc190b19jbGsocGNrciAmIEFUOTFfUE1DX0NTUyk7CisJY2xrLT5wYXJlbnQgPSBwYXJlbnQ7CisJY2xrLT5yYXRlX2h6ID0gcGFyZW50LT5yYXRlX2h6IC8gKDEgPDwgKChwY2tyID4+IDIpICYgMykpOworfQorCiAjZW5kaWYJLyogQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUyAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC01MDYsNiArMzYyLDcgQEAKIHN0YXRpYyBpbnQgYXQ5MV9jbGtfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnVudXNlZCkKIHsKIAl1MzIJCXNjc3IsIHBjc3IsIHNyOworCXN0cnVjdCBjbGsJKmNsazsKIAl1bnNpZ25lZAlpOwogCiAJc2VxX3ByaW50ZihzLCAiU0NTUiA9ICU4eFxuIiwgc2NzciA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfU0NTUikpOwpAQCAtNTIzLDkgKzM4MCw4IEBACiAKIAlzZXFfcHJpbnRmKHMsICJcbiIpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xvY2tfbGlzdCk7IGkrKykgewotCQljaGFyCQkqc3RhdGU7Ci0JCXN0cnVjdCBjbGsJKmNsayA9IGNsb2NrX2xpc3RbaV07CisJbGlzdF9mb3JfZWFjaF9lbnRyeShjbGssICZjbG9ja3MsIG5vZGUpIHsKKwkJY2hhcgkqc3RhdGU7CiAKIAkJaWYgKGNsay0+bW9kZSA9PSBwbWNfc3lzX21vZGUpCiAJCQlzdGF0ZSA9IChzY3NyICYgY2xrLT5wbWNfbWFzaykgPyAib24iIDogIm9mZiI7CkBAIC01NzAsNiArNDI2LDI4IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorLyogUmVnaXN0ZXIgYSBuZXcgY2xvY2sgKi8KK2ludCBfX2luaXQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKK3sKKwlpZiAoY2xrX2lzX3BlcmlwaGVyYWwoY2xrKSkgeworCQljbGstPnBhcmVudCA9ICZtY2s7CisJCWNsay0+bW9kZSA9IHBtY19wZXJpcGhfbW9kZTsKKwkJbGlzdF9hZGRfdGFpbCgmY2xrLT5ub2RlLCAmY2xvY2tzKTsKKwl9CisjaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUworCWVsc2UgaWYgKGNsa19pc19wcm9ncmFtbWFibGUoY2xrKSkgeworCQljbGstPm1vZGUgPSBwbWNfc3lzX21vZGU7CisJCWluaXRfcHJvZ3JhbW1hYmxlX2Nsb2NrKGNsayk7CisJCWxpc3RfYWRkX3RhaWwoJmNsay0+bm9kZSwgJmNsb2Nrcyk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIHN0YXRpYyB1MzIgX19pbml0IGF0OTFfcGxsX3JhdGUoc3RydWN0IGNsayAqcGxsLCB1MzIgZnJlcSwgdTMyIHJlZykKIHsKIAl1bnNpZ25lZCBtdWwsIGRpdjsKQEAgLTY0MCwyMCArNTE4LDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLQogLyoKICAqIFNldmVyYWwgdW51c2VkIGNsb2NrcyBtYXkgYmUgYWN0aXZlLiAgVHVybiB0aGVtIG9mZi4KICAqLwotc3RhdGljIHZvaWQgYXQ5MV9wZXJpcGhjbGtfcmVzZXQodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBhdDkxX3BlcmlwaGNsa19yZXNldCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwotCWludCBpOworCXN0cnVjdCBjbGsgKmNsazsKIAogCXJlZyA9IGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENTUik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbG9ja19saXN0KTsgaSsrKSB7Ci0JCXN0cnVjdCBjbGsJKmNsayA9IGNsb2NrX2xpc3RbaV07Ci0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNsaywgJmNsb2Nrcywgbm9kZSkgewogCQlpZiAoY2xrLT5tb2RlICE9IHBtY19wZXJpcGhfbW9kZSkKIAkJCWNvbnRpbnVlOwogCkBAIC02NjQsMTEgKzUzOSwyNSBAQAogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRFIsIHJlZyk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrICpjb25zdCBzdGFuZGFyZF9wbWNfY2xvY2tzW10gX19pbml0ZGF0YSA9IHsKKwkvKiBmb3VyIHByaW1hcnkgY2xvY2tzICovCisJJmNsazMyaywKKwkmbWFpbl9jbGssCisJJnBsbGEsCisJJnBsbGIsCisKKwkvKiBQTExCIGNoaWxkcmVuIChVU0IpICovCisJJnVkcGNrLAorCSZ1aHBjaywKKworCS8qIE1DSyAqLworCSZtY2sKK307CisKIGludCBfX2luaXQgYXQ5MV9jbG9ja19pbml0KHVuc2lnbmVkIGxvbmcgbWFpbl9jbG9jaykKIHsKIAl1bnNpZ25lZCB0bXAsIGZyZXEsIG1ja3I7Ci0KLQlzcGluX2xvY2tfaW5pdCgmY2xrX2xvY2spOworCWludCBpOwogCiAJLyoKIAkgKiBXaGVuIHRoZSBib290bG9hZGVyIGluaXRpYWxpemVkIHRoZSBtYWluIG9zY2lsbGF0b3IgY29ycmVjdGx5LApAQCAtNzA5LDExICs1OTgsMTUgQEAKIAkgKiBGb3Igbm93LCBhc3N1bWUgdGhpcyBwYXJlbnRhZ2Ugd29uJ3QgY2hhbmdlLgogCSAqLwogCW1ja3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX01DS1IpOwotCW1jay5wYXJlbnQgPSBjbG9ja19saXN0W21ja3IgJiBBVDkxX1BNQ19DU1NdOworCW1jay5wYXJlbnQgPSBhdDkxX2Nzc190b19jbGsobWNrciAmIEFUOTFfUE1DX0NTUyk7CiAJZnJlcSA9IG1jay5wYXJlbnQtPnJhdGVfaHo7CiAJZnJlcSAvPSAoMSA8PCAoKG1ja3IgPj4gMikgJiAzKSk7CQkvKiBwcmVzY2FsZSAqLwogCW1jay5yYXRlX2h6ID0gZnJlcSAvICgxICsgKChtY2tyID4+IDgpICYgMykpOwkvKiBtZGl2ICovCiAKKwkvKiBSZWdpc3RlciB0aGUgUE1DJ3Mgc3RhbmRhcmQgY2xvY2tzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc3RhbmRhcmRfcG1jX2Nsb2Nrcyk7IGkrKykKKwkJbGlzdF9hZGRfdGFpbCgmc3RhbmRhcmRfcG1jX2Nsb2Nrc1tpXS0+bm9kZSwgJmNsb2Nrcyk7CisKIAkvKiBNQ0sgYW5kIENQVSBjbG9jayBhcmUgImFsd2F5cyBvbiIgKi8KIAljbGtfZW5hYmxlKCZtY2spOwogCkBAIC03MjIsMzUgKzYxNSw4IEBACiAJCSh1bnNpZ25lZCkgbWFpbl9jbG9jayAvIDEwMDAwMDAsCiAJCSgodW5zaWduZWQpIG1haW5fY2xvY2sgJSAxMDAwMDAwKSAvIDEwMDApOwogCi0jaWZkZWYgQ09ORklHX0FUOTFfUFJPR1JBTU1BQkxFX0NMT0NLUwotCS8qIGVzdGFibGlzaCBQQ0swLi5QQ0szIHBhcmVudGFnZSAqLwotCWZvciAodG1wID0gMDsgdG1wIDwgQVJSQVlfU0laRShjbG9ja19saXN0KTsgdG1wKyspIHsKLQkJc3RydWN0IGNsawkqY2xrID0gY2xvY2tfbGlzdFt0bXBdLCAqcGFyZW50OwotCQl1MzIJCXBja3I7Ci0KLQkJaWYgKCFjbGstPnByb2dyYW1tYWJsZSkKLQkJCWNvbnRpbnVlOwotCi0JCXBja3IgPSBhdDkxX3N5c19yZWFkKEFUOTFfUE1DX1BDS1IoY2xrLT5pZCkpOwotCQlwYXJlbnQgPSBjbG9ja19saXN0W3Bja3IgJiBBVDkxX1BNQ19DU1NdOwotCQljbGstPnBhcmVudCA9IHBhcmVudDsKLQkJY2xrLT5yYXRlX2h6ID0gcGFyZW50LT5yYXRlX2h6IC8gKDEgPDwgKChwY2tyID4+IDIpICYgMykpOwotCi0JCWlmIChjbGstPnVzZXJzID09IDApIHsKLQkJCS8qIG5vdCBiZWluZyB1c2VkLCBzbyBzd2l0Y2ggaXQgb2ZmICovCi0JCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19TQ0RSLCBjbGstPnBtY19tYXNrKTsKLQkJfQotCX0KLSNlbHNlCiAJLyogZGlzYWJsZSBhbGwgcHJvZ3JhbW1hYmxlIGNsb2NrcyAqLwogCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1NDRFIsIEFUOTFfUE1DX1BDSzAgfCBBVDkxX1BNQ19QQ0sxIHwgQVQ5MV9QTUNfUENLMiB8IEFUOTFfUE1DX1BDSzMpOwotI2VuZGlmCi0KLQkvKiBlbmFibGUgdGhlIFBJTyBjbG9ja3MgKi8KLQljbGtfZW5hYmxlKCZwaW9BX2Nsayk7Ci0JY2xrX2VuYWJsZSgmcGlvQl9jbGspOwotCWNsa19lbmFibGUoJnBpb0NfY2xrKTsKLQljbGtfZW5hYmxlKCZwaW9EX2Nsayk7CiAKIAkvKiBkaXNhYmxlIGFsbCBvdGhlciB1bnVzZWQgcGVyaXBoZXJhbCBjbG9ja3MgKi8KIAlhdDkxX3BlcmlwaGNsa19yZXNldCgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmggYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvY2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTkyZTY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2Nsb2NrLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9jbG9jay5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjZGVmaW5lIENMS19UWVBFX1BSSU1BUlkJMHgxCisjZGVmaW5lIENMS19UWVBFX1BMTAkJMHgyCisjZGVmaW5lIENMS19UWVBFX1BST0dSQU1NQUJMRQkweDQKKyNkZWZpbmUgQ0xLX1RZUEVfUEVSSVBIRVJBTAkweDgKKworCitzdHJ1Y3QgY2xrIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CisJY29uc3QgY2hhcgkqbmFtZTsJCS8qIHVuaXF1ZSBjbG9jayBuYW1lICovCisJY29uc3QgY2hhcgkqZnVuY3Rpb247CS8qIGZ1bmN0aW9uIG9mIHRoZSBjbG9jayAqLworCXN0cnVjdCBkZXZpY2UJKmRldjsJCS8qIGRldmljZSBhc3NvY2lhdGVkIHdpdGggZnVuY3Rpb24gKi8KKwl1bnNpZ25lZCBsb25nCXJhdGVfaHo7CisJc3RydWN0IGNsawkqcGFyZW50OworCXUzMgkJcG1jX21hc2s7CisJdm9pZAkJKCptb2RlKShzdHJ1Y3QgY2xrICosIGludCk7CisJdW5zaWduZWQJaWQ6MjsJCS8qIFBDSzAuLjMsIG9yIDMyay9tYWluL2EvYiAqLworCXVuc2lnbmVkCXR5cGU7CQkvKiBjbG9jayB0eXBlICovCisJdTE2CQl1c2VyczsKK307CisKKworZXh0ZXJuIGludCBfX2luaXQgY2xrX3JlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsayk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2RldmljZXMuYwppbmRleCA0MzUyYWNiLi4wMTUyNTUzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZGV2aWNlcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9kZXZpY2VzLmMKQEAgLTM1LDEzICszNSwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIGF0OTFfdXNiaF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfVUhQX0JBU0UsCi0JCS5lbmQJPSBBVDkxX1VIUF9CQVNFICsgU1pfMU0gLSAxLAorCQkuc3RhcnQJPSBBVDkxUk05MjAwX1VIUF9CQVNFLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9VSFBfQkFTRSArIFNaXzFNIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfSURfVUhQLAotCQkuZW5kCT0gQVQ5MV9JRF9VSFAsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfVUhQLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9VSFAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtODAsMTMgKzgwLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV91ZGNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0JBU0VfVURQLAotCQkuZW5kCT0gQVQ5MV9CQVNFX1VEUCArIFNaXzE2SyAtIDEsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VRFAsCisJCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVURQICsgU1pfMTZLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfSURfVURQLAotCQkuZW5kCT0gQVQ5MV9JRF9VRFAsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfVURQLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9VRFAsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtMTMxLDEzICsxMzEsMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX2V0aF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQkFTRV9FTUFDLAotCQkuZW5kCT0gQVQ5MV9CQVNFX0VNQUMgKyBTWl8xNksgLSAxLAorCQkuc3RhcnQJPSBBVDkxX1ZBX0JBU0VfRU1BQywKKwkJLmVuZAk9IEFUOTFfVkFfQkFTRV9FTUFDICsgU1pfMTZLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfSURfRU1BQywKLQkJLmVuZAk9IEFUOTFfSURfRU1BQywKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9JRF9FTUFDLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9FTUFDLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTI2MywxMyArMjYzLDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgYXQ5MV9tbWNfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0JBU0VfTUNJLAotCQkuZW5kCT0gQVQ5MV9CQVNFX01DSSArIFNaXzE2SyAtIDEsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9NQ0ksCisJCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfTUNJICsgU1pfMTZLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfSURfTUNJLAotCQkuZW5kCT0gQVQ5MV9JRF9NQ0ksCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfTUNJLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9NQ0ksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNDIzLDEzICs0MjMsMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhdDkxX3NwaV9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQkFTRV9TUEksCi0JCS5lbmQJPSBBVDkxX0JBU0VfU1BJICsgU1pfMTZLIC0gMSwKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1NQSSwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9TUEkgKyBTWl8xNksgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9JRF9TUEksCi0JCS5lbmQJPSBBVDkxX0lEX1NQSSwKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9JRF9TUEksCisJCS5lbmQJPSBBVDkxUk05MjAwX0lEX1NQSSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC01ODIsMTMgKzU4MiwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQwX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1VTMCwKLQkJLmVuZAk9IEFUOTFfQkFTRV9VUzAgKyBTWl8xNksgLSAxLAorCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVVMwLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1VTMCArIFNaXzE2SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSBBVDkxX0lEX1VTMCwKLQkJLmVuZAk9IEFUOTFfSURfVVMwLAorCQkuc3RhcnQJPSBBVDkxUk05MjAwX0lEX1VTMCwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfSURfVVMwLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKQEAgLTYyNCwxMyArNjI0LDEzIEBACiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdWFydDFfcmVzb3VyY2VzW10gPSB7CiAJWzBdID0gewotCQkuc3RhcnQJPSBBVDkxX0JBU0VfVVMxLAotCQkuZW5kCT0gQVQ5MV9CQVNFX1VTMSArIFNaXzE2SyAtIDEsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfQkFTRV9VUzEsCisJCS5lbmQJPSBBVDkxUk05MjAwX0JBU0VfVVMxICsgU1pfMTZLIC0gMSwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCiAJfSwKIAlbMV0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfSURfVVMxLAotCQkuZW5kCT0gQVQ5MV9JRF9VUzEsCisJCS5zdGFydAk9IEFUOTFSTTkyMDBfSURfVVMxLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9JRF9VUzEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwpAQCAtNjY1LDEzICs2NjUsMTMgQEAKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSB1YXJ0Ml9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7Ci0JCS5zdGFydAk9IEFUOTFfQkFTRV9VUzIsCi0JCS5lbmQJPSBBVDkxX0JBU0VfVVMyICsgU1pfMTZLIC0gMSwKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9CQVNFX1VTMiwKKwkJLmVuZAk9IEFUOTFSTTkyMDBfQkFTRV9VUzIgKyBTWl8xNksgLSAxLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKIAl9LAogCVsxXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9JRF9VUzIsCi0JCS5lbmQJPSBBVDkxX0lEX1VTMiwKKwkJLnN0YXJ0CT0gQVQ5MVJNOTIwMF9JRF9VUzIsCisJCS5lbmQJPSBBVDkxUk05MjAwX0lEX1VTMiwKIAkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCiAJfSwKIH07CkBAIC03MDAsMTMgKzcwMCwxMyBAQAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHVhcnQzX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLnN0YXJ0CT0gQVQ5MV9CQVNFX1VTMywKLQkJLmVuZAk9IEFUOTFfQkFTRV9VUzMgKyBTWl8xNksgLSAxLAorCQkuc3RhcnQJPSBBVDkxUk05MjAwX0JBU0VfVVMzLAorCQkuZW5kCT0gQVQ5MVJNOTIwMF9CQVNFX1VTMyArIFNaXzE2SyAtIDEsCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAogCX0sCiAJWzFdID0gewotCQkuc3RhcnQJPSBBVDkxX0lEX1VTMywKLQkJLmVuZAk9IEFUOTFfSURfVVMzLAorCQkuc3RhcnQJPSBBVDkxUk05MjAwX0lEX1VTMywKKwkJLmVuZAk9IEFUOTFSTTkyMDBfSURfVVMzLAogCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKIAl9LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmggYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ2VuZXJpYy5oCmluZGV4IDc5NzlkOGEuLjY5NGU0MTEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9nZW5lcmljLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dlbmVyaWMuaApAQCAtOCwxOCArOCwxNyBAQAogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAorIC8qIFByb2Nlc3NvcnMgKi8KK2V4dGVybiB2b2lkIF9faW5pdCBhdDkxcm05MjAwX2luaXRpYWxpemUodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrLCB1bnNpZ25lZCBzaG9ydCBiYW5rcyk7CisKICAvKiBJbnRlcnJ1cHRzICovCi1leHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0X2lycSh1bnNpZ25lZCBpbnQgcHJpb3JpdHlbXSk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MXJtOTIwMF9pbml0X2ludGVycnVwdHModW5zaWduZWQgaW50IHByaW9yaXR5W10pOwogZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfYWljX2luaXQodW5zaWduZWQgaW50IHByaW9yaXR5W10pOwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFfZ3Bpb19pcnFfc2V0dXAodW5zaWduZWQgYmFua3MpOwogCiAgLyogVGltZXIgKi8KIHN0cnVjdCBzeXNfdGltZXI7CiBleHRlcm4gc3RydWN0IHN5c190aW1lciBhdDkxcm05MjAwX3RpbWVyOwogCi0gLyogTWVtb3J5IE1hcCAqLwotZXh0ZXJuIHZvaWQgX19pbml0IGF0OTFybTkyMDBfbWFwX2lvKHZvaWQpOwotCiAgLyogQ2xvY2tzICovCiBleHRlcm4gaW50IF9faW5pdCBhdDkxX2Nsb2NrX2luaXQodW5zaWduZWQgbG9uZyBtYWluX2Nsb2NrKTsKIHN0cnVjdCBkZXZpY2U7CkBAIC0yOSwzICsyOCwxNCBAQAogZXh0ZXJuIHZvaWQgYXQ5MV9pcnFfc3VzcGVuZCh2b2lkKTsKIGV4dGVybiB2b2lkIGF0OTFfaXJxX3Jlc3VtZSh2b2lkKTsKIAorIC8qIEdQSU8gKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9QUUZQCQkzCS8qIEFUOTFSTTkyMDAgUFFGUCBwYWNrYWdlIGhhcyAzIGJhbmtzICovCisjZGVmaW5lIEFUOTFSTTkyMDBfQkdBCQk0CS8qIEFUOTFSTTkyMDAgQkdBIHBhY2thZ2UgaGFzIDQgYmFua3MgKi8KKworc3RydWN0IGF0OTFfZ3Bpb19iYW5rIHsKKwl1bnNpZ25lZCBzaG9ydCBpZDsJCS8qIHBlcmlwaGVyYWwgSUQgKi8KKwl1bnNpZ25lZCBsb25nIG9mZnNldDsJCS8qIG9mZnNldCBmcm9tIHN5c3RlbSBwZXJpcGhlcmFsIGJhc2UgKi8KKwlzdHJ1Y3QgY2xrICpjbG9jazsJCS8qIGFzc29jaWF0ZWQgY2xvY2sgKi8KK307CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2luaXQoc3RydWN0IGF0OTFfZ3Bpb19iYW5rICosIGludCBucl9iYW5rcyk7CitleHRlcm4gdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2lycV9zZXR1cCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvZ3Bpby5jCmluZGV4IGNlYzE5OWYuLjU4YzliZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2dwaW8uYwpAQCAtOSw2ICs5LDcgQEAKICAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CkBAIC0yMCwxMiArMjEsMTIgQEAKICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CiAKLXN0YXRpYyBjb25zdCB1MzIgcGlvX2NvbnRyb2xsZXJfb2Zmc2V0WzRdID0gewotCUFUOTFfUElPQSwKLQlBVDkxX1BJT0IsCi0JQVQ5MV9QSU9DLAotCUFUOTFfUElPRCwKLX07CisjaW5jbHVkZSAiZ2VuZXJpYy5oIgorCisKK3N0YXRpYyBzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgKmdwaW87CitzdGF0aWMgaW50IGdwaW9fYmFua3M7CisKIAogc3RhdGljIGlubGluZSB2b2lkIF9faW9tZW0gKnBpbl90b19jb250cm9sbGVyKHVuc2lnbmVkIHBpbikKIHsKQEAgLTMzLDggKzM0LDggQEAKIAogCXBpbiAtPSBQSU5fQkFTRTsKIAlwaW4gLz0gMzI7Ci0JaWYgKGxpa2VseShwaW4gPCBCR0FfR1BJT19CQU5LUykpCi0JCXJldHVybiBzeXNfYmFzZSArIHBpb19jb250cm9sbGVyX29mZnNldFtwaW5dOworCWlmIChsaWtlbHkocGluIDwgZ3Bpb19iYW5rcykpCisJCXJldHVybiBzeXNfYmFzZSArIGdwaW9bcGluXS5vZmZzZXQ7CiAKIAlyZXR1cm4gTlVMTDsKIH0KQEAgLTE3OSw3ICsxODAsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotCiAvKgogICogYXNzdW1pbmcgdGhlIHBpbiBpcyBtdXhlZCBhcyBhIGdwaW8gb3V0cHV0LCBzZXQgaXRzIHZhbHVlLgogICovCkBAIC0yMTYsOCArMjE2LDggQEAKIAogI2lmZGVmIENPTkZJR19QTQogCi1zdGF0aWMgdTMyIHdha2V1cHNbQkdBX0dQSU9fQkFOS1NdOwotc3RhdGljIHUzMiBiYWNrdXBzW0JHQV9HUElPX0JBTktTXTsKK3N0YXRpYyB1MzIgd2FrZXVwc1tNQVhfR1BJT19CQU5LU107CitzdGF0aWMgdTMyIGJhY2t1cHNbTUFYX0dQSU9fQkFOS1NdOwogCiBzdGF0aWMgaW50IGdwaW9faXJxX3NldF93YWtlKHVuc2lnbmVkIHBpbiwgdW5zaWduZWQgc3RhdGUpCiB7CkBAIC0yMjYsNyArMjI2LDcgQEAKIAlwaW4gLT0gUElOX0JBU0U7CiAJcGluIC89IDMyOwogCi0JaWYgKHVubGlrZWx5KHBpbiA+PSBCR0FfR1BJT19CQU5LUykpCisJaWYgKHVubGlrZWx5KHBpbiA+PSBNQVhfR1BJT19CQU5LUykpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHN0YXRlKQpAQCAtMjQxLDggKzI0MSw4IEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQkdBX0dQSU9fQkFOS1M7IGkrKykgewotCQl1MzIgcGlvID0gcGlvX2NvbnRyb2xsZXJfb2Zmc2V0W2ldOworCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKKwkJdTMyIHBpbyA9IGdwaW9baV0ub2Zmc2V0OwogCiAJCS8qCiAJCSAqIE5vdGU6IGRyaXZlcnMgc2hvdWxkIGhhdmUgZGlzYWJsZWQgR1BJTyBpbnRlcnJ1cHRzIHRoYXQKQEAgLTI1NywxNCArMjU3LDE0IEBACiAJCSAqIGZpcnN0IHBsYWNlIQogCQkgKi8KIAkJYmFja3Vwc1tpXSA9IGF0OTFfc3lzX3JlYWQocGlvICsgUElPX0lNUik7Ci0JCWF0OTFfc3lzX3dyaXRlKHBpb19jb250cm9sbGVyX29mZnNldFtpXSArIFBJT19JRFIsIGJhY2t1cHNbaV0pOwotCQlhdDkxX3N5c193cml0ZShwaW9fY29udHJvbGxlcl9vZmZzZXRbaV0gKyBQSU9fSUVSLCB3YWtldXBzW2ldKTsKKwkJYXQ5MV9zeXNfd3JpdGUocGlvICsgUElPX0lEUiwgYmFja3Vwc1tpXSk7CisJCWF0OTFfc3lzX3dyaXRlKHBpbyArIFBJT19JRVIsIHdha2V1cHNbaV0pOwogCiAJCWlmICghd2FrZXVwc1tpXSkgewotCQkJZGlzYWJsZV9pcnFfd2FrZShBVDkxX0lEX1BJT0EgKyBpKTsKLQkJCWF0OTFfc3lzX3dyaXRlKEFUOTFfUE1DX1BDRFIsIDEgPDwgKEFUOTFfSURfUElPQSArIGkpKTsKKwkJCWRpc2FibGVfaXJxX3dha2UoZ3Bpb1tpXS5pZCk7CisJCQlhdDkxX3N5c193cml0ZShBVDkxX1BNQ19QQ0RSLCAxIDw8IGdwaW9baV0uaWQpOwogCQl9IGVsc2UgewotCQkJZW5hYmxlX2lycV93YWtlKEFUOTFfSURfUElPQSArIGkpOworCQkJZW5hYmxlX2lycV93YWtlKGdwaW9baV0uaWQpOwogI2lmZGVmIENPTkZJR19QTV9ERUJVRwogCQkJcHJpbnRrKEtFUk5fREVCVUcgIkdQSU8tJWMgbWF5IHdha2UgZm9yICUwOHhcbiIsICJBQkNEIltpXSwgd2FrZXVwc1tpXSk7CiAjZW5kaWYKQEAgLTI3NiwxNiArMjc2LDEzIEBACiB7CiAJaW50IGk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQkdBX0dQSU9fQkFOS1M7IGkrKykgewotCQlhdDkxX3N5c193cml0ZShwaW9fY29udHJvbGxlcl9vZmZzZXRbaV0gKyBQSU9fSURSLCB3YWtldXBzW2ldKTsKLQkJYXQ5MV9zeXNfd3JpdGUocGlvX2NvbnRyb2xsZXJfb2Zmc2V0W2ldICsgUElPX0lFUiwgYmFja3Vwc1tpXSk7Ci0JfQorCWZvciAoaSA9IDA7IGkgPCBncGlvX2JhbmtzOyBpKyspIHsKKwkJdTMyIHBpbyA9IGdwaW9baV0ub2Zmc2V0OwogCi0JYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENFUiwKLQkJCSAgKDEgPDwgQVQ5MV9JRF9QSU9BKQotCQkJfCAoMSA8PCBBVDkxX0lEX1BJT0IpCi0JCQl8ICgxIDw8IEFUOTFfSURfUElPQykKLQkJCXwgKDEgPDwgQVQ5MV9JRF9QSU9EKSk7CisJCWF0OTFfc3lzX3dyaXRlKHBpbyArIFBJT19JRFIsIHdha2V1cHNbaV0pOworCQlhdDkxX3N5c193cml0ZShwaW8gKyBQSU9fSUVSLCBiYWNrdXBzW2ldKTsKKwkJYXQ5MV9zeXNfd3JpdGUoQVQ5MV9QTUNfUENFUiwgMSA8PCBncGlvW2ldLmlkKTsKKwl9CiB9CiAKICNlbHNlCkBAIC0zNzcsMjAgKzM3NCwyNSBAQAogCS8qIG5vdyBpdCBtYXkgcmUtdHJpZ2dlciAqLwogfQogCi0vKiBjYWxsIHRoaXMgZnJvbSBib2FyZC1zcGVjaWZpYyBpbml0X2lycSAqLwotdm9pZCBfX2luaXQgYXQ5MV9ncGlvX2lycV9zZXR1cCh1bnNpZ25lZCBiYW5rcykKLXsKLQl1bnNpZ25lZAlwaW9jLCBwaW4sIGlkOworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLQlpZiAoYmFua3MgPiA0KQotCQliYW5rcyA9IDQ7Ci0JZm9yIChwaW9jID0gMCwgcGluID0gUElOX0JBU0UsIGlkID0gQVQ5MV9JRF9QSU9BOwotCQkJcGlvYyA8IGJhbmtzOwotCQkJcGlvYysrLCBpZCsrKSB7CisvKgorICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIGludGVycnVwdCBzdXBwb3J0LgorICovCit2b2lkIF9faW5pdCBhdDkxX2dwaW9faXJxX3NldHVwKHZvaWQpCit7CisJdW5zaWduZWQJcGlvYywgcGluOworCisJZm9yIChwaW9jID0gMCwgcGluID0gUElOX0JBU0U7CisJCQlwaW9jIDwgZ3Bpb19iYW5rczsKKwkJCXBpb2MrKykgewogCQl2b2lkIF9faW9tZW0JKmNvbnRyb2xsZXI7CisJCXVuc2lnbmVkCWlkID0gZ3Bpb1twaW9jXS5pZDsKIAkJdW5zaWduZWQJaTsKIAotCQljb250cm9sbGVyID0gKHZvaWQgX19pb21lbSAqKSBBVDkxX1ZBX0JBU0VfU1lTICsgcGlvX2NvbnRyb2xsZXJfb2Zmc2V0W3Bpb2NdOworCQljbGtfZW5hYmxlKGdwaW9bcGlvY10uY2xvY2spOwkvKiBlbmFibGUgUElPIGNvbnRyb2xsZXIncyBjbG9jayAqLworCisJCWNvbnRyb2xsZXIgPSAodm9pZCBfX2lvbWVtICopIEFUOTFfVkFfQkFTRV9TWVMgKyBncGlvW3Bpb2NdLm9mZnNldDsKIAkJX19yYXdfd3JpdGVsKH4wLCBjb250cm9sbGVyICsgUElPX0lEUik7CiAKIAkJc2V0X2lycV9kYXRhKGlkLCAodm9pZCAqKSBwaW4pOwpAQCAtNDA4LDUgKzQxMCwxNiBAQAogCiAJCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlkLCBncGlvX2lycV9oYW5kbGVyKTsKIAl9Ci0JcHJfaW5mbygiQVQ5MTogJWQgZ3BpbyBpcnFzIGluICVkIGJhbmtzXG4iLCBwaW4gLSBQSU5fQkFTRSwgYmFua3MpOworCXByX2luZm8oIkFUOTE6ICVkIGdwaW8gaXJxcyBpbiAlZCBiYW5rc1xuIiwgcGluIC0gUElOX0JBU0UsIGdwaW9fYmFua3MpOworfQorCisvKgorICogQ2FsbGVkIGZyb20gdGhlIHByb2Nlc3Nvci1zcGVjaWZpYyBpbml0IHRvIGVuYWJsZSBHUElPIHBpbiBzdXBwb3J0LgorICovCit2b2lkIF9faW5pdCBhdDkxX2dwaW9faW5pdChzdHJ1Y3QgYXQ5MV9ncGlvX2JhbmsgKmRhdGEsIGludCBucl9iYW5rcykKK3sKKwlCVUdfT04obnJfYmFua3MgPiBNQVhfR1BJT19CQU5LUyk7CisKKwlncGlvID0gZGF0YTsKKwlncGlvX2JhbmtzID0gbnJfYmFua3M7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMgYi9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvaXJxLmMKaW5kZXggYzNhNWU3Ny4uM2U0ODgxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1hdDkxcm05MjAwL2lycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9pcnEuYwpAQCAtMzQsOCArMzQsNiBAQAogI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi0jaW5jbHVkZSAiZ2VuZXJpYy5oIgotCiAKIHN0YXRpYyB2b2lkIGF0OTFfYWljX21hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CkBAIC02MSwxMiArNTksMTIgQEAKIAkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfUklTSU5HOwogCQlicmVhazsKIAljYXNlIElSUVRfTE9XOgotCQlpZiAoKGlycSA+IEFUOTFfSURfRklRKSAmJiAoaXJxIDwgQVQ5MV9JRF9JUlEwKSkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLworCQlpZiAoKGlycSA+IEFUOTFfSURfRklRKSAmJiAoaXJxIDwgQVQ5MVJNOTIwMF9JRF9JUlEwKSkJLyogb25seSBzdXBwb3J0ZWQgb24gZXh0ZXJuYWwgaW50ZXJydXB0cyAqLwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXNyY3R5cGUgPSBBVDkxX0FJQ19TUkNUWVBFX0xPVzsKIAkJYnJlYWs7CiAJY2FzZSBJUlFUX0ZBTExJTkc6Ci0JCWlmICgoaXJxID4gQVQ5MV9JRF9GSVEpICYmIChpcnEgPCBBVDkxX0lEX0lSUTApKQkvKiBvbmx5IHN1cHBvcnRlZCBvbiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCisJCWlmICgoaXJxID4gQVQ5MV9JRF9GSVEpICYmIChpcnEgPCBBVDkxUk05MjAwX0lEX0lSUTApKQkvKiBvbmx5IHN1cHBvcnRlZCBvbiBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJc3JjdHlwZSA9IEFUOTFfQUlDX1NSQ1RZUEVfRkFMTElORzsKIAkJYnJlYWs7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWF0OTFybTkyMDAvcG0uYyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9wbS5jCmluZGV4IDQ3ZTU0ODAuLjMyYzk1ZDggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9wbS5jCisrKyBiL2FyY2gvYXJtL21hY2gtYXQ5MXJtOTIwMC9wbS5jCkBAIC0xMjMsMTMgKzEyMywxMyBAQAogCQkJKGF0OTFfc3lzX3JlYWQoQVQ5MV9QTUNfUENTUikKIAkJCQkJfCAoMSA8PCBBVDkxX0lEX0ZJUSkKIAkJCQkJfCAoMSA8PCBBVDkxX0lEX1NZUykKLQkJCQkJfCAoMSA8PCBBVDkxX0lEX0lSUTApCi0JCQkJCXwgKDEgPDwgQVQ5MV9JRF9JUlExKQotCQkJCQl8ICgxIDw8IEFUOTFfSURfSVJRMikKLQkJCQkJfCAoMSA8PCBBVDkxX0lEX0lSUTMpCi0JCQkJCXwgKDEgPDwgQVQ5MV9JRF9JUlE0KQotCQkJCQl8ICgxIDw8IEFUOTFfSURfSVJRNSkKLQkJCQkJfCAoMSA8PCBBVDkxX0lEX0lSUTYpKQorCQkJCQl8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRMCkKKwkJCQkJfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTEpCisJCQkJCXwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlEyKQorCQkJCQl8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRMykKKwkJCQkJfCAoMSA8PCBBVDkxUk05MjAwX0lEX0lSUTQpCisJCQkJCXwgKDEgPDwgQVQ5MVJNOTIwMF9JRF9JUlE1KQorCQkJCQl8ICgxIDw8IEFUOTFSTTkyMDBfSURfSVJRNikpCiAJCQkJJiBhdDkxX3N5c19yZWFkKEFUOTFfQUlDX0lNUiksCiAJCQlzdGF0ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9LY29uZmlnCmluZGV4IGYxYjc0MDAuLmUzNDZiMDMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L0tjb25maWcKKysrIGIvYXJjaC9hcm0vbWFjaC1lcDkzeHgvS2NvbmZpZwpAQCAtMTUsNiArMTUsMTIgQEAKIAkgIFNheSAnWScgaGVyZSBpZiB5b3Ugd2FudCB5b3VyIGtlcm5lbCB0byBzdXBwb3J0IHRoZSBDaXJydXMKIAkgIExvZ2ljIEVEQjkzMDIgRXZhbHVhdGlvbiBCb2FyZC4KIAorY29uZmlnIE1BQ0hfRURCOTMxMgorCWJvb2wgIlN1cHBvcnQgQ2lycnVzIExvZ2ljIEVEQjkzMTIiCisJaGVscAorCSAgU2F5ICdZJyBoZXJlIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHN1cHBvcnQgdGhlIENpcnJ1cworCSAgTG9naWMgRURCOTMxMiBFdmFsdWF0aW9uIEJvYXJkLgorCiBjb25maWcgTUFDSF9FREI5MzE1CiAJYm9vbCAiU3VwcG9ydCBDaXJydXMgTG9naWMgRURCOTMxNSIKIAloZWxwCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9NYWtlZmlsZSBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCmluZGV4IDFmNWE2YjAuLmMyZWIxOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogb2JqLQkJCTo9CiAKIG9iai0kKENPTkZJR19NQUNIX0VEQjkzMDIpCSs9IGVkYjkzMDIubworb2JqLSQoQ09ORklHX01BQ0hfRURCOTMxMikJKz0gZWRiOTMxMi5vCiBvYmotJChDT05GSUdfTUFDSF9FREI5MzE1KQkrPSBlZGI5MzE1Lm8KIG9iai0kKENPTkZJR19NQUNIX0VEQjkzMTVBKQkrPSBlZGI5MzE1YS5vCiBvYmotJChDT05GSUdfTUFDSF9HRVNCQzkzMTIpCSs9IGdlc2JjOTMxMi5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzEyLmMgYi9hcmNoL2FybS9tYWNoLWVwOTN4eC9lZGI5MzEyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUzOTkyMQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtZXA5M3h4L2VkYjkzMTIuYwpAQCAtMCwwICsxLDYzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1lcDkzeHgvZWRiOTMxMi5jCisgKiBDaXJydXMgTG9naWMgRURCOTMxMiBzdXBwb3J0LgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbmZvc3lzIFRlY2hub2xvZ2llcyBMaW1pdGVkCisgKiAJVG91ZmVlcSBIdXNzYWluCTx0b3VmZWVxX2h1c3NhaW5AaW5mb3N5cy5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQKKyAqIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBlZGI5MzEyX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDQsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGVkYjkzMTJfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4NjAwMDAwMDAsCisJLmVuZAkJPSAweDYxZmZmZmZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGVkYjkzMTJfZmxhc2ggPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZlZGI5MzEyX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmVkYjkzMTJfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgZWRiOTMxMl9pbml0X21hY2hpbmUodm9pZCkKK3sKKwllcDkzeHhfaW5pdF9kZXZpY2VzKCk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZlZGI5MzEyX2ZsYXNoKTsKK30KKworTUFDSElORV9TVEFSVChFREI5MzEyLCAiQ2lycnVzIExvZ2ljIEVEQjkzMTIgRXZhbHVhdGlvbiBCb2FyZCIpCisJLyogTWFpbnRhaW5lcjogVG91ZmVlcSBIdXNzYWluIDx0b3VmZWVxX2h1c3NhaW5AaW5mb3N5cy5jb20+ICovCisJLnBoeXNfaW8JPSBFUDkzWFhfQVBCX1BIWVNfQkFTRSwKKwkuaW9fcGdfb2Zmc3QJPSAoKEVQOTNYWF9BUEJfVklSVF9CQVNFKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHgwMDAwMDEwMCwKKwkubWFwX2lvCQk9IGVwOTN4eF9tYXBfaW8sCisJLmluaXRfaXJxCT0gZXA5M3h4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmZXA5M3h4X3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBlZGI5MzEyX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jIGIvYXJjaC9hcm0vbWFjaC1mb290YnJpZGdlL2RjMjEyODUuYwppbmRleCA4MjNlMjVkLi5hMWFlNDlkIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLWZvb3RicmlkZ2UvZGMyMTI4NS5jCisrKyBiL2FyY2gvYXJtL21hY2gtZm9vdGJyaWRnZS9kYzIxMjg1LmMKQEAgLTY5LDE2ICs2OSwxNiBAQAogCWlmIChhZGRyKQogCQlzd2l0Y2ggKHNpemUpIHsKIAkJY2FzZSAxOgotCQkJYXNtKCJsZHIlP2IJJTAsIFslMSwgJTJdIgotCQkJCTogIj1yIiAodikgOiAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSk7CisJCQlhc20oImxkcmIJJTAsIFslMSwgJTJdIgorCQkJCTogIj1yIiAodikgOiAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSA6ICJjYyIpOwogCQkJYnJlYWs7CiAJCWNhc2UgMjoKLQkJCWFzbSgibGRyJT9oCSUwLCBbJTEsICUyXSIKLQkJCQk6ICI9ciIgKHYpIDogInIiIChhZGRyKSwgInIiICh3aGVyZSkpOworCQkJYXNtKCJsZHJoCSUwLCBbJTEsICUyXSIKKwkJCQk6ICI9ciIgKHYpIDogInIiIChhZGRyKSwgInIiICh3aGVyZSkgOiAiY2MiKTsKIAkJCWJyZWFrOwogCQljYXNlIDQ6Ci0JCQlhc20oImxkciU/CSUwLCBbJTEsICUyXSIKLQkJCQk6ICI9ciIgKHYpIDogInIiIChhZGRyKSwgInIiICh3aGVyZSkpOworCQkJYXNtKCJsZHIJJTAsIFslMSwgJTJdIgorCQkJCTogIj1yIiAodikgOiAiciIgKGFkZHIpLCAiciIgKHdoZXJlKSA6ICJjYyIpOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTAzLDE2ICsxMDMsMTkgQEAKIAlpZiAoYWRkcikKIAkJc3dpdGNoIChzaXplKSB7CiAJCWNhc2UgMToKLQkJCWFzbSgic3RyJT9iCSUwLCBbJTEsICUyXSIKLQkJCQk6IDogInIiICh2YWx1ZSksICJyIiAoYWRkciksICJyIiAod2hlcmUpKTsKKwkJCWFzbSgic3RyYgklMCwgWyUxLCAlMl0iCisJCQkJOiA6ICJyIiAodmFsdWUpLCAiciIgKGFkZHIpLCAiciIgKHdoZXJlKQorCQkJCTogImNjIik7CiAJCQlicmVhazsKIAkJY2FzZSAyOgotCQkJYXNtKCJzdHIlP2gJJTAsIFslMSwgJTJdIgotCQkJCTogOiAiciIgKHZhbHVlKSwgInIiIChhZGRyKSwgInIiICh3aGVyZSkpOworCQkJYXNtKCJzdHJoCSUwLCBbJTEsICUyXSIKKwkJCQk6IDogInIiICh2YWx1ZSksICJyIiAoYWRkciksICJyIiAod2hlcmUpCisJCQkJOiAiY2MiKTsKIAkJCWJyZWFrOwogCQljYXNlIDQ6Ci0JCQlhc20oInN0ciU/CSUwLCBbJTEsICUyXSIKLQkJCQk6IDogInIiICh2YWx1ZSksICJyIiAoYWRkciksICJyIiAod2hlcmUpKTsKKwkJCWFzbSgic3RyCSUwLCBbJTEsICUyXSIKKwkJCQk6IDogInIiICh2YWx1ZSksICJyIiAoYWRkciksICJyIiAod2hlcmUpCisJCQkJOiAiY2MiKTsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L0tjb25maWcgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9LY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNzJkOTQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9LY29uZmlnCkBAIC0wLDAgKzEsMzUgQEAKK2lmIEFSQ0hfSU9QMzJYCisKK21lbnUgIklPUDMyeCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zIgorCitjb21tZW50ICJJT1AzMnggUGxhdGZvcm0gVHlwZXMiCisKK2NvbmZpZyBNQUNIX0dMQU5UQU5LCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBJTy1EYXRhIEdMQU4gVGFuayIKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgR0xBTiBUYW5rCisJICBOQVMgYXBwbGlhbmNlIG9yIG1hY2hpbmVzIGZyb20gSU8tRGF0YSdzIEhETC1HeHh4LCBIREwtR1d4eHgKKwkgIGFuZCBIREwtR1p4eHggc2VyaWVzLgorCitjb25maWcgQVJDSF9JUTgwMzIxCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIElRODAzMjEiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIElRODAzMjEKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSU9QMzIxIHByb2Nlc3Nvci4KKworY29uZmlnIEFSQ0hfSVEzMTI0NAorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBFUDgwMjE5L0lRMzEyNDQiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIEVQODAyMTkKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSW50ZWwgODAyMTkgcHJvY2Vzc29yIChhIElPUDMyMSB2YXJpYW50KQorCSAgb3IgdGhlIElRMzEyNDQgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMjEgcHJvY2Vzc29yLgorCitjb25maWcgTUFDSF9OMjEwMAorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciB0aGUgVGhlY3VzIG4yMTAwIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcnVuIHlvdXIga2VybmVsIG9uIHRoZSBUaGVjdXMgbjIxMDAKKwkgIE5BUyBhcHBsaWFuY2UuCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwNWIzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK29iai15CQkJOj0gaXJxLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQorCitvYmotJChDT05GSUdfTUFDSF9HTEFOVEFOSykgKz0gZ2xhbnRhbmsubworb2JqLSQoQ09ORklHX0FSQ0hfSVE4MDMyMSkgKz0gaXE4MDMyMS5vCitvYmotJChDT05GSUdfQVJDSF9JUTMxMjQ0KSArPSBpcTMxMjQ0Lm8KK29iai0kKENPTkZJR19NQUNIX04yMTAwKSArPSBuMjEwMC5vCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMyeC9NYWtlZmlsZS5ib290IGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvTWFrZWZpbGUuYm9vdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzAwMGRjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvTWFrZWZpbGUuYm9vdApAQCAtMCwwICsxLDMgQEAKKyAgIHpyZWxhZGRyLXkJOj0gMHhhMDAwODAwMAorcGFyYW1zX3BoeXMteQk6PSAweGEwMDAwMTAwCitpbml0cmRfcGh5cy15CTo9IDB4YTA4MDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2dsYW50YW5rLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5Yjc2NTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9nbGFudGFuay5jCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pb3AzMngvZ2xhbnRhbmsuYworICoKKyAqIEJvYXJkIHN1cHBvcnQgY29kZSBmb3IgdGhlIEdMQU4gVGFuay4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWFydGluIE1pY2hsbWF5ciA8dGJtQGN5cml1cy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAd2FudHN0b2ZseS5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKworLyoKKyAqIEdMQU4gVGFuayB0aW1lciB0aWNrIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBnbGFudGFua190aW1lcl9pbml0KHZvaWQpCit7CisJLyogMzMuMzMzIE1IeiBjcnlzdGFsLiAgKi8KKwlpb3AzeHhfaW5pdF90aW1lKDIwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGdsYW50YW5rX3RpbWVyID0geworCS5pbml0CQk9IGdsYW50YW5rX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKK307CisKKworLyoKKyAqIEdMQU4gVGFuayBJL08uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgZ2xhbnRhbmtfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBvbi1ib2FyZCBkZXZpY2VzICovCisJCS52aXJ0dWFsCT0gR0xBTlRBTktfVUFSVCwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKEdMQU5UQU5LX1VBUlQpLAorCQkubGVuZ3RoCQk9IDB4MDAxMDAwMDAsCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0sCit9OworCit2b2lkIF9faW5pdCBnbGFudGFua19tYXBfaW8odm9pZCkKK3sKKwlpb3AzeHhfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGdsYW50YW5rX2lvX2Rlc2MsIEFSUkFZX1NJWkUoZ2xhbnRhbmtfaW9fZGVzYykpOworfQorCisKKy8qCisgKiBHTEFOIFRhbmsgUENJLgorICovCisjZGVmaW5lIElOVEEJSVJRX0lPUDMyWF9YSU5UMAorI2RlZmluZSBJTlRCCUlSUV9JT1AzMlhfWElOVDEKKyNkZWZpbmUgSU5UQwlJUlFfSU9QMzJYX1hJTlQyCisjZGVmaW5lIElOVEQJSVJRX0lPUDMyWF9YSU5UMworCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQKK2dsYW50YW5rX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbXVs0XSA9IHsKKwkJLyoKKwkJICogUENJIElEU0VML0lOVFBJTi0+SU5UTElORQorCQkgKiBBICAgICAgIEIgICAgICAgQyAgICAgICBECisJCSAqLworCQl7SU5URCwgSU5URCwgSU5URCwgSU5URH0sIC8qIFVBUlQgKDgyNTApICovCisJCXtJTlRBLCBJTlRBLCBJTlRBLCBJTlRBfSwgLyogRXRoZXJuZXQgKEUxMDAwKSAqLworCQl7SU5UQiwgSU5UQiwgSU5UQiwgSU5UQn0sIC8qIElERSAoQUVDNjI4MFIpICovCisJCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogVVNCIChORUMpICovCisJfTsKKworCUJVR19PTihwaW4gPCAxIHx8IHBpbiA+IDQpOworCisJcmV0dXJuIHBjaV9pcnFfdGFibGVbc2xvdCAlIDRdW3BpbiAtIDFdOworfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBnbGFudGFua19wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpb3AzeHhfcGNpX3NldHVwLAorCS5wcmVpbml0CT0gaW9wM3h4X3BjaV9wcmVpbml0LAorCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBnbGFudGFua19wY2lfbWFwX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdsYW50YW5rX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfZ2xhbnRhbmsoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZnbGFudGFua19wY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChnbGFudGFua19wY2lfaW5pdCk7CisKKworLyoKKyAqIEdMQU4gVGFuayBtYWNoaW5lIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBnbGFudGFua19mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBnbGFudGFua19mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHhmMDAwMDAwMCwKKwkuZW5kCQk9IDB4ZjAwN2ZmZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgZ2xhbnRhbmtfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmZ2xhbnRhbmtfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZ2xhbnRhbmtfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGdsYW50YW5rX3NlcmlhbF9wb3J0W10gPSB7CisJeworCQkubWFwYmFzZQk9IEdMQU5UQU5LX1VBUlQsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilHTEFOVEFOS19VQVJULAorCQkuaXJxCQk9IElSUV9JT1AzMlhfWElOVDMsCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAwLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGdsYW50YW5rX3VhcnRfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IEdMQU5UQU5LX1VBUlQsCisJLmVuZAkJPSBHTEFOVEFOS19VQVJUICsgNywKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBnbGFudGFua19zZXJpYWxfZGV2aWNlID0geworCS5uYW1lCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQkJPSBnbGFudGFua19zZXJpYWxfcG9ydCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmZ2xhbnRhbmtfdWFydF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyB2b2lkIGdsYW50YW5rX3Bvd2VyX29mZih2b2lkKQoreworCV9fcmF3X3dyaXRlYigweDAxLCAweGZlOGQwMDA0KTsKKworCXdoaWxlICgxKQorCQk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBnbGFudGFua19pbml0X21hY2hpbmUodm9pZCkKK3sKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlvcDN4eF9pMmMwX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb3AzeHhfaTJjMV9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmZ2xhbnRhbmtfZmxhc2hfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmdsYW50YW5rX3NlcmlhbF9kZXZpY2UpOworCisJcG1fcG93ZXJfb2ZmID0gZ2xhbnRhbmtfcG93ZXJfb2ZmOworfQorCitNQUNISU5FX1NUQVJUKEdMQU5UQU5LLCAiR0xBTiBUYW5rIikKKwkvKiBNYWludGFpbmVyOiBMZW5uZXJ0IEJ1eXRlbmhlayA8YnV5dGVuaEB3YW50c3RvZmx5Lm9yZz4gKi8KKwkucGh5c19pbwk9IEdMQU5UQU5LX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKChHTEFOVEFOS19VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkubWFwX2lvCQk9IGdsYW50YW5rX21hcF9pbywKKwkuaW5pdF9pcnEJPSBpb3AzMnhfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZnbGFudGFua190aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gZ2xhbnRhbmtfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lxMzEyNDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTRhZWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pb3AzMngvaXEzMTI0NC5jCisgKgorICogQm9hcmQgc3VwcG9ydCBjb2RlIGZvciB0aGUgSW50ZWwgRVA4MDIxOSBhbmQgSVEzMTI0NCBwbGF0Zm9ybXMuCisgKgorICogQXV0aG9yOiBSb3J5IEJvbHQgPHJvcnlib2x0QHBhY2JlbGwubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvcnkgQm9sdAorICogQ29weXJpZ2h0IDIwMDMgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGh5c21hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCisKKy8qCisgKiBUaGUgRVA4MDIxOSBhbmQgSVEzMTI0NCB1c2UgdGhlIHNhbWUgbWFjaGluZSBJRC4gIFRvIGZpbmQgb3V0CisgKiB3aGljaCBvZiB0aGUgdHdvIHdlJ3JlIHJ1bm5pbmcgb24sIHdlIGxvb2sgYXQgdGhlIHByb2Nlc3NvciBJRC4KKyAqLworc3RhdGljIGludCBpc184MDIxOSh2b2lkKQoreworCWV4dGVybiBpbnQgcHJvY2Vzc29yX2lkOworCXJldHVybiAhISgocHJvY2Vzc29yX2lkICYgMHhmZmZmZmZlMCkgPT0gMHg2OTA1MmUyMCk7Cit9CisKKworLyoKKyAqIEVQODAyMTkvSVEzMTI0NCB0aW1lciB0aWNrIGNvbmZpZ3VyYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBpcTMxMjQ0X3RpbWVyX2luaXQodm9pZCkKK3sKKwlpZiAoaXNfODAyMTkoKSkgeworCQkvKiAzMy4zMzMgTUh6IGNyeXN0YWwuICAqLworCQlpb3AzeHhfaW5pdF90aW1lKDIwMDAwMDAwMCk7CisJfSBlbHNlIHsKKwkJLyogMzMuMDAwIE1IeiBjcnlzdGFsLiAgKi8KKwkJaW9wM3h4X2luaXRfdGltZSgxOTgwMDAwMDApOworCX0KK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXEzMTI0NF90aW1lciA9IHsKKwkuaW5pdAkJPSBpcTMxMjQ0X3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKK307CisKKworLyoKKyAqIElRMzEyNDQgSS9PLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlxMzEyNDRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJewkvKiBvbi1ib2FyZCBkZXZpY2VzICovCisJCS52aXJ0dWFsCT0gSVEzMTI0NF9VQVJULAorCQkucGZuCQk9IF9fcGh5c190b19wZm4oSVEzMTI0NF9VQVJUKSwKKwkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJfSwKK307CisKK3ZvaWQgX19pbml0IGlxMzEyNDRfbWFwX2lvKHZvaWQpCit7CisJaW9wM3h4X21hcF9pbygpOworCWlvdGFibGVfaW5pdChpcTMxMjQ0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaXEzMTI0NF9pb19kZXNjKSk7Cit9CisKKworLyoKKyAqIEVQODAyMTkvSVEzMTI0NCBQQ0kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAorZXA4MDIxOV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IGlycTsKKworCWlmIChzbG90ID09IDApIHsKKwkJLyogQ0ZsYXNoICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDE7CisJfSBlbHNlIGlmIChzbG90ID09IDEpIHsKKwkJLyogODI1NTEgUHJvIDEwMCAqLworCQlpcnEgPSBJUlFfSU9QMzJYX1hJTlQwOworCX0gZWxzZSBpZiAoc2xvdCA9PSAyKSB7CisJCS8qIFBDSS1YIFNsb3QgKi8KKwkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMzsKKwl9IGVsc2UgaWYgKHNsb3QgPT0gMykgeworCQkvKiBTQVRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDI7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlcDgwMjE5X3BjaV9tYXBfaXJxKCkgY2FsbGVkIGZvciB1bmtub3duICIKKwkJCSJkZXZpY2UgUENJOiVkOiVkOiVkXG4iLCBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKwkJaXJxID0gLTE7CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgZXA4MDIxOV9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpb3AzeHhfcGNpX3NldHVwLAorCS5wcmVpbml0CT0gaW9wM3h4X3BjaV9wcmVpbml0LAorCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBlcDgwMjE5X3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGlubGluZSBpbnQgX19pbml0CitpcTMxMjQ0X3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpbnQgaXJxOworCisJaWYgKHNsb3QgPT0gMCkgeworCQkvKiBDRmxhc2ggKi8KKwkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMTsKKwl9IGVsc2UgaWYgKHNsb3QgPT0gMSkgeworCQkvKiBTQVRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDI7CisJfSBlbHNlIGlmIChzbG90ID09IDIpIHsKKwkJLyogUENJLVggU2xvdCAqLworCQlpcnEgPSBJUlFfSU9QMzJYX1hJTlQzOworCX0gZWxzZSBpZiAoc2xvdCA9PSAzKSB7CisJCS8qIDgyNTQ2IEdpZ0UgKi8KKwkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMDsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlxMzEyNDRfcGNpX21hcF9pcnEgY2FsbGVkIGZvciB1bmtub3duICIKKwkJCSJkZXZpY2UgUENJOiVkOiVkOiVkXG4iLCBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKwkJaXJxID0gLTE7CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgaXEzMTI0NF9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpb3AzeHhfcGNpX3NldHVwLAorCS5wcmVpbml0CT0gaW9wM3h4X3BjaV9wcmVpbml0LAorCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBpcTMxMjQ0X3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXEzMTI0NF9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxMzEyNDQoKSkgeworCQlpZiAoaXNfODAyMTkoKSkgeworCQkJcGNpX2NvbW1vbl9pbml0KCZlcDgwMjE5X3BjaSk7CisJCX0gZWxzZSB7CisJCQlwY2lfY29tbW9uX2luaXQoJmlxMzEyNDRfcGNpKTsKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoaXEzMTI0NF9wY2lfaW5pdCk7CisKKworLyoKKyAqIElRMzEyNDQgbWFjaGluZSBpbml0aWFsaXNhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgaXEzMTI0NF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcTMxMjQ0X2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweGYwMDAwMDAwLAorCS5lbmQJCT0gMHhmMDdmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcTMxMjQ0X2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmlxMzEyNDRfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaXEzMTI0NF9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgaXEzMTI0NF9zZXJpYWxfcG9ydFtdID0geworCXsKKwkJLm1hcGJhc2UJPSBJUTMxMjQ0X1VBUlQsCisJCS5tZW1iYXNlCT0gKGNoYXIgKilJUTMxMjQ0X1VBUlQsCisJCS5pcnEJCT0gSVJRX0lPUDMyWF9YSU5UMSwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDAsCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXEzMTI0NF91YXJ0X3Jlc291cmNlID0geworCS5zdGFydAkJPSBJUTMxMjQ0X1VBUlQsCisJLmVuZAkJPSBJUTMxMjQ0X1VBUlQgKyA3LAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlxMzEyNDRfc2VyaWFsX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJCT0gaXEzMTI0NF9zZXJpYWxfcG9ydCwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaXEzMTI0NF91YXJ0X3Jlc291cmNlLAorfTsKKworLyoKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBzZW5kIGEgU0hVVERPV05fQ09NUExFVEUgbWVzc2FnZSB0byB0aGUgUElDCisgKiBjb250cm9sbGVyIG92ZXIgSTJDLiAgV2UgYXJlIG5vdCB1c2luZyB0aGUgaTJjIHN1YnN5c3RlbSBzaW5jZQorICogd2UgYXJlIGdvaW5nIHRvIHBvd2VyIG9mZiBhbmQgaXQgbWF5IGJlIHJlbW92ZWQKKyAqLwordm9pZCBlcDgwMjE5X3Bvd2VyX29mZih2b2lkKQoreworCS8qCisJICogU2VuZCB0aGUgQWRkcmVzcyBieXRlIHcvIHRoZSBzdGFydCBjb25kaXRpb24KKwkgKi8KKwkqSU9QM1hYX0lEQlIxID0gMHg2MDsKKwkqSU9QM1hYX0lDUjEgPSAweEU5OworCW1kZWxheSgxKTsKKworCS8qCisJICogU2VuZCB0aGUgU1RBUlRfTVNHIGJ5dGUgdy8gbm8gc3RhcnQgb3Igc3RvcCBjb25kaXRpb24KKwkgKi8KKwkqSU9QM1hYX0lEQlIxID0gMHgwRjsKKwkqSU9QM1hYX0lDUjEgPSAweEU4OworCW1kZWxheSgxKTsKKworCS8qCisJICogU2VuZCB0aGUgU0hVVERPV05fQ09NUExFVEUgTWVzc2FnZSBJRCBieXRlIHcvIG5vIHN0YXJ0IG9yCisJICogc3RvcCBjb25kaXRpb24KKwkgKi8KKwkqSU9QM1hYX0lEQlIxID0gMHgwMzsKKwkqSU9QM1hYX0lDUjEgPSAweEU4OworCW1kZWxheSgxKTsKKworCS8qCisJICogU2VuZCBhbiBpZ25vcmVkIGJ5dGUgdy8gc3RvcCBjb25kaXRpb24KKwkgKi8KKwkqSU9QM1hYX0lEQlIxID0gMHgwMDsKKwkqSU9QM1hYX0lDUjEgPSAweEVBOworCisJd2hpbGUgKDEpCisJCTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGlxMzEyNDRfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb3AzeHhfaTJjMF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9wM3h4X2kyYzFfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlxMzEyNDRfZmxhc2hfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlxMzEyNDRfc2VyaWFsX2RldmljZSk7CisKKwlpZiAoaXNfODAyMTkoKSkKKwkJcG1fcG93ZXJfb2ZmID0gZXA4MDIxOV9wb3dlcl9vZmY7Cit9CisKK01BQ0hJTkVfU1RBUlQoSVEzMTI0NCwgIkludGVsIElRMzEyNDQiKQorCS8qIE1haW50YWluZXI6IEludGVsIENvcnAuICovCisJLnBoeXNfaW8JPSBJUTMxMjQ0X1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKChJUTMxMjQ0X1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5tYXBfaW8JCT0gaXEzMTI0NF9tYXBfaW8sCisJLmluaXRfaXJxCT0gaW9wMzJ4X2luaXRfaXJxLAorCS50aW1lcgkJPSAmaXEzMTI0NF90aW1lciwKKwkuaW5pdF9tYWNoaW5lCT0gaXEzMTI0NF9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXE4MDMyMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMzdiNTUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9pcTgwMzIxLmMKKyAqCisgKiBCb2FyZCBzdXBwb3J0IGNvZGUgZm9yIHRoZSBJbnRlbCBJUTgwMzIxIHBsYXRmb3JtLgorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworLyoKKyAqIElRODAzMjEgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgaXE4MDMyMV90aW1lcl9pbml0KHZvaWQpCit7CisJLyogMzMuMzMzIE1IeiBjcnlzdGFsLiAgKi8KKwlpb3AzeHhfaW5pdF90aW1lKDIwMDAwMDAwMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzX3RpbWVyIGlxODAzMjFfdGltZXIgPSB7CisJLmluaXQJCT0gaXE4MDMyMV90aW1lcl9pbml0LAorCS5vZmZzZXQJCT0gaW9wM3h4X2dldHRpbWVvZmZzZXQsCit9OworCisKKy8qCisgKiBJUTgwMzIxIEkvTy4KKyAqLworc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpcTgwMzIxX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworIAl7CS8qIG9uLWJvYXJkIGRldmljZXMgKi8KKwkJLnZpcnR1YWwJPSBJUTgwMzIxX1VBUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJUTgwMzIxX1VBUlQpLAorCQkubGVuZ3RoCQk9IDB4MDAxMDAwMDAsCisJCS50eXBlCQk9IE1UX0RFVklDRSwKKwl9LAorfTsKKwordm9pZCBfX2luaXQgaXE4MDMyMV9tYXBfaW8odm9pZCkKK3sKKwlpb3AzeHhfbWFwX2lvKCk7CisJaW90YWJsZV9pbml0KGlxODAzMjFfaW9fZGVzYywgQVJSQVlfU0laRShpcTgwMzIxX2lvX2Rlc2MpKTsKK30KKworCisvKgorICogSVE4MDMyMSBQQ0kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAoraXE4MDMyMV9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IGlycTsKKworCWlmICgoc2xvdCA9PSAyIHx8IHNsb3QgPT0gNikgJiYgcGluID09IDEpIHsKKwkJLyogUENJLVggU2xvdCBJTlRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDI7CisJfSBlbHNlIGlmICgoc2xvdCA9PSAyIHx8IHNsb3QgPT0gNikgJiYgcGluID09IDIpIHsKKwkJLyogUENJLVggU2xvdCBJTlRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDM7CisJfSBlbHNlIGlmICgoc2xvdCA9PSAyIHx8IHNsb3QgPT0gNikgJiYgcGluID09IDMpIHsKKwkJLyogUENJLVggU2xvdCBJTlRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDA7CisJfSBlbHNlIGlmICgoc2xvdCA9PSAyIHx8IHNsb3QgPT0gNikgJiYgcGluID09IDQpIHsKKwkJLyogUENJLVggU2xvdCBJTlRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDE7CisJfSBlbHNlIGlmIChzbG90ID09IDQgfHwgc2xvdCA9PSA4KSB7CisJCS8qIEdpZy1FICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDA7CisJfSBlbHNlIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpcTgwMzIxX3BjaV9tYXBfaXJxKCkgY2FsbGVkIGZvciB1bmtub3duICIKKwkJCSJkZXZpY2UgUENJOiVkOiVkOiVkXG4iLCBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKwkJaXJxID0gLTE7CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgaXE4MDMyMV9wY2kgX19pbml0ZGF0YSA9IHsKKwkuc3dpenpsZQk9IHBjaV9zdGRfc3dpenpsZSwKKwkubnJfY29udHJvbGxlcnMgPSAxLAorCS5zZXR1cAkJPSBpb3AzeHhfcGNpX3NldHVwLAorCS5wcmVpbml0CT0gaW9wM3h4X3BjaV9wcmVpbml0LAorCS5zY2FuCQk9IGlvcDN4eF9wY2lfc2Nhbl9idXMsCisJLm1hcF9pcnEJPSBpcTgwMzIxX3BjaV9tYXBfaXJxLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaXE4MDMyMV9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxODAzMjEoKSkKKwkJcGNpX2NvbW1vbl9pbml0KCZpcTgwMzIxX3BjaSk7CisKKwlyZXR1cm4gMDsKK30KKworc3Vic3lzX2luaXRjYWxsKGlxODAzMjFfcGNpX2luaXQpOworCisKKy8qCisgKiBJUTgwMzIxIG1hY2hpbmUgaW5pdGlhbGlzYXRpb24uCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGh5c21hcF9mbGFzaF9kYXRhIGlxODAzMjFfZmxhc2hfZGF0YSA9IHsKKwkud2lkdGgJCT0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaXE4MDMyMV9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHhmMDAwMDAwMCwKKwkuZW5kCQk9IDB4ZjA3ZmZmZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaXE4MDMyMV9mbGFzaF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9ICZpcTgwMzIxX2ZsYXNoX2RhdGEsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmlxODAzMjFfZmxhc2hfcmVzb3VyY2UsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGlxODAzMjFfc2VyaWFsX3BvcnRbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gSVE4MDMyMV9VQVJULAorCQkubWVtYmFzZQk9IChjaGFyICopSVE4MDMyMV9VQVJULAorCQkuaXJxCQk9IElSUV9JT1AzMlhfWElOVDEsCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNULAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkucmVnc2hpZnQJPSAwLAorCQkudWFydGNsawk9IDE4NDMyMDAsCisJfSwKKwl7IH0sCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlxODAzMjFfdWFydF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gSVE4MDMyMV9VQVJULAorCS5lbmQJCT0gSVE4MDMyMV9VQVJUICsgNywKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcTgwMzIxX3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9IGlxODAzMjFfc2VyaWFsX3BvcnQsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IDEsCisJLnJlc291cmNlCT0gJmlxODAzMjFfdWFydF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpcTgwMzIxX2luaXRfbWFjaGluZSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9wM3h4X2kyYzBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlvcDN4eF9pMmMxX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpcTgwMzIxX2ZsYXNoX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpcTgwMzIxX3NlcmlhbF9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKElRODAzMjEsICJJbnRlbCBJUTgwMzIxIikKKwkvKiBNYWludGFpbmVyOiBJbnRlbCBDb3JwLiAqLworCS5waHlzX2lvCT0gSVE4MDMyMV9VQVJULAorCS5pb19wZ19vZmZzdAk9ICgoSVE4MDMyMV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKKwkubWFwX2lvCQk9IGlxODAzMjFfbWFwX2lvLAorCS5pbml0X2lycQk9IGlvcDMyeF9pbml0X2lycSwKKwkudGltZXIJCT0gJmlxODAzMjFfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGlxODAzMjFfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzMngvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNjMwMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L2lycS5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9pcnEuYworICoKKyAqIEdlbmVyaWMgSU9QMzJYIElSUSBoYW5kbGluZyBmdW5jdGlvbmFsaXR5CisgKgorICogQXV0aG9yOiBSb3J5IEJvbHQgPHJvcnlib2x0QHBhY2JlbGwubmV0PgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJvcnkgQm9sdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+CisKK3N0YXRpYyB1MzIgaW9wMzJ4X21hc2s7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnRjdGxfd3JpdGUodTMyIHZhbCkKK3sKKwlpb3AzeHhfY3A2X2VuYWJsZSgpOworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKKwlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludHN0cl93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCWlvcDN4eF9jcDZfZGlzYWJsZSgpOworfQorCitzdGF0aWMgdm9pZAoraW9wMzJ4X2lycV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9wMzJ4X21hc2sgJj0gfigxIDw8IGlycSk7CisJaW50Y3RsX3dyaXRlKGlvcDMyeF9tYXNrKTsKK30KKworc3RhdGljIHZvaWQKK2lvcDMyeF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9wMzJ4X21hc2sgfD0gMSA8PCBpcnE7CisJaW50Y3RsX3dyaXRlKGlvcDMyeF9tYXNrKTsKK30KKworc3RydWN0IGlycV9jaGlwIGV4dF9jaGlwID0geworCS5uYW1lCT0gIklPUDMyeCIsCisJLmFjawk9IGlvcDMyeF9pcnFfbWFzaywKKwkubWFzawk9IGlvcDMyeF9pcnFfbWFzaywKKwkudW5tYXNrCT0gaW9wMzJ4X2lycV91bm1hc2ssCit9OworCit2b2lkIF9faW5pdCBpb3AzMnhfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaTsKKworCWludGN0bF93cml0ZSgwKTsKKwlpbnRzdHJfd3JpdGUoMCk7CisJaWYgKG1hY2hpbmVfaXNfZ2xhbnRhbmsoKSB8fAorCSAgICBtYWNoaW5lX2lzX2lxODAzMjEoKSB8fAorCSAgICBtYWNoaW5lX2lzX2lxMzEyNDQoKSB8fAorCSAgICBtYWNoaW5lX2lzX24yMTAwKCkpCisJCSpJT1AzWFhfUENJSVJTUiA9IDB4MGY7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfSVJRUzsgaSsrKSB7CisJCXNldF9pcnFfY2hpcChpLCAmZXh0X2NoaXApOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzMngvbjIxMDAuYyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJjOTRhNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzJ4L24yMTAwLmMKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDMyeC9uMjEwMC5jCisgKgorICogQm9hcmQgc3VwcG9ydCBjb2RlIGZvciB0aGUgVGhlY3VzIE4yMTAwIHBsYXRmb3JtLgorICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqIENvcHlyaWdodCAyMDAzIChjKSBNb250YVZpc3RhLCBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0IEludGVsIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworLyoKKyAqIE4yMTAwIHRpbWVyIHRpY2sgY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IG4yMTAwX3RpbWVyX2luaXQodm9pZCkKK3sKKwkvKiAzMy4wMDAgTUh6IGNyeXN0YWwuICAqLworCWlvcDN4eF9pbml0X3RpbWUoMTk4MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgbjIxMDBfdGltZXIgPSB7CisJLmluaXQJCT0gbjIxMDBfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IGlvcDN4eF9nZXR0aW1lb2Zmc2V0LAorfTsKKworCisvKgorICogTjIxMDAgSS9PLgorICovCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIG4yMTAwX2lvX2Rlc2NbXSBfX2luaXRkYXRhID0geworCXsJLyogb24tYm9hcmQgZGV2aWNlcyAqLworCQkudmlydHVhbAk9IE4yMTAwX1VBUlQsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihOMjEwMF9VQVJUKSwKKwkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UKKwl9LAorfTsKKwordm9pZCBfX2luaXQgbjIxMDBfbWFwX2lvKHZvaWQpCit7CisJaW9wM3h4X21hcF9pbygpOworCWlvdGFibGVfaW5pdChuMjEwMF9pb19kZXNjLCBBUlJBWV9TSVpFKG4yMTAwX2lvX2Rlc2MpKTsKK30KKworCisvKgorICogTjIxMDAgUENJLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQKK24yMTAwX3BjaV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKK3sKKwlpbnQgaXJxOworCisJaWYgKFBDSV9TTE9UKGRldi0+ZGV2Zm4pID09IDEpIHsKKwkJLyogUlRMODExMFNCICMxICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDA7CisJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSAyKSB7CisJCS8qIFJUTDgxMTBTQiAjMiAqLworCQlpcnEgPSBJUlFfSU9QMzJYX1hJTlQxOworCX0gZWxzZSBpZiAoUENJX1NMT1QoZGV2LT5kZXZmbikgPT0gMykgeworCQkvKiBTaWwzNTEyICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDI7CisJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSA0ICYmIHBpbiA9PSAxKSB7CisJCS8qIFZUNjIxMiBJTlRBICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDE7CisJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSA0ICYmIHBpbiA9PSAyKSB7CisJCS8qIFZUNjIxMiBJTlRCICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDA7CisJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSA0ICYmIHBpbiA9PSAzKSB7CisJCS8qIFZUNjIxMiBJTlRDICovCisJCWlycSA9IElSUV9JT1AzMlhfWElOVDI7CisJfSBlbHNlIGlmIChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSA1KSB7CisJCS8qIE1pbmktUENJIHNsb3QgKi8KKwkJaXJxID0gSVJRX0lPUDMyWF9YSU5UMzsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIm4yMTAwX3BjaV9tYXBfaXJxKCkgY2FsbGVkIGZvciB1bmtub3duICIKKwkJCSJkZXZpY2UgUENJOiVkOiVkOiVkXG4iLCBkZXYtPmJ1cy0+bnVtYmVyLAorCQkJUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKwkJaXJxID0gLTE7CisJfQorCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCBod19wY2kgbjIxMDBfcGNpIF9faW5pdGRhdGEgPSB7CisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkuc2V0dXAJCT0gaW9wM3h4X3BjaV9zZXR1cCwKKwkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdCwKKwkuc2NhbgkJPSBpb3AzeHhfcGNpX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gbjIxMDBfcGNpX21hcF9pcnEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBuMjEwMF9wY2lfaW5pdCh2b2lkKQoreworCWlmIChtYWNoaW5lX2lzX24yMTAwKCkpCisJCXBjaV9jb21tb25faW5pdCgmbjIxMDBfcGNpKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwobjIxMDBfcGNpX2luaXQpOworCisKKy8qCisgKiBOMjEwMCBtYWNoaW5lIGluaXRpYWxpc2F0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBuMjEwMF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBuMjEwMF9mbGFzaF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gMHhmMDAwMDAwMCwKKwkuZW5kCQk9IDB4ZjBmZmZmZmYsCisJLmZsYWdzCQk9IElPUkVTT1VSQ0VfTUVNLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbjIxMDBfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmbjIxMDBfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmbjIxMDBfZmxhc2hfcmVzb3VyY2UsCit9OworCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgbjIxMDBfc2VyaWFsX3BvcnRbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gTjIxMDBfVUFSVCwKKwkJLm1lbWJhc2UJPSAoY2hhciAqKU4yMTAwX1VBUlQsCisJCS5pcnEJCT0gMCwKKwkJLmZsYWdzCQk9IFVQRl9TS0lQX1RFU1QsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5yZWdzaGlmdAk9IDAsCisJCS51YXJ0Y2xrCT0gMTg0MzIwMCwKKwl9LAorCXsgfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbjIxMDBfdWFydF9yZXNvdXJjZSA9IHsKKwkuc3RhcnQJCT0gTjIxMDBfVUFSVCwKKwkuZW5kCQk9IE4yMTAwX1VBUlQgKyA3LAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG4yMTAwX3NlcmlhbF9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNlcmlhbDgyNTAiLAorCS5pZAkJPSBQTEFUODI1MF9ERVZfUExBVEZPUk0sCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9IG4yMTAwX3NlcmlhbF9wb3J0LAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZuMjEwMF91YXJ0X3Jlc291cmNlLAorfTsKKworCisvKgorICogUHVsbCBQQ0E5NTMyIEdQSU8gIzggbG93IHRvIHBvd2VyIG9mZiB0aGUgbWFjaGluZS4KKyAqLworc3RhdGljIHZvaWQgbjIxMDBfcG93ZXJfb2ZmKHZvaWQpCit7CisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKKworCS8qIFN0YXJ0IGNvbmRpdGlvbiwgSTJDIGFkZHJlc3Mgb2YgUENBOTUzMiwgd3JpdGUgdHJhbnNhY3Rpb24uICAqLworCSpJT1AzWFhfSURCUjAgPSAweGMwOworCSpJT1AzWFhfSUNSMCA9IDB4ZTk7CisJbWRlbGF5KDEpOworCisJLyogV3JpdGUgYWRkcmVzcyAweDA4LiAgKi8KKwkqSU9QM1hYX0lEQlIwID0gMHgwODsKKwkqSU9QM1hYX0lDUjAgPSAweGU4OworCW1kZWxheSgxKTsKKworCS8qIFdyaXRlIGRhdGEgMHgwMSwgc3RvcCBjb25kaXRpb24uICAqLworCSpJT1AzWFhfSURCUjAgPSAweDAxOworCSpJT1AzWFhfSUNSMCA9IDB4ZWE7CisKKwl3aGlsZSAoMSkKKwkJOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBwb3dlcl9idXR0b25fcG9sbF90aW1lcjsKKworc3RhdGljIHZvaWQgcG93ZXJfYnV0dG9uX3BvbGwodW5zaWduZWQgbG9uZyBkdW1teSkKK3sKKwlpZiAoZ3Bpb19saW5lX2dldChOMjEwMF9QT1dFUl9CVVRUT04pID09IDApIHsKKwkJY3RybF9hbHRfZGVsKCk7CisJCXJldHVybjsKKwl9CisKKwlwb3dlcl9idXR0b25fcG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcyArIChIWiAvIDEwKTsKKwlhZGRfdGltZXIoJnBvd2VyX2J1dHRvbl9wb2xsX3RpbWVyKTsKK30KKworCitzdGF0aWMgdm9pZCBfX2luaXQgbjIxMDBfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb3AzeHhfaTJjMF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmbjIxMDBfZmxhc2hfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJm4yMTAwX3NlcmlhbF9kZXZpY2UpOworCisJcG1fcG93ZXJfb2ZmID0gbjIxMDBfcG93ZXJfb2ZmOworCisJaW5pdF90aW1lcigmcG93ZXJfYnV0dG9uX3BvbGxfdGltZXIpOworCXBvd2VyX2J1dHRvbl9wb2xsX3RpbWVyLmZ1bmN0aW9uID0gcG93ZXJfYnV0dG9uX3BvbGw7CisJcG93ZXJfYnV0dG9uX3BvbGxfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyAoSFogLyAxMCk7CisJYWRkX3RpbWVyKCZwb3dlcl9idXR0b25fcG9sbF90aW1lcik7Cit9CisKK01BQ0hJTkVfU1RBUlQoTjIxMDAsICJUaGVjdXMgTjIxMDAiKQorCS8qIE1haW50YWluZXI6IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPiAqLworCS5waHlzX2lvCT0gTjIxMDBfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKE4yMTAwX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAorCS5tYXBfaW8JCT0gbjIxMDBfbWFwX2lvLAorCS5pbml0X2lycQk9IGlvcDMyeF9pbml0X2lycSwKKwkudGltZXIJCT0gJm4yMTAwX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBuMjEwMF9pbml0X21hY2hpbmUsCitNQUNISU5FX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFhMDE2YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L0tjb25maWcKQEAgLTAsMCArMSwyMSBAQAoraWYgQVJDSF9JT1AzM1gKKworbWVudSAiSU9QMzN4IEltcGxlbWVudGF0aW9uIE9wdGlvbnMiCisKK2NvbW1lbnQgIklPUDMzeCBQbGF0Zm9ybSBUeXBlcyIKKworY29uZmlnIEFSQ0hfSVE4MDMzMQorCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBJUTgwMzMxIgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcnVuIHlvdXIga2VybmVsIG9uIHRoZSBJbnRlbCBJUTgwMzMxCisJICBldmFsdWF0aW9uIGtpdCBmb3IgdGhlIElPUDMzMSBjaGlwc2V0LgorCitjb25maWcgTUFDSF9JUTgwMzMyCisJYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIElRODAzMzIiCisJaGVscAorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIElRODAzMzIKKwkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSU9QMzMyIGNoaXBzZXQuCisKK2VuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L01ha2VmaWxlIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAwODFkOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L01ha2VmaWxlCkBAIC0wLDAgKzEsMTEgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCisjCisKK29iai15CQkJOj0gaXJxLm8gdWFydC5vCitvYmotbQkJCTo9CitvYmotbgkJCTo9CitvYmotCQkJOj0KKworb2JqLSQoQ09ORklHX0FSQ0hfSVE4MDMzMSkgKz0gaXE4MDMzMS5vCitvYmotJChDT05GSUdfTUFDSF9JUTgwMzMyKSArPSBpcTgwMzMyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9NYWtlZmlsZS5ib290Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDM5YzMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9NYWtlZmlsZS5ib290CkBAIC0wLDAgKzEsMyBAQAorICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCitwYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKK2luaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXE4MDMzMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk3YTdiNzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMxLmMKKyAqCisgKiBCb2FyZCBzdXBwb3J0IGNvZGUgZm9yIHRoZSBJbnRlbCBJUTgwMzMxIHBsYXRmb3JtLgorICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9waHlzbWFwLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisKKy8qCisgKiBJUTgwMzMxIHRpbWVyIHRpY2sgY29uZmlndXJhdGlvbi4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGlxODAzMzFfdGltZXJfaW5pdCh2b2lkKQoreworCS8qIEQtU3RlcCBwYXJ0cyBydW4gYXQgYSBoaWdoZXIgaW50ZXJuYWwgYnVzIGZyZXF1ZW5jeSAqLworCWlmICgqSU9QM1hYX0FUVVJJRCA+PSAweGEpCisJCWlvcDN4eF9pbml0X3RpbWUoMzMzMDAwMDAwKTsKKwllbHNlCisJCWlvcDN4eF9pbml0X3RpbWUoMjY2MDAwMDAwKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNfdGltZXIgaXE4MDMzMV90aW1lciA9IHsKKwkuaW5pdAkJPSBpcTgwMzMxX3RpbWVyX2luaXQsCisJLm9mZnNldAkJPSBpb3AzeHhfZ2V0dGltZW9mZnNldCwKK307CisKKworLyoKKyAqIElRODAzMzEgUENJLgorICovCitzdGF0aWMgaW5saW5lIGludCBfX2luaXQKK2lxODAzMzFfcGNpX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQoreworCWludCBpcnE7CisKKwlpZiAoc2xvdCA9PSAxICYmIHBpbiA9PSAxKSB7CisJCS8qIFBDSS1YIFNsb3QgSU5UQSAqLworCQlpcnEgPSBJUlFfSU9QMzNYX1hJTlQxOworCX0gZWxzZSBpZiAoc2xvdCA9PSAxICYmIHBpbiA9PSAyKSB7CisJCS8qIFBDSS1YIFNsb3QgSU5UQiAqLworCQlpcnEgPSBJUlFfSU9QMzNYX1hJTlQyOworCX0gZWxzZSBpZiAoc2xvdCA9PSAxICYmIHBpbiA9PSAzKSB7CisJCS8qIFBDSS1YIFNsb3QgSU5UQyAqLworCQlpcnEgPSBJUlFfSU9QMzNYX1hJTlQzOworCX0gZWxzZSBpZiAoc2xvdCA9PSAxICYmIHBpbiA9PSA0KSB7CisJCS8qIFBDSS1YIFNsb3QgSU5URCAqLworCQlpcnEgPSBJUlFfSU9QMzNYX1hJTlQwOworCX0gZWxzZSBpZiAoc2xvdCA9PSAyKSB7CisJCS8qIEdpZ0UgKi8KKwkJaXJxID0gSVJRX0lPUDMzWF9YSU5UMjsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgImlxODAzMzFfcGNpX21hcF9pcnEoKSBjYWxsZWQgZm9yIHVua25vd24gIgorCQkJImRldmljZSBQQ0k6JWQ6JWQ6JWRcbiIsIGRldi0+YnVzLT5udW1iZXIsCisJCQlQQ0lfU0xPVChkZXYtPmRldmZuKSwgUENJX0ZVTkMoZGV2LT5kZXZmbikpOworCQlpcnEgPSAtMTsKKwl9CisKKwlyZXR1cm4gaXJxOworfQorCitzdGF0aWMgc3RydWN0IGh3X3BjaSBpcTgwMzMxX3BjaSBfX2luaXRkYXRhID0geworCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAorCS5ucl9jb250cm9sbGVycyA9IDEsCisJLnNldHVwCQk9IGlvcDN4eF9wY2lfc2V0dXAsCisJLnByZWluaXQJPSBpb3AzeHhfcGNpX3ByZWluaXQsCisJLnNjYW4JCT0gaW9wM3h4X3BjaV9zY2FuX2J1cywKKwkubWFwX2lycQk9IGlxODAzMzFfcGNpX21hcF9pcnEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBpcTgwMzMxX3BjaV9pbml0KHZvaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfaXE4MDMzMSgpKQorCQlwY2lfY29tbW9uX2luaXQoJmlxODAzMzFfcGNpKTsKKworCXJldHVybiAwOworfQorCitzdWJzeXNfaW5pdGNhbGwoaXE4MDMzMV9wY2lfaW5pdCk7CisKKworLyoKKyAqIElRODAzMzEgbWFjaGluZSBpbml0aWFsaXNhdGlvbi4KKyAqLworc3RhdGljIHN0cnVjdCBwaHlzbWFwX2ZsYXNoX2RhdGEgaXE4MDMzMV9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpcTgwMzMxX2ZsYXNoX3Jlc291cmNlID0geworCS5zdGFydAkJPSAweGMwMDAwMDAwLAorCS5lbmQJCT0gMHhjMDdmZmZmZiwKKwkuZmxhZ3MJCT0gSU9SRVNPVVJDRV9NRU0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpcTgwMzMxX2ZsYXNoX2RldmljZSA9IHsKKwkubmFtZQkJPSAicGh5c21hcC1mbGFzaCIsCisJLmlkCQk9IDAsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJmlxODAzMzFfZmxhc2hfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmaXE4MDMzMV9mbGFzaF9yZXNvdXJjZSwKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpcTgwMzMxX2luaXRfbWFjaGluZSh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9wM3h4X2kyYzBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlvcDN4eF9pMmMxX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb3AzM3hfdWFydDBfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlvcDMzeF91YXJ0MV9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaXE4MDMzMV9mbGFzaF9kZXZpY2UpOworfQorCitNQUNISU5FX1NUQVJUKElRODAzMzEsICJJbnRlbCBJUTgwMzMxIikKKwkvKiBNYWludGFpbmVyOiBJbnRlbCBDb3JwLiAqLworCS5waHlzX2lvCT0gMHhmZWZmZjAwMCwKKwkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmZmZmYwMDApID4+IDE4KSAmIDB4ZmZmYywKKwkuYm9vdF9wYXJhbXMJPSAweDAwMDAwMTAwLAorCS5tYXBfaW8JCT0gaW9wM3h4X21hcF9pbywKKwkuaW5pdF9pcnEJPSBpb3AzM3hfaW5pdF9pcnEsCisJLnRpbWVyCQk9ICZpcTgwMzMxX3RpbWVyLAorCS5pbml0X21hY2hpbmUJPSBpcTgwMzMxX2luaXRfbWFjaGluZSwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC9pcTgwMzMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg4N2JmYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIGFyY2gvYXJtL21hY2gtaW9wMzN4L2lxODAzMzIuYworICoKKyAqIEJvYXJkIHN1cHBvcnQgY29kZSBmb3IgdGhlIEludGVsIElRODAzMzIgcGxhdGZvcm0uCisgKgorICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF84MjUwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKworLyoKKyAqIElRODAzMzIgdGltZXIgdGljayBjb25maWd1cmF0aW9uLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgaXE4MDMzMl90aW1lcl9pbml0KHZvaWQpCit7CisJLyogRC1TdGVwIHBhcnRzIGFuZCB0aGUgaW9wMzMzIHJ1biBhdCBhIGhpZ2hlciBpbnRlcm5hbCBidXMgZnJlcXVlbmN5ICovCisJaWYgKCpJT1AzWFhfQVRVUklEID49IDB4YSB8fCAqSU9QM1hYX0FUVURJRCA9PSAweDM3NCkKKwkJaW9wM3h4X2luaXRfdGltZSgzMzMwMDAwMDApOworCWVsc2UKKwkJaW9wM3h4X2luaXRfdGltZSgyNjYwMDAwMDApOworfQorCitzdGF0aWMgc3RydWN0IHN5c190aW1lciBpcTgwMzMyX3RpbWVyID0geworCS5pbml0CQk9IGlxODAzMzJfdGltZXJfaW5pdCwKKwkub2Zmc2V0CQk9IGlvcDN4eF9nZXR0aW1lb2Zmc2V0LAorfTsKKworCisvKgorICogSVE4MDMzMiBQQ0kuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IF9faW5pdAoraXE4MDMzMl9wY2lfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJaW50IGlycTsKKworCWlmIChzbG90ID09IDQgJiYgcGluID09IDEpIHsKKwkJLyogUENJLVggU2xvdCBJTlRBICovCisJCWlycSA9IElSUV9JT1AzM1hfWElOVDA7CisJfSBlbHNlIGlmIChzbG90ID09IDQgJiYgcGluID09IDIpIHsKKwkJLyogUENJLVggU2xvdCBJTlRCICovCisJCWlycSA9IElSUV9JT1AzM1hfWElOVDE7CisJfSBlbHNlIGlmIChzbG90ID09IDQgJiYgcGluID09IDMpIHsKKwkJLyogUENJLVggU2xvdCBJTlRDICovCisJCWlycSA9IElSUV9JT1AzM1hfWElOVDI7CisJfSBlbHNlIGlmIChzbG90ID09IDQgJiYgcGluID09IDQpIHsKKwkJLyogUENJLVggU2xvdCBJTlREICovCisJCWlycSA9IElSUV9JT1AzM1hfWElOVDM7CisJfSBlbHNlIGlmIChzbG90ID09IDYpIHsKKwkJLyogR2lnRSAqLworCQlpcnEgPSBJUlFfSU9QMzNYX1hJTlQyOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiaXE4MDMzMl9wY2lfbWFwX2lycSgpIGNhbGxlZCBmb3IgdW5rbm93biAiCisJCQkiZGV2aWNlIFBDSTolZDolZDolZFxuIiwgZGV2LT5idXMtPm51bWJlciwKKwkJCVBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhkZXYtPmRldmZuKSk7CisJCWlycSA9IC0xOworCX0KKworCXJldHVybiBpcnE7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfcGNpIGlxODAzMzJfcGNpIF9faW5pdGRhdGEgPSB7CisJLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCisJLm5yX2NvbnRyb2xsZXJzID0gMSwKKwkuc2V0dXAJCT0gaW9wM3h4X3BjaV9zZXR1cCwKKwkucHJlaW5pdAk9IGlvcDN4eF9wY2lfcHJlaW5pdCwKKwkuc2NhbgkJPSBpb3AzeHhfcGNpX3NjYW5fYnVzLAorCS5tYXBfaXJxCT0gaXE4MDMzMl9wY2lfbWFwX2lycSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGlxODAzMzJfcGNpX2luaXQodm9pZCkKK3sKKwlpZiAobWFjaGluZV9pc19pcTgwMzMyKCkpCisJCXBjaV9jb21tb25faW5pdCgmaXE4MDMzMl9wY2kpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbChpcTgwMzMyX3BjaV9pbml0KTsKKworCisvKgorICogSVE4MDMzMiBtYWNoaW5lIGluaXRpYWxpc2F0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBpcTgwMzMyX2ZsYXNoX2RhdGEgPSB7CisJLndpZHRoCQk9IDEsCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlxODAzMzJfZmxhc2hfcmVzb3VyY2UgPSB7CisJLnN0YXJ0CQk9IDB4YzAwMDAwMDAsCisJLmVuZAkJPSAweGMwN2ZmZmZmLAorCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlxODAzMzJfZmxhc2hfZGV2aWNlID0geworCS5uYW1lCQk9ICJwaHlzbWFwLWZsYXNoIiwKKwkuaWQJCT0gMCwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSAmaXE4MDMzMl9mbGFzaF9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAxLAorCS5yZXNvdXJjZQk9ICZpcTgwMzMyX2ZsYXNoX3Jlc291cmNlLAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IGlxODAzMzJfaW5pdF9tYWNoaW5lKHZvaWQpCit7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpb3AzeHhfaTJjMF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9wM3h4X2kyYzFfZGV2aWNlKTsKKwlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmlvcDMzeF91YXJ0MF9kZXZpY2UpOworCXBsYXRmb3JtX2RldmljZV9yZWdpc3RlcigmaW9wMzN4X3VhcnQxX2RldmljZSk7CisJcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZpcTgwMzMyX2ZsYXNoX2RldmljZSk7Cit9CisKK01BQ0hJTkVfU1RBUlQoSVE4MDMzMiwgIkludGVsIElRODAzMzIiKQorCS8qIE1haW50YWluZXI6IEludGVsIENvcnAuICovCisJLnBoeXNfaW8JPSAweGZlZmZmMDAwLAorCS5pb19wZ19vZmZzdAk9ICgoMHhmZmZmZjAwMCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IDB4MDAwMDAxMDAsCisJLm1hcF9pbwkJPSBpb3AzeHhfbWFwX2lvLAorCS5pbml0X2lycQk9IGlvcDMzeF9pbml0X2lycSwKKwkudGltZXIJCT0gJmlxODAzMzJfdGltZXIsCisJLmluaXRfbWFjaGluZQk9IGlxODAzMzJfaW5pdF9tYWNoaW5lLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMzMDRiMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtaW9wMzN4L2lycS5jCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogYXJjaC9hcm0vbWFjaC1pb3AzM3gvaXJxLmMKKyAqCisgKiBHZW5lcmljIElPUDMzMSBJUlEgaGFuZGxpbmcgZnVuY3Rpb25hbGl0eQorICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgdTMyIGlvcDMzeF9tYXNrMDsKK3N0YXRpYyB1MzIgaW9wMzN4X21hc2sxOworCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsMF93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMCwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCWlvcDN4eF9jcDZfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsMV93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMSwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCWlvcDN4eF9jcDZfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyMF93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMiwgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCWlvcDN4eF9jcDZfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyMV93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMywgYzAsIDAiIDogOiAiciIgKHZhbCkpOworCWlvcDN4eF9jcDZfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW50YmFzZV93cml0ZSh1MzIgdmFsKQoreworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMTIsIGMwLCAwIiA6IDogInIiICh2YWwpKTsKKwlpb3AzeHhfY3A2X2Rpc2FibGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGludHNpemVfd3JpdGUodTMyIHZhbCkKK3sKKwlpb3AzeHhfY3A2X2VuYWJsZSgpOworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzEzLCBjMCwgMCIgOiA6ICJyIiAodmFsKSk7CisJaW9wM3h4X2NwNl9kaXNhYmxlKCk7Cit9CisKK3N0YXRpYyB2b2lkCitpb3AzM3hfaXJxX21hc2sxICh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvcDMzeF9tYXNrMCAmPSB+KDEgPDwgaXJxKTsKKwlpbnRjdGwwX3dyaXRlKGlvcDMzeF9tYXNrMCk7Cit9CisKK3N0YXRpYyB2b2lkCitpb3AzM3hfaXJxX21hc2syICh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvcDMzeF9tYXNrMSAmPSB+KDEgPDwgKGlycSAtIDMyKSk7CisJaW50Y3RsMV93cml0ZShpb3AzM3hfbWFzazEpOworfQorCitzdGF0aWMgdm9pZAoraW9wMzN4X2lycV91bm1hc2sxKHVuc2lnbmVkIGludCBpcnEpCit7CisJaW9wMzN4X21hc2swIHw9IDEgPDwgaXJxOworCWludGN0bDBfd3JpdGUoaW9wMzN4X21hc2swKTsKK30KKworc3RhdGljIHZvaWQKK2lvcDMzeF9pcnFfdW5tYXNrMih1bnNpZ25lZCBpbnQgaXJxKQoreworCWlvcDMzeF9tYXNrMSB8PSAoMSA8PCAoaXJxIC0gMzIpKTsKKwlpbnRjdGwxX3dyaXRlKGlvcDMzeF9tYXNrMSk7Cit9CisKK3N0cnVjdCBpcnFfY2hpcCBpb3AzM3hfaXJxY2hpcDEgPSB7CisJLm5hbWUJPSAiSU9QMzN4LTEiLAorCS5hY2sJPSBpb3AzM3hfaXJxX21hc2sxLAorCS5tYXNrCT0gaW9wMzN4X2lycV9tYXNrMSwKKwkudW5tYXNrCT0gaW9wMzN4X2lycV91bm1hc2sxLAorfTsKKworc3RydWN0IGlycV9jaGlwIGlvcDMzeF9pcnFjaGlwMiA9IHsKKwkubmFtZQk9ICJJT1AzM3gtMiIsCisJLmFjawk9IGlvcDMzeF9pcnFfbWFzazIsCisJLm1hc2sJPSBpb3AzM3hfaXJxX21hc2syLAorCS51bm1hc2sJPSBpb3AzM3hfaXJxX3VubWFzazIsCit9OworCit2b2lkIF9faW5pdCBpb3AzM3hfaW5pdF9pcnEodm9pZCkKK3sKKwlpbnQgaTsKKworCWludGN0bDBfd3JpdGUoMCk7CisJaW50Y3RsMV93cml0ZSgwKTsKKwlpbnRzdHIwX3dyaXRlKDApOworCWludHN0cjFfd3JpdGUoMCk7CisJaW50YmFzZV93cml0ZSgwKTsKKwlpbnRzaXplX3dyaXRlKDEpOworCWlmIChtYWNoaW5lX2lzX2lxODAzMzEoKSkKKwkJKklPUDNYWF9QQ0lJUlNSID0gMHgwZjsKKworCWZvciAoaSA9IDA7IGkgPCBOUl9JUlFTOyBpKyspIHsKKwkJc2V0X2lycV9jaGlwKGksIChpIDwgMzIpID8gJmlvcDMzeF9pcnFjaGlwMSA6ICZpb3AzM3hfaXJxY2hpcDIpOworCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKKwkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7CisJfQorfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzM3gvdWFydC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzM3gvdWFydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMjk3Y2QKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLWlvcDMzeC91YXJ0LmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBhcmNoL2FybS9tYWNoLWlvcDMzeC91YXJ0LmMKKyAqCisgKiBBdXRob3I6IERhdmUgSmlhbmcgKGRhdmUuamlhbmdAaW50ZWwuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA0IEludGVsIENvcnBvcmF0aW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb3AzeHguaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2FyY2guaD4KKworI2RlZmluZSBJT1AzM1hfVUFSVF9YVEFMIDMzMzM0MDAwCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zZXJpYWw4MjUwX3BvcnQgaW9wMzN4X3VhcnQwX2RhdGFbXSA9IHsKKwl7CisJCS5tZW1iYXNlCT0gKGNoYXIgKilJT1AzM1hfVUFSVDBfVklSVCwKKwkJLm1hcGJhc2UJPSBJT1AzM1hfVUFSVDBfUEhZUywKKwkJLmlycQkJPSBJUlFfSU9QMzNYX1VBUlQwLAorCQkudWFydGNsawk9IElPUDMzWF9VQVJUX1hUQUwsCisJCS5yZWdzaGlmdAk9IDIsCisJCS5pb3R5cGUJCT0gVVBJT19NRU0sCisJCS5mbGFncwkJPSBVUEZfU0tJUF9URVNULAorCX0sCisJeyB9LAorfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzM3hfdWFydDBfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSBJT1AzM1hfVUFSVDBfUEhZUywKKwkJLmVuZAk9IElPUDMzWF9VQVJUMF9QSFlTICsgMHgzZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IElSUV9JT1AzM1hfVUFSVDAsCisJCS5lbmQJPSBJUlFfSU9QMzNYX1VBUlQwLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzM3hfdWFydDBfZGV2aWNlID0geworCS5uYW1lCQk9ICJzZXJpYWw4MjUwIiwKKwkuaWQJCT0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQkJPSBpb3AzM3hfdWFydDBfZGF0YSwKKwl9LAorCS5udW1fcmVzb3VyY2VzCT0gMiwKKwkucmVzb3VyY2UJPSBpb3AzM3hfdWFydDBfcmVzb3VyY2VzLAorfTsKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcDMzeF91YXJ0MV9yZXNvdXJjZXNbXSA9IHsKKwlbMF0gPSB7CisJCS5zdGFydAk9IElPUDMzWF9VQVJUMV9QSFlTLAorCQkuZW5kCT0gSU9QMzNYX1VBUlQxX1BIWVMgKyAweDNmLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTSwKKwl9LAorCVsxXSA9IHsKKwkJLnN0YXJ0CT0gSVJRX0lPUDMzWF9VQVJUMSwKKwkJLmVuZAk9IElSUV9JT1AzM1hfVUFSVDEsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGlvcDMzeF91YXJ0MV9kYXRhW10gPSB7CisJeworCQkubWVtYmFzZQk9IChjaGFyICopSU9QMzNYX1VBUlQxX1ZJUlQsCisJCS5tYXBiYXNlCT0gSU9QMzNYX1VBUlQxX1BIWVMsCisJCS5pcnEJCT0gSVJRX0lPUDMzWF9VQVJUMSwKKwkJLnVhcnRjbGsJPSBJT1AzM1hfVUFSVF9YVEFMLAorCQkucmVnc2hpZnQJPSAyLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCwKKwl9LAorCXsgfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wMzN4X3VhcnQxX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IFBMQVQ4MjUwX0RFVl9QTEFURk9STTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCQk9IGlvcDMzeF91YXJ0MV9kYXRhLAorCX0sCisJLm51bV9yZXNvdXJjZXMJPSAyLAorCS5yZXNvdXJjZQk9IGlvcDMzeF91YXJ0MV9yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L0tjb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0MjJmMjMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvS2NvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDY2ICswLDAgQEAKLWlmIEFSQ0hfSU9QM1hYCi0KLW1lbnUgIklPUDN4eCBJbXBsZW1lbnRhdGlvbiBPcHRpb25zIgotCi1jb21tZW50ICJJT1AzeHggUGxhdGZvcm0gVHlwZXMiCi0KLWNvbmZpZyBBUkNIX0lRODAzMjEKLQlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgSVE4MDMyMSIKLQlzZWxlY3QgQVJDSF9JT1AzMjEKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgSVE4MDMyMQotCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMjEgY2hpcHNldC4KLQotY29uZmlnIEFSQ0hfSVEzMTI0NAotCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBJUTMxMjQ0IgotCXNlbGVjdCBBUkNIX0lPUDMyMQotCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gcnVuIHlvdXIga2VybmVsIG9uIHRoZSBJbnRlbCBJUTMxMjQ0Ci0JICBldmFsdWF0aW9uIGtpdCBmb3IgdGhlIElPUDMyMSBjaGlwc2V0LgotCi1jb25maWcgQVJDSF9JUTgwMzMxCi0JYm9vbCAiRW5hYmxlIHN1cHBvcnQgZm9yIElRODAzMzEiCi0Jc2VsZWN0IEFSQ0hfSU9QMzMxCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBydW4geW91ciBrZXJuZWwgb24gdGhlIEludGVsIElRODAzMzEKLQkgIGV2YWx1YXRpb24ga2l0IGZvciB0aGUgSU9QMzMxIGNoaXBzZXQuCi0KLWNvbmZpZyBNQUNIX0lRODAzMzIKLQlib29sICJFbmFibGUgc3VwcG9ydCBmb3IgSVE4MDMzMiIKLQlzZWxlY3QgQVJDSF9JT1AzMzEKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgSVE4MDMzMgotCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJT1AzMzIgY2hpcHNldC4KLQotY29uZmlnIEFSQ0hfRVA4MDIxOQotCWJvb2wgIkVuYWJsZSBzdXBwb3J0IGZvciBFUDgwMjE5IgotCXNlbGVjdCBBUkNIX0lPUDMyMQotCXNlbGVjdCBBUkNIX0lRMzEyNDQKLQloZWxwCi0JICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHJ1biB5b3VyIGtlcm5lbCBvbiB0aGUgSW50ZWwgRVA4MDIxOQotCSAgZXZhbHVhdGlvbiBraXQgZm9yIHRoZSBJbnRlbCA4MDIxOSBjaGlwc2V0IChhIElPUDMyMSB2YXJpYW50KS4KLQotIyBXaGljaCBJT1AgdmFyaWFudCBhcmUgd2UgcnVubmluZz8KLWNvbmZpZyBBUkNIX0lPUDMyMQotCWJvb2wKLQloZWxwCi0JICBUaGUgSVE4MDMyMSB1c2VzIHRoZSBJT1AzMjEgdmFyaWFudC4KLQkgIFRoZSBJUTMxMjQ0IGFuZCBFUDgwMjE5IHVzZXMgdGhlIElPUDMyMSB2YXJpYW50LgotCi1jb25maWcgQVJDSF9JT1AzMzEKLQlib29sCi0JZGVmYXVsdCBBUkNIX0lRODAzMzEKLQloZWxwCi0JICBUaGUgSVE4MDMzMSwgSVE4MDMzMiwgYW5kIElRODAzMzMgdXNlcyB0aGUgSU9QMzMxIHZhcmlhbnQuCi0KLWNvbW1lbnQgIklPUDN4eCBDaGlwc2V0IEZlYXR1cmVzIgotCi1jb25maWcgSU9QMzMxX1NURVBECi0JYm9vbCAiQ2hpcCBzdGVwcGluZyBEIG9mIHRoZSBJT1A4MDMzMSBwcm9jZXNzb3Igb3IgSU9QODAzMzMiCi0JZGVwZW5kcyBvbiAoQVJDSF9JT1AzMzEpCi0JaGVscAotCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBTdGVwRCBvZiB0aGUgSU9QODAzMzEgb3IgSU9QODAzMwotCSAgYmFzZWQgcGxhdGZvcm1zLgotCi1lbmRtZW51Ci1lbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjE3ZWIxZi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDIzICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCi0jCi0KLSMgT2JqZWN0IGZpbGUgbGlzdHMuCi0KLW9iai15CQkJOj0gY29tbW9uLm8KLQotb2JqLW0JCQk6PQotb2JqLW4JCQk6PQotb2JqLQkJCTo9Ci0KLW9iai0kKENPTkZJR19BUkNIX0lPUDMyMSkgICs9IGlvcDMyMS1zZXR1cC5vIGlvcDMyMS1pcnEubyBpb3AzMjEtcGNpLm8gaW9wMzIxLXRpbWUubwotCi1vYmotJChDT05GSUdfQVJDSF9JT1AzMzEpICArPSBpb3AzMzEtc2V0dXAubyBpb3AzMzEtaXJxLm8gaW9wMzMxLXBjaS5vIGlvcDMzMS10aW1lLm8KLQotb2JqLSQoQ09ORklHX0FSQ0hfSVE4MDMyMSkgKz0gaXE4MDMyMS1tbS5vIGlxODAzMjEtcGNpLm8KLQotb2JqLSQoQ09ORklHX0FSQ0hfSVEzMTI0NCkgKz0gaXEzMTI0NC1tbS5vIGlxMzEyNDQtcGNpLm8KLQotb2JqLSQoQ09ORklHX0FSQ0hfSVE4MDMzMSkgKz0gaXE4MDMzMS1tbS5vIGlxODAzMzEtcGNpLm8KLQotb2JqLSQoQ09ORklHX01BQ0hfSVE4MDMzMikgKz0gaXE4MDMzMi1tbS5vIGlxODAzMzItcGNpLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L01ha2VmaWxlLmJvb3QgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9NYWtlZmlsZS5ib290CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2Mzg3YWEyLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L01ha2VmaWxlLmJvb3QKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSAgIHpyZWxhZGRyLXkJOj0gMHhhMDAwODAwMAotcGFyYW1zX3BoeXMteQk6PSAweGEwMDAwMTAwCi1pbml0cmRfcGh5cy15CTo9IDB4YTA4MDAwMDAKLWlmZXEgKCQoQ09ORklHX0FSQ0hfSU9QMzMxKSx5KQotICAgenJlbGFkZHIteQk6PSAweDAwMDA4MDAwCi1wYXJhbXNfcGh5cy15CTo9IDB4MDAwMDAxMDAKLWluaXRyZF9waHlzLXkJOj0gMHgwMDgwMDAwMAotZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvY29tbW9uLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDdmNTBlNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYworKysgL2Rldi9udWxsCkBAIC0xLDcyICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9jb21tb24uYwotICoKLSAqIENvbW1vbiByb3V0aW5lcyBzaGFyZWQgYWNyb3NzIGFsbCBJT1AzeHggaW1wbGVtZW50YXRpb25zCi0gKgotICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQG12aXN0YS5jb20+Ci0gKgotICogQ29weXJpZ2h0IDIwMDMgKGMpIE1vbnRhVmlzdGEsIFNvZnR3YXJlLCBJbmMuCi0gKgotICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyICB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55Ci0gKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLS8qCi0gKiBTaGFyZWQgdmFyaWFibGVzCi0gKi8KLXVuc2lnbmVkIGxvbmcgaW9wM3h4X3BjaWJpb3NfbWluX2lvID0gMDsKLXVuc2lnbmVkIGxvbmcgaW9wM3h4X3BjaWJpb3NfbWluX21lbSA9IDA7Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9FUDgwMjE5Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0vKgotICogRGVmYXVsdCBwb3dlci1vZmYgZm9yIEVQODAyMTkKLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgZXA4MDIxOV9zZW5kX3RvX3BpYyhfX3U4IGMpIHsKLX0KLQotdm9pZCBlcDgwMjE5X3Bvd2VyX29mZih2b2lkKQotewotCS8qCi0gICAgICogVGhpcyBmdW5jdGlvbiB3aWxsIHNlbmQgYSBTSFVURE9XTl9DT01QTEVURSBtZXNzYWdlIHRvIHRoZSBQSUMgY29udHJvbGxlcgotICAgICAqIG92ZXIgSTJDLiAgV2UgYXJlIG5vdCB1c2luZyB0aGUgaTJjIHN1YnN5c3RlbSBzaW5jZSB3ZSBhcmUgZ29pbmcgdG8gcG93ZXIKLSAgICAgKiBvZmYgYW5kIGl0IG1heSBiZSByZW1vdmVkCi0gICAgICovCi0KLQkvKiBTZW5kIHRoZSBBZGRyZXNzIGJ5dGUgdy8gdGhlIHN0YXJ0IGNvbmRpdGlvbiAqLwotCSpJT1AzMjFfSURCUjEgPSAweDYwOwotCSpJT1AzMjFfSUNSMSA9IDB4RTk7Ci0gICAgbWRlbGF5KDEpOwotCi0JLyogU2VuZCB0aGUgU1RBUlRfTVNHIGJ5dGUgdy8gbm8gc3RhcnQgb3Igc3RvcCBjb25kaXRpb24gKi8KLQkqSU9QMzIxX0lEQlIxID0gMHgwRjsKLQkqSU9QMzIxX0lDUjEgPSAweEU4OwotICAgIG1kZWxheSgxKTsKLQotCS8qIFNlbmQgdGhlIFNIVVRET1dOX0NPTVBMRVRFIE1lc3NhZ2UgSUQgYnl0ZSB3LyBubyBzdGFydCBvciBzdG9wIGNvbmRpdGlvbiAqLwotCSpJT1AzMjFfSURCUjEgPSAweDAzOwotCSpJT1AzMjFfSUNSMSA9IDB4RTg7Ci0gICAgbWRlbGF5KDEpOwotCi0JLyogU2VuZCBhbiBpZ25vcmVkIGJ5dGUgdy8gc3RvcCBjb25kaXRpb24gKi8KLQkqSU9QMzIxX0lEQlIxID0gMHgwMDsKLQkqSU9QMzIxX0lDUjEgPSAweEVBOwotCi0Jd2hpbGUgKDEpIDsKLX0KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotCi1zdGF0aWMgaW50IF9faW5pdCBlcDgwMjE5X2luaXQodm9pZCkKLXsKLQlwbV9wb3dlcl9vZmYgPSBlcDgwMjE5X3Bvd2VyX29mZjsKLQlyZXR1cm4gMDsKLX0KLWFyY2hfaW5pdGNhbGwoZXA4MDIxOV9pbml0KTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLWlycS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLWlycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4OGFjMzMzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtaXJxLmMKLSAqCi0gKiBHZW5lcmljIElPUDMyMSBJUlEgaGFuZGxpbmcgZnVuY3Rpb25hbGl0eQotICoKLSAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIEFkZGVkIElPUDNYWCBjaGlwc2V0IGFuZCBJUTgwMzIxIGJvYXJkIG1hc2tpbmcgY29kZS4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotc3RhdGljIHUzMiBpb3AzMjFfbWFzayAvKiA9IDAgKi87Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBpbnRjdGxfd3JpdGUodTMyIHZhbCkKLXsKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMwLGMwLDAiOjoiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlKHUzMiB2YWwpCi17Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsMCwlMCxjNCxjMCwwIjo6InIiICh2YWwpKTsKLX0KLQotc3RhdGljIHZvaWQKLWlvcDMyMV9pcnFfbWFzayAodW5zaWduZWQgaW50IGlycSkKLXsKLQotCWlvcDMyMV9tYXNrICY9IH4oMSA8PCAoaXJxIC0gSU9QMzIxX0lSUV9PRlMpKTsKLQotCWludGN0bF93cml0ZShpb3AzMjFfbWFzayk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pb3AzMjFfaXJxX3VubWFzayAodW5zaWduZWQgaW50IGlycSkKLXsKLQlpb3AzMjFfbWFzayB8PSAoMSA8PCAoaXJxIC0gSU9QMzIxX0lSUV9PRlMpKTsKLQotCWludGN0bF93cml0ZShpb3AzMjFfbWFzayk7Ci19Ci0KLXN0cnVjdCBpcnFfY2hpcCBleHRfY2hpcCA9IHsKLQkubmFtZQk9ICJJT1AiLAotCS5hY2sgICAgPSBpb3AzMjFfaXJxX21hc2ssCi0JLm1hc2sgICA9IGlvcDMyMV9pcnFfbWFzaywKLQkudW5tYXNrID0gaW9wMzIxX2lycV91bm1hc2ssCi19OwotCi12b2lkIF9faW5pdCBpb3AzMjFfaW5pdF9pcnEodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgdG1wOwotCi0JLyogRW5hYmxlIGFjY2VzcyB0byBjb3Byb2Nlc3NvciA2IGZvciBkZWFsaW5nIHdpdGggSVJRcy4KLQkgKiBGcm9tIFJNSzoKLQkgKiBCYXNpY2FsbHksIHRoZSBJbnRlbCBkb2N1bWVudGF0aW9uIGhlcmUgaXMgcG9vci4gIEl0IGFwcGVhcnMgdGhhdAotCSAqIHlvdSBuZWVkIHRvIHNldCB0aGUgYml0IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjb3Byb2Nlc3NvciBmcm9tCi0JICogU1ZDIG1vZGUuICBXaGV0aGVyIHRoYXQgYWxsb3dzIGFjY2VzcyBmcm9tIHVzZXIgc3BhY2Ugb3Igbm90IGlzCi0JICogdW5jbGVhci4KLQkgKi8KLQlhc20gdm9sYXRpbGUgKAotCQkibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkib3JyICUwLCAlMCwgJTFcblx0IgotCQkibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkvKiBUaGUgYWN0aW9uIGlzIGRlbGF5ZWQsIHNvIHdlIGhhdmUgdG8gZG8gdGhpczogKi8KLQkJIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKLQkJIm1vdiAlMCwgJTBcblx0IgotCQkic3ViIHBjLCBwYywgIzQiCi0JCTogIj1yIiAodG1wKSA6ICJpIiAoMSA8PCA2KSApOwotCi0JaW50Y3RsX3dyaXRlKDApOwkJLy8gZGlzYWJsZSBhbGwgaW50ZXJydXB0cwotCWludHN0cl93cml0ZSgwKTsJCS8vIHRyZWF0IGFsbCBhcyBJUlEKLQlpZihtYWNoaW5lX2lzX2lxODAzMjEoKSB8fAotCSAgIG1hY2hpbmVfaXNfaXEzMTI0NCgpKSAJLy8gYWxsIGludGVycnVwdHMgYXJlIGlucHV0cyB0byBjaGlwCi0JCSpJT1AzMjFfUENJSVJTUiA9IDB4MGY7Ci0KLQlmb3IoaSA9IElPUDMyMV9JUlFfT0ZTOyBpIDwgTlJfSU9QMzIxX0lSUVM7IGkrKykKLQl7Ci0JCXNldF9pcnFfY2hpcChpLCAmZXh0X2NoaXApOwotCQlzZXRfaXJxX2hhbmRsZXIoaSwgZG9fbGV2ZWxfSVJRKTsKLQkJc2V0X2lycV9mbGFncyhpLCBJUlFGX1ZBTElEIHwgSVJRRl9QUk9CRSk7Ci0KLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGJhNmEwZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjAgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1wY2kuYwotICoKLSAqIFBDSSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgSU9QMzIxIGNoaXBzZXQKLSAqCi0gKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvaW9wMzIxLmg+Ci0KLS8vICNkZWZpbmUgREVCVUcKLQotI2lmZGVmIERFQlVHCi0jZGVmaW5lICBEQkcoeC4uLikgcHJpbnRrKHgpCi0jZWxzZQotI2RlZmluZSAgREJHKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKgotICogVGhpcyByb3V0aW5lIGJ1aWxkcyBlaXRoZXIgYSB0eXBlMCBvciB0eXBlMSBjb25maWd1cmF0aW9uIGNvbW1hbmQuICBJZiB0aGUKLSAqIGJ1cyBpcyBvbiB0aGUgODAzMjEgdGhlbiBhIHR5cGUwIG1hZGUsIGVsc2UgYSB0eXBlMSBpcyBjcmVhdGVkLgotICovCi1zdGF0aWMgdTMyIGlvcDMyMV9jZmdfYWRkcmVzcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKLXsKLQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7Ci0JdTMyIGFkZHI7Ci0KLQlpZiAoc3lzLT5idXNuciA9PSBidXMtPm51bWJlcikKLQkJYWRkciA9IDEgPDwgKFBDSV9TTE9UKGRldmZuKSArIDE2KSB8IChQQ0lfU0xPVChkZXZmbikgPDwgMTEpOwotCWVsc2UKLQkJYWRkciA9IGJ1cy0+bnVtYmVyIDw8IDE2IHwgUENJX1NMT1QoZGV2Zm4pIDw8IDExIHwgMTsKLQotCWFkZHIgfD0JUENJX0ZVTkMoZGV2Zm4pIDw8IDggfCAod2hlcmUgJiB+Myk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGN5Y2xlLiAgSWYgYW4gZXJyb3IKLSAqIHdhcyBkZXRlY3RlZCBpdCByZXR1cm5zIGEgMSwgZWxzZSBpdCByZXR1cm5zIGEgMC4gIFRoZSBlcnJvcnMgYmVpbmcgY2hlY2tlZAotICogYXJlIHBhcml0eSwgbWFzdGVyIGFib3J0LCB0YXJnZXQgYWJvcnQgKG1hc3RlciBhbmQgdGFyZ2V0KS4gIFRoZXNlIHR5cGVzIG9mCi0gKiBlcnJvcnMgb2NjdXJlIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCi0gKiB0aGUgZGlzY292ZXJ5IHN0YWdlLgotICovCi1zdGF0aWMgaW50IGlvcDMyMV9wY2lfc3RhdHVzKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogQ2hlY2sgdGhlIHN0YXR1cyByZWdpc3RlcnMuCi0JICovCi0Jc3RhdHVzID0gKklPUDMyMV9BVFVTUjsKLQlpZiAoc3RhdHVzICYgMHhmOTAwKQotCXsKLQkJREJHKCJcdFx0XHRQQ0k6IFAwIC0gc3RhdHVzID0gMHglMDh4XG4iLCBzdGF0dXMpOwotCQkqSU9QMzIxX0FUVVNSID0gc3RhdHVzICYgMHhmOTAwOwotCQlyZXQgPSAxOwotCX0KLQlzdGF0dXMgPSAqSU9QMzIxX0FUVUlTUjsKLQlpZiAoc3RhdHVzICYgMHg2NzlmKQotCXsKLQkJREJHKCJcdFx0XHRQQ0k6IFAxIC0gc3RhdHVzID0gMHglMDh4XG4iLCBzdGF0dXMpOwotCQkqSU9QMzIxX0FUVUlTUiA9IHN0YXR1cyAmIDB4Njc5ZjsKLQkJcmV0ID0gMTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFNpbXBseSB3cml0ZSB0aGUgYWRkcmVzcyByZWdpc3RlciBhbmQgcmVhZCB0aGUgY29uZmlndXJhdGlvbgotICogZGF0YS4gIE5vdGUgdGhhdCB0aGUgNCBub3AncyBlbnN1cmUgdGhhdCB3ZSBhcmUgYWJsZSB0byBoYW5kbGUKLSAqIGEgZGVsYXllZCBhYm9ydCAoaW4gdGhlb3J5LikKLSAqLwotc3RhdGljIGlubGluZSB1MzIgaW9wMzIxX3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUzMiB2YWw7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0cgklMSwgWyUyXVxuXHQiCi0JCSJsZHIJJTAsIFslM11cblx0IgotCQkibm9wXG5cdCIKLQkJIm5vcFxuXHQiCi0JCSJub3Bcblx0IgotCQkibm9wXG5cdCIKLQkJOiAiPXIiICh2YWwpCi0JCTogInIiIChhZGRyKSwgInIiIChJT1AzMjFfT0NDQVIpLCAiciIgKElPUDMyMV9PQ0NEUikpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIFRoZSByZWFkIHJvdXRpbmVzIG11c3QgY2hlY2sgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uCi0gKiBjeWNsZS4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgdGhlIHJvdXRpbmUgcmV0dXJucyBhbGwgaGV4IGYncy4KLSAqLwotc3RhdGljIGludAotaW9wMzIxX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAotCQlpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBpb3AzMjFfY2ZnX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOwotCXUzMiB2YWwgPSBpb3AzMjFfcmVhZChhZGRyKSA+PiAoKHdoZXJlICYgMykgKiA4KTsKLQotCWlmKCBpb3AzMjFfcGNpX3N0YXR1cygpICkKLQkJdmFsID0gMHhmZmZmZmZmZjsKLQotCSp2YWx1ZSA9IHZhbDsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQKLWlvcDMyMV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCi0JCWludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gaW9wMzIxX2NmZ19hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQl1MzIgdmFsOwotCi0JaWYgKHNpemUgIT0gNCkgewotCQl2YWwgPSBpb3AzMjFfcmVhZChhZGRyKTsKLQkJaWYgKCFpb3AzMjFfcGNpX3N0YXR1cygpID09IDApCi0JCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JCXdoZXJlID0gKHdoZXJlICYgMykgKiA4OwotCi0JCWlmIChzaXplID09IDEpCi0JCQl2YWwgJj0gfigweGZmIDw8IHdoZXJlKTsKLQkJZWxzZQotCQkJdmFsICY9IH4oMHhmZmZmIDw8IHdoZXJlKTsKLQotCQkqSU9QMzIxX09DQ0RSID0gdmFsIHwgdmFsdWUgPDwgd2hlcmU7Ci0JfSBlbHNlIHsKLQkJYXNtIHZvbGF0aWxlKAotCQkJInN0cgklMSwgWyUyXVxuXHQiCi0JCQkic3RyCSUwLCBbJTNdXG5cdCIKLQkJCSJub3Bcblx0IgotCQkJIm5vcFxuXHQiCi0JCQkibm9wXG5cdCIKLQkJCSJub3Bcblx0IgotCQkJOgotCQkJOiAiciIgKHZhbHVlKSwgInIiIChhZGRyKSwKLQkJCSAgInIiIChJT1AzMjFfT0NDQVIpLCAiciIgKElPUDMyMV9PQ0NEUikpOwotCX0KLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBpb3AzMjFfb3BzID0gewotCS5yZWFkCT0gaW9wMzIxX3JlYWRfY29uZmlnLAotCS53cml0ZQk9IGlvcDMyMV93cml0ZV9jb25maWcsCi19OwotCi0vKgotICogV2hlbiBhIFBDSSBkZXZpY2UgZG9lcyBub3QgZXhpc3QgZHVyaW5nIGNvbmZpZyBjeWNsZXMsIHRoZSA4MDIwMCBnZXRzIGEKLSAqIGJ1cyBlcnJvciBpbnN0ZWFkIG9mIHJldHVybmluZyAweGZmZmZmZmZmLiBUaGlzIGhhbmRsZXIgc2ltcGx5IHJldHVybnMuCi0gKi8KLWludAotaW9wMzIxX3BjaV9hYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCURCRygiUENJIGFib3J0OiBhZGRyZXNzID0gMHglMDhseCBmc3IgPSAweCUwM3ggUEMgPSAweCUwOGx4IExSID0gMHglMDhseFxuIiwKLQkJYWRkciwgZnNyLCByZWdzLT5BUk1fcGMsIHJlZ3MtPkFSTV9scik7Ci0KLQkvKgotCSAqIElmIGl0IHdhcyBhbiBpbXByZWNpc2UgYWJvcnQsIHRoZW4gd2UgbmVlZCB0byBjb3JyZWN0IHRoZQotCSAqIHJldHVybiBhZGRyZXNzIHRvIGJlIF9hZnRlcl8gdGhlIGluc3RydWN0aW9uLgotCSAqLwotCWlmIChmc3IgJiAoMSA8PCAxMCkpCi0JCXJlZ3MtPkFSTV9wYyArPSA0OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTY2FuIGFuIElPUDMyMSBQQ0kgYnVzLiAgc3lzLT5idXMgZGVmaW5lcyB3aGljaCBidXMgd2Ugc2Nhbi4KLSAqLwotc3RydWN0IHBjaV9idXMgKmlvcDMyMV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlyZXR1cm4gcGNpX3NjYW5fYnVzKHN5cy0+YnVzbnIsICZpb3AzMjFfb3BzLCBzeXMpOwotfQotCi12b2lkIGlvcDMyMV9pbml0KHZvaWQpCi17Ci0JREJHKCJQQ0k6ICBJbnRlbCA4MDMyMSBQQ0kgaW5pdCBjb2RlLlxuIik7Ci0JREJHKCJBVFU6IElPUDMyMV9BVFVDTUQ9MHglMDR4XG4iLCAqSU9QMzIxX0FUVUNNRCk7Ci0JREJHKCJBVFU6IElPUDMyMV9PTVdUVlIwPTB4JTA0eCwgSU9QMzIxX09JT1dUVlI9MHglMDR4XG4iLAotCQkJKklPUDMyMV9PTVdUVlIwLAotCQkJKklPUDMyMV9PSU9XVFZSKTsKLQlEQkcoIkFUVTogSU9QMzIxX0FUVUNSPTB4JTA4eFxuIiwgKklPUDMyMV9BVFVDUik7Ci0JREJHKCJBVFU6IElPUDMyMV9JQUJBUjA9MHglMDh4IElPUDMyMV9JQUxSMD0weCUwOHggSU9QMzIxX0lBVFZSMD0lMDh4XG4iLAotCQkJKklPUDMyMV9JQUJBUjAsICpJT1AzMjFfSUFMUjAsICpJT1AzMjFfSUFUVlIwKTsKLQlEQkcoIkFUVTogSU9QMzIxX09NV1RWUjA9MHglMDh4XG4iLCAqSU9QMzIxX09NV1RWUjApOwotCURCRygiQVRVOiBJT1AzMjFfSUFCQVIxPTB4JTA4eCBJT1AzMjFfSUFMUjE9MHglMDh4XG4iLAotCQkJKklPUDMyMV9JQUJBUjEsICpJT1AzMjFfSUFMUjEpOwotCURCRygiQVRVOiBJT1AzMjFfRVJCQVI9MHglMDh4IElPUDMyMV9FUkxSPTB4JTA4eCBJT1AzMjFfRVJUVlI9JTA4eFxuIiwKLQkJCSpJT1AzMjFfRVJCQVIsICpJT1AzMjFfRVJMUiwgKklPUDMyMV9FUlRWUik7Ci0JREJHKCJBVFU6IElPUDMyMV9JQUJBUjI9MHglMDh4IElPUDMyMV9JQUxSMj0weCUwOHggSU9QMzIxX0lBVFZSMj0lMDh4XG4iLAotCQkJKklPUDMyMV9JQUJBUjIsICpJT1AzMjFfSUFMUjIsICpJT1AzMjFfSUFUVlIyKTsKLQlEQkcoIkFUVTogSU9QMzIxX0lBQkFSMz0weCUwOHggSU9QMzIxX0lBTFIzPTB4JTA4eCBJT1AzMjFfSUFUVlIzPSUwOHhcbiIsCi0JCQkqSU9QMzIxX0lBQkFSMywgKklPUDMyMV9JQUxSMywgKklPUDMyMV9JQVRWUjMpOwotCi0JaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDMyMV9wY2lfYWJvcnQsIFNJR0JVUywgImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtc2V0dXAuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNmQwOTY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS1zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTczICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMjEtc2V0dXAuYwotICoKLSAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgotICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNkZWZpbmUgSU9QMzIxX1VBUlRfWFRBTCAxODQzMjAwCi0KLS8qCi0gKiBTdGFuZGFyZCBJTyBtYXBwaW5nIGZvciBhbGwgSU9QMzIxIGJhc2VkIHN5c3RlbXMKLSAqLwotc3RhdGljIHN0cnVjdCBtYXBfZGVzYyBpb3AzMjFfc3RkX2Rlc2NbXSBfX2luaXRkYXRhID0gewotCSB7CS8qIG1lbSBtYXBwZWQgcmVnaXN0ZXJzICovCi0JCS52aXJ0dWFsCT0gSU9QMzIxX1ZJUlRfTUVNX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT1AzMjFfUEhZU19NRU1fQkFTRSksCi0JCS5sZW5ndGgJCT0gMHgwMDAwMjAwMCwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JIH0sIHsJLyogUENJIElPIHNwYWNlICovCi0JCS52aXJ0dWFsCT0gSU9QMzIxX1BDSV9MT1dFUl9JT19WQSwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElPUDMyMV9QQ0lfTE9XRVJfSU9fUEEpLAotCQkubGVuZ3RoCQk9IElPUDMyMV9QQ0lfSU9fV0lORE9XX1NJWkUsCi0JCS50eXBlCQk9IE1UX0RFVklDRQotCSB9Ci19OwotCi0jaWZkZWYgQ09ORklHX0FSQ0hfSVE4MDMyMQotI2RlZmluZSBVQVJUQkFTRSBJUTgwMzIxX1VBUlQKLSNkZWZpbmUgSVJRX1VBUlQgSVJRX0lRODAzMjFfVUFSVAotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9JUTMxMjQ0Ci0jZGVmaW5lIFVBUlRCQVNFIElRMzEyNDRfVUFSVAotI2RlZmluZSBJUlFfVUFSVCBJUlFfSVEzMTI0NF9VQVJUCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCB1YXJ0X3BvcnQgaW9wMzIxX3NlcmlhbF9wb3J0c1tdID0gewotCXsKLQkJLm1lbWJhc2UJPSAoY2hhciopKFVBUlRCQVNFKSwKLQkJLm1hcGJhc2UJPSAoVUFSVEJBU0UpLAotCQkuaXJxCQk9IElSUV9VQVJULAotCQkuZmxhZ3MJCT0gVVBGX1NLSVBfVEVTVCwKLQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJLnJlZ3NoaWZ0CT0gMCwKLQkJLnVhcnRjbGsJPSBJT1AzMjFfVUFSVF9YVEFMLAotCQkubGluZQkJPSAwLAotCQkudHlwZQkJPSBQT1JUXzE2NTUwQSwKLQkJLmZpZm9zaXplCT0gMTYKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcDMyeF9pMmNfMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IDB4ZmZmZmY2ODAsCi0JCS5lbmQgPSAweGZmZmZmNjk4LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX0lPUDMyMV9JMkNfMCwKLQkJLmVuZCA9IElSUV9JT1AzMjFfSTJDXzAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzMnhfaTJjXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSAweGZmZmZmNmEwLAotCQkuZW5kID0gMHhmZmZmZjZiOCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9JT1AzMjFfSTJDXzEsCi0JCS5lbmQgPSBJUlFfSU9QMzIxX0kyQ18xLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDMyeF9pMmNfMF9jb250cm9sbGVyID0gewotCS5uYW1lID0gIklPUDN4eC1JMkMiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSA9IGlvcDMyeF9pMmNfMF9yZXNvdXJjZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDMyeF9pMmNfMV9jb250cm9sbGVyID0gewotCS5uYW1lID0gIklPUDN4eC1JMkMiLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSA9IGlvcDMyeF9pMmNfMV9yZXNvdXJjZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppb3AzMnhfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmlvcDMyeF9pMmNfMF9jb250cm9sbGVyLAotCSZpb3AzMnhfaTJjXzFfY29udHJvbGxlcgotfTsKLQotdm9pZCBfX2luaXQgaW9wMzJ4X2luaXQodm9pZCkKLXsKLQlpZihpb3BfaXNfMzIxKCkpCi0JewotCQlwbGF0Zm9ybV9hZGRfZGV2aWNlcyhpb3AzMnhfZGV2aWNlcywKLQkJCQlBUlJBWV9TSVpFKGlvcDMyeF9kZXZpY2VzKSk7Ci0JfQotfQotCi12b2lkIF9faW5pdCBpb3AzMjFfbWFwX2lvKHZvaWQpCi17Ci0JaW90YWJsZV9pbml0KGlvcDMyMV9zdGRfZGVzYywgQVJSQVlfU0laRShpb3AzMjFfc3RkX2Rlc2MpKTsKLQllYXJseV9zZXJpYWxfc2V0dXAoJmlvcDMyMV9zZXJpYWxfcG9ydHNbMF0pOwotfQotCi0jaWZkZWYgQ09ORklHX0FSQ0hfSVE4MDMyMQotZXh0ZXJuIHZvaWQgaXE4MDMyMV9tYXBfaW8odm9pZCk7Ci1leHRlcm4gc3RydWN0IHN5c190aW1lciBpb3AzMjFfdGltZXI7Ci1leHRlcm4gdm9pZCBpb3AzMjFfaW5pdF90aW1lKHZvaWQpOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9JUTMxMjQ0Ci1leHRlcm4gdm9pZCBpcTMxMjQ0X21hcF9pbyh2b2lkKTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGlvcDMyMV90aW1lcjsKLWV4dGVybiB2b2lkIGlvcDMyMV9pbml0X3RpbWUodm9pZCk7Ci0jZW5kaWYKLQotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMyMSkKLU1BQ0hJTkVfU1RBUlQoSVE4MDMyMSwgIkludGVsIElRODAzMjEiKQotCS8qIE1haW50YWluZXI6IEludGVsIENvcnBvcmF0aW9uICovCi0JLnBoeXNfaW8JPSBJUTgwMzIxX1VBUlQsCi0JLmlvX3BnX29mZnN0CT0gKChJUTgwMzIxX1VBUlQpID4+IDE4KSAmIDB4ZmZmYywKLQkubWFwX2lvCQk9IGlxODAzMjFfbWFwX2lvLAotCS5pbml0X2lycQk9IGlvcDMyMV9pbml0X2lycSwKLQkudGltZXIJCT0gJmlvcDMyMV90aW1lciwKLQkuYm9vdF9wYXJhbXMJPSAweGEwMDAwMTAwLAotCS5pbml0X21hY2hpbmUJPSBpb3AzMnhfaW5pdCwKLU1BQ0hJTkVfRU5ECi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRMzEyNDQpCi1NQUNISU5FX1NUQVJUKElRMzEyNDQsICJJbnRlbCBJUTMxMjQ0IikKLQkvKiBNYWludGFpbmVyOiBJbnRlbCBDb3JwLiAqLwotCS5waHlzX2lvCT0gSVEzMTI0NF9VQVJULAotCS5pb19wZ19vZmZzdAk9ICgoSVEzMTI0NF9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCi0JLm1hcF9pbwkJPSBpcTMxMjQ0X21hcF9pbywKLQkuaW5pdF9pcnEJPSBpb3AzMjFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZpb3AzMjFfdGltZXIsCi0JLmJvb3RfcGFyYW1zCT0gMHhhMDAwMDEwMCwKLQkuaW5pdF9tYWNoaW5lCT0gaW9wMzJ4X2luaXQsCi1NQUNISU5FX0VORAotI2Vsc2UKLSNlcnJvciBObyBtYWNoaW5lIGRlc2NyaXB0b3IgZGVmaW5lZCBmb3IgdGhpcyBJT1AzWFggaW1wbGVtZW50YXRpb24KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzIxLXRpbWUuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA0YjFhNmY3Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDggKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMyMS10aW1lLmMKLSAqCi0gKiBUaW1lciBjb2RlIGZvciBJT1AzMjEgYmFzZWQgc3lzdGVtcwotICoKLSAqIEF1dGhvcjogRGVlcGFrIFNheGVuYSA8ZHNheGVuYUBtdmlzdGEuY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAyLTIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotI2RlZmluZSBJT1AzMjFfVElNRV9TWU5DIDAKLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbGFwc2VkKHZvaWQpCi17Ci0JcmV0dXJuIExBVENIIC0gKklPUDMyMV9UVV9UQ1IwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpb3AzMjFfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCwgdXNlYzsKLQl1MzIgdGlzcjEsIHRpc3IyOwotCi0JLyoKLQkgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcgYmVmb3JlIHdlIHJlYWQgdGhlIHRpbWVyLAotCSAqIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZC4gIEZhY3RvciB0aGlzIGludG8gdGhlIHRpbWUuCi0JICogSWYgYW4gaW50ZXJydXB0IHdhcyBwZW5kaW5nIGFmdGVyIHdlIHJlYWQgdGhlIHRpbWVyLAotCSAqIGl0IG1heSBoYXZlIHdyYXBwZWQgYmV0d2VlbiBjaGVja2luZyB0aGUgaW50ZXJydXB0Ci0JICogc3RhdHVzIGFuZCByZWFkaW5nIHRoZSB0aW1lci4gIFJlLXJlYWQgdGhlIHRpbWVyIHRvCi0JICogYmUgc3VyZSBpdHMgdmFsdWUgaXMgYWZ0ZXIgdGhlIHdyYXAuCi0JICovCi0KLQlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyMSkpOwotCWVsYXBzZWQgPSBnZXRfZWxhcHNlZCgpOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IyKSk7Ci0KLQlpZih0aXNyMSAmIDEpCi0JCWVsYXBzZWQgKz0gTEFUQ0g7Ci0JZWxzZSBpZiAodGlzcjIgJiAxKQotCQllbGFwc2VkID0gTEFUQ0ggKyBnZXRfZWxhcHNlZCgpOwotCi0JLyoKLQkgKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMuCi0JICovCi0JdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkIC8gKENMT0NLX1RJQ0tfUkFURS8xMDAwMDAwKSk7Ci0KLQlyZXR1cm4gdXNlYzsKLX0KLQotc3RhdGljIGlycXJldHVybl90Ci1pb3AzMjFfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIHRpc3I7Ci0KLQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IpKTsKLQl0aXNyIHw9IDE7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNiwgYzEsIDAiIDogOiAiciIgKHRpc3IpKTsKLQotCXRpbWVyX3RpY2socmVncyk7Ci0KLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCi0JcmV0dXJuIElSUV9IQU5ETEVEOwotfQotCi1zdGF0aWMgc3RydWN0IGlycWFjdGlvbiBpb3AzMjFfdGltZXJfaXJxID0gewotCS5uYW1lCQk9ICJJT1AzMjEgVGltZXIgVGljayIsCi0JLmhhbmRsZXIJPSBpb3AzMjFfdGltZXJfaW50ZXJydXB0LAotCS5mbGFncwkJPSBJUlFGX0RJU0FCTEVEIHwgSVJRRl9USU1FUiwKLX07Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBpb3AzMjFfdGltZXJfaW5pdCh2b2lkKQotewotCXUzMiB0aW1lcl9jdGw7Ci0KLQlzZXR1cF9pcnEoSVJRX0lPUDMyMV9USU1FUjAsICZpb3AzMjFfdGltZXJfaXJxKTsKLQotCXRpbWVyX2N0bCA9IElPUDMyMV9UTVJfRU4gfCBJT1AzMjFfVE1SX1BSSVZJTEVHRUQgfCBJT1AzMjFfVE1SX1JFTE9BRCB8Ci0JCQlJT1AzMjFfVE1SX1JBVElPXzFfMTsKLQotCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzQsIGMxLCAwIiA6IDogInIiIChMQVRDSCkpOwotCi0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjMCwgYzEsIDAiCTogOiAiciIgKHRpbWVyX2N0bCkpOwotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIGlvcDMyMV90aW1lciA9IHsKLQkuaW5pdAkJPSAmaW9wMzIxX3RpbWVyX2luaXQsCi0JLm9mZnNldAkJPSBpb3AzMjFfZ2V0dGltZW9mZnNldCwKLX07CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNhYjExNzIuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLWlycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtaXJxLmMKLSAqCi0gKiBHZW5lcmljIElPUDMzMSBJUlEgaGFuZGxpbmcgZnVuY3Rpb25hbGl0eQotICoKLSAqIEF1dGhvcjogRGF2ZSBKaWFuZyA8ZGF2ZS5qaWFuZ0BpbnRlbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLQotc3RhdGljIHUzMiBpb3AzMzFfbWFzazAgPSAwOwotc3RhdGljIHUzMiBpb3AzMzFfbWFzazEgPSAwOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsX3dyaXRlMCh1MzIgdmFsKQotewotICAgIC8vIElOVENUTDAKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMwLGMwLDAiOjoiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50Y3RsX3dyaXRlMSh1MzIgdmFsKQotewotICAgIC8vIElOVENUTDEKLSAgICBhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMxLGMwLDAiOjoiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlMCh1MzIgdmFsKQotewotICAgIC8vIElOVFNUUjAKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMyLGMwLDAiOjoiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgaW50c3RyX3dyaXRlMSh1MzIgdmFsKQotewotICAgIC8vIElOVFNUUjEKLQlhc20gdm9sYXRpbGUoIm1jciBwNiwwLCUwLGMzLGMwLDAiOjoiciIgKHZhbCkpOwotfQotCi1zdGF0aWMgdm9pZAotaW9wMzMxX2lycV9tYXNrMSAodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgaW9wMzMxX21hc2swICY9IH4oMSA8PCAoaXJxIC0gSU9QMzMxX0lSUV9PRlMpKTsKLSAgICAgICAgaW50Y3RsX3dyaXRlMChpb3AzMzFfbWFzazApOwotfQotCi1zdGF0aWMgdm9pZAotaW9wMzMxX2lycV9tYXNrMiAodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgaW9wMzMxX21hc2sxICY9IH4oMSA8PCAoaXJxIC0gSU9QMzMxX0lSUV9PRlMgLSAzMikpOwotICAgICAgICBpbnRjdGxfd3JpdGUxKGlvcDMzMV9tYXNrMSk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pb3AzMzFfaXJxX3VubWFzazEodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgaW9wMzMxX21hc2swIHw9ICgxIDw8IChpcnEgLSBJT1AzMzFfSVJRX09GUykpOwotICAgICAgICBpbnRjdGxfd3JpdGUwKGlvcDMzMV9tYXNrMCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1pb3AzMzFfaXJxX3VubWFzazIodW5zaWduZWQgaW50IGlycSkKLXsKLSAgICAgICAgaW9wMzMxX21hc2sxIHw9ICgxIDw8IChpcnEgLSBJT1AzMzFfSVJRX09GUyAtIDMyKSk7Ci0gICAgICAgIGludGN0bF93cml0ZTEoaW9wMzMxX21hc2sxKTsKLX0KLQotc3RydWN0IGlycV9jaGlwIGlvcDMzMV9pcnFjaGlwMSA9IHsKLQkubmFtZQk9ICJJT1AtMSIsCi0JLmFjayAgICA9IGlvcDMzMV9pcnFfbWFzazEsCi0JLm1hc2sgICA9IGlvcDMzMV9pcnFfbWFzazEsCi0JLnVubWFzayA9IGlvcDMzMV9pcnFfdW5tYXNrMSwKLX07Ci0KLXN0cnVjdCBpcnFfY2hpcCBpb3AzMzFfaXJxY2hpcDIgPSB7Ci0JLm5hbWUJPSAiSU9QLTIiLAotCS5hY2sgICAgPSBpb3AzMzFfaXJxX21hc2syLAotCS5tYXNrICAgPSBpb3AzMzFfaXJxX21hc2syLAotCS51bm1hc2sgPSBpb3AzMzFfaXJxX3VubWFzazIsCi19OwotCi12b2lkIF9faW5pdCBpb3AzMzFfaW5pdF9pcnEodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgaSwgdG1wOwotCi0JLyogRW5hYmxlIGFjY2VzcyB0byBjb3Byb2Nlc3NvciA2IGZvciBkZWFsaW5nIHdpdGggSVJRcy4KLQkgKiBGcm9tIFJNSzoKLQkgKiBCYXNpY2FsbHksIHRoZSBJbnRlbCBkb2N1bWVudGF0aW9uIGhlcmUgaXMgcG9vci4gIEl0IGFwcGVhcnMgdGhhdAotCSAqIHlvdSBuZWVkIHRvIHNldCB0aGUgYml0IHRvIGJlIGFibGUgdG8gYWNjZXNzIHRoZSBjb3Byb2Nlc3NvciBmcm9tCi0JICogU1ZDIG1vZGUuICBXaGV0aGVyIHRoYXQgYWxsb3dzIGFjY2VzcyBmcm9tIHVzZXIgc3BhY2Ugb3Igbm90IGlzCi0JICogdW5jbGVhci4KLQkgKi8KLQlhc20gdm9sYXRpbGUgKAotCQkibXJjIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkib3JyICUwLCAlMCwgJTFcblx0IgotCQkibWNyIHAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgotCQkvKiBUaGUgYWN0aW9uIGlzIGRlbGF5ZWQsIHNvIHdlIGhhdmUgdG8gZG8gdGhpczogKi8KLQkJIm1yYyBwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKLQkJIm1vdiAlMCwgJTBcblx0IgotCQkic3ViIHBjLCBwYywgIzQiCi0JCTogIj1yIiAodG1wKSA6ICJpIiAoMSA8PCA2KSApOwotCi0JaW50Y3RsX3dyaXRlMCgwKTsJCS8vIGRpc2FibGUgYWxsIGludGVycnVwdHMKLSAgICAJaW50Y3RsX3dyaXRlMSgwKTsKLQlpbnRzdHJfd3JpdGUwKDApOwkJLy8gdHJlYXQgYWxsIGFzIElSUQotICAgIAlpbnRzdHJfd3JpdGUxKDApOwotCWlmKG1hY2hpbmVfaXNfaXE4MDMzMSgpKSAJLy8gYWxsIGludGVycnVwdHMgYXJlIGlucHV0cyB0byBjaGlwCi0JCSpJT1AzMzFfUENJSVJTUiA9IDB4MGY7Ci0KLQlmb3IoaSA9IElPUDMzMV9JUlFfT0ZTOyBpIDwgTlJfSU9QMzMxX0lSUVM7IGkrKykKLQl7Ci0JCXNldF9pcnFfY2hpcChpLCAoaSA8IDMyKSA/ICZpb3AzMzFfaXJxY2hpcDEgOiAmaW9wMzMxX2lycWNoaXAyKTsKLQkJc2V0X2lycV9oYW5kbGVyKGksIGRvX2xldmVsX0lSUSk7Ci0JCXNldF9pcnFfZmxhZ3MoaSwgSVJRRl9WQUxJRCB8IElSUUZfUFJPQkUpOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXBjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NGRkMjEzLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDIyMiArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXBjaS5jCi0gKgotICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJT1AzMzEgY2hpcHNldAotICoKLSAqIEF1dGhvcjogRGF2ZSBKaWFuZyAoZGF2ZS5qaWFuZ0BpbnRlbC5jb20pCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvcGNpLmg+Ci0KLSNpbmNsdWRlIDxhc20vYXJjaC9pb3AzMzEuaD4KLQotI3VuZGVmIERFQlVHCi0jdW5kZWYgREVCVUcxCi0KLSNpZmRlZiBERUJVRwotI2RlZmluZSAgREJHKHguLi4pIHByaW50ayh4KQotI2Vsc2UKLSNkZWZpbmUgIERCRyh4Li4uKSBkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotI2lmZGVmIERFQlVHMQotI2RlZmluZSAgREJHMSh4Li4uKSBwcmludGsoeCkKLSNlbHNlCi0jZGVmaW5lICBEQkcxKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKLSNlbmRpZgotCi0vKgotICogVGhpcyByb3V0aW5lIGJ1aWxkcyBlaXRoZXIgYSB0eXBlMCBvciB0eXBlMSBjb25maWd1cmF0aW9uIGNvbW1hbmQuICBJZiB0aGUKLSAqIGJ1cyBpcyBvbiB0aGUgODAzMzEgdGhlbiBhIHR5cGUwIG1hZGUsIGVsc2UgYSB0eXBlMSBpcyBjcmVhdGVkLgotICovCi1zdGF0aWMgdTMyIGlvcDMzMV9jZmdfYWRkcmVzcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKLXsKLQlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7Ci0JdTMyIGFkZHI7Ci0KLQlpZiAoc3lzLT5idXNuciA9PSBidXMtPm51bWJlcikKLQkJYWRkciA9IDEgPDwgKFBDSV9TTE9UKGRldmZuKSArIDE2KSB8IChQQ0lfU0xPVChkZXZmbikgPDwgMTEpOwotCWVsc2UKLQkJYWRkciA9IGJ1cy0+bnVtYmVyIDw8IDE2IHwgUENJX1NMT1QoZGV2Zm4pIDw8IDExIHwgMTsKLQotCWFkZHIgfD0JUENJX0ZVTkMoZGV2Zm4pIDw8IDggfCAod2hlcmUgJiB+Myk7Ci0KLQlyZXR1cm4gYWRkcjsKLX0KLQotLyoKLSAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGN5Y2xlLiAgSWYgYW4gZXJyb3IKLSAqIHdhcyBkZXRlY3RlZCBpdCByZXR1cm5zIGEgMSwgZWxzZSBpdCByZXR1cm5zIGEgMC4gIFRoZSBlcnJvcnMgYmVpbmcgY2hlY2tlZAotICogYXJlIHBhcml0eSwgbWFzdGVyIGFib3J0LCB0YXJnZXQgYWJvcnQgKG1hc3RlciBhbmQgdGFyZ2V0KS4gIFRoZXNlIHR5cGVzIG9mCi0gKiBlcnJvcnMgb2NjdXJlIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCi0gKiB0aGUgZGlzY292ZXJ5IHN0YWdlLgotICovCi1zdGF0aWMgaW50IGlvcDMzMV9wY2lfc3RhdHVzKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IHN0YXR1czsKLQlpbnQgcmV0ID0gMDsKLQotCS8qCi0JICogQ2hlY2sgdGhlIHN0YXR1cyByZWdpc3RlcnMuCi0JICovCi0Jc3RhdHVzID0gKklPUDMzMV9BVFVTUjsKLQlpZiAoc3RhdHVzICYgMHhmOTAwKQotCXsKLQkJREJHKCJcdFx0XHRQQ0k6IFAwIC0gc3RhdHVzID0gMHglMDh4XG4iLCBzdGF0dXMpOwotCQkqSU9QMzMxX0FUVVNSID0gc3RhdHVzICYgMHhmOTAwOwotCQlyZXQgPSAxOwotCX0KLQlzdGF0dXMgPSAqSU9QMzMxX0FUVUlTUjsKLQlpZiAoc3RhdHVzICYgMHg2NzlmKQotCXsKLQkJREJHKCJcdFx0XHRQQ0k6IFAxIC0gc3RhdHVzID0gMHglMDh4XG4iLCBzdGF0dXMpOwotCQkqSU9QMzMxX0FUVUlTUiA9IHN0YXR1cyAmIDB4Njc5ZjsKLQkJcmV0ID0gMTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotLyoKLSAqIFNpbXBseSB3cml0ZSB0aGUgYWRkcmVzcyByZWdpc3RlciBhbmQgcmVhZCB0aGUgY29uZmlndXJhdGlvbgotICogZGF0YS4gIE5vdGUgdGhhdCB0aGUgNCBub3AncyBlbnN1cmUgdGhhdCB3ZSBhcmUgYWJsZSB0byBoYW5kbGUKLSAqIGEgZGVsYXllZCBhYm9ydCAoaW4gdGhlb3J5LikKLSAqLwotc3RhdGljIGlubGluZSB1MzIgaW9wMzMxX3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQotewotCXUzMiB2YWw7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJInN0cgklMSwgWyUyXVxuXHQiCi0JCSJsZHIJJTAsIFslM11cblx0IgotCQkibm9wXG5cdCIKLQkJIm5vcFxuXHQiCi0JCSJub3Bcblx0IgotCQkibm9wXG5cdCIKLQkJOiAiPXIiICh2YWwpCi0JCTogInIiIChhZGRyKSwgInIiIChJT1AzMzFfT0NDQVIpLCAiciIgKElPUDMzMV9PQ0NEUikpOwotCi0JcmV0dXJuIHZhbDsKLX0KLQotLyoKLSAqIFRoZSByZWFkIHJvdXRpbmVzIG11c3QgY2hlY2sgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uCi0gKiBjeWNsZS4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgdGhlIHJvdXRpbmUgcmV0dXJucyBhbGwgaGV4IGYncy4KLSAqLwotc3RhdGljIGludAotaW9wMzMxX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAotCQlpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBpb3AzMzFfY2ZnX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOwotCXUzMiB2YWwgPSBpb3AzMzFfcmVhZChhZGRyKSA+PiAoKHdoZXJlICYgMykgKiA4KTsKLQotCWlmKCBpb3AzMzFfcGNpX3N0YXR1cygpICkKLQkJdmFsID0gMHhmZmZmZmZmZjsKLQotCSp2YWx1ZSA9IHZhbDsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQKLWlvcDMzMV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsCi0JCWludCBzaXplLCB1MzIgdmFsdWUpCi17Ci0JdW5zaWduZWQgbG9uZyBhZGRyID0gaW9wMzMxX2NmZ19hZGRyZXNzKGJ1cywgZGV2Zm4sIHdoZXJlKTsKLQl1MzIgdmFsOwotCi0JaWYgKHNpemUgIT0gNCkgewotCQl2YWwgPSBpb3AzMzFfcmVhZChhZGRyKTsKLQkJaWYgKCFpb3AzMzFfcGNpX3N0YXR1cygpID09IDApCi0JCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCi0JCXdoZXJlID0gKHdoZXJlICYgMykgKiA4OwotCi0JCWlmIChzaXplID09IDEpCi0JCQl2YWwgJj0gfigweGZmIDw8IHdoZXJlKTsKLQkJZWxzZQotCQkJdmFsICY9IH4oMHhmZmZmIDw8IHdoZXJlKTsKLQotCQkqSU9QMzMxX09DQ0RSID0gdmFsIHwgdmFsdWUgPDwgd2hlcmU7Ci0JfSBlbHNlIHsKLQkJYXNtIHZvbGF0aWxlKAotCQkJInN0cgklMSwgWyUyXVxuXHQiCi0JCQkic3RyCSUwLCBbJTNdXG5cdCIKLQkJCSJub3Bcblx0IgotCQkJIm5vcFxuXHQiCi0JCQkibm9wXG5cdCIKLQkJCSJub3Bcblx0IgotCQkJOgotCQkJOiAiciIgKHZhbHVlKSwgInIiIChhZGRyKSwKLQkJCSAgInIiIChJT1AzMzFfT0NDQVIpLCAiciIgKElPUDMzMV9PQ0NEUikpOwotCX0KLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBpb3AzMzFfb3BzID0gewotCS5yZWFkCT0gaW9wMzMxX3JlYWRfY29uZmlnLAotCS53cml0ZQk9IGlvcDMzMV93cml0ZV9jb25maWcsCi19OwotCi0vKgotICogV2hlbiBhIFBDSSBkZXZpY2UgZG9lcyBub3QgZXhpc3QgZHVyaW5nIGNvbmZpZyBjeWNsZXMsIHRoZSBYU2NhbGUgZ2V0cyBhCi0gKiBidXMgZXJyb3IgaW5zdGVhZCBvZiByZXR1cm5pbmcgMHhmZmZmZmZmZi4gVGhpcyBoYW5kbGVyIHNpbXBseSByZXR1cm5zLgotICovCi1pbnQKLWlvcDMzMV9wY2lfYWJvcnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlEQkcoIlBDSSBhYm9ydDogYWRkcmVzcyA9IDB4JTA4bHggZnNyID0gMHglMDN4IFBDID0gMHglMDhseCBMUiA9IDB4JTA4bHhcbiIsCi0JCWFkZHIsIGZzciwgcmVncy0+QVJNX3BjLCByZWdzLT5BUk1fbHIpOwotCi0JLyoKLQkgKiBJZiBpdCB3YXMgYW4gaW1wcmVjaXNlIGFib3J0LCB0aGVuIHdlIG5lZWQgdG8gY29ycmVjdCB0aGUKLQkgKiByZXR1cm4gYWRkcmVzcyB0byBiZSBfYWZ0ZXJfIHRoZSBpbnN0cnVjdGlvbi4KLQkgKi8KLQlpZiAoZnNyICYgKDEgPDwgMTApKQotCQlyZWdzLT5BUk1fcGMgKz0gNDsKLQotCXJldHVybiAwOwotfQotCi0vKgotICogU2NhbiBhbiBJT1AzMzEgUENJIGJ1cy4gIHN5cy0+YnVzIGRlZmluZXMgd2hpY2ggYnVzIHdlIHNjYW4uCi0gKi8KLXN0cnVjdCBwY2lfYnVzICppb3AzMzFfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMpCi17Ci0JcmV0dXJuIHBjaV9zY2FuX2J1cyhzeXMtPmJ1c25yLCAmaW9wMzMxX29wcywgc3lzKTsKLX0KLQotdm9pZCBpb3AzMzFfaW5pdCh2b2lkKQotewotCURCRzEoIlBDSTogIEludGVsIDgwMzMxIFBDSSBpbml0IGNvZGUuXG4iKTsKLQlEQkcxKCJcdEFUVTogSU9QMzMxX0FUVUNNRD0weCUwNHhcbiIsICpJT1AzMzFfQVRVQ01EKTsKLQlEQkcxKCJcdEFUVTogSU9QMzMxX09NV1RWUjA9MHglMDR4LCBJT1AzMzFfT0lPV1RWUj0weCUwNHhcbiIsCi0JCQkqSU9QMzMxX09NV1RWUjAsCi0JCQkqSU9QMzMxX09JT1dUVlIpOwotCURCRzEoIlx0QVRVOiBJT1AzMzFfT01XVFZSMT0weCUwNHhcbiIsICpJT1AzMzFfT01XVFZSMSk7Ci0JREJHMSgiXHRBVFU6IElPUDMzMV9BVFVDUj0weCUwOHhcbiIsICpJT1AzMzFfQVRVQ1IpOwotCURCRzEoIlx0QVRVOiBJT1AzMzFfSUFCQVIwPTB4JTA4eCBJT1AzMzFfSUFMUjA9MHglMDh4IElPUDMzMV9JQVRWUjA9JTA4eFxuIiwgKklPUDMzMV9JQUJBUjAsICpJT1AzMzFfSUFMUjAsICpJT1AzMzFfSUFUVlIwKTsKLQlEQkcxKCJcdEFUVTogSU9QMzFfSUFCQVIxPTB4JTA4eCBJT1AzMzFfSUFMUjE9MHglMDh4XG4iLCAqSU9QMzMxX0lBQkFSMSwgKklPUDMzMV9JQUxSMSk7Ci0JREJHMSgiXHRBVFU6IElPUDMzMV9FUkJBUj0weCUwOHggSU9QMzMxX0VSTFI9MHglMDh4IElPUDMzMV9FUlRWUj0lMDh4XG4iLCAqSU9QMzMxX0VSQkFSLCAqSU9QMzMxX0VSTFIsICpJT1AzMzFfRVJUVlIpOwotCURCRzEoIlx0QVRVOiBJT1AzMzFfSUFCQVIyPTB4JTA4eCBJT1AzMzFfSUFMUjI9MHglMDh4IElPUDMzMV9JQVRWUjI9JTA4eFxuIiwgKklPUDMzMV9JQUJBUjIsICpJT1AzMzFfSUFMUjIsICpJT1AzMzFfSUFUVlIyKTsKLQlEQkcxKCJcdEFUVTogSU9QMzMxX0lBQkFSMz0weCUwOHggSU9QMzMxX0lBTFIzPTB4JTA4eCBJT1AzMzFfSUFUVlIzPSUwOHhcbiIsICpJT1AzMzFfSUFCQVIzLCAqSU9QMzMxX0lBTFIzLCAqSU9QMzMxX0lBVFZSMyk7Ci0KLQlob29rX2ZhdWx0X2NvZGUoMTYrNiwgaW9wMzMxX3BjaV9hYm9ydCwgU0lHQlVTLCAiaW1wcmVjaXNlIGV4dGVybmFsIGFib3J0Iik7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXNldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNjYzk4ZDguLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXNldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyMjEgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaW9wM3h4L2lvcDMzMS1zZXR1cC5jCi0gKgotICogQXV0aG9yOiBEYXZlIEppYW5nIChkYXZlLmppYW5nQGludGVsLmNvbSkKLSAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KLSNpbmNsdWRlIDxsaW51eC90dHkuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfODI1MC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+Ci0KLSNkZWZpbmUgSU9QMzMxX1VBUlRfWFRBTCAzMzMzNDAwMAotCi0vKgotICogU3RhbmRhcmQgSU8gbWFwcGluZyBmb3IgYWxsIElPUDMzMSBiYXNlZCBzeXN0ZW1zCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW9wMzMxX3N0ZF9kZXNjW10gX19pbml0ZGF0YSA9IHsKLQl7CS8qIG1lbSBtYXBwZWQgcmVnaXN0ZXJzICovCi0JCS52aXJ0dWFsCT0gSU9QMzMxX1ZJUlRfTUVNX0JBU0UsCi0JCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT1AzMzFfUEhZU19NRU1fQkFTRSksCi0JCS5sZW5ndGgJCT0gMHgwMDAwMjAwMCwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfSwgewkvKiBQQ0kgSU8gc3BhY2UgKi8KLQkJLnZpcnR1YWwJPSBJT1AzMzFfUENJX0xPV0VSX0lPX1ZBLAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oSU9QMzMxX1BDSV9MT1dFUl9JT19QQSksCi0JCS5sZW5ndGgJCT0gSU9QMzMxX1BDSV9JT19XSU5ET1dfU0laRSwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzM3hfdWFydDBfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSBJT1AzMzFfVUFSVDBfUEhZUywKLQkJLmVuZCA9IElPUDMzMV9VQVJUMF9QSFlTICsgMHgzZiwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9JT1AzMzFfVUFSVDAsCi0JCS5lbmQgPSBJUlFfSU9QMzMxX1VBUlQwLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgaW9wMzN4X3VhcnQxX3Jlc291cmNlc1tdID0gewotCVswXSA9IHsKLQkJLnN0YXJ0ID0gSU9QMzMxX1VBUlQxX1BIWVMsCi0JCS5lbmQgPSBJT1AzMzFfVUFSVDFfUEhZUyArIDB4M2YsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNLAotCX0sCi0JWzFdID0gewotCQkuc3RhcnQgPSBJUlFfSU9QMzMxX1VBUlQxLAotCQkuZW5kID0gSVJRX0lPUDMzMV9VQVJUMSwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9JUlEKLQl9Ci19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGlvcDMzeF91YXJ0MF9kYXRhW10gPSB7Ci0JewotICAgICAgIC5tZW1iYXNlICAgICA9IChjaGFyKikoSU9QMzMxX1VBUlQwX1ZJUlQpLAotICAgICAgIC5tYXBiYXNlICAgICA9IChJT1AzMzFfVUFSVDBfUEhZUyksCi0gICAgICAgLmlycSAgICAgICAgID0gSVJRX0lPUDMzMV9VQVJUMCwKLSAgICAgICAudWFydGNsayAgICAgPSBJT1AzMzFfVUFSVF9YVEFMLAotICAgICAgIC5yZWdzaGlmdCAgICA9IDIsCi0gICAgICAgLmlvdHlwZSAgICAgID0gVVBJT19NRU0sCi0gICAgICAgLmZsYWdzICAgICAgID0gVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsgIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IGlvcDMzeF91YXJ0MV9kYXRhW10gPSB7Ci0JewotICAgICAgIC5tZW1iYXNlICAgICA9IChjaGFyKikoSU9QMzMxX1VBUlQxX1ZJUlQpLAotICAgICAgIC5tYXBiYXNlICAgICA9IChJT1AzMzFfVUFSVDFfUEhZUyksCi0gICAgICAgLmlycSAgICAgICAgID0gSVJRX0lPUDMzMV9VQVJUMSwKLSAgICAgICAudWFydGNsayAgICAgPSBJT1AzMzFfVUFSVF9YVEFMLAotICAgICAgIC5yZWdzaGlmdCAgICA9IDIsCi0gICAgICAgLmlvdHlwZSAgICAgID0gVVBJT19NRU0sCi0gICAgICAgLmZsYWdzICAgICAgID0gVVBGX1NLSVBfVEVTVCwKLQl9LAotCXsgIH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzM3hfdWFydDAgPSB7Ci0gICAgICAgLm5hbWUgPSAic2VyaWFsODI1MCIsCi0gICAgICAgLmlkID0gUExBVDgyNTBfREVWX1BMQVRGT1JNLAotICAgICAgIC5kZXYucGxhdGZvcm1fZGF0YSA9IGlvcDMzeF91YXJ0MF9kYXRhLAotICAgICAgIC5udW1fcmVzb3VyY2VzID0gMiwKLSAgICAgICAucmVzb3VyY2UgPSBpb3AzM3hfdWFydDBfcmVzb3VyY2VzLAotfTsKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wMzN4X3VhcnQxID0gewotICAgICAgIC5uYW1lID0gInNlcmlhbDgyNTAiLAotICAgICAgIC5pZCA9IFBMQVQ4MjUwX0RFVl9QTEFURk9STTEsCi0gICAgICAgLmRldi5wbGF0Zm9ybV9kYXRhID0gaW9wMzN4X3VhcnQxX2RhdGEsCi0gICAgICAgLm51bV9yZXNvdXJjZXMgPSAyLAotICAgICAgIC5yZXNvdXJjZSA9IGlvcDMzeF91YXJ0MV9yZXNvdXJjZXMsCi19OwotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcDMzeF9pMmNfMF9yZXNvdXJjZXNbXSA9IHsKLQlbMF0gPSB7Ci0JCS5zdGFydCA9IDB4ZmZmZmY2ODAsCi0JCS5lbmQgPSAweGZmZmZmNjk4LAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKLQl9LAotCVsxXSA9IHsKLQkJLnN0YXJ0ID0gSVJRX0lPUDMzMV9JMkNfMCwKLQkJLmVuZCA9IElSUV9JT1AzMzFfSTJDXzAsCi0JCS5mbGFncyA9IElPUkVTT1VSQ0VfSVJRCi0JfQotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpb3AzM3hfaTJjXzFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkuc3RhcnQgPSAweGZmZmZmNmEwLAotCQkuZW5kID0gMHhmZmZmZjZiOCwKLQkJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0sCi0JfSwKLQlbMV0gPSB7Ci0JCS5zdGFydCA9IElSUV9JT1AzMzFfSTJDXzEsCi0JCS5lbmQgPSBJUlFfSU9QMzMxX0kyQ18xLAotCQkuZmxhZ3MgPSBJT1JFU09VUkNFX0lSUQotCX0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDMzeF9pMmNfMF9jb250cm9sbGVyID0gewotCS5uYW1lID0gIklPUDN4eC1JMkMiLAotCS5pZCA9IDAsCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSA9IGlvcDMzeF9pMmNfMF9yZXNvdXJjZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDMzeF9pMmNfMV9jb250cm9sbGVyID0gewotCS5uYW1lID0gIklPUDN4eC1JMkMiLAotCS5pZCA9IDEsCi0JLm51bV9yZXNvdXJjZXMgPSAyLAotCS5yZXNvdXJjZSA9IGlvcDMzeF9pMmNfMV9yZXNvdXJjZXMKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICppb3AzM3hfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7Ci0JJmlvcDMzeF91YXJ0MCwKLQkmaW9wMzN4X3VhcnQxLAotCSZpb3AzM3hfaTJjXzBfY29udHJvbGxlciwKLQkmaW9wMzN4X2kyY18xX2NvbnRyb2xsZXIKLX07Ci0KLXZvaWQgX19pbml0IGlvcDMzeF9pbml0KHZvaWQpCi17Ci0JaWYoaW9wX2lzXzMzMSgpKQotCXsKLQkJcGxhdGZvcm1fYWRkX2RldmljZXMoaW9wMzN4X2RldmljZXMsCi0JCQkJQVJSQVlfU0laRShpb3AzM3hfZGV2aWNlcykpOwotCX0KLX0KLQotdm9pZCBfX2luaXQgaW9wMzMxX21hcF9pbyh2b2lkKQotewotCWlvdGFibGVfaW5pdChpb3AzMzFfc3RkX2Rlc2MsIEFSUkFZX1NJWkUoaW9wMzMxX3N0ZF9kZXNjKSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMzEKLWV4dGVybiB2b2lkIGlvcDMzMV9pbml0X2lycSh2b2lkKTsKLWV4dGVybiBzdHJ1Y3Qgc3lzX3RpbWVyIGlvcDMzMV90aW1lcjsKLSNlbmRpZgotCi0jaWZkZWYgQ09ORklHX0FSQ0hfSVE4MDMzMQotZXh0ZXJuIHZvaWQgaXE4MDMzMV9tYXBfaW8odm9pZCk7Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19NQUNIX0lRODAzMzIKLWV4dGVybiB2b2lkIGlxODAzMzJfbWFwX2lvKHZvaWQpOwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMzEpCi1NQUNISU5FX1NUQVJUKElRODAzMzEsICJJbnRlbCBJUTgwMzMxIikKLQkvKiBNYWludGFpbmVyOiBJbnRlbCBDb3JwLiAqLwotCS5waHlzX2lvCT0gMHhmZWZmZjAwMCwKLQkuaW9fcGdfb2Zmc3QJPSAoKDB4ZmZmZmYwMDApID4+IDE4KSAmIDB4ZmZmYywgLy8gdmlydHVhbCwgcGh5c2ljYWwKLQkubWFwX2lvCQk9IGlxODAzMzFfbWFwX2lvLAotCS5pbml0X2lycQk9IGlvcDMzMV9pbml0X2lycSwKLQkudGltZXIJCT0gJmlvcDMzMV90aW1lciwKLQkuYm9vdF9wYXJhbXMJPSAweDAxMDAsCi0JLmluaXRfbWFjaGluZQk9IGlvcDMzeF9pbml0LAotTUFDSElORV9FTkQKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfTUFDSF9JUTgwMzMyKQotTUFDSElORV9TVEFSVChJUTgwMzMyLCAiSW50ZWwgSVE4MDMzMiIpCi0JLyogTWFpbnRhaW5lcjogSW50ZWwgQ29ycC4gKi8KLQkucGh5c19pbwk9IDB4ZmVmZmYwMDAsCi0JLmlvX3BnX29mZnN0CT0gKCgweGZmZmZmMDAwKSA+PiAxOCkgJiAweGZmZmMsIC8vIHZpcnR1YWwsIHBoeXNpY2FsCi0JLm1hcF9pbwkJPSBpcTgwMzMyX21hcF9pbywKLQkuaW5pdF9pcnEJPSBpb3AzMzFfaW5pdF9pcnEsCi0JLnRpbWVyCQk9ICZpb3AzMzFfdGltZXIsCi0JLmJvb3RfcGFyYW1zCT0gMHgwMTAwLAotCS5pbml0X21hY2hpbmUJPSBpb3AzM3hfaW5pdCwKLU1BQ0hJTkVfRU5ECi0KLSNlbHNlCi0jZXJyb3IgTm8gbWFjaGluZSBkZXNjcmlwdG9yIGRlZmluZWQgZm9yIHRoaXMgSU9QM1hYIGltcGxlbWVudGF0aW9uCi0jZW5kaWYKLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wMzMxLXRpbWUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGMwOWU3NC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzMzEtdGltZS5jCi0gKgotICogVGltZXIgY29kZSBmb3IgSU9QMzMxIGJhc2VkIHN5c3RlbXMKLSAqCi0gKiBBdXRob3I6IERhdmUgSmlhbmcgPGRhdmUuamlhbmdAaW50ZWwuY29tPgotICoKLSAqIENvcHlyaWdodCAyMDAzIEludGVsIENvcnAuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdGltZXguaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLQotc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9lbGFwc2VkKHZvaWQpCi17Ci0JcmV0dXJuIExBVENIIC0gKklPUDMzMV9UVV9UQ1IwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpb3AzMzFfZ2V0dGltZW9mZnNldCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZWxhcHNlZCwgdXNlYzsKLQl1MzIgdGlzcjEsIHRpc3IyOwotCi0JLyoKLQkgKiBJZiBhbiBpbnRlcnJ1cHQgd2FzIHBlbmRpbmcgYmVmb3JlIHdlIHJlYWQgdGhlIHRpbWVyLAotCSAqIHdlJ3ZlIGFscmVhZHkgd3JhcHBlZC4gIEZhY3RvciB0aGlzIGludG8gdGhlIHRpbWUuCi0JICogSWYgYW4gaW50ZXJydXB0IHdhcyBwZW5kaW5nIGFmdGVyIHdlIHJlYWQgdGhlIHRpbWVyLAotCSAqIGl0IG1heSBoYXZlIHdyYXBwZWQgYmV0d2VlbiBjaGVja2luZyB0aGUgaW50ZXJydXB0Ci0JICogc3RhdHVzIGFuZCByZWFkaW5nIHRoZSB0aW1lci4gIFJlLXJlYWQgdGhlIHRpbWVyIHRvCi0JICogYmUgc3VyZSBpdHMgdmFsdWUgaXMgYWZ0ZXIgdGhlIHdyYXAuCi0JICovCi0KLQlhc20gdm9sYXRpbGUoIm1yYyBwNiwgMCwgJTAsIGM2LCBjMSwgMCIgOiAiPXIiICh0aXNyMSkpOwotCWVsYXBzZWQgPSBnZXRfZWxhcHNlZCgpOwotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IyKSk7Ci0KLQlpZih0aXNyMSAmIDEpCi0JCWVsYXBzZWQgKz0gTEFUQ0g7Ci0JZWxzZSBpZiAodGlzcjIgJiAxKQotCQllbGFwc2VkID0gTEFUQ0ggKyBnZXRfZWxhcHNlZCgpOwotCi0JLyoKLQkgKiBOb3cgY29udmVydCB0aGVtIHRvIHVzZWMuCi0JICovCi0JdXNlYyA9ICh1bnNpZ25lZCBsb25nKShlbGFwc2VkIC8gKENMT0NLX1RJQ0tfUkFURS8xMDAwMDAwKSk7Ci0KLQlyZXR1cm4gdXNlYzsKLX0KLQotc3RhdGljIGlycXJldHVybl90Ci1pb3AzMzFfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdTMyIHRpc3I7Ci0KLQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQotCWFzbSB2b2xhdGlsZSgibXJjIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6ICI9ciIgKHRpc3IpKTsKLQl0aXNyIHw9IDE7Ci0JYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNiwgYzEsIDAiIDogOiAiciIgKHRpc3IpKTsKLQotCXRpbWVyX3RpY2socmVncyk7Ci0KLQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW9wMzMxX3RpbWVyX2lycSA9IHsKLQkubmFtZQkJPSAiSU9QMzMxIFRpbWVyIFRpY2siLAotCS5oYW5kbGVyCT0gaW9wMzMxX3RpbWVyX2ludGVycnVwdCwKLQkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCi19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW9wMzMxX3RpbWVyX2luaXQodm9pZCkKLXsKLQl1MzIgdGltZXJfY3RsOwotCi0Jc2V0dXBfaXJxKElSUV9JT1AzMzFfVElNRVIwLCAmaW9wMzMxX3RpbWVyX2lycSk7Ci0KLQl0aW1lcl9jdGwgPSBJT1AzMzFfVE1SX0VOIHwgSU9QMzMxX1RNUl9QUklWSUxFR0VEIHwgSU9QMzMxX1RNUl9SRUxPQUQgfAotCQkJSU9QMzMxX1RNUl9SQVRJT18xXzE7Ci0KLQlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGM0LCBjMSwgMCIgOiA6ICJyIiAoTEFUQ0gpKTsKLQotCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzAsIGMxLCAwIgk6IDogInIiICh0aW1lcl9jdGwpKTsKLQotfQotCi1zdHJ1Y3Qgc3lzX3RpbWVyIGlvcDMzMV90aW1lciA9IHsKLQkuaW5pdAkJPSBpb3AzMzFfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGlvcDMzMV9nZXR0aW1lb2Zmc2V0LAotfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtbW0uYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxMzEyNDQtbW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTg3NGI1NC4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LW1tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1pb3AzeHgvbW0uYwotICoKLSAqIExvdyBsZXZlbCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIGlxODAzMjEgcGxhdGZvcm0KLSAqCi0gKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLQotLyoKLSAqIElRODAzMjEgc3BlY2lmaWMgSU8gbWFwcGluZ3MKLSAqCi0gKiBXZSB1c2UgUmVkQm9vdCdzIHNldHVwIGZvciB0aGUgb25ib2FyZCBkZXZpY2VzLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlxMzEyNDRfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0JewkvKiBvbi1ib2FyZCBkZXZpY2VzICovCi0JCS52aXJ0dWFsCT0gSVEzMTI0NF9VQVJULAotCQkucGZuCQk9IF9fcGh5c190b19wZm4oSVEzMTI0NF9VQVJUKSwKLQkJLmxlbmd0aAkJPSAweDAwMTAwMDAwLAotCQkudHlwZQkJPSBNVF9ERVZJQ0UKLQl9Ci19OwotCi12b2lkIF9faW5pdCBpcTMxMjQ0X21hcF9pbyh2b2lkKQotewotCWlvcDMyMV9tYXBfaW8oKTsKLQotCWlvdGFibGVfaW5pdChpcTMxMjQ0X2lvX2Rlc2MsIEFSUkFZX1NJWkUoaXEzMTI0NF9pb19kZXNjKSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LXBjaS5jIGIvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXEzMTI0NC1wY2kuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjNjNjQxMy4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTMxMjQ0LXBjaS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI5ICswLDAgQEAKLS8qCi0gKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLXBjaS5jCi0gKgotICogUENJIHN1cHBvcnQgZm9yIHRoZSBJbnRlbCBJUTgwMzIxIHJlZmVyZW5jZSBib2FyZAotICoKLSAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KLSAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKLSAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQotICogZm9ybWF0IGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKLSAqIGludGVycnVwdHMgcHJvcGVybHkgcm91dGVkLiAgV2UgYXNzdW1lIDEgPD0gcGluIDw9IDQKLSAqLwotI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUChtaW5pZCxtYXhpZCkJXAotKHsgaW50IF9jdGxfID0gLTE7CQkJCVwKLSAgIHVuc2lnbmVkIGludCBfaWRzZWwgPSBpZHNlbCAtIG1pbmlkOwkJXAotICAgaWYgKF9pZHNlbCA8PSBtYXhpZCkJCQkJXAotICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW19pZHNlbF1bcGluLTFdOwlcCi0gICBfY3RsXzsgfSkKLQotI2RlZmluZSBJTlRBCUlSUV9JUTMxMjQ0X0lOVEEKLSNkZWZpbmUgSU5UQglJUlFfSVEzMTI0NF9JTlRCCi0jZGVmaW5lIElOVEMJSVJRX0lRMzEyNDRfSU5UQwotI2RlZmluZSBJTlRECUlSUV9JUTMxMjQ0X0lOVEQKLQotI2RlZmluZSBJTlRFCUlSUV9JUTMxMjQ0X0k4MjU0NgotCi1zdGF0aWMgaW5saW5lIGludCBfX2luaXQKLWlxMzEyNDRfbWFwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBpZHNlbCwgdTggcGluKQotewotCXN0YXRpYyBpbnQgcGNpX2lycV90YWJsZVtdWzRdID0gewotCQkvKgotCQkgKiBQQ0kgSURTRUwvSU5UUElOLT5JTlRMSU5FCi0JCSAqIEEgICAgICAgQiAgICAgICBDICAgICAgIEQKLQkJICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfRVA4MDIxOQotCQl7SU5UQiwgSU5UQiwgSU5UQiwgSU5UQn0sIC8qIENGbGFzaCAqLwotCQl7SU5URSwgSU5URSwgSU5URSwgSU5URX0sIC8qIDgyNTUxIFBybyAxMDAgKi8KLQkJe0lOVEQsIElOVEQsIElOVEQsIElOVER9LCAvKiBQQ0ktWCBTbG90ICovCi0JCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogU0FUQSAgICovCi0jZWxzZQotCQl7SU5UQiwgSU5UQiwgSU5UQiwgSU5UQn0sIC8qIENGbGFzaCAqLwotCQl7SU5UQywgSU5UQywgSU5UQywgSU5UQ30sIC8qIFNBVEEgICAqLwotCQl7SU5URCwgSU5URCwgSU5URCwgSU5URH0sIC8qIFBDSS1YIFNsb3QgKi8KLQkJe0lOVEUsIElOVEUsIElOVEUsIElOVEV9LCAvKiA4MjU0NiBHaWdFICovCi0jZW5kaWYgLy8gQ09ORklHX0FSQ0hfRVA4MDIxOQotCX07Ci0KLQlCVUdfT04ocGluIDwgMSB8fCBwaW4gPiA0KTsKLQotCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUCgwLCA3KTsKLX0KLQotc3RhdGljIGludCBpcTMxMjQ0X3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQotewotCXN0cnVjdCByZXNvdXJjZSAqcmVzOwotCi0JaWYobnIgIT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpICogMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFyZXMpCi0JCXBhbmljKCJQQ0k6IHVuYWJsZSB0byBhbGxvYyByZXNvdXJjZXMiKTsKLQotCXJlc1swXS5zdGFydCA9IElPUDMyMV9QQ0lfTE9XRVJfSU9fVkE7Ci0JcmVzWzBdLmVuZCAgID0gSU9QMzIxX1BDSV9VUFBFUl9JT19WQTsKLQlyZXNbMF0ubmFtZSAgPSAiSVEzMTI0NCBQQ0kgSS9PIFNwYWNlIjsKLQlyZXNbMF0uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotCi0JcmVzWzFdLnN0YXJ0ID0gSU9QMzIxX1BDSV9MT1dFUl9NRU1fUEE7Ci0JcmVzWzFdLmVuZCAgID0gSU9QMzIxX1BDSV9VUFBFUl9NRU1fUEE7Ci0JcmVzWzFdLm5hbWUgID0gIklRMzEyNDQgUENJIE1lbW9yeSBTcGFjZSI7Ci0JcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0KLQlyZXF1ZXN0X3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZyZXNbMF0pOwotCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmcmVzWzFdKTsKLQotCXN5cy0+bWVtX29mZnNldCA9IElPUDMyMV9QQ0lfTUVNX09GRlNFVDsKLQlzeXMtPmlvX29mZnNldCAgPSBJT1AzMjFfUENJX0lPX09GRlNFVDsKLQotCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOwotCXN5cy0+cmVzb3VyY2VbMV0gPSAmcmVzWzFdOwotCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGlxMzEyNDRfcHJlaW5pdCh2b2lkKQotewotCWlvcDMyMV9pbml0KCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfcGNpIGlxMzEyNDRfcGNpIF9faW5pdGRhdGEgPSB7Ci0JLnN3aXp6bGUJPSBwY2lfc3RkX3N3aXp6bGUsCi0JLm5yX2NvbnRyb2xsZXJzID0gMSwKLQkuc2V0dXAJCT0gaXEzMTI0NF9zZXR1cCwKLQkuc2NhbgkJPSBpb3AzMjFfc2Nhbl9idXMsCi0JLnByZWluaXQJPSBpcTMxMjQ0X3ByZWluaXQsCi0JLm1hcF9pcnEJPSBpcTMxMjQ0X21hcF9pcnEKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IGlxMzEyNDRfcGNpX2luaXQodm9pZCkKLXsKLQlpZiAobWFjaGluZV9pc19pcTMxMjQ0KCkpCi0JCXBjaV9jb21tb25faW5pdCgmaXEzMTI0NF9wY2kpOwotCXJldHVybiAwOwotfQotCi1zdWJzeXNfaW5pdGNhbGwoaXEzMTI0NF9wY2lfaW5pdCk7Ci0KLQotCi0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtbW0uYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtbW0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDljYWM1ZS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzIxLW1tLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vbWFjaC1pb3AzeHgvbW0uYwotICoKLSAqIExvdyBsZXZlbCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gZm9yIGlxODAzMjEgcGxhdGZvcm0KLSAqCi0gKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+Ci0KLQotLyoKLSAqIElRODAzMjEgc3BlY2lmaWMgSU8gbWFwcGluZ3MKLSAqCi0gKiBXZSB1c2UgUmVkQm9vdCdzIHNldHVwIGZvciB0aGUgb25ib2FyZCBkZXZpY2VzLgotICovCi1zdGF0aWMgc3RydWN0IG1hcF9kZXNjIGlxODAzMjFfaW9fZGVzY1tdIF9faW5pdGRhdGEgPSB7Ci0gCXsJLyogb24tYm9hcmQgZGV2aWNlcyAqLwotCQkudmlydHVhbAk9IElRODAzMjFfVUFSVCwKLQkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElRODAzMjFfVUFSVCksCi0JCS5sZW5ndGgJCT0gMHgwMDEwMDAwMCwKLQkJLnR5cGUJCT0gTVRfREVWSUNFCi0JfQotfTsKLQotdm9pZCBfX2luaXQgaXE4MDMyMV9tYXBfaW8odm9pZCkKLXsKLQlpb3AzMjFfbWFwX2lvKCk7Ci0KLQlpb3RhYmxlX2luaXQoaXE4MDMyMV9pb19kZXNjLCBBUlJBWV9TSVpFKGlxODAzMjFfaW9fZGVzYykpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYyBiL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMjEtcGNpLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQ5NzU4ZDMuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYworKysgL2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMyMS1wY2kuYwotICoKLSAqIFBDSSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgSVE4MDMyMSByZWZlcmVuY2UgYm9hcmQKLSAqCi0gKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgotCi0vKgotICogVGhlIGZvbGxvd2luZyBtYWNybyBpcyB1c2VkIHRvIGxvb2t1cCBpcnFzIGluIGEgc3RhbmRhcmQgdGFibGUKLSAqIGZvcm1hdCBmb3IgdGhvc2Ugc3lzdGVtcyB0aGF0IGRvIG5vdCBhbHJlYWR5IGhhdmUgUENJCi0gKiBpbnRlcnJ1cHRzIHByb3Blcmx5IHJvdXRlZC4gIFdlIGFzc3VtZSAxIDw9IHBpbiA8PSA0Ci0gKi8KLSNkZWZpbmUgUENJX0lSUV9UQUJMRV9MT09LVVAobWluaWQsbWF4aWQpCVwKLSh7IGludCBfY3RsXyA9IC0xOwkJCQlcCi0gICB1bnNpZ25lZCBpbnQgX2lkc2VsID0gaWRzZWwgLSBtaW5pZDsJCVwKLSAgIGlmIChfaWRzZWwgPD0gbWF4aWQpCQkJCVwKLSAgICAgIF9jdGxfID0gcGNpX2lycV90YWJsZVtfaWRzZWxdW3Bpbi0xXTsJXAotICAgX2N0bF87IH0pCi0KLSNkZWZpbmUgSU5UQQlJUlFfSVE4MDMyMV9JTlRBCi0jZGVmaW5lIElOVEIJSVJRX0lRODAzMjFfSU5UQgotI2RlZmluZSBJTlRDCUlSUV9JUTgwMzIxX0lOVEMKLSNkZWZpbmUgSU5URAlJUlFfSVE4MDMyMV9JTlRECi0KLSNkZWZpbmUgSU5URQlJUlFfSVE4MDMyMV9JODI1NDQKLQotc3RhdGljIGlubGluZSBpbnQgX19pbml0Ci1pcTgwMzIxX21hcF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggaWRzZWwsIHU4IHBpbikKLXsKLQlzdGF0aWMgaW50IHBjaV9pcnFfdGFibGVbXVs0XSA9IHsKLQkJLyoKLQkJICogUENJIElEU0VML0lOVFBJTi0+SU5UTElORQotCQkgKiBBICAgICAgIEIgICAgICAgQyAgICAgICBECi0JCSAqLwotCQl7SU5URSwgSU5URSwgSU5URSwgSU5URX0sIC8qIEdpZy1FICovCi0JCXstMSwgLTEsIC0xLCAtMX0sIAkgIC8qIFVudXNlZCAqLwotCQl7SU5UQywgSU5URCwgSU5UQSwgSU5UQn0sIC8qIFBDSS1YIFNsb3QgKi8KLQkJey0xLCAtMSwgLTEsIC0xfSwKLQl9OwotCi0JQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7Ci0KLS8vCXJldHVybiBQQ0lfSVJRX1RBQkxFX0xPT0tVUCg0LCA3KTsKLQlyZXR1cm4gcGNpX2lycV90YWJsZVtpZHNlbCU0XVtwaW4tMV07Ci19Ci0KLXN0YXRpYyBpbnQgaXE4MDMyMV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCWlmKG5yICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghcmVzKQotCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7Ci0KLQlyZXNbMF0uc3RhcnQgPSBJT1AzMjFfUENJX0xPV0VSX0lPX1ZBOwotCXJlc1swXS5lbmQgICA9IElPUDMyMV9QQ0lfVVBQRVJfSU9fVkE7Ci0JcmVzWzBdLm5hbWUgID0gIklRODAzMjEgUENJIEkvTyBTcGFjZSI7Ci0JcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQotCXJlc1sxXS5zdGFydCA9IElPUDMyMV9QQ0lfTE9XRVJfTUVNX1BBOwotCXJlc1sxXS5lbmQgICA9IElPUDMyMV9QQ0lfVVBQRVJfTUVNX1BBOwotCXJlc1sxXS5uYW1lICA9ICJJUTgwMzIxIFBDSSBNZW1vcnkgU3BhY2UiOwotCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCi0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKTsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSk7Ci0KLQlzeXMtPm1lbV9vZmZzZXQgPSBJT1AzMjFfUENJX01FTV9PRkZTRVQ7Ci0Jc3lzLT5pb19vZmZzZXQgID0gSU9QMzIxX1BDSV9JT19PRkZTRVQ7Ci0KLQlzeXMtPnJlc291cmNlWzBdID0gJnJlc1swXTsKLQlzeXMtPnJlc291cmNlWzFdID0gJnJlc1sxXTsKLQlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpcTgwMzIxX3ByZWluaXQodm9pZCkKLXsKLQlpb3AzMjFfaW5pdCgpOwotfQotCi1zdGF0aWMgc3RydWN0IGh3X3BjaSBpcTgwMzIxX3BjaSBfX2luaXRkYXRhID0gewotCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAotCS5ucl9jb250cm9sbGVycyA9IDEsCi0JLnNldHVwCQk9IGlxODAzMjFfc2V0dXAsCi0JLnNjYW4JCT0gaW9wMzIxX3NjYW5fYnVzLAotCS5wcmVpbml0CT0gaXE4MDMyMV9wcmVpbml0LAotCS5tYXBfaXJxCT0gaXE4MDMyMV9tYXBfaXJxCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcTgwMzIxX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfaXE4MDMyMSgpKQotCQlwY2lfY29tbW9uX2luaXQoJmlxODAzMjFfcGNpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGlxODAzMjFfcGNpX2luaXQpOwotCi0KLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLW1tLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLW1tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDEyOWViNDkuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMS1tbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaW9wM3h4L21tLmMKLSAqCi0gKiBMb3cgbGV2ZWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciBpcTgwMzMxIHBsYXRmb3JtCi0gKgotICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMyBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0KLS8qCi0gKiBJUTgwMzMxIHNwZWNpZmljIElPIG1hcHBpbmdzCi0gKgotICogV2UgdXNlIFJlZEJvb3QncyBzZXR1cCBmb3IgdGhlIG9uYm9hcmQgZGV2aWNlcy4KLSAqLwotCi12b2lkIF9faW5pdCBpcTgwMzMxX21hcF9pbyh2b2lkKQotewotCWlvcDMzMV9tYXBfaW8oKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMxLXBjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0MGQ4NjEwLi4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTkgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzEtcGNpLmMKLSAqCi0gKiBQQ0kgc3VwcG9ydCBmb3IgdGhlIEludGVsIElRODAzMzEgcmVmZXJlbmNlIGJvYXJkCi0gKgotICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQotICogZm9ybWF0IGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKLSAqIGludGVycnVwdHMgcHJvcGVybHkgcm91dGVkLiAgV2UgYXNzdW1lIDEgPD0gcGluIDw9IDQKLSAqLwotI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUChtaW5pZCxtYXhpZCkJXAotKHsgaW50IF9jdGxfID0gLTE7CQkJCVwKLSAgIHVuc2lnbmVkIGludCBfaWRzZWwgPSBpZHNlbCAtIG1pbmlkOwkJXAotICAgaWYgKF9pZHNlbCA8PSBtYXhpZCkJCQkJXAotICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW19pZHNlbF1bcGluLTFdOwlcCi0gICBfY3RsXzsgfSkKLQotI2RlZmluZSBJTlRBCUlSUV9JUTgwMzMxX0lOVEEKLSNkZWZpbmUgSU5UQglJUlFfSVE4MDMzMV9JTlRCCi0jZGVmaW5lIElOVEMJSVJRX0lRODAzMzFfSU5UQwotI2RlZmluZSBJTlRECUlSUV9JUTgwMzMxX0lOVEQKLQotLy8jZGVmaW5lIElOVEUJSVJRX0lRODAzMzFfSTgyNTQ0Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdAotaXE4MDMzMV9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCi17Ci0Jc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW11bNF0gPSB7Ci0JCS8qCi0JCSAqIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKLQkJICogQSAgICAgICBCICAgICAgIEMgICAgICAgRAotCQkgKi8KLQkJe0lOVEIsIElOVEMsIElOVEQsIElOVEF9LCAvKiBQQ0ktWCBTbG90ICovCi0JCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogR2lnRSAgKi8KLQl9OwotCi0JQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7Ci0KLQlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVAoMSwgNyk7Ci19Ci0KLXN0YXRpYyBpbnQgaXE4MDMzMV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCWlmKG5yICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghcmVzKQotCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7Ci0KLQlyZXNbMF0uc3RhcnQgPSBJT1AzMzFfUENJX0xPV0VSX0lPX1ZBOwotCXJlc1swXS5lbmQgICA9IElPUDMzMV9QQ0lfVVBQRVJfSU9fVkE7Ci0JcmVzWzBdLm5hbWUgID0gIklRODAzMzEgUENJIEkvTyBTcGFjZSI7Ci0JcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQotCXJlc1sxXS5zdGFydCA9IElPUDMzMV9QQ0lfTE9XRVJfTUVNX1BBOwotCXJlc1sxXS5lbmQgICA9IElPUDMzMV9QQ0lfVVBQRVJfTUVNX1BBOwotCXJlc1sxXS5uYW1lICA9ICJJUTgwMzMxIFBDSSBNZW1vcnkgU3BhY2UiOwotCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCi0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKTsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSk7Ci0KLQlzeXMtPm1lbV9vZmZzZXQgPSBJT1AzMzFfUENJX01FTV9PRkZTRVQ7Ci0Jc3lzLT5pb19vZmZzZXQgID0gSU9QMzMxX1BDSV9JT19PRkZTRVQ7Ci0KLQlzeXMtPnJlc291cmNlWzBdID0gJnJlc1swXTsKLQlzeXMtPnJlc291cmNlWzFdID0gJnJlc1sxXTsKLQlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpcTgwMzMxX3ByZWluaXQodm9pZCkKLXsKLQlpb3AzMzFfaW5pdCgpOwotfQotCi1zdGF0aWMgc3RydWN0IGh3X3BjaSBpcTgwMzMxX3BjaSBfX2luaXRkYXRhID0gewotCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAotCS5ucl9jb250cm9sbGVycyA9IDEsCi0JLnNldHVwCQk9IGlxODAzMzFfc2V0dXAsCi0JLnNjYW4JCT0gaW9wMzMxX3NjYW5fYnVzLAotCS5wcmVpbml0CT0gaXE4MDMzMV9wcmVpbml0LAotCS5tYXBfaXJxCT0gaXE4MDMzMV9tYXBfaXJxCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcTgwMzMxX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfaXE4MDMzMSgpKQotCQlwY2lfY29tbW9uX2luaXQoJmlxODAzMzFfcGNpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGlxODAzMzFfcGNpX2luaXQpOwotCi0KLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLW1tLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLW1tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJmZWFmNzUuLjAwMDAwMDAKLS0tIGEvYXJjaC9hcm0vbWFjaC1pb3AzeHgvaXE4MDMzMi1tbS5jCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvYXJtL21hY2gtaW9wM3h4L21tLmMKLSAqCi0gKiBMb3cgbGV2ZWwgbWVtb3J5IGluaXRpYWxpemF0aW9uIGZvciBpcTgwMzMyIHBsYXRmb3JtCi0gKgotICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgotCi0KLS8qCi0gKiBJUTgwMzMyIHNwZWNpZmljIElPIG1hcHBpbmdzCi0gKgotICogV2UgdXNlIFJlZEJvb3QncyBzZXR1cCBmb3IgdGhlIG9uYm9hcmQgZGV2aWNlcy4KLSAqLwotCi12b2lkIF9faW5pdCBpcTgwMzMyX21hcF9pbyh2b2lkKQotewotCWlvcDMzMV9tYXBfaW8oKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMgYi9hcmNoL2FybS9tYWNoLWlvcDN4eC9pcTgwMzMyLXBjaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZmMwNjc2Li4wMDAwMDAwCi0tLSBhL2FyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotLyoKLSAqIGFyY2gvYXJtL21hY2gtaW9wM3h4L2lxODAzMzItcGNpLmMKLSAqCi0gKiBQQ0kgc3VwcG9ydCBmb3IgdGhlIEludGVsIElRODAzMzIgcmVmZXJlbmNlIGJvYXJkCi0gKgotICogQXV0aG9yOiBEYXZlIEppYW5nIDxkYXZlLmppYW5nQGludGVsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3BjaS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0KLS8qCi0gKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gbG9va3VwIGlycXMgaW4gYSBzdGFuZGFyZCB0YWJsZQotICogZm9ybWF0IGZvciB0aG9zZSBzeXN0ZW1zIHRoYXQgZG8gbm90IGFscmVhZHkgaGF2ZSBQQ0kKLSAqIGludGVycnVwdHMgcHJvcGVybHkgcm91dGVkLiAgV2UgYXNzdW1lIDEgPD0gcGluIDw9IDQKLSAqLwotI2RlZmluZSBQQ0lfSVJRX1RBQkxFX0xPT0tVUChtaW5pZCxtYXhpZCkJXAotKHsgaW50IF9jdGxfID0gLTE7CQkJCVwKLSAgIHVuc2lnbmVkIGludCBfaWRzZWwgPSBpZHNlbCAtIG1pbmlkOwkJXAotICAgaWYgKF9pZHNlbCA8PSBtYXhpZCkJCQkJXAotICAgICAgX2N0bF8gPSBwY2lfaXJxX3RhYmxlW19pZHNlbF1bcGluLTFdOwlcCi0gICBfY3RsXzsgfSkKLQotI2RlZmluZSBJTlRBCUlSUV9JUTgwMzMyX0lOVEEKLSNkZWZpbmUgSU5UQglJUlFfSVE4MDMzMl9JTlRCCi0jZGVmaW5lIElOVEMJSVJRX0lRODAzMzJfSU5UQwotI2RlZmluZSBJTlRECUlSUV9JUTgwMzMyX0lOVEQKLQotLy8jZGVmaW5lIElOVEUJSVJRX0lRODAzMzJfSTgyNTQ0Ci0KLXN0YXRpYyBpbmxpbmUgaW50IF9faW5pdAotaXE4MDMzMl9tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IGlkc2VsLCB1OCBwaW4pCi17Ci0Jc3RhdGljIGludCBwY2lfaXJxX3RhYmxlW11bOF0gPSB7Ci0JCS8qCi0JCSAqIFBDSSBJRFNFTC9JTlRQSU4tPklOVExJTkUKLQkJICogQSAgICAgICBCICAgICAgIEMgICAgICAgRAotCQkgKi8KLQkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKLQkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKLQkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKLQkJe0lOVEEsIElOVEIsIElOVEMsIElOVER9LCAvKiBQQ0ktWCBTbG90ICovCi0JCXstMSwgICAtMSwgICAtMSwgICAtMX0sCi0JCXtJTlRDLCBJTlRDLCBJTlRDLCBJTlRDfSwgLyogR2lnRSAgKi8KLQkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKLQkJey0xLCAgIC0xLCAgIC0xLCAgIC0xfSwKLQl9OwotCi0JQlVHX09OKHBpbiA8IDEgfHwgcGluID4gNCk7Ci0KLQlyZXR1cm4gUENJX0lSUV9UQUJMRV9MT09LVVAoMSwgNyk7Ci19Ci0KLXN0YXRpYyBpbnQgaXE4MDMzMl9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKnN5cykKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQotCWlmKG5yICE9IDApCi0JCXJldHVybiAwOwotCi0JcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSAqIDIsIEdGUF9LRVJORUwpOwotCWlmICghcmVzKQotCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7Ci0KLQlyZXNbMF0uc3RhcnQgPSBJT1AzMzFfUENJX0xPV0VSX0lPX1ZBOwotCXJlc1swXS5lbmQgICA9IElPUDMzMV9QQ0lfVVBQRVJfSU9fVkE7Ci0JcmVzWzBdLm5hbWUgID0gIklRODAzMzIgUENJIEkvTyBTcGFjZSI7Ci0JcmVzWzBdLmZsYWdzID0gSU9SRVNPVVJDRV9JTzsKLQotCXJlc1sxXS5zdGFydCA9IElPUDMzMV9QQ0lfTE9XRVJfTUVNX1BBOwotCXJlc1sxXS5lbmQgICA9IElPUDMzMV9QQ0lfVVBQRVJfTUVNX1BBOwotCXJlc1sxXS5uYW1lICA9ICJJUTgwMzMyIFBDSSBNZW1vcnkgU3BhY2UiOwotCXJlc1sxXS5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOwotCi0JcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKTsKLQlyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgJnJlc1sxXSk7Ci0KLQlzeXMtPm1lbV9vZmZzZXQgPSBJT1AzMzFfUENJX01FTV9PRkZTRVQ7Ci0Jc3lzLT5pb19vZmZzZXQgID0gSU9QMzMxX1BDSV9JT19PRkZTRVQ7Ci0KLQlzeXMtPnJlc291cmNlWzBdID0gJnJlc1swXTsKLQlzeXMtPnJlc291cmNlWzFdID0gJnJlc1sxXTsKLQlzeXMtPnJlc291cmNlWzJdID0gTlVMTDsKLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgdm9pZCBpcTgwMzMyX3ByZWluaXQodm9pZCkKLXsKLQlpb3AzMzFfaW5pdCgpOwotfQotCi1zdGF0aWMgc3RydWN0IGh3X3BjaSBpcTgwMzMyX3BjaSBfX2luaXRkYXRhID0gewotCS5zd2l6emxlCT0gcGNpX3N0ZF9zd2l6emxlLAotCS5ucl9jb250cm9sbGVycyA9IDEsCi0JLnNldHVwCQk9IGlxODAzMzJfc2V0dXAsCi0JLnNjYW4JCT0gaW9wMzMxX3NjYW5fYnVzLAotCS5wcmVpbml0CT0gaXE4MDMzMl9wcmVpbml0LAotCS5tYXBfaXJxCT0gaXE4MDMzMl9tYXBfaXJxCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCBpcTgwMzMyX3BjaV9pbml0KHZvaWQpCi17Ci0JaWYgKG1hY2hpbmVfaXNfaXE4MDMzMigpKQotCQlwY2lfY29tbW9uX2luaXQoJmlxODAzMzJfcGNpKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKGlxODAzMzJfcGNpX2luaXQpOwotCi0KLQotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLWl4cDR4eC9jb21tb24uYyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCmluZGV4IDdjMjVkYmQuLjM1ZGQ4YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCisrKyBiL2FyY2gvYXJtL21hY2gtaXhwNHh4L2NvbW1vbi5jCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0yNTUsMTYgKzI1Niw2IEBACiAKICNkZWZpbmUgQ0xPQ0tfVElDS1NfUEVSX1VTRUMJKChDTE9DS19USUNLX1JBVEUgKyBVU0VDX1BFUl9TRUMvMikgLyBVU0VDX1BFUl9TRUMpCiAKLS8qIElSUXMgYXJlIGRpc2FibGVkIGJlZm9yZSBlbnRlcmluZyBoZXJlIGZyb20gZG9fZ2V0dGltZW9mZGF5KCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGl4cDR4eF9nZXR0aW1lb2Zmc2V0KHZvaWQpCi17Ci0JdTMyIGVsYXBzZWQ7Ci0KLQllbGFwc2VkID0gKklYUDRYWF9PU1RTIC0gbGFzdF9qaWZmeV90aW1lOwotCi0JcmV0dXJuIGVsYXBzZWQgLyBDTE9DS19USUNLU19QRVJfVVNFQzsKLX0KLQogc3RhdGljIGlycXJldHVybl90IGl4cDR4eF90aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKQEAgLTMwOSw3ICszMDAsNiBAQAogCiBzdHJ1Y3Qgc3lzX3RpbWVyIGl4cDR4eF90aW1lciA9IHsKIAkuaW5pdAkJPSBpeHA0eHhfdGltZXJfaW5pdCwKLQkub2Zmc2V0CQk9IGl4cDR4eF9nZXR0aW1lb2Zmc2V0LAogfTsKIAogc3RhdGljIHN0cnVjdCByZXNvdXJjZSBpeHA0NnhfaTJjX3Jlc291cmNlc1tdID0gewpAQCAtMzY1LDMgKzM1NSwyOSBAQAogCQkJaXhwNHh4X2V4cF9idXNfc2l6ZSA+PiAyMCk7CiB9CiAKK2N5Y2xlX3QgaXhwNHh4X2dldF9jeWNsZXModm9pZCkKK3sKKwlyZXR1cm4gKklYUDRYWF9PU1RTOworfQorCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIGNsb2Nrc291cmNlX2l4cDR4eCA9IHsKKwkubmFtZSAJCT0gIk9TVFMiLAorCS5yYXRpbmcJCT0gMjAwLAorCS5yZWFkCQk9IGl4cDR4eF9nZXRfY3ljbGVzLAorCS5tYXNrCQk9IENMT0NLU09VUkNFX01BU0soMzIpLAorCS5zaGlmdCAJCT0gMjAsCisJLmlzX2NvbnRpbnVvdXMgCT0gMSwKK307CisKK3Vuc2lnbmVkIGxvbmcgaXhwNHh4X3RpbWVyX2ZyZXEgPSBGUkVROworc3RhdGljIGludCBfX2luaXQgaXhwNHh4X2Nsb2Nrc291cmNlX2luaXQodm9pZCkKK3sKKwljbG9ja3NvdXJjZV9peHA0eHgubXVsdCA9CisJCWNsb2Nrc291cmNlX2h6Mm11bHQoaXhwNHh4X3RpbWVyX2ZyZXEsCisJCQkJICAgIGNsb2Nrc291cmNlX2l4cDR4eC5zaGlmdCk7CisJY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX2l4cDR4eCk7CisKKwlyZXR1cm4gMDsKK30KKworZGV2aWNlX2luaXRjYWxsKGl4cDR4eF9jbG9ja3NvdXJjZV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMgYi9hcmNoL2FybS9tYWNoLWl4cDR4eC9uc2x1Mi1zZXR1cC5jCmluZGV4IDc0OWEzMzcuLjE2MmMyNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtaXhwNHh4L25zbHUyLXNldHVwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1peHA0eHgvbnNsdTItc2V0dXAuYwpAQCAtMTU5LDYgKzE1OSw4IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBuc2x1Ml9pbml0KHZvaWQpCiB7CisJaXhwNHh4X3RpbWVyX2ZyZXEgPSBOU0xVMl9GUkVROworCiAJaXhwNHh4X3N5c19pbml0KCk7CiAKIAluc2x1Ml9mbGFzaF9yZXNvdXJjZS5zdGFydCA9IElYUDRYWF9FWFBfQlVTX0JBU0UoMCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtZnNhbXBsZS5jCmluZGV4IGM3NTNhM2MuLjYyZTQyYzdhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWZzYW1wbGUuYwpAQCAtMTcyLDkgKzE3MiwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEga3BfZGF0YSA9IHsKLQkucm93cwk9IDgsCi0JLmNvbHMJPSA4LAotCS5rZXltYXAgPSBmc2FtcGxlX2tleW1hcCwKKwkucm93cwkJPSA4LAorCS5jb2xzCQk9IDgsCisJLmtleW1hcAkJPSBmc2FtcGxlX2tleW1hcCwKKwkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoZnNhbXBsZV9rZXltYXApLAorCS5kZWxheQkJPSA0LAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Uga3BfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMi5jCmluZGV4IGNkM2EwNmQuLjZlMTEzMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDIuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgyLmMKQEAgLTE2NywxMCArMTY3LDEzIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBoMl9rcF9kYXRhID0gewotCS5yb3dzCT0gOCwKLQkuY29scwk9IDgsCi0JLmtleW1hcCA9IGgyX2tleW1hcCwKLQkucmVwCT0gMSwKKwkucm93cwkJPSA4LAorCS5jb2xzCQk9IDgsCisJLmtleW1hcAkJPSBoMl9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKGgyX2tleW1hcCksCisJLnJlcAkJPSAxLAorCS5kZWxheQkJPSA5LAorCS5kYm91bmNlCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGgyX2twX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaDMuYwppbmRleCA3YjIwNjExLi5mMjI1YTA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWgzLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1oMy5jCkBAIC0yNDcsMTAgKzI0NywxMyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgaDNfa3BfZGF0YSA9IHsKLQkucm93cwk9IDgsCi0JLmNvbHMJPSA4LAotCS5rZXltYXAgPSBoM19rZXltYXAsCi0JLnJlcAk9IDEsCisJLnJvd3MJCT0gOCwKKwkuY29scwkJPSA4LAorCS5rZXltYXAJCT0gaDNfa2V5bWFwLAorCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShoM19rZXltYXApLAorCS5yZXAJCT0gMSwKKwkuZGVsYXkJCT0gOSwKKwkuZGJvdW5jZQk9IDEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBoM19rcF9kZXZpY2UgPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1pbm5vdmF0b3IuYwppbmRleCA0Y2JjNjJkLi5jYjAwNTMwIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLWlubm92YXRvci5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtaW5ub3ZhdG9yLmMKQEAgLTE1OSw5ICsxNTksMTEgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgb21hcF9rcF9wbGF0Zm9ybV9kYXRhIGlubm92YXRvcl9rcF9kYXRhID0gewotCS5yb3dzCT0gOCwKLQkuY29scwk9IDgsCi0JLmtleW1hcCA9IGlubm92YXRvcl9rZXltYXAsCisJLnJvd3MJCT0gOCwKKwkuY29scwkJPSA4LAorCS5rZXltYXAJCT0gaW5ub3ZhdG9yX2tleW1hcCwKKwkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUoaW5ub3ZhdG9yX2tleW1hcCksCisJLmRlbGF5CQk9IDQsCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBpbm5vdmF0b3Jfa3BfZGV2aWNlID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1ub2tpYTc3MC5jCmluZGV4IDAyYjk4MGQuLmRiYzU1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtbm9raWE3NzAuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW5va2lhNzcwLmMKQEAgLTcxLDkgKzcxLDExIEBACiB9OwogCiBzdGF0aWMgc3RydWN0IG9tYXBfa3BfcGxhdGZvcm1fZGF0YSBub2tpYTc3MF9rcF9kYXRhID0gewotCS5yb3dzICAgPSA4LAotCS5jb2xzICAgPSA4LAotCS5rZXltYXAgPSBub2tpYTc3MF9rZXltYXAKKwkucm93cwkJPSA4LAorCS5jb2xzCQk9IDgsCisJLmtleW1hcAkJPSBub2tpYTc3MF9rZXltYXAsCisJLmtleW1hcHNpemUJPSBBUlJBWV9TSVpFKG5va2lhNzcwX2tleW1hcCkKKwkuZGVsYXkJCT0gNCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIG5va2lhNzcwX2twX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLW9zay5jCmluZGV4IGI3NDIyNjEuLjZiMDU2NDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtb3NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1vc2suYwpAQCAtMjY2LDkgKzI2NiwxMSBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgb3NrX2twX2RhdGEgPSB7Ci0JLnJvd3MJPSA4LAotCS5jb2xzCT0gOCwKLQkua2V5bWFwID0gKGludCAqKSBvc2tfa2V5bWFwLAorCS5yb3dzCQk9IDgsCisJLmNvbHMJCT0gOCwKKwkua2V5bWFwCQk9IChpbnQgKikgb3NrX2tleW1hcCwKKwkua2V5bWFwc2l6ZQk9IEFSUkFZX1NJWkUob3NrX2tleW1hcCksCisJLmRlbGF5CQk9IDksCiB9OwogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIG9zazU5MTJfa3BfcmVzb3VyY2VzW10gPSB7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL2JvYXJkLXBlcnNldXMyLmMKaW5kZXggNjRiNDVkOC4uZmE0YmU5NiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMS9ib2FyZC1wZXJzZXVzMi5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDEvYm9hcmQtcGVyc2V1czIuYwpAQCAtMTcxLDkgKzE3MSwxMiBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEga3BfZGF0YSA9IHsKLQkucm93cwk9IDgsCi0JLmNvbHMJPSA4LAotCS5rZXltYXAgPSBwMl9rZXltYXAsCisJLnJvd3MJCT0gOCwKKwkuY29scwkJPSA4LAorCS5rZXltYXAJCT0gcDJfa2V5bWFwLAorCS5rZXltYXBzaXplCT0gQVJSQVlfU0laRShwMl9rZXltYXApLAorCS5kZWxheQkJPSA0LAorCS5kYm91bmNlCT0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGtwX2RldmljZSA9IHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYyBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suYwppbmRleCBmMTk1OGU4Li42Mzg0OTBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgogCiAjaW5jbHVkZSA8YXNtL2FyY2gvY3B1Lmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvdXNiLmg+CkBAIC01ODYsNzcgKzU4Nyw1MyBAQAogICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogI2lmZGVmIENPTkZJR19PTUFQX1JFU0VUX0NMT0NLUwotLyoKLSAqIFJlc2V0cyBzb21lIGNsb2NrcyB0aGF0IG1heSBiZSBsZWZ0IG9uIGZyb20gYm9vdGxvYWRlciwKLSAqIGJ1dCBsZWF2ZXMgc2VyaWFsIGNsb2NrcyBvbi4gU2VlIGFsc28gb21hcF9sYXRlX2Nsa19yZXNldCgpLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgb21hcDFfZWFybHlfY2xrX3Jlc2V0KHZvaWQpCi17Ci0JLy9vbWFwX3dyaXRlbCgweDMgPDwgMjksIE1PRF9DT05GX0NUUkxfMCk7Ci19CiAKLXN0YXRpYyBpbnQgX19pbml0IG9tYXAxX2xhdGVfY2xrX3Jlc2V0KHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDFfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsaykKIHsKLQkvKiBUdXJuIG9mZiBhbGwgdW51c2VkIGNsb2NrcyAqLwotCXN0cnVjdCBjbGsgKnA7CiAJX191MzIgcmVndmFsMzI7CiAKLQkvKiBVU0JfUkVRX0VOIHdpbGwgYmUgZGlzYWJsZWQgbGF0ZXIgaWYgbmVjZXNzYXJ5ICh1c2JfZGNfY2spICovCi0JcmVndmFsMzIgPSBvbWFwX3JlYWR3KFNPRlRfUkVRX1JFRykgJiAoMSA8PCA0KTsKLQlvbWFwX3dyaXRldyhyZWd2YWwzMiwgU09GVF9SRVFfUkVHKTsKLQlvbWFwX3dyaXRldygwLCBTT0ZUX1JFUV9SRUcyKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmNsb2Nrcywgbm9kZSkgewotCQlpZiAocC0+dXNlY291bnQgPiAwIHx8IChwLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAotCQkJcC0+ZW5hYmxlX3JlZyA9PSAwKQotCQkJY29udGludWU7Ci0KLQkJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCi0JCSAqIGhhcyBub3QgZW5hYmxlZCBhbnkgRFNQIGNsb2NrcyAqLwotCQlpZiAoKHUzMilwLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJTa2lwcGluZyByZXNldCBjaGVjayBmb3IgRFNQIGRvbWFpbiAiCi0JCQkgICAgICAgImNsb2NrIFwiJXNcIlxuIiwgcC0+bmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIElzIHRoZSBjbG9jayBhbHJlYWR5IGRpc2FibGVkPyAqLwotCQlpZiAocC0+ZmxhZ3MgJiBFTkFCTEVfUkVHXzMyQklUKSB7Ci0JCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChwLT5lbmFibGVfcmVnKTsKLQkJCWVsc2UKLQkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZGwocC0+ZW5hYmxlX3JlZyk7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocC0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCi0JCQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkdyhwLT5lbmFibGVfcmVnKTsKLQkJCWVsc2UKLQkJCQlyZWd2YWwzMiA9IG9tYXBfcmVhZHcocC0+ZW5hYmxlX3JlZyk7Ci0JCX0KLQotCQlpZiAoKHJlZ3ZhbDMyICYgKDEgPDwgcC0+ZW5hYmxlX2JpdCkpID09IDApCi0JCQljb250aW51ZTsKLQotCQkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQotCQkgKiBoYXMgYXNrZWQgZm9yIGl0cyBhY3RpdmF0aW9uLiAqLwotCQlpZiAocCA9PSAmdGMyX2NrICAgICAgICAgLy8gRklYOiBwbS5jIChTUkFNKSwgQ0NQLCBDYW1lcmEKLQkJICAgIHx8IHAgPT0gJmNrX2RwbGwxb3V0LmNsayAvLyBGSVg6IFNvU1NJLCBTU1IKLQkJICAgIHx8IHAgPT0gJmFybV9ncGlvX2NrIC8vIEZJWDogR1BJTyBjb2RlIGZvciAxNTEwCi0JCSAgICApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIkZJWE1FOiBDbG9jayBcIiVzXCIgc2VlbXMgdW51c2VkXG4iLAotCQkJICAgICAgIHAtPm5hbWUpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIi4uLiAiLCBwLT5uYW1lKTsKLQkJcC0+ZGlzYWJsZShwKTsKLQkJcHJpbnRrKCIgZG9uZVxuIik7CisJLyogQ2xvY2tzIGluIHRoZSBEU1AgZG9tYWluIG5lZWQgYXBpX2NrLiBKdXN0IGFzc3VtZSBib290bG9hZGVyCisJICogaGFzIG5vdCBlbmFibGVkIGFueSBEU1AgY2xvY2tzICovCisJaWYgKCh1MzIpY2xrLT5lbmFibGVfcmVnID09IERTUF9JRExFQ1QyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIlNraXBwaW5nIHJlc2V0IGNoZWNrIGZvciBEU1AgZG9tYWluICIKKwkJICAgICAgICJjbG9jayBcIiVzXCJcbiIsIGNsay0+bmFtZSk7CisJCXJldHVybjsKIAl9CiAKLQlyZXR1cm4gMDsKKwkvKiBJcyB0aGUgY2xvY2sgYWxyZWFkeSBkaXNhYmxlZD8gKi8KKwlpZiAoY2xrLT5mbGFncyAmIEVOQUJMRV9SRUdfMzJCSVQpIHsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJCQllbHNlCisJCQkJcmVndmFsMzIgPSBvbWFwX3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJfSBlbHNlIHsKKwkJaWYgKGNsay0+ZmxhZ3MgJiBWSVJUVUFMX0lPX0FERFJFU1MpCisJCQlyZWd2YWwzMiA9IF9fcmF3X3JlYWR3KGNsay0+ZW5hYmxlX3JlZyk7CisJCWVsc2UKKwkJCXJlZ3ZhbDMyID0gb21hcF9yZWFkdyhjbGstPmVuYWJsZV9yZWcpOworCX0KKworCWlmICgocmVndmFsMzIgJiAoMSA8PCBjbGstPmVuYWJsZV9iaXQpKSA9PSAwKQorCQlyZXR1cm47CisKKwkvKiBGSVhNRTogVGhpcyBjbG9jayBzZWVtcyB0byBiZSBuZWNlc3NhcnkgYnV0IG5vLW9uZQorCSAqIGhhcyBhc2tlZCBmb3IgaXRzIGFjdGl2YXRpb24uICovCisJaWYgKGNsayA9PSAmdGMyX2NrCQkvLyBGSVg6IHBtLmMgKFNSQU0pLCBDQ1AsIENhbWVyYQorCSAgICB8fCBjbGsgPT0gJmNrX2RwbGwxb3V0LmNsawkvLyBGSVg6IFNvU1NJLCBTU1IKKwkgICAgfHwgY2xrID09ICZhcm1fZ3Bpb19jawkvLyBGSVg6IEdQSU8gY29kZSBmb3IgMTUxMAorCQkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRklYTUU6IENsb2NrIFwiJXNcIiBzZWVtcyB1bnVzZWRcbiIsCisJCSAgICAgICBjbGstPm5hbWUpOworCQlyZXR1cm47CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiRGlzYWJsaW5nIHVudXNlZCBjbG9jayBcIiVzXCIuLi4gIiwgY2xrLT5uYW1lKTsKKwljbGstPmRpc2FibGUoY2xrKTsKKwlwcmludGsoIiBkb25lXG4iKTsKIH0KLWxhdGVfaW5pdGNhbGwob21hcDFfbGF0ZV9jbGtfcmVzZXQpOwogCiAjZWxzZQotI2RlZmluZSBvbWFwMV9lYXJseV9jbGtfcmVzZXQoKQl7fQorI2RlZmluZSBvbWFwMV9jbGtfZGlzYWJsZV91bnVzZWQJTlVMTAogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgY2xrX2Z1bmN0aW9ucyBvbWFwMV9jbGtfZnVuY3Rpb25zID0gewpAQCAtNjY0LDYgKzY0MSw3IEBACiAJLmNsa19kaXNhYmxlCQk9IG9tYXAxX2Nsa19kaXNhYmxlLAogCS5jbGtfcm91bmRfcmF0ZQkJPSBvbWFwMV9jbGtfcm91bmRfcmF0ZSwKIAkuY2xrX3NldF9yYXRlCQk9IG9tYXAxX2Nsa19zZXRfcmF0ZSwKKwkuY2xrX2Rpc2FibGVfdW51c2VkCT0gb21hcDFfY2xrX2Rpc2FibGVfdW51c2VkLAogfTsKIAogaW50IF9faW5pdCBvbWFwMV9jbGtfaW5pdCh2b2lkKQpAQCAtNjcxLDggKzY0OSwxMyBAQAogCXN0cnVjdCBjbGsgKiogY2xrcDsKIAljb25zdCBzdHJ1Y3Qgb21hcF9jbG9ja19jb25maWcgKmluZm87CiAJaW50IGNyeXN0YWxfdHlwZSA9IDA7IC8qIERlZmF1bHQgMTIgTUh6ICovCisJdTMyIHJlZzsKIAotCW9tYXAxX2Vhcmx5X2Nsa19yZXNldCgpOworCS8qIFVTQl9SRVFfRU4gd2lsbCBiZSBkaXNhYmxlZCBsYXRlciBpZiBuZWNlc3NhcnkgKHVzYl9kY19jaykgKi8KKwlyZWcgPSBvbWFwX3JlYWR3KFNPRlRfUkVRX1JFRykgJiAoMSA8PCA0KTsKKwlvbWFwX3dyaXRldyhyZWcsIFNPRlRfUkVRX1JFRyk7CisJb21hcF93cml0ZXcoMCwgU09GVF9SRVFfUkVHMik7CisKIAljbGtfaW5pdCgmb21hcDFfY2xrX2Z1bmN0aW9ucyk7CiAKIAkvKiBCeSBkZWZhdWx0IGFsbCBpZGxlY3QxIGNsb2NrcyBhcmUgYWxsb3dlZCB0byBpZGxlICovCkBAIC03NzIsNiArNzU1LDEyIEBACiAJb21hcF93cml0ZXcob21hcF9yZWFkdyhPTUFQNzMwX1BDQ19VUExEX0NUUkwpICYgfjB4MSwgT01BUDczMF9QQ0NfVVBMRF9DVFJMKTsKICNlbmRpZgogCisJLyogQW1zdHJhZCBEZWx0YSB3YW50cyBCQ0xLIGhpZ2ggd2hlbiBpbmFjdGl2ZSAqLworCWlmIChtYWNoaW5lX2lzX2Ftc19kZWx0YSgpKQorCQlvbWFwX3dyaXRlbChvbWFwX3JlYWRsKFVMUERfQ0xPQ0tfQ1RSTCkgfAorCQkJCSgxIDw8IFNEV19NQ0xLX0lOVl9CSVQpLAorCQkJCVVMUERfQ0xPQ0tfQ1RSTCk7CisKIAkvKiBUdXJuIG9mZiBEU1AgYW5kIEFSTV9USU1YTy4gTWFrZSBzdXJlIEFSTV9JTlRIQ0sgaXMgbm90IGRpdmlkZWQgKi8KIAkvKiAob24gNzMwLCBiaXQgMTMgbXVzdCBub3QgYmUgY2xlYXJlZCkgKi8KIAlpZiAoY3B1X2lzX29tYXA3MzAoKSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDEvY2xvY2suaAppbmRleCBiN2M2ODgxLi5mN2RmMDAyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAxL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9jbG9jay5oCkBAIC04OSw2ICs4OSw3IEBACiAjZGVmaW5lIEVOX0RTUFRJTUNLCTUKIAogLyogVmFyaW91cyByZWdpc3RlciBkZWZpbmVzIGZvciBjbG9jayBjb250cm9scyBzY2F0dGVyZWQgYXJvdW5kIE9NQVAgY2hpcCAqLworI2RlZmluZSBTRFdfTUNMS19JTlZfQklUCTIJLyogSW4gVUxQRF9DTEtDX0NUUkwgKi8KICNkZWZpbmUgVVNCX01DTEtfRU5fQklUCQk0CS8qIEluIFVMUERfQ0xLQ19DVFJMICovCiAjZGVmaW5lIFVTQl9IT1NUX0hIQ19VSE9TVF9FTgk5CS8qIEluIE1PRF9DT05GX0NUUkxfMCAqLwogI2RlZmluZSBTV0RfVUxQRF9QTExfQ0xLX1JFUQkxCS8qIEluIFNXRF9DTEtfRElWX0NUUkxfU0VMICovCkBAIC03NDEsNiArNzQyLDE4IEBACiAJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgY2xrIGkyY19pY2sgPSB7CisJLm5hbWUJCT0gImkyY19pY2siLAorCS5pZAkJPSAxLAorCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMTZYWCB8CisJCQkgIFZJUlRVQUxfQ0xPQ0sgfCBDTE9DS19OT19JRExFX1BBUkVOVCB8CisJCQkgIEFMV0FZU19FTkFCTEVELAorCS5wYXJlbnQJCT0gJmFybXBlcl9jay5jbGssCisJLnJlY2FsYwkJPSAmZm9sbG93cGFyZW50X3JlY2FsYywKKwkuZW5hYmxlCQk9ICZvbWFwMV9jbGtfZW5hYmxlX2dlbmVyaWMsCisJLmRpc2FibGUJPSAmb21hcDFfY2xrX2Rpc2FibGVfZ2VuZXJpYywKK307CisKIHN0YXRpYyBzdHJ1Y3QgY2xrICogb25jaGlwX2Nsa3NbXSA9IHsKIAkvKiBub24tVUxQRCBjbG9ja3MgKi8KIAkmY2tfcmVmLApAQCAtNzkwLDYgKzgwMyw3IEBACiAJLyogVmlydHVhbCBjbG9ja3MgKi8KIAkmdmlydHVhbF9ja19tcHUsCiAJJmkyY19mY2ssCisJJmkyY19pY2ssCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMgYi9hcmNoL2FybS9tYWNoLW9tYXAxL211eC5jCmluZGV4IGZhNzRlZjcuLjU0MzIzMzUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDEvbXV4LmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMS9tdXguYwpAQCAtMTk5LDYgKzE5OSwxNyBAQAogTVVYX0NGRygiUDE1XzE2MTBfVVdJUkVfQ1MzIiwJIDgsICAgMTIsICAgIDEsCSAgMSwgIDIyLCAgIDAsCSAgMSwJIDEsICAxKQogTVVYX0NGRygiTjE1XzE2MTBfVVdJUkVfQ1MxIiwJIDcsICAgMTgsICAgIDIsCSAgMSwgIDE0LCAgIDAsCSBOQSwJIDAsICAxKQogCisvKiBPTUFQLTE2MTAgU1BJICovCitNVVhfQ0ZHKCJVMTlfMTYxMF9TUElGX1NDSyIsCSA3LCAgICAyMSwgICA2LAkgIDEsICAxNSwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlUxOF8xNjEwX1NQSUZfRElOIiwJIDgsICAgIDAsICAgIDYsCSAgMSwgIDE4LCAgIDEsCSAgMSwJIDAsICAxKQorTVVYX0NGRygiUDIwXzE2MTBfU1BJRl9ESU4iLAkgNiwgICAgMjcsICAgNCwgICAxLCAgIDcsICAgMSwgICAgMSwgICAgIDAsICAxKQorTVVYX0NGRygiVzIxXzE2MTBfU1BJRl9ET1VUIiwJIDgsICAgIDMsICAgIDYsCSAgMSwgIDE5LCAgIDAsCSAgMSwJIDAsICAxKQorTVVYX0NGRygiUjE4XzE2MTBfU1BJRl9ET1VUIiwJIDcsICAgIDksICAgIDMsCSAgMSwgIDExLCAgIDAsCSAgMSwJIDAsICAxKQorTVVYX0NGRygiTjE0XzE2MTBfU1BJRl9DUzAiLAkgOCwgICAgOSwgICAgNiwJICAxLCAgMjEsICAgMCwJICAxLAkgMSwgIDEpCitNVVhfQ0ZHKCJOMTVfMTYxMF9TUElGX0NTMSIsCSA3LCAgICAxOCwgICA2LAkgIDEsICAxNCwgICAwLAkgIDEsCSAxLCAgMSkKK01VWF9DRkcoIlQxOV8xNjEwX1NQSUZfQ1MyIiwJIDcsICAgIDE1LCAgIDQsCSAgMSwgIDEzLCAgIDAsCSAgMSwJIDEsICAxKQorTVVYX0NGRygiUDE1XzE2MTBfU1BJRl9DUzMiLAkgOCwgICAgMTIsICAgMywJICAxLCAgMjIsICAgMCwJICAxLAkgMSwgIDEpCisKIC8qIE9NQVAtMTYxMCBGbGFzaCAqLwogTVVYX0NGRygiTDNfMTYxMF9GTEFTSF9DUzJCX09FIiwxMCwgICAgNiwgICAgMSwJIE5BLCAgIDAsICAgMCwJIE5BLAkgMCwgIDEpCiBNVVhfQ0ZHKCJNOF8xNjEwX0ZMQVNIX0NTMkJfV0UiLDEwLCAgICAzLCAgICAxLAkgTkEsICAgMCwgICAwLAkgTkEsCSAwLCAgMSkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtYXBvbGxvbi5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKaW5kZXggNzk5M2I3Yi4uMmRiNmI3MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1hcG9sbG9uLmMKQEAgLTE2Niw4ICsxNjYsOCBAQAogCiBzdGF0aWMgc3RydWN0IG9tYXBfbW1jX2NvbmZpZyBhcG9sbG9uX21tY19jb25maWcgX19pbml0ZGF0YSA9IHsKIAkubW1jIFswXSA9IHsKLQkJLmVuYWJsZWQgCT0gMCwKLQkJLndpcmU0CQk9IDAsCisJCS5lbmFibGVkIAk9IDEsCisJCS53aXJlNAkJPSAxLAogCQkud3BfcGluCQk9IC0xLAogCQkucG93ZXJfcGluCT0gLTEsCiAJCS5zd2l0Y2hfcGluCT0gLTEsCkBAIC0yNTcsNiArMjU3LDkgQEAKIAkvKiBSRVZJU0lUOiB3aGVyZSdzIHRoZSBjb3JyZWN0IHBsYWNlICovCiAJb21hcF9jZmdfcmVnKFcxOV8yNFhYX1NZU19OSVJRKTsKIAorCS8qIFVzZSBJbnRlcmFsIGxvb3AtYmFjayBpbiBNTUMvU0RJTyBNb2R1bGUgSW5wdXQgQ2xvY2sgc2VsZWN0aW9uICovCisJQ09OVFJPTF9ERVZDT05GIHw9ICgxIDw8IDI0KTsKKwogCS8qCiAgCSAqIE1ha2Ugc3VyZSB0aGUgc2VyaWFsIHBvcnRzIGFyZSBtdXhlZCBvbiBhdCB0aGlzIHBvaW50LgogCSAqIFlvdSBoYXZlIHRvIG11eCB0aGVtIG9mZiBpbiBkZXZpY2UgZHJpdmVycyBsYXRlciBvbgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ib2FyZC1oNC5jCmluZGV4IDQ5MzNmY2UuLjk5NmFlZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvYm9hcmQtaDQuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2JvYXJkLWg0LmMKQEAgLTI0NSw2ICsyNDUsNyBAQAogCS5yb3dzCQk9IDYsCiAJLmNvbHMJCT0gNywKIAkua2V5bWFwIAk9IGg0X2tleW1hcCwKKwkua2V5bWFwc2l6ZSAJPSBBUlJBWV9TSVpFKGg0X2tleW1hcCksCiAJLnJlcAkJPSAxLAogCS5yb3dfZ3Bpb3MgCT0gcm93X2dwaW9zLAogCS5jb2xfZ3Bpb3MgCT0gY29sX2dwaW9zLApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5jCmluZGV4IGQxYjY0OGEuLjBkZTIwMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmMKQEAgLTMyLDEwICszMiwxNCBAQAogI2luY2x1ZGUgIm1lbW9yeS5oIgogI2luY2x1ZGUgImNsb2NrLmgiCiAKKyN1bmRlZiBERUJVRworCiAvLyNkZWZpbmUgRE9XTl9WQVJJQUJMRV9EUExMIDEJCQkvKiBFeHBlcmltZW50YWwgKi8KIAogc3RhdGljIHN0cnVjdCBwcmNtX2NvbmZpZyAqY3Vycl9wcmNtX3NldDsKIHN0YXRpYyB1MzIgY3Vycl9wZXJmX2xldmVsID0gUFJDTV9GVUxMX1NQRUVEOworc3RhdGljIHN0cnVjdCBjbGsgKnZjbGs7CitzdGF0aWMgc3RydWN0IGNsayAqc2NsazsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBPbWFwMiBzcGVjaWZpYyBjbG9jayBmdW5jdGlvbnMKQEAgLTc5LDYgKzgzLDE0IEBACiAJcHJvcGFnYXRlX3JhdGUoY2xrKTsKIH0KIAorc3RhdGljIHZvaWQgb21hcDJfc2V0X29zY19jayhpbnQgZW5hYmxlKQoreworCWlmIChlbmFibGUpCisJCVBSQ01fQ0xLU1JDX0NUUkwgJj0gfigweDMgPDwgMyk7CisJZWxzZQorCQlQUkNNX0NMS1NSQ19DVFJMIHw9IDB4MyA8PCAzOworfQorCiAvKiBFbmFibGUgYW4gQVBMTCBpZiBvZmYgKi8KIHN0YXRpYyB2b2lkIG9tYXAyX2Nsa19maXhlZF9lbmFibGUoc3RydWN0IGNsayAqY2xrKQogewpAQCAtMTAxLDE0ICsxMTMsNTYgQEAKIAllbHNlIGlmIChjbGsgPT0gJmFwbGw1NF9jaykKIAkJY3ZhbCA9ICgxIDw8IDYpOwogCi0Jd2hpbGUgKCFDTV9JRExFU1RfQ0tHRU4gJiBjdmFsKSB7CQkvKiBXYWl0IGZvciBsb2NrICovCisJd2hpbGUgKCEoQ01fSURMRVNUX0NLR0VOICYgY3ZhbCkpIHsJCS8qIFdhaXQgZm9yIGxvY2sgKi8KIAkJKytpOwogCQl1ZGVsYXkoMSk7Ci0JCWlmIChpID09IDEwMDAwMCkKKwkJaWYgKGkgPT0gMTAwMDAwKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkNsb2NrICVzIGRpZG4ndCBsb2NrXG4iLCBjbGstPm5hbWUpOwogCQkJYnJlYWs7CisJCX0KIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG9tYXAyX2Nsa193YWl0X3JlYWR5KHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1bnNpZ25lZCBsb25nIHJlZywgb3RoZXJfcmVnLCBzdF9yZWc7CisJdTMyIGJpdDsKKwlpbnQgaTsKKworCXJlZyA9ICh1bnNpZ25lZCBsb25nKSBjbGstPmVuYWJsZV9yZWc7CisJaWYgKHJlZyA9PSAodW5zaWduZWQgbG9uZykgJkNNX0ZDTEtFTjFfQ09SRSB8fAorCSAgICByZWcgPT0gKHVuc2lnbmVkIGxvbmcpICZDTV9GQ0xLRU4yX0NPUkUpCisJCW90aGVyX3JlZyA9IChyZWcgJiB+MHhmMCkgfCAweDEwOworCWVsc2UgaWYgKHJlZyA9PSAodW5zaWduZWQgbG9uZykgJkNNX0lDTEtFTjFfQ09SRSB8fAorCQkgcmVnID09ICh1bnNpZ25lZCBsb25nKSAmQ01fSUNMS0VOMl9DT1JFKQorCQlvdGhlcl9yZWcgPSAocmVnICYgfjB4ZjApIHwgMHgwMDsKKwllbHNlCisJCXJldHVybjsKKworCS8qIE5vIGNoZWNrIGZvciBEU1Mgb3IgY2FtIGNsb2NrcyAqLworCWlmICgocmVnICYgMHgwZikgPT0gMCkgeworCQlpZiAoY2xrLT5lbmFibGVfYml0IDw9IDEgfHwgY2xrLT5lbmFibGVfYml0ID09IDMxKQorCQkJcmV0dXJuOworCX0KKworCS8qIENoZWNrIGlmIGJvdGggZnVuY3Rpb25hbCBhbmQgaW50ZXJmYWNlIGNsb2NrcworCSAqIGFyZSBydW5uaW5nLiAqLworCWJpdCA9IDEgPDwgY2xrLT5lbmFibGVfYml0OworCWlmICghKF9fcmF3X3JlYWRsKG90aGVyX3JlZykgJiBiaXQpKQorCQlyZXR1cm47CisJc3RfcmVnID0gKG90aGVyX3JlZyAmIH4weGYwKSB8IDB4MjA7CisJaSA9IDA7CisJd2hpbGUgKCEoX19yYXdfcmVhZGwoc3RfcmVnKSAmIGJpdCkpIHsKKwkJaSsrOworCQlpZiAoaSA9PSAxMDAwMDApIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVGltZW91dCBlbmFibGluZyBjbG9jayAlc1xuIiwgY2xrLT5uYW1lKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWlmIChpKQorCQlwcl9kZWJ1ZygiQ2xvY2sgJXMgc3RhYmxlIGFmdGVyICVkIGxvb3BzXG4iLCBjbGstPm5hbWUsIGkpOworfQorCiAvKiBFbmFibGVzIGNsb2NrIHdpdGhvdXQgY29uc2lkZXJpbmcgcGFyZW50IGRlcGVuZGVuY2llcyBvciB1c2UgY291bnQKICAqIFJFVklTSVQ6IE1heWJlIGNoYW5nZSB0aGlzIHRvIHVzZSBjbGstPmVuYWJsZSBsaWtlIG9uIG9tYXAxPwogICovCkBAIC0xMTksNiArMTczLDExIEBACiAJaWYgKGNsay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkKIAkJcmV0dXJuIDA7CiAKKwlpZiAodW5saWtlbHkoY2xrID09ICZvc2NfY2spKSB7CisJCW9tYXAyX3NldF9vc2NfY2soMSk7CisJCXJldHVybiAwOworCX0KKwogCWlmICh1bmxpa2VseShjbGstPmVuYWJsZV9yZWcgPT0gMCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjbG9jay5jOiBFbmFibGUgZm9yICVzIHdpdGhvdXQgZW5hYmxlIGNvZGVcbiIsCiAJCSAgICAgICBjbGstPm5hbWUpOwpAQCAtMTMzLDYgKzE5Miw5IEBACiAJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjbGstPmVuYWJsZV9yZWcpOwogCXJlZ3ZhbDMyIHw9ICgxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CiAJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCXdtYigpOworCisJb21hcDJfY2xrX3dhaXRfcmVhZHkoY2xrKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTU1LDYgKzIxNywxMSBAQAogewogCXUzMiByZWd2YWwzMjsKIAorCWlmICh1bmxpa2VseShjbGsgPT0gJm9zY19jaykpIHsKKwkJb21hcDJfc2V0X29zY19jaygwKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChjbGstPmVuYWJsZV9yZWcgPT0gMCkKIAkJcmV0dXJuOwogCkBAIC0xNjYsNiArMjMzLDcgQEAKIAlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CiAJcmVndmFsMzIgJj0gfigxIDw8IGNsay0+ZW5hYmxlX2JpdCk7CiAJX19yYXdfd3JpdGVsKHJlZ3ZhbDMyLCBjbGstPmVuYWJsZV9yZWcpOworCXdtYigpOwogfQogCiBzdGF0aWMgaW50IG9tYXAyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQpAQCAtNjk1LDEyICs3NjMsMTQgQEAKIAkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZyk7CiAJCXJlZ192YWwgJj0gfihmaWVsZF9tYXNrIDw8IGRpdl9vZmYpOwogCQlyZWdfdmFsIHw9IChmaWVsZF92YWwgPDwgZGl2X29mZik7Ci0KIAkJX19yYXdfd3JpdGVsKHJlZ192YWwsIHJlZyk7CisJCXdtYigpOwogCQljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIGZpZWxkX3ZhbDsKIAotCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKQorCQlpZiAoY2xrLT5mbGFncyAmIERFTEFZRURfQVBQKSB7CiAJCQlfX3Jhd193cml0ZWwoMHgxLCAodm9pZCBfX2lvbWVtICopJlBSQ01fQ0xLQ0ZHX0NUUkwpOworCQkJd21iKCk7CisJCX0KIAkJcmV0ID0gMDsKIAl9IGVsc2UgaWYgKGNsay0+c2V0X3JhdGUgIT0gMCkKIAkJcmV0ID0gY2xrLT5zZXRfcmF0ZShjbGssIHJhdGUpOwpAQCAtODM2LDEwICs5MDYsMTIgQEAKIAkJcmVnX3ZhbCA9IF9fcmF3X3JlYWRsKHJlZykgJiB+KGZpZWxkX21hc2sgPDwgc3JjX29mZik7CiAJCXJlZ192YWwgfD0gKGZpZWxkX3ZhbCA8PCBzcmNfb2ZmKTsKIAkJX19yYXdfd3JpdGVsKHJlZ192YWwsIHJlZyk7CisJCXdtYigpOwogCi0JCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFApCisJCWlmIChjbGstPmZsYWdzICYgREVMQVlFRF9BUFApIHsKIAkJCV9fcmF3X3dyaXRlbCgweDEsICh2b2lkIF9faW9tZW0gKikmUFJDTV9DTEtDRkdfQ1RSTCk7Ci0KKwkJCXdtYigpOworCQl9CiAJCWlmIChjbGstPnVzZWNvdW50ID4gMCkKIAkJCV9vbWFwMl9jbGtfZW5hYmxlKGNsayk7CiAKQEAgLTk1MywxMiArMTAyNSwyOSBAQAogICogT21hcDIgY2xvY2sgcmVzZXQgYW5kIGluaXQgZnVuY3Rpb25zCiAgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCitzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkKHN0cnVjdCBjbGsgKmNsaykKK3sKKwl1MzIgcmVndmFsMzI7CisKKwlyZWd2YWwzMiA9IF9fcmF3X3JlYWRsKGNsay0+ZW5hYmxlX3JlZyk7CisJaWYgKChyZWd2YWwzMiAmICgxIDw8IGNsay0+ZW5hYmxlX2JpdCkpID09IDApCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIkRpc2FibGluZyB1bnVzZWQgY2xvY2sgXCIlc1wiXG4iLCBjbGstPm5hbWUpOworCV9vbWFwMl9jbGtfZGlzYWJsZShjbGspOworfQorI2Vsc2UKKyNkZWZpbmUgb21hcDJfY2xrX2Rpc2FibGVfdW51c2VkCU5VTEwKKyNlbmRpZgorCiBzdGF0aWMgc3RydWN0IGNsa19mdW5jdGlvbnMgb21hcDJfY2xrX2Z1bmN0aW9ucyA9IHsKIAkuY2xrX2VuYWJsZQkJPSBvbWFwMl9jbGtfZW5hYmxlLAogCS5jbGtfZGlzYWJsZQkJPSBvbWFwMl9jbGtfZGlzYWJsZSwKIAkuY2xrX3JvdW5kX3JhdGUJCT0gb21hcDJfY2xrX3JvdW5kX3JhdGUsCiAJLmNsa19zZXRfcmF0ZQkJPSBvbWFwMl9jbGtfc2V0X3JhdGUsCiAJLmNsa19zZXRfcGFyZW50CQk9IG9tYXAyX2Nsa19zZXRfcGFyZW50LAorCS5jbGtfZGlzYWJsZV91bnVzZWQJPSBvbWFwMl9jbGtfZGlzYWJsZV91bnVzZWQsCiB9OwogCiBzdGF0aWMgdm9pZCBfX2luaXQgb21hcDJfZ2V0X2NyeXN0YWxfcmF0ZShzdHJ1Y3QgY2xrICpvc2MsIHN0cnVjdCBjbGsgKnN5cykKQEAgLTk4NCwyNyArMTA3MywxOSBAQAogCXN5cy0+cmF0ZSA9IHNjbGs7CiB9CiAKLSNpZmRlZiBDT05GSUdfT01BUF9SRVNFVF9DTE9DS1MKLXN0YXRpYyB2b2lkIF9faW5pdCBvbWFwMl9kaXNhYmxlX3VudXNlZF9jbG9ja3Modm9pZCkKKy8qCisgKiBTZXQgY2xvY2tzIGZvciBieXBhc3MgbW9kZSBmb3IgcmVib290IHRvIHdvcmsuCisgKi8KK3ZvaWQgb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCh2b2lkKQogewotCXN0cnVjdCBjbGsgKmNrOwotCXUzMiByZWd2YWwzMjsKKwl1MzIgcmF0ZTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2ssICZjbG9ja3MsIG5vZGUpIHsKLQkJaWYgKGNrLT51c2Vjb3VudCA+IDAgfHwgKGNrLT5mbGFncyAmIEFMV0FZU19FTkFCTEVEKSB8fAotCQkJY2stPmVuYWJsZV9yZWcgPT0gMCkKLQkJCWNvbnRpbnVlOworCWlmICh2Y2xrID09IE5VTEwgfHwgc2NsayA9PSBOVUxMKQorCQlyZXR1cm47CiAKLQkJcmVndmFsMzIgPSBfX3Jhd19yZWFkbChjay0+ZW5hYmxlX3JlZyk7Ci0JCWlmICgocmVndmFsMzIgJiAoMSA8PCBjay0+ZW5hYmxlX2JpdCkpID09IDApCi0JCQljb250aW51ZTsKLQotCQlwcmludGsoS0VSTl9JTkZPICJEaXNhYmxpbmcgdW51c2VkIGNsb2NrIFwiJXNcIlxuIiwgY2stPm5hbWUpOwotCQlfb21hcDJfY2xrX2Rpc2FibGUoY2spOwotCX0KKwlyYXRlID0gY2xrX2dldF9yYXRlKHNjbGspOworCWNsa19zZXRfcmF0ZSh2Y2xrLCByYXRlKTsKIH0KLWxhdGVfaW5pdGNhbGwob21hcDJfZGlzYWJsZV91bnVzZWRfY2xvY2tzKTsKLSNlbmRpZgogCiAvKgogICogU3dpdGNoIHRoZSBNUFUgcmF0ZSBpZiBzcGVjaWZpZWQgb24gY21kbGluZS4KQEAgLTEwNzcsOCArMTE1OCwyNyBAQAogCSAqLwogCWNsa19lbmFibGUoJnN5bmNfMzJrX2ljayk7CiAJY2xrX2VuYWJsZSgmb21hcGN0cmxfaWNrKTsKKworCS8qIEZvcmNlIHRoZSBBUExMcyBhY3RpdmUgZHVyaW5nIGJvb3R1cCB0byBhdm9pZCBkaXNhYmxpbmcgYW5kCisJICogZW5hYmxpbmcgdGhlbSB1bm5lY2Vzc2FyaWx5LiAqLworCWNsa19lbmFibGUoJmFwbGw5Nl9jayk7CisJY2xrX2VuYWJsZSgmYXBsbDU0X2NrKTsKKwogCWlmIChjcHVfaXNfb21hcDI0MzAoKSkKIAkJY2xrX2VuYWJsZSgmc2RyY19pY2spOwogCisJLyogQXZvaWQgc2xlZXBpbmcgc2xlZXBpbmcgZHVyaW5nIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3QoKSAqLworCXZjbGsgPSBjbGtfZ2V0KE5VTEwsICJ2aXJ0X3ByY21fc2V0Iik7CisJc2NsayA9IGNsa19nZXQoTlVMTCwgInN5c19jayIpOworCiAJcmV0dXJuIDA7CiB9CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXAyX2Rpc2FibGVfYXBsbHModm9pZCkKK3sKKwljbGtfZGlzYWJsZSgmYXBsbDk2X2NrKTsKKwljbGtfZGlzYWJsZSgmYXBsbDU0X2NrKTsKKworCXJldHVybiAwOworfQorbGF0ZV9pbml0Y2FsbChvbWFwMl9kaXNhYmxlX2FwbGxzKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaCBiL2FyY2gvYXJtL21hY2gtb21hcDIvY2xvY2suaAppbmRleCAyNzgxZGZiLi44ODE2ZjVhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL2Nsb2NrLmgKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9jbG9jay5oCkBAIC01NjAsNyArNTYwLDcgQEAKIAkubmFtZQkJPSAib3NjX2NrIiwKIAkucmF0ZQkJPSAyNjAwMDAwMCwJCS8qIGZpeGVkIHVwIGluIGNsb2NrIGluaXQgKi8KIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCB8Ci0JCQkJUkFURV9GSVhFRCB8IEFMV0FZU19FTkFCTEVEIHwgUkFURV9QUk9QQUdBVEVTLAorCQkJCVJBVEVfRklYRUQgfCBSQVRFX1BST1BBR0FURVMsCiB9OwogCiAvKiBXaXRoIG91dCBtb2RlbSBsaWtlbHkgMTJNSHosIHdpdGggbW9kZW0gbGlrZWx5IDEzTUh6ICovCkBAIC0xMzY4LDcgKzEzNjgsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkxX2ljayA9IHsKLQkubmFtZQkJPSAibWNzcGkxX2ljayIsCisJLm5hbWUJCT0gIm1jc3BpX2ljayIsCisJLmlkCQk9IDEsCiAJLnBhcmVudAkJPSAmbDRfY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjFfQ09SRSwKQEAgLTEzNzcsNyArMTM3OCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTFfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaTFfZmNrIiwKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gMSwKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0MlggfCBDTE9DS19JTl9PTUFQMjQzWCwKIAkuZW5hYmxlX3JlZwk9ICh2b2lkIF9faW9tZW0gKikmQ01fRkNMS0VOMV9DT1JFLApAQCAtMTM4Niw3ICsxMzg4LDggQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrIG1jc3BpMl9pY2sgPSB7Ci0JLm5hbWUJCT0gIm1jc3BpMl9pY2siLAorCS5uYW1lCQk9ICJtY3NwaV9pY2siLAorCS5pZAkJPSAyLAogCS5wYXJlbnQJCT0gJmw0X2NrLAogCS5mbGFncwkJPSBDTE9DS19JTl9PTUFQMjQyWCB8IENMT0NLX0lOX09NQVAyNDNYLAogCS5lbmFibGVfcmVnCT0gKHZvaWQgX19pb21lbSAqKSZDTV9JQ0xLRU4xX0NPUkUsCkBAIC0xMzk1LDcgKzEzOTgsOCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjbGsgbWNzcGkyX2ZjayA9IHsKLQkubmFtZQkJPSAibWNzcGkyX2ZjayIsCisJLm5hbWUJCT0gIm1jc3BpX2ZjayIsCisJLmlkCQk9IDIsCiAJLnBhcmVudAkJPSAmZnVuY180OG1fY2ssCiAJLmZsYWdzCQk9IENMT0NLX0lOX09NQVAyNDJYIHwgQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjFfQ09SRSwKQEAgLTE0MDQsNyArMTQwOCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfaWNrID0gewotCS5uYW1lCQk9ICJtY3NwaTNfaWNrIiwKKwkubmFtZQkJPSAibWNzcGlfaWNrIiwKKwkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZsNF9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0lDTEtFTjJfQ09SRSwKQEAgLTE0MTMsNyArMTQxOCw4IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IGNsayBtY3NwaTNfZmNrID0gewotCS5uYW1lCQk9ICJtY3NwaTNfZmNrIiwKKwkubmFtZQkJPSAibWNzcGlfZmNrIiwKKwkuaWQJCT0gMywKIAkucGFyZW50CQk9ICZmdW5jXzQ4bV9jaywKIAkuZmxhZ3MJCT0gQ0xPQ0tfSU5fT01BUDI0M1gsCiAJLmVuYWJsZV9yZWcJPSAodm9pZCBfX2lvbWVtICopJkNNX0ZDTEtFTjJfQ09SRSwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtb21hcDIvZ3BtYy5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKaW5kZXggYzdhNDhmOS4uZjRmMDRkOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9ncG1jLmMKQEAgLTEzLDYgKzEzLDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcmNoL2dwbWMuaD4KQEAgLTQxLDYgKzQzLDE5IEBACiAjZGVmaW5lIEdQTUNfQ1MwCQkweDYwCiAjZGVmaW5lIEdQTUNfQ1NfU0laRQkJMHgzMAogCisjZGVmaW5lIEdQTUNfQ1NfTlVNCQk4CisjZGVmaW5lIEdQTUNfTUVNX1NUQVJUCQkweDAwMDAwMDAwCisjZGVmaW5lIEdQTUNfTUVNX0VORAkJMHgzRkZGRkZGRgorI2RlZmluZSBCT09UX1JPTV9TUEFDRQkJMHgxMDAwMDAJLyogMU1CICovCisKKyNkZWZpbmUgR1BNQ19DSFVOS19TSElGVAkyNAkJLyogMTYgTUIgKi8KKyNkZWZpbmUgR1BNQ19TRUNUSU9OX1NISUZUCTI4CQkvKiAxMjggTUIgKi8KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZQlncG1jX21lbV9yb290Oworc3RhdGljIHN0cnVjdCByZXNvdXJjZQlncG1jX2NzX21lbVtHUE1DX0NTX05VTV07CitzdGF0aWMgc3BpbmxvY2tfdAlncG1jX21lbV9sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VEOworc3RhdGljIHVuc2lnbmVkCQlncG1jX2NzX21hcDsKKwogc3RhdGljIHZvaWQgX19pb21lbSAqZ3BtY19iYXNlID0KIAkodm9pZCBfX2lvbWVtICopIElPX0FERFJFU1MoR1BNQ19CQVNFKTsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKmdwbWNfY3NfYmFzZSA9CkBAIC0xODcsOSArMjAyLDE2OCBAQAogCXJldHVybiAwOwogfQogCi11bnNpZ25lZCBsb25nIGdwbWNfY3NfZ2V0X2Jhc2VfYWRkcihpbnQgY3MpCitzdGF0aWMgdm9pZCBncG1jX2NzX2VuYWJsZV9tZW0oaW50IGNzLCB1MzIgYmFzZSwgdTMyIHNpemUpCiB7Ci0JcmV0dXJuIChncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzcpICYgMHgxZikgPDwgMjQ7CisJdTMyIGw7CisJdTMyIG1hc2s7CisKKwltYXNrID0gKDEgPDwgR1BNQ19TRUNUSU9OX1NISUZUKSAtIHNpemU7CisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHNyk7CisJbCAmPSB+MHgzZjsKKwlsID0gKGJhc2UgPj4gR1BNQ19DSFVOS19TSElGVCkgJiAweDNmOworCWwgJj0gfigweDBmIDw8IDgpOworCWwgfD0gKChtYXNrID4+IEdQTUNfQ0hVTktfU0hJRlQpICYgMHgwZikgPDwgODsKKwlsIHw9IDEgPDwgNjsJCS8qIENTVkFMSUQgKi8KKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUc3LCBsKTsKK30KKworc3RhdGljIHZvaWQgZ3BtY19jc19kaXNhYmxlX21lbShpbnQgY3MpCit7CisJdTMyIGw7CisKKwlsID0gZ3BtY19jc19yZWFkX3JlZyhjcywgR1BNQ19DU19DT05GSUc3KTsKKwlsICY9IH4oMSA8PCA2KTsJCS8qIENTVkFMSUQgKi8KKwlncG1jX2NzX3dyaXRlX3JlZyhjcywgR1BNQ19DU19DT05GSUc3LCBsKTsKK30KKworc3RhdGljIHZvaWQgZ3BtY19jc19nZXRfbWVtY29uZihpbnQgY3MsIHUzMiAqYmFzZSwgdTMyICpzaXplKQoreworCXUzMiBsOworCXUzMiBtYXNrOworCisJbCA9IGdwbWNfY3NfcmVhZF9yZWcoY3MsIEdQTUNfQ1NfQ09ORklHNyk7CisJKmJhc2UgPSAobCAmIDB4M2YpIDw8IEdQTUNfQ0hVTktfU0hJRlQ7CisJbWFzayA9IChsID4+IDgpICYgMHgwZjsKKwkqc2l6ZSA9ICgxIDw8IEdQTUNfU0VDVElPTl9TSElGVCkgLSAobWFzayA8PCBHUE1DX0NIVU5LX1NISUZUKTsKK30KKworc3RhdGljIGludCBncG1jX2NzX21lbV9lbmFibGVkKGludCBjcykKK3sKKwl1MzIgbDsKKworCWwgPSBncG1jX2NzX3JlYWRfcmVnKGNzLCBHUE1DX0NTX0NPTkZJRzcpOworCXJldHVybiBsICYgKDEgPDwgNik7Cit9CisKK3N0YXRpYyB2b2lkIGdwbWNfY3Nfc2V0X3Jlc2VydmVkKGludCBjcywgaW50IHJlc2VydmVkKQoreworCWdwbWNfY3NfbWFwICY9IH4oMSA8PCBjcyk7CisJZ3BtY19jc19tYXAgfD0gKHJlc2VydmVkID8gMSA6IDApIDw8IGNzOworfQorCitzdGF0aWMgaW50IGdwbWNfY3NfcmVzZXJ2ZWQoaW50IGNzKQoreworCXJldHVybiBncG1jX2NzX21hcCAmICgxIDw8IGNzKTsKK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ3BtY19tZW1fYWxpZ24odW5zaWduZWQgbG9uZyBzaXplKQoreworCWludCBvcmRlcjsKKworCXNpemUgPSAoc2l6ZSAtIDEpID4+IChHUE1DX0NIVU5LX1NISUZUIC0gMSk7CisJb3JkZXIgPSBHUE1DX0NIVU5LX1NISUZUIC0gMTsKKwlkbyB7CisJCXNpemUgPj49IDE7CisJCW9yZGVyKys7CisJfSB3aGlsZSAoc2l6ZSk7CisJc2l6ZSA9IDEgPDwgb3JkZXI7CisJcmV0dXJuIHNpemU7Cit9CisKK3N0YXRpYyBpbnQgZ3BtY19jc19pbnNlcnRfbWVtKGludCBjcywgdW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIHNpemUpCit7CisJc3RydWN0IHJlc291cmNlCSpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCWludCByOworCisJc2l6ZSA9IGdwbWNfbWVtX2FsaWduKHNpemUpOworCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7CisJcmVzLT5zdGFydCA9IGJhc2U7CisJcmVzLT5lbmQgPSBiYXNlICsgc2l6ZSAtIDE7CisJciA9IHJlcXVlc3RfcmVzb3VyY2UoJmdwbWNfbWVtX3Jvb3QsIHJlcyk7CisJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOworCisJcmV0dXJuIHI7Cit9CisKK2ludCBncG1jX2NzX3JlcXVlc3QoaW50IGNzLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgKmJhc2UpCit7CisJc3RydWN0IHJlc291cmNlICpyZXMgPSAmZ3BtY19jc19tZW1bY3NdOworCWludCByID0gLTE7CisKKwlpZiAoY3MgPiBHUE1DX0NTX05VTSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzaXplID0gZ3BtY19tZW1fYWxpZ24oc2l6ZSk7CisJaWYgKHNpemUgPiAoMSA8PCBHUE1DX1NFQ1RJT05fU0hJRlQpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXNwaW5fbG9jaygmZ3BtY19tZW1fbG9jayk7CisJaWYgKGdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CisJCXIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKwlpZiAoZ3BtY19jc19tZW1fZW5hYmxlZChjcykpCisJCXIgPSBhZGp1c3RfcmVzb3VyY2UocmVzLCByZXMtPnN0YXJ0ICYgfihzaXplIC0gMSksIHNpemUpOworCWlmIChyIDwgMCkKKwkJciA9IGFsbG9jYXRlX3Jlc291cmNlKCZncG1jX21lbV9yb290LCByZXMsIHNpemUsIDAsIH4wLAorCQkJCSAgICAgIHNpemUsIE5VTEwsIE5VTEwpOworCWlmIChyIDwgMCkKKwkJZ290byBvdXQ7CisKKwlncG1jX2NzX2VuYWJsZV9tZW0oY3MsIHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOworCSpiYXNlID0gcmVzLT5zdGFydDsKKwlncG1jX2NzX3NldF9yZXNlcnZlZChjcywgMSk7CitvdXQ6CisJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOworCXJldHVybiByOworfQorCit2b2lkIGdwbWNfY3NfZnJlZShpbnQgY3MpCit7CisJc3Bpbl9sb2NrKCZncG1jX21lbV9sb2NrKTsKKwlpZiAoY3MgPj0gR1BNQ19DU19OVU0gfHwgIWdwbWNfY3NfcmVzZXJ2ZWQoY3MpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVHJ5aW5nIHRvIGZyZWUgbm9uLXJlc2VydmVkIEdQTUMgQ1MlZFxuIiwgY3MpOworCQlCVUcoKTsKKwkJc3Bpbl91bmxvY2soJmdwbWNfbWVtX2xvY2spOworCQlyZXR1cm47CisJfQorCWdwbWNfY3NfZGlzYWJsZV9tZW0oY3MpOworCXJlbGVhc2VfcmVzb3VyY2UoJmdwbWNfY3NfbWVtW2NzXSk7CisJZ3BtY19jc19zZXRfcmVzZXJ2ZWQoY3MsIDApOworCXNwaW5fdW5sb2NrKCZncG1jX21lbV9sb2NrKTsKK30KKwordm9pZCBfX2luaXQgZ3BtY19tZW1faW5pdCh2b2lkKQoreworCWludCBjczsKKwl1bnNpZ25lZCBsb25nIGJvb3Rfcm9tX3NwYWNlID0gMDsKKworCWlmIChjcHVfaXNfb21hcDI0MngoKSkgeworCQl1MzIgbDsKKwkJbCA9IG9tYXBfcmVhZGwoT01BUDI0MlhfQ09OVFJPTF9TVEFUVVMpOworCQkvKiBJbiBjYXNlIG9mIGludGVybmFsIGJvb3QgdGhlIDFzdCBNQiBpcyByZWRpcmVjdGVkIHRvIHRoZQorCQkgKiBib290IFJPTSBtZW1vcnkgc3BhY2UuCisJCSAqLworCQlpZiAobCAmICgxIDw8IDMpKQorCQkJYm9vdF9yb21fc3BhY2UgPSBCT09UX1JPTV9TUEFDRTsKKwl9IGVsc2UKKwkJLyogV2UgYXNzdW1lIGludGVybmFsIGJvb3QgaWYgdGhlIG1vZGUgY2FuJ3QgYmUKKwkJICogZGV0ZXJtaW5lZC4KKwkJICovCisJCWJvb3Rfcm9tX3NwYWNlID0gQk9PVF9ST01fU1BBQ0U7CisJZ3BtY19tZW1fcm9vdC5zdGFydCA9IEdQTUNfTUVNX1NUQVJUICsgYm9vdF9yb21fc3BhY2U7CisJZ3BtY19tZW1fcm9vdC5lbmQgPSBHUE1DX01FTV9FTkQ7CisKKwkvKiBSZXNlcnZlIGFsbCByZWdpb25zIHRoYXQgaGFzIGJlZW4gc2V0IHVwIGJ5IGJvb3Rsb2FkZXIgKi8KKwlmb3IgKGNzID0gMDsgY3MgPCBHUE1DX0NTX05VTTsgY3MrKykgeworCQl1MzIgYmFzZSwgc2l6ZTsKKworCQlpZiAoIWdwbWNfY3NfbWVtX2VuYWJsZWQoY3MpKQorCQkJY29udGludWU7CisJCWdwbWNfY3NfZ2V0X21lbWNvbmYoY3MsICZiYXNlLCAmc2l6ZSk7CisJCWlmIChncG1jX2NzX2luc2VydF9tZW0oY3MsIGJhc2UsIHNpemUpIDwgMCkKKwkJCUJVRygpOworCX0KIH0KIAogdm9pZCBfX2luaXQgZ3BtY19pbml0KHZvaWQpCkBAIC0yMDYsNCArMzgwLDYgQEAKIAlsICY9IDB4MDMgPDwgMzsKIAlsIHw9ICgweDAyIDw8IDMpIHwgKDEgPDwgMCk7CiAJZ3BtY193cml0ZV9yZWcoR1BNQ19TWVNDT05GSUcsIGwpOworCisJZ3BtY19tZW1faW5pdCgpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYyBiL2FyY2gvYXJtL21hY2gtb21hcDIvaXJxLmMKaW5kZXggZGZjM2IzNS4uMWVkMmZmZiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL2lycS5jCkBAIC00MSwxOCArNDEsNiBAQAogCQkubnJfaXJxcwk9IDk2LAogCX0sIHsKIAkJLyogWFhYOiBEU1AgSU5UQyAqLwotCi0jaWYgMAotCS8qCi0JICogQ29tbWVudGVkIG91dCBmb3Igbm93IHVudGlsIHdlIGZpeCB0aGUgSVZBIGNsb2NraW5nCi0JICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDI0MjAKLQl9LCB7Ci0JCS8qIElWQSBJTlRDICgyNDIwIG9ubHkpICovCi0JCS5iYXNlX3JlZwk9IE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UsCi0JCS5ucl9pcnFzCT0gMTYsCS8qIEFjdHVhbGx5IDMyLCBidXQgb25seSAxNiBhcmUgdXNlZCAqLwotI2VuZGlmCi0jZW5kaWYKIAl9CiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jIGIvYXJjaC9hcm0vbWFjaC1vbWFwMi9tdXguYwppbmRleCA2MGVmMDg0Li5mNTM4ZDBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL211eC5jCisrKyBiL2FyY2gvYXJtL21hY2gtb21hcDIvbXV4LmMKQEAgLTEwNCw2ICsxMDQsMjAgQEAKIE1VWF9DRkdfMjRYWCgiSzE1XzI0WFhfVUFSVDNfVFgiLAkweDExOCwJMCwJMCwJMCwJMSkKIE1VWF9DRkdfMjRYWCgiSzE0XzI0WFhfVUFSVDNfUlgiLAkweDExOSwJMCwJMCwJMCwJMSkKIAorLyogTU1DL1NESU8gKi8KK01VWF9DRkdfMjRYWCgiRzE5XzI0WFhfTU1DX0NMS08iLAkweDBmMywJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSDE4XzI0WFhfTU1DX0NNRCIsCTB4MGY0LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJGMjBfMjRYWF9NTUNfREFUMCIsCTB4MGY1LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJIMTRfMjRYWF9NTUNfREFUMSIsCTB4MGY2LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJFMTlfMjRYWF9NTUNfREFUMiIsCTB4MGY3LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJEMTlfMjRYWF9NTUNfREFUMyIsCTB4MGY4LAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJGMTlfMjRYWF9NTUNfREFUX0RJUjAiLAkweDBmOSwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiRTIwXzI0WFhfTU1DX0RBVF9ESVIxIiwJMHgwZmEsCTAsCTAsCTAsCTEpCitNVVhfQ0ZHXzI0WFgoIkYxOF8yNFhYX01NQ19EQVRfRElSMiIsCTB4MGZiLAkwLAkwLAkwLAkxKQorTVVYX0NGR18yNFhYKCJFMThfMjRYWF9NTUNfREFUX0RJUjMiLAkweDBmYywJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiRzE4XzI0WFhfTU1DX0NNRF9ESVIiLAkweDBmZCwJMCwJMCwJMCwJMSkKK01VWF9DRkdfMjRYWCgiSDE1XzI0WFhfTU1DX0NMS0kiLAkweDBmZSwJMCwJMCwJMCwJMSkKKwogLyogS2V5cGFkIEdQSU8qLwogTVVYX0NGR18yNFhYKCJUMTlfMjRYWF9LQlIwIiwJCTB4MTA2LAkzLAkxLAkxLAkxKQogTVVYX0NGR18yNFhYKCJSMTlfMjRYWF9LQlIxIiwJCTB4MTA3LAkzLAkxLAkxLAkxKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1vbWFwMi9wcmNtLmMgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwppbmRleCBjMmJmNTdlLi45MGY1MzA1IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYworKysgYi9hcmNoL2FybS9tYWNoLW9tYXAyL3ByY20uYwpAQCAtMTksNiArMTksOCBAQAogCiAjaW5jbHVkZSAicHJjbS1yZWdzLmgiCiAKK2V4dGVybiB2b2lkIG9tYXAyX2Nsa19wcmVwYXJlX2Zvcl9yZWJvb3Qodm9pZCk7CisKIHUzMiBvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXModm9pZCkKIHsKIAlyZXR1cm4gUk1fUlNUU1RfV0tVUCAmIDB4N2Y7CkBAIC0yOCwxMiArMzAsNiBAQAogLyogUmVzZXRzIGNsb2NrIHJhdGVzIGFuZCByZWJvb3RzIHRoZSBzeXN0ZW0uIE9ubHkgY2FsbGVkIGZyb20gc3lzdGVtLmggKi8KIHZvaWQgb21hcF9wcmNtX2FyY2hfcmVzZXQoY2hhciBtb2RlKQogewotCXUzMiByYXRlOwotCXN0cnVjdCBjbGsgKnZjbGssICpzY2xrOwotCi0JdmNsayA9IGNsa19nZXQoTlVMTCwgInZpcnRfcHJjbV9zZXQiKTsKLQlzY2xrID0gY2xrX2dldChOVUxMLCAic3lzX2NrIik7Ci0JcmF0ZSA9IGNsa19nZXRfcmF0ZShzY2xrKTsKLQljbGtfc2V0X3JhdGUodmNsaywgcmF0ZSk7CS8qIGdvIHRvIGJ5cGFzcyBmb3IgT01BUCBsaW1pdGF0aW9uICovCisJb21hcDJfY2xrX3ByZXBhcmVfZm9yX3JlYm9vdCgpOwogCVJNX1JTVENUUkxfV0tVUCB8PSAyOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYyBiL2FyY2gvYXJtL21hY2gtcHhhL2NvcmdpLmMKaW5kZXggY2NlMjY1Ny4uMzM3YzAxYyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvY29yZ2kuYworKysgYi9hcmNoL2FybS9tYWNoLXB4YS9jb3JnaS5jCkBAIC0yODQsMjEgKzI4NCw5IEBACiAvKgogICogVVNCIERldmljZSBDb250cm9sbGVyCiAgKi8KLXN0YXRpYyB2b2lkIGNvcmdpX3VkY19jb21tYW5kKGludCBjbWQpCi17Ci0Jc3dpdGNoKGNtZCkJewotCWNhc2UgUFhBMlhYX1VEQ19DTURfQ09OTkVDVDoKLQkJR1BTUihDT1JHSV9HUElPX1VTQl9QVUxMVVApID0gR1BJT19iaXQoQ09SR0lfR1BJT19VU0JfUFVMTFVQKTsKLQkJYnJlYWs7Ci0JY2FzZSBQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUOgotCQlHUENSKENPUkdJX0dQSU9fVVNCX1BVTExVUCkgPSBHUElPX2JpdChDT1JHSV9HUElPX1VTQl9QVUxMVVApOwotCQlicmVhazsKLQl9Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gdWRjX2luZm8gX19pbml0ZGF0YSA9IHsKIAkvKiBubyBjb25uZWN0IEdQSU87IGNvcmdpIGNhbid0IHRlbGwgY29ubmVjdGlvbiBzdGF0dXMgKi8KLQkudWRjX2NvbW1hbmQJCT0gY29yZ2lfdWRjX2NvbW1hbmQsCisJLmdwaW9fcHVsbHVwCQk9IENPUkdJX0dQSU9fVVNCX1BVTExVUCwKIH07CiAKIApAQCAtMzUwLDcgKzMzOCw2IEBACiAJY29yZ2lfc3NwX3NldF9tYWNoaW5mbygmY29yZ2lfc3NwX21hY2hpbmZvKTsKIAogCXB4YV9ncGlvX21vZGUoQ09SR0lfR1BJT19JUl9PTiB8IEdQSU9fT1VUKTsKLQlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fVVNCX1BVTExVUCB8IEdQSU9fT1VUKTsKIAlweGFfZ3Bpb19tb2RlKENPUkdJX0dQSU9fSFNZTkMgfCBHUElPX0lOKTsKIAogIAlweGFfc2V0X3VkY19pbmZvKCZ1ZGNfaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvS2NvbmZpZyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCmluZGV4IGJiZDEzOGIuLmRmMzc1OTQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9LY29uZmlnCkBAIC0yLDYgKzIsMTMgQEAKIAogbWVudSAiUzNDMjRYWCBJbXBsZW1lbnRhdGlvbnMiCiAKK2NvbmZpZyBNQUNIX0FNTF9NNTkwMAorCWJvb2wgIkFNTCBNNTkwMCBTZXJpZXMiCisJc2VsZWN0IENQVV9TM0MyNDEwCisJaGVscAorCSAgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgQW1lcmljYW4gTWljcm9zeXN0ZW1zIE01OTAwIFNlcmllcworICAgICAgICAgICA8aHR0cDovL3d3dy5hbWx0ZC5jb20+CisKIGNvbmZpZyBNQUNIX0FOVUJJUwogCWJvb2wgIlNpbXRlYyBFbGVjdHJvbmljcyBBTlVCSVMiCiAJc2VsZWN0IENQVV9TM0MyNDQwCkBAIC0xMjYsNiArMTMzLDEyIEBACiAJaGVscAogIAkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTmV4IFZpc2lvbiBORVhDT0RFUiAyNDQwIExpZ2h0IEJvYXJkCiAKK2NvbmZpZyBNQUNIX1ZTVE1TCisJYm9vbCAiVk1TVE1TIgorCXNlbGVjdCBDUFVfUzNDMjQxMgorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IGFyZSB1c2luZyBhbiBWU1RNUyBib2FyZAorCiBlbmRtZW51CiAKIGNvbmZpZyBTM0MyNDEwX0NMT0NLCkBAIC0xMzMsMTAgKzE0NiwyNCBAQAogCWhlbHAKIAkgIENsb2NrIGNvZGUgZm9yIHRoZSBTM0MyNDEwLCBhbmQgc2ltaWxhciBwcm9jZXNzb3JzCiAKK2NvbmZpZyBTM0MyNDEwX1BNCisJYm9vbAorCWRlcGVuZHMgb24gQ09ORklHX1BNCisJaGVscAorCSAgUG93ZXIgTWFuYWdlbWVudCBjb2RlIGNvbW1vbiB0byBTM0MyNDEwIGFuZCBiZXR0ZXIKKworY29uZmlnIENQVV9TM0MyNDEwX0RNQQorCWJvb2wKKwlkZXBlbmRzIG9uIFMzQzI0MTBfRE1BICYmIChDUFVfUzNDMjQxMCB8fCBDUFVfUzNDMjQ0MikKKwlkZWZhdWx0IHkgaWYgQ1BVX1MzQzI0MTAgfHwgQ1BVX1MzQzI0NDIKKwloZWxwCisJICBETUEgZGV2aWNlIHNlbGVjdGlvbiBmb3IgUzNDMjQxMCBhbmQgY29tcGF0aWJsZSBDUFVzCisKIGNvbmZpZyBDUFVfUzNDMjQxMAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQxMAogCXNlbGVjdCBTM0MyNDEwX0NMT0NLCisJc2VsZWN0IFMzQzI0MTBfUE0KIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDEwIGFuZCBTM0MyNDEwQSBmYW1pbHkgZnJvbSB0aGUgUzNDMjRYWCBsaW5lCiAJICBvZiBTYW1zdW5nIE1vYmlsZSBDUFVzLgpAQCAtMTQ5LDYgKzE3NiwxMyBAQAogCQkgICAhQ1BVX1MzQzI0NDAgJiYgIUNQVV9TM0MyNDQyICYmIENQVV9TM0MyNDEyCiAJZGVmYXVsdCB5IGlmIENQVV9TM0MyNDEyCiAKK2NvbmZpZyBTM0MyNDEyX1BNCisJYm9vbAorCWRlZmF1bHQgeSBpZiBQTQorCWRlcGVuZHMgb24gQ1BVX1MzQzI0MTIKKwloZWxwCisJICBJbnRlcm5hbCBjb25maWcgbm9kZSB0byBhcHBseSBTM0MyNDEyIHBvd2VyIG1hbmFnZW1lbnQKKwogY29uZmlnIENQVV9TM0MyNDEyCiAJYm9vbAogCWRlcGVuZHMgb24gQVJDSF9TM0MyNDEwCkBAIC0xNjUsNiArMTk5LDcgQEAKIAlib29sCiAJZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKIAlzZWxlY3QgUzNDMjQxMF9DTE9DSworCXNlbGVjdCBTM0MyNDEwX1BNCiAJc2VsZWN0IENQVV9TM0MyNDRYCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUzNDMjQ0MCBTYW1zdW5nIE1vYmlsZSBDUFUgYmFzZWQgc3lzdGVtcy4KQEAgLTE3Myw2ICsyMDgsNyBAQAogCWJvb2wKIAlkZXBlbmRzIG9uIEFSQ0hfUzNDMjQyMAogCXNlbGVjdCBTM0MyNDEwX0NMT0NLCisJc2VsZWN0IFMzQzI0MTBfUE0KIAlzZWxlY3QgQ1BVX1MzQzI0NFgKIAloZWxwCiAJICBTdXBwb3J0IGZvciBTM0MyNDQyIFNhbXN1bmcgTW9iaWxlIENQVSBiYXNlZCBzeXN0ZW1zLgpAQCAtMjU2LDcgKzI5Miw3IEBACiAKIGNvbmZpZyBQTV9TSU1URUMKIAlib29sCi0JZGVwZW5kcyBvbiBQTSAmJiAoQVJDSF9CQVNUIHx8IE1BQ0hfVlIxMDAwKQorCWRlcGVuZHMgb24gUE0gJiYgKEFSQ0hfQkFTVCB8fCBNQUNIX1ZSMTAwMCB8fCBNQUNIX0FNTF9NNTkwMCkKIAlkZWZhdWx0IHkKIAogY29uZmlnIFMzQzI0MTBfTE9XTEVWRUxfVUFSVF9QT1JUCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvTWFrZWZpbGUKaW5kZXggMGVhZGVjOS4uZDY2MDEzMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL01ha2VmaWxlCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9NYWtlZmlsZQpAQCAtOSw2ICs5LDggQEAKIG9iai1tCQkJOj0KIG9iai1uCQkJOj0KIG9iai0JCQk6PQorb2JqLWRtYS15CQk6PQorb2JqLWRtYS1uCQk6PQogCiAjIERNQQogb2JqLSQoQ09ORklHX1MzQzI0MTBfRE1BKQkrPSBkbWEubwpAQCAtMjAsNiArMjIsMTAgQEAKIAogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwKQkrPSBzM2MyNDEwLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gczNjMjQxMC1ncGlvLm8KK29iai0kKENPTkZJR19DUFVfUzNDMjQxMCkJKz0gczNjMjQxMC1pcnEubworCitvYmotJChDT05GSUdfUzNDMjQxMF9QTSkJKz0gczNjMjQxMC1wbS5vIHMzYzI0MTAtc2xlZXAubworb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEwX0RNQSkJKz0gczNjMjQxMC1kbWEubwogCiAjIFBvd2VyIE1hbmFnZW1lbnQgc3VwcG9ydAogCkBAIC0zMCw2ICszNiw5IEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTIubwogb2JqLSQoQ09ORklHX0NQVV9TM0MyNDEyKQkrPSBzM2MyNDEyLWlycS5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0MTIpCSs9IHMzYzI0MTItY2xvY2subworb2JqLWRtYS0kKENPTkZJR19DUFVfUzNDMjQxMikJKz0gczNjMjQxMi1kbWEubworCitvYmotJChDT05GSUdfUzNDMjQxMl9QTSkJKz0gczNjMjQxMi1wbS5vCiAKICMKICMgUzNDMjQ0WCBzdXBwb3J0CkBAIC00Nyw2ICs1Niw3IEBACiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0NDAtaXJxLm8KIG9iai0kKENPTkZJR19DUFVfUzNDMjQ0MCkJKz0gczNjMjQ0MC1jbG9jay5vCiBvYmotJChDT05GSUdfQ1BVX1MzQzI0NDApCSs9IHMzYzI0MTAtZ3Bpby5vCitvYmotZG1hLSQoQ09ORklHX0NQVV9TM0MyNDQwKQkrPSBzM2MyNDQwLWRtYS5vCiAKICMgUzNDMjQ0MiBzdXBwb3J0CiAKQEAgLTU3LDggKzY3LDEzIEBACiAKIG9iai0kKENPTkZJR19CQVNUX1BDMTA0X0lSUSkJKz0gYmFzdC1pcnEubwogCisjIG1lcmdlIGluIGRtYSBvYmplY3RzCisKK29iai15CQkJCSs9ICQob2JqLWRtYS15KQorCiAjIG1hY2hpbmUgc3BlY2lmaWMgc3VwcG9ydAogCitvYmotJChDT05GSUdfTUFDSF9BTUxfTTU5MDApCSs9IG1hY2gtYW1sbTU5MDAubwogb2JqLSQoQ09ORklHX01BQ0hfQU5VQklTKQkrPSBtYWNoLWFudWJpcy5vCiBvYmotJChDT05GSUdfTUFDSF9PU0lSSVMpCSs9IG1hY2gtb3NpcmlzLm8KIG9iai0kKENPTkZJR19BUkNIX0JBU1QpCQkrPSBtYWNoLWJhc3QubyB1c2Itc2ltdGVjLm8KQEAgLTcxLDUgKzg2LDYgQEAKIG9iai0kKENPTkZJR19NQUNIX1JYMzcxNSkJKz0gbWFjaC1yeDM3MTUubwogb2JqLSQoQ09ORklHX01BQ0hfT1RPTSkJCSs9IG1hY2gtb3RvbS5vCiBvYmotJChDT05GSUdfTUFDSF9ORVhDT0RFUl8yNDQwKSArPSBtYWNoLW5leGNvZGVyLm8KK29iai0kKENPTkZJR19NQUNIX1ZTVE1TKQkrPSBtYWNoLXZzdG1zLm8KIAogb2JqLSQoQ09ORklHX01BQ0hfU01ESykJCSs9IGNvbW1vbi1zbWRrLm8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvYmFzdC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCmluZGV4IGRlZjQ0NDEuLjQ0MGU5YWEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9iYXN0LWlycS5jCkBAIC0xOCwxMCArMTgsNiBAQAogICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqICAgICAwOC1KYW4tMjAwMyBCSkQgIE1vdmVkIGZyb20gY2VudHJhbCBJUlEgY29kZQotICogICAgIDIxLUF1Zy0yMDA1IEJKRCAgRml4ZWQgbWlzc2luZyBjb2RlIGFuZCBjb21waWxlIGVycm9ycwogKi8KIAogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvY3B1LmMKaW5kZXggMWMzYzZhZC4uOWQ0ODk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2NwdS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9jcHUuYwpAQCAtMTI0LDYgKzEyNCwxNSBAQAogCQkuaW5pdAkJPSBzM2MyNDEyX2luaXQsCiAJCS5uYW1lCQk9IG5hbWVfczNjMjQxMiwKIAl9LAorCXsJCQkvKiBhIG5ld2VyIHZlcnNpb24gb2YgdGhlIHMzYzI0MTIgKi8KKwkJLmlkY29kZQkJPSAweDMyNDEyMDAzLAorCQkuaWRtYXNrCQk9IDB4ZmZmZmZmZmYsCisJCS5tYXBfaW8JCT0gczNjMjQxMl9tYXBfaW8sCisJCS5pbml0X2Nsb2Nrcwk9IHMzYzI0MTJfaW5pdF9jbG9ja3MsCisJCS5pbml0X3VhcnRzCT0gczNjMjQxMl9pbml0X3VhcnRzLAorCQkuaW5pdAkJPSBzM2MyNDEyX2luaXQsCisJCS5uYW1lCQk9IG5hbWVfczNjMjQxMiwKKwl9LAogCXsKIAkJLmlkY29kZQkJPSAweDAsICAgLyogUzNDMjQwMCBkb2Vzbid0IGhhdmUgYW4gaWRjb2RlICovCiAJCS5pZG1hc2sJCT0gMHhmZmZmZmZmZiwKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmggYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCmluZGV4IDcyNmUyZWFmLi4xNGZiMGJhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZGV2cy5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kZXZzLmgKQEAgLTgsMTEgKzgsNiBAQAogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgICAxOC1BdWctMjAwNCBCSkQgIENyZWF0ZWQgaW5pdGlhbCB2ZXJzaW9uCi0gKgkyNy1BdWctMjAwNCBCSkQgIEFkZGVkIHRpbWVycyAwIHRocm91Z2ggMwotICoJMTAtRmViLTIwMDUgQkpECSBBZGRlZCBjYW1lcmEgZnJvbSBndWlsbGF1bWUuZ291cmF0QG5leHZpc2lvbi50dgogKi8KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCmluZGV4IGNjOTJhN2IuLmQyNjRiYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZG1hLmMKQEAgLTEsMzUgKzEsMTYgQEAKLS8qIGxpbnV4L2FyY2gvYXJtL21hY2gtYmFzdC9kbWEuYworLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5jCiAgKgotICogKGMpIDIwMDMtMjAwNSBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqIChjKSAyMDAzLTIwMDUsMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKICAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KICAqCiAgKiBTM0MyNDEwIERNQSBjb3JlCiAgKgotICogaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvRUIyNDEwSVRYLworICogaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIENoYW5nZWxvZzoKLSAqICAyNy1GZWItMjAwNSBCSkQgIEFkZGVkIGttZW0gY2FjaGUgZm9yIGRtYSBkZXNjcmlwdG9ycwotICogIDE4LU5vdi0yMDA0IEJKRCAgUmVtb3ZlZCBlcnJvciBmb3IgbG9hZGluZyBvbnRvIHN0b3BwZWQgY2hhbm5lbAotICogIDEwLU5vdi0yMDA0IEJKRCAgRW5zdXJlIGFsbCBleHRlcm5hbCBzeW1ib2xzIGV4cG9ydGVkIGZvciBtb2R1bGVzCi0gKiAgMTAtTm92LTIwMDQgQkpEICBVc2Ugc3lzX2RldmljZSBhbmQgc3lzZGV2X2NsYXNzIGZvciBwb3dlciBtYW5hZ2VtZW50Ci0gKiAgMDgtQXVnLTIwMDQgQkpEICBBcHBseSBybWsncyBzdWdnZXN0aW9ucwotICogIDIxLUp1bC0yMDA0IEJKRCAgUG9ydGVkIHRvIGxpbnV4IDIuNgotICogIDEyLUp1bC0yMDA0IEJKRCAgRmluaXNoZWQgcmUtd3JpdGUgYW5kIGNoYW5nZSBvZiBBUEkKLSAqICAwNi1KdWwtMjAwNCBCSkQgIFJld3JvdGUgZG1hIGNvZGUgdG8gdHJ5IGFuZCBjb3BlIHdpdGggdmFyaW91cyBwcm9ibGVtcwotICogIDIzLU1heS0yMDAzIEJKRCAgQ3JlYXRlZCBmaWxlCi0gKiAgMTktQXVnLTIwMDMgQkpEICBDbGVhbnVwLCBoZWFkZXIgZml4LCBhZGRlZCBVUkwKLSAqCi0gKiBUaGlzIGZpbGUgaXMgYmFzZWQgb24gdGhlIFNhbmd3b29rIExlZS9TYW1zdW5nIHBhdGNoZXMsIHJlLXdyaXR0ZW4gZHVlCi0gKiB0byB2YXJpb3VzIG9tbWlzaW9ucyBmcm9tIHRoZSBjb2RlIChzdWNoIGFzIGZsZXhpYmxlIGRtYSBjb25maWd1cmF0aW9uKQotICogZm9yIHVzZSB3aXRoIHRoZSBCQVNUIHN5c3RlbSBib2FyZC4KLSAqCi0gKiBUaGUgcmUtd3JpdGUgaXMgcHJldHR5IG11Y2ggY29tcGxldGUsIGFuZCBzaG91bGQgYmUgZ29vZCBlbm91Z2ggZm9yIGFueQotICogcG9zc2libGUgRE1BIGZ1bmN0aW9uCi0gKi8KKyovCiAKIAogI2lmZGVmIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRwpAQCAtNTUsMTAgKzM2LDE0IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CiAKKyNpbmNsdWRlICJkbWEuaCIKKwogLyogaW8gbWFwIGZvciBkbWEgKi8KIHN0YXRpYyB2b2lkIF9faW9tZW0gKmRtYV9iYXNlOwogc3RhdGljIGttZW1fY2FjaGVfdCAqZG1hX2ttZW07CiAKK3N0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gZG1hX3NlbDsKKwogLyogZG1hIGNoYW5uZWwgc3RhdGUgaW5mb3JtYXRpb24gKi8KIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDMjQxMF9ETUFfQ0hBTk5FTFNdOwogCkBAIC03OSw3ICs2NCw2IEBACiAJcHJfZGVidWcoIndyaXRpbmcgJTA4eCB0byByZWdpc3RlciAlMDh4XG4iLCh1bnNpZ25lZCBpbnQpdmFsLHJlZyk7CiAJd3JpdGVsKHZhbCwgZG1hX3JlZ2FkZHIoY2hhbiwgcmVnKSk7CiB9Ci0KICNlbmRpZgogCiAjZGVmaW5lIGRtYV9yZHJlZyhjaGFuLCByZWcpIHJlYWRsKChjaGFuKS0+cmVncyArIChyZWcpKQpAQCAtMTUxLDEyICsxMzUsMjAgQEAKICNkZWZpbmUgZGJnX3Nob3djaGFuKGNoYW4pIGRvIHsgfSB3aGlsZSgwKQogI2VuZGlmIC8qIENPTkZJR19TM0MyNDEwX0RNQV9ERUJVRyAqLwogCi0jZGVmaW5lIGNoZWNrX2NoYW5uZWwoY2hhbikgXAotICBkbyB7IGlmICgoY2hhbikgPj0gUzNDMjQxMF9ETUFfQ0hBTk5FTFMpIHsgXAotICAgIHByaW50ayhLRVJOX0VSUiAiJXM6IGludmFsaWQgY2hhbm5lbCAlZFxuIiwgX19GVU5DVElPTl9fLCAoY2hhbikpOyBcCi0gICAgcmV0dXJuIC1FSU5WQUw7IFwKLSAgfSB9IHdoaWxlKDApCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmRtYV9jaGFuX21hcFtETUFDSF9NQVhdOwogCisvKiBsb29rdXBfZG1hX2NoYW5uZWwKKyAqCisgKiBjaGFuZ2UgdGhlIGRtYSBjaGFubmVsIG51bWJlciBnaXZlbiBpbnRvIGEgcmVhbCBkbWEgY2hhbm5lbCBpZAorKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpsb29rdXBfZG1hX2NoYW5uZWwodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJaWYgKGNoYW5uZWwgJiBETUFDSF9MT1dfTEVWRUwpCisJCXJldHVybiAmczNjMjQxMF9jaGFuc1tjaGFubmVsICYgfkRNQUNIX0xPV19MRVZFTF07CisJZWxzZQorCQlyZXR1cm4gZG1hX2NoYW5fbWFwW2NoYW5uZWxdOworfQogCiAvKiBzM2MyNDEwX2RtYV9zdGF0c190aW1lb3V0CiAgKgpAQCAtMzIxLDggKzMxMywxMCBAQAogczNjMjQxMF9kbWFfYnVmZmRvbmUoc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4sIHN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZiwKIAkJICAgICBlbnVtIHMzYzI0MTBfZG1hX2J1ZmZyZXN1bHQgcmVzdWx0KQogeworI2lmIDAKIAlwcl9kZWJ1ZygiY2FsbGJhY2tfZm49JXAsIGJ1Zj0lcCwgaWQ9JXAsIHNpemU9JWQsIHJlc3VsdD0lZFxuIiwKIAkJIGNoYW4tPmNhbGxiYWNrX2ZuLCBidWYsIGJ1Zi0+aWQsIGJ1Zi0+c2l6ZSwgcmVzdWx0KTsKKyNlbmRpZgogCiAJaWYgKGNoYW4tPmNhbGxiYWNrX2ZuICE9IE5VTEwpIHsKIAkJKGNoYW4tPmNhbGxiYWNrX2ZuKShjaGFuLCBidWYtPmlkLCBidWYtPnNpemUsIHJlc3VsdCk7CkBAIC00MzksNyArNDMzLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotCiAvKiBzM2MyNDEwX2RtYV9lbnF1ZXVlCiAgKgogICogcXVldWUgYW4gZ2l2ZW4gYnVmZmVyIGZvciBkbWEgdHJhbnNmZXIuCkBAIC00NjAsMTEgKzQ1MywxMiBAQAogaW50IHMzYzI0MTBfZG1hX2VucXVldWUodW5zaWduZWQgaW50IGNoYW5uZWwsIHZvaWQgKmlkLAogCQkJZG1hX2FkZHJfdCBkYXRhLCBpbnQgc2l6ZSkKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCXN0cnVjdCBzM2MyNDEwX2RtYV9idWYgKmJ1ZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogaWQ9JXAsIGRhdGE9JTA4eCwgc2l6ZT0lZFxuIiwKIAkJIF9fRlVOQ1RJT05fXywgaWQsICh1bnNpZ25lZCBpbnQpZGF0YSwgc2l6ZSk7CkBAIC01NjIsOCArNTU2LDEwIEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHMzYzI0MTBfZG1hX2xhc3R4ZmVyKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQogeworI2lmIDAKIAlwcl9kZWJ1ZygiZG1hJWQ6IHMzYzI0MTBfZG1hX2xhc3R4ZmVyOiBsb2FkX3N0YXRlICVkXG4iLAogCQkgY2hhbi0+bnVtYmVyLCBjaGFuLT5sb2FkX3N0YXRlKTsKKyNlbmRpZgogCiAJc3dpdGNoIChjaGFuLT5sb2FkX3N0YXRlKSB7CiAJY2FzZSBTM0MyNDEwX0RNQUxPQURfTk9ORToKQEAgLTcxOCw3ICs3MTQsOCBAQAogCQlpZiAoY2hhbi0+bG9hZF9zdGF0ZSA9PSBTM0MyNDEwX0RNQUxPQURfTk9ORSkgewogCQkJcHJfZGVidWcoImRtYSVkOiBlbmQgb2YgdHJhbnNmZXIsIHN0b3BwaW5nIGNoYW5uZWwgKCVsZClcbiIsCiAJCQkJIGNoYW4tPm51bWJlciwgamlmZmllcyk7Ci0JCQlzM2MyNDEwX2RtYV9jdHJsKGNoYW4tPm51bWJlciwgUzNDMjQxMF9ETUFPUF9TVE9QKTsKKwkJCXMzYzI0MTBfZG1hX2N0cmwoY2hhbi0+bnVtYmVyIHwgRE1BQ0hfTE9XX0xFVkVMLAorCQkJCQkgUzNDMjQxMF9ETUFPUF9TVE9QKTsKIAkJfQogCX0KIApAQCAtNzI2LDM3ICs3MjMsMzQgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqczNjMjQxMF9kbWFfbWFwX2NoYW5uZWwoaW50IGNoYW5uZWwpOworCiAvKiBzM2MyNDEwX3JlcXVlc3RfZG1hCiAgKgogICogZ2V0IGNvbnRyb2wgb2YgYW4gZG1hIGNoYW5uZWwKICovCiAKLWludCBzM2MyNDEwX2RtYV9yZXF1ZXN0KHVuc2lnbmVkIGludCBjaGFubmVsLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQsCitpbnQgczNjMjQxMF9kbWFfcmVxdWVzdCh1bnNpZ25lZCBpbnQgY2hhbm5lbCwKKwkJCXN0cnVjdCBzM2MyNDEwX2RtYV9jbGllbnQgKmNsaWVudCwKIAkJCXZvaWQgKmRldikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGVycjsKIAogCXByX2RlYnVnKCJkbWElZDogczNjMjQxMF9yZXF1ZXN0X2RtYTogY2xpZW50PSVzLCBkZXY9JXBcbiIsCiAJCSBjaGFubmVsLCBjbGllbnQtPm5hbWUsIGRldik7CiAKLQljaGVja19jaGFubmVsKGNoYW5uZWwpOwotCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0JZGJnX3Nob3djaGFuKGNoYW4pOwotCi0JaWYgKGNoYW4tPmluX3VzZSkgewotCQlpZiAoY2xpZW50ICE9IGNoYW4tPmNsaWVudCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJkbWElZDogYWxyZWFkeSBpbiB1c2VcbiIsIGNoYW5uZWwpOwotCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiZG1hJWQ6IGNsaWVudCBhbHJlYWR5IGhhcyBjaGFubmVsXG4iLCBjaGFubmVsKTsKLQkJfQorCWNoYW4gPSBzM2MyNDEwX2RtYV9tYXBfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKSB7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKKwlkYmdfc2hvd2NoYW4oY2hhbik7CisKIAljaGFuLT5jbGllbnQgPSBjbGllbnQ7CiAJY2hhbi0+aW5fdXNlID0gMTsKIApAQCAtODA5LDE0ICs4MDMsMTQgQEAKIAogaW50IHMzYzI0MTBfZG1hX2ZyZWUoZG1hY2hfdCBjaGFubmVsLCBzdHJ1Y3QgczNjMjQxMF9kbWFfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAotCiAJaWYgKGNoYW4tPmNsaWVudCAhPSBjbGllbnQpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiZG1hJWQ6IHBvc3NpYmxlIGZyZWUgZnJvbSBkaWZmZXJlbnQgY2xpZW50IChjaGFubmVsICVwLCBwYXNzZWQgJXApXG4iLAogCQkgICAgICAgY2hhbm5lbCwgY2hhbi0+Y2xpZW50LCBjbGllbnQpOwpAQCAtODM3LDggKzgzMSwxMiBAQAogCiAJaWYgKGNoYW4tPmlycV9jbGFpbWVkKQogCQlmcmVlX2lycShjaGFuLT5pcnEsICh2b2lkICopY2hhbik7CisKIAljaGFuLT5pcnFfY2xhaW1lZCA9IDA7CiAKKwlpZiAoIShjaGFubmVsICYgRE1BQ0hfTE9XX0xFVkVMKSkKKwkJZG1hX2NoYW5fbWFwW2NoYW5uZWxdID0gTlVMTDsKKwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtODQ4LDggKzg0Niw4IEBACiAKIHN0YXRpYyBpbnQgczNjMjQxMF9kbWFfZG9zdG9wKHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuKQogewotCXVuc2lnbmVkIGxvbmcgdG1wOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB0bXA7CiAKIAlwcl9kZWJ1ZygiJXM6XG4iLCBfX0ZVTkNUSU9OX18pOwogCkBAIC05OTcsOSArOTk1LDEwIEBACiBpbnQKIHMzYzI0MTBfZG1hX2N0cmwoZG1hY2hfdCBjaGFubmVsLCBlbnVtIHMzYzI0MTBfY2hhbl9vcCBvcCkKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXN3aXRjaCAob3ApIHsKIAljYXNlIFMzQzI0MTBfRE1BT1BfU1RBUlQ6CkBAIC0xMDQ2LDEyICsxMDQ1LDE5IEBACiAJCSAgICAgICBpbnQgeGZlcnVuaXQsCiAJCSAgICAgICBpbnQgZGNvbikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCiAJcHJfZGVidWcoIiVzOiBjaGFuPSVkLCB4ZmVyX3VuaXQ9JWQsIGRjb249JTA4eFxuIiwKIAkJIF9fRlVOQ1RJT05fXywgY2hhbm5lbCwgeGZlcnVuaXQsIGRjb24pOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXByaW50aygiSW5pdGlhbCBkY29uIGlzICUwOHhcbiIsIGRjb24pOworCisJZGNvbiB8PSBjaGFuLT5kY29uICYgZG1hX3NlbC5kY29uX21hc2s7CisKKwlwcmludGsoIk5ldyBkY29uIGlzICUwOHhcbiIsIGRjb24pOwogCiAJc3dpdGNoICh4ZmVydW5pdCkgewogCWNhc2UgMToKQEAgLTEwODYsOSArMTA5MiwxMCBAQAogCiBpbnQgczNjMjQxMF9kbWFfc2V0ZmxhZ3MoZG1hY2hfdCBjaGFubmVsLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKmNoYW4gPSAmczNjMjQxMF9jaGFuc1tjaGFubmVsXTsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKIAotCWNoZWNrX2NoYW5uZWwoY2hhbm5lbCk7CisJaWYgKGNoYW4gPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwcl9kZWJ1ZygiJXM6IGNoYW49JXAsIGZsYWdzPSUwOHhcbiIsIF9fRlVOQ1RJT05fXywgY2hhbiwgZmxhZ3MpOwogCkBAIC0xMTA2LDkgKzExMTMsMTAgQEAKIAogaW50IHMzYzI0MTBfZG1hX3NldF9vcGZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfb3Bmbl90IHJ0bikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogY2hhbj0lcCwgb3AgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7CiAKQEAgLTExMjEsOSArMTEyOSwxMCBAQAogCiBpbnQgczNjMjQxMF9kbWFfc2V0X2J1ZmZkb25lX2ZuKGRtYWNoX3QgY2hhbm5lbCwgczNjMjQxMF9kbWFfY2Jmbl90IHJ0bikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogY2hhbj0lcCwgY2FsbGJhY2sgcnRuPSVwXG4iLCBfX0ZVTkNUSU9OX18sIGNoYW4sIHJ0bik7CiAKQEAgLTExNTMsOSArMTE2MiwxMCBAQAogCQkJICBpbnQgaHdjZmcsCiAJCQkgIHVuc2lnbmVkIGxvbmcgZGV2YWRkcikKIHsKLQlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworCXN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuID0gbG9va3VwX2RtYV9jaGFubmVsKGNoYW5uZWwpOwogCi0JY2hlY2tfY2hhbm5lbChjaGFubmVsKTsKKwlpZiAoY2hhbiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXByX2RlYnVnKCIlczogc291cmNlPSVkLCBod2NmZz0lMDh4LCBkZXZhZGRyPSUwOGx4XG4iLAogCQkgX19GVU5DVElPTl9fLCAoaW50KXNvdXJjZSwgaHdjZmcsIGRldmFkZHIpOwpAQCAtMTIwMCw5ICsxMjEwLDEwIEBACiAKIGludCBzM2MyNDEwX2RtYV9nZXRwb3NpdGlvbihkbWFjaF90IGNoYW5uZWwsIGRtYV9hZGRyX3QgKnNyYywgZG1hX2FkZHJfdCAqZHN0KQogewotIAlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9ICZzM2MyNDEwX2NoYW5zW2NoYW5uZWxdOworIAlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiA9IGxvb2t1cF9kbWFfY2hhbm5lbChjaGFubmVsKTsKIAotIAljaGVja19jaGFubmVsKGNoYW5uZWwpOworCWlmIChjaGFuID09IE5VTEwpCisJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHNyYyAhPSBOVUxMKQogIAkJKnNyYyA9IGRtYV9yZHJlZyhjaGFuLCBTM0MyNDEwX0RNQV9EQ1NSQyk7CkBAIC0xMjUyLDcgKzEyNjMsNyBAQAogI2RlZmluZSBzM2MyNDEwX2RtYV9yZXN1bWUgIE5VTEwKICNlbmRpZiAvKiBDT05GSUdfUE0gKi8KIAotc3RhdGljIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzID0geworc3RydWN0IHN5c2Rldl9jbGFzcyBkbWFfc3lzY2xhc3MgPSB7CiAJc2V0X2tzZXRfbmFtZSgiczNjMjR4eC1kbWEiKSwKIAkuc3VzcGVuZAk9IHMzYzI0MTBfZG1hX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBzM2MyNDEwX2RtYV9yZXN1bWUsCkBAIC0xMjY1LDcgKzEyNzYsNiBAQAogCW1lbXNldChwLCAwLCBzaXplb2Yoc3RydWN0IHMzYzI0MTBfZG1hX2J1ZikpOwogfQogCi0KIC8qIGluaXRpYWxpc2F0aW9uIGNvZGUgKi8KIAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9pbml0X2RtYSh2b2lkKQpAQCAtMTI3NCw3ICsxMjg0LDcgQEAKIAlpbnQgY2hhbm5lbDsKIAlpbnQgcmV0OwogCi0JcHJpbnRrKCJTM0MyNDEwIERNQSBEcml2ZXIsIChjKSAyMDAzLTIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iKTsKKwlwcmludGsoIlMzQzI0WFggRE1BIERyaXZlciwgKGMpIDIwMDMtMjAwNCwyMDA2IFNpbXRlYyBFbGVjdHJvbmljc1xuIik7CiAKIAlkbWFfYmFzZSA9IGlvcmVtYXAoUzNDMjRYWF9QQV9ETUEsIDB4MjAwKTsKIAlpZiAoZG1hX2Jhc2UgPT0gTlVMTCkgewpAQCAtMTI4Miw2ICsxMjkyLDggQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCisJcHJpbnRrKCJSZWdpc3RlcmluZyBzeXNjbGFzc1xuIik7CisKIAlyZXQgPSBzeXNkZXZfY2xhc3NfcmVnaXN0ZXIoJmRtYV9zeXNjbGFzcyk7CiAJaWYgKHJldCAhPSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZG1hIHN5c2NsYXNzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIpOwpAQCAtMTMzNSw0ICsxMzQ3LDk1IEBACiAJcmV0dXJuIHJldDsKIH0KIAotX19pbml0Y2FsbChzM2MyNDEwX2luaXRfZG1hKTsKK2NvcmVfaW5pdGNhbGwoczNjMjQxMF9pbml0X2RtYSk7CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2NoYW5uZWxfdmFsaWQodW5zaWduZWQgaW50IGNoYW5uZWwpCit7CisJcmV0dXJuIChjaGFubmVsICYgRE1BX0NIX1ZBTElEKTsKK30KKworLyogczNjMjQxMF9kbWFfbWFwX2NoYW5uZWwoKQorICoKKyAqIHR1cm4gdGhlIHZpcnR1YWwgY2hhbm5lbCBudW1iZXIgaW50byBhIHJlYWwsIGFuZCB1bi11c2VkIGhhcmR3YXJlCisgKiBjaGFubmVsLgorICoKKyAqIGN1cnJlbnRseSB0aGlzIGNvZGUgdXNlcyBmaXJzdC1mcmVlIGNoYW5uZWwgZnJvbSB0aGUgc3BlY2lmaWVkIGhhcndhcmUKKyAqIG1hcCwgbm90IHRha2luZyBpbnRvIGFjY291bnQgYW55dGhpbmcgdGhhdCB0aGUgYm9hcmQgc2V0dXAgY29kZSBtYXkKKyAqIGhhdmUgdG8gc2F5IGFib3V0IHRoZSBsaWtlbHkgcGVyaXBoZXJhbCBzZXQgdG8gYmUgaW4gdXNlLgorKi8KKworc3RydWN0IHMzYzI0MTBfZG1hX2NoYW4gKnMzYzI0MTBfZG1hX21hcF9jaGFubmVsKGludCBjaGFubmVsKQoreworCXN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKmNoX21hcDsKKwlzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqZG1hY2g7CisJaW50IGNoOworCisJaWYgKGRtYV9zZWwubWFwID09IE5VTEwgfHwgY2hhbm5lbCA+IGRtYV9zZWwubWFwX3NpemUpCisJCXJldHVybiBOVUxMOworCisJY2hfbWFwID0gZG1hX3NlbC5tYXAgKyBjaGFubmVsOworCisJZm9yIChjaCA9IDA7IGNoIDwgUzNDMjQxMF9ETUFfQ0hBTk5FTFM7IGNoKyspIHsKKwkJaWYgKCFpc19jaGFubmVsX3ZhbGlkKGNoX21hcC0+Y2hhbm5lbHNbY2hdKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzM2MyNDEwX2NoYW5zW2NoXS5pbl91c2UgPT0gMCkgeworCQkJcHJpbnRrKCJtYXBwZWQgY2hhbm5lbCAlZCB0byAlZFxuIiwgY2hhbm5lbCwgY2gpOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoY2ggPj0gUzNDMjQxMF9ETUFfQ0hBTk5FTFMpCisJCXJldHVybiBOVUxMOworCisJLyogdXBkYXRlIG91ciBjaGFubmVsIG1hcHBpbmcgKi8KKworCWRtYWNoID0gJnMzYzI0MTBfY2hhbnNbY2hdOworCWRtYV9jaGFuX21hcFtjaGFubmVsXSA9IGRtYWNoOworCisJLyogc2VsZWN0IHRoZSBjaGFubmVsICovCisKKwkoZG1hX3NlbC5zZWxlY3QpKGRtYWNoLCBjaF9tYXApOworCisJcmV0dXJuIGRtYWNoOworfQorCitzdGF0aWMgdm9pZCBzM2MyNHh4X2RtYV9zaG93X2NoKHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCwgaW50IGNoKQoreworCS8qIHNob3cgdGhlIGNoYW5uZWwgY29uZmlndXJhdGlvbiAqLworCisJcHJpbnRrKCIlMmQ6ICUyMHMsIGNoYW5uZWxzICVjJWMlYyVjXG4iLCBjaCwgbWFwLT5uYW1lLAorCSAgICAgICAoaXNfY2hhbm5lbF92YWxpZChtYXAtPmNoYW5uZWxzWzBdKSA/ICcwJyA6ICctJyksCisJICAgICAgIChpc19jaGFubmVsX3ZhbGlkKG1hcC0+Y2hhbm5lbHNbMV0pID8gJzEnIDogJy0nKSwKKwkgICAgICAgKGlzX2NoYW5uZWxfdmFsaWQobWFwLT5jaGFubmVsc1syXSkgPyAnMicgOiAnLScpLAorCSAgICAgICAoaXNfY2hhbm5lbF92YWxpZChtYXAtPmNoYW5uZWxzWzNdKSA/ICczJyA6ICctJykpOworfQorCitzdGF0aWMgaW50IHMzYzI0eHhfZG1hX2NoZWNrX2VudHJ5KHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCwgaW50IGNoKQoreworCWlmICgxKQorCQlzM2MyNHh4X2RtYV9zaG93X2NoKG1hcCwgY2gpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBfX2luaXQgczNjMjR4eF9kbWFfaW5pdF9tYXAoc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiAqc2VsKQoreworCXN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm5tYXA7CisJc2l6ZV90IG1hcF9zeiA9IHNpemVvZigqbm1hcCkgKiBzZWwtPm1hcF9zaXplOworCWludCBwdHI7CisKKwlubWFwID0ga21hbGxvYyhtYXBfc3osIEdGUF9LRVJORUwpOworCWlmIChubWFwID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCisJbWVtY3B5KG5tYXAsIHNlbC0+bWFwLCBtYXBfc3opOworCW1lbWNweSgmZG1hX3NlbCwgc2VsLCBzaXplb2YoKnNlbCkpOworCisJZG1hX3NlbC5tYXAgPSBubWFwOworCisJZm9yIChwdHIgPSAwOyBwdHIgPCBzZWwtPm1hcF9zaXplOyBwdHIrKykKKwkJczNjMjR4eF9kbWFfY2hlY2tfZW50cnkobm1hcCtwdHIsIHB0cik7CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWJmZTBhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2RtYS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGFyY2gvYXJtL21hY2gtczNjMjQxMC9kbWEuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBTaW10ZWMgRWxlY3Ryb25pY3MKKyAqCUJlbiBEb29rcyA8YmVuQHNpbXRlYy5jby51az4KKyAqCisgKiBTYW1zdW5nIFMzQzI0WFggRE1BIHN1cHBvcnQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworZXh0ZXJuIHN0cnVjdCBzeXNkZXZfY2xhc3MgZG1hX3N5c2NsYXNzOworZXh0ZXJuIHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuIHMzYzI0MTBfY2hhbnNbUzNDMjQxMF9ETUFfQ0hBTk5FTFNdOworCisjZGVmaW5lIERNQV9DSF9WQUxJRAkJKDE8PDMxKQorCitzdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciB7CisJdW5zaWduZWQgbG9uZwkJZnJvbTsKKwl1bnNpZ25lZCBsb25nCQl0bzsKK307CisKKy8qIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAKKyAqCisgKiB0aGlzIGhvbGRzIHRoZSBtYXBwaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgY2hhbm5lbCBzZWxlY3RlZAorICogdG8gYmUgY29ubmVjdGVkIHRvIHRoZSBzcGVjaWZpZWQgZGV2aWNlCisqLworCitzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwIHsKKwljb25zdCBjaGFyCQkqbmFtZTsKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfYWRkciAgaHdfYWRkcjsKKworCXVuc2lnbmVkIGxvbmcJCSBjaGFubmVsc1tTM0MyNDEwX0RNQV9DSEFOTkVMU107Cit9OworCitzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uIHsKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwCSptYXA7CisJdW5zaWduZWQgbG9uZwkJIG1hcF9zaXplOworCXVuc2lnbmVkIGxvbmcJCSBkY29uX21hc2s7CisKKwl2b2lkCSgqc2VsZWN0KShzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKKwkJCSAgc3RydWN0IHMzYzI0eHhfZG1hX21hcCAqbWFwKTsKK307CisKK2V4dGVybiBpbnQgczNjMjR4eF9kbWFfaW5pdF9tYXAoc3RydWN0IHMzYzI0eHhfZG1hX3NlbGVjdGlvbiAqc2VsKTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvZ3Bpby5jCmluZGV4IGNkMzllODYuLmRiNjM5M2MgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9ncGlvLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2dwaW8uYwpAQCAtMTgsMjEgKzE4LDcgQEAKICAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqIENoYW5nZWxvZwotICoJMTMtU2VwLTIwMDQgIEJKRCAgSW1wbGVtZW50ZWQgY2hhbmdlIG9mIE1JU0NDUgotICoJMTQtU2VwLTIwMDQgIEJKRCAgQWRkZWQgZ2V0cGluIGNhbGwKLSAqCTE0LVNlcC0yMDA0ICBCSkQgIEZpeGVkIGJ1ZyBpbiBzZXRwaW4oKSBjYWxsCi0gKgkzMC1TZXAtMjAwNCAgQkpEICBGaXhlZCBjZmdwaW4oKSBtYXNrIGJ1ZwotICoJMDEtT2N0LTIwMDQgIEJKRCAgQWRkZWQgZ2V0Y2ZnKCkgdG8gZ2V0IHBpbiBjb25maWd1cmF0aW9uCi0gKgkwMS1PY3QtMjAwNCAgQkpEICBGaXhlZCBtYXNrIGJ1ZyBpbiBwdWxsdXAoKSBjYWxsCi0gKgkwMS1PY3QtMjAwNCAgQkpEICBBZGRlZCBnZXRpcnEoKSB0byB0dXJuIHBpbiBpbnRvIGlycW5vCi0gKgkwNC1PY3QtMjAwNCAgQkpEICBBZGRlZCBpcnEgZmlsdGVyIGNvbnRyb2xzIGZvciBHUElPCi0gKgkwNS1Ob3YtMjAwNCAgQkpEICBFWFBPUlRfU1lNQk9MKCkgYWRkZWQgZm9yIGFsbCBjb2RlCi0gKgkxMy1NYXItMjAwNSAgQkpEICBVcGRhdGVzIGZvciBfX2lvbWVtCi0gKgkyNi1PY3QtMjAwNSAgQkpEICBBZGRlZCBnZW5lcmljIGNvbmZpZ3VyYXRpb24gdHlwZXMKLSAqCTE1LUphbi0yMDA2ICBMQ1ZSIEFkZGVkIHN1cHBvcnQgZm9yIHRoZSBTM0MyNDAwCi0gKi8KKyovCiAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL2lycS5jCmluZGV4IGNkNjEzOWIuLjNlOWYzNDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvaXJxLmMKQEAgLTE4MSwxNyArMTgxLDE5IEBACiB9CiAKIHN0cnVjdCBpcnFjaGlwIHMzY19pcnFfbGV2ZWxfY2hpcCA9IHsKLQkuYWNrCSAgID0gczNjX2lycV9tYXNrYWNrLAotCS5tYXNrCSAgID0gczNjX2lycV9tYXNrLAotCS51bm1hc2sJICAgPSBzM2NfaXJxX3VubWFzaywKLQkuc2V0X3dha2UJICAgPSBzM2NfaXJxX3dha2UKKwkubmFtZQkJPSAiczNjLWxldmVsIiwKKwkuYWNrCQk9IHMzY19pcnFfbWFza2FjaywKKwkubWFzawkJPSBzM2NfaXJxX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKKwkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2NoaXAgPSB7Ci0JLmFjawkgICA9IHMzY19pcnFfYWNrLAotCS5tYXNrCSAgID0gczNjX2lycV9tYXNrLAotCS51bm1hc2sJICAgPSBzM2NfaXJxX3VubWFzaywKLQkuc2V0X3dha2UgID0gczNjX2lycV93YWtlCisJLm5hbWUJCT0gInMzYyIsCisJLmFjawkJPSBzM2NfaXJxX2FjaywKKwkubWFzawkJPSBzM2NfaXJxX21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxX3VubWFzaywKKwkuc2V0X3dha2UJPSBzM2NfaXJxX3dha2UKIH07CiAKIHN0YXRpYyB2b2lkCkBAIC0zNDMsMTkgKzM0NSwyMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycWV4dF9jaGlwID0gewotCS5tYXNrCSAgICA9IHMzY19pcnFleHRfbWFzaywKLQkudW5tYXNrCSAgICA9IHMzY19pcnFleHRfdW5tYXNrLAotCS5hY2sJICAgID0gczNjX2lycWV4dF9hY2ssCi0JLnNldF90eXBlICAgID0gczNjX2lycWV4dF90eXBlLAotCS5zZXRfd2FrZSAgICA9IHMzY19pcnFleHRfd2FrZQorCS5uYW1lCQk9ICJzM2MtZXh0IiwKKwkubWFzawkJPSBzM2NfaXJxZXh0X21hc2ssCisJLnVubWFzawkJPSBzM2NfaXJxZXh0X3VubWFzaywKKwkuYWNrCQk9IHMzY19pcnFleHRfYWNrLAorCS5zZXRfdHlwZQk9IHMzY19pcnFleHRfdHlwZSwKKwkuc2V0X3dha2UJPSBzM2NfaXJxZXh0X3dha2UKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2VpbnQwdDQgPSB7Ci0JLmFjawkgICA9IHMzY19pcnFfYWNrLAotCS5tYXNrCSAgID0gczNjX2lycV9tYXNrLAotCS51bm1hc2sJICAgPSBzM2NfaXJxX3VubWFzaywKLQkuc2V0X3dha2UgID0gczNjX2lycV93YWtlLAotCS5zZXRfdHlwZSAgPSBzM2NfaXJxZXh0X3R5cGUsCisJLm5hbWUJCT0gInMzYy1leHQwIiwKKwkuYWNrCQk9IHMzY19pcnFfYWNrLAorCS5tYXNrCQk9IHMzY19pcnFfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdW5tYXNrLAorCS5zZXRfd2FrZQk9IHMzY19pcnFfd2FrZSwKKwkuc2V0X3R5cGUJPSBzM2NfaXJxZXh0X3R5cGUsCiB9OwogCiAvKiBtYXNrIHZhbHVlcyBmb3IgdGhlIHBhcmVudCByZWdpc3RlcnMgZm9yIGVhY2ggb2YgdGhlIGludGVycnVwdCB0eXBlcyAqLwpAQCAtMzg3LDkgKzM5MSwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV91YXJ0MCA9IHsKLQkubWFzawkgICAgPSBzM2NfaXJxX3VhcnQwX21hc2ssCi0JLnVubWFzawkgICAgPSBzM2NfaXJxX3VhcnQwX3VubWFzaywKLQkuYWNrCSAgICA9IHMzY19pcnFfdWFydDBfYWNrLAorCS5uYW1lCQk9ICJzM2MtdWFydDAiLAorCS5tYXNrCQk9IHMzY19pcnFfdWFydDBfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdWFydDBfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV91YXJ0MF9hY2ssCiB9OwogCiAvKiBVQVJUMSAqLwpAQCAtNDEzLDkgKzQxOCwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV91YXJ0MSA9IHsKLQkubWFzawkgICAgPSBzM2NfaXJxX3VhcnQxX21hc2ssCi0JLnVubWFzawkgICAgPSBzM2NfaXJxX3VhcnQxX3VubWFzaywKLQkuYWNrCSAgICA9IHMzY19pcnFfdWFydDFfYWNrLAorCS5uYW1lCQk9ICJzM2MtdWFydDEiLAorCS5tYXNrCQk9IHMzY19pcnFfdWFydDFfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdWFydDFfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV91YXJ0MV9hY2ssCiB9OwogCiAvKiBVQVJUMiAqLwpAQCAtNDM5LDkgKzQ0NSwxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IGlycWNoaXAgczNjX2lycV91YXJ0MiA9IHsKLQkubWFzawkgICAgPSBzM2NfaXJxX3VhcnQyX21hc2ssCi0JLnVubWFzawkgICAgPSBzM2NfaXJxX3VhcnQyX3VubWFzaywKLQkuYWNrCSAgICA9IHMzY19pcnFfdWFydDJfYWNrLAorCS5uYW1lCQk9ICJzM2MtdWFydDIiLAorCS5tYXNrCQk9IHMzY19pcnFfdWFydDJfbWFzaywKKwkudW5tYXNrCQk9IHMzY19pcnFfdWFydDJfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV91YXJ0Ml9hY2ssCiB9OwogCiAvKiBBREMgYW5kIFRvdWNoc2NyZWVuICovCkBAIC00NjUsOSArNDcyLDEwIEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxY2hpcCBzM2NfaXJxX2FkYyA9IHsKLQkubWFzawkgICAgPSBzM2NfaXJxX2FkY19tYXNrLAotCS51bm1hc2sJICAgID0gczNjX2lycV9hZGNfdW5tYXNrLAotCS5hY2sJICAgID0gczNjX2lycV9hZGNfYWNrLAorCS5uYW1lCQk9ICJzM2MtYWRjIiwKKwkubWFzawkJPSBzM2NfaXJxX2FkY19tYXNrLAorCS51bm1hc2sJCT0gczNjX2lycV9hZGNfdW5tYXNrLAorCS5hY2sJCT0gczNjX2lycV9hZGNfYWNrLAogfTsKIAogLyogaXJxIGRlbXV4IGZvciBhZGMgKi8KQEAgLTU2OSwyMyArNTc3LDEwNCBAQAogfQogCiBzdGF0aWMgdm9pZAotczNjX2lycV9kZW11eF9leHRpbnQodW5zaWduZWQgaW50IGlycSwKLQkJICAgICBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKLQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3MzY19pcnFfZGVtdXhfZXh0aW50OCh1bnNpZ25lZCBpbnQgaXJxLAorCQkgICAgICBzdHJ1Y3QgaXJxZGVzYyAqZGVzYywKKwkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBlaW50cG5kID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UUEVORCk7CiAJdW5zaWduZWQgbG9uZyBlaW50bXNrID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5UTUFTSyk7CiAKIAllaW50cG5kICY9IH5laW50bXNrOworCWVpbnRwbmQgJj0gfjB4ZmY7CS8qIGlnbm9yZSBsb3dlciBpcnFzICovCiAKLQlpZiAoZWludHBuZCkgewotCQlpcnEgPSBmbHMoZWludHBuZCk7Ci0JCWlycSArPSAoSVJRX0VJTlQ0IC0gKDQgKyAxKSk7CisJLyogd2UgbWF5IGFzIHdlbGwgaGFuZGxlIGFsbCB0aGUgcGVuZGluZyBJUlFzIGhlcmUgKi8KKworCXdoaWxlIChlaW50cG5kKSB7CisJCWlycSA9IF9fZmZzKGVpbnRwbmQpOworCQllaW50cG5kICY9IH4oMTw8aXJxKTsKKworCQlpcnEgKz0gKElSUV9FSU5UNCAtIDQpOworCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBpcnFfZGVzYyArIGlycSwgcmVncyk7CisJfQorCit9CisKK3N0YXRpYyB2b2lkCitzM2NfaXJxX2RlbXV4X2V4dGludDR0Nyh1bnNpZ25lZCBpbnQgaXJxLAorCQkJc3RydWN0IGlycWRlc2MgKmRlc2MsCisJCQlzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGVpbnRwbmQgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRQRU5EKTsKKwl1bnNpZ25lZCBsb25nIGVpbnRtc2sgPSBfX3Jhd19yZWFkbChTM0MyNFhYX0VJTlRNQVNLKTsKKworCWVpbnRwbmQgJj0gfmVpbnRtc2s7CisJZWludHBuZCAmPSAweGZmOwkvKiBvbmx5IGxvd2VyIGlycXMgKi8KKworCS8qIHdlIG1heSBhcyB3ZWxsIGhhbmRsZSBhbGwgdGhlIHBlbmRpbmcgSVJRcyBoZXJlICovCisKKwl3aGlsZSAoZWludHBuZCkgeworCQlpcnEgPSBfX2ZmcyhlaW50cG5kKTsKKwkJZWludHBuZCAmPSB+KDE8PGlycSk7CisKKwkJaXJxICs9IChJUlFfRUlOVDQgLSA0KTsKIAogCQlkZXNjX2hhbmRsZV9pcnEoaXJxLCBpcnFfZGVzYyArIGlycSwgcmVncyk7CiAJfQogfQogCisjaWZkZWYgQ09ORklHX1BNCisKK3N0YXRpYyBzdHJ1Y3Qgc2xlZXBfc2F2ZSBpcnFfc2F2ZVtdID0geworCVNBVkVfSVRFTShTM0MyNDEwX0lOVE1TSyksCisJU0FWRV9JVEVNKFMzQzI0MTBfSU5UU1VCTVNLKSwKK307CisKKy8qIHRoZSBleHRpbnQgdmFsdWVzIG1vdmUgYmV0d2VlbiB0aGUgczNjMjQxMC9zM2MyNDQwIGFuZCB0aGUgczNjMjQxMgorICogc28gd2UgdXNlIGFuIGFycmF5IHRvIGhvbGQgdGhlbSwgYW5kIHRvIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZgorICogdGhlIHJlZ2lzdGVyIGF0IHJ1bi10aW1lCisqLworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzYXZlX2V4dGludFszXTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludGZsdFs0XTsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHNhdmVfZWludG1hc2s7CisKK2ludCBzM2MyNHh4X2lycV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQorCQlzYXZlX2V4dGludFtpXSA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKKwkJc2F2ZV9laW50Zmx0W2ldID0gX19yYXdfcmVhZGwoUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOworCisJczNjMjQxMF9wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CisJc2F2ZV9laW50bWFzayA9IF9fcmF3X3JlYWRsKFMzQzI0WFhfRUlOVE1BU0spOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZXh0aW50KTsgaSsrKQorCQlfX3Jhd193cml0ZWwoc2F2ZV9leHRpbnRbaV0sIFMzQzI0WFhfRVhUSU5UMCArIChpKjQpKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNhdmVfZWludGZsdCk7IGkrKykKKwkJX19yYXdfd3JpdGVsKHNhdmVfZWludGZsdFtpXSwgUzNDMjRYWF9FSU5GTFQwICsgKGkqNCkpOworCisJczNjMjQxMF9wbV9kb19yZXN0b3JlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CisJX19yYXdfd3JpdGVsKHNhdmVfZWludG1hc2ssIFMzQzI0WFhfRUlOVE1BU0spOworCisJcmV0dXJuIDA7Cit9CisKKyNlbHNlCisjZGVmaW5lIHMzYzI0eHhfaXJxX3N1c3BlbmQgTlVMTAorI2RlZmluZSBzM2MyNHh4X2lycV9yZXN1bWUgIE5VTEwKKyNlbmRpZgorCiAvKiBzM2MyNHh4X2luaXRfaXJxCiAgKgogICogSW5pdGlhbGlzZSBTM0MyNDEwIElSUSBzeXN0ZW0KQEAgLTY3NCw4ICs3NjMsOCBAQAogCiAJLyogc2V0dXAgdGhlIGNhc2NhZGUgaXJxIGhhbmRsZXJzICovCiAKLQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfRUlOVDR0NywgczNjX2lycV9kZW11eF9leHRpbnQpOwotCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UOHQyMywgczNjX2lycV9kZW11eF9leHRpbnQpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKElSUV9FSU5UNHQ3LCBzM2NfaXJxX2RlbXV4X2V4dGludDR0Nyk7CisJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX0VJTlQ4dDIzLCBzM2NfaXJxX2RlbXV4X2V4dGludDgpOwogCiAJc2V0X2lycV9jaGFpbmVkX2hhbmRsZXIoSVJRX1VBUlQwLCBzM2NfaXJxX2RlbXV4X3VhcnQwKTsKIAlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihJUlFfVUFSVDEsIHMzY19pcnFfZGVtdXhfdWFydDEpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtYW1sbTU5MDAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmE1MTA5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKQEAgLTAsMCArMSwyNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFtbG01OTAwLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQW1lcmljYW4gTWljcm9zeXN0ZW1zIExpbWl0ZWQKKyAqCURhdmlkIEFuZGVycyA8ZGFuZGVyc0BhbWx0ZC5jb20+CisKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCisgKiBNQSAwMjExMS0xMzA3IFVTQQorICoKKyAqIEBIaXN0b3J5OgorICogZGVyaXZlZCBmcm9tIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWJhc3QuYywgd3JpdHRlbiBieQorICogQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKworCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2ZsYXNoLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtZ3Bpby5oPgorCisjaW5jbHVkZSAiZGV2cy5oIgorI2luY2x1ZGUgImNwdS5oIgorCisjaWZkZWYgQ09ORklHX01URF9QQVJUSVRJT05TCisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BhcnRpdGlvbnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL3BoeXNtYXAuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBhbWxtNTkwMF9ub3JfcmVzb3VyY2UgPSB7CisJCS5zdGFydCA9IDB4MDAwMDAwMDAsCisJCS5lbmQgICA9IDB4MDEwMDAwMDAgLSAxLAorCQkuZmxhZ3MgPSBJT1JFU09VUkNFX01FTSwKK307CisKKworCitzdGF0aWMgc3RydWN0IG10ZF9wYXJ0aXRpb24gYW1sbTU5MDBfbXRkX3BhcnRpdGlvbnNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJTeXN0ZW0iLAorCQkuc2l6ZQkJPSAweDI0MDAwMCwKKwkJLm9mZnNldAkJPSAwLAorCQkubWFza19mbGFncyAJPSBNVERfV1JJVEVBQkxFLCAgLyogZm9yY2UgcmVhZC1vbmx5ICovCisJfSwgeworCQkubmFtZQkJPSAiS2VybmVsIiwKKwkJLnNpemUJCT0gMHgxMDAwMDAsCisJCS5vZmZzZXQJCT0gTVREUEFSVF9PRlNfQVBQRU5ELAorCX0sIHsKKwkJLm5hbWUJCT0gIlJhbWRpc2siLAorCQkuc2l6ZQkJPSAweDMwMDAwMCwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwgeworCQkubmFtZQkJPSAiSkZGUzIiLAorCQkuc2l6ZQkJPSAweDlBMDAwMCwKKwkJLm9mZnNldAkJPSBNVERQQVJUX09GU19BUFBFTkQsCisJfSwgeworCQkubmFtZQkJPSAiU2V0dGluZ3MiLAorCQkuc2l6ZQkJPSBNVERQQVJUX1NJWl9GVUxMLAorCQkub2Zmc2V0CQk9IE1URFBBUlRfT0ZTX0FQUEVORCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBoeXNtYXBfZmxhc2hfZGF0YSBhbWxtNTkwMF9mbGFzaF9kYXRhID0geworCS53aWR0aAkJPSAyLAorCS5wYXJ0cwkJPSBhbWxtNTkwMF9tdGRfcGFydGl0aW9ucywKKwkubnJfcGFydHMJPSBBUlJBWV9TSVpFKGFtbG01OTAwX210ZF9wYXJ0aXRpb25zKSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGFtbG01OTAwX2RldmljZV9ub3IgPSB7CisJLm5hbWUJCT0gInBoeXNtYXAtZmxhc2giLAorCS5pZAkJPSAwLAorCS5kZXYgPSB7CisJCQkucGxhdGZvcm1fZGF0YSA9ICZhbWxtNTkwMF9mbGFzaF9kYXRhLAorCQl9LAorCS5udW1fcmVzb3VyY2VzCT0gMSwKKwkucmVzb3VyY2UJPSAmYW1sbTU5MDBfbm9yX3Jlc291cmNlLAorfTsKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIGFtbG01OTAwX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkudmlydHVhbAk9ICh1MzIpUzNDMjRYWF9WQV9TUEksCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihTM0MyNDEwX1BBX1NQSSksCisJCS5sZW5ndGgJCT0gU1pfMU0sCisJCS50eXBlCQk9IE1UX0RFVklDRQorCX0KK307CisKKyNkZWZpbmUgVUNPTiBTM0MyNDEwX1VDT05fREVGQVVMVAorI2RlZmluZSBVTENPTiBTM0MyNDEwX0xDT05fQ1M4IHwgUzNDMjQxMF9MQ09OX1BOT05FIHwgUzNDMjQxMF9MQ09OX1NUT1BCCisjZGVmaW5lIFVGQ09OIFMzQzI0MTBfVUZDT05fUlhUUklHOCB8IFMzQzI0MTBfVUZDT05fRklGT01PREUKKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3VhcnRjZmcgYW1sbTU5MDBfdWFydGNmZ3NbXSA9IHsKKwlbMF0gPSB7CisJCS5od3BvcnQJICAgICA9IDAsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfSwKKwlbMl0gPSB7CisJCS5od3BvcnQJICAgICA9IDIsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IFVDT04sCisJCS51bGNvbgkgICAgID0gVUxDT04sCisJCS51ZmNvbgkgICAgID0gVUZDT04sCisJfQorfTsKKworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqYW1sbTU5MDBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisjaWZkZWYgQ09ORklHX0ZCX1MzQzI0MTAKKwkmczNjX2RldmljZV9sY2QsCisjZW5kaWYKKwkmczNjX2RldmljZV9hZGMsCisJJnMzY19kZXZpY2Vfd2R0LAorCSZzM2NfZGV2aWNlX2kyYywKKwkmczNjX2RldmljZV91c2IsCisgCSZzM2NfZGV2aWNlX3J0YywKKwkmczNjX2RldmljZV91c2JnYWRnZXQsCisgICAgICAgICZzM2NfZGV2aWNlX3NkaSwKKyNpZmRlZiBDT05GSUdfTVREX1BBUlRJVElPTlMKKwkmYW1sbTU5MDBfZGV2aWNlX25vciwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2JvYXJkIGFtbG01OTAwX2JvYXJkIF9faW5pdGRhdGEgPSB7CisJLmRldmljZXMgICAgICAgPSBhbWxtNTkwMF9kZXZpY2VzLAorCS5kZXZpY2VzX2NvdW50ID0gQVJSQVlfU0laRShhbWxtNTkwMF9kZXZpY2VzKQorfTsKKwordm9pZCBfX2luaXQgYW1sbTU5MDBfbWFwX2lvKHZvaWQpCit7CisJczNjMjR4eF9pbml0X2lvKGFtbG01OTAwX2lvZGVzYywgQVJSQVlfU0laRShhbWxtNTkwMF9pb2Rlc2MpKTsKKwlzM2MyNHh4X2luaXRfY2xvY2tzKDApOworCXMzYzI0eHhfaW5pdF91YXJ0cyhhbWxtNTkwMF91YXJ0Y2ZncywgQVJSQVlfU0laRShhbWxtNTkwMF91YXJ0Y2ZncykpOworCXMzYzI0eHhfc2V0X2JvYXJkKCZhbWxtNTkwMF9ib2FyZCk7Cit9CisKKyNpZmRlZiBDT05GSUdfRkJfUzNDMjQxMAorc3RhdGljIHN0cnVjdCBzM2MyNDEwZmJfbWFjaF9pbmZvIF9faW5pdGRhdGEgYW1sbTU5MDBfbGNkX2luZm8gPSB7CisJLndpZHRoCQk9IDE2MCwKKwkuaGVpZ2h0CQk9IDE2MCwKKworLyogY29tbWVudGVkIG91dCB1bnRpbCBzdG4gcGF0Y2ggaXMgc3VibWl0dGVkCisqCS50eXBlCQk9IFMzQzI0MTBfTENEQ09OMV9TVE40LAorKi8KKwkuZ3BjY29uID0JMHhhYWFhYWFhYSwKKwkuZ3BjY29uX21hc2sgPQkweGZmZmZmZmZmLAorCS5ncGN1cCA9CTB4MDAwMGZmZmYsCisJLmdwY3VwX21hc2sgPQkweGZmZmZmZmZmLAorCisJLmdwZGNvbiA9CTB4YWFhYWFhYWEsCisJLmdwZGNvbl9tYXNrID0JMHhmZmZmZmZmZiwKKwkuZ3BkdXAgPQkweDAwMDBmZmZmLAorCS5ncGR1cF9tYXNrID0JMHhmZmZmZmZmZiwKKworCS54cmVzCQk9IHsKKwkJLm1pbgkJPSAxNjAsCisJCS5tYXgJCT0gMTYwLAorCQkuZGVmdmFsCQk9IDE2MCwKKwl9LAorCisJLnlyZXMJCT0geworCQkubWluCQk9IDE2MCwKKwkJLm1heAkgICAgICAgID0gMTYwLAorCQkuZGVmdmFsCQk9IDE2MCwKKwl9LAorCisJLmJwcAkJPSB7CisJCS5taW4JCT0gNCwKKwkJLm1heAkJPSA0LAorCQkuZGVmdmFsCQk9IDQsCisJfSwKKworCS5yZWdzCQk9IHsKKwkJLmxjZGNvbjEJPSAweDAwMDA4MjI1LAorCQkubGNkY29uMgk9IDB4MDAyN2MwMDAsCisJCS5sY2Rjb24zCT0gMHgwMDE4MjcwOCwKKwkJLmxjZGNvbjQJPSAweDAwMDAwMDAyLAorCQkubGNkY29uNQk9IDB4MDAwMDAwMDEsCisJfQorfTsKKyNlbmRpZgorCitzdGF0aWMgaXJxcmV0dXJuX3QKK2FtbG01OTAwX3dha2VfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmlnbm9yZWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHZvaWQgYW1sbTU5MDBfaW5pdF9wbSh2b2lkKQoreworCWludCByZXQgPSAwOworCisJcmV0ID0gcmVxdWVzdF9pcnEoSVJRX0VJTlQ5LCAmYW1sbTU5MDBfd2FrZV9pbnRlcnJ1cHQsCisJCQkJSVJRRl9UUklHR0VSX1JJU0lORyB8IElSUUZfU0hBUkVELAorCQkJCSJhbWxtNTkwMF93YWtldXAiLCAmYW1sbTU5MDBfd2FrZV9pbnRlcnJ1cHQpOworCWlmIChyZXQgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkFNTC1NNTkwMDogbm8gd2FrZXVwIGlycSwgJWQ/XG4iLCByZXQpOworCX0gZWxzZSB7CisJCWVuYWJsZV9pcnFfd2FrZShJUlFfRUlOVDkpOworCQkvKiBjb25maWd1cmUgdGhlIHN1c3BlbmQvcmVzdW1lIHN0YXR1cyBwaW4gKi8KKwkJczNjMjQxMF9ncGlvX2NmZ3BpbihTM0MyNDEwX0dQRjIsIFMzQzI0MTBfR1BGMl9PVVRQKTsKKwkJczNjMjQxMF9ncGlvX3B1bGx1cChTM0MyNDEwX0dQRjIsIDApOworCX0KK30KK3N0YXRpYyB2b2lkIF9faW5pdCBhbWxtNTkwMF9pbml0KHZvaWQpCit7CisJYW1sbTU5MDBfaW5pdF9wbSgpOworI2lmZGVmIENPTkZJR19GQl9TM0MyNDEwCisJczNjMjR4eF9mYl9zZXRfcGxhdGRhdGEoJmFtbG01OTAwX2xjZF9pbmZvKTsKKyNlbmRpZgorfQorCitNQUNISU5FX1NUQVJUKEFNTF9NNTkwMCwgIkFNTF9NNTkwMCIpCisJLnBoeXNfaW8JPSBTM0MyNDEwX1BBX1VBUlQsCisJLmlvX3BnX29mZnN0CT0gKCgodTMyKVMzQzI0WFhfVkFfVUFSVCkgPj4gMTgpICYgMHhmZmZjLAorCS5ib290X3BhcmFtcwk9IFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCwKKwkubWFwX2lvCQk9IGFtbG01OTAwX21hcF9pbywKKwkuaW5pdF9pcnEJPSBzM2MyNHh4X2luaXRfaXJxLAorCS5pbml0X21hY2hpbmUJPSBhbWxtNTkwMF9pbml0LAorCS50aW1lcgkJPSAmczNjMjR4eF90aW1lciwKK01BQ0hJTkVfRU5ECmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1hbnViaXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCmluZGV4IDYwNjQxZDQuLmU5NGNkY2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLWFudWJpcy5jCkBAIC00LDE1ICs0LDkgQEAKICAqCWh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICoKLSAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkwMi1NYXktMjAwNSBCSkQgIENvcGllZCBmcm9tIG1hY2gtYmFzdC5jCi0gKgkyMC1TZXAtMjAwNSBCSkQgIEFkZGVkIHN0YXRpYyB0byBub24tZXhwb3J0ZWQgaXRlbXMKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvbWFjaC1zbWRrMjQ0MC5jCmluZGV4IGQ2NjFjNmIuLmUyMjA1ZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXNtZGsyNDQwLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtc21kazI0NDAuYwpAQCAtMTEsMTUgKzExLDYgQEAKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqCi0gKiBNb2RpZmljYXRpb25zOgotICoJMDEtTm92LTIwMDQgQkpEICAgSW5pdGlhbCB2ZXJzaW9uCi0gKgkxMi1Ob3YtMjAwNCBCSkQgICBVcGRhdGVkIGZvciByZWxlYXNlCi0gKgkwNC1KYW4tMjAwNSBCSkQgICBGaXhlcyBmb3IgcHJlLXJlbGVhc2UKLSAqCTIyLUZlYi0yMDA1IEJKRCAgIFVwZGF0ZWQgZm9yIDIuNi4xMS1yYzUgcmVsZXNhCi0gKgkxMC1NYXItMjAwNSBMQ1ZSICBSZXBsYWNlZCBTM0MyNDEwX1ZBIGJ5IFMzQzI0WFhfVkEKLSAqCTE0LU1hci0yMDA1IEJKRAkgIHZvaWQgX19pb21lbSBmaXhlcwotICoJMjAtU2VwLTIwMDUgQkpEICAgQWRkZWQgc3RhdGljIHRvIG5vbi1leHBvcnRlZCBpdGVtcwotICoJMjYtT2N0LTIwMDUgQkpEICAgQWRkZWQgZnJhbWVidWZmZXIgZGF0YQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL21hY2gtdnN0bXMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE1NTRlNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKQEAgLTAsMCArMSwxNjggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9tYWNoLXZzdG1zLmMKKyAqCisgKiAoQykgMjAwNiBUaG9tYXMgR2xlaXhuZXIgPHRnbHhAbGludXRyb25peC5kZT4KKyAqCisgKiBEZXJpdmVkIGZyb20gbWFjaC1zbWRrMjQxMy5jIC0gKEMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvbXRkLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL25hbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbmFuZF9lY2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvcGFydGl0aW9ucy5oPgorCisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL2lycS5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvbWQuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1sY2QuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2lkbGUuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9mYi5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvbmFuZC5oPgorCisjaW5jbHVkZSAiczNjMjQxMC5oIgorI2luY2x1ZGUgInMzYzI0MTIuaCIKKyNpbmNsdWRlICJjbG9jay5oIgorI2luY2x1ZGUgImRldnMuaCIKKyNpbmNsdWRlICJjcHUuaCIKKworCitzdGF0aWMgc3RydWN0IG1hcF9kZXNjIHZzdG1zX2lvZGVzY1tdIF9faW5pdGRhdGEgPSB7Cit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfdWFydGNmZyB2c3Rtc191YXJ0Y2Znc1tdIF9faW5pdGRhdGEgPSB7CisJWzBdID0geworCQkuaHdwb3J0CSAgICAgPSAwLAorCQkuZmxhZ3MJICAgICA9IDAsCisJCS51Y29uCSAgICAgPSAweDNjNSwKKwkJLnVsY29uCSAgICAgPSAweDAzLAorCQkudWZjb24JICAgICA9IDB4NTEsCisJfSwKKwlbMV0gPSB7CisJCS5od3BvcnQJICAgICA9IDEsCisJCS5mbGFncwkgICAgID0gMCwKKwkJLnVjb24JICAgICA9IDB4M2M1LAorCQkudWxjb24JICAgICA9IDB4MDMsCisJCS51ZmNvbgkgICAgID0gMHg1MSwKKwl9LAorCVsyXSA9IHsKKwkJLmh3cG9ydAkgICAgID0gMiwKKwkJLmZsYWdzCSAgICAgPSAwLAorCQkudWNvbgkgICAgID0gMHgzYzUsCisJCS51bGNvbgkgICAgID0gMHgwMywKKwkJLnVmY29uCSAgICAgPSAweDUxLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB2c3Rtc19uYW5kX3BhcnRbXSA9IHsKKwlbMF0gPSB7CisJCS5uYW1lCT0gIkJvb3QgQWdlbnQiLAorCQkuc2l6ZQk9IDB4N0MwMDAsCisJCS5vZmZzZXQJPSAwLAorCX0sCisJWzFdID0geworCQkubmFtZQk9ICJVQm9vdCBDb25maWciLAorCQkub2Zmc2V0ID0gMHg3QzAwMCwKKwkJLnNpemUJPSAweDQwMDAsCisJfSwKKwlbMl0gPSB7CisJCS5uYW1lCT0gIktlcm5lbCIsCisJCS5vZmZzZXQgPSAweDgwMDAwLAorCQkuc2l6ZQk9IDB4MjAwMDAwLAorCX0sCisJWzNdID0geworCQkubmFtZQk9ICJSRlMiLAorCQkub2Zmc2V0CT0gMHgyODAwMDAsCisJCS5zaXplCT0gMHgzZDgwMDAwLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHMzYzI0MTBfbmFuZF9zZXQgdnN0bXNfbmFuZF9zZXRzW10gPSB7CisJWzBdID0geworCQkubmFtZQkJPSAiTkFORCIsCisJCS5ucl9jaGlwcwk9IDEsCisJCS5ucl9wYXJ0aXRpb25zCT0gQVJSQVlfU0laRSh2c3Rtc19uYW5kX3BhcnQpLAorCQkucGFydGl0aW9ucwk9IHZzdG1zX25hbmRfcGFydCwKKwl9LAorfTsKKworLyogY2hvb3NlIGEgc2V0IG9mIHRpbWluZ3Mgd2hpY2ggc2hvdWxkIHN1aXQgbW9zdCA1MTJNYml0CisgKiBjaGlwcyBhbmQgYmV5b25kLgorKi8KKworc3RhdGljIHN0cnVjdCBzM2MyNDEwX3BsYXRmb3JtX25hbmQgdnN0bXNfbmFuZF9pbmZvID0geworCS50YWNscwkJPSAyMCwKKwkudHdycGgwCQk9IDYwLAorCS50d3JwaDEJCT0gMjAsCisJLm5yX3NldHMJPSBBUlJBWV9TSVpFKHZzdG1zX25hbmRfc2V0cyksCisJLnNldHMJCT0gdnN0bXNfbmFuZF9zZXRzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnZzdG1zX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzM2NfZGV2aWNlX3VzYiwKKwkmczNjX2RldmljZV93ZHQsCisJJnMzY19kZXZpY2VfaTJjLAorCSZzM2NfZGV2aWNlX2lpcywKKwkmczNjX2RldmljZV9ydGMsCisJJnMzY19kZXZpY2VfbmFuZCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9ib2FyZCB2c3Rtc19ib2FyZCBfX2luaXRkYXRhID0geworCS5kZXZpY2VzICAgICAgID0gdnN0bXNfZGV2aWNlcywKKwkuZGV2aWNlc19jb3VudCA9IEFSUkFZX1NJWkUodnN0bXNfZGV2aWNlcykKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdCB2c3Rtc19maXh1cChzdHJ1Y3QgbWFjaGluZV9kZXNjICpkZXNjLAorCQkJCSAgc3RydWN0IHRhZyAqdGFncywgY2hhciAqKmNtZGxpbmUsCisJCQkJICBzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJaWYgKHRhZ3MgIT0gcGh5c190b192aXJ0KFMzQzI0MTBfU0RSQU1fUEEgKyAweDEwMCkpIHsKKwkJbWktPm5yX2JhbmtzPTE7CisJCW1pLT5iYW5rWzBdLnN0YXJ0ID0gMHgzMDAwMDAwMDsKKwkJbWktPmJhbmtbMF0uc2l6ZSA9IFNaXzY0TTsKKwkJbWktPmJhbmtbMF0ubm9kZSA9IDA7CisJfQorfQorCitzdGF0aWMgdm9pZCBfX2luaXQgdnN0bXNfbWFwX2lvKHZvaWQpCit7CisJczNjX2RldmljZV9uYW5kLmRldi5wbGF0Zm9ybV9kYXRhID0gJnZzdG1zX25hbmRfaW5mbzsKKworCXMzYzI0eHhfaW5pdF9pbyh2c3Rtc19pb2Rlc2MsIEFSUkFZX1NJWkUodnN0bXNfaW9kZXNjKSk7CisJczNjMjR4eF9pbml0X2Nsb2NrcygxMjAwMDAwMCk7CisJczNjMjR4eF9pbml0X3VhcnRzKHZzdG1zX3VhcnRjZmdzLCBBUlJBWV9TSVpFKHZzdG1zX3VhcnRjZmdzKSk7CisJczNjMjR4eF9zZXRfYm9hcmQoJnZzdG1zX2JvYXJkKTsKK30KKworTUFDSElORV9TVEFSVChWU1RNUywgIlZTVE1TIikKKwkucGh5c19pbwk9IFMzQzI0MTBfUEFfVUFSVCwKKwkuaW9fcGdfb2Zmc3QJPSAoKCh1MzIpUzNDMjRYWF9WQV9VQVJUKSA+PiAxOCkgJiAweGZmZmMsCisJLmJvb3RfcGFyYW1zCT0gUzNDMjQxMF9TRFJBTV9QQSArIDB4MTAwLAorCisJLmZpeHVwCQk9IHZzdG1zX2ZpeHVwLAorCS5pbml0X2lycQk9IHMzYzI0eHhfaW5pdF9pcnEsCisJLm1hcF9pbwkJPSB2c3Rtc19tYXBfaW8sCisJLnRpbWVyCQk9ICZzM2MyNHh4X3RpbWVyLAorTUFDSElORV9FTkQKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYwppbmRleCA3YjI0NDU2Li40MmNkMDVlMiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS1zaW10ZWMuYwpAQCAtNDksNyArNDksOCBAQAogCS8qIGNoZWNrIHdoaWNoIG1hY2hpbmUgd2UgYXJlIHJ1bm5pbmcgb24gKi8KIAogCWlmICghbWFjaGluZV9pc19iYXN0KCkgJiYgIW1hY2hpbmVfaXNfdnIxMDAwKCkgJiYKLQkgICAgIW1hY2hpbmVfaXNfYW51YmlzKCkgJiYgIW1hY2hpbmVfaXNfb3NpcmlzKCkpCisJICAgICFtYWNoaW5lX2lzX2FudWJpcygpICYmICFtYWNoaW5lX2lzX29zaXJpcygpICYmCisJICAgICFtYWNoaW5lX2lzX2FtbF9tNTkwMCgpKQogCQlyZXR1cm4gMDsKIAogCXByaW50ayhLRVJOX0lORk8gIlNpbXRlYyBCb2FyZCBQb3dlciBNYW5hbmdlbWVudCIgQ09QWVJJR0hUICJcbiIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3BtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwppbmRleCBhNTg5ZmU3Li5iNDlhMGIzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uYwpAQCAtMSw5ICsxLDkgQEAKIC8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5jCiAgKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcworICogQ29weXJpZ2h0IChjKSAyMDA0LDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCiAgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CiAgKgotICogUzNDMjQxMCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICogUzNDMjRYWCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL2FybS9TYW1zdW5nLVMzQzI0WFgvU3VzcGVuZC50eHQgZm9yIG1vcmUgaW5mb3JtYXRpb24KICAqCkBAIC0yNCw5ICsyNCw2IEBACiAgKiBQYXJ0cyBiYXNlZCBvbiBhcmNoL2FybS9tYWNoLXB4YS9wbS5jCiAgKgogICogVGhhbmtzIHRvIERpbWl0cnkgQW5kcmljIGZvciBkZWJ1Z2dpbmcKLSAqCi0gKiBNb2RpZmljYXRpb25zOgotICogICAgIDEwLU1hci0yMDA1IExDVlIgIENoYW5nZWQgUzNDMjQxMF9WQV9VQVJUIHRvIFMzQzI0WFhfVkFfVUFSVAogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTM4LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIApAQCAtNTUsMTQgKzUzLDYgQEAKIAogdW5zaWduZWQgbG9uZyBzM2NfcG1fZmxhZ3M7CiAKLS8qIGNhY2hlIGZ1bmN0aW9ucyBmcm9tIGFyY2gvYXJtL21tL3Byb2MtYXJtOTIwLlMgKi8KLQotI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKLWV4dGVybiB2b2lkIGFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbCh2b2lkKTsKLSNlbHNlCi1zdGF0aWMgdm9pZCBhcm05MjBfZmx1c2hfa2Vybl9jYWNoZV9hbGwodm9pZCkgeyB9Ci0jZW5kaWYKLQogI2RlZmluZSBQRlggInMzYzI0eHgtcG06ICIKIAogc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGNvcmVfc2F2ZVtdID0gewpAQCAtOTIsMTkgKzgyLDYgQEAKIAlTQVZFX0lURU0oUzNDMjQxMF9SRUZSRVNIKSwKIH07CiAKLS8qIHRoaXMgbG90IHNob3VsZCBiZSByZWFsbHkgc2F2ZWQgYnkgdGhlIElSUSBjb2RlICovCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgaXJxX3NhdmVbXSA9IHsKLQlTQVZFX0lURU0oUzNDMjQxMF9FWFRJTlQwKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FWFRJTlQxKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FWFRJTlQyKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FSU5GTFQwKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FSU5GTFQxKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FSU5GTFQyKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FSU5GTFQzKSwKLQlTQVZFX0lURU0oUzNDMjQxMF9FSU5UTUFTSyksCi0JU0FWRV9JVEVNKFMzQzI0MTBfSU5UTVNLKQotfTsKLQogc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIGdwaW9fc2F2ZVtdID0gewogCVNBVkVfSVRFTShTM0MyNDEwX0dQQUNPTiksCiAJU0FWRV9JVEVNKFMzQzI0MTBfR1BBREFUKSwKQEAgLTE2NSw3ICsxNDIsNyBAQAogCiBleHRlcm4gdm9pZCBwcmludGFzY2lpKGNvbnN0IGNoYXIgKik7CiAKLXN0YXRpYyB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgcG1fZGJnKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCXZhX2xpc3QgdmE7CiAJY2hhciBidWZmWzI1Nl07CkBAIC01MDksNiArNDg2LDkgQEAKIAl9CiB9CiAKK3ZvaWQgKCpwbV9jcHVfcHJlcCkodm9pZCk7Cit2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKwogI2RlZmluZSBhbnlfYWxsb3dlZChtYXNrLCBhbGxvdykgKCgobWFzaykgJiAoYWxsb3cpKSAhPSAoYWxsb3cpKQogCiAvKiBzM2MyNDEwX3BtX2VudGVyCkBAIC01MTksNyArNDk5LDYgQEAKIHN0YXRpYyBpbnQgczNjMjQxMF9wbV9lbnRlcihzdXNwZW5kX3N0YXRlX3Qgc3RhdGUpCiB7CiAJdW5zaWduZWQgbG9uZyByZWdzX3NhdmVbMTZdOwotCXVuc2lnbmVkIGxvbmcgdG1wOwogCiAJLyogZW5zdXJlIHRoZSBkZWJ1ZyBpcyBpbml0aWFsaXNlZCAoaWYgZW5hYmxlZCkgKi8KIApAQCAtNTI3LDYgKzUwNiwxMSBAQAogCiAJREJHKCJzM2MyNDEwX3BtX2VudGVyKCVkKVxuIiwgc3RhdGUpOwogCisJaWYgKHBtX2NwdV9wcmVwID09IE5VTEwgfHwgcG1fY3B1X3NsZWVwID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiZXJyb3I6IG5vIGNwdSBzbGVlcCBmdW5jdGlvbnMgc2V0XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKHN0YXRlICE9IFBNX1NVU1BFTkRfTUVNKSB7CiAJCXByaW50ayhLRVJOX0VSUiBQRlggImVycm9yOiBvbmx5IFBNX1NVU1BFTkRfTUVNIHN1cHBvcnRlZFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNTU0LDE3ICs1MzgsOSBAQAogCiAJREJHKCJzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cz0weCUwOGx4XG4iLCBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5cyk7CiAKLQkvKiBlbnN1cmUgYXQgbGVhc3QgR0VTVEFUVVMzIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KLQotCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjMjQxMF9jcHVfcmVzdW1lKSwgUzNDMjQxMF9HU1RBVFVTMyk7Ci0KLQlEQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOwotCURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7Ci0KIAkvKiBzYXZlIGFsbCBuZWNlc3NhcnkgY29yZSByZWdpc3RlcnMgbm90IGNvdmVyZWQgYnkgdGhlIGRyaXZlcnMgKi8KIAogCXMzYzI0MTBfcG1fZG9fc2F2ZShncGlvX3NhdmUsIEFSUkFZX1NJWkUoZ3Bpb19zYXZlKSk7Ci0JczNjMjQxMF9wbV9kb19zYXZlKGlycV9zYXZlLCBBUlJBWV9TSVpFKGlycV9zYXZlKSk7CiAJczNjMjQxMF9wbV9kb19zYXZlKGNvcmVfc2F2ZSwgQVJSQVlfU0laRShjb3JlX3NhdmUpKTsKIAlzM2MyNDEwX3BtX2RvX3NhdmUodWFydF9zYXZlLCBBUlJBWV9TSVpFKHVhcnRfc2F2ZSkpOwogCkBAIC01ODEsMTAgKzU1NywxNiBAQAogCS8qIGFjayBhbnkgb3V0c3RhbmRpbmcgZXh0ZXJuYWwgaW50ZXJydXB0cyBiZWZvcmUgd2UgZ28gdG8gc2xlZXAgKi8KIAogCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX0VJTlRQRU5EKSwgUzNDMjQxMF9FSU5UUEVORCk7CisJX19yYXdfd3JpdGVsKF9fcmF3X3JlYWRsKFMzQzI0MTBfSU5UUE5EKSwgUzNDMjQxMF9JTlRQTkQpOworCV9fcmF3X3dyaXRlbChfX3Jhd19yZWFkbChTM0MyNDEwX1NSQ1BORCksIFMzQzI0MTBfU1JDUE5EKTsKKworCS8qIGNhbGwgY3B1IHNwZWNpZmljIHByZXBlcmF0aW9uICovCisKKwlwbV9jcHVfcHJlcCgpOwogCiAJLyogZmx1c2ggY2FjaGUgYmFjayB0byByYW0gKi8KIAotCWFybTkyMF9mbHVzaF9rZXJuX2NhY2hlX2FsbCgpOworCWZsdXNoX2NhY2hlX2FsbCgpOwogCiAJczNjMjQxMF9wbV9jaGVja19zdG9yZSgpOwogCkBAIC01OTIsMjMgKzU3NCwyMyBAQAogCiAJX19yYXdfd3JpdGVsKDB4MDAsIFMzQzI0MTBfQ0xLQ09OKTsgIC8qIHR1cm4gb2ZmIGNsb2NrcyBvdmVyIHNsZWVwICovCiAKLQlzM2MyNDEwX2NwdV9zdXNwZW5kKHJlZ3Nfc2F2ZSk7CisJLyogczNjMjQxMF9jcHVfc2F2ZSB3aWxsIGFsc28gYWN0IGFzIG91ciByZXR1cm4gcG9pbnQgZnJvbSB3aGVuCisJICogd2UgcmVzdW1lIGFzIGl0IHNhdmVzIGl0cyBvd24gcmVnaXN0ZXIgc3RhdGUsIHNvIHVzZSB0aGUgcmV0dXJuCisJICogY29kZSB0byBkaWZmZXJlbnRpYXRlIHJldHVybiBmcm9tIHNhdmUgYW5kIHJldHVybiBmcm9tIHNsZWVwICovCisKKwlpZiAoczNjMjQxMF9jcHVfc2F2ZShyZWdzX3NhdmUpID09IDApIHsKKwkJZmx1c2hfY2FjaGVfYWxsKCk7CisJCXBtX2NwdV9zbGVlcCgpOworCX0KIAogCS8qIHJlc3RvcmUgdGhlIGNwdSBzdGF0ZSAqLwogCiAJY3B1X2luaXQoKTsKIAotCS8qIHVuc2V0IHRoZSByZXR1cm4tZnJvbS1zbGVlcCBmbGFnLCB0byBlbnN1cmUgcmVzZXQgKi8KLQotCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTBfR1NUQVRVUzIpOwotCXRtcCAmPSBTM0MyNDEwX0dTVEFUVVMyX09GRlJFU0VUOwotCV9fcmF3X3dyaXRlbCh0bXAsIFMzQzI0MTBfR1NUQVRVUzIpOwotCiAJLyogcmVzdG9yZSB0aGUgc3lzdGVtIHN0YXRlICovCiAKIAlzM2MyNDEwX3BtX2RvX3Jlc3RvcmVfY29yZShjb3JlX3NhdmUsIEFSUkFZX1NJWkUoY29yZV9zYXZlKSk7CiAJczNjMjQxMF9wbV9kb19yZXN0b3JlKGdwaW9fc2F2ZSwgQVJSQVlfU0laRShncGlvX3NhdmUpKTsKLQlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUoaXJxX3NhdmUsIEFSUkFZX1NJWkUoaXJxX3NhdmUpKTsKIAlzM2MyNDEwX3BtX2RvX3Jlc3RvcmUodWFydF9zYXZlLCBBUlJBWV9TSVpFKHVhcnRfc2F2ZSkpOwogCiAJczNjMjQxMF9wbV9kZWJ1Z19pbml0KCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvcG0uaCBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5oCmluZGV4IDdhNWU3MTQuLmZmZTE5N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5oCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9wbS5oCkBAIC0zNCwxMyArMzQsMTkgQEAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHMzY19pcnF3YWtlX2ludGFsbG93OwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX2lycXdha2VfZWludGFsbG93OwogCisvKiBwZXItY3B1IHNsZWVwIGZ1bmN0aW9ucyAqLworCitleHRlcm4gdm9pZCAoKnBtX2NwdV9wcmVwKSh2b2lkKTsKK2V4dGVybiB2b2lkICgqcG1fY3B1X3NsZWVwKSh2b2lkKTsKKwogLyogRmxhZ3MgZm9yIFBNIENvbnRyb2wgKi8KIAogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgczNjX3BtX2ZsYWdzOwogCiAvKiBmcm9tIHNsZWVwLlMgKi8KIAotZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfc3VzcGVuZCh1bnNpZ25lZCBsb25nICpzYXZlYmxrKTsKK2V4dGVybiBpbnQgIHMzYzI0MTBfY3B1X3NhdmUodW5zaWduZWQgbG9uZyAqc2F2ZWJsayk7CitleHRlcm4gdm9pZCBzM2MyNDEwX2NwdV9zdXNwZW5kKHZvaWQpOwogZXh0ZXJuIHZvaWQgczNjMjQxMF9jcHVfcmVzdW1lKHZvaWQpOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyBzM2MyNDEwX3NsZWVwX3NhdmVfcGh5czsKQEAgLTU3LDMgKzYzLDExIEBACiAKIGV4dGVybiB2b2lkIHMzYzI0MTBfcG1fZG9fc2F2ZShzdHJ1Y3Qgc2xlZXBfc2F2ZSAqcHRyLCBpbnQgY291bnQpOwogZXh0ZXJuIHZvaWQgczNjMjQxMF9wbV9kb19yZXN0b3JlKHN0cnVjdCBzbGVlcF9zYXZlICpwdHIsIGludCBjb3VudCk7CisKKyNpZmRlZiBDT05GSUdfUE0KK2V4dGVybiBpbnQgczNjMjR4eF9pcnFfc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOworZXh0ZXJuIGludCBzM2MyNHh4X2lycV9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldik7CisjZWxzZQorI2RlZmluZSBzM2MyNHh4X2lycV9zdXNwZW5kIE5VTEwKKyNkZWZpbmUgczNjMjR4eF9pcnFfcmVzdW1lICBOVUxMCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFlNTA5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLWRtYS5jCkBAIC0wLDAgKzEsMTU4IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1kbWEuYworICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgRE1BIHNlbGVjdGlvbgorICoKKyAqIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisjaW5jbHVkZSAiZG1hLmgiCisKKyNpbmNsdWRlICJjcHUuaCIKKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2RpLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNwaS5oPgorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTBfZG1hX21hcHBpbmdzW10gPSB7CisJW0RNQUNIX1hEMF0gPSB7CisJCS5uYW1lCQk9ICJ4ZHJlcTAiLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1hEUkVRMCB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9YRDFdID0geworCQkubmFtZQkJPSAieGRyZXExIiwKKwkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9YRFJFUTEgfCBETUFfQ0hfVkFMSUQsCisJfSwKKwlbRE1BQ0hfU0RJXSA9IHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfU0RJIHwgRE1BX0NIX1ZBTElELAorCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19TREkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9TUEkwXSA9IHsKKwkJLm5hbWUJCT0gInNwaTAiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1NQSSB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1NQSSArIFMzQzI0MTBfU1BUREFULAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEwX1NQUkRBVCwKKwl9LAorCVtETUFDSF9TUEkxXSA9IHsKKwkJLm5hbWUJCT0gInNwaTEiLAorCQkuY2hhbm5lbHNbM10JPSBTM0MyNDEwX0RDT05fQ0gzX1NQSSB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgMHgyMCArIFMzQzI0MTBfU1BSREFULAorCX0sCisJW0RNQUNIX1VBUlQwXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQwIiwKKwkJLmNoYW5uZWxzWzBdCT0gUzNDMjQxMF9EQ09OX0NIMF9VQVJUMCB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMCArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9VQVJUMV0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MSIsCisJCS5jaGFubmVsc1sxXQk9IFMzQzI0MTBfRENPTl9DSDFfVUFSVDEgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVRYSCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDEgKyBTM0MyNDEwX1VSWEgsCisJfSwKKyAgICAgIAlbRE1BQ0hfVUFSVDJdID0geworCQkubmFtZQkJPSAidWFydDIiLAorCQkuY2hhbm5lbHNbM10JPSBTM0MyNDEwX0RDT05fQ0gzX1VBUlQyIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDIgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VUlhILAorCX0sCisJW0RNQUNIX1RJTUVSXSA9IHsKKwkJLm5hbWUJCT0gInRpbWVyIiwKKwkJLmNoYW5uZWxzWzBdCT0gUzNDMjQxMF9EQ09OX0NIMF9USU1FUiB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9USU1FUiB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19USU1FUiB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9JMlNfSU5dID0geworCQkubmFtZQkJPSAiaTJzLXNkaSIsCisJCS5jaGFubmVsc1sxXQk9IFMzQzI0MTBfRENPTl9DSDFfSTJTU0RJIHwgRE1BX0NIX1ZBTElELAorCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX0kyU1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCX0sCisJW0RNQUNIX0kyU19PVVRdID0geworCQkubmFtZQkJPSAiaTJzLXNkbyIsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfSTJTU0RPIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCX0sCisJW0RNQUNIX1VTQl9FUDFdID0geworCQkubmFtZQkJPSAidXNiLWVwMSIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfVVNCRVAxIHwgRE1BX0NIX1ZBTElELAorCX0sCisJW0RNQUNIX1VTQl9FUDJdID0geworCQkubmFtZQkJPSAidXNiLWVwMiIsCisJCS5jaGFubmVsc1sxXQk9IFMzQzI0MTBfRENPTl9DSDFfVVNCRVAyIHwgRE1BX0NIX1ZBTElELAorCX0sCisJW0RNQUNIX1VTQl9FUDNdID0geworCQkubmFtZQkJPSAidXNiLWVwMyIsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfVVNCRVAzIHwgRE1BX0NIX1ZBTElELAorCX0sCisJW0RNQUNIX1VTQl9FUDRdID0geworCQkubmFtZQkJPSAidXNiLWVwNCIsCisJCS5jaGFubmVsc1szXQk9UzNDMjQxMF9EQ09OX0NIM19VU0JFUDQgfCBETUFfQ0hfVkFMSUQsCisJfSwKK307CisKK3N0YXRpYyB2b2lkIHMzYzI0MTBfZG1hX3NlbGVjdChzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbiAqY2hhbiwKKwkJCSAgICAgICBzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwICptYXApCit7CisJY2hhbi0+ZGNvbiA9IG1hcC0+Y2hhbm5lbHNbY2hhbi0+bnVtYmVyXSAmIH5ETUFfQ0hfVkFMSUQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgczNjMjR4eF9kbWFfc2VsZWN0aW9uIF9faW5pdGRhdGEgczNjMjQxMF9kbWFfc2VsID0geworCS5zZWxlY3QJCT0gczNjMjQxMF9kbWFfc2VsZWN0LAorCS5kY29uX21hc2sJPSA3IDw8IDI0LAorCS5tYXAJCT0gczNjMjQxMF9kbWFfbWFwcGluZ3MsCisJLm1hcF9zaXplCT0gQVJSQVlfU0laRShzM2MyNDEwX2RtYV9tYXBwaW5ncyksCit9OworCitzdGF0aWMgaW50IHMzYzI0MTBfZG1hX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXJldHVybiBzM2MyNHh4X2RtYV9pbml0X21hcCgmczNjMjQxMF9kbWFfc2VsKTsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0MTBfZG1hX2RyaXZlciA9IHsKKwkuYWRkCT0gczNjMjQxMF9kbWFfYWRkLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQxMF9kbWFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9kbWFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX2RtYV9pbml0KTsKKworLyogUzNDMjQ0MiBETUEgY29udGFpbnMgdGhlIHNhbWUgc2VsZWN0aW9uIHRhYmxlIGFzIHRoZSBTM0MyNDEwICovCisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQyX2RtYV9kcml2ZXIgPSB7CisJLmFkZAk9IHMzYzI0MTBfZG1hX2FkZCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0NDJfZG1hX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0Ml9zeXNjbGFzcywgJnMzYzI0NDJfZG1hX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9kbWFfaW5pdCk7CisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1pcnEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzk2YzljCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtaXJxLmMKQEAgLTAsMCArMSw0OCBAQAorLyogbGludXgvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAtaXJxLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCitzdGF0aWMgaW50IHMzYzI0MTBfaXJxX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9pcnFfZHJpdmVyID0geworCS5hZGQJCT0gczNjMjQxMF9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMF9pcnFfaW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9pcnFfZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDEwX2lycV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXBtLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1MWQ3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jCkBAIC0wLDAgKzEsMTIwIEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1wbS5jCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0MTAgKGFuZCBjb21wYXRpYmxlKSBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJwbS5oIgorCisjaWZkZWYgQ09ORklHX1MzQzI0MTBfUE1fREVCVUcKK2V4dGVybiB2b2lkIHBtX2RiZyhjb25zdCBjaGFyICpmbXQsIC4uLik7CisjZGVmaW5lIERCRyhmbXQuLi4pIHBtX2RiZyhmbXQpCisjZWxzZQorI2RlZmluZSBEQkcoZm10Li4uKSBwcmludGsoS0VSTl9ERUJVRyBmbXQpCisjZW5kaWYKKworc3RhdGljIHZvaWQgczNjMjQxMF9wbV9wcmVwYXJlKHZvaWQpCit7CisJLyogZW5zdXJlIGF0IGxlYXN0IEdTVEFUVVMzIGhhcyB0aGUgcmVzdW1lIGFkZHJlc3MgKi8KKworCV9fcmF3X3dyaXRlbCh2aXJ0X3RvX3BoeXMoczNjMjQxMF9jcHVfcmVzdW1lKSwgUzNDMjQxMF9HU1RBVFVTMyk7CisKKwlEQkcoIkdTVEFUVVMzIDB4JTA4eFxuIiwgX19yYXdfcmVhZGwoUzNDMjQxMF9HU1RBVFVTMykpOworCURCRygiR1NUQVRVUzQgMHglMDh4XG4iLCBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVM0KSk7CisKKwlpZiAoIG1hY2hpbmVfaXNfYW1sX201OTAwKCkgKQorCQlzM2MyNDEwX2dwaW9fc2V0cGluKFMzQzI0MTBfR1BGMiwgMSk7CisKK30KKworaW50IHMzYzI0MTBfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwkvKiB1bnNldCB0aGUgcmV0dXJuLWZyb20tc2xlZXAgZmxhZywgdG8gZW5zdXJlIHJlc2V0ICovCisKKwl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEwX0dTVEFUVVMyKTsKKwl0bXAgJj0gUzNDMjQxMF9HU1RBVFVTMl9PRkZSRVNFVDsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEwX0dTVEFUVVMyKTsKKworCWlmICggbWFjaGluZV9pc19hbWxfbTU5MDAoKSApCisJCXMzYzI0MTBfZ3Bpb19zZXRwaW4oUzNDMjQxMF9HUEYyLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTBfcG1fYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJcG1fY3B1X3ByZXAgPSBzM2MyNDEwX3BtX3ByZXBhcmU7CisJcG1fY3B1X3NsZWVwID0gczNjMjQxMF9jcHVfc3VzcGVuZDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMF9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworLyogcmVnaXN0ZXIgb3Vyc2VsdmVzICovCisKK3N0YXRpYyBpbnQgX19pbml0IHMzYzI0MTBfcG1fZHJ2aW5pdCh2b2lkKQoreworCXJldHVybiBzeXNkZXZfZHJpdmVyX3JlZ2lzdGVyKCZzM2MyNDEwX3N5c2NsYXNzLCAmczNjMjQxMF9wbV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0MTBfcG1fZHJ2aW5pdCk7CisKK3N0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2RyaXZlciBzM2MyNDQwX3BtX2RyaXZlciA9IHsKKwkuYWRkCQk9IHMzYzI0MTBfcG1fYWRkLAorCS5yZXN1bWUJCT0gczNjMjQxMF9wbV9yZXN1bWUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX3BtX2RydmluaXQodm9pZCkKK3sKKwlyZXR1cm4gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmczNjMjQ0MF9zeXNjbGFzcywgJnMzYzI0NDBfcG1fZHJpdmVyKTsKK30KKworYXJjaF9pbml0Y2FsbChzM2MyNDQwX3BtX2RydmluaXQpOworCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0Ml9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEwX3BtX2FkZCwKKwkucmVzdW1lCQk9IHMzYzI0MTBfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIGludCBfX2luaXQgczNjMjQ0Ml9wbV9kcnZpbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQ0Ml9wbV9kcnZpbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXNsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNzlhMTAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC1zbGVlcC5TCkBAIC0wLDAgKzEsNjggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLXNsZWVwLlMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMCBQb3dlciBNYW5hZ2VyIChTdXNwZW5kLVRvLVJBTSkgc3VwcG9ydAorICoKKyAqIEJhc2VkIG9uIFBYQS9TQTExMDAgc2xlZXAgY29kZSBieToKKyAqCU5pY29sYXMgUGl0cmUsIChjKSAyMDAyIE1vbnRhIFZpc3RhIFNvZnR3YXJlIEluYworICoJQ2xpZmYgQnJha2UsIChjKSAyMDAxCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorKi8KKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWFwLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWNsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNlcmlhbC5oPgorCisJLyogczNjMjQxMF9jcHVfc3VzcGVuZAorCSAqCisJICogcHV0IHRoZSBjcHUgaW50byBzbGVlcCBtb2RlCisJKi8KKworRU5UUlkoczNjMjQxMF9jcHVfc3VzcGVuZCkKKwlAQCBwcmVwYXJlIGNwdSB0byBzbGVlcAorCisJbGRyCXI0LCA9UzNDMjQxMF9SRUZSRVNICisJbGRyCXI1LCA9UzNDMjRYWF9NSVNDQ1IKKwlsZHIJcjYsID1TM0MyNDEwX0NMS0NPTgorCWxkcglyNywgWyByNCBdCQlAIGdldCBSRUZSRVNIIChhbmQgZW5zdXJlIGluIFRMQikKKwlsZHIJcjgsIFsgcjUgXQkJQCBnZXQgTUlTQ0NSIChhbmQgZW5zdXJlIGluIFRMQikKKwlsZHIJcjksIFsgcjYgXQkJQCBnZXQgQ0xLQ09OIChhbmQgZW5zdXJlIGluIFRMQikKKworCW9ycglyNywgcjcsICNTM0MyNDEwX1JFRlJFU0hfU0VMRglAIFNEUkFNIHNsZWVwIGNvbW1hbmQKKwlvcnIJcjgsIHI4LCAjUzNDMjQxMF9NSVNDQ1JfU0RTTEVFUCBAIFNEUkFNIHBvd2VyLWRvd24gc2lnbmFscworCW9ycglyOSwgcjksICNTM0MyNDEwX0NMS0NPTl9QT1dFUglAIHBvd2VyIGRvd24gY29tbWFuZAorCisJdGVxCXBjLCAjMAkJCUAgZmlyc3QgYXMgYSB0cmlhbC1ydW4gdG8gbG9hZCBjYWNoZQorCWJsCXMzYzI0MTBfZG9fc2xlZXAKKwl0ZXEJcjAsIHIwCQkJQCBub3cgZG8gaXQgZm9yIHJlYWwKKwliCXMzYzI0MTBfZG9fc2xlZXAJQAorCisJQEAgYWxpZ24gbmV4dCBiaXQgb2YgY29kZSB0byBjYWNoZSBsaW5lCisJLmFsaWduCTgKK3MzYzI0MTBfZG9fc2xlZXA6CisJc3RyZXEJcjcsIFsgcjQgXQkJCUAgU0RSQU0gc2xlZXAgY29tbWFuZAorCXN0cmVxCXI4LCBbIHI1IF0JCQlAIFNEUkFNIHBvd2VyLWRvd24gY29uZmlnCisJc3RyZXEJcjksIFsgcjYgXQkJCUAgQ1BVIHNsZWVwCisxOgliZXEJMWIKKwltb3YJcGMsIHIxNApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEwLmMKaW5kZXggYTExMGNmZi4uMTgzZTQwMyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTAuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMC5jCkBAIC04LDE3ICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqICAgICAxNi1NYXktMjAwMyBCSkQgIENyZWF0ZWQgaW5pdGlhbCB2ZXJzaW9uCi0gKiAgICAgMTYtQXVnLTIwMDMgQkpEICBGaXhlZCBoZWFkZXIgZmlsZXMgYW5kIGNvcHlyaWdodCwgYWRkZWQgVVJMCi0gKiAgICAgMDUtU2VwLTIwMDMgQkpEICBNb3ZlZCB0byBrZXJuZWwgdjIuNgotICogICAgIDE4LUphbi0yMDA0IEJKRCAgQWRkZWQgc2VyaWFsIHBvcnQgY29uZmlndXJhdGlvbgotICogICAgIDIxLUF1Zy0yMDA0IEJKRCAgQWRkZWQgbmV3IHN0cnVjdCBzM2MyNDEwX2JvYXJkIGhhbmRsZXIKLSAqICAgICAyOC1TZXAtMjAwNCBCSkQgIFVwZGF0ZXMgZm9yIG5ldyBzZXJpYWwgcG9ydCBiaXRzCi0gKiAgICAgMDQtTm92LTIwMDQgQkpEICBVcGRhdGVkIFVBUlQgY29uZmlndXJhdGlvbiBwcm9jZXNzCi0gKiAgICAgMTAtSmFuLTIwMDUgQkpEICBSZW1vdmVkIHMzYzI0MTBfY2xvY2tfdGlja19yYXRlCi0gKiAgICAgMTMtQXVnLTIwMDUgREEgICBSZW1vdmVkIFVBUlQgZnJvbSBpbml0aWFsIEkvTyBtYXBwaW5ncwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItZG1hLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1kbWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFmMzcwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItZG1hLmMKQEAgLTAsMCArMSwxNjAgQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLWRtYS5jCisgKgorICogKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogUzNDMjQxMiBETUEgc2VsZWN0aW9uCisgKgorICogaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKworI2luY2x1ZGUgPGFzbS9kbWEuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImRtYS5oIgorI2luY2x1ZGUgImNwdS5oIgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWFjOTcuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLW1lbS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtbGNkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1zZGkuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWlpcy5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc3BpLmg+CisKKyNkZWZpbmUgTUFQKHgpIHsgKHgpfCBETUFfQ0hfVkFMSUQsICh4KXwgRE1BX0NIX1ZBTElELCAoeCl8IERNQV9DSF9WQUxJRCwgKHgpfCBETUFfQ0hfVkFMSUQgfQorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0MTJfZG1hX21hcHBpbmdzW10gPSB7CisJW0RNQUNIX1hEMF0gPSB7CisJCS5uYW1lCQk9ICJ4ZHJlcTAiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfWERSRVEwKSwKKwl9LAorCVtETUFDSF9YRDFdID0geworCQkubmFtZQkJPSAieGRyZXExIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0MTJfRE1BUkVRU0VMX1hEUkVRMSksCisJfSwKKwlbRE1BQ0hfU0RJXSA9IHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9TREkpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfU1BJMF0gPSB7CisJCS5uYW1lCQk9ICJzcGkwIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0MTJfRE1BUkVRU0VMX1NQSTBUWCksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMF9TUFJEQVQsCisJfSwKKwlbRE1BQ0hfU1BJMV0gPSB7CisJCS5uYW1lCQk9ICJzcGkxIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0MTJfRE1BUkVRU0VMX1NQSTFUWCksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFREQVQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAgKyBTM0MyNDEwX1NQUkRBVCwKKwl9LAorCVtETUFDSF9VQVJUMF0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MCIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMF8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMCArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9VQVJUMV0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MSIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMV8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQxICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVJYSCwKKwl9LAorICAgICAgCVtETUFDSF9VQVJUMl0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MiIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMl8wKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9VQVJUMF9TUkMyXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQwIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0MTJfRE1BUkVRU0VMX1VBUlQwXzEpLAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDAgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQwICsgUzNDMjQxMF9VUlhILAorCX0sCisJW0RNQUNIX1VBUlQxX1NSQzJdID0geworCQkubmFtZQkJPSAidWFydDEiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfVUFSVDFfMSksCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMSArIFMzQzI0MTBfVVRYSCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDEgKyBTM0MyNDEwX1VSWEgsCisJfSwKKyAgICAgIAlbRE1BQ0hfVUFSVDJfU1JDMl0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MiIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMl8xKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9USU1FUl0gPSB7CisJCS5uYW1lCQk9ICJ0aW1lciIsCisJCS5jaGFubmVscwk9IE1BUChTM0MyNDEyX0RNQVJFUVNFTF9USU1FUiksCisJfSwKKwlbRE1BQ0hfSTJTX0lOXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZGkiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfSTJTUlgpLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfSTJTX09VVF0gPSB7CisJCS5uYW1lCQk9ICJpMnMtc2RvIiwKKwkJLmNoYW5uZWxzCT0gTUFQKFMzQzI0MTJfRE1BUkVRU0VMX0kyU1RYKSwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9VU0JfRVAxXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDEiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfVVNCRVAxKSwKKwl9LAorCVtETUFDSF9VU0JfRVAyXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDIiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfVVNCRVAyKSwKKwl9LAorCVtETUFDSF9VU0JfRVAzXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDMiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfVVNCRVAzKSwKKwl9LAorCVtETUFDSF9VU0JfRVA0XSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDQiLAorCQkuY2hhbm5lbHMJPSBNQVAoUzNDMjQxMl9ETUFSRVFTRUxfVVNCRVA0KSwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgczNjMjQxMl9kbWFfc2VsZWN0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCkKK3sKKwl3cml0ZWwoY2hhbi0+cmVncyArIFMzQzI0MTJfRE1BX0RNQVJFUVNFTCwKKwkgICAgICAgbWFwLT5jaGFubmVsc1swXSB8IFMzQzI0MTJfRE1BUkVRU0VMX0hXKTsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gX19pbml0ZGF0YSBzM2MyNDEyX2RtYV9zZWwgPSB7CisJLnNlbGVjdAkJPSBzM2MyNDEyX2RtYV9zZWxlY3QsCisJLmRjb25fbWFzawk9IDAsCisJLm1hcAkJPSBzM2MyNDEyX2RtYV9tYXBwaW5ncywKKwkubWFwX3NpemUJPSBBUlJBWV9TSVpFKHMzYzI0MTJfZG1hX21hcHBpbmdzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQxMl9kbWFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDEyX2RtYV9zZWwpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMl9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDEyX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDEyX2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTJfc3lzY2xhc3MsICZzM2MyNDEyX2RtYV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0MTJfZG1hX2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItaXJxLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1pcnEuYwppbmRleCBjODBlYzkzLi43Zjc0MTU0IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1pcnEuYworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi1pcnEuYwpAQCAtMzcsNiArMzcsNyBAQAogCiAjaW5jbHVkZSAiY3B1LmgiCiAjaW5jbHVkZSAiaXJxLmgiCisjaW5jbHVkZSAicG0uaCIKIAogLyogdGhlIHMzYzI0MTIgY2hhbmdlcyB0aGUgYmVoYXZpb3VyIG9mIElSUV9FSU5UMCB0aHJvdWdoIElSUV9FSU5UMyBieQogICogaGF2aW5nIHRoZW0gdHVybiB1cCBpbiBib3RoIHRoZSBJTlQqIGFuZCB0aGUgRUlOVCogcmVnaXN0ZXJzLiBXaGlsc3QKQEAgLTEyMCw2ICsxMjEsOCBAQAogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMl9pcnFfZHJpdmVyID0gewogCS5hZGQJCT0gczNjMjQxMl9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgczNjMjQxMl9pcnFfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTItcG0uYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLXBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTliNjMzMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLXBtLmMKQEAgLTAsMCArMSwxMjggQEAKKy8qIGxpbnV4L2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLXBtLmMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzCisgKglCZW4gRG9va3MgPGJlbkBzaW10ZWMuY28udWs+CisgKgorICogaHR0cDovL2FybWxpbnV4LnNpbXRlYy5jby51ay8uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3MtcG93ZXIuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWdwaW9qLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1kc2MuaD4KKworI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInBtLmgiCisKKyNpbmNsdWRlICJzM2MyNDEyLmgiCisKK3N0YXRpYyB2b2lkIHMzYzI0MTJfY3B1X3N1c3BlbmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCS8qIHNldCBvdXIgc3RhbmRieSBtZXRob2QgdG8gc2xlZXAgKi8KKworCXRtcCA9IF9fcmF3X3JlYWRsKFMzQzI0MTJfUFdSQ0ZHKTsKKwl0bXAgfD0gUzNDMjQxMl9QV1JDRkdfU1RBTkRCWVdGSV9TTEVFUDsKKwlfX3Jhd193cml0ZWwodG1wLCBTM0MyNDEyX1BXUkNGRyk7CisKKwkvKiBpc3N1ZSB0aGUgc3RhbmRieSBzaWduYWwgaW50byB0aGUgcG0gdW5pdC4gTm90ZSwgd2UKKwkgKiBpc3N1ZSBhIHdyaXRlLWJ1ZmZlciBkcmFpbiBqdXN0IGluIGNhc2UgKi8KKworCXRtcCA9IDA7CisKKwlhc20oImIgMWZcblx0IgorCSAgICAiLmFsaWduIDVcblx0IgorCSAgICAiMTpcblx0IgorCSAgICAibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDRcblx0IgorCSAgICAibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICh0bXApKTsKKworCS8qIHdlIHNob3VsZCBuZXZlciBnZXQgcGFzdCBoZXJlICovCisKKwlwYW5pYygic2xlZXAgcmVzdW1lZCB0byBvcmlnaW5hdG9yPyIpOworfQorCitzdGF0aWMgdm9pZCBzM2MyNDEyX3BtX3ByZXBhcmUodm9pZCkKK3sKK30KKworc3RhdGljIGludCBzM2MyNDEyX3BtX2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXBtX2NwdV9wcmVwID0gczNjMjQxMl9wbV9wcmVwYXJlOworCXBtX2NwdV9zbGVlcCA9IHMzYzI0MTJfY3B1X3N1c3BlbmQ7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzbGVlcF9zYXZlIHMzYzI0MTJfc2xlZXBbXSA9IHsKKwlTQVZFX0lURU0oUzNDMjQxMl9EU0MwKSwKKwlTQVZFX0lURU0oUzNDMjQxMl9EU0MxKSwKKwlTQVZFX0lURU0oUzNDMjQxM19HUEpEQVQpLAorCVNBVkVfSVRFTShTM0MyNDEzX0dQSkNPTiksCisJU0FWRV9JVEVNKFMzQzI0MTNfR1BKVVApLAorCisJLyogc2F2ZSB0aGUgUFdSQ0ZHIHRvIGdldCBiYWNrIHRvIG9yaWdpbmFsIHNsZWVwIG1ldGhvZCAqLworCisJU0FWRV9JVEVNKFMzQzI0MTJfUFdSQ0ZHKSwKKworCS8qIHNhdmUgdGhlIHNsZWVwIGNvbmZpZ3VyYXRpb24gYW55d2F5LCBqdXN0IGluIGNhc2UgdGhlc2UKKwkgKiBnZXQgZGFtYWdlZCBkdXJpbmcgd2FrZXVwICovCisKKwlTQVZFX0lURU0oUzNDMjQxMl9HUEJTTFBDT04pLAorCVNBVkVfSVRFTShTM0MyNDEyX0dQQ1NMUENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTJfR1BEU0xQQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMl9HUEVTTFBDT04pLAorCVNBVkVfSVRFTShTM0MyNDEyX0dQRlNMUENPTiksCisJU0FWRV9JVEVNKFMzQzI0MTJfR1BHU0xQQ09OKSwKKwlTQVZFX0lURU0oUzNDMjQxMl9HUEhTTFBDT04pLAorCVNBVkVfSVRFTShTM0MyNDEzX0dQSlNMUENPTiksCit9OworCitzdGF0aWMgaW50IHMzYzI0MTJfcG1fc3VzcGVuZChzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJczNjMjQxMF9wbV9kb19zYXZlKHMzYzI0MTJfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQxMl9zbGVlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHMzYzI0MTJfcG1fcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwl0bXAgPSBfX3Jhd19yZWFkbChTM0MyNDEyX1BXUkNGRyk7CisJdG1wICY9IH5TM0MyNDEyX1BXUkNGR19TVEFOREJZV0ZJX01BU0s7CisJdG1wIHw9ICBTM0MyNDEyX1BXUkNGR19TVEFOREJZV0ZJX0lETEU7CisJX19yYXdfd3JpdGVsKHRtcCwgUzNDMjQxMl9QV1JDRkcpOworCisJczNjMjQxMF9wbV9kb19yZXN0b3JlKHMzYzI0MTJfc2xlZXAsIEFSUkFZX1NJWkUoczNjMjQxMl9zbGVlcCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQxMl9wbV9kcml2ZXIgPSB7CisJLmFkZAkJPSBzM2MyNDEyX3BtX2FkZCwKKwkuc3VzcGVuZAk9IHMzYzI0MTJfcG1fc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0MTJfcG1fcmVzdW1lLAorfTsKKworc3RhdGljIF9faW5pdCBpbnQgczNjMjQxMl9wbV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0MTJfc3lzY2xhc3MsICZzM2MyNDEyX3BtX2RyaXZlcik7Cit9CisKK2FyY2hfaW5pdGNhbGwoczNjMjQxMl9wbV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQxMi5jCmluZGV4IDJkMTYzZjcuLmU3NjQzMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDEyLmMKKysrIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0MTIuYwpAQCAtOCwxNyArOCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKiAgICAgMTYtTWF5LTIwMDMgQkpEICBDcmVhdGVkIGluaXRpYWwgdmVyc2lvbgotICogICAgIDE2LUF1Zy0yMDAzIEJKRCAgRml4ZWQgaGVhZGVyIGZpbGVzIGFuZCBjb3B5cmlnaHQsIGFkZGVkIFVSTAotICogICAgIDA1LVNlcC0yMDAzIEJKRCAgTW92ZWQgdG8ga2VybmVsIHYyLjYKLSAqICAgICAxOC1KYW4tMjAwNCBCSkQgIEFkZGVkIHNlcmlhbCBwb3J0IGNvbmZpZ3VyYXRpb24KLSAqICAgICAyMS1BdWctMjAwNCBCSkQgIEFkZGVkIG5ldyBzdHJ1Y3QgczNjMjQxMF9ib2FyZCBoYW5kbGVyCi0gKiAgICAgMjgtU2VwLTIwMDQgQkpEICBVcGRhdGVzIGZvciBuZXcgc2VyaWFsIHBvcnQgYml0cwotICogICAgIDA0LU5vdi0yMDA0IEJKRCAgVXBkYXRlZCBVQVJUIGNvbmZpZ3VyYXRpb24gcHJvY2VzcwotICogICAgIDEwLUphbi0yMDA1IEJKRCAgUmVtb3ZlZCBzM2MyNDEwX2Nsb2NrX3RpY2tfcmF0ZQotICogICAgIDEzLUF1Zy0yMDA1IERBICAgUmVtb3ZlZCBVQVJUIGZyb20gaW5pdGlhbCBJL08gbWFwcGluZ3MKICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTU2LDYgKzQ1LDEzIEBACiAKICNpZm5kZWYgQ09ORklHX0NQVV9TM0MyNDEyX09OTFkKIHZvaWQgX19pb21lbSAqczNjMjR4eF92YV9ncGlvMiA9IFMzQzI0WFhfVkFfR1BJTzsKKworc3RhdGljIGlubGluZSB2b2lkIHMzYzI0MTJfaW5pdF9ncGlvMih2b2lkKQoreworCXMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU8gKyAweDEwOworfQorI2Vsc2UKKyNkZWZpbmUgczNjMjQxMl9pbml0X2dwaW8yKCkgZG8geyB9IHdoaWxlKDApCiAjZW5kaWYKIAogLyogSW5pdGlhbCBJTyBtYXBwaW5ncyAqLwpAQCAtNzYsNiArNzIsNyBAQAogCiAJLyogcmVuYW1lIGRldmljZXMgdGhhdCBhcmUgczNjMjQxMi9zM2MyNDEzIHNwZWNpZmljICovCiAJczNjX2RldmljZV9zZGkubmFtZSAgPSAiczNjMjQxMi1zZGkiOworCXMzY19kZXZpY2VfbGNkLm5hbWUgID0gInMzYzI0MTItbGNkIjsKIAlzM2NfZGV2aWNlX25hbmQubmFtZSA9ICJzM2MyNDEyLW5hbmQiOwogfQogCkBAIC0xMTAsNyArMTA3LDcgQEAKIHsKIAkvKiBtb3ZlIGJhc2Ugb2YgSU8gKi8KIAotCXMzYzI0eHhfdmFfZ3BpbzIgPSBTM0MyNFhYX1ZBX0dQSU8gKyAweDEwOworCXMzYzI0MTJfaW5pdF9ncGlvMigpOwogCiAJLyogc2V0IG91ciBpZGxlIGZ1bmN0aW9uICovCiAKQEAgLTE2MSw0OCArMTU4LDggQEAKICAqIGFzIGEgZHJpdmVyIHdoaWNoIG1heSBzdXBwb3J0IGJvdGggMjQxMCBhbmQgMjQ0MCBtYXkgdHJ5IGFuZCB1c2UgaXQuCiAqLwogCi0jaWZkZWYgQ09ORklHX1BNCi1zdGF0aWMgc3RydWN0IHNsZWVwX3NhdmUgczNjMjQxMl9zbGVlcFtdID0gewotCVNBVkVfSVRFTShTM0MyNDEyX0RTQzApLAotCVNBVkVfSVRFTShTM0MyNDEyX0RTQzEpLAotCVNBVkVfSVRFTShTM0MyNDEzX0dQSkRBVCksCi0JU0FWRV9JVEVNKFMzQzI0MTNfR1BKQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxM19HUEpVUCksCi0KLQkvKiBzYXZlIHRoZSBzbGVlcCBjb25maWd1cmF0aW9uIGFueXdheSwganVzdCBpbiBjYXNlIHRoZXNlCi0JICogZ2V0IGRhbWFnZWQgZHVyaW5nIHdha2V1cCAqLwotCi0JU0FWRV9JVEVNKFMzQzI0MTJfR1BCU0xQQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMl9HUENTTFBDT04pLAotCVNBVkVfSVRFTShTM0MyNDEyX0dQRFNMUENPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTJfR1BFU0xQQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxMl9HUEZTTFBDT04pLAotCVNBVkVfSVRFTShTM0MyNDEyX0dQR1NMUENPTiksCi0JU0FWRV9JVEVNKFMzQzI0MTJfR1BIU0xQQ09OKSwKLQlTQVZFX0lURU0oUzNDMjQxM19HUEpTTFBDT04pLAotfTsKLQotc3RhdGljIGludCBzM2MyNDEyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXMzYzI0MTBfcG1fZG9fc2F2ZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEyX3Jlc3VtZShzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2KQotewotCXMzYzI0MTBfcG1fZG9fcmVzdG9yZShzM2MyNDEyX3NsZWVwLCBBUlJBWV9TSVpFKHMzYzI0MTJfc2xlZXApKTsKLQlyZXR1cm4gMDsKLX0KLQotI2Vsc2UKLSNkZWZpbmUgczNjMjQxMl9zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQxMl9yZXN1bWUgIE5VTEwKLSNlbmRpZgotCiBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHMzYzI0MTJfc3lzY2xhc3MgPSB7CiAJc2V0X2tzZXRfbmFtZSgiczNjMjQxMi1jb3JlIiksCi0JLnN1c3BlbmQJPSBzM2MyNDEyX3N1c3BlbmQsCi0JLnJlc3VtZQkJPSBzM2MyNDEyX3Jlc3VtZQogfTsKIAogc3RhdGljIGludCBfX2luaXQgczNjMjQxMl9jb3JlX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRtYS5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3MzYzI0NDAtZG1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFlMTA5YwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRtYS5jCkBAIC0wLDAgKzEsMTY0IEBACisvKiBsaW51eC9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kbWEuYworICoKKyAqIChjKSAyMDA2IFNpbXRlYyBFbGVjdHJvbmljcworICoJQmVuIERvb2tzIDxiZW5Ac2ltdGVjLmNvLnVrPgorICoKKyAqIFMzQzI0NDAgRE1BIHNlbGVjdGlvbgorICoKKyAqIGh0dHA6Ly9hcm1saW51eC5zaW10ZWMuY28udWsvCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZGV2Lmg+CisKKyNpbmNsdWRlIDxhc20vZG1hLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZG1hLmg+CisjaW5jbHVkZSAiZG1hLmgiCisKKyNpbmNsdWRlICJjcHUuaCIKKworI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1hYzk3Lmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1tZW0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLWxjZC5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL3JlZ3Mtc2RpLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1paXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9yZWdzLXNwaS5oPgorCitzdGF0aWMgc3RydWN0IHMzYzI0eHhfZG1hX21hcCBfX2luaXRkYXRhIHMzYzI0NDBfZG1hX21hcHBpbmdzW10gPSB7CisJW0RNQUNIX1hEMF0gPSB7CisJCS5uYW1lCQk9ICJ4ZHJlcTAiLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1hEUkVRMCB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9YRDFdID0geworCQkubmFtZQkJPSAieGRyZXExIiwKKwkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9YRFJFUTEgfCBETUFfQ0hfVkFMSUQsCisJfSwKKwlbRE1BQ0hfU0RJXSA9IHsKKwkJLm5hbWUJCT0gInNkaSIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfU0RJIHwgRE1BX0NIX1ZBTElELAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDQwX0RDT05fQ0gxX1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9TREkgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfU0RJIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfSUlTICsgUzNDMjQxMF9JSVNGSUZPLAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfU1BJMF0gPSB7CisJCS5uYW1lCQk9ICJzcGkwIiwKKwkJLmNoYW5uZWxzWzFdCT0gUzNDMjQxMF9EQ09OX0NIMV9TUEkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyBTM0MyNDEwX1NQVERBVCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfU1BJICsgUzNDMjQxMF9TUFJEQVQsCisJfSwKKwlbRE1BQ0hfU1BJMV0gPSB7CisJCS5uYW1lCQk9ICJzcGkxIiwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19TUEkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9TUEkgKyAweDIwICsgUzNDMjQxMF9TUFREQVQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1NQSSArIDB4MjAgKyBTM0MyNDEwX1NQUkRBVCwKKwl9LAorCVtETUFDSF9VQVJUMF0gPSB7CisJCS5uYW1lCQk9ICJ1YXJ0MCIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfVUFSVDAgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9VQVJUMCArIFMzQzI0MTBfVVRYSCwKKwkJLmh3X2FkZHIuZnJvbQk9IFMzQzI0MTBfUEFfVUFSVDAgKyBTM0MyNDEwX1VSWEgsCisJfSwKKwlbRE1BQ0hfVUFSVDFdID0geworCQkubmFtZQkJPSAidWFydDEiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1VBUlQxIHwgRE1BX0NIX1ZBTElELAorCQkuaHdfYWRkci50bwk9IFMzQzI0MTBfUEFfVUFSVDEgKyBTM0MyNDEwX1VUWEgsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX1VBUlQxICsgUzNDMjQxMF9VUlhILAorCX0sCisgICAgICAJW0RNQUNIX1VBUlQyXSA9IHsKKwkJLm5hbWUJCT0gInVhcnQyIiwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQxMF9EQ09OX0NIM19VQVJUMiB8IERNQV9DSF9WQUxJRCwKKwkJLmh3X2FkZHIudG8JPSBTM0MyNDEwX1BBX1VBUlQyICsgUzNDMjQxMF9VVFhILAorCQkuaHdfYWRkci5mcm9tCT0gUzNDMjQxMF9QQV9VQVJUMiArIFMzQzI0MTBfVVJYSCwKKwl9LAorCVtETUFDSF9USU1FUl0gPSB7CisJCS5uYW1lCQk9ICJ0aW1lciIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0MTBfRENPTl9DSDBfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0MTBfRENPTl9DSDJfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1szXQk9IFMzQzI0MTBfRENPTl9DSDNfVElNRVIgfCBETUFfQ0hfVkFMSUQsCisJfSwKKwlbRE1BQ0hfSTJTX0lOXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZGkiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX0kyU1NESSB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9JMlNTREkgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDEwX1BBX0lJUyArIFMzQzI0MTBfSUlTRklGTywKKwl9LAorCVtETUFDSF9JMlNfT1VUXSA9IHsKKwkJLm5hbWUJCT0gImkycy1zZG8iLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDQwX0RDT05fQ0gwX0kyU1NETyB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzJdCT0gUzNDMjQxMF9EQ09OX0NIMl9JMlNTRE8gfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQxMF9QQV9JSVMgKyBTM0MyNDEwX0lJU0ZJRk8sCisJfSwKKwlbRE1BQ0hfUENNX0lOXSA9IHsKKwkJLm5hbWUJCT0gInBjbS1pbiIsCisJCS5jaGFubmVsc1swXQk9IFMzQzI0NDBfRENPTl9DSDBfUENNSU4gfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0NDBfRENPTl9DSDJfUENNSU4gfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19QQ01fREFUQSwKKwl9LAorCVtETUFDSF9QQ01fT1VUXSA9IHsKKwkJLm5hbWUJCT0gInBjbS1vdXQiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDQwX0RDT05fQ0gxX1BDTU9VVCB8IERNQV9DSF9WQUxJRCwKKwkJLmNoYW5uZWxzWzNdCT0gUzNDMjQ0MF9EQ09OX0NIM19QQ01PVVQgfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLnRvCT0gUzNDMjQ0MF9QQV9BQzk3ICsgUzNDX0FDOTdfUENNX0RBVEEsCisJfSwKKwlbRE1BQ0hfTUlDX0lOXSA9IHsKKwkJLm5hbWUJCT0gIm1pYy1pbiIsCisJCS5jaGFubmVsc1syXQk9IFMzQzI0NDBfRENPTl9DSDJfTUlDSU4gfCBETUFfQ0hfVkFMSUQsCisJCS5jaGFubmVsc1szXQk9IFMzQzI0NDBfRENPTl9DSDNfTUlDSU4gfCBETUFfQ0hfVkFMSUQsCisJCS5od19hZGRyLmZyb20JPSBTM0MyNDQwX1BBX0FDOTcgKyBTM0NfQUM5N19NSUNfREFUQSwKKwl9LAorCVtETUFDSF9VU0JfRVAxXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDEiLAorCQkuY2hhbm5lbHNbMF0JPSBTM0MyNDEwX0RDT05fQ0gwX1VTQkVQMSB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVAyXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDIiLAorCQkuY2hhbm5lbHNbMV0JPSBTM0MyNDEwX0RDT05fQ0gxX1VTQkVQMiB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVAzXSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDMiLAorCQkuY2hhbm5lbHNbMl0JPSBTM0MyNDEwX0RDT05fQ0gyX1VTQkVQMyB8IERNQV9DSF9WQUxJRCwKKwl9LAorCVtETUFDSF9VU0JfRVA0XSA9IHsKKwkJLm5hbWUJCT0gInVzYi1lcDQiLAorCQkuY2hhbm5lbHNbM10JPSBTM0MyNDEwX0RDT05fQ0gzX1VTQkVQNCB8IERNQV9DSF9WQUxJRCwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgczNjMjQ0MF9kbWFfc2VsZWN0KHN0cnVjdCBzM2MyNDEwX2RtYV9jaGFuICpjaGFuLAorCQkJICAgICAgIHN0cnVjdCBzM2MyNHh4X2RtYV9tYXAgKm1hcCkKK3sKKwljaGFuLT5kY29uID0gbWFwLT5jaGFubmVsc1tjaGFuLT5udW1iZXJdICYgfkRNQV9DSF9WQUxJRDsKK30KKworc3RhdGljIHN0cnVjdCBzM2MyNHh4X2RtYV9zZWxlY3Rpb24gX19pbml0ZGF0YSBzM2MyNDQwX2RtYV9zZWwgPSB7CisJLnNlbGVjdAkJPSBzM2MyNDQwX2RtYV9zZWxlY3QsCisJLmRjb25fbWFzawk9IDcgPDwgMjQsCisJLm1hcAkJPSBzM2MyNDQwX2RtYV9tYXBwaW5ncywKKwkubWFwX3NpemUJPSBBUlJBWV9TSVpFKHMzYzI0NDBfZG1hX21hcHBpbmdzKSwKK307CisKK3N0YXRpYyBpbnQgczNjMjQ0MF9kbWFfYWRkKHN0cnVjdCBzeXNfZGV2aWNlICpzeXNkZXYpCit7CisJcmV0dXJuIHMzYzI0eHhfZG1hX2luaXRfbWFwKCZzM2MyNDQwX2RtYV9zZWwpOworfQorCitzdGF0aWMgc3RydWN0IHN5c2Rldl9kcml2ZXIgczNjMjQ0MF9kbWFfZHJpdmVyID0geworCS5hZGQJPSBzM2MyNDQwX2RtYV9hZGQsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzM2MyNDQwX2RtYV9pbml0KHZvaWQpCit7CisJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDBfc3lzY2xhc3MsICZzM2MyNDQwX2RtYV9kcml2ZXIpOworfQorCithcmNoX2luaXRjYWxsKHMzYzI0NDBfZG1hX2luaXQpOworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1kc2MuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jCmluZGV4IDE2ZmEyYTMuLmM5MmVhNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWRzYy5jCkBAIC04LDExICs4LDYgQEAKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogTW9kaWZpY2F0aW9uczoKLSAqICAgICAyOS1BdWctMjAwNCBCSkQgIFN0YXJ0IG9mIGRyaXZlLXN0cmVuZ3RoIGNvbnRyb2wKLSAqICAgICAwOS1Ob3YtMjAwNCBCSkQgIEFkZGVkIHN5bWJvbCBleHBvcnQKLSAqICAgICAxMS1KYW4tMjAwNSBCSkQgIEluY2x1ZGUgZml4CiAqLwogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0MC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCmluZGV4IDE2NjdiYTEuLmZjMDhmZWIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDQwLWlycS5jCkBAIC0xMTksNyArMTE5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfaXJxX2RyaXZlciA9IHsKLQkuYWRkCT0gczNjMjQ0MF9pcnFfYWRkLAorCS5hZGQJCT0gczNjMjQ0MF9pcnFfYWRkLAogfTsKIAogc3RhdGljIGludCBzM2MyNDQwX2lycV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvczNjMjQ0eC1pcnEuYyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCmluZGV4IDQ0YzVhZmYuLjBkMTM1NDYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC9zM2MyNDR4LWlycS5jCkBAIC0xMjAsNyArMTIwLDkgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDBfaXJxX2RyaXZlciA9IHsKLQkuYWRkCT0gczNjMjQ0eF9pcnFfYWRkLAorCS5hZGQJCT0gczNjMjQ0eF9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgczNjMjQ0MF9pcnFfaW5pdCh2b2lkKQpAQCAtMTMxLDkgKzEzMywxMiBAQAogYXJjaF9pbml0Y2FsbChzM2MyNDQwX2lycV9pbml0KTsKIAogc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHMzYzI0NDJfaXJxX2RyaXZlciA9IHsKLQkuYWRkCT0gczNjMjQ0eF9pcnFfYWRkLAorCS5hZGQJCT0gczNjMjQ0eF9pcnFfYWRkLAorCS5zdXNwZW5kCT0gczNjMjR4eF9pcnFfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHMzYzI0eHhfaXJxX3Jlc3VtZSwKIH07CiAKKwogc3RhdGljIGludCBzM2MyNDQyX2lycV9pbml0KHZvaWQpCiB7CiAJcmV0dXJuIHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJnMzYzI0NDJfc3lzY2xhc3MsICZzM2MyNDQyX2lycV9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3NsZWVwLlMgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwppbmRleCBhNzU2MWE3Li4yMDE4YzJlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUworKysgYi9hcmNoL2FybS9tYWNoLXMzYzI0MTAvc2xlZXAuUwpAQCAtNDEsMTUgKzQxLDI1IEBACiAKIAkudGV4dAogCi0JLyogczNjMjQxMF9jcHVfc3VzcGVuZAorCS8qIHMzYzI0MTBfY3B1X3NhdmUKIAkgKgotCSAqIHB1dCB0aGUgY3B1IGludG8gc2xlZXAgbW9kZQorCSAqIHNhdmUgZW5vdWdoIG9mIHRoZSBDUFUgc3RhdGUgdG8gYWxsb3cgdXMgdG8gcmUtc3RhcnQKKwkgKiBwbS5jIGNvZGUuIGFzIHdlIHN0b3JlIGl0ZW1zIGxpa2UgdGhlIHNwL2xyLCB3ZSB3aWxsCisJICogZW5kIHVwIHJldHVybmluZyBmcm9tIHRoaXMgZnVuY3Rpb24gd2hlbiB0aGUgY3B1IHJlc3VtZXMKKwkgKiBzbyB0aGUgcmV0dXJuIHZhbHVlIGlzIHNldCB0byBtYXJrIHRoaXMuCisJICoKKwkgKiBUaGlzIGFyYW5nZW1lbnQgbWVhbnMgd2UgYXZvaWQgaGF2aW5nIHRvIGZsdXNoIHRoZSBjYWNoZQorCSAqIGZyb20gdGhpcyBjb2RlLgogCSAqCiAJICogZW50cnk6Ci0JICoJcjAgPSBzbGVlcCBzYXZlIGJsb2NrCisJICoJcjAgPSBwb2ludGVyIHRvIHNhdmUgYmxvY2sKKwkgKgorCSAqIGV4aXQ6CisJICoJcjAgPSAwID0+IHdlIHN0b3JlZCBldmVyeXRoaW5nCisJICoJICAgICAxID0+IHJlc3VtZWQgZnJvbSBzbGVlcAogCSovCiAKLUVOVFJZKHMzYzI0MTBfY3B1X3N1c3BlbmQpCitFTlRSWShzM2MyNDEwX2NwdV9zYXZlKQogCXN0bWZkCXNwISwgeyByNCAtIHIxMiwgbHIgfQogCiAJQEAgc3RvcmUgY28tcHJvY2Vzc29yIHJlZ2lzdGVycwpAQCAtNjIsNDQgKzcyLDE0IEBACiAKIAlzdG1pYQlyMCwgeyByNCAtIHIxMyB9CiAKLQlAQCBmbHVzaCB0aGUgY2FjaGVzIHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIGJhY2sgb3V0IHRvCi0JQEAgU0RSQU0gYmVmb3JlIHRoZSBjb3JlIHBvd2VycyBkb3duCi0KLSNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICi0JYmwJYXJtOTIwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCi0jZW5kaWYKLQotCUBAIHByZXBhcmUgY3B1IHRvIHNsZWVwCi0KLQlsZHIJcjQsID1TM0MyNDEwX1JFRlJFU0gKLQlsZHIJcjUsID1TM0MyNFhYX01JU0NDUgotCWxkcglyNiwgPVMzQzI0MTBfQ0xLQ09OCi0JbGRyCXI3LCBbIHI0IF0JCUAgZ2V0IFJFRlJFU0ggKGFuZCBlbnN1cmUgaW4gVExCKQotCWxkcglyOCwgWyByNSBdCQlAIGdldCBNSVNDQ1IgKGFuZCBlbnN1cmUgaW4gVExCKQotCWxkcglyOSwgWyByNiBdCQlAIGdldCBDTEtDT04gKGFuZCBlbnN1cmUgaW4gVExCKQotCi0Jb3JyCXI3LCByNywgI1MzQzI0MTBfUkVGUkVTSF9TRUxGCUAgU0RSQU0gc2xlZXAgY29tbWFuZAotCW9ycglyOCwgcjgsICNTM0MyNDEwX01JU0NDUl9TRFNMRUVQIEAgU0RSQU0gcG93ZXItZG93biBzaWduYWxzCi0Jb3JyCXI5LCByOSwgI1MzQzI0MTBfQ0xLQ09OX1BPV0VSCUAgcG93ZXIgZG93biBjb21tYW5kCi0KLQl0ZXEJcGMsICMwCQkJQCBmaXJzdCBhcyBhIHRyaWFsLXJ1biB0byBsb2FkIGNhY2hlCi0JYmwJczNjMjQxMF9kb19zbGVlcAotCXRlcQlyMCwgcjAJCQlAIG5vdyBkbyBpdCBmb3IgcmVhbAotCWIJczNjMjQxMF9kb19zbGVlcAlACi0KLQlAQCBhbGlnbiBuZXh0IGJpdCBvZiBjb2RlIHRvIGNhY2hlIGxpbmUKLQkuYWxpZ24JOAotczNjMjQxMF9kb19zbGVlcDoKLQlzdHJlcQlyNywgWyByNCBdCQkJQCBTRFJBTSBzbGVlcCBjb21tYW5kCi0Jc3RyZXEJcjgsIFsgcjUgXQkJCUAgU0RSQU0gcG93ZXItZG93biBjb25maWcKLQlzdHJlcQlyOSwgWyByNiBdCQkJQCBDUFUgc2xlZXAKLTE6CWJlcQkxYgotCW1vdglwYywgcjE0CisJbW92CXIwLCAjMAorCWxkbWZkCXNwLCB7IHI0IC0gcjEyLCBwYyB9CiAKIAlAQCByZXR1cm4gdG8gdGhlIGNhbGxlciwgYWZ0ZXIgaGF2aW5nIHRoZSBNTVUKIAlAQCB0dXJuZWQgb24sIHRoaXMgcmVzdG9yZXMgdGhlIGxhc3QgYml0cyBmcm9tIHRoZQogCUBAIHN0YWNrCiByZXN1bWVfd2l0aF9tbXU6CisJbW92CXIwLCAjMQogCWxkbWZkCXNwISwgeyByNCAtIHIxMiwgcGMgfQogCiAJLmx0b3JnCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jIGIvYXJjaC9hcm0vbWFjaC1zM2MyNDEwL3VzYi1zaW10ZWMuYwppbmRleCA2YjIyZDhmLi5jNjM1ZWZhIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXMzYzI0MTAvdXNiLXNpbXRlYy5jCisrKyBiL2FyY2gvYXJtL21hY2gtczNjMjQxMC91c2Itc2ltdGVjLmMKQEAgLTEwLDEyICsxMCw2IEBACiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSAqIE1vZGlmaWNhdGlvbnM6Ci0gKgkxNC1TZXAtMjAwNCBCSkQgIENyZWF0ZWQKLSAqCTE4LU9jdC0yMDA0IEJKRCAgQ2xlYW51cHMsIGFuZCBhZGRlZCBjb2RlIHRvIHJlcG9ydCBPQyBjbGVhcmVkCi0gKgkwOS1BdWctMjAwNSBCSkQgIFJlbmFtZWQgczNjMjQxMF9yZXBvcnRfb2MgdG8gczNjMjQxMF91c2JfcmVwb3J0X29jCi0gKgkwOS1BdWctMjAwNSBCSkQgIFBvcnRzIHBvd2VyZWQgb25seSBpZiBib3RoIGFyZSBlbmFibGVkCiAqLwogCiAjZGVmaW5lIERFQlVHCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXNhMTEwMC9jb2xsaWUuYyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCmluZGV4IGEwZGZhMzkuLjY0OTZlYjYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCisrKyBiL2FyY2gvYXJtL21hY2gtc2ExMTAwL2NvbGxpZS5jCkBAIC05MSwzMCArOTEsMjkgQEAKIC8qCiAgKiBsb3ctbGV2ZWwgVUFSVCBmZWF0dXJlcy4KICAqLwotc3RhdGljIHN0cnVjdCBsb2NvbW9fZGV2ICp1YXJ0X2RldiA9IE5VTEw7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZV9sb2NvbW9fZGV2aWNlOwogCiBzdGF0aWMgdm9pZCBjb2xsaWVfdWFydF9zZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdV9pbnQgbWN0cmwpCiB7Ci0gCWlmICghdWFydF9kZXYpIHJldHVybjsKLQogIAlpZiAobWN0cmwgJiBUSU9DTV9SVFMpCi0JCWxvY29tb19ncGlvX3dyaXRlKHVhcnRfZGV2LCBMT0NPTU9fR1BJT19SVFMsIDApOworCQlsb2NvbW9fZ3Bpb193cml0ZSgmY29sbGllX2xvY29tb19kZXZpY2UuZGV2LCBMT0NPTU9fR1BJT19SVFMsIDApOwogIAllbHNlCi0JCWxvY29tb19ncGlvX3dyaXRlKHVhcnRfZGV2LCBMT0NPTU9fR1BJT19SVFMsIDEpOworCQlsb2NvbW9fZ3Bpb193cml0ZSgmY29sbGllX2xvY29tb19kZXZpY2UuZGV2LCBMT0NPTU9fR1BJT19SVFMsIDEpOwogCiAgCWlmIChtY3RybCAmIFRJT0NNX0RUUikKLQkJbG9jb21vX2dwaW9fd3JpdGUodWFydF9kZXYsIExPQ09NT19HUElPX0RUUiwgMCk7CisJCWxvY29tb19ncGlvX3dyaXRlKCZjb2xsaWVfbG9jb21vX2RldmljZS5kZXYsIExPQ09NT19HUElPX0RUUiwgMCk7CiAgCWVsc2UKLQkJbG9jb21vX2dwaW9fd3JpdGUodWFydF9kZXYsIExPQ09NT19HUElPX0RUUiwgMSk7CisJCWxvY29tb19ncGlvX3dyaXRlKCZjb2xsaWVfbG9jb21vX2RldmljZS5kZXYsIExPQ09NT19HUElPX0RUUiwgMSk7CiB9CiAKIHN0YXRpYyB1X2ludCBjb2xsaWVfdWFydF9nZXRfbWN0cmwoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpbnQgcmV0ID0gVElPQ01fQ0Q7CiAJdW5zaWduZWQgaW50IHI7Ci0JaWYgKCF1YXJ0X2RldikgcmV0dXJuIHJldDsKIAotCXIgPSBsb2NvbW9fZ3Bpb19yZWFkX291dHB1dCh1YXJ0X2RldiwgTE9DT01PX0dQSU9fQ1RTICYgTE9DT01PX0dQSU9fRFNSKTsKKwlyID0gbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoJmNvbGxpZV9sb2NvbW9fZGV2aWNlLmRldiwgTE9DT01PX0dQSU9fQ1RTICYgTE9DT01PX0dQSU9fRFNSKTsKKwlpZiAociA9PSAtRU5PREVWKQorCQlyZXR1cm4gcmV0OwogCWlmIChyICYgTE9DT01PX0dQSU9fQ1RTKQogCQlyZXQgfD0gVElPQ01fQ1RTOwogCWlmIChyICYgTE9DT01PX0dQSU9fRFNSKQpAQCAtMTMwLDEzICsxMjksMTEgQEAKIAogc3RhdGljIGludCBjb2xsaWVfdWFydF9wcm9iZShzdHJ1Y3QgbG9jb21vX2RldiAqZGV2KQogewotCXVhcnRfZGV2ID0gZGV2OwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGNvbGxpZV91YXJ0X3JlbW92ZShzdHJ1Y3QgbG9jb21vX2RldiAqZGV2KQogewotCXVhcnRfZGV2ID0gTlVMTDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTcwLDcgKzE2Nyw3IEBACiAJfSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGxvY29tb19kZXZpY2UgPSB7CitzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGNvbGxpZV9sb2NvbW9fZGV2aWNlID0gewogCS5uYW1lCQk9ICJsb2NvbW8iLAogCS5pZAkJPSAwLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShsb2NvbW9fcmVzb3VyY2VzKSwKQEAgLTE3OCw3ICsxNzUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldmljZXNbXSBfX2luaXRkYXRhID0gewotCSZsb2NvbW9fZGV2aWNlLAorCSZjb2xsaWVfbG9jb21vX2RldmljZSwKIAkmY29sbGllc2Nvb3BfZGV2aWNlLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbWFjaC12ZXJzYXRpbGUvcGNpLmMgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwppbmRleCA0MWIzNzAwLi4xM2JiZDA4IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYworKysgYi9hcmNoL2FybS9tYWNoLXZlcnNhdGlsZS9wY2kuYwpAQCAtMTE3LDcgKzExNyw2IEBACiAJfSBlbHNlIHsKIAkJc3dpdGNoIChzaXplKSB7CiAJCWNhc2UgMToKLQkJCWFkZHIgJj0gfjM7CiAJCQl2ID0gX19yYXdfcmVhZGIoYWRkcik7CiAJCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vS2NvbmZpZyBiL2FyY2gvYXJtL21tL0tjb25maWcKaW5kZXggYjRmMjIwZGQuLmMwYmZiODIgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL0tjb25maWcKKysrIGIvYXJjaC9hcm0vbW0vS2NvbmZpZwpAQCAtMTUsNiArMTUsNyBAQAogCXNlbGVjdCBDUFVfMzJ2MwogCXNlbGVjdCBDUFVfQ0FDSEVfVjMKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1YzIGlmIE1NVQogCXNlbGVjdCBDUFVfVExCX1YzIGlmIE1NVQogCWhlbHAKQEAgLTI0LDYgKzI1LDIwIEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNNjEwIHByb2Nlc3Nvci4KIAkgIE90aGVyd2lzZSwgc2F5IE4uCiAKKyMgQVJNN1RETUkKK2NvbmZpZyBDUFVfQVJNN1RETUkKKwlib29sICJTdXBwb3J0IEFSTTdURE1JIHByb2Nlc3NvciIKKwlkZXBlbmRzIG9uICFNTVUKKwlzZWxlY3QgQ1BVXzMydjRUCisJc2VsZWN0IENQVV9BQlJUX0xWNFQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1Y0CisJaGVscAorCSAgQSAzMi1iaXQgUklTQyBtaWNyb3Byb2Nlc3NvciBiYXNlZCBvbiB0aGUgQVJNNyBwcm9jZXNzb3IgY29yZQorCSAgd2hpY2ggaGFzIG5vIG1lbW9yeSBjb250cm9sIHVuaXQgYW5kIGNhY2hlLgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNN1RETUkgcHJvY2Vzc29yLgorCSAgT3RoZXJ3aXNlLCBzYXkgTi4KKwogIyBBUk03MTAKIGNvbmZpZyBDUFVfQVJNNzEwCiAJYm9vbCAiU3VwcG9ydCBBUk03MTAgcHJvY2Vzc29yIiBpZiAhQVJDSF9DTFBTNzUwMCAmJiBBUkNIX1JQQwpAQCAtMzEsNiArNDYsNyBAQAogCXNlbGVjdCBDUFVfMzJ2MwogCXNlbGVjdCBDUFVfQ0FDSEVfVjMKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1YzIGlmIE1NVQogCXNlbGVjdCBDUFVfVExCX1YzIGlmIE1NVQogCWhlbHAKQEAgLTUwLDYgKzY2LDcgQEAKIAlzZWxlY3QgQ1BVX0FCUlRfTFY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V1QgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXVCBpZiBNTVUKIAloZWxwCkBAIC01OSw2ICs3NiwzNiBAQAogCSAgU2F5IFkgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgdGhlIEFSTTcyMFQgcHJvY2Vzc29yLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KIAorIyBBUk03NDBUCitjb25maWcgQ1BVX0FSTTc0MFQKKwlib29sICJTdXBwb3J0IEFSTTc0MFQgcHJvY2Vzc29yIiBpZiBBUkNIX0lOVEVHUkFUT1IKKwlkZXBlbmRzIG9uICFNTVUKKwlzZWxlY3QgQ1BVXzMydjRUCisJc2VsZWN0IENQVV9BQlJUX0xWNFQKKwlzZWxlY3QgQ1BVX0NBQ0hFX1YzCSMgYWx0aG91Z2ggdGhlIGNvcmUgaXMgdjR0CisJc2VsZWN0IENQVV9DUDE1X01QVQorCWhlbHAKKwkgIEEgMzItYml0IFJJU0MgcHJvY2Vzc29yIHdpdGggOEtCIGNhY2hlIG9yIDRLQiB2YXJpYW50cywKKwkgIHdyaXRlIGJ1ZmZlciBhbmQgTVBVKFByb3RlY3Rpb24gVW5pdCkgYnVpbHQgYXJvdW5kCisJICBhbiBBUk03VERNSSBjb3JlLgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNNzQwVCBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCisjIEFSTTlURE1JCitjb25maWcgQ1BVX0FSTTlURE1JCisJYm9vbCAiU3VwcG9ydCBBUk05VERNSSBwcm9jZXNzb3IiCisJZGVwZW5kcyBvbiAhTU1VCisJc2VsZWN0IENQVV8zMnY0VAorCXNlbGVjdCBDUFVfQUJSVF9OT01NVQorCXNlbGVjdCBDUFVfQ0FDSEVfVjQKKwloZWxwCisJICBBIDMyLWJpdCBSSVNDIG1pY3JvcHJvY2Vzc29yIGJhc2VkIG9uIHRoZSBBUk05IHByb2Nlc3NvciBjb3JlCisJICB3aGljaCBoYXMgbm8gbWVtb3J5IGNvbnRyb2wgdW5pdCBhbmQgY2FjaGUuCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk05VERNSSBwcm9jZXNzb3IuCisJICBPdGhlcndpc2UsIHNheSBOLgorCiAjIEFSTTkyMFQKIGNvbmZpZyBDUFVfQVJNOTIwVAogCWJvb2wgIlN1cHBvcnQgQVJNOTIwVCBwcm9jZXNzb3IiCkBAIC02OCw2ICsxMTUsNyBAQAogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WNFdUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCWhlbHAKQEAgLTg5LDYgKzEzNyw3IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscApAQCAtMTA4LDYgKzE1Nyw3IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNFQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y0V1QKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9DT1BZX1Y0V0IgaWYgTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAgCWhlbHAKQEAgLTEyNiw2ICsxNzYsNyBAQAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUSgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCkBAIC0xMzYsNiArMTg3LDM5IEBACiAJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTI2VCBwcm9jZXNzb3IuCiAJICBPdGhlcndpc2UsIHNheSBOLgogCisjIEFSTTk0MFQKK2NvbmZpZyBDUFVfQVJNOTQwVAorCWJvb2wgIlN1cHBvcnQgQVJNOTQwVCBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWRlcGVuZHMgb24gIU1NVQorCXNlbGVjdCBDUFVfMzJ2NFQKKwlzZWxlY3QgQ1BVX0FCUlRfTk9NTVUKKwlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTVBVCisJaGVscAorCSAgQVJNOTQwVCBpcyBhIG1lbWJlciBvZiB0aGUgQVJNOVRETUkgZmFtaWx5IG9mIGdlbmVyYWwtCisJICBwdXJwb3NlIG1pY3JvcHJvY2Vzc29ycyB3aXRoIE1QVSBhbmQgc2VwZXJhdGUgNEtCCisJICBpbnN0cnVjdGlvbiBhbmQgNEtCIGRhdGEgY2FzZXMsIGVhY2ggd2l0aCBhIDQtd29yZCBsaW5lCisJICBsZW5ndGguCisKKwkgIFNheSBZIGlmIHlvdSB3YW50IHN1cHBvcnQgZm9yIHRoZSBBUk05NDBUIHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKKyMgQVJNOTQ2RS1TCitjb25maWcgQ1BVX0FSTTk0NkUKKwlib29sICJTdXBwb3J0IEFSTTk0NkUtUyBwcm9jZXNzb3IiIGlmIEFSQ0hfSU5URUdSQVRPUgorCWRlcGVuZHMgb24gIU1NVQorCXNlbGVjdCBDUFVfMzJ2NQorCXNlbGVjdCBDUFVfQUJSVF9OT01NVQorCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NUFUKKwloZWxwCisJICBBUk05NDZFLVMgaXMgYSBtZW1iZXIgb2YgdGhlIEFSTTlFLVMgZmFtaWx5IG9mIGhpZ2gtCisJICBwZXJmb3JtYW5jZSwgMzItYml0IHN5c3RlbS1vbi1jaGlwIHByb2Nlc3NvciBzb2x1dGlvbnMuCisJICBUaGUgVENNIGFuZCBBUk12NVRFIDMyLWJpdCBpbnN0cnVjdGlvbiBzZXQgaXMgc3VwcG9ydGVkLgorCisJICBTYXkgWSBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciB0aGUgQVJNOTQ2RS1TIHByb2Nlc3Nvci4KKwkgIE90aGVyd2lzZSwgc2F5IE4uCisKICMgQVJNMTAyMCAtIG5lZWRzIHZhbGlkYXRpbmcKIGNvbmZpZyBDUFVfQVJNMTAyMAogCWJvb2wgIlN1cHBvcnQgQVJNMTAyMFQgKHJldiAwKSBwcm9jZXNzb3IiCkBAIC0xNDQsNiArMjI4LDcgQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCkBAIC0xNjEsNiArMjQ2LDcgQEAKIAlzZWxlY3QgQ1BVX0FCUlRfRVY0VAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXVAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAlkZXBlbmRzIG9uIG4KQEAgLTE3Miw2ICsyNTgsNyBAQAogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjRUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNFdCIGlmIE1NVSAjIGNhbiBwcm9iYWJseSBkbyBiZXR0ZXIKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCSSBpZiBNTVUKIAloZWxwCkBAIC0xODksNiArMjc2LDcgQEAKIAlzZWxlY3QgQ1BVXzMydjUKIAlzZWxlY3QgQ1BVX0FCUlRfRVY1VCAjIEJ1dCBuZWVkIEphemVsbGUsIGJ1dCBFVjVUSiBpZ25vcmVzIGJpdCAxMAogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUgIyBjYW4gcHJvYmFibHkgZG8gYmV0dGVyCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJaGVscApAQCAtMjA3LDYgKzI5NSw3IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX0NPUFlfVjRXQiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCIGlmIE1NVQogCWhlbHAKQEAgLTIyNywxNiArMzE2LDE4IEBACiAJc2VsZWN0IENQVV9BQlJUX0VWNAogCXNlbGVjdCBDUFVfQ0FDSEVfVjRXQgogCXNlbGVjdCBDUFVfQ0FDSEVfVklWVAorCXNlbGVjdCBDUFVfQ1AxNV9NTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNFdCIGlmIE1NVQogCiAjIFhTY2FsZQogY29uZmlnIENQVV9YU0NBTEUKIAlib29sCi0JZGVwZW5kcyBvbiBBUkNIX0lPUDNYWCB8fCBBUkNIX1BYQSB8fCBBUkNIX0lYUDRYWCB8fCBBUkNIX0lYUDIwMDAKKwlkZXBlbmRzIG9uIEFSQ0hfSU9QMzJYIHx8IEFSQ0hfSU9QMzNYIHx8IEFSQ0hfUFhBIHx8IEFSQ0hfSVhQNFhYIHx8IEFSQ0hfSVhQMjAwMAogCWRlZmF1bHQgeQogCXNlbGVjdCBDUFVfMzJ2NQogCXNlbGVjdCBDUFVfQUJSVF9FVjVUCiAJc2VsZWN0IENQVV9DQUNIRV9WSVZUCisJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfVExCX1Y0V0JJIGlmIE1NVQogCiAjIFhTY2FsZSBDb3JlIFZlcnNpb24gMwpAQCAtMjQ3LDYgKzMzOCw3IEBACiAJc2VsZWN0IENQVV8zMnY1CiAJc2VsZWN0IENQVV9BQlJUX0VWNVQKIAlzZWxlY3QgQ1BVX0NBQ0hFX1ZJVlQKKwlzZWxlY3QgQ1BVX0NQMTVfTU1VCiAJc2VsZWN0IENQVV9UTEJfVjRXQkkgaWYgTU1VCiAJc2VsZWN0IElPXzM2CiAKQEAgLTI1OCw2ICszNTAsNyBAQAogCXNlbGVjdCBDUFVfQUJSVF9FVjYKIAlzZWxlY3QgQ1BVX0NBQ0hFX1Y2CiAJc2VsZWN0IENQVV9DQUNIRV9WSVBUCisJc2VsZWN0IENQVV9DUDE1X01NVQogCXNlbGVjdCBDUFVfQ09QWV9WNiBpZiBNTVUKIAlzZWxlY3QgQ1BVX1RMQl9WNiBpZiBNTVUKIApAQCAtMjk5LDYgKzM5Miw5IEBACiAJYm9vbAogCiAjIFRoZSBhYm9ydCBtb2RlbAorY29uZmlnIENQVV9BQlJUX05PTU1VCisJYm9vbAorCiBjb25maWcgQ1BVX0FCUlRfRVY0CiAJYm9vbAogCkBAIC0zODAsNiArNDc2LDIzIEBACiAKIGVuZGlmCiAKK2NvbmZpZyBDUFVfQ1AxNQorCWJvb2wKKwloZWxwCisJICBQcm9jZXNzb3IgaGFzIHRoZSBDUDE1IHJlZ2lzdGVyLgorCitjb25maWcgQ1BVX0NQMTVfTU1VCisJYm9vbAorCXNlbGVjdCBDUFVfQ1AxNQorCWhlbHAKKwkgIFByb2Nlc3NvciBoYXMgdGhlIENQMTUgcmVnaXN0ZXIsIHdoaWNoIGhhcyBNTVUgcmVsYXRlZCByZWdpc3RlcnMuCisKK2NvbmZpZyBDUFVfQ1AxNV9NUFUKKwlib29sCisJc2VsZWN0IENQVV9DUDE1CisJaGVscAorCSAgUHJvY2Vzc29yIGhhcyB0aGUgQ1AxNSByZWdpc3Rlciwgd2hpY2ggaGFzIE1QVSByZWxhdGVkIHJlZ2lzdGVycy4KKwogIwogIyBDUFUgc3VwcG9ydHMgMzYtYml0IEkvTwogIwpAQCAtMzkwLDcgKzUwMyw3IEBACiAKIGNvbmZpZyBBUk1fVEhVTUIKIAlib29sICJTdXBwb3J0IFRodW1iIHVzZXIgYmluYXJpZXMiCi0JZGVwZW5kcyBvbiBDUFVfQVJNNzIwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfQVJNMTAyMEUgfHwgQ1BVX0FSTTEwMjIgfHwgQ1BVX0FSTTEwMjYgfHwgQ1BVX1hTQ0FMRSB8fCBDUFVfWFNDMyB8fCBDUFVfVjYKKwlkZXBlbmRzIG9uIENQVV9BUk03MjBUIHx8IENQVV9BUk03NDBUIHx8IENQVV9BUk05MjBUIHx8IENQVV9BUk05MjJUIHx8IENQVV9BUk05MjVUIHx8IENQVV9BUk05MjZUIHx8IENQVV9BUk05NDBUIHx8IENQVV9BUk05NDZFIHx8IENQVV9BUk0xMDIwIHx8IENQVV9BUk0xMDIwRSB8fCBDUFVfQVJNMTAyMiB8fCBDUFVfQVJNMTAyNiB8fCBDUFVfWFNDQUxFIHx8IENQVV9YU0MzIHx8IENQVV9WNgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheSBZIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUga2VybmVsIHN1cHBvcnQgZm9yIHJ1bm5pbmcgdXNlciBzcGFjZQpAQCAtNDExLDIzICs1MjQsNDggQEAKIAkgIHBvcnQgbXVzdCBwcm9wZXJseSBlbmFibGUgYW55IGJpZy1lbmRpYW4gcmVsYXRlZCBmZWF0dXJlcwogCSAgb2YgeW91ciBjaGlwc2V0L2JvYXJkL3Byb2Nlc3Nvci4KIAorY29uZmlnIENQVV9ISUdIX1ZFQ1RPUgorCWRlcGVuZHMgIU1NVSAmJiBDUFVfQ1AxNSAmJiAhQ1BVX0FSTTc0MFQKKwlib29sICJTZWxlY3QgdGhlIEhpZ2ggZXhjZXB0aW9uIHZlY3RvciIKKwlkZWZhdWx0IG4KKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIHNlbGVjdCBoaWdoIGV4Y2VwdGlvbiB2ZWN0b3IoMHhGRkZGMDAwMH4pLgorCSAgVGhlIGV4Y2VwdGlvbiB2ZWN0b3IgY2FuIGJlIHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBwbGF0Zm9ybQorCSAgZGVzaWduIGluIG5vbW11IG1vZGUuIElmIHlvdXIgcGxhdGZvcm0gbmVlZHMgdG8gc2VsZWN0CisJICBoaWdoIGV4Y2VwdGlvbiB2ZWN0b3IsIHNheSBZLgorCSAgT3RoZXJ3aXNlIG9yIGlmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTiwgYW5kIHRoZSBsb3cgZXhjZXB0aW9uCisJICB2ZWN0b3IgKDB4MDAwMDAwMDB+KSB3aWxsIGJlIHVzZWQuCisKIGNvbmZpZyBDUFVfSUNBQ0hFX0RJU0FCTEUKLQlib29sICJEaXNhYmxlIEktQ2FjaGUiCi0JZGVwZW5kcyBvbiBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfVjYKKwlib29sICJEaXNhYmxlIEktQ2FjaGUgKEktYml0KSIKKwlkZXBlbmRzIG9uIENQVV9DUDE1ICYmICEoQ1BVX0FSTTYxMCB8fCBDUFVfQVJNNzEwIHx8IENQVV9BUk03MjBUIHx8IENQVV9BUk03NDBUIHx8IENQVV9YU0NBTEUgfHwgQ1BVX1hTQzMpCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBkaXNhYmxlIHRoZSBwcm9jZXNzb3IgaW5zdHJ1Y3Rpb24gY2FjaGUuIFVubGVzcwogCSAgeW91IGhhdmUgYSByZWFzb24gbm90IHRvIG9yIGFyZSB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgQ1BVX0RDQUNIRV9ESVNBQkxFCi0JYm9vbCAiRGlzYWJsZSBELUNhY2hlIgotCWRlcGVuZHMgb24gQ1BVX0FSTTkyMFQgfHwgQ1BVX0FSTTkyMlQgfHwgQ1BVX0FSTTkyNVQgfHwgQ1BVX0FSTTkyNlQgfHwgQ1BVX0FSTTEwMjAgfHwgQ1BVX1Y2CisJYm9vbCAiRGlzYWJsZSBELUNhY2hlIChDLWJpdCkiCisJZGVwZW5kcyBvbiBDUFVfQ1AxNQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gZGlzYWJsZSB0aGUgcHJvY2Vzc29yIGRhdGEgY2FjaGUuIFVubGVzcwogCSAgeW91IGhhdmUgYSByZWFzb24gbm90IHRvIG9yIGFyZSB1bnN1cmUsIHNheSBOLgogCitjb25maWcgQ1BVX0RDQUNIRV9TSVpFCisJaGV4CisJZGVwZW5kcyBvbiBDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTQ2RQorCWRlZmF1bHQgMHgwMDAwMTAwMCBpZiBDUFVfQVJNNzQwVAorCWRlZmF1bHQgMHgwMDAwMjAwMCAjIGRlZmF1bHQgc2l6ZSBmb3IgQVJNOTQ2RS1TCisJaGVscAorCSAgU29tZSBjb3JlcyBhcmUgc3ludGhlc2l6YWJsZSB0byBoYXZlIHZhcmlvdXMgc2l6ZWQgY2FjaGUuIEZvcgorCSAgQVJNOTQ2RS1TIGNhc2UsIGl0IGNhbiB2YXJ5IGZyb20gMEtCIHRvIDFNQi4KKwkgIFRvIHN1cHBvcnQgc3VjaCBjYWNoZSBvcGVyYXRpb25zLCBpdCBpcyBlZmZpY2llbnQgdG8ga25vdyB0aGUgc2l6ZQorCSAgYmVmb3JlIGNvbXBpbGUgdGltZS4KKwkgIElmIHlvdXIgU29DIGlzIGNvbmZpZ3VyZWQgdG8gaGF2ZSBhIGRpZmZlcmVudCBzaXplLCBkZWZpbmUgdGhlIHZhbHVlCisJICBoZXJlIHdpdGggcHJvcGVyIGNvbmRpdGlvbnMuCisKIGNvbmZpZyBDUFVfRENBQ0hFX1dSSVRFVEhST1VHSAogCWJvb2wgIkZvcmNlIHdyaXRlIHRocm91Z2ggRC1jYWNoZSIKLQlkZXBlbmRzIG9uIChDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfVjYpICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKKwlkZXBlbmRzIG9uIChDUFVfQVJNNzQwVCB8fCBDUFVfQVJNOTIwVCB8fCBDUFVfQVJNOTIyVCB8fCBDUFVfQVJNOTI1VCB8fCBDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQwVCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCB8fCBDUFVfVjYpICYmICFDUFVfRENBQ0hFX0RJU0FCTEUKIAlkZWZhdWx0IHkgaWYgQ1BVX0FSTTkyNVQKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgZGF0YSBjYWNoZSBpbiB3cml0ZXRocm91Z2ggbW9kZS4gVW5sZXNzIHlvdQpAQCAtNDM1LDcgKzU3Myw3IEBACiAKIGNvbmZpZyBDUFVfQ0FDSEVfUk9VTkRfUk9CSU4KIAlib29sICJSb3VuZCByb2JpbiBJIGFuZCBEIGNhY2hlIHJlcGxhY2VtZW50IGFsZ29yaXRobSIKLQlkZXBlbmRzIG9uIChDUFVfQVJNOTI2VCB8fCBDUFVfQVJNMTAyMCkgJiYgKCFDUFVfSUNBQ0hFX0RJU0FCTEUgfHwgIUNQVV9EQ0FDSEVfRElTQUJMRSkKKwlkZXBlbmRzIG9uIChDUFVfQVJNOTI2VCB8fCBDUFVfQVJNOTQ2RSB8fCBDUFVfQVJNMTAyMCkgJiYgKCFDUFVfSUNBQ0hFX0RJU0FCTEUgfHwgIUNQVV9EQ0FDSEVfRElTQUJMRSkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHVzZSB0aGUgcHJlZGljdGFibGUgcm91bmQtcm9iaW4gY2FjaGUgcmVwbGFjZW1lbnQKIAkgIHBvbGljeS4gIFVubGVzcyB5b3Ugc3BlY2lmaWNhbGx5IHJlcXVpcmUgdGhpcyBvciBhcmUgdW5zdXJlLCBzYXkgTi4KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL01ha2VmaWxlIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKaW5kZXggMjFhMjc3MC4uZDJmNTY3MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vTWFrZWZpbGUKKysrIGIvYXJjaC9hcm0vbW0vTWFrZWZpbGUKQEAgLTYsNyArNiw3IEBACiAJCQkJICAgaW9tYXAubwogCiBvYmotJChDT05GSUdfTU1VKQkJKz0gZmF1bHQtYXJtdi5vIGZsdXNoLm8gaW9yZW1hcC5vIG1tYXAubyBcCi0JCQkJICAgbW0tYXJtdi5vCisJCQkJICAgcGdkLm8gbW11Lm8KIAogaWZuZXEgKCQoQ09ORklHX01NVSkseSkKIG9iai15CQkJCSs9IG5vbW11Lm8KQEAgLTE3LDYgKzE3LDcgQEAKIG9iai0kKENPTkZJR19BTElHTk1FTlRfVFJBUCkJKz0gYWxpZ25tZW50Lm8KIG9iai0kKENPTkZJR19ESVNDT05USUdNRU0pCSs9IGRpc2NvbnRpZy5vCiAKK29iai0kKENPTkZJR19DUFVfQUJSVF9OT01NVSkJKz0gYWJvcnQtbm9tbXUubwogb2JqLSQoQ09ORklHX0NQVV9BQlJUX0VWNCkJKz0gYWJvcnQtZXY0Lm8KIG9iai0kKENPTkZJR19DUFVfQUJSVF9FVjRUKQkrPSBhYm9ydC1ldjR0Lm8KIG9iai0kKENPTkZJR19DUFVfQUJSVF9MVjRUKQkrPSBhYm9ydC1sdjR0Lm8KQEAgLTMzLDcgKzM0LDcgQEAKIG9iai0kKENPTkZJR19DUFVfQ09QWV9WMykJKz0gY29weXBhZ2UtdjMubwogb2JqLSQoQ09ORklHX0NQVV9DT1BZX1Y0V1QpCSs9IGNvcHlwYWdlLXY0d3Qubwogb2JqLSQoQ09ORklHX0NQVV9DT1BZX1Y0V0IpCSs9IGNvcHlwYWdlLXY0d2Iubwotb2JqLSQoQ09ORklHX0NQVV9DT1BZX1Y2KQkrPSBjb3B5cGFnZS12Ni5vIG1tdS5vCitvYmotJChDT05GSUdfQ1BVX0NPUFlfVjYpCSs9IGNvcHlwYWdlLXY2Lm8gY29udGV4dC5vCiBvYmotJChDT05GSUdfQ1BVX1NBMTEwMCkJKz0gY29weXBhZ2UtdjRtYy5vCiBvYmotJChDT05GSUdfQ1BVX1hTQ0FMRSkJKz0gY29weXBhZ2UteHNjYWxlLm8KIG9iai0kKENPTkZJR19DUFVfWFNDMykJCSs9IGNvcHlwYWdlLXhzYzMubwpAQCAtNDYsMTEgKzQ3LDE2IEBACiAKIG9iai0kKENPTkZJR19DUFVfQVJNNjEwKQkrPSBwcm9jLWFybTZfNy5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTcxMCkJKz0gcHJvYy1hcm02Xzcubworb2JqLSQoQ09ORklHX0NQVV9BUk03VERNSSkJKz0gcHJvYy1hcm03dGRtaS5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTcyMFQpCSs9IHByb2MtYXJtNzIwLm8KK29iai0kKENPTkZJR19DUFVfQVJNNzQwVCkJKz0gcHJvYy1hcm03NDAubworb2JqLSQoQ09ORklHX0NQVV9BUk05VERNSSkJKz0gcHJvYy1hcm05dGRtaS5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTkyMFQpCSs9IHByb2MtYXJtOTIwLm8KIG9iai0kKENPTkZJR19DUFVfQVJNOTIyVCkJKz0gcHJvYy1hcm05MjIubwogb2JqLSQoQ09ORklHX0NQVV9BUk05MjVUKQkrPSBwcm9jLWFybTkyNS5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTkyNlQpCSs9IHByb2MtYXJtOTI2Lm8KK29iai0kKENPTkZJR19DUFVfQVJNOTQwVCkJKz0gcHJvYy1hcm05NDAubworb2JqLSQoQ09ORklHX0NQVV9BUk05NDZFKQkrPSBwcm9jLWFybTk0Ni5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTEwMjApCSs9IHByb2MtYXJtMTAyMC5vCiBvYmotJChDT05GSUdfQ1BVX0FSTTEwMjBFKQkrPSBwcm9jLWFybTEwMjBlLm8KIG9iai0kKENPTkZJR19DUFVfQVJNMTAyMikJKz0gcHJvYy1hcm0xMDIyLm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2Fib3J0LWx2NHQuUyBiL2FyY2gvYXJtL21tL2Fib3J0LWx2NHQuUwppbmRleCBkYjc0M2U1Li45ZmI3YjBlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9hYm9ydC1sdjR0LlMKKysrIGIvYXJjaC9hcm0vbW0vYWJvcnQtbHY0dC5TCkBAIC0xOSwxMSArMTksMTYgQEAKICAqLwogRU5UUlkodjR0X2xhdGVfYWJvcnQpCiAJdHN0CXIzLCAjUFNSX1RfQklUCQkJQCBjaGVjayBmb3IgdGh1bWIgbW9kZQorI2lmZGVmIENPTkZJR19DUFVfQ1AxNV9NTVUKIAltcmMJcDE1LCAwLCByMSwgYzUsIGMwLCAwCQlAIGdldCBGU1IKIAltcmMJcDE1LCAwLCByMCwgYzYsIGMwLCAwCQlAIGdldCBGQVIKKwliaWMJcjEsIHIxLCAjMSA8PCAxMSB8IDEgPDwgMTAJQCBjbGVhciBiaXRzIDExIGFuZCAxMCBvZiBGU1IKKyNlbHNlCisJbW92CXIwLCAjMAkJCQlAIGNsZWFyIHIwLCByMSAobm8gRlNSL0ZBUikKKwltb3YJcjEsICMwCisjZW5kaWYKIAlibmUJLmRhdGFfdGh1bWJfYWJvcnQKIAlsZHIJcjgsIFtyMl0JCQlAIHJlYWQgYXJtIGluc3RydWN0aW9uCi0JYmljCXIxLCByMSwgIzEgPDwgMTEgfCAxIDw8IDEwCUAgY2xlYXIgYml0cyAxMSBhbmQgMTAgb2YgRlNSCiAJdHN0CXI4LCAjMSA8PCAyMAkJCUAgTCA9IDEgLT4gd3JpdGU/CiAJb3JyZXEJcjEsIHIxLCAjMSA8PCAxMQkJQCB5ZXMuCiAJYW5kCXI3LCByOCwgIzE1IDw8IDI0CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9hYm9ydC1ub21tdS5TIGIvYXJjaC9hcm0vbW0vYWJvcnQtbm9tbXUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2NjN2Y5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL2Fib3J0LW5vbW11LlMKQEAgLTAsMCArMSwxOSBAQAorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisvKgorICogRnVuY3Rpb246IG5vbW11X2Vhcmx5X2Fib3J0CisgKgorICogUGFyYW1zICA6IHIyID0gYWRkcmVzcyBvZiBhYm9ydGVkIGluc3RydWN0aW9uCisgKiAgICAgICAgIDogcjMgPSBzYXZlZCBTUFNSCisgKgorICogUmV0dXJucyA6IHIwID0gMCAoYWJvcnQgYWRkcmVzcykKKyAqCSAgIDogcjEgPSAwIChGU1IpCisgKgorICogTm90ZTogVGhlcmUgaXMgbm8gRlNSL0ZBUiBvbiAhQ1BVX0NQMTVfTU1VIGNvcmVzLgorICogICAgICAgSnVzdCBmaWxsIHplcm8gaW50byB0aGUgcmVnaXN0ZXJzLgorICovCisJLmFsaWduCTUKK0VOVFJZKG5vbW11X2Vhcmx5X2Fib3J0KQorCW1vdglyMCwgIzAJCQkJQCBjbGVhciByMCwgcjEgKG5vIEZTUi9GQVIpCisJbW92CXIxLCAjMAorCW1vdglwYywgbHIKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2FsaWdubWVudC5jIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKaW5kZXggZTBkMjFiYi4uYWExMDlmMCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKKysrIGIvYXJjaC9hcm0vbW0vYWxpZ25tZW50LmMKQEAgLTczNSw3ICs3MzUsNyBAQAogCS8qCiAJICogV2UgZ290IGEgZmF1bHQgLSBmaXggaXQgdXAsIG9yIGRpZS4KIAkgKi8KLQlkb19iYWRfYXJlYShjdXJyZW50LCBjdXJyZW50LT5tbSwgYWRkciwgZnNyLCByZWdzKTsKKwlkb19iYWRfYXJlYShhZGRyLCBmc3IsIHJlZ3MpOwogCXJldHVybiAwOwogCiAgc3dwOgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUyBiL2FyY2gvYXJtL21tL2NhY2hlLXY0LlMKaW5kZXggYjhhZDVkNS4uYjI5MDgwNiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY2FjaGUtdjQuUworKysgYi9hcmNoL2FybS9tbS9jYWNoZS12NC5TCkBAIC0yOSw5ICsyOSwxMyBAQAogICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgdGhlIGVudGlyZSBjYWNoZS4KICAqLwogRU5UUlkodjRfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisjaWZkZWYgQ1BVX0NQMTUKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBmbHVzaCBJRCBjYWNoZQogCW1vdglwYywgbHIKKyNlbHNlCisJLyogRkFMTFRIUk9VR0ggKi8KKyNlbmRpZgogCiAvKgogICoJZmx1c2hfdXNlcl9jYWNoZV9yYW5nZShzdGFydCwgZW5kLCBmbGFncykKQEAgLTQ0LDkgKzQ4LDEzIEBACiAgKgktIGZsYWdzCS0gdm1hX2FyZWFfc3RydWN0IGZsYWdzIGRlc2NyaWJpbmcgYWRkcmVzcyBzcGFjZQogICovCiBFTlRSWSh2NF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorI2lmZGVmIENQVV9DUDE1CiAJbW92CWlwLCAjMAogCW1jcmVxCXAxNSwgMCwgaXAsIGM3LCBjNywgMAkJQCBmbHVzaCBJRCBjYWNoZQogCW1vdglwYywgbHIKKyNlbHNlCisJLyogRkFMTFRIUk9VR0ggKi8KKyNlbmRpZgogCiAvKgogICoJY29oZXJlbnRfa2Vybl9yYW5nZShzdGFydCwgZW5kKQpAQCAtMTA4LDggKzExNiwxMCBAQAogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCiBFTlRSWSh2NF9kbWFfZmx1c2hfcmFuZ2UpCisjaWZkZWYgQ1BVX0NQMTUKIAltb3YJcjAsICMwCiAJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNywgMAkJQCBmbHVzaCBJRCBjYWNoZQorI2VuZGlmCiAJLyogRkFMTFRIUk9VR0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2NvbnRleHQuYyBiL2FyY2gvYXJtL21tL2NvbnRleHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWU4MDAyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vY29udGV4dC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vY29udGV4dC5jCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMi0yMDAzIERlZXAgQmx1ZSBTb2x1dGlvbnMgTHRkLCBhbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK3Vuc2lnbmVkIGludCBjcHVfbGFzdF9hc2lkID0geyAxIDw8IEFTSURfQklUUyB9OworCisvKgorICogV2UgZm9yaygpZWQgYSBwcm9jZXNzLCBhbmQgd2UgbmVlZCBhIG5ldyBjb250ZXh0IGZvciB0aGUgY2hpbGQKKyAqIHRvIHJ1biBpbi4gIFdlIHJlc2VydmUgdmVyc2lvbiAwIGZvciBpbml0aWFsIHRhc2tzIHNvIHdlIHdpbGwKKyAqIGFsd2F5cyBhbGxvY2F0ZSBhbiBBU0lELgorICovCit2b2lkIF9faW5pdF9uZXdfY29udGV4dChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJbW0tPmNvbnRleHQuaWQgPSAwOworfQorCit2b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgaW50IGFzaWQ7CisKKwlhc2lkID0gKytjcHVfbGFzdF9hc2lkOworCWlmIChhc2lkID09IDApCisJCWFzaWQgPSBjcHVfbGFzdF9hc2lkID0gMSA8PCBBU0lEX0JJVFM7CisKKwkvKgorCSAqIElmIHdlJ3ZlIHVzZWQgdXAgYWxsIG91ciBBU0lEcywgd2UgbmVlZAorCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCisJICovCisJaWYgKChhc2lkICYgfkFTSURfTUFTSykgPT0gMCkKKwkJZmx1c2hfdGxiX2FsbCgpOworCisJbW0tPmNvbnRleHQuaWQgPSBhc2lkOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jIGIvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjRtYy5jCmluZGV4IGZjNjlkY2MuLmRmMTY0NWUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY0bWMuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12NG1jLmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCisjaW5jbHVkZSAibW0uaCIKKwogLyoKICAqIDB4ZmZmZjgwMDAgdG8gMHhmZmZmZmZmZiBpcyByZXNlcnZlZCBmb3IgYW55IEFSTSBhcmNoaXRlY3R1cmUKICAqIHNwZWNpZmljIGhhY2tzIGZvciBjb3B5aW5nIHBhZ2VzIGVmZmljaWVudGx5LgpAQCAtMjcsOCArMjksNiBAQAogI2RlZmluZSBtaW5pY2FjaGVfcGdwcm90IF9fcGdwcm90KExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IFwKIAkJCQkgIExfUFRFX0NBQ0hFQUJMRSkKIAotI2RlZmluZSBUT1BfUFRFKHgpCXB0ZV9vZmZzZXRfa2VybmVsKHRvcF9wbWQsIHgpCi0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sobWluaWNhY2hlX2xvY2spOwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXY2LmMKaW5kZXggMjY5Y2U2OS4uM2QwZDNhOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vY29weXBhZ2UtdjYuYworKysgYi9hcmNoL2FybS9tbS9jb3B5cGFnZS12Ni5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAorI2luY2x1ZGUgIm1tLmgiCisKICNpZiBTSE1MQkEgPiAxNjM4NAogI2Vycm9yIEZJWCBNRQogI2VuZGlmCkBAIC0yNCw4ICsyNiw2IEBACiAjZGVmaW5lIGZyb21fYWRkcmVzcwkoMHhmZmZmODAwMCkKICNkZWZpbmUgdG9fYWRkcmVzcwkoMHhmZmZmYzAwMCkKIAotI2RlZmluZSBUT1BfUFRFKHgpCXB0ZV9vZmZzZXRfa2VybmVsKHRvcF9wbWQsIHgpCi0KIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0sodjZfbG9jayk7CiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9jb3B5cGFnZS14c2NhbGUuYyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCmluZGV4IDQyYTZlZTIuLjg0ZWJlMGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCisrKyBiL2FyY2gvYXJtL21tL2NvcHlwYWdlLXhzY2FsZS5jCkBAIC0yMCw2ICsyMCw4IEBACiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KIAorI2luY2x1ZGUgIm1tLmgiCisKIC8qCiAgKiAweGZmZmY4MDAwIHRvIDB4ZmZmZmZmZmYgaXMgcmVzZXJ2ZWQgZm9yIGFueSBBUk0gYXJjaGl0ZWN0dXJlCiAgKiBzcGVjaWZpYyBoYWNrcyBmb3IgY29weWluZyBwYWdlcyBlZmZpY2llbnRseS4KQEAgLTI5LDggKzMxLDYgQEAKICNkZWZpbmUgbWluaWNhY2hlX3BncHJvdCBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfCBcCiAJCQkJICBMX1BURV9DQUNIRUFCTEUpCiAKLSNkZWZpbmUgVE9QX1BURSh4KQlwdGVfb2Zmc2V0X2tlcm5lbCh0b3BfcG1kLCB4KQotCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1pbmljYWNoZV9sb2NrKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL2ZhdWx0LmMgYi9hcmNoL2FybS9tbS9mYXVsdC5jCmluZGV4IGM1ZTA2MjIuLjVlNjU4YTggMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9hcm0vbW0vZmF1bHQuYwpAQCAtMTMxLDEwICsxMzEsMTEgQEAKIAlmb3JjZV9zaWdfaW5mbyhzaWcsICZzaSwgdHNrKTsKIH0KIAotdm9pZAotZG9fYmFkX2FyZWEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JICAgIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQordm9pZCBkb19iYWRfYXJlYSh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+YWN0aXZlX21tOworCiAJLyoKIAkgKiBJZiB3ZSBhcmUgaW4ga2VybmVsIG1vZGUgYXQgdGhpcyBwb2ludCwgd2UKIAkgKiBoYXZlIG5vIGNvbnRleHQgdG8gaGFuZGxlIHRoaXMgZmF1bHQgd2l0aC4KQEAgLTE3MCw3ICsxNzEsNyBAQAogCWlmIChmc3IgJiAoMSA8PCAxMSkpIC8qIHdyaXRlPyAqLwogCQltYXNrID0gVk1fV1JJVEU7CiAJZWxzZQotCQltYXNrID0gVk1fUkVBRHxWTV9FWEVDOworCQltYXNrID0gVk1fUkVBRHxWTV9FWEVDfFZNX1dSSVRFOwogCiAJZmF1bHQgPSBWTV9GQVVMVF9CQURBQ0NFU1M7CiAJaWYgKCEodm1hLT52bV9mbGFncyAmIG1hc2spKQpAQCAtMTk3LDcgKzE5OCw3IEBACiAJCXJldHVybiBmYXVsdDsKIAl9CiAKLQlpZiAodHNrLT5waWQgIT0gMSkKKwlpZiAoIWlzX2luaXQodHNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpAQCAtMzE5LDcgKzMyMCw2IEBACiBkb190cmFuc2xhdGlvbl9mYXVsdCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsCiAJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CiAJdW5zaWduZWQgaW50IGluZGV4OwogCXBnZF90ICpwZ2QsICpwZ2RfazsKIAlwbWRfdCAqcG1kLCAqcG1kX2s7CkBAIC0zNTEsOSArMzUxLDcgQEAKIAlyZXR1cm4gMDsKIAogYmFkX2FyZWE6Ci0JdHNrID0gY3VycmVudDsKLQotCWRvX2JhZF9hcmVhKHRzaywgdHNrLT5hY3RpdmVfbW0sIGFkZHIsIGZzciwgcmVncyk7CisJZG9fYmFkX2FyZWEoYWRkciwgZnNyLCByZWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzY0LDggKzM2Miw3IEBACiBzdGF0aWMgaW50CiBkb19zZWN0X2ZhdWx0KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgaW50IGZzciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0Jc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwotCWRvX2JhZF9hcmVhKHRzaywgdHNrLT5hY3RpdmVfbW0sIGFkZHIsIGZzciwgcmVncyk7CisJZG9fYmFkX2FyZWEoYWRkciwgZnNyLCByZWdzKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmF1bHQuaCBiL2FyY2gvYXJtL21tL2ZhdWx0LmgKaW5kZXggNzNiNTllOC4uNDllOWUzOCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmF1bHQuaAorKysgYi9hcmNoL2FybS9tbS9mYXVsdC5oCkBAIC0xLDYgKzEsMyBAQAotdm9pZCBkb19iYWRfYXJlYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCSB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLQotdm9pZCBzaG93X3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK3ZvaWQgZG9fYmFkX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgZnNyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKIHVuc2lnbmVkIGxvbmcgc2VhcmNoX2V4Y2VwdGlvbl90YWJsZSh1bnNpZ25lZCBsb25nIGFkZHIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vZmx1c2guYyBiL2FyY2gvYXJtL21tL2ZsdXNoLmMKaW5kZXggZDQzOGNlNC4uNDU0MjA1YiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vZmx1c2guYworKysgYi9hcmNoL2FybS9tbS9mbHVzaC5jCkBAIC0xNSwxMiArMTUsMTIgQEAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKKyNpbmNsdWRlICJtbS5oIgorCiAjaWZkZWYgQ09ORklHX0NQVV9DQUNIRV9WSVBUCiAKICNkZWZpbmUgQUxJQVNfRkxVU0hfU1RBUlQJMHhmZmZmNDAwMAogCi0jZGVmaW5lIFRPUF9QVEUoeCkJcHRlX29mZnNldF9rZXJuZWwodG9wX3BtZCwgeCkKLQogc3RhdGljIHZvaWQgZmx1c2hfcGZuX2FsaWFzKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHZhZGRyKQogewogCXVuc2lnbmVkIGxvbmcgdG8gPSBBTElBU19GTFVTSF9TVEFSVCArIChDQUNIRV9DT0xPVVIodmFkZHIpIDw8IFBBR0VfU0hJRlQpOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAKIAkvKiBWSVBUIG5vbi1hbGlhc2luZyBjYWNoZSAqLwogCWlmIChjcHVfaXNzZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCB2bWEtPnZtX21tLT5jcHVfdm1fbWFzaykgJiYKLQkgICAgdm1hLT52bV9mbGFncyB8IFZNX0VYRUMpIHsKKwkgICAgdm1hLT52bV9mbGFncyAmIFZNX0VYRUMpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpa2FkZHI7CiAJCS8qIG9ubHkgZmx1c2hpbmcgdGhlIGtlcm5lbCBtYXBwaW5nIG9uIG5vbi1hbGlhc2luZyBWSVBUICovCiAJCV9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlKGFkZHIsIGFkZHIgKyBsZW4pOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vaW5pdC5jIGIvYXJjaC9hcm0vbW0vaW5pdC5jCmluZGV4IGZlM2Y3ZjYuLjIyMjE3ZmUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL2luaXQuYworKysgYi9hcmNoL2FybS9tbS9pbml0LmMKQEAgLTI1LDEwICsyNSw5IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgogCi1ERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbW11X2dhdGhlciwgbW11X2dhdGhlcnMpOworI2luY2x1ZGUgIm1tLmgiCiAKLWV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwotZXh0ZXJuIHZvaWQgX3N0ZXh0LCBfdGV4dCwgX2V0ZXh0LCBfX2RhdGFfc3RhcnQsIF9lbmQsIF9faW5pdF9iZWdpbiwgX19pbml0X2VuZDsKK2V4dGVybiB2b2lkIF90ZXh0LCBfZXRleHQsIF9fZGF0YV9zdGFydCwgX2VuZCwgX19pbml0X2JlZ2luLCBfX2luaXRfZW5kOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGh5c19pbml0cmRfc3RhcnQ7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBwaHlzX2luaXRyZF9zaXplOwogCkBAIC0zOCwxMiArMzcsNiBAQAogICovCiBzdGF0aWMgc3RydWN0IG1lbWluZm8gbWVtaW5mbyBfX2luaXRkYXRhID0geyAwLCB9OwogCi0vKgotICogZW1wdHlfemVyb19wYWdlIGlzIGEgc3BlY2lhbCBwYWdlIHRoYXQgaXMgdXNlZCBmb3IKLSAqIHplcm8taW5pdGlhbGl6ZWQgZGF0YSBhbmQgQ09XLgotICovCi1zdHJ1Y3QgcGFnZSAqZW1wdHlfemVyb19wYWdlOwotCiB2b2lkIHNob3dfbWVtKHZvaWQpCiB7CiAJaW50IGZyZWUgPSAwLCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMDsKQEAgLTgzLDE2ICs3Niw2IEBACiAJcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKIH0KIAotc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZihwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIHZpcnQpCi17Ci0JcmV0dXJuIHBtZF9vZmZzZXQocGdkLCB2aXJ0KTsKLX0KLQotc3RhdGljIGlubGluZSBwbWRfdCAqcG1kX29mZl9rKHVuc2lnbmVkIGxvbmcgdmlydCkKLXsKLQlyZXR1cm4gcG1kX29mZihwZ2Rfb2Zmc2V0X2sodmlydCksIHZpcnQpOwotfQotCiAjZGVmaW5lIGZvcl9lYWNoX25vZGViYW5rKGl0ZXIsbWksbm8pCQkJXAogCWZvciAoaXRlciA9IDA7IGl0ZXIgPCBtaS0+bnJfYmFua3M7IGl0ZXIrKykJXAogCQlpZiAobWktPmJhbmtbaXRlcl0ubm9kZSA9PSBubykKQEAgLTE3Niw2MiArMTU5LDIwIEBACiAJcmV0dXJuIGluaXRyZF9ub2RlOwogfQogCi0vKgotICogUmVzZXJ2ZSB0aGUgdmFyaW91cyByZWdpb25zIG9mIG5vZGUgMAotICovCi1zdGF0aWMgX19pbml0IHZvaWQgcmVzZXJ2ZV9ub2RlX3plcm8ocGdfZGF0YV90ICpwZ2RhdCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBtYXBfbWVtb3J5X2Jhbmsoc3RydWN0IG1lbWJhbmsgKmJhbmspCiB7Ci0JdW5zaWduZWQgbG9uZyByZXNfc2l6ZSA9IDA7CisjaWZkZWYgQ09ORklHX01NVQorCXN0cnVjdCBtYXBfZGVzYyBtYXA7CiAKLQkvKgotCSAqIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCBhbmQgZGF0YSB3aXRoIGJvb3RtZW0uCi0JICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgYmUgaW4gbm9kZSAwLgotCSAqLwotI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9fZGF0YV9zdGFydCksICZfZW5kIC0gJl9fZGF0YV9zdGFydCk7Ci0jZWxzZQotCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKCZfc3RleHQpLCAmX2VuZCAtICZfc3RleHQpOworCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKGJhbmstPnN0YXJ0KTsKKwltYXAudmlydHVhbCA9IF9fcGh5c190b192aXJ0KGJhbmstPnN0YXJ0KTsKKwltYXAubGVuZ3RoID0gYmFuay0+c2l6ZTsKKwltYXAudHlwZSA9IE1UX01FTU9SWTsKKworCWNyZWF0ZV9tYXBwaW5nKCZtYXApOwogI2VuZGlmCi0KLQkvKgotCSAqIFJlc2VydmUgdGhlIHBhZ2UgdGFibGVzLiAgVGhlc2UgYXJlIGFscmVhZHkgaW4gdXNlLAotCSAqIGFuZCBjYW4gb25seSBiZSBpbiBub2RlIDAuCi0JICovCi0JcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoc3dhcHBlcl9wZ19kaXIpLAotCQkJICAgICBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKLQotCS8qCi0JICogSG1tLi4uIFRoaXMgc2hvdWxkIGdvIGVsc2V3aGVyZSwgYnV0IHdlIHJlYWxseSByZWFsbHkgbmVlZCB0bwotCSAqIHN0b3AgdGhpbmdzIGFsbG9jYXRpbmcgdGhlIGxvdyBtZW1vcnk7IGlkZWFsbHkgd2UgbmVlZCBhIGJldHRlcgotCSAqIGltcGxlbWVudGF0aW9uIG9mIEdGUF9ETUEgd2hpY2ggZG9lcyBub3QgYXNzdW1lIHRoYXQgRE1BLWFibGUKLQkgKiBtZW1vcnkgc3RhcnRzIGF0IHplcm8uCi0JICovCi0JaWYgKG1hY2hpbmVfaXNfaW50ZWdyYXRvcigpIHx8IG1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkKLQkJcmVzX3NpemUgPSBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUOwotCi0JLyoKLQkgKiBUaGVzZSBzaG91bGQgbGlrZXdpc2UgZ28gZWxzZXdoZXJlLiAgVGhleSBwcmUtcmVzZXJ2ZSB0aGUKLQkgKiBzY3JlZW4gbWVtb3J5IHJlZ2lvbiBhdCB0aGUgc3RhcnQgb2YgbWFpbiBzeXN0ZW0gbWVtb3J5LgotCSAqLwotCWlmIChtYWNoaW5lX2lzX2VkYjcyMTEoKSkKLQkJcmVzX3NpemUgPSAweDAwMDIwMDAwOwotCWlmIChtYWNoaW5lX2lzX3A3MjB0KCkpCi0JCXJlc19zaXplID0gMHgwMDAxNDAwMDsKLQotI2lmZGVmIENPTkZJR19TQTExMTEKLQkvKgotCSAqIEJlY2F1c2Ugb2YgdGhlIFNBMTExMSBETUEgYnVnLCB3ZSB3YW50IHRvIHByZXNlcnZlIG91cgotCSAqIHByZWNpb3VzIERNQS1hYmxlIG1lbW9yeS4uLgotCSAqLwotCXJlc19zaXplID0gX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVDsKLSNlbmRpZgotCWlmIChyZXNfc2l6ZSkKLQkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIFBIWVNfT0ZGU0VULCByZXNfc2l6ZSk7CiB9CiAKLXZvaWQgX19pbml0IGJ1aWxkX21lbV90eXBlX3RhYmxlKHZvaWQpOwotdm9pZCBfX2luaXQgY3JlYXRlX21hcHBpbmcoc3RydWN0IG1hcF9kZXNjICptZCk7Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdAogYm9vdG1lbV9pbml0X25vZGUoaW50IG5vZGUsIGludCBpbml0cmRfbm9kZSwgc3RydWN0IG1lbWluZm8gKm1pKQogewpAQCAtMjQ4LDIzICsxODksMTggQEAKIAkgKiBDYWxjdWxhdGUgdGhlIHBmbiByYW5nZSwgYW5kIG1hcCB0aGUgbWVtb3J5IGJhbmtzIGZvciB0aGlzIG5vZGUuCiAJICovCiAJZm9yX2VhY2hfbm9kZWJhbmsoaSwgbWksIG5vZGUpIHsKKwkJc3RydWN0IG1lbWJhbmsgKmJhbmsgPSAmbWktPmJhbmtbaV07CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKLQkJc3RydWN0IG1hcF9kZXNjIG1hcDsKIAotCQlzdGFydCA9IG1pLT5iYW5rW2ldLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZCA9IChtaS0+YmFua1tpXS5zdGFydCArIG1pLT5iYW5rW2ldLnNpemUpID4+IFBBR0VfU0hJRlQ7CisJCXN0YXJ0ID0gYmFuay0+c3RhcnQgPj4gUEFHRV9TSElGVDsKKwkJZW5kID0gKGJhbmstPnN0YXJ0ICsgYmFuay0+c2l6ZSkgPj4gUEFHRV9TSElGVDsKIAogCQlpZiAoc3RhcnRfcGZuID4gc3RhcnQpCiAJCQlzdGFydF9wZm4gPSBzdGFydDsKIAkJaWYgKGVuZF9wZm4gPCBlbmQpCiAJCQllbmRfcGZuID0gZW5kOwogCi0JCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKG1pLT5iYW5rW2ldLnN0YXJ0KTsKLQkJbWFwLnZpcnR1YWwgPSBfX3BoeXNfdG9fdmlydChtaS0+YmFua1tpXS5zdGFydCk7Ci0JCW1hcC5sZW5ndGggPSBtaS0+YmFua1tpXS5zaXplOwotCQltYXAudHlwZSA9IE1UX01FTU9SWTsKLQotCQljcmVhdGVfbWFwcGluZygmbWFwKTsKKwkJbWFwX21lbW9yeV9iYW5rKGJhbmspOwogCX0KIAogCS8qCkBAIC0zNDYsOSArMjgyLDkgQEAKIAlyZXR1cm4gZW5kX3BmbjsKIH0KIAotc3RhdGljIHZvaWQgX19pbml0IGJvb3RtZW1faW5pdChzdHJ1Y3QgbWVtaW5mbyAqbWkpCit2b2lkIF9faW5pdCBib290bWVtX2luaXQoc3RydWN0IG1lbWluZm8gKm1pKQogewotCXVuc2lnbmVkIGxvbmcgYWRkciwgbWVtZW5kX3BmbiA9IDA7CisJdW5zaWduZWQgbG9uZyBtZW1lbmRfcGZuID0gMDsKIAlpbnQgbm9kZSwgaW5pdHJkX25vZGUsIGk7CiAKIAkvKgpAQCAtMzYxLDI2ICsyOTcsNiBAQAogCW1lbWNweSgmbWVtaW5mbywgbWksIHNpemVvZihtZW1pbmZvKSk7CiAKIAkvKgotCSAqIENsZWFyIG91dCBhbGwgdGhlIG1hcHBpbmdzIGJlbG93IHRoZSBrZXJuZWwgaW1hZ2UuCi0JICovCi0JZm9yIChhZGRyID0gMDsgYWRkciA8IE1PRFVMRV9TVEFSVDsgYWRkciArPSBQR0RJUl9TSVpFKQotCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKLSNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAotCS8qIFRoZSBYSVAga2VybmVsIGlzIG1hcHBlZCBpbiB0aGUgbW9kdWxlIGFyZWEgLS0gc2tpcCBvdmVyIGl0ICovCi0JYWRkciA9ICgodW5zaWduZWQgbG9uZykmX2V0ZXh0ICsgUEdESVJfU0laRSAtIDEpICYgUEdESVJfTUFTSzsKLSNlbmRpZgotCWZvciAoIDsgYWRkciA8IFBBR0VfT0ZGU0VUOyBhZGRyICs9IFBHRElSX1NJWkUpCi0JCXBtZF9jbGVhcihwbWRfb2ZmX2soYWRkcikpOwotCi0JLyoKLQkgKiBDbGVhciBvdXQgYWxsIHRoZSBrZXJuZWwgc3BhY2UgbWFwcGluZ3MsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0Ci0JICogbWVtb3J5IGJhbmssIHVwIHRvIHRoZSBlbmQgb2YgdGhlIHZtYWxsb2MgcmVnaW9uLgotCSAqLwotCWZvciAoYWRkciA9IF9fcGh5c190b192aXJ0KG1pLT5iYW5rWzBdLnN0YXJ0ICsgbWktPmJhbmtbMF0uc2l6ZSk7Ci0JICAgICBhZGRyIDwgVk1BTExPQ19FTkQ7IGFkZHIgKz0gUEdESVJfU0laRSkKLQkJcG1kX2NsZWFyKHBtZF9vZmZfayhhZGRyKSk7Ci0KLQkvKgogCSAqIExvY2F0ZSB3aGljaCBub2RlIGNvbnRhaW5zIHRoZSByYW1kaXNrIGltYWdlLCBpZiBhbnkuCiAJICovCiAJaW5pdHJkX25vZGUgPSBjaGVja19pbml0cmQobWkpOwpAQCAtNDEzLDExNCArMzI5LDYgQEAKIAltYXhfcGZuID0gbWF4X2xvd19wZm4gPSBtZW1lbmRfcGZuIC0gUEhZU19QRk5fT0ZGU0VUOwogfQogCi0vKgotICogU2V0IHVwIGRldmljZSB0aGUgbWFwcGluZ3MuICBTaW5jZSB3ZSBjbGVhciBvdXQgdGhlIHBhZ2UgdGFibGVzIGZvciBhbGwKLSAqIG1hcHBpbmdzIGFib3ZlIFZNQUxMT0NfRU5ELCB3ZSB3aWxsIHJlbW92ZSBhbnkgZGVidWcgZGV2aWNlIG1hcHBpbmdzLgotICogVGhpcyBtZWFucyB5b3UgaGF2ZSB0byBiZSBjYXJlZnVsIGhvdyB5b3UgZGVidWcgdGhpcyBmdW5jdGlvbiwgb3IgYW55Ci0gKiBjYWxsZWQgZnVuY3Rpb24uICBUaGlzIG1lYW5zIHlvdSBjYW4ndCB1c2UgYW55IGZ1bmN0aW9uIG9yIGRlYnVnZ2luZwotICogbWV0aG9kIHdoaWNoIG1heSB0b3VjaCBhbnkgZGV2aWNlLCBvdGhlcndpc2UgdGhlIGtlcm5lbCBfd2lsbF8gY3Jhc2guCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBkZXZpY2VtYXBzX2luaXQoc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpCi17Ci0Jc3RydWN0IG1hcF9kZXNjIG1hcDsKLQl1bnNpZ25lZCBsb25nIGFkZHI7Ci0Jdm9pZCAqdmVjdG9yczsKLQotCS8qCi0JICogQWxsb2NhdGUgdGhlIHZlY3RvciBwYWdlIGVhcmx5LgotCSAqLwotCXZlY3RvcnMgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCUJVR19PTighdmVjdG9ycyk7Ci0KLQlmb3IgKGFkZHIgPSBWTUFMTE9DX0VORDsgYWRkcjsgYWRkciArPSBQR0RJUl9TSVpFKQotCQlwbWRfY2xlYXIocG1kX29mZl9rKGFkZHIpKTsKLQotCS8qCi0JICogTWFwIHRoZSBrZXJuZWwgaWYgaXQgaXMgWElQLgotCSAqIEl0IGlzIGFsd2F5cyBmaXJzdCBpbiB0aGUgbW9kdWxlYXJlYS4KLQkgKi8KLSNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAotCW1hcC5wZm4gPSBfX3BoeXNfdG9fcGZuKENPTkZJR19YSVBfUEhZU19BRERSICYgUEdESVJfTUFTSyk7Ci0JbWFwLnZpcnR1YWwgPSBNT0RVTEVfU1RBUlQ7Ci0JbWFwLmxlbmd0aCA9ICgodW5zaWduZWQgbG9uZykmX2V0ZXh0IC0gbWFwLnZpcnR1YWwgKyB+UEdESVJfTUFTSykgJiBQR0RJUl9NQVNLOwotCW1hcC50eXBlID0gTVRfUk9NOwotCWNyZWF0ZV9tYXBwaW5nKCZtYXApOwotI2VuZGlmCi0KLQkvKgotCSAqIE1hcCB0aGUgY2FjaGUgZmx1c2hpbmcgcmVnaW9ucy4KLQkgKi8KLSNpZmRlZiBGTFVTSF9CQVNFCi0JbWFwLnBmbiA9IF9fcGh5c190b19wZm4oRkxVU0hfQkFTRV9QSFlTKTsKLQltYXAudmlydHVhbCA9IEZMVVNIX0JBU0U7Ci0JbWFwLmxlbmd0aCA9IFNaXzFNOwotCW1hcC50eXBlID0gTVRfQ0FDSEVDTEVBTjsKLQljcmVhdGVfbWFwcGluZygmbWFwKTsKLSNlbmRpZgotI2lmZGVmIEZMVVNIX0JBU0VfTUlOSUNBQ0hFCi0JbWFwLnBmbiA9IF9fcGh5c190b19wZm4oRkxVU0hfQkFTRV9QSFlTICsgU1pfMU0pOwotCW1hcC52aXJ0dWFsID0gRkxVU0hfQkFTRV9NSU5JQ0FDSEU7Ci0JbWFwLmxlbmd0aCA9IFNaXzFNOwotCW1hcC50eXBlID0gTVRfTUlOSUNMRUFOOwotCWNyZWF0ZV9tYXBwaW5nKCZtYXApOwotI2VuZGlmCi0KLQkvKgotCSAqIENyZWF0ZSBhIG1hcHBpbmcgZm9yIHRoZSBtYWNoaW5lIHZlY3RvcnMgYXQgdGhlIGhpZ2gtdmVjdG9ycwotCSAqIGxvY2F0aW9uICgweGZmZmYwMDAwKS4gIElmIHdlIGFyZW4ndCB1c2luZyBoaWdoLXZlY3RvcnMsIGFsc28KLQkgKiBjcmVhdGUgYSBtYXBwaW5nIGF0IHRoZSBsb3ctdmVjdG9ycyB2aXJ0dWFsIGFkZHJlc3MuCi0JICovCi0JbWFwLnBmbiA9IF9fcGh5c190b19wZm4odmlydF90b19waHlzKHZlY3RvcnMpKTsKLQltYXAudmlydHVhbCA9IDB4ZmZmZjAwMDA7Ci0JbWFwLmxlbmd0aCA9IFBBR0VfU0laRTsKLQltYXAudHlwZSA9IE1UX0hJR0hfVkVDVE9SUzsKLQljcmVhdGVfbWFwcGluZygmbWFwKTsKLQotCWlmICghdmVjdG9yc19oaWdoKCkpIHsKLQkJbWFwLnZpcnR1YWwgPSAwOwotCQltYXAudHlwZSA9IE1UX0xPV19WRUNUT1JTOwotCQljcmVhdGVfbWFwcGluZygmbWFwKTsKLQl9Ci0KLQkvKgotCSAqIEFzayB0aGUgbWFjaGluZSBzdXBwb3J0IHRvIG1hcCBpbiB0aGUgc3RhdGljYWxseSBtYXBwZWQgZGV2aWNlcy4KLQkgKi8KLQlpZiAobWRlc2MtPm1hcF9pbykKLQkJbWRlc2MtPm1hcF9pbygpOwotCi0JLyoKLQkgKiBGaW5hbGx5IGZsdXNoIHRoZSBjYWNoZXMgYW5kIHRsYiB0byBlbnN1cmUgdGhhdCB3ZSdyZSBpbiBhCi0JICogY29uc2lzdGVudCBzdGF0ZSB3cnQgdGhlIHdyaXRlYnVmZmVyLiAgVGhpcyBhbHNvIGVuc3VyZXMgdGhhdAotCSAqIGFueSB3cml0ZS1hbGxvY2F0ZWQgY2FjaGUgbGluZXMgaW4gdGhlIHZlY3RvciBwYWdlIGFyZSB3cml0dGVuCi0JICogYmFjay4gIEFmdGVyIHRoaXMgcG9pbnQsIHdlIGNhbiBzdGFydCB0byB0b3VjaCBkZXZpY2VzIGFnYWluLgotCSAqLwotCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLX0KLQotLyoKLSAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMsIGluaXRpYWxpc2VzIHRoZSB6b25lIG1lbW9yeQotICogbWFwcywgYW5kIHNldHMgdXAgdGhlIHplcm8gcGFnZSwgYmFkIHBhZ2UgYW5kIGJhZCBwYWdlIHRhYmxlcy4KLSAqLwotdm9pZCBfX2luaXQgcGFnaW5nX2luaXQoc3RydWN0IG1lbWluZm8gKm1pLCBzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYykKLXsKLQl2b2lkICp6ZXJvX3BhZ2U7Ci0KLQlidWlsZF9tZW1fdHlwZV90YWJsZSgpOwotCWJvb3RtZW1faW5pdChtaSk7Ci0JZGV2aWNlbWFwc19pbml0KG1kZXNjKTsKLQotCXRvcF9wbWQgPSBwbWRfb2ZmX2soMHhmZmZmMDAwMCk7Ci0KLQkvKgotCSAqIGFsbG9jYXRlIHRoZSB6ZXJvIHBhZ2UuICBOb3RlIHRoYXQgd2UgY291bnQgb24gdGhpcyBnb2luZyBvay4KLQkgKi8KLQl6ZXJvX3BhZ2UgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwotCW1lbXplcm8oemVyb19wYWdlLCBQQUdFX1NJWkUpOwotCWVtcHR5X3plcm9fcGFnZSA9IHZpcnRfdG9fcGFnZSh6ZXJvX3BhZ2UpOwotCWZsdXNoX2RjYWNoZV9wYWdlKGVtcHR5X3plcm9fcGFnZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgY2hhciAqcykKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IChlbmQgLSBhZGRyKSA+PiAxMDsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tLWFybXYuYyBiL2FyY2gvYXJtL21tL21tLWFybXYuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzg3NjlmNS4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9tbS9tbS1hcm12LmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjMgKzAsMCBAQAotLyoKLSAqICBsaW51eC9hcmNoL2FybS9tbS9tbS1hcm12LmMKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk4LTIwMDUgUnVzc2VsbCBLaW5nCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiAgUGFnZSB0YWJsZSBzbHVkZ2UgZm9yIEFSTSB2MyBhbmQgdjQgcHJvY2Vzc29yIGFyY2hpdGVjdHVyZXMuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgotI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+Ci0KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL3NldHVwLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9tYXAuaD4KLQotI2RlZmluZSBDUE9MSUNZX1VOQ0FDSEVECTAKLSNkZWZpbmUgQ1BPTElDWV9CVUZGRVJFRAkxCi0jZGVmaW5lIENQT0xJQ1lfV1JJVEVUSFJPVUdICTIKLSNkZWZpbmUgQ1BPTElDWV9XUklURUJBQ0sJMwotI2RlZmluZSBDUE9MSUNZX1dSSVRFQUxMT0MJNAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGNhY2hlcG9saWN5IF9faW5pdGRhdGEgPSBDUE9MSUNZX1dSSVRFQkFDSzsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZWNjX21hc2sgX19pbml0ZGF0YSA9IDA7Ci1wZ3Byb3RfdCBwZ3Byb3Rfa2VybmVsOwotCi1FWFBPUlRfU1lNQk9MKHBncHJvdF9rZXJuZWwpOwotCi1wbWRfdCAqdG9wX3BtZDsKLQotc3RydWN0IGNhY2hlcG9saWN5IHsKLQljb25zdCBjaGFyCXBvbGljeVsxNl07Ci0JdW5zaWduZWQgaW50CWNyX21hc2s7Ci0JdW5zaWduZWQgaW50CXBtZDsKLQl1bnNpZ25lZCBpbnQJcHRlOwotfTsKLQotc3RhdGljIHN0cnVjdCBjYWNoZXBvbGljeSBjYWNoZV9wb2xpY2llc1tdIF9faW5pdGRhdGEgPSB7Ci0JewotCQkucG9saWN5CQk9ICJ1bmNhY2hlZCIsCi0JCS5jcl9tYXNrCT0gQ1JfV3xDUl9DLAotCQkucG1kCQk9IFBNRF9TRUNUX1VOQ0FDSEVELAotCQkucHRlCQk9IDAsCi0JfSwgewotCQkucG9saWN5CQk9ICJidWZmZXJlZCIsCi0JCS5jcl9tYXNrCT0gQ1JfQywKLQkJLnBtZAkJPSBQTURfU0VDVF9CVUZGRVJFRCwKLQkJLnB0ZQkJPSBQVEVfQlVGRkVSQUJMRSwKLQl9LCB7Ci0JCS5wb2xpY3kJCT0gIndyaXRldGhyb3VnaCIsCi0JCS5jcl9tYXNrCT0gMCwKLQkJLnBtZAkJPSBQTURfU0VDVF9XVCwKLQkJLnB0ZQkJPSBQVEVfQ0FDSEVBQkxFLAotCX0sIHsKLQkJLnBvbGljeQkJPSAid3JpdGViYWNrIiwKLQkJLmNyX21hc2sJPSAwLAotCQkucG1kCQk9IFBNRF9TRUNUX1dCLAotCQkucHRlCQk9IFBURV9CVUZGRVJBQkxFfFBURV9DQUNIRUFCTEUsCi0JfSwgewotCQkucG9saWN5CQk9ICJ3cml0ZWFsbG9jIiwKLQkJLmNyX21hc2sJPSAwLAotCQkucG1kCQk9IFBNRF9TRUNUX1dCV0EsCi0JCS5wdGUJCT0gUFRFX0JVRkZFUkFCTEV8UFRFX0NBQ0hFQUJMRSwKLQl9Ci19OwotCi0vKgotICogVGhlc2UgYXJlIHVzZWZ1bCBmb3IgaWRlbnRpZmluZyBjYWNoZSBjb2hlcmVuY3kKLSAqIHByb2JsZW1zIGJ5IGFsbG93aW5nIHRoZSBjYWNoZSBvciB0aGUgY2FjaGUgYW5kCi0gKiB3cml0ZWJ1ZmZlciB0byBiZSB0dXJuZWQgb2ZmLiAgKE5vdGU6IHRoZSB3cml0ZQotICogYnVmZmVyIHNob3VsZCBub3QgYmUgb24gYW5kIHRoZSBjYWNoZSBvZmYpLgotICovCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfY2FjaGVwb2xpY3koY2hhciAqKnApCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjYWNoZV9wb2xpY2llcyk7IGkrKykgewotCQlpbnQgbGVuID0gc3RybGVuKGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSk7Ci0KLQkJaWYgKG1lbWNtcCgqcCwgY2FjaGVfcG9saWNpZXNbaV0ucG9saWN5LCBsZW4pID09IDApIHsKLQkJCWNhY2hlcG9saWN5ID0gaTsKLQkJCWNyX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKLQkJCWNyX25vX2FsaWdubWVudCAmPSB+Y2FjaGVfcG9saWNpZXNbaV0uY3JfbWFzazsKLQkJCSpwICs9IGxlbjsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCWlmIChpID09IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpKQotCQlwcmludGsoS0VSTl9FUlIgIkVSUk9SOiB1bmtub3duIG9yIHVuc3VwcG9ydGVkIGNhY2hlIHBvbGljeVxuIik7Ci0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0Jc2V0X2NyKGNyX2FsaWdubWVudCk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub2NhY2hlKGNoYXIgKipfX3VudXNlZCkKLXsKLQljaGFyICpwID0gImJ1ZmZlcmVkIjsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJub2NhY2hlIGlzIGRlcHJlY2F0ZWQ7IHVzZSBjYWNoZXBvbGljeT0lc1xuIiwgcCk7Ci0JZWFybHlfY2FjaGVwb2xpY3koJnApOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbm93cml0ZShjaGFyICoqX191bnVzZWQpCi17Ci0JY2hhciAqcCA9ICJ1bmNhY2hlZCI7Ci0JcHJpbnRrKEtFUk5fV0FSTklORyAibm93YiBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOwotCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2VjYyhjaGFyICoqcCkKLXsKLQlpZiAobWVtY21wKCpwLCAib24iLCAyKSA9PSAwKSB7Ci0JCWVjY19tYXNrID0gUE1EX1BST1RFQ1RJT047Ci0JCSpwICs9IDI7Ci0JfSBlbHNlIGlmIChtZW1jbXAoKnAsICJvZmYiLCAzKSA9PSAwKSB7Ci0JCWVjY19tYXNrID0gMDsKLQkJKnAgKz0gMzsKLQl9Ci19Ci0KLV9fZWFybHlfcGFyYW0oIm5vY2FjaGUiLCBlYXJseV9ub2NhY2hlKTsKLV9fZWFybHlfcGFyYW0oIm5vd2IiLCBlYXJseV9ub3dyaXRlKTsKLV9fZWFybHlfcGFyYW0oImNhY2hlcG9saWN5PSIsIGVhcmx5X2NhY2hlcG9saWN5KTsKLV9fZWFybHlfcGFyYW0oImVjYz0iLCBlYXJseV9lY2MpOwotCi1zdGF0aWMgaW50IF9faW5pdCBub2FsaWduX3NldHVwKGNoYXIgKl9fdW51c2VkKQotewotCWNyX2FsaWdubWVudCAmPSB+Q1JfQTsKLQljcl9ub19hbGlnbm1lbnQgJj0gfkNSX0E7Ci0Jc2V0X2NyKGNyX2FsaWdubWVudCk7Ci0JcmV0dXJuIDE7Ci19Ci0KLV9fc2V0dXAoIm5vYWxpZ24iLCBub2FsaWduX3NldHVwKTsKLQotI2RlZmluZSBGSVJTVF9LRVJORUxfUEdEX05SCShGSVJTVF9VU0VSX1BHRF9OUiArIFVTRVJfUFRSU19QRVJfUEdEKQotCi1zdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2ZmKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgdmlydCkKLXsKLQlyZXR1cm4gcG1kX29mZnNldChwZ2QsIHZpcnQpOwotfQotCi1zdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2ZmX2sodW5zaWduZWQgbG9uZyB2aXJ0KQotewotCXJldHVybiBwbWRfb2ZmKHBnZF9vZmZzZXRfayh2aXJ0KSwgdmlydCk7Ci19Ci0KLS8qCi0gKiBuZWVkIHRvIGdldCBhIDE2ayBwYWdlIGZvciBsZXZlbCAxCi0gKi8KLXBnZF90ICpnZXRfcGdkX3Nsb3coc3RydWN0IG1tX3N0cnVjdCAqbW0pCi17Ci0JcGdkX3QgKm5ld19wZ2QsICppbml0X3BnZDsKLQlwbWRfdCAqbmV3X3BtZCwgKmluaXRfcG1kOwotCXB0ZV90ICpuZXdfcHRlLCAqaW5pdF9wdGU7Ci0KLQluZXdfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAyKTsKLQlpZiAoIW5ld19wZ2QpCi0JCWdvdG8gbm9fcGdkOwotCi0JbWVtemVybyhuZXdfcGdkLCBGSVJTVF9LRVJORUxfUEdEX05SICogc2l6ZW9mKHBnZF90KSk7Ci0KLQkvKgotCSAqIENvcHkgb3ZlciB0aGUga2VybmVsIGFuZCBJTyBQR0QgZW50cmllcwotCSAqLwotCWluaXRfcGdkID0gcGdkX29mZnNldF9rKDApOwotCW1lbWNweShuZXdfcGdkICsgRklSU1RfS0VSTkVMX1BHRF9OUiwgaW5pdF9wZ2QgKyBGSVJTVF9LRVJORUxfUEdEX05SLAotCQkgICAgICAgKFBUUlNfUEVSX1BHRCAtIEZJUlNUX0tFUk5FTF9QR0RfTlIpICogc2l6ZW9mKHBnZF90KSk7Ci0KLQljbGVhbl9kY2FjaGVfYXJlYShuZXdfcGdkLCBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKLQotCWlmICghdmVjdG9yc19oaWdoKCkpIHsKLQkJLyoKLQkJICogT24gQVJNLCBmaXJzdCBwYWdlIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBzaW5jZSBpdAotCQkgKiBjb250YWlucyB0aGUgbWFjaGluZSB2ZWN0b3JzLgotCQkgKi8KLQkJbmV3X3BtZCA9IHBtZF9hbGxvYyhtbSwgbmV3X3BnZCwgMCk7Ci0JCWlmICghbmV3X3BtZCkKLQkJCWdvdG8gbm9fcG1kOwotCi0JCW5ld19wdGUgPSBwdGVfYWxsb2NfbWFwKG1tLCBuZXdfcG1kLCAwKTsKLQkJaWYgKCFuZXdfcHRlKQotCQkJZ290byBub19wdGU7Ci0KLQkJaW5pdF9wbWQgPSBwbWRfb2Zmc2V0KGluaXRfcGdkLCAwKTsKLQkJaW5pdF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoaW5pdF9wbWQsIDApOwotCQlzZXRfcHRlKG5ld19wdGUsICppbml0X3B0ZSk7Ci0JCXB0ZV91bm1hcF9uZXN0ZWQoaW5pdF9wdGUpOwotCQlwdGVfdW5tYXAobmV3X3B0ZSk7Ci0JfQotCi0JcmV0dXJuIG5ld19wZ2Q7Ci0KLW5vX3B0ZToKLQlwbWRfZnJlZShuZXdfcG1kKTsKLW5vX3BtZDoKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ld19wZ2QsIDIpOwotbm9fcGdkOgotCXJldHVybiBOVUxMOwotfQotCi12b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCkKLXsKLQlwbWRfdCAqcG1kOwotCXN0cnVjdCBwYWdlICpwdGU7Ci0KLQlpZiAoIXBnZCkKLQkJcmV0dXJuOwotCi0JLyogcGdkIGlzIGFsd2F5cyBwcmVzZW50IGFuZCBnb29kICovCi0JcG1kID0gcG1kX29mZihwZ2QsIDApOwotCWlmIChwbWRfbm9uZSgqcG1kKSkKLQkJZ290byBmcmVlOwotCWlmIChwbWRfYmFkKCpwbWQpKSB7Ci0JCXBtZF9FUlJPUigqcG1kKTsKLQkJcG1kX2NsZWFyKHBtZCk7Ci0JCWdvdG8gZnJlZTsKLQl9Ci0KLQlwdGUgPSBwbWRfcGFnZSgqcG1kKTsKLQlwbWRfY2xlYXIocG1kKTsKLQlkZWNfem9uZV9wYWdlX3N0YXRlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZyAqKXBnZCksIE5SX1BBR0VUQUJMRSk7Ci0JcHRlX2xvY2tfZGVpbml0KHB0ZSk7Ci0JcHRlX2ZyZWUocHRlKTsKLQlwbWRfZnJlZShwbWQpOwotZnJlZToKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwZ2QsIDIpOwotfQotCi0vKgotICogQ3JlYXRlIGEgU0VDVElPTiBQR0QgYmV0d2VlbiBWSVJUIGFuZCBQSFlTIGluIGRvbWFpbgotICogRE9NQUlOIHdpdGggcHJvdGVjdGlvbiBQUk9ULiAgVGhpcyBvcGVyYXRlcyBvbiBoYWxmLQotICogcGdkaXIgZW50cnkgaW5jcmVtZW50cy4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1hbGxvY19pbml0X3NlY3Rpb24odW5zaWduZWQgbG9uZyB2aXJ0LCB1bnNpZ25lZCBsb25nIHBoeXMsIGludCBwcm90KQotewotCXBtZF90ICpwbWRwID0gcG1kX29mZl9rKHZpcnQpOwotCi0JaWYgKHZpcnQgJiAoMSA8PCAyMCkpCi0JCXBtZHArKzsKLQotCSpwbWRwID0gX19wbWQocGh5cyB8IHByb3QpOwotCWZsdXNoX3BtZF9lbnRyeShwbWRwKTsKLX0KLQotLyoKLSAqIENyZWF0ZSBhIFNVUEVSIFNFQ1RJT04gUEdEIGJldHdlZW4gVklSVCBhbmQgUEhZUyB3aXRoIHByb3RlY3Rpb24gUFJPVAotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLWFsbG9jX2luaXRfc3VwZXJzZWN0aW9uKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgcHJvdCkKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCAxNjsgaSArPSAxKSB7Ci0JCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCBwaHlzLCBwcm90IHwgUE1EX1NFQ1RfU1VQRVIpOwotCi0JCXZpcnQgKz0gKFBHRElSX1NJWkUgLyAyKTsKLQl9Ci19Ci0KLS8qCi0gKiBBZGQgYSBQQUdFIG1hcHBpbmcgYmV0d2VlbiBWSVJUIGFuZCBQSFlTIGluIGRvbWFpbgotICogRE9NQUlOIHdpdGggcHJvdGVjdGlvbiBQUk9ULiAgTm90ZSB0aGF0IGR1ZSB0byB0aGUKLSAqIHdheSB3ZSBtYXAgdGhlIFBURXMsIHdlIG11c3QgYWxsb2NhdGUgdHdvIFBURV9TSVpFJ2QKLSAqIGJsb2NrcyAtIG9uZSBmb3IgdGhlIExpbnV4IHB0ZSB0YWJsZSwgYW5kIG9uZSBmb3IKLSAqIHRoZSBoYXJkd2FyZSBwdGUgdGFibGUuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotYWxsb2NfaW5pdF9wYWdlKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgcHJvdF9sMSwgcGdwcm90X3QgcHJvdCkKLXsKLQlwbWRfdCAqcG1kcCA9IHBtZF9vZmZfayh2aXJ0KTsKLQlwdGVfdCAqcHRlcDsKLQotCWlmIChwbWRfbm9uZSgqcG1kcCkpIHsKLQkJcHRlcCA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKDIgKiBQVFJTX1BFUl9QVEUgKgotCQkJCQkgICAgICAgc2l6ZW9mKHB0ZV90KSk7Ci0KLQkJX19wbWRfcG9wdWxhdGUocG1kcCwgX19wYShwdGVwKSB8IHByb3RfbDEpOwotCX0KLQlwdGVwID0gcHRlX29mZnNldF9rZXJuZWwocG1kcCwgdmlydCk7Ci0KLQlzZXRfcHRlKHB0ZXAsIHBmbl9wdGUocGh5cyA+PiBQQUdFX1NISUZULCBwcm90KSk7Ci19Ci0KLXN0cnVjdCBtZW1fdHlwZXMgewotCXVuc2lnbmVkIGludAlwcm90X3B0ZTsKLQl1bnNpZ25lZCBpbnQJcHJvdF9sMTsKLQl1bnNpZ25lZCBpbnQJcHJvdF9zZWN0OwotCXVuc2lnbmVkIGludAlkb21haW47Ci19OwotCi1zdGF0aWMgc3RydWN0IG1lbV90eXBlcyBtZW1fdHlwZXNbXSBfX2luaXRkYXRhID0gewotCVtNVF9ERVZJQ0VdID0gewotCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAotCQkJCUxfUFRFX1dSSVRFLAotCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCi0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9VTkNBQ0hFRCB8Ci0JCQkJUE1EX1NFQ1RfQVBfV1JJVEUsCi0JCS5kb21haW4gICAgPSBET01BSU5fSU8sCi0JfSwKLQlbTVRfQ0FDSEVDTEVBTl0gPSB7Ci0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQsCi0JCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAotCX0sCi0JW01UX01JTklDTEVBTl0gPSB7Ci0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9NSU5JQ0FDSEUsCi0JCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAotCX0sCi0JW01UX0xPV19WRUNUT1JTXSA9IHsKLQkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKLQkJCQlMX1BURV9FWEVDLAotCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCi0JCS5kb21haW4gICAgPSBET01BSU5fVVNFUiwKLQl9LAotCVtNVF9ISUdIX1ZFQ1RPUlNdID0gewotCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAotCQkJCUxfUFRFX1VTRVIgfCBMX1BURV9FWEVDLAotCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCi0JCS5kb21haW4gICAgPSBET01BSU5fVVNFUiwKLQl9LAotCVtNVF9NRU1PUlldID0gewotCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0IHwgUE1EX1NFQ1RfQVBfV1JJVEUsCi0JCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAotCX0sCi0JW01UX1JPTV0gPSB7Ci0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQsCi0JCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAotCX0sCi0JW01UX0lYUDIwMDBfREVWSUNFXSA9IHsgLyogSVhQMjQwMCByZXF1aXJlcyBYQ0I9MTAxIGZvciBvbi1jaGlwIEkvTyAqLwotCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAotCQkJCUxfUFRFX1dSSVRFLAotCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCi0JCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9VTkNBQ0hFRCB8Ci0JCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwKLQkJCQlQTURfU0VDVF9URVgoMSksCi0JCS5kb21haW4gICAgPSBET01BSU5fSU8sCi0JfSwKLQlbTVRfTk9OU0hBUkVEX0RFVklDRV0gPSB7Ci0JCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKLQkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfQklUNCB8IFBNRF9TRUNUX05PTlNIQVJFRF9ERVYgfAotCQkJCVBNRF9TRUNUX0FQX1dSSVRFLAotCQkuZG9tYWluICAgID0gRE9NQUlOX0lPLAotCX0KLX07Ci0KLS8qCi0gKiBBZGp1c3QgdGhlIFBNRCBzZWN0aW9uIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZSBDUFUgaW4gdXNlLgotICovCi12b2lkIF9faW5pdCBidWlsZF9tZW1fdHlwZV90YWJsZSh2b2lkKQotewotCXN0cnVjdCBjYWNoZXBvbGljeSAqY3A7Ci0JdW5zaWduZWQgaW50IGNyID0gZ2V0X2NyKCk7Ci0JdW5zaWduZWQgaW50IHVzZXJfcGdwcm90LCBrZXJuX3BncHJvdDsKLQlpbnQgY3B1X2FyY2ggPSBjcHVfYXJjaGl0ZWN0dXJlKCk7Ci0JaW50IGk7Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfRENBQ0hFX0RJU0FCTEUpCi0JaWYgKGNhY2hlcG9saWN5ID4gQ1BPTElDWV9CVUZGRVJFRCkKLQkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX0JVRkZFUkVEOwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gpCi0JaWYgKGNhY2hlcG9saWN5ID4gQ1BPTElDWV9XUklURVRIUk9VR0gpCi0JCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9XUklURVRIUk9VR0g7Ci0jZW5kaWYKLQlpZiAoY3B1X2FyY2ggPCBDUFVfQVJDSF9BUk12NSkgewotCQlpZiAoY2FjaGVwb2xpY3kgPj0gQ1BPTElDWV9XUklURUFMTE9DKQotCQkJY2FjaGVwb2xpY3kgPSBDUE9MSUNZX1dSSVRFQkFDSzsKLQkJZWNjX21hc2sgPSAwOwotCX0KLQotCS8qCi0JICogWHNjYWxlIG11c3Qgbm90IGhhdmUgUE1EIGJpdCA0IHNldCBmb3Igc2VjdGlvbiBtYXBwaW5ncy4KLQkgKi8KLQlpZiAoY3B1X2lzX3hzY2FsZSgpKQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspCi0JCQltZW1fdHlwZXNbaV0ucHJvdF9zZWN0ICY9IH5QTURfQklUNDsKLQotCS8qCi0JICogQVJNdjUgYW5kIGxvd2VyLCBleGNsdWRpbmcgWHNjYWxlLCBiaXQgNCBtdXN0IGJlIHNldCBmb3IKLQkgKiBwYWdlIHRhYmxlcy4KLQkgKi8KLQlpZiAoY3B1X2FyY2ggPCBDUFVfQVJDSF9BUk12NiAmJiAhY3B1X2lzX3hzY2FsZSgpKQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShtZW1fdHlwZXMpOyBpKyspCi0JCQlpZiAobWVtX3R5cGVzW2ldLnByb3RfbDEpCi0JCQkJbWVtX3R5cGVzW2ldLnByb3RfbDEgfD0gUE1EX0JJVDQ7Ci0KLQljcCA9ICZjYWNoZV9wb2xpY2llc1tjYWNoZXBvbGljeV07Ci0Ja2Vybl9wZ3Byb3QgPSB1c2VyX3BncHJvdCA9IGNwLT5wdGU7Ci0KLQkvKgotCSAqIEVuYWJsZSBDUFUtc3BlY2lmaWMgY29oZXJlbmN5IGlmIHN1cHBvcnRlZC4KLQkgKiAoT25seSBhdmFpbGFibGUgb24gWFNDMyBhdCB0aGUgbW9tZW50LikKLQkgKi8KLQlpZiAoYXJjaF9pc19jb2hlcmVudCgpKSB7Ci0JCWlmIChjcHVfaXNfeHNjMygpKSB7Ci0JCQltZW1fdHlwZXNbTVRfTUVNT1JZXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKLQkJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3RfcHRlIHw9IExfUFRFX0NPSEVSRU5UOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBBUk12NiBhbmQgYWJvdmUgaGF2ZSBleHRlbmRlZCBwYWdlIHRhYmxlcy4KLQkgKi8KLQlpZiAoY3B1X2FyY2ggPj0gQ1BVX0FSQ0hfQVJNdjYgJiYgKGNyICYgQ1JfWFApKSB7Ci0JCS8qCi0JCSAqIGJpdCA0IGJlY29tZXMgWE4gd2hpY2ggd2UgbXVzdCBjbGVhciBmb3IgdGhlCi0JCSAqIGtlcm5lbCBtZW1vcnkgbWFwcGluZy4KLQkJICovCi0JCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfWE47Ci0JCW1lbV90eXBlc1tNVF9ST01dLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfWE47Ci0KLQkJLyoKLQkJICogTWFyayBjYWNoZSBjbGVhbiBhcmVhcyBhbmQgWElQIFJPTSByZWFkIG9ubHkKLQkJICogZnJvbSBTVkMgbW9kZSBhbmQgbm8gYWNjZXNzIGZyb20gdXNlcnNwYWNlLgotCQkgKi8KLQkJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKLQkJbWVtX3R5cGVzW01UX01JTklDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKLQkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9BUFh8UE1EX1NFQ1RfQVBfV1JJVEU7Ci0KLQkJLyoKLQkJICogTWFyayB0aGUgZGV2aWNlIGFyZWEgYXMgInNoYXJlZCBkZXZpY2UiCi0JCSAqLwotCQltZW1fdHlwZXNbTVRfREVWSUNFXS5wcm90X3B0ZSB8PSBMX1BURV9CVUZGRVJBQkxFOwotCQltZW1fdHlwZXNbTVRfREVWSUNFXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQlVGRkVSRUQ7Ci0KLQkJLyoKLQkJICogVXNlciBwYWdlcyBuZWVkIHRvIGJlIG1hcHBlZCB3aXRoIHRoZSBBU0lECi0JCSAqIChpb3csIG5vbi1nbG9iYWwpCi0JCSAqLwotCQl1c2VyX3BncHJvdCB8PSBMX1BURV9BU0lEOwotCi0jaWZkZWYgQ09ORklHX1NNUAotCQkvKgotCQkgKiBNYXJrIG1lbW9yeSB3aXRoIHRoZSAic2hhcmVkIiBhdHRyaWJ1dGUgZm9yIFNNUCBzeXN0ZW1zCi0JCSAqLwotCQl1c2VyX3BncHJvdCB8PSBMX1BURV9TSEFSRUQ7Ci0JCWtlcm5fcGdwcm90IHw9IExfUFRFX1NIQVJFRDsKLQkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX1M7Ci0jZW5kaWYKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHYgPSBwZ3Byb3RfdmFsKHByb3RlY3Rpb25fbWFwW2ldKTsKLQkJdiA9ICh2ICYgfihMX1BURV9CVUZGRVJBQkxFfExfUFRFX0NBQ0hFQUJMRSkpIHwgdXNlcl9wZ3Byb3Q7Ci0JCXByb3RlY3Rpb25fbWFwW2ldID0gX19wZ3Byb3Qodik7Ci0JfQotCi0JbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X3B0ZSB8PSBrZXJuX3BncHJvdDsKLQltZW1fdHlwZXNbTVRfSElHSF9WRUNUT1JTXS5wcm90X3B0ZSB8PSBrZXJuX3BncHJvdDsKLQotCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NSkgewotI2lmbmRlZiBDT05GSUdfU01QCi0JCS8qCi0JCSAqIE9ubHkgdXNlIHdyaXRlLXRocm91Z2ggZm9yIG5vbi1TTVAgc3lzdGVtcwotCQkgKi8KLQkJbWVtX3R5cGVzW01UX0xPV19WRUNUT1JTXS5wcm90X3B0ZSAmPSB+TF9QVEVfQlVGRkVSQUJMRTsKLQkJbWVtX3R5cGVzW01UX0hJR0hfVkVDVE9SU10ucHJvdF9wdGUgJj0gfkxfUFRFX0JVRkZFUkFCTEU7Ci0jZW5kaWYKLQl9IGVsc2UgewotCQltZW1fdHlwZXNbTVRfTUlOSUNMRUFOXS5wcm90X3NlY3QgJj0gflBNRF9TRUNUX1RFWCgxKTsKLQl9Ci0KLQlwZ3Byb3Rfa2VybmVsID0gX19wZ3Byb3QoTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwKLQkJCQkgTF9QVEVfRElSVFkgfCBMX1BURV9XUklURSB8Ci0JCQkJIExfUFRFX0VYRUMgfCBrZXJuX3BncHJvdCk7Ci0KLQltZW1fdHlwZXNbTVRfTE9XX1ZFQ1RPUlNdLnByb3RfbDEgfD0gZWNjX21hc2s7Ci0JbWVtX3R5cGVzW01UX0hJR0hfVkVDVE9SU10ucHJvdF9sMSB8PSBlY2NfbWFzazsKLQltZW1fdHlwZXNbTVRfTUVNT1JZXS5wcm90X3NlY3QgfD0gZWNjX21hc2sgfCBjcC0+cG1kOwotCW1lbV90eXBlc1tNVF9ST01dLnByb3Rfc2VjdCB8PSBjcC0+cG1kOwotCi0Jc3dpdGNoIChjcC0+cG1kKSB7Ci0JY2FzZSBQTURfU0VDVF9XVDoKLQkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9XVDsKLQkJYnJlYWs7Ci0JY2FzZSBQTURfU0VDVF9XQjoKLQljYXNlIFBNRF9TRUNUX1dCV0E6Ci0JCW1lbV90eXBlc1tNVF9DQUNIRUNMRUFOXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfV0I7Ci0JCWJyZWFrOwotCX0KLQlwcmludGsoIk1lbW9yeSBwb2xpY3k6IEVDQyAlc2FibGVkLCBEYXRhIGNhY2hlICVzXG4iLAotCQllY2NfbWFzayA/ICJlbiIgOiAiZGlzIiwgY3AtPnBvbGljeSk7Ci19Ci0KLSNkZWZpbmUgdmVjdG9yc19iYXNlKCkJKHZlY3RvcnNfaGlnaCgpID8gMHhmZmZmMDAwMCA6IDApCi0KLS8qCi0gKiBDcmVhdGUgdGhlIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMgYW5kIGFueSBuZWNlc3NhcnkKLSAqIHBhZ2UgdGFibGVzIGZvciB0aGUgbWFwcGluZyBzcGVjaWZpZWQgYnkgYG1kJy4gIFdlCi0gKiBhcmUgYWJsZSB0byBjb3BlIGhlcmUgd2l0aCB2YXJ5aW5nIHNpemVzIGFuZCBhZGRyZXNzCi0gKiBvZmZzZXRzLCBhbmQgd2UgdGFrZSBmdWxsIGFkdmFudGFnZSBvZiBzZWN0aW9ucyBhbmQKLSAqIHN1cGVyc2VjdGlvbnMuCi0gKi8KLXZvaWQgX19pbml0IGNyZWF0ZV9tYXBwaW5nKHN0cnVjdCBtYXBfZGVzYyAqbWQpCi17Ci0JdW5zaWduZWQgbG9uZyB2aXJ0LCBsZW5ndGg7Ci0JaW50IHByb3Rfc2VjdCwgcHJvdF9sMSwgZG9tYWluOwotCXBncHJvdF90IHByb3RfcHRlOwotCXVuc2lnbmVkIGxvbmcgb2ZmID0gKHUzMilfX3Bmbl90b19waHlzKG1kLT5wZm4pOwotCi0JaWYgKG1kLT52aXJ0dWFsICE9IHZlY3RvcnNfYmFzZSgpICYmIG1kLT52aXJ0dWFsIDwgVEFTS19TSVpFKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogbm90IGNyZWF0aW5nIG1hcHBpbmcgZm9yICIKLQkJICAgICAgICIweCUwOGxseCBhdCAweCUwOGx4IGluIHVzZXIgcmVnaW9uXG4iLAotCQkgICAgICAgX19wZm5fdG9fcGh5cygodTY0KW1kLT5wZm4pLCBtZC0+dmlydHVhbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKG1kLT50eXBlID09IE1UX0RFVklDRSB8fCBtZC0+dHlwZSA9PSBNVF9ST00pICYmCi0JICAgIG1kLT52aXJ0dWFsID49IFBBR0VfT0ZGU0VUICYmIG1kLT52aXJ0dWFsIDwgVk1BTExPQ19FTkQpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQlVHOiBtYXBwaW5nIGZvciAweCUwOGxseCBhdCAweCUwOGx4ICIKLQkJICAgICAgICJvdmVybGFwcyB2bWFsbG9jIHNwYWNlXG4iLAotCQkgICAgICAgX19wZm5fdG9fcGh5cygodTY0KW1kLT5wZm4pLCBtZC0+dmlydHVhbCk7Ci0JfQotCi0JZG9tYWluCSAgPSBtZW1fdHlwZXNbbWQtPnR5cGVdLmRvbWFpbjsKLQlwcm90X3B0ZSAgPSBfX3BncHJvdChtZW1fdHlwZXNbbWQtPnR5cGVdLnByb3RfcHRlKTsKLQlwcm90X2wxICAgPSBtZW1fdHlwZXNbbWQtPnR5cGVdLnByb3RfbDEgfCBQTURfRE9NQUlOKGRvbWFpbik7Ci0JcHJvdF9zZWN0ID0gbWVtX3R5cGVzW21kLT50eXBlXS5wcm90X3NlY3QgfCBQTURfRE9NQUlOKGRvbWFpbik7Ci0KLQkvKgotCSAqIENhdGNoIDM2LWJpdCBhZGRyZXNzZXMKLQkgKi8KLQlpZihtZC0+cGZuID49IDB4MTAwMDAwKSB7Ci0JCWlmKGRvbWFpbikgewotCQkJcHJpbnRrKEtFUk5fRVJSICJNTTogaW52YWxpZCBkb21haW4gaW4gc3VwZXJzZWN0aW9uICIKLQkJCQkibWFwcGluZyBmb3IgMHglMDhsbHggYXQgMHglMDhseFxuIiwKLQkJCQlfX3Bmbl90b19waHlzKCh1NjQpbWQtPnBmbiksIG1kLT52aXJ0dWFsKTsKLQkJCXJldHVybjsKLQkJfQotCQlpZigobWQtPnZpcnR1YWwgfCBtZC0+bGVuZ3RoIHwgX19wZm5fdG9fcGh5cyhtZC0+cGZuKSkKLQkJCSYgflNVUEVSU0VDVElPTl9NQVNLKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIk1NOiBjYW5ub3QgY3JlYXRlIG1hcHBpbmcgZm9yICIKLQkJCQkiMHglMDhsbHggYXQgMHglMDhseCBpbnZhbGlkIGFsaWdubWVudFxuIiwKLQkJCQlfX3Bmbl90b19waHlzKCh1NjQpbWQtPnBmbiksIG1kLT52aXJ0dWFsKTsKLQkJCXJldHVybjsKLQkJfQotCi0JCS8qCi0JCSAqIFNoaWZ0IGJpdHMgWzM1OjMyXSBvZiBhZGRyZXNzIGludG8gYml0cyBbMjM6MjBdIG9mIFBNRAotCQkgKiAoU2VlIEFSTXY2IHNwZWMpLgotCQkgKi8KLQkJb2ZmIHw9ICgoKG1kLT5wZm4gPj4gKDMyIC0gUEFHRV9TSElGVCkpICYgMHhGKSA8PCAyMCk7Ci0JfQotCi0JdmlydCAgID0gbWQtPnZpcnR1YWw7Ci0Jb2ZmICAgLT0gdmlydDsKLQlsZW5ndGggPSBtZC0+bGVuZ3RoOwotCi0JaWYgKG1lbV90eXBlc1ttZC0+dHlwZV0ucHJvdF9sMSA9PSAwICYmCi0JICAgICh2aXJ0ICYgMHhmZmZmZiB8fCAodmlydCArIG9mZikgJiAweGZmZmZmIHx8ICh2aXJ0ICsgbGVuZ3RoKSAmIDB4ZmZmZmYpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogbWFwIGZvciAweCUwOGx4IGF0IDB4JTA4bHggY2FuIG5vdCAiCi0JCSAgICAgICAiYmUgbWFwcGVkIHVzaW5nIHBhZ2VzLCBpZ25vcmluZy5cbiIsCi0JCSAgICAgICBfX3Bmbl90b19waHlzKG1kLT5wZm4pLCBtZC0+dmlydHVhbCk7Ci0JCXJldHVybjsKLQl9Ci0KLQl3aGlsZSAoKHZpcnQgJiAweGZmZmZmIHx8ICh2aXJ0ICsgb2ZmKSAmIDB4ZmZmZmYpICYmIGxlbmd0aCA+PSBQQUdFX1NJWkUpIHsKLQkJYWxsb2NfaW5pdF9wYWdlKHZpcnQsIHZpcnQgKyBvZmYsIHByb3RfbDEsIHByb3RfcHRlKTsKLQotCQl2aXJ0ICAgKz0gUEFHRV9TSVpFOwotCQlsZW5ndGggLT0gUEFHRV9TSVpFOwotCX0KLQotCS8qIE4uQi4JQVJNdjYgc3VwZXJzZWN0aW9ucyBhcmUgb25seSBkZWZpbmVkIHRvIHdvcmsgd2l0aCBkb21haW4gMC4KLQkgKglTaW5jZSBkb21haW4gYXNzaWdubWVudHMgY2FuIGluIGZhY3QgYmUgYXJiaXRyYXJ5LCB0aGUKLQkgKgknZG9tYWluID09IDAnIGNoZWNrIGJlbG93IGlzIHJlcXVpcmVkIHRvIGluc3VyZSB0aGF0IEFSTXY2Ci0JICoJc3VwZXJzZWN0aW9ucyBhcmUgb25seSBhbGxvY2F0ZWQgZm9yIGRvbWFpbiAwIHJlZ2FyZGxlc3MKLQkgKglvZiB0aGUgYWN0dWFsIGRvbWFpbiBhc3NpZ25tZW50cyBpbiB1c2UuCi0JICovCi0JaWYgKChjcHVfYXJjaGl0ZWN0dXJlKCkgPj0gQ1BVX0FSQ0hfQVJNdjYgfHwgY3B1X2lzX3hzYzMoKSkKLQkJJiYgZG9tYWluID09IDApIHsKLQkJLyoKLQkJICogQWxpZ24gdG8gc3VwZXJzZWN0aW9uIGJvdW5kYXJ5IGlmICFoaWdoIHBhZ2VzLgotCQkgKiBIaWdoIHBhZ2VzIGhhdmUgYWxyZWFkeSBiZWVuIGNoZWNrZWQgZm9yIHByb3BlcgotCQkgKiBhbGlnbm1lbnQgYWJvdmUgYW5kIHRoZXkgd2lsbCBmYWlsIHRoZSBTVVBTRVJTRUNUSU9OX01BU0sKLQkJICogY2hlY2sgYmVjYXVzZSBvZiB0aGUgd2F5IHRoZSBhZGRyZXNzIGlzIGVuY29kZWQgaW50bwotCQkgKiBvZmZzZXQuCi0JCSAqLwotCQlpZiAobWQtPnBmbiA8PSAweDEwMDAwMCkgewotCQkJd2hpbGUgKCh2aXJ0ICYgflNVUEVSU0VDVElPTl9NQVNLIHx8Ci0JCQkgICAgICAgICh2aXJ0ICsgb2ZmKSAmIH5TVVBFUlNFQ1RJT05fTUFTSykgJiYKLQkJCQlsZW5ndGggPj0gKFBHRElSX1NJWkUgLyAyKSkgewotCQkJCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X3NlY3QpOwotCi0JCQkJdmlydCAgICs9IChQR0RJUl9TSVpFIC8gMik7Ci0JCQkJbGVuZ3RoIC09IChQR0RJUl9TSVpFIC8gMik7Ci0JCQl9Ci0JCX0KLQotCQl3aGlsZSAobGVuZ3RoID49IFNVUEVSU0VDVElPTl9TSVpFKSB7Ci0JCQlhbGxvY19pbml0X3N1cGVyc2VjdGlvbih2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X3NlY3QpOwotCi0JCQl2aXJ0ICAgKz0gU1VQRVJTRUNUSU9OX1NJWkU7Ci0JCQlsZW5ndGggLT0gU1VQRVJTRUNUSU9OX1NJWkU7Ci0JCX0KLQl9Ci0KLQkvKgotCSAqIEEgc2VjdGlvbiBtYXBwaW5nIGNvdmVycyBoYWxmIGEgInBnZGlyIiBlbnRyeS4KLQkgKi8KLQl3aGlsZSAobGVuZ3RoID49IChQR0RJUl9TSVpFIC8gMikpIHsKLQkJYWxsb2NfaW5pdF9zZWN0aW9uKHZpcnQsIHZpcnQgKyBvZmYsIHByb3Rfc2VjdCk7Ci0KLQkJdmlydCAgICs9IChQR0RJUl9TSVpFIC8gMik7Ci0JCWxlbmd0aCAtPSAoUEdESVJfU0laRSAvIDIpOwotCX0KLQotCXdoaWxlIChsZW5ndGggPj0gUEFHRV9TSVpFKSB7Ci0JCWFsbG9jX2luaXRfcGFnZSh2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X2wxLCBwcm90X3B0ZSk7Ci0KLQkJdmlydCAgICs9IFBBR0VfU0laRTsKLQkJbGVuZ3RoIC09IFBBR0VfU0laRTsKLQl9Ci19Ci0KLS8qCi0gKiBJbiBvcmRlciB0byBzb2Z0LWJvb3QsIHdlIG5lZWQgdG8gaW5zZXJ0IGEgMToxIG1hcHBpbmcgaW4gcGxhY2Ugb2YKLSAqIHRoZSB1c2VyLW1vZGUgcGFnZXMuICBUaGlzIHdpbGwgdGhlbiBlbnN1cmUgdGhhdCB3ZSBoYXZlIHByZWRpY3RhYmxlCi0gKiByZXN1bHRzIHdoZW4gdHVybmluZyB0aGUgbW11IG9mZgotICovCi12b2lkIHNldHVwX21tX2Zvcl9yZWJvb3QoY2hhciBtb2RlKQotewotCXVuc2lnbmVkIGxvbmcgYmFzZV9wbWR2YWw7Ci0JcGdkX3QgKnBnZDsKLQlpbnQgaTsKLQotCWlmIChjdXJyZW50LT5tbSAmJiBjdXJyZW50LT5tbS0+cGdkKQotCQlwZ2QgPSBjdXJyZW50LT5tbS0+cGdkOwotCWVsc2UKLQkJcGdkID0gaW5pdF9tbS5wZ2Q7Ci0KLQliYXNlX3BtZHZhbCA9IFBNRF9TRUNUX0FQX1dSSVRFIHwgUE1EX1NFQ1RfQVBfUkVBRCB8IFBNRF9UWVBFX1NFQ1Q7Ci0JaWYgKGNwdV9hcmNoaXRlY3R1cmUoKSA8PSBDUFVfQVJDSF9BUk12NVRFSiAmJiAhY3B1X2lzX3hzY2FsZSgpKQotCQliYXNlX3BtZHZhbCB8PSBQTURfQklUNDsKLQotCWZvciAoaSA9IDA7IGkgPCBGSVJTVF9VU0VSX1BHRF9OUiArIFVTRVJfUFRSU19QRVJfUEdEOyBpKyssIHBnZCsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcG1kdmFsID0gKGkgPDwgUEdESVJfU0hJRlQpIHwgYmFzZV9wbWR2YWw7Ci0JCXBtZF90ICpwbWQ7Ci0KLQkJcG1kID0gcG1kX29mZihwZ2QsIGkgPDwgUEdESVJfU0hJRlQpOwotCQlwbWRbMF0gPSBfX3BtZChwbWR2YWwpOwotCQlwbWRbMV0gPSBfX3BtZChwbWR2YWwgKyAoMSA8PCAoUEdESVJfU0hJRlQgLSAxKSkpOwotCQlmbHVzaF9wbWRfZW50cnkocG1kKTsKLQl9Ci19Ci0KLS8qCi0gKiBDcmVhdGUgdGhlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtYXBwaW5ncwotICovCi12b2lkIF9faW5pdCBpb3RhYmxlX2luaXQoc3RydWN0IG1hcF9kZXNjICppb19kZXNjLCBpbnQgbnIpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKLQkJY3JlYXRlX21hcHBpbmcoaW9fZGVzYyArIGkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW0uaCBiL2FyY2gvYXJtL21tL21tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmIyYmM5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL21tLmgKQEAgLTAsMCArMSwyMiBAQAorLyogdGhlIHVwcGVyLW1vc3QgcGFnZSB0YWJsZSBwb2ludGVyICovCitleHRlcm4gcG1kX3QgKnRvcF9wbWQ7CisKKyNkZWZpbmUgVE9QX1BURSh4KQlwdGVfb2Zmc2V0X2tlcm5lbCh0b3BfcG1kLCB4KQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2ZmKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgdmlydCkKK3sKKwlyZXR1cm4gcG1kX29mZnNldChwZ2QsIHZpcnQpOworfQorCitzdGF0aWMgaW5saW5lIHBtZF90ICpwbWRfb2ZmX2sodW5zaWduZWQgbG9uZyB2aXJ0KQoreworCXJldHVybiBwbWRfb2ZmKHBnZF9vZmZzZXRfayh2aXJ0KSwgdmlydCk7Cit9CisKK3N0cnVjdCBtYXBfZGVzYzsKK3N0cnVjdCBtZW1pbmZvOworc3RydWN0IHBnbGlzdF9kYXRhOworCit2b2lkIF9faW5pdCBjcmVhdGVfbWFwcGluZyhzdHJ1Y3QgbWFwX2Rlc2MgKm1kKTsKK3ZvaWQgX19pbml0IGJvb3RtZW1faW5pdChzdHJ1Y3QgbWVtaW5mbyAqbWkpOwordm9pZCByZXNlcnZlX25vZGVfemVybyhzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL21tYXAuYyBiL2FyY2gvYXJtL21tL21tYXAuYwppbmRleCAyOWU1NDgwLi5iMGI1ZjQ2IDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbWFwLmMKKysrIGIvYXJjaC9hcm0vbW0vbW1hcC5jCkBAIC0xMTQsMyArMTE0LDI1IEBACiAJfQogfQogCisKKy8qCisgKiBZb3UgcmVhbGx5IHNob3VsZG4ndCBiZSB1c2luZyByZWFkKCkgb3Igd3JpdGUoKSBvbiAvZGV2L21lbS4gIFRoaXMKKyAqIG1pZ2h0IGdvIGF3YXkgaW4gdGhlIGZ1dHVyZS4KKyAqLworaW50IHZhbGlkX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIGFkZHIsIHNpemVfdCBzaXplKQoreworCWlmIChhZGRyICsgc2l6ZSA+IF9fcGEoaGlnaF9tZW1vcnkpKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAxOworfQorCisvKgorICogV2UgZG9uJ3QgdXNlIHN1cGVyc2VjdGlvbiBtYXBwaW5ncyBmb3IgbW1hcCgpIG9uIC9kZXYvbWVtLCB3aGljaAorICogbWVhbnMgdGhhdCB3ZSBjYW4ndCBtYXAgdGhlIG1lbW9yeSBhcmVhIGFib3ZlIHRoZSA0RyBiYXJyaWVyIGludG8KKyAqIHVzZXJzcGFjZS4KKyAqLworaW50IHZhbGlkX21tYXBfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgcGZuLCBzaXplX3Qgc2l6ZSkKK3sKKwlyZXR1cm4gIShwZm4gKyAoc2l6ZSA+PiBQQUdFX1NISUZUKSA+IDB4MDAxMDAwMDApOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbW11LmMgYi9hcmNoL2FybS9tbS9tbXUuYwppbmRleCAwZDkwMjI3Li5lNTY2Y2JlIDEwMDY0NAotLS0gYS9hcmNoL2FybS9tbS9tbXUuYworKysgYi9hcmNoL2FybS9tbS9tbXUuYwpAQCAtMSw0NSArMSw3NzEgQEAKIC8qCiAgKiAgbGludXgvYXJjaC9hcm0vbW0vbW11LmMKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDMgRGVlcCBCbHVlIFNvbHV0aW9ucyBMdGQsIGFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAxOTk1LTIwMDUgUnVzc2VsbCBLaW5nCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCiAgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KICAqLworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW1hbi5oPgorI2luY2x1ZGUgPGxpbnV4L25vZGVtYXNrLmg+CiAKLSNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorI2luY2x1ZGUgPGFzbS90bGIuaD4KIAotdW5zaWduZWQgaW50IGNwdV9sYXN0X2FzaWQgPSB7IDEgPDwgQVNJRF9CSVRTIH07CisjaW5jbHVkZSA8YXNtL21hY2gvYXJjaC5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL21hcC5oPgorCisjaW5jbHVkZSAibW0uaCIKKworREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKKworZXh0ZXJuIHZvaWQgX3N0ZXh0LCBfX2RhdGFfc3RhcnQsIF9lbmQ7CitleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKIAogLyoKLSAqIFdlIGZvcmsoKWVkIGEgcHJvY2VzcywgYW5kIHdlIG5lZWQgYSBuZXcgY29udGV4dCBmb3IgdGhlIGNoaWxkCi0gKiB0byBydW4gaW4uICBXZSByZXNlcnZlIHZlcnNpb24gMCBmb3IgaW5pdGlhbCB0YXNrcyBzbyB3ZSB3aWxsCi0gKiBhbHdheXMgYWxsb2NhdGUgYW4gQVNJRC4KKyAqIGVtcHR5X3plcm9fcGFnZSBpcyBhIHNwZWNpYWwgcGFnZSB0aGF0IGlzIHVzZWQgZm9yCisgKiB6ZXJvLWluaXRpYWxpemVkIGRhdGEgYW5kIENPVy4KICAqLwotdm9pZCBfX2luaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQorc3RydWN0IHBhZ2UgKmVtcHR5X3plcm9fcGFnZTsKKworLyoKKyAqIFRoZSBwbWQgdGFibGUgZm9yIHRoZSB1cHBlci1tb3N0IHNldCBvZiBwYWdlcy4KKyAqLworcG1kX3QgKnRvcF9wbWQ7CisKKyNkZWZpbmUgQ1BPTElDWV9VTkNBQ0hFRAkwCisjZGVmaW5lIENQT0xJQ1lfQlVGRkVSRUQJMQorI2RlZmluZSBDUE9MSUNZX1dSSVRFVEhST1VHSAkyCisjZGVmaW5lIENQT0xJQ1lfV1JJVEVCQUNLCTMKKyNkZWZpbmUgQ1BPTElDWV9XUklURUFMTE9DCTQKKworc3RhdGljIHVuc2lnbmVkIGludCBjYWNoZXBvbGljeSBfX2luaXRkYXRhID0gQ1BPTElDWV9XUklURUJBQ0s7CitzdGF0aWMgdW5zaWduZWQgaW50IGVjY19tYXNrIF9faW5pdGRhdGEgPSAwOworcGdwcm90X3QgcGdwcm90X2tlcm5lbDsKKworRVhQT1JUX1NZTUJPTChwZ3Byb3Rfa2VybmVsKTsKKworc3RydWN0IGNhY2hlcG9saWN5IHsKKwljb25zdCBjaGFyCXBvbGljeVsxNl07CisJdW5zaWduZWQgaW50CWNyX21hc2s7CisJdW5zaWduZWQgaW50CXBtZDsKKwl1bnNpZ25lZCBpbnQJcHRlOworfTsKKworc3RhdGljIHN0cnVjdCBjYWNoZXBvbGljeSBjYWNoZV9wb2xpY2llc1tdIF9faW5pdGRhdGEgPSB7CisJeworCQkucG9saWN5CQk9ICJ1bmNhY2hlZCIsCisJCS5jcl9tYXNrCT0gQ1JfV3xDUl9DLAorCQkucG1kCQk9IFBNRF9TRUNUX1VOQ0FDSEVELAorCQkucHRlCQk9IDAsCisJfSwgeworCQkucG9saWN5CQk9ICJidWZmZXJlZCIsCisJCS5jcl9tYXNrCT0gQ1JfQywKKwkJLnBtZAkJPSBQTURfU0VDVF9CVUZGRVJFRCwKKwkJLnB0ZQkJPSBQVEVfQlVGRkVSQUJMRSwKKwl9LCB7CisJCS5wb2xpY3kJCT0gIndyaXRldGhyb3VnaCIsCisJCS5jcl9tYXNrCT0gMCwKKwkJLnBtZAkJPSBQTURfU0VDVF9XVCwKKwkJLnB0ZQkJPSBQVEVfQ0FDSEVBQkxFLAorCX0sIHsKKwkJLnBvbGljeQkJPSAid3JpdGViYWNrIiwKKwkJLmNyX21hc2sJPSAwLAorCQkucG1kCQk9IFBNRF9TRUNUX1dCLAorCQkucHRlCQk9IFBURV9CVUZGRVJBQkxFfFBURV9DQUNIRUFCTEUsCisJfSwgeworCQkucG9saWN5CQk9ICJ3cml0ZWFsbG9jIiwKKwkJLmNyX21hc2sJPSAwLAorCQkucG1kCQk9IFBNRF9TRUNUX1dCV0EsCisJCS5wdGUJCT0gUFRFX0JVRkZFUkFCTEV8UFRFX0NBQ0hFQUJMRSwKKwl9Cit9OworCisvKgorICogVGhlc2UgYXJlIHVzZWZ1bCBmb3IgaWRlbnRpZmluZyBjYWNoZSBjb2hlcmVuY3kKKyAqIHByb2JsZW1zIGJ5IGFsbG93aW5nIHRoZSBjYWNoZSBvciB0aGUgY2FjaGUgYW5kCisgKiB3cml0ZWJ1ZmZlciB0byBiZSB0dXJuZWQgb2ZmLiAgKE5vdGU6IHRoZSB3cml0ZQorICogYnVmZmVyIHNob3VsZCBub3QgYmUgb24gYW5kIHRoZSBjYWNoZSBvZmYpLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfY2FjaGVwb2xpY3koY2hhciAqKnApCiB7Ci0JbW0tPmNvbnRleHQuaWQgPSAwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2FjaGVfcG9saWNpZXMpOyBpKyspIHsKKwkJaW50IGxlbiA9IHN0cmxlbihjYWNoZV9wb2xpY2llc1tpXS5wb2xpY3kpOworCisJCWlmIChtZW1jbXAoKnAsIGNhY2hlX3BvbGljaWVzW2ldLnBvbGljeSwgbGVuKSA9PSAwKSB7CisJCQljYWNoZXBvbGljeSA9IGk7CisJCQljcl9hbGlnbm1lbnQgJj0gfmNhY2hlX3BvbGljaWVzW2ldLmNyX21hc2s7CisJCQljcl9ub19hbGlnbm1lbnQgJj0gfmNhY2hlX3BvbGljaWVzW2ldLmNyX21hc2s7CisJCQkqcCArPSBsZW47CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaSA9PSBBUlJBWV9TSVpFKGNhY2hlX3BvbGljaWVzKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogdW5rbm93biBvciB1bnN1cHBvcnRlZCBjYWNoZSBwb2xpY3lcbiIpOworCWZsdXNoX2NhY2hlX2FsbCgpOworCXNldF9jcihjcl9hbGlnbm1lbnQpOwogfQorX19lYXJseV9wYXJhbSgiY2FjaGVwb2xpY3k9IiwgZWFybHlfY2FjaGVwb2xpY3kpOwogCi12b2lkIF9fbmV3X2NvbnRleHQoc3RydWN0IG1tX3N0cnVjdCAqbW0pCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfbm9jYWNoZShjaGFyICoqX191bnVzZWQpCiB7Ci0JdW5zaWduZWQgaW50IGFzaWQ7CisJY2hhciAqcCA9ICJidWZmZXJlZCI7CisJcHJpbnRrKEtFUk5fV0FSTklORyAibm9jYWNoZSBpcyBkZXByZWNhdGVkOyB1c2UgY2FjaGVwb2xpY3k9JXNcbiIsIHApOworCWVhcmx5X2NhY2hlcG9saWN5KCZwKTsKK30KK19fZWFybHlfcGFyYW0oIm5vY2FjaGUiLCBlYXJseV9ub2NhY2hlKTsKIAotCWFzaWQgPSArK2NwdV9sYXN0X2FzaWQ7Ci0JaWYgKGFzaWQgPT0gMCkKLQkJYXNpZCA9IGNwdV9sYXN0X2FzaWQgPSAxIDw8IEFTSURfQklUUzsKK3N0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9ub3dyaXRlKGNoYXIgKipfX3VudXNlZCkKK3sKKwljaGFyICpwID0gInVuY2FjaGVkIjsKKwlwcmludGsoS0VSTl9XQVJOSU5HICJub3diIGlzIGRlcHJlY2F0ZWQ7IHVzZSBjYWNoZXBvbGljeT0lc1xuIiwgcCk7CisJZWFybHlfY2FjaGVwb2xpY3koJnApOworfQorX19lYXJseV9wYXJhbSgibm93YiIsIGVhcmx5X25vd3JpdGUpOworCitzdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfZWNjKGNoYXIgKipwKQoreworCWlmIChtZW1jbXAoKnAsICJvbiIsIDIpID09IDApIHsKKwkJZWNjX21hc2sgPSBQTURfUFJPVEVDVElPTjsKKwkJKnAgKz0gMjsKKwl9IGVsc2UgaWYgKG1lbWNtcCgqcCwgIm9mZiIsIDMpID09IDApIHsKKwkJZWNjX21hc2sgPSAwOworCQkqcCArPSAzOworCX0KK30KK19fZWFybHlfcGFyYW0oImVjYz0iLCBlYXJseV9lY2MpOworCitzdGF0aWMgaW50IF9faW5pdCBub2FsaWduX3NldHVwKGNoYXIgKl9fdW51c2VkKQoreworCWNyX2FsaWdubWVudCAmPSB+Q1JfQTsKKwljcl9ub19hbGlnbm1lbnQgJj0gfkNSX0E7CisJc2V0X2NyKGNyX2FsaWdubWVudCk7CisJcmV0dXJuIDE7Cit9CitfX3NldHVwKCJub2FsaWduIiwgbm9hbGlnbl9zZXR1cCk7CisKK3N0cnVjdCBtZW1fdHlwZXMgeworCXVuc2lnbmVkIGludAlwcm90X3B0ZTsKKwl1bnNpZ25lZCBpbnQJcHJvdF9sMTsKKwl1bnNpZ25lZCBpbnQJcHJvdF9zZWN0OworCXVuc2lnbmVkIGludAlkb21haW47Cit9OworCitzdGF0aWMgc3RydWN0IG1lbV90eXBlcyBtZW1fdHlwZXNbXSBfX2luaXRkYXRhID0geworCVtNVF9ERVZJQ0VdID0geworCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAorCQkJCUxfUFRFX1dSSVRFLAorCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9VTkNBQ0hFRCB8CisJCQkJUE1EX1NFQ1RfQVBfV1JJVEUsCisJCS5kb21haW4gICAgPSBET01BSU5fSU8sCisJfSwKKwlbTVRfQ0FDSEVDTEVBTl0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQsCisJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAorCX0sCisJW01UX01JTklDTEVBTl0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9NSU5JQ0FDSEUsCisJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAorCX0sCisJW01UX0xPV19WRUNUT1JTXSA9IHsKKwkJLnByb3RfcHRlICA9IExfUFRFX1BSRVNFTlQgfCBMX1BURV9ZT1VORyB8IExfUFRFX0RJUlRZIHwKKwkJCQlMX1BURV9FWEVDLAorCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCisJCS5kb21haW4gICAgPSBET01BSU5fVVNFUiwKKwl9LAorCVtNVF9ISUdIX1ZFQ1RPUlNdID0geworCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAorCQkJCUxfUFRFX1VTRVIgfCBMX1BURV9FWEVDLAorCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCisJCS5kb21haW4gICAgPSBET01BSU5fVVNFUiwKKwl9LAorCVtNVF9NRU1PUlldID0geworCQkucHJvdF9zZWN0ID0gUE1EX1RZUEVfU0VDVCB8IFBNRF9CSVQ0IHwgUE1EX1NFQ1RfQVBfV1JJVEUsCisJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAorCX0sCisJW01UX1JPTV0gPSB7CisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQsCisJCS5kb21haW4gICAgPSBET01BSU5fS0VSTkVMLAorCX0sCisJW01UX0lYUDIwMDBfREVWSUNFXSA9IHsgLyogSVhQMjQwMCByZXF1aXJlcyBYQ0I9MTAxIGZvciBvbi1jaGlwIEkvTyAqLworCQkucHJvdF9wdGUgID0gTF9QVEVfUFJFU0VOVCB8IExfUFRFX1lPVU5HIHwgTF9QVEVfRElSVFkgfAorCQkJCUxfUFRFX1dSSVRFLAorCQkucHJvdF9sMSAgID0gUE1EX1RZUEVfVEFCTEUsCisJCS5wcm90X3NlY3QgPSBQTURfVFlQRV9TRUNUIHwgUE1EX0JJVDQgfCBQTURfU0VDVF9VTkNBQ0hFRCB8CisJCQkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFIHwKKwkJCQlQTURfU0VDVF9URVgoMSksCisJCS5kb21haW4gICAgPSBET01BSU5fSU8sCisJfSwKKwlbTVRfTk9OU0hBUkVEX0RFVklDRV0gPSB7CisJCS5wcm90X2wxICAgPSBQTURfVFlQRV9UQUJMRSwKKwkJLnByb3Rfc2VjdCA9IFBNRF9UWVBFX1NFQ1QgfCBQTURfQklUNCB8IFBNRF9TRUNUX05PTlNIQVJFRF9ERVYgfAorCQkJCVBNRF9TRUNUX0FQX1dSSVRFLAorCQkuZG9tYWluICAgID0gRE9NQUlOX0lPLAorCX0KK307CisKKy8qCisgKiBBZGp1c3QgdGhlIFBNRCBzZWN0aW9uIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZSBDUFUgaW4gdXNlLgorICovCitzdGF0aWMgdm9pZCBfX2luaXQgYnVpbGRfbWVtX3R5cGVfdGFibGUodm9pZCkKK3sKKwlzdHJ1Y3QgY2FjaGVwb2xpY3kgKmNwOworCXVuc2lnbmVkIGludCBjciA9IGdldF9jcigpOworCXVuc2lnbmVkIGludCB1c2VyX3BncHJvdCwga2Vybl9wZ3Byb3Q7CisJaW50IGNwdV9hcmNoID0gY3B1X2FyY2hpdGVjdHVyZSgpOworCWludCBpOworCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0RDQUNIRV9ESVNBQkxFKQorCWlmIChjYWNoZXBvbGljeSA+IENQT0xJQ1lfQlVGRkVSRUQpCisJCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9CVUZGRVJFRDsKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdIKQorCWlmIChjYWNoZXBvbGljeSA+IENQT0xJQ1lfV1JJVEVUSFJPVUdIKQorCQljYWNoZXBvbGljeSA9IENQT0xJQ1lfV1JJVEVUSFJPVUdIOworI2VuZGlmCisJaWYgKGNwdV9hcmNoIDwgQ1BVX0FSQ0hfQVJNdjUpIHsKKwkJaWYgKGNhY2hlcG9saWN5ID49IENQT0xJQ1lfV1JJVEVBTExPQykKKwkJCWNhY2hlcG9saWN5ID0gQ1BPTElDWV9XUklURUJBQ0s7CisJCWVjY19tYXNrID0gMDsKKwl9CiAKIAkvKgotCSAqIElmIHdlJ3ZlIHVzZWQgdXAgYWxsIG91ciBBU0lEcywgd2UgbmVlZAotCSAqIHRvIHN0YXJ0IGEgbmV3IHZlcnNpb24gYW5kIGZsdXNoIHRoZSBUTEIuCisJICogWHNjYWxlIG11c3Qgbm90IGhhdmUgUE1EIGJpdCA0IHNldCBmb3Igc2VjdGlvbiBtYXBwaW5ncy4KIAkgKi8KLQlpZiAoKGFzaWQgJiB+QVNJRF9NQVNLKSA9PSAwKQotCQlmbHVzaF90bGJfYWxsKCk7CisJaWYgKGNwdV9pc194c2NhbGUoKSkKKwkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWVtX3R5cGVzKTsgaSsrKQorCQkJbWVtX3R5cGVzW2ldLnByb3Rfc2VjdCAmPSB+UE1EX0JJVDQ7CiAKLQltbS0+Y29udGV4dC5pZCA9IGFzaWQ7CisJLyoKKwkgKiBBUk12NSBhbmQgbG93ZXIsIGV4Y2x1ZGluZyBYc2NhbGUsIGJpdCA0IG11c3QgYmUgc2V0IGZvcgorCSAqIHBhZ2UgdGFibGVzLgorCSAqLworCWlmIChjcHVfYXJjaCA8IENQVV9BUkNIX0FSTXY2ICYmICFjcHVfaXNfeHNjYWxlKCkpCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1lbV90eXBlcyk7IGkrKykKKwkJCWlmIChtZW1fdHlwZXNbaV0ucHJvdF9sMSkKKwkJCQltZW1fdHlwZXNbaV0ucHJvdF9sMSB8PSBQTURfQklUNDsKKworCWNwID0gJmNhY2hlX3BvbGljaWVzW2NhY2hlcG9saWN5XTsKKwlrZXJuX3BncHJvdCA9IHVzZXJfcGdwcm90ID0gY3AtPnB0ZTsKKworCS8qCisJICogRW5hYmxlIENQVS1zcGVjaWZpYyBjb2hlcmVuY3kgaWYgc3VwcG9ydGVkLgorCSAqIChPbmx5IGF2YWlsYWJsZSBvbiBYU0MzIGF0IHRoZSBtb21lbnQuKQorCSAqLworCWlmIChhcmNoX2lzX2NvaGVyZW50KCkpIHsKKwkJaWYgKGNwdV9pc194c2MzKCkpIHsKKwkJCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9TOworCQkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9wdGUgfD0gTF9QVEVfQ09IRVJFTlQ7CisJCX0KKwl9CisKKwkvKgorCSAqIEFSTXY2IGFuZCBhYm92ZSBoYXZlIGV4dGVuZGVkIHBhZ2UgdGFibGVzLgorCSAqLworCWlmIChjcHVfYXJjaCA+PSBDUFVfQVJDSF9BUk12NiAmJiAoY3IgJiBDUl9YUCkpIHsKKwkJLyoKKwkJICogYml0IDQgYmVjb21lcyBYTiB3aGljaCB3ZSBtdXN0IGNsZWFyIGZvciB0aGUKKwkJICoga2VybmVsIG1lbW9yeSBtYXBwaW5nLgorCQkgKi8KKwkJbWVtX3R5cGVzW01UX01FTU9SWV0ucHJvdF9zZWN0ICY9IH5QTURfU0VDVF9YTjsKKwkJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0ICY9IH5QTURfU0VDVF9YTjsKKworCQkvKgorCQkgKiBNYXJrIGNhY2hlIGNsZWFuIGFyZWFzIGFuZCBYSVAgUk9NIHJlYWQgb25seQorCQkgKiBmcm9tIFNWQyBtb2RlIGFuZCBubyBhY2Nlc3MgZnJvbSB1c2Vyc3BhY2UuCisJCSAqLworCQltZW1fdHlwZXNbTVRfUk9NXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQVBYfFBNRF9TRUNUX0FQX1dSSVRFOworCQltZW1fdHlwZXNbTVRfTUlOSUNMRUFOXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfQVBYfFBNRF9TRUNUX0FQX1dSSVRFOworCQltZW1fdHlwZXNbTVRfQ0FDSEVDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX0FQWHxQTURfU0VDVF9BUF9XUklURTsKKworCQkvKgorCQkgKiBNYXJrIHRoZSBkZXZpY2UgYXJlYSBhcyAic2hhcmVkIGRldmljZSIKKwkJICovCisJCW1lbV90eXBlc1tNVF9ERVZJQ0VdLnByb3RfcHRlIHw9IExfUFRFX0JVRkZFUkFCTEU7CisJCW1lbV90eXBlc1tNVF9ERVZJQ0VdLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9CVUZGRVJFRDsKKworCQkvKgorCQkgKiBVc2VyIHBhZ2VzIG5lZWQgdG8gYmUgbWFwcGVkIHdpdGggdGhlIEFTSUQKKwkJICogKGlvdywgbm9uLWdsb2JhbCkKKwkJICovCisJCXVzZXJfcGdwcm90IHw9IExfUFRFX0FTSUQ7CisKKyNpZmRlZiBDT05GSUdfU01QCisJCS8qCisJCSAqIE1hcmsgbWVtb3J5IHdpdGggdGhlICJzaGFyZWQiIGF0dHJpYnV0ZSBmb3IgU01QIHN5c3RlbXMKKwkJICovCisJCXVzZXJfcGdwcm90IHw9IExfUFRFX1NIQVJFRDsKKwkJa2Vybl9wZ3Byb3QgfD0gTF9QVEVfU0hBUkVEOworCQltZW1fdHlwZXNbTVRfTUVNT1JZXS5wcm90X3NlY3QgfD0gUE1EX1NFQ1RfUzsKKyNlbmRpZgorCX0KKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgdiA9IHBncHJvdF92YWwocHJvdGVjdGlvbl9tYXBbaV0pOworCQl2ID0gKHYgJiB+KExfUFRFX0JVRkZFUkFCTEV8TF9QVEVfQ0FDSEVBQkxFKSkgfCB1c2VyX3BncHJvdDsKKwkJcHJvdGVjdGlvbl9tYXBbaV0gPSBfX3BncHJvdCh2KTsKKwl9CisKKwltZW1fdHlwZXNbTVRfTE9XX1ZFQ1RPUlNdLnByb3RfcHRlIHw9IGtlcm5fcGdwcm90OworCW1lbV90eXBlc1tNVF9ISUdIX1ZFQ1RPUlNdLnByb3RfcHRlIHw9IGtlcm5fcGdwcm90OworCisJaWYgKGNwdV9hcmNoID49IENQVV9BUkNIX0FSTXY1KSB7CisjaWZuZGVmIENPTkZJR19TTVAKKwkJLyoKKwkJICogT25seSB1c2Ugd3JpdGUtdGhyb3VnaCBmb3Igbm9uLVNNUCBzeXN0ZW1zCisJCSAqLworCQltZW1fdHlwZXNbTVRfTE9XX1ZFQ1RPUlNdLnByb3RfcHRlICY9IH5MX1BURV9CVUZGRVJBQkxFOworCQltZW1fdHlwZXNbTVRfSElHSF9WRUNUT1JTXS5wcm90X3B0ZSAmPSB+TF9QVEVfQlVGRkVSQUJMRTsKKyNlbmRpZgorCX0gZWxzZSB7CisJCW1lbV90eXBlc1tNVF9NSU5JQ0xFQU5dLnByb3Rfc2VjdCAmPSB+UE1EX1NFQ1RfVEVYKDEpOworCX0KKworCXBncHJvdF9rZXJuZWwgPSBfX3BncHJvdChMX1BURV9QUkVTRU5UIHwgTF9QVEVfWU9VTkcgfAorCQkJCSBMX1BURV9ESVJUWSB8IExfUFRFX1dSSVRFIHwKKwkJCQkgTF9QVEVfRVhFQyB8IGtlcm5fcGdwcm90KTsKKworCW1lbV90eXBlc1tNVF9MT1dfVkVDVE9SU10ucHJvdF9sMSB8PSBlY2NfbWFzazsKKwltZW1fdHlwZXNbTVRfSElHSF9WRUNUT1JTXS5wcm90X2wxIHw9IGVjY19tYXNrOworCW1lbV90eXBlc1tNVF9NRU1PUlldLnByb3Rfc2VjdCB8PSBlY2NfbWFzayB8IGNwLT5wbWQ7CisJbWVtX3R5cGVzW01UX1JPTV0ucHJvdF9zZWN0IHw9IGNwLT5wbWQ7CisKKwlzd2l0Y2ggKGNwLT5wbWQpIHsKKwljYXNlIFBNRF9TRUNUX1dUOgorCQltZW1fdHlwZXNbTVRfQ0FDSEVDTEVBTl0ucHJvdF9zZWN0IHw9IFBNRF9TRUNUX1dUOworCQlicmVhazsKKwljYXNlIFBNRF9TRUNUX1dCOgorCWNhc2UgUE1EX1NFQ1RfV0JXQToKKwkJbWVtX3R5cGVzW01UX0NBQ0hFQ0xFQU5dLnByb3Rfc2VjdCB8PSBQTURfU0VDVF9XQjsKKwkJYnJlYWs7CisJfQorCXByaW50aygiTWVtb3J5IHBvbGljeTogRUNDICVzYWJsZWQsIERhdGEgY2FjaGUgJXNcbiIsCisJCWVjY19tYXNrID8gImVuIiA6ICJkaXMiLCBjcC0+cG9saWN5KTsKK30KKworI2RlZmluZSB2ZWN0b3JzX2Jhc2UoKQkodmVjdG9yc19oaWdoKCkgPyAweGZmZmYwMDAwIDogMCkKKworLyoKKyAqIENyZWF0ZSBhIFNFQ1RJT04gUEdEIGJldHdlZW4gVklSVCBhbmQgUEhZUyBpbiBkb21haW4KKyAqIERPTUFJTiB3aXRoIHByb3RlY3Rpb24gUFJPVC4gIFRoaXMgb3BlcmF0ZXMgb24gaGFsZi0KKyAqIHBnZGlyIGVudHJ5IGluY3JlbWVudHMuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYWxsb2NfaW5pdF9zZWN0aW9uKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLCBpbnQgcHJvdCkKK3sKKwlwbWRfdCAqcG1kcCA9IHBtZF9vZmZfayh2aXJ0KTsKKworCWlmICh2aXJ0ICYgKDEgPDwgMjApKQorCQlwbWRwKys7CisKKwkqcG1kcCA9IF9fcG1kKHBoeXMgfCBwcm90KTsKKwlmbHVzaF9wbWRfZW50cnkocG1kcCk7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBTVVBFUiBTRUNUSU9OIFBHRCBiZXR3ZWVuIFZJUlQgYW5kIFBIWVMgd2l0aCBwcm90ZWN0aW9uIFBST1QKKyAqLworc3RhdGljIGlubGluZSB2b2lkCithbGxvY19pbml0X3N1cGVyc2VjdGlvbih1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywgaW50IHByb3QpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkgKz0gMSkgeworCQlhbGxvY19pbml0X3NlY3Rpb24odmlydCwgcGh5cywgcHJvdCB8IFBNRF9TRUNUX1NVUEVSKTsKKworCQl2aXJ0ICs9IChQR0RJUl9TSVpFIC8gMik7CisJfQorfQorCisvKgorICogQWRkIGEgUEFHRSBtYXBwaW5nIGJldHdlZW4gVklSVCBhbmQgUEhZUyBpbiBkb21haW4KKyAqIERPTUFJTiB3aXRoIHByb3RlY3Rpb24gUFJPVC4gIE5vdGUgdGhhdCBkdWUgdG8gdGhlCisgKiB3YXkgd2UgbWFwIHRoZSBQVEVzLCB3ZSBtdXN0IGFsbG9jYXRlIHR3byBQVEVfU0laRSdkCisgKiBibG9ja3MgLSBvbmUgZm9yIHRoZSBMaW51eCBwdGUgdGFibGUsIGFuZCBvbmUgZm9yCisgKiB0aGUgaGFyZHdhcmUgcHRlIHRhYmxlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2FsbG9jX2luaXRfcGFnZSh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgaW50IHByb3RfbDEsIHBncHJvdF90IHByb3QpCit7CisJcG1kX3QgKnBtZHAgPSBwbWRfb2ZmX2sodmlydCk7CisJcHRlX3QgKnB0ZXA7CisKKwlpZiAocG1kX25vbmUoKnBtZHApKSB7CisJCXB0ZXAgPSBhbGxvY19ib290bWVtX2xvd19wYWdlcygyICogUFRSU19QRVJfUFRFICoKKwkJCQkJICAgICAgIHNpemVvZihwdGVfdCkpOworCisJCV9fcG1kX3BvcHVsYXRlKHBtZHAsIF9fcGEocHRlcCkgfCBwcm90X2wxKTsKKwl9CisJcHRlcCA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHAsIHZpcnQpOworCisJc2V0X3B0ZShwdGVwLCBwZm5fcHRlKHBoeXMgPj4gUEFHRV9TSElGVCwgcHJvdCkpOworfQorCisvKgorICogQ3JlYXRlIHRoZSBwYWdlIGRpcmVjdG9yeSBlbnRyaWVzIGFuZCBhbnkgbmVjZXNzYXJ5CisgKiBwYWdlIHRhYmxlcyBmb3IgdGhlIG1hcHBpbmcgc3BlY2lmaWVkIGJ5IGBtZCcuICBXZQorICogYXJlIGFibGUgdG8gY29wZSBoZXJlIHdpdGggdmFyeWluZyBzaXplcyBhbmQgYWRkcmVzcworICogb2Zmc2V0cywgYW5kIHdlIHRha2UgZnVsbCBhZHZhbnRhZ2Ugb2Ygc2VjdGlvbnMgYW5kCisgKiBzdXBlcnNlY3Rpb25zLgorICovCit2b2lkIF9faW5pdCBjcmVhdGVfbWFwcGluZyhzdHJ1Y3QgbWFwX2Rlc2MgKm1kKQoreworCXVuc2lnbmVkIGxvbmcgdmlydCwgbGVuZ3RoOworCWludCBwcm90X3NlY3QsIHByb3RfbDEsIGRvbWFpbjsKKwlwZ3Byb3RfdCBwcm90X3B0ZTsKKwl1bnNpZ25lZCBsb25nIG9mZiA9ICh1MzIpX19wZm5fdG9fcGh5cyhtZC0+cGZuKTsKKworCWlmIChtZC0+dmlydHVhbCAhPSB2ZWN0b3JzX2Jhc2UoKSAmJiBtZC0+dmlydHVhbCA8IFRBU0tfU0laRSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJCVUc6IG5vdCBjcmVhdGluZyBtYXBwaW5nIGZvciAiCisJCSAgICAgICAiMHglMDhsbHggYXQgMHglMDhseCBpbiB1c2VyIHJlZ2lvblxuIiwKKwkJICAgICAgIF9fcGZuX3RvX3BoeXMoKHU2NCltZC0+cGZuKSwgbWQtPnZpcnR1YWwpOworCQlyZXR1cm47CisJfQorCisJaWYgKChtZC0+dHlwZSA9PSBNVF9ERVZJQ0UgfHwgbWQtPnR5cGUgPT0gTVRfUk9NKSAmJgorCSAgICBtZC0+dmlydHVhbCA+PSBQQUdFX09GRlNFVCAmJiBtZC0+dmlydHVhbCA8IFZNQUxMT0NfRU5EKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkJVRzogbWFwcGluZyBmb3IgMHglMDhsbHggYXQgMHglMDhseCAiCisJCSAgICAgICAib3ZlcmxhcHMgdm1hbGxvYyBzcGFjZVxuIiwKKwkJICAgICAgIF9fcGZuX3RvX3BoeXMoKHU2NCltZC0+cGZuKSwgbWQtPnZpcnR1YWwpOworCX0KKworCWRvbWFpbgkgID0gbWVtX3R5cGVzW21kLT50eXBlXS5kb21haW47CisJcHJvdF9wdGUgID0gX19wZ3Byb3QobWVtX3R5cGVzW21kLT50eXBlXS5wcm90X3B0ZSk7CisJcHJvdF9sMSAgID0gbWVtX3R5cGVzW21kLT50eXBlXS5wcm90X2wxIHwgUE1EX0RPTUFJTihkb21haW4pOworCXByb3Rfc2VjdCA9IG1lbV90eXBlc1ttZC0+dHlwZV0ucHJvdF9zZWN0IHwgUE1EX0RPTUFJTihkb21haW4pOworCisJLyoKKwkgKiBDYXRjaCAzNi1iaXQgYWRkcmVzc2VzCisJICovCisJaWYobWQtPnBmbiA+PSAweDEwMDAwMCkgeworCQlpZihkb21haW4pIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiTU06IGludmFsaWQgZG9tYWluIGluIHN1cGVyc2VjdGlvbiAiCisJCQkJIm1hcHBpbmcgZm9yIDB4JTA4bGx4IGF0IDB4JTA4bHhcbiIsCisJCQkJX19wZm5fdG9fcGh5cygodTY0KW1kLT5wZm4pLCBtZC0+dmlydHVhbCk7CisJCQlyZXR1cm47CisJCX0KKwkJaWYoKG1kLT52aXJ0dWFsIHwgbWQtPmxlbmd0aCB8IF9fcGZuX3RvX3BoeXMobWQtPnBmbikpCisJCQkmIH5TVVBFUlNFQ1RJT05fTUFTSykgeworCQkJcHJpbnRrKEtFUk5fRVJSICJNTTogY2Fubm90IGNyZWF0ZSBtYXBwaW5nIGZvciAiCisJCQkJIjB4JTA4bGx4IGF0IDB4JTA4bHggaW52YWxpZCBhbGlnbm1lbnRcbiIsCisJCQkJX19wZm5fdG9fcGh5cygodTY0KW1kLT5wZm4pLCBtZC0+dmlydHVhbCk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKgorCQkgKiBTaGlmdCBiaXRzIFszNTozMl0gb2YgYWRkcmVzcyBpbnRvIGJpdHMgWzIzOjIwXSBvZiBQTUQKKwkJICogKFNlZSBBUk12NiBzcGVjKS4KKwkJICovCisJCW9mZiB8PSAoKChtZC0+cGZuID4+ICgzMiAtIFBBR0VfU0hJRlQpKSAmIDB4RikgPDwgMjApOworCX0KKworCXZpcnQgICA9IG1kLT52aXJ0dWFsOworCW9mZiAgIC09IHZpcnQ7CisJbGVuZ3RoID0gbWQtPmxlbmd0aDsKKworCWlmIChtZW1fdHlwZXNbbWQtPnR5cGVdLnByb3RfbDEgPT0gMCAmJgorCSAgICAodmlydCAmIDB4ZmZmZmYgfHwgKHZpcnQgKyBvZmYpICYgMHhmZmZmZiB8fCAodmlydCArIGxlbmd0aCkgJiAweGZmZmZmKSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJCVUc6IG1hcCBmb3IgMHglMDhseCBhdCAweCUwOGx4IGNhbiBub3QgIgorCQkgICAgICAgImJlIG1hcHBlZCB1c2luZyBwYWdlcywgaWdub3JpbmcuXG4iLAorCQkgICAgICAgX19wZm5fdG9fcGh5cyhtZC0+cGZuKSwgbWQtPnZpcnR1YWwpOworCQlyZXR1cm47CisJfQorCisJd2hpbGUgKCh2aXJ0ICYgMHhmZmZmZiB8fCAodmlydCArIG9mZikgJiAweGZmZmZmKSAmJiBsZW5ndGggPj0gUEFHRV9TSVpFKSB7CisJCWFsbG9jX2luaXRfcGFnZSh2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X2wxLCBwcm90X3B0ZSk7CisKKwkJdmlydCAgICs9IFBBR0VfU0laRTsKKwkJbGVuZ3RoIC09IFBBR0VfU0laRTsKKwl9CisKKwkvKiBOLkIuCUFSTXY2IHN1cGVyc2VjdGlvbnMgYXJlIG9ubHkgZGVmaW5lZCB0byB3b3JrIHdpdGggZG9tYWluIDAuCisJICoJU2luY2UgZG9tYWluIGFzc2lnbm1lbnRzIGNhbiBpbiBmYWN0IGJlIGFyYml0cmFyeSwgdGhlCisJICoJJ2RvbWFpbiA9PSAwJyBjaGVjayBiZWxvdyBpcyByZXF1aXJlZCB0byBpbnN1cmUgdGhhdCBBUk12NgorCSAqCXN1cGVyc2VjdGlvbnMgYXJlIG9ubHkgYWxsb2NhdGVkIGZvciBkb21haW4gMCByZWdhcmRsZXNzCisJICoJb2YgdGhlIGFjdHVhbCBkb21haW4gYXNzaWdubWVudHMgaW4gdXNlLgorCSAqLworCWlmICgoY3B1X2FyY2hpdGVjdHVyZSgpID49IENQVV9BUkNIX0FSTXY2IHx8IGNwdV9pc194c2MzKCkpCisJCSYmIGRvbWFpbiA9PSAwKSB7CisJCS8qCisJCSAqIEFsaWduIHRvIHN1cGVyc2VjdGlvbiBib3VuZGFyeSBpZiAhaGlnaCBwYWdlcy4KKwkJICogSGlnaCBwYWdlcyBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkIGZvciBwcm9wZXIKKwkJICogYWxpZ25tZW50IGFib3ZlIGFuZCB0aGV5IHdpbGwgZmFpbCB0aGUgU1VQU0VSU0VDVElPTl9NQVNLCisJCSAqIGNoZWNrIGJlY2F1c2Ugb2YgdGhlIHdheSB0aGUgYWRkcmVzcyBpcyBlbmNvZGVkIGludG8KKwkJICogb2Zmc2V0LgorCQkgKi8KKwkJaWYgKG1kLT5wZm4gPD0gMHgxMDAwMDApIHsKKwkJCXdoaWxlICgodmlydCAmIH5TVVBFUlNFQ1RJT05fTUFTSyB8fAorCQkJICAgICAgICAodmlydCArIG9mZikgJiB+U1VQRVJTRUNUSU9OX01BU0spICYmCisJCQkJbGVuZ3RoID49IChQR0RJUl9TSVpFIC8gMikpIHsKKwkJCQlhbGxvY19pbml0X3NlY3Rpb24odmlydCwgdmlydCArIG9mZiwgcHJvdF9zZWN0KTsKKworCQkJCXZpcnQgICArPSAoUEdESVJfU0laRSAvIDIpOworCQkJCWxlbmd0aCAtPSAoUEdESVJfU0laRSAvIDIpOworCQkJfQorCQl9CisKKwkJd2hpbGUgKGxlbmd0aCA+PSBTVVBFUlNFQ1RJT05fU0laRSkgeworCQkJYWxsb2NfaW5pdF9zdXBlcnNlY3Rpb24odmlydCwgdmlydCArIG9mZiwgcHJvdF9zZWN0KTsKKworCQkJdmlydCAgICs9IFNVUEVSU0VDVElPTl9TSVpFOworCQkJbGVuZ3RoIC09IFNVUEVSU0VDVElPTl9TSVpFOworCQl9CisJfQorCisJLyoKKwkgKiBBIHNlY3Rpb24gbWFwcGluZyBjb3ZlcnMgaGFsZiBhICJwZ2RpciIgZW50cnkuCisJICovCisJd2hpbGUgKGxlbmd0aCA+PSAoUEdESVJfU0laRSAvIDIpKSB7CisJCWFsbG9jX2luaXRfc2VjdGlvbih2aXJ0LCB2aXJ0ICsgb2ZmLCBwcm90X3NlY3QpOworCisJCXZpcnQgICArPSAoUEdESVJfU0laRSAvIDIpOworCQlsZW5ndGggLT0gKFBHRElSX1NJWkUgLyAyKTsKKwl9CisKKwl3aGlsZSAobGVuZ3RoID49IFBBR0VfU0laRSkgeworCQlhbGxvY19pbml0X3BhZ2UodmlydCwgdmlydCArIG9mZiwgcHJvdF9sMSwgcHJvdF9wdGUpOworCisJCXZpcnQgICArPSBQQUdFX1NJWkU7CisJCWxlbmd0aCAtPSBQQUdFX1NJWkU7CisJfQorfQorCisvKgorICogQ3JlYXRlIHRoZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbWFwcGluZ3MKKyAqLwordm9pZCBfX2luaXQgaW90YWJsZV9pbml0KHN0cnVjdCBtYXBfZGVzYyAqaW9fZGVzYywgaW50IG5yKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisJCWNyZWF0ZV9tYXBwaW5nKGlvX2Rlc2MgKyBpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHByZXBhcmVfcGFnZV90YWJsZShzdHJ1Y3QgbWVtaW5mbyAqbWkpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCisJLyoKKwkgKiBDbGVhciBvdXQgYWxsIHRoZSBtYXBwaW5ncyBiZWxvdyB0aGUga2VybmVsIGltYWdlLgorCSAqLworCWZvciAoYWRkciA9IDA7IGFkZHIgPCBNT0RVTEVfU1RBUlQ7IGFkZHIgKz0gUEdESVJfU0laRSkKKwkJcG1kX2NsZWFyKHBtZF9vZmZfayhhZGRyKSk7CisKKyNpZmRlZiBDT05GSUdfWElQX0tFUk5FTAorCS8qIFRoZSBYSVAga2VybmVsIGlzIG1hcHBlZCBpbiB0aGUgbW9kdWxlIGFyZWEgLS0gc2tpcCBvdmVyIGl0ICovCisJYWRkciA9ICgodW5zaWduZWQgbG9uZykmX2V0ZXh0ICsgUEdESVJfU0laRSAtIDEpICYgUEdESVJfTUFTSzsKKyNlbmRpZgorCWZvciAoIDsgYWRkciA8IFBBR0VfT0ZGU0VUOyBhZGRyICs9IFBHRElSX1NJWkUpCisJCXBtZF9jbGVhcihwbWRfb2ZmX2soYWRkcikpOworCisJLyoKKwkgKiBDbGVhciBvdXQgYWxsIHRoZSBrZXJuZWwgc3BhY2UgbWFwcGluZ3MsIGV4Y2VwdCBmb3IgdGhlIGZpcnN0CisJICogbWVtb3J5IGJhbmssIHVwIHRvIHRoZSBlbmQgb2YgdGhlIHZtYWxsb2MgcmVnaW9uLgorCSAqLworCWZvciAoYWRkciA9IF9fcGh5c190b192aXJ0KG1pLT5iYW5rWzBdLnN0YXJ0ICsgbWktPmJhbmtbMF0uc2l6ZSk7CisJICAgICBhZGRyIDwgVk1BTExPQ19FTkQ7IGFkZHIgKz0gUEdESVJfU0laRSkKKwkJcG1kX2NsZWFyKHBtZF9vZmZfayhhZGRyKSk7Cit9CisKKy8qCisgKiBSZXNlcnZlIHRoZSB2YXJpb3VzIHJlZ2lvbnMgb2Ygbm9kZSAwCisgKi8KK3ZvaWQgX19pbml0IHJlc2VydmVfbm9kZV96ZXJvKHBnX2RhdGFfdCAqcGdkYXQpCit7CisJdW5zaWduZWQgbG9uZyByZXNfc2l6ZSA9IDA7CisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCBhbmQgZGF0YSB3aXRoIGJvb3RtZW0uCisJICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgYmUgaW4gbm9kZSAwLgorCSAqLworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9fZGF0YV9zdGFydCksICZfZW5kIC0gJl9fZGF0YV9zdGFydCk7CisjZWxzZQorCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKCZfc3RleHQpLCAmX2VuZCAtICZfc3RleHQpOworI2VuZGlmCisKKwkvKgorCSAqIFJlc2VydmUgdGhlIHBhZ2UgdGFibGVzLiAgVGhlc2UgYXJlIGFscmVhZHkgaW4gdXNlLAorCSAqIGFuZCBjYW4gb25seSBiZSBpbiBub2RlIDAuCisJICovCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoc3dhcHBlcl9wZ19kaXIpLAorCQkJICAgICBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKKworCS8qCisJICogSG1tLi4uIFRoaXMgc2hvdWxkIGdvIGVsc2V3aGVyZSwgYnV0IHdlIHJlYWxseSByZWFsbHkgbmVlZCB0bworCSAqIHN0b3AgdGhpbmdzIGFsbG9jYXRpbmcgdGhlIGxvdyBtZW1vcnk7IGlkZWFsbHkgd2UgbmVlZCBhIGJldHRlcgorCSAqIGltcGxlbWVudGF0aW9uIG9mIEdGUF9ETUEgd2hpY2ggZG9lcyBub3QgYXNzdW1lIHRoYXQgRE1BLWFibGUKKwkgKiBtZW1vcnkgc3RhcnRzIGF0IHplcm8uCisJICovCisJaWYgKG1hY2hpbmVfaXNfaW50ZWdyYXRvcigpIHx8IG1hY2hpbmVfaXNfY2ludGVncmF0b3IoKSkKKwkJcmVzX3NpemUgPSBfX3BhKHN3YXBwZXJfcGdfZGlyKSAtIFBIWVNfT0ZGU0VUOworCisJLyoKKwkgKiBUaGVzZSBzaG91bGQgbGlrZXdpc2UgZ28gZWxzZXdoZXJlLiAgVGhleSBwcmUtcmVzZXJ2ZSB0aGUKKwkgKiBzY3JlZW4gbWVtb3J5IHJlZ2lvbiBhdCB0aGUgc3RhcnQgb2YgbWFpbiBzeXN0ZW0gbWVtb3J5LgorCSAqLworCWlmIChtYWNoaW5lX2lzX2VkYjcyMTEoKSkKKwkJcmVzX3NpemUgPSAweDAwMDIwMDAwOworCWlmIChtYWNoaW5lX2lzX3A3MjB0KCkpCisJCXJlc19zaXplID0gMHgwMDAxNDAwMDsKKworI2lmZGVmIENPTkZJR19TQTExMTEKKwkvKgorCSAqIEJlY2F1c2Ugb2YgdGhlIFNBMTExMSBETUEgYnVnLCB3ZSB3YW50IHRvIHByZXNlcnZlIG91cgorCSAqIHByZWNpb3VzIERNQS1hYmxlIG1lbW9yeS4uLgorCSAqLworCXJlc19zaXplID0gX19wYShzd2FwcGVyX3BnX2RpcikgLSBQSFlTX09GRlNFVDsKKyNlbmRpZgorCWlmIChyZXNfc2l6ZSkKKwkJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIFBIWVNfT0ZGU0VULCByZXNfc2l6ZSk7Cit9CisKKy8qCisgKiBTZXQgdXAgZGV2aWNlIHRoZSBtYXBwaW5ncy4gIFNpbmNlIHdlIGNsZWFyIG91dCB0aGUgcGFnZSB0YWJsZXMgZm9yIGFsbAorICogbWFwcGluZ3MgYWJvdmUgVk1BTExPQ19FTkQsIHdlIHdpbGwgcmVtb3ZlIGFueSBkZWJ1ZyBkZXZpY2UgbWFwcGluZ3MuCisgKiBUaGlzIG1lYW5zIHlvdSBoYXZlIHRvIGJlIGNhcmVmdWwgaG93IHlvdSBkZWJ1ZyB0aGlzIGZ1bmN0aW9uLCBvciBhbnkKKyAqIGNhbGxlZCBmdW5jdGlvbi4gIFRoaXMgbWVhbnMgeW91IGNhbid0IHVzZSBhbnkgZnVuY3Rpb24gb3IgZGVidWdnaW5nCisgKiBtZXRob2Qgd2hpY2ggbWF5IHRvdWNoIGFueSBkZXZpY2UsIG90aGVyd2lzZSB0aGUga2VybmVsIF93aWxsXyBjcmFzaC4KKyAqLworc3RhdGljIHZvaWQgX19pbml0IGRldmljZW1hcHNfaW5pdChzdHJ1Y3QgbWFjaGluZV9kZXNjICptZGVzYykKK3sKKwlzdHJ1Y3QgbWFwX2Rlc2MgbWFwOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwl2b2lkICp2ZWN0b3JzOworCisJLyoKKwkgKiBBbGxvY2F0ZSB0aGUgdmVjdG9yIHBhZ2UgZWFybHkuCisJICovCisJdmVjdG9ycyA9IGFsbG9jX2Jvb3RtZW1fbG93X3BhZ2VzKFBBR0VfU0laRSk7CisJQlVHX09OKCF2ZWN0b3JzKTsKKworCWZvciAoYWRkciA9IFZNQUxMT0NfRU5EOyBhZGRyOyBhZGRyICs9IFBHRElSX1NJWkUpCisJCXBtZF9jbGVhcihwbWRfb2ZmX2soYWRkcikpOworCisJLyoKKwkgKiBNYXAgdGhlIGtlcm5lbCBpZiBpdCBpcyBYSVAuCisJICogSXQgaXMgYWx3YXlzIGZpcnN0IGluIHRoZSBtb2R1bGVhcmVhLgorCSAqLworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJbWFwLnBmbiA9IF9fcGh5c190b19wZm4oQ09ORklHX1hJUF9QSFlTX0FERFIgJiBTRUNUSU9OX01BU0spOworCW1hcC52aXJ0dWFsID0gTU9EVUxFX1NUQVJUOworCW1hcC5sZW5ndGggPSAoKHVuc2lnbmVkIGxvbmcpJl9ldGV4dCAtIG1hcC52aXJ0dWFsICsgflNFQ1RJT05fTUFTSykgJiBTRUNUSU9OX01BU0s7CisJbWFwLnR5cGUgPSBNVF9ST007CisJY3JlYXRlX21hcHBpbmcoJm1hcCk7CisjZW5kaWYKKworCS8qCisJICogTWFwIHRoZSBjYWNoZSBmbHVzaGluZyByZWdpb25zLgorCSAqLworI2lmZGVmIEZMVVNIX0JBU0UKKwltYXAucGZuID0gX19waHlzX3RvX3BmbihGTFVTSF9CQVNFX1BIWVMpOworCW1hcC52aXJ0dWFsID0gRkxVU0hfQkFTRTsKKwltYXAubGVuZ3RoID0gU1pfMU07CisJbWFwLnR5cGUgPSBNVF9DQUNIRUNMRUFOOworCWNyZWF0ZV9tYXBwaW5nKCZtYXApOworI2VuZGlmCisjaWZkZWYgRkxVU0hfQkFTRV9NSU5JQ0FDSEUKKwltYXAucGZuID0gX19waHlzX3RvX3BmbihGTFVTSF9CQVNFX1BIWVMgKyBTWl8xTSk7CisJbWFwLnZpcnR1YWwgPSBGTFVTSF9CQVNFX01JTklDQUNIRTsKKwltYXAubGVuZ3RoID0gU1pfMU07CisJbWFwLnR5cGUgPSBNVF9NSU5JQ0xFQU47CisJY3JlYXRlX21hcHBpbmcoJm1hcCk7CisjZW5kaWYKKworCS8qCisJICogQ3JlYXRlIGEgbWFwcGluZyBmb3IgdGhlIG1hY2hpbmUgdmVjdG9ycyBhdCB0aGUgaGlnaC12ZWN0b3JzCisJICogbG9jYXRpb24gKDB4ZmZmZjAwMDApLiAgSWYgd2UgYXJlbid0IHVzaW5nIGhpZ2gtdmVjdG9ycywgYWxzbworCSAqIGNyZWF0ZSBhIG1hcHBpbmcgYXQgdGhlIGxvdy12ZWN0b3JzIHZpcnR1YWwgYWRkcmVzcy4KKwkgKi8KKwltYXAucGZuID0gX19waHlzX3RvX3Bmbih2aXJ0X3RvX3BoeXModmVjdG9ycykpOworCW1hcC52aXJ0dWFsID0gMHhmZmZmMDAwMDsKKwltYXAubGVuZ3RoID0gUEFHRV9TSVpFOworCW1hcC50eXBlID0gTVRfSElHSF9WRUNUT1JTOworCWNyZWF0ZV9tYXBwaW5nKCZtYXApOworCisJaWYgKCF2ZWN0b3JzX2hpZ2goKSkgeworCQltYXAudmlydHVhbCA9IDA7CisJCW1hcC50eXBlID0gTVRfTE9XX1ZFQ1RPUlM7CisJCWNyZWF0ZV9tYXBwaW5nKCZtYXApOworCX0KKworCS8qCisJICogQXNrIHRoZSBtYWNoaW5lIHN1cHBvcnQgdG8gbWFwIGluIHRoZSBzdGF0aWNhbGx5IG1hcHBlZCBkZXZpY2VzLgorCSAqLworCWlmIChtZGVzYy0+bWFwX2lvKQorCQltZGVzYy0+bWFwX2lvKCk7CisKKwkvKgorCSAqIEZpbmFsbHkgZmx1c2ggdGhlIGNhY2hlcyBhbmQgdGxiIHRvIGVuc3VyZSB0aGF0IHdlJ3JlIGluIGEKKwkgKiBjb25zaXN0ZW50IHN0YXRlIHdydCB0aGUgd3JpdGVidWZmZXIuICBUaGlzIGFsc28gZW5zdXJlcyB0aGF0CisJICogYW55IHdyaXRlLWFsbG9jYXRlZCBjYWNoZSBsaW5lcyBpbiB0aGUgdmVjdG9yIHBhZ2UgYXJlIHdyaXR0ZW4KKwkgKiBiYWNrLiAgQWZ0ZXIgdGhpcyBwb2ludCwgd2UgY2FuIHN0YXJ0IHRvIHRvdWNoIGRldmljZXMgYWdhaW4uCisJICovCisJbG9jYWxfZmx1c2hfdGxiX2FsbCgpOworCWZsdXNoX2NhY2hlX2FsbCgpOworfQorCisvKgorICogcGFnaW5nX2luaXQoKSBzZXRzIHVwIHRoZSBwYWdlIHRhYmxlcywgaW5pdGlhbGlzZXMgdGhlIHpvbmUgbWVtb3J5CisgKiBtYXBzLCBhbmQgc2V0cyB1cCB0aGUgemVybyBwYWdlLCBiYWQgcGFnZSBhbmQgYmFkIHBhZ2UgdGFibGVzLgorICovCit2b2lkIF9faW5pdCBwYWdpbmdfaW5pdChzdHJ1Y3QgbWVtaW5mbyAqbWksIHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKQoreworCXZvaWQgKnplcm9fcGFnZTsKKworCWJ1aWxkX21lbV90eXBlX3RhYmxlKCk7CisJcHJlcGFyZV9wYWdlX3RhYmxlKG1pKTsKKwlib290bWVtX2luaXQobWkpOworCWRldmljZW1hcHNfaW5pdChtZGVzYyk7CisKKwl0b3BfcG1kID0gcG1kX29mZl9rKDB4ZmZmZjAwMDApOworCisJLyoKKwkgKiBhbGxvY2F0ZSB0aGUgemVybyBwYWdlLiAgTm90ZSB0aGF0IHdlIGNvdW50IG9uIHRoaXMgZ29pbmcgb2suCisJICovCisJemVyb19wYWdlID0gYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKKwltZW16ZXJvKHplcm9fcGFnZSwgUEFHRV9TSVpFKTsKKwllbXB0eV96ZXJvX3BhZ2UgPSB2aXJ0X3RvX3BhZ2UoemVyb19wYWdlKTsKKwlmbHVzaF9kY2FjaGVfcGFnZShlbXB0eV96ZXJvX3BhZ2UpOworfQorCisvKgorICogSW4gb3JkZXIgdG8gc29mdC1ib290LCB3ZSBuZWVkIHRvIGluc2VydCBhIDE6MSBtYXBwaW5nIGluIHBsYWNlIG9mCisgKiB0aGUgdXNlci1tb2RlIHBhZ2VzLiAgVGhpcyB3aWxsIHRoZW4gZW5zdXJlIHRoYXQgd2UgaGF2ZSBwcmVkaWN0YWJsZQorICogcmVzdWx0cyB3aGVuIHR1cm5pbmcgdGhlIG1tdSBvZmYKKyAqLwordm9pZCBzZXR1cF9tbV9mb3JfcmVib290KGNoYXIgbW9kZSkKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2VfcG1kdmFsOworCXBnZF90ICpwZ2Q7CisJaW50IGk7CisKKwlpZiAoY3VycmVudC0+bW0gJiYgY3VycmVudC0+bW0tPnBnZCkKKwkJcGdkID0gY3VycmVudC0+bW0tPnBnZDsKKwllbHNlCisJCXBnZCA9IGluaXRfbW0ucGdkOworCisJYmFzZV9wbWR2YWwgPSBQTURfU0VDVF9BUF9XUklURSB8IFBNRF9TRUNUX0FQX1JFQUQgfCBQTURfVFlQRV9TRUNUOworCWlmIChjcHVfYXJjaGl0ZWN0dXJlKCkgPD0gQ1BVX0FSQ0hfQVJNdjVURUogJiYgIWNwdV9pc194c2NhbGUoKSkKKwkJYmFzZV9wbWR2YWwgfD0gUE1EX0JJVDQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgRklSU1RfVVNFUl9QR0RfTlIgKyBVU0VSX1BUUlNfUEVSX1BHRDsgaSsrLCBwZ2QrKykgeworCQl1bnNpZ25lZCBsb25nIHBtZHZhbCA9IChpIDw8IFBHRElSX1NISUZUKSB8IGJhc2VfcG1kdmFsOworCQlwbWRfdCAqcG1kOworCisJCXBtZCA9IHBtZF9vZmYocGdkLCBpIDw8IFBHRElSX1NISUZUKTsKKwkJcG1kWzBdID0gX19wbWQocG1kdmFsKTsKKwkJcG1kWzFdID0gX19wbWQocG1kdmFsICsgKDEgPDwgKFBHRElSX1NISUZUIC0gMSkpKTsKKwkJZmx1c2hfcG1kX2VudHJ5KHBtZCk7CisJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vbm9tbXUuYyBiL2FyY2gvYXJtL21tL25vbW11LmMKaW5kZXggMTQ2NGVkOC4uZDBlNjY0MiAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbW0vbm9tbXUuYworKysgYi9hcmNoL2FybS9tbS9ub21tdS5jCkBAIC0xMSw2ICsxMSw0OSBAQAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKKyNpbmNsdWRlICJtbS5oIgorCitleHRlcm4gdm9pZCBfc3RleHQsIF9fZGF0YV9zdGFydCwgX2VuZDsKKworLyoKKyAqIFJlc2VydmUgdGhlIHZhcmlvdXMgcmVnaW9ucyBvZiBub2RlIDAKKyAqLwordm9pZCBfX2luaXQgcmVzZXJ2ZV9ub2RlX3plcm8ocGdfZGF0YV90ICpwZ2RhdCkKK3sKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBrZXJuZWwgdGV4dCBhbmQgZGF0YSB3aXRoIGJvb3RtZW0uCisJICogTm90ZSB0aGF0IHRoaXMgY2FuIG9ubHkgYmUgaW4gbm9kZSAwLgorCSAqLworI2lmZGVmIENPTkZJR19YSVBfS0VSTkVMCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIF9fcGEoJl9fZGF0YV9zdGFydCksICZfZW5kIC0gJl9fZGF0YV9zdGFydCk7CisjZWxzZQorCXJlc2VydmVfYm9vdG1lbV9ub2RlKHBnZGF0LCBfX3BhKCZfc3RleHQpLCAmX2VuZCAtICZfc3RleHQpOworI2VuZGlmCisKKwkvKgorCSAqIFJlZ2lzdGVyIHRoZSBleGNlcHRpb24gdmVjdG9yIHBhZ2UuCisJICogc29tZSBhcmNoaXRlY3R1cmVzIHdoaWNoIHRoZSBEUkFNIGlzIHRoZSBleGNlcHRpb24gdmVjdG9yIHRvIHRyYXAsCisJICogYWxsb2NfcGFnZSBicmVha3Mgd2l0aCBlcnJvciwgYWx0aG91Z2ggaXQgaXMgbm90IE5VTEwsIGJ1dCAiMC4iCisJICovCisJcmVzZXJ2ZV9ib290bWVtX25vZGUocGdkYXQsIENPTkZJR19WRUNUT1JTX0JBU0UsIFBBR0VfU0laRSk7Cit9CisKKy8qCisgKiBwYWdpbmdfaW5pdCgpIHNldHMgdXAgdGhlIHBhZ2UgdGFibGVzLCBpbml0aWFsaXNlcyB0aGUgem9uZSBtZW1vcnkKKyAqIG1hcHMsIGFuZCBzZXRzIHVwIHRoZSB6ZXJvIHBhZ2UsIGJhZCBwYWdlIGFuZCBiYWQgcGFnZSB0YWJsZXMuCisgKi8KK3ZvaWQgX19pbml0IHBhZ2luZ19pbml0KHN0cnVjdCBtZW1pbmZvICptaSwgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpCit7CisJYm9vdG1lbV9pbml0KG1pKTsKK30KKworLyoKKyAqIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVyZSBmb3Igbm9tbXUgbWFjaGluZXMuCisgKi8KK3ZvaWQgc2V0dXBfbW1fZm9yX3JlYm9vdChjaGFyIG1vZGUpCit7Cit9CisKIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wZ2QuYyBiL2FyY2gvYXJtL21tL3BnZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwYzFiMGQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9tbS9wZ2QuYwpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9wZ2QuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSBSdXNzZWxsIEtpbmcKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisKKyNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNpbmNsdWRlICJtbS5oIgorCisjZGVmaW5lIEZJUlNUX0tFUk5FTF9QR0RfTlIJKEZJUlNUX1VTRVJfUEdEX05SICsgVVNFUl9QVFJTX1BFUl9QR0QpCisKKy8qCisgKiBuZWVkIHRvIGdldCBhIDE2ayBwYWdlIGZvciBsZXZlbCAxCisgKi8KK3BnZF90ICpnZXRfcGdkX3Nsb3coc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJcGdkX3QgKm5ld19wZ2QsICppbml0X3BnZDsKKwlwbWRfdCAqbmV3X3BtZCwgKmluaXRfcG1kOworCXB0ZV90ICpuZXdfcHRlLCAqaW5pdF9wdGU7CisKKwluZXdfcGdkID0gKHBnZF90ICopX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLCAyKTsKKwlpZiAoIW5ld19wZ2QpCisJCWdvdG8gbm9fcGdkOworCisJbWVtemVybyhuZXdfcGdkLCBGSVJTVF9LRVJORUxfUEdEX05SICogc2l6ZW9mKHBnZF90KSk7CisKKwkvKgorCSAqIENvcHkgb3ZlciB0aGUga2VybmVsIGFuZCBJTyBQR0QgZW50cmllcworCSAqLworCWluaXRfcGdkID0gcGdkX29mZnNldF9rKDApOworCW1lbWNweShuZXdfcGdkICsgRklSU1RfS0VSTkVMX1BHRF9OUiwgaW5pdF9wZ2QgKyBGSVJTVF9LRVJORUxfUEdEX05SLAorCQkgICAgICAgKFBUUlNfUEVSX1BHRCAtIEZJUlNUX0tFUk5FTF9QR0RfTlIpICogc2l6ZW9mKHBnZF90KSk7CisKKwljbGVhbl9kY2FjaGVfYXJlYShuZXdfcGdkLCBQVFJTX1BFUl9QR0QgKiBzaXplb2YocGdkX3QpKTsKKworCWlmICghdmVjdG9yc19oaWdoKCkpIHsKKwkJLyoKKwkJICogT24gQVJNLCBmaXJzdCBwYWdlIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBzaW5jZSBpdAorCQkgKiBjb250YWlucyB0aGUgbWFjaGluZSB2ZWN0b3JzLgorCQkgKi8KKwkJbmV3X3BtZCA9IHBtZF9hbGxvYyhtbSwgbmV3X3BnZCwgMCk7CisJCWlmICghbmV3X3BtZCkKKwkJCWdvdG8gbm9fcG1kOworCisJCW5ld19wdGUgPSBwdGVfYWxsb2NfbWFwKG1tLCBuZXdfcG1kLCAwKTsKKwkJaWYgKCFuZXdfcHRlKQorCQkJZ290byBub19wdGU7CisKKwkJaW5pdF9wbWQgPSBwbWRfb2Zmc2V0KGluaXRfcGdkLCAwKTsKKwkJaW5pdF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoaW5pdF9wbWQsIDApOworCQlzZXRfcHRlKG5ld19wdGUsICppbml0X3B0ZSk7CisJCXB0ZV91bm1hcF9uZXN0ZWQoaW5pdF9wdGUpOworCQlwdGVfdW5tYXAobmV3X3B0ZSk7CisJfQorCisJcmV0dXJuIG5ld19wZ2Q7CisKK25vX3B0ZToKKwlwbWRfZnJlZShuZXdfcG1kKTsKK25vX3BtZDoKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKW5ld19wZ2QsIDIpOworbm9fcGdkOgorCXJldHVybiBOVUxMOworfQorCit2b2lkIGZyZWVfcGdkX3Nsb3cocGdkX3QgKnBnZCkKK3sKKwlwbWRfdCAqcG1kOworCXN0cnVjdCBwYWdlICpwdGU7CisKKwlpZiAoIXBnZCkKKwkJcmV0dXJuOworCisJLyogcGdkIGlzIGFsd2F5cyBwcmVzZW50IGFuZCBnb29kICovCisJcG1kID0gcG1kX29mZihwZ2QsIDApOworCWlmIChwbWRfbm9uZSgqcG1kKSkKKwkJZ290byBmcmVlOworCWlmIChwbWRfYmFkKCpwbWQpKSB7CisJCXBtZF9FUlJPUigqcG1kKTsKKwkJcG1kX2NsZWFyKHBtZCk7CisJCWdvdG8gZnJlZTsKKwl9CisKKwlwdGUgPSBwbWRfcGFnZSgqcG1kKTsKKwlwbWRfY2xlYXIocG1kKTsKKwlkZWNfem9uZV9wYWdlX3N0YXRlKHZpcnRfdG9fcGFnZSgodW5zaWduZWQgbG9uZyAqKXBnZCksIE5SX1BBR0VUQUJMRSk7CisJcHRlX2xvY2tfZGVpbml0KHB0ZSk7CisJcHRlX2ZyZWUocHRlKTsKKwlwbWRfZnJlZShwbWQpOworZnJlZToKKwlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSBwZ2QsIDIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vbW0vcHJvYy1hcm03NDAuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA3MTM4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtNzQwLlMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vYXJtNzQwLlM6IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBBUk03NDAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgSHlvayBTLiBDaG9pIChoeW9rLmNob2lAc2Ftc3VuZy5jb20pCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGFzbS9hc3NlbWJsZXIuaD4KKyNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2NpbmZvLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisJLnRleHQKKy8qCisgKiBjcHVfYXJtNzQwX3Byb2NfaW5pdCgpCisgKiBjcHVfYXJtNzQwX2RvX2lkbGUoKQorICogY3B1X2FybTc0MF9kY2FjaGVfY2xlYW5fYXJlYSgpCisgKiBjcHVfYXJtNzQwX3N3aXRjaF9tbSgpCisgKgorICogVGhlc2UgYXJlIG5vdCByZXF1aXJlZC4KKyAqLworRU5UUlkoY3B1X2FybTc0MF9wcm9jX2luaXQpCitFTlRSWShjcHVfYXJtNzQwX2RvX2lkbGUpCitFTlRSWShjcHVfYXJtNzQwX2RjYWNoZV9jbGVhbl9hcmVhKQorRU5UUlkoY3B1X2FybTc0MF9zd2l0Y2hfbW0pCisJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTc0MF9wcm9jX2ZpbigpCisgKi8KK0VOVFJZKGNwdV9hcm03NDBfcHJvY19maW4pCisJc3RtZmQJc3AhLCB7bHJ9CisJbW92CWlwLCAjUFNSX0ZfQklUIHwgUFNSX0lfQklUIHwgU1ZDX01PREUKKwltc3IJY3Bzcl9jLCBpcAorCW1yYwlwMTUsIDAsIHIwLCBjMSwgYzAsIDAKKwliaWMJcjAsIHIwLCAjMHgzZjAwMDAwMAkJQCBiYW5rL2YvbG9jay9zCisJYmljCXIwLCByMCwgIzB4MDAwMDAwMGMJCUAgdy1idWZmZXIvY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGRpc2FibGUgY2FjaGVzCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAkJQCBpbnZhbGlkYXRlIGNhY2hlCisJbGRtZmQJc3AhLCB7cGN9CisKKy8qCisgKiBjcHVfYXJtNzQwX3Jlc2V0KGxvYykKKyAqIFBhcmFtcyAgOiByMCA9IGFkZHJlc3MgdG8ganVtcCB0bworICogTm90ZXMgICA6IFRoaXMgc2V0cyB1cCBldmVyeXRoaW5nIGZvciBhIHJlc2V0CisgKi8KK0VOVFJZKGNwdV9hcm03NDBfcmVzZXQpCisJbW92CWlwLCAjMAorCW1jcglwMTUsIDAsIGlwLCBjNywgYzAsIDAJCUAgaW52YWxpZGF0ZSBjYWNoZQorCW1yYwlwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgZ2V0IGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDAwMDAwYwkJQCAuLi4uLi4uLi4uLi53Yy4uCisJbWNyCXAxNSwgMCwgaXAsIGMxLCBjMCwgMAkJQCBjdHJsIHJlZ2lzdGVyCisJbW92CXBjLCByMAorCisJX19JTklUCisKKwkudHlwZQlfX2FybTc0MF9zZXR1cCwgI2Z1bmN0aW9uCitfX2FybTc0MF9zZXR1cDoKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgMAkJQCBpbnZhbGlkYXRlIGNhY2hlcworCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjMwkJQCBkaXNhYmxlIGFyZWEgM343CisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNAorCW1jcglwMTUsIDAsIHIwLCBjNiwgYzUKKwltY3IJcDE1LCAwLCByMCwgYzYsIGM2CisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNworCisJbW92CXIwLCAjMHgwMDAwMDAzRgkJCUAgYmFzZSA9IDAsIHNpemUgPSA0R0IKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMwCQlAIHNldCBhcmVhIDAsIGRlZmF1bHQKKworCWxkcglyMCwgPShDT05GSUdfRFJBTV9CQVNFICYgMHhGRkZGRjAwMCkgQCBiYXNlWzMxOjEyXSBvZiBSQU0KKwlsZHIJcjEsID0oQ09ORklHX0RSQU1fU0laRSA+PiAxMikJQCBzaXplIG9mIFJBTSAobXVzdCBiZSA+PSA0S0IpCisJbW92CXIyLCAjMTAJCQkJQCAxMSBpcyB0aGUgbWluaW11bSAoNEtCKQorMToJYWRkCXIyLCByMiwgIzEJCQlAIGFyZWEgc2l6ZSAqPSAyCisJbW92CXIxLCByMSwgbHNyICMxCisJYm5lCTFiCQkJCUAgY291bnQgbm90IHplcm8gci1zaGlmdAorCW9ycglyMCwgcjAsIHIyLCBsc2wgIzEJCUAgdGhlIGFyZWEgcmVnaXN0ZXIgdmFsdWUKKwlvcnIJcjAsIHIwLCAjMQkJCUAgc2V0IGVuYWJsZSBiaXQKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMxCQlAIHNldCBhcmVhIDEsIFJBTQorCisJbGRyCXIwLCA9KENPTkZJR19GTEFTSF9NRU1fQkFTRSAmIDB4RkZGRkYwMDApIEAgYmFzZVszMToxMl0gb2YgRkxBU0gKKwlsZHIJcjEsID0oQ09ORklHX0ZMQVNIX1NJWkUgPj4gMTIpCUAgc2l6ZSBvZiBGTEFTSCAobXVzdCBiZSA+PSA0S0IpCisJbW92CXIyLCAjMTAJCQkJQCAxMSBpcyB0aGUgbWluaW11bSAoNEtCKQorMToJYWRkCXIyLCByMiwgIzEJCQlAIGFyZWEgc2l6ZSAqPSAyCisJbW92CXIxLCByMSwgbHNyICMxCisJYm5lCTFiCQkJCUAgY291bnQgbm90IHplcm8gci1zaGlmdAorCW9ycglyMCwgcjAsIHIyLCBsc2wgIzEJCUAgdGhlIGFyZWEgcmVnaXN0ZXIgdmFsdWUKKwlvcnIJcjAsIHIwLCAjMQkJCUAgc2V0IGVuYWJsZSBiaXQKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMyCQlAIHNldCBhcmVhIDIsIFJPTS9GTEFTSAorCisJbW92CXIwLCAjMHgwNgorCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAJCUAgUmVnaW9uIDEmMiBjYWNoZWFibGUKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltb3YJcjAsICMweDAwCQkJQCBkaXNhYmxlIHdob2xlIHdyaXRlIGJ1ZmZlcgorI2Vsc2UKKwltb3YJcjAsICMweDAyCQkJQCBSZWdpb24gMSB3cml0ZSBidWZmZXJyZWQKKyNlbmRpZgorCW1jcglwMTUsIDAsIHIwLCBjMywgYzAKKworCW1vdglyMCwgIzB4MTAwMDAKKwlzdWIJcjAsIHIwLCAjMQkJCUAgcjAgPSAweGZmZmYKKwltY3IJcDE1LCAwLCByMCwgYzUsIGMwCQlAIGFsbCByZWFkL3dyaXRlIGFjY2VzcworCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlcgorCWJpYwlyMCwgcjAsICMweDNGMDAwMDAwCQlAIHNldCB0byBzdGFuZGFyZCBjYWNoaW5nIG1vZGUKKwkJCQkJCUAgbmVlZCBzb21lIGJlbmNobWFyaworCW9ycglyMCwgcjAsICMweDAwMDAwMDBkCQlAIE1QVS9DYWNoZS9XQgorCisJbW92CXBjLCBscgorCisJLnNpemUJX19hcm03NDBfc2V0dXAsIC4gLSBfX2FybTc0MF9zZXR1cAorCisJX19JTklUREFUQQorCisvKgorICogUHVycG9zZSA6IEZ1bmN0aW9uIHBvaW50ZXJzIHVzZWQgdG8gYWNjZXNzIGFib3ZlIGZ1bmN0aW9ucyAtIGFsbCBjYWxscworICoJICAgICBjb21lIHRocm91Z2ggdGhlc2UKKyAqLworCS50eXBlCWFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zLCAjb2JqZWN0CitFTlRSWShhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkud29yZAl2NHRfbGF0ZV9hYm9ydAorCS53b3JkCWNwdV9hcm03NDBfcHJvY19pbml0CisJLndvcmQJY3B1X2FybTc0MF9wcm9jX2ZpbgorCS53b3JkCWNwdV9hcm03NDBfcmVzZXQKKwkud29yZCAgIGNwdV9hcm03NDBfZG9faWRsZQorCS53b3JkCWNwdV9hcm03NDBfZGNhY2hlX2NsZWFuX2FyZWEKKwkud29yZAljcHVfYXJtNzQwX3N3aXRjaF9tbQorCS53b3JkCTAJCQlAIGNwdV8qX3NldF9wdGUKKwkuc2l6ZQlhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTc0MF9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NCIKKwkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJLnR5cGUJY3B1X2VsZl9uYW1lLCAjb2JqZWN0CitjcHVfZWxmX25hbWU6CisJLmFzY2l6CSJ2NCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm03NDBfbmFtZSwgI29iamVjdAorY3B1X2FybTc0MF9uYW1lOgorCS5hc2NpaQkiQVJNNzQwVCIKKwkuc2l6ZQljcHVfYXJtNzQwX25hbWUsIC4gLSBjcHVfYXJtNzQwX25hbWUKKworCS5hbGlnbgorCisJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgorCS50eXBlCV9fYXJtNzQwX3Byb2NfaW5mbywjb2JqZWN0CitfX2FybTc0MF9wcm9jX2luZm86CisJLmxvbmcJMHg0MTgwNzQwMAorCS5sb25nCTB4ZmZmZmZmZjAKKwkubG9uZwkwCisJYglfX2FybTc0MF9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfMjZCSVQKKwkubG9uZwljcHVfYXJtNzQwX25hbWUKKwkubG9uZwlhcm03NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCTAKKwkubG9uZwkwCisJLmxvbmcJdjNfY2FjaGVfZm5zCQkJQCBjYWNoZSBtb2RlbAorCS5zaXplCV9fYXJtNzQwX3Byb2NfaW5mbywgLiAtIF9fYXJtNzQwX3Byb2NfaW5mbworCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmQ3ZTMxCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm03dGRtaS5TCkBAIC0wLDAgKzEsMjQ5IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtYXJtN3RkbWkuUzogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEFSTTdURE1JCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEh5b2sgUy4gQ2hvaSA8aHlvay5jaG9pQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworCS50ZXh0CisvKgorICogY3B1X2FybTd0ZG1pX3Byb2NfaW5pdCgpCisgKiBjcHVfYXJtN3RkbWlfZG9faWRsZSgpCisgKiBjcHVfYXJtN3RkbWlfZGNhY2hlX2NsZWFuX2FyZWEoKQorICogY3B1X2FybTd0ZG1pX3N3aXRjaF9tbSgpCisgKgorICogVGhlc2UgYXJlIG5vdCByZXF1aXJlZC4KKyAqLworRU5UUlkoY3B1X2FybTd0ZG1pX3Byb2NfaW5pdCkKK0VOVFJZKGNwdV9hcm03dGRtaV9kb19pZGxlKQorRU5UUlkoY3B1X2FybTd0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhKQorRU5UUlkoY3B1X2FybTd0ZG1pX3N3aXRjaF9tbSkKKwkJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTd0ZG1pX3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X2FybTd0ZG1pX3Byb2NfZmluKQorCQltb3YJcjAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCQltc3IJY3Bzcl9jLCByMAorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogY3B1X2FybTd0ZG1pX3Jlc2V0KGxvYykKKyAqIFBhcmFtcyAgOiBsb2MocjApCWFkZHJlc3MgdG8ganVtcCB0bworICogUHVycG9zZSA6IFNldHMgdXAgZXZlcnl0aGluZyBmb3IgYSByZXNldCBhbmQganVtcCB0byB0aGUgbG9jYXRpb24gZm9yIHNvZnQgcmVzZXQuCisgKi8KK0VOVFJZKGNwdV9hcm03dGRtaV9yZXNldCkKKwkJbW92CXBjLCByMAorCisJCV9fSU5JVAorCisJCS50eXBlCV9fYXJtN3RkbWlfc2V0dXAsICNmdW5jdGlvbgorX19hcm03dGRtaV9zZXR1cDoKKwkJbW92CXBjLCBscgorCQkuc2l6ZQlfX2FybTd0ZG1pX3NldHVwLCAuIC0gX19hcm03dGRtaV9zZXR1cAorCisJCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkJLnR5cGUJYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAorRU5UUlkoYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkJLndvcmQJdjR0X2xhdGVfYWJvcnQKKwkJLndvcmQJY3B1X2FybTd0ZG1pX3Byb2NfaW5pdAorCQkud29yZAljcHVfYXJtN3RkbWlfcHJvY19maW4KKwkJLndvcmQJY3B1X2FybTd0ZG1pX3Jlc2V0CisJCS53b3JkCWNwdV9hcm03dGRtaV9kb19pZGxlCisJCS53b3JkCWNwdV9hcm03dGRtaV9kY2FjaGVfY2xlYW5fYXJlYQorCQkud29yZAljcHVfYXJtN3RkbWlfc3dpdGNoX21tCisJCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCQkuc2l6ZQlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJCS5zZWN0aW9uICIucm9kYXRhIgorCisJCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJCS5hc2NpegkiYXJtdjR0IgorCQkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCQkuYXNjaXoJInY0IgorCQkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCQkudHlwZQljcHVfYXJtN3RkbWlfbmFtZSwgI29iamVjdAorY3B1X2FybTd0ZG1pX25hbWU6CisJCS5hc2NpegkiQVJNN1RETUkiCisJCS5zaXplCWNwdV9hcm03dGRtaV9uYW1lLCAuIC0gY3B1X2FybTd0ZG1pX25hbWUKKworCQkudHlwZQljcHVfdHJpc2NlbmRhN19uYW1lLCAjb2JqZWN0CitjcHVfdHJpc2NlbmRhN19uYW1lOgorCQkuYXNjaXoJIlRyaXNjZW5kLUE3eCIKKwkJLnNpemUJY3B1X3RyaXNjZW5kYTdfbmFtZSwgLiAtIGNwdV90cmlzY2VuZGE3X25hbWUKKworCQkudHlwZQljcHVfYXQ5MV9uYW1lLCAjb2JqZWN0CitjcHVfYXQ5MV9uYW1lOgorCQkuYXNjaXoJIkF0bWVsLUFUOTFNNDB4eHgiCisJCS5zaXplCWNwdV9hdDkxX25hbWUsIC4gLSBjcHVfYXQ5MV9uYW1lCisKKwkJLnR5cGUJY3B1X3MzYzM0MTBfbmFtZSwgI29iamVjdAorY3B1X3MzYzM0MTBfbmFtZToKKwkJLmFzY2l6CSJTYW1zdW5nLVMzQzM0MTAiCisJCS5zaXplCWNwdV9zM2MzNDEwX25hbWUsIC4gLSBjcHVfczNjMzQxMF9uYW1lCisKKwkJLnR5cGUJY3B1X3MzYzQ0YjB4X25hbWUsICNvYmplY3QKK2NwdV9zM2M0NGIweF9uYW1lOgorCQkuYXNjaXoJIlNhbXN1bmctUzNDNDRCMHgiCisJCS5zaXplCWNwdV9zM2M0NGIweF9uYW1lLCAuIC0gY3B1X3MzYzQ0YjB4X25hbWUKKworCQkudHlwZQljcHVfczNjNDUxMGIsICNvYmplY3QKK2NwdV9zM2M0NTEwYl9uYW1lOgorCQkuYXNjaXoJIlNhbXN1bmctUzNDNDUxMEIiCisJCS5zaXplCWNwdV9zM2M0NTEwYl9uYW1lLCAuIC0gY3B1X3MzYzQ1MTBiX25hbWUKKworCQkudHlwZQljcHVfczNjNDUzMF9uYW1lLCAjb2JqZWN0CitjcHVfczNjNDUzMF9uYW1lOgorCQkuYXNjaXoJIlNhbXN1bmctUzNDNDUzMCIKKwkJLnNpemUJY3B1X3MzYzQ1MzBfbmFtZSwgLiAtIGNwdV9zM2M0NTMwX25hbWUKKworCQkudHlwZQljcHVfbmV0YXJtX25hbWUsICNvYmplY3QKK2NwdV9uZXRhcm1fbmFtZToKKwkJLmFzY2l6CSJORVRBUk0iCisJCS5zaXplCWNwdV9uZXRhcm1fbmFtZSwgLiAtIGNwdV9uZXRhcm1fbmFtZQorCisJCS5hbGlnbgorCisJCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKKworCQkudHlwZQlfX2FybTd0ZG1pX3Byb2NfaW5mbywgI29iamVjdAorX19hcm03dGRtaV9wcm9jX2luZm86CisJCS5sb25nCTB4NDEwMDc3MDAKKwkJLmxvbmcJMHhmZmY4ZmYwMAorCQkubG9uZwkwCisJCS5sb25nCTAKKwkJYglfX2FybTd0ZG1pX3NldHVwCisJCS5sb25nCWNwdV9hcmNoX25hbWUKKwkJLmxvbmcJY3B1X2VsZl9uYW1lCisJCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV9hcm03dGRtaV9uYW1lCisJCS5sb25nCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCS5sb25nCXY0X2NhY2hlX2ZucworCQkuc2l6ZQlfX2FybTd0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtN2RtaV9wcm9jX2luZm8KKworCQkudHlwZQlfX3RyaXNjZW5kYTdfcHJvY19pbmZvLCAjb2JqZWN0CitfX3RyaXNjZW5kYTdfcHJvY19pbmZvOgorCQkubG9uZwkweDAwMDFkMmZmCisJCS5sb25nCTB4MDAwMWZmZmYKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCWIJX19hcm03dGRtaV9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9USFVNQiB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV90cmlzY2VuZGE3X25hbWUKKwkJLmxvbmcJYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwkwCisJCS5sb25nCTAKKwkJLmxvbmcJdjRfY2FjaGVfZm5zCisJCS5zaXplCV9fdHJpc2NlbmRhN19wcm9jX2luZm8sIC4gLSBfX3RyaXNjZW5kYTdfcHJvY19pbmZvCisKKwkJLnR5cGUJX19hdDkxX3Byb2NfaW5mbywgI29iamVjdAorX19hdDkxX3Byb2NfaW5mbzoKKwkJLmxvbmcJMHgxNDAwMDA0MAorCQkubG9uZwkweGZmZjAwMGUwCisJCS5sb25nCTAKKwkJLmxvbmcJMAorCQliCV9fYXJtN3RkbWlfc2V0dXAKKwkJLmxvbmcJY3B1X2FyY2hfbmFtZQorCQkubG9uZwljcHVfZWxmX25hbWUKKwkJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfVEhVTUIgfCBIV0NBUF8yNkJJVAorCQkubG9uZwljcHVfYXQ5MV9uYW1lCisJCS5sb25nCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCS5sb25nCXY0X2NhY2hlX2ZucworCQkuc2l6ZQlfX2F0OTFfcHJvY19pbmZvLCAuIC0gX19hdDkxX3Byb2NfaW5mbworCisJCS50eXBlCV9fczNjNDUxMGJfcHJvY19pbmZvLCAjb2JqZWN0CitfX3MzYzQ1MTBiX3Byb2NfaW5mbzoKKwkJLmxvbmcJMHgzNjM2NTAwMAorCQkubG9uZwkweGZmZmZmMDAwCisJCS5sb25nCTAKKwkJLmxvbmcJMAorCQliCV9fYXJtN3RkbWlfc2V0dXAKKwkJLmxvbmcJY3B1X2FyY2hfbmFtZQorCQkubG9uZwljcHVfZWxmX25hbWUKKwkJLmxvbmcJSFdDQVBfU1dQIHwgSFdDQVBfVEhVTUIgfCBIV0NBUF8yNkJJVAorCQkubG9uZwljcHVfczNjNDUxMGJfbmFtZQorCQkubG9uZwlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJCS5sb25nCTAKKwkJLmxvbmcJMAorCQkubG9uZwl2NF9jYWNoZV9mbnMKKwkJLnNpemUJX19zM2M0NTEwYl9wcm9jX2luZm8sIC4gLSBfX3MzYzQ1MTBiX3Byb2NfaW5mbworCisJCS50eXBlCV9fczNjNDUzMF9wcm9jX2luZm8sICNvYmplY3QKK19fczNjNDUzMF9wcm9jX2luZm86CisJCS5sb25nCTB4NGMwMDAwMDAKKwkJLmxvbmcJMHhmZmYwMDBlMAorCQkubG9uZwkwCisJCS5sb25nCTAKKwkJYglfX2FybTd0ZG1pX3NldHVwCisJCS5sb25nCWNwdV9hcmNoX25hbWUKKwkJLmxvbmcJY3B1X2VsZl9uYW1lCisJCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX1RIVU1CIHwgSFdDQVBfMjZCSVQKKwkJLmxvbmcJY3B1X3MzYzQ1MzBfbmFtZQorCQkubG9uZwlhcm03dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zCisJCS5sb25nCTAKKwkJLmxvbmcJMAorCQkubG9uZwl2NF9jYWNoZV9mbnMKKwkJLnNpemUJX19zM2M0NTMwX3Byb2NfaW5mbywgLiAtIF9fczNjNDUzMF9wcm9jX2luZm8KKworCQkudHlwZQlfX3MzYzM0MTBfcHJvY19pbmZvLCAjb2JqZWN0CitfX3MzYzM0MTBfcHJvY19pbmZvOgorCQkubG9uZwkweDM0MTAwMDAwCisJCS5sb25nCTB4ZmZmZjAwMDAKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCWIJX19hcm03dGRtaV9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9USFVNQiB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV9zM2MzNDEwX25hbWUKKwkJLmxvbmcJYXJtN3RkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwkwCisJCS5sb25nCTAKKwkJLmxvbmcJdjRfY2FjaGVfZm5zCisJCS5zaXplCV9fczNjMzQxMF9wcm9jX2luZm8sIC4gLSBfX3MzYzM0MTBfcHJvY19pbmZvCisKKwkJLnR5cGUJX19zM2M0NGIweF9wcm9jX2luZm8sICNvYmplY3QKK19fczNjNDRiMHhfcHJvY19pbmZvOgorCQkubG9uZwkweDQ0YjAwMDAwCisJCS5sb25nCTB4ZmZmZjAwMDAKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCWIJX19hcm03dGRtaV9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9USFVNQiB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV9zM2M0NGIweF9uYW1lCisJCS5sb25nCWFybTd0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCS5sb25nCXY0X2NhY2hlX2ZucworCQkuc2l6ZQlfX3MzYzQ0YjB4X3Byb2NfaW5mbywgLiAtIF9fczNjNDRiMHhfcHJvY19pbmZvCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0MC5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMzk3ZjRiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOTQwLlMKQEAgLTAsMCArMSwzNjkgQEAKKy8qCisgKiAgbGludXgvYXJjaC9hcm0vbW0vYXJtOTQwLlM6IHV0aWxpdHkgZnVuY3Rpb25zIGZvciBBUk05NDBUCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2IEh5b2sgUy4gQ2hvaSAoaHlvay5jaG9pQHNhbXN1bmcuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworLyogQVJNOTQwVCBoYXMgYSA0S0IgRENhY2hlIGNvbXByaXNpbmcgMjU2IGxpbmVzIG9mIDQgd29yZHMgKi8KKyNkZWZpbmUgQ0FDSEVfRExJTkVTSVpFCTE2CisjZGVmaW5lIENBQ0hFX0RTRUdNRU5UUwk0CisjZGVmaW5lIENBQ0hFX0RFTlRSSUVTCTY0CisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm05NDBfcHJvY19pbml0KCkKKyAqIGNwdV9hcm05NDBfc3dpdGNoX21tKCkKKyAqCisgKiBUaGVzZSBhcmUgbm90IHJlcXVpcmVkLgorICovCitFTlRSWShjcHVfYXJtOTQwX3Byb2NfaW5pdCkKK0VOVFJZKGNwdV9hcm05NDBfc3dpdGNoX21tKQorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9hcm05NDBfcHJvY19maW4oKQorICovCitFTlRSWShjcHVfYXJtOTQwX3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlhcm05NDBfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgwMDAwMTAwMAkJQCBpLWNhY2hlCisJYmljCXIwLCByMCwgIzB4MDAwMDAwMDQJCUAgZC1jYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9hcm05NDBfcmVzZXQobG9jKQorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyB0byBqdW1wIHRvCisgKiBOb3RlcyAgIDogVGhpcyBzZXRzIHVwIGV2ZXJ5dGhpbmcgZm9yIGEgcmVzZXQKKyAqLworRU5UUlkoY3B1X2FybTk0MF9yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBmbHVzaCBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBmbHVzaCBEIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDAwMDAwNQkJQCAuLi4uLi4uLi4uLi4uYy5wCisJYmljCWlwLCBpcCwgIzB4MDAwMDEwMDAJCUAgaS1jYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm05NDBfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTk0MF9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICovCitFTlRSWShhcm05NDBfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShhcm05NDBfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglmbHVzaF91c2VyX2NhY2hlX3JhbmdlKHN0YXJ0LCBlbmQsIGZsYWdzKQorICoKKyAqCVRoZXJlIGlzIG5vIGVmZmljaWVudCB3YXkgdG8gZmx1c2ggYSByYW5nZSBvZiBjYWNoZSBlbnRyaWVzCisgKglpbiB0aGUgc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UuIFRodXMsIGZsdXNoZXMgYWxsLgorICoKKyAqCS0gc3RhcnQJLSBzdGFydCBhZGRyZXNzIChpbmNsdXNpdmUpCisgKgktIGVuZAktIGVuZCBhZGRyZXNzIChleGNsdXNpdmUpCisgKgktIGZsYWdzCS0gdm1fZmxhZ3MgZGVzY3JpYmluZyBhZGRyZXNzIHNwYWNlCisgKi8KK0VOVFJZKGFybTk0MF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorCW1vdglpcCwgIzAKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGM2LCAwCQlAIGZsdXNoIEQgY2FjaGUKKyNlbHNlCisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDQJQCA0IHNlZ21lbnRzCisxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbi9mbHVzaCBEIGluZGV4CisJc3VicwlyMywgcjMsICMxIDw8IDI2CisJYmNzCTJiCQkJCUAgZW50cmllcyA2MyB0byAwCisJc3VicwlyMSwgcjEsICMxIDw8IDQKKwliY3MJMWIJCQkJQCBzZWdtZW50cyAzIHRvIDAKKyNlbmRpZgorCXRzdAlyMiwgI1ZNX0VYRUMKKwltY3JuZQlwMTUsIDAsIGlwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05NDBfY29oZXJlbnRfa2Vybl9yYW5nZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydCwgZW5kLiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTk0MF9jb2hlcmVudF91c2VyX3JhbmdlKQorCS8qIEZBTExUSFJPVUdIICovCisKKy8qCisgKglmbHVzaF9rZXJuX2RjYWNoZV9wYWdlKHZvaWQgKnBhZ2UpCisgKgorICoJRW5zdXJlIG5vIEQgY2FjaGUgYWxpYXNpbmcgb2NjdXJzLCBlaXRoZXIgd2l0aCBpdHNlbGYgb3IKKyAqCXRoZSBJIGNhY2hlCisgKgorICoJLSBhZGRyCS0gcGFnZSBhbGlnbmVkIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTQwX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpCisJbW92CWlwLCAjMAorCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCA0CUAgNCBzZWdtZW50cworMToJb3JyCXIzLCByMSwgIyhDQUNIRV9ERU5UUklFUyAtIDEpIDw8IDI2IEAgNjQgZW50cmllcworMjoJbWNyCXAxNSwgMCwgcjMsIGM3LCBjMTQsIDIJCUAgY2xlYW4vZmx1c2ggRCBpbmRleAorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA0CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBpbnZhbGlkYXRlIEkgY2FjaGUKKwltY3IJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9pbnZfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglUaGVyZSBpcyBubyBlZmZpY2llbnQgd2F5IHRvIGludmFsaWRhdGUgYSBzcGVjaWZpZCB2aXJ0dWFsCisgKglhZGRyZXNzIHJhbmdlLiBUaHVzLCBpbnZhbGlkYXRlcyBhbGwuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKi8KK0VOVFJZKGFybTk0MF9kbWFfaW52X3JhbmdlKQorCW1vdglpcCwgIzAKKwltb3YJcjEsICMoQ0FDSEVfRFNFR01FTlRTIC0gMSkgPDwgNAlAIDQgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzYsIDIJCUAgZmx1c2ggRCBlbnRyeQorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA0CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfY2xlYW5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglUaGVyZSBpcyBubyBlZmZpY2llbnQgd2F5IHRvIGNsZWFuIGEgc3BlY2lmaWQgdmlydHVhbAorICoJYWRkcmVzcyByYW5nZS4gVGh1cywgY2xlYW5zIGFsbC4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTQwX2RtYV9jbGVhbl9yYW5nZSkKK0VOVFJZKGNwdV9hcm05NDBfZGNhY2hlX2NsZWFuX2FyZWEpCisJbW92CWlwLCAjMAorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltb3YJcjEsICMoQ0FDSEVfRFNFR01FTlRTIC0gMSkgPDwgNAlAIDQgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCAyNiBAIDY0IGVudHJpZXMKKzI6CW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCAyCQlAIGNsZWFuIEQgZW50cnkKKwlzdWJzCXIzLCByMywgIzEgPDwgMjYKKwliY3MJMmIJCQkJQCBlbnRyaWVzIDYzIHRvIDAKKwlzdWJzCXIxLCByMSwgIzEgPDwgNAorCWJjcwkxYgkJCQlAIHNlZ21lbnRzIDcgdG8gMAorI2VuZGlmCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKKy8qCisgKglkbWFfZmx1c2hfcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglUaGVyZSBpcyBubyBlZmZpY2llbnQgd2F5IHRvIGNsZWFuIGFuZCBpbnZhbGlkYXRlIGEgc3BlY2lmaWQKKyAqCXZpcnR1YWwgYWRkcmVzcyByYW5nZS4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqLworRU5UUlkoYXJtOTQwX2RtYV9mbHVzaF9yYW5nZSkKKwltb3YJaXAsICMwCisJbW92CXIxLCAjKENBQ0hFX0RTRUdNRU5UUyAtIDEpIDw8IDQJQCA0IHNlZ21lbnRzCisxOglvcnIJcjMsIHIxLCAjKENBQ0hFX0RFTlRSSUVTIC0gMSkgPDwgMjYgQCA2NCBlbnRyaWVzCisyOgorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbi9mbHVzaCBEIGVudHJ5CisjZWxzZQorCW1jcglwMTUsIDAsIHIzLCBjNywgYzEwLCAyCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorCXN1YnMJcjMsIHIzLCAjMSA8PCAyNgorCWJjcwkyYgkJCQlAIGVudHJpZXMgNjMgdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCA0CisJYmNzCTFiCQkJCUAgc2VnbWVudHMgNyB0byAwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTk0MF9jYWNoZV9mbnMpCisJLmxvbmcJYXJtOTQwX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJYXJtOTQwX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtOTQwX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwlhcm05NDBfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWFybTk0MF9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtOTQwX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm05NDBfZG1hX2ludl9yYW5nZQorCS5sb25nCWFybTk0MF9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05NDBfZG1hX2ZsdXNoX3JhbmdlCisKKwlfX0lOSVQKKworCS50eXBlCV9fYXJtOTQwX3NldHVwLCAjZnVuY3Rpb24KK19fYXJtOTQwX3NldHVwOgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDAJCUAgaW52YWxpZGF0ZSBEIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKworCW1jcglwMTUsIDAsIHIwLCBjNiwgYzMsIDAJCUAgZGlzYWJsZSBkYXRhIGFyZWEgM343CisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNCwgMAorCW1jcglwMTUsIDAsIHIwLCBjNiwgYzUsIDAKKwltY3IJcDE1LCAwLCByMCwgYzYsIGM2LCAwCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNywgMAorCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjMywgMQkJQCBkaXNhYmxlIGluc3RydWN0aW9uIGFyZWEgM343CisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNCwgMQorCW1jcglwMTUsIDAsIHIwLCBjNiwgYzUsIDEKKwltY3IJcDE1LCAwLCByMCwgYzYsIGM2LCAxCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNywgMQorCisJbW92CXIwLCAjMHgwMDAwMDAzRgkJCUAgYmFzZSA9IDAsIHNpemUgPSA0R0IKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMwLCAwCQlAIHNldCBhcmVhIDAsIGRlZmF1bHQKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMwLCAxCisKKwlsZHIJcjAsID0oQ09ORklHX0RSQU1fQkFTRSAmIDB4RkZGRkYwMDApIEAgYmFzZVszMToxMl0gb2YgUkFNCisJbGRyCXIxLCA9KENPTkZJR19EUkFNX1NJWkUgPj4gMTIpCUAgc2l6ZSBvZiBSQU0gKG11c3QgYmUgPj0gNEtCKQorCW1vdglyMiwgIzEwCQkJCUAgMTEgaXMgdGhlIG1pbmltdW0gKDRLQikKKzE6CWFkZAlyMiwgcjIsICMxCQkJQCBhcmVhIHNpemUgKj0gMgorCW1vdglyMSwgcjEsIGxzciAjMQorCWJuZQkxYgkJCQlAIGNvdW50IG5vdCB6ZXJvIHItc2hpZnQKKwlvcnIJcjAsIHIwLCByMiwgbHNsICMxCQlAIHRoZSBhcmVhIHJlZ2lzdGVyIHZhbHVlCisJb3JyCXIwLCByMCwgIzEJCQlAIHNldCBlbmFibGUgYml0CisJbWNyCXAxNSwgMCwgcjAsIGM2LAljMSwgMAkJQCBzZXQgYXJlYSAxLCBSQU0KKwltY3IJcDE1LCAwLCByMCwgYzYsCWMxLCAxCisKKwlsZHIJcjAsID0oQ09ORklHX0ZMQVNIX01FTV9CQVNFICYgMHhGRkZGRjAwMCkgQCBiYXNlWzMxOjEyXSBvZiBGTEFTSAorCWxkcglyMSwgPShDT05GSUdfRkxBU0hfU0laRSA+PiAxMikJQCBzaXplIG9mIEZMQVNIIChtdXN0IGJlID49IDRLQikKKwltb3YJcjIsICMxMAkJCQlAIDExIGlzIHRoZSBtaW5pbXVtICg0S0IpCisxOglhZGQJcjIsIHIyLCAjMQkJCUAgYXJlYSBzaXplICo9IDIKKwltb3YJcjEsIHIxLCBsc3IgIzEKKwlibmUJMWIJCQkJQCBjb3VudCBub3QgemVybyByLXNoaWZ0CisJb3JyCXIwLCByMCwgcjIsIGxzbCAjMQkJQCB0aGUgYXJlYSByZWdpc3RlciB2YWx1ZQorCW9ycglyMCwgcjAsICMxCQkJQCBzZXQgZW5hYmxlIGJpdAorCW1jcglwMTUsIDAsIHIwLCBjNiwJYzIsIDAJCUAgc2V0IGFyZWEgMiwgUk9NL0ZMQVNICisJbWNyCXAxNSwgMCwgcjAsIGM2LAljMiwgMQorCisJbW92CXIwLCAjMHgwNgorCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAsIDAJCUAgUmVnaW9uIDEmMiBjYWNoZWFibGUKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAxCisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbW92CXIwLCAjMHgwMAkJCUAgZGlzYWJsZSB3aG9sZSB3cml0ZSBidWZmZXIKKyNlbHNlCisJbW92CXIwLCAjMHgwMgkJCUAgUmVnaW9uIDEgd3JpdGUgYnVmZmVycmVkCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzMsIGMwLCAwCisKKwltb3YJcjAsICMweDEwMDAwCisJc3ViCXIwLCByMCwgIzEJCQlAIHIwID0gMHhmZmZmCisJbWNyCXAxNSwgMCwgcjAsIGM1LCBjMCwgMAkJQCBhbGwgcmVhZC93cml0ZSBhY2Nlc3MKKwltY3IJcDE1LCAwLCByMCwgYzUsIGMwLCAxCisKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwCQlAIGdldCBjb250cm9sIHJlZ2lzdGVyCisJb3JyCXIwLCByMCwgIzB4MDAwMDEwMDAJCUAgSS1jYWNoZQorCW9ycglyMCwgcjAsICMweDAwMDAwMDA1CQlAIE1QVS9ELWNhY2hlCisKKwltb3YJcGMsIGxyCisKKwkuc2l6ZQlfX2FybTk0MF9zZXR1cCwgLiAtIF9fYXJtOTQwX3NldHVwCisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK0VOVFJZKGFybTk0MF9wcm9jZXNzb3JfZnVuY3Rpb25zKQorCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0CisJLndvcmQJY3B1X2FybTk0MF9wcm9jX2luaXQKKwkud29yZAljcHVfYXJtOTQwX3Byb2NfZmluCisJLndvcmQJY3B1X2FybTk0MF9yZXNldAorCS53b3JkICAgY3B1X2FybTk0MF9kb19pZGxlCisJLndvcmQJY3B1X2FybTk0MF9kY2FjaGVfY2xlYW5fYXJlYQorCS53b3JkCWNwdV9hcm05NDBfc3dpdGNoX21tCisJLndvcmQJMAkJQCBjcHVfKl9zZXRfcHRlCisJLnNpemUJYXJtOTQwX3Byb2Nlc3Nvcl9mdW5jdGlvbnMsIC4gLSBhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJLnNlY3Rpb24gIi5yb2RhdGEiCisKKy50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NHQiCisJLnNpemUJY3B1X2FyY2hfbmFtZSwgLiAtIGNwdV9hcmNoX25hbWUKKworCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCS5hc2NpegkidjQiCisJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCisKKwkudHlwZQljcHVfYXJtOTQwX25hbWUsICNvYmplY3QKK2NwdV9hcm05NDBfbmFtZToKKwkuYXNjaWkJIkFSTTk0MFQiCisJLnNpemUJY3B1X2FybTk0MF9uYW1lLCAuIC0gY3B1X2FybTk0MF9uYW1lCisKKwkuYWxpZ24KKworCS5zZWN0aW9uICIucHJvYy5pbmZvLmluaXQiLCAjYWxsb2MsICNleGVjaW5zdHIKKworCS50eXBlCV9fYXJtOTQwX3Byb2NfaW5mbywjb2JqZWN0CitfX2FybTk0MF9wcm9jX2luZm86CisJLmxvbmcJMHg0MTAwOTQwMAorCS5sb25nCTB4ZmYwMGZmZjAKKwkubG9uZwkwCisJYglfX2FybTk0MF9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9IQUxGIHwgSFdDQVBfVEhVTUIKKwkubG9uZwljcHVfYXJtOTQwX25hbWUKKwkubG9uZwlhcm05NDBfcHJvY2Vzc29yX2Z1bmN0aW9ucworCS5sb25nCTAKKwkubG9uZwkwCisJLmxvbmcJYXJtOTQwX2NhY2hlX2ZucworCS5zaXplCV9fYXJtOTQwX3Byb2NfaW5mbywgLiAtIF9fYXJtOTQwX3Byb2NfaW5mbworCmRpZmYgLS1naXQgYS9hcmNoL2FybS9tbS9wcm9jLWFybTk0Ni5TIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTg2MTc1Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05NDYuUwpAQCAtMCwwICsxLDQyNCBAQAorLyoKKyAqICBsaW51eC9hcmNoL2FybS9tbS9hcm05NDYuUzogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEFSTTk0NkUtUworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNiBIeW9rIFMuIENob2kgKGh5b2suY2hvaUBzYW1zdW5nLmNvbSkKKyAqCisgKiAgKE1hbnkgb2YgY2FjaGUgY29kZXMgYXJlIGZyb20gcHJvYy1hcm05MjYuUykKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqLworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2Fzc2VtYmxlci5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLWh3ZGVmLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKy8qCisgKiBBUk05NDZFLVMgaXMgc3ludGhlc2l6YWJsZSB0byBoYXZlIDBLQiB0byAxTUIgc2l6ZWQgRC1DYWNoZSwKKyAqIGNvbXByaXNpbmcgMjU2IGxpbmVzIG9mIDMyIGJ5dGVzICg4IHdvcmRzKS4KKyAqLworI2RlZmluZSBDQUNIRV9EU0laRQkoQ09ORklHX0NQVV9EQ0FDSEVfU0laRSkgLyogdHlwaWNhbGx5IDhLQi4gKi8KKyNkZWZpbmUgQ0FDSEVfRExJTkVTSVpFCTMyCQkJLyogZml4ZWQgKi8KKyNkZWZpbmUgQ0FDSEVfRFNFR01FTlRTCTQJCQkvKiBmaXhlZCAqLworI2RlZmluZSBDQUNIRV9ERU5UUklFUwkoQ0FDSEVfRFNJWkUgLyBDQUNIRV9EU0VHTUVOVFMgLyBDQUNIRV9ETElORVNJWkUpCisjZGVmaW5lIENBQ0hFX0RMSU1JVAkoQ0FDSEVfRFNJWkUgKiA0KQkvKiBiZW5jaG1hcmsgbmVlZGVkICovCisKKwkudGV4dAorLyoKKyAqIGNwdV9hcm05NDZfcHJvY19pbml0KCkKKyAqIGNwdV9hcm05NDZfc3dpdGNoX21tKCkKKyAqCisgKiBUaGVzZSBhcmUgbm90IHJlcXVpcmVkLgorICovCitFTlRSWShjcHVfYXJtOTQ2X3Byb2NfaW5pdCkKK0VOVFJZKGNwdV9hcm05NDZfc3dpdGNoX21tKQorCW1vdglwYywgbHIKKworLyoKKyAqIGNwdV9hcm05NDZfcHJvY19maW4oKQorICovCitFTlRSWShjcHVfYXJtOTQ2X3Byb2NfZmluKQorCXN0bWZkCXNwISwge2xyfQorCW1vdglpcCwgI1BTUl9GX0JJVCB8IFBTUl9JX0JJVCB8IFNWQ19NT0RFCisJbXNyCWNwc3JfYywgaXAKKwlibAlhcm05NDZfZmx1c2hfa2Vybl9jYWNoZV9hbGwKKwltcmMJcDE1LCAwLCByMCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJcjAsIHIwLCAjMHgwMDAwMTAwMAkJQCBpLWNhY2hlCisJYmljCXIwLCByMCwgIzB4MDAwMDAwMDQJCUAgZC1jYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjMSwgYzAsIDAJCUAgZGlzYWJsZSBjYWNoZXMKKwlsZG1mZAlzcCEsIHtwY30KKworLyoKKyAqIGNwdV9hcm05NDZfcmVzZXQobG9jKQorICogUGFyYW1zICA6IHIwID0gYWRkcmVzcyB0byBqdW1wIHRvCisgKiBOb3RlcyAgIDogVGhpcyBzZXRzIHVwIGV2ZXJ5dGhpbmcgZm9yIGEgcmVzZXQKKyAqLworRU5UUlkoY3B1X2FybTk0Nl9yZXNldCkKKwltb3YJaXAsICMwCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBmbHVzaCBJIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBmbHVzaCBEIGNhY2hlCisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltcmMJcDE1LCAwLCBpcCwgYzEsIGMwLCAwCQlAIGN0cmwgcmVnaXN0ZXIKKwliaWMJaXAsIGlwLCAjMHgwMDAwMDAwNQkJQCAuLi4uLi4uLi4uLi4uYy5wCisJYmljCWlwLCBpcCwgIzB4MDAwMDEwMDAJCUAgaS1jYWNoZQorCW1jcglwMTUsIDAsIGlwLCBjMSwgYzAsIDAJCUAgY3RybCByZWdpc3RlcgorCW1vdglwYywgcjAKKworLyoKKyAqIGNwdV9hcm05NDZfZG9faWRsZSgpCisgKi8KKwkuYWxpZ24JNQorRU5UUlkoY3B1X2FybTk0Nl9kb19pZGxlKQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzAsIDQJCUAgV2FpdCBmb3IgaW50ZXJydXB0CisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfdXNlcl9jYWNoZV9hbGwoKQorICovCitFTlRSWShhcm05NDZfZmx1c2hfdXNlcl9jYWNoZV9hbGwpCisJLyogRkFMTFRIUk9VR0ggKi8KKworLyoKKyAqCWZsdXNoX2tlcm5fY2FjaGVfYWxsKCkKKyAqCisgKglDbGVhbiBhbmQgaW52YWxpZGF0ZSB0aGUgZW50aXJlIGNhY2hlLgorICovCitFTlRSWShhcm05NDZfZmx1c2hfa2Vybl9jYWNoZV9hbGwpCisJbW92CXIyLCAjVk1fRVhFQworCW1vdglpcCwgIzAKK19fZmx1c2hfd2hvbGVfY2FjaGU6CisjaWZkZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgaXAsIGM3LCBjNiwgMAkJQCBmbHVzaCBEIGNhY2hlCisjZWxzZQorCW1vdglyMSwgIyhDQUNIRV9EU0VHTUVOVFMgLSAxKSA8PCAyOSBAIDQgc2VnbWVudHMKKzE6CW9ycglyMywgcjEsICMoQ0FDSEVfREVOVFJJRVMgLSAxKSA8PCA0IEAgbiBlbnRyaWVzCisyOgltY3IJcDE1LCAwLCByMywgYzcsIGMxNCwgMgkJQCBjbGVhbi9mbHVzaCBEIGluZGV4CisJc3VicwlyMywgcjMsICMxIDw8IDQKKwliY3MJMmIJCQkJQCBlbnRyaWVzIG4gdG8gMAorCXN1YnMJcjEsIHIxLCAjMSA8PCAyOQorCWJjcwkxYgkJCQlAIHNlZ21lbnRzIDMgdG8gMAorI2VuZGlmCisJdHN0CXIyLCAjVk1fRVhFQworCW1jcm5lCXAxNSwgMCwgaXAsIGM3LCBjNSwgMAkJQCBmbHVzaCBJIGNhY2hlCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWZsdXNoX3VzZXJfY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCwgZmxhZ3MpCisgKgorICoJQ2xlYW4gYW5kIGludmFsaWRhdGUgYSByYW5nZSBvZiBjYWNoZSBlbnRyaWVzIGluIHRoZQorICoJc3BlY2lmaWVkIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHN0YXJ0IGFkZHJlc3MgKGluY2x1c2l2ZSkKKyAqCS0gZW5kCS0gZW5kIGFkZHJlc3MgKGV4Y2x1c2l2ZSkKKyAqCS0gZmxhZ3MJLSB2bV9mbGFncyBkZXNjcmliaW5nIGFkZHJlc3Mgc3BhY2UKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkoYXJtOTQ2X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UpCisJbW92CWlwLCAjMAorCXN1YglyMywgcjEsIHIwCQkJQCBjYWxjdWxhdGUgdG90YWwgc2l6ZQorCWNtcAlyMywgI0NBQ0hFX0RMSU1JVAorCWJocwlfX2ZsdXNoX3dob2xlX2NhY2hlCisKKzE6CXRzdAlyMiwgI1ZNX0VYRUMKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM2LCAxCQlAIGludmFsaWRhdGUgRCBlbnRyeQorCW1jcm5lCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzUsIDEJCUAgaW52YWxpZGF0ZSBJIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorI2Vsc2UKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEIGVudHJ5CisJbWNybmUJcDE1LCAwLCByMCwgYzcsIGM1LCAxCQlAIGludmFsaWRhdGUgSSBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKyNlbmRpZgorCWNtcAlyMCwgcjEKKwlibG8JMWIKKwl0c3QJcjIsICNWTV9FWEVDCisJbWNybmUJcDE1LCAwLCBpcCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWNvaGVyZW50X2tlcm5fcmFuZ2Uoc3RhcnQsIGVuZCkKKyAqCisgKglFbnN1cmUgY29oZXJlbmN5IGJldHdlZW4gdGhlIEljYWNoZSBhbmQgdGhlIERjYWNoZSBpbiB0aGUKKyAqCXJlZ2lvbiBkZXNjcmliZWQgYnkgc3RhcnQsIGVuZC4gIElmIHlvdSBoYXZlIG5vbi1zbm9vcGluZworICoJSGFydmFyZCBjYWNoZXMsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGZ1bmN0aW9uLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICovCitFTlRSWShhcm05NDZfY29oZXJlbnRfa2Vybl9yYW5nZSkKKwkvKiBGQUxMVEhST1VHSCAqLworCisvKgorICoJY29oZXJlbnRfdXNlcl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUVuc3VyZSBjb2hlcmVuY3kgYmV0d2VlbiB0aGUgSWNhY2hlIGFuZCB0aGUgRGNhY2hlIGluIHRoZQorICoJcmVnaW9uIGRlc2NyaWJlZCBieSBzdGFydCwgZW5kLiAgSWYgeW91IGhhdmUgbm9uLXNub29waW5nCisgKglIYXJ2YXJkIGNhY2hlcywgeW91IG5lZWQgdG8gaW1wbGVtZW50IHRoaXMgZnVuY3Rpb24uCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKiAoc2FtZSBhcyBhcm05MjYpCisgKi8KK0VOVFJZKGFybTk0Nl9jb2hlcmVudF91c2VyX3JhbmdlKQorCWJpYwlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUgLSAxCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgMQkJQCBpbnZhbGlkYXRlIEkgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSh2b2lkICpwYWdlKQorICoKKyAqCUVuc3VyZSBubyBEIGNhY2hlIGFsaWFzaW5nIG9jY3VycywgZWl0aGVyIHdpdGggaXRzZWxmIG9yCisgKgl0aGUgSSBjYWNoZQorICoKKyAqCS0gYWRkcgktIHBhZ2UgYWxpZ25lZCBhZGRyZXNzCisgKiAoc2FtZSBhcyBhcm05MjYpCisgKi8KK0VOVFJZKGFybTk0Nl9mbHVzaF9rZXJuX2RjYWNoZV9wYWdlKQorCWFkZAlyMSwgcjAsICNQQUdFX1NaCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkJQCBjbGVhbitpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCAwCQlAIGludmFsaWRhdGUgSSBjYWNoZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2ludl9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUludmFsaWRhdGUgKGRpc2NhcmQpIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoJTWF5IG5vdCB3cml0ZSBiYWNrIGFueSBlbnRyaWVzLiAgSWYgJ3N0YXJ0JyBvciAnZW5kJworICoJYXJlIG5vdCBjYWNoZSBsaW5lIGFsaWduZWQsIHRob3NlIGxpbmVzIG11c3QgYmUgd3JpdHRlbgorICoJYmFjay4KKyAqCisgKgktIHN0YXJ0CS0gdmlydHVhbCBzdGFydCBhZGRyZXNzCisgKgktIGVuZAktIHZpcnR1YWwgZW5kIGFkZHJlc3MKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkoYXJtOTQ2X2RtYV9pbnZfcmFuZ2UpCisjaWZuZGVmIENPTkZJR19DUFVfRENBQ0hFX1dSSVRFVEhST1VHSAorCXRzdAlyMCwgI0NBQ0hFX0RMSU5FU0laRSAtIDEKKwltY3JuZQlwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKwl0c3QJcjEsICNDQUNIRV9ETElORVNJWkUgLSAxCisJbWNybmUJcDE1LCAwLCByMSwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisjZW5kaWYKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMQkJQCBpbnZhbGlkYXRlIEQgZW50cnkKKwlhZGQJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFCisJY21wCXIwLCByMQorCWJsbwkxYgorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CQlAIGRyYWluIFdCCisJbW92CXBjLCBscgorCisvKgorICoJZG1hX2NsZWFuX3JhbmdlKHN0YXJ0LCBlbmQpCisgKgorICoJQ2xlYW4gdGhlIHNwZWNpZmllZCB2aXJ0dWFsIGFkZHJlc3MgcmFuZ2UuCisgKgorICoJLSBzdGFydAktIHZpcnR1YWwgc3RhcnQgYWRkcmVzcworICoJLSBlbmQJLSB2aXJ0dWFsIGVuZCBhZGRyZXNzCisgKgorICogKHNhbWUgYXMgYXJtOTI2KQorICovCitFTlRSWShhcm05NDZfZG1hX2NsZWFuX3JhbmdlKQorI2lmbmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJCUAgY2xlYW4gRCBlbnRyeQorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworLyoKKyAqCWRtYV9mbHVzaF9yYW5nZShzdGFydCwgZW5kKQorICoKKyAqCUNsZWFuIGFuZCBpbnZhbGlkYXRlIHRoZSBzcGVjaWZpZWQgdmlydHVhbCBhZGRyZXNzIHJhbmdlLgorICoKKyAqCS0gc3RhcnQJLSB2aXJ0dWFsIHN0YXJ0IGFkZHJlc3MKKyAqCS0gZW5kCS0gdmlydHVhbCBlbmQgYWRkcmVzcworICoKKyAqIChzYW1lIGFzIGFybTkyNikKKyAqLworRU5UUlkoYXJtOTQ2X2RtYV9mbHVzaF9yYW5nZSkKKwliaWMJcjAsIHIwLCAjQ0FDSEVfRExJTkVTSVpFIC0gMQorMToKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJCUAgY2xlYW4raW52YWxpZGF0ZSBEIGVudHJ5CisjZWxzZQorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKKyNlbmRpZgorCWFkZAlyMCwgcjAsICNDQUNIRV9ETElORVNJWkUKKwljbXAJcjAsIHIxCisJYmxvCTFiCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJCUAgZHJhaW4gV0IKKwltb3YJcGMsIGxyCisKK0VOVFJZKGFybTk0Nl9jYWNoZV9mbnMpCisJLmxvbmcJYXJtOTQ2X2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJYXJtOTQ2X2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJYXJtOTQ2X2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwlhcm05NDZfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCWFybTk0Nl9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJYXJtOTQ2X2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwlhcm05NDZfZG1hX2ludl9yYW5nZQorCS5sb25nCWFybTk0Nl9kbWFfY2xlYW5fcmFuZ2UKKwkubG9uZwlhcm05NDZfZG1hX2ZsdXNoX3JhbmdlCisKKworRU5UUlkoY3B1X2FybTk0Nl9kY2FjaGVfY2xlYW5fYXJlYSkKKyNpZm5kZWYgQ09ORklHX0NQVV9EQ0FDSEVfV1JJVEVUSFJPVUdICisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CisJYWRkCXIwLCByMCwgI0NBQ0hFX0RMSU5FU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVfRExJTkVTSVpFCisJYmhpCTFiCisjZW5kaWYKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCW1vdglwYywgbHIKKworCV9fSU5JVAorCisJLnR5cGUJX19hcm05NDZfc2V0dXAsICNmdW5jdGlvbgorX19hcm05NDZfc2V0dXA6CisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDAJCUAgaW52YWxpZGF0ZSBJIGNhY2hlCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNiwgMAkJQCBpbnZhbGlkYXRlIEQgY2FjaGUKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkJQCBkcmFpbiBXQgorCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjMywgMAkJQCBkaXNhYmxlIG1lbW9yeSByZWdpb24gM343CisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNCwgMAorCW1jcglwMTUsIDAsIHIwLCBjNiwgYzUsIDAKKwltY3IJcDE1LCAwLCByMCwgYzYsIGM2LCAwCisJbWNyCXAxNSwgMCwgcjAsIGM2LCBjNywgMAorCisJbW92CXIwLCAjMHgwMDAwMDAzRgkJCUAgYmFzZSA9IDAsIHNpemUgPSA0R0IKKwltY3IJcDE1LCAwLCByMCwgYzYsCWMwLCAwCQlAIHNldCByZWdpb24gMCwgZGVmYXVsdAorCisJbGRyCXIwLCA9KENPTkZJR19EUkFNX0JBU0UgJiAweEZGRkZGMDAwKSBAIGJhc2VbMzE6MTJdIG9mIFJBTQorCWxkcglyMSwgPShDT05GSUdfRFJBTV9TSVpFID4+IDEyKQlAIHNpemUgb2YgUkFNIChtdXN0IGJlID49IDRLQikKKwltb3YJcjIsICMxMAkJCQlAIDExIGlzIHRoZSBtaW5pbXVtICg0S0IpCisxOglhZGQJcjIsIHIyLCAjMQkJCUAgYXJlYSBzaXplICo9IDIKKwltb3YJcjEsIHIxLCBsc3IgIzEKKwlibmUJMWIJCQkJQCBjb3VudCBub3QgemVybyByLXNoaWZ0CisJb3JyCXIwLCByMCwgcjIsIGxzbCAjMQkJQCB0aGUgcmVnaW9uIHJlZ2lzdGVyIHZhbHVlCisJb3JyCXIwLCByMCwgIzEJCQlAIHNldCBlbmFibGUgYml0CisJbWNyCXAxNSwgMCwgcjAsIGM2LAljMSwgMAkJQCBzZXQgcmVnaW9uIDEsIFJBTQorCisJbGRyCXIwLCA9KENPTkZJR19GTEFTSF9NRU1fQkFTRSAmIDB4RkZGRkYwMDApIEAgYmFzZVszMToxMl0gb2YgRkxBU0gKKwlsZHIJcjEsID0oQ09ORklHX0ZMQVNIX1NJWkUgPj4gMTIpCUAgc2l6ZSBvZiBGTEFTSCAobXVzdCBiZSA+PSA0S0IpCisJbW92CXIyLCAjMTAJCQkJQCAxMSBpcyB0aGUgbWluaW11bSAoNEtCKQorMToJYWRkCXIyLCByMiwgIzEJCQlAIGFyZWEgc2l6ZSAqPSAyCisJbW92CXIxLCByMSwgbHNyICMxCisJYm5lCTFiCQkJCUAgY291bnQgbm90IHplcm8gci1zaGlmdAorCW9ycglyMCwgcjAsIHIyLCBsc2wgIzEJCUAgdGhlIHJlZ2lvbiByZWdpc3RlciB2YWx1ZQorCW9ycglyMCwgcjAsICMxCQkJQCBzZXQgZW5hYmxlIGJpdAorCW1jcglwMTUsIDAsIHIwLCBjNiwJYzIsIDAJCUAgc2V0IHJlZ2lvbiAyLCBST00vRkxBU0gKKworCW1vdglyMCwgIzB4MDYKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAwCQlAIHJlZ2lvbiAxLDIgZC1jYWNoZWFibGUKKwltY3IJcDE1LCAwLCByMCwgYzIsIGMwLCAxCQlAIHJlZ2lvbiAxLDIgaS1jYWNoZWFibGUKKyNpZmRlZiBDT05GSUdfQ1BVX0RDQUNIRV9XUklURVRIUk9VR0gKKwltb3YJcjAsICMweDAwCQkJQCBkaXNhYmxlIHdob2xlIHdyaXRlIGJ1ZmZlcgorI2Vsc2UKKwltb3YJcjAsICMweDAyCQkJQCByZWdpb24gMSB3cml0ZSBidWZmZXJyZWQKKyNlbmRpZgorCW1jcglwMTUsIDAsIHIwLCBjMywgYzAsIDAKKworLyoKKyAqICBBY2Nlc3MgUGVybWlzc2lvbiBTZXR0aW5ncyBmb3IgZnV0dXJlIHBlcm1pc3Npb24gY29udHJvbCBieSBQVS4KKyAqCisgKgkJCQlwcml2Lgl1c2VyCisgKiAJcmVnaW9uIDAgKHdob2xlKQlydwktLQk6IGIwMDAxCisgKiAJcmVnaW9uIDEgKFJBTSkJCXJ3CXJ3CTogYjAwMTEKKyAqIAlyZWdpb24gMiAoRkxBU0gpCXJ3CXItCTogYjAwMTAKKyAqCXJlZ2lvbiAzfjcgKG5vbmUpCS0tCS0tCTogYjAwMDAKKyAqLworCW1vdglyMCwgIzB4MDAwMDAwMzEKKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDIwMAorCW1jcglwMTUsIDAsIHIwLCBjNSwgYzAsIDIJCUAgc2V0IGRhdGEgYWNjZXNzIHBlcm1pc3Npb24KKwltY3IJcDE1LCAwLCByMCwgYzUsIGMwLCAzCQlAIHNldCBpbnN0LiBhY2Nlc3MgcGVybWlzc2lvbgorCisJbXJjCXAxNSwgMCwgcjAsIGMxLCBjMAkJQCBnZXQgY29udHJvbCByZWdpc3RlcgorCW9ycglyMCwgcjAsICMweDAwMDAxMDAwCQlAIEktY2FjaGUKKwlvcnIJcjAsIHIwLCAjMHgwMDAwMDAwNQkJQCBNUFUvRC1jYWNoZQorI2lmZGVmIENPTkZJR19DUFVfQ0FDSEVfUk9VTkRfUk9CSU4KKwlvcnIJcjAsIHIwLCAjMHgwMDAwNDAwMAkJQCAuMS4uIC4uLi4gLi4uLiAuLi4uCisjZW5kaWYKKwltb3YJcGMsIGxyCisKKwkuc2l6ZQlfX2FybTk0Nl9zZXR1cCwgLiAtIF9fYXJtOTQ2X3NldHVwCisKKwlfX0lOSVREQVRBCisKKy8qCisgKiBQdXJwb3NlIDogRnVuY3Rpb24gcG9pbnRlcnMgdXNlZCB0byBhY2Nlc3MgYWJvdmUgZnVuY3Rpb25zIC0gYWxsIGNhbGxzCisgKgkgICAgIGNvbWUgdGhyb3VnaCB0aGVzZQorICovCisJLnR5cGUJYXJtOTQ2X3Byb2Nlc3Nvcl9mdW5jdGlvbnMsICNvYmplY3QKK0VOVFJZKGFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zKQorCS53b3JkCW5vbW11X2Vhcmx5X2Fib3J0CisJLndvcmQJY3B1X2FybTk0Nl9wcm9jX2luaXQKKwkud29yZAljcHVfYXJtOTQ2X3Byb2NfZmluCisJLndvcmQJY3B1X2FybTk0Nl9yZXNldAorCS53b3JkICAgY3B1X2FybTk0Nl9kb19pZGxlCisKKwkud29yZAljcHVfYXJtOTQ2X2RjYWNoZV9jbGVhbl9hcmVhCisJLndvcmQJY3B1X2FybTk0Nl9zd2l0Y2hfbW0KKwkud29yZAkwCQlAIGNwdV8qX3NldF9wdGUKKwkuc2l6ZQlhcm05NDZfcHJvY2Vzc29yX2Z1bmN0aW9ucywgLiAtIGFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCisKKwkuc2VjdGlvbiAiLnJvZGF0YSIKKworCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJLmFzY2l6CSJhcm12NXRlIgorCS5zaXplCWNwdV9hcmNoX25hbWUsIC4gLSBjcHVfYXJjaF9uYW1lCisKKwkudHlwZQljcHVfZWxmX25hbWUsICNvYmplY3QKK2NwdV9lbGZfbmFtZToKKwkuYXNjaXoJInY1dCIKKwkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCS50eXBlCWNwdV9hcm05NDZfbmFtZSwgI29iamVjdAorY3B1X2FybTk0Nl9uYW1lOgorCS5hc2NpaQkiQVJNOTQ2RS1TIgorCS5zaXplCWNwdV9hcm05NDZfbmFtZSwgLiAtIGNwdV9hcm05NDZfbmFtZQorCisJLmFsaWduCisKKwkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisJLnR5cGUJX19hcm05NDZfcHJvY19pbmZvLCNvYmplY3QKK19fYXJtOTQ2X3Byb2NfaW5mbzoKKwkubG9uZwkweDQxMDA5NDYwCisJLmxvbmcJMHhmZjAwZmZmMAorCS5sb25nCTAKKwliCV9fYXJtOTQ2X3NldHVwCisJLmxvbmcJY3B1X2FyY2hfbmFtZQorCS5sb25nCWNwdV9lbGZfbmFtZQorCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX0hBTEYgfCBIV0NBUF9USFVNQgorCS5sb25nCWNwdV9hcm05NDZfbmFtZQorCS5sb25nCWFybTk0Nl9wcm9jZXNzb3JfZnVuY3Rpb25zCisJLmxvbmcJMAorCS5sb25nCTAKKwkubG9uZwlhcm05NDBfY2FjaGVfZm5zCisJLnNpemUJX19hcm05NDZfcHJvY19pbmZvLCAuIC0gX19hcm05NDZfcHJvY19pbmZvCisKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUyBiL2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MThlYmY2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy1hcm05dGRtaS5TCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogIGxpbnV4L2FyY2gvYXJtL21tL3Byb2MtYXJtOXRkbWkuUzogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIEFSTTlURE1JCisgKgorICogIENvcHlyaWdodCAoQykgMjAwMy0yMDA2IEh5b2sgUy4gQ2hvaSA8aHlvay5jaG9pQHNhbXN1bmcuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vYXNzZW1ibGVyLmg+CisjaW5jbHVkZSA8YXNtL2FzbS1vZmZzZXRzLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUtaHdkZWYuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9jaW5mby5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKworCS50ZXh0CisvKgorICogY3B1X2FybTl0ZG1pX3Byb2NfaW5pdCgpCisgKiBjcHVfYXJtOXRkbWlfZG9faWRsZSgpCisgKiBjcHVfYXJtOXRkbWlfZGNhY2hlX2NsZWFuX2FyZWEoKQorICogY3B1X2FybTl0ZG1pX3N3aXRjaF9tbSgpCisgKgorICogVGhlc2UgYXJlIG5vdCByZXF1aXJlZC4KKyAqLworRU5UUlkoY3B1X2FybTl0ZG1pX3Byb2NfaW5pdCkKK0VOVFJZKGNwdV9hcm05dGRtaV9kb19pZGxlKQorRU5UUlkoY3B1X2FybTl0ZG1pX2RjYWNoZV9jbGVhbl9hcmVhKQorRU5UUlkoY3B1X2FybTl0ZG1pX3N3aXRjaF9tbSkKKwkJbW92CXBjLCBscgorCisvKgorICogY3B1X2FybTl0ZG1pX3Byb2NfZmluKCkKKyAqLworRU5UUlkoY3B1X2FybTl0ZG1pX3Byb2NfZmluKQorCQltb3YJcjAsICNQU1JfRl9CSVQgfCBQU1JfSV9CSVQgfCBTVkNfTU9ERQorCQltc3IJY3Bzcl9jLCByMAorCQltb3YJcGMsIGxyCisKKy8qCisgKiBGdW5jdGlvbjogY3B1X2FybTl0ZG1pX3Jlc2V0KGxvYykKKyAqIFBhcmFtcyAgOiBsb2MocjApCWFkZHJlc3MgdG8ganVtcCB0bworICogUHVycG9zZSA6IFNldHMgdXAgZXZlcnl0aGluZyBmb3IgYSByZXNldCBhbmQganVtcCB0byB0aGUgbG9jYXRpb24gZm9yIHNvZnQgcmVzZXQuCisgKi8KK0VOVFJZKGNwdV9hcm05dGRtaV9yZXNldCkKKwkJbW92CXBjLCByMAorCisJCV9fSU5JVAorCisJCS50eXBlCV9fYXJtOXRkbWlfc2V0dXAsICNmdW5jdGlvbgorX19hcm05dGRtaV9zZXR1cDoKKwkJbW92CXBjLCBscgorCQkuc2l6ZQlfX2FybTl0ZG1pX3NldHVwLCAuIC0gX19hcm05dGRtaV9zZXR1cAorCisJCV9fSU5JVERBVEEKKworLyoKKyAqIFB1cnBvc2UgOiBGdW5jdGlvbiBwb2ludGVycyB1c2VkIHRvIGFjY2VzcyBhYm92ZSBmdW5jdGlvbnMgLSBhbGwgY2FsbHMKKyAqCSAgICAgY29tZSB0aHJvdWdoIHRoZXNlCisgKi8KKwkJLnR5cGUJYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucywgI29iamVjdAorRU5UUlkoYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucykKKwkJLndvcmQJbm9tbXVfZWFybHlfYWJvcnQKKwkJLndvcmQJY3B1X2FybTl0ZG1pX3Byb2NfaW5pdAorCQkud29yZAljcHVfYXJtOXRkbWlfcHJvY19maW4KKwkJLndvcmQJY3B1X2FybTl0ZG1pX3Jlc2V0CisJCS53b3JkCWNwdV9hcm05dGRtaV9kb19pZGxlCisJCS53b3JkCWNwdV9hcm05dGRtaV9kY2FjaGVfY2xlYW5fYXJlYQorCQkud29yZAljcHVfYXJtOXRkbWlfc3dpdGNoX21tCisJCS53b3JkCTAJCUAgY3B1Xypfc2V0X3B0ZQorCQkuc2l6ZQlhcm05dGRtaV9wcm9jZXNzb3JfZnVuY3Rpb25zLCAuIC0gYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucworCisJCS5zZWN0aW9uICIucm9kYXRhIgorCisJCS50eXBlCWNwdV9hcmNoX25hbWUsICNvYmplY3QKK2NwdV9hcmNoX25hbWU6CisJCS5hc2NpegkiYXJtdjR0IgorCQkuc2l6ZQljcHVfYXJjaF9uYW1lLCAuIC0gY3B1X2FyY2hfbmFtZQorCisJCS50eXBlCWNwdV9lbGZfbmFtZSwgI29iamVjdAorY3B1X2VsZl9uYW1lOgorCQkuYXNjaXoJInY0IgorCQkuc2l6ZQljcHVfZWxmX25hbWUsIC4gLSBjcHVfZWxmX25hbWUKKworCQkudHlwZQljcHVfYXJtOXRkbWlfbmFtZSwgI29iamVjdAorY3B1X2FybTl0ZG1pX25hbWU6CisJCS5hc2NpegkiQVJNOVRETUkiCisJCS5zaXplCWNwdV9hcm05dGRtaV9uYW1lLCAuIC0gY3B1X2FybTl0ZG1pX25hbWUKKworCQkudHlwZQljcHVfcDIwMDFfbmFtZSwgI29iamVjdAorY3B1X3AyMDAxX25hbWU6CisJCS5hc2NpegkiUDIwMDEiCisJCS5zaXplCWNwdV9wMjAwMV9uYW1lLCAuIC0gY3B1X3AyMDAxX25hbWUKKworCQkuYWxpZ24KKworCQkuc2VjdGlvbiAiLnByb2MuaW5mby5pbml0IiwgI2FsbG9jLCAjZXhlY2luc3RyCisKKwkJLnR5cGUJX19hcm05dGRtaV9wcm9jX2luZm8sICNvYmplY3QKK19fYXJtOXRkbWlfcHJvY19pbmZvOgorCQkubG9uZwkweDQxMDA5OTAwCisJCS5sb25nCTB4ZmZmOGZmMDAKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCWIJX19hcm05dGRtaV9zZXR1cAorCQkubG9uZwljcHVfYXJjaF9uYW1lCisJCS5sb25nCWNwdV9lbGZfbmFtZQorCQkubG9uZwlIV0NBUF9TV1AgfCBIV0NBUF9USFVNQiB8IEhXQ0FQXzI2QklUCisJCS5sb25nCWNwdV9hcm05dGRtaV9uYW1lCisJCS5sb25nCWFybTl0ZG1pX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkJLmxvbmcJMAorCQkubG9uZwkwCisJCS5sb25nCXY0X2NhY2hlX2ZucworCQkuc2l6ZQlfX2FybTl0ZG1pX3Byb2NfaW5mbywgLiAtIF9fYXJtOWRtaV9wcm9jX2luZm8KKworCQkudHlwZQlfX3AyMDAxX3Byb2NfaW5mbywgI29iamVjdAorX19wMjAwMV9wcm9jX2luZm86CisJCS5sb25nCTB4NDEwMjkwMDAKKwkJLmxvbmcJMHhmZmZmZmZmZgorCQkubG9uZwkwCisJCS5sb25nCTAKKwkJYglfX2FybTl0ZG1pX3NldHVwCisJCS5sb25nCWNwdV9hcmNoX25hbWUKKwkJLmxvbmcJY3B1X2VsZl9uYW1lCisJCS5sb25nCUhXQ0FQX1NXUCB8IEhXQ0FQX1RIVU1CIHwgSFdDQVBfMjZCSVQKKwkJLmxvbmcJY3B1X3AyMDAxX25hbWUKKwkJLmxvbmcJYXJtOXRkbWlfcHJvY2Vzc29yX2Z1bmN0aW9ucworCQkubG9uZwkwCisJCS5sb25nCTAKKwkJLmxvbmcJdjRfY2FjaGVfZm5zCisJCS5zaXplCV9fcDIwMDFfcHJvY19pbmZvLCAuIC0gX19wMjAwMV9wcm9jX2luZm8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMgYi9hcmNoL2FybS9tbS9wcm9jLXhzY2FsZS5TCmluZGV4IDNjYTBjOTIuLmU4YjM3N2QgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL21tL3Byb2MteHNjYWxlLlMKKysrIGIvYXJjaC9hcm0vbW0vcHJvYy14c2NhbGUuUwpAQCAtMzExLDEyICszMTEsNiBAQAogICoJLSBlbmQJIC0gdmlydHVhbCBlbmQgYWRkcmVzcwogICovCiBFTlRSWSh4c2NhbGVfZG1hX2ludl9yYW5nZSkKLQltcmMJcDE1LCAwLCByMiwgYzAsIGMwLCAwCQlAIHJlYWQgSUQKLQllb3IJcjIsIHIyLCAjMHg2OTAwMDAwMAotCWVvcglyMiwgcjIsICMweDAwMDUyMDAwCi0JYmljcwlyMiwgcjIsICMxCi0JYmVxCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKLQogCXRzdAlyMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJYmljCXIwLCByMCwgI0NBQ0hFTElORVNJWkUgLSAxCiAJbWNybmUJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkJQCBjbGVhbiBEIGVudHJ5CkBAIC0zNzUsNiArMzY5LDMwIEBACiAJLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQogCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKIAorLyoKKyAqIE9uIHN0ZXBwaW5nIEEwL0ExIG9mIHRoZSA4MDIwMCwgaW52YWxpZGF0aW5nIEQtY2FjaGUgYnkgbGluZSBkb2Vzbid0CisgKiBjbGVhciB0aGUgZGlydHkgYml0cywgd2hpY2ggbWVhbnMgdGhhdCBpZiB3ZSBpbnZhbGlkYXRlIGEgZGlydHkgbGluZSwKKyAqIHRoZSBkaXJ0eSBkYXRhIGNhbiBzdGlsbCBiZSB3cml0dGVuIGJhY2sgdG8gZXh0ZXJuYWwgbWVtb3J5IGxhdGVyIG9uLgorICoKKyAqIFRoZSByZWNvbW1lbmRlZCB3b3JrYXJvdW5kIGlzIHRvIGFsd2F5cyBkbyBhIGNsZWFuIEQtY2FjaGUgbGluZSBiZWZvcmUKKyAqIGRvaW5nIGFuIGludmFsaWRhdGUgRC1jYWNoZSBsaW5lLCBzbyBvbiB0aGUgYWZmZWN0ZWQgcHJvY2Vzc29ycywKKyAqIGRtYV9pbnZfcmFuZ2UoKSBpcyBpbXBsZW1lbnRlZCBhcyBkbWFfZmx1c2hfcmFuZ2UoKS4KKyAqCisgKiBTZWUgZXJyYXR1bSAjMjUgb2YgIkludGVsIDgwMjAwIFByb2Nlc3NvciBTcGVjaWZpY2F0aW9uIFVwZGF0ZSIsCisgKiByZXZpc2lvbiBKYW51YXJ5IDIyLCAyMDAzLCBhdmFpbGFibGUgYXQ6CisgKiAgICAgaHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL2lpby9zcGVjdXBkdC8yNzM0MTUuaHRtCisgKi8KK0VOVFJZKHhzY2FsZV84MDIwMF9BMF9BMV9jYWNoZV9mbnMpCisJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fY2FjaGVfYWxsCisJLmxvbmcJeHNjYWxlX2ZsdXNoX3VzZXJfY2FjaGVfYWxsCisJLmxvbmcJeHNjYWxlX2ZsdXNoX3VzZXJfY2FjaGVfcmFuZ2UKKwkubG9uZwl4c2NhbGVfY29oZXJlbnRfa2Vybl9yYW5nZQorCS5sb25nCXhzY2FsZV9jb2hlcmVudF91c2VyX3JhbmdlCisJLmxvbmcJeHNjYWxlX2ZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UKKwkubG9uZwl4c2NhbGVfZG1hX2ZsdXNoX3JhbmdlCisJLmxvbmcJeHNjYWxlX2RtYV9jbGVhbl9yYW5nZQorCS5sb25nCXhzY2FsZV9kbWFfZmx1c2hfcmFuZ2UKKwogRU5UUlkoY3B1X3hzY2FsZV9kY2FjaGVfY2xlYW5fYXJlYSkKIDE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAxCQlAIGNsZWFuIEQgZW50cnkKIAlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FU0laRQpAQCAtNTMxLDYgKzU0OSwxMSBAQAogCS5hc2NpegkidjUiCiAJLnNpemUJY3B1X2VsZl9uYW1lLCAuIC0gY3B1X2VsZl9uYW1lCiAKKwkudHlwZQljcHVfODAyMDBfQTBfQTFfbmFtZSwgI29iamVjdAorY3B1XzgwMjAwX0EwX0ExX25hbWU6CisJLmFzY2l6CSJYU2NhbGUtODAyMDAgQTAvQTEiCisJLnNpemUJY3B1XzgwMjAwX0EwX0ExX25hbWUsIC4gLSBjcHVfODAyMDBfQTBfQTFfbmFtZQorCiAJLnR5cGUJY3B1XzgwMjAwX25hbWUsICNvYmplY3QKIGNwdV84MDIwMF9uYW1lOgogCS5hc2NpegkiWFNjYWxlLTgwMjAwIgpAQCAtNTk1LDYgKzYxOCwyOSBAQAogCiAJLnNlY3Rpb24gIi5wcm9jLmluZm8uaW5pdCIsICNhbGxvYywgI2V4ZWNpbnN0cgogCisJLnR5cGUJX184MDIwMF9BMF9BMV9wcm9jX2luZm8sI29iamVjdAorX184MDIwMF9BMF9BMV9wcm9jX2luZm86CisJLmxvbmcJMHg2OTA1MjAwMAorCS5sb25nCTB4ZmZmZmZmZmUKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0JVRkZFUkFCTEUgfCBcCisJCVBNRF9TRUNUX0NBQ0hFQUJMRSB8IFwKKwkJUE1EX1NFQ1RfQVBfV1JJVEUgfCBcCisJCVBNRF9TRUNUX0FQX1JFQUQKKwkubG9uZyAgIFBNRF9UWVBFX1NFQ1QgfCBcCisJCVBNRF9TRUNUX0FQX1dSSVRFIHwgXAorCQlQTURfU0VDVF9BUF9SRUFECisJYglfX3hzY2FsZV9zZXR1cAorCS5sb25nCWNwdV9hcmNoX25hbWUKKwkubG9uZwljcHVfZWxmX25hbWUKKwkubG9uZwlIV0NBUF9TV1B8SFdDQVBfSEFMRnxIV0NBUF9USFVNQnxIV0NBUF9GQVNUX01VTFR8SFdDQVBfRURTUAorCS5sb25nCWNwdV84MDIwMF9uYW1lCisJLmxvbmcJeHNjYWxlX3Byb2Nlc3Nvcl9mdW5jdGlvbnMKKwkubG9uZwl2NHdiaV90bGJfZm5zCisJLmxvbmcJeHNjYWxlX21jX3VzZXJfZm5zCisJLmxvbmcJeHNjYWxlXzgwMjAwX0EwX0ExX2NhY2hlX2ZucworCS5zaXplCV9fODAyMDBfQTBfQTFfcHJvY19pbmZvLCAuIC0gX184MDIwMF9BMF9BMV9wcm9jX2luZm8KKwogCS50eXBlCV9fODAyMDBfcHJvY19pbmZvLCNvYmplY3QKIF9fODAyMDBfcHJvY19pbmZvOgogCS5sb25nCTB4NjkwNTIwMDAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL29wcm9maWxlL29wX21vZGVsX3hzY2FsZS5jIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMKaW5kZXggMzRmZGM3My4uNjU3NjE0MyAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMKKysrIGIvYXJjaC9hcm0vb3Byb2ZpbGUvb3BfbW9kZWxfeHNjYWxlLmMKQEAgLTM2LDExICszNiwxMSBAQAogI2lmZGVmIENPTkZJR19BUkNIX0lPUDMxMAogI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX1hTODAyMDBfUE1VCiAjZW5kaWYKLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKLSNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9JT1AzMjFfQ09SRV9QTVUKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMlgKKyNkZWZpbmUgWFNDQUxFX1BNVV9JUlEgIElSUV9JT1AzMlhfQ09SRV9QTVUKICNlbmRpZgotI2lmZGVmIENPTkZJR19BUkNIX0lPUDMzMQotI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX0lPUDMzMV9DT1JFX1BNVQorI2lmZGVmIENPTkZJR19BUkNIX0lPUDMzWAorI2RlZmluZSBYU0NBTEVfUE1VX0lSUSAgSVJRX0lPUDMzWF9DT1JFX1BNVQogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfUFhBCiAjZGVmaW5lIFhTQ0FMRV9QTVVfSVJRICBJUlFfUE1VCkBAIC04OCw3ICs4OCw3IEBACiAvKgogICogVGhlcmUgYXJlIHR3byB2ZXJzaW9ucyBvZiB0aGUgUE1VIGluIGN1cnJlbnQgWFNjYWxlIHByb2Nlc3NvcnMKICAqIHdpdGggZGlmZmVyaW5nIHJlZ2lzdGVyIGxheW91dHMgYW5kIG51bWJlciBvZiBwZXJmb3JtYW5jZSBjb3VudGVycy4KLSAqIGUuZy4gSU9QMzIxIGlzIHhzYzEgd2hpbHN0IElPUDMzMSBpcyB4c2MyLgorICogZS5nLiBJT1AzMnggaXMgeHNjMSB3aGlsc3QgSU9QMzN4IGlzIHhzYzIuCiAgKiBXZSBkZXRlY3Qgd2hpY2ggcmVnaXN0ZXIgbGF5b3V0IHRvIHVzZSBpbiB4c2NhbGVfZGV0ZWN0X3BtdSgpCiAgKi8KIGVudW0geyBQTVVfWFNDMSwgUE1VX1hTQzIgfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL01ha2VmaWxlIGIvYXJjaC9hcm0vcGxhdC1pb3AvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkYTAwYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIGxpbnV4IGtlcm5lbC4KKyMKKworb2JqLXkJCQk6PSBncGlvLm8gaTJjLm8gcGNpLm8gc2V0dXAubyB0aW1lLm8KK29iai1tCQkJOj0KK29iai1uCQkJOj0KK29iai0JCQk6PQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvZ3Bpby5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvZ3Bpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYTQzNjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LWlvcC9ncGlvLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtaW9wL2dwaW8uYworICogR1BJTyBoYW5kbGluZyBmb3IgSW50ZWwgSU9QM3h4IHByb2Nlc3NvcnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IExlbm5lcnQgQnV5dGVuaGVrIDxidXl0ZW5oQHdhbnRzdG9mbHkub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS9pb3AzeHguaD4KKwordm9pZCBncGlvX2xpbmVfY29uZmlnKGludCBsaW5lLCBpbnQgZGlyZWN0aW9uKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKGRpcmVjdGlvbiA9PSBHUElPX0lOKSB7CisJCSpJT1AzWFhfR1BPRSB8PSAxIDw8IGxpbmU7CisJfSBlbHNlIGlmIChkaXJlY3Rpb24gPT0gR1BJT19PVVQpIHsKKwkJKklPUDNYWF9HUE9FICY9IH4oMSA8PCBsaW5lKTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChncGlvX2xpbmVfY29uZmlnKTsKKworaW50IGdwaW9fbGluZV9nZXQoaW50IGxpbmUpCit7CisJcmV0dXJuICEhKCpJT1AzWFhfR1BJRCAmICgxIDw8IGxpbmUpKTsKK30KK0VYUE9SVF9TWU1CT0woZ3Bpb19saW5lX2dldCk7CisKK3ZvaWQgZ3Bpb19saW5lX3NldChpbnQgbGluZSwgaW50IHZhbHVlKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJaWYgKHZhbHVlID09IEdQSU9fTE9XKSB7CisJCSpJT1AzWFhfR1BPRCAmPSB+KDEgPDwgbGluZSk7CisJfSBlbHNlIGlmICh2YWx1ZSA9PSBHUElPX0hJR0gpIHsKKwkJKklPUDNYWF9HUE9EIHw9IDEgPDwgbGluZTsKKwl9CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorRVhQT1JUX1NZTUJPTChncGlvX2xpbmVfc2V0KTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL2kyYy5jIGIvYXJjaC9hcm0vcGxhdC1pb3AvaTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk5OTA5YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL2kyYy5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LWlvcC9pMmMuYworICoKKyAqIEF1dGhvcjogTmljb2xhcyBQaXRyZSA8bmljb0BjYW0ub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsX2NvcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL3NldHVwLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9wM3h4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9hcmNoLmg+CisKKyNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMlgKKyNkZWZpbmUgSVJRX0lPUDNYWF9JMkNfMAlJUlFfSU9QMzJYX0kyQ18wCisjZGVmaW5lIElSUV9JT1AzWFhfSTJDXzEJSVJRX0lPUDMyWF9JMkNfMQorI2VuZGlmCisjaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzNYCisjZGVmaW5lIElSUV9JT1AzWFhfSTJDXzAJSVJRX0lPUDMzWF9JMkNfMAorI2RlZmluZSBJUlFfSU9QM1hYX0kyQ18xCUlSUV9JT1AzM1hfSTJDXzEKKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcDN4eF9pMmMwX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmZmZjY4MCwKKwkJLmVuZAk9IDB4ZmZmZmY2OTcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfSU9QM1hYX0kyQ18wLAorCQkuZW5kCT0gSVJRX0lPUDNYWF9JMkNfMCwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfSwKK307CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wM3h4X2kyYzBfZGV2aWNlID0geworCS5uYW1lCQk9ICJJT1AzeHgtSTJDIiwKKwkuaWQJCT0gMCwKKwkubnVtX3Jlc291cmNlcwk9IDIsCisJLnJlc291cmNlCT0gaW9wM3h4X2kyYzBfcmVzb3VyY2VzLAorfTsKKworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIGlvcDN4eF9pMmMxX3Jlc291cmNlc1tdID0geworCVswXSA9IHsKKwkJLnN0YXJ0CT0gMHhmZmZmZjZhMCwKKwkJLmVuZAk9IDB4ZmZmZmY2YjcsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNLAorCX0sCisJWzFdID0geworCQkuc3RhcnQJPSBJUlFfSU9QM1hYX0kyQ18xLAorCQkuZW5kCT0gSVJRX0lPUDNYWF9JMkNfMSwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9JUlEsCisJfQorfTsKKworc3RydWN0IHBsYXRmb3JtX2RldmljZSBpb3AzeHhfaTJjMV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gIklPUDN4eC1JMkMiLAorCS5pZAkJPSAxLAorCS5udW1fcmVzb3VyY2VzCT0gMiwKKwkucmVzb3VyY2UJPSBpb3AzeHhfaTJjMV9yZXNvdXJjZXMsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMgYi9hcmNoL2FybS9wbGF0LWlvcC9wY2kuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjQ3ODEyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMKQEAgLTAsMCArMSwyNDcgQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LWlvcC9wY2kuYworICoKKyAqIFBDSSBzdXBwb3J0IGZvciB0aGUgSW50ZWwgSU9QMzJYIGFuZCBJT1AzM1ggcHJvY2Vzc29ycworICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9wM3h4Lmg+CisKKy8vICNkZWZpbmUgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lICBEQkcoeC4uLikgcHJpbnRrKHgpCisjZWxzZQorI2RlZmluZSAgREJHKHguLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgorICogVGhpcyByb3V0aW5lIGJ1aWxkcyBlaXRoZXIgYSB0eXBlMCBvciB0eXBlMSBjb25maWd1cmF0aW9uIGNvbW1hbmQuICBJZiB0aGUKKyAqIGJ1cyBpcyBvbiB0aGUgODAzeHggdGhlbiBhIHR5cGUwIG1hZGUsIGVsc2UgYSB0eXBlMSBpcyBjcmVhdGVkLgorICovCitzdGF0aWMgdTMyIGlvcDN4eF9jZmdfYWRkcmVzcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4sIGludCB3aGVyZSkKK3sKKwlzdHJ1Y3QgcGNpX3N5c19kYXRhICpzeXMgPSBidXMtPnN5c2RhdGE7CisJdTMyIGFkZHI7CisKKwlpZiAoc3lzLT5idXNuciA9PSBidXMtPm51bWJlcikKKwkJYWRkciA9IDEgPDwgKFBDSV9TTE9UKGRldmZuKSArIDE2KSB8IChQQ0lfU0xPVChkZXZmbikgPDwgMTEpOworCWVsc2UKKwkJYWRkciA9IGJ1cy0+bnVtYmVyIDw8IDE2IHwgUENJX1NMT1QoZGV2Zm4pIDw8IDExIHwgMTsKKworCWFkZHIgfD0JUENJX0ZVTkMoZGV2Zm4pIDw8IDggfCAod2hlcmUgJiB+Myk7CisKKwlyZXR1cm4gYWRkcjsKK30KKworLyoKKyAqIFRoaXMgcm91dGluZSBjaGVja3MgdGhlIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uIGN5Y2xlLiAgSWYgYW4gZXJyb3IKKyAqIHdhcyBkZXRlY3RlZCBpdCByZXR1cm5zIGEgMSwgZWxzZSBpdCByZXR1cm5zIGEgMC4gIFRoZSBlcnJvcnMgYmVpbmcgY2hlY2tlZAorICogYXJlIHBhcml0eSwgbWFzdGVyIGFib3J0LCB0YXJnZXQgYWJvcnQgKG1hc3RlciBhbmQgdGFyZ2V0KS4gIFRoZXNlIHR5cGVzIG9mCisgKiBlcnJvcnMgb2NjdXJlIGR1cmluZyBhIGNvbmZpZyBjeWNsZSB3aGVyZSB0aGVyZSBpcyBubyBkZXZpY2UsIGxpa2UgZHVyaW5nCisgKiB0aGUgZGlzY292ZXJ5IHN0YWdlLgorICovCitzdGF0aWMgaW50IGlvcDN4eF9wY2lfc3RhdHVzKHZvaWQpCit7CisJdW5zaWduZWQgaW50IHN0YXR1czsKKwlpbnQgcmV0ID0gMDsKKworCS8qCisJICogQ2hlY2sgdGhlIHN0YXR1cyByZWdpc3RlcnMuCisJICovCisJc3RhdHVzID0gKklPUDNYWF9BVFVTUjsKKwlpZiAoc3RhdHVzICYgMHhmOTAwKSB7CisJCURCRygiXHRcdFx0UENJOiBQMCAtIHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJKklPUDNYWF9BVFVTUiA9IHN0YXR1cyAmIDB4ZjkwMDsKKwkJcmV0ID0gMTsKKwl9CisKKwlzdGF0dXMgPSAqSU9QM1hYX0FUVUlTUjsKKwlpZiAoc3RhdHVzICYgMHg2NzlmKSB7CisJCURCRygiXHRcdFx0UENJOiBQMSAtIHN0YXR1cyA9IDB4JTA4eFxuIiwgc3RhdHVzKTsKKwkJKklPUDNYWF9BVFVJU1IgPSBzdGF0dXMgJiAweDY3OWY7CisJCXJldCA9IDE7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFNpbXBseSB3cml0ZSB0aGUgYWRkcmVzcyByZWdpc3RlciBhbmQgcmVhZCB0aGUgY29uZmlndXJhdGlvbgorICogZGF0YS4gIE5vdGUgdGhhdCB0aGUgNCBub3AncyBlbnN1cmUgdGhhdCB3ZSBhcmUgYWJsZSB0byBoYW5kbGUKKyAqIGEgZGVsYXllZCBhYm9ydCAoaW4gdGhlb3J5LikKKyAqLworc3RhdGljIGlubGluZSB1MzIgaW9wM3h4X3JlYWQodW5zaWduZWQgbG9uZyBhZGRyKQoreworCXUzMiB2YWw7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwkJInN0cgklMSwgWyUyXVxuXHQiCisJCSJsZHIJJTAsIFslM11cblx0IgorCQkibm9wXG5cdCIKKwkJIm5vcFxuXHQiCisJCSJub3Bcblx0IgorCQkibm9wXG5cdCIKKwkJOiAiPXIiICh2YWwpCisJCTogInIiIChhZGRyKSwgInIiIChJT1AzWFhfT0NDQVIpLCAiciIgKElPUDNYWF9PQ0NEUikpOworCisJcmV0dXJuIHZhbDsKK30KKworLyoKKyAqIFRoZSByZWFkIHJvdXRpbmVzIG11c3QgY2hlY2sgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgbGFzdCBjb25maWd1cmF0aW9uCisgKiBjeWNsZS4gIElmIHRoZXJlIHdhcyBhbiBlcnJvciwgdGhlIHJvdXRpbmUgcmV0dXJucyBhbGwgaGV4IGYncy4KKyAqLworc3RhdGljIGludAoraW9wM3h4X3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwgaW50IHdoZXJlLAorCQlpbnQgc2l6ZSwgdTMyICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBpb3AzeHhfY2ZnX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOworCXUzMiB2YWwgPSBpb3AzeHhfcmVhZChhZGRyKSA+PiAoKHdoZXJlICYgMykgKiA4KTsKKworCWlmIChpb3AzeHhfcGNpX3N0YXR1cygpKQorCQl2YWwgPSAweGZmZmZmZmZmOworCisJKnZhbHVlID0gdmFsOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIGludAoraW9wM3h4X3dyaXRlX2NvbmZpZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sIGludCB3aGVyZSwKKwkJaW50IHNpemUsIHUzMiB2YWx1ZSkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBpb3AzeHhfY2ZnX2FkZHJlc3MoYnVzLCBkZXZmbiwgd2hlcmUpOworCXUzMiB2YWw7CisKKwlpZiAoc2l6ZSAhPSA0KSB7CisJCXZhbCA9IGlvcDN4eF9yZWFkKGFkZHIpOworCQlpZiAoaW9wM3h4X3BjaV9zdGF0dXMoKSkKKwkJCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7CisKKwkJd2hlcmUgPSAod2hlcmUgJiAzKSAqIDg7CisKKwkJaWYgKHNpemUgPT0gMSkKKwkJCXZhbCAmPSB+KDB4ZmYgPDwgd2hlcmUpOworCQllbHNlCisJCQl2YWwgJj0gfigweGZmZmYgPDwgd2hlcmUpOworCisJCSpJT1AzWFhfT0NDRFIgPSB2YWwgfCB2YWx1ZSA8PCB3aGVyZTsKKwl9IGVsc2UgeworCQlhc20gdm9sYXRpbGUoCisJCQkic3RyCSUxLCBbJTJdXG5cdCIKKwkJCSJzdHIJJTAsIFslM11cblx0IgorCQkJIm5vcFxuXHQiCisJCQkibm9wXG5cdCIKKwkJCSJub3Bcblx0IgorCQkJIm5vcFxuXHQiCisJCQk6CisJCQk6ICJyIiAodmFsdWUpLCAiciIgKGFkZHIpLAorCQkJICAiciIgKElPUDNYWF9PQ0NBUiksICJyIiAoSU9QM1hYX09DQ0RSKSk7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHN0cnVjdCBwY2lfb3BzIGlvcDN4eF9vcHMgPSB7CisJLnJlYWQJPSBpb3AzeHhfcmVhZF9jb25maWcsCisJLndyaXRlCT0gaW9wM3h4X3dyaXRlX2NvbmZpZywKK307CisKKy8qCisgKiBXaGVuIGEgUENJIGRldmljZSBkb2VzIG5vdCBleGlzdCBkdXJpbmcgY29uZmlnIGN5Y2xlcywgdGhlIDgwMjAwIGdldHMgYQorICogYnVzIGVycm9yIGluc3RlYWQgb2YgcmV0dXJuaW5nIDB4ZmZmZmZmZmYuIFRoaXMgaGFuZGxlciBzaW1wbHkgcmV0dXJucy4KKyAqLworc3RhdGljIGludAoraW9wM3h4X3BjaV9hYm9ydCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBmc3IsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCURCRygiUENJIGFib3J0OiBhZGRyZXNzID0gMHglMDhseCBmc3IgPSAweCUwM3ggUEMgPSAweCUwOGx4IExSID0gMHglMDhseFxuIiwKKwkJYWRkciwgZnNyLCByZWdzLT5BUk1fcGMsIHJlZ3MtPkFSTV9scik7CisKKwkvKgorCSAqIElmIGl0IHdhcyBhbiBpbXByZWNpc2UgYWJvcnQsIHRoZW4gd2UgbmVlZCB0byBjb3JyZWN0IHRoZQorCSAqIHJldHVybiBhZGRyZXNzIHRvIGJlIF9hZnRlcl8gdGhlIGluc3RydWN0aW9uLgorCSAqLworCWlmIChmc3IgJiAoMSA8PCAxMCkpCisJCXJlZ3MtPkFSTV9wYyArPSA0OworCisJcmV0dXJuIDA7Cit9CisKK2ludCBpb3AzeHhfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCisJaWYgKG5yICE9IDApCisJCXJldHVybiAwOworCisJcmVzID0ga3phbGxvYygyICogc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSksIEdGUF9LRVJORUwpOworCWlmICghcmVzKQorCQlwYW5pYygiUENJOiB1bmFibGUgdG8gYWxsb2MgcmVzb3VyY2VzIik7CisKKwlyZXNbMF0uc3RhcnQgPSBJT1AzWFhfUENJX0xPV0VSX0lPX1ZBOworCXJlc1swXS5lbmQgICA9IElPUDNYWF9QQ0lfTE9XRVJfSU9fVkEgKyBJT1AzWFhfUENJX0lPX1dJTkRPV19TSVpFIC0gMTsKKwlyZXNbMF0ubmFtZSAgPSAiSU9QM1hYIFBDSSBJL08gU3BhY2UiOworCXJlc1swXS5mbGFncyA9IElPUkVTT1VSQ0VfSU87CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmcmVzWzBdKTsKKworCXJlc1sxXS5zdGFydCA9IElPUDNYWF9QQ0lfTE9XRVJfTUVNX1BBOworCXJlc1sxXS5lbmQgICA9IElPUDNYWF9QQ0lfTE9XRVJfTUVNX1BBICsgSU9QM1hYX1BDSV9NRU1fV0lORE9XX1NJWkUgLSAxOworCXJlc1sxXS5uYW1lICA9ICJJT1AzWFggUENJIE1lbW9yeSBTcGFjZSI7CisJcmVzWzFdLmZsYWdzID0gSU9SRVNPVVJDRV9NRU07CisJcmVxdWVzdF9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZyZXNbMV0pOworCisJc3lzLT5tZW1fb2Zmc2V0ID0gSU9QM1hYX1BDSV9MT1dFUl9NRU1fUEEgLSBJT1AzWFhfUENJX0xPV0VSX01FTV9CQTsKKwlzeXMtPmlvX29mZnNldCAgPSBJT1AzWFhfUENJX0xPV0VSX0lPX1ZBIC0gSU9QM1hYX1BDSV9MT1dFUl9JT19CQTsKKworCXN5cy0+cmVzb3VyY2VbMF0gPSAmcmVzWzBdOworCXN5cy0+cmVzb3VyY2VbMV0gPSAmcmVzWzFdOworCXN5cy0+cmVzb3VyY2VbMl0gPSBOVUxMOworCisJcmV0dXJuIDE7Cit9CisKK3N0cnVjdCBwY2lfYnVzICppb3AzeHhfcGNpX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqc3lzKQoreworCXJldHVybiBwY2lfc2Nhbl9idXMoc3lzLT5idXNuciwgJmlvcDN4eF9vcHMsIHN5cyk7Cit9CisKK3ZvaWQgaW9wM3h4X3BjaV9wcmVpbml0KHZvaWQpCit7CisJREJHKCJQQ0k6ICBJbnRlbCA4MDN4eCBQQ0kgaW5pdCBjb2RlLlxuIik7CisJREJHKCJBVFU6IElPUDNYWF9BVFVDTUQ9MHglMDR4XG4iLCAqSU9QM1hYX0FUVUNNRCk7CisJREJHKCJBVFU6IElPUDNYWF9PTVdUVlIwPTB4JTA0eCwgSU9QM1hYX09JT1dUVlI9MHglMDR4XG4iLAorCQkJKklPUDNYWF9PTVdUVlIwLAorCQkJKklPUDNYWF9PSU9XVFZSKTsKKwlEQkcoIkFUVTogSU9QM1hYX0FUVUNSPTB4JTA4eFxuIiwgKklPUDNYWF9BVFVDUik7CisJREJHKCJBVFU6IElPUDNYWF9JQUJBUjA9MHglMDh4IElPUDNYWF9JQUxSMD0weCUwOHggSU9QM1hYX0lBVFZSMD0lMDh4XG4iLAorCQkJKklPUDNYWF9JQUJBUjAsICpJT1AzWFhfSUFMUjAsICpJT1AzWFhfSUFUVlIwKTsKKwlEQkcoIkFUVTogSU9QM1hYX09NV1RWUjA9MHglMDh4XG4iLCAqSU9QM1hYX09NV1RWUjApOworCURCRygiQVRVOiBJT1AzWFhfSUFCQVIxPTB4JTA4eCBJT1AzWFhfSUFMUjE9MHglMDh4XG4iLAorCQkJKklPUDNYWF9JQUJBUjEsICpJT1AzWFhfSUFMUjEpOworCURCRygiQVRVOiBJT1AzWFhfRVJCQVI9MHglMDh4IElPUDNYWF9FUkxSPTB4JTA4eCBJT1AzWFhfRVJUVlI9JTA4eFxuIiwKKwkJCSpJT1AzWFhfRVJCQVIsICpJT1AzWFhfRVJMUiwgKklPUDNYWF9FUlRWUik7CisJREJHKCJBVFU6IElPUDNYWF9JQUJBUjI9MHglMDh4IElPUDNYWF9JQUxSMj0weCUwOHggSU9QM1hYX0lBVFZSMj0lMDh4XG4iLAorCQkJKklPUDNYWF9JQUJBUjIsICpJT1AzWFhfSUFMUjIsICpJT1AzWFhfSUFUVlIyKTsKKwlEQkcoIkFUVTogSU9QM1hYX0lBQkFSMz0weCUwOHggSU9QM1hYX0lBTFIzPTB4JTA4eCBJT1AzWFhfSUFUVlIzPSUwOHhcbiIsCisJCQkqSU9QM1hYX0lBQkFSMywgKklPUDNYWF9JQUxSMywgKklPUDNYWF9JQVRWUjMpOworCisJaG9va19mYXVsdF9jb2RlKDE2KzYsIGlvcDN4eF9wY2lfYWJvcnQsIFNJR0JVUywgImltcHJlY2lzZSBleHRlcm5hbCBhYm9ydCIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1pb3Avc2V0dXAuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDY4OWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvYXJtL3BsYXQtaW9wL3NldHVwLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIGFyY2gvYXJtL3BsYXQtaW9wL3NldHVwLmMKKyAqCisgKiBBdXRob3I6IE5pY29sYXMgUGl0cmUgPG5pY29AY2FtLm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwMSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycG9yYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2gvbWFwLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvcDN4eC5oPgorCisvKgorICogU3RhbmRhcmQgSU8gbWFwcGluZyBmb3IgYWxsIElPUDN4eCBiYXNlZCBzeXN0ZW1zCisgKi8KK3N0YXRpYyBzdHJ1Y3QgbWFwX2Rlc2MgaW9wM3h4X3N0ZF9kZXNjW10gX19pbml0ZGF0YSA9IHsKKwkgewkvKiBtZW0gbWFwcGVkIHJlZ2lzdGVycyAqLworCQkudmlydHVhbAk9IElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSwKKwkJLnBmbgkJPSBfX3BoeXNfdG9fcGZuKElPUDNYWF9QRVJJUEhFUkFMX1BIWVNfQkFTRSksCisJCS5sZW5ndGgJCT0gSU9QM1hYX1BFUklQSEVSQUxfU0laRSwKKwkJLnR5cGUJCT0gTVRfREVWSUNFLAorCSB9LCB7CS8qIFBDSSBJTyBzcGFjZSAqLworCQkudmlydHVhbAk9IElPUDNYWF9QQ0lfTE9XRVJfSU9fVkEsCisJCS5wZm4JCT0gX19waHlzX3RvX3BmbihJT1AzWFhfUENJX0xPV0VSX0lPX1BBKSwKKwkJLmxlbmd0aAkJPSBJT1AzWFhfUENJX0lPX1dJTkRPV19TSVpFLAorCQkudHlwZQkJPSBNVF9ERVZJQ0UsCisJIH0sCit9OworCit2b2lkIF9faW5pdCBpb3AzeHhfbWFwX2lvKHZvaWQpCit7CisJaW90YWJsZV9pbml0KGlvcDN4eF9zdGRfZGVzYywgQVJSQVlfU0laRShpb3AzeHhfc3RkX2Rlc2MpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYyBiL2FyY2gvYXJtL3BsYXQtaW9wL3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI4MmRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9hcm0vcGxhdC1pb3AvdGltZS5jCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBhcmNoL2FybS9wbGF0LWlvcC90aW1lLmMKKyAqCisgKiBUaW1lciBjb2RlIGZvciBJT1AzMnggYW5kIElPUDMzeCBiYXNlZCBzeXN0ZW1zCisgKgorICogQXV0aG9yOiBEZWVwYWsgU2F4ZW5hIDxkc2F4ZW5hQG12aXN0YS5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDItMjAwMyBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgorCisjaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzJYCisjZGVmaW5lIElSUV9JT1AzWFhfVElNRVIwCUlSUV9JT1AzMlhfVElNRVIwCisjZWxzZQorI2lmZGVmIENPTkZJR19BUkNIX0lPUDMzWAorI2RlZmluZSBJUlFfSU9QM1hYX1RJTUVSMAlJUlFfSU9QMzNYX1RJTUVSMAorI2VuZGlmCisjZW5kaWYKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGlja3NfcGVyX2ppZmZ5Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGlja3NfcGVyX3VzZWM7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBuZXh0X2ppZmZ5X3RpbWU7CisKK3Vuc2lnbmVkIGxvbmcgaW9wM3h4X2dldHRpbWVvZmZzZXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG9mZnNldDsKKworCW9mZnNldCA9IG5leHRfamlmZnlfdGltZSAtICpJT1AzWFhfVFVfVENSMTsKKworCXJldHVybiBvZmZzZXQgLyB0aWNrc19wZXJfdXNlYzsKK30KKworc3RhdGljIGlycXJldHVybl90Citpb3AzeHhfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CisKKwlpb3AzeHhfY3A2X2VuYWJsZSgpOworCWFzbSB2b2xhdGlsZSgibWNyIHA2LCAwLCAlMCwgYzYsIGMxLCAwIiA6IDogInIiICgxKSk7CisJaW9wM3h4X2NwNl9kaXNhYmxlKCk7CisKKwl3aGlsZSAoKHNpZ25lZCBsb25nKShuZXh0X2ppZmZ5X3RpbWUgLSAqSU9QM1hYX1RVX1RDUjEpCisJCQkJCQkJPj0gdGlja3NfcGVyX2ppZmZ5KSB7CisJCXRpbWVyX3RpY2socmVncyk7CisJCW5leHRfamlmZnlfdGltZSAtPSB0aWNrc19wZXJfamlmZnk7CisJfQorCisJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaW9wM3h4X3RpbWVyX2lycSA9IHsKKwkubmFtZQkJPSAiSU9QM1hYIFRpbWVyIFRpY2siLAorCS5oYW5kbGVyCT0gaW9wM3h4X3RpbWVyX2ludGVycnVwdCwKKwkuZmxhZ3MJCT0gSVJRRl9ESVNBQkxFRCB8IElSUUZfVElNRVIsCit9OworCit2b2lkIF9faW5pdCBpb3AzeHhfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcgdGlja19yYXRlKQoreworCXUzMiB0aW1lcl9jdGw7CisKKwl0aWNrc19wZXJfamlmZnkgPSAodGlja19yYXRlICsgSFovMikgLyBIWjsKKwl0aWNrc19wZXJfdXNlYyA9IHRpY2tfcmF0ZSAvIDEwMDAwMDA7CisJbmV4dF9qaWZmeV90aW1lID0gMHhmZmZmZmZmZjsKKworCXRpbWVyX2N0bCA9IElPUDNYWF9UTVJfRU4gfCBJT1AzWFhfVE1SX1BSSVZJTEVHRUQgfAorCQkJSU9QM1hYX1RNUl9SRUxPQUQgfCBJT1AzWFhfVE1SX1JBVElPXzFfMTsKKworCS8qCisJICogV2UgdXNlIHRpbWVyIDAgZm9yIG91ciB0aW1lciBpbnRlcnJ1cHQsIGFuZCB0aW1lciAxIGFzCisJICogbW9ub3RvbmljIGNvdW50ZXIgZm9yIHRyYWNraW5nIG1pc3NlZCBqaWZmaWVzLgorCSAqLworCWlvcDN4eF9jcDZfZW5hYmxlKCk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNCwgYzEsIDAiIDogOiAiciIgKHRpY2tzX3Blcl9qaWZmeSAtIDEpKTsKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMwLCBjMSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7CisJYXNtIHZvbGF0aWxlKCJtY3IgcDYsIDAsICUwLCBjNSwgYzEsIDAiIDogOiAiciIgKDB4ZmZmZmZmZmYpKTsKKwlhc20gdm9sYXRpbGUoIm1jciBwNiwgMCwgJTAsIGMxLCBjMSwgMCIgOiA6ICJyIiAodGltZXJfY3RsKSk7CisJaW9wM3h4X2NwNl9kaXNhYmxlKCk7CisKKwlzZXR1cF9pcnEoSVJRX0lPUDNYWF9USU1FUjAsICZpb3AzeHhfdGltZXJfaXJxKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9jbG9jay5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKaW5kZXggN2Y0NWM3Yy4uZjExNzlhZCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2Nsb2NrLmMKQEAgLTEwMCw2ICsxMDAsNyBAQAogCQlyZXR1cm47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJQlVHX09OKGNsay0+dXNlY291bnQgPT0gMCk7CiAJaWYgKGFyY2hfY2xvY2stPmNsa19kaXNhYmxlKQogCQlhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZShjbGspOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNsb2NrZndfbG9jaywgZmxhZ3MpOwpAQCAtMzIyLDYgKzMyMywzMSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCisjaWZkZWYgQ09ORklHX09NQVBfUkVTRVRfQ0xPQ0tTCisvKgorICogRGlzYWJsZSBhbnkgdW51c2VkIGNsb2NrcyBsZWZ0IG9uIGJ5IHRoZSBib290bG9hZGVyCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IGNsa19kaXNhYmxlX3VudXNlZCh2b2lkKQoreworCXN0cnVjdCBjbGsgKmNrOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNrLCAmY2xvY2tzLCBub2RlKSB7CisJCWlmIChjay0+dXNlY291bnQgPiAwIHx8IChjay0+ZmxhZ3MgJiBBTFdBWVNfRU5BQkxFRCkgfHwKKwkJCWNrLT5lbmFibGVfcmVnID09IDApCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmY2xvY2tmd19sb2NrLCBmbGFncyk7CisJCWlmIChhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZV91bnVzZWQpCisJCQlhcmNoX2Nsb2NrLT5jbGtfZGlzYWJsZV91bnVzZWQoY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbG9ja2Z3X2xvY2ssIGZsYWdzKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KK2xhdGVfaW5pdGNhbGwoY2xrX2Rpc2FibGVfdW51c2VkKTsKKyNlbmRpZgorCiBpbnQgX19pbml0IGNsa19pbml0KHN0cnVjdCBjbGtfZnVuY3Rpb25zICogY3VzdG9tX2Nsb2NrcykKIHsKIAlpZiAoIWN1c3RvbV9jbG9ja3MpIHsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvZGV2aWNlcy5jCmluZGV4IDE4MTJmMjMuLmRiYzNmNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC9kZXZpY2VzLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RldmljZXMuYwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAKICNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMjRYWAogI2RlZmluZQlPTUFQX01NQzFfQkFTRQkJMHg0ODA5YzAwMAotI2RlZmluZSBPTUFQX01NQzFfSU5UCQk4MworI2RlZmluZSBPTUFQX01NQzFfSU5UCQlJTlRfMjRYWF9NTUNfSVJRCiAjZWxzZQogI2RlZmluZQlPTUFQX01NQzFfQkFTRQkJMHhmZmZiNzgwMAogI2RlZmluZSBPTUFQX01NQzFfSU5UCQlJTlRfTU1DCkBAIC0yMjUsNyArMjI1LDE0IEBACiAJLyogYmxvY2sgMSBpcyBhbHdheXMgYXZhaWxhYmxlIGFuZCBoYXMganVzdCBvbmUgcGlub3V0IG9wdGlvbiAqLwogCW1tYyA9ICZtbWNfY29uZi0+bW1jWzBdOwogCWlmIChtbWMtPmVuYWJsZWQpIHsKLQkJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCW9tYXBfY2ZnX3JlZyhIMThfMjRYWF9NTUNfQ01EKTsKKwkJCW9tYXBfY2ZnX3JlZyhIMTVfMjRYWF9NTUNfQ0xLSSk7CisJCQlvbWFwX2NmZ19yZWcoRzE5XzI0WFhfTU1DX0NMS08pOworCQkJb21hcF9jZmdfcmVnKEYyMF8yNFhYX01NQ19EQVQwKTsKKwkJCW9tYXBfY2ZnX3JlZyhGMTlfMjRYWF9NTUNfREFUX0RJUjApOworCQkJb21hcF9jZmdfcmVnKEcxOF8yNFhYX01NQ19DTURfRElSKTsKKwkJfSBlbHNlIHsKIAkJCW9tYXBfY2ZnX3JlZyhNTUNfQ01EKTsKIAkJCW9tYXBfY2ZnX3JlZyhNTUNfQ0xLKTsKIAkJCW9tYXBfY2ZnX3JlZyhNTUNfREFUMCk7CkBAIC0yMzYsNyArMjQzLDE0IEBACiAJCQl9CiAJCX0KIAkJaWYgKG1tYy0+d2lyZTQpIHsKLQkJCWlmICghY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkJCW9tYXBfY2ZnX3JlZyhIMTRfMjRYWF9NTUNfREFUMSk7CisJCQkJb21hcF9jZmdfcmVnKEUxOV8yNFhYX01NQ19EQVQyKTsKKwkJCQlvbWFwX2NmZ19yZWcoRDE5XzI0WFhfTU1DX0RBVDMpOworCQkJCW9tYXBfY2ZnX3JlZyhFMjBfMjRYWF9NTUNfREFUX0RJUjEpOworCQkJCW9tYXBfY2ZnX3JlZyhGMThfMjRYWF9NTUNfREFUX0RJUjIpOworCQkJCW9tYXBfY2ZnX3JlZyhFMThfMjRYWF9NTUNfREFUX0RJUjMpOworCQkJfSBlbHNlIHsKIAkJCQlvbWFwX2NmZ19yZWcoTU1DX0RBVDEpOwogCQkJCS8qIE5PVEU6ICBEQVQyIGNhbiBiZSBvbiBXMTAgKGhlcmUpIG9yIE0xNSAqLwogCQkJCWlmICghbW1jLT5ub211eCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbWEuYwppbmRleCA5ZWRkYzk1Li4xYmJiNDMxIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG1hLmMKKysrIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtYS5jCkBAIC0xMTksMzIgKzExOSw0MSBAQAogCQlvbWFwX3dyaXRldygwLCBsY2hfYmFzZSArIGkpOwogfQogCi12b2lkIG9tYXBfc2V0X2RtYV9wcmlvcml0eShpbnQgZHN0X3BvcnQsIGludCBwcmlvcml0eSkKK3ZvaWQgb21hcF9zZXRfZG1hX3ByaW9yaXR5KGludCBsY2gsIGludCBkc3RfcG9ydCwgaW50IHByaW9yaXR5KQogewogCXVuc2lnbmVkIGxvbmcgcmVnOwogCXUzMiBsOwogCi0Jc3dpdGNoIChkc3RfcG9ydCkgewotCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDE6CS8qIEZGRkVDQzAwICovCi0JCXJlZyA9IE9NQVBfVENfT0NQVDFfUFJJT1I7Ci0JCWJyZWFrOwotCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDI6CS8qIEZGRkVDQ0QwICovCi0JCXJlZyA9IE9NQVBfVENfT0NQVDJfUFJJT1I7Ci0JCWJyZWFrOwotCWNhc2UgT01BUF9ETUFfUE9SVF9FTUlGRjoJLyogRkZGRUNDMDggKi8KLQkJcmVnID0gT01BUF9UQ19FTUlGRl9QUklPUjsKLQkJYnJlYWs7Ci0JY2FzZSBPTUFQX0RNQV9QT1JUX0VNSUZTOgkvKiBGRkZFQ0MwNCAqLwotCQlyZWcgPSBPTUFQX1RDX0VNSUZTX1BSSU9SOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlCVUcoKTsKLQkJcmV0dXJuOworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlzd2l0Y2ggKGRzdF9wb3J0KSB7CisJCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDE6CS8qIEZGRkVDQzAwICovCisJCQlyZWcgPSBPTUFQX1RDX09DUFQxX1BSSU9SOworCQkJYnJlYWs7CisJCWNhc2UgT01BUF9ETUFfUE9SVF9PQ1BfVDI6CS8qIEZGRkVDQ0QwICovCisJCQlyZWcgPSBPTUFQX1RDX09DUFQyX1BSSU9SOworCQkJYnJlYWs7CisJCWNhc2UgT01BUF9ETUFfUE9SVF9FTUlGRjoJLyogRkZGRUNDMDggKi8KKwkJCXJlZyA9IE9NQVBfVENfRU1JRkZfUFJJT1I7CisJCQlicmVhazsKKwkJY2FzZSBPTUFQX0RNQV9QT1JUX0VNSUZTOgkvKiBGRkZFQ0MwNCAqLworCQkJcmVnID0gT01BUF9UQ19FTUlGU19QUklPUjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJQlVHKCk7CisJCQlyZXR1cm47CisJCX0KKwkJbCA9IG9tYXBfcmVhZGwocmVnKTsKKwkJbCAmPSB+KDB4ZiA8PCA4KTsKKwkJbCB8PSAocHJpb3JpdHkgJiAweGYpIDw8IDg7CisJCW9tYXBfd3JpdGVsKGwsIHJlZyk7CiAJfQotCWwgPSBvbWFwX3JlYWRsKHJlZyk7Ci0JbCAmPSB+KDB4ZiA8PCA4KTsKLQlsIHw9IChwcmlvcml0eSAmIDB4ZikgPDwgODsKLQlvbWFwX3dyaXRlbChsLCByZWcpOworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWlmIChwcmlvcml0eSkKKwkJCU9NQVBfRE1BX0NDUl9SRUcobGNoKSB8PSAoMSA8PCA2KTsKKwkJZWxzZQorCQkJT01BUF9ETUFfQ0NSX1JFRyhsY2gpICY9IH4oMSA8PCA2KTsKKwl9CiB9CiAKIHZvaWQgb21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyhpbnQgbGNoLCBpbnQgZGF0YV90eXBlLCBpbnQgZWxlbV9jb3VudCwKQEAgLTIzNCw2ICsyNDMsMTQgQEAKIAlPTUFQMV9ETUFfTENIX0NUUkxfUkVHKGxjaCkgPSB3OwogfQogCit2b2lkIG9tYXBfc2V0X2RtYV93cml0ZV9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfd3JpdGVfbW9kZSBtb2RlKQoreworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlPTUFQX0RNQV9DU0RQX1JFRyhsY2gpICY9IH4oMHgzIDw8IDE2KTsKKwkJT01BUF9ETUFfQ1NEUF9SRUcobGNoKSB8PSAobW9kZSA8PCAxNik7CisJfQorfQorCiAvKiBOb3RlIHRoYXQgc3JjX3BvcnQgaXMgb25seSBmb3Igb21hcDEgKi8KIHZvaWQgb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoaW50IGxjaCwgaW50IHNyY19wb3J0LCBpbnQgc3JjX2Ftb2RlLAogCQkJICAgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKQEAgLTY5OCw2ICs3MTUsMzIgQEAKIH0KIAogLyoKKyAqIEFsbG93cyBjaGFuZ2luZyB0aGUgRE1BIGNhbGxiYWNrIGZ1bmN0aW9uIG9yIGRhdGEuIFRoaXMgbWF5IGJlIG5lZWRlZCBpZgorICogdGhlIGRyaXZlciBzaGFyZXMgYSBzaW5nbGUgRE1BIGNoYW5uZWwgZm9yIG11bHRpcGxlIGRtYSB0cmlnZ2Vycy4KKyAqLworaW50IG9tYXBfc2V0X2RtYV9jYWxsYmFjayhpbnQgbGNoLAorCQkJICB2b2lkICgqIGNhbGxiYWNrKShpbnQgbGNoLCB1MTYgY2hfc3RhdHVzLCB2b2lkICpkYXRhKSwKKwkJCSAgdm9pZCAqZGF0YSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJaWYgKGxjaCA8IDApCisJCXJldHVybiAtRU5PREVWOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKKwlpZiAoZG1hX2NoYW5bbGNoXS5kZXZfaWQgPT0gLTEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJETUEgY2FsbGJhY2sgZm9yIG5vdCBzZXQgZm9yIGZyZWUgY2hhbm5lbFxuIik7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRtYV9jaGFuW2xjaF0uY2FsbGJhY2sgPSBjYWxsYmFjazsKKwlkbWFfY2hhbltsY2hdLmRhdGEgPSBkYXRhOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRtYV9jaGFuX2xvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCisvKgogICogUmV0dXJucyBjdXJyZW50IHBoeXNpY2FsIHNvdXJjZSBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gRE1BIGNoYW5uZWwuCiAgKiBJZiB0aGUgY2hhbm5lbCBpcyBydW5uaW5nIHRoZSBjYWxsZXIgbXVzdCBkaXNhYmxlIGludGVycnVwdHMgcHJpb3IgY2FsbGluZwogICogdGhpcyBmdW5jdGlvbiBhbmQgcHJvY2VzcyB0aGUgcmV0dXJuZWQgdmFsdWUgYmVmb3JlIHJlLWVuYWJsaW5nIGludGVycnVwdCB0bwpAQCAtMTMzOSw2ICsxMzgyLDE0IEBACiAJCQlkbWFfY2hhbl9jb3VudCA9IDE2OwogCQl9IGVsc2UKIAkJCWRtYV9jaGFuX2NvdW50ID0gOTsKKwkJaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7CisJCQl1MTYgdzsKKworCQkJLyogdGhpcyB3b3VsZCBwcmV2ZW50IE9NQVAgc2xlZXAgKi8KKwkJCXcgPSBvbWFwX3JlYWR3KE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisJCQl3ICY9IH4oMSA8PCA4KTsKKwkJCW9tYXBfd3JpdGV3KHcsIE9NQVAxNjEwX0RNQV9MQ0RfQ1RSTCk7CisJCX0KIAl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CiAJCXU4IHJldmlzaW9uID0gb21hcF9yZWFkYihPTUFQX0RNQTRfUkVWSVNJT04pOwogCQlwcmludGsoS0VSTl9JTkZPICJPTUFQIERNQSBoYXJkd2FyZSByZXZpc2lvbiAlZC4lZFxuIiwKQEAgLTE0MTQsMTEgKzE0NjUsMTMgQEAKIEVYUE9SVF9TWU1CT0wob21hcF9mcmVlX2RtYSk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc3RhcnRfZG1hKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zdG9wX2RtYSk7CitFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9jYWxsYmFjayk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfZW5hYmxlX2RtYV9pcnEpOwogRVhQT1JUX1NZTUJPTChvbWFwX2Rpc2FibGVfZG1hX2lycSk7CiAKIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3RyYW5zZmVyX3BhcmFtcyk7CiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9jb2xvcl9tb2RlKTsKK0VYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3dyaXRlX21vZGUpOwogCiBFWFBPUlRfU1lNQk9MKG9tYXBfc2V0X2RtYV9zcmNfcGFyYW1zKTsKIEVYUE9SVF9TWU1CT0wob21hcF9zZXRfZG1hX3NyY19pbmRleCk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL2RtdGltZXIuYwppbmRleCA1MDUyNDQzLi5iY2JiOGQ3IDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvZG10aW1lci5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9kbXRpbWVyLmMKQEAgLTc1LDEwICs3NSwxNCBAQAogI2VuZGlmCiAJdm9pZCBfX2lvbWVtICppb19iYXNlOwogCXVuc2lnbmVkIHJlc2VydmVkOjE7CisJdW5zaWduZWQgZW5hYmxlZDoxOwogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX09NQVAxCiAKKyNkZWZpbmUgb21hcF9kbV9jbGtfZW5hYmxlKHgpCisjZGVmaW5lIG9tYXBfZG1fY2xrX2Rpc2FibGUoeCkKKwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGRtX3RpbWVyc1tdID0gewogCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjE0MDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSMSB9LAogCXsgLnBoeXNfYmFzZSA9IDB4ZmZmYjFjMDAsIC5pcnEgPSBJTlRfMTYxMF9HUFRJTUVSMiB9LApAQCAtOTIsNiArOTYsOSBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX09NQVAyKQogCisjZGVmaW5lIG9tYXBfZG1fY2xrX2VuYWJsZSh4KSBjbGtfZW5hYmxlKHgpCisjZGVmaW5lIG9tYXBfZG1fY2xrX2Rpc2FibGUoeCkgY2xrX2Rpc2FibGUoeCkKKwogc3RhdGljIHN0cnVjdCBvbWFwX2RtX3RpbWVyIGRtX3RpbWVyc1tdID0gewogCXsgLnBoeXNfYmFzZSA9IDB4NDgwMjgwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMSB9LAogCXsgLnBoeXNfYmFzZSA9IDB4NDgwMmEwMDAsIC5pcnEgPSBJTlRfMjRYWF9HUFRJTUVSMiB9LApAQCAtMTU0LDI0ICsxNjEsMjggQEAKIHsKIAl1MzIgbDsKIAotCWlmICh0aW1lciAhPSAmZG1fdGltZXJzWzBdKSB7CisJaWYgKCFjcHVfY2xhc3NfaXNfb21hcDIoKSB8fCB0aW1lciAhPSAmZG1fdGltZXJzWzBdKSB7CiAJCW9tYXBfZG1fdGltZXJfd3JpdGVfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0lGX0NUUkxfUkVHLCAweDA2KTsKIAkJb21hcF9kbV90aW1lcl93YWl0X2Zvcl9yZXNldCh0aW1lcik7CiAJfQotCW9tYXBfZG1fdGltZXJfc2V0X3NvdXJjZSh0aW1lciwgT01BUF9USU1FUl9TUkNfU1lTX0NMSyk7CisJb21hcF9kbV90aW1lcl9zZXRfc291cmNlKHRpbWVyLCBPTUFQX1RJTUVSX1NSQ18zMl9LSFopOwogCiAJLyogU2V0IHRvIHNtYXJ0LWlkbGUgbW9kZSAqLwogCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX09DUF9DRkdfUkVHKTsKIAlsIHw9IDB4MDIgPDwgMzsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDIoKSAmJiB0aW1lciA9PSAmZG1fdGltZXJzWzBdKSB7CisJCS8qIEVuYWJsZSB3YWtlLXVwIG9ubHkgZm9yIEdQVDEgb24gT01BUDIgQ1BVcyovCisJCWwgfD0gMSA8PCAyOworCQkvKiBOb24tcG9zdGVkIG1vZGUgKi8KKwkJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfSUZfQ1RSTF9SRUcsIDApOworCX0KIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9PQ1BfQ0ZHX1JFRywgbCk7CiB9CiAKIHN0YXRpYyB2b2lkIG9tYXBfZG1fdGltZXJfcHJlcGFyZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7Ci0jaWZkZWYgQ09ORklHX0FSQ0hfT01BUDIKLQljbGtfZW5hYmxlKHRpbWVyLT5pY2xrKTsKLQljbGtfZW5hYmxlKHRpbWVyLT5mY2xrKTsKLSNlbmRpZgorCW9tYXBfZG1fdGltZXJfZW5hYmxlKHRpbWVyKTsKIAlvbWFwX2RtX3RpbWVyX3Jlc2V0KHRpbWVyKTsKIH0KIApAQCAtMjIzLDE1ICsyMzQsMzYgQEAKIAogdm9pZCBvbWFwX2RtX3RpbWVyX2ZyZWUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogeworCW9tYXBfZG1fdGltZXJfZW5hYmxlKHRpbWVyKTsKIAlvbWFwX2RtX3RpbWVyX3Jlc2V0KHRpbWVyKTsKLSNpZmRlZiBDT05GSUdfQVJDSF9PTUFQMgotCWNsa19kaXNhYmxlKHRpbWVyLT5pY2xrKTsKLQljbGtfZGlzYWJsZSh0aW1lci0+ZmNsayk7Ci0jZW5kaWYKKwlvbWFwX2RtX3RpbWVyX2Rpc2FibGUodGltZXIpOworCiAJV0FSTl9PTighdGltZXItPnJlc2VydmVkKTsKIAl0aW1lci0+cmVzZXJ2ZWQgPSAwOwogfQogCit2b2lkIG9tYXBfZG1fdGltZXJfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKK3sKKwlpZiAodGltZXItPmVuYWJsZWQpCisJCXJldHVybjsKKworCW9tYXBfZG1fY2xrX2VuYWJsZSh0aW1lci0+ZmNsayk7CisJb21hcF9kbV9jbGtfZW5hYmxlKHRpbWVyLT5pY2xrKTsKKworCXRpbWVyLT5lbmFibGVkID0gMTsKK30KKwordm9pZCBvbWFwX2RtX3RpbWVyX2Rpc2FibGUoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQoreworCWlmICghdGltZXItPmVuYWJsZWQpCisJCXJldHVybjsKKworCW9tYXBfZG1fY2xrX2Rpc2FibGUodGltZXItPmljbGspOworCW9tYXBfZG1fY2xrX2Rpc2FibGUodGltZXItPmZjbGspOworCisJdGltZXItPmVuYWJsZWQgPSAwOworfQorCiBpbnQgb21hcF9kbV90aW1lcl9nZXRfaXJxKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKIAlyZXR1cm4gdGltZXItPmlycTsKQEAgLTI3Niw3ICszMDgsNyBAQAogCiBzdHJ1Y3QgY2xrICpvbWFwX2RtX3RpbWVyX2dldF9mY2xrKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcikKIHsKLSAgICAgICAgcmV0dXJuIHRpbWVyLT5mY2xrOworCXJldHVybiB0aW1lci0+ZmNsazsKIH0KIAogX191MzIgb21hcF9kbV90aW1lcl9tb2RpZnlfaWRsZWN0X21hc2soX191MzIgaW5wdXRtYXNrKQpAQCAtNDA2LDExICs0MzgsMTYgQEAKIAkJCQkgIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKIAlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9JTlRfRU5fUkVHLCB2YWx1ZSk7CisJb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfV0FLRVVQX0VOX1JFRywgdmFsdWUpOwogfQogCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX3N0YXR1cyhzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpCiB7Ci0JcmV0dXJuIG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfU1RBVF9SRUcpOworCXVuc2lnbmVkIGludCBsOworCisJbCA9IG9tYXBfZG1fdGltZXJfcmVhZF9yZWcodGltZXIsIE9NQVBfVElNRVJfU1RBVF9SRUcpOworCisJcmV0dXJuIGw7CiB9CiAKIHZvaWQgb21hcF9kbV90aW1lcl93cml0ZV9zdGF0dXMoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyLCB1bnNpZ25lZCBpbnQgdmFsdWUpCkBAIC00MjAsMTIgKzQ1NywxNiBAQAogCiB1bnNpZ25lZCBpbnQgb21hcF9kbV90aW1lcl9yZWFkX2NvdW50ZXIoc3RydWN0IG9tYXBfZG1fdGltZXIgKnRpbWVyKQogewotCXJldHVybiBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NPVU5URVJfUkVHKTsKKwl1bnNpZ25lZCBpbnQgbDsKKworCWwgPSBvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NPVU5URVJfUkVHKTsKKworCXJldHVybiBsOwogfQogCiB2b2lkIG9tYXBfZG1fdGltZXJfd3JpdGVfY291bnRlcihzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIsIHVuc2lnbmVkIGludCB2YWx1ZSkKIHsKLQlyZXR1cm4gb21hcF9kbV90aW1lcl93cml0ZV9yZWcodGltZXIsIE9NQVBfVElNRVJfQ09VTlRFUl9SRUcsIHZhbHVlKTsKKwlvbWFwX2RtX3RpbWVyX3dyaXRlX3JlZyh0aW1lciwgT01BUF9USU1FUl9DT1VOVEVSX1JFRywgdmFsdWUpOwogfQogCiBpbnQgb21hcF9kbV90aW1lcnNfYWN0aXZlKHZvaWQpCkBAIC00MzYsOSArNDc3LDE0IEBACiAJCXN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcjsKIAogCQl0aW1lciA9ICZkbV90aW1lcnNbaV07CisKKwkJaWYgKCF0aW1lci0+ZW5hYmxlZCkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChvbWFwX2RtX3RpbWVyX3JlYWRfcmVnKHRpbWVyLCBPTUFQX1RJTUVSX0NUUkxfUkVHKSAmCi0JCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpCisJCSAgICBPTUFQX1RJTUVSX0NUUkxfU1QpIHsKIAkJCXJldHVybiAxOworCQl9CiAJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYyBiL2FyY2gvYXJtL3BsYXQtb21hcC9ncGlvLmMKaW5kZXggY2Q3Zjk3My4uZjU1Zjk5YSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL2dwaW8uYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvZ3Bpby5jCkBAIC05NCw2ICs5NCw4IEBACiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fU1lTQ09ORklHCQkweDAwMTAKICNkZWZpbmUgT01BUDI0WFhfR1BJT19TWVNTVEFUVVMJCTB4MDAxNAogI2RlZmluZSBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzEJMHgwMDE4CisjZGVmaW5lIE9NQVAyNFhYX0dQSU9fSVJRU1RBVFVTMgkweDAwMjgKKyNkZWZpbmUgT01BUDI0WFhfR1BJT19JUlFFTkFCTEUyCTB4MDAyYwogI2RlZmluZSBPTUFQMjRYWF9HUElPX0lSUUVOQUJMRTEJMHgwMDFjCiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ1RSTAkJMHgwMDMwCiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fT0UJCTB4MDAzNApAQCAtMTEwLDggKzExMiw2IEBACiAjZGVmaW5lIE9NQVAyNFhYX0dQSU9fQ0xFQVJEQVRBT1VUCTB4MDA5MAogI2RlZmluZSBPTUFQMjRYWF9HUElPX1NFVERBVEFPVVQJMHgwMDk0CiAKLSNkZWZpbmUgT01BUF9NUFVJT19NQVNLCQkofk9NQVBfTUFYX0dQSU9fTElORVMgJiAweGZmKQotCiBzdHJ1Y3QgZ3Bpb19iYW5rIHsKIAl2b2lkIF9faW9tZW0gKmJhc2U7CiAJdTE2IGlycTsKQEAgLTIxNiwxMSArMjE2LDEzIEBACiB7CiAJaWYgKGdwaW8gPCAwKQogCQlyZXR1cm4gLTE7CisjaWZuZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCiAJaWYgKE9NQVBfR1BJT19JU19NUFVJTyhncGlvKSkgewotCQlpZiAoKGdwaW8gJiBPTUFQX01QVUlPX01BU0spID4gMTYpCisJCWlmIChncGlvID49IE9NQVBfTUFYX0dQSU9fTElORVMgKyAxNikKIAkJCXJldHVybiAtMTsKIAkJcmV0dXJuIDA7CiAJfQorI2VuZGlmCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIAlpZiAoY3B1X2lzX29tYXAxNXh4KCkgJiYgZ3BpbyA8IDE2KQogCQlyZXR1cm4gMDsKQEAgLTUyOSw2ICs1MzEsMTAgQEAKIAkJcmV0dXJuOwogCX0KIAlfX3Jhd193cml0ZWwoZ3Bpb19tYXNrLCByZWcpOworCisJLyogV29ya2Fyb3VuZCBmb3IgY2xlYXJpbmcgRFNQIEdQSU8gaW50ZXJydXB0cyB0byBhbGxvdyByZXRlbnRpb24gKi8KKwlpZiAoY3B1X2lzX29tYXAyNDIwKCkpCisJCV9fcmF3X3dyaXRlbChncGlvX21hc2ssIGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0lSUVNUQVRVUzIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgX2NsZWFyX2dwaW9faXJxc3RhdHVzKHN0cnVjdCBncGlvX2JhbmsgKmJhbmssIGludCBncGlvKQpAQCAtNjYyLDYgKzY2OCwxNCBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX3Jlc2V0X2dwaW8oc3RydWN0IGdwaW9fYmFuayAqYmFuaywgaW50IGdwaW8pCit7CisJX3NldF9ncGlvX2RpcmVjdGlvbihiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgMSk7CisJX3NldF9ncGlvX2lycWVuYWJsZShiYW5rLCBncGlvLCAwKTsKKwlfY2xlYXJfZ3Bpb19pcnFzdGF0dXMoYmFuaywgZ3Bpbyk7CisJX3NldF9ncGlvX3RyaWdnZXJpbmcoYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIElSUVRfTk9FREdFKTsKK30KKwogLyogVXNlIGRpc2FibGVfaXJxX3dha2UoKSBhbmQgZW5hYmxlX2lycV93YWtlKCkgZnVuY3Rpb25zIGZyb20gZHJpdmVycyAqLwogc3RhdGljIGludCBncGlvX3dha2VfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBlbmFibGUpCiB7CkBAIC02NzIsOSArNjg2LDcgQEAKIAlpZiAoY2hlY2tfZ3BpbyhncGlvKSA8IDApCiAJCXJldHVybiAtRU5PREVWOwogCWJhbmsgPSBnZXRfZ3Bpb19iYW5rKGdwaW8pOwotCXNwaW5fbG9jaygmYmFuay0+bG9jayk7CiAJcmV0dmFsID0gX3NldF9ncGlvX3dha2V1cChiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgZW5hYmxlKTsKLQlzcGluX3VubG9jaygmYmFuay0+bG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNjk2LDcgKzcwOCw5IEBACiAJfQogCWJhbmstPnJlc2VydmVkX21hcCB8PSAoMSA8PCBnZXRfZ3Bpb19pbmRleChncGlvKSk7CiAKLQkvKiBTZXQgdHJpZ2dlciB0byBub25lLiBZb3UgbmVlZCB0byBlbmFibGUgdGhlIHRyaWdnZXIgYWZ0ZXIgcmVxdWVzdF9pcnEgKi8KKwkvKiBTZXQgdHJpZ2dlciB0byBub25lLiBZb3UgbmVlZCB0byBlbmFibGUgdGhlIGRlc2lyZWQgdHJpZ2dlciB3aXRoCisJICogcmVxdWVzdF9pcnEoKSBvciBzZXRfaXJxX3R5cGUoKS4KKwkgKi8KIAlfc2V0X2dwaW9fdHJpZ2dlcmluZyhiYW5rLCBnZXRfZ3Bpb19pbmRleChncGlvKSwgSVJRVF9OT0VER0UpOwogCiAjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKQEAgLTc1Niw5ICs3NzAsNyBAQAogCX0KICNlbmRpZgogCWJhbmstPnJlc2VydmVkX21hcCAmPSB+KDEgPDwgZ2V0X2dwaW9faW5kZXgoZ3BpbykpOwotCV9zZXRfZ3Bpb19kaXJlY3Rpb24oYmFuaywgZ2V0X2dwaW9faW5kZXgoZ3BpbyksIDEpOwotCV9zZXRfZ3Bpb19pcnFlbmFibGUoYmFuaywgZ3BpbywgMCk7Ci0JX2NsZWFyX2dwaW9faXJxc3RhdHVzKGJhbmssIGdwaW8pOworCV9yZXNldF9ncGlvKGJhbmssIGdwaW8pOwogCXNwaW5fdW5sb2NrKCZiYW5rLT5sb2NrKTsKIH0KIApAQCAtODk4LDYgKzkxMCwxNCBAQAogCiB9CiAKK3N0YXRpYyB2b2lkIGdwaW9faXJxX3NodXRkb3duKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGdwaW8gPSBpcnEgLSBJSF9HUElPX0JBU0U7CisJc3RydWN0IGdwaW9fYmFuayAqYmFuayA9IGdldF9ncGlvX2JhbmsoZ3Bpbyk7CisKKwlfcmVzZXRfZ3BpbyhiYW5rLCBncGlvKTsKK30KKwogc3RhdGljIHZvaWQgZ3Bpb19hY2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJdW5zaWduZWQgaW50IGdwaW8gPSBpcnEgLSBJSF9HUElPX0JBU0U7CkBAIC05NDYsNiArOTY2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBncGlvX2lycV9jaGlwID0gewogCS5uYW1lCQk9ICJHUElPIiwKKwkuc2h1dGRvd24JPSBncGlvX2lycV9zaHV0ZG93biwKIAkuYWNrCQk9IGdwaW9fYWNrX2lycSwKIAkubWFzawkJPSBncGlvX21hc2tfaXJxLAogCS51bm1hc2sJCT0gZ3Bpb191bm1hc2tfaXJxLApAQCAtOTg1LDcgKzEwMDYsNyBAQAogCQllbHNlCiAJCQljbGtfZW5hYmxlKGdwaW9faWNrKTsKIAkJZ3Bpb19mY2sgPSBjbGtfZ2V0KE5VTEwsICJncGlvc19mY2siKTsKLQkJaWYgKElTX0VSUihncGlvX2ljaykpCisJCWlmIChJU19FUlIoZ3Bpb19mY2spKQogCQkJcHJpbnRrKCJDb3VsZCBub3QgZ2V0IGdwaW9zX2Zja1xuIik7CiAJCWVsc2UKIAkJCWNsa19lbmFibGUoZ3Bpb19mY2spOwpAQCAtMTE0NCw4ICsxMTY1LDggQEAKIAkJCXdha2Vfc2V0ID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fU0VUX1dBS0VVUEVOQTsKIAkJCWJyZWFrOwogCQljYXNlIE1FVEhPRF9HUElPXzI0WFg6Ci0JCQl3YWtlX2NsZWFyID0gYmFuay0+YmFzZSArIE9NQVAxNjEwX0dQSU9fQ0xFQVJfV0FLRVVQRU5BOwotCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDE2MTBfR1BJT19TRVRfV0FLRVVQRU5BOworCQkJd2FrZV9jbGVhciA9IGJhbmstPmJhc2UgKyBPTUFQMjRYWF9HUElPX0NMRUFSV0tVRU5BOworCQkJd2FrZV9zZXQgPSBiYW5rLT5iYXNlICsgT01BUDI0WFhfR1BJT19TRVRXS1VFTkE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL21jYnNwLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwppbmRleCAxOTZhYWMzLi5hZGU5YTBmIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYworKysgYi9hcmNoL2FybS9wbGF0LW9tYXAvbWNic3AuYwpAQCAtNzUsOCArNzUsNiBAQAogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwMV9mY2sgPSAwOwogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwMl9pY2sgPSAwOwogc3RhdGljIHN0cnVjdCBjbGsgKm1jYnNwMl9mY2sgPSAwOwotc3RhdGljIHN0cnVjdCBjbGsgKnN5c19jayA9IDA7Ci1zdGF0aWMgc3RydWN0IGNsayAqc3lzX2Nsa291dCA9IDA7CiAjZW5kaWYKIAogc3RhdGljIHZvaWQgb21hcF9tY2JzcF9kdW1wX3JlZyh1OCBpZCkKQEAgLTIzMiw3ICsyMzAsNiBAQAogCW9tYXBfY2ZnX3JlZyhXMTVfMjRYWF9NQ0JTUDJfRFIpOwogCW9tYXBfY2ZnX3JlZyhWMTVfMjRYWF9NQ0JTUDJfRFgpOwogCW9tYXBfY2ZnX3JlZyhWMTRfMjRYWF9HUElPMTE3KTsKLQlvbWFwX2NmZ19yZWcoVzE0XzI0WFhfU1lTX0NMS09VVCk7CiB9CiAjZW5kaWYKIApAQCAtOTg0LDEzICs5ODEsNyBAQAogCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgewogCQltY2JzcF9pbmZvID0gbWNic3BfMjR4eDsKIAkJbWNic3BfY291bnQgPSBBUlJBWV9TSVpFKG1jYnNwXzI0eHgpOwotCi0JCS8qIFJFVklTSVQ6IHdoZXJlJ3MgdGhlIHJpZ2h0IHBsYWNlPyAqLwogCQlvbWFwMl9tY2JzcDJfbXV4X3NldHVwKCk7Ci0JCXN5c19jayA9IGNsa19nZXQoMCwgInN5c19jayIpOwotCQlzeXNfY2xrb3V0ID0gY2xrX2dldCgwLCAic3lzX2Nsa291dCIpOwotCQljbGtfc2V0X3BhcmVudChzeXNfY2xrb3V0LCBzeXNfY2spOwotCQljbGtfZW5hYmxlKHN5c19jbGtvdXQpOwogCX0KICNlbmRpZgogCWZvciAoaSA9IDA7IGkgPCBPTUFQX01BWF9NQ0JTUF9DT1VOVCA7IGkrKykgewpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDRiNDEwMi4uMDAwMDAwMAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvcG0uYworKysgL2Rldi9udWxsCkBAIC0xLDY3MCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9hcm0vcGxhdC1vbWFwL3BtLmMKLSAqCi0gKiBPTUFQIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKLSAqCi0gKiBPcmlnaW5hbCBjb2RlIGZvciB0aGUgU0ExMXgwOgotICogQ29weXJpZ2h0IChjKSAyMDAxIENsaWZmIEJyYWtlIDxjYnJha2VAYWNjZWxlbnQuY29tPgotICoKLSAqIE1vZGlmaWVkIGZvciB0aGUgUFhBMjUwIGJ5IE5pY29sYXMgUGl0cmU6Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDIgTW9udGEgVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBNb2RpZmllZCBmb3IgdGhlIE9NQVAxNTEwIGJ5IERhdmlkIFNpbmdsZXRvbjoKLSAqIENvcHlyaWdodCAoYykgMjAwMiBNb250YSBWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICoKLSAqIENsZWFudXAgMjAwNCBmb3IgT01BUDE1MTAvMTYxMCBieSBEaXJrIEJlaG1lIDxkaXJrLmJlaG1lQGRlLmJvc2NoLmNvbT4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAotICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4KLSAqIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKLSAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvcG0uaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL3RpbWUuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNoLXR5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL3RjLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvcG0uaD4KLSNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KLSNpbmNsdWRlIDxhc20vYXJjaC90cHM2NTAxMC5oPgotI2luY2x1ZGUgPGFzbS9hcmNoL2RzcF9jb21tb24uaD4KLQotI2luY2x1ZGUgPGFzbS9hcmNoL2Nsb2NrLmg+Ci0jaW5jbHVkZSA8YXNtL2FyY2gvc3JhbS5oPgotCi1zdGF0aWMgdW5zaWduZWQgaW50IGFybV9zbGVlcF9zYXZlW0FSTV9TTEVFUF9TQVZFX1NJWkVdOwotc3RhdGljIHVuc2lnbmVkIHNob3J0IHVscGRfc2xlZXBfc2F2ZVtVTFBEX1NMRUVQX1NBVkVfU0laRV07Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1wdWk3MzBfc2xlZXBfc2F2ZVtNUFVJNzMwX1NMRUVQX1NBVkVfU0laRV07Ci1zdGF0aWMgdW5zaWduZWQgaW50IG1wdWkxNTEwX3NsZWVwX3NhdmVbTVBVSTE1MTBfU0xFRVBfU0FWRV9TSVpFXTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgbXB1aTE2MTBfc2xlZXBfc2F2ZVtNUFVJMTYxMF9TTEVFUF9TQVZFX1NJWkVdOwotCi1zdGF0aWMgdm9pZCAoKm9tYXBfc3JhbV9pZGxlKSh2b2lkKSA9IE5VTEw7Ci1zdGF0aWMgdm9pZCAoKm9tYXBfc3JhbV9zdXNwZW5kKSh1bnNpZ25lZCBsb25nIHIwLCB1bnNpZ25lZCBsb25nIHIxKSA9IE5VTEw7Ci0KLS8qCi0gKiBMZXQncyBwb3dlciBkb3duIG9uIGlkbGUsIGJ1dCBvbmx5IGlmIHdlIGFyZSByZWFsbHkKLSAqIGlkbGUsIGJlY2F1c2Ugb25jZSB3ZSBzdGFydCBkb3duIHRoZSBwYXRoIG9mCi0gKiBnb2luZyBpZGxlIHdlIGNvbnRpbnVlIHRvIGRvIGlkbGUgZXZlbiBpZiB3ZSBnZXQKLSAqIGEgY2xvY2sgdGljayBpbnRlcnJ1cHQgLiAuCi0gKi8KLXZvaWQgb21hcF9wbV9pZGxlKHZvaWQpCi17Ci0JdW5zaWduZWQgaW50IG1hc2szMiA9IDA7Ci0KLQkvKgotCSAqIElmIHRoZSBEU1AgaXMgYmVpbmcgdXNlZCBsZXQncyBqdXN0IGlkbGUgdGhlIENQVSwgdGhlIG92ZXJoZWFkCi0JICogdG8gd2FrZSB1cCBmcm9tIEJpZyBTbGVlcCBpcyBiaWcsIG1pbGxpc2Vjb25kcyB2ZXJzdXMgbWljcm8KLQkgKiBzZWNvbmRzIGZvciB3YWl0IGZvciBpbnRlcnJ1cHQuCi0JICovCi0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxvY2FsX2ZpcV9kaXNhYmxlKCk7Ci0JaWYgKG5lZWRfcmVzY2hlZCgpKSB7Ci0JCWxvY2FsX2ZpcV9lbmFibGUoKTsKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlyZXR1cm47Ci0JfQotCW1hc2szMiA9IG9tYXBfcmVhZGwoQVJNX1NZU1NUKTsKLQotCS8qCi0JICogUHJldmVudCB0aGUgVUxQRCBmcm9tIGVudGVyaW5nIGxvdyBwb3dlciBzdGF0ZSBieSBzZXR0aW5nCi0JICogUE9XRVJfQ1RSTF9SRUc6NCA9IDAKLQkgKi8KLQlvbWFwX3dyaXRldyhvbWFwX3JlYWR3KFVMUERfUE9XRVJfQ1RSTCkgJgotCQkgICAgflVMUERfREVFUF9TTEVFUF9UUkFOU0lUSU9OX0VOLCBVTFBEX1BPV0VSX0NUUkwpOwotCi0JLyoKLQkgKiBTaW5jZSBhbiBpbnRlcnJ1cHQgbWF5IHNldCB1cCBhIHRpbWVyLCB3ZSBkb24ndCB3YW50IHRvCi0JICogcmVwcm9ncmFtIHRoZSBoYXJkd2FyZSB0aW1lciB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4KLQkgKiBSZS1lbmFibGUgaW50ZXJydXB0cyBvbmx5IGFmdGVyIHJldHVybmluZyBmcm9tIGlkbGUuCi0JICovCi0JdGltZXJfZHluX3JlcHJvZ3JhbSgpOwotCi0JaWYgKChtYXNrMzIgJiBEU1BfSURMRSkgPT0gMCkgewotCQlfX2FzbV9fIHZvbGF0aWxlICgibWNyCXAxNSwgMCwgcjAsIGM3LCBjMCwgNCIpOwotCX0gZWxzZQotCQlvbWFwX3NyYW1faWRsZSgpOwotCi0JbG9jYWxfZmlxX2VuYWJsZSgpOwotCWxvY2FsX2lycV9lbmFibGUoKTsKLX0KLQotLyoKLSAqIENvbmZpZ3VyYXRpb24gb2YgdGhlIHdha2V1cCBldmVudCBpcyBib2FyZCBzcGVjaWZpYy4gRm9yIHRoZQotICogbW9tZW50IHdlIHB1dCBpdCBpbnRvIHRoaXMgaGVscGVyIGZ1bmN0aW9uLiBMYXRlciBpdCBtYXkgbW92ZQotICogdG8gYm9hcmQgc3BlY2lmaWMgZmlsZXMuCi0gKi8KLXN0YXRpYyB2b2lkIG9tYXBfcG1fd2FrZXVwX3NldHVwKHZvaWQpCi17Ci0JdTMyIGxldmVsMV93YWtlID0gMDsKLQl1MzIgbGV2ZWwyX3dha2UgPSBPTUFQX0lSUV9CSVQoSU5UX1VBUlQyKTsKLQotCS8qCi0JICogVHVybiBvZmYgYWxsIGludGVycnVwdHMgZXhjZXB0IEdQSU8gYmFuayAxLCBMMS0ybmQgbGV2ZWwgY2FzY2FkZSwKLQkgKiBhbmQgdGhlIEwyIHdha2V1cCBpbnRlcnJ1cHRzOiBrZXlwYWQgYW5kIFVBUlQyLiBOb3RlIHRoYXQgdGhlCi0JICogZHJpdmVycyBtdXN0IHN0aWxsIHNlcGFyYXRlbHkgY2FsbCBvbWFwX3NldF9ncGlvX3dha2V1cCgpIHRvCi0JICogd2FrZSB1cCB0byBhIEdQSU8gaW50ZXJydXB0LgotCSAqLwotCWlmIChjcHVfaXNfb21hcDczMCgpKQotCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfNzMwX0dQSU9fQkFOSzEpIHwKLQkJCU9NQVBfSVJRX0JJVChJTlRfNzMwX0lIMl9JUlEpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKQotCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAotCQkJT01BUF9JUlFfQklUKElOVF8xNTEwX0lIMl9JUlEpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlsZXZlbDFfd2FrZSA9IE9NQVBfSVJRX0JJVChJTlRfR1BJT19CQU5LMSkgfAotCQkJT01BUF9JUlFfQklUKElOVF8xNjEwX0lIMl9JUlEpOwotCi0Jb21hcF93cml0ZWwofmxldmVsMV93YWtlLCBPTUFQX0lIMV9NSVIpOwotCi0JaWYgKGNwdV9pc19vbWFwNzMwKCkpIHsKLQkJb21hcF93cml0ZWwofmxldmVsMl93YWtlLCBPTUFQX0lIMl8wX01JUik7Ci0JCW9tYXBfd3JpdGVsKH4oT01BUF9JUlFfQklUKElOVF83MzBfV0FLRV9VUF9SRVEpIHwgT01BUF9JUlFfQklUKElOVF83MzBfTVBVSU9fS0VZUEFEKSksIE9NQVBfSUgyXzFfTUlSKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCWxldmVsMl93YWtlIHw9IE9NQVBfSVJRX0JJVChJTlRfS0VZQk9BUkQpOwotCQlvbWFwX3dyaXRlbCh+bGV2ZWwyX3dha2UsICBPTUFQX0lIMl9NSVIpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpIHsKLQkJbGV2ZWwyX3dha2UgfD0gT01BUF9JUlFfQklUKElOVF9LRVlCT0FSRCk7Ci0JCW9tYXBfd3JpdGVsKH5sZXZlbDJfd2FrZSwgT01BUF9JSDJfMF9NSVIpOwotCi0JCS8qIElOVF8xNjEwX1dBS0VfVVBfUkVRIGlzIG5lZWRlZCBmb3IgR1BJTyB3YWtldXAuLi4gKi8KLQkJb21hcF93cml0ZWwofk9NQVBfSVJRX0JJVChJTlRfMTYxMF9XQUtFX1VQX1JFUSksIE9NQVBfSUgyXzFfTUlSKTsKLQkJb21hcF93cml0ZWwofjB4MCwgT01BUF9JSDJfMl9NSVIpOwotCQlvbWFwX3dyaXRlbCh+MHgwLCBPTUFQX0lIMl8zX01JUik7Ci0JfQotCi0JLyogIE5ldyBJUlEgYWdyZWVtZW50LCByZWNhbGN1bGF0ZSBpbiBjYXNjYWRlIG9yZGVyICovCi0Jb21hcF93cml0ZWwoMSwgT01BUF9JSDJfQ09OVFJPTCk7Ci0gCW9tYXBfd3JpdGVsKDEsIE9NQVBfSUgxX0NPTlRST0wpOwotfQotCi12b2lkIG9tYXBfcG1fc3VzcGVuZCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgYXJnMCA9IDAsIGFyZzEgPSAwOwotCi0JcHJpbnRrKCJQTTogT01BUCV4IGlzIHRyeWluZyB0byBlbnRlciBkZWVwIHNsZWVwLi4uXG4iLCBzeXN0ZW1fcmV2KTsKLQotCW9tYXBfc2VyaWFsX3dha2VfdHJpZ2dlcigxKTsKLQotCWlmIChtYWNoaW5lX2lzX29tYXBfb3NrKCkpIHsKLQkJLyogU3RvcCBMRUQxIChEOSkgYmxpbmsgKi8KLQkJdHBzNjUwMTBfc2V0X2xlZChMRUQxLCBPRkYpOwotCX0KLQotCW9tYXBfd3JpdGV3KDB4ZmZmZiwgVUxQRF9TT0ZUX0RJU0FCTEVfUkVRX1JFRyk7Ci0KLQkvKgotCSAqIFN0ZXAgMTogdHVybiBvZmYgaW50ZXJydXB0cyAoRklYTUU6IE5PVEU6IGFscmVhZHkgZGlzYWJsZWQpCi0JICovCi0KLQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCWxvY2FsX2ZpcV9kaXNhYmxlKCk7Ci0KLQkvKgotCSAqIFN0ZXAgMjogc2F2ZSByZWdpc3RlcnMKLQkgKgotCSAqIFRoZSBvbWFwIGlzIGEgc3RyYW5nZS9iZWF1dGlmdWwgZGV2aWNlLiBUaGUgY2FjaGVzLCBtZW1vcnkKLQkgKiBhbmQgcmVnaXN0ZXIgc3RhdGUgYXJlIHByZXNlcnZlZCBhY3Jvc3MgcG93ZXIgc2F2ZXMuCi0JICogV2UgaGF2ZSB0byBzYXZlIGFuZCByZXN0b3JlIHZlcnkgbGl0dGxlIHJlZ2lzdGVyIHN0YXRlIHRvCi0JICogaWRsZSB0aGUgb21hcC4KLSAgICAgICAgICoKLSAJICogU2F2ZSBpbnRlcnJ1cHQsIE1QVUksIEFSTSBhbmQgVVBMRCBjb250cm9sIHJlZ2lzdGVycy4KLQkgKi8KLQotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7Ci0JCU1QVUk3MzBfU0FWRShPTUFQX0lIMV9NSVIpOwotCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMF9NSVIpOwotCQlNUFVJNzMwX1NBVkUoT01BUF9JSDJfMV9NSVIpOwotCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKLQkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKLQkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOwotCQlNUFVJNzMwX1NBVkUoRU1JRlNfQ09ORklHKTsKLQkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7Ci0KLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCU1QVUkxNTEwX1NBVkUoT01BUF9JSDFfTUlSKTsKLQkJTVBVSTE1MTBfU0FWRShPTUFQX0lIMl9NSVIpOwotCQlNUFVJMTUxMF9TQVZFKE1QVUlfQ1RSTCk7Ci0JCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOwotCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOwotCQlNUFVJMTUxMF9TQVZFKEVNSUZTX0NPTkZJRyk7Ci0JCU1QVUkxNTEwX1NBVkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCU1QVUkxNjEwX1NBVkUoT01BUF9JSDFfTUlSKTsKLQkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8wX01JUik7Ci0JCU1QVUkxNjEwX1NBVkUoT01BUF9JSDJfMV9NSVIpOwotCQlNUFVJMTYxMF9TQVZFKE9NQVBfSUgyXzJfTUlSKTsKLQkJTVBVSTE2MTBfU0FWRShPTUFQX0lIMl8zX01JUik7Ci0JCU1QVUkxNjEwX1NBVkUoTVBVSV9DVFJMKTsKLQkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7Ci0JCU1QVUkxNjEwX1NBVkUoTVBVSV9EU1BfQVBJX0NPTkZJRyk7Ci0JCU1QVUkxNjEwX1NBVkUoRU1JRlNfQ09ORklHKTsKLQkJTVBVSTE2MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOwotCX0KLQotCUFSTV9TQVZFKEFSTV9DS0NUTCk7Ci0JQVJNX1NBVkUoQVJNX0lETEVDVDEpOwotCUFSTV9TQVZFKEFSTV9JRExFQ1QyKTsKLQlpZiAoIShjcHVfaXNfb21hcDE1MTAoKSkpCi0JCUFSTV9TQVZFKEFSTV9JRExFQ1QzKTsKLQlBUk1fU0FWRShBUk1fRVdVUENUKTsKLQlBUk1fU0FWRShBUk1fUlNUQ1QxKTsKLQlBUk1fU0FWRShBUk1fUlNUQ1QyKTsKLQlBUk1fU0FWRShBUk1fU1lTU1QpOwotCVVMUERfU0FWRShVTFBEX0NMT0NLX0NUUkwpOwotCVVMUERfU0FWRShVTFBEX1NUQVRVU19SRVEpOwotCi0JLyogKFN0ZXAgMyByZW1vdmVkIC0gd2Ugbm93IGFsbG93IGRlZXAgc2xlZXAgYnkgZGVmYXVsdCkgKi8KLQotCS8qCi0JICogU3RlcCA0OiBPTUFQIERTUCBTaHV0ZG93bgotCSAqLwotCi0KLQkvKgotCSAqIFN0ZXAgNTogV2FrZXVwIEV2ZW50IFNldHVwCi0JICovCi0KLQlvbWFwX3BtX3dha2V1cF9zZXR1cCgpOwotCi0JLyoKLQkgKiBTdGVwIDY6IEFSTSBhbmQgVHJhZmZpYyBjb250cm9sbGVyIHNodXRkb3duCi0JICovCi0KLQkvKiBkaXNhYmxlIEFSTSB3YXRjaGRvZyAqLwotCW9tYXBfd3JpdGVsKDB4MDBGNSwgT01BUF9XRFRfVElNRVJfTU9ERSk7Ci0Jb21hcF93cml0ZWwoMHgwMEEwLCBPTUFQX1dEVF9USU1FUl9NT0RFKTsKLQotCS8qCi0JICogU3RlcCA2YjogQVJNIGFuZCBUcmFmZmljIGNvbnRyb2xsZXIgc2h1dGRvd24KLQkgKgotCSAqIFN0ZXAgNiBjb250aW51ZXMgaGVyZS4gUHJlcGFyZSBqdW1wIHRvIHBvd2VyIG1hbmFnZW1lbnQKLQkgKiBhc3NlbWJseSBjb2RlIGluIGludGVybmFsIFNSQU0uCi0JICoKLQkgKiBTaW5jZSB0aGUgb21hcF9jcHVfc3VzcGVuZCByb3V0aW5lIGhhcyBiZWVuIGNvcGllZCB0bwotCSAqIFNSQU0sIHdlJ2xsIGRvIGFuIGluZGlyZWN0IHByb2NlZHVyZSBjYWxsIHRvIGl0IGFuZCBwYXNzIHRoZQotCSAqIGNvbnRlbnRzIG9mIGFybV9pZGxlY3QxIGFuZCBhcm1faWRsZWN0MiBzbyBpdCBjYW4gcmVzdG9yZQotCSAqIHRoZW0gd2hlbiBpdCB3YWtlcyB1cCBhbmQgaXQgd2lsbCByZXR1cm4uCi0JICovCi0KLQlhcmcwID0gYXJtX3NsZWVwX3NhdmVbQVJNX1NMRUVQX1NBVkVfQVJNX0lETEVDVDFdOwotCWFyZzEgPSBhcm1fc2xlZXBfc2F2ZVtBUk1fU0xFRVBfU0FWRV9BUk1fSURMRUNUMl07Ci0KLQkvKgotCSAqIFN0ZXAgNmM6IEFSTSBhbmQgVHJhZmZpYyBjb250cm9sbGVyIHNodXRkb3duCi0JICoKLQkgKiBKdW1wIHRvIGFzc2VtYmx5IGNvZGUuIFRoZSBwcm9jZXNzb3Igd2lsbCBzdGF5IHRoZXJlCi0gCSAqIHVudGlsIHdha2UgdXAuCi0JICovCi0gICAgICAgIG9tYXBfc3JhbV9zdXNwZW5kKGFyZzAsIGFyZzEpOwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUgaGVyZSwgcHJvY2Vzc29yIGlzIHdva2VuIHVwIQotCSAqLwotCi0JLyoKLQkgKiBSZXN0b3JlIEFSTSBzdGF0ZSwgZXhjZXB0IEFSTV9JRExFQ1QxLzIgd2hpY2ggb21hcF9jcHVfc3VzcGVuZCBkaWQKLQkgKi8KLQotCWlmICghKGNwdV9pc19vbWFwMTUxMCgpKSkKLQkJQVJNX1JFU1RPUkUoQVJNX0lETEVDVDMpOwotCUFSTV9SRVNUT1JFKEFSTV9DS0NUTCk7Ci0JQVJNX1JFU1RPUkUoQVJNX0VXVVBDVCk7Ci0JQVJNX1JFU1RPUkUoQVJNX1JTVENUMSk7Ci0JQVJNX1JFU1RPUkUoQVJNX1JTVENUMik7Ci0JQVJNX1JFU1RPUkUoQVJNX1NZU1NUKTsKLQlVTFBEX1JFU1RPUkUoVUxQRF9DTE9DS19DVFJMKTsKLQlVTFBEX1JFU1RPUkUoVUxQRF9TVEFUVVNfUkVRKTsKLQotCWlmIChjcHVfaXNfb21hcDczMCgpKSB7Ci0JCU1QVUk3MzBfUkVTVE9SRShFTUlGU19DT05GSUcpOwotCQlNUFVJNzMwX1JFU1RPUkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKLQkJTVBVSTczMF9SRVNUT1JFKE9NQVBfSUgxX01JUik7Ci0JCU1QVUk3MzBfUkVTVE9SRShPTUFQX0lIMl8wX01JUik7Ci0JCU1QVUk3MzBfUkVTVE9SRShPTUFQX0lIMl8xX01JUik7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE1MTAoKSkgewotCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfQ1RSTCk7Ci0JCU1QVUkxNTEwX1JFU1RPUkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOwotCQlNUFVJMTUxMF9SRVNUT1JFKE1QVUlfRFNQX0FQSV9DT05GSUcpOwotCQlNUFVJMTUxMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7Ci0JCU1QVUkxNTEwX1JFU1RPUkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKLQkJTVBVSTE1MTBfUkVTVE9SRShPTUFQX0lIMV9NSVIpOwotCQlNUFVJMTUxMF9SRVNUT1JFKE9NQVBfSUgyX01JUik7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQlNUFVJMTYxMF9SRVNUT1JFKE1QVUlfQ1RSTCk7Ci0JCU1QVUkxNjEwX1JFU1RPUkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOwotCQlNUFVJMTYxMF9SRVNUT1JFKE1QVUlfRFNQX0FQSV9DT05GSUcpOwotCQlNUFVJMTYxMF9SRVNUT1JFKEVNSUZTX0NPTkZJRyk7Ci0JCU1QVUkxNjEwX1JFU1RPUkUoRU1JRkZfU0RSQU1fQ09ORklHKTsKLQotCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgxX01JUik7Ci0JCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfMF9NSVIpOwotCQlNUFVJMTYxMF9SRVNUT1JFKE9NQVBfSUgyXzFfTUlSKTsKLQkJTVBVSTE2MTBfUkVTVE9SRShPTUFQX0lIMl8yX01JUik7Ci0JCU1QVUkxNjEwX1JFU1RPUkUoT01BUF9JSDJfM19NSVIpOwotCX0KLQotCW9tYXBfd3JpdGV3KDAsIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcpOwotCi0JLyoKLQkgKiBSZWVuYWJsZSBpbnRlcnJ1cHRzCi0JICovCi0KLQlsb2NhbF9pcnFfZW5hYmxlKCk7Ci0JbG9jYWxfZmlxX2VuYWJsZSgpOwotCi0Jb21hcF9zZXJpYWxfd2FrZV90cmlnZ2VyKDApOwotCi0JcHJpbnRrKCJQTTogT01BUCV4IGlzIHJlLXN0YXJ0aW5nIGZyb20gZGVlcCBzbGVlcC4uLlxuIiwgc3lzdGVtX3Jldik7Ci0KLQlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKSB7Ci0JCS8qIExldCBMRUQxIChEOSkgYmxpbmsgYWdhaW4gKi8KLQkJdHBzNjUwMTBfc2V0X2xlZChMRUQxLCBCTElOSyk7Ci0JfQotfQotCi0jaWYgZGVmaW5lZChERUJVRykgJiYgZGVmaW5lZChDT05GSUdfUFJPQ19GUykKLXN0YXRpYyBpbnQgZ19yZWFkX2NvbXBsZXRlZDsKLQotLyoKLSAqIFJlYWQgc3lzdGVtIFBNIHJlZ2lzdGVycyBmb3IgZGVidWdnaW5nCi0gKi8KLXN0YXRpYyBpbnQgb21hcF9wbV9yZWFkX3Byb2MoCi0JY2hhciAqcGFnZV9idWZmZXIsCi0JY2hhciAqKm15X2ZpcnN0X2J5dGUsCi0Jb2ZmX3QgdmlydHVhbF9zdGFydCwKLQlpbnQgbGVuZ3RoLAotCWludCAqZW9mLAotCXZvaWQgKmRhdGEpCi17Ci0JaW50IG15X2J1ZmZlcl9vZmZzZXQgPSAwOwotCWNoYXIgKiBjb25zdCBteV9iYXNlID0gcGFnZV9idWZmZXI7Ci0KLQlBUk1fU0FWRShBUk1fQ0tDVEwpOwotCUFSTV9TQVZFKEFSTV9JRExFQ1QxKTsKLQlBUk1fU0FWRShBUk1fSURMRUNUMik7Ci0JaWYgKCEoY3B1X2lzX29tYXAxNTEwKCkpKQotCQlBUk1fU0FWRShBUk1fSURMRUNUMyk7Ci0JQVJNX1NBVkUoQVJNX0VXVVBDVCk7Ci0JQVJNX1NBVkUoQVJNX1JTVENUMSk7Ci0JQVJNX1NBVkUoQVJNX1JTVENUMik7Ci0JQVJNX1NBVkUoQVJNX1NZU1NUKTsKLQotCVVMUERfU0FWRShVTFBEX0lUX1NUQVRVUyk7Ci0JVUxQRF9TQVZFKFVMUERfQ0xPQ0tfQ1RSTCk7Ci0JVUxQRF9TQVZFKFVMUERfU09GVF9SRVEpOwotCVVMUERfU0FWRShVTFBEX1NUQVRVU19SRVEpOwotCVVMUERfU0FWRShVTFBEX0RQTExfQ1RSTCk7Ci0JVUxQRF9TQVZFKFVMUERfUE9XRVJfQ1RSTCk7Ci0KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewotCQlNUFVJNzMwX1NBVkUoTVBVSV9DVFJMKTsKLQkJTVBVSTczMF9TQVZFKE1QVUlfRFNQX1NUQVRVUyk7Ci0JCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9CT09UX0NPTkZJRyk7Ci0JCU1QVUk3MzBfU0FWRShNUFVJX0RTUF9BUElfQ09ORklHKTsKLQkJTVBVSTczMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7Ci0JCU1QVUk3MzBfU0FWRShFTUlGU19DT05GSUcpOwotCX0gZWxzZSBpZiAoY3B1X2lzX29tYXAxNTEwKCkpIHsKLQkJTVBVSTE1MTBfU0FWRShNUFVJX0NUUkwpOwotCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX1NUQVRVUyk7Ci0JCU1QVUkxNTEwX1NBVkUoTVBVSV9EU1BfQk9PVF9DT05GSUcpOwotCQlNUFVJMTUxMF9TQVZFKE1QVUlfRFNQX0FQSV9DT05GSUcpOwotCQlNUFVJMTUxMF9TQVZFKEVNSUZGX1NEUkFNX0NPTkZJRyk7Ci0JCU1QVUkxNTEwX1NBVkUoRU1JRlNfQ09ORklHKTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKSB7Ci0JCU1QVUkxNjEwX1NBVkUoTVBVSV9DVFJMKTsKLQkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9TVEFUVVMpOwotCQlNUFVJMTYxMF9TQVZFKE1QVUlfRFNQX0JPT1RfQ09ORklHKTsKLQkJTVBVSTE2MTBfU0FWRShNUFVJX0RTUF9BUElfQ09ORklHKTsKLQkJTVBVSTE2MTBfU0FWRShFTUlGRl9TRFJBTV9DT05GSUcpOwotCQlNUFVJMTYxMF9TQVZFKEVNSUZTX0NPTkZJRyk7Ci0JfQotCi0JaWYgKHZpcnR1YWxfc3RhcnQgPT0gMCkgewotCQlnX3JlYWRfY29tcGxldGVkID0gMDsKLQotCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCi0JCSAgICJBUk1fQ0tDVExfUkVHOiAgICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fSURMRUNUMV9SRUc6ICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fSURMRUNUMl9SRUc6ICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fSURMRUNUM19SRUc6CSAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fRVdVUENUX1JFRzogICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fUlNUQ1QxX1JFRzogICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fUlNUQ1QyX1JFRzogICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJBUk1fU1lTU1RfUkVHOiAgICAgICAgICAgIDB4JS04eCAgICAgXG4iCi0JCSAgICJVTFBEX0lUX1NUQVRVU19SRUc6ICAgICAgIDB4JS00eCAgICAgXG4iCi0JCSAgICJVTFBEX0NMT0NLX0NUUkxfUkVHOiAgICAgIDB4JS00eCAgICAgXG4iCi0JCSAgICJVTFBEX1NPRlRfUkVRX1JFRzogICAgICAgIDB4JS00eCAgICAgXG4iCi0JCSAgICJVTFBEX0RQTExfQ1RSTF9SRUc6ICAgICAgIDB4JS00eCAgICAgXG4iCi0JCSAgICJVTFBEX1NUQVRVU19SRVFfUkVHOiAgICAgIDB4JS00eCAgICAgXG4iCi0JCSAgICJVTFBEX1BPV0VSX0NUUkxfUkVHOiAgICAgIDB4JS00eCAgICAgXG4iLAotCQkgICBBUk1fU0hPVyhBUk1fQ0tDVEwpLAotCQkgICBBUk1fU0hPVyhBUk1fSURMRUNUMSksCi0JCSAgIEFSTV9TSE9XKEFSTV9JRExFQ1QyKSwKLQkJICAgQVJNX1NIT1coQVJNX0lETEVDVDMpLAotCQkgICBBUk1fU0hPVyhBUk1fRVdVUENUKSwKLQkJICAgQVJNX1NIT1coQVJNX1JTVENUMSksCi0JCSAgIEFSTV9TSE9XKEFSTV9SU1RDVDIpLAotCQkgICBBUk1fU0hPVyhBUk1fU1lTU1QpLAotCQkgICBVTFBEX1NIT1coVUxQRF9JVF9TVEFUVVMpLAotCQkgICBVTFBEX1NIT1coVUxQRF9DTE9DS19DVFJMKSwKLQkJICAgVUxQRF9TSE9XKFVMUERfU09GVF9SRVEpLAotCQkgICBVTFBEX1NIT1coVUxQRF9EUExMX0NUUkwpLAotCQkgICBVTFBEX1NIT1coVUxQRF9TVEFUVVNfUkVRKSwKLQkJICAgVUxQRF9TSE9XKFVMUERfUE9XRVJfQ1RSTCkpOwotCi0JCWlmIChjcHVfaXNfb21hcDczMCgpKSB7Ci0JCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCi0JCQkgICAiTVBVSTczMF9DVFJMX1JFRwkgICAgIDB4JS04eCBcbiIKLQkJCSAgICJNUFVJNzMwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKLQkJCSAgICJNUFVJNzMwX0RTUF9CT09UX0NPTkZJR19SRUc6IDB4JS04eCBcbiIKLQkgIk1QVUk3MzBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgotCSAiTVBVSTczMF9TRFJBTV9DT05GSUdfUkVHOiAgICAweCUtOHggXG4iCi0JICJNUFVJNzMwX0VNSUZTX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIsCi0JIE1QVUk3MzBfU0hPVyhNUFVJX0NUUkwpLAotCSBNUFVJNzMwX1NIT1coTVBVSV9EU1BfU1RBVFVTKSwKLQkgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0JPT1RfQ09ORklHKSwKLQkgTVBVSTczMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAotCSBNUFVJNzMwX1NIT1coRU1JRkZfU0RSQU1fQ09ORklHKSwKLQkgTVBVSTczMF9TSE9XKEVNSUZTX0NPTkZJRykpOwotCQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCQlteV9idWZmZXJfb2Zmc2V0ICs9IHNwcmludGYobXlfYmFzZSArIG15X2J1ZmZlcl9vZmZzZXQsCi0JCQkgICAiTVBVSTE1MTBfQ1RSTF9SRUcgICAgICAgICAgICAgMHglLTh4IFxuIgotCQkJICAgIk1QVUkxNTEwX0RTUF9TVEFUVVNfUkVHOiAgICAgIDB4JS04eCBcbiIKLQkJCSAgICJNUFVJMTUxMF9EU1BfQk9PVF9DT05GSUdfUkVHOiAweCUtOHggXG4iCi0JCSAgIAkgICAiTVBVSTE1MTBfRFNQX0FQSV9DT05GSUdfUkVHOiAgMHglLTh4IFxuIgotCQkgICAJICAgIk1QVUkxNTEwX1NEUkFNX0NPTkZJR19SRUc6ICAgIDB4JS04eCBcbiIKLQkJICAgCSAgICJNUFVJMTUxMF9FTUlGU19DT05GSUdfUkVHOiAgICAweCUtOHggXG4iLAotCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0NUUkwpLAotCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0RTUF9TVEFUVVMpLAotCQkgICAJICAgTVBVSTE1MTBfU0hPVyhNUFVJX0RTUF9CT09UX0NPTkZJRyksCi0JCSAgIAkgICBNUFVJMTUxMF9TSE9XKE1QVUlfRFNQX0FQSV9DT05GSUcpLAotCQkgICAJICAgTVBVSTE1MTBfU0hPVyhFTUlGRl9TRFJBTV9DT05GSUcpLAotCQkgICAJICAgTVBVSTE1MTBfU0hPVyhFTUlGU19DT05GSUcpKTsKLQkJfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQkJbXlfYnVmZmVyX29mZnNldCArPSBzcHJpbnRmKG15X2Jhc2UgKyBteV9idWZmZXJfb2Zmc2V0LAotCQkJICAgIk1QVUkxNjEwX0NUUkxfUkVHICAgICAgICAgICAgIDB4JS04eCBcbiIKLQkJCSAgICJNUFVJMTYxMF9EU1BfU1RBVFVTX1JFRzogICAgICAweCUtOHggXG4iCi0JCQkgICAiTVBVSTE2MTBfRFNQX0JPT1RfQ09ORklHX1JFRzogMHglLTh4IFxuIgotCQkgICAJICAgIk1QVUkxNjEwX0RTUF9BUElfQ09ORklHX1JFRzogIDB4JS04eCBcbiIKLQkJICAgCSAgICJNUFVJMTYxMF9TRFJBTV9DT05GSUdfUkVHOiAgICAweCUtOHggXG4iCi0JCSAgIAkgICAiTVBVSTE2MTBfRU1JRlNfQ09ORklHX1JFRzogICAgMHglLTh4IFxuIiwKLQkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9DVFJMKSwKLQkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9EU1BfU1RBVFVTKSwKLQkJICAgCSAgIE1QVUkxNjEwX1NIT1coTVBVSV9EU1BfQk9PVF9DT05GSUcpLAotCQkgICAJICAgTVBVSTE2MTBfU0hPVyhNUFVJX0RTUF9BUElfQ09ORklHKSwKLQkJICAgCSAgIE1QVUkxNjEwX1NIT1coRU1JRkZfU0RSQU1fQ09ORklHKSwKLQkJICAgCSAgIE1QVUkxNjEwX1NIT1coRU1JRlNfQ09ORklHKSk7Ci0JCX0KLQotCQlnX3JlYWRfY29tcGxldGVkKys7Ci0JfSBlbHNlIGlmIChnX3JlYWRfY29tcGxldGVkID49IDEpIHsKLQkJICplb2YgPSAxOwotCQkgcmV0dXJuIDA7Ci0JfQotCWdfcmVhZF9jb21wbGV0ZWQrKzsKLQotCSpteV9maXJzdF9ieXRlID0gcGFnZV9idWZmZXI7Ci0JcmV0dXJuICBteV9idWZmZXJfb2Zmc2V0OwotfQotCi1zdGF0aWMgdm9pZCBvbWFwX3BtX2luaXRfcHJvYyh2b2lkKQotewotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqZW50cnk7Ci0KLQllbnRyeSA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImRyaXZlci9vbWFwX3BtIiwKLQkJCQkgICAgICAgU19JV1VTUiB8IFNfSVJVR08sIE5VTEwsCi0JICAgb21hcF9wbV9yZWFkX3Byb2MsIE5VTEwpOwotfQotCi0jZW5kaWYgLyogREVCVUcgJiYgQ09ORklHX1BST0NfRlMgKi8KLQotLyoKLSAqCW9tYXBfcG1fcHJlcGFyZSAtIERvIHByZWxpbWluYXJ5IHN1c3BlbmQgd29yay4KLSAqCUBzdGF0ZToJCXN1c3BlbmQgc3RhdGUgd2UncmUgZW50ZXJpbmcuCi0gKgotICovCi0vLyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KLQotc3RhdGljIGludCBvbWFwX3BtX3ByZXBhcmUoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCWludCBlcnJvciA9IDA7Ci0KLQlzd2l0Y2ggKHN0YXRlKQotCXsKLQljYXNlIFBNX1NVU1BFTkRfU1RBTkRCWToKLQljYXNlIFBNX1NVU1BFTkRfTUVNOgotCQlicmVhazsKLQotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIGVycm9yOwotfQotCi0KLS8qCi0gKglvbWFwX3BtX2VudGVyIC0gQWN0dWFsbHkgZW50ZXIgYSBzbGVlcCBzdGF0ZS4KLSAqCUBzdGF0ZToJCVN0YXRlIHdlJ3JlIGVudGVyaW5nLgotICoKLSAqLwotCi1zdGF0aWMgaW50IG9tYXBfcG1fZW50ZXIoc3VzcGVuZF9zdGF0ZV90IHN0YXRlKQotewotCXN3aXRjaCAoc3RhdGUpCi0JewotCWNhc2UgUE1fU1VTUEVORF9TVEFOREJZOgotCWNhc2UgUE1fU1VTUEVORF9NRU06Ci0JCW9tYXBfcG1fc3VzcGVuZCgpOwotCQlicmVhazsKLQotCWNhc2UgUE1fU1VTUEVORF9ESVNLOgotCQlyZXR1cm4gLUVOT1RTVVBQOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLQotLyoqCi0gKglvbWFwX3BtX2ZpbmlzaCAtIEZpbmlzaCB1cCBzdXNwZW5kIHNlcXVlbmNlLgotICoJQHN0YXRlOgkJU3RhdGUgd2UncmUgY29taW5nIG91dCBvZi4KLSAqCi0gKglUaGlzIGlzIGNhbGxlZCBhZnRlciB3ZSB3YWtlIGJhY2sgdXAgKG9yIGlmIGVudGVyaW5nIHRoZSBzbGVlcCBzdGF0ZQotICoJZmFpbGVkKS4KLSAqLwotCi1zdGF0aWMgaW50IG9tYXBfcG1fZmluaXNoKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKLXsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaXJxcmV0dXJuX3QgIG9tYXBfd2FrZXVwX2ludGVycnVwdChpbnQgIGlycSwgdm9pZCAqICBkZXYsCi0JCQkJICAgICBzdHJ1Y3QgcHRfcmVncyAqICByZWdzKQotewotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF93YWtldXBfaXJxID0gewotCS5uYW1lCQk9ICJwZXJpcGhlcmFsIHdha2V1cCIsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCi0JLmhhbmRsZXIJPSBvbWFwX3dha2V1cF9pbnRlcnJ1cHQKLX07Ci0KLQotCi1zdGF0aWMgc3RydWN0IHBtX29wcyBvbWFwX3BtX29wcyA9ewotCS5wbV9kaXNrX21vZGUgPSAwLAotICAgICAgICAucHJlcGFyZSAgICAgICAgPSBvbWFwX3BtX3ByZXBhcmUsCi0gICAgICAgIC5lbnRlciAgICAgICAgICA9IG9tYXBfcG1fZW50ZXIsCi0gICAgICAgIC5maW5pc2ggICAgICAgICA9IG9tYXBfcG1fZmluaXNoLAotfTsKLQotc3RhdGljIGludCBfX2luaXQgb21hcF9wbV9pbml0KHZvaWQpCi17Ci0JcHJpbnRrKCJQb3dlciBNYW5hZ2VtZW50IGZvciBUSSBPTUFQLlxuIik7Ci0JLyoKLQkgKiBXZSBjb3B5IHRoZSBhc3NlbWJsZXIgc2xlZXAvd2FrZXVwIHJvdXRpbmVzIHRvIFNSQU0uCi0JICogVGhlc2Ugcm91dGluZXMgbmVlZCB0byBiZSBpbiBTUkFNIGFzIHRoYXQncyB0aGUgb25seQotCSAqIG1lbW9yeSB0aGUgTVBVIGNhbiBzZWUgd2hlbiBpdCB3YWtlcyB1cC4KLQkgKi8KLQlpZiAoY3B1X2lzX29tYXA3MzAoKSkgewotCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXA3MzBfaWRsZV9sb29wX3N1c3BlbmQsCi0JCQkJCQlvbWFwNzMwX2lkbGVfbG9vcF9zdXNwZW5kX3N6KTsKLQkJb21hcF9zcmFtX3N1c3BlbmQgPSBvbWFwX3NyYW1fcHVzaChvbWFwNzMwX2NwdV9zdXNwZW5kLAotCSBvbWFwNzMwX2NwdV9zdXNwZW5kX3N6KTsKLQl9IGVsc2UgaWYgKGNwdV9pc19vbWFwMTUxMCgpKSB7Ci0JCW9tYXBfc3JhbV9pZGxlID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfaWRsZV9sb29wX3N1c3BlbmQsCi0JCQkJCQlvbWFwMTUxMF9pZGxlX2xvb3Bfc3VzcGVuZF9zeik7Ci0JCW9tYXBfc3JhbV9zdXNwZW5kID0gb21hcF9zcmFtX3B1c2gob21hcDE1MTBfY3B1X3N1c3BlbmQsCi0JCQkJCQkgICBvbWFwMTUxMF9jcHVfc3VzcGVuZF9zeik7Ci0JfSBlbHNlIGlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQlvbWFwX3NyYW1faWRsZSA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2lkbGVfbG9vcF9zdXNwZW5kLAotCQkJCQkJb21hcDE2MTBfaWRsZV9sb29wX3N1c3BlbmRfc3opOwotCQlvbWFwX3NyYW1fc3VzcGVuZCA9IG9tYXBfc3JhbV9wdXNoKG9tYXAxNjEwX2NwdV9zdXNwZW5kLAotCQkJCQkJICAgb21hcDE2MTBfY3B1X3N1c3BlbmRfc3opOwotCX0KLQotCWlmIChvbWFwX3NyYW1faWRsZSA9PSBOVUxMIHx8IG9tYXBfc3JhbV9zdXNwZW5kID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJQTSBub3QgaW5pdGlhbGl6ZWQ6IE1pc3NpbmcgU1JBTSBzdXBwb3J0XG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JcG1faWRsZSA9IG9tYXBfcG1faWRsZTsKLQotCWlmIChjcHVfaXNfb21hcDczMCgpKQotCQlzZXR1cF9pcnEoSU5UXzczMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7Ci0JZWxzZSBpZiAoY3B1X2lzX29tYXAxNnh4KCkpCi0JCXNldHVwX2lycShJTlRfMTYxMF9XQUtFX1VQX1JFUSwgJm9tYXBfd2FrZXVwX2lycSk7Ci0KLSNpZiAwCi0JLyogLS0tIEJFR0lOIEJPQVJELURFUEVOREVOVCBDT0RFIC0tLSAqLwotCS8qIFNsZWVweCBtYXNrIGRpcmVjdGlvbiAqLwotCW9tYXBfd3JpdGV3KChvbWFwX3JlYWR3KDB4ZmZmYjUwMDgpICYgfjIpLCAweGZmZmI1MDA4KTsKLQkvKiBVbm1hc2sgc2xlZXB4IHNpZ25hbCAqLwotCW9tYXBfd3JpdGV3KChvbWFwX3JlYWR3KDB4ZmZmYjUwMDQpICYgfjIpLCAweGZmZmI1MDA0KTsKLQkvKiAtLS0gRU5EIEJPQVJELURFUEVOREVOVCBDT0RFIC0tLSAqLwotI2VuZGlmCi0KLQkvKiBQcm9ncmFtIG5ldyBwb3dlciByYW1wLXVwIHRpbWUKLQkgKiAoMCBmb3IgbW9zdCBib2FyZHMgc2luY2Ugd2UgZG9uJ3QgbG93ZXIgdm9sdGFnZSB3aGVuIGluIGRlZXAgc2xlZXApCi0JICovCi0Jb21hcF93cml0ZXcoVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zX1ZBTCwgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zKTsKLQotCS8qIFNldHVwIFVMUEQgUE9XRVJfQ1RSTF9SRUcgLSBlbnRlciBkZWVwIHNsZWVwIHdoZW5ldmVyIHBvc3NpYmxlICovCi0Jb21hcF93cml0ZXcoVUxQRF9QT1dFUl9DVFJMX1JFR19WQUwsIFVMUERfUE9XRVJfQ1RSTCk7Ci0KLQkvKiBDb25maWd1cmUgSURMRUNUMyAqLwotCWlmIChjcHVfaXNfb21hcDczMCgpKQotCQlvbWFwX3dyaXRlbChPTUFQNzMwX0lETEVDVDNfVkFMLCBPTUFQNzMwX0lETEVDVDMpOwotCWVsc2UgaWYgKGNwdV9pc19vbWFwMTZ4eCgpKQotCQlvbWFwX3dyaXRlbChPTUFQMTYxMF9JRExFQ1QzX1ZBTCwgT01BUDE2MTBfSURMRUNUMyk7Ci0KLQlwbV9zZXRfb3BzKCZvbWFwX3BtX29wcyk7Ci0KLSNpZiBkZWZpbmVkKERFQlVHKSAmJiBkZWZpbmVkKENPTkZJR19QUk9DX0ZTKQotCW9tYXBfcG1faW5pdF9wcm9jKCk7Ci0jZW5kaWYKLQotCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgewotCQkvKiBjb25maWd1cmUgTE9XX1BXUiBwaW4gKi8KLQkJb21hcF9jZmdfcmVnKFQyMF8xNjEwX0xPV19QV1IpOwotCX0KLQotCXJldHVybiAwOwotfQotX19pbml0Y2FsbChvbWFwX3BtX2luaXQpOwotCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jIGIvYXJjaC9hcm0vcGxhdC1vbWFwL3NyYW0uYwppbmRleCBlNzU3MTgzLi4xOTAxNGIyIDEwMDY0NAotLS0gYS9hcmNoL2FybS9wbGF0LW9tYXAvc3JhbS5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC9zcmFtLmMKQEAgLTE3NCwxMCArMTc0LDcgQEAKIAlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKIAkJb21hcF9zcmFtX2lvX2Rlc2NbMF0udmlydHVhbCA9IE9NQVAyX1NSQU1fVkE7CiAKLQkJaWYgKGlzX3NyYW1fbG9ja2VkKCkpCi0JCQliYXNlID0gT01BUDJfU1JBTV9QVUJfUEE7Ci0JCWVsc2UKLQkJCWJhc2UgPSBPTUFQMl9TUkFNX1BBOworCQliYXNlID0gT01BUDJfU1JBTV9QQTsKIAkJYmFzZSA9IFJPVU5EX0RPV04oYmFzZSwgUEFHRV9TSVpFKTsKIAkJb21hcF9zcmFtX2lvX2Rlc2NbMF0ucGZuID0gX19waHlzX3RvX3BmbihiYXNlKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdGltZXIzMmsuYyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCmluZGV4IDI4MWVjYzcuLmNmNmRmMzMgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC90aW1lcjMyay5jCkBAIC0xMDUsNiArMTA1LDggQEAKIAogc3RhdGljIGlubGluZSB2b2lkIG9tYXBfMzJrX3RpbWVyX3N0YXJ0KHVuc2lnbmVkIGxvbmcgbG9hZF92YWwpCiB7CisJaWYgKCFsb2FkX3ZhbCkKKwkJbG9hZF92YWwgPSAxOwogCW9tYXBfMzJrX3RpbWVyX3dyaXRlKGxvYWRfdmFsLCBPTUFQMV8zMktfVElNRVJfVFZSKTsKIAlvbWFwXzMya190aW1lcl93cml0ZSgweDBmLCBPTUFQMV8zMktfVElNRVJfQ1IpOwogfQpAQCAtMTkyLDE0ICsxOTQsMTEgQEAKICAqIGlzc3VlcyB3aXRoIGR5bmFtaWMgdGljay4gSW4gdGhlIGR5bmFtaWMgdGljayBjYXNlLCB3ZSBuZWVkIHRvIGxvY2sKICAqIHdpdGggaXJxc2F2ZS4KICAqLwotc3RhdGljIGlycXJldHVybl90IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCi0JCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpbmxpbmUgaXJxcmV0dXJuX3QgX29tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyBub3c7CiAKLQl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKLQogCW9tYXBfMzJrX3RpbWVyX2Fja19pcnEoKTsKIAlub3cgPSBvbWFwXzMya19zeW5jX3RpbWVyX3JlYWQoKTsKIApAQCAtMjE1LDYgKzIxNCwyMyBAQAogCSAqIGNvbnRpbnVvdXMgdGltZXIgY2FuIGJlIG92ZXJyaWRkZW4gZnJvbSBwbV9pZGxlIHRvIGJlIGxvbmdlci4KIAkgKi8KIAlvbWFwXzMya190aW1lcl9zdGFydChvbWFwXzMya19sYXN0X3RpY2sgKyBPTUFQXzMyS19USUNLU19QRVJfSFogLSBub3cpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3Qgb21hcF8zMmtfdGltZXJfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXJldHVybiBfb21hcF8zMmtfdGltZXJfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKK30KKworc3RhdGljIGlycXJldHVybl90IG9tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsCisJCQkJCSAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CisJX29tYXBfMzJrX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CiAJd3JpdGVfc2VxdW5sb2NrX2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTIzMCw3ICsyNDYsMTUgQEAKICAqLwogdm9pZCBvbWFwXzMya190aW1lcl9yZXByb2dyYW0odW5zaWduZWQgbG9uZyBuZXh0X3RpY2spCiB7Ci0Jb21hcF8zMmtfdGltZXJfc3RhcnQoSklGRklFU19UT19IV19USUNLUyhuZXh0X3RpY2ssIDMyNzY4KSArIDEpOworCXVuc2lnbmVkIGxvbmcgdGlja3MgPSBKSUZGSUVTX1RPX0hXX1RJQ0tTKG5leHRfdGljaywgMzI3NjgpICsgMTsKKwl1bnNpZ25lZCBsb25nIG5vdyA9IG9tYXBfMzJrX3N5bmNfdGltZXJfcmVhZCgpOworCXVuc2lnbmVkIGxvbmcgaWRsZWQgPSBub3cgLSBvbWFwXzMya19sYXN0X3RpY2s7CisKKwlpZiAoaWRsZWQgKyAxIDwgdGlja3MpCisJCXRpY2tzIC09IGlkbGVkOworCWVsc2UKKwkJdGlja3MgPSAxOworCW9tYXBfMzJrX3RpbWVyX3N0YXJ0KHRpY2tzKTsKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gb21hcF8zMmtfdGltZXJfaXJxOwpAQCAtMjUyLDcgKzI3Niw3IEBACiAJLmVuYWJsZQkJPSBvbWFwXzMya190aW1lcl9lbmFibGVfZHluX3RpY2ssCiAJLmRpc2FibGUJPSBvbWFwXzMya190aW1lcl9kaXNhYmxlX2R5bl90aWNrLAogCS5yZXByb2dyYW0JPSBvbWFwXzMya190aW1lcl9yZXByb2dyYW0sCi0JLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9pbnRlcnJ1cHQsCisJLmhhbmRsZXIJPSBvbWFwXzMya190aW1lcl9oYW5kbGVyLAogfTsKICNlbmRpZgkvKiBDT05GSUdfTk9fSURMRV9IWiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMgYi9hcmNoL2FybS9wbGF0LW9tYXAvdXNiLmMKaW5kZXggOWI4MTUzMi4uN2U4MDk2OCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vcGxhdC1vbWFwL3VzYi5jCisrKyBiL2FyY2gvYXJtL3BsYXQtb21hcC91c2IuYwpAQCAtMjYsNyArMjYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYl9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CmRpZmYgLS1naXQgYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzIGIvYXJjaC9hcm0vdG9vbHMvbWFjaC10eXBlcwppbmRleCBlMTM3MmEyLi5iMDJhZjFkIDEwMDY0NAotLS0gYS9hcmNoL2FybS90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvYXJtL3Rvb2xzL21hY2gtdHlwZXMKQEAgLTEyLDcgKzEyLDcgQEAKICMKICMgICBodHRwOi8vd3d3LmFybS5saW51eC5vcmcudWsvZGV2ZWxvcGVyL21hY2hpbmVzLz9hY3Rpb249bmV3CiAjCi0jIExhc3QgdXBkYXRlOiBNb24gSnVuIDI2IDIyOjI2OjA4IDIwMDYKKyMgTGFzdCB1cGRhdGU6IFNhdCBTZXAgMjMgMTM6MjA6NDMgMjAwNgogIwogIyBtYWNoaW5lX2lzX3h4eAlDT05GSUdfeHh4eAkJTUFDSF9UWVBFX3h4eAkJbnVtYmVyCiAjCkBAIC0zMjksNyArMzI5LDcgQEAKIG5pbWJyYTIxMAkJQVJDSF9OSU1CUkEyMTAJCU5JTUJSQTIxMAkJMzEyCiBoaHBfZDk1eHgJCUFSQ0hfSEhQX0Q5NVhYCQlISFBfRDk1WFgJCTMxMwogbGFiYXJtCQkJQVJDSF9MQUJBUk0JCUxBQkFSTQkJCTMxNAotY29tY2VydG8JCUFSQ0hfTTgyNVhYCQlNODI1WFgJCQkzMTUKK204MjV4eAkJCUFSQ0hfTTgyNVhYCQlNODI1WFgJCQkzMTUKIG03MTAwCQkJU0ExMTAwX003MTAwCQlNNzEwMAkJCTMxNgogbmlwYzIJCQlBUkNIX05JUEMyCQlOSVBDMgkJCTMxNwogZnU3MjAyCQkJQVJDSF9GVTcyMDIJCUZVNzIwMgkJCTMxOApAQCAtODU3LDEyICs4NTcsMTIgQEAKIG1hZXN0cm8JCQlNQUNIX01BRVNUUk8JCU1BRVNUUk8JCQk4NDMKIHR1bmdlMgkJCU1BQ0hfVFVOR0UyCQlUVU5HRTIJCQk4NDQKIGl4YmJtCQkJTUFDSF9JWEJCTQkJSVhCQk0JCQk4NDUKLW14MjdhZHMJCQlNQUNIX01YMjcJCU1YMjcJCQk4NDYKK214MjdhZHMJCQlNQUNIX01YMjdBRFMJCU1YMjdBRFMJCQk4NDYKIGF4ODAwNAkJCU1BQ0hfQVg4MDA0CQlBWDgwMDQJCQk4NDcKIGF0OTFzYW05MjYxZWsJCU1BQ0hfQVQ5MVNBTTkyNjFFSwlBVDkxU0FNOTI2MUVLCQk4NDgKIGxvZnQJCQlNQUNIX0xPRlQJCUxPRlQJCQk4NDkKIG1hZ3BpZQkJCU1BQ0hfTUFHUElFCQlNQUdQSUUJCQk4NTAKLW14MjFhZHMJCQlNQUNIX01YMjEJCU1YMjEJCQk4NTEKK214MjFhZHMJCQlNQUNIX01YMjFBRFMJCU1YMjFBRFMJCQk4NTEKIG1iODdtMzQwMAkJTUFDSF9NQjg3TTM0MDAJCU1CODdNMzQwMAkJODUyCiBtZ3VhcmRfZGVsdGEJCU1BQ0hfTUdVQVJEX0RFTFRBCU1HVUFSRF9ERUxUQQkJODUzCiBkYXZpbmNpX2R2ZHAJCU1BQ0hfREFWSU5DSV9EVkRQCURBVklOQ0lfRFZEUAkJODU0CkBAIC0xMDU4LDcgKzEwNTgsNyBAQAogZm9udGFpbmUJCU1BQ0hfRk9OVEFJTkUJCUZPTlRBSU5FCQkxMDQ1CiB3b21iYXQJCQlNQUNIX1dPTUJBVAkJV09NQkFUCQkJMTA0NgogYWNxMzAwCQkJTUFDSF9BQ1EzMDAJCUFDUTMwMAkJCTEwNDcKLW1vZF8yNzAJCQlNQUNIX01PRF8yNzAJCU1PRF8yNzAJCQkxMDQ4Cittb2QyNzIJCQlNQUNIX01PRF8yNzAJCU1PRF8yNzAJCQkxMDQ4CiB2bWNfdmMwODIwCQlNQUNIX1ZDMDgyMAkJVkMwODIwCQkJMTA0OQogYW5pX2FpbQkJCU1BQ0hfQU5JX0FJTQkJQU5JX0FJTQkJCTEwNTAKIGplbGx5ZmlzaAkJTUFDSF9KRUxMWUZJU0gJCUpFTExZRklTSAkJMTA1MQpAQCAtMTA5MywzICsxMDkzLDY3IEBACiBldGlfYjEJCQlNQUNIX0VUSV9CMQkJRVRJX0IxCQkJMTA4MAogemE5bF9zZXJpZXMJCU1BQ0hfWklMT0dfWkE5TAkJWklMT0dfWkE5TAkJMTA4MQogYml0MjQ0MAkJCU1BQ0hfQklUMjQ0MAkJQklUMjQ0MAkJCTEwODIKK25iaQkJCU1BQ0hfTkJJCQlOQkkJCQkxMDgzCitzbWRrMjQ0MwkJTUFDSF9TTURLMjQ0MwkJU01ESzI0NDMJCTEwODQKK3ZkYXZpbmNpCQlNQUNIX1ZEQVZJTkNJCQlWREFWSU5DSQkJMTA4NQorYXRjNgkJCU1BQ0hfQVRDNgkJQVRDNgkJCTEwODYKK211bHRtZHcJCQlNQUNIX01VTFRNRFcJCU1VTFRNRFcJCQkxMDg3CittYmEyNDQwCQkJTUFDSF9NQkEyNDQwCQlNQkEyNDQwCQkJMTA4OAorZWNzZAkJCU1BQ0hfRUNTRAkJRUNTRAkJCTEwODkKK3ppcmUzMQkJCU1BQ0hfWklSRTMxCQlaSVJFMzEJCQkxMDkwCitmc2cJCQlNQUNIX0ZTRwkJRlNHCQkJMTA5MQorcmF6b3IxMDEJCU1BQ0hfUkFaT1IxMDEJCVJBWk9SMTAxCQkxMDkyCitvcGVyYV90ZG0JCU1BQ0hfT1BFUkFfVERNCQlPUEVSQV9URE0JCTEwOTMKK2NvbWNlcnRvCQlNQUNIX0NPTUNFUlRPCQlDT01DRVJUTwkJMTA5NAordGIwMzE5CQkJTUFDSF9UQjAzMTkJCVRCMDMxOQkJCTEwOTUKK2t3czgwMDAJCQlNQUNIX0tXUzgwMDAJCUtXUzgwMDAJCQkxMDk2CitiMgkJCU1BQ0hfQjIJCQlCMgkJCTEwOTcKK2xjbDU0CQkJTUFDSF9MQ0w1NAkJTENMNTQJCQkxMDk4CithdDkxc2FtOTI2MGVrCQlNQUNIX0FUOTFTQU05MjYwRUsJQVQ5MVNBTTkyNjBFSwkJMTA5OQorZ2xhbnRhbmsJCU1BQ0hfR0xBTlRBTksJCUdMQU5UQU5LCQkxMTAwCituMjEwMAkJCU1BQ0hfTjIxMDAJCU4yMTAwCQkJMTEwMQorbjQxMDAJCQlNQUNIX040MTAwCQlONDEwMAkJCTExMDIKK3JzYzQJCQlNQUNIX1ZFUlRJQ0FMX1JTQzQJVkVSVElDQUxfUlNDNAkJMTEwMworc2c4MTAwCQkJTUFDSF9TRzgxMDAJCVNHODEwMAkJCTExMDQKK2ltNDJ4eAkJCU1BQ0hfSU00MlhYCQlJTTQyWFgJCQkxMTA1CitmdHh4CQkJTUFDSF9GVFhYCQlGVFhYCQkJMTEwNgorbHdmdXNpb24JCU1BQ0hfTFdGVVNJT04JCUxXRlVTSU9OCQkxMTA3CitxdDI0MTAJCQlNQUNIX1FUMjQxMAkJUVQyNDEwCQkJMTEwOAora2l4cnA0MzUJCU1BQ0hfS0lYUlA0MzUJCUtJWFJQNDM1CQkxMTA5CitjY3c5YwkJCU1BQ0hfQ0NXOUMJCUNDVzlDCQkJMTExMAorZGFiaHMJCQlNQUNIX0RBQkhTCQlEQUJIUwkJCTExMTEKK2d6bXgJCQlNQUNIX0daTVgJCUdaTVgJCQkxMTEyCitpcG53MTAwYXAJCU1BQ0hfSVBOVzEwMEFQCQlJUE5XMTAwQVAJCTExMTMKK2NjOXA5MzYwZGV2CQlNQUNIX0NDOVA5MzYwREVWCUNDOVA5MzYwREVWCQkxMTE0CitjYzlwOTc1MGRldgkJTUFDSF9DQzlQOTc1MERFVglDQzlQOTc1MERFVgkJMTExNQorY2M5cDkzNjB2YWwJCU1BQ0hfQ0M5UDkzNjBWQUwJQ0M5UDkzNjBWQUwJCTExMTYKK2NjOXA5NzUwdmFsCQlNQUNIX0NDOVA5NzUwVkFMCUNDOVA5NzUwVkFMCQkxMTE3CitueDcwdgkJCU1BQ0hfTlg3MFYJCU5YNzBWCQkJMTExOAorYXQ5MXJtOTIwMGRmCQlNQUNIX0FUOTFSTTkyMDBERglBVDkxUk05MjAwREYJCTExMTkKK3NlX3BpbG90MgkJTUFDSF9TRV9QSUxPVDIJCVNFX1BJTE9UMgkJMTEyMAorbXRjbl90ODAwCQlNQUNIX01UQ05fVDgwMAkJTVRDTl9UODAwCQkxMTIxCit2Y214MjEyCQkJTUFDSF9WQ01YMjEyCQlWQ01YMjEyCQkJMTEyMgorbHlueAkJCU1BQ0hfTFlOWAkJTFlOWAkJCTExMjMKK2F0OTFzYW05MjYwaWQJCU1BQ0hfQVQ5MVNBTTkyNjBJRAlBVDkxU0FNOTI2MElECQkxMTI0Citodzg2MDUyCQkJTUFDSF9IVzg2MDUyCQlIVzg2MDUyCQkJMTEyNQorcGlsel9wbWkzCQlNQUNIX1BJTFpfUE1JMwkJUElMWl9QTUkzCQkxMTI2CitlZGI5MzAyYQkJTUFDSF9FREI5MzAyQQkJRURCOTMwMkEJCTExMjcKK2VkYjkzMDdhCQlNQUNIX0VEQjkzMDdBCQlFREI5MzA3QQkJMTEyOAorY3RfZGZzCQkJTUFDSF9DVF9ERlMJCUNUX0RGUwkJCTExMjkKK3BpbHpfcG1pNAkJTUFDSF9QSUxaX1BNSTQJCVBJTFpfUE1JNAkJMTEzMAoreGNlZWRucF9peHAJCU1BQ0hfWENFRUROUF9JWFAJWENFRUROUF9JWFAJCTExMzEKK3NtZGsyNDQyYgkJTUFDSF9TTURLMjQ0MkIJCVNNREsyNDQyQgkJMTEzMgoreG5vZGUJCQlNQUNIX1hOT0RFCQlYTk9ERQkJCTExMzMKK2FpZHgyNzAJCQlNQUNIX0FJRFgyNzAJCUFJRFgyNzAJCQkxMTM0CityZW1hCQkJTUFDSF9SRU1BCQlSRU1BCQkJMTEzNQorYnBzMTAwMAkJCU1BQ0hfQlBTMTAwMAkJQlBTMTAwMAkJCTExMzYKK2h3OTAzNTAJCQlNQUNIX0hXOTAzNTAJCUhXOTAzNTAJCQkxMTM3CitvbWFwX3NkcDM0MzAJCU1BQ0hfT01BUF9TRFAzNDMwCU9NQVBfU0RQMzQzMAkJMTEzOAorYmx1ZXRvdWNoCQlNQUNIX0JMVUVUT1VDSAkJQkxVRVRPVUNICQkxMTM5Cit2c3RtcwkJCU1BQ0hfVlNUTVMJCVZTVE1TCQkJMTE0MAoreHNiYXNlMjcwCQlNQUNIX1hTQkFTRTI3MAkJWFNCQVNFMjcwCQkxMTQxCithdDkxc2FtOTI2MGVrX2NuCU1BQ0hfQVQ5MVNBTTkyNjBFS19DTglBVDkxU0FNOTI2MEVLX0NOCTExNDIKK2Fkc3R1cmJveGIJCU1BQ0hfQURTVFVSQk9YQgkJQURTVFVSQk9YQgkJMTE0Mworb3RpNDExMAkJCU1BQ0hfT1RJNDExMAkJT1RJNDExMAkJCTExNDQKK2htZV9weGEJCQlNQUNIX0hNRV9QWEEJCUhNRV9QWEEJCQkxMTQ1CitkZWlzdGVyZGNhCQlNQUNIX0RFSVNURVJEQ0EJCURFSVNURVJEQ0EJCTExNDYKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnAuaCBiL2FyY2gvYXJtL3ZmcC92ZnAuaAppbmRleCA5NmZkZjMwLi5mMjc5Nzg5IDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwLmgKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcC5oCkBAIC0zNTUsMyArMzU1LDE4IEBACiAgKiB3ZSBjaGVjayBmb3IgYW4gZXJyb3IuCiAgKi8KICNkZWZpbmUgVkZQX0VYQ0VQVElPTl9FUlJPUgkoKHUzMiktMSAmIH5WRlBfTkFOX0ZMQUcpCisKKy8qCisgKiBBIGZsYWcgdG8gdGVsbCB2ZnAgaW5zdHJ1Y3Rpb24gdHlwZS4KKyAqICBPUF9TQ0FMQVIgLSB0aGlzIG9wZXJhdGlvbiBhbHdheXMgb3BlcmF0ZXMgaW4gc2NhbGFyIG1vZGUKKyAqICBPUF9TRCAtIHRoZSBpbnN0cnVjdGlvbiBleGNlcHRpb25hbGx5IHdyaXRlcyB0byBhIHNpbmdsZSBwcmVjaXNpb24gcmVzdWx0LgorICogIE9QX0REIC0gdGhlIGluc3RydWN0aW9uIGV4Y2VwdGlvbmFsbHkgd3JpdGVzIHRvIGEgZG91YmxlIHByZWNpc2lvbiByZXN1bHQuCisgKi8KKyNkZWZpbmUgT1BfU0NBTEFSCSgxIDw8IDApCisjZGVmaW5lIE9QX1NECQkoMSA8PCAxKQorI2RlZmluZSBPUF9ERAkJKDEgPDwgMSkKKworc3RydWN0IG9wIHsKKwl1MzIgKCogY29uc3QgZm4pKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIHUzMiBmcHNjcik7CisJdTMyIGZsYWdzOworfTsKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBkb3VibGUuYwppbmRleCBhZGQ0OGUzLi40ZmMwNWVlIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwZG91YmxlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGRvdWJsZS5jCkBAIC02NTksMjIgKzY1OSwyMiBAQAogfQogCiAKLXN0YXRpYyB1MzIgKCogY29uc3QgZm9wX2V4dGZuc1szMl0pKGludCBkZCwgaW50IHVudXNlZCwgaW50IGRtLCB1MzIgZnBzY3IpID0gewotCVtGRVhUX1RPX0lEWChGRVhUX0ZDUFkpXQk9IHZmcF9kb3VibGVfZmNweSwKLQlbRkVYVF9UT19JRFgoRkVYVF9GQUJTKV0JPSB2ZnBfZG91YmxlX2ZhYnMsCi0JW0ZFWFRfVE9fSURYKEZFWFRfRk5FRyldCT0gdmZwX2RvdWJsZV9mbmVnLAotCVtGRVhUX1RPX0lEWChGRVhUX0ZTUVJUKV0JPSB2ZnBfZG91YmxlX2ZzcXJ0LAotCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVApXQk9IHZmcF9kb3VibGVfZmNtcCwKLQlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRSldCT0gdmZwX2RvdWJsZV9mY21wZSwKLQlbRkVYVF9UT19JRFgoRkVYVF9GQ01QWildCT0gdmZwX2RvdWJsZV9mY21weiwKLQlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRVopXQk9IHZmcF9kb3VibGVfZmNtcGV6LAotCVtGRVhUX1RPX0lEWChGRVhUX0ZDVlQpXQk9IHZmcF9kb3VibGVfZmN2dHMsCi0JW0ZFWFRfVE9fSURYKEZFWFRfRlVJVE8pXQk9IHZmcF9kb3VibGVfZnVpdG8sCi0JW0ZFWFRfVE9fSURYKEZFWFRfRlNJVE8pXQk9IHZmcF9kb3VibGVfZnNpdG8sCi0JW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUkpXQk9IHZmcF9kb3VibGVfZnRvdWksCi0JW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUlaKV0JPSB2ZnBfZG91YmxlX2Z0b3VpeiwKLQlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSSldCT0gdmZwX2RvdWJsZV9mdG9zaSwKLQlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSVopXQk9IHZmcF9kb3VibGVfZnRvc2l6LAorc3RhdGljIHN0cnVjdCBvcCBmb3BzX2V4dFszMl0gPSB7CisJW0ZFWFRfVE9fSURYKEZFWFRfRkNQWSldCT0geyB2ZnBfZG91YmxlX2ZjcHksICAgMCB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZBQlMpXQk9IHsgdmZwX2RvdWJsZV9mYWJzLCAgIDAgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GTkVHKV0JPSB7IHZmcF9kb3VibGVfZm5lZywgICAwIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlNRUlQpXQk9IHsgdmZwX2RvdWJsZV9mc3FydCwgIDAgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QKV0JPSB7IHZmcF9kb3VibGVfZmNtcCwgICBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QRSldCT0geyB2ZnBfZG91YmxlX2ZjbXBlLCAgT1BfU0NBTEFSIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRkNNUFopXQk9IHsgdmZwX2RvdWJsZV9mY21weiwgIE9QX1NDQUxBUiB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVBFWildCT0geyB2ZnBfZG91YmxlX2ZjbXBleiwgT1BfU0NBTEFSIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRkNWVCldCT0geyB2ZnBfZG91YmxlX2ZjdnRzLCAgT1BfU0NBTEFSfE9QX1NEIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlVJVE8pXQk9IHsgdmZwX2RvdWJsZV9mdWl0bywgIE9QX1NDQUxBUiB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZTSVRPKV0JPSB7IHZmcF9kb3VibGVfZnNpdG8sICBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9VSSldCT0geyB2ZnBfZG91YmxlX2Z0b3VpLCAgT1BfU0NBTEFSfE9QX1NEIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPVUlaKV0JPSB7IHZmcF9kb3VibGVfZnRvdWl6LCBPUF9TQ0FMQVJ8T1BfU0QgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSSldCT0geyB2ZnBfZG91YmxlX2Z0b3NpLCAgT1BfU0NBTEFSfE9QX1NEIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlRPU0laKV0JPSB7IHZmcF9kb3VibGVfZnRvc2l6LCBPUF9TQ0FMQVJ8T1BfU0QgfSwKIH07CiAKIApAQCAtMTEwOCwxNiArMTEwOCwxNiBAQAogCXJldHVybiBGUFNDUl9JT0M7CiB9CiAKLXN0YXRpYyB1MzIgKCogY29uc3QgZm9wX2Zuc1sxNl0pKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIHUzMiBmcHNjcikgPSB7Ci0JW0ZPUF9UT19JRFgoRk9QX0ZNQUMpXQk9IHZmcF9kb3VibGVfZm1hYywKLQlbRk9QX1RPX0lEWChGT1BfRk5NQUMpXQk9IHZmcF9kb3VibGVfZm5tYWMsCi0JW0ZPUF9UT19JRFgoRk9QX0ZNU0MpXQk9IHZmcF9kb3VibGVfZm1zYywKLQlbRk9QX1RPX0lEWChGT1BfRk5NU0MpXQk9IHZmcF9kb3VibGVfZm5tc2MsCi0JW0ZPUF9UT19JRFgoRk9QX0ZNVUwpXQk9IHZmcF9kb3VibGVfZm11bCwKLQlbRk9QX1RPX0lEWChGT1BfRk5NVUwpXQk9IHZmcF9kb3VibGVfZm5tdWwsCi0JW0ZPUF9UT19JRFgoRk9QX0ZBREQpXQk9IHZmcF9kb3VibGVfZmFkZCwKLQlbRk9QX1RPX0lEWChGT1BfRlNVQildCT0gdmZwX2RvdWJsZV9mc3ViLAotCVtGT1BfVE9fSURYKEZPUF9GRElWKV0JPSB2ZnBfZG91YmxlX2ZkaXYsCitzdGF0aWMgc3RydWN0IG9wIGZvcHNbMTZdID0geworCVtGT1BfVE9fSURYKEZPUF9GTUFDKV0JPSB7IHZmcF9kb3VibGVfZm1hYywgIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRk5NQUMpXQk9IHsgdmZwX2RvdWJsZV9mbm1hYywgMCB9LAorCVtGT1BfVE9fSURYKEZPUF9GTVNDKV0JPSB7IHZmcF9kb3VibGVfZm1zYywgIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRk5NU0MpXQk9IHsgdmZwX2RvdWJsZV9mbm1zYywgMCB9LAorCVtGT1BfVE9fSURYKEZPUF9GTVVMKV0JPSB7IHZmcF9kb3VibGVfZm11bCwgIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRk5NVUwpXQk9IHsgdmZwX2RvdWJsZV9mbm11bCwgMCB9LAorCVtGT1BfVE9fSURYKEZPUF9GQUREKV0JPSB7IHZmcF9kb3VibGVfZmFkZCwgIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRlNVQildCT0geyB2ZnBfZG91YmxlX2ZzdWIsICAwIH0sCisJW0ZPUF9UT19JRFgoRk9QX0ZESVYpXQk9IHsgdmZwX2RvdWJsZV9mZGl2LCAgMCB9LAogfTsKIAogI2RlZmluZSBGUkVHX0JBTksoeCkJKCh4KSAmIDB4MGMpCkBAIC0xMTMxLDY5ICsxMTMxLDYwIEBACiAJdW5zaWduZWQgaW50IGRuID0gdmZwX2dldF9kbihpbnN0KTsKIAl1bnNpZ25lZCBpbnQgZG0gPSB2ZnBfZ2V0X2RtKGluc3QpOwogCXVuc2lnbmVkIGludCB2ZWNpdHIsIHZlY2xlbiwgdmVjc3RyaWRlOwotCXUzMiAoKmZvcCkoaW50LCBpbnQsIHMzMiwgdTMyKTsKKwlzdHJ1Y3Qgb3AgKmZvcDsKIAotCXZlY2xlbiA9IGZwc2NyICYgRlBTQ1JfTEVOR1RIX01BU0s7CiAJdmVjc3RyaWRlID0gKDEgKyAoKGZwc2NyICYgRlBTQ1JfU1RSSURFX01BU0spID09IEZQU0NSX1NUUklERV9NQVNLKSkgKiAyOwogCisJZm9wID0gKG9wID09IEZPUF9FWFQpID8gJmZvcHNfZXh0W0ZFWFRfVE9fSURYKGluc3QpXSA6ICZmb3BzW0ZPUF9UT19JRFgob3ApXTsKKwogCS8qCiAJICogZmN2dGRzIHRha2VzIGFuIHNOIHJlZ2lzdGVyIG51bWJlciBhcyBkZXN0aW5hdGlvbiwgbm90IGROLgogCSAqIEl0IGFsc28gYWx3YXlzIG9wZXJhdGVzIG9uIHNjYWxhcnMuCiAJICovCi0JaWYgKChpbnN0ICYgRkVYVF9NQVNLKSA9PSBGRVhUX0ZDVlQpIHsKLQkJdmVjbGVuID0gMDsKKwlpZiAoZm9wLT5mbGFncyAmIE9QX1NEKQogCQlkZXN0ID0gdmZwX2dldF9zZChpbnN0KTsKLQl9IGVsc2UKKwllbHNlCiAJCWRlc3QgPSB2ZnBfZ2V0X2RkKGluc3QpOwogCiAJLyoKIAkgKiBJZiBkZXN0aW5hdGlvbiBiYW5rIGlzIHplcm8sIHZlY3RvciBsZW5ndGggaXMgYWx3YXlzICcxJy4KIAkgKiBBUk0gRERJMDEwMEYgQzUuMS4zLCBDNS4zLjIuCiAJICovCi0JaWYgKEZSRUdfQkFOSyhkZXN0KSA9PSAwKQorCWlmICgoZm9wLT5mbGFncyAmIE9QX1NDQUxBUikgfHwgKEZSRUdfQkFOSyhkZXN0KSA9PSAwKSkKIAkJdmVjbGVuID0gMDsKKwllbHNlCisJCXZlY2xlbiA9IGZwc2NyICYgRlBTQ1JfTEVOR1RIX01BU0s7CiAKIAlwcl9kZWJ1ZygiVkZQOiB2ZWNzdHJpZGU9JXUgdmVjbGVuPSV1XG4iLCB2ZWNzdHJpZGUsCiAJCSAodmVjbGVuID4+IEZQU0NSX0xFTkdUSF9CSVQpICsgMSk7CiAKLQlmb3AgPSAob3AgPT0gRk9QX0VYVCkgPyBmb3BfZXh0Zm5zW0ZFWFRfVE9fSURYKGluc3QpXSA6IGZvcF9mbnNbRk9QX1RPX0lEWChvcCldOwotCWlmICghZm9wKQorCWlmICghZm9wLT5mbikKIAkJZ290byBpbnZhbGlkOwogCiAJZm9yICh2ZWNpdHIgPSAwOyB2ZWNpdHIgPD0gdmVjbGVuOyB2ZWNpdHIgKz0gMSA8PCBGUFNDUl9MRU5HVEhfQklUKSB7CiAJCXUzMiBleGNlcHQ7CisJCWNoYXIgdHlwZTsKIAotCQlpZiAob3AgPT0gRk9QX0VYVCAmJiAoaW5zdCAmIEZFWFRfTUFTSykgPT0gRkVYVF9GQ1ZUKQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKHMldSkgPSBvcFsldV0gKGQldSlcbiIsCisJCXR5cGUgPSBmb3AtPmZsYWdzICYgT1BfU0QgPyAncycgOiAnZCc7CisJCWlmIChvcCA9PSBGT1BfRVhUKQorCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKCVjJXUpID0gb3BbJXVdIChkJXUpXG4iLAogCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGVzdCwgZG4sIGRtKTsKLQkJZWxzZSBpZiAob3AgPT0gRk9QX0VYVCkKLQkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gb3BbJXVdIChkJXUpXG4iLAotCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwKLQkJCQkgZGVzdCwgZG4sIGRtKTsKKwkJCQkgdHlwZSwgZGVzdCwgZG4sIGRtKTsKIAkJZWxzZQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKGQldSkgPSAoZCV1KSBvcFsldV0gKGQldSlcbiIsCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoJWMldSkgPSAoZCV1KSBvcFsldV0gKGQldSlcbiIsCiAJCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULAotCQkJCSBkZXN0LCBkbiwgRk9QX1RPX0lEWChvcCksIGRtKTsKKwkJCQkgdHlwZSwgZGVzdCwgZG4sIEZPUF9UT19JRFgob3ApLCBkbSk7CiAKLQkJZXhjZXB0ID0gZm9wKGRlc3QsIGRuLCBkbSwgZnBzY3IpOworCQlleGNlcHQgPSBmb3AtPmZuKGRlc3QsIGRuLCBkbSwgZnBzY3IpOwogCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZDogZXhjZXB0aW9ucz0lMDh4XG4iLAogCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCBleGNlcHQpOwogCiAJCWV4Y2VwdGlvbnMgfD0gZXhjZXB0OwogCiAJCS8qCi0JCSAqIFRoaXMgZW5zdXJlcyB0aGF0IGNvbXBhcmlzb25zIG9ubHkgb3BlcmF0ZSBvbiBzY2FsYXJzOwotCQkgKiBjb21wYXJpc29ucyBhbHdheXMgcmV0dXJuIHdpdGggb25lIEZQU0NSIHN0YXR1cyBiaXQgc2V0LgotCQkgKi8KLQkJaWYgKGV4Y2VwdCAmIChGUFNDUl9OfEZQU0NSX1p8RlBTQ1JfQ3xGUFNDUl9WKSkKLQkJCWJyZWFrOwotCi0JCS8qCiAJCSAqIENIRUNLOiBJdCBhcHBlYXJzIHRvIGJlIHVuZGVmaW5lZCB3aGV0aGVyIHdlIHN0b3Agd2hlbgogCQkgKiB3ZSBlbmNvdW50ZXIgYW4gZXhjZXB0aW9uLiAgV2UgY29udGludWUuCiAJCSAqLwotCiAJCWRlc3QgPSBGUkVHX0JBTksoZGVzdCkgKyAoKEZSRUdfSURYKGRlc3QpICsgdmVjc3RyaWRlKSAmIDYpOwogCQlkbiA9IEZSRUdfQkFOSyhkbikgKyAoKEZSRUdfSURYKGRuKSArIHZlY3N0cmlkZSkgJiA2KTsKIAkJaWYgKEZSRUdfQkFOSyhkbSkgIT0gMCkKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBpbnN0ci5oIGIvYXJjaC9hcm0vdmZwL3ZmcGluc3RyLmgKaW5kZXggNmM4MTlhZS4uN2YzNDNhNCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcGluc3RyLmgKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcGluc3RyLmgKQEAgLTczLDE0ICs3MywxNCBAQAogCiAjZGVmaW5lIGZtcngoX3ZmcF8pICh7CQkJXAogCXUzMiBfX3Y7CQkJXAotCWFzbSgibXJjJT8gcDEwLCA3LCAlMCwgIiB2ZnByZWcoX3ZmcF8pICIsIGNyMCwgMCBAIGZtcngJJTAsICIgI192ZnBfCVwKLQkgICAgOiAiPXIiIChfX3YpKTsJCVwKKwlhc20oIm1yYyBwMTAsIDcsICUwLCAiIHZmcHJlZyhfdmZwXykgIiwgY3IwLCAwIEAgZm1yeAklMCwgIiAjX3ZmcF8JXAorCSAgICA6ICI9ciIgKF9fdikgOiA6ICJjYyIpOwlcCiAJX192OwkJCQlcCiAgfSkKIAogI2RlZmluZSBmbXhyKF92ZnBfLF92YXJfKQkJXAotCWFzbSgibWNyJT8gcDEwLCA3LCAlMCwgIiB2ZnByZWcoX3ZmcF8pICIsIGNyMCwgMCBAIGZteHIJIiAjX3ZmcF8gIiwgJTAiCVwKLQkgICA6IDogInIiIChfdmFyXykpCisJYXNtKCJtY3IgcDEwLCA3LCAlMCwgIiB2ZnByZWcoX3ZmcF8pICIsIGNyMCwgMCBAIGZteHIJIiAjX3ZmcF8gIiwgJTAiCVwKKwkgICA6IDogInIiIChfdmFyXykgOiAiY2MiKQogCiB1MzIgdmZwX3NpbmdsZV9jcGRvKHUzMiBpbnN0LCB1MzIgZnBzY3IpOwogdTMyIHZmcF9zaW5nbGVfY3BydCh1MzIgaW5zdCwgdTMyIGZwc2NyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CmRpZmYgLS1naXQgYS9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMgYi9hcmNoL2FybS92ZnAvdmZwbW9kdWxlLmMKaW5kZXggNDE3OGY2Yy4uZGVkYmI0NCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vdmZwL3ZmcG1vZHVsZS5jCisrKyBiL2FyY2gvYXJtL3ZmcC92ZnBtb2R1bGUuYwpAQCAtNDAsMTAgKzQwLDE5IEBACiBzdGF0aWMgaW50IHZmcF9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY21kLCB2b2lkICp2KQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGhyZWFkID0gdjsKLQl1bmlvbiB2ZnBfc3RhdGUgKnZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOworCXVuaW9uIHZmcF9zdGF0ZSAqdmZwOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRIUkVBRF9OT1RJRllfRkxVU0g6CisJaWYgKGxpa2VseShjbWQgPT0gVEhSRUFEX05PVElGWV9TV0lUQ0gpKSB7CisJCS8qCisJCSAqIEFsd2F5cyBkaXNhYmxlIFZGUCBzbyB3ZSBjYW4gbGF6aWx5IHNhdmUvcmVzdG9yZSB0aGUKKwkJICogb2xkIHN0YXRlLgorCQkgKi8KKwkJZm14cihGUEVYQywgZm1yeChGUEVYQykgJiB+RlBFWENfRU5BQkxFKTsKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCX0KKworCXZmcCA9ICZ0aHJlYWQtPnZmcHN0YXRlOworCWlmIChjbWQgPT0gVEhSRUFEX05PVElGWV9GTFVTSCkgewogCQkvKgogCQkgKiBQZXItdGhyZWFkIFZGUCBpbml0aWFsaXNhdGlvbi4KIAkJICovCkBAIC01NiwyOSArNjUsMTIgQEAKIAkJICogRGlzYWJsZSBWRlAgdG8gZW5zdXJlIHdlIGluaXRpYWxpc2UgaXQgZmlyc3QuCiAJCSAqLwogCQlmbXhyKEZQRVhDLCBmbXJ4KEZQRVhDKSAmIH5GUEVYQ19FTkFCTEUpOwotCi0JCS8qCi0JCSAqIEZBTExUSFJPVUdIOiBFbnN1cmUgd2UgZG9uJ3QgdHJ5IHRvIG92ZXJ3cml0ZSBvdXIgbmV3bHkKLQkJICogaW5pdGlhbGlzZWQgc3RhdGUgaW5mb3JtYXRpb24gb24gdGhlIGZpcnN0IGZhdWx0LgotCQkgKi8KLQotCWNhc2UgVEhSRUFEX05PVElGWV9SRUxFQVNFOgotCQkvKgotCQkgKiBQZXItdGhyZWFkIFZGUCBjbGVhbnVwLgotCQkgKi8KLQkJaWYgKGxhc3RfVkZQX2NvbnRleHQgPT0gdmZwKQotCQkJbGFzdF9WRlBfY29udGV4dCA9IE5VTEw7Ci0JCWJyZWFrOwotCi0JY2FzZSBUSFJFQURfTk9USUZZX1NXSVRDSDoKLQkJLyoKLQkJICogQWx3YXlzIGRpc2FibGUgVkZQIHNvIHdlIGNhbiBsYXppbHkgc2F2ZS9yZXN0b3JlIHRoZQotCQkgKiBvbGQgc3RhdGUuCi0JCSAqLwotCQlmbXhyKEZQRVhDLCBmbXJ4KEZQRVhDKSAmIH5GUEVYQ19FTkFCTEUpOwotCQlicmVhazsKIAl9CiAKKwkvKiBmbHVzaCBhbmQgcmVsZWFzZSBjYXNlOiBQZXItdGhyZWFkIFZGUCBjbGVhbnVwLiAqLworCWlmIChsYXN0X1ZGUF9jb250ZXh0ID09IHZmcCkKKwkJbGFzdF9WRlBfY29udGV4dCA9IE5VTEw7CisKIAlyZXR1cm4gTk9USUZZX0RPTkU7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYyBiL2FyY2gvYXJtL3ZmcC92ZnBzaW5nbGUuYwppbmRleCA4ZjZjMTc5Li5hYjVlOTUwIDEwMDY0NAotLS0gYS9hcmNoL2FybS92ZnAvdmZwc2luZ2xlLmMKKysrIGIvYXJjaC9hcm0vdmZwL3ZmcHNpbmdsZS5jCkBAIC03MDIsMjIgKzcwMiwyMiBAQAogCXJldHVybiB2ZnBfc2luZ2xlX2Z0b3NpKHNkLCB1bnVzZWQsIG0sIEZQU0NSX1JPVU5EX1RPWkVSTyk7CiB9CiAKLXN0YXRpYyB1MzIgKCogY29uc3QgZm9wX2V4dGZuc1szMl0pKGludCBzZCwgaW50IHVudXNlZCwgczMyIG0sIHUzMiBmcHNjcikgPSB7Ci0JW0ZFWFRfVE9fSURYKEZFWFRfRkNQWSldCT0gdmZwX3NpbmdsZV9mY3B5LAotCVtGRVhUX1RPX0lEWChGRVhUX0ZBQlMpXQk9IHZmcF9zaW5nbGVfZmFicywKLQlbRkVYVF9UT19JRFgoRkVYVF9GTkVHKV0JPSB2ZnBfc2luZ2xlX2ZuZWcsCi0JW0ZFWFRfVE9fSURYKEZFWFRfRlNRUlQpXQk9IHZmcF9zaW5nbGVfZnNxcnQsCi0JW0ZFWFRfVE9fSURYKEZFWFRfRkNNUCldCT0gdmZwX3NpbmdsZV9mY21wLAotCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVBFKV0JPSB2ZnBfc2luZ2xlX2ZjbXBlLAotCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVBaKV0JPSB2ZnBfc2luZ2xlX2ZjbXB6LAotCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVBFWildCT0gdmZwX3NpbmdsZV9mY21wZXosCi0JW0ZFWFRfVE9fSURYKEZFWFRfRkNWVCldCT0gdmZwX3NpbmdsZV9mY3Z0ZCwKLQlbRkVYVF9UT19JRFgoRkVYVF9GVUlUTyldCT0gdmZwX3NpbmdsZV9mdWl0bywKLQlbRkVYVF9UT19JRFgoRkVYVF9GU0lUTyldCT0gdmZwX3NpbmdsZV9mc2l0bywKLQlbRkVYVF9UT19JRFgoRkVYVF9GVE9VSSldCT0gdmZwX3NpbmdsZV9mdG91aSwKLQlbRkVYVF9UT19JRFgoRkVYVF9GVE9VSVopXQk9IHZmcF9zaW5nbGVfZnRvdWl6LAotCVtGRVhUX1RPX0lEWChGRVhUX0ZUT1NJKV0JPSB2ZnBfc2luZ2xlX2Z0b3NpLAotCVtGRVhUX1RPX0lEWChGRVhUX0ZUT1NJWildCT0gdmZwX3NpbmdsZV9mdG9zaXosCitzdGF0aWMgc3RydWN0IG9wIGZvcHNfZXh0WzMyXSA9IHsKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ1BZKV0JPSB7IHZmcF9zaW5nbGVfZmNweSwgICAwIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRkFCUyldCT0geyB2ZnBfc2luZ2xlX2ZhYnMsICAgMCB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZORUcpXQk9IHsgdmZwX3NpbmdsZV9mbmVnLCAgIDAgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GU1FSVCldCT0geyB2ZnBfc2luZ2xlX2ZzcXJ0LCAgMCB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVApXQk9IHsgdmZwX3NpbmdsZV9mY21wLCAgIE9QX1NDQUxBUiB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZDTVBFKV0JPSB7IHZmcF9zaW5nbGVfZmNtcGUsICBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ01QWildCT0geyB2ZnBfc2luZ2xlX2ZjbXB6LCAgT1BfU0NBTEFSIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRkNNUEVaKV0JPSB7IHZmcF9zaW5nbGVfZmNtcGV6LCBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GQ1ZUKV0JPSB7IHZmcF9zaW5nbGVfZmN2dGQsICBPUF9TQ0FMQVJ8T1BfREQgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVUlUTyldCT0geyB2ZnBfc2luZ2xlX2Z1aXRvLCAgT1BfU0NBTEFSIH0sCisJW0ZFWFRfVE9fSURYKEZFWFRfRlNJVE8pXQk9IHsgdmZwX3NpbmdsZV9mc2l0bywgIE9QX1NDQUxBUiB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZUT1VJKV0JPSB7IHZmcF9zaW5nbGVfZnRvdWksICBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9VSVopXQk9IHsgdmZwX3NpbmdsZV9mdG91aXosIE9QX1NDQUxBUiB9LAorCVtGRVhUX1RPX0lEWChGRVhUX0ZUT1NJKV0JPSB7IHZmcF9zaW5nbGVfZnRvc2ksICBPUF9TQ0FMQVIgfSwKKwlbRkVYVF9UT19JRFgoRkVYVF9GVE9TSVopXQk9IHsgdmZwX3NpbmdsZV9mdG9zaXosIE9QX1NDQUxBUiB9LAogfTsKIAogCkBAIC0xMTUxLDE2ICsxMTUxLDE2IEBACiAJcmV0dXJuIEZQU0NSX0lPQzsKIH0KIAotc3RhdGljIHUzMiAoKiBjb25zdCBmb3BfZm5zWzE2XSkoaW50IHNkLCBpbnQgc24sIHMzMiBtLCB1MzIgZnBzY3IpID0gewotCVtGT1BfVE9fSURYKEZPUF9GTUFDKV0JPSB2ZnBfc2luZ2xlX2ZtYWMsCi0JW0ZPUF9UT19JRFgoRk9QX0ZOTUFDKV0JPSB2ZnBfc2luZ2xlX2ZubWFjLAotCVtGT1BfVE9fSURYKEZPUF9GTVNDKV0JPSB2ZnBfc2luZ2xlX2Ztc2MsCi0JW0ZPUF9UT19JRFgoRk9QX0ZOTVNDKV0JPSB2ZnBfc2luZ2xlX2ZubXNjLAotCVtGT1BfVE9fSURYKEZPUF9GTVVMKV0JPSB2ZnBfc2luZ2xlX2ZtdWwsCi0JW0ZPUF9UT19JRFgoRk9QX0ZOTVVMKV0JPSB2ZnBfc2luZ2xlX2ZubXVsLAotCVtGT1BfVE9fSURYKEZPUF9GQUREKV0JPSB2ZnBfc2luZ2xlX2ZhZGQsCi0JW0ZPUF9UT19JRFgoRk9QX0ZTVUIpXQk9IHZmcF9zaW5nbGVfZnN1YiwKLQlbRk9QX1RPX0lEWChGT1BfRkRJVildCT0gdmZwX3NpbmdsZV9mZGl2LAorc3RhdGljIHN0cnVjdCBvcCBmb3BzWzE2XSA9IHsKKwlbRk9QX1RPX0lEWChGT1BfRk1BQyldCT0geyB2ZnBfc2luZ2xlX2ZtYWMsICAwIH0sCisJW0ZPUF9UT19JRFgoRk9QX0ZOTUFDKV0JPSB7IHZmcF9zaW5nbGVfZm5tYWMsIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRk1TQyldCT0geyB2ZnBfc2luZ2xlX2Ztc2MsICAwIH0sCisJW0ZPUF9UT19JRFgoRk9QX0ZOTVNDKV0JPSB7IHZmcF9zaW5nbGVfZm5tc2MsIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRk1VTCldCT0geyB2ZnBfc2luZ2xlX2ZtdWwsICAwIH0sCisJW0ZPUF9UT19JRFgoRk9QX0ZOTVVMKV0JPSB7IHZmcF9zaW5nbGVfZm5tdWwsIDAgfSwKKwlbRk9QX1RPX0lEWChGT1BfRkFERCldCT0geyB2ZnBfc2luZ2xlX2ZhZGQsICAwIH0sCisJW0ZPUF9UT19JRFgoRk9QX0ZTVUIpXQk9IHsgdmZwX3NpbmdsZV9mc3ViLCAgMCB9LAorCVtGT1BfVE9fSURYKEZPUF9GRElWKV0JPSB7IHZmcF9zaW5nbGVfZmRpdiwgIDAgfSwKIH07CiAKICNkZWZpbmUgRlJFR19CQU5LKHgpCSgoeCkgJiAweDE4KQpAQCAtMTE3NCw3MCArMTE3NCw2MyBAQAogCXVuc2lnbmVkIGludCBzbiA9IHZmcF9nZXRfc24oaW5zdCk7CiAJdW5zaWduZWQgaW50IHNtID0gdmZwX2dldF9zbShpbnN0KTsKIAl1bnNpZ25lZCBpbnQgdmVjaXRyLCB2ZWNsZW4sIHZlY3N0cmlkZTsKLQl1MzIgKCpmb3ApKGludCwgaW50LCBzMzIsIHUzMik7CisJc3RydWN0IG9wICpmb3A7CiAKLQl2ZWNsZW4gPSBmcHNjciAmIEZQU0NSX0xFTkdUSF9NQVNLOwogCXZlY3N0cmlkZSA9IDEgKyAoKGZwc2NyICYgRlBTQ1JfU1RSSURFX01BU0spID09IEZQU0NSX1NUUklERV9NQVNLKTsKIAorCWZvcCA9IChvcCA9PSBGT1BfRVhUKSA/ICZmb3BzX2V4dFtGRVhUX1RPX0lEWChpbnN0KV0gOiAmZm9wc1tGT1BfVE9fSURYKG9wKV07CisKIAkvKgogCSAqIGZjdnRzZCB0YWtlcyBhIGROIHJlZ2lzdGVyIG51bWJlciBhcyBkZXN0aW5hdGlvbiwgbm90IHNOLgogCSAqIFRlY2huaWNhbGx5LCBpZiBiaXQgMCBvZiBkZCBpcyBzZXQsIHRoaXMgaXMgYW4gaW52YWxpZAogCSAqIGluc3RydWN0aW9uLiAgSG93ZXZlciwgd2UgaWdub3JlIHRoaXMgZm9yIGVmZmljaWVuY3kuCiAJICogSXQgYWxzbyBvbmx5IG9wZXJhdGVzIG9uIHNjYWxhcnMuCiAJICovCi0JaWYgKChpbnN0ICYgRkVYVF9NQVNLKSA9PSBGRVhUX0ZDVlQpIHsKLQkJdmVjbGVuID0gMDsKKwlpZiAoZm9wLT5mbGFncyAmIE9QX0REKQogCQlkZXN0ID0gdmZwX2dldF9kZChpbnN0KTsKLQl9IGVsc2UKKwllbHNlCiAJCWRlc3QgPSB2ZnBfZ2V0X3NkKGluc3QpOwogCiAJLyoKIAkgKiBJZiBkZXN0aW5hdGlvbiBiYW5rIGlzIHplcm8sIHZlY3RvciBsZW5ndGggaXMgYWx3YXlzICcxJy4KIAkgKiBBUk0gRERJMDEwMEYgQzUuMS4zLCBDNS4zLjIuCiAJICovCi0JaWYgKEZSRUdfQkFOSyhkZXN0KSA9PSAwKQorCWlmICgoZm9wLT5mbGFncyAmIE9QX1NDQUxBUikgfHwgRlJFR19CQU5LKGRlc3QpID09IDApCiAJCXZlY2xlbiA9IDA7CisJZWxzZQorCQl2ZWNsZW4gPSBmcHNjciAmIEZQU0NSX0xFTkdUSF9NQVNLOwogCiAJcHJfZGVidWcoIlZGUDogdmVjc3RyaWRlPSV1IHZlY2xlbj0ldVxuIiwgdmVjc3RyaWRlLAogCQkgKHZlY2xlbiA+PiBGUFNDUl9MRU5HVEhfQklUKSArIDEpOwogCi0JZm9wID0gKG9wID09IEZPUF9FWFQpID8gZm9wX2V4dGZuc1tGRVhUX1RPX0lEWChpbnN0KV0gOiBmb3BfZm5zW0ZPUF9UT19JRFgob3ApXTsKLQlpZiAoIWZvcCkKKwlpZiAoIWZvcC0+Zm4pCiAJCWdvdG8gaW52YWxpZDsKIAogCWZvciAodmVjaXRyID0gMDsgdmVjaXRyIDw9IHZlY2xlbjsgdmVjaXRyICs9IDEgPDwgRlBTQ1JfTEVOR1RIX0JJVCkgewogCQlzMzIgbSA9IHZmcF9nZXRfZmxvYXQoc20pOwogCQl1MzIgZXhjZXB0OworCQljaGFyIHR5cGU7CiAKLQkJaWYgKG9wID09IEZPUF9FWFQgJiYgKGluc3QgJiBGRVhUX01BU0spID09IEZFWFRfRkNWVCkKLQkJCXByX2RlYnVnKCJWRlA6IGl0ciVkIChkJXUpID0gb3BbJXVdIChzJXU9JTA4eClcbiIsCi0JCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCBkZXN0LCBzbiwgc20sIG0pOwotCQllbHNlIGlmIChvcCA9PSBGT1BfRVhUKQotCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKHMldSkgPSBvcFsldV0gKHMldT0lMDh4KVxuIiwKLQkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGRlc3QsIHNuLCBzbSwgbSk7CisJCXR5cGUgPSBmb3AtPmZsYWdzICYgT1BfREQgPyAnZCcgOiAncyc7CisJCWlmIChvcCA9PSBGT1BfRVhUKQorCQkJcHJfZGVidWcoIlZGUDogaXRyJWQgKCVjJXUpID0gb3BbJXVdIChzJXU9JTA4eClcbiIsCisJCQkJIHZlY2l0ciA+PiBGUFNDUl9MRU5HVEhfQklULCB0eXBlLCBkZXN0LCBzbiwKKwkJCQkgc20sIG0pOwogCQllbHNlCi0JCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAocyV1KSA9IChzJXUpIG9wWyV1XSAocyV1PSUwOHgpXG4iLAotCQkJCSB2ZWNpdHIgPj4gRlBTQ1JfTEVOR1RIX0JJVCwgZGVzdCwgc24sCisJCQlwcl9kZWJ1ZygiVkZQOiBpdHIlZCAoJWMldSkgPSAocyV1KSBvcFsldV0gKHMldT0lMDh4KVxuIiwKKwkJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIHR5cGUsIGRlc3QsIHNuLAogCQkJCSBGT1BfVE9fSURYKG9wKSwgc20sIG0pOwogCi0JCWV4Y2VwdCA9IGZvcChkZXN0LCBzbiwgbSwgZnBzY3IpOworCQlleGNlcHQgPSBmb3AtPmZuKGRlc3QsIHNuLCBtLCBmcHNjcik7CiAJCXByX2RlYnVnKCJWRlA6IGl0ciVkOiBleGNlcHRpb25zPSUwOHhcbiIsCiAJCQkgdmVjaXRyID4+IEZQU0NSX0xFTkdUSF9CSVQsIGV4Y2VwdCk7CiAKIAkJZXhjZXB0aW9ucyB8PSBleGNlcHQ7CiAKIAkJLyoKLQkJICogVGhpcyBlbnN1cmVzIHRoYXQgY29tcGFyaXNvbnMgb25seSBvcGVyYXRlIG9uIHNjYWxhcnM7Ci0JCSAqIGNvbXBhcmlzb25zIGFsd2F5cyByZXR1cm4gd2l0aCBvbmUgRlBTQ1Igc3RhdHVzIGJpdCBzZXQuCi0JCSAqLwotCQlpZiAoZXhjZXB0ICYgKEZQU0NSX058RlBTQ1JfWnxGUFNDUl9DfEZQU0NSX1YpKQotCQkJYnJlYWs7Ci0KLQkJLyoKIAkJICogQ0hFQ0s6IEl0IGFwcGVhcnMgdG8gYmUgdW5kZWZpbmVkIHdoZXRoZXIgd2Ugc3RvcCB3aGVuCiAJCSAqIHdlIGVuY291bnRlciBhbiBleGNlcHRpb24uICBXZSBjb250aW51ZS4KIAkJICovCi0KIAkJZGVzdCA9IEZSRUdfQkFOSyhkZXN0KSArICgoRlJFR19JRFgoZGVzdCkgKyB2ZWNzdHJpZGUpICYgNyk7CiAJCXNuID0gRlJFR19CQU5LKHNuKSArICgoRlJFR19JRFgoc24pICsgdmVjc3RyaWRlKSAmIDcpOwogCQlpZiAoRlJFR19CQU5LKHNtKSAhPSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9rZXJuZWwvdGltZS5jIGIvYXJjaC9hcm0yNi9rZXJuZWwvdGltZS5jCmluZGV4IGRiNjNkNzUuLjEyMDY0NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2FybTI2L2tlcm5lbC90aW1lLmMKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvYy5oPgogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIC8qIHRoaXMgbmVlZHMgYSBiZXR0ZXIgaG9tZSAqLwogREVGSU5FX1NQSU5MT0NLKHJ0Y19sb2NrKTsKIApAQCAtMTM2LDE2ICsxMzQsMTEgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjLCBsb3N0OworCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwogCiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAkJdXNlYyA9IGdldHRpbWVvZmZzZXQoKTsKLQotCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKLQkJaWYgKGxvc3QpCi0JCQl1c2VjICs9IGxvc3QgKiBVU0VDU19QRVJfSklGRlk7Ci0KIAkJc2VjID0geHRpbWUudHZfc2VjOwogCQl1c2VjICs9IHh0aW1lLnR2X25zZWMgLyAxMDAwOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwpAQCAtMTc0LDggKzE2Nyw3IEBACiAJICogd2FsbCB0aW1lLiAgRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheSgpIHdvdWxkIGhhdmUKIAkgKiBkb25lLCBhbmQgdGhlbiB1bmRvIGl0IQogCSAqLwotCXR2LT50dl9uc2VjIC09IDEwMDAgKiAoZ2V0dGltZW9mZnNldCgpICsKLQkJCShqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIFVTRUNTX1BFUl9KSUZGWSk7CisJdHYtPnR2X25zZWMgLT0gMTAwMCAqIGdldHRpbWVvZmZzZXQoKTsKIAogCXdoaWxlICh0di0+dHZfbnNlYyA8IDApIHsKIAkJdHYtPnR2X25zZWMgKz0gTlNFQ19QRVJfU0VDOwpAQCAtMTk0LDcgKzE4Niw3IEBACiAKIHN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLSAgICAgICAgZG9fdGltZXIocmVncyk7CisgICAgICAgIGRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0yNi9tbS9mYXVsdC5jIGIvYXJjaC9hcm0yNi9tbS9mYXVsdC5jCmluZGV4IDc2MTkzOGIuLmExZjZkOGEgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtMjYvbW0vZmF1bHQuYworKysgYi9hcmNoL2FybTI2L21tL2ZhdWx0LmMKQEAgLTE1NSw3ICsxNTUsNyBAQAogCSAqLwogZ29vZF9hcmVhOgogCWlmIChSRUFEX0ZBVUxUKGZzcikpIC8qIHJlYWQ/ICovCi0JCW1hc2sgPSBWTV9SRUFEfFZNX0VYRUM7CisJCW1hc2sgPSBWTV9SRUFEfFZNX0VYRUN8Vk1fV1JJVEU7CiAJZWxzZQogCQltYXNrID0gVk1fV1JJVEU7CiAKQEAgLTE4NSw3ICsxODUsNyBAQAogCX0KIAogCWZhdWx0ID0gLTM7IC8qIG91dCBvZiBtZW1vcnkgKi8KLQlpZiAodHNrLT5waWQgIT0gMSkKKwlpZiAoIWlzX2luaXQodHNrKSkKIAkJZ290byBvdXQ7CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jIGIvYXJjaC9hdnIzMi9rZXJuZWwvdGltZS5jCmluZGV4IGIwZTZiNTguLjNlNTZiOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXZyMzIva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2F2cjMyL2tlcm5lbC90aW1lLmMKQEAgLTE0OCw3ICsxNDgsNyBAQAogCSAqIENhbGwgdGhlIGdlbmVyaWMgdGltZXIgaW50ZXJydXB0IGhhbmRsZXIKIAkgKi8KIAl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKIAl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gvYXZyMzIvbW0vaW9yZW1hcC5jIGIvYXJjaC9hdnIzMi9tbS9pb3JlbWFwLmMKaW5kZXggNTM2MDIxOC4uOGNmZWM2NSAxMDA2NDQKLS0tIGEvYXJjaC9hdnIzMi9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9hdnIzMi9tbS9pb3JlbWFwLmMKQEAgLTcsMTE5ICs3LDExIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlbWFwX2FyZWFfcHRlKHB0ZV90ICpwdGUsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCQkgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwKLQkJCQkgIHBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKLQlkbyB7Ci0JCVdBUk5fT04oIXB0ZV9ub25lKCpwdGUpKTsKLQotCQlzZXRfcHRlKHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKLQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7Ci0JCXBmbisrOwotCQlwdGUrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAotCQkJCSB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCi0JCQkJIHBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCi0JcGh5c19hZGRyIC09IGFkZHJlc3M7Ci0KLQlkbyB7Ci0JCXB0ZV90ICpwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0KLQkJbmV4dCA9IChhZGRyZXNzICsgUE1EX1NJWkUpICYgUE1EX01BU0s7Ci0JCWlmIChyZW1hcF9hcmVhX3B0ZShwdGUsIGFkZHJlc3MsIG5leHQsCi0JCQkJICAgYWRkcmVzcyArIHBoeXNfYWRkciwgcHJvdCkpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlhZGRyZXNzID0gbmV4dDsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJlbWFwX2FyZWFfcHVkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKLQkJCSAgdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJICBwZ3Byb3RfdCBwcm90KQotewotCXVuc2lnbmVkIGxvbmcgbmV4dDsKLQotCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCi0JZG8gewotCQlwbWRfdCAqcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHJlc3MpOwotCQlpZiAoIXBtZCkKLQkJCXJldHVybiAtRU5PTUVNOwotCQluZXh0ID0gKGFkZHJlc3MgKyBQVURfU0laRSkgJiBQVURfTUFTSzsKLQkJaWYgKHJlbWFwX2FyZWFfcG1kKHBtZCwgYWRkcmVzcywgbmV4dCwKLQkJCQkgICBwaHlzX2FkZHIgKyBhZGRyZXNzLCBwcm90KSkKLQkJCXJldHVybiAtRU5PTUVNOwotCi0JCWFkZHJlc3MgPSBuZXh0OwotCQlwdWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIGFkZHJlc3MgPCBlbmQpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJICAgIHNpemVfdCBzaXplLCBwZ3Byb3RfdCBwcm90KQotewotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCXBnZF90ICpwZ2Q7Ci0JaW50IGVyciA9IDA7Ci0KLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQotCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwotCi0Jc3Bpbl9sb2NrKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7Ci0JZG8gewotCQlwdWRfdCAqcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2QsIGFkZHJlc3MpOwotCi0JCWVyciA9IC1FTk9NRU07Ci0JCWlmICghcHVkKQotCQkJYnJlYWs7Ci0KLQkJbmV4dCA9IChhZGRyZXNzICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOwotCQlpZiAobmV4dCA8IGFkZHJlc3MgfHwgbmV4dCA+IGVuZCkKLQkJCW5leHQgPSBlbmQ7Ci0JCWVyciA9IHJlbWFwX2FyZWFfcHVkKHB1ZCwgYWRkcmVzcywgbmV4dCwKLQkJCQkgICAgIHBoeXNfYWRkciArIGFkZHJlc3MsIHByb3QpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0KLQkJYWRkcmVzcyA9IG5leHQ7Ci0JCXBnZCsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQotCXNwaW5fdW5sb2NrKCZpbml0X21tLnBhZ2VfdGFibGVfbG9jayk7Ci0JZmx1c2hfdGxiX2FsbCgpOwotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiBSZS1tYXAgYW4gYXJiaXRyYXJ5IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UgaW50byB0aGUga2VybmVsIHZpcnR1YWwKICAqIGFkZHJlc3Mgc3BhY2UuIE5lZWRlZCB3aGVuIHRoZSBrZXJuZWwgd2FudHMgdG8gYWNjZXNzIHBoeXNpY2FsCkBAIC0xMjgsNyArMjAsNyBAQAogdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHNpemVfdCBzaXplLAogCQkJdW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQl2b2lkICphZGRyOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBsYXN0X2FkZHI7CiAJcGdwcm90X3QgcHJvdDsKQEAgLTE1OSw3ICs1MSw3IEBACiAJcGh5c19hZGRyICY9IFBBR0VfTUFTSzsKIAlzaXplID0gUEFHRV9BTElHTihsYXN0X2FkZHIgKyAxKSAtIHBoeXNfYWRkcjsKIAotCXByb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWQorCXByb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfR0xPQkFMIHwgX1BBR0VfUlcgfCBfUEFHRV9ESVJUWQogCQkJfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1RZUEVfU01BTEwgfCBmbGFncyk7CiAKIAkvKgpAQCAtMTY5LDkgKzYxLDkgQEAKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKLQlhZGRyID0gYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZylhZGRyLCBwaHlzX2FkZHIsIHNpemUsIHByb3QpKSB7Ci0JCXZ1bm1hcChhZGRyKTsKKwlhZGRyID0gKHVuc2lnbmVkIGxvbmcgKWFyZWEtPmFkZHI7CisJaWYgKGlvcmVtYXBfcGFnZV9yYW5nZShhZGRyLCBhZGRyICsgc2l6ZSwgcGh5c19hZGRyLCBwcm90KSkgeworCQl2dW5tYXAoKHZvaWQgKilhZGRyKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2F2cjMyL21tL3RsYi5jIGIvYXJjaC9hdnIzMi9tbS90bGIuYwppbmRleCA1ZDA1MjNiLi43YjA3MzA1IDEwMDY0NAotLS0gYS9hcmNoL2F2cjMyL21tL3RsYi5jCisrKyBiL2FyY2gvYXZyMzIvbW0vdGxiLmMKQEAgLTE1LDcgKzE1LDggQEAKIAogdm9pZCBzaG93X2R0bGJfZW50cnkodW5zaWduZWQgaW50IGluZGV4KQogewotCXVuc2lnbmVkIGludCB0bGJlaGksIHRsYmVoaV9zYXZlLCB0bGJlbG8sIG1tdWNyLCBtbXVjcl9zYXZlLCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgdGxiZWhpLCB0bGJlaGlfc2F2ZSwgdGxiZWxvLCBtbXVjciwgbW11Y3Jfc2F2ZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCW1tdWNyX3NhdmUgPSBzeXNyZWdfcmVhZChNTVVDUik7CkBAIC0zMDUsNyArMzA2LDggQEAKIAogc3RhdGljIGludCB0bGJfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnRsYiwgdm9pZCAqdikKIHsKLQl1bnNpZ25lZCBpbnQgdGxiZWhpLCB0bGJlaGlfc2F2ZSwgdGxiZWxvLCBtbXVjciwgbW11Y3Jfc2F2ZSwgZmxhZ3M7CisJdW5zaWduZWQgaW50IHRsYmVoaSwgdGxiZWhpX3NhdmUsIHRsYmVsbywgbW11Y3IsIG1tdWNyX3NhdmU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nICppbmRleCA9IHY7CiAKIAlpZiAoKmluZGV4ID09IDApCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MTAva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCmluZGV4IDljMjJiNzYuLmViYWNmMTQgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYxMC9rZXJuZWwvdGltZS5jCkBAIC0yMjcsNyArMjI3LDcgQEAKIAkKIAkvKiBjYWxsIHRoZSByZWFsIHRpbWVyIGludGVycnVwdCBoYW5kbGVyICovCiAKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKIAkKICAgICAgICAgY3Jpc19kb19wcm9maWxlKHJlZ3MpOyAvKiBTYXZlIHByb2ZpbGluZyBpbmZvcm1hdGlvbiAqLwogCmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvYXJjaC12MzIva2VybmVsL3RpbWUuYyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCmluZGV4IDUwZjNmOTMuLmJlMGEwMTYgMTAwNjQ0Ci0tLSBhL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvY3Jpcy9hcmNoLXYzMi9rZXJuZWwvdGltZS5jCkBAIC0yMTksNyArMjE5LDcgQEAKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCiAJLyogY2FsbCB0aGUgcmVhbCB0aW1lciBpbnRlcnJ1cHQgaGFuZGxlciAqLwotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogCiAJLyoKIAkgKiBJZiB3ZSBoYXZlIGFuIGV4dGVybmFsbHkgc3luY2hyb25pemVkIExpbnV4IGNsb2NrLCB0aGVuIHVwZGF0ZQpkaWZmIC0tZ2l0IGEvYXJjaC9jcmlzL2tlcm5lbC90aW1lLmMgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwppbmRleCA2NmJhODg5Li4wZjkyMTNjIDEwMDY0NAotLS0gYS9hcmNoL2NyaXMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2NyaXMva2VybmVsL3RpbWUuYwpAQCAtMzcsNyArMzcsNiBAQAogCiAjZGVmaW5lIFRJQ0tfU0laRSB0aWNrCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKIGV4dGVybiB1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsgLyogaW5pdC9tYWluLmMgKi8KIHVuc2lnbmVkIGxvbmcgbG9vcHNfcGVyX3VzZWM7CiAKQEAgLTU4LDExICs1Nyw2IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJdXNlYyA9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQl7Ci0JCXVuc2lnbmVkIGxvbmcgbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7Ci0JCWlmIChsb3N0KQotCQkJdXNlYyArPSBsb3N0ICogKDEwMDAwMDAgLyBIWik7Ci0JfQogCiAgICAgICAgIC8qCiAJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKQEAgLTEwMyw3ICs5Nyw2IEBACiAJICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKIAkgKi8KIAluc2VjIC09IGRvX2dldHRpbWVvZmZzZXQoKSAqIE5TRUNfUEVSX1VTRUM7Ci0JbnNlYyAtPSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiBUSUNLX05TRUM7CiAKIAl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwogCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CmRpZmYgLS1naXQgYS9hcmNoL2NyaXMvbW0vaW9yZW1hcC5jIGIvYXJjaC9jcmlzL21tL2lvcmVtYXAuYwppbmRleCAxNzgwZGYzLi44YjBiOTM0IDEwMDY0NAotLS0gYS9hcmNoL2NyaXMvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvY3Jpcy9tbS9pb3JlbWFwLmMKQEAgLTEwLDkzICsxMCwxMCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+Ci0jaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2FyY2gvbWVtbWFwLmg+CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZW1hcF9hcmVhX3B0ZShwdGVfdCAqIHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQlhZGRyZXNzICY9IH5QTURfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUE1EX1NJWkUpCi0JCWVuZCA9IFBNRF9TSVpFOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7Ci0JZG8gewotCQlpZiAoIXB0ZV9ub25lKCpwdGUpKSB7Ci0JCQlwcmludGsoInJlbWFwX2FyZWFfcHRlOiBwYWdlIGFscmVhZHkgZXhpc3RzXG4iKTsKLQkJCUJVRygpOwotCQl9Ci0JCXNldF9wdGUocHRlLCBta19wdGVfcGh5cyhwaHlzX2FkZHIsIHByb3QpKTsKLQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7Ci0JCXBoeXNfYWRkciArPSBQQUdFX1NJWkU7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgcHJvdCk7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwotCQlwbWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCi17Ci0JaW50IGVycm9yOwotCXBnZF90ICogZGlyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7Ci0KLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlkaXIgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHVkX3QgKnB1ZDsKLQkJcG1kX3QgKnBtZDsKLQotCQllcnJvciA9IC1FTk9NRU07Ci0JCXB1ZCA9IHB1ZF9hbGxvYygmaW5pdF9tbSwgZGlyLCBhZGRyZXNzKTsKLQkJaWYgKCFwdWQpCi0JCQlicmVhazsKLQkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHJlc3MpOwotCi0JCWlmICghcG1kKQotCQkJYnJlYWs7Ci0JCWlmIChyZW1hcF9hcmVhX3BtZChwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCi0JCQkJICAgcGh5c19hZGRyICsgYWRkcmVzcywgcHJvdCkpCi0JCQlicmVhazsKLQkJZXJyb3IgPSAwOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Ci0JCWRpcisrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQlmbHVzaF90bGJfYWxsKCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCiAvKgogICogR2VuZXJpYyBtYXBwaW5nIGZ1bmN0aW9uIChub3QgdmlzaWJsZSBvdXRzaWRlKToKICAqLwpAQCAtMTM1LDcgKzUyLDggQEAKIAlpZiAoIWFyZWEpCiAJCXJldHVybiBOVUxMOwogCWFkZHIgPSAodm9pZCBfX2lvbWVtICopYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBwcm90KSkgeworCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemUsCisJCQkgICAgICAgcGh5c19hZGRyLCBwcm90KSkgewogCQl2ZnJlZSgodm9pZCBfX2ZvcmNlICopYWRkcik7CiAJCXJldHVybiBOVUxMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2Zydi9rZXJuZWwvdGltZS5jCmluZGV4IDNkMDI4NGIuLjdlNTU4ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvZnJ2L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9mcnYva2VybmVsL3RpbWUuYwpAQCAtNzAsNyArNzAsNyBAQAogCSAqLwogCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwogCi0JZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIoMSk7CiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYyBiL2FyY2gvaDgzMDAva2VybmVsL3RpbWUuYwppbmRleCA2ODhhNTEwLi5lNTY5ZDE3IDEwMDY0NAotLS0gYS9hcmNoL2g4MzAwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9oODMwMC9rZXJuZWwvdGltZS5jCkBAIC00MSw3ICs0MSw3IEBACiAJLyogbWF5IG5lZWQgdG8ga2ljayB0aGUgaGFyZHdhcmUgdGltZXIgKi8KIAlwbGF0Zm9ybV90aW1lcl9lb2koKTsKIAotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L0tjb25maWcgYi9hcmNoL2kzODYvS2NvbmZpZwppbmRleCA3NTgwNDRmLi4zZmQyZjI1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYvS2NvbmZpZworKysgYi9hcmNoL2kzODYvS2NvbmZpZwpAQCAtNDAxLDYgKzQwMSw3IEBACiAKIGNvbmZpZyBNSUNST0NPREUKIAl0cmlzdGF0ZSAiL2Rldi9jcHUvbWljcm9jb2RlIC0gSW50ZWwgSUEzMiBDUFUgbWljcm9jb2RlIHN1cHBvcnQiCisJc2VsZWN0IEZXX0xPQURFUgogCS0tLWhlbHAtLS0KIAkgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCBhbHNvIHRvICIvZGV2IGZpbGUgc3lzdGVtIHN1cHBvcnQiIGluIHRoZQogCSAgJ0ZpbGUgc3lzdGVtcycgc2VjdGlvbiwgeW91IHdpbGwgYmUgYWJsZSB0byB1cGRhdGUgdGhlIG1pY3JvY29kZSBvbgpAQCAtNDE2LDYgKzQxNywxMSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbWljcm9jb2RlLgogCitjb25maWcgTUlDUk9DT0RFX09MRF9JTlRFUkZBQ0UKKwlib29sCisJZGVwZW5kcyBvbiBNSUNST0NPREUKKwlkZWZhdWx0IHkKKwogY29uZmlnIFg4Nl9NU1IKIAl0cmlzdGF0ZSAiL2Rldi9jcHUvKi9tc3IgLSBNb2RlbC1zcGVjaWZpYyByZWdpc3RlciBzdXBwb3J0IgogCWhlbHAKQEAgLTU5OCwxMiArNjA0LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gQVJDSF9TUEFSU0VNRU1fRU5BQkxFCiAKLXNvdXJjZSAibW0vS2NvbmZpZyIKK2NvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAorCWRlZl9ib29sIHkKIAotY29uZmlnIEhBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECi0JYm9vbAotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gTlVNQQorc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgSElHSFBURQogCWJvb2wgIkFsbG9jYXRlIDNyZC1sZXZlbCBwYWdldGFibGVzIGZyb20gaGlnaG1lbSIKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMgYi9hcmNoL2kzODYvYm9vdC92aWRlby5TCmluZGV4IDhjMmE2ZmEuLjJjNWI1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9ib290L3ZpZGVvLlMKKysrIGIvYXJjaC9pMzg2L2Jvb3QvdmlkZW8uUwpAQCAtMTEsOCArMTEsNiBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+IC8qIGZvciBDT05GSUdfVklERU9fKiAqLwotCiAvKiBFbmFibGUgYXV0b2RldGVjdGlvbiBvZiBTVkdBIGFkYXB0ZXJzIGFuZCBtb2Rlcy4gKi8KICN1bmRlZiBDT05GSUdfVklERU9fU1ZHQQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvZGVmY29uZmlnIGIvYXJjaC9pMzg2L2RlZmNvbmZpZwppbmRleCAxYTI5YmZhLi5lZTJkNzliIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvZGVmY29uZmlnCisrKyBiL2FyY2gvaTM4Ni9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtZ2l0NQotIyBUdWUgU2VwIDI2IDA5OjMwOjQ3IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1naXQ3CisjIFdlZCBTZXAgMjcgMjE6NTM6MTAgMjAwNgogIwogQ09ORklHX1g4Nl8zMj15CiBDT05GSUdfR0VORVJJQ19USU1FPXkKQEAgLTIxMCw2ICsyMTAsNyBAQAogQ09ORklHX1BNPXkKIENPTkZJR19QTV9MRUdBQ1k9eQogIyBDT05GSUdfUE1fREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQ9eQogCiAjCiAjIEFDUEkgKEFkdmFuY2VkIENvbmZpZ3VyYXRpb24gYW5kIFBvd2VyIEludGVyZmFjZSkgU3VwcG9ydApAQCAtMjkyLDYgKzI5Myw3IEBACiBDT05GSUdfUENJX01NQ09ORklHPXkKICMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfTVNJPXkKKyMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogQ09ORklHX0lTQV9ETUFfQVBJPXkKICMgQ09ORklHX0lTQSBpcyBub3Qgc2V0CkBAIC0xNDI3LDYgKzE0MjksNyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMgYi9hcmNoL2kzODYva2VybmVsL2FwbS5jCmluZGV4IGZmOWNlNGIuLmI0MmYyZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvYXBtLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9hcG0uYwpAQCAtMjI1LDYgKzIyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kbWkuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00MDIsOCArNDAzLDYgQEAKICNlbHNlCiBzdGF0aWMgaW50CQkJcmVhbG1vZGVfcG93ZXJfb2ZmOwogI2VuZGlmCi1zdGF0aWMgaW50CQkJZXhpdF9rYXBtZCBfX3JlYWRfbW9zdGx5Owotc3RhdGljIGludAkJCWthcG1kX3J1bm5pbmcgX19yZWFkX21vc3RseTsKICNpZmRlZiBDT05GSUdfQVBNX0FMTE9XX0lOVFMKIHN0YXRpYyBpbnQJCQlhbGxvd19pbnRzID0gMTsKICNlbHNlCkBAIC00MTksNiArNDE4LDggQEAKIAogc3RhdGljIGNvbnN0IGNoYXIJCWRyaXZlcl92ZXJzaW9uW10gPSAiMS4xNmFjIjsJLyogbm8gc3BhY2VzICovCiAKK3N0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmthcG1kX3Rhc2s7CisKIC8qCiAgKglBUE0gZXZlbnQgbmFtZXMgdGFrZW4gZnJvbSB0aGUgQVBNIDEuMiBzcGVjaWZpY2F0aW9uLiBUaGVzZSBhcmUKICAqCXRoZSBtZXNzYWdlIGNvZGVzIHRoYXQgdGhlIEJJT1MgdXNlcyB0byB0ZWxsIHVzIGFib3V0IGV2ZW50cwpAQCAtMTQyMyw3ICsxNDI0LDcgQEAKIAlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCWZvciAoOzspIHsKIAkJc2NoZWR1bGVfdGltZW91dChBUE1fQ0hFQ0tfVElNRU9VVCk7Ci0JCWlmIChleGl0X2thcG1kKQorCQlpZiAoa3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJYnJlYWs7CiAJCS8qCiAJCSAqIE9rLCBjaGVjayBhbGwgZXZlbnRzLCBjaGVjayBmb3IgaWRsZSAoYW5kIG1hcmsgdXMgc2xlZXBpbmcKQEAgLTE3MDYsMTIgKzE3MDcsNiBAQAogCWNoYXIgKgkJcG93ZXJfc3RhdDsKIAljaGFyICoJCWJhdF9zdGF0OwogCi0Ja2FwbWRfcnVubmluZyA9IDE7Ci0KLQlkYWVtb25pemUoImthcG1kIik7Ci0KLQljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKLQogI2lmZGVmIENPTkZJR19TTVAKIAkvKiAyMDAyLzA4LzAxIC0gV1QKIAkgKiBUaGlzIGlzIHRvIGF2b2lkIHJhbmRvbSBjcmFzaGVzIGF0IGJvb3QgdGltZSBkdXJpbmcgaW5pdGlhbGl6YXRpb24KQEAgLTE4MjEsNyArMTgxNiw2IEBACiAJCWNvbnNvbGVfYmxhbmtfaG9vayA9IE5VTEw7CiAjZW5kaWYKIAl9Ci0Ja2FwbWRfcnVubmluZyA9IDA7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMjAsNyArMjIxNCw3IEBACiB7CiAJc3RydWN0IHByb2NfZGlyX2VudHJ5ICphcG1fcHJvYzsKIAlzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmdkdDsKLQlpbnQgcmV0OworCWludCBlcnI7CiAKIAlkbWlfY2hlY2tfc3lzdGVtKGFwbV9kbWlfdGFibGUpOwogCkBAIC0yMzI5LDEyICsyMzIzLDE3IEBACiAJaWYgKGFwbV9wcm9jKQogCQlhcG1fcHJvYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotCXJldCA9IGtlcm5lbF90aHJlYWQoYXBtLCBOVUxMLCBDTE9ORV9LRVJORUwgfCBTSUdDSExEKTsKLQlpZiAocmV0IDwgMCkgewotCQlwcmludGsoS0VSTl9FUlIgImFwbTogZGlzYWJsZWQgLSBVbmFibGUgdG8gc3RhcnQga2VybmVsIHRocmVhZC5cbiIpOworCWthcG1kX3Rhc2sgPSBrdGhyZWFkX2NyZWF0ZShhcG0sIE5VTEwsICJrYXBtZCIpOworCWlmIChJU19FUlIoa2FwbWRfdGFzaykpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJhcG06IGRpc2FibGVkIC0gVW5hYmxlIHRvIHN0YXJ0IGtlcm5lbCAiCisJCQkJInRocmVhZC5cbiIpOworCQllcnIgPSBQVFJfRVJSKGthcG1kX3Rhc2spOworCQlrYXBtZF90YXNrID0gTlVMTDsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoImFwbSIsIE5VTEwpOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIGVycjsKIAl9CisJa2FwbWRfdGFzay0+ZmxhZ3MgfD0gUEZfTk9GUkVFWkU7CisJd2FrZV91cF9wcm9jZXNzKGthcG1kX3Rhc2spOwogCiAJaWYgKG51bV9vbmxpbmVfY3B1cygpID4gMSAmJiAhc21wICkgewogCQlwcmludGsoS0VSTl9OT1RJQ0UKQEAgLTIzODQsOSArMjM4MywxMCBAQAogCXJlbW92ZV9wcm9jX2VudHJ5KCJhcG0iLCBOVUxMKTsKIAlpZiAocG93ZXJfb2ZmKQogCQlwbV9wb3dlcl9vZmYgPSBOVUxMOwotCWV4aXRfa2FwbWQgPSAxOwotCXdoaWxlIChrYXBtZF9ydW5uaW5nKQotCQlzY2hlZHVsZSgpOworCWlmIChrYXBtZF90YXNrKSB7CisJCWt0aHJlYWRfc3RvcChrYXBtZF90YXNrKTsKKwkJa2FwbWRfdGFzayA9IE5VTEw7CisJfQogI2lmZGVmIENPTkZJR19QTV9MRUdBQ1kKIAlwbV9hY3RpdmUgPSAwOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9hY3BpLWNwdWZyZXEuYwppbmRleCBlYTE5ZDA5Li41N2M4ODBiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2FjcGktY3B1ZnJlcS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvYWNwaS1jcHVmcmVxLmMKQEAgLTM5NiwxMyArMzk2LDEzIEBACiAgKi8KIHN0YXRpYyBpbnQgYmlvc193aXRoX3N3X2FueV9idWc7CiAKLXN0YXRpYyBpbnQgX19pbml0IHN3X2FueV9idWdfZm91bmQoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCitzdGF0aWMgaW50IHN3X2FueV9idWdfZm91bmQoc3RydWN0IGRtaV9zeXN0ZW1faWQgKmQpCiB7CiAJYmlvc193aXRoX3N3X2FueV9idWcgPSAxOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBzd19hbnlfYnVnX2RtaV90YWJsZVtdID0geworc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIHN3X2FueV9idWdfZG1pX3RhYmxlW10gPSB7CiAJewogCQkuY2FsbGJhY2sgPSBzd19hbnlfYnVnX2ZvdW5kLAogCQkuaWRlbnQgPSAiU3VwZXJtaWNybyBTZXJ2ZXIgWDZETFAiLApAQCAtNTk3LDcgKzU5Nyw2IEBACiAJLm5hbWUJPSAiYWNwaS1jcHVmcmVxIiwKIAkub3duZXIJPSBUSElTX01PRFVMRSwKIAkuYXR0cgk9IGFjcGlfY3B1ZnJlcV9hdHRyLAotCS5mbGFncwk9IENQVUZSRVFfU1RJQ0tZLAogfTsKIAogCkBAIC02MDgsNyArNjA3LDcgQEAKIAogCWFjcGlfY3B1ZnJlcV9lYXJseV9pbml0X2FjcGkoKTsKIAotIAlyZXR1cm4gY3B1ZnJlcV9yZWdpc3Rlcl9kcml2ZXIoJmFjcGlfY3B1ZnJlcV9kcml2ZXIpOworCXJldHVybiBjcHVmcmVxX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9jcHVmcmVxX2RyaXZlcik7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9sb25naGF1bC5jCmluZGV4IGY1Y2M5ZjUuLjcyMzNhYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvbG9uZ2hhdWwuYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL2xvbmdoYXVsLmMKQEAgLTE3OCwxMSArMTc4LDE3IEBACiAJc2FmZV9oYWx0KCk7CiAJLyogQ2hhbmdlIGZyZXF1ZW5jeSBvbiBuZXh0IGhhbHQgb3Igc2xlZXAgKi8KIAl3cm1zcmwoTVNSX1ZJQV9MT05HSEFVTCwgbG9uZ2hhdWwudmFsKTsKLQlBQ1BJX0ZMVVNIX0NQVV9DQUNIRSgpOwotCS8qIEludm9rZSBDMyAqLwotCWluYihjeF9hZGRyZXNzKTsKLQkvKiBEdW1teSBvcCAtIG11c3QgZG8gc29tZXRoaW5nIHVzZWxlc3MgYWZ0ZXIgUF9MVkwzIHJlYWQgKi8KLQl0ID0gaW5sKGFjcGlfZmFkdC54cG1fdG1yX2Jsay5hZGRyZXNzKTsKKwlpZiAocG9ydDIyX2VuKSB7CisJCUFDUElfRkxVU0hfQ1BVX0NBQ0hFKCk7CisJCS8qIEludm9rZSBDMSAqLworCQloYWx0KCk7CisJfSBlbHNlIHsKKwkJQUNQSV9GTFVTSF9DUFVfQ0FDSEUoKTsKKwkJLyogSW52b2tlIEMzICovCisJCWluYihjeF9hZGRyZXNzKTsKKwkJLyogRHVtbXkgb3AgLSBtdXN0IGRvIHNvbWV0aGluZyB1c2VsZXNzIGFmdGVyIFBfTFZMMyByZWFkICovCisJCXQgPSBpbmwoYWNwaV9mYWR0LnhwbV90bXJfYmxrLmFkZHJlc3MpOworCX0KIAogCS8qIERpc2FibGUgYnVzIHJhdGlvIGJpdCAqLwogCWxvY2FsX2lycV9kaXNhYmxlKCk7CkBAIC01NjcsMTYgKzU3MywyMyBAQAogc3RhdGljIGludCBlbmFibGVfYXJiaXRlcl9kaXNhYmxlKHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgcmVnOwogCXU4IHBjaV9jbWQ7CiAKIAkvKiBGaW5kIFBMRTEzMyBob3N0IGJyaWRnZSAqLworCXJlZyA9IDB4Nzg7CiAJZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfVklBLCBQQ0lfREVWSUNFX0lEX1ZJQV84NjAxXzAsIE5VTEwpOworCS8qIEZpbmQgQ0xFMjY2IGhvc3QgYnJpZGdlICovCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCXJlZyA9IDB4NzY7CisJCWRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODYyWF8wLCBOVUxMKTsKKwl9CiAJaWYgKGRldiAhPSBOVUxMKSB7CiAJCS8qIEVuYWJsZSBhY2Nlc3MgdG8gcG9ydCAweDIyICovCi0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHg3OCwgJnBjaV9jbWQpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIHJlZywgJnBjaV9jbWQpOwogCQlpZiAoICEocGNpX2NtZCAmIDE8PDcpICkgewogCQkJcGNpX2NtZCB8PSAxPDw3OwotCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgMHg3OCwgcGNpX2NtZCk7CisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCByZWcsIHBjaV9jbWQpOwogCQl9CiAJCXJldHVybiAxOwogCX0KQEAgLTY4MCwyMCArNjkzLDI1IEBACiAJaWYgKGxvbmdoYXVsX3ZlcnNpb24gPT0gVFlQRV9QT1dFUlNBVkVSKSB7CiAJCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgQzMgc3RhdGUgKi8KIAkJY3ggPSAmcHItPnBvd2VyLnN0YXRlc1tBQ1BJX1NUQVRFX0MzXTsKLQkJaWYgKGN4LT5hZGRyZXNzID09IDAgfHwKLQkJICAgKGN4LT5sYXRlbmN5ID4gMTAwMCAmJiBpZ25vcmVfbGF0ZW5jeSA9PSAwKSApCi0JCQlnb3RvIGVycl9hY3BpOwotCi0JfSBlbHNlIHsKLQkJLyogQ2hlY2sgQUNQSSBzdXBwb3J0IGZvciBidXMgbWFzdGVyIGFyYml0ZXIgZGlzYWJsZSAqLwotCQlpZiAoIXByLT5mbGFncy5ibV9jb250cm9sKSB7Ci0JCQlpZiAoIWVuYWJsZV9hcmJpdGVyX2Rpc2FibGUoKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIEFDUEkgc3VwcG9ydC4gTm8gVlQ4NjAxIGhvc3QgYnJpZGdlLiBBYm9ydGluZy5cbiIpOwotCQkJCXJldHVybiAtRU5PREVWOwotCQkJfSBlbHNlCi0JCQkJcG9ydDIyX2VuID0gMTsKKwkJaWYgKGN4LT5hZGRyZXNzID4gMCAmJgorCQkgICAoY3gtPmxhdGVuY3kgPD0gMTAwMCB8fCBpZ25vcmVfbGF0ZW5jeSAhPSAwKSApIHsKKwkJCWdvdG8gcHJpbnRfc3VwcG9ydF90eXBlOwogCQl9CiAJfQorCS8qIENoZWNrIEFDUEkgc3VwcG9ydCBmb3IgYnVzIG1hc3RlciBhcmJpdGVyIGRpc2FibGUgKi8KKwlpZiAoIXByLT5mbGFncy5ibV9jb250cm9sKSB7CisJCWlmIChlbmFibGVfYXJiaXRlcl9kaXNhYmxlKCkpIHsKKwkJCXBvcnQyMl9lbiA9IDE7CisJCX0gZWxzZSB7CisJCQlnb3RvIGVycl9hY3BpOworCQl9CisJfQorcHJpbnRfc3VwcG9ydF90eXBlOgorCWlmICghcG9ydDIyX2VuKSB7CisJCXByaW50ayAoS0VSTl9JTkZPIFBGWCAiVXNpbmcgQUNQSSBzdXBwb3J0LlxuIik7CisJfSBlbHNlIHsKKwkJcHJpbnRrIChLRVJOX0lORk8gUEZYICJVc2luZyBub3J0aGJyaWRnZSBzdXBwb3J0LlxuIik7CisJfQogCiAJcmV0ID0gbG9uZ2hhdWxfZ2V0X3JhbmdlcygpOwogCWlmIChyZXQgIT0gMCkKQEAgLTcxNiw3ICs3MzQsNyBAQAogCXJldHVybiAwOwogCiBlcnJfYWNwaToKLQlwcmludGsoS0VSTl9FUlIgUEZYICJObyBBQ1BJIHN1cHBvcnQgZm9yIENQVSBmcmVxdWVuY3kgY2hhbmdlcy5cbiIpOworCXByaW50ayhLRVJOX0VSUiBQRlggIk5vIEFDUEkgc3VwcG9ydC4gTm8gVlQ4NjAxIG9yIFZUODYyMyBub3J0aGJyaWRnZS4gQWJvcnRpbmcuXG4iKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3B1L2NwdWZyZXEvc3BlZWRzdGVwLWNlbnRyaW5vLmMKaW5kZXggN2E5MzI1My4uZTg5OTNiYSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcHUvY3B1ZnJlcS9zcGVlZHN0ZXAtY2VudHJpbm8uYworKysgYi9hcmNoL2kzODYva2VybmVsL2NwdS9jcHVmcmVxL3NwZWVkc3RlcC1jZW50cmluby5jCkBAIC0zODYsNyArMzg2LDcgQEAKICAqIHRoYW4gT1MgaW50ZW5kZWQgaXQgdG8gcnVuIGF0LiBEZXRlY3QgaXQgYW5kIGhhbmRsZSBpdCBjbGVhbmx5LgogICovCiBzdGF0aWMgaW50IGJpb3Nfd2l0aF9zd19hbnlfYnVnOwotc3RhdGljIGludCBfX2luaXQgc3dfYW55X2J1Z19mb3VuZChzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKK3N0YXRpYyBpbnQgc3dfYW55X2J1Z19mb3VuZChzdHJ1Y3QgZG1pX3N5c3RlbV9pZCAqZCkKIHsKIAliaW9zX3dpdGhfc3dfYW55X2J1ZyA9IDE7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMgYi9hcmNoL2kzODYva2VybmVsL2NyYXNoLmMKaW5kZXggNjdkMjk3ZC4uMTQ0YjQzMiAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9jcmFzaC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvY3Jhc2guYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KICNpbmNsdWRlIDxhc20vYXBpYy5oPgogI2luY2x1ZGUgPGFzbS9rZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vc21wLmg+CiAKICNpbmNsdWRlIDxtYWNoX2lwaS5oPgogCkBAIC04OCw3ICs4OSw3IEBACiB7CiAJaW50IGNwdTsKIAotCWNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljcHUgPSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAljcmFzaF9zYXZlX3RoaXNfY3B1KHJlZ3MsIGNwdSk7CiB9CiAKQEAgLTEzMyw3ICsxMzQsMTAgQEAKIAogc3RhdGljIHZvaWQgc21wX3NlbmRfbm1pX2FsbGJ1dHNlbGYodm9pZCkKIHsKLQlzZW5kX0lQSV9hbGxidXRzZWxmKE5NSV9WRUNUT1IpOworCWNwdW1hc2tfdCBtYXNrID0gY3B1X29ubGluZV9tYXA7CisJY3B1X2NsZWFyKHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpLCBtYXNrKTsKKwlpZiAoIWNwdXNfZW1wdHkobWFzaykpCisJCXNlbmRfSVBJX21hc2sobWFzaywgTk1JX1ZFQ1RPUik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgY3Jhc2hfbm1pX25iID0gewpAQCAtMTg1LDcgKzE4OSw3IEBACiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAogCS8qIE1ha2UgYSBub3RlIG9mIGNyYXNoaW5nIGNwdS4gV2lsbCBiZSB1c2VkIGluIE5NSSBjYWxsYmFjay4qLwotCWNyYXNoaW5nX2NwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKwljcmFzaGluZ19jcHUgPSBzYWZlX3NtcF9wcm9jZXNzb3JfaWQoKTsKIAlubWlfc2hvb3Rkb3duX2NwdXMoKTsKIAlsYXBpY19zaHV0ZG93bigpOwogI2lmIGRlZmluZWQoQ09ORklHX1g4Nl9JT19BUElDKQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvZWZpLmMKaW5kZXggZmUxNTgwNC4uZjk0MzY5OCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9lZmkuYworKysgYi9hcmNoL2kzODYva2VybmVsL2VmaS5jCkBAIC02NSw3ICs2NSw3IEBACiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGVmaV9ydF9sb2NrKTsKIHN0YXRpYyBwZ2RfdCBlZmlfYmFrX3BnX2Rpcl9wb2ludGVyWzJdOwogCi1zdGF0aWMgdm9pZCBlZmlfY2FsbF9waHlzX3ByZWxvZyh2b2lkKQorc3RhdGljIHZvaWQgZWZpX2NhbGxfcGh5c19wcmVsb2codm9pZCkgX19hY3F1aXJlcyhlZmlfcnRfbG9jaykKIHsKIAl1bnNpZ25lZCBsb25nIGNyNDsKIAl1bnNpZ25lZCBsb25nIHRlbXA7CkBAIC0xMDksNyArMTA5LDcgQEAKIAlsb2FkX2dkdChjcHVfZ2R0X2Rlc2NyKTsKIH0KIAotc3RhdGljIHZvaWQgZWZpX2NhbGxfcGh5c19lcGlsb2codm9pZCkKK3N0YXRpYyB2b2lkIGVmaV9jYWxsX3BoeXNfZXBpbG9nKHZvaWQpIF9fcmVsZWFzZXMoZWZpX3J0X2xvY2spCiB7CiAJdW5zaWduZWQgbG9uZyBjcjQ7CiAJc3RydWN0IFhndF9kZXNjX3N0cnVjdCAqY3B1X2dkdF9kZXNjciA9ICZwZXJfY3B1KGNwdV9nZHRfZGVzY3IsIDApOwpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9pODIzNy5jIGIvYXJjaC9pMzg2L2tlcm5lbC9pODIzNy5jCmluZGV4IGMzNmQxYzAuLjZmNTA4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvaTgyMzcuYworKysgYi9hcmNoL2kzODYva2VybmVsL2k4MjM3LmMKQEAgLTIsNiArMiwxMSBAQAogICogaTgyMzcuYzogODIzN0EgRE1BIGNvbnRyb2xsZXIgc3VzcGVuZCBmdW5jdGlvbnMuCiAgKgogICogV3JpdHRlbiBieSBQaWVycmUgT3NzbWFuLCAyMDA1LgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMgYi9hcmNoL2kzODYva2VybmVsL21pY3JvY29kZS5jCmluZGV4IDQwYjQ0Y2MuLjliOTQ3OTcgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9rZXJuZWwvbWljcm9jb2RlLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9taWNyb2NvZGUuYwpAQCAtMiw2ICsyLDcgQEAKICAqCUludGVsIENQVSBNaWNyb2NvZGUgVXBkYXRlIERyaXZlciBmb3IgTGludXgKICAqCiAgKglDb3B5cmlnaHQgKEMpIDIwMDAtMjAwNCBUaWdyYW4gQWl2YXppYW4KKyAqCQkgICAgICAyMDA2CVNoYW9odWEgTGkgPHNoYW9odWEubGlAaW50ZWwuY29tPgogICoKICAqCVRoaXMgZHJpdmVyIGFsbG93cyB0byB1cGdyYWRlIG1pY3JvY29kZSBvbiBJbnRlbCBwcm9jZXNzb3JzCiAgKgliZWxvbmdpbmcgdG8gSUEtMzIgZmFtaWx5IC0gUGVudGl1bVBybywgUGVudGl1bSBJSSwgCkBAIC04Miw2ICs4Myw5IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtOTEsOSArOTUsNiBAQAogTU9EVUxFX0FVVEhPUigiVGlncmFuIEFpdmF6aWFuIDx0aWdyYW5AdmVyaXRhcy5jb20+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLXN0YXRpYyBpbnQgdmVyYm9zZTsKLW1vZHVsZV9wYXJhbSh2ZXJib3NlLCBpbnQsIDA2NDQpOwotCiAjZGVmaW5lIE1JQ1JPQ09ERV9WRVJTSU9OIAkiMS4xNGEiCiAKICNkZWZpbmUgREVGQVVMVF9VQ09ERV9EQVRBU0laRSAJKDIwMDApIAkgIC8qIDIwMDAgYnl0ZXMgKi8KQEAgLTEyMCw1NSArMTIxLDQwIEBACiAvKiBubyBjb25jdXJyZW50IC0+d3JpdGUoKXMgYXJlIGFsbG93ZWQgb24gL2Rldi9jcHUvbWljcm9jb2RlICovCiBzdGF0aWMgREVGSU5FX01VVEVYKG1pY3JvY29kZV9tdXRleCk7CiAKLXN0YXRpYyB2b2lkIF9fdXNlciAqdXNlcl9idWZmZXI7CS8qIHVzZXIgYXJlYSBtaWNyb2NvZGUgZGF0YSBidWZmZXIgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgdXNlcl9idWZmZXJfc2l6ZTsJLyogaXQncyBzaXplICovCi0KLXR5cGVkZWYgZW51bSBtY19lcnJvcl9jb2RlIHsKLQlNQ19TVUNDRVNTIAk9IDAsCi0JTUNfSUdOT1JFRCAJPSAxLAotCU1DX05PVEZPVU5EIAk9IDIsCi0JTUNfTUFSS0VEIAk9IDMsCi0JTUNfQUxMT0NBVEVEIAk9IDQsCi19IG1jX2Vycm9yX2NvZGVfdDsKLQogc3RhdGljIHN0cnVjdCB1Y29kZV9jcHVfaW5mbyB7CisJaW50IHZhbGlkOwogCXVuc2lnbmVkIGludCBzaWc7Ci0JdW5zaWduZWQgaW50IHBmLCBvcmlnX3BmOworCXVuc2lnbmVkIGludCBwZjsKIAl1bnNpZ25lZCBpbnQgcmV2OwotCXVuc2lnbmVkIGludCBja3N1bTsKLQltY19lcnJvcl9jb2RlX3QgZXJyOwogCW1pY3JvY29kZV90ICptYzsKIH0gdWNvZGVfY3B1X2luZm9bTlJfQ1BVU107Ci0JCQkJCi1zdGF0aWMgaW50IG1pY3JvY29kZV9vcGVuIChzdHJ1Y3QgaW5vZGUgKnVudXNlZDEsIHN0cnVjdCBmaWxlICp1bnVzZWQyKQotewotCXJldHVybiBjYXBhYmxlKENBUF9TWVNfUkFXSU8pID8gMCA6IC1FUEVSTTsKLX0KIAotc3RhdGljIHZvaWQgY29sbGVjdF9jcHVfaW5mbyAodm9pZCAqdW51c2VkKQorc3RhdGljIHZvaWQgY29sbGVjdF9jcHVfaW5mbyhpbnQgY3B1X251bSkKIHsKLQlpbnQgY3B1X251bSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKIAlzdHJ1Y3QgY3B1aW5mb194ODYgKmMgPSBjcHVfZGF0YSArIGNwdV9udW07CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdV9udW07CiAJdW5zaWduZWQgaW50IHZhbFsyXTsKIAotCXVjaS0+c2lnID0gdWNpLT5wZiA9IHVjaS0+cmV2ID0gdWNpLT5ja3N1bSA9IDA7Ci0JdWNpLT5lcnIgPSBNQ19OT1RGT1VORDsgCisJLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLworCUJVR19PTihyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpICE9IGNwdV9udW0pOworCXVjaS0+cGYgPSB1Y2ktPnJldiA9IDA7CiAJdWNpLT5tYyA9IE5VTEw7CisJdWNpLT52YWxpZCA9IDE7CiAKIAlpZiAoYy0+eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0lOVEVMIHx8IGMtPng4NiA8IDYgfHwKIAkgICAgCWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfSUE2NCkpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IENQVSVkIG5vdCBhIGNhcGFibGUgSW50ZWwgcHJvY2Vzc29yXG4iLCBjcHVfbnVtKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IENQVSVkIG5vdCBhIGNhcGFibGUgSW50ZWwgIgorCQkJInByb2Nlc3NvclxuIiwgY3B1X251bSk7CisJCXVjaS0+dmFsaWQgPSAwOwogCQlyZXR1cm47Ci0JfSBlbHNlIHsKLQkJdWNpLT5zaWcgPSBjcHVpZF9lYXgoMHgwMDAwMDAwMSk7CisJfQogCi0JCWlmICgoYy0+eDg2X21vZGVsID49IDUpIHx8IChjLT54ODYgPiA2KSkgewotCQkJLyogZ2V0IHByb2Nlc3NvciBmbGFncyBmcm9tIE1TUiAweDE3ICovCi0JCQlyZG1zcihNU1JfSUEzMl9QTEFURk9STV9JRCwgdmFsWzBdLCB2YWxbMV0pOwotCQkJdWNpLT5wZiA9IDEgPDwgKCh2YWxbMV0gPj4gMTgpICYgNyk7Ci0JCX0KLQkJdWNpLT5vcmlnX3BmID0gdWNpLT5wZjsKKwl1Y2ktPnNpZyA9IGNwdWlkX2VheCgweDAwMDAwMDAxKTsKKworCWlmICgoYy0+eDg2X21vZGVsID49IDUpIHx8IChjLT54ODYgPiA2KSkgeworCQkvKiBnZXQgcHJvY2Vzc29yIGZsYWdzIGZyb20gTVNSIDB4MTcgKi8KKwkJcmRtc3IoTVNSX0lBMzJfUExBVEZPUk1fSUQsIHZhbFswXSwgdmFsWzFdKTsKKwkJdWNpLT5wZiA9IDEgPDwgKCh2YWxbMV0gPj4gMTgpICYgNyk7CiAJfQogCiAJd3Jtc3IoTVNSX0lBMzJfVUNPREVfUkVWLCAwLCAwKTsKQEAgLTE4MCwyMTggKzE2NiwxNTkgQEAKIAkJCXVjaS0+c2lnLCB1Y2ktPnBmLCB1Y2ktPnJldik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX21pY3JvY29kZV91cGRhdGUgKGludCBjcHVfbnVtLCBtaWNyb2NvZGVfaGVhZGVyX3QgKm1jX2hlYWRlciwgaW50IHNpZywgaW50IHBmLCBpbnQgY2tzdW0pCitzdGF0aWMgaW5saW5lIGludCBtaWNyb2NvZGVfdXBkYXRlX21hdGNoKGludCBjcHVfbnVtLAorCW1pY3JvY29kZV9oZWFkZXJfdCAqbWNfaGVhZGVyLCBpbnQgc2lnLCBpbnQgcGYpCiB7CiAJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdV9udW07CiAKLQlwcl9kZWJ1ZygiTWljcm9jb2RlIEZvdW5kLlxuIik7Ci0JcHJfZGVidWcoIiAgIEhlYWRlciBSZXZpc2lvbiAweCV4XG4iLCBtY19oZWFkZXItPmhkcnZlcik7Ci0JcHJfZGVidWcoIiAgIExvYWRlciBSZXZpc2lvbiAweCV4XG4iLCBtY19oZWFkZXItPmxkcnZlcik7Ci0JcHJfZGVidWcoIiAgIFJldmlzaW9uIDB4JXggXG4iLCBtY19oZWFkZXItPnJldik7Ci0JcHJfZGVidWcoIiAgIERhdGUgJXgvJXgvJXhcbiIsCi0JCSgobWNfaGVhZGVyLT5kYXRlID4+IDI0ICkgJiAweGZmKSwKLQkJKChtY19oZWFkZXItPmRhdGUgPj4gMTYgKSAmIDB4ZmYpLAotCQkobWNfaGVhZGVyLT5kYXRlICYgMHhGRkZGKSk7Ci0JcHJfZGVidWcoIiAgIFNpZ25hdHVyZSAweCV4XG4iLCBzaWcpOwotCXByX2RlYnVnKCIgICBUeXBlIDB4JXggRmFtaWx5IDB4JXggTW9kZWwgMHgleCBTdGVwcGluZyAweCV4XG4iLAotCQkoKHNpZyA+PiAxMikgJiAweDMpLAotCQkoKHNpZyA+PiA4KSAmIDB4ZiksCi0JCSgoc2lnID4+IDQpICYgMHhmKSwKLQkJKChzaWcgJiAweGYpKSk7Ci0JcHJfZGVidWcoIiAgIFByb2Nlc3NvciBGbGFncyAweCV4XG4iLCBwZik7Ci0JcHJfZGVidWcoIiAgIENoZWNrc3VtIDB4JXhcbiIsIGNrc3VtKTsKKwlpZiAoIXNpZ21hdGNoKHNpZywgdWNpLT5zaWcsIHBmLCB1Y2ktPnBmKQorCQl8fCBtY19oZWFkZXItPnJldiA8PSB1Y2ktPnJldikKKwkJcmV0dXJuIDA7CisJcmV0dXJuIDE7Cit9CiAKLQlpZiAobWNfaGVhZGVyLT5yZXYgPCB1Y2ktPnJldikgewotCQlpZiAodWNpLT5lcnIgPT0gTUNfTk9URk9VTkQpIHsKLQkJCXVjaS0+ZXJyID0gTUNfSUdOT1JFRDsKLQkJCXVjaS0+Y2tzdW0gPSBtY19oZWFkZXItPnJldjsKLQkJfSBlbHNlIGlmICh1Y2ktPmVyciA9PSBNQ19JR05PUkVEICYmIHVjaS0+Y2tzdW0gPCBtY19oZWFkZXItPnJldikKLQkJCXVjaS0+Y2tzdW0gPSBtY19oZWFkZXItPnJldjsKLQl9IGVsc2UgaWYgKG1jX2hlYWRlci0+cmV2ID09IHVjaS0+cmV2KSB7Ci0JCWlmICh1Y2ktPmVyciA8IE1DX01BUktFRCkgewotCQkJLyogbm90aWZ5IHRoZSBjYWxsZXIgb2Ygc3VjY2VzcyBvbiB0aGlzIGNwdSAqLwotCQkJdWNpLT5lcnIgPSBNQ19TVUNDRVNTOworc3RhdGljIGludCBtaWNyb2NvZGVfc2FuaXR5X2NoZWNrKHZvaWQgKm1jKQoreworCW1pY3JvY29kZV9oZWFkZXJfdCAqbWNfaGVhZGVyID0gbWM7CisJc3RydWN0IGV4dGVuZGVkX3NpZ3RhYmxlICpleHRfaGVhZGVyID0gTlVMTDsKKwlzdHJ1Y3QgZXh0ZW5kZWRfc2lnbmF0dXJlICpleHRfc2lnOworCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZSwgZGF0YV9zaXplLCBleHRfdGFibGVfc2l6ZTsKKwlpbnQgc3VtLCBvcmlnX3N1bSwgZXh0X3NpZ2NvdW50ID0gMCwgaTsKKworCXRvdGFsX3NpemUgPSBnZXRfdG90YWxzaXplKG1jX2hlYWRlcik7CisJZGF0YV9zaXplID0gZ2V0X2RhdGFzaXplKG1jX2hlYWRlcik7CisJaWYgKGRhdGFfc2l6ZSArIE1DX0hFQURFUl9TSVpFID4gdG90YWxfc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhICIKKwkJCSJCYWQgZGF0YSBzaXplIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAobWNfaGVhZGVyLT5sZHJ2ZXIgIT0gMSB8fCBtY19oZWFkZXItPmhkcnZlciAhPSAxKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgorCQkJIlVua25vd24gbWljcm9jb2RlIHVwZGF0ZSBmb3JtYXRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZXh0X3RhYmxlX3NpemUgPSB0b3RhbF9zaXplIC0gKE1DX0hFQURFUl9TSVpFICsgZGF0YV9zaXplKTsKKwlpZiAoZXh0X3RhYmxlX3NpemUpIHsKKwkJaWYgKChleHRfdGFibGVfc2l6ZSA8IEVYVF9IRUFERVJfU0laRSkKKwkJIHx8ICgoZXh0X3RhYmxlX3NpemUgLSBFWFRfSEVBREVSX1NJWkUpICUgRVhUX1NJR05BVFVSRV9TSVpFKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISAiCisJCQkJIlNtYWxsIGV4dHRhYmxlIHNpemUgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCX0gZWxzZSBpZiAodWNpLT5lcnIgIT0gTUNfQUxMT0NBVEVEIHx8IG1jX2hlYWRlci0+cmV2ID4gdWNpLT5tYy0+aGRyLnJldikgewotCQlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCBmb3VuZCBhIG1hdGNoaW5nIG1pY3JvY29kZSB1cGRhdGUgd2l0aCAiCi0JCQkiIHJldmlzaW9uIDB4JXggKGN1cnJlbnQ9MHgleClcbiIsIGNwdV9udW0sIG1jX2hlYWRlci0+cmV2LCB1Y2ktPnJldik7Ci0JCXVjaS0+Y2tzdW0gPSBja3N1bTsKLQkJdWNpLT5wZiA9IHBmOyAvKiBrZWVwIHRoZSBvcmlnaW5hbCBtYyBwZiBmb3IgY2tzdW0gY2FsY3VsYXRpb24gKi8KLQkJdWNpLT5lcnIgPSBNQ19NQVJLRUQ7IC8qIGZvdW5kIHRoZSBtYXRjaCAqLwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdV9udW0pIHsKLQkJCWlmICh1Y29kZV9jcHVfaW5mbyArIGNwdV9udW0gIT0gdWNpCi0JCQkgICAgJiYgdWNvZGVfY3B1X2luZm9bY3B1X251bV0ubWMgPT0gdWNpLT5tYykgewotCQkJCXVjaS0+bWMgPSBOVUxMOwotCQkJCWJyZWFrOwotCQkJfQorCQlleHRfaGVhZGVyID0gbWMgKyBNQ19IRUFERVJfU0laRSArIGRhdGFfc2l6ZTsKKwkJaWYgKGV4dF90YWJsZV9zaXplICE9IGV4dHRhYmxlX3NpemUoZXh0X2hlYWRlcikpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgIgorCQkJCSJCYWQgZXh0dGFibGUgc2l6ZSBpbiBtaWNyb2NvZGUgZGF0YSBmaWxlXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOwogCQl9Ci0JCWlmICh1Y2ktPm1jICE9IE5VTEwpIHsKLQkJCXZmcmVlKHVjaS0+bWMpOwotCQkJdWNpLT5tYyA9IE5VTEw7CisJCWV4dF9zaWdjb3VudCA9IGV4dF9oZWFkZXItPmNvdW50OworCX0KKworCS8qIGNoZWNrIGV4dGVuZGVkIHRhYmxlIGNoZWNrc3VtICovCisJaWYgKGV4dF90YWJsZV9zaXplKSB7CisJCWludCBleHRfdGFibGVfc3VtID0gMDsKKwkJaW50ICpleHRfdGFibGVwID0gKGludCAqKWV4dF9oZWFkZXI7CisKKwkJaSA9IGV4dF90YWJsZV9zaXplIC8gRFdTSVpFOworCQl3aGlsZSAoaS0tKQorCQkJZXh0X3RhYmxlX3N1bSArPSBleHRfdGFibGVwW2ldOworCQlpZiAoZXh0X3RhYmxlX3N1bSkgeworCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljcm9jb2RlOiBhYm9ydGluZywgIgorCQkJCSJiYWQgZXh0ZW5kZWQgc2lnbmF0dXJlIHRhYmxlIGNoZWNrc3VtXG4iKTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCXJldHVybjsKKworCS8qIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gKi8KKwlvcmlnX3N1bSA9IDA7CisJaSA9IChNQ19IRUFERVJfU0laRSArIGRhdGFfc2l6ZSkgLyBEV1NJWkU7CisJd2hpbGUgKGktLSkKKwkJb3JpZ19zdW0gKz0gKChpbnQgKiltYylbaV07CisJaWYgKG9yaWdfc3VtKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBhYm9ydGluZywgYmFkIGNoZWNrc3VtXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICghZXh0X3RhYmxlX3NpemUpCisJCXJldHVybiAwOworCS8qIGNoZWNrIGV4dGVuZGVkIHNpZ25hdHVyZSBjaGVja3N1bSAqLworCWZvciAoaSA9IDA7IGkgPCBleHRfc2lnY291bnQ7IGkrKykgeworCQlleHRfc2lnID0gKHN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgKikoKHZvaWQgKilleHRfaGVhZGVyCisJCQkrIEVYVF9IRUFERVJfU0laRSArIEVYVF9TSUdOQVRVUkVfU0laRSAqIGkpOworCQlzdW0gPSBvcmlnX3N1bQorCQkJLSAobWNfaGVhZGVyLT5zaWcgKyBtY19oZWFkZXItPnBmICsgbWNfaGVhZGVyLT5ja3N1bSkKKwkJCSsgKGV4dF9zaWctPnNpZyArIGV4dF9zaWctPnBmICsgZXh0X3NpZy0+Y2tzdW0pOworCQlpZiAoc3VtKSB7CisJCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogYWJvcnRpbmcsIGJhZCBjaGVja3N1bVxuIik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmaW5kX21hdGNoaW5nX3Vjb2RlcyAodm9pZCkgCisvKgorICogcmV0dXJuIDAgLSBubyB1cGRhdGUgZm91bmQKKyAqIHJldHVybiAxIC0gZm91bmQgdXBkYXRlCisgKiByZXR1cm4gPCAwIC0gZXJyb3IKKyAqLworc3RhdGljIGludCBnZXRfbWFjaGluZ19taWNyb2NvZGUodm9pZCAqbWMsIGludCBjcHUpCiB7Ci0JaW50IGN1cnNvciA9IDA7Ci0JaW50IGVycm9yID0gMDsKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OworCW1pY3JvY29kZV9oZWFkZXJfdCAqbWNfaGVhZGVyID0gbWM7CisJc3RydWN0IGV4dGVuZGVkX3NpZ3RhYmxlICpleHRfaGVhZGVyOworCXVuc2lnbmVkIGxvbmcgdG90YWxfc2l6ZSA9IGdldF90b3RhbHNpemUobWNfaGVhZGVyKTsKKwlpbnQgZXh0X3NpZ2NvdW50LCBpOworCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgKmV4dF9zaWc7CisJdm9pZCAqbmV3X21jOwogCi0Jd2hpbGUgKGN1cnNvciArIE1DX0hFQURFUl9TSVpFIDwgdXNlcl9idWZmZXJfc2l6ZSkgewotCQltaWNyb2NvZGVfaGVhZGVyX3QgbWNfaGVhZGVyOwotCQl2b2lkICpuZXdtYyA9IE5VTEw7Ci0JCWludCBpLCBzdW0sIGNwdV9udW0sIGFsbG9jYXRlZF9mbGFnLCB0b3RhbF9zaXplLCBkYXRhX3NpemUsIGV4dF90YWJsZV9zaXplOworCWlmIChtaWNyb2NvZGVfdXBkYXRlX21hdGNoKGNwdSwgbWNfaGVhZGVyLAorCQkJbWNfaGVhZGVyLT5zaWcsIG1jX2hlYWRlci0+cGYpKQorCQlnb3RvIGZpbmQ7CiAKLQkJaWYgKGNvcHlfZnJvbV91c2VyKCZtY19oZWFkZXIsIHVzZXJfYnVmZmVyICsgY3Vyc29yLCBNQ19IRUFERVJfU0laRSkpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgQ2FuIG5vdCByZWFkIHVzZXIgZGF0YVxuIik7Ci0JCQllcnJvciA9IC1FRkFVTFQ7Ci0JCQlnb3RvIG91dDsKLQkJfQorCWlmICh0b3RhbF9zaXplIDw9IGdldF9kYXRhc2l6ZShtY19oZWFkZXIpICsgTUNfSEVBREVSX1NJWkUpCisJCXJldHVybiAwOwogCi0JCXRvdGFsX3NpemUgPSBnZXRfdG90YWxzaXplKCZtY19oZWFkZXIpOwotCQlpZiAoKGN1cnNvciArIHRvdGFsX3NpemUgPiB1c2VyX2J1ZmZlcl9zaXplKSB8fCAodG90YWxfc2l6ZSA8IERFRkFVTFRfVUNPREVfVE9UQUxTSVpFKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISBCYWQgZGF0YSBpbiBtaWNyb2NvZGUgZGF0YSBmaWxlXG4iKTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9CisJZXh0X2hlYWRlciA9IChzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgKikobWMgKworCQkJZ2V0X2RhdGFzaXplKG1jX2hlYWRlcikgKyBNQ19IRUFERVJfU0laRSk7CisJZXh0X3NpZ2NvdW50ID0gZXh0X2hlYWRlci0+Y291bnQ7CisJZXh0X3NpZyA9IChzdHJ1Y3QgZXh0ZW5kZWRfc2lnbmF0dXJlICopKCh2b2lkICopZXh0X2hlYWRlcgorCQkJKyBFWFRfSEVBREVSX1NJWkUpOworCWZvciAoaSA9IDA7IGkgPCBleHRfc2lnY291bnQ7IGkrKykgeworCQlpZiAobWljcm9jb2RlX3VwZGF0ZV9tYXRjaChjcHUsIG1jX2hlYWRlciwKKwkJCQlleHRfc2lnLT5zaWcsIGV4dF9zaWctPnBmKSkKKwkJCWdvdG8gZmluZDsKKwkJZXh0X3NpZysrOworCX0KKwlyZXR1cm4gMDsKK2ZpbmQ6CisJcHJfZGVidWcoIm1pY3JvY29kZTogQ1BVICVkIGZvdW5kIGEgbWF0Y2hpbmcgbWljcm9jb2RlIHVwZGF0ZSB3aXRoIgorCQkiIHZlcnNpb24gMHgleCAoY3VycmVudD0weCV4KVxuIiwgY3B1LCBtY19oZWFkZXItPnJldix1Y2ktPnJldik7CisJbmV3X21jID0gdm1hbGxvYyh0b3RhbF9zaXplKTsKKwlpZiAoIW5ld19tYykgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIENhbiBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCi0JCWRhdGFfc2l6ZSA9IGdldF9kYXRhc2l6ZSgmbWNfaGVhZGVyKTsKLQkJaWYgKChkYXRhX3NpemUgKyBNQ19IRUFERVJfU0laRSA+IHRvdGFsX3NpemUpIHx8IChkYXRhX3NpemUgPCBERUZBVUxUX1VDT0RFX0RBVEFTSVpFKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISBCYWQgZGF0YSBpbiBtaWNyb2NvZGUgZGF0YSBmaWxlXG4iKTsKLQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCWdvdG8gb3V0OwotCQl9CisJLyogZnJlZSBwcmV2aW91cyB1cGRhdGUgZmlsZSAqLworCXZmcmVlKHVjaS0+bWMpOwogCi0JCWlmIChtY19oZWFkZXIubGRydmVyICE9IDEgfHwgbWNfaGVhZGVyLmhkcnZlciAhPSAxKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIFVua25vd24gbWljcm9jb2RlIHVwZGF0ZSBmb3JtYXRcbiIpOwotCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdV9udW0pIHsKLQkJCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHVfbnVtOwotCi0JCQlpZiAoc2lnbWF0Y2gobWNfaGVhZGVyLnNpZywgdWNpLT5zaWcsIG1jX2hlYWRlci5wZiwgdWNpLT5vcmlnX3BmKSkKLQkJCQltYXJrX21pY3JvY29kZV91cGRhdGUoY3B1X251bSwgJm1jX2hlYWRlciwgbWNfaGVhZGVyLnNpZywgbWNfaGVhZGVyLnBmLCBtY19oZWFkZXIuY2tzdW0pOwotCQl9Ci0KLQkJZXh0X3RhYmxlX3NpemUgPSB0b3RhbF9zaXplIC0gKE1DX0hFQURFUl9TSVpFICsgZGF0YV9zaXplKTsKLQkJaWYgKGV4dF90YWJsZV9zaXplKSB7Ci0JCQlzdHJ1Y3QgZXh0ZW5kZWRfc2lndGFibGUgZXh0X2hlYWRlcjsKLQkJCXN0cnVjdCBleHRlbmRlZF9zaWduYXR1cmUgZXh0X3NpZzsKLQkJCWludCBleHRfc2lnY291bnQ7Ci0KLQkJCWlmICgoZXh0X3RhYmxlX3NpemUgPCBFWFRfSEVBREVSX1NJWkUpIAotCQkJCQl8fCAoKGV4dF90YWJsZV9zaXplIC0gRVhUX0hFQURFUl9TSVpFKSAlIEVYVF9TSUdOQVRVUkVfU0laRSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIEJhZCBkYXRhIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOwotCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmIChjb3B5X2Zyb21fdXNlcigmZXh0X2hlYWRlciwgdXNlcl9idWZmZXIgKyBjdXJzb3IgCi0JCQkJCSsgTUNfSEVBREVSX1NJWkUgKyBkYXRhX3NpemUsIEVYVF9IRUFERVJfU0laRSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIENhbiBub3QgcmVhZCB1c2VyIGRhdGFcbiIpOwotCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQlnb3RvIG91dDsKLQkJCX0KLQkJCWlmIChleHRfdGFibGVfc2l6ZSAhPSBleHR0YWJsZV9zaXplKCZleHRfaGVhZGVyKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgQmFkIGRhdGEgaW4gbWljcm9jb2RlIGRhdGEgZmlsZVxuIik7Ci0JCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCWdvdG8gb3V0OwotCQkJfQotCi0JCQlleHRfc2lnY291bnQgPSBleHRfaGVhZGVyLmNvdW50OwotCQkJCi0JCQlmb3IgKGkgPSAwOyBpIDwgZXh0X3NpZ2NvdW50OyBpKyspIHsKLQkJCQlpZiAoY29weV9mcm9tX3VzZXIoJmV4dF9zaWcsIHVzZXJfYnVmZmVyICsgY3Vyc29yICsgTUNfSEVBREVSX1NJWkUgKyBkYXRhX3NpemUgKyBFWFRfSEVBREVSX1NJWkUgCi0JCQkJCQkrIEVYVF9TSUdOQVRVUkVfU0laRSAqIGksIEVYVF9TSUdOQVRVUkVfU0laRSkpIHsKLQkJCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISBDYW4gbm90IHJlYWQgdXNlciBkYXRhXG4iKTsKLQkJCQkJZXJyb3IgPSAtRUZBVUxUOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQkJZm9yX2VhY2hfb25saW5lX2NwdShjcHVfbnVtKSB7Ci0JCQkJCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHVfbnVtOwotCi0JCQkJCWlmIChzaWdtYXRjaChleHRfc2lnLnNpZywgdWNpLT5zaWcsIGV4dF9zaWcucGYsIHVjaS0+b3JpZ19wZikpIHsKLQkJCQkJCW1hcmtfbWljcm9jb2RlX3VwZGF0ZShjcHVfbnVtLCAmbWNfaGVhZGVyLCBleHRfc2lnLnNpZywgZXh0X3NpZy5wZiwgZXh0X3NpZy5ja3N1bSk7Ci0JCQkJCX0KLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJLyogbm93IGNoZWNrIGlmIGFueSBjcHUgaGFzIG1hdGNoZWQgKi8KLQkJYWxsb2NhdGVkX2ZsYWcgPSAwOwotCQlzdW0gPSAwOwotCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdV9udW0pIHsKLQkJCWlmICh1Y29kZV9jcHVfaW5mb1tjcHVfbnVtXS5lcnIgPT0gTUNfTUFSS0VEKSB7IAotCQkJCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHVfbnVtOwotCQkJCWlmICghYWxsb2NhdGVkX2ZsYWcpIHsKLQkJCQkJYWxsb2NhdGVkX2ZsYWcgPSAxOwotCQkJCQluZXdtYyA9IHZtYWxsb2ModG90YWxfc2l6ZSk7Ci0JCQkJCWlmICghbmV3bWMpIHsKLQkJCQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOwotCQkJCQkJZXJyb3IgPSAtRU5PTUVNOwotCQkJCQkJZ290byBvdXQ7Ci0JCQkJCX0KLQkJCQkJaWYgKGNvcHlfZnJvbV91c2VyKG5ld21jICsgTUNfSEVBREVSX1NJWkUsIAotCQkJCQkJCQl1c2VyX2J1ZmZlciArIGN1cnNvciArIE1DX0hFQURFUl9TSVpFLCAKLQkJCQkJCQkJdG90YWxfc2l6ZSAtIE1DX0hFQURFUl9TSVpFKSkgewotCQkJCQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IGVycm9yISBDYW4gbm90IHJlYWQgdXNlciBkYXRhXG4iKTsKLQkJCQkJCXZmcmVlKG5ld21jKTsKLQkJCQkJCWVycm9yID0gLUVGQVVMVDsKLQkJCQkJCWdvdG8gb3V0OwotCQkJCQl9Ci0JCQkJCW1lbWNweShuZXdtYywgJm1jX2hlYWRlciwgTUNfSEVBREVSX1NJWkUpOwotCQkJCQkvKiBjaGVjayBleHRlbmRlZCB0YWJsZSBjaGVja3N1bSAqLwotCQkJCQlpZiAoZXh0X3RhYmxlX3NpemUpIHsKLQkJCQkJCWludCBleHRfdGFibGVfc3VtID0gMDsKLQkJCQkJCWludCAqIGV4dF90YWJsZXAgPSAoKCh2b2lkICopIG5ld21jKSArIE1DX0hFQURFUl9TSVpFICsgZGF0YV9zaXplKTsKLQkJCQkJCWkgPSBleHRfdGFibGVfc2l6ZSAvIERXU0laRTsKLQkJCQkJCXdoaWxlIChpLS0pIGV4dF90YWJsZV9zdW0gKz0gZXh0X3RhYmxlcFtpXTsKLQkJCQkJCWlmIChleHRfdGFibGVfc3VtKSB7Ci0JCQkJCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibWljcm9jb2RlOiBhYm9ydGluZywgYmFkIGV4dGVuZGVkIHNpZ25hdHVyZSB0YWJsZSBjaGVja3N1bVxuIik7Ci0JCQkJCQkJdmZyZWUobmV3bWMpOwotCQkJCQkJCWVycm9yID0gLUVJTlZBTDsKLQkJCQkJCQlnb3RvIG91dDsKLQkJCQkJCX0KLQkJCQkJfQotCi0JCQkJCS8qIGNhbGN1bGF0ZSB0aGUgY2hlY2tzdW0gKi8KLQkJCQkJaSA9IChNQ19IRUFERVJfU0laRSArIGRhdGFfc2l6ZSkgLyBEV1NJWkU7Ci0JCQkJCXdoaWxlIChpLS0pIHN1bSArPSAoKGludCAqKW5ld21jKVtpXTsKLQkJCQkJc3VtIC09IChtY19oZWFkZXIuc2lnICsgbWNfaGVhZGVyLnBmICsgbWNfaGVhZGVyLmNrc3VtKTsKLQkJCQl9Ci0JCQkJdWNvZGVfY3B1X2luZm9bY3B1X251bV0ubWMgPSBuZXdtYzsKLQkJCQl1Y29kZV9jcHVfaW5mb1tjcHVfbnVtXS5lcnIgPSBNQ19BTExPQ0FURUQ7IC8qIG1jIHVwZGF0ZWQgKi8KLQkJCQlpZiAoc3VtICsgdWNpLT5zaWcgKyB1Y2ktPnBmICsgdWNpLT5ja3N1bSAhPSAwKSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBDUFUlZCBhYm9ydGluZywgYmFkIGNoZWNrc3VtXG4iLCBjcHVfbnVtKTsKLQkJCQkJZXJyb3IgPSAtRUlOVkFMOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9Ci0JCX0KLQkJY3Vyc29yICs9IHRvdGFsX3NpemU7IC8qIGdvdG8gdGhlIG5leHQgdXBkYXRlIHBhdGNoICovCi0JfSAvKiBlbmQgb2Ygd2hpbGUgKi8KLW91dDoKLQlyZXR1cm4gZXJyb3I7CisJbWVtY3B5KG5ld19tYywgbWMsIHRvdGFsX3NpemUpOworCXVjaS0+bWMgPSBuZXdfbWM7CisJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGRvX3VwZGF0ZV9vbmUgKHZvaWQgKiB1bnVzZWQpCitzdGF0aWMgdm9pZCBhcHBseV9taWNyb2NvZGUoaW50IGNwdSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCB2YWxbMl07Ci0JaW50IGNwdV9udW0gPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IGNwdV9udW0gPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpOwogCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBjcHVfbnVtOwogCi0JaWYgKHVjaS0+bWMgPT0gTlVMTCkgewotCQlpZiAodmVyYm9zZSkgewotCQkJaWYgKHVjaS0+ZXJyID09IE1DX1NVQ0NFU1MpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAibWljcm9jb2RlOiBDUFUlZCBhbHJlYWR5IGF0IHJldmlzaW9uIDB4JXhcbiIsCi0JCQkJCWNwdV9udW0sIHVjaS0+cmV2KTsKLQkJCWVsc2UKLQkJCQlwcmludGsoS0VSTl9JTkZPICJtaWNyb2NvZGU6IE5vIG5ldyBtaWNyb2NvZGUgZGF0YSBmb3IgQ1BVJWRcbiIsIGNwdV9udW0pOwotCQl9CisJLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLworCUJVR19PTihjcHVfbnVtICE9IGNwdSk7CisKKwlpZiAodWNpLT5tYyA9PSBOVUxMKQogCQlyZXR1cm47Ci0JfQogCiAJLyogc2VyaWFsaXplIGFjY2VzcyB0byB0aGUgcGh5c2ljYWwgd3JpdGUgdG8gTVNSIDB4NzkgKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmbWljcm9jb2RlX3VwZGF0ZV9sb2NrLCBmbGFncyk7ICAgICAgICAgIApAQCAtNDA4LDY4ICszMzUsMTA3IEBACiAJLyogZ2V0IHRoZSBjdXJyZW50IHJldmlzaW9uIGZyb20gTVNSIDB4OEIgKi8KIAlyZG1zcihNU1JfSUEzMl9VQ09ERV9SRVYsIHZhbFswXSwgdmFsWzFdKTsKIAotCS8qIG5vdGlmeSB0aGUgY2FsbGVyIG9mIHN1Y2Nlc3Mgb24gdGhpcyBjcHUgKi8KLQl1Y2ktPmVyciA9IE1DX1NVQ0NFU1M7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWljcm9jb2RlX3VwZGF0ZV9sb2NrLCBmbGFncyk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAibWljcm9jb2RlOiBDUFUlZCB1cGRhdGVkIGZyb20gcmV2aXNpb24gIgorCWlmICh2YWxbMV0gIT0gdWNpLT5tYy0+aGRyLnJldikgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogQ1BVJWQgdXBkYXRlZCBmcm9tIHJldmlzaW9uICIKKwkJCSIweCV4IHRvIDB4JXggZmFpbGVkXG4iLCBjcHVfbnVtLCB1Y2ktPnJldiwgdmFsWzFdKTsKKwkJcmV0dXJuOworCX0KKwlwcl9kZWJ1ZygibWljcm9jb2RlOiBDUFUlZCB1cGRhdGVkIGZyb20gcmV2aXNpb24gIgogCSAgICAgICAiMHgleCB0byAweCV4LCBkYXRlID0gJTA4eCBcbiIsIAogCSAgICAgICBjcHVfbnVtLCB1Y2ktPnJldiwgdmFsWzFdLCB1Y2ktPm1jLT5oZHIuZGF0ZSk7Ci0JcmV0dXJuOworCXVjaS0+cmV2ID0gdmFsWzFdOworfQorCisjaWZkZWYgQ09ORklHX01JQ1JPQ09ERV9PTERfSU5URVJGQUNFCitzdGF0aWMgdm9pZCBfX3VzZXIgKnVzZXJfYnVmZmVyOwkvKiB1c2VyIGFyZWEgbWljcm9jb2RlIGRhdGEgYnVmZmVyICovCitzdGF0aWMgdW5zaWduZWQgaW50IHVzZXJfYnVmZmVyX3NpemU7CS8qIGl0J3Mgc2l6ZSAqLworCitzdGF0aWMgbG9uZyBnZXRfbmV4dF91Y29kZSh2b2lkICoqbWMsIGxvbmcgb2Zmc2V0KQoreworCW1pY3JvY29kZV9oZWFkZXJfdCBtY19oZWFkZXI7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJLyogTm8gbW9yZSBkYXRhICovCisJaWYgKG9mZnNldCA+PSB1c2VyX2J1ZmZlcl9zaXplKQorCQlyZXR1cm4gMDsKKwlpZiAoY29weV9mcm9tX3VzZXIoJm1jX2hlYWRlciwgdXNlcl9idWZmZXIgKyBvZmZzZXQsIE1DX0hFQURFUl9TSVpFKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIENhbiBub3QgcmVhZCB1c2VyIGRhdGFcbiIpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJdG90YWxfc2l6ZSA9IGdldF90b3RhbHNpemUoJm1jX2hlYWRlcik7CisJaWYgKG9mZnNldCArIHRvdGFsX3NpemUgPiB1c2VyX2J1ZmZlcl9zaXplKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgQmFkIHRvdGFsIHNpemUgaW4gbWljcm9jb2RlICIKKwkJCQkiZGF0YSBmaWxlXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCSptYyA9IHZtYWxsb2ModG90YWxfc2l6ZSk7CisJaWYgKCEqbWMpCisJCXJldHVybiAtRU5PTUVNOworCWlmIChjb3B5X2Zyb21fdXNlcigqbWMsIHVzZXJfYnVmZmVyICsgb2Zmc2V0LCB0b3RhbF9zaXplKSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIENhbiBub3QgcmVhZCB1c2VyIGRhdGFcbiIpOworCQl2ZnJlZSgqbWMpOworCQlyZXR1cm4gLUVGQVVMVDsKKwl9CisJcmV0dXJuIG9mZnNldCArIHRvdGFsX3NpemU7CiB9CiAKIHN0YXRpYyBpbnQgZG9fbWljcm9jb2RlX3VwZGF0ZSAodm9pZCkKIHsKLQlpbnQgaSwgZXJyb3I7CisJbG9uZyBjdXJzb3IgPSAwOworCWludCBlcnJvciA9IDA7CisJdm9pZCAqbmV3X21jOworCWludCBjcHU7CisJY3B1bWFza190IG9sZDsKIAotCWlmIChvbl9lYWNoX2NwdShjb2xsZWN0X2NwdV9pbmZvLCBOVUxMLCAxLCAxKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBFcnJvciEgQ291bGQgbm90IHJ1biBvbiBhbGwgcHJvY2Vzc29yc1xuIik7Ci0JCWVycm9yID0gLUVJTzsKLQkJZ290byBvdXQ7Ci0JfQorCW9sZCA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKIAotCWlmICgoZXJyb3IgPSBmaW5kX21hdGNoaW5nX3Vjb2RlcygpKSkgewotCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogRXJyb3IgaW4gdGhlIG1pY3JvY29kZSBkYXRhXG4iKTsKLQkJZ290byBvdXRfZnJlZTsKLQl9CisJd2hpbGUgKChjdXJzb3IgPSBnZXRfbmV4dF91Y29kZSgmbmV3X21jLCBjdXJzb3IpKSA+IDApIHsKKwkJZXJyb3IgPSBtaWNyb2NvZGVfc2FuaXR5X2NoZWNrKG5ld19tYyk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gb3V0OworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBkYXRhIGZpbGUgaGFzIG11bHRpcGxlIG1hdGNoaW5nIHVjb2RlLAorCQkgKiBsZXRzIGtlZXAgc2VhcmNoaW5nIHRpbGwgdGhlIGxhdGVzdCB2ZXJzaW9uCisJCSAqLworCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgeworCQkJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKIAotCWlmIChvbl9lYWNoX2NwdShkb191cGRhdGVfb25lLCBOVUxMLCAxLCAxKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBFcnJvciEgQ291bGQgbm90IHJ1biBvbiBhbGwgcHJvY2Vzc29yc1xuIik7Ci0JCWVycm9yID0gLUVJTzsKLQl9Ci0KLW91dF9mcmVlOgotCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgewotCQlpZiAodWNvZGVfY3B1X2luZm9baV0ubWMpIHsKLQkJCWludCBqOwotCQkJdm9pZCAqdG1wID0gdWNvZGVfY3B1X2luZm9baV0ubWM7Ci0JCQl2ZnJlZSh0bXApOwotCQkJZm9yX2VhY2hfb25saW5lX2NwdShqKSB7Ci0JCQkJaWYgKHVjb2RlX2NwdV9pbmZvW2pdLm1jID09IHRtcCkKLQkJCQkJdWNvZGVfY3B1X2luZm9bal0ubWMgPSBOVUxMOwotCQkJfQorCQkJaWYgKCF1Y2ktPnZhbGlkKQorCQkJCWNvbnRpbnVlOworCQkJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwkJCWVycm9yID0gZ2V0X21hY2hpbmdfbWljcm9jb2RlKG5ld19tYywgY3B1KTsKKwkJCWlmIChlcnJvciA8IDApCisJCQkJZ290byBvdXQ7CisJCQlpZiAoZXJyb3IgPT0gMSkKKwkJCQlhcHBseV9taWNyb2NvZGUoY3B1KTsKIAkJfQotCQlpZiAodWNvZGVfY3B1X2luZm9baV0uZXJyID09IE1DX0lHTk9SRUQgJiYgdmVyYm9zZSkKLQkJCXByaW50ayhLRVJOX1dBUk5JTkcgIm1pY3JvY29kZTogQ1BVJWQgbm90ICd1cGdyYWRpbmcnIHRvIGVhcmxpZXIgcmV2aXNpb24iCi0JCQkgICAgICAgIiAweCV4IChjdXJyZW50PTB4JXgpXG4iLCBpLCB1Y29kZV9jcHVfaW5mb1tpXS5ja3N1bSwgdWNvZGVfY3B1X2luZm9baV0ucmV2KTsKKwkJdmZyZWUobmV3X21jKTsKIAl9CiBvdXQ6CisJaWYgKGN1cnNvciA+IDApCisJCXZmcmVlKG5ld19tYyk7CisJaWYgKGN1cnNvciA8IDApCisJCWVycm9yID0gY3Vyc29yOworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKK3N0YXRpYyBpbnQgbWljcm9jb2RlX29wZW4gKHN0cnVjdCBpbm9kZSAqdW51c2VkMSwgc3RydWN0IGZpbGUgKnVudXNlZDIpCit7CisJcmV0dXJuIGNhcGFibGUoQ0FQX1NZU19SQVdJTykgPyAwIDogLUVQRVJNOworfQorCiBzdGF0aWMgc3NpemVfdCBtaWNyb2NvZGVfd3JpdGUgKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3NpemVfdCByZXQ7CiAKLQlpZiAobGVuIDwgREVGQVVMVF9VQ09ERV9UT1RBTFNJWkUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IG5vdCBlbm91Z2ggZGF0YVxuIik7IAotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlpZiAoKGxlbiA+PiBQQUdFX1NISUZUKSA+IG51bV9waHlzcGFnZXMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJtaWNyb2NvZGU6IHRvbyBtdWNoIGRhdGEgKG1heCAlbGQgcGFnZXMpXG4iLCBudW1fcGh5c3BhZ2VzKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJbG9ja19jcHVfaG90cGx1ZygpOwogCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7CiAKIAl1c2VyX2J1ZmZlciA9ICh2b2lkIF9fdXNlciAqKSBidWY7CkBAIC00ODAsNiArNDQ2LDcgQEAKIAkJcmV0ID0gKHNzaXplX3QpbGVuOwogCiAJbXV0ZXhfdW5sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOworCXVubG9ja19jcHVfaG90cGx1ZygpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTQ5Niw3ICs0NjMsNyBAQAogCS5mb3BzCQk9ICZtaWNyb2NvZGVfZm9wcywKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IG1pY3JvY29kZV9pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgbWljcm9jb2RlX2Rldl9pbml0ICh2b2lkKQogewogCWludCBlcnJvcjsKIApAQCAtNTA4LDYgKzQ3NSwyODAgQEAKIAkJcmV0dXJuIGVycm9yOwogCX0KIAorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbWljcm9jb2RlX2Rldl9leGl0ICh2b2lkKQoreworCW1pc2NfZGVyZWdpc3RlcigmbWljcm9jb2RlX2Rldik7Cit9CisKK01PRFVMRV9BTElBU19NSVNDREVWKE1JQ1JPQ09ERV9NSU5PUik7CisjZWxzZQorI2RlZmluZSBtaWNyb2NvZGVfZGV2X2luaXQoKSAwCisjZGVmaW5lIG1pY3JvY29kZV9kZXZfZXhpdCgpIGRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCisKK3N0YXRpYyBsb25nIGdldF9uZXh0X3Vjb2RlX2Zyb21fYnVmZmVyKHZvaWQgKiptYywgdm9pZCAqYnVmLAorCXVuc2lnbmVkIGxvbmcgc2l6ZSwgbG9uZyBvZmZzZXQpCit7CisJbWljcm9jb2RlX2hlYWRlcl90ICptY19oZWFkZXI7CisJdW5zaWduZWQgbG9uZyB0b3RhbF9zaXplOworCisJLyogTm8gbW9yZSBkYXRhICovCisJaWYgKG9mZnNldCA+PSBzaXplKQorCQlyZXR1cm4gMDsKKwltY19oZWFkZXIgPSAobWljcm9jb2RlX2hlYWRlcl90ICopKGJ1ZiArIG9mZnNldCk7CisJdG90YWxfc2l6ZSA9IGdldF90b3RhbHNpemUobWNfaGVhZGVyKTsKKworCWlmIChvZmZzZXQgKyB0b3RhbF9zaXplID4gc2l6ZSkgeworCQlwcmludGsoS0VSTl9FUlIgIm1pY3JvY29kZTogZXJyb3IhIEJhZCBkYXRhIGluIG1pY3JvY29kZSBkYXRhIGZpbGVcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqbWMgPSB2bWFsbG9jKHRvdGFsX3NpemUpOworCWlmICghKm1jKSB7CisJCXByaW50ayhLRVJOX0VSUiAibWljcm9jb2RlOiBlcnJvciEgQ2FuIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJbWVtY3B5KCptYywgYnVmICsgb2Zmc2V0LCB0b3RhbF9zaXplKTsKKwlyZXR1cm4gb2Zmc2V0ICsgdG90YWxfc2l6ZTsKK30KKworLyogZmFrZSBkZXZpY2UgZm9yIHJlcXVlc3RfZmlybXdhcmUgKi8KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICptaWNyb2NvZGVfcGRldjsKKworc3RhdGljIGludCBjcHVfcmVxdWVzdF9taWNyb2NvZGUoaW50IGNwdSkKK3sKKwljaGFyIG5hbWVbMzBdOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqYyA9IGNwdV9kYXRhICsgY3B1OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZmlybXdhcmU7CisJdm9pZCAqYnVmOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwlsb25nIG9mZnNldCA9IDA7CisJaW50IGVycm9yOworCXZvaWQgKm1jOworCisJLyogV2Ugc2hvdWxkIGJpbmQgdGhlIHRhc2sgdG8gdGhlIENQVSAqLworCUJVR19PTihjcHUgIT0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisJc3ByaW50ZihuYW1lLCJpbnRlbC11Y29kZS8lMDJ4LSUwMngtJTAyeCIsCisJCWMtPng4NiwgYy0+eDg2X21vZGVsLCBjLT54ODZfbWFzayk7CisJZXJyb3IgPSByZXF1ZXN0X2Zpcm13YXJlKCZmaXJtd2FyZSwgbmFtZSwgJm1pY3JvY29kZV9wZGV2LT5kZXYpOworCWlmIChlcnJvcikgeworCQlwcl9kZWJ1ZygidWNvZGUgZGF0YSBmaWxlICVzIGxvYWQgZmFpbGVkXG4iLCBuYW1lKTsKKwkJcmV0dXJuIGVycm9yOworCX0KKwlidWYgPSAodm9pZCAqKWZpcm13YXJlLT5kYXRhOworCXNpemUgPSBmaXJtd2FyZS0+c2l6ZTsKKwl3aGlsZSAoKG9mZnNldCA9IGdldF9uZXh0X3Vjb2RlX2Zyb21fYnVmZmVyKCZtYywgYnVmLCBzaXplLCBvZmZzZXQpKQorCQkJPiAwKSB7CisJCWVycm9yID0gbWljcm9jb2RlX3Nhbml0eV9jaGVjayhtYyk7CisJCWlmIChlcnJvcikKKwkJCWJyZWFrOworCQllcnJvciA9IGdldF9tYWNoaW5nX21pY3JvY29kZShtYywgY3B1KTsKKwkJaWYgKGVycm9yIDwgMCkKKwkJCWJyZWFrOworCQkvKgorCQkgKiBJdCdzIHBvc3NpYmxlIHRoZSBkYXRhIGZpbGUgaGFzIG11bHRpcGxlIG1hdGNoaW5nIHVjb2RlLAorCQkgKiBsZXRzIGtlZXAgc2VhcmNoaW5nIHRpbGwgdGhlIGxhdGVzdCB2ZXJzaW9uCisJCSAqLworCQlpZiAoZXJyb3IgPT0gMSkgeworCQkJYXBwbHlfbWljcm9jb2RlKGNwdSk7CisJCQllcnJvciA9IDA7CisJCX0KKwkJdmZyZWUobWMpOworCX0KKwlpZiAob2Zmc2V0ID4gMCkKKwkJdmZyZWUobWMpOworCWlmIChvZmZzZXQgPCAwKQorCQllcnJvciA9IG9mZnNldDsKKwlyZWxlYXNlX2Zpcm13YXJlKGZpcm13YXJlKTsKKworCXJldHVybiBlcnJvcjsKK30KKworc3RhdGljIHZvaWQgbWljcm9jb2RlX2luaXRfY3B1KGludCBjcHUpCit7CisJY3B1bWFza190IG9sZDsKKwlzdHJ1Y3QgdWNvZGVfY3B1X2luZm8gKnVjaSA9IHVjb2RlX2NwdV9pbmZvICsgY3B1OworCisJb2xkID0gY3VycmVudC0+Y3B1c19hbGxvd2VkOworCisJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKTsKKwltdXRleF9sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOworCWNvbGxlY3RfY3B1X2luZm8oY3B1KTsKKwlpZiAodWNpLT52YWxpZCkKKwkJY3B1X3JlcXVlc3RfbWljcm9jb2RlKGNwdSk7CisJbXV0ZXhfdW5sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOworCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkKTsKK30KKworc3RhdGljIHZvaWQgbWljcm9jb2RlX2ZpbmlfY3B1KGludCBjcHUpCit7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKKworCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7CisJdWNpLT52YWxpZCA9IDA7CisJdmZyZWUodWNpLT5tYyk7CisJdWNpLT5tYyA9IE5VTEw7CisJbXV0ZXhfdW5sb2NrKCZtaWNyb2NvZGVfbXV0ZXgpOworfQorCitzdGF0aWMgc3NpemVfdCByZWxvYWRfc3RvcmUoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY29uc3QgY2hhciAqYnVmLCBzaXplX3Qgc3opCit7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGRldi0+aWQ7CisJY2hhciAqZW5kOworCXVuc2lnbmVkIGxvbmcgdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCAmZW5kLCAwKTsKKwlpbnQgZXJyID0gMDsKKwlpbnQgY3B1ID0gZGV2LT5pZDsKKworCWlmIChlbmQgPT0gYnVmKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodmFsID09IDEpIHsKKwkJY3B1bWFza190IG9sZDsKKworCQlvbGQgPSBjdXJyZW50LT5jcHVzX2FsbG93ZWQ7CisKKwkJbG9ja19jcHVfaG90cGx1ZygpOworCQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIGNwdW1hc2tfb2ZfY3B1KGNwdSkpOworCisJCW11dGV4X2xvY2soJm1pY3JvY29kZV9tdXRleCk7CisJCWlmICh1Y2ktPnZhbGlkKQorCQkJZXJyID0gY3B1X3JlcXVlc3RfbWljcm9jb2RlKGNwdSk7CisJCW11dGV4X3VubG9jaygmbWljcm9jb2RlX211dGV4KTsKKwkJdW5sb2NrX2NwdV9ob3RwbHVnKCk7CisJCXNldF9jcHVzX2FsbG93ZWQoY3VycmVudCwgb2xkKTsKKwl9CisJaWYgKGVycikKKwkJcmV0dXJuIGVycjsKKwlyZXR1cm4gc3o7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHZlcnNpb25fc2hvdyhzdHJ1Y3Qgc3lzX2RldmljZSAqZGV2LCBjaGFyICpidWYpCit7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGRldi0+aWQ7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIweCV4XG4iLCB1Y2ktPnJldik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBmX3Nob3coc3RydWN0IHN5c19kZXZpY2UgKmRldiwgY2hhciAqYnVmKQoreworCXN0cnVjdCB1Y29kZV9jcHVfaW5mbyAqdWNpID0gdWNvZGVfY3B1X2luZm8gKyBkZXYtPmlkOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHgleFxuIiwgdWNpLT5wZik7Cit9CisKK3N0YXRpYyBTWVNERVZfQVRUUihyZWxvYWQsIDAyMDAsIE5VTEwsIHJlbG9hZF9zdG9yZSk7CitzdGF0aWMgU1lTREVWX0FUVFIodmVyc2lvbiwgMDQwMCwgdmVyc2lvbl9zaG93LCBOVUxMKTsKK3N0YXRpYyBTWVNERVZfQVRUUihwcm9jZXNzb3JfZmxhZ3MsIDA0MDAsIHBmX3Nob3csIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbWNfZGVmYXVsdF9hdHRyc1tdID0geworCSZhdHRyX3JlbG9hZC5hdHRyLAorCSZhdHRyX3ZlcnNpb24uYXR0ciwKKwkmYXR0cl9wcm9jZXNzb3JfZmxhZ3MuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBtY19hdHRyX2dyb3VwID0geworCS5hdHRycyA9IG1jX2RlZmF1bHRfYXR0cnMsCisJLm5hbWUgPSAibWljcm9jb2RlIiwKK307CisKK3N0YXRpYyBpbnQgbWNfc3lzZGV2X2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKK3sKKwlpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CisJc3RydWN0IHVjb2RlX2NwdV9pbmZvICp1Y2kgPSB1Y29kZV9jcHVfaW5mbyArIGNwdTsKKworCWlmICghY3B1X29ubGluZShjcHUpKQorCQlyZXR1cm4gMDsKKwlwcl9kZWJ1ZygiTWljcm9jb2RlOkNQVSAlZCBhZGRlZFxuIiwgY3B1KTsKKwltZW1zZXQodWNpLCAwLCBzaXplb2YoKnVjaSkpOworCXN5c2ZzX2NyZWF0ZV9ncm91cCgmc3lzX2Rldi0+a29iaiwgJm1jX2F0dHJfZ3JvdXApOworCisJbWljcm9jb2RlX2luaXRfY3B1KGNwdSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWNfc3lzZGV2X3JlbW92ZShzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzX2RldikKK3sKKwlpbnQgY3B1ID0gc3lzX2Rldi0+aWQ7CisKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIDA7CisJcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgcmVtb3ZlZFxuIiwgY3B1KTsKKwltaWNyb2NvZGVfZmluaV9jcHUoY3B1KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJnN5c19kZXYtPmtvYmosICZtY19hdHRyX2dyb3VwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtY19zeXNkZXZfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCit7CisJaW50IGNwdSA9IGRldi0+aWQ7CisKKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJcmV0dXJuIDA7CisJcHJfZGVidWcoIk1pY3JvY29kZTpDUFUgJWQgcmVzdW1lZFxuIiwgY3B1KTsKKwkvKiBvbmx5IENQVSAwIHdpbGwgYXBwbHkgdWNvZGUgaGVyZSAqLworCWFwcGx5X21pY3JvY29kZSgwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIG1jX3N5c2Rldl9kcml2ZXIgPSB7CisJLmFkZCA9IG1jX3N5c2Rldl9hZGQsCisJLnJlbW92ZSA9IG1jX3N5c2Rldl9yZW1vdmUsCisJLnJlc3VtZSA9IG1jX3N5c2Rldl9yZXN1bWUsCit9OworCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCitzdGF0aWMgX19jcHVpbml0IGludAorbWNfY3B1X2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpoY3B1KQoreworCXVuc2lnbmVkIGludCBjcHUgPSAodW5zaWduZWQgbG9uZyloY3B1OworCXN0cnVjdCBzeXNfZGV2aWNlICpzeXNfZGV2OworCisJc3lzX2RldiA9IGdldF9jcHVfc3lzZGV2KGNwdSk7CisJc3dpdGNoIChhY3Rpb24pIHsKKwljYXNlIENQVV9PTkxJTkU6CisJY2FzZSBDUFVfRE9XTl9GQUlMRUQ6CisJCW1jX3N5c2Rldl9hZGQoc3lzX2Rldik7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fUFJFUEFSRToKKwkJbWNfc3lzZGV2X3JlbW92ZShzeXNfZGV2KTsKKwkJYnJlYWs7CisJfQorCXJldHVybiBOT1RJRllfT0s7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgbWNfY3B1X25vdGlmaWVyID0geworCS5ub3RpZmllcl9jYWxsID0gbWNfY3B1X2NhbGxiYWNrLAorfTsKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBtaWNyb2NvZGVfaW5pdCAodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwllcnJvciA9IG1pY3JvY29kZV9kZXZfaW5pdCgpOworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCW1pY3JvY29kZV9wZGV2ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyX3NpbXBsZSgibWljcm9jb2RlIiwgLTEsCisJCQkJCQkJIE5VTEwsIDApOworCWlmIChJU19FUlIobWljcm9jb2RlX3BkZXYpKSB7CisJCW1pY3JvY29kZV9kZXZfZXhpdCgpOworCQlyZXR1cm4gUFRSX0VSUihtaWNyb2NvZGVfcGRldik7CisJfQorCisJbG9ja19jcHVfaG90cGx1ZygpOworCWVycm9yID0gc3lzZGV2X2RyaXZlcl9yZWdpc3RlcigmY3B1X3N5c2Rldl9jbGFzcywgJm1jX3N5c2Rldl9kcml2ZXIpOworCXVubG9ja19jcHVfaG90cGx1ZygpOworCWlmIChlcnJvcikgeworCQltaWNyb2NvZGVfZGV2X2V4aXQoKTsKKwkJcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIobWljcm9jb2RlX3BkZXYpOworCQlyZXR1cm4gZXJyb3I7CisJfQorCisJcmVnaXN0ZXJfaG90Y3B1X25vdGlmaWVyKCZtY19jcHVfbm90aWZpZXIpOworCiAJcHJpbnRrKEtFUk5fSU5GTyAKIAkJIklBLTMyIE1pY3JvY29kZSBVcGRhdGUgRHJpdmVyOiB2IiBNSUNST0NPREVfVkVSU0lPTiAiIDx0aWdyYW5AdmVyaXRhcy5jb20+XG4iKTsKIAlyZXR1cm4gMDsKQEAgLTUxNSw5ICs3NTYsMTYgQEAKIAogc3RhdGljIHZvaWQgX19leGl0IG1pY3JvY29kZV9leGl0ICh2b2lkKQogewotCW1pc2NfZGVyZWdpc3RlcigmbWljcm9jb2RlX2Rldik7CisJbWljcm9jb2RlX2Rldl9leGl0KCk7CisKKwl1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcigmbWNfY3B1X25vdGlmaWVyKTsKKworCWxvY2tfY3B1X2hvdHBsdWcoKTsKKwlzeXNkZXZfZHJpdmVyX3VucmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZtY19zeXNkZXZfZHJpdmVyKTsKKwl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKKworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKG1pY3JvY29kZV9wZGV2KTsKIH0KIAogbW9kdWxlX2luaXQobWljcm9jb2RlX2luaXQpCiBtb2R1bGVfZXhpdChtaWNyb2NvZGVfZXhpdCkKLU1PRFVMRV9BTElBU19NSVNDREVWKE1JQ1JPQ09ERV9NSU5PUik7CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL25taS5jIGIvYXJjaC9pMzg2L2tlcm5lbC9ubWkuYwppbmRleCBkYmRhNzA2Li4zZThlM2FkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL25taS5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvbm1pLmMKQEAgLTEzLDcgKzEzLDYgQEAKICAqICBNaWthZWwgUGV0dGVyc3Nvbgk6IFBNIGNvbnZlcnRlZCB0byBkcml2ZXIgbW9kZWwuIERpc2FibGUvZW5hYmxlIEFQSS4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTMxLDYgKzMwLDkgQEAKIAogI2luY2x1ZGUgIm1hY2hfdHJhcHMuaCIKIAoraW50IHVua25vd25fbm1pX3BhbmljOworaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworCiAvKiBwZXJmY3RyX25taV9vd25lciB0cmFja3MgdGhlIG93bmVyc2hpcCBvZiB0aGUgcGVyZmN0ciByZWdpc3RlcnM6CiAgKiBldnRzZWxfbm1pX293bmVyIHRyYWNrcyB0aGUgb3duZXJzaGlwIG9mIHRoZSBldmVudCBzZWxlY3Rpb24KICAqIC0gZGlmZmVyZW50IHBlcmZvcm1hbmNlIGNvdW50ZXJzLyBldmVudCBzZWxlY3Rpb24gbWF5IGJlIHJlc2VydmVkIGZvcgpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwppbmRleCA4YzE5MGNhLi45NmNkMDIzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL2kzODYva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDI1LDEzICs0MjUsMTIgQEAKIAogCXRzayA9IGN1cnJlbnQ7CiAJaWYgKHVubGlrZWx5KHRlc3RfdHNrX3RocmVhZF9mbGFnKHRzaywgVElGX0lPX0JJVE1BUCkpKSB7Ci0JCXAtPnRocmVhZC5pb19iaXRtYXBfcHRyID0ga21hbGxvYyhJT19CSVRNQVBfQllURVMsIEdGUF9LRVJORUwpOworCQlwLT50aHJlYWQuaW9fYml0bWFwX3B0ciA9IGttZW1kdXAodHNrLT50aHJlYWQuaW9fYml0bWFwX3B0ciwKKwkJCQkJCUlPX0JJVE1BUF9CWVRFUywgR0ZQX0tFUk5FTCk7CiAJCWlmICghcC0+dGhyZWFkLmlvX2JpdG1hcF9wdHIpIHsKIAkJCXAtPnRocmVhZC5pb19iaXRtYXBfbWF4ID0gMDsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCW1lbWNweShwLT50aHJlYWQuaW9fYml0bWFwX3B0ciwgdHNrLT50aHJlYWQuaW9fYml0bWFwX3B0ciwKLQkJCUlPX0JJVE1BUF9CWVRFUyk7CiAJCXNldF90c2tfdGhyZWFkX2ZsYWcocCwgVElGX0lPX0JJVE1BUCk7CiAJfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NldHVwLmMgYi9hcmNoL2kzODYva2VybmVsL3NldHVwLmMKaW5kZXggNzZhNTI0Yi4uMDAwY2YwMyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc2V0dXAuYwpAQCAtMjA5LDkgKzIwOSw2IEBACiAJLmZsYWdzCT0gSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9SRUFET05MWSB8IElPUkVTT1VSQ0VfTUVNCiB9IH07CiAKLSNkZWZpbmUgQURBUFRFUl9ST01fUkVTT1VSQ0VTIFwKLQkoc2l6ZW9mIGFkYXB0ZXJfcm9tX3Jlc291cmNlcyAvIHNpemVvZiBhZGFwdGVyX3JvbV9yZXNvdXJjZXNbMF0pCi0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdmlkZW9fcm9tX3Jlc291cmNlID0gewogCS5uYW1lIAk9ICJWaWRlbyBST00iLAogCS5zdGFydAk9IDB4YzAwMDAsCkBAIC0yNzMsOSArMjcwLDYgQEAKIAkuZmxhZ3MJPSBJT1JFU09VUkNFX0JVU1kgfCBJT1JFU09VUkNFX0lPCiB9IH07CiAKLSNkZWZpbmUgU1RBTkRBUkRfSU9fUkVTT1VSQ0VTIFwKLQkoc2l6ZW9mIHN0YW5kYXJkX2lvX3Jlc291cmNlcyAvIHNpemVvZiBzdGFuZGFyZF9pb19yZXNvdXJjZXNbMF0pCi0KICNkZWZpbmUgcm9tc2lnbmF0dXJlKHgpICgqKHVuc2lnbmVkIHNob3J0ICopKHgpID09IDB4YWE1NSkKIAogc3RhdGljIGludCBfX2luaXQgcm9tY2hlY2tzdW0odW5zaWduZWQgY2hhciAqcm9tLCB1bnNpZ25lZCBsb25nIGxlbmd0aCkKQEAgLTMzMiw3ICszMjYsNyBAQAogCX0KIAogCS8qIGNoZWNrIGZvciBhZGFwdGVyIHJvbXMgb24gMmsgYm91bmRhcmllcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBREFQVEVSX1JPTV9SRVNPVVJDRVMgJiYgc3RhcnQgPCB1cHBlcjsgc3RhcnQgKz0gMjA0OCkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0ZXJfcm9tX3Jlc291cmNlcykgJiYgc3RhcnQgPCB1cHBlcjsgc3RhcnQgKz0gMjA0OCkgewogCQlyb20gPSBpc2FfYnVzX3RvX3ZpcnQoc3RhcnQpOwogCQlpZiAoIXJvbXNpZ25hdHVyZShyb20pKQogCQkJY29udGludWU7CkBAIC0xMDg5LDIyICsxMDgzLDIwIEBACiAKIHZvaWQgX19pbml0IHpvbmVfc2l6ZXNfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgem9uZXNfc2l6ZVtNQVhfTlJfWk9ORVNdID0geyAwLCB9OwotCXVuc2lnbmVkIGludCBtYXhfZG1hLCBsb3c7Ci0KLQltYXhfZG1hID0gdmlydF90b19waHlzKChjaGFyICopTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZUOwotCWxvdyA9IG1heF9sb3dfcGZuOwotCi0JaWYgKGxvdyA8IG1heF9kbWEpCi0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbG93OwotCWVsc2UgewotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9kbWE7Ci0JCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gbG93IC0gbWF4X2RtYTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSBoaWdoZW5kX3BmbiAtIGxvdzsKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXSA9IHsKKwkJCXZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQUREUkVTUykgPj4gUEFHRV9TSElGVCwKKwkJCW1heF9sb3dfcGZuLAorCQkJaGlnaGVuZF9wZm59OworCWFkZF9hY3RpdmVfcmFuZ2UoMCwgMCwgaGlnaGVuZF9wZm4pOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXSA9IHsKKwkJCXZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQUREUkVTUykgPj4gUEFHRV9TSElGVCwKKwkJCW1heF9sb3dfcGZufTsKKwlhZGRfYWN0aXZlX3JhbmdlKDAsIDAsIG1heF9sb3dfcGZuKTsKICNlbmRpZgotCX0KLQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKKworCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogI2Vsc2UKIGV4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZCk7CkBAIC0xMjc0LDcgKzEyNjYsNyBAQAogCXJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCAmdmlkZW9fcmFtX3Jlc291cmNlKTsKIAogCS8qIHJlcXVlc3QgSS9PIHNwYWNlIGZvciBkZXZpY2VzIHVzZWQgb24gYWxsIGlbMzQ1XTg2IFBDcyAqLwotCWZvciAoaSA9IDA7IGkgPCBTVEFOREFSRF9JT19SRVNPVVJDRVM7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdGFuZGFyZF9pb19yZXNvdXJjZXMpOyBpKyspCiAJCXJlcXVlc3RfcmVzb3VyY2UoJmlvcG9ydF9yZXNvdXJjZSwgJnN0YW5kYXJkX2lvX3Jlc291cmNlc1tpXSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYva2VybmVsL3NtcC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXAuYwppbmRleCA0NjUxODhlLi4xYjA4MGFiIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3NtcC5jCisrKyBiL2FyY2gvaTM4Ni9rZXJuZWwvc21wLmMKQEAgLTcwMCwzICs3MDAsMzAgQEAKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKTsKKworc3RhdGljIGludCBjb252ZXJ0X2FwaWNpZF90b19jcHUoaW50IGFwaWNfaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfQ1BVUzsgaSsrKSB7CisJCWlmICh4ODZfY3B1X3RvX2FwaWNpZFtpXSA9PSBhcGljX2lkKQorCQkJcmV0dXJuIGk7CisJfQorCXJldHVybiAtMTsKK30KKworaW50IHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKQoreworCWludCBhcGljaWQsIGNwdWlkOworCisJaWYgKCFib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfQVBJQykpCisJCXJldHVybiAwOworCisJYXBpY2lkID0gaGFyZF9zbXBfcHJvY2Vzc29yX2lkKCk7CisJaWYgKGFwaWNpZCA9PSBCQURfQVBJQ0lEKQorCQlyZXR1cm4gMDsKKworCWNwdWlkID0gY29udmVydF9hcGljaWRfdG9fY3B1KGFwaWNpZCk7CisKKwlyZXR1cm4gY3B1aWQgPj0gMCA/IGNwdWlkIDogMDsKK30KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc21wYm9vdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMDIwZDg3My4uMDgzMWY3MCAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zbXBib290LmMKQEAgLTEwMiw2ICsxMDIsOCBAQAogCQkJeyBbMCAuLi4gTlJfQ1BVUy0xXSA9IDB4ZmYgfTsKIEVYUE9SVF9TWU1CT0woeDg2X2NwdV90b19hcGljaWQpOwogCit1OCBhcGljaWRfMl9ub2RlW01BWF9BUElDSURdOworCiAvKgogICogVHJhbXBvbGluZSA4MHg4NiBwcm9ncmFtIGFzIGFuIGFycmF5LgogICovCkBAIC02NDUsNyArNjQ3LDcgQEAKIHsKIAlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWludCBhcGljaWQgPSBsb2dpY2FsX3NtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgbm9kZSA9IGFwaWNpZF90b19ub2RlKGFwaWNpZCk7CisJaW50IG5vZGUgPSBhcGljaWRfdG9fbm9kZShoYXJkX3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKIAlpZiAoIW5vZGVfb25saW5lKG5vZGUpKQogCQlub2RlID0gZmlyc3Rfb25saW5lX25vZGU7CkBAIC05NTQsNiArOTU2LDcgQEAKIAogCWlycV9jdHhfaW5pdChjcHUpOwogCisJeDg2X2NwdV90b19hcGljaWRbY3B1XSA9IGFwaWNpZDsKIAkvKgogCSAqIFRoaXMgZ3J1bmdlIHJ1bnMgdGhlIHN0YXJ0dXAgcHJvY2VzcyBmb3IKIAkgKiB0aGUgdGFyZ2V0ZWQgcHJvY2Vzc29yLgpAQCAtMTA1OCw3ICsxMDYxLDcgQEAKIAogc3RhdGljIGludCBfX2NwdWluaXQgX19zbXBfcHJlcGFyZV9jcHUoaW50IGNwdSkKIHsKLQlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soZG9uZSk7CiAJc3RydWN0IHdhcm1fYm9vdF9jcHVfaW5mbyBpbmZvOwogCXN0cnVjdCB3b3JrX3N0cnVjdCB0YXNrOwogCWludAlhcGljaWQsIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvc3JhdC5jIGIvYXJjaC9pMzg2L2tlcm5lbC9zcmF0LmMKaW5kZXggODNkYjQxMS4uZjdlNzM1YyAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L2tlcm5lbC9zcmF0LmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC9zcmF0LmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGFzbS9zcmF0Lmg+CiAjaW5jbHVkZSA8YXNtL3RvcG9sb2d5Lmg+CisjaW5jbHVkZSA8YXNtL3NtcC5oPgogCiAvKgogICogcHJveGltaXR5IG1hY3JvcyBhbmQgZGVmaW5pdGlvbnMKQEAgLTU0LDggKzU1LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgbm9kZV9tZW1vcnlfY2h1bmtfcyBub2RlX21lbW9yeV9jaHVua1tNQVhDSFVOS1NdOwogCiBzdGF0aWMgaW50IG51bV9tZW1vcnlfY2h1bmtzOwkJLyogdG90YWwgbnVtYmVyIG9mIG1lbW9yeSBjaHVua3MgKi8KLXN0YXRpYyBpbnQgemhvbGVzX3NpemVfaW5pdDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHpob2xlc19zaXplW01BWF9OVU1OT0RFUyAqIE1BWF9OUl9aT05FU107CitzdGF0aWMgdTggX19pbml0ZGF0YSBhcGljaWRfdG9fcHhtW01BWF9BUElDSURdOwogCiBleHRlcm4gdm9pZCAqIGJvb3RfaW9yZW1hcCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIApAQCAtNzEsNiArNzEsOCBAQAogCS8qIG1hcmsgdGhpcyBub2RlIGFzICJzZWVuIiBpbiBub2RlIGJpdG1hcCAqLwogCUJNQVBfU0VUKHB4bV9iaXRtYXAsIGNwdV9hZmZpbml0eS0+cHJveGltaXR5X2RvbWFpbik7CiAKKwlhcGljaWRfdG9fcHhtW2NwdV9hZmZpbml0eS0+YXBpY19pZF0gPSBjcHVfYWZmaW5pdHktPnByb3hpbWl0eV9kb21haW47CisKIAlwcmludGsoIkNQVSAweCUwMlggaW4gcHJveGltaXR5IGRvbWFpbiAweCUwMlhcbiIsCiAJCWNwdV9hZmZpbml0eS0+YXBpY19pZCwgY3B1X2FmZmluaXR5LT5wcm94aW1pdHlfZG9tYWluKTsKIH0KQEAgLTEzNSw0NyArMTM3LDYgQEAKIAkJICJlbmFibGVkIGFuZCByZW1vdmFibGUiIDogImVuYWJsZWQiICkgKTsKIH0KIAotLyogVGFrZSBhIGNodW5rIG9mIHBhZ2VzIGZyb20gcGFnZSBmcmFtZSBjc3RhcnQgdG8gY2VuZCBhbmQgY291bnQgdGhlIG51bWJlcgotICogb2YgcGFnZXMgaW4gZWFjaCB6b25lLCByZXR1cm5lZCB2aWEgem9uZXNbXS4KLSAqLwotc3RhdGljIF9faW5pdCB2b2lkIGNodW5rX3RvX3pvbmVzKHVuc2lnbmVkIGxvbmcgY3N0YXJ0LCB1bnNpZ25lZCBsb25nIGNlbmQsIAotCQl1bnNpZ25lZCBsb25nICp6b25lcykKLXsKLQl1bnNpZ25lZCBsb25nIG1heF9kbWE7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm47Ci0KLQlpbnQgejsKLQl1bnNpZ25lZCBsb25nIHJlbmQ7Ci0KLQkvKiBGSVhNRTogTUFYX0RNQV9BRERSRVNTIGFuZCBtYXhfbG93X3BmbiBhcmUgdHJ5aW5nIHRvIHByb3ZpZGUKLQkgKiBzaW1pbGFybHkgc2NvcGVkIGluZm9ybWF0aW9uIGFuZCBzaG91bGQgYmUgaGFuZGxlZCBpbiBhIGNvbnNpc3RhbnQKLQkgKiBtYW5uZXIuCi0JICovCi0JbWF4X2RtYSA9IHZpcnRfdG9fcGh5cygoY2hhciAqKU1BWF9ETUFfQUREUkVTUykgPj4gUEFHRV9TSElGVDsKLQotCS8qIFNwbGl0IHRoZSBob2xlIGludG8gdGhlIHpvbmVzIGluIHdoaWNoIGl0IGZhbGxzLiAgUmVwZWF0ZWRseQotCSAqIHRha2UgdGhlIHNlZ21lbnQgaW4gd2hpY2ggdGhlIHJlbWFpbmluZyBob2xlIHN0YXJ0cywgcm91bmQgaXQKLQkgKiB0byB0aGUgZW5kIG9mIHRoYXQgem9uZS4KLQkgKi8KLQltZW1zZXQoem9uZXMsIDAsIE1BWF9OUl9aT05FUyAqIHNpemVvZihsb25nKSk7Ci0Jd2hpbGUgKGNzdGFydCA8IGNlbmQpIHsKLQkJaWYgKGNzdGFydCA8IG1heF9kbWEpIHsKLQkJCXogPSBaT05FX0RNQTsKLQkJCXJlbmQgPSAoY2VuZCA8IG1heF9kbWEpPyBjZW5kIDogbWF4X2RtYTsKLQotCQl9IGVsc2UgaWYgKGNzdGFydCA8IG1heF9sb3dfcGZuKSB7Ci0JCQl6ID0gWk9ORV9OT1JNQUw7Ci0JCQlyZW5kID0gKGNlbmQgPCBtYXhfbG93X3Bmbik/IGNlbmQgOiBtYXhfbG93X3BmbjsKLQotCQl9IGVsc2UgewotCQkJeiA9IFpPTkVfSElHSE1FTTsKLQkJCXJlbmQgPSBjZW5kOwotCQl9Ci0JCXpvbmVzW3pdICs9IHJlbmQgLSBjc3RhcnQ7Ci0JCWNzdGFydCA9IHJlbmQ7Ci0JfQotfQotCiAvKgogICogVGhlIFNSQVQgdGFibGUgYWx3YXlzIGxpc3RzIGFzY2VuZGluZyBhZGRyZXNzZXMsIHNvIGNhbiBhbHdheXMKICAqIGFzc3VtZSB0aGF0IHRoZSBmaXJzdCAic3RhcnQiIGFkZHJlc3MgdGhhdCB5b3Ugc2VlIGlzIHRoZSByZWFsCkBAIC0yMjAsNyArMTgxLDYgQEAKIAogCW1lbXNldChweG1fYml0bWFwLCAwLCBzaXplb2YocHhtX2JpdG1hcCkpOwkvKiBpbml0IHByb3hpbWl0eSBkb21haW4gYml0bWFwICovCiAJbWVtc2V0KG5vZGVfbWVtb3J5X2NodW5rLCAwLCBzaXplb2Yobm9kZV9tZW1vcnlfY2h1bmspKTsKLQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwogCiAJbnVtX21lbW9yeV9jaHVua3MgPSAwOwogCXdoaWxlIChwIDwgZW5kKSB7CkBAIC0yNzksMTEgKzIzOSwxNSBAQAogCXByaW50aygiTnVtYmVyIG9mIGxvZ2ljYWwgbm9kZXMgaW4gc3lzdGVtID0gJWRcbiIsIG51bV9vbmxpbmVfbm9kZXMoKSk7CiAJcHJpbnRrKCJOdW1iZXIgb2YgbWVtb3J5IGNodW5rcyBpbiBzeXN0ZW0gPSAlZFxuIiwgbnVtX21lbW9yeV9jaHVua3MpOwogCisJZm9yIChpID0gMDsgaSA8IE1BWF9BUElDSUQ7IGkrKykKKwkJYXBpY2lkXzJfbm9kZVtpXSA9IHB4bV90b19ub2RlKGFwaWNpZF90b19weG1baV0pOworCiAJZm9yIChqID0gMDsgaiA8IG51bV9tZW1vcnlfY2h1bmtzOyBqKyspewogCQlzdHJ1Y3Qgbm9kZV9tZW1vcnlfY2h1bmtfcyAqIGNodW5rID0gJm5vZGVfbWVtb3J5X2NodW5rW2pdOwogCQlwcmludGsoImNodW5rICVkIG5pZCAlZCBzdGFydF9wZm4gJTA4bHggZW5kX3BmbiAlMDhseFxuIiwKIAkJICAgICAgIGosIGNodW5rLT5uaWQsIGNodW5rLT5zdGFydF9wZm4sIGNodW5rLT5lbmRfcGZuKTsKIAkJbm9kZV9yZWFkX2NodW5rKGNodW5rLT5uaWQsIGNodW5rKTsKKwkJYWRkX2FjdGl2ZV9yYW5nZShjaHVuay0+bmlkLCBjaHVuay0+c3RhcnRfcGZuLCBjaHVuay0+ZW5kX3Bmbik7CiAJfQogIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewpAQCAtMzkyLDU3ICszNTYsNyBAQAogCQlyZXR1cm4gYWNwaTIwX3BhcnNlX3NyYXQoKHN0cnVjdCBhY3BpX3RhYmxlX3NyYXQgKiloZWFkZXIpOwogCX0KIG91dF9lcnI6CisJcmVtb3ZlX2FsbF9hY3RpdmVfcmFuZ2VzKCk7CiAJcHJpbnRrKCJmYWlsZWQgdG8gZ2V0IE5VTUEgbWVtb3J5IGluZm9ybWF0aW9uIGZyb20gU1JBVCB0YWJsZVxuIik7CiAJcmV0dXJuIDA7CiB9Ci0KLS8qIEZvciBlYWNoIG5vZGUgcnVuIHRoZSBtZW1vcnkgbGlzdCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBhcmUKLSAqIGFueSBtZW1vcnkgaG9sZXMuICBGb3IgZWFjaCBob2xlIGRldGVybWluZSB3aGljaCBaT05FIHRoZXkgZmFsbAotICogaW50by4KLSAqCi0gKiBOT1RFIzE6IHRoaXMgcmVxdWlyZXMga25vd2xlZGdlIG9mIHRoZSB6b25lIGJvdW5kcmllcyBhbmQgc28KLSAqIF9jYW5ub3RfIGJlIHBlcmZvcm1lZCBiZWZvcmUgdGhvc2UgYXJlIGNhbGN1bGF0ZWQgaW4gc2V0dXBfbWVtb3J5LgotICogCi0gKiBOT1RFIzI6IHdlIHJlbHkgb24gdGhlIGZhY3QgdGhhdCB0aGUgbWVtb3J5IGNodW5rcyBhcmUgb3JkZXJlZCBieQotICogc3RhcnQgcGZuIG51bWJlciBkdXJpbmcgc2V0dXAuCi0gKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBnZXRfemhvbGVzX2luaXQodm9pZCkKLXsKLQlpbnQgbmlkOwotCWludCBjOwotCWludCBmaXJzdDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IDA7Ci0KLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJZmlyc3QgPSAxOwotCQlmb3IgKGMgPSAwOyBjIDwgbnVtX21lbW9yeV9jaHVua3M7IGMrKyl7Ci0JCQlpZiAobm9kZV9tZW1vcnlfY2h1bmtbY10ubmlkID09IG5pZCkgewotCQkJCWlmIChmaXJzdCkgewotCQkJCQllbmQgPSBub2RlX21lbW9yeV9jaHVua1tjXS5lbmRfcGZuOwotCQkJCQlmaXJzdCA9IDA7Ci0KLQkJCQl9IGVsc2UgewotCQkJCQkvKiBSZWNvcmQgYW55IGdhcCBiZXR3ZWVuIHRoaXMgY2h1bmsKLQkJCQkJICogYW5kIHRoZSBwcmV2aW91cyBjaHVuayBvbiB0aGlzIG5vZGUKLQkJCQkJICogYWdhaW5zdCB0aGUgem9uZXMgaXQgc3BhbnMuCi0JCQkJCSAqLwotCQkJCQljaHVua190b196b25lcyhlbmQsCi0JCQkJCQlub2RlX21lbW9yeV9jaHVua1tjXS5zdGFydF9wZm4sCi0JCQkJCQkmemhvbGVzX3NpemVbbmlkICogTUFYX05SX1pPTkVTXSk7Ci0JCQkJfQotCQkJfQotCQl9Ci0JfQotfQotCi11bnNpZ25lZCBsb25nICogX19pbml0IGdldF96aG9sZXNfc2l6ZShpbnQgbmlkKQotewotCWlmICghemhvbGVzX3NpemVfaW5pdCkgewotCQl6aG9sZXNfc2l6ZV9pbml0Kys7Ci0JCWdldF96aG9sZXNfaW5pdCgpOwotCX0KLQlpZiAobmlkID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9vbmxpbmUobmlkKSkKLQkJcHJpbnRrKCIlczogbmlkID0gJWQgaXMgaW52YWxpZC9vZmZsaW5lLiBudW1fb25saW5lX25vZGVzID0gJWQiLAotCQkgICAgICAgX19GVU5DVElPTl9fLCBuaWQsIG51bV9vbmxpbmVfbm9kZXMoKSk7Ci0JcmV0dXJuICZ6aG9sZXNfc2l6ZVtuaWQgKiBNQVhfTlJfWk9ORVNdOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2tlcm5lbC90aW1lLmMgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwppbmRleCA4Njk0NGFjLi41OGEyZDU1IDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RpbWUuYworKysgYi9hcmNoL2kzODYva2VybmVsL3RpbWUuYwpAQCAtNzYsOCArNzYsNiBAQAogdW5zaWduZWQgaW50IGNwdV9raHo7CS8qIERldGVjdGVkIGFzIHdlIGNhbGlicmF0ZSB0aGUgVFNDICovCiBFWFBPUlRfU1lNQk9MKGNwdV9raHopOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7CiBFWFBPUlRfU1lNQk9MKHJ0Y19sb2NrKTsKIApAQCAtMzI5LDcgKzMyNyw2IEBACiAJZG9fc2V0dGltZW9mZGF5KCZ0cyk7CiAJd3JpdGVfc2VxbG9ja19pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJamlmZmllc182NCArPSBzbGVlcF9sZW5ndGg7Ci0Jd2FsbF9qaWZmaWVzICs9IHNsZWVwX2xlbmd0aDsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCXRvdWNoX3NvZnRsb2NrdXBfd2F0Y2hkb2coKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvaTM4Ni9rZXJuZWwvdHJhcHMuYwppbmRleCAyMWFhMWNkLi42ODIwYjhkIDEwMDY0NAotLS0gYS9hcmNoL2kzODYva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9pMzg2L2tlcm5lbC90cmFwcy5jCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSA8bGludXgva3Byb2Jlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tleGVjLmg+CiAjaW5jbHVkZSA8bGludXgvdW53aW5kLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgogCiAjaWZkZWYgQ09ORklHX0VJU0EKICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KQEAgLTQwLDcgKzQxLDYgQEAKIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL2RlYnVncmVnLmg+CkBAIC01Nyw2ICs1Nyw4IEBACiAKICNpbmNsdWRlICJtYWNoX3RyYXBzLmgiCiAKK2ludCBwYW5pY19vbl91bnJlY292ZXJlZF9ubWk7CisKIGFzbWxpbmthZ2UgaW50IHN5c3RlbV9jYWxsKHZvaWQpOwogCiBzdHJ1Y3QgZGVzY19zdHJ1Y3QgZGVmYXVsdF9sZHRbXSA9IHsgeyAwLCAwIH0sIHsgMCwgMCB9LCB7IDAsIDAgfSwKQEAgLTQwOSw3ICs0MTEsNyBAQAogCiAJaWYgKGVpcCA8IFBBR0VfT0ZGU0VUKQogCQlyZXR1cm47Ci0JaWYgKF9fZ2V0X3VzZXIodWQyLCAodW5zaWduZWQgc2hvcnQgX191c2VyICopZWlwKSkKKwlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKWVpcCwgdWQyKSkKIAkJcmV0dXJuOwogCWlmICh1ZDIgIT0gMHgwYjBmKQogCQlyZXR1cm47CkBAIC00MjIsNyArNDI0LDggQEAKIAkJY2hhciAqZmlsZTsKIAkJY2hhciBjOwogCi0JCWlmIChfX2dldF91c2VyKGxpbmUsICh1bnNpZ25lZCBzaG9ydCBfX3VzZXIgKikoZWlwICsgMikpKQorCQlpZiAocHJvYmVfa2VybmVsX2FkZHJlc3MoKHVuc2lnbmVkIHNob3J0IF9fdXNlciAqKShlaXAgKyAyKSwKKwkJCQkJbGluZSkpCiAJCQlicmVhazsKIAkJaWYgKF9fZ2V0X3VzZXIoZmlsZSwgKGNoYXIgKiBfX3VzZXIgKikoZWlwICsgNCkpIHx8CiAJCSAgICAodW5zaWduZWQgbG9uZylmaWxlIDwgUEFHRV9PRkZTRVQgfHwgX19nZXRfdXNlcihjLCBmaWxlKSkKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9saWIvZGVsYXkuYyBiL2FyY2gvaTM4Ni9saWIvZGVsYXkuYwppbmRleCAzYzA3MTRjLi5mNmVkYjExIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbGliL2RlbGF5LmMKKysrIGIvYXJjaC9pMzg2L2xpYi9kZWxheS5jCkBAIC0xMSw3ICsxMSw2IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIApkaWZmIC0tZ2l0IGEvYXJjaC9pMzg2L2xpYi91c2VyY29weS5jIGIvYXJjaC9pMzg2L2xpYi91c2VyY29weS5jCmluZGV4IGVmYzdlN2QuLjA4NTAyZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9saWIvdXNlcmNvcHkuYworKysgYi9hcmNoL2kzODYvbGliL3VzZXJjb3B5LmMKQEAgLTczOSw3ICs3MzksNyBAQAogCQkJcmV0dmFsID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sCiAJCQkJCSh1bnNpZ25lZCBsb25nICl0bywgMSwgMSwgMCwgJnBnLCBOVUxMKTsKIAotCQkJaWYgKHJldHZhbCA9PSAtRU5PTUVNICYmIGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJCQlpZiAocmV0dmFsID09IC1FTk9NRU0gJiYgaXNfaW5pdChjdXJyZW50KSkgewogCQkJCXVwX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7CiAJCQkJYmxrX2Nvbmdlc3Rpb25fd2FpdChXUklURSwgSFovNTApOwogCQkJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYyBiL2FyY2gvaTM4Ni9tYWNoLXZveWFnZXIvdm95YWdlcl9zbXAuYwppbmRleCA2Yzg2NTc1Li44NTZjNzNmIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvbWFjaC12b3lhZ2VyL3ZveWFnZXJfc21wLmMKKysrIGIvYXJjaC9pMzg2L21hY2gtdm95YWdlci92b3lhZ2VyX3NtcC5jCkBAIC05OSw2ICs5OSw3IEBACiBzdGF0aWMgdm9pZCBkb19xdWFkX2Jvb3RzdHJhcCh2b2lkKTsKIAogaW50IGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCh2b2lkKTsKK2ludCBzYWZlX3NtcF9wcm9jZXNzb3JfaWQodm9pZCk7CiAKIC8qIElubGluZSBmdW5jdGlvbnMgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMTI0Nyw2ICsxMjQ4LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKK2ludAorc2FmZV9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpCit7CisJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpOworfQorCiAvKiBicm9hZGNhc3QgYSBoYWx0IHRvIGFsbCBvdGhlciBDUFVzICovCiB2b2lkCiBzbXBfc2VuZF9zdG9wKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMgYi9hcmNoL2kzODYvbW0vZGlzY29udGlnLmMKaW5kZXggOTQxZDFhNS4uNTFlMzczOSAxMDA2NDQKLS0tIGEvYXJjaC9pMzg2L21tL2Rpc2NvbnRpZy5jCisrKyBiL2FyY2gvaTM4Ni9tbS9kaXNjb250aWcuYwpAQCAtMTU3LDIxICsxNTcsNiBAQAogCQlCVUcoKTsKIH0KIAotLyogRmluZCB0aGUgb3duaW5nIG5vZGUgZm9yIGEgcGZuLiAqLwotaW50IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCi17Ci0JaW50IG5pZDsKLQotCWZvcl9lYWNoX25vZGUobmlkKSB7Ci0JCWlmIChub2RlX2VuZF9wZm5bbmlkXSA9PSAwKQotCQkJYnJlYWs7Ci0JCWlmIChub2RlX3N0YXJ0X3BmbltuaWRdIDw9IHBmbiAmJiBub2RlX2VuZF9wZm5bbmlkXSA+PSBwZm4pCi0JCQlyZXR1cm4gbmlkOwotCX0KLQotCXJldHVybiAwOwotfQotCiAvKiAKICAqIEFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIHBnX2RhdGFfdCBmb3IgdGhpcyBub2RlIHZpYSBhIGNydWRlIHByZS1ib290bWVtCiAgKiBtZXRob2QuICBGb3Igbm9kZSB6ZXJvIHRha2UgdGhpcyBmcm9tIHRoZSBib3R0b20gb2YgbWVtb3J5LCBmb3IKQEAgLTIyNyw2ICsyMTIsOCBAQAogCXVuc2lnbmVkIGxvbmcgcGZuOwogCiAJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CisJCXVuc2lnbmVkIG9sZF9lbmRfcGZuID0gbm9kZV9lbmRfcGZuW25pZF07CisKIAkJLyoKIAkJICogVGhlIGFjcGkvc3JhdCBub2RlIGluZm8gY2FuIHNob3cgaG90LWFkZCBtZW1yb3kgem9uZXMKIAkJICogd2hlcmUgbWVtb3J5IGNvdWxkIGJlIGFkZGVkIGJ1dCBub3QgY3VycmVudGx5IHByZXNlbnQuCkBAIC0yNzYsNiArMjYzLDcgQEAKIAogCQlub2RlX2VuZF9wZm5bbmlkXSAtPSBzaXplOwogCQlub2RlX3JlbWFwX3N0YXJ0X3BmbltuaWRdID0gbm9kZV9lbmRfcGZuW25pZF07CisJCXNocmlua19hY3RpdmVfcmFuZ2UobmlkLCBvbGRfZW5kX3Bmbiwgbm9kZV9lbmRfcGZuW25pZF0pOwogCX0KIAlwcmludGsoIlJlc2VydmluZyB0b3RhbCBvZiAlbGQgcGFnZXMgZm9yIG51bWEgS1ZBIHJlbWFwXG4iLAogCQkJcmVzZXJ2ZV9wYWdlcyk7CkBAIC0zNjksNDUgKzM1NywyMiBAQAogdm9pZCBfX2luaXQgem9uZV9zaXplc19pbml0KHZvaWQpCiB7CiAJaW50IG5pZDsKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXSA9IHsKKwkJdmlydF90b19waHlzKChjaGFyICopTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZULAorCQltYXhfbG93X3BmbiwKKwkJaGlnaGVuZF9wZm4KKwl9OwogCi0KLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKLQkJdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10gPSB7MCwgfTsKLQkJdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemU7Ci0JCXVuc2lnbmVkIGludCBtYXhfZG1hOwotCi0JCXVuc2lnbmVkIGxvbmcgbG93ID0gbWF4X2xvd19wZm47Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBub2RlX3N0YXJ0X3BmbltuaWRdOwotCQl1bnNpZ25lZCBsb25nIGhpZ2ggPSBub2RlX2VuZF9wZm5bbmlkXTsKLQotCQltYXhfZG1hID0gdmlydF90b19waHlzKChjaGFyICopTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZUOwotCi0JCWlmIChub2RlX2hhc19vbmxpbmVfbWVtKG5pZCkpewotCQkJaWYgKHN0YXJ0ID4gbG93KSB7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJCQlCVUdfT04oc3RhcnQgPiBoaWdoKTsKLQkJCQl6b25lc19zaXplW1pPTkVfSElHSE1FTV0gPSBoaWdoIC0gc3RhcnQ7Ci0jZW5kaWYKLQkJCX0gZWxzZSB7Ci0JCQkJaWYgKGxvdyA8IG1heF9kbWEpCi0JCQkJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbG93OwotCQkJCWVsc2UgewotCQkJCQlCVUdfT04obWF4X2RtYSA+IGxvdyk7Ci0JCQkJCUJVR19PTihsb3cgPiBoaWdoKTsKLQkJCQkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfZG1hOwotCQkJCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IGxvdyAtIG1heF9kbWE7Ci0jaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJCQkJem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gaGlnaCAtIGxvdzsKLSNlbmRpZgotCQkJCX0KLQkJCX0KKwkvKiBJZiBTUkFUIGhhcyBub3QgcmVnaXN0ZXJlZCBtZW1vcnksIHJlZ2lzdGVyIGl0IG5vdyAqLworCWlmIChmaW5kX21heF9wZm5fd2l0aF9hY3RpdmVfcmVnaW9ucygpID09IDApIHsKKwkJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CisJCQlpZiAobm9kZV9oYXNfb25saW5lX21lbShuaWQpKQorCQkJCWFkZF9hY3RpdmVfcmFuZ2UobmlkLCBub2RlX3N0YXJ0X3BmbltuaWRdLAorCQkJCQkJCW5vZGVfZW5kX3BmbltuaWRdKTsKIAkJfQotCi0JCXpob2xlc19zaXplID0gZ2V0X3pob2xlc19zaXplKG5pZCk7Ci0KLQkJZnJlZV9hcmVhX2luaXRfbm9kZShuaWQsIE5PREVfREFUQShuaWQpLCB6b25lc19zaXplLCBzdGFydCwKLQkJCQl6aG9sZXNfc2l6ZSk7CiAJfQorCisJZnJlZV9hcmVhX2luaXRfbm9kZXMobWF4X3pvbmVfcGZucyk7CiAJcmV0dXJuOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2kzODYvbW0vZmF1bHQuYyBiL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCmluZGV4IDVlMTdhM2YuLjI1ODE1NzUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaTM4Ni9tbS9mYXVsdC5jCkBAIC00NDAsNyArNDQwLDcgQEAKIAkJY2FzZSAxOgkJLyogcmVhZCwgcHJlc2VudCAqLwogCQkJZ290byBiYWRfYXJlYTsKIAkJY2FzZSAwOgkJLyogcmVhZCwgbm90IHByZXNlbnQgKi8KLQkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMpKSkKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKQogCQkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCkBAIC01ODksNyArNTg5LDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmICh0c2stPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQodHNrKSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9oaWdobWVtLmMgYi9hcmNoL2kzODYvbW0vaGlnaG1lbS5jCmluZGV4IGJhNDQwMDAuLmY5ZjY0N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9oaWdobWVtLmMKKysrIGIvYXJjaC9pMzg2L21tL2hpZ2htZW0uYwpAQCAtMzgsMjIgKzM4LDE5IEBACiAKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKLSNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogCWlmICghcHRlX25vbmUoKihrbWFwX3B0ZS1pZHgpKSkKIAkJQlVHKCk7Ci0jZW5kaWYKIAlzZXRfcHRlKGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIGttYXBfcHJvdCkpOwotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKIH0KIAogdm9pZCBrdW5tYXBfYXRvbWljKHZvaWQgKmt2YWRkciwgZW51bSBrbV90eXBlIHR5cGUpCiB7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX0hJR0hNRU0KIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcpIGt2YWRkciAmIFBBR0VfTUFTSzsKIAllbnVtIGZpeGVkX2FkZHJlc3NlcyBpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAKKyNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQogCWlmICh2YWRkciA+PSBQQUdFX09GRlNFVCAmJiB2YWRkciA8ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KSB7CiAJCWRlY19wcmVlbXB0X2NvdW50KCk7CiAJCXByZWVtcHRfY2hlY2tfcmVzY2hlZCgpOwpAQCAtNjIsMTQgKzU5LDE0IEBACiAKIAlpZiAodmFkZHIgIT0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTitpZHgpKQogCQlCVUcoKTsKLQotCS8qCi0JICogZm9yY2Ugb3RoZXIgbWFwcGluZ3MgdG8gT29wcyBpZiB0aGV5J2xsIHRyeSB0byBhY2Nlc3MKLQkgKiB0aGlzIHB0ZSB3aXRob3V0IGZpcnN0IHJlbWFwIGl0Ci0JICovCi0JcHRlX2NsZWFyKCZpbml0X21tLCB2YWRkciwga21hcF9wdGUtaWR4KTsKLQlfX2ZsdXNoX3RsYl9vbmUodmFkZHIpOwogI2VuZGlmCisJLyoKKwkgKiBGb3JjZSBvdGhlciBtYXBwaW5ncyB0byBPb3BzIGlmIHRoZXknbGwgdHJ5IHRvIGFjY2VzcyB0aGlzIHB0ZQorCSAqIHdpdGhvdXQgZmlyc3QgcmVtYXAgaXQuICBLZWVwaW5nIHN0YWxlIG1hcHBpbmdzIGFyb3VuZCBpcyBhIGJhZCBpZGVhCisJICogYWxzbywgaW4gY2FzZSB0aGUgcGFnZSBjaGFuZ2VzIGNhY2hlYWJpbGl0eSBhdHRyaWJ1dGVzIG9yIGJlY29tZXMKKwkgKiBhIHByb3RlY3RlZCBwYWdlIGluIGEgaHlwZXJ2aXNvci4KKwkgKi8KKwlrcHRlX2NsZWFyX2ZsdXNoKGttYXBfcHRlLWlkeCwgdmFkZHIpOwogCiAJZGVjX3ByZWVtcHRfY291bnQoKTsKIAlwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKTsKQEAgLTg4LDcgKzg1LDYgQEAKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKIAlzZXRfcHRlKGttYXBfcHRlLWlkeCwgcGZuX3B0ZShwZm4sIGttYXBfcHJvdCkpOwotCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CiAKIAlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pbml0LmMgYi9hcmNoL2kzODYvbW0vaW5pdC5jCmluZGV4IDRhNWE5MTQuLjkwMDg5YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pbml0LmMKKysrIGIvYXJjaC9pMzg2L21tL2luaXQuYwpAQCAtNDkzLDYgKzQ5Myw3IEBACiAJCXB0ZS0+cHRlX2hpZ2ggJj0gfigxIDw8IChfUEFHRV9CSVRfTlggLSAzMikpOwogCWVsc2UKIAkJcHRlLT5wdGVfaGlnaCB8PSAxIDw8IChfUEFHRV9CSVRfTlggLSAzMik7CisJcHRlX3VwZGF0ZV9kZWZlcigmaW5pdF9tbSwgdmFkZHIsIHB0ZSk7CiAJX19mbHVzaF90bGJfYWxsKCk7CiBvdXQ6CiAJcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9tbS9pb3JlbWFwLmMgYi9hcmNoL2kzODYvbW0vaW9yZW1hcC5jCmluZGV4IDI0N2ZkZTcuLmZmZjA4YWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaTM4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC9pMzg2L21tL2lvcmVtYXAuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KQEAgLTIxLDgyICsyMSw2IEBACiAjZGVmaW5lIElTQV9TVEFSVF9BRERSRVNTCTB4YTAwMDAKICNkZWZpbmUgSVNBX0VORF9BRERSRVNTCQkweDEwMDAwMAogCi1zdGF0aWMgaW50IGlvcmVtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXB0ZV90ICpwdGU7Ci0JdW5zaWduZWQgbG9uZyBwZm47Ci0KLQlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKLQlwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcik7Ci0JaWYgKCFwdGUpCi0JCXJldHVybiAtRU5PTUVNOwotCWRvIHsKLQkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7Ci0JCXNldF9wdGUocHRlLCBwZm5fcHRlKHBmbiwgX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgCi0JCQkJCV9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBmbGFncykpKTsKLQkJcGZuKys7Ci0JfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlvcmVtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXBtZF90ICpwbWQ7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCi0JcGh5c19hZGRyIC09IGFkZHI7Ci0JcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHIpOwotCWlmICghcG1kKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkbyB7Ci0JCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKGlvcmVtYXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyICsgYWRkciwgZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfSB3aGlsZSAocG1kKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGlvcmVtYXBfcHVkX3JhbmdlKHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXB1ZF90ICpwdWQ7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCi0JcGh5c19hZGRyIC09IGFkZHI7Ci0JcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2QsIGFkZHIpOwotCWlmICghcHVkKQotCQlyZXR1cm4gLUVOT01FTTsKLQlkbyB7Ci0JCW5leHQgPSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJaWYgKGlvcmVtYXBfcG1kX3JhbmdlKHB1ZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyICsgYWRkciwgZmxhZ3MpKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JfSB3aGlsZSAocHVkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgaW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXBnZF90ICpwZ2Q7Ci0JdW5zaWduZWQgbG9uZyBuZXh0OwotCWludCBlcnI7Ci0KLQlCVUdfT04oYWRkciA+PSBlbmQpOwotCWZsdXNoX2NhY2hlX2FsbCgpOwotCXBoeXNfYWRkciAtPSBhZGRyOwotCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKLQlkbyB7Ci0JCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKLQkJZXJyID0gaW9yZW1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIrYWRkciwgZmxhZ3MpOwotCQlpZiAoZXJyKQotCQkJYnJlYWs7Ci0JfSB3aGlsZSAocGdkKyssIGFkZHIgPSBuZXh0LCBhZGRyICE9IGVuZCk7Ci0JZmx1c2hfdGxiX2FsbCgpOwotCXJldHVybiBlcnI7Ci19Ci0KIC8qCiAgKiBHZW5lcmljIG1hcHBpbmcgZnVuY3Rpb24gKG5vdCB2aXNpYmxlIG91dHNpZGUpOgogICovCkBAIC0xMTUsNiArMzksNyBAQAogCXZvaWQgX19pb21lbSAqIGFkZHI7CiAJc3RydWN0IHZtX3N0cnVjdCAqIGFyZWE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKKwlwZ3Byb3RfdCBwcm90OwogCiAJLyogRG9uJ3QgYWxsb3cgd3JhcGFyb3VuZCBvciB6ZXJvIHNpemUgKi8KIAlsYXN0X2FkZHIgPSBwaHlzX2FkZHIgKyBzaXplIC0gMTsKQEAgLTE0Miw2ICs2Nyw5IEBACiAJCQkJcmV0dXJuIE5VTEw7CiAJfQogCisJcHJvdCA9IF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0RJUlRZCisJCQl8IF9QQUdFX0FDQ0VTU0VEIHwgZmxhZ3MpOworCiAJLyoKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAogCSAqLwpAQCAtMTU4LDcgKzg2LDcgQEAKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJYWRkciA9ICh2b2lkIF9faW9tZW0gKikgYXJlYS0+YWRkcjsKIAlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKSBhZGRyLAotCQkJKHVuc2lnbmVkIGxvbmcpIGFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIGZsYWdzKSkgeworCQkJKHVuc2lnbmVkIGxvbmcpIGFkZHIgKyBzaXplLCBwaHlzX2FkZHIsIHByb3QpKSB7CiAJCXZ1bm1hcCgodm9pZCBfX2ZvcmNlICopIGFkZHIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2kzODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jIGIvYXJjaC9pMzg2L29wcm9maWxlL29wX21vZGVsX3Bwcm8uYwppbmRleCBmODhlMDViLi5jYTI0NDdlIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvb3Byb2ZpbGUvb3BfbW9kZWxfcHByby5jCisrKyBiL2FyY2gvaTM4Ni9vcHJvZmlsZS9vcF9tb2RlbF9wcHJvLmMKQEAgLTEzOCwxMSArMTM4LDE0IEBACiBzdGF0aWMgdm9pZCBwcHJvX3N0YXJ0KHN0cnVjdCBvcF9tc3JzIGNvbnN0ICogY29uc3QgbXNycykKIHsKIAl1bnNpZ25lZCBpbnQgbG93LGhpZ2g7CisJaW50IGk7CiAKLQlpZiAocmVzZXRfdmFsdWVbMF0pIHsKLQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgMCk7Ci0JCUNUUkxfU0VUX0FDVElWRShsb3cpOwotCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgMCk7CisJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgKytpKSB7CisJCWlmIChyZXNldF92YWx1ZVtpXSkgeworCQkJQ1RSTF9SRUFEKGxvdywgaGlnaCwgbXNycywgaSk7CisJCQlDVFJMX1NFVF9BQ1RJVkUobG93KTsKKwkJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKKwkJfQogCX0KIH0KIApAQCAtMTUwLDExICsxNTMsMTQgQEAKIHN0YXRpYyB2b2lkIHBwcm9fc3RvcChzdHJ1Y3Qgb3BfbXNycyBjb25zdCAqIGNvbnN0IG1zcnMpCiB7CiAJdW5zaWduZWQgaW50IGxvdyxoaWdoOworCWludCBpOwogCi0JaWYgKHJlc2V0X3ZhbHVlWzBdKSB7Ci0JCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIDApOworCWZvciAoaSA9IDA7IGkgPCBOVU1fQ09VTlRFUlM7ICsraSkgeworCQlpZiAoIXJlc2V0X3ZhbHVlW2ldKQorCQkJY29udGludWU7CisJCUNUUkxfUkVBRChsb3csIGhpZ2gsIG1zcnMsIGkpOwogCQlDVFJMX1NFVF9JTkFDVElWRShsb3cpOwotCQlDVFJMX1dSSVRFKGxvdywgaGlnaCwgbXNycywgMCk7CisJCUNUUkxfV1JJVEUobG93LCBoaWdoLCBtc3JzLCBpKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYyBiL2FyY2gvaTM4Ni9wY2kvbW1jb25maWcuYwppbmRleCAwNWJlOGRiLi5kMGMzZGEzIDEwMDY0NAotLS0gYS9hcmNoL2kzODYvcGNpL21tY29uZmlnLmMKKysrIGIvYXJjaC9pMzg2L3BjaS9tbWNvbmZpZy5jCkBAIC02Nyw3ICs2NywxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGNpX2V4cF9zZXRfZGV2X2Jhc2UodW5zaWduZWQgaW50IGJhc2UsIGludCBidXMsIGludCBkZXZmbikKKy8qCisgKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgdW5kZXIgcGNpX2NvbmZpZ19sb2NrCisgKi8KK3N0YXRpYyB2b2lkIHBjaV9leHBfc2V0X2Rldl9iYXNlKHVuc2lnbmVkIGludCBiYXNlLCBpbnQgYnVzLCBpbnQgZGV2Zm4pCiB7CiAJdTMyIGRldl9iYXNlID0gYmFzZSB8IChidXMgPDwgMjApIHwgKGRldmZuIDw8IDEyKTsKIAlpZiAoZGV2X2Jhc2UgIT0gbW1jZmdfbGFzdF9hY2Nlc3NlZF9kZXZpY2UpIHsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcKaW5kZXggZjUyMWYyZi4uMGI3ZjcwMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L0tjb25maWcKKysrIGIvYXJjaC9pYTY0L0tjb25maWcKQEAgLTM1Niw2ICszNTYsOSBAQAogCSAgTUFYX05VTU5PREVTIHdpbGwgYmUgMl4oVGhpcyB2YWx1ZSkuCiAJICBJZiBpbiBkb3VidCwgdXNlIHRoZSBkZWZhdWx0LgogCitjb25maWcgQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKKwlkZWZfYm9vbCB5CisKICMgVklSVFVBTF9NRU1fTUFQIGFuZCBGTEFUX05PREVfTUVNX01BUCBhcmUgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQuCiAjIFZJUlRVQUxfTUVNX01BUCBoYXMgYmVlbiByZXRhaW5lZCBmb3IgaGlzdG9yaWNhbCByZWFzb25zLgogY29uZmlnIFZJUlRVQUxfTUVNX01BUApAQCAtNDIwLDYgKzQyMywxNCBAQAogY29uZmlnIFNHSV9TTgogCWRlZl9ib29sIHkgaWYgKElBNjRfU0dJX1NOMiB8fCBJQTY0X0dFTkVSSUMpCiAKK2NvbmZpZyBJQTY0X0VTSQorCWJvb2wgIkVTSSAoRXh0ZW5zaWJsZSBTQUwgSW50ZXJmYWNlKSBzdXBwb3J0IgorCWhlbHAKKwkgIElmIHlvdSBzYXkgWSBoZXJlLCBzdXBwb3J0IGlzIGJ1aWx0IGludG8gdGhlIGtlcm5lbCB0bworCSAgbWFrZSBFU0kgY2FsbHMuICBFU0kgY2FsbHMgYXJlIHVzZWQgdG8gc3VwcG9ydCB2ZW5kb3Itc3BlY2lmaWMKKwkgIGZpcm13YXJlIGV4dGVuc2lvbnMsIHN1Y2ggYXMgdGhlIGFiaWxpdHkgdG8gaW5qZWN0IG1lbW9yeS1lcnJvcnMKKwkgIGZvciB0ZXN0LXB1cnBvc2VzLiAgSWYgeW91J3JlIHVuc3VyZSwgc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9zbi9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMgYi9hcmNoL2lhNjQvaHAvc2ltL3NpbWV0aC5jCmluZGV4IGI1MTk1YmUuLmUxYTFiMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMKKysrIGIvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYwpAQCAtMzIwLDcgKzMyMCw3IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAic2ltZXRoX2RldmljZV9ldmVudDogJXMgaXBhZGRyPTB4JXhcbiIsCi0JICAgICAgIGRldi0+bmFtZSwgaHRvbmwoaWZhLT5pZmFfbG9jYWwpKTsKKwkgICAgICAgZGV2LT5uYW1lLCBudG9obChpZmEtPmlmYV9sb2NhbCkpOwogCiAJLyoKIAkgKiBYWFggRml4IG1lCkBAIC0zMzEsNyArMzMxLDcgQEAKIAlsb2NhbCA9IGRldi0+cHJpdjsKIAkvKiBub3cgZG8gaXQgZm9yIHJlYWwgKi8KIAlyID0gZXZlbnQgPT0gTkVUREVWX1VQID8KLQkJbmV0ZGV2X2F0dGFjaChsb2NhbC0+c2ltZmQsIGRldi0+aXJxLCBodG9ubChpZmEtPmlmYV9sb2NhbCkpOgorCQluZXRkZXZfYXR0YWNoKGxvY2FsLT5zaW1mZCwgZGV2LT5pcnEsIG50b2hsKGlmYS0+aWZhX2xvY2FsKSk6CiAJCW5ldGRldl9kZXRhY2gobG9jYWwtPnNpbWZkKTsKIAogCXByaW50ayhLRVJOX0lORk8gInNpbWV0aDogbmV0ZGV2X2F0dGFjaC9kZXRhY2g6IGV2ZW50PSVzIC0+JWRcbiIsCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jIGIvYXJjaC9pYTY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCA2YWEzYzUxLi5iZGRiZDIyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaWEzMi9zeXNfaWEzMi5jCisrKyBiL2FyY2gvaWE2NC9pYTMyL3N5c19pYTMyLmMKQEAgLTE5NDIsNyArMTk0Miw3IEBACiAJdW5zaWduZWQgaW50CV9fdW51c2VkWzRdOwogfTsKIAotI2lmZGVmIENPTkZJR19TWVNDVEwKKyNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIGFzbWxpbmthZ2UgbG9uZwogc3lzMzJfc3lzY3RsIChzdHJ1Y3Qgc3lzY3RsMzIgX191c2VyICphcmdzKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYWQ4MjE1YS4uMzE0OTc0OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQorKysgYi9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCkBAIC0zMiw2ICszMiwxMSBAQAogb2JqLSQoQ09ORklHX0FVRElUKQkJKz0gYXVkaXQubwogbWNhX3JlY292ZXJ5LXkJCQkrPSBtY2FfZHJ2Lm8gbWNhX2Rydl9hc20ubwogCitvYmotJChDT05GSUdfSUE2NF9FU0kpCQkrPSBlc2kubworaWZuZXEgKCQoQ09ORklHX0lBNjRfRVNJKSwpCitvYmoteQkJCQkrPSBlc2lfc3R1Yi5vCSMgbXVzdCBiZSBpbiBrZXJuZWwgcHJvcGVyCitlbmRpZgorCiAjIFRoZSBnYXRlIERTTyBpbWFnZSBpcyBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdC4KIHRhcmdldHMgKz0gZ2F0ZS5zbyBnYXRlLXN5bXMubwogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMgYi9hcmNoL2lhNjQva2VybmVsL2VudHJ5LlMKaW5kZXggZmVmMDY1Ny4uMTI3MDFjZiAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9lbnRyeS5TCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZW50cnkuUwpAQCAtMTYwNSw4ICsxNjA1LDggQEAKIAlkYXRhOCBzeXNfbmlfc3lzY2FsbAkJCS8vIDEyOTUgcmVzZXJ2ZWQgZm9yIHBwb2xsCiAJZGF0YTggc3lzX3Vuc2hhcmUKIAlkYXRhOCBzeXNfc3BsaWNlCi0JZGF0YTggc3lzX25pX3N5c2NhbGwJCQkvLyByZXNlcnZlZCBmb3Igc2V0X3JvYnVzdF9saXN0Ci0JZGF0YTggc3lzX25pX3N5c2NhbGwJCQkvLyByZXNlcnZlZCBmb3IgZ2V0X3JvYnVzdF9saXN0CisJZGF0YTggc3lzX3NldF9yb2J1c3RfbGlzdAorCWRhdGE4IHN5c19nZXRfcm9idXN0X2xpc3QKIAlkYXRhOCBzeXNfc3luY19maWxlX3JhbmdlCQkvLyAxMzAwCiAJZGF0YTggc3lzX3RlZQogCWRhdGE4IHN5c192bXNwbGljZQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lc2kuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZXNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJmNGU5OAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvZXNpLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBFeHRlbnNpYmxlIFNBTCBJbnRlcmZhY2UgKEVTSSkgc3VwcG9ydCByb3V0aW5lcy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSGV3bGV0dC1QYWNrYXJkIENvCisgKiAJQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25AaHAuY29tPgorICovCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorCisjaW5jbHVkZSA8YXNtL2VzaS5oPgorI2luY2x1ZGUgPGFzbS9zYWwuaD4KKworTU9EVUxFX0FVVEhPUigiQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25AaHAuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJFeHRlbnNpYmxlIFNBTCBJbnRlcmZhY2UgKEVTSSkgc3VwcG9ydCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCisjZGVmaW5lIE1PRFVMRV9OQU1FCSJlc2kiCisKKyNkZWZpbmUgRVNJX1RBQkxFX0dVSUQJCQkJCVwKKyAgICBFRklfR1VJRCgweDQzRUE1OERDLCAweENGMjgsIDB4NGIwNiwgMHhCMywJCVwKKwkgICAgIDB4OTEsIDB4QjcsIDB4NTAsIDB4NTksIDB4MzQsIDB4MkIsIDB4RDQpCisKK2VudW0gZXNpX3N5c3RhYl9lbnRyeV90eXBlIHsKKwlFU0lfREVTQ19FTlRSWV9QT0lOVCA9IDAKK307CisKKy8qCisgKiBFbnRyeSB0eXBlOglTaXplOgorICoJMAk0OAorICovCisjZGVmaW5lIEVTSV9ERVNDX1NJWkUodHlwZSkJIlwwNjAiWyh1bnNpZ25lZCkgKHR5cGUpXQorCit0eXBlZGVmIHN0cnVjdCBpYTY0X2VzaV9kZXNjX2VudHJ5X3BvaW50IHsKKwl1OCB0eXBlOworCXU4IHJlc2VydmVkMVsxNV07CisJdTY0IGVzaV9wcm9jOworCXU2NCBncDsKKwllZmlfZ3VpZF90IGd1aWQ7Cit9IGlhNjRfZXNpX2Rlc2NfZW50cnlfcG9pbnRfdDsKKworc3RydWN0IHBkZXNjIHsKKwl2b2lkICphZGRyOworCXZvaWQgKmdwOworfTsKKworc3RhdGljIHN0cnVjdCBpYTY0X3NhbF9zeXN0YWIgKmVzaV9zeXN0YWI7CisKK3N0YXRpYyBpbnQgX19pbml0IGVzaV9pbml0ICh2b2lkKQoreworCWVmaV9jb25maWdfdGFibGVfdCAqY29uZmlnX3RhYmxlczsKKwlzdHJ1Y3QgaWE2NF9zYWxfc3lzdGFiICpzeXN0YWI7CisJdW5zaWduZWQgbG9uZyBlc2kgPSAwOworCWNoYXIgKnA7CisJaW50IGk7CisKKwljb25maWdfdGFibGVzID0gX192YShlZmkuc3lzdGFiLT50YWJsZXMpOworCisJZm9yIChpID0gMDsgaSA8IChpbnQpIGVmaS5zeXN0YWItPm5yX3RhYmxlczsgKytpKSB7CisJCWlmIChlZmlfZ3VpZGNtcChjb25maWdfdGFibGVzW2ldLmd1aWQsIEVTSV9UQUJMRV9HVUlEKSA9PSAwKSB7CisJCQllc2kgPSBjb25maWdfdGFibGVzW2ldLnRhYmxlOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIWVzaSkKKwkJcmV0dXJuIC1FTk9ERVY7OworCisJc3lzdGFiID0gX192YShlc2kpOworCisJaWYgKHN0cm5jbXAoc3lzdGFiLT5zaWduYXR1cmUsICJFU0lUIiwgNCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgImJhZCBzaWduYXR1cmUgaW4gRVNJIHN5c3RlbSB0YWJsZSEiKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJcCA9IChjaGFyICopIChzeXN0YWIgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgc3lzdGFiLT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCS8qCisJCSAqIFRoZSBmaXJzdCBieXRlIG9mIGVhY2ggZW50cnkgdHlwZSBjb250YWlucyB0aGUgdHlwZQorCQkgKiBkZXNjcmlwdG9yLgorCQkgKi8KKwkJc3dpdGNoICgqcCkgeworCQkgICAgICBjYXNlIEVTSV9ERVNDX0VOVFJZX1BPSU5UOgorCQkJYnJlYWs7CisJCSAgICAgIGRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJVbmtvd24gdGFibGUgdHlwZSAlZCBmb3VuZCBpbiAiCisJCQkgICAgICAgIkVTSSB0YWJsZSwgaWdub3JpbmcgcmVzdCBvZiB0YWJsZVxuIiwgKnApOworCQkJcmV0dXJuIC1FTk9ERVY7CisJCX0KKworCQlwICs9IEVTSV9ERVNDX1NJWkUoKnApOworCX0KKworCWVzaV9zeXN0YWIgPSBzeXN0YWI7CisJcmV0dXJuIDA7Cit9CisKKworaW50IGlhNjRfZXNpX2NhbGwgKGVmaV9ndWlkX3QgZ3VpZCwgc3RydWN0IGlhNjRfc2FsX3JldHZhbCAqaXNydnAsCisJCSAgIGVudW0gZXNpX3Byb2NfdHlwZSBwcm9jX3R5cGUsIHU2NCBmdW5jLAorCQkgICB1NjQgYXJnMSwgdTY0IGFyZzIsIHU2NCBhcmczLCB1NjQgYXJnNCwgdTY0IGFyZzUsIHU2NCBhcmc2LAorCQkgICB1NjQgYXJnNykKK3sKKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmcls2XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKKwlpbnQgaTsKKwljaGFyICpwOworCisJaWYgKCFlc2lfc3lzdGFiKQorCQlyZXR1cm4gLTE7CisKKwlwID0gKGNoYXIgKikgKGVzaV9zeXN0YWIgKyAxKTsKKwlmb3IgKGkgPSAwOyBpIDwgZXNpX3N5c3RhYi0+ZW50cnlfY291bnQ7IGkrKykgeworCQlpZiAoKnAgPT0gRVNJX0RFU0NfRU5UUllfUE9JTlQpIHsKKwkJCWlhNjRfZXNpX2Rlc2NfZW50cnlfcG9pbnRfdCAqZXNpID0gKHZvaWQgKilwOworCQkJaWYgKCFlZmlfZ3VpZGNtcChndWlkLCBlc2ktPmd1aWQpKSB7CisJCQkJaWE2NF9zYWxfaGFuZGxlciBlc2lfcHJvYzsKKwkJCQlzdHJ1Y3QgcGRlc2MgcGRlc2M7CisKKwkJCQlwZGVzYy5hZGRyID0gX192YShlc2ktPmVzaV9wcm9jKTsKKwkJCQlwZGVzYy5ncCA9IF9fdmEoZXNpLT5ncCk7CisKKwkJCQllc2lfcHJvYyA9IChpYTY0X3NhbF9oYW5kbGVyKSAmcGRlc2M7CisKKwkJCQlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoZnIpOworCQkJCWlmIChwcm9jX3R5cGUgPT0gRVNJX1BST0NfU0VSSUFMSVpFRCkKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnNhbF9sb2NrLCBmbGFncyk7CisJCQkJZWxzZSBpZiAocHJvY190eXBlID09IEVTSV9QUk9DX01QX1NBRkUpCisJCQkJCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJCQllbHNlCisJCQkJCXByZWVtcHRfZGlzYWJsZSgpOworCQkJCSppc3J2cCA9ICgqZXNpX3Byb2MpKGZ1bmMsIGFyZzEsIGFyZzIsIGFyZzMsCisJCQkJCQkgICAgIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOworCQkJCWlmIChwcm9jX3R5cGUgPT0gRVNJX1BST0NfU0VSSUFMSVpFRCkKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2FsX2xvY2ssCisJCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQllbHNlIGlmIChwcm9jX3R5cGUgPT0gRVNJX1BST0NfTVBfU0FGRSkKKwkJCQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJcHJlZW1wdF9lbmFibGUoKTsKKwkJCQlpYTY0X2xvYWRfc2NyYXRjaF9mcHJlZ3MoZnIpOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCXAgKz0gRVNJX0RFU0NfU0laRSgqcCk7CisJfQorCXJldHVybiAtMTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKGlhNjRfZXNpX2NhbGwpOworCitpbnQgaWE2NF9lc2lfY2FsbF9waHlzIChlZmlfZ3VpZF90IGd1aWQsIHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKmlzcnZwLAorCQkJdTY0IGZ1bmMsIHU2NCBhcmcxLCB1NjQgYXJnMiwgdTY0IGFyZzMsIHU2NCBhcmc0LAorCQkJdTY0IGFyZzUsIHU2NCBhcmc2LCB1NjQgYXJnNykKK3sKKwlzdHJ1Y3QgaWE2NF9mcHJlZyBmcls2XTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU2NCBlc2lfcGFyYW1zWzhdOworCWNoYXIgKnA7CisJaW50IGk7CisKKwlpZiAoIWVzaV9zeXN0YWIpCisJCXJldHVybiAtMTsKKworCXAgPSAoY2hhciAqKSAoZXNpX3N5c3RhYiArIDEpOworCWZvciAoaSA9IDA7IGkgPCBlc2lfc3lzdGFiLT5lbnRyeV9jb3VudDsgaSsrKSB7CisJCWlmICgqcCA9PSBFU0lfREVTQ19FTlRSWV9QT0lOVCkgeworCQkJaWE2NF9lc2lfZGVzY19lbnRyeV9wb2ludF90ICplc2kgPSAodm9pZCAqKXA7CisJCQlpZiAoIWVmaV9ndWlkY21wKGd1aWQsIGVzaS0+Z3VpZCkpIHsKKwkJCQlpYTY0X3NhbF9oYW5kbGVyIGVzaV9wcm9jOworCQkJCXN0cnVjdCBwZGVzYyBwZGVzYzsKKworCQkJCXBkZXNjLmFkZHIgPSAodm9pZCAqKWVzaS0+ZXNpX3Byb2M7CisJCQkJcGRlc2MuZ3AgPSAodm9pZCAqKWVzaS0+Z3A7CisKKwkJCQllc2lfcHJvYyA9IChpYTY0X3NhbF9oYW5kbGVyKSAmcGRlc2M7CisKKwkJCQllc2lfcGFyYW1zWzBdID0gZnVuYzsKKwkJCQllc2lfcGFyYW1zWzFdID0gYXJnMTsKKwkJCQllc2lfcGFyYW1zWzJdID0gYXJnMjsKKwkJCQllc2lfcGFyYW1zWzNdID0gYXJnMzsKKwkJCQllc2lfcGFyYW1zWzRdID0gYXJnNDsKKwkJCQllc2lfcGFyYW1zWzVdID0gYXJnNTsKKwkJCQllc2lfcGFyYW1zWzZdID0gYXJnNjsKKwkJCQllc2lfcGFyYW1zWzddID0gYXJnNzsKKwkJCQlpYTY0X3NhdmVfc2NyYXRjaF9mcHJlZ3MoZnIpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZzYWxfbG9jaywgZmxhZ3MpOworCQkJCSppc3J2cCA9IGVzaV9jYWxsX3BoeXMoZXNpX3Byb2MsIGVzaV9wYXJhbXMpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNhbF9sb2NrLCBmbGFncyk7CisJCQkJaWE2NF9sb2FkX3NjcmF0Y2hfZnByZWdzKGZyKTsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJfQorCQlwICs9IEVTSV9ERVNDX1NJWkUoKnApOworCX0KKwlyZXR1cm4gLTE7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChpYTY0X2VzaV9jYWxsX3BoeXMpOworCitzdGF0aWMgdm9pZCBfX2V4aXQgZXNpX2V4aXQgKHZvaWQpCit7Cit9CisKK21vZHVsZV9pbml0KGVzaV9pbml0KTsKK21vZHVsZV9leGl0KGVzaV9leGl0KTsJLyogbWFrZXMgbW9kdWxlIHJlbW92YWJsZS4uLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9lc2lfc3R1Yi5TIGIvYXJjaC9pYTY0L2tlcm5lbC9lc2lfc3R1Yi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiM2Q2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2lhNjQva2VybmVsL2VzaV9zdHViLlMKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIEVTSSBjYWxsIHN0dWIuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEhld2xldHQtUGFja2FyZCBDbworICoJQWxleCBXaWxsaWFtc29uIDxhbGV4LndpbGxpYW1zb25AaHAuY29tPgorICoKKyAqIEJhc2VkIG9uIEVGSSBjYWxsIHN0dWIgYnkgRGF2aWQgTW9zYmVyZ2VyLiAgVGhlIHN0dWIgaXMgdmlydHVhbGx5CisgKiBpZGVudGljYWwgdG8gdGhlIG9uZSBmb3IgRUZJIHBoeXMtbW9kZSBjYWxscywgZXhjZXB0IHRoYXQgRVNJCisgKiBjYWxscyBtYXkgaGF2ZSB1cCB0byA4IGFyZ3VtZW50cywgc28gdGhleSBnZXQgcGFzc2VkIHRvIHRoaXMgcm91dGluZQorICogdGhyb3VnaCBtZW1vcnkuCisgKgorICogVGhpcyBzdHViIGFsbG93cyB1cyB0byBtYWtlIEVTSSBjYWxscyBpbiBwaHlzaWNhbCBtb2RlIHdpdGggaW50ZXJydXB0cworICogdHVybmVkIG9mZi4gIEVTSSBjYWxscyBtYXkgbm90IHN1cHBvcnQgY2FsbGluZyBmcm9tIHZpcnR1YWwgbW9kZS4KKyAqCisgKiBHb29nbGUgZm9yICJFeHRlbnNpYmxlIFNBTCBzcGVjaWZpY2F0aW9uIiBmb3IgYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZQorICogRVNJIHN0YW5kYXJkLgorICovCisKKy8qCisgKiBQU1Igc2V0dGluZ3MgYXMgcGVyIFNBTCBzcGVjIChDaGFwdGVyIDggaW4gdGhlICJJQS02NCBTeXN0ZW0KKyAqIEFic3RyYWN0aW9uIExheWVyIFNwZWNpZmljYXRpb24iLCByZXZpc2lvbiAyLjZlKS4gIE5vdGUgdGhhdAorICogcHNyLmRmbCBhbmQgcHNyLmRmaCBNVVNUIGJlIGNsZWFyZWQsIGRlc3BpdGUgd2hhdCB0aGlzIG1hbnVhbCBzYXlzLgorICogT3RoZXJ3aXNlLCBTQUwgZGllcyB3aGVuZXZlciBpdCdzIHRyeWluZyB0byBkbyBhbiBJQS0zMiBCSU9TIGNhbGwKKyAqICh0aGUgYnIuaWEgaW5zdHJ1Y3Rpb24gZmFpbHMgdW5sZXNzIHBzci5kZmwgYW5kIHBzci5kZmggYXJlCisgKiBjbGVhcmVkKS4gIEZvcnR1bmF0ZWx5LCBTQUwgcHJvbWlzZXMgbm90IHRvIHRvdWNoIHRoZSBmbG9hdGluZworICogcG9pbnQgcmVncywgc28gYXQgbGVhc3Qgd2UgZG9uJ3QgaGF2ZSB0byBzYXZlIGYyLWYxMjcuCisgKi8KKyNkZWZpbmUgUFNSX0JJVFNfVE9fQ0xFQVIJCQkJCQlcCisJKElBNjRfUFNSX0kgfCBJQTY0X1BTUl9JVCB8IElBNjRfUFNSX0RUIHwgSUE2NF9QU1JfUlQgfAkJXAorCSBJQTY0X1BTUl9ERCB8IElBNjRfUFNSX1NTIHwgSUE2NF9QU1JfUkkgfCBJQTY0X1BTUl9FRCB8CVwKKwkgSUE2NF9QU1JfREZMIHwgSUE2NF9QU1JfREZIKQorCisjZGVmaW5lIFBTUl9CSVRTX1RPX1NFVAkJCQkJCQlcCisJKElBNjRfUFNSX0JOKQorCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPgorCisvKgorICogSW5wdXRzOgorICoJaW4wID0gYWRkcmVzcyBvZiBmdW5jdGlvbiBkZXNjcmlwdG9yIG9mIEVTSSByb3V0aW5lIHRvIGNhbGwKKyAqCWluMSA9IGFkZHJlc3Mgb2YgYXJyYXkgb2YgRVNJIHBhcmFtZXRlcnMKKyAqCisgKiBPdXRwdXRzOgorICoJcjggPSByZXN1bHQgcmV0dXJuZWQgYnkgY2FsbGVkIGZ1bmN0aW9uCisgKi8KK0dMT0JBTF9FTlRSWShlc2lfY2FsbF9waHlzKQorCS5wcm9sb2d1ZSBBU01fVU5XX1BSTEdfUlB8QVNNX1VOV19QUkxHX1BGUywgQVNNX1VOV19QUkxHX0dSU0FWRSgyKQorCWFsbG9jIGxvYzE9YXIucGZzLDIsNyw4LDAKKwlsZDggcjI9W2luMF0sOAkJCS8vIGxvYWQgRVNJIGZ1bmN0aW9uJ3MgZW50cnkgcG9pbnQKKwltb3YgbG9jMD1ycAorCS5ib2R5CisJOzsKKwlsZDggb3V0MD1baW4xXSw4CQkvLyBFU0kgcGFyYW1zIGxvYWRlZCBmcm9tIGFycmF5CisJOzsJCQkJLy8gcGFzc2luZyBhbGwgYXMgaW5wdXRzIGRvZXNuJ3Qgd29yaworCWxkOCBvdXQxPVtpbjFdLDgKKwk7OworCWxkOCBvdXQyPVtpbjFdLDgKKwk7OworCWxkOCBvdXQzPVtpbjFdLDgKKwk7OworCWxkOCBvdXQ0PVtpbjFdLDgKKwk7OworCWxkOCBvdXQ1PVtpbjFdLDgKKwk7OworCWxkOCBvdXQ2PVtpbjFdLDgKKwk7OworCWxkOCBvdXQ3PVtpbjFdCisJbW92IGxvYzI9Z3AJCQkvLyBzYXZlIGdsb2JhbCBwb2ludGVyCisJbW92IGxvYzQ9YXIucnNjCQkJLy8gc2F2ZSBSU0UgY29uZmlndXJhdGlvbgorCW1vdiBhci5yc2M9MAkJCS8vIHB1dCBSU0UgaW4gZW5mb3JjZWQgbGF6eSwgTEUgbW9kZQorCTs7CisJbGQ4IGdwPVtpbjBdCQkJLy8gbG9hZCBFU0kgZnVuY3Rpb24ncyBnbG9iYWwgcG9pbnRlcgorCW1vdmwgcjE2PVBTUl9CSVRTX1RPX0NMRUFSCisJbW92IGxvYzM9cHNyCQkJLy8gc2F2ZSBwcm9jZXNzb3Igc3RhdHVzIHdvcmQKKwltb3ZsIHIxNz1QU1JfQklUU19UT19TRVQKKwk7OworCW9yIGxvYzM9bG9jMyxyMTcKKwltb3YgYjY9cjIKKwk7OworCWFuZGNtIHIxNj1sb2MzLHIxNgkvLyBnZXQgcHNyIHdpdGggSVQsIERULCBhbmQgUlQgYml0cyBjbGVhcmVkCisJYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZV9waHlzCisucmV0MDoJbW92IGxvYzU9cjE5CQkJLy8gb2xkIGFyLmJzcAorCW1vdiBsb2M2PXIyMAkJCS8vIG9sZCBzcAorCWJyLmNhbGwuc3B0ay5tYW55IHJwPWI2CQkvLyBjYWxsIHRoZSBFU0kgZnVuY3Rpb24KKy5yZXQxOgltb3YgYXIucnNjPTAJCQkvLyBwdXQgUlNFIGluIGVuZm9yY2VkIGxhenksIExFIG1vZGUKKwltb3YgcjE2PWxvYzMJCQkvLyBzYXZlIHZpcnR1YWwgbW9kZSBwc3IKKwltb3YgcjE5PWxvYzUJCQkvLyBzYXZlIHZpcnR1YWwgbW9kZSBic3BzdG9yZQorCW1vdiByMjA9bG9jNgkJCS8vIHNhdmUgdmlydHVhbCBtb2RlIHNwCisJYnIuY2FsbC5zcHRrLm1hbnkgcnA9aWE2NF9zd2l0Y2hfbW9kZV92aXJ0IC8vIHJldHVybiB0byB2aXJ0dWFsIG1vZGUKKy5yZXQyOgltb3YgYXIucnNjPWxvYzQJCQkvLyByZXN0b3JlIFJTRSBjb25maWd1cmF0aW9uCisJbW92IGFyLnBmcz1sb2MxCisJbW92IHJwPWxvYzAKKwltb3YgZ3A9bG9jMgorCWJyLnJldC5zcHRrLm1hbnkgcnAKK0VORChlc2lfY2FsbF9waHlzKQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pYTY0X2tzeW1zLmMgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwppbmRleCAzZWFkMjBmLi44NzljMTgxIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYworKysgYi9hcmNoL2lhNjQva2VybmVsL2lhNjRfa3N5bXMuYwpAQCAtMTA1LDUgKzEwNSw5IEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfRVNJKSB8fCBkZWZpbmVkKENPTkZJR19JQTY0X0VTSV9NT0RVTEUpCitleHRlcm4gdm9pZCBlc2lfY2FsbF9waHlzICh2b2lkKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGVzaV9jYWxsX3BoeXMpOworI2VuZGlmCiBleHRlcm4gY2hhciBpYTY0X2l2dFtdOwogRVhQT1JUX1NZTUJPTChpYTY0X2l2dCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL2twcm9iZXMuYyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDc4MTk2MGYuLjE2OWVjM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwva3Byb2Jlcy5jCkBAIC0xMzYsMTAgKzEzNiw4IEBACiBzdGF0aWMgaW50IF9fa3Byb2JlcyB1bnN1cHBvcnRlZF9pbnN0KHVpbnQgdGVtcGxhdGUsIHVpbnQgIHNsb3QsCiAJCQkJICAgICAgdWludCBtYWpvcl9vcGNvZGUsCiAJCQkJICAgICAgdW5zaWduZWQgbG9uZyBrcHJvYmVfaW5zdCwKLQkJCQkgICAgICBzdHJ1Y3Qga3Byb2JlICpwKQorCQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwotCiAJaWYgKGJ1bmRsZV9lbmNvZGluZ1t0ZW1wbGF0ZV1bc2xvdF0gPT0gSSkgewogCQlzd2l0Y2ggKG1ham9yX29wY29kZSkgewogCQkJY2FzZSAweDA6IC8vSV9VTklUX01JU0NfT1BDT0RFOgpAQCAtMjE3LDcgKzIxNSw3IEBACiAJCQkJCSBzdHJ1Y3Qga3Byb2JlICpwKQogewogCXVuc2lnbmVkIGxvbmcgYnJlYWtfaW5zdCA9IEJSRUFLX0lOU1Q7Ci0JYnVuZGxlX3QgKmJ1bmRsZSA9ICZwLT5haW5zbi5pbnNuLmJ1bmRsZTsKKwlidW5kbGVfdCAqYnVuZGxlID0gJnAtPm9wY29kZS5idW5kbGU7CiAKIAkvKgogCSAqIENvcHkgdGhlIG9yaWdpbmFsIGtwcm9iZV9pbnN0IHF1YWxpZnlpbmcgcHJlZGljYXRlKHFwKQpAQCAtNDIzLDExICs0MjEsOSBAQAogCXVuc2lnbmVkIGxvbmcgKmtwcm9iZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcgKikoYWRkciAmIH4weEZVTEwpOwogCXVuc2lnbmVkIGxvbmcga3Byb2JlX2luc3Q9MDsKIAl1bnNpZ25lZCBpbnQgc2xvdCA9IGFkZHIgJiAweGYsIHRlbXBsYXRlLCBtYWpvcl9vcGNvZGUgPSAwOwotCWJ1bmRsZV90ICpidW5kbGUgPSAmcC0+YWluc24uaW5zbi5idW5kbGU7CisJYnVuZGxlX3QgKmJ1bmRsZTsKIAotCW1lbWNweSgmcC0+b3Bjb2RlLmJ1bmRsZSwga3Byb2JlX2FkZHIsIHNpemVvZihidW5kbGVfdCkpOwotCW1lbWNweSgmcC0+YWluc24uaW5zbi5idW5kbGUsIGtwcm9iZV9hZGRyLCBzaXplb2YoYnVuZGxlX3QpKTsKLQorCWJ1bmRsZSA9ICYoKGtwcm9iZV9vcGNvZGVfdCAqKWtwcm9iZV9hZGRyKS0+YnVuZGxlOwogIAl0ZW1wbGF0ZSA9IGJ1bmRsZS0+cXVhZDAudGVtcGxhdGU7CiAKIAlpZih2YWxpZF9rcHJvYmVfYWRkcih0ZW1wbGF0ZSwgc2xvdCwgYWRkcikpCkBAIC00NDAsMzAgKzQzNiwzMCBAQAogCS8qIEdldCBrcHJvYmVfaW5zdCBhbmQgbWFqb3Jfb3Bjb2RlIGZyb20gdGhlIGJ1bmRsZSAqLwogCWdldF9rcHJvYmVfaW5zdChidW5kbGUsIHNsb3QsICZrcHJvYmVfaW5zdCwgJm1ham9yX29wY29kZSk7CiAKLQlpZiAodW5zdXBwb3J0ZWRfaW5zdCh0ZW1wbGF0ZSwgc2xvdCwgbWFqb3Jfb3Bjb2RlLCBrcHJvYmVfaW5zdCwgcCkpCisJaWYgKHVuc3VwcG9ydGVkX2luc3QodGVtcGxhdGUsIHNsb3QsIG1ham9yX29wY29kZSwga3Byb2JlX2luc3QsIGFkZHIpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKKworCXAtPmFpbnNuLmluc24gPSBnZXRfaW5zbl9zbG90KCk7CisJaWYgKCFwLT5haW5zbi5pbnNuKQorCQlyZXR1cm4gLUVOT01FTTsKKwltZW1jcHkoJnAtPm9wY29kZSwga3Byb2JlX2FkZHIsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwltZW1jcHkocC0+YWluc24uaW5zbiwga3Byb2JlX2FkZHIsIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKKwogCXByZXBhcmVfYnJlYWtfaW5zdCh0ZW1wbGF0ZSwgc2xvdCwgbWFqb3Jfb3Bjb2RlLCBrcHJvYmVfaW5zdCwgcCk7CiAKIAlyZXR1cm4gMDsKIH0KIAotdm9pZCBfX2twcm9iZXMgZmx1c2hfaW5zbl9zbG90KHN0cnVjdCBrcHJvYmUgKnApCi17Ci0JdW5zaWduZWQgbG9uZyBhcm1fYWRkcjsKLQotCWFybV9hZGRyID0gKCh1bnNpZ25lZCBsb25nKSZwLT5vcGNvZGUuYnVuZGxlKSAmIH4weEZVTEw7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKGFybV9hZGRyLCBhcm1fYWRkciArIHNpemVvZihidW5kbGVfdCkpOwotfQotCiB2b2lkIF9fa3Byb2JlcyBhcmNoX2FybV9rcHJvYmUoc3RydWN0IGtwcm9iZSAqcCkKIHsKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwLT5hZGRyOwogCXVuc2lnbmVkIGxvbmcgYXJtX2FkZHIgPSBhZGRyICYgfjB4RlVMTDsKIAotCWZsdXNoX2luc25fc2xvdChwKTsKLQltZW1jcHkoKGNoYXIgKilhcm1fYWRkciwgJnAtPmFpbnNuLmluc24uYnVuZGxlLCBzaXplb2YoYnVuZGxlX3QpKTsKLQlmbHVzaF9pY2FjaGVfcmFuZ2UoYXJtX2FkZHIsIGFybV9hZGRyICsgc2l6ZW9mKGJ1bmRsZV90KSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKXAtPmFpbnNuLmluc24sCisJCQkodW5zaWduZWQgbG9uZylwLT5haW5zbi5pbnNuICsgc2l6ZW9mKGtwcm9iZV9vcGNvZGVfdCkpOworCW1lbWNweSgoY2hhciAqKWFybV9hZGRyLCAmcC0+b3Bjb2RlLCBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKGFybV9hZGRyLCBhcm1fYWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKIH0KIAogdm9pZCBfX2twcm9iZXMgYXJjaF9kaXNhcm1fa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCkBAIC00NzEsMTEgKzQ2NywxOCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXAtPmFkZHI7CiAJdW5zaWduZWQgbG9uZyBhcm1fYWRkciA9IGFkZHIgJiB+MHhGVUxMOwogCi0JLyogcC0+b3Bjb2RlIGNvbnRhaW5zIHRoZSBvcmlnaW5hbCB1bmFsdGVyZWQgYnVuZGxlICovCi0JbWVtY3B5KChjaGFyICopIGFybV9hZGRyLCAoY2hhciAqKSAmcC0+b3Bjb2RlLmJ1bmRsZSwgc2l6ZW9mKGJ1bmRsZV90KSk7Ci0JZmx1c2hfaWNhY2hlX3JhbmdlKGFybV9hZGRyLCBhcm1fYWRkciArIHNpemVvZihidW5kbGVfdCkpOworCS8qIHAtPmFpbnNuLmluc24gY29udGFpbnMgdGhlIG9yaWdpbmFsIHVuYWx0ZXJlZCBrcHJvYmVfb3Bjb2RlX3QgKi8KKwltZW1jcHkoKGNoYXIgKikgYXJtX2FkZHIsIChjaGFyICopIHAtPmFpbnNuLmluc24sCisJCQkJCSBzaXplb2Yoa3Byb2JlX29wY29kZV90KSk7CisJZmx1c2hfaWNhY2hlX3JhbmdlKGFybV9hZGRyLCBhcm1fYWRkciArIHNpemVvZihrcHJvYmVfb3Bjb2RlX3QpKTsKIH0KIAordm9pZCBfX2twcm9iZXMgYXJjaF9yZW1vdmVfa3Byb2JlKHN0cnVjdCBrcHJvYmUgKnApCit7CisJbXV0ZXhfbG9jaygma3Byb2JlX211dGV4KTsKKwlmcmVlX2luc25fc2xvdChwLT5haW5zbi5pbnNuKTsKKwltdXRleF91bmxvY2soJmtwcm9iZV9tdXRleCk7Cit9CiAvKgogICogV2UgYXJlIHJlc3VtaW5nIGV4ZWN1dGlvbiBhZnRlciBhIHNpbmdsZSBzdGVwIGZhdWx0LCBzbyB0aGUgcHRfcmVncwogICogc3RydWN0dXJlIHJlZmxlY3RzIHRoZSByZWdpc3RlciBzdGF0ZSBhZnRlciB3ZSBleGVjdXRlZCB0aGUgaW5zdHJ1Y3Rpb24KQEAgLTQ4NiwxMiArNDg5LDEyIEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fa3Byb2JlcyByZXN1bWVfZXhlY3V0aW9uKHN0cnVjdCBrcHJvYmUgKnAsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotICAJdW5zaWduZWQgbG9uZyBidW5kbGVfYWRkciA9ICgodW5zaWduZWQgbG9uZykgKCZwLT5vcGNvZGUuYnVuZGxlKSkgJiB+MHhGVUxMOworICAJdW5zaWduZWQgbG9uZyBidW5kbGVfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAoJnAtPmFpbnNuLmluc24tPmJ1bmRsZSk7CiAgIAl1bnNpZ25lZCBsb25nIHJlc3VtZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciAmIH4weEZVTEw7CiAgCXVuc2lnbmVkIGxvbmcgdGVtcGxhdGU7CiAgCWludCBzbG90ID0gKCh1bnNpZ25lZCBsb25nKXAtPmFkZHIgJiAweGYpOwogCi0JdGVtcGxhdGUgPSBwLT5vcGNvZGUuYnVuZGxlLnF1YWQwLnRlbXBsYXRlOworCXRlbXBsYXRlID0gcC0+YWluc24uaW5zbi0+YnVuZGxlLnF1YWQwLnRlbXBsYXRlOwogCiAgCWlmIChzbG90ID09IDEgJiYgYnVuZGxlX2VuY29kaW5nW3RlbXBsYXRlXVsxXSA9PSBMKQogIAkJc2xvdCA9IDI7CkBAIC01NTMsNyArNTU2LDcgQEAKIAogc3RhdGljIHZvaWQgX19rcHJvYmVzIHByZXBhcmVfc3Moc3RydWN0IGtwcm9iZSAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JdW5zaWduZWQgbG9uZyBidW5kbGVfYWRkciA9ICh1bnNpZ25lZCBsb25nKSAmcC0+b3Bjb2RlLmJ1bmRsZTsKKwl1bnNpZ25lZCBsb25nIGJ1bmRsZV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpICZwLT5haW5zbi5pbnNuLT5idW5kbGU7CiAJdW5zaWduZWQgbG9uZyBzbG90ID0gKHVuc2lnbmVkIGxvbmcpcC0+YWRkciAmIDB4ZjsKIAogCS8qIHNpbmdsZSBzdGVwIGlubGluZSBpZiBicmVhayBpbnN0cnVjdGlvbiAqLwpAQCAtNzY4LDYgKzc3MSwxMiBAQAogCQkgKi8KIAkJaWYgKGN1ci0+ZmF1bHRfaGFuZGxlciAmJiBjdXItPmZhdWx0X2hhbmRsZXIoY3VyLCByZWdzLCB0cmFwbnIpKQogCQkJcmV0dXJuIDE7CisJCS8qCisJCSAqIEluIGNhc2UgdGhlIHVzZXItc3BlY2lmaWVkIGZhdWx0IGhhbmRsZXIgcmV0dXJuZWQKKwkJICogemVybywgdHJ5IHRvIGZpeCB1cC4KKwkJICovCisJCWlmIChpYTY0X2RvbmVfd2l0aF9leGNlcHRpb24ocmVncykpCisJCQlyZXR1cm4gMTsKIAogCQkvKgogCQkgKiBMZXQgaWE2NF9kb19wYWdlX2ZhdWx0KCkgZml4IGl0LgpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhLmMKaW5kZXggMmZiZTQ1My4uNjYzMjMwMSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2EuYworKysgYi9hcmNoL2lhNjQva2VybmVsL21jYS5jCkBAIC01NCw2ICs1NCw5IEBACiAgKgogICogMjAwNS0xMC0wNyBLZWl0aCBPd2VucyA8a2Fvc0BzZ2kuY29tPgogICoJICAgICAgQWRkIG5vdGlmeV9kaWUoKSBob29rcy4KKyAqCisgKiAyMDA2LTA5LTE1IEhpZGV0b3NoaSBTZXRvIDxzZXRvLmhpZGV0b3NoaUBqcC5mdWppdHN1LmNvbT4KKyAqIAkgICAgICBBZGQgcHJpbnRpbmcgc3VwcG9ydCBmb3IgTUNBL0lOSVQuCiAgKi8KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzNiwxMSArMTM5LDE3NSBAQAogCiBzdGF0aWMgaW50IG1jYV9pbml0IF9faW5pdGRhdGE7CiAKKy8qCisgKiBsaW1pdGVkICYgZGVsYXllZCBwcmludGluZyBzdXBwb3J0IGZvciBNQ0EvSU5JVCBoYW5kbGVyCisgKi8KKworI2RlZmluZSBtcHJpbnRrKGZtdC4uLikgaWE2NF9tY2FfcHJpbnRrKGZtdCkKKworI2RlZmluZSBNTE9HQlVGX1NJWkUgKDUxMisyNTYqTlJfQ1BVUykKKyNkZWZpbmUgTUxPR0JVRl9NU0dNQVggMjU2CitzdGF0aWMgY2hhciBtbG9nYnVmW01MT0dCVUZfU0laRV07CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1sb2didWZfd2xvY2spOwkvKiBtY2EgY29udGV4dCBvbmx5ICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKG1sb2didWZfcmxvY2spOwkvKiBub3JtYWwgY29udGV4dCBvbmx5ICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtbG9nYnVmX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWxvZ2J1Zl9lbmQ7CitzdGF0aWMgdW5zaWduZWQgaW50IG1sb2didWZfZmluaXNoZWQgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgbWxvZ2J1Zl90aW1lc3RhbXAgPSAwOworCitzdGF0aWMgaW50IGxvZ2xldmVsX3NhdmUgPSAtMTsKKyNkZWZpbmUgQlJFQUtfTE9HTEVWRUwoX19jb25zb2xlX2xvZ2xldmVsKQkJXAorCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkJCQlcCisJaWYgKGxvZ2xldmVsX3NhdmUgPCAwKQkJCQlcCisJCWxvZ2xldmVsX3NhdmUgPSBfX2NvbnNvbGVfbG9nbGV2ZWw7CVwKKwlfX2NvbnNvbGVfbG9nbGV2ZWwgPSAxNTsKKworI2RlZmluZSBSRVNUT1JFX0xPR0xFVkVMKF9fY29uc29sZV9sb2dsZXZlbCkJCVwKKwlpZiAobG9nbGV2ZWxfc2F2ZSA+PSAwKSB7CQkJXAorCQlfX2NvbnNvbGVfbG9nbGV2ZWwgPSBsb2dsZXZlbF9zYXZlOwlcCisJCWxvZ2xldmVsX3NhdmUgPSAtMTsJCQlcCisJfQkJCQkJCVwKKwltbG9nYnVmX2ZpbmlzaGVkID0gMDsJCQkJXAorCW9vcHNfaW5fcHJvZ3Jlc3MgPSAwOworCisvKgorICogUHVzaCBtZXNzYWdlcyBpbnRvIGJ1ZmZlciwgcHJpbnQgdGhlbSBsYXRlciBpZiBub3QgdXJnZW50LgorICovCit2b2lkIGlhNjRfbWNhX3ByaW50ayhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJaW50IHByaW50ZWRfbGVuOworCWNoYXIgdGVtcF9idWZbTUxPR0JVRl9NU0dNQVhdOworCWNoYXIgKnA7CisKKwl2YV9zdGFydChhcmdzLCBmbXQpOworCXByaW50ZWRfbGVuID0gdnNjbnByaW50Zih0ZW1wX2J1Ziwgc2l6ZW9mKHRlbXBfYnVmKSwgZm10LCBhcmdzKTsKKwl2YV9lbmQoYXJncyk7CisKKwkvKiBDb3B5IHRoZSBvdXRwdXQgaW50byBtbG9nYnVmICovCisJaWYgKG9vcHNfaW5fcHJvZ3Jlc3MpIHsKKwkJLyogbWxvZ2J1ZiB3YXMgYWJhbmRvbmVkLCB1c2UgcHJpbnRrIGRpcmVjdGx5IGluc3RlYWQuICovCisJCXByaW50ayh0ZW1wX2J1Zik7CisJfSBlbHNlIHsKKwkJc3Bpbl9sb2NrKCZtbG9nYnVmX3dsb2NrKTsKKwkJZm9yIChwID0gdGVtcF9idWY7ICpwOyBwKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgbmV4dCA9IChtbG9nYnVmX2VuZCArIDEpICUgTUxPR0JVRl9TSVpFOworCQkJaWYgKG5leHQgIT0gbWxvZ2J1Zl9zdGFydCkgeworCQkJCW1sb2didWZbbWxvZ2J1Zl9lbmRdID0gKnA7CisJCQkJbWxvZ2J1Zl9lbmQgPSBuZXh0OworCQkJfSBlbHNlIHsKKwkJCQkvKiBidWZmZXIgZnVsbCAqLworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCW1sb2didWZbbWxvZ2J1Zl9lbmRdID0gJ1wwJzsKKwkJc3Bpbl91bmxvY2soJm1sb2didWZfd2xvY2spOworCX0KK30KK0VYUE9SVF9TWU1CT0woaWE2NF9tY2FfcHJpbnRrKTsKKworLyoKKyAqIFByaW50IGJ1ZmZlcmVkIG1lc3NhZ2VzLgorICogIE5PVEU6IGNhbGwgdGhpcyBhZnRlciByZXR1cm5pbmcgbm9ybWFsIGNvbnRleHQuIChleC4gZnJvbSBzYWxpbmZvZCkKKyAqLwordm9pZCBpYTY0X21sb2didWZfZHVtcCh2b2lkKQoreworCWNoYXIgdGVtcF9idWZbTUxPR0JVRl9NU0dNQVhdOworCWNoYXIgKnA7CisJdW5zaWduZWQgbG9uZyBpbmRleDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBwcmludGVkX2xlbjsKKworCS8qIEdldCBvdXRwdXQgZnJvbSBtbG9nYnVmICovCisJd2hpbGUgKG1sb2didWZfc3RhcnQgIT0gbWxvZ2J1Zl9lbmQpIHsKKwkJdGVtcF9idWZbMF0gPSAnXDAnOworCQlwID0gdGVtcF9idWY7CisJCXByaW50ZWRfbGVuID0gMDsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmbWxvZ2J1Zl9ybG9jaywgZmxhZ3MpOworCisJCWluZGV4ID0gbWxvZ2J1Zl9zdGFydDsKKwkJd2hpbGUgKGluZGV4ICE9IG1sb2didWZfZW5kKSB7CisJCQkqcCA9IG1sb2didWZbaW5kZXhdOworCQkJaW5kZXggPSAoaW5kZXggKyAxKSAlIE1MT0dCVUZfU0laRTsKKwkJCWlmICghKnApCisJCQkJYnJlYWs7CisJCQlwKys7CisJCQlpZiAoKytwcmludGVkX2xlbiA+PSBNTE9HQlVGX01TR01BWCAtIDEpCisJCQkJYnJlYWs7CisJCX0KKwkJKnAgPSAnXDAnOworCQlpZiAodGVtcF9idWZbMF0pCisJCQlwcmludGsodGVtcF9idWYpOworCQltbG9nYnVmX3N0YXJ0ID0gaW5kZXg7CisKKwkJbWxvZ2J1Zl90aW1lc3RhbXAgPSAwOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtbG9nYnVmX3Jsb2NrLCBmbGFncyk7CisJfQorfQorRVhQT1JUX1NZTUJPTChpYTY0X21sb2didWZfZHVtcCk7CisKKy8qCisgKiBDYWxsIHRoaXMgaWYgc3lzdGVtIGlzIGdvaW5nIHRvIGRvd24gb3IgaWYgaW1tZWRpYXRlIGZsdXNoaW5nIG1lc3NhZ2VzIHRvCisgKiBjb25zb2xlIGlzIHJlcXVpcmVkLiAoZXguIHJlY292ZXJ5IHdhcyBmYWlsZWQsIGNyYXNoIGR1bXAgaXMgZ29pbmcgdG8gYmUKKyAqIGludm9rZWQsIGxvbmctd2FpdCByZW5kZXp2b3VzIGV0Yy4pCisgKiAgTk9URTogdGhpcyBzaG91bGQgYmUgY2FsbGVkIGZyb20gbW9uYXJjaC4KKyAqLworc3RhdGljIHZvaWQgaWE2NF9tbG9nYnVmX2ZpbmlzaChpbnQgd2FpdCkKK3sKKwlCUkVBS19MT0dMRVZFTChjb25zb2xlX2xvZ2xldmVsKTsKKworCXNwaW5fbG9ja19pbml0KCZtbG9nYnVmX3Jsb2NrKTsKKwlpYTY0X21sb2didWZfZHVtcCgpOworCXByaW50ayhLRVJOX0VNRVJHICJtbG9nYnVmX2ZpbmlzaDogcHJpbnRpbmcgc3dpdGNoZWQgdG8gdXJnZW50IG1vZGUsICIKKwkJIk1DQS9JTklUIG1pZ2h0IGJlIGRvZGd5IG9yIGZhaWwuXG4iKTsKKworCWlmICghd2FpdCkKKwkJcmV0dXJuOworCisJLyogd2FpdCBmb3IgY29uc29sZSAqLworCXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CisJdWRlbGF5KDUqMTAwMDAwMCk7CisKKwltbG9nYnVmX2ZpbmlzaGVkID0gMTsKK30KK0VYUE9SVF9TWU1CT0woaWE2NF9tbG9nYnVmX2ZpbmlzaCk7CisKKy8qCisgKiBQcmludCBidWZmZXJlZCBtZXNzYWdlcyBmcm9tIElOSVQgY29udGV4dC4KKyAqLworc3RhdGljIHZvaWQgaWE2NF9tbG9nYnVmX2R1bXBfZnJvbV9pbml0KHZvaWQpCit7CisJaWYgKG1sb2didWZfZmluaXNoZWQpCisJCXJldHVybjsKKworCWlmIChtbG9nYnVmX3RpbWVzdGFtcCAmJiAobWxvZ2J1Zl90aW1lc3RhbXAgKyAzMCpIWiA+IGppZmZpZXMpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiSU5JVDogbWxvZ2J1Zl9kdW1wIGlzIGludGVycnVwdGVkIGJ5IElOSVQgIgorCQkJIiBhbmQgdGhlIHN5c3RlbSBzZWVtcyB0byBiZSBtZXNzZWQgdXAuXG4iKTsKKwkJaWE2NF9tbG9nYnVmX2ZpbmlzaCgwKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghc3Bpbl90cnlsb2NrKCZtbG9nYnVmX3Jsb2NrKSkgeworCQlwcmludGsoS0VSTl9FUlIgIklOSVQ6IG1sb2didWZfZHVtcCBpcyBpbnRlcnJ1cHRlZCBieSBJTklULiAiCisJCQkiR2VuZXJhdGVkIG1lc3NhZ2VzIG90aGVyIHRoYW4gc3RhY2sgZHVtcCB3aWxsIGJlICIKKwkJCSJidWZmZXJlZCB0byBtbG9nYnVmIGFuZCB3aWxsIGJlIHByaW50ZWQgbGF0ZXIuXG4iKTsKKwkJcHJpbnRrKEtFUk5fRVJSICJJTklUOiBJZiBtZXNzYWdlcyB3b3VsZCBub3QgcHJpbnRlZCBhZnRlciAiCisJCQkidGhpcyBJTklULCB3YWl0IDMwc2VjIGFuZCBhc3NlcnQgSU5JVCBhZ2Fpbi5cbiIpOworCQlpZiAoIW1sb2didWZfdGltZXN0YW1wKQorCQkJbWxvZ2J1Zl90aW1lc3RhbXAgPSBqaWZmaWVzOworCQlyZXR1cm47CisJfQorCXNwaW5fdW5sb2NrKCZtbG9nYnVmX3Jsb2NrKTsKKwlpYTY0X21sb2didWZfZHVtcCgpOworfQogCiBzdGF0aWMgdm9pZCBpbmxpbmUKIGlhNjRfbWNhX3NwaW4oY29uc3QgY2hhciAqZnVuYykKIHsKLQlwcmludGsoS0VSTl9FTUVSRyAiJXM6IHNwaW5uaW5nIGhlcmUsIG5vdCByZXR1cm5pbmcgdG8gU0FMXG4iLCBmdW5jKTsKKwlpZiAobW9uYXJjaF9jcHUgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQlpYTY0X21sb2didWZfZmluaXNoKDApOworCW1wcmludGsoS0VSTl9FTUVSRyAiJXM6IHNwaW5uaW5nIGhlcmUsIG5vdCByZXR1cm5pbmcgdG8gU0FMXG4iLCBmdW5jKTsKIAl3aGlsZSAoMSkKIAkJY3B1X3JlbGF4KCk7CiB9CkBAIC0yMjEsNyArMzg4LDcgQEAKIHsKIAlzYWxfbG9nX3JlY29yZF9oZWFkZXJfdCAgICAgKmxvZ19idWZmZXI7CiAJdTY0ICAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX2xlbiA9IDA7Ci0JaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHM7CisJdW5zaWduZWQgbG9uZyAgICAgICAgICAgICAgIHM7CiAKIAlJQTY0X0xPR19MT0NLKHNhbF9pbmZvX3R5cGUpOwogCkBAIC0zNDQsOSArNTExLDYgQEAKIAkvKiBTQUwgc3BlYyBzdGF0ZXMgdGhpcyBzaG91bGQgcnVuIHcvIGludGVycnVwdHMgZW5hYmxlZCAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCS8qIEdldCB0aGUgQ1BFIGVycm9yIHJlY29yZCBhbmQgbG9nIGl0ICovCi0JaWE2NF9tY2FfbG9nX3NhbF9lcnJvcl9yZWNvcmQoU0FMX0lORk9fVFlQRV9DUEUpOwotCiAJc3Bpbl9sb2NrKCZjcGVfaGlzdG9yeV9sb2NrKTsKIAlpZiAoIWNwZV9wb2xsX2VuYWJsZWQgJiYgY3BlX3ZlY3RvciA+PSAwKSB7CiAKQEAgLTM3NSw3ICs1MzksNyBAQAogCQkJbW9kX3RpbWVyKCZjcGVfcG9sbF90aW1lciwgamlmZmllcyArIE1JTl9DUEVfUE9MTF9JTlRFUlZBTCk7CiAKIAkJCS8qIGxvY2sgYWxyZWFkeSByZWxlYXNlZCwgZ2V0IG91dCBub3cgKi8KLQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewogCQkJY3BlX2hpc3RvcnlbaW5kZXgrK10gPSBub3c7CiAJCQlpZiAoaW5kZXggPT0gQ1BFX0hJU1RPUllfTEVOR1RIKQpAQCAtMzgzLDYgKzU0NywxMCBAQAogCQl9CiAJfQogCXNwaW5fdW5sb2NrKCZjcGVfaGlzdG9yeV9sb2NrKTsKK291dDoKKwkvKiBHZXQgdGhlIENQRSBlcnJvciByZWNvcmQgYW5kIGxvZyBpdCAqLworCWlhNjRfbWNhX2xvZ19zYWxfZXJyb3JfcmVjb3JkKFNBTF9JTkZPX1RZUEVfQ1BFKTsKKwogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIApAQCAtOTg4LDE4ICsxMTU2LDIyIEBACiAJfQogCWlmICghbWlzc2luZykKIAkJZ290byBhbGxfaW47Ci0JcHJpbnRrKEtFUk5fSU5GTyAiT1MgJXMgc2xhdmUgZGlkIG5vdCByZW5kZXp2b3VzIG9uIGNwdSIsIHR5cGUpOworCS8qCisJICogTWF5YmUgc2xhdmUocykgZGVhZC4gUHJpbnQgYnVmZmVyZWQgbWVzc2FnZXMgaW1tZWRpYXRlbHkuCisJICovCisJaWE2NF9tbG9nYnVmX2ZpbmlzaCgwKTsKKwltcHJpbnRrKEtFUk5fSU5GTyAiT1MgJXMgc2xhdmUgZGlkIG5vdCByZW5kZXp2b3VzIG9uIGNwdSIsIHR5cGUpOwogCWZvcl9lYWNoX29ubGluZV9jcHUoYykgewogCQlpZiAoYyA9PSBtb25hcmNoKQogCQkJY29udGludWU7CiAJCWlmIChpYTY0X21jX2luZm8uaW1pX3JlbmRlel9jaGVja2luW2NdID09IElBNjRfTUNBX1JFTkRFWl9DSEVDS0lOX05PVERPTkUpCi0JCQlwcmludGsoIiAlZCIsIGMpOworCQkJbXByaW50aygiICVkIiwgYyk7CiAJfQotCXByaW50aygiXG4iKTsKKwltcHJpbnRrKCJcbiIpOwogCXJldHVybjsKIAogYWxsX2luOgotCXByaW50ayhLRVJOX0lORk8gIkFsbCBPUyAlcyBzbGF2ZXMgaGF2ZSByZWFjaGVkIHJlbmRlenZvdXNcbiIsIHR5cGUpOworCW1wcmludGsoS0VSTl9JTkZPICJBbGwgT1MgJXMgc2xhdmVzIGhhdmUgcmVhY2hlZCByZW5kZXp2b3VzXG4iLCB0eXBlKTsKIAlyZXR1cm47CiB9CiAKQEAgLTEwMjcsMTAgKzExOTksOCBAQAogCXN0cnVjdCBpYTY0X21jYV9ub3RpZnlfZGllIG5kID0KIAkJeyAuc29zID0gc29zLCAubW9uYXJjaF9jcHUgPSAmbW9uYXJjaF9jcHUgfTsKIAotCW9vcHNfaW5fcHJvZ3Jlc3MgPSAxOwkvKiBGSVhNRTogbWFrZSBwcmludGsgTk1JL01DQS9JTklUIHNhZmUgKi8KLQljb25zb2xlX2xvZ2xldmVsID0gMTU7CS8qIG1ha2Ugc3VyZSBwcmludGtzIG1ha2UgaXQgdG8gY29uc29sZSAqLwotCXByaW50ayhLRVJOX0lORk8gIkVudGVyZWQgT1MgTUNBIGhhbmRsZXIuIFBTUD0lbHggY3B1PSVkIG1vbmFyY2g9JWxkXG4iLAotCQlzb3MtPnByb2Nfc3RhdGVfcGFyYW0sIGNwdSwgc29zLT5tb25hcmNoKTsKKwltcHJpbnRrKEtFUk5fSU5GTyAiRW50ZXJlZCBPUyBNQ0EgaGFuZGxlci4gUFNQPSVseCBjcHU9JWQgIgorCQkibW9uYXJjaD0lbGRcbiIsIHNvcy0+cHJvY19zdGF0ZV9wYXJhbSwgY3B1LCBzb3MtPm1vbmFyY2gpOwogCiAJcHJldmlvdXNfY3VycmVudCA9IGlhNjRfbWNhX21vZGlmeV9vcmlnaW5hbF9zdGFjayhyZWdzLCBzdywgc29zLCAiTUNBIik7CiAJbW9uYXJjaF9jcHUgPSBjcHU7CkBAIC0xMDY2LDYgKzEyMzYsOSBAQAogCQlyaC0+c2V2ZXJpdHkgPSBzYWxfbG9nX3NldmVyaXR5X2NvcnJlY3RlZDsKIAkJaWE2NF9zYWxfY2xlYXJfc3RhdGVfaW5mbyhTQUxfSU5GT19UWVBFX01DQSk7CiAJCXNvcy0+b3Nfc3RhdHVzID0gSUE2NF9NQ0FfQ09SUkVDVEVEOworCX0gZWxzZSB7CisJCS8qIER1bXAgYnVmZmVyZWQgbWVzc2FnZSB0byBjb25zb2xlICovCisJCWlhNjRfbWxvZ2J1Zl9maW5pc2goMSk7CiAJfQogCWlmIChub3RpZnlfZGllKERJRV9NQ0FfTU9OQVJDSF9MRUFWRSwgIk1DQSIsIHJlZ3MsIChsb25nKSZuZCwgMCwgcmVjb3ZlcikKIAkJCT09IE5PVElGWV9TVE9QKQpAQCAtMTEwNiw5ICsxMjc5LDYgQEAKIAkvKiBTQUwgc3BlYyBzdGF0ZXMgdGhpcyBzaG91bGQgcnVuIHcvIGludGVycnVwdHMgZW5hYmxlZCAqLwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAotCS8qIEdldCB0aGUgQ01DIGVycm9yIHJlY29yZCBhbmQgbG9nIGl0ICovCi0JaWE2NF9tY2FfbG9nX3NhbF9lcnJvcl9yZWNvcmQoU0FMX0lORk9fVFlQRV9DTUMpOwotCiAJc3Bpbl9sb2NrKCZjbWNfaGlzdG9yeV9sb2NrKTsKIAlpZiAoIWNtY19wb2xsaW5nX2VuYWJsZWQpIHsKIAkJaW50IGksIGNvdW50ID0gMTsgLyogd2Uga25vdyAxIGhhcHBlbmVkIG5vdyAqLwpAQCAtMTE0MSw3ICsxMzExLDcgQEAKIAkJCW1vZF90aW1lcigmY21jX3BvbGxfdGltZXIsIGppZmZpZXMgKyBDTUNfUE9MTF9JTlRFUlZBTCk7CiAKIAkJCS8qIGxvY2sgYWxyZWFkeSByZWxlYXNlZCwgZ2V0IG91dCBub3cgKi8KLQkJCXJldHVybiBJUlFfSEFORExFRDsKKwkJCWdvdG8gb3V0OwogCQl9IGVsc2UgewogCQkJY21jX2hpc3RvcnlbaW5kZXgrK10gPSBub3c7CiAJCQlpZiAoaW5kZXggPT0gQ01DX0hJU1RPUllfTEVOR1RIKQpAQCAtMTE0OSw2ICsxMzE5LDEwIEBACiAJCX0KIAl9CiAJc3Bpbl91bmxvY2soJmNtY19oaXN0b3J5X2xvY2spOworb3V0OgorCS8qIEdldCB0aGUgQ01DIGVycm9yIHJlY29yZCBhbmQgbG9nIGl0ICovCisJaWE2NF9tY2FfbG9nX3NhbF9lcnJvcl9yZWNvcmQoU0FMX0lORk9fVFlQRV9DTUMpOworCiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCkBAIC0xMzA1LDYgKzE0NzksMTUgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKmcsICp0OwogCWlmICh2YWwgIT0gRElFX0lOSVRfTU9OQVJDSF9QUk9DRVNTKQogCQlyZXR1cm4gTk9USUZZX0RPTkU7CisKKwkvKgorCSAqIEZJWE1FOiBtbG9nYnVmIHdpbGwgYnJpbSBvdmVyIHdpdGggSU5JVCBzdGFjayBkdW1wcy4KKwkgKiBUbyBlbmFibGUgc2hvd19zdGFjayBmcm9tIElOSVQsIHdlIHVzZSBvb3BzX2luX3Byb2dyZXNzIHdoaWNoIHNob3VsZAorCSAqIGJlIHVzZWQgaW4gcmVhbCBvb3BzLiBUaGlzIHdvdWxkIGNhdXNlIHNvbWV0aGluZyB3cm9uZyBhZnRlciBJTklULgorCSAqLworCUJSRUFLX0xPR0xFVkVMKGNvbnNvbGVfbG9nbGV2ZWwpOworCWlhNjRfbWxvZ2J1Zl9kdW1wX2Zyb21faW5pdCgpOworCiAJcHJpbnRrKEtFUk5fRVJSICJQcm9jZXNzZXMgaW50ZXJydXB0ZWQgYnkgSU5JVCAtIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShjKSB7CiAJCXN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZSAqczsKQEAgLTEzMjYsNiArMTUwOSw4IEBACiAJCX0gd2hpbGVfZWFjaF90aHJlYWQgKGcsIHQpOwogCQlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJfQorCS8qIEZJWE1FOiBUaGlzIHdpbGwgbm90IHJlc3RvcmUgemFwcGVkIHByaW50ayBsb2Nrcy4gKi8KKwlSRVNUT1JFX0xPR0xFVkVMKGNvbnNvbGVfbG9nbGV2ZWwpOwogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KIApAQCAtMTM1NywxMiArMTU0Miw5IEBACiAJc3RydWN0IGlhNjRfbWNhX25vdGlmeV9kaWUgbmQgPQogCQl7IC5zb3MgPSBzb3MsIC5tb25hcmNoX2NwdSA9ICZtb25hcmNoX2NwdSB9OwogCi0Jb29wc19pbl9wcm9ncmVzcyA9IDE7CS8qIEZJWE1FOiBtYWtlIHByaW50ayBOTUkvTUNBL0lOSVQgc2FmZSAqLwotCWNvbnNvbGVfbG9nbGV2ZWwgPSAxNTsJLyogbWFrZSBzdXJlIHByaW50a3MgbWFrZSBpdCB0byBjb25zb2xlICovCi0KIAkodm9pZCkgbm90aWZ5X2RpZShESUVfSU5JVF9FTlRFUiwgIklOSVQiLCByZWdzLCAobG9uZykmbmQsIDAsIDApOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiRW50ZXJlZCBPUyBJTklUIGhhbmRsZXIuIFBTUD0lbHggY3B1PSVkIG1vbmFyY2g9JWxkXG4iLAorCW1wcmludGsoS0VSTl9JTkZPICJFbnRlcmVkIE9TIElOSVQgaGFuZGxlci4gUFNQPSVseCBjcHU9JWQgbW9uYXJjaD0lbGRcbiIsCiAJCXNvcy0+cHJvY19zdGF0ZV9wYXJhbSwgY3B1LCBzb3MtPm1vbmFyY2gpOwogCXNhbGluZm9fbG9nX3dha2V1cChTQUxfSU5GT19UWVBFX0lOSVQsIE5VTEwsIDAsIDApOwogCkBAIC0xMzc1LDcgKzE1NTcsNyBAQAogCSAqIGZpeCB0aGVpciBwcm9tcyBhbmQgZ2V0IHRoZWlyIGN1c3RvbWVycyB1cGRhdGVkLgogCSAqLwogCWlmICghc29zLT5tb25hcmNoICYmIGF0b21pY19hZGRfcmV0dXJuKDEsICZzbGF2ZXMpID09IG51bV9vbmxpbmVfY3B1cygpKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBQcm9tb3RpbmcgY3B1ICVkIHRvIG1vbmFyY2guXG4iLAorCQltcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IFByb21vdGluZyBjcHUgJWQgdG8gbW9uYXJjaC5cbiIsCiAJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNwdSk7CiAJCWF0b21pY19kZWMoJnNsYXZlcyk7CiAJCXNvcy0+bW9uYXJjaCA9IDE7CkBAIC0xMzg3LDcgKzE1NjksNyBAQAogCSAqIGZpeCB0aGVpciBwcm9tcyBhbmQgZ2V0IHRoZWlyIGN1c3RvbWVycyB1cGRhdGVkLgogCSAqLwogCWlmIChzb3MtPm1vbmFyY2ggJiYgYXRvbWljX2FkZF9yZXR1cm4oMSwgJm1vbmFyY2hzKSA+IDEpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERlbW90aW5nIGNwdSAlZCB0byBzbGF2ZS5cbiIsCisJCW1wcmludGsoS0VSTl9XQVJOSU5HICIlczogRGVtb3RpbmcgY3B1ICVkIHRvIHNsYXZlLlxuIiwKIAkJCSAgICAgICBfX0ZVTkNUSU9OX18sIGNwdSk7CiAJCWF0b21pY19kZWMoJm1vbmFyY2hzKTsKIAkJc29zLT5tb25hcmNoID0gMDsKQEAgLTE0MDgsNyArMTU5MCw3IEBACiAJCWlmIChub3RpZnlfZGllKERJRV9JTklUX1NMQVZFX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCQk9PSBOT1RJRllfU1RPUCkKIAkJCWlhNjRfbWNhX3NwaW4oX19GVU5DVElPTl9fKTsKLQkJcHJpbnRrKCJTbGF2ZSBvbiBjcHUgJWQgcmV0dXJuaW5nIHRvIG5vcm1hbCBzZXJ2aWNlLlxuIiwgY3B1KTsKKwkJbXByaW50aygiU2xhdmUgb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CiAJCXNldF9jdXJyX3Rhc2soY3B1LCBwcmV2aW91c19jdXJyZW50KTsKIAkJaWE2NF9tY19pbmZvLmltaV9yZW5kZXpfY2hlY2tpbltjcHVdID0gSUE2NF9NQ0FfUkVOREVaX0NIRUNLSU5fTk9URE9ORTsKIAkJYXRvbWljX2RlYygmc2xhdmVzKTsKQEAgLTE0MjYsNyArMTYwOCw3IEBACiAJICogc2FtZSBzZXJpYWwgbGluZSwgdGhlIHVzZXIgd2lsbCBuZWVkIHNvbWUgdGltZSB0byBzd2l0Y2ggb3V0IG9mIHRoZSBCTUMgYmVmb3JlCiAJICogdGhlIGR1bXAgYmVnaW5zLgogCSAqLwotCXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CisJbXByaW50aygiRGVsYXlpbmcgZm9yIDUgc2Vjb25kcy4uLlxuIik7CiAJdWRlbGF5KDUqMTAwMDAwMCk7CiAJaWE2NF93YWl0X2Zvcl9zbGF2ZXMoY3B1LCAiSU5JVCIpOwogCS8qIElmIG5vYm9keSBpbnRlcmNlcHRzIERJRV9JTklUX01PTkFSQ0hfUFJPQ0VTUyB0aGVuIHdlIGRyb3AgdGhyb3VnaApAQCAtMTQzOSw3ICsxNjIxLDcgQEAKIAlpZiAobm90aWZ5X2RpZShESUVfSU5JVF9NT05BUkNIX0xFQVZFLCAiSU5JVCIsIHJlZ3MsIChsb25nKSZuZCwgMCwgMCkKIAkJCT09IE5PVElGWV9TVE9QKQogCQlpYTY0X21jYV9zcGluKF9fRlVOQ1RJT05fXyk7Ci0JcHJpbnRrKCJcbklOSVQgZHVtcCBjb21wbGV0ZS4gIE1vbmFyY2ggb24gY3B1ICVkIHJldHVybmluZyB0byBub3JtYWwgc2VydmljZS5cbiIsIGNwdSk7CisJbXByaW50aygiXG5JTklUIGR1bXAgY29tcGxldGUuICBNb25hcmNoIG9uIGNwdSAlZCByZXR1cm5pbmcgdG8gbm9ybWFsIHNlcnZpY2UuXG4iLCBjcHUpOwogCWF0b21pY19kZWMoJm1vbmFyY2hzKTsKIAlzZXRfY3Vycl90YXNrKGNwdSwgcHJldmlvdXNfY3VycmVudCk7CiAJbW9uYXJjaF9jcHUgPSAtMTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2FzbS5TIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKaW5kZXggOTYwNDc0OS4uYzZiNjA3YyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9tY2FfYXNtLlMKQEAgLTEwMjUsMTggKzEwMjUsMTMgQEAKIAogaWE2NF9zZXRfa2VybmVsX3JlZ2lzdGVyczoKIAlhZGQgdGVtcDM9TUNBX1NQX09GRlNFVCwgcjMKLQlhZGQgdGVtcDQ9TUNBX1NPU19PRkZTRVQrU09TKE9TX0dQKSwgcjMKIAltb3YgYjA9cjIJCS8vIHNhdmUgcmV0dXJuIGFkZHJlc3MKIAlHRVRfSUE2NF9NQ0FfREFUQSh0ZW1wMSkKIAk7OwotCWFkZCB0ZW1wND10ZW1wNCwgdGVtcDEJLy8gJnN0cnVjdCBpYTY0X3NhbF9vc19zdGF0ZS5vc19ncAogCWFkZCByMTI9dGVtcDEsIHRlbXAzCS8vIGtlcm5lbCBzdGFjayBwb2ludGVyIG9uIE1DQS9JTklUIHN0YWNrCiAJYWRkIHIxMz10ZW1wMSwgcjMJLy8gc2V0IGN1cnJlbnQgdG8gc3RhcnQgb2YgTUNBL0lOSVQgc3RhY2sKIAlhZGQgcjIwPXRlbXAxLCByMwkvLyBwaHlzaWNhbCBzdGFydCBvZiBNQ0EvSU5JVCBzdGFjawogCTs7Ci0JbGQ4IHIxPVt0ZW1wNF0JCS8vIE9TIEdQIGZyb20gU0FMIE9TIHN0YXRlCi0JOzsKLQlEQVRBX1BBX1RPX1ZBKHIxLHRlbXAxKQogCURBVEFfUEFfVE9fVkEocjEyLHRlbXAyKQogCURBVEFfUEFfVE9fVkEocjEzLHRlbXAzKQogCTs7CkBAIC0xMDY3LDYgKzEwNjIsMTAgQEAKIAltb3YgY3IuaXRpcj1yMTgKIAltb3YgY3IuaWZhPXIxMwogCW1vdiByMjA9SUE2NF9UUl9DVVJSRU5UX1NUQUNLCisKKwltb3ZsIHIxNz1GUFNSX0RFRkFVTFQKKwk7OworCW1vdi5tIGFyLmZwc3I9cjE3CQkJLy8gc2V0IGFyLmZwc3IgdG8ga2VybmVsIGRlZmF1bHQgdmFsdWUKIAk7OwogCWl0ci5kIGR0cltyMjBdPXIyMQogCTs7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCmluZGV4IDhkYjZlMGMuLmE0NTAwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWNhX2Rydi5jCkBAIC03OSwxNCArNzksMzAgQEAKIGZhdGFsX21jYShjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAl2YV9saXN0IGFyZ3M7CisJY2hhciBidWZbMjU2XTsKIAogCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0JdnByaW50ayhmbXQsIGFyZ3MpOworCXZzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBmbXQsIGFyZ3MpOwogCXZhX2VuZChhcmdzKTsKKwlpYTY0X21jYV9wcmludGsoS0VSTl9BTEVSVCAiTUNBOiAlc1xuIiwgYnVmKTsKIAogCXJldHVybiBNQ0FfTk9UX1JFQ09WRVJFRDsKIH0KIAorc3RhdGljIGludAorbWNhX3JlY292ZXJlZChjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFyZ3M7CisJY2hhciBidWZbMjU2XTsKKworCXZhX3N0YXJ0KGFyZ3MsIGZtdCk7CisJdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCWlhNjRfbWNhX3ByaW50ayhLRVJOX0lORk8gIk1DQTogJXNcbiIsIGJ1Zik7CisKKwlyZXR1cm4gTUNBX1JFQ09WRVJFRDsKK30KKwogLyoqCiAgKiBtY2FfcGFnZV9pc29sYXRlIC0gaXNvbGF0ZSBhIHBvaXNvbmVkIHBhZ2UgaW4gb3JkZXIgbm90IHRvIHVzZSBpdCBsYXRlcgogICogQHBhZGRyOglwb2lzb25lZCBtZW1vcnkgbG9jYXRpb24KQEAgLTE0MCw2ICsxNTYsNyBAQAogdm9pZAogbWNhX2hhbmRsZXJfYmgodW5zaWduZWQgbG9uZyBwYWRkciwgdm9pZCAqaWlwLCB1bnNpZ25lZCBsb25nIGlwc3IpCiB7CisJaWE2NF9tbG9nYnVmX2R1bXAoKTsKIAlwcmludGsoS0VSTl9FUlIgIk9TX01DQTogcHJvY2VzcyBbY3B1ICVkLCBwaWQ6ICVkLCB1aWQ6ICVkLCAiCiAJCSJpaXA6ICVwLCBwc3I6IDB4JWx4LHBhZGRyOiAweCVseF0oJXMpIGVuY291bnRlcnMgTUNBLlxuIiwKIAkJcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSwgY3VycmVudC0+cGlkLCBjdXJyZW50LT51aWQsCkBAIC00NDAsNyArNDU3LDcgQEAKIAogCS8qIElzIHRhcmdldCBhZGRyZXNzIHZhbGlkPyAqLwogCWlmICghcGJjaS0+dHYpCi0JCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiB0YXJnZXQgYWRkcmVzcyBub3QgdmFsaWRcbiIpOworCQlyZXR1cm4gZmF0YWxfbWNhKCJ0YXJnZXQgYWRkcmVzcyBub3QgdmFsaWQiKTsKIAogCS8qCiAJICogY3B1IHJlYWQgb3IgbWVtb3J5LW1hcHBlZCBpbyByZWFkCkBAIC00NTgsNyArNDc1LDcgQEAKIAogCS8qIElzIG1pbnN0YXRlIHZhbGlkPyAqLwogCWlmICghcGVpZHhfYm90dG9tKHBlaWR4KSB8fCAhKHBlaWR4X2JvdHRvbShwZWlkeCktPnZhbGlkLm1pbnN0YXRlKSkKLQkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IG1pbnN0YXRlIG5vdCB2YWxpZFxuIik7CisJCXJldHVybiBmYXRhbF9tY2EoIm1pbnN0YXRlIG5vdCB2YWxpZCIpOwogCXBzcjEgPShzdHJ1Y3QgaWE2NF9wc3IgKikmKHBlaWR4X21pbnN0YXRlX2FyZWEocGVpZHgpLT5wbXNhX2lwc3IpOwogCXBzcjIgPShzdHJ1Y3QgaWE2NF9wc3IgKikmKHBlaWR4X21pbnN0YXRlX2FyZWEocGVpZHgpLT5wbXNhX3hwc3IpOwogCkBAIC00OTIsMTMgKzUwOSwxNCBAQAogCQkJcHNyMi0+Ym4gID0gMTsKIAkJCXBzcjItPmkgID0gMDsKIAotCQkJcmV0dXJuIE1DQV9SRUNPVkVSRUQ7CisJCQlyZXR1cm4gbWNhX3JlY292ZXJlZCgidXNlciBtZW1vcnkgY29ycnVwdGlvbi4gIgorCQkJCSJraWxsIGFmZmVjdGVkIHByb2Nlc3MgLSByZWNvdmVyZWQuIik7CiAJCX0KIAogCX0KIAotCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBrZXJuZWwgY29udGV4dCBub3QgcmVjb3ZlcmVkLCIKLQkJCSAgIiBpaXAgMHglbHhcbiIsIHBtc2EtPnBtc2FfaWlwKTsKKwlyZXR1cm4gZmF0YWxfbWNhKCJrZXJuZWwgY29udGV4dCBub3QgcmVjb3ZlcmVkLCBpaXAgMHglbHhcbiIsCisJCQkgcG1zYS0+cG1zYV9paXApOwogfQogCiAvKioKQEAgLTU4NCwxMyArNjAyLDEzIEBACiAJICogVGhlIG1hY2hpbmUgY2hlY2sgaXMgY29ycmVjdGVkLgogCSAqLwogCWlmIChwc3AtPmNtID09IDEpCi0JCXJldHVybiBNQ0FfUkVDT1ZFUkVEOworCQlyZXR1cm4gbWNhX3JlY292ZXJlZCgibWFjaGluZSBjaGVjayBpcyBhbHJlYWR5IGNvcnJlY3RlZC4iKTsKIAogCS8qCiAJICogVGhlIGVycm9yIHdhcyBub3QgY29udGFpbmVkLiAgU29mdHdhcmUgbXVzdCBiZSByZXNldC4KIAkgKi8KIAlpZiAocHNwLT51cyB8fCBwc3AtPmNpID09IDApCi0JCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBlcnJvciBub3QgY29udGFpbmVkXG4iKTsKKwkJcmV0dXJuIGZhdGFsX21jYSgiZXJyb3Igbm90IGNvbnRhaW5lZCIpOwogCiAJLyoKIAkgKiBUaGUgY2FjaGUgY2hlY2sgYW5kIGJ1cyBjaGVjayBiaXRzIGhhdmUgZm91ciBwb3NzaWJsZSBzdGF0ZXMKQEAgLTYwMSwyMiArNjE5LDIyIEBACiAJICogICAgMSAgMQlNZW1vcnkgZXJyb3IsIGF0dGVtcHQgcmVjb3ZlcnkKIAkgKi8KIAlpZiAocHNwLT5iYyA9PSAwIHx8IHBiY2kgPT0gTlVMTCkKLQkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IE5vIGJ1cyBjaGVja1xuIik7CisJCXJldHVybiBmYXRhbF9tY2EoIk5vIGJ1cyBjaGVjayIpOwogCiAJLyoKIAkgKiBTb3JyeSwgd2UgY2Fubm90IGhhbmRsZSBzbyBtYW55LgogCSAqLwogCWlmIChwZWlkeF9idXNfY2hlY2tfbnVtKHBlaWR4KSA+IDEpCi0JCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBUb28gbWFueSBidXMgY2hlY2tzXG4iKTsKKwkJcmV0dXJuIGZhdGFsX21jYSgiVG9vIG1hbnkgYnVzIGNoZWNrcyIpOwogCS8qCiAJICogV2VsbCwgaGVyZSBpcyBvbmx5IG9uZSBidXMgZXJyb3IuCiAJICovCiAJaWYgKHBiY2ktPmliKQotCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogSW50ZXJuYWwgQnVzIGVycm9yXG4iKTsKKwkJcmV0dXJuIGZhdGFsX21jYSgiSW50ZXJuYWwgQnVzIGVycm9yIik7CiAJaWYgKHBiY2ktPmNjKQotCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogQ2FjaGUtY2FjaGUgZXJyb3JcbiIpOworCQlyZXR1cm4gZmF0YWxfbWNhKCJDYWNoZS1jYWNoZSBlcnJvciIpOwogCWlmIChwYmNpLT5lYiAmJiBwYmNpLT5ic2kgPiAwKQotCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogRXh0ZXJuYWwgYnVzIGNoZWNrIGZhdGFsIHN0YXR1c1xuIik7CisJCXJldHVybiBmYXRhbF9tY2EoIkV4dGVybmFsIGJ1cyBjaGVjayBmYXRhbCBzdGF0dXMiKTsKIAogCS8qCiAJICogVGhpcyBpcyBhIGxvY2FsIE1DQSBhbmQgZXN0aW1hdGVkIGFzIHJlY292ZXJibGUgZXh0ZXJuYWwgYnVzIGVycm9yLgpAQCAtNjI4LDcgKzY0Niw3IEBACiAJLyoKIAkgKiBPbiBhY2NvdW50IG9mIHN0cmFuZ2UgU0FMIGVycm9yIHJlY29yZCwgd2UgY2Fubm90IHJlY292ZXIuCiAJICovCi0JcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IFN0cmFuZ2UgU0FMIHJlY29yZFxuIik7CisJcmV0dXJuIGZhdGFsX21jYSgiU3RyYW5nZSBTQUwgcmVjb3JkIik7CiB9CiAKIC8qKgpAQCAtNjU3LDEwICs2NzUsMTAgQEAKIAogCSAvKiBOb3csIE9TIGNhbiByZWNvdmVyIHdoZW4gdGhlcmUgaXMgb25lIHByb2Nlc3NvciBlcnJvciBzZWN0aW9uICovCiAJaWYgKG5fcHJvY19lcnIgPiAxKQotCQlyZXR1cm4gZmF0YWxfbWNhKEtFUk5fQUxFUlQgIk1DQTogVG9vIE1hbnkgRXJyb3JzXG4iKTsKKwkJcmV0dXJuIGZhdGFsX21jYSgiVG9vIE1hbnkgRXJyb3JzIik7CiAJZWxzZSBpZiAobl9wcm9jX2VyciA9PSAwKQotCQkvKiBXZWlyZCBTQUwgcmVjb3JkIC4uLiBXZSBuZWVkIG5vdCB0byByZWNvdmVyICovCi0JCXJldHVybiBmYXRhbF9tY2EoS0VSTl9BTEVSVCAiTUNBOiBXZWlyZCBTQUwgcmVjb3JkXG4iKTsKKwkJLyogV2VpcmQgU0FMIHJlY29yZCAuLi4gV2UgY2FuJ3QgZG8gYW55dGhpbmcgKi8KKwkJcmV0dXJuIGZhdGFsX21jYSgiV2VpcmQgU0FMIHJlY29yZCIpOwogCiAJLyogTWFrZSBpbmRleCBvZiBwcm9jZXNzb3IgZXJyb3Igc2VjdGlvbiAqLwogCW1jYV9tYWtlX3BlaWR4KChzYWxfbG9nX3Byb2Nlc3Nvcl9pbmZvX3QqKQpAQCAtNjcxLDcgKzY4OSw3IEBACiAKIAkvKiBDaGVjayB3aGV0aGVyIE1DQSBpcyBnbG9iYWwgb3Igbm90ICovCiAJaWYgKGlzX21jYV9nbG9iYWwoJnBlaWR4LCAmcGJjaSwgc29zKSkKLQkJcmV0dXJuIGZhdGFsX21jYShLRVJOX0FMRVJUICJNQ0E6IGdsb2JhbCBNQ0FcbiIpOworCQlyZXR1cm4gZmF0YWxfbWNhKCJnbG9iYWwgTUNBIik7CiAJCiAJLyogVHJ5IHRvIHJlY292ZXIgYSBwcm9jZXNzb3IgZXJyb3IgKi8KIAlyZXR1cm4gcmVjb3Zlcl9mcm9tX3Byb2Nlc3Nvcl9lcnJvcihwbGF0Zm9ybV9lcnIsICZzbGlkeCwgJnBlaWR4LApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9tY2FfZHJ2LmggYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuaAppbmRleCAzMWEyZTUyLi5jODVlOTQzIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuaAorKysgYi9hcmNoL2lhNjQva2VybmVsL21jYV9kcnYuaApAQCAtMTE4LDMgKzExOCw3IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgbWNhX3RhYmxlX2VudHJ5ICpzZWFyY2hfbWNhX3RhYmxlcyAodW5zaWduZWQgbG9uZyBhZGRyKTsKIGV4dGVybiBpbnQgbWNhX3JlY292ZXJfcmFuZ2UodW5zaWduZWQgbG9uZyk7CitleHRlcm4gdm9pZCBpYTY0X21jYV9wcmludGsoY29uc3QgY2hhciAqIGZtdCwgLi4uKQorCSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CitleHRlcm4gdm9pZCBpYTY0X21sb2didWZfZHVtcCh2b2lkKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wZXJmbW9uLmMgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwppbmRleCA3YmI3Njk2Li4yODEwMDRmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BlcmZtb24uYwpAQCAtNjMsNiArNjMsOSBAQAogCiAjZGVmaW5lIFBGTV9JTlZBTElEX0FDVElWQVRJT04JKH4wVUwpCiAKKyNkZWZpbmUgUEZNX05VTV9QTUNfUkVHUwk2NAkvKiBQTUMgc2F2ZSBhcmVhIGZvciBjdHhzdyAqLworI2RlZmluZSBQRk1fTlVNX1BNRF9SRUdTCTY0CS8qIFBNRCBzYXZlIGFyZWEgZm9yIGN0eHN3ICovCisKIC8qCiAgKiBkZXB0aCBvZiBtZXNzYWdlIHF1ZXVlCiAgKi8KQEAgLTI5NywxNCArMzAwLDE3IEBACiAJdW5zaWduZWQgbG9uZwkJY3R4X3JlbG9hZF9wbWNzWzRdOwkvKiBiaXRtYXNrIG9mIGZvcmNlIHJlbG9hZCBQTUMgb24gY3R4c3cgaW4gKi8KIAl1bnNpZ25lZCBsb25nCQljdHhfdXNlZF9tb25pdG9yc1s0XTsJLyogYml0bWFzayBvZiBtb25pdG9yIFBNQyBiZWluZyB1c2VkICovCiAKLQl1bnNpZ25lZCBsb25nCQljdHhfcG1jc1tJQTY0X05VTV9QTUNfUkVHU107CS8qICBzYXZlZCBjb3BpZXMgb2YgUE1DIHZhbHVlcyAqLworCXVuc2lnbmVkIGxvbmcJCWN0eF9wbWNzW1BGTV9OVU1fUE1DX1JFR1NdOwkvKiAgc2F2ZWQgY29waWVzIG9mIFBNQyB2YWx1ZXMgKi8KIAogCXVuc2lnbmVkIGludAkJY3R4X3VzZWRfaWJyc1sxXTsJCS8qIGJpdG1hc2sgb2YgdXNlZCBJQlIgKHNwZWVkdXAgY3R4c3cgaW4pICovCiAJdW5zaWduZWQgaW50CQljdHhfdXNlZF9kYnJzWzFdOwkJLyogYml0bWFzayBvZiB1c2VkIERCUiAoc3BlZWR1cCBjdHhzdyBpbikgKi8KIAl1bnNpZ25lZCBsb25nCQljdHhfZGJyc1tJQTY0X05VTV9EQkdfUkVHU107CS8qIERCUiB2YWx1ZXMgKGNhY2hlKSB3aGVuIG5vdCBsb2FkZWQgKi8KIAl1bnNpZ25lZCBsb25nCQljdHhfaWJyc1tJQTY0X05VTV9EQkdfUkVHU107CS8qIElCUiB2YWx1ZXMgKGNhY2hlKSB3aGVuIG5vdCBsb2FkZWQgKi8KIAotCXBmbV9jb3VudGVyX3QJCWN0eF9wbWRzW0lBNjRfTlVNX1BNRF9SRUdTXTsgLyogc29mdHdhcmUgc3RhdGUgZm9yIFBNRFMgKi8KKwlwZm1fY291bnRlcl90CQljdHhfcG1kc1tQRk1fTlVNX1BNRF9SRUdTXTsgLyogc29mdHdhcmUgc3RhdGUgZm9yIFBNRFMgKi8KKworCXVuc2lnbmVkIGxvbmcJCXRoX3BtY3NbUEZNX05VTV9QTUNfUkVHU107CS8qIFBNQyB0aHJlYWQgc2F2ZSBzdGF0ZSAqLworCXVuc2lnbmVkIGxvbmcJCXRoX3BtZHNbUEZNX05VTV9QTURfUkVHU107CS8qIFBNRCB0aHJlYWQgc2F2ZSBzdGF0ZSAqLwogCiAJdTY0CQkJY3R4X3NhdmVkX3Bzcl91cDsJLyogb25seSBjb250YWlucyBwc3IudXAgdmFsdWUgKi8KIApAQCAtODY4LDcgKzg3NCw2IEBACiBwZm1fbWFza19tb25pdG9yaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlwZm1fY29udGV4dF90ICpjdHggPSBQRk1fR0VUX0NUWCh0YXNrKTsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGggPSAmdGFzay0+dGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgbWFzaywgdmFsLCBvdmZsX21hc2s7CiAJaW50IGk7CiAKQEAgLTg4OSw3ICs4OTQsNyBAQAogCSAqIFNvIGluIGJvdGggY2FzZXMsIHRoZSBsaXZlIHJlZ2lzdGVyIGNvbnRhaW5zIHRoZSBvd25lcidzCiAJICogc3RhdGUuIFdlIGNhbiBPTkxZIHRvdWNoIHRoZSBQTVUgcmVnaXN0ZXJzIGFuZCBOT1QgdGhlIFBTUi4KIAkgKgotCSAqIEFzIGEgY29uc2VxdWVuY2UgdG8gdGhpcyBjYWxsLCB0aGUgdGhyZWFkLT5wbWRzW10gYXJyYXkKKwkgKiBBcyBhIGNvbnNlcXVlbmNlIHRvIHRoaXMgY2FsbCwgdGhlIGN0eC0+dGhfcG1kc1tdIGFycmF5CiAJICogY29udGFpbnMgc3RhbGUgaW5mb3JtYXRpb24gd2hpY2ggbXVzdCBiZSBpZ25vcmVkCiAJICogd2hlbiBjb250ZXh0IGlzIHJlbG9hZGVkIEFORCBtb25pdG9yaW5nIGlzIGFjdGl2ZSAoc2VlCiAJICogcGZtX3Jlc3RhcnQpLgpAQCAtOTI0LDkgKzkyOSw5IEBACiAJbWFzayA9IGN0eC0+Y3R4X3VzZWRfbW9uaXRvcnNbMF0gPj4gUE1VX0ZJUlNUX0NPVU5URVI7CiAJZm9yKGk9IFBNVV9GSVJTVF9DT1VOVEVSOyBtYXNrOyBpKyssIG1hc2s+Pj0xKSB7CiAJCWlmICgobWFzayAmIDB4MSkgPT0gMFVMKSBjb250aW51ZTsKLQkJaWE2NF9zZXRfcG1jKGksIHRoLT5wbWNzW2ldICYgfjB4ZlVMKTsKLQkJdGgtPnBtY3NbaV0gJj0gfjB4ZlVMOwotCQlEUFJJTlRfb3ZmbCgoInBtY1slZF09MHglbHhcbiIsIGksIHRoLT5wbWNzW2ldKSk7CisJCWlhNjRfc2V0X3BtYyhpLCBjdHgtPnRoX3BtY3NbaV0gJiB+MHhmVUwpOworCQljdHgtPnRoX3BtY3NbaV0gJj0gfjB4ZlVMOworCQlEUFJJTlRfb3ZmbCgoInBtY1slZF09MHglbHhcbiIsIGksIGN0eC0+dGhfcG1jc1tpXSkpOwogCX0KIAkvKgogCSAqIG1ha2UgYWxsIG9mIHRoaXMgdmlzaWJsZQpAQCAtOTQzLDcgKzk0OCw2IEBACiBwZm1fcmVzdG9yZV9tb25pdG9yaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlwZm1fY29udGV4dF90ICpjdHggPSBQRk1fR0VUX0NUWCh0YXNrKTsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGggPSAmdGFzay0+dGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgbWFzaywgb3ZmbF9tYXNrOwogCXVuc2lnbmVkIGxvbmcgcHNyLCB2YWw7CiAJaW50IGksIGlzX3N5c3RlbTsKQEAgLTEwMDksOSArMTAxMyw5IEBACiAJbWFzayA9IGN0eC0+Y3R4X3VzZWRfbW9uaXRvcnNbMF0gPj4gUE1VX0ZJUlNUX0NPVU5URVI7CiAJZm9yKGk9IFBNVV9GSVJTVF9DT1VOVEVSOyBtYXNrOyBpKyssIG1hc2s+Pj0xKSB7CiAJCWlmICgobWFzayAmIDB4MSkgPT0gMFVMKSBjb250aW51ZTsKLQkJdGgtPnBtY3NbaV0gPSBjdHgtPmN0eF9wbWNzW2ldOwotCQlpYTY0X3NldF9wbWMoaSwgdGgtPnBtY3NbaV0pOwotCQlEUFJJTlQoKCJbJWRdIHBtY1slZF09MHglbHhcbiIsIHRhc2stPnBpZCwgaSwgdGgtPnBtY3NbaV0pKTsKKwkJY3R4LT50aF9wbWNzW2ldID0gY3R4LT5jdHhfcG1jc1tpXTsKKwkJaWE2NF9zZXRfcG1jKGksIGN0eC0+dGhfcG1jc1tpXSk7CisJCURQUklOVCgoIlslZF0gcG1jWyVkXT0weCVseFxuIiwgdGFzay0+cGlkLCBpLCBjdHgtPnRoX3BtY3NbaV0pKTsKIAl9CiAJaWE2NF9zcmx6X2QoKTsKIApAQCAtMTA3MCw3ICsxMDc0LDYgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcGZtX2NvcHlfcG1kcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHBmbV9jb250ZXh0X3QgKmN0eCkKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gJnRhc2stPnRocmVhZDsKIAl1bnNpZ25lZCBsb25nIG92ZmxfdmFsID0gcG11X2NvbmYtPm92ZmxfdmFsOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGN0eC0+Y3R4X2FsbF9wbWRzWzBdOwogCXVuc2lnbmVkIGxvbmcgdmFsOwpAQCAtMTA5MiwxMSArMTA5NSwxMSBAQAogCQkJY3R4LT5jdHhfcG1kc1tpXS52YWwgPSB2YWwgJiB+b3ZmbF92YWw7CiAJCQkgdmFsICY9IG92ZmxfdmFsOwogCQl9Ci0JCXRocmVhZC0+cG1kc1tpXSA9IHZhbDsKKwkJY3R4LT50aF9wbWRzW2ldID0gdmFsOwogCiAJCURQUklOVCgoInBtZFslZF09MHglbHggc29mdF92YWw9MHglbHhcbiIsCiAJCQlpLAotCQkJdGhyZWFkLT5wbWRzW2ldLAorCQkJY3R4LT50aF9wbWRzW2ldLAogCQkJY3R4LT5jdHhfcG1kc1tpXS52YWwpKTsKIAl9CiB9CkBAIC0xMTA3LDcgKzExMTAsNiBAQAogc3RhdGljIGlubGluZSB2b2lkCiBwZm1fY29weV9wbWNzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgcGZtX2NvbnRleHRfdCAqY3R4KQogewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSAmdGFzay0+dGhyZWFkOwogCXVuc2lnbmVkIGxvbmcgbWFzayA9IGN0eC0+Y3R4X2FsbF9wbWNzWzBdOwogCWludCBpOwogCkBAIC0xMTE1LDggKzExMTcsOCBAQAogCiAJZm9yIChpPTA7IG1hc2s7IGkrKywgbWFzaz4+PTEpIHsKIAkJLyogbWFza2luZyAwIHdpdGggb3ZmbF92YWwgeWllbGRzIDAgKi8KLQkJdGhyZWFkLT5wbWNzW2ldID0gY3R4LT5jdHhfcG1jc1tpXTsKLQkJRFBSSU5UKCgicG1jWyVkXT0weCVseFxuIiwgaSwgdGhyZWFkLT5wbWNzW2ldKSk7CisJCWN0eC0+dGhfcG1jc1tpXSA9IGN0eC0+Y3R4X3BtY3NbaV07CisJCURQUklOVCgoInBtY1slZF09MHglbHhcbiIsIGksIGN0eC0+dGhfcG1jc1tpXSkpOwogCX0KIH0KIApAQCAtMjg2MCw3ICsyODYyLDYgQEAKIHN0YXRpYyBpbnQKIHBmbV93cml0ZV9wbWNzKHBmbV9jb250ZXh0X3QgKmN0eCwgdm9pZCAqYXJnLCBpbnQgY291bnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlwZmFyZ19yZWdfdCAqcmVxID0gKHBmYXJnX3JlZ190ICopYXJnOwogCXVuc2lnbmVkIGxvbmcgdmFsdWUsIHBtY19wbTsKQEAgLTI4ODEsNyArMjg4Miw2IEBACiAJaWYgKHN0YXRlID09IFBGTV9DVFhfWk9NQklFKSByZXR1cm4gLUVJTlZBTDsKIAogCWlmIChpc19sb2FkZWQpIHsKLQkJdGhyZWFkID0gJnRhc2stPnRocmVhZDsKIAkJLyoKIAkJICogSW4gc3lzdGVtIHdpZGUgYW5kIHdoZW4gdGhlIGNvbnRleHQgaXMgbG9hZGVkLCBhY2Nlc3MgY2FuIG9ubHkgaGFwcGVuCiAJCSAqIHdoZW4gdGhlIGNhbGxlciBpcyBydW5uaW5nIG9uIHRoZSBDUFUgYmVpbmcgbW9uaXRvcmVkIGJ5IHRoZSBzZXNzaW9uLgpAQCAtMzAzNiw3ICszMDM2LDcgQEAKIAkJICoKIAkJICogVGhlIHZhbHVlIGluIGN0eF9wbWNzW10gY2FuIG9ubHkgYmUgY2hhbmdlZCBpbiBwZm1fd3JpdGVfcG1jcygpLgogCQkgKgotCQkgKiBUaGUgdmFsdWUgaW4gdGhyZWFkLT5wbWNzW10gbWF5IGJlIG1vZGlmaWVkIG9uIG92ZXJmbG93LCBpLmUuLCAgd2hlbgorCQkgKiBUaGUgdmFsdWUgaW4gdGhfcG1jc1tdIG1heSBiZSBtb2RpZmllZCBvbiBvdmVyZmxvdywgaS5lLiwgIHdoZW4KIAkJICogbW9uaXRvcmluZyBuZWVkcyB0byBiZSBzdG9wcGVkLgogCQkgKi8KIAkJaWYgKGlzX21vbml0b3IpIENUWF9VU0VEX01PTklUT1IoY3R4LCAxVUwgPDwgY251bSk7CkBAIC0zMDUwLDcgKzMwNTAsNyBAQAogCQkJLyoKIAkJCSAqIHdyaXRlIHRocmVhZCBzdGF0ZQogCQkJICovCi0JCQlpZiAoaXNfc3lzdGVtID09IDApIHRocmVhZC0+cG1jc1tjbnVtXSA9IHZhbHVlOworCQkJaWYgKGlzX3N5c3RlbSA9PSAwKSBjdHgtPnRoX3BtY3NbY251bV0gPSB2YWx1ZTsKIAogCQkJLyoKIAkJCSAqIHdyaXRlIGhhcmR3YXJlIHJlZ2lzdGVyIGlmIHdlIGNhbgpAQCAtMzEwMiw3ICszMTAyLDYgQEAKIHN0YXRpYyBpbnQKIHBmbV93cml0ZV9wbWRzKHBmbV9jb250ZXh0X3QgKmN0eCwgdm9pZCAqYXJnLCBpbnQgY291bnQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0aHJlYWQgPSBOVUxMOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKIAlwZmFyZ19yZWdfdCAqcmVxID0gKHBmYXJnX3JlZ190ICopYXJnOwogCXVuc2lnbmVkIGxvbmcgdmFsdWUsIGh3X3ZhbHVlLCBvdmZsX21hc2s7CkBAIC0zMTI2LDcgKzMxMjUsNiBAQAogCSAqIHRoZSBvd25lciBvZiB0aGUgbG9jYWwgUE1VLgogCSAqLwogCWlmIChsaWtlbHkoaXNfbG9hZGVkKSkgewotCQl0aHJlYWQgPSAmdGFzay0+dGhyZWFkOwogCQkvKgogCQkgKiBJbiBzeXN0ZW0gd2lkZSBhbmQgd2hlbiB0aGUgY29udGV4dCBpcyBsb2FkZWQsIGFjY2VzcyBjYW4gb25seSBoYXBwZW4KIAkJICogd2hlbiB0aGUgY2FsbGVyIGlzIHJ1bm5pbmcgb24gdGhlIENQVSBiZWluZyBtb25pdG9yZWQgYnkgdGhlIHNlc3Npb24uCkBAIC0zMjM0LDcgKzMyMzIsNyBAQAogCQkJLyoKIAkJIAkgKiB3cml0ZSB0aHJlYWQgc3RhdGUKIAkJIAkgKi8KLQkJCWlmIChpc19zeXN0ZW0gPT0gMCkgdGhyZWFkLT5wbWRzW2NudW1dID0gaHdfdmFsdWU7CisJCQlpZiAoaXNfc3lzdGVtID09IDApIGN0eC0+dGhfcG1kc1tjbnVtXSA9IGh3X3ZhbHVlOwogCiAJCQkvKgogCQkJICogd3JpdGUgaGFyZHdhcmUgcmVnaXN0ZXIgaWYgd2UgY2FuCkBAIC0zMzAwLDcgKzMyOTgsNiBAQAogc3RhdGljIGludAogcGZtX3JlYWRfcG1kcyhwZm1fY29udGV4dF90ICpjdHgsIHZvaWQgKmFyZywgaW50IGNvdW50LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdGhyZWFkID0gTlVMTDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CiAJdW5zaWduZWQgbG9uZyB2YWwgPSAwVUwsIGx2YWwsIG92ZmxfbWFzaywgc3ZhbDsKIAlwZmFyZ19yZWdfdCAqcmVxID0gKHBmYXJnX3JlZ190ICopYXJnOwpAQCAtMzMyNCw3ICszMzIxLDYgQEAKIAlpZiAoc3RhdGUgPT0gUEZNX0NUWF9aT01CSUUpIHJldHVybiAtRUlOVkFMOwogCiAJaWYgKGxpa2VseShpc19sb2FkZWQpKSB7Ci0JCXRocmVhZCA9ICZ0YXNrLT50aHJlYWQ7CiAJCS8qCiAJCSAqIEluIHN5c3RlbSB3aWRlIGFuZCB3aGVuIHRoZSBjb250ZXh0IGlzIGxvYWRlZCwgYWNjZXNzIGNhbiBvbmx5IGhhcHBlbgogCQkgKiB3aGVuIHRoZSBjYWxsZXIgaXMgcnVubmluZyBvbiB0aGUgQ1BVIGJlaW5nIG1vbml0b3JlZCBieSB0aGUgc2Vzc2lvbi4KQEAgLTMzODYsNyArMzM4Miw3IEBACiAJCQkgKiBpZiBjb250ZXh0IGlzIHpvbWJpZSwgdGhlbiB0YXNrIGRvZXMgbm90IGV4aXN0IGFueW1vcmUuCiAJCQkgKiBJbiB0aGlzIGNhc2UsIHdlIHVzZSB0aGUgZnVsbCB2YWx1ZSBzYXZlZCBpbiB0aGUgY29udGV4dCAocGZtX2ZsdXNoX3JlZ3MoKSkuCiAJCQkgKi8KLQkJCXZhbCA9IGlzX2xvYWRlZCA/IHRocmVhZC0+cG1kc1tjbnVtXSA6IDBVTDsKKwkJCXZhbCA9IGlzX2xvYWRlZCA/IGN0eC0+dGhfcG1kc1tjbnVtXSA6IDBVTDsKIAkJfQogCQlyZF9mdW5jID0gcG11X2NvbmYtPnBtZF9kZXNjW2NudW1dLnJlYWRfY2hlY2s7CiAKQEAgLTQzNTUsOCArNDM1MSw4IEBACiAJcGZtX2NvcHlfcG1kcyh0YXNrLCBjdHgpOwogCXBmbV9jb3B5X3BtY3ModGFzaywgY3R4KTsKIAotCXBtY3Nfc291cmNlID0gdGhyZWFkLT5wbWNzOwotCXBtZHNfc291cmNlID0gdGhyZWFkLT5wbWRzOworCXBtY3Nfc291cmNlID0gY3R4LT50aF9wbWNzOworCXBtZHNfc291cmNlID0gY3R4LT50aF9wbWRzOwogCiAJLyoKIAkgKiBhbHdheXMgdGhlIGNhc2UgZm9yIHN5c3RlbS13aWRlCkBAIC01ODY1LDE0ICs1ODYxLDEyIEBACiBwZm1fc2F2ZV9yZWdzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKIAlwZm1fY29udGV4dF90ICpjdHg7Ci0Jc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQ7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgcHNyOwogCiAKIAljdHggPSBQRk1fR0VUX0NUWCh0YXNrKTsKIAlpZiAoY3R4ID09IE5VTEwpIHJldHVybjsKLQl0ID0gJnRhc2stPnRocmVhZDsKIAogCS8qCiAgCSAqIHdlIGFsd2F5cyBjb21lIGhlcmUgd2l0aCBpbnRlcnJ1cHRzIEFMUkVBRFkgZGlzYWJsZWQgYnkKQEAgLTU5MzAsMTkgKzU5MjQsMTkgQEAKIAkgKiBndWFyYW50ZWUgd2Ugd2lsbCBiZSBzY2hlZHVsZSBhdCB0aGF0IHNhbWUKIAkgKiBDUFUgYWdhaW4uCiAJICovCi0JcGZtX3NhdmVfcG1kcyh0LT5wbWRzLCBjdHgtPmN0eF91c2VkX3BtZHNbMF0pOworCXBmbV9zYXZlX3BtZHMoY3R4LT50aF9wbWRzLCBjdHgtPmN0eF91c2VkX3BtZHNbMF0pOwogCiAJLyoKIAkgKiBzYXZlIHBtYzAgaWE2NF9zcmx6X2QoKSBkb25lIGluIHBmbV9zYXZlX3BtZHMoKQogCSAqIHdlIHdpbGwgbmVlZCBpdCBvbiB0aGUgcmVzdG9yZSBwYXRoIHRvIGNoZWNrCiAJICogZm9yIHBlbmRpbmcgb3ZlcmZsb3cuCiAJICovCi0JdC0+cG1jc1swXSA9IGlhNjRfZ2V0X3BtYygwKTsKKwljdHgtPnRoX3BtY3NbMF0gPSBpYTY0X2dldF9wbWMoMCk7CiAKIAkvKgogCSAqIHVuZnJlZXplIFBNVSBpZiBoYWQgcGVuZGluZyBvdmVyZmxvd3MKIAkgKi8KLQlpZiAodC0+cG1jc1swXSAmIH4weDFVTCkgcGZtX3VuZnJlZXplX3BtdSgpOworCWlmIChjdHgtPnRoX3BtY3NbMF0gJiB+MHgxVUwpIHBmbV91bmZyZWV6ZV9wbXUoKTsKIAogCS8qCiAJICogZmluYWxseSwgYWxsb3cgY29udGV4dCBhY2Nlc3MuCkBAIC01OTg3LDcgKzU5ODEsNiBAQAogcGZtX2xhenlfc2F2ZV9yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcGZtX2NvbnRleHRfdCAqY3R4OwotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl7IHU2NCBwc3IgID0gcGZtX2dldF9wc3IoKTsKQEAgLTU5OTUsNyArNTk4OCw2IEBACiAJfQogCiAJY3R4ID0gUEZNX0dFVF9DVFgodGFzayk7Ci0JdCAgID0gJnRhc2stPnRocmVhZDsKIAogCS8qCiAJICogd2UgbmVlZCB0byBtYXNrIFBNVSBvdmVyZmxvdyBoZXJlIHRvCkBAIC02MDIwLDE5ICs2MDEyLDE5IEBACiAJLyoKIAkgKiBzYXZlIGFsbCB0aGUgcG1kcyB3ZSB1c2UKIAkgKi8KLQlwZm1fc2F2ZV9wbWRzKHQtPnBtZHMsIGN0eC0+Y3R4X3VzZWRfcG1kc1swXSk7CisJcGZtX3NhdmVfcG1kcyhjdHgtPnRoX3BtZHMsIGN0eC0+Y3R4X3VzZWRfcG1kc1swXSk7CiAKIAkvKgogCSAqIHNhdmUgcG1jMCBpYTY0X3NybHpfZCgpIGRvbmUgaW4gcGZtX3NhdmVfcG1kcygpCiAJICogaXQgaXMgbmVlZGVkIHRvIGNoZWNrIGZvciBwZW5kZWQgb3ZlcmZsb3cKIAkgKiBvbiB0aGUgcmVzdG9yZSBwYXRoCiAJICovCi0JdC0+cG1jc1swXSA9IGlhNjRfZ2V0X3BtYygwKTsKKwljdHgtPnRoX3BtY3NbMF0gPSBpYTY0X2dldF9wbWMoMCk7CiAKIAkvKgogCSAqIHVuZnJlZXplIFBNVSBpZiBoYWQgcGVuZGluZyBvdmVyZmxvd3MKIAkgKi8KLQlpZiAodC0+cG1jc1swXSAmIH4weDFVTCkgcGZtX3VuZnJlZXplX3BtdSgpOworCWlmIChjdHgtPnRoX3BtY3NbMF0gJiB+MHgxVUwpIHBmbV91bmZyZWV6ZV9wbXUoKTsKIAogCS8qCiAJICogbm93IGdldCBjYW4gdW5tYXNrIFBNVSBpbnRlcnJ1cHRzLCB0aGV5IHdpbGwKQEAgLTYwNTEsNyArNjA0Myw2IEBACiBwZm1fbG9hZF9yZWdzIChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiAJcGZtX2NvbnRleHRfdCAqY3R4OwotCXN0cnVjdCB0aHJlYWRfc3RydWN0ICp0OwogCXVuc2lnbmVkIGxvbmcgcG1jX21hc2sgPSAwVUwsIHBtZF9tYXNrID0gMFVMOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTY0IHBzciwgcHNyX3VwOwpAQCAtNjA2MiwxMSArNjA1MywxMCBAQAogCiAJQlVHX09OKEdFVF9QTVVfT1dORVIoKSk7CiAKLQl0ICAgICA9ICZ0YXNrLT50aHJlYWQ7CiAJLyoKIAkgKiBwb3NzaWJsZSBvbiB1bmxvYWQKIAkgKi8KLQlpZiAodW5saWtlbHkoKHQtPmZsYWdzICYgSUE2NF9USFJFQURfUE1fVkFMSUQpID09IDApKSByZXR1cm47CisJaWYgKHVubGlrZWx5KCh0YXNrLT50aHJlYWQuZmxhZ3MgJiBJQTY0X1RIUkVBRF9QTV9WQUxJRCkgPT0gMCkpIHJldHVybjsKIAogCS8qCiAgCSAqIHdlIGFsd2F5cyBjb21lIGhlcmUgd2l0aCBpbnRlcnJ1cHRzIEFMUkVBRFkgZGlzYWJsZWQgYnkKQEAgLTYxNDgsMjEgKzYxMzgsMjEgQEAKIAkgKgogCSAqIFhYWDogb3B0aW1pemUgaGVyZQogCSAqLwotCWlmIChwbWRfbWFzaykgcGZtX3Jlc3RvcmVfcG1kcyh0LT5wbWRzLCBwbWRfbWFzayk7Ci0JaWYgKHBtY19tYXNrKSBwZm1fcmVzdG9yZV9wbWNzKHQtPnBtY3MsIHBtY19tYXNrKTsKKwlpZiAocG1kX21hc2spIHBmbV9yZXN0b3JlX3BtZHMoY3R4LT50aF9wbWRzLCBwbWRfbWFzayk7CisJaWYgKHBtY19tYXNrKSBwZm1fcmVzdG9yZV9wbWNzKGN0eC0+dGhfcG1jcywgcG1jX21hc2spOwogCiAJLyoKIAkgKiBjaGVjayBmb3IgcGVuZGluZyBvdmVyZmxvdyBhdCB0aGUgdGltZSB0aGUgc3RhdGUKIAkgKiB3YXMgc2F2ZWQuCiAJICovCi0JaWYgKHVubGlrZWx5KFBNQzBfSEFTX09WRkwodC0+cG1jc1swXSkpKSB7CisJaWYgKHVubGlrZWx5KFBNQzBfSEFTX09WRkwoY3R4LT50aF9wbWNzWzBdKSkpIHsKIAkJLyoKIAkJICogcmVsb2FkIHBtYzAgd2l0aCB0aGUgb3ZlcmZsb3cgaW5mb3JtYXRpb24KIAkJICogT24gTWNLaW5sZXkgUE1VLCB0aGlzIHdpbGwgdHJpZ2dlciBhIFBNVSBpbnRlcnJ1cHQKIAkJICovCi0JCWlhNjRfc2V0X3BtYygwLCB0LT5wbWNzWzBdKTsKKwkJaWE2NF9zZXRfcG1jKDAsIGN0eC0+dGhfcG1jc1swXSk7CiAJCWlhNjRfc3Jsel9kKCk7Ci0JCXQtPnBtY3NbMF0gPSAwVUw7CisJCWN0eC0+dGhfcG1jc1swXSA9IDBVTDsKIAogCQkvKgogCQkgKiB3aWxsIHJlcGxheSB0aGUgUE1VIGludGVycnVwdApAQCAtNjIxNSw3ICs2MjA1LDYgQEAKIHZvaWQKIHBmbV9sb2FkX3JlZ3MgKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKIHsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdDsKIAlwZm1fY29udGV4dF90ICpjdHg7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpvd25lcjsKIAl1bnNpZ25lZCBsb25nIHBtZF9tYXNrLCBwbWNfbWFzazsKQEAgLTYyMjQsNyArNjIxMyw2IEBACiAKIAlvd25lciA9IEdFVF9QTVVfT1dORVIoKTsKIAljdHggICA9IFBGTV9HRVRfQ1RYKHRhc2spOwotCXQgICAgID0gJnRhc2stPnRocmVhZDsKIAlwc3IgICA9IHBmbV9nZXRfcHNyKCk7CiAKIAlCVUdfT04ocHNyICYgKElBNjRfUFNSX1VQfElBNjRfUFNSX1BQKSk7CkBAIC02Mjg3LDIyICs2Mjc1LDIyIEBACiAJICovCiAJcG1jX21hc2sgPSBjdHgtPmN0eF9hbGxfcG1jc1swXTsKIAotCXBmbV9yZXN0b3JlX3BtZHModC0+cG1kcywgcG1kX21hc2spOwotCXBmbV9yZXN0b3JlX3BtY3ModC0+cG1jcywgcG1jX21hc2spOworCXBmbV9yZXN0b3JlX3BtZHMoY3R4LT50aF9wbWRzLCBwbWRfbWFzayk7CisJcGZtX3Jlc3RvcmVfcG1jcyhjdHgtPnRoX3BtY3MsIHBtY19tYXNrKTsKIAogCS8qCiAJICogY2hlY2sgZm9yIHBlbmRpbmcgb3ZlcmZsb3cgYXQgdGhlIHRpbWUgdGhlIHN0YXRlCiAJICogd2FzIHNhdmVkLgogCSAqLwotCWlmICh1bmxpa2VseShQTUMwX0hBU19PVkZMKHQtPnBtY3NbMF0pKSkgeworCWlmICh1bmxpa2VseShQTUMwX0hBU19PVkZMKGN0eC0+dGhfcG1jc1swXSkpKSB7CiAJCS8qCiAJCSAqIHJlbG9hZCBwbWMwIHdpdGggdGhlIG92ZXJmbG93IGluZm9ybWF0aW9uCiAJCSAqIE9uIE1jS2lubGV5IFBNVSwgdGhpcyB3aWxsIHRyaWdnZXIgYSBQTVUgaW50ZXJydXB0CiAJCSAqLwotCQlpYTY0X3NldF9wbWMoMCwgdC0+cG1jc1swXSk7CisJCWlhNjRfc2V0X3BtYygwLCBjdHgtPnRoX3BtY3NbMF0pOwogCQlpYTY0X3NybHpfZCgpOwogCi0JCXQtPnBtY3NbMF0gPSAwVUw7CisJCWN0eC0+dGhfcG1jc1swXSA9IDBVTDsKIAogCQkvKgogCQkgKiB3aWxsIHJlcGxheSB0aGUgUE1VIGludGVycnVwdApAQCAtNjM3NywxMSArNjM2NSwxMSBAQAogCQkgKi8KIAkJcGZtX3VuZnJlZXplX3BtdSgpOwogCX0gZWxzZSB7Ci0JCXBtYzAgPSB0YXNrLT50aHJlYWQucG1jc1swXTsKKwkJcG1jMCA9IGN0eC0+dGhfcG1jc1swXTsKIAkJLyoKIAkJICogY2xlYXIgd2hhdGV2ZXIgb3ZlcmZsb3cgc3RhdHVzIGJpdHMgdGhlcmUgd2VyZQogCQkgKi8KLQkJdGFzay0+dGhyZWFkLnBtY3NbMF0gPSAwOworCQljdHgtPnRoX3BtY3NbMF0gPSAwOwogCX0KIAlvdmZsX3ZhbCA9IHBtdV9jb25mLT5vdmZsX3ZhbDsKIAkvKgpAQCAtNjQwMiw3ICs2MzkwLDcgQEAKIAkJLyoKIAkJICogY2FuIGFjY2VzcyBQTVUgYWx3YXlzIHRydWUgaW4gc3lzdGVtIHdpZGUgbW9kZQogCQkgKi8KLQkJdmFsID0gcG1kX3ZhbCA9IGNhbl9hY2Nlc3NfcG11ID8gaWE2NF9nZXRfcG1kKGkpIDogdGFzay0+dGhyZWFkLnBtZHNbaV07CisJCXZhbCA9IHBtZF92YWwgPSBjYW5fYWNjZXNzX3BtdSA/IGlhNjRfZ2V0X3BtZChpKSA6IGN0eC0+dGhfcG1kc1tpXTsKIAogCQlpZiAoUE1EX0lTX0NPVU5USU5HKGkpKSB7CiAJCQlEUFJJTlQoKCJbJWRdIHBtZFslZF0gY3R4X3BtZD0weCVseCBod19wbWQ9MHglbHhcbiIsCkBAIC02NDM0LDcgKzY0MjIsNyBAQAogCiAJCURQUklOVCgoIlslZF0gY3R4X3BtZFslZF09MHglbHggIHBtZF92YWw9MHglbHhcbiIsIHRhc2stPnBpZCwgaSwgdmFsLCBwbWRfdmFsKSk7CiAKLQkJaWYgKGlzX3NlbGYpIHRhc2stPnRocmVhZC5wbWRzW2ldID0gcG1kX3ZhbDsKKwkJaWYgKGlzX3NlbGYpIGN0eC0+dGhfcG1kc1tpXSA9IHBtZF92YWw7CiAKIAkJY3R4LT5jdHhfcG1kc1tpXS52YWwgPSB2YWw7CiAJfQpAQCAtNjY3OCw3ICs2NjY2LDcgQEAKIAkgICAgICAgZmZ6KHBtdV9jb25mLT5vdmZsX3ZhbCkpOwogCiAJLyogc2FuaXR5IGNoZWNrICovCi0JaWYgKHBtdV9jb25mLT5udW1fcG1kcyA+PSBJQTY0X05VTV9QTURfUkVHUyB8fCBwbXVfY29uZi0+bnVtX3BtY3MgPj0gSUE2NF9OVU1fUE1DX1JFR1MpIHsKKwlpZiAocG11X2NvbmYtPm51bV9wbWRzID49IFBGTV9OVU1fUE1EX1JFR1MgfHwgcG11X2NvbmYtPm51bV9wbWNzID49IFBGTV9OVU1fUE1DX1JFR1MpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJwZXJmbW9uOiBub3QgZW5vdWdoIHBtYy9wbWQsIHBlcmZtb24gZGlzYWJsZWRcbiIpOwogCQlwbXVfY29uZiA9IE5VTEw7CiAJCXJldHVybiAtMTsKQEAgLTY3NTMsNyArNjc0MSw2IEBACiBkdW1wX3BtdV9zdGF0ZShjb25zdCBjaGFyICpmcm9tKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsKLQlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdDsKIAlzdHJ1Y3QgcHRfcmVncyAqcmVnczsKIAlwZm1fY29udGV4dF90ICpjdHg7CiAJdW5zaWduZWQgbG9uZyBwc3IsIGRjciwgaW5mbywgZmxhZ3M7CkBAIC02Nzk4LDE2ICs2Nzg1LDE0IEBACiAJaWE2NF9wc3IocmVncyktPnVwID0gMDsKIAlpYTY0X3BzcihyZWdzKS0+cHAgPSAwOwogCi0JdCA9ICZjdXJyZW50LT50aHJlYWQ7Ci0KIAlmb3IgKGk9MTsgUE1DX0lTX0xBU1QoaSkgPT0gMDsgaSsrKSB7CiAJCWlmIChQTUNfSVNfSU1QTChpKSA9PSAwKSBjb250aW51ZTsKLQkJcHJpbnRrKCItPkNQVSVkIHBtY1slZF09MHglbHggdGhyZWFkX3BtY1slZF09MHglbHhcbiIsIHRoaXNfY3B1LCBpLCBpYTY0X2dldF9wbWMoaSksIGksIHQtPnBtY3NbaV0pOworCQlwcmludGsoIi0+Q1BVJWQgcG1jWyVkXT0weCVseCB0aHJlYWRfcG1jWyVkXT0weCVseFxuIiwgdGhpc19jcHUsIGksIGlhNjRfZ2V0X3BtYyhpKSwgaSwgY3R4LT50aF9wbWNzW2ldKTsKIAl9CiAKIAlmb3IgKGk9MTsgUE1EX0lTX0xBU1QoaSkgPT0gMDsgaSsrKSB7CiAJCWlmIChQTURfSVNfSU1QTChpKSA9PSAwKSBjb250aW51ZTsKLQkJcHJpbnRrKCItPkNQVSVkIHBtZFslZF09MHglbHggdGhyZWFkX3BtZFslZF09MHglbHhcbiIsIHRoaXNfY3B1LCBpLCBpYTY0X2dldF9wbWQoaSksIGksIHQtPnBtZHNbaV0pOworCQlwcmludGsoIi0+Q1BVJWQgcG1kWyVkXT0weCVseCB0aHJlYWRfcG1kWyVkXT0weCVseFxuIiwgdGhpc19jcHUsIGksIGlhNjRfZ2V0X3BtZChpKSwgaSwgY3R4LT50aF9wbWRzW2ldKTsKIAl9CiAKIAlpZiAoY3R4KSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3NhbGluZm8uYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCmluZGV4IDkwNjVmMGYuLmU2M2I4Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvc2FsaW5mby5jCkBAIC0yNjYsNiArMjY2LDcgQEAKIC8qIENoZWNrIGZvciBvdXRzdGFuZGluZyBNQ0EvSU5JVCByZWNvcmRzIGV2ZXJ5IG1pbnV0ZSAoYXJiaXRyYXJ5KSAqLwogI2RlZmluZSBTQUxJTkZPX1RJTUVSX0RFTEFZICg2MCpIWikKIHN0YXRpYyBzdHJ1Y3QgdGltZXJfbGlzdCBzYWxpbmZvX3RpbWVyOworZXh0ZXJuIHZvaWQgaWE2NF9tbG9nYnVmX2R1bXAodm9pZCk7CiAKIHN0YXRpYyB2b2lkCiBzYWxpbmZvX3RpbWVvdXRfY2hlY2soc3RydWN0IHNhbGluZm9fZGF0YSAqZGF0YSkKQEAgLTI4Myw2ICsyODQsNyBAQAogc3RhdGljIHZvaWQKIHNhbGluZm9fdGltZW91dCAodW5zaWduZWQgbG9uZyBhcmcpCiB7CisJaWE2NF9tbG9nYnVmX2R1bXAoKTsKIAlzYWxpbmZvX3RpbWVvdXRfY2hlY2soc2FsaW5mb19kYXRhICsgU0FMX0lORk9fVFlQRV9NQ0EpOwogCXNhbGluZm9fdGltZW91dF9jaGVjayhzYWxpbmZvX2RhdGEgKyBTQUxfSU5GT19UWVBFX0lOSVQpOwogCXNhbGluZm9fdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBTQUxJTkZPX1RJTUVSX0RFTEFZOwpAQCAtMzMyLDYgKzMzNCw4IEBACiAJaWYgKGNwdSA9PSAtMSkKIAkJZ290byByZXRyeTsKIAorCWlhNjRfbWxvZ2J1Zl9kdW1wKCk7CisKIAkvKiBmb3IgbmV4dCByZWFkLCBzdGFydCBjaGVja2luZyBhdCBuZXh0IENQVSAqLwogCWRhdGEtPmNwdV9jaGVjayA9IGNwdTsKIAlpZiAoKytkYXRhLT5jcHVfY2hlY2sgPT0gTlJfQ1BVUykKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvaWE2NC9rZXJuZWwvc2V0dXAuYwppbmRleCA3YWQwZDljLi44NGY5M2MwIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jCkBAIC01MDksNyArNTA5LDcgQEAKIAkJeyAxVUwgPDwgMSwgInNwb250YW5lb3VzIGRlZmVycmFsIn0sCiAJCXsgMVVMIDw8IDIsICIxNi1ieXRlIGF0b21pYyBvcHMiIH0KIAl9OwotCWNoYXIgZmFtaWx5WzMyXSwgZmVhdHVyZXNbMTI4XSwgKmNwLCBzZXA7CisJY2hhciBmZWF0dXJlc1sxMjhdLCAqY3AsIHNlcDsKIAlzdHJ1Y3QgY3B1aW5mb19pYTY0ICpjID0gdjsKIAl1bnNpZ25lZCBsb25nIG1hc2s7CiAJdW5zaWduZWQgbG9uZyBwcm9jX2ZyZXE7CkBAIC01MTcsMTIgKzUxNyw2IEBACiAKIAltYXNrID0gYy0+ZmVhdHVyZXM7CiAKLQlzd2l0Y2ggKGMtPmZhbWlseSkgewotCSAgICAgIGNhc2UgMHgwNzoJbWVtY3B5KGZhbWlseSwgIkl0YW5pdW0iLCA4KTsgYnJlYWs7Ci0JICAgICAgY2FzZSAweDFmOgltZW1jcHkoZmFtaWx5LCAiSXRhbml1bSAyIiwgMTApOyBicmVhazsKLQkgICAgICBkZWZhdWx0OgkJc3ByaW50ZihmYW1pbHksICIldSIsIGMtPmZhbWlseSk7IGJyZWFrOwotCX0KLQogCS8qIGJ1aWxkIHRoZSBmZWF0dXJlIHN0cmluZzogKi8KIAltZW1jcHkoZmVhdHVyZXMsICIgc3RhbmRhcmQiLCAxMCk7CiAJY3AgPSBmZWF0dXJlczsKQEAgLTU1Myw4ICs1NDcsOSBAQAogCQkgICAicHJvY2Vzc29yICA6ICVkXG4iCiAJCSAgICJ2ZW5kb3IgICAgIDogJXNcbiIKIAkJICAgImFyY2ggICAgICAgOiBJQS02NFxuIgotCQkgICAiZmFtaWx5ICAgICA6ICVzXG4iCisJCSAgICJmYW1pbHkgICAgIDogJXVcbiIKIAkJICAgIm1vZGVsICAgICAgOiAldVxuIgorCQkgICAibW9kZWwgbmFtZSA6ICVzXG4iCiAJCSAgICJyZXZpc2lvbiAgIDogJXVcbiIKIAkJICAgImFyY2hyZXYgICAgOiAldVxuIgogCQkgICAiZmVhdHVyZXMgICA6JXNcbiIJLyogZG9uJ3QgY2hhbmdlIHRoaXMtLS1pdCBfaXNfIHJpZ2h0ISAqLwpAQCAtNTYzLDcgKzU1OCw4IEBACiAJCSAgICJjcHUgTUh6ICAgIDogJWx1LiUwNmx1XG4iCiAJCSAgICJpdGMgTUh6ICAgIDogJWx1LiUwNmx1XG4iCiAJCSAgICJCb2dvTUlQUyAgIDogJWx1LiUwMmx1XG4iLAotCQkgICBjcHVudW0sIGMtPnZlbmRvciwgZmFtaWx5LCBjLT5tb2RlbCwgYy0+cmV2aXNpb24sIGMtPmFyY2hyZXYsCisJCSAgIGNwdW51bSwgYy0+dmVuZG9yLCBjLT5mYW1pbHksIGMtPm1vZGVsLAorCQkgICBjLT5tb2RlbF9uYW1lLCBjLT5yZXZpc2lvbiwgYy0+YXJjaHJldiwKIAkJICAgZmVhdHVyZXMsIGMtPnBwbiwgYy0+bnVtYmVyLAogCQkgICBwcm9jX2ZyZXEgLyAxMDAwLCBwcm9jX2ZyZXEgJSAxMDAwLAogCQkgICBjLT5pdGNfZnJlcSAvIDEwMDAwMDAsIGMtPml0Y19mcmVxICUgMTAwMDAwMCwKQEAgLTYxMSw2ICs2MDcsMzEgQEAKIAkuc2hvdyA9CQlzaG93X2NwdWluZm8KIH07CiAKK3N0YXRpYyBjaGFyIGJyYW5kbmFtZVsxMjhdOworCitzdGF0aWMgY2hhciAqIF9fY3B1aW5pdAorZ2V0X21vZGVsX25hbWUoX191OCBmYW1pbHksIF9fdTggbW9kZWwpCit7CisJY2hhciBicmFuZFsxMjhdOworCisJaWYgKGlhNjRfcGFsX2dldF9icmFuZF9pbmZvKGJyYW5kKSkgeworCQlpZiAoZmFtaWx5ID09IDB4NykKKwkJCW1lbWNweShicmFuZCwgIk1lcmNlZCIsIDcpOworCQllbHNlIGlmIChmYW1pbHkgPT0gMHgxZikgc3dpdGNoIChtb2RlbCkgeworCQkJY2FzZSAwOiBtZW1jcHkoYnJhbmQsICJNY0tpbmxleSIsIDkpOyBicmVhazsKKwkJCWNhc2UgMTogbWVtY3B5KGJyYW5kLCAiTWFkaXNvbiIsIDgpOyBicmVhazsKKwkJCWNhc2UgMjogbWVtY3B5KGJyYW5kLCAiTWFkaXNvbiB1cCB0byA5TSBjYWNoZSIsIDIzKTsgYnJlYWs7CisJCX0gZWxzZQorCQkJbWVtY3B5KGJyYW5kLCAiVW5rbm93biIsIDgpOworCX0KKwlpZiAoYnJhbmRuYW1lWzBdID09ICdcMCcpCisJCXJldHVybiBzdHJjcHkoYnJhbmRuYW1lLCBicmFuZCk7CisJZWxzZSBpZiAoc3RyY21wKGJyYW5kbmFtZSwgYnJhbmQpID09IDApCisJCXJldHVybiBicmFuZG5hbWU7CisJZWxzZQorCQlyZXR1cm4ga3N0cmR1cChicmFuZCwgR0ZQX0tFUk5FTCk7Cit9CisKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdAogaWRlbnRpZnlfY3B1IChzdHJ1Y3QgY3B1aW5mb19pYTY0ICpjKQogewpAQCAtNjQwLDcgKzY2MSw2IEBACiAJcGFsX3N0YXR1c190IHN0YXR1czsKIAl1bnNpZ25lZCBsb25nIGltcGxfdmFfbXNiID0gNTAsIHBoeXNfYWRkcl9zaXplID0gNDQ7CS8qIEl0YW5pdW0gZGVmYXVsdHMgKi8KIAlpbnQgaTsKLQogCWZvciAoaSA9IDA7IGkgPCA1OyArK2kpCiAJCWNwdWlkLmJpdHNbaV0gPSBpYTY0X2dldF9jcHVpZChpKTsKIApAQCAtNjYzLDYgKzY4Myw3IEBACiAJYy0+ZmFtaWx5ID0gY3B1aWQuZmllbGQuZmFtaWx5OwogCWMtPmFyY2hyZXYgPSBjcHVpZC5maWVsZC5hcmNocmV2OwogCWMtPmZlYXR1cmVzID0gY3B1aWQuZmllbGQuZmVhdHVyZXM7CisJYy0+bW9kZWxfbmFtZSA9IGdldF9tb2RlbF9uYW1lKGMtPmZhbWlseSwgYy0+bW9kZWwpOwogCiAJc3RhdHVzID0gaWE2NF9wYWxfdm1fc3VtbWFyeSgmdm0xLCAmdm0yKTsKIAlpZiAoc3RhdHVzID09IFBBTF9TVEFUVVNfU1VDQ0VTUykgewpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zbXBib290LmMgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwppbmRleCA2MjAzZWQ0Li5mN2Q3ZjU2IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL2lhNjQva2VybmVsL3NtcGJvb3QuYwpAQCAtODc5LDMgKzg3OSwyNyBAQAogCWMtPmNvcmVfaWQgPSBpbmZvLmxvZzFfY2lkOwogCWMtPnRocmVhZF9pZCA9IGluZm8ubG9nMV90aWQ7CiB9CisKKy8qCisgKiByZXR1cm5zIG5vbiB6ZXJvLCBpZiBtdWx0aS10aHJlYWRpbmcgaXMgZW5hYmxlZAorICogb24gYXQgbGVhc3Qgb25lIHBoeXNpY2FsIHBhY2thZ2UuIER1ZSB0byBob3RwbHVnIGNwdQorICogYW5kIChtYXhjcHVzPSksIGFsbCB0aHJlYWRzIG1heSBub3QgbmVjZXNzYXJpbHkgYmUgZW5hYmxlZAorICogZXZlbiB0aG91Z2ggdGhlIHByb2Nlc3NvciBzdXBwb3J0cyBtdWx0aS10aHJlYWRpbmcuCisgKi8KK2ludCBpc19tdWx0aXRocmVhZGluZ19lbmFibGVkKHZvaWQpCit7CisJaW50IGksIGo7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7CisJCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGopIHsKKwkJCWlmIChqID09IGkpCisJCQkJY29udGludWU7CisJCQlpZiAoKGNwdV9kYXRhKGopLT5zb2NrZXRfaWQgPT0gY3B1X2RhdGEoaSktPnNvY2tldF9pZCkpIHsKKwkJCQlpZiAoY3B1X2RhdGEoaiktPmNvcmVfaWQgPT0gY3B1X2RhdGEoaSktPmNvcmVfaWQpCisJCQkJCXJldHVybiAxOworCQkJfQorCQl9CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwoaXNfbXVsdGl0aHJlYWRpbmdfZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RpbWUuYyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCmluZGV4IDY5MjhlZjAuLjYyZTA3ZjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdGltZS5jCkBAIC0yOSw4ICsyOSw2IEBACiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIHZvbGF0aWxlIGludCB0aW1lX2tlZXBlcl9pZCA9IDA7IC8qIHNtcF9wcm9jZXNzb3JfaWQoKSBvZiB0aW1lLWtlZXBlciAqLwogCiAjaWZkZWYgQ09ORklHX0lBNjRfREVCVUdfSVJRCkBAIC03OCw3ICs3Niw3IEBACiAJCQkgKiB4dGltZV9sb2NrLgogCQkJICovCiAJCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQkJCWRvX3RpbWVyKHJlZ3MpOworCQkJZG9fdGltZXIoMSk7CiAJCQlsb2NhbF9jcHVfZGF0YS0+aXRtX25leHQgPSBuZXdfaXRtOwogCQkJd3JpdGVfc2VxdW5sb2NrKCZ4dGltZV9sb2NrKTsKIAkJfSBlbHNlCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL2lhNjQva2VybmVsL3RvcG9sb2d5LmMKaW5kZXggMDViZGY3YS4uNTYyOWI0NSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC90b3BvbG9neS5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMzYsMTAgKzM2LDggQEAKIAkgKi8KIAlpZiAoIWNhbl9jcGVpX3JldGFyZ2V0KCkgJiYgaXNfY3B1X2NwZWlfdGFyZ2V0KG51bSkpCiAJCXN5c2ZzX2NwdXNbbnVtXS5jcHUubm9fY29udHJvbCA9IDE7Ci0jaWZkZWYgQ09ORklHX05VTUEKIAltYXBfY3B1X3RvX25vZGUobnVtLCBub2RlX2NwdWlkW251bV0ubmlkKTsKICNlbmRpZgotI2VuZGlmCiAKIAlyZXR1cm4gcmVnaXN0ZXJfY3B1KCZzeXNmc19jcHVzW251bV0uY3B1LCBudW0pOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TIGIvYXJjaC9pYTY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IDViMGQ1ZjYuLmIzYjJlMzggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL2lhNjQva2VybmVsL3ZtbGludXgubGRzLlMKQEAgLTE4NCw3ICsxODQsOSBAQAogCSAgKiguZGF0YS5nYXRlKQogCSAgX19zdG9wX2dhdGVfc2VjdGlvbiA9IC47CiAJfQotICAuID0gQUxJR04oUEFHRV9TSVpFKTsJCS8qIG1ha2Ugc3VyZSB0aGUgZ2F0ZSBwYWdlIGRvZXNuJ3QgZXhwb3NlIGtlcm5lbCBkYXRhICovCisgIC4gPSBBTElHTihQQUdFX1NJWkUpOwkJLyogbWFrZSBzdXJlIHRoZSBnYXRlIHBhZ2UgZG9lc24ndCBleHBvc2UKKyAgCQkJCSAqIGtlcm5lbCBkYXRhCisJCQkJICovCiAKICAgLmRhdGEucmVhZF9tb3N0bHkgOiBBVChBRERSKC5kYXRhLnJlYWRfbW9zdGx5KSAtIExPQURfT0ZGU0VUKQogICAgICAgICB7ICooLmRhdGEucmVhZF9tb3N0bHkpIH0KQEAgLTIwMiw3ICsyMDQsOSBAQAogCQkqKC5kYXRhLnBlcmNwdSkKIAkJX19wZXJfY3B1X2VuZCA9IC47CiAJfQotICAuID0gX19waHlzX3Blcl9jcHVfc3RhcnQgKyBQRVJDUFVfUEFHRV9TSVpFOwkvKiBlbnN1cmUgcGVyY3B1IGRhdGEgZml0cyBpbnRvIHBlcmNwdSBwYWdlIHNpemUgKi8KKyAgLiA9IF9fcGh5c19wZXJfY3B1X3N0YXJ0ICsgUEVSQ1BVX1BBR0VfU0laRTsJLyogZW5zdXJlIHBlcmNwdSBkYXRhIGZpdHMKKyAgCQkJCQkJICogaW50byBwZXJjcHUgcGFnZSBzaXplCisJCQkJCQkgKi8KIAogICBkYXRhIDogeyB9IDpkYXRhCiAgIC5kYXRhIDogQVQoQUREUiguZGF0YSkgLSBMT0FEX09GRlNFVCkKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9jb250aWcuYyBiL2FyY2gvaWE2NC9tbS9jb250aWcuYwppbmRleCBlMDA0MTQzLi5kYWY5NzdmIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2NvbnRpZy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL21jYS5oPgogCiAjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAotc3RhdGljIHVuc2lnbmVkIGxvbmcgbnVtX2RtYV9waHlzcGFnZXM7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXhfZ2FwOwogI2VuZGlmCiAKQEAgLTQxLDEwICs0MCwxMSBAQAogCWludCBpLCB0b3RhbCA9IDAsIHJlc2VydmVkID0gMDsKIAlpbnQgc2hhcmVkID0gMCwgY2FjaGVkID0gMDsKIAotCXByaW50aygiTWVtLWluZm86XG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNZW0taW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwogCi0JcHJpbnRrKCJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKKwlwcmludGsoS0VSTl9JTkZPICJGcmVlIHN3YXA6ICAgICAgICU2bGRrQlxuIiwKKwkgICAgICAgbnJfc3dhcF9wYWdlczw8KFBBR0VfU0hJRlQtMTApKTsKIAlpID0gbWF4X21hcG5yOwogCWZvciAoaSA9IDA7IGkgPCBtYXhfbWFwbnI7IGkrKykgewogCQlpZiAoIXBmbl92YWxpZChpKSkgewpAQCAtNjMsMTIgKzYzLDEyIEBACiAJCWVsc2UgaWYgKHBhZ2VfY291bnQobWVtX21hcCArIGkpKQogCQkJc2hhcmVkICs9IHBhZ2VfY291bnQobWVtX21hcCArIGkpIC0gMTsKIAl9Ci0JcHJpbnRrKCIlZCBwYWdlcyBvZiBSQU1cbiIsIHRvdGFsKTsKLQlwcmludGsoIiVkIHJlc2VydmVkIHBhZ2VzXG4iLCByZXNlcnZlZCk7Ci0JcHJpbnRrKCIlZCBwYWdlcyBzaGFyZWRcbiIsIHNoYXJlZCk7Ci0JcHJpbnRrKCIlZCBwYWdlcyBzd2FwIGNhY2hlZFxuIiwgY2FjaGVkKTsKLQlwcmludGsoIiVsZCBwYWdlcyBpbiBwYWdlIHRhYmxlIGNhY2hlXG4iLAotCQlwZ3RhYmxlX3F1aWNrbGlzdF90b3RhbF9zaXplKCkpOworCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIG9mIFJBTVxuIiwgdG90YWwpOworCXByaW50ayhLRVJOX0lORk8gIiVkIHJlc2VydmVkIHBhZ2VzXG4iLCByZXNlcnZlZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWQgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOworCXByaW50ayhLRVJOX0lORk8gIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLCBjYWNoZWQpOworCXByaW50ayhLRVJOX0lORk8gIiVsZCBwYWdlcyBpbiBwYWdlIHRhYmxlIGNhY2hlXG4iLAorCSAgICAgICBwZ3RhYmxlX3F1aWNrbGlzdF90b3RhbF9zaXplKCkpOwogfQogCiAvKiBwaHlzaWNhbCBhZGRyZXNzIHdoZXJlIHRoZSBib290bWVtIG1hcCBpcyBsb2NhdGVkICovCkBAIC0yMTgsMTggKzIxOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCi1zdGF0aWMgaW50Ci1jb3VudF9kbWFfcGFnZXMgKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKQotewotCXVuc2lnbmVkIGxvbmcgKmNvdW50ID0gYXJnOwotCi0JaWYgKHN0YXJ0IDwgTUFYX0RNQV9BRERSRVNTKQotCQkqY291bnQgKz0gKG1pbihlbmQsIE1BWF9ETUFfQUREUkVTUykgLSBzdGFydCkgPj4gUEFHRV9TSElGVDsKLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKgogICogU2V0IHVwIHRoZSBwYWdlIHRhYmxlcy4KICAqLwpAQCAtMjM4LDQ1ICsyMjYsMjIgQEAKIHBhZ2luZ19pbml0ICh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgbWF4X2RtYTsKLQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKLSNpZmRlZiBDT05GSUdfVklSVFVBTF9NRU1fTUFQCi0JdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwotI2VuZGlmCi0KLQkvKiBpbml0aWFsaXplIG1lbV9tYXBbXSAqLwotCi0JbWVtc2V0KHpvbmVzX3NpemUsIDAsIHNpemVvZih6b25lc19zaXplKSk7CisJdW5zaWduZWQgbG9uZyBuaWQgPSAwOworCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdOwogCiAJbnVtX3BoeXNwYWdlcyA9IDA7CiAJZWZpX21lbW1hcF93YWxrKGNvdW50X3BhZ2VzLCAmbnVtX3BoeXNwYWdlcyk7CiAKIAltYXhfZG1hID0gdmlydF90b19waHlzKCh2b2lkICopIE1BWF9ETUFfQUREUkVTUykgPj4gUEFHRV9TSElGVDsKKwltYXhfem9uZV9wZm5zW1pPTkVfRE1BXSA9IG1heF9kbWE7CisJbWF4X3pvbmVfcGZuc1taT05FX05PUk1BTF0gPSBtYXhfbG93X3BmbjsKIAogI2lmZGVmIENPTkZJR19WSVJUVUFMX01FTV9NQVAKLQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwotCi0JbnVtX2RtYV9waHlzcGFnZXMgPSAwOwotCWVmaV9tZW1tYXBfd2Fsayhjb3VudF9kbWFfcGFnZXMsICZudW1fZG1hX3BoeXNwYWdlcyk7Ci0KLQlpZiAobWF4X2xvd19wZm4gPCBtYXhfZG1hKSB7Ci0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2xvd19wZm47Ci0JCXpob2xlc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuIC0gbnVtX2RtYV9waHlzcGFnZXM7Ci0JfSBlbHNlIHsKLQkJem9uZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfZG1hOwotCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gPSBtYXhfZG1hIC0gbnVtX2RtYV9waHlzcGFnZXM7Ci0JCWlmIChudW1fcGh5c3BhZ2VzID4gbnVtX2RtYV9waHlzcGFnZXMpIHsKLQkJCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gbWF4X2xvd19wZm4gLSBtYXhfZG1hOwotCQkJemhvbGVzX3NpemVbWk9ORV9OT1JNQUxdID0KLQkJCQkoKG1heF9sb3dfcGZuIC0gbWF4X2RtYSkgLQotCQkJCSAobnVtX3BoeXNwYWdlcyAtIG51bV9kbWFfcGh5c3BhZ2VzKSk7Ci0JCX0KLQl9Ci0KKwllZmlfbWVtbWFwX3dhbGsocmVnaXN0ZXJfYWN0aXZlX3JhbmdlcywgJm5pZCk7CiAJZWZpX21lbW1hcF93YWxrKGZpbmRfbGFyZ2VzdF9ob2xlLCAodTY0ICopJm1heF9nYXApOwogCWlmIChtYXhfZ2FwIDwgTEFSR0VfR0FQKSB7CiAJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIDA7Ci0JCWZyZWVfYXJlYV9pbml0X25vZGUoMCwgTk9ERV9EQVRBKDApLCB6b25lc19zaXplLCAwLAotCQkJCSAgICB6aG9sZXNfc2l6ZSk7CisJCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogCX0gZWxzZSB7CiAJCXVuc2lnbmVkIGxvbmcgbWFwX3NpemU7CiAKQEAgLTI4OCwyMCArMjUzLDE5IEBACiAJCXZtZW1fbWFwID0gKHN0cnVjdCBwYWdlICopIHZtYWxsb2NfZW5kOwogCQllZmlfbWVtbWFwX3dhbGsoY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSwgTlVMTCk7CiAKLQkJTk9ERV9EQVRBKDApLT5ub2RlX21lbV9tYXAgPSB2bWVtX21hcDsKLQkJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCBOT0RFX0RBVEEoMCksIHpvbmVzX3NpemUsCi0JCQkJICAgIDAsIHpob2xlc19zaXplKTsKKwkJLyoKKwkJICogYWxsb2Nfbm9kZV9tZW1fbWFwIG1ha2VzIGFuIGFkanVzdG1lbnQgZm9yIG1lbV9tYXAKKwkJICogd2hpY2ggaXNuJ3QgY29tcGF0aWJsZSB3aXRoIHZtZW1fbWFwLgorCQkgKi8KKwkJTk9ERV9EQVRBKDApLT5ub2RlX21lbV9tYXAgPSB2bWVtX21hcCArCisJCQlmaW5kX21pbl9wZm5fd2l0aF9hY3RpdmVfcmVnaW9ucygpOworCQlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIAogCQlwcmludGsoIlZpcnR1YWwgbWVtX21hcCBzdGFydHMgYXQgMHglcFxuIiwgbWVtX21hcCk7CiAJfQogI2Vsc2UgLyogIUNPTkZJR19WSVJUVUFMX01FTV9NQVAgKi8KLQlpZiAobWF4X2xvd19wZm4gPCBtYXhfZG1hKQotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9sb3dfcGZuOwotCWVsc2UgewotCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1heF9kbWE7Ci0JCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gbWF4X2xvd19wZm4gLSBtYXhfZG1hOwotCX0KLQlmcmVlX2FyZWFfaW5pdCh6b25lc19zaXplKTsKKwlhZGRfYWN0aXZlX3JhbmdlKDAsIDAsIG1heF9sb3dfcGZuKTsKKwlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKICNlbmRpZiAvKiAhQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwogCXplcm9fcGFnZV9tZW1tYXBfcHRyID0gdmlydF90b19wYWdlKGlhNjRfaW12YShlbXB0eV96ZXJvX3BhZ2UpKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYyBiL2FyY2gvaWE2NC9tbS9kaXNjb250aWcuYwppbmRleCBkMjYwYmZmLi5kNDk3YjZiIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvbW0vZGlzY29udGlnLmMKKysrIGIvYXJjaC9pYTY0L21tL2Rpc2NvbnRpZy5jCkBAIC01NDcsMTUgKzU0NywxNiBAQAogCXVuc2lnbmVkIGxvbmcgdG90YWxfcHJlc2VudCA9IDA7CiAJcGdfZGF0YV90ICpwZ2RhdDsKIAotCXByaW50aygiTWVtLWluZm86XG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJNZW0taW5mbzpcbiIpOwogCXNob3dfZnJlZV9hcmVhcygpOwotCXByaW50aygiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiRnJlZSBzd2FwOiAgICAgICAlNmxka0JcbiIsCisJICAgICAgIG5yX3N3YXBfcGFnZXM8PChQQUdFX1NISUZULTEwKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiTm9kZSBtZW1vcnkgaW4gcGFnZXM6XG4iKTsKIAlmb3JfZWFjaF9vbmxpbmVfcGdkYXQocGdkYXQpIHsKIAkJdW5zaWduZWQgbG9uZyBwcmVzZW50OwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQlpbnQgc2hhcmVkID0gMCwgY2FjaGVkID0gMCwgcmVzZXJ2ZWQgPSAwOwogCi0JCXByaW50aygiTm9kZSBJRDogJWRcbiIsIHBnZGF0LT5ub2RlX2lkKTsKIAkJcGdkYXRfcmVzaXplX2xvY2socGdkYXQsICZmbGFncyk7CiAJCXByZXNlbnQgPSBwZ2RhdC0+bm9kZV9wcmVzZW50X3BhZ2VzOwogCQlmb3IoaSA9IDA7IGkgPCBwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzOyBpKyspIHsKQEAgLTU3OSwxOCArNTgwLDE3IEBACiAJCXRvdGFsX3Jlc2VydmVkICs9IHJlc2VydmVkOwogCQl0b3RhbF9jYWNoZWQgKz0gY2FjaGVkOwogCQl0b3RhbF9zaGFyZWQgKz0gc2hhcmVkOwotCQlwcmludGsoIlx0JWxkIHBhZ2VzIG9mIFJBTVxuIiwgcHJlc2VudCk7Ci0JCXByaW50aygiXHQlZCByZXNlcnZlZCBwYWdlc1xuIiwgcmVzZXJ2ZWQpOwotCQlwcmludGsoIlx0JWQgcGFnZXMgc2hhcmVkXG4iLCBzaGFyZWQpOwotCQlwcmludGsoIlx0JWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIGNhY2hlZCk7CisJCXByaW50ayhLRVJOX0lORk8gIk5vZGUgJTRkOiAgUkFNOiAlMTFsZCwgcnN2ZDogJThkLCAiCisJCSAgICAgICAic2hyZDogJTEwZCwgc3dwZDogJTEwZFxuIiwgcGdkYXQtPm5vZGVfaWQsCisJCSAgICAgICBwcmVzZW50LCByZXNlcnZlZCwgc2hhcmVkLCBjYWNoZWQpOwogCX0KLQlwcmludGsoIiVsZCBwYWdlcyBvZiBSQU1cbiIsIHRvdGFsX3ByZXNlbnQpOwotCXByaW50aygiJWQgcmVzZXJ2ZWQgcGFnZXNcbiIsIHRvdGFsX3Jlc2VydmVkKTsKLQlwcmludGsoIiVkIHBhZ2VzIHNoYXJlZFxuIiwgdG90YWxfc2hhcmVkKTsKLQlwcmludGsoIiVkIHBhZ2VzIHN3YXAgY2FjaGVkXG4iLCB0b3RhbF9jYWNoZWQpOwotCXByaW50aygiVG90YWwgb2YgJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsCi0JCXBndGFibGVfcXVpY2tsaXN0X3RvdGFsX3NpemUoKSk7Ci0JcHJpbnRrKCIlZCBmcmVlIGJ1ZmZlciBwYWdlc1xuIiwgbnJfZnJlZV9idWZmZXJfcGFnZXMoKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWxkIHBhZ2VzIG9mIFJBTVxuIiwgdG90YWxfcHJlc2VudCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWQgcmVzZXJ2ZWQgcGFnZXNcbiIsIHRvdGFsX3Jlc2VydmVkKTsKKwlwcmludGsoS0VSTl9JTkZPICIlZCBwYWdlcyBzaGFyZWRcbiIsIHRvdGFsX3NoYXJlZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWQgcGFnZXMgc3dhcCBjYWNoZWRcbiIsIHRvdGFsX2NhY2hlZCk7CisJcHJpbnRrKEtFUk5fSU5GTyAiVG90YWwgb2YgJWxkIHBhZ2VzIGluIHBhZ2UgdGFibGUgY2FjaGVcbiIsCisJICAgICAgIHBndGFibGVfcXVpY2tsaXN0X3RvdGFsX3NpemUoKSk7CisJcHJpbnRrKEtFUk5fSU5GTyAiJWQgZnJlZSBidWZmZXIgcGFnZXNcbiIsIG5yX2ZyZWVfYnVmZmVyX3BhZ2VzKCkpOwogfQogCiAvKioKQEAgLTY1NCw2ICs2NTQsNyBAQAogewogCXVuc2lnbmVkIGxvbmcgZW5kID0gc3RhcnQgKyBsZW47CiAKKwlhZGRfYWN0aXZlX3JhbmdlKG5vZGUsIHN0YXJ0ID4+IFBBR0VfU0hJRlQsIGVuZCA+PiBQQUdFX1NISUZUKTsKIAltZW1fZGF0YVtub2RlXS5udW1fcGh5c3BhZ2VzICs9IGxlbiA+PiBQQUdFX1NISUZUOwogCWlmIChzdGFydCA8PSBfX3BhKE1BWF9ETUFfQUREUkVTUykpCiAJCW1lbV9kYXRhW25vZGVdLm51bV9kbWFfcGh5c3BhZ2VzICs9CkBAIC02NzgsMTAgKzY3OSwxMCBAQAogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIG1heF9kbWE7Ci0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107Ci0JdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwogCXVuc2lnbmVkIGxvbmcgcGZuX29mZnNldCA9IDA7CisJdW5zaWduZWQgbG9uZyBtYXhfcGZuID0gMDsKIAlpbnQgbm9kZTsKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXTsKIAogCW1heF9kbWEgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKikgTUFYX0RNQV9BRERSRVNTKSA+PiBQQUdFX1NISUZUOwogCkBAIC02OTgsNDcgKzY5OSwyMCBAQAogI2VuZGlmCiAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShub2RlKSB7Ci0JCW1lbXNldCh6b25lc19zaXplLCAwLCBzaXplb2Yoem9uZXNfc2l6ZSkpOwotCQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwotCiAJCW51bV9waHlzcGFnZXMgKz0gbWVtX2RhdGFbbm9kZV0ubnVtX3BoeXNwYWdlczsKLQotCQlpZiAobWVtX2RhdGFbbm9kZV0ubWluX3BmbiA+PSBtYXhfZG1hKSB7Ci0JCQkvKiBBbGwgb2YgdGhpcyBub2RlJ3MgbWVtb3J5IGlzIGFib3ZlIFpPTkVfRE1BICovCi0JCQl6b25lc19zaXplW1pPTkVfTk9STUFMXSA9IG1lbV9kYXRhW25vZGVdLm1heF9wZm4gLQotCQkJCW1lbV9kYXRhW25vZGVdLm1pbl9wZm47Ci0JCQl6aG9sZXNfc2l6ZVtaT05FX05PUk1BTF0gPSBtZW1fZGF0YVtub2RlXS5tYXhfcGZuIC0KLQkJCQltZW1fZGF0YVtub2RlXS5taW5fcGZuIC0KLQkJCQltZW1fZGF0YVtub2RlXS5udW1fcGh5c3BhZ2VzOwotCQl9IGVsc2UgaWYgKG1lbV9kYXRhW25vZGVdLm1heF9wZm4gPCBtYXhfZG1hKSB7Ci0JCQkvKiBBbGwgb2YgdGhpcyBub2RlJ3MgbWVtb3J5IGlzIGluIFpPTkVfRE1BICovCi0JCQl6b25lc19zaXplW1pPTkVfRE1BXSA9IG1lbV9kYXRhW25vZGVdLm1heF9wZm4gLQotCQkJCW1lbV9kYXRhW25vZGVdLm1pbl9wZm47Ci0JCQl6aG9sZXNfc2l6ZVtaT05FX0RNQV0gPSBtZW1fZGF0YVtub2RlXS5tYXhfcGZuIC0KLQkJCQltZW1fZGF0YVtub2RlXS5taW5fcGZuIC0KLQkJCQltZW1fZGF0YVtub2RlXS5udW1fZG1hX3BoeXNwYWdlczsKLQkJfSBlbHNlIHsKLQkJCS8qIFRoaXMgbm9kZSBoYXMgbWVtb3J5IGluIGJvdGggem9uZXMgKi8KLQkJCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gbWF4X2RtYSAtCi0JCQkJbWVtX2RhdGFbbm9kZV0ubWluX3BmbjsKLQkJCXpob2xlc19zaXplW1pPTkVfRE1BXSA9IHpvbmVzX3NpemVbWk9ORV9ETUFdIC0KLQkJCQltZW1fZGF0YVtub2RlXS5udW1fZG1hX3BoeXNwYWdlczsKLQkJCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gbWVtX2RhdGFbbm9kZV0ubWF4X3BmbiAtCi0JCQkJbWF4X2RtYTsKLQkJCXpob2xlc19zaXplW1pPTkVfTk9STUFMXSA9IHpvbmVzX3NpemVbWk9ORV9OT1JNQUxdIC0KLQkJCQkobWVtX2RhdGFbbm9kZV0ubnVtX3BoeXNwYWdlcyAtCi0JCQkJIG1lbV9kYXRhW25vZGVdLm51bV9kbWFfcGh5c3BhZ2VzKTsKLQkJfQotCiAJCXBmbl9vZmZzZXQgPSBtZW1fZGF0YVtub2RlXS5taW5fcGZuOwogCiAjaWZkZWYgQ09ORklHX1ZJUlRVQUxfTUVNX01BUAogCQlOT0RFX0RBVEEobm9kZSktPm5vZGVfbWVtX21hcCA9IHZtZW1fbWFwICsgcGZuX29mZnNldDsKICNlbmRpZgotCQlmcmVlX2FyZWFfaW5pdF9ub2RlKG5vZGUsIE5PREVfREFUQShub2RlKSwgem9uZXNfc2l6ZSwKLQkJCQkgICAgcGZuX29mZnNldCwgemhvbGVzX3NpemUpOworCQlpZiAobWVtX2RhdGFbbm9kZV0ubWF4X3BmbiA+IG1heF9wZm4pCisJCQltYXhfcGZuID0gbWVtX2RhdGFbbm9kZV0ubWF4X3BmbjsKIAl9CiAKKwltYXhfem9uZV9wZm5zW1pPTkVfRE1BXSA9IG1heF9kbWE7CisJbWF4X3pvbmVfcGZuc1taT05FX05PUk1BTF0gPSBtYXhfcGZuOworCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOworCiAJemVyb19wYWdlX21lbW1hcF9wdHIgPSB2aXJ0X3RvX3BhZ2UoaWE2NF9pbXZhKGVtcHR5X3plcm9fcGFnZSkpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvbW0vZmF1bHQuYyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCmluZGV4IDE0ZWY3Y2MuLjU5ZjNhYjkgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvaWE2NC9tbS9mYXVsdC5jCkBAIC0xNDYsOSArMTQ2LDExIEBACiAjCQllcnJvciBGaWxlIGlzIG91dCBvZiBzeW5jIHdpdGggPGxpbnV4L21tLmg+LiAgUGxlYXNlIHVwZGF0ZS4KICMJZW5kaWYKIAorCWlmICgoKGlzciA+PiBJQTY0X0lTUl9SX0JJVCkgJiAxVUwpICYmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpKQorCQlnb3RvIGJhZF9hcmVhOworCiAJbWFzayA9ICggICgoKGlzciA+PiBJQTY0X0lTUl9YX0JJVCkgJiAxVUwpIDw8IFZNX0VYRUNfQklUKQotCQl8ICgoKGlzciA+PiBJQTY0X0lTUl9XX0JJVCkgJiAxVUwpIDw8IFZNX1dSSVRFX0JJVCkKLQkJfCAoKChpc3IgPj4gSUE2NF9JU1JfUl9CSVQpICYgMVVMKSA8PCBWTV9SRUFEX0JJVCkpOworCQl8ICgoKGlzciA+PiBJQTY0X0lTUl9XX0JJVCkgJiAxVUwpIDw8IFZNX1dSSVRFX0JJVCkpOwogCiAJaWYgKCh2bWEtPnZtX2ZsYWdzICYgbWFzaykgIT0gbWFzaykKIAkJZ290byBiYWRfYXJlYTsKQEAgLTI3OCw3ICsyODAsNyBAQAogCiAgIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdChjdXJyZW50KSkgewogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9tbS9pbml0LmMgYi9hcmNoL2lhNjQvbW0vaW5pdC5jCmluZGV4IDMwNjE3Y2MuLmZmODdhNWMgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9pYTY0L21tL2luaXQuYwpAQCAtNTkzLDYgKzU5MywxOCBAQAogCWxhc3RfZW5kID0gZW5kOwogCXJldHVybiAwOwogfQorCitpbnQgX19pbml0CityZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqbmlkKQoreworCUJVR19PTihuaWQgPT0gTlVMTCk7CisJQlVHX09OKCoodW5zaWduZWQgbG9uZyAqKW5pZCA+PSBNQVhfTlVNTk9ERVMpOworCisJYWRkX2FjdGl2ZV9yYW5nZSgqKHVuc2lnbmVkIGxvbmcgKiluaWQsCisJCQkJX19wYShzdGFydCkgPj4gUEFHRV9TSElGVCwKKwkJCQlfX3BhKGVuZCkgPj4gUEFHRV9TSElGVCk7CisJcmV0dXJuIDA7Cit9CiAjZW5kaWYgLyogQ09ORklHX1ZJUlRVQUxfTUVNX01BUCAqLwogCiBzdGF0aWMgaW50IF9faW5pdApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L21tL251bWEuYyBiL2FyY2gvaWE2NC9tbS9udW1hLmMKaW5kZXggNjRlNGMyMS4uNzgwN2ZjNSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L21tL251bWEuYworKysgYi9hcmNoL2lhNjQvbW0vbnVtYS5jCkBAIC0xNiw2ICsxNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbm9kZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL21tem9uZS5oPgogI2luY2x1ZGUgPGFzbS9udW1hLmg+CiAKQEAgLTY5LDQgKzcwLDIxIEBACiAKIAlyZXR1cm4gMDsKIH0KKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworLyoKKyAqICBTUkFUIGluZm9ybWF0aW9uIGlzIHN0b3JlZCBpbiBub2RlX21lbWJsa1tdLCB0aGVuIHdlIGNhbiB1c2UgU1JBVAorICogIGluZm9ybWF0aW9uIGF0IG1lbW9yeS1ob3QtYWRkIGlmIG5lY2Vzc2FyeS4KKyAqLworCitpbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IGFkZHIpCit7CisJaW50IG5pZCA9IHBhZGRyX3RvX25pZChhZGRyKTsKKwlpZiAobmlkIDwgMCkKKwkJcmV0dXJuIDA7CisJcmV0dXJuIG5pZDsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwobWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQpOworI2VuZGlmCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9wY2kvcGNpLmMgYi9hcmNoL2lhNjQvcGNpL3BjaS5jCmluZGV4IDYwYjQ1ZTcuLjE1YzdjNjcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9wY2kvcGNpLmMKKysrIGIvYXJjaC9pYTY0L3BjaS9wY2kuYwpAQCAtNTYyLDcgKzU2Miw4IEBACiB2b2lkCiBwY2liaW9zX2Rpc2FibGVfZGV2aWNlIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQogewotCWFjcGlfcGNpX2lycV9kaXNhYmxlKGRldik7CisJaWYgKGRldi0+aXNfZW5hYmxlZCkKKwkJYWNwaV9wY2lfaXJxX2Rpc2FibGUoZGV2KTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvYnRlLmMKaW5kZXggMjdkZWU0NS4uN2Y3M2FkNCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9idGUuYworKysgYi9hcmNoL2lhNjQvc24va2VybmVsL2J0ZS5jCkBAIC0yNzcsOCArMjc3LDcgQEAKIAl9CiAKIAkvKiB0ZW1wb3JhcnkgYnVmZmVyIHVzZWQgZHVyaW5nIHVuYWxpZ25lZCB0cmFuc2ZlcnMgKi8KLQlidGVCbG9ja191bmFsaWduZWQgPSBrbWFsbG9jKGxlbiArIDMgKiBMMV9DQUNIRV9CWVRFUywKLQkJCQkgICAgIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwlidGVCbG9ja191bmFsaWduZWQgPSBrbWFsbG9jKGxlbiArIDMgKiBMMV9DQUNIRV9CWVRFUywgR0ZQX0tFUk5FTCk7CiAJaWYgKGJ0ZUJsb2NrX3VuYWxpZ25lZCA9PSBOVUxMKSB7CiAJCXJldHVybiBCVEVGQUlMX05PVEFWQUlMOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2F0ZS5jCmluZGV4IDFmMDI1M2IuLjVlYjFlMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfYXRlLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9hdGUuYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAKIAl2b2xhdGlsZSB1NjQgYXRlOwogCWludCBjb3VudDsKLQl1NjQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWlmIChwY2licl9pbnZhbGlkYXRlX2F0ZSkgewogCQkvKiBGb3IgZGVidWdnaW5nIHB1cnBvc2VzLCBjbGVhciB0aGUgdmFsaWQgYml0IGluIHRoZSBBVEUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMgYi9hcmNoL2lhNjQvc24vcGNpL3BjaWJyL3BjaWJyX2RtYS5jCmluZGV4IGE4NmM3YjkuLjFlZTk3N2YgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpYnIvcGNpYnJfZG1hLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lici9wY2licl9kbWEuYwpAQCAtMjM3LDcgKzIzNyw3IEBACiAJaW50IGlzX3RpbzsKIAlpbnQgd2lkX251bTsKIAlpbnQgaSwgajsKLQl1NjQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1NjQgaXR0ZTsKIAlzdHJ1Y3QgaHViZGV2X2luZm8gKmh1YmluZm87CiAJc3RydWN0IHNuX2ZsdXNoX2RldmljZV9rZXJuZWwgKnA7CmRpZmYgLS1naXQgYS9hcmNoL20zMnIva2VybmVsL3RpbWUuYyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCmluZGV4IGRlZDBiZTAuLmQ4YWYxNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTMyci9rZXJuZWwvdGltZS5jCkBAIC0zOCw3ICszOCw2IEBACiBleHRlcm4gdm9pZCBzbXBfbG9jYWxfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICopOwogI2VuZGlmCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKICNkZWZpbmUgVElDS19TSVpFCSh0aWNrX25zZWMgLyAxMDAwKQogCiAvKgpAQCAtMTA4LDI0ICsxMDcsMTcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9udHBfdGljayA9IHRpY2tfdXNlYyAtIHRpY2thZGo7CiAKIAlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9zdDsKLQogCQlzZXEgPSByZWFkX3NlcWJlZ2luKCZ4dGltZV9sb2NrKTsKIAogCQl1c2VjID0gZG9fZ2V0dGltZW9mZnNldCgpOwotCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAogCQkvKgogCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jawogCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KIAkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpIHsKKwkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpCiAJCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7Ci0JCQlpZiAobG9zdCkKLQkJCQl1c2VjICs9IGxvc3QgKiBtYXhfbnRwX3RpY2s7Ci0JCX0gZWxzZSBpZiAodW5saWtlbHkobG9zdCkpCi0JCQl1c2VjICs9IGxvc3QgKiB0aWNrX3VzZWM7CiAKIAkJc2VjID0geHRpbWUudHZfc2VjOwogCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gMTAwMCk7CkBAIC0xNTgsNyArMTUwLDYgQEAKIAkgKiBtYWRlLCBhbmQgdGhlbiB1bmRvIGl0IQogCSAqLwogCW5zZWMgLT0gZG9fZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQzsKLQluc2VjIC09IChqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIFRJQ0tfTlNFQzsKIAogCXd0bV9zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKIAl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwpAQCAtMjAyLDcgKzE5Myw3IEBACiAjaWZuZGVmIENPTkZJR19TTVAKIAlwcm9maWxlX3RpY2soQ1BVX1BST0ZJTElORywgcmVncyk7CiAjZW5kaWYKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKIAogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbTMyci9tbS9mYXVsdC5jIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKaW5kZXggZGMxOGEzMy4uOGQ1ZjU1MSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2ZhdWx0LmMKKysrIGIvYXJjaC9tMzJyL21tL2ZhdWx0LmMKQEAgLTI5OSw3ICsyOTksNyBAQAogICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKHRzay0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdCh0c2spKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9tMzJyL21tL2lvcmVtYXAuYyBiL2FyY2gvbTMyci9tbS9pb3JlbWFwLmMKaW5kZXggYTE1MTg0OS4uNTE1MmM0ZSAxMDA2NDQKLS0tIGEvYXJjaC9tMzJyL21tL2lvcmVtYXAuYworKysgYi9hcmNoL20zMnIvbW0vaW9yZW1hcC5jCkBAIC0yMCw5MiArMjAsOCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KLSNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KLQotc3RhdGljIGlubGluZSB2b2lkCi1yZW1hcF9hcmVhX3B0ZShwdGVfdCAqIHB0ZSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCXVuc2lnbmVkIGxvbmcgcGZuOwotCXBncHJvdF90IHBncHJvdCA9IF9fcGdwcm90KF9QQUdFX0dMT0JBTCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFECi0JICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBfUEFHRV9XUklURSB8IGZsYWdzKTsKLQotCWFkZHJlc3MgJj0gflBNRF9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQTURfU0laRSkKLQkJZW5kID0gUE1EX1NJWkU7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLQlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKLQlkbyB7Ci0JCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKLQkJCXByaW50aygicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBwZ3Byb3QpKTsKLQkJYWRkcmVzcyArPSBQQUdFX1NJWkU7Ci0JCXBmbisrOwotCQlwdGUrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50Ci1yZW1hcF9hcmVhX3BtZChwbWRfdCAqIHBtZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JICAgICAgIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UEdESVJfTUFTSzsKLQllbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQlpZiAoZW5kID4gUEdESVJfU0laRSkKLQkJZW5kID0gUEdESVJfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1yZW1hcF9hcmVhX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsCi0JCSB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaW50IGVycm9yOwotCXBnZF90ICogZGlyOwotCXVuc2lnbmVkIGxvbmcgZW5kID0gYWRkcmVzcyArIHNpemU7Ci0KLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlkaXIgPSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcG1kX3QgKnBtZDsKLQkJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBkaXIsIGFkZHJlc3MpOwotCQllcnJvciA9IC1FTk9NRU07Ci0JCWlmICghcG1kKQotCQkJYnJlYWs7Ci0JCWlmIChyZW1hcF9hcmVhX3BtZChwbWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCi0JCQkJCSBwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpCi0JCQlicmVhazsKLQkJZXJyb3IgPSAwOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Ci0JCWRpcisrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQlmbHVzaF90bGJfYWxsKCk7Ci0JcmV0dXJuIGVycm9yOwotfQogCiAvKgogICogR2VuZXJpYyBtYXBwaW5nIGZ1bmN0aW9uIChub3QgdmlzaWJsZSBvdXRzaWRlKToKQEAgLTEyOSw2ICs0NSw3IEBACiAJdm9pZCBfX2lvbWVtICogYWRkcjsKIAlzdHJ1Y3Qgdm1fc3RydWN0ICogYXJlYTsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCwgbGFzdF9hZGRyOworCXBncHJvdF90IHBncHJvdDsKIAogCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCiAJbGFzdF9hZGRyID0gcGh5c19hZGRyICsgc2l6ZSAtIDE7CkBAIC0xNTcsNiArNzQsOSBAQAogCQkJCXJldHVybiBOVUxMOwogCX0KIAorCXBncHJvdCA9IF9fcGdwcm90KF9QQUdFX0dMT0JBTCB8IF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SRUFECisJCQkgIHwgX1BBR0VfV1JJVEUgfCBmbGFncyk7CisKIAkvKgogCSAqIE1hcHBpbmdzIGhhdmUgdG8gYmUgcGFnZS1hbGlnbmVkCiAJICovCkBAIC0xNzIsNyArOTIsOCBAQAogCQlyZXR1cm4gTlVMTDsKIAlhcmVhLT5waHlzX2FkZHIgPSBwaHlzX2FkZHI7CiAJYWRkciA9ICh2b2lkIF9faW9tZW0gKikgYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZylhZGRyLCBwaHlzX2FkZHIsIHNpemUsIGZsYWdzKSkgeworCWlmIChpb3JlbWFwX3BhZ2VfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpYWRkciwgKHVuc2lnbmVkIGxvbmcpYWRkciArIHNpemUsCisJCQkgICAgICAgcGh5c19hZGRyLCBwZ3Byb3QpKSB7CiAJCXZ1bm1hcCgodm9pZCBfX2ZvcmNlICopIGFkZHIpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL202OGsva2VybmVsL3RpbWUuYyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCmluZGV4IDk4ZTRiMWEuLjZjZmM5ODQgMTAwNjQ0Ci0tLSBhL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4ay9rZXJuZWwvdGltZS5jCkBAIC00MCw3ICs0MCw3IEBACiAgKi8KIHN0YXRpYyBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZHVtbXksIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTk2LDMxICs5NiwyMyBAQAogdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwogCXVuc2lnbmVkIGxvbmcgc2VxOwotCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjLCBsb3N0OworCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwogCXVuc2lnbmVkIGxvbmcgbWF4X250cF90aWNrID0gdGlja191c2VjIC0gdGlja2FkajsKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAKIAkJdXNlYyA9IG1hY2hfZ2V0dGltZW9mZnNldCgpOwotCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAogCQkvKgogCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jawogCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KIAkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpIHsKKwkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpCiAJCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7CiAKLQkJCWlmIChsb3N0KQotCQkJCXVzZWMgKz0gbG9zdCAqIG1heF9udHBfdGljazsKLQkJfQotCQllbHNlIGlmICh1bmxpa2VseShsb3N0KSkKLQkJCXVzZWMgKz0gbG9zdCAqIHRpY2tfdXNlYzsKLQogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgKz0geHRpbWUudHZfbnNlYy8xMDAwOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgc2VxLCBmbGFncykpOwpAQCAtMTQxLDcgKzEzMyw2IEBACiB7CiAJdGltZV90IHd0bV9zZWMsIHNlYyA9IHR2LT50dl9zZWM7CiAJbG9uZyB3dG1fbnNlYywgbnNlYyA9IHR2LT50dl9uc2VjOwotCWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKIAogCWlmICgodW5zaWduZWQgbG9uZyl0di0+dHZfbnNlYyA+PSBOU0VDX1BFUl9TRUMpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTUzLDggKzE0NCw3IEBACiAJICogRGlzY292ZXIgd2hhdCBjb3JyZWN0aW9uIGdldHRpbWVvZmRheQogCSAqIHdvdWxkIGhhdmUgZG9uZSwgYW5kIHRoZW4gdW5kbyBpdCEKIAkgKi8KLQluc2VjIC09IDEwMDAgKiAobWFjaF9nZXR0aW1lb2Zmc2V0KCkgKwotCQkJKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogKDEwMDAwMDAgLyBIWikpOworCW5zZWMgLT0gMTAwMCAqIG1hY2hfZ2V0dGltZW9mZnNldCgpOwogCiAJd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKIAl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwpkaWZmIC0tZ2l0IGEvYXJjaC9tNjhrL21tL2ZhdWx0LmMgYi9hcmNoL202OGsvbW0vZmF1bHQuYwppbmRleCBhZWMxNTI3Li45MTFmMmNlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvbW0vZmF1bHQuYworKysgYi9hcmNoL202OGsvbW0vZmF1bHQuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJCWNhc2UgMToJCS8qIHJlYWQsIHByZXNlbnQgKi8KIAkJCWdvdG8gYWNjX2VycjsKIAkJY2FzZSAwOgkJLyogcmVhZCwgbm90IHByZXNlbnQgKi8KLQkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMpKSkKKwkJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKQogCQkJCWdvdG8gYWNjX2VycjsKIAl9CiAKQEAgLTE4MSw3ICsxODEsNyBAQAogICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jIGIvYXJjaC9tNjhrL3N1bjMvc3VuM2ludHMuYwppbmRleCBmMThiOWQzLi5kYzRlYTdlIDEwMDY0NAotLS0gYS9hcmNoL202OGsvc3VuMy9zdW4zaW50cy5jCisrKyBiL2FyY2gvbTY4ay9zdW4zL3N1bjNpbnRzLmMKQEAgLTY1LDcgKzY1LDcgQEAKICNpZmRlZiBDT05GSUdfU1VOMwogCWludGVyc2lsX2NsZWFyKCk7CiAjZW5kaWYKLSAgICAgICAgZG9fdGltZXIoZnApOworICAgICAgICBkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShmcCkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jIGIvYXJjaC9tNjhrbm9tbXUva2VybmVsL3RpbWUuYwppbmRleCAxZGI5ODcyLi5jNTY2N2JkIDEwMDY0NAotLS0gYS9hcmNoL202OGtub21tdS9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvbTY4a25vbW11L2tlcm5lbC90aW1lLmMKQEAgLTI2LDggKzI2LDYgQEAKIAogI2RlZmluZQlUSUNLX1NJWkUgKHRpY2tfbnNlYyAvIDEwMDApCiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLQogCiBzdGF0aWMgaW5saW5lIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewpAQCAtNTEsNyArNDksNyBAQAogCiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTEyNCwxNSArMTIyLDEyIEBACiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBsb25nIGxvc3QsIHNlcTsKKwl1bnNpZ25lZCBsb25nIHNlcTsKIAl1bnNpZ25lZCBsb25nIHVzZWMsIHNlYzsKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbl9pcnFzYXZlKCZ4dGltZV9sb2NrLCBmbGFncyk7CiAJCXVzZWMgPSBtYWNoX2dldHRpbWVvZmZzZXQgPyBtYWNoX2dldHRpbWVvZmZzZXQoKSA6IDA7Ci0JCWxvc3QgPSBqaWZmaWVzIC0gd2FsbF9qaWZmaWVzOwotCQlpZiAobG9zdCkKLQkJCXVzZWMgKz0gbG9zdCAqICgxMDAwMDAwIC8gSFopOwogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggMzMwZjZhYi4uMzA3NTBjNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTEyNiw3ICsxMjYsNyBAQAogCXNlbGVjdCBJUlFfQ1BVCiAJc2VsZWN0IElSUV9DUFVfUk03SwogCXNlbGVjdCBJUlFfQ1BVX1JNOUsKLQlzZWxlY3QgU0VSSUFMX1JNOTAwMAorCXNlbGVjdCBNSVBTX1JNOTEyMgogCXNlbGVjdCBTWVNfSEFTX0NQVV9STTkwMDAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCkBAIC0yMDMsMjYgKzIwMyw2IEBACiAJICA8aHR0cDovL3d3dy5tYXJ2ZWxsLmNvbS8+LiAgU2F5IFkgaGVyZSBpZiB5b3Ugd2lzaCB0byBidWlsZCBhCiAJICBrZXJuZWwgZm9yIHRoaXMgcGxhdGZvcm0uCiAKLWNvbmZpZyBNSVBTX0VWOTYxMDAKLQlib29sICJHYWxpbGVvIEVWOTYxMDAgRXZhbHVhdGlvbiBib2FyZCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCXNlbGVjdCBETUFfTk9OQ09IRVJFTlQKLQlzZWxlY3QgSFdfSEFTX1BDSQotCXNlbGVjdCBJUlFfQ1BVCi0Jc2VsZWN0IE1JUFNfR1Q5NjEwMAotCXNlbGVjdCBSTTcwMDBfQ1BVX1NDQUNIRQotCXNlbGVjdCBTV0FQX0lPX1NQQUNFCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1I1MDAwCi0Jc2VsZWN0IFNZU19IQVNfQ1BVX1JNNzAwMAotCXNlbGVjdCBTWVNfU1VQUE9SVFNfMzJCSVRfS0VSTkVMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU182NEJJVF9LRVJORUwgaWYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IFNZU19TVVBQT1JUU19CSUdfRU5ESUFOCi0JaGVscAotCSAgVGhpcyBpcyBhbiBldmFsdWF0aW9uIGJvYXJkIGJhc2VkIG9uIHRoZSBHYWxpbGVvIEdULTk2MTAwIExBTi9XQU4KLQkgIGNvbW11bmljYXRpb25zIGNvbnRyb2xsZXJzIGNvbnRhaW5pbmcgYSBNSVBTIFI1MDAwIGNvbXBhdGlibGUgY29yZQotCSAgcnVubmluZyBhdCA4M01Iei4gVGhlaXIgd2Vic2l0ZSBpcyA8aHR0cDovL3d3dy5tYXJ2ZWxsLmNvbS8+LiBTYXkgWQotCSAgaGVyZSBpZiB5b3Ugd2lzaCB0byBidWlsZCBhIGtlcm5lbCBmb3IgdGhpcyBwbGF0Zm9ybS4KLQogY29uZmlnIE1JUFNfSVZSCiAJYm9vbCAiR2xvYmVzcGFuIElWUiBib2FyZCIKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCkBAIC05NzQsNiArOTU0LDEyIEBACiAJYm9vbAogCXNlbGVjdCBIQVNfVFhYOV9TRVJJQUwKIAorY29uZmlnIE1JUFNfUk05MTIyCisJYm9vbAorCXNlbGVjdCBTRVJJQUxfUk05MDAwCisJc2VsZWN0IEdQSV9STTkwMDAKKwlzZWxlY3QgV0RUX1JNOTAwMAorCiBjb25maWcgUENJX01BUlZFTEwKIAlib29sCiAKQEAgLTEwMjQsNiArMTAxMCwxNSBAQAogCWRlcGVuZHMgb24gTUFSS0VJTlMKIAlkZWZhdWx0IHkKIAorY29uZmlnIFNFUklBTF9STTkwMDAKKwlib29sCisKK2NvbmZpZyBHUElfUk05MDAwCisJYm9vbAorCitjb25maWcgV0RUX1JNOTAwMAorCWJvb2wKKwogIwogIyBVbmZvcnR1bmF0ZWx5IG5vdCBhbGwgR1Q2NDEyMCBzeXN0ZW1zIHJ1biB0aGUgY2hpcCBhdCB0aGUgc2FtZSBjbG9jay4KICMgQXMgdGhlIHVzZXIgZm9yIHRoZSBjbG9jayByYXRlIGFuZCB0cnkgdG8gbWluaW1pemUgdGhlIGF2YWlsYWJsZSBvcHRpb25zLgpAQCAtMTA1NCwxMCArMTA0OSw2IEBACiAJZGVwZW5kcyBvbiBNSVBTX1BCMTUwMCB8fCBNSVBTX1BCMTEwMCB8fCBNSVBTX1BCMTAwMAogCWRlZmF1bHQgbgogCi1jb25maWcgTUlQU19HVDk2MTAwCi0JYm9vbAotCXNlbGVjdCBNSVBTX0dUNjQxMjAKLQogY29uZmlnIElUODE3Ml9DSVIKIAlib29sCiAJZGVwZW5kcyBvbiBNSVBTX0lURTgxNzIgfHwgTUlQU19JVlIKQEAgLTE1MjcsNiArMTUxOCw3IEBACiAJc2VsZWN0IENQVV9NSVBTUjJfU1JTCiAJc2VsZWN0IE1JUFNfTVQKIAlzZWxlY3QgU01QCisJc2VsZWN0IFNZU19TVVBQT1JUU19TTVAKIAloZWxwCiAJICBUaGlzIGlzIGEga2VybmVsIG1vZGVsIHdoaWNoIGlzIGtub3duIGEgU01UQyBvciBsYXRlbHkgaGFzIGJlZW4KIAkgIG1hcmtldGVzZWQgaW50byBTTVZQLgpAQCAtMTUzOCw2ICsxNTMwLDcgQEAKIAlzZWxlY3QgQ1BVX01JUFNSMl9TUlMKIAlzZWxlY3QgTUlQU19NVAogCXNlbGVjdCBTTVAKKwlzZWxlY3QgU1lTX1NVUFBPUlRTX1NNUAogCWhlbHAKIAkgIFRoaXMgaXMgYSBrZXJuZWwgbW9kZWwgd2hpY2ggaXMgYWxzbyBrbm93biBhIFZTTVAgb3IgbGF0ZWx5CiAJICBoYXMgYmVlbiBtYXJrZXRlc2VkIGludG8gU01WUC4KQEAgLTE2NDksOSArMTY0Miw3IEBACiAJZGVmYXVsdCB5CiAKIGNvbmZpZyBJUlFfUEVSX0NQVQotCWRlcGVuZHMgb24gU01QCiAJYm9vbAotCWRlZmF1bHQgeQogCiAjCiAjIC0gSGlnaG1lbSBvbmx5IG1ha2VzIHNlbnNlIGZvciB0aGUgMzItYml0IGtlcm5lbC4KQEAgLTE3MTksNiArMTcxMCw3IEBACiBjb25maWcgU01QCiAJYm9vbCAiTXVsdGktUHJvY2Vzc2luZyBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1lTX1NVUFBPUlRTX1NNUAorCXNlbGVjdCBJUlFfUEVSX0NQVQogCWhlbHAKIAkgIFRoaXMgZW5hYmxlcyBzdXBwb3J0IGZvciBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIG9uZSBDUFUuIElmIHlvdSBoYXZlCiAJICBhIHN5c3RlbSB3aXRoIG9ubHkgb25lIENQVSwgbGlrZSBtb3N0IHBlcnNvbmFsIGNvbXB1dGVycywgc2F5IE4uIElmCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvTWFrZWZpbGUgYi9hcmNoL21pcHMvTWFrZWZpbGUKaW5kZXggZDMzM2NlNC4uZTUyMTgyNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL01ha2VmaWxlCisrKyBiL2FyY2gvbWlwcy9NYWtlZmlsZQpAQCAtMjgwLDEzICsyODAsNiBAQAogbG9hZC0kKENPTkZJR19NSVBTX0VWNjQxMjApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAogCiAjCi0jIEdhbGlsZW8gRVY5NjEwMCBCb2FyZAotIwotY29yZS0kKENPTkZJR19NSVBTX0VWOTYxMDApCSs9IGFyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwLwotY2ZsYWdzLSQoQ09ORklHX01JUFNfRVY5NjEwMCkJKz0gLUlpbmNsdWRlL2FzbS1taXBzL21hY2gtZXY5NjEwMAotbG9hZC0kKENPTkZJR19NSVBTX0VWOTYxMDApCSs9IDB4ZmZmZmZmZmY4MDEwMDAwMAotCi0jCiAjIFdpbmQgUml2ZXIgUFBNQyBCb2FyZCAoNEtDICsgR1Q2NDEyMCkKICMKIGNvcmUtJChDT05GSUdfV1JfUFBNQykJCSs9IGFyY2gvbWlwcy9ndDY0MTIwL3dycHBtYy8KQEAgLTMzMCw2ICszMjMsNyBAQAogIyBNSVBTIFNFQUQgYm9hcmQKICMKIGNvcmUtJChDT05GSUdfTUlQU19TRUFEKQkrPSBhcmNoL21pcHMvbWlwcy1ib2FyZHMvc2VhZC8KK2NmbGFncy0kKENPTkZJR19NSVBTX1NFQUQpCSs9IC1JaW5jbHVkZS9hc20tbWlwcy9tYWNoLW1pcHMKIGxvYWQtJChDT05GSUdfTUlQU19TRUFEKQkrPSAweGZmZmZmZmZmODAxMDAwMDAKIAogIwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2F1MTAwMC9jb21tb24vdGltZS5jCmluZGV4IDdmYmVhMWIuLjBhMDY3ZjMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9hdTEwMDAvY29tbW9uL3RpbWUuYworKysgYi9hcmNoL21pcHMvYXUxMDAwL2NvbW1vbi90aW1lLmMKQEAgLTk2LDcgKzk2LDcgQEAKIAkJdGltZXJsbyA9IGNvdW50OwogCiAJCWtzdGF0X3RoaXNfY3B1LmlycXNbaXJxXSsrOwotCQlkb190aW1lcihyZWdzKTsKKwkJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpAQCAtMTM3LDcgKzEzNyw3IEBACiAJfQogCiAJd2hpbGUgKHRpbWVfZWxhcHNlZCA+IDApIHsKLQkJZG9fdGltZXIocmVncyk7CisJCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTE1Niw3ICsxNTYsNyBAQAogCiAJaWYgKGppZmZpZV9kcmlmdCA+PSA5OTkpIHsKIAkJamlmZmllX2RyaWZ0IC09IDk5OTsKLQkJZG9fdGltZXIocmVncyk7IC8qIGluY3JlbWVudCBqaWZmaWVzIGJ5IG9uZSAqLworCQlkb190aW1lcigxKTsgLyogaW5jcmVtZW50IGppZmZpZXMgYnkgb25lICovCiAjaWZuZGVmIENPTkZJR19TTVAKIAkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvTWFrZWZpbGUgYi9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9NYWtlZmlsZQppbmRleCA0YzdkNzYzLi41MWQ2MmJkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvYXUxMDAwL2RiMXgwMC9NYWtlZmlsZQpAQCAtNiw0ICs2LDMgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBBbGNoZW15IFNlbWljb25kdWN0b3IgRGIxeDAwIGJvYXJkLgogCiBsaWIteSA6PSBpbml0Lm8gYm9hcmRfc2V0dXAubyBpcnFtYXAubwotb2JqLSQoQ09ORklHX1dNOTdYWF9DT01PRFVMRSkgKz0gbWlyYWdlX3RzLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL21pcmFnZV90cy5jIGIvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvbWlyYWdlX3RzLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5NDJkY2YuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2F1MTAwMC9kYjF4MDAvbWlyYWdlX3RzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvbWlwcy9hdTEwMDAvZGIxeDAwL21pcmFnZV90cy5jCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHbHVlIGJldHdlZW4gTWlyYWdlIGJvYXJkLXNwZWNpZmljIHRvdWNoc2NyZWVuIHBpZWNlcwotICoJYW5kIGdlbmVyaWMgV29sZnNvbiBDb2RlYyB0b3VjaHNjcmVlbiBzdXBwb3J0LgotICoKLSAqCUJhc2VkIG9uIHBiMTEwMF90cy5jIHVzZWQgaW4gSHlkcm9nZW4gSUkuCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDAzIEVtYmVkZGVkIEVkZ2UsIExMQwotICoJCWRhbkBlbWJlZGRlZGVkZ2UuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YJIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlCUxpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVECSAgYGBBUwlJUycnIEFORCAgIEFOWQlFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLAkgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTwlFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRQkgTElBQkxFIEZPUiBBTlkJICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVECSAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTCU9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLAlPUiBQUk9GSVRTOyBPUglCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCSBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvcG9sbC5oPgotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZWdtZW50Lmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2F1MTAwMC5oPgotCi0vKgotICogIEltcG9ydGVkIGludGVyZmFjZSB0byBXb2xmc29uIENvZGVjIGRyaXZlci4KLSAqLwotZXh0ZXJuIHZvaWQgKndtOTd4eF90c19nZXRfaGFuZGxlKGludCB3aGljaCk7Ci1leHRlcm4gaW50IHdtOTd4eF90c19yZWFkeSh2b2lkKiB0c19oYW5kbGUpOwotZXh0ZXJuIHZvaWQgd205N3h4X3RzX3NldF9jYWwodm9pZCogdHNfaGFuZGxlLCBpbnQgeHNjYWxlLCBpbnQgeHRyYW5zLCBpbnQgeXNjYWxlLCBpbnQgeXRyYW5zKTsKLWV4dGVybiB1MTYgd205N3h4X3RzX2dldF9hYzk3KHZvaWQqIHRzX2hhbmRsZSwgdTggcmVnKTsKLWV4dGVybiB2b2lkIHdtOTd4eF90c19zZXRfYWM5Nyh2b2lkKiB0c19oYW5kbGUsIHU4IHJlZywgdTE2IHZhbCk7Ci1leHRlcm4gaW50IHdtOTd4eF90c19yZWFkX2RhdGEodm9pZCogdHNfaGFuZGxlLCBsb25nKiB4LCBsb25nKiB5LCBsb25nKiBwcmVzc3VyZSk7Ci1leHRlcm4gdm9pZCB3bTk3eHhfdHNfc2VuZF9kYXRhKHZvaWQqIHRzX2hhbmRsZSwgbG9uZyB4LCBsb25nIHksIGxvbmcgeik7Ci0KLWludCB3bTk3eHhfY29tb2R1bGVfcHJlc2VudCA9IDE7Ci0KLQotI2RlZmluZSBUU19OQU1FICJtaXJhZ2VfdHMiCi0KLSNkZWZpbmUgZXJyKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9FUlIgVFNfTkFNRSAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPIFRTX05BTUUgIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKLSNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyBUU19OQU1FICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCi0jZGVmaW5lIERQUklOVEsoZm9ybWF0LCBhcmcuLi4pIHByaW50aygiJXM6ICIgZm9ybWF0ICJcbiIsIF9fRlVOQ1RJT05fXyAsICMjIGFyZykKLQotCi0jZGVmaW5lIFBFTl9ET1dOX0lSUQlBVTEwMDBfR1BJT183Ci0KLXN0YXRpYyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzX3Rhc2sgPSAwOwotc3RhdGljIERFQ0xBUkVfQ09NUExFVElPTih0c19jb21wbGV0ZSk7Ci1zdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQocGVuZG93bl93YWl0KTsKLQotI2lmZGVmIENPTkZJR19XTTk3WFhfRklWRVdJUkVUUwotc3RhdGljIGludCByZWxlYXNlX3ByZXNzdXJlID0gMTsKLSNlbHNlCi1zdGF0aWMgaW50IHJlbGVhc2VfcHJlc3N1cmUgPSA1MDsKLSNlbmRpZgotCi10eXBlZGVmIHN0cnVjdCB7Ci0gICBsb25nIHg7Ci0gICBsb25nIHk7Ci19IERPV05fRVZFTlQ7Ci0KLSNkZWZpbmUgU0FNUExFX1JBVEUJNTAJLyogc2FtcGxlcyBwZXIgc2Vjb25kICovCi0jZGVmaW5lIFBFTl9ERUJPVU5DRQk1CS8qIHNhbXBsZXMgZm9yIHNldHRsaW5nIC0gZm4gb2YgU0FNUExFX1JBVEUgKi8KLSNkZWZpbmUgUEVOX1VQX1RJTUVPVVQJMTAJLyogaW4gc2Vjb25kcyAqLwotI2RlZmluZSBQRU5fVVBfU0VUVExFCTUJLyogc2FtcGxlcyBwZXIgc2Vjb25kICovCi0KLXN0YXRpYyBzdHJ1Y3QgewotCWludCB4c2NhbGU7Ci0JaW50IHh0cmFuczsKLQlpbnQgeXNjYWxlOwotCWludCB5dHJhbnM7Ci19IG1pcmFnZV90c19jYWwgPQotewotI2lmIDAKLQkueHNjYWxlICAgPSA4NCwKLQkueHRyYW5zID0gLTE1NywKLQkueXNjYWxlICAgPSA2NiwKLQkueXRyYW5zID0gLTE1MCwKLSNlbHNlCi0JLnhzY2FsZSAgID0gODQsCi0JLnh0cmFucyA9IC0xNTAsCi0JLnlzY2FsZSAgID0gNjYsCi0JLnl0cmFucyA9IC0xNDYsCi0jZW5kaWYKLX07Ci0KLQotc3RhdGljIHZvaWQgcGVuZG93bl9pcnEoaW50IGlycW5yLCB2b2lkICpkZXZpZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0vL0RQUklOVEsoImdvdCBvbmUgMHgleCIsIGF1X3JlYWRsKFNZU19QSU5TVEFURVJEKSk7Ci0Jd2FrZV91cCgmcGVuZG93bl93YWl0KTsKLX0KLQotc3RhdGljIGludCB0c190aHJlYWQodm9pZCAqaWQpCi17Ci0Jc3RhdGljIGludCBwZW5fd2FzX2Rvd24gPSAwOwotCXN0YXRpYyBET1dOX0VWRU5UIHBlbl94eTsKLQlsb25nIHgsIHksIHo7Ci0Jdm9pZCAqdHM7CS8qIGhhbmRsZSAqLwotCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKLQlpbnQgdGltZW91dCA9IEhaIC8gU0FNUExFX1JBVEU7Ci0KLQl0c190YXNrID0gdHNrOwotCi0JZGFlbW9uaXplKCk7Ci0JdHNrLT50dHkgPSBOVUxMOwotCXRzay0+cG9saWN5ID0gU0NIRURfRklGTzsKLQl0c2stPnJ0X3ByaW9yaXR5ID0gMTsKLQlzdHJjcHkodHNrLT5jb21tLCAidG91Y2hzY3JlZW4iKTsKLQotCS8qIG9ubHkgd2FudCB0byByZWNlaXZlIFNJR0tJTEwgKi8KLQlzcGluX2xvY2tfaXJxKCZ0c2stPnNpZ21hc2tfbG9jayk7Ci0Jc2lnaW5pdHNldGludigmdHNrLT5ibG9ja2VkLCBzaWdtYXNrKFNJR0tJTEwpKTsKLQlyZWNhbGNfc2lncGVuZGluZyh0c2spOwotCXNwaW5fdW5sb2NrX2lycSgmdHNrLT5zaWdtYXNrX2xvY2spOwotCi0JLyogZ2V0IGhhbmRsZSBmb3IgY29kZWMgKi8KLQl0cyA9IHdtOTd4eF90c19nZXRfaGFuZGxlKDApOwotCi0JLyogcHJvY2VlZCBvbmx5IGFmdGVyIGV2ZXJ5Ym9keSBpcyByZWFkeSAqLwotCXdhaXRfZXZlbnRfdGltZW91dChwZW5kb3duX3dhaXQsIHdtOTd4eF90c19yZWFkeSh0cyksIEhaLzQpOwotCi0JLyogYm9hcmQtc3BlY2lmaWMgY2FsaWJyYXRpb24gKi8KLQl3bTk3eHhfdHNfc2V0X2NhbCh0cywKLQkJCW1pcmFnZV90c19jYWwueHNjYWxlLAotCQkJbWlyYWdlX3RzX2NhbC54dHJhbnMsCi0JCQltaXJhZ2VfdHNfY2FsLnlzY2FsZSwKLQkJCW1pcmFnZV90c19jYWwueXRyYW5zKTsKLQotCS8qIHJvdXRlIFdvbGZzb24gcGVuZG93biBpbnRlcnJ1cHRzIHRvIG91ciBHUElPICovCi0JYXVfc3luYygpOwotCXdtOTd4eF90c19zZXRfYWM5Nyh0cywgMHg0Yywgd205N3h4X3RzX2dldF9hYzk3KHRzLCAweDRjKSAmIH4weDAwMDgpOwotCWF1X3N5bmMoKTsKLQl3bTk3eHhfdHNfc2V0X2FjOTcodHMsIDB4NTYsIHdtOTd4eF90c19nZXRfYWM5Nyh0cywgMHg1NikgJiB+MHgwMDA4KTsKLQlhdV9zeW5jKCk7Ci0Jd205N3h4X3RzX3NldF9hYzk3KHRzLCAweDUyLCB3bTk3eHhfdHNfZ2V0X2FjOTcodHMsIDB4NTIpIHwgMHgyMDA4KTsKLQlhdV9zeW5jKCk7Ci0KLQlmb3IgKDs7KSB7Ci0JCWludGVycnVwdGlibGVfc2xlZXBfb25fdGltZW91dCgmcGVuZG93bl93YWl0LCB0aW1lb3V0KTsKLQkJZGlzYWJsZV9pcnEoUEVOX0RPV05fSVJRKTsKLQkJaWYgKHNpZ25hbF9wZW5kaW5nKHRzaykpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogcmVhZCBjb2RlYyAqLwotCQlpZiAoIXdtOTd4eF90c19yZWFkX2RhdGEodHMsICZ4LCAmeSwgJnopKQotCQkJeiA9IDA7CS8qIHRyZWF0IG5vLWRhdGEgYW5kIHBlbi11cCB0aGUgc2FtZSAqLwotCi0JCWlmIChzaWduYWxfcGVuZGluZyh0c2spKSB7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmICh6ID49IHJlbGVhc2VfcHJlc3N1cmUpIHsKLQkJCXkgPSB+eTsJLyogdG9wIHRvIGJvdHRvbSAqLwotCQkJaWYgKHBlbl93YXNfZG93biA+IDEgLyomJiBwZW5fd2FzX2Rvd24gPCBQRU5fREVCT1VOQ0UqLykgey8vVEhYWFgKLQkJCQkvKiBib3VuY2UgPyAqLwotCQkJCXggPSBwZW5feHkueDsKLQkJCQl5ID0gcGVuX3h5Lnk7Ci0JCQkJLS1wZW5fd2FzX2Rvd247Ci0JCQl9IGVsc2UgaWYgKHBlbl93YXNfZG93biA8PSAxKSB7Ci0JCQkJcGVuX3h5LnggPSB4OwotCQkJCXBlbl94eS55ID0geTsKLQkJCQlpZiAocGVuX3dhc19kb3duKQotCQkJCQl3bTk3eHhfdHNfc2VuZF9kYXRhKHRzLCB4LCB5LCB6KTsKLQkJCQlwZW5fd2FzX2Rvd24gPSBQRU5fREVCT1VOQ0U7Ci0JCQl9Ci0JCQkvL3dtOTd4eF90c19zZW5kX2RhdGEodHMsIHgsIHksIHopOwotCQkJdGltZW91dCA9IEhaIC8gU0FNUExFX1JBVEU7Ci0JCX0gZWxzZSB7Ci0JCQlpZiAocGVuX3dhc19kb3duKSB7Ci0JCQkJaWYgKC0tcGVuX3dhc19kb3duKQotCQkJCQl6ID0gcmVsZWFzZV9wcmVzc3VyZTsKLQkJCQllbHNlIC8vVEhYWFgKLQkJCQl3bTk3eHhfdHNfc2VuZF9kYXRhKHRzLCBwZW5feHkueCwgcGVuX3h5LnksIHopOwotCQkJfQotCQkJLyogVGhlIHBlbmRvd24gc2lnbmFsIHRha2VzIHNvbWUgdGltZSB0byBzZXR0bGUgYWZ0ZXIKLQkJCSAqIHJlYWRpbmcgdGhlIHBlbiBwcmVzc3VyZSBzbyB3YWl0IGEgbGl0dGxlCi0JCQkgKiBiZWZvcmUgZW5hYmxpbmcgdGhlIHBlbi4KLQkJCSAqLwotCQkJaWYgKCEgcGVuX3dhc19kb3duKSB7Ci0vLwkJCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJnBlbmRvd25fd2FpdCwgSFogLyBQRU5fVVBfU0VUVExFKTsKLQkJCQl0aW1lb3V0ID0gSFogKiBQRU5fVVBfVElNRU9VVDsKLQkJCX0KLQkJfQotCQllbmFibGVfaXJxKFBFTl9ET1dOX0lSUSk7Ci0JfQotCWVuYWJsZV9pcnEoUEVOX0RPV05fSVJRKTsKLQl0c190YXNrID0gTlVMTDsKLQljb21wbGV0ZSgmdHNfY29tcGxldGUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCB0c19taXJhZ2VfaW5pdCh2b2lkKQotewotCWludCByZXQ7Ci0KLQkvKiBwZW4gZG93biBzaWduYWwgaXMgY29ubmVjdGVkIHRvIEdQSU8gNyAqLwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoUEVOX0RPV05fSVJRLCBwZW5kb3duX2lycSwgMCwgInRzLXBlbmRvd24iLCBOVUxMKTsKLQlpZiAocmV0KSB7Ci0JCWVycigidW5hYmxlIHRvIGdldCBwZW5kb3duIGlycSVkOiBbJWRdIiwgUEVOX0RPV05fSVJRLCByZXQpOwotCQlyZXR1cm4gcmV0OwotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0JcmV0ID0ga2VybmVsX3RocmVhZCh0c190aHJlYWQsIE5VTEwsIENMT05FX0ZTIHwgQ0xPTkVfRklMRVMpOwotCWlmIChyZXQgPCAwKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0JaW5mbygiTWlyYWdlIHRvdWNoc2NyZWVuIElSUSBpbml0aWFsaXplZC4iKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgdHNfbWlyYWdlX2V4aXQodm9pZCkKLXsKLQlpZiAodHNfdGFzaykgewotCQlzZW5kX3NpZyhTSUdLSUxMLCB0c190YXNrLCAxKTsKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmdHNfY29tcGxldGUpOwotCX0KLQotCWZyZWVfaXJxKFBFTl9ET1dOX0lSUSwgTlVMTCk7Ci19Ci0KLW1vZHVsZV9pbml0KHRzX21pcmFnZV9pbml0KTsKLW1vZHVsZV9leGl0KHRzX21pcmFnZV9leGl0KTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jIGIvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2RldmljZS5jCmluZGV4IGJiYjRlYTQuLmNjMWNlNzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9iYXNsZXIvZXhjaXRlL2V4Y2l0ZV9kZXZpY2UuYworKysgYi9hcmNoL21pcHMvYmFzbGVyL2V4Y2l0ZS9leGNpdGVfZGV2aWNlLmMKQEAgLTY4LDcgKzY4LDcgQEAKIAogCiBzdGF0aWMgc3RydWN0IHJlc291cmNlCi0JZXhjaXRlX2N0cl9yZXNvdXJjZSA9IHsKKwlleGNpdGVfY3RyX3Jlc291cmNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gewogCQkubmFtZQkJPSAiR1BJIGNvdW50ZXJzIiwKIAkJLnN0YXJ0CQk9IDAsCiAJCS5lbmQJCT0gNSwKQEAgLTc3LDcgKzc3LDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2dwaXNsaWNlX3Jlc291cmNlID0geworCWV4Y2l0ZV9ncGlzbGljZV9yZXNvdXJjZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHsKIAkJLm5hbWUJCT0gIkdQSSBzbGljZXMiLAogCQkuc3RhcnQJCT0gMCwKIAkJLmVuZAkJPSAxLApAQCAtODYsNyArODYsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfbWRpb19jaGFubmVsX3Jlc291cmNlID0geworCWV4Y2l0ZV9tZGlvX2NoYW5uZWxfcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CiAJCS5uYW1lCQk9ICJNRElPIGNoYW5uZWxzIiwKIAkJLnN0YXJ0CQk9IDAsCiAJCS5lbmQJCT0gMSwKQEAgLTk1LDcgKzk1LDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgPSB7CisJZXhjaXRlX2ZpZm9tZW1fcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CiAJCS5uYW1lCQk9ICJGSUZPIG1lbW9yeSIsCiAJCS5zdGFydAkJPSAwLAogCQkuZW5kCQk9IDc2NywKQEAgLTEwNCw3ICsxMDQsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfc2NyYW1fcmVzb3VyY2UgPSB7CisJZXhjaXRlX3NjcmFtX3Jlc291cmNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gewogCQkubmFtZQkJPSAiU2NyYXRjaCBSQU0iLAogCQkuc3RhcnQJCT0gRVhDSVRFX1BIWVNfU0NSQU0sCiAJCS5lbmQJCT0gRVhDSVRFX1BIWVNfU0NSQU0gKyBFWENJVEVfU0laRV9TQ1JBTSAtIDEsCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJLnNpYmxpbmcJPSBOVUxMLAogCQkuY2hpbGQJCT0gTlVMTAogCX0sCi0JZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgPSB7CisJZXhjaXRlX2ZwZ2FfcmVzb3VyY2UgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgPSB7CiAJCS5uYW1lCQk9ICJTeXN0ZW0gRlBHQSIsCiAJCS5zdGFydAkJPSBFWENJVEVfUEhZU19GUEdBLAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX0ZQR0EgKyBFWENJVEVfU0laRV9GUEdBIC0gMSwKQEAgLTEyMiw3ICsxMjIsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfbmFuZF9yZXNvdXJjZSA9IHsKKwlleGNpdGVfbmFuZF9yZXNvdXJjZSBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSA9IHsKIAkJLm5hbWUJCT0gIk5BTkQgZmxhc2ggY29udHJvbCIsCiAJCS5zdGFydAkJPSBFWENJVEVfUEhZU19OQU5ELAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX05BTkQgKyBFWENJVEVfU0laRV9OQU5EIC0gMSwKQEAgLTEzMSw3ICsxMzEsNyBAQAogCQkuc2libGluZwk9IE5VTEwsCiAJCS5jaGlsZAkJPSBOVUxMCiAJfSwKLQlleGNpdGVfdGl0YW5fcmVzb3VyY2UgPSB7CisJZXhjaXRlX3RpdGFuX3Jlc291cmNlIF9fYXR0cmlidXRlX18oKHVudXNlZCkpID0gewogCQkubmFtZQkJPSAiVElUQU4gcmVnaXN0ZXJzIiwKIAkJLnN0YXJ0CQk9IEVYQ0lURV9QSFlTX1RJVEFOLAogCQkuZW5kCQk9IEVYQ0lURV9QSFlTX1RJVEFOICsgRVhDSVRFX1NJWkVfVElUQU4gLSAxLApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYXRsYXNfZGVmY29uZmlnCmluZGV4IDU0Mjc0MDYuLmQzNzA1MjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2F0bGFzX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9hdGxhc19kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTE5Myw3ICsxMTkyLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvYmlnc3VyX2RlZmNvbmZpZwppbmRleCA4ODdmZDk1Li5lMTJhNDc1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9iaWdzdXJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2JpZ3N1cl9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvY2FwY2VsbGFfZGVmY29uZmlnCmluZGV4IGEwMTM0NGYuLmJmYWRlOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2NhcGNlbGxhX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jYXBjZWxsYV9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2NvYmFsdF9kZWZjb25maWcKaW5kZXggYzk1NjgyNC4uNGJhZjJmZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvY29iYWx0X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9jb2JhbHRfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiBDT05GSUdfTUlQU19DT0JBTFQ9eQogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC04MjgsNyArODI3LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMDAwX2RlZmNvbmZpZwppbmRleCBjMmYzM2QzLi45M2NjYTE1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjEwMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTAwMF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTEwMF9kZWZjb25maWcKaW5kZXggOGM0NGQxNi4uZmZkOTkyNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjExMDBfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kYjEyMDBfZGVmY29uZmlnCmluZGV4IGMxMzc2OGUuLjYzZWFjNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2RiMTIwMF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxMjAwX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTAwX2RlZmNvbmZpZwppbmRleCA4YWVhNzNmLi4yNWEwOTVmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kYjE1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTUwMF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2RiMTU1MF9kZWZjb25maWcKaW5kZXggOTBjY2I3My4uZGRhNDY5YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGIxNTUwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kYjE1NTBfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2RkYjU0NzdfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKaW5kZXggYjU5OGNmMC4uZmNkM2RkMSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZGRiNTQ3N19kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZGVjc3RhdGlvbl9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwppbmRleCA1OTcxNTBiLi44NjgzZTBkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9kZWNzdGF0aW9uX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogQ09ORklHX01BQ0hfREVDU1RBVElPTj15CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2U1NV9kZWZjb25maWcKaW5kZXggZmEyOTk2Yi4uNGFjZTYxYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZTU1X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9lNTVfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjAyIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzIKKyMgVHVlIEp1bCAyNSAyMzoxNTowMyAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMjI3LDcgKzIyNiw2IEBACiAjCiAjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKICMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CiAKICMKICMgUENJIEhvdHBsdWcgU3VwcG9ydApAQCAtMjU0LDcgKzI1Miw2IEBACiAjCiBDT05GSUdfU1RBTkRBTE9ORT15CiBDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15Ci0jIENPTkZJR19GV19MT0FERVIgaXMgbm90IHNldAogIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAogCiAjCkBAIC0yODQsNiArMjgxLDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAKQEAgLTY0Myw2ICs2NDEsNyBAQAogIwogIyBLZXJuZWwgaGFja2luZwogIworQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAogIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAogIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldApAQCAtNjUwLDcgKzY0OSw3IEBACiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAogQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgbWVtPThNIgorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIGlkZTA9MHgxZjAsMHgzZjYsNDAgbWVtPThNIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2VtbWEycmhfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKaW5kZXggMzc1YjJhYy4uNTg0N2M5MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZW1tYTJyaF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY2NDEyMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZwppbmRleCBiMGFmYzExLi5iYzRjNGYxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9ldjY0MTIwX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKIENPTkZJR19NSVBTX0VWNjQxMjA9eQotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvZXY5NjEwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGJkYzEwZi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9ldjk2MTAwX2RlZmNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDg1MCArMCwwIEBACi0jCi0jIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0Ci0jIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMTA6MDQ6MDUgMjAwNgotIwotQ09ORklHX01JUFM9eQotCi0jCi0jIE1hY2hpbmUgc2VsZWN0aW9uCi0jCi0jIENPTkZJR19NSVBTX01UWDEgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19CT1NQT1JVUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1BCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTAwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTEwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTUwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTU1MCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0RCMTIwMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX01JUkFHRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CQVNMRVJfRVhDSVRFIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotQ09ORklHX01JUFNfRVY5NjEwMD15Ci0jIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAotIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xBU0FUIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfQVRMQVMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NQUxUQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NFQUQgaXMgbm90IHNldAotIyBDT05GSUdfV1JfUFBNQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX1NJTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX0pBR1VBUl9BVFggaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1QgaXMgbm90IHNldAotIyBDT05GSUdfTU9NRU5DT19PQ0VMT1RfMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NT01FTkNPX09DRUxPVF9DIGlzIG5vdCBzZXQKLSMgQ09ORklHX01PTUVOQ09fT0NFTE9UX0cgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19YWFMxNTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BOWDg1NTBfVjJQQ0kgaXMgbm90IHNldAotIyBDT05GSUdfUE5YODU1MF9KQlMgaXMgbm90IHNldAotIyBDT05GSUdfRERCNTQ3NyBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQUNIX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19QTUNfWU9TRU1JVEUgaXMgbm90IHNldAotIyBDT05GSUdfUUVNVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19NQVJLRUlOUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TR0lfSVAzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfQklHU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9TV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfU0VOVE9TQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUkhPTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NBUk1FTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfUFRTV0FSTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TSUJZVEVfTElUVExFU1VSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NJQllURV9DUkhJTkUgaXMgbm90IHNldAotIyBDT05GSUdfU0lCWVRFX0NSSE9ORSBpcyBub3Qgc2V0Ci0jIENPTkZJR19TTklfUk0yMDBfUENJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfSk1SMzkyNyBpcyBub3Qgc2V0Ci0jIENPTkZJR19UT1NISUJBX1JCVFg0OTI3IGlzIG5vdCBzZXQKLSMgQ09ORklHX1RPU0hJQkFfUkJUWDQ5MzggaXMgbm90IHNldAotQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQotQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15Ci1DT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKLUNPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15Ci1DT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKLUNPTkZJR19ETUFfTk9OQ09IRVJFTlQ9eQotQ09ORklHX0RNQV9ORUVEX1BDSV9NQVBfU1RBVEU9eQotQ09ORklHX0NQVV9CSUdfRU5ESUFOPXkKLSMgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOIGlzIG5vdCBzZXQKLUNPTkZJR19TWVNfU1VQUE9SVFNfQklHX0VORElBTj15Ci1DT05GSUdfSVJRX0NQVT15Ci1DT05GSUdfTUlQU19HVDY0MTIwPXkKLUNPTkZJR19TV0FQX0lPX1NQQUNFPXkKLUNPTkZJR19NSVBTX0dUOTYxMDA9eQotQ09ORklHX01JUFNfTDFfQ0FDSEVfU0hJRlQ9NQotCi0jCi0jIENQVSBzZWxlY3Rpb24KLSMKLSMgQ09ORklHX0NQVV9NSVBTMzJfUjEgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX01JUFMzMl9SMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfTUlQUzY0X1IxIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9NSVBTNjRfUjIgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IzMDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDM5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1ZSNDFYWCBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjQzMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I0WDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9UWDQ5WFggaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1I1MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9SNTQzMiBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjYwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX05FVkFEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19DUFVfUjgwMDAgaXMgbm90IHNldAotIyBDT05GSUdfQ1BVX1IxMDAwMCBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX1JNNzAwMD15Ci0jIENPTkZJR19DUFVfUk05MDAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NQVV9TQjEgaXMgbm90IHNldAotQ09ORklHX1NZU19IQVNfQ1BVX1I1MDAwPXkKLUNPTkZJR19TWVNfSEFTX0NQVV9STTcwMDA9eQotQ09ORklHX1NZU19TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX1NZU19TVVBQT1JUU182NEJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU18zMkJJVF9LRVJORUw9eQotQ09ORklHX0NQVV9TVVBQT1JUU182NEJJVF9LRVJORUw9eQotCi0jCi0jIEtlcm5lbCB0eXBlCi0jCi1DT05GSUdfMzJCSVQ9eQotIyBDT05GSUdfNjRCSVQgaXMgbm90IHNldAotQ09ORklHX1BBR0VfU0laRV80S0I9eQotIyBDT05GSUdfUEFHRV9TSVpFXzhLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1NJWkVfMTZLQiBpcyBub3Qgc2V0Ci0jIENPTkZJR19QQUdFX1NJWkVfNjRLQiBpcyBub3Qgc2V0Ci1DT05GSUdfQk9BUkRfU0NBQ0hFPXkKLUNPTkZJR19STTcwMDBfQ1BVX1NDQUNIRT15Ci1DT05GSUdfQ1BVX0hBU19QUkVGRVRDSD15Ci1DT05GSUdfTUlQU19NVF9ESVNBQkxFRD15Ci0jIENPTkZJR19NSVBTX01UX1NNVEMgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19NVF9TTVAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19WUEVfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHXzY0QklUX1BIWVNfQUREUiBpcyBub3Qgc2V0Ci1DT05GSUdfQ1BVX0hBU19MTFNDPXkKLUNPTkZJR19DUFVfSEFTX1NZTkM9eQotQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQotQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKLUNPTkZJR19DUFVfU1VQUE9SVFNfSElHSE1FTT15Ci1DT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15Ci1DT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15Ci1DT05GSUdfRkxBVE1FTV9NQU5VQUw9eQotIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKLUNPTkZJR19GTEFUTUVNPXkKLUNPTkZJR19GTEFUX05PREVfTUVNX01BUD15Ci0jIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKLUNPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00Ci0jIENPTkZJR19SRVNPVVJDRVNfNjRCSVQgaXMgbm90IHNldAotIyBDT05GSUdfSFpfNDggaXMgbm90IHNldAotIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKLSMgQ09ORklHX0haXzEyOCBpcyBub3Qgc2V0Ci0jIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAotIyBDT05GSUdfSFpfMjU2IGlzIG5vdCBzZXQKLUNPTkZJR19IWl8xMDAwPXkKLSMgQ09ORklHX0haXzEwMjQgaXMgbm90IHNldAotQ09ORklHX1NZU19TVVBQT1JUU19BUkJJVF9IWj15Ci1DT05GSUdfSFo9MTAwMAotQ09ORklHX1BSRUVNUFRfTk9ORT15Ci0jIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKLUNPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCi0KLSMKLSMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCi0jCi1DT05GSUdfRVhQRVJJTUVOVEFMPXkKLUNPTkZJR19CUk9LRU5fT05fU01QPXkKLUNPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKLQotIwotIyBHZW5lcmFsIHNldHVwCi0jCi1DT05GSUdfTE9DQUxWRVJTSU9OPSIiCi1DT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQotQ09ORklHX1NXQVA9eQotQ09ORklHX1NZU1ZJUEM9eQotIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAotQ09ORklHX1NZU0NUTD15Ci0jIENPTkZJR19BVURJVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0Ci1DT05GSUdfUkVMQVk9eQotQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKLSMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKLUNPTkZJR19FTUJFRERFRD15Ci1DT05GSUdfS0FMTFNZTVM9eQotIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IT1RQTFVHIGlzIG5vdCBzZXQKLUNPTkZJR19QUklOVEs9eQotQ09ORklHX0JVRz15Ci1DT05GSUdfRUxGX0NPUkU9eQotQ09ORklHX0JBU0VfRlVMTD15Ci1DT05GSUdfUlRfTVVURVhFUz15Ci1DT05GSUdfRlVURVg9eQotQ09ORklHX0VQT0xMPXkKLUNPTkZJR19TSE1FTT15Ci1DT05GSUdfU0xBQj15Ci1DT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQotIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0Ci1DT05GSUdfQkFTRV9TTUFMTD0wCi0jIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKLQotIwotIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAotIwotQ09ORklHX01PRFVMRVM9eQotQ09ORklHX01PRFVMRV9VTkxPQUQ9eQotIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0Ci1DT05GSUdfTU9EVkVSU0lPTlM9eQotQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTD15Ci0jIENPTkZJR19LTU9EIGlzIG5vdCBzZXQKLQotIwotIyBCbG9jayBsYXllcgotIwotIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAotIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKLQotIwotIyBJTyBTY2hlZHVsZXJzCi0jCi1DT05GSUdfSU9TQ0hFRF9OT09QPXkKLUNPTkZJR19JT1NDSEVEX0FTPXkKLUNPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKLUNPTkZJR19JT1NDSEVEX0NGUT15Ci1DT05GSUdfREVGQVVMVF9BUz15Ci0jIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0Ci1DT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCi0KLSMKLSMgQnVzIG9wdGlvbnMgKFBDSSwgUENNQ0lBLCBFSVNBLCBJU0EsIFRDKQotIwotQ09ORklHX0hXX0hBU19QQ0k9eQotIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKLUNPTkZJR19NTVU9eQotCi0jCi0jIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgUENJIEhvdHBsdWcgU3VwcG9ydAotIwotCi0jCi0jIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCi0jCi1DT05GSUdfQklORk1UX0VMRj15Ci0jIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0Ci1DT05GSUdfVFJBRF9TSUdOQUxTPXkKLQotIwotIyBOZXR3b3JraW5nCi0jCi1DT05GSUdfTkVUPXkKLQotIwotIyBOZXR3b3JraW5nIG9wdGlvbnMKLSMKLSMgQ09ORklHX05FVERFQlVHIGlzIG5vdCBzZXQKLSMgQ09ORklHX1BBQ0tFVCBpcyBub3Qgc2V0Ci1DT05GSUdfVU5JWD15Ci1DT05GSUdfWEZSTT15Ci1DT05GSUdfWEZSTV9VU0VSPW0KLUNPTkZJR19ORVRfS0VZPXkKLUNPTkZJR19JTkVUPXkKLSMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAotQ09ORklHX0lQX0ZJQl9IQVNIPXkKLUNPTkZJR19JUF9QTlA9eQotIyBDT05GSUdfSVBfUE5QX0RIQ1AgaXMgbm90IHNldAotQ09ORklHX0lQX1BOUF9CT09UUD15Ci0jIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAotIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAotIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAotQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD1tCi1DT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPW0KLUNPTkZJR19JTkVUX0RJQUc9eQotQ09ORklHX0lORVRfVENQX0RJQUc9eQotIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX1RDUF9DT05HX0JJQz15Ci0jIENPTkZJR19JUFY2IGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKLSMgQ09ORklHX0lORVQ2X1RVTk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTkVUV09SS19TRUNNQVJLPXkKLSMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCi0jCi0jIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKLQotIwotIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKLSMKLSMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAotCi0jCi0jIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQotIwotIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19BVE0gaXMgbm90IHNldAotIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAotIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX0xMQzIgaXMgbm90IHNldAotIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1gyNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAotIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKLSMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAotCi0jCi0jIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZwotIwotIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKLQotIwotIyBOZXR3b3JrIHRlc3RpbmcKLSMKLSMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAotIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAotIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CVCBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9ERUJVRyBpcyBub3Qgc2V0Ci1DT05GSUdfSUVFRTgwMjExX0NSWVBUX1dFUD1tCi1DT05GSUdfSUVFRTgwMjExX0NSWVBUX0NDTVA9bQotQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDPW0KLSMgQ09ORklHX0lFRUU4MDIxMV9TT0ZUTUFDX0RFQlVHIGlzIG5vdCBzZXQKLUNPTkZJR19XSVJFTEVTU19FWFQ9eQotCi0jCi0jIERldmljZSBEcml2ZXJzCi0jCi0KLSMKLSMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucwotIwotQ09ORklHX1NUQU5EQUxPTkU9eQotQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQotIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKLQotIwotIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCi0jCi1DT05GSUdfQ09OTkVDVE9SPW0KLQotIwotIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCi0jCi0jIENPTkZJR19NVEQgaXMgbm90IHNldAotCi0jCi0jIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAotIwotIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0Ci0jCi0KLSMKLSMgQmxvY2sgZGV2aWNlcwotIwotIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0Ci1DT05GSUdfQ0RST01fUEtUQ0RWRD1tCi1DT05GSUdfQ0RST01fUEtUQ0RWRF9CVUZGRVJTPTgKLSMgQ09ORklHX0NEUk9NX1BLVENEVkRfV0NBQ0hFIGlzIG5vdCBzZXQKLUNPTkZJR19BVEFfT1ZFUl9FVEg9bQotCi0jCi0jIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKLSMKLSMgQ09ORklHX0lERSBpcyBub3Qgc2V0Ci0KLSMKLSMgU0NTSSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1JBSURfQVRUUlM9bQotIyBDT05GSUdfU0NTSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTXVsdGktZGV2aWNlIHN1cHBvcnQgKFJBSUQgYW5kIExWTSkKLSMKLSMgQ09ORklHX01EIGlzIG5vdCBzZXQKLQotIwotIyBGdXNpb24gTVBUIGRldmljZSBzdXBwb3J0Ci0jCi0jIENPTkZJR19GVVNJT04gaXMgbm90IHNldAotCi0jCi0jIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKLSMKLQotIwotIyBJMk8gZGV2aWNlIHN1cHBvcnQKLSMKLQotIwotIyBOZXR3b3JrIGRldmljZSBzdXBwb3J0Ci0jCi1DT05GSUdfTkVUREVWSUNFUz15Ci0jIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0Ci0jIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19UVU4gaXMgbm90IHNldAotCi0jCi0jIFBIWSBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX1BIWUxJQj1tCi0KLSMKLSMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycwotIwotQ09ORklHX01BUlZFTExfUEhZPW0KLUNPTkZJR19EQVZJQ09NX1BIWT1tCi1DT05GSUdfUVNFTUlfUEhZPW0KLUNPTkZJR19MWFRfUEhZPW0KLUNPTkZJR19DSUNBREFfUEhZPW0KLUNPTkZJR19WSVRFU1NFX1BIWT1tCi1DT05GSUdfU01TQ19QSFk9bQotCi0jCi0jIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQotIwotQ09ORklHX05FVF9FVEhFUk5FVD15Ci0jIENPTkZJR19NSUkgaXMgbm90IHNldAotQ09ORklHX01JUFNfR1Q5NjEwMEVUSD15Ci0jIENPTkZJR19ETTkwMDAgaXMgbm90IHNldAotCi0jCi0jIEV0aGVybmV0ICgxMDAwIE1iaXQpCi0jCi0KLSMKLSMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCi0jCi0KLSMKLSMgVG9rZW4gUmluZyBkZXZpY2VzCi0jCi0KLSMKLSMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCi0jCi0jIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAotCi0jCi0jIFdhbiBpbnRlcmZhY2VzCi0jCi0jIENPTkZJR19XQU4gaXMgbm90IHNldAotIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NMSVAgaXMgbm90IHNldAotIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKLSMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAotIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKLQotIwotIyBJU0ROIHN1YnN5c3RlbQotIwotIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0Ci0KLSMKLSMgVGVsZXBob255IFN1cHBvcnQKLSMKLSMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKLQotIwotIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAotIwotQ09ORklHX0lOUFVUPXkKLQotIwotIyBVc2VybGFuZCBpbnRlcmZhY2VzCi0jCi1DT05GSUdfSU5QVVRfTU9VU0VERVY9eQotQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKLUNPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0Ci1DT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4Ci0jIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAotIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAotCi0jCi0jIElucHV0IERldmljZSBEcml2ZXJzCi0jCi0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0Ci0jIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBJL08gcG9ydHMKLSMKLUNPTkZJR19TRVJJTz15Ci0jIENPTkZJR19TRVJJT19JODA0MiBpcyBub3Qgc2V0Ci1DT05GSUdfU0VSSU9fU0VSUE9SVD15Ci0jIENPTkZJR19TRVJJT19MSUJQUzIgaXMgbm90IHNldAotQ09ORklHX1NFUklPX1JBVz1tCi0jIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0Ci0KLSMKLSMgQ2hhcmFjdGVyIGRldmljZXMKLSMKLUNPTkZJR19WVD15Ci1DT05GSUdfVlRfQ09OU09MRT15Ci1DT05GSUdfSFdfQ09OU09MRT15Ci1DT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HPXkKLSMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0Ci0KLSMKLSMgU2VyaWFsIGRyaXZlcnMKLSMKLUNPTkZJR19TRVJJQUxfODI1MD15Ci1DT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15Ci1DT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9NAotQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9NAotIyBDT05GSUdfU0VSSUFMXzgyNTBfRVhURU5ERUQgaXMgbm90IHNldAotCi0jCi0jIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKLSMKLUNPTkZJR19TRVJJQUxfQ09SRT15Ci1DT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15Ci1DT05GSUdfVU5JWDk4X1BUWVM9eQotQ09ORklHX0xFR0FDWV9QVFlTPXkKLUNPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgotCi0jCi0jIElQTUkKLSMKLSMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0Ci0KLSMKLSMgV2F0Y2hkb2cgQ2FyZHMKLSMKLSMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SVEMgaXMgbm90IHNldAotIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0Ci0jIENPTkZJR19EVExLIGlzIG5vdCBzZXQKLSMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKLQotIwotIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKLSMKLSMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAotCi0jCi0jIFRQTSBkZXZpY2VzCi0jCi0jIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKLSMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKLQotIwotIyBJMkMgc3VwcG9ydAotIwotIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKLQotIwotIyBTUEkgc3VwcG9ydAotIwotIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAotCi0jCi0jIERhbGxhcydzIDEtd2lyZSBidXMKLSMKLSMgQ09ORklHX1cxIGlzIG5vdCBzZXQKLQotIwotIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0Ci0KLSMKLSMgTWlzYyBkZXZpY2VzCi0jCi0KLSMKLSMgTXVsdGltZWRpYSBkZXZpY2VzCi0jCi0jIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAotQ09ORklHX1ZJREVPX1Y0TDI9eQotCi0jCi0jIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKLSMKLSMgQ09ORklHX0RWQiBpcyBub3Qgc2V0Ci0KLSMKLSMgR3JhcGhpY3Mgc3VwcG9ydAotIwotIyBDT05GSUdfRklSTVdBUkVfRURJRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GQiBpcyBub3Qgc2V0Ci0KLSMKLSMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0Ci0jCi0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0Ci1DT05GSUdfRFVNTVlfQ09OU09MRT15Ci0KLSMKLSMgU291bmQKLSMKLSMgQ09ORklHX1NPVU5EIGlzIG5vdCBzZXQKLQotIwotIyBVU0Igc3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRCBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfT0hDSSBpcyBub3Qgc2V0Ci0jIENPTkZJR19VU0JfQVJDSF9IQVNfRUhDSSBpcyBub3Qgc2V0Ci0KLSMKLSMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JwotIwotCi0jCi0jIFVTQiBHYWRnZXQgU3VwcG9ydAotIwotIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0Ci0KLSMKLSMgTU1DL1NEIENhcmQgc3VwcG9ydAotIwotIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKLQotIwotIyBMRUQgZGV2aWNlcwotIwotIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAotCi0jCi0jIExFRCBkcml2ZXJzCi0jCi0KLSMKLSMgTEVEIFRyaWdnZXJzCi0jCi0KLSMKLSMgSW5maW5pQmFuZCBzdXBwb3J0Ci0jCi0KLSMKLSMgRURBQyAtIGVycm9yIGRldGVjdGlvbiBhbmQgcmVwb3J0aW5nIChSQVMpIChFWFBFUklNRU5UQUwpCi0jCi0KLSMKLSMgUmVhbCBUaW1lIENsb2NrCi0jCi0jIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAotCi0jCi0jIERNQSBFbmdpbmUgc3VwcG9ydAotIwotIyBDT05GSUdfRE1BX0VOR0lORSBpcyBub3Qgc2V0Ci0KLSMKLSMgRE1BIENsaWVudHMKLSMKLQotIwotIyBETUEgRGV2aWNlcwotIwotCi0jCi0jIEZpbGUgc3lzdGVtcwotIwotQ09ORklHX0VYVDJfRlM9eQotIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0Ci0jIENPTkZJR19FWFQzX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAotIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKLUNPTkZJR19JTk9USUZZPXkKLUNPTkZJR19JTk9USUZZX1VTRVI9eQotIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAotQ09ORklHX0ROT1RJRlk9eQotIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAotQ09ORklHX0ZVU0VfRlM9bQotCi0jCi0jIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0lTTzk2NjBfRlMgaXMgbm90IHNldAotIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKLQotIwotIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCi0jCi0jIENPTkZJR19NU0RPU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19WRkFUX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAotCi0jCi0jIFBzZXVkbyBmaWxlc3lzdGVtcwotIwotQ09ORklHX1BST0NfRlM9eQotQ09ORklHX1BST0NfS0NPUkU9eQotQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0Ci1DT05GSUdfUkFNRlM9eQotIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKLSMKLSMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ1JBTUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX1ZYRlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAotIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAotCi0jCi0jIE5ldHdvcmsgRmlsZSBTeXN0ZW1zCi0jCi1DT05GSUdfTkZTX0ZTPXkKLSMgQ09ORklHX05GU19WMyBpcyBub3Qgc2V0Ci0jIENPTkZJR19ORlNfVjQgaXMgbm90IHNldAotIyBDT05GSUdfTkZTX0RJUkVDVElPIGlzIG5vdCBzZXQKLSMgQ09ORklHX05GU0QgaXMgbm90IHNldAotQ09ORklHX1JPT1RfTkZTPXkKLUNPTkZJR19MT0NLRD15Ci1DT05GSUdfTkZTX0NPTU1PTj15Ci1DT05GSUdfU1VOUlBDPXkKLSMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0Ci0jIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKLSMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKLSMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0Ci0jIENPTkZJR185UF9GUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUGFydGl0aW9uIFR5cGVzCi0jCi0jIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAotQ09ORklHX01TRE9TX1BBUlRJVElPTj15Ci0KLSMKLSMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKLSMKLSMgQ09ORklHX05MUyBpcyBub3Qgc2V0Ci0KLSMKLSMgUHJvZmlsaW5nIHN1cHBvcnQKLSMKLSMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0Ci0KLSMKLSMgS2VybmVsIGhhY2tpbmcKLSMKLSMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKLSMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKLSMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0Ci1DT05GSUdfTE9HX0JVRl9TSElGVD0xNAotIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAotQ09ORklHX0NST1NTQ09NUElMRT15Ci1DT05GSUdfQ01ETElORT0iIgotCi0jCi0jIFNlY3VyaXR5IG9wdGlvbnMKLSMKLUNPTkZJR19LRVlTPXkKLUNPTkZJR19LRVlTX0RFQlVHX1BST0NfS0VZUz15Ci0jIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0Ci0KLSMKLSMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCi0jCi1DT05GSUdfQ1JZUFRPPXkKLUNPTkZJR19DUllQVE9fSE1BQz15Ci1DT05GSUdfQ1JZUFRPX05VTEw9bQotQ09ORklHX0NSWVBUT19NRDQ9bQotQ09ORklHX0NSWVBUT19NRDU9bQotQ09ORklHX0NSWVBUT19TSEExPW0KLUNPTkZJR19DUllQVE9fU0hBMjU2PW0KLUNPTkZJR19DUllQVE9fU0hBNTEyPW0KLUNPTkZJR19DUllQVE9fV1A1MTI9bQotQ09ORklHX0NSWVBUT19UR1IxOTI9bQotQ09ORklHX0NSWVBUT19ERVM9bQotQ09ORklHX0NSWVBUT19CTE9XRklTSD1tCi1DT05GSUdfQ1JZUFRPX1RXT0ZJU0g9bQotQ09ORklHX0NSWVBUT19TRVJQRU5UPW0KLUNPTkZJR19DUllQVE9fQUVTPW0KLUNPTkZJR19DUllQVE9fQ0FTVDU9bQotQ09ORklHX0NSWVBUT19DQVNUNj1tCi1DT05GSUdfQ1JZUFRPX1RFQT1tCi1DT05GSUdfQ1JZUFRPX0FSQzQ9bQotQ09ORklHX0NSWVBUT19LSEFaQUQ9bQotQ09ORklHX0NSWVBUT19BTlVCSVM9bQotQ09ORklHX0NSWVBUT19ERUZMQVRFPW0KLUNPTkZJR19DUllQVE9fTUlDSEFFTF9NSUM9bQotQ09ORklHX0NSWVBUT19DUkMzMkM9bQotIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAotCi0jCi0jIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCi0jCi0KLSMKLSMgTGlicmFyeSByb3V0aW5lcwotIwotIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKLUNPTkZJR19DUkMxNj1tCi1DT05GSUdfQ1JDMzI9bQotQ09ORklHX0xJQkNSQzMyQz1tCi1DT05GSUdfWkxJQl9JTkZMQVRFPW0KLUNPTkZJR19aTElCX0RFRkxBVEU9bQotQ09ORklHX1BMSVNUPXkKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9leGNpdGVfZGVmY29uZmlnCmluZGV4IDA0NWViZDAuLmViODdjYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2V4Y2l0ZV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvZXhjaXRlX2RlZmNvbmZpZwpAQCAtMjYsNyArMjYsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDIyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCmluZGV4IGVmMTZkMWYuLmNjOWIyNGUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMjJfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTEwMTMsNyArMTAxMiw3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXAyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZwppbmRleCA0YmYxZWU3Li41MDA5MmJhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pcDI3X2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC05MDAsNyArODk5LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9pcDMyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnCmluZGV4IGY4M2RjMDkuLmRlYzJiYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2lwMzJfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9pdDgxNzJfZGVmY29uZmlnCmluZGV4IGE5MWQ3MmEuLjM3ZjlkZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2l0ODE3Ml9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvaXQ4MTcyX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogQ09ORklHX01JUFNfSVRFODE3Mj15CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2l2cl9kZWZjb25maWcKaW5kZXggY2ViYzY3Mi4uMTg4NzRhNCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvaXZyX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9pdnJfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiBDT05GSUdfTUlQU19JVlI9eQogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9qYWd1YXItYXR4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCmluZGV4IDVkOWViMTEuLjlmMWUzMDQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2phZ3Vhci1hdHhfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTczMSw3ICs3MzAsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvam1yMzkyN19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwppbmRleCBiZTQ1YTkwLi5mZGVkM2Y3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9qbXIzOTI3X2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9sYXNhdDIwMF9kZWZjb25maWcKaW5kZXggNjRkYzlmNC4uMzIwYjhjZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbGFzYXQyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL2xhc2F0MjAwX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC05MDUsNyArOTA0LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9tYWx0YV9kZWZjb25maWcKaW5kZXggMjY5MGJhZi4uMGJhMWVmNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWFsdGFfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL21hbHRhX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMjMwLDcgKzEyMjksNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL21pcHNzaW1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKaW5kZXggYzI5ODk3OS4uYWRiZWVhZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvbWlwc3NpbV9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL21wYzMweF9kZWZjb25maWcKaW5kZXggOTM4YjM4YS4uNzlmZDU0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvbXBjMzB4X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9tcGMzMHhfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjE1IDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzIKKyMgVHVlIEp1bCAyNSAyMzoxNjo0NiAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtNzEsNyArNzAsNiBAQAogQ09ORklHX1ZJQ1RPUl9NUEMzMFg9eQogIyBDT05GSUdfWkFPX0NBUENFTExBIGlzIG5vdCBzZXQKIENPTkZJR19QQ0lfVlI0MVhYPXkKLUNPTkZJR19WUkM0MTczPXkKIENPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKIENPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQogQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CkBAIC0xNjgsNiArMTY2LDcgQEAKIENPTkZJR19TWVNWSVBDPXkKICMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CiAjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CiBDT05GSUdfU1lTQ1RMPXkKICMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKICMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKQEAgLTg0MSw3ICs4NDAsNyBAQAogIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKICMgQ09ORklHX1VTQl9MRUQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRLSVQgaXMgbm90IHNldAogIyBDT05GSUdfVVNCX1BISURHRVRTRVJWTyBpcyBub3Qgc2V0CkBAIC05ODIsNyArOTgxLDYgQEAKICMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAogIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NJRlMgaXMgbm90IHNldAotIyBDT05GSUdfQ0lGU19ERUJVRzIgaXMgbm90IHNldAogIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAogIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKQEAgLTEwMDcsNiArMTAwNSw3IEBACiAjCiAjIEtlcm5lbCBoYWNraW5nCiAjCitDT05GSUdfVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVD15CiAjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUdJQ19TWVNSUSBpcyBub3Qgc2V0CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CkBAIC0xMDE0LDcgKzEwMTMsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9Im1lbT0zMk0gY29uc29sZT10dHlWUjAsMTkyMDAiCitDT05GSUdfQ01ETElORT0ibWVtPTMyTSBjb25zb2xlPXR0eVZSMCwxOTIwMCBpZGUwPTB4MTcwLDB4Mzc2LDczIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF8zX2RlZmNvbmZpZwppbmRleCBlYzU3NThmLi40ZDg3ZGEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfM19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90XzNfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9jX2RlZmNvbmZpZwppbmRleCAwZDMzZDg3Li5hN2FjMmIwIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2NfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKQEAgLTc3NCw3ICs3NzMsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZGVmY29uZmlnCmluZGV4IDRiOTk5MTAuLjg1M2U3YmIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC03MjMsNyArNzIyLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9vY2Vsb3RfZ19kZWZjb25maWcKaW5kZXggODI3YjM0NC4uODUyNGVmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3Mvb2NlbG90X2dfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL29jZWxvdF9nX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC03NzcsNyArNzc2LDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxMTAwX2RlZmNvbmZpZwppbmRleCA5ZWQ2MGZlLi4xYTE2ZTkyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9wYjExMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTEwMF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BiMTUwMF9kZWZjb25maWcKaW5kZXggNjc3NDI1NC4uOWVhOGVkZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1MDBfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wYjE1NTBfZGVmY29uZmlnCmluZGV4IDFhZmU1YmYuLmM0YTE1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BiMTU1MF9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcGIxNTUwX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLWpic19kZWZjb25maWcKaW5kZXggYWM2MTZjOC4uMWNiZjI3MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcG54ODU1MC1qYnNfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtamJzX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9wbng4NTUwLXYycGNpX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCmluZGV4IGE4ZWI1MWIuLmJlYzMwYjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3BueDg1NTAtdjJwY2lfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3FlbXVfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKaW5kZXggNmE2M2ExMS4uZjVmNzk5ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvcWVtdV9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtNjg3LDcgKzY4Niw3IEBACiBDT05GSUdfUFJPQ19GUz15CiBDT05GSUdfUFJPQ19LQ09SRT15CiBDT05GSUdfU1lTRlM9eQotIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX1RNUEZTPXkKICMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CiBDT05GSUdfUkFNRlM9eQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvcmJobWE0NTAwX2RlZmNvbmZpZwppbmRleCA2Nzc5ZjQ0Li4yZjU2NTAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9yYmhtYTQ1MDBfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3JiaG1hNDUwMF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvcm0yMDBfZGVmY29uZmlnCmluZGV4IGI3ODI2ZDMuLjRmZWU5MGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3JtMjAwX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9ybTIwMF9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTQ0Miw3ICsxNDQxLDcgQEAKIENPTkZJR19QUk9DX0ZTPXkKIENPTkZJR19QUk9DX0tDT1JFPXkKIENPTkZJR19TWVNGUz15Ci0jIENPTkZJR19UTVBGUyBpcyBub3Qgc2V0CitDT05GSUdfVE1QRlM9eQogIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKIENPTkZJR19SQU1GUz15CiAjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3Mvc2IxMjUwLXN3YXJtX2RlZmNvbmZpZwppbmRleCA2MjVjMWM2Li45MDQxZjA5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zYjEyNTAtc3dhcm1fZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3NiMTI1MC1zd2FybV9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3Mvc2VhZF9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwppbmRleCA0NDAxYjYwLi4wMmFiYjJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy9zZWFkX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI2X2RlZmNvbmZpZwppbmRleCAyYmE0ZTI1Li5jYTNkMGM0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY29uZmlncy90YjAyMjZfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyNl9kZWZjb25maWcKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3RiMDIyOV9kZWZjb25maWcKaW5kZXggZmM4YTQwNy4uNGUyMDA5YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjI5X2RlZmNvbmZpZworKysgYi9hcmNoL21pcHMvY29uZmlncy90YjAyMjlfZGVmY29uZmlnCkBAIC0yNSw3ICsyNSw2IEBACiAjIENPTkZJR19NSVBTX0NPQkFMVCBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0RFQ1NUQVRJT04gaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19FVjY0MTIwIGlzIG5vdCBzZXQKLSMgQ09ORklHX01JUFNfRVY5NjEwMCBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lWUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0lURTgxNzIgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9KQVpaIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy90YjAyODdfZGVmY29uZmlnCmluZGV4IGVmZmNiNjMuLjUzNWE4MTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3RiMDI4N19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3MvdGIwMjg3X2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy93b3JrcGFkX2RlZmNvbmZpZyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCmluZGV4IDQ4OTFkMDIuLjNhM2VmMjAgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3dvcmtwYWRfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LXJjMQotIyBUaHUgSnVsICA2IDEwOjA0OjIxIDIwMDYKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xOC1yYzIKKyMgVHVlIEp1bCAyNSAyMzoxMzowNCAyMDA2CiAjCiBDT05GSUdfTUlQUz15CiAKQEAgLTI1LDcgKzI1LDYgQEAKICMgQ09ORklHX01JUFNfQ09CQUxUIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfREVDU1RBVElPTiBpcyBub3Qgc2V0CiAjIENPTkZJR19NSVBTX0VWNjQxMjAgaXMgbm90IHNldAotIyBDT05GSUdfTUlQU19FVjk2MTAwIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVZSIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfSVRFODE3MiBpcyBub3Qgc2V0CiAjIENPTkZJR19NQUNIX0pBWlogaXMgbm90IHNldApAQCAtMTY2LDYgKzE2NSw3IEBACiBDT05GSUdfU1lTVklQQz15CiAjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogQ09ORklHX1NZU0NUTD15CiAjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CkBAIC0zNzksNiArMzc5LDcgQEAKIENPTkZJR19CTEtfREVWX1JBTT1tCiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX1JBTV9CTE9DS1NJWkU9MTAyNAogIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAogIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CiAjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldApAQCAtODU1LDcgKzg1Niw2IEBACiAjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKLSMgQ09ORklHX0NJRlNfREVCVUcyIGlzIG5vdCBzZXQKICMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CiAjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKICMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CkBAIC04ODAsNiArODgwLDcgQEAKICMKICMgS2VybmVsIGhhY2tpbmcKICMKK0NPTkZJR19UUkFDRV9JUlFGTEFHU19TVVBQT1JUPXkKICMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKICMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKICMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKQEAgLTg4Nyw3ICs4ODgsNyBAQAogQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKICMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKIENPTkZJR19DUk9TU0NPTVBJTEU9eQotQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5VlIwLDE5MjAwIG1lbT0xNk0iCitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlWUjAsMTkyMDAgaWRlMD0weDE3MCwweDM3Niw0OSBtZW09MTZNIgogCiAjCiAjIFNlY3VyaXR5IG9wdGlvbnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy93cnBwbWNfZGVmY29uZmlnCmluZGV4IDNlNGIxNmIuLmU2YjFkZWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jb25maWdzL3dycHBtY19kZWZjb25maWcKKysrIGIvYXJjaC9taXBzL2NvbmZpZ3Mvd3JwcG1jX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcgYi9hcmNoL21pcHMvY29uZmlncy95b3NlbWl0ZV9kZWZjb25maWcKaW5kZXggM2E2OGQ4YS4uMDZhMDcyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2NvbmZpZ3MveW9zZW1pdGVfZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9jb25maWdzL3lvc2VtaXRlX2RlZmNvbmZpZwpAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZGVmY29uZmlnIGIvYXJjaC9taXBzL2RlZmNvbmZpZwppbmRleCBmZmY2ZmNjLi5jYzliMjRlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZGVmY29uZmlnCisrKyBiL2FyY2gvbWlwcy9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CiAjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtcmMxCi0jIFRodSBKdWwgIDYgMDk6NDk6MzMgMjAwNgorIyBUaHUgSnVsICA2IDEwOjA0OjEwIDIwMDYKICMKIENPTkZJR19NSVBTPXkKIApAQCAtMjUsNyArMjUsNiBAQAogIyBDT05GSUdfTUlQU19DT0JBTFQgaXMgbm90IHNldAogIyBDT05GSUdfTUFDSF9ERUNTVEFUSU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX01JUFNfRVY2NDEyMCBpcyBub3Qgc2V0Ci0jIENPTkZJR19NSVBTX0VWOTYxMDAgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVlIgaXMgbm90IHNldAogIyBDT05GSUdfTUlQU19JVEU4MTcyIGlzIG5vdCBzZXQKICMgQ09ORklHX01BQ0hfSkFaWiBpcyBub3Qgc2V0CkBAIC0xMDEzLDcgKzEwMTIsNyBAQAogQ09ORklHX1BST0NfRlM9eQogQ09ORklHX1BST0NfS0NPUkU9eQogQ09ORklHX1NZU0ZTPXkKLSMgQ09ORklHX1RNUEZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CiAjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAogQ09ORklHX1JBTUZTPXkKICMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL01ha2VmaWxlIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNkODY4ZWMuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw5ICswLDAgQEAKLSMKLSMgIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotIyAgQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0jICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBHYWxpbGVvIEVWOTYxMDAgYm9hcmQuCi0jCi0KLW9iai15CQkrPSBpbml0Lm8gaXJxLm8gcHV0cy5vIHJlc2V0Lm8gdGltZS5vIHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2luaXQuYyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL2luaXQuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTAxZmU5Yi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pbml0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlwcG9wb3ZAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqIFRoaXMgZmlsZSB3YXMgZGVyaXZlZCBmcm9tIENhcnN0ZW4gTGFuZ2dhYXJkJ3MKLSAqIGFyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL2dlbmVyaWMuYwotICoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL2Jvb3RpbmZvLmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQotCi0vKiBFbnZpcm9ubWVudCB2YXJpYWJsZSAqLwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JY2hhciAqbmFtZTsKLQljaGFyICp2YWw7Ci19IHRfZW52X3ZhcjsKLQotaW50IHByb21fYXJnYzsKLWNoYXIgKipwcm9tX2FyZ3YsICoqcHJvbV9lbnZwOwotCi1pbnQgaW5pdF9kZWJ1ZyA9IDA7Ci0KLWNoYXIgKiBfX2luaXQgcHJvbV9nZXRjbWRsaW5lKHZvaWQpCi17Ci0JcmV0dXJuICYoYXJjc19jbWRsaW5lWzBdKTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXQgcHJvbV9mcmVlX3Byb21fbWVtb3J5KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgIF9faW5pdCBwcm9tX2luaXRfY21kbGluZSh2b2lkKQotewotCWNoYXIgKmNwOwotCWludCBhY3RyOwotCi0JYWN0ciA9IDE7IC8qIEFsd2F5cyBpZ25vcmUgYXJndlswXSAqLwotCi0JY3AgPSAmKGFyY3NfY21kbGluZVswXSk7Ci0Jd2hpbGUoYWN0ciA8IHByb21fYXJnYykgewotCSAgICAgICAgc3RyY3B5KGNwLCBwcm9tX2FyZ3ZbYWN0cl0pOwotCQljcCArPSBzdHJsZW4ocHJvbV9hcmd2W2FjdHJdKTsKLQkJKmNwKysgPSAnICc7Ci0JCWFjdHIrKzsKLQl9Ci0JaWYgKGNwICE9ICYoYXJjc19jbWRsaW5lWzBdKSkgLyogZ2V0IHJpZCBvZiB0cmFpbGluZyBzcGFjZSAqLwotCQktLWNwOwotCSpjcCA9ICdcMCc7Ci19Ci0KLWNoYXIgKnByb21fZ2V0ZW52KGNoYXIgKmVudm5hbWUpCi17Ci0JLyoKLQkgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBnaXZlbiBlbnZpcm9ubWVudCB2YXJpYWJsZS4KLQkgKi8KLQotCXRfZW52X3ZhciAqZW52ID0gKHRfZW52X3ZhciAqKSBwcm9tX2VudnA7Ci0JaW50IGk7Ci0KLQlpID0gc3RybGVuKGVudm5hbWUpOwotCi0Jd2hpbGUgKGVudi0+bmFtZSkgewotCQlpZiAoc3RybmNtcChlbnZuYW1lLCBlbnYtPm5hbWUsIGkpID09IDApIHsKLQkJCXJldHVybiAoZW52LT52YWwpOwotCQl9Ci0JCWVudisrOwotCX0KLQlyZXR1cm4gKE5VTEwpOwotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgc3RyMmhleG51bSh1bnNpZ25lZCBjaGFyIGMpCi17Ci0JaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKQotCQlyZXR1cm4gYyAtICcwJzsKLQlpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCi0JCXJldHVybiBjIC0gJ2EnICsgMTA7Ci0JcmV0dXJuIDA7CQkvKiBmb28gKi8KLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHN0cjJlYWRkcih1bnNpZ25lZCBjaGFyICplYSwgdW5zaWduZWQgY2hhciAqc3RyKQotewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IDY7IGkrKykgewotCQl1bnNpZ25lZCBjaGFyIG51bTsKLQotCQlpZiAoKCpzdHIgPT0gJy4nKSB8fCAoKnN0ciA9PSAnOicpKQotCQkJc3RyKys7Ci0JCW51bSA9IHN0cjJoZXhudW0oKnN0cisrKSA8PCA0OwotCQludW0gfD0gKHN0cjJoZXhudW0oKnN0cisrKSk7Ci0JCWVhW2ldID0gbnVtOwotCX0KLX0KLQotaW50IGdldF9ldGhlcm5ldF9hZGRyKGNoYXIgKmV0aGVybmV0X2FkZHIpCi17Ci0JY2hhciAqZXRoYWRkcl9zdHI7Ci0KLQlldGhhZGRyX3N0ciA9IHByb21fZ2V0ZW52KCJldGhhZGRyIik7Ci0JaWYgKCFldGhhZGRyX3N0cikgewotCQlwcmludGsoImV0aGFkZHIgbm90IHNldCBpbiBib290IHByb21cbiIpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXN0cjJlYWRkcihldGhlcm5ldF9hZGRyLCBldGhhZGRyX3N0cik7Ci0KLQlpZiAoaW5pdF9kZWJ1ZyA+IDEpIHsKLQkJaW50IGk7Ci0JCXByaW50aygiZ2V0X2V0aGVybmV0X2FkZHI6ICIpOwotCQlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKQotCQkJcHJpbnRrKCIlMDJ4OiIsCi0JCQkgICAgICAgKHVuc2lnbmVkIGNoYXIpICooZXRoZXJuZXRfYWRkciArIGkpKTsKLQkJcHJpbnRrKCIlMDJ4XG4iLCAqKGV0aGVybmV0X2FkZHIgKyBpKSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiR2FsaWxlbyBFVjk2MTAwIjsKLX0KLQotdm9pZCBfX2luaXQgcHJvbV9pbml0KHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqdWFydDsKLQljaGFyIHBwYnVmWzhdOwotCi0JcHJvbV9hcmdjID0gZndfYXJnMDsKLQlwcm9tX2FyZ3YgPSAoY2hhciAqKikgZndfYXJnMTsKLQlwcm9tX2VudnAgPSAoY2hhciAqKikgZndfYXJnMjsKLQotCW1pcHNfbWFjaGdyb3VwID0gTUFDSF9HUk9VUF9HQUxJTEVPOwotCW1pcHNfbWFjaHR5cGUgPSBNQUNIX0VWOTYxMDA7Ci0KLQlwcm9tX2luaXRfY21kbGluZSgpOwotCi0JLyogMzIgTUIgdXBncmFkYWJsZSAqLwotCWFkZF9tZW1vcnlfcmVnaW9uKDAsIDMyIDw8IDIwLCBCT09UX01FTV9SQU0pOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvaXJxLmMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWU1ZDY3Mi4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMjAwMCBNb250YVZpc3RhIFNvZnR3YXJlIEluYy4KLSAqIEF1dGhvcjogTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgotICogICAgICAgICAJcHBvcG92QG12aXN0YS5jb20gb3Igc291cmNlQG12aXN0YS5jb20KLSAqCi0gKiBUaGlzIGZpbGUgd2FzIGRlcml2ZWQgZnJvbSBDYXJzdGVuIExhbmdnYWFyZCdzCi0gKiBhcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMuCi0gKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxhc20vaXJxX2NwdS5oPgotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmZno4KHVuc2lnbmVkIGludCB3b3JkKQotewotCXVuc2lnbmVkIGxvbmcgazsKLQotCWsgPSA3OwotCWlmICh3b3JkICYgMHgwZlVMKSB7IGsgLT0gNDsgIHdvcmQgPDw9IDQ7ICB9Ci0JaWYgKHdvcmQgJiAweDMwVUwpIHsgayAtPSAyOyAgd29yZCA8PD0gMjsgIH0KLQlpZiAod29yZCAmIDB4NDBVTCkgeyBrIC09IDE7IH0KLQotCXJldHVybiBrOwotfQotCi1leHRlcm4gdm9pZCBtaXBzX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci0KLWFzbWxpbmthZ2Ugdm9pZCBldjk2MTAwX2NwdV9pcnEodW5zaWduZWQgaW50IHBlbmRpbmcsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotCWRvX0lSUShmZno4KHBlbmRpbmcgPj4gOCksIHJlZ3MpOwotfQotCi1hc21saW5rYWdlIHZvaWQgcGxhdF9pcnFfZGlzcGF0Y2goc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0JdW5zaWduZWQgaW50IHBlbmRpbmcgPSByZWFkX2MwX2NhdXNlKCkgJiByZWFkX2MwX3N0YXR1cygpICYgU1QwX0lNOwotCi0JaWYgKHBlbmRpbmcgJiBDQVVTRUZfSVA3KQotCQltaXBzX3RpbWVyX2ludGVycnVwdChyZWdzKTsKLQllbHNlIGlmIChwZW5kaW5nKQotCQlldjk2MTAwX2NwdV9pcnEocGVuZGluZywgcmVncyk7Ci0JZWxzZQotCQlzcHVyaW91c19pbnRlcnJ1cHQocmVncyk7Ci19Ci0KLXZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKLXsKLQltaXBzX2NwdV9pcnFfaW5pdCgwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3B1dHMuYyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3B1dHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDlkYzZkMS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9wdXRzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotCi0vKgotICogRGVidWcgcm91dGluZXMgd2hpY2ggZGlyZWN0bHkgYWNjZXNzIHRoZSB1YXJ0LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9ndDY0MTIwLmg+Ci0KLQotLy8jZGVmaW5lIFNFUklBTF9CQVNFICAgIEVWOTYxMDBfVUFSVDBfUkVHU19CQVNFCi0jZGVmaW5lIFNFUklBTF9CQVNFICAgIDB4QkQwMDAwMjAKLSNkZWZpbmUgTlMxNjU1MF9CQVNFICAgU0VSSUFMX0JBU0UKLQotI2RlZmluZSBTRVJBX0NNRCAgICAgICAweDBECi0jZGVmaW5lIFNFUkFfREFUQSAgICAgIDB4MDgKLS8vI2RlZmluZSBTRVJCX0NNRCAgICAgICAweDA1Ci0jZGVmaW5lIFNFUkJfQ01EICAgICAgIDIwCi0jZGVmaW5lIFNFUkJfREFUQSAgICAgIDB4MDAKLSNkZWZpbmUgVFhfQlVTWSAgICAgICAgMHgyMAotCi0jZGVmaW5lIFRJTUVPVVQgICAgMHhmZmZmCi0jdW5kZWYgU0xPV19ET1dOCi0KLXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1sxNl0gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7Ci1zdGF0aWMgdm9sYXRpbGUgdW5zaWduZWQgY2hhciAqY29uc3QgY29tMSA9ICh1bnNpZ25lZCBjaGFyICopIFNFUklBTF9CQVNFOwotCi0KLSNpZmRlZiBTTE9XX0RPV04KLXN0YXRpYyBpbmxpbmUgdm9pZCBzbG93X2Rvd24oKQotewotCWludCBrOwotCWZvciAoayA9IDA7IGsgPCAxMDAwMDsgaysrKTsKLX0KLSNlbHNlCi0jZGVmaW5lIHNsb3dfZG93bigpCi0jZW5kaWYKLQotdm9pZCBwdXRjaChjb25zdCB1bnNpZ25lZCBjaGFyIGMpCi17Ci0JdW5zaWduZWQgY2hhciBjaDsKLQlpbnQgaSA9IDA7Ci0KLQlkbyB7Ci0JCWNoID0gY29tMVtTRVJCX0NNRF07Ci0JCXNsb3dfZG93bigpOwotCQlpKys7Ci0JCWlmIChpID4gVElNRU9VVCkgewotCQkJYnJlYWs7Ci0JCX0KLQl9IHdoaWxlICgwID09IChjaCAmIFRYX0JVU1kpKTsKLQljb20xW1NFUkJfREFUQV0gPSBjOwotfQotCi12b2lkIHB1dGNoYXIoY29uc3QgdW5zaWduZWQgY2hhciBjKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0JZG8gewotCQljaCA9IGNvbTFbU0VSQl9DTURdOwotCQlzbG93X2Rvd24oKTsKLQkJaSsrOwotCQlpZiAoaSA+IFRJTUVPVVQpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAoMCA9PSAoY2ggJiBUWF9CVVNZKSk7Ci0JY29tMVtTRVJCX0RBVEFdID0gYzsKLX0KLQotdm9pZCBwdXRzKHVuc2lnbmVkIGNoYXIgKmNwKQotewotCXVuc2lnbmVkIGNoYXIgY2g7Ci0JaW50IGkgPSAwOwotCi0Jd2hpbGUgKCpjcCkgewotCQlkbyB7Ci0JCQljaCA9IGNvbTFbU0VSQl9DTURdOwotCQkJc2xvd19kb3duKCk7Ci0JCQlpKys7Ci0JCQlpZiAoaSA+IFRJTUVPVVQpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSB3aGlsZSAoMCA9PSAoY2ggJiBUWF9CVVNZKSk7Ci0JCWNvbTFbU0VSQl9EQVRBXSA9ICpjcCsrOwotCX0KLQlwdXRjaCgnXHInKTsKLQlwdXRjaCgnXG4nKTsKLX0KLQotdm9pZCBmcHV0cyh1bnNpZ25lZCBjaGFyICpjcCkKLXsKLQl1bnNpZ25lZCBjaGFyIGNoOwotCWludCBpID0gMDsKLQotCXdoaWxlICgqY3ApIHsKLQotCQlkbyB7Ci0JCQljaCA9IGNvbTFbU0VSQl9DTURdOwotCQkJc2xvd19kb3duKCk7Ci0JCQlpKys7Ci0JCQlpZiAoaSA+IFRJTUVPVVQpIHsKLQkJCQlicmVhazsKLQkJCX0KLQkJfSB3aGlsZSAoMCA9PSAoY2ggJiBUWF9CVVNZKSk7Ci0JCWNvbTFbU0VSQl9EQVRBXSA9ICpjcCsrOwotCX0KLX0KLQotCi12b2lkIHB1dDY0KHVpbnQ2NF90IHVsKQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgY2g7Ci0KLQljbnQgPSAxNjsJCS8qIDE2IG5pYmJsZXMgaW4gYSA2NCBiaXQgbG9uZyAqLwotCXB1dGNoKCcwJyk7Ci0JcHV0Y2goJ3gnKTsKLQlkbyB7Ci0JCWNudC0tOwotCQljaCA9ICh1bnNpZ25lZCBjaGFyKSAodWwgPj4gY250ICogNCkgJiAweDBGOwotCQlwdXRjaChkaWdpdHNbY2hdKTsKLQl9IHdoaWxlIChjbnQgPiAwKTsKLX0KLQotdm9pZCBwdXQzMih1bnNpZ25lZCB1KQotewotCWludCBjbnQ7Ci0JdW5zaWduZWQgY2g7Ci0KLQljbnQgPSA4OwkJLyogOCBuaWJibGVzIGluIGEgMzIgYml0IGxvbmcgKi8KLQlwdXRjaCgnMCcpOwotCXB1dGNoKCd4Jyk7Ci0JZG8gewotCQljbnQtLTsKLQkJY2ggPSAodW5zaWduZWQgY2hhcikgKHUgPj4gY250ICogNCkgJiAweDBGOwotCQlwdXRjaChkaWdpdHNbY2hdKTsKLQl9IHdoaWxlIChjbnQgPiAwKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3Jlc2V0LmMgYi9hcmNoL21pcHMvZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC9yZXNldC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1ZWY5YjdmLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3Jlc2V0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw3MCArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHYWxpbGVvIEVWOTYxMDAgcmVzZXQgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gQ2Fyc3RlbiBMYW5nZ2FhcmQncwotICogYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcmVzZXQuYwotICoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9yZWJvb3QuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLQotc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCk7Ci1zdGF0aWMgdm9pZCBtaXBzX21hY2hpbmVfaGFsdCh2b2lkKTsKLQotc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX3Jlc3RhcnQoY2hhciAqY29tbWFuZCkKLXsKLQlzZXRfYzBfc3RhdHVzKFNUMF9CRVYgfCBTVDBfRVJMKTsKLQljaGFuZ2VfYzBfY29uZmlnKENPTkZfQ01fQ01BU0ssIENPTkZfQ01fVU5DQUNIRUQpOwotCWZsdXNoX2NhY2hlX2FsbCgpOwotCXdyaXRlX2MwX3dpcmVkKDApOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJqclx0JTAiOjoiciIoMHhiZmMwMDAwMCkpOwotCXdoaWxlICgxKTsKLX0KLQotc3RhdGljIHZvaWQgbWlwc19tYWNoaW5lX2hhbHQodm9pZCkKLXsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIllvdSBjYW4gc2FmZWx5IHR1cm4gb2ZmIHRoZSBwb3dlclxuIik7Ci0Jd2hpbGUgKDEpCi0JCV9fYXNtX18oIi5zZXRcdG1pcHMzXG5cdCIKLQkgICAgICAgICAgICAgICAgIndhaXRcblx0IgotCQkJIi5zZXRcdG1pcHMwIik7Ci19Ci0KLXZvaWQgbWlwc19yZWJvb3Rfc2V0dXAodm9pZCkKLXsKLQlfbWFjaGluZV9yZXN0YXJ0ID0gbWlwc19tYWNoaW5lX3Jlc3RhcnQ7Ci0JX21hY2hpbmVfaGFsdCA9IG1pcHNfbWFjaGluZV9oYWx0OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYyBiL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzOWFkNTUuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDE1OSArMCwwIEBACi0vKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHYWxpbGVvIEVWOTYxMDAgc2V0dXAuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gQ2Fyc3RlbiBMYW5nZ2FhcmQncwotICogYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMuCi0gKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci0gKiAgdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCi0gKiAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCi0gKiAgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEICAgYGBBUyAgSVMnJyBBTkQgICBBTlkgIEVYUFJFU1MgT1IgSU1QTElFRAotICogIFdBUlJBTlRJRVMsICAgSU5DTFVESU5HLCBCVVQgTk9UICBMSU1JVEVEICBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgotICogIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTgotICogIE5PICBFVkVOVCAgU0hBTEwgICBUSEUgQVVUSE9SICBCRSAgICBMSUFCTEUgRk9SIEFOWSAgIERJUkVDVCwgSU5ESVJFQ1QsCi0gKiAgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCi0gKiAgTk9UIExJTUlURUQgICBUTywgUFJPQ1VSRU1FTlQgT0YgIFNVQlNUSVRVVEUgR09PRFMgIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCi0gKiAgVVNFLCBEQVRBLCAgT1IgUFJPRklUUzsgT1IgIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCi0gKiAgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiAgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nCi0gKiAgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCi0gKi8KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi0jaW5jbHVkZSA8YXNtL2NwdS5oPgotI2luY2x1ZGUgPGFzbS9ib290aW5mby5oPgotI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLSNpbmNsdWRlIDxhc20vZ3Q2NDEyMC5oPgotI2luY2x1ZGUgPGFzbS9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwaW50Lmg+Ci0KLQotZXh0ZXJuIGNoYXIgKl9faW5pdCBwcm9tX2dldGNtZGxpbmUodm9pZCk7Ci0KLWV4dGVybiB2b2lkIG1pcHNfcmVib290X3NldHVwKHZvaWQpOwotCi11bnNpZ25lZCBjaGFyIG1hY18wXzFbMTJdOwotCi12b2lkIF9faW5pdCBwbGF0X21lbV9zZXR1cCh2b2lkKQotewotCXVuc2lnbmVkIGludCBjb25maWcgPSByZWFkX2MwX2NvbmZpZygpOwotCXVuc2lnbmVkIGludCBzdGF0dXMgPSByZWFkX2MwX3N0YXR1cygpOwotCXVuc2lnbmVkIGludCBpbmZvID0gcmVhZF9jMF9pbmZvKCk7Ci0JdTMyIHRtcDsKLQotCWNoYXIgKmFyZ3B0cjsKLQotCWNsZWFyX2MwX3N0YXR1cyhTVDBfRlIpOwotCi0JaWYgKGNvbmZpZyAmIDB4OCkKLQkJcHJpbnRrKCJTZWNvbmRhcnkgY2FjaGUgaXMgZW5hYmxlZFxuIik7Ci0JZWxzZQotCQlwcmludGsoIlNlY29uZGFyeSBjYWNoZSBpcyBkaXNhYmxlZFxuIik7Ci0KLQlpZiAoc3RhdHVzICYgKDEgPDwgMjcpKQotCQlwcmludGsoIlVzZXItbW9kZSBjYWNoZSBvcHMgZW5hYmxlZFxuIik7Ci0JZWxzZQotCQlwcmludGsoIlVzZXItbW9kZSBjYWNoZSBvcHMgZGlzYWJsZWRcbiIpOwotCi0JcHJpbnRrKCJDUDAgaW5mbyByZWc6ICV4XG4iLCAodW5zaWduZWQpIGluZm8pOwotCWlmIChpbmZvICYgKDEgPDwgMjgpKQotCQlwcmludGsoImJ1cnN0IG1vZGUgU2NhY2hlIFJBTVNcbiIpOwotCWVsc2UKLQkJcHJpbnRrKCJwaXBlbGluZWQgU2NhY2hlIFJBTVNcbiIpOwotCi0JaWYgKGluZm8gJiAweDEpCi0JCXByaW50aygiQXRvbWljIEVuYWJsZSBpcyBzZXRcbiIpOwotCi0JYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0jaWZkZWYgQ09ORklHX1NFUklBTF9DT05TT0xFCi0JaWYgKHN0cnN0cihhcmdwdHIsICJjb25zb2xlPSIpID09IE5VTEwpIHsKLQkJYXJncHRyID0gcHJvbV9nZXRjbWRsaW5lKCk7Ci0JCXN0cmNhdChhcmdwdHIsICIgY29uc29sZT10dHlTMCwxMTUyMDAiKTsKLQl9Ci0jZW5kaWYKLQotCW1pcHNfcmVib290X3NldHVwKCk7Ci0KLQlzZXRfaW9fcG9ydF9iYXNlKEtTRUcxKTsKLQlpb3BvcnRfcmVzb3VyY2Uuc3RhcnQgPSBHVF9QQ0lfSU9fQkFTRTsKLQlpb3BvcnRfcmVzb3VyY2UuZW5kID0gR1RfUENJX0lPX0JBU0UgKyAweDAxZmZmZmZmOwotCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JUk9PVF9ERVYgPSBNS0RFVihSQU1ESVNLX01BSk9SLCAwKTsKLSNlbmRpZgotCi0KLQkvKgotCSAqIFNldHVwIEdUIGNvbnRyb2xsZXIgbWFzdGVyIGJpdCBzbyB3ZSBjYW4gZG8gY29uZmlnIGN5Y2xlcwotCSAqLwotCi0JLyogQ2xlYXIgY2F1c2UgcmVnaXN0ZXIgYml0cyAqLwotCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsIH4oR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9CSVQgfAotCQkJCSAgICAgR1RfSU5UUkNBVVNFX1RBUkFCT1JUMF9CSVQpKTsKLQkvKiBTZXR1cCBhZGRyZXNzICovCi0JR1RfV1JJVEUoR1RfUENJMF9DRkdBRERSX09GUywKLQkJICgwIDw8IEdUX1BDSTBfQ0ZHQUREUl9CVVNOVU1fU0hGKSB8Ci0JCSAoMCA8PCBHVF9QQ0kwX0NGR0FERFJfRlVOQ1ROVU1fU0hGKSB8Ci0JCSAoKFBDSV9DT01NQU5EIC8gNCkgPDwgR1RfUENJMF9DRkdBRERSX1JFR05VTV9TSEYpIHwKLQkJIEdUX1BDSTBfQ0ZHQUREUl9DT05GSUdFTl9CSVQpOwotCi0JdWRlbGF5KDIpOwotCXRtcCA9IEdUX1JFQUQoR1RfUENJMF9DRkdEQVRBX09GUyk7Ci0KLQl0bXAgfD0gKFBDSV9DT01NQU5EX0lPIHwgUENJX0NPTU1BTkRfTUVNT1JZIHwKLQkJUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfU0VSUik7Ci0JR1RfV1JJVEUoR1RfUENJMF9DRkdBRERSX09GUywKLQkJICgwIDw8IEdUX1BDSTBfQ0ZHQUREUl9CVVNOVU1fU0hGKSB8Ci0JCSAoMCA8PCBHVF9QQ0kwX0NGR0FERFJfRlVOQ1ROVU1fU0hGKSB8Ci0JCSAoKFBDSV9DT01NQU5EIC8gNCkgPDwgR1RfUENJMF9DRkdBRERSX1JFR05VTV9TSEYpIHwKLQkJIEdUX1BDSTBfQ0ZHQUREUl9DT05GSUdFTl9CSVQpOwotCXVkZWxheSgyKTsKLQlHVF9XUklURShHVF9QQ0kwX0NGR0RBVEFfT0ZTLCB0bXApOwotCi0JLyogU2V0dXAgYWRkcmVzcyAqLwotCUdUX1dSSVRFKEdUX1BDSTBfQ0ZHQUREUl9PRlMsCi0JCSAoMCA8PCBHVF9QQ0kwX0NGR0FERFJfQlVTTlVNX1NIRikgfAotCQkgKDAgPDwgR1RfUENJMF9DRkdBRERSX0ZVTkNUTlVNX1NIRikgfAotCQkgKChQQ0lfQ09NTUFORCAvIDQpIDw8IEdUX1BDSTBfQ0ZHQUREUl9SRUdOVU1fU0hGKSB8Ci0JCSBHVF9QQ0kwX0NGR0FERFJfQ09ORklHRU5fQklUKTsKLQotCXVkZWxheSgyKTsKLQl0bXAgPSBHVF9SRUFEKEdUX1BDSTBfQ0ZHREFUQV9PRlMpOwotfQotCi11bnNpZ25lZCBzaG9ydCBnZXRfZ3RfZGV2aWQodm9pZCkKLXsKLQl1MzIgZ3RfZGV2aWQ7Ci0KLQkvKiBGaWd1cmUgb3V0IGlmIHRoaXMgaXMgYSBndDk2MTAwIG9yIGd0OTYxMDBBICovCi0JR1RfV1JJVEUoR1RfUENJMF9DRkdBRERSX09GUywKLQkJICgwIDw8IEdUX1BDSTBfQ0ZHQUREUl9CVVNOVU1fU0hGKSB8Ci0JCSAoMCA8PCBHVF9QQ0kwX0NGR0FERFJfRlVOQ1ROVU1fU0hGKSB8Ci0JCSAoKFBDSV9WRU5ET1JfSUQgLyA0KSA8PCBHVF9QQ0kwX0NGR0FERFJfUkVHTlVNX1NIRikgfAotCQkgR1RfUENJMF9DRkdBRERSX0NPTkZJR0VOX0JJVCk7Ci0KLQl1ZGVsYXkoNCk7Ci0JZ3RfZGV2aWQgPSBHVF9SRUFEKEdUX1BDSTBfQ0ZHREFUQV9PRlMpOwotCi0JcmV0dXJuIGd0X2RldmlkID4+IDE2OwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvdGltZS5jIGIvYXJjaC9taXBzL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAvdGltZS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4Y2JlODQyLi4wMDAwMDAwCi0tLSBhL2FyY2gvbWlwcy9nYWxpbGVvLWJvYXJkcy9ldjk2MTAwL3RpbWUuYworKysgL2Rldi9udWxsCkBAIC0xLDg4ICswLDAgQEAKLS8qCi0gKiBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KLSAqCUdhbGlsZW8gRVY5NjEwMCBydGMgcm91dGluZXMuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gQ2Fyc3RlbiBMYW5nZ2FhcmQncwotICogYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3J0Yy5jLgotICoKLSAqIENhcnN0ZW4gTGFuZ2dhYXJkLCBjYXJzdGVubEBtaXBzLmNvbQotICogQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWlwc3JlZ3MuaD4KLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3RpbWUuaD4KLQotCi0jZGVmaW5lIEFMTElOVFMgKElFX0lSUTAgfCBJRV9JUlExIHwgSUVfSVJRMiB8IElFX0lSUTMgfCBJRV9JUlE0IHwgSUVfSVJRNSkKLQotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotdW5zaWduZWQgbG9uZyBtaXNzZWRfaGVhcnRfYmVhdHMgPSAwOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyByNGtfb2Zmc2V0OyAvKiBBbW91bnQgdG8gaW5jcmVtZW50IGNvbXBhcmUgcmVnIGVhY2ggdGltZSAqLwotc3RhdGljIHVuc2lnbmVkIGxvbmcgcjRrX2N1cjsgICAgLyogV2hhdCBjb3VudGVyIHNob3VsZCBiZSBhdCBuZXh0IHRpbWVyIGlycSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgYWNrX3I0a3RpbWVyKHVuc2lnbmVkIGxvbmcgbmV3dmFsKQotewotCXdyaXRlX2MwX2NvbXBhcmUobmV3dmFsKTsKLX0KLQotLyoKLSAqIFRoZXJlIGFyZSBhIGxvdCBvZiBjb25jZXB0dWFsbHkgYnJva2VuIHZlcnNpb25zIG9mIHRoZSBNSVBTIHRpbWVyIGludGVycnVwdAotICogaGFuZGxlciBmbG9hdGluZyBhcm91bmQuICBUaGlzIG9uZSBpcyByYXRoZXIgZGlmZmVyZW50LCBidXQgdGhlIGFsZ29yaXRobQotICogaXMgcHJvYmFibHkgbW9yZSByb2J1c3QuCi0gKi8KLXZvaWQgbWlwc190aW1lcl9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0gICAgICAgIGludCBpcnEgPSA3OyAvKiBGSVggTUUgKi8KLQotCWlmIChyNGtfb2Zmc2V0ID09IDApIHsKLSAgICAgICAgICAgIGdvdG8gbnVsbDsKLSAgICAgICAgfQotCi0JZG8gewotCQlrc3RhdF90aGlzX2NwdS5pcnFzW2lycV0rKzsKLQkJZG9fdGltZXIocmVncyk7Ci0jaWZuZGVmIENPTkZJR19TTVAKLQkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKLSNlbmRpZgotCQlyNGtfY3VyICs9IHI0a19vZmZzZXQ7Ci0JCWFja19yNGt0aW1lcihyNGtfY3VyKTsKLQotCX0gd2hpbGUgKCgodW5zaWduZWQgbG9uZylyZWFkX2MwX2NvdW50KCkKLSAgICAgICAgICAgICAgICAgICAgLSByNGtfY3VyKSA8IDB4N2ZmZmZmZmYpOwotCXJldHVybjsKLQotbnVsbDoKLQlhY2tfcjRrdGltZXIoMCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vdGltZS5jIGIvYXJjaC9taXBzL2d0NjQxMjAvY29tbW9uL3RpbWUuYwppbmRleCBkODM3YjI2Li43ZmVjYTQ5IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvZ3Q2NDEyMC9jb21tb24vdGltZS5jCisrKyBiL2FyY2gvbWlwcy9ndDY0MTIwL2NvbW1vbi90aW1lLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAlpZiAoaXJxX3NyYyAmIDB4MDAwMDA4MDApIHsJLyogQ2hlY2sgZm9yIHRpbWVyIGludGVycnVwdCAqLwogCQloYW5kbGVkID0gMTsKIAkJaXJxX3NyYyAmPSB+MHgwMDAwMDgwMDsKLQkJZG9fdGltZXIocmVncyk7CisJCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMgYi9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCmluZGV4IGFhMmNhYTYuLjlmYmY4NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwpAQCAtMzgsMTUgKzM4LDQwIEBACiAKIHN0YXRpYyB2b2lkIHIzOXh4X3dhaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIGNmZyA9IHJlYWRfYzBfY29uZigpOwotCXdyaXRlX2MwX2NvbmYoY2ZnIHwgVFgzOV9DT05GX0hBTFQpOworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJd3JpdGVfYzBfY29uZihyZWFkX2MwX2NvbmYoKSB8IFRYMzlfQ09ORl9IQUxUKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CiB9CiAKKy8qCisgKiBUaGVyZSBpcyBhIHJhY2Ugd2hlbiBXQUlUIGluc3RydWN0aW9uIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0CisgKiBlbmFibGVkLgorICogQnV0IGl0IGlzIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCB3aGV0ZXIgdGhlIHBpcGVsaWUgcmVzdGFydHMgd2hlbgorICogYSBub24tZW5hYmxlZCBpbnRlcnJ1cHQgaXMgcmVxdWVzdGVkLgorICovCiBzdGF0aWMgdm9pZCByNGtfd2FpdCh2b2lkKQogewotCV9fYXNtX18oIi5zZXRcdG1pcHMzXG5cdCIKLQkJIndhaXRcblx0IgotCQkiLnNldFx0bWlwczAiKTsKKwlfX2FzbV9fKCIJLnNldAltaXBzMwkJCVxuIgorCQkiCXdhaXQJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCVxuIik7Cit9CisKKy8qCisgKiBUaGlzIHZhcmlhbnQgaXMgcHJlZmVyYWJsZSBhcyBpdCBhbGxvd3MgdGVzdGluZyBuZWVkX3Jlc2NoZWQgYW5kIGdvaW5nIHRvCisgKiBzbGVlcCBkZXBlbmRpbmcgb24gdGhlIG91dGNvbWUgYXRvbWljYWxseS4gIFVuZm9ydHVuYXRlbHkgdGhlICJJdCBpcworICogaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IHdoZXRoZXIgdGhlIHBpcGVsaW5lIHJlc3RhcnRzIHdoZW4gYSBub24tZW5hYmxlZAorICogaW50ZXJydXB0IGlzIHJlcXVlc3RlZCIgcmVzdHJpY3Rpb24gaW4gdGhlIE1JUFMzMi9NSVBTNjQgYXJjaGl0ZWN0dXJlIG1ha2VzCisgKiB1c2luZyB0aGlzIHZlcnNpb24gYSBnYW1ibGUuCisgKi8KK3N0YXRpYyB2b2lkIHI0a193YWl0X2lycW9mZih2b2lkKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisJaWYgKCFuZWVkX3Jlc2NoZWQoKSkKKwkJX19hc21fXygiCS5zZXQJbWlwczMJCVxuIgorCQkJIgl3YWl0CQkJXG4iCisJCQkiCS5zZXQJbWlwczAJCVxuIik7CisJbG9jYWxfaXJxX2VuYWJsZSgpOwogfQogCiAvKiBUaGUgQXUxeHh4IHdhaXQgaXMgYXZhaWxhYmxlIG9ubHkgaWYgdXNpbmcgMzJraHogY291bnRlciBvcgpAQCAtNTYsMTcgKzgxLDE3IEBACiBzdGF0aWMgdm9pZCBhdTFrX3dhaXQodm9pZCkKIHsKIAkvKiB1c2luZyB0aGUgd2FpdCBpbnN0cnVjdGlvbiBtYWtlcyBDUDAgY291bnRlciB1bnVzYWJsZSAqLwotCV9fYXNtX18oIi5zZXQgbWlwczNcblx0IgotCQkiY2FjaGUgMHgxNCwgMCglMClcblx0IgotCQkiY2FjaGUgMHgxNCwgMzIoJTApXG5cdCIKLQkJInN5bmNcblx0IgotCQkibm9wXG5cdCIKLQkJIndhaXRcblx0IgotCQkibm9wXG5cdCIKLQkJIm5vcFxuXHQiCi0JCSJub3Bcblx0IgotCQkibm9wXG5cdCIKLQkJIi5zZXQgbWlwczBcblx0IgorCV9fYXNtX18oIgkuc2V0CW1pcHMzCQkJXG4iCisJCSIJY2FjaGUJMHgxNCwgMCglMCkJCVxuIgorCQkiCWNhY2hlCTB4MTQsIDMyKCUwKQkJXG4iCisJCSIJc3luYwkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJd2FpdAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJbm9wCQkJCVxuIgorCQkiCW5vcAkJCQlcbiIKKwkJIglub3AJCQkJXG4iCisJCSIJLnNldAltaXBzMAkJCVxuIgogCQk6IDogInIiIChhdTFrX3dhaXQpKTsKIH0KIApAQCAtMTExLDcgKzEzNiw2IEBACiAJY2FzZSBDUFVfTkVWQURBOgogCWNhc2UgQ1BVX1JNNzAwMDoKIAljYXNlIENQVV9STTkwMDA6Ci0JY2FzZSBDUFVfVFg0OVhYOgogCWNhc2UgQ1BVXzRLQzoKIAljYXNlIENQVV80S0VDOgogCWNhc2UgQ1BVXzRLU0M6CkBAIC0xMjUsNiArMTQ5LDEwIEBACiAJCWNwdV93YWl0ID0gcjRrX3dhaXQ7CiAJCXByaW50aygiIGF2YWlsYWJsZS5cbiIpOwogCQlicmVhazsKKwljYXNlIENQVV9UWDQ5WFg6CisJCWNwdV93YWl0ID0gcjRrX3dhaXRfaXJxb2ZmOworCQlwcmludGsoIiBhdmFpbGFibGUuXG4iKTsKKwkJYnJlYWs7CiAJY2FzZSBDUFVfQVUxMDAwOgogCWNhc2UgQ1BVX0FVMTEwMDoKIAljYXNlIENQVV9BVTE1MDA6CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lyaXhzaWcuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCmluZGV4IDY3NmU4NjguLjIxMzI0ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJpeHNpZy5jCkBAIC0xNyw2ICsxNyw3IEBACiAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CiAKICN1bmRlZiBERUJVR19TSUcKIApAQCAtMTcyLDExICsxNzMsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1hc21saW5rYWdlIGludCBkb19pcml4X3NpZ25hbChzaWdzZXRfdCAqb2xkc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3ZvaWQgZG9faXJpeF9zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IGtfc2lnYWN0aW9uIGthOwogCXNpZ2luZm9fdCBpbmZvOwogCWludCBzaWducjsKKwlzaWdzZXRfdCAqb2xkc2V0OwogCiAJLyoKIAkgKiBXZSB3YW50IHRoZSBjb21tb24gY2FzZSB0byBnbyBmYXN0LCB3aGljaCBpcyB3aHkgd2UgbWF5IGluIGNlcnRhaW4KQEAgLTE4NCwxOSArMTg2LDI4IEBACiAJICogaWYgc28uCiAJICovCiAJaWYgKCF1c2VyX21vZGUocmVncykpCi0JCXJldHVybiAxOworCQlyZXR1cm47CiAKLQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQotCQlnb3RvIG5vX3NpZ25hbDsKLQotCWlmICghb2xkc2V0KQorCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQorCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKKwllbHNlCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCiAJc2lnbnIgPSBnZXRfc2lnbmFsX3RvX2RlbGl2ZXIoJmluZm8sICZrYSwgcmVncywgTlVMTCk7Ci0JaWYgKHNpZ25yID4gMCkKLQkJcmV0dXJuIGhhbmRsZV9zaWduYWwoc2lnbnIsICZpbmZvLCAma2EsIG9sZHNldCwgcmVncyk7CisJaWYgKHNpZ25yID4gMCkgeworCQkvKiBXaGVlISAgQWN0dWFsbHkgZGVsaXZlciB0aGUgc2lnbmFsLiAgKi8KKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZpbmZvLCAma2EsIG9sZHNldCwgcmVncykgPT0gMCkgeworCQkJLyogYSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQ7IHRoZSBzYXZlZAorCQkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKKwkJCSAqIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHNpZ3JldHVybiwgc28gd2UgY2FuIHNpbXBseQorCQkJICogY2xlYXIgdGhlIFRJRl9SRVNUT1JFX1NJR01BU0sgZmxhZyAqLworCQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCX0KIAotbm9fc2lnbmFsOgorCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiBXaG8ncyBjb2RlIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgcmVzdGFydGFibGUgc3lzY2FsbCBjb252ZW50aW9uCiAJICogZGllcyBoZXJlISEhICBUaGUgbGkgaW5zdHJ1Y3Rpb24sIGEgc2luZ2xlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24sCkBAIC0yMDgsOCArMjE5LDIyIEBACiAJCSAgICByZWdzLT5yZWdzWzJdID09IEVSRVNUQVJUTk9JTlRSKSB7CiAJCQlyZWdzLT5jcDBfZXBjIC09IDg7CiAJCX0KKwkJaWYgKHJlZ3MtPnJlZ3NbMl0gPT0gRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSB7CisJCQlyZWdzLT5yZWdzWzJdID0gX19OUl9yZXN0YXJ0X3N5c2NhbGw7CisJCQlyZWdzLT5yZWdzWzddID0gcmVncy0+cmVnc1syNl07CisJCQlyZWdzLT5jcDBfZXBjIC09IDQ7CisJCX0KKwkJcmVncy0+cmVnc1swXSA9IDA7CS8qIERvbid0IGRlYWwgd2l0aCB0aGlzIGFnYWluLiAgKi8KIAl9Ci0JcmV0dXJuIDA7CisKKwkvKgorCSogSWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKKwkqIGJhY2sKKwkqLworCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKSB7CisJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOworCQlzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmN1cnJlbnQtPnNhdmVkX3NpZ21hc2ssIE5VTEwpOworCX0KIH0KIAogYXNtbGlua2FnZSB2b2lkCkBAIC0yOTgsNiArMzIzLDkgQEAKIAlpbnQgX3VudXNlZDBbMl07CiB9OwogCisjZGVmaW5lIFNJR19TRVRNQVNLMzIJMjU2CS8qIEdvb2RpZSBmcm9tIFNHSSBmb3IgQlNEIGNvbXBhdGliaWxpdHk6CisJCQkJICAgc2V0IG9ubHkgdGhlIGxvdyAzMiBiaXQgb2YgdGhlIHNpZ3NldC4gICovCisKICNpZmRlZiBERUJVR19TSUcKIHN0YXRpYyBpbmxpbmUgdm9pZCBkdW1wX3NpZ2FjdF9pcml4NShzdHJ1Y3Qgc2lnYWN0X2lyaXg1ICpwKQogewpAQCAtNDEzLDcgKzQ0MSw3IEBACiAKIGFzbWxpbmthZ2UgaW50IGlyaXhfc2lnc3VzcGVuZChzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7CisJc2lnc2V0X3QgbmV3c2V0OwogCXNpZ3NldF90IF9fdXNlciAqdXNldDsKIAogCXVzZXQgPSAoc2lnc2V0X3QgX191c2VyICopIHJlZ3MtPnJlZ3NbNF07CkBAIC00MjIsMTggKzQ1MCwxNSBAQAogCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOwogCiAJc3Bpbl9sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7Ci0Jc2F2ZXNldCA9IGN1cnJlbnQtPmJsb2NrZWQ7CisJY3VycmVudC0+c2F2ZWRfc2lnbWFzayA9IGN1cnJlbnQtPmJsb2NrZWQ7CiAJY3VycmVudC0+YmxvY2tlZCA9IG5ld3NldDsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlyZWdzLT5yZWdzWzJdID0gLUVJTlRSOwotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoZG9faXJpeF9zaWduYWwoJnNhdmVzZXQsIHJlZ3MpKQotCQkJcmV0dXJuIC1FSU5UUjsKLQl9CisJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7CisJc2NoZWR1bGUoKTsKKwlzZXRfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJcmV0dXJuIC1FUkVTVEFSVE5PSEFORDsKIH0KIAogLyogaGF0ZSBoYXRlIGhhdGUuLi4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKaW5kZXggNDUwYWM1OS4uNDNiMTE2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9saW51eDMyLmMKQEAgLTk5MSw3ICs5OTEsNyBAQAogCXVuc2lnbmVkIGludCBfX3VudXNlZFs0XTsKIH07CiAKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCisjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCiAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9zeXNjdGwoc3RydWN0IHN5c2N0bF9hcmdzMzIgX191c2VyICphcmdzKQogewpAQCAtMTAzMiw3ICsxMDMyLDcgQEAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLSNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisjZW5kaWYgLyogQ09ORklHX1NZU0NUTF9TWVNDQUxMICovCiAKIGFzbWxpbmthZ2UgbG9uZyBzeXMzMl9uZXd1bmFtZShzdHJ1Y3QgbmV3X3V0c25hbWUgX191c2VyICogbmFtZSkKIHsKQEAgLTEyOTYsOSArMTI5NiwzIEBACiAJcmV0dXJuIGRvX2ZvcmsoY2xvbmVfZmxhZ3MsIG5ld3NwLCAmcmVncywgMCwKIAkgICAgICAgICAgICAgICBwYXJlbnRfdGlkcHRyLCBjaGlsZF90aWRwdHIpOwogfQotCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIHN5c19zZXRfdGhyZWFkX2FyZWEodTMyIGFkZHIpOwotYXNtbGlua2FnZSB2b2lkIHN5czMyX3NldF90aHJlYWRfYXJlYSh1MzIgYWRkcikKLXsKLQlzeXNfc2V0X3RocmVhZF9hcmVhKEFBKGFkZHIpKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvcHJvY2Vzcy5jIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggN2FiNjdmNy4uMjYxM2EwZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTI3MywxMDQgKzI3MywxMDcgQEAKIAlyZXR1cm4gZG9fZm9yayhmbGFncyB8IENMT05FX1ZNIHwgQ0xPTkVfVU5UUkFDRUQsIDAsICZyZWdzLCAwLCBOVUxMLCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8gewotCXZvaWQgKmZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBmdW5jX3NpemU7Ci0JaW50IGZyYW1lX3NpemU7Ci0JaW50IHBjX29mZnNldDsKLX0gKnNjaGVkdWxlX2ZyYW1lLCBtZmluZm9bNjRdOwotc3RhdGljIGludCBtZmluZm9fbnVtOworLyoKKyAqCisgKi8KK3N0cnVjdCBtaXBzX2ZyYW1lX2luZm8geworCXZvaWQJCSpmdW5jOworCXVuc2lnbmVkIGxvbmcJZnVuY19zaXplOworCWludAkJZnJhbWVfc2l6ZTsKKwlpbnQJCXBjX29mZnNldDsKK307CiAKLXN0YXRpYyBpbnQgX19pbml0IGdldF9mcmFtZV9pbmZvKHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8gKmluZm8pCitzdGF0aWMgaW5saW5lIGludCBpc19yYV9zYXZlX2lucyh1bmlvbiBtaXBzX2luc3RydWN0aW9uICppcCkKIHsKLQlpbnQgaTsKLQl2b2lkICpmdW5jID0gaW5mby0+ZnVuYzsKLQl1bmlvbiBtaXBzX2luc3RydWN0aW9uICppcCA9ICh1bmlvbiBtaXBzX2luc3RydWN0aW9uICopZnVuYzsKLQlpbmZvLT5wY19vZmZzZXQgPSAtMTsKLQlpbmZvLT5mcmFtZV9zaXplID0gMDsKLQlmb3IgKGkgPSAwOyBpIDwgMTI4OyBpKyssIGlwKyspIHsKLQkJLyogaWYgamFsLCBqYWxyLCBqciwgc3RvcC4gKi8KLQkJaWYgKGlwLT5qX2Zvcm1hdC5vcGNvZGUgPT0gamFsX29wIHx8Ci0JCSAgICAoaXAtPnJfZm9ybWF0Lm9wY29kZSA9PSBzcGVjX29wICYmCi0JCSAgICAgKGlwLT5yX2Zvcm1hdC5mdW5jID09IGphbHJfb3AgfHwKLQkJICAgICAgaXAtPnJfZm9ybWF0LmZ1bmMgPT0ganJfb3ApKSkKLQkJCWJyZWFrOworCS8qIHN3IC8gc2QgJHJhLCBvZmZzZXQoJHNwKSAqLworCXJldHVybiAoaXAtPmlfZm9ybWF0Lm9wY29kZSA9PSBzd19vcCB8fCBpcC0+aV9mb3JtYXQub3Bjb2RlID09IHNkX29wKSAmJgorCQlpcC0+aV9mb3JtYXQucnMgPT0gMjkgJiYKKwkJaXAtPmlfZm9ybWF0LnJ0ID09IDMxOworfQogCi0JCWlmIChpbmZvLT5mdW5jX3NpemUgJiYgaSA+PSBpbmZvLT5mdW5jX3NpemUgLyA0KQotCQkJYnJlYWs7Ci0JCWlmICgKLSNpZmRlZiBDT05GSUdfMzJCSVQKLQkJICAgIGlwLT5pX2Zvcm1hdC5vcGNvZGUgPT0gYWRkaXVfb3AgJiYKLSNlbmRpZgotI2lmZGVmIENPTkZJR182NEJJVAotCQkgICAgaXAtPmlfZm9ybWF0Lm9wY29kZSA9PSBkYWRkaXVfb3AgJiYKLSNlbmRpZgotCQkgICAgaXAtPmlfZm9ybWF0LnJzID09IDI5ICYmCi0JCSAgICBpcC0+aV9mb3JtYXQucnQgPT0gMjkpIHsKLQkJCS8qIGFkZGl1L2RhZGRpdSBzcCxzcCwtaW1tICovCi0JCQlpZiAoaW5mby0+ZnJhbWVfc2l6ZSkKLQkJCQljb250aW51ZTsKLQkJCWluZm8tPmZyYW1lX3NpemUgPSAtIGlwLT5pX2Zvcm1hdC5zaW1tZWRpYXRlOwotCQl9CitzdGF0aWMgaW5saW5lIGludCBpc19qYWxfamFscl9qcl9pbnModW5pb24gbWlwc19pbnN0cnVjdGlvbiAqaXApCit7CisJaWYgKGlwLT5qX2Zvcm1hdC5vcGNvZGUgPT0gamFsX29wKQorCQlyZXR1cm4gMTsKKwlpZiAoaXAtPnJfZm9ybWF0Lm9wY29kZSAhPSBzcGVjX29wKQorCQlyZXR1cm4gMDsKKwlyZXR1cm4gaXAtPnJfZm9ybWF0LmZ1bmMgPT0gamFscl9vcCB8fCBpcC0+cl9mb3JtYXQuZnVuYyA9PSBqcl9vcDsKK30KIAotCQlpZiAoCi0jaWZkZWYgQ09ORklHXzMyQklUCi0JCSAgICBpcC0+aV9mb3JtYXQub3Bjb2RlID09IHN3X29wICYmCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJICAgIGlwLT5pX2Zvcm1hdC5vcGNvZGUgPT0gc2Rfb3AgJiYKLSNlbmRpZgotCQkgICAgaXAtPmlfZm9ybWF0LnJzID09IDI5ICYmCi0JCSAgICBpcC0+aV9mb3JtYXQucnQgPT0gMzEpIHsKLQkJCS8qIHN3IC8gc2QgJHJhLCBvZmZzZXQoJHNwKSAqLwotCQkJaWYgKGluZm8tPnBjX29mZnNldCAhPSAtMSkKLQkJCQljb250aW51ZTsKLQkJCWluZm8tPnBjX29mZnNldCA9Ci0JCQkJaXAtPmlfZm9ybWF0LnNpbW1lZGlhdGUgLyBzaXplb2YobG9uZyk7Ci0JCX0KLQl9Ci0JaWYgKGluZm8tPnBjX29mZnNldCA9PSAtMSB8fCBpbmZvLT5mcmFtZV9zaXplID09IDApIHsKLQkJaWYgKGZ1bmMgPT0gc2NoZWR1bGUpCi0JCQlwcmludGsoIkNhbid0IGFuYWx5emUgcHJvbG9ndWUgY29kZSBhdCAlcFxuIiwgZnVuYyk7Ci0JCWluZm8tPnBjX29mZnNldCA9IC0xOwotCQlpbmZvLT5mcmFtZV9zaXplID0gMDsKLQl9Ci0KK3N0YXRpYyBpbmxpbmUgaW50IGlzX3NwX21vdmVfaW5zKHVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gKmlwKQoreworCS8qIGFkZGl1L2RhZGRpdSBzcCxzcCwtaW1tICovCisJaWYgKGlwLT5pX2Zvcm1hdC5ycyAhPSAyOSB8fCBpcC0+aV9mb3JtYXQucnQgIT0gMjkpCisJCXJldHVybiAwOworCWlmIChpcC0+aV9mb3JtYXQub3Bjb2RlID09IGFkZGl1X29wIHx8IGlwLT5pX2Zvcm1hdC5vcGNvZGUgPT0gZGFkZGl1X29wKQorCQlyZXR1cm4gMTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBnZXRfZnJhbWVfaW5mbyhzdHJ1Y3QgbWlwc19mcmFtZV9pbmZvICppbmZvKQoreworCXVuaW9uIG1pcHNfaW5zdHJ1Y3Rpb24gKmlwID0gaW5mby0+ZnVuYzsKKwl1bnNpZ25lZCBtYXhfaW5zbnMgPSBpbmZvLT5mdW5jX3NpemUgLyBzaXplb2YodW5pb24gbWlwc19pbnN0cnVjdGlvbik7CisJdW5zaWduZWQgaTsKKworCWluZm8tPnBjX29mZnNldCA9IC0xOworCWluZm8tPmZyYW1lX3NpemUgPSAwOworCisJaWYgKCFpcCkKKwkJZ290byBlcnI7CisKKwlpZiAobWF4X2luc25zID09IDApCisJCW1heF9pbnNucyA9IDEyOFU7CS8qIHVua25vd24gZnVuY3Rpb24gc2l6ZSAqLworCW1heF9pbnNucyA9IG1pbigxMjhVLCBtYXhfaW5zbnMpOworCisJZm9yIChpID0gMDsgaSA8IG1heF9pbnNuczsgaSsrLCBpcCsrKSB7CisKKwkJaWYgKGlzX2phbF9qYWxyX2pyX2lucyhpcCkpCisJCQlicmVhazsKKwkJaWYgKCFpbmZvLT5mcmFtZV9zaXplKSB7CisJCQlpZiAoaXNfc3BfbW92ZV9pbnMoaXApKQorCQkJCWluZm8tPmZyYW1lX3NpemUgPSAtIGlwLT5pX2Zvcm1hdC5zaW1tZWRpYXRlOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGluZm8tPnBjX29mZnNldCA9PSAtMSAmJiBpc19yYV9zYXZlX2lucyhpcCkpIHsKKwkJCWluZm8tPnBjX29mZnNldCA9CisJCQkJaXAtPmlfZm9ybWF0LnNpbW1lZGlhdGUgLyBzaXplb2YobG9uZyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoaW5mby0+ZnJhbWVfc2l6ZSAmJiBpbmZvLT5wY19vZmZzZXQgPj0gMCkgLyogbmVzdGVkICovCisJCXJldHVybiAwOworCWlmIChpbmZvLT5wY19vZmZzZXQgPCAwKSAvKiBsZWFmICovCisJCXJldHVybiAxOworCS8qIHByb2xvZ3VlIHNlZW1zIGJvZ2d1cy4uLiAqLworZXJyOgorCXJldHVybiAtMTsKK30KKworc3RhdGljIHN0cnVjdCBtaXBzX2ZyYW1lX2luZm8gc2NoZWR1bGVfbWZpIF9fcmVhZF9tb3N0bHk7CisKIHN0YXRpYyBpbnQgX19pbml0IGZyYW1lX2luZm9faW5pdCh2b2lkKQogewotCWludCBpOworCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7CiAjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJdW5zaWduZWQgbG9uZyBvZnM7CiAJY2hhciAqbW9kbmFtZTsKIAljaGFyIG5hbWVidWZbS1NZTV9OQU1FX0xFTiArIDFdOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemUsIG9mczsKLQlleHRlcm4gY2hhciBfX3NjaGVkX3RleHRfc3RhcnRbXSwgX19zY2hlZF90ZXh0X2VuZFtdOwotCWV4dGVybiBjaGFyIF9fbG9ja190ZXh0X3N0YXJ0W10sIF9fbG9ja190ZXh0X2VuZFtdOwogCi0Jc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX3NjaGVkX3RleHRfc3RhcnQ7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobWZpbmZvKTsgaSsrKSB7Ci0JCWlmIChzdGFydCA9PSAodW5zaWduZWQgbG9uZylzY2hlZHVsZSkKLQkJCXNjaGVkdWxlX2ZyYW1lID0gJm1maW5mb1tpXTsKLQkJaWYgKCFrYWxsc3ltc19sb29rdXAoc3RhcnQsICZzaXplLCAmb2ZzLCAmbW9kbmFtZSwgbmFtZWJ1ZikpCi0JCQlicmVhazsKLQkJbWZpbmZvW2ldLmZ1bmMgPSAodm9pZCAqKShzdGFydCArIG9mcyk7Ci0JCW1maW5mb1tpXS5mdW5jX3NpemUgPSBzaXplOwotCQlzdGFydCArPSBzaXplIC0gb2ZzOwotCQlpZiAoc3RhcnQgPj0gKHVuc2lnbmVkIGxvbmcpX19sb2NrX3RleHRfZW5kKQotCQkJYnJlYWs7Ci0JCWlmIChzdGFydCA9PSAodW5zaWduZWQgbG9uZylfX3NjaGVkX3RleHRfZW5kKQotCQkJc3RhcnQgPSAodW5zaWduZWQgbG9uZylfX2xvY2tfdGV4dF9zdGFydDsKLQl9Ci0jZWxzZQotCW1maW5mb1swXS5mdW5jID0gc2NoZWR1bGU7Ci0Jc2NoZWR1bGVfZnJhbWUgPSAmbWZpbmZvWzBdOworCWthbGxzeW1zX2xvb2t1cCgodW5zaWduZWQgbG9uZylzY2hlZHVsZSwgJnNpemUsICZvZnMsICZtb2RuYW1lLCBuYW1lYnVmKTsKICNlbmRpZgotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG1maW5mbykgJiYgbWZpbmZvW2ldLmZ1bmM7IGkrKykKLQkJZ2V0X2ZyYW1lX2luZm8oJm1maW5mb1tpXSk7CisJc2NoZWR1bGVfbWZpLmZ1bmMgPSBzY2hlZHVsZTsKKwlzY2hlZHVsZV9tZmkuZnVuY19zaXplID0gc2l6ZTsKIAotCW1maW5mb19udW0gPSBpOworCWdldF9mcmFtZV9pbmZvKCZzY2hlZHVsZV9tZmkpOworCisJLyoKKwkgKiBXaXRob3V0IHNjaGVkdWxlKCkgZnJhbWUgaW5mbywgcmVzdWx0IGdpdmVuIGJ5CisJICogdGhyZWFkX3NhdmVkX3BjKCkgYW5kIGdldF93Y2hhbigpIGFyZSBub3QgcmVsaWFibGUuCisJICovCisJaWYgKHNjaGVkdWxlX21maS5wY19vZmZzZXQgPCAwKQorCQlwcmludGsoIkNhbid0IGFuYWx5emUgc2NoZWR1bGUoKSBwcm9sb2d1ZSBhdCAlcFxuIiwgc2NoZWR1bGUpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM4Niw1NCArMzg5LDg2IEBACiAJLyogTmV3IGJvcm4gcHJvY2Vzc2VzIGFyZSBhIHNwZWNpYWwgY2FzZSAqLwogCWlmICh0LT5yZWczMSA9PSAodW5zaWduZWQgbG9uZykgcmV0X2Zyb21fZm9yaykKIAkJcmV0dXJuIHQtPnJlZzMxOwotCi0JaWYgKCFzY2hlZHVsZV9mcmFtZSB8fCBzY2hlZHVsZV9mcmFtZS0+cGNfb2Zmc2V0IDwgMCkKKwlpZiAoc2NoZWR1bGVfbWZpLnBjX29mZnNldCA8IDApCiAJCXJldHVybiAwOwotCXJldHVybiAoKHVuc2lnbmVkIGxvbmcgKil0LT5yZWcyOSlbc2NoZWR1bGVfZnJhbWUtPnBjX29mZnNldF07CisJcmV0dXJuICgodW5zaWduZWQgbG9uZyAqKXQtPnJlZzI5KVtzY2hlZHVsZV9tZmkucGNfb2Zmc2V0XTsKIH0KIAotLyogZ2V0X3djaGFuIC0gYSBtYWludGVuYW5jZSBuaWdodG1hcmVeV15XcGFpbiBpbiB0aGUgYXNzIC4uLiAgKi8KLXVuc2lnbmVkIGxvbmcgZ2V0X3djaGFuKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKKworI2lmZGVmIENPTkZJR19LQUxMU1lNUworLyogdXNlZCBieSBzaG93X2JhY2t0cmFjZSgpICovCit1bnNpZ25lZCBsb25nIHVud2luZF9zdGFjayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnNwLAorCQkJICAgdW5zaWduZWQgbG9uZyBwYywgdW5zaWduZWQgbG9uZyByYSkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YWNrX3BhZ2U7Ci0JdW5zaWduZWQgbG9uZyBwYzsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQl1bnNpZ25lZCBsb25nIGZyYW1lOwotI2VuZGlmCisJc3RydWN0IG1pcHNfZnJhbWVfaW5mbyBpbmZvOworCWNoYXIgKm1vZG5hbWU7CisJY2hhciBuYW1lYnVmW0tTWU1fTkFNRV9MRU4gKyAxXTsKKwl1bnNpZ25lZCBsb25nIHNpemUsIG9mczsKKwlpbnQgbGVhZjsKIAotCWlmICghcCB8fCBwID09IGN1cnJlbnQgfHwgcC0+c3RhdGUgPT0gVEFTS19SVU5OSU5HKQorCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UodGFzayk7CisJaWYgKCFzdGFja19wYWdlKQogCQlyZXR1cm4gMDsKIAotCXN0YWNrX3BhZ2UgPSAodW5zaWduZWQgbG9uZyl0YXNrX3N0YWNrX3BhZ2UocCk7Ci0JaWYgKCFzdGFja19wYWdlIHx8ICFtZmluZm9fbnVtKQorCWlmICgha2FsbHN5bXNfbG9va3VwKHBjLCAmc2l6ZSwgJm9mcywgJm1vZG5hbWUsIG5hbWVidWYpKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIFJldHVybiByYSBpZiBhbiBleGNlcHRpb24gb2NjdXJlZCBhdCB0aGUgZmlyc3QgaW5zdHJ1Y3Rpb24KKwkgKi8KKwlpZiAodW5saWtlbHkob2ZzID09IDApKQorCQlyZXR1cm4gcmE7CisKKwlpbmZvLmZ1bmMgPSAodm9pZCAqKShwYyAtIG9mcyk7CisJaW5mby5mdW5jX3NpemUgPSBvZnM7CS8qIGFuYWx5emUgZnJvbSBzdGFydCB0byBvZnMgKi8KKwlsZWFmID0gZ2V0X2ZyYW1lX2luZm8oJmluZm8pOworCWlmIChsZWFmIDwgMCkKIAkJcmV0dXJuIDA7CiAKLQlwYyA9IHRocmVhZF9zYXZlZF9wYyhwKTsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQlpZiAoIWluX3NjaGVkX2Z1bmN0aW9ucyhwYykpCi0JCXJldHVybiBwYzsKKwlpZiAoKnNwIDwgc3RhY2tfcGFnZSB8fAorCSAgICAqc3AgKyBpbmZvLmZyYW1lX3NpemUgPiBzdGFja19wYWdlICsgVEhSRUFEX1NJWkUgLSAzMikKKwkJcmV0dXJuIDA7CiAKLQlmcmFtZSA9IHAtPnRocmVhZC5yZWcyOSArIHNjaGVkdWxlX2ZyYW1lLT5mcmFtZV9zaXplOwotCWRvIHsKLQkJaW50IGk7CisJaWYgKGxlYWYpCisJCS8qCisJCSAqIEZvciBzb21lIGV4dHJlbWUgY2FzZXMsIGdldF9mcmFtZV9pbmZvKCkgY2FuCisJCSAqIGNvbnNpZGVyIHdyb25nbHkgYSBuZXN0ZWQgZnVuY3Rpb24gYXMgYSBsZWFmCisJCSAqIG9uZS4gSW4gdGhhdCBjYXNlcyBhdm9pZCB0byByZXR1cm4gYWx3YXlzIHRoZQorCQkgKiBzYW1lIHZhbHVlLgorCQkgKi8KKwkJcGMgPSBwYyAhPSByYSA/IHJhIDogMDsKKwllbHNlCisJCXBjID0gKCh1bnNpZ25lZCBsb25nICopKCpzcCkpW2luZm8ucGNfb2Zmc2V0XTsKIAotCQlpZiAoZnJhbWUgPCBzdGFja19wYWdlIHx8IGZyYW1lID4gc3RhY2tfcGFnZSArIFRIUkVBRF9TSVpFIC0gMzIpCi0JCQlyZXR1cm4gMDsKLQotCQlmb3IgKGkgPSBtZmluZm9fbnVtIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChwYyA+PSAodW5zaWduZWQgbG9uZykgbWZpbmZvW2ldLmZ1bmMpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJaWYgKGkgPCAwKQotCQkJYnJlYWs7Ci0KLQkJcGMgPSAoKHVuc2lnbmVkIGxvbmcgKilmcmFtZSlbbWZpbmZvW2ldLnBjX29mZnNldF07Ci0JCWlmICghbWZpbmZvW2ldLmZyYW1lX3NpemUpCi0JCQlicmVhazsKLQkJZnJhbWUgKz0gbWZpbmZvW2ldLmZyYW1lX3NpemU7Ci0JfSB3aGlsZSAoaW5fc2NoZWRfZnVuY3Rpb25zKHBjKSk7CisJKnNwICs9IGluZm8uZnJhbWVfc2l6ZTsKKwlyZXR1cm4gX19rZXJuZWxfdGV4dF9hZGRyZXNzKHBjKSA/IHBjIDogMDsKK30KICNlbmRpZgogCisvKgorICogZ2V0X3djaGFuIC0gYSBtYWludGVuYW5jZSBuaWdodG1hcmVeV15XcGFpbiBpbiB0aGUgYXNzIC4uLgorICovCit1bnNpZ25lZCBsb25nIGdldF93Y2hhbihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCit7CisJdW5zaWduZWQgbG9uZyBwYyA9IDA7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJdW5zaWduZWQgbG9uZyBzcDsKKyNlbmRpZgorCisJaWYgKCF0YXNrIHx8IHRhc2sgPT0gY3VycmVudCB8fCB0YXNrLT5zdGF0ZSA9PSBUQVNLX1JVTk5JTkcpCisJCWdvdG8gb3V0OworCWlmICghdGFza19zdGFja19wYWdlKHRhc2spKQorCQlnb3RvIG91dDsKKworCXBjID0gdGhyZWFkX3NhdmVkX3BjKHRhc2spOworCisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJc3AgPSB0YXNrLT50aHJlYWQucmVnMjkgKyBzY2hlZHVsZV9tZmkuZnJhbWVfc2l6ZTsKKworCXdoaWxlIChpbl9zY2hlZF9mdW5jdGlvbnMocGMpKQorCQlwYyA9IHVud2luZF9zdGFjayh0YXNrLCAmc3AsIHBjLCAwKTsKKyNlbmRpZgorCitvdXQ6CiAJcmV0dXJuIHBjOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMgYi9hcmNoL21pcHMva2VybmVsL3NjYWxsMzItbzMyLlMKaW5kZXggYmExYmNkOC4uZTcxNzg1MSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDMyLW8zMi5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGwzMi1vMzIuUwpAQCAtNjYyLDYgKzY2Miw4IEBACiAJc3lzCXN5c190ZWUJCQk0CiAJc3lzCXN5c192bXNwbGljZQkJNAogCXN5cwlzeXNfbW92ZV9wYWdlcwkJNgorCXN5cwlzeXNfc2V0X3JvYnVzdF9saXN0CTIKKwlzeXMJc3lzX2dldF9yb2J1c3RfbGlzdAkzCiAJLmVuZG0KIAogCS8qIFdlIHByZS1jb21wdXRlIHRoZSBudW1iZXIgb2YgX2luc3RydWN0aW9uXyBieXRlcyBuZWVkZWQgdG8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LTY0LlMKaW5kZXggOTM5ZTE3MmQuLjRjMjJkMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC02NC5TCkBAIC00NjYsMyArNDY2LDUgQEAKIAlQVFIJc3lzX3RlZQkJCQkvKiA1MjY1ICovCiAJUFRSCXN5c192bXNwbGljZQogCVBUUglzeXNfbW92ZV9wYWdlcworCVBUUglzeXNfc2V0X3JvYnVzdF9saXN0CisJUFRSCXN5c19nZXRfcm9idXN0X2xpc3QKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1uMzIuUwppbmRleCA5OGFiYmM1Li5mMjVjMmEyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbjMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW4zMi5TCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAlQVFIJc3lzX2NhcHNldAogCVBUUglzeXMzMl9ydF9zaWdwZW5kaW5nCQkvKiA2MTI1ICovCiAJUFRSCWNvbXBhdF9zeXNfcnRfc2lndGltZWR3YWl0Ci0JUFRSCXN5c19ydF9zaWdxdWV1ZWluZm8KKwlQVFIJc3lzMzJfcnRfc2lncXVldWVpbmZvCiAJUFRSCXN5c24zMl9ydF9zaWdzdXNwZW5kCiAJUFRSCXN5czMyX3NpZ2FsdHN0YWNrCiAJUFRSCWNvbXBhdF9zeXNfdXRpbWUJCS8qIDYxMzAgKi8KQEAgLTM5MCw1ICszOTAsNyBAQAogCVBUUglzeXNfc3BsaWNlCiAJUFRSCXN5c19zeW5jX2ZpbGVfcmFuZ2UKIAlQVFIJc3lzX3RlZQotCVBUUglzeXNfdm1zcGxpY2UJCQkvKiA2MjcxICovCisJUFRSCXN5c192bXNwbGljZQkJCS8qIDYyNzAgKi8KIAlQVFIJc3lzX21vdmVfcGFnZXMKKwlQVFIJY29tcGF0X3N5c19zZXRfcm9idXN0X2xpc3QKKwlQVFIJY29tcGF0X3N5c19nZXRfcm9idXN0X2xpc3QKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUyBiL2FyY2gvbWlwcy9rZXJuZWwvc2NhbGw2NC1vMzIuUwppbmRleCA1MDVjOWVlLi4yODhlZTRhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NjYWxsNjQtbzMyLlMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zY2FsbDY0LW8zMi5TCkBAIC00OTgsNyArNDk4LDcgQEAKIAlQVFIJc3lzX21rbm9kYXQJCQkvKiA0MjkwICovCiAJUFRSCXN5c19mY2hvd25hdAogCVBUUgljb21wYXRfc3lzX2Z1dGltZXNhdAotCVBUUgljb21wYXRfc3lzX25ld2ZzdGF0YXQKKwlQVFIJc3lzX25ld2ZzdGF0YXQKIAlQVFIJc3lzX3VubGlua2F0CiAJUFRSCXN5c19yZW5hbWVhdAkJCS8qIDQyOTUgKi8KIAlQVFIJc3lzX2xpbmthdApAQCAtNTE0LDQgKzUxNCw2IEBACiAJUFRSCXN5c190ZWUKIAlQVFIJc3lzX3Ztc3BsaWNlCiAJUFRSCWNvbXBhdF9zeXNfbW92ZV9wYWdlcworCVBUUgljb21wYXRfc3lzX3NldF9yb2J1c3RfbGlzdAorCVBUUgljb21wYXRfc3lzX2dldF9yb2J1c3RfbGlzdAkvKiA0MzEwICovCiAJLnNpemUJc3lzX2NhbGxfdGFibGUsLi1zeXNfY2FsbF90YWJsZQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCmluZGV4IDhjMmI1OTYuLmZkYmI1MDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKQEAgLTEwLDI5ICsxMCwxNSBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqIENvcHlyaWdodCAoQykgMjAwMCAyMDAxLCAyMDAyICBNYWNpZWogVy4gUm96eWNraQogICovCi0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC91c2VyLmg+Ci0jaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgotI2luY2x1ZGUgPGxpbnV4L2Eub3V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2NyZWVuX2luZm8uaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdHJkLmg+Ci0jaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KLSNpbmNsdWRlIDxsaW51eC9rZGV2X3QuaD4KICNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KICNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW16b25lLmg+CiAjaW5jbHVkZSA8bGludXgvcGZuLmg+CiAKICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CkBAIC05Niw2ICs4MiwxMiBAQAogCWludCB4ID0gYm9vdF9tZW1fbWFwLm5yX21hcDsKIAlzdHJ1Y3QgYm9vdF9tZW1fbWFwX2VudHJ5ICpwcmV2ID0gYm9vdF9tZW1fbWFwLm1hcCArIHggLSAxOwogCisJLyogU2FuaXR5IGNoZWNrICovCisJaWYgKHN0YXJ0ICsgc2l6ZSA8IHN0YXJ0KSB7CisJCXByaW50aygiVHJ5aW5nIHRvIGFkZCBhbiBpbnZhbGlkIG1lbW9yeSByZWdpb24sIHNraXBwZWRcbiIpOworCQlyZXR1cm47CisJfQorCiAJLyoKIAkgKiBUcnkgdG8gbWVyZ2Ugd2l0aCBwcmV2aW91cyBlbnRyeSBpZiBhbnkuICBUaGlzIGlzIGZhciBsZXNzIHRoYW4KIAkgKiBwZXJmZWN0IGJ1dCBpcyBzdWZmaWNpZW50IGZvciBtb3N0IHJlYWwgd29ybGQgY2FzZXMuCkBAIC0xNDMsMTY3ICsxMzUsMTMyIEBACiAJfQogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcGFyc2VfY21kbGluZV9lYXJseSh2b2lkKQorLyoKKyAqIE1hbmFnZSBpbml0cmQKKyAqLworI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAorCitzdGF0aWMgaW50IF9faW5pdCByZF9zdGFydF9lYXJseShjaGFyICpwKQogewotCWNoYXIgYyA9ICcgJywgKnRvID0gY29tbWFuZF9saW5lLCAqZnJvbSA9IHNhdmVkX2NvbW1hbmRfbGluZTsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X2F0LCBtZW1fc2l6ZTsKLQlpbnQgbGVuID0gMDsKLQlpbnQgdXNlcm1lbSA9IDA7Ci0KLQlwcmludGsoIkRldGVybWluZWQgcGh5c2ljYWwgUkFNIG1hcDpcbiIpOwotCXByaW50X21lbW9yeV9tYXAoKTsKLQotCWZvciAoOzspIHsKLQkJLyoKLQkJICogIm1lbT1YWFhba0ttTV0iIGRlZmluZXMgYSBtZW1vcnkgcmVnaW9uIGZyb20KLQkJICogMCB0byA8WFhYPiwgb3ZlcnJpZGluZyB0aGUgZGV0ZXJtaW5lZCBzaXplLgotCQkgKiAibWVtPVhYWFtLa21NXUBZWVlbS2ttTV0iIGRlZmluZXMgYSBtZW1vcnkgcmVnaW9uIGZyb20KLQkJICogPFlZWT4gdG8gPFlZWT4rPFhYWD4sIG92ZXJyaWRpbmcgdGhlIGRldGVybWluZWQgc2l6ZS4KLQkJICovCi0JCWlmIChjID09ICcgJyAmJiAhbWVtY21wKGZyb20sICJtZW09IiwgNCkpIHsKLQkJCWlmICh0byAhPSBjb21tYW5kX2xpbmUpCi0JCQkJdG8tLTsKLQkJCS8qCi0JCQkgKiBJZiBhIHVzZXIgc3BlY2lmaWVzIG1lbW9yeSBzaXplLCB3ZQotCQkJICogYmxvdyBhd2F5IGFueSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZAotCQkJICogc2l6ZS4KLQkJCSAqLwotCQkJaWYgKHVzZXJtZW0gPT0gMCkgewotCQkJCWJvb3RfbWVtX21hcC5ucl9tYXAgPSAwOwotCQkJCXVzZXJtZW0gPSAxOwotCQkJfQotCQkJbWVtX3NpemUgPSBtZW1wYXJzZShmcm9tICsgNCwgJmZyb20pOwotCQkJaWYgKCpmcm9tID09ICdAJykKLQkJCQlzdGFydF9hdCA9IG1lbXBhcnNlKGZyb20gKyAxLCAmZnJvbSk7Ci0JCQllbHNlCi0JCQkJc3RhcnRfYXQgPSAwOwotCQkJYWRkX21lbW9yeV9yZWdpb24oc3RhcnRfYXQsIG1lbV9zaXplLCBCT09UX01FTV9SQU0pOwotCQl9Ci0JCWMgPSAqKGZyb20rKyk7Ci0JCWlmICghYykKLQkJCWJyZWFrOwotCQlpZiAoQ0xfU0laRSA8PSArK2xlbikKLQkJCWJyZWFrOwotCQkqKHRvKyspID0gYzsKLQl9Ci0JKnRvID0gJ1wwJzsKLQotCWlmICh1c2VybWVtKSB7Ci0JCXByaW50aygiVXNlci1kZWZpbmVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKLQkJcHJpbnRfbWVtb3J5X21hcCgpOwotCX0KLX0KLQotc3RhdGljIGlubGluZSBpbnQgcGFyc2VfcmRfY21kbGluZSh1bnNpZ25lZCBsb25nKiByZF9zdGFydCwgdW5zaWduZWQgbG9uZyogcmRfZW5kKQotewotCS8qCi0JICogInJkX3N0YXJ0PTB4Tk5OTk5OTk4iIGRlZmluZXMgdGhlIG1lbW9yeSBhZGRyZXNzIG9mIGFuIGluaXRyZAotCSAqICJyZF9zaXplPTB4Tk4iIGl0J3Mgc2l6ZQotCSAqLwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSAwOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IDA7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JY2hhciBjbWRfbGluZVtDTF9TSVpFXTsKLQljaGFyICpzdGFydF9zdHI7Ci0JY2hhciAqc2l6ZV9zdHI7Ci0JY2hhciAqdG1wOwotCi0Jc3RyY3B5KGNtZF9saW5lLCBjb21tYW5kX2xpbmUpOwotCSpjb21tYW5kX2xpbmUgPSAwOwotCXRtcCA9IGNtZF9saW5lOwotCS8qIElnbm9yZSAicmRfc3RhcnQ9IiBzdHJpbmdzIGluIG90aGVyIHBhcmFtZXRlcnMuICovCi0Jc3RhcnRfc3RyID0gc3Ryc3RyKGNtZF9saW5lLCAicmRfc3RhcnQ9Iik7Ci0JaWYgKHN0YXJ0X3N0ciAmJiBzdGFydF9zdHIgIT0gY21kX2xpbmUgJiYgKihzdGFydF9zdHIgLSAxKSAhPSAnICcpCi0JCXN0YXJ0X3N0ciA9IHN0cnN0cihzdGFydF9zdHIsICIgcmRfc3RhcnQ9Iik7Ci0Jd2hpbGUgKHN0YXJ0X3N0cikgewotCQlpZiAoc3RhcnRfc3RyICE9IGNtZF9saW5lKQotCQkJc3RybmNhdChjb21tYW5kX2xpbmUsIHRtcCwgc3RhcnRfc3RyIC0gdG1wKTsKLQkJc3RhcnQgPSBtZW1wYXJzZShzdGFydF9zdHIgKyA5LCAmc3RhcnRfc3RyKTsKLQkJdG1wID0gc3RhcnRfc3RyICsgMTsKLQkJc3RhcnRfc3RyID0gc3Ryc3RyKHN0YXJ0X3N0ciwgIiByZF9zdGFydD0iKTsKLQl9Ci0JaWYgKCp0bXApCi0JCXN0cmNhdChjb21tYW5kX2xpbmUsIHRtcCk7Ci0KLQlzdHJjcHkoY21kX2xpbmUsIGNvbW1hbmRfbGluZSk7Ci0JKmNvbW1hbmRfbGluZSA9IDA7Ci0JdG1wID0gY21kX2xpbmU7Ci0JLyogSWdub3JlICJyZF9zaXplIiBzdHJpbmdzIGluIG90aGVyIHBhcmFtZXRlcnMuICovCi0Jc2l6ZV9zdHIgPSBzdHJzdHIoY21kX2xpbmUsICJyZF9zaXplPSIpOwotCWlmIChzaXplX3N0ciAmJiBzaXplX3N0ciAhPSBjbWRfbGluZSAmJiAqKHNpemVfc3RyIC0gMSkgIT0gJyAnKQotCQlzaXplX3N0ciA9IHN0cnN0cihzaXplX3N0ciwgIiByZF9zaXplPSIpOwotCXdoaWxlIChzaXplX3N0cikgewotCQlpZiAoc2l6ZV9zdHIgIT0gY21kX2xpbmUpCi0JCQlzdHJuY2F0KGNvbW1hbmRfbGluZSwgdG1wLCBzaXplX3N0ciAtIHRtcCk7Ci0JCXNpemUgPSBtZW1wYXJzZShzaXplX3N0ciArIDgsICZzaXplX3N0cik7Ci0JCXRtcCA9IHNpemVfc3RyICsgMTsKLQkJc2l6ZV9zdHIgPSBzdHJzdHIoc2l6ZV9zdHIsICIgcmRfc2l6ZT0iKTsKLQl9Ci0JaWYgKCp0bXApCi0JCXN0cmNhdChjb21tYW5kX2xpbmUsIHRtcCk7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IG1lbXBhcnNlKHAsICZwKTsKIAogI2lmZGVmIENPTkZJR182NEJJVAogCS8qIEhBQ0s6IEd1ZXNzIGlmIHRoZSBzaWduIGV4dGVuc2lvbiB3YXMgZm9yZ290dGVuICovCiAJaWYgKHN0YXJ0ID4gMHgwMDAwMDAwMDgwMDAwMDAwICYmIHN0YXJ0IDwgMHgwMDAwMDAwMGZmZmZmZmZmKQogCQlzdGFydCB8PSAweGZmZmZmZmZmMDAwMDAwMDBVTDsKICNlbmRpZgorCWluaXRyZF9zdGFydCA9IHN0YXJ0OworCWluaXRyZF9lbmQgKz0gc3RhcnQ7CiAKLQllbmQgPSBzdGFydCArIHNpemU7Ci0JaWYgKHN0YXJ0ICYmIGVuZCkgewotCQkqcmRfc3RhcnQgPSBzdGFydDsKLQkJKnJkX2VuZCA9IGVuZDsKLQkJcmV0dXJuIDE7Ci0JfQogCXJldHVybiAwOwogfQorZWFybHlfcGFyYW0oInJkX3N0YXJ0IiwgcmRfc3RhcnRfZWFybHkpOwogCi0jZGVmaW5lIE1BWE1FTQkJSElHSE1FTV9TVEFSVAotI2RlZmluZSBNQVhNRU1fUEZOCVBGTl9ET1dOKE1BWE1FTSkKLQotc3RhdGljIGlubGluZSB2b2lkIGJvb3RtZW1faW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcmRfc2l6ZV9lYXJseShjaGFyICpwKQogewotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOwotCXVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWRfZW5kID0gKHVuc2lnbmVkIGxvbmcpJl9lbmQ7Ci0jaWZuZGVmIENPTkZJR19TR0lfSVAyNwotCXVuc2lnbmVkIGxvbmcgZmlyc3RfdXNhYmxlX3BmbjsKLQl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKLQlpbnQgaTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotCWludCBpbml0cmRfcmVzZXJ2ZV9ib290bWVtID0gMDsKKwlpbml0cmRfZW5kICs9IG1lbXBhcnNlKHAsICZwKTsKIAotCS8qIEJvYXJkIHNwZWNpZmljIGNvZGUgc2hvdWxkIGhhdmUgc2V0IHVwIGluaXRyZF9zdGFydCBhbmQgaW5pdHJkX2VuZCAqLwotIAlST09UX0RFViA9IFJvb3RfUkFNMDsKLQlpZiAocGFyc2VfcmRfY21kbGluZSgmaW5pdHJkX3N0YXJ0LCAmaW5pdHJkX2VuZCkpIHsKLQkJcmVzZXJ2ZWRfZW5kID0gbWF4KHJlc2VydmVkX2VuZCwgaW5pdHJkX2VuZCk7Ci0JCWluaXRyZF9yZXNlcnZlX2Jvb3RtZW0gPSAxOwotCX0gZWxzZSB7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wOwotCQl1MzIgKmluaXRyZF9oZWFkZXI7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgicmRfc2l6ZSIsIHJkX3NpemVfZWFybHkpOwogCi0JCXRtcCA9ICgocmVzZXJ2ZWRfZW5kICsgUEFHRV9TSVpFLTEpICYgUEFHRV9NQVNLKSAtIHNpemVvZih1MzIpICogMjsKLQkJaWYgKHRtcCA8IHJlc2VydmVkX2VuZCkKLQkJCXRtcCArPSBQQUdFX1NJWkU7Ci0JCWluaXRyZF9oZWFkZXIgPSAodTMyICopdG1wOwotCQlpZiAoaW5pdHJkX2hlYWRlclswXSA9PSAweDQ5NEU1MjQ0KSB7Ci0JCQlpbml0cmRfc3RhcnQgPSAodW5zaWduZWQgbG9uZykmaW5pdHJkX2hlYWRlclsyXTsKLQkJCWluaXRyZF9lbmQgPSBpbml0cmRfc3RhcnQgKyBpbml0cmRfaGVhZGVyWzFdOwotCQkJcmVzZXJ2ZWRfZW5kID0gbWF4KHJlc2VydmVkX2VuZCwgaW5pdHJkX2VuZCk7Ci0JCQlpbml0cmRfcmVzZXJ2ZV9ib290bWVtID0gMTsKLQkJfQotCX0KLSNlbmRpZgkvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBpbml0X2luaXRyZCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgdG1wLCBlbmQsIHNpemU7CisJdTMyICppbml0cmRfaGVhZGVyOworCisJUk9PVF9ERVYgPSBSb290X1JBTTA7CiAKIAkvKgotCSAqIFBhcnRpYWxseSB1c2VkIHBhZ2VzIGFyZSBub3QgdXNhYmxlIC0gdGh1cwotCSAqIHdlIGFyZSByb3VuZGluZyB1cHdhcmRzLgorCSAqIEJvYXJkIHNwZWNpZmljIGNvZGUgb3IgY29tbWFuZCBsaW5lIHBhcnNlciBzaG91bGQgaGF2ZQorCSAqIGFscmVhZHkgc2V0IHVwIGluaXRyZF9zdGFydCBhbmQgaW5pdHJkX2VuZC4gSW4gdGhlc2UgY2FzZXMKKwkgKiBwZXJmb20gc2FuaXR5IGNoZWNrcyBhbmQgdXNlIHRoZW0gaWYgYWxsIGxvb2tzIGdvb2QuCiAJICovCi0Jc3RhcnRfcGZuID0gUEZOX1VQKENQSFlTQUREUihyZXNlcnZlZF9lbmQpKTsKKwlzaXplID0gaW5pdHJkX2VuZCAtIGluaXRyZF9zdGFydDsKKwlpZiAoaW5pdHJkX2VuZCA9PSAwIHx8IHNpemUgPT0gMCkgeworCQlpbml0cmRfc3RhcnQgPSAwOworCQlpbml0cmRfZW5kID0gMDsKKwl9IGVsc2UKKwkJcmV0dXJuIGluaXRyZF9lbmQ7CiAKLSNpZm5kZWYgQ09ORklHX1NHSV9JUDI3Ci0JLyogRmluZCB0aGUgaGlnaGVzdCBwYWdlIGZyYW1lIG51bWJlciB3ZSBoYXZlIGF2YWlsYWJsZS4gICovCi0JbWF4X3BmbiA9IDA7Ci0JZmlyc3RfdXNhYmxlX3BmbiA9IC0xVUw7CisJZW5kID0gKHVuc2lnbmVkIGxvbmcpJl9lbmQ7CisJdG1wID0gUEFHRV9BTElHTihlbmQpIC0gc2l6ZW9mKHUzMikgKiAyOworCWlmICh0bXAgPCBlbmQpCisJCXRtcCArPSBQQUdFX1NJWkU7CisKKwlpbml0cmRfaGVhZGVyID0gKHUzMiAqKXRtcDsKKwlpZiAoaW5pdHJkX2hlYWRlclswXSA9PSAweDQ5NEU1MjQ0KSB7CisJCWluaXRyZF9zdGFydCA9ICh1bnNpZ25lZCBsb25nKSZpbml0cmRfaGVhZGVyWzJdOworCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgaW5pdHJkX2hlYWRlclsxXTsKKwl9CisJcmV0dXJuIGluaXRyZF9lbmQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaW5hbGl6ZV9pbml0cmQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHNpemUgPSBpbml0cmRfZW5kIC0gaW5pdHJkX3N0YXJ0OworCisJaWYgKHNpemUgPT0gMCkgeworCQlwcmludGsoS0VSTl9JTkZPICJJbml0cmQgbm90IGZvdW5kIG9yIGVtcHR5Iik7CisJCWdvdG8gZGlzYWJsZTsKKwl9CisJaWYgKENQSFlTQUREUihpbml0cmRfZW5kKSA+IFBGTl9QSFlTKG1heF9sb3dfcGZuKSkgeworCQlwcmludGsoIkluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZGlzYWJsZTsKKwl9CisKKwlyZXNlcnZlX2Jvb3RtZW0oQ1BIWVNBRERSKGluaXRyZF9zdGFydCksIHNpemUpOworCWluaXRyZF9iZWxvd19zdGFydF9vayA9IDE7CisKKwlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsIHJhbWRpc2sgYXQ6IDB4JWx4ICglbHUgYnl0ZXMpXG4iLAorCSAgICAgICBpbml0cmRfc3RhcnQsIHNpemUpOworCXJldHVybjsKK2Rpc2FibGU6CisJcHJpbnRrKCIgLSBkaXNhYmxpbmcgaW5pdHJkXG4iKTsKKwlpbml0cmRfc3RhcnQgPSAwOworCWluaXRyZF9lbmQgPSAwOworfQorCisjZWxzZSAgLyogIUNPTkZJR19CTEtfREVWX0lOSVRSRCAqLworCisjZGVmaW5lIGluaXRfaW5pdHJkKCkJCTAKKyNkZWZpbmUgZmluYWxpemVfaW5pdHJkKCkJZG8ge30gd2hpbGUgKDApCisKKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuIEl0IGFsc28gc2V0dXAgaW5pdHJkIHJlbGF0ZWQgZGF0YQorICogaWYgbmVlZGVkLgorICovCisjaWZkZWYgQ09ORklHX1NHSV9JUDI3CisKK3N0YXRpYyB2b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZCkKK3sKKwlpbml0X2luaXRyZCgpOworCWZpbmFsaXplX2luaXRyZCgpOworfQorCisjZWxzZSAgLyogIUNPTkZJR19TR0lfSVAyNyAqLworCitzdGF0aWMgdm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByZXNlcnZlZF9lbmQ7CisJdW5zaWduZWQgbG9uZyBoaWdoZXN0ID0gMDsKKwl1bnNpZ25lZCBsb25nIG1hcHN0YXJ0ID0gLTFVTDsKKwl1bnNpZ25lZCBsb25nIGJvb3RtYXBfc2l6ZTsKKwlpbnQgaTsKKworCS8qCisJICogSW5pdCBhbnkgZGF0YSByZWxhdGVkIHRvIGluaXRyZC4gSXQncyBhIG5vcCBpZiBJTklUUkQgaXMKKwkgKiBub3Qgc2VsZWN0ZWQuIE9uY2UgdGhhdCBkb25lIHdlIGNhbiBkZXRlcm1pbmUgdGhlIGxvdyBib3VuZAorCSAqIG9mIHVzYWJsZSBtZW1vcnkuCisJICovCisJcmVzZXJ2ZWRfZW5kID0gaW5pdF9pbml0cmQoKTsKKwlyZXNlcnZlZF9lbmQgPSBQRk5fVVAoQ1BIWVNBRERSKG1heChyZXNlcnZlZF9lbmQsICh1bnNpZ25lZCBsb25nKSZfZW5kKSkpOworCisJLyoKKwkgKiBGaW5kIHRoZSBoaWdoZXN0IHBhZ2UgZnJhbWUgbnVtYmVyIHdlIGhhdmUgYXZhaWxhYmxlLgorCSAqLwogCWZvciAoaSA9IDA7IGkgPCBib290X21lbV9tYXAubnJfbWFwOyBpKyspIHsKIAkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kOwogCkBAIC0zMTIsNTYgKzI2OSwzOCBAQAogCiAJCXN0YXJ0ID0gUEZOX1VQKGJvb3RfbWVtX21hcC5tYXBbaV0uYWRkcik7CiAJCWVuZCA9IFBGTl9ET1dOKGJvb3RfbWVtX21hcC5tYXBbaV0uYWRkcgotCQkgICAgICArIGJvb3RfbWVtX21hcC5tYXBbaV0uc2l6ZSk7CisJCQkJKyBib290X21lbV9tYXAubWFwW2ldLnNpemUpOwogCi0JCWlmIChzdGFydCA+PSBlbmQpCisJCWlmIChlbmQgPiBoaWdoZXN0KQorCQkJaGlnaGVzdCA9IGVuZDsKKwkJaWYgKGVuZCA8PSByZXNlcnZlZF9lbmQpCiAJCQljb250aW51ZTsKLQkJaWYgKGVuZCA+IG1heF9wZm4pCi0JCQltYXhfcGZuID0gZW5kOwotCQlpZiAoc3RhcnQgPCBmaXJzdF91c2FibGVfcGZuKSB7Ci0JCQlpZiAoc3RhcnQgPiBzdGFydF9wZm4pIHsKLQkJCQlmaXJzdF91c2FibGVfcGZuID0gc3RhcnQ7Ci0JCQl9IGVsc2UgaWYgKGVuZCA+IHN0YXJ0X3BmbikgewotCQkJCWZpcnN0X3VzYWJsZV9wZm4gPSBzdGFydF9wZm47Ci0JCQl9Ci0JCX0KKwkJaWYgKHN0YXJ0ID49IG1hcHN0YXJ0KQorCQkJY29udGludWU7CisJCW1hcHN0YXJ0ID0gbWF4KHJlc2VydmVkX2VuZCwgc3RhcnQpOwogCX0KIAogCS8qCiAJICogRGV0ZXJtaW5lIGxvdyBhbmQgaGlnaCBtZW1vcnkgcmFuZ2VzCiAJICovCi0JbWF4X2xvd19wZm4gPSBtYXhfcGZuOwotCWlmIChtYXhfbG93X3BmbiA+IE1BWE1FTV9QRk4pIHsKLQkJbWF4X2xvd19wZm4gPSBNQVhNRU1fUEZOOwotI2lmbmRlZiBDT05GSUdfSElHSE1FTQotCQkvKiBNYXhpbXVtIG1lbW9yeSB1c2FibGUgaXMgd2hhdCBpcyBkaXJlY3RseSBhZGRyZXNzYWJsZSAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJXYXJuaW5nIG9ubHkgJWxkTUIgd2lsbCBiZSB1c2VkLlxuIiwKLQkJICAgICAgIE1BWE1FTSA+PiAyMCk7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlVzZSBhIEhJR0hNRU0gZW5hYmxlZCBrZXJuZWwuXG4iKTsKLSNlbmRpZgotCX0KLQorCWlmIChoaWdoZXN0ID4gUEZOX0RPV04oSElHSE1FTV9TVEFSVCkpIHsKICNpZmRlZiBDT05GSUdfSElHSE1FTQotCS8qCi0JICogQ3J1ZGUsIHdlIHJlYWxseSBzaG91bGQgbWFrZSBhIGJldHRlciBhdHRlbXB0IGF0IGRldGVjdGluZwotCSAqIGhpZ2hzdGFydF9wZm4KLQkgKi8KLQloaWdoc3RhcnRfcGZuID0gaGlnaGVuZF9wZm4gPSBtYXhfcGZuOwotCWlmIChtYXhfcGZuID4gTUFYTUVNX1BGTikgewotCQloaWdoc3RhcnRfcGZuID0gTUFYTUVNX1BGTjsKLQkJcHJpbnRrKEtFUk5fTk9USUNFICIlbGRNQiBISUdITUVNIGF2YWlsYWJsZS5cbiIsCi0JCSAgICAgICAoaGlnaGVuZF9wZm4gLSBoaWdoc3RhcnRfcGZuKSA+PiAoMjAgLSBQQUdFX1NISUZUKSk7Ci0JfQorCQloaWdoc3RhcnRfcGZuID0gUEZOX0RPV04oSElHSE1FTV9TVEFSVCk7CisJCWhpZ2hlbmRfcGZuID0gaGlnaGVzdDsKICNlbmRpZgorCQloaWdoZXN0ID0gUEZOX0RPV04oSElHSE1FTV9TVEFSVCk7CisJfQogCi0JLyogSW5pdGlhbGl6ZSB0aGUgYm9vdC10aW1lIGFsbG9jYXRvciB3aXRoIGxvdyBtZW1vcnkgb25seS4gICovCi0JYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKGZpcnN0X3VzYWJsZV9wZm4sIG1heF9sb3dfcGZuKTsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIGJvb3QtdGltZSBhbGxvY2F0b3Igd2l0aCBsb3cgbWVtb3J5IG9ubHkuCisJICovCisJYm9vdG1hcF9zaXplID0gaW5pdF9ib290bWVtKG1hcHN0YXJ0LCBoaWdoZXN0KTsKIAogCS8qCiAJICogUmVnaXN0ZXIgZnVsbHkgYXZhaWxhYmxlIGxvdyBSQU0gcGFnZXMgd2l0aCB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuCiAJICovCiAJZm9yIChpID0gMDsgaSA8IGJvb3RfbWVtX21hcC5ucl9tYXA7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGN1cnJfcGZuLCBsYXN0X3Bmbiwgc2l6ZTsKKwkJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBzaXplOwogCiAJCS8qCiAJCSAqIFJlc2VydmUgdXNhYmxlIG1lbW9yeS4KQEAgLTM2OSw4NSArMzA4LDUwIEBACiAJCWlmIChib290X21lbV9tYXAubWFwW2ldLnR5cGUgIT0gQk9PVF9NRU1fUkFNKQogCQkJY29udGludWU7CiAKLQkJLyoKLQkJICogV2UgYXJlIHJvdW5kaW5nIHVwIHRoZSBzdGFydCBhZGRyZXNzIG9mIHVzYWJsZSBtZW1vcnk6Ci0JCSAqLwotCQljdXJyX3BmbiA9IFBGTl9VUChib290X21lbV9tYXAubWFwW2ldLmFkZHIpOwotCQlpZiAoY3Vycl9wZm4gPj0gbWF4X2xvd19wZm4pCi0JCQljb250aW51ZTsKLQkJaWYgKGN1cnJfcGZuIDwgc3RhcnRfcGZuKQotCQkJY3Vycl9wZm4gPSBzdGFydF9wZm47Ci0KLQkJLyoKLQkJICogLi4uIGFuZCBhdCB0aGUgZW5kIG9mIHRoZSB1c2FibGUgcmFuZ2UgZG93bndhcmRzOgotCQkgKi8KLQkJbGFzdF9wZm4gPSBQRk5fRE9XTihib290X21lbV9tYXAubWFwW2ldLmFkZHIKKwkJc3RhcnQgPSBQRk5fVVAoYm9vdF9tZW1fbWFwLm1hcFtpXS5hZGRyKTsKKwkJZW5kICAgPSBQRk5fRE9XTihib290X21lbV9tYXAubWFwW2ldLmFkZHIKIAkJCQkgICAgKyBib290X21lbV9tYXAubWFwW2ldLnNpemUpOwotCi0JCWlmIChsYXN0X3BmbiA+IG1heF9sb3dfcGZuKQotCQkJbGFzdF9wZm4gPSBtYXhfbG93X3BmbjsKKwkJLyoKKwkJICogV2UgYXJlIHJvdW5kaW5nIHVwIHRoZSBzdGFydCBhZGRyZXNzIG9mIHVzYWJsZSBtZW1vcnkKKwkJICogYW5kIGF0IHRoZSBlbmQgb2YgdGhlIHVzYWJsZSByYW5nZSBkb3dud2FyZHMuCisJCSAqLworCQlpZiAoc3RhcnQgPj0gbWF4X2xvd19wZm4pCisJCQljb250aW51ZTsKKwkJaWYgKHN0YXJ0IDwgcmVzZXJ2ZWRfZW5kKQorCQkJc3RhcnQgPSByZXNlcnZlZF9lbmQ7CisJCWlmIChlbmQgPiBtYXhfbG93X3BmbikKKwkJCWVuZCA9IG1heF9sb3dfcGZuOwogCiAJCS8qCi0JCSAqIE9ubHkgcmVnaXN0ZXIgbG93bWVtIHBhcnQgb2YgbG93bWVtIHNlZ21lbnQgd2l0aCBib290bWVtLgorCQkgKiAuLi4gZmluYWxseSwgaXMgdGhlIGFyZWEgZ29pbmcgYXdheT8KIAkJICovCi0JCXNpemUgPSBsYXN0X3BmbiAtIGN1cnJfcGZuOwotCQlpZiAoY3Vycl9wZm4gPiBQRk5fRE9XTihISUdITUVNX1NUQVJUKSkKKwkJaWYgKGVuZCA8PSBzdGFydCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoY3Vycl9wZm4gKyBzaXplIC0gMSA+IFBGTl9ET1dOKEhJR0hNRU1fU1RBUlQpKQotCQkJc2l6ZSA9IFBGTl9ET1dOKEhJR0hNRU1fU1RBUlQpIC0gY3Vycl9wZm47Ci0JCWlmICghc2l6ZSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qCi0JCSAqIC4uLiBmaW5hbGx5LCBkaWQgYWxsIHRoZSByb3VuZGluZyBhbmQgcGxheWluZwotCQkgKiBhcm91bmQganVzdCBtYWtlIHRoZSBhcmVhIGdvIGF3YXk/Ci0JCSAqLwotCQlpZiAobGFzdF9wZm4gPD0gY3Vycl9wZm4pCi0JCQljb250aW51ZTsKKwkJc2l6ZSA9IGVuZCAtIHN0YXJ0OwogCiAJCS8qIFJlZ2lzdGVyIGxvd21lbSByYW5nZXMgKi8KLQkJZnJlZV9ib290bWVtKFBGTl9QSFlTKGN1cnJfcGZuKSwgUEZOX1BIWVMoc2l6ZSkpOwotCQltZW1vcnlfcHJlc2VudCgwLCBjdXJyX3BmbiwgY3Vycl9wZm4gKyBzaXplIC0gMSk7CisJCWZyZWVfYm9vdG1lbShQRk5fUEhZUyhzdGFydCksIHNpemUgPDwgUEFHRV9TSElGVCk7CisJCW1lbW9yeV9wcmVzZW50KDAsIHN0YXJ0LCBlbmQpOwogCX0KIAotCS8qIFJlc2VydmUgdGhlIGJvb3RtYXAgbWVtb3J5LiAgKi8KLQlyZXNlcnZlX2Jvb3RtZW0oUEZOX1BIWVMoZmlyc3RfdXNhYmxlX3BmbiksIGJvb3RtYXBfc2l6ZSk7Ci0jZW5kaWYgLyogQ09ORklHX1NHSV9JUDI3ICovCisJLyoKKwkgKiBSZXNlcnZlIHRoZSBib290bWFwIG1lbW9yeS4KKwkgKi8KKwlyZXNlcnZlX2Jvb3RtZW0oUEZOX1BIWVMobWFwc3RhcnQpLCBib290bWFwX3NpemUpOwogCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECi0JaW5pdHJkX2JlbG93X3N0YXJ0X29rID0gMTsKLQlpZiAoaW5pdHJkX3N0YXJ0KSB7Ci0JCXVuc2lnbmVkIGxvbmcgaW5pdHJkX3NpemUgPSAoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfZW5kKSAtCi0JCQkoKHVuc2lnbmVkIGNoYXIgKilpbml0cmRfc3RhcnQpOwotCQljb25zdCBpbnQgd2lkdGggPSBzaXplb2YobG9uZykgKiAyOwotCi0JCXByaW50aygiSW5pdGlhbCByYW1kaXNrIGF0OiAweCVwICglbHUgYnl0ZXMpXG4iLAotCQkgICAgICAgKHZvaWQgKilpbml0cmRfc3RhcnQsIGluaXRyZF9zaXplKTsKLQotCQlpZiAoQ1BIWVNBRERSKGluaXRyZF9lbmQpID4gUEZOX1BIWVMobWF4X2xvd19wZm4pKSB7Ci0JCQlwcmludGsoImluaXRyZCBleHRlbmRzIGJleW9uZCBlbmQgb2YgbWVtb3J5ICIKLQkJCSAgICAgICAiKDB4JTAqTHggPiAweCUwKkx4KVxuZGlzYWJsaW5nIGluaXRyZFxuIiwKLQkJCSAgICAgICB3aWR0aCwKLQkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKSBDUEhZU0FERFIoaW5pdHJkX2VuZCksCi0JCQkgICAgICAgd2lkdGgsCi0JCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgUEZOX1BIWVMobWF4X2xvd19wZm4pKTsKLQkJCWluaXRyZF9zdGFydCA9IGluaXRyZF9lbmQgPSAwOwotCQkJaW5pdHJkX3Jlc2VydmVfYm9vdG1lbSA9IDA7Ci0JCX0KLQotCQlpZiAoaW5pdHJkX3Jlc2VydmVfYm9vdG1lbSkKLQkJCXJlc2VydmVfYm9vdG1lbShDUEhZU0FERFIoaW5pdHJkX3N0YXJ0KSwgaW5pdHJkX3NpemUpOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JTklUUkQgICovCisJLyoKKwkgKiBSZXNlcnZlIGluaXRyZCBtZW1vcnkgaWYgbmVlZGVkLgorCSAqLworCWZpbmFsaXplX2luaXRyZCgpOwogfQogCisjZW5kaWYJLyogQ09ORklHX1NHSV9JUDI3ICovCisKIC8qCiAgKiBhcmNoX21lbV9pbml0IC0gaW5pdGlhbGl6ZSBtZW1vcnkgbWFuYWdtZW50IHN1YnN5c3RlbQogICoKICAqICBvIHBsYXRfbWVtX3NldHVwKCkgZGV0ZWN0cyB0aGUgbWVtb3J5IGNvbmZpZ3VyYXRpb24gYW5kIHdpbGwgcmVjb3JkIGRldGVjdGVkCiAgKiAgICBtZW1vcnkgYXJlYXMgdXNpbmcgYWRkX21lbW9yeV9yZWdpb24uCi0gKiAgbyBwYXJzZV9jbWRsaW5lX2Vhcmx5KCkgcGFyc2VzIHRoZSBjb21tYW5kIGxpbmUgZm9yIG1lbT0gb3B0aW9ucyB3aGljaCwKLSAqICAgIGlmZiBkZXRlY3RlZCwgd2lsbCBvdmVycmlkZSB0aGUgcmVzdWx0cyBvZiB0aGUgYXV0b21hdGljIGRldGVjdGlvbi4KICAqCiAgKiBBdCB0aGlzIHN0YWdlIHRoZSBtZW1vcnkgY29uZmlndXJhdGlvbiBvZiB0aGUgc3lzdGVtIGlzIGtub3duIHRvIHRoZQogICoga2VybmVsIGJ1dCBnZW5lcmljIG1lbW9yeSBtYW5hZ21lbnQgc3lzdGVtIGlzIHN0aWxsIGVudGlyZWx5IHVuaW5pdGlhbGl6ZWQuCkBAIC00NjUsMjUgKzM2OSw1OSBAQAogICogaW5pdGlhbGl6YXRpb24gaG9vayBmb3IgYW55dGhpbmcgZWxzZSB3YXMgaW50cm9kdWNlZC4KICAqLwogCi1leHRlcm4gdm9pZCBwbGF0X21lbV9zZXR1cCh2b2lkKTsKK3N0YXRpYyBpbnQgdXNlcm1lbSBfX2luaXRkYXRhID0gMDsKKworc3RhdGljIGludCBfX2luaXQgZWFybHlfcGFyc2VfbWVtKGNoYXIgKnApCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKKworCS8qCisJICogSWYgYSB1c2VyIHNwZWNpZmllcyBtZW1vcnkgc2l6ZSwgd2UKKwkgKiBibG93IGF3YXkgYW55IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkCisJICogc2l6ZS4KKwkgKi8KKwlpZiAodXNlcm1lbSA9PSAwKSB7CisJCWJvb3RfbWVtX21hcC5ucl9tYXAgPSAwOworCQl1c2VybWVtID0gMTsKKyAJfQorCXN0YXJ0ID0gMDsKKwlzaXplID0gbWVtcGFyc2UocCwgJnApOworCWlmICgqcCA9PSAnQCcpCisJCXN0YXJ0ID0gbWVtcGFyc2UocCArIDEsICZwKTsKKworCWFkZF9tZW1vcnlfcmVnaW9uKHN0YXJ0LCBzaXplLCBCT09UX01FTV9SQU0pOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm1lbSIsIGVhcmx5X3BhcnNlX21lbSk7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApCiB7CisJZXh0ZXJuIHZvaWQgcGxhdF9tZW1fc2V0dXAodm9pZCk7CisKIAkvKiBjYWxsIGJvYXJkIHNldHVwIHJvdXRpbmUgKi8KIAlwbGF0X21lbV9zZXR1cCgpOwogCisJcHJpbnRrKCJEZXRlcm1pbmVkIHBoeXNpY2FsIFJBTSBtYXA6XG4iKTsKKwlwcmludF9tZW1vcnlfbWFwKCk7CisKIAlzdHJsY3B5KGNvbW1hbmRfbGluZSwgYXJjc19jbWRsaW5lLCBzaXplb2YoY29tbWFuZF9saW5lKSk7CiAJc3RybGNweShzYXZlZF9jb21tYW5kX2xpbmUsIGNvbW1hbmRfbGluZSwgQ09NTUFORF9MSU5FX1NJWkUpOwogCiAJKmNtZGxpbmVfcCA9IGNvbW1hbmRfbGluZTsKIAotCXBhcnNlX2NtZGxpbmVfZWFybHkoKTsKKwlwYXJzZV9lYXJseV9wYXJhbSgpOworCisJaWYgKHVzZXJtZW0pIHsKKwkJcHJpbnRrKCJVc2VyLWRlZmluZWQgcGh5c2ljYWwgUkFNIG1hcDpcbiIpOworCQlwcmludF9tZW1vcnlfbWFwKCk7CisJfQorCiAJYm9vdG1lbV9pbml0KCk7CiAJc3BhcnNlX2luaXQoKTsKIAlwYWdpbmdfaW5pdCgpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVzb3VyY2VfaW5pdCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHJlc291cmNlX2luaXQodm9pZCkKIHsKIAlpbnQgaTsKIApAQCAtNTA0LDEwICs0NDIsMTAgQEAKIAogCQlzdGFydCA9IGJvb3RfbWVtX21hcC5tYXBbaV0uYWRkcjsKIAkJZW5kID0gYm9vdF9tZW1fbWFwLm1hcFtpXS5hZGRyICsgYm9vdF9tZW1fbWFwLm1hcFtpXS5zaXplIC0gMTsKLQkJaWYgKHN0YXJ0ID49IE1BWE1FTSkKKwkJaWYgKHN0YXJ0ID49IEhJR0hNRU1fU1RBUlQpCiAJCQljb250aW51ZTsKLQkJaWYgKGVuZCA+PSBNQVhNRU0pCi0JCQllbmQgPSBNQVhNRU0gLSAxOworCQlpZiAoZW5kID49IEhJR0hNRU1fU1RBUlQpCisJCQllbmQgPSBISUdITUVNX1NUQVJUIC0gMTsKIAogCQlyZXMgPSBhbGxvY19ib290bWVtKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpKTsKIAkJc3dpdGNoIChib290X21lbV9tYXAubWFwW2ldLnR5cGUpIHsKQEAgLTUzNiw5ICs0NzQsNiBAQAogCX0KIH0KIAotI3VuZGVmIE1BWE1FTQotI3VuZGVmIE1BWE1FTV9QRk4KLQogdm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKQogewogCWNwdV9wcm9iZSgpOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggNmI0ZDliZS4uYjlkMzU4ZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbC5jCkBAIC00MjQsMTUgKzQyNCwxMSBAQAogCWlmICghdXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm47CiAKLQlpZiAodHJ5X3RvX2ZyZWV6ZSgpKQotCQlnb3RvIG5vX3NpZ25hbDsKLQogCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQogCQlvbGRzZXQgPSAmY3VycmVudC0+c2F2ZWRfc2lnbWFzazsKIAllbHNlCiAJCW9sZHNldCA9ICZjdXJyZW50LT5ibG9ja2VkOwogCi0KIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7CiAJCS8qIFdoZWUhICBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICAqLwpAQCAtNDQ2LDkgKzQ0MiwxMCBAQAogCQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CiAJCX0KKworCQlyZXR1cm47CiAJfQogCi1ub19zaWduYWw6CiAJLyoKIAkgKiBXaG8ncyBjb2RlIGRvZXNuJ3QgY29uZm9ybSB0byB0aGUgcmVzdGFydGFibGUgc3lzY2FsbCBjb252ZW50aW9uCiAJICogZGllcyBoZXJlISEhICBUaGUgbGkgaW5zdHJ1Y3Rpb24sIGEgc2luZ2xlIG1hY2hpbmUgaW5zdHJ1Y3Rpb24sCkBAIC00NjYsNiArNDYzLDcgQEAKIAkJCXJlZ3MtPnJlZ3NbN10gPSByZWdzLT5yZWdzWzI2XTsKIAkJCXJlZ3MtPmNwMF9lcGMgLT0gNDsKIAkJfQorCQlyZWdzLT5yZWdzWzBdID0gMDsJLyogRG9uJ3QgZGVhbCB3aXRoIHRoaXMgYWdhaW4uICAqLwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbDMyLmMKaW5kZXggZjMyYTIyOS4uYzg2YTVkZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWwzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc2lnbmFsMzIuYwpAQCAtODE1LDkgKzgxNSw2IEBACiAJaWYgKCF1c2VyX21vZGUocmVncykpCiAJCXJldHVybjsKIAotCWlmICh0cnlfdG9fZnJlZXplKCkpCi0JCWdvdG8gbm9fc2lnbmFsOwotCiAJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCiAJCW9sZHNldCA9ICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrOwogCWVsc2UKQEAgLTgzNiw5ICs4MzMsMTAgQEAKIAkJCWlmICh0ZXN0X3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spKQogCQkJCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9SRVNUT1JFX1NJR01BU0spOwogCQl9CisKKwkJcmV0dXJuOwogCX0KIAotbm9fc2lnbmFsOgogCS8qCiAJICogV2hvJ3MgY29kZSBkb2Vzbid0IGNvbmZvcm0gdG8gdGhlIHJlc3RhcnRhYmxlIHN5c2NhbGwgY29udmVudGlvbgogCSAqIGRpZXMgaGVyZSEhISAgVGhlIGxpIGluc3RydWN0aW9uLCBhIHNpbmdsZSBtYWNoaW5lIGluc3RydWN0aW9uLApAQCAtODU2LDYgKzg1NCw3IEBACiAJCQlyZWdzLT5yZWdzWzddID0gcmVncy0+cmVnc1syNl07CiAJCQlyZWdzLT5jcDBfZXBjIC09IDQ7CiAJCX0KKwkJcmVncy0+cmVnc1swXSA9IDA7CS8qIERvbid0IGRlYWwgd2l0aCB0aGlzIGFnYWluLiAgKi8KIAl9CiAKIAkvKgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zaWduYWxfbjMyLmMgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbF9uMzIuYwppbmRleCA0NzdjNTMzLi41MGMxN2VhIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NpZ25hbF9uMzIuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NpZ25hbF9uMzIuYwpAQCAtNDIsNiArNDIsOCBAQAogCiAjaW5jbHVkZSAic2lnbmFsLWNvbW1vbi5oIgogCitleHRlcm4gdm9pZCBzaWdzZXRfZnJvbV9jb21wYXQoc2lnc2V0X3QgKnNldCwgY29tcGF0X3NpZ3NldF90ICpjb21wYXQpOworCiAvKgogICogSW5jbHVkaW5nIDxhc20vdW5pc3RkLmg+IHdvdWxkIGdpdmUgdXNlIHRoZSA2NC1iaXQgc3lzY2FsbCBudW1iZXJzIC4uLgogICovCkBAIC04MSw4ICs4Myw2IEBACiAjZW5kaWYKIH07CiAKLWV4dGVybiB2b2lkIHNpZ3NldF9mcm9tX2NvbXBhdCAoc2lnc2V0X3QgKnNldCwgY29tcGF0X3NpZ3NldF90ICpjb21wYXQpOwotCiBzYXZlX3N0YXRpY19mdW5jdGlvbihzeXNuMzJfcnRfc2lnc3VzcGVuZCk7CiBfX2F0dHJpYnV0ZV91c2VkX18gbm9pbmxpbmUgc3RhdGljIGludAogX3N5c24zMl9ydF9zaWdzdXNwZW5kKG5hYmlfbm9fcmVnYXJncyBzdHJ1Y3QgcHRfcmVncyByZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLW10LmMKaW5kZXggOTM0MjlhNC4uNzY2MjUzYyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtbXQuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC1tdC5jCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCQl3cml0ZV92cGVfYzBfY29uZmlnKCByZWFkX2MwX2NvbmZpZygpKTsKIAogCQkJCS8qIG1ha2Ugc3VyZSB0aGVyZSBhcmUgbm8gc29mdHdhcmUgaW50ZXJydXB0cyBwZW5kaW5nICovCi0JCQkJd3JpdGVfdnBlX2MwX2NhdXNlKHJlYWRfdnBlX2MwX2NhdXNlKCkgJiB+KENfU1cxfENfU1cwKSk7CisJCQkJd3JpdGVfdnBlX2MwX2NhdXNlKDApOwogCiAJCQkJLyogUHJvcGFnYXRlIENvbmZpZzcgKi8KIAkJCQl3cml0ZV92cGVfYzBfY29uZmlnNyhyZWFkX2MwX2NvbmZpZzcoKSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMgYi9hcmNoL21pcHMva2VybmVsL3NtdGMtYXNtLlMKaW5kZXggNGNjM2RlYS4uNzZjYjMxZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXRjLWFzbS5TCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvc210Yy1hc20uUwpAQCAtOCw3ICs4LDcgQEAKICNpbmNsdWRlIDxhc20vcmVnZGVmLmg+CiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL3N0YWNrZnJhbWUuaD4KLSNpbmNsdWRlIDxhc20vc3RhY2tmcmFtZS5oPgorI2luY2x1ZGUgPGFzbS9pcnFmbGFncy5oPgogCiAvKgogICogIlNvZnR3YXJlIEludGVycnVwdCIgbGlua2FnZS4KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc3lzY2FsbC5jIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKaW5kZXggMDcyMTMxNC4uOTk1MTI0MCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zeXNjYWxsLmMKQEAgLTI2Myw3ICsyNjMsNyBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBzeXNfc2V0X3RocmVhZF9hcmVhKHVuc2lnbmVkIGxvbmcgYWRkcikKK2FzbWxpbmthZ2UgaW50IHN5c19zZXRfdGhyZWFkX2FyZWEodW5zaWduZWQgbG9uZyBhZGRyKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGkgPSB0YXNrX3RocmVhZF9pbmZvKGN1cnJlbnQpOwogCkBAIC0yNzEsNiArMjcxLDggQEAKIAogCS8qIElmIHNvbWUgZnV0dXJlIE1JUFMgaW1wbGVtZW50YXRpb24gaGFzIHRoaXMgcmVnaXN0ZXIgaW4gaGFyZHdhcmUsCiAJICogd2Ugd2lsbCBuZWVkIHRvIHVwZGF0ZSBpdCBoZXJlIChhbmQgaW4gY29udGV4dCBzd2l0Y2hlcykuICAqLworCisJcmV0dXJuIDA7CiB9CiAKIGFzbWxpbmthZ2UgaW50IF9zeXNfc3lzbWlwcyhpbnQgY21kLCBsb25nIGFyZzEsIGludCBhcmcyLCBpbnQgYXJnMykKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdGltZS5jIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKaW5kZXggMTcwY2I2Ny4uODQ1YzdlNSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90aW1lLmMKQEAgLTQ3LDggKzQ3LDYgQEAKIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZQogICovCi1leHRlcm4gdm9sYXRpbGUgdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIERFRklORV9TUElOTE9DSyhydGNfbG9jayk7CiAKIC8qCkBAIC0xNTksNyArMTU3LDYgQEAKIHZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKIHsKIAl1bnNpZ25lZCBsb25nIHNlcTsKLQl1bnNpZ25lZCBsb25nIGxvc3Q7CiAJdW5zaWduZWQgbG9uZyB1c2VjLCBzZWM7CiAJdW5zaWduZWQgbG9uZyBtYXhfbnRwX3RpY2s7CiAKQEAgLTE2OCw4ICsxNjUsNiBAQAogCiAJCXVzZWMgPSBkb19nZXR0aW1lb2Zmc2V0KCk7CiAKLQkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7Ci0KIAkJLyoKIAkJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKIAkJICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCkBAIC0xNzgsMTEgKzE3Myw3IEBACiAJCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKSB7CiAJCQltYXhfbnRwX3RpY2sgPSAoVVNFQ19QRVJfU0VDIC8gSFopIC0gdGlja2FkajsKIAkJCXVzZWMgPSBtaW4odXNlYywgbWF4X250cF90aWNrKTsKLQotCQkJaWYgKGxvc3QpCi0JCQkJdXNlYyArPSBsb3N0ICogbWF4X250cF90aWNrOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KGxvc3QpKQotCQkJdXNlYyArPSBsb3N0ICogKFVTRUNfUEVSX1NFQyAvIEhaKTsKKwkJfQogCiAJCXNlYyA9IHh0aW1lLnR2X3NlYzsKIAkJdXNlYyArPSAoeHRpbWUudHZfbnNlYyAvIDEwMDApOwpAQCAtMjE3LDcgKzIwOCw2IEBACiAJICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKIAkgKi8KIAluc2VjIC09IGRvX2dldHRpbWVvZmZzZXQoKSAqIE5TRUNfUEVSX1VTRUM7Ci0JbnNlYyAtPSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiB0aWNrX25zZWM7CiAKIAl3dG1fc2VjICA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYyArICh4dGltZS50dl9zZWMgLSBzZWMpOwogCXd0bV9uc2VjID0gd2FsbF90b19tb25vdG9uaWMudHZfbnNlYyArICh4dGltZS50dl9uc2VjIC0gbnNlYyk7CkBAIC00MzQsNyArNDI0LDcgQEAKIAkvKgogCSAqIGNhbGwgdGhlIGdlbmVyaWMgdGltZXIgaW50ZXJydXB0IGhhbmRsaW5nCiAJICovCi0JZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIoMSk7CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgYW4gZXh0ZXJuYWxseSBzeW5jaHJvbml6ZWQgTGludXggY2xvY2ssIHRoZW4gdXBkYXRlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMgYi9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKaW5kZXggOTU0YTE5OC4uZTUxZDhmZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgva2FsbHN5bXMuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAKICNpbmNsdWRlIDxhc20vYm9vdGluZm8uaD4KICNpbmNsdWRlIDxhc20vYnJhbmNoLmg+CkBAIC03MiwyOCArNzMsNjggQEAKIHZvaWQgKCpib2FyZF9lanRhZ19oYW5kbGVyX3NldHVwKSh2b2lkKTsKIHZvaWQgKCpib2FyZF9iaW5kX2VpY19pbnRlcnJ1cHQpKGludCBpcnEsIGludCByZWdzZXQpOwogCi0vKgotICogVGhlc2UgY29uc3RhbnQgaXMgZm9yIHNlYXJjaGluZyBmb3IgcG9zc2libGUgbW9kdWxlIHRleHQgc2VnbWVudHMuCi0gKiBNT0RVTEVfUkFOR0UgaXMgYSBndWVzcyBvZiBob3cgbXVjaCBzcGFjZSBpcyBsaWtlbHkgdG8gYmUgdm1hbGxvY2VkLgotICovCi0jZGVmaW5lIE1PRFVMRV9SQU5HRSAoOCoxMDI0KjEwMjQpCisKK3N0YXRpYyB2b2lkIHNob3dfcmF3X2JhY2t0cmFjZSh1bnNpZ25lZCBsb25nIHJlZzI5KQoreworCXVuc2lnbmVkIGxvbmcgKnNwID0gKHVuc2lnbmVkIGxvbmcgKilyZWcyOTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlwcmludGsoIkNhbGwgVHJhY2U6Iik7CisjaWZkZWYgQ09ORklHX0tBTExTWU1TCisJcHJpbnRrKCJcbiIpOworI2VuZGlmCisJd2hpbGUgKCFrc3RhY2tfZW5kKHNwKSkgeworCQlhZGRyID0gKnNwKys7CisJCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpCisJCQlwcmludF9pcF9zeW0oYWRkcik7CisJfQorCXByaW50aygiXG4iKTsKK30KKworI2lmZGVmIENPTkZJR19LQUxMU1lNUworc3RhdGljIGludCByYXdfc2hvd190cmFjZTsKK3N0YXRpYyBpbnQgX19pbml0IHNldF9yYXdfc2hvd190cmFjZShjaGFyICpzdHIpCit7CisJcmF3X3Nob3dfdHJhY2UgPSAxOworCXJldHVybiAxOworfQorX19zZXR1cCgicmF3X3Nob3dfdHJhY2UiLCBzZXRfcmF3X3Nob3dfdHJhY2UpOworCitleHRlcm4gdW5zaWduZWQgbG9uZyB1bndpbmRfc3RhY2soc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nICpzcCwKKwkJCQkgIHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgcmEpOworCitzdGF0aWMgdm9pZCBzaG93X2JhY2t0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGxvbmcgc3AgPSByZWdzLT5yZWdzWzI5XTsKKwl1bnNpZ25lZCBsb25nIHJhID0gcmVncy0+cmVnc1szMV07CisJdW5zaWduZWQgbG9uZyBwYyA9IHJlZ3MtPmNwMF9lcGM7CisKKwlpZiAocmF3X3Nob3dfdHJhY2UgfHwgIV9fa2VybmVsX3RleHRfYWRkcmVzcyhwYykpIHsKKwkJc2hvd19yYXdfYmFja3RyYWNlKHNwKTsKKwkJcmV0dXJuOworCX0KKwlwcmludGsoIkNhbGwgVHJhY2U6XG4iKTsKKwlkbyB7CisJCXByaW50X2lwX3N5bShwYyk7CisJCXBjID0gdW53aW5kX3N0YWNrKHRhc2ssICZzcCwgcGMsIHJhKTsKKwkJcmEgPSAwOworCX0gd2hpbGUgKHBjKTsKKwlwcmludGsoIlxuIik7Cit9CisjZWxzZQorI2RlZmluZSBzaG93X2JhY2t0cmFjZSh0YXNrLCByKSBzaG93X3Jhd19iYWNrdHJhY2UoKHIpLT5yZWdzWzI5XSk7CisjZW5kaWYKIAogLyoKICAqIFRoaXMgcm91dGluZSBhYnVzZXMgZ2V0X3VzZXIoKS9wdXRfdXNlcigpIHRvIHJlZmVyZW5jZSBwb2ludGVycwogICogd2l0aCBhdCBsZWFzdCBhIGJpdCBvZiBlcnJvciBjaGVja2luZyAuLi4KICAqLwotdm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCitzdGF0aWMgdm9pZCBzaG93X3N0YWNrdHJhY2Uoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAljb25zdCBpbnQgZmllbGQgPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwogCWxvbmcgc3RhY2tkYXRhOwogCWludCBpOwotCi0JaWYgKCFzcCkgewotCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpCi0JCQlzcCA9ICh1bnNpZ25lZCBsb25nICopIHRhc2stPnRocmVhZC5yZWcyOTsKLQkJZWxzZQotCQkJc3AgPSAodW5zaWduZWQgbG9uZyAqKSAmc3A7Ci0JfQorCXVuc2lnbmVkIGxvbmcgKnNwID0gKHVuc2lnbmVkIGxvbmcgKilyZWdzLT5yZWdzWzI5XTsKIAogCXByaW50aygiU3RhY2sgOiIpOwogCWkgPSAwOwpAQCAtMTE0LDMyICsxNTUsNDggQEAKIAkJaSsrOwogCX0KIAlwcmludGsoIlxuIik7CisJc2hvd19iYWNrdHJhY2UodGFzaywgcmVncyk7CiB9CiAKLXZvaWQgc2hvd190cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIHVuc2lnbmVkIGxvbmcgKnN0YWNrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHByZXBhcmVfZnJhbWV0cmFjZShzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQljb25zdCBpbnQgZmllbGQgPSAyICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQotCWlmICghc3RhY2spIHsKLQkJaWYgKHRhc2sgJiYgdGFzayAhPSBjdXJyZW50KQotCQkJc3RhY2sgPSAodW5zaWduZWQgbG9uZyAqKSB0YXNrLT50aHJlYWQucmVnMjk7Ci0JCWVsc2UKLQkJCXN0YWNrID0gKHVuc2lnbmVkIGxvbmcgKikgJnN0YWNrOwotCX0KLQotCXByaW50aygiQ2FsbCBUcmFjZToiKTsKLSNpZmRlZiBDT05GSUdfS0FMTFNZTVMKLQlwcmludGsoIlxuIik7CisJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIuc2V0IHB1c2hcblx0IgorCQkiLnNldCBub2F0XG5cdCIKKyNpZmRlZiBDT05GSUdfNjRCSVQKKwkJIjE6IGRsYSAkMSwgMWJcblx0IgorCQkic2QgJDEsICUwXG5cdCIKKwkJInNkICQyOSwgJTFcblx0IgorCQkic2QgJDMxLCAlMlxuXHQiCisjZWxzZQorCQkiMTogbGEgJDEsIDFiXG5cdCIKKwkJInN3ICQxLCAlMFxuXHQiCisJCSJzdyAkMjksICUxXG5cdCIKKwkJInN3ICQzMSwgJTJcblx0IgogI2VuZGlmCi0Jd2hpbGUgKCFrc3RhY2tfZW5kKHN0YWNrKSkgewotCQlhZGRyID0gKnN0YWNrKys7Ci0JCWlmIChfX2tlcm5lbF90ZXh0X2FkZHJlc3MoYWRkcikpIHsKLQkJCXByaW50aygiIFs8JTAqbHg+XSAiLCBmaWVsZCwgYWRkcik7Ci0JCQlwcmludF9zeW1ib2woIiVzXG4iLCBhZGRyKTsKKwkJIi5zZXQgcG9wXG5cdCIKKwkJOiAiPW0iIChyZWdzLT5jcDBfZXBjKSwKKwkJIj1tIiAocmVncy0+cmVnc1syOV0pLCAiPW0iIChyZWdzLT5yZWdzWzMxXSkKKwkJOiA6ICJtZW1vcnkiKTsKK30KKwordm9pZCBzaG93X3N0YWNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyAqc3ApCit7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKKwlpZiAoc3ApIHsKKwkJcmVncy5yZWdzWzI5XSA9ICh1bnNpZ25lZCBsb25nKXNwOworCQlyZWdzLnJlZ3NbMzFdID0gMDsKKwkJcmVncy5jcDBfZXBjID0gMDsKKwl9IGVsc2UgeworCQlpZiAodGFzayAmJiB0YXNrICE9IGN1cnJlbnQpIHsKKwkJCXJlZ3MucmVnc1syOV0gPSB0YXNrLT50aHJlYWQucmVnMjk7CisJCQlyZWdzLnJlZ3NbMzFdID0gMDsKKwkJCXJlZ3MuY3AwX2VwYyA9IHRhc2stPnRocmVhZC5yZWczMTsKKwkJfSBlbHNlIHsKKwkJCXByZXBhcmVfZnJhbWV0cmFjZSgmcmVncyk7CiAJCX0KIAl9Ci0JcHJpbnRrKCJcbiIpOworCXNob3dfc3RhY2t0cmFjZSh0YXNrLCAmcmVncyk7CiB9CiAKIC8qCkBAIC0xNDcsOSArMjA0LDE1IEBACiAgKi8KIHZvaWQgZHVtcF9zdGFjayh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgc3RhY2s7CisJc3RydWN0IHB0X3JlZ3MgcmVnczsKIAotCXNob3dfdHJhY2UoY3VycmVudCwgJnN0YWNrKTsKKwkvKgorCSAqIFJlbW92ZSBhbnkgZ2FyYmFnZSB0aGF0IG1heSBiZSBpbiByZWdzIChzcGVjaWFsbHkgZnVuYworCSAqIGFkZHJlc3NlcykgdG8gYXZvaWQgc2hvd19yYXdfYmFja3RyYWNlKCkgdG8gcmVwb3J0IHRoZW0KKwkgKi8KKwltZW1zZXQoJnJlZ3MsIDAsIHNpemVvZihyZWdzKSk7CisJcHJlcGFyZV9mcmFtZXRyYWNlKCZyZWdzKTsKKwlzaG93X2JhY2t0cmFjZShjdXJyZW50LCAmcmVncyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHVtcF9zdGFjayk7CkBAIC0yNjgsOCArMzMxLDcgQEAKIAlwcmludF9tb2R1bGVzKCk7CiAJcHJpbnRrKCJQcm9jZXNzICVzIChwaWQ6ICVkLCB0aHJlYWRpbmZvPSVwLCB0YXNrPSVwKVxuIiwKIAkgICAgICAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgY3VycmVudF90aHJlYWRfaW5mbygpLCBjdXJyZW50KTsKLQlzaG93X3N0YWNrKGN1cnJlbnQsIChsb25nICopIHJlZ3MtPnJlZ3NbMjldKTsKLQlzaG93X3RyYWNlKGN1cnJlbnQsIChsb25nICopIHJlZ3MtPnJlZ3NbMjldKTsKKwlzaG93X3N0YWNrdHJhY2UoY3VycmVudCwgcmVncyk7CiAJc2hvd19jb2RlKCh1bnNpZ25lZCBpbnQgKikgcmVncy0+Y3AwX2VwYyk7CiAJcHJpbnRrKCJcbiIpOwogfQpAQCAtMjkyLDYgKzM1NCwxNiBAQAogCXByaW50aygiJXNbIyVkXTpcbiIsIHN0ciwgKytkaWVfY291bnRlcik7CiAJc2hvd19yZWdpc3RlcnMocmVncyk7CiAJc3Bpbl91bmxvY2tfaXJxKCZkaWVfbG9jayk7CisKKwlpZiAoaW5faW50ZXJydXB0KCkpCisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24gaW4gaW50ZXJydXB0Iik7CisKKwlpZiAocGFuaWNfb25fb29wcykgeworCQlwcmludGsoS0VSTl9FTUVSRyAiRmF0YWwgZXhjZXB0aW9uOiBwYW5pYyBpbiA1IHNlY29uZHNcbiIpOworCQlzc2xlZXAoNSk7CisJCXBhbmljKCJGYXRhbCBleGNlcHRpb24iKTsKKwl9CisKIAlkb19leGl0KFNJR1NFR1YpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jIGIvYXJjaC9taXBzL2tlcm5lbC92cGUuYwppbmRleCA5ZWUwZWMyLi41MWRkZDIxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3ZwZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvdnBlLmMKQEAgLTc2OCwxMCArNzY4LDE2IEBACiAJICovCiAgCXdyaXRlX3RjX2MwX3RjYmluZCgocmVhZF90Y19jMF90Y2JpbmQoKSAmIH5UQ0JJTkRfQ1VSVlBFKSB8IHYtPm1pbm9yKTsKIAorCXdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpICYgfihWUEVDT05GMF9WUEEpKTsKKworCWJhY2tfdG9fYmFja19jMF9oYXphcmQoKTsKKwogICAgICAgICAvKiBTZXQgdXAgdGhlIFhUQyBiaXQgaW4gdnBlY29uZjAgdG8gcG9pbnQgYXQgb3VyIHRjICovCiAgICAgICAgIHdyaXRlX3ZwZV9jMF92cGVjb25mMCggKHJlYWRfdnBlX2MwX3ZwZWNvbmYwKCkgJiB+KFZQRUNPTkYwX1hUQykpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAodC0+aW5kZXggPDwgVlBFQ09ORjBfWFRDX1NISUZUKSk7CiAKKwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkKCk7CisKICAgICAgICAgLyogZW5hYmxlIHRoaXMgVlBFICovCiAgICAgICAgIHdyaXRlX3ZwZV9jMF92cGVjb25mMChyZWFkX3ZwZV9jMF92cGVjb25mMCgpIHwgVlBFQ09ORjBfVlBBKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX2ludC5jCmluZGV4IGZiMjVlMDMuLmEwMjBhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9hdGxhcy9hdGxhc19pbnQuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfaW50LmMKQEAgLTEsNiArMSw4IEBACiAvKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwNiAgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4KKyAqCUFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKglBdXRob3JzOiBDYXJzdGVuIExhbmdnYWFyZCA8Y2Fyc3RlbmxAbWlwcy5jb20+CisgKgkJIE1hY2llaiBXLiBSb3p5Y2tpIDxtYWNyb0BtaXBzLmNvbT4KICAqCiAgKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICAqCkBAIC0yNSwxNyArMjcsMjAgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbF9zdGF0Lmg+CiAKLSNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2dkYi1zdHViLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycV9jcHUuaD4KKyNpbmNsdWRlIDxhc20vbXNjMDFfaWMuaD4KKwogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9hdGxhcy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9hdGxhc2ludC5oPgotI2luY2x1ZGUgPGFzbS9nZGItc3R1Yi5oPgotCisjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaD4KIAogc3RhdGljIHN0cnVjdCBhdGxhc19pY3RybF9yZWdzICphdGxhc19odzBfaWNyZWdzOwogCkBAIC00NywxMyArNTIsMTMgQEAKIAogdm9pZCBkaXNhYmxlX2F0bGFzX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQogewotCWF0bGFzX2h3MF9pY3JlZ3MtPmludHJzdGVuID0gKDEgPDwgKGlycV9uci1BVExBU0lOVF9CQVNFKSk7CisJYXRsYXNfaHcwX2ljcmVncy0+aW50cnN0ZW4gPSAxIDw8IChpcnFfbnIgLSBBVExBU19JTlRfQkFTRSk7CiAJaW9iKCk7CiB9CiAKIHZvaWQgZW5hYmxlX2F0bGFzX2lycSh1bnNpZ25lZCBpbnQgaXJxX25yKQogewotCWF0bGFzX2h3MF9pY3JlZ3MtPmludHNldGVuID0gKDEgPDwgKGlycV9uci1BVExBU0lOVF9CQVNFKSk7CisJYXRsYXNfaHcwX2ljcmVncy0+aW50c2V0ZW4gPSAxIDw8IChpcnFfbnIgLSBBVExBU19JTlRfQkFTRSk7CiAJaW9iKCk7CiB9CiAKQEAgLTEwNyw3ICsxMTIsNyBAQAogCWlmICh1bmxpa2VseShpbnRfc3RhdHVzID09IDApKQogCQlyZXR1cm47CiAKLQlpcnEgPSBBVExBU0lOVF9CQVNFICsgbHMxYml0MzIoaW50X3N0YXR1cyk7CisJaXJxID0gQVRMQVNfSU5UX0JBU0UgKyBsczFiaXQzMihpbnRfc3RhdHVzKTsKIAogCURFQlVHX0lOVCgiYXRsYXNfaHcwX2lycWRpc3BhdGNoOiBpcnE9JWRcbiIsIGlycSk7CiAKQEAgLTE2MSwxNSArMTY2LDE0IEBACiB9CiAKIC8qCi0gKiBJUlFzIG9uIHRoZSBBdGxhcyBib2FyZCBsb29rIGJhc2ljYWxseSAoYmFycmluZyBzb2Z0d2FyZSBJUlFzIHdoaWNoIHdlCi0gKiBkb24ndCB1c2UgYXQgYWxsIGFuZCBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0IHNvdXJjZXMgYXJlIGNvbWJpbmVkIHRvZ2V0aGVyCi0gKiBvbiBoYXJkd2FyZSBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpIGxpa2U6CisgKiBJUlFzIG9uIHRoZSBBdGxhcyBib2FyZCBsb29rIGJhc2ljYWxseSBsaWtlIChhbGwgZXh0ZXJuYWwgaW50ZXJydXB0CisgKiBzb3VyY2VzIGFyZSBjb21iaW5lZCB0b2dldGhlciBvbiBoYXJkd2FyZSBpbnRlcnJ1cHQgMCAoTUlQUyBJUlEgMikpOgogICoKLSAqCU1JUFMgSVJRCVNvdXJjZQorICogICAgICBNSVBTIElSUSAgICAgICAgU291cmNlCiAgKiAgICAgIC0tLS0tLS0tICAgICAgICAtLS0tLS0KLSAqICAgICAgICAgICAgIDAJU29mdHdhcmUgKGlnbm9yZWQpCi0gKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAoaWdub3JlZCkKLSAqICAgICAgICAgICAgIDIgICAgICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdCAoaHcwKQorICogICAgICAgICAgICAgMCAgICAgICAgU29mdHdhcmUgMCAocmVzY2hlZHVsZSBJUEkgb24gTVQpCisgKiAgICAgICAgICAgICAxICAgICAgICBTb2Z0d2FyZSAxIChyZW1vdGUgY2FsbCBJUEkgb24gTVQpCisgKiAgICAgICAgICAgICAyICAgICAgICBDb21iaW5lZCBBdGxhcyBoYXJkd2FyZSBpbnRlcnJ1cHQgKGh3MCkKICAqICAgICAgICAgICAgIDMgICAgICAgIEhhcmR3YXJlIChpZ25vcmVkKQogICogICAgICAgICAgICAgNCAgICAgICAgSGFyZHdhcmUgKGlnbm9yZWQpCiAgKiAgICAgICAgICAgICA1ICAgICAgICBIYXJkd2FyZSAoaWdub3JlZCkKQEAgLTE3OSw3ICsxODMsNyBAQAogICogV2UgaGFuZGxlIHRoZSBJUlEgYWNjb3JkaW5nIHRvIF9vdXJfIHByaW9yaXR5IHdoaWNoIGlzOgogICoKICAqIEhpZ2hlc3QgLS0tLSAgICAgUjRrIFRpbWVyCi0gKiBMb3dlc3QgIC0tLS0gICAgIENvbWJpbmVkIGhhcmR3YXJlIGludGVycnVwdAorICogTG93ZXN0ICAtLS0tICAgICBTb2Z0d2FyZSAwCiAgKgogICogdGhlbiB3ZSBqdXN0IHJldHVybiwgaWYgbXVsdGlwbGUgSVJRcyBhcmUgcGVuZGluZyB0aGVuIHdlIHdpbGwganVzdCB0YWtlCiAgKiBhbm90aGVyIGV4Y2VwdGlvbiwgYmlnIGRlYWwuCkBAIC0xOTMsMTcgKzE5NywxOSBAQAogCiAJaWYgKGlycSA9PSBNSVBTQ1BVX0lOVF9BVExBUykKIAkJYXRsYXNfaHcwX2lycWRpc3BhdGNoKHJlZ3MpOwotCWVsc2UgaWYgKGlycSA+IDApCisJZWxzZSBpZiAoaXJxID49IDApCiAJCWRvX0lSUShNSVBTQ1BVX0lOVF9CQVNFICsgaXJxLCByZWdzKTsKIAllbHNlCiAJCXNwdXJpb3VzX2ludGVycnVwdChyZWdzKTsKIH0KIAotdm9pZCBfX2luaXQgYXJjaF9pbml0X2lycSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfYXRsYXNfaXJxcyAoaW50IGJhc2UpCiB7CiAJaW50IGk7CiAKLQlhdGxhc19odzBfaWNyZWdzID0gKHN0cnVjdCBhdGxhc19pY3RybF9yZWdzICopaW9yZW1hcCAoQVRMQVNfSUNUUkxfUkVHU19CQVNFLCBzaXplb2Yoc3RydWN0IGF0bGFzX2ljdHJsX3JlZ3MgKikpOworCWF0bGFzX2h3MF9pY3JlZ3MgPSAoc3RydWN0IGF0bGFzX2ljdHJsX3JlZ3MgKikKKwkJCSAgIGlvcmVtYXAoQVRMQVNfSUNUUkxfUkVHU19CQVNFLAorCQkJCSAgIHNpemVvZihzdHJ1Y3QgYXRsYXNfaWN0cmxfcmVncyAqKSk7CiAKIAkvKgogCSAqIE1hc2sgb3V0IGFsbCBpbnRlcnJ1cHQgYnkgd3JpdGluZyAiMSIgdG8gYWxsIGJpdCBwb3NpdGlvbiBpbgpAQCAtMjExLDcgKzIxNyw3IEBACiAJICovCiAJYXRsYXNfaHcwX2ljcmVncy0+aW50cnN0ZW4gPSAweGZmZmZmZmZmOwogCi0JZm9yIChpID0gQVRMQVNJTlRfQkFTRTsgaSA8PSBBVExBU0lOVF9FTkQ7IGkrKykgeworCWZvciAoaSA9IEFUTEFTX0lOVF9CQVNFOyBpIDw9IEFUTEFTX0lOVF9FTkQ7IGkrKykgewogCQlpcnFfZGVzY1tpXS5zdGF0dXMJPSBJUlFfRElTQUJMRUQ7CiAJCWlycV9kZXNjW2ldLmFjdGlvbgk9IDA7CiAJCWlycV9kZXNjW2ldLmRlcHRoCT0gMTsKQEAgLTIxOSwzICsyMjUsNjIgQEAKIAkJc3Bpbl9sb2NrX2luaXQoJmlycV9kZXNjW2ldLmxvY2spOwogCX0KIH0KKworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gYXRsYXNpcnEgPSB7CisJLmhhbmRsZXIgPSBub19hY3Rpb24sCisJLm5hbWUgPSAiQXRsYXMgY2FzY2FkZSIKK307CisKK21zY19pcnFtYXBfdCBfX2luaXRkYXRhIG1zY19pcnFtYXBbXSA9IHsKKwl7TVNDMDFDX0lOVF9UTVIsCQlNU0MwMV9JUlFfRURHRSwgMH0sCisJe01TQzAxQ19JTlRfUENJLAkJTVNDMDFfSVJRX0xFVkVMLCAwfSwKK307CitpbnQgX19pbml0ZGF0YSBtc2NfbnJfaXJxcyA9IHNpemVvZihtc2NfaXJxbWFwKSAvIHNpemVvZigqbXNjX2lycW1hcCk7CisKK21zY19pcnFtYXBfdCBfX2luaXRkYXRhIG1zY19laWNpcnFtYXBbXSA9IHsKKwl7TVNDMDFFX0lOVF9TVzAsCQlNU0MwMV9JUlFfTEVWRUwsIDB9LAorCXtNU0MwMUVfSU5UX1NXMSwJCU1TQzAxX0lSUV9MRVZFTCwgMH0sCisJe01TQzAxRV9JTlRfQVRMQVMsCQlNU0MwMV9JUlFfTEVWRUwsIDB9LAorCXtNU0MwMUVfSU5UX1RNUiwJCU1TQzAxX0lSUV9FREdFLCAwfSwKKwl7TVNDMDFFX0lOVF9QQ0ksCQlNU0MwMV9JUlFfTEVWRUwsIDB9LAorCXtNU0MwMUVfSU5UX1BFUkZDVFIsCQlNU0MwMV9JUlFfTEVWRUwsIDB9LAorCXtNU0MwMUVfSU5UX0NQVUNUUiwJCU1TQzAxX0lSUV9MRVZFTCwgMH0KK307CitpbnQgX19pbml0ZGF0YSBtc2NfbnJfZWljaXJxcyA9IHNpemVvZihtc2NfZWljaXJxbWFwKSAvIHNpemVvZigqbXNjX2VpY2lycW1hcCk7CisKK3ZvaWQgX19pbml0IGFyY2hfaW5pdF9pcnEodm9pZCkKK3sKKwlpbml0X2F0bGFzX2lycXMoQVRMQVNfSU5UX0JBU0UpOworCisJaWYgKCFjcHVfaGFzX3ZlaWMpCisJCW1pcHNfY3B1X2lycV9pbml0KE1JUFNDUFVfSU5UX0JBU0UpOworCisJc3dpdGNoKG1pcHNfcmV2aXNpb25fY29yaWQpIHsKKwljYXNlIE1JUFNfUkVWSVNJT05fQ09SSURfQ09SRV9NU0M6CisJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTI6CisJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfRlBHQTM6CisJY2FzZSBNSVBTX1JFVklTSU9OX0NPUklEX0NPUkVfMjRLOgorCWNhc2UgTUlQU19SRVZJU0lPTl9DT1JJRF9DT1JFX0VNVUxfTVNDOgorCQlpZiAoY3B1X2hhc192ZWljKQorCQkJaW5pdF9tc2NfaXJxcyAoTVNDMDFFX0lOVF9CQVNFLAorCQkJCSAgICAgICBtc2NfZWljaXJxbWFwLCBtc2NfbnJfZWljaXJxcyk7CisJCWVsc2UKKwkJCWluaXRfbXNjX2lycXMgKE1TQzAxQ19JTlRfQkFTRSwKKwkJCQkgICAgICAgbXNjX2lycW1hcCwgbXNjX25yX2lycXMpOworCX0KKworCisJaWYgKGNwdV9oYXNfdmVpYykgeworCQlzZXRfdmlfaGFuZGxlciAoTVNDMDFFX0lOVF9BVExBUywgYXRsYXNfaHcwX2lycWRpc3BhdGNoKTsKKwkJc2V0dXBfaXJxIChNU0MwMUVfSU5UX0JBU0UgKyBNU0MwMUVfSU5UX0FUTEFTLCAmYXRsYXNpcnEpOworCX0gZWxzZSBpZiAoY3B1X2hhc192aW50KSB7CisJCXNldF92aV9oYW5kbGVyIChNSVBTQ1BVX0lOVF9BVExBUywgYXRsYXNfaHcwX2lycWRpc3BhdGNoKTsKKyNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCisJCXNldHVwX2lycV9zbXRjIChNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU0NQVV9JTlRfQVRMQVMsCisJCQkJJmF0bGFzaXJxLCAoMHgxMDAgPDwgTUlQU0NQVV9JTlRfQVRMQVMpKTsKKyNlbHNlIC8qIE5vdCBTTVRDICovCisJCXNldHVwX2lycShNSVBTQ1BVX0lOVF9CQVNFICsgTUlQU0NQVV9JTlRfQVRMQVMsICZhdGxhc2lycSk7CisjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLworCX0gZWxzZQorCQlzZXR1cF9pcnEoTUlQU0NQVV9JTlRfQkFTRSArIE1JUFNDUFVfSU5UX0FUTEFTLCAmYXRsYXNpcnEpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2F0bGFzL2F0bGFzX3NldHVwLmMgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYwppbmRleCA5ODcxYTkxLi4wYzZiMGNlIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvYXRsYXMvYXRsYXNfc2V0dXAuYwpAQCAtNzcsNyArNzcsNyBAQAogI2Vsc2UKIAlzLmlvYmFzZSA9IEFUTEFTX1VBUlRfUkVHU19CQVNFKzM7CiAjZW5kaWYKLQlzLmlycSA9IEFUTEFTSU5UX1VBUlQ7CisJcy5pcnEgPSBBVExBU19JTlRfVUFSVDsKIAlzLnVhcnRjbGsgPSBBVExBU19CQVNFX0JBVUQgKiAxNjsKIAlzLmZsYWdzID0gVVBGX0JPT1RfQVVUT0NPTkYgfCBVUEZfU0tJUF9URVNUIHwgVVBGX0FVVE9fSVJROwogCXMuaW90eXBlID0gVVBJT19QT1JUOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jIGIvYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvdGltZS5jCmluZGV4IDU1N2JmOTYuLjhkMTU4NjEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9taXBzLWJvYXJkcy9nZW5lcmljL3RpbWUuYworKysgYi9hcmNoL21pcHMvbWlwcy1ib2FyZHMvZ2VuZXJpYy90aW1lLmMKQEAgLTQxLDggKzQxLDEzIEBACiAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oPgogI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9wcm9tLmg+CisKKyNpZmRlZiBDT05GSUdfTUlQU19BVExBUworI2luY2x1ZGUgPGFzbS9taXBzLWJvYXJkcy9hdGxhc2ludC5oPgorI2VuZGlmCisjaWZkZWYgQ09ORklHX01JUFNfTUFMVEEKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvbWFsdGFpbnQuaD4KLSNpbmNsdWRlIDxhc20vbWMxNDY4MTgtdGltZS5oPgorI2VuZGlmCiAKIHVuc2lnbmVkIGxvbmcgY3B1X2toejsKIApAQCAtOTIsMTAgKzk3LDkgQEAKIGlycXJldHVybl90IG1pcHNfdGltZXJfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKLQlpbnQgcjIgPSBjcHVfaGFzX21pcHNfcjI7CiAKICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCi0gICAgICAgIC8qCisJLyoKIAkgKiAgSW4gYW4gU01UQyBzeXN0ZW0sIG9uZSBDb3VudC9Db21wYXJlIHNldCBleGlzdHMgcGVyIFZQRS4KIAkgKiAgV2hpY2ggVEMgd2l0aGluIGEgVlBFIGdldHMgdGhlIGludGVycnVwdCBpcyBlc3NlbnRpYWxseQogCSAqICByYW5kb20gLSB3ZSBvbmx5IGtub3cgdGhhdCBpdCBzaG91bGRuJ3QgYmUgb25lIHdpdGgKQEAgLTEwOCwyOSArMTEyLDQ2IEBACiAJICogIHRoZSBnZW5lcmFsIE1JUFMgdGltZXJfaW50ZXJydXB0IHJvdXRpbmUuCiAJICovCiAKKwlpbnQgdnBmbGFnczsKKwogCS8qCi0JICogRFZQRSBpcyBuZWNlc3Nhcnkgc28gbG9uZyBhcyBjcm9zcy1WUEUgaW50ZXJydXB0cwotCSAqIGFyZSBkb25lIHZpYSByZWFkLW1vZGlmeS13cml0ZSBvZiBDYXVzZSByZWdpc3Rlci4KKwkgKiBXZSBjb3VsZCBiZSBoZXJlIGR1ZSB0byB0aW1lciBpbnRlcnJ1cHQsCisJICogcGVyZiBjb3VudGVyIG92ZXJmbG93LCBvciBib3RoLgogCSAqLwotCWludCB2cGZsYWdzID0gZHZwZSgpOwotCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSAtIDEpOwotCWNsZWFyX2MwX2NhdXNlKENQVUNUUl9JTUFTS0JJVCk7Ci0JZXZwZSh2cGZsYWdzKTsKKwlpZiAocmVhZF9jMF9jYXVzZSgpICYgKDEgPDwgMjYpKQorCQlwZXJmX2lycShyZWdzKTsKIAotCWlmIChjcHVfZGF0YVtjcHVdLnZwZV9pZCA9PSAwKSB7Ci0JCXRpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7Ci0JCXNjcm9sbF9kaXNwbGF5X21lc3NhZ2UoKTsKLQl9IGVsc2UKLQkJd3JpdGVfYzBfY29tcGFyZSAocmVhZF9jMF9jb3VudCgpICsgKCBtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKLQlzbXRjX3RpbWVyX2Jyb2FkY2FzdChjcHVfZGF0YVtjcHVdLnZwZV9pZCk7Ci0KLQlpZiAoY3B1ICE9IDApCisJaWYgKHJlYWRfYzBfY2F1c2UoKSAmICgxIDw8IDMwKSkgeworCQkvKiBJZiB0aW1lciBpbnRlcnJ1cHQsIG1ha2UgaXQgZGUtYXNzZXJ0ICovCisJCXdyaXRlX2MwX2NvbXBhcmUgKHJlYWRfYzBfY291bnQoKSAtIDEpOwogCQkvKgotCQkgKiBPdGhlciBDUFVzIHNob3VsZCBkbyBwcm9maWxpbmcgYW5kIHByb2Nlc3MgYWNjb3VudGluZworCQkgKiBEVlBFIGlzIG5lY2Vzc2FyeSBzbyBsb25nIGFzIGNyb3NzLVZQRSBpbnRlcnJ1cHRzCisJCSAqIGFyZSBkb25lIHZpYSByZWFkLW1vZGlmeS13cml0ZSBvZiBDYXVzZSByZWdpc3Rlci4KIAkJICovCi0JCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7Ci0KKwkJdnBmbGFncyA9IGR2cGUoKTsKKwkJY2xlYXJfYzBfY2F1c2UoQ1BVQ1RSX0lNQVNLQklUKTsKKwkJZXZwZSh2cGZsYWdzKTsKKwkJLyoKKwkJICogVGhlcmUgYXJlIHRoaW5ncyB3ZSBvbmx5IHdhbnQgdG8gZG8gb25jZSBwZXIgdGljaworCQkgKiBpbiBhbiAiTVAiIHN5c3RlbS4gICBPbmUgVEMgb2YgZWFjaCBWUEUgd2lsbCB0YWtlCisJCSAqIHRoZSBhY3R1YWwgdGltZXIgaW50ZXJydXB0LiAgVGhlIG90aGVycyB3aWxsIGdldAorCQkgKiB0aW1lciBicm9hZGNhc3QgSVBJcy4gV2UgdXNlIHdob2V2ZXIgaXQgaXMgdGhhdCB0YWtlcworCQkgKiB0aGUgdGljayBvbiBWUEUgMCB0byBydW4gdGhlIGZ1bGwgdGltZXJfaW50ZXJydXB0KCkuCisJCSAqLworCQlpZiAoY3B1X2RhdGFbY3B1XS52cGVfaWQgPT0gMCkgeworCQkJCXRpbWVyX2ludGVycnVwdChpcnEsIE5VTEwsIHJlZ3MpOworCQkJCXNtdGNfdGltZXJfYnJvYWRjYXN0KGNwdV9kYXRhW2NwdV0udnBlX2lkKTsKKwkJCQlzY3JvbGxfZGlzcGxheV9tZXNzYWdlKCk7CisJCX0gZWxzZSB7CisJCQl3cml0ZV9jMF9jb21wYXJlKHJlYWRfYzBfY291bnQoKSArCisJCQkgICAgICAgICAgICAgICAgIChtaXBzX2hwdF9mcmVxdWVuY3kvSFopKTsKKwkJCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CisJCQlzbXRjX3RpbWVyX2Jyb2FkY2FzdChjcHVfZGF0YVtjcHVdLnZwZV9pZCk7CisJCX0KKwl9CiAjZWxzZSAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCisJaW50IHIyID0gY3B1X2hhc19taXBzX3IyOworCiAJaWYgKGNwdSA9PSAwKSB7CiAJCS8qCiAJCSAqIENQVSAwIGhhbmRsZXMgdGhlIGdsb2JhbCB0aW1lciBpbnRlcnJ1cHQgam9iIGFuZCBwcm9jZXNzCkBAIC0xNjEsOSArMTgyLDggQEAKIAkJICovCiAJCWxvY2FsX3RpbWVyX2ludGVycnVwdChpcnEsIGRldl9pZCwgcmVncyk7CiAJfQotI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KLQogb3V0OgorI2VuZGlmIC8qIENPTkZJR19NSVBTX01UX1NNVEMgKi8KIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXIzay5jIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKaW5kZXggYmIwNDFhMi4uZTFmMzVlZiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjNrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjNrLmMKQEAgLTMzNSw3ICszMzUsNyBAQAogCWZsdXNoX2NhY2hlX21tID0gcjNrX2ZsdXNoX2NhY2hlX21tOwogCWZsdXNoX2NhY2hlX3JhbmdlID0gcjNrX2ZsdXNoX2NhY2hlX3JhbmdlOwogCWZsdXNoX2NhY2hlX3BhZ2UgPSByM2tfZmx1c2hfY2FjaGVfcGFnZTsKLQlmbHVzaF9pY2FjaGVfcGFnZSA9IHIza19mbHVzaF9pY2FjaGVfcGFnZTsKKwlfX2ZsdXNoX2ljYWNoZV9wYWdlID0gcjNrX2ZsdXNoX2ljYWNoZV9wYWdlOwogCWZsdXNoX2ljYWNoZV9yYW5nZSA9IHIza19mbHVzaF9pY2FjaGVfcmFuZ2U7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcCA9IHIza19mbHVzaF9jYWNoZV9zaWd0cmFtcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggMDY5ODAzZi4uMGIyZGE1MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlibGFzdF9kY2FjaGUzMl9wYWdlKGFkZHIpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcjRrX2JsYXN0X2RjYWNoZV9wYWdlX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X2RjYWNoZV9wYWdlX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyAgZGNfbHNpemUgPSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0xMDMsNyArMTAzLDcgQEAKIAogc3RhdGljIHZvaWQgKCogcjRrX2JsYXN0X2RjYWNoZV9wYWdlX2luZGV4ZWQpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByNGtfYmxhc3RfZGNhY2hlX3BhZ2VfaW5kZXhlZF9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHI0a19ibGFzdF9kY2FjaGVfcGFnZV9pbmRleGVkX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBkY19sc2l6ZSA9IGNwdV9kY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTExNyw3ICsxMTcsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3RfZGNhY2hlKSh2b2lkKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHI0a19ibGFzdF9kY2FjaGVfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3RfZGNhY2hlX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBkY19sc2l6ZSA9IGNwdV9kY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTIwMiw3ICsyMDIsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3RfaWNhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByNGtfYmxhc3RfaWNhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3RfaWNhY2hlX3BhZ2Vfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGljX2xzaXplID0gY3B1X2ljYWNoZV9saW5lX3NpemUoKTsKIApAQCAtMjE5LDcgKzIxOSw3IEBACiAKIHN0YXRpYyB2b2lkICgqIHI0a19ibGFzdF9pY2FjaGVfcGFnZV9pbmRleGVkKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcjRrX2JsYXN0X2ljYWNoZV9wYWdlX2luZGV4ZWRfc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCByNGtfYmxhc3RfaWNhY2hlX3BhZ2VfaW5kZXhlZF9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaWNfbHNpemUgPSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0yNDMsNyArMjQzLDcgQEAKIAogc3RhdGljIHZvaWQgKCogcjRrX2JsYXN0X2ljYWNoZSkodm9pZCk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByNGtfYmxhc3RfaWNhY2hlX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X2ljYWNoZV9zZXR1cCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaWNfbHNpemUgPSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpOwogCkBAIC0yNjQsNyArMjY0LDcgQEAKIAogc3RhdGljIHZvaWQgKCogcjRrX2JsYXN0X3NjYWNoZV9wYWdlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcjRrX2JsYXN0X3NjYWNoZV9wYWdlX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X3NjYWNoZV9wYWdlX3NldHVwKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBzY19sc2l6ZSA9IGNwdV9zY2FjaGVfbGluZV9zaXplKCk7CiAKQEAgLTI4Miw3ICsyODIsNyBAQAogCiBzdGF0aWMgdm9pZCAoKiByNGtfYmxhc3Rfc2NhY2hlX3BhZ2VfaW5kZXhlZCkodW5zaWduZWQgbG9uZyBhZGRyKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHI0a19ibGFzdF9zY2FjaGVfcGFnZV9pbmRleGVkX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgcjRrX2JsYXN0X3NjYWNoZV9wYWdlX2luZGV4ZWRfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIApAQCAtMzAwLDcgKzMwMCw3IEBACiAKIHN0YXRpYyB2b2lkICgqIHI0a19ibGFzdF9zY2FjaGUpKHZvaWQpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcjRrX2JsYXN0X3NjYWNoZV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHI0a19ibGFzdF9zY2FjaGVfc2V0dXAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNjX2xzaXplID0gY3B1X3NjYWNoZV9saW5lX3NpemUoKTsKIApAQCAtNDc1LDcgKzQ3NSw3IEBACiAJCX0KIAl9CiAJaWYgKGV4ZWMpIHsKLQkJaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUpIHsKKwkJaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUgJiYgbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKSB7CiAJCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJCQlpZiAoY3B1X2NvbnRleHQoY3B1LCBtbSkgIT0gMCkKQEAgLTU5OSw3ICs1OTksNyBAQAogCSAqIFdlJ3JlIG5vdCBzdXJlIG9mIHRoZSB2aXJ0dWFsIGFkZHJlc3MoZXMpIGludm9sdmVkIGhlcmUsIHNvCiAJICogd2UgaGF2ZSB0byBmbHVzaCB0aGUgZW50aXJlIEktY2FjaGUuCiAJICovCi0JaWYgKGNwdV9oYXNfdnRhZ19pY2FjaGUpIHsKKwlpZiAoY3B1X2hhc192dGFnX2ljYWNoZSAmJiB2bWEtPnZtX21tID09IGN1cnJlbnQtPmFjdGl2ZV9tbSkgewogCQlpbnQgY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCiAJCWlmIChjcHVfY29udGV4dChjcHUsIHZtYS0+dm1fbW0pICE9IDApCkBAIC0xMjIxLDcgKzEyMjEsNyBAQAogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNvaGVyZW5jeV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGNvaGVyZW5jeV9zZXR1cCh2b2lkKQogewogCWNoYW5nZV9jMF9jb25maWcoQ09ORl9DTV9DTUFTSywgQ09ORl9DTV9ERUZBVUxUKTsKIApAQCAtMTI0Miw3ICsxMjQyLDcgQEAKIAkJY2xlYXJfYzBfY29uZmlnKENPTkZfQ1UpOwogCQlicmVhazsKIAkvKgotCSAqIFdlIG5lZWQgdG8gY2F0Y2ggdGhlIGVhbHJ5IEFsY2hlbXkgU09DcyB3aXRoCisJICogV2UgbmVlZCB0byBjYXRjaCB0aGUgZWFybHkgQWxjaGVteSBTT0NzIHdpdGgKIAkgKiB0aGUgd3JpdGUtb25seSBjb19jb25maWcub2QgYml0IGFuZCBzZXQgaXQgYmFjayB0byBvbmUuLi4KIAkgKi8KIAljYXNlIENQVV9BVTEwMDA6IC8qIHJldi4gREEsIEhBLCBIQiAqLwpAQCAtMTI5MSw3ICsxMjkxLDcgQEAKIAlfX2ZsdXNoX2NhY2hlX2FsbAk9IHI0a19fX2ZsdXNoX2NhY2hlX2FsbDsKIAlmbHVzaF9jYWNoZV9tbQkJPSByNGtfZmx1c2hfY2FjaGVfbW07CiAJZmx1c2hfY2FjaGVfcGFnZQk9IHI0a19mbHVzaF9jYWNoZV9wYWdlOwotCWZsdXNoX2ljYWNoZV9wYWdlCT0gcjRrX2ZsdXNoX2ljYWNoZV9wYWdlOworCV9fZmx1c2hfaWNhY2hlX3BhZ2UJPSByNGtfZmx1c2hfaWNhY2hlX3BhZ2U7CiAJZmx1c2hfY2FjaGVfcmFuZ2UJPSByNGtfZmx1c2hfY2FjaGVfcmFuZ2U7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcAk9IHI0a19mbHVzaF9jYWNoZV9zaWd0cmFtcDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXNiMS5jIGIvYXJjaC9taXBzL21tL2Mtc2IxLmMKaW5kZXggMmQ3MWVmYi4uMTZiYWQ3YyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2Mtc2IxLmMKKysrIGIvYXJjaC9taXBzL21tL2Mtc2IxLmMKQEAgLTE1NSw2ICsxNTUsMjYgQEAKIH0KIAogLyoKKyAqIEludmFsaWRhdGUgYSByYW5nZSBvZiB0aGUgaWNhY2hlLiAgVGhlIGFkZHJlc3NlcyBhcmUgdmlydHVhbCwgYW5kCisgKiB0aGUgY2FjaGUgaXMgdmlydHVhbGx5IGluZGV4ZWQgYW5kIHRhZ2dlZC4gIEhvd2V2ZXIsIHdlIGRvbid0CisgKiBuZWNlc3NhcmlseSBoYXZlIHRoZSByaWdodCBBU0lEIGNvbnRleHQsIHNvIHVzZSBpbmRleCBvcHMgaW5zdGVhZAorICogb2YgaGl0IG9wcy4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIF9fc2IxX2ZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCXVuc2lnbmVkIGxvbmcgZW5kKQoreworCXN0YXJ0ICY9IH4oaWNhY2hlX2xpbmVfc2l6ZSAtIDEpOworCWVuZCA9IChlbmQgKyBpY2FjaGVfbGluZV9zaXplIC0gMSkgJiB+KGljYWNoZV9saW5lX3NpemUgLSAxKTsKKworCXdoaWxlIChzdGFydCAhPSBlbmQpIHsKKwkJY2FjaGVfc2V0X29wKEluZGV4X0ludmFsaWRhdGVfSSwgc3RhcnQgJiBpY2FjaGVfaW5kZXhfbWFzayk7CisJCXN0YXJ0ICs9IGljYWNoZV9saW5lX3NpemU7CisJfQorCW1pc3ByZWRpY3QoKTsKKwlzeW5jKCk7Cit9CisKKy8qCiAgKiBGbHVzaCB0aGUgaWNhY2hlIGZvciBhIGdpdmVuIHBoeXNpY2FsIHBhZ2UuICBOZWVkIHRvIHdyaXRlYmFjayB0aGUKICAqIGRjYWNoZSBmaXJzdCwgdGhlbiBpbnZhbGlkYXRlIHRoZSBpY2FjaGUuICBJZiB0aGUgcGFnZSBpc24ndAogICogZXhlY3V0YWJsZSwgbm90aGluZyBpcyByZXF1aXJlZC4KQEAgLTE3Myw4ICsxOTMsMTEgQEAKIAkvKgogCSAqIEJ1bXBpbmcgdGhlIEFTSUQgaXMgcHJvYmFibHkgY2hlYXBlciB0aGFuIHRoZSBmbHVzaCAuLi4KIAkgKi8KLQlpZiAoY3B1X2NvbnRleHQoY3B1LCB2bWEtPnZtX21tKSAhPSAwKQotCQlkcm9wX21tdV9jb250ZXh0KHZtYS0+dm1fbW0sIGNwdSk7CisJaWYgKHZtYS0+dm1fbW0gPT0gY3VycmVudC0+YWN0aXZlX21tKSB7CisJCWlmIChjcHVfY29udGV4dChjcHUsIHZtYS0+dm1fbW0pICE9IDApCisJCQlkcm9wX21tdV9jb250ZXh0KHZtYS0+dm1fbW0sIGNwdSk7CisJfSBlbHNlCisJCV9fc2IxX2ZsdXNoX2ljYWNoZV9yYW5nZShhZGRyLCBhZGRyICsgUEFHRV9TSVpFKTsKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTIxMCwyNiArMjMzLDYgQEAKIAlfX2F0dHJpYnV0ZV9fKChhbGlhcygibG9jYWxfc2IxX2ZsdXNoX2NhY2hlX3BhZ2UiKSkpOwogI2VuZGlmCiAKLS8qCi0gKiBJbnZhbGlkYXRlIGEgcmFuZ2Ugb2YgdGhlIGljYWNoZS4gIFRoZSBhZGRyZXNzZXMgYXJlIHZpcnR1YWwsIGFuZAotICogdGhlIGNhY2hlIGlzIHZpcnR1YWxseSBpbmRleGVkIGFuZCB0YWdnZWQuICBIb3dldmVyLCB3ZSBkb24ndAotICogbmVjZXNzYXJpbHkgaGF2ZSB0aGUgcmlnaHQgQVNJRCBjb250ZXh0LCBzbyB1c2UgaW5kZXggb3BzIGluc3RlYWQKLSAqIG9mIGhpdCBvcHMuCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBfX3NiMV9mbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwKLQl1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlzdGFydCAmPSB+KGljYWNoZV9saW5lX3NpemUgLSAxKTsKLQllbmQgPSAoZW5kICsgaWNhY2hlX2xpbmVfc2l6ZSAtIDEpICYgfihpY2FjaGVfbGluZV9zaXplIC0gMSk7Ci0KLQl3aGlsZSAoc3RhcnQgIT0gZW5kKSB7Ci0JCWNhY2hlX3NldF9vcChJbmRleF9JbnZhbGlkYXRlX0ksIHN0YXJ0ICYgaWNhY2hlX2luZGV4X21hc2spOwotCQlzdGFydCArPSBpY2FjaGVfbGluZV9zaXplOwotCX0KLQltaXNwcmVkaWN0KCk7Ci0Jc3luYygpOwotfQotCiAKIC8qCiAgKiBJbnZhbGlkYXRlIGFsbCBjYWNoZXMgb24gdGhpcyBDUFUKQEAgLTMyNiw5ICszMjksMTIgQEAKIAkgKiBJZiB0aGVyZSdzIGEgY29udGV4dCwgYnVtcCB0aGUgQVNJRCAoY2hlYXBlciB0aGFuIGEgZmx1c2gsCiAJICogc2luY2Ugd2UgZG9uJ3Qga25vdyBWQXMhKQogCSAqLwotCWlmIChjcHVfY29udGV4dChjcHUsIHZtYS0+dm1fbW0pICE9IDApIHsKLQkJZHJvcF9tbXVfY29udGV4dCh2bWEtPnZtX21tLCBjcHUpOwotCX0KKwlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKKwkJaWYgKGNwdV9jb250ZXh0KGNwdSwgdm1hLT52bV9tbSkgIT0gMCkKKwkJCWRyb3BfbW11X2NvbnRleHQodm1hLT52bV9tbSwgY3B1KTsKKwl9IGVsc2UKKwkJX19zYjFfZmx1c2hfaWNhY2hlX3JhbmdlKHN0YXJ0LCBzdGFydCArIFBBR0VfU0laRSk7CisKIH0KIAogI2lmZGVmIENPTkZJR19TTVAKQEAgLTUyMCw3ICs1MjYsNyBAQAogCiAJLyogVGhlc2Ugcm91dGluZXMgYXJlIGZvciBJY2FjaGUgY29oZXJlbmNlIHdpdGggdGhlIERjYWNoZSAqLwogCWZsdXNoX2ljYWNoZV9yYW5nZSA9IHNiMV9mbHVzaF9pY2FjaGVfcmFuZ2U7Ci0JZmx1c2hfaWNhY2hlX3BhZ2UgPSBzYjFfZmx1c2hfaWNhY2hlX3BhZ2U7CisJX19mbHVzaF9pY2FjaGVfcGFnZSA9IHNiMV9mbHVzaF9pY2FjaGVfcGFnZTsKIAlmbHVzaF9pY2FjaGVfYWxsID0gX19zYjFfZmx1c2hfaWNhY2hlX2FsbDsgLyogbG9jYWwgb25seSAqLwogCiAJLyogVGhpcyBpbXBsaWVzIGFuIEljYWNoZSBmbHVzaCB0b28sIHNvIGNhbid0IGJlIG5vcCdlZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2MtdHgzOS5jIGIvYXJjaC9taXBzL21tL2MtdHgzOS5jCmluZGV4IDVkZmM5YjEuLjkzMmEwOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9tbS9jLXR4MzkuYworKysgYi9hcmNoL21pcHMvbW0vYy10eDM5LmMKQEAgLTM4Miw3ICszODIsNyBAQAogCQlmbHVzaF9jYWNoZV9tbQkJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCQlmbHVzaF9jYWNoZV9yYW5nZQk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CiAJCWZsdXNoX2NhY2hlX3BhZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwotCQlmbHVzaF9pY2FjaGVfcGFnZQk9ICh2b2lkICopIHR4MzloX2ZsdXNoX2ljYWNoZV9hbGw7CisJCV9fZmx1c2hfaWNhY2hlX3BhZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCQlmbHVzaF9pY2FjaGVfcmFuZ2UJPSAodm9pZCAqKSB0eDM5aF9mbHVzaF9pY2FjaGVfYWxsOwogCiAJCWZsdXNoX2NhY2hlX3NpZ3RyYW1wCT0gKHZvaWQgKikgdHgzOWhfZmx1c2hfaWNhY2hlX2FsbDsKQEAgLTQwOCw3ICs0MDgsNyBAQAogCQlmbHVzaF9jYWNoZV9tbSA9IHR4MzlfZmx1c2hfY2FjaGVfbW07CiAJCWZsdXNoX2NhY2hlX3JhbmdlID0gdHgzOV9mbHVzaF9jYWNoZV9yYW5nZTsKIAkJZmx1c2hfY2FjaGVfcGFnZSA9IHR4MzlfZmx1c2hfY2FjaGVfcGFnZTsKLQkJZmx1c2hfaWNhY2hlX3BhZ2UgPSB0eDM5X2ZsdXNoX2ljYWNoZV9wYWdlOworCQlfX2ZsdXNoX2ljYWNoZV9wYWdlID0gdHgzOV9mbHVzaF9pY2FjaGVfcGFnZTsKIAkJZmx1c2hfaWNhY2hlX3JhbmdlID0gdHgzOV9mbHVzaF9pY2FjaGVfcmFuZ2U7CiAKIAkJZmx1c2hfY2FjaGVfc2lndHJhbXAgPSB0eDM5X2ZsdXNoX2NhY2hlX3NpZ3RyYW1wOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2NhY2hlLmMgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwppbmRleCBkZGQzYTJkLi40MGM4YjAyIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vY2FjaGUuYworKysgYi9hcmNoL21pcHMvbW0vY2FjaGUuYwpAQCAtMjUsNyArMjUsNyBAQAogdm9pZCAoKmZsdXNoX2NhY2hlX3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHBhZ2UsCiAJdW5zaWduZWQgbG9uZyBwZm4pOwogdm9pZCAoKmZsdXNoX2ljYWNoZV9yYW5nZSkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotdm9pZCAoKmZsdXNoX2ljYWNoZV9wYWdlKShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKnBhZ2UpOwordm9pZCAoKl9fZmx1c2hfaWNhY2hlX3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiAKIC8qIE1JUFMgc3BlY2lmaWMgY2FjaGUgb3BlcmF0aW9ucyAqLwogdm9pZCAoKmZsdXNoX2NhY2hlX3NpZ3RyYW1wKSh1bnNpZ25lZCBsb25nIGFkZHIpOwpAQCAtNzAsNiArNzAsOCBAQAogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gcGFnZV9tYXBwaW5nKHBhZ2UpOwogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAorCWlmIChQYWdlSGlnaE1lbShwYWdlKSkKKwkJcmV0dXJuOwogCWlmIChtYXBwaW5nICYmICFtYXBwaW5nX21hcHBlZChtYXBwaW5nKSkgewogCQlTZXRQYWdlRGNhY2hlRGlydHkocGFnZSk7CiAJCXJldHVybjsKQEAgLTkxLDE2ICs5MywxNiBAQAogewogCXN0cnVjdCBwYWdlICpwYWdlOwogCXVuc2lnbmVkIGxvbmcgcGZuLCBhZGRyOworCWludCBleGVjID0gKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSAmJiAhY3B1X2hhc19pY19maWxsc19mX2RjOwogCiAJcGZuID0gcHRlX3BmbihwdGUpOwotCWlmIChwZm5fdmFsaWQocGZuKSAmJiAocGFnZSA9IHBmbl90b19wYWdlKHBmbiksIHBhZ2VfbWFwcGluZyhwYWdlKSkgJiYKLQkgICAgUGFnZV9kY2FjaGVfZGlydHkocGFnZSkpIHsKLQkJaWYgKHBhZ2VzX2RvX2FsaWFzKCh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlKSwKLQkJICAgICAgICAgICAgICAgICAgIGFkZHJlc3MgJiBQQUdFX01BU0spKSB7Ci0JCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHBhZ2VfYWRkcmVzcyhwYWdlKTsKKwlpZiAodW5saWtlbHkoIXBmbl92YWxpZChwZm4pKSkKKwkJcmV0dXJuOworCXBhZ2UgPSBwZm5fdG9fcGFnZShwZm4pOworCWlmIChwYWdlX21hcHBpbmcocGFnZSkgJiYgUGFnZV9kY2FjaGVfZGlydHkocGFnZSkpIHsKKwkJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwYWdlX2FkZHJlc3MocGFnZSk7CisJCWlmIChleGVjIHx8IHBhZ2VzX2RvX2FsaWFzKGFkZHIsIGFkZHJlc3MgJiBQQUdFX01BU0spKQogCQkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlKGFkZHIpOwotCQl9Ci0KIAkJQ2xlYXJQYWdlRGNhY2hlRGlydHkocGFnZSk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2ZhdWx0LmMgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwppbmRleCBlM2E2MTcyLi44NDIzZDg1IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vZmF1bHQuYworKysgYi9hcmNoL21pcHMvbW0vZmF1bHQuYwpAQCAtODksNyArODksNyBAQAogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9IGVsc2UgewotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFIHwgVk1fRVhFQykpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKQEAgLTE3MSw3ICsxNzEsNyBAQAogICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKHRzay0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdCh0c2spKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYyBiL2FyY2gvbWlwcy9tbS90bGItcjRrLmMKaW5kZXggMmNkZTFiNy4uMmUwZTIxZSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYi1yNGsuYworKysgYi9hcmNoL21pcHMvbW0vdGxiLXI0ay5jCkBAIC0yNiwxMSArMjYsNiBAQAogICovCiAjZGVmaW5lIFVOSVFVRV9FTlRSWUhJKGlkeCkgKENLU0VHMCArICgoaWR4KSA8PCAoUEFHRV9TSElGVCArIDEpKSkKIAotLyogQ1AwIGhhemFyZCBhdm9pZGFuY2UuICovCi0jZGVmaW5lIEJBUlJJRVIgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5zZXQgbm9yZW9yZGVyXG5cdCIgXAotCQkJCSAgICAgIm5vcDsgbm9wOyBub3A7IG5vcDsgbm9wOyBub3A7XG5cdCIgXAotCQkJCSAgICAgIi5zZXQgcmVvcmRlclxuXHQiKQotCiAvKiBBdG9taWNpdHkgYW5kIGludGVycnVwdGFiaWxpdHkgKi8KICNpZmRlZiBDT05GSUdfTUlQU19NVF9TTVRDCiAKQEAgLTEyNiw3ICsxMjEsNyBAQAogCQkJCXN0YXJ0ICs9IChQQUdFX1NJWkUgPDwgMSk7CiAJCQkJbXRjMF90bGJ3X2hhemFyZCgpOwogCQkJCXRsYl9wcm9iZSgpOwotCQkJCUJBUlJJRVI7CisJCQkJdGxiX3Byb2JlX2hhemFyZCgpOwogCQkJCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKIAkJCQl3cml0ZV9jMF9lbnRyeWxvMCgwKTsKIAkJCQl3cml0ZV9jMF9lbnRyeWxvMSgwKTsKQEAgLTE2OCw3ICsxNjMsNyBAQAogCQkJc3RhcnQgKz0gKFBBR0VfU0laRSA8PCAxKTsKIAkJCW10YzBfdGxid19oYXphcmQoKTsKIAkJCXRsYl9wcm9iZSgpOwotCQkJQkFSUklFUjsKKwkJCXRsYl9wcm9iZV9oYXphcmQoKTsKIAkJCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKIAkJCXdyaXRlX2MwX2VudHJ5bG8wKDApOwogCQkJd3JpdGVfYzBfZW50cnlsbzEoMCk7CkBAIC0yMDIsNyArMTk3LDcgQEAKIAkJd3JpdGVfYzBfZW50cnloaShwYWdlIHwgbmV3cGlkKTsKIAkJbXRjMF90bGJ3X2hhemFyZCgpOwogCQl0bGJfcHJvYmUoKTsKLQkJQkFSUklFUjsKKwkJdGxiX3Byb2JlX2hhemFyZCgpOwogCQlpZHggPSByZWFkX2MwX2luZGV4KCk7CiAJCXdyaXRlX2MwX2VudHJ5bG8wKDApOwogCQl3cml0ZV9jMF9lbnRyeWxvMSgwKTsKQEAgLTIzNSw3ICsyMzAsNyBAQAogCXdyaXRlX2MwX2VudHJ5aGkocGFnZSk7CiAJbXRjMF90bGJ3X2hhemFyZCgpOwogCXRsYl9wcm9iZSgpOwotCUJBUlJJRVI7CisJdGxiX3Byb2JlX2hhemFyZCgpOwogCWlkeCA9IHJlYWRfYzBfaW5kZXgoKTsKIAl3cml0ZV9jMF9lbnRyeWxvMCgwKTsKIAl3cml0ZV9jMF9lbnRyeWxvMSgwKTsKQEAgLTI3OSw3ICsyNzQsNyBAQAogCXBnZHAgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIGFkZHJlc3MpOwogCW10YzBfdGxid19oYXphcmQoKTsKIAl0bGJfcHJvYmUoKTsKLQlCQVJSSUVSOworCXRsYl9wcm9iZV9oYXphcmQoKTsKIAlwdWRwID0gcHVkX29mZnNldChwZ2RwLCBhZGRyZXNzKTsKIAlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyZXNzKTsKIAlpZHggPSByZWFkX2MwX2luZGV4KCk7CkBAIC0zMjAsNyArMzE1LDcgQEAKIAlwZ2RwID0gcGdkX29mZnNldCh2bWEtPnZtX21tLCBhZGRyZXNzKTsKIAltdGMwX3RsYndfaGF6YXJkKCk7CiAJdGxiX3Byb2JlKCk7Ci0JQkFSUklFUjsKKwl0bGJfcHJvYmVfaGF6YXJkKCk7CiAJcG1kcCA9IHBtZF9vZmZzZXQocGdkcCwgYWRkcmVzcyk7CiAJaWR4ID0gcmVhZF9jMF9pbmRleCgpOwogCXB0ZXAgPSBwdGVfb2Zmc2V0X21hcChwbWRwLCBhZGRyZXNzKTsKQEAgLTM1MSw3ICszNDYsNyBAQAogCXdpcmVkID0gcmVhZF9jMF93aXJlZCgpOwogCXdyaXRlX2MwX3dpcmVkKHdpcmVkICsgMSk7CiAJd3JpdGVfYzBfaW5kZXgod2lyZWQpOwotCUJBUlJJRVI7CisJdGxid191c2VfaGF6YXJkKCk7CS8qIFdoYXQgaXMgdGhlIGhhemFyZCBoZXJlPyAqLwogCXdyaXRlX2MwX3BhZ2VtYXNrKHBhZ2VtYXNrKTsKIAl3cml0ZV9jMF9lbnRyeWhpKGVudHJ5aGkpOwogCXdyaXRlX2MwX2VudHJ5bG8wKGVudHJ5bG8wKTsKQEAgLTM2MSw3ICszNTYsNyBAQAogCXRsYndfdXNlX2hhemFyZCgpOwogCiAJd3JpdGVfYzBfZW50cnloaShvbGRfY3R4KTsKLQlCQVJSSUVSOworCXRsYndfdXNlX2hhemFyZCgpOwkvKiBXaGF0IGlzIHRoZSBoYXphcmQgaGVyZT8gKi8KIAl3cml0ZV9jMF9wYWdlbWFzayhvbGRfcGFnZW1hc2spOwogCWxvY2FsX2ZsdXNoX3RsYl9hbGwoKTsKIAlFWElUX0NSSVRJQ0FMKGZsYWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYyBiL2FyY2gvbWlwcy9tb21lbnR1bS9vY2Vsb3RfZy9ndC1pcnEuYwppbmRleCA5ZmIyNDkzLi42Y2Q4N2NmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW9tZW50dW0vb2NlbG90X2cvZ3QtaXJxLmMKKysrIGIvYXJjaC9taXBzL21vbWVudHVtL29jZWxvdF9nL2d0LWlycS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKIAkJTVZfV1JJVEUoVElNRVJfQ09VTlRFUl8wXzNfSU5URVJSVVBUX0NBVVNFLCAweDApOwogCiAJCS8qIGhhbmRsZSB0aGUgdGltZXIgY2FsbCAqLwotCQlkb190aW1lcihyZWdzKTsKKwkJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAkJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZSBiL2FyY2gvbWlwcy9wY2kvTWFrZWZpbGUKaW5kZXggMzVkNTkyNy4uZWRlZmE5NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3BjaS9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvcGNpL01ha2VmaWxlCkBAIC0xMSw3ICsxMSw2IEBACiBvYmotJChDT05GSUdfTUlQU19CT05JVE82NCkJKz0gb3BzLWJvbml0bzY0Lm8KIG9iai0kKENPTkZJR19NSVBTX0dUNjQxMTEpCSs9IG9wcy1ndDY0MTExLm8KIG9iai0kKENPTkZJR19NSVBTX0dUNjQxMjApCSs9IG9wcy1ndDY0MTIwLm8KLW9iai0kKENPTkZJR19NSVBTX0dUOTYxMDApCSs9IG9wcy1ndDk2MTAwLm8KIG9iai0kKENPTkZJR19QQ0lfTUFSVkVMTCkJKz0gb3BzLW1hcnZlbGwubwogb2JqLSQoQ09ORklHX01JUFNfTVNDKQkJKz0gb3BzLW1zYy5vCiBvYmotJChDT05GSUdfTUlQU19OSUxFNCkJKz0gb3BzLW5pbGU0Lm8KQEAgLTI4LDggKzI3LDcgQEAKIG9iai0kKENPTkZJR19MQVNBVCkJCSs9IHBjaS1sYXNhdC5vCiBvYmotJChDT05GSUdfTUlQU19BVExBUykJKz0gZml4dXAtYXRsYXMubwogb2JqLSQoQ09ORklHX01JUFNfQ09CQUxUKQkrPSBmaXh1cC1jb2JhbHQubwotb2JqLSQoQ09ORklHX01JUFNfRVY5NjEwMCkJKz0gZml4dXAtZXY2NDEyMC5vCi1vYmotJChDT05GSUdfTUlQU19FVjk2MTAwKQkrPSBmaXh1cC1ldjk2MTAwLm8gcGNpLWV2OTYxMDAubworb2JqLSQoQ09ORklHX01JUFNfRVY2NDEyMCkJKz0gZml4dXAtZXY2NDEyMC5vCiBvYmotJChDT05GSUdfTUlQU19JVEU4MTcyKQkrPSBmaXh1cC1pdGU4MTcyZy5vCiBvYmotJChDT05GSUdfTUlQU19JVlIpCQkrPSBmaXh1cC1pdnIubwogb2JqLSQoQ09ORklHX1NPQ19BVTE1MDApCSs9IGZpeHVwLWF1MTAwMC5vIG9wcy1hdTEwMDAubwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1hdGxhcy5jIGIvYXJjaC9taXBzL3BjaS9maXh1cC1hdGxhcy5jCmluZGV4IDQzOTUxMGEuLmM2Y2Q2ZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvZml4dXAtYXRsYXMuYworKysgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWF0bGFzLmMKQEAgLTIxLDE2ICsyMSwxNiBAQAogCiAjaW5jbHVkZSA8YXNtL21pcHMtYm9hcmRzL2F0bGFzaW50Lmg+CiAKLSNkZWZpbmUgUENJQQkJQVRMQVNJTlRfUENJQQotI2RlZmluZSBQQ0lCCQlBVExBU0lOVF9QQ0lCCi0jZGVmaW5lIFBDSUMJCUFUTEFTSU5UX1BDSUMKLSNkZWZpbmUgUENJRAkJQVRMQVNJTlRfUENJRAotI2RlZmluZSBJTlRBCQlBVExBU0lOVF9JTlRBCi0jZGVmaW5lIElOVEIJCUFUTEFTSU5UX0lOVEIKLSNkZWZpbmUgRVRICQlBVExBU0lOVF9FVEgKLSNkZWZpbmUgSU5UQwkJQVRMQVNJTlRfSU5UQwotI2RlZmluZSBTQ1NJCQlBVExBU0lOVF9TQ1NJCi0jZGVmaW5lIElOVEQJCUFUTEFTSU5UX0lOVEQKKyNkZWZpbmUgUENJQQkJQVRMQVNfSU5UX1BDSUEKKyNkZWZpbmUgUENJQgkJQVRMQVNfSU5UX1BDSUIKKyNkZWZpbmUgUENJQwkJQVRMQVNfSU5UX1BDSUMKKyNkZWZpbmUgUENJRAkJQVRMQVNfSU5UX1BDSUQKKyNkZWZpbmUgSU5UQQkJQVRMQVNfSU5UX0lOVEEKKyNkZWZpbmUgSU5UQgkJQVRMQVNfSU5UX0lOVEIKKyNkZWZpbmUgRVRICQlBVExBU19JTlRfRVRICisjZGVmaW5lIElOVEMJCUFUTEFTX0lOVF9JTlRDCisjZGVmaW5lIFNDU0kJCUFUTEFTX0lOVF9TQ1NJCisjZGVmaW5lIElOVEQJCUFUTEFTX0lOVF9JTlRECiAKIHN0YXRpYyBjaGFyIGlycV90YWJbXVs1XSBfX2luaXRkYXRhID0gewogCS8qICAgICAgSU5UQSAgICBJTlRCICAgIElOVEMgICAgSU5URCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3BjaS9maXh1cC1ldjk2MTAwLmMgYi9hcmNoL21pcHMvcGNpL2ZpeHVwLWV2OTYxMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTJiYzk3Ny4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL2ZpeHVwLWV2OTYxMDAuYworKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglFVjk2MTAwIEJvYXJkIHNwZWNpZmljIHBjaSBmaXh1cHMuCi0gKgotICogQ29weXJpZ2h0IDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAotICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQotICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgotICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKLSAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLSAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KLSAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAotICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAotICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgotICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgotICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAotICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KLXN0YXRpYyBjaGFyIGlycV90YWJfZXY5NjEwMFtdWzVdIF9faW5pdGRhdGEgPSB7Ci0gWzhdID0geyAwLCA1LCA1LCA1LCA1IH0sCi0gWzldID0geyAwLCAyLCAyLCAyLCAyIH0KLX07Ci0KLWludCBfX2luaXQgcGNpYmlvc19tYXBfaXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbikKLXsKLQlyZXR1cm4gaXJxX3RhYl9ldjk2MTAwW3Nsb3RdW3Bpbl07Ci19Ci0KLS8qIERvIHBsYXRmb3JtIHNwZWNpZmljIGRldmljZSBpbml0aWFsaXphdGlvbiBhdCBwY2lfZW5hYmxlX2RldmljZSgpIHRpbWUgKi8KLWludCBwY2liaW9zX3BsYXRfZGV2X2luaXQoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jIGIvYXJjaC9taXBzL3BjaS9vcHMtYXUxMDAwLmMKaW5kZXggMGMwYzFlNjUuLjhhZTQ2NDggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jCisrKyBiL2FyY2gvbWlwcy9wY2kvb3BzLWF1MTAwMC5jCkBAIC0xMTAsNyArMTEwLDcgQEAKIAlpZiAoZmlyc3RfY2ZnKSB7CiAJCS8qIHJlc2VydmUgYSB3aXJlZCBlbnRyeSBmb3IgcGNpIGNvbmZpZyBhY2Nlc3NlcyAqLwogCQlmaXJzdF9jZmcgPSAwOwotCQlwY2lfY2ZnX3ZtID0gZ2V0X3ZtX2FyZWEoMHgyMDAwLCAwKTsKKwkJcGNpX2NmZ192bSA9IGdldF92bV9hcmVhKDB4MjAwMCwgVk1fSU9SRU1BUCk7CiAJCWlmICghcGNpX2NmZ192bSkKIAkJCXBhbmljIChLRVJOX0VSUiAiUENJIHVuYWJsZSB0byBnZXQgdm0gYXJlYVxuIik7CiAJCXBjaV9jZmdfd2lyZWRfZW50cnkgPSByZWFkX2MwX3dpcmVkKCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvcGNpL29wcy1ndDk2MTAwLmMgYi9hcmNoL21pcHMvcGNpL29wcy1ndDk2MTAwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDllNGVhNjYuLjAwMDAwMDAKLS0tIGEvYXJjaC9taXBzL3BjaS9vcHMtZ3Q5NjEwMC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTY5ICswLDAgQEAKLS8qCi0gKgotICogQlJJRUYgTU9EVUxFIERFU0NSSVBUSU9OCi0gKglHYWxpbGVvIEVWOTYxMDAgYm9hcmQgc3BlY2lmaWMgcGNpIHN1cHBvcnQuCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogVGhpcyBmaWxlIHdhcyBkZXJpdmVkIGZyb20gQ2Fyc3RlbiBMYW5nZ2FhcmQncwotICogYXJjaC9taXBzL21pcHMtYm9hcmRzL2dlbmVyaWMvcGNpLmMKLSAqCi0gKiBDYXJzdGVuIExhbmdnYWFyZCwgY2Fyc3RlbmxAbWlwcy5jb20KLSAqIENvcHlyaWdodCAoQykgMTk5OSwyMDAwIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL2d0NjQxMjAuaD4KLSNpbmNsdWRlIDxhc20vZ2FsaWxlby1ib2FyZHMvZXY5NjEwMC5oPgotCi0jZGVmaW5lIFBDSV9BQ0NFU1NfUkVBRCAgMAotI2RlZmluZSBQQ0lfQUNDRVNTX1dSSVRFIDEKLQotc3RhdGljIGludCBzdGF0aWMgZ3Q5NjEwMF9jb25maWdfYWNjZXNzKHVuc2lnbmVkIGNoYXIgYWNjZXNzX3R5cGUsCi0Jc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgd2hlcmUsIHUzMiAqIGRhdGEpCi17Ci0JdW5zaWduZWQgY2hhciBidXMgPSBidXMtPm51bWJlcjsKLQl1MzIgaW50cjsKLQotCS8qCi0JICogQmVjYXVzZSBvZiBhIGJ1ZyBpbiB0aGUgZ2FsaWxlbyAoZm9yIHNsb3QgMzEpLgotCSAqLwotCWlmIChidXMgPT0gMCAmJiBkZXZmbiA+PSBQQ0lfREVWRk4oMzEsIDApKQotCQlyZXR1cm4gUENJQklPU19ERVZJQ0VfTk9UX0ZPVU5EOwotCi0JLyogQ2xlYXIgY2F1c2UgcmVnaXN0ZXIgYml0cyAqLwotCUdUX1dSSVRFKEdUX0lOVFJDQVVTRV9PRlMsIH4oR1RfSU5UUkNBVVNFX01BU0FCT1JUMF9CSVQgfAotCQkJCSAgICAgR1RfSU5UUkNBVVNFX1RBUkFCT1JUMF9CSVQpKTsKLQotCS8qIFNldHVwIGFkZHJlc3MgKi8KLQlHVF9XUklURShHVF9QQ0kwX0NGR0FERFJfT0ZTLAotCQkgKGJ1cyA8PCBHVF9QQ0kwX0NGR0FERFJfQlVTTlVNX1NIRikgfAotCQkgKGRldmZuIDw8IEdUX1BDSTBfQ0ZHQUREUl9GVU5DVE5VTV9TSEYpIHwKLQkJICgod2hlcmUgLyA0KSA8PCBHVF9QQ0kwX0NGR0FERFJfUkVHTlVNX1NIRikgfAotCQkgR1RfUENJMF9DRkdBRERSX0NPTkZJR0VOX0JJVCk7Ci0JdWRlbGF5KDIpOwotCi0KLQlpZiAoYWNjZXNzX3R5cGUgPT0gUENJX0FDQ0VTU19XUklURSkgewotCQlpZiAoZGV2Zm4gIT0gMCkKLQkJCSpkYXRhID0gbGUzMl90b19jcHUoKmRhdGEpOwotCQlHVF9XUklURShHVF9QQ0kwX0NGR0RBVEFfT0ZTLCAqZGF0YSk7Ci0JfSBlbHNlIHsKLQkJKmRhdGEgPSBHVF9SRUFEKEdUX1BDSTBfQ0ZHREFUQV9PRlMpOwotCQlpZiAoZGV2Zm4gIT0gMCkKLQkJCSpkYXRhID0gbGUzMl90b19jcHUoKmRhdGEpOwotCX0KLQotCXVkZWxheSgyKTsKLQotCS8qIENoZWNrIGZvciBtYXN0ZXIgb3IgdGFyZ2V0IGFib3J0ICovCi0JaW50ciA9IEdUX1JFQUQoR1RfSU5UUkNBVVNFX09GUyk7Ci0KLQlpZiAoaW50ciAmIChHVF9JTlRSQ0FVU0VfTUFTQUJPUlQwX0JJVCB8IEdUX0lOVFJDQVVTRV9UQVJBQk9SVDBfQklUKSkgewotCQkvKiBFcnJvciBvY2N1cmVkICovCi0KLQkJLyogQ2xlYXIgYml0cyAqLwotCQlHVF9XUklURShHVF9JTlRSQ0FVU0VfT0ZTLCB+KEdUX0lOVFJDQVVTRV9NQVNBQk9SVDBfQklUIHwKLQkJCQkJICAgICBHVF9JTlRSQ0FVU0VfVEFSQUJPUlQwX0JJVCkpOwotCQlyZXR1cm4gLTE7Ci0JfQotCXJldHVybiAwOwotfQotCi0vKgotICogV2UgY2FuJ3QgYWRkcmVzcyA4IGFuZCAxNiBiaXQgd29yZHMgZGlyZWN0bHkuICBJbnN0ZWFkIHdlIGhhdmUgdG8KLSAqIHJlYWQvd3JpdGUgYSAzMmJpdCB3b3JkIGFuZCBtYXNrL21vZGlmeSB0aGUgZGF0YSB3ZSBhY3R1YWxseSB3YW50LgotICovCi1zdGF0aWMgaW50IGd0OTYxMDBfcGNpYmlvc19yZWFkKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQlpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKiB2YWwpCi17Ci0JdTMyIGRhdGEgPSAwOwotCi0JaWYgKGd0OTYxMDBfY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1JFQUQsIGJ1cywgZGV2Zm4sIHdoZXJlLCAmZGF0YSkpCi0JCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZjsKLQkJYnJlYWs7Ci0KLQljYXNlIDI6Ci0JCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZmZmOwotCQlicmVhazsKLQotCWNhc2UgNDoKLQkJKnZhbCA9IGRhdGE7Ci0JCWJyZWFrOwotCX0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi1zdGF0aWMgaW50IGd0OTYxMDBfcGNpYmlvc193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JaW50IHdoZXJlLCBpbnQgc2l6ZSwgdTMyIHZhbCkKLXsKLQl1MzIgZGF0YSA9IDA7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCWlmIChndDk2MTAwX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCWRhdGEgPSAoZGF0YSAmIH4oMHhmZiA8PCAoKHdoZXJlICYgMykgPDwgMykpKSB8Ci0JCSAgICAgICAodmFsIDw8ICgod2hlcmUgJiAzKSA8PCAzKSk7Ci0KLQkJaWYgKGd0OTYxMDBfY29uZmlnX2FjY2VzcyhQQ0lfQUNDRVNTX1dSSVRFLCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQljYXNlIDI6Ci0JCWlmIChndDk2MTAwX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19SRUFELCBidXMsIGRldmZuLCB3aGVyZSwgJmRhdGEpKQotCQkJcmV0dXJuIC0xOwotCi0JCWRhdGEgPSAoZGF0YSAmIH4oMHhmZmZmIDw8ICgod2hlcmUgJiAzKSA8PCAzKSkpIHwKLQkJICAgICAgICh2YWwgPDwgKCh3aGVyZSAmIDMpIDw8IDMpKTsKLQotCQlpZiAoZ3Q5NjEwMF9jb25maWdfYWNjZXNzKFBDSV9BQ0NFU1NfV1JJVEUsIGRldiwgd2hlcmUsICZkYXRhKSkKLQkJCXJldHVybiAtMTsKLQotCi0JCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci0KLQljYXNlIDQ6Ci0JCWlmIChndDk2MTAwX2NvbmZpZ19hY2Nlc3MoUENJX0FDQ0VTU19XUklURSwgZGV2LCB3aGVyZSwgJnZhbCkpCi0JCQlyZXR1cm4gLTE7Ci0KLQkJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLQl9Ci19Ci0KLXN0cnVjdCBwY2lfb3BzIGd0OTYxMDBfcGNpX29wcyA9IHsKLQkucmVhZAk9IGd0OTYxMDBfcGNpYmlvc19yZWFkLAotCS53cml0ZQk9IGd0OTYxMDBfcGNpYmlvc193cml0ZQotfTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWV2OTYxMDAuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWV2OTYxMDAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjk0NTdlYS4uMDAwMDAwMAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1ldjk2MTAwLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXBwb3BvdkBtdmlzdGEuY29tIG9yIHNvdXJjZUBtdmlzdGEuY29tCi0gKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTksMjAwMCBNSVBTIFRlY2hub2xvZ2llcywgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgYnkgUmFsZiBCYWVjaGxlIChyYWxmQGxpbnV4LW1pcHMub3JnKQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKLSAqICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKLSAqICBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqICBUSElTICBTT0ZUV0FSRSAgSVMgUFJPVklERUQgICBgYEFTICBJUycnIEFORCAgIEFOWSAgRVhQUkVTUyBPUiBJTVBMSUVECi0gKiAgV0FSUkFOVElFUywgICBJTkNMVURJTkcsIEJVVCBOT1QgIExJTUlURUQgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCi0gKiAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCi0gKiAgTk8gIEVWRU5UICBTSEFMTCAgIFRIRSBBVVRIT1IgIEJFICAgIExJQUJMRSBGT1IgQU5ZICAgRElSRUNULCBJTkRJUkVDVCwKLSAqICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKLSAqICBOT1QgTElNSVRFRCAgIFRPLCBQUk9DVVJFTUVOVCBPRiAgU1VCU1RJVFVURSBHT09EUyAgT1IgU0VSVklDRVM7IExPU1MgT0YKLSAqICBVU0UsIERBVEEsICBPUiBQUk9GSVRTOyBPUiAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04KLSAqICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcKLSAqICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSAgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKLSAqICA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSAqLwotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi1zdGF0aWMgc3RydWN0IHJlc291cmNlIHBjaV9pb19yZXNvdXJjZSA9IHsKLQkubmFtZQk9ICJpbyBwY2kgSU8gc3BhY2UiLAotCS5zdGFydAk9IDB4MTAwMDAwMDAsCi0JLmVuZAk9IDB4MTFmZmZmZmYsCi0JLmZsYWdzCT0gSU9SRVNPVVJDRV9JTwotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBwY2lfbWVtX3Jlc291cmNlID0gewotCS5uYW1lCT0gImV4dCBwY2kgbWVtb3J5IHNwYWNlIiwKLQkuc3RhcnQJPSAweDEyMDAwMDAwLAotCS5lbmQJPSAweDEzZmZmZmZmLAotCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCi19OwotCi1leHRlcm4gc3RydWN0IHBjaV9vcHMgZ3Q5NjEwMF9wY2lfb3BzOwotCi1zdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgZXY5NjEwMF9jb250cm9sbGVyID0gewotCS5wY2lfb3BzCT0gJmd0OTYxMDBfcGNpX29wcywKLQkuaW9fcmVzb3VyY2UJPSAmcGNpX2lvX3Jlc291cmNlLAotCS5tZW1fcmVzb3VyY2UJPSAmcGNpX21lbV9yZXNvdXJjZSwKLX07Ci0KLXN0YXRpYyB2b2lkIGV2OTYxMDBfcGNpX2luaXQodm9pZCkKLXsKLQlyZWdpc3Rlcl9wY2lfY29udHJvbGxlcigmZXY5NjEwMF9jb250cm9sbGVyKTsKLX0KLQotYXJjaF9pbml0Y2FsbChldjk2MTAwX3BjaV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYyBiL2FyY2gvbWlwcy9wY2kvcGNpLWlwMjcuYwppbmRleCA4MGViOWFmLi40MDVjZTAxIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvcGNpL3BjaS1pcDI3LmMKKysrIGIvYXJjaC9taXBzL3BjaS9wY2ktaXAyNy5jCkBAIC0xNiw4ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KICNpbmNsdWRlIDxhc20vc24vc24wL2h1Yi5oPgogCi1leHRlcm4gdW5zaWduZWQgaW50IGFsbG9jYXRlX2lycW5vKHZvaWQpOwotCiAvKgogICogTWF4ICNQQ0kgYnVzc2VzIHdlIGNhbiBoYW5kbGU7IGllLCBtYXggI1BDSSBicmlkZ2VzLgogICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctdGltZXIuYwppbmRleCBiMDI5YmE3Li4yNTdjZTExIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy10aW1lci5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LXRpbWVyLmMKQEAgLTQyLDggKzQyLDYgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGN0X2N1cltOUl9DUFVTXTsJLyogV2hhdCBjb3VudGVyIHNob3VsZCBiZSBhdCBuZXh0IHRpbWVyIGlycSAqLwogc3RhdGljIGxvbmcgbGFzdF9ydGNfdXBkYXRlOwkJLyogTGFzdCB0aW1lIHRoZSBydGMgY2xvY2sgZ290IHVwZGF0ZWQgKi8KIAotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiAjaWYgMAogc3RhdGljIGludCBzZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewpAQCAtMTExLDcgKzEwOSw3IEBACiAJa3N0YXRfdGhpc19jcHUuaXJxc1tpcnFdKys7CQkvKiBrc3RhdCBvbmx5IGZvciBib290Y3B1PyAqLwogCiAJaWYgKGNwdSA9PSAwKQotCQlkb190aW1lcihyZWdzKTsKKwkJZG9fdGltZXIoMSk7CiAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggZWQzMjVmMC4uYTAyMjJmYSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtNDY5LDIxICs0NjksNiBAQAogCiAjZW5kaWYgCS8qIENPTkZJR19LR0RCICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGRjbHoodW5zaWduZWQgbG9uZyBsb25nIHgpCi17Ci0JaW50IGx6OwotCi0JX19hc21fXyAoCi0JIgkuc2V0CXB1c2gJCQkJCQlcbiIKLQkiCS5zZXQJbWlwczY0CQkJCQkJXG4iCi0JIglkY2x6CSUwLCAlMQkJCQkJCVxuIgotCSIJLnNldAlwb3AJCQkJCQlcbiIKLQk6ICI9ciIgKGx6KQotCTogInIiICh4KSk7Ci0KLQlyZXR1cm4gbHo7Ci19Ci0KIGV4dGVybiB2b2lkIGJjbTE0ODBfdGltZXJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIGV4dGVybiB2b2lkIGJjbTE0ODBfbWFpbGJveF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgYmNtMTQ4MF9rZ2RiX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC01MzYsOSArNTIxLDkgQEAKIAogCQlpZiAobWFza19oKSB7CiAJCQlpZiAobWFza19oIF4gMSkKLQkJCQlkb19JUlEoNjMgLSBkY2x6KG1hc2tfaCksIHJlZ3MpOworCQkJCWRvX0lSUShmbHM2NChtYXNrX2gpIC0gMSwgcmVncyk7CiAJCQllbHNlCi0JCQkJZG9fSVJRKDEyNyAtIGRjbHoobWFza19sKSwgcmVncyk7CisJCQkJZG9fSVJRKDYzICsgZmxzNjQobWFza19sKSwgcmVncyk7CiAJCX0KIAl9CiB9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL3NiMTI1MC9pcnEuYyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCmluZGV4IDFkZTcxYWQuLmE0NTFiNGMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jCkBAIC00MTksMjEgKzQxOSw2IEBACiAKICNlbmRpZiAJLyogQ09ORklHX0tHREIgKi8KIAotc3RhdGljIGlubGluZSBpbnQgZGNseih1bnNpZ25lZCBsb25nIGxvbmcgeCkKLXsKLQlpbnQgbHo7Ci0KLQlfX2FzbV9fICgKLQkiCS5zZXQJcHVzaAkJCQkJCVxuIgotCSIJLnNldAltaXBzNjQJCQkJCQlcbiIKLQkiCWRjbHoJJTAsICUxCQkJCQkJXG4iCi0JIgkuc2V0CXBvcAkJCQkJCVxuIgotCTogIj1yIiAobHopCi0JOiAiciIgKHgpKTsKLQotCXJldHVybiBsejsKLX0KLQogZXh0ZXJuIHZvaWQgc2IxMjUwX3RpbWVyX2ludGVycnVwdChzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBleHRlcm4gdm9pZCBzYjEyNTBfbWFpbGJveF9pbnRlcnJ1cHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgc2IxMjUwX2tnZGJfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTQ5MCw2ICs0NzUsNiBAQAogCQltYXNrID0gX19yYXdfcmVhZHEoSU9BRERSKEFfSU1SX1JFR0lTVEVSKHNtcF9wcm9jZXNzb3JfaWQoKSwKIAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUl9JTVJfSU5URVJSVVBUX1NUQVRVU19CQVNFKSkpOwogCQlpZiAobWFzaykKLQkJCWRvX0lSUSg2MyAtIGRjbHoobWFzayksIHJlZ3MpOworCQkJZG9fSVJRKGZsczY0KG1hc2spIC0gMSwgcmVncyk7CiAJfQogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wYXJpc2Mva2VybmVsL2Zpcm13YXJlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwppbmRleCA0Mzk4ZDJhLi5jMjUzMWFlIDEwMDY0NAotLS0gYS9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYworKysgYi9hcmNoL3BhcmlzYy9rZXJuZWwvZmlybXdhcmUuYwpAQCAtMTA0OSw3ICsxMDQ5LDcgQEAKICAgICAgICAgc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDgpKSkgICBpb2RjX3JldGJ1ZlszMl07CiAgICAgICAgIHN0YXRpYyBjaGFyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSkgaW9kY19kYnVmWzQwOTZdOwogICAgICAgICB1bnNpZ25lZCBpbnQgbjsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgICAgICBzd2l0Y2ggKGMpIHsKICAgICAgICAgY2FzZSAnXG4nOgpAQCAtMTA4OCw3ICsxMDg4LDggQEAKICAqLwogdm9pZCBwZGNfaW9kY19vdXRjKHVuc2lnbmVkIGNoYXIgYykKIHsKLQl1bnNpZ25lZCBpbnQgbiwgZmxhZ3M7CisJdW5zaWduZWQgaW50IG47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIGZpbGwgYnVmZmVyIHdpdGggb25lIGNhcmFjdGVyIGFuZCBwcmludCBpdCAqLwogICAgICAgICBzdGF0aWMgaW50IF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSAgIGlvZGNfcmV0YnVmWzMyXTsKQEAgLTExMTMsNyArMTExNCw3IEBACiAgKi8KIGludCBwZGNfaW9kY19nZXRjKHZvaWQpCiB7Ci0JdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgIHN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg4KSkpICAgaW9kY19yZXRidWZbMzJdOwogICAgICAgICBzdGF0aWMgY2hhciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpIGlvZGNfZGJ1Zls0MDk2XTsKIAlpbnQgY2g7CmRpZmYgLS1naXQgYS9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYWVlMzExOC4uZjUwYjk4MiAxMDA2NDQKLS0tIGEvYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jCisrKyBiL2FyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYwpAQCAtMjcsNyArMjcsNyBAQAogICogICAgLSBTRUdSRUwzMiBoYW5kbGluZwogICogICAgICBXZSBhcmUgbm90IGRvaW5nIFNFR1JFTDMyIGhhbmRsaW5nIGNvcnJlY3RseS4gQWNjb3JkaW5nIHRvIHRoZSBBQkksIHdlCiAgKiAgICAgIHNob3VsZCBkbyBhIHZhbHVlIG9mZnNldCwgbGlrZSB0aGlzOgotICoJCQlpZiAoaXNfaW5pdChtZSwgKHZvaWQgKil2YWwpKQorICoJCQlpZiAoaW5faW5pdChtZSwgKHZvaWQgKil2YWwpKQogICoJCQkJdmFsIC09ICh1aW50MzJfdCltZS0+bW9kdWxlX2luaXQ7CiAgKgkJCWVsc2UKICAqCQkJCXZhbCAtPSAodWludDMyX3QpbWUtPm1vZHVsZV9jb3JlOwpAQCAtNzIsMjcgKzcyLDI3IEBACiAKIC8qIHRocmVlIGZ1bmN0aW9ucyB0byBkZXRlcm1pbmUgd2hlcmUgaW4gdGhlIG1vZHVsZSBjb3JlCiAgKiBvciBpbml0IHBpZWNlcyB0aGUgbG9jYXRpb24gaXMgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX2luaXQoc3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykKK3N0YXRpYyBpbmxpbmUgaW50IGluX2luaXQoc3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykKIHsKIAlyZXR1cm4gKGxvYyA+PSBtZS0+bW9kdWxlX2luaXQgJiYKIAkJbG9jIDw9IChtZS0+bW9kdWxlX2luaXQgKyBtZS0+aW5pdF9zaXplKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2NvcmUoc3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykKK3N0YXRpYyBpbmxpbmUgaW50IGluX2NvcmUoc3RydWN0IG1vZHVsZSAqbWUsIHZvaWQgKmxvYykKIHsKIAlyZXR1cm4gKGxvYyA+PSBtZS0+bW9kdWxlX2NvcmUgJiYKIAkJbG9jIDw9IChtZS0+bW9kdWxlX2NvcmUgKyBtZS0+Y29yZV9zaXplKSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzX2xvY2FsKHN0cnVjdCBtb2R1bGUgKm1lLCB2b2lkICpsb2MpCitzdGF0aWMgaW5saW5lIGludCBpbl9sb2NhbChzdHJ1Y3QgbW9kdWxlICptZSwgdm9pZCAqbG9jKQogewotCXJldHVybiBpc19pbml0KG1lLCBsb2MpIHx8IGlzX2NvcmUobWUsIGxvYyk7CisJcmV0dXJuIGluX2luaXQobWUsIGxvYykgfHwgaW5fY29yZShtZSwgbG9jKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgaXNfbG9jYWxfc2VjdGlvbihzdHJ1Y3QgbW9kdWxlICptZSwgdm9pZCAqbG9jLCB2b2lkICpkb3QpCitzdGF0aWMgaW5saW5lIGludCBpbl9sb2NhbF9zZWN0aW9uKHN0cnVjdCBtb2R1bGUgKm1lLCB2b2lkICpsb2MsIHZvaWQgKmRvdCkKIHsKLQlyZXR1cm4gKGlzX2luaXQobWUsIGxvYykgJiYgaXNfaW5pdChtZSwgZG90KSkgfHwKLQkJKGlzX2NvcmUobWUsIGxvYykgJiYgaXNfY29yZShtZSwgZG90KSk7CisJcmV0dXJuIChpbl9pbml0KG1lLCBsb2MpICYmIGluX2luaXQobWUsIGRvdCkpIHx8CisJCShpbl9jb3JlKG1lLCBsb2MpICYmIGluX2NvcmUobWUsIGRvdCkpOwogfQogCiAKQEAgLTU2NiwxNCArNTY2LDE0IEBACiAJCQlicmVhazsKIAkJY2FzZSBSX1BBUklTQ19QQ1JFTDE3RjoKIAkJCS8qIDE3LWJpdCBQQyByZWxhdGl2ZSBhZGRyZXNzICovCi0JCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIEVMRl9TVFVCX0dPVCwgaXNfaW5pdChtZSwgbG9jKSk7CisJCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIEVMRl9TVFVCX0dPVCwgaW5faW5pdChtZSwgbG9jKSk7CiAJCQl2YWwgPSAodmFsIC0gZG90IC0gOCkvNDsKIAkJCUNIRUNLX1JFTE9DKHZhbCwgMTcpCiAJCQkqbG9jID0gKCpsb2MgJiB+MHgxZjFmZmQpIHwgcmVhc3NlbWJsZV8xNyh2YWwpOwogCQkJYnJlYWs7CiAJCWNhc2UgUl9QQVJJU0NfUENSRUwyMkY6CiAJCQkvKiAyMi1iaXQgUEMgcmVsYXRpdmUgYWRkcmVzczsgb25seSBkZWZpbmVkIGZvciBwYTIwICovCi0JCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIEVMRl9TVFVCX0dPVCwgaXNfaW5pdChtZSwgbG9jKSk7CisJCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIEVMRl9TVFVCX0dPVCwgaW5faW5pdChtZSwgbG9jKSk7CiAJCQlERUJVR1AoIlNUVUIgRk9SICVzIGxvYyAlbHgrJWx4IGF0ICVseFxuIiwgCiAJCQkgICAgICAgc3RydGFiICsgc3ltLT5zdF9uYW1lLCAodW5zaWduZWQgbG9uZylsb2MsIGFkZGVuZCwgCiAJCQkgICAgICAgdmFsKQpAQCAtNjcwLDkgKzY3MCw5IEBACiAJCQkgICAgICAgc3RydGFiICsgc3ltLT5zdF9uYW1lLAogCQkJICAgICAgIGxvYywgdmFsKTsKIAkJCS8qIGNhbiB3ZSByZWFjaCBpdCBsb2NhbGx5PyAqLwotCQkJaWYoIWlzX2xvY2FsX3NlY3Rpb24obWUsICh2b2lkICopdmFsLCAodm9pZCAqKWRvdCkpIHsKKwkJCWlmKCFpbl9sb2NhbF9zZWN0aW9uKG1lLCAodm9pZCAqKXZhbCwgKHZvaWQgKilkb3QpKSB7CiAKLQkJCQlpZiAoaXNfbG9jYWwobWUsICh2b2lkICopdmFsKSkKKwkJCQlpZiAoaW5fbG9jYWwobWUsICh2b2lkICopdmFsKSkKIAkJCQkJLyogdGhpcyBpcyB0aGUgY2FzZSB3aGVyZSB0aGUKIAkJCQkJICogc3ltYm9sIGlzIGxvY2FsIHRvIHRoZQogCQkJCQkgKiBtb2R1bGUsIGJ1dCBpbiBhIGRpZmZlcmVudApAQCAtNjgwLDE0ICs2ODAsMTQgQEAKIAkJCQkJICogaW4gY2FzZSBpdCdzIG1vcmUgdGhhbiAyMgogCQkJCQkgKiBiaXRzIGF3YXkgKi8KIAkJCQkJdmFsID0gZ2V0X3N0dWIobWUsIHZhbCwgYWRkZW5kLCBFTEZfU1RVQl9ESVJFQ1QsCi0JCQkJCQkgICAgICAgaXNfaW5pdChtZSwgbG9jKSk7CisJCQkJCQkgICAgICAgaW5faW5pdChtZSwgbG9jKSk7CiAJCQkJZWxzZSBpZiAoc3RybmNtcChzdHJ0YWIgKyBzeW0tPnN0X25hbWUsICIkJCIsIDIpCiAJCQkJICAgID09IDApCiAJCQkJCXZhbCA9IGdldF9zdHViKG1lLCB2YWwsIGFkZGVuZCwgRUxGX1NUVUJfTUlMTEksCi0JCQkJCQkgICAgICAgaXNfaW5pdChtZSwgbG9jKSk7CisJCQkJCQkgICAgICAgaW5faW5pdChtZSwgbG9jKSk7CiAJCQkJZWxzZQogCQkJCQl2YWwgPSBnZXRfc3R1YihtZSwgdmFsLCBhZGRlbmQsIEVMRl9TVFVCX0dPVCwKLQkJCQkJCSAgICAgICBpc19pbml0KG1lLCBsb2MpKTsKKwkJCQkJCSAgICAgICBpbl9pbml0KG1lLCBsb2MpKTsKIAkJCX0KIAkJCURFQlVHUCgiU1RVQiBGT1IgJXMgbG9jICVseCwgdmFsICVseCslbHggYXQgJWx4XG4iLCAKIAkJCSAgICAgICBzdHJ0YWIgKyBzeW0tPnN0X25hbWUsIGxvYywgc3ltLT5zdF92YWx1ZSwKQEAgLTcyMCw3ICs3MjAsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgUl9QQVJJU0NfRlBUUjY0OgogCQkJLyogNjQtYml0IGZ1bmN0aW9uIGFkZHJlc3MgKi8KLQkJCWlmKGlzX2xvY2FsKG1lLCAodm9pZCAqKSh2YWwgKyBhZGRlbmQpKSkgeworCQkJaWYoaW5fbG9jYWwobWUsICh2b2lkICopKHZhbCArIGFkZGVuZCkpKSB7CiAJCQkJKmxvYzY0ID0gZ2V0X2ZkZXNjKG1lLCB2YWwrYWRkZW5kKTsKIAkJCQlERUJVR1AoIkZERVNDIGZvciAlcyBhdCAlcCBwb2ludHMgdG8gJWx4XG4iLAogCQkJCSAgICAgICBzdHJ0YWIgKyBzeW0tPnN0X25hbWUsICpsb2M2NCwKZGlmZiAtLWdpdCBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BhcmlzYy9rZXJuZWwvdGltZS5jCmluZGV4IDVmYWNjOWIuLmFiNjQxZDYgMTAwNjQ0Ci0tLSBhL2FyY2gvcGFyaXNjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wYXJpc2Mva2VybmVsL3RpbWUuYwpAQCAtMzIsOSArMzIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KIAotLyogeHRpbWUgYW5kIHdhbGxfamlmZmllcyBrZWVwIHdhbGwtY2xvY2sgdGltZSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiBzdGF0aWMgbG9uZyBjbG9ja3RpY2sgX19yZWFkX21vc3RseTsJLyogdGltZXIgY3ljbGVzIHBlciB0aWNrICovCiBzdGF0aWMgbG9uZyBoYWxmdGljayBfX3JlYWRfbW9zdGx5OwogCkBAIC03OSw3ICs3Niw3IEBACiAjZW5kaWYKIAkJaWYgKGNwdSA9PSAwKSB7CiAJCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKLQkJCWRvX3RpbWVyKHJlZ3MpOworCQkJZG9fdGltZXIoMSk7CiAJCQl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogCQl9CiAJfQpAQCAtMTEyLDcgKzEwOSw3IEBACiAvKioqIGNvbnZlcnRlZCBmcm9tIGlhNjQgKioqLwogLyoKICAqIFJldHVybiB0aGUgbnVtYmVyIG9mIG1pY3JvLXNlY29uZHMgdGhhdCBlbGFwc2VkIHNpbmNlIHRoZSBsYXN0Ci0gKiB1cGRhdGUgdG8gd2FsbCB0aW1lIChha2EgeHRpbWUgYWthIHdhbGxfamlmZmllcykuICBUaGUgeHRpbWVfbG9jaworICogdXBkYXRlIHRvIHdhbGwgdGltZSAoYWthIHh0aW1lKS4gIFRoZSB4dGltZV9sb2NrCiAgKiBtdXN0IGJlIGF0IGxlYXN0IHJlYWQtbG9ja2VkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwppbmRleCBkZTFlZjJmLi5hMGRkMWIwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvS2NvbmZpZwpAQCAtNzMxLDExICs3MzEsMTAgQEAKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBTTVAgJiYgUFBDX1BTRVJJRVMKIAotc291cmNlICJtbS9LY29uZmlnIgotCi1jb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKK2NvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAogCWRlZl9ib29sIHkKLQlkZXBlbmRzIG9uIE5FRURfTVVMVElQTEVfTk9ERVMKKworc291cmNlICJtbS9LY29uZmlnIgogCiBjb25maWcgQVJDSF9NRU1PUllfUFJPQkUKIAlkZWZfYm9vbCB5CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzMyLmMKaW5kZXggZTBkZjJiYS4uNzlhMTc3OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF8zMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfMzIuYwpAQCAtNjcsMTAgKzY3LDYgQEAKIGRldl90IGJvb3RfZGV2OwogI2VuZGlmIC8qIENPTkZJR19QUENfTVVMVElQTEFURk9STSAqLwogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi11bnNpZ25lZCBsb25nIFNZU1JRX0tFWSA9IDB4NTQ7Ci0jZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICovCi0KICNpZmRlZiBDT05GSUdfVkdBX0NPTlNPTEUKIHVuc2lnbmVkIGxvbmcgdmdhY29uX3JlbWFwX2Jhc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYwppbmRleCAwMGQ2YjhhLi45NjJhZDVlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCkBAIC05MywxMSArOTMsNiBAQAogaW50IGljYWNoZV9ic2l6ZTsKIGludCB1Y2FjaGVfYnNpemU7CiAKLSNpZmRlZiBDT05GSUdfTUFHSUNfU1lTUlEKLXVuc2lnbmVkIGxvbmcgU1lTUlFfS0VZOwotI2VuZGlmIC8qIENPTkZJR19NQUdJQ19TWVNSUSAqLwotCi0KICNpZmRlZiBDT05GSUdfU01QCiAKIHN0YXRpYyBpbnQgc210X2VuYWJsZWRfY21kbGluZTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c19wcGMzMi5jCmluZGV4IDJlMjkyODYuLjVlMzkxZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzX3BwYzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNfcHBjMzIuYwpAQCAtNzQwLDcgKzc0MCw3IEBACiAJcmV0dXJuIHN5c191bWFzaygoaW50KW1hc2spOwogfQogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAorI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogc3RydWN0IF9fc3lzY3RsX2FyZ3MzMiB7CiAJdTMyIG5hbWU7CiAJaW50IG5sZW47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdGltZS5jCmluZGV4IDdhM2MzZjc5Li44YjI3OGQ4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RpbWUuYwpAQCAtMTE3LDggKzExNyw2IEBACiAKIHN0cnVjdCBnZXR0aW1lb2ZkYXlfc3RydWN0IGRvX2d0b2Q7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLQogZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBzeXNfdHo7CiBzdGF0aWMgbG9uZyB0aW1lem9uZV9vZmZzZXQ7CiAKQEAgLTY5Myw3ICs2OTEsNyBAQAogCQl0Yl9uZXh0X2ppZmZ5ID0gdGJfbGFzdF9qaWZmeSArIHRiX3RpY2tzX3Blcl9qaWZmeTsKIAkJaWYgKHBlcl9jcHUobGFzdF9qaWZmeSwgY3B1KSA+PSB0Yl9uZXh0X2ppZmZ5KSB7CiAJCQl0Yl9sYXN0X2ppZmZ5ID0gdGJfbmV4dF9qaWZmeTsKLQkJCWRvX3RpbWVyKHJlZ3MpOworCQkJZG9fdGltZXIoMSk7CiAJCQl0aW1lcl9yZWNhbGNfb2Zmc2V0KHRiX2xhc3RfamlmZnkpOwogCQkJdGltZXJfY2hlY2tfcnRjKCk7CiAJCX0KQEAgLTgxNiwxMSArODE0LDYgQEAKIAkvKgogCSAqIFN1YnRyYWN0IG9mZiB0aGUgbnVtYmVyIG9mIG5hbm9zZWNvbmRzIHNpbmNlIHRoZQogCSAqIGJlZ2lubmluZyBvZiB0aGUgbGFzdCB0aWNrLgotCSAqIE5vdGUgdGhhdCBzaW5jZSB3ZSBkb24ndCBpbmNyZW1lbnQgamlmZmllc182NCBhbnl3aGVyZSBvdGhlcgotCSAqIHRoYW4gaW4gZG9fdGltZXIgKHNpbmNlIHdlIGRvbid0IGhhdmUgYSBsb3N0IHRpY2sgcHJvYmxlbSksCi0JICogd2FsbF9qaWZmaWVzIHdpbGwgYWx3YXlzIGJlIHRoZSBzYW1lIGFzIGppZmZpZXMsCi0JICogYW5kIHRoZXJlZm9yZSB0aGUgKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpIGNvbXB1dGF0aW9uCi0JICogaGFzIGJlZW4gcmVtb3ZlZC4KIAkgKi8KIAl0Yl9kZWx0YSA9IHRiX3RpY2tzX3NpbmNlKHRiX2xhc3RfamlmZnkpOwogCXRiX2RlbHRhID0gbXVsaGR1KHRiX2RlbHRhLCBkb19ndG9kLnZhcnAtPnRiX3RvX3hzKTsgLyogaW4geHNlYyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCA3OGEwZDU5Li5lOGZhNTA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtMzMzLDcgKzMzMyw3IEBACiAJCS8qIHByb3RlY3Rpb24gZmF1bHQgKi8KIAkJaWYgKGVycm9yX2NvZGUgJiAweDA4MDAwMDAwKQogCQkJZ290byBiYWRfYXJlYTsKLQkJaWYgKCEodm1hLT52bV9mbGFncyAmIChWTV9SRUFEIHwgVk1fRVhFQykpKQorCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkKIAkJCWdvdG8gYmFkX2FyZWE7CiAJfQogCkBAIC0zODYsNyArMzg2LDcgQEAKICAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChjdXJyZW50LT5waWQgPT0gMSkgeworCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGVlYmQ4YjguLjE2ZmUwMjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTI1NiwyMCArMjU2LDIyIEBACiAKIAlib290X21hcHNpemUgPSBpbml0X2Jvb3RtZW0oc3RhcnQgPj4gUEFHRV9TSElGVCwgdG90YWxfcGFnZXMpOwogCisJLyogQWRkIGFjdGl2ZSByZWdpb25zIHdpdGggdmFsaWQgUEZOcyAqLworCWZvciAoaSA9IDA7IGkgPCBsbWIubWVtb3J5LmNudDsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOworCQlzdGFydF9wZm4gPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlID4+IFBBR0VfU0hJRlQ7CisJCWVuZF9wZm4gPSBzdGFydF9wZm4gKyBsbWJfc2l6ZV9wYWdlcygmbG1iLm1lbW9yeSwgaSk7CisJCWFkZF9hY3RpdmVfcmFuZ2UoMCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKwl9CisKIAkvKiBBZGQgYWxsIHBoeXNpY2FsIG1lbW9yeSB0byB0aGUgYm9vdG1lbSBtYXAsIG1hcmsgZWFjaCBhcmVhCiAJICogcHJlc2VudC4KIAkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbG1iLm1lbW9yeS5jbnQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGJhc2UgPSBsbWIubWVtb3J5LnJlZ2lvbltpXS5iYXNlOwotCQl1bnNpZ25lZCBsb25nIHNpemUgPSBsbWJfc2l6ZV9ieXRlcygmbG1iLm1lbW9yeSwgaSk7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KLQkJaWYgKGJhc2UgPj0gdG90YWxfbG93bWVtKQotCQkJY29udGludWU7Ci0JCWlmIChiYXNlICsgc2l6ZSA+IHRvdGFsX2xvd21lbSkKLQkJCXNpemUgPSB0b3RhbF9sb3dtZW0gLSBiYXNlOworCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIHRvdGFsX2xvd21lbSA+PiBQQUdFX1NISUZUKTsKKyNlbHNlCisJZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCwgbWF4X3Bmbik7CiAjZW5kaWYKLQkJZnJlZV9ib290bWVtKGJhc2UsIHNpemUpOwotCX0KIAogCS8qIHJlc2VydmUgdGhlIHNlY3Rpb25zIHdlJ3JlIGFscmVhZHkgdXNpbmcgKi8KIAlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKQpAQCAtMjc3LDkgKzI3OSw4IEBACiAJCQkJbG1iX3NpemVfYnl0ZXMoJmxtYi5yZXNlcnZlZCwgaSkpOwogCiAJLyogWFhYIG5lZWQgdG8gY2xpcCB0aGlzIGlmIHVzaW5nIGhpZ2htZW0/ICovCi0JZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyBpKyspCi0JCW1lbW9yeV9wcmVzZW50KDAsIGxtYl9zdGFydF9wZm4oJmxtYi5tZW1vcnksIGkpLAotCQkJICAgICAgIGxtYl9lbmRfcGZuKCZsbWIubWVtb3J5LCBpKSk7CisJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoMCk7CisKIAlpbml0X2Jvb3RtZW1fZG9uZSA9IDE7CiB9CiAKQEAgLTI4OCwxMCArMjg5LDkgQEAKICAqLwogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsKLQl1bnNpZ25lZCBsb25nIHpvbmVzX3NpemVbTUFYX05SX1pPTkVTXTsKLQl1bnNpZ25lZCBsb25nIHpob2xlc19zaXplW01BWF9OUl9aT05FU107CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9yYW0gPSBsbWJfcGh5c19tZW1fc2l6ZSgpOwogCXVuc2lnbmVkIGxvbmcgdG9wX29mX3JhbSA9IGxtYl9lbmRfb2ZfRFJBTSgpOworCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdOwogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KIAltYXBfcGFnZShQS01BUF9CQVNFLCAwLCAwKTsJLyogWFhYIGdyb3NzICovCkBAIC0zMDcsMjYgKzMwNywxMyBAQAogCSAgICAgICB0b3Bfb2ZfcmFtLCB0b3RhbF9yYW0pOwogCXByaW50ayhLRVJOX0RFQlVHICJNZW1vcnkgaG9sZSBzaXplOiAlbGRNQlxuIiwKIAkgICAgICAgKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IDIwKTsKLQkvKgotCSAqIEFsbCBwYWdlcyBhcmUgRE1BLWFibGUgc28gd2UgcHV0IHRoZW0gYWxsIGluIHRoZSBETUEgem9uZS4KLQkgKi8KLQltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKLQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwotCi0Jem9uZXNfc2l6ZVtaT05FX0RNQV0gPSB0b3Bfb2ZfcmFtID4+IFBBR0VfU0hJRlQ7Ci0JemhvbGVzX3NpemVbWk9ORV9ETUFdID0gKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IFBBR0VfU0hJRlQ7Ci0KICNpZmRlZiBDT05GSUdfSElHSE1FTQotCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gdG90YWxfbG93bWVtID4+IFBBR0VfU0hJRlQ7Ci0Jem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gKHRvdGFsX21lbW9yeSAtIHRvdGFsX2xvd21lbSkgPj4gUEFHRV9TSElGVDsKLQl6aG9sZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IFBBR0VfU0hJRlQ7CisJbWF4X3pvbmVfcGZuc1swXSA9IHRvdGFsX2xvd21lbSA+PiBQQUdFX1NISUZUOworCW1heF96b25lX3BmbnNbMV0gPSB0b3Bfb2ZfcmFtID4+IFBBR0VfU0hJRlQ7CiAjZWxzZQotCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gdG9wX29mX3JhbSA+PiBQQUdFX1NISUZUOwotCXpob2xlc19zaXplW1pPTkVfRE1BXSA9ICh0b3Bfb2ZfcmFtIC0gdG90YWxfcmFtKSA+PiBQQUdFX1NISUZUOwotI2VuZGlmIC8qIENPTkZJR19ISUdITUVNICovCi0KLQlmcmVlX2FyZWFfaW5pdF9ub2RlKDAsIE5PREVfREFUQSgwKSwgem9uZXNfc2l6ZSwKLQkJCSAgICBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZULCB6aG9sZXNfc2l6ZSk7CisJbWF4X3pvbmVfcGZuc1swXSA9IHRvcF9vZl9yYW0gPj4gUEFHRV9TSElGVDsKKyNlbmRpZgorCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogI2VuZGlmIC8qICEgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggNmMwZjFjNy4uNDNjMjcyMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0zOSw5NiArMzksNiBAQAogc3RhdGljIGludCBtaW5fY29tbW9uX2RlcHRoOwogc3RhdGljIGludCBuX21lbV9hZGRyX2NlbGxzLCBuX21lbV9zaXplX2NlbGxzOwogCi0vKgotICogV2UgbmVlZCBzb21ld2hlcmUgdG8gc3RvcmUgc3RhcnQvZW5kL25vZGUgZm9yIGVhY2ggcmVnaW9uIHVudGlsIHdlIGhhdmUKLSAqIGFsbG9jYXRlZCB0aGUgcmVhbCBub2RlX2RhdGEgc3RydWN0dXJlcy4KLSAqLwotI2RlZmluZSBNQVhfUkVHSU9OUwkoTUFYX0xNQl9SRUdJT05TKjIpCi1zdGF0aWMgc3RydWN0IHsKLQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbjsKLQl1bnNpZ25lZCBsb25nIGVuZF9wZm47Ci0JaW50IG5pZDsKLX0gaW5pdF9ub2RlX2RhdGFbTUFYX1JFR0lPTlNdIF9faW5pdGRhdGE7Ci0KLWludCBfX2luaXQgZWFybHlfcGZuX3RvX25pZCh1bnNpZ25lZCBsb25nIHBmbikKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWZvciAoaSA9IDA7IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKLQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKLQotCQlpZiAoKHN0YXJ0X3BmbiA8PSBwZm4pICYmIChwZm4gPCBlbmRfcGZuKSkKLQkJCXJldHVybiBpbml0X25vZGVfZGF0YVtpXS5uaWQ7Ci0JfQotCi0JcmV0dXJuIC0xOwotfQotCi12b2lkIF9faW5pdCBhZGRfcmVnaW9uKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBwYWdlcykKLXsKLQl1bnNpZ25lZCBpbnQgaTsKLQotCWRiZygiYWRkX3JlZ2lvbiBuaWQgJWQgc3RhcnRfcGZuIDB4JWx4IHBhZ2VzIDB4JWx4XG4iLAotCQluaWQsIHN0YXJ0X3BmbiwgcGFnZXMpOwotCi0JZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7Ci0JCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQotCQkJY29udGludWU7Ci0JCWlmIChpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuID09IHN0YXJ0X3BmbikgewotCQkJaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbiArPSBwYWdlczsKLQkJCXJldHVybjsKLQkJfQotCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID09IChzdGFydF9wZm4gKyBwYWdlcykpIHsKLQkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbiAtPSBwYWdlczsKLQkJCXJldHVybjsKLQkJfQotCX0KLQotCS8qCi0JICogTGVhdmUgbGFzdCBlbnRyeSBOVUxMIHNvIHdlIGRvbnQgaXRlcmF0ZSBvZmYgdGhlIGVuZCAod2UgdXNlCi0JICogZW50cnkuZW5kX3BmbiB0byB0ZXJtaW5hdGUgdGhlIHdhbGspLgotCSAqLwotCWlmIChpID49IChNQVhfUkVHSU9OUyAtIDEpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiV0FSTklORzogdG9vIG1hbnkgbWVtb3J5IHJlZ2lvbnMgaW4gIgotCQkJCSJudW1hIGNvZGUsIHRydW5jYXRpbmdcbiIpOwotCQlyZXR1cm47Ci0JfQotCi0JaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuID0gc3RhcnRfcGZuOwotCWluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPSBzdGFydF9wZm4gKyBwYWdlczsKLQlpbml0X25vZGVfZGF0YVtpXS5uaWQgPSBuaWQ7Ci19Ci0KLS8qIFdlIGFzc3VtZSBpbml0X25vZGVfZGF0YSBoYXMgbm8gb3ZlcmxhcHBpbmcgcmVnaW9ucyAqLwotdm9pZCBfX2luaXQgZ2V0X3JlZ2lvbih1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sCi0JCSAgICAgICB1bnNpZ25lZCBsb25nICplbmRfcGZuLCB1bnNpZ25lZCBsb25nICpwYWdlc19wcmVzZW50KQotewotCXVuc2lnbmVkIGludCBpOwotCi0JKnN0YXJ0X3BmbiA9IC0xVUw7Ci0JKmVuZF9wZm4gPSAqcGFnZXNfcHJlc2VudCA9IDA7Ci0KLQlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKLQkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCi0JCQljb250aW51ZTsKLQotCQkqcGFnZXNfcHJlc2VudCArPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuIC0KLQkJCWluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKLQotCQlpZiAoaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIDwgKnN0YXJ0X3BmbikKLQkJCSpzdGFydF9wZm4gPSBpbml0X25vZGVfZGF0YVtpXS5zdGFydF9wZm47Ci0KLQkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm4gPiAqZW5kX3BmbikKLQkJCSplbmRfcGZuID0gaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsKLQl9Ci0KLQkvKiBXZSBkaWRudCBmaW5kIGEgbWF0Y2hpbmcgcmVnaW9uLCByZXR1cm4gc3RhcnQvZW5kIGFzIDAgKi8KLQlpZiAoKnN0YXJ0X3BmbiA9PSAtMVVMKQotCQkqc3RhcnRfcGZuID0gMDsKLX0KLQogc3RhdGljIHZvaWQgX19jcHVpbml0IG1hcF9jcHVfdG9fbm9kZShpbnQgY3B1LCBpbnQgbm9kZSkKIHsKIAludW1hX2NwdV9sb29rdXBfdGFibGVbY3B1XSA9IG5vZGU7CkBAIC00NjgsOCArMzc4LDggQEAKIAkJCQljb250aW51ZTsKIAkJfQogCi0JCWFkZF9yZWdpb24obmlkLCBzdGFydCA+PiBQQUdFX1NISUZULAotCQkJICAgc2l6ZSA+PiBQQUdFX1NISUZUKTsKKwkJYWRkX2FjdGl2ZV9yYW5nZShuaWQsIHN0YXJ0ID4+IFBBR0VfU0hJRlQsCisJCQkJKHN0YXJ0ID4+IFBBR0VfU0hJRlQpICsgKHNpemUgPj4gUEFHRV9TSElGVCkpOwogCiAJCWlmICgtLXJhbmdlcykKIAkJCWdvdG8gbmV3X3JhbmdlOwpAQCAtNDgyLDYgKzM5Miw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyB0b3Bfb2ZfcmFtID0gbG1iX2VuZF9vZl9EUkFNKCk7CiAJdW5zaWduZWQgbG9uZyB0b3RhbF9yYW0gPSBsbWJfcGh5c19tZW1fc2l6ZSgpOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwogCXVuc2lnbmVkIGludCBpOwogCiAJcHJpbnRrKEtFUk5fREVCVUcgIlRvcCBvZiBSQU06IDB4JWx4LCBUb3RhbCBSQU06IDB4JWx4XG4iLApAQCAtNDg5LDkgKzQwMCwxMSBAQAogCXByaW50ayhLRVJOX0RFQlVHICJNZW1vcnkgaG9sZSBzaXplOiAlbGRNQlxuIiwKIAkgICAgICAgKHRvcF9vZl9yYW0gLSB0b3RhbF9yYW0pID4+IDIwKTsKIAotCWZvciAoaSA9IDA7IGkgPCBsbWIubWVtb3J5LmNudDsgKytpKQotCQlhZGRfcmVnaW9uKDAsIGxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UgPj4gUEFHRV9TSElGVCwKLQkJCSAgIGxtYl9zaXplX3BhZ2VzKCZsbWIubWVtb3J5LCBpKSk7CisJZm9yIChpID0gMDsgaSA8IGxtYi5tZW1vcnkuY250OyArK2kpIHsKKwkJc3RhcnRfcGZuID0gbG1iLm1lbW9yeS5yZWdpb25baV0uYmFzZSA+PiBQQUdFX1NISUZUOworCQllbmRfcGZuID0gc3RhcnRfcGZuICsgbG1iX3NpemVfcGFnZXMoJmxtYi5tZW1vcnksIGkpOworCQlhZGRfYWN0aXZlX3JhbmdlKDAsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CisJfQogCW5vZGVfc2V0X29ubGluZSgwKTsKIH0KIApAQCAtNjMwLDExICs1NDMsMTEgQEAKIAkJCSAgKHZvaWQgKikodW5zaWduZWQgbG9uZylib290X2NwdWlkKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgcGFnZXNfcHJlc2VudDsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAJCXVuc2lnbmVkIGxvbmcgYm9vdG1lbV9wYWRkcjsKIAkJdW5zaWduZWQgbG9uZyBib290bWFwX3BhZ2VzOwogCi0JCWdldF9yZWdpb24obmlkLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJnBhZ2VzX3ByZXNlbnQpOworCQlnZXRfcGZuX3JhbmdlX2Zvcl9uaWQobmlkLCAmc3RhcnRfcGZuLCAmZW5kX3Bmbik7CiAKIAkJLyogQWxsb2NhdGUgdGhlIG5vZGUgc3RydWN0dXJlIG5vZGUgbG9jYWwgaWYgcG9zc2libGUgKi8KIAkJTk9ERV9EQVRBKG5pZCkgPSBjYXJlZnVsX2FsbG9jYXRpb24obmlkLApAQCAtNjY3LDE5ICs1ODAsNyBAQAogCQlpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobmlkKSwgYm9vdG1lbV9wYWRkciA+PiBQQUdFX1NISUZULAogCQkJCSAgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAotCQkvKiBBZGQgZnJlZSByZWdpb25zIG9uIHRoaXMgbm9kZSAqLwotCQlmb3IgKGkgPSAwOyBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuOyBpKyspIHsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKLQotCQkJaWYgKGluaXRfbm9kZV9kYXRhW2ldLm5pZCAhPSBuaWQpCi0JCQkJY29udGludWU7Ci0KLQkJCXN0YXJ0ID0gaW5pdF9ub2RlX2RhdGFbaV0uc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JCQllbmQgPSBpbml0X25vZGVfZGF0YVtpXS5lbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0KLQkJCWRiZygiZnJlZV9ib290bWVtICVseCAlbHhcbiIsIHN0YXJ0LCBlbmQgLSBzdGFydCk7Ci0gIAkJCWZyZWVfYm9vdG1lbV9ub2RlKE5PREVfREFUQShuaWQpLCBzdGFydCwgZW5kIC0gc3RhcnQpOwotCQl9CisJCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5pZCwgZW5kX3Bmbik7CiAKIAkJLyogTWFyayByZXNlcnZlZCByZWdpb25zIG9uIHRoaXMgbm9kZSAqLwogCQlmb3IgKGkgPSAwOyBpIDwgbG1iLnJlc2VydmVkLmNudDsgaSsrKSB7CkBAIC03MTAsNDQgKzYxMSwxNiBAQAogCQkJfQogCQl9CiAKLQkJLyogQWRkIHJlZ2lvbnMgaW50byBzcGFyc2VtZW0gKi8KLQkJZm9yIChpID0gMDsgaW5pdF9ub2RlX2RhdGFbaV0uZW5kX3BmbjsgaSsrKSB7Ci0JCQl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7Ci0KLQkJCWlmIChpbml0X25vZGVfZGF0YVtpXS5uaWQgIT0gbmlkKQotCQkJCWNvbnRpbnVlOwotCi0JCQlzdGFydCA9IGluaXRfbm9kZV9kYXRhW2ldLnN0YXJ0X3BmbjsKLQkJCWVuZCA9IGluaXRfbm9kZV9kYXRhW2ldLmVuZF9wZm47Ci0KLQkJCW1lbW9yeV9wcmVzZW50KG5pZCwgc3RhcnQsIGVuZCk7Ci0JCX0KKwkJc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMobmlkKTsKIAl9CiB9CiAKIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU107Ci0JdW5zaWduZWQgbG9uZyB6aG9sZXNfc2l6ZVtNQVhfTlJfWk9ORVNdOwotCWludCBuaWQ7Ci0KLQltZW1zZXQoem9uZXNfc2l6ZSwgMCwgc2l6ZW9mKHpvbmVzX3NpemUpKTsKLQltZW1zZXQoemhvbGVzX3NpemUsIDAsIHNpemVvZih6aG9sZXNfc2l6ZSkpOwotCi0JZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7Ci0JCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuLCBwYWdlc19wcmVzZW50OwotCi0JCWdldF9yZWdpb24obmlkLCAmc3RhcnRfcGZuLCAmZW5kX3BmbiwgJnBhZ2VzX3ByZXNlbnQpOwotCi0JCXpvbmVzX3NpemVbWk9ORV9ETUFdID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKLQkJemhvbGVzX3NpemVbWk9ORV9ETUFdID0gem9uZXNfc2l6ZVtaT05FX0RNQV0gLSBwYWdlc19wcmVzZW50OwotCi0JCWRiZygiZnJlZV9hcmVhX2luaXQgbm9kZSAlZCAlbHggJWx4IChob2xlOiAlbHgpXG4iLCBuaWQsCi0JCSAgICB6b25lc19zaXplW1pPTkVfRE1BXSwgc3RhcnRfcGZuLCB6aG9sZXNfc2l6ZVtaT05FX0RNQV0pOwotCi0JCWZyZWVfYXJlYV9pbml0X25vZGUobmlkLCBOT0RFX0RBVEEobmlkKSwgem9uZXNfc2l6ZSwgc3RhcnRfcGZuLAotCQkJCSAgICB6aG9sZXNfc2l6ZSk7Ci0JfQorCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdID0geworCQkJCWxtYl9lbmRfb2ZfRFJBTSgpID4+IFBBR0VfU0hJRlQKKwl9OworCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9udW1hKGNoYXIgKnApCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCmluZGV4IDdiNDU3MjguLjM5NTBkZGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCkBAIC04Miw3ICs4Miw2IEBACiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIG91dDoKQEAgLTEyMCw3ICsxMTksNyBAQAogCXJldCA9IDA7CiAJaW5vZGUtPmlfb3AgPSAmc3B1ZnNfZmlsZV9pb3BzOwogCWlub2RlLT5pX2ZvcCA9IGZvcHM7Ci0JaW5vZGUtPnUuZ2VuZXJpY19pcCA9IFNQVUZTX0koaW5vZGUpLT5pX2N0eCA9IGdldF9zcHVfY29udGV4dChjdHgpOworCWlub2RlLT5pX3ByaXZhdGUgPSBTUFVGU19JKGlub2RlKS0+aV9jdHggPSBnZXRfc3B1X2NvbnRleHQoY3R4KTsKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIG91dDoKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9jcHVmcmVxXzY0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwppbmRleCBkMzA0NjZkLi45ZDIyMzYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiB7CiAJc3RydWN0IHNtdV9zaW1wbGVfY21kCWNtZDsKIAotCURFQ0xBUkVfQ09NUExFVElPTihjb21wKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wKTsKIAlzbXVfcXVldWVfc2ltcGxlKCZjbWQsIFNNVV9DTURfUE9XRVJfQ09NTUFORCwgOCwgc211X2RvbmVfY29tcGxldGUsCiAJCQkgJmNvbXAsICdWJywgJ1MnLCAnTCcsICdFJywgJ1cnLAogCQkJIDB4ZmYsIGc1X2Z2dF9jdXIrMSwgc3BlZWRfbW9kZSk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKaW5kZXggNmEzNmVhOS4uNjkyOTQ1YzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvbnZyYW0uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL252cmFtLmMKQEAgLTE5NSw3ICsxOTUsNyBAQAogc3RhdGljIHVuc2lnbmVkIGNoYXIgcG11X252cmFtX3JlYWRfYnl0ZShpbnQgYWRkcikKIHsKIAlzdHJ1Y3QgYWRiX3JlcXVlc3QgcmVxOwotCURFQ0xBUkVfQ09NUExFVElPTihyZXFfY29tcGxldGUpOyAKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhyZXFfY29tcGxldGUpOwogCQogCXJlcS5hcmcgPSBzeXN0ZW1fc3RhdGUgPT0gU1lTVEVNX1JVTk5JTkcgPyAmcmVxX2NvbXBsZXRlIDogTlVMTDsKIAlpZiAocG11X3JlcXVlc3QoJnJlcSwgcG11X252cmFtX2NvbXBsZXRlLCAzLCBQTVVfUkVBRF9OVlJBTSwKQEAgLTIxMSw3ICsyMTEsNyBAQAogc3RhdGljIHZvaWQgcG11X252cmFtX3dyaXRlX2J5dGUoaW50IGFkZHIsIHVuc2lnbmVkIGNoYXIgdmFsKQogewogCXN0cnVjdCBhZGJfcmVxdWVzdCByZXE7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHJlcV9jb21wbGV0ZSk7IAorCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHJlcV9jb21wbGV0ZSk7CiAJCiAJcmVxLmFyZyA9IHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fUlVOTklORyA/ICZyZXFfY29tcGxldGUgOiBOVUxMOwogCWlmIChwbXVfcmVxdWVzdCgmcmVxLCBwbXVfbnZyYW1fY29tcGxldGUsIDQsIFBNVV9XUklURV9OVlJBTSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9odkNhbGxfaW5zdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKaW5kZXggNjQxZTY1MS4uNDQ2ZTE3ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2h2Q2FsbF9pbnN0LmMKQEAgLTg1LDcgKzg1LDcgQEAKIAogCXJjID0gc2VxX29wZW4oZmlsZSwgJmhjYWxsX2luc3Rfc2VxX29wcyk7CiAJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNlcS0+cHJpdmF0ZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJc2VxLT5wcml2YXRlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKIAogCXJldHVybiByYzsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yYXMuYwppbmRleCA5MDMxMTVkLi4zMTFlZDE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcmFzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3Jhcy5jCkBAIC0zMzcsNyArMzM3LDcgQEAKIAkJICAgZXJyLT5kaXNwb3NpdGlvbiA9PSBSVEFTX0RJU1BfTk9UX1JFQ09WRVJFRCAmJgogCQkgICBlcnItPnRhcmdldCA9PSBSVEFTX1RBUkdFVF9NRU1PUlkgJiYKIAkJICAgZXJyLT50eXBlID09IFJUQVNfVFlQRV9FQ0NfVU5DT1JSICYmCi0JCSAgICEoY3VycmVudC0+cGlkID09IDAgfHwgY3VycmVudC0+cGlkID09IDEpKSB7CisJCSAgICEoY3VycmVudC0+cGlkID09IDAgfHwgaXNfaW5pdChjdXJyZW50KSkpIHsKIAkJLyogS2lsbCBvZmYgYSB1c2VyIHByb2Nlc3Mgd2l0aCBhbiBFQ0MgZXJyb3IgKi8KIAkJcHJpbnRrKEtFUk5fRVJSICJNQ0U6IHVuY29ycmVjdGFibGUgZWNjIGVycm9yIGZvciBwaWQgJWRcbiIsCiAJCSAgICAgICBjdXJyZW50LT5waWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwppbmRleCBhNjM5OGZiLi44ZWQzNjIxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvc2V0dXAuYwpAQCAtNDE1LDYgKzQxNSwxMiBAQAogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCW9mX25vZGVfcHV0KG5wKTsKIAkJYnJlYWs7CisJY2FzZSBQQVJBTExFTF9CQVNFOgorCQlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJwYXJhbGxlbCIpOworCQlpZiAobnAgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PREVWOworCQlvZl9ub2RlX3B1dChucCk7CisJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKaW5kZXggYjYwNDkyNi4uNzIzOTcyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tcGljLmMKQEAgLTMzOSw3ICszMzksNyBAQAogCWZvciAocG9zID0gcmVhZGIoZGV2YmFzZSArIFBDSV9DQVBBQklMSVRZX0xJU1QpOyBwb3MgIT0gMDsKIAkgICAgIHBvcyA9IHJlYWRiKGRldmJhc2UgKyBwb3MgKyBQQ0lfQ0FQX0xJU1RfTkVYVCkpIHsKIAkJdTggaWQgPSByZWFkYihkZXZiYXNlICsgcG9zICsgUENJX0NBUF9MSVNUX0lEKTsKLQkJaWYgKGlkID09IFBDSV9DQVBfSURfSFRfSVJRQ09ORikgeworCQlpZiAoaWQgPT0gUENJX0NBUF9JRF9IVCkgewogCQkJaWQgPSByZWFkYihkZXZiYXNlICsgcG9zICsgMyk7CiAJCQlpZiAoaWQgPT0gMHg4MCkKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL0tjb25maWcgYi9hcmNoL3BwYy9LY29uZmlnCmluZGV4IDhmYTEwY2YuLmZkZDllN2IgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL0tjb25maWcKKysrIGIvYXJjaC9wcGMvS2NvbmZpZwpAQCAtOTUzLDYgKzk1Myw5IEBACiBjb25maWcgSElHSE1FTQogCWJvb2wgIkhpZ2ggbWVtb3J5IHN1cHBvcnQiCiAKK2NvbmZpZyBBUkNIX1BPUFVMQVRFU19OT0RFX01BUAorCWRlZl9ib29sIHkKKwogc291cmNlIGtlcm5lbC9LY29uZmlnLmh6CiBzb3VyY2Uga2VybmVsL0tjb25maWcucHJlZW1wdAogc291cmNlICJtbS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMva2VybmVsL3NldHVwLmMgYi9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYwppbmRleCA1NDU4YWM1Li43NWZlMTM4IDEwMDY0NAotLS0gYS9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3BwYy9rZXJuZWwvc2V0dXAuYwpAQCAtODYsMTAgKzg2LDYgQEAKIEVYUE9SVF9TWU1CT0wocHBjX2RvX2Nhbm9uaWNhbGl6ZV9pcnFzKTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JRCi11bnNpZ25lZCBsb25nIFNZU1JRX0tFWSA9IDB4NTQ7Ci0jZW5kaWYgLyogQ09ORklHX01BR0lDX1NZU1JRICovCi0KICNpZmRlZiBDT05GSUdfVkdBX0NPTlNPTEUKIHVuc2lnbmVkIGxvbmcgdmdhY29uX3JlbWFwX2Jhc2U7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3BwYy9rZXJuZWwvdGltZS5jCmluZGV4IDZhYjhjYzcuLjE4NzM4ODYgMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9wcGMva2VybmVsL3RpbWUuYwpAQCAtODAsOCArODAsNiBAQAogdW5zaWduZWQgdGJfbGFzdF9zdGFtcDsKIHVuc2lnbmVkIGxvbmcgdGJfdG9fbnNfc2NhbGU7CiAKLWV4dGVybiB1bnNpZ25lZCBsb25nIHdhbGxfamlmZmllczsKLQogLyogdXNlZCBmb3IgdGltZXpvbmUgb2Zmc2V0ICovCiBzdGF0aWMgbG9uZyB0aW1lem9uZV9vZmZzZXQ7CiAKQEAgLTE1Myw3ICsxNTEsNyBAQAogCQkvKiBXZSBhcmUgaW4gYW4gaW50ZXJydXB0LCBubyBuZWVkIHRvIHNhdmUvcmVzdG9yZSBmbGFncyAqLwogCQl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKIAkJdGJfbGFzdF9zdGFtcCA9IGppZmZ5X3N0YW1wOwotCQlkb190aW1lcihyZWdzKTsKKwkJZG9fdGltZXIoMSk7CiAKIAkJLyoKIAkJICogdXBkYXRlIHRoZSBydGMgd2hlbiBuZWVkZWQsIHRoaXMgc2hvdWxkIGJlIHBlcmZvcm1lZCBvbiB0aGUKQEAgLTE3Myw4ICsxNzEsNyBAQAogCQkgKi8KIAkJaWYgKCBwcGNfbWQuc2V0X3J0Y190aW1lICYmIG50cF9zeW5jZWQoKSAmJgogCQkgICAgIHh0aW1lLnR2X3NlYyAtIGxhc3RfcnRjX3VwZGF0ZSA+PSA2NTkgJiYKLQkJICAgICBhYnMoKHh0aW1lLnR2X25zZWMgLyAxMDAwKSAtICgxMDAwMDAwLTEwMDAwMDAvSFopKSA8IDUwMDAwMC9IWiAmJgotCQkgICAgIGppZmZpZXMgLSB3YWxsX2ppZmZpZXMgPT0gMSkgeworCQkgICAgIGFicygoeHRpbWUudHZfbnNlYyAvIDEwMDApIC0gKDEwMDAwMDAtMTAwMDAwMC9IWikpIDwgNTAwMDAwL0haKSB7CiAJCSAgCWlmIChwcGNfbWQuc2V0X3J0Y190aW1lKHh0aW1lLnR2X3NlYysxICsgdGltZXpvbmVfb2Zmc2V0KSA9PSAwKQogCQkJCWxhc3RfcnRjX3VwZGF0ZSA9IHh0aW1lLnR2X3NlYysxOwogCQkJZWxzZQpAQCAtMjAwLDcgKzE5Nyw3IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIHNlcTsKLQl1bnNpZ25lZCBkZWx0YSwgbG9zdF90aWNrcywgdXNlYywgc2VjOworCXVuc2lnbmVkIGRlbHRhLCB1c2VjLCBzZWM7CiAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwpAQCAtMjE0LDEwICsyMTEsOSBAQAogCQlpZiAoIXNtcF90Yl9zeW5jaHJvbml6ZWQpCiAJCQlkZWx0YSA9IDA7CiAjZW5kaWYgLyogQ09ORklHX1NNUCAqLwotCQlsb3N0X3RpY2tzID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKIAotCXVzZWMgKz0gbXVsaHd1KHRiX3RvX3VzLCB0Yl90aWNrc19wZXJfamlmZnkgKiBsb3N0X3RpY2tzICsgZGVsdGEpOworCXVzZWMgKz0gbXVsaHd1KHRiX3RvX3VzLCBkZWx0YSk7CiAJd2hpbGUgKHVzZWMgPj0gMTAwMDAwMCkgewogCSAgCXNlYysrOwogCQl1c2VjIC09IDEwMDAwMDA7CkBAIC0yNTgsNyArMjU0LDYgQEAKIAkgKiBzdGlsbCByZWFzb25hYmxlIHdoZW4gZ2V0dGltZW9mZGF5IHJlc29sdXRpb24gaXMgMSBqaWZmeS4KIAkgKi8KIAl0Yl9kZWx0YSA9IHRiX3RpY2tzX3NpbmNlKGxhc3RfamlmZnlfc3RhbXAoc21wX3Byb2Nlc3Nvcl9pZCgpKSk7Ci0JdGJfZGVsdGEgKz0gKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogdGJfdGlja3NfcGVyX2ppZmZ5OwogCiAJbmV3X25zZWMgLT0gMTAwMCAqIG11bGh3dSh0Yl90b191cywgdGJfZGVsdGEpOwogCmRpZmYgLS1naXQgYS9hcmNoL3BwYy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCmluZGV4IGQ3YTQzMzAuLmFhZmM4ZTggMTAwNjQ0Ci0tLSBhL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCisrKyBiL2FyY2gvcHBjL2tlcm5lbC90cmFwcy5jCkBAIC0xMTksNyArMTE5LDcgQEAKIAkgKiBnZW5lcmF0ZSB0aGUgc2FtZSBleGNlcHRpb24gb3ZlciBhbmQgb3ZlciBhZ2FpbiBhbmQgd2UgZ2V0CiAJICogbm93aGVyZS4gIEJldHRlciB0byBraWxsIGl0IGFuZCBsZXQgdGhlIGtlcm5lbCBwYW5pYy4KIAkgKi8KLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdChjdXJyZW50KSkgewogCQlfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyOwogCiAJCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC9wcGMvbW0vZmF1bHQuYyBiL2FyY2gvcHBjL21tL2ZhdWx0LmMKaW5kZXggNWNkZmI3MS4uNDY1ZjQ1MSAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3BwYy9tbS9mYXVsdC5jCkBAIC0yMzksNyArMjM5LDcgQEAKIAkJLyogcHJvdGVjdGlvbiBmYXVsdCAqLwogCQlpZiAoZXJyb3JfY29kZSAmIDB4MDgwMDAwMDApCiAJCQlnb3RvIGJhZF9hcmVhOwotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKQEAgLTI5MSw3ICsyOTEsNyBAQAogICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL3BwYy9tbS9pbml0LmMgYi9hcmNoL3BwYy9tbS9pbml0LmMKaW5kZXggNTIzMzkyZC4uNDEwMjAwMCAxMDA2NDQKLS0tIGEvYXJjaC9wcGMvbW0vaW5pdC5jCisrKyBiL2FyY2gvcHBjL21tL2luaXQuYwpAQCAtMzU4LDggKzM1OCw4IEBACiAgKi8KIHZvaWQgX19pbml0IHBhZ2luZ19pbml0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyB6b25lc19zaXplW01BWF9OUl9aT05FU10sIGk7Ci0KKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIG1heF96b25lX3BmbnNbTUFYX05SX1pPTkVTXTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCW1hcF9wYWdlKFBLTUFQX0JBU0UsIDAsIDApOwkvKiBYWFggZ3Jvc3MgKi8KIAlwa21hcF9wYWdlX3RhYmxlID0gcHRlX29mZnNldF9rZXJuZWwocG1kX29mZnNldChwZ2Rfb2Zmc2V0X2sKQEAgLTM2OSwxOSArMzY5LDE4IEBACiAJCQkoS01BUF9GSVhfQkVHSU4pLCBLTUFQX0ZJWF9CRUdJTiksIEtNQVBfRklYX0JFR0lOKTsKIAlrbWFwX3Byb3QgPSBQQUdFX0tFUk5FTDsKICNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLwotCi0JLyoKLQkgKiBBbGwgcGFnZXMgYXJlIERNQS1hYmxlIHNvIHdlIHB1dCB0aGVtIGFsbCBpbiB0aGUgRE1BIHpvbmUuCi0JICovCi0Jem9uZXNfc2l6ZVtaT05FX0RNQV0gPSB0b3RhbF9sb3dtZW0gPj4gUEFHRV9TSElGVDsKLQlmb3IgKGkgPSAxOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspCi0JCXpvbmVzX3NpemVbaV0gPSAwOworCS8qIEFsbCBwYWdlcyBhcmUgRE1BLWFibGUgc28gd2UgcHV0IHRoZW0gYWxsIGluIHRoZSBETUEgem9uZS4gKi8KKwlzdGFydF9wZm4gPSBfX3BhKFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUOworCWVuZF9wZm4gPSBzdGFydF9wZm4gKyAodG90YWxfbWVtb3J5ID4+IFBBR0VfU0hJRlQpOworCWFkZF9hY3RpdmVfcmFuZ2UoMCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAogI2lmZGVmIENPTkZJR19ISUdITUVNCi0Jem9uZXNfc2l6ZVtaT05FX0hJR0hNRU1dID0gKHRvdGFsX21lbW9yeSAtIHRvdGFsX2xvd21lbSkgPj4gUEFHRV9TSElGVDsKKwltYXhfem9uZV9wZm5zWzBdID0gdG90YWxfbG93bWVtID4+IFBBR0VfU0hJRlQ7CisJbWF4X3pvbmVfcGZuc1sxXSA9IHRvdGFsX21lbW9yeSA+PiBQQUdFX1NISUZUOworI2Vsc2UKKwltYXhfem9uZV9wZm5zWzBdID0gdG90YWxfbWVtb3J5ID4+IFBBR0VfU0hJRlQ7CiAjZW5kaWYgLyogQ09ORklHX0hJR0hNRU0gKi8KLQotCWZyZWVfYXJlYV9pbml0KHpvbmVzX3NpemUpOworCWZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOwogfQogCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL0tjb25maWcgYi9hcmNoL3MzOTAvS2NvbmZpZwppbmRleCBiMjE2Y2E2Li5mOTAwYTUxIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvS2NvbmZpZworKysgYi9hcmNoL3MzOTAvS2NvbmZpZwpAQCAtNTEsNiArNTEsMTAgQEAKIAkgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIDY0IGJpdCBJQk0gelNlcmllcyBtYWNoaW5lCiAJICBhbmQgd2FudCB0byB1c2UgdGhlIDY0IGJpdCBhZGRyZXNzaW5nIG1vZGUuCiAKK2NvbmZpZyAzMkJJVAorCWJvb2wKKwlkZWZhdWx0IHkgaWYgITY0QklUCisKIGNvbmZpZyBTTVAKIAlib29sICJTeW1tZXRyaWMgbXVsdGktcHJvY2Vzc2luZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KQEAgLTE0OSw2ICsxNTMsMTQgQEAKIAkgIFRoaXMgd2lsbCBiZSBzbGlnaHRseSBmYXN0ZXIgYnV0IGRvZXMgbm90IHdvcmsgb24KIAkgIG9sZGVyIG1hY2hpbmVzIHN1Y2ggYXMgdGhlIHo5MDAuCiAKK2NvbmZpZyBNQVJDSF9aOV8xMDkKKwlib29sICJJQk0gU3lzdGVtIHo5IgorCWhlbHAKKwkgIFNlbGVjdCB0aGlzIHRvIGVuYWJsZSBvcHRpbWl6YXRpb25zIGZvciBJQk0gU3lzdGVtIHo5LTEwOSwgSUJNCisJICBTeXN0ZW0gejkgRW50ZXJwcmlzZSBDbGFzcyAoejkgRUMpLCBhbmQgSUJNIFN5c3RlbSB6OSBCdXNpbmVzcworCSAgQ2xhc3MgKHo5IEJDKS4gVGhlIGtlcm5lbCB3aWxsIGJlIHNsaWdodGx5IGZhc3RlciBidXQgd2lsbCBub3QKKwkgIHdvcmsgb24gb2xkZXIgbWFjaGluZXMgc3VjaCBhcyB0aGUgejk5MCwgejg5MCwgejkwMCwgYW5kIHo4MDAuCisKIGVuZGNob2ljZQogCiBjb25maWcgUEFDS19TVEFDSwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL01ha2VmaWxlIGIvYXJjaC9zMzkwL01ha2VmaWxlCmluZGV4IDc0ZWY1N2QuLjVkZWI5ZjcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9NYWtlZmlsZQorKysgYi9hcmNoL3MzOTAvTWFrZWZpbGUKQEAgLTMzLDYgKzMzLDcgQEAKIGNmbGFncy0kKENPTkZJR19NQVJDSF9HNSkgICArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD1nNSkKIGNmbGFncy0kKENPTkZJR19NQVJDSF9aOTAwKSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OTAwKQogY2ZsYWdzLSQoQ09ORklHX01BUkNIX1o5OTApICs9ICQoY2FsbCBjYy1vcHRpb24sLW1hcmNoPXo5OTApCitjZmxhZ3MtJChDT05GSUdfTUFSQ0hfWjlfMTA5KSArPSAkKGNhbGwgY2Mtb3B0aW9uLC1tYXJjaD16OS0xMDkpCiAKICMKICMgUHJldmVudCB0YWlsLWNhbGwgb3B0aW1pemF0aW9ucywgdG8gZ2V0IGNsZWFyZXIgYmFja3RyYWNlczoKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMgYi9hcmNoL3MzOTAvYXBwbGRhdGEvYXBwbGRhdGFfYmFzZS5jCmluZGV4IGI2OWVkNzQuLjJiMWU2YzkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9hcHBsZGF0YS9hcHBsZGF0YV9iYXNlLmMKKysrIGIvYXJjaC9zMzkwL2FwcGxkYXRhL2FwcGxkYXRhX2Jhc2UuYwpAQCAtMTYsNyArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L3BhZ2UtZmxhZ3MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CkBAIC0xNTcsMTIgKzE1NywxMiBAQAogCQkucHJvZF9uciAgICA9IHsweEQzLCAweEM5LCAweEQ1LCAweEU0LAogCQkJICAgICAgIDB4RTcsIDB4RDIsIDB4RDl9LAkvKiAiTElOVVhLUiIgKi8KIAkJLnByb2RfZm4gICAgPSAweEQ1RDMsCQkJLyogIk5MIiAqLwotCQkucmVjb3JkX25yICA9IHJlY29yZF9uciwKIAkJLnZlcnNpb25fbnIgPSAweEYyRjYsCQkJLyogIjI2IiAqLwogCQkucmVsZWFzZV9uciA9IDB4RjBGMSwJCQkvKiAiMDEiICovCi0JCS5tb2RfbHZsICAgID0gKG1vZF9sdmxbMF0pIDw8IDggfCBtb2RfbHZsWzFdLAogCX07CiAKKwlpZC5yZWNvcmRfbnIgPSByZWNvcmRfbnI7CisJaWQubW9kX2x2bCA9IChtb2RfbHZsWzBdKSA8PCA4IHwgbW9kX2x2bFsxXTsKIAlyZXR1cm4gYXBwbGRhdGFfYXNtKCZpZCwgZnVuY3Rpb24sICh2b2lkICopIGJ1ZmZlciwgbGVuZ3RoKTsKIH0KIC8qKioqKioqKioqKioqKioqKioqKioqKiogdGltZXIsIHdvcmssIERJQUcgPEVORD4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9jcnlwdG8vY3J5cHRfczM5MC5oIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKaW5kZXggZWZkODM2Yy4uMmIxMzcwOCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKKysrIGIvYXJjaC9zMzkwL2NyeXB0by9jcnlwdF9zMzkwLmgKQEAgLTEwNSw2MyArMTA1LDYgQEAKIH07CiAKIC8qCi0gKiBTdGFuZGFyZCBmaXh1cCBhbmQgZXhfdGFibGUgc2VjdGlvbnMgZm9yIGNyeXB0X3MzOTAgaW5saW5lIGZ1bmN0aW9ucy4KLSAqIGxhYmVsIDA6IHRoZSBzMzkwIGNyeXB0byBvcGVyYXRpb24KLSAqIGxhYmVsIDE6IGp1c3QgYWZ0ZXIgMSB0byBjYXRjaCBpbGxlZ2FsIG9wZXJhdGlvbiBleGNlcHRpb24KLSAqICAgICAgICAgICh1bnN1cHBvcnRlZCBtb2RlbCkKLSAqIGxhYmVsIDY6IHRoZSByZXR1cm4gcG9pbnQgYWZ0ZXIgZml4dXAKLSAqIGxhYmVsIDc6IHNldCBlcnJvciB2YWx1ZSBpZiBleGNlcHRpb24gX2luXyBjcnlwdG8gb3BlcmF0aW9uCi0gKiBsYWJlbCA4OiBzZXQgZXJyb3IgdmFsdWUgaWYgaWxsZWdhbCBvcGVyYXRpb24gZXhjZXB0aW9uCi0gKiBbcmV0XSBpcyB0aGUgdmFyaWFibGUgdG8gcmVjZWl2ZSB0aGUgZXJyb3IgY29kZQotICogW0VSUl0gaXMgdGhlIGVycm9yIGNvZGUgdmFsdWUKLSAqLwotI2lmbmRlZiBDT05GSUdfNjRCSVQKLSNkZWZpbmUgX19jcnlwdF9zMzkwX2ZpeHVwIFwKLQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIiBcbiIJXAotCSI3OglsaGkJJTAsJWhbZTFdIFxuIglcCi0JIglicmFzCTEsOWYgXG4iCVwKLQkiCS5sb25nCTZiIFxuIgkJXAotCSI4OglsaGkJJTAsJWhbZTJdIFxuIglcCi0JIglicmFzCTEsOWYgXG4iCVwKLQkiCS5sb25nCTZiIFxuIgkJXAotCSI5OglsCTEsMCgxKSBcbiIJXAotCSIJYnIJMSBcbiIJCVwKLQkiLnByZXZpb3VzIFxuIgkJCVwKLQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIiBcbiIJXAotCSIJLmFsaWduCTQgXG4iCQlcCi0JIgkubG9uZwkwYiw3YiBcbiIJXAotCSIJLmxvbmcJMWIsOGIgXG4iCVwKLQkiLnByZXZpb3VzIgotI2Vsc2UgLyogQ09ORklHXzY0QklUICovCi0jZGVmaW5lIF9fY3J5cHRfczM5MF9maXh1cCBcCi0JIi5zZWN0aW9uIC5maXh1cCxcImF4XCIgXG4iCVwKLQkiNzoJbGhpCSUwLCVoW2UxXSBcbiIJXAotCSIJamcJNmIgXG4iCQlcCi0JIjg6CWxoaQklMCwlaFtlMl0gXG4iCVwKLQkiCWpnCTZiIFxuIgkJXAotCSIucHJldmlvdXNcbiIJCQlcCi0JIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCIgXG4iCVwKLQkiCS5hbGlnbgk4IFxuIgkJXAotCSIJLnF1YWQJMGIsN2IgXG4iCVwKLQkiCS5xdWFkCTFiLDhiIFxuIglcCi0JIi5wcmV2aW91cyIKLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KLQotLyoKLSAqIFN0YW5kYXJkIGNvZGUgZm9yIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBzMzkwIGNyeXB0byBpbnN0cnVjdGlvbnMuCi0gKiAlMDogdGhlIHJlZ2lzdGVyIHdoaWNoIHdpbGwgcmVjZWl2ZSB0aGUgcmVzdWx0Ci0gKiBbcmVzdWx0XTogdGhlIHJlZ2lzdGVyIGNvbnRhaW5pbmcgdGhlIHJlc3VsdCAoZS5nLiBzZWNvbmQgb3BlcmFuZCBsZW5ndGgKLSAqIHRvIGNvbXB1dGUgbnVtYmVyIG9mIHByb2Nlc3NlZCBieXRlc10uCi0gKi8KLSNpZm5kZWYgQ09ORklHXzY0QklUCi0jZGVmaW5lIF9fY3J5cHRfczM5MF9zZXRfcmVzdWx0IFwKLQkiCWxyCSUwLCVbcmVzdWx0XSBcbiIKLSNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotI2RlZmluZSBfX2NyeXB0X3MzOTBfc2V0X3Jlc3VsdCBcCi0JIglsZ3IJJTAsJVtyZXN1bHRdIFxuIgotI2VuZGlmCi0KLS8qCiAgKiBFeGVjdXRlcyB0aGUgS00gKENJUEhFUiBNRVNTQUdFKSBvcGVyYXRpb24gb2YgdGhlIENQVS4KICAqIEBwYXJhbSBmdW5jOiB0aGUgZnVuY3Rpb24gY29kZSBwYXNzZWQgdG8gS007IHNlZSBjcnlwdF9zMzkwX2ttX2Z1bmMKICAqIEBwYXJhbSBwYXJhbTogYWRkcmVzcyBvZiBwYXJhbWV0ZXIgYmxvY2s7IHNlZSBQT1AgZm9yIGRldGFpbHMgb24gZWFjaCBmdW5jCkBAIC0xNzYsMjggKzExOSwyNCBAQAogewogCXJlZ2lzdGVyIGxvbmcgX19mdW5jIGFzbSgiMCIpID0gZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLOwogCXJlZ2lzdGVyIHZvaWQqIF9fcGFyYW0gYXNtKCIxIikgPSBwYXJhbTsKLQlyZWdpc3RlciB1OCogX19kZXN0IGFzbSgiNCIpID0gZGVzdDsKIAlyZWdpc3RlciBjb25zdCB1OCogX19zcmMgYXNtKCIyIikgPSBzcmM7CiAJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOworCXJlZ2lzdGVyIHU4KiBfX2Rlc3QgYXNtKCI0IikgPSBkZXN0OwogCWludCByZXQ7CiAKLQlyZXQgPSAwOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjA6CS5pbnNuCXJyZSwweEI5MkUwMDAwLCUxLCUyIFxuIiAvKiBLTSBvcGNvZGUgKi8KKwlhc20gdm9sYXRpbGUoCisJCSIwOgkuaW5zbglycmUsMHhiOTJlMDAwMCwlMywlMSBcbiIgLyogS00gb3Bjb2RlICovCiAJCSIxOglicmMJMSwwYiBcbiIgLyogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqLwotCQlfX2NyeXB0X3MzOTBfc2V0X3Jlc3VsdAotCQkiNjoJXG4iCi0JCV9fY3J5cHRfczM5MF9maXh1cAotCQk6ICIrZCIgKHJldCksICIrYSIgKF9fZGVzdCksICIrYSIgKF9fc3JjKSwKLQkJICBbcmVzdWx0XSAiK2QiIChfX3NyY19sZW4pCi0JCTogW2UxXSAiSyIgKC1FRkFVTFQpLCBbZTJdICJLIiAoLUVOT1NZUyksICJkIiAoX19mdW5jKSwKLQkJICAiYSIgKF9fcGFyYW0pCi0JCTogImNjIiwgIm1lbW9yeSIKLQkpOwotCWlmIChyZXQgPj0gMCAmJiBmdW5jICYgQ1JZUFRfUzM5MF9GVU5DX01BU0spewotCQlyZXQgPSBzcmNfbGVuIC0gcmV0OwotCX0KLQlyZXR1cm4gcmV0OworCQkiCWFoaQklMCwlaDdcbiIKKwkJIjI6CWFoaQklMCwlaDhcbiIKKwkJIjM6XG4iCisJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgxYiwyYikKKwkJOiAiPWQiIChyZXQpLCAiK2EiIChfX3NyYyksICIrZCIgKF9fc3JjX2xlbiksICIrYSIgKF9fZGVzdCkKKwkJOiAiZCIgKF9fZnVuYyksICJhIiAoX19wYXJhbSksICIwIiAoLUVGQVVMVCksCisJCSAgIksiIChFTk9TWVMpLCAiSyIgKC1FTk9TWVMgKyBFRkFVTFQpIDogImNjIiwgIm1lbW9yeSIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAoZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKSA/IHNyY19sZW4gLSBfX3NyY19sZW4gOiBfX3NyY19sZW47CiB9CiAKIC8qCkBAIC0yMTUsMjggKzE1NCwyNCBAQAogewogCXJlZ2lzdGVyIGxvbmcgX19mdW5jIGFzbSgiMCIpID0gZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLOwogCXJlZ2lzdGVyIHZvaWQqIF9fcGFyYW0gYXNtKCIxIikgPSBwYXJhbTsKLQlyZWdpc3RlciB1OCogX19kZXN0IGFzbSgiNCIpID0gZGVzdDsKIAlyZWdpc3RlciBjb25zdCB1OCogX19zcmMgYXNtKCIyIikgPSBzcmM7CiAJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOworCXJlZ2lzdGVyIHU4KiBfX2Rlc3QgYXNtKCI0IikgPSBkZXN0OwogCWludCByZXQ7CiAKLQlyZXQgPSAwOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjA6CS5pbnNuCXJyZSwweEI5MkYwMDAwLCUxLCUyIFxuIiAvKiBLTUMgb3Bjb2RlICovCisJYXNtIHZvbGF0aWxlKAorCQkiMDoJLmluc24JcnJlLDB4YjkyZjAwMDAsJTMsJTEgXG4iIC8qIEtNQyBvcGNvZGUgKi8KIAkJIjE6CWJyYwkxLDBiIFxuIiAvKiBoYW5kbGUgcGFydGlhbCBjb21wbGV0aW9uICovCi0JCV9fY3J5cHRfczM5MF9zZXRfcmVzdWx0Ci0JCSI2OglcbiIKLQkJX19jcnlwdF9zMzkwX2ZpeHVwCi0JCTogIitkIiAocmV0KSwgIithIiAoX19kZXN0KSwgIithIiAoX19zcmMpLAotCQkgIFtyZXN1bHRdICIrZCIgKF9fc3JjX2xlbikKLQkJOiBbZTFdICJLIiAoLUVGQVVMVCksIFtlMl0gIksiICgtRU5PU1lTKSwgImQiIChfX2Z1bmMpLAotCQkgICJhIiAoX19wYXJhbSkKLQkJOiAiY2MiLCAibWVtb3J5IgotCSk7Ci0JaWYgKHJldCA+PSAwICYmIGZ1bmMgJiBDUllQVF9TMzkwX0ZVTkNfTUFTSyl7Ci0JCXJldCA9IHNyY19sZW4gLSByZXQ7Ci0JfQotCXJldHVybiByZXQ7CisJCSIJYWhpCSUwLCVoN1xuIgorCQkiMjoJYWhpCSUwLCVoOFxuIgorCQkiMzpcbiIKKwkJRVhfVEFCTEUoMGIsM2IpIEVYX1RBQkxFKDFiLDJiKQorCQk6ICI9ZCIgKHJldCksICIrYSIgKF9fc3JjKSwgIitkIiAoX19zcmNfbGVuKSwgIithIiAoX19kZXN0KQorCQk6ICJkIiAoX19mdW5jKSwgImEiIChfX3BhcmFtKSwgIjAiICgtRUZBVUxUKSwKKwkJICAiSyIgKEVOT1NZUyksICJLIiAoLUVOT1NZUyArIEVGQVVMVCkgOiAiY2MiLCAibWVtb3J5Iik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChmdW5jICYgQ1JZUFRfUzM5MF9GVU5DX01BU0spID8gc3JjX2xlbiAtIF9fc3JjX2xlbiA6IF9fc3JjX2xlbjsKIH0KIAogLyoKQEAgLTI1OCwyMiArMTkzLDE5IEBACiAJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOwogCWludCByZXQ7CiAKLQlyZXQgPSAwOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjA6CS5pbnNuCXJyZSwweEI5M0UwMDAwLCUxLCUxIFxuIiAvKiBLSU1EIG9wY29kZSAqLwotCQkiMToJYnJjCTEsMGIgXG4iIC8qIGhhbmRsZSBwYXJ0aWNhbCBjb21wbGV0aW9uICovCi0JCV9fY3J5cHRfczM5MF9zZXRfcmVzdWx0Ci0JCSI2OglcbiIKLQkJX19jcnlwdF9zMzkwX2ZpeHVwCi0JCTogIitkIiAocmV0KSwgIithIiAoX19zcmMpLCBbcmVzdWx0XSAiK2QiIChfX3NyY19sZW4pCi0JCTogW2UxXSAiSyIgKC1FRkFVTFQpLCBbZTJdICJLIiAoLUVOT1NZUyksICJkIiAoX19mdW5jKSwKLQkJICAiYSIgKF9fcGFyYW0pCi0JCTogImNjIiwgIm1lbW9yeSIKLQkpOwotCWlmIChyZXQgPj0gMCAmJiAoZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKSl7Ci0JCXJldCA9IHNyY19sZW4gLSByZXQ7Ci0JfQotCXJldHVybiByZXQ7CisJYXNtIHZvbGF0aWxlKAorCQkiMDoJLmluc24JcnJlLDB4YjkzZTAwMDAsJTEsJTEgXG4iIC8qIEtJTUQgb3Bjb2RlICovCisJCSIxOglicmMJMSwwYiBcbiIgLyogaGFuZGxlIHBhcnRpYWwgY29tcGxldGlvbiAqLworCQkiCWFoaQklMCwlaDZcbiIKKwkJIjI6CWFoaQklMCwlaDdcbiIKKwkJIjM6XG4iCisJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgxYiwyYikKKwkJOiAiPWQiIChyZXQpLCAiK2EiIChfX3NyYyksICIrZCIgKF9fc3JjX2xlbikKKwkJOiAiZCIgKF9fZnVuYyksICJhIiAoX19wYXJhbSksICIwIiAoLUVGQVVMVCksCisJCSAgIksiIChFTk9TWVMpLCAiSyIgKC1FTk9TWVMgKyBFRkFVTFQpIDogImNjIiwgIm1lbW9yeSIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiAoZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKSA/IHNyY19sZW4gLSBfX3NyY19sZW4gOiBfX3NyY19sZW47CiB9CiAKIC8qCkBAIC0yOTQsMjIgKzIyNiwxOSBAQAogCXJlZ2lzdGVyIGxvbmcgX19zcmNfbGVuIGFzbSgiMyIpID0gc3JjX2xlbjsKIAlpbnQgcmV0OwogCi0JcmV0ID0gMDsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIwOgkuaW5zbglycmUsMHhCOTNGMDAwMCwlMSwlMSBcbiIgLyogS0xNRCBvcGNvZGUgKi8KLQkJIjE6CWJyYwkxLDBiIFxuIiAvKiBoYW5kbGUgcGFydGljYWwgY29tcGxldGlvbiAqLwotCQlfX2NyeXB0X3MzOTBfc2V0X3Jlc3VsdAotCQkiNjoJXG4iCi0JCV9fY3J5cHRfczM5MF9maXh1cAotCQk6ICIrZCIgKHJldCksICIrYSIgKF9fc3JjKSwgW3Jlc3VsdF0gIitkIiAoX19zcmNfbGVuKQotCQk6IFtlMV0gIksiICgtRUZBVUxUKSwgW2UyXSAiSyIgKC1FTk9TWVMpLCAiZCIgKF9fZnVuYyksCi0JCSAgImEiIChfX3BhcmFtKQotCQk6ICJjYyIsICJtZW1vcnkiCi0JKTsKLQlpZiAocmV0ID49IDAgJiYgZnVuYyAmIENSWVBUX1MzOTBfRlVOQ19NQVNLKXsKLQkJcmV0ID0gc3JjX2xlbiAtIHJldDsKLQl9Ci0JcmV0dXJuIHJldDsKKwlhc20gdm9sYXRpbGUoCisJCSIwOgkuaW5zbglycmUsMHhiOTNmMDAwMCwlMSwlMSBcbiIgLyogS0xNRCBvcGNvZGUgKi8KKwkJIjE6CWJyYwkxLDBiIFxuIiAvKiBoYW5kbGUgcGFydGlhbCBjb21wbGV0aW9uICovCisJCSIJYWhpCSUwLCVoNlxuIgorCQkiMjoJYWhpCSUwLCVoN1xuIgorCQkiMzpcbiIKKwkJRVhfVEFCTEUoMGIsM2IpIEVYX1RBQkxFKDFiLDJiKQorCQk6ICI9ZCIgKHJldCksICIrYSIgKF9fc3JjKSwgIitkIiAoX19zcmNfbGVuKQorCQk6ICJkIiAoX19mdW5jKSwgImEiIChfX3BhcmFtKSwgIjAiICgtRUZBVUxUKSwKKwkJICAiSyIgKEVOT1NZUyksICJLIiAoLUVOT1NZUyArIEVGQVVMVCkgOiAiY2MiLCAibWVtb3J5Iik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIChmdW5jICYgQ1JZUFRfUzM5MF9GVU5DX01BU0spID8gc3JjX2xlbiAtIF9fc3JjX2xlbiA6IF9fc3JjX2xlbjsKIH0KIAogLyoKQEAgLTMzMSwyMiArMjYwLDE5IEBACiAJcmVnaXN0ZXIgbG9uZyBfX3NyY19sZW4gYXNtKCIzIikgPSBzcmNfbGVuOwogCWludCByZXQ7CiAKLQlyZXQgPSAwOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjA6CS5pbnNuCXJyZSwweEI5MUUwMDAwLCU1LCU1IFxuIiAvKiBLTUFDIG9wY29kZSAqLwotCQkiMToJYnJjCTEsMGIgXG4iIC8qIGhhbmRsZSBwYXJ0aWNhbCBjb21wbGV0aW9uICovCi0JCV9fY3J5cHRfczM5MF9zZXRfcmVzdWx0Ci0JCSI2OglcbiIKLQkJX19jcnlwdF9zMzkwX2ZpeHVwCi0JCTogIitkIiAocmV0KSwgIithIiAoX19zcmMpLCBbcmVzdWx0XSAiK2QiIChfX3NyY19sZW4pCi0JCTogW2UxXSAiSyIgKC1FRkFVTFQpLCBbZTJdICJLIiAoLUVOT1NZUyksICJkIiAoX19mdW5jKSwKLQkJICAiYSIgKF9fcGFyYW0pCi0JCTogImNjIiwgIm1lbW9yeSIKLQkpOwotCWlmIChyZXQgPj0gMCAmJiBmdW5jICYgQ1JZUFRfUzM5MF9GVU5DX01BU0spewotCQlyZXQgPSBzcmNfbGVuIC0gcmV0OwotCX0KLQlyZXR1cm4gcmV0OworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CS5pbnNuCXJyZSwweGI5MWUwMDAwLCUxLCUxIFxuIiAvKiBLTEFDIG9wY29kZSAqLworCQkiMToJYnJjCTEsMGIgXG4iIC8qIGhhbmRsZSBwYXJ0aWFsIGNvbXBsZXRpb24gKi8KKwkJIglhaGkJJTAsJWg2XG4iCisJCSIyOglhaGkJJTAsJWg3XG4iCisJCSIzOlxuIgorCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMWIsMmIpCisJCTogIj1kIiAocmV0KSwgIithIiAoX19zcmMpLCAiK2QiIChfX3NyY19sZW4pCisJCTogImQiIChfX2Z1bmMpLCAiYSIgKF9fcGFyYW0pLCAiMCIgKC1FRkFVTFQpLAorCQkgICJLIiAoRU5PU1lTKSwgIksiICgtRU5PU1lTICsgRUZBVUxUKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwlyZXR1cm4gKGZ1bmMgJiBDUllQVF9TMzkwX0ZVTkNfTUFTSykgPyBzcmNfbGVuIC0gX19zcmNfbGVuIDogX19zcmNfbGVuOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMgYi9hcmNoL3MzOTAvaHlwZnMvaHlwZnNfZGlhZy5jCmluZGV4IDc1MTQ0ZWYuLjQ0M2ZhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9oeXBmc19kaWFnLmMKKysrIGIvYXJjaC9zMzkwL2h5cGZzL2h5cGZzX2RpYWcuYwpAQCAtMzMzLDIyICszMzMsMTQgQEAKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9zdWJjb2RlIGFzbSgiMCIpID0gc3ViY29kZTsKIAlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9zaXplIGFzbSgiMSIpID0gc2l6ZTsKIAotCWFzbSB2b2xhdGlsZSAoIiAgIGRpYWcgICAgJTIsJTAsMHgyMDRcbiIKLQkJICAgICAgIjA6IFxuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotI2lmbmRlZiBfX3MzOTB4X18KLQkJICAgICAgIiAgICAuYWxpZ24gNFxuIgotCQkgICAgICAiICAgIC5sb25nICAwYiwwYlxuIgotI2Vsc2UKLQkJICAgICAgIiAgICAuYWxpZ24gOFxuIgotCQkgICAgICAiICAgIC5xdWFkICAwYiwwYlxuIgotI2VuZGlmCi0JCSAgICAgICIucHJldmlvdXMiOiIrZCIgKF9zdWJjb2RlKSwgIitkIihfc2l6ZSkKLQkJICAgICAgOiJkIihhZGRyKQotCQkgICAgICA6Im1lbW9yeSIpOworCWFzbSB2b2xhdGlsZSgKKwkJIglkaWFnCSUyLCUwLDB4MjA0XG4iCisJCSIwOlxuIgorCQlFWF9UQUJMRSgwYiwwYikKKwkJOiAiK2QiIChfc3ViY29kZSksICIrZCIgKF9zaXplKSA6ICJkIiAoYWRkcikgOiAibWVtb3J5Iik7CiAJaWYgKF9zdWJjb2RlKQogCQlyZXR1cm4gLTE7Ci0JZWxzZQotCQlyZXR1cm4gX3NpemU7CisJcmV0dXJuIF9zaXplOwogfQogCiAvKgpAQCAtNDAzLDcgKzM5NSw4IEBACiAJCSpwYWdlcyA9IDE7CiAJCXJldHVybiBkaWFnMjA0X2FsbG9jX3JidWYoKTsKIAl9IGVsc2Ugey8qIElORk9fRVhUICovCi0JCSpwYWdlcyA9IGRpYWcyMDQoU1VCQ19SU0kgfCBJTkZPX0VYVCwgMCwgTlVMTCk7CisJCSpwYWdlcyA9IGRpYWcyMDQoKHVuc2lnbmVkIGxvbmcpU1VCQ19SU0kgfAorCQkJCSAodW5zaWduZWQgbG9uZylJTkZPX0VYVCwgMCwgTlVMTCk7CiAJCWlmICgqcGFnZXMgPD0gMCkKIAkJCXJldHVybiBFUlJfUFRSKC1FTk9TWVMpOwogCQllbHNlCkBAIC00OTAsOCArNDgzLDcgQEAKIAogc3RhdGljIHZvaWQgZGlhZzIyNCh2b2lkICpwdHIpCiB7Ci0JYXNtIHZvbGF0aWxlKCIgICBkaWFnICAgICUwLCUxLDB4MjI0XG4iCi0JCSAgICAgOiA6ImQiICgwKSwgImQiKHB0cikgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKCJkaWFnICUwLCUxLDB4MjI0IiA6IDoiZCIgKDApLCAiZCIocHRyKSA6ICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGludCBkaWFnMjI0X2dldF9uYW1lX3RhYmxlKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvaHlwZnMvaW5vZGUuYyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCmluZGV4IGJkYWRlNWYuLmNkNzAyYWUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCisrKyBiL2FyY2gvczM5MC9oeXBmcy9pbm9kZS5jCkBAIC05MSw3ICs5MSw2IEBACiAJCXJldC0+aV9tb2RlID0gbW9kZTsKIAkJcmV0LT5pX3VpZCA9IGh5cGZzX2luZm8tPnVpZDsKIAkJcmV0LT5pX2dpZCA9IGh5cGZzX2luZm8tPmdpZDsKLQkJcmV0LT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCXJldC0+aV9ibG9ja3MgPSAwOwogCQlyZXQtPmlfYXRpbWUgPSByZXQtPmlfbXRpbWUgPSByZXQtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJCWlmIChtb2RlICYgU19JRkRJUikKQEAgLTEwNCwxMyArMTAzLDEzIEBACiAKIHN0YXRpYyB2b2lkIGh5cGZzX2Ryb3BfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlrZnJlZShpbm9kZS0+dS5nZW5lcmljX2lwKTsKKwlrZnJlZShpbm9kZS0+aV9wcml2YXRlKTsKIAlnZW5lcmljX2RlbGV0ZV9pbm9kZShpbm9kZSk7CiB9CiAKIHN0YXRpYyBpbnQgaHlwZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQljaGFyICpkYXRhID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwljaGFyICpkYXRhID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZTsKIAlzdHJ1Y3QgaHlwZnNfc2JfaW5mbyAqZnNfaW5mbzsKIAogCWlmIChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgewpAQCAtMTM1LDEyICsxMzQsMjAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHNzaXplX3QgaHlwZnNfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBfX3VzZXIgY2hhciAqYnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3Qgb2Zmc2V0KQorc3RhdGljIHNzaXplX3QgaHlwZnNfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IG9mZnNldCkKIHsKIAljaGFyICpkYXRhOwogCXNpemVfdCBsZW47CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOworCS8qIFhYWDogdGVtcG9yYXJ5ICovCisJY2hhciBfX3VzZXIgKmJ1ZiA9IGlvdlswXS5pb3ZfYmFzZTsKKwlzaXplX3QgY291bnQgPSBpb3ZbMF0uaW92X2xlbjsKKworCWlmIChucl9zZWdzICE9IDEpIHsKKwkJY291bnQgPSAtRUlOVkFMOworCQlnb3RvIG91dDsKKwl9CiAKIAlkYXRhID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWxlbiA9IHN0cmxlbihkYXRhKTsKQEAgLTE1OSwxMiArMTY2LDEzIEBACiBvdXQ6CiAJcmV0dXJuIGNvdW50OwogfQotc3RhdGljIHNzaXplX3QgaHlwZnNfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCitzdGF0aWMgc3NpemVfdCBoeXBmc19haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IG9mZnNldCkKIHsKIAlpbnQgcmM7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgaHlwZnNfc2JfaW5mbyAqZnNfaW5mbzsKKwlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CiAKIAlzYiA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3NiOwogCWZzX2luZm8gPSBzYi0+c19mc19pbmZvOwpAQCAtMzUyLDcgKzM2MCw3IEBACiAJCXBhcmVudC0+ZF9pbm9kZS0+aV9ubGluaysrOwogCX0gZWxzZQogCQlCVUcoKTsKLQlpbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwlpbm9kZS0+aV9wcml2YXRlID0gZGF0YTsKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCWRnZXQoZGVudHJ5KTsKIAlyZXR1cm4gZGVudHJ5OwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X2xpbnV4LmMKaW5kZXggNzg1YzlmNy4uYzQ2ZTNkNCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfbGludXguYworKysgYi9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF9saW51eC5jCkBAIC01NDQsMTAgKzU0NCw3IEBACiAJCWN1cnJlbnQtPnB0cmFjZSAmPSB+UFRfRFRSQUNFOwogCQl0YXNrX3VubG9jayhjdXJyZW50KTsKIAkJY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MuZnBjPTA7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fCi0JCSAgICAgICAgKCJzciAgMCwwXG5cdCIKLQkJICAgICAgICAgInNmcGMgMCwwXG5cdCIKLQkJCSA6IDogOiIwIik7CisJCWFzbSB2b2xhdGlsZSgic2ZwYyAlMCwwIiA6IDogImQiICgwKSk7CiAJfQogICAgICAgICBwdXRuYW1lKGZpbGVuYW1lKTsKIG91dDoKQEAgLTcwOCw3ICs3MDUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfU1lTQ1RMCisjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCiBzdHJ1Y3QgX19zeXNjdGxfYXJnczMyIHsKIAl1MzIgbmFtZTsKIAlpbnQgbmxlbjsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUyBiL2FyY2gvczM5MC9rZXJuZWwvY29tcGF0X3dyYXBwZXIuUwppbmRleCA0ZDUzYjI3Li40YWFiZWVhIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2NvbXBhdF93cmFwcGVyLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9jb21wYXRfd3JhcHBlci5TCkBAIC00LDk3ICs0LDk3IEBACiAqCiAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDIwMDAsMjAwNgogKiAgICBBdXRob3Iocyk6IEdlcmhhcmQgVG9ubiAodG9uQGRlLmlibS5jb20pLAotKiAgICAgICAgICAgICAgIFRob21hcyBTcGF0emllciAodHNwYXRAZGUuaWJtLmNvbSkKLSovIAorKgkJVGhvbWFzIFNwYXR6aWVyICh0c3BhdEBkZS5pYm0uY29tKQorKi8KIAotCS5nbG9ibCAgc3lzMzJfZXhpdF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9leGl0X3dyYXBwZXIKIHN5czMyX2V4aXRfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWpnCXN5c19leGl0CQkjIGJyYW5jaCB0byBzeXNfZXhpdAotICAgIAotCS5nbG9ibCAgc3lzMzJfcmVhZF93cmFwcGVyIAorCisJLmdsb2JsCXN5czMyX3JlYWRfd3JhcHBlcgogc3lzMzJfcmVhZF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIGNoYXIgKgogCWxsZ2ZyCSVyNCwlcjQJCQkjIHNpemVfdAogCWpnCXN5czMyX3JlYWQJCSMgYnJhbmNoIHRvIHN5c19yZWFkCiAKLQkuZ2xvYmwgIHN5czMyX3dyaXRlX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3dyaXRlX3dyYXBwZXIKIHN5czMyX3dyaXRlX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3QgY2hhciAqCiAJbGxnZnIJJXI0LCVyNAkJCSMgc2l6ZV90CiAJamcJc3lzMzJfd3JpdGUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX29wZW5fd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfb3Blbl93cmFwcGVyCiBzeXMzMl9vcGVuX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKIAlsZ2ZyCSVyNCwlcjQJCQkjIGludAogCWpnCXN5c19vcGVuCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9jbG9zZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9jbG9zZV93cmFwcGVyCiBzeXMzMl9jbG9zZV93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWpnCXN5c19jbG9zZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfY3JlYXRfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfY3JlYXRfd3JhcHBlcgogc3lzMzJfY3JlYXRfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIGludAogCWpnCXN5c19jcmVhdAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbGlua193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9saW5rX3dyYXBwZXIKIHN5czMyX2xpbmtfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsbGd0cgklcjMsJXIzCQkJIyBjb25zdCBjaGFyICoKIAlqZwlzeXNfbGluawkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfdW5saW5rX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3VubGlua193cmFwcGVyCiBzeXMzMl91bmxpbmtfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlqZwlzeXNfdW5saW5rCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9jaGRpcl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9jaGRpcl93cmFwcGVyCiBzeXMzMl9jaGRpcl93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWpnCXN5c19jaGRpcgkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfdGltZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl90aW1lX3dyYXBwZXIKIHN5czMyX3RpbWVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBpbnQgKgogCWpnCWNvbXBhdF9zeXNfdGltZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbWtub2Rfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbWtub2Rfd3JhcHBlcgogc3lzMzJfbWtub2Rfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKLQlsZ2ZyCSVyMywlcjMJCQkjIGludCAKKwlsZ2ZyCSVyMywlcjMJCQkjIGludAogCWxsZ2ZyCSVyNCwlcjQJCQkjIGRldgogCWpnCXN5c19ta25vZAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfY2htb2Rfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfY2htb2Rfd3JhcHBlcgogc3lzMzJfY2htb2Rfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsbGdmcgklcjMsJXIzCQkJIyBtb2RlX3QKIAlqZwlzeXNfY2htb2QJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2xjaG93bjE2X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2xjaG93bjE2X3dyYXBwZXIKIHN5czMyX2xjaG93bjE2X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCi0JbGxnZnIJJXIzLCVyMwkJCSMgX19rZXJuZWxfb2xkX3VpZF9lbXUzMV90IAotCWxsZ2ZyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdCAKKwlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QKKwlsbGdmcgklcjQsJXI0CQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QKIAlqZwlzeXMzMl9sY2hvd24xNgkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbHNlZWtfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbHNlZWtfd3JhcHBlcgogc3lzMzJfbHNlZWtfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKIAlsZ2ZyCSVyMywlcjMJCQkjIG9mZl90CiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgaW50CiAJamcJc3lzX2xzZWVrCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0jc3lzMzJfZ2V0cGlkX3dyYXBwZXIJCQkJIyB2b2lkIAorI3N5czMyX2dldHBpZF93cmFwcGVyCQkJCSMgdm9pZAogCi0JLmdsb2JsICBzeXMzMl9tb3VudF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tb3VudF93cmFwcGVyCiBzeXMzMl9tb3VudF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIGNoYXIgKgpAQCAtMTAzLDE5ICsxMDMsMTkgQEAKIAlsbGd0cgklcjYsJXI2CQkJIyB2b2lkICoKIAlqZwljb21wYXRfc3lzX21vdW50CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX29sZHVtb3VudF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9vbGR1bW91bnRfd3JhcHBlcgogc3lzMzJfb2xkdW1vdW50X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJamcJc3lzX29sZHVtb3VudAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2V0dWlkMTZfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0dWlkMTZfd3JhcHBlcgogc3lzMzJfc2V0dWlkMTZfd3JhcHBlcjoKLQlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QgCisJbGxnZnIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX3VpZF9lbXUzMV90CiAJamcJc3lzMzJfc2V0dWlkMTYJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl9nZXR1aWQxNl93cmFwcGVyCQkJIyB2b2lkIAorI3N5czMyX2dldHVpZDE2X3dyYXBwZXIJCQkjIHZvaWQKIAotCS5nbG9ibCAgc3lzMzJfcHRyYWNlX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3B0cmFjZV93cmFwcGVyCiBzeXMzMl9wdHJhY2Vfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGxvbmcKIAlsZ2ZyCSVyMywlcjMJCQkjIGxvbmcKQEAgLTEyMywxNjggKzEyMywxNjggQEAKIAlsbGdmcgklcjUsJXI1CQkJIyBsb25nCiAJamcJc3lzX3B0cmFjZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfYWxhcm1fd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfYWxhcm1fd3JhcHBlcgogc3lzMzJfYWxhcm1fd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKIAlqZwlzeXNfYWxhcm0JCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl9wYXVzZV93cmFwcGVyCQkJIyB2b2lkIAorI3N5czMyX3BhdXNlX3dyYXBwZXIJCQkjIHZvaWQKIAotCS5nbG9ibCAgY29tcGF0X3N5c191dGltZV93cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX3V0aW1lX3dyYXBwZXIKIGNvbXBhdF9zeXNfdXRpbWVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjaGFyICoKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgY29tcGF0X3V0aW1idWYgKgogCWpnCWNvbXBhdF9zeXNfdXRpbWUJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfYWNjZXNzX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2FjY2Vzc193cmFwcGVyCiBzeXMzMl9hY2Nlc3Nfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIGludAogCWpnCXN5c19hY2Nlc3MJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX25pY2Vfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbmljZV93cmFwcGVyCiBzeXMzMl9uaWNlX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlqZwlzeXNfbmljZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotI3N5czMyX3N5bmNfd3JhcHBlcgkJCSMgdm9pZCAKKyNzeXMzMl9zeW5jX3dyYXBwZXIJCQkjIHZvaWQKIAotCS5nbG9ibCAgc3lzMzJfa2lsbF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9raWxsX3dyYXBwZXIKIHN5czMyX2tpbGxfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxnZnIJJXIzLCVyMwkJCSMgaW50CiAJamcJc3lzX2tpbGwJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3JlbmFtZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9yZW5hbWVfd3JhcHBlcgogc3lzMzJfcmVuYW1lX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3QgY2hhciAqCiAJamcJc3lzX3JlbmFtZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbWtkaXJfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbWtkaXJfd3JhcHBlcgogc3lzMzJfbWtkaXJfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIGludAogCWpnCXN5c19ta2RpcgkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfcm1kaXJfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfcm1kaXJfd3JhcHBlcgogc3lzMzJfcm1kaXJfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlqZwlzeXNfcm1kaXIJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2R1cF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9kdXBfd3JhcHBlcgogc3lzMzJfZHVwX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJamcJc3lzX2R1cAkJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3BpcGVfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfcGlwZV93cmFwcGVyCiBzeXMzMl9waXBlX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgdTMyICoKIAlqZwlzeXNfcGlwZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c190aW1lc193cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX3RpbWVzX3dyYXBwZXIKIGNvbXBhdF9zeXNfdGltZXNfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgY29tcGF0X3RtcyAqCiAJamcJY29tcGF0X3N5c190aW1lcwkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9icmtfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfYnJrX3dyYXBwZXIKIHN5czMyX2Jya193cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXNfYnJrCQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2V0Z2lkMTZfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0Z2lkMTZfd3JhcHBlcgogc3lzMzJfc2V0Z2lkMTZfd3JhcHBlcjoKLQlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QgCisJbGxnZnIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90CiAJamcJc3lzMzJfc2V0Z2lkMTYJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl9nZXRnaWQxNl93cmFwcGVyCQkJIyB2b2lkIAorI3N5czMyX2dldGdpZDE2X3dyYXBwZXIJCQkjIHZvaWQKIAogCS5nbG9ibCBzeXMzMl9zaWduYWxfd3JhcHBlcgogc3lzMzJfc2lnbmFsX3dyYXBwZXI6Ci0JbGdmcgklcjIsJXIyCQkJIyBpbnQgCisJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBfX3NpZ2hhbmRsZXJfdAogCWpnCXN5c19zaWduYWwKIAotI3N5czMyX2dldGV1aWQxNl93cmFwcGVyCQkjIHZvaWQgCisjc3lzMzJfZ2V0ZXVpZDE2X3dyYXBwZXIJCSMgdm9pZAogCi0jc3lzMzJfZ2V0ZWdpZDE2X3dyYXBwZXIJCSMgdm9pZCAKKyNzeXMzMl9nZXRlZ2lkMTZfd3JhcHBlcgkJIyB2b2lkCiAKLQkuZ2xvYmwgIHN5czMyX2FjY3Rfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfYWNjdF93cmFwcGVyCiBzeXMzMl9hY2N0X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJamcJc3lzX2FjY3QJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3Vtb3VudF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl91bW91bnRfd3JhcHBlcgogc3lzMzJfdW1vdW50X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKIAlqZwlzeXNfdW1vdW50CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX2lvY3RsX3dyYXBwZXIKKwkuZ2xvYmwJY29tcGF0X3N5c19pb2N0bF93cmFwcGVyCiBjb21wYXRfc3lzX2lvY3RsX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgaW50CiAJamcJY29tcGF0X3N5c19pb2N0bAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX2ZjbnRsX3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfZmNudGxfd3JhcHBlcgogY29tcGF0X3N5c19mY250bF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAotCWxsZ2ZyCSVyMywlcjMJCQkjIHVuc2lnbmVkIGludCAKKwlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBpbnQKIAlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBsb25nCiAJamcJY29tcGF0X3N5c19mY250bAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRwZ2lkX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NldHBnaWRfd3JhcHBlcgogc3lzMzJfc2V0cGdpZF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgcGlkX3QKIAlsZ2ZyCSVyMywlcjMJCQkjIHBpZF90CiAJamcJc3lzX3NldHBnaWQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3VtYXNrX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3VtYXNrX3dyYXBwZXIKIHN5czMyX3VtYXNrX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlqZwlzeXNfdW1hc2sJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2Nocm9vdF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9jaHJvb3Rfd3JhcHBlcgogc3lzMzJfY2hyb290X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJamcJc3lzX2Nocm9vdAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAogCS5nbG9ibCBzeXMzMl91c3RhdF93cmFwcGVyCiBzeXMzMl91c3RhdF93cmFwcGVyOgotCWxsZ2ZyCSVyMiwlcjIJCQkjIGRldl90IAorCWxsZ2ZyCSVyMiwlcjIJCQkjIGRldl90CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHVzdGF0ICoKIAlqZwlzeXNfdXN0YXQKIAotCS5nbG9ibCAgc3lzMzJfZHVwMl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9kdXAyX3dyYXBwZXIKIHN5czMyX2R1cDJfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBpbnQKIAlqZwlzeXNfZHVwMgkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotI3N5czMyX2dldHBwaWRfd3JhcHBlcgkJCSMgdm9pZCAKKyNzeXMzMl9nZXRwcGlkX3dyYXBwZXIJCQkjIHZvaWQKIAotI3N5czMyX2dldHBncnBfd3JhcHBlcgkJCSMgdm9pZCAKKyNzeXMzMl9nZXRwZ3JwX3dyYXBwZXIJCQkjIHZvaWQKIAotI3N5czMyX3NldHNpZF93cmFwcGVyCQkJIyB2b2lkIAorI3N5czMyX3NldHNpZF93cmFwcGVyCQkJIyB2b2lkCiAKLQkuZ2xvYmwgIHN5czMyX3NpZ2FjdGlvbl93cmFwcGVyCisJLmdsb2JsCXN5czMyX3NpZ2FjdGlvbl93cmFwcGVyCiBzeXMzMl9zaWdhY3Rpb25fd3JhcHBlcjoKLQlsZ2ZyCSVyMiwlcjIJCQkjIGludCAKKwlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbnN0IHN0cnVjdCBvbGRfc2lnYWN0aW9uICoKIAlsbGd0cgklcjQsJXI0CQkJIyBzdHJ1Y3Qgb2xkX3NpZ2FjdGlvbjMyICoKIAlqZwlzeXMzMl9zaWdhY3Rpb24JCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NldHJldWlkMTZfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0cmV1aWQxNl93cmFwcGVyCiBzeXMzMl9zZXRyZXVpZDE2X3dyYXBwZXI6Ci0JbGxnZnIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX3VpZF9lbXUzMV90IAotCWxsZ2ZyCSVyMywlcjMJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdCAKKwlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QKKwlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QKIAlqZwlzeXMzMl9zZXRyZXVpZDE2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NldHJlZ2lkMTZfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0cmVnaWQxNl93cmFwcGVyCiBzeXMzMl9zZXRyZWdpZDE2X3dyYXBwZXI6Ci0JbGxnZnIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90IAotCWxsZ2ZyCSVyMywlcjMJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdCAKKwlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QKKwlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QKIAlqZwlzeXMzMl9zZXRyZWdpZDE2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKIAkuZ2xvYmwgc3lzX3NpZ3N1c3BlbmRfd3JhcHBlcgpAQCAtMjk0LDk1ICsyOTQsOTUgQEAKIAlsbGdmcgklcjQsJXI0CQkJIyBvbGRfc2lnc2V0X3QKIAlqZwlzeXNfc2lnc3VzcGVuZAogCi0JLmdsb2JsICBjb21wYXRfc3lzX3NpZ3BlbmRpbmdfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c19zaWdwZW5kaW5nX3dyYXBwZXIKIGNvbXBhdF9zeXNfc2lncGVuZGluZ193cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbXBhdF9vbGRfc2lnc2V0X3QgKgogCWpnCWNvbXBhdF9zeXNfc2lncGVuZGluZwkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRob3N0bmFtZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZXRob3N0bmFtZV93cmFwcGVyCiBzeXMzMl9zZXRob3N0bmFtZV93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNoYXIgKgogCWxnZnIJJXIzLCVyMwkJCSMgaW50CiAJamcJc3lzX3NldGhvc3RuYW1lCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX3NldHJsaW1pdF93cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX3NldHJsaW1pdF93cmFwcGVyCiBjb21wYXRfc3lzX3NldHJsaW1pdF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBybGltaXRfZW11MzEgKgogCWpnCWNvbXBhdF9zeXNfc2V0cmxpbWl0CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfb2xkX2dldHJsaW1pdF93cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX29sZF9nZXRybGltaXRfd3JhcHBlcgogY29tcGF0X3N5c19vbGRfZ2V0cmxpbWl0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHJsaW1pdF9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19vbGRfZ2V0cmxpbWl0ICMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfZ2V0cmxpbWl0X3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0cmxpbWl0X3dyYXBwZXIKIGNvbXBhdF9zeXNfZ2V0cmxpbWl0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHJsaW1pdF9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19nZXRybGltaXQJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbW1hcDJfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbW1hcDJfd3JhcHBlcgogc3lzMzJfbW1hcDJfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0X2VtdTMxICoKIAlqZwlzeXMzMl9tbWFwMgkJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfZ2V0cnVzYWdlX3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0cnVzYWdlX3dyYXBwZXIKIGNvbXBhdF9zeXNfZ2V0cnVzYWdlX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgcnVzYWdlX2VtdTMxICoKIAlqZwljb21wYXRfc3lzX2dldHJ1c2FnZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9nZXR0aW1lb2ZkYXlfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZ2V0dGltZW9mZGF5X3dyYXBwZXIKIHN5czMyX2dldHRpbWVvZmRheV93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHN0cnVjdCB0aW1ldmFsX2VtdTMxICoKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgdGltZXpvbmUgKgogCWpnCXN5czMyX2dldHRpbWVvZmRheQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXR0aW1lb2ZkYXlfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0dGltZW9mZGF5X3dyYXBwZXIKIHN5czMyX3NldHRpbWVvZmRheV93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHN0cnVjdCB0aW1ldmFsX2VtdTMxICoKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgdGltZXpvbmUgKgogCWpnCXN5czMyX3NldHRpbWVvZmRheQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyCiBzeXMzMl9nZXRncm91cHMxNl93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90ICoKIAlqZwlzeXMzMl9nZXRncm91cHMxNgkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRncm91cHMxNl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZXRncm91cHMxNl93cmFwcGVyCiBzeXMzMl9zZXRncm91cHMxNl93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90ICoKIAlqZwlzeXMzMl9zZXRncm91cHMxNgkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zeW1saW5rX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3N5bWxpbmtfd3JhcHBlcgogc3lzMzJfc3ltbGlua193cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbnN0IGNoYXIgKgogCWpnCXN5c19zeW1saW5rCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9yZWFkbGlua193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9yZWFkbGlua193cmFwcGVyCiBzeXMzMl9yZWFkbGlua193cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIGNoYXIgKgogCWxnZnIJJXI0LCVyNAkJCSMgaW50CiAJamcJc3lzX3JlYWRsaW5rCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl91c2VsaWJfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfdXNlbGliX3dyYXBwZXIKIHN5czMyX3VzZWxpYl93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWpnCXN5c191c2VsaWIJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3N3YXBvbl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zd2Fwb25fd3JhcHBlcgogc3lzMzJfc3dhcG9uX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKIAlqZwlzeXNfc3dhcG9uCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9yZWJvb3Rfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfcmVib290X3dyYXBwZXIKIHN5czMyX3JlYm9vdF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKQEAgLTM5MCwxMjEgKzM5MCwxMjEgQEAKIAlsbGd0cgklcjUsJXI1CQkJIyB2b2lkICoKIAlqZwlzeXNfcmVib290CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBvbGQzMl9yZWFkZGlyX3dyYXBwZXIgCisJLmdsb2JsCW9sZDMyX3JlYWRkaXJfd3JhcHBlcgogb2xkMzJfcmVhZGRpcl93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIHZvaWQgKgogCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGludAogCWpnCWNvbXBhdF9zeXNfb2xkX3JlYWRkaXIJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgb2xkMzJfbW1hcF93cmFwcGVyIAorCS5nbG9ibAlvbGQzMl9tbWFwX3dyYXBwZXIKIG9sZDMyX21tYXBfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgbW1hcF9hcmdfc3RydWN0X2VtdTMxICoKIAlqZwlvbGQzMl9tbWFwCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9tdW5tYXBfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbXVubWFwX3dyYXBwZXIKIHN5czMyX211bm1hcF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKLQlsbGdmcgklcjMsJXIzCQkJIyBzaXplX3QgCisJbGxnZnIJJXIzLCVyMwkJCSMgc2l6ZV90CiAJamcJc3lzX211bm1hcAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfdHJ1bmNhdGVfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcgogc3lzMzJfdHJ1bmNhdGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCiAJamcJc3lzX3RydW5jYXRlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9mdHJ1bmNhdGVfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZnRydW5jYXRlX3dyYXBwZXIKIHN5czMyX2Z0cnVuY2F0ZV93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ2ZyCSVyMywlcjMJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXNfZnRydW5jYXRlCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9mY2htb2Rfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZmNobW9kX3dyYXBwZXIKIHN5czMyX2ZjaG1vZF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ2ZyCSVyMywlcjMJCQkjIG1vZGVfdAogCWpnCXN5c19mY2htb2QJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2ZjaG93bjE2X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2ZjaG93bjE2X3dyYXBwZXIKIHN5czMyX2ZjaG93bjE2X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXIzLCVyMwkJCSMgY29tcGF0X3VpZF90CiAJbGxnZnIJJXI0LCVyNAkJCSMgY29tcGF0X3VpZF90CiAJamcJc3lzMzJfZmNob3duMTYJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldHByaW9yaXR5X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2dldHByaW9yaXR5X3dyYXBwZXIKIHN5czMyX2dldHByaW9yaXR5X3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsZ2ZyCSVyMywlcjMJCQkjIGludAogCWpnCXN5c19nZXRwcmlvcml0eQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2V0cHJpb3JpdHlfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0cHJpb3JpdHlfd3JhcHBlcgogc3lzMzJfc2V0cHJpb3JpdHlfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxnZnIJJXIzLCVyMwkJCSMgaW50CiAJbGdmcgklcjQsJXI0CQkJIyBpbnQKIAlqZwlzeXNfc2V0cHJpb3JpdHkJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfc3RhdGZzX3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfc3RhdGZzX3dyYXBwZXIKIGNvbXBhdF9zeXNfc3RhdGZzX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IGNvbXBhdF9zdGF0ZnMgKgogCWpnCWNvbXBhdF9zeXNfc3RhdGZzCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfZnN0YXRmc193cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX2ZzdGF0ZnNfd3JhcHBlcgogY29tcGF0X3N5c19mc3RhdGZzX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IGNvbXBhdF9zdGF0ZnMgKgogCWpnCWNvbXBhdF9zeXNfZnN0YXRmcwkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX3NvY2tldGNhbGxfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c19zb2NrZXRjYWxsX3dyYXBwZXIKIGNvbXBhdF9zeXNfc29ja2V0Y2FsbF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgdTMyICoKIAlqZwljb21wYXRfc3lzX3NvY2tldGNhbGwJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc3lzbG9nX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3N5c2xvZ193cmFwcGVyCiBzeXMzMl9zeXNsb2dfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIGNoYXIgKgogCWxnZnIJJXI0LCVyNAkJCSMgaW50CiAJamcJc3lzX3N5c2xvZwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19zZXRpdGltZXJfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c19zZXRpdGltZXJfd3JhcHBlcgogY29tcGF0X3N5c19zZXRpdGltZXJfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBpdGltZXJ2YWxfZW11MzEgKgogCWxsZ3RyCSVyNCwlcjQJCQkjIHN0cnVjdCBpdGltZXJ2YWxfZW11MzEgKgogCWpnCWNvbXBhdF9zeXNfc2V0aXRpbWVyCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfZ2V0aXRpbWVyX3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfZ2V0aXRpbWVyX3dyYXBwZXIKIGNvbXBhdF9zeXNfZ2V0aXRpbWVyX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3QgaXRpbWVydmFsX2VtdTMxICoKIAlqZwljb21wYXRfc3lzX2dldGl0aW1lcgkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX25ld3N0YXRfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c19uZXdzdGF0X3dyYXBwZXIKIGNvbXBhdF9zeXNfbmV3c3RhdF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBzdGF0X2VtdTMxICoKIAlqZwljb21wYXRfc3lzX25ld3N0YXQJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19uZXdsc3RhdF93cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX25ld2xzdGF0X3dyYXBwZXIKIGNvbXBhdF9zeXNfbmV3bHN0YXRfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjaGFyICoKIAlsbGd0cgklcjMsJXIzCQkJIyBzdHJ1Y3Qgc3RhdF9lbXUzMSAqCiAJamcJY29tcGF0X3N5c19uZXdsc3RhdAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX25ld2ZzdGF0X3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfbmV3ZnN0YXRfd3JhcHBlcgogY29tcGF0X3N5c19uZXdmc3RhdF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBzdGF0X2VtdTMxICoKIAlqZwljb21wYXRfc3lzX25ld2ZzdGF0CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl92aGFuZ3VwX3dyYXBwZXIJCQkjIHZvaWQgCisjc3lzMzJfdmhhbmd1cF93cmFwcGVyCQkJIyB2b2lkCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfd2FpdDRfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c193YWl0NF93cmFwcGVyCiBjb21wYXRfc3lzX3dhaXQ0X3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBwaWRfdAogCWxsZ3RyCSVyMywlcjMJCQkjIHVuc2lnbmVkIGludCAqCkBAIC01MTIsMTcgKzUxMiwxNyBAQAogCWxsZ3RyCSVyNSwlcjUJCQkjIHN0cnVjdCBydXNhZ2UgKgogCWpnCWNvbXBhdF9zeXNfd2FpdDQJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc3dhcG9mZl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zd2Fwb2ZmX3dyYXBwZXIKIHN5czMyX3N3YXBvZmZfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlqZwlzeXNfc3dhcG9mZgkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc3lzaW5mb193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zeXNpbmZvX3dyYXBwZXIKIHN5czMyX3N5c2luZm9fd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3Qgc3lzaW5mb19lbXUzMSAqCiAJamcJc3lzMzJfc3lzaW5mbwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfaXBjX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2lwY193cmFwcGVyCiBzeXMzMl9pcGNfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1aW50CiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKQEAgLTUzMSw1OSArNTMxLDU5IEBACiAJbGxnZnIJJXI2LCVyNgkJCSMgdTMyCiAJamcJc3lzMzJfaXBjCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9mc3luY193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9mc3luY193cmFwcGVyCiBzeXMzMl9mc3luY193cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWpnCXN5c19mc3luYwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotI3N5czMyX3NpZ3JldHVybl93cmFwcGVyCQkjIGRvbmUgaW4gc2lncmV0dXJuX2dsdWUgCisjc3lzMzJfc2lncmV0dXJuX3dyYXBwZXIJCSMgZG9uZSBpbiBzaWdyZXR1cm5fZ2x1ZQogCi0jc3lzMzJfY2xvbmVfd3JhcHBlcgkJCSMgZG9uZSBpbiBjbG9uZV9nbHVlIAorI3N5czMyX2Nsb25lX3dyYXBwZXIJCQkjIGRvbmUgaW4gY2xvbmVfZ2x1ZQogCi0JLmdsb2JsICBzeXMzMl9zZXRkb21haW5uYW1lX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NldGRvbWFpbm5hbWVfd3JhcHBlcgogc3lzMzJfc2V0ZG9tYWlubmFtZV93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNoYXIgKgogCWxnZnIJJXIzLCVyMwkJCSMgaW50CiAJamcJc3lzX3NldGRvbWFpbm5hbWUJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbmV3dW5hbWVfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbmV3dW5hbWVfd3JhcHBlcgogc3lzMzJfbmV3dW5hbWVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgbmV3X3V0c25hbWUgKgogCWpnCXMzOTB4X25ld3VuYW1lCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX2FkanRpbWV4X3dyYXBwZXIKKwkuZ2xvYmwJY29tcGF0X3N5c19hZGp0aW1leF93cmFwcGVyCiBjb21wYXRfc3lzX2FkanRpbWV4X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgc3RydWN0IGNvbXBhdF90aW1leCAqCiAJamcJY29tcGF0X3N5c19hZGp0aW1leAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9tcHJvdGVjdF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tcHJvdGVjdF93cmFwcGVyCiBzeXMzMl9tcHJvdGVjdF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcgKGFjdHVhbGx5IHBvaW50ZXIKIAlsbGdmcgklcjMsJXIzCQkJIyBzaXplX3QKIAlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBsb25nCiAJamcJc3lzX21wcm90ZWN0CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX3NpZ3Byb2NtYXNrX3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfc2lncHJvY21hc2tfd3JhcHBlcgogY29tcGF0X3N5c19zaWdwcm9jbWFza193cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY29tcGF0X29sZF9zaWdzZXRfdCAqCiAJbGxndHIJJXI0LCVyNAkJCSMgY29tcGF0X29sZF9zaWdzZXRfdCAqCiAJamcJY29tcGF0X3N5c19zaWdwcm9jbWFzawkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfaW5pdF9tb2R1bGVfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfaW5pdF9tb2R1bGVfd3JhcHBlcgogc3lzMzJfaW5pdF9tb2R1bGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyB2b2lkICoKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCiAJbGxndHIJJXI0LCVyNAkJCSMgY2hhciAqCiAJamcJc3lzMzJfaW5pdF9tb2R1bGUJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfZGVsZXRlX21vZHVsZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9kZWxldGVfbW9kdWxlX3dyYXBwZXIKIHN5czMyX2RlbGV0ZV9tb2R1bGVfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBpbnQKIAlqZwlzeXMzMl9kZWxldGVfbW9kdWxlCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3F1b3RhY3RsX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3F1b3RhY3RsX3dyYXBwZXIKIHN5czMyX3F1b3RhY3RsX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3QgY2hhciAqCkBAIC01OTEsNDUgKzU5MSw0NSBAQAogCWxsZ3RyCSVyNSwlcjUJCQkjIGNhZGRyX3QKIAlqZwlzeXNfcXVvdGFjdGwJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldHBnaWRfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZ2V0cGdpZF93cmFwcGVyCiBzeXMzMl9nZXRwZ2lkX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBwaWRfdAogCWpnCXN5c19nZXRwZ2lkCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9mY2hkaXJfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZmNoZGlyX3dyYXBwZXIKIHN5czMyX2ZjaGRpcl93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWpnCXN5c19mY2hkaXIJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2JkZmx1c2hfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfYmRmbHVzaF93cmFwcGVyCiBzeXMzMl9iZGZsdXNoX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsZ2ZyCSVyMywlcjMJCQkjIGxvbmcKIAlqZwlzeXNfYmRmbHVzaAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc3lzZnNfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc3lzZnNfd3JhcHBlcgogc3lzMzJfc3lzZnNfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ2ZyCSVyMywlcjMJCQkjIHVuc2lnbmVkIGxvbmcKIAlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBsb25nCiAJamcJc3lzX3N5c2ZzCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9wZXJzb25hbGl0eV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9wZXJzb25hbGl0eV93cmFwcGVyCiBzeXMzMl9wZXJzb25hbGl0eV93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzMzkweF9wZXJzb25hbGl0eQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRmc3VpZDE2X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NldGZzdWlkMTZfd3JhcHBlcgogc3lzMzJfc2V0ZnN1aWQxNl93cmFwcGVyOgotCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdCAKKwlsbGdmcgklcjIsJXIyCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QKIAlqZwlzeXMzMl9zZXRmc3VpZDE2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NldGZzZ2lkMTZfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2V0ZnNnaWQxNl93cmFwcGVyCiBzeXMzMl9zZXRmc2dpZDE2X3dyYXBwZXI6Ci0JbGxnZnIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90IAorCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdAogCWpnCXN5czMyX3NldGZzZ2lkMTYJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbGxzZWVrX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2xsc2Vla193cmFwcGVyCiBzeXMzMl9sbHNlZWtfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCkBAIC02MzgsMTQgKzYzOCwxNCBAQAogCWxsZ2ZyCSVyNiwlcjYJCQkjIHVuc2lnbmVkIGludAogCWpnCXN5c19sbHNlZWsJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldGRlbnRzX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2dldGRlbnRzX3dyYXBwZXIKIHN5czMyX2dldGRlbnRzX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgdm9pZCAqCiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgaW50CiAJamcJY29tcGF0X3N5c19nZXRkZW50cwkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX3NlbGVjdF93cmFwcGVyCisJLmdsb2JsCWNvbXBhdF9zeXNfc2VsZWN0X3dyYXBwZXIKIGNvbXBhdF9zeXNfc2VsZWN0X3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBjb21wYXRfZmRfc2V0ICoKQEAgLTY1NCwxMTMgKzY1NCwxMTMgQEAKIAlsbGd0cgklcjYsJXI2CQkJIyBzdHJ1Y3QgY29tcGF0X3RpbWV2YWwgKgogCWpnCWNvbXBhdF9zeXNfc2VsZWN0CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2Zsb2NrX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2Zsb2NrX3dyYXBwZXIKIHN5czMyX2Zsb2NrX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50CiAJamcJc3lzX2Zsb2NrCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9tc3luY193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tc3luY193cmFwcGVyCiBzeXMzMl9tc3luY193cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlsbGdmcgklcjMsJXIzCQkJIyBzaXplX3QKIAlsZ2ZyCSVyNCwlcjQJCQkjIGludAogCWpnCXN5c19tc3luYwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19yZWFkdl93cmFwcGVyCisJLmdsb2JsCWNvbXBhdF9zeXNfcmVhZHZfd3JhcHBlcgogY29tcGF0X3N5c19yZWFkdl93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyAqCiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgbG9uZwogCWpnCWNvbXBhdF9zeXNfcmVhZHYJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c193cml0ZXZfd3JhcHBlcgorCS5nbG9ibAljb21wYXRfc3lzX3dyaXRldl93cmFwcGVyCiBjb21wYXRfc3lzX3dyaXRldl93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3Qgc3RydWN0IGNvbXBhdF9pb3ZlYyAqCiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgbG9uZwogCWpnCWNvbXBhdF9zeXNfd3JpdGV2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldHNpZF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9nZXRzaWRfd3JhcHBlcgogc3lzMzJfZ2V0c2lkX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBwaWRfdAogCWpnCXN5c19nZXRzaWQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2ZkYXRhc3luY193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9mZGF0YXN5bmNfd3JhcHBlcgogc3lzMzJfZmRhdGFzeW5jX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJamcJc3lzX2ZkYXRhc3luYwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotI3N5czMyX3N5c2N0bF93cmFwcGVyCQkJIyB0YmQgCisjc3lzMzJfc3lzY3RsX3dyYXBwZXIJCQkjIHRiZAogCi0JLmdsb2JsICBzeXMzMl9tbG9ja193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tbG9ja193cmFwcGVyCiBzeXMzMl9tbG9ja193cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlsbGdmcgklcjMsJXIzCQkJIyBzaXplX3QKIAlqZwlzeXNfbWxvY2sJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX211bmxvY2tfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbXVubG9ja193cmFwcGVyCiBzeXMzMl9tdW5sb2NrX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgbG9uZwogCWxsZ2ZyCSVyMywlcjMJCQkjIHNpemVfdAogCWpnCXN5c19tdW5sb2NrCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9tbG9ja2FsbF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tbG9ja2FsbF93cmFwcGVyCiBzeXMzMl9tbG9ja2FsbF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJamcJc3lzX21sb2NrYWxsCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0jc3lzMzJfbXVubG9ja2FsbF93cmFwcGVyCQkjIHZvaWQgCisjc3lzMzJfbXVubG9ja2FsbF93cmFwcGVyCQkjIHZvaWQKIAotCS5nbG9ibCAgc3lzMzJfc2NoZWRfc2V0cGFyYW1fd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2NoZWRfc2V0cGFyYW1fd3JhcHBlcgogc3lzMzJfc2NoZWRfc2V0cGFyYW1fd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIHBpZF90CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHNjaGVkX3BhcmFtICoKIAlqZwlzeXNfc2NoZWRfc2V0cGFyYW0JIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2NoZWRfZ2V0cGFyYW1fd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfc2NoZWRfZ2V0cGFyYW1fd3JhcHBlcgogc3lzMzJfc2NoZWRfZ2V0cGFyYW1fd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIHBpZF90CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IHNjaGVkX3BhcmFtICoKIAlqZwlzeXNfc2NoZWRfZ2V0cGFyYW0JIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2NoZWRfc2V0c2NoZWR1bGVyX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NjaGVkX3NldHNjaGVkdWxlcl93cmFwcGVyCiBzeXMzMl9zY2hlZF9zZXRzY2hlZHVsZXJfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIHBpZF90CiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKIAlsbGd0cgklcjQsJXI0CQkJIyBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKgogCWpnCXN5c19zY2hlZF9zZXRzY2hlZHVsZXIJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2NoZWRfZ2V0c2NoZWR1bGVyX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NjaGVkX2dldHNjaGVkdWxlcl93cmFwcGVyCiBzeXMzMl9zY2hlZF9nZXRzY2hlZHVsZXJfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIHBpZF90CiAJamcJc3lzX3NjaGVkX2dldHNjaGVkdWxlcgkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0jc3lzMzJfc2NoZWRfeWllbGRfd3JhcHBlcgkJIyB2b2lkIAorI3N5czMyX3NjaGVkX3lpZWxkX3dyYXBwZXIJCSMgdm9pZAogCi0JLmdsb2JsICBzeXMzMl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9tYXhfd3JhcHBlcgogc3lzMzJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJamcJc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluX3dyYXBwZXIKIHN5czMyX3NjaGVkX2dldF9wcmlvcml0eV9taW5fd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWpnCXN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWxfd3JhcHBlcgogc3lzMzJfc2NoZWRfcnJfZ2V0X2ludGVydmFsX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBwaWRfdAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgogCWpnCXN5czMyX3NjaGVkX3JyX2dldF9pbnRlcnZhbAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBjb21wYXRfc3lzX25hbm9zbGVlcF93cmFwcGVyIAorCS5nbG9ibAljb21wYXRfc3lzX25hbm9zbGVlcF93cmFwcGVyCiBjb21wYXRfc3lzX25hbm9zbGVlcF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKgogCWpnCWNvbXBhdF9zeXNfbmFub3NsZWVwCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9tcmVtYXBfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfbXJlbWFwX3dyYXBwZXIKIHN5czMyX21yZW1hcF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBsb25nCkBAIC03NjksNDkgKzc2OSw0OSBAQAogCWxsZ2ZyCSVyNiwlcjYJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXNfbXJlbWFwCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRyZXN1aWQxNl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZXRyZXN1aWQxNl93cmFwcGVyCiBzeXMzMl9zZXRyZXN1aWQxNl93cmFwcGVyOgotCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdCAKLQlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QgCi0JbGxnZnIJJXI0LCVyNAkJCSMgX19rZXJuZWxfb2xkX3VpZF9lbXUzMV90IAorCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdAorCWxsZ2ZyCSVyMywlcjMJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdAorCWxsZ2ZyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdAogCWpnCXN5czMyX3NldHJlc3VpZDE2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldHJlc3VpZDE2X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2dldHJlc3VpZDE2X3dyYXBwZXIKIHN5czMyX2dldHJlc3VpZDE2X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX3VpZF9lbXUzMV90ICoKIAlsbGd0cgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QgKgogCWxsZ3RyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdCAqCiAJamcJc3lzMzJfZ2V0cmVzdWlkMTYJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfcG9sbF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9wb2xsX3dyYXBwZXIKIHN5czMyX3BvbGxfd3JhcHBlcjoKLQlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgcG9sbGZkICogCi0JbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50IAotCWxnZnIJJXI0LCVyNAkJCSMgbG9uZyAKKwlsbGd0cgklcjIsJXIyCQkJIyBzdHJ1Y3QgcG9sbGZkICoKKwlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBpbnQKKwlsZ2ZyCSVyNCwlcjQJCQkjIGxvbmcKIAlqZwlzeXNfcG9sbAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19uZnNzZXJ2Y3RsX3dyYXBwZXIKKwkuZ2xvYmwJY29tcGF0X3N5c19uZnNzZXJ2Y3RsX3dyYXBwZXIKIGNvbXBhdF9zeXNfbmZzc2VydmN0bF93cmFwcGVyOgotCWxnZnIJJXIyLCVyMgkJCSMgaW50IAorCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgc3RydWN0IGNvbXBhdF9uZnNjdGxfYXJnKgogCWxsZ3RyCSVyNCwlcjQJCQkjIHVuaW9uIGNvbXBhdF9uZnNjdGxfcmVzKgogCWpnCWNvbXBhdF9zeXNfbmZzc2VydmN0bAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zZXRyZXNnaWQxNl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZXRyZXNnaWQxNl93cmFwcGVyCiBzeXMzMl9zZXRyZXNnaWQxNl93cmFwcGVyOgotCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdCAKLQlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QgCi0JbGxnZnIJJXI0LCVyNAkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90IAorCWxsZ2ZyCSVyMiwlcjIJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdAorCWxsZ2ZyCSVyMywlcjMJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdAorCWxsZ2ZyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdAogCWpnCXN5czMyX3NldHJlc2dpZDE2CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldHJlc2dpZDE2X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2dldHJlc2dpZDE2X3dyYXBwZXIKIHN5czMyX2dldHJlc2dpZDE2X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90ICoKIAlsbGd0cgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfZ2lkX2VtdTMxX3QgKgogCWxsZ3RyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdCAqCiAJamcJc3lzMzJfZ2V0cmVzZ2lkMTYJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfcHJjdGxfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfcHJjdGxfd3JhcHBlcgogc3lzMzJfcHJjdGxfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ2ZyCSVyMywlcjMJCQkjIHVuc2lnbmVkIGxvbmcKQEAgLTgyMCw5ICs4MjAsOSBAQAogCWxsZ2ZyCSVyNiwlcjYJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXNfcHJjdGwJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl9ydF9zaWdyZXR1cm5fd3JhcHBlcgkJIyBkb25lIGluIHJ0X3NpZ3JldHVybl9nbHVlIAorI3N5czMyX3J0X3NpZ3JldHVybl93cmFwcGVyCQkjIGRvbmUgaW4gcnRfc2lncmV0dXJuX2dsdWUKIAotCS5nbG9ibCAgc3lzMzJfcnRfc2lnYWN0aW9uX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3J0X3NpZ2FjdGlvbl93cmFwcGVyCiBzeXMzMl9ydF9zaWdhY3Rpb25fd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbnN0IHN0cnVjdCBzaWdhY3Rpb25fZW11MzEgKgpAQCAtODMwLDcgKzgzMCw3IEBACiAJbGxnZnIJJXI1LCVyNQkJCSMgc2l6ZV90CiAJamcJc3lzMzJfcnRfc2lnYWN0aW9uCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3J0X3NpZ3Byb2NtYXNrX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3J0X3NpZ3Byb2NtYXNrX3dyYXBwZXIKIHN5czMyX3J0X3NpZ3Byb2NtYXNrX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBvbGRfc2lnc2V0X2VtdTMxICoKQEAgLTgzOCwxMyArODM4LDEzIEBACiAJbGxnZnIJJXI1LCVyNQkJCSMgc2l6ZV90CiAJamcJc3lzMzJfcnRfc2lncHJvY21hc2sJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfcnRfc2lncGVuZGluZ193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9ydF9zaWdwZW5kaW5nX3dyYXBwZXIKIHN5czMyX3J0X3NpZ3BlbmRpbmdfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBzaWdzZXRfZW11MzEgKgogCWxsZ2ZyCSVyMywlcjMJCQkjIHNpemVfdAogCWpnCXN5czMyX3J0X3NpZ3BlbmRpbmcJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXRfd3JhcHBlcgorCS5nbG9ibAljb21wYXRfc3lzX3J0X3NpZ3RpbWVkd2FpdF93cmFwcGVyCiBjb21wYXRfc3lzX3J0X3NpZ3RpbWVkd2FpdF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IHNpZ3NldF9lbXUzMV90ICoKIAlsbGd0cgklcjMsJXIzCQkJIyBzaWdpbmZvX2VtdTMxX3QgKgpAQCAtODUyLDcgKzg1Miw3IEBACiAJbGxnZnIJJXI1LCVyNQkJCSMgc2l6ZV90CiAJamcJY29tcGF0X3N5c19ydF9zaWd0aW1lZHdhaXQJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfcnRfc2lncXVldWVpbmZvX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3J0X3NpZ3F1ZXVlaW5mb193cmFwcGVyCiBzeXMzMl9ydF9zaWdxdWV1ZWluZm9fd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxnZnIJJXIzLCVyMwkJCSMgaW50CkBAIC04NjUsNyArODY1LDcgQEAKIAlsbGdmcgklcjMsJXIzCQkJIyBjb21wYXRfc2l6ZV90CiAJamcJY29tcGF0X3N5c19ydF9zaWdzdXNwZW5kCiAKLQkuZ2xvYmwgIHN5czMyX3ByZWFkNjRfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfcHJlYWQ2NF93cmFwcGVyCiBzeXMzMl9wcmVhZDY0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgY2hhciAqCkBAIC04NzQsNyArODc0LDcgQEAKIAlsbGdmcgklcjYsJXI2CQkJIyB1MzIKIAlqZwlzeXMzMl9wcmVhZDY0CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9wd3JpdGU2NF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9wd3JpdGU2NF93cmFwcGVyCiBzeXMzMl9wd3JpdGU2NF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbnN0IGNoYXIgKgpAQCAtODgzLDI2ICs4ODMsMjYgQEAKIAlsbGdmcgklcjYsJXI2CQkJIyB1MzIKIAlqZwlzeXMzMl9wd3JpdGU2NAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfY2hvd24xNl93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9jaG93bjE2X3dyYXBwZXIKIHN5czMyX2Nob3duMTZfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBjaGFyICoKLQlsbGdmcgklcjMsJXIzCQkJIyBfX2tlcm5lbF9vbGRfdWlkX2VtdTMxX3QgCi0JbGxnZnIJJXI0LCVyNAkJCSMgX19rZXJuZWxfb2xkX2dpZF9lbXUzMV90IAorCWxsZ2ZyCSVyMywlcjMJCQkjIF9fa2VybmVsX29sZF91aWRfZW11MzFfdAorCWxsZ2ZyCSVyNCwlcjQJCQkjIF9fa2VybmVsX29sZF9naWRfZW11MzFfdAogCWpnCXN5czMyX2Nob3duMTYJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2dldGN3ZF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9nZXRjd2Rfd3JhcHBlcgogc3lzMzJfZ2V0Y3dkX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2hhciAqCiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZwogCWpnCXN5c19nZXRjd2QJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2NhcGdldF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9jYXBnZXRfd3JhcHBlcgogc3lzMzJfY2FwZ2V0X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY2FwX3VzZXJfaGVhZGVyX3QKIAlsbGd0cgklcjMsJXIzCQkJIyBjYXBfdXNlcl9kYXRhX3QKIAlqZwlzeXNfY2FwZ2V0CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9jYXBzZXRfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfY2Fwc2V0X3dyYXBwZXIKIHN5czMyX2NhcHNldF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNhcF91c2VyX2hlYWRlcl90CiAJbGxndHIJJXIzLCVyMwkJCSMgY29uc3QgY2FwX3VzZXJfZGF0YV90CkBAIC05MTAsMTEgKzkxMCwxMSBAQAogCiAJLmdsb2JsIHN5czMyX3NpZ2FsdHN0YWNrX3dyYXBwZXIKIHN5czMyX3NpZ2FsdHN0YWNrX3dyYXBwZXI6Ci0JbGxndHIJJXIyLCVyMgkJCSMgY29uc3Qgc3RhY2tfZW11MzFfdCAqIAotCWxsZ3RyCSVyMywlcjMJCQkjIHN0YWNrX2VtdTMxX3QgKiAKKwlsbGd0cgklcjIsJXIyCQkJIyBjb25zdCBzdGFja19lbXUzMV90ICoKKwlsbGd0cgklcjMsJXIzCQkJIyBzdGFja19lbXUzMV90ICoKIAlqZwlzeXMzMl9zaWdhbHRzdGFjawogCi0JLmdsb2JsICBzeXMzMl9zZW5kZmlsZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZW5kZmlsZV93cmFwcGVyCiBzeXMzMl9zZW5kZmlsZV93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGdmcgklcjMsJXIzCQkJIyBpbnQKQEAgLTkyMiwzMyArOTIyLDMzIEBACiAJbGxnZnIJJXI1LCVyNQkJCSMgc2l6ZV90CiAJamcJc3lzMzJfc2VuZGZpbGUJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl92Zm9ya193cmFwcGVyCQkJIyBkb25lIGluIHZmb3JrX2dsdWUgCisjc3lzMzJfdmZvcmtfd3JhcHBlcgkJCSMgZG9uZSBpbiB2Zm9ya19nbHVlCiAKLQkuZ2xvYmwgIHN5czMyX3RydW5jYXRlNjRfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfdHJ1bmNhdGU2NF93cmFwcGVyCiBzeXMzMl90cnVuY2F0ZTY0X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZwogCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXMzMl90cnVuY2F0ZTY0CSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX2Z0cnVuY2F0ZTY0X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX2Z0cnVuY2F0ZTY0X3dyYXBwZXIKIHN5czMyX2Z0cnVuY2F0ZTY0X3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgbG9uZwogCWxsZ2ZyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGxvbmcKIAlqZwlzeXMzMl9mdHJ1bmNhdGU2NAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsIHN5czMyX2xjaG93bl93cmFwcGVyCQorCS5nbG9ibCBzeXMzMl9sY2hvd25fd3JhcHBlcgogc3lzMzJfbGNob3duX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgY29uc3QgY2hhciAqCiAJbGxnZnIJJXIzLCVyMwkJCSMgdWlkX3QKIAlsbGdmcgklcjQsJXI0CQkJIyBnaWRfdAogCWpnCXN5c19sY2hvd24JCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLSNzeXMzMl9nZXR1aWRfd3JhcHBlcgkJCSMgdm9pZAkJCSAKLSNzeXMzMl9nZXRnaWRfd3JhcHBlcgkJCSMgdm9pZCAKLSNzeXMzMl9nZXRldWlkX3dyYXBwZXIJCQkjIHZvaWQgCi0jc3lzMzJfZ2V0ZWdpZF93cmFwcGVyCQkJIyB2b2lkIAorI3N5czMyX2dldHVpZF93cmFwcGVyCQkJIyB2b2lkCisjc3lzMzJfZ2V0Z2lkX3dyYXBwZXIJCQkjIHZvaWQKKyNzeXMzMl9nZXRldWlkX3dyYXBwZXIJCQkjIHZvaWQKKyNzeXMzMl9nZXRlZ2lkX3dyYXBwZXIJCQkjIHZvaWQKIAogCS5nbG9ibCBzeXMzMl9zZXRyZXVpZF93cmFwcGVyCiBzeXMzMl9zZXRyZXVpZF93cmFwcGVyOgpAQCAtOTYyLDExMSArOTYyLDExMSBAQAogCWxsZ2ZyCSVyMywlcjMJCQkjIGdpZF90CiAJamcJc3lzX3NldHJlZ2lkCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9nZXRncm91cHNfd3JhcHBlciAKKwkuZ2xvYmwJc3lzMzJfZ2V0Z3JvdXBzX3dyYXBwZXIKIHN5czMyX2dldGdyb3Vwc193cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJbGxndHIJJXIzLCVyMwkJCSMgZ2lkX3QgKgogCWpnCXN5c19nZXRncm91cHMJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NldGdyb3Vwc193cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9zZXRncm91cHNfd3JhcHBlcgogc3lzMzJfc2V0Z3JvdXBzX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyBnaWRfdCAqCiAJamcJc3lzX3NldGdyb3VwcwkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCBzeXMzMl9mY2hvd25fd3JhcHBlcgkKKwkuZ2xvYmwgc3lzMzJfZmNob3duX3dyYXBwZXIKIHN5czMyX2ZjaG93bl93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGludAogCWxsZ2ZyCSVyMywlcjMJCQkjIHVpZF90CiAJbGxnZnIJJXI0LCVyNAkJCSMgZ2lkX3QKIAlqZwlzeXNfZmNob3duCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsIHN5czMyX3NldHJlc3VpZF93cmFwcGVyCQorCS5nbG9ibCBzeXMzMl9zZXRyZXN1aWRfd3JhcHBlcgogc3lzMzJfc2V0cmVzdWlkX3dyYXBwZXI6CiAJbGxnZnIJJXIyLCVyMgkJCSMgdWlkX3QKIAlsbGdmcgklcjMsJXIzCQkJIyB1aWRfdAogCWxsZ2ZyCSVyNCwlcjQJCQkjIHVpZF90CiAJamcJc3lzX3NldHJlc3VpZAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCBzeXMzMl9nZXRyZXN1aWRfd3JhcHBlcgkKKwkuZ2xvYmwgc3lzMzJfZ2V0cmVzdWlkX3dyYXBwZXIKIHN5czMyX2dldHJlc3VpZF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIHVpZF90ICoKIAlsbGd0cgklcjMsJXIzCQkJIyB1aWRfdCAqCiAJbGxndHIJJXI0LCVyNAkJCSMgdWlkX3QgKgogCWpnCXN5c19nZXRyZXN1aWQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgc3lzMzJfc2V0cmVzZ2lkX3dyYXBwZXIJCisJLmdsb2JsIHN5czMyX3NldHJlc2dpZF93cmFwcGVyCiBzeXMzMl9zZXRyZXNnaWRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyBnaWRfdAogCWxsZ2ZyCSVyMywlcjMJCQkjIGdpZF90CiAJbGxnZnIJJXI0LCVyNAkJCSMgZ2lkX3QKIAlqZwlzeXNfc2V0cmVzZ2lkCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsIHN5czMyX2dldHJlc2dpZF93cmFwcGVyCQorCS5nbG9ibCBzeXMzMl9nZXRyZXNnaWRfd3JhcHBlcgogc3lzMzJfZ2V0cmVzZ2lkX3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgZ2lkX3QgKgogCWxsZ3RyCSVyMywlcjMJCQkjIGdpZF90ICoKIAlsbGd0cgklcjQsJXI0CQkJIyBnaWRfdCAqCiAJamcJc3lzX2dldHJlc2dpZAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCBzeXMzMl9jaG93bl93cmFwcGVyCQorCS5nbG9ibCBzeXMzMl9jaG93bl93cmFwcGVyCiBzeXMzMl9jaG93bl93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWxsZ2ZyCSVyMywlcjMJCQkjIHVpZF90CiAJbGxnZnIJJXI0LCVyNAkJCSMgZ2lkX3QKIAlqZwlzeXNfY2hvd24JCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgc3lzMzJfc2V0dWlkX3dyYXBwZXIJCisJLmdsb2JsIHN5czMyX3NldHVpZF93cmFwcGVyCiBzeXMzMl9zZXR1aWRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1aWRfdAogCWpnCXN5c19zZXR1aWQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgc3lzMzJfc2V0Z2lkX3dyYXBwZXIJCisJLmdsb2JsIHN5czMyX3NldGdpZF93cmFwcGVyCiBzeXMzMl9zZXRnaWRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyBnaWRfdAogCWpnCXN5c19zZXRnaWQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgc3lzMzJfc2V0ZnN1aWRfd3JhcHBlcgkKKwkuZ2xvYmwgc3lzMzJfc2V0ZnN1aWRfd3JhcHBlcgogc3lzMzJfc2V0ZnN1aWRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1aWRfdAogCWpnCXN5c19zZXRmc3VpZAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCBzeXMzMl9zZXRmc2dpZF93cmFwcGVyCQorCS5nbG9ibCBzeXMzMl9zZXRmc2dpZF93cmFwcGVyCiBzeXMzMl9zZXRmc2dpZF93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIGdpZF90CiAJamcJc3lzX3NldGZzZ2lkCQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9waXZvdF9yb290X3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX3Bpdm90X3Jvb3Rfd3JhcHBlcgogc3lzMzJfcGl2b3Rfcm9vdF93cmFwcGVyOgogCWxsZ3RyCSVyMiwlcjIJCQkjIGNvbnN0IGNoYXIgKgogCWxsZ3RyCSVyMywlcjMJCQkjIGNvbnN0IGNoYXIgKgogCWpnCXN5c19waXZvdF9yb290CQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9taW5jb3JlX3dyYXBwZXIgCisJLmdsb2JsCXN5czMyX21pbmNvcmVfd3JhcHBlcgogc3lzMzJfbWluY29yZV93cmFwcGVyOgogCWxsZ2ZyCSVyMiwlcjIJCQkjIHVuc2lnbmVkIGxvbmcKIAlsbGdmcgklcjMsJXIzCQkJIyBzaXplX3QKIAlsbGd0cgklcjQsJXI0CQkJIyB1bnNpZ25lZCBjaGFyICoKIAlqZwlzeXNfbWluY29yZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfbWFkdmlzZV93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9tYWR2aXNlX3dyYXBwZXIKIHN5czMyX21hZHZpc2Vfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBsb25nCiAJbGxnZnIJJXIzLCVyMwkJCSMgc2l6ZV90CiAJbGdmcgklcjQsJXI0CQkJIyBpbnQKIAlqZwlzeXNfbWFkdmlzZQkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzMzJfZ2V0ZGVudHM2NF93cmFwcGVyIAorCS5nbG9ibAlzeXMzMl9nZXRkZW50czY0X3dyYXBwZXIKIHN5czMyX2dldGRlbnRzNjRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKIAlsbGd0cgklcjMsJXIzCQkJIyB2b2lkICoKIAlsbGdmcgklcjQsJXI0CQkJIyB1bnNpZ25lZCBpbnQKIAlqZwlzeXNfZ2V0ZGVudHM2NAkJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgY29tcGF0X3N5c19mY250bDY0X3dyYXBwZXIgCisJLmdsb2JsCWNvbXBhdF9zeXNfZmNudGw2NF93cmFwcGVyCiBjb21wYXRfc3lzX2ZjbnRsNjRfd3JhcHBlcjoKIAlsbGdmcgklcjIsJXIyCQkJIyB1bnNpZ25lZCBpbnQKLQlsbGdmcgklcjMsJXIzCQkJIyB1bnNpZ25lZCBpbnQgCisJbGxnZnIJJXIzLCVyMwkJCSMgdW5zaWduZWQgaW50CiAJbGxnZnIJJXI0LCVyNAkJCSMgdW5zaWduZWQgbG9uZwogCWpnCWNvbXBhdF9zeXNfZmNudGw2NAkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCkBAIC0xMDg3LDEwICsxMDg3LDEwIEBACiAJbGxndHIJJXIyLCVyMgkJCSMgbG9uZyAqCiAJamcJY29tcGF0X3N5c19zdGltZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXMzMl9zeXNjdGxfd3JhcHBlcgorCS5nbG9ibAlzeXMzMl9zeXNjdGxfd3JhcHBlcgogc3lzMzJfc3lzY3RsX3dyYXBwZXI6Ci0JbGxndHIgICAlcjIsJXIyICAgICAgICAgICAgICAgICAjIHN0cnVjdCBfX3N5c2N0bF9hcmdzMzIgKgotCWpnICAgICAgc3lzMzJfc3lzY3RsCisJbGxndHIJJXIyLCVyMiAJCSMgc3RydWN0IF9fc3lzY3RsX2FyZ3MzMiAqCisJamcJc3lzMzJfc3lzY3RsCiAKIAkuZ2xvYmwJc3lzMzJfZnN0YXQ2NF93cmFwcGVyCiBzeXMzMl9mc3RhdDY0X3dyYXBwZXI6CkBAIC0xMDk4LDcgKzEwOTgsNyBAQAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBzdGF0NjQgKgogCWpnCXN5czMyX2ZzdGF0NjQJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIGNvbXBhdF9zeXNfZnV0ZXhfd3JhcHBlciAKKwkuZ2xvYmwJY29tcGF0X3N5c19mdXRleF93cmFwcGVyCiBjb21wYXRfc3lzX2Z1dGV4X3dyYXBwZXI6CiAJbGxndHIJJXIyLCVyMgkJCSMgdTMyICoKIAlsZ2ZyCSVyMywlcjMJCQkjIGludApAQCAtMTIxMywyMiArMTIxMywyMiBAQAogCWxsZ3RyCSVyNCwlcjQJCQkjIHVuc2lnbmVkIGxvbmcgKgogCWpnCWNvbXBhdF9zeXNfc2NoZWRfZ2V0YWZmaW5pdHkKIAotCS5nbG9ibCAgc3lzMzJfZXhpdF9ncm91cF93cmFwcGVyCisJLmdsb2JsCXN5czMyX2V4aXRfZ3JvdXBfd3JhcHBlcgogc3lzMzJfZXhpdF9ncm91cF93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJamcJc3lzX2V4aXRfZ3JvdXAJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5czMyX3NldF90aWRfYWRkcmVzc193cmFwcGVyCisJLmdsb2JsCXN5czMyX3NldF90aWRfYWRkcmVzc193cmFwcGVyCiBzeXMzMl9zZXRfdGlkX2FkZHJlc3Nfd3JhcHBlcjoKIAlsbGd0cgklcjIsJXIyCQkJIyBpbnQgKgogCWpnCXN5c19zZXRfdGlkX2FkZHJlc3MJIyBicmFuY2ggdG8gc3lzdGVtIGNhbGwKIAotCS5nbG9ibCAgc3lzX2Vwb2xsX2NyZWF0ZV93cmFwcGVyCisJLmdsb2JsCXN5c19lcG9sbF9jcmVhdGVfd3JhcHBlcgogc3lzX2Vwb2xsX2NyZWF0ZV93cmFwcGVyOgogCWxnZnIJJXIyLCVyMgkJCSMgaW50CiAJamcJc3lzX2Vwb2xsX2NyZWF0ZQkjIGJyYW5jaCB0byBzeXN0ZW0gY2FsbAogCi0JLmdsb2JsICBzeXNfZXBvbGxfY3RsX3dyYXBwZXIKKwkuZ2xvYmwJc3lzX2Vwb2xsX2N0bF93cmFwcGVyCiBzeXNfZXBvbGxfY3RsX3dyYXBwZXI6CiAJbGdmcgklcjIsJXIyCQkJIyBpbnQKIAlsZ2ZyCSVyMywlcjMJCQkjIGludApAQCAtMTIzNiw3ICsxMjM2LDcgQEAKIAlsbGd0cgklcjUsJXI1CQkJIyBzdHJ1Y3QgZXBvbGxfZXZlbnQgKgogCWpnCXN5c19lcG9sbF9jdGwJCSMgYnJhbmNoIHRvIHN5c3RlbSBjYWxsCiAKLQkuZ2xvYmwgIHN5c19lcG9sbF93YWl0X3dyYXBwZXIKKwkuZ2xvYmwJc3lzX2Vwb2xsX3dhaXRfd3JhcHBlcgogc3lzX2Vwb2xsX3dhaXRfd3JhcHBlcjoKIAlsZ2ZyCSVyMiwlcjIJCQkjIGludAogCWxsZ3RyCSVyMywlcjMJCQkjIHN0cnVjdCBlcG9sbF9ldmVudCAqCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2NwY21kLmMgYi9hcmNoL3MzOTAva2VybmVsL2NwY21kLmMKaW5kZXggNGVmNDRlNS4uMWVhZTc0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9jcGNtZC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvY3BjbWQuYwpAQCAtMjUsMTEgKzI1LDggQEAKICAqLwogaW50ICBfX2NwY21kKGNvbnN0IGNoYXIgKmNtZCwgY2hhciAqcmVzcG9uc2UsIGludCBybGVuLCBpbnQgKnJlc3BvbnNlX2NvZGUpCiB7Ci0JY29uc3QgaW50IG1hc2sgPSAweDQwMDAwMDAwTDsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXR1cm5fY29kZTsKLQlpbnQgcmV0dXJuX2xlbjsKLQlpbnQgY21kbGVuOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGNtZGxlbjsKKwlpbnQgcmV0dXJuX2NvZGUsIHJldHVybl9sZW47CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3BjbWRfbG9jaywgZmxhZ3MpOwogCWNtZGxlbiA9IHN0cmxlbihjbWQpOwpAQCAtMzgsNjQgKzM1LDQ0IEBACiAJQVNDRUJDKGNwY21kX2J1ZiwgY21kbGVuKTsKIAogCWlmIChyZXNwb25zZSAhPSBOVUxMICYmIHJsZW4gPiAwKSB7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20gKCIyIikgPSAoYWRkcl90KSBjcGNtZF9idWY7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMyBhc20gKCIzIikgPSAoYWRkcl90KSByZXNwb25zZTsKKwkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWc0IGFzbSAoIjQiKSA9IGNtZGxlbiB8IDB4NDAwMDAwMDBMOworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzUgYXNtICgiNSIpID0gcmxlbjsKKwogCQltZW1zZXQocmVzcG9uc2UsIDAsIHJsZW4pOworCQlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIENPTkZJR182NEJJVAotCQlhc20gdm9sYXRpbGUgKAkibHJhCTIsMCglMilcbiIKLQkJCQkibHIJNCwlM1xuIgotCQkJCSJvCTQsJTZcbiIKLQkJCQkibHJhCTMsMCglNClcbiIKLQkJCQkibHIJNSwlNVxuIgotCQkJCSJkaWFnCTIsNCwweDhcbiIKLQkJCQkiYnJjCTgsIDFmXG4iCi0JCQkJImFyCTUsICU1XG4iCi0JCQkJIjE6IFxuIgotCQkJCSJscgklMCw0XG4iCi0JCQkJImxyCSUxLDVcbiIKLQkJCQk6ICI9ZCIgKHJldHVybl9jb2RlKSwgIj1kIiAocmV0dXJuX2xlbikKLQkJCQk6ICJhIiAoY3BjbWRfYnVmKSwgImQiIChjbWRsZW4pLAotCQkJCSJhIiAocmVzcG9uc2UpLCAiZCIgKHJsZW4pLCAibSIgKG1hc2spCi0JCQkJOiAiY2MiLCAiMiIsICIzIiwgIjQiLCAiNSIgKTsKKwkJCSIJZGlhZwklMiwlMCwweDhcbiIKKwkJCSIJYnJjCTgsMWZcbiIKKwkJCSIJYXIJJTEsJTRcbiIKICNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotICAgICAgICAgICAgICAgIGFzbSB2b2xhdGlsZSAoCSJscmFnCTIsMCglMilcbiIKLQkJCQkibGdyCTQsJTNcbiIKLQkJCQkibwk0LCU2XG4iCi0JCQkJImxyYWcJMywwKCU0KVxuIgotCQkJCSJsZ3IJNSwlNVxuIgotCQkJCSJzYW0zMVxuIgotCQkJCSJkaWFnCTIsNCwweDhcbiIKLQkJCQkic2FtNjRcbiIKLQkJCQkiYnJjCTgsIDFmXG4iCi0JCQkJImFncgk1LCAlNVxuIgotCQkJCSIxOiBcbiIKLQkJCQkibGdyCSUwLDRcbiIKLQkJCQkibGdyCSUxLDVcbiIKLQkJCQk6ICI9ZCIgKHJldHVybl9jb2RlKSwgIj1kIiAocmV0dXJuX2xlbikKLQkJCQk6ICJhIiAoY3BjbWRfYnVmKSwgImQiIChjbWRsZW4pLAotCQkJCSJhIiAocmVzcG9uc2UpLCAiZCIgKHJsZW4pLCAibSIgKG1hc2spCi0JCQkJOiAiY2MiLCAiMiIsICIzIiwgIjQiLCAiNSIgKTsKKwkJCSIJc2FtMzFcbiIKKwkJCSIJZGlhZwklMiwlMCwweDhcbiIKKwkJCSIJc2FtNjRcbiIKKwkJCSIJYnJjCTgsMWZcbiIKKwkJCSIJYWdyCSUxLCU0XG4iCiAjZW5kaWYgLyogQ09ORklHXzY0QklUICovCisJCQkiMTpcbiIKKwkJCTogIitkIiAocmVnNCksICIrZCIgKHJlZzUpCisJCQk6ICJkIiAocmVnMiksICJkIiAocmVnMyksICJkIiAocmxlbikgOiAiY2MiKTsKKwkJcmV0dXJuX2NvZGUgPSAoaW50KSByZWc0OworCQlyZXR1cm5fbGVuID0gKGludCkgcmVnNTsKICAgICAgICAgICAgICAgICBFQkNBU0MocmVzcG9uc2UsIHJsZW4pOwogICAgICAgICB9IGVsc2UgeworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtICgiMiIpID0gKGFkZHJfdCkgY3BjbWRfYnVmOworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzMgYXNtICgiMyIpID0gY21kbGVuOwogCQlyZXR1cm5fbGVuID0gMDsKKwkJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBDT05GSUdfNjRCSVQKLSAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKAkibHJhCTIsMCglMSlcbiIKLQkJCQkibHIJMywlMlxuIgotCQkJCSJkaWFnCTIsMywweDhcbiIKLQkJCQkibHIJJTAsM1xuIgotCQkJCTogIj1kIiAocmV0dXJuX2NvZGUpCi0JCQkJOiAiYSIgKGNwY21kX2J1ZiksICJkIiAoY21kbGVuKQotCQkJCTogIjIiLCAiMyIgICk7CisJCQkiCWRpYWcJJTEsJTAsMHg4XG4iCiAjZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLSAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKAkibHJhZwkyLDAoJTEpXG4iCi0JCQkJImxncgkzLCUyXG4iCi0JCQkJInNhbTMxXG4iCi0JCQkJImRpYWcJMiwzLDB4OFxuIgotCQkJCSJzYW02NFxuIgotCQkJCSJsZ3IJJTAsM1xuIgotCQkJCTogIj1kIiAocmV0dXJuX2NvZGUpCi0JCQkJOiAiYSIgKGNwY21kX2J1ZiksICJkIiAoY21kbGVuKQotCQkJCTogIjIiLCAiMyIgKTsKKwkJCSIJc2FtMzFcbiIKKwkJCSIJZGlhZwklMSwlMCwweDhcbiIKKwkJCSIJc2FtNjRcbiIKICNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KKwkJCTogIitkIiAocmVnMykgOiAiZCIgKHJlZzIpIDogImNjIik7CisJCXJldHVybl9jb2RlID0gKGludCkgcmVnMzsKICAgICAgICAgfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNwY21kX2xvY2ssIGZsYWdzKTsKIAlpZiAocmVzcG9uc2VfY29kZSAhPSBOVUxMKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jIGIvYXJjaC9zMzkwL2tlcm5lbC9kZWJ1Zy5jCmluZGV4IDdiYTIwOTIuLjQzZjNkMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZGVidWcuYworKysgYi9hcmNoL3MzOTAva2VybmVsL2RlYnVnLmMKQEAgLTYwMyw3ICs2MDMsNyBAQAogCWRlYnVnX2luZm9fdCAqZGVidWdfaW5mbywgKmRlYnVnX2luZm9fc25hcHNob3Q7CiAKIAlkb3duKCZkZWJ1Z19sb2NrKTsKLQlkZWJ1Z19pbmZvID0gKHN0cnVjdCBkZWJ1Z19pbmZvKilmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCWRlYnVnX2luZm8gPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCS8qIGZpbmQgZGVidWcgdmlldyAqLwogCWZvciAoaSA9IDA7IGkgPCBERUJVR19NQVhfVklFV1M7IGkrKykgewogCQlpZiAoIWRlYnVnX2luZm8tPnZpZXdzW2ldKQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TIGIvYXJjaC9zMzkwL2tlcm5lbC9lbnRyeS5TCmluZGV4IDBjNzEyYjcuLmRkZGMzZGUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnkuUworKysgYi9hcmNoL3MzOTAva2VybmVsL2VudHJ5LlMKQEAgLTQsOCArNCw4IEBACiAgKgogICogICAgQ29weXJpZ2h0IChDKSBJQk0gQ29ycC4gMTk5OSwyMDA2CiAgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKLSAqICAgICAgICAgICAgICAgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKSwKKyAqCQkgSGFydG11dCBQZW5uZXIgKGhwQGRlLmlibS5jb20pLAorICoJCSBEZW5pcyBKb3NlcGggQmFycm93IChkamJhcnJvd0BkZS5pYm0uY29tLGJhcnJvd19kakB5YWhvby5jb20pLAogICoJCSBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KICAqLwogCkBAIC0yNCwyOSArMjQsMjkgQEAKICAqIFN0YWNrIGxheW91dCBmb3IgdGhlIHN5c3RlbV9jYWxsIHN0YWNrIGVudHJ5LgogICogVGhlIGZpcnN0IGZldyBlbnRyaWVzIGFyZSBpZGVudGljYWwgdG8gdGhlIHVzZXJfcmVnc19zdHJ1Y3QuCiAgKi8KLVNQX1BUUkVHUyAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRAotU1BfQVJHUyAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9BUkdTCi1TUF9QU1cgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX1BTVwotU1BfUjAgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTCi1TUF9SMSAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA0Ci1TUF9SMiAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA4Ci1TUF9SMyAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxMgotU1BfUjQgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMTYKLVNQX1I1ICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDIwCi1TUF9SNiAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAyNAotU1BfUjcgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMjgKLVNQX1I4ICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDMyCi1TUF9SOSAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAzNgotU1BfUjEwICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNDAKLVNQX1IxMSAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDQ0Ci1TUF9SMTIgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA0OAotU1BfUjEzICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNTIKLVNQX1IxNCAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDU2Ci1TUF9SMTUgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA2MAotU1BfT1JJR19SMiAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9PUklHX0dQUjIKLVNQX0lMQyAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfSUxDCi1TUF9UUkFQICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX1RSQVAKLVNQX1NJWkUgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfU0laRQorU1BfUFRSRUdTICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKK1NQX0FSR1MgICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9BUkdTCitTUF9QU1cJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9QU1cKK1NQX1IwCSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUworU1BfUjEJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNAorU1BfUjIJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgOAorU1BfUjMJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMTIKK1NQX1I0CSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDE2CitTUF9SNQkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAyMAorU1BfUjYJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMjQKK1NQX1I3CSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDI4CitTUF9SOAkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAzMgorU1BfUjkJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMzYKK1NQX1IxMAkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA0MAorU1BfUjExCSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDQ0CitTUF9SMTIJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNDgKK1NQX1IxMwkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA1MgorU1BfUjE0CSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDU2CitTUF9SMTUJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNjAKK1NQX09SSUdfUjIgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9PUklHX0dQUjIKK1NQX0lMQwkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0lMQworU1BfVFJBUCAgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX1RSQVAKK1NQX1NJWkUgICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9TSVpFCiAKIF9USUZfV09SS19TVkMgPSAoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0sgfCBfVElGX05FRURfUkVTQ0hFRCB8IFwKIAkJIF9USUZfTUNDS19QRU5ESU5HIHwgX1RJRl9SRVNUQVJUX1NWQyB8IF9USUZfU0lOR0xFX1NURVAgKQpAQCAtODEsMTQgKzgxLDE0IEBACiAgKiAgICBSMTUgLSBrZXJuZWwgc3RhY2sgcG9pbnRlcgogICovCiAKLQkubWFjcm8gIFNUT1JFX1RJTUVSIGxjX29mZnNldAorCS5tYWNybwlTVE9SRV9USU1FUiBsY19vZmZzZXQKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXN0cHQJXGxjX29mZnNldAogI2VuZGlmCiAJLmVuZG0KIAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JLm1hY3JvICBVUERBVEVfVlRJTUUgbGNfZnJvbSxsY190byxsY19zdW0KKwkubWFjcm8JVVBEQVRFX1ZUSU1FIGxjX2Zyb20sbGNfdG8sbGNfc3VtCiAJbG0JJXIxMCwlcjExLFxsY19mcm9tCiAJc2wJJXIxMCxcbGNfdG8KIAlzbAklcjExLFxsY190bys0CkBAIC0xNDcsNyArMTQ3LDcgQEAKIDI6CiAJLmVuZG0KIAotCS5tYWNybyAgQ1JFQVRFX1NUQUNLX0ZSQU1FIHBzd29yZyxzYXZlYXJlYQorCS5tYWNybwlDUkVBVEVfU1RBQ0tfRlJBTUUgcHN3b3JnLHNhdmVhcmVhCiAJcwklcjE1LEJBU0VEKC5MY19zcHNpemUpCSMgbWFrZSByb29tIGZvciByZWdpc3RlcnMgJiBwc3cKIAltdmMJU1BfUFNXKDgsJXIxNSksMCglcjEyKQkjIG1vdmUgdXNlciBQU1cgdG8gc3RhY2sKIAlsYQklcjEyLFxwc3dvcmcKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXN0CSVyMTIsX19TRl9CQUNLQ0hBSU4oJXIxNSkJIyBjbGVhciBiYWNrIGNoYWluCiAJLmVuZG0KIAotCS5tYWNybyAgUkVTVE9SRV9BTEwgcHN3b3JnLHN5bmMKKwkubWFjcm8JUkVTVE9SRV9BTEwgcHN3b3JnLHN5bmMKIAltdmMJXHBzd29yZyg4KSxTUF9QU1coJXIxNSkgIyBtb3ZlIHVzZXIgUFNXIHRvIGxvd2NvcmUKIAkuaWYgIVxzeW5jCiAJbmkJXHBzd29yZysxLDB4ZmQJCSMgY2xlYXIgd2FpdCBzdGF0ZSBiaXQKQEAgLTE3NywxNiArMTc3LDE2IEBACiAgKiBSZXR1cm5zOgogICogIGdwcjIgPSBwcmV2CiAgKi8KLSAgICAgICAgLmdsb2JsICBfX3N3aXRjaF90bworCS5nbG9ibAlfX3N3aXRjaF90bwogX19zd2l0Y2hfdG86Ci0gICAgICAgIGJhc3IgICAgJXIxLDAKKwliYXNyCSVyMSwwCiBfX3N3aXRjaF90b19iYXNlOgogCXRtCV9fVEhSRUFEX3BlciglcjMpLDB4ZTgJCSMgbmV3IHByb2Nlc3MgaXMgdXNpbmcgcGVyID8KIAlieglfX3N3aXRjaF90b19ub3Blci1fX3N3aXRjaF90b19iYXNlKCVyMSkJIyBpZiBub3Qgd2UncmUgZmluZQotICAgICAgICBzdGN0bCAgICVjOSwlYzExLF9fU0ZfRU1QVFkoJXIxNSkJIyBXZSBhcmUgdXNpbmcgcGVyIHN0dWZmCi0gICAgICAgIGNsYyAgICAgX19USFJFQURfcGVyKDEyLCVyMyksX19TRl9FTVBUWSglcjE1KQotICAgICAgICBiZSAgICAgIF9fc3dpdGNoX3RvX25vcGVyLV9fc3dpdGNoX3RvX2Jhc2UoJXIxKQkjIHdlIGdvdCBhd2F5IHcvbyBiYXNoaW5nIFRMQidzCi0gICAgICAgIGxjdGwgICAgJWM5LCVjMTEsX19USFJFQURfcGVyKCVyMykJIyBOb3BlIHdlIGRpZG4ndAorCXN0Y3RsCSVjOSwlYzExLF9fU0ZfRU1QVFkoJXIxNSkJIyBXZSBhcmUgdXNpbmcgcGVyIHN0dWZmCisJY2xjCV9fVEhSRUFEX3BlcigxMiwlcjMpLF9fU0ZfRU1QVFkoJXIxNSkKKwliZQlfX3N3aXRjaF90b19ub3Blci1fX3N3aXRjaF90b19iYXNlKCVyMSkJIyB3ZSBnb3QgYXdheSB3L28gYmFzaGluZyBUTEIncworCWxjdGwJJWM5LCVjMTEsX19USFJFQURfcGVyKCVyMykJIyBOb3BlIHdlIGRpZG4ndAogX19zd2l0Y2hfdG9fbm9wZXI6CiAJbAklcjQsX19USFJFQURfaW5mbyglcjIpCQkjIGdldCB0aHJlYWRfaW5mbyBvZiBwcmV2CiAJdG0JX19USV9mbGFncyszKCVyNCksX1RJRl9NQ0NLX1BFTkRJTkcgIyBtYWNoaW5lIGNoZWNrIHBlbmRpbmc/CkBAIC0xOTUsMTMgKzE5NSwxMyBAQAogCWwJJXI0LF9fVEhSRUFEX2luZm8oJXIzKQkJIyBnZXQgdGhyZWFkX2luZm8gb2YgbmV4dAogCW9pCV9fVElfZmxhZ3MrMyglcjQpLF9USUZfTUNDS19QRU5ESU5HICMgc2V0IGl0IGluIG5leHQKIF9fc3dpdGNoX3RvX25vX21jY2s6Ci0gICAgICAgIHN0bSAgICAgJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpIyBzdG9yZSBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgcHJldiB0YXNrCisJc3RtCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgc3RvcmUgX19zd2l0Y2hfdG8gcmVnaXN0ZXJzIG9mIHByZXYgdGFzawogCXN0CSVyMTUsX19USFJFQURfa3NwKCVyMikJIyBzdG9yZSBrZXJuZWwgc3RhY2sgdG8gcHJldi0+dHNzLmtzcAogCWwJJXIxNSxfX1RIUkVBRF9rc3AoJXIzKQkjIGxvYWQga2VybmVsIHN0YWNrIGZyb20gbmV4dC0+dHNzLmtzcAogCWxtCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgbG9hZCBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgbmV4dCB0YXNrCiAJc3QJJXIzLF9fTENfQ1VSUkVOVAkjIF9fTENfQ1VSUkVOVCA9IGN1cnJlbnQgdGFzayBzdHJ1Y3QKIAlsY3RsCSVjNCwlYzQsX19UQVNLX3BpZCglcjMpICMgbG9hZCBwaWQgdG8gY29udHJvbCByZWcuIDQKLQlsCSVyMyxfX1RIUkVBRF9pbmZvKCVyMykgICMgbG9hZCB0aHJlYWRfaW5mbyBmcm9tIHRhc2sgc3RydWN0CisJbAklcjMsX19USFJFQURfaW5mbyglcjMpCSMgbG9hZCB0aHJlYWRfaW5mbyBmcm9tIHRhc2sgc3RydWN0CiAJc3QJJXIzLF9fTENfVEhSRUFEX0lORk8KIAlhaGkJJXIzLFNUQUNLX1NJWkUKIAlzdAklcjMsX19MQ19LRVJORUxfU1RBQ0sJIyBfX0xDX0tFUk5FTF9TVEFDSyA9IG5ldyBrZXJuZWwgc3RhY2sKQEAgLTIxMyw3ICsyMTMsNyBAQAogICogYXJlIGV4ZWN1dGVkIHdpdGggaW50ZXJydXB0cyBlbmFibGVkLgogICovCiAKLQkuZ2xvYmwgIHN5c3RlbV9jYWxsCisJLmdsb2JsCXN5c3RlbV9jYWxsCiBzeXN0ZW1fY2FsbDoKIAlTVE9SRV9USU1FUiBfX0xDX1NZTkNfRU5URVJfVElNRVIKIHN5c2Nfc2F2ZWFsbDoKQEAgLTIzMywyNCArMjMzLDI0IEBACiAjZW5kaWYKIHN5c2NfZG9fc3ZjOgogCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0Ci0Jc2xhCSVyNywyICAgICAgICAgICAgICMgKjQgYW5kIHRlc3QgZm9yIHN2YyAwCi0JYm56CUJBU0VEKHN5c2NfbnJfb2spICMgc3ZjIG51bWJlciA+IDAKKwlzbGEJJXI3LDIJCQkjICo0IGFuZCB0ZXN0IGZvciBzdmMgMAorCWJueglCQVNFRChzeXNjX25yX29rKQkjIHN2YyBudW1iZXIgPiAwCiAJIyBzdmMgMDogc3lzdGVtIGNhbGwgbnVtYmVyIGluICVyMQogCWNsCSVyMSxCQVNFRCguTG5yX3N5c2NhbGxzKQogCWJubAlCQVNFRChzeXNjX25yX29rKQotCWxyCSVyNywlcjEgICAgICAgICAgICMgY29weSBzdmMgbnVtYmVyIHRvICVyNwotCXNsYQklcjcsMiAgICAgICAgICAgICAjICo0CisJbHIJJXI3LCVyMSAJICAjIGNvcHkgc3ZjIG51bWJlciB0byAlcjcKKwlzbGEJJXI3LDIJCSAgIyAqNAogc3lzY19ucl9vazoKIAltdmMJU1BfQVJHUyg0LCVyMTUpLFNQX1I3KCVyMTUpCiBzeXNjX2RvX3Jlc3RhcnQ6CiAJbAklcjgsQkFTRUQoLkxzeXNjX3RhYmxlKQogCXRtCV9fVElfZmxhZ3MrMyglcjkpLChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUKQogCWwJJXI4LDAoJXI3LCVyOCkJICAjIGdldCBzeXN0ZW0gY2FsbCBhZGRyLgotICAgICAgICBibnogICAgIEJBU0VEKHN5c2NfdHJhY2VzeXMpCi0gICAgICAgIGJhc3IgICAgJXIxNCwlcjggICAgICAgICAgIyBjYWxsIHN5c194eHh4Ci0gICAgICAgIHN0ICAgICAgJXIyLFNQX1IyKCVyMTUpICAgIyBzdG9yZSByZXR1cm4gdmFsdWUgKGNoYW5nZSBSMiBvbiBzdGFjaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFUVEVOVElPTjogY2hlY2sgc3lzX2V4ZWN2ZV9nbHVlIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdpbmcgYW55dGhpbmcgaGVyZSAhIQorCWJueglCQVNFRChzeXNjX3RyYWNlc3lzKQorCWJhc3IJJXIxNCwlcjgJICAjIGNhbGwgc3lzX3h4eHgKKwlzdAklcjIsU1BfUjIoJXIxNSkgICAjIHN0b3JlIHJldHVybiB2YWx1ZSAoY2hhbmdlIFIyIG9uIHN0YWNrKQorCQkJCSAgIyBBVFRFTlRJT046IGNoZWNrIHN5c19leGVjdmVfZ2x1ZSBiZWZvcmUKKwkJCQkgICMgY2hhbmdpbmcgYW55dGhpbmcgaGVyZSAhIQogCiBzeXNjX3JldHVybjoKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgcmV0dXJuaW5nIHRvIHVzZXIgPwpAQCAtMjU4LDE0ICsyNTgsMTQgQEAKIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1dPUktfU1ZDCiAJYm56CUJBU0VEKHN5c2Nfd29yaykgICMgdGhlcmUgaXMgd29yayB0byBkbyAoc2lnbmFscyBldGMuKQogc3lzY19sZWF2ZToKLSAgICAgICAgUkVTVE9SRV9BTEwgX19MQ19SRVRVUk5fUFNXLDEKKwlSRVNUT1JFX0FMTCBfX0xDX1JFVFVSTl9QU1csMQogCiAjCiAjIHJlY2hlY2sgaWYgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGRvCiAjCiBzeXNjX3dvcmtfbG9vcDoKIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1dPUktfU1ZDCi0JYnoJQkFTRUQoc3lzY19sZWF2ZSkgICAgICAjIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8KKwlieglCQVNFRChzeXNjX2xlYXZlKQkjIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8KICMKICMgT25lIG9mIHRoZSB3b3JrIGJpdHMgaXMgb24uIEZpbmQgb3V0IHdoaWNoIG9uZS4KICMKQEAgLTI4NCwxMSArMjg0LDExIEBACiAKICMKICMgX1RJRl9ORUVEX1JFU0NIRUQgaXMgc2V0LCBjYWxsIHNjaGVkdWxlCi0jCQotc3lzY19yZXNjaGVkdWxlOiAgICAgICAgCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5Mc2NoZWR1bGUpCi0JbGEgICAgICAlcjE0LEJBU0VEKHN5c2Nfd29ya19sb29wKQotCWJyICAgICAgJXIxCQkgICAgICAgIyBjYWxsIHNjaGVkdWxlcgorIworc3lzY19yZXNjaGVkdWxlOgorCWwJJXIxLEJBU0VEKC5Mc2NoZWR1bGUpCisJbGEJJXIxNCxCQVNFRChzeXNjX3dvcmtfbG9vcCkKKwlicgklcjEJCQkjIGNhbGwgc2NoZWR1bGVyCiAKICMKICMgX1RJRl9NQ0NLX1BFTkRJTkcgaXMgc2V0LCBjYWxsIGhhbmRsZXIKQEAgLTMwMSwxMSArMzAxLDExIEBACiAjCiAjIF9USUZfU0lHUEVORElORyBvciBfVElGX1JFU1RPUkVfU0lHTUFTSyBpcyBzZXQsIGNhbGwgZG9fc2lnbmFsCiAjCi1zeXNjX3NpZ3BlbmRpbmc6ICAgICAKK3N5c2Nfc2lncGVuZGluZzoKIAluaQlfX1RJX2ZsYWdzKzMoJXI5KSwyNTUtX1RJRl9TSU5HTEVfU1RFUCAjIGNsZWFyIFRJRl9TSU5HTEVfU1RFUAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAgIyBsb2FkIHB0X3JlZ3MKLSAgICAgICAgbCAgICAgICAlcjEsQkFTRUQoLkxkb19zaWduYWwpCi0JYmFzcgklcjE0LCVyMSAgICAgICAgICAgICAgICMgY2FsbCBkb19zaWduYWwKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCisJbAklcjEsQkFTRUQoLkxkb19zaWduYWwpCisJYmFzcgklcjE0LCVyMQkJIyBjYWxsIGRvX3NpZ25hbAogCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfUkVTVEFSVF9TVkMKIAlibwlCQVNFRChzeXNjX3Jlc3RhcnQpCiAJdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9TSU5HTEVfU1RFUApAQCAtMzE3LDExICszMTcsMTEgQEAKICMKIHN5c2NfcmVzdGFydDoKIAluaQlfX1RJX2ZsYWdzKzMoJXI5KSwyNTUtX1RJRl9SRVNUQVJUX1NWQyAjIGNsZWFyIFRJRl9SRVNUQVJUX1NWQwotCWwJJXI3LFNQX1IyKCVyMTUpICAgICAgICAjIGxvYWQgbmV3IHN2YyBudW1iZXIKKwlsCSVyNyxTUF9SMiglcjE1KSAJIyBsb2FkIG5ldyBzdmMgbnVtYmVyCiAJc2xhCSVyNywyCiAJbXZjCVNQX1IyKDQsJXIxNSksU1BfT1JJR19SMiglcjE1KSAjIHJlc3RvcmUgZmlyc3QgYXJndW1lbnQKLQlsbQklcjIsJXI2LFNQX1IyKCVyMTUpICAgICMgbG9hZCBzdmMgYXJndW1lbnRzCi0JYglCQVNFRChzeXNjX2RvX3Jlc3RhcnQpICMgcmVzdGFydCBzdmMKKwlsbQklcjIsJXI2LFNQX1IyKCVyMTUpCSMgbG9hZCBzdmMgYXJndW1lbnRzCisJYglCQVNFRChzeXNjX2RvX3Jlc3RhcnQpCSMgcmVzdGFydCBzdmMKIAogIwogIyBfVElGX1NJTkdMRV9TVEVQIGlzIHNldCwgY2FsbCBkb19zaW5nbGVfc3RlcApAQCAtMzM4LDggKzMzOCw4IEBACiAjIGNhbGwgdHJhY2UgYmVmb3JlIGFuZCBhZnRlciBzeXNfY2FsbAogIwogc3lzY190cmFjZXN5czoKLSAgICAgICAgbCAgICAgICAlcjEsQkFTRUQoLkx0cmFjZSkKLQlsYQklcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCisJbAklcjEsQkFTRUQoLkx0cmFjZSkKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCiAJbGEJJXIzLDAKIAlzcmwJJXI3LDIKIAlzdAklcjcsU1BfUjIoJXIxNSkKQEAgLTM0NywxOSArMzQ3LDE5IEBACiAJY2xjCVNQX1IyKDQsJXIxNSksQkFTRUQoLkxucl9zeXNjYWxscykKIAlibmwJQkFTRUQoc3lzY190cmFjZW5vZ28pCiAJbAklcjgsQkFTRUQoLkxzeXNjX3RhYmxlKQotCWwJJXI3LFNQX1IyKCVyMTUpICAgICAgICAjIHN0cmFjZSBtaWdodCBoYXZlIGNoYW5nZWQgdGhlIAotCXNsbAklcjcsMiAgICAgICAgICAgICAgICAgICMgIHN5c3RlbSBjYWxsCisJbAklcjcsU1BfUjIoJXIxNSkgCSMgc3RyYWNlIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUKKwlzbGwJJXI3LDIJCQkjICBzeXN0ZW0gY2FsbAogCWwJJXI4LDAoJXI3LCVyOCkKIHN5c2NfdHJhY2VnbzoKIAlsbQklcjMsJXI2LFNQX1IzKCVyMTUpCiAJbAklcjIsU1BfT1JJR19SMiglcjE1KQotCWJhc3IJJXIxNCwlcjggICAgICAgICAgIyBjYWxsIHN5c194eHgKLQlzdAklcjIsU1BfUjIoJXIxNSkgICAjIHN0b3JlIHJldHVybiB2YWx1ZQorCWJhc3IJJXIxNCwlcjgJCSMgY2FsbCBzeXNfeHh4CisJc3QJJXIyLFNQX1IyKCVyMTUpCQkjIHN0b3JlIHJldHVybiB2YWx1ZQogc3lzY190cmFjZW5vZ286CiAJdG0JX19USV9mbGFncyszKCVyOSksKF9USUZfU1lTQ0FMTF9UUkFDRXxfVElGX1NZU0NBTExfQVVESVQpCi0gICAgICAgIGJ6ICAgICAgQkFTRUQoc3lzY19yZXR1cm4pCisJYnoJQkFTRUQoc3lzY19yZXR1cm4pCiAJbAklcjEsQkFTRUQoLkx0cmFjZSkKLQlsYQklcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWxhCSVyMywxCiAJbGEJJXIxNCxCQVNFRChzeXNjX3JldHVybikKIAlicgklcjEKQEAgLTM2NywxNyArMzY3LDE3IEBACiAjCiAjIGEgbmV3IHByb2Nlc3MgZXhpdHMgdGhlIGtlcm5lbCB3aXRoIHJldF9mcm9tX2ZvcmsKICMKLSAgICAgICAgLmdsb2JsICByZXRfZnJvbV9mb3JrCisJLmdsb2JsCXJldF9mcm9tX2ZvcmsKIHJldF9mcm9tX2Zvcms6CiAJbAklcjEzLF9fTENfU1ZDX05FV19QU1crNAogCWwJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGZvcmtpbmcgYSBrZXJuZWwgdGhyZWFkID8KIAlibwlCQVNFRCgwZikKIAlzdAklcjE1LFNQX1IxNSglcjE1KQkjIHN0b3JlIHN0YWNrIHBvaW50ZXIgZm9yIG5ldyBrdGhyZWFkCi0wOglsICAgICAgICVyMSxCQVNFRCguTHNjaGVkdGFpbCkKLQliYXNyICAgICVyMTQsJXIxCiswOglsCSVyMSxCQVNFRCguTHNjaGVkdGFpbCkKKwliYXNyCSVyMTQsJXIxCiAJVFJBQ0VfSVJRU19PTgotICAgICAgICBzdG9zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHgwMyAgICAgIyByZWVuYWJsZSBpbnRlcnJ1cHRzCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cwogCWIJQkFTRUQoc3lzY19yZXR1cm4pCiAKICMKQEAgLTM4Niw1MiArMzg2LDUxIEBACiAjIGJ1dCBhcmUgY2FsbGVkIHdpdGggZGlmZmVyZW50IHBhcmFtZXRlci4KICMgcmV0dXJuLWFkZHJlc3MgaXMgc2V0IHVwIGFib3ZlCiAjCi1zeXNfY2xvbmVfZ2x1ZTogCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGxvYWQgcHRfcmVncwotICAgICAgICBsICAgICAgICVyMSxCQVNFRCguTGNsb25lKQotICAgICAgICBiciAgICAgICVyMSAgICAgICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfY2xvbmUKK3N5c19jbG9uZV9nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlsCSVyMSxCQVNFRCguTGNsb25lKQorCWJyCSVyMQkJCSMgYnJhbmNoIHRvIHN5c19jbG9uZQogCi1zeXNfZm9ya19nbHVlOiAgCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGxvYWQgcHRfcmVncwotICAgICAgICBsICAgICAgICVyMSxCQVNFRCguTGZvcmspCi0gICAgICAgIGJyICAgICAgJXIxICAgICAgICAgICAgICAgICAgICMgYnJhbmNoIHRvIHN5c19mb3JrCitzeXNfZm9ya19nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlsCSVyMSxCQVNFRCguTGZvcmspCisJYnIJJXIxCQkJIyBicmFuY2ggdG8gc3lzX2ZvcmsKIAotc3lzX3Zmb3JrX2dsdWU6IAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAgIyBsb2FkIHB0X3JlZ3MKLSAgICAgICAgbCAgICAgICAlcjEsQkFTRUQoLkx2Zm9yaykKLSAgICAgICAgYnIgICAgICAlcjEgICAgICAgICAgICAgICAgICAgIyBicmFuY2ggdG8gc3lzX3Zmb3JrCitzeXNfdmZvcmtfZ2x1ZToKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCisJbAklcjEsQkFTRUQoLkx2Zm9yaykKKwlicgklcjEJCQkjIGJyYW5jaCB0byBzeXNfdmZvcmsKIAotc3lzX2V4ZWN2ZV9nbHVlOiAgICAgICAgCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAgICMgbG9hZCBwdF9yZWdzCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5MZXhlY3ZlKQotCWxyICAgICAgJXIxMiwlcjE0ICAgICAgICAgICAgICMgc2F2ZSByZXR1cm4gYWRkcmVzcwotICAgICAgICBiYXNyICAgICVyMTQsJXIxICAgICAgICAgICAgICAjIGNhbGwgc3lzX2V4ZWN2ZQotICAgICAgICBsdHIgICAgICVyMiwlcjIgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGV4ZWN2ZSBmYWlsZWQKLSAgICAgICAgYm56ICAgICAwKCVyMTIpICAgICAgICAgICAgICAgIyBpdCBkaWQgZmFpbCAtPiBzdG9yZSByZXN1bHQgaW4gZ3ByMgotICAgICAgICBiICAgICAgIDQoJXIxMikgICAgICAgICAgICAgICAjIFNLSVAgU1QgMixTUF9SMigxNSkgYWZ0ZXIgQkFTUiAxNCw4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgaW4gc3lzdGVtX2NhbGwvc3lzY190cmFjZXN5cworc3lzX2V4ZWN2ZV9nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlsCSVyMSxCQVNFRCguTGV4ZWN2ZSkKKwlscgklcjEyLCVyMTQJCSMgc2F2ZSByZXR1cm4gYWRkcmVzcworCWJhc3IJJXIxNCwlcjEJCSMgY2FsbCBzeXNfZXhlY3ZlCisJbHRyCSVyMiwlcjIJCQkjIGNoZWNrIGlmIGV4ZWN2ZSBmYWlsZWQKKwlibnoJMCglcjEyKQkJCSMgaXQgZGlkIGZhaWwgLT4gc3RvcmUgcmVzdWx0IGluIGdwcjIKKwliCTQoJXIxMikJCQkjIFNLSVAgU1QgMixTUF9SMigxNSkgYWZ0ZXIgQkFTUiAxNCw4CisJCQkJCSMgaW4gc3lzdGVtX2NhbGwvc3lzY190cmFjZXN5cwogCi1zeXNfc2lncmV0dXJuX2dsdWU6ICAgICAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5Mc2lncmV0dXJuKQotICAgICAgICBiciAgICAgICVyMSAgICAgICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfc2lncmV0dXJuCitzeXNfc2lncmV0dXJuX2dsdWU6CisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKKwlsCSVyMSxCQVNFRCguTHNpZ3JldHVybikKKwlicgklcjEJCQkjIGJyYW5jaCB0byBzeXNfc2lncmV0dXJuCiAKLXN5c19ydF9zaWdyZXR1cm5fZ2x1ZTogICAgIAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKLSAgICAgICAgbCAgICAgICAlcjEsQkFTRUQoLkxydF9zaWdyZXR1cm4pCi0gICAgICAgIGJyICAgICAgJXIxICAgICAgICAgICAgICAgICAgICMgYnJhbmNoIHRvIHN5c19zaWdyZXR1cm4KK3N5c19ydF9zaWdyZXR1cm5fZ2x1ZToKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzIGFzIHBhcmFtZXRlcgorCWwJJXIxLEJBU0VEKC5McnRfc2lncmV0dXJuKQorCWJyCSVyMQkJCSMgYnJhbmNoIHRvIHN5c19zaWdyZXR1cm4KIAogc3lzX3NpZ2FsdHN0YWNrX2dsdWU6Ci0gICAgICAgIGxhICAgICAgJXI0LFNQX1BUUkVHUyglcjE1KSAgICMgbG9hZCBwdF9yZWdzIGFzIHBhcmFtZXRlcgotICAgICAgICBsICAgICAgICVyMSxCQVNFRCguTHNpZ2FsdHN0YWNrKQotICAgICAgICBiciAgICAgICVyMSAgICAgICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfc2lncmV0dXJuCi0KKwlsYQklcjQsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzIGFzIHBhcmFtZXRlcgorCWwJJXIxLEJBU0VEKC5Mc2lnYWx0c3RhY2spCisJYnIJJXIxCQkJIyBicmFuY2ggdG8gc3lzX3NpZ3JldHVybgogCiAvKgogICogUHJvZ3JhbSBjaGVjayBoYW5kbGVyIHJvdXRpbmUKICAqLwogCi0gICAgICAgIC5nbG9ibCAgcGdtX2NoZWNrX2hhbmRsZXIKKwkuZ2xvYmwJcGdtX2NoZWNrX2hhbmRsZXIKIHBnbV9jaGVja19oYW5kbGVyOgogLyoKICAqIEZpcnN0IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGEgc3BlY2lhbCBjYXNlOgpAQCAtNDQ4LDggKzQ0Nyw4IEBACiAgKi8KIAlTVE9SRV9USU1FUiBfX0xDX1NZTkNfRU5URVJfVElNRVIKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBCi0gICAgICAgIHRtICAgICAgX19MQ19QR01fSU5UX0NPREUrMSwweDgwICMgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBwZXIgZXhjZXB0aW9uCi0gICAgICAgIGJueiAgICAgQkFTRUQocGdtX3BlcikgICAgICAgICAgICMgZ290IHBlciBleGNlcHRpb24gLT4gc3BlY2lhbCBjYXNlCisJdG0JX19MQ19QR01fSU5UX0NPREUrMSwweDgwICMgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBwZXIgZXhjZXB0aW9uCisJYm56CUJBU0VEKHBnbV9wZXIpCQkjIGdvdCBwZXIgZXhjZXB0aW9uIC0+IHNwZWNpYWwgY2FzZQogCVNBVkVfQUxMX1NZTkMgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1BHTV9PTERfUFNXLF9fTENfU0FWRV9BUkVBCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKQEAgLTQ2MSwyOSArNDYwLDI5IEBACiBwZ21fbm9fdnRpbWU6CiAjZW5kaWYKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAotICAgICAgICBsICAgICAgICVyMyxfX0xDX1BHTV9JTEMgICAgICAgICAjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQorCWwJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWxhCSVyOCwweDdmCiAJbnIJJXI4LCVyMwogcGdtX2RvX2NhbGw6Ci0gICAgICAgIGwgICAgICAgJXI3LEJBU0VEKC5ManVtcF90YWJsZSkKLSAgICAgICAgc2xsICAgICAlcjgsMgotICAgICAgICBsICAgICAgICVyNywwKCVyOCwlcjcpCQkgIyBsb2FkIGFkZHJlc3Mgb2YgaGFuZGxlciByb3V0aW5lCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KQkgIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQotCWxhICAgICAgJXIxNCxCQVNFRChzeXNjX3JldHVybikKLQliciAgICAgICVyNwkJCSAjIGJyYW5jaCB0byBpbnRlcnJ1cHQtaGFuZGxlcgorCWwJJXI3LEJBU0VEKC5ManVtcF90YWJsZSkKKwlzbGwJJXI4LDIKKwlsCSVyNywwKCVyOCwlcjcpCQkjIGxvYWQgYWRkcmVzcyBvZiBoYW5kbGVyIHJvdXRpbmUKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKKwlsYQklcjE0LEJBU0VEKHN5c2NfcmV0dXJuKQorCWJyCSVyNwkJCSMgYnJhbmNoIHRvIGludGVycnVwdC1oYW5kbGVyCiAKICMKICMgaGFuZGxlIHBlciBleGNlcHRpb24KICMKIHBnbV9wZXI6Ci0gICAgICAgIHRtICAgICAgX19MQ19QR01fT0xEX1BTVywweDQwICAgICMgdGVzdCBpZiBwZXIgZXZlbnQgcmVjb3JkaW5nIGlzIG9uCi0gICAgICAgIGJueiAgICAgQkFTRUQocGdtX3Blcl9zdGQpICAgICAgICMgb2ssIG5vcm1hbCBwZXIgZXZlbnQgZnJvbSB1c2VyIHNwYWNlCisJdG0JX19MQ19QR01fT0xEX1BTVywweDQwCSMgdGVzdCBpZiBwZXIgZXZlbnQgcmVjb3JkaW5nIGlzIG9uCisJYm56CUJBU0VEKHBnbV9wZXJfc3RkKQkjIG9rLCBub3JtYWwgcGVyIGV2ZW50IGZyb20gdXNlciBzcGFjZQogIyBvayBpdHMgb25lIG9mIHRoZSBzcGVjaWFsIGNhc2VzLCBub3cgd2UgbmVlZCB0byBmaW5kIG91dCB3aGljaCBvbmUKLSAgICAgICAgY2xjICAgICBfX0xDX1BHTV9PTERfUFNXKDgpLF9fTENfU1ZDX05FV19QU1cKLSAgICAgICAgYmUgICAgICBCQVNFRChwZ21fc3ZjcGVyKQorCWNsYwlfX0xDX1BHTV9PTERfUFNXKDgpLF9fTENfU1ZDX05FV19QU1cKKwliZQlCQVNFRChwZ21fc3ZjcGVyKQogIyBubyBpbnRlcmVzdGluZyBzcGVjaWFsIGNhc2UsIGlnbm9yZSBQRVIgZXZlbnQKLSAgICAgICAgbG0gICAgICAlcjEyLCVyMTUsX19MQ19TQVZFX0FSRUEKLQlscHN3ICAgIDB4MjgKKwlsbQklcjEyLCVyMTUsX19MQ19TQVZFX0FSRUEKKwlscHN3CTB4MjgKIAogIwogIyBOb3JtYWwgcGVyIGV4Y2VwdGlvbgpAQCAtNTA3LDEwICs1MDYsMTAgQEAKIAlvaQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAogCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyBrZXJuZWwgcGVyIGV2ZW50ID8KIAlieglCQVNFRChrZXJuZWxfcGVyKQotCWwJJXIzLF9fTENfUEdNX0lMQwkgIyBsb2FkIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUKKwlsCSVyMyxfX0xDX1BHTV9JTEMJIyBsb2FkIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUKIAlsYQklcjgsMHg3ZgotCW5yCSVyOCwlcjMgICAgICAgICAgICAgICAgICAjIGNsZWFyIHBlci1ldmVudC1iaXQgYW5kIGlsYwotCWJlCUJBU0VEKHN5c2NfcmV0dXJuKSAgICAgICAjIG9ubHkgcGVyIG9yIHBlcitjaGVjayA/CisJbnIJJXI4LCVyMyAJCSMgY2xlYXIgcGVyLWV2ZW50LWJpdCBhbmQgaWxjCisJYmUJQkFTRUQoc3lzY19yZXR1cm4pCSMgb25seSBwZXIgb3IgcGVyK2NoZWNrID8KIAliCUJBU0VEKHBnbV9kb19jYWxsKQogCiAjCkBAIC01NTIsNyArNTUxLDcgQEAKICAqIElPIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUKICAqLwogCi0gICAgICAgIC5nbG9ibCBpb19pbnRfaGFuZGxlcgorCS5nbG9ibCBpb19pbnRfaGFuZGxlcgogaW9faW50X2hhbmRsZXI6CiAJU1RPUkVfVElNRVIgX19MQ19BU1lOQ19FTlRFUl9USU1FUgogCXN0Y2sJX19MQ19JTlRfQ0xPQ0sKQEAgLTU2OSw0MiArNTY4LDQyIEBACiAjZW5kaWYKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5MZG9fSVJRKSAgICAgICAgIyBsb2FkIGFkZHJlc3Mgb2YgZG9fSVJRCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCi0gICAgICAgIGJhc3IgICAgJXIxNCwlcjEgICAgICAgICAgIyBicmFuY2ggdG8gc3RhbmRhcmQgaXJxIGhhbmRsZXIKKwlsCSVyMSxCQVNFRCguTGRvX0lSUSkJIyBsb2FkIGFkZHJlc3Mgb2YgZG9fSVJRCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCisJYmFzcgklcjE0LCVyMQkJIyBicmFuY2ggdG8gc3RhbmRhcmQgaXJxIGhhbmRsZXIKIAlUUkFDRV9JUlFTX09OCiAKIGlvX3JldHVybjoKLSAgICAgICAgdG0gICAgICBTUF9QU1crMSglcjE1KSwweDAxICAgICMgcmV0dXJuaW5nIHRvIHVzZXIgPworCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyByZXR1cm5pbmcgdG8gdXNlciA/CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKLQlibm8gICAgIEJBU0VEKGlvX3ByZWVtcHQpICAgICAgIyBubyAtPiBjaGVjayBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsaW5nCisJYm5vCUJBU0VEKGlvX3ByZWVtcHQpCSMgbm8gLT4gY2hlY2sgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGluZwogI2Vsc2UKLSAgICAgICAgYm5vICAgICBCQVNFRChpb19sZWF2ZSkgICAgICAgICMgbm8tPiBza2lwIHJlc2NoZWQgJiBzaWduYWwKKwlibm8JQkFTRUQoaW9fbGVhdmUpIAkjIG5vLT4gc2tpcCByZXNjaGVkICYgc2lnbmFsCiAjZW5kaWYKIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1dPUktfSU5UCi0JYm56CUJBU0VEKGlvX3dvcmspICAgICAgICAgIyB0aGVyZSBpcyB3b3JrIHRvIGRvIChzaWduYWxzIGV0Yy4pCisJYm56CUJBU0VEKGlvX3dvcmspCQkjIHRoZXJlIGlzIHdvcmsgdG8gZG8gKHNpZ25hbHMgZXRjLikKIGlvX2xlYXZlOgotICAgICAgICBSRVNUT1JFX0FMTCBfX0xDX1JFVFVSTl9QU1csMAorCVJFU1RPUkVfQUxMIF9fTENfUkVUVVJOX1BTVywwCiBpb19kb25lOgogCiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKIGlvX3ByZWVtcHQ6CiAJaWNtCSVyMCwxNSxfX1RJX3ByZWNvdW50KCVyOSkKLQlibnogICAgIEJBU0VEKGlvX2xlYXZlKQorCWJueglCQVNFRChpb19sZWF2ZSkKIAlsCSVyMSxTUF9SMTUoJXIxNSkKIAlzCSVyMSxCQVNFRCguTGNfc3BzaXplKQogCW12YwlTUF9QVFJFR1MoX19QVF9TSVpFLCVyMSksU1BfUFRSRUdTKCVyMTUpCi0gICAgICAgIHhjICAgICAgX19TRl9CQUNLQ0hBSU4oNCwlcjEpLF9fU0ZfQkFDS0NIQUlOKCVyMSkgIyBjbGVhciBiYWNrIGNoYWluCisJeGMJX19TRl9CQUNLQ0hBSU4oNCwlcjEpLF9fU0ZfQkFDS0NIQUlOKCVyMSkgIyBjbGVhciBiYWNrIGNoYWluCiAJbHIJJXIxNSwlcjEKIGlvX3Jlc3VtZV9sb29wOgogCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTkVFRF9SRVNDSEVECiAJYm5vCUJBU0VEKGlvX2xlYXZlKQotCW12YyAgICAgX19USV9wcmVjb3VudCg0LCVyOSksQkFTRUQoLkxjX3BhY3RpdmUpCi0gICAgICAgIHN0b3NtICAgX19TRl9FTVBUWSglcjE1KSwweDAzICAjIHJlZW5hYmxlIGludGVycnVwdHMKLSAgICAgICAgbCAgICAgICAlcjEsQkFTRUQoLkxzY2hlZHVsZSkKKwltdmMJX19USV9wcmVjb3VudCg0LCVyOSksQkFTRUQoLkxjX3BhY3RpdmUpCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzICAjIHJlZW5hYmxlIGludGVycnVwdHMKKwlsCSVyMSxCQVNFRCguTHNjaGVkdWxlKQogCWJhc3IJJXIxNCwlcjEJICAgICAgICMgY2FsbCBzY2hlZHVsZQotICAgICAgICBzdG5zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHhmYyAgIyBkaXNhYmxlIEkvTyBhbmQgZXh0LiBpbnRlcnJ1cHRzCi0JeGMgICAgICBfX1RJX3ByZWNvdW50KDQsJXI5KSxfX1RJX3ByZWNvdW50KCVyOSkKKwlzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmMgICMgZGlzYWJsZSBJL08gYW5kIGV4dC4gaW50ZXJydXB0cworCXhjCV9fVElfcHJlY291bnQoNCwlcjkpLF9fVElfcHJlY291bnQoJXI5KQogCWIJQkFTRUQoaW9fcmVzdW1lX2xvb3ApCiAjZW5kaWYKIApAQCAtNjE1LDE2ICs2MTQsMTYgQEAKIAlsCSVyMSxfX0xDX0tFUk5FTF9TVEFDSwogCXMJJXIxLEJBU0VEKC5MY19zcHNpemUpCiAJbXZjCVNQX1BUUkVHUyhfX1BUX1NJWkUsJXIxKSxTUF9QVFJFR1MoJXIxNSkKLSAgICAgICAgeGMgICAgICBfX1NGX0JBQ0tDSEFJTig0LCVyMSksX19TRl9CQUNLQ0hBSU4oJXIxKSAjIGNsZWFyIGJhY2sgY2hhaW4KKwl4YwlfX1NGX0JBQ0tDSEFJTig0LCVyMSksX19TRl9CQUNLQ0hBSU4oJXIxKSAjIGNsZWFyIGJhY2sgY2hhaW4KIAlscgklcjE1LCVyMQogIwogIyBPbmUgb2YgdGhlIHdvcmsgYml0cyBpcyBvbi4gRmluZCBvdXQgd2hpY2ggb25lLgogIyBDaGVja2VkIGFyZTogX1RJRl9TSUdQRU5ESU5HLCBfVElGX1JFU1RPUkVfU0lHTUFTSywgX1RJRl9ORUVEX1JFU0NIRUQKLSMJICAgICAgICBhbmQgX1RJRl9NQ0NLX1BFTkRJTkcKKyMJCWFuZCBfVElGX01DQ0tfUEVORElORwogIwogaW9fd29ya19sb29wOgogCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTUNDS19QRU5ESU5HCi0JYm8gICAgICBCQVNFRChpb19tY2NrX3BlbmRpbmcpCisJYm8JQkFTRUQoaW9fbWNja19wZW5kaW5nKQogCXRtCV9fVElfZmxhZ3MrMyglcjkpLF9USUZfTkVFRF9SRVNDSEVECiAJYm8JQkFTRUQoaW9fcmVzY2hlZHVsZSkKIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSwoX1RJRl9TSUdQRU5ESU5HIHwgX1RJRl9SRVNUT1JFX1NJR01BU0spCkBAIC02MzcsMzYgKzYzNiwzNiBAQAogaW9fbWNja19wZW5kaW5nOgogCWwJJXIxLEJBU0VEKC5MczM5MF9oYW5kbGVfbWNjaykKIAlsYQklcjE0LEJBU0VEKGlvX3dvcmtfbG9vcCkKLQlicgklcjEJCSAgICAgICAjIFRJRiBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGhhbmRsZXIKKwlicgklcjEJCQkjIFRJRiBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGhhbmRsZXIKIAogIwogIyBfVElGX05FRURfUkVTQ0hFRCBpcyBzZXQsIGNhbGwgc2NoZWR1bGUKLSMJCi1pb19yZXNjaGVkdWxlOiAgICAgICAgCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5Mc2NoZWR1bGUpCi0gICAgICAgIHN0b3NtICAgX19TRl9FTVBUWSglcjE1KSwweDAzICAjIHJlZW5hYmxlIGludGVycnVwdHMKLQliYXNyICAgICVyMTQsJXIxCSAgICAgICAjIGNhbGwgc2NoZWR1bGVyCi0gICAgICAgIHN0bnNtICAgX19TRl9FTVBUWSglcjE1KSwweGZjICAjIGRpc2FibGUgSS9PIGFuZCBleHQuIGludGVycnVwdHMKKyMKK2lvX3Jlc2NoZWR1bGU6CisJbAklcjEsQkFTRUQoLkxzY2hlZHVsZSkKKwlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCisJYmFzcgklcjE0LCVyMQkJIyBjYWxsIHNjaGVkdWxlcgorCXN0bnNtCV9fU0ZfRU1QVFkoJXIxNSksMHhmYwkjIGRpc2FibGUgSS9PIGFuZCBleHQuIGludGVycnVwdHMKIAl0bQlfX1RJX2ZsYWdzKzMoJXI5KSxfVElGX1dPUktfSU5UCi0JYnoJQkFTRUQoaW9fbGVhdmUpICAgICAgICAjIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8KKwlieglCQVNFRChpb19sZWF2ZSkgCSMgdGhlcmUgaXMgbm8gd29yayB0byBkbwogCWIJQkFTRUQoaW9fd29ya19sb29wKQogCiAjCiAjIF9USUZfU0lHUEVORElORyBvciBfVElGX1JFU1RPUkVfU0lHTUFTSyBpcyBzZXQsIGNhbGwgZG9fc2lnbmFsCiAjCi1pb19zaWdwZW5kaW5nOiAgICAgCi0gICAgICAgIHN0b3NtICAgX19TRl9FTVBUWSglcjE1KSwweDAzICAjIHJlZW5hYmxlIGludGVycnVwdHMKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCi0gICAgICAgIGwgICAgICAgJXIxLEJBU0VEKC5MZG9fc2lnbmFsKQotCWJhc3IgICAgJXIxNCwlcjEJICAgICAgICMgY2FsbCBkb19zaWduYWwKLSAgICAgICAgc3Ruc20gICBfX1NGX0VNUFRZKCVyMTUpLDB4ZmMgICMgZGlzYWJsZSBJL08gYW5kIGV4dC4gaW50ZXJydXB0cworaW9fc2lncGVuZGluZzoKKwlzdG9zbQlfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncworCWwJJXIxLEJBU0VEKC5MZG9fc2lnbmFsKQorCWJhc3IJJXIxNCwlcjEJCSMgY2FsbCBkb19zaWduYWwKKwlzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmMJIyBkaXNhYmxlIEkvTyBhbmQgZXh0LiBpbnRlcnJ1cHRzCiAJYglCQVNFRChpb193b3JrX2xvb3ApCiAKIC8qCiAgKiBFeHRlcm5hbCBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lCiAgKi8KIAotICAgICAgICAuZ2xvYmwgIGV4dF9pbnRfaGFuZGxlcgorCS5nbG9ibAlleHRfaW50X2hhbmRsZXIKIGV4dF9pbnRfaGFuZGxlcjoKIAlTVE9SRV9USU1FUiBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCiAJc3RjawlfX0xDX0lOVF9DTE9DSwpAQCAtNjgzLDggKzY4Miw4IEBACiAjZW5kaWYKIAlsCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0JbGEJJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCi0JbGgJJXIzLF9fTENfRVhUX0lOVF9DT0RFICAjIGdldCBpbnRlcnJ1cHRpb24gY29kZQorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQorCWxoCSVyMyxfX0xDX0VYVF9JTlRfQ09ERQkjIGdldCBpbnRlcnJ1cHRpb24gY29kZQogCWwJJXIxLEJBU0VEKC5MZG9fZXh0aW50KQogCWJhc3IJJXIxNCwlcjEKIAlUUkFDRV9JUlFTX09OCkBAIC02OTYsMTMgKzY5NSwxMyBAQAogICogTWFjaGluZSBjaGVjayBoYW5kbGVyIHJvdXRpbmVzCiAgKi8KIAotICAgICAgICAuZ2xvYmwgbWNja19pbnRfaGFuZGxlcgorCS5nbG9ibCBtY2NrX2ludF9oYW5kbGVyCiBtY2NrX2ludF9oYW5kbGVyOgogCXNwdAlfX0xDX0NQVV9USU1FUl9TQVZFX0FSRUEJIyByZXZhbGlkYXRlIGNwdSB0aW1lcgogCWxtCSVyMCwlcjE1LF9fTENfR1BSRUdTX1NBVkVfQVJFQQkjIHJldmFsaWRhdGUgZ3BycwogCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUErMzIKIAlsYQklcjEyLF9fTENfTUNLX09MRF9QU1cKLQl0bQlfX0xDX01DQ0tfQ09ERSwweDgwICAgICAjIHN5c3RlbSBkYW1hZ2U/CisJdG0JX19MQ19NQ0NLX0NPREUsMHg4MAkjIHN5c3RlbSBkYW1hZ2U/CiAJYm8JQkFTRUQobWNja19pbnRfbWFpbikJIyB5ZXMgLT4gcmVzdCBvZiBtY2NrIGNvZGUgaW52YWxpZAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCiAJbXZjCV9fTENfU0FWRV9BUkVBKzUyKDgpLF9fTENfQVNZTkNfRU5URVJfVElNRVIKQEAgLTc0MSw3ICs3NDAsNyBAQAogCWwJJXIxNSxfX0xDX1BBTklDX1NUQUNLCSMgbG9hZCBwYW5pYyBzdGFjawogMDoJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfTUNLX09MRF9QU1csX19MQ19TQVZFX0FSRUErMzIKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwotCXRtCV9fTENfTUNDS19DT0RFKzIsMHgwOCAgICMgbXdwIG9mIG9sZCBwc3cgdmFsaWQ/CisJdG0JX19MQ19NQ0NLX0NPREUrMiwweDA4CSMgbXdwIG9mIG9sZCBwc3cgdmFsaWQ/CiAJYm5vCUJBU0VEKG1jY2tfbm9fdnRpbWUpCSMgbm8gLT4gc2tpcCBjbGVhbnVwIGNyaXRpY2FsCiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGludGVycnVwdGluZyBmcm9tIHVzZXIgPwogCWJ6CUJBU0VEKG1jY2tfbm9fdnRpbWUpCkBAIC03NTIsMTQgKzc1MSwxNCBAQAogI2VuZGlmCiAJbAklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCi0JbCAgICAgICAlcjEsQkFTRUQoLkxzMzkwX21jY2spCi0JYmFzciAgICAlcjE0LCVyMQkJIyBjYWxsIG1hY2hpbmUgY2hlY2sgaGFuZGxlcgotCXRtICAgICAgU1BfUFNXKzEoJXIxNSksMHgwMQkjIHJldHVybmluZyB0byB1c2VyID8KKwlsCSVyMSxCQVNFRCguTHMzOTBfbWNjaykKKwliYXNyCSVyMTQsJXIxCQkjIGNhbGwgbWFjaGluZSBjaGVjayBoYW5kbGVyCisJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIHJldHVybmluZyB0byB1c2VyID8KIAlibm8JQkFTRUQobWNja19yZXR1cm4pCi0JbAklcjEsX19MQ19LRVJORUxfU1RBQ0sgICAjIHN3aXRjaCB0byBrZXJuZWwgc3RhY2sKKwlsCSVyMSxfX0xDX0tFUk5FTF9TVEFDSwkjIHN3aXRjaCB0byBrZXJuZWwgc3RhY2sKIAlzCSVyMSxCQVNFRCguTGNfc3BzaXplKQogCW12YwlTUF9QVFJFR1MoX19QVF9TSVpFLCVyMSksU1BfUFRSRUdTKCVyMTUpCi0JeGMgICAgICBfX1NGX0JBQ0tDSEFJTig0LCVyMSksX19TRl9CQUNLQ0hBSU4oJXIxKSAjIGNsZWFyIGJhY2sgY2hhaW4KKwl4YwlfX1NGX0JBQ0tDSEFJTig0LCVyMSksX19TRl9CQUNLQ0hBSU4oJXIxKSAjIGNsZWFyIGJhY2sgY2hhaW4KIAlscgklcjE1LCVyMQogCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAkjIHR1cm4gZGF0IG9uCiAJdG0JX19USV9mbGFncyszKCVyOSksX1RJRl9NQ0NLX1BFTkRJTkcKQEAgLTc4MywzNiArNzgyLDM2IEBACiAJbG0JJXIwLCVyMTUsU1BfUjAoJXIxNSkJIyBsb2FkIGdwcnMgMC0xNQogCWxwc3cJX19MQ19SRVRVUk5fTUNDS19QU1cJIyBiYWNrIHRvIGNhbGxlcgogCi0gICAgICAgIFJFU1RPUkVfQUxMIF9fTENfUkVUVVJOX01DQ0tfUFNXLDAKKwlSRVNUT1JFX0FMTCBfX0xDX1JFVFVSTl9NQ0NLX1BTVywwCiAKICNpZmRlZiBDT05GSUdfU01QCiAvKgogICogUmVzdGFydCBpbnRlcnJ1cHRpb24gaGFuZGxlciwga2ljayBzdGFydGVyIGZvciBhZGRpdGlvbmFsIENQVXMKICAqLwotICAgICAgICAuZ2xvYmwgcmVzdGFydF9pbnRfaGFuZGxlcgorCS5nbG9ibCByZXN0YXJ0X2ludF9oYW5kbGVyCiByZXN0YXJ0X2ludF9oYW5kbGVyOgotICAgICAgICBsICAgICAgICVyMTUsX19MQ19TQVZFX0FSRUErNjAgIyBsb2FkIGtzcAotICAgICAgICBsY3RsICAgICVjMCwlYzE1LF9fTENfQ1JFR1NfU0FWRV9BUkVBICMgZ2V0IG5ldyBjdGwgcmVncwotICAgICAgICBsYW0gICAgICVhMCwlYTE1LF9fTENfQVJFR1NfU0FWRV9BUkVBCi0gICAgICAgIGxtICAgICAgJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpICMgbG9hZCByZWdpc3RlcnMgZnJvbSBjbG9uZQotICAgICAgICBzdG9zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHgwNCAgICAjIG5vdyB3ZSBjYW4gdHVybiBkYXQgb24KLSAgICAgICAgYmFzciAgICAlcjE0LDAKLSAgICAgICAgbCAgICAgICAlcjE0LHJlc3RhcnRfYWRkci0uKCVyMTQpCi0gICAgICAgIGJyICAgICAgJXIxNCAgICAgICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKKwlsCSVyMTUsX19MQ19TQVZFX0FSRUErNjAJIyBsb2FkIGtzcAorCWxjdGwJJWMwLCVjMTUsX19MQ19DUkVHU19TQVZFX0FSRUEgIyBnZXQgbmV3IGN0bCByZWdzCisJbGFtCSVhMCwlYTE1LF9fTENfQVJFR1NfU0FWRV9BUkVBCisJbG0JJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpICMgbG9hZCByZWdpc3RlcnMgZnJvbSBjbG9uZQorCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwNAkjIG5vdyB3ZSBjYW4gdHVybiBkYXQgb24KKwliYXNyCSVyMTQsMAorCWwJJXIxNCxyZXN0YXJ0X2FkZHItLiglcjE0KQorCWJyCSVyMTQJCQkjIGJyYW5jaCB0byBzdGFydF9zZWNvbmRhcnkKIHJlc3RhcnRfYWRkcjoKLSAgICAgICAgLmxvbmcgICBzdGFydF9zZWNvbmRhcnkKKwkubG9uZwlzdGFydF9zZWNvbmRhcnkKICNlbHNlCiAvKgogICogSWYgd2UgZG8gbm90IHJ1biB3aXRoIFNNUCBlbmFibGVkLCBsZXQgdGhlIG5ldyBDUFUgY3Jhc2ggLi4uCiAgKi8KLSAgICAgICAgLmdsb2JsIHJlc3RhcnRfaW50X2hhbmRsZXIKKwkuZ2xvYmwgcmVzdGFydF9pbnRfaGFuZGxlcgogcmVzdGFydF9pbnRfaGFuZGxlcjoKLSAgICAgICAgYmFzciAgICAlcjEsMAorCWJhc3IJJXIxLDAKIHJlc3RhcnRfYmFzZToKLSAgICAgICAgbHBzdyAgICByZXN0YXJ0X2NyYXNoLXJlc3RhcnRfYmFzZSglcjEpCi0gICAgICAgIC5hbGlnbiA4CisJbHBzdwlyZXN0YXJ0X2NyYXNoLXJlc3RhcnRfYmFzZSglcjEpCisJLmFsaWduCTgKIHJlc3RhcnRfY3Jhc2g6Ci0gICAgICAgIC5sb25nICAweDAwMGEwMDAwLDB4MDAwMDAwMDAKKwkubG9uZwkweDAwMGEwMDAwLDB4MDAwMDAwMDAKIHJlc3RhcnRfZ286CiAjZW5kaWYKIApAQCAtODM0LDExICs4MzMsMTEgQEAKIAliZQlCQVNFRCgwZikKIAlsYQklcjEsX19MQ19TQVZFX0FSRUErMTYKIDA6CW12YwlTUF9SMTIoMTYsJXIxNSksMCglcjEpCSMgbW92ZSAlcjEyLSVyMTUgdG8gc3RhY2sKLSAgICAgICAgeGMgICAgICBfX1NGX0JBQ0tDSEFJTig0LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpICMgY2xlYXIgYmFjayBjaGFpbgorCXhjCV9fU0ZfQkFDS0NIQUlOKDQsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkgIyBjbGVhciBiYWNrIGNoYWluCiAJbAklcjEsQkFTRUQoMWYpCQkjIGJyYW5jaCB0byBrZXJuZWxfc3RhY2tfb3ZlcmZsb3cKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWJyCSVyMQotMToJLmxvbmcgIGtlcm5lbF9zdGFja19vdmVyZmxvdworMToJLmxvbmcJa2VybmVsX3N0YWNrX292ZXJmbG93CiAjZW5kaWYKIAogY2xlYW51cF90YWJsZV9zeXN0ZW1fY2FsbDoKQEAgLTk0MCwxMCArOTM5LDEwIEBACiBjbGVhbnVwX3N5c3RlbV9jYWxsX2luc246CiAJLmxvbmcJc3lzY19zYXZlYWxsICsgMHg4MDAwMDAwMAogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCi0JLmxvbmcgICBzeXN0ZW1fY2FsbCArIDB4ODAwMDAwMDAKLQkubG9uZyAgIHN5c2NfdnRpbWUgKyAweDgwMDAwMDAwCi0JLmxvbmcgICBzeXNjX3N0aW1lICsgMHg4MDAwMDAwMAotCS5sb25nICAgc3lzY191cGRhdGUgKyAweDgwMDAwMDAwCisJLmxvbmcJc3lzdGVtX2NhbGwgKyAweDgwMDAwMDAwCisJLmxvbmcJc3lzY192dGltZSArIDB4ODAwMDAwMDAKKwkubG9uZwlzeXNjX3N0aW1lICsgMHg4MDAwMDAwMAorCS5sb25nCXN5c2NfdXBkYXRlICsgMHg4MDAwMDAwMAogI2VuZGlmCiAKIGNsZWFudXBfc3lzY19yZXR1cm46CkBAIC0xMDA5LDU3ICsxMDA4LDU3IEBACiAvKgogICogSW50ZWdlciBjb25zdGFudHMKICAqLwotICAgICAgICAgICAgICAgLmFsaWduIDQKLS5MY19zcHNpemU6ICAgIC5sb25nICBTUF9TSVpFCi0uTGNfb3ZlcmhlYWQ6ICAubG9uZyAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLS5MY19wYWN0aXZlOiAgIC5sb25nICBQUkVFTVBUX0FDVElWRQotLkxucl9zeXNjYWxsczogLmxvbmcgIE5SX3N5c2NhbGxzCi0uTDB4MDE4OiAgICAgICAuc2hvcnQgMHgwMTgKLS5MMHgwMjA6ICAgICAgIC5zaG9ydCAweDAyMAotLkwweDAyODogICAgICAgLnNob3J0IDB4MDI4Ci0uTDB4MDMwOiAgICAgICAuc2hvcnQgMHgwMzAKLS5MMHgwMzg6ICAgICAgIC5zaG9ydCAweDAzOAotLkxjXzE6ICAgICAgICAgLmxvbmcgIDEKKwkJLmFsaWduCTQKKy5MY19zcHNpemU6CS5sb25nCVNQX1NJWkUKKy5MY19vdmVyaGVhZDoJLmxvbmcJU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKKy5MY19wYWN0aXZlOgkubG9uZwlQUkVFTVBUX0FDVElWRQorLkxucl9zeXNjYWxsczoJLmxvbmcJTlJfc3lzY2FsbHMKKy5MMHgwMTg6CS5zaG9ydAkweDAxOAorLkwweDAyMDoJLnNob3J0CTB4MDIwCisuTDB4MDI4Ogkuc2hvcnQJMHgwMjgKKy5MMHgwMzA6CS5zaG9ydAkweDAzMAorLkwweDAzODoJLnNob3J0CTB4MDM4CisuTGNfMToJCS5sb25nCTEKIAogLyoKICAqIFN5bWJvbCBjb25zdGFudHMKICAqLwotLkxzMzkwX21jY2s6ICAgLmxvbmcgIHMzOTBfZG9fbWFjaGluZV9jaGVjaworLkxzMzkwX21jY2s6CS5sb25nCXMzOTBfZG9fbWFjaGluZV9jaGVjawogLkxzMzkwX2hhbmRsZV9tY2NrOgotCSAgICAgICAubG9uZyAgczM5MF9oYW5kbGVfbWNjawotLkxtY2tfb2xkX3BzdzogLmxvbmcgIF9fTENfTUNLX09MRF9QU1cKLS5MZG9fSVJROiAgICAgIC5sb25nICBkb19JUlEKLS5MZG9fZXh0aW50OiAgIC5sb25nICBkb19leHRpbnQKLS5MZG9fc2lnbmFsOiAgIC5sb25nICBkb19zaWduYWwKLS5MaGFuZGxlX3BlcjogIC5sb25nICBkb19zaW5nbGVfc3RlcAotLkxqdW1wX3RhYmxlOiAgLmxvbmcgIHBnbV9jaGVja190YWJsZQotLkxzY2hlZHVsZTogICAgLmxvbmcgIHNjaGVkdWxlCi0uTGNsb25lOiAgICAgICAubG9uZyAgc3lzX2Nsb25lCi0uTGV4ZWN2ZTogICAgICAubG9uZyAgc3lzX2V4ZWN2ZQotLkxmb3JrOiAgICAgICAgLmxvbmcgIHN5c19mb3JrCi0uTHJ0X3NpZ3JldHVybjoubG9uZyAgc3lzX3J0X3NpZ3JldHVybgorCQkubG9uZwlzMzkwX2hhbmRsZV9tY2NrCisuTG1ja19vbGRfcHN3OgkubG9uZwlfX0xDX01DS19PTERfUFNXCisuTGRvX0lSUToJLmxvbmcJZG9fSVJRCisuTGRvX2V4dGludDoJLmxvbmcJZG9fZXh0aW50CisuTGRvX3NpZ25hbDoJLmxvbmcJZG9fc2lnbmFsCisuTGhhbmRsZV9wZXI6CS5sb25nCWRvX3NpbmdsZV9zdGVwCisuTGp1bXBfdGFibGU6CS5sb25nCXBnbV9jaGVja190YWJsZQorLkxzY2hlZHVsZToJLmxvbmcJc2NoZWR1bGUKKy5MY2xvbmU6CS5sb25nCXN5c19jbG9uZQorLkxleGVjdmU6CS5sb25nCXN5c19leGVjdmUKKy5MZm9yazogCS5sb25nCXN5c19mb3JrCisuTHJ0X3NpZ3JldHVybjogLmxvbmcJc3lzX3J0X3NpZ3JldHVybgogLkxydF9zaWdzdXNwZW5kOgotICAgICAgICAgICAgICAgLmxvbmcgIHN5c19ydF9zaWdzdXNwZW5kCi0uTHNpZ3JldHVybjogICAubG9uZyAgc3lzX3NpZ3JldHVybgotLkxzaWdzdXNwZW5kOiAgLmxvbmcgIHN5c19zaWdzdXNwZW5kCi0uTHNpZ2FsdHN0YWNrOiAubG9uZyAgc3lzX3NpZ2FsdHN0YWNrCi0uTHRyYWNlOiAgICAgICAubG9uZyAgc3lzY2FsbF90cmFjZQotLkx2Zm9yazogICAgICAgLmxvbmcgIHN5c192Zm9yawotLkxzY2hlZHRhaWw6ICAgLmxvbmcgIHNjaGVkdWxlX3RhaWwKLS5Mc3lzY190YWJsZTogIC5sb25nICBzeXNfY2FsbF90YWJsZQorCQkubG9uZwlzeXNfcnRfc2lnc3VzcGVuZAorLkxzaWdyZXR1cm46CS5sb25nCXN5c19zaWdyZXR1cm4KKy5Mc2lnc3VzcGVuZDoJLmxvbmcJc3lzX3NpZ3N1c3BlbmQKKy5Mc2lnYWx0c3RhY2s6CS5sb25nCXN5c19zaWdhbHRzdGFjaworLkx0cmFjZToJLmxvbmcJc3lzY2FsbF90cmFjZQorLkx2Zm9yazoJLmxvbmcJc3lzX3Zmb3JrCisuTHNjaGVkdGFpbDoJLmxvbmcJc2NoZWR1bGVfdGFpbAorLkxzeXNjX3RhYmxlOgkubG9uZwlzeXNfY2FsbF90YWJsZQogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwotLkx0cmFjZV9pcnFfb246LmxvbmcgIHRyYWNlX2hhcmRpcnFzX29uCisuTHRyYWNlX2lycV9vbjogLmxvbmcJdHJhY2VfaGFyZGlycXNfb24KIC5MdHJhY2VfaXJxX29mZjoKLQkgICAgICAgLmxvbmcgIHRyYWNlX2hhcmRpcnFzX29mZgorCQkubG9uZwl0cmFjZV9oYXJkaXJxc19vZmYKICNlbmRpZgogLkxjcml0aWNhbF9zdGFydDoKLSAgICAgICAgICAgICAgIC5sb25nICBfX2NyaXRpY2FsX3N0YXJ0ICsgMHg4MDAwMDAwMAorCQkubG9uZwlfX2NyaXRpY2FsX3N0YXJ0ICsgMHg4MDAwMDAwMAogLkxjcml0aWNhbF9lbmQ6Ci0gICAgICAgICAgICAgICAubG9uZyAgX19jcml0aWNhbF9lbmQgKyAweDgwMDAwMDAwCisJCS5sb25nCV9fY3JpdGljYWxfZW5kICsgMHg4MDAwMDAwMAogLkxjbGVhbnVwX2NyaXRpY2FsOgotICAgICAgICAgICAgICAgLmxvbmcgIGNsZWFudXBfY3JpdGljYWwKKwkJLmxvbmcJY2xlYW51cF9jcml0aWNhbAogCi0JICAgICAgIC5zZWN0aW9uIC5yb2RhdGEsICJhIgorCQkuc2VjdGlvbiAucm9kYXRhLCAiYSIKICNkZWZpbmUgU1lTQ0FMTChlc2EsZXNhbWUsZW11KQkubG9uZyBlc2EKIHN5c19jYWxsX3RhYmxlOgogI2luY2x1ZGUgInN5c2NhbGxzLlMiCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2VudHJ5NjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCmluZGV4IDI5YmJmYmEuLjBmNzU4YzMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvZW50cnk2NC5TCkBAIC00LDggKzQsOCBAQAogICoKICAqICAgIENvcHlyaWdodCAoQykgSUJNIENvcnAuIDE5OTksMjAwNgogICogICAgQXV0aG9yKHMpOiBNYXJ0aW4gU2Nod2lkZWZza3kgKHNjaHdpZGVmc2t5QGRlLmlibS5jb20pLAotICogICAgICAgICAgICAgICBIYXJ0bXV0IFBlbm5lciAoaHBAZGUuaWJtLmNvbSksCi0gKiAgICAgICAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSksCisgKgkJIEhhcnRtdXQgUGVubmVyIChocEBkZS5pYm0uY29tKSwKKyAqCQkgRGVuaXMgSm9zZXBoIEJhcnJvdyAoZGpiYXJyb3dAZGUuaWJtLmNvbSxiYXJyb3dfZGpAeWFob28uY29tKSwKICAqCQkgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKi8KIApAQCAtMjQsMjkgKzI0LDI5IEBACiAgKiBTdGFjayBsYXlvdXQgZm9yIHRoZSBzeXN0ZW1fY2FsbCBzdGFjayBlbnRyeS4KICAqIFRoZSBmaXJzdCBmZXcgZW50cmllcyBhcmUgaWRlbnRpY2FsIHRvIHRoZSB1c2VyX3JlZ3Nfc3RydWN0LgogICovCi1TUF9QVFJFR1MgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQKLVNQX0FSR1MgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfQVJHUwotU1BfUFNXICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9QU1cKLVNQX1IwICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUwotU1BfUjEgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgOAotU1BfUjIgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMTYKLVNQX1IzICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDI0Ci1TUF9SNCAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAzMgotU1BfUjUgICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNDAKLVNQX1I2ICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDQ4Ci1TUF9SNyAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA1NgotU1BfUjggICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNjQKLVNQX1I5ICAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDcyCi1TUF9SMTAgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA4MAotU1BfUjExICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgODgKLVNQX1IxMiAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDk2Ci1TUF9SMTMgICAgICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxMDQKLVNQX1IxNCAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDExMgotU1BfUjE1ICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMTIwCi1TUF9PUklHX1IyICAgPSAgU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX09SSUdfR1BSMgotU1BfSUxDICAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9JTEMKLVNQX1RSQVAgICAgICA9ICBTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfVFJBUAotU1BfU0laRSAgICAgID0gIFNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9TSVpFCitTUF9QVFJFR1MgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRAorU1BfQVJHUyAgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0FSR1MKK1NQX1BTVwkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX1BTVworU1BfUjAJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTCitTUF9SMQkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA4CitTUF9SMgkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxNgorU1BfUjMJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgMjQKK1NQX1I0CSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDMyCitTUF9SNQkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA0MAorU1BfUjYJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNDgKK1NQX1I3CSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDU2CitTUF9SOAkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA2NAorU1BfUjkJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgNzIKK1NQX1IxMAkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyA4MAorU1BfUjExCSAgICAgPQlTVEFDS19GUkFNRV9PVkVSSEVBRCArIF9fUFRfR1BSUyArIDg4CitTUF9SMTIJICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9HUFJTICsgOTYKK1NQX1IxMwkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxMDQKK1NQX1IxNAkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxMTIKK1NQX1IxNQkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0dQUlMgKyAxMjAKK1NQX09SSUdfUjIgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9PUklHX0dQUjIKK1NQX0lMQwkgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX0lMQworU1BfVFJBUCAgICAgID0JU1RBQ0tfRlJBTUVfT1ZFUkhFQUQgKyBfX1BUX1RSQVAKK1NQX1NJWkUgICAgICA9CVNUQUNLX0ZSQU1FX09WRVJIRUFEICsgX19QVF9TSVpFCiAKIFNUQUNLX1NISUZUID0gUEFHRV9TSElGVCArIFRIUkVBRF9PUkRFUgogU1RBQ0tfU0laRSAgPSAxIDw8IFNUQUNLX1NISUZUCkBAIC03MSwxNCArNzEsMTQgQEAKICNkZWZpbmUgVFJBQ0VfSVJRU19PRkYKICNlbmRpZgogCi0JLm1hY3JvICBTVE9SRV9USU1FUiBsY19vZmZzZXQKKwkubWFjcm8JU1RPUkVfVElNRVIgbGNfb2Zmc2V0CiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlzdHB0CVxsY19vZmZzZXQKICNlbmRpZgogCS5lbmRtCiAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwotCS5tYWNybyAgVVBEQVRFX1ZUSU1FIGxjX2Zyb20sbGNfdG8sbGNfc3VtCisJLm1hY3JvCVVQREFURV9WVElNRSBsY19mcm9tLGxjX3RvLGxjX3N1bQogCWxnCSVyMTAsXGxjX2Zyb20KIAlzbGcJJXIxMCxcbGNfdG8KIAlhbGcJJXIxMCxcbGNfc3VtCkBAIC05NCw3ICs5NCw3IEBACiAgKiAgICBSMTUgLSBrZXJuZWwgc3RhY2sgcG9pbnRlcgogICovCiAKLSAgICAgICAgLm1hY3JvICBTQVZFX0FMTF9CQVNFIHNhdmVhcmVhCisJLm1hY3JvCVNBVkVfQUxMX0JBU0Ugc2F2ZWFyZWEKIAlzdG1nCSVyMTIsJXIxNSxcc2F2ZWFyZWEKIAlsYXJsCSVyMTMsc3lzdGVtX2NhbGwKIAkuZW5kbQpAQCAtMTM5LDggKzEzOSw4IEBACiAJLmVuZG0KIAogCS5tYWNybwlDUkVBVEVfU1RBQ0tfRlJBTUUgcHN3b3JnLHNhdmVhcmVhCi0JYWdoaSAgICAlcjE1LC1TUF9TSVpFCQkjIG1ha2Ugcm9vbSBmb3IgcmVnaXN0ZXJzICYgcHN3Ci0JbXZjICAgICBTUF9QU1coMTYsJXIxNSksMCglcjEyKQkjIG1vdmUgdXNlciBQU1cgdG8gc3RhY2sKKwlhZ2hpCSVyMTUsLVNQX1NJWkUJCSMgbWFrZSByb29tIGZvciByZWdpc3RlcnMgJiBwc3cKKwltdmMJU1BfUFNXKDE2LCVyMTUpLDAoJXIxMikJIyBtb3ZlIHVzZXIgUFNXIHRvIHN0YWNrCiAJbGEJJXIxMixccHN3b3JnCiAJc3RnCSVyMixTUF9PUklHX1IyKCVyMTUpCSMgc3RvcmUgb3JpZ2luYWwgY29udGVudCBvZiBncHIgMgogCWljbQklcjEyLDEyLF9fTENfU1ZDX0lMQwpAQCAtMTQ5LDcgKzE0OSw3IEBACiAJbXZjCVNQX1IxMigzMiwlcjE1KSxcc2F2ZWFyZWEgIyBtb3ZlICVyMTItJXIxNSB0byBzdGFjawogCWxhCSVyMTIsMAogCXN0ZwklcjEyLF9fU0ZfQkFDS0NIQUlOKCVyMTUpCi0gICAgICAgIC5lbmRtCisJLmVuZG0KIAogCS5tYWNybwlSRVNUT1JFX0FMTCBwc3dvcmcsc3luYwogCW12YwlccHN3b3JnKDE2KSxTUF9QU1coJXIxNSkgIyBtb3ZlIHVzZXIgUFNXIHRvIGxvd2NvcmUKQEAgLTE2OCwyOSArMTY4LDI5IEBACiAgKiBSZXR1cm5zOgogICogIGdwcjIgPSBwcmV2CiAgKi8KLSAgICAgICAgLmdsb2JsICBfX3N3aXRjaF90bworCS5nbG9ibAlfX3N3aXRjaF90bwogX19zd2l0Y2hfdG86CiAJdG0JX19USFJFQURfcGVyKzQoJXIzKSwweGU4ICMgaXMgdGhlIG5ldyBwcm9jZXNzIHVzaW5nIHBlciA/CiAJanoJX19zd2l0Y2hfdG9fbm9wZXIJCSMgaWYgbm90IHdlJ3JlIGZpbmUKLSAgICAgICAgc3RjdGcgICAlYzksJWMxMSxfX1NGX0VNUFRZKCVyMTUpIyBXZSBhcmUgdXNpbmcgcGVyIHN0dWZmCi0gICAgICAgIGNsYyAgICAgX19USFJFQURfcGVyKDI0LCVyMyksX19TRl9FTVBUWSglcjE1KQotICAgICAgICBqZSAgICAgIF9fc3dpdGNoX3RvX25vcGVyICAgICAgICAgICAgIyB3ZSBnb3QgYXdheSB3aXRob3V0IGJhc2hpbmcgVExCJ3MKLSAgICAgICAgbGN0bGcgICAlYzksJWMxMSxfX1RIUkVBRF9wZXIoJXIzKQkjIE5vcGUgd2UgZGlkbid0CisJc3RjdGcJJWM5LCVjMTEsX19TRl9FTVBUWSglcjE1KSMgV2UgYXJlIHVzaW5nIHBlciBzdHVmZgorCWNsYwlfX1RIUkVBRF9wZXIoMjQsJXIzKSxfX1NGX0VNUFRZKCVyMTUpCisJamUJX19zd2l0Y2hfdG9fbm9wZXIJICAgICAjIHdlIGdvdCBhd2F5IHdpdGhvdXQgYmFzaGluZyBUTEIncworCWxjdGxnCSVjOSwlYzExLF9fVEhSRUFEX3BlciglcjMpCSMgTm9wZSB3ZSBkaWRuJ3QKIF9fc3dpdGNoX3RvX25vcGVyOgotCWxnCSVyNCxfX1RIUkVBRF9pbmZvKCVyMikgICAgICAgICAgICAgICMgZ2V0IHRocmVhZF9pbmZvIG9mIHByZXYKKwlsZwklcjQsX19USFJFQURfaW5mbyglcjIpCQkgICAgIyBnZXQgdGhyZWFkX2luZm8gb2YgcHJldgogCXRtCV9fVElfZmxhZ3MrNyglcjQpLF9USUZfTUNDS19QRU5ESU5HICMgbWFjaGluZSBjaGVjayBwZW5kaW5nPwogCWp6CV9fc3dpdGNoX3RvX25vX21jY2sKIAluaQlfX1RJX2ZsYWdzKzcoJXI0KSwyNTUtX1RJRl9NQ0NLX1BFTkRJTkcgIyBjbGVhciBmbGFnIGluIHByZXYKIAlsZwklcjQsX19USFJFQURfaW5mbyglcjMpCQkgICAgIyBnZXQgdGhyZWFkX2luZm8gb2YgbmV4dAogCW9pCV9fVElfZmxhZ3MrNyglcjQpLF9USUZfTUNDS19QRU5ESU5HICMgc2V0IGl0IGluIG5leHQKIF9fc3dpdGNoX3RvX25vX21jY2s6Ci0gICAgICAgIHN0bWcgICAgJXI2LCVyMTUsX19TRl9HUFJTKCVyMTUpIyBzdG9yZSBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgcHJldiB0YXNrCisJc3RtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkjIHN0b3JlIF9fc3dpdGNoX3RvIHJlZ2lzdGVycyBvZiBwcmV2IHRhc2sKIAlzdGcJJXIxNSxfX1RIUkVBRF9rc3AoJXIyKQkjIHN0b3JlIGtlcm5lbCBzdGFjayB0byBwcmV2LT50c3Mua3NwCiAJbGcJJXIxNSxfX1RIUkVBRF9rc3AoJXIzKQkjIGxvYWQga2VybmVsIHN0YWNrIGZyb20gbmV4dC0+dHNzLmtzcAotICAgICAgICBsbWcgICAgICVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgbG9hZCBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgbmV4dCB0YXNrCisJbG1nCSVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSMgbG9hZCBfX3N3aXRjaF90byByZWdpc3RlcnMgb2YgbmV4dCB0YXNrCiAJc3RnCSVyMyxfX0xDX0NVUlJFTlQJIyBfX0xDX0NVUlJFTlQgPSBjdXJyZW50IHRhc2sgc3RydWN0CiAJbGN0bAklYzQsJWM0LF9fVEFTS19waWQoJXIzKSAjIGxvYWQgcGlkIHRvIGNvbnRyb2wgcmVnLiA0Ci0JbGcJJXIzLF9fVEhSRUFEX2luZm8oJXIzKSAgIyBsb2FkIHRocmVhZF9pbmZvIGZyb20gdGFzayBzdHJ1Y3QKKwlsZwklcjMsX19USFJFQURfaW5mbyglcjMpCSMgbG9hZCB0aHJlYWRfaW5mbyBmcm9tIHRhc2sgc3RydWN0CiAJc3RnCSVyMyxfX0xDX1RIUkVBRF9JTkZPCiAJYWdoaQklcjMsU1RBQ0tfU0laRQogCXN0ZwklcjMsX19MQ19LRVJORUxfU1RBQ0sJIyBfX0xDX0tFUk5FTF9TVEFDSyA9IG5ldyBrZXJuZWwgc3RhY2sKQEAgLTIwMiwxNCArMjAyLDE0IEBACiAgKiBhcmUgZXhlY3V0ZWQgd2l0aCBpbnRlcnJ1cHRzIGVuYWJsZWQuCiAgKi8KIAotCS5nbG9ibCAgc3lzdGVtX2NhbGwKKwkuZ2xvYmwJc3lzdGVtX2NhbGwKIHN5c3RlbV9jYWxsOgogCVNUT1JFX1RJTUVSIF9fTENfU1lOQ19FTlRFUl9USU1FUgogc3lzY19zYXZlYWxsOgogCVNBVkVfQUxMX0JBU0UgX19MQ19TQVZFX0FSRUEKIAlTQVZFX0FMTF9TWU5DIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKLSAgICAgICAgQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfU1ZDX09MRF9QU1csX19MQ19TQVZFX0FSRUEKLQlsbGdoICAgICVyNyxfX0xDX1NWQ19JTlRfQ09ERSAjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQorCUNSRUFURV9TVEFDS19GUkFNRSBfX0xDX1NWQ19PTERfUFNXLF9fTENfU0FWRV9BUkVBCisJbGxnaAklcjcsX19MQ19TVkNfSU5UX0NPREUJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogc3lzY192dGltZToKIAl0bQlTUF9QU1crMSglcjE1KSwweDAxCSMgaW50ZXJydXB0aW5nIGZyb20gdXNlciA/CkBAIC0yMjIsNDUgKzIyMiw0NSBAQAogI2VuZGlmCiBzeXNjX2RvX3N2YzoKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKLSAgICAgICAgc2xhZyAgICAlcjcsJXI3LDIgICAgICAgICAjICo0IGFuZCB0ZXN0IGZvciBzdmMgMAorCXNsYWcJJXI3LCVyNywyCSMgKjQgYW5kIHRlc3QgZm9yIHN2YyAwCiAJam56CXN5c2NfbnJfb2sKIAkjIHN2YyAwOiBzeXN0ZW0gY2FsbCBudW1iZXIgaW4gJXIxCiAJY2wJJXIxLEJBU0VEKC5MbnJfc3lzY2FsbHMpCiAJam5sCXN5c2NfbnJfb2sKLQlsZ2ZyCSVyNywlcjEgICAgICAgICAgICMgY2xlYXIgaGlnaCB3b3JkIGluIHIxCi0Jc2xhZyAgICAlcjcsJXI3LDIgICAgICAgICAjIHN2YyAwOiBzeXN0ZW0gY2FsbCBudW1iZXIgaW4gJXIxCisJbGdmcgklcjcsJXIxIAkjIGNsZWFyIGhpZ2ggd29yZCBpbiByMQorCXNsYWcJJXI3LCVyNywyCSMgc3ZjIDA6IHN5c3RlbSBjYWxsIG51bWJlciBpbiAlcjEKIHN5c2NfbnJfb2s6CiAJbXZjCVNQX0FSR1MoOCwlcjE1KSxTUF9SNyglcjE1KQogc3lzY19kb19yZXN0YXJ0OgotCWxhcmwgICAgJXIxMCxzeXNfY2FsbF90YWJsZQorCWxhcmwJJXIxMCxzeXNfY2FsbF90YWJsZQogI2lmZGVmIENPTkZJR19DT01QQVQKIAl0bQlfX1RJX2ZsYWdzKzUoJXI5KSwoX1RJRl8zMUJJVD4+MTYpICAjIHJ1bm5pbmcgaW4gMzEgYml0IG1vZGUgPwogCWpubwlzeXNjX25vZW11Ci0JbGFybCAgICAlcjEwLHN5c19jYWxsX3RhYmxlX2VtdSAgIyB1c2UgMzEgYml0IGVtdWxhdGlvbiBzeXN0ZW0gY2FsbHMKKwlsYXJsCSVyMTAsc3lzX2NhbGxfdGFibGVfZW11ICAjIHVzZSAzMSBiaXQgZW11bGF0aW9uIHN5c3RlbSBjYWxscwogc3lzY19ub2VtdToKICNlbmRpZgogCXRtCV9fVElfZmxhZ3MrNyglcjkpLChfVElGX1NZU0NBTExfVFJBQ0V8X1RJRl9TWVNDQUxMX0FVRElUKQotICAgICAgICBsZ2YgICAgICVyOCwwKCVyNywlcjEwKSAgICMgbG9hZCBhZGRyZXNzIG9mIHN5c3RlbSBjYWxsIHJvdXRpbmUKLSAgICAgICAgam56ICAgICBzeXNjX3RyYWNlc3lzCi0gICAgICAgIGJhc3IgICAgJXIxNCwlcjggICAgICAgICAgIyBjYWxsIHN5c194eHh4Ci0gICAgICAgIHN0ZyAgICAgJXIyLFNQX1IyKCVyMTUpICAgIyBzdG9yZSByZXR1cm4gdmFsdWUgKGNoYW5nZSBSMiBvbiBzdGFjaykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFUVEVOVElPTjogY2hlY2sgc3lzX2V4ZWN2ZV9nbHVlIGJlZm9yZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgY2hhbmdpbmcgYW55dGhpbmcgaGVyZSAhIQorCWxnZgklcjgsMCglcjcsJXIxMCkgIyBsb2FkIGFkZHJlc3Mgb2Ygc3lzdGVtIGNhbGwgcm91dGluZQorCWpueglzeXNjX3RyYWNlc3lzCisJYmFzcgklcjE0LCVyOAkjIGNhbGwgc3lzX3h4eHgKKwlzdGcJJXIyLFNQX1IyKCVyMTUpICMgc3RvcmUgcmV0dXJuIHZhbHVlIChjaGFuZ2UgUjIgb24gc3RhY2spCisJCQkJIyBBVFRFTlRJT046IGNoZWNrIHN5c19leGVjdmVfZ2x1ZSBiZWZvcmUKKwkJCQkjIGNoYW5naW5nIGFueXRoaW5nIGhlcmUgISEKIAogc3lzY19yZXR1cm46Ci0gICAgICAgIHRtICAgICAgU1BfUFNXKzEoJXIxNSksMHgwMSAgICAjIHJldHVybmluZyB0byB1c2VyID8KLSAgICAgICAgam5vICAgICBzeXNjX2xlYXZlCisJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIHJldHVybmluZyB0byB1c2VyID8KKwlqbm8Jc3lzY19sZWF2ZQogCXRtCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfV09SS19TVkMKLQlqbnoJc3lzY193b3JrICAgICAgICAgIyB0aGVyZSBpcyB3b3JrIHRvIGRvIChzaWduYWxzIGV0Yy4pCisJam56CXN5c2Nfd29yawkjIHRoZXJlIGlzIHdvcmsgdG8gZG8gKHNpZ25hbHMgZXRjLikKIHN5c2NfbGVhdmU6Ci0gICAgICAgIFJFU1RPUkVfQUxMIF9fTENfUkVUVVJOX1BTVywxCisJUkVTVE9SRV9BTEwgX19MQ19SRVRVUk5fUFNXLDEKIAogIwogIyByZWNoZWNrIGlmIHRoZXJlIGlzIG1vcmUgd29yayB0byBkbwogIwogc3lzY193b3JrX2xvb3A6CiAJdG0JX19USV9mbGFncys3KCVyOSksX1RJRl9XT1JLX1NWQwotCWp6CXN5c2NfbGVhdmUgICAgICAgICMgdGhlcmUgaXMgbm8gd29yayB0byBkbworCWp6CXN5c2NfbGVhdmUJICAjIHRoZXJlIGlzIG5vIHdvcmsgdG8gZG8KICMKICMgT25lIG9mIHRoZSB3b3JrIGJpdHMgaXMgb24uIEZpbmQgb3V0IHdoaWNoIG9uZS4KICMKQEAgLTI3OSwyNSArMjc5LDI1IEBACiAKICMKICMgX1RJRl9ORUVEX1JFU0NIRUQgaXMgc2V0LCBjYWxsIHNjaGVkdWxlCi0jCQotc3lzY19yZXNjaGVkdWxlOiAgICAgICAgCi0JbGFybCAgICAlcjE0LHN5c2Nfd29ya19sb29wCi0gICAgICAgIGpnICAgICAgc2NoZWR1bGUgICAgICAgICAgICAjIHJldHVybiBwb2ludCBpcyBzeXNjX3JldHVybgorIworc3lzY19yZXNjaGVkdWxlOgorCWxhcmwJJXIxNCxzeXNjX3dvcmtfbG9vcAorCWpnCXNjaGVkdWxlCSMgcmV0dXJuIHBvaW50IGlzIHN5c2NfcmV0dXJuCiAKICMKICMgX1RJRl9NQ0NLX1BFTkRJTkcgaXMgc2V0LCBjYWxsIGhhbmRsZXIKICMKIHN5c2NfbWNja19wZW5kaW5nOgogCWxhcmwJJXIxNCxzeXNjX3dvcmtfbG9vcAotCWpnCXMzOTBfaGFuZGxlX21jY2sgICAgIyBUSUYgYml0IHdpbGwgYmUgY2xlYXJlZCBieSBoYW5kbGVyCisJamcJczM5MF9oYW5kbGVfbWNjawkjIFRJRiBiaXQgd2lsbCBiZSBjbGVhcmVkIGJ5IGhhbmRsZXIKIAogIwogIyBfVElGX1NJR1BFTkRJTkcgb3IgX1RJRl9SRVNUT1JFX1NJR01BU0sgaXMgc2V0LCBjYWxsIGRvX3NpZ25hbAogIwotc3lzY19zaWdwZW5kaW5nOiAgICAgCitzeXNjX3NpZ3BlbmRpbmc6CiAJbmkJX19USV9mbGFncys3KCVyOSksMjU1LV9USUZfU0lOR0xFX1NURVAgIyBjbGVhciBUSUZfU0lOR0xFX1NURVAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICMgbG9hZCBwdF9yZWdzCi0JYnJhc2wJJXIxNCxkb19zaWduYWwgICAgIyBjYWxsIGRvX3NpZ25hbAorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlicmFzbAklcjE0LGRvX3NpZ25hbAkJIyBjYWxsIGRvX3NpZ25hbAogCXRtCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfUkVTVEFSVF9TVkMKIAlqbwlzeXNjX3Jlc3RhcnQKIAl0bQlfX1RJX2ZsYWdzKzcoJXI5KSxfVElGX1NJTkdMRV9TVEVQCkBAIC0zMDksMTEgKzMwOSwxMSBAQAogIwogc3lzY19yZXN0YXJ0OgogCW5pCV9fVElfZmxhZ3MrNyglcjkpLDI1NS1fVElGX1JFU1RBUlRfU1ZDICMgY2xlYXIgVElGX1JFU1RBUlRfU1ZDCi0JbGcJJXI3LFNQX1IyKCVyMTUpICAgICAgICAjIGxvYWQgbmV3IHN2YyBudW1iZXIKLSAgICAgICAgc2xhZyAgICAlcjcsJXI3LDIgICAgICAgICAgICAgICMgKjQKKwlsZwklcjcsU1BfUjIoJXIxNSkJCSMgbG9hZCBuZXcgc3ZjIG51bWJlcgorCXNsYWcJJXI3LCVyNywyCQkjICo0CiAJbXZjCVNQX1IyKDgsJXIxNSksU1BfT1JJR19SMiglcjE1KSAjIHJlc3RvcmUgZmlyc3QgYXJndW1lbnQKLQlsbWcJJXIyLCVyNixTUF9SMiglcjE1KSAgICAjIGxvYWQgc3ZjIGFyZ3VtZW50cwotCWoJc3lzY19kb19yZXN0YXJ0ICAgICAgICAjIHJlc3RhcnQgc3ZjCisJbG1nCSVyMiwlcjYsU1BfUjIoJXIxNSkJIyBsb2FkIHN2YyBhcmd1bWVudHMKKwlqCXN5c2NfZG9fcmVzdGFydCAJIyByZXN0YXJ0IHN2YwogCiAjCiAjIF9USUZfU0lOR0xFX1NURVAgaXMgc2V0LCBjYWxsIGRvX3NpbmdsZV9zdGVwCkBAIC0zMjYsNDkgKzMyNiw0OCBAQAogCWxhcmwJJXIxNCxzeXNjX3JldHVybgkjIGxvYWQgYWRyLiBvZiBzeXN0ZW0gcmV0dXJuCiAJamcJZG9fc2luZ2xlX3N0ZXAJCSMgYnJhbmNoIHRvIGRvX3NpZ3RyYXAKIAotCiAjCiAjIGNhbGwgc3lzY2FsbF90cmFjZSBiZWZvcmUgYW5kIGFmdGVyIHN5c3RlbSBjYWxsCiAjIHNwZWNpYWwgbGlua2FnZTogJXIxMiBjb250YWlucyB0aGUgcmV0dXJuIGFkZHJlc3MgZm9yIHRyYWNlX3N2YwogIwogc3lzY190cmFjZXN5czoKLQlsYQklcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWxhCSVyMywwCiAJc3JsCSVyNywyCi0Jc3RnICAgICAlcjcsU1BfUjIoJXIxNSkKLSAgICAgICAgYnJhc2wgICAlcjE0LHN5c2NhbGxfdHJhY2UKKwlzdGcJJXI3LFNQX1IyKCVyMTUpCisJYnJhc2wJJXIxNCxzeXNjYWxsX3RyYWNlCiAJbGdoaQklcjAsTlJfc3lzY2FsbHMKIAljbGcJJXIwLFNQX1IyKCVyMTUpCiAJam5oCXN5c2NfdHJhY2Vub2dvCi0JbGcJJXI3LFNQX1IyKCVyMTUpICAgIyBzdHJhY2UgbWlnaHQgaGF2ZSBjaGFuZ2VkIHRoZQotCXNsbCAgICAgJXI3LDIgICAgICAgICAgICAgIyAgc3lzdGVtIGNhbGwKKwlsZwklcjcsU1BfUjIoJXIxNSkJCSMgc3RyYWNlIG1pZ2h0IGhhdmUgY2hhbmdlZCB0aGUKKwlzbGwJJXI3LDIJCQkjIHN5c3RlbSBjYWxsCiAJbGdmCSVyOCwwKCVyNywlcjEwKQogc3lzY190cmFjZWdvOgotCWxtZyAgICAgJXIzLCVyNixTUF9SMyglcjE1KQotCWxnICAgICAgJXIyLFNQX09SSUdfUjIoJXIxNSkKLSAgICAgICAgYmFzciAgICAlcjE0LCVyOCAgICAgICAgICAgICMgY2FsbCBzeXNfeHh4Ci0gICAgICAgIHN0ZyAgICAgJXIyLFNQX1IyKCVyMTUpICAgICAjIHN0b3JlIHJldHVybiB2YWx1ZQorCWxtZwklcjMsJXI2LFNQX1IzKCVyMTUpCisJbGcJJXIyLFNQX09SSUdfUjIoJXIxNSkKKwliYXNyCSVyMTQsJXI4CQkjIGNhbGwgc3lzX3h4eAorCXN0ZwklcjIsU1BfUjIoJXIxNSkJCSMgc3RvcmUgcmV0dXJuIHZhbHVlCiBzeXNjX3RyYWNlbm9nbzoKIAl0bQlfX1RJX2ZsYWdzKzcoJXI5KSwoX1RJRl9TWVNDQUxMX1RSQUNFfF9USUZfU1lTQ0FMTF9BVURJVCkKLSAgICAgICAganogICAgICBzeXNjX3JldHVybgotCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkgICAgIyBsb2FkIHB0X3JlZ3MKKwlqeglzeXNjX3JldHVybgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKIAlsYQklcjMsMQotCWxhcmwJJXIxNCxzeXNjX3JldHVybiAgICAjIHJldHVybiBwb2ludCBpcyBzeXNjX3JldHVybgorCWxhcmwJJXIxNCxzeXNjX3JldHVybgkjIHJldHVybiBwb2ludCBpcyBzeXNjX3JldHVybgogCWpnCXN5c2NhbGxfdHJhY2UKIAogIwogIyBhIG5ldyBwcm9jZXNzIGV4aXRzIHRoZSBrZXJuZWwgd2l0aCByZXRfZnJvbV9mb3JrCiAjCi0gICAgICAgIC5nbG9ibCAgcmV0X2Zyb21fZm9yaworCS5nbG9ibAlyZXRfZnJvbV9mb3JrCiByZXRfZnJvbV9mb3JrOgogCWxnCSVyMTMsX19MQ19TVkNfTkVXX1BTVys4CiAJbGcJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIGZvcmtpbmcgYSBrZXJuZWwgdGhyZWFkID8KIAlqbwkwZgogCXN0ZwklcjE1LFNQX1IxNSglcjE1KQkjIHN0b3JlIHN0YWNrIHBvaW50ZXIgZm9yIG5ldyBrdGhyZWFkCi0wOglicmFzbCAgICVyMTQsc2NoZWR1bGVfdGFpbAorMDoJYnJhc2wJJXIxNCxzY2hlZHVsZV90YWlsCiAJVFJBQ0VfSVJRU19PTgotICAgICAgICBzdG9zbSAgIDI0KCVyMTUpLDB4MDMgICAgICMgcmVlbmFibGUgaW50ZXJydXB0cworCXN0b3NtCTI0KCVyMTUpLDB4MDMJCSMgcmVlbmFibGUgaW50ZXJydXB0cwogCWoJc3lzY19yZXR1cm4KIAogIwpAQCAtMzc3LDc4ICszNzYsNzggQEAKICMgYnV0IGFyZSBjYWxsZWQgd2l0aCBkaWZmZXJlbnQgcGFyYW1ldGVyLgogIyByZXR1cm4tYWRkcmVzcyBpcyBzZXQgdXAgYWJvdmUKICMKLXN5c19jbG9uZV9nbHVlOiAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCi0gICAgICAgIGpnICAgICAgc3lzX2Nsb25lICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfY2xvbmUKK3N5c19jbG9uZV9nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlqZwlzeXNfY2xvbmUJCSMgYnJhbmNoIHRvIHN5c19jbG9uZQogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3lzMzJfY2xvbmVfZ2x1ZTogCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGxvYWQgcHRfcmVncwotICAgICAgICBqZyAgICAgIHN5czMyX2Nsb25lICAgICAgICAgICAgIyBicmFuY2ggdG8gc3lzMzJfY2xvbmUKK3N5czMyX2Nsb25lX2dsdWU6CisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncworCWpnCXN5czMyX2Nsb25lCQkjIGJyYW5jaCB0byBzeXMzMl9jbG9uZQogI2VuZGlmCiAKLXN5c19mb3JrX2dsdWU6ICAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCi0gICAgICAgIGpnICAgICAgc3lzX2ZvcmsgICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfZm9yaworc3lzX2ZvcmtfZ2x1ZToKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCisJamcJc3lzX2ZvcmsJCSMgYnJhbmNoIHRvIHN5c19mb3JrCiAKLXN5c192Zm9ya19nbHVlOiAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgICMgbG9hZCBwdF9yZWdzCi0gICAgICAgIGpnICAgICAgc3lzX3Zmb3JrICAgICAgICAgICAgICAjIGJyYW5jaCB0byBzeXNfdmZvcmsKK3N5c192Zm9ya19nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MKKwlqZwlzeXNfdmZvcmsJCSMgYnJhbmNoIHRvIHN5c192Zm9yawogCi1zeXNfZXhlY3ZlX2dsdWU6ICAgICAgICAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MKLQlsZ3IgICAgICVyMTIsJXIxNCAgICAgICAgICAgICAjIHNhdmUgcmV0dXJuIGFkZHJlc3MKLSAgICAgICAgYnJhc2wgICAlcjE0LHN5c19leGVjdmUgICAgICAgIyBjYWxsIHN5c19leGVjdmUKLSAgICAgICAgbHRnciAgICAlcjIsJXIyICAgICAgICAgICAgICAgIyBjaGVjayBpZiBleGVjdmUgZmFpbGVkCi0gICAgICAgIGJueiAgICAgMCglcjEyKSAgICAgICAgICAgICAgICMgaXQgZGlkIGZhaWwgLT4gc3RvcmUgcmVzdWx0IGluIGdwcjIKLSAgICAgICAgYiAgICAgICA2KCVyMTIpICAgICAgICAgICAgICAgIyBTS0lQIFNURyAyLFNQX1IyKDE1KSBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN5c3RlbV9jYWxsL3N5c2NfdHJhY2VzeXMKK3N5c19leGVjdmVfZ2x1ZToKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCisJbGdyCSVyMTIsJXIxNAkJIyBzYXZlIHJldHVybiBhZGRyZXNzCisJYnJhc2wJJXIxNCxzeXNfZXhlY3ZlIAkjIGNhbGwgc3lzX2V4ZWN2ZQorCWx0Z3IJJXIyLCVyMiAJCSMgY2hlY2sgaWYgZXhlY3ZlIGZhaWxlZAorCWJuegkwKCVyMTIpIAkJIyBpdCBkaWQgZmFpbCAtPiBzdG9yZSByZXN1bHQgaW4gZ3ByMgorCWIJNiglcjEyKSAJCSMgU0tJUCBTVEcgMixTUF9SMigxNSkgaW4KKwkJCQkJIyBzeXN0ZW1fY2FsbC9zeXNjX3RyYWNlc3lzCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3lzMzJfZXhlY3ZlX2dsdWU6ICAgICAgICAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MKLQlsZ3IgICAgICVyMTIsJXIxNCAgICAgICAgICAgICAjIHNhdmUgcmV0dXJuIGFkZHJlc3MKLSAgICAgICAgYnJhc2wgICAlcjE0LHN5czMyX2V4ZWN2ZSAgICAgIyBjYWxsIHN5czMyX2V4ZWN2ZQotICAgICAgICBsdGdyICAgICVyMiwlcjIgICAgICAgICAgICAgICAjIGNoZWNrIGlmIGV4ZWN2ZSBmYWlsZWQKLSAgICAgICAgYm56ICAgICAwKCVyMTIpICAgICAgICAgICAgICAgIyBpdCBkaWQgZmFpbCAtPiBzdG9yZSByZXN1bHQgaW4gZ3ByMgotICAgICAgICBiICAgICAgIDYoJXIxMikgICAgICAgICAgICAgICAjIFNLSVAgU1RHIDIsU1BfUjIoMTUpIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgc3lzdGVtX2NhbGwvc3lzY190cmFjZXN5cworc3lzMzJfZXhlY3ZlX2dsdWU6CisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncworCWxncgklcjEyLCVyMTQJCSMgc2F2ZSByZXR1cm4gYWRkcmVzcworCWJyYXNsCSVyMTQsc3lzMzJfZXhlY3ZlCSMgY2FsbCBzeXMzMl9leGVjdmUKKwlsdGdyCSVyMiwlcjIgCQkjIGNoZWNrIGlmIGV4ZWN2ZSBmYWlsZWQKKwlibnoJMCglcjEyKSAJCSMgaXQgZGlkIGZhaWwgLT4gc3RvcmUgcmVzdWx0IGluIGdwcjIKKwliCTYoJXIxMikgCQkjIFNLSVAgU1RHIDIsU1BfUjIoMTUpIGluCisJCQkJCSMgc3lzdGVtX2NhbGwvc3lzY190cmFjZXN5cwogI2VuZGlmCiAKLXN5c19zaWdyZXR1cm5fZ2x1ZTogICAgIAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKLSAgICAgICAgamcgICAgICBzeXNfc2lncmV0dXJuICAgICAgICAgIyBicmFuY2ggdG8gc3lzX3NpZ3JldHVybgorc3lzX3NpZ3JldHVybl9nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCisJamcJc3lzX3NpZ3JldHVybgkJIyBicmFuY2ggdG8gc3lzX3NpZ3JldHVybgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAotc3lzMzJfc2lncmV0dXJuX2dsdWU6ICAgICAKLSAgICAgICAgbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCi0gICAgICAgIGpnICAgICAgc3lzMzJfc2lncmV0dXJuICAgICAgICMgYnJhbmNoIHRvIHN5czMyX3NpZ3JldHVybgorc3lzMzJfc2lncmV0dXJuX2dsdWU6CisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKKwlqZwlzeXMzMl9zaWdyZXR1cm4gCSMgYnJhbmNoIHRvIHN5czMyX3NpZ3JldHVybgogI2VuZGlmCiAKLXN5c19ydF9zaWdyZXR1cm5fZ2x1ZTogICAgIAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKLSAgICAgICAgamcgICAgICBzeXNfcnRfc2lncmV0dXJuICAgICAgIyBicmFuY2ggdG8gc3lzX3NpZ3JldHVybgorc3lzX3J0X3NpZ3JldHVybl9nbHVlOgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCisJamcJc3lzX3J0X3NpZ3JldHVybgkjIGJyYW5jaCB0byBzeXNfc2lncmV0dXJuCiAKICNpZmRlZiBDT05GSUdfQ09NUEFUCi1zeXMzMl9ydF9zaWdyZXR1cm5fZ2x1ZTogICAgIAotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkgICAjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKLSAgICAgICAgamcgICAgICBzeXMzMl9ydF9zaWdyZXR1cm4gICAgIyBicmFuY2ggdG8gc3lzMzJfc2lncmV0dXJuCitzeXMzMl9ydF9zaWdyZXR1cm5fZ2x1ZToKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzIGFzIHBhcmFtZXRlcgorCWpnCXN5czMyX3J0X3NpZ3JldHVybgkjIGJyYW5jaCB0byBzeXMzMl9zaWdyZXR1cm4KICNlbmRpZgogCiBzeXNfc2lnYWx0c3RhY2tfZ2x1ZToKLSAgICAgICAgbGEgICAgICAlcjQsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCi0gICAgICAgIGpnICAgICAgc3lzX3NpZ2FsdHN0YWNrICAgICAgICMgYnJhbmNoIHRvIHN5c19zaWdyZXR1cm4KKwlsYQklcjQsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzIGFzIHBhcmFtZXRlcgorCWpnCXN5c19zaWdhbHRzdGFjayAJIyBicmFuY2ggdG8gc3lzX3NpZ3JldHVybgogCiAjaWZkZWYgQ09ORklHX0NPTVBBVAogc3lzMzJfc2lnYWx0c3RhY2tfZ2x1ZToKLSAgICAgICAgbGEgICAgICAlcjQsU1BfUFRSRUdTKCVyMTUpICAgIyBsb2FkIHB0X3JlZ3MgYXMgcGFyYW1ldGVyCi0gICAgICAgIGpnICAgICAgc3lzMzJfc2lnYWx0c3RhY2tfd3JhcHBlciAjIGJyYW5jaCB0byBzeXNfc2lncmV0dXJuCisJbGEJJXI0LFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncyBhcyBwYXJhbWV0ZXIKKwlqZwlzeXMzMl9zaWdhbHRzdGFja193cmFwcGVyICMgYnJhbmNoIHRvIHN5c19zaWdyZXR1cm4KICNlbmRpZgogCiAvKgogICogUHJvZ3JhbSBjaGVjayBoYW5kbGVyIHJvdXRpbmUKICAqLwogCi0gICAgICAgIC5nbG9ibCAgcGdtX2NoZWNrX2hhbmRsZXIKKwkuZ2xvYmwJcGdtX2NoZWNrX2hhbmRsZXIKIHBnbV9jaGVja19oYW5kbGVyOgogLyoKICAqIEZpcnN0IHdlIG5lZWQgdG8gY2hlY2sgZm9yIGEgc3BlY2lhbCBjYXNlOgpAQCAtNDY1LDggKzQ2NCw4IEBACiAgKi8KIAlTVE9SRV9USU1FUiBfX0xDX1NZTkNfRU5URVJfVElNRVIKIAlTQVZFX0FMTF9CQVNFIF9fTENfU0FWRV9BUkVBCi0gICAgICAgIHRtICAgICAgX19MQ19QR01fSU5UX0NPREUrMSwweDgwICMgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBwZXIgZXhjZXB0aW9uCi0gICAgICAgIGpueiAgICAgcGdtX3BlciAgICAgICAgICAgICAgICAgICMgZ290IHBlciBleGNlcHRpb24gLT4gc3BlY2lhbCBjYXNlCisJdG0JX19MQ19QR01fSU5UX0NPREUrMSwweDgwICMgY2hlY2sgd2hldGhlciB3ZSBnb3QgYSBwZXIgZXhjZXB0aW9uCisJam56CXBnbV9wZXIgCQkgIyBnb3QgcGVyIGV4Y2VwdGlvbiAtPiBzcGVjaWFsIGNhc2UKIAlTQVZFX0FMTF9TWU5DIF9fTENfUEdNX09MRF9QU1csX19MQ19TQVZFX0FSRUEKIAlDUkVBVEVfU1RBQ0tfRlJBTUUgX19MQ19QR01fT0xEX1BTVyxfX0xDX1NBVkVfQVJFQQogI2lmZGVmIENPTkZJR19WSVJUX0NQVV9BQ0NPVU5USU5HCkBAIC00NzgsMjkgKzQ3NywyOSBAQAogcGdtX25vX3Z0aW1lOgogI2VuZGlmCiAJbGcJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0Ci0JbGdmICAgICAlcjMsX19MQ19QR01fSUxDCSAjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQorCWxnZgklcjMsX19MQ19QR01fSUxDCSMgbG9hZCBwcm9ncmFtIGludGVycnVwdGlvbiBjb2RlCiAJbGdoaQklcjgsMHg3ZgogCW5ncgklcjgsJXIzCiBwZ21fZG9fY2FsbDoKLSAgICAgICAgc2xsICAgICAlcjgsMwotICAgICAgICBsYXJsICAgICVyMSxwZ21fY2hlY2tfdGFibGUKLSAgICAgICAgbGcgICAgICAlcjEsMCglcjgsJXIxKQkJICMgbG9hZCBhZGRyZXNzIG9mIGhhbmRsZXIgcm91dGluZQotICAgICAgICBsYSAgICAgICVyMixTUF9QVFJFR1MoJXIxNSkJICMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKKwlzbGwJJXI4LDMKKwlsYXJsCSVyMSxwZ21fY2hlY2tfdGFibGUKKwlsZwklcjEsMCglcjgsJXIxKQkJIyBsb2FkIGFkZHJlc3Mgb2YgaGFuZGxlciByb3V0aW5lCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCiAJbGFybAklcjE0LHN5c2NfcmV0dXJuCi0gICAgICAgIGJyICAgICAgJXIxCQkJICMgYnJhbmNoIHRvIGludGVycnVwdC1oYW5kbGVyCisJYnIJJXIxCQkJIyBicmFuY2ggdG8gaW50ZXJydXB0LWhhbmRsZXIKIAogIwogIyBoYW5kbGUgcGVyIGV4Y2VwdGlvbgogIwogcGdtX3BlcjoKLSAgICAgICAgdG0gICAgICBfX0xDX1BHTV9PTERfUFNXLDB4NDAgICAgIyB0ZXN0IGlmIHBlciBldmVudCByZWNvcmRpbmcgaXMgb24KLSAgICAgICAgam56ICAgICBwZ21fcGVyX3N0ZCAgICAgICAgICAgICAgIyBvaywgbm9ybWFsIHBlciBldmVudCBmcm9tIHVzZXIgc3BhY2UKKwl0bQlfX0xDX1BHTV9PTERfUFNXLDB4NDAJIyB0ZXN0IGlmIHBlciBldmVudCByZWNvcmRpbmcgaXMgb24KKwlqbnoJcGdtX3Blcl9zdGQJCSMgb2ssIG5vcm1hbCBwZXIgZXZlbnQgZnJvbSB1c2VyIHNwYWNlCiAjIG9rIGl0cyBvbmUgb2YgdGhlIHNwZWNpYWwgY2FzZXMsIG5vdyB3ZSBuZWVkIHRvIGZpbmQgb3V0IHdoaWNoIG9uZQotICAgICAgICBjbGMgICAgIF9fTENfUEdNX09MRF9QU1coMTYpLF9fTENfU1ZDX05FV19QU1cKLSAgICAgICAgamUgICAgICBwZ21fc3ZjcGVyCisJY2xjCV9fTENfUEdNX09MRF9QU1coMTYpLF9fTENfU1ZDX05FV19QU1cKKwlqZQlwZ21fc3ZjcGVyCiAjIG5vIGludGVyZXN0aW5nIHNwZWNpYWwgY2FzZSwgaWdub3JlIFBFUiBldmVudAogCWxtZwklcjEyLCVyMTUsX19MQ19TQVZFX0FSRUEKLQlscHN3ZSAgIF9fTENfUEdNX09MRF9QU1cKKwlscHN3ZQlfX0xDX1BHTV9PTERfUFNXCiAKICMKICMgTm9ybWFsIHBlciBleGNlcHRpb24KQEAgLTUyNCw5ICs1MjMsOSBAQAogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWRkcmVzcyg4LCVyMSksX19MQ19QRVJfQUREUkVTUwogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYWNjZXNzX2lkKDEsJXIxKSxfX0xDX1BFUl9BQ0NFU1NfSUQKIAlvaQlfX1RJX2ZsYWdzKzcoJXI5KSxfVElGX1NJTkdMRV9TVEVQICMgc2V0IFRJRl9TSU5HTEVfU1RFUAotCWxnZiAgICAgJXIzLF9fTENfUEdNX0lMQwkgIyBsb2FkIHByb2dyYW0gaW50ZXJydXB0aW9uIGNvZGUKKwlsZ2YJJXIzLF9fTENfUEdNX0lMQwkjIGxvYWQgcHJvZ3JhbSBpbnRlcnJ1cHRpb24gY29kZQogCWxnaGkJJXI4LDB4N2YKLQluZ3IJJXI4LCVyMwkJCSAjIGNsZWFyIHBlci1ldmVudC1iaXQgYW5kIGlsYworCW5ncgklcjgsJXIzCQkJIyBjbGVhciBwZXItZXZlbnQtYml0IGFuZCBpbGMKIAlqZQlzeXNjX3JldHVybgogCWoJcGdtX2RvX2NhbGwKIApAQCAtNTQ0LDcgKzU0Myw3IEBACiAJbXZjCV9fTENfTEFTVF9VUERBVEVfVElNRVIoOCksX19MQ19TWU5DX0VOVEVSX1RJTUVSCiBwZ21fbm9fdnRpbWUzOgogI2VuZGlmCi0JbGxnaCAgICAlcjcsX19MQ19TVkNfSU5UX0NPREUJIyBnZXQgc3ZjIG51bWJlciBmcm9tIGxvd2NvcmUKKwlsbGdoCSVyNyxfX0xDX1NWQ19JTlRfQ09ERQkjIGdldCBzdmMgbnVtYmVyIGZyb20gbG93Y29yZQogCWxnCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCWxnCSVyMSxfX1RJX3Rhc2soJXI5KQogCW12YwlfX1RIUkVBRF9wZXIrX19QRVJfYXRtaWQoMiwlcjEpLF9fTENfUEVSX0FUTUlECkBAIC01NjgsNyArNTY3LDcgQEAKIC8qCiAgKiBJTyBpbnRlcnJ1cHQgaGFuZGxlciByb3V0aW5lCiAgKi8KLSAgICAgICAgLmdsb2JsIGlvX2ludF9oYW5kbGVyCisJLmdsb2JsIGlvX2ludF9oYW5kbGVyCiBpb19pbnRfaGFuZGxlcjoKIAlTVE9SRV9USU1FUiBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCiAJc3RjawlfX0xDX0lOVF9DTE9DSwpAQCAtNTg1LDQyICs1ODQsNDIgQEAKICNlbmRpZgogCWxnCSVyOSxfX0xDX1RIUkVBRF9JTkZPCSMgbG9hZCBwb2ludGVyIHRvIHRocmVhZF9pbmZvIHN0cnVjdAogCVRSQUNFX0lSUVNfT0ZGCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KSAgICAjIGFkZHJlc3Mgb2YgcmVnaXN0ZXItc2F2ZSBhcmVhCi0JYnJhc2wgICAlcjE0LGRvX0lSUSAgICAgICAgICAgICMgY2FsbCBzdGFuZGFyZCBpcnEgaGFuZGxlcgorCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkJIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQorCWJyYXNsCSVyMTQsZG9fSVJRCQkjIGNhbGwgc3RhbmRhcmQgaXJxIGhhbmRsZXIKIAlUUkFDRV9JUlFTX09OCiAKIGlvX3JldHVybjoKLSAgICAgICAgdG0gICAgICBTUF9QU1crMSglcjE1KSwweDAxICAgICMgcmV0dXJuaW5nIHRvIHVzZXIgPworCXRtCVNQX1BTVysxKCVyMTUpLDB4MDEJIyByZXR1cm5pbmcgdG8gdXNlciA/CiAjaWZkZWYgQ09ORklHX1BSRUVNUFQKLQlqbm8gICAgIGlvX3ByZWVtcHQgICAgICAgICAgICAgIyBubyAtPiBjaGVjayBmb3IgcHJlZW1wdGl2ZSBzY2hlZHVsaW5nCisJam5vCWlvX3ByZWVtcHQJCSMgbm8gLT4gY2hlY2sgZm9yIHByZWVtcHRpdmUgc2NoZWR1bGluZwogI2Vsc2UKLSAgICAgICAgam5vICAgICBpb19sZWF2ZSAgICAgICAgICAgICAgICMgbm8tPiBza2lwIHJlc2NoZWQgJiBzaWduYWwKKwlqbm8JaW9fbGVhdmUJCSMgbm8tPiBza2lwIHJlc2NoZWQgJiBzaWduYWwKICNlbmRpZgogCXRtCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfV09SS19JTlQKLQlqbnoJaW9fd29yayAgICAgICAgICAgICAgICAjIHRoZXJlIGlzIHdvcmsgdG8gZG8gKHNpZ25hbHMgZXRjLikKKwlqbnoJaW9fd29yayAJCSMgdGhlcmUgaXMgd29yayB0byBkbyAoc2lnbmFscyBldGMuKQogaW9fbGVhdmU6Ci0gICAgICAgIFJFU1RPUkVfQUxMIF9fTENfUkVUVVJOX1BTVywwCisJUkVTVE9SRV9BTEwgX19MQ19SRVRVUk5fUFNXLDAKIGlvX2RvbmU6CiAKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogaW9fcHJlZW1wdDoKLQlpY20JJXIwLDE1LF9fVElfcHJlY291bnQoJXI5KQkKLQlqbnogICAgIGlvX2xlYXZlCisJaWNtCSVyMCwxNSxfX1RJX3ByZWNvdW50KCVyOSkKKwlqbnoJaW9fbGVhdmUKIAkjIHN3aXRjaCB0byBrZXJuZWwgc3RhY2sKIAlsZwklcjEsU1BfUjE1KCVyMTUpCiAJYWdoaQklcjEsLVNQX1NJWkUKIAltdmMJU1BfUFRSRUdTKF9fUFRfU0laRSwlcjEpLFNQX1BUUkVHUyglcjE1KQotICAgICAgICB4YyAgICAgIF9fU0ZfQkFDS0NIQUlOKDgsJXIxKSxfX1NGX0JBQ0tDSEFJTiglcjEpICMgY2xlYXIgYmFjayBjaGFpbgorCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxKSxfX1NGX0JBQ0tDSEFJTiglcjEpICMgY2xlYXIgYmFjayBjaGFpbgogCWxncgklcjE1LCVyMQogaW9fcmVzdW1lX2xvb3A6CiAJdG0JX19USV9mbGFncys3KCVyOSksX1RJRl9ORUVEX1JFU0NIRUQKIAlqbm8JaW9fbGVhdmUKLQlsYXJsICAgICVyMSwuTGNfcGFjdGl2ZQotCW12YyAgICAgX19USV9wcmVjb3VudCg0LCVyOSksMCglcjEpCi0gICAgICAgIHN0b3NtICAgX19TRl9FTVBUWSglcjE1KSwweDAzICAgIyByZWVuYWJsZSBpbnRlcnJ1cHRzCi0JYnJhc2wgICAlcjE0LHNjaGVkdWxlICAgICAgICAgICMgY2FsbCBzY2hlZHVsZQotICAgICAgICBzdG5zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHhmYyAgICMgZGlzYWJsZSBJL08gYW5kIGV4dC4gaW50ZXJydXB0cwotCXhjICAgICAgX19USV9wcmVjb3VudCg0LCVyOSksX19USV9wcmVjb3VudCglcjkpCisJbGFybAklcjEsLkxjX3BhY3RpdmUKKwltdmMJX19USV9wcmVjb3VudCg0LCVyOSksMCglcjEpCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDAzCSMgcmVlbmFibGUgaW50ZXJydXB0cworCWJyYXNsCSVyMTQsc2NoZWR1bGUJCSMgY2FsbCBzY2hlZHVsZQorCXN0bnNtCV9fU0ZfRU1QVFkoJXIxNSksMHhmYwkjIGRpc2FibGUgSS9PIGFuZCBleHQuIGludGVycnVwdHMKKwl4YwlfX1RJX3ByZWNvdW50KDQsJXI5KSxfX1RJX3ByZWNvdW50KCVyOSkKIAlqCWlvX3Jlc3VtZV9sb29wCiAjZW5kaWYKIApAQCAtNjMxLDcgKzYzMCw3IEBACiAJbGcJJXIxLF9fTENfS0VSTkVMX1NUQUNLCiAJYWdoaQklcjEsLVNQX1NJWkUKIAltdmMJU1BfUFRSRUdTKF9fUFRfU0laRSwlcjEpLFNQX1BUUkVHUyglcjE1KQotICAgICAgICB4YyAgICAgIF9fU0ZfQkFDS0NIQUlOKDgsJXIxKSxfX1NGX0JBQ0tDSEFJTiglcjEpICMgY2xlYXIgYmFjayBjaGFpbgorCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxKSxfX1NGX0JBQ0tDSEFJTiglcjEpICMgY2xlYXIgYmFjayBjaGFpbgogCWxncgklcjE1LCVyMQogIwogIyBPbmUgb2YgdGhlIHdvcmsgYml0cyBpcyBvbi4gRmluZCBvdXQgd2hpY2ggb25lLgpAQCAtNjU2LDExICs2NTUsMTEgQEAKIAogIwogIyBfVElGX05FRURfUkVTQ0hFRCBpcyBzZXQsIGNhbGwgc2NoZWR1bGUKLSMJCi1pb19yZXNjaGVkdWxlOiAgICAgICAgCi0Jc3Rvc20gICBfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCi0JYnJhc2wgICAlcjE0LHNjaGVkdWxlCQkjIGNhbGwgc2NoZWR1bGVyCi0Jc3Ruc20gICBfX1NGX0VNUFRZKCVyMTUpLDB4ZmMJIyBkaXNhYmxlIEkvTyBhbmQgZXh0LiBpbnRlcnJ1cHRzCisjCitpb19yZXNjaGVkdWxlOgorCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKKwlicmFzbAklcjE0LHNjaGVkdWxlCQkjIGNhbGwgc2NoZWR1bGVyCisJc3Ruc20JX19TRl9FTVBUWSglcjE1KSwweGZjCSMgZGlzYWJsZSBJL08gYW5kIGV4dC4gaW50ZXJydXB0cwogCXRtCV9fVElfZmxhZ3MrNyglcjkpLF9USUZfV09SS19JTlQKIAlqeglpb19sZWF2ZQkJIyB0aGVyZSBpcyBubyB3b3JrIHRvIGRvCiAJaglpb193b3JrX2xvb3AKQEAgLTY2OCwxNyArNjY3LDE3IEBACiAjCiAjIF9USUZfU0lHUEVORElORyBvciBfVElGX1JFU1RPUkVfU0lHTUFTSyBpcyBzZXQsIGNhbGwgZG9fc2lnbmFsCiAjCi1pb19zaWdwZW5kaW5nOiAgICAgCi0Jc3Rvc20gICBfX1NGX0VNUFRZKCVyMTUpLDB4MDMJIyByZWVuYWJsZSBpbnRlcnJ1cHRzCi0JbGEgICAgICAlcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCitpb19zaWdwZW5kaW5nOgorCXN0b3NtCV9fU0ZfRU1QVFkoJXIxNSksMHgwMwkjIHJlZW5hYmxlIGludGVycnVwdHMKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgbG9hZCBwdF9yZWdzCiAJYnJhc2wJJXIxNCxkb19zaWduYWwJCSMgY2FsbCBkb19zaWduYWwKLQlzdG5zbSAgIF9fU0ZfRU1QVFkoJXIxNSksMHhmYwkjIGRpc2FibGUgSS9PIGFuZCBleHQuIGludGVycnVwdHMKKwlzdG5zbQlfX1NGX0VNUFRZKCVyMTUpLDB4ZmMJIyBkaXNhYmxlIEkvTyBhbmQgZXh0LiBpbnRlcnJ1cHRzCiAJaglpb193b3JrX2xvb3AKIAogLyoKICAqIEV4dGVybmFsIGludGVycnVwdCBoYW5kbGVyIHJvdXRpbmUKICAqLwotICAgICAgICAuZ2xvYmwgIGV4dF9pbnRfaGFuZGxlcgorCS5nbG9ibAlleHRfaW50X2hhbmRsZXIKIGV4dF9pbnRfaGFuZGxlcjoKIAlTVE9SRV9USU1FUiBfX0xDX0FTWU5DX0VOVEVSX1RJTUVSCiAJc3RjawlfX0xDX0lOVF9DTE9DSwpAQCAtNjk1LDkgKzY5NCw5IEBACiAjZW5kaWYKIAlsZwklcjksX19MQ19USFJFQURfSU5GTwkjIGxvYWQgcG9pbnRlciB0byB0aHJlYWRfaW5mbyBzdHJ1Y3QKIAlUUkFDRV9JUlFTX09GRgotCWxhCSVyMixTUF9QVFJFR1MoJXIxNSkgICAgIyBhZGRyZXNzIG9mIHJlZ2lzdGVyLXNhdmUgYXJlYQotCWxsZ2gJJXIzLF9fTENfRVhUX0lOVF9DT0RFICAjIGdldCBpbnRlcnJ1cHRpb24gY29kZQotCWJyYXNsICAgJXIxNCxkb19leHRpbnQKKwlsYQklcjIsU1BfUFRSRUdTKCVyMTUpCSMgYWRkcmVzcyBvZiByZWdpc3Rlci1zYXZlIGFyZWEKKwlsbGdoCSVyMyxfX0xDX0VYVF9JTlRfQ09ERQkjIGdldCBpbnRlcnJ1cHRpb24gY29kZQorCWJyYXNsCSVyMTQsZG9fZXh0aW50CiAJVFJBQ0VfSVJRU19PTgogCWoJaW9fcmV0dXJuCiAKQEAgLTcwNiwxNCArNzA1LDE0IEBACiAvKgogICogTWFjaGluZSBjaGVjayBoYW5kbGVyIHJvdXRpbmVzCiAgKi8KLSAgICAgICAgLmdsb2JsIG1jY2tfaW50X2hhbmRsZXIKKwkuZ2xvYmwgbWNja19pbnRfaGFuZGxlcgogbWNja19pbnRfaGFuZGxlcjoKIAlsYQklcjEsNDA5NQkJIyByZXZhbGlkYXRlIHIxCiAJc3B0CV9fTENfQ1BVX1RJTUVSX1NBVkVfQVJFQS00MDk1KCVyMSkJIyByZXZhbGlkYXRlIGNwdSB0aW1lcgotICAJbG1nICAgICAlcjAsJXIxNSxfX0xDX0dQUkVHU19TQVZFX0FSRUEtNDA5NSglcjEpIyByZXZhbGlkYXRlIGdwcnMKKwlsbWcJJXIwLCVyMTUsX19MQ19HUFJFR1NfU0FWRV9BUkVBLTQwOTUoJXIxKSMgcmV2YWxpZGF0ZSBncHJzCiAJU0FWRV9BTExfQkFTRSBfX0xDX1NBVkVfQVJFQSs2NAogCWxhCSVyMTIsX19MQ19NQ0tfT0xEX1BTVwotCXRtCV9fTENfTUNDS19DT0RFLDB4ODAgICAgICMgc3lzdGVtIGRhbWFnZT8KKwl0bQlfX0xDX01DQ0tfQ09ERSwweDgwCSMgc3lzdGVtIGRhbWFnZT8KIAlqbwltY2NrX2ludF9tYWluCQkjIHllcyAtPiByZXN0IG9mIG1jY2sgY29kZSBpbnZhbGlkCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKIAlsYQklcjE0LDQwOTUKQEAgLTczNywxOSArNzM2LDE5IEBACiAjZW5kaWYKIAl0bQlfX0xDX01DQ0tfQ09ERSsyLDB4MDkJIyBtd3AgKyBpYSBvZiBvbGQgcHN3IHZhbGlkPwogCWpubwltY2NrX2ludF9tYWluCQkjIG5vIC0+IHNraXAgY2xlYW51cCBjcml0aWNhbAotCXRtICAgICAgX19MQ19NQ0tfT0xEX1BTVysxLDB4MDEgIyB0ZXN0IHByb2JsZW0gc3RhdGUgYml0CisJdG0JX19MQ19NQ0tfT0xEX1BTVysxLDB4MDEgIyB0ZXN0IHByb2JsZW0gc3RhdGUgYml0CiAJam56CW1jY2tfaW50X21haW4JCSMgZnJvbSB1c2VyIC0+IGxvYWQga2VybmVsIHN0YWNrCiAJY2xjCV9fTENfTUNLX09MRF9QU1crOCg4KSxCQVNFRCguTGNyaXRpY2FsX2VuZCkKIAlqaGUJbWNja19pbnRfbWFpbgotCWNsYyAgICAgX19MQ19NQ0tfT0xEX1BTVys4KDgpLEJBU0VEKC5MY3JpdGljYWxfc3RhcnQpCisJY2xjCV9fTENfTUNLX09MRF9QU1crOCg4KSxCQVNFRCguTGNyaXRpY2FsX3N0YXJ0KQogCWpsCW1jY2tfaW50X21haW4KLQlicmFzbCAgICVyMTQsY2xlYW51cF9jcml0aWNhbAorCWJyYXNsCSVyMTQsY2xlYW51cF9jcml0aWNhbAogbWNja19pbnRfbWFpbjoKLQlsZyAgICAgICVyMTQsX19MQ19QQU5JQ19TVEFDSyAgICMgYXJlIHdlIGFscmVhZHkgb24gdGhlIHBhbmljIHN0YWNrPworCWxnCSVyMTQsX19MQ19QQU5JQ19TVEFDSwkjIGFyZSB3ZSBhbHJlYWR5IG9uIHRoZSBwYW5pYyBzdGFjaz8KIAlzbGdyCSVyMTQsJXIxNQogCXNyYWcJJXIxNCwlcjE0LFBBR0VfU0hJRlQKIAlqegkwZgotCWxnICAgICAgJXIxNSxfX0xDX1BBTklDX1NUQUNLICAgIyBsb2FkIHBhbmljIHN0YWNrCisJbGcJJXIxNSxfX0xDX1BBTklDX1NUQUNLCSMgbG9hZCBwYW5pYyBzdGFjawogMDoJQ1JFQVRFX1NUQUNLX0ZSQU1FIF9fTENfTUNLX09MRF9QU1csX19MQ19TQVZFX0FSRUErNjQKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwogCXRtCV9fTENfTUNDS19DT0RFKzIsMHgwOAkjIG13cCBvZiBvbGQgcHN3IHZhbGlkPwpAQCAtNzY0LDcgKzc2Myw3IEBACiAJbGcJJXI5LF9fTENfVEhSRUFEX0lORk8JIyBsb2FkIHBvaW50ZXIgdG8gdGhyZWFkX2luZm8gc3RydWN0CiAJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWJyYXNsCSVyMTQsczM5MF9kb19tYWNoaW5lX2NoZWNrCi0JdG0JU1BfUFNXKzEoJXIxNSksMHgwMSAgICAgIyByZXR1cm5pbmcgdG8gdXNlciA/CisJdG0JU1BfUFNXKzEoJXIxNSksMHgwMQkjIHJldHVybmluZyB0byB1c2VyID8KIAlqbm8JbWNja19yZXR1cm4KIAlsZwklcjEsX19MQ19LRVJORUxfU1RBQ0sJIyBzd2l0Y2ggdG8ga2VybmVsIHN0YWNrCiAJYWdoaQklcjEsLVNQX1NJWkUKQEAgLTc5NCwyOCArNzkzLDI4IEBACiAvKgogICogUmVzdGFydCBpbnRlcnJ1cHRpb24gaGFuZGxlciwga2ljayBzdGFydGVyIGZvciBhZGRpdGlvbmFsIENQVXMKICAqLwotICAgICAgICAuZ2xvYmwgcmVzdGFydF9pbnRfaGFuZGxlcgorCS5nbG9ibCByZXN0YXJ0X2ludF9oYW5kbGVyCiByZXN0YXJ0X2ludF9oYW5kbGVyOgotICAgICAgICBsZyAgICAgICVyMTUsX19MQ19TQVZFX0FSRUErMTIwICMgbG9hZCBrc3AKLSAgICAgICAgbGdoaSAgICAlcjEwLF9fTENfQ1JFR1NfU0FWRV9BUkVBCi0gICAgICAgIGxjdGxnICAgJWMwLCVjMTUsMCglcjEwKSAjIGdldCBuZXcgY3RsIHJlZ3MKLSAgICAgICAgbGdoaSAgICAlcjEwLF9fTENfQVJFR1NfU0FWRV9BUkVBCi0gICAgICAgIGxhbSAgICAgJWEwLCVhMTUsMCglcjEwKQotICAgICAgICBsbWcgICAgICVyNiwlcjE1LF9fU0ZfR1BSUyglcjE1KSAjIGxvYWQgcmVnaXN0ZXJzIGZyb20gY2xvbmUKLSAgICAgICAgc3Rvc20gICBfX1NGX0VNUFRZKCVyMTUpLDB4MDQgICAgIyBub3cgd2UgY2FuIHR1cm4gZGF0IG9uCi0JamcgICAgICBzdGFydF9zZWNvbmRhcnkKKwlsZwklcjE1LF9fTENfU0FWRV9BUkVBKzEyMCAjIGxvYWQga3NwCisJbGdoaQklcjEwLF9fTENfQ1JFR1NfU0FWRV9BUkVBCisJbGN0bGcJJWMwLCVjMTUsMCglcjEwKSAjIGdldCBuZXcgY3RsIHJlZ3MKKwlsZ2hpCSVyMTAsX19MQ19BUkVHU19TQVZFX0FSRUEKKwlsYW0JJWEwLCVhMTUsMCglcjEwKQorCWxtZwklcjYsJXIxNSxfX1NGX0dQUlMoJXIxNSkgIyBsb2FkIHJlZ2lzdGVycyBmcm9tIGNsb25lCisJc3Rvc20JX19TRl9FTVBUWSglcjE1KSwweDA0CSMgbm93IHdlIGNhbiB0dXJuIGRhdCBvbgorCWpnCXN0YXJ0X3NlY29uZGFyeQogI2Vsc2UKIC8qCiAgKiBJZiB3ZSBkbyBub3QgcnVuIHdpdGggU01QIGVuYWJsZWQsIGxldCB0aGUgbmV3IENQVSBjcmFzaCAuLi4KICAqLwotICAgICAgICAuZ2xvYmwgcmVzdGFydF9pbnRfaGFuZGxlcgorCS5nbG9ibCByZXN0YXJ0X2ludF9oYW5kbGVyCiByZXN0YXJ0X2ludF9oYW5kbGVyOgotICAgICAgICBiYXNyICAgICVyMSwwCisJYmFzcgklcjEsMAogcmVzdGFydF9iYXNlOgotICAgICAgICBscHN3ZSAgIHJlc3RhcnRfY3Jhc2gtcmVzdGFydF9iYXNlKCVyMSkKLSAgICAgICAgLmFsaWduIDgKKwlscHN3ZQlyZXN0YXJ0X2NyYXNoLXJlc3RhcnRfYmFzZSglcjEpCisJLmFsaWduIDgKIHJlc3RhcnRfY3Jhc2g6Ci0gICAgICAgIC5sb25nICAweDAwMGEwMDAwLDB4MDAwMDAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4MDAwYTAwMDAsMHgwMDAwMDAwMCwweDAwMDAwMDAwLDB4MDAwMDAwMDAKIHJlc3RhcnRfZ286CiAjZW5kaWYKIApAQCAtODM2LDkgKzgzNSw5IEBACiAJY2hpCSVyMTIsX19MQ19QR01fT0xEX1BTVwogCWplCTBmCiAJbGEJJXIxLF9fTENfU0FWRV9BUkVBKzMyCi0wOgltdmMJU1BfUjEyKDMyLCVyMTUpLDAoJXIxKSAgIyBtb3ZlICVyMTItJXIxNSB0byBzdGFjawotICAgICAgICB4YyAgICAgIF9fU0ZfQkFDS0NIQUlOKDgsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkgIyBjbGVhciBiYWNrIGNoYWluCi0gICAgICAgIGxhICAgICAgJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncworMDoJbXZjCVNQX1IxMigzMiwlcjE1KSwwKCVyMSkJIyBtb3ZlICVyMTItJXIxNSB0byBzdGFjaworCXhjCV9fU0ZfQkFDS0NIQUlOKDgsJXIxNSksX19TRl9CQUNLQ0hBSU4oJXIxNSkgIyBjbGVhciBiYWNrIGNoYWluCisJbGEJJXIyLFNQX1BUUkVHUyglcjE1KQkjIGxvYWQgcHRfcmVncwogCWpnCWtlcm5lbF9zdGFja19vdmVyZmxvdwogI2VuZGlmCiAKQEAgLTk0MSwxMCArOTQwLDEwIEBACiBjbGVhbnVwX3N5c3RlbV9jYWxsX2luc246CiAJLnF1YWQJc3lzY19zYXZlYWxsCiAjaWZkZWYgQ09ORklHX1ZJUlRfQ1BVX0FDQ09VTlRJTkcKLQkucXVhZCAgIHN5c3RlbV9jYWxsCi0JLnF1YWQgICBzeXNjX3Z0aW1lCi0JLnF1YWQgICBzeXNjX3N0aW1lCi0JLnF1YWQgICBzeXNjX3VwZGF0ZQorCS5xdWFkCXN5c3RlbV9jYWxsCisJLnF1YWQJc3lzY192dGltZQorCS5xdWFkCXN5c2Nfc3RpbWUKKwkucXVhZAlzeXNjX3VwZGF0ZQogI2VuZGlmCiAKIGNsZWFudXBfc3lzY19yZXR1cm46CkBAIC0xMDEwLDIxICsxMDA5LDIxIEBACiAvKgogICogSW50ZWdlciBjb25zdGFudHMKICAqLwotICAgICAgICAgICAgICAgLmFsaWduIDQKKwkJLmFsaWduCTQKIC5MY29uc3Q6Ci0uTGNfcGFjdGl2ZTogICAubG9uZyAgUFJFRU1QVF9BQ1RJVkUKLS5MbnJfc3lzY2FsbHM6IC5sb25nICBOUl9zeXNjYWxscwotLkwweDAxMzA6ICAgICAgLnNob3J0IDB4MTMwCi0uTDB4MDE0MDogICAgICAuc2hvcnQgMHgxNDAKLS5MMHgwMTUwOiAgICAgIC5zaG9ydCAweDE1MAotLkwweDAxNjA6ICAgICAgLnNob3J0IDB4MTYwCi0uTDB4MDE3MDogICAgICAuc2hvcnQgMHgxNzAKKy5MY19wYWN0aXZlOgkubG9uZwlQUkVFTVBUX0FDVElWRQorLkxucl9zeXNjYWxsczoJLmxvbmcJTlJfc3lzY2FsbHMKKy5MMHgwMTMwOgkuc2hvcnQJMHgxMzAKKy5MMHgwMTQwOgkuc2hvcnQJMHgxNDAKKy5MMHgwMTUwOgkuc2hvcnQJMHgxNTAKKy5MMHgwMTYwOgkuc2hvcnQJMHgxNjAKKy5MMHgwMTcwOgkuc2hvcnQJMHgxNzAKIC5MY3JpdGljYWxfc3RhcnQ6Ci0gICAgICAgICAgICAgICAucXVhZCAgX19jcml0aWNhbF9zdGFydAorCQkucXVhZAlfX2NyaXRpY2FsX3N0YXJ0CiAuTGNyaXRpY2FsX2VuZDoKLSAgICAgICAgICAgICAgIC5xdWFkICBfX2NyaXRpY2FsX2VuZAorCQkucXVhZAlfX2NyaXRpY2FsX2VuZAogCi0JICAgICAgIC5zZWN0aW9uIC5yb2RhdGEsICJhIgorCQkuc2VjdGlvbiAucm9kYXRhLCAiYSIKICNkZWZpbmUgU1lTQ0FMTChlc2EsZXNhbWUsZW11KQkubG9uZyBlc2FtZQogc3lzX2NhbGxfdGFibGU6CiAjaW5jbHVkZSAic3lzY2FsbHMuUyIKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKaW5kZXggMGYxZGIyNi4uMGNmNTliYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkLlMKQEAgLTM2LDQ0OSArMzYsNDQ5IEBACiAjZW5kaWYKIAogI2lmbmRlZiBDT05GSUdfSVBMCi0gICAgICAgIC5vcmcgICAwCi0gICAgICAgIC5sb25nICAweDAwMDgwMDAwLDB4ODAwMDAwMDArc3RhcnR1cCAgICMgSnVzdCBhIHJlc3RhcnQgUFNXCisJLm9yZyAgIDAKKwkubG9uZyAgMHgwMDA4MDAwMCwweDgwMDAwMDAwK3N0YXJ0dXAJIyBKdXN0IGEgcmVzdGFydCBQU1cKICNlbHNlCiAjaWZkZWYgQ09ORklHX0lQTF9UQVBFCiAjZGVmaW5lIElQTF9CUyAxMDI0Ci0gICAgICAgIC5vcmcgICAwCi0gICAgICAgIC5sb25nICAweDAwMDgwMDAwLDB4ODAwMDAwMDAraXBsc3RhcnQgICMgVGhlIGZpcnN0IDI0IGJ5dGVzIGFyZSBsb2FkZWQKLSAgICAgICAgLmxvbmcgIDB4MjcwMDAwMDAsMHg2MDAwMDAwMSAgICAgICAgICAgIyBieSBpcGwgdG8gYWRkcmVzc2VzIDAtMjMuCi0gICAgICAgIC5sb25nICAweDAyMDAwMDAwLDB4MjAwMDAwMDArSVBMX0JTICAgICMgKGEgUFNXIGFuZCB0d28gQ0NXcykuCi0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAgICAgICAgICAgICMgZXh0ZXJuYWwgb2xkIHBzdwotICAgICAgICAubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwICAgICAgICAgICAjIHN2YyBvbGQgcHN3Ci0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAgICAgICAgICAgICMgcHJvZ3JhbSBjaGVjayBvbGQgcHN3Ci0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAgICAgICAgICAgICMgbWFjaGluZSBjaGVjayBvbGQgcHN3Ci0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAgICAgICAgICAgICMgaW8gb2xkIHBzdwotICAgICAgICAubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwCi0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLSAgICAgICAgLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotICAgICAgICAubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDU4ICAgICAgICAgICAjIGV4dGVybmFsIG5ldyBwc3cKLSAgICAgICAgLmxvbmcgIDB4MDAwYTAwMDAsMHgwMDAwMDA2MCAgICAgICAgICAgIyBzdmMgbmV3IHBzdwotICAgICAgICAubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDY4ICAgICAgICAgICAjIHByb2dyYW0gY2hlY2sgbmV3IHBzdwotICAgICAgICAubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDcwICAgICAgICAgICAjIG1hY2hpbmUgY2hlY2sgbmV3IHBzdwotICAgICAgICAubG9uZyAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5MaW9pbnQgICAjIGlvIG5ldyBwc3cKKwkub3JnICAgMAorCS5sb25nICAweDAwMDgwMDAwLDB4ODAwMDAwMDAraXBsc3RhcnQJIyBUaGUgZmlyc3QgMjQgYnl0ZXMgYXJlIGxvYWRlZAorCS5sb25nICAweDI3MDAwMDAwLDB4NjAwMDAwMDEJCSMgYnkgaXBsIHRvIGFkZHJlc3NlcyAwLTIzLgorCS5sb25nICAweDAyMDAwMDAwLDB4MjAwMDAwMDArSVBMX0JTCSMgKGEgUFNXIGFuZCB0d28gQ0NXcykuCisJLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkJIyBleHRlcm5hbCBvbGQgcHN3CisJLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkJIyBzdmMgb2xkIHBzdworCS5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAJCSMgcHJvZ3JhbSBjaGVjayBvbGQgcHN3CisJLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAkJIyBtYWNoaW5lIGNoZWNrIG9sZCBwc3cKKwkubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwCQkjIGlvIG9sZCBwc3cKKwkubG9uZyAgMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCS5sb25nICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDU4CQkjIGV4dGVybmFsIG5ldyBwc3cKKwkubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDYwCQkjIHN2YyBuZXcgcHN3CisJLmxvbmcgIDB4MDAwYTAwMDAsMHgwMDAwMDA2OAkJIyBwcm9ncmFtIGNoZWNrIG5ldyBwc3cKKwkubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDcwCQkjIG1hY2hpbmUgY2hlY2sgbmV3IHBzdworCS5sb25nICAweDAwMDgwMDAwLDB4ODAwMDAwMDArLkxpb2ludAkjIGlvIG5ldyBwc3cKIAotICAgICAgICAub3JnICAgMHgxMDAKKwkub3JnICAgMHgxMDAKICMKICMgc3Vicm91dGluZSBmb3IgbG9hZGluZyBmcm9tIHRhcGUKLSMgUGFyYW10ZXJzOgkKKyMgUGFyYW10ZXJzOgogIyAgUjEgPSBkZXZpY2UgbnVtYmVyCiAjICBSMiA9IGxvYWQgYWRkcmVzcwotLkxsb2FkZXI6CQotICAgICAgICBzdCAgICAlcjE0LC5MbGRyZXQKLSAgICAgICAgbGEgICAgJXIzLC5Mb3JicmVhZCAgICAgICAgICAgICAgICAgICAgIyByMyA9IGFkZHJlc3Mgb2Ygb3JiIAotCWxhICAgICVyNSwuTGlyYiAgICAgICAgICAgICAgICAgICAgICAgICMgcjUgPSBhZGRyZXNzIG9mIGlyYgotICAgICAgICBzdCAgICAlcjIsLkxjY3dyZWFkKzQgICAgICAgICAgICAgICAgICAjIGluaXRpYWxpemUgQ0NXIGRhdGEgYWRkcmVzc2VzCi0gICAgICAgIGxjdGwgICVjNiwlYzYsLkxjcjYgICAgICAgICAgICAgICAKLSAgICAgICAgc2xyICAgJXIyLCVyMgorLkxsb2FkZXI6CisJc3QJJXIxNCwuTGxkcmV0CisJbGEJJXIzLC5Mb3JicmVhZAkJIyByMyA9IGFkZHJlc3Mgb2Ygb3JiCisJbGEJJXI1LC5MaXJiCQkjIHI1ID0gYWRkcmVzcyBvZiBpcmIKKwlzdAklcjIsLkxjY3dyZWFkKzQgCSMgaW5pdGlhbGl6ZSBDQ1cgZGF0YSBhZGRyZXNzZXMKKwlsY3RsCSVjNiwlYzYsLkxjcjYKKwlzbHIJJXIyLCVyMgogLkxsZGxwOgotICAgICAgICBsYSAgICAlcjYsMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIDMgcmV0cmllcworCWxhCSVyNiwzCQkJIyAzIHJldHJpZXMKIC5Mc3NjaDoKLSAgICAgICAgc3NjaCAgMCglcjMpICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBsb2FkIGNodW5rIG9mIElQTF9CUyBieXRlcwotICAgICAgICBibnogICAuTGxkZXJyCisJc3NjaAkwKCVyMykJCQkjIGxvYWQgY2h1bmsgb2YgSVBMX0JTIGJ5dGVzCisJYm56CS5MbGRlcnIKIC5MdzRlbmQ6Ci0gICAgICAgIGJhcyAgICVyMTQsLkx3YWl0NGlvCi0gICAgICAgIHRtICAgIDgoJXI1KSwweDgyICAgICAgICAgICAgICAgICAgICAgICMgZG8gd2UgaGF2ZSBhIHByb2JsZW0gPwotICAgICAgICBibnogICAuTHJlY292Ci0gICAgICAgIHNsciAgICVyNywlcjcKLSAgICAgICAgaWNtICAgJXI3LDMsMTAoJXI1KSAgICAgICAgICAgICAgICAgICAgIyBnZXQgcmVzaWR1YWwgY291bnQKLSAgICAgICAgbGNyICAgJXI3LCVyNwotICAgICAgICBsYSAgICAlcjcsSVBMX0JTKCVyNykgICAgICAgICAgICAgICAgICAjIElQTF9CUy1yZXNpZHVhbD0jYnl0ZXMgcmVhZAotICAgICAgICBhciAgICAlcjIsJXI3ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZCB0byB0b3RhbCBzaXplCi0gICAgICAgIHRtICAgIDgoJXI1KSwweDAxICAgICAgICAgICAgICAgICAgICAgICMgZm91bmQgYSB0YXBlIG1hcmsgPwotICAgICAgICBibnogICAuTGRvbmUKLSAgICAgICAgbCAgICAgJXIwLC5MY2N3cmVhZCs0ICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgQ0NXIGRhdGEgYWRkcmVzc2VzCi0gICAgICAgIGFyICAgICVyMCwlcjcKLSAgICAgICAgc3QgICAgJXIwLC5MY2N3cmVhZCs0ICAgICAgICAgICAgICAgIAotICAgICAgICBiICAgICAuTGxkbHAKKwliYXMJJXIxNCwuTHdhaXQ0aW8KKwl0bQk4KCVyNSksMHg4MgkJIyBkbyB3ZSBoYXZlIGEgcHJvYmxlbSA/CisJYm56CS5McmVjb3YKKwlzbHIJJXI3LCVyNworCWljbQklcjcsMywxMCglcjUpCQkjIGdldCByZXNpZHVhbCBjb3VudAorCWxjcgklcjcsJXI3CisJbGEJJXI3LElQTF9CUyglcjcpIAkjIElQTF9CUy1yZXNpZHVhbD0jYnl0ZXMgcmVhZAorCWFyCSVyMiwlcjcgCQkjIGFkZCB0byB0b3RhbCBzaXplCisJdG0JOCglcjUpLDB4MDEJCSMgZm91bmQgYSB0YXBlIG1hcmsgPworCWJuegkuTGRvbmUKKwlsCSVyMCwuTGNjd3JlYWQrNCAJIyB1cGRhdGUgQ0NXIGRhdGEgYWRkcmVzc2VzCisJYXIJJXIwLCVyNworCXN0CSVyMCwuTGNjd3JlYWQrNAorCWIJLkxsZGxwCiAuTGRvbmU6Ci0gICAgICAgIGwgICAgICVyMTQsLkxsZHJldAotICAgICAgICBiciAgICAlcjE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHIyIGNvbnRhaW5zIHRoZSB0b3RhbCBzaXplCisJbAklcjE0LC5MbGRyZXQKKwlicgklcjE0CQkJIyByMiBjb250YWlucyB0aGUgdG90YWwgc2l6ZQogLkxyZWNvdjoKLSAgICAgICAgYmFzICAgJXIxNCwuTHNlbnNlICAgICAgICAgICAgICAgICAgICAgIyBkbyB0aGUgc2Vuc2luZwotICAgICAgICBiY3QgICAlcjYsLkxzc2NoICAgICAgICAgICAgICAgICAgICAgICAjIGRlYy4gcmV0cnkgY291bnQgJiBicmFuY2gKLSAgICAgICAgYiAgICAgLkxsZGVycgorCWJhcwklcjE0LC5Mc2Vuc2UJCSMgZG8gdGhlIHNlbnNpbmcKKwliY3QJJXI2LC5Mc3NjaAkJIyBkZWMuIHJldHJ5IGNvdW50ICYgYnJhbmNoCisJYgkuTGxkZXJyCiAjCiAjIFNlbnNlIHN1YnJvdXRpbmUKICMKIC5Mc2Vuc2U6Ci0gICAgICAgIHN0ICAgICVyMTQsLkxzbnNyZXQKLSAgICAgICAgbGEgICAgJXI3LC5Mb3Jic2Vuc2UgICAgICAgICAgICAgIAotICAgICAgICBzc2NoICAwKCVyNykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHN0YXJ0IHNlbnNlIGNvbW1hbmQKLSAgICAgICAgYm56ICAgLkxsZGVycgotICAgICAgICBiYXMgICAlcjE0LC5Md2FpdDRpbwotICAgICAgICBsICAgICAlcjE0LC5Mc25zcmV0Ci0gICAgICAgIHRtICAgIDgoJXI1KSwweDgyICAgICAgICAgICAgICAgICAgICAgICMgZG8gd2UgaGF2ZSBhIHByb2JsZW0gPwotICAgICAgICBibnogICAuTGxkZXJyCi0gICAgICAgIGJyICAgICVyMTQKKwlzdAklcjE0LC5Mc25zcmV0CisJbGEJJXI3LC5Mb3Jic2Vuc2UKKwlzc2NoCTAoJXI3KQkJCSMgc3RhcnQgc2Vuc2UgY29tbWFuZAorCWJuegkuTGxkZXJyCisJYmFzCSVyMTQsLkx3YWl0NGlvCisJbAklcjE0LC5Mc25zcmV0CisJdG0JOCglcjUpLDB4ODIJCSMgZG8gd2UgaGF2ZSBhIHByb2JsZW0gPworCWJuegkuTGxkZXJyCisJYnIJJXIxNAogIwogIyBXYWl0IGZvciBpbnRlcnJ1cHQgc3Vicm91dGluZQogIwogLkx3YWl0NGlvOgotICAgICAgICBscHN3ICAuTHdhaXRwc3cgICAgICAgICAgICAgICAgIAorCWxwc3cJLkx3YWl0cHN3CiAuTGlvaW50OgotICAgICAgICBjICAgICAlcjEsMHhiOCAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbXBhcmUgc3ViY2hhbm5lbCBudW1iZXIKLSAgICAgICAgYm5lICAgLkx3YWl0NGlvCi0gICAgICAgIHRzY2ggIDAoJXI1KQotICAgICAgICBzbHIgICAlcjAsJXIwCi0gICAgICAgIHRtICAgIDgoJXI1KSwweDgyICAgICAgICAgICAgICAgICAgICAgICMgZG8gd2UgaGF2ZSBhIHByb2JsZW0gPwotICAgICAgICBibnogICAuTHd0ZXhpdAotICAgICAgICB0bSAgICA4KCVyNSksMHgwNCAgICAgICAgICAgICAgICAgICAgICAjIGdvdCBkZXZpY2UgZW5kID8KLSAgICAgICAgYnogICAgLkx3YWl0NGlvCisJYwklcjEsMHhiOAkJIyBjb21wYXJlIHN1YmNoYW5uZWwgbnVtYmVyCisJYm5lCS5Md2FpdDRpbworCXRzY2gJMCglcjUpCisJc2xyCSVyMCwlcjAKKwl0bQk4KCVyNSksMHg4MgkJIyBkbyB3ZSBoYXZlIGEgcHJvYmxlbSA/CisJYm56CS5Md3RleGl0CisJdG0JOCglcjUpLDB4MDQJCSMgZ290IGRldmljZSBlbmQgPworCWJ6CS5Md2FpdDRpbwogLkx3dGV4aXQ6Ci0gICAgICAgIGJyICAgICVyMTQKKwlicgklcjE0CiAuTGxkZXJyOgotICAgICAgICBscHN3ICAuTGNyYXNoICAgICAgICAgICAgICAKKwlscHN3CS5MY3Jhc2gKIAotICAgICAgICAuYWxpZ24gOAorCS5hbGlnbgk4CiAuTG9yYnJlYWQ6Ci0JLmxvbmcgIDB4MDAwMDAwMDAsMHgwMDgwZmYwMCwuTGNjd3JlYWQKLSAgICAgICAgLmFsaWduIDgKKwkubG9uZwkweDAwMDAwMDAwLDB4MDA4MGZmMDAsLkxjY3dyZWFkCisJLmFsaWduCTgKIC5Mb3Jic2Vuc2U6Ci0gICAgICAgIC5sb25nICAweDAwMDAwMDAwLDB4MDA4MGZmMDAsLkxjY3dzZW5zZQotICAgICAgICAuYWxpZ24gOAorCS5sb25nCTB4MDAwMDAwMDAsMHgwMDgwZmYwMCwuTGNjd3NlbnNlCisJLmFsaWduCTgKIC5MY2N3cmVhZDoKLSAgICAgICAgLmxvbmcgIDB4MDIyMDAwMDArSVBMX0JTLDB4MDAwMDAwMDAKKwkubG9uZwkweDAyMjAwMDAwK0lQTF9CUywweDAwMDAwMDAwCiAuTGNjd3NlbnNlOgotICAgICAgICAubG9uZyAgMHgwNDIwMDAwMSwweDAwMDAwMDAwCisJLmxvbmcJMHgwNDIwMDAwMSwweDAwMDAwMDAwCiAuTHdhaXRwc3c6Ci0JLmxvbmcgIDB4MDIwYTAwMDAsMHg4MDAwMDAwMCsuTGlvaW50CisJLmxvbmcJMHgwMjBhMDAwMCwweDgwMDAwMDAwKy5MaW9pbnQKIAotLkxpcmI6CS5sb25nICAwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCi0uTGNyNjogIC5sb25nICAweGZmMDAwMDAwCi0gICAgICAgIC5hbGlnbiA4Ci0uTGNyYXNoOi5sb25nICAweDAwMGEwMDAwLDB4MDAwMDAwMDAKLS5MbGRyZXQ6LmxvbmcgIDAKKy5MaXJiOgkubG9uZwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCisuTGNyNjoJLmxvbmcJMHhmZjAwMDAwMAorCS5hbGlnbgk4CisuTGNyYXNoOi5sb25nCTB4MDAwYTAwMDAsMHgwMDAwMDAwMAorLkxsZHJldDoubG9uZwkwCiAuTHNuc3JldDogLmxvbmcgMAotI2VuZGlmICAvKiBDT05GSUdfSVBMX1RBUEUgKi8KKyNlbmRpZgkvKiBDT05GSUdfSVBMX1RBUEUgKi8KIAogI2lmZGVmIENPTkZJR19JUExfVk0KLSNkZWZpbmUgSVBMX0JTIDB4NzMwCi0gICAgICAgIC5vcmcgICAwCi0gICAgICAgIC5sb25nICAweDAwMDgwMDAwLDB4ODAwMDAwMDAraXBsc3RhcnQgICMgVGhlIGZpcnN0IDI0IGJ5dGVzIGFyZSBsb2FkZWQKLSAgICAgICAgLmxvbmcgIDB4MDIwMDAwMTgsMHg2MDAwMDA1MCAgICAgICAgICAgIyBieSBpcGwgdG8gYWRkcmVzc2VzIDAtMjMuCi0gICAgICAgIC5sb25nICAweDAyMDAwMDY4LDB4NjAwMDAwNTAgICAgICAgICAgICMgKGEgUFNXIGFuZCB0d28gQ0NXcykuCi0gICAgICAgIC5maWxsICA4MC0yNCwxLDB4NDAgICAgICAgICAgICAgICAgICAgICMgYnl0ZXMgMjQtNzkgYXJlIGRpc2NhcmRlZCAhIQotICAgICAgICAubG9uZyAgMHgwMjAwMDBmMCwweDYwMDAwMDUwICAgICAgICAgICAjIFRoZSBuZXh0IDE2MCBieXRlIGFyZSBsb2FkZWQKLSAgICAgICAgLmxvbmcgIDB4MDIwMDAxNDAsMHg2MDAwMDA1MCAgICAgICAgICAgIyB0byBhZGRyZXNzZXMgMHgxOC0weGI3Ci0gICAgICAgIC5sb25nICAweDAyMDAwMTkwLDB4NjAwMDAwNTAgICAgICAgICAgICMgVGhleSBmb3JtIHRoZSBjb250aW51YXRpb24KLSAgICAgICAgLmxvbmcgIDB4MDIwMDAxZTAsMHg2MDAwMDA1MCAgICAgICAgICAgIyBvZiB0aGUgQ0NXIHByb2dyYW0gc3RhcnRlZAotICAgICAgICAubG9uZyAgMHgwMjAwMDIzMCwweDYwMDAwMDUwICAgICAgICAgICAjIGJ5IGlwbCBhbmQgbG9hZCB0aGUgcmFuZ2UKLSAgICAgICAgLmxvbmcgIDB4MDIwMDAyODAsMHg2MDAwMDA1MCAgICAgICAgICAgIyAweDBmMC0weDczMCBmcm9tIHRoZSBpbWFnZQotICAgICAgICAubG9uZyAgMHgwMjAwMDJkMCwweDYwMDAwMDUwICAgICAgICAgICAjIHRvIHRoZSByYW5nZSAweDBmMC0weDczMAotICAgICAgICAubG9uZyAgMHgwMjAwMDMyMCwweDYwMDAwMDUwICAgICAgICAgICAjIGluIG1lbW9yeS4gQXQgdGhlIGVuZCBvZgotICAgICAgICAubG9uZyAgMHgwMjAwMDM3MCwweDYwMDAwMDUwICAgICAgICAgICAjIHRoZSBjaGFubmVsIHByb2dyYW0gdGhlIFBTVwotICAgICAgICAubG9uZyAgMHgwMjAwMDNjMCwweDYwMDAwMDUwICAgICAgICAgICAjIGF0IGxvY2F0aW9uIDAgaXMgbG9hZGVkLgotICAgICAgICAubG9uZyAgMHgwMjAwMDQxMCwweDYwMDAwMDUwICAgICAgICAgICAjIEluaXRpYWwgcHJvY2Vzc2luZyBzdGFydHMKLSAgICAgICAgLmxvbmcgIDB4MDIwMDA0NjAsMHg2MDAwMDA1MCAgICAgICAgICAgIyBhdCAweGYwID0gaXBsc3RhcnQuCi0gICAgICAgIC5sb25nICAweDAyMDAwNGIwLDB4NjAwMDAwNTAKLSAgICAgICAgLmxvbmcgIDB4MDIwMDA1MDAsMHg2MDAwMDA1MAotICAgICAgICAubG9uZyAgMHgwMjAwMDU1MCwweDYwMDAwMDUwCi0gICAgICAgIC5sb25nICAweDAyMDAwNWEwLDB4NjAwMDAwNTAKLSAgICAgICAgLmxvbmcgIDB4MDIwMDA1ZjAsMHg2MDAwMDA1MAotICAgICAgICAubG9uZyAgMHgwMjAwMDY0MCwweDYwMDAwMDUwCi0gICAgICAgIC5sb25nICAweDAyMDAwNjkwLDB4NjAwMDAwNTAKLSAgICAgICAgLmxvbmcgIDB4MDIwMDA2ZTAsMHgyMDAwMDA1MAorI2RlZmluZSBJUExfQlMJMHg3MzAKKwkub3JnCTAKKwkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAraXBsc3RhcnQJIyBUaGUgZmlyc3QgMjQgYnl0ZXMgYXJlIGxvYWRlZAorCS5sb25nCTB4MDIwMDAwMTgsMHg2MDAwMDA1MAkJIyBieSBpcGwgdG8gYWRkcmVzc2VzIDAtMjMuCisJLmxvbmcJMHgwMjAwMDA2OCwweDYwMDAwMDUwCQkjIChhIFBTVyBhbmQgdHdvIENDV3MpLgorCS5maWxsCTgwLTI0LDEsMHg0MAkJCSMgYnl0ZXMgMjQtNzkgYXJlIGRpc2NhcmRlZCAhIQorCS5sb25nCTB4MDIwMDAwZjAsMHg2MDAwMDA1MAkJIyBUaGUgbmV4dCAxNjAgYnl0ZSBhcmUgbG9hZGVkCisJLmxvbmcJMHgwMjAwMDE0MCwweDYwMDAwMDUwCQkjIHRvIGFkZHJlc3NlcyAweDE4LTB4YjcKKwkubG9uZwkweDAyMDAwMTkwLDB4NjAwMDAwNTAJCSMgVGhleSBmb3JtIHRoZSBjb250aW51YXRpb24KKwkubG9uZwkweDAyMDAwMWUwLDB4NjAwMDAwNTAJCSMgb2YgdGhlIENDVyBwcm9ncmFtIHN0YXJ0ZWQKKwkubG9uZwkweDAyMDAwMjMwLDB4NjAwMDAwNTAJCSMgYnkgaXBsIGFuZCBsb2FkIHRoZSByYW5nZQorCS5sb25nCTB4MDIwMDAyODAsMHg2MDAwMDA1MAkJIyAweDBmMC0weDczMCBmcm9tIHRoZSBpbWFnZQorCS5sb25nCTB4MDIwMDAyZDAsMHg2MDAwMDA1MAkJIyB0byB0aGUgcmFuZ2UgMHgwZjAtMHg3MzAKKwkubG9uZwkweDAyMDAwMzIwLDB4NjAwMDAwNTAJCSMgaW4gbWVtb3J5LiBBdCB0aGUgZW5kIG9mCisJLmxvbmcJMHgwMjAwMDM3MCwweDYwMDAwMDUwCQkjIHRoZSBjaGFubmVsIHByb2dyYW0gdGhlIFBTVworCS5sb25nCTB4MDIwMDAzYzAsMHg2MDAwMDA1MAkJIyBhdCBsb2NhdGlvbiAwIGlzIGxvYWRlZC4KKwkubG9uZwkweDAyMDAwNDEwLDB4NjAwMDAwNTAJCSMgSW5pdGlhbCBwcm9jZXNzaW5nIHN0YXJ0cworCS5sb25nCTB4MDIwMDA0NjAsMHg2MDAwMDA1MAkJIyBhdCAweGYwID0gaXBsc3RhcnQuCisJLmxvbmcJMHgwMjAwMDRiMCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDUwMCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDU1MCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDVhMCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDVmMCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDY0MCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDY5MCwweDYwMDAwMDUwCisJLmxvbmcJMHgwMjAwMDZlMCwweDIwMDAwMDUwCiAKLSAgICAgICAgLm9yZyAgIDB4ZjAKKwkub3JnCTB4ZjAKICMKICMgc3Vicm91dGluZSBmb3IgbG9hZGluZyBjYXJkcyBmcm9tIHRoZSByZWFkZXIKICMKLS5MbG9hZGVyOgkKLQlsYSAgICAlcjMsLkxvcmIgICAgICAgICAgICAgICAgICAgICAgICAjIHIyID0gYWRkcmVzcyBvZiBvcmIgaW50byByMgotCWxhICAgICVyNSwuTGlyYiAgICAgICAgICAgICAgICAgICAgICAgICMgcjQgPSBhZGRyZXNzIG9mIGlyYgotICAgICAgICBsYSAgICAlcjYsLkxjY3dzICAgICAgICAgICAgICAKLSAgICAgICAgbGEgICAgJXI3LDIwCisuTGxvYWRlcjoKKwlsYQklcjMsLkxvcmIJCSMgcjIgPSBhZGRyZXNzIG9mIG9yYiBpbnRvIHIyCisJbGEJJXI1LC5MaXJiCQkjIHI0ID0gYWRkcmVzcyBvZiBpcmIKKwlsYQklcjYsLkxjY3dzCisJbGEJJXI3LDIwCiAuTGluaXQ6Ci0gICAgICAgIHN0ICAgICVyMiw0KCVyNikgICAgICAgICAgICAgICAgICAgICAgICMgaW5pdGlhbGl6ZSBDQ1cgZGF0YSBhZGRyZXNzZXMKLSAgICAgICAgbGEgICAgJXIyLDB4NTAoJXIyKQotICAgICAgICBsYSAgICAlcjYsOCglcjYpCi0gICAgICAgIGJjdCAgIDcsLkxpbml0CisJc3QJJXIyLDQoJXI2KQkJIyBpbml0aWFsaXplIENDVyBkYXRhIGFkZHJlc3NlcworCWxhCSVyMiwweDUwKCVyMikKKwlsYQklcjYsOCglcjYpCisJYmN0CTcsLkxpbml0CiAKLSAgICAgICAgbGN0bCAgJWM2LCVjNiwuTGNyNiAgICAgICAgICAgICAgICAgICAgIyBzZXQgSU8gc3ViY2xhc3MgbWFzawotCXNsciAgICVyMiwlcjIKKwlsY3RsCSVjNiwlYzYsLkxjcjYJCSMgc2V0IElPIHN1YmNsYXNzIG1hc2sKKwlzbHIJJXIyLCVyMgogLkxsZGxwOgotICAgICAgICBzc2NoICAwKCVyMykgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGxvYWQgY2h1bmsgb2YgMTYwMCBieXRlcwotICAgICAgICBibnogICAuTGxkZXJyCisJc3NjaAkwKCVyMykJCQkjIGxvYWQgY2h1bmsgb2YgMTYwMCBieXRlcworCWJuegkuTGxkZXJyCiAuTHdhaXQ0aXJxOgotICAgICAgICBtdmMgICAweDc4KDgpLC5MbmV3cHN3ICAgICAgICAgICAgICAgICAjIHNldCB1cCBJTyBpbnRlcnJ1cHQgcHN3Ci0gICAgICAgIGxwc3cgIC5Md2FpdHBzdyAgICAgICAgICAgICAgCisJbXZjCTB4NzgoOCksLkxuZXdwc3cJIyBzZXQgdXAgSU8gaW50ZXJydXB0IHBzdworCWxwc3cJLkx3YWl0cHN3CiAuTGlvaW50OgotICAgICAgICBjICAgICAlcjEsMHhiOCAgICAgICAgICAgICAgICAgICAgICAgICAjIGNvbXBhcmUgc3ViY2hhbm5lbCBudW1iZXIKLQlibmUgICAuTHdhaXQ0aXJxCi0JdHNjaCAgMCglcjUpCisJYwklcjEsMHhiOAkJIyBjb21wYXJlIHN1YmNoYW5uZWwgbnVtYmVyCisJYm5lCS5Md2FpdDRpcnEKKwl0c2NoCTAoJXI1KQogCi0Jc2xyICAgJXIwLCVyMAotCWljICAgICVyMCw4KCVyNSkgICAgICAgICAgICAgICAgICAgICAgICMgZ2V0IGRldmljZSBzdGF0dXMKLQljaGkgICAlcjAsOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5uZWwgZW5kID8KLQliZSAgICAuTGNvbnQKLQljaGkgICAlcjAsMTIgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGNoYW5uZWwgZW5kICsgZGV2aWNlIGVuZCA/Ci0JYmUgICAgLkxjb250CisJc2xyCSVyMCwlcjAKKwlpYwklcjAsOCglcjUpCQkjIGdldCBkZXZpY2Ugc3RhdHVzCisJY2hpCSVyMCw4CQkJIyBjaGFubmVsIGVuZCA/CisJYmUJLkxjb250CisJY2hpCSVyMCwxMgkJCSMgY2hhbm5lbCBlbmQgKyBkZXZpY2UgZW5kID8KKwliZQkuTGNvbnQKIAotICAgICAgICBsICAgICAlcjAsNCglcjUpCi0gICAgICAgIHMgICAgICVyMCw4KCVyMykgICAgICAgICAgICAgICAgICAgICAgICMgcjAvOCA9IG51bWJlciBvZiBjY3dzIGV4ZWN1dGVkCi0gICAgICAgIG1oaSAgICVyMCwxMCAgICAgICAgICAgICAgICAgICAgICAgICAgICMgKjEwID0gbnVtYmVyIG9mIGJ5dGVzIGluIGNjd3MKLSAgICAgICAgbGggICAgJXIzLDEwKCVyNSkgICAgICAgICAgICAgICAgICAgICAgIyBnZXQgcmVzaWR1YWwgY291bnQKLSAgICAgICAgc3IgICAgJXIwLCVyMyAgICAgICAgICAgICAgICAgICAgICAgICAgIyAjY2N3cyo4MC1yZXNpZHVhbD0jYnl0ZXMgcmVhZAotCWFyICAgICVyMiwlcjAKLQkKLSAgICAgICAgYnIgICAgJXIxNCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByMiBjb250YWlucyB0aGUgdG90YWwgc2l6ZQorCWwJJXIwLDQoJXI1KQorCXMJJXIwLDgoJXIzKQkJIyByMC84ID0gbnVtYmVyIG9mIGNjd3MgZXhlY3V0ZWQKKwltaGkJJXIwLDEwCQkJIyAqMTAgPSBudW1iZXIgb2YgYnl0ZXMgaW4gY2N3cworCWxoCSVyMywxMCglcjUpCQkjIGdldCByZXNpZHVhbCBjb3VudAorCXNyCSVyMCwlcjMgCQkjICNjY3dzKjgwLXJlc2lkdWFsPSNieXRlcyByZWFkCisJYXIJJXIyLCVyMAorCisJYnIJJXIxNAkJCSMgcjIgY29udGFpbnMgdGhlIHRvdGFsIHNpemUKIAogLkxjb250OgotCWFoaSAgICVyMiwweDY0MCAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkIDB4NjQwIHRvIHRvdGFsIHNpemUKLSAgICAgICAgbGEgICAgJXI2LC5MY2N3cyAgICAgICAgICAgICAKLSAgICAgICAgbGEgICAgJXI3LDIwCisJYWhpCSVyMiwweDY0MAkJIyBhZGQgMHg2NDAgdG8gdG90YWwgc2l6ZQorCWxhCSVyNiwuTGNjd3MKKwlsYQklcjcsMjAKIC5MaW5jcjoKLSAgICAgICAgbCAgICAgJXIwLDQoJXI2KSAgICAgICAgICAgICAgICAgICAgICAgIyB1cGRhdGUgQ0NXIGRhdGEgYWRkcmVzc2VzCi0gICAgICAgIGFoaSAgICVyMCwweDY0MAotICAgICAgICBzdCAgICAlcjAsNCglcjYpCi0gICAgICAgIGFoaSAgICVyNiw4Ci0gICAgICAgIGJjdCAgIDcsLkxpbmNyCisJbAklcjAsNCglcjYpCQkjIHVwZGF0ZSBDQ1cgZGF0YSBhZGRyZXNzZXMKKwlhaGkJJXIwLDB4NjQwCisJc3QJJXIwLDQoJXI2KQorCWFoaQklcjYsOAorCWJjdAk3LC5MaW5jcgogCi0gICAgICAgIGIgICAgIC5MbGRscAorCWIJLkxsZGxwCiAuTGxkZXJyOgotICAgICAgICBscHN3ICAuTGNyYXNoICAgICAgICAgICAgICAKKwlscHN3CS5MY3Jhc2gKIAotICAgICAgICAuYWxpZ24gOAotLkxvcmI6CS5sb25nICAweDAwMDAwMDAwLDB4MDA4MGZmMDAsLkxjY3dzCi0uTGlyYjoJLmxvbmcgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKLS5MY3I2OiAgLmxvbmcgIDB4ZmYwMDAwMDAKLS5MbG9hZHA6LmxvbmcgIDAsMAotICAgICAgICAuYWxpZ24gOAotLkxjcmFzaDoubG9uZyAgMHgwMDBhMDAwMCwweDAwMDAwMDAwCisJLmFsaWduCTgKKy5Mb3JiOgkubG9uZwkweDAwMDAwMDAwLDB4MDA4MGZmMDAsLkxjY3dzCisuTGlyYjoJLmxvbmcJMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMAorLkxjcjY6CS5sb25nCTB4ZmYwMDAwMDAKKy5MbG9hZHA6LmxvbmcJMCwwCisJLmFsaWduCTgKKy5MY3Jhc2g6LmxvbmcJMHgwMDBhMDAwMCwweDAwMDAwMDAwCiAuTG5ld3BzdzoKLSAgICAgICAgLmxvbmcgIDB4MDAwODAwMDAsMHg4MDAwMDAwMCsuTGlvaW50CisJLmxvbmcJMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5MaW9pbnQKIC5Md2FpdHBzdzoKLSAgICAgICAgLmxvbmcgIDB4MDIwYTAwMDAsMHg4MDAwMDAwMCsuTGlvaW50CisJLmxvbmcJMHgwMjBhMDAwMCwweDgwMDAwMDAwKy5MaW9pbnQKIAotICAgICAgICAuYWxpZ24gOAotLkxjY3dzOiAucmVwdCAgMTkKLSAgICAgICAgLmxvbmcgIDB4MDI2MDAwNTAsMHgwMDAwMDAwMAotICAgICAgICAuZW5kcgotICAgICAgICAubG9uZyAgMHgwMjIwMDA1MCwweDAwMDAwMDAwCi0jZW5kaWYgIC8qIENPTkZJR19JUExfVk0gKi8KKwkuYWxpZ24JOAorLkxjY3dzOiAucmVwdAkxOQorCS5sb25nCTB4MDI2MDAwNTAsMHgwMDAwMDAwMAorCS5lbmRyCisJLmxvbmcJMHgwMjIwMDA1MCwweDAwMDAwMDAwCisjZW5kaWYJLyogQ09ORklHX0lQTF9WTSAqLwogCiBpcGxzdGFydDoKLSAgICAgICAgbGggICAgJXIxLDB4YjggICAgICAgICAgICAgICAgICAgICAgICAgIyB0ZXN0IGlmIHN1YmNoYW5uZWwgbnVtYmVyCi0gICAgICAgIGJjdCAgICVyMSwuTG5vbG9hZCAgICAgICAgICAgICAgICAgICAgICMgIGlzIHZhbGlkCi0JbCAgICAgJXIxLDB4YjggICAgICAgICAgICAgICAgICAgICAgICAgIyBsb2FkIGlwbCBzdWJjaGFubmVsIG51bWJlcgotICAgICAgICBsYSAgICAlcjIsSVBMX0JTICAgICAgICAgICAgICAgICAgICAgICAjIGxvYWQgc3RhcnQgYWRkcmVzcwotICAgICAgICBiYXMgICAlcjE0LC5MbG9hZGVyICAgICAgICAgICAgICAgICAgICAjIGxvYWQgcmVzdCBvZiBpcGwgaW1hZ2UKLSAgICAgICAgbCAgICAgJXIxMiwuTHBhcm0gICAgICAgICAgICAgICAgICAgICAgIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCi0gICAgICAgIHN0ICAgICVyMSxJUExfREVWSUNFK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTIpICMgc2F2ZSBpcGwgZGV2aWNlIG51bWJlcgorCWxoCSVyMSwweGI4CQkjIHRlc3QgaWYgc3ViY2hhbm5lbCBudW1iZXIKKwliY3QJJXIxLC5Mbm9sb2FkCQkjICBpcyB2YWxpZAorCWwJJXIxLDB4YjgJCSMgbG9hZCBpcGwgc3ViY2hhbm5lbCBudW1iZXIKKwlsYQklcjIsSVBMX0JTCQkjIGxvYWQgc3RhcnQgYWRkcmVzcworCWJhcwklcjE0LC5MbG9hZGVyCQkjIGxvYWQgcmVzdCBvZiBpcGwgaW1hZ2UKKwlsCSVyMTIsLkxwYXJtCQkjIHBvaW50ZXIgdG8gcGFyYW1ldGVyIGFyZWEKKwlzdAklcjEsSVBMX0RFVklDRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKSAjIHNhdmUgaXBsIGRldmljZSBudW1iZXIKIAogIwogIyBsb2FkIHBhcmFtZXRlciBmaWxlIGZyb20gaXBsIGRldmljZQogIwogLkxhZ2FpbjE6Ci0JbCAgICAgJXIyLC5MaW5pdHJkCQkgICAgICAgIyByYW1kaXNrIGxvYy4gaXMgdGVtcAotICAgICAgICBiYXMgICAlcjE0LC5MbG9hZGVyICAgICAgICAgICAgICAgICAgICAjIGxvYWQgcGFyYW1ldGVyIGZpbGUKLSAgICAgICAgbHRyICAgJXIyLCVyMiAgICAgICAgICAgICAgICAgICAgICAgICAgIyBnb3QgYW55dGhpbmcgPwotICAgICAgICBieiAgICAuTG5vcGYKLQljaGkgICAlcjIsODk1Ci0JYm5oICAgLkxub3RydW5jCi0JbGEgICAgJXIyLDg5NQorCWwJJXIyLC5MaW5pdHJkCQkjIHJhbWRpc2sgbG9jLiBpcyB0ZW1wCisJYmFzCSVyMTQsLkxsb2FkZXIJCSMgbG9hZCBwYXJhbWV0ZXIgZmlsZQorCWx0cgklcjIsJXIyIAkJIyBnb3QgYW55dGhpbmcgPworCWJ6CS5Mbm9wZgorCWNoaQklcjIsODk1CisJYm5oCS5Mbm90cnVuYworCWxhCSVyMiw4OTUKIC5Mbm90cnVuYzoKLQlsICAgICAlcjQsLkxpbml0cmQKLQljbGMgICAwKDMsJXI0KSwuTF9oZHIJCSAgICAgICAjIGlmIGl0IGlzIEhEUngKLQlieiAgICAuTGFnYWluMQkJCSAgICAgICAjIHNraXAgZGF0YXNldCBoZWFkZXIKLQljbGMgICAwKDMsJXI0KSwuTF9lb2YJCSAgICAgICAjIGlmIGl0IGlzIEVPRngKLQlieiAgICAuTGFnYWluMQkJCSAgICAgICAjIHNraXAgZGF0ZXNldCB0cmFpbGVyCi0gICAgICAgIGxhICAgICVyNSwwKCVyNCwlcjIpCi0gICAgICAgIGxyICAgICVyMywlcjIKKwlsCSVyNCwuTGluaXRyZAorCWNsYwkwKDMsJXI0KSwuTF9oZHIJCSMgaWYgaXQgaXMgSERSeAorCWJ6CS5MYWdhaW4xCQkjIHNraXAgZGF0YXNldCBoZWFkZXIKKwljbGMJMCgzLCVyNCksLkxfZW9mCQkjIGlmIGl0IGlzIEVPRngKKwliegkuTGFnYWluMQkJIyBza2lwIGRhdGVzZXQgdHJhaWxlcgorCWxhCSVyNSwwKCVyNCwlcjIpCisJbHIJJXIzLCVyMgogLkxpZGViYzoKLSAgICAgICAgdG0gICAgMCglcjUpLDB4ODAgICAgICAgICAgICAgICAgICAgICAgIyBoaWdoIG9yZGVyIGJpdCBzZXQgPwotICAgICAgICBibyAgICAuTGRvY3YgICAgICAgICAgICAgICAgICAgICAgICAgICAjICB5ZXMgLT4gY29udmVydCBmcm9tIEVCQ0RJQwotICAgICAgICBhaGkgICAlcjUsLTEKLSAgICAgICAgYmN0ICAgJXIzLC5MaWRlYmMKLSAgICAgICAgYiAgICAgLkxub2N2CisJdG0JMCglcjUpLDB4ODAJCSMgaGlnaCBvcmRlciBiaXQgc2V0ID8KKwlibwkuTGRvY3YJCQkjICB5ZXMgLT4gY29udmVydCBmcm9tIEVCQ0RJQworCWFoaQklcjUsLTEKKwliY3QJJXIzLC5MaWRlYmMKKwliCS5Mbm9jdgogLkxkb2N2OgotICAgICAgICBsICAgICAlcjMsLkxjdnRhYgotICAgICAgICB0ciAgICAwKDI1NiwlcjQpLDAoJXIzKSAgICAgICAgICAgICAgICAjIGNvbnZlcnQgcGFyYW1ldGVycyB0byBhc2NpaQotICAgICAgICB0ciAgICAyNTYoMjU2LCVyNCksMCglcjMpCi0gICAgICAgIHRyICAgIDUxMigyNTYsJXI0KSwwKCVyMykKLSAgICAgICAgdHIgICAgNzY4KDEyMiwlcjQpLDAoJXIzKQotLkxub2N2OiBsYSAgICAlcjMsQ09NTUFORF9MSU5FLVBBUk1BUkVBKCVyMTIpICAjIGxvYWQgYWRyLiBvZiBjb21tYW5kIGxpbmUKLQltdmMgICAwKDI1NiwlcjMpLDAoJXI0KQotCW12YyAgIDI1NigyNTYsJXIzKSwyNTYoJXI0KQotCW12YyAgIDUxMigyNTYsJXIzKSw1MTIoJXI0KQotCW12YyAgIDc2OCgxMjIsJXIzKSw3NjgoJXI0KQotICAgICAgICBzbHIgICAlcjAsJXIwCi0gICAgICAgIGIgICAgIC5MY250bHAKKwlsCSVyMywuTGN2dGFiCisJdHIJMCgyNTYsJXI0KSwwKCVyMykJIyBjb252ZXJ0IHBhcmFtZXRlcnMgdG8gYXNjaWkKKwl0cgkyNTYoMjU2LCVyNCksMCglcjMpCisJdHIJNTEyKDI1NiwlcjQpLDAoJXIzKQorCXRyCTc2OCgxMjIsJXI0KSwwKCVyMykKKy5Mbm9jdjogbGEJJXIzLENPTU1BTkRfTElORS1QQVJNQVJFQSglcjEyKSAjIGxvYWQgYWRyLiBvZiBjb21tYW5kIGxpbmUKKwltdmMJMCgyNTYsJXIzKSwwKCVyNCkKKwltdmMJMjU2KDI1NiwlcjMpLDI1NiglcjQpCisJbXZjCTUxMigyNTYsJXIzKSw1MTIoJXI0KQorCW12Ywk3NjgoMTIyLCVyMyksNzY4KCVyNCkKKwlzbHIJJXIwLCVyMAorCWIJLkxjbnRscAogLkxkZWxzcGM6Ci0gICAgICAgIGljICAgICVyMCwwKCVyMiwlcjMpCi0gICAgICAgIGNoaSAgICVyMCwweDIwICAgICAgICAgICAgICAgICAgICAgICAgICMgaXMgaXQgYSBzcGFjZSA/Ci0gICAgICAgIGJlICAgIC5MY250bHAKLSAgICAgICAgYWhpICAgJXIyLDEKLSAgICAgICAgYiAgICAgLkxlb2xwCisJaWMJJXIwLDAoJXIyLCVyMykKKwljaGkJJXIwLDB4MjAJCSMgaXMgaXQgYSBzcGFjZSA/CisJYmUJLkxjbnRscAorCWFoaQklcjIsMQorCWIJLkxlb2xwCiAuTGNudGxwOgotICAgICAgICBicmN0ICAlcjIsLkxkZWxzcGMKKwlicmN0CSVyMiwuTGRlbHNwYwogLkxlb2xwOgotICAgICAgICBzbHIgICAlcjAsJXIwCi0gICAgICAgIHN0YyAgICVyMCwwKCVyMiwlcjMpICAgICAgICAgICAgICAgICAgICMgdGVybWluYXRlIGJ1ZmZlcgorCXNscgklcjAsJXIwCisJc3RjCSVyMCwwKCVyMiwlcjMpCQkjIHRlcm1pbmF0ZSBidWZmZXIKIC5Mbm9wZjoKIAogIwogIyBsb2FkIHJhbWRpc2sgZnJvbSBpcGwgZGV2aWNlCi0jCQorIwogLkxhZ2FpbjI6Ci0JbCAgICAgJXIyLC5MaW5pdHJkCQkgICAgICAgIyBhZGRyIG9mIHJhbWRpc2sKLQlzdCAgICAlcjIsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTIpCi0gICAgICAgIGJhcyAgICVyMTQsLkxsb2FkZXIgICAgICAgICAgICAgICAgICAgICMgbG9hZCByYW1kaXNrCi0gCXN0ICAgICVyMixJTklUUkRfU0laRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKSAjIHN0b3JlIHNpemUgb2YgcmFtZGlzawotICAgICAgICBsdHIgICAlcjIsJXIyCi0gICAgICAgIGJueiAgIC5McmRjb250Ci0gICAgICAgIHN0ICAgICVyMixJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMikgIyBubyByYW1kaXNrIGZvdW5kCisJbAklcjIsLkxpbml0cmQJCSMgYWRkciBvZiByYW1kaXNrCisJc3QJJXIyLElOSVRSRF9TVEFSVCtBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKQorCWJhcwklcjE0LC5MbG9hZGVyCQkjIGxvYWQgcmFtZGlzaworCXN0CSVyMixJTklUUkRfU0laRStBUkNIX09GRlNFVC1QQVJNQVJFQSglcjEyKSAjIHN0b3JlIHNpemUgb2YgcmQKKwlsdHIJJXIyLCVyMgorCWJuegkuTHJkY29udAorCXN0CSVyMixJTklUUkRfU1RBUlQrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMikgIyBubyByYW1kaXNrIGZvdW5kCiAuTHJkY29udDoKLQlsICAgICAlcjIsLkxpbml0cmQKKwlsCSVyMiwuTGluaXRyZAogCi0JY2xjICAgMCgzLCVyMiksLkxfaGRyCQkgICAgICAgIyBza2lwIEhEUnggYW5kIEVPRnggCi0JYnogICAgLkxhZ2FpbjIKLQljbGMgICAwKDMsJXIyKSwuTF9lb2YKLQlieiAgICAuTGFnYWluMgorCWNsYwkwKDMsJXIyKSwuTF9oZHIJCSMgc2tpcCBIRFJ4IGFuZCBFT0Z4CisJYnoJLkxhZ2FpbjIKKwljbGMJMCgzLCVyMiksLkxfZW9mCisJYnoJLkxhZ2FpbjIKIAogI2lmZGVmIENPTkZJR19JUExfVk0KICMKICMgcmVzZXQgZmlsZXMgaW4gVk0gcmVhZGVyCiAjCi0gICAgICAgIHN0aWRwIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAgICAgICAgICMgc3RvcmUgY3B1aWQKLQl0bSAgICBfX0xDX0NQVUlELDB4ZmYgICAgICAgICAgICAgICAgICAjIHJ1bm5pbmcgVk0gPwotCWJubyAgIC5Mbm9yZXNldAotICAgICAgICBsYSAgICAlcjIsLkxyZXNldCAgICAgICAgICAgICAgCi0gICAgICAgIGxoaSAgICVyMywyNgotCWRpYWcgICVyMiwlcjMsOAotCWxhICAgICVyNSwuTGlyYgotCXN0c2NoIDAoJXI1KQkJCSAgICAgICAjIGNoZWNrIGlmIGlycSBpcyBwZW5kaW5nCi0JdG0gICAgMzAoJXI1KSwweDBmCQkgICAgICAgIyBieSB2ZXJpZnlpbmcgaWYgYW55IG9mIHRoZQotCWJueiAgIC5Md2FpdGZvcmlycQkJICAgICAgICMgYWN0aXZpdHkgb3Igc3RhdHVzIGNvbnRyb2wKLQl0bSAgICAzMSglcjUpLDB4ZmYJCSAgICAgICAjIGJpdHMgaXMgc2V0IGluIHRoZSBzY2hpYgotCWJ6ICAgIC5Mbm9yZXNldAorCXN0aWRwCV9fTENfQ1BVSUQJCSMgc3RvcmUgY3B1aWQKKwl0bQlfX0xDX0NQVUlELDB4ZmYgCSMgcnVubmluZyBWTSA/CisJYm5vCS5Mbm9yZXNldAorCWxhCSVyMiwuTHJlc2V0CisJbGhpCSVyMywyNgorCWRpYWcJJXIyLCVyMyw4CisJbGEJJXI1LC5MaXJiCisJc3RzY2gJMCglcjUpCQkJIyBjaGVjayBpZiBpcnEgaXMgcGVuZGluZworCXRtCTMwKCVyNSksMHgwZgkJIyBieSB2ZXJpZnlpbmcgaWYgYW55IG9mIHRoZQorCWJuegkuTHdhaXRmb3JpcnEJCSMgYWN0aXZpdHkgb3Igc3RhdHVzIGNvbnRyb2wKKwl0bQkzMSglcjUpLDB4ZmYJCSMgYml0cyBpcyBzZXQgaW4gdGhlIHNjaGliCisJYnoJLkxub3Jlc2V0CiAuTHdhaXRmb3JpcnE6Ci0JbXZjICAgMHg3OCg4KSwuTHJkcm5ld3BzdyAgICAgICAgICAgICAgIyBzZXQgdXAgSU8gaW50ZXJydXB0IHBzdworCW12YwkweDc4KDgpLC5McmRybmV3cHN3CSMgc2V0IHVwIElPIGludGVycnVwdCBwc3cKIC5Md2FpdHJkcmlycToKLQlscHN3ICAuTHJkcndhaXRwc3cKKwlscHN3CS5McmRyd2FpdHBzdwogLkxyZHJpbnQ6Ci0JYyAgICAgJXIxLDB4YjggICAgICAgICAgICAgICAgICAgICAgICAgIyBjb21wYXJlIHN1YmNoYW5uZWwgbnVtYmVyCi0JYm5lICAgLkx3YWl0cmRyaXJxCi0JbGEgICAgJXI1LC5MaXJiCi0JdHNjaCAgMCglcjUpCisJYwklcjEsMHhiOAkJIyBjb21wYXJlIHN1YmNoYW5uZWwgbnVtYmVyCisJYm5lCS5Md2FpdHJkcmlycQorCWxhCSVyNSwuTGlyYgorCXRzY2gJMCglcjUpCiAuTG5vcmVzZXQ6Ci0gICAgICAgIGIgICAgIC5Mbm9sb2FkCisJYgkuTG5vbG9hZAogCi0JLmFsaWduIDgKKwkuYWxpZ24JOAogLkxyZHJuZXdwc3c6Ci0JLmxvbmcgIDB4MDAwODAwMDAsMHg4MDAwMDAwMCsuTHJkcmludAorCS5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMCsuTHJkcmludAogLkxyZHJ3YWl0cHN3OgotCS5sb25nICAweDAyMGEwMDAwLDB4ODAwMDAwMDArLkxyZHJpbnQKKwkubG9uZwkweDAyMGEwMDAwLDB4ODAwMDAwMDArLkxyZHJpbnQKICNlbmRpZgogCiAjCiAjIGV2ZXJ5dGhpbmcgbG9hZGVkLCBnbyBmb3IgaXQKICMKIC5Mbm9sb2FkOgotICAgICAgICBsICAgICAlcjEsLkxzdGFydHVwCi0gICAgICAgIGJyICAgICVyMQorCWwJJXIxLC5Mc3RhcnR1cAorCWJyCSVyMQogCi0uTGluaXRyZDoubG9uZyBfZW5kICsgMHg0MDAwMDAJCSAgICAgICAjIGRlZmF1bHQgYWRkcmVzcyBvZiBpbml0cmQKKy5MaW5pdHJkOi5sb25nIF9lbmQgKyAweDQwMDAwMAkJIyBkZWZhdWx0IGFkZHJlc3Mgb2YgaW5pdHJkCiAuTHBhcm06CS5sb25nICBQQVJNQVJFQQogLkxzdGFydHVwOiAubG9uZyBzdGFydHVwCi0uTGN2dGFiOi5sb25nICBfZWJjYXNjICAgICAgICAgICAgICAgICAgICAgICAgICMgZWJjZGljIHRvIGFzY2lpIHRhYmxlCi0uTHJlc2V0Oi5ieXRlICAweGMzLDB4YzgsMHhjMSwweGQ1LDB4YzcsMHhjNSwweDQwLDB4ZDksMHhjNCwweGQ5LDB4NDAKLSAgICAgICAgLmJ5dGUgIDB4YzEsMHhkMywweGQzLDB4NDAsMHhkMiwweGM1LDB4YzUsMHhkNywweDQwLDB4ZDUsMHhkNgotICAgICAgICAuYnl0ZSAgMHhjOCwweGQ2LDB4ZDMsMHhjNCAgICAgICAgICAgICAjICJjaGFuZ2UgcmRyIGFsbCBrZWVwIG5vaG9sZCIKLS5MX2VvZjogLmxvbmcgIDB4YzVkNmM2MDAgICAgICAgLyogQydFT0YnICovCi0uTF9oZHI6IC5sb25nICAweGM4YzRkOTAwICAgICAgIC8qIEMnSERSJyAqLworLkxjdnRhYjoubG9uZwlfZWJjYXNjIAkJIyBlYmNkaWMgdG8gYXNjaWkgdGFibGUKKy5McmVzZXQ6LmJ5dGUJMHhjMywweGM4LDB4YzEsMHhkNSwweGM3LDB4YzUsMHg0MCwweGQ5LDB4YzQsMHhkOSwweDQwCisJLmJ5dGUJMHhjMSwweGQzLDB4ZDMsMHg0MCwweGQyLDB4YzUsMHhjNSwweGQ3LDB4NDAsMHhkNSwweGQ2CisJLmJ5dGUJMHhjOCwweGQ2LDB4ZDMsMHhjNAkjICJjaGFuZ2UgcmRyIGFsbCBrZWVwIG5vaG9sZCIKKy5MX2VvZjogLmxvbmcJMHhjNWQ2YzYwMAkgLyogQydFT0YnICovCisuTF9oZHI6IC5sb25nCTB4YzhjNGQ5MDAJIC8qIEMnSERSJyAqLwogCi0jZW5kaWYgIC8qIENPTkZJR19JUEwgKi8KKyNlbmRpZgkvKiBDT05GSUdfSVBMICovCiAKICMKICMgU0FMSVBMIGxvYWRlciBzdXBwb3J0LiBCYXNlZCBvbiBhIHBhdGNoIGJ5IFJvYiB2YW4gZGVyIEhlaWouCiAjIFRoaXMgZW50cnkgcG9pbnQgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gdGhlIFNBTElQTCBsb2FkZXIgYW5kCiAjIGRvZXNuJ3QgbmVlZCBhIGJ1aWx0aW4gaXBsIHJlY29yZC4KICMKLSAgICAgICAgLm9yZyAgMHg4MDAKLQkuZ2xvYmwgc3RhcnQKKwkub3JnCTB4ODAwCisJLmdsb2JsCXN0YXJ0CiBzdGFydDoKLQlzdG0gICAlcjAsJXIxNSwweDA3YjAJCSMgc3RvcmUgcmVnaXN0ZXJzCi0JYmFzciAgJXIxMiwlcjAKKwlzdG0JJXIwLCVyMTUsMHgwN2IwCQkjIHN0b3JlIHJlZ2lzdGVycworCWJhc3IJJXIxMiwlcjAKIC5iYXNlOgotCWwgICAgICVyMTEsLnBhcm0KLQlsICAgICAlcjgsLmNtZAkJCSMgcG9pbnRlciB0byBjb21tYW5kIGJ1ZmZlcgorCWwJJXIxMSwucGFybQorCWwJJXI4LC5jbWQJCSMgcG9pbnRlciB0byBjb21tYW5kIGJ1ZmZlcgogCi0JbHRyICAgJXI5LCVyOQkJCSMgZG8gd2UgaGF2ZSBTQUxJUEwgcGFyYW1ldGVycz8KLQlicCAgICAuc2s4eDgKKwlsdHIJJXI5LCVyOQkJCSMgZG8gd2UgaGF2ZSBTQUxJUEwgcGFyYW1ldGVycz8KKwlicAkuc2s4eDgKIAotCW12YyAgIDAoNjQsJXI4KSwweDAwYjAJCSMgY29weSBzYXZlZCByZWdpc3RlcnMKLQl4YyAgICA2NCgyNDAtNjQsJXI4KSwwKCVyOCkJIyByZW1haW5kZXIgb2YgYnVmZmVyCi0JdHIgICAgMCg2NCwlcjgpLC5sb3djYXNlCQotCWIgICAgIC5nb3RyCisJbXZjCTAoNjQsJXI4KSwweDAwYjAJIyBjb3B5IHNhdmVkIHJlZ2lzdGVycworCXhjCTY0KDI0MC02NCwlcjgpLDAoJXI4KQkjIHJlbWFpbmRlciBvZiBidWZmZXIKKwl0cgkwKDY0LCVyOCksLmxvd2Nhc2UKKwliCS5nb3RyCiAuc2s4eDg6Ci0JbXZjICAgMCgyNDAsJXI4KSwwKCVyOSkJCSMgY29weSBpcGxwYXJtcyBpbnRvIGJ1ZmZlcgorCW12YwkwKDI0MCwlcjgpLDAoJXI5KQkjIGNvcHkgaXBscGFybXMgaW50byBidWZmZXIKIC5nb3RyOgotCWwgICAgICVyMTAsLnRibAkJCSMgRUJDRElDIHRvIEFTQ0lJIHRhYmxlCi0JdHIgICAgMCgyNDAsJXI4KSwwKCVyMTApCi0Jc3RpZHAgX19MQ19DUFVJRAkJIyBBcmUgd2UgcnVubmluZyBvbiBWTSBtYXliZQotCWNsaSAgIF9fTENfQ1BVSUQsMHhmZgotCWJueiAgIC50ZXN0Ci0JLmxvbmcgMHg4MzMwMDA2MAkJIyBkaWFnIDMsMCx4JzAwNjAnIC0gc3RvcmFnZSBzaXplCi0JYiAgICAgLmRvbmUKKwlsCSVyMTAsLnRibAkJIyBFQkNESUMgdG8gQVNDSUkgdGFibGUKKwl0cgkwKDI0MCwlcjgpLDAoJXIxMCkKKwlzdGlkcAlfX0xDX0NQVUlECQkjIEFyZSB3ZSBydW5uaW5nIG9uIFZNIG1heWJlCisJY2xpCV9fTENfQ1BVSUQsMHhmZgorCWJuegkudGVzdAorCS5sb25nCTB4ODMzMDAwNjAJCSMgZGlhZyAzLDAseCcwMDYwJyAtIHN0b3JhZ2Ugc2l6ZQorCWIJLmRvbmUKIC50ZXN0OgotCW12YyAgIDB4NjgoOCksLnBnbW53CQkjIHNldCB1cCBwZ20gY2hlY2sgaGFuZGxlcgotCWwgICAgICVyMiwuZm91cm1lZwotCWxyICAgICVyMywlcjIKLQliY3RyICAlcjMsJXIwCQkJIyA0TS0xCi0ubG9vcDogIGlza2UgICVyMCwlcjMKLQlhciAgICAlcjMsJXIyCisJbXZjCTB4NjgoOCksLnBnbW53CQkjIHNldCB1cCBwZ20gY2hlY2sgaGFuZGxlcgorCWwJJXIyLC5mb3VybWVnCisJbHIJJXIzLCVyMgorCWJjdHIJJXIzLCVyMAkJCSMgNE0tMQorLmxvb3A6CWlza2UJJXIwLCVyMworCWFyCSVyMywlcjIKIC5wZ214OgotCXNyICAgICVyMywlcjIKLQlsYSAgICAlcjMsMSglcjMpCisJc3IJJXIzLCVyMgorCWxhCSVyMywxKCVyMykKIC5kb25lOgotICAgICAgICBsICAgICAlcjEsLm1lbXNpemUKLQlzdCAgICAlcjMsQVJDSF9PRkZTRVQoJXIxKQotCXNsciAgICVyMCwlcjAKLQlzdCAgICAlcjAsSU5JVFJEX1NJWkUrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKLQlzdCAgICAlcjAsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCi0JaiAgICAgc3RhcnR1cCAgICAgICAgICAgICAgICAgICAjIGNvbnRpbnVlIHdpdGggc3RhcnR1cAotLnRibDoJLmxvbmcgX2ViY2FzYwkJCSMgdHJhbnNsYXRlIHRhYmxlCi0uY21kOgkubG9uZyBDT01NQU5EX0xJTkUJCSMgYWRkcmVzcyBvZiBjb21tYW5kIGxpbmUgYnVmZmVyCi0ucGFybToJLmxvbmcgUEFSTUFSRUEKKwlsCSVyMSwubWVtc2l6ZQorCXN0CSVyMyxBUkNIX09GRlNFVCglcjEpCisJc2xyCSVyMCwlcjAKKwlzdAklcjAsSU5JVFJEX1NJWkUrQVJDSF9PRkZTRVQtUEFSTUFSRUEoJXIxMSkKKwlzdAklcjAsSU5JVFJEX1NUQVJUK0FSQ0hfT0ZGU0VULVBBUk1BUkVBKCVyMTEpCisJaglzdGFydHVwIAkJIyBjb250aW51ZSB3aXRoIHN0YXJ0dXAKKy50Ymw6CS5sb25nCV9lYmNhc2MJCQkjIHRyYW5zbGF0ZSB0YWJsZQorLmNtZDoJLmxvbmcJQ09NTUFORF9MSU5FCQkjIGFkZHJlc3Mgb2YgY29tbWFuZCBsaW5lIGJ1ZmZlcgorLnBhcm06CS5sb25nCVBBUk1BUkVBCiAubWVtc2l6ZTogLmxvbmcgbWVtb3J5X3NpemUKIC5mb3VybWVnOiAubG9uZyAweDAwNDAwMDAwICAgICAgCSMgNE0KLS5wZ21udzoJLmxvbmcgMHgwMDA4MDAwMCwucGdteAorLnBnbW53OgkubG9uZwkweDAwMDgwMDAwLC5wZ214CiAubG93Y2FzZToKLQkuYnl0ZSAweDAwLDB4MDEsMHgwMiwweDAzLDB4MDQsMHgwNSwweDA2LDB4MDcgCisJLmJ5dGUgMHgwMCwweDAxLDB4MDIsMHgwMywweDA0LDB4MDUsMHgwNiwweDA3CiAJLmJ5dGUgMHgwOCwweDA5LDB4MGEsMHgwYiwweDBjLDB4MGQsMHgwZSwweDBmCi0JLmJ5dGUgMHgxMCwweDExLDB4MTIsMHgxMywweDE0LDB4MTUsMHgxNiwweDE3IAorCS5ieXRlIDB4MTAsMHgxMSwweDEyLDB4MTMsMHgxNCwweDE1LDB4MTYsMHgxNwogCS5ieXRlIDB4MTgsMHgxOSwweDFhLDB4MWIsMHgxYywweDFkLDB4MWUsMHgxZgotCS5ieXRlIDB4MjAsMHgyMSwweDIyLDB4MjMsMHgyNCwweDI1LDB4MjYsMHgyNyAKKwkuYnl0ZSAweDIwLDB4MjEsMHgyMiwweDIzLDB4MjQsMHgyNSwweDI2LDB4MjcKIAkuYnl0ZSAweDI4LDB4MjksMHgyYSwweDJiLDB4MmMsMHgyZCwweDJlLDB4MmYKLQkuYnl0ZSAweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwweDM2LDB4MzcgCisJLmJ5dGUgMHgzMCwweDMxLDB4MzIsMHgzMywweDM0LDB4MzUsMHgzNiwweDM3CiAJLmJ5dGUgMHgzOCwweDM5LDB4M2EsMHgzYiwweDNjLDB4M2QsMHgzZSwweDNmCi0JLmJ5dGUgMHg0MCwweDQxLDB4NDIsMHg0MywweDQ0LDB4NDUsMHg0NiwweDQ3IAorCS5ieXRlIDB4NDAsMHg0MSwweDQyLDB4NDMsMHg0NCwweDQ1LDB4NDYsMHg0NwogCS5ieXRlIDB4NDgsMHg0OSwweDRhLDB4NGIsMHg0YywweDRkLDB4NGUsMHg0ZgotCS5ieXRlIDB4NTAsMHg1MSwweDUyLDB4NTMsMHg1NCwweDU1LDB4NTYsMHg1NyAKKwkuYnl0ZSAweDUwLDB4NTEsMHg1MiwweDUzLDB4NTQsMHg1NSwweDU2LDB4NTcKIAkuYnl0ZSAweDU4LDB4NTksMHg1YSwweDViLDB4NWMsMHg1ZCwweDVlLDB4NWYKLQkuYnl0ZSAweDYwLDB4NjEsMHg2MiwweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcgCisJLmJ5dGUgMHg2MCwweDYxLDB4NjIsMHg2MywweDY0LDB4NjUsMHg2NiwweDY3CiAJLmJ5dGUgMHg2OCwweDY5LDB4NmEsMHg2YiwweDZjLDB4NmQsMHg2ZSwweDZmCi0JLmJ5dGUgMHg3MCwweDcxLDB4NzIsMHg3MywweDc0LDB4NzUsMHg3NiwweDc3IAorCS5ieXRlIDB4NzAsMHg3MSwweDcyLDB4NzMsMHg3NCwweDc1LDB4NzYsMHg3NwogCS5ieXRlIDB4NzgsMHg3OSwweDdhLDB4N2IsMHg3YywweDdkLDB4N2UsMHg3ZgogCi0JLmJ5dGUgMHg4MCwweDgxLDB4ODIsMHg4MywweDg0LDB4ODUsMHg4NiwweDg3IAorCS5ieXRlIDB4ODAsMHg4MSwweDgyLDB4ODMsMHg4NCwweDg1LDB4ODYsMHg4NwogCS5ieXRlIDB4ODgsMHg4OSwweDhhLDB4OGIsMHg4YywweDhkLDB4OGUsMHg4ZgotCS5ieXRlIDB4OTAsMHg5MSwweDkyLDB4OTMsMHg5NCwweDk1LDB4OTYsMHg5NyAKKwkuYnl0ZSAweDkwLDB4OTEsMHg5MiwweDkzLDB4OTQsMHg5NSwweDk2LDB4OTcKIAkuYnl0ZSAweDk4LDB4OTksMHg5YSwweDliLDB4OWMsMHg5ZCwweDllLDB4OWYKLQkuYnl0ZSAweGEwLDB4YTEsMHhhMiwweGEzLDB4YTQsMHhhNSwweGE2LDB4YTcgCisJLmJ5dGUgMHhhMCwweGExLDB4YTIsMHhhMywweGE0LDB4YTUsMHhhNiwweGE3CiAJLmJ5dGUgMHhhOCwweGE5LDB4YWEsMHhhYiwweGFjLDB4YWQsMHhhZSwweGFmCi0JLmJ5dGUgMHhiMCwweGIxLDB4YjIsMHhiMywweGI0LDB4YjUsMHhiNiwweGI3IAorCS5ieXRlIDB4YjAsMHhiMSwweGIyLDB4YjMsMHhiNCwweGI1LDB4YjYsMHhiNwogCS5ieXRlIDB4YjgsMHhiOSwweGJhLDB4YmIsMHhiYywweGJkLDB4YmUsMHhiZgotCS5ieXRlIDB4YzAsMHg4MSwweDgyLDB4ODMsMHg4NCwweDg1LDB4ODYsMHg4NwkjIC5hYmNkZWZnIAorCS5ieXRlIDB4YzAsMHg4MSwweDgyLDB4ODMsMHg4NCwweDg1LDB4ODYsMHg4NwkjIC5hYmNkZWZnCiAJLmJ5dGUgMHg4OCwweDg5LDB4Y2EsMHhjYiwweGNjLDB4Y2QsMHhjZSwweGNmCSMgaGkKLQkuYnl0ZSAweGQwLDB4OTEsMHg5MiwweDkzLDB4OTQsMHg5NSwweDk2LDB4OTcgCSMgLmprbG1ub3AKKwkuYnl0ZSAweGQwLDB4OTEsMHg5MiwweDkzLDB4OTQsMHg5NSwweDk2LDB4OTcJIyAuamtsbW5vcAogCS5ieXRlIDB4OTgsMHg5OSwweGRhLDB4ZGIsMHhkYywweGRkLDB4ZGUsMHhkZgkjIHFyCiAJLmJ5dGUgMHhlMCwweGUxLDB4YTIsMHhhMywweGE0LDB4YTUsMHhhNiwweGE3CSMgLi5zdHV2d3gKIAkuYnl0ZSAweGE4LDB4YTksMHhlYSwweGViLDB4ZWMsMHhlZCwweGVlLDB4ZWYJIyB5egotCS5ieXRlIDB4ZjAsMHhmMSwweGYyLDB4ZjMsMHhmNCwweGY1LDB4ZjYsMHhmNyAKKwkuYnl0ZSAweGYwLDB4ZjEsMHhmMiwweGYzLDB4ZjQsMHhmNSwweGY2LDB4ZjcKIAkuYnl0ZSAweGY4LDB4ZjksMHhmYSwweGZiLDB4ZmMsMHhmZCwweGZlLDB4ZmYKIAogI2lmZGVmIENPTkZJR182NEJJVApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUyBiL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKaW5kZXggMWZhOWZhMWMuLjFiOTUyYTMgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDMxLlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkMzEuUwpAQCAtMjU0LDYgKzI1NCwxNiBAQAogCW9pCTMoJXIxMiksMHg4MAkJIyBzZXQgSURURSBmbGFnCiAuTGNoa2lkdGU6CiAKKyMKKyMgZmluZCBvdXQgaWYgdGhlIGRpYWcgMHg5YyBpcyBhdmFpbGFibGUKKyMKKwltdmMJX19MQ19QR01fTkVXX1BTVyg4KSwuTHBjZGlhZzljLS5MUEcxKCVyMTMpCisJc3RhcCAgIF9fTENfQ1BVSUQrNAkJIyBzdG9yZSBjcHUgYWRkcmVzcworCWxoICAgICAlcjEsX19MQ19DUFVJRCs0CisJZGlhZyAgICVyMSwwLDB4OWMJCSMgdGVzdCBkaWFnIDB4OWMKKwlvaSAgICAgMiglcjEyKSwxCQkjIHNldCBkaWFnOWMgZmxhZworLkxjaGtkaWFnOWM6CisKIAlscHN3ICAuTGVudHJ5LS5MUEcxKDEzKQkJIyBqdW1wIHRvIF9zdGV4dCBpbiBwcmltYXJ5LXNwYWNlLAogCQkJCQkjIHZpcnR1YWwgYW5kIG5ldmVyIHJldHVybiAuLi4KIAkuYWxpZ24JOApAQCAtMjgxLDYgKzI5MSw3IEBACiAuTHBjY3NwOi5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMCArIC5MY2hrY3NwCiAuTHBjbXZwZzoubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa212cGcKIC5McGNpZHRlOi5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMCArIC5MY2hraWR0ZQorLkxwY2RpYWc5YzoubG9uZyAweDAwMDgwMDAwLDB4ODAwMDAwMDAgKyAuTGNoa2RpYWc5YwogLkxtZW1zaXplOi5sb25nIG1lbW9yeV9zaXplCiAuTG1jaHVuazoubG9uZwltZW1vcnlfY2h1bmsKIC5MbWZsYWdzOi5sb25nCW1hY2hpbmVfZmxhZ3MKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL2hlYWQ2NC5TCmluZGV4IGE4YmRkOTYuLmIzMGU1ODkgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvaGVhZDY0LlMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC9oZWFkNjQuUwpAQCAtMTUsMjMyICsxNSwyMzIgQEAKICMgdGhpcyBpcyBjYWxsZWQgZWl0aGVyIGJ5IHRoZSBpcGwgbG9hZGVyIG9yIGRpcmVjdGx5IGJ5IFBTVyByZXN0YXJ0CiAjIG9yIGxpbmxvYWQgb3IgU0FMSVBMCiAjCi0JLm9yZyAgMHgxMDAwMAotc3RhcnR1cDpiYXNyICAlcjEzLDAJCQkgIyBnZXQgYmFzZQotLkxQRzA6CWwgICAgICVyMTMsMGYtLkxQRzAoJXIxMykKLQliICAgICAwKCVyMTMpCi0wOgkubG9uZyBzdGFydHVwX2NvbnRpbnVlCisJLm9yZwkweDEwMDAwCitzdGFydHVwOmJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzA6CWwJJXIxMywwZi0uTFBHMCglcjEzKQorCWIJMCglcjEzKQorMDoJLmxvbmcJc3RhcnR1cF9jb250aW51ZQogCiAjCiAjIHBhcmFtcyBhdCAxMDQwMCAoc2V0dXAuaCkKICMKLQkub3JnICAgUEFSTUFSRUEKLQkucXVhZCAgMAkJCSMgSVBMX0RFVklDRQotCS5xdWFkICAwCQkJIyBJTklUUkRfU1RBUlQKLQkucXVhZCAgMAkJCSMgSU5JVFJEX1NJWkUKKwkub3JnCVBBUk1BUkVBCisJLnF1YWQJMAkJCSMgSVBMX0RFVklDRQorCS5xdWFkCTAJCQkjIElOSVRSRF9TVEFSVAorCS5xdWFkCTAJCQkjIElOSVRSRF9TSVpFCiAKLQkub3JnICAgQ09NTUFORF9MSU5FCi0JLmJ5dGUgICJyb290PS9kZXYvcmFtMCBybyIKLQkuYnl0ZSAgMAorCS5vcmcJQ09NTUFORF9MSU5FCisJLmJ5dGUJInJvb3Q9L2Rldi9yYW0wIHJvIgorCS5ieXRlCTAKIAotCS5vcmcgICAweDExMDAwCisJLm9yZwkweDExMDAwCiAKIHN0YXJ0dXBfY29udGludWU6Ci0JYmFzciAgJXIxMywwCQkJICMgZ2V0IGJhc2UKLS5MUEcxOiAgc2xsICAgJXIxMywxICAgICAgICAgICAgICAgICAgICAgIyByZW1vdmUgaGlnaCBvcmRlciBiaXQKLSAgICAgICAgc3JsICAgJXIxMywxCi0gICAgICAgIGxoaSAgICVyMSwxICAgICAgICAgICAgICAgICAgICAgICMgbW9kZSAxID0gZXNhbWUKLQltdmkgICBfX0xDX0FSX01PREVfSUQsMQkJICMgc2V0IGVzYW1lIGZsYWcKLSAgICAgICAgc2xyICAgJXIwLCVyMCAgICAgICAgICAgICAgICAgICAgIyBzZXQgY3B1aWQgdG8gemVybwotICAgICAgICBzaWdwICAlcjEsJXIwLDB4MTIgICAgICAgICAgICAgICAjIHN3aXRjaCB0byBlc2FtZSBtb2RlCi0Jc2FtNjQJCQkJICMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCi0JbGN0bGcgJWMwLCVjMTUsLkxjdGwtLkxQRzEoJXIxMykgIyBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzCi0JbGcgICAgJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpIyBwb2ludGVyIHRvIHBhcmFtZXRlciBhcmVhCi0JCQkJCSAjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCi0gICAgICAgIG12YyAgIF9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UrNC1QQVJNQVJFQSglcjEyKQorCWJhc3IJJXIxMywwCQkJIyBnZXQgYmFzZQorLkxQRzE6CXNsbAklcjEzLDEJCQkjIHJlbW92ZSBoaWdoIG9yZGVyIGJpdAorCXNybAklcjEzLDEKKwlsaGkJJXIxLDEJCQkjIG1vZGUgMSA9IGVzYW1lCisJbXZpCV9fTENfQVJfTU9ERV9JRCwxCSMgc2V0IGVzYW1lIGZsYWcKKwlzbHIJJXIwLCVyMCAJCSMgc2V0IGNwdWlkIHRvIHplcm8KKwlzaWdwCSVyMSwlcjAsMHgxMgkJIyBzd2l0Y2ggdG8gZXNhbWUgbW9kZQorCXNhbTY0CQkJCSMgc3dpdGNoIHRvIDY0IGJpdCBtb2RlCisJbGN0bGcJJWMwLCVjMTUsLkxjdGwtLkxQRzEoJXIxMykJIyBsb2FkIGNvbnRyb2wgcmVnaXN0ZXJzCisJbGcJJXIxMiwuTHBhcm1hZGRyLS5MUEcxKCVyMTMpCSMgcG9pbnRlciB0byBwYXJhbWV0ZXIgYXJlYQorCQkJCQkjIG1vdmUgSVBMIGRldmljZSB0byBsb3djb3JlCisJbXZjCV9fTENfSVBMREVWKDQpLElQTF9ERVZJQ0UrNC1QQVJNQVJFQSglcjEyKQogIwogIyBTZXR1cCBzdGFjawogIwotCWxhcmwgICVyMTUsaW5pdF90aHJlYWRfdW5pb24KLQlsZyAgICAlcjE0LF9fVElfdGFzayglcjE1KQkjIGNhY2hlIGN1cnJlbnQgaW4gbG93Y29yZQotCXN0ZyAgICVyMTQsX19MQ19DVVJSRU5UCi0JYWdoaSAgJXIxNSwxPDwoUEFHRV9TSElGVCtUSFJFQURfT1JERVIpICMgaW5pdF90YXNrX3VuaW9uICsgVEhSRUFEX1NJWkUKLQlzdGcgICAlcjE1LF9fTENfS0VSTkVMX1NUQUNLCSMgc2V0IGVuZCBvZiBrZXJuZWwgc3RhY2sKLQlhZ2hpICAlcjE1LC0xNjAKLQl4YyAgICBfX1NGX0JBQ0tDSEFJTig0LCVyMTUpLF9fU0ZfQkFDS0NIQUlOKCVyMTUpICMgY2xlYXIgYmFja2NoYWluCisJbGFybAklcjE1LGluaXRfdGhyZWFkX3VuaW9uCisJbGcJJXIxNCxfX1RJX3Rhc2soJXIxNSkJIyBjYWNoZSBjdXJyZW50IGluIGxvd2NvcmUKKwlzdGcJJXIxNCxfX0xDX0NVUlJFTlQKKwlhZ2hpCSVyMTUsMTw8KFBBR0VfU0hJRlQrVEhSRUFEX09SREVSKSAjIGluaXRfdGFza191bmlvbiArIFRIUkVBRF9TSVpFCisJc3RnCSVyMTUsX19MQ19LRVJORUxfU1RBQ0sJIyBzZXQgZW5kIG9mIGtlcm5lbCBzdGFjaworCWFnaGkJJXIxNSwtMTYwCisJeGMJX19TRl9CQUNLQ0hBSU4oNCwlcjE1KSxfX1NGX0JBQ0tDSEFJTiglcjE1KSAjIGNsZWFyIGJhY2tjaGFpbgogCi0JYnJhc2wgJXIxNCxpcGxfc2F2ZV9wYXJhbWV0ZXJzCisJYnJhc2wJJXIxNCxpcGxfc2F2ZV9wYXJhbWV0ZXJzCiAjCiAjIGNsZWFyIGJzcyBtZW1vcnkKICMKLQlsYXJsICAlcjIsX19ic3Nfc3RhcnQgICAgICAgICAgICMgc3RhcnQgb2YgYnNzIHNlZ21lbnQKLSAgICAgICAgbGFybCAgJXIzLF9lbmQgICAgICAgICAgICAgICAgICAjIGVuZCBvZiBic3Mgc2VnbWVudAotICAgICAgICBzZ3IgICAlcjMsJXIyICAgICAgICAgICAgICAgICAgICMgbGVuZ3RoIG9mIGJzcwotICAgICAgICBzZ3IgICAlcjQsJXI0ICAgICAgICAgICAgICAgICAgICMKLSAgICAgICAgc2dyICAgJXI1LCVyNSAgICAgICAgICAgICAgICAgICAjIHNldCBzcmMsbGVuZ3RoIGFuZCBwYWQgdG8gemVybwotICAgICAgICBtdmNsZSAlcjIsJXI0LDAgICAgICAgICAgICAgICAgICMgY2xlYXIgbWVtCi0gICAgICAgIGpvICAgIC4tNCAgICAgICAgICAgICAgICAgICAgICAgIyBicmFuY2ggYmFjaywgaWYgbm90IGZpbmlzaAorCWxhcmwJJXIyLF9fYnNzX3N0YXJ0IAkjIHN0YXJ0IG9mIGJzcyBzZWdtZW50CisJbGFybAklcjMsX2VuZAkJIyBlbmQgb2YgYnNzIHNlZ21lbnQKKwlzZ3IJJXIzLCVyMiAJCSMgbGVuZ3RoIG9mIGJzcworCXNncgklcjQsJXI0IAkJIworCXNncgklcjUsJXI1IAkJIyBzZXQgc3JjLGxlbmd0aCBhbmQgcGFkIHRvIHplcm8KKwltdmNsZQklcjIsJXI0LDAJCSMgY2xlYXIgbWVtCisJam8JLi00CQkJIyBicmFuY2ggYmFjaywgaWYgbm90IGZpbmlzaAogCi0JbCAgICAgJXIyLC5McmNwLS5MUEcxKCVyMTMpCSMgUmVhZCBTQ1AgZm9yY2VkIGNvbW1hbmQgd29yZAorCWwJJXIyLC5McmNwLS5MUEcxKCVyMTMpCSMgUmVhZCBTQ1AgZm9yY2VkIGNvbW1hbmQgd29yZAogLkxzZXJ2aWNlY2FsbDoKLQlzdG9zbSAuTHBtYXNrLS5MUEcxKCVyMTMpLDB4MDEJIyBhdXRob3JpemUgZXh0IGludGVycnVwdHMKKwlzdG9zbQkuTHBtYXNrLS5MUEcxKCVyMTMpLDB4MDEJIyBhdXRob3JpemUgZXh0IGludGVycnVwdHMKIAotCXN0Y3RnICVyMCwlcjAsLkxjci0uTFBHMSglcjEzKQkjIGdldCBjcjAKLQlsYSAgICAlcjEsMHgyMDAJCQkjIHNldCBiaXQgMjIKLQlvZyAgICAlcjEsLkxjci0uTFBHMSglcjEzKQkjIG9yIG9sZCBjcjAgd2l0aCByMQotCXN0ZyAgICVyMSwuTGNyLS5MUEcxKCVyMTMpCi0JbGN0bGcgJXIwLCVyMCwuTGNyLS5MUEcxKCVyMTMpCSMgbG9hZCBtb2RpZmllZCBjcjAKKwlzdGN0ZwklcjAsJXIwLC5MY3ItLkxQRzEoJXIxMykJIyBnZXQgY3IwCisJbGEJJXIxLDB4MjAwCQkjIHNldCBiaXQgMjIKKwlvZwklcjEsLkxjci0uTFBHMSglcjEzKQkjIG9yIG9sZCBjcjAgd2l0aCByMQorCXN0ZwklcjEsLkxjci0uTFBHMSglcjEzKQorCWxjdGxnCSVyMCwlcjAsLkxjci0uTFBHMSglcjEzKQkjIGxvYWQgbW9kaWZpZWQgY3IwCiAKLQltdmMgICBfX0xDX0VYVF9ORVdfUFNXKDgpLC5McGNtc2stLkxQRzEoJXIxMykgIyBzZXQgcG9zdGNhbGwgcHN3Ci0JbGFybCAgJXIxLC5Mc2NscGgKLQlzdGcgICAlcjEsX19MQ19FWFRfTkVXX1BTVys4CSMgc2V0IGhhbmRsZXIKKwltdmMJX19MQ19FWFRfTkVXX1BTVyg4KSwuTHBjbXNrLS5MUEcxKCVyMTMpICMgc2V0IHBvc3RjYWxsIHBzdworCWxhcmwJJXIxLC5Mc2NscGgKKwlzdGcJJXIxLF9fTENfRVhUX05FV19QU1crOAkjIHNldCBoYW5kbGVyCiAKLQlsYXJsICAlcjQsLkxzY2NiCQkjICVyNCBpcyBvdXIgaW5kZXggZm9yIHNjY2Igc3R1ZmYKLQlsZ3IgICAlcjEsJXI0CQkJIyBvdXIgc2NjYgotCS5pbnNuIHJyZSwweGIyMjAwMDAwLCVyMiwlcjEJIyBzZXJ2aWNlIGNhbGwKLQlpcG0gICAlcjEKLQlzcmwgICAlcjEsMjgJCQkjIGdldCBjYyBjb2RlCi0JeHIgICAgJXIzLCVyMwotCWNoaSAgICVyMSwzCi0JYmUgICAgLkxmY2h1bmstLkxQRzEoJXIxMykJIyBsZWF2ZQotCWNoaSAgICVyMSwyCi0JYmUgICAgLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQotCWxwc3dlIC5Md2FpdHNjbHAtLkxQRzEoJXIxMykKKwlsYXJsCSVyNCwuTHNjY2IJCSMgJXI0IGlzIG91ciBpbmRleCBmb3Igc2NjYiBzdHVmZgorCWxncgklcjEsJXI0CQkJIyBvdXIgc2NjYgorCS5pbnNuCXJyZSwweGIyMjAwMDAwLCVyMiwlcjEJIyBzZXJ2aWNlIGNhbGwKKwlpcG0JJXIxCisJc3JsCSVyMSwyOAkJCSMgZ2V0IGNjIGNvZGUKKwl4cgklcjMsJXIzCisJY2hpCSVyMSwzCisJYmUJLkxmY2h1bmstLkxQRzEoJXIxMykJIyBsZWF2ZQorCWNoaQklcjEsMgorCWJlCS5Mc2VydmljZWNhbGwtLkxQRzEoJXIxMykKKwlscHN3ZQkuTHdhaXRzY2xwLS5MUEcxKCVyMTMpCiAuTHNjbHBoOgotCWxoICAgICVyMSwuTHNjY2JyLS5Mc2NjYiglcjQpCi0JY2hpICAgJXIxLDB4MTAJCQkjIDB4MDAxMCBpcyB0aGUgc3VjZXNzIGNvZGUKLQlqZSAgICAuTHByb2NzY2NiCQkjIGxldCdzIHByb2Nlc3MgdGhlIHNjY2IKLQljaGkgICAlcjEsMHgxZjAKLQlibmUgICAuTGZjaHVuay0uTFBHMSglcjEzKQkjIHVuaGFuZGxlZCBlcnJvciBjb2RlCi0JYyAgICAgJXIyLC5McmNwLS5MUEcxKCVyMTMpCSMgRGlkIHdlIHRyeSBSZWFkIFNDUCBmb3JjZWQKLQlibmUgICAuTGZjaHVuay0uTFBHMSglcjEzKQkjIGlmIG5vLCBnaXZlIHVwCi0JbCAgICAgJXIyLC5McmNwMi0uTFBHMSglcjEzKQkjIHRyeSB3aXRoIFJlYWQgU0NQCi0JYiAgICAgLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQorCWxoCSVyMSwuTHNjY2JyLS5Mc2NjYiglcjQpCisJY2hpCSVyMSwweDEwCQkjIDB4MDAxMCBpcyB0aGUgc3VjZXNzIGNvZGUKKwlqZQkuTHByb2NzY2NiCQkjIGxldCdzIHByb2Nlc3MgdGhlIHNjY2IKKwljaGkJJXIxLDB4MWYwCisJYm5lCS5MZmNodW5rLS5MUEcxKCVyMTMpCSMgdW5oYW5kbGVkIGVycm9yIGNvZGUKKwljCSVyMiwuTHJjcC0uTFBHMSglcjEzKQkjIERpZCB3ZSB0cnkgUmVhZCBTQ1AgZm9yY2VkCisJYm5lCS5MZmNodW5rLS5MUEcxKCVyMTMpCSMgaWYgbm8sIGdpdmUgdXAKKwlsCSVyMiwuTHJjcDItLkxQRzEoJXIxMykJIyB0cnkgd2l0aCBSZWFkIFNDUAorCWIJLkxzZXJ2aWNlY2FsbC0uTFBHMSglcjEzKQogLkxwcm9jc2NjYjoKLQlsZ2hpICAlcjEsMAotCWljbSAgICVyMSwzLC5Mc2NwaW5jcjEtLkxzY2NiKCVyNCkgIyB1c2UgdGhpcyBvbmUgaWYgIT0gMAotCWpueiAgIC5Mc2NuZAotCWxnICAgICVyMSwuTHNjcGluY3IyLS5Mc2NjYiglcjQpICMgb3RoZXJ3aXNlIHVzZSB0aGlzIG9uZQorCWxnaGkJJXIxLDAKKwlpY20JJXIxLDMsLkxzY3BpbmNyMS0uTHNjY2IoJXI0KQkjIHVzZSB0aGlzIG9uZSBpZiAhPSAwCisJam56CS5Mc2NuZAorCWxnCSVyMSwuTHNjcGluY3IyLS5Mc2NjYiglcjQpCSMgb3RoZXJ3aXNlIHVzZSB0aGlzIG9uZQogLkxzY25kOgotCXhyICAgICVyMywlcjMJCQkjIHNhbWUgbG9naWMKLQlpYyAgICAlcjMsLkxzY3BhMS0uTHNjY2IoJXI0KQotCWNoaSAgICVyMywweDAwCi0Jam5lICAgLkxjb21wbWVtCi0JbCAgICAgJXIzLC5Mc2NwYTItLkxzY2NiKCVyNCkKKwl4cgklcjMsJXIzCQkJIyBzYW1lIGxvZ2ljCisJaWMJJXIzLC5Mc2NwYTEtLkxzY2NiKCVyNCkKKwljaGkJJXIzLDB4MDAKKwlqbmUJLkxjb21wbWVtCisJbAklcjMsLkxzY3BhMi0uTHNjY2IoJXI0KQogLkxjb21wbWVtOgotCW1sZ3IgICVyMiwlcjEJCQkjIG1lbSBpbiBNQiBvbiAxMjgtYml0Ci0JbCAgICAgJXIxLC5Mb25lbWItLkxQRzEoJXIxMykKLQltbGdyICAlcjIsJXIxCQkJIyBtZW0gc2l6ZSBpbiBieXRlcyBpbiAlcjMKLQliICAgICAuTGZjaHVuay0uTFBHMSglcjEzKQorCW1sZ3IJJXIyLCVyMQkJCSMgbWVtIGluIE1CIG9uIDEyOC1iaXQKKwlsCSVyMSwuTG9uZW1iLS5MUEcxKCVyMTMpCisJbWxncgklcjIsJXIxCQkJIyBtZW0gc2l6ZSBpbiBieXRlcyBpbiAlcjMKKwliCS5MZmNodW5rLS5MUEcxKCVyMTMpCiAKLQkuYWxpZ24gNAorCS5hbGlnbgk0CiAuTHBtYXNrOgotCS5ieXRlIDAKLQkuYWxpZ24gOAorCS5ieXRlCTAKKwkuYWxpZ24JOAogLkxjcjoKLQkucXVhZCAweDAwICAjIHBsYWNlIGhvbGRlciBmb3IgY3IwCisJLnF1YWQJMHgwMCAgIyBwbGFjZSBob2xkZXIgZm9yIGNyMAogLkx3YWl0c2NscDoKLQkucXVhZCAgMHgwMTAyMDAwMTgwMDAwMDAwLC5Mc2NscGgKKwkucXVhZAkweDAxMDIwMDAxODAwMDAwMDAsLkxzY2xwaAogLkxyY3A6Ci0JLmludCAweDAwMTIwMDAxICMgUmVhZCBTQ1AgZm9yY2VkIGNvZGUKKwkuaW50CTB4MDAxMjAwMDEgIyBSZWFkIFNDUCBmb3JjZWQgY29kZQogLkxyY3AyOgotCS5pbnQgMHgwMDAyMDAwMSAjIFJlYWQgU0NQIGNvZGUKKwkuaW50CTB4MDAwMjAwMDEgIyBSZWFkIFNDUCBjb2RlCiAuTG9uZW1iOgotCS5pbnQgMHgxMDAwMDAKKwkuaW50CTB4MTAwMDAwCiAKIC5MZmNodW5rOgotCQkJCQkgIyBzZXQgcHJvZ3JhbSBjaGVjayBuZXcgcHN3IG1hc2sKLQltdmMgICBfX0xDX1BHTV9ORVdfUFNXKDgpLC5McGNtc2stLkxQRzEoJXIxMykKKwkJCQkJIyBzZXQgcHJvZ3JhbSBjaGVjayBuZXcgcHN3IG1hc2sKKwltdmMJX19MQ19QR01fTkVXX1BTVyg4KSwuTHBjbXNrLS5MUEcxKCVyMTMpCiAKICMKICMgZmluZCBtZW1vcnkgY2h1bmtzLgogIwotCWxnciAgICVyOSwlcjMJCQkgIyBlbmQgb2YgbWVtCi0JbGFybCAgJXIxLC5MY2hrbWVtICAgICAgICAgICAgICAgIyBzZXQgcHJvZ3JhbSBjaGVjayBhZGRyZXNzCi0Jc3RnICAgJXIxLF9fTENfUEdNX05FV19QU1crOAotCWxhICAgICVyMSwxICAgICAgICAgICAgICAgICAgICAgICMgdGVzdCBpbiBpbmNyZW1lbnRzIG9mIDEyOEtCCi0Jc2xsZyAgJXIxLCVyMSwxNwotCWxhcmwgICVyMyxtZW1vcnlfY2h1bmsKLQlzbGdyICAlcjQsJXI0ICAgICAgICAgICAgICAgICAgICAjIHNldCBzdGFydCBvZiBjaHVuayB0byB6ZXJvCi0Jc2xnciAgJXI1LCVyNSAgICAgICAgICAgICAgICAgICAgIyBzZXQgZW5kIG9mIGNodW5rIHRvIHplcm8KLQlzbHIgICVyNiwlcjYJCQkgIyBzZXQgYWNjZXNzIGNvZGUgdG8gemVybwotCWxhICAgICVyMTAsTUVNT1JZX0NIVU5LUwkgIyBudW1iZXIgb2YgY2h1bmtzCisJbGdyCSVyOSwlcjMJCQkjIGVuZCBvZiBtZW0KKwlsYXJsCSVyMSwuTGNoa21lbQkJIyBzZXQgcHJvZ3JhbSBjaGVjayBhZGRyZXNzCisJc3RnCSVyMSxfX0xDX1BHTV9ORVdfUFNXKzgKKwlsYQklcjEsMQkJCSMgdGVzdCBpbiBpbmNyZW1lbnRzIG9mIDEyOEtCCisJc2xsZwklcjEsJXIxLDE3CisJbGFybAklcjMsbWVtb3J5X2NodW5rCisJc2xncgklcjQsJXI0IAkJIyBzZXQgc3RhcnQgb2YgY2h1bmsgdG8gemVybworCXNsZ3IJJXI1LCVyNSAJCSMgc2V0IGVuZCBvZiBjaHVuayB0byB6ZXJvCisJc2xyCSVyNiwlcjYJCQkjIHNldCBhY2Nlc3MgY29kZSB0byB6ZXJvCisJbGEJJXIxMCxNRU1PUllfQ0hVTktTCSMgbnVtYmVyIG9mIGNodW5rcwogLkxsb29wOgotCXRwcm90IDAoJXI1KSwwCQkJICMgdGVzdCBwcm90ZWN0aW9uIG9mIGZpcnN0IGJ5dGUKLQlpcG0gICAlcjcKLQlzcmwgICAlcjcsMjgKLQljbHIgICAlcjYsJXI3CQkJICMgY29tcGFyZSBjYyB3aXRoIGxhc3QgYWNjZXNzIGNvZGUKLQlqZSAgICAuTHNhbWUKLQlqICAgICAuTGNoa21lbQorCXRwcm90CTAoJXI1KSwwCQkjIHRlc3QgcHJvdGVjdGlvbiBvZiBmaXJzdCBieXRlCisJaXBtCSVyNworCXNybAklcjcsMjgKKwljbHIJJXI2LCVyNwkJCSMgY29tcGFyZSBjYyB3aXRoIGxhc3QgYWNjZXNzIGNvZGUKKwlqZQkuTHNhbWUKKwlqCS5MY2hrbWVtCiAuTHNhbWU6Ci0JYWxnciAgJXI1LCVyMQkJCSAjIGFkZCAxMjhLQiB0byBlbmQgb2YgY2h1bmsKLQkJCQkJICMgbm8gbmVlZCB0byBjaGVjayBoZXJlLAotCWJyYyAgIDEyLC5MbG9vcAkJCSAjIHRoaXMgaXMgdGhlIHNhbWUgY2h1bmsKLS5MY2hrbWVtOgkJCQkgIyA+IDE2RUIgb3IgdHByb3QgZ290IGEgcHJvZ3JhbSBjaGVjawotCWNsZ3IgICVyNCwlcjUJCQkgIyBjaHVuayBzaXplID4gMD8KLQlqZSAgICAuTGNoa2xvb3AKLQlzdGcgICAlcjQsMCglcjMpCQkgIyBzdG9yZSBzdGFydCBhZGRyZXNzIG9mIGNodW5rCi0JbGdyICAgJXIwLCVyNQotCXNsZ3IgICVyMCwlcjQKLQlzdGcgICAlcjAsOCglcjMpCQkgIyBzdG9yZSBzaXplIG9mIGNodW5rCi0Jc3QgICAgJXI2LDIwKCVyMykJCSAjIHN0b3JlIHR5cGUgb2YgY2h1bmsKLQlsYSAgICAlcjMsMjQoJXIzKQotCWxhcmwgICVyOCxtZW1vcnlfc2l6ZQotCXN0ZyAgICVyNSwwKCVyOCkgICAgICAgICAgICAgICAgICMgc3RvcmUgbWVtb3J5IHNpemUKLQlhaGkgICAlcjEwLC0xCQkJICMgdXBkYXRlIGNodW5rIG51bWJlcgorCWFsZ3IJJXI1LCVyMQkJCSMgYWRkIDEyOEtCIHRvIGVuZCBvZiBjaHVuaworCQkJCQkjIG5vIG5lZWQgdG8gY2hlY2sgaGVyZSwKKwlicmMJMTIsLkxsb29wCQkjIHRoaXMgaXMgdGhlIHNhbWUgY2h1bmsKKy5MY2hrbWVtOgkJCQkjID4gMTZFQiBvciB0cHJvdCBnb3QgYSBwcm9ncmFtIGNoZWNrCisJY2xncgklcjQsJXI1CQkJIyBjaHVuayBzaXplID4gMD8KKwlqZQkuTGNoa2xvb3AKKwlzdGcJJXI0LDAoJXIzKQkJIyBzdG9yZSBzdGFydCBhZGRyZXNzIG9mIGNodW5rCisJbGdyCSVyMCwlcjUKKwlzbGdyCSVyMCwlcjQKKwlzdGcJJXIwLDgoJXIzKQkJIyBzdG9yZSBzaXplIG9mIGNodW5rCisJc3QJJXI2LDIwKCVyMykJCSMgc3RvcmUgdHlwZSBvZiBjaHVuaworCWxhCSVyMywyNCglcjMpCisJbGFybAklcjgsbWVtb3J5X3NpemUKKwlzdGcJJXI1LDAoJXI4KQkJIyBzdG9yZSBtZW1vcnkgc2l6ZQorCWFoaQklcjEwLC0xCQkJIyB1cGRhdGUgY2h1bmsgbnVtYmVyCiAuTGNoa2xvb3A6Ci0JbHIgICAgJXI2LCVyNwkJCSAjIHNldCBhY2Nlc3MgY29kZSB0byBsYXN0IGNjCisJbHIJJXI2LCVyNwkJCSMgc2V0IGFjY2VzcyBjb2RlIHRvIGxhc3QgY2MKIAkjIHdlIGdvdCBhbiBleGNlcHRpb24gb3Igd2UncmUgc3RhcnRpbmcgYSBuZXcKIAkjIGNodW5rICwgd2UgbXVzdCBjaGVjayBpZiB3ZSBzaG91bGQKIAkjIHN0aWxsIHRyeSB0byBmaW5kIHZhbGlkIG1lbW9yeSAoaWYgd2UgZGV0ZWN0ZWQKIAkjIHRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHN0b3JhZ2UpLCBhbmQgaWYgd2UKIAkjIGhhdmUgY2h1bmtzIGxlZnQKLQlsZ2hpICAlcjQsMQotCXNsbGcgICVyNCwlcjQsMzEKLQljbGdyICAlcjUsJXI0Ci0JamUgICAgLkxoc2Fza2lwCi0JeHIgICAgJXIwLCAlcjAKLQljbGdyICAlcjAsICVyOQkJCSAjIGRpZCB3ZSBkZXRlY3QgbWVtb3J5PwotCWplICAgIC5MZG9uZW1lbQkJCSAjIGlmIG5vdCwgbGVhdmUKLQljaGkgICAlcjEwLCAwCQkJICMgZG8gd2UgaGF2ZSBjaHVua3MgbGVmdD8KLQlqZSAgICAuTGRvbmVtZW0KKwlsZ2hpCSVyNCwxCisJc2xsZwklcjQsJXI0LDMxCisJY2xncgklcjUsJXI0CisJamUJLkxoc2Fza2lwCisJeHIJJXIwLCAlcjAKKwljbGdyCSVyMCwgJXI5CQkjIGRpZCB3ZSBkZXRlY3QgbWVtb3J5PworCWplCS5MZG9uZW1lbQkJIyBpZiBub3QsIGxlYXZlCisJY2hpCSVyMTAsIDAJCQkjIGRvIHdlIGhhdmUgY2h1bmtzIGxlZnQ/CisJamUJLkxkb25lbWVtCiAuTGhzYXNraXA6Ci0JYWxnciAgJXI1LCVyMQkJCSAjIGFkZCAxMjhLQiB0byBlbmQgb2YgY2h1bmsKLQlsZ3IgICAlcjQsJXI1CQkJICMgcG90ZW50aWFsIG5ldyBjaHVuawotCWNsZ3IgICVyNSwlcjkJCQkgIyBzaG91bGQgd2UgZ28gb24/Ci0JamwgICAgLkxsb29wCi0uTGRvbmVtZW06CQkKKwlhbGdyCSVyNSwlcjEJCQkjIGFkZCAxMjhLQiB0byBlbmQgb2YgY2h1bmsKKwlsZ3IJJXI0LCVyNQkJCSMgcG90ZW50aWFsIG5ldyBjaHVuaworCWNsZ3IJJXI1LCVyOQkJCSMgc2hvdWxkIHdlIGdvIG9uPworCWpsCS5MbG9vcAorLkxkb25lbWVtOgogCi0JbGFybCAgJXIxMixtYWNoaW5lX2ZsYWdzCisJbGFybAklcjEyLG1hY2hpbmVfZmxhZ3MKICMKICMgZmluZCBvdXQgaWYgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgVk0KICMKLSAgICAgICAgc3RpZHAgIF9fTENfQ1BVSUQgICAgICAgICAgICAgICAjIHN0b3JlIGNwdWlkCi0JdG0gICAgIF9fTENfQ1BVSUQsMHhmZiAgICAgICAgICAjIHJ1bm5pbmcgdW5kZXIgVk0gPwotCWJubyAgICAwZi0uTFBHMSglcjEzKQotICAgICAgICBvaSAgICAgNyglcjEyKSwxICAgICAgICAgICAgICAgICMgc2V0IFZNIGZsYWcKLTA6ICAgICAgbGggICAgICVyMCxfX0xDX0NQVUlEKzQgICAgICAgICAjIGdldCBjcHUgdmVyc2lvbgotICAgICAgICBjaGkgICAgJXIwLDB4NzQ5MCAgICAgICAgICAgICAgICMgcnVubmluZyBvbiBhIFAvMzkwID8KLSAgICAgICAgYm5lICAgIDFmLS5MUEcxKCVyMTMpCi0gICAgICAgIG9pICAgICA3KCVyMTIpLDQgICAgICAgICAgICAgICAgIyBzZXQgUC8zOTAgZmxhZworCXN0aWRwCV9fTENfQ1BVSUQJCSMgc3RvcmUgY3B1aWQKKwl0bQlfX0xDX0NQVUlELDB4ZmYgCSMgcnVubmluZyB1bmRlciBWTSA/CisJYm5vCTBmLS5MUEcxKCVyMTMpCisJb2kJNyglcjEyKSwxCQkjIHNldCBWTSBmbGFnCiswOglsaAklcjAsX19MQ19DUFVJRCs0CSMgZ2V0IGNwdSB2ZXJzaW9uCisJY2hpCSVyMCwweDc0OTAJCSMgcnVubmluZyBvbiBhIFAvMzkwID8KKwlibmUJMWYtLkxQRzEoJXIxMykKKwlvaQk3KCVyMTIpLDQJCSMgc2V0IFAvMzkwIGZsYWcKIDE6CiAKICMKICMgZmluZCBvdXQgaWYgd2UgaGF2ZSB0aGUgTVZQRyBpbnN0cnVjdGlvbgogIwotCWxhICAgICAlcjEsMGYtLkxQRzEoJXIxMykgICAgICAgIyBzZXQgcHJvZ3JhbSBjaGVjayBhZGRyZXNzCi0Jc3RnICAgICVyMSxfX0xDX1BHTV9ORVdfUFNXKzgKLQlzZ3IgICAgJXIwLCVyMAotCWxnaGkgICAlcjEsMAotCWxnaGkgICAlcjIsMAotCW12cGcgICAlcjEsJXIyICAgICAgICAgICAgICAgICAgIyB0ZXN0IE1WUEcgaW5zdHJ1Y3Rpb24KLQlvaSAgICAgNyglcjEyKSwxNiAgICAgICAgICAgICAgICMgc2V0IE1WUEcgZmxhZworCWxhCSVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKKwlzdGcJJXIxLF9fTENfUEdNX05FV19QU1crOAorCXNncgklcjAsJXIwCisJbGdoaQklcjEsMAorCWxnaGkJJXIyLDAKKwltdnBnCSVyMSwlcjIgCQkjIHRlc3QgTVZQRyBpbnN0cnVjdGlvbgorCW9pCTcoJXIxMiksMTYJCSMgc2V0IE1WUEcgZmxhZwogMDoKIAogIwogIyBmaW5kIG91dCBpZiB0aGUgZGlhZyAweDQ0IHdvcmtzIGluIDY0IGJpdCBtb2RlCiAjCi0JbGEgICAgICVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKLQlzdGcgICAgJXIxLF9fTENfUEdNX05FV19QU1crOAotCWRpYWcgICAwLDAsMHg0NAkJCSMgdGVzdCBkaWFnIDB4NDQKLQlvaSAgICAgNyglcjEyKSwzMgkJIyBzZXQgZGlhZzQ0IGZsYWcKLTA6CQorCWxhCSVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKKwlzdGcJJXIxLF9fTENfUEdNX05FV19QU1crOAorCWRpYWcJMCwwLDB4NDQJCSMgdGVzdCBkaWFnIDB4NDQKKwlvaQk3KCVyMTIpLDMyCQkjIHNldCBkaWFnNDQgZmxhZworMDoKIAogIwogIyBmaW5kIG91dCBpZiB3ZSBoYXZlIHRoZSBJRFRFIGluc3RydWN0aW9uCiAjCi0JbGEgICAgICVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKLQlzdGcgICAgJXIxLF9fTENfUEdNX05FV19QU1crOAorCWxhCSVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKKwlzdGcJJXIxLF9fTENfUEdNX05FV19QU1crOAogCS5sb25nCTB4YjJiMTAwMDAJCSMgc3RvcmUgZmFjaWxpdHkgbGlzdAogCXRtCTB4YzgsMHgwOAkJIyBjaGVjayBiaXQgZm9yIGNsZWFyaW5nLWJ5LUFTQ0UKIAlibm8JMGYtLkxQRzEoJXIxMykKQEAgLTI1MSw2ICsyNTEsMTcgQEAKIDA6CiAKICMKKyMgZmluZCBvdXQgaWYgdGhlIGRpYWcgMHg5YyBpcyBhdmFpbGFibGUKKyMKKwlsYSAgICAgJXIxLDBmLS5MUEcxKCVyMTMpCSMgc2V0IHByb2dyYW0gY2hlY2sgYWRkcmVzcworCXN0ZyAgICAlcjEsX19MQ19QR01fTkVXX1BTVys4CisJc3RhcCAgIF9fTENfQ1BVSUQrNAkJIyBzdG9yZSBjcHUgYWRkcmVzcworCWxoICAgICAlcjEsX19MQ19DUFVJRCs0CisJZGlhZyAgICVyMSwwLDB4OWMJCSMgdGVzdCBkaWFnIDB4OWMKKwlvaSAgICAgNiglcjEyKSwxCQkjIHNldCBkaWFnOWMgZmxhZworMDoKKworIwogIyBmaW5kIG91dCBpZiB3ZSBoYXZlIHRoZSBNVkNPUyBpbnN0cnVjdGlvbgogIwogCWxhCSVyMSwwZi0uTFBHMSglcjEzKQkjIHNldCBwcm9ncmFtIGNoZWNrIGFkZHJlc3MKQEAgLTI2Myw0NSArMjc0LDQ1IEBACiAJb2kJNiglcjEyKSwyCQkjIHNldCBNVkNPUyBmbGFnCiAxOgogCi0gICAgICAgIGxwc3dlIC5MZW50cnktLkxQRzEoMTMpICAgICAgICAgIyBqdW1wIHRvIF9zdGV4dCBpbiBwcmltYXJ5LXNwYWNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgdmlydHVhbCBhbmQgbmV2ZXIgcmV0dXJuIC4uLgotICAgICAgICAuYWxpZ24gMTYKLS5MZW50cnk6LnF1YWQgIDB4MDAwMDAwMDE4MDAwMDAwMCxfc3RleHQKLS5MY3RsOiAgLnF1YWQgIDB4MDRiNTAwMDIgICAgICAgICAgICAgICAjIGNyMDogdmFyaW91cyB0aGluZ3MKLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyMTogcHJpbWFyeSBzcGFjZSBzZWdtZW50IHRhYmxlCi0gICAgICAgIC5xdWFkICAuTGR1Y3QgICAgICAgICAgICAgICAgICAgIyBjcjI6IGRpc3BhdGNoYWJsZSB1bml0IGNvbnRyb2wgdGFibGUKLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyMzogaW5zdHJ1Y3Rpb24gYXV0aG9yaXphdGlvbgotICAgICAgICAucXVhZCAgMCAgICAgICAgICAgICAgICAgICAgICAgICMgY3I0OiBpbnN0cnVjdGlvbiBhdXRob3JpemF0aW9uCi0gICAgICAgIC5xdWFkICAweGZmZmZmZmZmZmZmZmZmZmYgICAgICAgIyBjcjU6IHByaW1hcnktYXN0ZSBvcmlnaW4KLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyNjogIEkvTyBpbnRlcnJ1cHRzCi0gICAgICAgIC5xdWFkICAwICAgICAgICAgICAgICAgICAgICAgICAgIyBjcjc6ICBzZWNvbmRhcnkgc3BhY2Ugc2VnbWVudCB0YWJsZQotICAgICAgICAucXVhZCAgMCAgICAgICAgICAgICAgICAgICAgICAgICMgY3I4OiAgYWNjZXNzIHJlZ2lzdGVycyB0cmFuc2xhdGlvbgotICAgICAgICAucXVhZCAgMCAgICAgICAgICAgICAgICAgICAgICAgICMgY3I5OiAgdHJhY2luZyBvZmYKLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyMTA6IHRyYWNpbmcgb2ZmCi0gICAgICAgIC5xdWFkICAwICAgICAgICAgICAgICAgICAgICAgICAgIyBjcjExOiB0cmFjaW5nIG9mZgotICAgICAgICAucXVhZCAgMCAgICAgICAgICAgICAgICAgICAgICAgICMgY3IxMjogdHJhY2luZyBvZmYKLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyMTM6IGhvbWUgc3BhY2Ugc2VnbWVudCB0YWJsZQotICAgICAgICAucXVhZCAgMHhjMDAwMDAwMCAgICAgICAgICAgICAgICMgY3IxNDogbWFjaGluZSBjaGVjayBoYW5kbGluZyBvZmYKLSAgICAgICAgLnF1YWQgIDAgICAgICAgICAgICAgICAgICAgICAgICAjIGNyMTU6IGxpbmthZ2Ugc3RhY2sgb3BlcmF0aW9ucwotLkxkdWN0OiAubG9uZyAwLDAsMCwwLDAsMCwwLDAKLQkubG9uZyAwLDAsMCwwLDAsMCwwLDAKLS5McGNtc2s6LnF1YWQgIDB4MDAwMDAwMDE4MDAwMDAwMAorCWxwc3dlCS5MZW50cnktLkxQRzEoMTMpCSMganVtcCB0byBfc3RleHQgaW4gcHJpbWFyeS1zcGFjZSwKKwkJCQkJIyB2aXJ0dWFsIGFuZCBuZXZlciByZXR1cm4gLi4uCisJLmFsaWduCTE2CisuTGVudHJ5Oi5xdWFkCTB4MDAwMDAwMDE4MDAwMDAwMCxfc3RleHQKKy5MY3RsOgkucXVhZAkweDA0YjUwMDAyCQkjIGNyMDogdmFyaW91cyB0aGluZ3MKKwkucXVhZAkwCQkJIyBjcjE6IHByaW1hcnkgc3BhY2Ugc2VnbWVudCB0YWJsZQorCS5xdWFkCS5MZHVjdAkJCSMgY3IyOiBkaXNwYXRjaGFibGUgdW5pdCBjb250cm9sIHRhYmxlCisJLnF1YWQJMAkJCSMgY3IzOiBpbnN0cnVjdGlvbiBhdXRob3JpemF0aW9uCisJLnF1YWQJMAkJCSMgY3I0OiBpbnN0cnVjdGlvbiBhdXRob3JpemF0aW9uCisJLnF1YWQJMHhmZmZmZmZmZmZmZmZmZmZmCSMgY3I1OiBwcmltYXJ5LWFzdGUgb3JpZ2luCisJLnF1YWQJMAkJCSMgY3I2OglJL08gaW50ZXJydXB0cworCS5xdWFkCTAJCQkjIGNyNzoJc2Vjb25kYXJ5IHNwYWNlIHNlZ21lbnQgdGFibGUKKwkucXVhZAkwCQkJIyBjcjg6CWFjY2VzcyByZWdpc3RlcnMgdHJhbnNsYXRpb24KKwkucXVhZAkwCQkJIyBjcjk6CXRyYWNpbmcgb2ZmCisJLnF1YWQJMAkJCSMgY3IxMDogdHJhY2luZyBvZmYKKwkucXVhZAkwCQkJIyBjcjExOiB0cmFjaW5nIG9mZgorCS5xdWFkCTAJCQkjIGNyMTI6IHRyYWNpbmcgb2ZmCisJLnF1YWQJMAkJCSMgY3IxMzogaG9tZSBzcGFjZSBzZWdtZW50IHRhYmxlCisJLnF1YWQJMHhjMDAwMDAwMAkJIyBjcjE0OiBtYWNoaW5lIGNoZWNrIGhhbmRsaW5nIG9mZgorCS5xdWFkCTAJCQkjIGNyMTU6IGxpbmthZ2Ugc3RhY2sgb3BlcmF0aW9ucworLkxkdWN0OiAubG9uZwkwLDAsMCwwLDAsMCwwLDAKKwkubG9uZwkwLDAsMCwwLDAsMCwwLDAKKy5McGNtc2s6LnF1YWQJMHgwMDAwMDAwMTgwMDAwMDAwCiAuTDRtYWxpZ246LnF1YWQgMHhmZmZmZmZmZmZmYzAwMDAwCi0uTHNjYW4yZzoucXVhZCAweDgwMDAwMDAwICsgMHgyMDAwMCAtIDggIyAyR0IgKyAxMjhLIC0gOAotLkxub3A6CS5sb25nICAweDA3MDAwNzAwCisuTHNjYW4yZzoucXVhZAkweDgwMDAwMDAwICsgMHgyMDAwMCAtIDgJIyAyR0IgKyAxMjhLIC0gOAorLkxub3A6CS5sb25nCTB4MDcwMDA3MDAKIC5McGFybWFkZHI6CiAJLnF1YWQJUEFSTUFSRUEKIAotCS5nbG9ibCBpcGxfc2NoaWIKKwkuZ2xvYmwJaXBsX3NjaGliCiBpcGxfc2NoaWI6CiAJLnJlcHQgMTMKIAkubG9uZyAwCiAJLmVuZHIKIAotCS5nbG9ibCBpcGxfZmxhZ3MKKwkuZ2xvYmwJaXBsX2ZsYWdzCiBpcGxfZmxhZ3M6Ci0JLmxvbmcgMAotCS5nbG9ibCBpcGxfZGV2bm8KKwkubG9uZwkwCisJLmdsb2JsCWlwbF9kZXZubwogaXBsX2Rldm5vOgogCS53b3JkIDAKIApAQCAtMzA5LDQ3ICszMjAsNDcgQEAKIC5nbG9ibCBzMzkwX3JlYWRpbmZvX3NjY2IKIHMzOTBfcmVhZGluZm9fc2NjYjoKIC5Mc2NjYjoKLQkuaHdvcmQgMHgxMDAwCQkJIyBsZW5ndGgsIG9uZSBwYWdlCi0JLmJ5dGUgMHgwMCwweDAwLDB4MDAKLQkuYnl0ZSAweDgwCQkJIyB2YXJpYWJsZSByZXNwb25zZSBiaXQgc2V0CisJLmh3b3JkCTB4MTAwMAkJCSMgbGVuZ3RoLCBvbmUgcGFnZQorCS5ieXRlCTB4MDAsMHgwMCwweDAwCisJLmJ5dGUJMHg4MAkJCSMgdmFyaWFibGUgcmVzcG9uc2UgYml0IHNldAogLkxzY2NicjoKLQkuaHdvcmQgMHgwMAkJCSMgcmVzcG9uc2UgY29kZQorCS5od29yZAkweDAwCQkJIyByZXNwb25zZSBjb2RlCiAuTHNjcGluY3IxOgotCS5od29yZCAweDAwCisJLmh3b3JkCTB4MDAKIC5Mc2NwYTE6Ci0JLmJ5dGUgMHgwMAotCS5maWxsIDg5LDEsMAorCS5ieXRlCTB4MDAKKwkuZmlsbAk4OSwxLDAKIC5Mc2NwYTI6Ci0JLmludCAweDAwCisJLmludAkweDAwCiAuTHNjcGluY3IyOgotCS5xdWFkIDB4MDAKLQkuZmlsbCAzOTg0LDEsMAorCS5xdWFkCTB4MDAKKwkuZmlsbAkzOTg0LDEsMAogCS5vcmcJMHgxMzAwMAogCiAjaWZkZWYgQ09ORklHX1NIQVJFRF9LRVJORUwKLQkub3JnICAgMHgxMDAwMDAKKwkub3JnCTB4MTAwMDAwCiAjZW5kaWYKLQkKKwogIwogIyBzdGFydHVwLWNvZGUsIHJ1bm5pbmcgaW4gYWJzb2x1dGUgYWRkcmVzc2luZyBtb2RlCiAjCi0gICAgICAgIC5nbG9ibCBfc3RleHQKLV9zdGV4dDoJYmFzciAgJXIxMywwICAgICAgICAgICAgICAgICAgICAjIGdldCBiYXNlCisJLmdsb2JsCV9zdGV4dAorX3N0ZXh0OgliYXNyCSVyMTMsMAkJCSMgZ2V0IGJhc2UKIC5MUEczOgogIyBjaGVjayBjb250cm9sIHJlZ2lzdGVycwotICAgICAgICBzdGN0ZyAgJWMwLCVjMTUsMCglcjE1KQotCW9pICAgICA2KCVyMTUpLDB4NDAgICAgICAgICAgICAgIyBlbmFibGUgc2lncCBlbWVyZ2VuY3kgc2lnbmFsCi0Jb2kgICAgIDQoJXIxNSksMHgxMCAgICAgICAgICAgICAjIHN3aXRjaCBvbiBsb3cgYWRkcmVzcyBwcm9jdGVjdGlvbgotICAgICAgICBsY3RsZyAgJWMwLCVjMTUsMCglcjE1KQorCXN0Y3RnCSVjMCwlYzE1LDAoJXIxNSkKKwlvaQk2KCVyMTUpLDB4NDAJCSMgZW5hYmxlIHNpZ3AgZW1lcmdlbmN5IHNpZ25hbAorCW9pCTQoJXIxNSksMHgxMAkJIyBzd2l0Y2ggb24gbG93IGFkZHJlc3MgcHJvY3RlY3Rpb24KKwlsY3RsZwklYzAsJWMxNSwwKCVyMTUpCiAKLSAgICAgICAgbGFtICAgIDAsMTUsLkxhcmVncy0uTFBHMyglcjEzKSAjIGxvYWQgYWNjZXNzIHJlZ3MgbmVlZGVkIGJ5IHVhY2Nlc3MKLSAgICAgICAgYnJhc2wgICVyMTQsc3RhcnRfa2VybmVsICAgICAgICAjIGdvIHRvIEMgY29kZQorCWxhbQkwLDE1LC5MYXJlZ3MtLkxQRzMoJXIxMykJIyBsb2FkIGFjcnMgbmVlZGVkIGJ5IHVhY2Nlc3MKKwlicmFzbAklcjE0LHN0YXJ0X2tlcm5lbAkjIGdvIHRvIEMgY29kZQogIwogIyBXZSByZXR1cm5lZCBmcm9tIHN0YXJ0X2tlcm5lbCA/IT8gUEFOSUsKICMKLSAgICAgICAgYmFzciAgJXIxMywwCi0JbHBzd2UgLkxkdy0uKCVyMTMpICAgICAgICAgICAjIGxvYWQgZGlzYWJsZWQgd2FpdCBwc3cKKwliYXNyCSVyMTMsMAorCWxwc3dlCS5MZHctLiglcjEzKQkJIyBsb2FkIGRpc2FibGVkIHdhaXQgcHN3CiAKLSAgICAgICAgICAgIC5hbGlnbiA4Ci0uTGR3OiAgICAgICAucXVhZCAgMHgwMDAyMDAwMTgwMDAwMDAwLDB4MDAwMDAwMDAwMDAwMDAwMAotLkxhcmVnczogICAgLmxvbmcgIDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAKKwkuYWxpZ24JOAorLkxkdzoJLnF1YWQJMHgwMDAyMDAwMTgwMDAwMDAwLDB4MDAwMDAwMDAwMDAwMDAwMAorLkxhcmVnczoubG9uZwkwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jIGIvYXJjaC9zMzkwL2tlcm5lbC9pcGwuYwppbmRleCA2NTU1Y2M0Li4xZjVlNzgyIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL2lwbC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvaXBsLmMKQEAgLTEyMCwyNCArMTIwLDE1IEBACiAKIHN0YXRpYyBpbnQgZGlhZzMwOCh1bnNpZ25lZCBsb25nIHN1YmNvZGUsIHZvaWQgKmFkZHIpCiB7Ci0JcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfYWRkciBhc20oIjAiKSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfYWRkciBhc20oIjAiKSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyOwogCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX3JjIGFzbSgiMSIpID0gMDsKIAotCWFzbSB2b2xhdGlsZSAoCi0JCSIgICBkaWFnICUwLCUyLDB4MzA4XG4iCi0JCSIwOiBcbiIKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJIiAgIC5hbGlnbiA4XG4iCi0JCSIgICAucXVhZCAwYiwgMGJcbiIKLSNlbHNlCi0JCSIgICAuYWxpZ24gNFxuIgotCQkiICAgLmxvbmcgMGIsIDBiXG4iCi0jZW5kaWYKLQkJIi5wcmV2aW91c1xuIgorCWFzbSB2b2xhdGlsZSgKKwkJIglkaWFnCSUwLCUyLDB4MzA4XG4iCisJCSIwOlxuIgorCQlFWF9UQUJMRSgwYiwwYikKIAkJOiAiK2QiIChfYWRkciksICIrZCIgKF9yYykKLQkJOiAiZCIgKHN1YmNvZGUpIDogImNjIiwgIm1lbW9yeSIgKTsKLQorCQk6ICJkIiAoc3ViY29kZSkgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIF9yYzsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9wcm9jZXNzLmMgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwppbmRleCBkM2NiZmEzLi42NjAzZmJiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3Byb2Nlc3MuYwpAQCAtNDUsNyArNDUsNyBAQAogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vdGltZXIuaD4KIAotYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgX19hc21fXygicmV0X2Zyb21fZm9yayIpOworYXNtbGlua2FnZSB2b2lkIHJldF9mcm9tX2Zvcmsodm9pZCkgYXNtICgicmV0X2Zyb21fZm9yayIpOwogCiAvKgogICogUmV0dXJuIHNhdmVkIFBDIG9mIGEgYmxvY2tlZCB0aHJlYWQuIHVzZWQgaW4ga2VybmVsL3NjaGVkLgpAQCAtMTc3LDcgKzE3Nyw4IEBACiAKIGV4dGVybiB2b2lkIGtlcm5lbF90aHJlYWRfc3RhcnRlcih2b2lkKTsKIAotX19hc21fXygiLmFsaWduIDRcbiIKK2FzbSgKKwkiLmFsaWduIDRcbiIKIAkia2VybmVsX3RocmVhZF9zdGFydGVyOlxuIgogCSIgICAgbGEgICAgMiwwKDEwKVxuIgogCSIgICAgYmFzciAgMTQsOVxuIgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TIGIvYXJjaC9zMzkwL2tlcm5lbC9yZWlwbC5TCmluZGV4IDQ1NjJjZGIuLjAzNDA0NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGwuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlaXBsLlMKQEAgLTMyLDU4ICszMiw1OCBAQAogCQlzdAklcjEzLCBfX0xDX1BTV19TQVZFX0FSRUErNAogCiAJCWxjdGwJJWM2LCVjNiwuTGFsbC0uTHBnMCglcjEzKQotICAgICAgICAgICAgICAgIGxyICAgICAgJXIxLCVyMgotICAgICAgICAJbXZjICAgICBfX0xDX1BHTV9ORVdfUFNXKDgpLC5McGNuZXctLkxwZzAoJXIxMykKLSAgICAgICAgICAgICAgICBzdHNjaCAgIC5Mc2NoaWItLkxwZzAoJXIxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgIG9pICAgICAgLkxzY2hpYis1LS5McGcwKCVyMTMpLDB4ODQgCi0uTGVjczogIAl4aSAgICAgIC5Mc2NoaWIrMjctLkxwZzAoJXIxMyksMHgwMSAKLSAgICAgICAgCW1zY2ggICAgLkxzY2hpYi0uTHBnMCglcjEzKSAKLSAgICAgICAgICAgICAgICBsaGkgICAgICVyMCw1Ci0uTHNzY2g6CQlzc2NoCS5MaXBsb3JiLS5McGcwKCVyMTMpICAgICAgICAgICAKKwkJbHIJJXIxLCVyMgorCQltdmMJX19MQ19QR01fTkVXX1BTVyg4KSwuTHBjbmV3LS5McGcwKCVyMTMpCisJCXN0c2NoCS5Mc2NoaWItLkxwZzAoJXIxMykKKwkJb2kJLkxzY2hpYis1LS5McGcwKCVyMTMpLDB4ODQKKy5MZWNzOiAgCXhpCS5Mc2NoaWIrMjctLkxwZzAoJXIxMyksMHgwMQorCQltc2NoCS5Mc2NoaWItLkxwZzAoJXIxMykKKwkJbGhpCSVyMCw1CisuTHNzY2g6CQlzc2NoCS5MaXBsb3JiLS5McGcwKCVyMTMpCiAJCWp6CS5MMDAxCi0gICAgICAgICAgICAgICAgYnJjdCAgICAlcjAsLkxzc2NoICAKKwkJYnJjdAklcjAsLkxzc2NoCiAJCWJhcwklcjE0LC5MZGlzYWItLkxwZzAoJXIxMykKLS5MMDAxOgkJbXZjCV9fTENfSU9fTkVXX1BTVyg4KSwuTGlvbmV3LS5McGcwKCVyMTMpCQotLkx0cGk6CQlscHN3CS5Md2FpdHBzdy0uTHBnMCglcjEzKSAgICAgICAgICAKKy5MMDAxOgkJbXZjCV9fTENfSU9fTkVXX1BTVyg4KSwuTGlvbmV3LS5McGcwKCVyMTMpCisuTHRwaToJCWxwc3cJLkx3YWl0cHN3LS5McGcwKCVyMTMpCiAuTGNvbnQ6CQljCSVyMSxfX0xDX1NVQkNIQU5ORUxfSUQKIAkJam56CS5MdHBpCiAJCWNsYwlfX0xDX0lPX0lOVF9QQVJNKDQpLC5MaXBsb3JiLS5McGcwKCVyMTMpCiAJCWpuegkuTHRwaQotCQl0c2NoCS5MaXBsaXJiLS5McGcwKCVyMTMpICAgICAgICAgICAKKwkJdHNjaAkuTGlwbGlyYi0uTHBnMCglcjEzKQogCQl0bQkuTGlwbGlyYis5LS5McGcwKCVyMTMpLDB4YmYKLSAgICAgICAgICAgICAgICBqeiAgICAgIC5MMDAyCi0gICAgICAgICAgICAgICAgYmFzICAgICAlcjE0LC5MZGlzYWItLkxwZzAoJXIxMykgICAgCi0uTDAwMjoJCXRtCS5MaXBsaXJiKzgtLkxwZzAoJXIxMyksMHhmMyAgICAKLSAgICAgICAgICAgICAgICBqeiAgICAgIC5MMDAzCi0gICAgICAgICAgICAgICAgYmFzICAgICAlcjE0LC5MZGlzYWItLkxwZzAoJXIxMykJCisJCWp6CS5MMDAyCisJCWJhcwklcjE0LC5MZGlzYWItLkxwZzAoJXIxMykKKy5MMDAyOgkJdG0JLkxpcGxpcmIrOC0uTHBnMCglcjEzKSwweGYzCisJCWp6CS5MMDAzCisJCWJhcwklcjE0LC5MZGlzYWItLkxwZzAoJXIxMykKIC5MMDAzOgkJc3B4CS5MbnVsbC0uTHBnMCglcjEzKQotCQlzdCAJJXIxLF9fTENfU1VCQ0hBTk5FTF9JRAotICAgICAgICAgICAgICAgIGxwc3cgCTAKLQkJc2lncCAgICAwLDAsMCg2KSAgICAgICAgICAgICAgIAotLkxkaXNhYjoJc3QgICAgICAlcjE0LC5MZGlzcHN3KzQtLkxwZzAoJXIxMykKKwkJc3QJJXIxLF9fTENfU1VCQ0hBTk5FTF9JRAorCQlscHN3CTAKKwkJc2lncAkwLDAsMCg2KQorLkxkaXNhYjoJc3QJJXIxNCwuTGRpc3Bzdys0LS5McGcwKCVyMTMpCiAJCWxwc3cJLkxkaXNwc3ctLkxwZzAoJXIxMykKLSAgICAgICAgICAgICAgICAuYWxpZ24gCTgKKwkJLmFsaWduCTgKIC5MY2xrY21wOgkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAKIC5MYWxsOgkJLmxvbmcJMHhmZjAwMDAwMAotLkxudWxsOgkJLmxvbmcgICAweDAwMDAwMDAwCisuTG51bGw6CQkubG9uZwkweDAwMDAwMDAwCiAuTGN0bHNhdmUxOgkubG9uZwkweDAwMDAwMDAwCiAuTGN0bHNhdmUyOgkubG9uZwkweDAwMDAwMDAwCi0gICAgICAgICAgICAgICAgLmFsaWduIAk4Ci0uTG5ld3BzdzoJLmxvbmcgICAweDAwMDgwMDAwLDB4ODAwMDAwMDArLkxwZzEKLS5McGNuZXc6ICAJLmxvbmcgICAweDAwMDgwMDAwLDB4ODAwMDAwMDArLkxlY3MKLS5MaW9uZXc6CS5sb25nICAgMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5MY29udAorCQkuYWxpZ24JOAorLkxuZXdwc3c6CS5sb25nCTB4MDAwODAwMDAsMHg4MDAwMDAwMCsuTHBnMQorLkxwY25ldzoJLmxvbmcJMHgwMDA4MDAwMCwweDgwMDAwMDAwKy5MZWNzCisuTGlvbmV3OgkubG9uZwkweDAwMDgwMDAwLDB4ODAwMDAwMDArLkxjb250CiAuTHdhaXRwc3c6CS5sb25nCTB4MDIwYTAwMDAsMHgwMDAwMDAwMCsuTHRwaQotLkxkaXNwc3c6CS5sb25nICAgMHgwMDBhMDAwMCwweDAwMDAwMDAwCi0uTGlwbGNjd3M6CS5sb25nICAgMHgwMjAwMDAwMCwweDYwMDAwMDE4Ci0JCS5sb25nICAgMHgwODAwMDAwOCwweDIwMDAwMDAxCisuTGRpc3BzdzoJLmxvbmcJMHgwMDBhMDAwMCwweDAwMDAwMDAwCisuTGlwbGNjd3M6CS5sb25nCTB4MDIwMDAwMDAsMHg2MDAwMDAxOAorCQkubG9uZwkweDA4MDAwMDA4LDB4MjAwMDAwMDEKIC5MaXBsb3JiOgkubG9uZwkweDAwNDk1MDRjLDB4MDA0MGZmODAKIAkJLmxvbmcJMHgwMDAwMDAwMCsuTGlwbGNjd3MKLS5Mc2NoaWI6ICAgICAgICAubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQkubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQkubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQkubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQkubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQkubG9uZyAgIDB4MDAwMDAwMDAsMHgwMDAwMDAwMAorLkxzY2hpYjoJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIC5MaXBsaXJiOgkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMApAQCAtOTIsNiArOTIsMyBAQAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQotCi0JCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlaXBsNjQuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCmluZGV4IDk1YmQxZTIuLmRlNzQzNTAgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVpcGw2NC5TCkBAIC00LDcgKzQsNyBAQAogICogIFMzOTAgdmVyc2lvbgogICogICAgQ29weXJpZ2h0IChDKSAyMDAwIElCTSBEZXV0c2NobGFuZCBFbnR3aWNrbHVuZyBHbWJILCBJQk0gQ29ycG9yYXRpb24KICAqICAgIEF1dGhvcihzKTogSG9sZ2VyIFNtb2xpbnNraSAoSG9sZ2VyLlNtb2xpbnNraUBkZS5pYm0uY29tKQotCSAgICAgICAgIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKKwkJIERlbmlzIEpvc2VwaCBCYXJyb3cgKGRqYmFycm93QGRlLmlibS5jb20sYmFycm93X2RqQHlhaG9vLmNvbSkKICAqLwogCiAjaW5jbHVkZSA8YXNtL2xvd2NvcmUuaD4KQEAgLTMyLDQ2ICszMiw0NiBAQAogCQlzdGN0ZwklYzAsJWMwLC5McmVnc2F2ZS0uTHBnMCglcjEzKQogCQluaQkuTHJlZ3NhdmUrNC0uTHBnMCglcjEzKSwweGVmCiAJCWxjdGxnCSVjMCwlYzAsLkxyZWdzYXZlLS5McGcwKCVyMTMpCi0gICAgICAgICAgICAgICAgbGdyICAgICAlcjEsJXIyCi0gICAgICAgIAltdmMgICAgIF9fTENfUEdNX05FV19QU1coMTYpLC5McGNuZXctLkxwZzAoJXIxMykKLSAgICAgICAgICAgICAgICBzdHNjaCAgIC5Mc2NoaWItLkxwZzAoJXIxMykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQkgICAgICAgIG9pICAgICAgLkxzY2hpYis1LS5McGcwKCVyMTMpLDB4ODQgCi0uTGVjczogIAl4aSAgICAgIC5Mc2NoaWIrMjctLkxwZzAoJXIxMyksMHgwMSAKLSAgICAgICAgCW1zY2ggICAgLkxzY2hpYi0uTHBnMCglcjEzKSAKLQkgICAgICAgIGxnaGkgICAgJXIwLDUKLS5Mc3NjaDoJCXNzY2gJLkxpcGxvcmItLkxwZzAoJXIxMykgICAgICAgICAgIAorCQlsZ3IJJXIxLCVyMgorCQltdmMJX19MQ19QR01fTkVXX1BTVygxNiksLkxwY25ldy0uTHBnMCglcjEzKQorCQlzdHNjaAkuTHNjaGliLS5McGcwKCVyMTMpCisJCW9pCS5Mc2NoaWIrNS0uTHBnMCglcjEzKSwweDg0CisuTGVjczogIAl4aQkuTHNjaGliKzI3LS5McGcwKCVyMTMpLDB4MDEKKwkJbXNjaAkuTHNjaGliLS5McGcwKCVyMTMpCisJCWxnaGkJJXIwLDUKKy5Mc3NjaDoJCXNzY2gJLkxpcGxvcmItLkxwZzAoJXIxMykKIAkJanoJLkwwMDEKLQkJYnJjdCAgICAlcjAsLkxzc2NoICAgCisJCWJyY3QJJXIwLC5Mc3NjaAogCQliYXMJJXIxNCwuTGRpc2FiLS5McGcwKCVyMTMpCi0uTDAwMToJCW12YwlfX0xDX0lPX05FV19QU1coMTYpLC5MaW9uZXctLkxwZzAoJXIxMykJCi0uTHRwaToJCWxwc3dlCS5Md2FpdHBzdy0uTHBnMCglcjEzKSAgICAgICAgICAKKy5MMDAxOgkJbXZjCV9fTENfSU9fTkVXX1BTVygxNiksLkxpb25ldy0uTHBnMCglcjEzKQorLkx0cGk6CQlscHN3ZQkuTHdhaXRwc3ctLkxwZzAoJXIxMykKIC5MY29udDoJCWMJJXIxLF9fTENfU1VCQ0hBTk5FTF9JRAogCQlqbnoJLkx0cGkKIAkJY2xjCV9fTENfSU9fSU5UX1BBUk0oNCksLkxpcGxvcmItLkxwZzAoJXIxMykKIAkJam56CS5MdHBpCi0JCXRzY2gJLkxpcGxpcmItLkxwZzAoJXIxMykgICAgICAgICAgIAorCQl0c2NoCS5MaXBsaXJiLS5McGcwKCVyMTMpCiAJCXRtCS5MaXBsaXJiKzktLkxwZzAoJXIxMyksMHhiZgotICAgICAgICAgICAgICAgIGp6ICAgICAgLkwwMDIKLSAgICAgICAgICAgICAgICBiYXMgICAgICVyMTQsLkxkaXNhYi0uTHBnMCglcjEzKSAgICAKLS5MMDAyOgkJdG0JLkxpcGxpcmIrOC0uTHBnMCglcjEzKSwweGYzICAgIAotICAgICAgICAgICAgICAgIGp6ICAgICAgLkwwMDMKLSAgICAgICAgICAgICAgICBiYXMgICAgICVyMTQsLkxkaXNhYi0uTHBnMCglcjEzKQkKKwkJanoJLkwwMDIKKwkJYmFzCSVyMTQsLkxkaXNhYi0uTHBnMCglcjEzKQorLkwwMDI6CQl0bQkuTGlwbGlyYis4LS5McGcwKCVyMTMpLDB4ZjMKKwkJanoJLkwwMDMKKwkJYmFzCSVyMTQsLkxkaXNhYi0uTHBnMCglcjEzKQogLkwwMDM6CQlzcHgJLkxudWxsLS5McGcwKCVyMTMpCi0JCXN0IAklcjEsX19MQ19TVUJDSEFOTkVMX0lECi0gICAgICAgICAgICAgICAgbGhpICAgICAlcjEsMCAgICAgICAgICAgICMgbW9kZSAwID0gZXNhCi0gICAgICAgICAgICAgICAgc2xyICAgICAlcjAsJXIwICAgICAgICAgICMgc2V0IGNwdWlkIHRvIHplcm8KLSAgICAgICAgICAgICAgICBzaWdwICAgICVyMSwlcjAsMHgxMiAgICAgIyBzd2l0Y2ggdG8gZXNhIG1vZGUKLSAgICAgICAgICAgICAgICBscHN3IAkwCi0uTGRpc2FiOglzbGwgICAgJXIxNCwxCi0JCXNybCAgICAlcjE0LDEgICAgICAgICAgICAjIG5lZWQgdG8ga2lsbCBoaSBiaXQgdG8gYXZvaWQgc3BlY2lmaWNhdGlvbiBleGNlcHRpb25zLgotCQlzdCAgICAgJXIxNCwuTGRpc3BzdysxMi0uTHBnMCglcjEzKQorCQlzdAklcjEsX19MQ19TVUJDSEFOTkVMX0lECisJCWxoaQklcjEsMAkJICMgbW9kZSAwID0gZXNhCisJCXNscgklcjAsJXIwIAkgIyBzZXQgY3B1aWQgdG8gemVybworCQlzaWdwCSVyMSwlcjAsMHgxMgkgIyBzd2l0Y2ggdG8gZXNhIG1vZGUKKwkJbHBzdwkwCisuTGRpc2FiOglzbGwJJXIxNCwxCisJCXNybAklcjE0LDEJCSAjIG5lZWQgdG8ga2lsbCBoaSBiaXQgdG8gYXZvaWQgc3BlY2lmaWNhdGlvbiBleGNlcHRpb25zLgorCQlzdAklcjE0LC5MZGlzcHN3KzEyLS5McGcwKCVyMTMpCiAJCWxwc3dlCS5MZGlzcHN3LS5McGcwKCVyMTMpCi0gICAgICAgICAgICAgICAgLmFsaWduIAk4CisJCS5hbGlnbgk4CiAuTGNsa2NtcDoJLnF1YWQJMHgwMDAwMDAwMDAwMDAwMDAwCiAuTGFsbDoJCS5xdWFkCTB4MDAwMDAwMDBmZjAwMDAwMAogLkxyZWdzYXZlOgkucXVhZAkweDAwMDAwMDAwMDAwMDAwMDAKLS5MbnVsbDoJCS5sb25nICAgMHgwMDAwMDAwMDAwMDAwMDAwCi0gICAgICAgICAgICAgICAgLmFsaWduIAkxNgorLkxudWxsOgkJLmxvbmcJMHgwMDAwMDAwMDAwMDAwMDAwCisJCS5hbGlnbgkxNgogLyoKICAqIFRoZXNlIGFkZHJlc3NlcyBoYXZlIHRvIGJlIDMxIGJpdCBvdGhlcndpc2UKICAqIHRoZSBzaWdwIHdpbGwgdGhyb3cgYSBzcGVjaWZjYXRpb24gZXhjZXB0aW9uCkBAIC04MSwyNiArODEsMjYgQEAKICAqIDMxYml0IGxwc3dlIGluc3RydWN0aW9uIGEgZmFjdCB0aGV5IGFwcGVhciB0byBoYXZlCiAgKiBvbW1pdGVkIGZyb20gdGhlIHBvcC4KICAqLwotLkxuZXdwc3c6CS5xdWFkICAgMHgwMDAwMDAwMDgwMDAwMDAwCi0JCS5xdWFkICAgLkxwZzEKLS5McGNuZXc6CS5xdWFkICAgMHgwMDAwMDAwMDgwMDAwMDAwCi0JICAJLnF1YWQgICAuTGVjcwotLkxpb25ldzoJLnF1YWQgICAweDAwMDAwMDAwODAwMDAwMDAKLQkJLnF1YWQgICAuTGNvbnQKKy5MbmV3cHN3OgkucXVhZAkweDAwMDAwMDAwODAwMDAwMDAKKwkJLnF1YWQJLkxwZzEKKy5McGNuZXc6CS5xdWFkCTB4MDAwMDAwMDA4MDAwMDAwMAorCQkucXVhZAkuTGVjcworLkxpb25ldzoJLnF1YWQJMHgwMDAwMDAwMDgwMDAwMDAwCisJCS5xdWFkCS5MY29udAogLkx3YWl0cHN3OgkucXVhZAkweDAyMDIwMDAwODAwMDAwMDAKLQkJLnF1YWQgICAuTHRwaQotLkxkaXNwc3c6CS5xdWFkICAgMHgwMDAyMDAwMDgwMDAwMDAwCi0JCS5xdWFkICAgMHgwMDAwMDAwMDAwMDAwMDAwCi0uTGlwbGNjd3M6CS5sb25nICAgMHgwMjAwMDAwMCwweDYwMDAwMDE4Ci0JCS5sb25nICAgMHgwODAwMDAwOCwweDIwMDAwMDAxCisJCS5xdWFkCS5MdHBpCisuTGRpc3BzdzoJLnF1YWQJMHgwMDAyMDAwMDgwMDAwMDAwCisJCS5xdWFkCTB4MDAwMDAwMDAwMDAwMDAwMAorLkxpcGxjY3dzOgkubG9uZwkweDAyMDAwMDAwLDB4NjAwMDAwMTgKKwkJLmxvbmcJMHgwODAwMDAwOCwweDIwMDAwMDAxCiAuTGlwbG9yYjoJLmxvbmcJMHgwMDQ5NTA0YywweDAwNDBmZjgwCiAJCS5sb25nCTB4MDAwMDAwMDArLkxpcGxjY3dzCi0uTHNjaGliOiAgICAgICAgLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLQkJLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLQkJLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLQkJLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLQkJLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKLQkJLmxvbmcgICAweDAwMDAwMDAwLDB4MDAwMDAwMDAKKy5Mc2NoaWI6CS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCisJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAorCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKKwkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAuTGlwbGlyYjoJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKQEAgLTEwOSw0ICsxMDksMyBAQAogCQkubG9uZwkweDAwMDAwMDAwLDB4MDAwMDAwMDAKIAkJLmxvbmcJMHgwMDAwMDAwMCwweDAwMDAwMDAwCiAJCS5sb25nCTB4MDAwMDAwMDAsMHgwMDAwMDAwMAotCQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUyBiL2FyY2gvczM5MC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsLlMKaW5kZXggMmEyNWVjNy4uZjk4OTlmZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWwuUworKysgYi9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbC5TCkBAIC0zLDcgKzMsNyBAQAogICoKICAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnAuIDIwMDUKICAqCi0gKiBBdXRob3Iocyk6IFJvbGYgQWRlbHNiZXJnZXIgPGFkZWxzYmVyZ2VyQGRlLmlibS5jb20+CisgKiBBdXRob3Iocyk6IFJvbGYgQWRlbHNiZXJnZXIsCiAgKgkgICAgICBIZWlrbyBDYXJzdGVucyA8aGVpa28uY2Fyc3RlbnNAZGUuaWJtLmNvbT4KICAqCiAgKi8KQEAgLTI0LDE0ICsyNCwxNCBAQAogCS50ZXh0CiAJLmdsb2JsCQlyZWxvY2F0ZV9rZXJuZWwKIAlyZWxvY2F0ZV9rZXJuZWw6Ci0JCWJhc3IJJXIxMywwCQkjYmFzZSBhZGRyZXNzCisJCWJhc3IJJXIxMywwCQkjIGJhc2UgYWRkcmVzcwogCS5iYXNlOgotCQlzdG5zbQlzeXNfbXNrLS5iYXNlKCVyMTMpLDB4ZjgJI2Rpc2FibGUgREFUIGFuZCBJUlEgKGV4dGVybmFsKQotCQlzcHgJemVybzY0LS5iYXNlKCVyMTMpCSNhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUKKwkJc3Ruc20Jc3lzX21zay0uYmFzZSglcjEzKSwweGY4CSMgZGlzYWJsZSBEQVQgYW5kIElSUSAoZXh0ZXJuYWwpCisJCXNweAl6ZXJvNjQtLmJhc2UoJXIxMykJIyBhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUKIAkJc3RjdGwJJWMwLCVjMTUsY3RscmVncy0uYmFzZSglcjEzKQogCQlzdG0JJXIwLCVyMTUsZ3BycmVncy0uYmFzZSglcjEzKQogCQlsYQklcjEsbG9hZF9wc3ctLmJhc2UoJXIxMykKLQkJbXZjICAgICAwKDgsJXIwKSwwKCVyMSkKKwkJbXZjCTAoOCwlcjApLDAoJXIxKQogCQlsYQklcjAsLmJhY2stLmJhc2UoJXIxMykKIAkJc3QJJXIwLDQoJXIwKQogCQlvaQk0KCVyMCksMHg4MApAQCAtNTEsNTAgKzUxLDUwIEBACiAJLmJhY2tfcGdtOgogCQlsbQklcjAsJXIxNSxncHJyZWdzLS5iYXNlKCVyMTMpCiAJLnN0YXJ0X3JlbG9jOgotCQlsaGkJJXIxMCwtMQkJI3ByZXBhcmluZyB0aGUgbWFzawotCQlzbGwJJXIxMCwxMgkJI3NoaWZ0IGl0IHN1Y2ggdGhhdCBpdCBiZWNvbWVzIDB4ZjAwMAorCQlsaGkJJXIxMCwtMQkJIyBwcmVwYXJpbmcgdGhlIG1hc2sKKwkJc2xsCSVyMTAsMTIJCSMgc2hpZnQgaXQgc3VjaCB0aGF0IGl0IGJlY29tZXMgMHhmMDAwCiAJLnRvcDoKLQkJbGhpCSVyNyw0MDk2CSNsb2FkIFBBR0VfU0laRSBpbiByNwotCQlsaGkJJXI5LDQwOTYJI2xvYWQgUEFHRV9TSVpFIGluIHI5Ci0JCWwJJXI1LDAoJXIyKQkjcmVhZCBhbm90aGVyIHdvcmQgZm9yIGluZGlyZWN0aW9uIHBhZ2UKLQkJYWhpCSVyMiw0CQkjaW5jcmVtZW50IHBvaW50ZXIKLQkJdG1sCSVyNSwweDEJCSNpcyBpdCBhIGRlc3RpbmF0aW9uIHBhZ2U/Ci0JCWplCS5pbmRpcl9jaGVjawkjTk8sIGdvdG8gImluZGlyX2NoZWNrIgotCQlscgklcjYsJXI1CQkjcjYgPSByNQotCQlucgklcjYsJXIxMAkjbWFzayBpdCBvdXQgYW5kLi4uCi0JCWoJLnRvcAkJIy4uLm5leHQgaXRlcmF0aW9uCisJCWxoaQklcjcsNDA5NgkjIGxvYWQgUEFHRV9TSVpFIGluIHI3CisJCWxoaQklcjksNDA5NgkjIGxvYWQgUEFHRV9TSVpFIGluIHI5CisJCWwJJXI1LDAoJXIyKQkjIHJlYWQgYW5vdGhlciB3b3JkIGZvciBpbmRpcmVjdGlvbiBwYWdlCisJCWFoaQklcjIsNAkJIyBpbmNyZW1lbnQgcG9pbnRlcgorCQl0bWwJJXI1LDB4MQkJIyBpcyBpdCBhIGRlc3RpbmF0aW9uIHBhZ2U/CisJCWplCS5pbmRpcl9jaGVjawkjIE5PLCBnb3RvICJpbmRpcl9jaGVjayIKKwkJbHIJJXI2LCVyNQkJIyByNiA9IHI1CisJCW5yCSVyNiwlcjEwCSMgbWFzayBpdCBvdXQgYW5kLi4uCisJCWoJLnRvcAkJIyAuLi5uZXh0IGl0ZXJhdGlvbgogCS5pbmRpcl9jaGVjazoKLQkJdG1sCSVyNSwweDIJCSNpcyBpdCBhIGluZGlyZWN0aW9uIHBhZ2U/Ci0JCWplCS5kb25lX3Rlc3QJI05PLCBnb3RvICJkb25lX3Rlc3QiCi0JCW5yCSVyNSwlcjEwCSNZRVMsIG1hc2sgb3V0LAotCQlscgklcjIsJXI1CQkjbW92ZSBpdCBpbnRvIHRoZSByaWdodCByZWdpc3RlciwKLQkJagkudG9wCQkjYW5kIHJlYWQgbmV4dC4uLgorCQl0bWwJJXI1LDB4MgkJIyBpcyBpdCBhIGluZGlyZWN0aW9uIHBhZ2U/CisJCWplCS5kb25lX3Rlc3QJIyBOTywgZ290byAiZG9uZV90ZXN0IgorCQlucgklcjUsJXIxMAkjIFlFUywgbWFzayBvdXQsCisJCWxyCSVyMiwlcjUJCSMgbW92ZSBpdCBpbnRvIHRoZSByaWdodCByZWdpc3RlciwKKwkJagkudG9wCQkjIGFuZCByZWFkIG5leHQuLi4KIAkuZG9uZV90ZXN0OgotCQl0bWwJJXI1LDB4NAkJI2lzIGl0IHRoZSBkb25lIGluZGljYXRvcj8KLQkJamUJLnNvdXJjZV90ZXN0CSNOTyEgV2VsbCwgdGhlbiBpdCBzaG91bGQgYmUgdGhlIHNvdXJjZSBpbmRpY2F0b3IuLi4KLQkJagkuZG9uZQkJI29rLCBsZXRzIGZpbmlzaCBpdCBoZXJlLi4uCisJCXRtbAklcjUsMHg0CQkjIGlzIGl0IHRoZSBkb25lIGluZGljYXRvcj8KKwkJamUJLnNvdXJjZV90ZXN0CSMgTk8hIFdlbGwsIHRoZW4gaXQgc2hvdWxkIGJlIHRoZSBzb3VyY2UgaW5kaWNhdG9yLi4uCisJCWoJLmRvbmUJCSMgb2ssIGxldHMgZmluaXNoIGl0IGhlcmUuLi4KIAkuc291cmNlX3Rlc3Q6Ci0JCXRtbAklcjUsMHg4CQkjaXQgc2hvdWxkIGJlIGEgc291cmNlIGluZGljYXRvci4uLgotCQlqZQkudG9wCQkjTk8sIGlnbm9yZSBpdC4uLgotCQlscgklcjgsJXI1CQkjcjggPSByNQotCQlucgklcjgsJXIxMAkjbWFza2luZwotCTA6CW12Y2xlCSVyNiwlcjgsMHgwCSNjb3B5IFBBR0VfU0laRSBieXRlcyBmcm9tIHI4IHRvIHI2IC0gcGFkIHdpdGggMAorCQl0bWwJJXI1LDB4OAkJIyBpdCBzaG91bGQgYmUgYSBzb3VyY2UgaW5kaWNhdG9yLi4uCisJCWplCS50b3AJCSMgTk8sIGlnbm9yZSBpdC4uLgorCQlscgklcjgsJXI1CQkjIHI4ID0gcjUKKwkJbnIJJXI4LCVyMTAJIyBtYXNraW5nCisJMDoJbXZjbGUJJXI2LCVyOCwweDAJIyBjb3B5IFBBR0VfU0laRSBieXRlcyBmcm9tIHI4IHRvIHI2IC0gcGFkIHdpdGggMAogCQlqbwkwYgogCQlqCS50b3AKIAkuZG9uZToKLQkJc3IJJXIwLCVyMAkJI2NsZWFyIHJlZ2lzdGVyIHIwCi0JCWxhCSVyNCxsb2FkX3Bzdy0uYmFzZSglcjEzKQkjbG9hZCBwc3ctYWRkcmVzcyBpbnRvIHRoZSByZWdpc3RlcgotCQlvCSVyMyw0KCVyNCkJI29yIGxvYWQgYWRkcmVzcyBpbnRvIHBzdworCQlzcgklcjAsJXIwCQkjIGNsZWFyIHJlZ2lzdGVyIHIwCisJCWxhCSVyNCxsb2FkX3Bzdy0uYmFzZSglcjEzKQkjIGxvYWQgcHN3LWFkZHJlc3MgaW50byB0aGUgcmVnaXN0ZXIKKwkJbwklcjMsNCglcjQpCSMgb3IgbG9hZCBhZGRyZXNzIGludG8gcHN3CiAJCXN0CSVyMyw0KCVyNCkKLQkJbXZjCTAoOCwlcjApLDAoJXI0KQkjY29weSBwc3cgdG8gYWJzb2x1dGUgYWRkcmVzcyAwCisJCW12YwkwKDgsJXIwKSwwKCVyNCkJIyBjb3B5IHBzdyB0byBhYnNvbHV0ZSBhZGRyZXNzIDAKIAkJdG0JaGF2ZV9kaWFnMzA4LS5iYXNlKCVyMTMpLDB4MDEKIAkJam5vCS5ub19kaWFnMzA4CiAJCWRpYWcJJXIwLCVyMCwweDMwOAogCS5ub19kaWFnMzA4OgotCQlzcgklcjEsJXIxCQkjY2xlYXIgJXIxCi0JCXNyCSVyMiwlcjIJCSNjbGVhciAlcjIKLQkJc2lncAklcjEsJXIyLDB4MTIJI3NldCBjcHVpZCB0byB6ZXJvCi0JCWxwc3cJMAkJI2hvcGVmdWxseSBzdGFydCBuZXcga2VybmVsLi4uCisJCXNyCSVyMSwlcjEJCSMgY2xlYXIgJXIxCisJCXNyCSVyMiwlcjIJCSMgY2xlYXIgJXIyCisJCXNpZ3AJJXIxLCVyMiwweDEyCSMgc2V0IGNwdWlkIHRvIHplcm8KKwkJbHBzdwkwCQkjIGhvcGVmdWxseSBzdGFydCBuZXcga2VybmVsLi4uCiAKIAkJLmFsaWduCTgKIAl6ZXJvNjQ6CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbDY0LlMgYi9hcmNoL3MzOTAva2VybmVsL3JlbG9jYXRlX2tlcm5lbDY0LlMKaW5kZXggOGNkYjg2ZS4uNGZiNDQzMCAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWw2NC5TCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvcmVsb2NhdGVfa2VybmVsNjQuUwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAoQykgQ29weXJpZ2h0IElCTSBDb3JwLiAyMDA1CiAgKgotICogQXV0aG9yKHMpOiBSb2xmIEFkZWxzYmVyZ2VyIDxhZGVsc2JlcmdlckBkZS5pYm0uY29tPgorICogQXV0aG9yKHMpOiBSb2xmIEFkZWxzYmVyZ2VyLAogICoJICAgICAgSGVpa28gQ2Fyc3RlbnMgPGhlaWtvLmNhcnN0ZW5zQGRlLmlibS5jb20+CiAgKgogICovCkBAIC0yNSwxMCArMjUsMTAgQEAKIAkudGV4dAogCS5nbG9ibAkJcmVsb2NhdGVfa2VybmVsCiAJcmVsb2NhdGVfa2VybmVsOgotCQliYXNyCSVyMTMsMAkJI2Jhc2UgYWRkcmVzcworCQliYXNyCSVyMTMsMAkJIyBiYXNlIGFkZHJlc3MKIAkuYmFzZToKLQkJc3Ruc20Jc3lzX21zay0uYmFzZSglcjEzKSwweGY4CSNkaXNhYmxlIERBVCBhbmQgSVJRcwotCQlzcHgJemVybzY0LS5iYXNlKCVyMTMpCSNhYnNvbHV0ZSBhZGRyZXNzaW5nIG1vZGUKKwkJc3Ruc20Jc3lzX21zay0uYmFzZSglcjEzKSwweGY4CSMgZGlzYWJsZSBEQVQgYW5kIElSUXMKKwkJc3B4CXplcm82NC0uYmFzZSglcjEzKQkjIGFic29sdXRlIGFkZHJlc3NpbmcgbW9kZQogCQlzdGN0ZwklYzAsJWMxNSxjdGxyZWdzLS5iYXNlKCVyMTMpCiAJCXN0bWcJJXIwLCVyMTUsZ3BycmVncy0uYmFzZSglcjEzKQogCQlsZ2hpCSVyMCwzCkBAIC0zNywxNiArMzcsMTYgQEAKIAkJbGEJJXIwLC5iYWNrX3BnbS0uYmFzZSglcjEzKQogCQlzdGcJJXIwLDB4MWQ4KCVyMCkKIAkJbGEJJXIxLGxvYWRfcHN3LS5iYXNlKCVyMTMpCi0JCW12YyAgICAgMCg4LCVyMCksMCglcjEpCisJCW12YwkwKDgsJXIwKSwwKCVyMSkKIAkJbGEJJXIwLC5iYWNrLS5iYXNlKCVyMTMpCiAJCXN0CSVyMCw0KCVyMCkKIAkJb2kJNCglcjApLDB4ODAKIAkJbGdoaQklcjAsMAogCQlkaWFnCSVyMCwlcjAsMHgzMDgKIAkuYmFjazoKLQkJbGhpCSVyMSwxCQkjbW9kZSAxID0gZXNhbWUKLQkJc2lncAklcjEsJXIwLDB4MTIJI3N3aXRjaCB0byBlc2FtZSBtb2RlCi0JCXNhbTY0CQkJI3N3aXRjaCB0byA2NCBiaXQgYWRkcmVzc2luZyBtb2RlCisJCWxoaQklcjEsMQkJIyBtb2RlIDEgPSBlc2FtZQorCQlzaWdwCSVyMSwlcjAsMHgxMgkjIHN3aXRjaCB0byBlc2FtZSBtb2RlCisJCXNhbTY0CQkJIyBzd2l0Y2ggdG8gNjQgYml0IGFkZHJlc3NpbmcgbW9kZQogCQliYXNyCSVyMTMsMAogCS5iYWNrX2Jhc2U6CiAJCW9pCWhhdmVfZGlhZzMwOC0uYmFja19iYXNlKCVyMTMpLDB4MDEKQEAgLTU2LDUwICs1Niw1MCBAQAogCS5iYWNrX3BnbToKIAkJbG1nCSVyMCwlcjE1LGdwcnJlZ3MtLmJhc2UoJXIxMykKIAkudG9wOgotCQlsZ2hpCSVyNyw0MDk2CSNsb2FkIFBBR0VfU0laRSBpbiByNwotCQlsZ2hpCSVyOSw0MDk2CSNsb2FkIFBBR0VfU0laRSBpbiByOQotCQlsZwklcjUsMCglcjIpCSNyZWFkIGFub3RoZXIgd29yZCBmb3IgaW5kaXJlY3Rpb24gcGFnZQotCQlhZ2hpCSVyMiw4CQkjaW5jcmVtZW50IHBvaW50ZXIKLQkJdG1sCSVyNSwweDEJCSNpcyBpdCBhIGRlc3RpbmF0aW9uIHBhZ2U/Ci0JCWplCS5pbmRpcl9jaGVjawkjTk8sIGdvdG8gImluZGlyX2NoZWNrIgotCQlsZ3IJJXI2LCVyNQkJI3I2ID0gcjUKLQkJbmlsbAklcjYsMHhmMDAwCSNtYXNrIGl0IG91dCBhbmQuLi4KLQkJagkudG9wCQkjLi4ubmV4dCBpdGVyYXRpb24KKwkJbGdoaQklcjcsNDA5NgkjIGxvYWQgUEFHRV9TSVpFIGluIHI3CisJCWxnaGkJJXI5LDQwOTYJIyBsb2FkIFBBR0VfU0laRSBpbiByOQorCQlsZwklcjUsMCglcjIpCSMgcmVhZCBhbm90aGVyIHdvcmQgZm9yIGluZGlyZWN0aW9uIHBhZ2UKKwkJYWdoaQklcjIsOAkJIyBpbmNyZW1lbnQgcG9pbnRlcgorCQl0bWwJJXI1LDB4MQkJIyBpcyBpdCBhIGRlc3RpbmF0aW9uIHBhZ2U/CisJCWplCS5pbmRpcl9jaGVjawkjIE5PLCBnb3RvICJpbmRpcl9jaGVjayIKKwkJbGdyCSVyNiwlcjUJCSMgcjYgPSByNQorCQluaWxsCSVyNiwweGYwMDAJIyBtYXNrIGl0IG91dCBhbmQuLi4KKwkJagkudG9wCQkjIC4uLm5leHQgaXRlcmF0aW9uCiAJLmluZGlyX2NoZWNrOgotCQl0bWwgICAgICVyNSwweDIJCSNpcyBpdCBhIGluZGlyZWN0aW9uIHBhZ2U/Ci0JCWplICAgICAgLmRvbmVfdGVzdAkjTk8sIGdvdG8gImRvbmVfdGVzdCIKLQkJbmlsbCAgICAlcjUsMHhmMDAwCSNZRVMsIG1hc2sgb3V0LAotCQlsZ3IgICAgICVyMiwlcjUJCSNtb3ZlIGl0IGludG8gdGhlIHJpZ2h0IHJlZ2lzdGVyLAotCQlqICAgICAgIC50b3AJCSNhbmQgcmVhZCBuZXh0Li4uCisJCXRtbAklcjUsMHgyCQkjIGlzIGl0IGEgaW5kaXJlY3Rpb24gcGFnZT8KKwkJamUJLmRvbmVfdGVzdAkjIE5PLCBnb3RvICJkb25lX3Rlc3QiCisJCW5pbGwJJXI1LDB4ZjAwMAkjIFlFUywgbWFzayBvdXQsCisJCWxncgklcjIsJXI1CQkjIG1vdmUgaXQgaW50byB0aGUgcmlnaHQgcmVnaXN0ZXIsCisJCWoJLnRvcAkJIyBhbmQgcmVhZCBuZXh0Li4uCiAJLmRvbmVfdGVzdDoKLQkJdG1sICAgICAlcjUsMHg0CQkjaXMgaXQgdGhlIGRvbmUgaW5kaWNhdG9yPwotCQlqZSAgICAgIC5zb3VyY2VfdGVzdAkjTk8hIFdlbGwsIHRoZW4gaXQgc2hvdWxkIGJlIHRoZSBzb3VyY2UgaW5kaWNhdG9yLi4uCi0JCWogICAgICAgLmRvbmUJCSNvaywgbGV0cyBmaW5pc2ggaXQgaGVyZS4uLgorCQl0bWwJJXI1LDB4NAkJIyBpcyBpdCB0aGUgZG9uZSBpbmRpY2F0b3I/CisJCWplCS5zb3VyY2VfdGVzdAkjIE5PISBXZWxsLCB0aGVuIGl0IHNob3VsZCBiZSB0aGUgc291cmNlIGluZGljYXRvci4uLgorCQlqCS5kb25lCQkjIG9rLCBsZXRzIGZpbmlzaCBpdCBoZXJlLi4uCiAJLnNvdXJjZV90ZXN0OgotCQl0bWwgICAgICVyNSwweDgJCSNpdCBzaG91bGQgYmUgYSBzb3VyY2UgaW5kaWNhdG9yLi4uCi0JCWplICAgICAgLnRvcAkJI05PLCBpZ25vcmUgaXQuLi4KLQkJbGdyICAgICAlcjgsJXI1CQkjcjggPSByNQotCQluaWxsICAgICVyOCwweGYwMDAJI21hc2tpbmcKLQkwOgltdmNsZSAgICVyNiwlcjgsMHgwCSNjb3B5IFBBR0VfU0laRSBieXRlcyBmcm9tIHI4IHRvIHI2IC0gcGFkIHdpdGggMAorCQl0bWwJJXI1LDB4OAkJIyBpdCBzaG91bGQgYmUgYSBzb3VyY2UgaW5kaWNhdG9yLi4uCisJCWplCS50b3AJCSMgTk8sIGlnbm9yZSBpdC4uLgorCQlsZ3IJJXI4LCVyNQkJIyByOCA9IHI1CisJCW5pbGwJJXI4LDB4ZjAwMAkjIG1hc2tpbmcKKwkwOgltdmNsZQklcjYsJXI4LDB4MAkjIGNvcHkgUEFHRV9TSVpFIGJ5dGVzIGZyb20gcjggdG8gcjYgLSBwYWQgd2l0aCAwCiAJCWpvCTBiCi0JCWogICAgICAgLnRvcAorCQlqCS50b3AKIAkuZG9uZToKLQkJc2dyICAgICAlcjAsJXIwCQkjY2xlYXIgcmVnaXN0ZXIgcjAKLQkJbGEgICAgICAlcjQsbG9hZF9wc3ctLmJhc2UoJXIxMykJI2xvYWQgcHN3LWFkZHJlc3MgaW50byB0aGUgcmVnaXN0ZXIKLQkJbwklcjMsNCglcjQpCSNvciBsb2FkIGFkZHJlc3MgaW50byBwc3cKKwkJc2dyCSVyMCwlcjAJCSMgY2xlYXIgcmVnaXN0ZXIgcjAKKwkJbGEJJXI0LGxvYWRfcHN3LS5iYXNlKCVyMTMpCSMgbG9hZCBwc3ctYWRkcmVzcyBpbnRvIHRoZSByZWdpc3RlcgorCQlvCSVyMyw0KCVyNCkJIyBvciBsb2FkIGFkZHJlc3MgaW50byBwc3cKIAkJc3QJJXIzLDQoJXI0KQotCQltdmMgICAgIDAoOCwlcjApLDAoJXI0KQkjY29weSBwc3cgdG8gYWJzb2x1dGUgYWRkcmVzcyAwCisJCW12YwkwKDgsJXIwKSwwKCVyNCkJIyBjb3B5IHBzdyB0byBhYnNvbHV0ZSBhZGRyZXNzIDAKIAkJdG0JaGF2ZV9kaWFnMzA4LS5iYXNlKCVyMTMpLDB4MDEKIAkJam5vCS5ub19kaWFnMzA4CiAJCWRpYWcJJXIwLCVyMCwweDMwOAogCS5ub19kaWFnMzA4OgotCQlzYW0zMQkJCSMzMSBiaXQgbW9kZQotCQlzciAgICAgICVyMSwlcjEJCSNlcmFzZSByZWdpc3RlciByMQotCQlzciAgICAgICVyMiwlcjIJCSNlcmFzZSByZWdpc3RlciByMgotCQlzaWdwICAgICVyMSwlcjIsMHgxMgkjc2V0IGNwdWlkIHRvIHplcm8KLQkJbHBzdyAgICAwCQkjaG9wZWZ1bGx5IHN0YXJ0IG5ldyBrZXJuZWwuLi4KKwkJc2FtMzEJCQkjIDMxIGJpdCBtb2RlCisJCXNyCSVyMSwlcjEJCSMgZXJhc2UgcmVnaXN0ZXIgcjEKKwkJc3IJJXIyLCVyMgkJIyBlcmFzZSByZWdpc3RlciByMgorCQlzaWdwCSVyMSwlcjIsMHgxMgkjIHNldCBjcHVpZCB0byB6ZXJvCisJCWxwc3cJMAkJIyBob3BlZnVsbHkgc3RhcnQgbmV3IGtlcm5lbC4uLgogCi0JICAgICAgICAuYWxpZ24JOAorCQkuYWxpZ24JOAogCXplcm82NDoKIAkJLnF1YWQJMAogCWxvYWRfcHN3OgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zZW1hcGhvcmUuYyBiL2FyY2gvczM5MC9rZXJuZWwvc2VtYXBob3JlLmMKaW5kZXggOGRmYjY5MC4uMTkxMzAzZiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NlbWFwaG9yZS5jCkBAIC0yNiwxNyArMjYsMTcgQEAKIHsKIAlpbnQgb2xkX3ZhbCwgbmV3X3ZhbDsKIAotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgbCAgICAgJTAsMCglMylcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA6IGx0ciAgICUxLCUwXG4iCi0JCQkgICAgICIgICBqaGUgICAxZlxuIgotCQkJICAgICAiICAgbGhpICAgJTEsMFxuIgotCQkJICAgICAiMTogYXIgICAgJTEsJTRcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGNzICAgICUwLCUxLDAoJTMpXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbCAgICAwYlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLAotCQkJICAgICAgICI9bSIgKHNlbS0+Y291bnQpCi0JCQkgICAgIDogImEiICgmc2VtLT5jb3VudCksICJkIiAoaW5jciksICJtIiAoc2VtLT5jb3VudCkKLQkJCSAgICAgOiAiY2MiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiCWwJJTAsMCglMylcbiIKKwkJIjA6CWx0cgklMSwlMFxuIgorCQkiCWpoZQkxZlxuIgorCQkiCWxoaQklMSwwXG4iCisJCSIxOglhcgklMSwlNFxuIgorCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGJcbiIKKwkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiYSIgKCZzZW0tPmNvdW50KSwgImQiIChpbmNyKSwgIm0iIChzZW0tPmNvdW50KQorCQk6ICJjYyIpOwogCXJldHVybiBvbGRfdmFsOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMgYi9hcmNoL3MzOTAva2VybmVsL3NldHVwLmMKaW5kZXggZTNkOTMyNS4uYTIxY2ZiYiAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvc2V0dXAuYwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFN0b3JlIHByb2Nlc3NvciBpZCBpbiBsb3djb3JlICh1c2VkIGUuZy4gaW4gdGltZXJfaW50ZXJydXB0KQogICAgICAgICAgKi8KLSAgICAgICAgYXNtIHZvbGF0aWxlICgic3RpZHAgJTAiOiAiPW0iIChTMzkwX2xvd2NvcmUuY3B1X2RhdGEuY3B1X2lkKSk7CisJYXNtIHZvbGF0aWxlKCJzdGlkcCAlMCI6ICI9bSIgKFMzOTBfbG93Y29yZS5jcHVfZGF0YS5jcHVfaWQpKTsKICAgICAgICAgUzM5MF9sb3djb3JlLmNwdV9kYXRhLmNwdV9hZGRyID0gYWRkcjsKIAogICAgICAgICAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYyBiL2FyY2gvczM5MC9rZXJuZWwvc21wLmMKaW5kZXggYjJlNmY0Yy4uYThlNjE5OSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL3MzOTAva2VybmVsL3NtcC5jCkBAIC02Myw3ICs2Myw3IEBACiBzdGF0aWMgdm9pZCBzbXBfZXh0X2JpdGNhbGxfb3RoZXJzKGVjX2JpdF9zaWcpOwogCiAvKgotICogU3RydWN0dXJlIGFuZCBkYXRhIGZvciBzbXBfY2FsbF9mdW5jdGlvbigpLiBUaGlzIGlzIGRlc2lnbmVkIHRvIG1pbmltaXNlCis1QiAqIFN0cnVjdHVyZSBhbmQgZGF0YSBmb3Igc21wX2NhbGxfZnVuY3Rpb24oKS4gVGhpcyBpcyBkZXNpZ25lZCB0byBtaW5pbWlzZQogICogc3RhdGljIG1lbW9yeSByZXF1aXJlbWVudHMuIEl0IGFsc28gbG9va3MgY2xlYW5lci4KICAqLwogc3RhdGljIERFRklORV9TUElOTE9DSyhjYWxsX2xvY2spOwpAQCAtNDE4LDU5ICs0MTgsNDkgQEAKIC8qCiAgKiBwYXJhbWV0ZXIgYXJlYSBmb3IgdGhlIHNldC9jbGVhciBjb250cm9sIGJpdCBjYWxsYmFja3MKICAqLwotdHlwZWRlZiBzdHJ1Y3QKLXsKLQlfX3UxNiBzdGFydF9jdGw7Ci0JX191MTYgZW5kX2N0bDsKK3N0cnVjdCBlY19jcmVnX21hc2tfcGFybXMgewogCXVuc2lnbmVkIGxvbmcgb3J2YWxzWzE2XTsKIAl1bnNpZ25lZCBsb25nIGFuZHZhbHNbMTZdOwotfSBlY19jcmVnX21hc2tfcGFybXM7Cit9OwogCiAvKgogICogY2FsbGJhY2sgZm9yIHNldHRpbmcvY2xlYXJpbmcgY29udHJvbCBiaXRzCiAgKi8KIHZvaWQgc21wX2N0bF9iaXRfY2FsbGJhY2sodm9pZCAqaW5mbykgewotCWVjX2NyZWdfbWFza19wYXJtcyAqcHA7CisJc3RydWN0IGVjX2NyZWdfbWFza19wYXJtcyAqcHAgPSBpbmZvOwogCXVuc2lnbmVkIGxvbmcgY3JlZ3NbMTZdOwogCWludCBpOwogCQotCXBwID0gKGVjX2NyZWdfbWFza19wYXJtcyAqKSBpbmZvOwotCV9fY3RsX3N0b3JlKGNyZWdzW3BwLT5zdGFydF9jdGxdLCBwcC0+c3RhcnRfY3RsLCBwcC0+ZW5kX2N0bCk7Ci0JZm9yIChpID0gcHAtPnN0YXJ0X2N0bDsgaSA8PSBwcC0+ZW5kX2N0bDsgaSsrKQorCV9fY3RsX3N0b3JlKGNyZWdzLCAwLCAxNSk7CisJZm9yIChpID0gMDsgaSA8PSAxNTsgaSsrKQogCQljcmVnc1tpXSA9IChjcmVnc1tpXSAmIHBwLT5hbmR2YWxzW2ldKSB8IHBwLT5vcnZhbHNbaV07Ci0JX19jdGxfbG9hZChjcmVnc1twcC0+c3RhcnRfY3RsXSwgcHAtPnN0YXJ0X2N0bCwgcHAtPmVuZF9jdGwpOworCV9fY3RsX2xvYWQoY3JlZ3MsIDAsIDE1KTsKIH0KIAogLyoKICAqIFNldCBhIGJpdCBpbiBhIGNvbnRyb2wgcmVnaXN0ZXIgb2YgYWxsIGNwdXMKICAqLwotdm9pZCBzbXBfY3RsX3NldF9iaXQoaW50IGNyLCBpbnQgYml0KSB7Ci0gICAgICAgIGVjX2NyZWdfbWFza19wYXJtcyBwYXJtczsKK3ZvaWQgc21wX2N0bF9zZXRfYml0KGludCBjciwgaW50IGJpdCkKK3sKKwlzdHJ1Y3QgZWNfY3JlZ19tYXNrX3Bhcm1zIHBhcm1zOwogCi0JcGFybXMuc3RhcnRfY3RsID0gY3I7Ci0JcGFybXMuZW5kX2N0bCA9IGNyOworCW1lbXNldCgmcGFybXMub3J2YWxzLCAwLCBzaXplb2YocGFybXMub3J2YWxzKSk7CisJbWVtc2V0KCZwYXJtcy5hbmR2YWxzLCAweGZmLCBzaXplb2YocGFybXMuYW5kdmFscykpOwogCXBhcm1zLm9ydmFsc1tjcl0gPSAxIDw8IGJpdDsKLQlwYXJtcy5hbmR2YWxzW2NyXSA9IC0xTDsKLQlwcmVlbXB0X2Rpc2FibGUoKTsKLQlzbXBfY2FsbF9mdW5jdGlvbihzbXBfY3RsX2JpdF9jYWxsYmFjaywgJnBhcm1zLCAwLCAxKTsKLSAgICAgICAgX19jdGxfc2V0X2JpdChjciwgYml0KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCW9uX2VhY2hfY3B1KHNtcF9jdGxfYml0X2NhbGxiYWNrLCAmcGFybXMsIDAsIDEpOwogfQogCiAvKgogICogQ2xlYXIgYSBiaXQgaW4gYSBjb250cm9sIHJlZ2lzdGVyIG9mIGFsbCBjcHVzCiAgKi8KLXZvaWQgc21wX2N0bF9jbGVhcl9iaXQoaW50IGNyLCBpbnQgYml0KSB7Ci0gICAgICAgIGVjX2NyZWdfbWFza19wYXJtcyBwYXJtczsKK3ZvaWQgc21wX2N0bF9jbGVhcl9iaXQoaW50IGNyLCBpbnQgYml0KQoreworCXN0cnVjdCBlY19jcmVnX21hc2tfcGFybXMgcGFybXM7CiAKLQlwYXJtcy5zdGFydF9jdGwgPSBjcjsKLQlwYXJtcy5lbmRfY3RsID0gY3I7Ci0JcGFybXMub3J2YWxzW2NyXSA9IDA7CisJbWVtc2V0KCZwYXJtcy5vcnZhbHMsIDAsIHNpemVvZihwYXJtcy5vcnZhbHMpKTsKKwltZW1zZXQoJnBhcm1zLmFuZHZhbHMsIDB4ZmYsIHNpemVvZihwYXJtcy5hbmR2YWxzKSk7CiAJcGFybXMuYW5kdmFsc1tjcl0gPSB+KDFMIDw8IGJpdCk7Ci0JcHJlZW1wdF9kaXNhYmxlKCk7Ci0Jc21wX2NhbGxfZnVuY3Rpb24oc21wX2N0bF9iaXRfY2FsbGJhY2ssICZwYXJtcywgMCwgMSk7Ci0gICAgICAgIF9fY3RsX2NsZWFyX2JpdChjciwgYml0KTsKLQlwcmVlbXB0X2VuYWJsZSgpOworCW9uX2VhY2hfY3B1KHNtcF9jdGxfYml0X2NhbGxiYWNrLCAmcGFybXMsIDAsIDEpOwogfQogCiAvKgpAQCAtNjUwLDkgKzY0MCw5IEBACiAJc2YtPmdwcnNbOV0gPSAodW5zaWduZWQgbG9uZykgc2Y7CiAJY3B1X2xvd2NvcmUtPnNhdmVfYXJlYVsxNV0gPSAodW5zaWduZWQgbG9uZykgc2Y7CiAJX19jdGxfc3RvcmUoY3B1X2xvd2NvcmUtPmNyZWdzX3NhdmVfYXJlYVswXSwgMCwgMTUpOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJzdGFtICAwLDE1LDAoJTApIgotCQkJICAgICA6IDogImEiICgmY3B1X2xvd2NvcmUtPmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkKLQkJCSAgICAgOiAibWVtb3J5Iik7CisJYXNtIHZvbGF0aWxlKAorCQkiCXN0YW0JMCwxNSwwKCUwKSIKKwkJOiA6ICJhIiAoJmNwdV9sb3djb3JlLT5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpIDogIm1lbW9yeSIpOwogCWNwdV9sb3djb3JlLT5wZXJjcHVfb2Zmc2V0ID0gX19wZXJfY3B1X29mZnNldFtjcHVdOwogICAgICAgICBjcHVfbG93Y29yZS0+Y3VycmVudF90YXNrID0gKHVuc2lnbmVkIGxvbmcpIGlkbGU7CiAgICAgICAgIGNwdV9sb3djb3JlLT5jcHVfZGF0YS5jcHVfbnIgPSBjcHU7CkBAIC03MDgsNyArNjk4LDcgQEAKIF9fY3B1X2Rpc2FibGUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWVjX2NyZWdfbWFza19wYXJtcyBjcl9wYXJtczsKKwlzdHJ1Y3QgZWNfY3JlZ19tYXNrX3Bhcm1zIGNyX3Bhcm1zOwogCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmc21wX3Jlc2VydmVfbG9jaywgZmxhZ3MpOwpAQCAtNzI0LDMwICs3MTQsMjEgQEAKIAkJcGZhdWx0X2ZpbmkoKTsKICNlbmRpZgogCi0JLyogZGlzYWJsZSBhbGwgZXh0ZXJuYWwgaW50ZXJydXB0cyAqLworCW1lbXNldCgmY3JfcGFybXMub3J2YWxzLCAwLCBzaXplb2YoY3JfcGFybXMub3J2YWxzKSk7CisJbWVtc2V0KCZjcl9wYXJtcy5hbmR2YWxzLCAweGZmLCBzaXplb2YoY3JfcGFybXMuYW5kdmFscykpOwogCi0JY3JfcGFybXMuc3RhcnRfY3RsID0gMDsKLQljcl9wYXJtcy5lbmRfY3RsID0gMDsKKwkvKiBkaXNhYmxlIGFsbCBleHRlcm5hbCBpbnRlcnJ1cHRzICovCiAJY3JfcGFybXMub3J2YWxzWzBdID0gMDsKIAljcl9wYXJtcy5hbmR2YWxzWzBdID0gfigxPDwxNSB8IDE8PDE0IHwgMTw8MTMgfCAxPDwxMiB8CiAJCQkJMTw8MTEgfCAxPDwxMCB8IDE8PCA2IHwgMTw8IDQpOwotCXNtcF9jdGxfYml0X2NhbGxiYWNrKCZjcl9wYXJtcyk7Ci0KIAkvKiBkaXNhYmxlIGFsbCBJL08gaW50ZXJydXB0cyAqLwotCi0JY3JfcGFybXMuc3RhcnRfY3RsID0gNjsKLQljcl9wYXJtcy5lbmRfY3RsID0gNjsKIAljcl9wYXJtcy5vcnZhbHNbNl0gPSAwOwogCWNyX3Bhcm1zLmFuZHZhbHNbNl0gPSB+KDE8PDMxIHwgMTw8MzAgfCAxPDwyOSB8IDE8PDI4IHwKIAkJCQkxPDwyNyB8IDE8PDI2IHwgMTw8MjUgfCAxPDwyNCk7Ci0Jc21wX2N0bF9iaXRfY2FsbGJhY2soJmNyX3Bhcm1zKTsKLQogCS8qIGRpc2FibGUgbW9zdCBtYWNoaW5lIGNoZWNrcyAqLwotCi0JY3JfcGFybXMuc3RhcnRfY3RsID0gMTQ7Ci0JY3JfcGFybXMuZW5kX2N0bCA9IDE0OwogCWNyX3Bhcm1zLm9ydmFsc1sxNF0gPSAwOwogCWNyX3Bhcm1zLmFuZHZhbHNbMTRdID0gfigxPDwyOCB8IDE8PDI3IHwgMTw8MjYgfCAxPDwyNSB8IDE8PDI0KTsKKwogCXNtcF9jdGxfYml0X2NhbGxiYWNrKCZjcl9wYXJtcyk7CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzbXBfcmVzZXJ2ZV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAva2VybmVsL3RpbWUuYyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCmluZGV4IDc0ZTYxNzguLjRiZjY2Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvczM5MC9rZXJuZWwvdGltZS5jCkBAIC01Myw4ICs1Myw2IEBACiBzdGF0aWMgdTY0IGppZmZpZXNfdGltZXJfY2M7CiBzdGF0aWMgdTY0IHh0aW1lX2NjOwogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIC8qCiAgKiBTY2hlZHVsZXIgY2xvY2sgLSByZXR1cm5zIGN1cnJlbnQgdGltZSBpbiBuYW5vc2VjIHVuaXRzLgogICovCkBAIC04Nyw5ICs4NSw4IEBACiB7CiAJX191NjQgbm93OwogCi0gICAgICAgIG5vdyA9IChnZXRfY2xvY2soKSAtIGppZmZpZXNfdGltZXJfY2MpID4+IDEyOwotCS8qIFdlIHJlcXVpcmUgdGhlIG9mZnNldCBmcm9tIHRoZSBsYXRlc3QgdXBkYXRlIG9mIHh0aW1lICovCi0Jbm93IC09IChfX3U2NCkgd2FsbF9qaWZmaWVzKlVTRUNTX1BFUl9KSUZGWTsKKwlub3cgPSAoZ2V0X2Nsb2NrKCkgLSBqaWZmaWVzX3RpbWVyX2NjKSA+PiAxMjsKKwlub3cgLT0gKF9fdTY0KSBqaWZmaWVzICogVVNFQ1NfUEVSX0pJRkZZOwogCXJldHVybiAodW5zaWduZWQgbG9uZykgbm93OwogfQogCkBAIC0xNjYsNyArMTYzLDcgQEAKIHZvaWQgYWNjb3VudF90aWNrcyhzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlfX3U2NCB0bXA7Ci0JX191MzIgdGlja3MsIHh0aWNrczsKKwlfX3UzMiB0aWNrczsKIAogCS8qIENhbGN1bGF0ZSBob3cgbWFueSB0aWNrcyBoYXZlIHBhc3NlZC4gKi8KIAlpZiAoUzM5MF9sb3djb3JlLmludF9jbG9jayA8IFMzOTBfbG93Y29yZS5qaWZmeV90aW1lcikgewpAQCAtMjA0LDYgKzIwMSw3IEBACiAJICovCiAJd3JpdGVfc2VxbG9jaygmeHRpbWVfbG9jayk7CiAJaWYgKFMzOTBfbG93Y29yZS5qaWZmeV90aW1lciA+IHh0aW1lX2NjKSB7CisJCV9fdTMyIHh0aWNrczsKIAkJdG1wID0gUzM5MF9sb3djb3JlLmppZmZ5X3RpbWVyIC0geHRpbWVfY2M7CiAJCWlmICh0bXAgPj0gMipDTEtfVElDS1NfUEVSX0pJRkZZKSB7CiAJCQl4dGlja3MgPSBfX2Rpdih0bXAsIENMS19USUNLU19QRVJfSklGRlkpOwpAQCAtMjEyLDEzICsyMTAsMTEgQEAKIAkJCXh0aWNrcyA9IDE7CiAJCQl4dGltZV9jYyArPSBDTEtfVElDS1NfUEVSX0pJRkZZOwogCQl9Ci0JCXdoaWxlICh4dGlja3MtLSkKLQkJCWRvX3RpbWVyKHJlZ3MpOworCQlkb190aW1lcih4dGlja3MpOwogCX0KIAl3cml0ZV9zZXF1bmxvY2soJnh0aW1lX2xvY2spOwogI2Vsc2UKLQlmb3IgKHh0aWNrcyA9IHRpY2tzOyB4dGlja3MgPiAwOyB4dGlja3MtLSkKLQkJZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIodGlja3MpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfVklSVF9DUFVfQUNDT1VOVElORwpAQCAtMzUxLDEwICszNDcsMTIgQEAKIAlpbnQgY2M7CiAKICAgICAgICAgLyoga2ljayB0aGUgVE9EIGNsb2NrICovCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoIlNUQ0sgMCglMSlcblx0IgotICAgICAgICAgICAgICAgICAgICAgICJJUE0gICUwXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAiU1JMICAlMCwyOCIgOiAiPXIiIChjYykgOiAiYSIgKCZpbml0X3RpbWVyX2NjKSAKLQkJCQkgICA6ICJtZW1vcnkiLCAiY2MiKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjawkwKCUyKVxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOCIKKwkJOiAiPWQiIChjYyksICI9bSIgKGluaXRfdGltZXJfY2MpCisJCTogImEiICgmaW5pdF90aW1lcl9jYykgOiAiY2MiKTsKICAgICAgICAgc3dpdGNoIChjYykgewogICAgICAgICBjYXNlIDA6IC8qIGNsb2NrIGluIHNldCBzdGF0ZTogYWxsIGlzIGZpbmUgKi8KICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvczM5MC9rZXJuZWwvdHJhcHMuYwppbmRleCBjNDk4MmM5Li4zZWI0ZmFiIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zMzkwL2tlcm5lbC90cmFwcy5jCkBAIC01OTcsOCArNTk3LDcgQEAKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwogCiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpCi0JCV9fYXNtX18gdm9sYXRpbGUgKCJzdGZwYyAlMFxuXHQiIAotCQkJCSAgOiAiPW0iIChjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcGMpKTsKKwkJYXNtIHZvbGF0aWxlKCJzdGZwYyAlMCIgOiAiPW0iIChjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcGMpKTsKIAogI2lmZGVmIENPTkZJR19NQVRIRU1VCiAgICAgICAgIGVsc2UgaWYgKHJlZ3MtPnBzdy5tYXNrICYgUFNXX01BU0tfUFNUQVRFKSB7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlIGIvYXJjaC9zMzkwL2xpYi9NYWtlZmlsZQppbmRleCBjNDJmZmVkLi5iMGNmYTZjIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL01ha2VmaWxlCisrKyBiL2FyY2gvczM5MC9saWIvTWFrZWZpbGUKQEAgLTUsNSArNSw2IEBACiBFWFRSQV9BRkxBR1MgOj0gLXRyYWRpdGlvbmFsCiAKIGxpYi15ICs9IGRlbGF5Lm8gc3RyaW5nLm8gdWFjY2Vzc19zdGQubworbGliLSQoQ09ORklHXzMyQklUKSArPSBkaXY2NC5vCiBsaWItJChDT05GSUdfNjRCSVQpICs9IHVhY2Nlc3NfbXZjb3MubwogbGliLSQoQ09ORklHX1NNUCkgKz0gc3BpbmxvY2subwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kZWxheS5jIGIvYXJjaC9zMzkwL2xpYi9kZWxheS5jCmluZGV4IDQ2OGY0ZWEuLjAyN2M0NzQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvZGVsYXkuYworKysgYi9hcmNoL3MzOTAvbGliL2RlbGF5LmMKQEAgLTI3LDkgKzI3LDcgQEAKICAgICAgICAgICogeWllbGQgdGhlIG1lZ2FoZXJ0eiBudW1iZXIgb2YgdGhlIGNwdS4gVGhlIGltcG9ydGFudCBmdW5jdGlvbgogICAgICAgICAgKiBpcyB1ZGVsYXkgYW5kIHRoYXQgaXMgZG9uZSB1c2luZyB0aGUgdG9kIGNsb2NrLiAtLSBtYXJ0aW4uCiAgICAgICAgICAqLwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSAgICAgICAgICAgICAgICAiMDogYnJjdCAlMCwwYiIKLSAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dHMgKi8gOiAiciIgKChsb29wcy8yKSArIDEpKTsKKwlhc20gdm9sYXRpbGUoIjA6IGJyY3QgJTAsMGIiIDogOiAiZCIgKChsb29wcy8yKSArIDEpKTsKIH0KIAogLyoKQEAgLTM4LDEzICszNiwxMiBAQAogICovCiB2b2lkIF9fdWRlbGF5KHVuc2lnbmVkIGxvbmcgdXNlY3MpCiB7Ci0gICAgICAgIHVpbnQ2NF90IHN0YXJ0X2NjLCBlbmRfY2M7CisJdWludDY0X3Qgc3RhcnRfY2M7CiAKICAgICAgICAgaWYgKHVzZWNzID09IDApCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhc20gdm9sYXRpbGUgKCJTVENLICUwIiA6ICI9bSIgKHN0YXJ0X2NjKSk7CisJc3RhcnRfY2MgPSBnZXRfY2xvY2soKTsKICAgICAgICAgZG8gewogCQljcHVfcmVsYXgoKTsKLSAgICAgICAgICAgICAgICBhc20gdm9sYXRpbGUgKCJTVENLICUwIiA6ICI9bSIgKGVuZF9jYykpOwotICAgICAgICB9IHdoaWxlICgoKGVuZF9jYyAtIHN0YXJ0X2NjKS80MDk2KSA8IHVzZWNzKTsKKwl9IHdoaWxlICgoKGdldF9jbG9jaygpIC0gc3RhcnRfY2MpLzQwOTYpIDwgdXNlY3MpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi9kaXY2NC5jIGIvYXJjaC9zMzkwL2xpYi9kaXY2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODFmMzQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3MzOTAvbGliL2RpdjY0LmMKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiAgYXJjaC9zMzkwL2xpYi9kaXY2NC5jCisgKgorICogIF9fZGl2NjRfMzIgaW1wbGVtZW50YXRpb24gZm9yIDMxIGJpdC4KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIElCTSBDb3JwLiAyMDA2CisgKiAgICBBdXRob3Iocyk6IE1hcnRpbiBTY2h3aWRlZnNreSAoc2Nod2lkZWZza3lAZGUuaWJtLmNvbSksCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKKyNpZmRlZiBDT05GSUdfTUFSQ0hfRzUKKworLyoKKyAqIEZ1bmN0aW9uIHRvIGRpdmlkZSBhbiB1bnNpZ25lZCA2NCBiaXQgaW50ZWdlciBieSBhbiB1bnNpZ25lZAorICogMzEgYml0IGludGVnZXIgdXNpbmcgc2lnbmVkIDY0LzMyIGJpdCBkaXZpc2lvbi4KKyAqLworc3RhdGljIHVpbnQzMl90IF9fZGl2NjRfMzEodWludDY0X3QgKm4sIHVpbnQzMl90IGJhc2UpCit7CisJcmVnaXN0ZXIgdWludDMyX3QgcmVnMiBhc20oIjIiKTsKKwlyZWdpc3RlciB1aW50MzJfdCByZWczIGFzbSgiMyIpOworCXVpbnQzMl90ICp3b3JkcyA9ICh1aW50MzJfdCAqKSBuOworCXVpbnQzMl90IHRtcDsKKworCS8qIFNwZWNpYWwgY2FzZSBiYXNlPT0xLCByZW1haW5kZXIgPSAwLCBxdW90aWVudCA9IG4gKi8KKwlpZiAoYmFzZSA9PSAxKQorCQlyZXR1cm4gMDsKKwkvKgorCSAqIFNwZWNpYWwgY2FzZSBiYXNlPT0wIHdpbGwgY2F1c2UgYSBmaXhlZCBwb2ludCBkaXZpZGUgZXhjZXB0aW9uCisJICogb24gdGhlIGRyIGluc3RydWN0aW9uIGFuZCBtYXkgbm90IGhhcHBlbiBhbnl3YXkuIEZvciB0aGUKKwkgKiBmb2xsb3dpbmcgY2FsY3VsYXRpb24gd2UgY2FuIGFzc3VtZSBiYXNlID4gMS4gVGhlIGZpcnN0CisJICogc2lnbmVkIDY0IC8gMzIgYml0IGRpdmlzaW9uIHdpdGggYW4gdXBwZXIgaGFsZiBvZiAwIHdpbGwKKwkgKiBnaXZlIHRoZSBjb3JyZWN0IHVwcGVyIGhhbGYgb2YgdGhlIDY0IGJpdCBxdW90aWVudC4KKwkgKi8KKwlyZWcyID0gMFVMOworCXJlZzMgPSB3b3Jkc1swXTsKKwlhc20gdm9sYXRpbGUoCisJCSIJZHIJJTAsJTJcbiIKKwkJOiAiK2QiIChyZWcyKSwgIitkIiAocmVnMykgOiAiZCIgKGJhc2UpIDogImNjIiApOworCXdvcmRzWzBdID0gcmVnMzsKKwlyZWczID0gd29yZHNbMV07CisJLyoKKwkgKiBUbyBnZXQgdGhlIGxvd2VyIGhhbGYgb2YgdGhlIDY0IGJpdCBxdW90aWVudCBhbmQgdGhlIDMyIGJpdAorCSAqIHJlbWFpbmRlciB3ZSBoYXZlIHRvIHVzZSBhIGxpdHRsZSB0cmljay4gU2luY2Ugd2Ugb25seSBoYXZlCisJICogYSBzaWduZWQgZGl2aXNpb24gdGhlIHF1b3RpZW50IGNhbiBnZXQgdG9vIGJpZy4gVG8gYXZvaWQgdGhpcworCSAqIHRoZSA2NCBiaXQgZGl2aWRlbmQgaXMgaGFsdmVkLCB0aGVuIHRoZSBzaWduZWQgZGl2aXNpb24gd2lsbAorCSAqIHdvcmsuIEFmdGVyd2FyZHMgdGhlIHF1b3RpZW50IGFuZCB0aGUgcmVtYWluZGVyIGFyZSBkb3VibGVkLgorCSAqIElmIHRoZSBsYXN0IGJpdCBvZiB0aGUgZGl2aWRlbmQgaGFzIGJlZW4gb25lIHRoZSByZW1haW5kZXIKKwkgKiBpcyBpbmNyZWFzZWQgYnkgb25lIHRoZW4gY2hlY2tlZCBhZ2FpbnN0IHRoZSBiYXNlLiBJZiB0aGUKKwkgKiByZW1haW5kZXIgaGFzIG92ZXJmbG93biBzdWJ0cmFjdCBiYXNlIGFuZCBpbmNyZWFzZSB0aGUKKwkgKiBxdW90aWVudC4gU2ltcGxlLCBubyA/CisJICovCisJYXNtIHZvbGF0aWxlKAorCQkiCW5yCSUyLCUxXG4iCisJCSIJc3JkbAklMCwxXG4iCisJCSIJZHIJJTAsJTNcbiIKKwkJIglhbHIJJTAsJTBcbiIKKwkJIglhbHIJJTEsJTFcbiIKKwkJIglhbHIJJTAsJTJcbiIKKwkJIgljbHIJJTAsJTNcbiIKKwkJIglqbAkwZlxuIgorCQkiCXNscgklMCwlM1xuIgorCQkiCWFscgklMSwlMlxuIgorCQkiMDpcbiIKKwkJOiAiK2QiIChyZWcyKSwgIitkIiAocmVnMyksICI9ZCIgKHRtcCkKKwkJOiAiZCIgKGJhc2UpLCAiMiIgKDFVTCkgOiAiY2MiICk7CisJd29yZHNbMV0gPSByZWczOworCXJldHVybiByZWcyOworfQorCisvKgorICogRnVuY3Rpb24gdG8gZGl2aWRlIGFuIHVuc2lnbmVkIDY0IGJpdCBpbnRlZ2VyIGJ5IGFuIHVuc2lnbmVkCisgKiAzMiBiaXQgaW50ZWdlciB1c2luZyB0aGUgdW5zaWduZWQgNjQvMzEgYml0IGRpdmlzaW9uLgorICovCit1aW50MzJfdCBfX2RpdjY0XzMyKHVpbnQ2NF90ICpuLCB1aW50MzJfdCBiYXNlKQoreworCXVpbnQzMl90IHI7CisKKwkvKgorCSAqIElmIHRoZSBtb3N0IHNpZ25pZmljYW50IGJpdCBvZiBiYXNlIGlzIHNldCwgZGl2aWRlIG4gYnkKKwkgKiAoYmFzZS8yKS4gVGhhdCBhbGxvd3MgdG8gdXNlIDY0LzMxIGJpdCBkaXZpc2lvbiBhbmQgZ2l2ZXMgYQorCSAqIGdvb2QgYXBwcm94aW1hdGlvbiBvZiB0aGUgcmVzdWx0OiBuID0gKGJhc2UvMikqcSArIHIuIFRoZQorCSAqIHJlc3VsdCBuZWVkcyB0byBiZSBjb3JyZWN0ZWQgd2l0aCB0d28gc2ltcGxlIHRyYW5zZm9ybWF0aW9ucy4KKwkgKiBJZiBiYXNlIGlzIGFscmVhZHkgPCAyXjMxLTEgX19kaXY2NF8zMSBjYW4gYmUgdXNlZCBkaXJlY3RseS4KKwkgKi8KKwlyID0gX19kaXY2NF8zMShuLCAoKHNpZ25lZCkgYmFzZSA8IDApID8gKGJhc2UvMikgOiBiYXNlKTsKKwlpZiAoKHNpZ25lZCkgYmFzZSA8IDApIHsKKwkJdWludDY0X3QgcSA9ICpuOworCQkvKgorCQkgKiBGaXJzdCB0cmFuc2Zvcm1hdGlvbjoKKwkJICogbiA9IChiYXNlLzIpKnEgKyByCisJCSAqICAgPSAoKGJhc2UvMikqMikqKHEvMikgKyAoKHEmMSkgPyAoYmFzZS8yKSA6IDApICsgcgorCQkgKiBTaW5jZSByIDwgKGJhc2UvMiksIHIgKyAoYmFzZS8yKSA8IGJhc2UuCisJCSAqIFdpdGggcTEgPSAocS8yKSBhbmQgcjEgPSByICsgKChxJjEpID8gKGJhc2UvMikgOiAwKQorCQkgKiBuID0gKChiYXNlLzIpKjIpKnExICsgcjEgd2l0aCByMSA8IGJhc2UuCisJCSAqLworCQlpZiAocSAmIDEpCisJCQlyICs9IGJhc2UvMjsKKwkJcSA+Pj0gMTsKKwkJLyoKKwkJICogU2Vjb25kIHRyYW5zZm9ybWF0aW9uLiAoKGJhc2UvMikqMikgY291bGQgaGF2ZSBsb3N0IHRoZQorCQkgKiBsYXN0IGJpdC4KKwkJICogbiA9ICgoYmFzZS8yKSoyKSpxMSArIHIxCisJCSAqICAgPSBiYXNlKnExIC0gKChiYXNlJjEpID8gcTEgOiAwKSArIHIxCisJCSAqLworCQlpZiAoYmFzZSAmIDEpIHsKKwkJCWludDY0X3QgcnggPSByIC0gcTsKKwkJCS8qCisJCQkgKiBiYXNlIGlzID49IDJeMzEuIFRoZSB3b3JzdCBjYXNlIGZvciB0aGUgd2hpbGUKKwkJCSAqIGxvb3AgaXMgbj0yXjY0LTEgYmFzZT0yXjMxKzEuIFRoYXQgZ2l2ZXMgYQorCQkJICogbWF4aW11bSBmb3IgcT0oMl42NC0xKS8yXjMxID0gMHgxZmZmZmZmZmYuIFNpbmNlCisJCQkgKiBiYXNlID49IDJeMzEgdGhlIGxvb3AgaXMgZmluaXNoZWQgYWZ0ZXIgYSBtYXhpbXVtCisJCQkgKiBvZiB0aHJlZSBpdGVyYXRpb25zLgorCQkJICovCisJCQl3aGlsZSAocnggPCAwKSB7CisJCQkJcnggKz0gYmFzZTsKKwkJCQlxLS07CisJCQl9CisJCQlyID0gcng7CisJCX0KKwkJKm4gPSBxOworCX0KKwlyZXR1cm4gcjsKK30KKworI2Vsc2UgLyogTUFSQ0hfRzUgKi8KKwordWludDMyX3QgX19kaXY2NF8zMih1aW50NjRfdCAqbiwgdWludDMyX3QgYmFzZSkKK3sKKwlyZWdpc3RlciB1aW50MzJfdCByZWcyIGFzbSgiMiIpOworCXJlZ2lzdGVyIHVpbnQzMl90IHJlZzMgYXNtKCIzIik7CisJdWludDMyX3QgKndvcmRzID0gKHVpbnQzMl90ICopIG47CisKKwlyZWcyID0gMFVMOworCXJlZzMgPSB3b3Jkc1swXTsKKwlhc20gdm9sYXRpbGUoCisJCSIJZGxyCSUwLCUyXG4iCisJCTogIitkIiAocmVnMiksICIrZCIgKHJlZzMpIDogImQiIChiYXNlKSA6ICJjYyIgKTsKKwl3b3Jkc1swXSA9IHJlZzM7CisJcmVnMyA9IHdvcmRzWzFdOworCWFzbSB2b2xhdGlsZSgKKwkJIglkbHIJJTAsJTJcbiIKKwkJOiAiK2QiIChyZWcyKSwgIitkIiAocmVnMykgOiAiZCIgKGJhc2UpIDogImNjIiApOworCXdvcmRzWzFdID0gcmVnMzsKKwlyZXR1cm4gcmVnMjsKK30KKworI2VuZGlmIC8qIE1BUkNIX0c1ICovCisKK0VYUE9SVF9TWU1CT0woX19kaXY2NF8zMik7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMgYi9hcmNoL3MzOTAvbGliL3NwaW5sb2NrLmMKaW5kZXggYjliNzk1OC4uOGQ3NjQwMyAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL2xpYi9zcGlubG9jay5jCisrKyBiL2FyY2gvczM5MC9saWIvc3BpbmxvY2suYwpAQCAtMjQsNTcgKzI0LDc2IEBACiB9CiBfX3NldHVwKCJzcGluX3JldHJ5PSIsIHNwaW5fcmV0cnlfc2V0dXApOwogCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9kaWFnNDQodm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3lpZWxkKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHXzY0QklUCiAJaWYgKE1BQ0hJTkVfSEFTX0RJQUc0NCkKLSNlbmRpZgogCQlhc20gdm9sYXRpbGUoImRpYWcgMCwwLDB4NDQiKTsKIH0KIAotdm9pZAotX3Jhd19zcGluX2xvY2tfd2FpdChyYXdfc3BpbmxvY2tfdCAqbHAsIHVuc2lnbmVkIGludCBwYykKK3N0YXRpYyBpbmxpbmUgdm9pZCBfcmF3X3lpZWxkX2NwdShpbnQgY3B1KQoreworCWlmIChNQUNISU5FX0hBU19ESUFHOUMpCisJCWFzbSB2b2xhdGlsZSgiZGlhZyAlMCwwLDB4OWMiCisJCQkgICAgIDogOiAiZCIgKF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV0pKTsKKwllbHNlCisJCV9yYXdfeWllbGQoKTsKK30KKwordm9pZCBfcmF3X3NwaW5fbG9ja193YWl0KHJhd19zcGlubG9ja190ICpscCwgdW5zaWduZWQgaW50IHBjKQogewogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CisJdW5zaWduZWQgaW50IGNwdSA9IH5zbXBfcHJvY2Vzc29yX2lkKCk7CiAKIAl3aGlsZSAoMSkgewogCQlpZiAoY291bnQtLSA8PSAwKSB7Ci0JCQlfZGlhZzQ0KCk7CisJCQl1bnNpZ25lZCBpbnQgb3duZXIgPSBscC0+b3duZXJfY3B1OworCQkJaWYgKG93bmVyICE9IDApCisJCQkJX3Jhd195aWVsZF9jcHUofm93bmVyKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQogCQlpZiAoX19yYXdfc3Bpbl9pc19sb2NrZWQobHApKQogCQkJY29udGludWU7Ci0JCWlmIChfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5sb2NrLCAwLCBwYykgPT0gMCkKKwkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgY3B1KSA9PSAwKSB7CisJCQlscC0+b3duZXJfcGMgPSBwYzsKIAkJCXJldHVybjsKKwkJfQogCX0KIH0KIEVYUE9SVF9TWU1CT0woX3Jhd19zcGluX2xvY2tfd2FpdCk7CiAKLWludAotX3Jhd19zcGluX3RyeWxvY2tfcmV0cnkocmF3X3NwaW5sb2NrX3QgKmxwLCB1bnNpZ25lZCBpbnQgcGMpCitpbnQgX3Jhd19zcGluX3RyeWxvY2tfcmV0cnkocmF3X3NwaW5sb2NrX3QgKmxwLCB1bnNpZ25lZCBpbnQgcGMpCiB7Ci0JaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKKwl1bnNpZ25lZCBpbnQgY3B1ID0gfnNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgY291bnQ7CiAKLQl3aGlsZSAoY291bnQtLSA+IDApIHsKKwlmb3IgKGNvdW50ID0gc3Bpbl9yZXRyeTsgY291bnQgPiAwOyBjb3VudC0tKSB7CiAJCWlmIChfX3Jhd19zcGluX2lzX2xvY2tlZChscCkpCiAJCQljb250aW51ZTsKLQkJaWYgKF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPmxvY2ssIDAsIHBjKSA9PSAwKQorCQlpZiAoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+b3duZXJfY3B1LCAwLCBjcHUpID09IDApIHsKKwkJCWxwLT5vd25lcl9wYyA9IHBjOwogCQkJcmV0dXJuIDE7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfc3Bpbl90cnlsb2NrX3JldHJ5KTsKIAotdm9pZAotX3Jhd19yZWFkX2xvY2tfd2FpdChyYXdfcndsb2NrX3QgKnJ3KQordm9pZCBfcmF3X3NwaW5fcmVsYXgocmF3X3NwaW5sb2NrX3QgKmxvY2spCit7CisJdW5zaWduZWQgaW50IGNwdSA9IGxvY2stPm93bmVyX2NwdTsKKwlpZiAoY3B1ICE9IDApCisJCV9yYXdfeWllbGRfY3B1KH5jcHUpOworfQorRVhQT1JUX1NZTUJPTChfcmF3X3NwaW5fcmVsYXgpOworCit2b2lkIF9yYXdfcmVhZF9sb2NrX3dhaXQocmF3X3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CiAKIAl3aGlsZSAoMSkgewogCQlpZiAoY291bnQtLSA8PSAwKSB7Ci0JCQlfZGlhZzQ0KCk7CisJCQlfcmF3X3lpZWxkKCk7CiAJCQljb3VudCA9IHNwaW5fcmV0cnk7CiAJCX0KIAkJaWYgKCFfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KSkKQEAgLTg2LDggKzEwNSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKF9yYXdfcmVhZF9sb2NrX3dhaXQpOwogCi1pbnQKLV9yYXdfcmVhZF90cnlsb2NrX3JldHJ5KHJhd19yd2xvY2tfdCAqcncpCitpbnQgX3Jhd19yZWFkX3RyeWxvY2tfcmV0cnkocmF3X3J3bG9ja190ICpydykKIHsKIAl1bnNpZ25lZCBpbnQgb2xkOwogCWludCBjb3VudCA9IHNwaW5fcmV0cnk7CkBAIC0xMDMsMTQgKzEyMSwxMyBAQAogfQogRVhQT1JUX1NZTUJPTChfcmF3X3JlYWRfdHJ5bG9ja19yZXRyeSk7CiAKLXZvaWQKLV9yYXdfd3JpdGVfbG9ja193YWl0KHJhd19yd2xvY2tfdCAqcncpCit2b2lkIF9yYXdfd3JpdGVfbG9ja193YWl0KHJhd19yd2xvY2tfdCAqcncpCiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIAogCXdoaWxlICgxKSB7CiAJCWlmIChjb3VudC0tIDw9IDApIHsKLQkJCV9kaWFnNDQoKTsKKwkJCV9yYXdfeWllbGQoKTsKIAkJCWNvdW50ID0gc3Bpbl9yZXRyeTsKIAkJfQogCQlpZiAoIV9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJ3KSkKQEAgLTEyMSw4ICsxMzgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChfcmF3X3dyaXRlX2xvY2tfd2FpdCk7CiAKLWludAotX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KHJhd19yd2xvY2tfdCAqcncpCitpbnQgX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KHJhd19yd2xvY2tfdCAqcncpCiB7CiAJaW50IGNvdW50ID0gc3Bpbl9yZXRyeTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX212Y29zLmMgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwppbmRleCA4NmM5NmQ2Li4xMjFiMjkzIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3NfbXZjb3MuYwpAQCAtMzUsNyArMzUsNyBAQAogCXRtcDEgPSAtNDA5NlVMOwogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IC5pbnNuIHNzLDB4YzgwMDAwMDAwMDAwLDAoJTAsJTIpLDAoJTEpLDBcbiIKLQkJIiAgIGp6ICAgIDRmXG4iCisJCSIgICBqeiAgICA3ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIlNMUiIgICUxLCUzXG4iCiAJCSIgICJTTFIiICAlMiwlM1xuIgpAQCAtNDQsMTMgKzQ0LDIzIEBACiAJCSIgICBuciAgICAlNCwlM1xuIgkvKiAlNCA9IChwdHIgKyA0MDk1KSAmIC00MDk2ICovCiAJCSIgICJTTFIiICAlNCwlMVxuIgogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KLQkJIiAgIGpuaCAgIDVmXG4iCisJCSIgICBqbmggICA0ZlxuIgogCQkiMzogLmluc24gc3MsMHhjODAwMDAwMDAwMDAsMCglNCwlMiksMCglMSksMFxuIgogCQkiICAiU0xSIiAgJTAsJTRcbiIKLQkJIiAgIGogICAgIDVmXG4iCi0JCSI0OiJTTFIiICAlMCwlMFxuIgotCQkiNTogXG4iCi0JCUVYX1RBQkxFKDBiLDJiKSBFWF9UQUJMRSgzYiw1YikKKwkJIiAgIkFMUiIgICUyLCU0XG4iCisJCSI0OiJMSEkiICAlNCwtMVxuIgorCQkiICAiQUxSIiAgJTQsJTBcbiIJLyogY29weSByZW1haW5pbmcgc2l6ZSwgc3VidHJhY3QgMSAqLworCQkiICAgYnJhcyAgJTMsNmZcbiIJLyogbWVtc2V0IGxvb3AgKi8KKwkJIiAgIHhjICAgIDAoMSwlMiksMCglMilcbiIKKwkJIjU6IHhjICAgIDAoMjU2LCUyKSwwKCUyKVxuIgorCQkiICAgbGEgICAgJTIsMjU2KCUyKVxuIgorCQkiNjoiQUhJIiAgJTQsLTI1NlxuIgorCQkiICAgam5tICAgNWJcbiIKKwkJIiAgIGV4ICAgICU0LDAoJTMpXG4iCisJCSIgICBqICAgICA4ZlxuIgorCQkiNzoiU0xSIiAgJTAsJTBcbiIKKwkJIjg6IFxuIgorCQlFWF9UQUJMRSgwYiwyYikgRVhfVEFCTEUoM2IsNGIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiAiZCIgKHJlZzApIDogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBzaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jIGIvYXJjaC9zMzkwL2xpYi91YWNjZXNzX3N0ZC5jCmluZGV4IDlhNGQ0YTIuLmY0NGYwMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9saWIvdWFjY2Vzc19zdGQuYworKysgYi9hcmNoL3MzOTAvbGliL3VhY2Nlc3Nfc3RkLmMKQEAgLTM1LDI1ICszNSwzNSBAQAogCXRtcDEgPSAtMjU2VUw7CiAJYXNtIHZvbGF0aWxlKAogCQkiMDogbXZjcCAgMCglMCwlMiksMCglMSksJTNcbiIKLQkJIiAgIGp6ICAgIDVmXG4iCisJCSIgICBqeiAgICA4ZlxuIgogCQkiMToiQUxSIiAgJTAsJTNcbiIKIAkJIiAgIGxhICAgICUxLDI1NiglMSlcbiIKIAkJIiAgIGxhICAgICUyLDI1NiglMilcbiIKIAkJIjI6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCiAJCSIgICBqbnogICAxYlxuIgotCQkiICAgaiAgICAgNWZcbiIKKwkJIiAgIGogICAgIDhmXG4iCiAJCSIzOiBsYSAgICAlNCwyNTUoJTEpXG4iCS8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgogCQkiICAgbnIgICAgJTQsJTNcbiIJLyogJTQgPSAocHRyICsgMjU1KSAmIC00MDk2ICovCiAJCSIgICJTTFIiICAlNCwlMVxuIgogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KLQkJIiAgIGpuaCAgIDZmXG4iCisJCSIgICBqbmggICA1ZlxuIgogCQkiNDogbXZjcCAgMCglNCwlMiksMCglMSksJTNcbiIKIAkJIiAgIlNMUiIgICUwLCU0XG4iCi0JCSIgICBqICAgICA2ZlxuIgotCQkiNToiU0xSIiAgJTAsJTBcbiIKLQkJIjY6IFxuIgotCQlFWF9UQUJMRSgwYiwzYikgRVhfVEFCTEUoMmIsM2IpIEVYX1RBQkxFKDRiLDZiKQorCQkiICAiQUxSIiAgJTIsJTRcbiIKKwkJIjU6IkxISSIgICU0LC0xXG4iCisJCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCisJCSIgICBicmFzICAlMyw3ZlxuIgkvKiBtZW1zZXQgbG9vcCAqLworCQkiICAgeGMgICAgMCgxLCUyKSwwKCUyKVxuIgorCQkiNjogeGMgICAgMCgyNTYsJTIpLDAoJTIpXG4iCisJCSIgICBsYSAgICAlMiwyNTYoJTIpXG4iCisJCSI3OiJBSEkiICAlNCwtMjU2XG4iCisJCSIgICBqbm0gICA2YlxuIgorCQkiICAgZXggICAgJTQsMCglMylcbiIKKwkJIiAgIGogICAgIDlmXG4iCisJCSI4OiJTTFIiICAlMCwlMFxuIgorCQkiOTogXG4iCisJCUVYX1RBQkxFKDBiLDNiKSBFWF9UQUJMRSgyYiwzYikgRVhfVEFCTEUoNGIsNWIpCiAJCTogIithIiAoc2l6ZSksICIrYSIgKHB0ciksICIrYSIgKHgpLCAiK2EiICh0bXAxKSwgIj1hIiAodG1wMikKIAkJOiA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gc2l6ZTsKQEAgLTY3LDE2ICs3NywyMiBAQAogCWFzbSB2b2xhdGlsZSgKIAkJIjA6IG12Y3AgIDAoJTAsJTIpLDAoJTEpLCUzXG4iCiAJCSIgICJTTFIiICAlMCwlMFxuIgotCQkiICAgaiAgICAgM2ZcbiIKKwkJIiAgIGogICAgIDVmXG4iCiAJCSIxOiBsYSAgICAlNCwyNTUoJTEpXG4iIC8qICU0ID0gcHRyICsgMjU1ICovCiAJCSIgICJMSEkiICAlMywtNDA5NlxuIgogCQkiICAgbnIgICAgJTQsJTNcbiIJLyogJTQgPSAocHRyICsgMjU1KSAmIC00MDk2ICovCiAJCSIgICJTTFIiICAlNCwlMVxuIgogCQkiICAiQ0xSIiAgJTAsJTRcbiIJLyogY29weSBjcm9zc2VzIG5leHQgcGFnZSBib3VuZGFyeT8gKi8KLQkJIiAgIGpuaCAgIDNmXG4iCisJCSIgICBqbmggICA1ZlxuIgogCQkiMjogbXZjcCAgMCglNCwlMiksMCglMSksJTNcbiIKIAkJIiAgIlNMUiIgICUwLCU0XG4iCi0JCSIzOlxuIgorCQkiICAiQUxSIiAgJTIsJTRcbiIKKwkJIjM6IkxISSIgICU0LC0xXG4iCisJCSIgICJBTFIiICAlNCwlMFxuIgkvKiBjb3B5IHJlbWFpbmluZyBzaXplLCBzdWJ0cmFjdCAxICovCisJCSIgICBicmFzICAlMyw0ZlxuIgorCQkiICAgeGMgICAgMCgxLCUyKSwwKCUyKVxuIgorCQkiNDogZXggICAgJTQsMCglMylcbiIKKwkJIjU6XG4iCiAJCUVYX1RBQkxFKDBiLDFiKSBFWF9UQUJMRSgyYiwzYikKIAkJOiAiK2EiIChzaXplKSwgIithIiAocHRyKSwgIithIiAoeCksICIrYSIgKHRtcDEpLCAiPWEiICh0bXAyKQogCQk6IDogImNjIiwgIm1lbW9yeSIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21hdGgtZW11L21hdGguYyBiL2FyY2gvczM5MC9tYXRoLWVtdS9tYXRoLmMKaW5kZXggYjQ5NTdjOC4uNmI5YWVjNSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21hdGgtZW11L21hdGguYworKysgYi9hcmNoL3MzOTAvbWF0aC1lbXUvbWF0aC5jCkBAIC0xNTY0LDUyICsxNTY0LDUyIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbXVfbG9hZF9yZWdkKGludCByZWcpIHsKLSAgICAgICAgaWYgKChyZWcmOSkgIT0gMCkgICAgICAgICAvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KKwlpZiAoKHJlZyY5KSAhPSAwKQkvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgLyogbG9hZCByZWcgZnJvbSBmcF9yZWdzLmZwcnNbcmVnXSAqLwotICAgICAgICAgICAgICAgICIgICAgIGJyYXMgIDEsMGZcbiIKLSAgICAgICAgICAgICAgICAiICAgICBsZCAgICAwLDAoJTEpXG4iCi0gICAgICAgICAgICAgICAgIjA6ICAgZXggICAgJTAsMCgxKSIKLSAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLwotICAgICAgICAgICAgICAgIDogImEiIChyZWc8PDQpLCJhIiAoJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwcnNbcmVnXS5kKQotICAgICAgICAgICAgICAgIDogIjEiICk7CisJYXNtIHZvbGF0aWxlKAkJLyogbG9hZCByZWcgZnJvbSBmcF9yZWdzLmZwcnNbcmVnXSAqLworCQkiCWJyYXMJMSwwZlxuIgorCQkiCWxkCTAsMCglMSlcbiIKKwkJIjA6CWV4CSUwLDAoMSkiCisJCTogLyogbm8gb3V0cHV0ICovCisJCTogImEiIChyZWc8PDQpLCJhIiAoJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwcnNbcmVnXS5kKQorCQk6ICIxIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbXVfbG9hZF9yZWdlKGludCByZWcpIHsKLSAgICAgICAgaWYgKChyZWcmOSkgIT0gMCkgICAgICAgICAvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KKwlpZiAoKHJlZyY5KSAhPSAwKQkvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgLyogbG9hZCByZWcgZnJvbSBmcF9yZWdzLmZwcnNbcmVnXSAqLwotICAgICAgICAgICAgICAgICIgICAgIGJyYXMgIDEsMGZcbiIKLSAgICAgICAgICAgICAgICAiICAgICBsZSAgICAwLDAoJTEpXG4iCi0gICAgICAgICAgICAgICAgIjA6ICAgZXggICAgJTAsMCgxKSIKLSAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLwotICAgICAgICAgICAgICAgIDogImEiIChyZWc8PDQpLCAiYSIgKCZjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcHJzW3JlZ10uZikKLSAgICAgICAgICAgICAgICA6ICIxIiApOworCWFzbSB2b2xhdGlsZSgJCS8qIGxvYWQgcmVnIGZyb20gZnBfcmVncy5mcHJzW3JlZ10gKi8KKwkJIglicmFzCTEsMGZcbiIKKwkJIglsZQkwLDAoJTEpXG4iCisJCSIwOglleAklMCwwKDEpIgorCQk6IC8qIG5vIG91dHB1dCAqLworCQk6ICJhIiAocmVnPDw0KSwgImEiICgmY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MuZnByc1tyZWddLmYpCisJCTogIjEiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGVtdV9zdG9yZV9yZWdkKGludCByZWcpIHsKLSAgICAgICAgaWYgKChyZWcmOSkgIT0gMCkgICAgICAgICAvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KKwlpZiAoKHJlZyY5KSAhPSAwKQkvKiB0ZXN0IGlmIHJlZyBpbiB7MCwyLDQsNn0gKi8KICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoICAgICAgICAgICAgLyogc3RvcmUgcmVnIHRvIGZwX3JlZ3MuZnByc1tyZWddICovCi0gICAgICAgICAgICAgICAgIiAgICAgYnJhcyAgMSwwZlxuIgotICAgICAgICAgICAgICAgICIgICAgIHN0ZCAgIDAsMCglMSlcbiIKLSAgICAgICAgICAgICAgICAiMDogICBleCAgICAlMCwwKDEpIgotICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgOiAiYSIgKHJlZzw8NCksICJhIiAoJmN1cnJlbnQtPnRocmVhZC5mcF9yZWdzLmZwcnNbcmVnXS5kKQotICAgICAgICAgICAgICAgIDogIjEiICk7CisJYXNtIHZvbGF0aWxlKAkJLyogc3RvcmUgcmVnIHRvIGZwX3JlZ3MuZnByc1tyZWddICovCisJCSIJYnJhcwkxLDBmXG4iCisJCSIJc3RkCTAsMCglMSlcbiIKKwkJIjA6CWV4CSUwLDAoMSkiCisJCTogLyogbm8gb3V0cHV0ICovCisJCTogImEiIChyZWc8PDQpLCAiYSIgKCZjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcHJzW3JlZ10uZCkKKwkJOiAiMSIpOwogfQogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBlbXVfc3RvcmVfcmVnZShpbnQgcmVnKSB7Ci0gICAgICAgIGlmICgocmVnJjkpICE9IDApICAgICAgICAgLyogdGVzdCBpZiByZWcgaW4gezAsMiw0LDZ9ICovCisJaWYgKChyZWcmOSkgIT0gMCkJLyogdGVzdCBpZiByZWcgaW4gezAsMiw0LDZ9ICovCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBhc20gdm9sYXRpbGUgKCAgICAgICAgICAgIC8qIHN0b3JlIHJlZyB0byBmcF9yZWdzLmZwcnNbcmVnXSAqLwotICAgICAgICAgICAgICAgICIgICAgIGJyYXMgIDEsMGZcbiIKLSAgICAgICAgICAgICAgICAiICAgICBzdGUgICAwLDAoJTEpXG4iCi0gICAgICAgICAgICAgICAgIjA6ICAgZXggICAgJTAsMCgxKSIKLSAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLwotICAgICAgICAgICAgICAgIDogImEiIChyZWc8PDQpLCAiYSIgKCZjdXJyZW50LT50aHJlYWQuZnBfcmVncy5mcHJzW3JlZ10uZikKLSAgICAgICAgICAgICAgICA6ICIxIiApOworCWFzbSB2b2xhdGlsZSgJCS8qIHN0b3JlIHJlZyB0byBmcF9yZWdzLmZwcnNbcmVnXSAqLworCQkiCWJyYXMJMSwwZlxuIgorCQkiCXN0ZQkwLDAoJTEpXG4iCisJCSIwOglleAklMCwwKDEpIgorCQk6IC8qIG5vIG91dHB1dCAqLworCQk6ICJhIiAocmVnPDw0KSwgImEiICgmY3VycmVudC0+dGhyZWFkLmZwX3JlZ3MuZnByc1tyZWddLmYpCisJCTogIjEiKTsKIH0KIAogaW50IG1hdGhfZW11X2IzKF9fdTggKm9wY29kZSwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKSB7CkBAIC0yMDg5LDIzICsyMDg5LDIyIEBACiAKICAgICAgICAgaWYgKChvcGMgJiAweDkwKSA9PSAwKSB7ICAgICAgICAgICAvKiB0ZXN0IGlmIHJ4IGluIHswLDIsNCw2fSAqLwogICAgICAgICAgICAgICAgIC8qIHdlIGdvdCBhbiBleGNlcHRpb24gdGhlcmZvcmUgcnkgY2FuJ3QgYmUgaW4gezAsMiw0LDZ9ICovCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICggICAgICAgLyogbG9hZCByeCBmcm9tIGZwX3JlZ3MuZnByc1tyeV0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIGJyYXMgIDEsMGZcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIGxkICAgIDAsMCglMSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIwOiAgIGV4ICAgICUwLDAoMSkiCi0gICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgOiAiYSIgKG9wYyAmIDB4ZjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIgKCZmcF9yZWdzLT5mcHJzW29wYyAmIDB4Zl0uZCkKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiICk7CisJCWFzbSB2b2xhdGlsZSgJCS8qIGxvYWQgcnggZnJvbSBmcF9yZWdzLmZwcnNbcnldICovCisJCQkiCWJyYXMJMSwwZlxuIgorCQkJIglsZAkwLDAoJTEpXG4iCisJCQkiMDoJZXgJJTAsMCgxKSIKKwkJCTogLyogbm8gb3V0cHV0ICovCisJCQk6ICJhIiAob3BjICYgMHhmMCksICJhIiAoJmZwX3JlZ3MtPmZwcnNbb3BjICYgMHhmXS5kKQorCQkJOiAiMSIpOwogICAgICAgICB9IGVsc2UgaWYgKChvcGMgJiAweDkpID09IDApIHsgICAgIC8qIHRlc3QgaWYgcnkgaW4gezAsMiw0LDZ9ICovCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICggICAgICAgLyogc3RvcmUgcnkgdG8gZnBfcmVncy5mcHJzW3J4XSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgYnJhcyAgMSwwZlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgc3RkICAgMCwwKCUxKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIjA6ICAgZXggICAgJTAsMCgxKSIKLSAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICJhIiAoKG9wYyAmIDB4ZikgPDwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhIiAoJmZwX3JlZ3MtPmZwcnNbKG9wYyAmIDB4ZjApPj40XS5kKQotICAgICAgICAgICAgICAgICAgICAgICAgOiAiMSIgKTsKKwkJYXNtIHZvbGF0aWxlICgJCS8qIHN0b3JlIHJ5IHRvIGZwX3JlZ3MuZnByc1tyeF0gKi8KKwkJCSIJYnJhcwkxLDBmXG4iCisJCQkiCXN0ZAkwLDAoJTEpXG4iCisJCQkiMDoJZXgJJTAsMCgxKSIKKwkJCTogLyogbm8gb3V0cHV0ICovCisJCQk6ICJhIiAoKG9wYyAmIDB4ZikgPDwgNCksCisJCQkgICJhIiAoJmZwX3JlZ3MtPmZwcnNbKG9wYyAmIDB4ZjApPj40XS5kKQorCQkJOiAiMSIpOwogICAgICAgICB9IGVsc2UgIC8qIG1vdmUgZnBfcmVncy5mcHJzW3J5XSB0byBmcF9yZWdzLmZwcnNbcnhdICovCiAgICAgICAgICAgICAgICAgZnBfcmVncy0+ZnByc1sob3BjICYgMHhmMCkgPj4gNF0gPSBmcF9yZWdzLT5mcHJzW29wYyAmIDB4Zl07CiAJcmV0dXJuIDA7CkBAIC0yMTIwLDIzICsyMTE5LDIyIEBACiAKICAgICAgICAgaWYgKChvcGMgJiAweDkwKSA9PSAwKSB7ICAgICAgICAgICAvKiB0ZXN0IGlmIHJ4IGluIHswLDIsNCw2fSAqLwogICAgICAgICAgICAgICAgIC8qIHdlIGdvdCBhbiBleGNlcHRpb24gdGhlcmZvcmUgcnkgY2FuJ3QgYmUgaW4gezAsMiw0LDZ9ICovCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICggICAgICAgLyogbG9hZCByeCBmcm9tIGZwX3JlZ3MuZnByc1tyeV0gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIGJyYXMgIDEsMGZcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIgICAgIGxlICAgIDAsMCglMSlcbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICIwOiAgIGV4ICAgICUwLDAoMSkiCi0gICAgICAgICAgICAgICAgICAgICAgICA6IC8qIG5vIG91dHB1dCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgOiAiYSIgKG9wYyAmIDB4ZjApLAotICAgICAgICAgICAgICAgICAgICAgICAgICAiYSIgKCZmcF9yZWdzLT5mcHJzW29wYyAmIDB4Zl0uZikKLSAgICAgICAgICAgICAgICAgICAgICAgIDogIjEiICk7CisJCWFzbSB2b2xhdGlsZSgJCS8qIGxvYWQgcnggZnJvbSBmcF9yZWdzLmZwcnNbcnldICovCisJCQkiCWJyYXMJMSwwZlxuIgorCQkJIglsZQkwLDAoJTEpXG4iCisJCQkiMDoJZXgJJTAsMCgxKSIKKwkJCTogLyogbm8gb3V0cHV0ICovCisJCQk6ICJhIiAob3BjICYgMHhmMCksICJhIiAoJmZwX3JlZ3MtPmZwcnNbb3BjICYgMHhmXS5mKQorCQkJOiAiMSIpOwogICAgICAgICB9IGVsc2UgaWYgKChvcGMgJiAweDkpID09IDApIHsgICAgIC8qIHRlc3QgaWYgcnkgaW4gezAsMiw0LDZ9ICovCi0gICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlICggICAgICAgLyogc3RvcmUgcnkgdG8gZnBfcmVncy5mcHJzW3J4XSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgYnJhcyAgMSwwZlxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAgc3RlICAgMCwwKCUxKVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIjA6ICAgZXggICAgJTAsMCgxKSIKLSAgICAgICAgICAgICAgICAgICAgICAgIDogLyogbm8gb3V0cHV0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICJhIiAoKG9wYyAmIDB4ZikgPDwgNCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICJhIiAoJmZwX3JlZ3MtPmZwcnNbKG9wYyAmIDB4ZjApID4+IDRdLmYpCi0gICAgICAgICAgICAgICAgICAgICAgICA6ICIxIiApOworCQlhc20gdm9sYXRpbGUoCQkvKiBzdG9yZSByeSB0byBmcF9yZWdzLmZwcnNbcnhdICovCisJCQkiCWJyYXMJMSwwZlxuIgorCQkJIglzdGUJMCwwKCUxKVxuIgorCQkJIjA6CWV4CSUwLDAoMSkiCisJCQk6IC8qIG5vIG91dHB1dCAqLworCQkJOiAiYSIgKChvcGMgJiAweGYpIDw8IDQpLAorCQkJICAiYSIgKCZmcF9yZWdzLT5mcHJzWyhvcGMgJiAweGYwKSA+PiA0XS5mKQorCQkJOiAiMSIpOwogICAgICAgICB9IGVsc2UgIC8qIG1vdmUgZnBfcmVncy5mcHJzW3J5XSB0byBmcF9yZWdzLmZwcnNbcnhdICovCiAgICAgICAgICAgICAgICAgZnBfcmVncy0+ZnByc1sob3BjICYgMHhmMCkgPj4gNF0gPSBmcF9yZWdzLT5mcHJzW29wYyAmIDB4Zl07CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbWF0aC1lbXUvc2ZwLXV0aWwuaCBiL2FyY2gvczM5MC9tYXRoLWVtdS9zZnAtdXRpbC5oCmluZGV4IGFiNTU2YjYuLjViNmNhNDUgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tYXRoLWVtdS9zZnAtdXRpbC5oCisrKyBiL2FyY2gvczM5MC9tYXRoLWVtdS9zZnAtdXRpbC5oCkBAIC00LDQ4ICs0LDUxIEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjZGVmaW5lIGFkZF9zc2FhYWEoc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgKHsJCVwKLSAgICAgICAgdW5zaWduZWQgaW50IF9fc2ggPSAoYWgpOwkJCVwKLSAgICAgICAgdW5zaWduZWQgaW50IF9fc2wgPSAoYWwpOwkJCVwKLSAgICAgICAgX19hc21fXyAoIiAgIGFsciAgJTEsJTNcbiIJCQlcCi0gICAgICAgICAgICAgICAgICIgICBicmMgIDEyLDBmXG4iCQkJXAotICAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwxXG4iCQkJXAotICAgICAgICAgICAgICAgICAiMDogYWxyICAlMCwlMiIJCQlcCi0gICAgICAgICAgICAgICAgIDogIismZCIgKF9fc2gpLCAiK2QiIChfX3NsKQkJXAotICAgICAgICAgICAgICAgICA6ICJkIiAoYmgpLCAiZCIgKGJsKSA6ICJjYyIgKTsJCVwKLSAgICAgICAgKHNoKSA9IF9fc2g7CQkJCQlcCi0gICAgICAgIChzbCkgPSBfX3NsOwkJCQkJXAorCXVuc2lnbmVkIGludCBfX3NoID0gKGFoKTsJCQlcCisJdW5zaWduZWQgaW50IF9fc2wgPSAoYWwpOwkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQlcCisJCSIJYWxyCSUxLCUzXG4iCQlcCisJCSIJYnJjCTEyLDBmXG4iCQlcCisJCSIJYWhpCSUwLDFcbiIJCQlcCisJCSIwOglhbHIgICUwLCUyIgkJCVwKKwkJOiAiKyZkIiAoX19zaCksICIrZCIgKF9fc2wpCQlcCisJCTogImQiIChiaCksICJkIiAoYmwpIDogImNjIik7CQlcCisJKHNoKSA9IF9fc2g7CQkJCQlcCisJKHNsKSA9IF9fc2w7CQkJCQlcCiB9KQogCiAjZGVmaW5lIHN1Yl9kZG1tc3Moc2gsIHNsLCBhaCwgYWwsIGJoLCBibCkgKHsJCVwKLSAgICAgICB1bnNpZ25lZCBpbnQgX19zaCA9IChhaCk7CQkJXAotICAgICAgIHVuc2lnbmVkIGludCBfX3NsID0gKGFsKTsJCQlcCi0gICAgICAgX19hc21fXyAoIiAgIHNsciAgJTEsJTNcbiIJCQlcCi0gICAgICAgICAgICAgICAgIiAgIGJyYyAgMywwZlxuIgkJCVwKLSAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwtMVxuIgkJCVwKLSAgICAgICAgICAgICAgICAiMDogc2xyICAlMCwlMiIJCQkJXAotICAgICAgICAgICAgICAgIDogIismZCIgKF9fc2gpLCAiK2QiIChfX3NsKQkJXAotICAgICAgICAgICAgICAgIDogImQiIChiaCksICJkIiAoYmwpIDogImNjIiApOwkJXAotICAgICAgIChzaCkgPSBfX3NoOwkJCQkJXAotICAgICAgIChzbCkgPSBfX3NsOwkJCQkJXAorCXVuc2lnbmVkIGludCBfX3NoID0gKGFoKTsJCQlcCisJdW5zaWduZWQgaW50IF9fc2wgPSAoYWwpOwkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQlcCisJCSIJc2xyCSUxLCUzXG4iCQlcCisJCSIJYnJjCTMsMGZcbiIJCQlcCisJCSIJYWhpCSUwLC0xXG4iCQlcCisJCSIwOglzbHIJJTAsJTIiCQkJXAorCQk6ICIrJmQiIChfX3NoKSwgIitkIiAoX19zbCkJCVwKKwkJOiAiZCIgKGJoKSwgImQiIChibCkgOiAiY2MiKTsJCVwKKwkoc2gpID0gX19zaDsJCQkJCVwKKwkoc2wpID0gX19zbDsJCQkJCVwKIH0pCiAKIC8qIGEgdW11bCBiID0gYSBtdWwgYiArIChhPj0yPDwzMSkgPyBiPDwzMjowICsgKGI+PTI8PDMxKSA/IGE8PDMyOjAgKi8KICNkZWZpbmUgdW11bF9wcG1tKHdoLCB3bCwgdSwgdikgKHsJCQlcCi0gICAgICAgIHVuc2lnbmVkIGludCBfX3doID0gdTsJCQkJXAotICAgICAgICB1bnNpZ25lZCBpbnQgX193bCA9IHY7CQkJCVwKLSAgICAgICAgX19hc21fXyAoIiAgIGx0ciAgMSwlMFxuIgkJCVwKLSAgICAgICAgICAgICAgICAgIiAgIG1yICAgMCwlMVxuIgkJCVwKLSAgICAgICAgICAgICAgICAgIiAgIGpubSAgMGZcbiIJCQkJXAotICAgICAgICAgICAgICAgICAiICAgYWxyICAwLCUxXG4iCQkJXAotICAgICAgICAgICAgICAgICAiMDogbHRyICAlMSwlMVxuIgkJCVwKLSAgICAgICAgICAgICAgICAgIiAgIGpubSAgMWZcbiIJCQkJXAotICAgICAgICAgICAgICAgICAiICAgYWxyICAwLCUwXG4iCQkJXAotICAgICAgICAgICAgICAgICAiMTogbHIgICAlMCwwXG4iCQkJXAotICAgICAgICAgICAgICAgICAiICAgbHIgICAlMSwxXG4iCQkJXAotICAgICAgICAgICAgICAgICA6ICIrZCIgKF9fd2gpLCAiK2QiIChfX3dsKQkJXAotICAgICAgICAgICAgICAgICA6IDogIjAiLCAiMSIsICJjYyIgKTsJCQlcCi0gICAgICAgIHdoID0gX193aDsJCQkJCVwKLSAgICAgICAgd2wgPSBfX3dsOwkJCQkJXAorCXVuc2lnbmVkIGludCBfX3doID0gdTsJCQkJXAorCXVuc2lnbmVkIGludCBfX3dsID0gdjsJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCVwKKwkJIglsdHIJMSwlMFxuIgkJCVwKKwkJIgltcgkwLCUxXG4iCQkJXAorCQkiCWpubQkwZlxuIgkJCQlcCisJCSIJYWxyCTAsJTFcbiIJCQlcCisJCSIwOglsdHIJJTEsJTFcbiIJCQlcCisJCSIJam5tCTFmXG4iCQkJCVwKKwkJIglhbHIJMCwlMFxuIgkJCVwKKwkJIjE6CWxyCSUwLDBcbiIJCQlcCisJCSIJbHIJJTEsMVxuIgkJCVwKKwkJOiAiK2QiIChfX3doKSwgIitkIiAoX193bCkJCVwKKwkJOiA6ICIwIiwgIjEiLCAiY2MiKTsJCQlcCisJd2ggPSBfX3doOwkJCQkJXAorCXdsID0gX193bDsJCQkJCVwKIH0pCiAKICNkZWZpbmUgdWRpdl9xcm5uZChxLCByLCBuMSwgbjAsIGQpCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2V4dG1lbS5jIGIvYXJjaC9zMzkwL21tL2V4dG1lbS5jCmluZGV4IDliMTFlM2UuLjIyNjI3NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvczM5MC9tbS9leHRtZW0uYworKysgYi9hcmNoL3MzOTAvbW0vZXh0bWVtLmMKQEAgLTE0MiwxNyArMTQyLDE3IEBACiAKIAlyeCA9ICh1bnNpZ25lZCBsb25nKSBwYXJhbWV0ZXI7CiAJcnkgPSAodW5zaWduZWQgbG9uZykgZnVuYzsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlhc20gdm9sYXRpbGUoCiAjaWZkZWYgQ09ORklHXzY0QklUCi0JCSIgICBzYW0zMVxuIiAvLyBzd2l0Y2ggdG8gMzEgYml0Ci0JCSIgICBkaWFnICAgICUwLCUxLDB4NjRcbiIKLQkJIiAgIHNhbTY0XG4iIC8vIHN3aXRjaCBiYWNrIHRvIDY0IGJpdAorCQkiCXNhbTMxXG4iCisJCSIJZGlhZwklMCwlMSwweDY0XG4iCisJCSIJc2FtNjRcbiIKICNlbHNlCi0JCSIgICBkaWFnICAgICUwLCUxLDB4NjRcbiIKKwkJIglkaWFnCSUwLCUxLDB4NjRcbiIKICNlbmRpZgotCQkiICAgaXBtICAgICAlMlxuIgotCQkiICAgc3JsICAgICAlMiwyOFxuIgotCQk6ICIrZCIgKHJ4KSwgIitkIiAocnkpLCAiPWQiIChyYykgOiA6ICJjYyIgKTsKKwkJIglpcG0JJTJcbiIKKwkJIglzcmwJJTIsMjhcbiIKKwkJOiAiK2QiIChyeCksICIrZCIgKHJ5KSwgIj1kIiAocmMpIDogOiAiY2MiKTsKIAkqcmV0MSA9IHJ4OwogCSpyZXQyID0gcnk7CiAJcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NGYwY2RhLi45YzNjMTlmIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYworKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtMzUzLDggKzM1Myw5IEBACiAqLwogb3V0X29mX21lbW9yeToKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmICh0c2stPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQodHNrKSkgewogCQl5aWVsZCgpOworCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CiAJCWdvdG8gc3Vydml2ZTsKIAl9CiAJcHJpbnRrKCJWTToga2lsbGluZyBwcm9jZXNzICVzXG4iLCB0c2stPmNvbW0pOwpAQCAtNDIzLDIwICs0MjQsMTMgQEAKIAogCWlmIChwZmF1bHRfZGlzYWJsZSkKIAkJcmV0dXJuIC0xOwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKLSAgICAgICAgICAgICAgICAiICAgIGRpYWcgICUxLCUwLDB4MjU4XG4iCi0JCSIwOiAgaiAgICAgMmZcbiIKLQkJIjE6ICBsYSAgICAlMCw4XG4iCisJYXNtIHZvbGF0aWxlKAorCQkiCWRpYWcJJTEsJTAsMHgyNThcbiIKKwkJIjA6CWoJMmZcbiIKKwkJIjE6CWxhCSUwLDhcbiIKIAkJIjI6XG4iCi0JCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCSIgICAuYWxpZ24gNFxuIgotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQkJIiAgIC5sb25nICAwYiwxYlxuIgotI2Vsc2UgLyogQ09ORklHXzY0QklUICovCi0JCSIgICAucXVhZCAgMGIsMWJcbiIKLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KLQkJIi5wcmV2aW91cyIKLSAgICAgICAgICAgICAgICA6ICI9ZCIgKHJjKSA6ICJhIiAoJnJlZmJrKSwgIm0iIChyZWZiaykgOiAiY2MiICk7CisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICI9ZCIgKHJjKSA6ICJhIiAoJnJlZmJrKSwgIm0iIChyZWZiaykgOiAiY2MiKTsKICAgICAgICAgX19jdGxfc2V0X2JpdCgwLCA5KTsKICAgICAgICAgcmV0dXJuIHJjOwogfQpAQCAtNDQ5LDE4ICs0NDMsMTEgQEAKIAlpZiAocGZhdWx0X2Rpc2FibGUpCiAJCXJldHVybjsKIAlfX2N0bF9jbGVhcl9iaXQoMCw5KTsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCi0gICAgICAgICAgICAgICAgIiAgICBkaWFnICAlMCwwLDB4MjU4XG4iCisJYXNtIHZvbGF0aWxlKAorCQkiCWRpYWcJJTAsMCwweDI1OFxuIgogCQkiMDpcbiIKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIiAgIC5hbGlnbiA0XG4iCi0jaWZuZGVmIENPTkZJR182NEJJVAotCQkiICAgLmxvbmcgIDBiLDBiXG4iCi0jZWxzZSAvKiBDT05GSUdfNjRCSVQgKi8KLQkJIiAgIC5xdWFkICAwYiwwYlxuIgotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwotCQkiLnByZXZpb3VzIgotCQk6IDogImEiICgmcmVmYmspLCAibSIgKHJlZmJrKSA6ICJjYyIgKTsKKwkJRVhfVEFCTEUoMGIsMGIpCisJCTogOiAiYSIgKCZyZWZiayksICJtIiAocmVmYmspIDogImNjIik7CiB9CiAKIGFzbWxpbmthZ2Ugdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2luaXQuYyBiL2FyY2gvczM5MC9tbS9pbml0LmMKaW5kZXggY2ZkOWI4Zi4uMTI3MDQ0ZSAxMDA2NDQKLS0tIGEvYXJjaC9zMzkwL21tL2luaXQuYworKysgYi9hcmNoL3MzOTAvbW0vaW5pdC5jCkBAIC00NSwyNiArNDUsMTcgQEAKIHsKICAgICAgICAgaWYgKGFkZHIgPj0gMHg3ZmYwMDAwMCkKICAgICAgICAgICAgICAgICByZXR1cm47CisJYXNtIHZvbGF0aWxlKAogI2lmZGVmIENPTkZJR182NEJJVAotICAgICAgICBhc20gdm9sYXRpbGUgKAotCQkiICAgc2FtMzFcbiIKLQkJIiAgIGRpYWcgJTAsJTAsMHgxMFxuIgotCQkiMDogc2FtNjRcbiIKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIiAgIC5hbGlnbiA4XG4iCi0JCSIgICAucXVhZCAwYiwgMGJcbiIKLQkJIi5wcmV2aW91c1xuIgotCQk6IDogImEiIChhZGRyKSk7CisJCSIJc2FtMzFcbiIKKwkJIglkaWFnCSUwLCUwLDB4MTBcbiIKKwkJIjA6CXNhbTY0XG4iCiAjZWxzZQotICAgICAgICBhc20gdm9sYXRpbGUgKAotCQkiICAgZGlhZyAlMCwlMCwweDEwXG4iCisJCSIJZGlhZwklMCwlMCwweDEwXG4iCiAJCSIwOlxuIgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiICAgLmFsaWduIDRcbiIKLQkJIiAgIC5sb25nIDBiLCAwYlxuIgotCQkiLnByZXZpb3VzXG4iCi0JCTogOiAiYSIgKGFkZHIpKTsKICNlbmRpZgorCQlFWF9UQUJMRSgwYiwwYikKKwkJOiA6ICJhIiAoYWRkcikpOwogfQogCiB2b2lkIHNob3dfbWVtKHZvaWQpCkBAIC0xNTYsMTEgKzE0NywxMCBAQAogCVMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZSA9IHBnZGlyX2s7CiAKICAgICAgICAgLyogZW5hYmxlIHZpcnR1YWwgbWFwcGluZyBpbiBrZXJuZWwgbW9kZSAqLwotICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiICAgIExDVEwgIDEsMSwlMFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIExDVEwgIDcsNywlMFxuIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIExDVEwgIDEzLDEzLCUwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgU1NNICAgJTEiIAotCQkJICAgICA6IDogIm0iIChwZ2Rpcl9rKSwgIm0iIChzc21fbWFzaykpOworCV9fY3RsX2xvYWQocGdkaXJfaywgMSwgMSk7CisJX19jdGxfbG9hZChwZ2Rpcl9rLCA3LCA3KTsKKwlfX2N0bF9sb2FkKHBnZGlyX2ssIDEzLCAxMyk7CisJX19yYXdfbG9jYWxfaXJxX3NzbShzc21fbWFzayk7CiAKICAgICAgICAgbG9jYWxfZmx1c2hfdGxiKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTI0MSwxMSArMjMxLDEwIEBACiAJUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlID0gcGdkaXJfazsKIAogICAgICAgICAvKiBlbmFibGUgdmlydHVhbCBtYXBwaW5nIGluIGtlcm5lbCBtb2RlICovCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJsY3RsZyAxLDEsJTBcblx0IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGN0bGcgNyw3LCUwXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImxjdGxnIDEzLDEzLCUwXG5cdCIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNzbSAgICUxIgotCQkJICAgICA6IDoibSIgKHBnZGlyX2spLCAibSIgKHNzbV9tYXNrKSk7CisJX19jdGxfbG9hZChwZ2Rpcl9rLCAxLCAxKTsKKwlfX2N0bF9sb2FkKHBnZGlyX2ssIDcsIDcpOworCV9fY3RsX2xvYWQocGdkaXJfaywgMTMsIDEzKTsKKwlfX3Jhd19sb2NhbF9pcnFfc3NtKHNzbV9tYXNrKTsKIAogICAgICAgICBsb2NhbF9mbHVzaF90bGIoKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9LY29uZmlnIGIvYXJjaC9zaC9LY29uZmlnCmluZGV4IDFhMGRiMWQuLjFjYzVjOWIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvS2NvbmZpZworKysgYi9hcmNoL3NoL0tjb25maWcKQEAgLTgsNiArOCw3IEBACiBjb25maWcgU1VQRVJICiAJYm9vbAogCWRlZmF1bHQgeQorCXNlbGVjdCBFTUJFRERFRAogCWhlbHAKIAkgIFRoZSBTdXBlckggaXMgYSBSSVNDIHByb2Nlc3NvciB0YXJnZXRlZCBmb3IgdXNlIGluIGVtYmVkZGVkIHN5c3RlbXMKIAkgIGFuZCBjb25zdW1lciBlbGVjdHJvbmljczsgaXQgd2FzIGFsc28gdXNlZCBpbiB0aGUgU2VnYSBEcmVhbWNhc3QKQEAgLTUxLDE4ICs1MiwyMyBAQAogCiBtZW51ICJTeXN0ZW0gdHlwZSIKIAorY29uZmlnIFNPTFVUSU9OX0VOR0lORQorCWJvb2wKKwogY2hvaWNlCiAJcHJvbXB0ICJTdXBlckggc3lzdGVtIHR5cGUiCiAJZGVmYXVsdCBTSF9VTktOT1dOCiAKIGNvbmZpZyBTSF9TT0xVVElPTl9FTkdJTkUKIAlib29sICJTb2x1dGlvbkVuZ2luZSIKKwlzZWxlY3QgU09MVVRJT05fRU5HSU5FCiAJaGVscAogCSAgU2VsZWN0IFNvbHV0aW9uRW5naW5lIGlmIGNvbmZpZ3VyaW5nIGZvciBhIEhpdGFjaGkgU0g3NzA5CiAJICBvciBTSDc3NTAgZXZhbHVhdGlvbiBib2FyZC4KIAogY29uZmlnIFNIXzc3NTFfU09MVVRJT05fRU5HSU5FCiAJYm9vbCAiU29sdXRpb25FbmdpbmU3NzUxIgorCXNlbGVjdCBTT0xVVElPTl9FTkdJTkUKIAlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzUxCiAJaGVscAogCSAgU2VsZWN0IDc3NTEgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDc3NTEKQEAgLTcwLDE3ICs3NiwyNyBAQAogCiBjb25maWcgU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUKIAlib29sICJTb2x1dGlvbkVuZ2luZTczMDAiCisJc2VsZWN0IFNPTFVUSU9OX0VOR0lORQogCXNlbGVjdCBDUFVfU1VCVFlQRV9TSDczMDAKIAloZWxwCi0JICBTZWxlY3QgNzMwMCBTb2x1dGlvbkVuZ2luZSBpZiBjb25maWd1cmluZyBmb3IgYSBIaXRhY2hpIFNINzMwMChTSC1Nb2JpbGUgVikKLQkgIGV2YWx1YXRpb24gYm9hcmQuCisJICBTZWxlY3QgNzMwMCBTb2x1dGlvbkVuZ2luZSBpZiBjb25maWd1cmluZyBmb3IgYSBIaXRhY2hpCisJICBTSDczMDAoU0gtTW9iaWxlIFYpIGV2YWx1YXRpb24gYm9hcmQuCisKK2NvbmZpZyBTSF83MzQzX1NPTFVUSU9OX0VOR0lORQorCWJvb2wgIlNvbHV0aW9uRW5naW5lNzM0MyIKKwlzZWxlY3QgU09MVVRJT05fRU5HSU5FCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzM0MworCWhlbHAKKwkgIFNlbGVjdCA3MzQzIFNvbHV0aW9uRW5naW5lIGlmIGNvbmZpZ3VyaW5nIGZvciBhIEhpdGFjaGkKKwkgIFNINzM0MyAoU0gtTW9iaWxlIDNBUykgZXZhbHVhdGlvbiBib2FyZC4KIAogY29uZmlnIFNIXzczMTgwX1NPTFVUSU9OX0VOR0lORQogICAgICAgIGJvb2wgIlNvbHV0aW9uRW5naW5lNzMxODAiCi0gICAgICAgc2VsZWN0IENQVV9TVUJUWVBFX1NINzMxODAKLSAgICAgICBoZWxwCi0gICAgICAgICBTZWxlY3QgNzMxODAgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaSBTSDczMTgwKFNILU1vYmlsZSAzKQotICAgICAgICAgZXZhbHVhdGlvbiBib2FyZC4KKwlzZWxlY3QgU09MVVRJT05fRU5HSU5FCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzMxODAKKwloZWxwCisJICBTZWxlY3QgNzMxODAgU29sdXRpb25FbmdpbmUgaWYgY29uZmlndXJpbmcgZm9yIGEgSGl0YWNoaQorCSAgU0g3MzE4MChTSC1Nb2JpbGUgMykgZXZhbHVhdGlvbiBib2FyZC4KIAogY29uZmlnIFNIXzc3NTFfU1lTVEVNSAogCWJvb2wgIlN5c3RlbUg3NzUxUiIKQEAgLTg5LDEyICsxMDUsNiBAQAogCSAgU2VsZWN0IFN5c3RlbUggaWYgeW91IGFyZSBjb25maWd1cmluZyBmb3IgYSBSZW5lc2FzIFN5c3RlbUgKIAkgIDc3NTFSIGV2YWx1YXRpb24gYm9hcmQuCiAKLWNvbmZpZyBTSF9TVEIxX0hBUlAKLQlib29sICJTVEIxX0hhcnAiCi0KLWNvbmZpZyBTSF9TVEIxX09WRVJEUklWRQotCWJvb2wgIlNUQjFfT3ZlcmRyaXZlIgotCiBjb25maWcgU0hfSFA2WFgKIAlib29sICJIUDZYWCIKIAloZWxwCkBAIC0xMDIsMTkgKzExMiw2IEBACiAJICBNb3JlIGluZm9ybWF0aW9uIChoYXJkd2FyZSBvbmx5KSBhdAogCSAgPGh0dHA6Ly93d3cuaHAuY29tL2pvcm5hZGEvPi4KIAotY29uZmlnIFNIX0NRUkVFSwotCWJvb2wgIkNxUkVFSyIKLQloZWxwCi0JICBTZWxlY3QgQ3FSRUVLIGlmIGNvbmZpZ3VyaW5nIGZvciBhIENxUkVFSyBTSDc3MDggb3IgU0g3NzUwLgotCSAgTW9yZSBpbmZvcm1hdGlvbiBhdAotCSAgPGh0dHA6Ly9zb3VyY2VzLnJlZGhhdC5jb20vZWNvcy9oYXJkd2FyZS5odG1sI1N1cGVySD4uCi0KLWNvbmZpZyBTSF9ETUlEQQotCWJvb2wgIkRNSURBIgotCWhlbHAKLQkgIFNlbGVjdCBETUlEQSBpZiBjb25maWd1cmluZyBmb3IgYSBEYXRhTXl0ZSA0MDAwIEluZHVzdHJpYWwKLQkgIERpZ2l0YWwgQXNzaXN0YW50LiBNb3JlIGluZm9ybWF0aW9uIGF0IDxodHRwOi8vd3d3LmRtaWRhLmNvbS8+LgotCiBjb25maWcgU0hfRUMzMTA0CiAJYm9vbCAiRUMzMTA0IgogCWhlbHAKQEAgLTEzNiwyNSArMTMzLDkgQEAKIAkgIDxodHRwOi8vd3d3Lm0xN24ub3JnL2xpbnV4LXNoL2RyZWFtY2FzdC8+LiAgVGhlcmUgaXMgYQogCSAgRHJlYW1jYXN0IHByb2plY3QgaXMgYXQgPGh0dHA6Ly9saW51eGRjLnNvdXJjZWZvcmdlLm5ldC8+LgogCi1jb25maWcgU0hfQ0FUNjg3MDEKLQlib29sICJDQVQ2ODcwMSIKLQogY29uZmlnIFNIX0JJR1NVUgogCWJvb2wgIkJpZ1N1ciIKIAotY29uZmlnIFNIX1NIMjAwMAotCWJvb2wgIlNIMjAwMCIKLQlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzA5Ci0JaGVscAotCSAgU0gtMjAwMCBpcyBhIHNpbmdsZS1ib2FyZCBjb21wdXRlciBiYXNlZCBhcm91bmQgU0g3NzA5QSBjaGlwCi0JICBpbnRlbmRlZCBmb3IgZW1iZWRkZWQgYXBwbGljYXRpb25zLgotCSAgSXQgaGFzIGFuIEV0aGVybmV0IGludGVyZmFjZSAoQ1M4OTAwQSksIGRpcmVjdCBjb25uZWN0ZWQKLQkgIENvbXBhY3QgRmxhc2ggc29ja2V0LCB0aHJlZSBzZXJpYWwgcG9ydHMgYW5kIFBDLTEwNCBidXMuCi0JICBNb3JlIGluZm9ybWF0aW9uIGF0IDxodHRwOi8vc2gyMDAwLnNoLWxpbnV4Lm9yZz4uCi0KLWNvbmZpZyBTSF9BRFgKLQlib29sICJBRFgiCi0KIGNvbmZpZyBTSF9NUEMxMjExCiAJYm9vbCAiSW50ZXJmYWNlIE1QQzEyMTEiCiAJaGVscApAQCAtMTg0LDYgKzE2NSwxMyBAQAogCSAgU2VsZWN0IEhTNzc1MVJWT0lQIGlmIGNvbmZpZ3VyaW5nIGZvciBhIFJlbmVzYXMgVGVjaG5vbG9neQogCSAgU2FsZXMgVm9JUCBib2FyZC4KIAorY29uZmlnIFNIXzc3MTBWT0lQR1cKKwlib29sICJTSDc3MTAtVk9JUC1HVyIKKwlzZWxlY3QgQ1BVX1NVQlRZUEVfU0g3NzEwCisJaGVscAorCSAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIGJ1aWxkIGEga2VybmVsIGZvciB0aGUgU0g3NzEwIGJhc2VkCisJICBWT0lQIEdXLgorCiBjb25maWcgU0hfUlRTNzc1MVIyRAogCWJvb2wgIlJUUzc3NTFSMkQiCiAJc2VsZWN0IENQVV9TVUJUWVBFX1NINzc1MVIKQEAgLTIyMiw2ICsyMTAsMTIgQEAKIAkgIFNlbGVjdCBUaXRhbiBpZiB5b3UgYXJlIGNvbmZpZ3VyaW5nIGZvciBhIE5pbWJsZSBNaWNyb3N5c3RlbXMKIAkgIE5ldEVuZ2luZSBOUDUxUi4KIAorY29uZmlnIFNIX1NITUlOCisJYm9vbCAiU0hNSU4iCisJc2VsZWN0IENQVV9TVUJUWVBFX1NINzcwNgorCWhlbHAKKwkgIFNlbGVjdCBTSE1JTiBpZiBjb25maWd1cmVpbmcgZm9yIHRoZSBTSE1JTiBib2FyZAorCiBjb25maWcgU0hfVU5LTk9XTgogCWJvb2wgIkJhcmVDUFUiCiAJaGVscApAQCAtMjM4LDM1ICsyMzIsOSBAQAogCiBzb3VyY2UgImFyY2gvc2gvbW0vS2NvbmZpZyIKIAotY29uZmlnIE1FTU9SWV9TVEFSVAotCWhleCAiUGh5c2ljYWwgbWVtb3J5IHN0YXJ0IGFkZHJlc3MiCi0JZGVmYXVsdCAiMHgwODAwMDAwMCIKLQktLS1oZWxwLS0tCi0JICBDb21wdXRlcnMgYnVpbHQgd2l0aCBIaXRhY2hpIFN1cGVySCBwcm9jZXNzb3JzIGFsd2F5cwotCSAgbWFwIHRoZSBST00gc3RhcnRpbmcgYXQgYWRkcmVzcyB6ZXJvLiAgQnV0IHRoZSBwcm9jZXNzb3IKLQkgIGRvZXMgbm90IHNwZWNpZnkgdGhlIHJhbmdlIHRoYXQgUkFNIHRha2VzLgotCi0JICBUaGUgcGh5c2ljYWwgbWVtb3J5IChSQU0pIHN0YXJ0IGFkZHJlc3Mgd2lsbCBiZSBhdXRvbWF0aWNhbGx5Ci0JICBzZXQgdG8gMDgwMDAwMDAuIE90aGVyIHBsYXRmb3Jtcywgc3VjaCBhcyB0aGUgU29sdXRpb24gRW5naW5lCi0JICBib2FyZHMgdHlwaWNhbGx5IG1hcCBSQU0gYXQgMEMwMDAwMDAuCi0KLQkgIFR3ZWFrIHRoaXMgb25seSB3aGVuIHBvcnRpbmcgdG8gYSBuZXcgbWFjaGluZSB3aGljaCBkb2VzIG5vdAotCSAgYWxyZWFkeSBoYXZlIGEgZGVmY29uZmlnLiBDaGFuZ2luZyBpdCBmcm9tIHRoZSBrbm93biBjb3JyZWN0Ci0JICB2YWx1ZSBvbiBhbnkgb2YgdGhlIGtub3duIHN5c3RlbXMgd2lsbCBvbmx5IGxlYWQgdG8gZGlzYXN0ZXIuCi0KLWNvbmZpZyBNRU1PUllfU0laRQotCWhleCAiUGh5c2ljYWwgbWVtb3J5IHNpemUiCi0JZGVmYXVsdCAiMHgwMDQwMDAwMCIKLQloZWxwCi0JICBUaGlzIHNldHMgdGhlIGRlZmF1bHQgbWVtb3J5IHNpemUgYXNzdW1lZCBieSB5b3VyIFNIIGtlcm5lbC4gSXQgY2FuCi0JICBiZSBvdmVycmlkZGVuIGFzIG5vcm1hbCBieSB0aGUgJ21lbT0nIGFyZ3VtZW50IG9uIHRoZSBrZXJuZWwgY29tbWFuZAotCSAgbGluZS4gSWYgdW5zdXJlLCBjb25zdWx0IHlvdXIgYm9hcmQgc3BlY2lmaWNhdGlvbnMgb3IganVzdCBsZWF2ZSBpdAotCSAgYXMgMHgwMDQwMDAwMCB3aGljaCB3YXMgdGhlIGRlZmF1bHQgdmFsdWUgYmVmb3JlIHRoaXMgYmVjYW1lCi0JICBjb25maWd1cmFibGUuCi0KIGNvbmZpZyBDRl9FTkFCTEVSCiAJYm9vbCAiQ29tcGFjdCBGbGFzaCBFbmFibGVyIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBTSF9BRFggfHwgU0hfU09MVVRJT05fRU5HSU5FIHx8IFNIX1VOS05PV04gfHwgU0hfQ0FUNjg3MDEgfHwgU0hfU0gwMworCWRlcGVuZHMgb24gU0hfU09MVVRJT05fRU5HSU5FIHx8IFNIX1VOS05PV04gfHwgU0hfU0gwMwogCS0tLWhlbHAtLS0KIAkgIENvbXBhY3QgRmxhc2ggaXMgYSBzbWFsbCwgcmVtb3ZhYmxlIG1hc3Mgc3RvcmFnZSBkZXZpY2UgaW50cm9kdWNlZAogCSAgaW4gMTk5NCBvcmlnaW5hbGx5IGFzIGEgUENNQ0lBIGRldmljZS4gIElmIHlvdSBzYXkgYFknIGhlcmUsIHlvdQpAQCAtMjk0LDcgKzI2Miw3IEBACiAJICAtICJBcmVhNSIgaWYgQ29tcGFjdEZsYXNoIGlzIGNvbm5lY3RlZCB0byBBcmVhIDUgKDB4MTQwMDAwMDApCiAJICAtICJBcmVhNiIgaWYgaXQgaXMgY29ubmVjdGVkIHRvIEFyZWEgNiAoMHgxODAwMDAwMCkKIAotCSAgIkFyZWE2IiB3aWxsIHdvcmsgZm9yIG1vc3QgYm9hcmRzLiBGb3IgQURYLCBzZWxlY3QgIkFyZWE1Ii4KKwkgICJBcmVhNiIgd2lsbCB3b3JrIGZvciBtb3N0IGJvYXJkcy4KIAogY29uZmlnIENGX0FSRUE2CiAJYm9vbCAiQXJlYTYiCkBAIC0zMTYsMTkgKzI4NCw2IEBACiAJICBlbmRpYW4gYnl0ZSBvcmRlci4gVGhlc2UgbW9kZXMgcmVxdWlyZSBkaWZmZXJlbnQga2VybmVscy4gU2F5IFkgaWYKIAkgIHlvdXIgbWFjaGluZSBpcyBsaXR0bGUgZW5kaWFuLCBOIGlmIGl0J3MgYSBiaWcgZW5kaWFuIG1hY2hpbmUuCiAKLSMgVGhlIFNINzc1MCBSVEMgbW9kdWxlIGlzIGRpc2FibGVkIGluIHRoZSBEcmVhbWNhc3QKLWNvbmZpZyBTSF9SVEMKLQlib29sCi0JZGVwZW5kcyBvbiAhU0hfRFJFQU1DQVNUICYmICFTSF9TQVRVUk4gJiYgIVNIXzczMDBfU09MVVRJT05fRU5HSU5FICYmIFwKLQkJICAgIVNIXzczMTgwX1NPTFVUSU9OX0VOR0lORSAmJiAhU0hfTEFORElTSyAmJiBcCi0JCSAgICFTSF9SNzc4MFJQCi0JZGVmYXVsdCB5Ci0JaGVscAotCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgYWxsb3cgdGhlIExpbnV4IGtlcm5lbCB0byBlbXVsYXRlCi0JICBQQydzIFJUQy4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNIX0ZQVQogCWJvb2wgIkZQVSBzdXBwb3J0IgogCWRlcGVuZHMgb24gIUNQVV9TSDMKQEAgLTMzOSwxNCArMjk0LDIyIEBACiAKIAkgIFRoaXMgb3B0aW9uIG11c3QgYmUgc2V0IGluIG9yZGVyIHRvIGVuYWJsZSB0aGUgRlBVLgogCitjb25maWcgU0hfRlBVX0VNVQorCWJvb2wgIkZQVSBlbXVsYXRpb24gc3VwcG9ydCIKKwlkZXBlbmRzIG9uICFTSF9GUFUgJiYgRVhQRVJJTUVOVEFMCisJZGVmYXVsdCBuCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHNvZnR3YXJlIEZQVSBlbXVsYXRpb24uCisJICBNb3N0IFNILTMgdXNlcnMgd2lsbCB3YW50IHRvIHNheSBZIGhlcmUsIHdoZXJlYXMgbW9zdCBTSC00IHVzZXJzIHdpbGwKKwkgIHdhbnQgdG8gc2F5IE4uCisKIGNvbmZpZyBTSF9EU1AKIAlib29sICJEU1Agc3VwcG9ydCIKLQlkZXBlbmRzIG9uICFDUFVfU0g0Ci0JZGVmYXVsdCB5CisJZGVmYXVsdCB5IGlmIFNINEFMX0RTUCB8fCAhQ1BVX1NINAorCWRlZmF1bHQgbgogCWhlbHAKIAkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIGVuYWJsZSBzdXBwb3J0IGZvciBTSCBwcm9jZXNzb3JzIHRoYXQKLQkgIGhhdmUgRFNQIHVuaXRzIChpZSwgU0gyLURTUCBhbmQgU0gzLURTUCkuIEl0IGlzIHNhZmUgdG8gc2F5IFkgaGVyZQotCSAgYnkgZGVmYXVsdCwgYXMgdGhlIGV4aXN0YW5jZSBvZiB0aGUgRFNQIHdpbGwgYmUgcHJvYmVkIGF0IHJ1bnRpbWUuCisJICBoYXZlIERTUCB1bml0cyAoaWUsIFNIMi1EU1AsIFNIMy1EU1AsIGFuZCBTSDRBTC1EU1ApLgogCiAJICBUaGlzIG9wdGlvbiBtdXN0IGJlIHNldCBpbiBvcmRlciB0byBlbmFibGUgdGhlIERTUC4KIApAQCAtMzczLDYgKzMzNiw5IEBACiBjb25maWcgQ1BVX0hBU19QSU5UX0lSUQogCWJvb2wKIAorY29uZmlnIENQVV9IQVNfTUFTS1JFR19JUlEKKwlib29sCisKIGNvbmZpZyBDUFVfSEFTX0lOVEMyX0lSUQogCWJvb2wKIApAQCAtNDAwLDE2ICszNjYsMTkgQEAKIAogZW5kbWVudQogCi0jc291cmNlICJhcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL0tjb25maWciCitzb3VyY2UgImFyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvS2NvbmZpZyIKIAotI3NvdXJjZSAiYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL0tjb25maWciCitzb3VyY2UgImFyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9LY29uZmlnIgorCitzb3VyY2UgImFyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9LY29uZmlnIgogCiBjb25maWcgU0hfUENMS19GUkVRCiAJaW50ICJQZXJpcGhlcmFsIGNsb2NrIGZyZXF1ZW5jeSAoaW4gSHopIgogCWRlZmF1bHQgIjUwMDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDc3NTAgfHwgQ1BVX1NVQlRZUEVfU0g3NzgwCiAJZGVmYXVsdCAiNjAwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzc1MQotCWRlZmF1bHQgIjMzMzMzMzMzIiBpZiBDUFVfU1VCVFlQRV9TSDczMDAgfHwgQ1BVX1NVQlRZUEVfU0g3NzcwIHx8IENQVV9TVUJUWVBFX1NINzc2MAotCWRlZmF1bHQgIjI3MDAwMDAwIiBpZiBDUFVfU1VCVFlQRV9TSDczMTgwCisJZGVmYXVsdCAiMzMzMzMzMzMiIGlmIENQVV9TVUJUWVBFX1NINzMwMCB8fCBDUFVfU1VCVFlQRV9TSDc3NzAgfHwgXAorCQkJICAgICAgQ1BVX1NVQlRZUEVfU0g3NzYwCisJZGVmYXVsdCAiMjcwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINzMxODAgfHwgQ1BVX1NVQlRZUEVfU0g3MzQzCiAJZGVmYXVsdCAiNjYwMDAwMDAiIGlmIENQVV9TVUJUWVBFX1NINF8yMDIKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBpcyB1c2VkIHRvIHNwZWNpZnkgdGhlIHBlcmlwaGVyYWwgY2xvY2sgZnJlcXVlbmN5LgpAQCAtNDQwLDEwICs0MDksOCBAQAogCiBjb25maWcgSEVBUlRCRUFUCiAJYm9vbCAiSGVhcnRiZWF0IExFRCIKLQlkZXBlbmRzIG9uIFNIX01QQzEyMTEgfHwgU0hfU0gwMyB8fCBTSF9DQVQ2ODcwMSB8fCBcCi0JCSAgIFNIX1NUQjFfSEFSUCB8fCBTSF9TVEIxX09WRVJEUklWRSB8fCBTSF9CSUdTVVIgfHwgXAotCQkgICBTSF83NzUxX1NPTFVUSU9OX0VOR0lORSB8fCBTSF83MzAwX1NPTFVUSU9OX0VOR0lORSB8fCBcCi0JCSAgIFNIXzczMTgwX1NPTFVUSU9OX0VOR0lORSB8fCBTSF9TT0xVVElPTl9FTkdJTkUgfHwgXAorCWRlcGVuZHMgb24gU0hfTVBDMTIxMSB8fCBTSF9TSDAzIHx8IFwKKwkJICAgU0hfQklHU1VSIHx8IFNPTFVUSU9OX0VOR0lORSB8fCBcCiAJCSAgIFNIX1JUUzc3NTFSMkQgfHwgU0hfU0g0MjAyX01JQ1JPREVWIHx8IFNIX0xBTkRJU0sKIAloZWxwCiAJICBVc2UgdGhlIHBvd2VyLW9uIExFRCBvbiB5b3VyIG1hY2hpbmUgYXMgYSBsb2FkIG1ldGVyLiAgVGhlIGV4YWN0CkBAIC00NTksNiArNDI2LDggQEAKIAogbWVudSAiS2VybmVsIGZlYXR1cmVzIgogCitzb3VyY2Uga2VybmVsL0tjb25maWcuaHoKKwogY29uZmlnIEtFWEVDCiAJYm9vbCAia2V4ZWMgc3lzdGVtIGNhbGwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKQEAgLTQ3NiwxMCArNDQ1LDYgQEAKIAkgIHN1cHBvcnQuICBBcyBvZiB0aGlzIHdyaXRpbmcgdGhlIGV4YWN0IGhhcmR3YXJlIGludGVyZmFjZSBpcwogCSAgc3Ryb25nbHkgaW4gZmx1eCwgc28gbm8gZ29vZCByZWNvbW1lbmRhdGlvbiBjYW4gYmUgbWFkZS4KIAotY29uZmlnIFBSRUVNUFQKLQlib29sICJQcmVlbXB0aWJsZSBLZXJuZWwgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQogY29uZmlnIFNNUAogCWJvb2wgIlN5bW1ldHJpYyBtdWx0aS1wcm9jZXNzaW5nIHN1cHBvcnQiCiAJLS0taGVscC0tLQpAQCAtNTE1LDYgKzQ4MCw4IEBACiAJICBUaGlzIGlzIHB1cmVseSB0byBzYXZlIG1lbW9yeSAtIGVhY2ggc3VwcG9ydGVkIENQVSBhZGRzCiAJICBhcHByb3hpbWF0ZWx5IGVpZ2h0IGtpbG9ieXRlcyB0byB0aGUga2VybmVsIGltYWdlLgogCitzb3VyY2UgImtlcm5lbC9LY29uZmlnLnByZWVtcHQiCisKIGNvbmZpZyBDUFVfSEFTX1NSX1JCCiAJYm9vbCAiQ1BVIGhhcyBTUi5SQiIKIAlkZXBlbmRzIG9uIENQVV9TSDMgfHwgQ1BVX1NINApAQCAtNjM2LDYgKzYwMywxNiBAQAogCiBlbmRtZW51CiAKK21lbnUgIlBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKSIKK2RlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisKK3NvdXJjZSBrZXJuZWwvcG93ZXIvS2NvbmZpZworCitjb25maWcgQVBNCisJYm9vbCAiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCBFbXVsYXRpb24iCisJZGVwZW5kcyBvbiBQTQorZW5kbWVudQorCiBzb3VyY2UgIm5ldC9LY29uZmlnIgogCiBzb3VyY2UgImRyaXZlcnMvS2NvbmZpZyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvc2gvS2NvbmZpZy5kZWJ1ZwppbmRleCA4ZmIzMWFiLi40ODQ3OWUwIDEwMDY0NAotLS0gYS9hcmNoL3NoL0tjb25maWcuZGVidWcKKysrIGIvYXJjaC9zaC9LY29uZmlnLmRlYnVnCkBAIC0zMCw4ICszMCwzNSBAQAogCSAgd2hlbiB0aGUga2VybmVsIG1heSBjcmFzaCBvciBoYW5nIGJlZm9yZSB0aGUgc2VyaWFsIGNvbnNvbGUgaXMKIAkgIGluaXRpYWxpc2VkLiBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgREVCVUdfU1RBQ0tPVkVSRkxPVworCWJvb2wgIkNoZWNrIGZvciBzdGFjayBvdmVyZmxvd3MiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBUaGlzIG9wdGlvbiB3aWxsIGNhdXNlIG1lc3NhZ2VzIHRvIGJlIHByaW50ZWQgaWYgZnJlZSBzdGFjayBzcGFjZQorCSAgZHJvcHMgYmVsb3cgYSBjZXJ0YWluIGxpbWl0LgorCitjb25maWcgREVCVUdfU1RBQ0tfVVNBR0UKKwlib29sICJTdGFjayB1dGlsaXphdGlvbiBpbnN0cnVtZW50YXRpb24iCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBFbmFibGVzIHRoZSBkaXNwbGF5IG9mIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBmcmVlIHN0YWNrIHdoaWNoIGVhY2gKKwkgIHRhc2sgaGFzIGV2ZXIgaGFkIGF2YWlsYWJsZSBpbiB0aGUgc3lzcnEtVCBhbmQgc3lzcnEtUCBkZWJ1ZyBvdXRwdXQuCisKKwkgIFRoaXMgb3B0aW9uIHdpbGwgc2xvdyBkb3duIHByb2Nlc3MgY3JlYXRpb24gc29tZXdoYXQuCisKK2NvbmZpZyA0S1NUQUNLUworCWJvb2wgIlVzZSA0S2IgZm9yIGtlcm5lbCBzdGFja3MgaW5zdGVhZCBvZiA4S2IiCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUga2VybmVsIHdpbGwgdXNlIGEgNEtiIHN0YWNrc2l6ZSBmb3IgdGhlCisJICBrZXJuZWwgc3RhY2sgYXR0YWNoZWQgdG8gZWFjaCBwcm9jZXNzL3RocmVhZC4gVGhpcyBmYWNpbGl0YXRlcworCSAgcnVubmluZyBtb3JlIHRocmVhZHMgb24gYSBzeXN0ZW0gYW5kIGFsc28gcmVkdWNlcyB0aGUgcHJlc3N1cmUKKwkgIG9uIHRoZSBWTSBzdWJzeXN0ZW0gZm9yIGhpZ2hlciBvcmRlciBhbGxvY2F0aW9ucy4gVGhpcyBvcHRpb24KKwkgIHdpbGwgYWxzbyB1c2UgSVJRIHN0YWNrcyB0byBjb21wZW5zYXRlIGZvciB0aGUgcmVkdWNlZCBzdGFja3NwYWNlLgorCiBjb25maWcgS0dEQgogCWJvb2wgIkluY2x1ZGUgS0dEQiBrZXJuZWwgZGVidWdnZXIiCisJc2VsZWN0IEZSQU1FX1BPSU5URVIKIAloZWxwCiAJICBJbmNsdWRlIGluLWtlcm5lbCBob29rcyBmb3Iga2dkYiwgdGhlIExpbnV4IGtlcm5lbCBzb3VyY2UgbGV2ZWwKIAkgIGRlYnVnZ2VyLiAgU2VlIDxodHRwOi8va2dkYi5zb3VyY2Vmb3JnZS5uZXQvPiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KQEAgLTExMiwxMyArMTM5LDQgQEAKIAogZW5kbWVudQogCi1jb25maWcgRlJBTUVfUE9JTlRFUgotCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIgotCWRlZmF1bHQgeSBpZiBLR0RCCi0JaGVscAotCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2Ugd2lsbCBiZSBzbGlnaHRseSBsYXJnZXIKLQkgIGFuZCBzbG93ZXIsIGJ1dCBpdCB3aWxsIGdpdmUgdmVyeSB1c2VmdWwgZGVidWdnaW5nIGluZm9ybWF0aW9uLgotCSAgSWYgeW91IGRvbid0IGRlYnVnIHRoZSBrZXJuZWwsIHlvdSBjYW4gc2F5IE4sIGJ1dCB3ZSBtYXkgbm90IGJlIGFibGUKLQkgIHRvIHNvbHZlIHByb2JsZW1zIHdpdGhvdXQgZnJhbWUgcG9pbnRlcnMuCi0KIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvTWFrZWZpbGUgYi9hcmNoL3NoL01ha2VmaWxlCmluZGV4IGU0NjdhNDUuLjI2ZDYyZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9NYWtlZmlsZQpAQCAtMTgsMTEgKzE4LDEzIEBACiBjZmxhZ3MtJChDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4pCTo9IC1tbAogCiBpc2EteQkJCQkJOj0gYW55Citpc2EtJChDT05GSUdfU0hfRFNQKQkJCTo9IHNoCiBpc2EtJChDT05GSUdfQ1BVX1NIMikJCQk6PSBzaDIKK2lzYS0kKENPTkZJR19DUFVfU0gyQSkJCQk6PSBzaDJhCiBpc2EtJChDT05GSUdfQ1BVX1NIMykJCQk6PSBzaDMKIGlzYS0kKENPTkZJR19DUFVfU0g0KQkJCTo9IHNoNAogaXNhLSQoQ09ORklHX0NQVV9TSDRBKQkJCTo9IHNoNGEKLWlzYS0kKENPTkZJR19DUFVfU0gyQSkJCQk6PSBzaDJhCitpc2EtJChDT05GSUdfQ1BVX1NINEFMX0RTUCkJCTo9IHNoNGFsCiAKIGlzYS0kKENPTkZJR19TSF9EU1ApCQkJOj0gJChpc2EteSktZHNwCiAKQEAgLTMwLDkgKzMyLDExIEBACiBpc2EteQkJCTo9ICQoaXNhLXkpLW5vbW11CiBlbmRpZgogCitpZm5kZWYgQ09ORklHX1NIX0RTUAogaWZuZGVmIENPTkZJR19TSF9GUFUKIGlzYS15CQkJOj0gJChpc2EteSktbm9mcHUKIGVuZGlmCitlbmRpZgogCiBjZmxhZ3MteQkrPSAkKGNhbGwgYXMtb3B0aW9uLC1XYSQoY29tbWEpLWlzYT0kKGlzYS15KSwpCiAKQEAgLTc5LDI0ICs4MywxOSBAQAogTElCR0NDIDo9ICQoc2hlbGwgJChDQykgJChDRkxBR1MpIC1wcmludC1saWJnY2MtZmlsZS1uYW1lKQogCiBjb3JlLXkJCQkJKz0gYXJjaC9zaC9rZXJuZWwvIGFyY2gvc2gvbW0vCitjb3JlLSQoQ09ORklHX1NIX0ZQVV9FTVUpCSs9IGFyY2gvc2gvbWF0aC1lbXUvCiAKICMgQm9hcmRzCiBtYWNoZGlyLSQoQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSkJCTo9IHNlLzc3MHgKIG1hY2hkaXItJChDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUpCTo9IHNlLzc3NTEKIG1hY2hkaXItJChDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUpCTo9IHNlLzczMDAKK21hY2hkaXItJChDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkUpCTo9IHNlLzczNDMKIG1hY2hkaXItJChDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FKQk6PSBzZS83MzE4MAotbWFjaGRpci0kKENPTkZJR19TSF9TVEIxX0hBUlApCQkJOj0gaGFycAotbWFjaGRpci0kKENPTkZJR19TSF9TVEIxX09WRVJEUklWRSkJCTo9IG92ZXJkcml2ZQogbWFjaGRpci0kKENPTkZJR19TSF9IUDZYWCkJCQk6PSBocDZ4eAotbWFjaGRpci0kKENPTkZJR19TSF9DUVJFRUspCQkJOj0gY3FyZWVrCi1tYWNoZGlyLSQoQ09ORklHX1NIX0RNSURBKQkJCTo9IGRtaWRhCiBtYWNoZGlyLSQoQ09ORklHX1NIX0VDMzEwNCkJCQk6PSBlYzMxMDQKIG1hY2hkaXItJChDT05GSUdfU0hfU0FUVVJOKQkJCTo9IHNhdHVybgogbWFjaGRpci0kKENPTkZJR19TSF9EUkVBTUNBU1QpCQkJOj0gZHJlYW1jYXN0Ci1tYWNoZGlyLSQoQ09ORklHX1NIX0NBVDY4NzAxKQkJCTo9IGNhdDY4NzAxCiBtYWNoZGlyLSQoQ09ORklHX1NIX0JJR1NVUikJCQk6PSBiaWdzdXIKLW1hY2hkaXItJChDT05GSUdfU0hfU0gyMDAwKQkJCTo9IHNoMjAwMAotbWFjaGRpci0kKENPTkZJR19TSF9BRFgpCQkJOj0gYWR4CiBtYWNoZGlyLSQoQ09ORklHX1NIX01QQzEyMTEpCQkJOj0gbXBjMTIxMQogbWFjaGRpci0kKENPTkZJR19TSF9TSDAzKQkJCTo9IHNoMDMKIG1hY2hkaXItJChDT05GSUdfU0hfU0VDVVJFRURHRTU0MTApCQk6PSBzbmFwZ2VhcgpAQCAtMTA0LDE2ICsxMDMsMTYgQEAKIG1hY2hkaXItJChDT05GSUdfU0hfUlRTNzc1MVIyRCkJCQk6PSByZW5lc2FzL3J0czc3NTFyMmQKIG1hY2hkaXItJChDT05GSUdfU0hfNzc1MV9TWVNURU1IKQkJOj0gcmVuZXNhcy9zeXN0ZW1oCiBtYWNoZGlyLSQoQ09ORklHX1NIX0VET1NLNzcwNSkJCQk6PSByZW5lc2FzL2Vkb3NrNzcwNQorbWFjaGRpci0kKENPTkZJR19TSF9SNzc4MFJQKQkJCTo9IHJlbmVzYXMvcjc3ODBycAorbWFjaGRpci0kKENPTkZJR19TSF83NzEwVk9JUEdXKQkJCTo9IHJlbmVzYXMvc2g3NzEwdm9pcGd3CiBtYWNoZGlyLSQoQ09ORklHX1NIX1NINDIwMl9NSUNST0RFVikJCTo9IHN1cGVyaC9taWNyb2RldgorbWFjaGRpci0kKENPTkZJR19TSF9MQU5ESVNLKQkJCTo9IGxhbmRpc2sKK21hY2hkaXItJChDT05GSUdfU0hfVElUQU4pCQkJOj0gdGl0YW4KK21hY2hkaXItJChDT05GSUdfU0hfU0hNSU4pCQkJOj0gc2htaW4KIG1hY2hkaXItJChDT05GSUdfU0hfVU5LTk9XTikJCQk6PSB1bmtub3duCiAKIGluY2Rpci15CQkJOj0gJChub3RkaXIgJChtYWNoZGlyLXkpKQotCi1pbmNkaXItJChDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FKQkJOj0gc2UKLWluY2Rpci0kKENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSkJOj0gc2U3NzUxCi1pbmNkaXItJChDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUpICAgICAgICA6PSBzZTczMDAKLWluY2Rpci0kKENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUpCTo9IHNlNzMxODAKLWluY2Rpci0kKENPTkZJR19TSF9IUDYwMCkJCQk6PSBocDZ4eAoraW5jZGlyLSQoQ09ORklHX1NIX0hQNlhYKQkJCTo9IGhwNnh4CiAKIGlmbmVxICgkKG1hY2hkaXIteSksKQogY29yZS15CQkJCSs9IGFyY2gvc2gvYm9hcmRzLyQobWFjaGRpci15KS8KQEAgLTEzNywxNyArMTM2LDE0IEBACiAKIENQUEZMQUdTX3ZtbGludXgubGRzIDo9IC10cmFkaXRpb25hbAogCi1pZm5lcSAoJChLQlVJTERfU1JDKSwpCiBpbmNkaXItcHJlZml4CTo9ICQoc3JjdHJlZSkvaW5jbHVkZS9hc20tc2gvCi1lbHNlCi1pbmNkaXItcHJlZml4CTo9Ci1lbmRpZgogCiAjCVVwZGF0ZSBtYWNoaW5lIGFyY2ggYW5kIHByb2Mgc3ltbGlua3MgaWYgc29tZXRoaW5nIHdoaWNoIGFmZmVjdHMKICMJdGhlbSBjaGFuZ2VkLiAgV2UgdXNlIC5hcmNoIGFuZCAubWFjaCB0byBpbmRpY2F0ZSB3aGVuIHRoZXkgd2VyZQogIwl1cGRhdGVkIGxhc3QsIG90aGVyd2lzZSBtYWtlIHVzZXMgdGhlIHRhcmdldCBkaXJlY3RvcnkgbXRpbWUuCiAKLWluY2x1ZGUvYXNtLXNoLy5jcHU6ICQod2lsZGNhcmQgaW5jbHVkZS9jb25maWcvY3B1LyouaCkgaW5jbHVkZS9jb25maWcvYXV0by5jb25mCitpbmNsdWRlL2FzbS1zaC8uY3B1OiAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL2NwdS8qLmgpIFwKKwkJICAgICBpbmNsdWRlL2NvbmZpZy9hdXRvLmNvbmYgRk9SQ0UKIAlAZWNobyAnICBTWU1MSU5LIGluY2x1ZGUvYXNtLXNoL2NwdSAtPiBpbmNsdWRlL2FzbS1zaC8kKGNwdWluY2Rpci15KScKIAkkKFEpaWYgWyAhIC1kIGluY2x1ZGUvYXNtLXNoIF07IHRoZW4gbWtkaXIgLXAgaW5jbHVkZS9hc20tc2g7IGZpCiAJJChRKWxuIC1mc24gJChpbmNkaXItcHJlZml4KSQoY3B1aW5jZGlyLXkpIGluY2x1ZGUvYXNtLXNoL2NwdQpAQCAtMTU3LDcgKzE1Myw4IEBACiAjCWRvbid0LCBqdXN0IHJlZmVyZW5jZSB0aGUgcGFyZW50IGRpcmVjdG9yeSBzbyB0aGUgc2VtYW50aWNzIGFyZQogIwlrZXB0IHJvdWdobHkgdGhlIHNhbWUuCiAKLWluY2x1ZGUvYXNtLXNoLy5tYWNoOiAkKHdpbGRjYXJkIGluY2x1ZGUvY29uZmlnL3NoLyouaCkgaW5jbHVkZS9jb25maWcvYXV0by5jb25mCitpbmNsdWRlL2FzbS1zaC8ubWFjaDogJCh3aWxkY2FyZCBpbmNsdWRlL2NvbmZpZy9zaC8qLmgpIFwKKwkJICAgICAgaW5jbHVkZS9jb25maWcvYXV0by5jb25mIEZPUkNFCiAJQGVjaG8gLW4gJyAgU1lNTElOSyBpbmNsdWRlL2FzbS1zaC9tYWNoIC0+ICcKIAkkKFEpaWYgWyAhIC1kIGluY2x1ZGUvYXNtLXNoIF07IHRoZW4gbWtkaXIgLXAgaW5jbHVkZS9hc20tc2g7IGZpCiAJJChRKWlmIFsgLWQgJChpbmNkaXItcHJlZml4KSQoaW5jZGlyLXkpIF07IHRoZW4gXApAQCAtMTcwLDcgKzE2Nyw3IEBACiAJZmkKIAlAdG91Y2ggJEAKIAotYXJjaHByZXBhcmU6IG1ha2V0b29scyBpbmNsdWRlL2FzbS1zaC8uY3B1IGluY2x1ZGUvYXNtLXNoLy5tYWNoCithcmNocHJlcGFyZTogaW5jbHVkZS9hc20tc2gvLmNwdSBpbmNsdWRlL2FzbS1zaC8ubWFjaCBtYWtldG9vbHMKIAogUEhPTlkgKz0gbWFrZXRvb2xzIEZPUkNFCiBtYWtldG9vbHM6ICBpbmNsdWRlL2xpbnV4L3ZlcnNpb24uaCBGT1JDRQpAQCAtMTkxLDQgKzE4OCwzIEBACiBkZWZpbmUgYXJjaGhlbHAKIAlAZWNobyAnICB6SW1hZ2UgCSAgICAgICAgICAgLSBDb21wcmVzc2VkIGtlcm5lbCBpbWFnZSAoYXJjaC9zaC9ib290L3pJbWFnZSknCiBlbmRlZgotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9hZHgvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9hZHgvTWFrZWZpbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViMWM1MzEuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvYWR4L01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciBBRFggYm9hcmRzCi0jCi0KLW9iai15CSA6PSBzZXR1cC5vIGlycS5vIGlycV9tYXNrcmVxLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYWR4L2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvYWR4L2lycS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmNhNDA5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2FkeC9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9hZHgvaXJxLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgQSZEIENvLiwgTHRkLgotICoKLSAqIEkvTyByb3V0aW5lIGFuZCBzZXR1cCByb3V0aW5lcyBmb3IgQSZEIEFEWCBCb2FyZAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi12b2lkIGluaXRfYWR4X0lSUSh2b2lkKQotewotICAgICAgICBpbnQgaTsKLQotLyogICAgICBwcmludGsoImluaXRfYWR4X0lSUSgpXG4iKTsqLwotICAgICAgICAvKiBzZXR1cCBpcnFfbWFza19yZWdpc3RlciAqLwotICAgICAgICBpcnFfbWFza19yZWdpc3RlciA9ICh1bnNpZ25lZCBzaG9ydCAqKTB4YTYwMDAwMDg7Ci0KLSAgICAgICAgLyogY292ZXIgYWxsIGV4dGVybmFsIGludGVycnVwdCBhcmVhIGJ5IG1hc2tyZWdfaXJxX3R5cGUKLSAgICAgICAgICogKEFjdHVhbGx5LCBpcnExNSBkb2Vzbid0IGV4aXN0KQotICAgICAgICAgKi8KLSAgICAgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKLSAgICAgICAgICAgICAgICBtYWtlX21hc2tyZWdfaXJxKGkpOwotICAgICAgICAgICAgICAgIGRpc2FibGVfaXJxKGkpOwotICAgICAgICB9Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9hZHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2FkeC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTM4ZDk1Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2FkeC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNTYgKzAsMCBAQAotLyogCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkL2FkeC9zZXR1cC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxIEEmRCBDby4sIEx0ZC4KLSAqCi0gKiBJL08gcm91dGluZSBhbmQgc2V0dXAgcm91dGluZXMgZm9yIEEmRCBBRFggQm9hcmQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0KLWV4dGVybiB2b2lkIGluaXRfYWR4X0lSUSh2b2lkKTsKLWV4dGVybiB2b2lkICpjZl9pb19iYXNlOwotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIkEmRCBBRFgiOwotfQotCi11bnNpZ25lZCBsb25nIGFkeF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCS8qIENvbXBhY3RGbGFzaCAoSURFKSAqLwotCWlmICgoKG9mZnNldCA+PSAweDFmMCkgJiYgKG9mZnNldCA8PSAweDFmNykpIHx8IChvZmZzZXQgPT0gMHgzZjYpKSB7Ci0JCXJldHVybiAodW5zaWduZWQgbG9uZyljZl9pb19iYXNlICsgb2Zmc2V0OwotCX0KLQotCS8qIGV0aDAgKi8KLQlpZiAoKG9mZnNldCA+PSAweDMwMCkgJiYgKG9mZnNldCA8PSAweDMwZikpIHsKLQkJcmV0dXJuIDB4YTUwMDAwMDAgKyBvZmZzZXQ7CS8qIENPTU0gQk9BUkQgKEFSRUExKSAqLwotCX0KLQotCXJldHVybiBvZmZzZXQgKyAweGIwMDAwMDAwOyAvKiBJT0JVUyAoQVJFQSA0KSovCi19Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfYWR4IF9faW5pdG12ID0gewotCS5tdl9ucl9pcnFzCQk9IDQ4LAotCS5tdl9pc2FfcG9ydDJhZGRyCT0gYWR4X2lzYV9wb3J0MmFkZHIsCi0JLm12X2luaXRfaXJxCQk9IGluaXRfYWR4X0lSUSwKLX07Ci1BTElBU19NVihhZHgpCi0KLWludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQkvKiBOb3RoaW5nIHRvIHNlZSBoZXJlIC4uICovCi0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL2JpZ3N1ci9pcnEuYwppbmRleCBhYzk0NmEyLi4xYWIwNGRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL2lycS5jCkBAIC0xOSw2ICsxOSw3IEBACiAgKiBJUlEgZnVuY3Rpb25zIGZvciBhIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkLgogICoKICAqLworI3VuZGVmIERFQlVHCiAKICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDEsMTAgKzQyLDggQEAKICN1bmRlZiBCSUdTVVJfREVCVUcKIAogI2lmZGVmIEJJR1NVUl9ERUJVRwotI2RlZmluZSBEUFJJTlRLKGFyZ3MuLi4pICAgICAgICBwcmludGsoYXJncykKICNkZWZpbmUgRElQUklOVEsobiwgYXJncy4uLikgICAgaWYgKEJJR1NVUl9ERUJVRz4obikpIHByaW50ayhhcmdzKQogI2Vsc2UKLSNkZWZpbmUgRFBSSU5USyhhcmdzLi4uKQogI2RlZmluZSBESVBSSU5USyhuLCBhcmdzLi4uKQogI2VuZGlmIC8qIEJJR1NVUl9ERUJVRyAqLwogCkBAIC02MCw0NSArNTksMzkgQEAKIC8qIExldmVsIDEgSVJRIHJvdXRpbmVzICovCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2JpZ3N1cl9sMWlycSh1bnNpZ25lZCBpbnQgaXJxKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2s7CiAgICAgICAgIHVuc2lnbmVkIGludCBtYXNrX3BvcnQgPSAoKGlycSAtIEJJR1NVUl9JUlFfTE9XKS84KSA/IEJJR1NVUl9JUkxNUjEgOiBCSUdTVVJfSVJMTVIwOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGJpdCA9ICAoMSA8PCAoKGlycSAtIE1HQVRFX0lSUV9MT1cpJTgpICk7CiAKICAgICAgICAgaWYoaXJxID49IEJJR1NVUl9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl9JUlFfSElHSCkgewotICAgICAgICAgICAgICAgIERQUklOVEsoIkRpc2FibGUgTDEgSVJRICVkXG4iLCBpcnEpOworICAgICAgICAgICAgICAgIHByX2RlYnVnKCJEaXNhYmxlIEwxIElSUSAlZFxuIiwgaXJxKTsKICAgICAgICAgICAgICAgICBESVBSSU5USygyLCJkaXNhYmxlX2JpZ3N1cl9sMWlycTogSU1SPTB4JTA4eCBtYXNrPTB4JXhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3BvcnQsIGJpdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBJUlEgLSBzZXQgbWFzayBiaXQgKi8KICAgICAgICAgICAgICAgICBtYXNrID0gaW5iKG1hc2tfcG9ydCkgfCBiaXQ7CiAgICAgICAgICAgICAgICAgb3V0YihtYXNrLCBtYXNrX3BvcnQpOwotICAgICAgICAgICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgRFBSSU5USygiZGlzYWJsZV9iaWdzdXJfbDFpcnE6IEludmFsaWQgSVJRICVkXG4iLCBpcnEpOworICAgICAgICBwcl9kZWJ1ZygiZGlzYWJsZV9iaWdzdXJfbDFpcnE6IEludmFsaWQgSVJRICVkXG4iLCBpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfYmlnc3VyX2wxaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgbWFzazsKICAgICAgICAgdW5zaWduZWQgaW50IG1hc2tfcG9ydCA9ICgoaXJxIC0gQklHU1VSX0lSUV9MT1cpLzgpID8gQklHU1VSX0lSTE1SMSA6IEJJR1NVUl9JUkxNUjA7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYml0ID0gICgxIDw8ICgoaXJxIC0gTUdBVEVfSVJRX0xPVyklOCkgKTsKIAogICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKSB7Ci0gICAgICAgICAgICAgICAgRFBSSU5USygiRW5hYmxlIEwxIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgICAgICAgICBwcl9kZWJ1ZygiRW5hYmxlIEwxIElSUSAlZFxuIiwgaXJxKTsKICAgICAgICAgICAgICAgICBESVBSSU5USygyLCJlbmFibGVfYmlnc3VyX2wxaXJxOiBJTVI9MHglMDh4IG1hc2s9MHgleFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tfcG9ydCwgYml0KTsKLSAgICAgICAgICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAgICAgICAgICAgICAgICAgLyogRW5hYmxlIEwxIElSUSAtIGNsZWFyIG1hc2sgYml0ICovCiAgICAgICAgICAgICAgICAgbWFzayA9IGluYihtYXNrX3BvcnQpICYgfmJpdDsKICAgICAgICAgICAgICAgICBvdXRiKG1hc2ssIG1hc2tfcG9ydCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBEUFJJTlRLKCJlbmFibGVfYmlnc3VyX2wxaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoImVuYWJsZV9iaWdzdXJfbDFpcnE6IEludmFsaWQgSVJRICVkXG4iLCBpcnEpOwogfQogCiAKQEAgLTEyNiw1MSArMTE5LDQ1IEBACiAvKiBMZXZlbCAyIElSUSByb3V0aW5lcyAqLwogc3RhdGljIHZvaWQgZGlzYWJsZV9iaWdzdXJfbDJpcnEodW5zaWduZWQgaW50IGlycSkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICAgdW5zaWduZWQgY2hhciBtYXNrOwogICAgICAgICB1bnNpZ25lZCBjaGFyIGJpdCA9IDEgPDwgKChpcnEtQklHU1VSXzJORExWTF9JUlFfTE9XKSU4KTsKICAgICAgICAgdW5zaWduZWQgaW50IG1hc2tfcG9ydCA9IGltcl9iYXNlIC0gUkVHX05VTShpcnEpKmltcl9vZmZzZXQ7CiAKLSAgICBpZihpcnEgPj0gQklHU1VSXzJORExWTF9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl8yTkRMVkxfSVJRX0hJR0gpIHsKLSAgICAgICAgICAgICAgICBEUFJJTlRLKCJEaXNhYmxlIEwyIElSUSAlZFxuIiwgaXJxKTsKKwlpZihpcnEgPj0gQklHU1VSXzJORExWTF9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl8yTkRMVkxfSVJRX0hJR0gpIHsKKyAgICAgICAgICAgICAgICBwcl9kZWJ1ZygiRGlzYWJsZSBMMiBJUlEgJWRcbiIsIGlycSk7CiAgICAgICAgICAgICAgICAgRElQUklOVEsoMiwiZGlzYWJsZV9iaWdzdXJfbDJpcnE6IElNUj0weCUwOHggbWFzaz0weCV4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbWFza19wb3J0LCBiaXQpOwotICAgICAgICAgICAgICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAogICAgICAgICAgICAgICAgIC8qIERpc2FibGUgTDIgSVJRIC0gc2V0IG1hc2sgYml0ICovCiAgICAgICAgICAgICAgICAgbWFzayA9IGluYihtYXNrX3BvcnQpIHwgYml0OwogICAgICAgICAgICAgICAgIG91dGIobWFzaywgbWFza19wb3J0KTsKLSAgICAgICAgICAgICAgICBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIERQUklOVEsoImRpc2FibGVfYmlnc3VyX2wyaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoImRpc2FibGVfYmlnc3VyX2wyaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2JpZ3N1cl9sMmlycSh1bnNpZ25lZCBpbnQgaXJxKQogewotICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICB1bnNpZ25lZCBjaGFyIG1hc2s7CiAgICAgICAgIHVuc2lnbmVkIGNoYXIgYml0ID0gMSA8PCAoKGlycS1CSUdTVVJfMk5ETFZMX0lSUV9MT1cpJTgpOwogICAgICAgICB1bnNpZ25lZCBpbnQgbWFza19wb3J0ID0gaW1yX2Jhc2UgLSBSRUdfTlVNKGlycSkqaW1yX29mZnNldDsKIAotICAgIGlmKGlycSA+PSBCSUdTVVJfMk5ETFZMX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSXzJORExWTF9JUlFfSElHSCkgewotICAgICAgICAgICAgICAgIERQUklOVEsoIkVuYWJsZSBMMiBJUlEgJWRcbiIsIGlycSk7CisJaWYoaXJxID49IEJJR1NVUl8yTkRMVkxfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfMk5ETFZMX0lSUV9ISUdIKSB7CisgICAgICAgICAgICAgICAgcHJfZGVidWcoIkVuYWJsZSBMMiBJUlEgJWRcbiIsIGlycSk7CiAgICAgICAgICAgICAgICAgRElQUklOVEsoMiwiZW5hYmxlX2JpZ3N1cl9sMmlycTogSU1SPTB4JTA4eCBtYXNrPTB4JXhcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrX3BvcnQsIGJpdCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAgICAgICAgICAgICAgICAgLyogRW5hYmxlIEwyIElSUSAtIGNsZWFyIG1hc2sgYml0ICovCiAgICAgICAgICAgICAgICAgbWFzayA9IGluYihtYXNrX3BvcnQpICYgfmJpdDsKICAgICAgICAgICAgICAgICBvdXRiKG1hc2ssIG1hc2tfcG9ydCk7Ci0gICAgICAgICAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBEUFJJTlRLKCJlbmFibGVfYmlnc3VyX2wyaXJxOiBJbnZhbGlkIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoImVuYWJsZV9iaWdzdXJfbDJpcnE6IEludmFsaWQgSVJRICVkXG4iLCBpcnEpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfYmlnc3VyKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0gICAgICAgIERQUklOVEsoIm1hc2tfYW5kX2Fja19iaWdzdXIgSVJRICVkXG4iLCBpcnEpOworICAgICAgICBwcl9kZWJ1ZygibWFza19hbmRfYWNrX2JpZ3N1ciBJUlEgJWRcbiIsIGlycSk7CiAgICAgICAgIGlmKGlycSA+PSBCSUdTVVJfSVJRX0xPVyAmJiBpcnEgPCBCSUdTVVJfSVJRX0hJR0gpCiAgICAgICAgICAgICAgICAgZGlzYWJsZV9iaWdzdXJfbDFpcnEoaXJxKTsKICAgICAgICAgZWxzZQpAQCAtMTc5LDcgKzE2Niw3IEBACiAKIHN0YXRpYyB2b2lkIGVuZF9iaWdzdXJfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0gICAgICAgIERQUklOVEsoImVuZF9iaWdzdXJfaXJxIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoImVuZF9iaWdzdXJfaXJxIElSUSAlZFxuIiwgaXJxKTsKICAgICAgICAgaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpIHsKICAgICAgICAgICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKQogICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlX2JpZ3N1cl9sMWlycShpcnEpOwpAQCAtMTkzLDcgKzE4MCw3IEBACiAgICAgICAgIHU4IG1hc2s7CiAgICAgICAgIHUzMiByZWc7CiAKLSAgICAgICAgRFBSSU5USygic3RhcnR1cF9iaWdzdXJfaXJxIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoInN0YXJ0dXBfYmlnc3VyX2lycSBJUlEgJWRcbiIsIGlycSk7CiAKICAgICAgICAgaWYoaXJxID49IEJJR1NVUl9JUlFfTE9XICYmIGlycSA8IEJJR1NVUl9JUlFfSElHSCkgewogICAgICAgICAgICAgICAgIC8qIEVuYWJsZSB0aGUgTDEgSVJRICovCkBAIC0yMTgsNyArMjA1LDcgQEAKIAogc3RhdGljIHZvaWQgc2h1dGRvd25fYmlnc3VyX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotICAgICAgICBEUFJJTlRLKCJzaHV0ZG93bl9iaWdzdXJfaXJxIElSUSAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoInNodXRkb3duX2JpZ3N1cl9pcnEgSVJRICVkXG4iLCBpcnEpOwogICAgICAgICBpZihpcnEgPj0gQklHU1VSX0lSUV9MT1cgJiYgaXJxIDwgQklHU1VSX0lSUV9ISUdIKQogICAgICAgICAgICAgICAgIGRpc2FibGVfYmlnc3VyX2wxaXJxKGlycSk7CiAgICAgICAgIGVsc2UKQEAgLTI2MCw3ICsyNDcsNyBAQAogICAgICAgICAgICAgICAgIGRpc2FibGVfYmlnc3VyX2wxaXJxKGlycSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIERQUklOVEsoIm1ha2VfYmlnc3VyX2wxaXNyOiBiYWQgaXJxLCAlZFxuIiwgaXJxKTsKKyAgICAgICAgcHJfZGVidWcoIm1ha2VfYmlnc3VyX2wxaXNyOiBiYWQgaXJxLCAlZFxuIiwgaXJxKTsKICAgICAgICAgcmV0dXJuOwogfQogCkBAIC0yNzcsNyArMjY0LDcgQEAKICAgICAgICAgICAgICAgICBkaXNhYmxlX2JpZ3N1cl9sMmlycShpcnEpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBEUFJJTlRLKCJtYWtlX2JpZ3N1cl9sMmlzcjogYmFkIGlycSwgJWRcbiIsIGlycSk7CisgICAgICAgIHByX2RlYnVnKCJtYWtlX2JpZ3N1cl9sMmlzcjogYmFkIGlycSwgJWRcbiIsIGlycSk7CiAgICAgICAgIHJldHVybjsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvYmlnc3VyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYwppbmRleCBkZmVlZGU5Li45NzExYzIwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9iaWdzdXIvc2V0dXAuYwpAQCAtNDEsMzEgKzQxLDcgQEAKIC8vCQlCaWcgU3VyIEluaXQgUm91dGluZXMJCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJCaWcgU3VyIjsKLX0KLQotLyoKLSAqIFRoZSBNYWNoaW5lIFZlY3RvcgotICovCi1leHRlcm4gdm9pZCBoZWFydGJlYXRfYmlnc3VyKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9iaWdzdXJfSVJRKHZvaWQpOwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfYmlnc3VyIF9faW5pdG12ID0gewotCS5tdl9ucl9pcnFzCQk9IE5SX0lSUVMsICAgICAvLyBEZWZpbmVkIGluIDxhc20vaXJxLmg+Ci0KLQkubXZfaXNhX3BvcnQyYWRkcgk9IGJpZ3N1cl9pc2FfcG9ydDJhZGRyLAotCS5tdl9pcnFfZGVtdXggICAgICAgCT0gYmlnc3VyX2lycV9kZW11eCwKLQotCS5tdl9pbml0X2lycQkJPSBpbml0X2JpZ3N1cl9JUlEsCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0X2JpZ3N1ciwKLSNlbmRpZgotfTsKLUFMSUFTX01WKGJpZ3N1cikKLQotaW50IF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGJpZ3N1cl9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCS8qIE1hc2sgYWxsIDJuZCBsZXZlbCBJUlEncyAqLwogCW91dGIoLTEsQklHU1VSX0lNUjApOwpAQCAtODksNyArNjUsMjQgQEAKIAlvdXR3KDEsIEJJR1NVUl9FVEhSKzB4ZSk7CiAJLyogc2V0IHRoZSBJTyBwb3J0IHRvIEJJR1NVUl9FVEhFUl9JT1BPUlQgKi8KIAlvdXR3KEJJR1NVUl9FVEhFUl9JT1BPUlQ8PDMsIEJJR1NVUl9FVEhSKzB4Mik7Ci0KLQlyZXR1cm4gMDsKIH0KIAorLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitleHRlcm4gdm9pZCBoZWFydGJlYXRfYmlnc3VyKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9iaWdzdXJfSVJRKHZvaWQpOworCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfYmlnc3VyIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJCaWcgU3VyIiwKKwkubXZfc2V0dXAJCT0gYmlnc3VyX3NldHVwLAorCisJLm12X2lzYV9wb3J0MmFkZHIJPSBiaWdzdXJfaXNhX3BvcnQyYWRkciwKKwkubXZfaXJxX2RlbXV4ICAgICAgIAk9IGJpZ3N1cl9pcnFfZGVtdXgsCisKKwkubXZfaW5pdF9pcnEJCT0gaW5pdF9iaWdzdXJfSVJRLAorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9iaWdzdXIsCisjZW5kaWYKK307CitBTElBU19NVihiaWdzdXIpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2NhdDY4NzAxL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1MmMxZGUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2NhdDY4NzAxL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsNiArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciB0aGUgQ0FULTY4NzAxIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IHNldHVwLm8gaXJxLm8KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvY2F0Njg3MDEvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjlhNmQxOC4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9pcnEuYworKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9pcnEuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgTmlpYmUgWXV0YWthCi0gKiAgICAgICAgICAgICAgIDIwMDEgIFl1dGFybyBFYmloYXJhCi0gKgotICogU2V0dXAgcm91dGluZXMgZm9yIEEtT05FIENvcnAgQ0FULTY4NzAxIFNINzcwOCBCb2FyZAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lycS5oPgotCi1pbnQgY2F0Njg3MDFfaXJxX2RlbXV4KGludCBpcnEpCi17Ci0gICAgICAgIGlmKGlycT09MTMpIHJldHVybiAxNDsKLSAgICAgICAgaWYoaXJxPT03KSAgcmV0dXJuIDEwOwotICAgICAgICByZXR1cm4gaXJxOwotfQotCi12b2lkIGluaXRfY2F0Njg3MDFfSVJRKCkKLXsKLSAgICAgICAgbWFrZV9pbWFza19pcnEoMTApOwotICAgICAgICBtYWtlX2ltYXNrX2lycSgxNCk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvY2F0Njg3MDEvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTBlNTE3NS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLyogCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9jYXQ2ODcwMS9zZXR1cC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBOaWliZSBZdXRha2EKLSAqICAgICAgICAgICAgICAgMjAwMSAgWXV0YXJvIEViaWhhcmEKLSAqCi0gKiBTZXR1cCByb3V0aW5lcyBmb3IgQS1PTkUgQ29ycCBDQVQtNjg3MDEgU0g3NzA4IEJvYXJkCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lvLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiQ0FULTY4NzAxIjsKLX0KLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLXZvaWQgaGVhcnRiZWF0X2NhdDY4NzAxKCkKLXsKLSAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwICwgYml0ID0gMDsKLSAgICAgICAgY250ICs9IDE7Ci0gICAgICAgIGlmIChjbnQgPCBwZXJpb2QpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY250ID0gMDsKLQotICAgICAgICAvKiBHbyB0aHJvdWdoIHRoZSBwb2ludHMgKHJvdWdobHkhKToKLSAgICAgICAgICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAotICAgICAgICAgKi8KLSAgICAgICAgcGVyaW9kID0gMTEwIC0gKCAoMzAwPDxGU0hJRlQpLwotICAgICAgICAgICAgICAgICAgICAgICAgICgoYXZlbnJ1blswXS81KSArICgzPDxGU0hJRlQpKSApOwotCi0JaWYoYml0KXsgYml0PTA7IH1lbHNleyBiaXQ9MTsgfQotCW91dHcoYml0PDwxNSwweDNmZSk7Ci19Ci0jZW5kaWYgLyogQ09ORklHX0hFQVJUQkVBVCAqLwotCi11bnNpZ25lZCBsb25nIGNhdDY4NzAxX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JLyogQ29tcGFjdEZsYXNoIChJREUpICovCi0JaWYgKCgob2Zmc2V0ID49IDB4MWYwKSAmJiAob2Zmc2V0IDw9IDB4MWY3KSkgfHwgKG9mZnNldD09MHgzZjYpKQotCQlyZXR1cm4gMHhiYTAwMDAwMCArIG9mZnNldDsKLQotCS8qIElOUFVUIFBPUlQgKi8KLQlpZiAoKG9mZnNldCA+PSAweDNmYykgJiYgKG9mZnNldCA8PSAweDNmZCkpCi0JCXJldHVybiAweGI0MDA3MDAwICsgb2Zmc2V0OwotCi0JLyogT1VUUFVUIFBPUlQgKi8KLQlpZiAoKG9mZnNldCA+PSAweDNmZSkgJiYgKG9mZnNldCA8PSAweDNmZikpCi0JCXJldHVybiAweGI0MDA3NDAwICsgb2Zmc2V0OwotCi0JcmV0dXJuIG9mZnNldCArIDB4YjQwMDAwMDA7IC8qIG90aGVyIEkvTyAoRVJFQSA1KSovCi19Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfY2F0Njg3MDEgX19pbml0bXYgPSB7Ci0JLm12X25yX2lycXMJCT0gMzIsCi0JLm12X2lzYV9wb3J0MmFkZHIJPSBjYXQ2ODcwMV9pc2FfcG9ydDJhZGRyLAotCS5tdl9pcnFfZGVtdXgJCT0gY2F0Njg3MDFfaXJxX2RlbXV4LAotCi0JLm12X2luaXRfaXJxCQk9IGluaXRfY2F0Njg3MDFfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9jYXQ2ODcwMSwKLSNlbmRpZgotfTsKLUFMSUFTX01WKGNhdDY4NzAxKQotCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0JLyogZHVtbXkgcmVhZCBlcmVhNSAoQ1M4OTAwQSkgKi8KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvY3FyZWVrL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvY3FyZWVrL01ha2VmaWxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTc4OGE4Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDYgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIENxUkVFSyBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCi0jCi0KLW9iai15CSA6PSBzZXR1cC5vIGlycS5vCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL2NxcmVlay9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjk1NWFkYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMjggKzAsMCBAQAotLyogJElkOiBpcnEuYyx2IDEuMS4yLjQgMjAwMi8xMS8wNCAyMDozMzo1NiBsZXRoYWwgRXhwICQKLSAqCi0gKiBhcmNoL3NoL2JvYXJkcy9jcXJlZWsvaXJxLmMKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgIE5paWJlIFl1dGFrYQotICoKLSAqIENxUkVFSyBJREUvSVNBIEJyaWRnZSBTdXBwb3J0LgotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2NxcmVlay9jcXJlZWsuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0KLXN0cnVjdCBjcXJlZWtfaXJxX2RhdGEgewotCXVuc2lnbmVkIHNob3J0IG1hc2tfcG9ydDsJLyogUG9ydCBvZiBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwotCXVuc2lnbmVkIHNob3J0IHN0YXRfcG9ydDsJLyogUG9ydCBvZiBJbnRlcnJ1cHQgU3RhdHVzIFJlZ2lzdGVyICovCi0JdW5zaWduZWQgc2hvcnQgYml0OwkJLyogVmFsdWUgb2YgdGhlIGJpdCAqLwotfTsKLXN0YXRpYyBzdHJ1Y3QgY3FyZWVrX2lycV9kYXRhIGNxcmVla19pcnFfZGF0YVtOUl9JUlFTXTsKLQotc3RhdGljIHZvaWQgZGlzYWJsZV9jcXJlZWtfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBzaG9ydCBtYXNrOwotCXVuc2lnbmVkIHNob3J0IG1hc2tfcG9ydCA9IGNxcmVla19pcnFfZGF0YVtpcnFdLm1hc2tfcG9ydDsKLQl1bnNpZ25lZCBzaG9ydCBiaXQgPSBjcXJlZWtfaXJxX2RhdGFbaXJxXS5iaXQ7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JLyogRGlzYWJsZSBJUlEgKi8KLQltYXNrID0gaW53KG1hc2tfcG9ydCkgJiB+Yml0OwotCW91dHdfcChtYXNrLCBtYXNrX3BvcnQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgZW5hYmxlX2NxcmVla19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXVuc2lnbmVkIHNob3J0IG1hc2s7Ci0JdW5zaWduZWQgc2hvcnQgbWFza19wb3J0ID0gY3FyZWVrX2lycV9kYXRhW2lycV0ubWFza19wb3J0OwotCXVuc2lnbmVkIHNob3J0IGJpdCA9IGNxcmVla19pcnFfZGF0YVtpcnFdLmJpdDsKLQotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkvKiBFbmFibGUgSVJRICovCi0JbWFzayA9IGludyhtYXNrX3BvcnQpIHwgYml0OwotCW91dHdfcChtYXNrLCBtYXNrX3BvcnQpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2NxcmVlayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIHNob3J0IHN0YXRfcG9ydCA9IGNxcmVla19pcnFfZGF0YVtpcnFdLnN0YXRfcG9ydDsKLQl1bnNpZ25lZCBzaG9ydCBiaXQgPSBjcXJlZWtfaXJxX2RhdGFbaXJxXS5iaXQ7Ci0KLQlkaXNhYmxlX2NxcmVla19pcnEoaXJxKTsKLQkvKiBDbGVhciBJUlEgKGl0IG1pZ2h0IGJlIGVkZ2UgSVJRKSAqLwotCWludyhzdGF0X3BvcnQpOwotCW91dHdfcChiaXQsIHN0YXRfcG9ydCk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9jcXJlZWtfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEfElSUV9JTlBST0dSRVNTKSkpCi0JCWVuYWJsZV9jcXJlZWtfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9jcXJlZWtfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17IAotCWVuYWJsZV9jcXJlZWtfaXJxKGlycSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIHNodXRkb3duX2NxcmVla19pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQlkaXNhYmxlX2NxcmVla19pcnEoaXJxKTsKLX0KLQotc3RhdGljIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBjcXJlZWtfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIkNxUkVFSy1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9jcXJlZWtfaXJxLAotCS5zaHV0ZG93biA9IHNodXRkb3duX2NxcmVla19pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9jcXJlZWtfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9jcXJlZWtfaXJxLAotCS5hY2sgPSBtYXNrX2FuZF9hY2tfY3FyZWVrLAotCS5lbmQgPSBlbmRfY3FyZWVrX2lycQotfTsKLQotaW50IGNxcmVla19oYXNfaWRlLCBjcXJlZWtfaGFzX2lzYTsKLQotLyogWFhYOiBUaGlzIGlzIGp1c3QgZm9yIHRlc3QgZm9yIG15IE5FMjAwMCBJU0EgYm9hcmQKLSAgIFdoYXQgd2UgcmVhbGx5IG5lZWQgaXMgdmlydHVhbGl6ZWQgSVJRIGFuZCBkZW11bHRpcGxleGVyIGxpa2UgSFA2MDAgcG9ydCAqLwotdm9pZCBfX2luaXQgaW5pdF9jcXJlZWtfSVJRKHZvaWQpCi17Ci0JaWYgKGNxcmVla19oYXNfaWRlKSB7Ci0JCWNxcmVla19pcnFfZGF0YVsxNF0ubWFza19wb3J0ID0gQlJJREdFX0lERV9JTlRSX01BU0s7Ci0JCWNxcmVla19pcnFfZGF0YVsxNF0uc3RhdF9wb3J0ID0gQlJJREdFX0lERV9JTlRSX1NUQVQ7Ci0JCWNxcmVla19pcnFfZGF0YVsxNF0uYml0ID0gMTsKLQotCQlpcnFfZGVzY1sxNF0uY2hpcCA9ICZjcXJlZWtfaXJxX3R5cGU7Ci0JCWlycV9kZXNjWzE0XS5zdGF0dXMgPSBJUlFfRElTQUJMRUQ7Ci0JCWlycV9kZXNjWzE0XS5hY3Rpb24gPSAwOwotCQlpcnFfZGVzY1sxNF0uZGVwdGggPSAxOwotCi0JCWRpc2FibGVfY3FyZWVrX2lycSgxNCk7Ci0JfQotCi0JaWYgKGNxcmVla19oYXNfaXNhKSB7Ci0JCWNxcmVla19pcnFfZGF0YVsxMF0ubWFza19wb3J0ID0gQlJJREdFX0lTQV9JTlRSX01BU0s7Ci0JCWNxcmVla19pcnFfZGF0YVsxMF0uc3RhdF9wb3J0ID0gQlJJREdFX0lTQV9JTlRSX1NUQVQ7Ci0JCWNxcmVla19pcnFfZGF0YVsxMF0uYml0ID0gKDEgPDwgMTApOwotCi0JCS8qIFhYWDogRXJyLi4uIHdlIG1heSBuZWVkIGRlbXVsdGlwbGV4ZXIgZm9yIElTQSBpcnEuLi4gKi8KLQkJaXJxX2Rlc2NbMTBdLmNoaXAgPSAmY3FyZWVrX2lycV90eXBlOwotCQlpcnFfZGVzY1sxMF0uc3RhdHVzID0gSVJRX0RJU0FCTEVEOwotCQlpcnFfZGVzY1sxMF0uYWN0aW9uID0gMDsKLQkJaXJxX2Rlc2NbMTBdLmRlcHRoID0gMTsKLQotCQlkaXNhYmxlX2NxcmVla19pcnEoMTApOwotCX0KLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvY3FyZWVrL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvc2V0dXAuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWZmNGVkOS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9jcXJlZWsvc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKiAkSWQ6IHNldHVwLmMsdiAxLjUgMjAwMy8wOC8wNCAwMTo1MTo1OCBsZXRoYWwgRXhwICQKLSAqCi0gKiBhcmNoL3NoL2tlcm5lbC9zZXR1cF9jcXJlZWsuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCAgTmlpYmUgWXV0YWthCi0gKgotICogQ3FSRUVLIElERS9JU0EgQnJpZGdlIFN1cHBvcnQuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaC9jcXJlZWsuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLQotI2RlZmluZSBJREVfT0ZGU0VUIDB4QTQwMDAwMDBVTAotI2RlZmluZSBJU0FfT0ZGU0VUIDB4QTRBMDAwMDBVTAotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIkNxUkVFSyI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNxcmVla19wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBwb3J0KQotewotCWlmICgweDAwMDA8PXBvcnQgJiYgcG9ydDw9MHgwMDQwKQotCQlyZXR1cm4gSURFX09GRlNFVCArIHBvcnQ7Ci0JaWYgKCgweDAxZjA8PXBvcnQgJiYgcG9ydDw9MHgwMWY3KSB8fCBwb3J0ID09IDB4MDNmNikKLQkJcmV0dXJuIElERV9PRkZTRVQgKyBwb3J0OwotCi0JcmV0dXJuIElTQV9PRkZTRVQgKyBwb3J0OwotfQotCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9jcXJlZWsgX19pbml0bXYgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQkubXZfbnJfaXJxcwkJPSA0OCwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkKLQkubXZfbnJfaXJxcwkJPSAzMiwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLQkubXZfbnJfaXJxcwkJPSA2MSwKLSNlbmRpZgotCi0JLm12X2luaXRfaXJxCQk9IGluaXRfY3FyZWVrX0lSUSwKLQotCS5tdl9pc2FfcG9ydDJhZGRyCT0gY3FyZWVrX3BvcnQyYWRkciwKLX07Ci1BTElBU19NVihjcXJlZWspCi0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBib2FyZAotICovCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQotewotCWludCBpOwotLyogdWRlbGF5IGlzIG5vdCBhdmFpbGFibGUgYXQgc2V0dXAgdGltZSB5ZXQuLi4gKi8KLSNkZWZpbmUgREVMQVkoKSBkbyB7Zm9yIChpPTA7IGk8MTAwMDA7IGkrKykgY3RybF9pbncoMHhhMDAwMDAwMCk7fSB3aGlsZSgwKQotCi0JaWYgKChpbncgKEJSSURHRV9GRUFUVVJFKSAmIDEpKSB7IC8qIFdlIGhhdmUgSURFIGludGVyZmFjZSAqLwotCQlvdXR3X3AoMCwgQlJJREdFX0lERV9JTlRSX0xWTCk7Ci0JCW91dHdfcCgwLCBCUklER0VfSURFX0lOVFJfTUFTSyk7Ci0KLQkJb3V0d19wKDAsIEJSSURHRV9JREVfQ1RSTCk7Ci0JCURFTEFZKCk7Ci0KLQkJb3V0d19wKDB4ODAwMCwgQlJJREdFX0lERV9DVFJMKTsKLQkJREVMQVkoKTsKLQotCQlvdXR3X3AoMHhmZmZmLCBCUklER0VfSURFX0lOVFJfU1RBVCk7IC8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KLQkJb3V0d19wKDB4MGYtMTQsIEJSSURHRV9JREVfSU5UUl9MVkwpOyAvKiBVc2UgMTQgSVBSICovCi0JCW91dHdfcCgxLCBCUklER0VfSURFX0lOVFJfTUFTSyk7IC8qIEVuYWJsZSBpbnRlcnJ1cHQgKi8KLQkJY3FyZWVrX2hhc19pZGU9MTsKLQl9Ci0KLQlpZiAoKGludyAoQlJJREdFX0ZFQVRVUkUpICYgMikpIHsgLyogV2UgaGF2ZSBJU0EgaW50ZXJmYWNlICovCi0JCW91dHdfcCgwLCBCUklER0VfSVNBX0lOVFJfTFZMKTsKLQkJb3V0d19wKDAsIEJSSURHRV9JU0FfSU5UUl9NQVNLKTsKLQotCQlvdXR3X3AoMCwgQlJJREdFX0lTQV9DVFJMKTsKLQkJREVMQVkoKTsKLQkJb3V0d19wKDB4ODAwMCwgQlJJREdFX0lTQV9DVFJMKTsKLQkJREVMQVkoKTsKLQotCQlvdXR3X3AoMHhmZmZmLCBCUklER0VfSVNBX0lOVFJfU1RBVCk7IC8qIENsZWFyIGludGVycnVwdCBzdGF0dXMgKi8KLQkJb3V0d19wKDB4MGYtMTAsIEJSSURHRV9JU0FfSU5UUl9MVkwpOyAvKiBVc2UgMTAgSVBSICovCi0JCW91dHdfcCgweGZmZjgsIEJSSURHRV9JU0FfSU5UUl9NQVNLKTsgLyogRW5hYmxlIGludGVycnVwdCAqLwotCQljcXJlZWtfaGFzX2lzYT0xOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIkNxUkVFSyBTZXR1cCAoSURFPSVkLCBJU0E9JWQpLi4uZG9uZVxuIiwgY3FyZWVrX2hhc19pZGUsIGNxcmVla19oYXNfaXNhKTsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvZG1pZGEvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9kbWlkYS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzU5OTlhYS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9kbWlkYS9NYWtlZmlsZQorKysgL2Rldi9udWxsCkBAIC0xLDcgKzAsMCBAQAotIwotIyBNYWtlZmlsZSBmb3IgdGhlIERhdGFNeXRlIEluZHVzdHJpYWwgRGlnaXRhbCBBc3Npc3RhbnQodG0pIHNwZWNpZmljIHBhcnRzCi0jIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IG1hY2gubwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9kbWlkYS9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9kbWlkYS9tYWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwM2EyNWY5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2RtaWRhL21hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9kbWlkYS9tYWNoLmMKLSAqCi0gKiBieSBHcmVnIEJhbmtzIDxnYmFua3NAcG9ja2V0cGVuZ3VpbnMuY29tPgotICogKGMpIDIwMDAgUG9ja2V0UGVuZ3VpbnMgSW5jCi0gKgotICogRGVyaXZlZCBmcm9tIG1hY2hfaHA2MDAuYywgd2hpY2ggYm9yZSB0aGUgbWVzc2FnZToKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogTWFjaGluZSB2ZWN0b3IgZm9yIHRoZSBEYXRhTXl0ZSBJbmR1c3RyaWFsIERpZ2l0YWwgQXNzaXN0YW50KHRtKS4KLSAqIFNlZSBodHRwOi8vd3d3LmRtaWRhLmNvbQotICoKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaGQ2NDQ2NS5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotLyoKLSAqIFRoZSBNYWNoaW5lIFZlY3RvcgotICovCi0KLXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9kbWlkYSBfX2luaXRtdiA9IHsKLQkubXZfbnJfaXJxcwkJPSBIRDY0NDY1X0lSUV9CQVNFK0hENjQ0NjVfSVJRX05VTSwKLQotCS5tdl9pbmIJCQk9IGhkNjQ0NjVfaW5iLAotCS5tdl9pbncJCQk9IGhkNjQ0NjVfaW53LAotCS5tdl9pbmwJCQk9IGhkNjQ0NjVfaW5sLAotCS5tdl9vdXRiCQk9IGhkNjQ0NjVfb3V0YiwKLQkubXZfb3V0dwkJPSBoZDY0NDY1X291dHcsCi0JLm12X291dGwJCT0gaGQ2NDQ2NV9vdXRsLAotCi0JLm12X2luYl9wCQk9IGhkNjQ0NjVfaW5iX3AsCi0JLm12X2lud19wCQk9IGhkNjQ0NjVfaW53LAotCS5tdl9pbmxfcAkJPSBoZDY0NDY1X2lubCwKLQkubXZfb3V0Yl9wCQk9IGhkNjQ0NjVfb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gaGQ2NDQ2NV9vdXR3LAotCS5tdl9vdXRsX3AJCT0gaGQ2NDQ2NV9vdXRsLAotCi0JLm12X2luc2IJCT0gaGQ2NDQ2NV9pbnNiLAotCS5tdl9pbnN3CQk9IGhkNjQ0NjVfaW5zdywKLQkubXZfaW5zbAkJPSBoZDY0NDY1X2luc2wsCi0JLm12X291dHNiCQk9IGhkNjQ0NjVfb3V0c2IsCi0JLm12X291dHN3CQk9IGhkNjQ0NjVfb3V0c3csCi0JLm12X291dHNsCQk9IGhkNjQ0NjVfb3V0c2wsCi0KLQkubXZfaXJxX2RlbXV4CQk9IGhkNjQ0NjVfaXJxX2RlbXV4LAotfTsKLUFMSUFTX01WKGRtaWRhKQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3QvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3QvaXJxLmMKaW5kZXggYjEwYTZiMS4uNWJmMDFmOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvZHJlYW1jYXN0L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9pcnEuYwpAQCAtMTAsNyArMTAsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZHJlYW1jYXN0L3N5c2FzaWMuaD4KQEAgLTI2LDEwICsyNSwxMCBAQAogICAgZXZlbnQuCiAKICAgIFRoZXJlIGFyZSB0aHJlZSAzMi1iaXQgRVNScyBsb2NhdGVkIGF0IDB4YTA1Zjg5MDAgLSAweGEwNWY2OTA4LiAgRXZlbnQKLSAgIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiBpbmNsdWRlL2FzbS1zaC9kY19zeXNhc2ljLmguICBUaGVyZSBhcmUgdGhyZWUgZ3JvdXBzCi0gICBvZiBFTVJzIHRoYXQgcGFyYWxsZWwgdGhlIEVTUnMuICBFYWNoIEVNUiBncm91cCBjb3JyZXNwb25kcyB0byBhbiBJUlEsIHNvCi0gICAweGEwNWY2OTEwIC0gMHhhMDVmNjkxOCB0cmlnZ2VycyBJUlEgMTMsIDB4YTA1ZjY5MjAgLSAweGEwNWY2OTI4IHRyaWdnZXJzCi0gICBJUlEgMTEsIGFuZCAweGEwNWY2OTMwIC0gMHhhMDVmNjkzOCB0cmlnZ2VycyBJUlEgOS4KKyAgIHR5cGVzIGNhbiBiZSBmb3VuZCBpbiBpbmNsdWRlL2FzbS1zaC9kcmVhbWNhc3Qvc3lzYXNpYy5oLiBUaGVyZSBhcmUgdGhyZWUKKyAgIGdyb3VwcyBvZiBFTVJzIHRoYXQgcGFyYWxsZWwgdGhlIEVTUnMuICBFYWNoIEVNUiBncm91cCBjb3JyZXNwb25kcyB0byBhbgorICAgSVJRLCBzbyAweGEwNWY2OTEwIC0gMHhhMDVmNjkxOCB0cmlnZ2VycyBJUlEgMTMsIDB4YTA1ZjY5MjAgLSAweGEwNWY2OTI4CisgICB0cmlnZ2VycyBJUlEgMTEsIGFuZCAweGEwNWY2OTMwIC0gMHhhMDVmNjkzOCB0cmlnZ2VycyBJUlEgOS4KIAogICAgSW4gdGhlIGtlcm5lbCwgdGhlc2UgZXZlbnRzIGFyZSBtYXBwZWQgdG8gdmlydHVhbCBJUlFzIHNvIHRoYXQgZHJpdmVycyBjYW4KICAgIHJlc3BvbmQgdG8gdGhlbSBhcyB0aGV5IHdvdWxkIGEgbm9ybWFsIGludGVycnVwdC4gIEluIG9yZGVyIHRvIGtlZXAgdGhpcwpAQCAtNTcsMjkgKzU2LDIzIEBACiAvKiBEaXNhYmxlIHRoZSBoYXJkd2FyZSBldmVudCBieSBtYXNraW5nIGl0cyBiaXQgaW4gaXRzIEVNUiAqLwogc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfc3lzdGVtYXNpY19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICAgX191MzIgZW1yID0gRU1SX0JBU0UgKyAoTEVWRUwoaXJxKSA8PCA0KSArIChMRVZFTChpcnEpIDw8IDIpOwogICAgICAgICBfX3UzMiBtYXNrOwogCi0gICAgICAgIGxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICAgICAgICAgbWFzayA9IGlubChlbXIpOwogICAgICAgICBtYXNrICY9IH4oMSA8PCBFVkVOVF9CSVQoaXJxKSk7CiAgICAgICAgIG91dGwobWFzaywgZW1yKTsKLSAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKiBFbmFibGUgdGhlIGhhcmR3YXJlIGV2ZW50IGJ5IHNldHRpbmcgaXRzIGJpdCBpbiBpdHMgRU1SICovCiBzdGF0aWMgaW5saW5lIHZvaWQgZW5hYmxlX3N5c3RlbWFzaWNfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgIF9fdTMyIGVtciA9IEVNUl9CQVNFICsgKExFVkVMKGlycSkgPDwgNCkgKyAoTEVWRUwoaXJxKSA8PCAyKTsKICAgICAgICAgX191MzIgbWFzazsKIAotICAgICAgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAgICAgICAgIG1hc2sgPSBpbmwoZW1yKTsKICAgICAgICAgbWFzayB8PSAoMSA8PCBFVkVOVF9CSVQoaXJxKSk7CiAgICAgICAgIG91dGwobWFzaywgZW1yKTsKLSAgICAgICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKiBBY2tub3dsZWRnZSBhIGhhcmR3YXJlIGV2ZW50IGJ5IHdyaXRpbmcgaXRzIGJpdCBiYWNrIHRvIGl0cyBFU1IgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9ydGMuYwppbmRleCAzNzlkZTE2Li5iM2E4NzZhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3QvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvZHJlYW1jYXN0L3J0Yy5jCkBAIC0xLDQgKzEsNSBAQAotLyogYXJjaC9zaC9rZXJuZWwvcnRjLWFpY2EuYworLyoKKyAqIGFyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9ydGMuYwogICoKICAqIERyZWFtY2FzdCBBSUNBIFJUQyByb3V0aW5lcy4KICAqCkBAIC0xMCwxNSArMTEsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgotCisjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1leHRlcm4gdm9pZCAoKnJ0Y19nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopOwotZXh0ZXJuIGludCAoKnJ0Y19zZXRfdGltZSkoY29uc3QgdGltZV90KTsKLQogLyogVGhlIEFJQ0EgUlRDIGhhcyBhbiBFcG9jaCBvZiAxLzEvMTk1MCwgc28gd2UgbXVzdCBzdWJ0cmFjdCAyMCB5ZWFycyAoaW4KLSAgIHNlY29uZHMgdG8gZ2V0IHRoZSBzdGFuZGFyZCBVbml4IEVwb2NoIHdoZW4gZ2V0dGluZyB0aGUgdGltZSwgYW5kIGFkZCAyMAotICAgeWVhcnMgd2hlbiBzZXR0aW5nIHRoZSB0aW1lLiAqLworICAgc2Vjb25kcykgdG8gZ2V0IHRoZSBzdGFuZGFyZCBVbml4IEVwb2NoIHdoZW4gZ2V0dGluZyB0aGUgdGltZSwgYW5kIGFkZAorICAgMjAgeWVhcnMgd2hlbiBzZXR0aW5nIHRoZSB0aW1lLiAqLwogI2RlZmluZSBUV0VOVFlfWUVBUlMgKCgyMCAqIDM2NUxVICsgNSkgKiA4NjQwMCkKIAogLyogVGhlIEFJQ0EgUlRDIGlzIHJlcHJlc2VudGVkIGJ5IGEgMzItYml0IHNlY29uZHMgY291bnRlciBzdG9yZWQgaW4gMiAxNi1iaXQKQEAgLTMyLDcgKzMwLDggQEAKICAqCiAgKiBHcmFicyB0aGUgY3VycmVudCBSVEMgc2Vjb25kcyBjb3VudGVyIGFuZCBhZGp1c3RzIGl0IHRvIHRoZSBVbml4IEVwb2NoLgogICovCi12b2lkIGFpY2FfcnRjX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnRzKSB7Cit2b2lkIGFpY2FfcnRjX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnRzKQorewogCXVuc2lnbmVkIGxvbmcgdmFsMSwgdmFsMjsKIAogCWRvIHsKQEAgLTU1LDcgKzU0LDggQEAKICAqCiAgKiBBZGp1c3RzIHRoZSBnaXZlbiBAdHYgdG8gdGhlIEFJQ0EgRXBvY2ggYW5kIHNldHMgdGhlIFJUQyBzZWNvbmRzIGNvdW50ZXIuCiAgKi8KLWludCBhaWNhX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3QgdGltZV90IHNlY3MpIHsKK2ludCBhaWNhX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3QgdGltZV90IHNlY3MpCit7CiAJdW5zaWduZWQgbG9uZyB2YWwxLCB2YWwyOwogCXVuc2lnbmVkIGxvbmcgYWRqID0gc2VjcyArIFRXRU5UWV9ZRUFSUzsKIApAQCAtNzUsNyArNzUsNyBAQAogCiB2b2lkIGFpY2FfdGltZV9pbml0KHZvaWQpCiB7Ci0JcnRjX2dldF90aW1lID0gYWljYV9ydGNfZ2V0dGltZW9mZGF5OwotCXJ0Y19zZXRfdGltZSA9IGFpY2FfcnRjX3NldHRpbWVvZmRheTsKKwlydGNfc2hfZ2V0X3RpbWUgPSBhaWNhX3J0Y19nZXR0aW1lb2ZkYXk7CisJcnRjX3NoX3NldF90aW1lID0gYWljYV9ydGNfc2V0dGltZW9mZGF5OwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9kcmVhbWNhc3Qvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9zZXR1cC5jCmluZGV4IDAwMjdiODAuLmYxMzAxN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2RyZWFtY2FzdC9zZXR1cC5jCkBAIC0yMiw0MSArMjIsMjEgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL3N5c2FzaWMuaD4KIAogZXh0ZXJuIHN0cnVjdCBod19pbnRlcnJ1cHRfdHlwZSBzeXN0ZW1hc2ljX2ludDsKLS8qIFhYWDogTW92ZSB0aGlzIGludG8gaXQncyBwcm9wZXIgaGVhZGVyLiAqLwotZXh0ZXJuIHZvaWQgKCpib2FyZF90aW1lX2luaXQpKHZvaWQpOwogZXh0ZXJuIHZvaWQgYWljYV90aW1lX2luaXQodm9pZCk7CiBleHRlcm4gaW50IGdhcHNwY2lfaW5pdCh2b2lkKTsKIGV4dGVybiBpbnQgc3lzdGVtYXNpY19pcnFfZGVtdXgoaW50KTsKIAotdm9pZCAqZHJlYW1jYXN0X2NvbnNpc3RlbnRfYWxsb2Moc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgaW50KTsKK3ZvaWQgKmRyZWFtY2FzdF9jb25zaXN0ZW50X2FsbG9jKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCBkbWFfYWRkcl90ICosIGdmcF90KTsKIGludCBkcmVhbWNhc3RfY29uc2lzdGVudF9mcmVlKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwogCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIlNlZ2EgRHJlYW1jYXN0IjsKLX0KLQotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2RyZWFtY2FzdCBfX2luaXRtdiA9IHsKLQkubXZfbnJfaXJxcwkJPSBOUl9JUlFTLAotCi0JLm12X2lycV9kZW11eAkJPSBzeXN0ZW1hc2ljX2lycV9kZW11eCwKLQotI2lmZGVmIENPTkZJR19QQ0kKLQkubXZfY29uc2lzdGVudF9hbGxvYwk9IGRyZWFtY2FzdF9jb25zaXN0ZW50X2FsbG9jLAotCS5tdl9jb25zaXN0ZW50X2ZyZWUJPSBkcmVhbWNhc3RfY29uc2lzdGVudF9mcmVlLAotI2VuZGlmCi19OwotQUxJQVNfTVYoZHJlYW1jYXN0KQotCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgZHJlYW1jYXN0X3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJaW50IGk7CiAKQEAgLTc4LDYgKzU4LDE2IEBACiAJaWYgKGdhcHNwY2lfaW5pdCgpIDwgMCkKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiR0FQU1BDSSB3YXMgbm90IGRldGVjdGVkLlxuIik7CiAjZW5kaWYKLQotCXJldHVybiAwOwogfQorCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfZHJlYW1jYXN0IF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJTZWdhIERyZWFtY2FzdCIsCisJLm12X3NldHVwCQk9IGRyZWFtY2FzdF9zZXR1cCwKKwkubXZfaXJxX2RlbXV4CQk9IHN5c3RlbWFzaWNfaXJxX2RlbXV4LAorCisjaWZkZWYgQ09ORklHX1BDSQorCS5tdl9jb25zaXN0ZW50X2FsbG9jCT0gZHJlYW1jYXN0X2NvbnNpc3RlbnRfYWxsb2MsCisJLm12X2NvbnNpc3RlbnRfZnJlZQk9IGRyZWFtY2FzdF9jb25zaXN0ZW50X2ZyZWUsCisjZW5kaWYKK307CitBTElBU19NVihkcmVhbWNhc3QpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9lYzMxMDQvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCmluZGV4IDRiM2VmMTYuLjkwMmJjOTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2VjMzEwNC9zZXR1cC5jCkBAIC0yMSwyMiArMjEsMzYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLQogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoL2VjMzEwNC5oPgogCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBlYzMxMDRfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKLQlyZXR1cm4gIkVDMzEwNCI7CisJY2hhciBzdHJbOF07CisJaW50IGk7CisKKwlmb3IgKGk9MDsgaTw4OyBpKyspCisJCXN0cltpXSA9IGN0cmxfcmVhZGIoRUMzMTA0X0JBU0UgKyBpKTsKKworCWZvciAoaSA9IEVDMzEwNF9JUlFCQVNFOyBpIDwgRUMzMTA0X0lSUUJBU0UgKyAzMjsgaSsrKQorCQlpcnFfZGVzY1tpXS5oYW5kbGVyID0gJmVjMzEwNF9pbnQ7CisKKwlwcmludGsoImluaXRpYWxpemluZyBFQzMxMDQgXCIlLjhzXCIgYXQgJTA4eCwgSVJRICVkLCBJUlEgYmFzZSAlZFxuIiwKKwkgICAgICAgc3RyLCBFQzMxMDRfQkFTRSwgRUMzMTA0X0lSUSwgRUMzMTA0X0lSUUJBU0UpOworCisJLyogbWFzayBhbGwgaW50ZXJydXB0cy4gIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkb25lIGJ5IHRoZSBib290CisJICogbG9hZGVyIGZvciB1cyBidXQgd2Ugd2FudCB0byBiZSBzdXJlIC4uLiAqLworCWN0cmxfd3JpdGVsKDB4ZmZmZmZmZmYsIEVDMzEwNF9JTVIpOwogfQogCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KLQogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2VjMzEwNCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQk9ICJFQzMxMDQiLAorCS5tdl9zZXR1cAk9IGVjMzEwNF9zZXR1cCwKIAkubXZfbnJfaXJxcwk9IDk2LAogCiAJLm12X2luYgkJPSBlYzMxMDRfaW5iLApAQCAtNDgsMzEgKzYyLDQgQEAKIAogCS5tdl9pcnFfZGVtdXgJPSBlYzMxMDRfaXJxX2RlbXV4LAogfTsKLQogQUxJQVNfTVYoZWMzMTA0KQotCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0JY2hhciBzdHJbOF07Ci0JaW50IGk7Ci0JCi0JaWYgKDApCi0JCXJldHVybiAwOwotCi0JZm9yIChpPTA7IGk8ODsgaSsrKQotCQlzdHJbaV0gPSBjdHJsX3JlYWRiKEVDMzEwNF9CQVNFICsgaSk7Ci0KLQlmb3IgKGkgPSBFQzMxMDRfSVJRQkFTRTsgaSA8IEVDMzEwNF9JUlFCQVNFICsgMzI7IGkrKykKLQkJaXJxX2Rlc2NbaV0uY2hpcCA9ICZlYzMxMDRfaW50OwotCi0JcHJpbnRrKCJpbml0aWFsaXppbmcgRUMzMTA0IFwiJS44c1wiIGF0ICUwOHgsIElSUSAlZCwgSVJRIGJhc2UgJWRcbiIsCi0JICAgICAgIHN0ciwgRUMzMTA0X0JBU0UsIEVDMzEwNF9JUlEsIEVDMzEwNF9JUlFCQVNFKTsKLQotCi0JLyogbWFzayBhbGwgaW50ZXJydXB0cy4gIHRoaXMgc2hvdWxkIGhhdmUgYmVlbiBkb25lIGJ5IHRoZSBib290Ci0JICogbG9hZGVyIGZvciB1cyBidXQgd2Ugd2FudCB0byBiZSBzdXJlIC4uLiAqLwotCWN0cmxfd3JpdGVsKDB4ZmZmZmZmZmYsIEVDMzEwNF9JTVIpOwotCQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9oYXJwL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWI3NTNkMy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9oYXJwL01ha2VmaWxlCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi0jCi0jIE1ha2VmaWxlIGZvciBTVE1pY3JvZWxlY3Ryb25pY3MgYm9hcmQgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteSA6PSBpcnEubyBzZXR1cC5vIG1hY2gubyBsZWQubwotCi1vYmotJChDT05GSUdfUENJKSArPSBwY2lkbWEubwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9oYXJwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZiYjQxYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9oYXJwL2lycS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTQ3ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqCi0gKiBMb29rcyBhZnRlciBpbnRlcnJ1cHRzIG9uIHRoZSBIQVJQIGJvYXJkLgotICoKLSAqIEJhc2VzIG9uIHRoZSBJUFIgaXJxIHN5c3RlbQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcnAvaGFycC5oPgotCi0KLSNkZWZpbmUgTlVNX0VYVEVSTkFMX0lSUVMgMTYKLQotLy8gRWFybHkgdmVyc2lvbnMgb2YgdGhlIFNUQjEgT3ZlcmRyaXZlIHJlcXVpcmVkIHRoaXMgbmFzdHkgZnJpZwotLy8jZGVmaW5lIElOVkVSVF9JTlRNQVNLX1dSSVRFUwotCi1zdGF0aWMgdm9pZCBlbmFibGVfaGFycF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci1zdGF0aWMgdm9pZCBkaXNhYmxlX2hhcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpOwotCi0vKiBzaHV0ZG93biBpcyBzYW1lIGFzICJkaXNhYmxlIiAqLwotI2RlZmluZSBzaHV0ZG93bl9oYXJwX2lycSBkaXNhYmxlX2hhcnBfaXJxCi0KLXN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19oYXJwKHVuc2lnbmVkIGludCk7Ci1zdGF0aWMgdm9pZCBlbmRfaGFycF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9oYXJwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9oYXJwX2lycShpcnEpOwotCXJldHVybiAwOwkJLyogbmV2ZXIgYW55dGhpbmcgcGVuZGluZyAqLwotfQotCi1zdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGhhcnBfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIkhhcnAtSVJRIiwKLQkuc3RhcnR1cCA9IHN0YXJ0dXBfaGFycF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25faGFycF9pcnEsCi0JLmVuYWJsZSA9IGVuYWJsZV9oYXJwX2lycSwKLQkuZGlzYWJsZSA9IGRpc2FibGVfaGFycF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19oYXJwLAotCS5lbmQgPSBlbmRfaGFycF9pcnEKLX07Ci0KLXN0YXRpYyB2b2lkIGRpc2FibGVfaGFycF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCB2YWwsIGZsYWdzOwotCXVuc2lnbmVkIG1hc2tSZWc7Ci0JdW5zaWduZWQgbWFzazsKLQlpbnQgcHJpOwotCi0JaWYgKGlycSA8IDAgfHwgaXJxID49IE5VTV9FWFRFUk5BTF9JUlFTKQotCQlyZXR1cm47Ci0KLQlwcmkgPSAxNSAtIGlycTsKLQotCWlmIChwcmkgPCA4KSB7Ci0JCW1hc2tSZWcgPSBFUExEX0lOVE1BU0swOwotCX0gZWxzZSB7Ci0JCW1hc2tSZWcgPSBFUExEX0lOVE1BU0sxOwotCQlwcmkgLT0gODsKLQl9Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbWFzayA9IGN0cmxfaW5sKG1hc2tSZWcpOwotCW1hc2sgJj0gKH4oMSA8PCBwcmkpKTsKLSNpZiBkZWZpbmVkKElOVkVSVF9JTlRNQVNLX1dSSVRFUykKLQltYXNrIF49IDB4ZmY7Ci0jZW5kaWYKLQljdHJsX291dGwobWFzaywgbWFza1JlZyk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfaGFycF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCBmbGFnczsKLQl1bnNpZ25lZCBtYXNrUmVnOwotCXVuc2lnbmVkIG1hc2s7Ci0JaW50IHByaTsKLQotCWlmIChpcnEgPCAwIHx8IGlycSA+PSBOVU1fRVhURVJOQUxfSVJRUykKLQkJcmV0dXJuOwotCi0JcHJpID0gMTUgLSBpcnE7Ci0KLQlpZiAocHJpIDwgOCkgewotCQltYXNrUmVnID0gRVBMRF9JTlRNQVNLMDsKLQl9IGVsc2UgewotCQltYXNrUmVnID0gRVBMRF9JTlRNQVNLMTsKLQkJcHJpIC09IDg7Ci0JfQotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW1hc2sgPSBjdHJsX2lubChtYXNrUmVnKTsKLQotCi0JbWFzayB8PSAoMSA8PCBwcmkpOwotCi0jaWYgZGVmaW5lZChJTlZFUlRfSU5UTUFTS19XUklURVMpCi0JbWFzayBePSAweGZmOwotI2VuZGlmCi0JY3RybF9vdXRsKG1hc2ssIG1hc2tSZWcpOwotCi0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0vKiBUaGlzIGZ1bmN0aW9ucyBzZXRzIHRoZSBkZXNpcmVkIGlycSBoYW5kbGVyIHRvIGJlIGFuIG92ZXJkcml2ZSB0eXBlICovCi1zdGF0aWMgdm9pZCBfX2luaXQgbWFrZV9oYXJwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOwotCWlycV9kZXNjW2lycV0uY2hpcCA9ICZoYXJwX2lycV90eXBlOwotCWRpc2FibGVfaGFycF9pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX2hhcnAodW5zaWduZWQgaW50IGlycSkKLXsKLQlkaXNhYmxlX2hhcnBfaXJxKGlycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGVuZF9oYXJwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9oYXJwX2lycShpcnEpOwotfQotCi12b2lkIF9faW5pdCBpbml0X2hhcnBfaXJxKHZvaWQpCi17Ci0JaW50IGk7Ci0KLSNpZiAhZGVmaW5lZChJTlZFUlRfSU5UTUFTS19XUklURVMpCi0JLy8gT24gdGhlIGhhcnAgdGhlc2UgYXJlIHNldCB0byBlbmFibGUgYW4gaW50ZXJydXB0Ci0JY3RybF9vdXRsKDB4MDAsIEVQTERfSU5UTUFTSzApOwotCWN0cmxfb3V0bCgweDAwLCBFUExEX0lOVE1BU0sxKTsKLSNlbHNlCi0JLy8gT24gdGhlIE92ZXJkcml2ZSB0aGUgZGF0YSBpcyBpbnZlcnRlZCBiZWZvcmUgYmVpbmcgc3RvcmVkIGluIHRoZSByZWcKLQljdHJsX291dGwoMHhmZiwgRVBMRF9JTlRNQVNLMCk7Ci0JY3RybF9vdXRsKDB4ZmYsIEVQTERfSU5UTUFTSzEpOwotI2VuZGlmCi0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX0lSUVM7IGkrKykgewotCQltYWtlX2hhcnBfaXJxKGkpOwotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZWI3YjM5Li4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvbGVkLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1MSArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9zdGJvYXJkcy9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIFNUNDBTVEIxIEhBUlAgYW5kIGNvbXBhdGlibGUgY29kZS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcnAvaGFycC5oPgotCi0vKiBIYXJwOiBGbGFzaCBMRDEwIChmcm9udCBwYW5uZWwpIGNvbm5lY3RlZCB0byBFUExEIChJQzgpICovCi0vKiBPdmVyZHJpdmU6IEZsYXNoIExEMSAoZnJvbnQgcGFuZWwpIGNvbm5lY3RlZCB0byBFUExEIChJQzQpICovCi0vKiBXb3JrcyBmb3IgSEFSUCBhbmQgb3ZlcmRyaXZlICovCi1zdGF0aWMgdm9pZCBtYWNoX2xlZChpbnQgcG9zaXRpb24sIGludCB2YWx1ZSkKLXsKLQlpZiAodmFsdWUpIHsKLQkJY3RybF9vdXRsKEVQTERfTEVEX09OLCBFUExEX0xFRCk7Ci0JfSBlbHNlIHsKLQkJY3RybF9vdXRsKEVQTERfTEVEX09GRiwgRVBMRF9MRUQpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+Ci0KLS8qIGFjdHMgbGlrZSBhbiBhY3R1YWwgaGVhcnQgYmVhdCAtLSBpZSB0aHVtcC10aHVtcC1wYXVzZS4uLiAqLwotdm9pZCBoZWFydGJlYXRfaGFycCh2b2lkKQotewotCXN0YXRpYyB1bnNpZ25lZCBjbnQgPSAwLCBwZXJpb2QgPSAwLCBkaXN0ID0gMDsKLQotCWlmIChjbnQgPT0gMCB8fCBjbnQgPT0gZGlzdCkKLQkJbWFjaF9sZWQoIC0xLCAxKTsKLQllbHNlIGlmIChjbnQgPT0gNyB8fCBjbnQgPT0gZGlzdCs3KQotCQltYWNoX2xlZCggLTEsIDApOwotCi0JaWYgKCsrY250ID4gcGVyaW9kKSB7Ci0JCWNudCA9IDA7Ci0JCS8qIFRoZSBoeXBlcmJvbGljIGZ1bmN0aW9uIGJlbG93IG1vZGlmaWVzIHRoZSBoZWFydGJlYXQgcGVyaW9kCi0JCSAqIGxlbmd0aCBpbiBkZXBlbmRlbmN5IG9mIHRoZSBjdXJyZW50ICg1bWluKSBsb2FkLiBJdCBnb2VzCi0JCSAqIHRocm91Z2ggdGhlIHBvaW50cyBmKDApPTEyNiwgZigxKT04NiwgZig1KT01MSwKLQkJICogZihpbmYpLT4zMC4gKi8KLQkJcGVyaW9kID0gKCg2NzI8PEZTSElGVCkvKDUqYXZlbnJ1blswXSsoNzw8RlNISUZUKSkpICsgMzA7Ci0JCWRpc3QgPSBwZXJpb2QgLyA0OwotCX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaGFycC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL21hY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTk0NmRkMS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9oYXJwL21hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDYyICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2JvYXJkcy9oYXJwL21hY2guYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogTWFjaGluZSB2ZWN0b3IgZm9yIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgU1RCMSBIQVJQIGFuZCBjb21wYXRpYmxlIGJvYXJkcwotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0KLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9ydGMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaHZlY19pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaW8uaD4KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2NS9oZDY0NDY1Lmg+Ci0KLXZvaWQgc2V0dXBfaGFycCh2b2lkKTsKLXZvaWQgaW5pdF9oYXJwX2lycSh2b2lkKTsKLXZvaWQgaGVhcnRiZWF0X2hhcnAodm9pZCk7Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfaGFycCBfX2luaXRtdiA9IHsKLQkubXZfbnJfaXJxcwkJPSA4OSArIEhENjQ0NjVfSVJRX05VTSwKLQotCS5tdl9pbmIJCQk9IGhkNjQ0NjVfaW5iLAotCS5tdl9pbncJCQk9IGhkNjQ0NjVfaW53LAotCS5tdl9pbmwJCQk9IGhkNjQ0NjVfaW5sLAotCS5tdl9vdXRiCQk9IGhkNjQ0NjVfb3V0YiwKLQkubXZfb3V0dwkJPSBoZDY0NDY1X291dHcsCi0JLm12X291dGwJCT0gaGQ2NDQ2NV9vdXRsLAotCi0JLm12X2luYl9wCQk9IGhkNjQ0NjVfaW5iX3AsCi0JLm12X2lud19wCQk9IGhkNjQ0NjVfaW53LAotCS5tdl9pbmxfcAkJPSBoZDY0NDY1X2lubCwKLQkubXZfb3V0Yl9wCQk9IGhkNjQ0NjVfb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gaGQ2NDQ2NV9vdXR3LAotCS5tdl9vdXRsX3AJCT0gaGQ2NDQ2NV9vdXRsLAotCi0JLm12X2luc2IJCT0gaGQ2NDQ2NV9pbnNiLAotCS5tdl9pbnN3CQk9IGhkNjQ0NjVfaW5zdywKLQkubXZfaW5zbAkJPSBoZDY0NDY1X2luc2wsCi0JLm12X291dHNiCQk9IGhkNjQ0NjVfb3V0c2IsCi0JLm12X291dHN3CQk9IGhkNjQ0NjVfb3V0c3csCi0JLm12X291dHNsCQk9IGhkNjQ0NjVfb3V0c2wsCi0KLSAgICAgICAgLm12X2lzYV9wb3J0MmFkZHIgICAgICAgPSBoZDY0NDY1X2lzYV9wb3J0MmFkZHIsCi0KLSNpZmRlZiBDT05GSUdfUENJCi0JLm12X2luaXRfaXJxCQk9IGluaXRfaGFycF9pcnEsCi0jZW5kaWYKLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0JLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfaGFycCwKLSNlbmRpZgotfTsKLQotQUxJQVNfTVYoaGFycCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvcGNpZG1hLmMgYi9hcmNoL3NoL2JvYXJkcy9oYXJwL3BjaWRtYS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NzUzMTEzLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvcGNpZG1hLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMSBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKgotICogRHluYW1pYyBETUEgbWFwcGluZyBzdXBwb3J0LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgotCi0KLXZvaWQgKnBjaV9hbGxvY19jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgICBkbWFfYWRkcl90ICogZG1hX2hhbmRsZSkKLXsKLQl2b2lkICpyZXQ7Ci0JaW50IGdmcCA9IEdGUF9BVE9NSUM7Ci0KLQlyZXQgPSAodm9pZCAqKSBfX2dldF9mcmVlX3BhZ2VzKGdmcCwgZ2V0X29yZGVyKHNpemUpKTsKLQotCWlmIChyZXQgIT0gTlVMTCkgewotCSAgICAgICAgLyogSXMgaXQgbmVjY2Vzc2FyeSB0byBkbyB0aGUgbWVtc2V0PyAqLwotCQltZW1zZXQocmV0LCAwLCBzaXplKTsKLQkJKmRtYV9oYW5kbGUgPSB2aXJ0X3RvX2J1cyhyZXQpOwotCX0KLQkvKiBXZSBtdXN0IGZsdXNoIHRoZSBjYWNoZSBiZWZvcmUgd2UgcGFzcyBpdCBvbiB0byB0aGUgZGV2aWNlICovCi0JZmx1c2hfY2FjaGVfYWxsKCk7Ci0JcmV0dXJuICBQMlNFR0FERFIocmV0KTsKLX0KLQotdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBwMWFkZHI9UDFTRUdBRERSKCh1bnNpZ25lZCBsb25nKXZhZGRyKTsKLQotCWZyZWVfcGFnZXMocDFhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaGFycC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaGFycC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODZlNDUwLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL2hhcnAvc2V0dXAuYworKysgL2Rldi9udWxsCkBAIC0xLDkwICswLDAgQEAKLS8qCi0gKiBhcmNoL3NoL3N0Ym9hcmQvc2V0dXAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogU1RNaWNyb2VsZWN0cm9uaWNzIFNUNDBTVEIxIEhBUlAgYW5kIGNvbXBhdGlibGUgc3VwcG9ydC4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9oYXJwL2hhcnAuaD4KLQotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJTVEIxIEhhcnAiOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKLSAqLwotaW50IF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQotewotI2lmZGVmIENPTkZJR19TSF9TVEIxX0hBUlAKLQl1bnNpZ25lZCBsb25nIGljOF92ZXJzaW9uLCBpYzM2X3ZlcnNpb247Ci0KLQlpYzhfdmVyc2lvbiA9IGN0cmxfaW5sKEVQTERfUkVWSUQyKTsKLQlpYzM2X3ZlcnNpb24gPSBjdHJsX2lubChFUExEX1JFVklEMSk7Ci0KLSAgICAgICAgcHJpbnRrKCJTVE1pY3JvZWxlY3Ryb25pY3MgU1RCMSBIQVJQIGluaXRpYWxpc2F0b25cbiIpOwotICAgICAgICBwcmludGsoIkVQTEQgdmVyc2lvbnM6IElDODogJWQuJTAyZCwgSUMzNjogJWQuJTAyZFxuIiwKLSAgICAgICAgICAgICAgIChpYzhfdmVyc2lvbiA+PiA0KSAmIDB4ZiwgaWM4X3ZlcnNpb24gJiAweGYsCi0gICAgICAgICAgICAgICAoaWMzNl92ZXJzaW9uID4+IDQpICYgMHhmLCBpYzM2X3ZlcnNpb24gJiAweGYpOwotI2VsaWYgZGVmaW5lZChDT05GSUdfU0hfU1RCMV9PVkVSRFJJVkUpCi0JdW5zaWduZWQgbG9uZyB2ZXJzaW9uOwotCi0JdmVyc2lvbiA9IGN0cmxfaW5sKEVQTERfUkVWSUQpOwotCi0gICAgICAgIHByaW50aygiU1RNaWNyb2VsZWN0cm9uaWNzIFNUQjEgT3ZlcmRyaXZlIGluaXRpYWxpc2F0b25cbiIpOwotICAgICAgICBwcmludGsoIkVQTEQgdmVyc2lvbjogJWQuJTAyZFxuIiwKLQkgICAgICAgKHZlcnNpb24gPj4gNCkgJiAweGYsIHZlcnNpb24gJiAweGYpOwotI2Vsc2UKLSNlcnJvciBVbmRlZmluZWQgbWFjaGluZQotI2VuZGlmCi0gCi0gICAgICAgIC8qIEN1cnJlbnRseSBhbGwgU1RCMSBjaGlwcyBoYXZlIHByb2JsZW1zIHdpdGggdGhlIHNsZWVwIGluc3RydWN0aW9uLAotICAgICAgICAgKiBzbyBkaXNhYmxlIGl0IGhlcmUuCi0gICAgICAgICAqLwotCWRpc2FibGVfaGx0KCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycQotICoKLSAqIFRoaXMgaXMgYm9hcmQgc3BlY2lmaWMgYW5kIHJldHVybnMgdGhlIElSUSBmb3IgYSBnaXZlbiBQQ0kgZGV2aWNlLgotICogSXQgaXMgdXNlZCBieSB0aGUgUENJIGNvZGUgKGFyY2gvc2gva2VybmVsL3N0NDBfcGNpKikKLSAqCi0gKi8KLQotI2RlZmluZSBIQVJQX1BDSV9JUlEgICAgMQotI2RlZmluZSBIQVJQX0JSSURHRV9JUlEgMgotI2RlZmluZSBPVkVSRFJJVkVfU0xPVDBfSVJRIDAKLQotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0Jc3dpdGNoIChzbG90KSB7Ci0jaWZkZWYgQ09ORklHX1NIX1NUQjFfSEFSUAotCWNhc2UgMjoJCS8qVGhpcyBpcyB0aGUgUENJIHNsb3Qgb24gdGhlICovCi0JCXJldHVybiBIQVJQX1BDSV9JUlE7Ci0JY2FzZSAxOgkJLyogdGhpcyBpcyB0aGUgYnJpZGdlICovCi0JCXJldHVybiBIQVJQX0JSSURHRV9JUlE7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19TSF9TVEIxX09WRVJEUklWRSkKLQljYXNlIDE6Ci0JY2FzZSAyOgotCWNhc2UgMzoKLQkJcmV0dXJuIHNsb3QgLSAxOwotI2Vsc2UKLSNlcnJvciBVbmtub3duIGJvYXJkCi0jZW5kaWYKLQlkZWZhdWx0OgotCQlyZXR1cm4gLTE7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L01ha2VmaWxlCmluZGV4IDkyN2ZlMGEuLmZmMWI3ZjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L01ha2VmaWxlCkBAIC0yLDUgKzIsNiBAQAogIyBNYWtlZmlsZSBmb3IgdGhlIEhQNnh4IHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vCi0KK29iai15CSAJCTo9IHNldHVwLm8KK29iai0kKENPTkZJR19QTSkJKz0gcG0ubyBwbV93YWtldXAubworb2JqLSQoQ09ORklHX0FQTSkJKz0gaHA2eHhfYXBtLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvaHA2eHhfYXBtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQwZTcxMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L2hwNnh4X2FwbS5jCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogYmlvcy1sZXNzIEFQTSBkcml2ZXIgZm9yIGhwNjgwCisgKgorICogQ29weXJpZ2h0IDIwMDUgKGMpIEFuZHJpeSBTa3VseXNoIDxhc2t1bHlzaEBnbWFpbC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9hcG1fYmlvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vYXBtLmg+CisjaW5jbHVkZSA8YXNtL2FkYy5oPgorI2luY2x1ZGUgPGFzbS9ocDZ4eC9ocDZ4eC5oPgorCisjZGVmaW5lIFNINzcwOV9QR0RSCQkJMHhhNDAwMDEyYworCisjZGVmaW5lIEFQTV9DUklUSUNBTAkJCTEwCisjZGVmaW5lIEFQTV9MT1cJCQkJMzAKKworI2RlZmluZSBIUDY4MF9CQVRURVJZX01BWAkJODc1CisjZGVmaW5lIEhQNjgwX0JBVFRFUllfTUlOCQk2MDAKKyNkZWZpbmUgSFA2ODBfQkFUVEVSWV9BQ19PTgkJOTAwCisKKyNkZWZpbmUgTU9ETkFNRSAiaHA2eDBfYXBtIgorCitzdGF0aWMgaW50IGhwNngwX2FwbV9nZXRfaW5mbyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCkKK3sKKwl1OCBwZ2RyOworCWNoYXIgKnA7CisJaW50IGJhdHRlcnlfc3RhdHVzOworCWludCBiYXR0ZXJ5X2ZsYWc7CisJaW50IGFjX2xpbmVfc3RhdHVzOworCWludCB0aW1lX3VuaXRzID0gQVBNX0JBVFRFUllfTElGRV9VTktOT1dOOworCisJaW50IGJhdHRlcnkgPSBhZGNfc2luZ2xlKEFEQ19DSEFOTkVMX0JBVFRFUlkpOworCWludCBiYWNrdXAgPSBhZGNfc2luZ2xlKEFEQ19DSEFOTkVMX0JBQ0tVUCk7CisJaW50IGNoYXJnaW5nID0gYWRjX3NpbmdsZShBRENfQ0hBTk5FTF9DSEFSR0UpOworCWludCBwZXJjZW50YWdlOworCisJcGVyY2VudGFnZSA9IDEwMCAqIChiYXR0ZXJ5IC0gSFA2ODBfQkFUVEVSWV9NSU4pIC8KKwkJCSAgIChIUDY4MF9CQVRURVJZX01BWCAtIEhQNjgwX0JBVFRFUllfTUlOKTsKKworCWFjX2xpbmVfc3RhdHVzID0gKGJhdHRlcnkgPiBIUDY4MF9CQVRURVJZX0FDX09OKSA/CisJCQkgQVBNX0FDX09OTElORSA6IEFQTV9BQ19PRkZMSU5FOworCisJcCA9IGJ1ZjsKKworCXBnZHIgPSBjdHJsX2luYihTSDc3MDlfUEdEUik7CisJaWYgKHBnZHIgJiBQR0RSX01BSU5fQkFUVEVSWV9PVVQpIHsKKwkJYmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfTk9UX1BSRVNFTlQ7CisJCWJhdHRlcnlfZmxhZyA9IDB4ODA7CisJCXBlcmNlbnRhZ2UgPSAtMTsKKwl9IGVsc2UgaWYgKGNoYXJnaW5nIDwgOCApIHsKKwkJYmF0dGVyeV9zdGF0dXMgPSBBUE1fQkFUVEVSWV9TVEFUVVNfQ0hBUkdJTkc7CisJCWJhdHRlcnlfZmxhZyA9IDB4MDg7CisJCWFjX2xpbmVfc3RhdHVzID0gMHhmZjsKKwl9IGVsc2UgaWYgKHBlcmNlbnRhZ2UgPD0gQVBNX0NSSVRJQ0FMKSB7CisJCWJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMOworCQliYXR0ZXJ5X2ZsYWcgPSAweDA0OworCX0gZWxzZSBpZiAocGVyY2VudGFnZSA8PSBBUE1fTE9XKSB7CisJCWJhdHRlcnlfc3RhdHVzID0gQVBNX0JBVFRFUllfU1RBVFVTX0xPVzsKKwkJYmF0dGVyeV9mbGFnID0gMHgwMjsKKwl9IGVsc2UgeworCQliYXR0ZXJ5X3N0YXR1cyA9IEFQTV9CQVRURVJZX1NUQVRVU19ISUdIOworCQliYXR0ZXJ5X2ZsYWcgPSAweDAxOworCX0KKworCXAgKz0gc3ByaW50ZihwLCAiMS4wIDEuMiAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnggJWQlJSAlZCAlc1xuIiwKKwkJICAgICBBUE1fMzJfQklUX1NVUFBPUlQsCisJCSAgICAgYWNfbGluZV9zdGF0dXMsCisJCSAgICAgYmF0dGVyeV9zdGF0dXMsCisJCSAgICAgYmF0dGVyeV9mbGFnLAorCQkgICAgIHBlcmNlbnRhZ2UsCisJCSAgICAgdGltZV91bml0cywKKwkJICAgICAibWluIik7CisJcCArPSBzcHJpbnRmKHAsICJiYXQ9JWQgYmFja3VwPSVkIGNoYXJnZT0lZFxuIiwKKwkJICAgICBiYXR0ZXJ5LCBiYWNrdXAsIGNoYXJnaW5nKTsKKworCXJldHVybiBwIC0gYnVmOworfQorCitzdGF0aWMgaXJxcmV0dXJuX3QgaHA2eDBfYXBtX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXYsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWlmICghYXBtX3N1c3BlbmRlZCkKKwkJYXBtX3F1ZXVlX2V2ZW50KEFQTV9VU0VSX1NVU1BFTkQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW50IF9faW5pdCBocDZ4MF9hcG1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlyZXQgPSByZXF1ZXN0X2lycShIUDY4MF9CVE5fSVJRLCBocDZ4MF9hcG1faW50ZXJydXB0LAorCQkJICBTQV9JTlRFUlJVUFQsIE1PRE5BTUUsIDApOworCWlmICh1bmxpa2VseShyZXQgPCAwKSkgeworCQlwcmludGsoS0VSTl9FUlIgTU9ETkFNRSAiOiBJUlEgJWQgcmVxdWVzdCBmYWlsZWRcbiIsCisJCSAgICAgICBIUDY4MF9CVE5fSVJRKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlhcG1fZ2V0X2luZm8gPSBocDZ4MF9hcG1fZ2V0X2luZm87CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgaHA2eDBfYXBtX2V4aXQodm9pZCkKK3sKKwlmcmVlX2lycShIUDY4MF9CVE5fSVJRLCAwKTsKKwlhcG1fZ2V0X2luZm8gPSAwOworfQorCittb2R1bGVfaW5pdChocDZ4MF9hcG1faW5pdCk7Cittb2R1bGVfZXhpdChocDZ4MF9hcG1fZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIkFkcml5IFNrdWx5c2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiaHA2eHggQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvaHA2eHgvcG0uYyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3BtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGU1MDFiYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3BtLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIGhwNngwIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZXMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgQW5kcml5IFNrdWx5c2ggPGFza3Vsc3loQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KKyNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KKyNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgorI2luY2x1ZGUgPGFzbS9wbS5oPgorCisjZGVmaW5lIFNUQkNSCQkweGZmZmZmZjgyCisjZGVmaW5lIFNUQkNSMgkJMHhmZmZmZmY4OAorCitzdGF0aWMgaW50IGhwNngwX3BtX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKK3sKKwl1OCBzdGJjciwgc3RiY3IyOworI2lmZGVmIENPTkZJR19IRDY0NDYxX0VOQUJMRVIKKwl1OCBzY3I7CisJdTE2IGhkNjQ0NjFfc3RiY3I7CisjZW5kaWYKKworCWlmIChzdGF0ZSAhPSBQTV9TVVNQRU5EX01FTSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKyNpZmRlZiBDT05GSUdfSEQ2NDQ2MV9FTkFCTEVSCisJb3V0YigwLCBIRDY0NDYxX1BDQzFDU0NJRVIpOworCisJc2NyID0gaW5iKEhENjQ0NjFfUENDMVNDUik7CisJc2NyIHw9IEhENjQ0NjFfUENDU0NSX1ZDQzE7CisJb3V0YihzY3IsIEhENjQ0NjFfUENDMVNDUik7CisKKwloZDY0NDYxX3N0YmNyID0gaW53KEhENjQ0NjFfU1RCQ1IpOworCWhkNjQ0NjFfc3RiY3IgfD0gSEQ2NDQ2MV9TVEJDUl9TUEMxU1Q7CisJb3V0dyhoZDY0NDYxX3N0YmNyLCBIRDY0NDYxX1NUQkNSKTsKKyNlbmRpZgorCisJY3RybF9vdXRiKDB4MWYsIERBQ1IpOworCisJc3RiY3IgPSBjdHJsX2luYihTVEJDUik7CisJY3RybF9vdXRiKDB4MDEsIFNUQkNSKTsKKworCXN0YmNyMiA9IGN0cmxfaW5iKFNUQkNSMik7CisJY3RybF9vdXRiKDB4N2YgLCBTVEJDUjIpOworCisJb3V0dygweGYwN2YsIEhENjQ0NjFfU0NQVUNSKTsKKworCXBtX2VudGVyKCk7CisKKwlvdXR3KDAsIEhENjQ0NjFfU0NQVUNSKTsKKwljdHJsX291dGIoc3RiY3IsIFNUQkNSKTsKKwljdHJsX291dGIoc3RiY3IyLCBTVEJDUjIpOworCisjaWZkZWYgQ09ORklHX0hENjQ0NjFfRU5BQkxFUgorCWhkNjQ0NjFfc3RiY3IgPSBpbncoSEQ2NDQ2MV9TVEJDUik7CisJaGQ2NDQ2MV9zdGJjciAmPSB+SEQ2NDQ2MV9TVEJDUl9TUEMxU1Q7CisJb3V0dyhoZDY0NDYxX3N0YmNyLCBIRDY0NDYxX1NUQkNSKTsKKworCW91dGIoMHg0YywgSEQ2NDQ2MV9QQ0MxQ1NDSUVSKTsKKwlvdXRiKDB4MDAsIEhENjQ0NjFfUENDMUNTQ1IpOworI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNldCB0byBQTV9ESVNLX0ZJUk1XQVJFIHNvIHdlIGNhbiBxdWlja2x5IHZldG8gc3VzcGVuZC10by1kaXNrLgorICovCitzdGF0aWMgc3RydWN0IHBtX29wcyBocDZ4MF9wbV9vcHMgPSB7CisJLnBtX2Rpc2tfbW9kZQk9IFBNX0RJU0tfRklSTVdBUkUsCisJLmVudGVyCQk9IGhwNngwX3BtX2VudGVyLAorfTsKKworc3RhdGljIGludCBfX2luaXQgaHA2eDBfcG1faW5pdCh2b2lkKQoreworCXBtX3NldF9vcHMoJmhwNngwX3BtX29wcyk7CisJcmV0dXJuIDA7Cit9CisKK2xhdGVfaW5pdGNhbGwoaHA2eDBfcG1faW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbV93YWtldXAuUyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3BtX3dha2V1cC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1ZTliZjAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9wbV93YWtldXAuUwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA2IEFuZHJpeSBTa3VseXNoIDxhc2t1bHN5aEBnbWFpbC5jb20+CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2NwdS9tbXVfY29udGV4dC5oPgorCisjZGVmaW5lIGswCXIwCisjZGVmaW5lIGsxCXIxCisjZGVmaW5lIGsyCXIyCisjZGVmaW5lIGszCXIzCisjZGVmaW5lIGs0CXI0CisKKy8qCisgKiBLZXJuZWwgbW9kZSByZWdpc3RlciB1c2FnZToKKyAqCWswCXNjcmF0Y2gKKyAqCWsxCXNjcmF0Y2gKKyAqCWsyCXNjcmF0Y2ggKEV4Y2VwdGlvbiBjb2RlKQorICoJazMJc2NyYXRjaCAoUmV0dXJuIGFkZHJlc3MpCisgKglrNAlzY3JhdGNoCisgKglrNQlyZXNlcnZlZAorICoJazYJR2xvYmFsIEludGVycnVwdCBNYXNrICgwLS0xNSA8PCA0KQorICoJazcJQ1VSUkVOVF9USFJFQURfSU5GTyAocG9pbnRlciB0byBjdXJyZW50IHRocmVhZCBpbmZvKQorICovCisKK0VOVFJZKHdha2V1cF9zdGFydCkKKyEgY2xlYXIgU1RCWSBiaXQKKwltb3YJIy0xMjYsIGsyCisgICAJYW5kCSMxMjcsIGswCisJbW92LmIJazAsIEBrMgorISBlbmFibGUgcmVmcmVzaAorCW1vdi5sCTVmLCBrMQorCW1vdi53CTZmLCBrMAorICAJbW92LncJazAsIEBrMQorISBqdW1wIHRvIGhhbmRsZXIKKwltb3YubAkyZiwgazIKKwltb3YubAkzZiwgazMKKwltb3YubAlAazIsIGsyCisKKwltb3YubAk0ZiwgazEKKwlqbXAJQGsxCisJbm9wCisKKwkuYWxpZ24JMgorMToJLmxvbmcJRVhQRVZUCisyOgkubG9uZwlJTlRFVlQKKzM6CS5sb25nCXJldF9mcm9tX2lycQorNDoJLmxvbmcJaGFuZGxlX2V4Y2VwdGlvbgorNToJLmxvbmcJMHhmZmZmZmY2OAorNjoJLndvcmQJMHgwNTI0CisKK0VOVFJZKHdha2V1cF9lbmQpCisJbm9wCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvaHA2eHgvc2V0dXAuYwppbmRleCA3MWYzMTU2Li42MGFiMTdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ocDZ4eC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2hwNnh4L3NldHVwLmMKQEAgLTgsMjIgKzgsMjIgQEAKICAqCiAgKiBTZXR1cCBjb2RlIGZvciBhbiBIUDY4MCAgKGludGVybmFsIHBlcmlwaGVyaWFscyBvbmx5KQogICovCi0KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaHA2eHgvaHA2eHguaD4KICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIkhQNnh4IjsKLX0KKyNkZWZpbmUJU0NQQ1IJMHhhNDAwMDExNgorI2RlZmluZSBTQ1BEUgkweGE0MDAwMTM2CiAKLWludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBocDZ4eF9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCXU4IHY4OwogCXUxNiB2OworCiAJdiA9IGludyhIRDY0NDYxX1NUQkNSKTsKIAl2IHw9IEhENjQ0NjFfU1RCQ1JfU1VSVFNUIHwgSEQ2NDQ2MV9TVEJDUl9TSVJTVCB8CiAJICAgIEhENjQ0NjFfU1RCQ1JfU1RNMVNUIHwgSEQ2NDQ2MV9TVEJDUl9TVE0wU1QgfApAQCAtNTAsNSArNTAsNTEgQEAKIAl2OCAmPSB+REFDUl9EQUU7CiAJY3RybF9vdXRiKHY4LERBQ1IpOwogCi0JcmV0dXJuIDA7CisJdjggPSBjdHJsX2luYihTQ1BEUik7CisJdjggfD0gU0NQRFJfVFNfU0NBTl9YIHwgU0NQRFJfVFNfU0NBTl9ZOworCXY4ICY9IH5TQ1BEUl9UU19TQ0FOX0VOQUJMRTsKKwljdHJsX291dGIodjgsIFNDUERSKTsKKworCXYgPSBjdHJsX2ludyhTQ1BDUik7CisJdiAmPSB+U0NQQ1JfVFNfTUFTSzsKKwl2IHw9IFNDUENSX1RTX0VOQUJMRTsKKwljdHJsX291dHcodiwgU0NQQ1IpOwogfQorCisvKgorICogWFhYOiBUaGlzIGlzIHN0dXBpZCwgd2Ugc2hvdWxkIGhhdmUgYSBnZW5lcmljIG1hY2hpbmUgdmVjdG9yIGZvciB0aGUgY2NoaXBzCisgKiBhbmQganVzdCB3cmFwIHRoZSBwbGF0Zm9ybSBzZXR1cCBjb2RlIGluIHRvIHRoaXMsIGFzIGl0J3MgdGhlIG9ubHkgdGhpbmcKKyAqIHRoYXQgZW5kcyB1cCBiZWluZyBkaWZmZXJlbnQuCisgKi8KK3N0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9ocDZ4eCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZSA9ICJocDZ4eCIsCisJLm12X3NldHVwID0gaHA2eHhfc2V0dXAsCisJLm12X25yX2lycXMgPSBIRDY0NDYxX0lSUUJBU0UgKyBIRDY0NDYxX0lSUV9OVU0sCisKKwkubXZfaW5iID0gaGQ2NDQ2MV9pbmIsCisJLm12X2ludyA9IGhkNjQ0NjFfaW53LAorCS5tdl9pbmwgPSBoZDY0NDYxX2lubCwKKwkubXZfb3V0YiA9IGhkNjQ0NjFfb3V0YiwKKwkubXZfb3V0dyA9IGhkNjQ0NjFfb3V0dywKKwkubXZfb3V0bCA9IGhkNjQ0NjFfb3V0bCwKKworCS5tdl9pbmJfcCA9IGhkNjQ0NjFfaW5iX3AsCisJLm12X2lud19wID0gaGQ2NDQ2MV9pbncsCisJLm12X2lubF9wID0gaGQ2NDQ2MV9pbmwsCisJLm12X291dGJfcCA9IGhkNjQ0NjFfb3V0Yl9wLAorCS5tdl9vdXR3X3AgPSBoZDY0NDYxX291dHcsCisJLm12X291dGxfcCA9IGhkNjQ0NjFfb3V0bCwKKworCS5tdl9pbnNiID0gaGQ2NDQ2MV9pbnNiLAorCS5tdl9pbnN3ID0gaGQ2NDQ2MV9pbnN3LAorCS5tdl9pbnNsID0gaGQ2NDQ2MV9pbnNsLAorCS5tdl9vdXRzYiA9IGhkNjQ0NjFfb3V0c2IsCisJLm12X291dHN3ID0gaGQ2NDQ2MV9vdXRzdywKKwkubXZfb3V0c2wgPSBoZDY0NDYxX291dHNsLAorCisJLm12X3JlYWR3ID0gaGQ2NDQ2MV9yZWFkdywKKwkubXZfd3JpdGV3ID0gaGQ2NDQ2MV93cml0ZXcsCisKKwkubXZfaXJxX2RlbXV4ID0gaGQ2NDQ2MV9pcnFfZGVtdXgsCit9OworQUxJQVNfTVYoaHA2eHgpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWU0YmViCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9NYWtlZmlsZQpAQCAtMCwwICsxLDUgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIEktTyBEQVRBIERFVklDRSwgSU5DLiAiTEFORElTSyBTZXJpZXMiCisjCisKK29iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8gcnRjLm8gbGFuZGlza19wd2IubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9pby5jIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9pby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyNDk4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lvLmMKQEAgLTAsMCArMSwyNTAgQEAKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lvLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIElhbiBkYSBTaWx2YSwgSmVyZW15IFNpZWdlbAorICogQmFzZWQgbGFyZ2VseSBvbiBpb19zZS5jLgorICoKKyAqIEkvTyByb3V0aW5lIGZvciBJLU8gRGF0YSBEZXZpY2UsIEluYy4gTEFORElTSy4KKyAqCisgKiBJbml0aWFsIHZlcnNpb24gb25seSB0byBzdXBwb3J0IExBTiBhY2Nlc3M7IHNvbWUKKyAqIHBsYWNlaG9sZGVyIGNvZGUgZnJvbSBpb19sYW5kaXNrLmMgbGVmdCBpbiB3aXRoIHRoZQorICogZXhwZWN0YXRpb24gb2YgbGF0ZXIgU3VwZXJJTyBhbmQgUENNQ0lBIGFjY2Vzcy4KKyAqLworLyoKKyAqIG1vZGlmZWQgYnkga29naWlkZW5hCisgKiAyMDA1LjAzLjAzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9sYW5kaXNrL2lvZGF0YV9sYW5kaXNrLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitleHRlcm4gdm9pZCAqYXJlYTVfaW9fYmFzZTsJLyogQXJlYSA1IEkvTyBCYXNlIGFkZHJlc3MgKi8KK2V4dGVybiB2b2lkICphcmVhNl9pb19iYXNlOwkvKiBBcmVhIDYgSS9PIEJhc2UgYWRkcmVzcyAqLworCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG9ydDJhZHIodW5zaWduZWQgaW50IHBvcnQpCit7CisJaWYgKCgweDFmMCA8PSBwb3J0ICYmIHBvcnQgPCAweDFmOCkgfHwgcG9ydCA9PSAweDNmNikKKwkJaWYgKHBvcnQgPT0gMHgzZjYpCisJCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWFyZWE1X2lvX2Jhc2UgKyAweDJjKTsKKwkJZWxzZQorCQkJcmV0dXJuICgodW5zaWduZWQgbG9uZylhcmVhNV9pb19iYXNlICsgUEFfUElERV9PRkZTRVQgKworCQkJCSgocG9ydCAtIDB4MWYwKSA8PCAxKSk7CisJZWxzZSBpZiAoKDB4MTcwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MTc4KSB8fCBwb3J0ID09IDB4Mzc2KQorCQlpZiAocG9ydCA9PSAweDM3NikKKwkJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpYXJlYTZfaW9fYmFzZSArIDB4MmMpOworCQllbHNlCisJCQlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKWFyZWE2X2lvX2Jhc2UgKyBQQV9TSURFX09GRlNFVCArCisJCQkJKChwb3J0IC0gMHgxNzApIDw8IDEpKTsKKwllbHNlCisJCW1heWJlYmFkaW8oKHVuc2lnbmVkIGxvbmcpcG9ydCk7CisKKwlyZXR1cm4gcG9ydDsKK30KKworLyoKKyAqIEdlbmVyYWwgb3V0bGluZTogcmVtYXAgcmVhbGx5IGxvdyBzdHVmZiBbZXZlbnR1YWxseV0gdG8gU3VwZXJJTywKKyAqIHN0dWZmIGluIFBDSSBJTyBzcGFjZSAoYXQgb3IgYWJvdmUgd2luZG93IGF0IHBjaS5oOlBDSUJJT1NfTUlOX0lPKQorICogaXMgbWFwcGVkIHRocm91Z2ggdGhlIFBDSSBJTyB3aW5kb3cuICBTdHVmZiB3aXRoIGhpZ2ggYml0cyAoUFhTRUcpCisgKiBzaG91bGQgYmUgd2F5IGJleW9uZCB0aGUgd2luZG93LCBhbmQgaXMgdXNlZCAgdy9vIHRyYW5zbGF0aW9uIGZvcgorICogY29tcGF0aWJpbGl0eS4KKyAqLwordTggbGFuZGlza19pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChQWFNFRyhwb3J0KSkKKwkJcmV0dXJuIGN0cmxfaW5iKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCXJldHVybiBjdHJsX2luYihwY2lfaW9hZGRyKHBvcnQpKTsKKworCXJldHVybiBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOworfQorCit1OCBsYW5kaXNrX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1OCB2OworCisJaWYgKFBYU0VHKHBvcnQpKQorCQl2ID0gY3RybF9pbmIocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJdiA9IGN0cmxfaW5iKHBjaV9pb2FkZHIocG9ydCkpOworCWVsc2UKKwkJdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7CisKKwljdHJsX2RlbGF5KCk7CisKKwlyZXR1cm4gdjsKK30KKwordTE2IGxhbmRpc2tfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAoUFhTRUcocG9ydCkpCisJCXJldHVybiBjdHJsX2ludyhwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQlyZXR1cm4gY3RybF9pbncocGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3UzMiBsYW5kaXNrX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKFBYU0VHKHBvcnQpKQorCQlyZXR1cm4gY3RybF9pbmwocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJcmV0dXJuIGN0cmxfaW5sKHBjaV9pb2FkZHIocG9ydCkpOworCWVsc2UKKwkJbWF5YmViYWRpbyhwb3J0KTsKKworCXJldHVybiAwOworfQorCit2b2lkIGxhbmRpc2tfb3V0Yih1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChQWFNFRyhwb3J0KSkKKwkJY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQljdHJsX291dGIodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOworCWVsc2UKKwkJY3RybF9vdXR3KHZhbHVlLCBwb3J0MmFkcihwb3J0KSk7Cit9CisKK3ZvaWQgbGFuZGlza19vdXRiX3AodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAoUFhTRUcocG9ydCkpCisJCWN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJY3RybF9vdXRiKHZhbHVlLCBwY2lfaW9hZGRyKHBvcnQpKTsKKwllbHNlCisJCWN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOworCWN0cmxfZGVsYXkoKTsKK30KKwordm9pZCBsYW5kaXNrX291dHcodTE2IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKFBYU0VHKHBvcnQpKQorCQljdHJsX291dHcodmFsdWUsIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCWN0cmxfb3V0dyh2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIGxhbmRpc2tfb3V0bCh1MzIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAoUFhTRUcocG9ydCkpCisJCWN0cmxfb3V0bCh2YWx1ZSwgcG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJY3RybF9vdXRsKHZhbHVlLCBwY2lfaW9hZGRyKHBvcnQpKTsKKwllbHNlCisJCW1heWJlYmFkaW8ocG9ydCk7Cit9CisKK3ZvaWQgbGFuZGlza19pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworICAgICAgICB2b2xhdGlsZSB1MTYgKnA7CisgICAgICAgIHU4ICpidWYgPSBkc3Q7CisKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAqYnVmKysgPSAqKHZvbGF0aWxlIHU4ICopcG9ydDsKKwl9IGVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpIHsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1OCAqYnAgPSAodm9sYXRpbGUgdTggKilwY2lfaW9hZGRyKHBvcnQpOworCisgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAqYnVmKysgPSAqYnA7CisJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworICAgICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gKnAgJiAweGZmOworCX0KK30KKwordm9pZCBsYW5kaXNrX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgICAgIHZvbGF0aWxlIHUxNiAqcDsKKyAgICAgICAgdTE2ICpidWYgPSBkc3Q7CisKKwlpZiAoUFhTRUcocG9ydCkpCisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CisJZWxzZQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCXdoaWxlIChjb3VudC0tKQorCQkqYnVmKysgPSAqcDsKK30KKwordm9pZCBsYW5kaXNrX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgICAgIHUzMiAqYnVmID0gZHN0OworCisJaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpIHsKKyAgICAgICAgICAgICAgICB2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgKmJ1ZisrID0gKnA7CisJfSBlbHNlCisJCW1heWJlYmFkaW8ocG9ydCk7Cit9CisKK3ZvaWQgbGFuZGlza19vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKyAgICAgICAgdm9sYXRpbGUgdTE2ICpwOworICAgICAgICBjb25zdCB1OCAqYnVmID0gc3JjOworCisJaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIHdoaWxlIChjb3VudC0tKQorICAgICAgICAgICAgICAgICAgICAgICAgY3RybF9vdXRiKCpidWYrKywgcG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkgeworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHU4ICpicCA9ICh2b2xhdGlsZSB1OCAqKXBjaV9pb2FkZHIocG9ydCk7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoY291bnQtLSkKKyAgICAgICAgICAgICAgICAgICAgICAgICpicCA9ICpidWYrKzsKKwl9IGVsc2UgeworICAgICAgICAgICAgICAgIHAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDJhZHIocG9ydCk7CisgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAqcCA9ICpidWYrKzsKKwl9Cit9CisKK3ZvaWQgbGFuZGlza19vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKyAgICAgICAgdm9sYXRpbGUgdTE2ICpwOworICAgICAgICBjb25zdCB1MTYgKmJ1ZiA9IHNyYzsKKworCWlmIChQWFNFRyhwb3J0KSkKKyAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICBwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CisJZWxzZQorICAgICAgICAgICAgICAgIHAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDJhZHIocG9ydCk7CisKKyAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgKnAgPSAqYnVmKys7Cit9CisKK3ZvaWQgbGFuZGlza19vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKyAgICAgICAgY29uc3QgdTMyICpidWYgPSBzcmM7CisKKwlpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkgeworICAgICAgICAgICAgICAgIHZvbGF0aWxlIHUzMiAqcCA9ICh2b2xhdGlsZSB1MzIgKilwY2lfaW9hZGRyKHBvcnQpOworCisgICAgICAgICAgICAgICAgd2hpbGUgKGNvdW50LS0pCisgICAgICAgICAgICAgICAgICAgICAgICAqcCA9ICpidWYrKzsKKwl9IGVsc2UKKwkJbWF5YmViYWRpbyhwb3J0KTsKK30KKwordm9pZCBfX2lvbWVtICpsYW5kaXNrX2lvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKK3sKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCBfX2lvbWVtICopcG9ydDsKKyAgICAgICAgZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgX19pb21lbSAqKXBjaV9pb2FkZHIocG9ydCk7CisKKyAgICAgICAgcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0MmFkcihwb3J0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwMDZkNjQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lycS5jCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBhcmNoL3NoL2JvYXJkcy9sYW5kaXNrL2lycS5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxICBJYW4gZGEgU2lsdmEsIEplcmVteSBTaWVnZWwKKyAqIEJhc2VkIGxhcmdlbHkgb24gaW9fc2UuYy4KKyAqCisgKiBJL08gcm91dGluZSBmb3IgSS1PIERhdGEgRGV2aWNlLCBJbmMuIExBTkRJU0suCisgKgorICogSW5pdGlhbCB2ZXJzaW9uIG9ubHkgdG8gc3VwcG9ydCBMQU4gYWNjZXNzOyBzb21lCisgKiBwbGFjZWhvbGRlciBjb2RlIGZyb20gaW9fbGFuZGlzay5jIGxlZnQgaW4gd2l0aCB0aGUKKyAqIGV4cGVjdGF0aW9uIG9mIGxhdGVyIFN1cGVySU8gYW5kIFBDTUNJQSBhY2Nlc3MuCisgKi8KKy8qCisgKiBtb2RpZmllZCBieSBrb2dpaWRlbmEKKyAqIDIwMDUuMDMuMDMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vbGFuZGlzay9pb2RhdGFfbGFuZGlzay5oPgorCitzdGF0aWMgdm9pZCBlbmFibGVfbGFuZGlza19pcnEodW5zaWduZWQgaW50IGlycSk7CitzdGF0aWMgdm9pZCBkaXNhYmxlX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCisvKiBzaHV0ZG93biBpcyBzYW1lIGFzICJkaXNhYmxlIiAqLworI2RlZmluZSBzaHV0ZG93bl9sYW5kaXNrX2lycSBkaXNhYmxlX2xhbmRpc2tfaXJxCisKK3N0YXRpYyB2b2lkIGFja19sYW5kaXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIGVuZF9sYW5kaXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKKworc3RhdGljIHVuc2lnbmVkIGludCBzdGFydHVwX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZW5hYmxlX2xhbmRpc2tfaXJxKGlycSk7CisJcmV0dXJuIDA7CQkvKiBuZXZlciBhbnl0aGluZyBwZW5kaW5nICovCit9CisKK3N0YXRpYyB2b2lkIGRpc2FibGVfbGFuZGlza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBjaGFyIG1hc2sgPSAweGZmIF4gKDB4MDEgPDwgKGlycSAtIDUpKTsKKworCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KKwl2YWwgPSBjdHJsX2luYihQQV9JTUFTSyk7CisJdmFsICY9IG1hc2s7CisJY3RybF9vdXRiKHZhbCwgUEFfSU1BU0spOworfQorCitzdGF0aWMgdm9pZCBlbmFibGVfbGFuZGlza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBjaGFyIHZhbDsKKwl1bnNpZ25lZCBjaGFyIHZhbHVlID0gKDB4MDEgPDwgKGlycSAtIDUpKTsKKworCS8qIFNldCBwcmlvcml0eSBpbiBJUFIgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLworCXZhbCA9IGN0cmxfaW5iKFBBX0lNQVNLKTsKKwl2YWwgfD0gdmFsdWU7CisJY3RybF9vdXRiKHZhbCwgUEFfSU1BU0spOworfQorCitzdGF0aWMgdm9pZCBhY2tfbGFuZGlza19pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlkaXNhYmxlX2xhbmRpc2tfaXJxKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuZF9sYW5kaXNrX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCisJCWVuYWJsZV9sYW5kaXNrX2lycShpcnEpOworfQorCitzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGxhbmRpc2tfaXJxX3R5cGUgPSB7CisJLnR5cGVuYW1lID0gIkxBTkRJU0sgSVJRIiwKKwkuc3RhcnR1cCA9IHN0YXJ0dXBfbGFuZGlza19pcnEsCisJLnNodXRkb3duID0gc2h1dGRvd25fbGFuZGlza19pcnEsCisJLmVuYWJsZSA9IGVuYWJsZV9sYW5kaXNrX2lycSwKKwkuZGlzYWJsZSA9IGRpc2FibGVfbGFuZGlza19pcnEsCisJLmFjayA9IGFja19sYW5kaXNrX2lycSwKKwkuZW5kID0gZW5kX2xhbmRpc2tfaXJxCit9OworCitzdGF0aWMgdm9pZCBtYWtlX2xhbmRpc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJmxhbmRpc2tfaXJxX3R5cGU7CisJZGlzYWJsZV9sYW5kaXNrX2lycShpcnEpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBJUlEgc2V0dGluZworICovCit2b2lkIF9faW5pdCBpbml0X2xhbmRpc2tfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSA1OyBpIDwgMTQ7IGkrKykKKwkJbWFrZV9sYW5kaXNrX2lycShpKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svbGFuZGlza19wd2IuYyBiL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svbGFuZGlza19wd2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzVjYjU3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9sYW5kaXNrX3B3Yi5jCkBAIC0wLDAgKzEsMzQ4IEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9sYW5kaXNrX3B3Yi5jIC0tIGRyaXZlciBmb3IgdGhlIFBvd2VyIGNvbnRyb2wgc3dpdGNoLgorICoKKyAqIFRoaXMgZHJpdmVyIHdpbGwgYWxzbyBzdXBwb3J0IHRoZSBJLU8gREFUQSBEZXZpY2UsIEluYy4gTEFORElTSyBCb2FyZC4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBDb3B5bGlnaHQgKEMpIDIwMDIgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogTEVEIGNvbnRyb2wgZHJpdmUgZnVuY3Rpb24gYWRkZWQgYnkga29naWlkZW5hCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvbWFqb3IuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9sYW5kaXNrL2lvZGF0YV9sYW5kaXNrLmg+CisKKyNkZWZpbmUgU0hVVERPV05fQlROX01JTk9SCTEJLyogU2h1dGRvd24gYnV0dG9uIGRldmljZSBtaW5vciBuby4gKi8KKyNkZWZpbmUgTEVEX01JTk9SCSAgICAgICAyMQkvKiBMRUQgbWlub3Igbm8uICovCisjZGVmaW5lIEJUTl9NSU5PUgkgICAgICAgMjIJLyogQlVUVE9OIG1pbm9yIG5vLiAqLworI2RlZmluZSBHSU9fTUlOT1IJICAgICAgIDQwCS8qIEdJTyBtaW5vciBuby4gKi8KKworc3RhdGljIGludCBvcGVuQ250Oworc3RhdGljIGludCBvcGVuQ250TEVEOworc3RhdGljIGludCBvcGVuQ250R2lvOworc3RhdGljIGludCBvcGVuQ250QnRuOworc3RhdGljIGludCBsYW5kaXNrX2J0bjsKK3N0YXRpYyBpbnQgbGFuZGlza19idG5jdHJscGlkOworLyoKKyAqIEZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKi8KKworc3RhdGljIGludCBnaW9faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBjbWQsCisJCSAgICAgdW5zaWduZWQgbG9uZyBhcmcpOworCitzdGF0aWMgaW50IHN3ZHJ2X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IG1pbm9yOworCisJbWlub3IgPSBNSU5PUihpbm9kZS0+aV9yZGV2KTsKKwlmaWxwLT5wcml2YXRlX2RhdGEgPSAodm9pZCAqKW1pbm9yOworCisJaWYgKG1pbm9yID09IFNIVVRET1dOX0JUTl9NSU5PUikgeworCQlpZiAob3BlbkNudCA+IDApIHsKKwkJCXJldHVybiAtRUFMUkVBRFk7CisJCX0gZWxzZSB7CisJCQlvcGVuQ250Kys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSBpZiAobWlub3IgPT0gTEVEX01JTk9SKSB7CisJCWlmIChvcGVuQ250TEVEID4gMCkgeworCQkJcmV0dXJuIC1FQUxSRUFEWTsKKwkJfSBlbHNlIHsKKwkJCW9wZW5DbnRMRUQrKzsKKwkJCXJldHVybiAwOworCQl9CisJfSBlbHNlIGlmIChtaW5vciA9PSBCVE5fTUlOT1IpIHsKKwkJaWYgKG9wZW5DbnRCdG4gPiAwKSB7CisJCQlyZXR1cm4gLUVBTFJFQURZOworCQl9IGVsc2UgeworCQkJb3BlbkNudEJ0bisrOworCQkJcmV0dXJuIDA7CisJCX0KKwl9IGVsc2UgaWYgKG1pbm9yID09IEdJT19NSU5PUikgeworCQlpZiAob3BlbkNudEdpbyA+IDApIHsKKwkJCXJldHVybiAtRUFMUkVBRFk7CisJCX0gZWxzZSB7CisJCQlvcGVuQ250R2lvKys7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gLUVOT0VOVDsKKworfQorCitzdGF0aWMgaW50IHN3ZHJ2X2Nsb3NlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCBtaW5vcjsKKworCW1pbm9yID0gTUlOT1IoaW5vZGUtPmlfcmRldik7CisJaWYgKG1pbm9yID09IFNIVVRET1dOX0JUTl9NSU5PUikgeworCQlvcGVuQ250LS07CisJfSBlbHNlIGlmIChtaW5vciA9PSBMRURfTUlOT1IpIHsKKwkJb3BlbkNudExFRC0tOworCX0gZWxzZSBpZiAobWlub3IgPT0gQlROX01JTk9SKSB7CisJCW9wZW5DbnRCdG4tLTsKKwl9IGVsc2UgaWYgKG1pbm9yID09IEdJT19NSU5PUikgeworCQlvcGVuQ250R2lvLS07CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN3ZHJ2X3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgKmJ1ZmYsIHNpemVfdCBjb3VudCwKKwkJICAgICAgbG9mZl90ICogcHBvcykKK3sKKwlpbnQgbWlub3I7CisJbWlub3IgPSAoaW50KShmaWxwLT5wcml2YXRlX2RhdGEpOworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCAodm9pZCAqKWJ1ZmYsIGNvdW50KSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAobWlub3IgPT0gU0hVVERPV05fQlROX01JTk9SKSB7CisJCWlmIChsYW5kaXNrX2J0biAmIDB4MTApIHsKKwkJCXB1dF91c2VyKDEsIGJ1ZmYpOworCQkJcmV0dXJuIDE7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzd2Rydl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciAqYnVmZiwgc2l6ZV90IGNvdW50LAorCQkgICAgICAgbG9mZl90ICogcHBvcykKK3sKKwlpbnQgbWlub3I7CisJbWlub3IgPSAoaW50KShmaWxwLT5wcml2YXRlX2RhdGEpOworCisJaWYgKG1pbm9yID09IFNIVVRET1dOX0JUTl9NSU5PUikgeworCQlyZXR1cm4gY291bnQ7CisJfQorCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIGlycXJldHVybl90IHN3X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWxhbmRpc2tfYnRuID0gKDB4MGZmICYgKH5jdHJsX2luYihQQV9TVEFUVVMpKSk7CisJZGlzYWJsZV9pcnEoSVJRX0JVVFRPTik7CisJZGlzYWJsZV9pcnEoSVJRX1BPV0VSKTsKKwljdHJsX291dGIoMHgwMCwgUEFfUFdSSU5UX0NMUik7CisKKwlpZiAobGFuZGlza19idG5jdHJscGlkICE9IDApIHsKKwkJa2lsbF9wcm9jKGxhbmRpc2tfYnRuY3RybHBpZCwgU0lHVVNSMSwgMSk7CisJCWxhbmRpc2tfYnRuY3RybHBpZCA9IDA7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzd2Rydl9mb3BzID0geworCS5yZWFkID0gc3dkcnZfcmVhZCwJLyogcmVhZCAqLworCS53cml0ZSA9IHN3ZHJ2X3dyaXRlLAkvKiB3cml0ZSAqLworCS5vcGVuID0gc3dkcnZfb3BlbiwJLyogb3BlbiAqLworCS5yZWxlYXNlID0gc3dkcnZfY2xvc2UsCS8qIHJlbGVhc2UgKi8KKwkuaW9jdGwgPSBnaW9faW9jdGwsCS8qIGlvY3RsICovCisKK307CisKK3N0YXRpYyBjaGFyIGJhbm5lcltdIF9faW5pdGRhdGEgPQorICAgIEtFUk5fSU5GTyAiTEFORElTSyBhbmQgVVNMLTVQIEJ1dHRvbiwgTEVEIGFuZCBHSU8gZHJpdmVyIGluaXRpYWxpemVkXG4iOworCitpbnQgX19pbml0IHN3ZHJ2X2luaXQodm9pZCkKK3sKKwlpbnQgZXJyb3I7CisKKwlwcmludGsoIiVzIiwgYmFubmVyKTsKKworCW9wZW5DbnQgPSAwOworCW9wZW5DbnRMRUQgPSAwOworCW9wZW5DbnRCdG4gPSAwOworCW9wZW5DbnRHaW8gPSAwOworCWxhbmRpc2tfYnRuID0gMDsKKwlsYW5kaXNrX2J0bmN0cmxwaWQgPSAwOworCisJaWYgKChlcnJvciA9IHJlZ2lzdGVyX2NocmRldihTSFVURE9XTl9CVE5fTUFKT1IsICJzd2RydiIsICZzd2Rydl9mb3BzKSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiQnV0dG9uLCBMRUQgYW5kIEdJTyBkcml2ZXI6Q291bGRuJ3QgcmVnaXN0ZXIgZHJpdmVyLCBlcnJvcj0lZFxuIiwKKwkJICAgICAgIGVycm9yKTsKKwkJcmV0dXJuIDE7CisJfQorCisJaWYgKHJlcXVlc3RfaXJxKElSUV9QT1dFUiwgc3dfaW50ZXJydXB0LCAwLCAiU0hVVERPV05TV0lUQ0giLCBOVUxMKSkgeworCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBnZXQgSVJRIDExLlxuIik7CisJCXJldHVybiAxOworCX0KKwlpZiAocmVxdWVzdF9pcnEoSVJRX0JVVFRPTiwgc3dfaW50ZXJydXB0LCAwLCAiVVNMLTVQIEJVVFRPTiIsIE5VTEwpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGdldCBJUlEgMTIuXG4iKTsKKwkJcmV0dXJuIDE7CisJfQorCWN0cmxfb3V0YigweDAwLCBQQV9QV1JJTlRfQ0xSKTsKKworCXJldHVybiAwOworfQorCittb2R1bGVfaW5pdChzd2Rydl9pbml0KTsKKworLyoKKyAqIGdpbyBkcml2ZXIKKyAqCisgKi8KKworI2luY2x1ZGUgPGFzbS9sYW5kaXNrL2dpby5oPgorCitzdGF0aWMgaW50IGdpb19pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlpbnQgbWlub3I7CisJdW5zaWduZWQgaW50IGRhdGEsIG1hc2s7CisJc3RhdGljIHVuc2lnbmVkIGludCBhZGRyID0gMDsKKworCW1pbm9yID0gKGludCkoZmlscC0+cHJpdmF0ZV9kYXRhKTsKKworCS8qIGFjY2VzcyBjb250cm9sICovCisJaWYgKG1pbm9yID09IEdJT19NSU5PUikgeworCQk7CisJfSBlbHNlIGlmIChtaW5vciA9PSBMRURfTUlOT1IpIHsKKwkJaWYgKCgoY21kICYgMHgwZmYpID49IDkpICYmICgoY21kICYgMHgwZmYpIDwgMjApKSB7CisJCQk7CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZSBpZiAobWlub3IgPT0gQlROX01JTk9SKSB7CisJCWlmICgoKGNtZCAmIDB4MGZmKSA+PSAyMCkgJiYgKChjbWQgJiAweDBmZikgPCAzMCkpIHsKKwkJCTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGNtZCAmIDB4MDEpIHsJLyogd3JpdGUgKi8KKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZkYXRhLCAoaW50ICopYXJnLCBzaXplb2YoaW50KSkpIHsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJfQorCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEdJT0RSVl9JT0NTR0lPU0VUQUREUjoJLyogYWRkcmVzIHNldCAqLworCQlhZGRyID0gZGF0YTsKKwkJYnJlYWs7CisKKwljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTE6CS8qIHdyaXRlIGJ5dGUgKi8KKwkJY3RybF9vdXRiKCh1bnNpZ25lZCBjaGFyKSgweDBmZiAmIGRhdGEpLCBhZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTI6CS8qIHdyaXRlIHdvcmQgKi8KKwkJaWYgKGFkZHIgJiAweDAxKSB7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQljdHJsX291dHcoKHVuc2lnbmVkIHNob3J0IGludCkoMHgwZmZmZiAmIGRhdGEpLCBhZGRyKTsKKwkJYnJlYWs7CisKKwljYXNlIEdJT0RSVl9JT0NTR0lPREFUQTQ6CS8qIHdyaXRlIGxvbmcgKi8KKwkJaWYgKGFkZHIgJiAweDAzKSB7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQljdHJsX291dGwoZGF0YSwgYWRkcik7CisJCWJyZWFrOworCisJY2FzZSBHSU9EUlZfSU9DR0dJT0RBVEExOgkvKiByZWFkIGJ5dGUgKi8KKwkJZGF0YSA9IGN0cmxfaW5iKGFkZHIpOworCQlicmVhazsKKworCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBMjoJLyogcmVhZCB3b3JkICovCisJCWlmIChhZGRyICYgMHgwMSkgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJZGF0YSA9IGN0cmxfaW53KGFkZHIpOworCQlicmVhazsKKworCWNhc2UgR0lPRFJWX0lPQ0dHSU9EQVRBNDoJLyogcmVhZCBsb25nICovCisJCWlmIChhZGRyICYgMHgwMykgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwkJZGF0YSA9IGN0cmxfaW5sKGFkZHIpOworCQlicmVhazsKKwljYXNlIEdJT0RSVl9JT0NTR0lPX0xFRDoJLyogd3JpdGUgKi8KKwkJbWFzayA9ICgoZGF0YSAmIDB4MDBmZmZmZmYpIDw8IDgpCisJCSAgICB8ICgoZGF0YSAmIDB4MDAwMGZmZmYpIDw8IDE2KQorCQkgICAgfCAoKGRhdGEgJiAweDAwMDAwMGZmKSA8PCAyNCk7CisJCWxhbmRpc2tfbGVkcGFyYW0gPSBkYXRhICYgKH5tYXNrKTsKKwkJaWYgKGxhbmRpc2tfYXJjaCA9PSAwKSB7CS8qIGFyY2ggPT0gbGFuZGlzayAqLworCQkJbGFuZGlza19sZWRwYXJhbSAmPSAweDAzMDMwMzAzOworCQkJbWFzayA9ICh+KGxhbmRpc2tfbGVkcGFyYW0gPj4gMjIpKSAmIDB4MDAwYzsKKwkJCWxhbmRpc2tfbGVkcGFyYW0gfD0gbWFzazsKKwkJfSBlbHNlIHsJICAgICAgICAgICAgICAgIC8qIGFyY2ggPT0gdXNsLTVwICovCisJCQltYXNrID0gKGxhbmRpc2tfbGVkcGFyYW0gPj4gMjQpICYgMHgwMDAxOworCQkJbGFuZGlza19sZWRwYXJhbSB8PSBtYXNrOworCQkJbGFuZGlza19sZWRwYXJhbSAmPSAweDAwN2Y3ZjdmOworCQl9CisJCWxhbmRpc2tfbGVkcGFyYW0gfD0gMHg4MDsKKwkJYnJlYWs7CisJY2FzZSBHSU9EUlZfSU9DR0dJT19MRUQ6CS8qIHJlYWQgKi8KKwkJZGF0YSA9IGxhbmRpc2tfbGVkcGFyYW07CisJCWlmIChsYW5kaXNrX2FyY2ggPT0gMCkgewkvKiBhcmNoID09IGxhbmRpc2sgKi8KKwkJCWRhdGEgJj0gMHgwMzAzMDMwMzsKKwkJfSBlbHNlIHsJICAgICAgICAgICAgICAgIC8qIGFyY2ggPT0gdXNsLTVwICovCisJCQk7CisJCX0KKwkJZGF0YSAmPSAofjB4MDgwKTsKKwkJYnJlYWs7CisJY2FzZSBHSU9EUlZfSU9DU0dJT19CVVpaRVI6CS8qIHdyaXRlICovCisJCWxhbmRpc2tfYnV6emVycGFyYW0gPSBkYXRhOworCQlsYW5kaXNrX2xlZHBhcmFtIHw9IDB4ODA7CisJCWJyZWFrOworCWNhc2UgR0lPRFJWX0lPQ0dHSU9fTEFORElTSzoJLyogcmVhZCAqLworCQlkYXRhID0gbGFuZGlza19hcmNoICYgMHgwMTsKKwkJYnJlYWs7CisJY2FzZSBHSU9EUlZfSU9DR0dJT19CVE46CS8qIHJlYWQgKi8KKwkJZGF0YSA9ICgweDBmZiAmIGN0cmxfaW5iKFBBX1BXUklOVF9DTFIpKTsKKwkJZGF0YSA8PD0gODsKKwkJZGF0YSB8PSAoMHgwZmYgJiBjdHJsX2luYihQQV9JTUFTSykpOworCQlkYXRhIDw8PSA4OworCQlkYXRhIHw9ICgweDBmZiAmIGxhbmRpc2tfYnRuKTsKKwkJZGF0YSA8PD0gODsKKwkJZGF0YSB8PSAoMHgwZmYgJiAofmN0cmxfaW5iKFBBX1NUQVRVUykpKTsKKwkJYnJlYWs7CisJY2FzZSBHSU9EUlZfSU9DU0dJT19CVE5QSUQ6CS8qIHdyaXRlICovCisJCWxhbmRpc2tfYnRuY3RybHBpZCA9IGRhdGE7CisJCWxhbmRpc2tfYnRuID0gMDsKKwkJaWYgKGlycV9kZXNjW0lSUV9CVVRUT05dLmRlcHRoKSB7CisJCQllbmFibGVfaXJxKElSUV9CVVRUT04pOworCQl9CisJCWlmIChpcnFfZGVzY1tJUlFfUE9XRVJdLmRlcHRoKSB7CisJCQllbmFibGVfaXJxKElSUV9QT1dFUik7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBHSU9EUlZfSU9DR0dJT19CVE5QSUQ6CS8qIHJlYWQgKi8KKwkJZGF0YSA9IGxhbmRpc2tfYnRuY3RybHBpZDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FRkFVTFQ7CisJCWJyZWFrOworCX0KKworCWlmICgoY21kICYgMHgwMSkgPT0gMCkgewkvKiByZWFkICovCisJCWlmIChjb3B5X3RvX3VzZXIoKGludCAqKWFyZywgJmRhdGEsIHNpemVvZihpbnQpKSkgeworCQkJcmV0dXJuIC1FRkFVTFQ7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9sYW5kaXNrL3J0Yy5jIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9ydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWJhNzI2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9ydGMuYwpAQCAtMCwwICsxLDkzIEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9ydGMuYyAtLSAgUlRDIHN1cHBvcnQKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDAwICBQaGlsaXBwIFJ1bXBmIDxwcnVtcGZAdHV4Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKKyAqLworLyoKKyAqIG1vZGlmZWQgYnkga29naWlkZW5hCisgKiAyMDA1LjA5LjE2CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgorCitleHRlcm4gc3BpbmxvY2tfdCBydGNfbG9jazsKKworZXh0ZXJuIHZvaWQKK3JzNWMzMTNfc2V0X2Ntb3NfdGltZSh1bnNpZ25lZCBpbnQgQkNEX3lyLCB1bnNpZ25lZCBpbnQgQkNEX21vbiwKKwkJICAgICAgdW5zaWduZWQgaW50IEJDRF9kYXksIHVuc2lnbmVkIGludCBCQ0RfaHIsCisJCSAgICAgIHVuc2lnbmVkIGludCBCQ0RfbWluLCB1bnNpZ25lZCBpbnQgQkNEX3NlYyk7CisKK2V4dGVybiB1bnNpZ25lZCBsb25nCityczVjMzEzX2dldF9jbW9zX3RpbWUodW5zaWduZWQgaW50ICpCQ0RfeXIsIHVuc2lnbmVkIGludCAqQkNEX21vbiwKKwkJICAgICAgdW5zaWduZWQgaW50ICpCQ0RfZGF5LCB1bnNpZ25lZCBpbnQgKkJDRF9ociwKKwkJICAgICAgdW5zaWduZWQgaW50ICpCQ0RfbWluLCB1bnNpZ25lZCBpbnQgKkJDRF9zZWMpOworCit2b2lkIGxhbmRpc2tfcnRjX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXNwZWMgKnR2KQoreworCXVuc2lnbmVkIGludCBCQ0RfeXIsIEJDRF9tb24sIEJDRF9kYXksIEJDRF9ociwgQkNEX21pbiwgQkNEX3NlYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnJ0Y19sb2NrLCBmbGFncyk7CisJdHYtPnR2X3NlYyA9IHJzNWMzMTNfZ2V0X2Ntb3NfdGltZQorCSAgICAoJkJDRF95ciwgJkJDRF9tb24sICZCQ0RfZGF5LCAmQkNEX2hyLCAmQkNEX21pbiwgJkJDRF9zZWMpOworCXR2LT50dl9uc2VjID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZydGNfbG9jaywgZmxhZ3MpOworfQorCitpbnQgbGFuZGlza19ydGNfc2V0dGltZW9mZGF5KGNvbnN0IHRpbWVfdCBzZWNzKQoreworCWludCByZXR2YWwgPSAwOworCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBub3d0aW1lID0gc2VjczsKKwl1bnNpZ25lZCBpbnQgQkNEX3lyLCBCQ0RfbW9uLCBCQ0RfZGF5LCBCQ0RfaHIsIEJDRF9taW4sIEJDRF9zZWM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnRjX2xvY2ssIGZsYWdzKTsKKworCXJzNWMzMTNfZ2V0X2Ntb3NfdGltZQorCSAgKCZCQ0RfeXIsICZCQ0RfbW9uLCAmQkNEX2RheSwgJkJDRF9ociwgJkJDRF9taW4sICZCQ0Rfc2VjKTsKKwljbW9zX21pbnV0ZXMgPSBCQ0RfbWluOworCUJDRF9UT19CSU4oY21vc19taW51dGVzKTsKKworCS8qCisJICogc2luY2Ugd2UncmUgb25seSBhZGp1c3RpbmcgbWludXRlcyBhbmQgc2Vjb25kcywKKwkgKiBkb24ndCBpbnRlcmZlcmUgd2l0aCBob3VyIG92ZXJmbG93LiBUaGlzIGF2b2lkcworCSAqIG1lc3Npbmcgd2l0aCB1bmtub3duIHRpbWUgem9uZXMgYnV0IHJlcXVpcmVzIHlvdXIKKwkgKiBSVEMgbm90IHRvIGJlIG9mZiBieSBtb3JlIHRoYW4gMTUgbWludXRlcworCSAqLworCXJlYWxfc2Vjb25kcyA9IG5vd3RpbWUgJSA2MDsKKwlyZWFsX21pbnV0ZXMgPSBub3d0aW1lIC8gNjA7CisJaWYgKCgoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgKyAxNSkgLyAzMCkgJiAxKQorCQlyZWFsX21pbnV0ZXMgKz0gMzA7CS8qIGNvcnJlY3QgZm9yIGhhbGYgaG91ciB0aW1lIHpvbmUgKi8KKwlyZWFsX21pbnV0ZXMgJT0gNjA7CisKKwlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgeworCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7CisJCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKKwkJcnM1YzMxM19zZXRfY21vc190aW1lKEJDRF95ciwgQkNEX21vbiwgQkNEX2RheSwgQkNEX2hyLAorCQkJCSAgICAgIHJlYWxfbWludXRlcywgcmVhbF9zZWNvbmRzKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9XQVJOSU5HCisJCSAgICAgICAic2V0X3J0Y190aW1lOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKKwkJICAgICAgIGNtb3NfbWludXRlcywgcmVhbF9taW51dGVzKTsKKwkJcmV0dmFsID0gLTE7CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnRjX2xvY2ssIGZsYWdzKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCit2b2lkIGxhbmRpc2tfdGltZV9pbml0KHZvaWQpCit7CisJcnRjX3NoX2dldF90aW1lID0gbGFuZGlza19ydGNfZ2V0dGltZW9mZGF5OworCXJ0Y19zaF9zZXRfdGltZSA9IGxhbmRpc2tfcnRjX3NldHRpbWVvZmRheTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL2xhbmRpc2svc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjdiOWUwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9zZXR1cC5jCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvbGFuZGlzay9zZXR1cC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAwIEthenVtb3RvIEtvamltYQorICogQ29weXJpZ2h0IChDKSAyMDAyIFBhdWwgTXVuZHQKKyAqCisgKiBJLU8gREFUQSBEZXZpY2UsIEluYy4gTEFORElTSyBTdXBwb3J0LgorICoKKyAqIE1vZGlmaWVkIGZvciBMQU5ESVNLIGJ5CisgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KKyAqCisgKiBtb2RpZmVkIGJ5IGtvZ2lpZGVuYQorICogMjAwNS4wOS4xNgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vbGFuZGlzay9pb2RhdGFfbGFuZGlzay5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCit2b2lkIGxhbmRpc2tfdGltZV9pbml0KHZvaWQpOwordm9pZCBpbml0X2xhbmRpc2tfSVJRKHZvaWQpOworCitpbnQgbGFuZGlza19sZWRwYXJhbTsKK2ludCBsYW5kaXNrX2J1enplcnBhcmFtOworaW50IGxhbmRpc2tfYXJjaDsKKworLyogY3ljbGUgdGhlIGxlZCdzIGluIHRoZSBjbGFzaWMga25pZ2h0cmlkZXIvc3VuIHBhdHRlcm4gKi8KK3N0YXRpYyB2b2lkIGhlYXJ0YmVhdF9sYW5kaXNrKHZvaWQpCit7CisJc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBibGluayA9IDB4MDAsIHBlcmlvZCA9IDI1OworICAgICAgICB2b2xhdGlsZSB1OCAqcCA9ICh2b2xhdGlsZSB1OCAqKVBBX0xFRDsKKwljaGFyIGRhdGE7CisKKyAgICAgICAgaWYgKChsYW5kaXNrX2xlZHBhcmFtICYgMHgwODApID09IDApCisJCXJldHVybjsKKworCWNudCArPSAxOworCisgICAgICAgIGlmIChjbnQgPCBwZXJpb2QpCisJCXJldHVybjsKKworCWNudCA9IDA7CisJYmxpbmsrKzsKKworCWRhdGEgPSAoYmxpbmsgJiAweDAxKSA/IChsYW5kaXNrX2xlZHBhcmFtID4+IDE2KSA6IDA7CisJZGF0YSB8PSAoYmxpbmsgJiAweDAyKSA/IChsYW5kaXNrX2xlZHBhcmFtID4+IDgpIDogMDsKKwlkYXRhIHw9IGxhbmRpc2tfbGVkcGFyYW07CisKKwkvKiBidXp6ZXIgKi8KKwlpZiAobGFuZGlza19idXp6ZXJwYXJhbSAmIDB4MSkgeworCQlkYXRhIHw9IDB4ODA7CisJfSBlbHNlIHsKKwkJZGF0YSAmPSAweDdmOworCX0KKwkqcCA9IGRhdGE7CisKKyAgICAgICAgaWYgKCgobGFuZGlza19sZWRwYXJhbSAmIDB4MDA3ZjdmMDApID09IDApICYmCisgICAgICAgICAgICAgKGxhbmRpc2tfYnV6emVycGFyYW0gPT0gMCkpCisJCWxhbmRpc2tfbGVkcGFyYW0gJj0gKH4weDAwODApOworCisJbGFuZGlza19idXp6ZXJwYXJhbSA+Pj0gMTsKK30KKworc3RhdGljIHZvaWQgbGFuZGlza19wb3dlcl9vZmYodm9pZCkKK3sKKyAgICAgICAgY3RybF9vdXRiKDB4MDEsIFBBX1NIVVRET1dOKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfdXNsNXAodm9pZCkKK3sKKyAgICAgICAgdm9sYXRpbGUgdTggKnAgPSAodm9sYXRpbGUgdTggKilQQV9MRUQ7CisgICAgICAgIHU4IHRtcDEsIHRtcDI7CisKKyAgICAgICAgdG1wMSA9ICpwOworICAgICAgICAqcCA9IDB4NDA7CisgICAgICAgIHRtcDIgPSAqcDsKKyAgICAgICAgKnAgPSB0bXAxOworCisgICAgICAgIGxhbmRpc2tfYXJjaCA9ICh0bXAyID09IDB4NDApOworICAgICAgICBpZiAobGFuZGlza19hcmNoID09IDEpIHsKKyAgICAgICAgICAgICAgICAvKiBhcmNoID09IHVzbC01cCAqLworICAgICAgICAgICAgICAgIGxhbmRpc2tfbGVkcGFyYW0gPSAweDAwMDAwMzgwOworICAgICAgICAgICAgICAgIGxhbmRpc2tfbGVkcGFyYW0gfD0gKHRtcDEgJiAweDA3Yyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyogYXJjaCA9PSBsYW5kaXNrICovCisgICAgICAgICAgICAgICAgbGFuZGlza19sZWRwYXJhbSA9IDB4MDIwMDAxODA7CisgICAgICAgICAgICAgICAgbGFuZGlza19sZWRwYXJhbSB8PSAweDA0OworICAgICAgICB9Cit9CisKK3ZvaWQgKmFyZWE1X2lvX2Jhc2U7Cit2b2lkICphcmVhNl9pb19iYXNlOworCitzdGF0aWMgaW50IF9faW5pdCBsYW5kaXNrX2NmX2luaXQodm9pZCkKK3sKKwlwZ3Byb3RfdCBwcm90OworCXVuc2lnbmVkIGxvbmcgcGFkZHJiYXNlLCBwc2l6ZTsKKworCS8qIG9wZW4gSS9PIGFyZWEgd2luZG93ICovCisJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkICopUEFfQVJFQTVfSU8pOworCXBzaXplID0gUEFHRV9TSVpFOworCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0lPMTYpOworCWFyZWE1X2lvX2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlpZiAoIWFyZWE1X2lvX2Jhc2UpIHsKKwkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXBhZGRyYmFzZSA9IHZpcnRfdG9fcGh5cygodm9pZCAqKVBBX0FSRUE2X0lPKTsKKwlwc2l6ZSA9IFBBR0VfU0laRTsKKwlwcm90ID0gUEFHRV9LRVJORUxfUENDKDAsIF9QQUdFX1BDQ19JTzE2KTsKKwlhcmVhNl9pb19iYXNlID0gcDNfaW9yZW1hcChwYWRkcmJhc2UsIHBzaXplLCBwcm90LnBncHJvdCk7CisJaWYgKCFhcmVhNl9pb19iYXNlKSB7CisJCXByaW50aygiYWxsb2NhdGVfY2ZfYXJlYSA6IGNhbid0IG9wZW4gSEREIEkvTyB3aW5kb3chXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiQWxsb2NhdGUgQXJlYTUvNiBzdWNjZXNzLlxuIik7CisKKwkvKiBYWFggOiBkbyB3ZSBuZWVkIGF0dHJpYnV0ZSBhbmQgY29tbW9uLW1lbW9yeSBhcmVhIGFsc28/ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19pbml0IGxhbmRpc2tfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlkZXZpY2VfaW5pdGNhbGwobGFuZGlza19jZl9pbml0KTsKKworCWxhbmRpc2tfYnV6emVycGFyYW0gPSAwOworCWNoZWNrX3VzbDVwKCk7CisKKwlwcmludGsoS0VSTl9JTkZPICJJLU8gREFUQSBERVZJQ0UsIElOQy4gXCJMQU5ESVNLIFNlcmllc1wiIHN1cHBvcnQuXG4iKTsKKworCWJvYXJkX3RpbWVfaW5pdCA9IGxhbmRpc2tfdGltZV9pbml0OworCXBtX3Bvd2VyX29mZiA9IGxhbmRpc2tfcG93ZXJfb2ZmOworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9sYW5kaXNrIF9faW5pdG12ID0geworCS5tdl9uYW1lID0gIkxBTkRJU0siLAorCS5tdl9zZXR1cCA9IGxhbmRpc2tfc2V0dXAsCisJLm12X25yX2lycXMgPSA3MiwKKwkubXZfaW5iID0gbGFuZGlza19pbmIsCisJLm12X2ludyA9IGxhbmRpc2tfaW53LAorCS5tdl9pbmwgPSBsYW5kaXNrX2lubCwKKwkubXZfb3V0YiA9IGxhbmRpc2tfb3V0YiwKKwkubXZfb3V0dyA9IGxhbmRpc2tfb3V0dywKKwkubXZfb3V0bCA9IGxhbmRpc2tfb3V0bCwKKwkubXZfaW5iX3AgPSBsYW5kaXNrX2luYl9wLAorCS5tdl9pbndfcCA9IGxhbmRpc2tfaW53LAorCS5tdl9pbmxfcCA9IGxhbmRpc2tfaW5sLAorCS5tdl9vdXRiX3AgPSBsYW5kaXNrX291dGJfcCwKKwkubXZfb3V0d19wID0gbGFuZGlza19vdXR3LAorCS5tdl9vdXRsX3AgPSBsYW5kaXNrX291dGwsCisJLm12X2luc2IgPSBsYW5kaXNrX2luc2IsCisJLm12X2luc3cgPSBsYW5kaXNrX2luc3csCisJLm12X2luc2wgPSBsYW5kaXNrX2luc2wsCisJLm12X291dHNiID0gbGFuZGlza19vdXRzYiwKKwkubXZfb3V0c3cgPSBsYW5kaXNrX291dHN3LAorCS5tdl9vdXRzbCA9IGxhbmRpc2tfb3V0c2wsCisJLm12X2lvcG9ydF9tYXAgPSBsYW5kaXNrX2lvcG9ydF9tYXAsCisJLm12X2luaXRfaXJxID0gaW5pdF9sYW5kaXNrX0lSUSwKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisJLm12X2hlYXJ0YmVhdCA9IGhlYXJ0YmVhdF9sYW5kaXNrLAorI2VuZGlmCit9OworQUxJQVNfTVYobGFuZGlzaykKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvcnRjLmMgYi9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3J0Yy5jCmluZGV4IGE3NmM2NTUuLjAzYjEyM2EgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvcnRjLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9ydGMuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHZvaWQgbXBjMTIxMV90aW1lX2luaXQodm9pZCkKIHsKLQlydGNfZ2V0X3RpbWUgPSBtcGMxMjExX3J0Y19nZXR0aW1lb2ZkYXk7Ci0JcnRjX3NldF90aW1lID0gbXBjMTIxMV9ydGNfc2V0dGltZW9mZGF5OworCXJ0Y19zaF9nZXRfdGltZSA9IG1wYzEyMTFfcnRjX2dldHRpbWVvZmRheTsKKwlydGNfc2hfc2V0X3RpbWUgPSBtcGMxMjExX3J0Y19zZXR0aW1lb2ZkYXk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL21wYzEyMTEvc2V0dXAuYwppbmRleCAyYmZiMjIxLi44ZWI1ZDQzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9tcGMxMjExL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvbXBjMTIxMS9zZXR1cC5jCkBAIC0xMCwxNCArMTAsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbXBjMTIxMS9tcGMxMjExLmg+CiAjaW5jbHVkZSA8YXNtL21wYzEyMTEvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL21wYzEyMTEvbTE1NDNjLmg+CiAKLQogLyogQUxJMTVYMyBTTUJ1cyBhZGRyZXNzIG9mZnNldHMgKi8KICNkZWZpbmUgU01CSFNUU1RTICAgKDAgKyAweDMxMDApCiAjZGVmaW5lIFNNQkhTVENOVCAgICgxICsgMHgzMTAwKQpAQCAtNTAsMTEgKzQ4LDYgQEAKICNkZWZpbmUgQUxJMTVYM19TVFNfVEVSTQkweDgwCS8qIHRlcm1pbmF0ZWQgYnkgYWJvcnQgKi8KICNkZWZpbmUgQUxJMTVYM19TVFNfRVJSCQkweEUwCS8qIGFsbCB0aGUgYmFkIGVycm9yIGJpdHMgKi8KIAotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJJbnRlcmZhY2UgTVBDLTEyMTEoQ1RQL1BDSS9NUEMtU0gwMikiOwotfQotCiBzdGF0aWMgdm9pZCBfX2luaXQgcGNpX3dyaXRlX2NvbmZpZyh1bnNpZ25lZCBsb25nIGJ1c05vLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGRldk5vLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIGZuY05vLApAQCAtODAsOSArNzMsNiBAQAogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX21wYzEyMTFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNhdmVfYW5kX2NsaShmbGFncyk7CiAJaWYoIGlycSA8IDgpIHsKIAkJbV9pcnFfbWFzayB8PSAoMSA8PCBpcnEpOwogCQlvdXRiKG1faXJxX21hc2ssSTgyNTlfTV9NUik7CkBAIC05MCwxNiArODAsMTEgQEAKIAkJc19pcnFfbWFzayB8PSAoMSA8PCAoaXJxIC0gOCkpOwogCQlvdXRiKHNfaXJxX21hc2ssSTgyNTlfU19NUik7CiAJfQotCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9tcGMxMjExX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzYXZlX2FuZF9jbGkoZmxhZ3MpOwotCiAJaWYoIGlycSA8IDgpIHsKIAkJbV9pcnFfbWFzayAmPSB+KDEgPDwgaXJxKTsKIAkJb3V0YihtX2lycV9tYXNrLEk4MjU5X01fTVIpOwpAQCAtMTA3LDcgKzkyLDYgQEAKIAkJc19pcnFfbWFzayAmPSB+KDEgPDwgKGlycSAtIDgpKTsKIAkJb3V0YihzX2lycV9tYXNrLEk4MjU5X1NfTVIpOwogCX0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbXBjMTIxMV9pcnFfcmVhbCh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTMxLDEwICsxMTUsNiBAQAogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfbXBjMTIxMSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzYXZlX2FuZF9jbGkoZmxhZ3MpOwotCiAJaWYoaXJxIDwgOCkgewogCQlpZihtX2lycV9tYXNrICYgKDE8PGlycSkpewogCQkgIGlmKCFtcGMxMjExX2lycV9yZWFsKGlycSkpewpAQCAtMTYyLDcgKzE0Miw2IEBACiAJCW91dGIoMHg2MCsoaXJxLTgpLEk4MjU5X1NfQ1IpOyAJLyogRU9JICovCiAJCW91dGIoMHg2MCsyLEk4MjU5X01fQ1IpOwogCX0KLQlyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5kX21wYzEyMTFfaXJxKHVuc2lnbmVkIGludCBpcnEpCkBAIC0yMTksNyArMTk4LDcgQEAKIAlyZXR1cm4gaXJxOwogfQogCi12b2lkIF9faW5pdCBpbml0X21wYzEyMTFfSVJRKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9tcGMxMjExX0lSUSh2b2lkKQogewogCWludCBpOwogCS8qCkBAIC0yNTUsMjMgKzIzNCwxMiBAQAogCX0KIH0KIAotLyoKLSAgSW5pdGlhbGl6ZSB0aGUgYm9hcmQKLSovCi0KLQotc3RhdGljIHZvaWQgZGVsYXkgKHZvaWQpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgdG1wOwotCXRtcCA9ICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgMHhhMDAwMDAwMDsKLX0KLQotc3RhdGljIHZvaWQgZGVsYXkxMDAwICh2b2lkKQorc3RhdGljIHZvaWQgZGVsYXkxMDAwKHZvaWQpCiB7CiAJaW50IGk7CiAKIAlmb3IgKGk9MDsgaTwxMDAwOyBpKyspCi0JCWRlbGF5ICgpOworCQljdHJsX2RlbGF5KCk7CiB9CiAKIHN0YXRpYyBpbnQgcHV0X3NtYl9ibGsodW5zaWduZWQgY2hhciAqcCwgaW50IGFkZHJlc3MsIGludCBjb21tYW5kLCBpbnQgbm8pCkBAIC0zMTQsMjYgKzI4MiwxMCBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLQotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X21wYzEyMTEgX19pbml0bXYgPSB7Ci0JLm12X25yX2lycXMJCT0gNDgsCi0JLm12X2lycV9kZW11eAkJPSBtcGMxMjExX2lycV9kZW11eCwKLQkubXZfaW5pdF9pcnEJCT0gaW5pdF9tcGMxMjExX0lSUSwKLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9tcGMxMjExLAotI2VuZGlmCi19OwotCi1BTElBU19NVihtcGMxMjExKQotCiAvKiBhcmNoL3NoL2JvYXJkcy9tcGMxMjExL3J0Yy5jICovCiB2b2lkIG1wYzEyMTFfdGltZV9pbml0KHZvaWQpOwogCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgbXBjMTIxMV9zZXR1cChjaGFyICoqY21kbGluZV9wKQogewogCXVuc2lnbmVkIGNoYXIgc3BkX2J1ZlsxMjhdOwogCkBAIC0zNTcsMyArMzA5LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X21wYzEyMTEgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIkludGVyZmFjZSBNUEMtMTIxMShDVFAvUENJL01QQy1TSDAyKSIsCisJLm12X3NldHVwCQk9IG1wYzEyMTFfc2V0dXAsCisJLm12X25yX2lycXMJCT0gNDgsCisJLm12X2lycV9kZW11eAkJPSBtcGMxMjExX2lycV9kZW11eCwKKwkubXZfaW5pdF9pcnEJCT0gaW5pdF9tcGMxMjExX0lSUSwKKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9tcGMxMjExLAorI2VuZGlmCit9OworQUxJQVNfTVYobXBjMTIxMSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjQ1ZjAzYi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBTVE1pY3JvZWxlY3Ryb25pY3MgT3ZlcmRyaXZlIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKLSMKLQotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KLQotb2JqLSQoQ09ORklHX1BDSSkgKz0gZnBnYS5vIGdhbGlsZW8ubyBwY2lkbWEubwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvZnBnYS5jIGIvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2ZwZ2EuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTU2YzIzOS4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvZnBnYS5jCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqCi0gKiBUaGlzIGZpbGUgaGFuZGxlcyBwcm9ncmFtbWluZyB1cCB0aGUgQWx0ZXJhIEZsZXgxMEsgdGhhdCBpbnRlcmZhY2VzIHRvCi0gKiB0aGUgR2FsaWxlbywgYW5kIGRvZXMgdGhlIFBTLzIga2V5Ym9hcmQgYW5kIG1vdXNlCi0gKgotICovCi0KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotCi0jaW5jbHVkZSA8YXNtL292ZXJkcml2ZXIvZ3Q2NDExMS5oPgotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvb3ZlcmRyaXZlLmg+Ci0jaW5jbHVkZSA8YXNtL292ZXJkcml2ZS9mcGdhLmg+Ci0KLSNkZWZpbmUgRlBHQV9Ob3RDb25maWdIaWdoKCkgICgqRlBHQV9Db250cm9sUmVnKSA9ICgqRlBHQV9Db250cm9sUmVnKSB8IEVOQUJMRV9GUEdBX0JJVAotI2RlZmluZSBGUEdBX05vdENvbmZpZ0xvdygpICAgKCpGUEdBX0NvbnRyb2xSZWcpID0gKCpGUEdBX0NvbnRyb2xSZWcpICYgUkVTRVRfRlBHQV9NQVNLCi0KLS8qIEkgbmVlZCB0byBmaW5kIG91dCB3aGF0IChpZiBhbnkpIHRoZSByZWFsIGRlbGF5IGZhY3RvciBoZXJlIGlzICovCi0vKiBUaGUgZGVsYXkgaXMgZGVmaW5hdGVseSBub3QgY3JpdGljYWwgKi8KLSNkZWZpbmUgbG9uZ19kZWxheSgpIHtpbnQgaTtmb3IoaT0wO2k8MTAwMDA7aSsrKTt9Ci0jZGVmaW5lIHNob3J0X2RlbGF5KCkge2ludCBpO2ZvcihpPTA7aTwxMDA7aSsrKTt9Ci0KLXN0YXRpYyB2b2lkIF9faW5pdCBwcm9ncmFtX292ZXJkcml2ZV9mcGdhKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZwZ2Fjb2RlLAotCQkJCQkgIGludCBzaXplKQotewotCWludCB0aW1lb3V0ID0gMDsKLQlpbnQgaSwgajsKLQl1bnNpZ25lZCBjaGFyIGI7Ci0Jc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKkZQR0FfQ29udHJvbFJlZyA9Ci0JICAgICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChPVkVSRFJJVkVfQ1RSTCk7Ci0Jc3RhdGljIHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKkZQR0FfUHJvZ3JhbVJlZyA9Ci0JICAgICh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIChGUEdBX0RDTEtfQUREUkVTUyk7Ci0KLQlwcmludGsoIkZQR0E6ICBDb21tZW5jaW5nIEZQR0EgUHJvZ3JhbW1pbmdcbiIpOwotCi0JLyogVGhlIFBDSSByZXNldCBidXQgTVVTVCBiZSBsb3cgd2hlbiBwcm9ncmFtbWluZyB0aGUgRlBHQSAhISEgKi8KLQliID0gKCpGUEdBX0NvbnRyb2xSZWcpICYgUkVTRVRfUENJX01BU0s7Ci0KLQkoKkZQR0FfQ29udHJvbFJlZykgPSBiOwotCi0JLyogUHJlcGFyZSBGUEdBIHRvIHByb2dyYW0gKi8KLQotCUZQR0FfTm90Q29uZmlnSGlnaCgpOwotCWxvbmdfZGVsYXkoKTsKLQotCUZQR0FfTm90Q29uZmlnTG93KCk7Ci0Jc2hvcnRfZGVsYXkoKTsKLQotCXdoaWxlICgoKkZQR0FfUHJvZ3JhbVJlZyAmIEZQR0FfTk9UX1NUQVRVUykgIT0gMCkgewotCQlwcmludGsoIkZQR0E6ICBXYWl0aW5nIGZvciBOb3RTdGF0dXMgdG8gZ28gTG93IC4uLiBcbiIpOwotCX0KLQotCUZQR0FfTm90Q29uZmlnSGlnaCgpOwotCi0JLyogV2FpdCBmb3IgRlBHQSAicmVhZHkgdG8gYmUgcHJvZ3JhbW1lZCIgc2lnbmFsICovCi0JcHJpbnRrKCJGUEdBOiAgV2FpdGluZyBmb3IgTm90U3RhdHVzIHRvIGdvIGhpZ2ggKEZQR0EgcmVhZHkpLi4uIFxuIik7Ci0KLQlmb3IgKHRpbWVvdXQgPSAwOwotCSAgICAgKCgoKkZQR0FfUHJvZ3JhbVJlZyAmIEZQR0FfTk9UX1NUQVRVUykgPT0gMCkKLQkgICAgICAmJiAodGltZW91dCA8IEZQR0FfVElNRU9VVCkpOyB0aW1lb3V0KyspOwotCi0JLyogQ2hlY2sgaWYgdGltZW91dCBjb25kaXRpb24gb2NjdXJlZCAtIGkuZS4gYW4gZXJyb3IgKi8KLQotCWlmICh0aW1lb3V0ID09IEZQR0FfVElNRU9VVCkgewotCQlwcmludGsKLQkJICAgICgiRlBHQTogIEZhaWxlZCB0byBwcm9ncmFtIC0gVGltZW91dCB3YWl0aW5nIGZvciBub3RTVEFUVVMgdG8gZ28gaGlnaFxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlwcmludGsoIkZQR0E6ICBDb3B5aW5nIGRhdGEgdG8gRlBHQSAuLi4gJWQgYnl0ZXNcbiIsIHNpemUpOwotCi0JLyogQ29weSBhcnJheSB0byBGUEdBIC0gYml0IGF0IGEgdGltZSAqLwotCi0JZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykgewotCQl2b2xhdGlsZSB1bnNpZ25lZCB3ID0gMDsKLQotCQlmb3IgKGogPSAwOyBqIDwgODsgaisrKSB7Ci0JCQkqRlBHQV9Qcm9ncmFtUmVnID0gKGZwZ2Fjb2RlW2ldID4+IGopICYgMHgwMTsKLQkJCXNob3J0X2RlbGF5KCk7Ci0JCX0KLQkJaWYgKChpICYgMHgzZmYpID09IDApIHsKLQkJCXByaW50aygiLiIpOwotCQl9Ci0JfQotCi0JLyogV2FpdGluZyBmb3IgQ09ORkRPTkUgdG8gZ28gaGlnaCAtIG1lYW5zIHRoZSBwcm9ncmFtIGlzIGNvbXBsZXRlICAqLwotCi0JZm9yICh0aW1lb3V0ID0gMDsKLQkgICAgICgoKCpGUEdBX1Byb2dyYW1SZWcgJiBGUEdBX0NPTkZET05FKSA9PSAwKQotCSAgICAgICYmICh0aW1lb3V0IDwgRlBHQV9USU1FT1VUKSk7IHRpbWVvdXQrKykgewotCi0JCSpGUEdBX1Byb2dyYW1SZWcgPSAweDA7Ci0JCWxvbmdfZGVsYXkoKTsKLQl9Ci0KLQlpZiAodGltZW91dCA9PSBGUEdBX1RJTUVPVVQpIHsKLQkJcHJpbnRrCi0JCSAgICAoIkZQR0E6ICBGYWlsZWQgdG8gcHJvZ3JhbSAtIFRpbWVvdXQgd2FpdGluZyBmb3IgQ09ORkRPTkUgdG8gZ28gaGlnaFxuIik7Ci0JCXJldHVybjsKLQl9IGVsc2UgewkJLyogQ2xvY2sgYW5vdGhlciAxMCB0aW1lcyAtIGdldHMgdGhlIGRldmljZSBpbnRvIGEgd29ya2luZyBzdGF0ZSAgICAgICovCi0JCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7Ci0JCQkqRlBHQV9Qcm9ncmFtUmVnID0gMHgwOwotCQkJc2hvcnRfZGVsYXkoKTsKLQkJfQotCX0KLQotCXByaW50aygiRlBHQTogIFByb2dyYW1taW5nIGNvbXBsZXRlXG4iKTsKLX0KLQotCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2luaXQgZnBnYWNvZGVbXSA9IHsKLSNpbmNsdWRlICIuL292ZXJkcml2ZS50dGYiCS8qIENvZGUgZnJvbSBtYXhwbHVzMiBjb21waWxlciAqLwotCSwgMCwgMAotfTsKLQotCi1pbnQgX19pbml0IGluaXRfb3ZlcmRyaXZlX2ZwZ2Eodm9pZCkKLXsKLQlwcm9ncmFtX292ZXJkcml2ZV9mcGdhKGZwZ2Fjb2RlLCBzaXplb2YoZnBnYWNvZGUpKTsKLQotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2dhbGlsZW8uYyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9nYWxpbGVvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI5ZTQ4OTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2dhbGlsZW8uYworKysgL2Rldi9udWxsCkBAIC0xLDU4NyArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBQQ0kgcm91dGluZXMgcmVxdWlyZWQgZm9yIHRoZSBHYWxpbGVvIEdUNjQxMSAKLSAqIFBDSSBicmlkZ2UgYXMgdXNlZCBvbiB0aGUgT3Jpb24gYW5kIE92ZXJkcml2ZSBib2FyZHMuCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KLQotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvb3ZlcmRyaXZlLmg+Ci0jaW5jbHVkZSA8YXNtL292ZXJkcml2ZS9ndDY0MTExLmg+Ci0KLQotLyogQWZ0ZXIgYm9vdCwgd2Ugc2hpZnQgdGhlIEdhbGlsZW8gcmVnaXN0ZXJzIHNvIHRoYXQgdGhleSBhcHBlYXIgCi0gKiBpbiBCQU5LNiwgYWxvbmcgd2l0aCBJTyBzcGFjZS4gVGhpcyBtZWFucyB3ZSBjYW4gaGF2ZSBvbmUgY29udGluZ291cwotICogbHVtcCBvZiBQQ0kgYWRkcmVzcyBzcGFjZSB3aXRob3V0IHRoZXNlIHJlZ2lzdGVycyBhcHBlYXJpbmcgaW4gdGhlIAotICogbWlkZGxlIG9mIHRoZW0gCi0gKi8KLQotI2RlZmluZSBHVDY0MTExX0JBU0VfQUREUkVTUyAgMHhiYjAwMDAwMAotI2RlZmluZSBHVDY0MTExX0lPX0JBU0VfQUREUkVTUyAgMHgxMDAwCi0vKiBUaGUgR1Q2NDExMSByZWdpc3RlcnMgYXBwZWFyIGF0IHRoaXMgYWRkcmVzcyB0byB0aGUgU0g0IGFmdGVyIHJlc2V0ICovCi0jZGVmaW5lIFJFU0VUX0dUNjQxMTFfQkFTRV9BRERSRVNTICAgICAgICAgICAweGI0MDAwMDAwCi0KLS8qIE1hY3JvcyB1c2VkIHRvIGFjY2VzcyB0aGUgR2FsaWxlbyByZWdpc3RlcnMgKi8KLSNkZWZpbmUgUkVTRVRfR1Q2NDExMV9SRUcoeCkgKFJFU0VUX0dUNjQxMTFfQkFTRV9BRERSRVNTK3gpCi0jZGVmaW5lIEdUNjQxMTFfUkVHKHgpIChHVDY0MTExX0JBU0VfQUREUkVTUyt4KQotCi0jZGVmaW5lIFJFU0VUX0dUX1dSSVRFKHgsdikgd3JpdGVsKCh2KSxSRVNFVF9HVDY0MTExX1JFRyh4KSkKLQotI2RlZmluZSBSRVNFVF9HVF9SRUFEKHgpIHJlYWRsKFJFU0VUX0dUNjQxMTFfUkVHKHgpKQotCi0jZGVmaW5lIEdUX1dSSVRFKHgsdikgd3JpdGVsKCh2KSxHVDY0MTExX1JFRyh4KSkKLSNkZWZpbmUgR1RfV1JJVEVfQllURSh4LHYpIHdyaXRlYigodiksR1Q2NDExMV9SRUcoeCkpCi0jZGVmaW5lIEdUX1dSSVRFX1NIT1JUKHgsdikgd3JpdGV3KCh2KSxHVDY0MTExX1JFRyh4KSkKLQotI2RlZmluZSBHVF9SRUFEKHgpICAgIHJlYWRsKEdUNjQxMTFfUkVHKHgpKQotI2RlZmluZSBHVF9SRUFEX0JZVEUoeCkgIHJlYWRiKEdUNjQxMTFfUkVHKHgpKQotI2RlZmluZSBHVF9SRUFEX1NIT1JUKHgpIHJlYWR3KEdUNjQxMTFfUkVHKHgpKQotCi0KLS8qIFdoZXJlIHRoZSB2YXJpb3VzIFNIIGJhbmtzIHN0YXJ0IGF0ICovCi0jZGVmaW5lIFNIX0JBTks0X0FEUiAweGIwMDAwMDAwCi0jZGVmaW5lIFNIX0JBTks1X0FEUiAweGI0MDAwMDAwCi0jZGVmaW5lIFNIX0JBTks2X0FEUiAweGI4MDAwMDAwCi0KLS8qIE1hc2tzIG91dCBldmVyeXRoaW5nIGJ1dCBsaW5lcyAyOCwyNywyNiAqLwotI2RlZmluZSBCQU5LX1NFTEVDVF9NQVNLIDB4MWMwMDAwMDAKLQotI2RlZmluZSBTSDRfVE9fQkFOSyh4KSAoICh4KSAmIEJBTktfU0VMRUNUX01BU0spCi0KLS8qIAotICogTWFza3MgdXNlZCBmb3IgYWRkcmVzcyBjb252ZXJzYWlvbi4gQmFuayA2IGlzIHVzZWQgZm9yIElPIGFuZCAKLSAqIGhhcyBhbGwgdGhlIGFkZHJlc3MgYml0cyB6ZXJvZWQgYnkgdGhlIEZQR0EuIFNwZWNpYWwgY2FzZSB0aGlzCi0gKi8KLSNkZWZpbmUgTUVNT1JZX0JBTktfTUFTSyAweDFmZmZmZmZmCi0jZGVmaW5lIElPX0JBTktfTUFTSyAgMHgwM2ZmZmZmZgotCi0vKiBNYXJrIGJhbmsgNiBhcyB0aGUgYmFuayB1c2VkIGZvciBJTy4gWW91IGNhbiBjaGFuZ2UgdGhpcyBpbiB0aGUgRlBHQSBjb2RlCi0gKiBpZiB5b3Ugd2FudCAKLSAqLwotI2RlZmluZSBJT19CQU5LX0FEUiBQQ0lfR1RJT19CQVNFCi0KLS8qIFdpbGwgc2VsZWN0IHRoZSBjb3JyZWN0IG1hc2sgdG8gYXBwbHkgZGVwZW5kaW5nIG9uIHRoZSBTSCQgYWRkcmVzcyAqLwotI2RlZmluZSBTRUxFQ1RfQkFOS19NQVNLKHgpIFwKLSAgICggKFNINF9UT19CQU5LKHgpPT1TSDRfVE9fQkFOSyhJT19CQU5LX0FEUikpID8gSU9fQkFOS19NQVNLIDogTUVNT1JZX0JBTktfTUFTSykKLQotLyogQ29udmVydHMgYmV0d2VlbiBQQ0kgc3BhY2UgYW5kIFAyIHJlZ2lvbiAqLwotI2RlZmluZSBTSDRfVE9fUENJKHgpICgoeCkmU0VMRUNUX0JBTktfTUFTSyh4KSkKLQotLyogVmFyaW91cyBtYWNyb3MgZm9yIGZpZ3VyaW5nIG91dCB3aGF0IHRvIHN0aWNrIGluIHRoZSBHYWxpbGVvIHJlZ2lzdGVycy4gCi0gKiBZb3UgKnJlYWxseSogZG9uJ3Qgd2FudCB0byBmaWd1cmUgdGhpcyBzdHVmZiBvdXQgYnkgaGFuZCwgeW91IGFsd2F5cyBnZXQKLSAqIGl0IHdyb25nCi0gKi8KLSNkZWZpbmUgR1RfTUVNX0xPX0FEUih4KSAoKCgodW5zaWduZWQpKCh4KSZTRUxFQ1RfQkFOS19NQVNLKHgpKSk+PjIxKSYweDdmZikKLSNkZWZpbmUgR1RfTUVNX0hJX0FEUih4KSAoKCgodW5zaWduZWQpKCh4KSZTRUxFQ1RfQkFOS19NQVNLKHgpKSk+PjIxKSYweDdmKQotI2RlZmluZSBHVF9NRU1fU1VCX0FEUih4KSAoKCgodW5zaWduZWQpKCh4KSZTRUxFQ1RfQkFOS19NQVNLKHgpKSk+PjIwKSYweGZmKQotCi0jZGVmaW5lIFBST0dSQU1fSElfTE8oYmxvY2ssYSxzKSBcCi0gICAgR1RfV1JJVEUoYmxvY2sjI19MT19ERUNfQURSLEdUX01FTV9MT19BRFIoYSkpO1wKLSAgICBHVF9XUklURShibG9jayMjX0hJX0RFQ19BRFIsR1RfTUVNX0hJX0FEUihhK3MtMSkpCi0KLSNkZWZpbmUgUFJPR1JBTV9TVUJfSElfTE8oYmxvY2ssYSxzKSBcCi0gICAgR1RfV1JJVEUoYmxvY2sjI19MT19ERUNfQURSLEdUX01FTV9TVUJfQURSKGEpKTtcCi0gICAgR1RfV1JJVEUoYmxvY2sjI19ISV9ERUNfQURSLEdUX01FTV9TVUJfQURSKGErcy0xKSkKLQotLyogV2UgbmVlZCB0byBzZXQgdGhlIHNpemUsIGFuZCB0aGUgb2Zmc2V0IHJlZ2lzdGVyICovCi0KLSNkZWZpbmUgR1RfQkFSX01BU0soeCkgKCh4KSZ+MHhmZmYpCi0KLS8qIE1hY3JvIHRvIHNldCB1cCB0aGUgQkFSIGluIHRoZSBHYWxpbGVvLiBFc3NlbnRpYWxseSB1c2VkIGZvciB0aGUgRFJBTSAqLwotI2RlZmluZSBQUk9HUkFNX0dUX0JBUihibG9jayxhLHMpIFwKLSAgR1RfV1JJVEUoUENJXyMjYmxvY2sjI19CQU5LX1NJWkUsR1RfQkFSX01BU0soKHMtMSkpKTtcCi0gIHdyaXRlX2NvbmZpZ190b19nYWxpbGVvKFBDSV9DT05GSUdfIyNibG9jayMjX0JBU0VfQURSLFwKLQkJCSAgICAgR1RfQkFSX01BU0soYSkpCi0KLSNkZWZpbmUgRElTQUJMRV9HVF9CQVIoYmxvY2spIFwKLSAgR1RfV1JJVEUoUENJXyMjYmxvY2sjI19CQU5LX1NJWkUsMCksXAotICBHVF9DT05GSUdfV1JJVEUoUENJX0NPTkZJR18jI2Jsb2NrIyNfQkFTRV9BRFIsXAotICAgIDB4ODAwMDAwMDApCi0KLS8qIE1hY3JvcyB0byBkaXNhYmxlIHRoaW5ncyB3ZSBhcmUgbm90IGdvaW5nIHRvIHVzZSAqLwotI2RlZmluZSBESVNBQkxFX0RFQ09ERSh4KSBHVF9XUklURSh4IyNfTE9fREVDX0FEUiwweDdmZik7XAotICAgICAgICAgICAgICAgICAgICAgICAgICBHVF9XUklURSh4IyNfSElfREVDX0FEUiwweDAwKQotCi0jZGVmaW5lIERJU0FCTEVfU1VCX0RFQ09ERSh4KSBHVF9XUklURSh4IyNfTE9fREVDX0FEUiwweGZmKTtcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHVF9XUklURSh4IyNfSElfREVDX0FEUiwweDAwKQotCi1zdGF0aWMgdm9pZCBfX2luaXQgcmVzZXRfcGNpKHZvaWQpCi17Ci0JLyogU2V0IFJFU0VUX1BDSSBiaXQgaGlnaCAqLwotCXdyaXRlYihyZWFkYihPVkVSRFJJVkVfQ1RSTCkgfCBFTkFCTEVfUENJX0JJVCwgT1ZFUkRSSVZFX0NUUkwpOwotCXVkZWxheSgyNTApOwotCi0JLyogU2V0IFJFU0VUX1BDSSBiaXQgbG93ICovCi0Jd3JpdGViKHJlYWRiKE9WRVJEUklWRV9DVFJMKSAmIFJFU0VUX1BDSV9NQVNLLCBPVkVSRFJJVkVfQ1RSTCk7Ci0JdWRlbGF5KDI1MCk7Ci0KLQl3cml0ZWIocmVhZGIoT1ZFUkRSSVZFX0NUUkwpIHwgRU5BQkxFX1BDSV9CSVQsIE9WRVJEUklWRV9DVFJMKTsKLQl1ZGVsYXkoMjUwKTsKLX0KLQotc3RhdGljIGludCB3cml0ZV9jb25maWdfdG9fZ2FsaWxlbyhpbnQgd2hlcmUsIHUzMiB2YWwpOwotI2RlZmluZSBHVF9DT05GSUdfV1JJVEUod2hlcmUsdmFsKSB3cml0ZV9jb25maWdfdG9fZ2FsaWxlbyh3aGVyZSx2YWwpCi0KLSNkZWZpbmUgRU5BQkxFX1BDSV9EUkFNCi0KLQotI2lmZGVmIFRFU1RfRFJBTQotLyogVGVzdCBmdW5jdGlvbiB0byBjaGVjayBvdXQgaWYgdGhlIFBDSSBEUkFNIGlzIHdvcmtpbmcgT0sgKi8KLXN0YXRpYyBpbnQgIC8qIF9faW5pdCAqLyB0ZXN0X2RyYW0odW5zaWduZWQgKmJhc2UsIHVuc2lnbmVkIHNpemUpCi17Ci0JdW5zaWduZWQgKnAgPSBiYXNlOwotCXVuc2lnbmVkICplbmQgPSAodW5zaWduZWQgKikgKCgodW5zaWduZWQpIGJhc2UpICsgc2l6ZSk7Ci0JdW5zaWduZWQgdzsKLQotCWZvciAocCA9IGJhc2U7IHAgPCBlbmQ7IHArKykgewotCQkqcCA9IDB4ZmZmZmZmZmY7Ci0JCWlmICgqcCAhPSAweGZmZmZmZmZmKSB7Ci0JCQlwcmludGsoIkFBQVJHSCAtd3JpdGUgZmFpbGVkISEhIGF0ICVwIGlzICV4XG4iLCBwLAotCQkJICAgICAgICpwKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCSpwID0gMHgwOwotCQlpZiAoKnAgIT0gMHgwKSB7Ci0JCQlwcmludGsoIkFBQVJHSCAtd3JpdGUgZmFpbGVkISEhXG4iKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JZm9yIChwID0gYmFzZTsgcCA8IGVuZDsgcCsrKSB7Ci0JCSpwID0gKHVuc2lnbmVkKSBwOwotCQlpZiAoKnAgIT0gKHVuc2lnbmVkKSBwKSB7Ci0JCQlwcmludGsoIkZhaWxlZCBhdCAweCVwLCBhY3R1YWxseSBpcyAweCV4XG4iLCBwLAotCQkJICAgICAgICpwKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JZm9yIChwID0gYmFzZTsgcCA8IGVuZDsgcCsrKSB7Ci0JCXcgPSAoKHVuc2lnbmVkKSBwICYgMHhmZmZmMDAwMCk7Ci0JCSpwID0gdyB8ICh3ID4+IDE2KTsKLQl9Ci0KLQlmb3IgKHAgPSBiYXNlOyBwIDwgZW5kOyBwKyspIHsKLQkJdyA9ICgodW5zaWduZWQpIHAgJiAweGZmZmYwMDAwKTsKLQkJdyB8PSAodyA+PiAxNik7Ci0JCWlmICgqcCAhPSB3KSB7Ci0JCQlwcmludGsKLQkJCSAgICAoIkZhaWxlZCBhdCAweCVwLCBzaG91bGQgYmUgMHgleCBhY3R1YWxseSBpcyAweCV4XG4iLAotCQkJICAgICBwLCB3LCAqcCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCX0KLQotCXJldHVybiAxOwotfQotI2VuZGlmCi0KLQotLyogRnVuY3Rpb24gdG8gc2V0IHVwIGFuZCBpbml0aWFsaXNlIHRoZSBnYWxpbGVvLiBUaGlzIHNldHMgdXAgdGhlIEJBUlMsCi0gKiBtYXBzIHRoZSBEUkFNIGludG8gdGhlIGFkZHJlc3Mgc3BhY2UgZXRjLGV0YwotICovCi1pbnQgX19pbml0IGdhbGlsZW9faW5pdCh2b2lkKQotewotCXJlc2V0X3BjaSgpOwotCi0JLyogTm93IHNoaWZ0IHRoZSBnYWxpbGVvIHJlZ3MgaW50byB0aGlzIGJsb2NrICovCi0JUkVTRVRfR1RfV1JJVEUoSU5URVJOQUxfU1BBQ0VfREVDLAotCQkgICAgICAgR1RfTUVNX0xPX0FEUihHVDY0MTExX0JBU0VfQUREUkVTUykpOwotCi0JLyogU2hvdWxkIGhhdmUgYSBzYW5pdHkgY2hlY2sgaGVyZSwgdGhhdCB5b3UgY2FuIHJlYWQgYmFjayAgYXQgdGhlIG5ldwotCSAqIGFkZHJlc3Mgd2hhdCB5b3UganVzdCB3cm90ZSAKLQkgKi8KLQotCS8qIERpc2FibGUgZGVjb2RlIGZvciBhbGwgcmVnaW9ucyAqLwotCURJU0FCTEVfREVDT0RFKFJBUzEwKTsKLQlESVNBQkxFX0RFQ09ERShSQVMzMik7Ci0JRElTQUJMRV9ERUNPREUoQ1MyMCk7Ci0JRElTQUJMRV9ERUNPREUoQ1MzKTsKLQlESVNBQkxFX0RFQ09ERShQQ0lfSU8pOwotCURJU0FCTEVfREVDT0RFKFBDSV9NRU0wKTsKLQlESVNBQkxFX0RFQ09ERShQQ0lfTUVNMSk7Ci0KLQkvKiBEaXNhYmxlIGFsbCBCQVJTICovCi0JR1RfV1JJVEUoQkFSX0VOQUJMRV9BRFIsIDB4MWZmKTsKLQlESVNBQkxFX0dUX0JBUihSQVMxMCk7Ci0JRElTQUJMRV9HVF9CQVIoUkFTMzIpOwotCURJU0FCTEVfR1RfQkFSKENTMjApOwotCURJU0FCTEVfR1RfQkFSKENTMyk7Ci0KLQkvKiBUZWxsIHRoZSBCQVIgd2hlcmUgdGhlIElPIHJlZ2lzdGVycyBub3cgYXJlICovCi0JR1RfQ09ORklHX1dSSVRFKFBDSV9DT05GSUdfSU5UX1JFR19JT19BRFIsR1RfQkFSX01BU0soCi0JCQkJCSAgICAoR1Q2NDExMV9JT19CQVNFX0FERFJFU1MgJgotCQkJCQkgICAgIElPX0JBTktfTUFTSykpKTsKLQkvKiBzZXQgdXAgYSAxMTIgTWIgZGVjb2RlICovCi0JUFJPR1JBTV9ISV9MTyhQQ0lfTUVNMCwgU0hfQkFOSzRfQURSLCAxMTIgKiAxMDI0ICogMTAyNCk7Ci0KLQkvKiBTZXQgdXAgYSAzMiBNQiBpbyBzcGFjZSBkZWNvZGUgKi8KLQlQUk9HUkFNX0hJX0xPKFBDSV9JTywgSU9fQkFOS19BRFIsIDMyICogMTAyNCAqIDEwMjQpOwotCi0jaWZkZWYgRU5BQkxFX1BDSV9EUkFNCi0JLyogUHJvZ3JhbSB1cCB0aGUgRFJBTSBjb25maWd1cmF0aW9uIC0gdGhlcmUgaXMgRFJBTSBvbmx5IGluIGJhbmsgMCAqLwotCS8qIE5vdyBzZXQgdXAgdGhlIERSQU0gZGVjb2RlICovCi0JUFJPR1JBTV9ISV9MTyhSQVMxMCwgUENJX0RSQU1fQkFTRSwgUENJX0RSQU1fU0laRSk7Ci0JLyogQW5kIHRoZSBzdWIgZGVjb2RlICovCi0JUFJPR1JBTV9TVUJfSElfTE8oUkFTMCwgUENJX0RSQU1fQkFTRSwgUENJX0RSQU1fU0laRSk7Ci0KLQlESVNBQkxFX1NVQl9ERUNPREUoUkFTMSk7Ci0KLQkvKiBTZXQgcmVmcmVzaCByYXRlICovCi0JR1RfV1JJVEUoRFJBTV9CQU5LMF9QQVJNUywgMHgzZik7Ci0JR1RfV1JJVEUoRFJBTV9DRkcsIDB4MTAwKTsKLQotCS8qIHdlIGhhdmUgdG8gbG9iIG9mZiB0aGUgdG9wIGJpdHMgcmVtZW1lYmVyISEgKi8KLQlQUk9HUkFNX0dUX0JBUihSQVMxMCwgU0g0X1RPX1BDSShQQ0lfRFJBTV9CQVNFKSwgUENJX0RSQU1fU0laRSk7Ci0KLSNlbmRpZgotCi0JLyogV2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBkZWNvZGluZyBSQVMxMCBhbmQgdGhlIEdhbGlsZW8ncyBpbnRlcm5hbCAKLQkgKiByZWdpc3RlcnMgKGFzIElPKSBvbiB0aGUgUENJIGJ1cwotCSAqLwotI2lmZGVmIEVOQUJMRV9QQ0lfRFJBTQotCUdUX1dSSVRFKEJBUl9FTkFCTEVfQURSLCAofigoMSA8PCA4KSB8ICgxIDw8IDMpKSkgJiAweDFmZik7Ci0jZWxzZQotCUdUX1dSSVRFKEJBUl9FTkFCTEVfQURSLCAofigxIDw8IDMpKSAmIDB4MWZmKTsKLSNlbmRpZgotCi0JLyogQ2hhbmdlIHRoZSBjbGFzcyBjb2RlIHRvIGhvc3QgYnJpZGdlLCBpdCBhY3R1YWxseSBwb3dlcnMgdXAgCi0JICogYXMgYSBtZW1vcnkgY29udHJvbGxlcgotICAgICAgICAgKi8KLQlHVF9DT05GSUdfV1JJVEUoOCwgMHgwNjAwMDAxMSk7Ci0KLQkvKiBBbGxvdyB0aGUgZ2FsaWxlbyB0byBtYXN0ZXIgdGhlIFBDSSBidXMgKi8KLQlHVF9DT05GSUdfV1JJVEUoUENJX0NPTU1BTkQsCi0JCQlQQ0lfQ09NTUFORF9NRU1PUlkgfCBQQ0lfQ09NTUFORF9NQVNURVIgfAotCQkJUENJX0NPTU1BTkRfSU8pOwotCi0KLSNpZiAwCi0gICAgICAgIHByaW50aygiVGVzdGluZyBQQ0kgRFJBTSAtICIpOwotCWlmKHRlc3RfZHJhbShQQ0lfRFJBTV9CQVNFLFBDSV9EUkFNX1NJWkUpKSB7Ci0JCXByaW50aygiUGFzc2VkXG4iKTsKLQl9ZWxzZSB7Ci0JCXByaW50aygiRkFJTEVEXG4iKTsKLQl9Ci0jZW5kaWYKLQlyZXR1cm4gMDsKLQotfQotCi0KLSNkZWZpbmUgU0VUX0NPTkZJR19CSVRTKGJ1cyxkZXZmbix3aGVyZSlcCi0gICgoMTw8MzEpIHwgKChidXMpIDw8IDE2KSB8ICgoZGV2Zm4pIDw8IDgpIHwgKCh3aGVyZSkgJiB+MykpCi0KLSNkZWZpbmUgQ09ORklHX0NNRChkZXYsIHdoZXJlKSBTRVRfQ09ORklHX0JJVFMoKGRldiktPmJ1cy0+bnVtYmVyLChkZXYpLT5kZXZmbix3aGVyZSkKLQotLyogVGhpcyB3cml0ZSB0byB0aGUgZ2FsaWxlbyBjb25maWcgcmVnaXN0ZXJzLCB1bmxpa2UgdGhlIGZ1bmN0aW9ucyBiZWxvdywgY2FuCi0gKiBiZSB1c2VkIGJlZm9yZSB0aGUgUENJIHN1YnN5c3RlbSBoYXMgc3RhcnRlZCB1cAotICovCi1zdGF0aWMgaW50IF9faW5pdCB3cml0ZV9jb25maWdfdG9fZ2FsaWxlbyhpbnQgd2hlcmUsIHUzMiB2YWwpCi17Ci0JR1RfV1JJVEUoUENJX0NGR19BRFIsIFNFVF9DT05GSUdfQklUUygwLCAwLCB3aGVyZSkpOwotCi0JR1RfV1JJVEUoUENJX0NGR19EQVRBLCB2YWwpOwotCXJldHVybiAwOwotfQotCi0vKiBXZSBleGNsdWRlIHRoZSBnYWxpbGVvIGFuZCBzbG90IDMxLCB0aGUgZ2FsaWxlbyBiZWNhdXNlIEkgZG9uJ3Qga25vdyBob3cgdG8gc3RvcAotICogdGhlIHNldHVwIGNvZGUgc2hhZ2dpbmcgdXAgdGhlIHNldHVwIEkgaGF2ZSBkb25lIG9uIGl0LCBhbmQgMzEgYmVjYXVzZSB0aGUgd2hvbGUKLSAqIHRoaW5nIGxvY2tzIHVwIGlmIHlvdSB0cnkgdG8gYWNjZXNzIHRoYXQgc2xvdCAod2hpY2ggZG9lc24ndCBleGlzdCBvZiBjb3Vyc2UgYW55d2F5Ci0gKi8KLQotI2RlZmluZSBFWENMVURFRF9ERVYoZGV2KSAoKGRldi0+YnVzLT5udW1iZXI9PTApICYmICgoUENJX1NMT1QoZGV2LT5kZXZmbik9PTApIHx8IChQQ0lfU0xPVChkZXYtPmRldmZuKSA9PSAzMSkpKQotCi1zdGF0aWMgaW50IGdhbGlsZW9fcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsCi0JCQkJICAgIHU4ICogdmFsKQotewotCi0gICAgICAgIAotCS8qIEkgc3VzcGVjdCB0aGlzIGRvZXNuJ3Qgd29yayBiZWNhdXNlIHRoaXMgZHJpdmVzIGEgc3BlY2lhbCBjeWNsZSA/ICovCi0JaWYgKEVYQ0xVREVEX0RFVihkZXYpKSB7Ci0JCSp2YWwgPSAweGZmOwotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCX0KLQkvKiBTdGFydCB0aGUgY29uZmlnIGN5Y2xlICovCi0JR1RfV1JJVEUoUENJX0NGR19BRFIsIENPTkZJR19DTUQoZGV2LCB3aGVyZSkpOwotCS8qIFJlYWQgYmFjayB0aGUgcmVzdWx0ICovCi0JKnZhbCA9IEdUX1JFQURfQllURShQQ0lfQ0ZHX0RBVEEgKyAod2hlcmUgJiAzKSk7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi0KLXN0YXRpYyBpbnQgZ2FsaWxlb19yZWFkX2NvbmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwKLQkJCQkgICAgdTE2ICogdmFsKQotewotCi0gICAgICAgIGlmIChFWENMVURFRF9ERVYoZGV2KSkgewotCQkqdmFsID0gMHhmZmZmOwotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCX0KLQotCUdUX1dSSVRFKFBDSV9DRkdfQURSLCBDT05GSUdfQ01EKGRldiwgd2hlcmUpKTsKLQkqdmFsID0gR1RfUkVBRF9TSE9SVChQQ0lfQ0ZHX0RBVEEgKyAod2hlcmUgJiAyKSk7Ci0KLQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotfQotCi0KLXN0YXRpYyBpbnQgZ2FsaWxlb19yZWFkX2NvbmZpZ19kd29yZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsCi0JCQkJICAgICB1MzIgKiB2YWwpCi17Ci0JaWYgKEVYQ0xVREVEX0RFVihkZXYpKSB7Ci0JCSp2YWwgPSAweGZmZmZmZmZmOwotCQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOwotCX0KLQotCUdUX1dSSVRFKFBDSV9DRkdfQURSLCBDT05GSUdfQ01EKGRldiwgd2hlcmUpKTsKLQkqdmFsID0gR1RfUkVBRChQQ0lfQ0ZHX0RBVEEpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIGludCBnYWxpbGVvX3dyaXRlX2NvbmZpZ19ieXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwKLQkJCQkgICAgIHU4IHZhbCkKLXsKLQlHVF9XUklURShQQ0lfQ0ZHX0FEUiwgQ09ORklHX0NNRChkZXYsIHdoZXJlKSk7Ci0KLQlHVF9XUklURV9CWVRFKFBDSV9DRkdfREFUQSArICh3aGVyZSAmIDMpLCB2YWwpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotCi1zdGF0aWMgaW50IGdhbGlsZW9fd3JpdGVfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLAotCQkJCSAgICAgdTE2IHZhbCkKLXsKLQlHVF9XUklURShQQ0lfQ0ZHX0FEUiwgQ09ORklHX0NNRChkZXYsIHdoZXJlKSk7Ci0KLQlHVF9XUklURV9TSE9SVChQQ0lfQ0ZHX0RBVEEgKyAod2hlcmUgJiAyKSwgdmFsKTsKLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLXN0YXRpYyBpbnQgZ2FsaWxlb193cml0ZV9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLAotCQkJCSAgICAgIHUzMiB2YWwpCi17Ci0JR1RfV1JJVEUoUENJX0NGR19BRFIsIENPTkZJR19DTUQoZGV2LCB3aGVyZSkpOwotCi0JR1RfV1JJVEUoUENJX0NGR19EQVRBLCB2YWwpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotc3RhdGljIHN0cnVjdCBwY2lfb3BzIHBjaV9jb25maWdfb3BzID0gewotCWdhbGlsZW9fcmVhZF9jb25maWdfYnl0ZSwKLQlnYWxpbGVvX3JlYWRfY29uZmlnX3dvcmQsCi0JZ2FsaWxlb19yZWFkX2NvbmZpZ19kd29yZCwKLQlnYWxpbGVvX3dyaXRlX2NvbmZpZ19ieXRlLAotCWdhbGlsZW9fd3JpdGVfY29uZmlnX3dvcmQsCi0JZ2FsaWxlb193cml0ZV9jb25maWdfZHdvcmQKLX07Ci0KLQotLyogRXZlcnl0aGluZyBoYW5ncyBvZmYgdGhpcyAqLwotc3RhdGljIHN0cnVjdCBwY2lfYnVzICpwY2lfcm9vdF9idXM7Ci0KLQotc3RhdGljIHU4IF9faW5pdCBub19zd2l6emxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4ICogcGluKQotewotCXJldHVybiBQQ0lfU0xPVChkZXYtPmRldmZuKTsKLX0KLQotc3RhdGljIGludCBfX2luaXQgbWFwX29kX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JLyogU2xvdCAxOiBHYWxpbGVvIAotCSAqIFNsb3QgMjogUENJIFNsb3QgMQotCSAqIFNsb3QgMzogUENJIFNsb3QgMgotCSAqIFNsb3QgNDogRVNTCi0JICovCi0Jc3dpdGNoIChzbG90KSB7Ci0JY2FzZSAyOiAKLQkJcmV0dXJuIE9WRVJEUklWRV9QQ0lfSVJRMTsKLQljYXNlIDM6Ci0JCS8qIE5vdGUgdGhpcyBhc3N1bWVzIHlvdSBoYXZlIGEgaGFja2VkIGNhcmQgaW4gc2xvdCAyICovCi0JCXJldHVybiBPVkVSRFJJVkVfUENJX0lSUTI7Ci0JY2FzZSA0OgotCQlyZXR1cm4gT1ZFUkRSSVZFX0VTU19JUlE7Ci0JZGVmYXVsdDoKLQkJLyogcHJpbnRrKCJQQ0k6IFVuZXhwZWN0ZWQgSVJRIG1hcHBpbmcgcmVxdWVzdCBmb3Igc2xvdCAlZFxuIiwgc2xvdCk7ICovCi0JCXJldHVybiAtMTsKLQl9Ci19Ci0KLQotCi12b2lkIF9faW5pdAotcGNpYmlvc19maXh1cF9wYnVzX3JhbmdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBzdHJ1Y3QgcGJ1c19zZXRfcmFuZ2VzX2RhdGEgKnJhbmdlcykKLXsKLSAgICAgICAgcmFuZ2VzLT5pb19zdGFydCAtPSBidXMtPnJlc291cmNlWzBdLT5zdGFydDsKLSAgICAgICAgcmFuZ2VzLT5pb19lbmQgLT0gYnVzLT5yZXNvdXJjZVswXS0+c3RhcnQ7Ci0gICAgICAgIHJhbmdlcy0+bWVtX3N0YXJ0IC09IGJ1cy0+cmVzb3VyY2VbMV0tPnN0YXJ0OwotICAgICAgICByYW5nZXMtPm1lbV9lbmQgLT0gYnVzLT5yZXNvdXJjZVsxXS0+c3RhcnQ7Ci19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLQotc3RhdGljIHZvaWQgX19pbml0IHBjaV9maXh1cF9pZGVfYmFzZXMoc3RydWN0IHBjaV9kZXYgKmQpCi17Ci0JaW50IGk7Ci0KLQkvKgotCSAqIFBDSSBJREUgY29udHJvbGxlcnMgdXNlIG5vbi1zdGFuZGFyZCBJL08gcG9ydCBkZWNvZGluZywgcmVzcGVjdCBpdC4KLQkgKi8KLQlpZiAoKGQtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKLQkJcmV0dXJuOwotCXByaW50aygiUENJOiBJREUgYmFzZSBhZGRyZXNzIGZpeHVwIGZvciAlc1xuIiwgcGNpX25hbWUoZCkpOwotCWZvcihpPTA7IGk8NDsgaSsrKSB7Ci0JCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkLT5yZXNvdXJjZVtpXTsKLQkJaWYgKChyLT5zdGFydCAmIH4weDgwKSA9PSAweDM3NCkgewotCQkJci0+c3RhcnQgfD0gMjsKLQkJCXItPmVuZCA9IHItPnN0YXJ0OwotCQl9Ci0JfQotfQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF9pZGVfYmFzZXMpOwotCi12b2lkIF9faW5pdCBwY2liaW9zX2luaXQodm9pZCkKLXsKLQlzdGF0aWMgc3RydWN0IHJlc291cmNlIGdhbGlvLGdhbG1lbTsKLQotICAgICAgICAvKiBBbGxvY2F0ZSB0aGUgcmVnaXN0ZXJzIHVzZWQgYnkgdGhlIEdhbGlsZW8gKi8KLSAgICAgICAgZ2FsaW8uZmxhZ3MgPSBJT1JFU09VUkNFX0lPOwotICAgICAgICBnYWxpby5uYW1lICA9ICJHYWxpbGVvIEdUNjQwMTEiOwotICAgICAgICBnYWxtZW0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTXxJT1JFU09VUkNFX1BSRUZFVENIOwotICAgICAgICBnYWxtZW0ubmFtZSAgPSAiR2FsaWxlbyBHVDY0MDExIERSQU0iOwotCi0gICAgICAgIGFsbG9jYXRlX3Jlc291cmNlKCZpb3BvcnRfcmVzb3VyY2UsICZnYWxpbywgMjU2LAotCQkgICAgR1Q2NDExMV9JT19CQVNFX0FERFJFU1MsR1Q2NDExMV9JT19CQVNFX0FERFJFU1MrMjU2LCAyNTYsIE5VTEwsIE5VTEwpOwotICAgICAgICBhbGxvY2F0ZV9yZXNvdXJjZSgmaW9tZW1fcmVzb3VyY2UsICZnYWxtZW0sUENJX0RSQU1fU0laRSwKLQkJICAgIFBIWVNBRERSKFBDSV9EUkFNX0JBU0UpLCBQSFlTQUREUihQQ0lfRFJBTV9CQVNFKStQQ0lfRFJBTV9TSVpFLCAKLQkJCSAgICAgUENJX0RSQU1fU0laRSwgTlVMTCwgTlVMTCk7Ci0KLSAgCS8qIG9rLCBkbyB0aGUgc2NhbiBtYW4gKi8KLQlwY2lfcm9vdF9idXMgPSBwY2lfc2Nhbl9idXMoMCwgJnBjaV9jb25maWdfb3BzLCBOVUxMKTsKLQotICAgICAgICBwY2lfYXNzaWduX3VuYXNzaWduZWRfcmVzb3VyY2VzKCk7Ci0JcGNpX2ZpeHVwX2lycXMobm9fc3dpenpsZSwgbWFwX29kX2lycSk7Ci0KLSNpZmRlZiBURVNUX0RSQU0KLSAgICAgICAgcHJpbnRrKCJUZXN0aW5nIFBDSSBEUkFNIC0gIik7Ci0JaWYodGVzdF9kcmFtKFBDSV9EUkFNX0JBU0UsUENJX0RSQU1fU0laRSkpIHsKLQkJcHJpbnRrKCJQYXNzZWRcbiIpOwotCX1lbHNlIHsKLQkJcHJpbnRrKCJGQUlMRURcbiIpOwotCX0KLSNlbmRpZgotCi19Ci0KLWNoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCi17Ci0JcmV0dXJuIHN0cjsKLX0KLQotCi0KLWludCBwY2liaW9zX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQotCXUxNiBjbWQsIG9sZF9jbWQ7Ci0JaW50IGlkeDsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnI7Ci0KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKLQlvbGRfY21kID0gY21kOwotCWZvciAoaWR4ID0gMDsgaWR4IDwgNjsgaWR4KyspIHsKLQkJciA9IGRldi0+cmVzb3VyY2UgKyBpZHg7Ci0JCWlmICghci0+c3RhcnQgJiYgci0+ZW5kKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIKLQkJCSAgICAgICAiUENJOiBEZXZpY2UgJXMgbm90IGF2YWlsYWJsZSBiZWNhdXNlIgotCQkJICAgICAgICIgb2YgcmVzb3VyY2UgY29sbGlzaW9uc1xuIiwKLQkJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfSU8pCi0JCQljbWQgfD0gUENJX0NPTU1BTkRfSU87Ci0JCWlmIChyLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQotCQkJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWTsKLQl9Ci0JaWYgKGNtZCAhPSBvbGRfY21kKSB7Ci0JCXByaW50aygiUENJOiBlbmFibGluZyBkZXZpY2UgJXMgKCUwNHggLT4gJTA0eClcbiIsCi0JCSAgICAgICBwY2lfbmFtZShkZXYpLCBvbGRfY21kLCBjbWQpOwotCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKLQl9Ci0JcmV0dXJuIDA7Ci0KLX0KLQotLyogV2Ugc2hvdWxkIGRvIHNvbWUgb3B0aW1pc2F0aW9uIHdvcmsgaGVyZSBJIHRoaW5rLiBPayBmb3Igbm93IHRob3VnaCAqLwotdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cykKLXsKLQotfQotCi12b2lkIHBjaWJpb3NfYWxpZ25fcmVzb3VyY2Uodm9pZCAqZGF0YSwgc3RydWN0IHJlc291cmNlICpyZXMsCi0JCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHNpemUpCi17Ci19Ci0KLXZvaWQgX19pbml0IHBjaWJpb3NfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcm9vdCwKLQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZXMsIGludCByZXNvdXJjZSkKLXsKLQotCXVuc2lnbmVkIGxvbmcgd2hlcmUsIHNpemU7Ci0JdTMyIHJlZzsKLQkKLQotCXByaW50aygiUENJOiBBc3NpZ25pbmcgJTNzICUwOGx4IHRvICVzXG4iLAotCSAgICAgICByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9JTyA/ICJJTyIgOiAiTUVNIiwKLQkgICAgICAgcmVzLT5zdGFydCwgZGV2LT5uYW1lKTsKLQotCXdoZXJlID0gUENJX0JBU0VfQUREUkVTU18wICsgcmVzb3VyY2UgKiA0OwotCXNpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQ7Ci0KLQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCB3aGVyZSwgJnJlZyk7Ci0JcmVnID0gKHJlZyAmIHNpemUpIHwgKCgodTMyKSAocmVzLT5zdGFydCAtIHJvb3QtPnN0YXJ0KSkgJiB+c2l6ZSk7Ci0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHdoZXJlLCByZWcpOwotfQotCi0KLXZvaWQgX19pbml0IHBjaWJpb3NfdXBkYXRlX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgaXJxKQotewotCXByaW50aygiUENJOiBBc3NpZ25pbmcgSVJRICUwMmQgdG8gJXNcbiIsIGlycSwgZGV2LT5uYW1lKTsKLQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGlycSk7Ci19Ci0KLS8qCi0gKiAgSWYgd2Ugc2V0IHVwIGEgZGV2aWNlIGZvciBidXMgbWFzdGVyaW5nLCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBsYXRlbmN5Ci0gKiAgdGltZXIgYXMgY2VydGFpbiBjcmFwcHkgQklPU2VzIGZvcmdldCB0byBzZXQgaXQgcHJvcGVybHkuCi0gKi8KLXVuc2lnbmVkIGludCBwY2liaW9zX21heF9sYXRlbmN5ID0gMjU1OwotCi12b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXU4IGxhdDsKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmbGF0KTsKLQlpZiAobGF0IDwgMTYpCi0JCWxhdCA9ICg2NCA8PSBwY2liaW9zX21heF9sYXRlbmN5KSA/IDY0IDogcGNpYmlvc19tYXhfbGF0ZW5jeTsKLQllbHNlIGlmIChsYXQgPiBwY2liaW9zX21heF9sYXRlbmN5KQotCQlsYXQgPSBwY2liaW9zX21heF9sYXRlbmN5OwotCWVsc2UKLQkJcmV0dXJuOwotCXByaW50aygiUENJOiBTZXR0aW5nIGxhdGVuY3kgdGltZXIgb2YgZGV2aWNlICVzIHRvICVkXG4iLCBwY2lfbmFtZShkZXYpLCBsYXQpOwotCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCBsYXQpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaW8uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDY3MWI2Yi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaW8uYworKysgL2Rldi9udWxsCkBAIC0xLDE3MiArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBJL08gcm91dGluZXMgZm9yIHVzZSBvbiB0aGUgb3ZlcmRyaXZlIGJvYXJkCi0gKgotICovCi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLQotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvb3ZlcmRyaXZlLmg+Ci0KLS8qCi0gKiByZWFkWC93cml0ZVgoKSBhcmUgdXNlZCB0byBhY2Nlc3MgbWVtb3J5IG1hcHBlZCBkZXZpY2VzLiBPbiBzb21lCi0gKiBhcmNoaXRlY3R1cmVzIHRoZSBtZW1vcnkgbWFwcGVkIElPIHN0dWZmIG5lZWRzIHRvIGJlIGFjY2Vzc2VkCi0gKiBkaWZmZXJlbnRseS4gT24gdGhlIFN1cGVySCBhcmNoaXRlY3R1cmUsIHdlIGp1c3QgcmVhZC93cml0ZSB0aGUKLSAqIG1lbW9yeSBsb2NhdGlvbiBkaXJlY3RseS4KLSAqLwotCi0jZGVmaW5lIGRwcmludGsoeC4uLikKLQotLyogVHJhbnNsYXRlcyBhbiBJTyBhZGRyZXNzIHRvIHdoZXJlIGl0IGlzIG1hcHBlZCBpbiBtZW1vcnkgKi8KLQotI2RlZmluZSBpb19hZGRyKHgpICgoKHVuc2lnbmVkKSh4KSl8UENJX0dUSU9fQkFTRSkKLQotdW5zaWduZWQgY2hhciBvZF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQotewotZHByaW50aygib2RfaW5iKCV4KVxuIiwgcG9ydCk7Ci0JcmV0dXJuIHJlYWRiKGlvX2FkZHIocG9ydCkpICYgMHhmZjsKLX0KLQotCi11bnNpZ25lZCBzaG9ydCBvZF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQotewotZHByaW50aygib2RfaW53KCV4KVxuIiwgcG9ydCk7Ci0JcmV0dXJuIHJlYWR3KGlvX2FkZHIocG9ydCkpICYgMHhmZmZmOwotfQotCi11bnNpZ25lZCBpbnQgb2RfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLWRwcmludGsoIm9kX2lubCgleClcbiIsIHBvcnQpOwotCXJldHVybiByZWFkbChpb19hZGRyKHBvcnQpKTsKLX0KLQotdm9pZCBvZF9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLWRwcmludGsoIm9kX291dGIoJXgsICV4KVxuIiwgdmFsdWUsIHBvcnQpOwotCXdyaXRlYih2YWx1ZSwgaW9fYWRkcihwb3J0KSk7Ci19Ci0KLXZvaWQgb2Rfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotZHByaW50aygib2Rfb3V0dygleCwgJXgpXG4iLCB2YWx1ZSwgcG9ydCk7Ci0Jd3JpdGV3KHZhbHVlLCBpb19hZGRyKHBvcnQpKTsKLX0KLQotdm9pZCBvZF9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQotewotZHByaW50aygib2Rfb3V0bCgleCwgJXgpXG4iLCB2YWx1ZSwgcG9ydCk7Ci0Jd3JpdGVsKHZhbHVlLCBpb19hZGRyKHBvcnQpKTsKLX0KLQotLyogVGhpcyBpcyBob3JyaWJsZSBhdCB0aGUgbW9tZW50IC0gbmVlZHMgbW9yZSB3b3JrIHRvIGRvIHNvbWV0aGluZyBzZW5zaWJsZSAqLwotI2RlZmluZSBJT19ERUxBWSgpIHVkZWxheSgxMCkKLQotI2RlZmluZSBPVVRfREVMQVkoeCx0eXBlKSBcCi12b2lkIG9kX291dCMjeCMjX3AodW5zaWduZWQgdHlwZSB2YWx1ZSx1bnNpZ25lZCBsb25nIHBvcnQpe291dCMjeCh2YWx1ZSxwb3J0KTtJT19ERUxBWSgpO30KLQotI2RlZmluZSBJTl9ERUxBWSh4LHR5cGUpIFwKLXVuc2lnbmVkIHR5cGUgb2RfaW4jI3gjI19wKHVuc2lnbmVkIGxvbmcgcG9ydCkge3Vuc2lnbmVkIHR5cGUgdG1wPWluIyN4KHBvcnQpO0lPX0RFTEFZKCk7cmV0dXJuIHRtcDt9Ci0KLQotT1VUX0RFTEFZKGIsY2hhcikKLU9VVF9ERUxBWSh3LHNob3J0KQotT1VUX0RFTEFZKGwsaW50KQotCi1JTl9ERUxBWShiLGNoYXIpCi1JTl9ERUxBWSh3LHNob3J0KQotSU5fREVMQVkobCxpbnQpCi0KLQotLyogIE5vdyBmb3IgdGhlIHN0cmluZyB2ZXJzaW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyAqLwotdm9pZCBvZF9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcCsrKSB7Ci0JCW91dGIoKnAsIHBvcnQpOwotCX0KLX0KLQotCi12b2lkIG9kX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQotewotCWludCBpOwotCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHArKykgewotCQkqcCA9IGluYihwb3J0KTsKLQl9Ci19Ci0KLS8qIEZvciB0aGUgMTYgYW5kIDMyIGJpdCBzdHJpbmcgZnVuY3Rpb25zLCB3ZSBoYXZlIHRvIHdvcnJ5IGFib3V0IGFsaWdubWVudC4KLSAqIFRoZSBTSCBkb2VzIG5vdCBkbyB1bmFsaWduZWQgYWNjZXNzZXMsIHNvIHdlIGhhdmUgdG8gcmVhZCBhcyBieXRlcyBhbmQKLSAqIHRoZW4gd3JpdGUgYXMgYSB3b3JkIG9yIGR3b3JkLiAKLSAqIFRoaXMgY2FuIGJlIG9wdGltaXNlZCBhIGxvdCBtb3JlLCBlc3BlY2lhbGx5IGluIHRoZSBjYXNlIHdoZXJlIHRoZSBkYXRhCi0gKiBpcyBhbGlnbmVkCi0gKi8KLQotdm9pZCBvZF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgc2hvcnQgdG1wOwotCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHAgKz0gMikgewotCQl0bXAgPSAoKnApIHwgKCgqKHAgKyAxKSkgPDwgOCk7Ci0JCW91dHcodG1wLCBwb3J0KTsKLQl9Ci19Ci0KLQotdm9pZCBvZF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCBzaG9ydCB0bXA7Ci0JdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcCArPSAyKSB7Ci0JCXRtcCA9IGludyhwb3J0KTsKLQkJcFswXSA9IHRtcCAmIDB4ZmY7Ci0JCXBbMV0gPSAodG1wID4+IDgpICYgMHhmZjsKLQl9Ci19Ci0KLQotdm9pZCBvZF9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCi17Ci0JaW50IGk7Ci0JdW5zaWduZWQgdG1wOwotCXVuc2lnbmVkIGNoYXIgKnAgPSAodW5zaWduZWQgY2hhciAqKSBhZGRyOwotCi0JZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyssIHAgKz0gNCkgewotCQl0bXAgPSAoKnApIHwgKCgqKHAgKyAxKSkgPDwgOCkgfCAoKCoocCArIDIpKSA8PCAxNikgfAotCQkgICAgICAoKCoocCArIDMpKSA8PCAyNCk7Ci0JCW91dGwodG1wLCBwb3J0KTsKLQl9Ci19Ci0KLQotdm9pZCBvZF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKLXsKLQlpbnQgaTsKLQl1bnNpZ25lZCB0bXA7Ci0JdW5zaWduZWQgY2hhciAqcCA9ICh1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKywgcCArPSA0KSB7Ci0JCXRtcCA9IGlubChwb3J0KTsKLQkJcFswXSA9IHRtcCAmIDB4ZmY7Ci0JCXBbMV0gPSAodG1wID4+IDgpICYgMHhmZjsKLQkJcFsyXSA9ICh0bXAgPj4gMTYpICYgMHhmZjsKLQkJcFszXSA9ICh0bXAgPj4gMjQpICYgMHhmZjsKLQotCX0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9pcnEuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWQ3MzBjNy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvaXJxLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTEgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoKLSAqIExvb2tzIGFmdGVyIGludGVycnVwdHMgb24gdGhlIG92ZXJkcml2ZSBib2FyZC4KLSAqCi0gKiBCYXNlcyBvbiB0aGUgSVBSIGlycSBzeXN0ZW0KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotCi0jaW5jbHVkZSA8YXNtL292ZXJkcml2ZS9vdmVyZHJpdmUuaD4KLQotc3RydWN0IG9kX2RhdGEgewotCWludCBvdmVyZHJpdmVfaXJxOwotCWludCBpcnFfbWFzazsKLX07Ci0KLSNkZWZpbmUgTlVNX0VYVEVSTkFMX0lSUVMgMTYKLSNkZWZpbmUgRVhURVJOQUxfSVJRX05PVF9JTl9VU0UgKC0xKQotI2RlZmluZSBFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVEICgtMSkKLQotLyoKLSAqIFRoaXMgdGFibGUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0byBwcm9ncmFtIGludG8gdGhlIEZQR0EncyBDVCByZWdpc3RlcgotICogZm9yIHRoZSBzcGVjaWZpZWQgTGludXggSVJRLgotICoKLSAqIFRoZSBpcnFfbWFzayBnaXZlcyB0aGUgaW50ZXJydXB0IG51bWJlciBmcm9tIHRoZSBQQ0kgYm9hcmQgKFBDSV9JbnQoNjowKSkKLSAqIGJ1dCBpcyBvbmUgZ3JlYXRlciB0aGFuIHRoYXQgYmVjYXVzZSB0aGUgYmVjYXVzZSB0aGUgRlBHQSB0cmVhdHMgMAotICogYXMgZGlzYWJsZWQsIGEgdmFsdWUgb2YgMSBhc3NlcnRzIFBDSV9JbnQwLCBhbmQgc28gb24uCi0gKgotICogVGhlIG92ZXJkcml2ZV9pcnEgc3BlY2lmaWVzIHdoaWNoIG9mIHRoZSBlaWdodCBpbnRlcnJ1cHQgc291cmNlcyBnZW5lcmF0ZXMKLSAqIHRoYXQgaW50ZXJydXB0LCBhbmQgYnV0IGlzIG11bHRpcGxpZWQgYnkgZm91ciB0byBnaXZlIHRoZSBiaXQgb2Zmc2V0IGludG8KLSAqIHRoZSBDVCByZWdpc3Rlci4KLSAqCi0gKiBUaGUgc2V2ZW4gaW50ZXJydXB0cyBsZXZlbHMgKFNINCBJUkwncykgd2UgaGF2ZSBhdmFpbGFibGUgaGVyZSBpcyBoYXJkd2lyZWQKLSAqIGJ5IHRoZSBFUExELiBUaGUgYXNzaWdubWVudHMgaGVyZSBvZiB3aGljaCBQQ0kgaW50ZXJydXB0IGdlbmVyYXRlcyBlYWNoCi0gKiBsZXZlbCBpcyBhcmJpdGFyeS4KLSAqLwotc3RhdGljIHN0cnVjdCBvZF9kYXRhIG9kX2RhdGFfdGFibGVbTlVNX0VYVEVSTkFMX0lSUVNdID0gewotCS8qICAgIG92ZXJkcml2ZV9pcnEgICAgICAgLCBpcnFfbWFzayAqLwotCXtFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVELCBFWFRFUk5BTF9JUlFfTk9UX0lOX1VTRX0sCS8qIDAgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgN30sCS8qIDEgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgNn0sCS8qIDIgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgRVhURVJOQUxfSVJRX05PVF9JTl9VU0V9LAkvKiAzICovCi0Je0VYVEVSTkFMX0lSUV9OT1RfQVNTSUdORUQsIDV9LAkvKiA0ICovCi0Je0VYVEVSTkFMX0lSUV9OT1RfQVNTSUdORUQsIEVYVEVSTkFMX0lSUV9OT1RfSU5fVVNFfSwJLyogNSAqLwotCXtFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVELCBFWFRFUk5BTF9JUlFfTk9UX0lOX1VTRX0sCS8qIDYgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgNH0sCS8qIDcgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgRVhURVJOQUxfSVJRX05PVF9JTl9VU0V9LAkvKiA4ICovCi0Je0VYVEVSTkFMX0lSUV9OT1RfQVNTSUdORUQsIEVYVEVSTkFMX0lSUV9OT1RfSU5fVVNFfSwJLyogOSAqLwotCXtFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVELCAzfSwJLyogMTAgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgMn0sCS8qIDExICovCi0Je0VYVEVSTkFMX0lSUV9OT1RfQVNTSUdORUQsIEVYVEVSTkFMX0lSUV9OT1RfSU5fVVNFfSwJLyogMTIgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgMX0sCS8qIDEzICovCi0Je0VYVEVSTkFMX0lSUV9OT1RfQVNTSUdORUQsIEVYVEVSTkFMX0lSUV9OT1RfSU5fVVNFfSwJLyogMTQgKi8KLQl7RVhURVJOQUxfSVJRX05PVF9BU1NJR05FRCwgRVhURVJOQUxfSVJRX05PVF9JTl9VU0V9CS8qIDE1ICovCi19OwotCi1zdGF0aWMgdm9pZCBzZXRfb2RfZGF0YShpbnQgb3ZlcmRyaXZlX2lycSwgaW50IGlycSkKLXsKLQlpZiAoaXJxID49IE5VTV9FWFRFUk5BTF9JUlFTIHx8IGlycSA8IDApCi0JCXJldHVybjsKLQlvZF9kYXRhX3RhYmxlW2lycV0ub3ZlcmRyaXZlX2lycSA9IG92ZXJkcml2ZV9pcnEgPDwgMjsKLX0KLQotc3RhdGljIHZvaWQgZW5hYmxlX29kX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKLXZvaWQgZGlzYWJsZV9vZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLS8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCi0jZGVmaW5lIHNodXRkb3duX29kX2lycSBkaXNhYmxlX29kX2lycQotCi1zdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfb2QodW5zaWduZWQgaW50KTsKLXN0YXRpYyB2b2lkIGVuZF9vZF9pcnEodW5zaWduZWQgaW50IGlycSk7Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc3RhcnR1cF9vZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQllbmFibGVfb2RfaXJxKGlycSk7Ci0JcmV0dXJuIDA7CQkvKiBuZXZlciBhbnl0aGluZyBwZW5kaW5nICovCi19Ci0KLXN0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgb2RfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIk92ZXJkcml2ZS1JUlEiLAotCS5zdGFydHVwID0gc3RhcnR1cF9vZF9pcnEsCi0JLnNodXRkb3duID0gc2h1dGRvd25fb2RfaXJxLAotCS5lbmFibGUgPSBlbmFibGVfb2RfaXJxLAotCS5kaXNhYmxlID0gZGlzYWJsZV9vZF9pcnEsCi0JLmFjayA9IG1hc2tfYW5kX2Fja19vZCwKLQkuZW5kID0gZW5kX29kX2lycQotfTsKLQotc3RhdGljIHZvaWQgZGlzYWJsZV9vZF9pcnEodW5zaWduZWQgaW50IGlycSkKLXsKLQl1bnNpZ25lZCB2YWwsIGZsYWdzOwotCWludCBvdmVyZHJpdmVfaXJxOwotCXVuc2lnbmVkIG1hc2s7Ci0KLQkvKiBOb3QgYSB2YWxpZCBpbnRlcnJ1cHQgKi8KLQlpZiAoaXJxIDwgMCB8fCBpcnEgPj0gTlVNX0VYVEVSTkFMX0lSUVMpCi0JCXJldHVybjsKLQotICAgICAgICAvKiBJcyBpcyBuZWNlc3NhcnkgdG8gdXNlIGEgY2xpIGhlcmU/IFdvdWxkIGEgc3BpbmxvY2sgbm90IGJlIAotICAgICAgICAgKiBtcm9lIGVmZmljaWVudD8KLSAgICAgICAgICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW92ZXJkcml2ZV9pcnEgPSBvZF9kYXRhX3RhYmxlW2lycV0ub3ZlcmRyaXZlX2lycTsKLQlpZiAob3ZlcmRyaXZlX2lycSAhPSBFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVEKSB7Ci0JCW1hc2sgPSB+KDB4NyA8PCBvdmVyZHJpdmVfaXJxKTsKLQkJdmFsID0gY3RybF9pbmwoT1ZFUkRSSVZFX0lOVF9DVCk7Ci0JCXZhbCAmPSBtYXNrOwotCQljdHJsX291dGwodmFsLCBPVkVSRFJJVkVfSU5UX0NUKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi1zdGF0aWMgdm9pZCBlbmFibGVfb2RfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JdW5zaWduZWQgdmFsLCBmbGFnczsKLQlpbnQgb3ZlcmRyaXZlX2lycTsKLQl1bnNpZ25lZCBtYXNrOwotCi0JLyogTm90IGEgdmFsaWQgaW50ZXJydXB0ICovCi0JaWYgKGlycSA8IDAgfHwgaXJxID49IE5VTV9FWFRFUk5BTF9JUlFTKQotCQlyZXR1cm47Ci0KLQkvKiBTZXQgcHJpb3JpdHkgaW4gT0QgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkvKiBUaGlzIG9uZSBpcyBub3QgaW4gdXNlIGN1cnJlbnRseSAqLwotCW92ZXJkcml2ZV9pcnEgPSBvZF9kYXRhX3RhYmxlW2lycV0ub3ZlcmRyaXZlX2lycTsKLQlpZiAob3ZlcmRyaXZlX2lycSAhPSBFWFRFUk5BTF9JUlFfTk9UX0FTU0lHTkVEKSB7Ci0JCXZhbCA9IGN0cmxfaW5sKE9WRVJEUklWRV9JTlRfQ1QpOwotCQltYXNrID0gfigweDcgPDwgb3ZlcmRyaXZlX2lycSk7Ci0JCXZhbCAmPSBtYXNrOwotCQltYXNrID0gb2RfZGF0YV90YWJsZVtpcnFdLmlycV9tYXNrIDw8IG92ZXJkcml2ZV9pcnE7Ci0JCXZhbCB8PSBtYXNrOwotCQljdHJsX291dGwodmFsLCBPVkVSRFJJVkVfSU5UX0NUKTsKLQl9Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0KLQotLyogdGhpcyBmdW5jdGlvbnMgc2V0cyB0aGUgZGVzaXJlZCBpcnEgaGFuZGxlciB0byBiZSBhbiBvdmVyZHJpdmUgdHlwZSAqLwotc3RhdGljIHZvaWQgX19pbml0IG1ha2Vfb2RfaXJxKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7Ci0JaXJxX2Rlc2NbaXJxXS5jaGlwID0gJm9kX2lycV90eXBlOwotCWRpc2FibGVfb2RfaXJxKGlycSk7Ci19Ci0KLQotc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX29kKHVuc2lnbmVkIGludCBpcnEpCi17Ci0JZGlzYWJsZV9vZF9pcnEoaXJxKTsKLX0KLQotc3RhdGljIHZvaWQgZW5kX29kX2lycSh1bnNpZ25lZCBpbnQgaXJxKQotewotCWVuYWJsZV9vZF9pcnEoaXJxKTsKLX0KLQotdm9pZCBfX2luaXQgaW5pdF9vdmVyZHJpdmVfaXJxKHZvaWQpCi17Ci0JaW50IGk7Ci0KLQkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzICovCi0JY3RybF9vdXRsKDAsIE9WRVJEUklWRV9JTlRfQ1QpOwotCi0JLyogVXBkYXRlIGludGVycnVwdCBwaW4gbW9kZSB0byB1c2UgZW5jb2RlZCBpbnRlcnJ1cHRzICovCi0JaSA9IGN0cmxfaW53KElOVENfSUNSKTsKLQlpICY9IH5JTlRDX0lDUl9JUkxNOwotCWN0cmxfb3V0dyhpLCBJTlRDX0lDUik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX0lSUVM7IGkrKykgewotCQlpZiAob2RfZGF0YV90YWJsZVtpXS5pcnFfbWFzayAhPSBFWFRFUk5BTF9JUlFfTk9UX0lOX1VTRSkgewotCQkJbWFrZV9vZF9pcnEoaSk7Ci0JCX0gZWxzZSBpZiAoaSAhPSAxNSkgewkvLyBDYW5ub3QgdXNlIGltYXNrIG9uIGxldmVsIDE1Ci0JCQltYWtlX2ltYXNrX2lycShpKTsKLQkJfQotCX0KLQotCS8qIFNldCB1cCB0aGUgaW50ZXJydXB0cyAqLwotCXNldF9vZF9kYXRhKE9WRVJEUklWRV9QQ0lfSU5UQSwgT1ZFUkRSSVZFX1BDSV9JUlExKTsKLQlzZXRfb2RfZGF0YShPVkVSRFJJVkVfUENJX0lOVEIsIE9WRVJEUklWRV9QQ0lfSVJRMik7Ci0Jc2V0X29kX2RhdGEoT1ZFUkRSSVZFX0FVRElPX0lOVCwgT1ZFUkRSSVZFX0VTU19JUlEpOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL2xlZC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NjBkN2YyLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDU4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL292ZXJkcml2ZS9sZWQuYwotICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBTdHVhcnQgTWVuZWZ5IDxzdHVhcnQubWVuZWZ5QHN0LmNvbT4KLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogVGhpcyBmaWxlIGNvbnRhaW5zIGFuIE92ZXJkcml2ZSBzcGVjaWZpYyBMRUQgZmVhdHVyZS4KLSAqLwotCi0jaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvb3ZlcmRyaXZlLmg+Ci0KLXN0YXRpYyB2b2lkIG1hY2hfbGVkKGludCBwb3NpdGlvbiwgaW50IHZhbHVlKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyByZWc7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCi0JcmVnID0gcmVhZGwoT1ZFUkRSSVZFX0NUUkwpOwotCWlmICh2YWx1ZSkgewotCQlyZWcgfD0gKDE8PDMpOwotCX0gZWxzZSB7Ci0JCXJlZyAmPSB+KDE8PDMpOwotCX0KLQl3cml0ZWwocmVnLCBPVkVSRFJJVkVfQ1RSTCk7Ci0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCi0vKiBhY3RzIGxpa2UgYW4gYWN0dWFsIGhlYXJ0IGJlYXQgLS0gaWUgdGh1bXAtdGh1bXAtcGF1c2UuLi4gKi8KLXZvaWQgaGVhcnRiZWF0X29kKHZvaWQpCi17Ci0Jc3RhdGljIHVuc2lnbmVkIGNudCA9IDAsIHBlcmlvZCA9IDAsIGRpc3QgPSAwOwotCi0JaWYgKGNudCA9PSAwIHx8IGNudCA9PSBkaXN0KQotCQltYWNoX2xlZCggLTEsIDEpOwotCWVsc2UgaWYgKGNudCA9PSA3IHx8IGNudCA9PSBkaXN0KzcpCi0JCW1hY2hfbGVkKCAtMSwgMCk7Ci0KLQlpZiAoKytjbnQgPiBwZXJpb2QpIHsKLQkJY250ID0gMDsKLQkJLyogVGhlIGh5cGVyYm9saWMgZnVuY3Rpb24gYmVsb3cgbW9kaWZpZXMgdGhlIGhlYXJ0YmVhdCBwZXJpb2QKLQkJICogbGVuZ3RoIGluIGRlcGVuZGVuY3kgb2YgdGhlIGN1cnJlbnQgKDVtaW4pIGxvYWQuIEl0IGdvZXMKLQkJICogdGhyb3VnaCB0aGUgcG9pbnRzIGYoMCk9MTI2LCBmKDEpPTg2LCBmKDUpPTUxLAotCQkgKiBmKGluZiktPjMwLiAqLwotCQlwZXJpb2QgPSAoKDY3Mjw8RlNISUZUKS8oNSphdmVucnVuWzBdKyg3PDxGU0hJRlQpKSkgKyAzMDsKLQkJZGlzdCA9IHBlcmlvZCAvIDQ7Ci0JfQotfQotI2VuZGlmIC8qIENPTkZJR19IRUFSVEJFQVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvbWFjaC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyODM0YTAzLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9tYWNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2MiArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9vdmVyZHJpdmUvbWFjaC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBNYWNoaW5lIHZlY3RvciBmb3IgdGhlIFNUTWljcm9lbGVjdHJvbmljcyBPdmVyZHJpdmUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvX3Vua25vd24uaD4KLSNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvaW8uaD4KLQotdm9pZCBoZWFydGJlYXRfb2Qodm9pZCk7Ci12b2lkIGluaXRfb3ZlcmRyaXZlX2lycSh2b2lkKTsKLXZvaWQgZ2FsaWxlb19wY2liaW9zX2luaXQodm9pZCk7Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfb2QgX19pbml0bXYgPSB7Ci0JLm12X25yX2lycXMJCT0gNDgsCi0KLQkubXZfaW5iCQkJPSBvZF9pbmIsCi0JLm12X2ludwkJCT0gb2RfaW53LAotCS5tdl9pbmwJCQk9IG9kX2lubCwKLQkubXZfb3V0YgkJPSBvZF9vdXRiLAotCS5tdl9vdXR3CQk9IG9kX291dHcsCi0JLm12X291dGwJCT0gb2Rfb3V0bCwKLQotCS5tdl9pbmJfcAkJPSBvZF9pbmJfcCwKLQkubXZfaW53X3AJCT0gb2RfaW53X3AsCi0JLm12X2lubF9wCQk9IG9kX2lubF9wLAotCS5tdl9vdXRiX3AJCT0gb2Rfb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gb2Rfb3V0d19wLAotCS5tdl9vdXRsX3AJCT0gb2Rfb3V0bF9wLAotCi0JLm12X2luc2IJCT0gb2RfaW5zYiwKLQkubXZfaW5zdwkJPSBvZF9pbnN3LAotCS5tdl9pbnNsCQk9IG9kX2luc2wsCi0JLm12X291dHNiCQk9IG9kX291dHNiLAotCS5tdl9vdXRzdwkJPSBvZF9vdXRzdywKLQkubXZfb3V0c2wJCT0gb2Rfb3V0c2wsCi0KLSNpZmRlZiBDT05GSUdfUENJCi0JLm12X2luaXRfaXJxCQk9IGluaXRfb3ZlcmRyaXZlX2lycSwKLSNlbmRpZgotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9vZCwKLSNlbmRpZgotfTsKLQotQUxJQVNfTVYob2QpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvcGNpZG1hLmMgYi9hcmNoL3NoL2JvYXJkcy9vdmVyZHJpdmUvcGNpZG1hLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjOWJmZWQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3BjaWRtYS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoKLSAqIER5bmFtaWMgRE1BIG1hcHBpbmcgc3VwcG9ydC4KLSAqCi0gKiBPbiB0aGUgb3ZlcmRyaXZlLCB3ZSBjYW4gb25seSBETUEgZnJvbSBtZW1vcnkgYmVoaW5kIHRoZSBQQ0kgYnVzIQotICogdGhpcyBtZWFucyB0aGF0IGFsbCBETUEnYWJsZSBtZW1vcnkgbXVzdCBjb21lIGZyb20gdGhlcmUuIAotICogdGhpcyByZXN0cmljdGlvbiB3aWxsIG5vdCBhcHBseSB0byBsYXRlciBib2FyZHMuCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLQotdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSAgIGRtYV9hZGRyX3QgKiBkbWFfaGFuZGxlKQotewotCXZvaWQgKnJldDsKLQlpbnQgZ2ZwID0gR0ZQX0FUT01JQzsKLQotICAgICAgICBwcmludGsoIkJVRzogcGNpX2FsbG9jX2NvbnNpc3RlbnQoKSBjYWxsZWQgLSBub3QgeWV0IHN1cHBvcnRlZFxuIik7Ci0JLyogV2UgQUxXQVlTIG5lZWQgRE1BIG1lbW9yeSBvbiB0aGUgb3ZlcmRyaXZlIGhhcmR3YXJlLAotCSAqIGR1ZSB0byBpdCdzIGV4dHJlbWUgd2VpcmRuZXNzCi0JICogTmVlZCB0byBmbHVzaCB0aGUgY2FjaGUgaGVyZSBhcyB3ZWxsLCBzaW5jZSB0aGUgbWVtb3J5Ci0JICogY2FuIHN0aWxsIGJlIHNlZW4gdGhyb3VnaCB0aGUgY2FjaGUhCi0JICovCi0JZ2ZwIHw9IEdGUF9ETUE7Ci0JcmV0ID0gKHZvaWQgKikgX19nZXRfZnJlZV9wYWdlcyhnZnAsIGdldF9vcmRlcihzaXplKSk7Ci0KLQlpZiAocmV0ICE9IE5VTEwpIHsKLQkJbWVtc2V0KHJldCwgMCwgc2l6ZSk7Ci0JCSpkbWFfaGFuZGxlID0gdmlydF90b19idXMocmV0KTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotdm9pZCBwY2lfZnJlZV9jb25zaXN0ZW50KHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc2l6ZV90IHNpemUsCi0JCQkgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSB2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL292ZXJkcml2ZS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3NldHVwLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGEzYTc3NDQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvb3ZlcmRyaXZlL3NldHVwLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0vKgotICogYXJjaC9zaC9vdmVyZHJpdmUvc2V0dXAuYwotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogU1RNaWNyb2VsZWN0cm9uaWNzIE92ZXJkcml2ZSBTdXBwb3J0LgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0KLSNpbmNsdWRlIDxhc20vb3ZlcmRyaXZlL292ZXJkcml2ZS5oPgotI2luY2x1ZGUgPGFzbS9vdmVyZHJpdmUvZnBnYS5oPgotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIlNINzc1MCBPdmVyZHJpdmUiOwotfQotCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKLSAqLwotaW50IF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQotewotI2lmZGVmIENPTkZJR19QQ0kKLQlpbml0X292ZXJkcml2ZV9mcGdhKCk7Ci0JZ2FsaWxlb19pbml0KCk7Ci0jZW5kaWYKLQotICAgICAgICAvKiBFbmFibGUgUlMyMzIgcmVjZWl2ZSBidWZmZXJzICovCi0Jd3JpdGVsKDB4MWUsIE9WRVJEUklWRV9DVFJMKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvZWRvc2s3NzA1L01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvTWFrZWZpbGUKaW5kZXggN2ZjY2JmMi4uMTRiZGQ1MyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvTWFrZWZpbGUKQEAgLTEsMTAgKzEsNiBAQAogIwogIyBNYWtlZmlsZSBmb3IgdGhlIEVET1NLNzcwNSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCi0jIE5vdGUhIERlcGVuZGVuY2llcyBhcmUgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5ICdtYWtlIGRlcCcsIHdoaWNoIGFsc28KLSMgcmVtb3ZlcyBhbnkgb2xkIGRlcGVuZGVuY2llcy4gRE9OJ1QgcHV0IHlvdXIgb3duIGRlcGVuZGVuY2llcyBoZXJlCi0jIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KLSMKIAogb2JqLXkJIDo9IHNldHVwLm8gaW8ubwogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2Vkb3NrNzcwNS9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9lZG9zazc3MDUvc2V0dXAuYwppbmRleCBiYTE0M2ZhLi5lYzViZTAxIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2Vkb3NrNzcwNS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvZWRvc2s3NzA1L3NldHVwLmMKQEAgLTgsMTkgKzgsMjEgQEAKICAqIE1vZGlmaWVkIGZvciBlZG9zazc3MDUgZGV2ZWxvcG1lbnQKICAqIGJvYXJkIGJ5IFMuIER1bm4sIDIwMDMuCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KICNpbmNsdWRlIDxhc20vZWRvc2s3NzA1L2lvLmg+CiAKLXN0YXRpYyB2b2lkIGluaXRfZWRvc2s3NzA1KHZvaWQpOworc3RhdGljIHZvaWQgX19pbml0IHNoX2Vkb3NrNzcwNV9pbml0X2lycSh2b2lkKQoreworCS8qIFRoaXMgaXMgdGhlIEV0aGVybmV0IGludGVycnVwdCAqLworCW1ha2VfaW1hc2tfaXJxKDB4MDkpOworfQogCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KLQogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X2Vkb3NrNzcwNSBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiRURPU0s3NzA1IiwKIAkubXZfbnJfaXJxcwkJPSA4MCwKIAogCS5tdl9pbmIJCQk9IHNoX2Vkb3NrNzcwNV9pbmIsCkBAIC0zNywyMyArMzksNiBAQAogCS5tdl9vdXRzbAkJPSBzaF9lZG9zazc3MDVfb3V0c2wsCiAKIAkubXZfaXNhX3BvcnQyYWRkcgk9IHNoX2Vkb3NrNzcwNV9pc2FfcG9ydDJhZGRyLAotCS5tdl9pbml0X2lycQkJPSBpbml0X2Vkb3NrNzcwNSwKKwkubXZfaW5pdF9pcnEJCT0gc2hfZWRvc2s3NzA1X2luaXRfaXJxLAogfTsKIEFMSUFTX01WKGVkb3NrNzcwNSkKLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfZWRvc2s3NzA1KHZvaWQpCi17Ci0JLyogVGhpcyBpcyB0aGUgRXRoZXJuZXQgaW50ZXJydXB0ICovCi0JbWFrZV9pbWFza19pcnEoMHgwOSk7Ci19Ci0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiRURPU0s3NzA1IjsKLX0KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQkvKiBOb3RoaW5nIC4uICovCi19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvS2NvbmZpZyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzQzYmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9LY29uZmlnCkBAIC0wLDAgKzEsMTIgQEAKK2lmIFNIX0hTNzc1MVJWT0lQCisKK21lbnUgIkhTNzc1MVJWb0lQIG9wdGlvbnMiCisKK2NvbmZpZyBIUzc3NTFSVk9JUF9DT0RFQworCWJvb2wgIlN1cHBvcnQgVm9JUCBDb2RlYyBzZWN0aW9uIgorCWhlbHAKKwkgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiB3aWxsIHN1cHBvcnQgQ09ERUMgc2VjdGlvbi4KKworZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvTWFrZWZpbGUKaW5kZXggZThiNDEwOS4uZTYyNjM3NyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL01ha2VmaWxlCkBAIC0xLDEyICsxLDggQEAKICMKICMgTWFrZWZpbGUgZm9yIHRoZSBIUzc3NTFSVm9JUCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCi0jIE5vdGUhIERlcGVuZGVuY2llcyBhcmUgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5ICdtYWtlIGRlcCcsIHdoaWNoIGFsc28KLSMgcmVtb3ZlcyBhbnkgb2xkIGRlcGVuZGVuY2llcy4gRE9OJ1QgcHV0IHlvdXIgb3duIGRlcGVuZGVuY2llcyBoZXJlCi0jIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KLSMKIAotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KK29iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KIAogb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pby5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pby5jCmluZGV4IDNhMWFiZmEuLjllYTExMzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lvLmMKQEAgLTEwLDIxICsxMCwxNiBAQAogICogcGxhY2Vob2xkZXIgY29kZSBmcm9tIGlvX2hzNzc1MXJ2b2lwLmMgbGVmdCBpbiB3aXRoIHRoZQogICogZXhwZWN0YXRpb24gb2YgbGF0ZXIgU3VwZXJJTyBhbmQgUENNQ0lBIGFjY2Vzcy4KICAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmgiCi0KLWV4dGVybiB2b2lkICphcmVhNV9pbzhfYmFzZTsJLyogQXJlYSA1IDhiaXQgSS9PIEJhc2UgYWRkcmVzcyAqLwogZXh0ZXJuIHZvaWQgKmFyZWE2X2lvOF9iYXNlOwkvKiBBcmVhIDYgOGJpdCBJL08gQmFzZSBhZGRyZXNzICovCiBleHRlcm4gdm9pZCAqYXJlYTVfaW8xNl9iYXNlOwkvKiBBcmVhIDUgMTZiaXQgSS9PIEJhc2UgYWRkcmVzcyAqLwotZXh0ZXJuIHZvaWQgKmFyZWE2X2lvMTZfYmFzZTsJLyogQXJlYSA2IDE2Yml0IEkvTyBCYXNlIGFkZHJlc3MgKi8KIAogLyoKICAqIFRoZSA3NzUxUiBIUzc3NTFSVm9JUCB1c2VzIHRoZSBidWlsdC1pbiBQQ0kgY29udHJvbGxlciAoUENJQykKQEAgLTMzLDI1ICsyOCw4IEBACiAgKiBsaWtlIHRoZSBvdGhlciBTb2x1dGlvbiBFbmdpbmUgYm9hcmRzLgogICovCiAKLSNkZWZpbmUgUENJSU9CUgkJKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lJT0JSKQotI2RlZmluZSBQQ0lNQlIgICAgICAgICAgKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lNQlIpCi0jZGVmaW5lIFBDSV9JT19BUkVBCVNINzc1MV9QQ0lfSU9fQkFTRQotI2RlZmluZSBQQ0lfTUVNX0FSRUEJU0g3NzUxX1BDSV9DT05GSUdfQkFTRQotCi0jZGVmaW5lIFBDSV9JT01BUChhZHIpCShQQ0lfSU9fQVJFQSArIChhZHIgJiB+U0g3NzUxX1BDSUlPQlJfTUFTSykpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19IUzc3NTFSVk9JUF9DT0RFQykKICNkZWZpbmUgQ09ERUNfSU9fQkFTRQkweDEwMDAKLSNlbmRpZgotCi0jZGVmaW5lIG1heWJlYmFkaW8obmFtZSxwb3J0KSBcCi0gIHByaW50aygiYmFkIFBDLWxpa2UgaW8gJXMgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JICNuYW1lLCAocG9ydCksIChfX3UzMikgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZGVsYXkodm9pZCkKLXsKLQljdHJsX2ludygweGEwMDAwMDAwKTsKLX0KKyNkZWZpbmUgQ09ERUNfSU9NQVAoYSkJKCh1bnNpZ25lZCBsb25nKWFyZWE2X2lvOF9iYXNlICsgKChhKSAtIENPREVDX0lPX0JBU0UpKQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG9ydDJhZHIodW5zaWduZWQgaW50IHBvcnQpCiB7CkBAIC01OSw5ICszNywxMCBAQAogCQlpZiAocG9ydCA9PSAweDNmNikKIAkJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpYXJlYTVfaW8xNl9iYXNlICsgMHgwYyk7CiAJCWVsc2UKLQkJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpYXJlYTVfaW8xNl9iYXNlICsgMHg4MDAgKyAoKHBvcnQtMHgxZjApIDw8IDEpKTsKKwkJCXJldHVybiAoKHVuc2lnbmVkIGxvbmcpYXJlYTVfaW8xNl9iYXNlICsgMHg4MDAgKworCQkJCSgocG9ydC0weDFmMCkgPDwgMSkpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhwb3J0MmFkciwgKHVuc2lnbmVkIGxvbmcpcG9ydCk7CisJCW1heWJlYmFkaW8oKHVuc2lnbmVkIGxvbmcpcG9ydCk7CiAJcmV0dXJuIHBvcnQ7CiB9CiAKQEAgLTc4LDI1ICs1NywxMCBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfSFM3NzUxUlZPSVBfQ09ERUMpCi1zdGF0aWMgaW5saW5lIGludAotY29kZWNfcG9ydCh1bnNpZ25lZCBsb25nIHBvcnQpCi17Ci0JaWYgKENPREVDX0lPX0JBU0UgPD0gcG9ydCAmJiBwb3J0IDwgKENPREVDX0lPX0JBU0UrMHgyMCkpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotLyogSW4gY2FzZSBzb21lb25lIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCB3L28gUENJIHN1cHBvcnQ6IGluIHRoYXQgKi8KLS8qIHNjZW5hcmlvLCBkb24ndCBldmVyIGJvdGhlciB0byBjaGVjayBmb3IgUENJLXdpbmRvdyBhZGRyZXNzZXMgKi8KLQotLyogTk9URTogV0lORE9XIENIRUNLIE1BWSBCRSBBIEJJVCBPRkYsIEhJR0ggUENJQklPU19NSU5fSU8gV1JBUFM/ICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotI2RlZmluZSBDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgXAotICAoKHBvcnQgPj0gUENJQklPU19NSU5fSU8pICYmIChwb3J0IDwgKFBDSUJJT1NfTUlOX0lPICsgU0g3NzUxX1BDSV9JT19TSVpFKSkpCisjZGVmaW5lIGNvZGVjX3BvcnQocG9ydCkJXAorCSgoQ09ERUNfSU9fQkFTRSA8PSAocG9ydCkpICYmICgocG9ydCkgPCAoQ09ERUNfSU9fQkFTRSArIDB4MjApKSkKICNlbHNlCi0jZGVmaW5lIENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSAoMCkKKyNkZWZpbmUgY29kZWNfcG9ydChwb3J0KQkoMCkKICNlbmRpZgogCiAvKgpAQCAtMTA5LDE1ICs3MywxMyBAQAogdW5zaWduZWQgY2hhciBoczc3NTFydm9pcF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewogCWlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfSFM3NzUxUlZPSVBfQ09ERUMpCisJCXJldHVybiBjdHJsX2luYihwb3J0KTsKIAllbHNlIGlmIChjb2RlY19wb3J0KHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCh1bnNpZ25lZCBsb25nKWFyZWE2X2lvOF9iYXNlKyhwb3J0LUNPREVDX0lPX0JBU0UpKTsKLSNlbmRpZgotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJCXJldHVybiBjdHJsX2luYihDT0RFQ19JT01BUChwb3J0KSk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXJldHVybiBjdHJsX2luYihwY2lfaW9hZGRyKHBvcnQpKTsKIAllbHNlCi0JCXJldHVybiAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpICYgMHhmZik7CisJCXJldHVybiBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSkgJiAweGZmOwogfQogCiB1bnNpZ25lZCBjaGFyIGhzNzc1MXJ2b2lwX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKQEAgLTEyNSwzOCArODcsMzYgQEAKIAl1bnNpZ25lZCBjaGFyIHY7CiAKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0OwotI2lmIGRlZmluZWQoQ09ORklHX0hTNzc1MVJWT0lQX0NPREVDKQorCQl2ID0gY3RybF9pbmIocG9ydCk7CiAJZWxzZSBpZiAoY29kZWNfcG9ydChwb3J0KSkKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgbG9uZylhcmVhNl9pbzhfYmFzZSsocG9ydC1DT0RFQ19JT19CQVNFKSk7Ci0jZW5kaWYKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotICAgICAgICAgICAgICAgIHYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJCXYgPSBjdHJsX2luYihDT0RFQ19JT01BUChwb3J0KSk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXYgPSBjdHJsX2luYihwY2lfaW9hZGRyKHBvcnQpKTsKIAllbHNlCi0JCXYgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpICYgMHhmZik7Ci0JZGVsYXkoKTsKKwkJdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCiB1bnNpZ25lZCBzaG9ydCBoczc3NTFydm9pcF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQ0lfSU9NQVAocG9ydCk7CisJCXJldHVybiBjdHJsX2ludyhwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcmV0dXJuIGN0cmxfaW53KHBjaV9pb2FkZHIocG9ydCkpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhpbncsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogCXJldHVybiAwOwogfQogCiB1bnNpZ25lZCBpbnQgaHM3NzUxcnZvaXBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBDSV9JT01BUChwb3J0KTsKKwkJcmV0dXJuIGN0cmxfaW5sKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQlyZXR1cm4gY3RybF9pbmwocGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQltYXliZWJhZGlvKGlubCwgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE2NCwxNDYgKzEyNCwxNjAgQEAKIHsKIAogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydCA9IHZhbHVlOwotI2lmIGRlZmluZWQoQ09ORklHX0hTNzc1MVJWT0lQX0NPREVDKQorCQljdHJsX291dGIodmFsdWUsIHBvcnQpOwogCWVsc2UgaWYgKGNvZGVjX3BvcnQocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgY2phciAqKSgodW5zaWduZWQgbG9uZylhcmVhNl9pbzhfYmFzZSsocG9ydC1DT0RFQ19JT19CQVNFKSkgPSB2YWx1ZTsKLSNlbmRpZgotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0gICAgICAgIAkqKHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCkgPSB2YWx1ZTsKKwkJY3RybF9vdXRiKHZhbHVlLCBDT0RFQ19JT01BUChwb3J0KSk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCWN0cmxfb3V0Yih2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CiAJZWxzZQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCkgPSB2YWx1ZTsKKwkJY3RybF9vdXRiKHZhbHVlLCBwb3J0MmFkcihwb3J0KSk7CiB9CiAKIHZvaWQgaHM3NzUxcnZvaXBfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQotICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQgPSB2YWx1ZTsKLSNpZiBkZWZpbmVkKENPTkZJR19IUzc3NTFSVk9JUF9DT0RFQykKKwkJY3RybF9vdXRiKHZhbHVlLCBwb3J0KTsKIAllbHNlIGlmIChjb2RlY19wb3J0KHBvcnQpKQotCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNqYXIgKikoKHVuc2lnbmVkIGxvbmcpYXJlYTZfaW84X2Jhc2UrKHBvcnQtQ09ERUNfSU9fQkFTRSkpID0gdmFsdWU7Ci0jZW5kaWYKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotICAgICAgICAJKih1bnNpZ25lZCBjaGFyICopUENJX0lPTUFQKHBvcnQpID0gdmFsdWU7CisJCWN0cmxfb3V0Yih2YWx1ZSwgQ09ERUNfSU9NQVAocG9ydCkpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQljdHJsX291dGIodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOwogCWVsc2UKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpID0gdmFsdWU7Ci0JZGVsYXkoKTsKKwkJY3RybF9vdXR3KHZhbHVlLCBwb3J0MmFkcihwb3J0KSk7CisKKwljdHJsX2RlbGF5KCk7CiB9CiAKIHZvaWQgaHM3NzUxcnZvaXBfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQgPSB2YWx1ZTsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotICAgICAgICAJKih1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KSA9IHZhbHVlOworCQljdHJsX291dHcodmFsdWUsIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQljdHJsX291dHcodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhvdXR3LCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAogdm9pZCBoczc3NTFydm9pcF9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCi0gICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0gICAgICAgIAkqKCh1bnNpZ25lZCBsb25nICopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCQljdHJsX291dGwodmFsdWUsIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQljdHJsX291dGwodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhvdXRsLCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAogdm9pZCBoczc3NTFydm9pcF9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKKwl1OCAqYnVmID0gYWRkcjsKKwogCWlmIChQWFNFRyhwb3J0KSkKLQkJd2hpbGUgKGNvdW50LS0pICooKHVuc2lnbmVkIGNoYXIgKikgYWRkcikrKyA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0jaWYgZGVmaW5lZChDT05GSUdfSFM3NzUxUlZPSVBfQ09ERUMpCisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gY3RybF9pbmIocG9ydCk7CiAJZWxzZSBpZiAoY29kZWNfcG9ydChwb3J0KSkKLQkJd2hpbGUgKGNvdW50LS0pICooKHVuc2lnbmVkIGNoYXIgKikgYWRkcikrKyA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSgodW5zaWduZWQgbG9uZylhcmVhNl9pbzhfYmFzZSsocG9ydC1DT0RFQ19JT19CQVNFKSk7Ci0jZW5kaWYKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCXZvbGF0aWxlIF9fdTggKmJwID0gKF9fdTggKilQQ0lfSU9NQVAocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gY3RybF9pbmIoQ09ERUNfSU9NQVAocG9ydCkpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7CisJCXZvbGF0aWxlIHU4ICpicCA9ICh2b2xhdGlsZSB1OCAqKXBjaV9pb2FkZHIocG9ydCk7CiAKLQkJd2hpbGUgKGNvdW50LS0pICooKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgYWRkcikrKyA9ICpicDsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqYnVmKysgPSAqYnA7CiAJfSBlbHNlIHsKLQkJdm9sYXRpbGUgX191MTYgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KTsKKwkJdm9sYXRpbGUgdTE2ICpwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOwogCi0JCXdoaWxlIChjb3VudC0tKSAqKCh1bnNpZ25lZCBjaGFyICopIGFkZHIpKysgPSAqcCAmIDB4ZmY7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gKnAgJiAweGZmOwogCX0KIH0KIAogdm9pZCBoczc3NTFydm9pcF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQl2b2xhdGlsZSBfX3UxNiAqcDsKKwl2b2xhdGlsZSB1MTYgKnA7CisJdTE2ICpidWYgPSBhZGRyOwogCiAJaWYgKFBYU0VHKHBvcnQpKQotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopUENJX0lPTUFQKHBvcnQpOworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXAgPSAodm9sYXRpbGUgdTE2ICopcGNpX2lvYWRkcihwb3J0KTsKIAllbHNlCi0JCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KTsKLQl3aGlsZSAoY291bnQtLSkgKigoX191MTYgKikgYWRkcikrKyA9ICpwOworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCXdoaWxlIChjb3VudC0tKQorCQkqYnVmKysgPSAqcDsKIH0KIAogdm9pZCBoczc3NTFydm9pcF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKLQlpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgewotCQl2b2xhdGlsZSBfX3UzMiAqcCA9IChfX3UzMiAqKVBDSV9JT01BUChwb3J0KTsKIAotCQl3aGlsZSAoY291bnQtLSkgKigoX191MzIgKikgYWRkcikrKyA9ICpwOworCWlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCQl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKwkJdTMyICpidWYgPSBhZGRyOworCisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJ1ZisrID0gKnA7CiAJfSBlbHNlCi0JCW1heWJlYmFkaW8oaW5zbCwgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiB9CiAKIHZvaWQgaHM3NzUxcnZvaXBfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQogeworCWNvbnN0IHU4ICpidWYgPSBhZGRyOworCiAJaWYgKFBYU0VHKHBvcnQpKQotCQl3aGlsZSAoY291bnQtLSkgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydCA9ICooKHVuc2lnbmVkIGNoYXIgKikgYWRkcikrKzsKLSNpZiBkZWZpbmVkKENPTkZJR19IUzc3NTFSVk9JUF9DT0RFQykKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljdHJsX291dGIoKmJ1ZisrLCBwb3J0KTsKIAllbHNlIGlmIChjb2RlY19wb3J0KHBvcnQpKQotCQl3aGlsZSAoY291bnQtLSkgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopKCh1bnNpZ25lZCBsb25nKWFyZWE2X2lvOF9iYXNlKyhwb3J0LUNPREVDX0lPX0JBU0UpKSA9ICooKHVuc2lnbmVkIGNoYXIgKikgYWRkcikrKzsKLSNlbmRpZgotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKLQkJdm9sYXRpbGUgX191OCAqYnAgPSAoX191OCAqKVBDSV9JT01BUChwb3J0KTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljdHJsX291dGIoKmJ1ZisrLCBDT0RFQ19JT01BUChwb3J0KSk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKKwkJdm9sYXRpbGUgdTggKmJwID0gKHZvbGF0aWxlIHU4ICopcGNpX2lvYWRkcihwb3J0KTsKIAotCQl3aGlsZSAoY291bnQtLSkgKmJwID0gKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBhZGRyKSsrOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpicCA9ICpidWYrKzsKIAl9IGVsc2UgewotCQl2b2xhdGlsZSBfX3UxNiAqcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOworCQl2b2xhdGlsZSB1MTYgKnAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDJhZHIocG9ydCk7CiAKLQkJd2hpbGUgKGNvdW50LS0pICpwID0gKigodW5zaWduZWQgY2hhciAqKSBhZGRyKSsrOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpwID0gKmJ1ZisrOwogCX0KIH0KIAogdm9pZCBoczc3NTFydm9pcF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0Jdm9sYXRpbGUgX191MTYgKnA7CisJdm9sYXRpbGUgdTE2ICpwOworCWNvbnN0IHUxNiAqYnVmID0gYWRkcjsKIAogCWlmIChQWFNFRyhwb3J0KSkKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KTsKKwkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0OworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCk7Ci0Jd2hpbGUgKGNvdW50LS0pICpwID0gKigoX191MTYgKikgYWRkcikrKzsKKwkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0MmFkcihwb3J0KTsKKworCXdoaWxlIChjb3VudC0tKQorCQkqcCA9ICpidWYrKzsKIH0KIAogdm9pZCBoczc3NTFydm9pcF9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKLQkJdm9sYXRpbGUgX191MzIgKnAgPSAoX191MzIgKilQQ0lfSU9NQVAocG9ydCk7CisJY29uc3QgdTMyICpidWYgPSBhZGRyOwogCi0JCXdoaWxlIChjb3VudC0tKSAqcCA9ICooKF9fdTMyICopIGFkZHIpKys7CisJaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7CisJCXZvbGF0aWxlIHUzMiAqcCA9ICh2b2xhdGlsZSB1MzIgKilwY2lfaW9hZGRyKHBvcnQpOworCisJCXdoaWxlIChjb3VudC0tKQorCQkJKnAgPSAqYnVmKys7CiAJfSBlbHNlCi0JCW1heWJlYmFkaW8ob3V0c2wsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCi12b2lkICpoczc3NTFydm9pcF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCit2b2lkIF9faW9tZW0gKmhzNzc1MXJ2b2lwX2lvcG9ydF9tYXAodW5zaWduZWQgbG9uZyBwb3J0LCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKLQlpZiAob2Zmc2V0ID49IDB4ZmQwMDAwMDApCi0JCXJldHVybiAodm9pZCAqKW9mZnNldDsKLQllbHNlCi0JCXJldHVybiAodm9pZCAqKVAyU0VHQUREUihvZmZzZXQpOwotfQotRVhQT1JUX1NZTUJPTChoczc3NTFydm9pcF9pb3JlbWFwKTsKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCBfX2lvbWVtICopcG9ydDsKKwllbHNlIGlmICh1bmxpa2VseShjb2RlY19wb3J0KHBvcnQpICYmIChzaXplID09IDEpKSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilDT0RFQ19JT01BUChwb3J0KTsKKyAgICAgICAgZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKHZvaWQgX19pb21lbSAqKXBjaV9pb2FkZHIocG9ydCk7CiAKLXVuc2lnbmVkIGxvbmcgaHM3NzUxcnZvaXBfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlyZXR1cm4gcG9ydDJhZHIob2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0MmFkcihwb3J0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lycS5jCmluZGV4IDcwNWI3ZGQuLmM2MTdiMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9pcnEuYwpAQCAtMzUsMzAgKzM1LDI0IEBACiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfaHM3NzUxcnZvaXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJdW5zaWduZWQgc2hvcnQgbWFzayA9IDB4ZmZmZiBeICgweDAwMDEgPDwgbWFza19wb3NbaXJxXSk7CiAKIAkvKiBTZXQgdGhlIHByaW9yaXR5IGluIElQUiB0byAwICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXZhbCA9IGN0cmxfaW53KElSTENOVFIzKTsKIAl2YWwgJj0gbWFzazsKIAljdHJsX291dHcodmFsLCBJUkxDTlRSMyk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfaHM3NzUxcnZvaXBfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCB2YWw7CiAJdW5zaWduZWQgc2hvcnQgdmFsdWUgPSAoMHgwMDAxIDw8IG1hc2tfcG9zW2lycV0pOwogCiAJLyogU2V0IHByaW9yaXR5IGluIElQUiBiYWNrIHRvIG9yaWdpbmFsIHZhbHVlICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXZhbCA9IGN0cmxfaW53KElSTENOVFIzKTsKIAl2YWwgfD0gdmFsdWU7CiAJY3RybF9vdXR3KHZhbCwgSVJMQ05UUjMpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgYWNrX2hzNzc1MXJ2b2lwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvbGVkLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGI2NjA4ZmYuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9sZWQuYworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9zZXR1cF9oczc3NTFydm9pcC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKLSAqCi0gKiBSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgSFM3NzUxUlZvSVAgU3VwcG9ydC4KLSAqCi0gKiBNb2RpZmllZCBmb3IgSFM3NzUxUlZvSVAgYnkKLSAqIEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLiAyMDAyLgotICogTGluZW8gdVNvbHV0aW9ucywgSW5jLiAyMDAzLgotICovCi0KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGludCBkZWJ1Z19jb3VudGVyOwotCi12b2lkIGRlYnVnX2xlZF9kaXNwKHZvaWQpCi17Ci0JdW5zaWduZWQgc2hvcnQgdmFsdWU7Ci0KLQl2YWx1ZSA9ICh1bnNpZ25lZCBjaGFyKWRlYnVnX2NvdW50ZXIrKzsKLQljdHJsX291dGIoKDB4ZjB8dmFsdWUpLCBQQV9PVVRQT1JUUik7Ci0JaWYgKHZhbHVlID09IDB4MGYpCi0JCWRlYnVnX2NvdW50ZXIgPSAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9tYWNoLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL21hY2guYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2FmOTY3Zi4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL21hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDU0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9tYWNoX2hzNzc1MXJ2b2lwLmMKLSAqCi0gKiBNaW5vciB0d2VhayBvZiBtYWNoX3NlLmMgZmlsZSB0byByZWZlcmVuY2UgaHM3NzUxcnZvaXAtc3BlY2lmaWMgaXRlbXMuCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgUmVuZXNhcyBUZWNobm9sb2d5IHNhbGVzIEhTNzc1MVJWb0lQCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaW8uaD4KLQotZXh0ZXJuIHZvaWQgaW5pdF9oczc3NTFydm9pcF9JUlEodm9pZCk7Ci1leHRlcm4gdm9pZCAqaHM3NzUxcnZvaXBfaW9yZW1hcCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLQotLyoKLSAqIFRoZSBNYWNoaW5lIFZlY3RvcgotICovCi0KLXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9oczc3NTFydm9pcCBfX2luaXRtdiA9IHsKLQkubXZfbnJfaXJxcwkJPSA3MiwKLQotCS5tdl9pbmIJCQk9IGhzNzc1MXJ2b2lwX2luYiwKLQkubXZfaW53CQkJPSBoczc3NTFydm9pcF9pbncsCi0JLm12X2lubAkJCT0gaHM3NzUxcnZvaXBfaW5sLAotCS5tdl9vdXRiCQk9IGhzNzc1MXJ2b2lwX291dGIsCi0JLm12X291dHcJCT0gaHM3NzUxcnZvaXBfb3V0dywKLQkubXZfb3V0bAkJPSBoczc3NTFydm9pcF9vdXRsLAotCi0JLm12X2luYl9wCQk9IGhzNzc1MXJ2b2lwX2luYl9wLAotCS5tdl9pbndfcAkJPSBoczc3NTFydm9pcF9pbncsCi0JLm12X2lubF9wCQk9IGhzNzc1MXJ2b2lwX2lubCwKLQkubXZfb3V0Yl9wCQk9IGhzNzc1MXJ2b2lwX291dGJfcCwKLQkubXZfb3V0d19wCQk9IGhzNzc1MXJ2b2lwX291dHcsCi0JLm12X291dGxfcAkJPSBoczc3NTFydm9pcF9vdXRsLAotCi0JLm12X2luc2IJCT0gaHM3NzUxcnZvaXBfaW5zYiwKLQkubXZfaW5zdwkJPSBoczc3NTFydm9pcF9pbnN3LAotCS5tdl9pbnNsCQk9IGhzNzc1MXJ2b2lwX2luc2wsCi0JLm12X291dHNiCQk9IGhzNzc1MXJ2b2lwX291dHNiLAotCS5tdl9vdXRzdwkJPSBoczc3NTFydm9pcF9vdXRzdywKLQkubXZfb3V0c2wJCT0gaHM3NzUxcnZvaXBfb3V0c2wsCi0KLQkubXZfaW9yZW1hcAkJPSBoczc3NTFydm9pcF9pb3JlbWFwLAotCS5tdl9pc2FfcG9ydDJhZGRyCT0gaHM3NzUxcnZvaXBfaXNhX3BvcnQyYWRkciwKLQkubXZfaW5pdF9pcnEJCT0gaW5pdF9oczc3NTFydm9pcF9JUlEsCi19OwotQUxJQVNfTVYoaHM3NzUxcnZvaXApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL3NldHVwLmMKaW5kZXggMjlmYjVmZi4uMDQxNGMxNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9oczc3NTFydm9pcC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvaHM3NzUxcnZvaXAvc2V0dXAuYwpAQCAtMSw0NCArMSwzOCBAQAogLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3NldHVwX2hzNzc1MXJ2b2lwLmMKKyAqIFJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBIUzc3NTFSVm9JUCBTdXBwb3J0LgogICoKICAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCiAgKgotICogUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIEhTNzc1MVJWb0lQIFN1cHBvcnQuCi0gKgogICogTW9kaWZpZWQgZm9yIEhTNzc1MVJWb0lQIGJ5CiAgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KICAqIExpbmVvIHVTb2x1dGlvbnMsIEluYy4gMjAwMy4KICAqLwotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCi0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KLSNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KLQogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CisjaW5jbHVkZSA8bGludXgvaWRlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9ydGMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CiAKLS8qIGRlZmluZWQgaW4gbW0vaW9yZW1hcC5jICovCi1leHRlcm4gdm9pZCAqIHAzX2lvcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7Ci0KLXVuc2lnbmVkIGludCBkZWJ1Z19jb3VudGVyOwotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBoczc3NTFydm9pcF9pbml0X2lycSh2b2lkKQogewotCXJldHVybiAiSFM3NzUxUlZvSVAiOworI2lmIGRlZmluZWQoQ09ORklHX0hTNzc1MVJWT0lQX0NPREVDKQorCW1ha2VfaXByX2lycShETVRFMF9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKERNVEUxX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKKyNlbmRpZgorCisJaW5pdF9oczc3NTFydm9pcF9JUlEoKTsKIH0KIAotLyoKLSAqIEluaXRpYWxpemUgdGhlIGJvYXJkCi0gKi8KLXZvaWQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBoczc3NTFydm9pcF9wb3dlcl9vZmYodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgSFM3NzUxUlZvSVAtMiBzdXBwb3J0LlxuIik7Ci0JY3RybF9vdXRiKDB4ZjAsIFBBX09VVFBPUlRSKTsKLQlkZWJ1Z19jb3VudGVyID0gMDsKKwljdHJsX291dHcoY3RybF9pbncoUEFfT1VUUE9SVFIpICYgMHhmZmRmLCBQQV9PVVRQT1JUUik7CiB9CiAKIHZvaWQgKmFyZWE1X2lvOF9iYXNlOwpAQCAtNDYsMTYgKzQwLDE1IEBACiB2b2lkICphcmVhNV9pbzE2X2Jhc2U7CiB2b2lkICphcmVhNl9pbzE2X2Jhc2U7CiAKLWludCBfX2luaXQgY2ZfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaHM3NzUxcnZvaXBfY2ZfaW5pdCh2b2lkKQogewogCXBncHJvdF90IHByb3Q7Ci0JdW5zaWduZWQgbG9uZyBwYWRkcmJhc2UsIHBzaXplOworCXVuc2lnbmVkIGxvbmcgcGFkZHJiYXNlOwogCiAJLyogb3BlbiBJL08gYXJlYSB3aW5kb3cgKi8KIAlwYWRkcmJhc2UgPSB2aXJ0X3RvX3BoeXMoKHZvaWQgKikoUEFfQVJFQTVfSU8rMHgwMDAwMDgwMCkpOwotCXBzaXplID0gUEFHRV9TSVpFOwogCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMSwgX1BBR0VfUENDX0NPTTE2KTsKLQlhcmVhNV9pbzE2X2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlhcmVhNV9pbzE2X2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CiAJaWYgKCFhcmVhNV9pbzE2X2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDRiBJL08gd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjQsMTkgKzU3LDE4IEBACiAJLyogWFhYIDogZG8gd2UgbmVlZCBhdHRyaWJ1dGUgYW5kIGNvbW1vbi1tZW1vcnkgYXJlYSBhbHNvPyAqLwogCiAJcGFkZHJiYXNlID0gdmlydF90b19waHlzKCh2b2lkICopUEFfQVJFQTZfSU8pOwotCXBzaXplID0gUEFHRV9TSVpFOwogI2lmIGRlZmluZWQoQ09ORklHX0hTNzc1MVJWT0lQX0NPREVDKQogCXByb3QgPSBQQUdFX0tFUk5FTF9QQ0MoMCwgX1BBR0VfUENDX0NPTTgpOwogI2Vsc2UKIAlwcm90ID0gUEFHRV9LRVJORUxfUENDKDAsIF9QQUdFX1BDQ19JTzgpOwogI2VuZGlmCi0JYXJlYTZfaW84X2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlhcmVhNl9pbzhfYmFzZSA9IHAzX2lvcmVtYXAocGFkZHJiYXNlLCBQQUdFX1NJWkUsIHByb3QucGdwcm90KTsKIAlpZiAoIWFyZWE2X2lvOF9iYXNlKSB7CiAJCXByaW50aygiYWxsb2NhdGVfY2ZfYXJlYSA6IGNhbid0IG9wZW4gQ09ERUMgSS9PIDhiaXQgd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlwcm90ID0gUEFHRV9LRVJORUxfUENDKDAsIF9QQUdFX1BDQ19JTzE2KTsKLQlhcmVhNl9pbzE2X2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90KTsKKwlhcmVhNl9pbzE2X2Jhc2UgPSBwM19pb3JlbWFwKHBhZGRyYmFzZSwgUEFHRV9TSVpFLCBwcm90LnBncHJvdCk7CiAJaWYgKCFhcmVhNl9pbzE2X2Jhc2UpIHsKIAkJcHJpbnRrKCJhbGxvY2F0ZV9jZl9hcmVhIDogY2FuJ3Qgb3BlbiBDT0RFQyBJL08gMTZiaXQgd2luZG93IVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtODUsNCArNzcsNDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotX19pbml0Y2FsbCAoY2ZfaW5pdCk7CisvKgorICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKKyAqLworc3RhdGljIHZvaWQgX19pbml0IGhzNzc1MXJ2b2lwX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCit7CisJZGV2aWNlX2luaXRjYWxsKGhzNzc1MXJ2b2lwX2NmX2luaXQpOworCisJY3RybF9vdXRiKDB4ZjAsIFBBX09VVFBPUlRSKTsKKwlwbV9wb3dlcl9vZmYgPSBoczc3NTFydm9pcF9wb3dlcl9vZmY7CisKKwlwcmludGsoS0VSTl9JTkZPICJSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgSFM3NzUxUlZvSVAtMiBzdXBwb3J0LlxuIik7Cit9CisKK3N0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9oczc3NTFydm9pcCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiSFM3NzUxUlZvSVAiLAorCS5tdl9zZXR1cAkJPSBoczc3NTFydm9pcF9zZXR1cCwKKwkubXZfbnJfaXJxcwkJPSA3MiwKKworCS5tdl9pbmIJCQk9IGhzNzc1MXJ2b2lwX2luYiwKKwkubXZfaW53CQkJPSBoczc3NTFydm9pcF9pbncsCisJLm12X2lubAkJCT0gaHM3NzUxcnZvaXBfaW5sLAorCS5tdl9vdXRiCQk9IGhzNzc1MXJ2b2lwX291dGIsCisJLm12X291dHcJCT0gaHM3NzUxcnZvaXBfb3V0dywKKwkubXZfb3V0bAkJPSBoczc3NTFydm9pcF9vdXRsLAorCisJLm12X2luYl9wCQk9IGhzNzc1MXJ2b2lwX2luYl9wLAorCS5tdl9pbndfcAkJPSBoczc3NTFydm9pcF9pbncsCisJLm12X2lubF9wCQk9IGhzNzc1MXJ2b2lwX2lubCwKKwkubXZfb3V0Yl9wCQk9IGhzNzc1MXJ2b2lwX291dGJfcCwKKwkubXZfb3V0d19wCQk9IGhzNzc1MXJ2b2lwX291dHcsCisJLm12X291dGxfcAkJPSBoczc3NTFydm9pcF9vdXRsLAorCisJLm12X2luc2IJCT0gaHM3NzUxcnZvaXBfaW5zYiwKKwkubXZfaW5zdwkJPSBoczc3NTFydm9pcF9pbnN3LAorCS5tdl9pbnNsCQk9IGhzNzc1MXJ2b2lwX2luc2wsCisJLm12X291dHNiCQk9IGhzNzc1MXJ2b2lwX291dHNiLAorCS5tdl9vdXRzdwkJPSBoczc3NTFydm9pcF9vdXRzdywKKwkubXZfb3V0c2wJCT0gaHM3NzUxcnZvaXBfb3V0c2wsCisKKwkubXZfaW5pdF9pcnEJCT0gaHM3NzUxcnZvaXBfaW5pdF9pcnEsCisJLm12X2lvcG9ydF9tYXAJCT0gaHM3NzUxcnZvaXBfaW9wb3J0X21hcCwKK307CitBTElBU19NVihoczc3NTFydm9pcCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI2ZDk4MQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9LY29uZmlnCkBAIC0wLDAgKzEsMTQgQEAKK2lmIFNIX1I3NzgwUlAKKworbWVudSAiUjc3ODBSUCBvcHRpb25zIgorCitjb25maWcgU0hfUjc3ODBNUAorCWJvb2wgIlI3NzgwTVAgYm9hcmQgc3VwcG9ydCIKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gd2lsbCBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIG1hc3MtcHJvZHVjdGlvbgorCSAgdmVyc2lvbiBvZiB0aGUgUjc3ODBSUC4gSWYgaW4gZG91YnQsIHNheSBZLgorCitlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE3NzZkMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9NYWtlZmlsZQpAQCAtMCwwICsxLDYgQEAKKyMKKyMgTWFrZWZpbGUgZm9yIHRoZSBSNzc4MFJQLTEgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAorIworCitvYmoteQkgOj0gc2V0dXAubyBpby5vIGlycS5vCitvYmotJChDT05GSUdfSEVBUlRCRUFUKQkrPSBsZWQubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjkyZDZlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2lvLmMKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIElhbiBkYSBTaWx2YSwgSmVyZW15IFNpZWdlbAorICogQmFzZWQgbGFyZ2VseSBvbiBpb19zZS5jLgorICoKKyAqIEkvTyByb3V0aW5lIGZvciBSZW5lc2FzIFNvbHV0aW9ucyBIaWdobGFuZGVyIFI3NzgwUlAtMQorICoKKyAqIEluaXRpYWwgdmVyc2lvbiBvbmx5IHRvIHN1cHBvcnQgTEFOIGFjY2Vzczsgc29tZQorICogcGxhY2Vob2xkZXIgY29kZSBmcm9tIGlvX3I3NzgwcnAuYyBsZWZ0IGluIHdpdGggdGhlCisgKiBleHBlY3RhdGlvbiBvZiBsYXRlciBTdXBlcklPIGFuZCBQQ01DSUEgYWNjZXNzLgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vcjc3ODBycC9yNzc4MHJwLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG9ydDJhZHIodW5zaWduZWQgaW50IHBvcnQpCit7CisJaWYgKCgweDFmMCA8PSBwb3J0ICYmIHBvcnQgPCAweDFmOCkgfHwgcG9ydCA9PSAweDNmNikKKwkJaWYgKHBvcnQgPT0gMHgzZjYpCisJCQlyZXR1cm4gKFBBX0FSRUE1X0lPICsgMHg4MGMpOworCQllbHNlCisJCQlyZXR1cm4gKFBBX0FSRUE1X0lPICsgMHgxMDAwICsgKChwb3J0LTB4MWYwKSA8PCAxKSk7CisJZWxzZQorCQltYXliZWJhZGlvKCh1bnNpZ25lZCBsb25nKXBvcnQpOworCisJcmV0dXJuIHBvcnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwb3J0ODg3OTZsKHVuc2lnbmVkIGludCBwb3J0LCBpbnQgZmxhZykKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwlpZiAoZmxhZykKKwkJYWRkciA9IFBBX0FYODg3OTZMICsgKChwb3J0IC0gQVg4ODc5NkxfSU9fQkFTRSkgPDwgMSk7CisJZWxzZQorCQlhZGRyID0gUEFfQVg4ODc5NkwgKyAoKHBvcnQgLSBBWDg4Nzk2TF9JT19CQVNFKSA8PCAxKSArIDB4MTAwMDsKKworCXJldHVybiBhZGRyOworfQorCisvKiBUaGUgNzc4MCBSNzc4MFJQLTEgc2VlbXMgdG8gaGF2ZSBldmVyeXRoaW5nIGhvb2tlZCAqLworLyogdXAgcHJldHR5IG5vcm1hbGx5IChub3RoaW5nIG9uIGhpZ2gtYnl0ZXMgb25seS4uLikgc28gdGhpcyAqLworLyogc2hvdWxkbid0IGJlIG5lZWRlZCAqLworc3RhdGljIGlubGluZSBpbnQgc2hpZnRlZF9wb3J0KHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkvKiBGb3IgSURFIHJlZ2lzdGVycywgdmFsdWUgaXMgbm90IHNoaWZ0ZWQgKi8KKwlpZiAoKDB4MWYwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MWY4KSB8fCBwb3J0ID09IDB4M2Y2KQorCQlyZXR1cm4gMDsKKwllbHNlCisJCXJldHVybiAxOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfTkUyMDAwKSB8fCBkZWZpbmVkKENPTkZJR19ORTIwMDBfTU9EVUxFKQorI2RlZmluZSBDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpIFwKKyAgKChwb3J0ID49IEFYODg3OTZMX0lPX0JBU0UpICYmIChwb3J0IDwgKEFYODg3OTZMX0lPX0JBU0UrMHgyMCkpKQorI2Vsc2UKKyNkZWZpbmUgQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSAoMCkKKyNlbmRpZgorCisvKgorICogR2VuZXJhbCBvdXRsaW5lOiByZW1hcCByZWFsbHkgbG93IHN0dWZmIFtldmVudHVhbGx5XSB0byBTdXBlcklPLAorICogc3R1ZmYgaW4gUENJIElPIHNwYWNlIChhdCBvciBhYm92ZSB3aW5kb3cgYXQgcGNpLmg6UENJQklPU19NSU5fSU8pCisgKiBpcyBtYXBwZWQgdGhyb3VnaCB0aGUgUENJIElPIHdpbmRvdy4gIFN0dWZmIHdpdGggaGlnaCBiaXRzIChQWFNFRykKKyAqIHNob3VsZCBiZSB3YXkgYmV5b25kIHRoZSB3aW5kb3csIGFuZCBpcyB1c2VkICB3L28gdHJhbnNsYXRpb24gZm9yCisgKiBjb21wYXRpYmlsaXR5LgorICovCit1OCByNzc4MHJwX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCisJCXJldHVybiBjdHJsX2ludyhwb3J0ODg3OTZsKHBvcnQsIDApKSAmIDB4ZmY7CisJZWxzZSBpZiAoUFhTRUcocG9ydCkpCisJCXJldHVybiBjdHJsX2luYihwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcmV0dXJuIGN0cmxfaW5iKHBjaV9pb2FkZHIocG9ydCkpOworCisJcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7Cit9CisKK3U4IHI3NzgwcnBfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXU4IHY7CisKKwlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKKwkJdiA9IGN0cmxfaW53KHBvcnQ4ODc5NmwocG9ydCwgMCkpICYgMHhmZjsKKwllbHNlIGlmIChQWFNFRyhwb3J0KSkKKwkJdiA9IGN0cmxfaW5iKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQl2ID0gY3RybF9pbmIocGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQl2ID0gY3RybF9pbncocG9ydDJhZHIocG9ydCkpICYgMHhmZjsKKworCWN0cmxfZGVsYXkoKTsKKworCXJldHVybiB2OworfQorCit1MTYgcjc3ODBycF9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQorCQltYXliZWJhZGlvKHBvcnQpOworCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQorCQlyZXR1cm4gY3RybF9pbncocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXJldHVybiBjdHJsX2ludyhwY2lfaW9hZGRyKHBvcnQpKTsKKwllbHNlCisJCW1heWJlYmFkaW8ocG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKwordTMyIHI3NzgwcnBfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKKwkJbWF5YmViYWRpbyhwb3J0KTsKKwllbHNlIGlmIChQWFNFRyhwb3J0KSkKKwkJcmV0dXJuIGN0cmxfaW5sKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQlyZXR1cm4gY3RybF9pbmwocGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcjc3ODBycF9vdXRiKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCisJCWN0cmxfb3V0dyh2YWx1ZSwgcG9ydDg4Nzk2bChwb3J0LCAwKSk7CisJZWxzZSBpZiAoUFhTRUcocG9ydCkpCisJCWN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCWN0cmxfb3V0Yih2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQljdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKK30KKwordm9pZCByNzc4MHJwX291dGJfcCh1OCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQorCQljdHJsX291dHcodmFsdWUsIHBvcnQ4ODc5NmwocG9ydCwgMCkpOworCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQorCQljdHJsX291dGIodmFsdWUsIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQljdHJsX291dGIodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOworCWVsc2UKKwkJY3RybF9vdXR3KHZhbHVlLCBwb3J0MmFkcihwb3J0KSk7CisKKwljdHJsX2RlbGF5KCk7Cit9CisKK3ZvaWQgcjc3ODBycF9vdXR3KHUxNiB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQorCQltYXliZWJhZGlvKHBvcnQpOworCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQorCQljdHJsX291dHcodmFsdWUsIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQljdHJsX291dHcodmFsdWUsIHBjaV9pb2FkZHIocG9ydCkpOworCWVsc2UKKwkJbWF5YmViYWRpbyhwb3J0KTsKK30KKwordm9pZCByNzc4MHJwX291dGwodTMyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCisJCW1heWJlYmFkaW8ocG9ydCk7CisJZWxzZSBpZiAoUFhTRUcocG9ydCkpCisJCWN0cmxfb3V0bCh2YWx1ZSwgcG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCWN0cmxfb3V0bCh2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CisJZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIHI3NzgwcnBfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmRzdCwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl2b2xhdGlsZSB1MTYgKnA7CisJdTggKmJ1ZiA9IGRzdDsKKworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKSB7CisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDg4Nzk2bChwb3J0LCAwKTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQkqYnVmKysgPSAqcCAmIDB4ZmY7CisJfSBlbHNlIGlmIChQWFNFRyhwb3J0KSkgeworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICoodm9sYXRpbGUgdTggKilwb3J0OworCX0gZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKKwkJdm9sYXRpbGUgdTggKmJwID0gKHZvbGF0aWxlIHU4ICopcGNpX2lvYWRkcihwb3J0KTsKKworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICpicDsKKwl9IGVsc2UgeworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICpwICYgMHhmZjsKKwl9Cit9CisKK3ZvaWQgcjc3ODBycF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqZHN0LCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXZvbGF0aWxlIHUxNiAqcDsKKwl1MTYgKmJ1ZiA9IGRzdDsKKworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ4ODc5NmwocG9ydCwgMSk7CisJZWxzZSBpZiAoUFhTRUcocG9ydCkpCisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcCA9ICh2b2xhdGlsZSB1MTYgKilwY2lfaW9hZGRyKHBvcnQpOworCWVsc2UKKwkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0MmFkcihwb3J0KTsKKworCXdoaWxlIChjb3VudC0tKQorCQkqYnVmKysgPSAqcDsKK30KKwordm9pZCByNzc4MHJwX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdTMyICpidWYgPSBkc3Q7CisKKwlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKKwkJbWF5YmViYWRpbyhwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCQl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpidWYrKyA9ICpwOworCX0gZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIHI3NzgwcnBfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdm9sYXRpbGUgdTE2ICpwOworCWNvbnN0IHU4ICpidWYgPSBzcmM7CisKKwlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkgeworCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQ4ODc5NmwocG9ydCwgMCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKnAgPSAqYnVmKys7CisJfSBlbHNlIGlmIChQWFNFRyhwb3J0KSkKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljdHJsX291dGIoKmJ1ZisrLCBwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCQl2b2xhdGlsZSB1OCAqYnAgPSAodm9sYXRpbGUgdTggKilwY2lfaW9hZGRyKHBvcnQpOworCisJCXdoaWxlIChjb3VudC0tKQorCQkJKmJwID0gKmJ1ZisrOworCX0gZWxzZSB7CisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDJhZHIocG9ydCk7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKnAgPSAqYnVmKys7CisJfQorfQorCit2b2lkIHI3NzgwcnBfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdm9sYXRpbGUgdTE2ICpwOworCWNvbnN0IHUxNiAqYnVmID0gc3JjOworCisJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCisJCXAgPSAodm9sYXRpbGUgdTE2ICopcG9ydDg4Nzk2bChwb3J0LCAxKTsKKwllbHNlIGlmIChQWFNFRyhwb3J0KSkKKwkJcCA9ICh2b2xhdGlsZSB1MTYgKilwb3J0OworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBjaV9pb2FkZHIocG9ydCk7CisJZWxzZQorCQlwID0gKHZvbGF0aWxlIHUxNiAqKXBvcnQyYWRyKHBvcnQpOworCisJd2hpbGUgKGNvdW50LS0pCisJCSpwID0gKmJ1ZisrOworfQorCit2b2lkIHI3NzgwcnBfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJY29uc3QgdTMyICpidWYgPSBzcmM7CisKKwlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKKwkJbWF5YmViYWRpbyhwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCQl2b2xhdGlsZSB1MzIgKnAgPSAodm9sYXRpbGUgdTMyICopcGNpX2lvYWRkcihwb3J0KTsKKworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpwID0gKmJ1ZisrOworCX0gZWxzZQorCQltYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIF9faW9tZW0gKnI3NzgwcnBfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQoreworCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ4ODc5NmwocG9ydCwgc2l6ZSA+IDEpOworCWVsc2UgaWYgKFBYU0VHKHBvcnQpKQorCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBvcnQ7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXJldHVybiAodm9pZCBfX2lvbWVtICopcGNpX2lvYWRkcihwb3J0KTsKKworCXJldHVybiAodm9pZCBfX2lvbWVtICopcG9ydDJhZHIocG9ydCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvaXJxLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkNWU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIGxpbnV4L2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9pcnEuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgS2F6dW1vdG8gS29qaW1hCisgKgorICogUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBSNzc4MFJQLTEgU3VwcG9ydC4KKyAqCisgKiBNb2RpZmllZCBmb3IgUjc3ODBSUC0xIGJ5CisgKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcjc3ODBycC9yNzc4MHJwLmg+CisKKyNpZmRlZiBDT05GSUdfU0hfUjc3ODBNUAorc3RhdGljIGludCBtYXNrX3Bvc1tdID0gezEyLCAxMSwgOSwgMTQsIDE1LCA4LCAxMywgNiwgNSwgNCwgMywgMiwgMCwgMCwgMSwgMH07CisjZWxzZQorc3RhdGljIGludCBtYXNrX3Bvc1tdID0gezE1LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgsIDcsIDUsIDYsIDQsIDAsIDEsIDIsIDB9OworI2VuZGlmCisKK3N0YXRpYyB2b2lkIGVuYWJsZV9yNzc4MHJwX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKK3N0YXRpYyB2b2lkIGRpc2FibGVfcjc3ODBycF9pcnEodW5zaWduZWQgaW50IGlycSk7CisKKy8qIHNodXRkb3duIGlzIHNhbWUgYXMgImRpc2FibGUiICovCisjZGVmaW5lIHNodXRkb3duX3I3NzgwcnBfaXJxIGRpc2FibGVfcjc3ODBycF9pcnEKKworc3RhdGljIHZvaWQgYWNrX3I3NzgwcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpOworc3RhdGljIHZvaWQgZW5kX3I3NzgwcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfcjc3ODBycF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwllbmFibGVfcjc3ODBycF9pcnEoaXJxKTsKKwlyZXR1cm4gMDsgLyogbmV2ZXIgYW55dGhpbmcgcGVuZGluZyAqLworfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX3I3NzgwcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgc2hvcnQgdmFsOworCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAweGZmZmYgXiAoMHgwMDAxIDw8IG1hc2tfcG9zW2lycV0pOworCisJLyogU2V0IHRoZSBwcmlvcml0eSBpbiBJUFIgdG8gMCAqLworCXZhbCA9IGN0cmxfaW53KElSTENOVFIxKTsKKwl2YWwgJj0gbWFzazsKKwljdHJsX291dHcodmFsLCBJUkxDTlRSMSk7Cit9CisKK3N0YXRpYyB2b2lkIGVuYWJsZV9yNzc4MHJwX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCXVuc2lnbmVkIHNob3J0IHZhbDsKKwl1bnNpZ25lZCBzaG9ydCB2YWx1ZSA9ICgweDAwMDEgPDwgbWFza19wb3NbaXJxXSk7CisKKwkvKiBTZXQgcHJpb3JpdHkgaW4gSVBSIGJhY2sgdG8gb3JpZ2luYWwgdmFsdWUgKi8KKwl2YWwgPSBjdHJsX2ludyhJUkxDTlRSMSk7CisJdmFsIHw9IHZhbHVlOworCWN0cmxfb3V0dyh2YWwsIElSTENOVFIxKTsKK30KKworc3RhdGljIHZvaWQgYWNrX3I3NzgwcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9yNzc4MHJwX2lycShpcnEpOworfQorCitzdGF0aWMgdm9pZCBlbmRfcjc3ODBycF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKKwkJZW5hYmxlX3I3NzgwcnBfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcjc3ODBycF9pcnFfdHlwZSA9IHsKKwkudHlwZW5hbWUgPSAiUjc3ODBSUC1JUlEiLAorCS5zdGFydHVwID0gc3RhcnR1cF9yNzc4MHJwX2lycSwKKwkuc2h1dGRvd24gPSBzaHV0ZG93bl9yNzc4MHJwX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX3I3NzgwcnBfaXJxLAorCS5kaXNhYmxlID0gZGlzYWJsZV9yNzc4MHJwX2lycSwKKwkuYWNrID0gYWNrX3I3NzgwcnBfaXJxLAorCS5lbmQgPSBlbmRfcjc3ODBycF9pcnEsCit9OworCitzdGF0aWMgdm9pZCBtYWtlX3I3NzgwcnBfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisJaXJxX2Rlc2NbaXJxXS5oYW5kbGVyID0gJnI3NzgwcnBfaXJxX3R5cGU7CisJZGlzYWJsZV9yNzc4MHJwX2lycShpcnEpOworfQorCisvKgorICogSW5pdGlhbGl6ZSBJUlEgc2V0dGluZworICovCit2b2lkIF9faW5pdCBpbml0X3I3NzgwcnBfSVJRKHZvaWQpCit7CisJaW50IGk7CisKKwkvKiBJUkwwPVBDSSBTbG90ICNBCisJICogSVJMMT1QQ0kgU2xvdCAjQgorCSAqIElSTDI9UENJIFNsb3QgI0MKKwkgKiBJUkwzPVBDSSBTbG90ICNECisJICogSVJMND1DRiBDYXJkCisJICogSVJMNT1DRiBDYXJkIEluc2VydAorCSAqIElSTDY9TTY2NTk2CisJICogSVJMNz1TRCBDYXJkCisJICogSVJMOD1Ub3VjaCBQYW5lbAorCSAqIElSTDk9U0NJCisJICogSVJMMTA9U2VyaWFsCisJICogSVJMMTE9RXh0ZW50aW9uICNBCisJICogSVJMMTE9RXh0ZW50aW9uICNCCisJICogSVJMMTI9RGVidWcgTEFOCisJICogSVJMMTM9UHVzaCBTd2l0Y2gKKwkgKiBJUkwxND1aaWdnQmVlIElPCisJICovCisKKwlmb3IgKGk9MDsgaTwxNTsgaSsrKQorCQltYWtlX3I3NzgwcnBfaXJxKGkpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL2xlZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmMDI3NjYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3I3NzgwcnAvbGVkLmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIFJlbmVzYXMgU29sdXRpb25zIEhJR0hMQU5ERVIgUjc3ODBSUC0xIHNwZWNpZmljIExFRCBjb2RlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9yNzc4MHJwL3I3NzgwcnAuaD4KKworLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlnZXIvU3VuIHBhdHRlcm4gKi8KK3ZvaWQgaGVhcnRiZWF0X3I3NzgwcnAodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQV9PQkxFRDsKKwlzdGF0aWMgdW5zaWduZWQgYml0ID0gMCwgdXAgPSAxOworCXVuc2lnbmVkIGJpdF9wb3NbXSA9IHsyLCAxLCAwLCAzLCA2LCA1LCA0LCA3fTsKKworCWNudCArPSAxOworCWlmIChjbnQgPCBwZXJpb2QpCisJCXJldHVybjsKKworCWNudCA9IDA7CisKKwkvKiBHbyB0aHJvdWdoIHRoZSBwb2ludHMgKHJvdWdobHkhKToKKwkgKiBmKDApPTEwLCBmKDEpPTE2LCBmKDIpPTIwLCBmKDUpPTM1LCBmKGludCktPjExMAorCSAqLworCXBlcmlvZCA9IDExMCAtICgoMzAwIDw8IEZTSElGVCkvKChhdmVucnVuWzBdLzUpICsgKDM8PEZTSElGVCkpKTsKKworCSpwID0gMSA8PCBiaXRfcG9zW2JpdF07CisJaWYgKHVwKQorCQlpZiAoYml0ID09IDcpIHsKKwkJCWJpdC0tOworCQkJdXAgPSAwOworCQl9IGVsc2UKKwkJCWJpdCsrOworCWVsc2UgaWYgKGJpdCA9PSAwKQorCQl1cCA9IDE7CisJZWxzZQorCQliaXQtLTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk0MWFhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcjc3ODBycC9zZXR1cC5jCkBAIC0wLDAgKzEsMTYzIEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9yNzc4MHJwL3NldHVwLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUGF1bCBNdW5kdAorICoKKyAqIFJlbmVzYXMgU29sdXRpb25zIEhpZ2hsYW5kZXIgUjc3ODBSUC0xIFN1cHBvcnQuCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vcjc3ODBycC9yNzc4MHJwLmg+CisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2V4dGVybiB2b2lkIGhlYXJ0YmVhdF9yNzc4MHJwKHZvaWQpOworZXh0ZXJuIHZvaWQgaW5pdF9yNzc4MHJwX0lSUSh2b2lkKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtNjY1OTZfdXNiX2hvc3RfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGE0ODAwMDAwLAorCQkuZW5kCT0gMHhhNGZmZmZmZiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS5zdGFydAk9IDYsCQkvKiBpcnEgbnVtYmVyICovCisJCS5lbmQJPSA2LAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgbTY2NTk2X3VzYl9ob3N0X2RldmljZSA9IHsKKwkubmFtZQkJPSAibTY2NTk2LWhjZCIsCisJLmlkCQk9IDAsCisJLmRldiA9IHsKKwkJLmRtYV9tYXNrCQk9IE5VTEwsCQkvKiBkb24ndCB1c2UgZG1hICovCisJCS5jb2hlcmVudF9kbWFfbWFzawk9IDB4ZmZmZmZmZmYsCisJfSwKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobTY2NTk2X3VzYl9ob3N0X3Jlc291cmNlcyksCisJLnJlc291cmNlCT0gbTY2NTk2X3VzYl9ob3N0X3Jlc291cmNlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpyNzc4MHJwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZtNjY1OTZfdXNiX2hvc3RfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcjc3ODBycF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHI3NzgwcnBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShyNzc4MHJwX2RldmljZXMpKTsKK30KKworLyoKKyAqIFBsYXRmb3JtIHNwZWNpZmljIGNsb2NrcworICovCitzdGF0aWMgdm9pZCBpdmRyX2Nsa19lbmFibGUoc3RydWN0IGNsayAqY2xrKQoreworCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8ICgxIDw8IDgpLCBQQV9JVkRSQ1RMKTsKK30KKworc3RhdGljIHZvaWQgaXZkcl9jbGtfZGlzYWJsZShzdHJ1Y3QgY2xrICpjbGspCit7CisJY3RybF9vdXR3KGN0cmxfaW53KFBBX0lWRFJDVEwpICYgfigxIDw8IDgpLCBQQV9JVkRSQ1RMKTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIGl2ZHJfY2xrX29wcyA9IHsKKwkuZW5hYmxlCQk9IGl2ZHJfY2xrX2VuYWJsZSwKKwkuZGlzYWJsZQk9IGl2ZHJfY2xrX2Rpc2FibGUsCit9OworCitzdGF0aWMgc3RydWN0IGNsayBpdmRyX2NsayA9IHsKKwkubmFtZQkJPSAiaXZkcl9jbGsiLAorCS5vcHMJCT0gJml2ZHJfY2xrX29wcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrICpyNzc4MHJwX2Nsb2Nrc1tdID0geworCSZpdmRyX2NsaywKK307CisKK3N0YXRpYyB2b2lkIHI3NzgwcnBfcG93ZXJfb2ZmKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1NIX1I3NzgwTVAKKwljdHJsX291dHcoMHgwMDAxLCBQQV9QT0ZGKTsKKyNlbmRpZgorfQorCisvKgorICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKKyAqLworc3RhdGljIHZvaWQgX19pbml0IHI3NzgwcnBfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwl1MTYgdmVyID0gY3RybF9pbncoUEFfVkVSUkVHKTsKKwlpbnQgaTsKKworCWRldmljZV9pbml0Y2FsbChyNzc4MHJwX2RldmljZXNfc2V0dXApOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBSNzc4MFJQLTEgc3VwcG9ydC5cbiIpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQm9hcmQgdmVyc2lvbjogJWQgKHJldmlzaW9uICVkKSwgIgorCQkJICJGUEdBIHZlcnNpb246ICVkIChyZXZpc2lvbiAlZClcbiIsCisJCQkgKHZlciA+PiAxMikgJiAweGYsICh2ZXIgPj4gOCkgJiAweGYsCisJCQkgKHZlciA+PiAgNCkgJiAweGYsIHZlciAmIDB4Zik7CisKKwkvKgorCSAqIEVuYWJsZSB0aGUgaW1wb3J0YW50IGNsb2NrcyByaWdodCBhd2F5Li4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyNzc4MHJwX2Nsb2Nrcyk7IGkrKykgeworCQlzdHJ1Y3QgY2xrICpjbGsgPSByNzc4MHJwX2Nsb2Nrc1tpXTsKKworCQljbGtfcmVnaXN0ZXIoY2xrKTsKKwkJY2xrX2VuYWJsZShjbGspOworCX0KKworCWN0cmxfb3V0dygweDAwMDAsIFBBX09CTEVEKTsJLyogQ2xlYXIgTEVELiAqLworI2lmbmRlZiBDT05GSUdfU0hfUjc3ODBNUAorCWN0cmxfb3V0dygweDAwMDEsIFBBX1NEUE9XKTsJLyogU0QgUG93ZXIgT04gKi8KKyNlbmRpZgorCWN0cmxfb3V0dyhjdHJsX2ludyhQQV9JVkRSQ1RMKSB8IDB4MDEwMCwgUEFfSVZEUkNUTCk7CS8qIFNpMTMxMTIgKi8KKworCXBtX3Bvd2VyX29mZiA9IHI3NzgwcnBfcG93ZXJfb2ZmOworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9yNzc4MHJwIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJIaWdobGFuZGVyIFI3NzgwUlAtMSIsCisJLm12X3NldHVwCQk9IHI3NzgwcnBfc2V0dXAsCisKKwkubXZfbnJfaXJxcwkJPSAxMDksCisKKwkubXZfaW5iCQkJPSByNzc4MHJwX2luYiwKKwkubXZfaW53CQkJPSByNzc4MHJwX2ludywKKwkubXZfaW5sCQkJPSByNzc4MHJwX2lubCwKKwkubXZfb3V0YgkJPSByNzc4MHJwX291dGIsCisJLm12X291dHcJCT0gcjc3ODBycF9vdXR3LAorCS5tdl9vdXRsCQk9IHI3NzgwcnBfb3V0bCwKKworCS5tdl9pbmJfcAkJPSByNzc4MHJwX2luYl9wLAorCS5tdl9pbndfcAkJPSByNzc4MHJwX2ludywKKwkubXZfaW5sX3AJCT0gcjc3ODBycF9pbmwsCisJLm12X291dGJfcAkJPSByNzc4MHJwX291dGJfcCwKKwkubXZfb3V0d19wCQk9IHI3NzgwcnBfb3V0dywKKwkubXZfb3V0bF9wCQk9IHI3NzgwcnBfb3V0bCwKKworCS5tdl9pbnNiCQk9IHI3NzgwcnBfaW5zYiwKKwkubXZfaW5zdwkJPSByNzc4MHJwX2luc3csCisJLm12X2luc2wJCT0gcjc3ODBycF9pbnNsLAorCS5tdl9vdXRzYgkJPSByNzc4MHJwX291dHNiLAorCS5tdl9vdXRzdwkJPSByNzc4MHJwX291dHN3LAorCS5tdl9vdXRzbAkJPSByNzc4MHJwX291dHNsLAorCisJLm12X2lvcG9ydF9tYXAJCT0gcjc3ODBycF9pb3BvcnRfbWFwLAorCS5tdl9pbml0X2lycQkJPSBpbml0X3I3NzgwcnBfSVJRLAorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9yNzc4MHJwLAorI2VuZGlmCit9OworQUxJQVNfTVYocjc3ODBycCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9LY29uZmlnIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4MGQxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvS2NvbmZpZwpAQCAtMCwwICsxLDEyIEBACitpZiBTSF9SVFM3NzUxUjJECisKK21lbnUgIlJUUzc3NTFSMkQgb3B0aW9ucyIKKworY29uZmlnIFJUUzc3NTFSMkRfUkVWMTEKKwlib29sICJSVFM3NzUxUjJEIFJldi4gMS4xIGJvYXJkIHN1cHBvcnQiCisJaGVscAorCSAgU2VsZWN0aW5nIHRoaXMgb3B0aW9uIHdpbGwgc3VwcG9ydCB2ZXJzaW9uIHJldi4gMS4xLgorZW5kbWVudQorCitlbmRpZgorCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvTWFrZWZpbGUKaW5kZXggZGFhNTMzMy4uNjg2ZmM5ZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9NYWtlZmlsZQpAQCAtMSwxMCArMSw2IEBACiAjCiAjIE1ha2VmaWxlIGZvciB0aGUgUlRTNzc1MVIyRCBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCiAjCi0jIE5vdGUhIERlcGVuZGVuY2llcyBhcmUgZG9uZSBhdXRvbWFnaWNhbGx5IGJ5ICdtYWtlIGRlcCcsIHdoaWNoIGFsc28KLSMgcmVtb3ZlcyBhbnkgb2xkIGRlcGVuZGVuY2llcy4gRE9OJ1QgcHV0IHlvdXIgb3duIGRlcGVuZGVuY2llcyBoZXJlCi0jIHVubGVzcyBpdCdzIHNvbWV0aGluZyBzcGVjaWFsIChpZSBub3QgYSAuYyBmaWxlKS4KLSMKIAotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KLQorb2JqLXkJIDo9IHNldHVwLm8gaW8ubyBpcnEubworb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pby5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKaW5kZXggMTIzYWJiYi4uMTM1YWEwYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lvLmMKQEAgLTEsNiArMSw0IEBACiAvKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvaW9fcnRzNzc1MXIyZC5jCi0gKgogICogQ29weXJpZ2h0IChDKSAyMDAxICBJYW4gZGEgU2lsdmEsIEplcmVteSBTaWVnZWwKICAqIEJhc2VkIGxhcmdlbHkgb24gaW9fc2UuYy4KICAqCkBAIC0xMCwxNiArOCwxMiBAQAogICogcGxhY2Vob2xkZXIgY29kZSBmcm9tIGlvX3J0czc3NTFyMmQuYyBsZWZ0IGluIHdpdGggdGhlCiAgKiBleHBlY3RhdGlvbiBvZiBsYXRlciBTdXBlcklPIGFuZCBQQ01DSUEgYWNjZXNzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KLSNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmgiCisjaW5jbHVkZSA8YXNtL3J0czc3NTFyMmQvcnRzNzc1MXIyZC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAogLyoKICAqIFRoZSA3NzUxUiBSVFM3NzUxUjJEIHVzZXMgdGhlIGJ1aWx0LWluIFBDSSBjb250cm9sbGVyIChQQ0lDKQpAQCAtMjgsMjIgKzIyLDYgQEAKICAqIGxpa2UgdGhlIG90aGVyIFNvbHV0aW9uIEVuZ2luZSBib2FyZHMuCiAgKi8KIAotI2RlZmluZSBQQ0lJT0JSCQkodm9sYXRpbGUgbG9uZyAqKVBDSV9SRUcoU0g3NzUxX1BDSUlPQlIpCi0jZGVmaW5lIFBDSU1CUiAgICAgICAgICAodm9sYXRpbGUgbG9uZyAqKVBDSV9SRUcoU0g3NzUxX1BDSU1CUikKLSNkZWZpbmUgUENJX0lPX0FSRUEJU0g3NzUxX1BDSV9JT19CQVNFCi0jZGVmaW5lIFBDSV9NRU1fQVJFQQlTSDc3NTFfUENJX0NPTkZJR19CQVNFCi0KLSNkZWZpbmUgUENJX0lPTUFQKGFkcikJKFBDSV9JT19BUkVBICsgKGFkciAmIH5TSDc3NTFfUENJSU9CUl9NQVNLKSkKLQotI2RlZmluZSBtYXliZWJhZGlvKG5hbWUscG9ydCkgXAotICBwcmludGsoImJhZCBQQy1saWtlIGlvICVzIGZvciBwb3J0IDB4JWx4IGF0IDB4JTA4eFxuIiwgXAotCSAjbmFtZSwgKHBvcnQpLCAoX191MzIpIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKSkKLQotc3RhdGljIGlubGluZSB2b2lkIGRlbGF5KHZvaWQpCi17Ci0JY3RybF9pbncoMHhhMDAwMDAwMCk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKIHsKIAlpZiAoKDB4MWYwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MWY4KSB8fCBwb3J0ID09IDB4M2Y2KQpAQCAtNTIsNyArMzAsNyBAQAogCQllbHNlCiAJCQlyZXR1cm4gKFBBX0FSRUE1X0lPICsgMHgxMDAwICsgKChwb3J0LTB4MWYwKSA8PCAxKSk7CiAJZWxzZQotCQltYXliZWJhZGlvKHBvcnQyYWRyLCAodW5zaWduZWQgbG9uZylwb3J0KTsKKwkJbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKIAogCXJldHVybiBwb3J0OwogfQpAQCAtODEsMTcgKzU5LDYgQEAKIAkJcmV0dXJuIDE7CiB9CiAKLS8qIEluIGNhc2Ugc29tZW9uZSBjb25maWd1cmVzIHRoZSBrZXJuZWwgdy9vIFBDSSBzdXBwb3J0OiBpbiB0aGF0ICovCi0vKiBzY2VuYXJpbywgZG9uJ3QgZXZlciBib3RoZXIgdG8gY2hlY2sgZm9yIFBDSS13aW5kb3cgYWRkcmVzc2VzICovCi0KLS8qIE5PVEU6IFdJTkRPVyBDSEVDSyBNQVkgQkUgQSBCSVQgT0ZGLCBISUdIIFBDSUJJT1NfTUlOX0lPIFdSQVBTPyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIFwKLSAgKChwb3J0ID49IFBDSUJJT1NfTUlOX0lPKSAmJiAocG9ydCA8IChQQ0lCSU9TX01JTl9JTyArIFNINzc1MV9QQ0lfSU9fU0laRSkpKQotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpICgwKQotI2VuZGlmCi0KICNpZiBkZWZpbmVkKENPTkZJR19ORTIwMDApIHx8IGRlZmluZWQoQ09ORklHX05FMjAwMF9NT0RVTEUpCiAjZGVmaW5lIENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkgXAogICAoKHBvcnQgPj0gQVg4ODc5NkxfSU9fQkFTRSkgJiYgKHBvcnQgPCAoQVg4ODc5NkxfSU9fQkFTRSsweDIwKSkpCkBAIC0xMTIsOCArNzksOCBAQAogCQlyZXR1cm4gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0ODg3OTZsKHBvcnQsIDApKSAmIDB4ZmY7CiAJZWxzZSBpZiAoUFhTRUcocG9ydCkpCiAJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UKIAkJcmV0dXJuICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCkgJiAweGZmKTsKIH0KQEAgLTEyNiwxMSArOTMsMTIgQEAKIAkJdiA9ICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAwKSkgJiAweGZmOwogICAgICAgICBlbHNlIGlmIChQWFNFRyhwb3J0KSkKIAkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQogCQl2ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KSAmIDB4ZmYpOwotCWRlbGF5KCk7CisKKwljdHJsX2RlbGF5KCk7CiAKIAlyZXR1cm4gdjsKIH0KQEAgLTEzOCwxMyArMTA2LDEzIEBACiB1bnNpZ25lZCBzaG9ydCBydHM3NzUxcjJkX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8oaW53LCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKICAgICAgICAgZWxzZSBpZiAoUFhTRUcocG9ydCkpCiAJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhpbncsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNTIsMTMgKzEyMCwxMyBAQAogdW5zaWduZWQgaW50IHJ0czc3NTFyMmRfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKLQkJbWF5YmViYWRpbyhpbmwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogICAgICAgICBlbHNlIGlmIChQWFNFRyhwb3J0KSkKIAkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQltYXliZWJhZGlvKGlubCwgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE2OSw4ICsxMzcsOCBAQAogCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMCkpID0gdmFsdWU7CiAgICAgICAgIGVsc2UgaWYgKFBYU0VHKHBvcnQpKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJX0lPTUFQKHBvcnQpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCkgPSB2YWx1ZTsKIAllbHNlCiAJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KSA9IHZhbHVlOwogfQpAQCAtMTgxLDE0NCArMTQ5LDE1MyBAQAogCQkqKCh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMCkpID0gdmFsdWU7CiAgICAgICAgIGVsc2UgaWYgKFBYU0VHKHBvcnQpKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJX0lPTUFQKHBvcnQpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCkgPSB2YWx1ZTsKIAllbHNlCiAJCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KSA9IHZhbHVlOwotCWRlbGF5KCk7CisKKwljdHJsX2RlbGF5KCk7CiB9CiAKIHZvaWQgcnRzNzc1MXIyZF9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8ob3V0dywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAgICAgICAgIGVsc2UgaWYgKFBYU0VHKHBvcnQpKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQ0lfSU9NQVAocG9ydCkgPSB2YWx1ZTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBjaV9pb2FkZHIocG9ydCkgPSB2YWx1ZTsKIAllbHNlCi0JCW1heWJlYmFkaW8ob3V0dywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiB9CiAKIHZvaWQgcnRzNzc1MXIyZF9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQotCQltYXliZWJhZGlvKG91dGwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogICAgICAgICBlbHNlIGlmIChQWFNFRyhwb3J0KSkKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKVBDSV9JT01BUChwb3J0KSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKQorCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwY2lfaW9hZGRyKHBvcnQpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dGwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHJ0czc3NTFyMmRfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAl2b2xhdGlsZSBfX3U4ICpicDsKIAl2b2xhdGlsZSBfX3UxNiAqcDsKLQl1bnNpZ25lZCBjaGFyICpzID0gYWRkcjsKIAogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKSB7CiAJCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0ODg3OTZsKHBvcnQsIDApOwotCQl3aGlsZSAoY291bnQtLSkgKnMrKyA9ICpwICYgMHhmZjsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljdHJsX291dGIoKnAgJiAweGZmLCBhKyspOwogCX0gZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXdoaWxlIChjb3VudC0tKSAqcysrID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCWJwID0gKF9fdTggKilQQ0lfSU9NQVAocG9ydCk7Ci0JCXdoaWxlIChjb3VudC0tKSAqcysrID0gKmJwOworCQl3aGlsZSAoY291bnQtLSkKKwkJCWN0cmxfb3V0YihjdHJsX2luYihwb3J0KSwgYSsrKTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgeworCQlicCA9IChfX3U4ICopcGNpX2lvYWRkcihwb3J0KTsKKwkJd2hpbGUgKGNvdW50LS0pCisJCQljdHJsX291dGIoKmJwLCBhKyspOwogCX0gZWxzZSB7CiAJCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0MmFkcihwb3J0KTsKLQkJd2hpbGUgKGNvdW50LS0pICpzKysgPSAqcCAmIDB4ZmY7CisJCXdoaWxlIChjb3VudC0tKQorCQkJY3RybF9vdXRiKCpwICYgMHhmZiwgYSsrKTsKIAl9CiB9CiAKIHZvaWQgcnRzNzc1MXIyZF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKKwl1bnNpZ25lZCBsb25nIGEgPSAodW5zaWduZWQgbG9uZylhZGRyOwogCXZvbGF0aWxlIF9fdTE2ICpwOwotCV9fdTE2ICpzID0gYWRkcjsKIAogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQogCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDg4Nzk2bChwb3J0LCAxKTsKIAllbHNlIGlmIChQWFNFRyhwb3J0KSkKIAkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKLQkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkKKwkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQogCQlwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDJhZHIocG9ydCk7Ci0Jd2hpbGUgKGNvdW50LS0pICpzKysgPSAqcDsKKwl3aGlsZSAoY291bnQtLSkKKwkJY3RybF9vdXR3KCpwLCBhKyspOwogfQogCiB2b2lkIHJ0czc3NTFyMmRfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpCi0JCW1heWJlYmFkaW8oaW5zbCwgcG9ydCk7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIHx8IHNoaWZ0ZWRfcG9ydChwb3J0KSkgewotCQl2b2xhdGlsZSBfX3UzMiAqcCA9IChfX3UzMiAqKVBDSV9JT01BUChwb3J0KTsKLQkJX191MzIgKnMgPSBhZGRyOworCQltYXliZWJhZGlvKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7CisJCXVuc2lnbmVkIGxvbmcgYSA9ICh1bnNpZ25lZCBsb25nKWFkZHI7CiAKLQkJd2hpbGUgKGNvdW50LS0pICpzKysgPSAqcDsKKwkJd2hpbGUgKGNvdW50LS0pIHsKKwkJCWN0cmxfb3V0bChjdHJsX2lubChwY2lfaW9hZGRyKHBvcnQpKSwgYSk7CisJCQlhICs9IDQ7CisJCX0KIAl9IGVsc2UKLQkJbWF5YmViYWRpbyhpbnNsLCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAogdm9pZCBydHM3NzUxcjJkX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKIHsKKwl1bnNpZ25lZCBsb25nIGEgPSAodW5zaWduZWQgbG9uZylhZGRyOwogCXZvbGF0aWxlIF9fdTggKmJwOwogCXZvbGF0aWxlIF9fdTE2ICpwOwotCWNvbnN0IF9fdTggKnMgPSBhZGRyOwogCiAJaWYgKENIRUNLX0FYODg3OTZMX1BPUlQocG9ydCkpIHsKIAkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMCk7Ci0JCXdoaWxlIChjb3VudC0tKSAqcCA9ICpzKys7CisJCXdoaWxlIChjb3VudC0tKQorCQkJKnAgPSBjdHJsX2luYihhKyspOwogCX0gZWxzZSBpZiAoUFhTRUcocG9ydCkpCi0JCXdoaWxlIChjb3VudC0tKSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gKnMrKzsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCWJwID0gKF9fdTggKilQQ0lfSU9NQVAocG9ydCk7Ci0JCXdoaWxlIChjb3VudC0tKSAqYnAgPSAqcysrOworCQl3aGlsZSAoY291bnQtLSkKKwkJCWN0cmxfb3V0YihhKyssIHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7CisJCWJwID0gKF9fdTggKilwY2lfaW9hZGRyKHBvcnQpOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpicCA9IGN0cmxfaW5iKGErKyk7CiAJfSBlbHNlIHsKIAkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCQl3aGlsZSAoY291bnQtLSkgKnAgPSAqcysrOworCQl3aGlsZSAoY291bnQtLSkKKwkJCSpwID0gY3RybF9pbmIoYSsrKTsKIAl9CiB9CiAKIHZvaWQgcnRzNzc1MXIyZF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7CisJdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAl2b2xhdGlsZSBfX3UxNiAqcDsKLQljb25zdCBfX3UxNiAqcyA9IGFkZHI7CiAKIAlpZiAoQ0hFQ0tfQVg4ODc5NkxfUE9SVChwb3J0KSkKIAkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ4ODc5NmwocG9ydCwgMSk7CiAJZWxzZSBpZiAoUFhTRUcocG9ydCkpCiAJCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCi0JCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpCisJCXAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UKIAkJcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQyYWRyKHBvcnQpOwotCXdoaWxlIChjb3VudC0tKSAqcCA9ICpzKys7CisKKwl3aGlsZSAoY291bnQtLSkgeworCQljdHJsX291dHcoKnAsIGEpOworCQlhICs9IDI7CisJfQogfQogCiB2b2lkIHJ0czc3NTFyMmRfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewogCWlmIChDSEVDS19BWDg4Nzk2TF9QT1JUKHBvcnQpKQotCQltYXliZWJhZGlvKG91dHNsLCBwb3J0KTsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgfHwgc2hpZnRlZF9wb3J0KHBvcnQpKSB7Ci0JCXZvbGF0aWxlIF9fdTMyICpwID0gKF9fdTMyICopUENJX0lPTUFQKHBvcnQpOwotCQljb25zdCBfX3UzMiAqcyA9IGFkZHI7CisJCW1heWJlYmFkaW8ocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSB8fCBzaGlmdGVkX3BvcnQocG9ydCkpIHsKKwkJdW5zaWduZWQgbG9uZyBhID0gKHVuc2lnbmVkIGxvbmcpYWRkcjsKIAotCQl3aGlsZSAoY291bnQtLSkgKnAgPSAqcysrOworCQl3aGlsZSAoY291bnQtLSkgeworCQkJY3RybF9vdXRsKGN0cmxfaW5sKGEpLCBwY2lfaW9hZGRyKHBvcnQpKTsKKwkJCWEgKz0gNDsKKwkJfQogCX0gZWxzZQotCQltYXliZWJhZGlvKG91dHNsLCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAotdm9pZCAqcnRzNzc1MXIyZF9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpCi17Ci0JaWYgKG9mZnNldCA+PSAweGZkMDAwMDAwKQotCQlyZXR1cm4gKHZvaWQgKilvZmZzZXQ7Ci0JZWxzZQotCQlyZXR1cm4gKHZvaWQgKilQMlNFR0FERFIob2Zmc2V0KTsKLX0KLUVYUE9SVF9TWU1CT0wocnRzNzc1MXIyZF9pb3JlbWFwKTsKLQogdW5zaWduZWQgbG9uZyBydHM3NzUxcjJkX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCiB7CiAJcmV0dXJuIHBvcnQyYWRyKG9mZnNldCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvaXJxLmMKaW5kZXggMTU0NTM1NC4uYzkxNWU3YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9pcnEuYwpAQCAtNDEsMzAgKzQxLDI0IEBACiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfcnRzNzc1MXIyZF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IHZhbDsKIAl1bnNpZ25lZCBzaG9ydCBtYXNrID0gMHhmZmZmIF4gKDB4MDAwMSA8PCBtYXNrX3Bvc1tpcnFdKTsKIAogCS8qIFNldCB0aGUgcHJpb3JpdHkgaW4gSVBSIHRvIDAgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdmFsID0gY3RybF9pbncoSVJMQ05UUjEpOwogCXZhbCAmPSBtYXNrOwogCWN0cmxfb3V0dyh2YWwsIElSTENOVFIxKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9ydHM3NzUxcjJkX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgdmFsOwogCXVuc2lnbmVkIHNob3J0IHZhbHVlID0gKDB4MDAwMSA8PCBtYXNrX3Bvc1tpcnFdKTsKIAogCS8qIFNldCBwcmlvcml0eSBpbiBJUFIgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl2YWwgPSBjdHJsX2ludyhJUkxDTlRSMSk7CiAJdmFsIHw9IHZhbHVlOwogCWN0cmxfb3V0dyh2YWwsIElSTENOVFIxKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIGludCBydHM3NzUxcjJkX2lycV9kZW11eChpbnQgaXJxKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL2xlZC5jCmluZGV4IDRkMTZkZTcuLmUxNGExM2QgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3J0czc3NTFyMmQvbGVkLmMKQEAgLTEyLDggKzEyLDYgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmg+CiAKLWV4dGVybiB1bnNpZ25lZCBpbnQgZGVidWdfY291bnRlcjsKLQogI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKIAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC01NSwxMiArNTMsMyBAQAogCWN0cmxfb3V0dyh2YWx1ZSwgUEFfT1VUUE9SVCk7CiB9CiAKLXZvaWQgZGVidWdfbGVkX2Rpc3Aodm9pZCkKLXsKLQl1bnNpZ25lZCBzaG9ydCB2YWx1ZTsKLQotCXZhbHVlID0gKHVuc2lnbmVkIHNob3J0KWRlYnVnX2NvdW50ZXIrKzsKLQlydHM3NzUxcjJkX2xlZCh2YWx1ZSk7Ci0JaWYgKHZhbHVlID09IDB4ZmYpCi0JCWRlYnVnX2NvdW50ZXIgPSAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL21hY2guYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9tYWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlZDllOTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL21hY2guYworKysgL2Rldi9udWxsCkBAIC0xLDY5ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9tYWNoX3J0czc3NTFyMmQuYwotICoKLSAqIE1pbm9yIHR3ZWFrIG9mIG1hY2hfc2UuYyBmaWxlIHRvIHJlZmVyZW5jZSBydHM3NzUxcjJkLXNwZWNpZmljIGl0ZW1zLgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBNYWNoaW5lIHZlY3RvciBmb3IgdGhlIFJlbmVzYXMgVGVjaG5vbG9neSBzYWxlcyBSVFM3NzUxUjJECi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL2lvLmg+Ci0KLWV4dGVybiB2b2lkIGhlYXJ0YmVhdF9ydHM3NzUxcjJkKHZvaWQpOwotZXh0ZXJuIHZvaWQgaW5pdF9ydHM3NzUxcjJkX0lSUSh2b2lkKTsKLWV4dGVybiB2b2lkICpydHM3NzUxcjJkX2lvcmVtYXAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50IHJ0czc3NTFyMmRfaXJxX2RlbXV4KGludCBpcnEpOwotCi1leHRlcm4gdm9pZCAqdm95YWdlcmd4X2NvbnNpc3RlbnRfYWxsb2Moc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOwotZXh0ZXJuIGludCB2b3lhZ2VyZ3hfY29uc2lzdGVudF9mcmVlKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLQotc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3J0czc3NTFyMmQgX19pbml0bXYgPSB7Ci0JLm12X25yX2lycXMJCT0gNzIsCi0KLQkubXZfaW5iCQkJPSBydHM3NzUxcjJkX2luYiwKLQkubXZfaW53CQkJPSBydHM3NzUxcjJkX2ludywKLQkubXZfaW5sCQkJPSBydHM3NzUxcjJkX2lubCwKLQkubXZfb3V0YgkJPSBydHM3NzUxcjJkX291dGIsCi0JLm12X291dHcJCT0gcnRzNzc1MXIyZF9vdXR3LAotCS5tdl9vdXRsCQk9IHJ0czc3NTFyMmRfb3V0bCwKLQotCS5tdl9pbmJfcAkJPSBydHM3NzUxcjJkX2luYl9wLAotCS5tdl9pbndfcAkJPSBydHM3NzUxcjJkX2ludywKLQkubXZfaW5sX3AJCT0gcnRzNzc1MXIyZF9pbmwsCi0JLm12X291dGJfcAkJPSBydHM3NzUxcjJkX291dGJfcCwKLQkubXZfb3V0d19wCQk9IHJ0czc3NTFyMmRfb3V0dywKLQkubXZfb3V0bF9wCQk9IHJ0czc3NTFyMmRfb3V0bCwKLQotCS5tdl9pbnNiCQk9IHJ0czc3NTFyMmRfaW5zYiwKLQkubXZfaW5zdwkJPSBydHM3NzUxcjJkX2luc3csCi0JLm12X2luc2wJCT0gcnRzNzc1MXIyZF9pbnNsLAotCS5tdl9vdXRzYgkJPSBydHM3NzUxcjJkX291dHNiLAotCS5tdl9vdXRzdwkJPSBydHM3NzUxcjJkX291dHN3LAotCS5tdl9vdXRzbAkJPSBydHM3NzUxcjJkX291dHNsLAotCi0JLm12X2lvcmVtYXAJCT0gcnRzNzc1MXIyZF9pb3JlbWFwLAotCS5tdl9pc2FfcG9ydDJhZGRyCT0gcnRzNzc1MXIyZF9pc2FfcG9ydDJhZGRyLAotCS5tdl9pbml0X2lycQkJPSBpbml0X3J0czc3NTFyMmRfSVJRLAotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IGhlYXJ0YmVhdF9ydHM3NzUxcjJkLAotI2VuZGlmCi0JLm12X2lycV9kZW11eAkJPSBydHM3NzUxcjJkX2lycV9kZW11eCwKLQotI2lmZGVmIENPTkZJR19VU0JfT0hDSV9IQ0QKLQkubXZfY29uc2lzdGVudF9hbGxvYwk9IHZveWFnZXJneF9jb25zaXN0ZW50X2FsbG9jLAotCS5tdl9jb25zaXN0ZW50X2ZyZWUJPSB2b3lhZ2VyZ3hfY29uc2lzdGVudF9mcmVlLAotI2VuZGlmCi19OwotQUxJQVNfTVYocnRzNzc1MXIyZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvcnRzNzc1MXIyZC9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKaW5kZXggMjU4N2ZkMS4uMjA1OTdhNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9ydHM3NzUxcjJkL3NldHVwLmMKQEAgLTEsMzEgKzEsMTQyIEBACiAvKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvc2V0dXBfcnRzNzc1MXIyZC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwICBLYXp1bW90byBLb2ppbWEKLSAqCiAgKiBSZW5lc2FzIFRlY2hub2xvZ3kgU2FsZXMgUlRTNzc1MVIyRCBTdXBwb3J0LgogICoKLSAqIE1vZGlmaWVkIGZvciBSVFM3NzUxUjJEIGJ5Ci0gKiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4gMjAwMi4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBBdG9tIENyZWF0ZSBFbmdpbmVlcmluZyBDby4sIEx0ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCAtIDIwMDYgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsXzgyNTAuaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9tYWNoL3J0czc3NTFyMmQuaD4KKyNpbmNsdWRlIDxhc20vdm95YWdlcmd4Lmg+CiAKLXVuc2lnbmVkIGludCBkZWJ1Z19jb3VudGVyOworZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X3J0czc3NTFyMmQodm9pZCk7CitleHRlcm4gdm9pZCBpbml0X3J0czc3NTFyMmRfSVJRKHZvaWQpOworZXh0ZXJuIGludCBydHM3NzUxcjJkX2lycV9kZW11eChpbnQgaXJxKTsKIAotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCitleHRlcm4gdm9pZCAqdm95YWdlcmd4X2NvbnNpc3RlbnRfYWxsb2Moc3RydWN0IGRldmljZSAqLCBzaXplX3QsIGRtYV9hZGRyX3QgKiwgZ2ZwX3QpOworZXh0ZXJuIGludCB2b3lhZ2VyZ3hfY29uc2lzdGVudF9mcmVlKHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOworCitzdGF0aWMgc3RydWN0IHBsYXRfc2VyaWFsODI1MF9wb3J0IHVhcnRfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1lbWJhc2UJPSAodm9pZCAqKVZPWUFHRVJfVUFSVF9CQVNFLAorCQkubWFwYmFzZQk9IFZPWUFHRVJfVUFSVF9CQVNFLAorCQkuaW90eXBlCQk9IFVQSU9fTUVNLAorCQkuaXJxCQk9IFZPWUFHRVJfVUFSVDBfSVJRLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS5yZWdzaGlmdAk9IDIsCisJCS51YXJ0Y2xrCT0gKDk2MDAgKiAxNiksCisJfSwgeworCQkuZmxhZ3MJCT0gMCwKKwl9LAorfTsKKworc3RhdGljIHZvaWQgX19pbml0IHZveWFnZXJneF9zZXJpYWxfaW5pdCh2b2lkKQogewotCXJldHVybiAiUlRTNzc1MVIyRCI7CisJdW5zaWduZWQgbG9uZyB2YWw7CisKKwkvKgorCSAqIEdQSU8gQ29udHJvbAorCSAqLworCXZhbCA9IGlubChHUElPX01VWF9ISUdIKTsKKwl2YWwgfD0gMHgwMDAwMWZlMDsKKwlvdXRsKHZhbCwgR1BJT19NVVhfSElHSCk7CisKKwkvKgorCSAqIFBvd2VyIE1vZGUgR2F0ZQorCSAqLworCXZhbCA9IGlubChQT1dFUl9NT0RFMF9HQVRFKTsKKwl2YWwgfD0gKFBPV0VSX01PREUwX0dBVEVfVTAgfCBQT1dFUl9NT0RFMF9HQVRFX1UxKTsKKwlvdXRsKHZhbCwgUE9XRVJfTU9ERTBfR0FURSk7CisKKwl2YWwgPSBpbmwoUE9XRVJfTU9ERTFfR0FURSk7CisJdmFsIHw9IChQT1dFUl9NT0RFMV9HQVRFX1UwIHwgUE9XRVJfTU9ERTFfR0FURV9VMSk7CisJb3V0bCh2YWwsIFBPV0VSX01PREUxX0dBVEUpOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSB1YXJ0X2RldmljZSA9IHsKKwkubmFtZQkJPSAic2VyaWFsODI1MCIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHVhcnRfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnJ0czc3NTFyMmRfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnVhcnRfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcnRzNzc1MXIyZF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHJ0czc3NTFyMmRfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShydHM3NzUxcjJkX2RldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgcnRzNzc1MXIyZF9wb3dlcl9vZmYodm9pZCkKK3sKKwljdHJsX291dHcoMHgwMDAxLCBQQV9QT1dPRkYpOwogfQogCiAvKgogICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKICAqLwotdm9pZCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBydHM3NzUxcjJkX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUmVuZXNhcyBUZWNobm9sb2d5IFNhbGVzIFJUUzc3NTFSMkQgc3VwcG9ydC5cbiIpOworCWRldmljZV9pbml0Y2FsbChydHM3NzUxcjJkX2RldmljZXNfc2V0dXApOworCiAJY3RybF9vdXR3KDB4MDAwMCwgUEFfT1VUUE9SVCk7Ci0JZGVidWdfY291bnRlciA9IDA7CisJcG1fcG93ZXJfb2ZmID0gcnRzNzc1MXIyZF9wb3dlcl9vZmY7CisKKwl2b3lhZ2VyZ3hfc2VyaWFsX2luaXQoKTsKKworCXByaW50ayhLRVJOX0lORk8gIlJlbmVzYXMgVGVjaG5vbG9neSBTYWxlcyBSVFM3NzUxUjJEIHN1cHBvcnQuXG4iKTsKIH0KKworLyoKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgorICovCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfcnRzNzc1MXIyZCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiUlRTNzc1MVIyRCIsCisJLm12X3NldHVwCQk9IHJ0czc3NTFyMmRfc2V0dXAsCisJLm12X25yX2lycXMJCT0gNzIsCisKKwkubXZfaW5iCQkJPSBydHM3NzUxcjJkX2luYiwKKwkubXZfaW53CQkJPSBydHM3NzUxcjJkX2ludywKKwkubXZfaW5sCQkJPSBydHM3NzUxcjJkX2lubCwKKwkubXZfb3V0YgkJPSBydHM3NzUxcjJkX291dGIsCisJLm12X291dHcJCT0gcnRzNzc1MXIyZF9vdXR3LAorCS5tdl9vdXRsCQk9IHJ0czc3NTFyMmRfb3V0bCwKKworCS5tdl9pbmJfcAkJPSBydHM3NzUxcjJkX2luYl9wLAorCS5tdl9pbndfcAkJPSBydHM3NzUxcjJkX2ludywKKwkubXZfaW5sX3AJCT0gcnRzNzc1MXIyZF9pbmwsCisJLm12X291dGJfcAkJPSBydHM3NzUxcjJkX291dGJfcCwKKwkubXZfb3V0d19wCQk9IHJ0czc3NTFyMmRfb3V0dywKKwkubXZfb3V0bF9wCQk9IHJ0czc3NTFyMmRfb3V0bCwKKworCS5tdl9pbnNiCQk9IHJ0czc3NTFyMmRfaW5zYiwKKwkubXZfaW5zdwkJPSBydHM3NzUxcjJkX2luc3csCisJLm12X2luc2wJCT0gcnRzNzc1MXIyZF9pbnNsLAorCS5tdl9vdXRzYgkJPSBydHM3NzUxcjJkX291dHNiLAorCS5tdl9vdXRzdwkJPSBydHM3NzUxcjJkX291dHN3LAorCS5tdl9vdXRzbAkJPSBydHM3NzUxcjJkX291dHNsLAorCisJLm12X2luaXRfaXJxCQk9IGluaXRfcnRzNzc1MXIyZF9JUlEsCisjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAorCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0X3J0czc3NTFyMmQsCisjZW5kaWYKKwkubXZfaXJxX2RlbXV4CQk9IHJ0czc3NTFyMmRfaXJxX2RlbXV4LAorCisjaWZkZWYgQ09ORklHX1VTQl9TTTUwMQorCS5tdl9jb25zaXN0ZW50X2FsbG9jCT0gdm95YWdlcmd4X2NvbnNpc3RlbnRfYWxsb2MsCisJLm12X2NvbnNpc3RlbnRfZnJlZQk9IHZveWFnZXJneF9jb25zaXN0ZW50X2ZyZWUsCisjZW5kaWYKK307CitBTElBU19NVihydHM3NzUxcjJkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zaDc3MTB2b2lwZ3cvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzAzNzU2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zaDc3MTB2b2lwZ3cvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJIDo9IHNldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc2g3NzEwdm9pcGd3L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1N2U3YWYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3NoNzcxMHZvaXBndy9zZXR1cC5jCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogUmVuZXNhcyBUZWNobm9sb2d5IFNINzcxMCBWb0lQIEdhdGV3YXkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFJhbmppdCBEZXNocGFuZGUKKyAqIEtlbmF0aSBUZWNobm9sb2dpZXMgSW5jLgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisKKy8qCisgKiBJbml0aWFsaXplIElSUSBzZXR0aW5nCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3MTB2b2lwZ3dfaW5pdF9pcnEodm9pZCkKK3sKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGluIElQUiByZWdpc3RlcnMgKi8KKwljdHJsX291dHcoMHgwLCBJTlRDX0lQUkEpOworCWN0cmxfb3V0dygweDAsIElOVENfSVBSQik7CisJY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJDKTsKKwljdHJsX291dHcoMHgwLCBJTlRDX0lQUkQpOworCWN0cmxfb3V0dygweDAsIElOVENfSVBSRSk7CisJY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJGKTsKKwljdHJsX291dHcoMHgwLCBJTlRDX0lQUkcpOworCWN0cmxfb3V0dygweDAsIElOVENfSVBSSCk7CisJY3RybF9vdXR3KDB4MCwgSU5UQ19JUFJJKTsKKworCS8qIEFjayBhbGwgaW50ZXJydXB0IHNvdXJjZXMgaW4gdGhlIElSUjAgcmVnaXN0ZXIgKi8KKwljdHJsX291dGIoMHgzZiwgSU5UQ19JUlIwKTsKKworCS8qIFVzZSBJUlEwIC0gSVJRMyBhcyBhY3RpdmUgbG93IGludGVycnVwdCBsaW5lcyBpLmUuIGRpc2FibGUKKwkgKiBJUkwgbW9kZS4KKwkgKi8KKwljdHJsX291dHcoMHgyYWEsIElOVENfSUNSMSk7CisKKwkvKiBOb3cgbWFrZSBJUFIgaW50ZXJydXB0cyAqLworCW1ha2VfaXByX2lycShUSU1FUjJfSVJRLCBUSU1FUjJfSVBSX0FERFIsCisJCQlUSU1FUjJfSVBSX1BPUywgVElNRVIyX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoV0RUX0lSUSwgV0RUX0lQUl9BRERSLCBXRFRfSVBSX1BPUywgV0RUX1BSSU9SSVRZKTsKKworCS8qIFNDSUYwICovCisJbWFrZV9pcHJfaXJxKFNDSUYwX0VSSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLAorCQkJU0NJRjBfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShTQ0lGMF9SWElfSVJRLCBTQ0lGMF9JUFJfQUREUiwgU0NJRjBfSVBSX1BPUywKKwkJCVNDSUYwX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoU0NJRjBfQlJJX0lSUSwgU0NJRjBfSVBSX0FERFIsIFNDSUYwX0lQUl9QT1MsCisJCQlTQ0lGMF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKFNDSUYwX1RYSV9JUlEsIFNDSUYwX0lQUl9BRERSLCBTQ0lGMF9JUFJfUE9TLAorCQkJU0NJRjBfUFJJT1JJVFkpOworCisJLyogRE1BQy0xICovCisJbWFrZV9pcHJfaXJxKERNVEUwX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoRE1URTFfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShETVRFMl9JUlEsIERNQV9JUFJfQUREUiwgRE1BX0lQUl9QT1MsIERNQV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKERNVEUzX0lSUSwgRE1BX0lQUl9BRERSLCBETUFfSVBSX1BPUywgRE1BX1BSSU9SSVRZKTsKKworCS8qIERNQUMtMiAqLworCW1ha2VfaXByX2lycShETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKERNVEU0X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZKTsKKworCS8qIElQU0VDICovCisJbWFrZV9pcHJfaXJxKElQU0VDX0lSUSwgSVBTRUNfSVBSX0FERFIsIElQU0VDX0lQUl9QT1MsIElQU0VDX1BSSU9SSVRZKTsKKworCS8qIEVETUFDICovCisJbWFrZV9pcHJfaXJxKEVETUFDMF9JUlEsIEVETUFDMF9JUFJfQUREUiwgRURNQUMwX0lQUl9QT1MsCisJCQlFRE1BQzBfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShFRE1BQzFfSVJRLCBFRE1BQzFfSVBSX0FERFIsIEVETUFDMV9JUFJfUE9TLAorCQkJRURNQUMxX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoRURNQUMyX0lSUSwgRURNQUMyX0lQUl9BRERSLCBFRE1BQzJfSVBSX1BPUywKKwkJCUVETUFDMl9QUklPUklUWSk7CisKKwkvKiBTSU9GMCAqLworCW1ha2VfaXByX2lycShTSU9GMF9FUklfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywKKwkJCVNJT0YwX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoU0lPRjBfVFhJX0lSUSwgU0lPRjBfSVBSX0FERFIsIFNJT0YwX0lQUl9QT1MsCisJCQlTSU9GMF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKFNJT0YwX1JYSV9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLAorCQkJU0lPRjBfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShTSU9GMF9DQ0lfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywKKwkJCVNJT0YwX1BSSU9SSVRZKTsKKworCS8qIFNJT0YxICovCisJbWFrZV9pcHJfaXJxKFNJT0YxX0VSSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLAorCQkJU0lPRjFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShTSU9GMV9UWElfSVJRLCBTSU9GMV9JUFJfQUREUiwgU0lPRjFfSVBSX1BPUywKKwkJCVNJT0YxX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoU0lPRjFfUlhJX0lSUSwgU0lPRjFfSVBSX0FERFIsIFNJT0YxX0lQUl9QT1MsCisJCQlTSU9GMV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKFNJT0YxX0NDSV9JUlEsIFNJT0YxX0lQUl9BRERSLCBTSU9GMV9JUFJfUE9TLAorCQkJU0lPRjFfUFJJT1JJVFkpOworCisJLyogU0xJQyBJUlEncyAqLworCW1ha2VfaXByX2lycShJUlExX0lSUSwgSVJRMV9JUFJfQUREUiwgSVJRMV9JUFJfUE9TLCBJUlExX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoSVJRMl9JUlEsIElSUTJfSVBSX0FERFIsIElSUTJfSVBSX1BPUywgSVJRMl9QUklPUklUWSk7Cit9CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NoNzcxMHZvaXBndyBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiU0g3NzEwIFZvSVAgR2F0ZXdheSIsCisJLm12X25yX2lycXMJCT0gMTA0LAorCS5tdl9pbml0X2lycQkJPSBzaDc3MTB2b2lwZ3dfaW5pdF9pcnEsCit9OworQUxJQVNfTVYoc2g3NzEwdm9pcGd3KQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zeXN0ZW1oL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvaW8uYwppbmRleCBjZjk3OTAxLi5jZGU2ZTVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvaW8uYworKysgYi9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvaW8uYwpAQCAtNSw2NiArNSwyNSBAQAogICogQmFzZWQgbGFyZ2VseSBvbiBpb19zZS5jLgogICoKICAqIEkvTyByb3V0aW5lIGZvciBIaXRhY2hpIDc3NTEgU3lzdGVtaC4KLSAqCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL3N5c3RlbWgvNzc1MXN5c3RlbWguaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtaDc3NTEuaD4KICNpbmNsdWRlIDxhc20vYWRkcnNwYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlICIuLi8uLi9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmgiCi0KLS8qCi0gKiBUaGUgNzc1MSBTeXN0ZW1IIEVuZ2luZSB1c2VzIHRoZSBidWlsdC1pbiBQQ0kgY29udHJvbGxlciAoUENJQykKLSAqIG9mIHRoZSA3NzUxIHByb2Nlc3NvciwgYW5kIGhhcyBhIFN1cGVySU8gYWNjZXNzaWJsZSBvbiBpdHMgbWVtb3J5Ci0gKiBidXMuCi0gKi8KLQotI2RlZmluZSBQQ0lJT0JSCQkodm9sYXRpbGUgbG9uZyAqKVBDSV9SRUcoU0g3NzUxX1BDSUlPQlIpCi0jZGVmaW5lIFBDSU1CUiAgICAgICAgICAodm9sYXRpbGUgbG9uZyAqKVBDSV9SRUcoU0g3NzUxX1BDSU1CUikKLSNkZWZpbmUgUENJX0lPX0FSRUEJU0g3NzUxX1BDSV9JT19CQVNFCi0jZGVmaW5lIFBDSV9NRU1fQVJFQQlTSDc3NTFfUENJX0NPTkZJR19CQVNFCi0KLSNkZWZpbmUgUENJX0lPTUFQKGFkcikJKFBDSV9JT19BUkVBICsgKGFkciAmIH5TSDc3NTFfUENJSU9CUl9NQVNLKSkKICNkZWZpbmUgRVRIRVJfSU9NQVAoYWRyKSAoMHhCMzAwMDAwMCArIChhZHIpKSAvKm1hcCB0byAxNmJpdHMgYWNjZXNzIGFyZWEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHNtYyBsYW4gY2hpcCovCi0KLSNkZWZpbmUgbWF5YmViYWRpbyhuYW1lLHBvcnQpIFwKLSAgcHJpbnRrKCJiYWQgUEMtbGlrZSBpbyAlcyBmb3IgcG9ydCAweCVseCBhdCAweCUwOHhcbiIsIFwKLQkgI25hbWUsIChwb3J0KSwgKF9fdTMyKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQotewotCWN0cmxfaW53KDB4YTAwMDAwMDApOwotfQotCiBzdGF0aWMgaW5saW5lIHZvbGF0aWxlIF9fdTE2ICoKIHBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQogewogCWlmIChwb3J0ID49IDB4MjAwMCkKIAkJcmV0dXJuICh2b2xhdGlsZSBfX3UxNiAqKSAoUEFfTVJTSFBDICsgKHBvcnQgLSAweDIwMDApKTsKLSNpZiAwCi0JZWxzZQotCQlyZXR1cm4gKHZvbGF0aWxlIF9fdTE2ICopIChQQV9TVVBFUklPICsgKHBvcnQgPDwgMSkpOwotI2VuZGlmCi0JbWF5YmViYWRpbyhuYW1lLCh1bnNpZ25lZCBsb25nKXBvcnQpOworCW1heWJlYmFkaW8oKHVuc2lnbmVkIGxvbmcpcG9ydCk7CiAJcmV0dXJuICh2b2xhdGlsZSBfX3UxNiopcG9ydDsKIH0KIAotLyogSW4gY2FzZSBzb21lb25lIGNvbmZpZ3VyZXMgdGhlIGtlcm5lbCB3L28gUENJIHN1cHBvcnQ6IGluIHRoYXQgKi8KLS8qIHNjZW5hcmlvLCBkb24ndCBldmVyIGJvdGhlciB0byBjaGVjayBmb3IgUENJLXdpbmRvdyBhZGRyZXNzZXMgKi8KLQotLyogTk9URTogV0lORE9XIENIRUNLIE1BWSBCRSBBIEJJVCBPRkYsIEhJR0ggUENJQklPU19NSU5fSU8gV1JBUFM/ICovCi0jaWYgZGVmaW5lZChDT05GSUdfUENJKQotI2RlZmluZSBDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgXAotICAoKHBvcnQgPj0gUENJQklPU19NSU5fSU8pICYmIChwb3J0IDwgKFBDSUJJT1NfTUlOX0lPICsgU0g3NzUxX1BDSV9JT19TSVpFKSkpCi0jZWxzZQotI2RlZmluZSBDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkgKDApCi0jZW5kaWYKLQogLyoKICAqIEdlbmVyYWwgb3V0bGluZTogcmVtYXAgcmVhbGx5IGxvdyBzdHVmZiBbZXZlbnR1YWxseV0gdG8gU3VwZXJJTywKICAqIHN0dWZmIGluIFBDSSBJTyBzcGFjZSAoYXQgb3IgYWJvdmUgd2luZG93IGF0IHBjaS5oOlBDSUJJT1NfTUlOX0lPKQpAQCAtNzYsOCArMzUsOCBAQAogewogCWlmIChQWFNFRyhwb3J0KSkKIAkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJX0lPTUFQKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UgaWYgKHBvcnQgPD0gMHgzRjEpCiAJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilFVEhFUl9JT01BUChwb3J0KTsKIAllbHNlCkBAIC05MCwxMyArNDksMTMgQEAKIAogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCiAgICAgICAgICAgICAgICAgdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotICAgICAgICAgICAgICAgIHYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICB2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcGNpX2lvYWRkcihwb3J0KTsKIAllbHNlIGlmIChwb3J0IDw9IDB4M0YxKQogCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopRVRIRVJfSU9NQVAocG9ydCk7CiAJZWxzZQogCQl2ID0gKCpwb3J0MmFkcihwb3J0KSkmMHhmZjsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIAlyZXR1cm4gdjsKIH0KIApAQCAtMTA0LDE0ICs2MywxNCBAQAogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcGNpX2lvYWRkcihwb3J0KTsKIAllbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKIAkJcmV0dXJuICpwb3J0MmFkcihwb3J0KTsKIAllbHNlIGlmIChwb3J0IDw9IDB4M0YxKQogCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilFVEhFUl9JT01BUChwb3J0KTsKIAllbHNlCi0JCW1heWJlYmFkaW8oaW53LCBwb3J0KTsKKwkJbWF5YmViYWRpbyhwb3J0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTE5LDE0ICs3OCwxNCBAQAogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCiAJCXJldHVybiAqcG9ydDJhZHIocG9ydCk7CiAJZWxzZSBpZiAocG9ydCA8PSAweDNGMSkKIAkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopRVRIRVJfSU9NQVAocG9ydCk7CiAJZWxzZQotCQltYXliZWJhZGlvKGlubCwgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNSw4ICs5NCw4IEBACiAKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQogICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQgPSB2YWx1ZTsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0gICAgICAgIAkqKCh1bnNpZ25lZCBjaGFyKilQQ0lfSU9NQVAocG9ydCkpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJKigodW5zaWduZWQgY2hhciopcGNpX2lvYWRkcihwb3J0KSkgPSB2YWx1ZTsKIAllbHNlIGlmIChwb3J0IDw9IDB4M0YxKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilFVEhFUl9JT01BUChwb3J0KSA9IHZhbHVlOwogCWVsc2UKQEAgLTE0NywzNyArMTA2LDM3IEBACiB7CiAgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotICAgICAgICAJKigodW5zaWduZWQgY2hhciopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIGNoYXIqKXBjaV9pb2FkZHIocG9ydCkpID0gdmFsdWU7CiAJZWxzZSBpZiAocG9ydCA8PSAweDNGMSkKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopRVRIRVJfSU9NQVAocG9ydCkgPSB2YWx1ZTsKIAllbHNlCiAJCSoocG9ydDJhZHIocG9ydCkpID0gdmFsdWU7Ci0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiB9CiAKIHZvaWQgc2g3NzUxc3lzdGVtaF9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgCSooKHVuc2lnbmVkIHNob3J0ICopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIHNob3J0ICopcGNpX2lvYWRkcihwb3J0KSkgPSB2YWx1ZTsKIAllbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKIAkJKnBvcnQyYWRyKHBvcnQpID0gdmFsdWU7CiAJZWxzZSBpZiAocG9ydCA8PSAweDNGMSkKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKUVUSEVSX0lPTUFQKHBvcnQpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dHcsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQogICAgICAgICAgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXBvcnQgPSB2YWx1ZTsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0gICAgICAgIAkqKCh1bnNpZ25lZCBsb25nKilQQ0lfSU9NQVAocG9ydCkpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJKigodW5zaWduZWQgbG9uZyopcGNpX2lvYWRkcihwb3J0KSkgPSB2YWx1ZTsKIAllbHNlCi0JCW1heWJlYmFkaW8ob3V0bCwgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiB9CiAKIHZvaWQgc2g3NzUxc3lzdGVtaF9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKQEAgLTE5NCw3ICsxNTMsNyBAQAogCiB2b2lkIHNoNzc1MXN5c3RlbWhfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JbWF5YmViYWRpbyhpbnNsLCBwb3J0KTsKKwltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQpAQCAtMjExLDczICsxNzAsNSBAQAogCiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCW1heWJlYmFkaW8ob3V0c3csIHBvcnQpOwotfQotCi0vKiBGb3IgcmVhZC93cml0ZSBjYWxscywganVzdCBjb3B5IGdlbmVyaWMgKHBhc3MtdGhydSk7IFBDSU1CUiBpcyAgKi8KLS8qIGFscmVhZHkgc2V0IHVwLiAgRm9yIGEgbGFyZ2VyIG1lbW9yeSBzcGFjZSwgdGhlc2Ugd291bGQgbmVlZCB0byAqLwotLyogcmVzZXQgUENJTUJSIGFzIG5lZWRlZCBvbiBhIHBlci1jYWxsIGJhc2lzLi4uICAgICAgICAgICAgICAgICAgICovCi0KLXVuc2lnbmVkIGNoYXIgc2g3NzUxc3lzdGVtaF9yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkcjsKLX0KLQotdW5zaWduZWQgc2hvcnQgc2g3NzUxc3lzdGVtaF9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0JcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHI7Ci19Ci0KLXVuc2lnbmVkIGludCBzaDc3NTFzeXN0ZW1oX3JlYWRsKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nKilhZGRyOwotfQotCi12b2lkIHNoNzc1MXN5c3RlbWhfd3JpdGViKHVuc2lnbmVkIGNoYXIgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciopYWRkciA9IGI7Ci19Ci0KLXZvaWQgc2g3NzUxc3lzdGVtaF93cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKWFkZHIgPSBiOwotfQotCi12b2lkIHNoNzc1MXN5c3RlbWhfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0gICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7Ci19Ci0KLQwKLQotLyogTWFwIElTQSBidXMgYWRkcmVzcyB0byB0aGUgcmVhbCBhZGRyZXNzLiBPbmx5IGZvciBQQ01DSUEuICAqLwotCi0vKiBJU0EgcGFnZSBkZXNjcmlwdG9yLiAgKi8KLXN0YXRpYyBfX3UzMiBzaF9pc2FfbWVtbWFwWzI1Nl07Ci0KLSNpZiAwCi1zdGF0aWMgaW50Ci1zaF9pc2FfbW1hcChfX3UzMiBzdGFydCwgX191MzIgbGVuZ3RoLCBfX3UzMiBvZmZzZXQpCi17Ci0JaW50IGlkeDsKLQotCWlmIChzdGFydCA+PSAweDEwMDAwMCB8fCAoc3RhcnQgJiAweGZmZikgfHwgKGxlbmd0aCAhPSAweDEwMDApKQotCQlyZXR1cm4gLTE7Ci0KLQlpZHggPSBzdGFydCA+PiAxMjsKLQlzaF9pc2FfbWVtbWFwW2lkeF0gPSAweGI4MDAwMDAwICsgKG9mZnNldCAmfiAweGZmZik7Ci0JcHJpbnRrKCJzaF9pc2FfbW1hcDogc3RhcnQgJXggbGVuICV4IG9mZnNldCAleCAoaWR4ICV4IHBhZGRyICV4KVxuIiwKLQkgICAgICAgc3RhcnQsIGxlbmd0aCwgb2Zmc2V0LCBpZHgsIHNoX2lzYV9tZW1tYXBbaWR4XSk7Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQotdW5zaWduZWQgbG9uZwotc2g3NzUxc3lzdGVtaF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCWludCBpZHg7Ci0KLQlpZHggPSAob2Zmc2V0ID4+IDEyKSAmIDB4ZmY7Ci0Jb2Zmc2V0ICY9IDB4ZmZmOwotCXJldHVybiBzaF9pc2FfbWVtbWFwW2lkeF0gKyBvZmZzZXQ7CisJbWF5YmViYWRpbyhwb3J0KTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9pcnEuYwppbmRleCA4MzcyZDk2Li44ZDAxNmRhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvaXJxLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvcmVuZXNhcy9zeXN0ZW1oL2lycS5jCkBAIC0xNSw3ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbWFjaC83NzUxc3lzdGVtaC5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW1oNzc1MS5oPgogI2luY2x1ZGUgPGFzbS9zbWMzN2M5M3guaD4KIAogLyogYWRkcmVzcyBvZiBleHRlcm5hbCBpbnRlcnJ1cHQgbWFzayByZWdpc3RlcgpAQCAtNTcsMTIgKzU3LDkgQEAKIHN0YXRpYyB2b2lkIGRpc2FibGVfc3lzdGVtaF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpZiAoc3lzdGVtaF9pcnFfbWFza19yZWdpc3RlcikgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBDbGVhciB0aGUgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgYW5kIHNldCBpdCBpbiB0aGUgcmVxdWVzdCAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0KIAkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CiAJCXZhbCAmPSB+bWFzazsKIAkJY3RybF9vdXRsKHZhbCwgKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfbWFza19yZWdpc3Rlcik7CkBAIC03MCwyMyArNjcsMTggQEAKIAkJdmFsID0gY3RybF9pbmwoKHVuc2lnbmVkIGxvbmcpc3lzdGVtaF9pcnFfcmVxdWVzdF9yZWdpc3Rlcik7CiAJCXZhbCB8PSBtYXNrOwogCQljdHJsX291dGwodmFsLCAodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9yZXF1ZXN0X3JlZ2lzdGVyKTsKLQotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCiBzdGF0aWMgdm9pZCBlbmFibGVfc3lzdGVtaF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpZiAoc3lzdGVtaF9pcnFfbWFza19yZWdpc3RlcikgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBsb25nIHZhbCwgbWFzayA9IDB4MDEgPDwgMTsKIAogCQkvKiBTZXQgImlycSJ0aCBiaXQgaW4gdGhlIG1hc2sgcmVnaXN0ZXIgKi8KLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQl2YWwgPSBjdHJsX2lubCgodW5zaWduZWQgbG9uZylzeXN0ZW1oX2lycV9tYXNrX3JlZ2lzdGVyKTsKIAkJdmFsIHw9IG1hc2s7CiAJCWN0cmxfb3V0bCh2YWwsICh1bnNpZ25lZCBsb25nKXN5c3RlbWhfaXJxX21hc2tfcmVnaXN0ZXIpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9yZW5lc2FzL3N5c3RlbWgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9zZXR1cC5jCmluZGV4IDgyNmZhM2QuLmE4NDY3YmYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3JlbmVzYXMvc3lzdGVtaC9zZXR1cC5jCkBAIC0xNSwyOCArMTUsMjEgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvNzc1MXN5c3RlbWguaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pby5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbWg3NzUxLmg+CiAKIGV4dGVybiB2b2lkIG1ha2Vfc3lzdGVtaF9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiNzc1MSBTeXN0ZW1IIjsKLX0KLQogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKICAqLwotdm9pZCBfX2luaXQgaW5pdF83NzUxc3lzdGVtaF9JUlEodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBzaDc3NTFzeXN0ZW1oX2luaXRfaXJxKHZvaWQpCiB7Ci0vKiAgCW1ha2VfaXByX2lycSgxMCwgQkNSX0lMQ1JELCAxLCAweDBmLTEwKTsgTEFOICovCi0vKiAgCW1ha2VfaXByX2lycSgxNCwgQkNSX0lMQ1JBLCAyLCAweDBmLTQpOyAqLwogCW1ha2Vfc3lzdGVtaF9pcnEoMHhiKTsJLyogRXRoZXJuZXQgaW50ZXJydXB0ICovCiB9CiAKIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl83NzUxc3lzdGVtaCBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiNzc1MSBTeXN0ZW1IIiwKIAkubXZfbnJfaXJxcwkJPSA3MiwKIAogCS5tdl9pbmIJCQk9IHNoNzc1MXN5c3RlbWhfaW5iLApAQCAtNjAsMjEgKzUzLDYgQEAKIAkubXZfb3V0c3cJCT0gc2g3NzUxc3lzdGVtaF9vdXRzdywKIAkubXZfb3V0c2wJCT0gc2g3NzUxc3lzdGVtaF9vdXRzbCwKIAotCS5tdl9yZWFkYgkJPSBzaDc3NTFzeXN0ZW1oX3JlYWRiLAotCS5tdl9yZWFkdwkJPSBzaDc3NTFzeXN0ZW1oX3JlYWR3LAotCS5tdl9yZWFkbAkJPSBzaDc3NTFzeXN0ZW1oX3JlYWRsLAotCS5tdl93cml0ZWIJCT0gc2g3NzUxc3lzdGVtaF93cml0ZWIsCi0JLm12X3dyaXRldwkJPSBzaDc3NTFzeXN0ZW1oX3dyaXRldywKLQkubXZfd3JpdGVsCQk9IHNoNzc1MXN5c3RlbWhfd3JpdGVsLAotCi0JLm12X2lzYV9wb3J0MmFkZHIJPSBzaDc3NTFzeXN0ZW1oX2lzYV9wb3J0MmFkZHIsCi0KLQkubXZfaW5pdF9pcnEJCT0gaW5pdF83NzUxc3lzdGVtaF9JUlEsCisJLm12X2luaXRfaXJxCQk9IHNoNzc1MXN5c3RlbV9pbml0X2lycSwKIH07CiBBTElBU19NVig3NzUxc3lzdGVtaCkKLQotaW50IF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQotewotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zYXR1cm4vc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NhdHVybi9zZXR1cC5jCmluZGV4IGJlYTZjNTcyLi5hM2EzN2M5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zYXR1cm4vc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zYXR1cm4vc2V0dXAuYwpAQCAtOSwyMiArOSwxNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpbmNsdWRlIDxhc20vbWFjaC9pby5oPgogCiBleHRlcm4gaW50IHNhdHVybl9pcnFfZGVtdXgoaW50IGlycV9ucik7CiAKLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiU2VnYSBTYXR1cm4iOwotfQotCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9zYXR1cm4gX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIlNlZ2EgU2F0dXJuIiwKIAkubXZfbnJfaXJxcwkJPSA4MCwJLyogRml4IHRoaXMgbGF0ZXIgKi8KIAogCS5tdl9pc2FfcG9ydDJhZGRyCT0gc2F0dXJuX2lzYV9wb3J0MmFkZHIsCkBAIC0zMywxMSArMjgsNCBAQAogCS5tdl9pb3JlbWFwCQk9IHNhdHVybl9pb3JlbWFwLAogCS5tdl9pb3VubWFwCQk9IHNhdHVybl9pb3VubWFwLAogfTsKLQogQUxJQVNfTVYoc2F0dXJuKQotCi1pbnQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaW8uYwppbmRleCBmNDQ5YTk0Li44YTAzZDdhIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9pby5jCkBAIC05LDggKzksOCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9zZTczMDAuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vc2U3MzAwLmg+CiAKICNkZWZpbmUgYmFkaW8oZm4sIGEpIHBhbmljKCJiYWQgaS9vIG9wZXJhdGlvbiAlcyBmb3IgJTA4bHguIiwgI2ZuLCBhKQogCkBAIC05OSw2ICs5OSw3IEBACiAJYmFkaW8oaW53LCBwb3J0KTsKIH0KIAorI2lmZGVmIENPTkZJR19TTUM5MVgKIC8qIE1TVExBTkVYMDEgTEFOIGF0IDB4YjQwMDowMDAwICovCiBzdGF0aWMgc3RydWN0IGlvcCBsYW5pb3AgPSB7CiAJLnN0YXJ0ID0gMHgzMDAsCkBAIC0xMTAsNiArMTExLDcgQEAKIAkub3V0YiA9IHNpbXBsZV9vdXRiLAogCS5vdXR3ID0gc2ltcGxlX291dHcsCiB9OworI2VuZGlmCiAKIC8qIE5FMjAwMCBwYyBjYXJkIE5JQyAqLwogc3RhdGljIHN0cnVjdCBpb3AgbmVpb3AgPSB7CkBAIC0xMjMsNiArMTI1LDcgQEAKIAkub3V0dyA9IHNpbXBsZV9vdXR3LAogfTsKIAorI2lmZGVmIENPTkZJR19JREUKIC8qIENGIGluIENGIHNsb3QgKi8KIHN0YXRpYyBzdHJ1Y3QgaW9wIGNmaW9wID0gewogCS5iYXNlID0gMHhiMDYwMDAwMCwKQEAgLTEzMiwxMiArMTM1LDEzIEBACiAJLm91dGIgPSBwY2Nfb3V0YiwKIAkub3V0dyA9IHNpbXBsZV9vdXR3LAogfTsKKyNlbmRpZgogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaW9wICoKIHBvcnQyaW9wKHVuc2lnbmVkIGxvbmcgcG9ydCkKIHsKIAlpZiAoMCkgOwotI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxMTExKQorI2lmIGRlZmluZWQoQ09ORklHX1NNQzkxWCkKIAllbHNlIGlmIChsYW5pb3AuY2hlY2soJmxhbmlvcCwgcG9ydCkpCiAJCXJldHVybiAmbGFuaW9wOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9pcnEuYwppbmRleCAyMTZhNzhkLi5hZDEwMzRmIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvaXJxLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvc2U3MzAwLmg+CisjaW5jbHVkZSA8YXNtL3NlNzMwMC5oPgogCiAvKgogICogSW5pdGlhbGl6ZSBJUlEgc2V0dGluZwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvbGVkLmMKaW5kZXggYWQ1MWYwYS4uNGQwM2JiNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzAwL2xlZC5jCkBAIC0xMiwyNCArMTIsMTAgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9zZTczMDAuaD4KLQotc3RhdGljIHZvaWQKLW1hY2hfbGVkKGludCBwb3NpdGlvbiwgaW50IHZhbHVlKQotewotCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFBBX0xFRDsKLQotCWlmICh2YWx1ZSkgewotCQkqcCB8PSAoMSA8PCA4KTsKLQl9IGVsc2UgewotCQkqcCAmPSB+KDEgPDwgOCk7Ci0JfQotfQotCisjaW5jbHVkZSA8YXNtL3NlNzMwMC5oPgogCiAvKiBDeWNsZSB0aGUgTEVEJ3MgaW4gdGhlIGNsYXNpYyBLbmlnaHRyaWRlci9TdW4gcGF0dGVybiAqLwotdm9pZAotaGVhcnRiZWF0XzczMDBzZSh2b2lkKQordm9pZCBoZWFydGJlYXRfNzMwMHNlKHZvaWQpCiB7CiAJc3RhdGljIHVuc2lnbmVkIGludCBjbnQgPSAwLCBwZXJpb2QgPSAwOwogCXZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICpwID0gKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopIFBBX0xFRDsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvc2V0dXAuYwppbmRleCBlYmNkOThkLi42ZjA4MmE3MiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMwMC9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMDAvc2V0dXAuYwpAQCAtOSwyMyArOSwxNiBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL3NlNzMwMC5oPgogCiB2b2lkIGhlYXJ0YmVhdF83MzAwc2Uodm9pZCk7CiB2b2lkIGluaXRfNzMwMHNlX0lSUSh2b2lkKTsKIAotY29uc3QgY2hhciAqCi1nZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIlNvbHV0aW9uRW5naW5lIDczMDAiOwotfQotCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KLQogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12XzczMDBzZSBfX2luaXRtdiA9IHsKKwkubXZfbmFtZSA9ICJTb2x1dGlvbkVuZ2luZSA3MzAwIiwKIAkubXZfbnJfaXJxcyA9IDEwOSwKIAkubXZfaW5iID0gc2g3MzAwc2VfaW5iLAogCS5tdl9pbncgPSBzaDczMDBzZV9pbncsCkBAIC01MywxMyArNDYsNCBAQAogCS5tdl9oZWFydGJlYXQgPSBoZWFydGJlYXRfNzMwMHNlLAogI2VuZGlmCiB9OwotCiBBTElBU19NVig3MzAwc2UpCi0vKgotICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKLSAqLwotdm9pZCBfX2luaXQKLXBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0KLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pby5jCmluZGV4IDc1NWRmNWEuLjcyNzE1NTcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaW8uYwpAQCAtOTksNiArOTksNyBAQAogCWJhZGlvKGludywgcG9ydCk7CiB9CiAKKyNpZmRlZiBDT05GSUdfU01DOTFYCiAvKiBNU1RMQU5FWDAxIExBTiBhdCAweGI0MDA6MDAwMCAqLwogc3RhdGljIHN0cnVjdCBpb3AgbGFuaW9wID0gewogCS5zdGFydCA9IDB4MzAwLApAQCAtMTEwLDYgKzExMSw3IEBACiAJLm91dGIgPSBzaW1wbGVfb3V0YiwKIAkub3V0dyA9IHNpbXBsZV9vdXR3LAogfTsKKyNlbmRpZgogCiAvKiBORTIwMDAgcGMgY2FyZCBOSUMgKi8KIHN0YXRpYyBzdHJ1Y3QgaW9wIG5laW9wID0gewpAQCAtMTIzLDYgKzEyNSw3IEBACiAJLm91dHcgPSBzaW1wbGVfb3V0dywKIH07CiAKKyNpZmRlZiBDT05GSUdfSURFCiAvKiBDRiBpbiBDRiBzbG90ICovCiBzdGF0aWMgc3RydWN0IGlvcCBjZmlvcCA9IHsKIAkuYmFzZSA9IDB4YjA2MDAwMDAsCkBAIC0xMzIsMTIgKzEzNSwxMyBAQAogCS5vdXRiID0gcGNjX291dGIsCiAJLm91dHcgPSBzaW1wbGVfb3V0dywKIH07CisjZW5kaWYKIAogc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlvcCAqCiBwb3J0MmlvcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKDApIDsKLSNpZiBkZWZpbmVkKENPTkZJR19TTUM5MTExMSkKKyNpZiBkZWZpbmVkKENPTkZJR19TTUM5MVgpCiAJZWxzZSBpZiAobGFuaW9wLmNoZWNrKCZsYW5pb3AsIHBvcnQpKQogCQlyZXR1cm4gJmxhbmlvcDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYwppbmRleCA0MzQ0ZDBlLi4yYzYyYjhlIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9pcnEuYwpAQCAtNyw3ICs3LDYgQEAKICAqIE1vZGlmaWVkIGZvciBTSC1Nb2JpbGUgU29sdXRpb25FbmdpbmUgNzMxODAgU3VwcG9ydAogICogICAgICAgICAgICAgIGJ5IFlPU0hJSSBUYWthc2hpIDx5b3NoaWktdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgogICoKLSAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTE3LDE0ICsxNiw2IEBACiAjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzE4MC5oPgogCiBzdGF0aWMgaW50Ci1pbnRyZXEyaXJxKGludCBpKQotewotCWlmIChpID09IDUpCi0JCXJldHVybiAxMDsKLQlyZXR1cm4gMzIgKyA3IC0gaTsKLX0KLQotc3RhdGljIGludAogaXJxMmludHJlcShpbnQgaXJxKQogewogCWlmIChpcnEgPT0gMTApCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2xlZC5jCmluZGV4IDYxMDQzOWYuLjRiNzJlOWEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2xlZC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL2xlZC5jCkBAIC0xNCwyMSArMTQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzE4MC5oPgogCi1zdGF0aWMgdm9pZAotbWFjaF9sZWQoaW50IHBvc2l0aW9uLCBpbnQgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgUEFfTEVEOwotCi0JaWYgKHZhbHVlKSB7Ci0JCSpwIHw9ICgxIDw8IExFRF9TSElGVCk7Ci0JfSBlbHNlIHsKLQkJKnAgJj0gfigxIDw8IExFRF9TSElGVCk7Ci0JfQotfQotCiAvKiBDeWNsZSB0aGUgTEVEJ3MgaW4gdGhlIGNsYXNpYyBLbmlnaHRyaWRlci9TdW4gcGF0dGVybiAqLwotdm9pZAotaGVhcnRiZWF0XzczMTgwc2Uodm9pZCkKK3ZvaWQgaGVhcnRiZWF0XzczMTgwc2Uodm9pZCkKIHsKIAlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7CiAJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgUEFfTEVEOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczMTgwL3NldHVwLmMKaW5kZXggY2RiN2I1Zi4uYjM4ZWY1MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzMxODAvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzE4MC9zZXR1cC5jCkBAIC0xMSwyMyArMTEsMTcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9zZTczMTgwLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgogCiB2b2lkIGhlYXJ0YmVhdF83MzE4MHNlKHZvaWQpOwogdm9pZCBpbml0XzczMTgwc2VfSVJRKHZvaWQpOwogCi1jb25zdCBjaGFyICoKLWdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiU29sdXRpb25FbmdpbmUgNzMxODAiOwotfQotCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KLQogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12XzczMTgwc2UgX19pbml0bXYgPSB7CisJLm12X25hbWUgPSAiU29sdXRpb25FbmdpbmUgNzMxODAiLAogCS5tdl9ucl9pcnFzID0gMTA4LAogCS5tdl9pbmIgPSBzaDczMTgwc2VfaW5iLAogCS5tdl9pbncgPSBzaDczMTgwc2VfaW53LApAQCAtNTEsMTcgKzQ1LDkgQEAKIAkubXZfb3V0c2wgPSBzaDczMTgwc2Vfb3V0c2wsCiAKIAkubXZfaW5pdF9pcnEgPSBpbml0XzczMTgwc2VfSVJRLAorCS5tdl9pcnFfZGVtdXggPSBzaG1zZV9pcnFfZGVtdXgsCiAjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAogCS5tdl9oZWFydGJlYXQgPSBoZWFydGJlYXRfNzMxODBzZSwKICNlbmRpZgogfTsKLQogQUxJQVNfTVYoNzMxODBzZSkKLS8qCi0gKiBJbml0aWFsaXplIHRoZSBib2FyZAotICovCi12b2lkIF9faW5pdAotcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5MTA2OQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvTWFrZWZpbGUKQEAgLTAsMCArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgNzM0MyBTb2x1dGlvbkVuZ2luZSBzcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsCisjCisKK29iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KKworb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDY2NjFhCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pby5jCkBAIC0wLDAgKzEsMjc1IEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pby5jCisgKgorICogSS9PIHJvdXRpbmUgZm9yIFNILU1vYmlsZTNBUyA3MzQzIFNvbHV0aW9uRW5naW5lLgorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzQzLmg+CisKKyNkZWZpbmUgYmFkaW8oZm4sIGEpIHBhbmljKCJiYWQgaS9vIG9wZXJhdGlvbiAlcyBmb3IgJTA4bHguIiwgI2ZuLCBhKQorCitzdHJ1Y3QgaW9wIHsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0LCBlbmQ7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXN0cnVjdCBpb3AgKigqY2hlY2spIChzdHJ1Y3QgaW9wICogcCwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl1bnNpZ25lZCBjaGFyICgqaW5iKSAoc3RydWN0IGlvcCAqIHAsIHVuc2lnbmVkIGxvbmcgcG9ydCk7CisJdW5zaWduZWQgc2hvcnQgKCppbncpIChzdHJ1Y3QgaW9wICogcCwgdW5zaWduZWQgbG9uZyBwb3J0KTsKKwl2b2lkICgqb3V0YikgKHN0cnVjdCBpb3AgKiBwLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworCXZvaWQgKCpvdXR3KSAoc3RydWN0IGlvcCAqIHAsIHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOworfTsKKworc3RydWN0IGlvcCAqCitzaW1wbGVfY2hlY2soc3RydWN0IGlvcCAqcCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXN0YXRpYyBpbnQgY291bnQ7CisKKwlpZiAoY291bnQgPCAxMDApCisJCWNvdW50Kys7CisKKwlwb3J0ICY9IDB4RkZGRjsKKworCWlmICgocC0+c3RhcnQgPD0gcG9ydCkgJiYgKHBvcnQgPD0gcC0+ZW5kKSkKKwkJcmV0dXJuIHA7CisJZWxzZQorCQliYWRpbyhjaGVjaywgcG9ydCk7Cit9CisKK3N0cnVjdCBpb3AgKgoraWRlX2NoZWNrKHN0cnVjdCBpb3AgKnAsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlpZiAoKCgweDFmMCA8PSBwb3J0KSAmJiAocG9ydCA8PSAweDFmNykpIHx8IChwb3J0ID09IDB4M2Y3KSkKKwkJcmV0dXJuIHA7CisJcmV0dXJuIE5VTEw7Cit9CisKK3Vuc2lnbmVkIGNoYXIKK3NpbXBsZV9pbmIoc3RydWN0IGlvcCAqcCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAqKHVuc2lnbmVkIGNoYXIgKikgKHAtPmJhc2UgKyBwb3J0KTsKK30KKwordW5zaWduZWQgc2hvcnQKK3NpbXBsZV9pbncoc3RydWN0IGlvcCAqcCwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXJldHVybiAqKHVuc2lnbmVkIHNob3J0ICopIChwLT5iYXNlICsgcG9ydCk7Cit9CisKK3ZvaWQKK3NpbXBsZV9vdXRiKHN0cnVjdCBpb3AgKnAsIHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwkqKHVuc2lnbmVkIGNoYXIgKikgKHAtPmJhc2UgKyBwb3J0KSA9IHZhbHVlOworfQorCit2b2lkCitzaW1wbGVfb3V0dyhzdHJ1Y3QgaW9wICpwLCB1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCSoodW5zaWduZWQgc2hvcnQgKikgKHAtPmJhc2UgKyBwb3J0KSA9IHZhbHVlOworfQorCit1bnNpZ25lZCBjaGFyCitwY2NfaW5iKHN0cnVjdCBpb3AgKnAsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSBwLT5iYXNlICsgcG9ydCArIDB4NDAwMDA7CisJdW5zaWduZWQgbG9uZyB2OworCisJaWYgKHBvcnQgJiAxKQorCQlhZGRyICs9IDB4MDA0MDAwMDA7CisJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSBhZGRyOworCXJldHVybiB2OworfQorCit2b2lkCitwY2Nfb3V0YihzdHJ1Y3QgaW9wICpwLCB1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gcC0+YmFzZSArIHBvcnQgKyAweDQwMDAwOworCisJaWYgKHBvcnQgJiAxKQorCQlhZGRyICs9IDB4MDA0MDAwMDA7CisJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopIGFkZHIgPSB2YWx1ZTsKK30KKwordW5zaWduZWQgY2hhcgorYmFkX2luYihzdHJ1Y3QgaW9wICpwLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJYmFkaW8oaW5iLCBwb3J0KTsKK30KKwordm9pZAorYmFkX291dGIoc3RydWN0IGlvcCAqcCwgdW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCWJhZGlvKGludywgcG9ydCk7Cit9CisKKyNpZmRlZiBDT05GSUdfU01DOTFYCisvKiBNU1RMQU5FWDAxIExBTiBhdCAweGI0MDA6MDAwMCAqLworc3RhdGljIHN0cnVjdCBpb3AgbGFuaW9wID0geworCS5zdGFydCA9IDB4MDAsCisJLmVuZCA9IDB4MEYsCisJLmJhc2UgPSAweDA0MDAwMDAwLAorCS5jaGVjayA9IHNpbXBsZV9jaGVjaywKKwkuaW5iID0gc2ltcGxlX2luYiwKKwkuaW53ID0gc2ltcGxlX2ludywKKwkub3V0YiA9IHNpbXBsZV9vdXRiLAorCS5vdXR3ID0gc2ltcGxlX291dHcsCit9OworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfTkUyMDAwCisvKiBORTIwMDAgcGMgY2FyZCBOSUMgKi8KK3N0YXRpYyBzdHJ1Y3QgaW9wIG5laW9wID0geworCS5zdGFydCA9IDB4MjgwLAorCS5lbmQgPSAweDI5ZiwKKwkuYmFzZSA9IDB4YjA2MDAwMDAgKyAweDgwLAkvKiBzb2Z0IDB4MjgwIC0+IGhhcmQgMHgzMDAgKi8KKwkuY2hlY2sgPSBzaW1wbGVfY2hlY2ssCisJLmluYiA9IHBjY19pbmIsCisJLmludyA9IHNpbXBsZV9pbncsCisJLm91dGIgPSBwY2Nfb3V0YiwKKwkub3V0dyA9IHNpbXBsZV9vdXR3LAorfTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX0lERQorLyogQ0YgaW4gQ0Ygc2xvdCAqLworc3RhdGljIHN0cnVjdCBpb3AgY2Zpb3AgPSB7CisJLmJhc2UgPSAweGIwNjAwMDAwLAorCS5jaGVjayA9IGlkZV9jaGVjaywKKwkuaW5iID0gcGNjX2luYiwKKwkuaW53ID0gc2ltcGxlX2ludywKKwkub3V0YiA9IHBjY19vdXRiLAorCS5vdXR3ID0gc2ltcGxlX291dHcsCit9OworI2VuZGlmCisKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBpb3AgKgorcG9ydDJpb3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworCWlmICgwKSA7CisjaWYgZGVmaW5lZChDT05GSUdfU01DOTFYKQorCWVsc2UgaWYgKGxhbmlvcC5jaGVjaygmbGFuaW9wLCBwb3J0KSkKKwkJcmV0dXJuICZsYW5pb3A7CisjZW5kaWYKKyNpZiBkZWZpbmVkKENPTkZJR19ORTIwMDApCisJZWxzZSBpZiAobmVpb3AuY2hlY2soJm5laW9wLCBwb3J0KSkKKwkJcmV0dXJuICZuZWlvcDsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0lERSkKKwllbHNlIGlmIChjZmlvcC5jaGVjaygmY2Zpb3AsIHBvcnQpKQorCQlyZXR1cm4gJmNmaW9wOworI2VuZGlmCisJZWxzZQorCQlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitkZWxheSh2b2lkKQoreworCWN0cmxfaW53KDB4YWMwMDAwMDApOworCWN0cmxfaW53KDB4YWMwMDAwMDApOworfQorCit1bnNpZ25lZCBjaGFyCitzaDczNDNzZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXN0cnVjdCBpb3AgKnAgPSBwb3J0MmlvcChwb3J0KTsKKwlyZXR1cm4gKHAtPmluYikgKHAsIHBvcnQpOworfQorCit1bnNpZ25lZCBjaGFyCitzaDczNDNzZV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJdW5zaWduZWQgY2hhciB2ID0gc2g3MzQzc2VfaW5iKHBvcnQpOworCWRlbGF5KCk7CisJcmV0dXJuIHY7Cit9CisKK3Vuc2lnbmVkIHNob3J0CitzaDczNDNzZV9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworCXN0cnVjdCBpb3AgKnAgPSBwb3J0MmlvcChwb3J0KTsKKwlyZXR1cm4gKHAtPmludykgKHAsIHBvcnQpOworfQorCit1bnNpZ25lZCBpbnQKK3NoNzM0M3NlX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJYmFkaW8oaW5sLCBwb3J0KTsKK30KKwordm9pZAorc2g3MzQzc2Vfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJc3RydWN0IGlvcCAqcCA9IHBvcnQyaW9wKHBvcnQpOworCShwLT5vdXRiKSAocCwgdmFsdWUsIHBvcnQpOworfQorCit2b2lkCitzaDczNDNzZV9vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQoreworCXNoNzM0M3NlX291dGIodmFsdWUsIHBvcnQpOworCWRlbGF5KCk7Cit9CisKK3ZvaWQKK3NoNzM0M3NlX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKwlzdHJ1Y3QgaW9wICpwID0gcG9ydDJpb3AocG9ydCk7CisJKHAtPm91dHcpIChwLCB2YWx1ZSwgcG9ydCk7Cit9CisKK3ZvaWQKK3NoNzM0M3NlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisJYmFkaW8ob3V0bCwgcG9ydCk7Cit9CisKK3ZvaWQKK3NoNzM0M3NlX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCXVuc2lnbmVkIGNoYXIgKmEgPSBhZGRyOworCXN0cnVjdCBpb3AgKnAgPSBwb3J0MmlvcChwb3J0KTsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmErKyA9IChwLT5pbmIpIChwLCBwb3J0KTsKK30KKwordm9pZAorc2g3MzQzc2VfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJdW5zaWduZWQgc2hvcnQgKmEgPSBhZGRyOworCXN0cnVjdCBpb3AgKnAgPSBwb3J0MmlvcChwb3J0KTsKKwl3aGlsZSAoY291bnQtLSkKKwkJKmErKyA9IChwLT5pbncpIChwLCBwb3J0KTsKK30KKwordm9pZAorc2g3MzQzc2VfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisJYmFkaW8oaW5zbCwgcG9ydCk7Cit9CisKK3ZvaWQKK3NoNzM0M3NlX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl1bnNpZ25lZCBjaGFyICphID0gKHVuc2lnbmVkIGNoYXIgKikgYWRkcjsKKwlzdHJ1Y3QgaW9wICpwID0gcG9ydDJpb3AocG9ydCk7CisJd2hpbGUgKGNvdW50LS0pCisJCShwLT5vdXRiKSAocCwgKmErKywgcG9ydCk7Cit9CisKK3ZvaWQKK3NoNzM0M3NlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKK3sKKwl1bnNpZ25lZCBzaG9ydCAqYSA9ICh1bnNpZ25lZCBzaG9ydCAqKSBhZGRyOworCXN0cnVjdCBpb3AgKnAgPSBwb3J0MmlvcChwb3J0KTsKKwl3aGlsZSAoY291bnQtLSkKKwkJKHAtPm91dHcpIChwLCAqYSsrLCBwb3J0KTsKK30KKwordm9pZAorc2g3MzQzc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQoreworCWJhZGlvKG91dHN3LCBwb3J0KTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL2lycS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MWUzZDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL2lycS5jCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9pcnEuYworICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC9zZTczNDMuaD4KKworc3RhdGljIHZvaWQKK2Rpc2FibGVfaW50cmVxX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWludCBiaXQgPSBpcnEgLSBPRkZDSElQX0lSUV9CQVNFOworCXUxNiB2YWw7CisKKwl2YWwgPSBjdHJsX2ludyhQQV9DUExEX0lNU0spOworCXZhbCB8PSAxIDw8IGJpdDsKKwljdHJsX291dHcodmFsLCBQQV9DUExEX0lNU0spOworfQorCitzdGF0aWMgdm9pZAorZW5hYmxlX2ludHJlcV9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwlpbnQgYml0ID0gaXJxIC0gT0ZGQ0hJUF9JUlFfQkFTRTsKKwl1MTYgdmFsOworCisJdmFsID0gY3RybF9pbncoUEFfQ1BMRF9JTVNLKTsKKwl2YWwgJj0gfigxIDw8IGJpdCk7CisJY3RybF9vdXR3KHZhbCwgUEFfQ1BMRF9JTVNLKTsKK30KKworc3RhdGljIHZvaWQKK21hc2tfYW5kX2Fja19pbnRyZXFfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9pbnRyZXFfaXJxKGlycSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK3N0YXJ0dXBfaW50cmVxX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWVuYWJsZV9pbnRyZXFfaXJxKGlycSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCitzaHV0ZG93bl9pbnRyZXFfaXJxKHVuc2lnbmVkIGludCBpcnEpCit7CisJZGlzYWJsZV9pbnRyZXFfaXJxKGlycSk7Cit9CisKK3N0YXRpYyB2b2lkCitlbmRfaW50cmVxX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWlmICghKGlycV9kZXNjW2lycV0uc3RhdHVzICYgKElSUV9ESVNBQkxFRCB8IElSUV9JTlBST0dSRVNTKSkpCisJCWVuYWJsZV9pbnRyZXFfaXJxKGlycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgaW50cmVxX2lycV90eXBlID0geworCS50eXBlbmFtZSA9ICJGUEdBLUlSUSIsCisJLnN0YXJ0dXAgPSBzdGFydHVwX2ludHJlcV9pcnEsCisJLnNodXRkb3duID0gc2h1dGRvd25faW50cmVxX2lycSwKKwkuZW5hYmxlID0gZW5hYmxlX2ludHJlcV9pcnEsCisJLmRpc2FibGUgPSBkaXNhYmxlX2ludHJlcV9pcnEsCisJLmFjayA9IG1hc2tfYW5kX2Fja19pbnRyZXFfaXJxLAorCS5lbmQgPSBlbmRfaW50cmVxX2lycQorfTsKKworc3RhdGljIHZvaWQKK21ha2VfaW50cmVxX2lycSh1bnNpZ25lZCBpbnQgaXJxKQoreworCWRpc2FibGVfaXJxX25vc3luYyhpcnEpOworCWlycV9kZXNjW2lycV0uaGFuZGxlciA9ICZpbnRyZXFfaXJxX3R5cGU7CisJZGlzYWJsZV9pbnRyZXFfaXJxKGlycSk7Cit9CisKK2ludAorc2htc2VfaXJxX2RlbXV4KGludCBpcnEpCit7CisJaW50IGJpdDsKKwl2b2xhdGlsZSB1MTYgdmFsOworCisJaWYgKGlycSA9PSBJUlE1X0lSUSkgeworCQkvKiBSZWFkIHN0YXR1cyBSZWdpc3RlciAqLworCQl2YWwgPSBjdHJsX2ludyhQQV9DUExEX1NUKTsKKwkJYml0ID0gZmZzKHZhbCk7CisJCWlmIChiaXQgIT0gMCkKKwkJCXJldHVybiBPRkZDSElQX0lSUV9CQVNFICsgYml0IC0gMTsKKwl9CisJcmV0dXJuIGlycTsKK30KKworLyogSVJRNSBpcyBtdWx0aXBsZXhlZCBiZXR3ZWVuIHRoZSBmb2xsb3dpbmcgc291cmNlczoKKyAqIDEuIFBDIENhcmQgc29ja2V0CisgKiAyLiBFeHRlbnNpb24gc2xvdAorICogMy4gVVNCIENvbnRyb2xsZXIKKyAqIDQuIFNlcmlhbCBDb250cm9sbGVyCisgKgorICogV2UgY29uZmlndXJlIElSUTUgYXMgYSBjYXNjYWRlIElSUS4KKyAqLworc3RhdGljIHN0cnVjdCBpcnFhY3Rpb24gaXJxNSA9IHsgbm9fYWN0aW9uLCAwLCBDUFVfTUFTS19OT05FLCAiSVJRNS1jYXNjYWRlIiwKKwkJCQlOVUxMLCBOVUxMfTsKKworLyoKKyAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKKyAqLwordm9pZCBfX2luaXQKK2luaXRfNzM0M3NlX0lSUSh2b2lkKQoreworCS8qIFNldHVwIE11bHRpcGxleGVkIGludGVycnVwdHMgKi8KKwljdHJsX291dHcoOCwgUEFfQ1BMRF9NT0RFU0VUKTsJLyogU2V0IGFsbCBDUExEIGludGVycnVwdHMgdG8gYWN0aXZlCisJCQkJCSAqIGxvdy4KKwkJCQkJICovCisJLyogTWFzayBhbGwgQ1BMRCBjb250cm9sbGVyIGludGVycnVwdHMgKi8KKwljdHJsX291dHcoMHgwZmZmLCBQQV9DUExEX0lNU0spOworCisJLyogUEMgQ2FyZCBpbnRlcnJ1cHRzICovCisJbWFrZV9pbnRyZXFfaXJxKFBDX0lSUTApOworCW1ha2VfaW50cmVxX2lycShQQ19JUlExKTsKKwltYWtlX2ludHJlcV9pcnEoUENfSVJRMik7CisJbWFrZV9pbnRyZXFfaXJxKFBDX0lSUTMpOworCisJLyogRXh0ZW5zaW9uIFNsb3QgSW50ZXJydXB0cyAqLworCW1ha2VfaW50cmVxX2lycShFWFRfSVJRMCk7CisJbWFrZV9pbnRyZXFfaXJxKEVYVF9JUlExKTsKKwltYWtlX2ludHJlcV9pcnEoRVhUX0lSUTIpOworCW1ha2VfaW50cmVxX2lycShFWFRfSVJRMyk7CisKKwkvKiBVU0IgQ29udHJvbGxlciBpbnRlcnJ1cHRzICovCisJbWFrZV9pbnRyZXFfaXJxKFVTQl9JUlEwKTsKKwltYWtlX2ludHJlcV9pcnEoVVNCX0lSUTEpOworCisJLyogU2VyaWFsIENvbnRyb2xsZXIgaW50ZXJydXB0cyAqLworCW1ha2VfaW50cmVxX2lycShVQVJUX0lSUTApOworCW1ha2VfaW50cmVxX2lycShVQVJUX0lSUTEpOworCisJLyogU2V0dXAgYWxsIGV4dGVybmFsIGludGVycnVwdHMgdG8gYmUgYWN0aXZlIGxvdyAqLworCWN0cmxfb3V0dygweGFhYWEsIElOVENfSUNSMSk7CisKKwltYWtlX2lwcl9pcnEoSVJRNV9JUlEsIElSUTVfSVBSX0FERFIrMiwgSVJRNV9JUFJfUE9TLCBJUlE1X1BSSU9SSVRZKTsKKwlzZXR1cF9pcnEoSVJRNV9JUlEsICZpcnE1KTsKKwkvKiBTZXQgcG9ydCBjb250cm9sIHRvIHVzZSBJUlE1ICovCisJKih1MTYgKikweEE0MDUwMTA4ICY9IH4weGM7CisKKwltYWtlX2lwcl9pcnEoU0lPRjBfSVJRLCBTSU9GMF9JUFJfQUREUiwgU0lPRjBfSVBSX1BPUywgU0lPRjBfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShWUFVfSVJRLCBWUFVfSVBSX0FERFIsIFZQVV9JUFJfUE9TLCA4KTsKKworCWN0cmxfb3V0YigweDBmLCBJTlRDX0lNQ1I1KTsJLyogZW5hYmxlIFNDSUYgSVJRICovCisKKwltYWtlX2lwcl9pcnEoRE1URTBfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShETVRFMV9JUlEsIERNQTFfSVBSX0FERFIsIERNQTFfSVBSX1BPUywgRE1BMV9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKERNVEUyX0lSUSwgRE1BMV9JUFJfQUREUiwgRE1BMV9JUFJfUE9TLCBETUExX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoRE1URTNfSVJRLCBETUExX0lQUl9BRERSLCBETUExX0lQUl9QT1MsIERNQTFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShETVRFNF9JUlEsIERNQTJfSVBSX0FERFIsIERNQTJfSVBSX1BPUywgRE1BMl9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKERNVEU1X0lSUSwgRE1BMl9JUFJfQUREUiwgRE1BMl9JUFJfUE9TLCBETUEyX1BSSU9SSVRZKTsKKworCS8qIEkyQyBibG9jayAqLworCW1ha2VfaXByX2lycShJSUMwX0FMSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywgSUlDMF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKElJQzBfVEFDS0lfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsCisJCSAgICAgSUlDMF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKElJQzBfV0FJVElfSVJRLCBJSUMwX0lQUl9BRERSLCBJSUMwX0lQUl9QT1MsCisJCSAgICAgSUlDMF9QUklPUklUWSk7CisJbWFrZV9pcHJfaXJxKElJQzBfRFRFSV9JUlEsIElJQzBfSVBSX0FERFIsIElJQzBfSVBSX1BPUywgSUlDMF9QUklPUklUWSk7CisKKwltYWtlX2lwcl9pcnEoSUlDMV9BTElfSVJRLCBJSUMxX0lQUl9BRERSLCBJSUMxX0lQUl9QT1MsIElJQzFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShJSUMxX1RBQ0tJX0lSUSwgSUlDMV9JUFJfQUREUiwgSUlDMV9JUFJfUE9TLAorCQkgICAgIElJQzFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShJSUMxX1dBSVRJX0lSUSwgSUlDMV9JUFJfQUREUiwgSUlDMV9JUFJfUE9TLAorCQkgICAgIElJQzFfUFJJT1JJVFkpOworCW1ha2VfaXByX2lycShJSUMxX0RURUlfSVJRLCBJSUMxX0lQUl9BRERSLCBJSUMxX0lQUl9QT1MsIElJQzFfUFJJT1JJVFkpOworCisJLyogU0lPRiAqLworCW1ha2VfaXByX2lycShTSU9GMF9JUlEsIFNJT0YwX0lQUl9BRERSLCBTSU9GMF9JUFJfUE9TLCBTSU9GMF9QUklPUklUWSk7CisKKwkvKiBTSVUgKi8KKwltYWtlX2lwcl9pcnEoU0lVX0lSUSwgU0lVX0lQUl9BRERSLCBTSVVfSVBSX1BPUywgU0lVX1BSSU9SSVRZKTsKKworCS8qIFZJTyBpbnRlcnJ1cHQgKi8KKwltYWtlX2lwcl9pcnEoQ0VVX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoQkVVX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZKTsKKwltYWtlX2lwcl9pcnEoVkVVX0lSUSwgVklPX0lQUl9BRERSLCBWSU9fSVBSX1BPUywgVklPX1BSSU9SSVRZKTsKKworCS8qTUZJIGludGVycnVwdCovCisKKwltYWtlX2lwcl9pcnEoTUZJX0lSUSwgTUZJX0lQUl9BRERSLCBNRklfSVBSX1BPUywgTUZJX1BSSU9SSVRZKTsKKworCS8qIExDRCBjb250cm9sbGVyICovCisJbWFrZV9pcHJfaXJxKExDRENfSVJRLCBMQ0RDX0lQUl9BRERSLCBMQ0RDX0lQUl9QT1MsIExDRENfUFJJT1JJVFkpOworCWN0cmxfb3V0dygweDIwMDAsIFBBX01SU0hQQyArIDB4MGMpOwkvKiBtcnNocGMgaXJxIGVuYWJsZSAqLworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzM0My9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvbGVkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmE0MzljZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvbGVkLmMKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGFyY2gvc2gvYm9hcmRzL3NlLzczNDMvbGVkLmMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzQzLmg+CisKKy8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZGVyL1N1biBwYXR0ZXJuICovCit2b2lkIGhlYXJ0YmVhdF83MzQzc2Uodm9pZCkKK3sKKwlzdGF0aWMgdW5zaWduZWQgaW50IGNudCA9IDAsIHBlcmlvZCA9IDA7CisJdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKnAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgUEFfTEVEOworCXN0YXRpYyB1bnNpZ25lZCBiaXQgPSAwLCB1cCA9IDE7CisKKwljbnQgKz0gMTsKKwlpZiAoY250IDwgcGVyaW9kKSB7CisJCXJldHVybjsKKwl9CisKKwljbnQgPSAwOworCisJLyogR28gdGhyb3VnaCB0aGUgcG9pbnRzIChyb3VnaGx5ISk6CisJICogZigwKT0xMCwgZigxKT0xNiwgZigyKT0yMCwgZig1KT0zNSxmKGluZiktPjExMAorCSAqLworCXBlcmlvZCA9IDExMCAtICgoMzAwIDw8IEZTSElGVCkgLyAoKGF2ZW5ydW5bMF0gLyA1KSArICgzIDw8IEZTSElGVCkpKTsKKworCWlmICh1cCkgeworCQlpZiAoYml0ID09IDcpIHsKKwkJCWJpdC0tOworCQkJdXAgPSAwOworCQl9IGVsc2UgeworCQkJYml0Kys7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoYml0ID09IDApIHsKKwkJCWJpdCsrOworCQkJdXAgPSAxOworCQl9IGVsc2UgeworCQkJYml0LS07CisJCX0KKwl9CisJKnAgPSAxIDw8IChiaXQgKyBMRURfU0hJRlQpOworCit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83MzQzL3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg3MzIyMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NlLzczNDMvc2V0dXAuYwpAQCAtMCwwICsxLDg0IEBACisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL21hY2gvc2U3MzQzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCit2b2lkIGhlYXJ0YmVhdF83MzQzc2Uodm9pZCk7Cit2b2lkIGluaXRfNzM0M3NlX0lSUSh2b2lkKTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzbWM5MXhfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweDEwMDAwMDAwLAorCQkuZW5kCT0gMHgxMDAwMDAwRiwKKwkJLmZsYWdzCT0gSU9SRVNPVVJDRV9NRU0sCisJfSwKKwlbMV0gPSB7CisJCS8qCisJCSAqIHNoYXJlZCB3aXRoIG90aGVyIGRldmljZXMgdmlhIGV4dGVybmVsCisJCSAqIGludGVycnVwdCBjb250cm9sbGVyIGluIEZQR0EuLi4KKwkJICovCisJCS5zdGFydAk9IEVYVF9JUlEyLAorCQkuZW5kCT0gRVhUX0lSUTIsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MXhfZGV2aWNlID0geworCS5uYW1lCQk9ICJzbWM5MXgiLAorCS5pZAkJPSAwLAorCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MXhfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBzbWM5MXhfcmVzb3VyY2VzLAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNtYzkxeF9wbGF0Zm9ybV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc21jOTF4X2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzM0M3NlX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc21jOTF4X3BsYXRmb3JtX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc21jOTF4X3BsYXRmb3JtX2RldmljZXMpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0IHNoNzM0M3NlX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCit7CisJZGV2aWNlX2luaXRjYWxsKHNoNzM0M3NlX2RldmljZXNfc2V0dXApOworfQorCisvKgorICogVGhlIE1hY2hpbmUgVmVjdG9yCisgKi8KK3N0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl83MzQzc2UgX19pbml0bXYgPSB7CisJLm12X25hbWUgPSAiU29sdXRpb25FbmdpbmUgNzM0MyIsCisJLm12X3NldHVwID0gc2g3MzQzc2Vfc2V0dXAsCisJLm12X25yX2lycXMgPSAxMDgsCisJLm12X2luYiA9IHNoNzM0M3NlX2luYiwKKwkubXZfaW53ID0gc2g3MzQzc2VfaW53LAorCS5tdl9pbmwgPSBzaDczNDNzZV9pbmwsCisJLm12X291dGIgPSBzaDczNDNzZV9vdXRiLAorCS5tdl9vdXR3ID0gc2g3MzQzc2Vfb3V0dywKKwkubXZfb3V0bCA9IHNoNzM0M3NlX291dGwsCisKKwkubXZfaW5iX3AgPSBzaDczNDNzZV9pbmJfcCwKKwkubXZfaW53X3AgPSBzaDczNDNzZV9pbncsCisJLm12X2lubF9wID0gc2g3MzQzc2VfaW5sLAorCS5tdl9vdXRiX3AgPSBzaDczNDNzZV9vdXRiX3AsCisJLm12X291dHdfcCA9IHNoNzM0M3NlX291dHcsCisJLm12X291dGxfcCA9IHNoNzM0M3NlX291dGwsCisKKwkubXZfaW5zYiA9IHNoNzM0M3NlX2luc2IsCisJLm12X2luc3cgPSBzaDczNDNzZV9pbnN3LAorCS5tdl9pbnNsID0gc2g3MzQzc2VfaW5zbCwKKwkubXZfb3V0c2IgPSBzaDczNDNzZV9vdXRzYiwKKwkubXZfb3V0c3cgPSBzaDczNDNzZV9vdXRzdywKKwkubXZfb3V0c2wgPSBzaDczNDNzZV9vdXRzbCwKKworCS5tdl9pbml0X2lycSA9IGluaXRfNzM0M3NlX0lSUSwKKwkubXZfaXJxX2RlbXV4ID0gc2htc2VfaXJxX2RlbXV4LAorI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkubXZfaGVhcnRiZWF0ID0gaGVhcnRiZWF0XzczNDNzZSwKKyNlbmRpZgorfTsKK0FMSUFTX01WKDczNDNzZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L01ha2VmaWxlCmluZGV4IGJlODlhNzMuLjlhNTAzNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9NYWtlZmlsZQpAQCAtMiw1ICsyLDUgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSA3NzB4IFNvbHV0aW9uRW5naW5lIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KLQorb2JqLXkJIDo9IHNldHVwLm8gaW8ubyBpcnEubworb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaW8uYwppbmRleCA5YTM5ZWU5Li45OTQxOTQ5IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pby5jCkBAIC0xLDQgKzEsNCBAQAotLyogJElkOiBpby5jLHYgMS41IDIwMDQvMDIvMjIgMjM6MDg6NDMga2tvamltYSBFeHAgJAorLyogJElkOiBpby5jLHYgMS43IDIwMDYvMDIvMDUgMjE6NTU6MjkgbGV0aGFsIEV4cCAkCiAgKgogICogbGludXgvYXJjaC9zaC9rZXJuZWwvaW9fc2UuYwogICoKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZS9zZS5oPgorI2luY2x1ZGUgPGFzbS9zZS5oPgogCiAvKiBTSCBwY21jaWEgaW8gd2luZG93IGJhc2UsIHN0YXJ0IGFuZCBlbmQuICAqLwogaW50IHNoX3BjaWNfaW9fd2Jhc2UgPSAweGI4NDAwMDAwOwpAQCAtMjAsMTEgKzIwLDYgQEAKIGludCBzaF9wY2ljX2lvX3R5cGU7CiBpbnQgc2hfcGNpY19pb19kdW1teTsKIAotc3RhdGljIGlubGluZSB2b2lkIGRlbGF5KHZvaWQpCi17Ci0JY3RybF9pbncoMHhhMDAwMDAwMCk7Ci19Ci0KIC8qIE1TNzc1MCByZXF1aXJlcyBzcGVjaWFsIHZlcnNpb25zIG9mIGluKiwgb3V0KiByb3V0aW5lcywgc2luY2UKICAgIFBDLWxpa2UgaW8gcG9ydHMgYXJlIGxvY2F0ZWQgYXQgdXBwZXIgaGFsZiBieXRlIG9mIDE2LWJpdCB3b3JkIHdoaWNoCiAgICBjYW4gYmUgYWNjZXNzZWQgb25seSB3aXRoIDE2LWJpdCB3aWRlLiAgKi8KQEAgLTUyLDEwICs0Nyw2IEBACiAJCXJldHVybiAxOwogfQogCi0jZGVmaW5lIG1heWJlYmFkaW8obmFtZSxwb3J0KSBcCi0gIHByaW50aygiYmFkIFBDLWxpa2UgaW8gJXMgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JICNuYW1lLCAocG9ydCksIChfX3UzMikgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQotCiB1bnNpZ25lZCBjaGFyIHNlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKHNoX3BjaWNfaW9fc3RhcnQgPD0gcG9ydCAmJiBwb3J0IDw9IHNoX3BjaWNfaW9fc3RvcCkKQEAgLTc2LDcgKzY3LDcgQEAKIAkJdiA9ICgqcG9ydDJhZHIocG9ydCkgPj4gOCk7IAogCWVsc2UKIAkJdiA9ICgqcG9ydDJhZHIocG9ydCkpJjB4ZmY7IAotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCkBAIC04NiwxMyArNzcsMTMgQEAKIAkgICAgKHNoX3BjaWNfaW9fc3RhcnQgPD0gcG9ydCAmJiBwb3J0IDw9IHNoX3BjaWNfaW9fc3RvcCkpCiAJCXJldHVybiAqcG9ydDJhZHIocG9ydCk7CiAJZWxzZQotCQltYXliZWJhZGlvKGludywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKIHVuc2lnbmVkIGludCBzZV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KQogewotCW1heWJlYmFkaW8oaW5sLCBwb3J0KTsKKwltYXliZWJhZGlvKHBvcnQpOwogCXJldHVybiAwOwogfQogCkBAIC0xMTQsNyArMTA1LDcgQEAKIAkJKihwb3J0MmFkcihwb3J0KSkgPSB2YWx1ZSA8PCA4OwogCWVsc2UKIAkJKihwb3J0MmFkcihwb3J0KSkgPSB2YWx1ZTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBzZV9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCkBAIC0xMjMsMTIgKzExNCwxMiBAQAogCSAgICAoc2hfcGNpY19pb19zdGFydCA8PSBwb3J0ICYmIHBvcnQgPD0gc2hfcGNpY19pb19zdG9wKSkKIAkJKnBvcnQyYWRyKHBvcnQpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dHcsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7Ci0JbWF5YmViYWRpbyhvdXRsLCBwb3J0KTsKKwltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNlX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQpAQCAtMTU5LDcgKzE1MCw3IEBACiAKIHZvaWQgc2VfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JbWF5YmViYWRpbyhpbnNsLCBwb3J0KTsKKwltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNlX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkKQEAgLTE5MCwzNyArMTgxLDUgQEAKIAogdm9pZCBzZV9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JbWF5YmViYWRpbyhvdXRzdywgcG9ydCk7Ci19Ci0KLS8qIE1hcCBJU0EgYnVzIGFkZHJlc3MgdG8gdGhlIHJlYWwgYWRkcmVzcy4gT25seSBmb3IgUENNQ0lBLiAgKi8KLQotLyogSVNBIHBhZ2UgZGVzY3JpcHRvci4gICovCi1zdGF0aWMgX191MzIgc2hfaXNhX21lbW1hcFsyNTZdOwotCi1zdGF0aWMgaW50Ci1zaF9pc2FfbW1hcChfX3UzMiBzdGFydCwgX191MzIgbGVuZ3RoLCBfX3UzMiBvZmZzZXQpCi17Ci0JaW50IGlkeDsKLQotCWlmIChzdGFydCA+PSAweDEwMDAwMCB8fCAoc3RhcnQgJiAweGZmZikgfHwgKGxlbmd0aCAhPSAweDEwMDApKQotCQlyZXR1cm4gLTE7Ci0KLQlpZHggPSBzdGFydCA+PiAxMjsKLQlzaF9pc2FfbWVtbWFwW2lkeF0gPSAweGI4MDAwMDAwICsgKG9mZnNldCAmfiAweGZmZik7Ci0jaWYgMAotCXByaW50aygic2hfaXNhX21tYXA6IHN0YXJ0ICV4IGxlbiAleCBvZmZzZXQgJXggKGlkeCAleCBwYWRkciAleClcbiIsCi0JICAgICAgIHN0YXJ0LCBsZW5ndGgsIG9mZnNldCwgaWR4LCBzaF9pc2FfbWVtbWFwW2lkeF0pOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXVuc2lnbmVkIGxvbmcKLXNlX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IChvZmZzZXQgPj4gMTIpICYgMHhmZjsKLQlvZmZzZXQgJj0gMHhmZmY7Ci0JcmV0dXJuIHNoX2lzYV9tZW1tYXBbaWR4XSArIG9mZnNldDsKKwltYXliZWJhZGlvKHBvcnQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvaXJxLmMKaW5kZXggM2U1NTg3MS4uY2ZmNjcwMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2lycS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZS9zZS5oPgorI2luY2x1ZGUgPGFzbS9zZS5oPgogCiAvKgogICogSW5pdGlhbGl6ZSBJUlEgc2V0dGluZwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvbGVkLmMKaW5kZXggM2NkZGJkYS4uZGFmN2IxZSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9sZWQuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L2xlZC5jCkBAIC05LDIyICs5LDggQEAKICAqIFRoaXMgZmlsZSBjb250YWlucyBTb2x1dGlvbiBFbmdpbmUgc3BlY2lmaWMgTEVEIGNvZGUuCiAgKi8KIAotI2luY2x1ZGUgPGFzbS9zZS9zZS5oPgotCi1zdGF0aWMgdm9pZCBtYWNoX2xlZChpbnQgcG9zaXRpb24sIGludCB2YWx1ZSkKLXsKLQl2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCogcCA9ICh2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopUEFfTEVEOwotCi0JaWYgKHZhbHVlKSB7Ci0JCSpwIHw9ICgxPDw4KTsKLQl9IGVsc2UgewotCQkqcCAmPSB+KDE8PDgpOwotCX0KLX0KLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3NlLmg+CiAKIC8qIEN5Y2xlIHRoZSBMRUQncyBpbiB0aGUgY2xhc2ljIEtuaWdodHJpZGVyL1N1biBwYXR0ZXJuICovCiB2b2lkIGhlYXJ0YmVhdF9zZSh2b2lkKQpAQCAtNjQsNCArNTAsMyBAQAogCSpwID0gMTw8KGJpdCs4KTsKIAogfQotI2VuZGlmIC8qIENPTkZJR19IRUFSVEJFQVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvbWFjaC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9tYWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDZlYzA3YmQuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9tYWNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NyArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvbWFjaF9zZS5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBNYWNoaW5lIHZlY3RvciBmb3IgdGhlIEhpdGFjaGkgU29sdXRpb25FbmdpbmUKLSAqLwotCi0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL3NlL2lvLmg+Ci0KLXZvaWQgaGVhcnRiZWF0X3NlKHZvaWQpOwotdm9pZCBzZXR1cF9zZSh2b2lkKTsKLXZvaWQgaW5pdF9zZV9JUlEodm9pZCk7Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2UgX19pbml0bXYgPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQkubXZfbnJfaXJxcwkJPSA0OCwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkKLQkubXZfbnJfaXJxcwkJPSAzMiwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKLQkubXZfbnJfaXJxcwkJPSA2MSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKLQkubXZfbnJfaXJxcwkJPSA4NiwKLSNlbmRpZgotCi0JLm12X2luYgkJCT0gc2VfaW5iLAotCS5tdl9pbncJCQk9IHNlX2ludywKLQkubXZfaW5sCQkJPSBzZV9pbmwsCi0JLm12X291dGIJCT0gc2Vfb3V0YiwKLQkubXZfb3V0dwkJPSBzZV9vdXR3LAotCS5tdl9vdXRsCQk9IHNlX291dGwsCi0KLQkubXZfaW5iX3AJCT0gc2VfaW5iX3AsCi0JLm12X2lud19wCQk9IHNlX2ludywKLQkubXZfaW5sX3AJCT0gc2VfaW5sLAotCS5tdl9vdXRiX3AJCT0gc2Vfb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gc2Vfb3V0dywKLQkubXZfb3V0bF9wCQk9IHNlX291dGwsCi0KLQkubXZfaW5zYgkJPSBzZV9pbnNiLAotCS5tdl9pbnN3CQk9IHNlX2luc3csCi0JLm12X2luc2wJCT0gc2VfaW5zbCwKLQkubXZfb3V0c2IJCT0gc2Vfb3V0c2IsCi0JLm12X291dHN3CQk9IHNlX291dHN3LAotCS5tdl9vdXRzbAkJPSBzZV9vdXRzbCwKLQotCS5tdl9pc2FfcG9ydDJhZGRyCT0gc2VfaXNhX3BvcnQyYWRkciwKLQotCS5tdl9pbml0X2lycQkJPSBpbml0X3NlX0lSUSwKLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0JLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfc2UsCi0jZW5kaWYKLX07Ci1BTElBU19NVihzZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3MHgvc2V0dXAuYwppbmRleCA3ZDFhMDcxLi5mM2Y4MmI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzB4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzcweC9zZXR1cC5jCkBAIC03LDE1ICs3LDE3IEBACiAgKiBIaXRhY2hpIFNvbHV0aW9uRW5naW5lIFN1cHBvcnQuCiAgKgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KICNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZS9zZS5oPgotI2luY2x1ZGUgPGFzbS9zZS9zbWMzN2M5M3guaD4KKyNpbmNsdWRlIDxhc20vc2UuaD4KKyNpbmNsdWRlIDxhc20vc21jMzdjOTN4Lmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKwordm9pZCBoZWFydGJlYXRfc2Uodm9pZCk7Cit2b2lkIGluaXRfc2VfSVJRKHZvaWQpOwogCiAvKgogICogQ29uZmlndXJlIHRoZSBTdXBlciBJL08gY2hpcApAQCAtMjYsNyArMjgsOCBAQAogCW91dGJfcChkYXRhLCBEQVRBX1BPUlQpOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zbXNjKHZvaWQpCisvKiBYWFg6IEFub3RoZXIgY2FuZGlkYXRlIGZvciBhIG1vcmUgZ2VuZXJpYyBjY2hpcCBtYWNoaW5lIHZlY3RvciAqLworc3RhdGljIHZvaWQgX19pbml0IHNtc2Nfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKIHsKIAlvdXRiX3AoQ09ORklHX0VOVEVSLCBDT05GSUdfUE9SVCk7CiAJb3V0Yl9wKENPTkZJR19FTlRFUiwgQ09ORklHX1BPUlQpOwpAQCAtNjksMTYgKzcyLDQ2IEBACiAJb3V0Yl9wKENPTkZJR19FWElULCBDT05GSUdfUE9SVCk7CiB9CiAKLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiU29sdXRpb25FbmdpbmUiOwotfQotCiAvKgotICogSW5pdGlhbGl6ZSB0aGUgYm9hcmQKKyAqIFRoZSBNYWNoaW5lIFZlY3RvcgogICovCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQotewotCWluaXRfc21zYygpOwotCS8qIFhYWDogUlRDIHNldHRpbmcgY29tZXMgaGVyZSAqLwotfQorc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NlIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJTb2x1dGlvbkVuZ2luZSIsCisJLm12X3NldHVwCQk9IHNtc2Nfc2V0dXAsCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKKwkubXZfbnJfaXJxcwkJPSA0OCwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkKKwkubXZfbnJfaXJxcwkJPSAzMiwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKKwkubXZfbnJfaXJxcwkJPSA2MSwKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKwkubXZfbnJfaXJxcwkJPSA4NiwKKyNlbmRpZgorCisJLm12X2luYgkJCT0gc2VfaW5iLAorCS5tdl9pbncJCQk9IHNlX2ludywKKwkubXZfaW5sCQkJPSBzZV9pbmwsCisJLm12X291dGIJCT0gc2Vfb3V0YiwKKwkubXZfb3V0dwkJPSBzZV9vdXR3LAorCS5tdl9vdXRsCQk9IHNlX291dGwsCisKKwkubXZfaW5iX3AJCT0gc2VfaW5iX3AsCisJLm12X2lud19wCQk9IHNlX2ludywKKwkubXZfaW5sX3AJCT0gc2VfaW5sLAorCS5tdl9vdXRiX3AJCT0gc2Vfb3V0Yl9wLAorCS5tdl9vdXR3X3AJCT0gc2Vfb3V0dywKKwkubXZfb3V0bF9wCQk9IHNlX291dGwsCisKKwkubXZfaW5zYgkJPSBzZV9pbnNiLAorCS5tdl9pbnN3CQk9IHNlX2luc3csCisJLm12X2luc2wJCT0gc2VfaW5zbCwKKwkubXZfb3V0c2IJCT0gc2Vfb3V0c2IsCisJLm12X291dHN3CQk9IHNlX291dHN3LAorCS5tdl9vdXRzbAkJPSBzZV9vdXRzbCwKKworCS5tdl9pbml0X2lycQkJPSBpbml0X3NlX0lSUSwKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisJLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfc2UsCisjZW5kaWYKK307CitBTElBU19NVihzZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL01ha2VmaWxlCmluZGV4IGNlN2NhMjQuLjE4ODkwMGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSA3NzUxIFNvbHV0aW9uRW5naW5lIHNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwKICMKIAotb2JqLXkJIDo9IG1hY2gubyBzZXR1cC5vIGlvLm8gaXJxLm8gbGVkLm8KK29iai15CSA6PSBzZXR1cC5vIGlvLm8gaXJxLm8KIAogb2JqLSQoQ09ORklHX1BDSSkgKz0gcGNpLm8KLQorb2JqLSQoQ09ORklHX0hFQVJUQkVBVCkgKz0gbGVkLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaW8uYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaW8uYwppbmRleCA5OTA0MWIyLi5lOGQ4NDZjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pby5jCkBAIC0xLDYgKzEsNCBAQAotLyogCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9pb183NzUxc2UuYwotICoKKy8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgIElhbiBkYSBTaWx2YSwgSmVyZW15IFNpZWdlbAogICogQmFzZWQgbGFyZ2VseSBvbiBpb19zZS5jLgogICoKQEAgLTEwLDk2ICs4LDIxIEBACiAgKiBwbGFjZWhvbGRlciBjb2RlIGZyb20gaW9fc2UuYyBsZWZ0IGluIHdpdGggdGhlCiAgKiBleHBlY3RhdGlvbiBvZiBsYXRlciBTdXBlcklPIGFuZCBQQ01DSUEgYWNjZXNzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZTc3NTEvc2U3NzUxLmg+CisjaW5jbHVkZSA8YXNtL3NlNzc1MS5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgIi4uLy4uLy4uL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaCIKLQotI2lmIDAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIFZhcmlhYmxlcyBmcm9tIGlvX3NlLmMsIHJlbGF0ZWQgdG8gUENNQ0lBIChub3QgUENJKTsgd2UncmUgbm90Ci0gKiBjb21waWxpbmcgdGhlbSBpbiwgYW5kIGhhdmUgcmVtb3ZlZCByZWZlcmVuY2VzIGZyb20gZnVuY3Rpb25zCi0gKiB3aGljaCBmb2xsb3cuICBbTWFueSBjaGVja2VkIGZvciBJTyBwb3J0cyBpbiB0aGUgcmFuZ2UgYm91bmRlZAotICogYnkgc2hfcGNpY19pb19zdGFydC9zdG9wLCBhbmQgdXNlZCBzaF9wY2ljX2lvX3diYXNlIGFzIG9mZnNldC4KLSAqIEFzIHN0YXJ0L3N0b3AgYXJlIHVuaW5pdGlhbGl6ZWQsIG9ubHkgcG9ydCAweDAgd291bGQgbWF0Y2g/XQotICogV2hlbiB1c2VkLCByZW1lbWJlciB0byBhZGp1c3QgbmFtZXMgdG8gYXZvaWQgY2xhc2ggd2l0aCBpb19zZT8KLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIFNIIHBjbWNpYSBpbyB3aW5kb3cgYmFzZSwgc3RhcnQgYW5kIGVuZC4gICovCi1pbnQgc2hfcGNpY19pb193YmFzZSA9IDB4Yjg0MDAwMDA7Ci1pbnQgc2hfcGNpY19pb19zdGFydDsKLWludCBzaF9wY2ljX2lvX3N0b3A7Ci1pbnQgc2hfcGNpY19pb190eXBlOwotaW50IHNoX3BjaWNfaW9fZHVtbXk7Ci0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNlbmRpZgotCi0vKgotICogVGhlIDc3NTEgU29sdXRpb24gRW5naW5lIHVzZXMgdGhlIGJ1aWx0LWluIFBDSSBjb250cm9sbGVyIChQQ0lDKQotICogb2YgdGhlIDc3NTEgcHJvY2Vzc29yLCBhbmQgaGFzIGEgU3VwZXJJTyBhY2Nlc3NpYmxlIHZpYSB0aGUgUENJLgotICogVGhlIGJvYXJkIGFsc28gaW5jbHVkZXMgYSBQQ01DSUEgY29udHJvbGxlciBvbiBpdHMgbWVtb3J5IGJ1cywKLSAqIGxpa2UgdGhlIG90aGVyIFNvbHV0aW9uIEVuZ2luZSBib2FyZHMuCi0gKi8gCi0KLSNkZWZpbmUgUENJSU9CUgkJKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lJT0JSKQotI2RlZmluZSBQQ0lNQlIgICAgICAgICAgKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lNQlIpCi0jZGVmaW5lIFBDSV9JT19BUkVBCVNINzc1MV9QQ0lfSU9fQkFTRQotI2RlZmluZSBQQ0lfTUVNX0FSRUEJU0g3NzUxX1BDSV9DT05GSUdfQkFTRQotCi0jZGVmaW5lIFBDSV9JT01BUChhZHIpCShQQ0lfSU9fQVJFQSArIChhZHIgJiB+U0g3NzUxX1BDSUlPQlJfTUFTSykpCi0KLSNkZWZpbmUgbWF5YmViYWRpbyhuYW1lLHBvcnQpIFwKLSAgcHJpbnRrKCJiYWQgUEMtbGlrZSBpbyAlcyBmb3IgcG9ydCAweCVseCBhdCAweCUwOHhcbiIsIFwKLQkgI25hbWUsIChwb3J0KSwgKF9fdTMyKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQotewotCWN0cmxfaW53KDB4YTAwMDAwMDApOwotfQotCi1zdGF0aWMgaW5saW5lIHZvbGF0aWxlIF9fdTE2ICoKLXBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2xhdGlsZSB1MTYgKnBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQogewogCWlmIChwb3J0ID49IDB4MjAwMCkKIAkJcmV0dXJuICh2b2xhdGlsZSBfX3UxNiAqKSAoUEFfTVJTSFBDICsgKHBvcnQgLSAweDIwMDApKTsKLSNpZiAwCi0JZWxzZQotCQlyZXR1cm4gKHZvbGF0aWxlIF9fdTE2ICopIChQQV9TVVBFUklPICsgKHBvcnQgPDwgMSkpOwotI2VuZGlmCi0JbWF5YmViYWRpbyhuYW1lLCh1bnNpZ25lZCBsb25nKXBvcnQpOworCW1heWJlYmFkaW8oKHVuc2lnbmVkIGxvbmcpcG9ydCk7CiAJcmV0dXJuICh2b2xhdGlsZSBfX3UxNiopcG9ydDsKIH0KIAotI2lmIDAKLS8qIFRoZSA3NzUxIFNvbHV0aW9uIEVuZ2luZSBzZWVtcyB0byBoYXZlIGV2ZXJ5dGhpbmcgaG9va2VkICovCi0vKiB1cCBwcmV0dHkgbm9ybWFsbHkgKG5vdGhpbmcgb24gaGlnaC1ieXRlcyBvbmx5Li4uKSBzbyB0aGlzICovCi0vKiBzaG91bGRuJ3QgYmUgbmVlZGVkICovCi1zdGF0aWMgaW5saW5lIGludAotc2hpZnRlZF9wb3J0KHVuc2lnbmVkIGxvbmcgcG9ydCkKLXsKLQkvKiBGb3IgSURFIHJlZ2lzdGVycywgdmFsdWUgaXMgbm90IHNoaWZ0ZWQgKi8KLQlpZiAoKDB4MWYwIDw9IHBvcnQgJiYgcG9ydCA8IDB4MWY4KSB8fCBwb3J0ID09IDB4M2Y2KQotCQlyZXR1cm4gMDsKLQllbHNlCi0JCXJldHVybiAxOwotfQotI2VuZGlmCi0KLS8qIEluIGNhc2Ugc29tZW9uZSBjb25maWd1cmVzIHRoZSBrZXJuZWwgdy9vIFBDSSBzdXBwb3J0OiBpbiB0aGF0ICovCi0vKiBzY2VuYXJpbywgZG9uJ3QgZXZlciBib3RoZXIgdG8gY2hlY2sgZm9yIFBDSS13aW5kb3cgYWRkcmVzc2VzICovCi0KLS8qIE5PVEU6IFdJTkRPVyBDSEVDSyBNQVkgQkUgQSBCSVQgT0ZGLCBISUdIIFBDSUJJT1NfTUlOX0lPIFdSQVBTPyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIFwKLSAgKChwb3J0ID49IFBDSUJJT1NfTUlOX0lPKSAmJiAocG9ydCA8IChQQ0lCSU9TX01JTl9JTyArIFNINzc1MV9QQ0lfSU9fU0laRSkpKQotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpICgwKQotI2VuZGlmCi0KIC8qCiAgKiBHZW5lcmFsIG91dGxpbmU6IHJlbWFwIHJlYWxseSBsb3cgc3R1ZmYgW2V2ZW50dWFsbHldIHRvIFN1cGVySU8sCiAgKiBzdHVmZiBpbiBQQ0kgSU8gc3BhY2UgKGF0IG9yIGFib3ZlIHdpbmRvdyBhdCBwY2kuaDpQQ0lCSU9TX01JTl9JTykKQEAgLTExMSwxMCArMzQsMTAgQEAKIHsKIAlpZiAoUFhTRUcocG9ydCkpCiAJCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLQkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcGNpX2lvYWRkcihwb3J0KTsKIAllbHNlCi0JCXJldHVybiAoKnBvcnQyYWRyKHBvcnQpKSYweGZmOyAKKwkJcmV0dXJuICgqcG9ydDJhZHIocG9ydCkpICYgMHhmZjsKIH0KIAogdW5zaWduZWQgY2hhciBzaDc3NTFzZV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCkBAIC0xMjMsMTEgKzQ2LDExIEBACiAKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQogICAgICAgICAgICAgICAgIHYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgICAgICAgICB2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopUENJX0lPTUFQKHBvcnQpOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisgICAgICAgICAgICAgICAgdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQl2ID0gKCpwb3J0MmFkcihwb3J0KSkmMHhmZjsgCi0JZGVsYXkoKTsKKwkJdiA9ICgqcG9ydDJhZHIocG9ydCkpICYgMHhmZjsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTEzNSwxMiArNTgsMTIgQEAKIHsKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCiAJCXJldHVybiAqcG9ydDJhZHIocG9ydCk7CiAJZWxzZQotCQltYXliZWJhZGlvKGludywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE0OCwxMiArNzEsMTIgQEAKIHsKICAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQogICAgICAgICAgICAgICAgIHJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwb3J0OwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQogCQlyZXR1cm4gKnBvcnQyYWRyKHBvcnQpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhpbmwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjIsOCArODUsOCBAQAogCiAgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotICAgICAgICAJKigodW5zaWduZWQgY2hhciopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIGNoYXIqKXBjaV9pb2FkZHIocG9ydCkpID0gdmFsdWU7CiAJZWxzZQogCQkqKHBvcnQyYWRyKHBvcnQpKSA9IHZhbHVlOwogfQpAQCAtMTcyLDczICs5NSw0MSBAQAogewogICAgICAgICBpZiAoUFhTRUcocG9ydCkpCiAgICAgICAgICAgICAgICAgKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgCSooKHVuc2lnbmVkIGNoYXIqKVBDSV9JT01BUChwb3J0KSkgPSB2YWx1ZTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQkqKCh1bnNpZ25lZCBjaGFyKilwY2lfaW9hZGRyKHBvcnQpKSA9IHZhbHVlOwogCWVsc2UKIAkJKihwb3J0MmFkcihwb3J0KSkgPSB2YWx1ZTsKLQlkZWxheSgpOworCWN0cmxfZGVsYXkoKTsKIH0KIAogdm9pZCBzaDc3NTFzZV9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLSAgICAgICAgCSooKHVuc2lnbmVkIHNob3J0ICopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIHNob3J0ICopcGNpX2lvYWRkcihwb3J0KSkgPSB2YWx1ZTsKIAllbHNlIGlmIChwb3J0ID49IDB4MjAwMCkKIAkJKnBvcnQyYWRyKHBvcnQpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dHcsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNoNzc1MXNlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKICAgICAgICAgICAgICAgICAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotICAgICAgICAJKigodW5zaWduZWQgbG9uZyopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIGxvbmcqKXBjaV9pb2FkZHIocG9ydCkpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dGwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNoNzc1MXNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCW1heWJlYmFkaW8oaW5zbCwgcG9ydCk7CisJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAogdm9pZCBzaDc3NTFzZV9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JbWF5YmViYWRpbyhvdXRzdywgcG9ydCk7Ci19Ci0KLS8qIE1hcCBJU0EgYnVzIGFkZHJlc3MgdG8gdGhlIHJlYWwgYWRkcmVzcy4gT25seSBmb3IgUENNQ0lBLiAgKi8KLQotLyogSVNBIHBhZ2UgZGVzY3JpcHRvci4gICovCi1zdGF0aWMgX191MzIgc2hfaXNhX21lbW1hcFsyNTZdOwotCi0jaWYgMAotc3RhdGljIGludAotc2hfaXNhX21tYXAoX191MzIgc3RhcnQsIF9fdTMyIGxlbmd0aCwgX191MzIgb2Zmc2V0KQotewotCWludCBpZHg7Ci0KLQlpZiAoc3RhcnQgPj0gMHgxMDAwMDAgfHwgKHN0YXJ0ICYgMHhmZmYpIHx8IChsZW5ndGggIT0gMHgxMDAwKSkKLQkJcmV0dXJuIC0xOwotCi0JaWR4ID0gc3RhcnQgPj4gMTI7Ci0Jc2hfaXNhX21lbW1hcFtpZHhdID0gMHhiODAwMDAwMCArIChvZmZzZXQgJn4gMHhmZmYpOwotCXByaW50aygic2hfaXNhX21tYXA6IHN0YXJ0ICV4IGxlbiAleCBvZmZzZXQgJXggKGlkeCAleCBwYWRkciAleClcbiIsCi0JICAgICAgIHN0YXJ0LCBsZW5ndGgsIG9mZnNldCwgaWR4LCBzaF9pc2FfbWVtbWFwW2lkeF0pOwotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXVuc2lnbmVkIGxvbmcKLXNoNzc1MXNlX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpCi17Ci0JaW50IGlkeDsKLQotCWlkeCA9IChvZmZzZXQgPj4gMTIpICYgMHhmZjsKLQlvZmZzZXQgJj0gMHhmZmY7Ci0JcmV0dXJuIHNoX2lzYV9tZW1tYXBbaWR4XSArIG9mZnNldDsKKwltYXliZWJhZGlvKHBvcnQpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pcnEuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvaXJxLmMKaW5kZXggYmY2YzAyMy4uYzYwN2IwYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9pcnEuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2lycS5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLSNpbmNsdWRlIDxhc20vc2U3NzUxL3NlNzc1MS5oPgorI2luY2x1ZGUgPGFzbS9zZTc3NTEuaD4KIAogLyoKICAqIEluaXRpYWxpemUgSVJRIHNldHRpbmcKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMgYi9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL2xlZC5jCmluZGV4IGE4Nzg3MjYuLmZmMDM1NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbGVkLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9sZWQuYwpAQCAtOCwyMyArOCw4IEBACiAgKgogICogVGhpcyBmaWxlIGNvbnRhaW5zIFNvbHV0aW9uIEVuZ2luZSBzcGVjaWZpYyBMRUQgY29kZS4KICAqLwotCi0jaW5jbHVkZSA8YXNtL3NlNzc1MS9zZTc3NTEuaD4KLQotc3RhdGljIHZvaWQgbWFjaF9sZWQoaW50IHBvc2l0aW9uLCBpbnQgdmFsdWUpCi17Ci0Jdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqIHAgPSAodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKVBBX0xFRDsKLQotCWlmICh2YWx1ZSkgewotCQkqcCB8PSAoMTw8OCk7Ci0JfSBlbHNlIHsKLQkJKnAgJj0gfigxPDw4KTsKLQl9Ci19Ci0KLSNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCi0KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGFzbS9zZTc3NTEuaD4KIAogLyogQ3ljbGUgdGhlIExFRCdzIGluIHRoZSBjbGFzaWMgS25pZ2h0cmlkZXIvU3VuIHBhdHRlcm4gKi8KIHZvaWQgaGVhcnRiZWF0Xzc3NTFzZSh2b2lkKQpAQCAtNjQsNCArNDksMyBAQAogCSpwID0gMTw8KGJpdCs4KTsKIAogfQotI2VuZGlmIC8qIENPTkZJR19IRUFSVEJFQVQgKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvbWFjaC5jIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9tYWNoLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYyZDhkM2UuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9tYWNoLmMKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvbWFjaF83NzUxc2UuYwotICoKLSAqIE1pbm9yIHR3ZWFrIG9mIG1hY2hfc2UuYyBmaWxlIHRvIHJlZmVyZW5jZSA3NzUxc2Utc3BlY2lmaWMgaXRlbXMuCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIE1hY2hpbmUgdmVjdG9yIGZvciB0aGUgSGl0YWNoaSA3NzUxIFNvbHV0aW9uRW5naW5lCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjX2luaXQuaD4KLQotI2luY2x1ZGUgPGFzbS9zZTc3NTEvaW8uaD4KLQotdm9pZCBoZWFydGJlYXRfNzc1MXNlKHZvaWQpOwotdm9pZCBpbml0Xzc3NTFzZV9JUlEodm9pZCk7Ci0KLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfNzc1MXNlIF9faW5pdG12ID0gewotCS5tdl9ucl9pcnFzCQk9IDcyLAotCi0JLm12X2luYgkJCT0gc2g3NzUxc2VfaW5iLAotCS5tdl9pbncJCQk9IHNoNzc1MXNlX2ludywKLQkubXZfaW5sCQkJPSBzaDc3NTFzZV9pbmwsCi0JLm12X291dGIJCT0gc2g3NzUxc2Vfb3V0YiwKLQkubXZfb3V0dwkJPSBzaDc3NTFzZV9vdXR3LAotCS5tdl9vdXRsCQk9IHNoNzc1MXNlX291dGwsCi0KLQkubXZfaW5iX3AJCT0gc2g3NzUxc2VfaW5iX3AsCi0JLm12X2lud19wCQk9IHNoNzc1MXNlX2ludywKLQkubXZfaW5sX3AJCT0gc2g3NzUxc2VfaW5sLAotCS5tdl9vdXRiX3AJCT0gc2g3NzUxc2Vfb3V0Yl9wLAotCS5tdl9vdXR3X3AJCT0gc2g3NzUxc2Vfb3V0dywKLQkubXZfb3V0bF9wCQk9IHNoNzc1MXNlX291dGwsCi0KLQkubXZfaW5zbAkJPSBzaDc3NTFzZV9pbnNsLAotCS5tdl9vdXRzbAkJPSBzaDc3NTFzZV9vdXRzbCwKLQotCS5tdl9pc2FfcG9ydDJhZGRyCT0gc2g3NzUxc2VfaXNhX3BvcnQyYWRkciwKLQotCS5tdl9pbml0X2lycQkJPSBpbml0Xzc3NTFzZV9JUlEsCi0jaWZkZWYgQ09ORklHX0hFQVJUQkVBVAotCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0Xzc3NTFzZSwKLSNlbmRpZgotfTsKLUFMSUFTX01WKDc3NTFzZSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NlLzc3NTEvc2V0dXAuYwppbmRleCA0OGRjNWFlLi43M2U4MjYzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zZS83NzUxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2UvNzc1MS9zZXR1cC5jCkBAIC0xLDQgKzEsNCBAQAotLyogCisvKgogICogbGludXgvYXJjaC9zaC9rZXJuZWwvc2V0dXBfNzc1MXNlLmMKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEthenVtb3RvIEtvamltYQpAQCAtMTEsNzggKzExLDE1IEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9zZTc3NTEvc2U3NzUxLmg+CisjaW5jbHVkZSA8YXNtL3NlNzc1MS5oPgorCit2b2lkIGhlYXJ0YmVhdF83NzUxc2Uodm9pZCk7Cit2b2lkIGluaXRfNzc1MXNlX0lSUSh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19TSF9LR0RCCiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KLSNlbmRpZgotCi0vKgotICogQ29uZmlndXJlIHRoZSBTdXBlciBJL08gY2hpcAotICovCi0jaWYgMAotLyogTGVmdG92ZXIgY29kZSBmcm9tIHJlZ3VsYXIgU29sdXRpb24gRW5naW5lLCBmb3IgcmVmZXJlbmNlLiAqLwotLyogVGhlIFNINzc1MSBTb2x1dGlvbiBFbmdpbmUgaGFzIGEgZGlmZmVyZW50IFN1cGVySU8uICovCi1zdGF0aWMgdm9pZCBfX2luaXQgc21zY19jb25maWcoaW50IGluZGV4LCBpbnQgZGF0YSkKLXsKLQlvdXRiX3AoaW5kZXgsIElOREVYX1BPUlQpOwotCW91dGJfcChkYXRhLCBEQVRBX1BPUlQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zbXNjKHZvaWQpCi17Ci0Jb3V0Yl9wKENPTkZJR19FTlRFUiwgQ09ORklHX1BPUlQpOwotCW91dGJfcChDT05GSUdfRU5URVIsIENPTkZJR19QT1JUKTsKLQotCS8qIEZEQyAqLwotCXNtc2NfY29uZmlnKENVUlJFTlRfTEROX0lOREVYLCBMRE5fRkRDKTsKLQlzbXNjX2NvbmZpZyhBQ1RJVkFURV9JTkRFWCwgMHgwMSk7Ci0Jc21zY19jb25maWcoSVJRX1NFTEVDVF9JTkRFWCwgNik7IC8qIElSUTYgKi8KLQotCS8qIElERTEgKi8KLQlzbXNjX2NvbmZpZyhDVVJSRU5UX0xETl9JTkRFWCwgTEROX0lERTEpOwotCXNtc2NfY29uZmlnKEFDVElWQVRFX0lOREVYLCAweDAxKTsKLQlzbXNjX2NvbmZpZyhJUlFfU0VMRUNUX0lOREVYLCAxNCk7IC8qIElSUTE0ICovCi0KLQkvKiBBVVhJTyAoR1BJTyk6IHRvIHVzZSBJREUxICovCi0Jc21zY19jb25maWcoQ1VSUkVOVF9MRE5fSU5ERVgsIExETl9BVVhJTyk7Ci0Jc21zY19jb25maWcoR1BJTzQ2X0lOREVYLCAweDAwKTsgLyogbklPUk9QICovCi0Jc21zY19jb25maWcoR1BJTzQ3X0lOREVYLCAweDAwKTsgLyogbklPV09QICovCi0KLQkvKiBDT00xICovCi0Jc21zY19jb25maWcoQ1VSUkVOVF9MRE5fSU5ERVgsIExETl9DT00xKTsKLQlzbXNjX2NvbmZpZyhBQ1RJVkFURV9JTkRFWCwgMHgwMSk7Ci0Jc21zY19jb25maWcoSU9fQkFTRV9ISV9JTkRFWCwgMHgwMyk7Ci0Jc21zY19jb25maWcoSU9fQkFTRV9MT19JTkRFWCwgMHhmOCk7Ci0Jc21zY19jb25maWcoSVJRX1NFTEVDVF9JTkRFWCwgNCk7IC8qIElSUTQgKi8KLQotCS8qIENPTTIgKi8KLQlzbXNjX2NvbmZpZyhDVVJSRU5UX0xETl9JTkRFWCwgTEROX0NPTTIpOwotCXNtc2NfY29uZmlnKEFDVElWQVRFX0lOREVYLCAweDAxKTsKLQlzbXNjX2NvbmZpZyhJT19CQVNFX0hJX0lOREVYLCAweDAyKTsKLQlzbXNjX2NvbmZpZyhJT19CQVNFX0xPX0lOREVYLCAweGY4KTsKLQlzbXNjX2NvbmZpZyhJUlFfU0VMRUNUX0lOREVYLCAzKTsgLyogSVJRMyAqLwotCi0JLyogUlRDICovCi0Jc21zY19jb25maWcoQ1VSUkVOVF9MRE5fSU5ERVgsIExETl9SVEMpOwotCXNtc2NfY29uZmlnKEFDVElWQVRFX0lOREVYLCAweDAxKTsKLQlzbXNjX2NvbmZpZyhJUlFfU0VMRUNUX0lOREVYLCA4KTsgLyogSVJROCAqLwotCi0JLyogWFhYOiBQQVJQT1JULCBLQkQsIGFuZCBNT1VTRSB3aWxsIGNvbWUgaGVyZS4uLiAqLwotCW91dGJfcChDT05GSUdfRVhJVCwgQ09ORklHX1BPUlQpOwotfQotI2VuZGlmCi0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiNzc1MSBTb2x1dGlvbkVuZ2luZSI7Ci19Ci0KLSNpZmRlZiBDT05GSUdfU0hfS0dEQgogc3RhdGljIGludCBrZ2RiX3VhcnRfc2V0dXAodm9pZCk7CiBzdGF0aWMgc3RydWN0IGtnZGJfc2VybWFwIGtnZGJfdWFydF9zZXJtYXAgPSAKIHsgInR0eVMiLCAwLCBrZ2RiX3VhcnRfc2V0dXAsIE5VTEwgfTsKQEAgLTkxLDcgKzI4LDcgQEAKIC8qCiAgKiBJbml0aWFsaXplIHRoZSBib2FyZAogICovCi12b2lkIF9faW5pdCBwbGF0Zm9ybV9zZXR1cCh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IHNoNzc1MXNlX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7CiAJLyogQ2FsbCBpbml0X3Ntc2MoKSByZXBsYWNlbWVudCB0byBzZXQgdXAgU3VwZXJJTy4gKi8KIAkvKiBYWFg6IFJUQyBzZXR0aW5nIGNvbWVzIGhlcmUgKi8KQEAgLTIyNSwzICsxNjIsMzcgQEAKIAlyZXR1cm4gMDsKIH0KICNlbmRpZiAvKiBDT05GSUdfU0hfS0dEQiAqLworCisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKKyAqLworCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfNzc1MXNlIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICI3NzUxIFNvbHV0aW9uRW5naW5lIiwKKwkubXZfc2V0dXAJCT0gc2g3NzUxc2Vfc2V0dXAsCisJLm12X25yX2lycXMJCT0gNzIsCisKKwkubXZfaW5iCQkJPSBzaDc3NTFzZV9pbmIsCisJLm12X2ludwkJCT0gc2g3NzUxc2VfaW53LAorCS5tdl9pbmwJCQk9IHNoNzc1MXNlX2lubCwKKwkubXZfb3V0YgkJPSBzaDc3NTFzZV9vdXRiLAorCS5tdl9vdXR3CQk9IHNoNzc1MXNlX291dHcsCisJLm12X291dGwJCT0gc2g3NzUxc2Vfb3V0bCwKKworCS5tdl9pbmJfcAkJPSBzaDc3NTFzZV9pbmJfcCwKKwkubXZfaW53X3AJCT0gc2g3NzUxc2VfaW53LAorCS5tdl9pbmxfcAkJPSBzaDc3NTFzZV9pbmwsCisJLm12X291dGJfcAkJPSBzaDc3NTFzZV9vdXRiX3AsCisJLm12X291dHdfcAkJPSBzaDc3NTFzZV9vdXR3LAorCS5tdl9vdXRsX3AJCT0gc2g3NzUxc2Vfb3V0bCwKKworCS5tdl9pbnNsCQk9IHNoNzc1MXNlX2luc2wsCisJLm12X291dHNsCQk9IHNoNzc1MXNlX291dHNsLAorCisJLm12X2luaXRfaXJxCQk9IGluaXRfNzc1MXNlX0lSUSwKKyNpZmRlZiBDT05GSUdfSEVBUlRCRUFUCisJLm12X2hlYXJ0YmVhdAkJPSBoZWFydGJlYXRfNzc1MXNlLAorI2VuZGlmCit9OworQUxJQVNfTVYoNzc1MXNlKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2gwMy9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvcnRjLmMKaW5kZXggZDYwOTg2My4uMGE5MjY2YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2gwMy9ydGMuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zaDAzL3J0Yy5jCkBAIC0xMCw5ICsxMCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgogCiAjZGVmaW5lIFJUQ19CQVNFCTB4YjAwMDAwMDAKICNkZWZpbmUgUlRDX1NFQzEJKFJUQ19CQVNFICsgMCkKQEAgLTM0LDggKzM1LDYgQEAKICNkZWZpbmUgUlRDX0JVU1kJMQogI2RlZmluZSBSVENfU1RPUAkyCiAKLWV4dGVybiB2b2lkICgqcnRjX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKik7Ci1leHRlcm4gaW50ICgqcnRjX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwogZXh0ZXJuIHNwaW5sb2NrX3QgcnRjX2xvY2s7CiAKIHVuc2lnbmVkIGxvbmcgZ2V0X2Ntb3NfdGltZSh2b2lkKQpAQCAtMTI4LDYgKzEyNyw2IEBACiAKIHZvaWQgc2gwM190aW1lX2luaXQodm9pZCkKIHsKLQlydGNfZ2V0X3RpbWUgPSBzaDAzX3J0Y19nZXR0aW1lb2ZkYXk7Ci0JcnRjX3NldF90aW1lID0gc2gwM19ydGNfc2V0dGltZW9mZGF5OworCXJ0Y19zaF9nZXRfdGltZSA9IHNoMDNfcnRjX2dldHRpbWVvZmRheTsKKwlydGNfc2hfc2V0X3RpbWUgPSBzaDAzX3J0Y19zZXR0aW1lb2ZkYXk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaDAzL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zaDAzL3NldHVwLmMKaW5kZXggNjAyOTBmOC4uNmMzMTA1OCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc2gwMy9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NoMDMvc2V0dXAuYwpAQCAtNywyMiArNywxMyBAQAogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+Ci0jaW5jbHVkZSA8bGludXgvaWRlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3J0Yy5oPgogI2luY2x1ZGUgPGFzbS9zaDAzL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3NoMDMvc2gwMy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlICIuLi8uLi9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmgiCiAKLWV4dGVybiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKLQotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJJbnRlcmZhY2UgQ1RQL1BDSS1TSDAzKSI7Ci19Ci0KLXZvaWQgaW5pdF9zaDAzX0lSUSh2b2lkKQorc3RhdGljIHZvaWQgX19pbml0IGluaXRfc2gwM19JUlEodm9pZCkKIHsKIAljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOwogCkBAIC0zNCwzOCArMjUsMzQgQEAKIAogZXh0ZXJuIHZvaWQgKmNmX2lvX2Jhc2U7CiAKLXVuc2lnbmVkIGxvbmcgc2gwM19pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3N0YXRpYyB2b2lkIF9faW9tZW0gKnNoMDNfaW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQogewogCWlmIChQWFNFRyhwb3J0KSkKLQkJcmV0dXJuIHBvcnQ7CisJCXJldHVybiAodm9pZCBfX2lvbWVtICopcG9ydDsKIAkvKiBDb21wYWN0Rmxhc2ggKElERSkgKi8KLQlpZiAoKChwb3J0ID49IDB4MWYwKSAmJiAocG9ydCA8PSAweDFmNykpIHx8IChwb3J0ID09IDB4M2Y2KSkgewotCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpY2ZfaW9fYmFzZSArIHBvcnQ7Ci0JfQotICAgICAgICByZXR1cm4gcG9ydCArIFNINzc1MV9QQ0lfSU9fQkFTRTsKKwlpZiAoKChwb3J0ID49IDB4MWYwKSAmJiAocG9ydCA8PSAweDFmNykpIHx8IChwb3J0ID09IDB4M2Y2KSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoKHVuc2lnbmVkIGxvbmcpY2ZfaW9fYmFzZSArIHBvcnQpOworCisgICAgICAgIHJldHVybiAodm9pZCBfX2lvbWVtICopKHBvcnQgKyBQQ0lfSU9fQkFTRSk7CiB9CiAKLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLworLyogYXJjaC9zaC9ib2FyZHMvc2gwMy9ydGMuYyAqLwordm9pZCBzaDAzX3RpbWVfaW5pdCh2b2lkKTsKKworc3RhdGljIHZvaWQgX19pbml0IHNoMDNfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlib2FyZF90aW1lX2luaXQgPSBzaDAzX3RpbWVfaW5pdDsKK30KIAogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NoMDMgX19pbml0bXYgPSB7CisJLm12X25hbWUJCT0gIkludGVyZmFjZSAoQ1RQL1BDSS1TSDAzKSIsCisJLm12X3NldHVwCQk9IHNoMDNfc2V0dXAsCiAJLm12X25yX2lycXMJCT0gNDgsCi0JLm12X2lzYV9wb3J0MmFkZHIJPSBzaDAzX2lzYV9wb3J0MmFkZHIsCisJLm12X2lvcG9ydF9tYXAJCT0gc2gwM19pb3BvcnRfbWFwLAogCS5tdl9pbml0X2lycQkJPSBpbml0X3NoMDNfSVJRLAogCiAjaWZkZWYgQ09ORklHX0hFQVJUQkVBVAogCS5tdl9oZWFydGJlYXQJCT0gaGVhcnRiZWF0X3NoMDMsCiAjZW5kaWYKIH07Ci0KIEFMSUFTX01WKHNoMDMpCi0KLS8qIGFyY2gvc2gvYm9hcmRzL3NoMDMvcnRjLmMgKi8KLXZvaWQgc2gwM190aW1lX2luaXQodm9pZCk7Ci0KLWludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQlib2FyZF90aW1lX2luaXQgPSBzaDAzX3RpbWVfaW5pdDsKLQlyZXR1cm4gMDsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9NYWtlZmlsZSBiL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9NYWtlZmlsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDVkMzkwYy4uMDAwMDAwMAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zaDIwMDAvTWFrZWZpbGUKKysrIC9kZXYvbnVsbApAQCAtMSw2ICswLDAgQEAKLSMKLSMgTWFrZWZpbGUgZm9yIHRoZSBTSDIwMDAgc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAotIwotCi1vYmoteQkgOj0gc2V0dXAubwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaDIwMDAvc2V0dXAuYyBiL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZmU2YTExLi4wMDAwMDAwCi0tLSBhL2FyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jCisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2FyY2gvc2gva2VybmVsL3NldHVwX3NoMjAwMC5jCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAxICBTVUdJT0tBIFRvY2hpbm9idQotICoKLSAqIFNILTIwMDAgU3VwcG9ydC4KLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gvc2gyMDAwLmg+Ci0KLSNkZWZpbmUgQ0ZfQ0lTX0JBU0UJMHhiNDIwMDAwMAotCi0jZGVmaW5lIFBPUlRfUEVDUgkweGE0MDAwMTA4Ci0jZGVmaW5lIFBPUlRfUEhDUgkweGE0MDAwMTBFCi0jZGVmaW5lCVBPUlRfSUNSMQkweGE0MDAwMDEwCi0jZGVmaW5lCVBPUlRfSVJSMAkweGE0MDAwMDA0Ci0KLSNkZWZpbmUgSURFX09GRlNFVAkweGI2MjAwMDAwCi0jZGVmaW5lIE5JQ19PRkZTRVQJMHhiNjAwMDAwMAotI2RlZmluZSBFWFRCVVNfT0ZGU0VUCTB4YmEwMDAwMDAKLQotCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gInNoMjAwMCI7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHNoMjAwMF9pc2FfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQotewotCWlmKChvZmZzZXQgJiB+NykgPT0gMHgxZjAgfHwgb2Zmc2V0ID09IDB4M2Y2KQotCQlyZXR1cm4gSURFX09GRlNFVCArIG9mZnNldDsKLQllbHNlIGlmKChvZmZzZXQgJiB+MHgxZikgPT0gMHgzMDApCi0JCXJldHVybiBOSUNfT0ZGU0VUICsgb2Zmc2V0OwotCXJldHVybiBFWFRCVVNfT0ZGU0VUICsgb2Zmc2V0OwotfQotCi0vKgotICogVGhlIE1hY2hpbmUgVmVjdG9yCi0gKi8KLXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBtdl9zaDIwMDAgX19pbml0bXYgPSB7Ci0gICAgICAgIC5tdl9ucl9pcnFzCQk9IDgwLAotICAgICAgICAubXZfaXNhX3BvcnQyYWRkcgk9IHNoMjAwMF9pc2FfcG9ydDJhZGRyLAotfTsKLUFMSUFTX01WKHNoMjAwMCkKLQotLyoKLSAqIEluaXRpYWxpemUgdGhlIGJvYXJkCi0gKi8KLWludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQkvKiBYWFg6IFJUQyBzZXR0aW5nIGNvbWVzIGhlcmUgKi8KLQotCS8qIFRoZXNlIHNob3VsZCBiZSBkb25lIGJ5IEJJT1MvSVBMIC4uLiAqLwotCS8qIEVuYWJsZSBuQ0UyQSwgbkNFMkIgb3V0cHV0ICovCi0JY3RybF9vdXR3KGN0cmxfaW53KFBPUlRfUEVDUikgJiB+MHhmMDAsIFBPUlRfUEVDUik7Ci0JLyogRW5hYmxlIHRoZSBDb21wYWN0IEZsYXNoIGNhcmQsIGFuZCBzZXQgdGhlIGxldmVsIGludGVycnVwdCAqLwotCWN0cmxfb3V0dygweDAwNDIsIENGX0NJU19CQVNFKzB4MDIwMCk7Ci0JLyogRW5hYmxlIGludGVycnVwdCAqLwotCWN0cmxfb3V0dyhjdHJsX2ludyhQT1JUX1BIQ1IpICYgfjB4MDNmMywgUE9SVF9QSENSKTsKLQljdHJsX291dHcoMSwgUE9SVF9JQ1IxKTsKLQljdHJsX291dHcoY3RybF9pbncoUE9SVF9JUlIwKSAmIH4weGZmM2YsIFBPUlRfSVJSMCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiU0gtMjAwMCBTZXR1cC4uLmRvbmVcbiIpOwotCXJldHVybiAwOwotfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc2htaW4vTWFrZWZpbGUgYi9hcmNoL3NoL2JvYXJkcy9zaG1pbi9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTkwY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2htaW4vTWFrZWZpbGUKQEAgLTAsMCArMSw1IEBACisjCisjIE1ha2VmaWxlIGZvciB0aGUgU0hNSU4gYm9hcmQuCisjCisKK29iai15CSA6PSBzZXR1cC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zaG1pbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZjBjMTk3Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYwpAQCAtMCwwICsxLDQxIEBACisvKgorICogYXJjaC9zaC9ib2FyZHMvc2htaW4vc2V0dXAuYworICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUYWthc2hpIFlPU0hJSQorICoKKyAqIFNITUlOIFN1cHBvcnQuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KKyNpbmNsdWRlIDxhc20vc2htaW4vc2htaW4uaD4KKyNpbmNsdWRlIDxhc20vY2xvY2suaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgUEZDX1BIQ1IJMHhhNDAwMDEwZQorCitzdGF0aWMgdm9pZCBfX2luaXQgaW5pdF9zaG1pbl9pcnEodm9pZCkKK3sKKwljdHJsX291dHcoMHgyYTAwLCBQRkNfUEhDUik7CS8vIElSUTAtMz1JUlEKKwljdHJsX291dHcoMHgwYWFhLCBJTlRDX0lDUjEpOwkvLyBJUlEwLTM9SVJRLW1vZGUsTG93LWFjdGl2ZS4KK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqc2htaW5faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQoreworCXN0YXRpYyBpbnQgZHVtbXk7CisKKwlpZiAoKHBvcnQgJiB+MHgxZikgPT0gU0hNSU5fTkVfQkFTRSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKikoU0hNSU5fSU9fQkFTRSArIHBvcnQpOworCisJZHVtbXkgPSAwOworCisJcmV0dXJuICZkdW1teTsKKworfQorCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2htaW4gX19pbml0bXYgPSB7CisJLm12X25hbWUJPSAiU0hNSU4iLAorCS5tdl9pbml0X2lycQk9IGluaXRfc2htaW5faXJxLAorCS5tdl9pb3BvcnRfbWFwCT0gc2htaW5faW9wb3J0X21hcCwKK307CitBTElBU19NVihzaG1pbikKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL2lvLmMgYi9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9pby5jCmluZGV4IGUyZWI3OGYuLjBmNDgyNDIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL2lvLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvaW8uYwpAQCAtMSw2ICsxLDQgQEAKLS8qIAotICogbGludXgvYXJjaC9zaC9rZXJuZWwvaW9fNzc1MXNlLmMKLSAqCisvKgogICogQ29weXJpZ2h0IChDKSAyMDAyICBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgogICogQ29weXJpZ2h0IChDKSAyMDAxICBJYW4gZGEgU2lsdmEsIEplcmVteSBTaWVnZWwKICAqIEJhc2VkIGxhcmdlbHkgb24gaW9fc2UuYy4KQEAgLTExLDY3ICs5LDIyIEBACiAgKiBwbGFjZWhvbGRlciBjb2RlIGZyb20gaW9fc2UuYyBsZWZ0IGluIHdpdGggdGhlCiAgKiBleHBlY3RhdGlvbiBvZiBsYXRlciBTdXBlcklPIGFuZCBQQ01DSUEgYWNjZXNzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KIAotI2luY2x1ZGUgPGFzbS9wY2kuaD4KLSNpbmNsdWRlICIuLi8uLi9kcml2ZXJzL3BjaS9wY2ktc2g3NzUxLmgiCi0KICNpZmRlZiBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAKIHVuc2lnbmVkIHNob3J0IHNlY3VyZWVkZ2U1NDEwX2lvcG9ydDsKICNlbmRpZgogCi0vKgotICogVGhlIFNuYXBHZWFyIHVzZXMgdGhlIGJ1aWx0LWluIFBDSSBjb250cm9sbGVyIChQQ0lDKQotICogb2YgdGhlIDc3NTEgcHJvY2Vzc29yCi0gKi8gCi0KLSNkZWZpbmUgUENJSU9CUgkJKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lJT0JSKQotI2RlZmluZSBQQ0lNQlIgICAgICAgICAgKHZvbGF0aWxlIGxvbmcgKilQQ0lfUkVHKFNINzc1MV9QQ0lNQlIpCi0jZGVmaW5lIFBDSV9JT19BUkVBCVNINzc1MV9QQ0lfSU9fQkFTRQotI2RlZmluZSBQQ0lfTUVNX0FSRUEJU0g3NzUxX1BDSV9DT05GSUdfQkFTRQotCi0KLSNkZWZpbmUgUENJX0lPTUFQKGFkcikJKFBDSV9JT19BUkVBICsgKGFkciAmIH5TSDc3NTFfUENJSU9CUl9NQVNLKSkKLQotCi0jZGVmaW5lIG1heWJlYmFkaW8obmFtZSxwb3J0KSBcCi0gIHByaW50aygiYmFkIFBDLWxpa2UgaW8gJXMgZm9yIHBvcnQgMHglbHggYXQgMHglMDh4XG4iLCBcCi0JICNuYW1lLCAocG9ydCksIChfX3UzMikgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWxheSh2b2lkKQotewotCWN0cmxfaW53KDB4YTAwMDAwMDApOwotfQotCi0KIHN0YXRpYyBpbmxpbmUgdm9sYXRpbGUgX191MTYgKnBvcnQyYWRyKHVuc2lnbmVkIGludCBwb3J0KQogewotI2lmIDAKLQlpZiAocG9ydCA+PSAweDIwMDApCi0JCXJldHVybiAodm9sYXRpbGUgX191MTYgKikgKFBBX01SU0hQQyArIChwb3J0IC0gMHgyMDAwKSk7Ci0jZW5kaWYKLQltYXliZWJhZGlvKG5hbWUsKHVuc2lnbmVkIGxvbmcpcG9ydCk7CisJbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKIAlyZXR1cm4gKHZvbGF0aWxlIF9fdTE2Kilwb3J0OwogfQogCi0KLS8qIEluIGNhc2Ugc29tZW9uZSBjb25maWd1cmVzIHRoZSBrZXJuZWwgdy9vIFBDSSBzdXBwb3J0OiBpbiB0aGF0ICovCi0vKiBzY2VuYXJpbywgZG9uJ3QgZXZlciBib3RoZXIgdG8gY2hlY2sgZm9yIFBDSS13aW5kb3cgYWRkcmVzc2VzICovCi0KLS8qIE5PVEU6IFdJTkRPVyBDSEVDSyBNQVkgQkUgQSBCSVQgT0ZGLCBISUdIIFBDSUJJT1NfTUlOX0lPIFdSQVBTPyAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BDSSkKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpIFwKLSAgKChwb3J0ID49IFBDSUJJT1NfTUlOX0lPKSAmJiAocG9ydCA8IChQQ0lCSU9TX01JTl9JTyArIFNINzc1MV9QQ0lfSU9fU0laRSkpKQotI2Vsc2UKLSNkZWZpbmUgQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpICgwKQotI2VuZGlmCi0KIC8qCiAgKiBHZW5lcmFsIG91dGxpbmU6IHJlbWFwIHJlYWxseSBsb3cgc3R1ZmYgW2V2ZW50dWFsbHldIHRvIFN1cGVySU8sCiAgKiBzdHVmZiBpbiBQQ0kgSU8gc3BhY2UgKGF0IG9yIGFib3ZlIHdpbmRvdyBhdCBwY2kuaDpQQ0lCSU9TX01JTl9JTykKQEAgLTc5LDE0OCArMzIsMTA2IEBACiAgKiBzaG91bGQgYmUgd2F5IGJleW9uZCB0aGUgd2luZG93LCBhbmQgaXMgdXNlZCAgdy9vIHRyYW5zbGF0aW9uIGZvcgogICogY29tcGF0aWJpbGl0eS4KICAqLwotCiB1bnNpZ25lZCBjaGFyIHNuYXBnZWFyX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKFBYU0VHKHBvcnQpKQogCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJcmV0dXJuICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQlyZXR1cm4gKCpwb3J0MmFkcihwb3J0KSkmMHhmZjsgCisJCXJldHVybiAoKnBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7CiB9CiAKLQogdW5zaWduZWQgY2hhciBzbmFwZ2Vhcl9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciB2OwogCiAJaWYgKFBYU0VHKHBvcnQpKQogCQl2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0JCXYgPSAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilQQ0lfSU9NQVAocG9ydCk7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJdiA9ICoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZQotCQl2ID0gKCpwb3J0MmFkcihwb3J0KSkmMHhmZjsgCi0JZGVsYXkoKTsKKwkJdiA9ICgqcG9ydDJhZHIocG9ydCkpJjB4ZmY7CisJY3RybF9kZWxheSgpOwogCXJldHVybiB2OwogfQogCi0KIHVuc2lnbmVkIHNob3J0IHNuYXBnZWFyX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKFBYU0VHKHBvcnQpKQogCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBvcnQ7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKXBjaV9pb2FkZHIocG9ydCk7CiAJZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCiAJCXJldHVybiAqcG9ydDJhZHIocG9ydCk7CiAJZWxzZQotCQltYXliZWJhZGlvKGludywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiAJcmV0dXJuIDA7CiB9CiAKLQogdW5zaWduZWQgaW50IHNuYXBnZWFyX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKFBYU0VHKHBvcnQpKQogCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcG9ydDsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0JCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKVBDSV9JT01BUChwb3J0KTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilwY2lfaW9hZGRyKHBvcnQpOwogCWVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQogCQlyZXR1cm4gKnBvcnQyYWRyKHBvcnQpOwogCWVsc2UKLQkJbWF5YmViYWRpbyhpbmwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogCXJldHVybiAwOwogfQogCi0KIHZvaWQgc25hcGdlYXJfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAKIAlpZiAoUFhTRUcocG9ydCkpCiAJCSoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXBvcnQgPSB2YWx1ZTsKLQllbHNlIGlmIChDSEVDS19TSDc3NTFfUENJSU8ocG9ydCkpCi0JCSooKHVuc2lnbmVkIGNoYXIqKVBDSV9JT01BUChwb3J0KSkgPSB2YWx1ZTsKKwllbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorCQkqKCh1bnNpZ25lZCBjaGFyKilwY2lfaW9hZGRyKHBvcnQpKSA9IHZhbHVlOwogCWVsc2UKIAkJKihwb3J0MmFkcihwb3J0KSkgPSB2YWx1ZTsKIH0KIAotCiB2b2lkIHNuYXBnZWFyX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKFBYU0VHKHBvcnQpKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwb3J0ID0gdmFsdWU7Ci0JZWxzZSBpZiAoQ0hFQ0tfU0g3NzUxX1BDSUlPKHBvcnQpKQotCQkqKCh1bnNpZ25lZCBjaGFyKilQQ0lfSU9NQVAocG9ydCkpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJKigodW5zaWduZWQgY2hhciopcGNpX2lvYWRkcihwb3J0KSkgPSB2YWx1ZTsKIAllbHNlCiAJCSoocG9ydDJhZHIocG9ydCkpID0gdmFsdWU7Ci0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiB9CiAKLQogdm9pZCBzbmFwZ2Vhcl9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJaWYgKFBYU0VHKHBvcnQpKQogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLQkJKigodW5zaWduZWQgc2hvcnQgKilQQ0lfSU9NQVAocG9ydCkpID0gdmFsdWU7CisJZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKwkJKigodW5zaWduZWQgc2hvcnQgKilwY2lfaW9hZGRyKHBvcnQpKSA9IHZhbHVlOwogCWVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQogCQkqcG9ydDJhZHIocG9ydCkgPSB2YWx1ZTsKIAllbHNlCi0JCW1heWJlYmFkaW8ob3V0dywgcG9ydCk7CisJCW1heWJlYmFkaW8ocG9ydCk7CiB9CiAKLQogdm9pZCBzbmFwZ2Vhcl9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KQogewogCWlmIChQWFNFRyhwb3J0KSkKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcG9ydCA9IHZhbHVlOwotCWVsc2UgaWYgKENIRUNLX1NINzc1MV9QQ0lJTyhwb3J0KSkKLQkJKigodW5zaWduZWQgbG9uZyopUENJX0lPTUFQKHBvcnQpKSA9IHZhbHVlOworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCSooKHVuc2lnbmVkIGxvbmcqKXBjaV9pb2FkZHIocG9ydCkpID0gdmFsdWU7CiAJZWxzZQotCQltYXliZWJhZGlvKG91dGwsIHBvcnQpOworCQltYXliZWJhZGlvKHBvcnQpOwogfQogCiB2b2lkIHNuYXBnZWFyX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewotCW1heWJlYmFkaW8oaW5zbCwgcG9ydCk7CisJbWF5YmViYWRpbyhwb3J0KTsKIH0KIAogdm9pZCBzbmFwZ2Vhcl9vdXRzbCh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpCiB7Ci0JbWF5YmViYWRpbyhvdXRzdywgcG9ydCk7Ci19Ci0KLS8qIE1hcCBJU0EgYnVzIGFkZHJlc3MgdG8gdGhlIHJlYWwgYWRkcmVzcy4gT25seSBmb3IgUENNQ0lBLiAgKi8KLQotCi0vKiBJU0EgcGFnZSBkZXNjcmlwdG9yLiAgKi8KLXN0YXRpYyBfX3UzMiBzaF9pc2FfbWVtbWFwWzI1Nl07Ci0KLQotI2lmIDAKLXN0YXRpYyBpbnQgc2hfaXNhX21tYXAoX191MzIgc3RhcnQsIF9fdTMyIGxlbmd0aCwgX191MzIgb2Zmc2V0KQotewotCWludCBpZHg7Ci0KLQlpZiAoc3RhcnQgPj0gMHgxMDAwMDAgfHwgKHN0YXJ0ICYgMHhmZmYpIHx8IChsZW5ndGggIT0gMHgxMDAwKSkKLQkJcmV0dXJuIC0xOwotCi0JaWR4ID0gc3RhcnQgPj4gMTI7Ci0Jc2hfaXNhX21lbW1hcFtpZHhdID0gMHhiODAwMDAwMCArIChvZmZzZXQgJn4gMHhmZmYpOwotI2lmIDAKLQlwcmludGsoInNoX2lzYV9tbWFwOiBzdGFydCAleCBsZW4gJXggb2Zmc2V0ICV4IChpZHggJXggcGFkZHIgJXgpXG4iLAotCSAgICAgICBzdGFydCwgbGVuZ3RoLCBvZmZzZXQsIGlkeCwgc2hfaXNhX21lbW1hcFtpZHhdKTsKLSNlbmRpZgotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXVuc2lnbmVkIGxvbmcgc25hcGdlYXJfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQlpbnQgaWR4OwotCi0JaWR4ID0gKG9mZnNldCA+PiAxMikgJiAweGZmOwotCW9mZnNldCAmPSAweGZmZjsKLQlyZXR1cm4gc2hfaXNhX21lbW1hcFtpZHhdICsgb2Zmc2V0OworCW1heWJlYmFkaW8ocG9ydCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9ydGMuYyBiL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3J0Yy5jCmluZGV4IGI3MWUwMDkuLjE2NTlmZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3J0Yy5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3J0Yy5jCkBAIC0xNywxNCArMTcsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9ydGMuaD4KICNpbmNsdWRlIDxsaW51eC9tYzE0NjgxOHJ0Yy5oPgotCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotI2luY2x1ZGUgPGFzbS9tYzE0NjgxOHJ0Yy5oPgogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotc3RhdGljIGludCB1c2VfZHMxMzAyID0gMDsKK3N0YXRpYyBpbnQgdXNlX2RzMTMwMjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgpAQCAtODIsMTAgKzc3LDYgQEAKIAl1bnNpZ25lZCBpbnQJdmFsOwogCXVuc2lnbmVkIGxvbmcJZmxhZ3M7CiAKLSNpZiAwCi0JcHJpbnRrKCJTbmFwR2VhciBSVEM6IGRzMTMwMl9yZWFkYnl0ZShhZGRyPSV4KVxuIiwgYWRkcik7Ci0jZW5kaWYKLQogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzZXRfZGlycChnZXRfZGlycCgpIHwgUlRDX1JFU0VUIHwgUlRDX0lPREFUQSB8IFJUQ19TQ0xLKTsKIAlzZXRfZHAoZ2V0X2RwKCkgJiB+KFJUQ19SRVNFVCB8IFJUQ19JT0RBVEEgfCBSVENfU0NMSykpOwpAQCAtMTA0LDEwICs5NSw2IEBACiB7CiAJdW5zaWduZWQgbG9uZwlmbGFnczsKIAotI2lmIDAKLQlwcmludGsoIlNuYXBHZWFyIFJUQzogZHMxMzAyX3dyaXRlYnl0ZShhZGRyPSV4KVxuIiwgYWRkcik7Ci0jZW5kaWYKLQogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlzZXRfZGlycChnZXRfZGlycCgpIHwgUlRDX1JFU0VUIHwgUlRDX0lPREFUQSB8IFJUQ19TQ0xLKTsKIAlzZXRfZHAoZ2V0X2RwKCkgJiB+KFJUQ19SRVNFVCB8IFJUQ19JT0RBVEEgfCBSVENfU0NMSykpOwpAQCAtMTY4LDExICsxNTUsOCBAQAogCQl9CiAKIAlpZiAodXNlX2RzMTMwMikgewotCQlydGNfZ2V0X3RpbWUgPSBzbmFwZ2Vhcl9ydGNfZ2V0dGltZW9mZGF5OwotCQlydGNfc2V0X3RpbWUgPSBzbmFwZ2Vhcl9ydGNfc2V0dGltZW9mZGF5OwotCX0gZWxzZSB7Ci0JCXJ0Y19nZXRfdGltZSA9IHNoX3J0Y19nZXR0aW1lb2ZkYXk7Ci0JCXJ0Y19zZXRfdGltZSA9IHNoX3J0Y19zZXR0aW1lb2ZkYXk7CisJCXJ0Y19zaF9nZXRfdGltZSA9IHNuYXBnZWFyX3J0Y19nZXR0aW1lb2ZkYXk7CisJCXJ0Y19zaF9zZXRfdGltZSA9IHNuYXBnZWFyX3J0Y19zZXR0aW1lb2ZkYXk7CiAJfQogCQkKIAlwcmludGsoIlNuYXBHZWFyIFJUQzogdXNpbmcgJXMgcnRjLlxuIiwgdXNlX2RzMTMwMiA/ICJkczEzMDIiIDogImludGVybmFsIik7CkBAIC0xODcsMTAgKzE3MSw4IEBACiB7CiAJdW5zaWduZWQgaW50IHNlYywgbWluLCBociwgZGF5LCBtb24sIHlyOwogCi0JaWYgKCF1c2VfZHMxMzAyKSB7Ci0JCXNoX3J0Y19nZXR0aW1lb2ZkYXkodHMpOworCWlmICghdXNlX2RzMTMwMikKIAkJcmV0dXJuOwotCX0KIAogIAlzZWMgPSBiY2QyaW50KGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpKTsKICAJbWluID0gYmNkMmludChkczEzMDJfcmVhZGJ5dGUoUlRDX0FERFJfTUlOKSk7CkBAIC0yMzEsNyArMjEzLDcgQEAKIAl1bnNpZ25lZCBsb25nIG5vd3RpbWU7CiAKIAlpZiAoIXVzZV9kczEzMDIpCi0JCXJldHVybiBzaF9ydGNfc2V0dGltZW9mZGF5KHNlY3MpOworCQlyZXR1cm4gMDsKIAogLyoKICAqCVRoaXMgaXMgY2FsbGVkIGRpcmVjdCBmcm9tIHRoZSBrZXJuZWwgdGltZXIgaGFuZGxpbmcgY29kZS4KQEAgLTI0MCwxMCArMjIyLDYgQEAKIAogCW5vd3RpbWUgPSBzZWNzOwogCi0jaWYgMQotCXByaW50aygiU25hcEdlYXIgUlRDOiBzbmFwZ2Vhcl9ydGNfc2V0dGltZW9mZGF5KG5vd3RpbWU9JWxkKVxuIiwgbm93dGltZSk7Ci0jZW5kaWYKLQogCS8qIFNUT1AgUlRDICovCiAJZHMxMzAyX3dyaXRlYnl0ZShSVENfQUREUl9TRUMsIGRzMTMwMl9yZWFkYnl0ZShSVENfQUREUl9TRUMpIHwgMHg4MCk7CiAKQEAgLTMyOSw1ICszMDcsMyBAQAogCWRlZmF1bHQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJfQogfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zbmFwZ2Vhci9zZXR1cC5jCmluZGV4IGYxZjdjNzAuLmY1ZTk4YzUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL3NuYXBnZWFyL3NldHVwLmMKKysrIGIvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvc2V0dXAuYwpAQCAtMSw1ICsxLDQgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLyogCisvKgogICogbGludXgvYXJjaC9zaC9ib2FyZHMvc25hcGdlYXIvc2V0dXAuYwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgTWNDdWxsb3VnaCA8ZGF2aWRtQHNuYXBnZWFyLmNvbT4KQEAgLTEyLDggKzExLDYgQEAKICAqICAgICAgICAgICBNb2RpZmllZCBmb3IgNzc1MSBTb2x1dGlvbiBFbmdpbmUgYnkKICAqICAgICAgICAgICBJYW4gZGEgU2lsdmEgYW5kIEplcmVteSBTaWVnZWwsIDIwMDEuCiAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgpAQCAtMjEsMTQgKzE4LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotCiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KLSNpbmNsdWRlIDxhc20vbWFjaC9pby5oPgorI2luY2x1ZGUgPGFzbS9zbmFwZ2Vhci5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcnRjLmg+CiAjaW5jbHVkZSA8YXNtL2NwdS90aW1lci5oPgogCi1leHRlcm4gdm9pZCAoKmJvYXJkX3RpbWVfaW5pdCkodm9pZCk7CiBleHRlcm4gdm9pZCBzZWN1cmVlZGdlNTQxMF9ydGNfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHBjaWJpb3NfaW5pdCh2b2lkKTsKIApAQCAtODUsMTAxICs4MSwyMCBAQAogCW1ha2VfaXByX2lycShJUkwzX0lSUSwgSVJMM19JUFJfQUREUiwgSVJMM19JUFJfUE9TLCBJUkwzX1BSSU9SSVRZKTsKIH0KIAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKgotICoJRmFzdCBwb2xsIGludGVycnVwdCBzaW11bGF0b3IuCisgKiBJbml0aWFsaXplIHRoZSBib2FyZAogICovCi0KLS8qCi0gKiBMZWF2ZSBhbGwgb2YgdGhlIGZhc3QgdGltZXIvZmFzdCBwb2xsIHN0dWZmIGNvbW1lbnRlZCBvdXQgZm9yIG5vdywgc2luY2UKLSAqIGl0J3Mgbm90IGNsZWFyIHdoZXRoZXIgaXQgYWN0dWFsbHkgd29ya3Mgb3Igbm90LiBTaW5jZSBpdCB3YXNuJ3QgYmVpbmcgdXNlZAotICogYXQgYWxsIGluIDIuNCwgd2UnbGwgYXNzdW1lIGl0J3Mgbm90IHNhbmUgZm9yIDIuNiBlaXRoZXIuLiAtLSBQRk0KLSAqLwotI2lmIDAKLSNkZWZpbmUgRkFTVF9QT0xMCTEwMDAKLS8vI2RlZmluZSBGQVNUX1BPTExfSU5UUgotCi0jZGVmaW5lIEZBU1RUSU1FUl9JUlEgICAxNwotI2RlZmluZSBGQVNUVElNRVJfSVBSX0FERFIgIElOVENfSVBSQQotI2RlZmluZSBGQVNUVElNRVJfSVBSX1BPUyAgICAyCi0jZGVmaW5lIEZBU1RUSU1FUl9QUklPUklUWSAgIDMKLQotI2lmZGVmIEZBU1RfUE9MTF9JTlRSCi0jZGVmaW5lIFRNVTFfVENSX0lOSVQJMHgwMDIwCi0jZWxzZQotI2RlZmluZSBUTVUxX1RDUl9JTklUCTAKLSNlbmRpZgotI2RlZmluZSBUTVVfVFNUUl9JTklUCTEKLSNkZWZpbmUgVE1VMV9UQ1JfQ0FMSUIJMHgwMDAwCi0KLQotI2lmZGVmIEZBU1RfUE9MTF9JTlRSCi1zdGF0aWMgdm9pZCBmYXN0X3RpbWVyX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorc3RhdGljIHZvaWQgX19pbml0IHNuYXBnZWFyX3NldHVwKGNoYXIgKipjbWRsaW5lX3ApCiB7Ci0JdW5zaWduZWQgbG9uZyB0aW1lcl9zdGF0dXM7Ci0gICAgdGltZXJfc3RhdHVzID0gY3RybF9pbncoVE1VMV9UQ1IpOwotCXRpbWVyX3N0YXR1cyAmPSB+MHgxMDA7Ci0JY3RybF9vdXR3KHRpbWVyX3N0YXR1cywgVE1VMV9UQ1IpOwotfQotI2VuZGlmCi0KLS8qCi0gKiByZXR1cm4gdGhlIGN1cnJlbnQgdGlja3Mgb24gdGhlIGZhc3QgdGltZXIKLSAqLwotCi11bnNpZ25lZCBsb25nIGZhc3RfdGltZXJfY291bnQodm9pZCkKLXsKLQlyZXR1cm4oY3RybF9pbmwoVE1VMV9UQ05UKSk7Ci19Ci0KLS8qCi0gKiBzZXR1cCBhIGZhc3QgdGltZXIgZm9yIHByb2ZpbGluZyBldGMgZXRjCi0gKi8KLQotc3RhdGljIHZvaWQgc2V0dXBfZmFzdF90aW1lcigpCi17Ci0JdW5zaWduZWQgbG9uZyBpbnRlcnZhbDsKLQotI2lmZGVmIEZBU1RfUE9MTF9JTlRSCi0JaW50ZXJ2YWwgPSAoY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2svNCArIEZBU1RfUE9MTC8yKSAvIEZBU1RfUE9MTDsKLQotCW1ha2VfaXByX2lycShGQVNUVElNRVJfSVJRLCBGQVNUVElNRVJfSVBSX0FERFIsIEZBU1RUSU1FUl9JUFJfUE9TLAotCQkJRkFTVFRJTUVSX1BSSU9SSVRZKTsKLQotCXByaW50aygiU25hcEdlYXI6ICVkSHogZmFzdCB0aW1lciBvbiBJUlEgJWRcbiIsRkFTVF9QT0xMLEZBU1RUSU1FUl9JUlEpOwotCi0JaWYgKHJlcXVlc3RfaXJxKEZBU1RUSU1FUl9JUlEsIGZhc3RfdGltZXJfaXJxLCAwLCAiU25hcEdlYXIgZmFzdCB0aW1lciIsCi0JCQlOVUxMKSAhPSAwKQotCQlwcmludGsoIiVzKCVkKTogcmVxdWVzdF9pcnEoKSBmYWlsZWQ/XG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOwotI2Vsc2UKLQlwcmludGsoIlNuYXBHZWFyOiBmYXN0IHRpbWVyIHJ1bm5pbmdcbiIsRkFTVF9QT0xMLEZBU1RUSU1FUl9JUlEpOwotCWludGVydmFsID0gMHhmZmZmZmZmZjsKLSNlbmRpZgotCi0JY3RybF9vdXRiKGN0cmxfaW5iKFRNVV9UU1RSKSAmIH4weDIsIFRNVV9UU1RSKTsgLyogZGlzYWJsZSB0aW1lciAxICovCi0JY3RybF9vdXR3KFRNVTFfVENSX0lOSVQsIFRNVTFfVENSKTsKLQljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTFfVENPUik7Ci0JY3RybF9vdXRsKGludGVydmFsLCBUTVUxX1RDTlQpOwotCWN0cmxfb3V0YihjdHJsX2luYihUTVVfVFNUUikgfCAweDIsIFRNVV9UU1RSKTsgLyogZW5hYmxlIHRpbWVyIDEgKi8KLQotCXByaW50aygiVGltZXIgY291bnQgMSA9IDB4JXhcbiIsIGZhc3RfdGltZXJfY291bnQoKSk7Ci0JdWRlbGF5KDEwMDApOwotCXByaW50aygiVGltZXIgY291bnQgMiA9IDB4JXhcbiIsIGZhc3RfdGltZXJfY291bnQoKSk7Ci19Ci0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLWNvbnN0IGNoYXIgKmdldF9zeXN0ZW1fdHlwZSh2b2lkKQotewotCXJldHVybiAiU25hcEdlYXIgU2VjdXJlRWRnZTU0MTAiOworCWJvYXJkX3RpbWVfaW5pdCA9IHNlY3VyZWVkZ2U1NDEwX3J0Y19pbml0OwogfQogCiAvKgogICogVGhlIE1hY2hpbmUgVmVjdG9yCiAgKi8KLQogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NuYXBnZWFyIF9faW5pdG12ID0geworCS5tdl9uYW1lCQk9ICJTbmFwR2VhciBTZWN1cmVFZGdlNTQxMCIsCisJLm12X3NldHVwCQk9IHNuYXBnZWFyX3NldHVwLAogCS5tdl9ucl9pcnFzCQk9IDcyLAogCiAJLm12X2luYgkJCT0gc25hcGdlYXJfaW5iLApAQCAtMTk2LDIwICsxMTEsNiBAQAogCS5tdl9vdXR3X3AJCT0gc25hcGdlYXJfb3V0dywKIAkubXZfb3V0bF9wCQk9IHNuYXBnZWFyX291dGwsCiAKLQkubXZfaXNhX3BvcnQyYWRkcgk9IHNuYXBnZWFyX2lzYV9wb3J0MmFkZHIsCi0KIAkubXZfaW5pdF9pcnEJCT0gaW5pdF9zbmFwZ2Vhcl9JUlEsCiB9OwogQUxJQVNfTVYoc25hcGdlYXIpCi0KLS8qCi0gKiBJbml0aWFsaXplIHRoZSBib2FyZAotICovCi0KLWludCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLQlib2FyZF90aW1lX2luaXQgPSBzZWN1cmVlZGdlNTQxMF9ydGNfaW5pdDsKLQotCXJldHVybiAwOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaXJxLmMgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvaXJxLmMKaW5kZXggMjM2Mzk4Zi4uOGM2NGJhYSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L2lycS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3N1cGVyaC9taWNyb2Rldi9pcnEuYwpAQCAtMTEsMTQgKzExLDEyIEBACiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvaXJxLmg+Ci0KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL21pY3JvZGV2Lmg+CiAKICNkZWZpbmUgTlVNX0VYVEVSTkFMX0lSUVMgMTYJLyogSVJMMCAuLiBJUkwxNSAqLwogCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgewogCXVuc2lnbmVkIGNoYXIgZnBnYUlycTsKIAl1bnNpZ25lZCBjaGFyIG1hcHBlZDsKQEAgLTkzLDUzICs5MSw0MiBAQAogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX21pY3JvZGV2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGludCBmbGFnczsKIAl1bnNpZ25lZCBpbnQgZnBnYUlycTsKIAotCWlmIChpcnEgPj0gTlVNX0VYVEVSTkFMX0lSUVMpIHJldHVybjsKLQlpZiAoIWZwZ2FJcnFUYWJsZVtpcnFdLm1hcHBlZCkgcmV0dXJuOworCWlmIChpcnEgPj0gTlVNX0VYVEVSTkFMX0lSUVMpCisJCXJldHVybjsKKwlpZiAoIWZwZ2FJcnFUYWJsZVtpcnFdLm1hcHBlZCkKKwkJcmV0dXJuOwogCiAJZnBnYUlycSA9IGZwZ2FJcnFUYWJsZVtpcnFdLmZwZ2FJcnE7CiAKLQkJLyogZGlzYWJsZSBpbnRlcnJ1cHRzICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCi0JCS8qIGRpc2FibGUgaW50ZXJ1cHRzIG9uIHRoZSBGUEdBIElOVEMgcmVnaXN0ZXIgKi8KKwkvKiBkaXNhYmxlIGludGVydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCiAJY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVERTQl9SRUcpOwotCi0JCS8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX21pY3JvZGV2X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewogCXVuc2lnbmVkIGxvbmcgcHJpb3JpdHlSZWcsIHByaW9yaXRpZXMsIHByaTsKLQl1bnNpZ25lZCBpbnQgZmxhZ3M7CiAJdW5zaWduZWQgaW50IGZwZ2FJcnE7CiAKLQotCWlmIChpcnEgPj0gTlVNX0VYVEVSTkFMX0lSUVMpIHJldHVybjsKLQlpZiAoIWZwZ2FJcnFUYWJsZVtpcnFdLm1hcHBlZCkgcmV0dXJuOworCWlmICh1bmxpa2VseShpcnEgPj0gTlVNX0VYVEVSTkFMX0lSUVMpKQorCQlyZXR1cm47CisJaWYgKHVubGlrZWx5KCFmcGdhSXJxVGFibGVbaXJxXS5tYXBwZWQpKQorCQlyZXR1cm47CiAKIAlwcmkgPSAxNSAtIGlycTsKIAogCWZwZ2FJcnEgPSBmcGdhSXJxVGFibGVbaXJxXS5mcGdhSXJxOwogCXByaW9yaXR5UmVnID0gTUlDUk9ERVZfRlBHQV9JTlRQUklfUkVHKGZwZ2FJcnEpOwogCi0JCS8qIGRpc2FibGUgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQotCQkvKiBzZXQgcHJpb3JpdHkgZm9yIHRoZSBpbnRlcnJ1cHQgKi8KKwkvKiBzZXQgcHJpb3JpdHkgZm9yIHRoZSBpbnRlcnJ1cHQgKi8KIAlwcmlvcml0aWVzID0gY3RybF9pbmwocHJpb3JpdHlSZWcpOwogCXByaW9yaXRpZXMgJj0gfk1JQ1JPREVWX0ZQR0FfSU5UUFJJX01BU0soZnBnYUlycSk7CiAJcHJpb3JpdGllcyB8PSBNSUNST0RFVl9GUEdBX0lOVFBSSV9MRVZFTChmcGdhSXJxLCBwcmkpOwogCWN0cmxfb3V0bChwcmlvcml0aWVzLCBwcmlvcml0eVJlZyk7CiAKLQkJLyogZW5hYmxlIGludGVydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCisJLyogZW5hYmxlIGludGVydXB0cyBvbiB0aGUgRlBHQSBJTlRDIHJlZ2lzdGVyICovCiAJY3RybF9vdXRsKE1JQ1JPREVWX0ZQR0FfSU5UQ19NQVNLKGZwZ2FJcnEpLCBNSUNST0RFVl9GUEdBX0lOVEVOQl9SRUcpOwotCi0JCS8qIHJlc3RvcmUgaW50ZXJydXB0cyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogCS8qIFRoaXMgZnVuY3Rpb25zIHNldHMgdGhlIGRlc2lyZWQgaXJxIGhhbmRsZXIgdG8gYmUgYSBNaWNyb0RldiB0eXBlICovCkBAIC0xNTgsOSArMTQ1LDcgQEAKIHN0YXRpYyB2b2lkIGVuZF9taWNyb2Rldl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlpZiAoIShpcnFfZGVzY1tpcnFdLnN0YXR1cyAmIChJUlFfRElTQUJMRUR8SVJRX0lOUFJPR1JFU1MpKSkKLQl7CiAJCWVuYWJsZV9taWNyb2Rldl9pcnEoaXJxKTsKLQl9CiB9CiAKIGV4dGVybiB2b2lkIF9faW5pdCBpbml0X21pY3JvZGV2X2lycSh2b2lkKQpAQCAtMTcxLDkgKzE1Niw3IEBACiAJY3RybF9vdXRsKH4wdWwsIE1JQ1JPREVWX0ZQR0FfSU5URFNCX1JFRyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VYVEVSTkFMX0lSUVM7IGkrKykKLQl7CiAJCW1ha2VfbWljcm9kZXZfaXJxKGkpOwotCX0KIH0KIAogZXh0ZXJuIHZvaWQgbWljcm9kZXZfcHJpbnRfZnBnYV9pbnRjX3N0YXR1cyh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvc3VwZXJoL21pY3JvZGV2L3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvc2V0dXAuYwppbmRleCA2MWI0MDJhLi4wMzFjODE0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9zdXBlcmgvbWljcm9kZXYvc2V0dXAuYwpAQCAtMTAsNyArMTAsNiBAQAogICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CkBAIC0yMSw0MSArMjAsNiBAQAogCiBleHRlcm4gdm9pZCBtaWNyb2Rldl9oZWFydGJlYXQodm9pZCk7CiAKLS8qCi0gKiBUaGUgTWFjaGluZSBWZWN0b3IKLSAqLwotCi1zdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfc2g0MjAyX21pY3JvZGV2IF9faW5pdG12ID0gewotCS5tdl9ucl9pcnFzCQk9IDcyLAkJLyogUVFRIG5lZWQgdG8gY2hlY2sgdGhpcyAtIHVzZSB0aGUgTUFDUk8gKi8KLQotCS5tdl9pbmIJCQk9IG1pY3JvZGV2X2luYiwKLQkubXZfaW53CQkJPSBtaWNyb2Rldl9pbncsCi0JLm12X2lubAkJCT0gbWljcm9kZXZfaW5sLAotCS5tdl9vdXRiCQk9IG1pY3JvZGV2X291dGIsCi0JLm12X291dHcJCT0gbWljcm9kZXZfb3V0dywKLQkubXZfb3V0bAkJPSBtaWNyb2Rldl9vdXRsLAotCi0JLm12X2luYl9wCQk9IG1pY3JvZGV2X2luYl9wLAotCS5tdl9pbndfcAkJPSBtaWNyb2Rldl9pbndfcCwKLQkubXZfaW5sX3AJCT0gbWljcm9kZXZfaW5sX3AsCi0JLm12X291dGJfcAkJPSBtaWNyb2Rldl9vdXRiX3AsCi0JLm12X291dHdfcAkJPSBtaWNyb2Rldl9vdXR3X3AsCi0JLm12X291dGxfcAkJPSBtaWNyb2Rldl9vdXRsX3AsCi0KLQkubXZfaW5zYgkJPSBtaWNyb2Rldl9pbnNiLAotCS5tdl9pbnN3CQk9IG1pY3JvZGV2X2luc3csCi0JLm12X2luc2wJCT0gbWljcm9kZXZfaW5zbCwKLQkubXZfb3V0c2IJCT0gbWljcm9kZXZfb3V0c2IsCi0JLm12X291dHN3CQk9IG1pY3JvZGV2X291dHN3LAotCS5tdl9vdXRzbAkJPSBtaWNyb2Rldl9vdXRzbCwKLQotCS5tdl9pbml0X2lycQkJPSBpbml0X21pY3JvZGV2X2lycSwKLQotI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKLQkubXZfaGVhcnRiZWF0CQk9IG1pY3JvZGV2X2hlYXJ0YmVhdCwKLSNlbmRpZgotfTsKLUFMSUFTX01WKHNoNDIwMl9taWNyb2RldikKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMywxMSArNzcsNiBAQAogCS8qIGFzc3VtZSBhIEtleWJvYXJkIENvbnRyb2xsZXIgaXMgcHJlc2VudCAqLwogaW50IG1pY3JvZGV2X2tiZF9jb250cm9sbGVyX3ByZXNlbnQgPSAxOwogCi1jb25zdCBjaGFyICpnZXRfc3lzdGVtX3R5cGUodm9pZCkKLXsKLQlyZXR1cm4gIlNINC0yMDIgTWljcm9EZXYiOwotfQotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHNtYzkxeF9yZXNvdXJjZXNbXSA9IHsKIAlbMF0gPSB7CiAJCS5zdGFydAkJPSAweDMwMCwKQEAgLTI5MSwyNSArMjUwLDkgQEAKIAlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMobWljcm9kZXZfZGV2aWNlcywgQVJSQVlfU0laRShtaWNyb2Rldl9kZXZpY2VzKSk7CiB9CiAKLV9faW5pdGNhbGwobWljcm9kZXZfZGV2aWNlc19zZXR1cCk7Ci0KLXZvaWQgX19pbml0IHBsYXRmb3JtX3NldHVwKHZvaWQpCi17Ci0JaW50ICogY29uc3QgZnBnYVJldmlzaW9uUmVnaXN0ZXIgPSAoaW50KikoTUlDUk9ERVZfRlBHQV9HUF9CQVNFICsgMHg4dWwpOwotCWNvbnN0IGludCBmcGdhUmV2aXNpb24gPSAqZnBnYVJldmlzaW9uUmVnaXN0ZXI7Ci0JaW50ICogY29uc3QgQ2FjaGVDb250cm9sUmVnaXN0ZXIgPSAoaW50KilDQ1I7Ci0KLQlwcmludGsoIlN1cGVySCAlcyBib2FyZCAoRlBHQSByZXY6IDB4JTB4LCBDQ1I6IDB4JTB4KVxuIiwKLQkJZ2V0X3N5c3RlbV90eXBlKCksIGZwZ2FSZXZpc2lvbiwgKkNhY2hlQ29udHJvbFJlZ2lzdGVyKTsKLX0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotCi0JLyoKLQkgKiBTZXR1cCBmb3IgdGhlIFNNU0MgRkRDMzdDOTN4QVBNCi0JICovCisvKgorICogU2V0dXAgZm9yIHRoZSBTTVNDIEZEQzM3QzkzeEFQTQorICovCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjX3N1cGVyaW9fc2V0dXAodm9pZCkKIHsKIApAQCAtNDEyLDggKzM1NSw1MiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBfX2luaXQgbWljcm9kZXZfc2V0dXAoY2hhciAqKmNtZGxpbmVfcCkKK3sKKwlpbnQgKiBjb25zdCBmcGdhUmV2aXNpb25SZWdpc3RlciA9IChpbnQqKShNSUNST0RFVl9GUEdBX0dQX0JBU0UgKyAweDh1bCk7CisJY29uc3QgaW50IGZwZ2FSZXZpc2lvbiA9ICpmcGdhUmV2aXNpb25SZWdpc3RlcjsKKwlpbnQgKiBjb25zdCBDYWNoZUNvbnRyb2xSZWdpc3RlciA9IChpbnQqKUNDUjsKIAotLyogVGhpcyBpcyBncm90dHksIGJ1dCwgYmVjYXVzZSBrZXJuZWwgaXMgYWx3YXlzIHJlZmVyZW5jZWQgb24gdGhlIGxpbmsgbGluZQotICogYmVmb3JlIGFueSBkZXZpY2VzLCB0aGlzIGlzIHNhZmUuCisJZGV2aWNlX2luaXRjYWxsKG1pY3JvZGV2X2RldmljZXNfc2V0dXApOworCWRldmljZV9pbml0Y2FsbChzbXNjX3N1cGVyaW9fc2V0dXApOworCisJcHJpbnRrKCJTdXBlckggJXMgYm9hcmQgKEZQR0EgcmV2OiAweCUweCwgQ0NSOiAweCUweClcbiIsCisJCWdldF9zeXN0ZW1fdHlwZSgpLCBmcGdhUmV2aXNpb24sICpDYWNoZUNvbnRyb2xSZWdpc3Rlcik7Cit9CisKKy8qCisgKiBUaGUgTWFjaGluZSBWZWN0b3IKICAqLwotX19pbml0Y2FsbChzbXNjX3N1cGVyaW9fc2V0dXApOworc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3NoNDIwMl9taWNyb2RldiBfX2luaXRtdiA9IHsKKwkubXZfbmFtZQkJPSAiU0g0LTIwMiBNaWNyb0RldiIsCisJLm12X3NldHVwCQk9IG1pY3JvZGV2X3NldHVwLAorCS5tdl9ucl9pcnFzCQk9IDcyLAkJLyogUVFRIG5lZWQgdG8gY2hlY2sgdGhpcyAtIHVzZSB0aGUgTUFDUk8gKi8KKworCS5tdl9pbmIJCQk9IG1pY3JvZGV2X2luYiwKKwkubXZfaW53CQkJPSBtaWNyb2Rldl9pbncsCisJLm12X2lubAkJCT0gbWljcm9kZXZfaW5sLAorCS5tdl9vdXRiCQk9IG1pY3JvZGV2X291dGIsCisJLm12X291dHcJCT0gbWljcm9kZXZfb3V0dywKKwkubXZfb3V0bAkJPSBtaWNyb2Rldl9vdXRsLAorCisJLm12X2luYl9wCQk9IG1pY3JvZGV2X2luYl9wLAorCS5tdl9pbndfcAkJPSBtaWNyb2Rldl9pbndfcCwKKwkubXZfaW5sX3AJCT0gbWljcm9kZXZfaW5sX3AsCisJLm12X291dGJfcAkJPSBtaWNyb2Rldl9vdXRiX3AsCisJLm12X291dHdfcAkJPSBtaWNyb2Rldl9vdXR3X3AsCisJLm12X291dGxfcAkJPSBtaWNyb2Rldl9vdXRsX3AsCisKKwkubXZfaW5zYgkJPSBtaWNyb2Rldl9pbnNiLAorCS5tdl9pbnN3CQk9IG1pY3JvZGV2X2luc3csCisJLm12X2luc2wJCT0gbWljcm9kZXZfaW5zbCwKKwkubXZfb3V0c2IJCT0gbWljcm9kZXZfb3V0c2IsCisJLm12X291dHN3CQk9IG1pY3JvZGV2X291dHN3LAorCS5tdl9vdXRzbAkJPSBtaWNyb2Rldl9vdXRzbCwKKworCS5tdl9pbml0X2lycQkJPSBpbml0X21pY3JvZGV2X2lycSwKKworI2lmZGVmIENPTkZJR19IRUFSVEJFQVQKKwkubXZfaGVhcnRiZWF0CQk9IG1pY3JvZGV2X2hlYXJ0YmVhdCwKKyNlbmRpZgorfTsKK0FMSUFTX01WKHNoNDIwMl9taWNyb2RldikKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL3RpdGFuL01ha2VmaWxlIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhkNzUzNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvYm9hcmRzL3RpdGFuL01ha2VmaWxlCkBAIC0wLDAgKzEsNSBAQAorIworIyBNYWtlZmlsZSBmb3IgdGhlIE5pbWJsZSBNaWNyb3N5c3RlbXMgVElUQU4gc3BlY2lmaWMgcGFydHMgb2YgdGhlIGtlcm5lbAorIworCitvYmoteQkgOj0gc2V0dXAubyBpby5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy90aXRhbi9pby5jIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vaW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzMwYzFkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vaW8uYwpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqCUkvTyByb3V0aW5lcyBmb3IgVGl0YW4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS90aXRhbi5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBwb3J0MmFkcih1bnNpZ25lZCBpbnQgcG9ydCkKK3sKKyAgICAgICAgbWF5YmViYWRpbygodW5zaWduZWQgbG9uZylwb3J0KTsKKyAgICAgICAgcmV0dXJuIHBvcnQ7Cit9CisKK3U4IHRpdGFuX2luYih1bnNpZ25lZCBsb25nIHBvcnQpCit7CisgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmIocG9ydCk7CisgICAgICAgIGVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW5iKHBjaV9pb2FkZHIocG9ydCkpOworICAgICAgICByZXR1cm4gY3RybF9pbncocG9ydDJhZHIocG9ydCkpICYgMHhmZjsKK30KKwordTggdGl0YW5faW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KQoreworICAgICAgICB1OCB2OworCisgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKKyAgICAgICAgICAgICAgICB2ID0gY3RybF9pbmIocG9ydCk7CisgICAgICAgIGVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisgICAgICAgICAgICAgICAgdiA9IGN0cmxfaW5iKHBjaV9pb2FkZHIocG9ydCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgdiA9IGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKSAmIDB4ZmY7CisgICAgICAgIGN0cmxfZGVsYXkoKTsKKyAgICAgICAgcmV0dXJuIHY7Cit9CisKK3UxNiB0aXRhbl9pbncodW5zaWduZWQgbG9uZyBwb3J0KQoreworICAgICAgICBpZiAoUFhTRUcocG9ydCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQpOworICAgICAgICBlbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2ludyhwY2lfaW9hZGRyKHBvcnQpKTsKKyAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGN0cmxfaW53KHBvcnQyYWRyKHBvcnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7CisgICAgICAgIHJldHVybiAwOworfQorCit1MzIgdGl0YW5faW5sKHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2lubChwb3J0KTsKKyAgICAgICAgZWxzZSBpZiAoaXNfcGNpX2lvYWRkcihwb3J0KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY3RybF9pbmwocGNpX2lvYWRkcihwb3J0KSk7CisgICAgICAgIGVsc2UgaWYgKHBvcnQgPj0gMHgyMDAwKQorICAgICAgICAgICAgICAgIHJldHVybiBjdHJsX2ludyhwb3J0MmFkcihwb3J0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXliZWJhZGlvKHBvcnQpOworICAgICAgICByZXR1cm4gMDsKK30KKwordm9pZCB0aXRhbl9vdXRiKHU4IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKKyAgICAgICAgICAgICAgICBjdHJsX291dGIodmFsdWUsIHBvcnQpOworICAgICAgICBlbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjdHJsX291dHcodmFsdWUsIHBvcnQyYWRyKHBvcnQpKTsKK30KKwordm9pZCB0aXRhbl9vdXRiX3AodTggdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIGN0cmxfb3V0Yih2YWx1ZSwgcG9ydCk7CisgICAgICAgIGVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisgICAgICAgICAgICAgICAgY3RybF9vdXRiKHZhbHVlLCBwY2lfaW9hZGRyKHBvcnQpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydDJhZHIocG9ydCkpOworICAgICAgICBjdHJsX2RlbGF5KCk7Cit9CisKK3ZvaWQgdGl0YW5fb3V0dyh1MTYgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCkKK3sKKyAgICAgICAgaWYgKFBYU0VHKHBvcnQpKQorICAgICAgICAgICAgICAgIGN0cmxfb3V0dyh2YWx1ZSwgcG9ydCk7CisgICAgICAgIGVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisgICAgICAgICAgICAgICAgY3RybF9vdXR3KHZhbHVlLCBwY2lfaW9hZGRyKHBvcnQpKTsKKyAgICAgICAgZWxzZSBpZiAocG9ydCA+PSAweDIwMDApCisgICAgICAgICAgICAgICAgY3RybF9vdXR3KHZhbHVlLCBwb3J0MmFkcihwb3J0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIHRpdGFuX291dGwodTMyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpCit7CisgICAgICAgIGlmIChQWFNFRyhwb3J0KSkKKyAgICAgICAgICAgICAgICBjdHJsX291dGwodmFsdWUsIHBvcnQpOworICAgICAgICBlbHNlIGlmIChpc19wY2lfaW9hZGRyKHBvcnQpKQorICAgICAgICAgICAgICAgIGN0cmxfb3V0bCh2YWx1ZSwgcGNpX2lvYWRkcihwb3J0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXliZWJhZGlvKHBvcnQpOworfQorCit2b2lkIHRpdGFuX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICpkc3QsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Cit9CisKK3ZvaWQgdGl0YW5fb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpzcmMsIHVuc2lnbmVkIGxvbmcgY291bnQpCit7CisgICAgICAgIG1heWJlYmFkaW8ocG9ydCk7Cit9CisKK3ZvaWQgX19pb21lbSAqdGl0YW5faW9wb3J0X21hcCh1bnNpZ25lZCBsb25nIHBvcnQsIHVuc2lnbmVkIGludCBzaXplKQoreworCWlmIChQWFNFRyhwb3J0KSB8fCBpc19wY2lfbWVtYWRkcihwb3J0KSkKKwkJcmV0dXJuICh2b2lkIF9faW9tZW0gKilwb3J0OworCWVsc2UgaWYgKGlzX3BjaV9pb2FkZHIocG9ydCkpCisJCXJldHVybiAodm9pZCBfX2lvbWVtICopcGNpX2lvYWRkcihwb3J0KTsKKworCXJldHVybiAodm9pZCBfX2lvbWVtICopcG9ydDJhZHIocG9ydCk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy90aXRhbi9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vc2V0dXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmI2NmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9ib2FyZHMvdGl0YW4vc2V0dXAuYwpAQCAtMCwwICsxLDQ4IEBACisvKgorICoJU2V0dXAgZm9yIFRpdGFuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2V4dGVybiB2b2lkIF9faW5pdCBwY2liaW9zX2luaXRfcGxhdGZvcm0odm9pZCk7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X3RpdGFuX2lycSh2b2lkKQoreworCS8qIGVuYWJsZSBpbmRpdmlkdWFsIGludGVycnVwdCBtb2RlIGZvciBleHRlcm5hbHMgKi8KKwljdHJsX291dHcoY3RybF9pbncoSU5UQ19JQ1IpIHwgSU5UQ19JQ1JfSVJMTSwgSU5UQ19JQ1IpOworCisJbWFrZV9pcHJfaXJxKCBUSVRBTl9JUlFfV0FOLCAgIElSTDBfSVBSX0FERFIsIElSTDBfSVBSX1BPUywgSVJMMF9QUklPUklUWSk7IC8qIFBDSVJRMCAqLworCW1ha2VfaXByX2lycSggVElUQU5fSVJRX0xBTiwgICBJUkwxX0lQUl9BRERSLCBJUkwxX0lQUl9QT1MsIElSTDFfUFJJT1JJVFkpOyAvKiBQQ0lSUTEgKi8KKwltYWtlX2lwcl9pcnEoIFRJVEFOX0lSUV9NUENJQSwgSVJMMl9JUFJfQUREUiwgSVJMMl9JUFJfUE9TLCBJUkwyX1BSSU9SSVRZKTsgLyogUENJUlEyICovCisJbWFrZV9pcHJfaXJxKCBUSVRBTl9JUlFfVVNCLCAgIElSTDNfSVBSX0FERFIsIElSTDNfSVBSX1BPUywgSVJMM19QUklPUklUWSk7IC8qIFBDSVJRMyAqLworfQorCitzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgbXZfdGl0YW4gX19pbml0bXYgPSB7CisJLm12X25hbWUgPQkiVGl0YW4iLAorCisJLm12X2luYiA9CXRpdGFuX2luYiwKKwkubXZfaW53ID0JdGl0YW5faW53LAorCS5tdl9pbmwgPQl0aXRhbl9pbmwsCisJLm12X291dGIgPQl0aXRhbl9vdXRiLAorCS5tdl9vdXR3ID0JdGl0YW5fb3V0dywKKwkubXZfb3V0bCA9CXRpdGFuX291dGwsCisKKwkubXZfaW5iX3AgPQl0aXRhbl9pbmJfcCwKKwkubXZfaW53X3AgPQl0aXRhbl9pbncsCisJLm12X2lubF9wID0JdGl0YW5faW5sLAorCS5tdl9vdXRiX3AgPQl0aXRhbl9vdXRiX3AsCisJLm12X291dHdfcCA9CXRpdGFuX291dHcsCisJLm12X291dGxfcCA9CXRpdGFuX291dGwsCisKKwkubXZfaW5zbCA9CXRpdGFuX2luc2wsCisJLm12X291dHNsID0JdGl0YW5fb3V0c2wsCisKKwkubXZfaW9wb3J0X21hcCA9IHRpdGFuX2lvcG9ydF9tYXAsCisKKwkubXZfaW5pdF9pcnEgPQlpbml0X3RpdGFuX2lycSwKKwkubXZfaW5pdF9wY2kgPQlwY2liaW9zX2luaXRfcGxhdGZvcm0sCit9OworQUxJQVNfTVYodGl0YW4pCmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy91bmtub3duL3NldHVwLmMgYi9hcmNoL3NoL2JvYXJkcy91bmtub3duL3NldHVwLmMKaW5kZXggYzVlNGVkMS4uMWM5NDEzNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9ib2FyZHMvdW5rbm93bi9zZXR1cC5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL3Vua25vd24vc2V0dXAuYwpAQCAtMTQsMTkgKzE0LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yIG12X3Vua25vd24gX19pbml0bXYgPSB7Ci0JLm12X25yX2lycXMJCT0gTlJfSVJRUywKKwkubXZfbmFtZQkJPSAiVW5rbm93biIsCiB9OwogQUxJQVNfTVYodW5rbm93bikKLQotY29uc3QgY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpCi17Ci0JcmV0dXJuICJVbmtub3duIjsKLX0KLQotdm9pZCBfX2luaXQgcGxhdGZvcm1fc2V0dXAodm9pZCkKLXsKLX0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib290L2NvbXByZXNzZWQvTWFrZWZpbGUgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQppbmRleCA3NWE2ODc2Li5lNWY0NDM3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQorKysgYi9hcmNoL3NoL2Jvb3QvY29tcHJlc3NlZC9NYWtlZmlsZQpAQCAtMTgsMTMgKzE4LDIwIEBACiAjIEFzc2lnbiBkdW1teSB2YWx1ZXMgaWYgdGhlc2UgMiB2YXJpYWJsZXMgYXJlIG5vdCBkZWZpbmVkLAogIyBpbiBvcmRlciB0byBzdXBwcmVzcyBlcnJvciBtZXNzYWdlLgogIworQ09ORklHX1BBR0VfT0ZGU0VUCT89IDB4ODAwMDAwMDAKIENPTkZJR19NRU1PUllfU1RBUlQgICAgID89IDB4MGMwMDAwMDAKIENPTkZJR19CT09UX0xJTktfT0ZGU0VUID89IDB4MDA4MDAwMDAKLUlNQUdFX09GRlNFVCA6PSAkKHNoZWxsIHByaW50ZiAiMHglOHgiICQkWzB4ODAwMDAwMDArJChDT05GSUdfTUVNT1JZX1NUQVJUKSskKENPTkZJR19CT09UX0xJTktfT0ZGU0VUKV0pCisKK0lNQUdFX09GRlNFVAk6PSAkKHNoZWxsIHByaW50ZiAiMHglMDh4IiAkJFskKENPTkZJR19QQUdFX09GRlNFVCkgICsgXAorCQkJCQkgICAgICAkKENPTkZJR19NRU1PUllfU1RBUlQpICsgXAorCQkJCQkgICAgICAkKENPTkZJR19CT09UX0xJTktfT0ZGU0VUKV0pCisKK0xJQkdDQwk6PSAkKHNoZWxsICQoQ0MpICQoQ0ZMQUdTKSAtcHJpbnQtbGliZ2NjLWZpbGUtbmFtZSkKIAogTERGTEFHU192bWxpbnV4IDo9IC1UdGV4dCAkKElNQUdFX09GRlNFVCkgLWUgc3RhcnR1cCAtVCAkKG9iaikvLi4vLi4va2VybmVsL3ZtbGludXgubGRzCiAKLSQob2JqKS92bWxpbnV4OiAkKE9CSkVDVFMpICQob2JqKS9waWdneS5vIEZPUkNFCisKKyQob2JqKS92bWxpbnV4OiAkKE9CSkVDVFMpICQob2JqKS9waWdneS5vICQoTElCR0NDKSBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGxkKQogCUA6CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL0tjb25maWcgYi9hcmNoL3NoL2NjaGlwcy9LY29uZmlnCmluZGV4IDE1NWQxMzkuLjA1ODJjYTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL0tjb25maWcKKysrIGIvYXJjaC9zaC9jY2hpcHMvS2NvbmZpZwpAQCAtNjUsNiArNjUsMTEgQEAKIAogCSAgRG8gbm90IGNoYW5nZSB0aGlzIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuCiAKK2NvbmZpZyBIRDY0NDYxX0lPQkFTRQorCWhleCAiSEQ2NDQ2MSBzdGFydCBhZGRyZXNzIgorCWRlcGVuZHMgb24gSEQ2NDQ2MQorCWRlZmF1bHQgIjB4YjAwMDAwMDAiCisKIGNvbmZpZyBIRDY0NDYxX0VOQUJMRVIKIAlib29sICJIRDY0NDYxIFBDTUNJQSBlbmFibGVyIgogCWRlcGVuZHMgb24gSEQ2NDQ2MQpAQCAtNzMsNyArNzgsNiBAQAogCSAgdmlhIHRoZSBIRDY0NDYxIGNvbXBhbmlvbiBjaGlwLgogCSAgT3RoZXJ3aXNlLCBzYXkgTi4KIAotCiBjb25maWcgSEQ2NDQ2NV9JT0JBU0UKIAloZXggIkhENjQ0NjUgc3RhcnQgYWRkcmVzcyIKIAlkZXBlbmRzIG9uIEhENjQ0NjUKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9pby5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL2lvLmMKaW5kZXggYWMzMDYyNi4uNzkwOWExYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL2lvLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL2lvLmMKQEAgLTEsMTEgKzEsMTAgQEAKIC8qCi0gKgkkSWQ6IGlvLmMsdiAxLjYgMjAwNC8wMy8xNiAwMDowNzo1MCBsZXRoYWwgRXhwICQKICAqCUNvcHlyaWdodCAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCiAgKglUeXBpY2FsIEkvTyByb3V0aW5lcyBmb3IgSEQ2NDQ2MSBzeXN0ZW0uCiAgKi8KIAogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9oZDY0NDYxL2hkNjQ0NjEuaD4KKyNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZGVmaW5lIE1FTV9CQVNFIChDT05GSUdfSEQ2NDQ2MV9JT0JBU0UgLSBIRDY0NDYxX1NUQkNSKQogCkBAIC01NCwxMSArNTMsNiBAQAogCXJldHVybiAweGEwMDAwMDAwICsgKHBvcnQgJiAweDFmZmZmZmZmKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGRlbGF5KHZvaWQpCi17Ci0JY3RybF9pbncoMHhhMDAwMDAwMCk7Ci19Ci0KIHVuc2lnbmVkIGNoYXIgaGQ2NDQ2MV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KQogewogCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIqKVBPUlQyQUREUihwb3J0KTsKQEAgLTY3LDcgKzYxLDcgQEAKIHVuc2lnbmVkIGNoYXIgaGQ2NDQ2MV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJdW5zaWduZWQgbG9uZyB2ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilQT1JUMkFERFIocG9ydCk7Ci0JZGVsYXkoKTsKKwljdHJsX2RlbGF5KCk7CiAJcmV0dXJuIHY7CiB9CiAKQEAgLTg5LDcgKzgzLDcgQEAKIHZvaWQgaGQ2NDQ2MV9vdXRiX3AodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCiB7CiAJKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyKilQT1JUMkFERFIocG9ydCkgPSBiOwotCWRlbGF5KCk7CisJY3RybF9kZWxheSgpOwogfQogCiB2b2lkIGhkNjQ0NjFfb3V0dyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIHBvcnQpCkBAIC0xNDQsMTMgKzEzOCwxMyBAQAogCXdoaWxlKGNvdW50LS0pICphZGRyPSpidWYrKzsKIH0KIAotdW5zaWduZWQgc2hvcnQgaGQ2NDQ2MV9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpCit1bnNpZ25lZCBzaG9ydCBoZDY0NDYxX3JlYWR3KHZvaWQgX19pb21lbSAqYWRkcikKIHsKLQlyZXR1cm4gKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCopKE1FTV9CQVNFK2FkZHIpOworCXJldHVybiBjdHJsX2ludyhNRU1fQkFTRSsodW5zaWduZWQgbG9uZyBfX2ZvcmNlKWFkZHIpOwogfQogCi12b2lkIGhkNjQ0NjFfd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcikKK3ZvaWQgaGQ2NDQ2MV93cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdm9pZCBfX2lvbWVtICphZGRyKQogewotCSoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQqKShNRU1fQkFTRSthZGRyKSA9IGI7CisJY3RybF9vdXR3KGIsIE1FTV9CQVNFKyh1bnNpZ25lZCBsb25nIF9fZm9yY2UpYWRkcik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2MS9zZXR1cC5jIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKaW5kZXggYWQxMjYwMS4uMzhmMWU4MSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvaGQ2NDQ2eC9oZDY0NDYxL3NldHVwLmMKQEAgLTExLDM2ICsxMSwyOCBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KLQogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KLQotI2luY2x1ZGUgPGFzbS9oZDY0NDYxL2hkNjQ0NjEuaD4KKyNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX2hkNjQ0NjFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBuaW1yOwogCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAxIDw8IChpcnEgLSBIRDY0NDYxX0lSUUJBU0UpOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCW5pbXIgPSBpbncoSEQ2NDQ2MV9OSU1SKTsKIAluaW1yIHw9IG1hc2s7CiAJb3V0dyhuaW1yLCBIRDY0NDYxX05JTVIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2hkNjQ0NjFfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBuaW1yOwogCXVuc2lnbmVkIHNob3J0IG1hc2sgPSAxIDw8IChpcnEgLSBIRDY0NDYxX0lSUUJBU0UpOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCW5pbXIgPSBpbncoSEQ2NDQ2MV9OSU1SKTsKIAluaW1yICY9IH5tYXNrOwogCW91dHcobmltciwgSEQ2NDQ2MV9OSU1SKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19oZDY0NDYxKHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjUvc2V0dXAuYyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9zZXR1cC5jCmluZGV4IGQyYjI4NTEuLjMwNTczZDMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9zZXR1cC5jCisrKyBiL2FyY2gvc2gvY2NoaXBzL2hkNjQ0NngvaGQ2NDQ2NS9zZXR1cC5jCkBAIC0yNSwzMSArMjUsMjUgQEAKIAogc3RhdGljIHZvaWQgZGlzYWJsZV9oZDY0NDY1X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgbmltcjsKIAl1bnNpZ25lZCBzaG9ydCBtYXNrID0gMSA8PCAoaXJxIC0gSEQ2NDQ2NV9JUlFfQkFTRSk7CiAKICAgICAJcHJfZGVidWcoImRpc2FibGVfaGQ2NDQ2NV9pcnEoJWQpOiBtYXNrPSV4XG4iLCBpcnEsIG1hc2spOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAluaW1yID0gaW53KEhENjQ0NjVfUkVHX05JTVIpOwogCW5pbXIgfD0gbWFzazsKIAlvdXR3KG5pbXIsIEhENjQ0NjVfUkVHX05JTVIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBlbmFibGVfaGQ2NDQ2NV9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IG5pbXI7CiAJdW5zaWduZWQgc2hvcnQgbWFzayA9IDEgPDwgKGlycSAtIEhENjQ0NjVfSVJRX0JBU0UpOwogCiAgICAgCXByX2RlYnVnKCJlbmFibGVfaGQ2NDQ2NV9pcnEoJWQpOiBtYXNrPSV4XG4iLCBpcnEsIG1hc2spOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAluaW1yID0gaW53KEhENjQ0NjVfUkVHX05JTVIpOwogCW5pbXIgJj0gfm1hc2s7CiAJb3V0dyhuaW1yLCBIRDY0NDY1X1JFR19OSU1SKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2lycS5jIGIvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L2lycS5jCmluZGV4IDBkYzFmYjguLjM5MmM4YjEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9pcnEuYworKysgYi9hcmNoL3NoL2NjaGlwcy92b3lhZ2VyZ3gvaXJxLmMKQEAgLTMyLDM3ICszMiwzMCBAQAogCiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgotI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KLSNpbmNsdWRlIDxhc20vcnRzNzc1MXIyZC92b3lhZ2VyZ3hfcmVnLmg+CisjaW5jbHVkZSA8YXNtL3ZveWFnZXJneC5oPgogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX3ZveWFnZXJneF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2YWw7Ci0JdW5zaWduZWQgbG9uZyAgbWFzayA9IDEgPDwgKGlycSAtIFZPWUFHRVJfSVJRX0JBU0UpOworCXVuc2lnbmVkIGxvbmcgdmFsOworCXVuc2lnbmVkIGxvbmcgbWFzayA9IDEgPDwgKGlycSAtIFZPWUFHRVJfSVJRX0JBU0UpOwogCiAgICAgCXByX2RlYnVnKCJkaXNhYmxlX3ZveWFnZXJneF9pcnEoJWQpOiBtYXNrPSV4XG4iLCBpcnEsIG1hc2spOwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKICAgICAgICAgdmFsID0gaW5sKFZPWUFHRVJfSU5UX01BU0spOwogICAgICAgICB2YWwgJj0gfm1hc2s7CiAgICAgICAgIG91dGwodmFsLCBWT1lBR0VSX0lOVF9NQVNLKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLQogc3RhdGljIHZvaWQgZW5hYmxlX3ZveWFnZXJneF9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdmFsOwotICAgICAgICB1bnNpZ25lZCBsb25nICBtYXNrID0gMSA8PCAoaXJxIC0gVk9ZQUdFUl9JUlFfQkFTRSk7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsOworICAgICAgICB1bnNpZ25lZCBsb25nIG1hc2sgPSAxIDw8IChpcnEgLSBWT1lBR0VSX0lSUV9CQVNFKTsKIAogICAgICAgICBwcl9kZWJ1ZygiZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKCVkKTogbWFzaz0leFxuIiwgaXJxLCBtYXNrKTsKLSAgICAgICAgbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogICAgICAgICB2YWwgPSBpbmwoVk9ZQUdFUl9JTlRfTUFTSyk7CiAgICAgICAgIHZhbCB8PSBtYXNrOwogICAgICAgICBvdXRsKHZhbCwgVk9ZQUdFUl9JTlRfTUFTSyk7Ci0gICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfdm95YWdlcmd4KHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV92b3lhZ2VyZ3hfaXJxKGlycSk7CkBAIC05NSw3ICs4OCw4IEBACiAJLmVuZCA9IGVuZF92b3lhZ2VyZ3hfaXJxLAogfTsKIAotc3RhdGljIGlycXJldHVybl90IHZveWFnZXJneF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyBpcnFyZXR1cm5fdCB2b3lhZ2VyZ3hfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkgICAgICBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlwcmludGsoS0VSTl9JTkZPCiAJICAgICAgICJWb3lhZ2VyR1g6IHNwdXJpb3VzIGludGVycnVwdCwgc3RhdHVzOiAweCV4XG4iLApAQCAtMTAzLDkgKzk3LDYgQEAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLQotLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KLQogc3RhdGljIHN0cnVjdCB7CiAJaW50ICgqZnVuYykoaW50LCB2b2lkICopOwogCXZvaWQgKmRldjsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY2NoaXBzL3ZveWFnZXJneC9zZXR1cC5jIGIvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L3NldHVwLmMKaW5kZXggMTM5Y2E4OC4uNjZiMmZlZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L3NldHVwLmMKKysrIGIvYXJjaC9zaC9jY2hpcHMvdm95YWdlcmd4L3NldHVwLmMKQEAgLTEzLDcgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3J0czc3NTFyMmQvdm95YWdlcmd4X3JlZy5oPgorI2luY2x1ZGUgPGFzbS92b3lhZ2VyZ3guaD4KIAogc3RhdGljIGludCBfX2luaXQgc2V0dXBfdm95YWdlcmd4KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvbGFuZGlza19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0MzMxNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9sYW5kaXNrX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEzNzMgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xMy1zaAorIyBTdW4gU2VwIDExIDEzOjAwOjQ2IDIwMDUKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfSU9NQVA9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKK0NPTkZJR19TV0FQPXkKK0NPTkZJR19TWVNWSVBDPXkKKyMgQ09ORklHX1BPU0lYX01RVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX0tPQkpFQ1RfVUVWRU5UPXkKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1M9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQjFfSEFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEIxX09WRVJEUklWRSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9DUVJFRUsgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRE1JREEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQ0FUNjg3MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NIMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9BRFggaXMgbm90IHNldAorIyBDT05GSUdfU0hfTVBDMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hTNzc1MVJWT0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRURPU0s3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NINDIwMl9NSUNST0RFViBpcyBub3Qgc2V0CitDT05GSUdfU0hfTEFORElTSz15CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc2VsZWN0aW9uCisjCitDT05GSUdfQ1BVX1NIND15CisKKyMKKyMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKKworIworIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKworIworIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxPXkKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKworIworIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKKworIworIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfTU1VPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDQwMDAwMDAKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CitDT05GSUdfU0hfRlBVPXkKKyMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CisKKyMKKyMgVGltZXIgc3VwcG9ydAorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfUENMS19GUkVRX0JPT0w9eQorQ09ORklHX1NIX1BDTEtfRlJFUT0zMzMzMzMzMworCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTQKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKyMgQ09ORklHX0hENjQ0NlhfU0VSSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19IRUFSVEJFQVQ9eQorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworQ09ORklHX0tFWEVDPXkKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX0lTQT15CitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKK0NPTkZJR19QQ0NBUkQ9eQorIyBDT05GSUdfUENNQ0lBX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUE9eQorQ09ORklHX1BDTUNJQV9MT0FEX0NJUz15CitDT05GSUdfUENNQ0lBX0lPQ1RMPXkKK0NPTkZJR19DQVJEQlVTPXkKKworIworIyBQQy1jYXJkIGJyaWRnZXMKKyMKK0NPTkZJR19ZRU5UQT15CisjIENPTkZJR19QRDY3MjkgaXMgbm90IHNldAorIyBDT05GSUdfSTgyMDkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0k4MjM2NSBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0lDIGlzIG5vdCBzZXQKK0NPTkZJR19QQ01DSUFfUFJPQkU9eQorQ09ORklHX1BDQ0FSRF9OT05TVEFUSUM9eQorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CitDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSPXkKK0NPTkZJR19BU0tfSVBfRklCX0hBU0g9eQorIyBDT05GSUdfSVBfRklCX1RSSUUgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ST1VURV9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTksgaXMgbm90IHNldAorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfQ1RfQUNDVD15CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorIyBDT05GSUdfSVBfTkZfQ09OTlRSQUNLX0VWRU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DVF9QUk9UT19TQ1RQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9GVFA9bQorQ09ORklHX0lQX05GX0lSQz1tCisjIENPTkZJR19JUF9ORl9ORVRCSU9TX05TIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9URlRQPW0KK0NPTkZJR19JUF9ORl9BTUFOREE9bQorIyBDT05GSUdfSVBfTkZfUFBUUCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQUREUlRZUEU9bQorQ09ORklHX0lQX05GX01BVENIX1JFQUxNPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TQ1RQPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0RDQ1AgaXMgbm90IHNldAorQ09ORklHX0lQX05GX01BVENIX0NPTU1FTlQ9bQorQ09ORklHX0lQX05GX01BVENIX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX01BVENIX0NPTk5CWVRFUyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfSEFTSExJTUlUPW0KKyMgQ09ORklHX0lQX05GX01BVENIX1NUUklORyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfTkZRVUVVRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTkFUPW0KK0NPTkZJR19JUF9ORl9OQVRfTkVFREVEPXkKK0NPTkZJR19JUF9ORl9UQVJHRVRfTUFTUVVFUkFERT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFRElSRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTkVUTUFQPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfU0FNRT1tCisjIENPTkZJR19JUF9ORl9OQVRfU05NUF9CQVNJQyBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTkFUX0lSQz1tCitDT05GSUdfSVBfTkZfTkFUX0ZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1RGVFA9bQorQ09ORklHX0lQX05GX05BVF9BTUFOREE9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1RUTCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfVEFSR0VUX0NPTk5NQVJLPW0KKyMgQ09ORklHX0lQX05GX1RBUkdFVF9DTFVTVEVSSVAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX1JBVz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05PVFJBQ0s9bQorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19MTEM9bQorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorQ09ORklHX0FUQUxLPW0KKyMgQ09ORklHX0RFVl9BUFBMRVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BOUCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0NQUV9EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0NJU1NfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9EQUM5NjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPXkKKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKKyMgQ09ORklHX0JMS19ERVZfSU5JVFJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKK0NPTkZJR19JREU9eQorQ09ORklHX0lERV9NQVhfSFdJRlM9NAorQ09ORklHX0JMS19ERVZfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlLnR4dCBmb3IgaGVscC9pbmZvIG9uIElERSBkcml2ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfSURFX1NBVEEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRElTSz15CisjIENPTkZJR19JREVESVNLX01VTFRJX01PREUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVDUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVDRD15CisjIENPTkZJR19CTEtfREVWX0lERVRBUEUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVGTE9QUFkgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFU0NTST15CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CisKKyMKKyMgSURFIGNoaXBzZXQgc3VwcG9ydC9idWdmaXhlcworIworQ09ORklHX0lERV9HRU5FUklDPXkKK0NPTkZJR19CTEtfREVWX0lERVBDST15CitDT05GSUdfSURFUENJX1NIQVJFX0lSUT15CitDT05GSUdfQkxLX0RFVl9PRkZCT0FSRD15CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPXkKKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CitDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKK0NPTkZJR19JREVETUFfT05MWURJU0s9eQorQ09ORklHX0JMS19ERVZfQUVDNjJYWD15CisjIENPTkZJR19CTEtfREVWX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9BTUQ3NFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ01ENjRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVFJJRkxFWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NZODJDNjkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzRYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVcgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NJSU1BR0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TTEM5MEU2NiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1RSTTI5MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1ZJQTgyQ1hYWCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1NIPXkKKyMgQ09ORklHX0lERV9BUk0gaXMgbm90IHNldAorIyBDT05GSUdfSURFX0NISVBTRVRTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKK0NPTkZJR19JREVETUFfQVVUTz15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfU0cgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworQ09ORklHX1NDU0lfTVVMVElfTFVOPXkKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FIQTE1MlggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EVEMzMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dFTkVSSUNfTkNSNTM4MF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05DUjUzQzQwNkEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1BBUzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUFNJMjQwSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ19GQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEEyWFhYPXkKKyMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzQxNiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1QxMjggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgU0NTSSBhZGFwdGVyIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDTUNJQV9BSEExNTJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9GRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9OSU5KQV9TQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDTUNJQV9RTE9HSUMgaXMgbm90IHNldAorIyBDT05GSUdfUENNQ0lBX1NZTTUzQzUwMCBpcyBub3Qgc2V0CisKKyMKKyMgT2xkIENELVJPTSBkcml2ZXJzIChub3QgU0NTSSwgbm90IElERSkKKyMKKyMgQ09ORklHX0NEX05PX0lERVNDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCitDT05GSUdfTUQ9eQorQ09ORklHX0JMS19ERVZfTUQ9bQorQ09ORklHX01EX0xJTkVBUj1tCitDT05GSUdfTURfUkFJRDA9bQorQ09ORklHX01EX1JBSUQxPW0KKyMgQ09ORklHX01EX1JBSUQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9SQUlENSBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9SQUlENiBpcyBub3Qgc2V0CisjIENPTkZJR19NRF9NVUxUSVBBVEggaXMgbm90IHNldAorIyBDT05GSUdfTURfRkFVTFRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfRE0gaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorCisjCisjIEFSQ25ldCBkZXZpY2VzCisjCisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorCisjCisjIFBIWSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAgb3IgMTAwTWJpdCkKKyMKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfU01DIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SX1JBQ0FMIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUMTcwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ERVBDQSBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMjAwMCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1BDST15CisjIENPTkZJR19QQ05FVDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FNRDgxMTFfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FEQVBURUNfU1RBUkZJUkUgaXMgbm90IHNldAorIyBDT05GSUdfQUMzMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUklDT1QgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPUkNFREVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUzg5eDAgaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKK0NPTkZJR184MTM5Q1A9eQorIyBDT05GSUdfODEzOVRPTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBQQ01DSUEgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1BDTUNJQSBpcyBub3Qgc2V0CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfSU5QVVRfS0VZQk9BUkQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfSk9ZU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgSS9PIHBvcnRzCisjCisjIENPTkZJR19TRVJJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HQU1FUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ2hhcmFjdGVyIGRldmljZXMKKyMKK0NPTkZJR19WVD15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorIyBDT05GSUdfU0VSSUFMX0pTTSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorCisjCisjIElQTUkKKyMKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQyBpcyBub3Qgc2V0CitDT05GSUdfUlM1QzMxM19SVEM9eQorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisKKyMKKyMgUENNQ0lBIGNoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19TWU5DTElOS19DUyBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9bQorCisjCisjIFZpZGVvIEZvciBMaW51eAorIworCisjCisjIFZpZGVvIEFkYXB0ZXJzCisjCisjIENPTkZJR19WSURFT19QTVMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TVFJBRElTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01YQiBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19EUEMgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fSEVYSVVNX09SSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX0hFWElVTV9HRU1JTkkgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19DQURFVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19SVFJBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fUlRSQUNLMiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19BWlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fR0VNVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX0dFTVRFS19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fTUFYSVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX01BRVNUUk8gaXMgbm90IHNldAorIyBDT05GSUdfUkFESU9fU0YxNkZNSSBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19TRjE2Rk1SMiBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19URVJSQVRFQyBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19UUlVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQURJT19UWVBIT09OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JBRElPX1pPTFRSSVggaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfTURBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZPTlRfOHgxNj15CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9bQorIyBDT05GSUdfU09VTkRfQlQ4NzggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ01QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRU1VMTBLMSBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfQ1M0MjgxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0VTMTM3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9FUzEzNzEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRVNTU09MTzEgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTUFFU1RSTyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9NQUVTVFJPMyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9JQ0ggaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfU09OSUNWSUJFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9UUklERU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRDTEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX01TTkRQSU4gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfVklBODJDWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX0FMSTU0NTUgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfRk9SVEUgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfUk1FOTZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9BRDE5ODAgaXMgbm90IHNldAorCisjCisjIFVTQiBzdXBwb3J0CisjCitDT05GSUdfVVNCX0FSQ0hfSEFTX0hDRD15CitDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorIyBDT05GSUdfVVNCX0JBTkRXSURUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1NQTElUX0lTTyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9ST09UX0hVQl9UVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0hDRD15CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKK0NPTkZJR19PQlNPTEVURV9PU1NfVVNCX0RSSVZFUj15CitDT05GSUdfVVNCX0FVRElPPW0KKyMgQ09ORklHX1VTQl9CTFVFVE9PVEhfVFRZIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTUlEST1tCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUFJJTlRFUj1tCisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUI9eQorQ09ORklHX1VTQl9TVE9SQUdFX0ZSRUVDT009eQorQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMD15CitDT05GSUdfVVNCX1NUT1JBR0VfRFBDTT15CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5PXkKK0NPTkZJR19VU0JfU1RPUkFHRV9TRERSNTU9eQorQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UPXkKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9bQorQ09ORklHX1VTQl9ISURJTlBVVD15CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhJRCBCb290IFByb3RvY29sIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9LQkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BSVBURUsgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dBQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BQ0VDQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tCVEFCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QT1dFUk1BVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01UT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVRNVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VHQUxBWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWUVBTElOSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWFBBRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVRJX1JFTU9URSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0VZU1BBTl9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FQUExFVE9VQ0ggaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgTXVsdGltZWRpYSBkZXZpY2VzCisjCitDT05GSUdfVVNCX0RBQlVTQj1tCitDT05GSUdfVVNCX1ZJQ0FNPW0KK0NPTkZJR19VU0JfRFNCUj1tCitDT05GSUdfVVNCX0lCTUNBTT1tCitDT05GSUdfVVNCX0tPTklDQVdDPW0KK0NPTkZJR19VU0JfT1Y1MTE9bQorQ09ORklHX1VTQl9TRTQwMT1tCitDT05GSUdfVVNCX1NOOUMxMDI9bQorQ09ORklHX1VTQl9TVFY2ODA9bQorQ09ORklHX1VTQl9QV0M9bQorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfUEVHQVNVUz1tCitDT05GSUdfVVNCX1JUTDgxNTA9bQorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworCisjCisjIFVTQiBTZXJpYWwgQ29udmVydGVyIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfU0VSSUFMPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX0ZURElfU0lPPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUEFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9FREdFUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUX1RJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfR0FSTUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfSVBXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0VZU1BBTl9QREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS0xTSSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tPQklMX1NDVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfU0VSSUFMX1BMMjMwMz1tCisjIENPTkZJR19VU0JfU0VSSUFMX0hQNFggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9TQUZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9DWUJFUkpBQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9YSVJDT00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PUFRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUIGlzIG5vdCBzZXQKKworIworIyBVU0IgTWlzY2VsbGFuZW91cyBkcml2ZXJzCisjCitDT05GSUdfVVNCX0VNSTYyPW0KK0NPTkZJR19VU0JfRU1JMjY9bQorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorQ09ORklHX1VTQl9TSVNVU0JWR0E9bQorQ09ORklHX1VTQl9TSVNVU0JWR0FfQ09OPXkKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERTTCBtb2RlbSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIEdhZGdldCBTdXBwb3J0CisjCisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBNTUMvU0QgQ2FyZCBzdXBwb3J0CisjCisjIENPTkZJR19NTUMgaXMgbm90IHNldAorCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisKKyMKKyMgU04gRGV2aWNlcworIworCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorIyBDT05GSUdfRVhUMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CisjIENPTkZJR19FWFQzX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQzX0ZTX1NFQ1VSSVRZIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorIyBDT05GSUdfSkJEX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19GU19NQkNBQ0hFPXkKK0NPTkZJR19SRUlTRVJGU19GUz15CisjIENPTkZJR19SRUlTRVJGU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19QUk9DX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorQ09ORklHX1JPTUZTX0ZTPXkKK0NPTkZJR19JTk9USUZZPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPXkKK0NPTkZJR19NU0RPU19GUz15CitDT05GSUdfVkZBVF9GUz15CitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCitDT05GSUdfTlRGU19GUz1tCisjIENPTkZJR19OVEZTX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19OVEZTX1JXPXkKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKKyMgQ09ORklHX1BST0NfS0NPUkUgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorQ09ORklHX1VGU19GUz1tCitDT05GSUdfVUZTX0ZTX1dSSVRFPXkKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz1tCitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD1tCitDT05GSUdfTkZTRF9WMz15CisjIENPTkZJR19ORlNEX1YzX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ORlNEX1RDUD15CitDT05GSUdfTE9DS0Q9bQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz1tCitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPW0KKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKK0NPTkZJR19TTUJfRlM9bQorIyBDT05GSUdfU01CX05MU19ERUZBVUxUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PXkKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorQ09ORklHX05MU19DT0RFUEFHRV85MzI9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk0OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzggaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzEyNTEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0FTQ0lJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzEgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQorIyBDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBycF9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvcjc3ODBycF9kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5N2ZjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9yNzc4MHJwX2RlZmNvbmZpZwpAQCAtMCwwICsxLDEwOTkgQEAKKyMKKyMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4xNS1zaAorIyBTYXQgSmFuICA3IDE5OjQ3OjUzIDIwMDYKKyMKK0NPTkZJR19TVVBFUkg9eQorQ09ORklHX1VJRDE2PXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKK0NPTkZJR19HRU5FUklDX0lSUV9QUk9CRT15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQ0xFQU5fQ09NUElMRT15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfTE9DS19LRVJORUw9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1Q9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMyBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKK0NPTkZJR19IT1RQTFVHPXkKK0NPTkZJR19LT0JKRUNUX1VFVkVOVD15CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0FMTCBpcyBub3Qgc2V0CisjIENPTkZJR19LQUxMU1lNU19FWFRSQV9QQVNTIGlzIG5vdCBzZXQKK0NPTkZJR19QUklOVEs9eQorQ09ORklHX0JVRz15CitDT05GSUdfQkFTRV9GVUxMPXkKKyMgQ09ORklHX0ZVVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQT0xMIGlzIG5vdCBzZXQKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQ0NfQUxJR05fRlVOQ1RJT05TPTAKK0NPTkZJR19DQ19BTElHTl9MQUJFTFM9MAorQ09ORklHX0NDX0FMSUdOX0xPT1BTPTAKK0NPTkZJR19DQ19BTElHTl9KVU1QUz0wCisjIENPTkZJR19USU5ZX1NITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19CQVNFX1NNQUxMPTAKKworIworIyBMb2FkYWJsZSBtb2R1bGUgc3VwcG9ydAorIworQ09ORklHX01PRFVMRVM9eQorQ09ORklHX01PRFVMRV9VTkxPQUQ9eQorIyBDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfTU9EUEFSTT15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorQ09ORklHX0tNT0Q9eQorCisjCisjIEJsb2NrIGxheWVyCisjCisjIENPTkZJR19MQkQgaXMgbm90IHNldAorCisjCisjIElPIFNjaGVkdWxlcnMKKyMKK0NPTkZJR19JT1NDSEVEX05PT1A9eQorIyBDT05GSUdfSU9TQ0hFRF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19JT1NDSEVEX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9ERUFETElORSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0NGUSBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9OT09QPXkKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9Im5vb3AiCisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQjFfSEFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEIxX09WRVJEUklWRSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9DUVJFRUsgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRE1JREEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRUMzMTA0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NBVFVSTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9EUkVBTUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQ0FUNjg3MDEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQklHU1VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NIMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9BRFggaXMgbm90IHNldAorIyBDT05GSUdfU0hfTVBDMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hTNzc1MVJWT0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfUjc3NzAzRFJQIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9SNzc4MFJQPXkKKyMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc2VsZWN0aW9uCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorCisjCisjIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorCisjCisjIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAorCisjCisjIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwPXkKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfTU1VPXkKK0NPTkZJR18zMkJJVD15CitDT05GSUdfSFVHRVRMQl9QQUdFX1NJWkVfNjRLPXkKKyMgQ09ORklHX0hVR0VUTEJfUEFHRV9TSVpFXzFNQiBpcyBub3Qgc2V0CitDT05GSUdfU0VMRUNUX01FTU9SWV9NT0RFTD15CitDT05GSUdfRkxBVE1FTV9NQU5VQUw9eQorIyBDT05GSUdfRElTQ09OVElHTUVNX01BTlVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEFSU0VNRU1fTUFOVUFMIGlzIG5vdCBzZXQKK0NPTkZJR19GTEFUTUVNPXkKK0NPTkZJR19GTEFUX05PREVfTUVNX01BUD15CisjIENPTkZJR19TUEFSU0VNRU1fU1RBVElDIGlzIG5vdCBzZXQKK0NPTkZJR19TUExJVF9QVExPQ0tfQ1BVUz00CisKKyMKKyMgQ2FjaGUgY29uZmlndXJhdGlvbgorIworIyBDT05GSUdfU0hfRElSRUNUX01BUFBFRCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9XUklURVRIUk9VR0ggaXMgbm90IHNldAorIyBDT05GSUdfU0hfT0NSQU0gaXMgbm90IHNldAorQ09ORklHX01FTU9SWV9TVEFSVD0weDA4MDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwODAwMDAwMAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TSF9GUFU9eQorQ09ORklHX1NIX1NUT1JFX1FVRVVFUz15CisKKyMKKyMgVGltZXIgc3VwcG9ydAorIworQ09ORklHX1NIX1RNVT15CitDT05GSUdfU0hfUENMS19GUkVRX0JPT0w9eQorQ09ORklHX1NIX1BDTEtfRlJFUT0zMjAwMDAwMAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCitDT05GSUdfU0hfRE1BPXkKK0NPTkZJR19OUl9PTkNISVBfRE1BX0NIQU5ORUxTPTYKKyMgQ09ORklHX05SX0RNQV9DSEFOTkVMU19CT09MIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKyMgQ09ORklHX0hENjQ0NlhfU0VSSUVTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUPXkKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfSU5UQzJfSVJRPXkKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0ibWVtPTEyOE0gY29uc29sZT10dHlTQzAsMTE1MjAwIHJvb3Q9L2Rldi9oZGExIgorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQorIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKK0NPTkZJR19IT1RQTFVHX1BDST15CisjIENPTkZJR19IT1RQTFVHX1BDSV9GQUtFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJX0NQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfU0hQQyBpcyBub3Qgc2V0CisKKyMKKyMgRXhlY3V0YWJsZSBmaWxlIGZvcm1hdHMKKyMKK0NPTkZJR19CSU5GTVRfRUxGPXkKKyMgQ09ORklHX0JJTkZNVF9GTEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JJTkZNVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9NVUxUSVBMRV9UQUJMRVMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorIyBDT05GSUdfSVBfUE5QX0JPT1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9SQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9JUEdSRSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZTl9DT09LSUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfQUggaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9FU1AgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9JUENPTVAgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKworIworIyBRb1MgYW5kL29yIGZhaXIgcXVldWVpbmcKKyMKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9bQorIyBDT05GSUdfREVCVUdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKKyMgQ09ORklHX01URCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworQ09ORklHX0lERT1tCitDT05GSUdfSURFX01BWF9IV0lGUz00CitDT05GSUdfQkxLX0RFVl9JREU9bQorCisjCisjIFBsZWFzZSBzZWUgRG9jdW1lbnRhdGlvbi9pZGUudHh0IGZvciBoZWxwL2luZm8gb24gSURFIGRyaXZlcworIworQ09ORklHX0JMS19ERVZfSURFX1NBVEE9eQorQ09ORklHX0JMS19ERVZfSURFRElTSz1tCitDT05GSUdfSURFRElTS19NVUxUSV9NT0RFPXkKKyMgQ09ORklHX0JMS19ERVZfSURFQ0QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JREVUQVBFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSURFRkxPUFBZIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERVNDU0k9bQorIyBDT05GSUdfSURFX1RBU0tfSU9DVEwgaXMgbm90IHNldAorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKK0NPTkZJR19JREVfR0VORVJJQz1tCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorQ09ORklHX0lERVBDSV9TSEFSRV9JUlE9eQorIyBDT05GSUdfQkxLX0RFVl9PRkZCT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9HRU5FUklDPW0KKyMgQ09ORklHX0JMS19ERVZfT1BUSTYyMSBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JREVETUFfUENJPXkKKyMgQ09ORklHX0JMS19ERVZfSURFRE1BX0ZPUkNFRCBpcyBub3Qgc2V0CitDT05GSUdfSURFRE1BX1BDSV9BVVRPPXkKKyMgQ09ORklHX0lERURNQV9PTkxZRElTSyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9BRUM2MlhYPW0KKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1k4MkM2OTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MjAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DUzU1MzAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9IUFQzNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TQzEyMDAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSVQ4MjFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTlM4NzQxNSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BEQzIwMlhYX09MRCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9QREMyMDJYWF9ORVc9bQorIyBDT05GSUdfUERDMjAyWFhfRk9SQ0UgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TVldLUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TSUlNQUdFPW0KKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9WSUE4MkNYWFggaXMgbm90IHNldAorQ09ORklHX0lERV9TSD15CisjIENPTkZJR19JREVfQVJNIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQT15CisjIENPTkZJR19JREVETUFfSVZCIGlzIG5vdCBzZXQKK0NPTkZJR19JREVETUFfQVVUTz15CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPW0KK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD1tCisjIENPTkZJR19DSFJfREVWX1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NSIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JVElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSU5JQTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUUxBMlhYWD1tCisjIENPTkZJR19TQ1NJX1FMQTIxWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIzMjIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEE2MzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fU0FTIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19JMk8gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKKworIworIyBUdWxpcCBmYW1pbHkgbmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19ORTIwMDA9eQorQ09ORklHX05FVF9QQ0k9eQorQ09ORklHX1BDTkVUMzI9bQorIyBDT05GSUdfQU1EODExMV9FVEggaXMgbm90IHNldAorIyBDT05GSUdfQURBUFRFQ19TVEFSRklSRSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorIyBDT05GSUdfRk9SQ0VERVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RHUlMgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk8xMDAgaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfODEzOUNQPW0KK0NPTkZJR184MTM5VE9PPW0KKyMgQ09ORklHXzgxMzlUT09fUElPIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlUT09fVFVORV9UV0lTVEVSIGlzIG5vdCBzZXQKK0NPTkZJR184MTM5VE9PXzgxMjk9eQorIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CitDT05GSUdfVklBX1JISU5FPW0KK0NPTkZJR19WSUFfUkhJTkVfTU1JTz15CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMD1tCisjIENPTkZJR19FMTAwMF9OQVBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorQ09ORklHX1I4MTY5PXkKKyMgQ09ORklHX1I4MTY5X05BUEkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworQ09ORklHX0hFUk1FUz1tCisjIENPTkZJR19QTFhfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RNRF9IRVJNRVMgaXMgbm90IHNldAorIyBDT05GSUdfTk9SVEVMX0hFUk1FUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKworIworIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CisjCitDT05GSUdfUFJJU001ND1tCisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9XSVJFTEVTUz15CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TSEFQRVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRQT0xMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIgaXMgbm90IHNldAorCisjCisjIElTRE4gc3Vic3lzdGVtCisjCisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKworIworIyBUZWxlcGhvbnkgU3VwcG9ydAorIworIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CisjIENPTkZJR19JTlBVVF9NT1VTRURFVl9QU0FVWCBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1g9MTAyNAorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9ZPTc2OAorIyBDT05GSUdfSU5QVVRfSk9ZREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RTREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKKyMgQ09ORklHX1NFUklPX0k4MDQyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1NFUlBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FQUExJQ09NIGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIENhcGFiaWxpdGllcyBQb3J0IGRyaXZlcnMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisKKyMKKyMgRGlnaXRhbCBWaWRlbyBCcm9hZGNhc3RpbmcgRGV2aWNlcworIworIyBDT05GSUdfRFZCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisKKyMKKyMgU291bmQKKyMKK0NPTkZJR19TT1VORD1tCisKKyMKKyMgQWR2YW5jZWQgTGludXggU291bmQgQXJjaGl0ZWN0dXJlCisjCisjIENPTkZJR19TTkQgaXMgbm90IHNldAorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCitDT05GSUdfU09VTkRfUFJJTUU9bQorIyBDT05GSUdfT0JTT0xFVEVfT1NTX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TT1VORF9GVVNJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfSUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPVU5EX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORENMQVMgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkRfTVNORFBJTiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CisjIENPTkZJR19VU0IgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgSW5maW5pQmFuZCBzdXBwb3J0CisjCisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKworIworIyBTTiBEZXZpY2VzCisjCisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSU5JWF9GUz15CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSU5PVElGWT15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorQ09ORklHX05URlNfRlM9eQorIyBDT05GSUdfTlRGU19ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTlRGU19SVz15CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfU1lTRlM9eQorIyBDT05GSUdfVE1QRlMgaXMgbm90IHNldAorQ09ORklHX0hVR0VUTEJGUz15CitDT05GSUdfSFVHRVRMQl9QQUdFPXkKK0NPTkZJR19SQU1GUz15CisjIENPTkZJR19SRUxBWUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIGZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU0RfVjQ9eQorQ09ORklHX05GU0RfVENQPXkKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKK0NPTkZJR19TVU5SUENfR1NTPXkKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfOVBfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPXkKK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9eQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0NPREVQQUdFXzkzMj15CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQVNDSUkgaXMgbm90IHNldAorQ09ORklHX05MU19JU084ODU5XzE9eQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX1VURjggaXMgbm90IHNldAorCisjCisjIFByb2ZpbGluZyBzdXBwb3J0CisjCisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfS0VSTkVMPXkKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19QUkVFTVBUPXkKK0NPTkZJR19ERUJVR19TUElOTE9DSz15CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LT0JKRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKK0NPTkZJR19GUkFNRV9QT0lOVEVSPXkKKyMgQ09ORklHX1JDVV9UT1JUVVJFX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CisjIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCitDT05GSUdfQ1JZUFRPPXkKK0NPTkZJR19DUllQVE9fSE1BQz15CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19TSEExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fV1A1MTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RHUjE5MiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0tIQVpBRCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczMTgwX2RlZmNvbmZpZyBiL2FyY2gvc2gvY29uZmlncy9zZTczMTgwX2RlZmNvbmZpZwppbmRleCBkMjE3ZTQ0Li5mZTE5ZmViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2NvbmZpZ3Mvc2U3MzE4MF9kZWZjb25maWcKKysrIGIvYXJjaC9zaC9jb25maWdzL3NlNzMxODBfZGVmY29uZmlnCkBAIC03OCw2ICs3OCw3IEBACiAjIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1I3NzgwUlAgaXMgbm90IHNldAogIyBDT05GSUdfU0hfRURPU0s3NzA1IGlzIG5vdCBzZXQKICMgQ09ORklHX1NIX1NINDIwMl9NSUNST0RFViBpcyBub3Qgc2V0CiAjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnIGIvYXJjaC9zaC9jb25maWdzL3NlNzM0M19kZWZjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ4ZTUwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zZTczNDNfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTk3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgTW9uIEF1ZyAgNyAyMDoxNDo0NCAyMDA2CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorCisjCisjIFN5c3RlbSB0eXBlCisjCitDT05GSUdfU09MVVRJT05fRU5HSU5FPXkKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CitDT05GSUdfU0hfNzM0M19TT0xVVElPTl9FTkdJTkU9eQorIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3NTFfU1lTVEVNSCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FQzMxMDQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0FUVVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0RSRUFNQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTVBDMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hTNzc1MVJWT0lQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3MTBWT0lQR1cgaXMgbm90IHNldAorIyBDT05GSUdfU0hfUlRTNzc1MVIyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9SNzc4MFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSE1JTiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc2VsZWN0aW9uCisjCitDT05GSUdfQ1BVX1NIND15CitDT05GSUdfQ1BVX1NINEE9eQorCisjCisjIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwIGlzIG5vdCBzZXQKKworIworIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisKKyMKKyMgU1Q0MCBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MEdYMSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtNEEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0Mz15CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfTU1VPXkKK0NPTkZJR19QQUdFX09GRlNFVD0weDgwMDAwMDAwCitDT05GSUdfTUVNT1JZX1NUQVJUPTB4MGMwMDAwMDAKK0NPTkZJR19NRU1PUllfU0laRT0weDAxMDAwMDAwCitDT05GSUdfMzJCSVQ9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19TSF9GUFUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfRlBVX0VNVSBpcyBub3Qgc2V0CitDT05GSUdfU0hfRFNQPXkKKyMgQ09ORklHX1NIX1NUT1JFX1FVRVVFUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorCisjCisjIFRpbWVyIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1BDTEtfRlJFUT0yNzAwMDAwMAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAorQ09ORklHX0hFQVJUQkVBVD15CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8xMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWj0yNTAKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorCisjCisjIEJvb3Qgb3B0aW9ucworIworQ09ORklHX1pFUk9fUEFHRV9PRkZTRVQ9MHgwMDAwMTAwMAorQ09ORklHX0JPT1RfTElOS19PRkZTRVQ9MHgwMDgwMDAwMAorIyBDT05GSUdfVUJDX1dBS0VVUCBpcyBub3Qgc2V0CisjIENPTkZJR19DTURMSU5FX0JPT0wgaXMgbm90IHNldAorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfUEFDS0VUPXkKK0NPTkZJR19QQUNLRVRfTU1BUD15CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorQ09ORklHX0ZXX0xPQURFUj15CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgVGVjaG5vbG9neSBEZXZpY2VzIChNVEQpCisjCitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU09MVVRJT05FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorQ09ORklHX1NNQzkxWD15CisjIENPTkZJR19ORTIwMDAgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9OUl9VQVJUUz0yCitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19VTklYOThfUFRZUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKworIworIyBUUE0gZGV2aWNlcworIworIyBDT05GSUdfVENHX1RQTSBpcyBub3Qgc2V0CisjIENPTkZJR19URUxDTE9DSyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN1cHBvcnQKKyMKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgQWxnb3JpdGhtcworIworIyBDT05GSUdfSTJDX0FMR09CSVQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0YgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMR09QQ0EgaXMgbm90IHNldAorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BDQV9JU0EgaXMgbm90IHNldAorQ09ORklHX0kyQ19TSDczNDM9eQorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfU0VOU09SU19EUzEzMzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19FRVBST00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorCisjCisjIFNQSSBzdXBwb3J0CisjCisjIENPTkZJR19TUEkgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX01BU1RFUiBpcyBub3Qgc2V0CisKKyMKKyMgRGFsbGFzJ3MgMS13aXJlIGJ1cworIworIyBDT05GSUdfVzEgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIE1vbml0b3Jpbmcgc3VwcG9ydAorIworIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKworIworIyBNaXNjIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKK0NPTkZJR19WSURFT19ERVY9eQorQ09ORklHX1ZJREVPX1Y0TDE9eQorQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUPXkKK0NPTkZJR19WSURFT19WNEwyPXkKKworIworIyBWaWRlbyBDYXB0dXJlIEFkYXB0ZXJzCisjCisKKyMKKyMgVmlkZW8gQ2FwdHVyZSBBZGFwdGVycworIworIyBDT05GSUdfVklERU9fQURWX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1ZJVkkgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1BJQSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ2QSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19TQUE1MjQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTkVSXzMwMzYgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1ZDQU1DSElQIGlzIG5vdCBzZXQKKworIworIyBFbmNvZGVycyBhbmQgRGVjb2RlcnMKKyMKKyMgQ09ORklHX1ZJREVPX01TUDM0MDAgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fQ1M1M0wzMkEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fV004Nzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1dNODczOSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19DWDI1ODQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX1NBQTcxMVggaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fU0FBNzEyNyBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19VUEQ2NDAzMUEgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fVVBENjQwODMgaXMgbm90IHNldAorCisjCisjIFJhZGlvIEFkYXB0ZXJzCisjCisjIENPTkZJR19SQURJT19NQUVTVFJPIGlzIG5vdCBzZXQKKworIworIyBEaWdpdGFsIFZpZGVvIEJyb2FkY2FzdGluZyBEZXZpY2VzCisjCisjIENPTkZJR19EVkIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKK0NPTkZJR19GQj15CisjIENPTkZJR19GQl9DRkJfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFDTU9ERVMgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZJUk1XQVJFX0VESUQ9eQorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9FUFNPTjEzNTUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFIGlzIG5vdCBzZXQKKworIworIyBMb2dvIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBTb3VuZAorIworQ09ORklHX1NPVU5EPXkKKworIworIyBBZHZhbmNlZCBMaW51eCBTb3VuZCBBcmNoaXRlY3R1cmUKKyMKK0NPTkZJR19TTkQ9eQorQ09ORklHX1NORF9USU1FUj15CitDT05GSUdfU05EX1BDTT15CitDT05GSUdfU05EX1NFUVVFTkNFUj15CisjIENPTkZJR19TTkRfU0VRX0RVTU1ZIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfT1NTRU1VTD15CisjIENPTkZJR19TTkRfTUlYRVJfT1NTIGlzIG5vdCBzZXQKK0NPTkZJR19TTkRfUENNX09TUz15CitDT05GSUdfU05EX1BDTV9PU1NfUExVR0lOUz15CisjIENPTkZJR19TTkRfU0VRVUVOQ0VSX09TUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorQ09ORklHX1NORF9TVVBQT1JUX09MRF9BUEk9eQorQ09ORklHX1NORF9WRVJCT1NFX1BST0NGUz15CisjIENPTkZJR19TTkRfVkVSQk9TRV9QUklOVEsgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBHZW5lcmljIGRldmljZXMKKyMKKyMgQ09ORklHX1NORF9EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfVklSTUlESSBpcyBub3Qgc2V0CisjIENPTkZJR19TTkRfTVRQQVYgaXMgbm90IHNldAorIyBDT05GSUdfU05EX1NFUklBTF9VMTY1NTAgaXMgbm90IHNldAorIyBDT05GSUdfU05EX01QVTQwMSBpcyBub3Qgc2V0CisKKyMKKyMgU3VwZXJIIGRldmljZXMKKyMKK0NPTkZJR19TSDczNDNfU0lVPW0KK0NPTkZJR19BSzQ1MzdfQ09ERUM9eQorCisjCisjIE9wZW4gU291bmQgU3lzdGVtCisjCisjIENPTkZJR19TT1VORF9QUklNRSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19ESVJFQ1RJTyBpcyBub3Qgc2V0CitDT05GSUdfTkZTRD15CisjIENPTkZJR19ORlNEX1YzIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0RfVENQIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19FWFBPUlRGUz15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TVEFOREFSRF9CSU9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9jb25maWdzL3NoNzcxMHZvaXBnd19kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2g3NzEwdm9pcGd3X2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzlhMzAzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvY29uZmlncy9zaDc3MTB2b2lwZ3dfZGVmY29uZmlnCkBAIC0wLDAgKzEsOTEzIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgTW9uIEF1ZyAgNyAxNzowNzowNiAyMDA2CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKKworIworIyBDb2RlIG1hdHVyaXR5IGxldmVsIG9wdGlvbnMKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0JST0tFTl9PTl9TTVA9eQorQ09ORklHX0lOSVRfRU5WX0FSR19MSU1JVD0zMgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CisjIENPTkZJR19TV0FQIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNWSVBDPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFTEFZIGlzIG5vdCBzZXQKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCitDT05GSUdfVUlEMTY9eQorQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorQ09ORklHX1NMQUI9eQorQ09ORklHX1RJTllfU0hNRU09eQorQ09ORklHX0JBU0VfU01BTEw9MAorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCitDT05GSUdfTU9EVUxFUz15CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbGF5ZXIKKyMKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKKyMgQ09ORklHX0lPU0NIRURfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQVMgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfREVBRExJTkU9eQorIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImRlYWRsaW5lIgorCisjCisjIFN5c3RlbSB0eXBlCisjCisjIENPTkZJR19TSF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzc1MV9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzMwMF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzMxODBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3NTFfU1lTVEVNSCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUDZYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FQzMxMDQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0FUVVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0RSRUFNQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTVBDMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDAzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NFQ1VSRUVER0U1NDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hTNzc1MVJWT0lQIGlzIG5vdCBzZXQKK0NPTkZJR19TSF83NzEwVk9JUEdXPXkKKyMgQ09ORklHX1NIX1JUUzc3NTFSMkQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfUjc3ODBSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FRE9TSzc3MDUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0g0MjAyX01JQ1JPREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0xBTkRJU0sgaXMgbm90IHNldAorIyBDT05GSUdfU0hfVElUQU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0hNSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHNlbGVjdGlvbgorIworQ09ORklHX0NQVV9TSDM9eQorCisjCisjIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkgaXMgbm90IHNldAorQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMD15CisKKyMKKyMgU0gtNCBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzA5MSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTBSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIgaXMgbm90IHNldAorCisjCisjIFNUNDAgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBTVEIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NUNDBHWDEgaXMgbm90IHNldAorCisjCisjIFNILTRBIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc3MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODAgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMKKyMKK0NPTkZJR19NTVU9eQorQ09ORklHX1BBR0VfT0ZGU0VUPTB4ODAwMDAwMDAKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwYzAwMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4MDA4MDAwMDAKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKworIworIyBDYWNoZSBjb25maWd1cmF0aW9uCisjCisjIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1dSSVRFVEhST1VHSCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9PQ1JBTSBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIGZlYXR1cmVzCisjCitDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfU0hfRlBVX0VNVSBpcyBub3Qgc2V0CitDT05GSUdfU0hfRFNQPXkKKyMgQ09ORklHX1NIX0FEQyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX0hBU19JTlRFVlQ9eQorQ09ORklHX0NQVV9IQVNfU1JfUkI9eQorCisjCisjIFRpbWVyIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1BDTEtfRlJFUT0zMjc2ODAwMAorCisjCisjIENQVSBGcmVxdWVuY3kgc2NhbGluZworIworIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorCisjCisjIERNQSBzdXBwb3J0CisjCisjIENPTkZJR19TSF9ETUEgaXMgbm90IHNldAorCisjCisjIENvbXBhbmlvbiBDaGlwcworIworIyBDT05GSUdfSEQ2NDQ2WF9TRVJJRVMgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBmZWF0dXJlcworIworIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVF9OT05FPXkKKyMgQ09ORklHX1BSRUVNUFRfVk9MVU5UQVJZIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDA4MDAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKKworIworIyBCdXMgb3B0aW9ucworIworIyBDT05GSUdfUENJIGlzIG5vdCBzZXQKKworIworIyBQQ0NBUkQgKFBDTUNJQS9DYXJkQnVzKSBzdXBwb3J0CisjCisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorCisjCisjIFBDSSBIb3RwbHVnIFN1cHBvcnQKKyMKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIFBvd2VyIG1hbmFnZW1lbnQgb3B0aW9ucyAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfUE0gaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworIyBDT05GSUdfTkVUREVCVUcgaXMgbm90IHNldAorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKKyMgQ09ORklHX0lQX01VTFRJQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX1BOUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CitDT05GSUdfU1lOX0NPT0tJRVM9eQorIyBDT05GSUdfSU5FVF9BSCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0lQQ09NUCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRElBRyBpcyBub3Qgc2V0CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKworIworIyBJUDogVmlydHVhbCBTZXJ2ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfSVBfVlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9YRlJNX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUNl9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorCisjCisjIENvcmUgTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVEFCTEVTIGlzIG5vdCBzZXQKKworIworIyBJUDogTmV0ZmlsdGVyIENvbmZpZ3VyYXRpb24KKyMKK0NPTkZJR19JUF9ORl9DT05OVFJBQ0s9eQorIyBDT05GSUdfSVBfTkZfQ1RfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9DT05OVFJBQ0tfRVZFTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCisjIENPTkZJR19JUF9ORl9JUkMgaXMgbm90IHNldAorIyBDT05GSUdfSVBfTkZfTkVUQklPU19OUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9URlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUFBUUD1tCisjIENPTkZJR19JUF9ORl9IMzIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX05GX1FVRVVFIGlzIG5vdCBzZXQKKworIworIyBEQ0NQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorCisjCisjIFNDVFAgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisKKyMKKyMgVElQQyBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RJVkVSVCBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisKKyMKKyMgUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nCisjCitDT05GSUdfTkVUX1NDSEVEPXkKK0NPTkZJR19ORVRfU0NIX0NMS19KSUZGSUVTPXkKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0dFVFRJTUVPRkRBWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0NMS19DUFUgaXMgbm90IHNldAorCisjCisjIFF1ZXVlaW5nL1NjaGVkdWxpbmcKKyMKK0NPTkZJR19ORVRfU0NIX0NCUT15CisjIENPTkZJR19ORVRfU0NIX0hUQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0hGU0MgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9QUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfUkVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfU0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfVEVRTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX1RCRiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIX0dSRUQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9EU01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSF9ORVRFTSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9JTkdSRVNTPXkKKworIworIyBDbGFzc2lmaWNhdGlvbgorIworQ09ORklHX05FVF9DTFM9eQorQ09ORklHX05FVF9DTFNfQkFTSUM9eQorQ09ORklHX05FVF9DTFNfVENJTkRFWD15CitDT05GSUdfTkVUX0NMU19ST1VURTQ9eQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorIyBDT05GSUdfTkVUX0NMU19GVyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0NMU19VMzI9eQorIyBDT05GSUdfQ0xTX1UzMl9QRVJGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NMU19VMzJfTUFSSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfQ0xTX1JTVlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19SU1ZQNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRU1BVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9DTFNfQUNUIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1BPTElDRT15CisjIENPTkZJR19ORVRfQ0xTX0lORCBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VTVElNQVRPUj15CisKKyMKKyMgTmV0d29yayB0ZXN0aW5nCisjCisjIENPTkZJR19ORVRfUEtUR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTgwMjExIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorCisjCisjIENvbm5lY3RvciAtIHVuaWZpZWQgdXNlcnNwYWNlIDwtPiBrZXJuZWxzcGFjZSBsaW5rZXIKKyMKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NPTkNBVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorIyBDT05GSUdfTVREX0pFREVDUFJPQkUgaXMgbm90IHNldAorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0lOVEVMRVhUIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CitDT05GSUdfTVREX1JBTT15CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU09MVVRJT05FTkdJTkUgaXMgbm90IHNldAorQ09ORklHX01URF9TSDc3MTBWT0lQR1c9eQorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKworIworIyBOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgT25lTkFORCBGbGFzaCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIFBhcmFsbGVsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgUGx1ZyBhbmQgUGxheSBzdXBwb3J0CisjCisKKyMKKyMgQmxvY2sgZGV2aWNlcworIworIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lOSVRSRCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisKKyMKKyMgQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydAorIworIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0kgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgSTJPIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFVOIGlzIG5vdCBzZXQKKworIworIyBQSFkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BIWUxJQiBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwIG9yIDEwME1iaXQpCisjCitDT05GSUdfTkVUX0VUSEVSTkVUPXkKKyMgQ09ORklHX01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19TVE5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUM5MVggaXMgbm90IHNldAorIyBDT05GSUdfTkUyMDAwIGlzIG5vdCBzZXQKKworIworIyBFdGhlcm5ldCAoMTAwMCBNYml0KQorIworCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworIyBDT05GSUdfTkVUX1JBRElPIGlzIG5vdCBzZXQKKworIworIyBXYW4gaW50ZXJmYWNlcworIworIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCitDT05GSUdfUEhPTkU9eQorIyBDT05GSUdfUEhPTkVfSVhKIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCisjIENPTkZJR19JTlBVVF9NT1VTRURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworIyBDT05GSUdfVlQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworIyBDT05GSUdfU0VSSUFMXzgyNTAgaXMgbm90IHNldAorCisjCisjIE5vbi04MjUwIHNlcmlhbCBwb3J0IHN1cHBvcnQKKyMKK0NPTkZJR19TRVJJQUxfU0hfU0NJPXkKK0NPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1VOSVg5OF9QVFlTIGlzIG5vdCBzZXQKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfSFVHRVRMQkZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CitDT05GSUdfUkFNRlM9eQorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfRlM9eQorQ09ORklHX0pGRlMyX0ZTX0RFQlVHPTAKK0NPTkZJR19KRkZTMl9GU19XUklURUJVRkZFUj15CisjIENPTkZJR19KRkZTMl9TVU1NQVJZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0NPTVBSRVNTSU9OX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1pMSUI9eQorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIEZpbGUgU3lzdGVtcworIworIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHXzlQX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKworIworIyBOYXRpdmUgTGFuZ3VhZ2UgU3VwcG9ydAorIworIyBDT05GSUdfTkxTIGlzIG5vdCBzZXQKKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MgaXMgbm90IHNldAorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisKKyMKKyMgQ3J5cHRvZ3JhcGhpYyBvcHRpb25zCisjCisjIENPTkZJR19DUllQVE8gaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIGNyeXB0byBkZXZpY2VzCisjCisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19MSUJDUkMzMkMgaXMgbm90IHNldAorQ09ORklHX1pMSUJfSU5GTEFURT15CitDT05GSUdfWkxJQl9ERUZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy9zaG1pbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4MmIzYmQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3Mvc2htaW5fZGVmY29uZmlnCkBAIC0wLDAgKzEsODI3IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTcKKyMgV2VkIEF1ZyAgMiAwMTo0NTowMyAyMDA2CisjCitDT05GSUdfU1VQRVJIPXkKK0NPTkZJR19SV1NFTV9HRU5FUklDX1NQSU5MT0NLPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19IQVJESVJRUz15CitDT05GSUdfR0VORVJJQ19JUlFfUFJPQkU9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19QVFJBQ0U9eQorCisjCisjIENvZGUgbWF0dXJpdHkgbGV2ZWwgb3B0aW9ucworIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0xPQ0FMVkVSU0lPTj0iIgorQ09ORklHX0xPQ0FMVkVSU0lPTl9BVVRPPXkKKyMgQ09ORklHX1NXQVAgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVklQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QT1NJWF9NUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNDVEwgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorIyBDT05GSUdfSUtDT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX1VJRDE2IGlzIG5vdCBzZXQKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfRU1CRURERUQ9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKKyMgQ09ORklHX0JVRyBpcyBub3Qgc2V0CisjIENPTkZJR19FTEZfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19CQVNFX0ZVTEwgaXMgbm90IHNldAorIyBDT05GSUdfRlVURVggaXMgbm90IHNldAorIyBDT05GSUdfRVBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfU0hNRU0gaXMgbm90IHNldAorIyBDT05GSUdfU0xBQiBpcyBub3Qgc2V0CitDT05GSUdfVElOWV9TSE1FTT15CitDT05GSUdfQkFTRV9TTUFMTD0xCitDT05GSUdfU0xPQj15CitDT05GSUdfT0JTT0xFVEVfSU5URVJNT0RVTEU9eQorCisjCisjIExvYWRhYmxlIG1vZHVsZSBzdXBwb3J0CisjCisjIENPTkZJR19NT0RVTEVTIGlzIG5vdCBzZXQKKworIworIyBCbG9jayBsYXllcgorIworIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTRiBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CisjIENPTkZJR19JT1NDSEVEX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lPU0NIRURfREVBRExJTkUgaXMgbm90IHNldAorIyBDT05GSUdfSU9TQ0hFRF9DRlEgaXMgbm90IHNldAorIyBDT05GSUdfREVGQVVMVF9BUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZBVUxUX05PT1A9eQorQ09ORklHX0RFRkFVTFRfSU9TQ0hFRD0ibm9vcCIKKworIworIyBTeXN0ZW0gdHlwZQorIworIyBDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3MDlfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzc3NTFfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzczMDBfU09MVVRJT05fRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIXzczMTgwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NZU1RFTUggaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RCMV9IQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NUQjFfT1ZFUkRSSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0hQNlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0NRUkVFSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9ETUlEQSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9FQzMxMDQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0FUVVJOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0RSRUFNQ0FTVCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9DQVQ2ODcwMSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9CSUdTVVIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0gyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0FEWCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9NUEMxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX1NIMDMgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0VDVVJFRURHRTU0MTAgaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFM3NzUxUlZPSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hfUlRTNzc1MVIyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9SNzc4MFJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9USVRBTiBpcyBub3Qgc2V0CitDT05GSUdfU0hfU0hNSU49eQorIyBDT05GSUdfU0hfVU5LTk9XTiBpcyBub3Qgc2V0CisKKyMKKyMgUHJvY2Vzc29yIHNlbGVjdGlvbgorIworQ09ORklHX0NQVV9TSDM9eQorCisjCisjIFNILTIgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzYwNCBpcyBub3Qgc2V0CisKKyMKKyMgU0gtMyBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2PXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKworIworIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMiBpcyBub3Qgc2V0CisKKyMKKyMgU1Q0MCBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MEdYMSBpcyBub3Qgc2V0CisKKyMKKyMgU0gtNEEgUHJvY2Vzc29yIFN1cHBvcnQKKyMKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCBpcyBub3Qgc2V0CisKKyMKKyMgTWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucworIworQ09ORklHX01NVT15CitDT05GSUdfUEFHRV9PRkZTRVQ9MHg4MDAwMDAwMAorQ09ORklHX01FTU9SWV9TVEFSVD0weDBjMDAwMDAwCitDT05GSUdfTUVNT1JZX1NJWkU9MHgwMDgwMDAwMAorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorIyBDT05GSUdfU1BBUlNFTUVNX1NUQVRJQyBpcyBub3Qgc2V0CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3IgZmVhdHVyZXMKKyMKK0NPTkZJR19DUFVfTElUVExFX0VORElBTj15CisjIENPTkZJR19TSF9GUFVfRU1VIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0RTUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9BREMgaXMgbm90IHNldAorQ09ORklHX0NQVV9IQVNfSU5URVZUPXkKK0NPTkZJR19DUFVfSEFTX1NSX1JCPXkKKworIworIyBUaW1lciBzdXBwb3J0CisjCitDT05GSUdfU0hfVE1VPXkKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzIwMDAwMDAKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworIyBDT05GSUdfU0hfRE1BIGlzIG5vdCBzZXQKKworIworIyBDb21wYW5pb24gQ2hpcHMKKyMKKyMgQ09ORklHX0hENjQ0NlhfU0VSSUVTIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgZmVhdHVyZXMKKyMKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFQgaXMgbm90IHNldAorIyBDT05GSUdfU01QIGlzIG5vdCBzZXQKKworIworIyBCb290IG9wdGlvbnMKKyMKK0NPTkZJR19aRVJPX1BBR0VfT0ZGU0VUPTB4MDAwMDEwMDAKK0NPTkZJR19CT09UX0xJTktfT0ZGU0VUPTB4MDAyMTAwMDAKKyMgQ09ORklHX1VCQ19XQUtFVVAgaXMgbm90IHNldAorQ09ORklHX0NNRExJTkVfQk9PTD15CitDT05GSUdfQ01ETElORT0iY29uc29sZT10dHlTQzEsMTE1MjAwIHJvb3Q9MWYwMSBtdGRwYXJ0cz1waHlzX21hcHBlZF9mbGFzaDo2NGsoZmlybSlybywtKHN5cykgbmV0ZGV2PTM0LDB4MzAwLGV0aDAgIgorCisjCisjIEJ1cyBvcHRpb25zCisjCisjIENPTkZJR19QQ0kgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworCisjCisjIEV4ZWN1dGFibGUgZmlsZSBmb3JtYXRzCisjCitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfRkxBVCBpcyBub3Qgc2V0CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CisKKyMKKyMgUG93ZXIgbWFuYWdlbWVudCBvcHRpb25zIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29ya2luZworIworQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCisjIENPTkZJR19ORVRERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQUNLRVQgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorIyBDT05GSUdfTkVUX0tFWSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CisjIENPTkZJR19JUF9NVUxUSUNBU1QgaXMgbm90IHNldAorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfUE5QPXkKKyMgQ09ORklHX0lQX1BOUF9ESENQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX1BOUF9CT09UUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQklDPXkKKyMgQ09ORklHX0lQVjYgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVDZfVFVOTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUiBpcyBub3Qgc2V0CisKKyMKKyMgRENDUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKKworIworIyBTQ1RQIENvbmZpZ3VyYXRpb24gKEVYUEVSSU1FTlRBTCkKKyMKKyMgQ09ORklHX0lQX1NDVFAgaXMgbm90IHNldAorCisjCisjIFRJUEMgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfVElQQyBpcyBub3Qgc2V0CisjIENPTkZJR19BVE0gaXMgbm90IHNldAorIyBDT05GSUdfQlJJREdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9ESVZFUlQgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorCisjCisjIFFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZworIworIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFODAyMTEgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKworIworIyBDb25uZWN0b3IgLSB1bmlmaWVkIHVzZXJzcGFjZSA8LT4ga2VybmVsc3BhY2UgbGlua2VyCisjCisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorCisjCisjIE1lbW9yeSBUZWNobm9sb2d5IERldmljZXMgKE1URCkKKyMKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DT05DQVQgaXMgbm90IHNldAorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ01ETElORV9QQVJUUz15CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKKyMgQ09ORklHX01URF9DSEFSIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9DRkkgaXMgbm90IHNldAorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09CU09MRVRFX0NISVBTIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVA9eQorQ09ORklHX01URF9QSFlTTUFQX1NUQVJUPTB4YTAwMDAwMDAKK0NPTkZJR19NVERfUEhZU01BUF9MRU49MHg4MDAwMAorQ09ORklHX01URF9QSFlTTUFQX0JBTktXSURUSD0xCisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorCisjCisjIE5BTkQgRmxhc2ggRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKworIworIyBPbmVOQU5EIEZsYXNoIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgUGFyYWxsZWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19QQVJQT1JUIGlzIG5vdCBzZXQKKworIworIyBQbHVnIGFuZCBQbGF5IHN1cHBvcnQKKyMKKworIworIyBCbG9jayBkZXZpY2VzCisjCisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JTklUUkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFfT1ZFUl9FVEggaXMgbm90IHNldAorCisjCisjIEFUQS9BVEFQSS9NRk0vUkxMIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJIGlzIG5vdCBzZXQKKworIworIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQorIworIyBDT05GSUdfTUQgaXMgbm90IHNldAorCisjCisjIEZ1c2lvbiBNUFQgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEkyTyBkZXZpY2Ugc3VwcG9ydAorIworCisjCisjIE5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX0RVTU1ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPTkRJTkcgaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19QSFlMSUIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CisjIENPTkZJR19NSUkgaXMgbm90IHNldAorIyBDT05GSUdfU1ROSUMgaXMgbm90IHNldAorIyBDT05GSUdfU01DOTFYIGlzIG5vdCBzZXQKK0NPTkZJR19ORTIwMDA9eQorCisjCisjIEV0aGVybmV0ICgxMDAwIE1iaXQpCisjCisKKyMKKyMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCisjCisKKyMKKyMgVG9rZW4gUmluZyBkZXZpY2VzCisjCisKKyMKKyMgV2lyZWxlc3MgTEFOIChub24taGFtcmFkaW8pCisjCisjIENPTkZJR19ORVRfUkFESU8gaXMgbm90IHNldAorCisjCisjIFdhbiBpbnRlcmZhY2VzCisjCisjIENPTkZJR19XQU4gaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfU0hBUEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKworIworIyBJU0ROIHN1YnN5c3RlbQorIworIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisKKyMKKyMgVGVsZXBob255IFN1cHBvcnQKKyMKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCisjIENPTkZJR19TRVJJQUxfODI1MCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworQ09ORklHX1NFUklBTF9TSF9TQ0k9eQorQ09ORklHX1NFUklBTF9TSF9TQ0lfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRT15CitDT05GSUdfU0VSSUFMX0NPUkU9eQorQ09ORklHX1NFUklBTF9DT1JFX0NPTlNPTEU9eQorQ09ORklHX1VOSVg5OF9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWV9DT1VOVD0yNTYKKworIworIyBJUE1JCisjCisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisjIENPTkZJR19SVEMgaXMgbm90IHNldAorIyBDT05GSUdfR0VOX1JUQyBpcyBub3Qgc2V0CisjIENPTkZJR19EVExLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1IzOTY0IGlzIG5vdCBzZXQKKworIworIyBGdGFwZSwgdGhlIGZsb3BweSB0YXBlIGRldmljZSBkcml2ZXIKKyMKKyMgQ09ORklHX1JBV19EUklWRVIgaXMgbm90IHNldAorCisjCisjIFRQTSBkZXZpY2VzCisjCisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RFTENMT0NLIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3VwcG9ydAorIworIyBDT05GSUdfSTJDIGlzIG5vdCBzZXQKKworIworIyBTUEkgc3VwcG9ydAorIworIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQSV9NQVNURVIgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorQ09ORklHX1ZJREVPX1Y0TDI9eQorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9BUkNIX0hBU19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX09IQ0kgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0kgaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBVU0IgR2FkZ2V0IFN1cHBvcnQKKyMKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE1NQy9TRCBDYXJkIHN1cHBvcnQKKyMKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisKKyMKKyMgTEVEIGRldmljZXMKKyMKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKworIworIyBMRUQgZHJpdmVycworIworCisjCisjIExFRCBUcmlnZ2VycworIworCisjCisjIEluZmluaUJhbmQgc3VwcG9ydAorIworCisjCisjIEVEQUMgLSBlcnJvciBkZXRlY3Rpb24gYW5kIHJlcG9ydGluZyAoUkFTKSAoRVhQRVJJTUVOVEFMKQorIworCisjCisjIFJlYWwgVGltZSBDbG9jaworIworIyBDT05GSUdfUlRDX0NMQVNTIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKKyMgQ09ORklHX0VYVDJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19ST01GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTk9USUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ROT1RJRlkgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfSVNPOTY2MF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VREZfRlMgaXMgbm90IHNldAorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX01TRE9TX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZGQVRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CisjIENPTkZJR19QUk9DX0tDT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19DUkFNRlM9eQorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfUk9PVF9ORlM9eQorQ09ORklHX0xPQ0tEPXkKK0NPTkZJR19MT0NLRF9WND15CitDT05GSUdfTkZTX0NPTU1PTj15CitDT05GSUdfU1VOUlBDPXkKKyMgQ09ORklHX1JQQ1NFQ19HU1NfS1JCNSBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX1NQS00zIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05DUF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DT0RBX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR185UF9GUyBpcyBub3Qgc2V0CisKKyMKKyMgUGFydGl0aW9uIFR5cGVzCisjCisjIENPTkZJR19QQVJUSVRJT05fQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisKKyMKKyMgTmF0aXZlIExhbmd1YWdlIFN1cHBvcnQKKyMKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisKKyMKKyMgUHJvZmlsaW5nIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BR0lDX1NZU1JRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tFUk5FTCBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfVU5XSU5EX0lORk8gaXMgbm90IHNldAorQ09ORklHX1NIX1NUQU5EQVJEX0JJT1M9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKKyMgQ09ORklHX0NSWVBUTyBpcyBub3Qgc2V0CisKKyMKKyMgSGFyZHdhcmUgY3J5cHRvIGRldmljZXMKKyMKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCisjIENPTkZJR19DUkNfQ0NJVFQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvY29uZmlncy90aXRhbl9kZWZjb25maWcgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkYjI5MDQKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2NvbmZpZ3MvdGl0YW5fZGVmY29uZmlnCkBAIC0wLDAgKzEsMTM2NyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE0LXNoCisjIFdlZCBOb3YgIDkgMDA6MzU6NTYgMjAwNQorIworQ09ORklHX1NVUEVSSD15CitDT05GSUdfVUlEMTY9eQorQ09ORklHX1JXU0VNX0dFTkVSSUNfU1BJTkxPQ0s9eQorQ09ORklHX0dFTkVSSUNfSEFSRElSUVM9eQorQ09ORklHX0dFTkVSSUNfSVJRX1BST0JFPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19JT01BUD15CisKKyMKKyMgQ29kZSBtYXR1cml0eSBsZXZlbCBvcHRpb25zCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19DTEVBTl9DT01QSUxFPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfS09CSkVDVF9VRVZFTlQ9eQorQ09ORklHX0lLQ09ORklHPXkKK0NPTkZJR19JS0NPTkZJR19QUk9DPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19FTUJFRERFRCBpcyBub3Qgc2V0CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0NDX0FMSUdOX0ZVTkNUSU9OUz0wCitDT05GSUdfQ0NfQUxJR05fTEFCRUxTPTAKK0NPTkZJR19DQ19BTElHTl9MT09QUz0wCitDT05GSUdfQ0NfQUxJR05fSlVNUFM9MAorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCisKKyMKKyMgTG9hZGFibGUgbW9kdWxlIHN1cHBvcnQKKyMKK0NPTkZJR19NT0RVTEVTPXkKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKK0NPTkZJR19PQlNPTEVURV9NT0RQQVJNPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfS01PRD15CisKKyMKKyMgU3lzdGVtIHR5cGUKKyMKKyMgQ09ORklHX1NIX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83NzUxX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzAwX1NPTFVUSU9OX0VOR0lORSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF83MzE4MF9TT0xVVElPTl9FTkdJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfNzc1MV9TWVNURU1IIGlzIG5vdCBzZXQKK0NPTkZJR19TSF9USVRBTj15CisjIENPTkZJR19TSF9TVEIxX0hBUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RCMV9PVkVSRFJJVkUgaXMgbm90IHNldAorIyBDT05GSUdfU0hfSFA2WFggaXMgbm90IHNldAorIyBDT05GSUdfU0hfQ1FSRUVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0RNSURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VDMzEwNCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TQVRVUk4gaXMgbm90IHNldAorIyBDT05GSUdfU0hfRFJFQU1DQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0NBVDY4NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0JJR1NVUiBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0hfQURYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX01QQzEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU0gwMyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9IUzc3NTFSVk9JUCBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9SVFM3NzUxUjJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX0VET1NLNzcwNSBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9TSDQyMDJfTUlDUk9ERVYgaXMgbm90IHNldAorIyBDT05GSUdfU0hfTEFORElTSyBpcyBub3Qgc2V0CisjIENPTkZJR19TSF9VTktOT1dOIGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc2VsZWN0aW9uCisjCitDT05GSUdfQ1BVX1NIND15CisKKyMKKyMgU0gtMiBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NjA0IGlzIG5vdCBzZXQKKworIworIyBTSC0zIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNyBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDggaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5IGlzIG5vdCBzZXQKKworIworIyBTSC00IFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MDkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUwUyBpcyBub3Qgc2V0CitDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxPXkKK0NPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTFSPXkKKyMgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyIGlzIG5vdCBzZXQKKworIworIyBTVDQwIFByb2Nlc3NvciBTdXBwb3J0CisjCisjIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TVDQwR1gxIGlzIG5vdCBzZXQKKworIworIyBTSC00QSBQcm9jZXNzb3IgU3VwcG9ydAorIworIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zCisjCitDT05GSUdfTU1VPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorCisjCisjIENhY2hlIGNvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX1NIX0RJUkVDVF9NQVBQRUQgaXMgbm90IHNldAorIyBDT05GSUdfU0hfV1JJVEVUSFJPVUdIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIX09DUkFNIGlzIG5vdCBzZXQKK0NPTkZJR19NRU1PUllfU1RBUlQ9MHgwODAzMDAwMAorQ09ORklHX01FTU9SWV9TSVpFPTB4N2ZkMDAwMAorCisjCisjIFByb2Nlc3NvciBmZWF0dXJlcworIworQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19TSF9SVEM9eQorQ09ORklHX1NIX0ZQVT15CisjIENPTkZJR19TSF9TVE9SRV9RVUVVRVMgaXMgbm90IHNldAorCisjCisjIFRpbWVyIHN1cHBvcnQKKyMKK0NPTkZJR19TSF9UTVU9eQorQ09ORklHX1NIX1BDTEtfRlJFUV9CT09MPXkKK0NPTkZJR19TSF9QQ0xLX0ZSRVE9MzAwMDAwMDAKKworIworIyBDUFUgRnJlcXVlbmN5IHNjYWxpbmcKKyMKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKworIworIyBETUEgc3VwcG9ydAorIworQ09ORklHX1NIX0RNQT15CitDT05GSUdfTlJfT05DSElQX0RNQV9DSEFOTkVMUz04CisjIENPTkZJR19OUl9ETUFfQ0hBTk5FTFNfQk9PTCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcGFuaW9uIENoaXBzCisjCisjIENPTkZJR19IRDY0NDZYX1NFUklFUyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIGZlYXR1cmVzCisjCisjIENPTkZJR19LRVhFQyBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNUCBpcyBub3Qgc2V0CisKKyMKKyMgQm9vdCBvcHRpb25zCisjCitDT05GSUdfWkVST19QQUdFX09GRlNFVD0weDAwMDAxMDAwCitDT05GSUdfQk9PVF9MSU5LX09GRlNFVD0weDAwOWUwMDAwCisjIENPTkZJR19VQkNfV0FLRVVQIGlzIG5vdCBzZXQKK0NPTkZJR19DTURMSU5FX0JPT0w9eQorQ09ORklHX0NNRExJTkU9ImNvbnNvbGU9dHR5U0MxLDM4NDAwTjgxIHJvb3Q9L2Rldi9uZnMgaXA9Ojo6OjpldGgxOmF1dG9jb25mIgorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfUENJPXkKK0NPTkZJR19TSF9QQ0lETUFfTk9OQ09IRVJFTlQ9eQorQ09ORklHX1BDSV9BVVRPPXkKK0NPTkZJR19QQ0lfQVVUT19VUERBVEVfUkVTT1VSQ0VTPXkKK0NPTkZJR19QQ0lfTEVHQUNZX1BST0M9eQorI0NPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIFBDQ0FSRCAoUENNQ0lBL0NhcmRCdXMpIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BDQ0FSRCBpcyBub3Qgc2V0CisKKyMKKyMgUENJIEhvdHBsdWcgU3VwcG9ydAorIworQ09ORklHX0hPVFBMVUdfUENJPXkKKyMgQ09ORklHX0hPVFBMVUdfUENJX0ZBS0UgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0lfQ1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19IT1RQTFVHX1BDSV9TSFBDIGlzIG5vdCBzZXQKKworIworIyBFeGVjdXRhYmxlIGZpbGUgZm9ybWF0cworIworQ09ORklHX0JJTkZNVF9FTEY9eQorIyBDT05GSUdfQklORk1UX0ZMQVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmtpbmcKKyMKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX1BBQ0tFVD15CitDT05GSUdfUEFDS0VUX01NQVA9eQorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfS0VZPXkKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUj15CitDT05GSUdfQVNLX0lQX0ZJQl9IQVNIPXkKKyMgQ09ORklHX0lQX0ZJQl9UUklFIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CitDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTPXkKKyMgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSyBpcyBub3Qgc2V0CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfQ0FDSEVEPXkKK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfUlI9bQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9SQU5ET009bQorQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9XUkFORE9NPW0KK0NPTkZJR19JUF9ST1VURV9NVUxUSVBBVEhfRFJSPW0KKyMgQ09ORklHX0lQX1JPVVRFX1ZFUkJPU0UgaXMgbm90IHNldAorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CitDT05GSUdfSVBfUE5QX1JBUlA9eQorQ09ORklHX05FVF9JUElQPW0KK0NPTkZJR19ORVRfSVBHUkU9bQorQ09ORklHX05FVF9JUEdSRV9CUk9BRENBU1Q9eQorQ09ORklHX0lQX01ST1VURT15CitDT05GSUdfSVBfUElNU01fVjE9eQorQ09ORklHX0lQX1BJTVNNX1YyPXkKKyMgQ09ORklHX0FSUEQgaXMgbm90IHNldAorQ09ORklHX1NZTl9DT09LSUVTPXkKK0NPTkZJR19JTkVUX0FIPW0KK0NPTkZJR19JTkVUX0VTUD1tCitDT05GSUdfSU5FVF9JUENPTVA9bQorQ09ORklHX0lORVRfVFVOTkVMPW0KK0NPTkZJR19JTkVUX0RJQUc9bQorQ09ORklHX0lORVRfVENQX0RJQUc9bQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0JJQz15CisKKyMKKyMgSVA6IFZpcnR1YWwgU2VydmVyIENvbmZpZ3VyYXRpb24KKyMKKyMgQ09ORklHX0lQX1ZTIGlzIG5vdCBzZXQKK0NPTkZJR19JUFY2PW0KK0NPTkZJR19JUFY2X1BSSVZBQ1k9eQorQ09ORklHX0lORVQ2X0FIPW0KK0NPTkZJR19JTkVUNl9FU1A9bQorQ09ORklHX0lORVQ2X0lQQ09NUD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JUFY2X1RVTk5FTD1tCitDT05GSUdfTkVURklMVEVSPXkKKyMgQ09ORklHX05FVEZJTFRFUl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX1FVRVVFPW0KK0NPTkZJR19ORVRGSUxURVJfTkVUTElOS19MT0c9bQorCisjCisjIElQOiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQX05GX0NPTk5UUkFDSz1tCitDT05GSUdfSVBfTkZfQ1RfQUNDVD15CitDT05GSUdfSVBfTkZfQ09OTlRSQUNLX01BUks9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19FVkVOVFM9eQorQ09ORklHX0lQX05GX0NPTk5UUkFDS19ORVRMSU5LPW0KKyMgQ09ORklHX0lQX05GX0NUX1BST1RPX1NDVFAgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0ZUUD1tCitDT05GSUdfSVBfTkZfSVJDPW0KK0NPTkZJR19JUF9ORl9ORVRCSU9TX05TPW0KK0NPTkZJR19JUF9ORl9URlRQPW0KKyMgQ09ORklHX0lQX05GX0FNQU5EQSBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUFBUUD1tCitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSVBSQU5HRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTUFDPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9QS1RUWVBFPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NQVJLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9NVUxUSVBPUlQ9bQorQ09ORklHX0lQX05GX01BVENIX1RPUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVDRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9FQ049bQorQ09ORklHX0lQX05GX01BVENIX0RTQ1A9bQorQ09ORklHX0lQX05GX01BVENIX0FIX0VTUD1tCitDT05GSUdfSVBfTkZfTUFUQ0hfTEVOR1RIPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX01BVENIX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfSEVMUEVSPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9TVEFURT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTlRSQUNLPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9PV05FUj1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCitDT05GSUdfSVBfTkZfTUFUQ0hfUkVBTE09bQorIyBDT05GSUdfSVBfTkZfTUFUQ0hfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9ORl9NQVRDSF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9NQVRDSF9DT01NRU5UPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfTUFUQ0hfQ09OTkJZVEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9IQVNITElNSVQ9bQorQ09ORklHX0lQX05GX01BVENIX1NUUklORz1tCitDT05GSUdfSVBfTkZfRklMVEVSPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfUkVKRUNUPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfVUxPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RDUE1TUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05GUVVFVUU9bQorQ09ORklHX0lQX05GX05BVD1tCitDT05GSUdfSVBfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRURJUkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX05FVE1BUD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1NBTUU9bQorQ09ORklHX0lQX05GX05BVF9TTk1QX0JBU0lDPW0KK0NPTkZJR19JUF9ORl9OQVRfSVJDPW0KK0NPTkZJR19JUF9ORl9OQVRfRlRQPW0KK0NPTkZJR19JUF9ORl9OQVRfVEZUUD1tCitDT05GSUdfSVBfTkZfTkFUX1BQVFA9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1RPUz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0RTQ1A9bQorQ09ORklHX0lQX05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfQ0xBU1NJRlk9bQorQ09ORklHX0lQX05GX1RBUkdFVF9UVEw9bQorQ09ORklHX0lQX05GX1RBUkdFVF9DT05OTUFSSz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0NMVVNURVJJUD1tCitDT05GSUdfSVBfTkZfUkFXPW0KK0NPTkZJR19JUF9ORl9UQVJHRVRfTk9UUkFDSz1tCitDT05GSUdfSVBfTkZfQVJQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9BUlBGSUxURVI9bQorQ09ORklHX0lQX05GX0FSUF9NQU5HTEU9bQorCisjCisjIElQdjY6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCitDT05GSUdfSVA2X05GX1FVRVVFPW0KK0NPTkZJR19JUDZfTkZfSVBUQUJMRVM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9MSU1JVD1tCitDT05GSUdfSVA2X05GX01BVENIX01BQz1tCitDT05GSUdfSVA2X05GX01BVENIX1JUPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfT1BUUz1tCitDT05GSUdfSVA2X05GX01BVENIX0ZSQUc9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX01VTFRJUE9SVD1tCitDT05GSUdfSVA2X05GX01BVENIX09XTkVSPW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfTUFSSz1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9BSEVTUD1tCitDT05GSUdfSVA2X05GX01BVENIX0xFTkdUSD1tCitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9QSFlTREVWIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTkZRVUVVRT1tCitDT05GSUdfSVA2X05GX01BTkdMRT1tCitDT05GSUdfSVA2X05GX1RBUkdFVF9NQVJLPW0KK0NPTkZJR19JUDZfTkZfVEFSR0VUX0hMPW0KK0NPTkZJR19JUDZfTkZfUkFXPW0KKworIworIyBCcmlkZ2U6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19CUklER0VfTkZfRUJUQUJMRVMgaXMgbm90IHNldAorCisjCisjIERDQ1AgQ29uZmlndXJhdGlvbiAoRVhQRVJJTUVOVEFMKQorIworIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisKKyMKKyMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCisjCisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CitDT05GSUdfQlJJREdFPW0KK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRElWRVJUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIRUQ9eQorQ09ORklHX05FVF9TQ0hfQ0xLX0pJRkZJRVM9eQorIyBDT05GSUdfTkVUX1NDSF9DTEtfR0VUVElNRU9GREFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hfQ0xLX0NQVSBpcyBub3Qgc2V0CitDT05GSUdfTkVUX1NDSF9DQlE9bQorQ09ORklHX05FVF9TQ0hfSFRCPW0KK0NPTkZJR19ORVRfU0NIX0hGU0M9bQorQ09ORklHX05FVF9TQ0hfUFJJTz1tCitDT05GSUdfTkVUX1NDSF9SRUQ9bQorQ09ORklHX05FVF9TQ0hfU0ZRPW0KK0NPTkZJR19ORVRfU0NIX1RFUUw9bQorQ09ORklHX05FVF9TQ0hfVEJGPW0KK0NPTkZJR19ORVRfU0NIX0dSRUQ9bQorQ09ORklHX05FVF9TQ0hfRFNNQVJLPW0KK0NPTkZJR19ORVRfU0NIX05FVEVNPW0KK0NPTkZJR19ORVRfU0NIX0lOR1JFU1M9bQorQ09ORklHX05FVF9RT1M9eQorQ09ORklHX05FVF9FU1RJTUFUT1I9eQorQ09ORklHX05FVF9DTFM9eQorQ09ORklHX05FVF9DTFNfQkFTSUM9bQorQ09ORklHX05FVF9DTFNfVENJTkRFWD1tCitDT05GSUdfTkVUX0NMU19ST1VURTQ9bQorQ09ORklHX05FVF9DTFNfUk9VVEU9eQorQ09ORklHX05FVF9DTFNfRlc9bQorQ09ORklHX05FVF9DTFNfVTMyPW0KK0NPTkZJR19DTFNfVTMyX1BFUkY9eQorQ09ORklHX05FVF9DTFNfSU5EPXkKK0NPTkZJR19DTFNfVTMyX01BUks9eQorQ09ORklHX05FVF9DTFNfUlNWUD1tCitDT05GSUdfTkVUX0NMU19SU1ZQNj1tCitDT05GSUdfTkVUX0VNQVRDSD15CitDT05GSUdfTkVUX0VNQVRDSF9TVEFDSz0zMgorQ09ORklHX05FVF9FTUFUQ0hfQ01QPW0KK0NPTkZJR19ORVRfRU1BVENIX05CWVRFPW0KK0NPTkZJR19ORVRfRU1BVENIX1UzMj1tCitDT05GSUdfTkVUX0VNQVRDSF9NRVRBPW0KK0NPTkZJR19ORVRfRU1BVENIX1RFWFQ9bQorQ09ORklHX05FVF9DTFNfQUNUPXkKK0NPTkZJR19ORVRfQUNUX1BPTElDRT1tCitDT05GSUdfTkVUX0FDVF9HQUNUPW0KK0NPTkZJR19HQUNUX1BST0I9eQorQ09ORklHX05FVF9BQ1RfTUlSUkVEPW0KK0NPTkZJR19ORVRfQUNUX0lQVD1tCitDT05GSUdfTkVUX0FDVF9QRURJVD1tCisjIENPTkZJR19ORVRfQUNUX1NJTVAgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfU1RBTkRBTE9ORT15CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPW0KKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgQ29ubmVjdG9yIC0gdW5pZmllZCB1c2Vyc3BhY2UgPC0+IGtlcm5lbHNwYWNlIGxpbmtlcgorIworQ09ORklHX0NPTk5FQ1RPUj1tCisKKyMKKyMgTWVtb3J5IFRlY2hub2xvZ3kgRGV2aWNlcyAoTVREKQorIworIyBDT05GSUdfTVREIGlzIG5vdCBzZXQKKworIworIyBQYXJhbGxlbCBwb3J0IHN1cHBvcnQKKyMKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorCisjCisjIFBsdWcgYW5kIFBsYXkgc3VwcG9ydAorIworCisjCisjIEJsb2NrIGRldmljZXMKKyMKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfU1NGREM9eQorIyBDT05GSUdfQkxLX0RFVl9VTUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ09XX0NPTU1PTiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9MT09QPW0KKyMgQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTQwOTYKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CisjIENPTkZJR19MQkQgaXMgbm90IHNldAorIyBDT05GSUdfQ0RST01fUEtUQ0RWRCBpcyBub3Qgc2V0CisKKyMKKyMgSU8gU2NoZWR1bGVycworIworQ09ORklHX0lPU0NIRURfTk9PUD15CitDT05GSUdfSU9TQ0hFRF9BUz15CitDT05GSUdfSU9TQ0hFRF9ERUFETElORT15CitDT05GSUdfSU9TQ0hFRF9DRlE9eQorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKworIworIyBBVEEvQVRBUEkvTUZNL1JMTCBzdXBwb3J0CisjCisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9bQorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPW0KKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1NSPW0KKyMgQ09ORklHX0JMS19ERVZfU1JfVkVORE9SIGlzIG5vdCBzZXQKK0NPTkZJR19DSFJfREVWX1NHPW0KKyMgQ09ORklHX0NIUl9ERVZfU0NIIGlzIG5vdCBzZXQKKworIworIyBTb21lIFNDU0kgZGV2aWNlcyAoZS5nLiBDRCBqdWtlYm94KSBzdXBwb3J0IG11bHRpcGxlIExVTnMKKyMKKyMgQ09ORklHX1NDU0lfTVVMVElfTFVOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQ09OU1RBTlRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBUcmFuc3BvcnQgQXR0cmlidXRlcworIworIyBDT05GSUdfU0NTSV9TUElfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GQ19BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lTQ1NJX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU0FTX0FUVFJTIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCisjCisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRFBUX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9RTEEyWFhYPW0KKyMgQ09ORklHX1NDU0lfUUxBMjFYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTIyWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBMjMyMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQTYzMTIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEEyNFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorCisjCisjIE11bHRpLWRldmljZSBzdXBwb3J0IChSQUlEIGFuZCBMVk0pCisjCisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisKKyMKKyMgRnVzaW9uIE1QVCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TUEkgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTl9TQVMgaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKworIworIyBJMk8gZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisKKyMKKyMgQVJDbmV0IGRldmljZXMKKyMKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CisKKyMKKyMgUEhZIGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfUEhZTElCPW0KK0NPTkZJR19QSFlDT05UUk9MPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9bQorQ09ORklHX0RBVklDT01fUEhZPW0KK0NPTkZJR19RU0VNSV9QSFk9bQorQ09ORklHX0xYVF9QSFk9bQorQ09ORklHX0NJQ0FEQV9QSFk9bQorCisjCisjIEV0aGVybmV0ICgxMCBvciAxMDBNYml0KQorIworQ09ORklHX05FVF9FVEhFUk5FVD15CitDT05GSUdfTUlJPXkKKyMgQ09ORklHX1NUTklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorQ09ORklHX0NBU1NJTkk9bQorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNQzkxWCBpcyBub3Qgc2V0CisKKyMKKyMgVHVsaXAgZmFtaWx5IG5ldHdvcmsgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19ORTIwMDAgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfREdSUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBSTzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZFQUxOWCBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRTRU1JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FMktfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHXzgxMzlDUCBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPTz15CisjIENPTkZJR184MTM5VE9PX1BJTyBpcyBub3Qgc2V0CitDT05GSUdfODEzOVRPT19UVU5FX1RXSVNURVI9eQorIyBDT05GSUdfODEzOVRPT184MTI5IGlzIG5vdCBzZXQKK0NPTkZJR184MTM5X09MRF9SWF9SRVNFVD15CisjIENPTkZJR19TSVM5MDAgaXMgbm90IHNldAorIyBDT05GSUdfRVBJQzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5EQU5DRSBpcyBub3Qgc2V0CisjIENPTkZJR19UTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJQV9SSElORSBpcyBub3Qgc2V0CisKKyMKKyMgRXRoZXJuZXQgKDEwMDAgTWJpdCkKKyMKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0s5OExJTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorCisjCisjIEV0aGVybmV0ICgxMDAwMCBNYml0KQorIworIyBDT05GSUdfQ0hFTFNJT19UMSBpcyBub3Qgc2V0CisjIENPTkZJR19JWEdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1MySU8gaXMgbm90IHNldAorCisjCisjIFRva2VuIFJpbmcgZGV2aWNlcworIworIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTiAobm9uLWhhbXJhZGlvKQorIworQ09ORklHX05FVF9SQURJTz15CisKKyMKKyMgT2Jzb2xldGUgV2lyZWxlc3MgY2FyZHMgc3VwcG9ydCAocHJlLTgwMi4xMSkKKyMKKyMgQ09ORklHX1NUUklQIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyA4MDIuMTFiIElTQS9QQ0kgY2FyZHMgc3VwcG9ydAorIworIyBDT05GSUdfSEVSTUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTUVMIGlzIG5vdCBzZXQKKworIworIyBQcmlzbSBHVC9EdWV0dGUgODAyLjExKGEvYi9nKSBQQ0kvQ2FyZGJ1cyBzdXBwb3J0CisjCitDT05GSUdfUFJJU001ND1tCisjIENPTkZJR19IT1NUQVAgaXMgbm90IHNldAorQ09ORklHX05FVF9XSVJFTEVTUz15CisKKyMKKyMgV2FuIGludGVyZmFjZXMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NIQVBFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisKKyMKKyMgSVNETiBzdWJzeXN0ZW0KKyMKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorCisjCisjIFRlbGVwaG9ueSBTdXBwb3J0CisjCisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisKKyMKKyMgVXNlcmxhbmQgaW50ZXJmYWNlcworIworQ09ORklHX0lOUFVUX01PVVNFREVWPXkKKyMgQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVFNERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZERVYgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19WVF9DT05TT0xFPXkKK0NPTkZJR19IV19DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKKyMgQ09ORklHX1NFUklBTF84MjUwIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCitDT05GSUdfU0VSSUFMX1NIX1NDST15CitDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFPXkKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisKKyMKKyMgSVBNSQorIworIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKKworIworIyBXYXRjaGRvZyBDYXJkcworIworIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfUlRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfRFRMSyBpcyBub3Qgc2V0CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisKKyMKKyMgRnRhcGUsIHRoZSBmbG9wcHkgdGFwZSBkZXZpY2UgZHJpdmVyCisjCisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisKKyMKKyMgVFBNIGRldmljZXMKKyMKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorCisjCisjIEkyQyBzdXBwb3J0CisjCisjIENPTkZJR19JMkMgaXMgbm90IHNldAorCisjCisjIERhbGxhcydzIDEtd2lyZSBidXMKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBNb25pdG9yaW5nIHN1cHBvcnQKKyMKK0NPTkZJR19IV01PTj15CisjIENPTkZJR19IV01PTl9WSUQgaXMgbm90IHNldAorIyBDT05GSUdfSFdNT05fREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisKKyMKKyMgTWlzYyBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBDYXBhYmlsaXRpZXMgUG9ydCBkcml2ZXJzCisjCisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorCisjCisjIERpZ2l0YWwgVmlkZW8gQnJvYWRjYXN0aW5nIERldmljZXMKKyMKKyMgQ09ORklHX0RWQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfRkIgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHN1cHBvcnQKKyMKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCPW0KKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CisjIENPTkZJR19VU0JfQkFORFdJRFRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9bQorIyBDT05GSUdfVVNCX0VIQ0lfU1BMSVRfSVNPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxMTZYX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU4gaXMgbm90IHNldAorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorCisjCisjIFVTQiBEZXZpY2UgQ2xhc3MgZHJpdmVycworIworIyBDT05GSUdfVVNCX0JMVUVUT09USF9UVFkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FDTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUFJJTlRFUiBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZW5hYmxlcyBTQ1NJLCBhbmQgJ1NDU0kgZGlzayBzdXBwb3J0JyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9bQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RQQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKKyMgQ09ORklHX1VTQl9ISUQgaXMgbm90IHNldAorCisjCisjIFVTQiBISUQgQm9vdCBQcm90b2NvbCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfS0JEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUlQVEVLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XQUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQUNFQ0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQlRBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUE9XRVJNQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lUTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FR0FMQVggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1lFQUxJTksgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1hQQUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FUSV9SRU1PVEUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE11bHRpbWVkaWEgZGV2aWNlcworIworIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgVmlkZW80TGludXggc3VwcG9ydCBpcyBuZWVkZWQgZm9yIFVTQiBNdWx0aW1lZGlhIGRldmljZSBzdXBwb3J0CisjCisKKyMKKyMgVVNCIE5ldHdvcmsgQWRhcHRlcnMKKyMKKyMgQ09ORklHX1VTQl9DQVRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9LQVdFVEggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BFR0FTVVMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JUTDgxNTAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1VTQk5FVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfWkQxMjAxIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfTU9OPXkKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisKKyMKKyMgVVNCIFNlcmlhbCBDb252ZXJ0ZXIgc3VwcG9ydAorIworQ09ORklHX1VTQl9TRVJJQUw9bQorQ09ORklHX1VTQl9TRVJJQUxfR0VORVJJQz15CisjIENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfV0hJVEVIRUFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRElHSV9BQ0NFTEVQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1AyMTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfQ1lQUkVTU19NOCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VNUEVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRlRESV9TSU8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9WSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0lQQVEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0VER0VQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfRURHRVBPUlRfVEkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9HQVJNSU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9JUFcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LRVlTUEFOX1BEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0tFWVNQQU4gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9LTFNJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUxfTUNUX1UyMzIgaXMgbm90IHNldAorQ09ORklHX1VTQl9TRVJJQUxfUEwyMzAzPW0KKyMgQ09ORklHX1VTQl9TRVJJQUxfSFA0WCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1NBRkUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NFUklBTF9USSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX0NZQkVSSkFDSyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX1hJUkNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VSSUFMX09NTklORVQgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FVRVJTV0FMRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUklPNTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRUdPVE9XRVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVRIRVJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QSElER0VUU0VSVk8gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorCisjCisjIFVTQiBEU0wgbW9kZW0gc3VwcG9ydAorIworCisjCisjIFVTQiBHYWRnZXQgU3VwcG9ydAorIworIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgTU1DL1NEIENhcmQgc3VwcG9ydAorIworIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKworIworIyBJbmZpbmlCYW5kIHN1cHBvcnQKKyMKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorCisjCisjIFNOIERldmljZXMKKyMKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKK0NPTkZJR19FWFQyX0ZTX1hBVFRSPXkKK0NPTkZJR19FWFQyX0ZTX1BPU0lYX0FDTD15CitDT05GSUdfRVhUMl9GU19TRUNVUklUWT15CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0VYVDNfRlNfU0VDVVJJVFk9eQorQ09ORklHX0pCRD15CisjIENPTkZJR19KQkRfREVCVUcgaXMgbm90IHNldAorQ09ORklHX0ZTX01CQ0FDSEU9eQorQ09ORklHX1JFSVNFUkZTX0ZTPW0KKyMgQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFSVNFUkZTX1BST0NfSU5GTyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ZTX1BPU0lYX0FDTD15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0lOT1RJRlk9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorQ09ORklHX0ZVU0VfRlM9bQorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPW0KK0NPTkZJR19KT0xJRVQ9eQorQ09ORklHX1pJU09GUz15CitDT05GSUdfWklTT0ZTX0ZTPW0KK0NPTkZJR19VREZfRlM9bQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9bQorQ09ORklHX01TRE9TX0ZTPW0KK0NPTkZJR19WRkFUX0ZTPW0KK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT00MzcKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9Imlzbzg4NTktMSIKKyMgQ09ORklHX05URlNfRlMgaXMgbm90IHNldAorCisjCisjIFBzZXVkbyBmaWxlc3lzdGVtcworIworQ09ORklHX1BST0NfRlM9eQorQ09ORklHX1BST0NfS0NPUkU9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19IVUdFVExCRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKK0NPTkZJR19SQU1GUz15CitDT05GSUdfUkVMQVlGU19GUz1tCisKKyMKKyMgTWlzY2VsbGFuZW91cyBmaWxlc3lzdGVtcworIworIyBDT05GSUdfQURGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNQTFVTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JFRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUkFNRlMgaXMgbm90IHNldAorIyBDT05GSUdfVlhGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FOWDRGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgTmV0d29yayBGaWxlIFN5c3RlbXMKKyMKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNfRElSRUNUSU8gaXMgbm90IHNldAorQ09ORklHX05GU0Q9eQorQ09ORklHX05GU0RfVjM9eQorIyBDT05GSUdfTkZTRF9WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTRF9WNCBpcyBub3Qgc2V0CitDT05GSUdfTkZTRF9UQ1A9eQorQ09ORklHX1JPT1RfTkZTPXkKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX0VYUE9SVEZTPXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorQ09ORklHX1NNQl9GUz1tCisjIENPTkZJR19TTUJfTkxTX0RFRkFVTFQgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorQ09ORklHXzlQX0ZTPW0KKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQU1JR0FfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQVJJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorIyBDT05GSUdfQlNEX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19NSU5JWF9TVUJQQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU09MQVJJU19YODZfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VOSVhXQVJFX0RJU0tMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19MRE1fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVUxUUklYX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorCisjCisjIE5hdGl2ZSBMYW5ndWFnZSBTdXBwb3J0CisjCitDT05GSUdfTkxTPW0KK0NPTkZJR19OTFNfREVGQVVMVD0iaXNvODg1OS0xIgorQ09ORklHX05MU19DT0RFUEFHRV80Mzc9bQorIyBDT05GSUdfTkxTX0NPREVQQUdFXzczNyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfNzc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1MiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYxIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY0IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85MzYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzk1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NDkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg3NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV84IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV8xMjUxIGlzIG5vdCBzZXQKK0NPTkZJR19OTFNfQVNDSUk9bQorQ09ORklHX05MU19JU084ODU5XzE9bQorIyBDT05GSUdfTkxTX0lTTzg4NTlfMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8zIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV82IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV8xNSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19LT0k4X1UgaXMgbm90IHNldAorQ09ORklHX05MU19VVEY4PW0KKworIworIyBQcm9maWxpbmcgc3VwcG9ydAorIworIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CitDT05GSUdfTUFHSUNfU1lTUlE9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTYKKyMgQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEU1RBVFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX1NMQUI9eQorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZSQU1FX1BPSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyBpcyBub3Qgc2V0CitDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFPXkKKyMgQ09ORklHX0VBUkxZX1BSSU5USyBpcyBub3Qgc2V0CisjIENPTkZJR19LR0RCIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKworIworIyBDcnlwdG9ncmFwaGljIG9wdGlvbnMKKyMKK0NPTkZJR19DUllQVE89eQorQ09ORklHX0NSWVBUT19ITUFDPXkKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ0PW0KK0NPTkZJR19DUllQVE9fTUQ1PW0KK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCitDT05GSUdfQ1JZUFRPX1dQNTEyPW0KK0NPTkZJR19DUllQVE9fVEdSMTkyPW0KK0NPTkZJR19DUllQVE9fREVTPW0KK0NPTkZJR19DUllQVE9fQkxPV0ZJU0g9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fU0VSUEVOVD1tCitDT05GSUdfQ1JZUFRPX0FFUz1tCitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19BUkM0PW0KK0NPTkZJR19DUllQVE9fS0hBWkFEPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fREVGTEFURT1tCitDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDPW0KK0NPTkZJR19DUllQVE9fQ1JDMzJDPW0KKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBjcnlwdG8gZGV2aWNlcworIworCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19DUkNfQ0NJVFQ9bQorQ09ORklHX0NSQzE2PW0KK0NPTkZJR19DUkMzMj15CitDT05GSUdfTElCQ1JDMzJDPW0KK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfVEVYVFNFQVJDSD15CitDT05GSUdfVEVYVFNFQVJDSF9LTVA9bQorQ09ORklHX1RFWFRTRUFSQ0hfQk09bQorQ09ORklHX1RFWFRTRUFSQ0hfRlNNPW0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvS2NvbmZpZwppbmRleCAwZjE1MjE2Li5kZWZjMTNjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvZG1hL0tjb25maWcKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9LY29uZmlnCkBAIC0xMSw2ICsxMSw4IEBACiBjb25maWcgTlJfT05DSElQX0RNQV9DSEFOTkVMUwogCWRlcGVuZHMgb24gU0hfRE1BCiAJaW50ICJOdW1iZXIgb2Ygb24tY2hpcCBETUFDIGNoYW5uZWxzIgorCWRlZmF1bHQgIjgiIGlmIENQVV9TVUJUWVBFX1NINzc1MFIgfHwgQ1BVX1NVQlRZUEVfU0g3NzUxUgorCWRlZmF1bHQgIjEyIiBpZiBDUFVfU1VCVFlQRV9TSDc3ODAKIAlkZWZhdWx0ICI0IgogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgdGhhdCB0aGUgb24tY2hpcApAQCAtNTIsNCArNTQsMyBAQAogCSAgYXJlIGR1YWwtYWRkcmVzcyBjYXBhYmxlLgogCiBlbmRtZW51Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1nMi5jCmluZGV4IDBmODY2ZjguLjljYjA3MDkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLWcyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtZzIuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiBHMiBidXMgRE1BIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMyAtIDIwMDYgIFBhdWwgTXVuZHQKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQpAQCAtMTMsNyArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vbWFjaC9zeXNhc2ljLmg+CiAjaW5jbHVkZSA8YXNtL21hY2gvZG1hLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpAQCAtNDcsMTcgKzQ3LDMxIEBACiAKIHN0YXRpYyB2b2xhdGlsZSBzdHJ1Y3QgZzJfZG1hX2luZm8gKmcyX2RtYSA9ICh2b2xhdGlsZSBzdHJ1Y3QgZzJfZG1hX2luZm8gKikweGEwNWY3ODAwOwogCisjZGVmaW5lIGcyX2J5dGVzX3JlbWFpbmluZyhpKSBcCisJKChnMl9kbWEtPmNoYW5uZWxbaV0uc2l6ZSAtIFwKKwkgIGcyX2RtYS0+c3RhdHVzW2ldLnNpemUpICYgMHgwZmZmZmZmZikKKwogc3RhdGljIGlycXJldHVybl90IGcyX2RtYV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQkvKiBGSVhNRTogRG8gc29tZSBtZWFuaW5nZnVsIGNvbXBsZXRpb24gd29yayBoZXJlLi4gKi8KLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19CisJaW50IGk7CiAKLXN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGcyX2RtYV9pcnEgPSB7Ci0JLm5hbWUJCT0gImcyIERNQSBoYW5kbGVyIiwKLQkuaGFuZGxlcgk9IGcyX2RtYV9pbnRlcnJ1cHQsCi0JLmZsYWdzCQk9IElSUUZfRElTQUJMRUQsCi19OworCWZvciAoaSA9IDA7IGkgPCBHMl9OUl9ETUFfQ0hBTk5FTFM7IGkrKykgeworCQlpZiAoZzJfZG1hLT5zdGF0dXNbaV0uc3RhdHVzICYgMHgyMDAwMDAwMCkgeworCQkJdW5zaWduZWQgaW50IGJ5dGVzID0gZzJfYnl0ZXNfcmVtYWluaW5nKGkpOworCisJCQlpZiAobGlrZWx5KGJ5dGVzID09IDApKSB7CisJCQkJc3RydWN0IGRtYV9pbmZvICppbmZvID0gZGV2X2lkOworCQkJCXN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbiA9IGluZm8tPmNoYW5uZWxzICsgaTsKKworCQkJCXdha2VfdXAoJmNoYW4tPndhaXRfcXVldWUpOworCisJCQkJcmV0dXJuIElSUV9IQU5ETEVEOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuIElSUV9OT05FOworfQogCiBzdGF0aWMgaW50IGcyX2VuYWJsZV9kbWEoc3RydWN0IGRtYV9jaGFubmVsICpjaGFuKQogewpAQCAtMTM1LDggKzE0OSwxNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGcyX2dldF9yZXNpZHVlKHN0cnVjdCBkbWFfY2hhbm5lbCAqY2hhbikKK3sKKwlyZXR1cm4gZzJfYnl0ZXNfcmVtYWluaW5nKGNoYW4tPmNoYW4pOworfQorCiBzdGF0aWMgc3RydWN0IGRtYV9vcHMgZzJfZG1hX29wcyA9IHsKIAkueGZlcgkJPSBnMl94ZmVyX2RtYSwKKwkuZ2V0X3Jlc2lkdWUJPSBnMl9nZXRfcmVzaWR1ZSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgZG1hX2luZm8gZzJfZG1hX2luZm8gPSB7CkBAIC0xNDgsMTMgKzE2OCwyMiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBnMl9kbWFfaW5pdCh2b2lkKQogewotCXNldHVwX2lycShIV19FVkVOVF9HMl9ETUEsICZnMl9kbWFfaXJxKTsKKwlpbnQgcmV0OworCisJcmV0ID0gcmVxdWVzdF9pcnEoSFdfRVZFTlRfRzJfRE1BLCBnMl9kbWFfaW50ZXJydXB0LCBJUlFGX0RJU0FCTEVELAorCQkJICAiZzIgRE1BIGhhbmRsZXIiLCAmZzJfZG1hX2luZm8pOworCWlmICh1bmxpa2VseShyZXQpKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIE1hZ2ljICovCiAJZzJfZG1hLT53YWl0X3N0YXRlCT0gMjc7CiAJZzJfZG1hLT5tYWdpYwkJPSAweDQ2NTk0MDRmOwogCi0JcmV0dXJuIHJlZ2lzdGVyX2RtYWMoJmcyX2RtYV9pbmZvKTsKKwlyZXQgPSByZWdpc3Rlcl9kbWFjKCZnMl9kbWFfaW5mbyk7CisJaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKKwkJZnJlZV9pcnEoSFdfRVZFTlRfRzJfRE1BLCAwKTsKKworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBnMl9kbWFfZXhpdCh2b2lkKQpAQCAtMTY5LDQgKzE5OCwzIEBACiBNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHMiBidXMgRE1BIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1wdnIyLmMKaW5kZXggMzBhNTgwYS4uM2IwYjBmNiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtcHZyMi5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXB2cjIuYwpAQCAtMTgsOCArMTgsOCBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIHVuc2lnbmVkIGludCB4ZmVyX2NvbXBsZXRlID0gMDsKLXN0YXRpYyBpbnQgY291bnQgPSAwOworc3RhdGljIHVuc2lnbmVkIGludCB4ZmVyX2NvbXBsZXRlOworc3RhdGljIGludCBjb3VudDsKIAogc3RhdGljIGlycXJldHVybl90IHB2cjJfZG1hX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewpAQCAtMTA3LDQgKzEwNywzIEBACiBNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJORUMgUG93ZXJWUiAyIERNQSBkcml2ZXIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYyBiL2FyY2gvc2gvZHJpdmVycy9kbWEvZG1hLXNoLmMKaW5kZXggZTAyOGEyZC4uY2JiZThiYyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL2RtYS9kbWEtc2guYworKysgYi9hcmNoL3NoL2RyaXZlcnMvZG1hL2RtYS1zaC5jCkBAIC0xMSwxNCArMTEsMTAgQEAKICAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxhc20vZHJlYW1jYXN0L2RtYS5oPgotI2luY2x1ZGUgPGFzbS9zaWduYWwuaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgImRtYS1zaC5oIgpAQCAtODQsMTggKzgwLDIzIEBACiAKIHN0YXRpYyBpbnQgc2hfZG1hY19yZXF1ZXN0X2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7Ci0JY2hhciBuYW1lWzMyXTsKKwlpZiAodW5saWtlbHkoIWNoYW4tPmZsYWdzICYgRE1BX1RFSV9DQVBBQkxFKSkKKwkJcmV0dXJuIDA7CiAKLQlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJETUFDIFRyYW5zZmVyIEVuZCAoQ2hhbm5lbCAlZCkiLAorCWNoYW4tPm5hbWUgPSBremFsbG9jKDMyLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoY2hhbi0+bmFtZSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9NRU07CisJc25wcmludGYoY2hhbi0+bmFtZSwgMzIsICJETUFDIFRyYW5zZmVyIEVuZCAoQ2hhbm5lbCAlZCkiLAogCQkgY2hhbi0+Y2hhbik7CiAKIAlyZXR1cm4gcmVxdWVzdF9pcnEoZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pLCBkbWFfdGVpLAotCQkJICAgSVJRRl9ESVNBQkxFRCwgbmFtZSwgY2hhbik7CisJCQkgICBJUlFGX0RJU0FCTEVELCBjaGFuLT5uYW1lLCBjaGFuKTsKIH0KIAogc3RhdGljIHZvaWQgc2hfZG1hY19mcmVlX2RtYShzdHJ1Y3QgZG1hX2NoYW5uZWwgKmNoYW4pCiB7CiAJZnJlZV9pcnEoZ2V0X2RtdGVfaXJxKGNoYW4tPmNoYW4pLCBjaGFuKTsKKwlrZnJlZShjaGFuLT5uYW1lKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTI1OSw3ICsyNjAsNyBAQAogI2lmZGVmIENPTkZJR19DUFVfU0g0CiAJbWFrZV9pcHJfaXJxKERNQUVfSVJRLCBETUFfSVBSX0FERFIsIERNQV9JUFJfUE9TLCBETUFfUFJJT1JJVFkpOwogCWkgPSByZXF1ZXN0X2lycShETUFFX0lSUSwgZG1hX2VyciwgSVJRRl9ESVNBQkxFRCwgIkRNQUMgQWRkcmVzcyBFcnJvciIsIDApOwotCWlmIChpIDwgMCkKKwlpZiAodW5saWtlbHkoaSA8IDApKQogCQlyZXR1cm4gaTsKICNlbmRpZgogCkBAIC0yNzQsNyArMjc1LDcgQEAKIAkgKiBiZWVuIHNldC4KIAkgKi8KIAlpID0gZG1hb3JfcmVzZXQoKTsKLQlpZiAoaSA8IDApCisJaWYgKHVubGlrZWx5KGkgIT0gMCkpCiAJCXJldHVybiBpOwogCiAJcmV0dXJuIHJlZ2lzdGVyX2RtYWMoaW5mbyk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9NYWtlZmlsZQppbmRleCAzNjViYzE2Li45ZTAwY2I4IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvTWFrZWZpbGUKQEAgLTYsNyArNiw4IEBACiBvYmotJChDT05GSUdfUENJX0FVVE8pCQkJKz0gcGNpLWF1dG8ubwogCiBvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpCSs9IHBjaS1zdDQwLm8KLW9iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCSs9IHBjaS1zaDc3NTEubyAKK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpCSs9IHBjaS1zaDc3NTEubyBvcHMtc2g0Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCSs9IHBjaS1zaDc3ODAubyBvcHMtc2g0Lm8KIAogb2JqLSQoQ09ORklHX1NIX0RSRUFNQ0FTVCkJCSs9IG9wcy1kcmVhbWNhc3QubyBmaXh1cHMtZHJlYW1jYXN0Lm8gXAogCQkJCQkgICBkbWEtZHJlYW1jYXN0Lm8KQEAgLTE0LDMgKzE1LDYgQEAKIG9iai0kKENPTkZJR19TSF9CSUdTVVIpCQkJKz0gb3BzLWJpZ3N1ci5vCiBvYmotJChDT05GSUdfU0hfUlRTNzc1MVIyRCkJCSs9IG9wcy1ydHM3NzUxcjJkLm8gZml4dXBzLXJ0czc3NTFyMmQubwogb2JqLSQoQ09ORklHX1NIX1NIMDMpCQkJKz0gb3BzLXNoMDMubyBmaXh1cHMtc2gwMy5vCitvYmotJChDT05GSUdfU0hfUjc3ODBSUCkJCSs9IG9wcy1yNzc4MHJwLm8gZml4dXBzLXI3NzgwcnAubworb2JqLSQoQ09ORklHX1NIX1RJVEFOKQkJCSs9IG9wcy10aXRhbi5vCitvYmotJChDT05GSUdfU0hfTEFORElTSykJCSs9IG9wcy1sYW5kaXNrLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLWRyZWFtY2FzdC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKaW5kZXggNjNiMWM2Zi4uYzBhZjVmNyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtZHJlYW1jYXN0LmMKQEAgLTQsNyArNCw3IEBACiAgKiBQQ0kgZml4dXBzIGZvciB0aGUgU2VnYSBEcmVhbWNhc3QKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgIE0uIFIuIEJyb3duCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNiAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBvcmlnaW5hbGx5IGJvcmUgdGhlIG1lc3NhZ2UgKHdpdGggZW5jbG9zZWQtJCk6CiAgKglJZDogcGNpLmMsdiAxLjMgMjAwMy8wNS8wNCAxOToyOTo0NiBsZXRoYWwgRXhwCkBAIC00NSwzNiArNDUsMTYgQEAKIAkJcHJpbnRrKCJQQ0k6IEZhaWxlZCByZXNvdXJjZSBmaXh1cFxuIik7CiAJfQogfQotCiBERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgZ2Fwc3BjaV9maXh1cF9yZXNvdXJjZXMpOwogCi12b2lkIF9faW5pdCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoraW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQogewotCS8qIAotCSAqIFdlIGRvbid0IGhhdmUgYW55IHN1YiBidXMgdG8gZml4IHVwLCBhbmQgdGhpcyBpcyBhIHJhdGhlcgotCSAqIHN0dXBpZCBwbGFjZSB0byBwdXQgZ2VuZXJhbCBkZXZpY2UgZml4dXBzLiBEb24ndCBkbyBpdC4KLQkgKiBVc2UgdGhlIHBjaWJpb3NfZml4dXBzIHRhYmxlIG9yIHN1ZmZlciB0aGUgY29uc2VxdWVuY2VzLgorCS8qCisJICogVGhlIGludGVycnVwdCByb3V0aW5nIHNlbWFudGljcyBoZXJlIGFyZSBxdWl0ZSB0cml2aWFsLgorCSAqCisJICogV2UgYmFzaWNhbGx5IG9ubHkgc3VwcG9ydCBvbmUgaW50ZXJydXB0LCBzbyB3ZSBvbmx5IGJvdGhlcgorCSAqIHVwZGF0aW5nIGEgZGV2aWNlJ3MgaW50ZXJydXB0IGxpbmUgd2l0aCB0aGlzIHNpbmdsZSBzaGFyZWQKKwkgKiBpbnRlcnJ1cHQuIEtlZXBzIHJvdXRpbmcgcXVpdGUgc2ltcGxlLCBkb2Vzbid0IGl0PwogCSAqLworCXJldHVybiBHQVBTUENJX0lSUTsKIH0KLQotdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9pcnFzKHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKmRldiA9IDA7Ci0KLQlmb3JfZWFjaF9wY2lfZGV2KGRldikgewotCQkvKgotCQkgKiBUaGUgaW50ZXJydXB0IHJvdXRpbmcgc2VtYW50aWNzIGhlcmUgYXJlIHF1aXRlIHRyaXZpYWwuCi0JCSAqCi0JCSAqIFdlIGJhc2ljYWxseSBvbmx5IHN1cHBvcnQgb25lIGludGVycnVwdCwgc28gd2Ugb25seSBib3RoZXIKLQkJICogdXBkYXRpbmcgYSBkZXZpY2UncyBpbnRlcnJ1cHQgbGluZSB3aXRoIHRoaXMgc2luZ2xlIHNoYXJlZAotCQkgKiBpbnRlcnJ1cHQuIEtlZXBzIHJvdXRpbmcgcXVpdGUgc2ltcGxlLCBkb2Vzbid0IGl0PwotCQkgKi8KLQkJcHJpbnRrKEtFUk5fTk9USUNFICJQQ0k6IEZpeGluZyB1cCBJUlEgcm91dGluZyBmb3IgZGV2aWNlICVzXG4iLAotCQkgICAgICAgcGNpX25hbWUoZGV2KSk7Ci0KLQkJZGV2LT5pcnEgPSBHQVBTUENJX0lSUTsKLQotCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfSU5URVJSVVBUX0xJTkUsIGRldi0+aXJxKTsKLQl9Ci19Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXI3NzgwcnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTMyMWRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcjc3ODBycC5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBhcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1yNzc4MHJwLmMKKyAqCisgKiBIaWdobGFuZGVyIFI3NzgwUlAtMSBQQ0kgZml4dXBzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAzICBMaW5lbyB1U29sdXRpb25zLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgLSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJwY2ktc2g0LmgiCisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK2ludCBwY2lfZml4dXBfcGNpYyh2b2lkKQoreworCXBjaV93cml0ZV9yZWcoMHgwMDAwNDNmZiwgU0g0X1BDSUlOVE0pOworCXBjaV93cml0ZV9yZWcoMHgwMDAwMzgwZiwgU0g0X1BDSUFJTlRNKTsKKworCXBjaV93cml0ZV9yZWcoMHhmYmIwMDA0NywgU0g3NzgwX1BDSUNNRCk7CisJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDc3ODBfUENJSUJBUik7CisKKwlwY2lfd3JpdGVfcmVnKDB4MDAwMTE5MTIsIFNINzc4MF9QQ0lTVklEKTsKKwlwY2lfd3JpdGVfcmVnKDB4MDgwMDAwMDAsIFNINzc4MF9QQ0lDU0NSMCk7CisJcGNpX3dyaXRlX3JlZygweDAwMDAwMDFiLCBTSDc3ODBfUENJQ1NBUjApOworCXBjaV93cml0ZV9yZWcoMHhmZDAwMDAwMCwgU0g3NzgwX1BDSUNTQ1IxKTsKKwlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMGYsIFNINzc4MF9QQ0lDU0FSMSk7CisKKwlwY2lfd3JpdGVfcmVnKDB4ZmQwMDAwMDAsIFNINzc4MF9QQ0lNQlIwKTsKKwlwY2lfd3JpdGVfcmVnKDB4MDBmYzAwMDAsIFNINzc4MF9QQ0lNQk1SMCk7CisKKyNpZmRlZiBDT05GSUdfMzJCSVQKKwlwY2lfd3JpdGVfcmVnKDB4YzAwMDAwMDAsIFNINzc4MF9QQ0lNQlIyKTsKKwlwY2lfd3JpdGVfcmVnKDB4MjAwMDAwMDAgLSBTSDc3ODBfUENJX0lPX1NJWkUsIFNINzc4MF9QQ0lNQk1SMik7CisjZW5kaWYKKworCS8qIFNldCBJT0JSIGZvciB3aW5kb3dzIGNvbnRhaW5pbmcgYXJlYSBzcGVjaWZpZWQgaW4gcGNpLmggKi8KKwlwY2lfd3JpdGVfcmVnKChQQ0lCSU9TX01JTl9JTyAmIH4oU0g3NzgwX1BDSV9JT19TSVpFIC0gMSkpLAorCQkgICAgICBTSDc3ODBfUENJSU9CUik7CisJcGNpX3dyaXRlX3JlZygoKFNINzc4MF9QQ0lfSU9fU0laRS0xKSAmICg3PDwxOCkpLCBTSDc3ODBfUENJSU9CTVIpOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1ydHM3NzUxcjJkLmMKaW5kZXggMGM1OTBmYy4uZTcyY2ViNSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtcnRzNzc1MXIyZC5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXJ0czc3NTFyMmQuYwpAQCAtMTAsOCArMTAsNyBAQAogICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQogICogZm9yIG1vcmUgZGV0YWlscy4KICAqLwotI2luY2x1ZGUgInBjaS1zaDc3NTEuaCIKLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICJwY2ktc2g0LmgiCiAKICNkZWZpbmUgUENJTUNSX01SU0VUX09GRgkweEJGRkZGRkZGCiAjZGVmaW5lIFBDSU1DUl9SRlNIX09GRgkJMHhGRkZGRkZGQgpAQCAtMjIsMjIgKzIxLDIzIEBACiAKIAliY3IxID0gaW5sKFNINzc1MV9CQ1IxKTsKIAliY3IxIHw9IDB4NDAwODAwMDA7CS8qIEVuYWJsZSBCaXQgMTkgQlJFUUVOLCBzZXQgUENJQyB0byBzbGF2ZSAqLwotCW91dGwoYmNyMSwgUENJX1JFRyhTSDc3NTFfUENJQkNSMSkpOworCXBjaV93cml0ZV9yZWcoYmNyMSwgU0g0X1BDSUJDUjEpOwogCiAJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHRzLCBzbyB3ZSBrbm93biB3aGF0IHRvIGZpeCAqLwotCW91dGwoMHgwMDAwYzNmZiwgUENJX1JFRyhTSDc3NTFfUENJSU5UTSkpOwotCW91dGwoMHgwMDAwMzgwZiwgUENJX1JFRyhTSDc3NTFfUENJQUlOVE0pKTsKKwlwY2lfd3JpdGVfcmVnKDB4MDAwMGMzZmYsIFNINF9QQ0lJTlRNKTsKKwlwY2lfd3JpdGVfcmVnKDB4MDAwMDM4MGYsIFNINF9QQ0lBSU5UTSk7CiAKLQlvdXRsKDB4ZmI5MDAwNDcsIFBDSV9SRUcoU0g3NzUxX1BDSUNPTkYxKSk7Ci0Jb3V0bCgweGFiMDAwMDAxLCBQQ0lfUkVHKFNINzc1MV9QQ0lDT05GNCkpOworCXBjaV93cml0ZV9yZWcoMHhmYjkwMDA0NywgU0g3NzUxX1BDSUNPTkYxKTsKKwlwY2lfd3JpdGVfcmVnKDB4YWIwMDAwMDEsIFNINzc1MV9QQ0lDT05GNCk7CiAKIAltY3IgPSBpbmwoU0g3NzUxX01DUik7CiAJbWNyID0gKG1jciAmIFBDSU1DUl9NUlNFVF9PRkYpICYgUENJTUNSX1JGU0hfT0ZGOwotCW91dGwobWNyLCBQQ0lfUkVHKFNINzc1MV9QQ0lNQ1IpKTsKKwlwY2lfd3JpdGVfcmVnKG1jciwgU0g0X1BDSU1DUik7CiAKLQlvdXRsKDB4MGMwMDAwMDAsIFBDSV9SRUcoU0g3NzUxX1BDSUNPTkY1KSk7Ci0Jb3V0bCgweGQwMDAwMDAwLCBQQ0lfUkVHKFNINzc1MV9QQ0lDT05GNikpOwotCW91dGwoMHgwYzAwMDAwMCwgUENJX1JFRyhTSDc3NTFfUENJTEFSMCkpOwotCW91dGwoMHgwMDAwMDAwMCwgUENJX1JFRyhTSDc3NTFfUENJTEFSMSkpOworCXBjaV93cml0ZV9yZWcoMHgwYzAwMDAwMCwgU0g3NzUxX1BDSUNPTkY1KTsKKwlwY2lfd3JpdGVfcmVnKDB4ZDAwMDAwMDAsIFNINzc1MV9QQ0lDT05GNik7CisJcGNpX3dyaXRlX3JlZygweDBjMDAwMDAwLCBTSDRfUENJTEFSMCk7CisJcGNpX3dyaXRlX3JlZygweDAwMDAwMDAwLCBTSDRfUENJTEFSMSk7CisKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNoMDMuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvZml4dXBzLXNoMDMuYwppbmRleCA1N2FjMjZjLi4yZThhMThiIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL2ZpeHVwcy1zaDAzLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9maXh1cHMtc2gwMy5jCkBAIC0zLDExICszLDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi0vKgotICogCUlSUSBmdW5jdGlvbnMKLSAqLwotCi1pbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycSh1OCBzbG90LCB1OCBwaW4sIHN0cnVjdCBwY2lfZGV2ICpkZXYpCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAJaW50IGlycTsKIApAQCAtMTcsOCArMTMsOSBAQAogCQljYXNlIDg6IHJldHVybiA1OwkvKiBldGgxICAgICAgICovCiAJCWNhc2UgNjogcmV0dXJuIDI7CS8qIFBDSSBicmlkZ2UgKi8KIAkJZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAJcHJpbnRrKCJQQ0k6IEJhZCBJUlEgbWFwcGluZyByZXF1ZXN0IGZvciBzbG90ICVkXG4iLCBzbG90KTsKLSAgICAgICAgICAgICAgICAJcmV0dXJuIDI7CisJCQlwcmludGsoS0VSTl9FUlIgIlBDSTogQmFkIElSUSBtYXBwaW5nIHJlcXVlc3QgIgorCQkJCQkiZm9yIHNsb3QgJWRcbiIsIHNsb3QpOworCQkJcmV0dXJuIDI7CiAJCX0KIAl9IGVsc2UgewogCQlzd2l0Y2ggKHBpbikgewpAQCAtMzIsMzAgKzI5LDMgQEAKIAl9CiAJcmV0dXJuIGlycTsKIH0KLQotc3RhdGljIHU4IF9faW5pdCBzaDAzX25vX3N3aXp6bGUoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggKnBpbikKLXsKLQkvKiBubyBzd2l6emxpbmcgKi8KLQlyZXR1cm4gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci19Ci0KLXN0YXRpYyBpbnQgc2gwM19wY2lfbG9va3VwX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCBzbG90LCB1OCBwaW4pCi17Ci0JaW50IGlycSA9IC0xOwotCi0JLyogbm93IGxvb2t1cCB0aGUgYWN0dWFsIElSUSBvbiBhIHBsYXRmb3JtIHNwZWNpZmljIGJhc2lzIChwY2ktJ3BsYXRmb3JtJy5jKSAqLwotCWlycSA9IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzbG90LCBwaW4sIGRldik7Ci0JaWYoIGlycSA8IDAgKSB7Ci0JCXByX2RlYnVnKCJQQ0k6IEVycm9yIG1hcHBpbmcgSVJRIG9uIGRldmljZSAlc1xuIiwgcGNpX25hbWUoZGV2KSk7Ci0JCXJldHVybiBpcnE7Ci0JfQotCi0JcHJfZGVidWcoIlNldHRpbmcgSVJRIGZvciBzbG90ICVzIHRvICVkXG4iLCBwY2lfbmFtZShkZXYpLCBpcnEpOwotCi0JcmV0dXJuIGlycTsKLX0KLQotdm9pZCBfX2luaXQgcGNpYmlvc19maXh1cF9pcnFzKHZvaWQpCi17Ci0JcGNpX2ZpeHVwX2lycXMoc2gwM19ub19zd2l6emxlLCBzaDAzX3BjaV9sb29rdXBfaXJxKTsKLX0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWJpZ3N1ci5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKaW5kZXggYWU4MmM2Yy4uNWRhNTAxYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtYmlnc3VyLmMKQEAgLTEwLDE1ICsxMCwxMiBAQAogICoKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIEhpdGFjaGkgQmlnIFN1ciBFdmFsdWF0aW9uIEJvYXJkCiAgKi8KLQogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJwY2ktc2g3NzUxLmgiCisjaW5jbHVkZSAicGNpLXNoNC5oIgogI2luY2x1ZGUgPGFzbS9iaWdzdXIvYmlnc3VyLmg+CiAKICNkZWZpbmUgQklHU1VSX1BDSV9JTwkweDQwMDAKQEAgLTQxLDExICszOCwxMSBAQAogZXh0ZXJuIHN0cnVjdCBwY2lfb3BzIHNoNzc1MV9wY2lfb3BzOwogCiBzdHJ1Y3QgcGNpX2NoYW5uZWwgYm9hcmRfcGNpX2NoYW5uZWxzW10gPSB7Ci0JeyAmc2g3NzUxX3BjaV9vcHMsICZzaDc3NTFfaW9fcmVzb3VyY2UsICZzaDc3NTFfbWVtX3Jlc291cmNlLCAwLCAweGZmIH0sCisJeyAmc2g0X3BjaV9vcHMsICZzaDc3NTFfaW9fcmVzb3VyY2UsICZzaDc3NTFfbWVtX3Jlc291cmNlLCAwLCAweGZmIH0sCiAJeyAwLCB9CiB9OwogCi1zdGF0aWMgc3RydWN0IHNoNzc1MV9wY2lfYWRkcmVzc19tYXAgc2g3NzUxX3BjaV9tYXAgPSB7CitzdGF0aWMgc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXAgc2g3NzUxX3BjaV9tYXAgPSB7CiAJLndpbmRvdzAJPSB7CiAJCS5iYXNlCT0gU0g3NzUxX0NTM19CQVNFX0FERFIsCiAJCS5zaXplCT0gQklHU1VSX0xTUjBfU0laRSwKQEAgLTU4LDcgKzU1LDcgQEAKIH07CiAKIC8qCi0gKiBJbml0aWFsaXplIHRoZSBCaWcgU3VyIFBDSSBpbnRlcmZhY2UgCisgKiBJbml0aWFsaXplIHRoZSBCaWcgU3VyIFBDSSBpbnRlcmZhY2UKICAqIFNldHVwIGhhcmR3YXJlIHRvIGJlIENlbnRyYWwgRnVudGlvbgogICogQ29weSB0aGUgQlNSIHJlZ3MgdG8gdGhlIFBDSSBpbnRlcmZhY2UKICAqIFNldHVwIFBDSSB3aW5kb3dzIGludG8gbG9jYWwgUkFNCkBAIC02OCwxNSArNjUsMTUgQEAKIAlyZXR1cm4gc2g3NzUxX3BjaWNfaW5pdCgmc2g3NzUxX3BjaV9tYXApOwogfQogCi1pbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHU4IHNsb3QsIHU4IHBpbikKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7Ci0JLyogCisJLyoKIAkgKiBUaGUgQmlnIFN1ciBjYW4gYmUgdXNlZCBpbiBhIENQQ0kgY2hhc3NpcywgYnV0IHRoZSBTSDc3NTEgUENJCiAJICogaW50ZXJmYWNlIGlzIG9uIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGJvYXJkIHNvIHRoYXQgaXQgY2FuIGFsc28KIAkgKiBzdXBwb3J0IGEgVjMyMCBDUEkgaW50ZXJmYWNlIGNoaXAuLi4gIFRoZXJlZm9yIHRoZSBJUlEgbWFwcGluZyBpcwogCSAqIHNvbWV3aGF0IHVzZSBkZXBlbmRlbnQuLi4gSSdsIGFzc3VtZSBhIGxpbmVhciBtYXAgZm9yIG5vdywgaS5lLgogCSAqIElOVEE9c2xvdDAscGluMC4uLiBJTlREPXNsb3QzLHBpbjAuLi4KLQkgKi8gCisJICovCiAJaW50IGlycSA9IChzbG90ICsgcGluLTEpICUgNCArIEJJR1NVUl9TSDc3NTFfUENJX0lSUV9CQVNFOwogCiAJUENJREJHKDIsICJQQ0k6IE1hcHBpbmcgQmlnIFN1ciBJUlEgZm9yIHNsb3QgJWQsIHBpbiAlYyB0byBpcnEgJWRcbiIsCkBAIC04NCw0ICs4MSwzIEBACiAKIAlyZXR1cm4gaXJxOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYW5kaXNrLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1sYW5kaXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWRhMzAxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLWxhbmRpc2suYwpAQCAtMCwwICsxLDY4IEBACisvKgorICogYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtbGFuZGlzay5jCisgKgorICogUENJIGluaXRpYWxpemF0aW9uIGZvciB0aGUgSS1PIERBVEEgRGV2aWNlLCBJbmMuIExBTkRJU0sgYm9hcmQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYga29naWlkZW5hCisgKgorICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlICJwY2ktc2g0LmgiCisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX2lvX3Jlc291cmNlID0geworCS5uYW1lID0gIlNINzc1MSBJTyIsCisJLnN0YXJ0ID0gMHg0MDAwLAorCS5lbmQgPSAweDQwMDAgKyBTSDc3NTFfUENJX0lPX1NJWkUgLSAxLAorCS5mbGFncyA9IElPUkVTT1VSQ0VfSU8KK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc2g3NzUxX21lbV9yZXNvdXJjZSA9IHsKKwkubmFtZSA9ICJTSDc3NTEgbWVtIiwKKwkuc3RhcnQgPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFLAorCS5lbmQgPSBTSDc3NTFfUENJX01FTU9SWV9CQVNFICsgU0g3NzUxX1BDSV9NRU1fU0laRSAtIDEsCisJLmZsYWdzID0gSU9SRVNPVVJDRV9NRU0KK307CisKK3N0cnVjdCBwY2lfY2hhbm5lbCBib2FyZF9wY2lfY2hhbm5lbHNbXSA9IHsKKwl7JnNoNF9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHgzZmZ9LAorCXtOVUxMLCBOVUxMLCBOVUxMLCAwLCAwfSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCBzaDc3NTFfcGNpX21hcCA9IHsKKwkud2luZG93MCA9IHsKKwkJLmJhc2UJPSBTSDc3NTFfQ1MzX0JBU0VfQUREUiwKKwkJLnNpemUJPSAoNjQgPDwgMjApLAkvKiA2NE1CICovCisJfSwKKworCS5mbGFncyA9IFNINF9QQ0lDX05PX1JFU0VULAorfTsKKworaW50IF9faW5pdCBwY2liaW9zX2luaXRfcGxhdGZvcm0odm9pZCkKK3sKKwlyZXR1cm4gc2g3NzUxX3BjaWNfaW5pdCgmc2g3NzUxX3BjaV9tYXApOworfQorCitpbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCit7CisJLyoKKwkgKiBzbG90MDogcGluMS00ID0gaXJxNSw2LDcsOAorCSAqIHNsb3QxOiBwaW4xLTQgPSBpcnE2LDcsOCw1CisJICogc2xvdDI6IHBpbjEtNCA9IGlycTcsOCw1LDYKKwkgKiBzbG90MzogcGluMS00ID0gaXJxOCw1LDYsNworCSAqLworCWludCBpcnEgPSAoKHNsb3QgKyBwaW4gLSAxKSAmIDB4MykgKyA1OworCisJaWYgKChzbG90IHwgKHBpbiAtIDEpKSA+IDB4MykgeworCQlwcmludGsoIlBDSTogQmFkIElSUSBtYXBwaW5nIHJlcXVlc3QgZm9yIHNsb3QgJWQgcGluICVjXG4iLAorCQkgICAgICAgc2xvdCwgcGluIC0gMSArICdBJyk7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGlycTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXI3NzgwcnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTRkNWVkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcjc3ODBycC5jCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBBdXRob3I6ICBJYW4gRGFTaWx2YSAoaWRhc2lsdmFAbXZpc3RhLmNvbSkKKyAqCisgKiBIaWdobHkgbGV2ZXJhZ2VkIGZyb20gcGNpLWJpZ3N1ci5jLCB3cml0dGVuIGJ5IER1c3RpbiBNY0ludGlyZS4KKyAqCisgKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKgorICogUENJIGluaXRpYWxpemF0aW9uIGZvciB0aGUgUmVuZXNhcyBTSDc3ODAgSGlnaGxhbmRlciBSNzc4MFJQLTEgYm9hcmQKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxhc20vcjc3ODBycC9yNzc4MHJwLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSAicGNpLXNoNC5oIgorCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQoreworICAgICAgICBzd2l0Y2ggKHNsb3QpIHsKKwljYXNlIDA6IHJldHVybiBJUlFfUENJU0xPVDE7CQkvKiBQQ0kgSW50ZXJydXB0ICMxICovCisJY2FzZSAxOiByZXR1cm4gSVJRX1BDSVNMT1QyOwkJLyogUENJIEludGVycnVwdCAjMiAqLworCWNhc2UgMjogcmV0dXJuIElSUV9QQ0lTTE9UMzsJCS8qIFBDSSBJbnRlcnJ1cHQgIzMgKi8KKwljYXNlIDM6IHJldHVybiBJUlFfUENJU0xPVDQ7CQkvKiBQQ0kgSW50ZXJydXB0IEU0ICovCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fRVJSICJQQ0k6IEJhZCBJUlEgbWFwcGluZyAiCisJCSAgICAgICAicmVxdWVzdCBmb3Igc2xvdCAlZCwgZnVuYyAlZFxuIiwgc2xvdCwgcGluLTEpOworCQlyZXR1cm4gLTE7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4MF9pb19yZXNvdXJjZSA9IHsKKwkubmFtZQk9ICJTSDc3ODBfSU8iLAorCS5zdGFydAk9IDB4MjAwMCwKKwkuZW5kCT0gMHgyMDAwICsgU0g3NzgwX1BDSV9JT19TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPCit9OworCitzdGF0aWMgc3RydWN0IHJlc291cmNlIHNoNzc4MF9tZW1fcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiU0g3NzgwX21lbSIsCisJLnN0YXJ0CT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSwKKwkuZW5kCT0gU0g3NzgwX1BDSV9NRU1PUllfQkFTRSArIFNINzc4MF9QQ0lfTUVNX1NJWkUgLSAxLAorCS5mbGFncwk9IElPUkVTT1VSQ0VfTUVNCit9OworCitleHRlcm4gc3RydWN0IHBjaV9vcHMgc2g3NzgwX3BjaV9vcHM7CisKK3N0cnVjdCBwY2lfY2hhbm5lbCBib2FyZF9wY2lfY2hhbm5lbHNbXSA9IHsKKwl7ICZzaDRfcGNpX29wcywgJnNoNzc4MF9pb19yZXNvdXJjZSwgJnNoNzc4MF9tZW1fcmVzb3VyY2UsIDAsIDB4ZmYgfSwKKwl7IE5VTEwsIE5VTEwsIE5VTEwsIDAsIDAgfSwKK307CitFWFBPUlRfU1lNQk9MKGJvYXJkX3BjaV9jaGFubmVscyk7CisKK3N0YXRpYyBzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCBzaDc3ODBfcGNpX21hcCA9IHsKKwkud2luZG93MAk9IHsKKwkJLmJhc2UJPSBTSDc3ODBfQ1MyX0JBU0VfQUREUiwKKwkJLnNpemUJPSAweDA0MDAwMDAwLAorCX0sCisKKwkud2luZG93MQk9IHsKKwkJLmJhc2UJPSBTSDc3ODBfQ1MzX0JBU0VfQUREUiwKKwkJLnNpemUJPSAweDA0MDAwMDAwLAorCX0sCisKKwkuZmxhZ3MJPSBTSDRfUENJQ19OT19SRVNFVCwKK307CisKK2ludCBfX2luaXQgcGNpYmlvc19pbml0X3BsYXRmb3JtKHZvaWQpCit7CisJcmV0dXJuIHNoNzc4MF9wY2ljX2luaXQoJnNoNzc4MF9wY2lfbWFwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXJ0czc3NTFyMmQuYwppbmRleCA4MzE3MWQxLi44OGY0NGUyIDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1ydHM3NzUxcjJkLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtcnRzNzc1MXIyZC5jCkBAIC0xNywxMiArMTcsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAicGNpLXNoNzc1MS5oIgogI2luY2x1ZGUgPGFzbS9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlICJwY2ktc2g0LmgiCiAKLWludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHU4IHNsb3QsIHU4IHBpbikKK2ludCBfX2luaXQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCB1OCBzbG90LCB1OCBwaW4pCiB7CiAgICAgICAgIHN3aXRjaCAoc2xvdCkgewogCWNhc2UgMDogcmV0dXJuIElSUV9QQ0lTTE9UMTsJLyogUENJIEV4dGVuZCBzbG90ICMxICovCkBAIC01MiwxMiArNTEsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDc3NTFfcGNpX29wczsKIAogc3RydWN0IHBjaV9jaGFubmVsIGJvYXJkX3BjaV9jaGFubmVsc1tdID0gewotCXsgJnNoNzc1MV9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAorCXsgJnNoNF9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAogCXsgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCB9LAogfTsKIEVYUE9SVF9TWU1CT0woYm9hcmRfcGNpX2NoYW5uZWxzKTsKIAotc3RhdGljIHN0cnVjdCBzaDc3NTFfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0geworc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0gewogCS53aW5kb3cwCT0gewogCQkuYmFzZQk9IFNINzc1MV9DUzNfQkFTRV9BRERSLAogCQkuc2l6ZQk9IDB4MDQwMDAwMDAsCkBAIC02OCw3ICs2Nyw3IEBACiAJCS5zaXplCT0gMHgwMDAwMDAwMCwJLyogVW51c2VkICovCiAJfSwKIAotCS5mbGFncwk9IFNINzc1MV9QQ0lDX05PX1JFU0VULAorCS5mbGFncwk9IFNINF9QQ0lDX05PX1JFU0VULAogfTsKIAogaW50IF9faW5pdCBwY2liaW9zX2luaXRfcGxhdGZvcm0odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNoNC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0MzcxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zaDQuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoKKyAqIEdlbmVyaWMgU0gtNCAvIFNILTRBIFBDSUMgb3BlcmF0aW9ucyAoU0g3NzUxLCBTSDc3ODApLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2Mi4gU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2FkZHJzcGFjZS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgInBjaS1zaDQuaCIKKworLyoKKyAqIERpcmVjdCBhY2Nlc3MgdG8gUENJIGhhcmR3YXJlLi4uCisgKi8KKyNkZWZpbmUgQ09ORklHX0NNRChidXMsIGRldmZuLCB3aGVyZSkgXAorCVAxU0VHQUREUigoYnVzLT5udW1iZXIgPDwgMTYpIHwgKGRldmZuIDw8IDgpIHwgKHdoZXJlICYgfjMpKQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHNoNF9wY2lfbG9jayk7CisKKy8qCisgKiBGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB3aXRoIHR5cGUgMSBhY2Nlc3NlcworICovCitzdGF0aWMgaW50IHNoNF9wY2lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCisJCQkgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBkYXRhOworCisJLyoKKwkgKiBQQ0lQRFIgbWF5IG9ubHkgYmUgYWNjZXNzZWQgYXMgMzIgYml0IHdvcmRzLAorCSAqIHNvIHdlIG11c3QgZG8gYnl0ZSBhbGlnbm1lbnQgYnkgaGFuZAorCSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZzaDRfcGNpX2xvY2ssIGZsYWdzKTsKKwlwY2lfd3JpdGVfcmVnKENPTkZJR19DTUQoYnVzLCBkZXZmbiwgd2hlcmUpLCBTSDRfUENJUEFSKTsKKwlkYXRhID0gcGNpX3JlYWRfcmVnKFNINF9QQ0lQRFIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNoNF9wY2lfbG9jaywgZmxhZ3MpOworCisJc3dpdGNoIChzaXplKSB7CisJY2FzZSAxOgorCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDMpIDw8IDMpKSAmIDB4ZmY7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnZhbCA9IChkYXRhID4+ICgod2hlcmUgJiAyKSA8PCAzKSkgJiAweGZmZmY7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJKnZhbCA9IGRhdGE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBQQ0lCSU9TX0ZVTkNfTk9UX1NVUFBPUlRFRDsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCisvKgorICogU2luY2UgU0g0IG9ubHkgZG9lcyAzMmJpdCBhY2Nlc3Mgd2UnbGwgaGF2ZSB0byBkbyBhIHJlYWQsCisgKiBtYXNrLHdyaXRlIG9wZXJhdGlvbi4KKyAqIFdlJ2xsIGFsbG93IGFuIG9kZCBieXRlIG9mZnNldCwgdGhvdWdoIGl0IHNob3VsZCBiZSBpbGxlZ2FsLgorICovCitzdGF0aWMgaW50IHNoNF9wY2lfd3JpdGUoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc2hpZnQ7CisJdTMyIGRhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2g0X3BjaV9sb2NrLCBmbGFncyk7CisJcGNpX3dyaXRlX3JlZyhDT05GSUdfQ01EKGJ1cywgZGV2Zm4sIHdoZXJlKSwgU0g0X1BDSVBBUik7CisJZGF0YSA9IHBjaV9yZWFkX3JlZyhTSDRfUENJUERSKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaDRfcGNpX2xvY2ssIGZsYWdzKTsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgMToKKwkJc2hpZnQgPSAod2hlcmUgJiAzKSA8PCAzOworCQlkYXRhICY9IH4oMHhmZiA8PCBzaGlmdCk7CisJCWRhdGEgfD0gKCh2YWwgJiAweGZmKSA8PCBzaGlmdCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc2hpZnQgPSAod2hlcmUgJiAyKSA8PCAzOworCQlkYXRhICY9IH4oMHhmZmZmIDw8IHNoaWZ0KTsKKwkJZGF0YSB8PSAoKHZhbCAmIDB4ZmZmZikgPDwgc2hpZnQpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWRhdGEgPSB2YWw7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBQQ0lCSU9TX0ZVTkNfTk9UX1NVUFBPUlRFRDsKKwl9CisKKwlwY2lfd3JpdGVfcmVnKGRhdGEsIFNINF9QQ0lQRFIpOworCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RydWN0IHBjaV9vcHMgc2g0X3BjaV9vcHMgPSB7CisJLnJlYWQJCT0gc2g0X3BjaV9yZWFkLAorCS53cml0ZQkJPSBzaDRfcGNpX3dyaXRlLAorfTsKKworLyoKKyAqIE5vdCByZWFsbHkgcmVsYXRlZCB0byBwY2lfb3BzLCBidXQgaXQncyBjb21tb24gYW5kIG5vdCB3b3J0aCBzaG92aW5nCisgKiBzb21ld2hlcmUgZWxzZSBmb3Igbm93Li4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwY2lfcHJvYmUgPSBQQ0lfUFJPQkVfQ09ORjE7CisKK2ludCBfX2luaXQgc2g0X3BjaV9jaGVja19kaXJlY3Qodm9pZCkKK3sKKwkvKgorCSAqIENoZWNrIGlmIGNvbmZpZ3VyYXRpb24gd29ya3MuCisJICovCisJaWYgKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9DT05GMSkgeworCQl1bnNpZ25lZCBpbnQgdG1wID0gcGNpX3JlYWRfcmVnKFNINF9QQ0lQQVIpOworCisJCXBjaV93cml0ZV9yZWcoUDFTRUcsIFNINF9QQ0lQQVIpOworCisJCWlmIChwY2lfcmVhZF9yZWcoU0g0X1BDSVBBUikgPT0gUDFTRUcpIHsKKwkJCXBjaV93cml0ZV9yZWcodG1wLCBTSDRfUENJUEFSKTsKKwkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOworCQkJcmVxdWVzdF9yZWdpb24oUENJX1JFRyhTSDRfUENJUEFSKSwgOCwgIlBDSSBjb25mMSIpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCisJCXBjaV93cml0ZV9yZWcodG1wLCBTSDRfUENJUEFSKTsKKwl9CisKKwlwcl9kZWJ1ZygiUENJOiBwY2lfY2hlY2tfZGlyZWN0IGZhaWxlZFxuIik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKy8qIEhhbmRsZSBnZW5lcmljIGZpeHVwcyAqLworc3RhdGljIHZvaWQgX19pbml0IHBjaV9maXh1cF9pZGVfYmFzZXMoc3RydWN0IHBjaV9kZXYgKmQpCit7CisJaW50IGk7CisKKwkvKgorCSAqIFBDSSBJREUgY29udHJvbGxlcnMgdXNlIG5vbi1zdGFuZGFyZCBJL08gcG9ydCBkZWNvZGluZywgcmVzcGVjdCBpdC4KKwkgKi8KKwlpZiAoKGQtPmNsYXNzID4+IDgpICE9IFBDSV9DTEFTU19TVE9SQUdFX0lERSkKKwkJcmV0dXJuOworCXByX2RlYnVnKCJQQ0k6IElERSBiYXNlIGFkZHJlc3MgZml4dXAgZm9yICVzXG4iLCBwY2lfbmFtZShkKSk7CisJZm9yKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXN0cnVjdCByZXNvdXJjZSAqciA9ICZkLT5yZXNvdXJjZVtpXTsKKworCQlpZiAoKHItPnN0YXJ0ICYgfjB4ODApID09IDB4Mzc0KSB7CisJCQlyLT5zdGFydCB8PSAyOworCQkJci0+ZW5kID0gci0+c3RhcnQ7CisJCX0KKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGNpX2ZpeHVwX2lkZV9iYXNlcyk7CisKK2NoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCit7CisJaWYgKCFzdHJjbXAoc3RyLCAib2ZmIikpIHsKKwkJcGNpX3Byb2JlID0gMDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHN0cjsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNuYXBnZWFyLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy1zbmFwZ2Vhci5jCmluZGV4IDNjYmQxNGQuLjUzZGQ4OTMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNuYXBnZWFyLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9vcHMtc25hcGdlYXIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIGFyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXNuYXBnZWFyLmMKICAqCiAgKiBBdXRob3I6ICBEYXZpZCBNY0N1bGxvdWdoIDxkYXZpZG1Ac25hcGdlYXIuY29tPgotICogCisgKgogICogUG9ydGVkIHRvIG5ldyBBUEkgYnkgUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KICAqCiAgKiBIaWdobHkgbGV2ZXJhZ2VkIGZyb20gcGNpLWJpZ3N1ci5jLCB3cml0dGVuIGJ5IER1c3RpbiBNY0ludGlyZS4KQEAgLTEyLDE1ICsxMiwxMSBAQAogICoKICAqIFBDSSBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFNuYXBHZWFyIGJvYXJkcwogICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSAicGNpLXNoNzc1MS5oIgorI2luY2x1ZGUgInBjaS1zaDQuaCIKIAogI2RlZmluZSBTTkFQR0VBUl9QQ0lfSU8JCTB4NDAwMAogI2RlZmluZSBTTkFQR0VBUl9QQ0lfTUVNCTB4ZmQwMDAwMDAKQEAgLTQzLDE0ICszOSwxMiBAQAogCS5mbGFncwkJPSBJT1JFU09VUkNFX01FTSwKIH07CiAKLWV4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDc3NTFfcGNpX29wczsKLQogc3RydWN0IHBjaV9jaGFubmVsIGJvYXJkX3BjaV9jaGFubmVsc1tdID0gewotCXsgJnNoNzc1MV9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAorCXsgJnNoNF9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAogCXsgMCwgfQogfTsKIAotc3RhdGljIHN0cnVjdCBzaDc3NTFfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0geworc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0gewogCS53aW5kb3cwCT0gewogCQkuYmFzZQk9IFNINzc1MV9DUzJfQkFTRV9BRERSLAogCQkuc2l6ZQk9IFNOQVBHRUFSX0xTUjBfU0laRSwKQEAgLTYxLDExICs1NSwxMSBAQAogCQkuc2l6ZQk9IFNOQVBHRUFSX0xTUjFfU0laRSwKIAl9LAogCi0JLmZsYWdzCT0gU0g3NzUxX1BDSUNfTk9fUkVTRVQsCisJLmZsYWdzCT0gU0g0X1BDSUNfTk9fUkVTRVQsCiB9OwogCiAvKgotICogSW5pdGlhbGl6ZSB0aGUgU25hcEdlYXIgUENJIGludGVyZmFjZSAKKyAqIEluaXRpYWxpemUgdGhlIFNuYXBHZWFyIFBDSSBpbnRlcmZhY2UKICAqIFNldHVwIGhhcmR3YXJlIHRvIGJlIENlbnRyYWwgRnVudGlvbgogICogQ29weSB0aGUgQlNSIHJlZ3MgdG8gdGhlIFBDSSBpbnRlcmZhY2UKICAqIFNldHVwIFBDSSB3aW5kb3dzIGludG8gbG9jYWwgUkFNCkBAIC03NSw3ICs2OSw3IEBACiAJcmV0dXJuIHNoNzc1MV9wY2ljX2luaXQoJnNoNzc1MV9wY2lfbWFwKTsKIH0KIAotaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEodTggc2xvdCwgdTggcGluKQoraW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHU4IHNsb3QsIHU4IHBpbikKIHsKIAlpbnQgaXJxID0gLTE7CiAKQEAgLTk4LDQgKzkyLDMgQEAKIHsKIAkvKiBOb3RoaW5nIHRvIGZpeHVwIC4uICovCiB9Ci0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvb3BzLXRpdGFuLmMgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MDk3YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBhcmNoL3NoL2RyaXZlcnMvcGNpL29wcy10aXRhbi5jCisgKgorICogUG9ydGVkIHRvIG5ldyBBUEkgYnkgUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KKyAqCisgKiBNb2RpZmllZCBmcm9tIG9wcy1zbmFwZ2Vhci5jIHdyaXR0ZW4gYnkgIERhdmlkIE1jQ3VsbG91Z2gKKyAqIEhpZ2hseSBsZXZlcmFnZWQgZnJvbSBwY2ktYmlnc3VyLmMsIHdyaXR0ZW4gYnkgRHVzdGluIE1jSW50aXJlLgorICoKKyAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKyAqCisgKiBQQ0kgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBUaXRhbiBib2FyZHMKKyAqLworCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpdGFuLmg+CisjaW5jbHVkZSAicGNpLXNoNC5oIgorCitpbnQgX19pbml0IHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTggc2xvdCwgdTggcGluKQoreworCWludCBpcnEgPSAtMTsKKworCXN3aXRjaCAoc2xvdCkgeworCWNhc2UgMDogaXJxID0gVElUQU5fSVJRX1dBTjsgICBicmVhazsJLyogZXRoMCAoV0FOKSAqLworCWNhc2UgMTogaXJxID0gVElUQU5fSVJRX0xBTjsgICBicmVhazsJLyogZXRoMSAoTEFOKSAqLworCWNhc2UgMjogaXJxID0gVElUQU5fSVJRX01QQ0lBOyBicmVhazsJLyogbVBDSSBBICovCisJY2FzZSAzOiBpcnEgPSBUSVRBTl9JUlFfTVBDSUI7IGJyZWFrOwkvKiBtUENJIEIgKi8KKwljYXNlIDQ6IGlycSA9IFRJVEFOX0lSUV9VU0I7ICAgYnJlYWs7CS8qIFVTQiAqLworCWRlZmF1bHQ6CisJCXByaW50ayhLRVJOX0lORk8gIlBDSTogQmFkIElSUSBtYXBwaW5nICIKKwkJCQkgInJlcXVlc3QgZm9yIHNsb3QgJWRcbiIsIHNsb3QpOworCQlyZXR1cm4gLTE7CisJfQorCisJcHJpbnRrKCJQQ0k6IE1hcHBpbmcgVElUQU4gSVJRIGZvciBzbG90ICVkLCBwaW4gJWMgdG8gaXJxICVkXG4iLAorCQlzbG90LCBwaW4gLSAxICsgJ0EnLCBpcnEpOworCisJcmV0dXJuIGlycTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfaW9fcmVzb3VyY2UgPSB7CisJLm5hbWUJPSAiU0g3NzUxX0lPIiwKKwkuc3RhcnQJPSBTSDc3NTFfUENJX0lPX0JBU0UsCisJLmVuZAk9IFNINzc1MV9QQ0lfSU9fQkFTRSArIFNINzc1MV9QQ0lfSU9fU0laRSAtIDEsCisJLmZsYWdzCT0gSU9SRVNPVVJDRV9JTworfTsKKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBzaDc3NTFfbWVtX3Jlc291cmNlID0geworCS5uYW1lCT0gIlNINzc1MV9tZW0iLAorCS5zdGFydAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UsCisJLmVuZAk9IFNINzc1MV9QQ0lfTUVNT1JZX0JBU0UgKyBTSDc3NTFfUENJX01FTV9TSVpFIC0gMSwKKwkuZmxhZ3MJPSBJT1JFU09VUkNFX01FTQorfTsKKworc3RydWN0IHBjaV9jaGFubmVsIGJvYXJkX3BjaV9jaGFubmVsc1tdID0geworCXsgJnNoNF9wY2lfb3BzLCAmc2g3NzUxX2lvX3Jlc291cmNlLCAmc2g3NzUxX21lbV9yZXNvdXJjZSwgMCwgMHhmZiB9LAorCXsgTlVMTCwgTlVMTCwgTlVMTCwgMCwgMCB9LAorfTsKK0VYUE9SVF9TWU1CT0woYm9hcmRfcGNpX2NoYW5uZWxzKTsKKworc3RhdGljIHN0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHNoNzc1MV9wY2lfbWFwID0geworCS53aW5kb3cwCT0geworCQkuYmFzZQk9IFNINzc1MV9DUzJfQkFTRV9BRERSLAorCQkuc2l6ZQk9IFNINzc1MV9NRU1fUkVHSU9OX1NJWkUqMiwJLyogY3MyIGFuZCBjczMgKi8KKwl9LAorCisJLndpbmRvdzEJPSB7CisJCS5iYXNlCT0gU0g3NzUxX0NTMl9CQVNFX0FERFIsCisJCS5zaXplCT0gU0g3NzUxX01FTV9SRUdJT05fU0laRSoyLAorCX0sCisKKwkuZmxhZ3MJPSBTSDRfUENJQ19OT19SRVNFVCwKK307CisKK2ludCBfX2luaXQgcGNpYmlvc19pbml0X3BsYXRmb3JtKHZvaWQpCit7CisJcmV0dXJuIHNoNzc1MV9wY2ljX2luaXQoJnNoNzc1MV9wY2lfbWFwKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWF1dG8uYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLWF1dG8uYwppbmRleCA0Y2VmNGQxLi5lY2YxNjM0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1hdXRvLmMKKysrIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktYXV0by5jCkBAIC00NSwxMSArNDUsMTEgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogCi0jdW5kZWYJREVCVUcKLSNpZmRlZiAJREVCVUcKKyNkZWZpbmUJREVCVUcKKyNpZmRlZglERUJVRwogI2RlZmluZQlEQkcoeC4uLikJcHJpbnRrKHgpCiAjZWxzZQotI2RlZmluZQlEQkcoeC4uLikJCisjZGVmaW5lCURCRyh4Li4uKQogI2VuZGlmCiAKIC8qCkBAIC0xMDIsNyArMTAyLDcgQEAKIHN0YXRpYyB1MzIgcGNpYXV0b19sb3dlcl9tZW1zcGM7CiBzdGF0aWMgdTMyIHBjaWF1dG9fdXBwZXJfbWVtc3BjOwogCi1zdGF0aWMgdm9pZCBfX2luaXQgCitzdGF0aWMgdm9pZCBfX2luaXQKIHBjaWF1dG9fc2V0dXBfYmFycyhzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UsCiAJCSAgIGludCB0b3BfYnVzLAogCQkgICBpbnQgY3VycmVudF9idXMsCkBAIC0xMTYsNyArMTE2LDYgQEAKIAlpbnQgZm91bmRfbWVtNjQgPSAwOwogCiAJZm9yIChiYXIgPSBQQ0lfQkFTRV9BRERSRVNTXzA7IGJhciA8PSBiYXJfbGltaXQ7IGJhcis9NCkgewotI2lmICFkZWZpbmVkKENPTkZJR19TSF9IUzc3NTFSVk9JUCkgJiYgIWRlZmluZWQoQ09ORklHX1NIX1JUUzc3NTFSMkQpCiAJCXUzMiBiYXJfYWRkcjsKIAogCQkvKiBSZWFkIHRoZSBvbGQgQkFSIHZhbHVlICovCkBAIC0xMjUsNyArMTI0LDYgQEAKIAkJCQkJcGNpX2RldmZuLAogCQkJCQliYXIsCiAJCQkJCSZiYXJfYWRkcik7Ci0jZW5kaWYKIAogCQkvKiBUaWNrbGUgdGhlIEJBUiBhbmQgZ2V0IHRoZSByZXNwb25zZSAqLwogCQllYXJseV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgdG9wX2J1cywKQEAgLTE0MCw4ICsxMzgsNyBAQAogCQkJCQliYXIsCiAJCQkJCSZiYXJfcmVzcG9uc2UpOwogCi0jaWYgIWRlZmluZWQoQ09ORklHX1NIX0hTNzc1MVJWT0lQKSAmJiAhZGVmaW5lZChDT05GSUdfU0hfUlRTNzc1MVIyRCkKLQkJLyogCisJCS8qCiAJCSAqIFdyaXRlIHRoZSBvbGQgQkFSIHZhbHVlIGJhY2sgb3V0LCBvbmx5IHVwZGF0ZSB0aGUgQkFSCiAJCSAqIGlmIHdlIGltcGxpY2l0bHkgd2FudCByZXNvdXJjZXMgdG8gYmUgdXBkYXRlZCwgd2hpY2gKIAkJICogaXMgZG9uZSBieSB0aGUgZ2VuZXJpYyBjb2RlIGZ1cnRoZXIgZG93bi4gLS0gUEZNLgpAQCAtMTUxLDcgKzE0OCw2IEBACiAJCQkJCSBwY2lfZGV2Zm4sCiAJCQkJCSBiYXIsCiAJCQkJCSBiYXJfYWRkcik7Ci0jZW5kaWYKIAogCQkvKiBJZiBCQVIgaXMgbm90IGltcGxlbWVudGVkIGdvIHRvIHRoZSBuZXh0IEJBUiAqLwogCQlpZiAoIWJhcl9yZXNwb25zZSkKQEAgLTE3Nyw3ICsxNzMsNyBAQAogCQkJICAgIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQpCiAJCQkJZm91bmRfbWVtNjQgPSAxOwogCi0JCQlhZGRyX21hc2sgPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwkJCisJCQlhZGRyX21hc2sgPSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLOwogCQkJdXBwZXJfbGltaXQgPSAmcGNpYXV0b191cHBlcl9tZW1zcGM7CiAJCQlsb3dlcl9saW1pdCA9ICZwY2lhdXRvX2xvd2VyX21lbXNwYzsKIAkJCURCRygiICAgICAgICBNZW0iKTsKQEAgLTE5MywyMiArMTg5LDIyIEBACiAJCWlmICgoYmFyX3ZhbHVlICsgYmFyX3NpemUpID4gKnVwcGVyX2xpbWl0KSB7CiAJCQlpZiAoYmFyX3Jlc3BvbnNlICYgUENJX0JBU0VfQUREUkVTU19TUEFDRSkgewogCQkJCWlmIChpb19yZXNvdXJjZV9pbnVzZS0+Y2hpbGQpIHsKLQkJCQkJaW9fcmVzb3VyY2VfaW51c2UgPSAKKwkJCQkJaW9fcmVzb3VyY2VfaW51c2UgPQogCQkJCQkJaW9fcmVzb3VyY2VfaW51c2UtPmNoaWxkOwotCQkJCQlwY2lhdXRvX2xvd2VyX2lvc3BjID0gCisJCQkJCXBjaWF1dG9fbG93ZXJfaW9zcGMgPQogCQkJCQkJaW9fcmVzb3VyY2VfaW51c2UtPnN0YXJ0OwotCQkJCQlwY2lhdXRvX3VwcGVyX2lvc3BjID0gCisJCQkJCXBjaWF1dG9fdXBwZXJfaW9zcGMgPQogCQkJCQkJaW9fcmVzb3VyY2VfaW51c2UtPmVuZCArIDE7CiAJCQkJCWdvdG8gcmV0cnk7CiAJCQkJfQogCiAJCQl9IGVsc2UgewogCQkJCWlmIChtZW1fcmVzb3VyY2VfaW51c2UtPmNoaWxkKSB7Ci0JCQkJCW1lbV9yZXNvdXJjZV9pbnVzZSA9IAorCQkJCQltZW1fcmVzb3VyY2VfaW51c2UgPQogCQkJCQkJbWVtX3Jlc291cmNlX2ludXNlLT5jaGlsZDsKLQkJCQkJcGNpYXV0b19sb3dlcl9tZW1zcGMgPSAKKwkJCQkJcGNpYXV0b19sb3dlcl9tZW1zcGMgPQogCQkJCQkJbWVtX3Jlc291cmNlX2ludXNlLT5zdGFydDsKLQkJCQkJcGNpYXV0b191cHBlcl9tZW1zcGMgPSAKKwkJCQkJcGNpYXV0b191cHBlcl9tZW1zcGMgPQogCQkJCQkJbWVtX3Jlc291cmNlX2ludXNlLT5lbmQgKyAxOwogCQkJCQlnb3RvIHJldHJ5OwogCQkJCX0KQEAgLTIzMCw3ICsyMjYsNyBAQAogCQkgKiBJZiB3ZSBhcmUgYSA2NC1iaXQgZGVjb2RlciB0aGVuIGluY3JlbWVudCB0byB0aGUKIAkJICogdXBwZXIgMzIgYml0cyBvZiB0aGUgYmFyIGFuZCBmb3JjZSBpdCB0byBsb2NhdGUKIAkJICogaW4gdGhlIGxvd2VyIDRHQiBvZiBtZW1vcnkuCi0JCSAqLyAKKwkJICovCiAJCWlmIChmb3VuZF9tZW02NCkgewogCQkJYmFyICs9IDQ7CiAJCQllYXJseV93cml0ZV9jb25maWdfZHdvcmQoaG9zZSwgdG9wX2J1cywKQEAgLTM2Miw3ICszNTgsNiBAQAogewogCXUzMiB0ZW1wOwogCi0jaWYgIWRlZmluZWQoQ09ORklHX1NIX0hTNzc1MVJWT0lQKSAmJiAhZGVmaW5lZChDT05GSUdfU0hfUlRTNzc1MVIyRCkKIAkvKgogCSAqIFtqc3VuXSB3ZSBhbHdheXMgYnVtcCB1cCBiYXNlbGluZXMgYSBsaXR0bGUsIHNvIHRoYXQgaWYgdGhlcmUKIAkgKiBub3RoaW5nIGJlaGluZCBQMlAgYnJpZGdlLCB3ZSBkb24ndCB3aW5kIHVwIG92ZXJsYXBwaW5nIElPL01FTQpAQCAtMzcwLDcgKzM2NSw2IEBACiAJICovCiAJcGNpYXV0b19sb3dlcl9tZW1zcGMgKz0gMTsKIAlwY2lhdXRvX2xvd2VyX2lvc3BjICs9IDE7Ci0jZW5kaWYKIAogCS8qCiAJICogQ29uZmlndXJlIHN1Ym9yZGluYXRlIGJ1cyBudW1iZXIuICBUaGUgUENJIHN1YnN5c3RlbQpAQCAtMzk2LDExICszOTAsNiBAQAogCSAqIGNvbmZpZ3VyZWQgYnkgdGhpcyByb3V0aW5lIHRvIGhhcHBpbHkgbGl2ZSBiZWhpbmQgYQogCSAqIFAyUCBicmlkZ2UgaW4gYSBzeXN0ZW0uCiAJICovCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfSFM3NzUxUlZPSVApIHx8IGRlZmluZWQoQ09ORklHX1NIX1JUUzc3NTFSMkQpCi0JcGNpYXV0b19sb3dlcl9tZW1zcGMgKz0gMHgwMDQwMDAwMDsKLQlwY2lhdXRvX2xvd2VyX2lvc3BjICs9IDB4MDAwMDQwMDA7Ci0jZW5kaWYKLQogCS8qIEFsaWduIG1lbW9yeSBhbmQgSS9PIHRvIDRLQiBhbmQgNCBieXRlIGJvdW5kYXJpZXMuICovCiAJcGNpYXV0b19sb3dlcl9tZW1zcGMgPSAocGNpYXV0b19sb3dlcl9tZW1zcGMgKyAoMHgxMDAwIC0gMSkpCiAJCSYgfigweDEwMDAgLSAxKTsKQEAgLTQzMywxMiArNDIyLDEyIEBACiAJaW50IGRldmZuX3N0b3AgPSAweGZmOwogCiAJc3ViX2J1cyA9IGN1cnJlbnRfYnVzOwotCQorCiAJaWYgKGhvc2UtPmZpcnN0X2RldmZuKQogCQlkZXZmbl9zdGFydCA9IGhvc2UtPmZpcnN0X2RldmZuOwogCWlmIChob3NlLT5sYXN0X2RldmZuKQogCQlkZXZmbl9zdG9wID0gaG9zZS0+bGFzdF9kZXZmbjsKLQkKKwogCWZvciAocGNpX2RldmZuPWRldmZuX3N0YXJ0OyBwY2lfZGV2Zm48ZGV2Zm5fc3RvcDsgcGNpX2RldmZuKyspIHsKIAogCQlpZiAoUENJX0ZVTkMocGNpX2RldmZuKSAmJiAhZm91bmRfbXVsdGkpCkBAIC00NzEsOSArNDYwLDYgQEAKIAkJaWYgKChwY2lfY2xhc3MgPj4gMTYpID09IFBDSV9DTEFTU19CUklER0VfUENJKSB7CiAJCQlEQkcoIiAgICAgICAgQnJpZGdlOiBwcmltYXJ5PSUuMngsIHNlY29uZGFyeT0lLjJ4XG4iLAogCQkJCWN1cnJlbnRfYnVzLCBzdWJfYnVzICsgMSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfSFM3NzUxUlZPSVApIHx8IGRlZmluZWQoQ09ORklHX1NIX1JUUzc3NTFSMkQpCi0JCQlwY2lhdXRvX3NldHVwX2JhcnMoaG9zZSwgdG9wX2J1cywgY3VycmVudF9idXMsIHBjaV9kZXZmbiwgUENJX0JBU0VfQUREUkVTU18xKTsKLSNlbmRpZgogCQkJcGNpYXV0b19wcmVzY2FuX3NldHVwX2JyaWRnZShob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywKIAkJCQkJCSAgICAgcGNpX2RldmZuLCBzdWJfYnVzKTsKIAkJCURCRygiU2Nhbm5pbmcgc3ViIGJ1cyAlLjJ4LCBJL08gMHglLjh4LCBNZW0gMHglLjh4XG4iLApAQCAtNDkwLDEwICs0NzYsMTAgQEAKIAkJCURCRygiUENJIEF1dG9jb25maWc6IEZvdW5kIENhcmRCdXMgYnJpZGdlLCBkZXZpY2UgJWQgZnVuY3Rpb24gJWRcbiIsIFBDSV9TTE9UKHBjaV9kZXZmbiksIFBDSV9GVU5DKHBjaV9kZXZmbikpOwogCQkJLyogUGxhY2UgQ2FyZEJ1cyBTb2NrZXQvRXhDQSByZWdpc3RlcnMgKi8KIAkJCXBjaWF1dG9fc2V0dXBfYmFycyhob3NlLCB0b3BfYnVzLCBjdXJyZW50X2J1cywgcGNpX2RldmZuLCBQQ0lfQkFTRV9BRERSRVNTXzApOwotIAorCiAJCQlwY2lhdXRvX3ByZXNjYW5fc2V0dXBfY2FyZGJ1c19icmlkZ2UoaG9zZSwgdG9wX2J1cywKIAkJCQkJY3VycmVudF9idXMsIHBjaV9kZXZmbiwgc3ViX2J1cyk7Ci0gCisKIAkJCURCRygiU2Nhbm5pbmcgc3ViIGJ1cyAlLjJ4LCBJL08gMHglLjh4LCBNZW0gMHglLjh4XG4iLAogCQkJCXN1Yl9idXMgKyAxLAogCQkJCXBjaWF1dG9fbG93ZXJfaW9zcGMsIHBjaWF1dG9fbG93ZXJfbWVtc3BjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2MWQ2MAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNC5oCkBAIC0wLDAgKzEsMTgwIEBACisjaWZuZGVmIF9fUENJX1NINF9ICisjZGVmaW5lIF9fUENJX1NINF9ICisKKyNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCisjaW5jbHVkZSAicGNpLXNoNzc4MC5oIgorI2Vsc2UKKyNpbmNsdWRlICJwY2ktc2g3NzUxLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGFzbS9pby5oPgorCisvKiBzdGFydHVwIHZhbHVlcyAqLworI2RlZmluZSBQQ0lfUFJPQkVfQklPUwkJMQorI2RlZmluZSBQQ0lfUFJPQkVfQ09ORjEJCTIKKyNkZWZpbmUgUENJX1BST0JFX0NPTkYyCQk0CisjZGVmaW5lIFBDSV9OT19TT1JUCQkweDEwMAorI2RlZmluZSBQQ0lfQklPU19TT1JUCQkweDIwMAorI2RlZmluZSBQQ0lfTk9fQ0hFQ0tTCQkweDQwMAorI2RlZmluZSBQQ0lfQVNTSUdOX1JPTVMJCTB4MTAwMAorI2RlZmluZSBQQ0lfQklPU19JUlFfU0NBTgkweDIwMDAKKworI2RlZmluZSBTSDRfUENJQ1IJCTB4MTAwCQkvKiBQQ0kgQ29udHJvbCBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9QUkVGSVgJICAweEE1MDAwMDAwCS8qIENSIHByZWZpeCBmb3Igd3JpdGUgKi8KKyAgI2RlZmluZSBTSDRfUENJQ1JfRlRPCQkgIDB4MDAwMDA0MDAJLyogVFJEWS9JUkRZIEVuYWJsZSAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9UUlNCCSAgMHgwMDAwMDIwMAkvKiBUYXJnZXQgUmVhZCBTaW5nbGUgKi8KKyAgI2RlZmluZSBTSDRfUENJQ1JfQlNXUAkgIDB4MDAwMDAxMDAJLyogVGFyZ2V0IEJ5dGUgU3dhcCAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9QTFVQCSAgMHgwMDAwMDA4MAkvKiBFbmFibGUgUENJIFB1bGx1cCAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9BUkJNCSAgMHgwMDAwMDA0MAkvKiBQQ0kgQXJiaXRyYXRpb24gTW9kZSAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9NRAkJICAweDAwMDAwMDMwCS8qIE1EOSBhbmQgTUQxMCBzdGF0dXMgKi8KKyAgI2RlZmluZSBTSDRfUENJQ1JfU0VSUgkgIDB4MDAwMDAwMDgJLyogU0VSUiBvdXRwdXQgYXNzZXJ0ICovCisgICNkZWZpbmUgU0g0X1BDSUNSX0lOVEEJICAweDAwMDAwMDA0CS8qIElOVEEgb3V0cHV0IGFzc2VydCAqLworICAjZGVmaW5lIFNINF9QQ0lDUl9QUlNUCSAgMHgwMDAwMDAwMgkvKiBQQ0kgUmVzZXQgQXNzZXJ0ICovCisgICNkZWZpbmUgU0g0X1BDSUNSX0NGSU4JICAweDAwMDAwMDAxCS8qIENlbnRyYWwgRnVuLiBJbml0IERvbmUgKi8KKyNkZWZpbmUgU0g0X1BDSUxTUjAJCTB4MTA0CQkvKiBQQ0kgTG9jYWwgU3BhY2UgUmVnaXN0ZXIwICovCisjZGVmaW5lIFNINF9QQ0lMU1IxCQkweDEwOAkJLyogUENJIExvY2FsIFNwYWNlIFJlZ2lzdGVyMSAqLworI2RlZmluZSBTSDRfUENJTEFSMAkJMHgxMEMJCS8qIFBDSSBMb2NhbCBBZGRyIFJlZ2lzdGVyMSAqLworI2RlZmluZSBTSDRfUENJTEFSMQkJMHgxMTAJCS8qIFBDSSBMb2NhbCBBZGRyIFJlZ2lzdGVyMSAqLworI2RlZmluZSBTSDRfUENJSU5UCQkweDExNAkJLyogUENJIEludGVycnVwdCBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfTUxDSwkgIDB4MDAwMDgwMDAJLyogTWFzdGVyIExvY2sgRXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UX1RBQlQJICAweDAwMDA0MDAwCS8qIFRhcmdldCBBYm9ydCBFcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfVFJFVAkgIDB4MDAwMDAyMDAJLyogVGFyZ2V0IFJldHJ5IEVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVF9NRkRFCSAgMHgwMDAwMDEwMAkvKiBNYXN0ZXIgRnVuYy4gRGlzYWJsZSBFcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfUFJUWQkgIDB4MDAwMDAwODAJLyogQWRkcmVzcyBQYXJpdHkgRXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJSU5UX1NFUlIJICAweDAwMDAwMDQwCS8qIFNFUlIgRGV0ZWN0aW9uIEVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVF9UV0RQCSAgMHgwMDAwMDAyMAkvKiBUZ3QuIFdyaXRlIFBhcml0eSBFcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfVFJEUAkgIDB4MDAwMDAwMTAJLyogVGd0LiBSZWFkIFBhcml0eSBFcnIgRGV0LiAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfTVRBQlQJICAweDAwMDAwMDA4CS8qIE1hc3Rlci1UZ3QuIEFib3J0IEVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUlOVF9NTUFCVAkgIDB4MDAwMDAwMDQJLyogTWFzdGVyLU1hc3RlciBBYm9ydCBFcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lJTlRfTVdQRAkgIDB4MDAwMDAwMDIJLyogTWFzdGVyIFdyaXRlIFBFUlIgRGV0ZWN0ICovCisgICNkZWZpbmUgU0g0X1BDSUlOVF9NUlBECSAgMHgwMDAwMDAwMQkvKiBNYXN0ZXIgUmVhZCBQRVJSIERldGVjdCAqLworI2RlZmluZSBTSDRfUENJSU5UTQkJMHgxMTgJCS8qIFBDSSBJbnRlcnJ1cHQgTWFzayAqLworI2RlZmluZSBTSDRfUENJQUxSCQkweDExQwkJLyogRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLworI2RlZmluZSBTSDRfUENJQ0xSCQkweDEyMAkJLyogRXJyb3IgQ29tbWFuZC9EYXRhICovCisgICNkZWZpbmUgU0g0X1BDSUNMUl9NUElPCSAgMHg4MDAwMDAwMAorICAjZGVmaW5lIFNINF9QQ0lDTFJfTURNQTAJICAweDQwMDAwMDAwCS8qIERNQTAgVHJhbnNmZXIgRXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJQ0xSX01ETUExCSAgMHgyMDAwMDAwMAkvKiBETUExIFRyYW5zZmVyIEVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUNMUl9NRE1BMgkgIDB4MTAwMDAwMDAJLyogRE1BMiBUcmFuc2ZlciBFcnJvciAqLworICAjZGVmaW5lIFNINF9QQ0lDTFJfTURNQTMJICAweDA4MDAwMDAwCS8qIERNQTMgVHJhbnNmZXIgRXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJQ0xSX1RHVAkgIDB4MDQwMDAwMDAJLyogVGFyZ2V0IFRyYW5zZmVyIEVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUNMUl9DTURMCSAgMHgwMDAwMDAwRgkvKiBQQ0kgQ29tbWFuZCBhdCBFcnJvciAqLworI2RlZmluZSBTSDRfUENJQUlOVAkJMHgxMzAJCS8qIEFyYml0ZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJLTgkgIDB4MDAwMDIwMDAJLyogTWFzdGVyIEJyb2tlbiBJbnRlcnJ1cHQgKi8KKyAgI2RlZmluZSBTSDRfUENJQUlOVF9UQlRPCSAgMHgwMDAwMTAwMAkvKiBUYXJnZXQgQnVzIFRpbWUgT3V0ICovCisgICNkZWZpbmUgU0g0X1BDSUFJTlRfTUJUTwkgIDB4MDAwMDEwMDAJLyogTWFzdGVyIEJ1cyBUaW1lIE91dCAqLworICAjZGVmaW5lIFNINF9QQ0lBSU5UX1RBQlQJICAweDAwMDAwMDA4CS8qIFRhcmdldCBBYm9ydCAqLworICAjZGVmaW5lIFNINF9QQ0lBSU5UX01BQlQJICAweDAwMDAwMDA0CS8qIE1hc3RlciBBYm9ydCAqLworICAjZGVmaW5lIFNINF9QQ0lBSU5UX1JEUEUJICAweDAwMDAwMDAyCS8qIFJlYWQgRGF0YSBQYXJpdHkgRXJyb3IgKi8KKyAgI2RlZmluZSBTSDRfUENJQUlOVF9XRFBFCSAgMHgwMDAwMDAwMQkvKiBXcml0ZSBEYXRhIFBhcml0eSBFcnJvciAqLworI2RlZmluZSBTSDRfUENJQUlOVE0gICAgICAgICAgICAweDEzNAkJLyogQXJiaXRlciBJbnQuIE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g0X1BDSUJNTFIJCTB4MTM4CQkvKiBFcnJvciBCdXMgTWFzdGVyIFJlZ2lzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSUJNTFJfUkVRNAkgIDB4MDAwMDAwMTAJLyogUkVRNCBidXMgbWFzdGVyIGF0IGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUJNTFJfUkVRMwkgIDB4MDAwMDAwMDgJLyogUkVRMyBidXMgbWFzdGVyIGF0IGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUJNTFJfUkVRMgkgIDB4MDAwMDAwMDQJLyogUkVRMiBidXMgbWFzdGVyIGF0IGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUJNTFJfUkVRMQkgIDB4MDAwMDAwMDIJLyogUkVRMSBidXMgbWFzdGVyIGF0IGVycm9yICovCisgICNkZWZpbmUgU0g0X1BDSUJNTFJfUkVRMAkgIDB4MDAwMDAwMDEJLyogUkVRMCBidXMgbWFzdGVyIGF0IGVycm9yICovCisjZGVmaW5lIFNINF9QQ0lETUFCVAkJMHgxNDAJCS8qIERNQSBUcmFuc2ZlciBBcmIuIFJlZ2lzdGVyICovCisgICNkZWZpbmUgU0g0X1BDSURNQUJUX1JSQk4JICAweDAwMDAwMDAxCS8qIERNQSBBcmJpdG9yIFJvdW5kLVJvYmluICovCisjZGVmaW5lIFNINF9QQ0lEUEEwCQkweDE4MAkJLyogRE1BMCBUcmFuc2ZlciBBZGRyLiAqLworI2RlZmluZSBTSDRfUENJRExBMAkJMHgxODQJCS8qIERNQTAgTG9jYWwgQWRkci4gKi8KKyNkZWZpbmUgU0g0X1BDSURUQzAJCTB4MTg4CQkvKiBETUEwIFRyYW5zZmVyIENudC4gKi8KKyNkZWZpbmUgU0g0X1BDSURDUjAJCTB4MThDCQkvKiBETUEwIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJRENSX0FMR04JICAweDAwMDAwNjAwCS8qIERNQSBBbGlnbm1lbnQgTW9kZSAqLworICAjZGVmaW5lIFNINF9QQ0lEQ1JfTUFTVAkgIDB4MDAwMDAxMDAJLyogRE1BIFRlcm1pbmF0aW9uIFR5cGUgKi8KKyAgI2RlZmluZSBTSDRfUENJRENSX0lOVE0JICAweDAwMDAwMDgwCS8qIERNQSBJbnRlcnJ1cHQgRG9uZSBNYXNrKi8KKyAgI2RlZmluZSBTSDRfUENJRENSX0lOVFMJICAweDAwMDAwMDQwCS8qIERNQSBJbnRlcnJ1cHQgRG9uZSBTdGF0dXMgKi8KKyAgI2RlZmluZSBTSDRfUENJRENSX0xITEQJICAweDAwMDAwMDIwCS8qIExvY2FsIEFkZHJlc3MgQ29udHJvbCAqLworICAjZGVmaW5lIFNINF9QQ0lEQ1JfUEhMRAkgIDB4MDAwMDAwMTAJLyogUENJIEFkZHJlc3MgQ29udHJvbCovCisgICNkZWZpbmUgU0g0X1BDSURDUl9JT1NFTAkgIDB4MDAwMDAwMDgJLyogUENJIEFkZHJlc3MgU3BhY2UgVHlwZSAqLworICAjZGVmaW5lIFNINF9QQ0lEQ1JfRElSCSAgMHgwMDAwMDAwNAkvKiBETUEgVHJhbnNmZXIgRGlyZWN0aW9uICovCisgICNkZWZpbmUgU0g0X1BDSURDUl9TVE9QCSAgMHgwMDAwMDAwMgkvKiBGb3JjZSBETUEgU3RvcCAqLworICAjZGVmaW5lIFNINF9QQ0lEQ1JfU1RSVAkgIDB4MDAwMDAwMDEJLyogRE1BIFN0YXJ0ICovCisjZGVmaW5lIFNINF9QQ0lEUEExCQkweDE5MAkJLyogRE1BMSBUcmFuc2ZlciBBZGRyLiAqLworI2RlZmluZSBTSDRfUENJRExBMQkJMHgxOTQJCS8qIERNQTEgTG9jYWwgQWRkci4gKi8KKyNkZWZpbmUgU0g0X1BDSURUQzEJCTB4MTk4CQkvKiBETUExIFRyYW5zZmVyIENudC4gKi8KKyNkZWZpbmUgU0g0X1BDSURDUjEJCTB4MTlDCQkvKiBETUExIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g0X1BDSURQQTIJCTB4MUEwCQkvKiBETUEyIFRyYW5zZmVyIEFkZHIuICovCisjZGVmaW5lIFNINF9QQ0lETEEyCQkweDFBNAkJLyogRE1BMiBMb2NhbCBBZGRyLiAqLworI2RlZmluZSBTSDRfUENJRFRDMgkJMHgxQTgJCS8qIERNQTIgVHJhbnNmZXIgQ250LiAqLworI2RlZmluZSBTSDRfUENJRENSMgkJMHgxQUMJCS8qIERNQTIgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBTSDRfUENJRFBBMwkJMHgxQjAJCS8qIERNQTMgVHJhbnNmZXIgQWRkci4gKi8KKyNkZWZpbmUgU0g0X1BDSURMQTMJCTB4MUI0CQkvKiBETUEzIExvY2FsIEFkZHIuICovCisjZGVmaW5lIFNINF9QQ0lEVEMzCQkweDFCOAkJLyogRE1BMyBUcmFuc2ZlciBDbnQuICovCisjZGVmaW5lIFNINF9QQ0lEQ1IzCQkweDFCQwkJLyogRE1BMyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNINF9QQ0lQQVIJCTB4MUMwCQkvKiBQSU8gQWRkcmVzcyBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lQQVJfQ0ZHRU4JICAweDgwMDAwMDAwCS8qIENvbmZpZ3VyYXRpb24gRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBBUl9CVVNOTwkgIDB4MDBGRjAwMDAJLyogQ29uZmlnLiBCdXMgTnVtYmVyICovCisgICNkZWZpbmUgU0g0X1BDSVBBUl9ERVZOTwkgIDB4MDAwMEZGMDAJLyogQ29uZmlnLiBEZXZpY2UgTnVtYmVyICovCisgICNkZWZpbmUgU0g0X1BDSVBBUl9SRUdBRAkgIDB4MDAwMDAwRkMJLyogUmVnaXN0ZXIgQWRkcmVzcyBOdW1iZXIgKi8KKyNkZWZpbmUgU0g0X1BDSU1CUgkJMHgxQzQJCS8qIE1lbW9yeSBCYXNlIEFkZHJlc3MgKi8KKyAgI2RlZmluZSBTSDRfUENJTUJSX01BU0sJICAweEZGMDAwMDAwCS8qIE1lbW9yeSBTcGFjZSBNYXNrICovCisgICNkZWZpbmUgU0g0X1BDSU1CUl9MT0NLCSAgMHgwMDAwMDAwMQkvKiBMb2NrIE1lbW9yeSBTcGFjZSAqLworI2RlZmluZSBTSDRfUENJSU9CUgkJMHgxQzgJCS8qIEkvTyBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJSU9CUl9NQVNLCSAgMHhGRkZDMDAwMAkvKiBJTyBTcGFjZSBNYXNrICovCisgICNkZWZpbmUgU0g0X1BDSUlPQlJfTE9DSwkgIDB4MDAwMDAwMDEJLyogTG9jayBJTyBTcGFjZSAqLworI2RlZmluZSBTSDRfUENJUElOVAkJMHgxQ0MJCS8qIFBvd2VyIE1nbW50IEludC4gUmVnaXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJUElOVF9EMwkgIDB4MDAwMDAwMDIJLyogRDMgUHdyIE1nbXQuIEludGVycnVwdCAqLworICAjZGVmaW5lIFNINF9QQ0lQSU5UX0QwCSAgMHgwMDAwMDAwMQkvKiBEMCBQd3IgTWdtdC4gSW50ZXJydXB0ICovCisjZGVmaW5lIFNINF9QQ0lQSU5UTQkJMHgxRDAJCS8qIFBvd2VyIE1nbW50IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g0X1BDSUNMS1IJCTB4MUQ0CQkvKiBDbG9jayBDdHJsLiBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lDTEtSX1BDU1RQCSAgMHgwMDAwMDAwMgkvKiBQQ0kgQ2xvY2sgU3RvcCAqLworICAjZGVmaW5lIFNINF9QQ0lDTEtSX0JDU1RQCSAgMHgwMDAwMDAwMQkvKiBCQ0xLIENsb2NrIFN0b3AgKi8KKy8qIEZvciBkZWZpbml0aW9ucyBvZiBCQ1IsIE1DUiBzZWUgLi4uICovCisjZGVmaW5lIFNINF9QQ0lCQ1IxCQkweDFFMAkJLyogTWVtb3J5IEJDUjEgUmVnaXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJTUJSMAkJU0g0X1BDSUJDUjEKKyNkZWZpbmUgU0g0X1BDSUJDUjIJCTB4MUU0CQkvKiBNZW1vcnkgQkNSMiBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lNQk1SMAkJU0g0X1BDSUJDUjIKKyNkZWZpbmUgU0g0X1BDSVdDUjEJCTB4MUU4CQkvKiBXYWl0IENvbnRyb2wgMSBSZWdpc3RlciAqLworI2RlZmluZSBTSDRfUENJV0NSMgkJMHgxRUMJCS8qIFdhaXQgQ29udHJvbCAyIFJlZ2lzdGVyICovCisjZGVmaW5lIFNINF9QQ0lXQ1IzCQkweDFGMAkJLyogV2FpdCBDb250cm9sIDMgUmVnaXN0ZXIgKi8KKyAgI2RlZmluZSBTSDRfUENJTUJSMgkJU0g0X1BDSVdDUjMKKyNkZWZpbmUgU0g0X1BDSU1DUgkJMHgxRjQJCS8qIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFNINF9QQ0lCQ1IzCQkweDFmOAkJLyogTWVtb3J5IEJDUjMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g0X1BDSVBDVFIgICAgICAgICAgICAgMHgyMDAJCS8qIFBvcnQgQ29udHJvbCBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lQQ1RSX1AyRU4JICAweDAwMDQwMDAwMAkvKiBQb3J0IDIgRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBDVFJfUDFFTgkgIDB4MDAwMjAwMDAwCS8qIFBvcnQgMSBFbmFibGUgKi8KKyAgI2RlZmluZSBTSDRfUENJUENUUl9QMEVOCSAgMHgwMDAxMDAwMDAJLyogUG9ydCAwIEVuYWJsZSAqLworICAjZGVmaW5lIFNINF9QQ0lQQ1RSX1AyVVAJICAweDAwMDAwMDAyMAkvKiBQb3J0MiBQdWxsIFVwIEVuYWJsZSAqLworICAjZGVmaW5lIFNINF9QQ0lQQ1RSX1AySU8JICAweDAwMDAwMDAxMAkvKiBQb3J0MiBPdXRwdXQgRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBDVFJfUDFVUAkgIDB4MDAwMDAwMDA4CS8qIFBvcnQxIFB1bGwgVXAgRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBDVFJfUDFJTwkgIDB4MDAwMDAwMDA0CS8qIFBvcnQxIE91dHB1dCBFbmFibGUgKi8KKyAgI2RlZmluZSBTSDRfUENJUENUUl9QMFVQCSAgMHgwMDAwMDAwMDIJLyogUG9ydDAgUHVsbCBVcCBFbmFibGUgKi8KKyAgI2RlZmluZSBTSDRfUENJUENUUl9QMElPCSAgMHgwMDAwMDAwMDEJLyogUG9ydDAgT3V0cHV0IEVuYWJsZSAqLworI2RlZmluZSBTSDRfUENJUERUUgkJMHgyMDQJCS8qIFBvcnQgRGF0YSBSZWdpc3RlciAqLworICAjZGVmaW5lIFNINF9QQ0lQRFRSX1BCNQkgIDB4MDAwMDAwMDIwCS8qIFBvcnQgNSBFbmFibGUgKi8KKyAgI2RlZmluZSBTSDRfUENJUERUUl9QQjQJICAweDAwMDAwMDAxMAkvKiBQb3J0IDQgRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBEVFJfUEIzCSAgMHgwMDAwMDAwMDgJLyogUG9ydCAzIEVuYWJsZSAqLworICAjZGVmaW5lIFNINF9QQ0lQRFRSX1BCMgkgIDB4MDAwMDAwMDA0CS8qIFBvcnQgMiBFbmFibGUgKi8KKyAgI2RlZmluZSBTSDRfUENJUERUUl9QQjEJICAweDAwMDAwMDAwMgkvKiBQb3J0IDEgRW5hYmxlICovCisgICNkZWZpbmUgU0g0X1BDSVBEVFJfUEIwCSAgMHgwMDAwMDAwMDEJLyogUG9ydCAwIEVuYWJsZSAqLworI2RlZmluZSBTSDRfUENJUERSCQkweDIyMAkJLyogUG9ydCBJTyBEYXRhIFJlZ2lzdGVyICovCisKKy8qIEZsYWdzICovCisjZGVmaW5lIFNINF9QQ0lDX05PX1JFU0VUCTB4MDAwMQorCisvKiBhcmNoL3NoL2tlcm5lbC9kcml2ZXJzL3BjaS9vcHMtc2g0LmMgKi8KK2V4dGVybiBzdHJ1Y3QgcGNpX29wcyBzaDRfcGNpX29wczsKK2ludCBzaDRfcGNpX2NoZWNrX2RpcmVjdCh2b2lkKTsKK2ludCBwY2lfZml4dXBfcGNpYyh2b2lkKTsKKworc3RydWN0IHNoNF9wY2lfYWRkcmVzc19zcGFjZSB7CisJdW5zaWduZWQgbG9uZyBiYXNlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKK307CisKK3N0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwIHsKKwlzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX3NwYWNlIHdpbmRvdzA7CisJc3RydWN0IHNoNF9wY2lfYWRkcmVzc19zcGFjZSB3aW5kb3cxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCitzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3dyaXRlX3JlZyh1bnNpZ25lZCBsb25nIHZhbCwgdW5zaWduZWQgbG9uZyByZWcpCit7CisJb3V0bCh2YWwsIFBDSV9SRUcocmVnKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwY2lfcmVhZF9yZWcodW5zaWduZWQgbG9uZyByZWcpCit7CisJcmV0dXJuIGlubChQQ0lfUkVHKHJlZykpOworfQorI2VuZGlmIC8qIF9fUENJX1NINF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuYyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCmluZGV4IDY4MmYzZGEuLmRiZTgzNzggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jCkBAIC0xNSwxODAgKzE1LDE0IEBACiAKICN1bmRlZiBERUJVRwogCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvaXJxLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLQotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CisjaW5jbHVkZSAicGNpLXNoNC5oIgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlICJwY2ktc2g3NzUxLmgiCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGNpX3Byb2JlID0gUENJX1BST0JFX0NPTkYxOwotZXh0ZXJuIGludCBwY2lfZml4dXBfcGNpYyh2b2lkKTsKLQotdm9pZCBwY2liaW9zX2ZpeHVwX2lycXModm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWspKTsKLQotLyoKLSAqIERpcmVjdCBhY2Nlc3MgdG8gUENJIGhhcmR3YXJlLi4uCi0gKi8KLQotI2RlZmluZSBDT05GSUdfQ01EKGJ1cywgZGV2Zm4sIHdoZXJlKSAoMHg4MDAwMDAwMCB8IChidXMtPm51bWJlciA8PCAxNikgfCAoZGV2Zm4gPDwgOCkgfCAod2hlcmUgJiB+MykpCi0KLS8qCi0gKiBGdW5jdGlvbnMgZm9yIGFjY2Vzc2luZyBQQ0kgY29uZmlndXJhdGlvbiBzcGFjZSB3aXRoIHR5cGUgMSBhY2Nlc3NlcwotICovCi1zdGF0aWMgaW50IHNoNzc1MV9wY2lfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4sCi0JCQkgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXUzMiBkYXRhOwotCi0JLyogCi0JICogUENJUERSIG1heSBvbmx5IGJlIGFjY2Vzc2VkIGFzIDMyIGJpdCB3b3JkcywgCi0JICogc28gd2UgbXVzdCBkbyBieXRlIGFsaWdubWVudCBieSBoYW5kIAotCSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQlvdXRsKENPTkZJR19DTUQoYnVzLGRldmZuLHdoZXJlKSwgUENJX1JFRyhTSDc3NTFfUENJUEFSKSk7Ci0JZGF0YSA9IGlubChQQ0lfUkVHKFNINzc1MV9QQ0lQRFIpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0KLQlzd2l0Y2ggKHNpemUpIHsKLQljYXNlIDE6Ci0JCSp2YWwgPSAoZGF0YSA+PiAoKHdoZXJlICYgMykgPDwgMykpICYgMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQkqdmFsID0gKGRhdGEgPj4gKCh3aGVyZSAmIDIpIDw8IDMpKSAmIDB4ZmZmZjsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQkqdmFsID0gZGF0YTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIFBDSUJJT1NfRlVOQ19OT1RfU1VQUE9SVEVEOwotCX0KLQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Ci19Ci0KLS8qIAotICogU2luY2UgU0g3NzUxIG9ubHkgZG9lcyAzMmJpdCBhY2Nlc3Mgd2UnbGwgaGF2ZSB0byBkbyBhIHJlYWQsCi0gKiBtYXNrLHdyaXRlIG9wZXJhdGlvbi4KLSAqIFdlJ2xsIGFsbG93IGFuIG9kZCBieXRlIG9mZnNldCwgdGhvdWdoIGl0IHNob3VsZCBiZSBpbGxlZ2FsLgotICovIAotc3RhdGljIGludCBzaDc3NTFfcGNpX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKLQkJCSAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgdmFsKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHNoaWZ0OwotCXUzMiBkYXRhOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCW91dGwoQ09ORklHX0NNRChidXMsZGV2Zm4sd2hlcmUpLCBQQ0lfUkVHKFNINzc1MV9QQ0lQQVIpKTsKLQlkYXRhID0gaW5sKFBDSV9SRUcoU0g3NzUxX1BDSVBEUikpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJc2hpZnQgPSAod2hlcmUgJiAzKSA8PCAzOwotCQlkYXRhICY9IH4oMHhmZiA8PCBzaGlmdCk7Ci0JCWRhdGEgfD0gKCh2YWwgJiAweGZmKSA8PCBzaGlmdCk7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJc2hpZnQgPSAod2hlcmUgJiAyKSA8PCAzOwotCQlkYXRhICY9IH4oMHhmZmZmIDw8IHNoaWZ0KTsKLQkJZGF0YSB8PSAoKHZhbCAmIDB4ZmZmZikgPDwgc2hpZnQpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWRhdGEgPSB2YWw7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiBQQ0lCSU9TX0ZVTkNfTk9UX1NVUFBPUlRFRDsKLQl9Ci0KLQlvdXRsKGRhdGEsIFBDSV9SRUcoU0g3NzUxX1BDSVBEUikpOwotCi0JcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKLX0KLQotI3VuZGVmIENPTkZJR19DTUQKLQotc3RydWN0IHBjaV9vcHMgc2g3NzUxX3BjaV9vcHMgPSB7Ci0JLnJlYWQgCQk9IHNoNzc1MV9wY2lfcmVhZCwKLQkud3JpdGUJCT0gc2g3NzUxX3BjaV93cml0ZSwKLX07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBjaV9jaGVja19kaXJlY3Qodm9pZCkKLXsKLQl1bnNpZ25lZCBpbnQgdG1wLCBpZDsKLQotCS8qIGNoZWNrIGZvciBTSDc3NTEvU0g3NzUxUiBoYXJkd2FyZSAqLwotCWlkID0gaW5sKFNINzc1MV9QQ0lSRUdfQkFTRStTSDc3NTFfUENJQ09ORjApOwotCWlmIChpZCAhPSAoKFNINzc1MV9ERVZJQ0VfSUQgPDwgMTYpIHwgU0g3NzUxX1ZFTkRPUl9JRCkgJiYKLQkgICAgaWQgIT0gKChTSDc3NTFSX0RFVklDRV9JRCA8PCAxNikgfCBTSDc3NTFfVkVORE9SX0lEKSkgewotCQlwcl9kZWJ1ZygiUENJOiBUaGlzIGlzIG5vdCBhbiBTSDc3NTEoUikgKCV4KVxuIiwgaWQpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0KLQkvKgotCSAqIENoZWNrIGlmIGNvbmZpZ3VyYXRpb24gd29ya3MuCi0JICovCi0JaWYgKHBjaV9wcm9iZSAmIFBDSV9QUk9CRV9DT05GMSkgewotCQl0bXAgPSBpbmwgKFBDSV9SRUcoU0g3NzUxX1BDSVBBUikpOwotCQlvdXRsICgweDgwMDAwMDAwLCBQQ0lfUkVHKFNINzc1MV9QQ0lQQVIpKTsKLQkJaWYgKGlubCAoUENJX1JFRyhTSDc3NTFfUENJUEFSKSkgPT0gMHg4MDAwMDAwMCkgewotCQkJb3V0bCAodG1wLCBQQ0lfUkVHKFNINzc1MV9QQ0lQQVIpKTsKLQkJCXByaW50ayhLRVJOX0lORk8gIlBDSTogVXNpbmcgY29uZmlndXJhdGlvbiB0eXBlIDFcbiIpOwotCQkJcmVxdWVzdF9yZWdpb24oUENJX1JFRyhTSDc3NTFfUENJUEFSKSwgOCwgIlBDSSBjb25mMSIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJb3V0bCAodG1wLCBQQ0lfUkVHKFNINzc1MV9QQ0lQQVIpKTsKLQl9Ci0KLQlwcl9kZWJ1ZygiUENJOiBwY2lfY2hlY2tfZGlyZWN0IGZhaWxlZFxuIik7Ci0JcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0KLS8qCi0gKiAgSGFuZGxlIGJ1cyBzY2FubmluZyBhbmQgZml4dXBzIC4uLi4KLSAqLwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcGNpX2ZpeHVwX2lkZV9iYXNlcyhzdHJ1Y3QgcGNpX2RldiAqZCkKLXsKLQlpbnQgaTsKLQotCS8qCi0JICogUENJIElERSBjb250cm9sbGVycyB1c2Ugbm9uLXN0YW5kYXJkIEkvTyBwb3J0IGRlY29kaW5nLCByZXNwZWN0IGl0LgotCSAqLwotCWlmICgoZC0+Y2xhc3MgPj4gOCkgIT0gUENJX0NMQVNTX1NUT1JBR0VfSURFKQotCQlyZXR1cm47Ci0JcHJfZGVidWcoIlBDSTogSURFIGJhc2UgYWRkcmVzcyBmaXh1cCBmb3IgJXNcbiIsIHBjaV9uYW1lKGQpKTsKLQlmb3IoaT0wOyBpPDQ7IGkrKykgewotCQlzdHJ1Y3QgcmVzb3VyY2UgKnIgPSAmZC0+cmVzb3VyY2VbaV07Ci0JCWlmICgoci0+c3RhcnQgJiB+MHg4MCkgPT0gMHgzNzQpIHsKLQkJCXItPnN0YXJ0IHw9IDI7Ci0JCQlyLT5lbmQgPSByLT5zdGFydDsKLQkJfQotCX0KLX0KLQotREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF9pZGVfYmFzZXMpOwotCi0vKgotICogIENhbGxlZCBhZnRlciBlYWNoIGJ1cyBpcyBwcm9iZWQsIGJ1dCBiZWZvcmUgaXRzIGNoaWxkcmVuCi0gKiAgYXJlIGV4YW1pbmVkLgotICovCi0KLXZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpiKQotewotCXBjaV9yZWFkX2JyaWRnZV9iYXNlcyhiKTsKLX0KIAogLyoKICAqIEluaXRpYWxpemF0aW9uLiBUcnkgYWxsIGtub3duIFBDSSBhY2Nlc3MgbWV0aG9kcy4gTm90ZSB0aGF0IHdlIHN1cHBvcnQKQEAgLTE5NiwyNSArMzAsMjkgQEAKICAqIHRvIGFjY2VzcyBjb25maWcgc3BhY2UuCiAgKiAKICAqIE5vdGUgdGhhdCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKEJTQyByZWdpc3RlcnMsIGFuZCBtZW1vcnkKLSAqIHNwYWNlIG1hcHBpbmcpIHdpbGwgYmUgY2FsbGVkIHZpYSB0aGUgbWFjaGluZSB2ZWN0b3JzIChzaF9tdi5tdl9wY2lfaW5pdCgpKSBpZiBpdAotICogZXhpdHN0IGFuZCB2aWEgdGhlIHBsYXRmb3JtIGRlZmluZWQgZnVuY3Rpb24gcGNpYmlvc19pbml0X3BsYXRmb3JtKCkuICAKLSAqIFNlZSBwY2lfYmlnc3VyLmMgZm9yIGltcGxlbWVudGF0aW9uOwotICogCi0gKiBUaGUgQklPUyB2ZXJzaW9uIG9mIHRoZSBwY2kgZnVuY3Rpb25zIGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQgYnV0IGl0IGlzIGxlZnQKLSAqIGluIGZvciBjb21wbGV0ZW5lc3MuICBDdXJyZW50bHkgYW4gZXJyb3Igd2lsbCBiZSBnZW5lcmVhdGVkIGF0IGNvbXBpbGUgdGltZS4gCisgKiBzcGFjZSBtYXBwaW5nKSB3aWxsIGJlIGNhbGxlZCB2aWEgdGhlIHBsYXRmb3JtIGRlZmluZWQgZnVuY3Rpb24KKyAqIHBjaWJpb3NfaW5pdF9wbGF0Zm9ybSgpLgogICovCi0KIHN0YXRpYyBpbnQgX19pbml0IHNoNzc1MV9wY2lfaW5pdCh2b2lkKQogeworCXVuc2lnbmVkIGludCBpZDsKIAlpbnQgcmV0OwogCiAJcHJfZGVidWcoIlBDSTogU3RhcnRpbmcgaW50aWFsaXphdGlvbi5cbiIpOwotCWlmICgocmV0ID0gcGNpX2NoZWNrX2RpcmVjdCgpKSAhPSAwKQorCisJLyogY2hlY2sgZm9yIFNINzc1MS9TSDc3NTFSIGhhcmR3YXJlICovCisJaWQgPSBwY2lfcmVhZF9yZWcoU0g3NzUxX1BDSUNPTkYwKTsKKwlpZiAoaWQgIT0gKChTSDc3NTFfREVWSUNFX0lEIDw8IDE2KSB8IFNINzc1MV9WRU5ET1JfSUQpICYmCisJICAgIGlkICE9ICgoU0g3NzUxUl9ERVZJQ0VfSUQgPDwgMTYpIHwgU0g3NzUxX1ZFTkRPUl9JRCkpIHsKKwkJcHJfZGVidWcoIlBDSTogVGhpcyBpcyBub3QgYW4gU0g3NzUxKFIpICgleClcbiIsIGlkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKChyZXQgPSBzaDRfcGNpX2NoZWNrX2RpcmVjdCgpKSAhPSAwKQogCQlyZXR1cm4gcmV0OwogCiAJcmV0dXJuIHBjaWJpb3NfaW5pdF9wbGF0Zm9ybSgpOwogfQotCiBzdWJzeXNfaW5pdGNhbGwoc2g3NzUxX3BjaV9pbml0KTsKIAogc3RhdGljIGludCBfX2luaXQgX19hcmVhX3NkcmFtX2NoZWNrKHVuc2lnbmVkIGludCBhcmVhKQpAQCAtMjIzLDI2ICs2MSwyNiBAQAogCiAJd29yZCA9IGlubChTSDc3NTFfQkNSMSk7CiAJLyogY2hlY2sgQkNSIGZvciBTRFJBTSBpbiBhcmVhICovCi0JaWYoKCh3b3JkID4+IGFyZWEpICYgMSkgPT0gMCkgeworCWlmICgoKHdvcmQgPj4gYXJlYSkgJiAxKSA9PSAwKSB7CiAJCXByaW50aygiUENJOiBBcmVhICVkIGlzIG5vdCBjb25maWd1cmVkIGZvciBTRFJBTS4gQkNSMT0weCV4XG4iLAogCQkgICAgICAgYXJlYSwgd29yZCk7CiAJCXJldHVybiAwOwogCX0KLQlvdXRsKHdvcmQsIFBDSV9SRUcoU0g3NzUxX1BDSUJDUjEpKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lCQ1IxKTsKIAogCXdvcmQgPSAodTE2KWludyhTSDc3NTFfQkNSMik7CiAJLyogY2hlY2sgQkNSMiBmb3IgMzJiaXQgU0RSQU0gaW50ZXJmYWNlKi8KLQlpZigoKHdvcmQgPj4gKGFyZWEgPDwgMSkpICYgMHgzKSAhPSAweDMpIHsKKwlpZiAoKCh3b3JkID4+IChhcmVhIDw8IDEpKSAmIDB4MykgIT0gMHgzKSB7CiAJCXByaW50aygiUENJOiBBcmVhICVkIGlzIG5vdCAzMiBiaXQgU0RSQU0uIEJDUjI9MHgleFxuIiwKIAkJICAgICAgIGFyZWEsIHdvcmQpOwogCQlyZXR1cm4gMDsKIAl9Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lCQ1IyKSk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJQkNSMik7CiAKIAlyZXR1cm4gMTsKIH0KIAotaW50IF9faW5pdCBzaDc3NTFfcGNpY19pbml0KHN0cnVjdCBzaDc3NTFfcGNpX2FkZHJlc3NfbWFwICptYXApCitpbnQgX19pbml0IHNoNzc1MV9wY2ljX2luaXQoc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXAgKm1hcCkKIHsKIAl1MzIgcmVnOwogCXUzMiB3b3JkOwpAQCAtMjUxLDM5ICs4OSwzOSBAQAogCXJlZyA9IGlubChTSDc3NTFfQkNSMSk7CiAJcmVnIHw9IDB4ODAwMDA7CiAJb3V0bChyZWcsIFNINzc1MV9CQ1IxKTsKLQkKKwogCS8qIFR1cm4gdGhlIGNsb2NrcyBiYWNrIG9uIChub3QgZG9uZSBpbiByZXNldCkqLwotCW91dGwoMCwgUENJX1JFRyhTSDc3NTFfUENJQ0xLUikpOworCXBjaV93cml0ZV9yZWcoMCwgU0g0X1BDSUNMS1IpOwogCS8qIENsZWFyIFBvd2VyZG93biBJUlEncyAobm90IGRvbmUgaW4gcmVzZXQpICovCi0Jd29yZCA9IFNINzc1MV9QQ0lQSU5UX0QzIHwgU0g3NzUxX1BDSVBJTlRfRDA7Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lQSU5UKSk7CisJd29yZCA9IFNINF9QQ0lQSU5UX0QzIHwgU0g0X1BDSVBJTlRfRDA7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJUElOVCk7CiAKIAkvKgogCSAqIFRoaXMgY29kZSBpcyB1bnVzZWQgZm9yIHNvbWUgYm9hcmRzIGFzIGl0IGlzIGRvbmUgaW4gdGhlCiAJICogYm9vdGxvYWRlciBhbmQgZG9pbmcgaXQgaGVyZSBtZWFucyB0aGUgTUFDIGFkZHJlc3NlcyBsb2FkZWQKIAkgKiBieSB0aGUgYm9vdGxvYWRlciBnZXQgbG9zdC4KIAkgKi8KLQlpZiAoIShtYXAtPmZsYWdzICYgU0g3NzUxX1BDSUNfTk9fUkVTRVQpKSB7CisJaWYgKCEobWFwLT5mbGFncyAmIFNINF9QQ0lDX05PX1JFU0VUKSkgewogCQkvKiB0b2dnbGUgUENJIHJlc2V0IHBpbiAqLwotCQl3b3JkID0gU0g3NzUxX1BDSUNSX1BSRUZJWCB8IFNINzc1MV9QQ0lDUl9QUlNUOwotCQlvdXRsKHdvcmQsUENJX1JFRyhTSDc3NTFfUENJQ1IpKTsKKwkJd29yZCA9IFNINF9QQ0lDUl9QUkVGSVggfCBTSDRfUENJQ1JfUFJTVDsKKwkJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJQ1IpOwogCQkvKiBXYWl0IGZvciBhIGxvbmcgdGltZS4uLiBub3QgMSBzZWMuIGJ1dCBsb25nIGVub3VnaCAqLwogCQltZGVsYXkoMTAwKTsKLQkJd29yZCA9IFNINzc1MV9QQ0lDUl9QUkVGSVg7Ci0JCW91dGwod29yZCxQQ0lfUkVHKFNINzc1MV9QQ0lDUikpOworCQl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWDsKKwkJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJQ1IpOwogCX0KLQkKKwogCS8qIHNldCB0aGUgY29tbWFuZC9zdGF0dXMgYml0cyB0bzoKIAkgKiBXYWl0IEN5Y2xlIENvbnRyb2wgKyBQYXJpdHkgRW5hYmxlICsgQnVzIE1hc3RlciArCiAJICogTWVtIHNwYWNlIGVuYWJsZQogCSAqLwogCXdvcmQgPSBTSDc3NTFfUENJQ09ORjFfV0NDIHwgU0g3NzUxX1BDSUNPTkYxX1BFUiB8IAogCSAgICAgICBTSDc3NTFfUENJQ09ORjFfQlVNIHwgU0g3NzUxX1BDSUNPTkYxX01FUzsKLQlvdXRsKHdvcmQsIFBDSV9SRUcoU0g3NzUxX1BDSUNPTkYxKSk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3NTFfUENJQ09ORjEpOwogCiAJLyogZGVmaW5lIHRoaXMgaG9zdCBhcyB0aGUgaG9zdCBicmlkZ2UgKi8KLQl3b3JkID0gU0g3NzUxX1BDSV9IT1NUX0JSSURHRSA8PCAyNDsKLQlvdXRsKHdvcmQsIFBDSV9SRUcoU0g3NzUxX1BDSUNPTkYyKSk7CisJd29yZCA9IFBDSV9CQVNFX0NMQVNTX0JSSURHRSA8PCAyNDsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINzc1MV9QQ0lDT05GMik7CiAKIAkvKiBTZXQgSU8gYW5kIE1lbSB3aW5kb3dzIHRvIGxvY2FsIGFkZHJlc3MgCiAJICogTWFrZSBQQ0kgYW5kIGxvY2FsIGFkZHJlc3MgdGhlIHNhbWUgZm9yIGVhc3kgMSB0byAxIG1hcHBpbmcgCkBAIC0yOTEsNDYgKzEyOSw0OSBAQAogCSAqIFdpbmRvdzEgPSBtYXAtPndpbmRvdzEuc2l6ZSBAIGNhY2hlZCBhcmVhIGJhc2UgPSBTRFJBTSAKIAkgKi8KIAl3b3JkID0gbWFwLT53aW5kb3cwLnNpemUgLSAxOwotCW91dGwod29yZCwgUENJX1JFRyhTSDc3NTFfUENJTFNSMCkpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxTUjApOwogCXdvcmQgPSBtYXAtPndpbmRvdzEuc2l6ZSAtIDE7Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lMU1IxKSk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTFNSMSk7CiAJLyogU2V0IHRoZSB2YWx1ZXMgb24gd2luZG93IDAgUENJIGNvbmZpZyByZWdpc3RlcnMgKi8KIAl3b3JkID0gUDJTRUdBRERSKG1hcC0+d2luZG93MC5iYXNlKTsKLQlvdXRsKHdvcmQsIFBDSV9SRUcoU0g3NzUxX1BDSUxBUjApKTsKLQlvdXRsKHdvcmQsIFBDSV9SRUcoU0g3NzUxX1BDSUNPTkY1KSk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJTEFSMCk7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3NTFfUENJQ09ORjUpOwogCS8qIFNldCB0aGUgdmFsdWVzIG9uIHdpbmRvdyAxIFBDSSBjb25maWcgcmVnaXN0ZXJzICovCiAJd29yZCA9ICBQSFlTQUREUihtYXAtPndpbmRvdzEuYmFzZSk7Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lMQVIxKSk7Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lDT05GNikpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSUxBUjEpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g3NzUxX1BDSUNPTkY2KTsKIAotCS8qIFNldCB0aGUgbG9jYWwgMTZNQiBQQ0kgbWVtb3J5IHNwYWNlIHdpbmRvdyB0byAKKwkvKiBTZXQgdGhlIGxvY2FsIDE2TUIgUENJIG1lbW9yeSBzcGFjZSB3aW5kb3cgdG8KIAkgKiB0aGUgbG93ZXN0IFBDSSBtYXBwZWQgYWRkcmVzcwogCSAqLwotCXdvcmQgPSBQQ0lCSU9TX01JTl9NRU0gJiBTSDc3NTFfUENJTUJSX01BU0s7Ci0JUENJREJHKDIsIlBDSTogU2V0dGluZyB1cHBlciBiaXRzIG9mIE1lbW9yeSB3aW5kb3cgdG8gMHgleFxuIiwgd29yZCk7Ci0Jb3V0bCh3b3JkICwgUENJX1JFRyhTSDc3NTFfUENJTUJSKSk7CisJd29yZCA9IFBDSUJJT1NfTUlOX01FTSAmIFNINF9QQ0lNQlJfTUFTSzsKKwlwcl9kZWJ1ZygiUENJOiBTZXR0aW5nIHVwcGVyIGJpdHMgb2YgTWVtb3J5IHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQgLCBTSDRfUENJTUJSKTsKIAogCS8qIE1hcCBJTyBzcGFjZSBpbnRvIFBDSSBJTyB3aW5kb3cKIAkgKiBUaGUgSU8gd2luZG93IGlzIDY0Sy1QQ0lCSU9TX01JTl9JTyBpbiBzaXplCi0JICogSU8gYWRkcmVzc2VzIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUgCisJICogSU8gYWRkcmVzc2VzIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUKIAkgKiBQQ0kgSU8gd2luZG93IGJhc2UgYWRkcmVzcwogCSAqLwotCVBDSURCRygzLCJQQ0k6IE1hcHBpbmcgSU8gYWRkcmVzcyAweCV4IC0gMHgleCB0byBiYXNlIDB4JXhcbiIsIFBDSUJJT1NfTUlOX0lPLAotCSAgICAoNjQqMTAyNCksIFNINzc1MV9QQ0lfSU9fQkFTRStQQ0lCSU9TX01JTl9JTyk7CisJcHJfZGVidWcoIlBDSTogTWFwcGluZyBJTyBhZGRyZXNzIDB4JXggLSAweCV4IHRvIGJhc2UgMHgleFxuIiwKKwkJIFBDSUJJT1NfTUlOX0lPLCAoNjQgPDwgMTApLAorCQkgU0g0X1BDSV9JT19CQVNFICsgUENJQklPU19NSU5fSU8pOwogCi0JLyogCisJLyoKIAkgKiBYWFg6IEZvciBub3csIGxlYXZlIHRoaXMgYm9hcmQtc3BlY2lmaWMuIEluIHRoZSBldmVudCB3ZSBoYXZlIG90aGVyCiAJICogYm9hcmRzIHRoYXQgbmVlZCB0byBkbyBzaW1pbGFyIHdvcmssIHRoaXMgY2FuIGJlIHdyYXBwZWQuCiAJICovCiAjaWZkZWYgQ09ORklHX1NIX0JJR1NVUgotCWJpZ3N1cl9wb3J0X21hcChQQ0lCSU9TX01JTl9JTywgKDY0KjEwMjQpLCBTSDc3NTFfUENJX0lPX0JBU0UrUENJQklPU19NSU5fSU8sMCk7CisJYmlnc3VyX3BvcnRfbWFwKFBDSUJJT1NfTUlOX0lPLCAoNjQgPDwgMTApLAorCQkJU0g0X1BDSV9JT19CQVNFICsgUENJQklPU19NSU5fSU8sIDApOwogI2VuZGlmCiAKLQkvKiBNYWtlIHN1cmUgdGhlIE1TQidzIG9mIElPIHdpbmRvdyBhcmUgc2V0IHRvIGFjY2VzcyBQQ0kgc3BhY2UgY29ycmVjdGx5ICovCi0Jd29yZCA9IFBDSUJJT1NfTUlOX0lPICYgU0g3NzUxX1BDSUlPQlJfTUFTSzsKLQlQQ0lEQkcoMiwiUENJOiBTZXR0aW5nIHVwcGVyIGJpdHMgb2YgSU8gd2luZG93IHRvIDB4JXhcbiIsIHdvcmQpOwotCW91dGwod29yZCwgUENJX1JFRyhTSDc3NTFfUENJSU9CUikpOwotCQorCS8qIE1ha2Ugc3VyZSB0aGUgTVNCJ3Mgb2YgSU8gd2luZG93IGFyZSBzZXQgdG8gYWNjZXNzIFBDSSBzcGFjZQorCSAqIGNvcnJlY3RseSAqLworCXdvcmQgPSBQQ0lCSU9TX01JTl9JTyAmIFNINF9QQ0lJT0JSX01BU0s7CisJcHJfZGVidWcoIlBDSTogU2V0dGluZyB1cHBlciBiaXRzIG9mIElPIHdpbmRvdyB0byAweCV4XG4iLCB3b3JkKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lJT0JSKTsKKwogCS8qIFNldCBQQ0kgV0NSeCwgQkNSeCdzLCBjb3B5IGZyb20gQlNDIGxvY2F0aW9ucyAqLwogCiAJLyogY2hlY2sgQkNSIGZvciBTRFJBTSBpbiBzcGVjaWZpZWQgYXJlYSAqLwpAQCAtMzQ5LDEzICsxOTAsMTMgQEAKIAogCS8qIGNvbmZpZ3VyZSB0aGUgd2FpdCBjb250cm9sIHJlZ2lzdGVycyAqLwogCXdvcmQgPSBpbmwoU0g3NzUxX1dDUjEpOwotCW91dGwod29yZCwgUENJX1JFRyhTSDc3NTFfUENJV0NSMSkpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSVdDUjEpOwogCXdvcmQgPSBpbmwoU0g3NzUxX1dDUjIpOwotCW91dGwod29yZCwgUENJX1JFRyhTSDc3NTFfUENJV0NSMikpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSVdDUjIpOwogCXdvcmQgPSBpbmwoU0g3NzUxX1dDUjMpOwotCW91dGwod29yZCwgUENJX1JFRyhTSDc3NTFfUENJV0NSMykpOworCXBjaV93cml0ZV9yZWcod29yZCwgU0g0X1BDSVdDUjMpOwogCXdvcmQgPSBpbmwoU0g3NzUxX01DUik7Ci0Jb3V0bCh3b3JkLCBQQ0lfUkVHKFNINzc1MV9QQ0lNQ1IpKTsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lNQ1IpOwogCiAJLyogTk9URTogSSdtIGlnbm9yaW5nIHRoZSBQQ0kgZXJyb3IgSVJRcyBmb3Igbm93Li4KIAkgKiBUT0RPOiBhZGQgc3VwcG9ydCBmb3IgdGhlIGludGVybmFsIGVycm9yIGludGVycnVwdHMgYW5kCkBAIC0zNjgsNDkgKzIwOSw4IEBACiAKIAkvKiBTSDc3NTEgaW5pdCBkb25lLCBzZXQgY2VudHJhbCBmdW5jdGlvbiBpbml0IGNvbXBsZXRlICovCiAJLyogdXNlIHJvdW5kIHJvYmluIG1vZGUgdG8gc3RvcCBhIGRldmljZSBzdGFydmluZy9vdmVycnVuaW5nICovCi0Jd29yZCA9IFNINzc1MV9QQ0lDUl9QUkVGSVggfCBTSDc3NTFfUENJQ1JfQ0ZJTiB8IFNINzc1MV9QQ0lDUl9BUkJNOwotCW91dGwod29yZCxQQ0lfUkVHKFNINzc1MV9QQ0lDUikpOyAKKwl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0FSQk07CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJQ1IpOwogCiAJcmV0dXJuIDE7CiB9Ci0KLWNoYXIgKiBfX2luaXQgcGNpYmlvc19zZXR1cChjaGFyICpzdHIpCi17Ci0JaWYgKCFzdHJjbXAoc3RyLCAib2ZmIikpIHsKLQkJcGNpX3Byb2JlID0gMDsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcmV0dXJuIHN0cjsKLX0KLQotLyogCi0gKiAJSVJRIGZ1bmN0aW9ucyAKLSAqLwotc3RhdGljIHU4IF9faW5pdCBzaDc3NTFfbm9fc3dpenpsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCAqcGluKQotewotCS8qIG5vIHN3aXp6bGluZyAqLwotCXJldHVybiBQQ0lfU0xPVChkZXYtPmRldmZuKTsKLX0KLQotc3RhdGljIGludCBzaDc3NTFfcGNpX2xvb2t1cF9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKQotewotCWludCBpcnEgPSAtMTsKLQotCS8qIG5vdyBsb29rdXAgdGhlIGFjdHVhbCBJUlEgb24gYSBwbGF0Zm9ybSBzcGVjaWZpYyBiYXNpcyAocGNpLSdwbGF0Zm9ybScuYykgKi8KLQlpcnEgPSBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc2xvdCxwaW4pOwotCWlmKCBpcnEgPCAwICkgewotCQlwcl9kZWJ1ZygiUENJOiBFcnJvciBtYXBwaW5nIElSUSBvbiBkZXZpY2UgJXNcbiIsIHBjaV9uYW1lKGRldikpOwotCQlyZXR1cm4gaXJxOwotCX0KLQotCXByX2RlYnVnKCJTZXR0aW5nIElSUSBmb3Igc2xvdCAlcyB0byAlZFxuIiwgcGNpX25hbWUoZGV2KSwgaXJxKTsKLQotCXJldHVybiBpcnE7Ci19Ci0KLXZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfaXJxcyh2b2lkKQotewotCXBjaV9maXh1cF9pcnFzKHNoNzc1MV9ub19zd2l6emxlLCBzaDc3NTFfcGNpX2xvb2t1cF9pcnEpOwotfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3NTEuaCBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCmluZGV4IDFmZWU1Y2EuLjY4ZTNjYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5oCkBAIC0zLDcgKzMsNyBAQAogICoKICAqICBEdXN0aW4gTWNJbnRpcmUgKGR1c3RpbkBzZW5zb3JpYS5jb20pIChjKSAyMDAxCiAgKiAgUGF1bCBNdW5kdCAobGV0aGFsQGxpbnV4LXNoLm9yZykgKGMpIDIwMDMKLSAqCQorICoKICAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiAgTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgogICoKQEAgLTEyLDI4ICsxMiw2IEBACiAjaWZuZGVmIF9QQ0lfU0g3NzUxX0hfCiAjZGVmaW5lIF9QQ0lfU0g3NzUxX0hfCiAKLSNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLQotLyogc2V0IGRlYnVnIGxldmVsIDQ9dmVyYm9zZS4uLjE9dGVyc2UgKi8KLS8vI2RlZmluZSBERUJVR19QQ0kgMwotI3VuZGVmIERFQlVHX1BDSQotCi0jaWZkZWYgREVCVUdfUENJCi0jZGVmaW5lIFBDSURCRyhuLCB4Li4uKSB7IGlmKERFQlVHX1BDST49bikgcHJpbnRrKHgpOyB9Ci0jZWxzZQotI2RlZmluZSBQQ0lEQkcobiwgeC4uLikKLSNlbmRpZgotCi0vKiBzdGFydHVwIHZhbHVlcyAqLwotI2RlZmluZSBQQ0lfUFJPQkVfQklPUyAxCi0jZGVmaW5lIFBDSV9QUk9CRV9DT05GMSAyCi0jZGVmaW5lIFBDSV9QUk9CRV9DT05GMiA0Ci0jZGVmaW5lIFBDSV9OT19TT1JUIDB4MTAwCi0jZGVmaW5lIFBDSV9CSU9TX1NPUlQgMHgyMDAKLSNkZWZpbmUgUENJX05PX0NIRUNLUyAweDQwMAotI2RlZmluZSBQQ0lfQVNTSUdOX1JPTVMgMHgxMDAwCi0jZGVmaW5lIFBDSV9CSU9TX0lSUV9TQ0FOIDB4MjAwMAotCiAvKiBQbGF0Zm9ybSBTcGVjaWZpYyBWYWx1ZXMgKi8KICNkZWZpbmUgU0g3NzUxX1ZFTkRPUl9JRCAgICAgICAgICAgICAweDEwNTQKICNkZWZpbmUgU0g3NzUxX0RFVklDRV9JRCAgICAgICAgICAgICAweDM1MDUKQEAgLTEyOCwxMzEgKzEwNiw2IEBACiAgICNkZWZpbmUgU0g3NzUxX1BDSUNPTkYxN19QTUVOICAgICAgMHgwMDAxMDAwMCAgLyogUE1FIEVuYWJsZSAqLwogICAjZGVmaW5lIFNINzc1MV9QQ0lDT05GMTdfUFdTVCAgICAgIDB4MDAwMDAwMDMgIC8qIFBvd2VyIFN0YXRlICovCiAvKiBTSDc3MTUgSW50ZXJuYWwgUENJIFJlZ2lzdGVycyAqLwotI2RlZmluZSBTSDc3NTFfUENJQ1IgICAgICAgICAgICAgICAweDEwMCAgICAgICAgIC8qIFBDSSBDb250cm9sIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUNSX1BSRUZJWCAgICAgICAgMHhBNTAwMDAwMCAgLyogQ1IgcHJlZml4IGZvciB3cml0ZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9UUlNCICAgICAgICAgIDB4MDAwMDAyMDAgIC8qIFRhcmdldCBSZWFkIFNpbmdsZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9CU1dQICAgICAgICAgIDB4MDAwMDAxMDAgIC8qIFRhcmdldCBCeXRlIFN3YXAgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQ1JfUExVUCAgICAgICAgICAweDAwMDAwMDgwICAvKiBFbmFibGUgUENJIFB1bGx1cCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9BUkJNICAgICAgICAgIDB4MDAwMDAwNDAgIC8qIFBDSSBBcmJpdHJhdGlvbiBNb2RlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUNSX01EICAgICAgICAgICAgMHgwMDAwMDAzMCAgLyogTUQ5IGFuZCBNRDEwIHN0YXR1cyAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9TRVJSICAgICAgICAgIDB4MDAwMDAwMDggIC8qIFNFUlIgb3V0cHV0IGFzc2VydCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9JTlRBICAgICAgICAgIDB4MDAwMDAwMDQgIC8qIElOVEEgb3V0cHV0IGFzc2VydCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDUl9QUlNUICAgICAgICAgIDB4MDAwMDAwMDIgIC8qIFBDSSBSZXNldCBBc3NlcnQgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQ1JfQ0ZJTiAgICAgICAgICAweDAwMDAwMDAxICAvKiBDZW50cmFsIEZ1bi4gSW5pdCBEb25lICovCi0jZGVmaW5lIFNINzc1MV9QQ0lMU1IwICAgICAgICAgICAgIDB4MTA0ICAgICAgICAgLyogUENJIExvY2FsIFNwYWNlIFJlZ2lzdGVyMCAqLwotI2RlZmluZSBTSDc3NTFfUENJTFNSMSAgICAgICAgICAgICAweDEwOCAgICAgICAgIC8qIFBDSSBMb2NhbCBTcGFjZSBSZWdpc3RlcjEgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUxBUjAgICAgICAgICAgICAgMHgxMEMgICAgICAgICAvKiBQQ0kgTG9jYWwgQWRkcmVzcyBSZWdpc3RlcjEgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUxBUjEgICAgICAgICAgICAgMHgxMTAgICAgICAgICAvKiBQQ0kgTG9jYWwgQWRkcmVzcyBSZWdpc3RlcjEgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUlOVCAgICAgICAgICAgICAgMHgxMTQgICAgICAgICAvKiBQQ0kgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUlOVF9NTENLICAgICAgICAgMHgwMDAwODAwMCAgLyogTWFzdGVyIExvY2sgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJSU5UX1RBQlQgICAgICAgICAweDAwMDA0MDAwICAvKiBUYXJnZXQgQWJvcnQgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJSU5UX1RSRVQgICAgICAgICAweDAwMDAwMjAwICAvKiBUYXJnZXQgUmV0cnkgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJSU5UX01GREUgICAgICAgICAweDAwMDAwMTAwICAvKiBNYXN0ZXIgRnVuYy4gRGlzYWJsZSBFcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJTlRfUFJUWSAgICAgICAgIDB4MDAwMDAwODAgIC8qIEFkZHJlc3MgUGFyaXR5IEVycm9yICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUlOVF9TRVJSICAgICAgICAgMHgwMDAwMDA0MCAgLyogU0VSUiBEZXRlY3Rpb24gRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJSU5UX1RXRFAgICAgICAgICAweDAwMDAwMDIwICAvKiBUZ3QuIFdyaXRlIFBhcml0eSBFcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJTlRfVFJEUCAgICAgICAgIDB4MDAwMDAwMTAgIC8qIFRndC4gUmVhZCBQYXJpdHkgRXJyb3IgRGV0LiAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJTlRfTVRBQlQgICAgICAgIDB4MDAwMDAwMDggIC8qIE1hc3Rlci1UZ3QuIEFib3J0IEVycm9yICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUlOVF9NTUFCVCAgICAgICAgMHgwMDAwMDAwNCAgLyogTWFzdGVyLU1hc3RlciBBYm9ydCBFcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJTlRfTVdQRCAgICAgICAgIDB4MDAwMDAwMDIgIC8qIE1hc3RlciBXcml0ZSBQRVJSIERldGVjdCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJTlRfTVJQRCAgICAgICAgIDB4MDAwMDAwMDIgIC8qIE1hc3RlciBSZWFkIFBFUlIgRGV0ZWN0ICovCi0jZGVmaW5lIFNINzc1MV9QQ0lJTlRNICAgICAgICAgICAgIDB4MTE4ICAgICAgICAgLyogUENJIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lBTFIgICAgICAgICAgICAgIDB4MTFDICAgICAgICAgLyogRXJyb3IgQWRkcmVzcyBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJQ0xSICAgICAgICAgICAgICAweDEyMCAgICAgICAgIC8qIEVycm9yIENvbW1hbmQvRGF0YSBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDTFJfTVBJTyAgICAgICAgIDB4ODAwMDAwMDAgIC8qIEVycm9yIENvbW1hbmQvRGF0YSBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDTFJfTURNQTAgICAgICAgIDB4NDAwMDAwMDAgIC8qIERNQTAgVHJhbnNmZXIgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQ0xSX01ETUExICAgICAgICAweDIwMDAwMDAwICAvKiBETUExIFRyYW5zZmVyIEVycm9yICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUNMUl9NRE1BMiAgICAgICAgMHgxMDAwMDAwMCAgLyogRE1BMiBUcmFuc2ZlciBFcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDTFJfTURNQTMgICAgICAgIDB4MDgwMDAwMDAgIC8qIERNQTMgVHJhbnNmZXIgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQ0xSX1RHVCAgICAgICAgICAweDA0MDAwMDAwICAvKiBUYXJnZXQgVHJhbnNmZXIgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQ0xSX0NNREwgICAgICAgICAweDAwMDAwMDBGICAvKiBQQ0kgQ29tbWFuZCBhdCBFcnJvciAqLwotI2RlZmluZSBTSDc3NTFfUENJQUlOVCAgICAgICAgICAgICAweDEzMCAgICAgICAgIC8qIEFyYml0ZXIgSW50ZXJydXB0IFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUFJTlRfTUJLTiAgICAgICAgMHgwMDAwMjAwMCAgLyogTWFzdGVyIEJyb2tlbiBJbnRlcnJ1cHQgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQUlOVF9UQlRPICAgICAgICAweDAwMDAxMDAwICAvKiBUYXJnZXQgQnVzIFRpbWUgT3V0ICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUFJTlRfTUJUTyAgICAgICAgMHgwMDAwMTAwMCAgLyogTWFzdGVyIEJ1cyBUaW1lIE91dCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lBSU5UX1RBQlQgICAgICAgIDB4MDAwMDAwMDggIC8qIFRhcmdldCBBYm9ydCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lBSU5UX01BQlQgICAgICAgIDB4MDAwMDAwMDQgIC8qIE1hc3RlciBBYm9ydCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lBSU5UX1JEUEUgICAgICAgIDB4MDAwMDAwMDIgIC8qIFJlYWQgRGF0YSBQYXJpdHkgRXJyb3IgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJQUlOVF9XRFBFICAgICAgICAweDAwMDAwMDAyICAvKiBXcml0ZSBEYXRhIFBhcml0eSBFcnJvciAqLwotI2RlZmluZSBTSDc3NTFfUENJQUlOVE0gICAgICAgICAgICAweDEzNCAgICAgICAgIC8qIEFyYml0ZXIgSW50LiBNYXNrIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lCTUxSICAgICAgICAgICAgIDB4MTM4ICAgICAgICAgLyogRXJyb3IgQnVzIE1hc3RlciBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lCTUxSX1JFUTQgICAgICAgIDB4MDAwMDAwMTAgIC8qIFJFUTQgYnVzIG1hc3RlciBhdCBlcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lCTUxSX1JFUTMgICAgICAgIDB4MDAwMDAwMDggIC8qIFJFUTMgYnVzIG1hc3RlciBhdCBlcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lCTUxSX1JFUTIgICAgICAgIDB4MDAwMDAwMDQgIC8qIFJFUTIgYnVzIG1hc3RlciBhdCBlcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lCTUxSX1JFUTEgICAgICAgIDB4MDAwMDAwMDIgIC8qIFJFUTEgYnVzIG1hc3RlciBhdCBlcnJvciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lCTUxSX1JFUTAgICAgICAgIDB4MDAwMDAwMDEgIC8qIFJFUTAgYnVzIG1hc3RlciBhdCBlcnJvciAqLwotI2RlZmluZSBTSDc3NTFfUENJRE1BQlQgICAgICAgICAgICAweDE0MCAgICAgICAgIC8qIERNQSBUcmFuc2ZlciBBcmIuIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSURNQUJUX1JSQk4gICAgICAgMHgwMDAwMDAwMSAgLyogRE1BIEFyYml0b3IgUm91bmQtUm9iaW4gKi8KLSNkZWZpbmUgU0g3NzUxX1BDSURQQTAgICAgICAgICAgICAgMHgxODAgICAgICAgICAvKiBETUEwIFRyYW5zZmVyIEFkZHIuIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lETEEwICAgICAgICAgICAgIDB4MTg0ICAgICAgICAgLyogRE1BMCBMb2NhbCBBZGRyLiBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRFRDMCAgICAgICAgICAgICAweDE4OCAgICAgICAgIC8qIERNQTAgVHJhbnNmZXIgQ250LiBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRENSMCAgICAgICAgICAgICAweDE4QyAgICAgICAgIC8qIERNQTAgQ29udHJvbCBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lEQ1JfQUxHTiAgICAgICAgIDB4MDAwMDA2MDAgIC8qIERNQSBBbGlnbm1lbnQgTW9kZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lEQ1JfTUFTVCAgICAgICAgIDB4MDAwMDAxMDAgIC8qIERNQSBUZXJtaW5hdGlvbiBUeXBlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSURDUl9JTlRNICAgICAgICAgMHgwMDAwMDA4MCAgLyogRE1BIEludGVycnVwdCBEb25lIE1hc2sqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lEQ1JfSU5UUyAgICAgICAgIDB4MDAwMDAwNDAgIC8qIERNQSBJbnRlcnJ1cHQgRG9uZSBTdGF0dXMgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJRENSX0xITEQgICAgICAgICAweDAwMDAwMDIwICAvKiBMb2NhbCBBZGRyZXNzIENvbnRyb2wgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJRENSX1BITEQgICAgICAgICAweDAwMDAwMDEwICAvKiBQQ0kgQWRkcmVzcyBDb250cm9sKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJRENSX0lPU0VMICAgICAgICAweDAwMDAwMDA4ICAvKiBQQ0kgQWRkcmVzcyBTcGFjZSBUeXBlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSURDUl9ESVIgICAgICAgICAgMHgwMDAwMDAwNCAgLyogRE1BIFRyYW5zZmVyIERpcmVjdGlvbiAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lEQ1JfU1RPUCAgICAgICAgIDB4MDAwMDAwMDIgIC8qIEZvcmNlIERNQSBTdG9wICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSURDUl9TVFJUICAgICAgICAgMHgwMDAwMDAwMSAgLyogRE1BIFN0YXJ0ICovCi0jZGVmaW5lIFNINzc1MV9QQ0lEUEExICAgICAgICAgICAgIDB4MTkwICAgICAgICAgLyogRE1BMSBUcmFuc2ZlciBBZGRyLiBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRExBMSAgICAgICAgICAgICAweDE5NCAgICAgICAgIC8qIERNQTEgTG9jYWwgQWRkci4gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSURUQzEgICAgICAgICAgICAgMHgxOTggICAgICAgICAvKiBETUExIFRyYW5zZmVyIENudC4gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSURDUjEgICAgICAgICAgICAgMHgxOUMgICAgICAgICAvKiBETUExIENvbnRyb2wgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSURQQTIgICAgICAgICAgICAgMHgxQTAgICAgICAgICAvKiBETUEyIFRyYW5zZmVyIEFkZHIuIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lETEEyICAgICAgICAgICAgIDB4MUE0ICAgICAgICAgLyogRE1BMiBMb2NhbCBBZGRyLiBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRFRDMiAgICAgICAgICAgICAweDFBOCAgICAgICAgIC8qIERNQTIgVHJhbnNmZXIgQ250LiBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRENSMiAgICAgICAgICAgICAweDFBQyAgICAgICAgIC8qIERNQTIgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJRFBBMyAgICAgICAgICAgICAweDFCMCAgICAgICAgIC8qIERNQTMgVHJhbnNmZXIgQWRkci4gUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSURMQTMgICAgICAgICAgICAgMHgxQjQgICAgICAgICAvKiBETUEzIExvY2FsIEFkZHIuIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lEVEMzICAgICAgICAgICAgIDB4MUI4ICAgICAgICAgLyogRE1BMyBUcmFuc2ZlciBDbnQuIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lEQ1IzICAgICAgICAgICAgIDB4MUJDICAgICAgICAgLyogRE1BMyBDb250cm9sIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lQQVIgICAgICAgICAgICAgIDB4MUMwICAgICAgICAgLyogUElPIEFkZHJlc3MgUmVnaXN0ZXIgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUEFSX0NGR0VOICAgICAgICAweDgwMDAwMDAwICAvKiBDb25maWd1cmF0aW9uIEVuYWJsZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQQVJfQlVTTk8gICAgICAgIDB4MDBGRjAwMDAgIC8qIENvbmZpZy4gQnVzIE51bWJlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQQVJfREVWTk8gICAgICAgIDB4MDAwMEZGMDAgIC8qIENvbmZpZy4gRGV2aWNlIE51bWJlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQQVJfUkVHQUQgICAgICAgIDB4MDAwMDAwRkMgIC8qIFJlZ2lzdGVyIEFkZHJlc3MgTnVtYmVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lNQlIgICAgICAgICAgICAgIDB4MUM0ICAgICAgICAgLyogTWVtb3J5IEJhc2UgQWRkcmVzcyBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lNQlJfTUFTSyAgICAgICAgIDB4RkYwMDAwMDAgIC8qIE1lbW9yeSBTcGFjZSBNYXNrICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSU1CUl9MT0NLICAgICAgICAgMHgwMDAwMDAwMSAgLyogTG9jayBNZW1vcnkgU3BhY2UgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUlPQlIgICAgICAgICAgICAgMHgxQzggICAgICAgICAvKiBJL08gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUlPQlJfTUFTSyAgICAgICAgIDB4RkZGQzAwMDAgLyogSU8gU3BhY2UgTWFzayAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lJT0JSX0xPQ0sgICAgICAgICAweDAwMDAwMDAxIC8qIExvY2sgSU8gU3BhY2UgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSVBJTlQgICAgICAgICAgICAgMHgxQ0MgICAgICAgICAvKiBQb3dlciBNZ21udCBJbnQuIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBJTlRfRDMgICAgICAgICAgIDB4MDAwMDAwMDIgLyogRDMgUHdyIE1nbXQuIEludGVycnVwdCAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQSU5UX0QwICAgICAgICAgICAweDAwMDAwMDAxIC8qIEQwIFB3ciBNZ210LiBJbnRlcnJ1cHQgKi8gIAotI2RlZmluZSBTSDc3NTFfUENJUElOVE0gICAgICAgICAgICAweDFEMCAgICAgICAgIC8qIFBvd2VyIE1nbW50IE1hc2sgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUNMS1IgICAgICAgICAgICAgMHgxRDQgICAgICAgICAvKiBDbG9jayBDdHJsLiBSZWdpc3RlciAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lDTEtSX1BDU1RQICAgICAgICAweDAwMDAwMDAyIC8qIFBDSSBDbG9jayBTdG9wICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSUNMS1JfQkNTVFAgICAgICAgIDB4MDAwMDAwMDIgLyogQkNMSyBDbG9jayBTdG9wICovCi0vKiBGb3IgZGVmaW5pdGlvbnMgb2YgQkNSLCBNQ1Igc2VlIC4uLiAqLwotI2RlZmluZSBTSDc3NTFfUENJQkNSMSAgICAgICAgICAgICAweDFFMCAgICAgICAgIC8qIE1lbW9yeSBCQ1IxIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lCQ1IyICAgICAgICAgICAgIDB4MUU0ICAgICAgICAgLyogTWVtb3J5IEJDUjIgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSVdDUjEgICAgICAgICAgICAgMHgxRTggICAgICAgICAvKiBXYWl0IENvbnRyb2wgMSBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJV0NSMiAgICAgICAgICAgICAweDFFQyAgICAgICAgIC8qIFdhaXQgQ29udHJvbCAyIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lXQ1IzICAgICAgICAgICAgIDB4MUYwICAgICAgICAgLyogV2FpdCBDb250cm9sIDMgUmVnaXN0ZXIgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSU1DUiAgICAgICAgICAgICAgMHgxRjQgICAgICAgICAvKiBNZW1vcnkgQ29udHJvbCBSZWdpc3RlciAqLwotI2RlZmluZSBTSDc3NTFfUENJQkNSMwkJICAgMHgxZjgJIC8qIE1lbW9yeSBCQ1IzIFJlZ2lzdGVyICovCi0jZGVmaW5lIFNINzc1MV9QQ0lQQ1RSICAgICAgICAgICAgIDB4MjAwICAgICAgICAgLyogUG9ydCBDb250cm9sIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBDVFJfUDJFTiAgICAgICAgMHgwMDA0MDAwMDAgLyogUG9ydCAyIEVuYWJsZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQQ1RSX1AxRU4gICAgICAgIDB4MDAwMjAwMDAwIC8qIFBvcnQgMSBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUENUUl9QMEVOICAgICAgICAweDAwMDEwMDAwMCAvKiBQb3J0IDAgRW5hYmxlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBDVFJfUDJVUCAgICAgICAgMHgwMDAwMDAwMjAgLyogUG9ydDIgUHVsbCBVcCBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUENUUl9QMklPICAgICAgICAweDAwMDAwMDAxMCAvKiBQb3J0MiBPdXRwdXQgRW5hYmxlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBDVFJfUDFVUCAgICAgICAgMHgwMDAwMDAwMDggLyogUG9ydDEgUHVsbCBVcCBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUENUUl9QMUlPICAgICAgICAweDAwMDAwMDAwNCAvKiBQb3J0MSBPdXRwdXQgRW5hYmxlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBDVFJfUDBVUCAgICAgICAgMHgwMDAwMDAwMDIgLyogUG9ydDAgUHVsbCBVcCBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUENUUl9QMElPICAgICAgICAweDAwMDAwMDAwMSAvKiBQb3J0MCBPdXRwdXQgRW5hYmxlICovCi0jZGVmaW5lIFNINzc1MV9QQ0lQRFRSICAgICAgICAgICAgIDB4MjA0ICAgICAgICAgLyogUG9ydCBEYXRhIFJlZ2lzdGVyICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBEVFJfUEI1ICAgICAgICAgMHgwMDAwMDAwMjAgLyogUG9ydCA1IEVuYWJsZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQRFRSX1BCNCAgICAgICAgIDB4MDAwMDAwMDEwIC8qIFBvcnQgNCBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUERUUl9QQjMgICAgICAgICAweDAwMDAwMDAwOCAvKiBQb3J0IDMgRW5hYmxlICovCi0gICNkZWZpbmUgU0g3NzUxX1BDSVBEVFJfUEIyICAgICAgICAgMHgwMDAwMDAwMDQgLyogUG9ydCAyIEVuYWJsZSAqLwotICAjZGVmaW5lIFNINzc1MV9QQ0lQRFRSX1BCMSAgICAgICAgIDB4MDAwMDAwMDAyIC8qIFBvcnQgMSBFbmFibGUgKi8KLSAgI2RlZmluZSBTSDc3NTFfUENJUERUUl9QQjAgICAgICAgICAweDAwMDAwMDAwMSAvKiBQb3J0IDAgRW5hYmxlICovCi0jZGVmaW5lIFNINzc1MV9QQ0lQRFIgICAgICAgICAgICAgIDB4MjIwICAgICAgICAgLyogUG9ydCBJTyBEYXRhIFJlZ2lzdGVyICovCiAKIC8qIE1lbW9yeSBDb250cm9sIFJlZ2lzdGVycyAqLwogI2RlZmluZSBTSDc3NTFfQkNSMSAgICAgICAgICAgICAgICAweEZGODAwMDAwICAgIC8qIE1lbW9yeSBCQ1IxIFJlZ2lzdGVyICovCkBAIC0yNzQsMzAgKzEyNyw5IEBACiAjZGVmaW5lIFNINzc1MV9DUzVfQkFTRV9BRERSICAgICAgIChTSDc3NTFfQ1M0X0JBU0VfQUREUiArIFNINzc1MV9NRU1fUkVHSU9OX1NJWkUpCiAjZGVmaW5lIFNINzc1MV9DUzZfQkFTRV9BRERSICAgICAgIChTSDc3NTFfQ1M1X0JBU0VfQUREUiArIFNINzc1MV9NRU1fUkVHSU9OX1NJWkUpCiAKLS8qIEdlbmVyYWwgUENJIHZhbHVlcyAqLwotI2RlZmluZSBTSDc3NTFfUENJX0hPU1RfQlJJREdFCQkweDYKLQotLyogRmxhZ3MgKi8KLSNkZWZpbmUgU0g3NzUxX1BDSUNfTk9fUkVTRVQJMHgwMDAxCi0KLS8qIEV4dGVybmFsIGZ1bmN0aW9ucyBkZWZpbmVkIHBlciBwbGF0Zm9ybSBpLmUuIEJpZyBTdXIsIFNFLi4uICh0aGVzZSBjb3VsZCBiZSByb3V0ZWQgCi0gKiB0aHJvdWdoIHRoZSBtYWNoaW5lIHZlY3RvcnMuLi4gKi8KLWV4dGVybiBpbnQgcGNpYmlvc19pbml0X3BsYXRmb3JtKHZvaWQpOwotZXh0ZXJuIGludCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEodTggc2xvdCwgdTggcGluKTsKLQotc3RydWN0IHNoNzc1MV9wY2lfYWRkcmVzc19zcGFjZSB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLX07Ci0KLXN0cnVjdCBzaDc3NTFfcGNpX2FkZHJlc3NfbWFwIHsKLQlzdHJ1Y3Qgc2g3NzUxX3BjaV9hZGRyZXNzX3NwYWNlIHdpbmRvdzA7Ci0Jc3RydWN0IHNoNzc1MV9wY2lfYWRkcmVzc19zcGFjZSB3aW5kb3cxOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci19Oworc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXA7CiAKIC8qIGFyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc1MS5jICovCi1leHRlcm4gaW50IHNoNzc1MV9wY2ljX2luaXQoc3RydWN0IHNoNzc1MV9wY2lfYWRkcmVzc19tYXAgKm1hcCk7CitpbnQgc2g3NzUxX3BjaWNfaW5pdChzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCAqbWFwKTsKIAogI2VuZGlmIC8qIF9QQ0lfU0g3NzUxX0hfICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzMDY0YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5jCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICoJTG93LUxldmVsIFBDSSBTdXBwb3J0IGZvciB0aGUgU0g3NzgwCisgKgorICogIER1c3RpbiBNY0ludGlyZSAoZHVzdGluQHNlbnNvcmlhLmNvbSkKKyAqCURlcml2ZWQgZnJvbSBhcmNoL2kzODYva2VybmVsL3BjaS0qLmMgd2hpY2ggYm9yZSB0aGUgbWVzc2FnZToKKyAqCShjKSAxOTk5LS0yMDAwIE1hcnRpbiBNYXJlcyA8bWpAdWN3LmN6PgorICoKKyAqICBQb3J0ZWQgdG8gdGhlIG5ldyBBUEkgYnkgUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4KKyAqICBXaXRoIGNsZWFudXAgYnkgUGF1bCB2YW4gR29vbCA8cHZhbmdvb2xAbWltb3RlY2guY29tPgorICoKKyAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqLworCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlICJwY2ktc2g0LmgiCisKKy8qCisgKiBJbml0aWFsaXphdGlvbi4gVHJ5IGFsbCBrbm93biBQQ0kgYWNjZXNzIG1ldGhvZHMuIE5vdGUgdGhhdCB3ZSBzdXBwb3J0CisgKiB1c2luZyBib3RoIFBDSSBCSU9TIGFuZCBkaXJlY3QgYWNjZXNzOiBpbiBzdWNoIGNhc2VzLCB3ZSB1c2UgSS9PIHBvcnRzCisgKiB0byBhY2Nlc3MgY29uZmlnIHNwYWNlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgcGxhdGZvcm0gc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gKEJTQyByZWdpc3RlcnMsIGFuZCBtZW1vcnkKKyAqIHNwYWNlIG1hcHBpbmcpIHdpbGwgYmUgY2FsbGVkIHZpYSB0aGUgcGxhdGZvcm0gZGVmaW5lZCBmdW5jdGlvbgorICogcGNpYmlvc19pbml0X3BsYXRmb3JtKCkuCisgKi8KK3N0YXRpYyBpbnQgX19pbml0IHNoNzc4MF9wY2lfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCBpZDsKKwlpbnQgcmV0OworCisJcHJfZGVidWcoIlBDSTogU3RhcnRpbmcgaW50aWFsaXphdGlvbi5cbiIpOworCisJb3V0bCgweDAwMDAwMDAxLCBTSDc3ODBfUENJX1ZDUjIpOyAvKiBFbmFibGUgUENJQyAqLworCisJLyogY2hlY2sgZm9yIFNINzc4MC9TSDc3ODBSIGhhcmR3YXJlICovCisJaWQgPSBwY2lfcmVhZF9yZWcoU0g3NzgwX1BDSVZJRCk7CisJaWYgKChpZCAhPSAoKFNINzc4MF9ERVZJQ0VfSUQgPDwgMTYpIHwgU0g3NzgwX1ZFTkRPUl9JRCkpICYmCisJICAgIChpZCAhPSAoKFNINzc4MV9ERVZJQ0VfSUQgPDwgMTYpIHwgU0g3NzgwX1ZFTkRPUl9JRCkpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiUENJOiBUaGlzIGlzIG5vdCBhbiBTSDc3ODAgKCV4KVxuIiwgaWQpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBTZXR1cCB0aGUgSU5UQyAqLworCWN0cmxfb3V0bCgweDAwMjAwMDAwLCBJTlRDX0lDUjApOwkvKiBJTlRDIFNILTQgTW9kZSAqLworCWN0cmxfb3V0bCgweDAwMDc4MDAwLCBJTlRDX0lOVDJNU0tDUik7CS8qIGVuYWJsZSBQQ0lJTlRBIC0gUENJSU5URCAqLworCWN0cmxfb3V0bCgweDQwMDAwMDAwLCBJTlRDX0lOVE1TSzEpOwkvKiBkaXNhYmxlIElSTDQtNyBJbnRlcnJ1cHQgKi8KKwljdHJsX291dGwoMHgwMDAwZmZmZSwgSU5UQ19JTlRNU0syKTsJLyogZGlzYWJsZSBJUkw0LTcgSW50ZXJydXB0ICovCisJY3RybF9vdXRsKDB4ODAwMDAwMDAsIElOVENfSU5UTVNLQ0xSMSk7CS8qIGVuYWJsZSBJUkwwLTMgSW50ZXJydXB0ICovCisJY3RybF9vdXRsKDB4ZmZmZTAwMDAsIElOVENfSU5UTVNLQ0xSMik7CS8qIGVuYWJsZSBJUkwwLTMgSW50ZXJydXB0ICovCisKKwlpZiAoKHJldCA9IHNoNF9wY2lfY2hlY2tfZGlyZWN0KCkpICE9IDApCisJCXJldHVybiByZXQ7CisKKwlyZXR1cm4gcGNpYmlvc19pbml0X3BsYXRmb3JtKCk7Cit9Citjb3JlX2luaXRjYWxsKHNoNzc4MF9wY2lfaW5pdCk7CisKK2ludCBfX2luaXQgc2g3NzgwX3BjaWNfaW5pdChzdHJ1Y3Qgc2g0X3BjaV9hZGRyZXNzX21hcCAqbWFwKQoreworCXUzMiB3b3JkOworCisJLyoKKwkgKiBUaGlzIGNvZGUgaXMgdW51c2VkIGZvciBzb21lIGJvYXJkcyBhcyBpdCBpcyBkb25lIGluIHRoZQorCSAqIGJvb3Rsb2FkZXIgYW5kIGRvaW5nIGl0IGhlcmUgbWVhbnMgdGhlIE1BQyBhZGRyZXNzZXMgbG9hZGVkCisJICogYnkgdGhlIGJvb3Rsb2FkZXIgZ2V0IGxvc3QuCisJICovCisJaWYgKCEobWFwLT5mbGFncyAmIFNINF9QQ0lDX05PX1JFU0VUKSkgeworCQkvKiB0b2dnbGUgUENJIHJlc2V0IHBpbiAqLworCQl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9QUlNUOworCQlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lDUik7CisJCS8qIFdhaXQgZm9yIGEgbG9uZyB0aW1lLi4uIG5vdCAxIHNlYy4gYnV0IGxvbmcgZW5vdWdoICovCisJCW1kZWxheSgxMDApOworCQl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWDsKKwkJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDRfUENJQ1IpOworCX0KKworCS8qIHNldCB0aGUgY29tbWFuZC9zdGF0dXMgYml0cyB0bzoKKwkgKiBXYWl0IEN5Y2xlIENvbnRyb2wgKyBQYXJpdHkgRW5hYmxlICsgQnVzIE1hc3RlciArCisJICogTWVtIHNwYWNlIGVuYWJsZQorCSAqLworCXBjaV93cml0ZV9yZWcoMHgwMDAwMDA0NiwgU0g3NzgwX1BDSUNNRCk7CisKKwkvKiBkZWZpbmUgdGhpcyBob3N0IGFzIHRoZSBob3N0IGJyaWRnZSAqLworCXdvcmQgPSBQQ0lfQkFTRV9DTEFTU19CUklER0UgPDwgMjQ7CisJcGNpX3dyaXRlX3JlZyh3b3JkLCBTSDc3ODBfUENJUklEKTsKKworCS8qIFNldCBJTyBhbmQgTWVtIHdpbmRvd3MgdG8gbG9jYWwgYWRkcmVzcworCSAqIE1ha2UgUENJIGFuZCBsb2NhbCBhZGRyZXNzIHRoZSBzYW1lIGZvciBlYXN5IDEgdG8gMSBtYXBwaW5nCisJICogV2luZG93MCA9IG1hcC0+d2luZG93MC5zaXplIEAgbm9uLWNhY2hlZCBhcmVhIGJhc2UgPSBTRFJBTQorCSAqIFdpbmRvdzEgPSBtYXAtPndpbmRvdzEuc2l6ZSBAIGNhY2hlZCBhcmVhIGJhc2UgPSBTRFJBTQorCSAqLworCXdvcmQgPSAoKG1hcC0+d2luZG93MC5zaXplIC0gMSkgJiAweDFmZjAwMDAxKSB8IDB4MDE7CisJcGNpX3dyaXRlX3JlZygweDA3ZjAwMDAxLCBTSDRfUENJTFNSMCk7CisJd29yZCA9ICgobWFwLT53aW5kb3cxLnNpemUgLSAxKSAmIDB4MWZmMDAwMDEpIHwgMHgwMTsKKwlwY2lfd3JpdGVfcmVnKDB4MDAwMDAwMDEsIFNINF9QQ0lMU1IxKTsKKwkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMCBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLworCXdvcmQgPSBQMlNFR0FERFIobWFwLT53aW5kb3cwLmJhc2UpOworCXBjaV93cml0ZV9yZWcoMHhhODAwMDAwMCwgU0g0X1BDSUxBUjApOworCXBjaV93cml0ZV9yZWcoMHgwODAwMDAwMCwgU0g3NzgwX1BDSU1CQVIwKTsKKwkvKiBTZXQgdGhlIHZhbHVlcyBvbiB3aW5kb3cgMSBQQ0kgY29uZmlnIHJlZ2lzdGVycyAqLworCXdvcmQgPSBQMlNFR0FERFIobWFwLT53aW5kb3cxLmJhc2UpOworCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMCwgU0g0X1BDSUxBUjEpOworCXBjaV93cml0ZV9yZWcoMHgwMDAwMDAwMCwgU0g3NzgwX1BDSU1CQVIxKTsKKworCS8qIE1hcCBJTyBzcGFjZSBpbnRvIFBDSSBJTyB3aW5kb3cKKwkgKiBUaGUgSU8gd2luZG93IGlzIDY0Sy1QQ0lCSU9TX01JTl9JTyBpbiBzaXplCisJICogSU8gYWRkcmVzc2VzIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0aGUKKwkgKiBQQ0kgSU8gd2luZG93IGJhc2UgYWRkcmVzcworCSAqLworCXByX2RlYnVnKCJQQ0k6IE1hcHBpbmcgSU8gYWRkcmVzcyAweCV4IC0gMHgleCB0byBiYXNlIDB4JXhcbiIsCisJCSBQQ0lCSU9TX01JTl9JTywgKDY0IDw8IDEwKSwKKwkJIFNINzc4MF9QQ0lfSU9fQkFTRSArIFBDSUJJT1NfTUlOX0lPKTsKKworCS8qIE5PVEU6IEknbSBpZ25vcmluZyB0aGUgUENJIGVycm9yIElSUXMgZm9yIG5vdy4uCisJICogVE9ETzogYWRkIHN1cHBvcnQgZm9yIHRoZSBpbnRlcm5hbCBlcnJvciBpbnRlcnJ1cHRzIGFuZAorCSAqIERNQSBpbnRlcnJ1cHRzLi4uCisJICovCisKKyNpZmRlZiBDT05GSUdfU0hfUjc3ODBSUAorCXBjaV9maXh1cF9wY2ljKCk7CisjZW5kaWYKKworCS8qIFNINzc4MCBpbml0IGRvbmUsIHNldCBjZW50cmFsIGZ1bmN0aW9uIGluaXQgY29tcGxldGUgKi8KKwkvKiB1c2Ugcm91bmQgcm9iaW4gbW9kZSB0byBzdG9wIGEgZGV2aWNlIHN0YXJ2aW5nL292ZXJydW5pbmcgKi8KKwl3b3JkID0gU0g0X1BDSUNSX1BSRUZJWCB8IFNINF9QQ0lDUl9DRklOIHwgU0g0X1BDSUNSX0ZUTzsKKwlwY2lfd3JpdGVfcmVnKHdvcmQsIFNINF9QQ0lDUik7CisKKwlyZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc2g3NzgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjAyZDIxOAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXNoNzc4MC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKglMb3ctTGV2ZWwgUENJIFN1cHBvcnQgZm9yIFNINzc4MCB0YXJnZXRzCisgKgorICogIER1c3RpbiBNY0ludGlyZSAoZHVzdGluQHNlbnNvcmlhLmNvbSkgKGMpIDIwMDEKKyAqICBQYXVsIE11bmR0IChsZXRoYWxAbGludXgtc2gub3JnKSAoYykgMjAwMworICoKKyAqICBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqLworCisjaWZuZGVmIF9QQ0lfU0g3NzgwX0hfCisjZGVmaW5lIF9QQ0lfU0g3NzgwX0hfCisKKy8qIFBsYXRmb3JtIFNwZWNpZmljIFZhbHVlcyAqLworI2RlZmluZSBTSDc3ODBfVkVORE9SX0lECTB4MTkxMgorI2RlZmluZSBTSDc3ODBfREVWSUNFX0lECTB4MDAwMgorI2RlZmluZSBTSDc3ODFfREVWSUNFX0lECTB4MDAwMQorCisvKiBTSDc3ODAgQ29udHJvbCBSZWdpc3RlcnMgKi8KKyNkZWZpbmUJU0g3NzgwX1BDSV9WQ1IwCQkweEZFMDAwMDAwCisjZGVmaW5lCVNINzc4MF9QQ0lfVkNSMQkJMHhGRTAwMDAwNAorI2RlZmluZQlTSDc3ODBfUENJX1ZDUjIJCTB4RkUwMDAwMDgKKworLyogU0g3NzgwIFNwZWNpZmljIFZhbHVlcyAqLworI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19CQVNFCTB4RkQwMDAwMDAJLyogQ29uZmlnIHNwYWNlIGJhc2UgYWRkciAqLworI2RlZmluZSBTSDc3ODBfUENJX0NPTkZJR19TSVpFCTB4MDEwMDAwMDAJLyogQ29uZmlnIHNwYWNlIHNpemUgKi8KKworI2RlZmluZSBTSDc3ODBfUENJX01FTU9SWV9CQVNFCTB4RkQwMDAwMDAJLyogTWVtb3J5IHNwYWNlIGJhc2UgYWRkciAqLworI2RlZmluZSBTSDc3ODBfUENJX01FTV9TSVpFCTB4MDEwMDAwMDAJLyogU2l6ZSBvZiBNZW1vcnkgd2luZG93ICovCisKKyNkZWZpbmUgU0g3NzgwX1BDSV9JT19CQVNFCTB4RkU0MDAwMDAJLyogSU8gc3BhY2UgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFNINzc4MF9QQ0lfSU9fU0laRQkweDAwNDAwMDAwCS8qIFNpemUgb2YgSU8gd2luZG93ICovCisKKyNkZWZpbmUgU0g3NzgwX1BDSVJFR19CQVNFCTB4RkUwNDAwMDAJLyogUENJIHJlZ3MgYmFzZSBhZGRyZXNzICovCisjZGVmaW5lIFBDSV9SRUcobikJCShTSDc3ODBfUENJUkVHX0JBU0UrbikKKworLyogU0g3NzgwIFBDSSBDb25maWcgUmVnaXN0ZXJzICovCisjZGVmaW5lIFNINzc4MF9QQ0lWSUQJCTB4MDAwCQkvKiBWZW5kb3IgSUQgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSURJRAkJMHgwMDIJCS8qIERldmljZSBJRCAqLworI2RlZmluZSBTSDc3ODBfUENJQ01ECQkweDAwNAkJLyogQ29tbWFuZCAqLworI2RlZmluZSBTSDc3ODBfUENJU1RBVFVTCTB4MDA2CQkvKiBTdGF0dXMgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSVJJRAkJMHgwMDgJCS8qIFJldmlzaW9uIElEICovCisjZGVmaW5lIFNINzc4MF9QQ0lQSUYJCTB4MDA5CQkvKiBQcm9ncmFtIEludGVyZmFjZSAqLworI2RlZmluZSBTSDc3ODBfUENJU1VCCQkweDAwYQkJLyogU3ViIGNsYXNzIGNvZGUgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUJDQwkJMHgwMGIJCS8qIEJhc2UgY2xhc3MgY29kZSAqLworI2RlZmluZSBTSDc3ODBfUENJQ0xTCQkweDAwYwkJLyogQ2FjaGUgbGluZSBzaXplICovCisjZGVmaW5lIFNINzc4MF9QQ0lMVE0JCTB4MDBkCQkvKiBsYXRlbmN5IHRpbWVyICovCisjZGVmaW5lIFNINzc4MF9QQ0lIRFIJCTB4MDBlCQkvKiBIZWFkZXIgdHlwZSAqLworI2RlZmluZSBTSDc3ODBfUENJQklTVAkJMHgwMGYJCS8qIEJJU1QgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUlCQVIJCTB4MDEwCQkvKiBJTyBCYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSU1CQVIwCQkweDAxNAkJLyogTWVtb3J5IGJhc2UgYWRkcmVzczAgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSU1CQVIxCQkweDAxOAkJLyogTWVtb3J5IGJhc2UgYWRkcmVzczEgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSVNWSUQJCTB4MDJjCQkvKiBTdWIgc3lzdGVtIHZlbmRvciBJRCAqLworI2RlZmluZSBTSDc3ODBfUENJU0lECQkweDAyZQkJLyogU3ViIHN5c3RlbSBJRCAqLworI2RlZmluZSBTSDc3ODBfUENJQ1AJCTB4MDM0CisjZGVmaW5lIFNINzc4MF9QQ0lJTlRMSU5FCTB4MDNjCQkvKiBJbnRlcnJ1cHQgbGluZSAqLworI2RlZmluZSBTSDc3ODBfUENJSU5UUElOCTB4MDNkCQkvKiBJbnRlcnJ1cHQgcGluICovCisjZGVmaW5lIFNINzc4MF9QQ0lNSU5HTlQJMHgwM2UJCS8qIE1pbnVtdW0gZ3JhbmQgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSU1BWExBVAkweDAzZgkJLyogTWF4bXVtIGxhdGVuY3kgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUNJRAkJMHgwNDAKKyNkZWZpbmUgU0g3NzgwX1BDSU5JUAkJMHgwNDEKKyNkZWZpbmUgU0g3NzgwX1BDSVBNQwkJMHgwNDIKKyNkZWZpbmUgU0g3NzgwX1BDSVBNQ1NSCQkweDA0NAorI2RlZmluZSBTSDc3ODBfUENJUE1DU1JfQlNFCTB4MDQ2CisjZGVmaW5lIFNINzc4MF9QQ0lDREQJCTB4MDQ3CisKKyNkZWZpbmUgU0g3NzgwX1BDSU1CUjAJCTB4MUUwCisjZGVmaW5lIFNINzc4MF9QQ0lNQk1SMAkJMHgxRTQKKyNkZWZpbmUgU0g3NzgwX1BDSU1CUjIJCTB4MUYwCisjZGVmaW5lIFNINzc4MF9QQ0lNQk1SMgkJMHgxRjQKKyNkZWZpbmUgU0g3NzgwX1BDSUlPQlIJCTB4MUY4CisjZGVmaW5lIFNINzc4MF9QQ0lJT0JNUgkJMHgxRkMKKyNkZWZpbmUgU0g3NzgwX1BDSUNTQ1IwCQkweDIxMAkJLyogQ2FjaGUgU25vb3AxIENudC4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUNTQ1IxCQkweDIxNAkJLyogQ2FjaGUgU25vb3AyIENudC4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUNTQVIwCQkweDIxOAkvKiBDYWNoZSBTbm9vcDEgQWRkci4gUmVnaXN0ZXIgKi8KKyNkZWZpbmUgU0g3NzgwX1BDSUNTQVIxCQkweDIxQwkvKiBDYWNoZSBTbm9vcDIgQWRkci4gUmVnaXN0ZXIgKi8KKworLyogR2VuZXJhbCBNZW1vcnkgQ29uZmlnIEFkZHJlc3NlcyAqLworI2RlZmluZSBTSDc3ODBfQ1MwX0JBU0VfQUREUgkweDAKKyNkZWZpbmUgU0g3NzgwX01FTV9SRUdJT05fU0laRQkweDA0MDAwMDAwCisjZGVmaW5lIFNINzc4MF9DUzFfQkFTRV9BRERSCShTSDc3ODBfQ1MwX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisjZGVmaW5lIFNINzc4MF9DUzJfQkFTRV9BRERSCShTSDc3ODBfQ1MxX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisjZGVmaW5lIFNINzc4MF9DUzNfQkFTRV9BRERSCShTSDc3ODBfQ1MyX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisjZGVmaW5lIFNINzc4MF9DUzRfQkFTRV9BRERSCShTSDc3ODBfQ1MzX0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisjZGVmaW5lIFNINzc4MF9DUzVfQkFTRV9BRERSCShTSDc3ODBfQ1M0X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisjZGVmaW5lIFNINzc4MF9DUzZfQkFTRV9BRERSCShTSDc3ODBfQ1M1X0JBU0VfQUREUiArIFNINzc4MF9NRU1fUkVHSU9OX1NJWkUpCisKK3N0cnVjdCBzaDRfcGNpX2FkZHJlc3NfbWFwOworCisvKiBhcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zaDc3ODAuYyAqLworaW50IHNoNzc4MF9wY2ljX2luaXQoc3RydWN0IHNoNF9wY2lfYWRkcmVzc19tYXAgKm1hcCk7CisKKyNlbmRpZiAvKiBfUENJX1NINzc4MF9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2ktc3Q0MC5jCmluZGV4IDdjODFiOGIuLjRhYjVlYTYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLXN0NDAuYworKysgYi9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS1zdDQwLmMKQEAgLTcwLDEyICs3MCw2IEBACiBzdGF0aWMgdm9pZCBwY2lfc2V0X3JiYXJfcmVnaW9uKHVuc2lnbmVkIGludCByZWdpb24sICAgICB1bnNpZ25lZCBsb25nIGxvY2FsQWRkciwKIAkJCSB1bnNpZ25lZCBsb25nIHBjaU9mZnNldCwgdW5zaWduZWQgbG9uZyByZWdpb25TaXplKTsKIAotLyoKLSAqIFRoZSBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEgZnVuY3Rpb24gaXMgZGVmaW5lZCBpbiB0aGUgYXBwcm9wcmlhdGUKLSAqIGJvYXJkIHNwZWNpZmljIGNvZGUgYW5kIHJlZmVyZW5jZWQgaGVyZQotICovCi1leHRlcm4gaW50IF9faW5pdCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldiwgdTggc2xvdCwgdTggcGluKTsKLQogc3RhdGljIF9faW5pdCB2b2lkIFNldFBDSVBMTCh2b2lkKQogewogCXsKQEAgLTQyMiwxMyArNDE2LDYgQEAKIC8qIEV2ZXJ5dGhpbmcgaGFuZ3Mgb2ZmIHRoaXMgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2J1cyAqcGNpX3Jvb3RfYnVzOwogCi0KLXN0YXRpYyB1OCBfX2luaXQgbm9fc3dpenpsZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1OCAqIHBpbikKLXsKLQlyZXR1cm4gUENJX1NMT1QoZGV2LT5kZXZmbik7Ci19Ci0KLQogc3RhdGljIGludCBfX2luaXQgcGNpYmlvc19pbml0KHZvaWQpCiB7CiAJZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbWVtb3J5X3N0YXJ0LCBtZW1vcnlfZW5kOwpAQCAtNDY1LDE3ICs0NTIsMTEgQEAKIAkvKiBvaywgZG8gdGhlIHNjYW4gbWFuICovCiAJcGNpX3Jvb3RfYnVzID0gcGNpX3NjYW5fYnVzKDAsICZzdDQwcGNpX2NvbmZpZ19vcHMsIE5VTEwpOwogCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKLQlwY2lfZml4dXBfaXJxcyhub19zd2l6emxlLCBwY2liaW9zX21hcF9wbGF0Zm9ybV9pcnEpOwogCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbChwY2liaW9zX2luaXQpOwogCi12b2lkIF9faW5pdCBwY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQotewotfQotCiAvKgogICogUHVibGlzaCBhIHJlZ2lvbiBvZiBsb2NhbCBhZGRyZXNzIHNwYWNlIG92ZXIgdGhlIFBDSSBidXMKICAqIHRvIG90aGVyIGRldmljZXMuCmRpZmYgLS1naXQgYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jIGIvYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCAzZDU0NmJhLi5kNDM5MzM2IDEwMDY0NAotLS0gYS9hcmNoL3NoL2RyaXZlcnMvcGNpL3BjaS5jCisrKyBiL2FyY2gvc2gvZHJpdmVycy9wY2kvcGNpLmMKQEAgLTEsMjEgKzEsNDUgQEAKLS8qIGFyY2gvc2gva2VybmVsL3BjaS5jCi0gKiAkSWQ6IHBjaS5jLHYgMS4xIDIwMDMvMDgvMjQgMTk6MTU6NDUgbGV0aGFsIEV4cCAkCisvKgorICogYXJjaC9zaC9kcml2ZXJzL3BjaS9wY2kuYwogICoKICAqIENvcHlyaWdodCAoYykgMjAwMiBNLiBSLiBCcm93biAgPG1yYnJvd25AbGludXgtc2gub3JnPgotICogCi0gKiAKKyAqIENvcHlyaWdodCAoYykgMjAwNCAtIDIwMDYgUGF1bCBNdW5kdCAgPGxldGhhbEBsaW51eC1zaC5vcmc+CisgKgogICogVGhlc2UgZnVuY3Rpb25zIGFyZSBjb2xsZWN0ZWQgaGVyZSB0byByZWR1Y2UgZHVwbGljYXRpb24gb2YgY29tbW9uCiAgKiBjb2RlIGFtb25nc3QgdGhlIG1hbnkgcGxhdGZvcm0tc3BlY2lmaWMgUENJIHN1cHBvcnQgY29kZSBmaWxlcy4KLSAqIAorICoKICAqIFRoZXNlIHJvdXRpbmVzIHJlcXVpcmUgdGhlIGZvbGxvd2luZyBib2FyZC1zcGVjaWZpYyByb3V0aW5lczoKICAqIHZvaWQgcGNpYmlvc19maXh1cF9pcnFzKCk7CiAgKgogICogU2VlIGluY2x1ZGUvYXNtLXNoL3BjaS5oIGZvciBtb3JlIGluZm9ybWF0aW9uLgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbmxpbmUgdTggYnJpZGdlX3N3aXp6bGUodTggcGluLCB1OCBzbG90KQoreworCXJldHVybiAoKChwaW4gLSAxKSArIHNsb3QpICUgNCkgKyAxOworfQorCitzdGF0aWMgdTggX19pbml0IHNpbXBsZV9zd2l6emxlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4ICpwaW5wKQoreworCXU4IHBpbiA9ICpwaW5wOworCisJd2hpbGUgKGRldi0+YnVzLT5wYXJlbnQpIHsKKwkJcGluID0gYnJpZGdlX3N3aXp6bGUocGluLCBQQ0lfU0xPVChkZXYtPmRldmZuKSk7CisJCS8qIE1vdmUgdXAgdGhlIGNoYWluIG9mIGJyaWRnZXMuICovCisJCWRldiA9IGRldi0+YnVzLT5zZWxmOworCX0KKwkqcGlucCA9IHBpbjsKKworCS8qIFRoZSBzbG90IGlzIHRoZSBzbG90IG9mIHRoZSBsYXN0IGJyaWRnZS4gKi8KKwlyZXR1cm4gUENJX1NMT1QoZGV2LT5kZXZmbik7Cit9CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWJpb3NfaW5pdCh2b2lkKQogewpAQCAtMjYsMjYgKzUwLDMyIEBACiAjaWZkZWYgQ09ORklHX1BDSV9BVVRPCiAJLyogYXNzaWduIHJlc291cmNlcyAqLwogCWJ1c25vID0gMDsKLQlmb3IgKHAgPSBib2FyZF9wY2lfY2hhbm5lbHM7IHAtPnBjaV9vcHMgIT0gTlVMTDsgcCsrKSB7CisJZm9yIChwID0gYm9hcmRfcGNpX2NoYW5uZWxzOyBwLT5wY2lfb3BzICE9IE5VTEw7IHArKykKIAkJYnVzbm8gPSBwY2lhdXRvX2Fzc2lnbl9yZXNvdXJjZXMoYnVzbm8sIHApICsgMTsKLQl9CiAjZW5kaWYKIAogCS8qIHNjYW4gdGhlIGJ1c2VzICovCiAJYnVzbm8gPSAwOwotCWZvciAocD0gYm9hcmRfcGNpX2NoYW5uZWxzOyBwLT5wY2lfb3BzICE9IE5VTEw7IHArKykgeworCWZvciAocCA9IGJvYXJkX3BjaV9jaGFubmVsczsgcC0+cGNpX29wcyAhPSBOVUxMOyBwKyspIHsKIAkJYnVzID0gcGNpX3NjYW5fYnVzKGJ1c25vLCBwLT5wY2lfb3BzLCBwKTsKLQkJYnVzbm8gPSBidXMtPnN1Ym9yZGluYXRlKzE7CisJCWJ1c25vID0gYnVzLT5zdWJvcmRpbmF0ZSArIDE7CiAJfQogCi0JLyogYm9hcmQtc3BlY2lmaWMgZml4dXBzICovCi0JcGNpYmlvc19maXh1cF9pcnFzKCk7CisJcGNpX2ZpeHVwX2lycXMoc2ltcGxlX3N3aXp6bGUsIHBjaWJpb3NfbWFwX3BsYXRmb3JtX2lycSk7CiAKIAlyZXR1cm4gMDsKIH0KLQogc3Vic3lzX2luaXRjYWxsKHBjaWJpb3NfaW5pdCk7CiAKKy8qCisgKiAgQ2FsbGVkIGFmdGVyIGVhY2ggYnVzIGlzIHByb2JlZCwgYnV0IGJlZm9yZSBpdHMgY2hpbGRyZW4KKyAqICBhcmUgZXhhbWluZWQuCisgKi8KK3ZvaWQgX19pbml0IHBjaWJpb3NfZml4dXBfYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKGJ1cyk7Cit9CisKIHZvaWQKIHBjaWJpb3NfdXBkYXRlX3Jlc291cmNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcm9vdCwKIAkJCXN0cnVjdCByZXNvdXJjZSAqcmVzLCBpbnQgcmVzb3VyY2UpCkBAIC02MSwxMyArOTEsMTcgQEAKIAkJbmV3IHw9IFBDSV9ST01fQUREUkVTU19FTkFCTEU7CiAJCXJlZyA9IGRldi0+cm9tX2Jhc2VfcmVnOwogCX0gZWxzZSB7Ci0JCS8qIFNvbWVib2R5IG1pZ2h0IGhhdmUgYXNrZWQgYWxsb2NhdGlvbiBvZiBhIG5vbi1zdGFuZGFyZCByZXNvdXJjZSAqLworCQkvKgorCQkgKiBTb21lYm9keSBtaWdodCBoYXZlIGFza2VkIGFsbG9jYXRpb24gb2YgYSBub24tc3RhbmRhcmQKKwkJICogcmVzb3VyY2UKKwkJICovCiAJCXJldHVybjsKIAl9Ci0JCisKIAlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcmVnLCBuZXcpOwogCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHJlZywgJmNoZWNrKTsKLQlpZiAoKG5ldyBeIGNoZWNrKSAmICgobmV3ICYgUENJX0JBU0VfQUREUkVTU19TUEFDRV9JTykgPyBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0sgOiBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLKSkgeworCWlmICgobmV3IF4gY2hlY2spICYgKChuZXcgJiBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX0lPKSA/CisJCVBDSV9CQVNFX0FERFJFU1NfSU9fTUFTSyA6IFBDSV9CQVNFX0FERFJFU1NfTUVNX01BU0spKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUENJOiBFcnJvciB3aGlsZSB1cGRhdGluZyByZWdpb24gIgogCQkgICAgICAgIiVzLyVkICglMDh4ICE9ICUwOHgpXG4iLCBwY2lfbmFtZShkZXYpLCByZXNvdXJjZSwKIAkJICAgICAgIG5ldywgY2hlY2spOwpAQCAtMTQ1LDcgKzE3OSw4IEBACiAJCWxhdCA9IHBjaWJpb3NfbWF4X2xhdGVuY3k7CiAJZWxzZQogCQlyZXR1cm47Ci0JcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBTZXR0aW5nIGxhdGVuY3kgdGltZXIgb2YgZGV2aWNlICVzIHRvICVkXG4iLCBwY2lfbmFtZShkZXYpLCBsYXQpOworCXByaW50ayhLRVJOX0lORk8gIlBDSTogU2V0dGluZyBsYXRlbmN5IHRpbWVyIG9mIGRldmljZSAlcyB0byAlZFxuIiwKKwkgICAgICAgcGNpX25hbWUoZGV2KSwgbGF0KTsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgbGF0KTsKIH0KIApAQCAtMTUzLDMgKzE4OCwzOSBAQAogewogCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9JTlRFUlJVUFRfTElORSwgaXJxKTsKIH0KKwordm9pZCBfX2lvbWVtICpwY2lfaW9tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IGJhciwgdW5zaWduZWQgbG9uZyBtYXhsZW4pCit7CisJdW5zaWduZWQgbG9uZyBzdGFydCA9IHBjaV9yZXNvdXJjZV9zdGFydChkZXYsIGJhcik7CisJdW5zaWduZWQgbG9uZyBsZW4gPSBwY2lfcmVzb3VyY2VfbGVuKGRldiwgYmFyKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzID0gcGNpX3Jlc291cmNlX2ZsYWdzKGRldiwgYmFyKTsKKworCWlmICh1bmxpa2VseSghbGVuIHx8ICFzdGFydCkpCisJCXJldHVybiBOVUxMOworCWlmIChtYXhsZW4gJiYgbGVuID4gbWF4bGVuKQorCQlsZW4gPSBtYXhsZW47CisKKwkvKgorCSAqIFByZXNlbnRseSB0aGUgSU9SRVNPVVJDRV9NRU0gY2FzZSBpcyBhIGJpdCBzcGVjaWFsLCBtb3N0CisJICogU0g3NzUxIHN0eWxlIFBDSSBjb250cm9sbGVycyBoYXZlIFBDSSBtZW1vcnkgYXQgYSBmaXhlZAorCSAqIGxvY2F0aW9uIGluIHRoZSBhZGRyZXNzIHNwYWNlIHdoZXJlIG5vIHJlbWFwcGluZyBpcyBkZXNpcmVkCisJICogKHR5cGljYWxseSBhdCAweGZkMDAwMDAwLCBidXQgaXNfcGNpX21lbWFkZHIoKSB3aWxsIGtub3cKKwkgKiBiZXN0KS4gV2l0aCB0aGUgSU9SRVNPVVJDRV9NRU0gY2FzZSBtb3JlIGNhcmUgaGFzIHRvIGJlIHRha2VuCisJICogdG8gaW5oaWJpdCBwYWdlIHRhYmxlIG1hcHBpbmcgZm9yIGxlZ2FjeSBjb3JlcywgYnV0IHRoaXMgaXMKKwkgKiBwdW50ZWQgb2ZmIHRvIF9faW9yZW1hcCgpLgorCSAqCQkJCQktLSBQRk0uCisJICovCisJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9JTykKKwkJcmV0dXJuIGlvcG9ydF9tYXAoc3RhcnQsIGxlbik7CisJaWYgKGZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCisJCXJldHVybiBpb3JlbWFwKHN0YXJ0LCBsZW4pOworCisJcmV0dXJuIE5VTEw7Cit9CitFWFBPUlRfU1lNQk9MKHBjaV9pb21hcCk7CisKK3ZvaWQgcGNpX2lvdW5tYXAoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCBfX2lvbWVtICphZGRyKQoreworCWlvdW5tYXAoYWRkcik7Cit9CitFWFBPUlRfU1lNQk9MKHBjaV9pb3VubWFwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKaW5kZXggZjA1Y2Q5Ni4uNWRhODhhNCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvTWFrZWZpbGUKQEAgLTYsOSArNiwxMCBAQAogCiBvYmoteQk6PSBwcm9jZXNzLm8gc2lnbmFsLm8gZW50cnkubyB0cmFwcy5vIGlycS5vIFwKIAlwdHJhY2UubyBzZXR1cC5vIHRpbWUubyBzeXNfc2gubyBzZW1hcGhvcmUubyBcCi0JaW8ubyBpb19nZW5lcmljLm8gc2hfa3N5bXMubworCWlvLm8gaW9fZ2VuZXJpYy5vIHNoX2tzeW1zLm8gc3lzY2FsbHMubwogCiBvYmoteQkJCQkrPSBjcHUvIHRpbWVycy8KK29iai0kKENPTkZJR19WU1lTQ0FMTCkJCSs9IHZzeXNjYWxsLwogCiBvYmotJChDT05GSUdfU01QKQkJKz0gc21wLm8KIG9iai0kKENPTkZJR19DRl9FTkFCTEVSKQkrPSBjZi1lbmFibGVyLm8KQEAgLTE4LDMgKzE5LDUgQEAKIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlLm8KIG9iai0kKENPTkZJR19FQVJMWV9QUklOVEspCSs9IGVhcmx5X3ByaW50ay5vCiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjLm8gcmVsb2NhdGVfa2VybmVsLm8KK29iai0kKENPTkZJR19BUE0pCQkrPSBhcG0ubworb2JqLSQoQ09ORklHX1BNKQkJKz0gcG0ubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvYXBtLmMgYi9hcmNoL3NoL2tlcm5lbC9hcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzFlN2Q2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvYXBtLmMKQEAgLTAsMCArMSw1MzkgQEAKKy8qCisgKiBiaW9zLWxlc3MgQVBNIGRyaXZlciBmb3IgaHA2ODAKKyAqCisgKiBDb3B5cmlnaHQgMjAwNSAoYykgQW5kcml5IFNrdWx5c2ggPGFza3VseXNoQGdtYWlsLmNvbT4KKyAqCisgKiBiYXNlZCBvbiBBUk0gQVBNIGRyaXZlciBieQorICogIEphbWV5IEhpY2tzIDxqYW1leUBjcmwuZGVjLmNvbT4KKyAqCisgKiBhZGFwdGVkIGZyb20gdGhlIEFQTSBCSU9TIGRyaXZlciBmb3IgTGludXggYnkKKyAqICBTdGVwaGVuIFJvdGh3ZWxsIChzZnJAbGludXhjYXJlLmNvbSkKKyAqCisgKiBBUE0gMS4yIFJlZmVyZW5jZToKKyAqICAgSW50ZWwgQ29ycG9yYXRpb24sIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudAorICogICAoQVBNKSBCSU9TIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uLCBSZXZpc2lvbiAxLjIsIEZlYnJ1YXJ5IDE5OTYuCisgKgorICogW1RoaXMgZG9jdW1lbnQgaXMgYXZhaWxhYmxlIGZyb20gTWljcm9zb2Z0IGF0OgorICogICAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL2h3ZGV2L2J1c2Jpb3MvYW1wXzEyLmh0bV0KKyAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2FwbV9iaW9zLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9wbV9sZWdhY3kuaD4KKyNpbmNsdWRlIDxhc20vYXBtLmg+CisKKyNkZWZpbmUgTU9ETkFNRSAiYXBtIgorCisvKgorICogVGhlIGFwbV9iaW9zIGRldmljZSBpcyBvbmUgb2YgdGhlIG1pc2MgY2hhciBkZXZpY2VzLgorICogVGhpcyBpcyBpdHMgbWlub3IgbnVtYmVyLgorICovCisjZGVmaW5lIEFQTV9NSU5PUl9ERVYJCQkxMzQKKworLyoKKyAqIE1heGltdW0gbnVtYmVyIG9mIGV2ZW50cyBzdG9yZWQKKyAqLworI2RlZmluZSBBUE1fTUFYX0VWRU5UUwkJCTE2CisKK3N0cnVjdCBhcG1fcXVldWUgeworCXVuc2lnbmVkIGludAkJZXZlbnRfaGVhZDsKKwl1bnNpZ25lZCBpbnQJCWV2ZW50X3RhaWw7CisJYXBtX2V2ZW50X3QJCWV2ZW50c1tBUE1fTUFYX0VWRU5UU107Cit9OworCisvKgorICogVGhlIHBlci1maWxlIEFQTSBkYXRhCisgKi8KK3N0cnVjdCBhcG1fdXNlciB7CisJc3RydWN0IGxpc3RfaGVhZAlsaXN0OworCisJdW5zaWduZWQgaW50CQlzdXNlcjogMTsKKwl1bnNpZ25lZCBpbnQJCXdyaXRlcjogMTsKKwl1bnNpZ25lZCBpbnQJCXJlYWRlcjogMTsKKworCWludAkJCXN1c3BlbmRfcmVzdWx0OworCXVuc2lnbmVkIGludAkJc3VzcGVuZF9zdGF0ZTsKKyNkZWZpbmUgU1VTUEVORF9OT05FCTAJCS8qIG5vIHN1c3BlbmQgcGVuZGluZyAqLworI2RlZmluZSBTVVNQRU5EX1BFTkRJTkcJMQkJLyogc3VzcGVuZCBwZW5kaW5nIHJlYWQgKi8KKyNkZWZpbmUgU1VTUEVORF9SRUFECTIJCS8qIHN1c3BlbmQgcmVhZCwgcGVuZGluZyBhY2sgKi8KKyNkZWZpbmUgU1VTUEVORF9BQ0tFRAkzCQkvKiBzdXNwZW5kIGFja2VkICovCisjZGVmaW5lIFNVU1BFTkRfRE9ORQk0CQkvKiBzdXNwZW5kIGNvbXBsZXRlZCAqLworCisJc3RydWN0IGFwbV9xdWV1ZQlxdWV1ZTsKK307CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXMKKyAqLworc3RhdGljIGludCBzdXNwZW5kc19wZW5kaW5nOworCitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3dhaXRxdWV1ZSk7CitzdGF0aWMgREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlKTsKKworLyoKKyAqIFRoaXMgaXMgYSBsaXN0IG9mIGV2ZXJ5b25lIHdobyBoYXMgb3BlbmVkIC9kZXYvYXBtX2Jpb3MKKyAqLworc3RhdGljIERFQ0xBUkVfUldTRU0odXNlcl9saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChhcG1fdXNlcl9saXN0KTsKKworLyoKKyAqIGthcG1kIGluZm8uICBrYXBtZCBwcm92aWRlcyB1cyBhIHByb2Nlc3MgY29udGV4dCB0byBoYW5kbGUKKyAqICJBUE0iIGV2ZW50cyB3aXRoaW4gLSBzcGVjaWZpY2FsbHkgbmVjZXNzYXJ5IGlmIHdlJ3JlIGdvaW5nCisgKiB0byBiZSBzdXNwZW5kaW5nIHRoZSBzeXN0ZW0uCisgKi8KK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChrYXBtZF93YWl0KTsKK3N0YXRpYyBERUNMQVJFX0NPTVBMRVRJT04oa2FwbWRfZXhpdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGthcG1kX3F1ZXVlX2xvY2spOworc3RhdGljIHN0cnVjdCBhcG1fcXVldWUga2FwbWRfcXVldWU7CisKK2ludCBhcG1fc3VzcGVuZGVkOworRVhQT1JUX1NZTUJPTChhcG1fc3VzcGVuZGVkKTsKKworLyogUGxhdGZvcm0tc3BlY2lmaWMgYXBtX3JlYWRfcHJvYygpLiAqLworaW50ICgqYXBtX2dldF9pbmZvKShjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCk7CitFWFBPUlRfU1lNQk9MKGFwbV9nZXRfaW5mbyk7CisKKy8qCisgKiBBUE0gZXZlbnQgcXVldWUgbWFuYWdlbWVudC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcXVldWVfZW1wdHkoc3RydWN0IGFwbV9xdWV1ZSAqcSkKK3sKKwlyZXR1cm4gcS0+ZXZlbnRfaGVhZCA9PSBxLT5ldmVudF90YWlsOworfQorCitzdGF0aWMgaW5saW5lIGFwbV9ldmVudF90IHF1ZXVlX2dldF9ldmVudChzdHJ1Y3QgYXBtX3F1ZXVlICpxKQoreworCXEtPmV2ZW50X3RhaWwgPSAocS0+ZXZlbnRfdGFpbCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJcmV0dXJuIHEtPmV2ZW50c1txLT5ldmVudF90YWlsXTsKK30KKworc3RhdGljIHZvaWQgcXVldWVfYWRkX2V2ZW50KHN0cnVjdCBhcG1fcXVldWUgKnEsIGFwbV9ldmVudF90IGV2ZW50KQoreworCXEtPmV2ZW50X2hlYWQgPSAocS0+ZXZlbnRfaGVhZCArIDEpICUgQVBNX01BWF9FVkVOVFM7CisJaWYgKHEtPmV2ZW50X2hlYWQgPT0gcS0+ZXZlbnRfdGFpbCkgeworCQlzdGF0aWMgaW50IG5vdGlmaWVkOworCisJCWlmIChub3RpZmllZCsrID09IDApCisJCQlwcmludGsoS0VSTl9FUlIgImFwbTogYW4gZXZlbnQgcXVldWUgb3ZlcmZsb3dlZFxuIik7CisKKwkJcS0+ZXZlbnRfdGFpbCA9IChxLT5ldmVudF90YWlsICsgMSkgJSBBUE1fTUFYX0VWRU5UUzsKKwl9CisJcS0+ZXZlbnRzW3EtPmV2ZW50X2hlYWRdID0gZXZlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX2V2ZW50X29uZV91c2VyKHN0cnVjdCBhcG1fdXNlciAqYXMsIGFwbV9ldmVudF90IGV2ZW50KQoreworCWlmIChhcy0+c3VzZXIgJiYgYXMtPndyaXRlcikgeworCQlzd2l0Y2ggKGV2ZW50KSB7CisJCWNhc2UgQVBNX1NZU19TVVNQRU5EOgorCQljYXNlIEFQTV9VU0VSX1NVU1BFTkQ6CisJCQkvKgorCQkJICogSWYgdGhpcyB1c2VyIGFscmVhZHkgaGFzIGEgc3VzcGVuZCBwZW5kaW5nLAorCQkJICogZG9uJ3QgcXVldWUgYW5vdGhlciBvbmUuCisJCQkgKi8KKwkJCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSAhPSBTVVNQRU5EX05PTkUpCisJCQkJcmV0dXJuOworCisJCQlhcy0+c3VzcGVuZF9zdGF0ZSA9IFNVU1BFTkRfUEVORElORzsKKwkJCXN1c3BlbmRzX3BlbmRpbmcrKzsKKwkJCWJyZWFrOworCQl9CisJfQorCXF1ZXVlX2FkZF9ldmVudCgmYXMtPnF1ZXVlLCBldmVudCk7Cit9CisKK3N0YXRpYyB2b2lkIHF1ZXVlX2V2ZW50KGFwbV9ldmVudF90IGV2ZW50LCBzdHJ1Y3QgYXBtX3VzZXIgKnNlbmRlcikKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzOworCisJZG93bl9yZWFkKCZ1c2VyX2xpc3RfbG9jayk7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGFzLCAmYXBtX3VzZXJfbGlzdCwgbGlzdCkKKwkJaWYgKGFzICE9IHNlbmRlciAmJiBhcy0+cmVhZGVyKQorCQkJcXVldWVfZXZlbnRfb25lX3VzZXIoYXMsIGV2ZW50KTsKKworCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmFwbV93YWl0cXVldWUpOworfQorCisvKioKKyAqIGFwbV9xdWV1ZV9ldmVudCAtIHF1ZXVlIGFuIEFQTSBldmVudCBmb3Iga2FwbWQKKyAqIEBldmVudDogQVBNIGV2ZW50CisgKgorICogUXVldWUgYW4gQVBNIGV2ZW50IGZvciBrYXBtZCB0byBwcm9jZXNzIGFuZCB1bHRpbWF0ZWx5IHRha2UgdGhlCisgKiBhcHByb3ByaWF0ZSBhY3Rpb24uICBPbmx5IGEgc3Vic2V0IG9mIGV2ZW50cyBhcmUgaGFuZGxlZDoKKyAqICAgJUFQTV9MT1dfQkFUVEVSWQorICogICAlQVBNX1BPV0VSX1NUQVRVU19DSEFOR0UKKyAqICAgJUFQTV9VU0VSX1NVU1BFTkQKKyAqICAgJUFQTV9TWVNfU1VTUEVORAorICogICAlQVBNX0NSSVRJQ0FMX1NVU1BFTkQKKyAqLwordm9pZCBhcG1fcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQpCit7CisJc3Bpbl9sb2NrX2lycSgma2FwbWRfcXVldWVfbG9jayk7CisJcXVldWVfYWRkX2V2ZW50KCZrYXBtZF9xdWV1ZSwgZXZlbnQpOworCXNwaW5fdW5sb2NrX2lycSgma2FwbWRfcXVldWVfbG9jayk7CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmthcG1kX3dhaXQpOworfQorRVhQT1JUX1NZTUJPTChhcG1fcXVldWVfZXZlbnQpOworCitzdGF0aWMgdm9pZCBhcG1fc3VzcGVuZCh2b2lkKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXM7CisJaW50IGVycjsKKworCWFwbV9zdXNwZW5kZWQgPSAxOworCWVyciA9IHBtX3N1c3BlbmQoUE1fU1VTUEVORF9NRU0pOworCisJLyoKKwkgKiBBbnlvbmUgb24gdGhlIEFQTSBxdWV1ZXMgd2lsbCB0aGluayB3ZSdyZSBzdGlsbCBzdXNwZW5kZWQuCisJICogU2VuZCBhIG1lc3NhZ2Ugc28gZXZlcnlvbmUga25vd3Mgd2UncmUgbm93IGF3YWtlIGFnYWluLgorCSAqLworCXF1ZXVlX2V2ZW50KEFQTV9OT1JNQUxfUkVTVU1FLCBOVUxMKTsKKworCS8qCisJICogRmluYWxseSwgd2FrZSB1cCBhbnlvbmUgd2hvIGlzIHNsZWVwaW5nIG9uIHRoZSBzdXNwZW5kLgorCSAqLworCWRvd25fcmVhZCgmdXNlcl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoYXMsICZhcG1fdXNlcl9saXN0LCBsaXN0KSB7CisJCWFzLT5zdXNwZW5kX3Jlc3VsdCA9IGVycjsKKwkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX0RPTkU7CisJfQorCXVwX3JlYWQoJnVzZXJfbGlzdF9sb2NrKTsKKworCXdha2VfdXAoJmFwbV9zdXNwZW5kX3dhaXRxdWV1ZSk7CisJYXBtX3N1c3BlbmRlZCA9IDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFwbV9yZWFkKHN0cnVjdCBmaWxlICpmcCwgY2hhciBfX3VzZXIgKmJ1ZiwKKwkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmcC0+cHJpdmF0ZV9kYXRhOworCWFwbV9ldmVudF90IGV2ZW50OworCWludCBpID0gY291bnQsIHJldCA9IDA7CisKKwlpZiAoY291bnQgPCBzaXplb2YoYXBtX2V2ZW50X3QpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSAmJiBmcC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spCisJCXJldHVybiAtRUFHQUlOOworCisJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFwbV93YWl0cXVldWUsICFxdWV1ZV9lbXB0eSgmYXMtPnF1ZXVlKSk7CisKKwl3aGlsZSAoKGkgPj0gc2l6ZW9mKGV2ZW50KSkgJiYgIXF1ZXVlX2VtcHR5KCZhcy0+cXVldWUpKSB7CisJCWV2ZW50ID0gcXVldWVfZ2V0X2V2ZW50KCZhcy0+cXVldWUpOworCisJCXJldCA9IC1FRkFVTFQ7CisJCWlmIChjb3B5X3RvX3VzZXIoYnVmLCAmZXZlbnQsIHNpemVvZihldmVudCkpKQorCQkJYnJlYWs7CisKKwkJaWYgKGV2ZW50ID09IEFQTV9TWVNfU1VTUEVORCB8fCBldmVudCA9PSBBUE1fVVNFUl9TVVNQRU5EKQorCQkJYXMtPnN1c3BlbmRfc3RhdGUgPSBTVVNQRU5EX1JFQUQ7CisKKwkJYnVmICs9IHNpemVvZihldmVudCk7CisJCWkgLT0gc2l6ZW9mKGV2ZW50KTsKKwl9CisKKwlpZiAoaSA8IGNvdW50KQorCQlyZXQgPSBjb3VudCAtIGk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IGFwbV9wb2xsKHN0cnVjdCBmaWxlICpmcCwgcG9sbF90YWJsZSAqIHdhaXQpCit7CisJc3RydWN0IGFwbV91c2VyICphcyA9IGZwLT5wcml2YXRlX2RhdGE7CisKKwlwb2xsX3dhaXQoZnAsICZhcG1fd2FpdHF1ZXVlLCB3YWl0KTsKKwlyZXR1cm4gcXVldWVfZW1wdHkoJmFzLT5xdWV1ZSkgPyAwIDogUE9MTElOIHwgUE9MTFJETk9STTsKK30KKworLyoKKyAqIGFwbV9pb2N0bCAtIGhhbmRsZSBBUE0gaW9jdGwKKyAqCisgKiBBUE1fSU9DX1NVU1BFTkQKKyAqICAgVGhpcyBJT0NUTCBpcyBvdmVybG9hZGVkLCBhbmQgcGVyZm9ybXMgdHdvIGZ1bmN0aW9ucy4gIEl0IGlzIHVzZWQgdG86CisgKiAgICAgLSBpbml0aWF0ZSBhIHN1c3BlbmQKKyAqICAgICAtIGFja25vd2xlZGdlIGEgc3VzcGVuZCByZWFkIGZyb20gL2Rldi9hcG1fYmlvcy4KKyAqICAgT25seSB3aGVuIGV2ZXJ5b25lIHdobyBoYXMgb3BlbmVkIC9kZXYvYXBtX2Jpb3Mgd2l0aCB3cml0ZSBwZXJtaXNzaW9uCisgKiAgIGhhcyBhY2tub3dsZWRnZSBkb2VzIHRoZSBhY3R1YWwgc3VzcGVuZCBoYXBwZW4uCisgKi8KK3N0YXRpYyBpbnQKK2FwbV9pb2N0bChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKmZpbHAsIHVfaW50IGNtZCwgdV9sb25nIGFyZykKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGVyciA9IC1FSU5WQUw7CisKKwlpZiAoIWFzLT5zdXNlciB8fCAhYXMtPndyaXRlcikKKwkJcmV0dXJuIC1FUEVSTTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBBUE1fSU9DX1NVU1BFTkQ6CisJCWFzLT5zdXNwZW5kX3Jlc3VsdCA9IC1FSU5UUjsKKworCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9SRUFEKSB7CisJCQkvKgorCQkJICogSWYgd2UgcmVhZCBhIHN1c3BlbmQgY29tbWFuZCBmcm9tIC9kZXYvYXBtX2Jpb3MsCisJCQkgKiB0aGVuIHRoZSBjb3JyZXNwb25kaW5nIEFQTV9JT0NfU1VTUEVORCBpb2N0bCBpcworCQkJICogaW50ZXJwcmV0ZWQgYXMgYW4gYWNrbm93bGVkZ2UuCisJCQkgKi8KKwkJCWFzLT5zdXNwZW5kX3N0YXRlID0gU1VTUEVORF9BQ0tFRDsKKwkJCXN1c3BlbmRzX3BlbmRpbmctLTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBPdGhlcndpc2UgaXQgaXMgYSByZXF1ZXN0IHRvIHN1c3BlbmQgdGhlIHN5c3RlbS4KKwkJCSAqIFF1ZXVlIGFuIGV2ZW50IGZvciBhbGwgcmVhZGVycywgYW5kIGV4cGVjdCBhbgorCQkJICogYWNrbm93bGVkZ2UgZnJvbSBhbGwgd3JpdGVycyB3aG8gaGF2ZW4ndCBhbHJlYWR5CisJCQkgKiBhY2tub3dsZWRnZWQuCisJCQkgKi8KKwkJCXF1ZXVlX2V2ZW50KEFQTV9VU0VSX1NVU1BFTkQsIGFzKTsKKwkJfQorCisJCS8qCisJCSAqIElmIHRoZXJlIGFyZSBubyBmdXJ0aGVyIGFja25vd2xlZGdlcyByZXF1aXJlZCwgc3VzcGVuZAorCQkgKiB0aGUgc3lzdGVtLgorCQkgKi8KKwkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPT0gMCkKKwkJCWFwbV9zdXNwZW5kKCk7CisKKwkJLyoKKwkJICogV2FpdCBmb3IgdGhlIHN1c3BlbmQvcmVzdW1lIHRvIGNvbXBsZXRlLiAgSWYgdGhlcmUgYXJlCisJCSAqIHBlbmRpbmcgYWNrbm93bGVkZ2VzLCB3ZSB3YWl0IGhlcmUgZm9yIHRoZW0uCisJCSAqCisJCSAqIE5vdGUgdGhhdCB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBQTSBzdWJzeXN0ZW0gZG9lcworCQkgKiBub3Qga2ljayB1cyBvdXQgb2YgdGhlIHdhaXQgd2hlbiBpdCBzdXNwZW5kcyB0aGUgdGhyZWFkcy4KKwkJICovCisJCWZsYWdzID0gY3VycmVudC0+ZmxhZ3M7CisJCWN1cnJlbnQtPmZsYWdzIHw9IFBGX05PRlJFRVpFOworCisJCS8qCisJCSAqIE5vdGU6IGRvIG5vdCBhbGxvdyBhIHRocmVhZCB3aGljaCBpcyBhY2tpbmcgdGhlIHN1c3BlbmQKKwkJICogdG8gZXNjYXBlIHVudGlsIHRoZSByZXN1bWUgaXMgY29tcGxldGUuCisJCSAqLworCQlpZiAoYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9BQ0tFRCkKKwkJCXdhaXRfZXZlbnQoYXBtX3N1c3BlbmRfd2FpdHF1ZXVlLAorCQkJCQkgYXMtPnN1c3BlbmRfc3RhdGUgPT0gU1VTUEVORF9ET05FKTsKKwkJZWxzZQorCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGFwbV9zdXNwZW5kX3dhaXRxdWV1ZSwKKwkJCQkJIGFzLT5zdXNwZW5kX3N0YXRlID09IFNVU1BFTkRfRE9ORSk7CisKKwkJY3VycmVudC0+ZmxhZ3MgPSBmbGFnczsKKwkJZXJyID0gYXMtPnN1c3BlbmRfcmVzdWx0OworCQlhcy0+c3VzcGVuZF9zdGF0ZSA9IFNVU1BFTkRfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBhcG1fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBhcG1fdXNlciAqYXMgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJZmlscC0+cHJpdmF0ZV9kYXRhID0gTlVMTDsKKworCWRvd25fd3JpdGUoJnVzZXJfbGlzdF9sb2NrKTsKKwlsaXN0X2RlbCgmYXMtPmxpc3QpOworCXVwX3dyaXRlKCZ1c2VyX2xpc3RfbG9jayk7CisKKwkvKgorCSAqIFdlIGFyZSBub3cgdW5ob29rZWQgZnJvbSB0aGUgY2hhaW4uICBBcyBmYXIgYXMgbmV3CisJICogZXZlbnRzIGFyZSBjb25jZXJuZWQsIHdlIG5vIGxvbmdlciBleGlzdC4gIEhvd2V2ZXIsIHdlCisJICogbmVlZCB0byBiYWxhbmNlIHN1c3BlbmRzX3BlbmRpbmcsIHdoaWNoIG1lYW5zIHRoZQorCSAqIHBvc3NpYmlsaXR5IG9mIHNsZWVwaW5nLgorCSAqLworCWlmIChhcy0+c3VzcGVuZF9zdGF0ZSAhPSBTVVNQRU5EX05PTkUpIHsKKwkJc3VzcGVuZHNfcGVuZGluZyAtPSAxOworCQlpZiAoc3VzcGVuZHNfcGVuZGluZyA9PSAwKQorCQkJYXBtX3N1c3BlbmQoKTsKKwl9CisKKwlrZnJlZShhcyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXBtX29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlzdHJ1Y3QgYXBtX3VzZXIgKmFzOworCisJYXMgPSBremFsbG9jKHNpemVvZigqYXMpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYXMpIHsKKwkJLyoKKwkJICogWFhYIC0gdGhpcyBpcyBhIHRpbnkgYml0IGJyb2tlbiwgd2hlbiB3ZSBjb25zaWRlciBCU0QKKwkJICogcHJvY2VzcyBhY2NvdW50aW5nLiBJZiB0aGUgZGV2aWNlIGlzIG9wZW5lZCBieSByb290LCB3ZQorCQkgKiBpbnN0YW50bHkgZmxhZyB0aGF0IHdlIHVzZWQgc3VwZXJ1c2VyIHByaXZzLiBXaG8ga25vd3MsCisJCSAqIHdlIG1pZ2h0IGNsb3NlIHRoZSBkZXZpY2UgaW1tZWRpYXRlbHkgd2l0aG91dCBkb2luZyBhCisJCSAqIHByaXZpbGVnZWQgb3BlcmF0aW9uIC0tIGNldmFucworCQkgKi8KKwkJYXMtPnN1c2VyID0gY2FwYWJsZShDQVBfU1lTX0FETUlOKTsKKwkJYXMtPndyaXRlciA9IChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgPT0gRk1PREVfV1JJVEU7CisJCWFzLT5yZWFkZXIgPSAoZmlscC0+Zl9tb2RlICYgRk1PREVfUkVBRCkgPT0gRk1PREVfUkVBRDsKKworCQlkb3duX3dyaXRlKCZ1c2VyX2xpc3RfbG9jayk7CisJCWxpc3RfYWRkKCZhcy0+bGlzdCwgJmFwbV91c2VyX2xpc3QpOworCQl1cF93cml0ZSgmdXNlcl9saXN0X2xvY2spOworCisJCWZpbHAtPnByaXZhdGVfZGF0YSA9IGFzOworCX0KKworCXJldHVybiBhcyA/IDAgOiAtRU5PTUVNOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBhcG1fYmlvc19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkucmVhZAkJPSBhcG1fcmVhZCwKKwkucG9sbAkJPSBhcG1fcG9sbCwKKwkuaW9jdGwJCT0gYXBtX2lvY3RsLAorCS5vcGVuCQk9IGFwbV9vcGVuLAorCS5yZWxlYXNlCT0gYXBtX3JlbGVhc2UsCit9OworCitzdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgYXBtX2RldmljZSA9IHsKKwkubWlub3IJCT0gQVBNX01JTk9SX0RFViwKKwkubmFtZQkJPSAiYXBtX2Jpb3MiLAorCS5mb3BzCQk9ICZhcG1fYmlvc19mb3BzCit9OworCisKKyNpZmRlZiBDT05GSUdfUFJPQ19GUworLyoKKyAqIEFyZ3VtZW50cywgd2l0aCBzeW1ib2xzIGZyb20gbGludXgvYXBtX2Jpb3MuaC4KKyAqCisgKiAgIDApIExpbnV4IGRyaXZlciB2ZXJzaW9uICh0aGlzIHdpbGwgY2hhbmdlIGlmIGZvcm1hdCBjaGFuZ2VzKQorICogICAxKSBBUE0gQklPUyBWZXJzaW9uLiAgVXN1YWxseSAxLjAsIDEuMSBvciAxLjIuCisgKiAgIDIpIEFQTSBmbGFncyBmcm9tIEFQTSBJbnN0YWxsYXRpb24gQ2hlY2sgKDB4MDApOgorICoJYml0IDA6IEFQTV8xNl9CSVRfU1VQUE9SVAorICoJYml0IDE6IEFQTV8zMl9CSVRfU1VQUE9SVAorICoJYml0IDI6IEFQTV9JRExFX1NMT1dTX0NMT0NLCisgKgliaXQgMzogQVBNX0JJT1NfRElTQUJMRUQKKyAqCWJpdCA0OiBBUE1fQklPU19ESVNFTkdBR0VECisgKiAgIDMpIEFDIGxpbmUgc3RhdHVzCisgKgkweDAwOiBPZmYtbGluZQorICoJMHgwMTogT24tbGluZQorICoJMHgwMjogT24gYmFja3VwIHBvd2VyIChCSU9TID49IDEuMSBvbmx5KQorICoJMHhmZjogVW5rbm93bgorICogICA0KSBCYXR0ZXJ5IHN0YXR1cworICoJMHgwMDogSGlnaAorICoJMHgwMTogTG93CisgKgkweDAyOiBDcml0aWNhbAorICoJMHgwMzogQ2hhcmdpbmcKKyAqCTB4MDQ6IFNlbGVjdGVkIGJhdHRlcnkgbm90IHByZXNlbnQgKEJJT1MgPj0gMS4yIG9ubHkpCisgKgkweGZmOiBVbmtub3duCisgKiAgIDUpIEJhdHRlcnkgZmxhZworICoJYml0IDA6IEhpZ2gKKyAqCWJpdCAxOiBMb3cKKyAqCWJpdCAyOiBDcml0aWNhbAorICoJYml0IDM6IENoYXJnaW5nCisgKgliaXQgNzogTm8gc3lzdGVtIGJhdHRlcnkKKyAqCTB4ZmY6IFVua25vd24KKyAqICAgNikgUmVtYWluaW5nIGJhdHRlcnkgbGlmZSAocGVyY2VudGFnZSBvZiBjaGFyZ2UpOgorICoJMC0xMDA6IHZhbGlkCisgKgktMTogVW5rbm93bgorICogICA3KSBSZW1haW5pbmcgYmF0dGVyeSBsaWZlICh0aW1lIHVuaXRzKToKKyAqCU51bWJlciBvZiByZW1haW5pbmcgbWludXRlcyBvciBzZWNvbmRzCisgKgktMTogVW5rbm93bgorICogICA4KSBtaW4gPSBtaW51dGVzOyBzZWMgPSBzZWNvbmRzCisgKi8KK3N0YXRpYyBpbnQgYXBtX3JlYWRfcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3QgZnBvcywgaW50IGxlbmd0aCkKK3sKKwlpZiAobGlrZWx5KGFwbV9nZXRfaW5mbykpCisJCXJldHVybiBhcG1fZ2V0X2luZm8oYnVmLCBzdGFydCwgZnBvcywgbGVuZ3RoKTsKKworCXJldHVybiAtRUlOVkFMOworfQorI2VuZGlmCisKK3N0YXRpYyBpbnQga2FwbWQodm9pZCAqYXJnKQoreworCWRhZW1vbml6ZSgia2FwbWQiKTsKKwljdXJyZW50LT5mbGFncyB8PSBQRl9OT0ZSRUVaRTsKKworCWRvIHsKKwkJYXBtX2V2ZW50X3QgZXZlbnQ7CisKKwkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGthcG1kX3dhaXQsCisJCQkJIXF1ZXVlX2VtcHR5KCZrYXBtZF9xdWV1ZSkgfHwgIXBtX2FjdGl2ZSk7CisKKwkJaWYgKCFwbV9hY3RpdmUpCisJCQlicmVhazsKKworCQlzcGluX2xvY2tfaXJxKCZrYXBtZF9xdWV1ZV9sb2NrKTsKKwkJZXZlbnQgPSAwOworCQlpZiAoIXF1ZXVlX2VtcHR5KCZrYXBtZF9xdWV1ZSkpCisJCQlldmVudCA9IHF1ZXVlX2dldF9ldmVudCgma2FwbWRfcXVldWUpOworCQlzcGluX3VubG9ja19pcnEoJmthcG1kX3F1ZXVlX2xvY2spOworCisJCXN3aXRjaCAoZXZlbnQpIHsKKwkJY2FzZSAwOgorCQkJYnJlYWs7CisKKwkJY2FzZSBBUE1fTE9XX0JBVFRFUlk6CisJCWNhc2UgQVBNX1BPV0VSX1NUQVRVU19DSEFOR0U6CisJCQlxdWV1ZV9ldmVudChldmVudCwgTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlIEFQTV9VU0VSX1NVU1BFTkQ6CisJCWNhc2UgQVBNX1NZU19TVVNQRU5EOgorCQkJcXVldWVfZXZlbnQoZXZlbnQsIE5VTEwpOworCQkJaWYgKHN1c3BlbmRzX3BlbmRpbmcgPT0gMCkKKwkJCQlhcG1fc3VzcGVuZCgpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBUE1fQ1JJVElDQUxfU1VTUEVORDoKKwkJCWFwbV9zdXNwZW5kKCk7CisJCQlicmVhazsKKwkJfQorCX0gd2hpbGUgKDEpOworCisJY29tcGxldGVfYW5kX2V4aXQoJmthcG1kX2V4aXQsIDApOworfQorCitzdGF0aWMgaW50IF9faW5pdCBhcG1faW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwbV9hY3RpdmUgPSAxOworCisJcmV0ID0ga2VybmVsX3RocmVhZChrYXBtZCwgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkocmV0IDwgMCkpIHsKKwkJcG1fYWN0aXZlID0gMDsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwljcmVhdGVfcHJvY19pbmZvX2VudHJ5KCJhcG0iLCAwLCBOVUxMLCBhcG1fcmVhZF9wcm9jKTsKKworCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmFwbV9kZXZpY2UpOworCWlmICh1bmxpa2VseShyZXQgIT0gMCkpIHsKKwkJcmVtb3ZlX3Byb2NfZW50cnkoImFwbSIsIE5VTEwpOworCisJCXBtX2FjdGl2ZSA9IDA7CisJCXdha2VfdXAoJmthcG1kX3dhaXQpOworCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZrYXBtZF9leGl0KTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgYXBtX2V4aXQodm9pZCkKK3sKKwltaXNjX2RlcmVnaXN0ZXIoJmFwbV9kZXZpY2UpOworCXJlbW92ZV9wcm9jX2VudHJ5KCJhcG0iLCBOVUxMKTsKKworCXBtX2FjdGl2ZSA9IDA7CisJd2FrZV91cCgma2FwbWRfd2FpdCk7CisJd2FpdF9mb3JfY29tcGxldGlvbigma2FwbWRfZXhpdCk7Cit9CisKK21vZHVsZV9pbml0KGFwbV9pbml0KTsKK21vZHVsZV9leGl0KGFwbV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiU3RlcGhlbiBSb3Rod2VsbCwgQW5kcml5IFNrdWx5c2giKTsKK01PRFVMRV9ERVNDUklQVElPTigiQWR2YW5jZWQgUG93ZXIgTWFuYWdlbWVudCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jIGIvYXJjaC9zaC9rZXJuZWwvY2YtZW5hYmxlci5jCmluZGV4IGYxZjlhYjguLjNlNWZhMWUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NmLWVuYWJsZXIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jZi1lbmFibGVyLmMKQEAgLTEwLDcgKzEwLDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogCkBAIC0zMiw4ICszMyw2IEBACiAvKiBTSDQgY2FuJ3QgYWNjZXNzIFBDTUNJQSBpbnRlcmZhY2UgdGhyb3VnaCBQMiBhcmVhLgogICogd2UgbXVzdCByZW1hcCBpdCB3aXRoIGFwcHJvcHJlYXRlIGF0dHJpYnV0ZSBiaXQgb2YgdGhlIHBhZ2Ugc2V0LgogICogdGhpcyBwYXJ0IGlzIGJhc2VkIG9uIEdyZWcgQmFua3MnIGhkNjQ0NjVfc3MuYyBpbXBsZW1lbnRhdGlvbiAtIE1hc2FoaXJvIEFiZSAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ0ZfQVJFQTYpCiAjZGVmaW5lIHNsb3Rfbm8gMApAQCAtNDEsOSArNDAsNiBAQAogI2RlZmluZSBzbG90X25vIDEKICNlbmRpZgogCi0vKiBkZWZpbmVkIGluIG1tL2lvcmVtYXAuYyAqLwotZXh0ZXJuIHZvaWQgKiBwM19pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwotCiAvKiB1c2UgdGhpcyBwb2ludGVyIHRvIGFjY2VzcyB0byBkaXJlY3RseSBjb25uZWN0ZWQgY29tcGFjdCBmbGFzaCBpbyBhcmVhKi8KIHZvaWQgKmNmX2lvX2Jhc2U7CiAKQEAgLTYyLDcgKzU4LDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogLyoJcHJpbnRrKCJwM19pb3JlbWFwKHBhZGRyPTB4JTA4bHgsIHBzaXplPTB4JTA4bHgsIHByb3Q9MHglMDhseCk9MHglMDhseFxuIiwKLQkgICAgCXBhZGRyYmFzZSwgcHNpemUsIHByb3QucGdwcm90LCBjZl9pb19iYXNlKTsqLworCQlwYWRkcmJhc2UsIHBzaXplLCBwcm90LnBncHJvdCwgY2ZfaW9fYmFzZSk7Ki8KIAogCS8qIFhYWCA6IGRvIHdlIG5lZWQgYXR0cmlidXRlIGFuZCBjb21tb24tbWVtb3J5IGFyZWEgYWxzbz8gKi8KIApAQCAtODcsNyArODMsNyBAQAogfQogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfU09MVVRJT05fRU5HSU5FKQotI2luY2x1ZGUgPGFzbS9zZS9zZS5oPgorI2luY2x1ZGUgPGFzbS9zZS5oPgogCiAvKgogICogU29sdXRpb25FbmdpbmUKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZSBiL2FyY2gvc2gva2VybmVsL2NwdS9NYWtlZmlsZQppbmRleCA1OWQ1Yjc0Li5mYjVkYWMwIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L01ha2VmaWxlCkBAIC04LDYgKzgsNSBAQAogb2JqLSQoQ09ORklHX0NQVV9TSDMpCQkrPSBzaDMvCiBvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHNoNC8KIAotb2JqLSQoQ09ORklHX1NIX1JUQykJCSs9IHJ0Yy5vCiBvYmotJChDT05GSUdfVUJDX1dBS0VVUCkJKz0gdWJjLm8KIG9iai0kKENPTkZJR19TSF9BREMpCQkrPSBhZGMubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2Nsb2NrLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwppbmRleCA5N2ZhMzdmLi41MWVjNjRjIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBhcmNoL3NoL2tlcm5lbC9jcHUvY2xvY2suYyAtIFN1cGVySCBjbG9jayBmcmFtZXdvcmsKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2ICBQYXVsIE11bmR0CiAgKgogICogVGhpcyBjbG9jayBmcmFtZXdvcmsgaXMgZGVyaXZlZCBmcm9tIHRoZSBPTUFQIHZlcnNpb24gYnk6CiAgKgpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KQEAgLTI0LDcgKzI1LDcgQEAKIAogc3RhdGljIExJU1RfSEVBRChjbG9ja19saXN0KTsKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY2xvY2tfbG9jayk7Ci1zdGF0aWMgREVDTEFSRV9NVVRFWChjbG9ja19saXN0X3NlbSk7CitzdGF0aWMgREVGSU5FX01VVEVYKGNsb2NrX2xpc3Rfc2VtKTsKIAogLyoKICAqIEVhY2ggc3VidHlwZSBpcyBleHBlY3RlZCB0byBkZWZpbmUgdGhlIGluaXQgcm91dGluZXMgZm9yIHRoZXNlIGNsb2NrcywKQEAgLTE0MCwyMSArMTQxLDIxIEBACiAKIGludCBjbGtfcmVnaXN0ZXIoc3RydWN0IGNsayAqY2xrKQogewotCWRvd24oJmNsb2NrX2xpc3Rfc2VtKTsKKwltdXRleF9sb2NrKCZjbG9ja19saXN0X3NlbSk7CiAKIAlsaXN0X2FkZCgmY2xrLT5ub2RlLCAmY2xvY2tfbGlzdCk7CiAJa3JlZl9pbml0KCZjbGstPmtyZWYpOwogCi0JdXAoJmNsb2NrX2xpc3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmNsb2NrX2xpc3Rfc2VtKTsKIAogCXJldHVybiAwOwogfQogCiB2b2lkIGNsa191bnJlZ2lzdGVyKHN0cnVjdCBjbGsgKmNsaykKIHsKLQlkb3duKCZjbG9ja19saXN0X3NlbSk7CisJbXV0ZXhfbG9jaygmY2xvY2tfbGlzdF9zZW0pOwogCWxpc3RfZGVsKCZjbGstPm5vZGUpOwotCXVwKCZjbG9ja19saXN0X3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZjbG9ja19saXN0X3NlbSk7CiB9CiAKIGlubGluZSB1bnNpZ25lZCBsb25nIGNsa19nZXRfcmF0ZShzdHJ1Y3QgY2xrICpjbGspCkBAIC0xOTgsMTQgKzE5OSwxNCBAQAogewogCXN0cnVjdCBjbGsgKnAsICpjbGsgPSBFUlJfUFRSKC1FTk9FTlQpOwogCi0JZG93bigmY2xvY2tfbGlzdF9zZW0pOworCW11dGV4X2xvY2soJmNsb2NrX2xpc3Rfc2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZjbG9ja19saXN0LCBub2RlKSB7CiAJCWlmIChzdHJjbXAoaWQsIHAtPm5hbWUpID09IDAgJiYgdHJ5X21vZHVsZV9nZXQocC0+b3duZXIpKSB7CiAJCQljbGsgPSBwOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JdXAoJmNsb2NrX2xpc3Rfc2VtKTsKKwltdXRleF91bmxvY2soJmNsb2NrX2xpc3Rfc2VtKTsKIAogCXJldHVybiBjbGs7CiB9CkBAIC0yMjUsNyArMjI2LDcgQEAKIHsKIAlpbnQgaSwgcmV0ID0gMDsKIAotCUJVR19PTih1bmxpa2VseSghbWFzdGVyX2Nsay5yYXRlKSk7CisJQlVHX09OKCFtYXN0ZXJfY2xrLnJhdGUpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob25jaGlwX2Nsb2Nrcyk7IGkrKykgewogCQlzdHJ1Y3QgY2xrICpjbGsgPSBvbmNoaXBfY2xvY2tzW2ldOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pbml0LmMKaW5kZXggODY4ZTY4Yi4uYmZiOTBlYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L2luaXQuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaW5pdC5jCkBAIC00LDYgKzQsNyBAQAogICogQ1BVIGluaXQgY29kZQogICoKICAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMyAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAzICBSaWNoYXJkIEN1cm5vdwogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC0xMyw2ICsxNCw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KQEAgLTUxLDcgKzUzLDE1IEBACiAJY2NyID0gY3RybF9pbmwoQ0NSKTsKIAogCS8qCi0JICogSWYgdGhlIGNhY2hlIGlzIGFscmVhZHkgZW5hYmxlZCAuLiBmbHVzaCBpdC4KKwkgKiBBdCB0aGlzIHBvaW50IHdlIGRvbid0IGtub3cgd2hldGhlciB0aGUgY2FjaGUgaXMgZW5hYmxlZCBvciBub3QgLSBhCisJICogYm9vdGxvYWRlciBtYXkgaGF2ZSBlbmFibGVkIGl0LiAgVGhlcmUgYXJlIGF0IGxlYXN0IDIgdGhpbmdzIHRoYXQKKwkgKiBjb3VsZCBiZSBkaXJ0eSBpbiB0aGUgY2FjaGUgYXQgdGhpcyBwb2ludDoKKwkgKiAxLiBrZXJuZWwgY29tbWFuZCBsaW5lIHNldCB1cCBieSBib290IGxvYWRlcgorCSAqIDIuIHNwaWxsZWQgcmVnaXN0ZXJzIGZyb20gdGhlIHByb2xvZyBvZiB0aGlzIGZ1bmN0aW9uCisJICogPT4gYmVmb3JlIHJlLWluaXRpYWxpc2luZyB0aGUgY2FjaGUsIHdlIG11c3QgZG8gYSBwdXJnZSBvZiB0aGUgd2hvbGUKKwkgKiBjYWNoZSBvdXQgdG8gbWVtb3J5IGZvciBzYWZldHkuICBBcyBsb25nIGFzIG5vdGhpbmcgaXMgc3BpbGxlZAorCSAqIGR1cmluZyB0aGUgbG9vcCB0byBsaW5lcyB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUsIHRoaXMgaXMgc2FmZS4KKwkgKiAtIFJQQwogCSAqLwogCWlmIChjY3IgJiBDQ1JfQ0FDSEVfRU5BQkxFKSB7CiAJCXVuc2lnbmVkIGxvbmcgd2F5cywgd2F5c2l6ZSwgYWRkcnN0YXJ0OwpAQCAtOTgsNiArMTA4LDggQEAKIAkvKiBGb3JjZSBFTU9ERSBpZiBwb3NzaWJsZSAqLwogCWlmIChjcHVfZGF0YS0+ZGNhY2hlLndheXMgPiAxKQogCQlmbGFncyB8PSBDQ1JfQ0FDSEVfRU1PREU7CisJZWxzZQorCQlmbGFncyAmPSB+Q0NSX0NBQ0hFX0VNT0RFOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0hfV1JJVEVUSFJPVUdICkBAIC0xMTIsNiArMTI0LDkgQEAKIAkvKiBUdXJuIG9uIE9DUkFNIC0tIGhhbHZlIHRoZSBPQyAqLwogCWZsYWdzIHw9IENDUl9DQUNIRV9PUkE7CiAJY3B1X2RhdGEtPmRjYWNoZS5zZXRzID4+PSAxOworCisJY3B1X2RhdGEtPmRjYWNoZS53YXlfc2l6ZSA9IGNwdV9kYXRhLT5kY2FjaGUuc2V0cyAqCisJCQkJICAgIGNwdV9kYXRhLT5kY2FjaGUubGluZXN6OwogI2VuZGlmCiAKIAljdHJsX291dGwoZmxhZ3MsIENDUik7CkBAIC0xODQsNiArMTk5LDEwIEBACiAJLyogSW5pdCB0aGUgY2FjaGUgKi8KIAljYWNoZV9pbml0KCk7CiAKKwlzaG1fYWxpZ25fbWFzayA9IG1heF90KHVuc2lnbmVkIGxvbmcsCisJCQkgICAgICAgY3B1X2RhdGEtPmRjYWNoZS53YXlfc2l6ZSAtIDEsCisJCQkgICAgICAgUEFHRV9TSVpFIC0gMSk7CisKIAkvKiBEaXNhYmxlIHRoZSBGUFUgKi8KIAlpZiAoZnB1X2Rpc2FibGVkKSB7CiAJCXByaW50aygiRlBVIERpc2FibGVkXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL01ha2VmaWxlCmluZGV4IGUzY2NjZWEuLjFjMDM0YzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9NYWtlZmlsZQpAQCAtMyw1ICszLDYgQEAKICMKIG9iai15CSs9IGlwci5vIGltYXNrLm8KIAotb2JqLSQoQ09ORklHX0NQVV9IQVNfUElOVF9JUlEpCSs9IHBpbnQubwotb2JqLSQoQ09ORklHX0NQVV9IQVNfSU5UQzJfSVJRKQkrPSBpbnRjMi5vCitvYmotJChDT05GSUdfQ1BVX0hBU19QSU5UX0lSUSkJCSs9IHBpbnQubworb2JqLSQoQ09ORklHX0NQVV9IQVNfTUFTS1JFR19JUlEpCSs9IG1hc2tyZWcubworb2JqLSQoQ09ORklHX0NQVV9IQVNfSU5UQzJfSVJRKQkJKz0gaW50YzIubwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pbnRjMi5jCmluZGV4IDMwMDY0YmYuLmUzMGU0YjcgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaW50YzIuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2ludGMyLmMKQEAgLTI0MSw5ICsyNDEsOSBAQAogCS8qIDExMC0xMTEgcmVzZXJ2ZWQvdW51c2VkICovCiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAJeyBUSU1FUl9JUlEsIDAsIDI0LCAwLCBJTlRDX1RNVTBfTVNLLCAyfSwKLSNpZmRlZiBDT05GSUdfU0hfUlRDCi0JeyBSVENfSVJRLCA0LCAwLCAwLCBJTlRDX1JUQ19NU0ssIFRJTUVSX1BSSU9SSVRZIH0sCi0jZW5kaWYKKwl7IDIxLCAxLCAwLCAwLCBJTlRDX1JUQ19NU0ssIFRJTUVSX1BSSU9SSVRZIH0sCisJeyAyMiwgMSwgMSwgMCwgSU5UQ19SVENfTVNLLCBUSU1FUl9QUklPUklUWSB9LAorCXsgMjMsIDEsIDIsIDAsIElOVENfUlRDX01TSywgVElNRVJfUFJJT1JJVFkgfSwKIAl7IFNDSUYwX0VSSV9JUlEsIDgsIDI0LCAwLCBJTlRDX1NDSUYwX01TSywgU0NJRjBfUFJJT1JJVFkgfSwKIAl7IFNDSUYwX1JYSV9JUlEsIDgsIDI0LCAwLCBJTlRDX1NDSUYwX01TSywgU0NJRjBfUFJJT1JJVFkgfSwKIAl7IFNDSUYwX0JSSV9JUlEsIDgsIDI0LCAwLCBJTlRDX1NDSUYwX01TSywgU0NJRjBfUFJJT1JJVFkgfSwKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL2lwci5jCmluZGV4IDBmNTQ1OTQuLmY3ODU4MjIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvaXByLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9pcHIuYwpAQCAtNTcsMzEgKzU3LDI3IEBACiAKIHN0YXRpYyB2b2lkIGRpc2FibGVfaXByX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAl1bnNpZ25lZCBpbnQgYWRkciA9IGlwcl9kYXRhW2lycV0uYWRkcjsKIAl1bnNpZ25lZCBzaG9ydCBtYXNrID0gMHhmZmZmIF4gKDB4MGYgPDwgaXByX2RhdGFbaXJxXS5zaGlmdCk7CiAKIAkvKiBTZXQgdGhlIHByaW9yaXR5IGluIElQUiB0byAwICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXZhbCA9IGN0cmxfaW53KGFkZHIpOwogCXZhbCAmPSBtYXNrOwogCWN0cmxfb3V0dyh2YWwsIGFkZHIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2lwcl9pcnEodW5zaWduZWQgaW50IGlycSkKIHsKLQl1bnNpZ25lZCBsb25nIHZhbCwgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyB2YWw7CiAJdW5zaWduZWQgaW50IGFkZHIgPSBpcHJfZGF0YVtpcnFdLmFkZHI7CiAJaW50IHByaW9yaXR5ID0gaXByX2RhdGFbaXJxXS5wcmlvcml0eTsKIAl1bnNpZ25lZCBzaG9ydCB2YWx1ZSA9IChwcmlvcml0eSA8PCBpcHJfZGF0YVtpcnFdLnNoaWZ0KTsKIAogCS8qIFNldCBwcmlvcml0eSBpbiBJUFIgYmFjayB0byBvcmlnaW5hbCB2YWx1ZSAqLwotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl2YWwgPSBjdHJsX2ludyhhZGRyKTsKIAl2YWwgfD0gdmFsdWU7CiAJY3RybF9vdXR3KHZhbCwgYWRkcik7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBtYXNrX2FuZF9hY2tfaXByKHVuc2lnbmVkIGludCBpcnEpCkBAIC04OSw2ICs4NSw3IEBACiAJZGlzYWJsZV9pcHJfaXJxKGlycSk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikgfHwgXAogICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQogCS8qIFRoaXMgaXMgbmVlZGVkIHdoZW4gd2UgdXNlIGVkZ2UgdHJpZ2dlcmVkIHNldHRpbmcgKi8KIAkvKiBYWFg6IElzIGl0IHJlYWxseSBuZWVkZWQ/ICovCkBAIC0xMjMsNyArMTIwLDcgQEAKICNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAogCW1ha2VfaXByX2lycShUSU1FUl9JUlEsIFRJTUVSX0lQUl9BRERSLCBUSU1FUl9JUFJfUE9TLCBUSU1FUl9QUklPUklUWSk7CiAJbWFrZV9pcHJfaXJxKFRJTUVSMV9JUlEsIFRJTUVSMV9JUFJfQUREUiwgVElNRVIxX0lQUl9QT1MsIFRJTUVSMV9QUklPUklUWSk7Ci0jaWYgZGVmaW5lZChDT05GSUdfU0hfUlRDKQorI2lmZGVmIFJUQ19JUlEKIAltYWtlX2lwcl9pcnEoUlRDX0lSUSwgUlRDX0lQUl9BRERSLCBSVENfSVBSX1BPUywgUlRDX1BSSU9SSVRZKTsKICNlbmRpZgogCkBAIC0xNjIsNiArMTU5LDcgQEAKICNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKIAkvKgogCSAqIEluaXRpYWxpemUgdGhlIEludGVycnVwdCBDb250cm9sbGVyIChJTlRDKQpAQCAtMTkyLDYgKzE5MCw4IEBACiAJLyogUGVyZm9ybSB0aGUgbWFjaGluZSBzcGVjaWZpYyBpbml0aWFsaXNhdGlvbiAqLwogCWlmIChzaF9tdi5tdl9pbml0X2lycSAhPSBOVUxMKQogCQlzaF9tdi5tdl9pbml0X2lycSgpOworCisJaXJxX2N0eF9pbml0KHNtcF9wcm9jZXNzb3JfaWQoKSk7CiB9CiAKICNpZiAhZGVmaW5lZChDT05GSUdfQ1BVX0hBU19QSU5UX0lSUSkKZGlmZiAtLWdpdCBhL2FyY2gvc2gvYm9hcmRzL2FkeC9pcnFfbWFza3JlZy5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L2lycS9tYXNrcmVnLmMKc2ltaWxhcml0eSBpbmRleCA2MyUKcmVuYW1lIGZyb20gYXJjaC9zaC9ib2FyZHMvYWR4L2lycV9tYXNrcmVnLmMKcmVuYW1lIHRvIGFyY2gvc2gva2VybmVsL2NwdS9pcnEvbWFza3JlZy5jCmluZGV4IDRiMmFiZTUuLjQ5MmRiMzEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL2FkeC9pcnFfbWFza3JlZy5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvbWFza3JlZy5jCkBAIC0xLDMwICsxLDIzIEBACiAvKgotICogbGludXgvYXJjaC9zaC9rZXJuZWwvaXJxX21hc2tyZWcuYworICogSW50ZXJydXB0IGhhbmRsaW5nIGZvciBTaW1wbGUgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKICAqCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEgQSZEIENvLiwgTHRkLiA8aHR0cDovL3d3dy5hYW5kZC5jby5qcD4KICAqCi0gKiBUaGlzIGZpbGUgbWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVQotICogR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIEludGVycnVwdCBoYW5kbGluZyBmb3IgU2ltcGxlIGV4dGVybmFsIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyCi0gKgogICogVGhpcyBpcyBmb3IgdGhlIG1hY2hpbmUgd2hpY2ggaGF2ZSBzaW5nbGUgMTYgYml0IHJlZ2lzdGVyCiAgKiBmb3IgbWFza2luZyBleHRlcm5hbCBJUlEgaW5kaXZpZHVhbGx5LgotICogRWFjaCBiaXQgb2YgdGhlIHJlZ2lzdGVyIGlzIGZvciBtYXNraW5nIGVhY2ggaW50ZXJydXB0LiAgCisgKiBFYWNoIGJpdCBvZiB0aGUgcmVnaXN0ZXIgaXMgZm9yIG1hc2tpbmcgZWFjaCBpbnRlcnJ1cHQuCisgKgorICogVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lycS5oPgotCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKLS8qIGFkZHJlc3Mgb2YgZXh0ZXJuYWwgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIKLSAqIGFkZHJlc3MgbXVzdCBiZSBzZXQgcHJpb3IgdG8gdXNlIHRoZXNlIChtYXliZSBpbiBpbml0X1hYWF9pcnEoKSkKLSAqIFhYWCA6IGlzIGl0IGJldHRlciB0byB1c2UgLmNvbmZpZyB0aGFuIHNwZWNpZnlpbmcgaXQgaW4gY29kZT8gKi8KLXVuc2lnbmVkIHNob3J0ICppcnFfbWFza19yZWdpc3RlciA9IDA7CisvKiBhZGRyZXNzIG9mIGV4dGVybmFsIGludGVycnVwdCBtYXNrIHJlZ2lzdGVyICovCit1bnNpZ25lZCBsb25nIGlycV9tYXNrX3JlZ2lzdGVyOwogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFza3JlZ19pcnEodW5zaWduZWQgaW50IGlycSk7CkBAIC0zNiw3ICsyOSw3IEBACiAKIC8qIGh3X2ludGVycnVwdF90eXBlICovCiBzdGF0aWMgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIG1hc2tyZWdfaXJxX3R5cGUgPSB7Ci0JLnR5cGVuYW1lID0gIiBNYXNrIFJlZ2lzdGVyIiwKKwkudHlwZW5hbWUgPSAiTWFzayBSZWdpc3RlciIsCiAJLnN0YXJ0dXAgPSBzdGFydHVwX21hc2tyZWdfaXJxLAogCS5zaHV0ZG93biA9IHNodXRkb3duX21hc2tyZWdfaXJxLAogCS5lbmFibGUgPSBlbmFibGVfbWFza3JlZ19pcnEsCkBAIC00Nyw3ICs0MCw3IEBACiAKIC8qIGFjdHVhbCBpbXBsZW1lbnRhdGluICovCiBzdGF0aWMgdW5zaWduZWQgaW50IHN0YXJ0dXBfbWFza3JlZ19pcnEodW5zaWduZWQgaW50IGlycSkKLXsgCit7CiAJZW5hYmxlX21hc2tyZWdfaXJxKGlycSk7CiAJcmV0dXJuIDA7IC8qIG5ldmVyIGFueXRoaW5nIHBlbmRpbmcgKi8KIH0KQEAgLTU5LDMyICs1MiwyNiBAQAogCiBzdGF0aWMgdm9pZCBkaXNhYmxlX21hc2tyZWdfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JaWYgKGlycV9tYXNrX3JlZ2lzdGVyKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCXVuc2lnbmVkIHNob3J0IHZhbCwgbWFzayA9IDB4MDEgPDwgaXJxOworCXVuc2lnbmVkIHNob3J0IHZhbCwgbWFzayA9IDB4MDEgPDwgaXJxOwogCi0JCS8qIFNldCAiaXJxInRoIGJpdCAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXZhbCA9IGN0cmxfaW53KCh1bnNpZ25lZCBsb25nKWlycV9tYXNrX3JlZ2lzdGVyKTsKLQkJdmFsIHw9IG1hc2s7Ci0JCWN0cmxfb3V0dyh2YWwsICh1bnNpZ25lZCBsb25nKWlycV9tYXNrX3JlZ2lzdGVyKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KKwlCVUdfT04oIWlycV9tYXNrX3JlZ2lzdGVyKTsKKworCS8qIFNldCAiaXJxInRoIGJpdCAqLworCXZhbCA9IGN0cmxfaW53KGlycV9tYXNrX3JlZ2lzdGVyKTsKKwl2YWwgfD0gbWFzazsKKwljdHJsX291dHcodmFsLCBpcnFfbWFza19yZWdpc3Rlcik7CiB9CiAKIHN0YXRpYyB2b2lkIGVuYWJsZV9tYXNrcmVnX2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlmIChpcnFfbWFza19yZWdpc3RlcikgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1bnNpZ25lZCBzaG9ydCB2YWwsIG1hc2sgPSB+KDB4MDEgPDwgaXJxKTsKKwl1bnNpZ25lZCBzaG9ydCB2YWwsIG1hc2sgPSB+KDB4MDEgPDwgaXJxKTsKIAotCQkvKiBDbGVhciAiaXJxInRoIGJpdCAqLwotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCXZhbCA9IGN0cmxfaW53KCh1bnNpZ25lZCBsb25nKWlycV9tYXNrX3JlZ2lzdGVyKTsKLQkJdmFsICY9IG1hc2s7Ci0JCWN0cmxfb3V0dyh2YWwsICh1bnNpZ25lZCBsb25nKWlycV9tYXNrX3JlZ2lzdGVyKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KKwlCVUdfT04oIWlycV9tYXNrX3JlZ2lzdGVyKTsKKworCS8qIENsZWFyICJpcnEidGggYml0ICovCisJdmFsID0gY3RybF9pbncoaXJxX21hc2tfcmVnaXN0ZXIpOworCXZhbCAmPSBtYXNrOworCWN0cmxfb3V0dyh2YWwsIGlycV9tYXNrX3JlZ2lzdGVyKTsKIH0KIAogc3RhdGljIHZvaWQgbWFza19hbmRfYWNrX21hc2tyZWcodW5zaWduZWQgaW50IGlycSkKQEAgLTEwMSw2ICs4OCw2IEBACiB2b2lkIG1ha2VfbWFza3JlZ19pcnEodW5zaWduZWQgaW50IGlycSkKIHsKIAlkaXNhYmxlX2lycV9ub3N5bmMoaXJxKTsKLQlpcnFfZGVzY1tpcnFdLmNoaXAgPSAmbWFza3JlZ19pcnFfdHlwZTsKKwlpcnFfZGVzY1tpcnFdLmhhbmRsZXIgPSAmbWFza3JlZ19pcnFfdHlwZTsKIAlkaXNhYmxlX21hc2tyZWdfaXJxKGlycSk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvaXJxL3BpbnQuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jCmluZGV4IDgwY2Q4MTAuLjE3ZjQ3YjMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9pcnEvcGludC5jCkBAIC00OCwyNiArNDgsMjIgQEAKIAogc3RhdGljIHZvaWQgZGlzYWJsZV9waW50X2lycSh1bnNpZ25lZCBpbnQgaXJxKQogewotCXVuc2lnbmVkIGxvbmcgdmFsLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHZhbDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl2YWwgPSBjdHJsX2ludyhJTlRDX0lOVEVSKTsKIAl2YWwgJj0gfigxIDw8IChpcnEgLSBQSU5UX0lSUV9CQVNFKSk7CiAJY3RybF9vdXR3KHZhbCwgSU5UQ19JTlRFUik7CS8qIGRpc2FibGUgUElOVG4gKi8KIAlwb3J0Y3JfbWFzayAmPSB+KDMgPDwgKGlycSAtIFBJTlRfSVJRX0JBU0UpKjIpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX3BpbnRfaXJxKHVuc2lnbmVkIGludCBpcnEpCiB7Ci0JdW5zaWduZWQgbG9uZyB2YWwsIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdmFsOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXZhbCA9IGN0cmxfaW53KElOVENfSU5URVIpOwogCXZhbCB8PSAxIDw8IChpcnEgLSBQSU5UX0lSUV9CQVNFKTsKIAljdHJsX291dHcodmFsLCBJTlRDX0lOVEVSKTsJLyogZW5hYmxlIFBJTlRuICovCiAJcG9ydGNyX21hc2sgfD0gMyA8PCAoaXJxIC0gUElOVF9JUlFfQkFTRSkqMjsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIG1hc2tfYW5kX2Fja19waW50KHVuc2lnbmVkIGludCBpcnEpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvcnRjLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvcnRjLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQzMDRjZjcuLjAwMDAwMDAKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3J0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsMTI4ICswLDAgQEAKLS8qCi0gKiBsaW51eC9hcmNoL3NoL2tlcm5lbC9ydGMuYyAtLSBTSDMgLyBTSDQgb24tY2hpcCBSVEMgc3VwcG9ydAotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgotICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQotICovCi0KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0jaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotCi12b2lkIHNoX3J0Y19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cykKLXsKLQl1bnNpZ25lZCBpbnQgc2VjMTI4LCBzZWMsIHNlYzIsIG1pbiwgaHIsIHdrLCBkYXksIG1vbiwgeXIsIHlyMTAwLCBjZl9iaXQ7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotIGFnYWluOgotCWRvIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQljdHJsX291dGIoMCwgUkNSMSk7ICAvKiBDbGVhciBDRi1iaXQgKi8KLQkJc2VjMTI4ID0gY3RybF9pbmIoUjY0Q05UKTsKLQkJc2VjID0gY3RybF9pbmIoUlNFQ0NOVCk7Ci0JCW1pbiA9IGN0cmxfaW5iKFJNSU5DTlQpOwotCQlociAgPSBjdHJsX2luYihSSFJDTlQpOwotCQl3ayAgPSBjdHJsX2luYihSV0tDTlQpOwotCQlkYXkgPSBjdHJsX2luYihSREFZQ05UKTsKLQkJbW9uID0gY3RybF9pbmIoUk1PTkNOVCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQkJeXIgID0gY3RybF9pbncoUllSQ05UKTsKLQkJeXIxMDAgPSAoeXIgPj4gOCk7Ci0JCXlyICY9IDB4ZmY7Ci0jZWxzZQotCQl5ciAgPSBjdHJsX2luYihSWVJDTlQpOwotCQl5cjEwMCA9ICh5ciA9PSAweDk5KSA/IDB4MTkgOiAweDIwOwotI2VuZGlmCi0JCXNlYzIgPSBjdHJsX2luYihSNjRDTlQpOwotCQljZl9iaXQgPSBjdHJsX2luYihSQ1IxKSAmIFJDUjFfQ0Y7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9IHdoaWxlIChjZl9iaXQgIT0gMCB8fCAoKHNlYzEyOCBeIHNlYzIpICYgUlRDX0JJVF9JTlZFUlRFRCkgIT0gMCk7Ci0KLQlCQ0RfVE9fQklOKHlyMTAwKTsKLQlCQ0RfVE9fQklOKHlyKTsKLQlCQ0RfVE9fQklOKG1vbik7Ci0JQkNEX1RPX0JJTihkYXkpOwotCUJDRF9UT19CSU4oaHIpOwotCUJDRF9UT19CSU4obWluKTsKLQlCQ0RfVE9fQklOKHNlYyk7Ci0KLQlpZiAoeXIgPiA5OSB8fCBtb24gPCAxIHx8IG1vbiA+IDEyIHx8IGRheSA+IDMxIHx8IGRheSA8IDEgfHwKLQkgICAgaHIgPiAyMyB8fCBtaW4gPiA1OSB8fCBzZWMgPiA1OSkgewotCQlwcmludGsoS0VSTl9FUlIKLQkJICAgICAgICJTSCBSVEM6IGludmFsaWQgdmFsdWUsIHJlc2V0dGluZyB0byAxIEphbiAyMDAwXG4iKTsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQljdHJsX291dGIoUkNSMl9SRVNFVCwgUkNSMik7ICAvKiBSZXNldCAmIFN0b3AgKi8KLQkJY3RybF9vdXRiKDAsIFJTRUNDTlQpOwotCQljdHJsX291dGIoMCwgUk1JTkNOVCk7Ci0JCWN0cmxfb3V0YigwLCBSSFJDTlQpOwotCQljdHJsX291dGIoNiwgUldLQ05UKTsKLQkJY3RybF9vdXRiKDEsIFJEQVlDTlQpOwotCQljdHJsX291dGIoMSwgUk1PTkNOVCk7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLQkJY3RybF9vdXR3KDB4MjAwMCwgUllSQ05UKTsKLSNlbHNlCi0JCWN0cmxfb3V0YigwLCBSWVJDTlQpOwotI2VuZGlmCi0JCWN0cmxfb3V0YihSQ1IyX1JUQ0VOfFJDUjJfU1RBUlQsIFJDUjIpOyAgLyogU3RhcnQgKi8KLQkJZ290byBhZ2FpbjsKLQl9Ci0KLSNpZiBSVENfQklUX0lOVkVSVEVEICE9IDAKLQlpZiAoKHNlYzEyOCAmIFJUQ19CSVRfSU5WRVJURUQpKQotCQlzZWMtLTsKLSNlbmRpZgotCi0JdHMtPnR2X3NlYyA9IG1rdGltZSh5cjEwMCAqIDEwMCArIHlyLCBtb24sIGRheSwgaHIsIG1pbiwgc2VjKTsKLQl0cy0+dHZfbnNlYyA9ICgoc2VjMTI4ICogMTAwMDAwMCkgLyAxMjgpICogMTAwMDsKLX0KLQotLyoKLSAqIENoYW5nZWQgdG8gb25seSBjYXJlIGFib3V0IHR2X3NlYywgYW5kIG5vdCB0aGUgZnVsbCB0aW1lc3BlYyBzdHJ1Y3QKLSAqIChpLmUuIHR2X25zZWMpLiAgSXQgY2FuIGVhc2lseSBiZSBzd2l0Y2hlZCB0byB0aW1lc3BlYyBmb3IgZnV0dXJlIGNwdXMKLSAqIHRoYXQgc3VwcG9ydCBzZXR0aW5nIHVzZWMgb3IgbnNlYyBSVEMgdmFsdWVzLgotICovCi1pbnQgc2hfcnRjX3NldHRpbWVvZmRheShjb25zdCB0aW1lX3Qgc2VjcykKLXsKLQlpbnQgcmV0dmFsID0gMDsKLQlpbnQgcmVhbF9zZWNvbmRzLCByZWFsX21pbnV0ZXMsIGNtb3NfbWludXRlczsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCWN0cmxfb3V0YihSQ1IyX1JFU0VULCBSQ1IyKTsgIC8qIFJlc2V0IHByZS1zY2FsZXIgJiBzdG9wIFJUQyAqLwotCi0JY21vc19taW51dGVzID0gY3RybF9pbmIoUk1JTkNOVCk7Ci0JQkNEX1RPX0JJTihjbW9zX21pbnV0ZXMpOwotCi0JLyoKLQkgKiBzaW5jZSB3ZSdyZSBvbmx5IGFkanVzdGluZyBtaW51dGVzIGFuZCBzZWNvbmRzLAotCSAqIGRvbid0IGludGVyZmVyZSB3aXRoIGhvdXIgb3ZlcmZsb3cuIFRoaXMgYXZvaWRzCi0JICogbWVzc2luZyB3aXRoIHVua25vd24gdGltZSB6b25lcyBidXQgcmVxdWlyZXMgeW91cgotCSAqIFJUQyBub3QgdG8gYmUgb2ZmIGJ5IG1vcmUgdGhhbiAxNSBtaW51dGVzCi0JICovCi0JcmVhbF9zZWNvbmRzID0gc2VjcyAlIDYwOwotCXJlYWxfbWludXRlcyA9IHNlY3MgLyA2MDsKLQlpZiAoKChhYnMocmVhbF9taW51dGVzIC0gY21vc19taW51dGVzKSArIDE1KS8zMCkgJiAxKQotCQlyZWFsX21pbnV0ZXMgKz0gMzA7CS8qIGNvcnJlY3QgZm9yIGhhbGYgaG91ciB0aW1lIHpvbmUgKi8KLQlyZWFsX21pbnV0ZXMgJT0gNjA7Ci0KLQlpZiAoYWJzKHJlYWxfbWludXRlcyAtIGNtb3NfbWludXRlcykgPCAzMCkgewotCQlCSU5fVE9fQkNEKHJlYWxfc2Vjb25kcyk7Ci0JCUJJTl9UT19CQ0QocmVhbF9taW51dGVzKTsKLQkJY3RybF9vdXRiKHJlYWxfc2Vjb25kcywgUlNFQ0NOVCk7Ci0JCWN0cmxfb3V0YihyZWFsX21pbnV0ZXMsIFJNSU5DTlQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJzZXRfcnRjX3RpbWU6IGNhbid0IHVwZGF0ZSBmcm9tICVkIHRvICVkXG4iLAotCQkgICAgICAgY21vc19taW51dGVzLCByZWFsX21pbnV0ZXMpOwotCQlyZXR2YWwgPSAtMTsKLQl9Ci0KLQljdHJsX291dGIoUkNSMl9SVENFTnxSQ1IyX1NUQVJULCBSQ1IyKTsgIC8qIFN0YXJ0IFJUQyAqLwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQotCXJldHVybiByZXR2YWw7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9NYWtlZmlsZQppbmRleCBiNTRkYmI5Li41OGQzODE1IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL01ha2VmaWxlCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvTWFrZWZpbGUKQEAgLTQsMTAgKzQsMjEgQEAKIAogb2JqLXkJOj0gZXgubyBwcm9iZS5vCiAKKyMgQ1BVIHN1YnR5cGUgc2V0dXAKK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCSs9IHNldHVwLXNoNzcwNS5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KQkrPSBzZXR1cC1zaDc3MDkubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykJKz0gc2V0dXAtc2g3NzA5Lm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDgpCSs9IHNldHVwLXNoNzcwOC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQkrPSBzZXR1cC1zaDc3MDkubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkJKz0gc2V0dXAtc2g3MzAwLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCSs9IHNldHVwLXNoNzcxMC5vCisKKyMgUHJpbWFyeSBvbi1jaGlwIGNsb2NrcyAoY29tbW9uKQogY2xvY2stJChDT05GSUdfQ1BVX1NIMykJCQk6PSBjbG9jay1zaDMubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQk6PSBjbG9jay1zaDczMDAubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KQk6PSBjbG9jay1zaDc3MDUubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KQk6PSBjbG9jay1zaDc3MDYubwogY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQk6PSBjbG9jay1zaDc3MDkubworY2xvY2stJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQk6PSBjbG9jay1zaDczMDAubwogCiBvYmoteQkrPSAkKGNsb2NrLXkpCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA2LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjZjk2ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2Nsb2NrLXNoNzcwNi5jCisgKgorICogU0g3NzA2IHN1cHBvcnQgZm9yIHRoZSBjbG9jayBmcmFtZXdvcmsKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBUYWthc2hpIFlPU0hJSQorICoKKyAqIEJhc2VkIG9uIGFyY2gvc2gva2VybmVsL2NwdS9zaDMvY2xvY2stc2g3NzA5LmMKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgIEFuZHJpeSBTa3VseXNoCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8YXNtL2Nsb2NrLmg+CisjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCBzdGNfbXVsdGlwbGllcnNbXSA9IHsgMSwgMiwgNCwgMSwgMywgNiwgMSwgMSB9Oworc3RhdGljIGludCBpZmNfZGl2aXNvcnNbXSAgICA9IHsgMSwgMiwgNCwgMSwgMywgMSwgMSwgMSB9Oworc3RhdGljIGludCBwZmNfZGl2aXNvcnNbXSAgICA9IHsgMSwgMiwgNCwgMSwgMywgNiwgMSwgMSB9OworCitzdGF0aWMgdm9pZCBtYXN0ZXJfY2xrX2luaXQoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4MjAwMCkgPj4gMTEpIHwgKGZycWNyICYgMHgwMDAzKTsKKworCWNsay0+cmF0ZSAqPSBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwNl9tYXN0ZXJfY2xrX29wcyA9IHsKKwkuaW5pdAkJPSBtYXN0ZXJfY2xrX2luaXQsCit9OworCitzdGF0aWMgdm9pZCBtb2R1bGVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBpZHggPSAoKGZycWNyICYgMHgyMDAwKSA+PiAxMSkgfCAoZnJxY3IgJiAweDAwMDMpOworCisJY2xrLT5yYXRlID0gY2xrLT5wYXJlbnQtPnJhdGUgLyBwZmNfZGl2aXNvcnNbaWR4XTsKK30KKworc3RhdGljIHN0cnVjdCBjbGtfb3BzIHNoNzcwNl9tb2R1bGVfY2xrX29wcyA9IHsKKwkucmVjYWxjCQk9IG1vZHVsZV9jbGtfcmVjYWxjLAorfTsKKworc3RhdGljIHZvaWQgYnVzX2Nsa19yZWNhbGMoc3RydWN0IGNsayAqY2xrKQoreworCWludCBmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlpbnQgaWR4ID0gKChmcnFjciAmIDB4ODAwMCkgPj4gMTMpIHwgKChmcnFjciAmIDB4MDAzMCkgPj4gNCk7CisKKwljbGstPnJhdGUgPSBjbGstPnBhcmVudC0+cmF0ZSAvIHN0Y19tdWx0aXBsaWVyc1tpZHhdOworfQorCitzdGF0aWMgc3RydWN0IGNsa19vcHMgc2g3NzA2X2J1c19jbGtfb3BzID0geworCS5yZWNhbGMJCT0gYnVzX2Nsa19yZWNhbGMsCit9OworCitzdGF0aWMgdm9pZCBjcHVfY2xrX3JlY2FsYyhzdHJ1Y3QgY2xrICpjbGspCit7CisJaW50IGZycWNyID0gY3RybF9pbncoRlJRQ1IpOworCWludCBpZHggPSAoKGZycWNyICYgMHg0MDAwKSA+PiAxMikgfCAoKGZycWNyICYgMHgwMDBjKSA+PiAyKTsKKworCWNsay0+cmF0ZSA9IGNsay0+cGFyZW50LT5yYXRlIC8gaWZjX2Rpdmlzb3JzW2lkeF07Cit9CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyBzaDc3MDZfY3B1X2Nsa19vcHMgPSB7CisJLnJlY2FsYwkJPSBjcHVfY2xrX3JlY2FsYywKK307CisKK3N0YXRpYyBzdHJ1Y3QgY2xrX29wcyAqc2g3NzA2X2Nsa19vcHNbXSA9IHsKKwkmc2g3NzA2X21hc3Rlcl9jbGtfb3BzLAorCSZzaDc3MDZfbW9kdWxlX2Nsa19vcHMsCisJJnNoNzcwNl9idXNfY2xrX29wcywKKwkmc2g3NzA2X2NwdV9jbGtfb3BzLAorfTsKKwordm9pZCBfX2luaXQgYXJjaF9pbml0X2Nsa19vcHMoc3RydWN0IGNsa19vcHMgKipvcHMsIGludCBpZHgpCit7CisJaWYgKGlkeCA8IEFSUkFZX1NJWkUoc2g3NzA2X2Nsa19vcHMpKQorCQkqb3BzID0gc2g3NzA2X2Nsa19vcHNbaWR4XTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvZXguUwppbmRleCBjYzA0ZTllLi40NGRhZjQ0IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9leC5TCkBAIC04NCw4ICs4NCwxMiBAQAogCS5sb25nCWRvX0lSUQkhICAgICAgcm92aQogCS5sb25nCWRvX0lSUQkJCQogCS5sb25nCWRvX0lSUQkJCS8qIDVFMCAqLwotI2lmICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgXAotICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKyNpZiAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkgfHwgXAorICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKKyAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBcCisgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAorICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiAJLmxvbmcJZG9fSVJRCSEgMzIgSVJRICBpcnEwCS8qIDYwMCAqLwogCS5sb25nCWRvX0lSUQkhIDMzICAgICAgaXJxMQogCS5sb25nCWRvX0lSUQkhIDM0ICAgICAgaXJxMgpAQCAtMTQ3LDYgKzE1MSw1MSBAQAogCS5sb25nICAgZG9fSVJRCSEgNjIgUENDICBwY2MwaQogCS5sb25nICAgZG9fSVJRCSEgNjMgICAgICBwY2MxaQkvKiA5RTAgKi8KICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjEgCS8qIDlBMCAqLworCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA2MgorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA2MworCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA2NAkvKiBBMDAgKi8KKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjUKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjYKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjcKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjgKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNjkKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNzAKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNzEKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgNzIJLyogQjAwICovCisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDczCisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDc0CisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDc1CisJLmxvbmcgICBkb19JUlEJISA3NiBETUFDMiBkZWk0CS8qIEI4MCAqLworCS5sb25nICAgZG9fSVJRCSEgNzcgRE1BQzIgZGVpNQorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA3OAorCS5sb25nICAgZG9fSVJRCSEgNzkgSVBTRUMgaXBzZWNpIC8qIEJFMCAqLworCS5sb25nICAgZG9fSVJRCSEgODAgRURNQUMgZWludDAgLyogQzAwICovCisJLmxvbmcgICBkb19JUlEJISA4MSBFRE1BQyBlaW50MQorCS5sb25nICAgZG9fSVJRCSEgODIgRURNQUMgZWludDIKKwkubG9uZyAgIGV4Y2VwdGlvbl9ub25lCSEgODMJLyogQzYwICovCisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDg0CisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDg1CisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDg2CisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDg3CisJLmxvbmcgICBleGNlcHRpb25fbm9uZQkhIDg4CS8qIEQwMCAqLworCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA4OQorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5MAorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5MQorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5MgorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5MworCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5NAorCS5sb25nICAgZXhjZXB0aW9uX25vbmUJISA5NQorCS5sb25nICAgZG9fSVJRCSEgOTYgU0lPRiBlcmkwCS8qIEUwMCAqLworCS5sb25nICAgZG9fSVJRCSEgOTcgICAgICB0eGkwCisJLmxvbmcgICBkb19JUlEJISA5OCAgICAgIHJ4aTAKKwkubG9uZyAgIGRvX0lSUQkhIDk5ICAgICAgY2NpMAorCS5sb25nICAgZG9fSVJRCSEgMTAwICAgICBlcmkxCS8qIEU4MCAqLworCS5sb25nICAgZG9fSVJRCSEgMTAxICAgICB0eGkxCisJLmxvbmcgICBkb19JUlEJISAxMDIgICAgIHJ4aTIKKwkubG9uZyAgIGRvX0lSUQkhIDEwMyAgICAgY2NpMworI2VuZGlmCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQogCS5sb25nICAgZG9fSVJRCSEgNjQKIAkubG9uZyAgIGRvX0lSUQkhIDY1CkBAIC0xOTUsNCArMjQ0LDMgQEAKIAkubG9uZyAgIGRvX0lSUQkhIDEwOAogI2VuZGlmCiAjZW5kaWYKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9wcm9iZS5jCmluZGV4IDVjZGM4ODYuLmU2NzA5ODggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3Byb2JlLmMKQEAgLTcyLDYgKzcyLDEyIEBACiAJCWNwdV9kYXRhLT5kY2FjaGUuc2V0cwkJPSAyNTY7CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzcyOTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikKKwkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzA2OworI2VuZGlmCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQorCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3MTA7CisjZW5kaWYKICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzcwNTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDczMDAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3MzAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWI0ZDIwNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3MzAwLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIFNINzMwMCBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGE0NDMwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJLAorCQkuaXJxcwkJPSB7IDgwLCA4MCwgODAsIDgwIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzAwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3MzAwX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzAwX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3MzAwX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2g3MzAwX2RldmljZXNfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDUuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYThlNDFjNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA1LmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFNINzcwNSBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGE0NDEwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1NiwgNTcsIDU5LCA1OCB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcwNV9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzcwNV9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzcwNV9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzcwNV9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzcwNV9kZXZpY2VzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA4LmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwOC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzM3MjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2gzL3NldHVwLXNoNzcwOC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBTSDc3MDggU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3NjaS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSSwKKwkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzA4X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3NzA4X2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzA4X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3NzA4X2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2g3NzA4X2RldmljZXNfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MDkuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0M2VmMgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzA5LmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIFNINzcwNy9TSDc3MDkgU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3NjaS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSSwKKwkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4YTQwMDAxNTAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDU2LCA1NywgNTksIDU4IH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4YTQwMDAxNDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9JUkRBLAorCQkuaXJxcwkJPSB7IDUyLCA1MywgNTUsIDU0IH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzA5X2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3NzA5X2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzA5X2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3NzA5X2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2g3NzA5X2RldmljZXNfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoMy9zZXR1cC1zaDc3MTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk1Zjk5ZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDMvc2V0dXAtc2g3NzEwLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIFNINzcxMCBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGE0NDAwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzcxMF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzcxMF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzcxMF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzcxMF9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzcxMF9kZXZpY2VzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L01ha2VmaWxlCmluZGV4IDNkNWNhZmMuLjhkYmYzODkgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvTWFrZWZpbGUKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9NYWtlZmlsZQpAQCAtNyw2ICs3LDE2IEBACiBvYmotJChDT05GSUdfU0hfRlBVKSAgICAgICAgICAgICAgICAgICAgKz0gZnB1Lm8KIG9iai0kKENPTkZJR19TSF9TVE9SRV9RVUVVRVMpCQkrPSBzcS5vCiAKKyMgQ1BVIHN1YnR5cGUgc2V0dXAKK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApCSs9IHNldHVwLXNoNzc1MC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQkrPSBzZXR1cC1zaDc3NTAubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkJKz0gc2V0dXAtc2g3NzYwLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCSs9IHNldHVwLXNoNzc3MC5vCitvYmotJChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQkrPSBzZXR1cC1zaDc3ODAubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApCSs9IHNldHVwLXNoNzMxODAubworb2JqLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykJKz0gc2V0dXAtc2g3MzQzLm8KK29iai0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQkrPSBzZXR1cC1zaDQtMjAyLm8KKwogIyBQcmltYXJ5IG9uLWNoaXAgY2xvY2tzIChjb21tb24pCiBjbG9jay0kKENPTkZJR19DUFVfU0g0KQkJCTo9IGNsb2NrLXNoNC5vCiBjbG9jay0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQk6PSBjbG9jay1zaDczMTgwLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZXguUyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvZXguUwppbmRleCAyNmEyN2RmLi43MTQ2ODkzIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L2V4LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9leC5TCkBAIC03Miw2ICs3Miw3IEBACiAJLmxvbmcJZG9fSVJRCSEgMTExMAogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkJCiAJISBJbnRlcm5hbCBoYXJkd2FyZQorI2lmbmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCiAJLmxvbmcJZG9fSVJRCSEgVE1VMCB0dW5pMAkvKiA0MDAgKi8KIAkubG9uZwlkb19JUlEJISBUTVUxIHR1bmkxCiAJLmxvbmcJZG9fSVJRCSEgVE1VMiB0dW5pMgpAQCAtMTIyLDYgKzEyMywxMyBAQAogCS5sb25nCWRvX0lSUQkhIDQ1ICAgICAgZG10ZTUKIAkubG9uZwlkb19JUlEJISA0NiAgICAgIGRtdGU2CiAJLmxvbmcJZG9fSVJRCSEgNDcgICAgICBkbXRlNwkJLyogN0UwICovCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCisJLmxvbmcJZG9fSVJRCSEgNDQgSUlDMSBhbGkJCS8qIDc4MCAqLworCS5sb25nCWRvX0lSUQkhIDQ1ICAgICAgdGFja2kKKwkubG9uZwlkb19JUlEJISA0NiAgICAgIHdhaXRpCisJLmxvbmcJZG9fSVJRCSEgNDcgICAgICBkdGVpCQkvKiA3RTAgKi8KKwkubG9uZwlkb19JUlEJISA0OCBETUFDIGRlaTAJCS8qIDgwMCAqLworCS5sb25nCWRvX0lSUQkhIDQ5ICAgICAgZGVpMQkJLyogODIwICovCiAjZWxzZQogCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgkJCSEgNDQJLyogNzgwICovCiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkJISA0NQpAQCAtMTMxLDcgKzEzOSw4IEBACiAjaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKQogCS5sb25nCWRvX2ZwdV9zdGF0ZV9yZXN0b3JlCSEgNDgJLyogODAwICovCiAJLmxvbmcJZG9fZnB1X3N0YXRlX3Jlc3RvcmUJISA0OQkvKiA4MjAgKi8KLSNlbHNlCisjZWxpZiAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKSAmJiBcCisgICAgICAhZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKIAkubG9uZwlleGNlcHRpb25fZXJyb3IKIAkubG9uZwlleGNlcHRpb25fZXJyb3IKICNlbmRpZgpAQCAtMjI0LDcgKzIzMyw3IEBACiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCiAJLmxvbmcJZG9fSVJRCSEgQURDCWFkaQogCS5sb25nCWRvX0lSUQkhIENNVAljbXRpCS8qIEZBMCAqLwotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKIAkubG9uZwlkb19JUlEJISAgNTAgMHg4NDAKIAkubG9uZwlkb19JUlEJISAgNTEgMHg4NjAKIAkubG9uZwlkb19JUlEJISAgNTIgMHg4ODAKQEAgLTM3OSw1ICszODgsMTY4IEBACiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkJISAxNDEgMHgxM2EwCiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkJISAxNDIgMHgxM2MwCiAJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkJISAxNDMgMHgxM2UwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCisJLmxvbmcJZG9fSVJRCSEgIDUwIDB4ODQwCisJLmxvbmcJZG9fSVJRCSEgIDUxIDB4ODYwCisJLmxvbmcJZG9fSVJRCSEgIDUyIDB4ODgwCisJLmxvbmcJZG9fSVJRCSEgIDUzIDB4OGEwCisJLmxvbmcJZG9fSVJRCSEgIDU0IDB4OGMwCisJLmxvbmcJZG9fSVJRCSEgIDU1IDB4OGUwCisJLmxvbmcJZG9fSVJRCSEgIDU2IDB4OTAwCisJLmxvbmcJZG9fSVJRCSEgIDU3IDB4OTIwCisJLmxvbmcJZG9fSVJRCSEgIDU4IDB4OTQwCisJLmxvbmcJZG9fSVJRCSEgIDU5IDB4OTYwCisJLmxvbmcJZG9fSVJRCSEgIDYwIDB4OTgwCisJLmxvbmcJZG9fSVJRCSEgIDYxIDB4OWEwCisJLmxvbmcJZG9fSVJRCSEgIDYyIDB4OWMwCisJLmxvbmcJZG9fSVJRCSEgIDYzIDB4OWUwCisJLmxvbmcJZG9fSVJRCSEgIDY0IDB4YTAwCisJLmxvbmcJZG9fSVJRCSEgIDY1IDB4YTIwCisJLmxvbmcJZG9fSVJRCSEgIDY2IDB4YTRkCisJLmxvbmcJZG9fSVJRCSEgIDY3IDB4YTYwCisJLmxvbmcJZG9fSVJRCSEgIDY4IDB4YTgwCisJLmxvbmcJZG9fSVJRCSEgIDY5IDB4YWEwCisJLmxvbmcJZG9fSVJRCSEgIDcwIDB4YWMwCisJLmxvbmcJZG9fSVJRCSEgIDcxIDB4YWUwCisJLmxvbmcJZG9fSVJRCSEgIDcyIDB4YjAwCisJLmxvbmcJZG9fSVJRCSEgIDczIDB4YjIwCisJLmxvbmcJZG9fSVJRCSEgIDc0IDB4YjQwCisJLmxvbmcJZG9fSVJRCSEgIDc1IDB4YjYwCisJLmxvbmcJZG9fSVJRCSEgIDc2IDB4YjgwCisJLmxvbmcJZG9fSVJRCSEgIDc3IDB4YmEwCisJLmxvbmcJZG9fSVJRCSEgIDc4IDB4YmMwCisJLmxvbmcJZG9fSVJRCSEgIDc5IDB4YmUwCisJLmxvbmcJZG9fSVJRCSEgIDgwIDB4YzAwCisJLmxvbmcJZG9fSVJRCSEgIDgxIDB4YzIwCisJLmxvbmcJZG9fSVJRCSEgIDgyIDB4YzQwCisJLmxvbmcJZG9fSVJRCSEgIDgzIDB4YzYwCisJLmxvbmcJZG9fSVJRCSEgIDg0IDB4YzgwCisJLmxvbmcJZG9fSVJRCSEgIDg1IDB4Y2EwCisJLmxvbmcJZG9fSVJRCSEgIDg2IDB4Y2MwCisJLmxvbmcJZG9fSVJRCSEgIDg3IDB4Y2UwCisJLmxvbmcJZG9fSVJRCSEgIDg4IDB4ZDAwCisJLmxvbmcJZG9fSVJRCSEgIDg5IDB4ZDIwCisJLmxvbmcJZG9fSVJRCSEgIDkwIDB4ZDQwCisJLmxvbmcJZG9fSVJRCSEgIDkxIDB4ZDYwCisJLmxvbmcJZG9fSVJRCSEgIDkyIDB4ZDgwCisJLmxvbmcJZG9fSVJRCSEgIDkzIDB4ZGEwCisJLmxvbmcJZG9fSVJRCSEgIDk0IDB4ZGMwCisJLmxvbmcJZG9fSVJRCSEgIDk1IDB4ZGUwCisJLmxvbmcJZG9fSVJRCSEgIDk2IDB4ZTAwCisJLmxvbmcJZG9fSVJRCSEgIDk3IDB4ZTIwCisJLmxvbmcJZG9fSVJRCSEgIDk4IDB4ZTQwCisJLmxvbmcJZG9fSVJRCSEgIDk5IDB4ZTYwCisJLmxvbmcJZG9fSVJRCSEgMTAwIDB4ZTgwCisJLmxvbmcJZG9fSVJRCSEgMTAxIDB4ZWEwCisJLmxvbmcJZG9fSVJRCSEgMTAyIDB4ZWMwCisJLmxvbmcJZG9fSVJRCSEgMTAzIDB4ZWUwCisJLmxvbmcJZG9fSVJRCSEgMTA0IDB4ZjAwCisJLmxvbmcJZG9fSVJRCSEgMTA1IDB4ZjIwCisJLmxvbmcJZG9fSVJRCSEgMTA2IDB4ZjQwCisJLmxvbmcJZG9fSVJRCSEgMTA3IDB4ZjYwCisJLmxvbmcJZG9fSVJRCSEgMTA4IDB4ZjgwCisjZW5kaWYKKyNlbHNlCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkvKiA0MDAgKi8KKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlkb19JUlEJISBSVEMJYXRpCisJLmxvbmcJZG9fSVJRCSEJcHJpCisJLmxvbmcJZG9fSVJRCSEJY3VpCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkvKiA1MDAgKi8KKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlkb19JUlEJISBXRFQJaXRpCS8qIDU2MCAqLworCS5sb25nCWRvX0lSUQkhIFRNVS1jaDAKKwkubG9uZwlkb19JUlEJISBUTVUtY2gxCisJLmxvbmcJZG9fSVJRCSEgVE1VLWNoMgorCS5sb25nCWRvX0lSUQkhIHRpY3BpMgkvKiA1RTAgKi8KKwkubG9uZwlkb19JUlEJISAzMiBIaXRhY2hpIFVESQkvKiA2MDAgKi8KKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlkb19JUlEJISAzNCBETUFDIGRtdGUwCisJLmxvbmcJZG9fSVJRCSEgMzUJICBkbXRlMQorCS5sb25nCWRvX0lSUQkhIDM2CSAgZG10ZTIKKwkubG9uZwlkb19JUlEJISAzNwkgIGRtdGUzCisJLmxvbmcJZG9fSVJRCSEgMzgJICBkbWFlCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCQkJISAzOQkvKiA2RTAgKi8KKwkubG9uZwlkb19JUlEJISA0MCBTQ0lGLWNoMCBlcmkJCS8qIDcwMCAqLworCS5sb25nCWRvX0lSUQkhIDQxCSAgICAgIHJ4aQorCS5sb25nCWRvX0lSUQkhIDQyCSAgICAgIGJyaQorCS5sb25nCWRvX0lSUQkhIDQzCSAgICAgIHR4aQorCS5sb25nCWRvX0lSUQkhIDQ0IERNQUMgZG10ZTQJCS8qIDc4MCAqLworCS5sb25nCWRvX0lSUQkhIDQ1CSAgZG10ZTUKKwkubG9uZwlkb19JUlEJISA0NgkgIGRtdGU2CisJLmxvbmcJZG9fSVJRCSEgNDcJICBkbXRlNwkJLyogN0UwICovCisjaWYgZGVmaW5lZChDT05GSUdfU0hfRlBVKQorCS5sb25nCWRvX2ZwdV9zdGF0ZV9yZXN0b3JlCSEgNDgJLyogODAwICovCisJLmxvbmcJZG9fZnB1X3N0YXRlX3Jlc3RvcmUJISA0OQkvKiA4MjAgKi8KKyNlbHNlCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisjZW5kaWYKKwkubG9uZwlleGNlcHRpb25fZXJyb3IJCQkvKiA4NDAgKi8KKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlleGNlcHRpb25fZXJyb3IKKwkubG9uZwlkb19JUlEJISA1NiBDTVQJLyogOTAwICovCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZG9fSVJRCSEgNjAgSEFDCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZG9fSVJRCSEgUENJIHNlcnIJLyogQTAwICovCisJLmxvbmcJZG9fSVJRCSEgICAgIElOVEEKKwkubG9uZwlkb19JUlEJISAgICAgSU5UQgorCS5sb25nCWRvX0lSUQkhICAgICBJTlRDCisJLmxvbmcJZG9fSVJRCSEgICAgIElOVEQKKwkubG9uZwlkb19JUlEJISAgICAgZXJyCisJLmxvbmcJZG9fSVJRCSEgICAgIHB3ZDMKKwkubG9uZwlkb19JUlEJISAgICAgcHdkMgorCS5sb25nCWRvX0lSUQkhICAgICBwd2QxCS8qIEIwMCAqLworCS5sb25nCWRvX0lSUQkhICAgICBwd2QwCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZG9fSVJRCSEgU0NJRi1jaDEgZXJpCS8qIEI4MCAqLworCS5sb25nCWRvX0lSUQkhCSAgIHJ4aQorCS5sb25nCWRvX0lSUQkhCSAgIGJyaQorCS5sb25nCWRvX0lSUQkhCSAgIHR4aQorCS5sb25nCWRvX0lSUQkhIFNJT0YJCS8qIEMwMCAqLworCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWRvX0lSUQkhIEhTUEkJCS8qIEM4MCAqLworCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWV4Y2VwdGlvbl9lcnJvcgorCS5sb25nCWRvX0lSUQkhIE1NQ0lGCWZhdGF0CS8qIEQwMCAqLworCS5sb25nCWRvX0lSUQkhCXRyYW4KKwkubG9uZwlkb19JUlEJIQllcnIKKwkubG9uZwlkb19JUlEJIQlmcmR5CisJLmxvbmcJZG9fSVJRCSEgRE1BQyBkbWludDgJLyogRDgwICovCisJLmxvbmcJZG9fSVJRCSEgICAgICBkbWludDkKKwkubG9uZwlkb19JUlEJISAgICAgIGRtaW50MTAKKwkubG9uZwlkb19JUlEJISAgICAgIGRtaW50MTEKKwkubG9uZwlkb19JUlEJISBUTVUtY2gzCS8qIEUwMCAqLworCS5sb25nCWRvX0lSUQkhIFRNVS1jaDQKKwkubG9uZwlkb19JUlEJISBUTVUtY2g1CisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZG9fSVJRCSEgU1NJCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZXhjZXB0aW9uX2Vycm9yCisJLmxvbmcJZG9fSVJRCSEgRkxDVEwJZmxzdGUJLyogRjAwICovCisJLmxvbmcJZG9fSVJRCSEJZmx0ZW5kCisJLmxvbmcJZG9fSVJRCSEJZmx0cnEwCisJLmxvbmcJZG9fSVJRCSEJZmx0cnExCisJLmxvbmcJZG9fSVJRCSEgR1BJTyBncGlvaTAJLyogRjgwICovCisJLmxvbmcJZG9fSVJRCSEgICAgICBncGlvaTEKKwkubG9uZwlkb19JUlEJISAgICAgIGdwaW9pMgorCS5sb25nCWRvX0lSUQkhICAgICAgZ3Bpb2kzCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9wcm9iZS5jCmluZGV4IDQyNDI3YjcuLmMyOTRkZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvcHJvYmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3Byb2JlLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogQ1BVIFN1YnR5cGUgUHJvYmluZyBmb3IgU0gtNC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQgIFBhdWwgTXVuZHQKKyAqIENvcHlyaWdodCAoQykgMjAwMSAtIDIwMDYgIFBhdWwgTXVuZHQKICAqIENvcHlyaWdodCAoQykgMjAwMyAgUmljaGFyZCBDdXJub3cKICAqCiAgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpAQCAtMjksNyArMjksNyBAQAogCQlbOV0gPSAoMSA8PCAxNikKIAl9OwogCi0JcHZyID0gKGN0cmxfaW5sKENDTl9QVlIpID4+IDgpICYgMHhmZmZmOworCXB2ciA9IChjdHJsX2lubChDQ05fUFZSKSA+PiA4KSAmIDB4ZmZmZmZmOwogCXByciA9IChjdHJsX2lubChDQ05fUFJSKSA+PiA0KSAmIDB4ZmY7CiAJY3ZyID0gKGN0cmxfaW5sKENDTl9DVlIpKTsKIApAQCAtMzgsNyArMzgsNiBAQAogCSAqLwogCWNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxMyk7CiAJY3B1X2RhdGEtPmljYWNoZS5lbnRyeV9zaGlmdAk9IDU7Ci0JY3B1X2RhdGEtPmljYWNoZS5lbnRyeV9tYXNrCT0gMHgxZmUwOwogCWNwdV9kYXRhLT5pY2FjaGUuc2V0cwkJPSAyNTY7CiAJY3B1X2RhdGEtPmljYWNoZS53YXlzCQk9IDE7CiAJY3B1X2RhdGEtPmljYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CkBAIC00OCwxMyArNDcsMjkgQEAKIAkgKi8KIAljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKDEgPDwgMTQpOwogCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQJPSA1OwotCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfbWFzawk9IDB4M2ZlMDsKIAljcHVfZGF0YS0+ZGNhY2hlLnNldHMJCT0gNTEyOwogCWNwdV9kYXRhLT5kY2FjaGUud2F5cwkJPSAxOwogCWNwdV9kYXRhLT5kY2FjaGUubGluZXN6CQk9IEwxX0NBQ0hFX0JZVEVTOwogCi0JLyogU2V0IHRoZSBGUFUgZmxhZywgdmlydHVhbGx5IGFsbCBTSC00J3MgaGF2ZSBvbmUgKi8KLQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFU7CisJLyoKKwkgKiBTZXR1cCBzb21lIGdlbmVyaWMgZmxhZ3Mgd2UgY2FuIHByb2JlCisJICogKEwyIGFuZCBEU1AgZGV0ZWN0aW9uIG9ubHkgd29yayBvbiBTSC00QSkKKwkgKi8KKwlpZiAoKChwdnIgPj4gMTYpICYgMHhmZikgPT0gMHgxMCkgeworCQlpZiAoKGN2ciAmIDB4MDIwMDAwMDApID09IDApCisJCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19MMl9DQUNIRTsKKwkJaWYgKChjdnIgJiAweDEwMDAwMDAwKSA9PSAwKQorCQkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfRFNQOworCisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0xMU0M7CisJfQorCisJLyogRlBVIGRldGVjdGlvbiB3b3JrcyBmb3IgZXZlcnlvbmUgKi8KKwlpZiAoKGN2ciAmIDB4MjAwMDAwMDApID09IDEpCisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVTsKKworCS8qIE1hc2sgb2ZmIHRoZSB1cHBlciBjaGlwIElEICovCisJcHZyICY9IDB4ZmZmZjsKIAogCS8qCiAJICogUHJvYmUgdGhlIHVuZGVybHlpbmcgcHJvY2Vzc29yIHZlcnNpb24vcmV2aXNpb24gYW5kCkBAIC02Myw1NiArNzgsMTAxIEBACiAJc3dpdGNoIChwdnIpIHsKIAljYXNlIDB4MjA1OgogCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NTA7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX1AyX0ZMVVNIX0JVRyB8IENQVV9IQVNfUEVSRl9DT1VOVEVSOworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19QMl9GTFVTSF9CVUcgfCBDUFVfSEFTX0ZQVSB8CisJCQkJICAgQ1BVX0hBU19QRVJGX0NPVU5URVIgfCBDUFVfSEFTX1BURUE7CiAJCWJyZWFrOwogCWNhc2UgMHgyMDY6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzc1MFM7Ci0JCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX1AyX0ZMVVNIX0JVRyB8IENQVV9IQVNfUEVSRl9DT1VOVEVSOworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19QMl9GTFVTSF9CVUcgfCBDUFVfSEFTX0ZQVSB8CisJCQkJICAgQ1BVX0hBU19QRVJGX0NPVU5URVIgfCBDUFVfSEFTX1BURUE7CiAJCWJyZWFrOwogCWNhc2UgMHgxMTAwOgogCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NTE7CisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUFRFQTsKIAkJYnJlYWs7CiAJY2FzZSAweDIwMDA6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzMxODA7CiAJCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDQ7CiAJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDQ7Ci0JCWNwdV9kYXRhLT5mbGFncyAmPSB+Q1BVX0hBU19GUFU7CisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0xMU0M7CisJCWJyZWFrOworCWNhc2UgMHgyMDAxOgorCWNhc2UgMHgyMDA0OgorCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NzA7CisJCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDQ7CisJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDQ7CisKKwkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19MTFNDOworCQlicmVhazsKKwljYXNlIDB4MjAwNjoKKwljYXNlIDB4MjAwQToKKwkJaWYgKHByciA9PSAweDYxKQorCQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzgxOworCQllbHNlCisJCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3ODA7CisKKwkJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gNDsKKwkJY3B1X2RhdGEtPmRjYWNoZS53YXlzID0gNDsKKworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BFUkZfQ09VTlRFUiB8CisJCQkJICAgQ1BVX0hBU19MTFNDOworCQlicmVhazsKKwljYXNlIDB4MzAwMDoKKwljYXNlIDB4MzAwMzoKKwkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3MzQzOworCQljcHVfZGF0YS0+aWNhY2hlLndheXMgPSA0OworCQljcHVfZGF0YS0+ZGNhY2hlLndheXMgPSA0OworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19MTFNDOwogCQlicmVhazsKIAljYXNlIDB4ODAwMDoKIAkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU1Q0MFJBOworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BURUE7CiAJCWJyZWFrOwogCWNhc2UgMHg4MTAwOgogCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TVDQwR1gxOworCQljcHVfZGF0YS0+ZmxhZ3MgfD0gQ1BVX0hBU19GUFUgfCBDUFVfSEFTX1BURUE7CiAJCWJyZWFrOwogCWNhc2UgMHg3MDA6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINF81MDE7CiAJCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDI7CiAJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDI7Ci0KLQkJLyogTm8gRlBVIG9uIHRoZSBTSDQtNTAwIHNlcmllcy4uICovCi0JCWNwdV9kYXRhLT5mbGFncyAmPSB+Q1BVX0hBU19GUFU7CisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX1BURUE7CiAJCWJyZWFrOwogCWNhc2UgMHg2MDA6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINF8yMDI7CiAJCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDI7CiAJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDI7CisJCWNwdV9kYXRhLT5mbGFncyB8PSBDUFVfSEFTX0ZQVSB8IENQVV9IQVNfUFRFQTsKIAkJYnJlYWs7CiAJY2FzZSAweDUwMCAuLi4gMHg1MDE6CiAJCXN3aXRjaCAocHJyKSB7Ci0JCSAgICBjYXNlIDB4MTA6IGNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzc1MFI7IGJyZWFrOwotCQkgICAgY2FzZSAweDExOiBjcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NTFSOyBicmVhazsKLQkJICAgIGNhc2UgMHg1MDogY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzYwOyAgYnJlYWs7CisJCWNhc2UgMHgxMDoKKwkJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NINzc1MFI7CisJCQlicmVhazsKKwkJY2FzZSAweDExOgorCQkJY3B1X2RhdGEtPnR5cGUgPSBDUFVfU0g3NzUxUjsKKwkJCWJyZWFrOworCQljYXNlIDB4NTAgLi4uIDB4NWY6CisJCQljcHVfZGF0YS0+dHlwZSA9IENQVV9TSDc3NjA7CisJCQlicmVhazsKIAkJfQogCiAJCWNwdV9kYXRhLT5pY2FjaGUud2F5cyA9IDI7CiAJCWNwdV9kYXRhLT5kY2FjaGUud2F5cyA9IDI7CiAKKwkJY3B1X2RhdGEtPmZsYWdzIHw9IENQVV9IQVNfRlBVIHwgQ1BVX0hBU19QVEVBOworCiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWNwdV9kYXRhLT50eXBlID0gQ1BVX1NIX05PTkU7CiAJCWJyZWFrOwogCX0KIAorI2lmZGVmIENPTkZJR19TSF9ESVJFQ1RfTUFQUEVECisJY3B1X2RhdGEtPmljYWNoZS53YXlzID0gMTsKKwljcHVfZGF0YS0+ZGNhY2hlLndheXMgPSAxOworI2VuZGlmCisKIAkvKgogCSAqIE9uIGFueXRoaW5nIHRoYXQncyBub3QgYSBkaXJlY3QtbWFwcGVkIGNhY2hlLCBsb29rIHRvIHRoZSBDVlIKIAkgKiBmb3IgSS9ELWNhY2hlIHNwZWNpZmljcy4KQEAgLTEyMSwxOCArMTgxLDU2IEBACiAJCXNpemUgPSBzaXplc1soY3ZyID4+IDIwKSAmIDB4Zl07CiAJCWNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3IJPSAoc2l6ZSA+PiAxKTsKIAkJY3B1X2RhdGEtPmljYWNoZS5zZXRzCQk9IChzaXplID4+IDYpOwotCQljcHVfZGF0YS0+aWNhY2hlLmVudHJ5X21hc2sJPQotCQkJKGNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3IgLSAoMSA8PCA1KSk7CisKIAl9CiAKKwkvKiBTZXR1cCB0aGUgcmVzdCBvZiB0aGUgSS1jYWNoZSBpbmZvICovCisJY3B1X2RhdGEtPmljYWNoZS5lbnRyeV9tYXNrID0gY3B1X2RhdGEtPmljYWNoZS53YXlfaW5jciAtCisJCQkJICAgICAgY3B1X2RhdGEtPmljYWNoZS5saW5lc3o7CisKKwljcHVfZGF0YS0+aWNhY2hlLndheV9zaXplID0gY3B1X2RhdGEtPmljYWNoZS5zZXRzICoKKwkJCQkgICAgY3B1X2RhdGEtPmljYWNoZS5saW5lc3o7CisKKwkvKiBBbmQgdGhlIHJlc3Qgb2YgdGhlIEQtY2FjaGUgKi8KIAlpZiAoY3B1X2RhdGEtPmRjYWNoZS53YXlzID4gMSkgewogCQlzaXplID0gc2l6ZXNbKGN2ciA+PiAxNikgJiAweGZdOwogCQljcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyCT0gKHNpemUgPj4gMSk7CiAJCWNwdV9kYXRhLT5kY2FjaGUuc2V0cwkJPSAoc2l6ZSA+PiA2KTsKLQkJY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9tYXNrCT0KLQkJCShjcHVfZGF0YS0+ZGNhY2hlLndheV9pbmNyIC0gKDEgPDwgNSkpOworCX0KKworCWNwdV9kYXRhLT5kY2FjaGUuZW50cnlfbWFzayA9IGNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3IgLQorCQkJCSAgICAgIGNwdV9kYXRhLT5kY2FjaGUubGluZXN6OworCisJY3B1X2RhdGEtPmRjYWNoZS53YXlfc2l6ZSA9IGNwdV9kYXRhLT5kY2FjaGUuc2V0cyAqCisJCQkJICAgIGNwdV9kYXRhLT5kY2FjaGUubGluZXN6OworCisJLyoKKwkgKiBTZXR1cCB0aGUgTDIgY2FjaGUgZGVzYworCSAqCisJICogU0gtNEEncyBoYXZlIGFuIG9wdGlvbmFsIFBJUFQgTDIuCisJICovCisJaWYgKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfTDJfQ0FDSEUpIHsKKwkJLyoKKwkJICogU2l6ZSBjYWxjdWxhdGlvbiBpcyBtdWNoIG1vcmUgc2Vuc2libGUKKwkJICogdGhhbiBpdCBpcyBmb3IgdGhlIEwxLgorCQkgKgorCQkgKiBTaXplcyBhcmUgMTI4S0IsIDI1OEtCLCA1MTJLQiwgYW5kIDFNQi4KKwkJICovCisJCXNpemUgPSAoY3ZyICYgMHhmKSA8PCAxNzsKKworCQlCVUdfT04oIXNpemUpOworCisJCWNwdV9kYXRhLT5zY2FjaGUud2F5X2luY3IJPSAoMSA8PCAxNik7CisJCWNwdV9kYXRhLT5zY2FjaGUuZW50cnlfc2hpZnQJPSA1OworCQljcHVfZGF0YS0+c2NhY2hlLndheXMJCT0gNDsKKwkJY3B1X2RhdGEtPnNjYWNoZS5saW5lc3oJCT0gTDFfQ0FDSEVfQllURVM7CisJCWNwdV9kYXRhLT5zY2FjaGUuZW50cnlfbWFzawk9CisJCQkoY3B1X2RhdGEtPnNjYWNoZS53YXlfaW5jciAtIGNwdV9kYXRhLT5zY2FjaGUubGluZXN6KTsKKwkJY3B1X2RhdGEtPnNjYWNoZS5zZXRzCQk9IHNpemUgLworCQkJKGNwdV9kYXRhLT5zY2FjaGUubGluZXN6ICogY3B1X2RhdGEtPnNjYWNoZS53YXlzKTsKKwkJY3B1X2RhdGEtPnNjYWNoZS53YXlfc2l6ZQk9CisJCQkoY3B1X2RhdGEtPnNjYWNoZS5zZXRzICogY3B1X2RhdGEtPnNjYWNoZS5saW5lc3opOwogCX0KIAogCXJldHVybiAwOwogfQotCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g0LTIwMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNGU5NjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNC0yMDIuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogU0g0LTIwMiBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZmZTgwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA0MCwgNDEsIDQzLCA0MiB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNDIwMl9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNDIwMl9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNDIwMl9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNDIwMl9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNDIwMl9kZXZpY2VzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3MzE4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDczMTgwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2M5ZWExZQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3MzE4MC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBTSDczMTgwIFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9zY2kuaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDgwLCA4MSwgODMsIDgyIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzE4MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzMxODBfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDczMTgwX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3MzE4MF9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzMxODBfZGV2aWNlc19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzM0My5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDczNDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWQ2MWNmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDczNDMuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogU0g3MzQzIFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9zY2kuaD4KKworc3RhdGljIHN0cnVjdCBwbGF0X3NjaV9wb3J0IHNjaV9wbGF0Zm9ybV9kYXRhW10gPSB7CisJeworCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDgwLCA4MSwgODMsIDgyIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3MzQzX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3MzQzX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3MzQzX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3MzQzX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2g3MzQzX2RldmljZXNfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NTAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTA4MTJkNQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzUwLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIFNINzc1MC9TSDc3NTEgU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3NjaS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSSwKKwkJLmlycXMJCT0geyAyMywgMjQsIDI1LCAwIH0sCisJfSwgeworCQkubWFwYmFzZQk9IDB4ZmZlODAwMDAsCisJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKKwkJLnR5cGUJCT0gUE9SVF9TQ0lGLAorCQkuaXJxcwkJPSB7IDQwLCA0MSwgNDMsIDQyIH0sCisJfSwgeworCQkuZmxhZ3MgPSAwLAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIHNjaV9kZXZpY2UgPSB7CisJLm5hbWUJCT0gInNoLXNjaSIsCisJLmlkCQk9IC0xLAorCS5kZXYJCT0geworCQkucGxhdGZvcm1fZGF0YQk9IHNjaV9wbGF0Zm9ybV9kYXRhLAorCX0sCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqc2g3NzUwX2RldmljZXNbXSBfX2luaXRkYXRhID0geworCSZzY2lfZGV2aWNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2g3NzUwX2RldmljZXNfc2V0dXAodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fYWRkX2RldmljZXMoc2g3NzUwX2RldmljZXMsCisJCQkJICAgIEFSUkFZX1NJWkUoc2g3NzUwX2RldmljZXMpKTsKK30KK19faW5pdGNhbGwoc2g3NzUwX2RldmljZXNfc2V0dXApOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3NjAuYyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdmMWM5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzYwLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIFNINzc2MCBTZXR1cAorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWwuaD4KKyNpbmNsdWRlIDxhc20vc2NpLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdF9zY2lfcG9ydCBzY2lfcGxhdGZvcm1fZGF0YVtdID0geworCXsKKwkJLm1hcGJhc2UJPSAweGZlNjAwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA1MiwgNTMsIDU1LCA1NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZlNjEwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA3MiwgNzMsIDc1LCA3NCB9LAorCX0sIHsKKwkJLm1hcGJhc2UJPSAweGZlNjIwMDAwLAorCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCisJCS50eXBlCQk9IFBPUlRfU0NJRiwKKwkJLmlycXMJCT0geyA3NiwgNzcsIDc5LCA3OCB9LAorCX0sIHsKKwkJLmZsYWdzID0gMCwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzY2lfZGV2aWNlID0geworCS5uYW1lCQk9ICJzaC1zY2kiLAorCS5pZAkJPSAtMSwKKwkuZGV2CQk9IHsKKwkJLnBsYXRmb3JtX2RhdGEJPSBzY2lfcGxhdGZvcm1fZGF0YSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnNoNzc2MF9kZXZpY2VzW10gX19pbml0ZGF0YSA9IHsKKwkmc2NpX2RldmljZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNoNzc2MF9kZXZpY2VzX3NldHVwKHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2FkZF9kZXZpY2VzKHNoNzc2MF9kZXZpY2VzLAorCQkJCSAgICBBUlJBWV9TSVpFKHNoNzc2MF9kZXZpY2VzKSk7Cit9CitfX2luaXRjYWxsKHNoNzc2MF9kZXZpY2VzX3NldHVwKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc2V0dXAtc2g3NzcwLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc3MC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMDRjYzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc3MC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBTSDc3NzAgU2V0dXAKKyAqCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2ICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8YXNtL3NjaS5oPgorCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZjkyMzAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjEsIDYxLCA2MSwgNjEgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyNDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjIsIDYyLCA2MiwgNjIgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZjkyNTAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNjMsIDYzLCA2MywgNjMgfSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3NzBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnNjaV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDc3NzBfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3NzBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDc3NzBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChzaDc3NzBfZGV2aWNlc19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NldHVwLXNoNzc4MC5jIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3ODAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjQ5M2YyCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zZXR1cC1zaDc3ODAuYwpAQCAtMCwwICsxLDc5IEBACisvKgorICogU0g3NzgwIFNldHVwCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS9zY2kuaD4KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSBydGNfcmVzb3VyY2VzW10gPSB7CisJWzBdID0geworCQkuc3RhcnQJPSAweGZmZTgwMDAwLAorCQkuZW5kCT0gMHhmZmU4MDAwMCArIDB4NTggLSAxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lPLAorCX0sCisJWzFdID0geworCQkvKiBQZXJpb2QgSVJRICovCisJCS5zdGFydAk9IDIxLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVsyXSA9IHsKKwkJLyogQ2FycnkgSVJRICovCisJCS5zdGFydAk9IDIyLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorCVszXSA9IHsKKwkJLyogQWxhcm0gSVJRICovCisJCS5zdGFydAk9IDIzLAorCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKKwl9LAorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcnRjX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtcnRjIiwKKwkuaWQJCT0gLTEsCisJLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKHJ0Y19yZXNvdXJjZXMpLAorCS5yZXNvdXJjZQk9IHJ0Y19yZXNvdXJjZXMsCit9OworCitzdGF0aWMgc3RydWN0IHBsYXRfc2NpX3BvcnQgc2NpX3BsYXRmb3JtX2RhdGFbXSA9IHsKKwl7CisJCS5tYXBiYXNlCT0gMHhmZmUwMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNDAsIDQxLCA0MywgNDIgfSwKKwl9LCB7CisJCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKKwkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAorCQkudHlwZQkJPSBQT1JUX1NDSUYsCisJCS5pcnFzCQk9IHsgNzYsIDc3LCA3OSwgNzggfSwKKwl9LCB7CisJCS5mbGFncyA9IDAsCisJfQorfTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ugc2NpX2RldmljZSA9IHsKKwkubmFtZQkJPSAic2gtc2NpIiwKKwkuaWQJCT0gLTEsCisJLmRldgkJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gc2NpX3BsYXRmb3JtX2RhdGEsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpzaDc3ODBfZGV2aWNlc1tdIF9faW5pdGRhdGEgPSB7CisJJnJ0Y19kZXZpY2UsCisJJnNjaV9kZXZpY2UsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzaDc3ODBfZGV2aWNlc19zZXR1cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9hZGRfZGV2aWNlcyhzaDc3ODBfZGV2aWNlcywKKwkJCQkgICAgQVJSQVlfU0laRShzaDc3ODBfZGV2aWNlcykpOworfQorX19pbml0Y2FsbChzaDc3ODBfZGV2aWNlc19zZXR1cCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMgYi9hcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKaW5kZXggYjA5ODA1Zi4uN2JjYzczZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvY3B1L3NoNC9zcS5jCisrKyBiL2FyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYwpAQCAtMSw0OSArMSw1MiBAQAogLyoKLSAqIGFyY2gvc2gva2VybmVsL2NwdS9zcS5jCisgKiBhcmNoL3NoL2tlcm5lbC9jcHUvc2g0L3NxLmMKICAqCiAgKiBHZW5lcmFsIG1hbmFnZW1lbnQgQVBJIGZvciBTSC00IGludGVncmF0ZWQgU3RvcmUgUXVldWVzCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0ICBQYXVsIE11bmR0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgLSAyMDA2ICBQYXVsIE11bmR0CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIgIE0uIFIuIEJyb3duCiAgKgotICogU29tZSBvZiB0aGlzIGNvZGUgaGFzIGJlZW4gYWRvcHRlZCBkaXJlY3RseSBmcm9tIHRoZSBvbGQgYXJjaC9zaC9tbS9zcS5jCi0gKiBoYWNrIHRoYXQgd2FzIHBhcnQgb2YgdGhlIExpbnV4REMgcHJvamVjdC4gRm9yIGFsbCBpbnRlbnRzIGFuZCBwdXJwb3NlcywKLSAqIHRoaXMgaXMgYSBjb21wbGV0ZWx5IG5ldyBpbnRlcmZhY2UgdGhhdCByZWFsbHkgZG9lc24ndCBoYXZlIG11Y2ggaW4gY29tbW9uCi0gKiB3aXRoIHRoZSBvbGQgem9uZS1iYXNlZCBhcHByb2FjaCBhdCBhbGwuIEluIGZhY3QsIGl0J3Mgb25seSBsaXN0ZWQgaGVyZSBmb3IKLSAqIGdlbmVyYWwgY29tcGxldGVuZXNzLgotICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2JpdG1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9saXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgotI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vY3B1L3NxLmg+CiAKLXN0YXRpYyBMSVNUX0hFQUQoc3FfbWFwcGluZ19saXN0KTsKLXN0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3FfbWFwcGluZ19sb2NrKTsKK3N0cnVjdCBzcV9tYXBwaW5nOwogCi0vKioKLSAqIHNxX2ZsdXNoIC0gRmx1c2ggKHByZWZldGNoKSB0aGUgc3RvcmUgcXVldWUgY2FjaGUKLSAqIEBhZGRyOiB0aGUgc3RvcmUgcXVldWUgYWRkcmVzcyB0byBmbHVzaAotICoKLSAqIEV4ZWN1dGVzIGEgcHJlZmV0Y2ggaW5zdHJ1Y3Rpb24gb24gdGhlIHNwZWNpZmllZCBzdG9yZSBxdWV1ZSBjYWNoZSwKLSAqIHNvIHRoYXQgdGhlIGNhY2hlZCBkYXRhIGlzIHdyaXR0ZW4gdG8gcGh5c2ljYWwgbWVtb3J5LgotICovCi1pbmxpbmUgdm9pZCBzcV9mbHVzaCh2b2lkICphZGRyKQotewotCV9fYXNtX18gX192b2xhdGlsZV9fICgicHJlZiBAJTAiIDogOiAiciIgKGFkZHIpIDogIm1lbW9yeSIpOwotfQorc3RydWN0IHNxX21hcHBpbmcgeworCWNvbnN0IGNoYXIgKm5hbWU7CisKKwl1bnNpZ25lZCBsb25nIHNxX2FkZHI7CisJdW5zaWduZWQgbG9uZyBhZGRyOworCXVuc2lnbmVkIGludCBzaXplOworCisJc3RydWN0IHNxX21hcHBpbmcgKm5leHQ7Cit9OworCitzdGF0aWMgc3RydWN0IHNxX21hcHBpbmcgKnNxX21hcHBpbmdfbGlzdDsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soc3FfbWFwcGluZ19sb2NrKTsKK3N0YXRpYyBrbWVtX2NhY2hlX3QgKnNxX2NhY2hlOworc3RhdGljIHVuc2lnbmVkIGxvbmcgKnNxX2JpdG1hcDsKKworI2RlZmluZSBzdG9yZV9xdWV1ZV9iYXJyaWVyKCkJCQlcCitkbyB7CQkJCQkJXAorCSh2b2lkKWN0cmxfaW5sKFA0U0VHX1NUT1JFX1FVRSk7CVwKKwljdHJsX291dGwoMCwgUDRTRUdfU1RPUkVfUVVFICsgMCk7CVwKKwljdHJsX291dGwoMCwgUDRTRUdfU1RPUkVfUVVFICsgOCk7CVwKK30gd2hpbGUgKDApOwogCiAvKioKICAqIHNxX2ZsdXNoX3JhbmdlIC0gRmx1c2ggKHByZWZldGNoKSBhIHNwZWNpZmljIFNRIHJhbmdlCkBAIC01NiwxNTIgKzU5LDczIEBACiB2b2lkIHNxX2ZsdXNoX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqc3EgPSAodW5zaWduZWQgbG9uZyAqKXN0YXJ0OwotCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAKIAkvKiBGbHVzaCB0aGUgcXVldWVzICovCiAJZm9yIChsZW4gPj49IDU7IGxlbi0tOyBzcSArPSA4KQotCQlzcV9mbHVzaCgodm9pZCAqKXNxKTsKKwkJcHJlZmV0Y2h3KCh2b2lkICopc3EpOwogCiAJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLwotCWR1bW15ID0gY3RybF9pbmwoUDRTRUdfU1RPUkVfUVVFKTsKLQotCWN0cmxfb3V0bCgwLCBQNFNFR19TVE9SRV9RVUUgKyAwKTsKLQljdHJsX291dGwoMCwgUDRTRUdfU1RPUkVfUVVFICsgOCk7CisJc3RvcmVfcXVldWVfYmFycmllcigpOwogfQogCi1zdGF0aWMgc3RydWN0IHNxX21hcHBpbmcgKl9fc3FfYWxsb2NfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZpcnQsIHVuc2lnbmVkIGxvbmcgcGh5cywgdW5zaWduZWQgbG9uZyBzaXplLCBjb25zdCBjaGFyICpuYW1lKQorc3RhdGljIGlubGluZSB2b2lkIHNxX21hcHBpbmdfbGlzdF9hZGQoc3RydWN0IHNxX21hcHBpbmcgKm1hcCkKIHsKLQlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOworCXN0cnVjdCBzcV9tYXBwaW5nICoqcCwgKnRtcDsKIAotCWlmICh2aXJ0ICsgc2l6ZSA+IFNRX0FERFJNQVgpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9TUEMpOworCXNwaW5fbG9ja19pcnEoJnNxX21hcHBpbmdfbG9jayk7CiAKLQltYXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3FfbWFwcGluZyksIEdGUF9LRVJORUwpOwotCWlmICghbWFwKQotCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKwlwID0gJnNxX21hcHBpbmdfbGlzdDsKKwl3aGlsZSAoKHRtcCA9ICpwKSAhPSBOVUxMKQorCQlwID0gJnRtcC0+bmV4dDsKIAotCUlOSVRfTElTVF9IRUFEKCZtYXAtPmxpc3QpOworCW1hcC0+bmV4dCA9IHRtcDsKKwkqcCA9IG1hcDsKIAotCW1hcC0+c3FfYWRkcgk9IHZpcnQ7Ci0JbWFwLT5hZGRyCT0gcGh5czsKLQltYXAtPnNpemUJPSBzaXplICsgMTsKLQltYXAtPm5hbWUJPSBuYW1lOwotCi0JbGlzdF9hZGQoJm1hcC0+bGlzdCwgJnNxX21hcHBpbmdfbGlzdCk7Ci0KLQlyZXR1cm4gbWFwOworCXNwaW5fdW5sb2NrX2lycSgmc3FfbWFwcGluZ19sb2NrKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19zcV9nZXRfbmV4dF9hZGRyKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgc3FfbWFwcGluZ19saXN0X2RlbChzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwKQogewotCWlmICghbGlzdF9lbXB0eSgmc3FfbWFwcGluZ19saXN0KSkgewotCQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3MsICp0bXA7CisJc3RydWN0IHNxX21hcHBpbmcgKipwLCAqdG1wOwogCi0JCS8qCi0JCSAqIFJlYWQgb25lIG9mZiB0aGUgbGlzdCBoZWFkLCBhcyBpdCB3aWxsIGhhdmUgdGhlIGhpZ2hlc3QKLQkJICogbWFwcGVkIGFsbG9jYXRpb24uIFNldCB0aGUgbmV4dCBvbmUgdXAgcmlnaHQgYWJvdmUgaXQuCi0JCSAqCi0JCSAqIFRoaXMgaXMgc29tZXdoYXQgc3ViLW9wdGltYWwsIGFzIHdlIGRvbid0IGxvb2sgYXQKLQkJICogZ2FwcyBiZXR3ZWVuIGFsbG9jYXRpb25zIG9yIGFueXRoaW5nIGxvd2VyIHRoZW4gdGhlCi0JCSAqIGhpZ2hlc3QtbGV2ZWwgYWxsb2NhdGlvbi4KLQkJICoKLQkJICogSG93ZXZlciwgaW4gdGhlIGludGVyZXN0IG9mIHBlcmZvcm1hbmNlIGFuZCB0aGUgZ2VuZXJhbAotCQkgKiBsYWNrIG9mIGRlc2lyZSB0byBkbyBjb25zdGFudCBsaXN0IHJlYmFsYW5jaW5nLCB3ZSBkb24ndAotCQkgKiB3b3JyeSBhYm91dCBpdC4KLQkJICovCi0JCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJnNxX21hcHBpbmdfbGlzdCkgewotCQkJc3RydWN0IHNxX21hcHBpbmcgKmVudHJ5OworCXNwaW5fbG9ja19pcnEoJnNxX21hcHBpbmdfbG9jayk7CiAKLQkJCWVudHJ5ID0gbGlzdF9lbnRyeShwb3MsIHR5cGVvZigqZW50cnkpLCBsaXN0KTsKLQotCQkJcmV0dXJuIGVudHJ5LT5zcV9hZGRyICsgZW50cnktPnNpemU7CisJZm9yIChwID0gJnNxX21hcHBpbmdfbGlzdDsgKHRtcCA9ICpwKTsgcCA9ICZ0bXAtPm5leHQpCisJCWlmICh0bXAgPT0gbWFwKSB7CisJCQkqcCA9IHRtcC0+bmV4dDsKKwkJCWJyZWFrOwogCQl9Ci0JfQogCi0JcmV0dXJuIFA0U0VHX1NUT1JFX1FVRTsKKwlzcGluX3VubG9ja19pcnEoJnNxX21hcHBpbmdfbG9jayk7CiB9CiAKLS8qKgotICogX19zcV9yZW1hcCAtIFBlcmZvcm0gYSB0cmFuc2xhdGlvbiBmcm9tIHRoZSBTUSB0byBhIHBoeXMgYWRkcgotICogQG1hcDogc3EgbWFwcGluZyBjb250YWluaW5nIHBoeXMgYW5kIHN0b3JlIHF1ZXVlIGFkZHJlc3Nlcy4KLSAqCi0gKiBNYXBzIHRoZSBzdG9yZSBxdWV1ZSBhZGRyZXNzIHNwZWNpZmllZCBpbiB0aGUgbWFwcGluZyB0byB0aGUgcGh5c2ljYWwKLSAqIGFkZHJlc3Mgc3BlY2lmaWVkIGluIHRoZSBtYXBwaW5nLgotICovCi1zdGF0aWMgc3RydWN0IHNxX21hcHBpbmcgKl9fc3FfcmVtYXAoc3RydWN0IHNxX21hcHBpbmcgKm1hcCkKK3N0YXRpYyBpbnQgX19zcV9yZW1hcChzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHB0ZWgsIHB0ZWw7CisjaWYgZGVmaW5lZChDT05GSUdfTU1VKQogCXN0cnVjdCB2bV9zdHJ1Y3QgKnZtYTsKLQlwZ3Byb3RfdCBwZ3Byb3Q7CiAKKwl2bWEgPSBfX2dldF92bV9hcmVhKG1hcC0+c2l6ZSwgVk1fQUxMT0MsIG1hcC0+c3FfYWRkciwgU1FfQUREUk1BWCk7CisJaWYgKCF2bWEpCisJCXJldHVybiAtRU5PTUVNOworCisJdm1hLT5waHlzX2FkZHIgPSBtYXAtPmFkZHI7CisKKwlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIsIHZtYS0+cGh5c19hZGRyLAorCQkJICAgICBtYXAtPnNpemUsIGZsYWdzKSkgeworCQl2dW5tYXAodm1hLT5hZGRyKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorI2Vsc2UKIAkvKgogCSAqIFdpdGhvdXQgYW4gTU1VIChvciB3aXRoIGl0IHR1cm5lZCBvZmYpLCB0aGlzIGlzIG11Y2ggbW9yZQogCSAqIHN0cmFpZ2h0Zm9yd2FyZCwgYXMgd2UgY2FuIGp1c3QgbG9hZCB1cCBlYWNoIHF1ZXVlJ3MgUUFDUiB3aXRoCiAJICogdGhlIHBoeXNpY2FsIGFkZHJlc3MgYXBwcm9wcmlhdGVseSBtYXNrZWQuCiAJICovCi0KIAljdHJsX291dGwoKChtYXAtPmFkZHIgPj4gMjYpIDw8IDIpICYgMHgxYywgU1FfUUFDUjApOwogCWN0cmxfb3V0bCgoKG1hcC0+YWRkciA+PiAyNikgPDwgMikgJiAweDFjLCBTUV9RQUNSMSk7CisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NTVUKLQkvKgotCSAqIFdpdGggYW4gTU1VIG9uIHRoZSBvdGhlciBoYW5kLCB0aGluZ3MgYXJlIHNsaWdodGx5IG1vcmUgaW52b2x2ZWQuCi0JICogTmFtZWx5LCB3ZSBoYXZlIHRvIGhhdmUgYSBkaXJlY3QgbWFwcGluZyBiZXR3ZWVuIHRoZSBTUSBhZGRyIGFuZAotCSAqIHRoZSBhc3NvY2lhdGVkIHBoeXNpY2FsIGFkZHJlc3MgaW4gdGhlIFVUTEIgYnkgd2F5IG9mIHNldHRpbmcgdXAKLQkgKiBhIHZpcnQ8LT5waHlzIHRyYW5zbGF0aW9uIGJ5IGhhbmQuIFdlIGRvIHRoaXMgYnkgc2ltcGx5IHNwZWNpZnlpbmcKLQkgKiB0aGUgU1EgYWRkciBpbiBVVExCLlZQTiBhbmQgdGhlIGFzc29jaWF0ZWQgcGh5c2ljYWwgYWRkcmVzcyBpbgotCSAqIFVUTEIuUFBOLgotCSAqCi0JICogTm90YWJseSwgZXZlbiB0aG91Z2ggdGhpcyBpcyBhIHNwZWNpYWwgY2FzZSB0cmFuc2xhdGlvbiwgYW5kIHNvbWUKLQkgKiBvZiB0aGUgY29uZmlndXJhdGlvbiBiaXRzIGFyZSBtZWFuaW5nbGVzcywgd2UncmUgc3RpbGwgcmVxdWlyZWQKLQkgKiB0byBoYXZlIGEgdmFsaWQgQVNJRCBjb250ZXh0IGluIFBURUguCi0JICoKLQkgKiBXZSBjb3VsZCBhbHNvIHByb2JhYmx5IGdldCBieSB3aXRob3V0IGV4cGxpY2l0bHkgc2V0dGluZyBQVEVBLCBidXQKLQkgKiB3ZSBkbyBpdCBoZXJlIGp1c3QgZm9yIGdvb2QgbWVhc3VyZS4KLQkgKi8KLQlzcGluX2xvY2tfaXJxc2F2ZSgmc3FfbWFwcGluZ19sb2NrLCBmbGFncyk7Ci0KLQlwdGVoID0gbWFwLT5zcV9hZGRyOwotCWN0cmxfb3V0bCgocHRlaCAmIE1NVV9WUE5fTUFTSykgfCBnZXRfYXNpZCgpLCBNTVVfUFRFSCk7Ci0KLQlwdGVsID0gbWFwLT5hZGRyICYgUEFHRV9NQVNLOwotCWN0cmxfb3V0bCgoKHB0ZWwgPj4gMjgpICYgMHhlKSB8IChwdGVsICYgMHgxKSwgTU1VX1BURUEpOwotCi0JcGdwcm90ID0gcGdwcm90X25vbmNhY2hlZChQQUdFX0tFUk5FTCk7Ci0KLQlwdGVsICY9IF9QQUdFX0ZMQUdTX0hBUkRXQVJFX01BU0s7Ci0JcHRlbCB8PSBwZ3Byb3RfdmFsKHBncHJvdCk7Ci0JY3RybF9vdXRsKHB0ZWwsIE1NVV9QVEVMKTsKLQotCV9fYXNtX18gX192b2xhdGlsZV9fICgibGR0bGIiIDogOiA6ICJtZW1vcnkiKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNxX21hcHBpbmdfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiBOZXh0LCB3ZSBuZWVkIHRvIG1hcCBvdXJzZWx2ZXMgaW4gdGhlIGtlcm5lbCBwYWdlIHRhYmxlLCBzbyB0aGF0Ci0JICogZnV0dXJlIGFjY2Vzc2VzIGFmdGVyIGEgVExCIGZsdXNoIHdpbGwgYmUgaGFuZGxlZCB3aGVuIHdlIHRha2UgYQotCSAqIHBhZ2UgZmF1bHQuCi0JICoKLQkgKiBUaGVvcmV0aWNhbGx5IHdlIGNvdWxkIGp1c3QgZG8gdGhpcyBkaXJlY3RseSBhbmQgbm90IHdvcnJ5IGFib3V0Ci0JICogc2V0dGluZyB1cCB0aGUgdHJhbnNsYXRpb24gYnkgaGFuZCBhaGVhZCBvZiB0aW1lLCBidXQgZm9yIHRoZQotCSAqIGNhc2VzIHdoZXJlIHdlIHdhbnQgYSBvbmUtc2hvdCBTUSBtYXBwaW5nIGZvbGxvd2VkIGJ5IGEgcXVpY2sKLQkgKiB3cml0ZW91dCBiZWZvcmUgd2UgaGl0IHRoZSBUTEIgZmx1c2gsIHdlIGRvIGl0IGFueXdheXMuIFRoaXMgd2F5Ci0JICogd2UgYXQgbGVhc3Qgc2F2ZSBvdXJzZWx2ZXMgdGhlIGluaXRpYWwgcGFnZSBmYXVsdCBvdmVyaGVhZC4KLQkgKi8KLQl2bWEgPSBfX2dldF92bV9hcmVhKG1hcC0+c2l6ZSwgVk1fQUxMT0MsIG1hcC0+c3FfYWRkciwgU1FfQUREUk1BWCk7Ci0JaWYgKCF2bWEpCi0JCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwotCi0Jdm1hLT5waHlzX2FkZHIgPSBtYXAtPmFkZHI7Ci0KLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZyl2bWEtPmFkZHIsIHZtYS0+cGh5c19hZGRyLAotCQkJICAgICBtYXAtPnNpemUsIHBncHJvdF92YWwocGdwcm90KSkpIHsKLQkJdnVubWFwKHZtYS0+YWRkcik7Ci0JCXJldHVybiBOVUxMOwotCX0KLSNlbmRpZiAvKiBDT05GSUdfTU1VICovCi0KLQlyZXR1cm4gbWFwOworCXJldHVybiAwOwogfQogCiAvKioKQEAgLTIwOSw0MiArMTMzLDY1IEBACiAgKiBAcGh5czogUGh5c2ljYWwgYWRkcmVzcyBvZiBtYXBwaW5nLgogICogQHNpemU6IExlbmd0aCBvZiBtYXBwaW5nLgogICogQG5hbWU6IFVzZXIgaW52b2tpbmcgbWFwcGluZy4KKyAqIEBmbGFnczogUHJvdGVjdGlvbiBmbGFncy4KICAqCiAgKiBSZW1hcHMgdGhlIHBoeXNpY2FsIGFkZHJlc3MgQHBoeXMgdGhyb3VnaCB0aGUgbmV4dCBhdmFpbGFibGUgc3RvcmUgcXVldWUKICAqIGFkZHJlc3Mgb2YgQHNpemUgbGVuZ3RoLiBAbmFtZSBpcyBsb2dnZWQgYXQgYm9vdCB0aW1lIGFzIHdlbGwgYXMgdGhyb3VnaAotICogdGhlIHByb2NmcyBpbnRlcmZhY2UuCi0gKgotICogQSBwcmUtYWxsb2NhdGVkIGFuZCBmaWxsZWQgc3FfbWFwcGluZyBwb2ludGVyIGlzIHJldHVybmVkLCBhbmQgbXVzdCBiZQotICogY2xlYW5lZCB1cCB3aXRoIGEgY2FsbCB0byBzcV91bm1hcCgpIHdoZW4gdGhlIHVzZXIgaXMgZG9uZSB3aXRoIHRoZQotICogbWFwcGluZy4KKyAqIHRoZSBzeXNmcyBpbnRlcmZhY2UuCiAgKi8KLXN0cnVjdCBzcV9tYXBwaW5nICpzcV9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lKQordW5zaWduZWQgbG9uZyBzcV9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGludCBzaXplLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOwotCXVuc2lnbmVkIGxvbmcgdmlydCwgZW5kOworCXVuc2lnbmVkIGxvbmcgZW5kOwogCXVuc2lnbmVkIGludCBwc3o7CisJaW50IHJldCwgcGFnZTsKIAogCS8qIERvbid0IGFsbG93IHdyYXBhcm91bmQgb3IgemVybyBzaXplICovCiAJZW5kID0gcGh5cyArIHNpemUgLSAxOwotCWlmICghc2l6ZSB8fCBlbmQgPCBwaHlzKQotCQlyZXR1cm4gTlVMTDsKKwlpZiAodW5saWtlbHkoIXNpemUgfHwgZW5kIDwgcGh5cykpCisJCXJldHVybiAtRUlOVkFMOwogCS8qIERvbid0IGFsbG93IGFueW9uZSB0byByZW1hcCBub3JtYWwgbWVtb3J5Li4gKi8KLQlpZiAocGh5cyA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCi0JCXJldHVybiBOVUxMOworCWlmICh1bmxpa2VseShwaHlzIDwgdmlydF90b19waHlzKGhpZ2hfbWVtb3J5KSkpCisJCXJldHVybiAtRUlOVkFMOwogCiAJcGh5cyAmPSBQQUdFX01BU0s7CisJc2l6ZSA9IFBBR0VfQUxJR04oZW5kICsgMSkgLSBwaHlzOwogCi0Jc2l6ZSAgPSBQQUdFX0FMSUdOKGVuZCArIDEpIC0gcGh5czsKLQl2aXJ0ICA9IF9fc3FfZ2V0X25leHRfYWRkcigpOwotCXBzeiAgID0gKHNpemUgKyAoUEFHRV9TSVpFIC0gMSkpIC8gUEFHRV9TSVpFOwotCW1hcCAgID0gX19zcV9hbGxvY19tYXBwaW5nKHZpcnQsIHBoeXMsIHNpemUsIG5hbWUpOworCW1hcCA9IGttZW1fY2FjaGVfYWxsb2Moc3FfY2FjaGUsIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghbWFwKSkKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQlwcmludGsoInNxcmVtYXA6ICUxNXMgIFslNGQgcGFnZSVzXSAgdmEgMHglMDhseCAgIHBhIDB4JTA4bHhcbiIsCi0JICAgICAgIG1hcC0+bmFtZSA/IG1hcC0+bmFtZSA6ICI/Pz8iLAotCSAgICAgICBwc3osIHBzeiA9PSAxID8gIiAiIDogInMiLAotCSAgICAgICBtYXAtPnNxX2FkZHIsIG1hcC0+YWRkcik7CisJbWFwLT5hZGRyID0gcGh5czsKKwltYXAtPnNpemUgPSBzaXplOworCW1hcC0+bmFtZSA9IG5hbWU7CiAKLQlyZXR1cm4gX19zcV9yZW1hcChtYXApOworCXBhZ2UgPSBiaXRtYXBfZmluZF9mcmVlX3JlZ2lvbihzcV9iaXRtYXAsIDB4MDQwMDAwMDAsCisJCQkJICAgICAgIGdldF9vcmRlcihtYXAtPnNpemUpKTsKKwlpZiAodW5saWtlbHkocGFnZSA8IDApKSB7CisJCXJldCA9IC1FTk9TUEM7CisJCWdvdG8gb3V0OworCX0KKworCW1hcC0+c3FfYWRkciA9IFA0U0VHX1NUT1JFX1FVRSArIChwYWdlIDw8IFBBR0VfU0hJRlQpOworCisJcmV0ID0gX19zcV9yZW1hcChtYXAsIGZsYWdzKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKworCXBzeiA9IChzaXplICsgKFBBR0VfU0laRSAtIDEpKSA+PiBQQUdFX1NISUZUOworCXByX2luZm8oInNxcmVtYXA6ICUxNXMgIFslNGQgcGFnZSVzXSAgdmEgMHglMDhseCAgIHBhIDB4JTA4bHhcbiIsCisJCWxpa2VseShtYXAtPm5hbWUpID8gbWFwLT5uYW1lIDogIj8/PyIsCisJCXBzeiwgcHN6ID09IDEgPyAiICIgOiAicyIsCisJCW1hcC0+c3FfYWRkciwgbWFwLT5hZGRyKTsKKworCXNxX21hcHBpbmdfbGlzdF9hZGQobWFwKTsKKworCXJldHVybiBtYXAtPnNxX2FkZHI7CisKK291dDoKKwlrbWVtX2NhY2hlX2ZyZWUoc3FfY2FjaGUsIG1hcCk7CisJcmV0dXJuIHJldDsKIH0KIAogLyoqCkBAIC0yNTUsMTg4ICsyMDIsMTk4IEBACiAgKiBzcV9yZW1hcCgpLiBBbHNvIGZyZWVzIHVwIHRoZSBwdGUgdGhhdCB3YXMgcHJldmlvdXNseSBpbnNlcnRlZCBpbnRvCiAgKiB0aGUga2VybmVsIHBhZ2UgdGFibGUgYW5kIGRpc2NhcmRzIHRoZSBVVExCIHRyYW5zbGF0aW9uLgogICovCi12b2lkIHNxX3VubWFwKHN0cnVjdCBzcV9tYXBwaW5nICptYXApCit2b2lkIHNxX3VubWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIpCiB7Ci0JaWYgKG1hcC0+c3FfYWRkciA+ICh1bnNpZ25lZCBsb25nKWhpZ2hfbWVtb3J5KQotCQl2ZnJlZSgodm9pZCAqKShtYXAtPnNxX2FkZHIgJiBQQUdFX01BU0spKTsKKwlzdHJ1Y3Qgc3FfbWFwcGluZyAqKnAsICptYXA7CisJc3RydWN0IHZtX3N0cnVjdCAqdm1hOworCWludCBwYWdlOwogCi0JbGlzdF9kZWwoJm1hcC0+bGlzdCk7Ci0Ja2ZyZWUobWFwKTsKLX0KKwlmb3IgKHAgPSAmc3FfbWFwcGluZ19saXN0OyAobWFwID0gKnApOyBwID0gJm1hcC0+bmV4dCkKKwkJaWYgKG1hcC0+c3FfYWRkciA9PSB2YWRkcikKKwkJCWJyZWFrOwogCi0vKioKLSAqIHNxX2NsZWFyIC0gQ2xlYXIgYSBzdG9yZSBxdWV1ZSByYW5nZQotICogQGFkZHI6IEFkZHJlc3MgdG8gc3RhcnQgY2xlYXJpbmcgZnJvbS4KLSAqIEBsZW46IExlbmd0aCB0byBjbGVhci4KLSAqCi0gKiBBIHF1aWNrIHplcm8tZmlsbCBpbXBsZW1lbnRhdGlvbiBmb3IgY2xlYXJpbmcgb3V0IG1lbW9yeSB0aGF0IGhhcyBiZWVuCi0gKiByZW1hcHBlZCB0aHJvdWdoIHRoZSBzdG9yZSBxdWV1ZXMuCi0gKi8KLXZvaWQgc3FfY2xlYXIodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCBpOwotCi0JLyogQ2xlYXIgb3V0IGJvdGggcXVldWVzIGxpbmVhcmx5ICovCi0JZm9yIChpID0gMDsgaSA8IDg7IGkrKykgewotCQljdHJsX291dGwoMCwgYWRkciArIGkgKyAwKTsKLQkJY3RybF9vdXRsKDAsIGFkZHIgKyBpICsgOCk7CisJaWYgKHVubGlrZWx5KCFtYXApKSB7CisJCXByaW50aygiJXM6IGJhZCBzdG9yZSBxdWV1ZSBhZGRyZXNzIDB4JTA4bHhcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIHZhZGRyKTsKKwkJcmV0dXJuOwogCX0KIAotCXNxX2ZsdXNoX3JhbmdlKGFkZHIsIGxlbik7Ci19CisJcGFnZSA9IChtYXAtPnNxX2FkZHIgLSBQNFNFR19TVE9SRV9RVUUpID4+IFBBR0VfU0hJRlQ7CisJYml0bWFwX3JlbGVhc2VfcmVnaW9uKHNxX2JpdG1hcCwgcGFnZSwgZ2V0X29yZGVyKG1hcC0+c2l6ZSkpOwogCi0vKioKLSAqIHNxX3ZtYV91bm1hcCAtIFVubWFwIGEgVk1BIHJhbmdlCi0gKiBAYXJlYTogVk1BIGNvbnRhaW5pbmcgcmFuZ2UuCi0gKiBAYWRkcjogU3RhcnQgb2YgcmFuZ2UuCi0gKiBAbGVuOiBMZW5ndGggb2YgcmFuZ2UuCi0gKgotICogU2VhcmNoZXMgdGhlIHNxX21hcHBpbmdfbGlzdCBmb3IgYSBtYXBwaW5nIG1hdGNoaW5nIHRoZSBzcSBhZGRyIEBhZGRyLAotICogYW5kIHN1YnNlcXVlbnRseSBmcmVlcyB1cCB0aGUgZW50cnkuIEZ1cnRoZXIgY2xlYW51cCBpcyBkb25lIGJ5IGdlbmVyaWMKLSAqIGNvZGUuCi0gKi8KLXN0YXRpYyB2b2lkIHNxX3ZtYV91bm1hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEsCi0JCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuKQotewotCXN0cnVjdCBsaXN0X2hlYWQgKnBvcywgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIHRtcCwgJnNxX21hcHBpbmdfbGlzdCkgewotCQlzdHJ1Y3Qgc3FfbWFwcGluZyAqZW50cnk7Ci0KLQkJZW50cnkgPSBsaXN0X2VudHJ5KHBvcywgdHlwZW9mKCplbnRyeSksIGxpc3QpOwotCi0JCWlmIChlbnRyeS0+c3FfYWRkciA9PSBhZGRyKSB7Ci0JCQkvKgotCQkJICogV2UgY291bGQgcHJvYmFibHkgZ2V0IGF3YXkgd2l0aG91dCBkb2luZyB0aGUgdGxiIGZsdXNoCi0JCQkgKiBoZXJlLCBhcyBnZW5lcmljIGNvZGUgc2hvdWxkIHRha2UgY2FyZSBvZiBtb3N0IG9mIHRoaXMKLQkJCSAqIHdoZW4gdW5tYXBwaW5nIHRoZSByZXN0IG9mIHRoZSBWTUEgcmFuZ2UgZm9yIHVzLiBMZWF2ZQotCQkJICogaXQgaW4gZm9yIGFkZGVkIHNhbml0eSBmb3IgdGhlIHRpbWUgYmVpbmcuLgotCQkJICovCi0JCQlfX2ZsdXNoX3RsYl9wYWdlKGdldF9hc2lkKCksIGVudHJ5LT5zcV9hZGRyICYgUEFHRV9NQVNLKTsKLQotCQkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKLQkJCWtmcmVlKGVudHJ5KTsKLQotCQkJcmV0dXJuOwotCQl9CisjaWZkZWYgQ09ORklHX01NVQorCXZtYSA9IHJlbW92ZV92bV9hcmVhKCh2b2lkICopKG1hcC0+c3FfYWRkciAmIFBBR0VfTUFTSykpOworCWlmICghdm1hKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJhZCBhZGRyZXNzIDB4JTA4bHhcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIG1hcC0+c3FfYWRkcik7CisJCXJldHVybjsKIAl9CisjZW5kaWYKKworCXNxX21hcHBpbmdfbGlzdF9kZWwobWFwKTsKKworCWttZW1fY2FjaGVfZnJlZShzcV9jYWNoZSwgbWFwKTsKIH0KIAotLyoqCi0gKiBzcV92bWFfc3luYyAtIFN5bmMgYSBWTUEgcmFuZ2UKLSAqIEBhcmVhOiBWTUEgY29udGFpbmluZyByYW5nZS4KLSAqIEBzdGFydDogU3RhcnQgb2YgcmFuZ2UuCi0gKiBAbGVuOiBMZW5ndGggb2YgcmFuZ2UuCi0gKiBAZmxhZ3M6IEFkZGl0aW9uYWwgZmxhZ3MuCisvKgorICogTmVlZGxlc3NseSBjb21wbGV4IHN5c2ZzIGludGVyZmFjZS4gVW5mb3J0dW5hdGVseSBpdCBkb2Vzbid0IHNlZW0gbGlrZQorICogdGhlcmUgaXMgYW55IG90aGVyIGVhc3kgd2F5IHRvIGFkZCB0aGluZ3Mgb24gYSBwZXItY3B1IGJhc2lzIHdpdGhvdXQKKyAqIHB1dHRpbmcgdGhlIGRpcmVjdG9yeSBlbnRyaWVzIHNvbWV3aGVyZSBzdHVwaWQgYW5kIGhhdmluZyB0byBjcmVhdGUKKyAqIGxpbmtzIGluIHN5c2ZzIGJ5IGhhbmQgYmFjayBpbiB0byB0aGUgcGVyLWNwdSBkaXJlY3Rvcmllcy4KICAqCi0gKiBTeW5jaHJvbml6ZXMgYW4gc3EgbWFwcGVkIHJhbmdlIGJ5IGZsdXNoaW5nIHRoZSBzdG9yZSBxdWV1ZSBjYWNoZSBmb3IKLSAqIHRoZSBkdXJhdGlvbiBvZiB0aGUgbWFwcGluZy4KLSAqCi0gKiBVc2VkIGludGVybmFsbHkgZm9yIHVzZXIgbWFwcGluZ3MsIHdoaWNoIG11c3QgdXNlIG1zeW5jKCkgdG8gcHJlZmV0Y2gKLSAqIHRoZSBzdG9yZSBxdWV1ZSBjYWNoZS4KKyAqIFNvbWUgZGF5IHdlIG1heSB3YW50IHRvIGhhdmUgYW4gYWRkaXRpb25hbCBhYnN0cmFjdGlvbiBwZXIgc3RvcmUKKyAqIHF1ZXVlLCBidXQgY29uc2lkZXJpbmcgdGhlIGtvYmplY3QgaGVsbCB3ZSBhbHJlYWR5IGhhdmUgdG8gZGVhbCB3aXRoLAorICogaXQncyBzaW1wbHkgbm90IHdvcnRoIHRoZSB0cm91YmxlLgogICovCi1zdGF0aWMgaW50IHNxX3ZtYV9zeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqYXJlYSwKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemVfdCBsZW4sIHVuc2lnbmVkIGludCBmbGFncykKLXsKLQlzcV9mbHVzaF9yYW5nZShzdGFydCwgbGVuKTsKK3N0YXRpYyBzdHJ1Y3Qga29iamVjdCAqc3Ffa29iamVjdFtOUl9DUFVTXTsKIAotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHZtX29wZXJhdGlvbnNfc3RydWN0IHNxX3ZtYV9vcHMgPSB7Ci0JLnVubWFwCT0gc3Ffdm1hX3VubWFwLAotCS5zeW5jCT0gc3Ffdm1hX3N5bmMsCitzdHJ1Y3Qgc3Ffc3lzZnNfYXR0ciB7CisJc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworCXNzaXplX3QgKCpzaG93KShjaGFyICpidWYpOworCXNzaXplX3QgKCpzdG9yZSkoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOwogfTsKIAotLyoqCi0gKiBzcV9tbWFwIC0gbW1hcCgpIGZvciAvZGV2L2NwdS9zcQotICogQGZpbGU6IHVudXNlZC4KLSAqIEB2bWE6IFZNQSB0byByZW1hcC4KLSAqCi0gKiBSZW1hcCB0aGUgc3BlY2lmaWVkIHZtYSBAdm1hIHRocm91Z2ggdGhlIHN0b3JlIHF1ZXVlcywgYW5kIHNldHVwIGFzc29jaWF0ZWQKLSAqIGluZm9ybWF0aW9uIGZvciB0aGUgbmV3IG1hcHBpbmcuIEFsc28gYnVpbGQgdXAgdGhlIHBhZ2UgdGFibGVzIGZvciB0aGUgbmV3Ci0gKiBhcmVhLgotICovCi1zdGF0aWMgaW50IHNxX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQorI2RlZmluZSB0b19zcV9zeXNmc19hdHRyKGF0dHIpCWNvbnRhaW5lcl9vZihhdHRyLCBzdHJ1Y3Qgc3Ffc3lzZnNfYXR0ciwgYXR0cikKKworc3RhdGljIHNzaXplX3Qgc3Ffc3lzZnNfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGF0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgICAgY2hhciAqYnVmKQogewotCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwotCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKLQlzdHJ1Y3Qgc3FfbWFwcGluZyAqbWFwOworCXN0cnVjdCBzcV9zeXNmc19hdHRyICpzYXR0ciA9IHRvX3NxX3N5c2ZzX2F0dHIoYXR0cik7CiAKLQkvKgotCSAqIFdlJ3JlIG5vdCBpbnRlcmVzdGVkIGluIGFueSBhcmJpdHJhcnkgdmlydHVhbCBhZGRyZXNzIHRoYXQgaGFzCi0JICogYmVlbiBzdHVjayBpbiB0aGUgVk1BLCBhcyB3ZSBhbHJlYWR5IGtub3cgd2hhdCBhZGRyZXNzZXMgd2UKLQkgKiB3YW50LiBTYXZlIG9mZiB0aGUgc2l6ZSwgYW5kIHJlcG9zaXRpb24gdGhlIFZNQSB0byBiZWdpbiBhdAotCSAqIHRoZSBuZXh0IGF2YWlsYWJsZSBzcSBhZGRyZXNzLgotCSAqLwotCXZtYS0+dm1fc3RhcnQgPSBfX3NxX2dldF9uZXh0X2FkZHIoKTsKLQl2bWEtPnZtX2VuZCAgID0gdm1hLT52bV9zdGFydCArIHNpemU7CisJaWYgKGxpa2VseShzYXR0ci0+c2hvdykpCisJCXJldHVybiBzYXR0ci0+c2hvdyhidWYpOwogCi0Jdm1hLT52bV9wYWdlX3Byb3QgPSBwZ3Byb3Rfbm9uY2FjaGVkKHZtYS0+dm1fcGFnZV9wcm90KTsKLQotCXZtYS0+dm1fZmxhZ3MgfD0gVk1fSU8gfCBWTV9SRVNFUlZFRDsKLQotCW1hcCA9IF9fc3FfYWxsb2NfbWFwcGluZyh2bWEtPnZtX3N0YXJ0LCBvZmZzZXQsIHNpemUsICJVc2Vyc3BhY2UiKTsKLQotCWlmIChpb19yZW1hcF9wZm5fcmFuZ2Uodm1hLCBtYXAtPnNxX2FkZHIsIG1hcC0+YWRkciA+PiBQQUdFX1NISUZULAotCQkJCXNpemUsIHZtYS0+dm1fcGFnZV9wcm90KSkKLQkJcmV0dXJuIC1FQUdBSU47Ci0KLQl2bWEtPnZtX29wcyA9ICZzcV92bWFfb3BzOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU87CiB9CiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUwotc3RhdGljIGludCBzcV9tYXBwaW5nX3JlYWRfcHJvYyhjaGFyICpidWYsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCWludCBsZW4sIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIHNzaXplX3Qgc3Ffc3lzZnNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBhdHRyaWJ1dGUgKmF0dHIsCisJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwb3M7CisJc3RydWN0IHNxX3N5c2ZzX2F0dHIgKnNhdHRyID0gdG9fc3Ffc3lzZnNfYXR0cihhdHRyKTsKKworCWlmIChsaWtlbHkoc2F0dHItPnN0b3JlKSkKKwkJcmV0dXJuIHNhdHRyLT5zdG9yZShidWYsIGNvdW50KTsKKworCXJldHVybiAtRUlPOworfQorCitzdGF0aWMgc3NpemVfdCBtYXBwaW5nX3Nob3coY2hhciAqYnVmKQoreworCXN0cnVjdCBzcV9tYXBwaW5nICoqbGlzdCwgKmVudHJ5OwogCWNoYXIgKnAgPSBidWY7CiAKLQlsaXN0X2Zvcl9lYWNoX3ByZXYocG9zLCAmc3FfbWFwcGluZ19saXN0KSB7Ci0JCXN0cnVjdCBzcV9tYXBwaW5nICplbnRyeTsKLQotCQllbnRyeSA9IGxpc3RfZW50cnkocG9zLCB0eXBlb2YoKmVudHJ5KSwgbGlzdCk7Ci0KLQkJcCArPSBzcHJpbnRmKHAsICIlMDhseC0lMDhseCBbJTA4bHhdOiAlc1xuIiwgZW50cnktPnNxX2FkZHIsCi0JCQkgICAgIGVudHJ5LT5zcV9hZGRyICsgZW50cnktPnNpemUgLSAxLCBlbnRyeS0+YWRkciwKLQkJCSAgICAgZW50cnktPm5hbWUpOwotCX0KKwlmb3IgKGxpc3QgPSAmc3FfbWFwcGluZ19saXN0OyAoZW50cnkgPSAqbGlzdCk7IGxpc3QgPSAmZW50cnktPm5leHQpCisJCXAgKz0gc3ByaW50ZihwLCAiJTA4bHgtJTA4bHggWyUwOGx4XTogJXNcbiIsCisJCQkgICAgIGVudHJ5LT5zcV9hZGRyLCBlbnRyeS0+c3FfYWRkciArIGVudHJ5LT5zaXplLAorCQkJICAgICBlbnRyeS0+YWRkciwgZW50cnktPm5hbWUpOwogCiAJcmV0dXJuIHAgLSBidWY7CiB9Ci0jZW5kaWYKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgc3FfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm1tYXAJCT0gc3FfbW1hcCwKK3N0YXRpYyBzc2l6ZV90IG1hcHBpbmdfc3RvcmUoY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJdW5zaWduZWQgbG9uZyBiYXNlID0gMCwgbGVuID0gMDsKKworCXNzY2FuZihidWYsICIlbHggJWx4IiwgJmJhc2UsICZsZW4pOworCWlmICghYmFzZSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAobGlrZWx5KGxlbikpIHsKKwkJaW50IHJldCA9IHNxX3JlbWFwKGJhc2UsIGxlbiwgIlVzZXJzcGFjZSIsCisJCQkJICAgcGdwcm90X3ZhbChQQUdFX1NIQVJFRCkpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfSBlbHNlCisJCXNxX3VubWFwKGJhc2UpOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3RydWN0IHNxX3N5c2ZzX2F0dHIgbWFwcGluZ19hdHRyID0KKwlfX0FUVFIobWFwcGluZywgMDY0NCwgbWFwcGluZ19zaG93LCBtYXBwaW5nX3N0b3JlKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNxX3N5c2ZzX2F0dHJzW10gPSB7CisJJm1hcHBpbmdfYXR0ci5hdHRyLAorCU5VTEwsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2Ugc3FfZGV2ID0gewotCS5taW5vcgkJPSBTVE9SRV9RVUVVRV9NSU5PUiwKLQkubmFtZQkJPSAic3EiLAotCS5mb3BzCQk9ICZzcV9mb3BzLAorc3RhdGljIHN0cnVjdCBzeXNmc19vcHMgc3Ffc3lzZnNfb3BzID0geworCS5zaG93CT0gc3Ffc3lzZnNfc2hvdywKKwkuc3RvcmUJPSBzcV9zeXNmc19zdG9yZSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qga29ial90eXBlIGt0eXBlX3BlcmNwdV9lbnRyeSA9IHsKKwkuc3lzZnNfb3BzCT0gJnNxX3N5c2ZzX29wcywKKwkuZGVmYXVsdF9hdHRycwk9IHNxX3N5c2ZzX2F0dHJzLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc3Ffc3lzZGV2X2FkZChzdHJ1Y3Qgc3lzX2RldmljZSAqc3lzZGV2KQoreworCXVuc2lnbmVkIGludCBjcHUgPSBzeXNkZXYtPmlkOworCXN0cnVjdCBrb2JqZWN0ICprb2JqOworCisJc3Ffa29iamVjdFtjcHVdID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGtvYmplY3QpLCBHRlBfS0VSTkVMKTsKKwlpZiAodW5saWtlbHkoIXNxX2tvYmplY3RbY3B1XSkpCisJCXJldHVybiAtRU5PTUVNOworCisJa29iaiA9IHNxX2tvYmplY3RbY3B1XTsKKwlrb2JqLT5wYXJlbnQgPSAmc3lzZGV2LT5rb2JqOworCWtvYmplY3Rfc2V0X25hbWUoa29iaiwgIiVzIiwgInNxIik7CisJa29iai0+a3R5cGUgPSAma3R5cGVfcGVyY3B1X2VudHJ5OworCisJcmV0dXJuIGtvYmplY3RfcmVnaXN0ZXIoa29iaik7Cit9CisKK3N0YXRpYyBpbnQgX19kZXZleGl0IHNxX3N5c2Rldl9yZW1vdmUoc3RydWN0IHN5c19kZXZpY2UgKnN5c2RldikKK3sKKwl1bnNpZ25lZCBpbnQgY3B1ID0gc3lzZGV2LT5pZDsKKwlzdHJ1Y3Qga29iamVjdCAqa29iaiA9IHNxX2tvYmplY3RbY3B1XTsKKworCWtvYmplY3RfdW5yZWdpc3Rlcihrb2JqKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBzeXNkZXZfZHJpdmVyIHNxX3N5c2Rldl9kcml2ZXIgPSB7CisJLmFkZAkJPSBzcV9zeXNkZXZfYWRkLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc3Ffc3lzZGV2X3JlbW92ZSksCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBzcV9hcGlfaW5pdCh2b2lkKQogewotCWludCByZXQ7CisJdW5zaWduZWQgaW50IG5yX3BhZ2VzID0gMHgwNDAwMDAwMCA+PiBQQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBzaXplID0gKG5yX3BhZ2VzICsgKEJJVFNfUEVSX0xPTkcgLSAxKSkgLyBCSVRTX1BFUl9MT05HOworCWludCByZXQgPSAtRU5PTUVNOworCiAJcHJpbnRrKEtFUk5fTk9USUNFICJzcTogUmVnaXN0ZXJpbmcgc3RvcmUgcXVldWUgQVBJLlxuIik7CiAKLQljcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJzcV9tYXBwaW5nIiwgMCwgMCwgc3FfbWFwcGluZ19yZWFkX3Byb2MsIDApOworCXNxX2NhY2hlID0ga21lbV9jYWNoZV9jcmVhdGUoInN0b3JlX3F1ZXVlX2NhY2hlIiwKKwkJCQlzaXplb2Yoc3RydWN0IHNxX21hcHBpbmcpLCAwLCAwLAorCQkJCU5VTEwsIE5VTEwpOworCWlmICh1bmxpa2VseSghc3FfY2FjaGUpKQorCQlyZXR1cm4gcmV0OwogCi0JcmV0ID0gbWlzY19yZWdpc3Rlcigmc3FfZGV2KTsKLQlpZiAocmV0KQotCQlyZW1vdmVfcHJvY19lbnRyeSgic3FfbWFwcGluZyIsIE5VTEwpOworCXNxX2JpdG1hcCA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHVubGlrZWx5KCFzcV9iaXRtYXApKQorCQlnb3RvIG91dDsKKworCXJldCA9IHN5c2Rldl9kcml2ZXJfcmVnaXN0ZXIoJmNwdV9zeXNkZXZfY2xhc3MsICZzcV9zeXNkZXZfZHJpdmVyKTsKKwlpZiAodW5saWtlbHkocmV0ICE9IDApKQorCQlnb3RvIG91dDsKKworCXJldHVybiAwOworCitvdXQ6CisJa2ZyZWUoc3FfYml0bWFwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3FfY2FjaGUpOwogCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNxX2FwaV9leGl0KHZvaWQpCiB7Ci0JbWlzY19kZXJlZ2lzdGVyKCZzcV9kZXYpOwotCXJlbW92ZV9wcm9jX2VudHJ5KCJzcV9tYXBwaW5nIiwgTlVMTCk7CisJc3lzZGV2X2RyaXZlcl91bnJlZ2lzdGVyKCZjcHVfc3lzZGV2X2NsYXNzLCAmc3Ffc3lzZGV2X2RyaXZlcik7CisJa2ZyZWUoc3FfYml0bWFwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc3FfY2FjaGUpOwogfQogCiBtb2R1bGVfaW5pdChzcV9hcGlfaW5pdCk7CkBAIC00NDUsMTEgKzQwMiw3IEBACiBNT0RVTEVfQVVUSE9SKCJQYXVsIE11bmR0IDxsZXRoYWxAbGludXgtc2gub3JnPiwgTS4gUi4gQnJvd24gPG1yYnJvd25AMHhkNi5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlNpbXBsZSBBUEkgZm9yIFNILTQgaW50ZWdyYXRlZCBTdG9yZSBRdWV1ZXMiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLU1PRFVMRV9BTElBU19NSVNDREVWKFNUT1JFX1FVRVVFX01JTk9SKTsKIAogRVhQT1JUX1NZTUJPTChzcV9yZW1hcCk7CiBFWFBPUlRfU1lNQk9MKHNxX3VubWFwKTsKLUVYUE9SVF9TWU1CT0woc3FfY2xlYXIpOwotRVhQT1JUX1NZTUJPTChzcV9mbHVzaCk7CiBFWFBPUlRfU1lNQk9MKHNxX2ZsdXNoX3JhbmdlKTsKLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvZWFybHlfcHJpbnRrLmMgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwppbmRleCAxMzc4ZGIzLi5hMDAwMjI3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3NoL2tlcm5lbC9lYXJseV9wcmludGsuYwpAQCAtMyw3ICszLDcgQEAKICAqCiAgKiAgQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwICBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0ICBQYXVsIE11bmR0CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IC0gMjAwNiAgUGF1bCBNdW5kdAogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCkBAIC00OSw3ICs0OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSBlYXJseV9jb25zb2xlID0geworc3RhdGljIHN0cnVjdCBjb25zb2xlIGJpb3NfY29uc29sZSA9IHsKIAkubmFtZQkJPSAiYmlvcyIsCiAJLndyaXRlCQk9IHNoX2NvbnNvbGVfd3JpdGUsCiAJLnNldHVwCQk9IHNoX2NvbnNvbGVfc2V0dXAsCkBAIC01OSwzNCArNTksNDMgQEAKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRQorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSAiLi4vLi4vLi4vZHJpdmVycy9zZXJpYWwvc2gtc2NpLmgiCisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAogI2RlZmluZSBTQ0lGX1JFRwkweGZmZTgwMDAwCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDcyMDYwKQorI2RlZmluZSBTQ0lGX1JFRwkweGZmZmU5ODAwCisjZWxzZQorI2Vycm9yICJVbmRlZmluZWQgU0NJRiBmb3IgdGhpcyBzdWJ0eXBlIgorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgdWFydF9wb3J0IHNjaWZfcG9ydCA9IHsKKwkubWFwYmFzZQk9IFNDSUZfUkVHLAorCS5tZW1iYXNlCT0gKGNoYXIgX19pb21lbSAqKVNDSUZfUkVHLAorfTsKIAogc3RhdGljIHZvaWQgc2NpZl9zZXJjb25fcHV0YyhpbnQgYykKIHsKLQl3aGlsZSAoIShjdHJsX2ludyhTQ0lGX1JFRyArIDB4MTApICYgMHgyMCkpIDsKKwl3aGlsZSAoKChzY2lfaW4oJnNjaWZfcG9ydCwgU0NGRFIpICYgMHgxZjAwID4+IDgpID09IDE2KSkKKwkJOwogCi0JY3RybF9vdXRiKGMsIFNDSUZfUkVHICsgMTIpOwotCWN0cmxfb3V0dygoY3RybF9pbncoU0NJRl9SRUcgKyAweDEwKSAmIDB4OWYpLCBTQ0lGX1JFRyArIDB4MTApOworCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0N4VERSLCBjKTsKKwlzY2lfaW4oJnNjaWZfcG9ydCwgU0N4U1IpOworCXNjaV9vdXQoJnNjaWZfcG9ydCwgU0N4U1IsIDB4ZjMgJiB+KDB4MjAgfCAweDQwKSk7CisKKwl3aGlsZSAoKHNjaV9pbigmc2NpZl9wb3J0LCBTQ3hTUikgJiAweDQwKSA9PSAwKTsKKwkJOwogCiAJaWYgKGMgPT0gJ1xuJykKIAkJc2NpZl9zZXJjb25fcHV0YygnXHInKTsKIH0KIAotc3RhdGljIHZvaWQgc2NpZl9zZXJjb25fZmx1c2godm9pZCkKLXsKLQljdHJsX291dHcoKGN0cmxfaW53KFNDSUZfUkVHICsgMHgxMCkgJiAweGJmKSwgU0NJRl9SRUcgKyAweDEwKTsKLQotCXdoaWxlICghKGN0cmxfaW53KFNDSUZfUkVHICsgMHgxMCkgJiAweDQwKSkgOwotCi0JY3RybF9vdXR3KChjdHJsX2ludyhTQ0lGX1JFRyArIDB4MTApICYgMHhiZiksIFNDSUZfUkVHICsgMHgxMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHNjaWZfc2VyY29uX3dyaXRlKHN0cnVjdCBjb25zb2xlICpjb24sIGNvbnN0IGNoYXIgKnMsIHVuc2lnbmVkIGNvdW50KQorc3RhdGljIHZvaWQgc2NpZl9zZXJjb25fd3JpdGUoc3RydWN0IGNvbnNvbGUgKmNvbiwgY29uc3QgY2hhciAqcywKKwkJCSAgICAgIHVuc2lnbmVkIGNvdW50KQogewogCXdoaWxlIChjb3VudC0tID4gMCkKIAkJc2NpZl9zZXJjb25fcHV0YygqcysrKTsKLQotCXNjaWZfc2VyY29uX2ZsdXNoKCk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHNjaWZfc2VyY29uX3NldHVwKHN0cnVjdCBjb25zb2xlICpjb24sIGNoYXIgKm9wdGlvbnMpCkBAIC05Niw3ICsxMDUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGNvbnNvbGUgZWFybHlfY29uc29sZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgY29uc29sZSBzY2lmX2NvbnNvbGUgPSB7CiAJLm5hbWUJCT0gInNlcmNvbiIsCiAJLndyaXRlCQk9IHNjaWZfc2VyY29uX3dyaXRlLAogCS5zZXR1cAkJPSBzY2lmX3NlcmNvbl9zZXR1cCwKQEAgLTEwNCw3ICsxMTMsNyBAQAogCS5pbmRleAkJPSAtMSwKIH07CiAKLXZvaWQgc2NpZl9zZXJjb25faW5pdChpbnQgYmF1ZCkKK3N0YXRpYyB2b2lkIHNjaWZfc2VyY29uX2luaXQoaW50IGJhdWQpCiB7CiAJY3RybF9vdXR3KDAsIFNDSUZfUkVHICsgOCk7CiAJY3RybF9vdXR3KDAsIFNDSUZfUkVHKTsKQEAgLTEyMiwxNiArMTMxLDYxIEBACiB9CiAjZW5kaWYKIAotdm9pZCBfX2luaXQgZW5hYmxlX2Vhcmx5X3ByaW50ayh2b2lkKQotewotI2lmZGVmIENPTkZJR19FQVJMWV9TQ0lGX0NPTlNPTEUKLQlzY2lmX3NlcmNvbl9pbml0KDExNTIwMCk7CisvKgorICogU2V0dXAgYSBkZWZhdWx0IGNvbnNvbGUsIGlmIG1vcmUgdGhhbiBvbmUgaXMgY29tcGlsZWQgaW4sIHJlbHkgb24gdGhlCisgKiBlYXJseXByaW50az0gcGFyc2luZyB0byBnaXZlIHByaW9yaXR5LgorICovCitzdGF0aWMgc3RydWN0IGNvbnNvbGUgKmVhcmx5X2NvbnNvbGUgPQorI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCisJJmJpb3NfY29uc29sZQorI2VsaWYgZGVmaW5lZChDT05GSUdfRUFSTFlfU0NJRl9DT05TT0xFKQorCSZzY2lmX2NvbnNvbGUKKyNlbHNlCisJTlVMTAogI2VuZGlmCi0JcmVnaXN0ZXJfY29uc29sZSgmZWFybHlfY29uc29sZSk7Ci19CisJOwogCi12b2lkIGRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCitzdGF0aWMgaW50IF9faW5pdGRhdGEga2VlcF9lYXJseTsKKworaW50IF9faW5pdCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqb3B0KQogewotCXVucmVnaXN0ZXJfY29uc29sZSgmZWFybHlfY29uc29sZSk7Ci19CisJY2hhciAqc3BhY2U7CisJY2hhciBidWZbMjU2XTsKIAorCXN0cmxjcHkoYnVmLCBvcHQsIHNpemVvZihidWYpKTsKKwlzcGFjZSA9IHN0cmNocihidWYsICcgJyk7CisJaWYgKHNwYWNlKQorCQkqc3BhY2UgPSAwOworCisJaWYgKHN0cnN0cihidWYsICJrZWVwIikpCisJCWtlZXBfZWFybHkgPSAxOworCisjaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKKwlpZiAoIXN0cm5jbXAoYnVmLCAiYmlvcyIsIDQpKQorCQllYXJseV9jb25zb2xlID0gJmJpb3NfY29uc29sZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0VBUkxZX1NDSUZfQ09OU09MRSkKKwlpZiAoIXN0cm5jbXAoYnVmLCAic2VyaWFsIiwgNikpIHsKKwkJZWFybHlfY29uc29sZSA9ICZzY2lmX2NvbnNvbGU7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAorCQlzY2lmX3NlcmNvbl9pbml0KDExNTIwMCk7CisjZW5kaWYKKwl9CisjZW5kaWYKKworCWlmIChsaWtlbHkoZWFybHlfY29uc29sZSkpCisJCXJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoImVhcmx5cHJpbnRrPSIsIHNldHVwX2Vhcmx5X3ByaW50ayk7CisKK3ZvaWQgX19pbml0IGRpc2FibGVfZWFybHlfcHJpbnRrKHZvaWQpCit7CisJaWYgKCFrZWVwX2Vhcmx5KSB7CisJCXByaW50aygiZGlzYWJsaW5nIGVhcmx5IGNvbnNvbGVcbiIpOworCQl1bnJlZ2lzdGVyX2NvbnNvbGUoZWFybHlfY29uc29sZSk7CisJfSBlbHNlCisJCXByaW50aygia2VlcGluZyBlYXJseSBjb25zb2xlXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2VudHJ5LlMgYi9hcmNoL3NoL2tlcm5lbC9lbnRyeS5TCmluZGV4IDdkZmQyYmEuLmZlODIyMTggMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2VudHJ5LlMKKysrIGIvYXJjaC9zaC9rZXJuZWwvZW50cnkuUwpAQCAtMTgsMjQgKzE4LDYgQEAKICNpbmNsdWRlIDxhc20vY3B1L21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCi0jaWYgIWRlZmluZWQoQ09ORklHX05GU0QpICYmICFkZWZpbmVkKENPTkZJR19ORlNEX01PRFVMRSkKLSNkZWZpbmUgc3lzX25mc3NlcnZjdGwJCXN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQotI2lmICFkZWZpbmVkKENPTkZJR19NTVUpCi0jZGVmaW5lIHN5c19tYWR2aXNlCQlzeXNfbmlfc3lzY2FsbAotI2RlZmluZSBzeXNfcmVhZGFoZWFkCQlzeXNfbmlfc3lzY2FsbAotI2RlZmluZSBzeXNfbXByb3RlY3QJCXN5c19uaV9zeXNjYWxsCi0jZGVmaW5lIHN5c19tc3luYwkJc3lzX25pX3N5c2NhbGwKLSNkZWZpbmUgc3lzX21sb2NrCQlzeXNfbmlfc3lzY2FsbAotI2RlZmluZSBzeXNfbXVubG9jawkJc3lzX25pX3N5c2NhbGwKLSNkZWZpbmUgc3lzX21sb2NrYWxsCQlzeXNfbmlfc3lzY2FsbAotI2RlZmluZSBzeXNfbXVubG9ja2FsbAkJc3lzX25pX3N5c2NhbGwKLSNkZWZpbmUgc3lzX21yZW1hcAkJc3lzX25pX3N5c2NhbGwKLSNkZWZpbmUgc3lzX21pbmNvcmUJCXN5c19uaV9zeXNjYWxsCi0jZGVmaW5lIHN5c19yZW1hcF9maWxlX3BhZ2VzCXN5c19uaV9zeXNjYWxsCi0jZW5kaWYKLQogISBOT1RFOgogISBHTlUgYXMgKGFzIG9mIDIuOS4xKSBjaGFuZ2VzIGJmL3MgaW50byBidC9zIGFuZCBicmEsIHdoZW4gdGhlIGFkZHJlc3MKICEgdG8gYmUganVtcGVkIGlzIHRvbyBmYXIsIGJ1dCBpdCBjYXVzZXMgaWxsZWdhbCBzbG90IGV4Y2VwdGlvbi4KQEAgLTMyNiw3ICszMDgsNyBAQAogCS5hbGlnbgkyCiByZXRfZnJvbV9leGNlcHRpb246CiAJcHJlZW1wdF9zdG9wKCkKLXJldF9mcm9tX2lycToKK0VOVFJZKHJldF9mcm9tX2lycSkKIAkhCiAJbW92CSNPRkZfU1IsIHIwCiAJbW92LmwJQChyMCxyMTUpLCByMAkhIGdldCBzdGF0dXMgcmVnaXN0ZXIKQEAgLTM4OSwxMSArMzcxLDEyIEBACiAJISByODogY3VycmVudF90aHJlYWRfaW5mbwogCSEgdDogIHJlc3VsdCBvZiAidHN0CSNfVElGX05FRURfUkVTQ0hFRCwgcjAiCiAJYmYvcwl3b3JrX3Jlc2NoZWQKLQkgdHN0CSNfVElGX1NJR1BFTkRJTkcsIHIwCisJIHRzdAkjKF9USUZfU0lHUEVORElORyB8IF9USUZfUkVTVE9SRV9TSUdNQVNLKSwgcjAKIHdvcmtfbm90aWZ5c2lnOgogCWJ0L3MJcmVzdG9yZV9hbGwKIAkgbW92CXIxNSwgcjQKLQltb3YJIzAsIHI1CisJbW92CXIxMiwgcjUJCSEgc2V0IGFyZzEoc2F2ZV9yMCkKKwltb3YJcjAsIHI2CiAJbW92LmwJMmYsIHIxCiAJbW92YQlyZXN0b3JlX2FsbCwgcjAKIAlqbXAJQHIxCkBAIC00MzEsNyArNDE0LDcgQEAKIAogCS5hbGlnbgkyCiAxOgkubG9uZwlzY2hlZHVsZQotMjoJLmxvbmcJZG9fc2lnbmFsCisyOgkubG9uZwlkb19ub3RpZnlfcmVzdW1lCiAKIAkuYWxpZ24JMgogc3lzY2FsbF9leGl0X3dvcms6CkBAIC01NTIsNiArNTM1LDcgQEAKIAltb3YubAlAcjksIHI4CiAJanNyCUByOAkgICAgCSEganVtcCB0byBzcGVjaWZpYyBzeXNjYWxsIGhhbmRsZXIKIAkgbm9wCisJbW92LmwJQChPRkZfUjAscjE1KSwgcjEyCQkhIHNhdmUgcjAKIAltb3YubAlyMCwgQChPRkZfUjAscjE1KQkJISBzYXZlIHRoZSByZXR1cm4gdmFsdWUKIAkhCiBzeXNjYWxsX2V4aXQ6CkBAIC02NDQsNyArNjI4LDcgQEAKIAkhCiAjaWYgZGVmaW5lZChDT05GSUdfS0dEQl9OTUkpCiAJISBDbGVhciBpbl9ubWkKLQltb3YubAk0ZiwgazAKKwltb3YubAk2ZiwgazAKIAltb3YJIzAsIGsxCiAJbW92LmIJazEsIEBrMAogI2VuZGlmCkBAIC03MjIsNyArNzA2LDcgQEAKICEKICEKIAkuYWxpZ24JMgotaGFuZGxlX2V4Y2VwdGlvbjoKK0VOVFJZKGhhbmRsZV9leGNlcHRpb24pCiAJISBVc2luZyBrMCwgazEgZm9yIHNjcmF0Y2ggcmVnaXN0ZXJzIChyMF9iYW5rMSwgcjFfYmFuayksCiAJISBzYXZlIGFsbCByZWdpc3RlcnMgb250byBzdGFjay4KIAkhCkBAIC03MzIsOCArNzE2LDggQEAKIAlidC9zCTFmCQkhIEl0J3MgYSBrZXJuZWwgdG8ga2VybmVsIHRyYW5zaXRpb24uCiAJIG1vdglyMTUsIGswCQkhIHNhdmUgb3JpZ2luYWwgc3RhY2sgdG8gazAKIAkvKiBVc2VyIHNwYWNlIHRvIGtlcm5lbCAqLwotCW1vdgkjMHgyMCwgazEKLQlzaGxsOAlrMQkJISBrMSA6PSA4MTkyICg9PSBUSFJFQURfU0laRSkKKwltb3YJIyhUSFJFQURfU0laRSA+PiA4KSwgazEKKwlzaGxsOAlrMQkJISBrMSA6PSBUSFJFQURfU0laRQogCWFkZAljdXJyZW50LCBrMQogCW1vdglrMSwgcjE1CQkhIGNoYW5nZSB0byBrZXJuZWwgc3RhY2sKIAkhCkBAIC04MzgsMzAwICs4MjIsMyBAQAogCXJ0cwogCSBub3AKIAotCS5kYXRhCi1FTlRSWShzeXNfY2FsbF90YWJsZSkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAwICAtICBvbGQgInNldHVwKCkiIHN5c3RlbSBjYWxsKi8KLQkubG9uZyBzeXNfZXhpdAotCS5sb25nIHN5c19mb3JrCi0JLmxvbmcgc3lzX3JlYWQKLQkubG9uZyBzeXNfd3JpdGUKLQkubG9uZyBzeXNfb3BlbgkJLyogNSAqLwotCS5sb25nIHN5c19jbG9zZQotCS5sb25nIHN5c193YWl0cGlkCi0JLmxvbmcgc3lzX2NyZWF0Ci0JLmxvbmcgc3lzX2xpbmsKLQkubG9uZyBzeXNfdW5saW5rCQkvKiAxMCAqLwotCS5sb25nIHN5c19leGVjdmUKLQkubG9uZyBzeXNfY2hkaXIKLQkubG9uZyBzeXNfdGltZQotCS5sb25nIHN5c19ta25vZAotCS5sb25nIHN5c19jaG1vZAkJLyogMTUgKi8KLQkubG9uZyBzeXNfbGNob3duMTYKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgYnJlYWsgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfc3RhdAotCS5sb25nIHN5c19sc2VlawotCS5sb25nIHN5c19nZXRwaWQJCS8qIDIwICovCi0JLmxvbmcgc3lzX21vdW50Ci0JLmxvbmcgc3lzX29sZHVtb3VudAotCS5sb25nIHN5c19zZXR1aWQxNgotCS5sb25nIHN5c19nZXR1aWQxNgotCS5sb25nIHN5c19zdGltZQkJLyogMjUgKi8KLQkubG9uZyBzeXNfcHRyYWNlCi0JLmxvbmcgc3lzX2FsYXJtCi0JLmxvbmcgc3lzX2ZzdGF0Ci0JLmxvbmcgc3lzX3BhdXNlCi0JLmxvbmcgc3lzX3V0aW1lCQkvKiAzMCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBzdHR5IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIGd0dHkgc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYWNjZXNzCi0JLmxvbmcgc3lzX25pY2UKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAzNSAqLwkJLyogb2xkIGZ0aW1lIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N5bmMKLQkubG9uZyBzeXNfa2lsbAotCS5sb25nIHN5c19yZW5hbWUKLQkubG9uZyBzeXNfbWtkaXIKLQkubG9uZyBzeXNfcm1kaXIJCS8qIDQwICovCi0JLmxvbmcgc3lzX2R1cAotCS5sb25nIHN5c19waXBlCi0JLmxvbmcgc3lzX3RpbWVzCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIHByb2Ygc3lzY2FsbCBob2xkZXIgKi8KLQkubG9uZyBzeXNfYnJrCQkvKiA0NSAqLwotCS5sb25nIHN5c19zZXRnaWQxNgotCS5sb25nIHN5c19nZXRnaWQxNgotCS5sb25nIHN5c19zaWduYWwKLQkubG9uZyBzeXNfZ2V0ZXVpZDE2Ci0JLmxvbmcgc3lzX2dldGVnaWQxNgkvKiA1MCAqLwotCS5sb25nIHN5c19hY2N0Ci0JLmxvbmcgc3lzX3Vtb3VudAkJLyogcmVjeWNsZWQgbmV2ZXIgdXNlZCBwaHlzKCkgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbG9jayBzeXNjYWxsIGhvbGRlciAqLwotCS5sb25nIHN5c19pb2N0bAotCS5sb25nIHN5c19mY250bAkJLyogNTUgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgbXB4IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3NldHBnaWQKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgdWxpbWl0IHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX29sZHVuYW1lICovCi0JLmxvbmcgc3lzX3VtYXNrCQkvKiA2MCAqLwotCS5sb25nIHN5c19jaHJvb3QKLQkubG9uZyBzeXNfdXN0YXQKLQkubG9uZyBzeXNfZHVwMgotCS5sb25nIHN5c19nZXRwcGlkCi0JLmxvbmcgc3lzX2dldHBncnAJCS8qIDY1ICovCi0JLmxvbmcgc3lzX3NldHNpZAotCS5sb25nIHN5c19zaWdhY3Rpb24KLQkubG9uZyBzeXNfc2dldG1hc2sKLQkubG9uZyBzeXNfc3NldG1hc2sKLQkubG9uZyBzeXNfc2V0cmV1aWQxNgkvKiA3MCAqLwotCS5sb25nIHN5c19zZXRyZWdpZDE2Ci0JLmxvbmcgc3lzX3NpZ3N1c3BlbmQKLQkubG9uZyBzeXNfc2lncGVuZGluZwotCS5sb25nIHN5c19zZXRob3N0bmFtZQotCS5sb25nIHN5c19zZXRybGltaXQJLyogNzUgKi8KLQkubG9uZyBzeXNfb2xkX2dldHJsaW1pdAotCS5sb25nIHN5c19nZXRydXNhZ2UKLQkubG9uZyBzeXNfZ2V0dGltZW9mZGF5Ci0JLmxvbmcgc3lzX3NldHRpbWVvZmRheQotCS5sb25nIHN5c19nZXRncm91cHMxNgkvKiA4MCAqLwotCS5sb25nIHN5c19zZXRncm91cHMxNgotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN5c19vbGRzZWxlY3QgKi8KLQkubG9uZyBzeXNfc3ltbGluawotCS5sb25nIHN5c19sc3RhdAotCS5sb25nIHN5c19yZWFkbGluawkJLyogODUgKi8KLQkubG9uZyBzeXNfdXNlbGliCi0JLmxvbmcgc3lzX3N3YXBvbgotCS5sb25nIHN5c19yZWJvb3QKLQkubG9uZyBvbGRfcmVhZGRpcgotCS5sb25nIG9sZF9tbWFwCQkvKiA5MCAqLwotCS5sb25nIHN5c19tdW5tYXAKLQkubG9uZyBzeXNfdHJ1bmNhdGUKLQkubG9uZyBzeXNfZnRydW5jYXRlCi0JLmxvbmcgc3lzX2ZjaG1vZAotCS5sb25nIHN5c19mY2hvd24xNgkJLyogOTUgKi8KLQkubG9uZyBzeXNfZ2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfc2V0cHJpb3JpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgcHJvZmlsIHN5c2NhbGwgaG9sZGVyICovCi0JLmxvbmcgc3lzX3N0YXRmcwotCS5sb25nIHN5c19mc3RhdGZzCQkvKiAxMDAgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpb3Blcm0gKi8KLQkubG9uZyBzeXNfc29ja2V0Y2FsbAotCS5sb25nIHN5c19zeXNsb2cKLQkubG9uZyBzeXNfc2V0aXRpbWVyCi0JLmxvbmcgc3lzX2dldGl0aW1lcgkvKiAxMDUgKi8KLQkubG9uZyBzeXNfbmV3c3RhdAotCS5sb25nIHN5c19uZXdsc3RhdAotCS5sb25nIHN5c19uZXdmc3RhdAotCS5sb25nIHN5c191bmFtZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDExMCAqLyAvKiBpb3BsICovCi0JLmxvbmcgc3lzX3ZoYW5ndXAKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBpZGxlICovCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogdm04Nm9sZCAqLwotCS5sb25nIHN5c193YWl0NAotCS5sb25nIHN5c19zd2Fwb2ZmCQkvKiAxMTUgKi8KLQkubG9uZyBzeXNfc3lzaW5mbwotCS5sb25nIHN5c19pcGMKLQkubG9uZyBzeXNfZnN5bmMKLQkubG9uZyBzeXNfc2lncmV0dXJuCi0JLmxvbmcgc3lzX2Nsb25lCQkvKiAxMjAgKi8KLQkubG9uZyBzeXNfc2V0ZG9tYWlubmFtZQotCS5sb25nIHN5c19uZXd1bmFtZQotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN5c19tb2RpZnlfbGR0ICovCi0JLmxvbmcgc3lzX2FkanRpbWV4Ci0JLmxvbmcgc3lzX21wcm90ZWN0CQkvKiAxMjUgKi8KLQkubG9uZyBzeXNfc2lncHJvY21hc2sKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgImNyZWF0ZV9tb2R1bGUiICovCi0JLmxvbmcgc3lzX2luaXRfbW9kdWxlCi0JLmxvbmcgc3lzX2RlbGV0ZV9tb2R1bGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiAxMzA6IG9sZCAiZ2V0X2tlcm5lbF9zeW1zIiAqLwotCS5sb25nIHN5c19xdW90YWN0bAotCS5sb25nIHN5c19nZXRwZ2lkCi0JLmxvbmcgc3lzX2ZjaGRpcgotCS5sb25nIHN5c19iZGZsdXNoCi0JLmxvbmcgc3lzX3N5c2ZzCQkvKiAxMzUgKi8KLQkubG9uZyBzeXNfcGVyc29uYWxpdHkKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBmb3IgYWZzX3N5c2NhbGwgKi8KLQkubG9uZyBzeXNfc2V0ZnN1aWQxNgotCS5sb25nIHN5c19zZXRmc2dpZDE2Ci0JLmxvbmcgc3lzX2xsc2VlawkJLyogMTQwICovCi0JLmxvbmcgc3lzX2dldGRlbnRzCi0JLmxvbmcgc3lzX3NlbGVjdAotCS5sb25nIHN5c19mbG9jawotCS5sb25nIHN5c19tc3luYwotCS5sb25nIHN5c19yZWFkdgkJLyogMTQ1ICovCi0JLmxvbmcgc3lzX3dyaXRldgotCS5sb25nIHN5c19nZXRzaWQKLQkubG9uZyBzeXNfZmRhdGFzeW5jCi0JLmxvbmcgc3lzX3N5c2N0bAotCS5sb25nIHN5c19tbG9jawkJLyogMTUwICovCi0JLmxvbmcgc3lzX211bmxvY2sKLQkubG9uZyBzeXNfbWxvY2thbGwKLQkubG9uZyBzeXNfbXVubG9ja2FsbAotCS5sb25nIHN5c19zY2hlZF9zZXRwYXJhbQotCS5sb25nIHN5c19zY2hlZF9nZXRwYXJhbSAgIC8qIDE1NSAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRzY2hlZHVsZXIKLQkubG9uZyBzeXNfc2NoZWRfZ2V0c2NoZWR1bGVyCi0JLmxvbmcgc3lzX3NjaGVkX3lpZWxkCi0JLmxvbmcgc3lzX3NjaGVkX2dldF9wcmlvcml0eV9tYXgKLQkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAgLyogMTYwICovCi0JLmxvbmcgc3lzX3NjaGVkX3JyX2dldF9pbnRlcnZhbAotCS5sb25nIHN5c19uYW5vc2xlZXAKLQkubG9uZyBzeXNfbXJlbWFwCi0JLmxvbmcgc3lzX3NldHJlc3VpZDE2Ci0JLmxvbmcgc3lzX2dldHJlc3VpZDE2CS8qIDE2NSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHZtODYgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgInF1ZXJ5X21vZHVsZSIgKi8KLQkubG9uZyBzeXNfcG9sbAotCS5sb25nIHN5c19uZnNzZXJ2Y3RsCi0JLmxvbmcgc3lzX3NldHJlc2dpZDE2CS8qIDE3MCAqLwotCS5sb25nIHN5c19nZXRyZXNnaWQxNgotCS5sb25nIHN5c19wcmN0bAotCS5sb25nIHN5c19ydF9zaWdyZXR1cm4KLQkubG9uZyBzeXNfcnRfc2lnYWN0aW9uCi0JLmxvbmcgc3lzX3J0X3NpZ3Byb2NtYXNrCS8qIDE3NSAqLwotCS5sb25nIHN5c19ydF9zaWdwZW5kaW5nCi0JLmxvbmcgc3lzX3J0X3NpZ3RpbWVkd2FpdAotCS5sb25nIHN5c19ydF9zaWdxdWV1ZWluZm8KLQkubG9uZyBzeXNfcnRfc2lnc3VzcGVuZAotCS5sb25nIHN5c19wcmVhZF93cmFwcGVyCSAgIC8qIDE4MCAqLwotCS5sb25nIHN5c19wd3JpdGVfd3JhcHBlcgotCS5sb25nIHN5c19jaG93bjE2Ci0JLmxvbmcgc3lzX2dldGN3ZAotCS5sb25nIHN5c19jYXBnZXQKLQkubG9uZyBzeXNfY2Fwc2V0ICAgICAgICAgICAvKiAxODUgKi8KLQkubG9uZyBzeXNfc2lnYWx0c3RhY2sKLQkubG9uZyBzeXNfc2VuZGZpbGUKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzdHJlYW1zMSAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN0cmVhbXMyICovCi0JLmxvbmcgc3lzX3Zmb3JrICAgICAgICAgICAgLyogMTkwICovCi0JLmxvbmcgc3lzX2dldHJsaW1pdAotCS5sb25nIHN5c19tbWFwMgotCS5sb25nIHN5c190cnVuY2F0ZTY0Ci0JLmxvbmcgc3lzX2Z0cnVuY2F0ZTY0Ci0JLmxvbmcgc3lzX3N0YXQ2NAkJLyogMTk1ICovCi0JLmxvbmcgc3lzX2xzdGF0NjQKLQkubG9uZyBzeXNfZnN0YXQ2NAotCS5sb25nIHN5c19sY2hvd24KLQkubG9uZyBzeXNfZ2V0dWlkCi0JLmxvbmcgc3lzX2dldGdpZAkJLyogMjAwICovCi0JLmxvbmcgc3lzX2dldGV1aWQKLQkubG9uZyBzeXNfZ2V0ZWdpZAotCS5sb25nIHN5c19zZXRyZXVpZAotCS5sb25nIHN5c19zZXRyZWdpZAotCS5sb25nIHN5c19nZXRncm91cHMJLyogMjA1ICovCi0JLmxvbmcgc3lzX3NldGdyb3VwcwotCS5sb25nIHN5c19mY2hvd24KLQkubG9uZyBzeXNfc2V0cmVzdWlkCi0JLmxvbmcgc3lzX2dldHJlc3VpZAotCS5sb25nIHN5c19zZXRyZXNnaWQJLyogMjEwICovCi0JLmxvbmcgc3lzX2dldHJlc2dpZAotCS5sb25nIHN5c19jaG93bgotCS5sb25nIHN5c19zZXR1aWQKLQkubG9uZyBzeXNfc2V0Z2lkCi0JLmxvbmcgc3lzX3NldGZzdWlkCQkvKiAyMTUgKi8KLQkubG9uZyBzeXNfc2V0ZnNnaWQKLQkubG9uZyBzeXNfcGl2b3Rfcm9vdAotCS5sb25nIHN5c19taW5jb3JlCi0JLmxvbmcgc3lzX21hZHZpc2UKLQkubG9uZyBzeXNfZ2V0ZGVudHM2NAkvKiAyMjAgKi8KLQkubG9uZyBzeXNfZmNudGw2NAotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHJlc2VydmVkIGZvciBUVVggKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBSZXNlcnZlZCBmb3IgU2VjdXJpdHkgKi8KLQkubG9uZyBzeXNfZ2V0dGlkCi0JLmxvbmcgc3lzX3JlYWRhaGVhZAkvKiAyMjUgKi8KLQkubG9uZyBzeXNfc2V0eGF0dHIKLQkubG9uZyBzeXNfbHNldHhhdHRyCi0JLmxvbmcgc3lzX2ZzZXR4YXR0cgotCS5sb25nIHN5c19nZXR4YXR0cgotCS5sb25nIHN5c19sZ2V0eGF0dHIJLyogMjMwICovCi0JLmxvbmcgc3lzX2ZnZXR4YXR0cgotCS5sb25nIHN5c19saXN0eGF0dHIKLQkubG9uZyBzeXNfbGxpc3R4YXR0cgotCS5sb25nIHN5c19mbGlzdHhhdHRyCi0JLmxvbmcgc3lzX3JlbW92ZXhhdHRyCS8qIDIzNSAqLwotCS5sb25nIHN5c19scmVtb3ZleGF0dHIKLQkubG9uZyBzeXNfZnJlbW92ZXhhdHRyCi0JLmxvbmcgc3lzX3RraWxsCi0JLmxvbmcgc3lzX3NlbmRmaWxlNjQKLQkubG9uZyBzeXNfZnV0ZXgJCS8qIDI0MCAqLwotCS5sb25nIHN5c19zY2hlZF9zZXRhZmZpbml0eQotCS5sb25nIHN5c19zY2hlZF9nZXRhZmZpbml0eQotCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwKLQkubG9uZyBzeXNfaW9fc2V0dXAJLyogMjQ1ICovCi0JLmxvbmcgc3lzX2lvX2Rlc3Ryb3kKLQkubG9uZyBzeXNfaW9fZ2V0ZXZlbnRzCi0JLmxvbmcgc3lzX2lvX3N1Ym1pdAotCS5sb25nIHN5c19pb19jYW5jZWwKLQkubG9uZyBzeXNfZmFkdmlzZTY0CS8qIDI1MCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCi0JLmxvbmcgc3lzX2V4aXRfZ3JvdXAKLQkubG9uZyBzeXNfbG9va3VwX2Rjb29raWUKLQkubG9uZyBzeXNfZXBvbGxfY3JlYXRlCi0JLmxvbmcgc3lzX2Vwb2xsX2N0bAkvKiAyNTUgKi8KLQkubG9uZyBzeXNfZXBvbGxfd2FpdAotIAkubG9uZyBzeXNfcmVtYXBfZmlsZV9wYWdlcwotIAkubG9uZyBzeXNfc2V0X3RpZF9hZGRyZXNzCi0gCS5sb25nIHN5c190aW1lcl9jcmVhdGUKLSAJLmxvbmcgc3lzX3RpbWVyX3NldHRpbWUJCS8qIDI2MCAqLwotIAkubG9uZyBzeXNfdGltZXJfZ2V0dGltZQotIAkubG9uZyBzeXNfdGltZXJfZ2V0b3ZlcnJ1bgotIAkubG9uZyBzeXNfdGltZXJfZGVsZXRlCi0gCS5sb25nIHN5c19jbG9ja19zZXR0aW1lCi0gCS5sb25nIHN5c19jbG9ja19nZXR0aW1lCQkvKiAyNjUgKi8KLSAJLmxvbmcgc3lzX2Nsb2NrX2dldHJlcwotIAkubG9uZyBzeXNfY2xvY2tfbmFub3NsZWVwCi0JLmxvbmcgc3lzX3N0YXRmczY0Ci0JLmxvbmcgc3lzX2ZzdGF0ZnM2NCAgICAgCi0JLmxvbmcgc3lzX3Rna2lsbAkJLyogMjcwICovCi0JLmxvbmcgc3lzX3V0aW1lcwotIAkubG9uZyBzeXNfZmFkdmlzZTY0XzY0X3dyYXBwZXIKLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBSZXNlcnZlZCBmb3IgdnNlcnZlciAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIFJlc2VydmVkIGZvciBtYmluZCAqLwotCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDI3NSAtIGdldF9tZW1wb2xpY3kgKi8KLQkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzZXRfbWVtcG9saWN5ICovCi0JLmxvbmcgc3lzX21xX29wZW4KLQkubG9uZyBzeXNfbXFfdW5saW5rCi0JLmxvbmcgc3lzX21xX3RpbWVkc2VuZAotCS5sb25nIHN5c19tcV90aW1lZHJlY2VpdmUgICAgICAgLyogMjgwICovCi0JLmxvbmcgc3lzX21xX25vdGlmeQotCS5sb25nIHN5c19tcV9nZXRzZXRhdHRyCi0JLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogUmVzZXJ2ZWQgZm9yIGtleGVjICovCi0JLmxvbmcgc3lzX3dhaXRpZAotCS5sb25nIHN5c19hZGRfa2V5CQkvKiAyODUgKi8KLQkubG9uZyBzeXNfcmVxdWVzdF9rZXkKLQkubG9uZyBzeXNfa2V5Y3RsCi0JLmxvbmcgc3lzX2lvcHJpb19zZXQKLQkubG9uZyBzeXNfaW9wcmlvX2dldAotCS5sb25nIHN5c19pbm90aWZ5X2luaXQJCS8qIDI5MCAqLwotCS5sb25nIHN5c19pbm90aWZ5X2FkZF93YXRjaAotCS5sb25nIHN5c19pbm90aWZ5X3JtX3dhdGNoCi0KLS8qIEVuZCBvZiBlbnRyeS5TICovCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9oZWFkLlMgYi9hcmNoL3NoL2tlcm5lbC9oZWFkLlMKaW5kZXggOWI5ZTZlZi4uZjVmNTNkMSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaGVhZC5TCisrKyBiL2FyY2gvc2gva2VybmVsL2hlYWQuUwpAQCAtMTEsNiArMTEsMTggQEAKICAqIEhlYWQuUyBjb250YWlucyB0aGUgU0ggZXhjZXB0aW9uIGhhbmRsZXJzIGFuZCBzdGFydHVwIGNvZGUuCiAgKi8KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL3RocmVhZF9pbmZvLmg+CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINEEKKyNkZWZpbmUgU1lOQ08oKQkJc3luY28KKworI2RlZmluZSBQUkVGSShsYWJlbCwgcmVnKQlcCisJbW92LmwJbGFiZWwsIHJlZzsJXAorCXByZWZpCUByZWcKKyNlbHNlCisjZGVmaW5lIFNZTkNPKCkKKyNkZWZpbmUgUFJFRkkobGFiZWwsIHJlZykKKyNlbmRpZgogCiAJLnNlY3Rpb24JLmVtcHR5X3plcm9fcGFnZSwgImF3IgogRU5UUlkoZW1wdHlfemVyb19wYWdlKQpAQCAtNDIsMTggKzU0LDI1IEBACiAJIQkJCUluaXRpYWxpemUgZ2xvYmFsIGludGVycnVwdCBtYXNrCiAJbW92CSMwLCByMAogCWxkYwlyMCwgcjZfYmFuaworCisJLyoKKwkgKiBQcmVmZXRjaCBpZiBwb3NzaWJsZSB0byByZWR1Y2UgY2FjaGUgbWlzcyBwZW5hbHR5LgorCSAqCisJICogV2UgZG8gdGhpcyBlYXJseSBvbiBmb3IgU0gtNEEgYXMgYSBtaWNyby1vcHRpbWl6YXRpb24sCisJICogYXMgbGF0ZXIgb24gd2Ugd2lsbCBoYXZlIHNwZWN1bGF0aXZlIGV4ZWN1dGlvbiBlbmFibGVkCisJICogYW5kIHRoaXMgd2lsbCBiZWNvbWUgbGVzcyBvZiBhbiBpc3N1ZS4KKwkgKi8KKwlQUkVGSSg1ZiwgcjApCisJUFJFRkkoNmYsIHIwKQorCiAJIQogCW1vdi5sCTJmLCByMAogCW1vdglyMCwgcjE1CQkhIFNldCBpbml0aWFsIHIxNSAoc3RhY2sgcG9pbnRlcikKLQltb3YJIzB4MjAsIHIxCSEKLQlzaGxsOAlyMQkJISByMSA9IDgxOTIKKwltb3YJIyhUSFJFQURfU0laRSA+PiA4KSwgcjEKKwlzaGxsOAlyMQkJISByMSA9IFRIUkVBRF9TSVpFCiAJc3ViCXIxLCByMAkJIQogCWxkYwlyMCwgcjdfYmFuawkhIC4uLiBhbmQgaW5pdGlhbCB0aHJlYWRfaW5mbwotCSEKLQkhCQkJQWRkaXRpb25hbCBDUFUgaW5pdGlhbGl6YXRpb24KLQltb3YubAk2ZiwgcjAKLQlqc3IJQHIwCi0JIG5vcAorCiAJIQkJCUNsZWFyIEJTUyBhcmVhCiAJbW92LmwJM2YsIHIxCiAJYWRkCSM0LCByMQpAQCAtNjIsNiArODEsMTQgQEAKIDk6CWNtcC9ocwlyMiwgcjEKIAliZi9zCTliCQkhIHdoaWxlIChyMSA8IHIyKQogCSBtb3YubAlyMCxALXIyCisKKwkhCQkJQWRkaXRpb25hbCBDUFUgaW5pdGlhbGl6YXRpb24KKwltb3YubAk2ZiwgcjAKKwlqc3IJQHIwCisJIG5vcAorCisJU1lOQ08oKQkJCSEgV2FpdCBmb3IgcGVuZGluZyBpbnN0cnVjdGlvbnMuLgorCiAJIQkJCVN0YXJ0IGtlcm5lbAogCW1vdi5sCTVmLCByMAogCWptcAlAcjAKQEAgLTY5LDcgKzk2LDcgQEAKIAogCS5iYWxpZ24gNAogMToJLmxvbmcJMHg0MDAwODBGMAkJISBNRD0xLCBSQj0wLCBCTD0wLCBGRD0xLCBJTUFTSz0weEYKLTI6CS5sb25nCXN0YWNrCisyOgkubG9uZwlpbml0X3RocmVhZF91bmlvbitUSFJFQURfU0laRQogMzoJLmxvbmcJX19ic3Nfc3RhcnQKIDQ6CS5sb25nCV9lbmQKIDU6CS5sb25nCXN0YXJ0X2tlcm5lbApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvaW8uYyBiL2FyY2gvc2gva2VybmVsL2lvLmMKaW5kZXggNzFjOWZkZS4uNTAxZmUwMyAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaW8uYworKysgYi9hcmNoL3NoL2tlcm5lbC9pby5jCkBAIC02MSw2ICs2MSw3MyBAQAogfQogRVhQT1JUX1NZTUJPTChtZW1zZXRfaW8pOwogCit2b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGFwLCBpbnQgbGVuKQoreworCXUzMiAqZGF0YTsKKworCWZvciAoZGF0YSA9IGRhdGFwOyAobGVuICE9IDApICYmICgoKHUzMilkYXRhICYgMHgxZikgIT0gMCk7IGxlbi0tKQorCQkqZGF0YSsrID0gY3RybF9pbmwoYWRkcik7CisKKwlpZiAobGlrZWx5KGxlbiA+PSAoMHgyMCA+PiAyKSkpIHsKKwkJaW50IHRtcDIsIHRtcDMsIHRtcDQsIHRtcDUsIHRtcDY7CisKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkiMToJCQlcblx0IgorCQkJIm1vdi5sCUAlNywgcjAJCVxuXHQiCisJCQkibW92LmwJQCU3LCAlMgkJXG5cdCIKKyNpZmRlZiBDT05GSUdfQ1BVX1NINAorCQkJIm1vdmNhLmwgcjAsIEAlMAlcblx0IgorI2Vsc2UKKwkJCSJtb3YubAlyMCwgQCUwCQlcblx0IgorI2VuZGlmCisJCQkibW92LmwJQCU3LCAlMwkJXG5cdCIKKwkJCSJtb3YubAlAJTcsICU0CQlcblx0IgorCQkJIm1vdi5sCUAlNywgJTUJCVxuXHQiCisJCQkibW92LmwJQCU3LCAlNgkJXG5cdCIKKwkJCSJtb3YubAlAJTcsIHI3CQlcblx0IgorCQkJIm1vdi5sCUAlNywgcjAJCVxuXHQiCisJCQkibW92LmwJJTIsIEAoMHgwNCwlMCkJXG5cdCIKKwkJCSJtb3YJIzB4MjA+PjIsICUyCVxuXHQiCisJCQkibW92LmwJJTMsIEAoMHgwOCwlMCkJXG5cdCIKKwkJCSJzdWIJJTIsICUxCQlcblx0IgorCQkJIm1vdi5sCSU0LCBAKDB4MGMsJTApCVxuXHQiCisJCQkiY21wL2hpCSUxLCAlMgkJISBUIGlmIDMyID4gbGVuCVxuXHQiCisJCQkibW92LmwJJTUsIEAoMHgxMCwlMCkJXG5cdCIKKwkJCSJtb3YubAklNiwgQCgweDE0LCUwKQlcblx0IgorCQkJIm1vdi5sCXI3LCBAKDB4MTgsJTApCVxuXHQiCisJCQkibW92LmwJcjAsIEAoMHgxYywlMCkJXG5cdCIKKwkJCSJiZi5zCTFiCQlcblx0IgorCQkJIiBhZGQJIzB4MjAsICUwCVxuXHQiCisJCQk6ICI9JnIiIChkYXRhKSwgIj0mciIgKGxlbiksCisJCQkgICI9JnIiICh0bXAyKSwgIj0mciIgKHRtcDMpLCAiPSZyIiAodG1wNCksCisJCQkgICI9JnIiICh0bXA1KSwgIj0mciIgKHRtcDYpCisJCQk6ICJyIihhZGRyKSwgIjAiIChkYXRhKSwgIjEiIChsZW4pCisJCQk6ICJyMCIsICJyNyIsICJ0IiwgIm1lbW9yeSIpOworCX0KKworCWZvciAoOyBsZW4gIT0gMDsgbGVuLS0pCisJCSpkYXRhKysgPSBjdHJsX2lubChhZGRyKTsKK30KK0VYUE9SVF9TWU1CT0woX19yYXdfcmVhZHNsKTsKKwordm9pZCBfX3Jhd193cml0ZXNsKHVuc2lnbmVkIGxvbmcgYWRkciwgY29uc3Qgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKwlpZiAobGlrZWx5KGxlbiAhPSAwKSkgeworCQlpbnQgdG1wMTsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkiMToJCQkJXG5cdCIKKwkJCSJtb3YubAlAJTArLCAlMQlcblx0IgorCQkJImR0CQklMwkJXG5cdCIKKwkJCSJiZi5zCQkxYgkJXG5cdCIKKwkJCSIgbW92LmwJJTEsIEAlNAkJXG5cdCIKKwkJCTogIj0mciIgKGRhdGEpLCAiPSZyIiAodG1wMSkKKwkJCTogIjAiIChkYXRhKSwgInIiIChsZW4pLCAiciIoYWRkcikKKwkJCTogInQiLCAibWVtb3J5Iik7CisJfQorfQorRVhQT1JUX1NZTUJPTChfX3Jhd193cml0ZXNsKTsKKwogdm9pZCBfX2lvbWVtICppb3BvcnRfbWFwKHVuc2lnbmVkIGxvbmcgcG9ydCwgdW5zaWduZWQgaW50IG5yKQogewogCXJldHVybiBzaF9tdi5tdl9pb3BvcnRfbWFwKHBvcnQsIG5yKTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL2lycS5jIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKaW5kZXggYzJlMDdmNy4uYzdlYmQ2YSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvaXJxLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvaXJxLmMKQEAgLTEsNSArMSw0IEBACi0vKiAkSWQ6IGlycS5jLHYgMS4yMCAyMDA0LzAxLzEzIDA1OjUyOjExIGtrb2ppbWEgRXhwICQKLSAqCisvKgogICogbGludXgvYXJjaC9zaC9rZXJuZWwvaXJxLmMKICAqCiAgKglDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTggTGludXMgVG9ydmFsZHMsIEluZ28gTW9sbmFyCkBAIC03LDEzICs2LDE1IEBACiAgKgogICogU3VwZXJIIHZlcnNpb246ICBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYQogICovCi0KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS9jcHUvbW11X2NvbnRleHQuaD4KIAogLyoKQEAgLTYwLDE1ICs2MSw0NiBAQAogfQogI2VuZGlmCiAKKyNpZmRlZiBDT05GSUdfNEtTVEFDS1MKKy8qCisgKiBwZXItQ1BVIElSUSBoYW5kbGluZyBjb250ZXh0cyAodGhyZWFkIGluZm9ybWF0aW9uIGFuZCBzdGFjaykKKyAqLwordW5pb24gaXJxX2N0eCB7CisJc3RydWN0IHRocmVhZF9pbmZvCXRpbmZvOworCXUzMgkJCXN0YWNrW1RIUkVBRF9TSVpFL3NpemVvZih1MzIpXTsKK307CisKK3N0YXRpYyB1bmlvbiBpcnFfY3R4ICpoYXJkaXJxX2N0eFtOUl9DUFVTXTsKK3N0YXRpYyB1bmlvbiBpcnFfY3R4ICpzb2Z0aXJxX2N0eFtOUl9DUFVTXTsKKyNlbmRpZgogCiBhc21saW5rYWdlIGludCBkb19JUlEodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKIAkJICAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKIAkJICAgICAgc3RydWN0IHB0X3JlZ3MgcmVncykKIHsKIAlpbnQgaXJxID0gcjQ7CisjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisJdW5pb24gaXJxX2N0eCAqY3VyY3R4LCAqaXJxY3R4OworI2VuZGlmCiAKIAlpcnFfZW50ZXIoKTsKIAorI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS09WRVJGTE9XCisJLyogRGVidWdnaW5nIGNoZWNrIGZvciBzdGFjayBvdmVyZmxvdzogaXMgdGhlcmUgbGVzcyB0aGFuIDFLQiBmcmVlPyAqLworCXsKKwkJbG9uZyBzcDsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImFuZCByMTUsICUwIiA6CisJCQkJCSI9ciIgKHNwKSA6ICIwIiAoVEhSRUFEX1NJWkUgLSAxKSk7CisKKwkJaWYgKHVubGlrZWx5KHNwIDwgKHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pICsgU1RBQ0tfV0FSTikpKSB7CisJCQlwcmludGsoImRvX0lSUTogc3RhY2sgb3ZlcmZsb3c6ICVsZFxuIiwKKwkJCSAgICAgICBzcCAtIHNpemVvZihzdHJ1Y3QgdGhyZWFkX2luZm8pKTsKKwkJCWR1bXBfc3RhY2soKTsKKwkJfQorCX0KKyNlbmRpZgorCiAjaWZkZWYgQ09ORklHX0NQVV9IQVNfSU5URVZUCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKAogI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCkBAIC04Nyw3ICsxMTksMTM1IEBACiAjZW5kaWYKIAogCWlycSA9IGlycV9kZW11eChpcnEpOwotCV9fZG9fSVJRKGlycSwgJnJlZ3MpOworCisjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisJY3VyY3R4ID0gKHVuaW9uIGlycV9jdHggKiljdXJyZW50X3RocmVhZF9pbmZvKCk7CisJaXJxY3R4ID0gaGFyZGlycV9jdHhbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKworCS8qCisJICogdGhpcyBpcyB3aGVyZSB3ZSBzd2l0Y2ggdG8gdGhlIElSUSBzdGFjay4gSG93ZXZlciwgaWYgd2UgYXJlCisJICogYWxyZWFkeSB1c2luZyB0aGUgSVJRIHN0YWNrIChiZWNhdXNlIHdlIGludGVycnVwdGVkIGEgaGFyZGlycQorCSAqIGhhbmRsZXIpIHdlIGNhbid0IGRvIHRoYXQgYW5kIGp1c3QgaGF2ZSB0byBrZWVwIHVzaW5nIHRoZQorCSAqIGN1cnJlbnQgc3RhY2sgKHdoaWNoIGlzIHRoZSBpcnEgc3RhY2sgYWxyZWFkeSBhZnRlciBhbGwpCisJICovCisJaWYgKGN1cmN0eCAhPSBpcnFjdHgpIHsKKwkJdTMyICppc3A7CisKKwkJaXNwID0gKHUzMiAqKSgoY2hhciAqKWlycWN0eCArIHNpemVvZigqaXJxY3R4KSk7CisJCWlycWN0eC0+dGluZm8udGFzayA9IGN1cmN0eC0+dGluZm8udGFzazsKKwkJaXJxY3R4LT50aW5mby5wcmV2aW91c19zcCA9IGN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibW92CSUwLCByNAkJXG4iCisJCQkibW92CSUxLCByNQkJXG4iCisJCQkibW92CXIxNSwgcjkJCVxuIgorCQkJImpzcglAJTIJCVxuIgorCQkJLyogc3dpdGggdG8gdGhlIGlycSBzdGFjayAqLworCQkJIiBtb3YJJTMsIHIxNQkJXG4iCisJCQkvKiByZXN0b3JlIHRoZSBzdGFjayAocmluZyB6ZXJvKSAqLworCQkJIm1vdglyOSwgcjE1CQlcbiIKKwkJCTogLyogbm8gb3V0cHV0cyAqLworCQkJOiAiciIgKGlycSksICJyIiAoJnJlZ3MpLCAiciIgKF9fZG9fSVJRKSwgInIiIChpc3ApCisJCQkvKiBYWFg6IEEgc29tZXdoYXQgZXhjZXNzaXZlIGNsb2JiZXIgbGlzdD8gLVBGTSAqLworCQkJOiAibWVtb3J5IiwgInIwIiwgInIxIiwgInIyIiwgInIzIiwgInI0IiwKKwkJCSAgInI1IiwgInI2IiwgInI3IiwgInI4IiwgInQiLCAicHIiCisJCSk7CisJfSBlbHNlCisjZW5kaWYKKwkJX19kb19JUlEoaXJxLCAmcmVncyk7CisKIAlpcnFfZXhpdCgpOworCiAJcmV0dXJuIDE7CiB9CisKKyNpZmRlZiBDT05GSUdfNEtTVEFDS1MKKy8qCisgKiBUaGVzZSBzaG91bGQgcmVhbGx5IGJlIF9fc2VjdGlvbl9fKCIuYnNzLnBhZ2VfYWxpZ25lZCIpIGFzIHdlbGwsIGJ1dAorICogZ2NjJ3MgMy4wIGFuZCBlYXJsaWVyIGRvbid0IGhhbmRsZSB0aGF0IGNvcnJlY3RseS4KKyAqLworc3RhdGljIGNoYXIgc29mdGlycV9zdGFja1tOUl9DUFVTICogVEhSRUFEX1NJWkVdCisJCV9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFRIUkVBRF9TSVpFKSkpOworCitzdGF0aWMgY2hhciBoYXJkaXJxX3N0YWNrW05SX0NQVVMgKiBUSFJFQURfU0laRV0KKwkJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oVEhSRUFEX1NJWkUpKSk7CisKKy8qCisgKiBhbGxvY2F0ZSBwZXItY3B1IHN0YWNrcyBmb3IgaGFyZGlycSBhbmQgZm9yIHNvZnRpcnEgcHJvY2Vzc2luZworICovCit2b2lkIGlycV9jdHhfaW5pdChpbnQgY3B1KQoreworCXVuaW9uIGlycV9jdHggKmlycWN0eDsKKworCWlmIChoYXJkaXJxX2N0eFtjcHVdKQorCQlyZXR1cm47CisKKwlpcnFjdHggPSAodW5pb24gaXJxX2N0eCAqKSZoYXJkaXJxX3N0YWNrW2NwdSAqIFRIUkVBRF9TSVpFXTsKKwlpcnFjdHgtPnRpbmZvLnRhc2sJCT0gTlVMTDsKKwlpcnFjdHgtPnRpbmZvLmV4ZWNfZG9tYWluCT0gTlVMTDsKKwlpcnFjdHgtPnRpbmZvLmNwdQkJPSBjcHU7CisJaXJxY3R4LT50aW5mby5wcmVlbXB0X2NvdW50CT0gSEFSRElSUV9PRkZTRVQ7CisJaXJxY3R4LT50aW5mby5hZGRyX2xpbWl0CT0gTUFLRV9NTV9TRUcoMCk7CisKKwloYXJkaXJxX2N0eFtjcHVdID0gaXJxY3R4OworCisJaXJxY3R4ID0gKHVuaW9uIGlycV9jdHggKikmc29mdGlycV9zdGFja1tjcHUgKiBUSFJFQURfU0laRV07CisJaXJxY3R4LT50aW5mby50YXNrCQk9IE5VTEw7CisJaXJxY3R4LT50aW5mby5leGVjX2RvbWFpbgk9IE5VTEw7CisJaXJxY3R4LT50aW5mby5jcHUJCT0gY3B1OworCWlycWN0eC0+dGluZm8ucHJlZW1wdF9jb3VudAk9IFNPRlRJUlFfT0ZGU0VUOworCWlycWN0eC0+dGluZm8uYWRkcl9saW1pdAk9IE1BS0VfTU1fU0VHKDApOworCisJc29mdGlycV9jdHhbY3B1XSA9IGlycWN0eDsKKworCXByaW50aygiQ1BVICV1IGlycXN0YWNrcywgaGFyZD0lcCBzb2Z0PSVwXG4iLAorCQljcHUsIGhhcmRpcnFfY3R4W2NwdV0sIHNvZnRpcnFfY3R4W2NwdV0pOworfQorCit2b2lkIGlycV9jdHhfZXhpdChpbnQgY3B1KQoreworCWhhcmRpcnFfY3R4W2NwdV0gPSBOVUxMOworfQorCitleHRlcm4gYXNtbGlua2FnZSB2b2lkIF9fZG9fc29mdGlycSh2b2lkKTsKKworYXNtbGlua2FnZSB2b2lkIGRvX3NvZnRpcnEodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB0aHJlYWRfaW5mbyAqY3VyY3R4OworCXVuaW9uIGlycV9jdHggKmlycWN0eDsKKwl1MzIgKmlzcDsKKworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJcmV0dXJuOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCisJaWYgKGxvY2FsX3NvZnRpcnFfcGVuZGluZygpKSB7CisJCWN1cmN0eCA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKKwkJaXJxY3R4ID0gc29mdGlycV9jdHhbc21wX3Byb2Nlc3Nvcl9pZCgpXTsKKwkJaXJxY3R4LT50aW5mby50YXNrID0gY3VyY3R4LT50YXNrOworCQlpcnFjdHgtPnRpbmZvLnByZXZpb3VzX3NwID0gY3VycmVudF9zdGFja19wb2ludGVyOworCisJCS8qIGJ1aWxkIHRoZSBzdGFjayBmcmFtZSBvbiB0aGUgc29mdGlycSBzdGFjayAqLworCQlpc3AgPSAodTMyICopKChjaGFyICopaXJxY3R4ICsgc2l6ZW9mKCppcnFjdHgpKTsKKworCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisJCQkibW92CXIxNSwgcjkJCVxuIgorCQkJImpzcglAJTAJCVxuIgorCQkJLyogc3dpdGNoIHRvIHRoZSBzb2Z0aXJxIHN0YWNrICovCisJCQkiIG1vdgklMSwgcjE1CQlcbiIKKwkJCS8qIHJlc3RvcmUgdGhlIHRocmVhZCBzdGFjayAqLworCQkJIm1vdglyOSwgcjE1CQlcbiIKKwkJCTogLyogbm8gb3V0cHV0cyAqLworCQkJOiAiciIgKF9fZG9fc29mdGlycSksICJyIiAoaXNwKQorCQkJLyogWFhYOiBBIHNvbWV3aGF0IGV4Y2Vzc2l2ZSBjbG9iYmVyIGxpc3Q/IC1QRk0gKi8KKwkJCTogIm1lbW9yeSIsICJyMCIsICJyMSIsICJyMiIsICJyMyIsICJyNCIsCisJCQkgICJyNSIsICJyNiIsICJyNyIsICJyOCIsICJyOSIsICJyMTUiLCAidCIsICJwciIKKwkJKTsKKwl9CisKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MKGRvX3NvZnRpcnEpOworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9rZ2RiX3N0dWIuYyBiL2FyY2gvc2gva2VybmVsL2tnZGJfc3R1Yi5jCmluZGV4IDQyNjM4YjkuLjljNjMxNWYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL2tnZGJfc3R1Yi5jCisrKyBiL2FyY2gvc2gva2VybmVsL2tnZGJfc3R1Yi5jCkBAIC0xMDEsMTYgKzEwMSwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAKKyNpZmRlZiBDT05GSUdfU0hfS0dEQl9DT05TT0xFCisjaW5jbHVkZSA8bGludXgvY29uc29sZS5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KLQotI2lmZGVmIENPTkZJR19TSF9LR0RCX0NPTlNPTEUKLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+Ci0jZW5kaWYKKyNpbmNsdWRlIDxhc20vaW8uaD4KIAogLyogRnVuY3Rpb24gcG9pbnRlcnMgZm9yIGxpbmthZ2UgKi8KIGtnZGJfZGVidWdfaG9va190ICprZ2RiX2RlYnVnX2hvb2s7CkBAIC0yNDAsNyArMjQxLDYgQEAKIC8qIE1pc2Mgc3RhdGljICovCiBzdGF0aWMgaW50IHN0ZXBwZWRfYWRkcmVzczsKIHN0YXRpYyBzaG9ydCBzdGVwcGVkX29wY29kZTsKLXN0YXRpYyBjb25zdCBjaGFyIGhleGNoYXJzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CiBzdGF0aWMgY2hhciBpbl9idWZmZXJbQlVGTUFYXTsKIHN0YXRpYyBjaGFyIG91dF9idWZmZXJbT1VUQlVGTUFYXTsKIApAQCAtMjUzLDI5ICsyNTMsNiBAQAogI2RlZmluZSBCVUZfVEhSRUFEX0lEX1NJWkUgMTYKICNlbmRpZgogCi0vKiBSZXR1cm4gYWRkciBhcyBhIHJlYWwgdm9sYXRpbGUgYWRkcmVzcyAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgY3RybF9pbmwoY29uc3QgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCXJldHVybiAqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKikgYWRkcjsKLX0KLQotLyogQ29ycmVjdGx5IHNldCAqYWRkciB1c2luZyB2b2xhdGlsZSAqLwotc3RhdGljIGlubGluZSB2b2lkIGN0cmxfb3V0bChjb25zdCB1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKQotewotCSoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKSBhZGRyID0gYjsKLX0KLQotLyogR2V0IGhpZ2ggaGV4IGJpdHMgKi8KLXN0YXRpYyBjaGFyIGhpZ2hoZXgoY29uc3QgaW50IHgpCi17Ci0JcmV0dXJuIGhleGNoYXJzWyh4ID4+IDQpICYgMHhmXTsKLX0KLQotLyogR2V0IGxvdyBoZXggYml0cyAqLwotc3RhdGljIGNoYXIgbG93aGV4KGNvbnN0IGludCB4KQotewotCXJldHVybiBoZXhjaGFyc1t4ICYgMHhmXTsKLX0KIAogLyogQ29udmVydCBjaCB0byBoZXggKi8KIHN0YXRpYyBpbnQgaGV4KGNvbnN0IGNoYXIgY2gpCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMgYi9hcmNoL3NoL2tlcm5lbC9tYWNoaW5lX2tleGVjLmMKaW5kZXggNmJjZDhkOS4uMDg1ODdjZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvbWFjaGluZV9rZXhlYy5jCisrKyBiL2FyY2gvc2gva2VybmVsL21hY2hpbmVfa2V4ZWMuYwpAQCAtMjksMTIgKzI5LDYgQEAKIGV4dGVybiBjb25zdCB1bnNpZ25lZCBpbnQgcmVsb2NhdGVfbmV3X2tlcm5lbF9zaXplOwogZXh0ZXJuIHZvaWQgKmdkYl92YnJfdmVjdG9yOwogCi0vKgotICogUHJvdmlkZSBhIGR1bW15IGNyYXNoX25vdGVzIGRlZmluaXRpb24gd2hpbGUgY3Jhc2ggZHVtcCBhcnJpdmVzIHRvIHBwYy4KLSAqIFRoaXMgcHJldmVudHMgYnJlYWthZ2Ugb2YgY3Jhc2hfbm90ZXMgYXR0cmlidXRlIGluIGtlcm5lbC9rc3lzZnMuYy4KLSAqLwotdm9pZCAqY3Jhc2hfbm90ZXMgPSBOVUxMOwotCiB2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3BtLmMgYi9hcmNoL3NoL2tlcm5lbC9wbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYWI2MmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC9wbS5jCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiBHZW5lcmljIFBvd2VyIE1hbmFnZW1lbnQgUm91dGluZQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwNiBBbmRyaXkgU2t1bHlzaCA8YXNrdWxzeWhAZ21haWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorICovCisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8YXNtL2ZyZXEuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxhc20vcG0uaD4KKworI2RlZmluZSBJTlRSX09GRlNFVAkweDYwMAorCisjZGVmaW5lIFNUQkNSCQkweGZmZmZmZjgyCisjZGVmaW5lIFNUQkNSMgkJMHhmZmZmZmY4OAorCisjZGVmaW5lIFNUQkNSX1NUQlkJMHg4MAorI2RlZmluZSBTVEJDUl9NU1RQMgkweDA0CisKKyNkZWZpbmUgTUNSCQkweGZmZmZmZjY4CisjZGVmaW5lIFJUQ05UCQkweGZmZmZmZjcwCisKKyNkZWZpbmUgTUNSX1JNT0RFCTIKKyNkZWZpbmUgTUNSX1JGU0gJNAorCit2b2lkIHBtX2VudGVyKHZvaWQpCit7CisJdTggc3RiY3IsIGNzcjsKKwl1MTYgZnJxY3IsIG1jcjsKKwl1MzIgdmJyX25ldywgdmJyX29sZDsKKworCXNldF9ibF9iaXQoKTsKKworCS8qIHNldCB3ZHQgKi8KKwljc3IgPSBzaF93ZHRfcmVhZF9jc3IoKTsKKwljc3IgJj0gfldUQ1NSX1RNRTsKKwljc3IgfD0gV1RDU1JfQ0tTXzQwOTY7CisJc2hfd2R0X3dyaXRlX2Nzcihjc3IpOworCWNzciA9IHNoX3dkdF9yZWFkX2NzcigpOworCXNoX3dkdF93cml0ZV9jbnQoMCk7CisKKwkvKiBkaXNhYmxlIFBMTDEgKi8KKwlmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlmcnFjciAmPSB+KEZSUUNSX1BMTEVOIHwgRlJRQ1JfUFNUQlkpOworCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCisJLyogZW5hYmxlIHN0YW5kYnkgKi8KKwlzdGJjciA9IGN0cmxfaW5iKFNUQkNSKTsKKwljdHJsX291dGIoc3RiY3IgfCBTVEJDUl9TVEJZIHwgU1RCQ1JfTVNUUDIsIFNUQkNSKTsKKworCS8qIHNldCBzZWxmLXJlZnJlc2ggKi8KKwltY3IgPSBjdHJsX2ludyhNQ1IpOworCWN0cmxfb3V0dyhtY3IgJiB+TUNSX1JGU0gsIE1DUik7CisKKwkvKiBzZXQgaW50ZXJydXB0IGhhbmRsZXIgKi8KKwlhc20gdm9sYXRpbGUoInN0YyB2YnIsICUwIiA6ICI9ciIgKHZicl9vbGQpKTsKKwl2YnJfbmV3ID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCXVkZWxheSg1MCk7CisJbWVtY3B5KCh2b2lkKikodmJyX25ldyArIElOVFJfT0ZGU0VUKSwKKwkgICAgICAgJndha2V1cF9zdGFydCwgJndha2V1cF9lbmQgLSAmd2FrZXVwX3N0YXJ0KTsKKwlhc20gdm9sYXRpbGUoImxkYyAlMCwgdmJyIiA6IDogInIiICh2YnJfbmV3KSk7CisKKwljdHJsX291dHcoMCwgUlRDTlQpOworCWN0cmxfb3V0dyhtY3IgfCBNQ1JfUkZTSCB8IE1DUl9STU9ERSwgTUNSKTsKKworCWNwdV9zbGVlcCgpOworCisJYXNtIHZvbGF0aWxlKCJsZGMgJTAsIHZiciIgOiA6ICJyIiAodmJyX29sZCkpOworCisJZnJlZV9wYWdlKHZicl9uZXcpOworCisJLyogZW5hYmxlIFBMTDEgKi8KKwlmcnFjciA9IGN0cmxfaW53KEZSUUNSKTsKKwlmcnFjciB8PSBGUlFDUl9QU1RCWTsKKwljdHJsX291dHcoZnJxY3IsIEZSUUNSKTsKKwl1ZGVsYXkoNTApOworCWZycWNyIHw9IEZSUUNSX1BMTEVOOworCWN0cmxfb3V0dyhmcnFjciwgRlJRQ1IpOworCisJY3RybF9vdXRiKHN0YmNyLCBTVEJDUik7CisKKwljbGVhcl9ibF9iaXQoKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvc2gva2VybmVsL3Byb2Nlc3MuYwppbmRleCBmMjAzMTMxLi4wYjFkNWRkIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9wcm9jZXNzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHJvY2Vzcy5jCkBAIC04MSwxNiArODEsNiBAQAogCiB2b2lkIG1hY2hpbmVfcmVzdGFydChjaGFyICogX191bnVzZWQpCiB7Ci0KLSNpZmRlZiBDT05GSUdfS0VYRUMKLQlzdHJ1Y3Qga2ltYWdlICppbWFnZTsKLQlpbWFnZSA9IHhjaGcoJmtleGVjX2ltYWdlLCAwKTsKLQlpZiAoaW1hZ2UpIHsKLQkJbWFjaGluZV9zaHV0ZG93bigpOwotCQltYWNoaW5lX2tleGVjKGltYWdlKTsKLQl9Ci0jZW5kaWYKLQogCS8qIFNSLkJMPTEgYW5kIGludm9rZSBhZGRyZXNzIGVycm9yIHRvIGxldCBDUFUgcmVzZXQgKG1hbnVhbCByZXNldCkgKi8KIAlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3Jcblx0IgogCQkgICAgICJtb3YubCBAJTEsICUwIiA6IDogInIiICgweDEwMDAwMDAwKSwgInIiICgweDgwMDAwMDAxKSk7CkBAIC0yNjMsNiArMjUzLDcgQEAKIAkJdW5zaWduZWQgbG9uZyB1bnVzZWQsCiAJCXN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IHRocmVhZF9pbmZvICp0aSA9IHRhc2tfdGhyZWFkX2luZm8ocCk7CiAJc3RydWN0IHB0X3JlZ3MgKmNoaWxkcmVnczsKICNpZiBkZWZpbmVkKENPTkZJR19TSF9GUFUpCiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwpAQCAtMjc3LDggKzI2OCwxMCBAQAogCiAJaWYgKHVzZXJfbW9kZShyZWdzKSkgewogCQljaGlsZHJlZ3MtPnJlZ3NbMTVdID0gdXNwOworCQl0aS0+YWRkcl9saW1pdCA9IFVTRVJfRFM7CiAJfSBlbHNlIHsKIAkJY2hpbGRyZWdzLT5yZWdzWzE1XSA9ICh1bnNpZ25lZCBsb25nKXRhc2tfc3RhY2tfcGFnZShwKSArIFRIUkVBRF9TSVpFOworCQl0aS0+YWRkcl9saW1pdCA9IEtFUk5FTF9EUzsKIAl9CiAgICAgICAgIGlmIChjbG9uZV9mbGFncyAmIENMT05FX1NFVFRMUykgewogCQljaGlsZHJlZ3MtPmdiciA9IGNoaWxkcmVncy0+cmVnc1swXTsKQEAgLTI5OSwxMyArMjkyLDE1IEBACiB7CiAJY3RybF9vdXRsKHBjLCBVQkNfQkFSQSk7CiAKKyNpZmRlZiBDT05GSUdfTU1VCiAJLyogV2UgZG9uJ3QgaGF2ZSBhbnkgQVNJRCBzZXR0aW5ncyBmb3IgdGhlIFNILTIhICovCiAJaWYgKGNwdV9kYXRhLT50eXBlICE9IENQVV9TSDc2MDQpCiAJCWN0cmxfb3V0Yihhc2lkLCBVQkNfQkFTUkEpOworI2VuZGlmCiAKIAljdHJsX291dGwoMCwgVUJDX0JBTVJBKTsKIAotCWlmIChjcHVfZGF0YS0+dHlwZSA9PSBDUFVfU0g3NzI5KSB7CisJaWYgKGNwdV9kYXRhLT50eXBlID09IENQVV9TSDc3MjkgfHwgY3B1X2RhdGEtPnR5cGUgPT0gQ1BVX1NINzcxMCkgewogCQljdHJsX291dHcoQkJSX0lOU1QgfCBCQlJfUkVBRCB8IEJCUl9DUFUsIFVCQ19CQlJBKTsKIAkJY3RybF9vdXRsKEJSQ1JfUENCQSB8IEJSQ1JfUENURSwgVUJDX0JSQ1IpOwogCX0gZWxzZSB7CkBAIC0zNDQsNiArMzM5LDcgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NTVUKIAkvKgogCSAqIFJlc3RvcmUgdGhlIGtlcm5lbCBtb2RlIHJlZ2lzdGVyCiAJICogICAJazcgKHI3X2JhbmsxKQpAQCAtMzUxLDE5ICszNDcsMjEgQEAKIAlhc20gdm9sYXRpbGUoImxkYwklMCwgcjdfYmFuayIKIAkJICAgICA6IC8qIG5vIG91dHB1dCAqLwogCQkgICAgIDogInIiICh0YXNrX3RocmVhZF9pbmZvKG5leHQpKSk7CisjZW5kaWYKIAotI2lmZGVmIENPTkZJR19NTVUKIAkvKiBJZiBubyB0YXNrcyBhcmUgdXNpbmcgdGhlIFVCQywgd2UncmUgZG9uZSAqLwogCWlmICh1YmNfdXNlcmNudCA9PSAwKQogCQkvKiBJZiBubyB0YXNrcyBhcmUgdXNpbmcgdGhlIFVCQywgd2UncmUgZG9uZSAqLzsKIAllbHNlIGlmIChuZXh0LT50aHJlYWQudWJjX3BjICYmIG5leHQtPm1tKSB7Ci0JCXViY19zZXRfdHJhY2luZyhuZXh0LT5tbS0+Y29udGV4dCAmIE1NVV9DT05URVhUX0FTSURfTUFTSywKLQkJCQluZXh0LT50aHJlYWQudWJjX3BjKTsKKwkJaW50IGFzaWQgPSAwOworI2lmZGVmIENPTkZJR19NTVUKKwkJYXNpZCB8PSBuZXh0LT5tbS0+Y29udGV4dC5pZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKKyNlbmRpZgorCQl1YmNfc2V0X3RyYWNpbmcoYXNpZCwgbmV4dC0+dGhyZWFkLnViY19wYyk7CiAJfSBlbHNlIHsKIAkJY3RybF9vdXR3KDAsIFVCQ19CQlJBKTsKIAkJY3RybF9vdXR3KDAsIFVCQ19CQlJCKTsKIAl9Ci0jZW5kaWYKIAogCXJldHVybiBwcmV2OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMgYi9hcmNoL3NoL2tlcm5lbC9wdHJhY2UuYwppbmRleCBmN2VlYmJkLi4wNGNhMTNhMCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvcHRyYWNlLmMKQEAgLTIyNCw3ICsyMjQsNiBAQAogCiAJY2FzZSBQVFJBQ0VfU0VURFNQUkVHUzogewogCQl1bnNpZ25lZCBsb25nIGRwOwotCQlpbnQgaTsKIAogCQlyZXQgPSAtRUlPOwogCQlkcCA9ICgodW5zaWduZWQgbG9uZykgY2hpbGQpICsgVEhSRUFEX1NJWkUgLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2VtYXBob3JlLmMgYi9hcmNoL3NoL2tlcm5lbC9zZW1hcGhvcmUuYwppbmRleCBhM2MyNGRjLi4xODQxMTllIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zZW1hcGhvcmUuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zZW1hcGhvcmUuYwpAQCAtMTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLWhlbHBlci5oPgogCi1zcGlubG9ja190IHNlbWFwaG9yZV93YWtlX2xvY2s7CitERUZJTkVfU1BJTkxPQ0soc2VtYXBob3JlX3dha2VfbG9jayk7CiAKIC8qCiAgKiBTZW1hcGhvcmVzIGFyZSBpbXBsZW1lbnRlZCB1c2luZyBhIHR3by13YXkgY291bnRlcjoKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMgYi9hcmNoL3NoL2tlcm5lbC9zZXR1cC5jCmluZGV4IGU3NTE4OWMuLjVmNTg3MzMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2V0dXAuYwpAQCAtNDMsMjcgKzQzLDE0IEBACiAgKiBUaGUgYmlnZ2VyIHZhbHVlIG1lYW5zIG5vIHByb2JsZW0uCiAgKi8KIHN0cnVjdCBzaF9jcHVpbmZvIGJvb3RfY3B1X2RhdGEgPSB7IENQVV9TSF9OT05FLCAxMDAwMDAwMCwgfTsKKyNpZmRlZiBDT05GSUdfVlQKIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0hfVU5LTk9XTikKIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBzaF9tdjsKICNlbmRpZgogCi0vKiBXZSBuZWVkIHRoaXMgdG8gc2F0aXNmeSBzb21lIGV4dGVybmFsIHJlZmVyZW5jZXMuICovCi1zdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm8gPSB7Ci0gICAgICAgIDAsIDI1LCAgICAgICAgICAgICAgICAgIC8qIG9yaWcteCwgb3JpZy15ICovCi0gICAgICAgIDAsICAgICAgICAgICAgICAgICAgICAgIC8qIHVudXNlZCAqLwotICAgICAgICAwLCAgICAgICAgICAgICAgICAgICAgICAvKiBvcmlnLXZpZGVvLXBhZ2UgKi8KLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogb3JpZy12aWRlby1tb2RlICovCi0gICAgICAgIDgwLCAgICAgICAgICAgICAgICAgICAgIC8qIG9yaWctdmlkZW8tY29scyAqLwotICAgICAgICAwLDAsMCwgICAgICAgICAgICAgICAgICAvKiBlZ2FfYXgsIGVnYV9ieCwgZWdhX2N4ICovCi0gICAgICAgIDI1LCAgICAgICAgICAgICAgICAgICAgIC8qIG9yaWctdmlkZW8tbGluZXMgKi8KLSAgICAgICAgMCwgICAgICAgICAgICAgICAgICAgICAgLyogb3JpZy12aWRlby1pc1ZHQSAqLwotICAgICAgICAxNiAgICAgICAgICAgICAgICAgICAgICAvKiBvcmlnLXZpZGVvLXBvaW50cyAqLwotfTsKLQotZXh0ZXJuIHZvaWQgcGxhdGZvcm1fc2V0dXAodm9pZCk7Ci1leHRlcm4gY2hhciAqZ2V0X3N5c3RlbV90eXBlKHZvaWQpOwogZXh0ZXJuIGludCByb290X21vdW50ZmxhZ3M7CiAKICNkZWZpbmUgTVZfTkFNRV9TSVpFIDMyCkBAIC05MCwyOSArNzcsOCBAQAogCiBzdGF0aWMgY2hhciBjb21tYW5kX2xpbmVbQ09NTUFORF9MSU5FX1NJWkVdID0geyAwLCB9OwogCi1zdHJ1Y3QgcmVzb3VyY2Ugc3RhbmRhcmRfaW9fcmVzb3VyY2VzW10gPSB7Ci0JeyAiZG1hMSIsIDB4MDAsIDB4MWYgfSwKLQl7ICJwaWMxIiwgMHgyMCwgMHgzZiB9LAotCXsgInRpbWVyIiwgMHg0MCwgMHg1ZiB9LAotCXsgImtleWJvYXJkIiwgMHg2MCwgMHg2ZiB9LAotCXsgImRtYSBwYWdlIHJlZyIsIDB4ODAsIDB4OGYgfSwKLQl7ICJwaWMyIiwgMHhhMCwgMHhiZiB9LAotCXsgImRtYTIiLCAweGMwLCAweGRmIH0sCi0JeyAiZnB1IiwgMHhmMCwgMHhmZiB9Ci19OwotCi0jZGVmaW5lIFNUQU5EQVJEX0lPX1JFU09VUkNFUyAoc2l6ZW9mKHN0YW5kYXJkX2lvX3Jlc291cmNlcykvc2l6ZW9mKHN0cnVjdCByZXNvdXJjZSkpCi0KLS8qIFN5c3RlbSBSQU0gLSBpbnRlcnJ1cHRlZCBieSB0aGUgNjQwa0ItMU0gaG9sZSAqLwotI2RlZmluZSBjb2RlX3Jlc291cmNlIChyYW1fcmVzb3VyY2VzWzNdKQotI2RlZmluZSBkYXRhX3Jlc291cmNlIChyYW1fcmVzb3VyY2VzWzRdKQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSByYW1fcmVzb3VyY2VzW10gPSB7Ci0JeyAiU3lzdGVtIFJBTSIsIDB4MDAwMDAwLCAweDA5ZmZmZiwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiU3lzdGVtIFJBTSIsIDB4MTAwMDAwLCAweDEwMDAwMCwgSU9SRVNPVVJDRV9CVVNZIH0sCi0JeyAiVmlkZW8gUkFNIGFyZWEiLCAweDBhMDAwMCwgMHgwYmZmZmYgfSwKLQl7ICJLZXJuZWwgY29kZSIsIDB4MTAwMDAwLCAwIH0sCi0JeyAiS2VybmVsIGRhdGEiLCAwLCAwIH0KLX07CitzdGF0aWMgc3RydWN0IHJlc291cmNlIGNvZGVfcmVzb3VyY2UgPSB7IC5uYW1lID0gIktlcm5lbCBjb2RlIiwgfTsKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgZGF0YV9yZXNvdXJjZSA9IHsgLm5hbWUgPSAiS2VybmVsIGRhdGEiLCB9OwogCiB1bnNpZ25lZCBsb25nIG1lbW9yeV9zdGFydCwgbWVtb3J5X2VuZDsKIApAQCAtMTQ1LDYgKzExMSwyNCBAQAogCQkJCW1lbW9yeV9lbmQgPSBtZW1vcnlfc3RhcnQgKyBtZW1fc2l6ZTsKIAkJCX0KIAkJfQorCisjaWZkZWYgQ09ORklHX0VBUkxZX1BSSU5USworCQlpZiAoYyA9PSAnICcgJiYgIW1lbWNtcChmcm9tLCAiZWFybHlwcmludGs9IiwgMTIpKSB7CisJCQljaGFyICplcF9lbmQ7CisKKwkJCWlmICh0byAhPSBjb21tYW5kX2xpbmUpCisJCQkJdG8tLTsKKworCQkJZnJvbSArPSAxMjsKKwkJCWVwX2VuZCA9IHN0cmNocihmcm9tLCAnICcpOworCisJCQlzZXR1cF9lYXJseV9wcmludGsoZnJvbSk7CisJCQlwcmludGsoImVhcmx5IGNvbnNvbGUgZW5hYmxlZFxuIik7CisKKwkJCWZyb20gPSBlcF9lbmQ7CisJCX0KKyNlbmRpZgorCiAJCWlmIChjID09ICcgJyAmJiAhbWVtY21wKGZyb20sICJzaF9tdj0iLCA2KSkgewogCQkJY2hhciogbXZfZW5kOwogCQkJY2hhciogbXZfY29tbWE7CkBAIC0yMzcsNiArMjIxLDkgQEAKIAlfX3NldF9pb19wb3J0X2Jhc2UobXZfaW9fYmFzZSk7CiAjZW5kaWYKIAorCWlmICghc2hfbXYubXZfbnJfaXJxcykKKwkJc2hfbXYubXZfbnJfaXJxcyA9IE5SX0lSUVM7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjQ1LDExICsyMzIsNiBAQAogCXVuc2lnbmVkIGxvbmcgYm9vdG1hcF9zaXplOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBtYXhfcGZuLCBtYXhfbG93X3BmbjsKIAotI2lmZGVmIENPTkZJR19FQVJMWV9QUklOVEsKLQlleHRlcm4gdm9pZCBlbmFibGVfZWFybHlfcHJpbnRrKHZvaWQpOwotCi0JZW5hYmxlX2Vhcmx5X3ByaW50aygpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX0NNRExJTkVfQk9PTAogICAgICAgICBzdHJjcHkoQ09NTUFORF9MSU5FLCBDT05GSUdfQ01ETElORSk7CiAjZW5kaWYKQEAgLTM2OCwxNCArMzUwLDE0IEBACiAjZW5kaWYKIAogCS8qIFBlcmZvcm0gdGhlIG1hY2hpbmUgc3BlY2lmaWMgaW5pdGlhbGlzYXRpb24gKi8KLQlwbGF0Zm9ybV9zZXR1cCgpOworCWlmIChsaWtlbHkoc2hfbXYubXZfc2V0dXApKQorCQlzaF9tdi5tdl9zZXR1cChjbWRsaW5lX3ApOwogCiAJcGFnaW5nX2luaXQoKTsKIH0KIAogc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yKiBfX2luaXQgZ2V0X212X2J5bmFtZShjb25zdCBjaGFyKiBuYW1lKQogewotCWV4dGVybiBpbnQgc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CiAJZXh0ZXJuIGxvbmcgX19tYWNodmVjX3N0YXJ0LCBfX21hY2h2ZWNfZW5kOwogCXN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciAqYWxsX3ZlY3MgPQogCQkoc3RydWN0IHNoX21hY2hpbmVfdmVjdG9yICopJl9fbWFjaHZlY19zdGFydDsKQEAgLTQxMCwyNSArMzkyLDE4IEBACiBzdWJzeXNfaW5pdGNhbGwodG9wb2xvZ3lfaW5pdCk7CiAKIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfbmFtZVtdID0gewotCVtDUFVfU0g3NjA0XQk9ICJTSDc2MDQiLAotCVtDUFVfU0g3NzA1XQk9ICJTSDc3MDUiLAotCVtDUFVfU0g3NzA4XQk9ICJTSDc3MDgiLAotCVtDUFVfU0g3NzI5XQk9ICJTSDc3MjkiLAotCVtDUFVfU0g3MzAwXQk9ICJTSDczMDAiLAotCVtDUFVfU0g3NzUwXQk9ICJTSDc3NTAiLAotCVtDUFVfU0g3NzUwU10JPSAiU0g3NzUwUyIsCi0JW0NQVV9TSDc3NTBSXQk9ICJTSDc3NTBSIiwKLQlbQ1BVX1NINzc1MV0JPSAiU0g3NzUxIiwKLQlbQ1BVX1NINzc1MVJdCT0gIlNINzc1MVIiLAotCVtDUFVfU0g3NzYwXQk9ICJTSDc3NjAiLAotCVtDUFVfU0g3MzE4MF0JPSAiU0g3MzE4MCIsCi0JW0NQVV9TVDQwUkFdCT0gIlNUNDBSQSIsCi0JW0NQVV9TVDQwR1gxXQk9ICJTVDQwR1gxIiwKLQlbQ1BVX1NINF8yMDJdCT0gIlNINC0yMDIiLAotCVtDUFVfU0g0XzUwMV0JPSAiU0g0LTUwMSIsCi0JW0NQVV9TSDc3NzBdCT0gIlNINzc3MCIsCi0JW0NQVV9TSDc3ODBdCT0gIlNINzc4MCIsCi0JW0NQVV9TSDc3ODFdCT0gIlNINzc4MSIsCisJW0NQVV9TSDc2MDRdCT0gIlNINzYwNCIsCVtDUFVfU0g3MzAwXQk9ICJTSDczMDAiLAorCVtDUFVfU0g3NzA1XQk9ICJTSDc3MDUiLAlbQ1BVX1NINzcwNl0JPSAiU0g3NzA2IiwKKwlbQ1BVX1NINzcwN10JPSAiU0g3NzA3IiwJW0NQVV9TSDc3MDhdCT0gIlNINzcwOCIsCisJW0NQVV9TSDc3MDldCT0gIlNINzcwOSIsCVtDUFVfU0g3NzEwXQk9ICJTSDc3MTAiLAorCVtDUFVfU0g3NzI5XQk9ICJTSDc3MjkiLAlbQ1BVX1NINzc1MF0JPSAiU0g3NzUwIiwKKwlbQ1BVX1NINzc1MFNdCT0gIlNINzc1MFMiLAlbQ1BVX1NINzc1MFJdCT0gIlNINzc1MFIiLAorCVtDUFVfU0g3NzUxXQk9ICJTSDc3NTEiLAlbQ1BVX1NINzc1MVJdCT0gIlNINzc1MVIiLAorCVtDUFVfU0g3NzYwXQk9ICJTSDc3NjAiLAlbQ1BVX1NINzMxODBdCT0gIlNINzMxODAiLAorCVtDUFVfU1Q0MFJBXQk9ICJTVDQwUkEiLAlbQ1BVX1NUNDBHWDFdCT0gIlNUNDBHWDEiLAorCVtDUFVfU0g0XzIwMl0JPSAiU0g0LTIwMiIsCVtDUFVfU0g0XzUwMV0JPSAiU0g0LTUwMSIsCisJW0NQVV9TSDc3NzBdCT0gIlNINzc3MCIsCVtDUFVfU0g3NzgwXQk9ICJTSDc3ODAiLAorCVtDUFVfU0g3NzgxXQk9ICJTSDc3ODEiLAlbQ1BVX1NINzM0M10JPSAiU0g3MzQzIiwKIAlbQ1BVX1NIX05PTkVdCT0gIlVua25vd24iCiB9OwogCkBAIC00MzgsOCArNDEzLDEwIEBACiB9CiAKICNpZmRlZiBDT05GSUdfUFJPQ19GUworLyogU3ltYm9saWMgQ1BVIGZsYWdzLCBrZWVwIGluIHN5bmMgd2l0aCBhc20vY3B1LWZlYXR1cmVzLmggKi8KIHN0YXRpYyBjb25zdCBjaGFyICpjcHVfZmxhZ3NbXSA9IHsKLQkibm9uZSIsICJmcHUiLCAicDJmbHVzaCIsICJtbXVhc3NvYyIsICJkc3AiLCAicGVyZmN0ciIsICJwdGVhIiwgTlVMTAorCSJub25lIiwgImZwdSIsICJwMmZsdXNoIiwgIm1tdWFzc29jIiwgImRzcCIsICJwZXJmY3RyIiwKKwkicHRlYSIsICJsbHNjIiwgImwyIiwgTlVMTAogfTsKIAogc3RhdGljIHZvaWQgc2hvd19jcHVmbGFncyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCkBAIC00NjAsNyArNDM3LDggQEAKIAlzZXFfcHJpbnRmKG0sICJcbiIpOwogfQogCi1zdGF0aWMgdm9pZCBzaG93X2NhY2hlaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnR5cGUsIHN0cnVjdCBjYWNoZV9pbmZvIGluZm8pCitzdGF0aWMgdm9pZCBzaG93X2NhY2hlaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGNvbnN0IGNoYXIgKnR5cGUsCisJCQkgICBzdHJ1Y3QgY2FjaGVfaW5mbyBpbmZvKQogewogCXVuc2lnbmVkIGludCBjYWNoZV9zaXplOwogCkBAIC00OTMsNyArNDcxLDcgQEAKIAkgKiB1bmlmaWVkIGNhY2hlIG9uIHRoZSBTSC0yIGFuZCBTSC0zLCBhcyB3ZWxsIGFzIHRoZSBoYXJ2YXJkCiAJICogc3R5bGUgY2FjaGUgb24gdGhlIFNILTQuCiAJICovCi0JaWYgKHRlc3RfYml0KFNIX0NBQ0hFX0NPTUJJTkVELCAmKGJvb3RfY3B1X2RhdGEuaWNhY2hlLmZsYWdzKSkpIHsKKwlpZiAoYm9vdF9jcHVfZGF0YS5pY2FjaGUuZmxhZ3MgJiBTSF9DQUNIRV9DT01CSU5FRCkgewogCQlzZXFfcHJpbnRmKG0sICJ1bmlmaWVkXG4iKTsKIAkJc2hvd19jYWNoZWluZm8obSwgImNhY2hlIiwgYm9vdF9jcHVfZGF0YS5pY2FjaGUpOwogCX0gZWxzZSB7CkBAIC01MDIsNiArNDgwLDEwIEBACiAJCXNob3dfY2FjaGVpbmZvKG0sICJkY2FjaGUiLCBib290X2NwdV9kYXRhLmRjYWNoZSk7CiAJfQogCisJLyogT3B0aW9uYWwgc2Vjb25kYXJ5IGNhY2hlICovCisJaWYgKGJvb3RfY3B1X2RhdGEuZmxhZ3MgJiBDUFVfSEFTX0wyX0NBQ0hFKQorCQlzaG93X2NhY2hlaW5mbyhtLCAic2NhY2hlIiwgYm9vdF9jcHVfZGF0YS5zY2FjaGUpOworCiAJc2VxX3ByaW50ZihtLCAiYm9nb21pcHNcdDogJWx1LiUwMmx1XG4iLAogCQkgICAgIGJvb3RfY3B1X2RhdGEubG9vcHNfcGVyX2ppZmZ5Lyg1MDAwMDAvSFopLAogCQkgICAgIChib290X2NwdV9kYXRhLmxvb3BzX3Blcl9qaWZmeS8oNTAwMC9IWikpICUgMTAwKTsKQEAgLTYxNyw0ICs1OTksMyBAQAogfQogX19zZXR1cCgia2dkYj0iLCBrZ2RiX3BhcnNlX29wdGlvbnMpOwogI2VuZGlmIC8qIENPTkZJR19TSF9LR0RCICovCi0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMgYi9hcmNoL3NoL2tlcm5lbC9zaF9rc3ltcy5jCmluZGV4IDI0NWVkOGYuLmQzY2JmYTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3NoX2tzeW1zLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc2hfa3N5bXMuYwpAQCAtMjcsMjEgKzI3LDExIEBACiAKIC8qIHBsYXRmb3JtIGRlcGVuZGVudCBzdXBwb3J0ICovCiBFWFBPUlRfU1lNQk9MKGR1bXBfZnB1KTsKLUVYUE9SVF9TWU1CT0woaW91bm1hcCk7Ci1FWFBPUlRfU1lNQk9MKGVuYWJsZV9pcnEpOwotRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7Ci1FWFBPUlRfU1lNQk9MKHByb2JlX2lycV9tYXNrKTsKIEVYUE9SVF9TWU1CT0woa2VybmVsX3RocmVhZCk7Ci1FWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CiBFWFBPUlRfU1lNQk9MKGlycV9kZXNjKTsKIEVYUE9SVF9TWU1CT0wobm9faXJxX3R5cGUpOwogCi1FWFBPUlRfU1lNQk9MKHN0cnN0cik7CiBFWFBPUlRfU1lNQk9MKHN0cmxlbik7Ci1FWFBPUlRfU1lNQk9MKHN0cm5sZW4pOwotRVhQT1JUX1NZTUJPTChzdHJjaHIpOwotRVhQT1JUX1NZTUJPTChzdHJjYXQpOwotRVhQT1JUX1NZTUJPTChzdHJuY2F0KTsKIAogLyogUENJIGV4cG9ydHMgKi8KICNpZmRlZiBDT05GSUdfUENJCkBAIC01MiwxMyArNDIsOCBAQAogLyogbWVtIGV4cG9ydHMgKi8KIEVYUE9SVF9TWU1CT0wobWVtY2hyKTsKIEVYUE9SVF9TWU1CT0wobWVtY3B5KTsKLUVYUE9SVF9TWU1CT0wobWVtY3B5X2Zyb21pbyk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNweV90b2lvKTsKIEVYUE9SVF9TWU1CT0wobWVtc2V0KTsKLUVYUE9SVF9TWU1CT0wobWVtc2V0X2lvKTsKIEVYUE9SVF9TWU1CT0wobWVtbW92ZSk7Ci1FWFBPUlRfU1lNQk9MKG1lbWNtcCk7Ci1FWFBPUlRfU1lNQk9MKG1lbXNjYW4pOwogRVhQT1JUX1NZTUJPTChfX2NvcHlfdXNlcik7CiBFWFBPUlRfU1lNQk9MKGJvb3RfY3B1X2RhdGEpOwogCkBAIC05NCw3ICs3OSw5IEBACiBERUNMQVJFX0VYUE9SVChfX21vdnN0cl9pNF9ldmVuKTsKIERFQ0xBUkVfRVhQT1JUKF9fbW92c3RyX2k0X29kZCk7CiBERUNMQVJFX0VYUE9SVChfX21vdnN0clNJMTJfaTQpOworI2VuZGlmCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSB8fCBkZWZpbmVkKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikKIC8qIG5lZWRlZCBieSBzb21lIG1vZHVsZXMgKi8KIEVYUE9SVF9TWU1CT0woZmx1c2hfY2FjaGVfYWxsKTsKIEVYUE9SVF9TWU1CT0woZmx1c2hfY2FjaGVfcmFuZ2UpOwpAQCAtMTAyLDExICs4OSw5IEBACiBFWFBPUlRfU1lNQk9MKF9fZmx1c2hfcHVyZ2VfcmVnaW9uKTsKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfU0g3NzA1X0NBQ0hFXzMyS0IpCi1FWFBPUlRfU1lNQk9MKGZsdXNoX2NhY2hlX2FsbCk7Ci1FWFBPUlRfU1lNQk9MKGZsdXNoX2NhY2hlX3JhbmdlKTsKLUVYUE9SVF9TWU1CT0woZmx1c2hfZGNhY2hlX3BhZ2UpOwotRVhQT1JUX1NZTUJPTChfX2ZsdXNoX3B1cmdlX3JlZ2lvbik7CisjaWYgZGVmaW5lZChDT05GSUdfTU1VKSAmJiAoZGVmaW5lZChDT05GSUdfQ1BVX1NINCkgfHwgXAorCWRlZmluZWQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKSkKK0VYUE9SVF9TWU1CT0woY2xlYXJfdXNlcl9wYWdlKTsKICNlbmRpZgogCiBFWFBPUlRfU1lNQk9MKGZsdXNoX3RsYl9wYWdlKTsKQEAgLTExNiw3ICsxMDEsMTIgQEAKIEVYUE9SVF9TWU1CT0woc3luY2hyb25pemVfaXJxKTsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BNCitFWFBPUlRfU1lNQk9MKHBtX3N1c3BlbmQpOworI2VuZGlmCisKIEVYUE9SVF9TWU1CT0woY3N1bV9wYXJ0aWFsKTsKKyNpZmRlZiBDT05GSUdfSVBWNgogRVhQT1JUX1NZTUJPTChjc3VtX2lwdjZfbWFnaWMpOwotRVhQT1JUX1NZTUJPTChjb25zaXN0ZW50X3N5bmMpOworI2VuZGlmCiBFWFBPUlRfU1lNQk9MKGNsZWFyX3BhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWwuYwppbmRleCBiNDc1YzRkLi41MjEzZjViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3NoL2tlcm5lbC9zaWduYWwuYwpAQCAtOCw3ICs4LDYgQEAKICAqICBTdXBlckggdmVyc2lvbjogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCAgTmlpYmUgWXV0YWthICYgS2F6IEtvamltYQogICoKICAqLwotCiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgpAQCAtMjEsNiArMjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3VuaXN0ZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvYmluZm10cy5oPgogCkBAIC0yOSwxMiArMjksOCBAQAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KIAotI2RlZmluZSBERUJVR19TSUcgMAotCiAjZGVmaW5lIF9CTE9DS0FCTEUgKH4oc2lnbWFzayhTSUdLSUxMKSB8IHNpZ21hc2soU0lHU1RPUCkpKQogCi1hc21saW5rYWdlIGludCBkb19zaWduYWwoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHNpZ3NldF90ICpvbGRzZXQpOwotCiAvKgogICogQXRvbWljYWxseSBzd2FwIGluIHRoZSBuZXcgc2lnbmFsIG1hc2ssIGFuZCB3YWl0IGZvciBhIHNpZ25hbC4KICAqLwpAQCAtNDMsNTEgKzM5LDE3IEBACiAJICAgICAgIHVuc2lnbmVkIGxvbmcgcjUsIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCiAJICAgICAgIHN0cnVjdCBwdF9yZWdzIHJlZ3MpCiB7Ci0Jc2lnc2V0X3Qgc2F2ZXNldDsKLQogCW1hc2sgJj0gX0JMT0NLQUJMRTsKIAlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzYXZlc2V0ID0gY3VycmVudC0+YmxvY2tlZDsKKwljdXJyZW50LT5zYXZlZF9zaWdtYXNrID0gY3VycmVudC0+YmxvY2tlZDsKIAlzaWdpbml0c2V0KCZjdXJyZW50LT5ibG9ja2VkLCBtYXNrKTsKIAlyZWNhbGNfc2lncGVuZGluZygpOwogCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CiAKLQlyZWdzLnJlZ3NbMF0gPSAtRUlOVFI7Ci0Jd2hpbGUgKDEpIHsKLQkJY3VycmVudC0+c3RhdGUgPSBUQVNLX0lOVEVSUlVQVElCTEU7Ci0JCXNjaGVkdWxlKCk7Ci0JCWlmIChkb19zaWduYWwoJnJlZ3MsICZzYXZlc2V0KSkKLQkJCXJldHVybiAtRUlOVFI7Ci0JfQotfQotCi1hc21saW5rYWdlIGludAotc3lzX3J0X3NpZ3N1c3BlbmQoc2lnc2V0X3QgKnVuZXdzZXQsIHNpemVfdCBzaWdzZXRzaXplLAotCQkgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcsCi0JCSAgc3RydWN0IHB0X3JlZ3MgcmVncykKLXsKLQlzaWdzZXRfdCBzYXZlc2V0LCBuZXdzZXQ7Ci0KLQkvKiBYWFg6IERvbid0IHByZWNsdWRlIGhhbmRsaW5nIGRpZmZlcmVudCBzaXplZCBzaWdzZXRfdCdzLiAgKi8KLQlpZiAoc2lnc2V0c2l6ZSAhPSBzaXplb2Yoc2lnc2V0X3QpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmIChjb3B5X2Zyb21fdXNlcigmbmV3c2V0LCB1bmV3c2V0LCBzaXplb2YobmV3c2V0KSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXNpZ2RlbHNldG1hc2soJm5ld3NldCwgfl9CTE9DS0FCTEUpOwotCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCXNhdmVzZXQgPSBjdXJyZW50LT5ibG9ja2VkOwotCWN1cnJlbnQtPmJsb2NrZWQgPSBuZXdzZXQ7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwotCi0JcmVncy5yZWdzWzBdID0gLUVJTlRSOwotCXdoaWxlICgxKSB7Ci0JCWN1cnJlbnQtPnN0YXRlID0gVEFTS19JTlRFUlJVUFRJQkxFOwotCQlzY2hlZHVsZSgpOwotCQlpZiAoZG9fc2lnbmFsKCZyZWdzLCAmc2F2ZXNldCkpCi0JCQlyZXR1cm4gLUVJTlRSOwotCX0KKwljdXJyZW50LT5zdGF0ZSA9IFRBU0tfSU5URVJSVVBUSUJMRTsKKwlzY2hlZHVsZSgpOworCXNldF90aHJlYWRfZmxhZyhUSUZfUkVTVE9SRV9TSUdNQVNLKTsKKwlyZXR1cm4gLUVSRVNUQVJUTk9IQU5EOwogfQogCiBhc21saW5rYWdlIGludCAKQEAgLTM0OCw3ICszMTAsMTIgQEAKIAlyZXR1cm4gKHZvaWQgX191c2VyICopKChzcCAtIGZyYW1lX3NpemUpICYgLTh1bCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCisvKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIHdpdGggdGhlIGFkZHJlc3NlcyBpbiB0aGUgdnN5c2NhbGwgcGFnZS4KKyAgIFNlZSB2c3lzY2FsbC10cmFwYS5TLiAgKi8KK2V4dGVybiB2b2lkIF9fdXNlciBfX2tlcm5lbF9zaWdyZXR1cm47CitleHRlcm4gdm9pZCBfX3VzZXIgX19rZXJuZWxfcnRfc2lncmV0dXJuOworCitzdGF0aWMgaW50IHNldHVwX2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsCiAJCQlzaWdzZXRfdCAqc2V0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc2lnZnJhbWUgX191c2VyICpmcmFtZTsKQEAgLTM2OCwxNSArMzM1LDE4IEBACiAKIAllcnIgfD0gc2V0dXBfc2lnY29udGV4dCgmZnJhbWUtPnNjLCByZWdzLCBzZXQtPnNpZ1swXSk7CiAKLQlpZiAoX05TSUdfV09SRFMgPiAxKSB7CisJaWYgKF9OU0lHX1dPUkRTID4gMSkKIAkJZXJyIHw9IF9fY29weV90b191c2VyKGZyYW1lLT5leHRyYW1hc2ssICZzZXQtPnNpZ1sxXSwKIAkJCQkgICAgICBzaXplb2YoZnJhbWUtPmV4dHJhbWFzaykpOwotCX0KIAogCS8qIFNldCB1cCB0byByZXR1cm4gZnJvbSB1c2Vyc3BhY2UuICBJZiBwcm92aWRlZCwgdXNlIGEgc3R1YgogCSAgIGFscmVhZHkgaW4gdXNlcnNwYWNlLiAgKi8KIAlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpIHsKIAkJcmVncy0+cHIgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOworI2lmZGVmIENPTkZJR19WU1lTQ0FMTAorCX0gZWxzZSBpZiAobGlrZWx5KGN1cnJlbnQtPm1tLT5jb250ZXh0LnZkc28pKSB7CisJCXJlZ3MtPnByID0gVkRTT19TWU0oJl9fa2VybmVsX3NpZ3JldHVybik7CisjZW5kaWYKIAl9IGVsc2UgewogCQkvKiBHZW5lcmF0ZSByZXR1cm4gY29kZSAoc3lzdGVtIGNhbGwgdG8gc2lncmV0dXJuKSAqLwogCQllcnIgfD0gX19wdXRfdXNlcihNT1ZXKDcpLCAmZnJhbWUtPnJldGNvZGVbMF0pOwpAQCAtNDAyLDIxICszNzIsMjIgQEAKIAogCXNldF9mcyhVU0VSX0RTKTsKIAotI2lmIERFQlVHX1NJRwotCXByaW50aygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JTA4bHggcHI9JTA4bHhcbiIsCi0JCWN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7Ci0jZW5kaWYKKwlwcl9kZWJ1ZygiU0lHIGRlbGl2ZXIgKCVzOiVkKTogc3A9JXAgcGM9JTA4bHggcHI9JTA4bHhcbiIsCisJCSBjdXJyZW50LT5jb21tLCBjdXJyZW50LT5waWQsIGZyYW1lLCByZWdzLT5wYywgcmVncy0+cHIpOwogCiAJZmx1c2hfY2FjaGVfc2lndHJhbXAocmVncy0+cHIpOworCiAJaWYgKCgtcmVncy0+cHIgJiAoTDFfQ0FDSEVfQllURVMtMSkpIDwgc2l6ZW9mKGZyYW1lLT5yZXRjb2RlKSkKIAkJZmx1c2hfY2FjaGVfc2lndHJhbXAocmVncy0+cHIgKyBMMV9DQUNIRV9CWVRFUyk7Ci0JcmV0dXJuOworCisJcmV0dXJuIDA7CiAKIGdpdmVfc2lnc2VndjoKIAlmb3JjZV9zaWdzZWd2KHNpZywgY3VycmVudCk7CisJcmV0dXJuIC1FRkFVTFQ7CiB9CiAKLXN0YXRpYyB2b2lkIHNldHVwX3J0X2ZyYW1lKGludCBzaWcsIHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHNpZ2luZm9fdCAqaW5mbywKK3N0YXRpYyBpbnQgc2V0dXBfcnRfZnJhbWUoaW50IHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCQkJICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJc3RydWN0IHJ0X3NpZ2ZyYW1lIF9fdXNlciAqZnJhbWU7CkBAIC00NTIsNiArNDIzLDEwIEBACiAJICAgYWxyZWFkeSBpbiB1c2Vyc3BhY2UuICAqLwogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9SRVNUT1JFUikgewogCQlyZWdzLT5wciA9ICh1bnNpZ25lZCBsb25nKSBrYS0+c2Euc2FfcmVzdG9yZXI7CisjaWZkZWYgQ09ORklHX1ZTWVNDQUxMCisJfSBlbHNlIGlmIChsaWtlbHkoY3VycmVudC0+bW0tPmNvbnRleHQudmRzbykpIHsKKwkJcmVncy0+cHIgPSBWRFNPX1NZTSgmX19rZXJuZWxfcnRfc2lncmV0dXJuKTsKKyNlbmRpZgogCX0gZWxzZSB7CiAJCS8qIEdlbmVyYXRlIHJldHVybiBjb2RlIChzeXN0ZW0gY2FsbCB0byBydF9zaWdyZXR1cm4pICovCiAJCWVyciB8PSBfX3B1dF91c2VyKE1PVlcoNyksICZmcmFtZS0+cmV0Y29kZVswXSk7CkBAIC00NzcsMjggKzQ1MiwzMSBAQAogCiAJc2V0X2ZzKFVTRVJfRFMpOwogCi0jaWYgREVCVUdfU0lHCi0JcHJpbnRrKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKLQkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+cGMsIHJlZ3MtPnByKTsKLSNlbmRpZgorCXByX2RlYnVnKCJTSUcgZGVsaXZlciAoJXM6JWQpOiBzcD0lcCBwYz0lMDhseCBwcj0lMDhseFxuIiwKKwkJIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZnJhbWUsIHJlZ3MtPnBjLCByZWdzLT5wcik7CiAKIAlmbHVzaF9jYWNoZV9zaWd0cmFtcChyZWdzLT5wcik7CisKIAlpZiAoKC1yZWdzLT5wciAmIChMMV9DQUNIRV9CWVRFUy0xKSkgPCBzaXplb2YoZnJhbWUtPnJldGNvZGUpKQogCQlmbHVzaF9jYWNoZV9zaWd0cmFtcChyZWdzLT5wciArIEwxX0NBQ0hFX0JZVEVTKTsKLQlyZXR1cm47CisKKwlyZXR1cm4gMDsKIAogZ2l2ZV9zaWdzZWd2OgogCWZvcmNlX3NpZ3NlZ3Yoc2lnLCBjdXJyZW50KTsKKwlyZXR1cm4gLUVGQVVMVDsKIH0KIAogLyoKICAqIE9LLCB3ZSdyZSBpbnZva2luZyBhIGhhbmRsZXIKICAqLwogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogaGFuZGxlX3NpZ25hbCh1bnNpZ25lZCBsb25nIHNpZywgc3RydWN0IGtfc2lnYWN0aW9uICprYSwgc2lnaW5mb190ICppbmZvLAogCSAgICAgIHNpZ3NldF90ICpvbGRzZXQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCWludCByZXQ7CisKIAkvKiBBcmUgd2UgZnJvbSBhIHN5c3RlbSBjYWxsPyAqLwogCWlmIChyZWdzLT50cmEgPj0gMCkgewogCQkvKiBJZiBzbywgY2hlY2sgc3lzdGVtIGNhbGwgcmVzdGFydGluZy4uICovCkBAIC01MzksMTkgKzUxNywyMyBAQAogCiAJLyogU2V0IHVwIHRoZSBzdGFjayBmcmFtZSAqLwogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9TSUdJTkZPKQotCQlzZXR1cF9ydF9mcmFtZShzaWcsIGthLCBpbmZvLCBvbGRzZXQsIHJlZ3MpOworCQlyZXQgPSBzZXR1cF9ydF9mcmFtZShzaWcsIGthLCBpbmZvLCBvbGRzZXQsIHJlZ3MpOwogCWVsc2UKLQkJc2V0dXBfZnJhbWUoc2lnLCBrYSwgb2xkc2V0LCByZWdzKTsKKwkJcmV0ID0gc2V0dXBfZnJhbWUoc2lnLCBrYSwgb2xkc2V0LCByZWdzKTsKIAogCWlmIChrYS0+c2Euc2FfZmxhZ3MgJiBTQV9PTkVTSE9UKQogCQlrYS0+c2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CiAKLQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKLQlzaWdvcnNldHMoJmN1cnJlbnQtPmJsb2NrZWQsJmN1cnJlbnQtPmJsb2NrZWQsJmthLT5zYS5zYV9tYXNrKTsKLQlpZiAoIShrYS0+c2Euc2FfZmxhZ3MgJiBTQV9OT0RFRkVSKSkKLQkJc2lnYWRkc2V0KCZjdXJyZW50LT5ibG9ja2VkLHNpZyk7Ci0JcmVjYWxjX3NpZ3BlbmRpbmcoKTsKLQlzcGluX3VubG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOworCWlmIChyZXQgPT0gMCkgeworCQlzcGluX2xvY2tfaXJxKCZjdXJyZW50LT5zaWdoYW5kLT5zaWdsb2NrKTsKKwkJc2lnb3JzZXRzKCZjdXJyZW50LT5ibG9ja2VkLCZjdXJyZW50LT5ibG9ja2VkLCZrYS0+c2Euc2FfbWFzayk7CisJCWlmICghKGthLT5zYS5zYV9mbGFncyAmIFNBX05PREVGRVIpKQorCQkJc2lnYWRkc2V0KCZjdXJyZW50LT5ibG9ja2VkLHNpZyk7CisJCXJlY2FsY19zaWdwZW5kaW5nKCk7CisJCXNwaW5fdW5sb2NrX2lycSgmY3VycmVudC0+c2lnaGFuZC0+c2lnbG9jayk7CisJfQorCisJcmV0dXJuIHJldDsKIH0KIAogLyoKQEAgLTU2MywxMSArNTQ1LDEyIEBACiAgKiB0aGUga2VybmVsIGNhbiBoYW5kbGUsIGFuZCB0aGVuIHdlIGJ1aWxkIGFsbCB0aGUgdXNlci1sZXZlbCBzaWduYWwgaGFuZGxpbmcKICAqIHN0YWNrLWZyYW1lcyBpbiBvbmUgZ28gYWZ0ZXIgdGhhdC4KICAqLwotaW50IGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgc2lnc2V0X3QgKm9sZHNldCkKK3N0YXRpYyB2b2lkIGRvX3NpZ25hbChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNhdmVfcjApCiB7CiAJc2lnaW5mb190IGluZm87CiAJaW50IHNpZ25yOwogCXN0cnVjdCBrX3NpZ2FjdGlvbiBrYTsKKwlzaWdzZXRfdCAqb2xkc2V0OwogCiAJLyoKIAkgKiBXZSB3YW50IHRoZSBjb21tb24gY2FzZSB0byBnbyBmYXN0LCB3aGljaApAQCAtNTc2LDE5ICs1NTksMjcgQEAKIAkgKiBpZiBzby4KIAkgKi8KIAlpZiAoIXVzZXJfbW9kZShyZWdzKSkKLQkJcmV0dXJuIDE7CisJCXJldHVybjsKIAogCWlmICh0cnlfdG9fZnJlZXplKCkpCiAJCWdvdG8gbm9fc2lnbmFsOwogCi0JaWYgKCFvbGRzZXQpCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCW9sZHNldCA9ICZjdXJyZW50LT5zYXZlZF9zaWdtYXNrOworCWVsc2UKIAkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7CiAKIAlzaWduciA9IGdldF9zaWduYWxfdG9fZGVsaXZlcigmaW5mbywgJmthLCByZWdzLCBOVUxMKTsKIAlpZiAoc2lnbnIgPiAwKSB7CiAJCS8qIFdoZWUhICBBY3R1YWxseSBkZWxpdmVyIHRoZSBzaWduYWwuICAqLwotCQloYW5kbGVfc2lnbmFsKHNpZ25yLCAma2EsICZpbmZvLCBvbGRzZXQsIHJlZ3MpOwotCQlyZXR1cm4gMTsKKwkJaWYgKGhhbmRsZV9zaWduYWwoc2lnbnIsICZrYSwgJmluZm8sIG9sZHNldCwgcmVncykgPT0gMCkgeworCQkJLyogYSBzaWduYWwgd2FzIHN1Y2Nlc3NmdWxseSBkZWxpdmVyZWQ7IHRoZSBzYXZlZAorCQkJICogc2lnbWFzayB3aWxsIGhhdmUgYmVlbiBzdG9yZWQgaW4gdGhlIHNpZ25hbCBmcmFtZSwKKwkJCSAqIGFuZCB3aWxsIGJlIHJlc3RvcmVkIGJ5IHNpZ3JldHVybiwgc28gd2UgY2FuIHNpbXBseQorCQkJICogY2xlYXIgdGhlIFRJRl9SRVNUT1JFX1NJR01BU0sgZmxhZyAqLworCQkJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCQkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCX0KIAl9CiAKICBub19zaWduYWw6CkBAIC01OTcsMTAgKzU4OCwyNyBAQAogCQkvKiBSZXN0YXJ0IHRoZSBzeXN0ZW0gY2FsbCAtIG5vIGhhbmRsZXJzIHByZXNlbnQgKi8KIAkJaWYgKHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUTk9IQU5EIHx8CiAJCSAgICByZWdzLT5yZWdzWzBdID09IC1FUkVTVEFSVFNZUyB8fAotCQkgICAgcmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlROT0lOVFIgfHwKLQkJICAgIHJlZ3MtPnJlZ3NbMF0gPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgeworCQkgICAgcmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlROT0lOVFIpIHsKKwkJICAgIAlyZWdzLT5yZWdzWzBdID0gc2F2ZV9yMDsKIAkJCXJlZ3MtPnBjIC09IDI7CisJCX0gZWxzZSBpZiAocmVncy0+cmVnc1swXSA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSB7CisJCQlyZWdzLT5wYyAtPSAyOworCQkJcmVncy0+cmVnc1szXSA9IF9fTlJfcmVzdGFydF9zeXNjYWxsOwogCQl9CiAJfQotCXJldHVybiAwOworCisJLyogaWYgdGhlcmUncyBubyBzaWduYWwgdG8gZGVsaXZlciwgd2UganVzdCBwdXQgdGhlIHNhdmVkIHNpZ21hc2sKKwkgKiBiYWNrICovCisJaWYgKHRlc3RfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSykpIHsKKwkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX1JFU1RPUkVfU0lHTUFTSyk7CisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmY3VycmVudC0+c2F2ZWRfc2lnbWFzaywgTlVMTCk7CisJfQorfQorCithc21saW5rYWdlIHZvaWQgZG9fbm90aWZ5X3Jlc3VtZShzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgaW50IHNhdmVfcjAsCisJCQkJIF9fdTMyIHRocmVhZF9pbmZvX2ZsYWdzKQoreworCS8qIGRlYWwgd2l0aCBwZW5kaW5nIHNpZ25hbCBkZWxpdmVyeSAqLworCWlmICh0aHJlYWRfaW5mb19mbGFncyAmIChfVElGX1NJR1BFTkRJTkcgfCBfVElGX1JFU1RPUkVfU0lHTUFTSykpCisJCWRvX3NpZ25hbChyZWdzLCBzYXZlX3IwKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3N5c19zaC5jIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKaW5kZXggOTE3YjJmMy4uYjY4ZmY3MCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzX3NoLmMKQEAgLTIxLDcgKzIxLDggQEAKICNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KLQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaXBjLmg+CiAKQEAgLTQ0LDExICs0NSwxNiBAQAogCXJldHVybiBlcnJvcjsKIH0KIAotI2lmIGRlZmluZWQoSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEpCit1bnNpZ25lZCBsb25nIHNobV9hbGlnbl9tYXNrID0gUEFHRV9TSVpFIC0gMTsJLyogU2FuZSBjYWNoZXMgKi8KKworRVhQT1JUX1NZTUJPTChzaG1fYWxpZ25fbWFzayk7CisKIC8qCi0gKiBUbyBhdm9pZCBjYWNoZSBhbGlhcywgd2UgbWFwIHRoZSBzaGFyZCBwYWdlIHdpdGggc2FtZSBjb2xvci4KKyAqIFRvIGF2b2lkIGNhY2hlIGFsaWFzZXMsIHdlIG1hcCB0aGUgc2hhcmVkIHBhZ2Ugd2l0aCBzYW1lIGNvbG9yLgogICovCi0jZGVmaW5lIENPTE9VUl9BTElHTihhZGRyKQkoKChhZGRyKStTSE1MQkEtMSkmfihTSE1MQkEtMSkpCisjZGVmaW5lIENPTE9VUl9BTElHTihhZGRyLCBwZ29mZikJCQkJXAorCSgoKChhZGRyKSArIHNobV9hbGlnbl9tYXNrKSAmIH5zaG1fYWxpZ25fbWFzaykgKwlcCisJICgoKHBnb2ZmKSA8PCBQQUdFX1NISUZUKSAmIHNobV9hbGlnbl9tYXNrKSkKIAogdW5zaWduZWQgbG9uZyBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCkBAIC01Niw0MyArNjIsNTIgQEAKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcjsKKwlpbnQgZG9fY29sb3VyX2FsaWduOwogCiAJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CiAJCS8qIFdlIGRvIG5vdCBhY2NlcHQgYSBzaGFyZWQgbWFwcGluZyBpZiBpdCB3b3VsZCB2aW9sYXRlCiAJCSAqIGNhY2hlIGFsaWFzaW5nIGNvbnN0cmFpbnRzLgogCQkgKi8KLQkJaWYgKChmbGFncyAmIE1BUF9TSEFSRUQpICYmIChhZGRyICYgKFNITUxCQSAtIDEpKSkKKwkJaWYgKChmbGFncyAmIE1BUF9TSEFSRUQpICYmIChhZGRyICYgc2htX2FsaWduX21hc2spKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCXJldHVybiBhZGRyOwogCX0KIAotCWlmIChsZW4gPiBUQVNLX1NJWkUpCisJaWYgKHVubGlrZWx5KGxlbiA+IFRBU0tfU0laRSkpCiAJCXJldHVybiAtRU5PTUVNOwogCisJZG9fY29sb3VyX2FsaWduID0gMDsKKwlpZiAoZmlscCB8fCAoZmxhZ3MgJiBNQVBfU0hBUkVEKSkKKwkJZG9fY29sb3VyX2FsaWduID0gMTsKKwogCWlmIChhZGRyKSB7Ci0JCWlmIChmbGFncyAmIE1BUF9QUklWQVRFKQotCQkJYWRkciA9IFBBR0VfQUxJR04oYWRkcik7CisJCWlmIChkb19jb2xvdXJfYWxpZ24pCisJCQlhZGRyID0gQ09MT1VSX0FMSUdOKGFkZHIsIHBnb2ZmKTsKIAkJZWxzZQotCQkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyKTsKKwkJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCiAJCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKIAkJaWYgKFRBU0tfU0laRSAtIGxlbiA+PSBhZGRyICYmCiAJCSAgICAoIXZtYSB8fCBhZGRyICsgbGVuIDw9IHZtYS0+dm1fc3RhcnQpKQogCQkJcmV0dXJuIGFkZHI7CiAJfQotCWlmIChsZW4gPD0gbW0tPmNhY2hlZF9ob2xlX3NpemUpIHsKKworCWlmIChsZW4gPiBtbS0+Y2FjaGVkX2hvbGVfc2l6ZSkgeworCQlzdGFydF9hZGRyID0gYWRkciA9IG1tLT5mcmVlX2FyZWFfY2FjaGU7CisJfSBlbHNlIHsKIAkgICAgICAgIG1tLT5jYWNoZWRfaG9sZV9zaXplID0gMDsKLQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKKwkJc3RhcnRfYWRkciA9IGFkZHIgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CiAJfQotCWlmIChmbGFncyAmIE1BUF9QUklWQVRFKQotCQlhZGRyID0gUEFHRV9BTElHTihtbS0+ZnJlZV9hcmVhX2NhY2hlKTsKLQllbHNlCi0JCWFkZHIgPSBDT0xPVVJfQUxJR04obW0tPmZyZWVfYXJlYV9jYWNoZSk7Ci0Jc3RhcnRfYWRkciA9IGFkZHI7CiAKIGZ1bGxfc2VhcmNoOgorCWlmIChkb19jb2xvdXJfYWxpZ24pCisJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOworCWVsc2UKKwkJYWRkciA9IFBBR0VfQUxJR04obW0tPmZyZWVfYXJlYV9jYWNoZSk7CisKIAlmb3IgKHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsgOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKIAkJLyogQXQgdGhpcyBwb2ludDogICghdm1hIHx8IGFkZHIgPCB2bWEtPnZtX2VuZCkuICovCi0JCWlmIChUQVNLX1NJWkUgLSBsZW4gPCBhZGRyKSB7CisJCWlmICh1bmxpa2VseShUQVNLX1NJWkUgLSBsZW4gPCBhZGRyKSkgewogCQkJLyoKIAkJCSAqIFN0YXJ0IGEgbmV3IHNlYXJjaCAtIGp1c3QgaW4gY2FzZSB3ZSBtaXNzZWQKIAkJCSAqIHNvbWUgaG9sZXMuCkBAIC0xMDQsNyArMTE5LDcgQEAKIAkJCX0KIAkJCXJldHVybiAtRU5PTUVNOwogCQl9Ci0JCWlmICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1hLT52bV9zdGFydCkgeworCQlpZiAobGlrZWx5KCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkgewogCQkJLyoKIAkJCSAqIFJlbWVtYmVyIHRoZSBwbGFjZSB3aGVyZSB3ZSBzdG9wcGVkIHRoZSBzZWFyY2g6CiAJCQkgKi8KQEAgLTExNSwxMSArMTMwLDEwIEBACiAJCSAgICAgICAgbW0tPmNhY2hlZF9ob2xlX3NpemUgPSB2bWEtPnZtX3N0YXJ0IC0gYWRkcjsKIAogCQlhZGRyID0gdm1hLT52bV9lbmQ7Ci0JCWlmICghKGZsYWdzICYgTUFQX1BSSVZBVEUpKQotCQkJYWRkciA9IENPTE9VUl9BTElHTihhZGRyKTsKKwkJaWYgKGRvX2NvbG91cl9hbGlnbikKKwkJCWFkZHIgPSBDT0xPVVJfQUxJR04oYWRkciwgcGdvZmYpOwogCX0KIH0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIGxvbmcKIGRvX21tYXAyKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwgCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC9zeXNjYWxscy5TIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjgzMzRlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvc3lzY2FsbHMuUwpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqIGFyY2gvc2gva2VybmVsL3N5c2NhbGxzLlMKKyAqCisgKiBTeXN0ZW0gY2FsbCB0YWJsZSBmb3IgU3VwZXJICisgKgorICogIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMiAgTmlpYmUgWXV0YWthCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzICBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICovCisjaW5jbHVkZSA8bGludXgvc3lzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorCisjaWYgIWRlZmluZWQoQ09ORklHX05GU0QpICYmICFkZWZpbmVkKENPTkZJR19ORlNEX01PRFVMRSkKKyNkZWZpbmUgc3lzX25mc3NlcnZjdGwJCXN5c19uaV9zeXNjYWxsCisjZW5kaWYKKworI2lmICFkZWZpbmVkKENPTkZJR19NTVUpCisjZGVmaW5lIHN5c19tYWR2aXNlCQlzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfcmVhZGFoZWFkCQlzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfbXByb3RlY3QJCXN5c19uaV9zeXNjYWxsCisjZGVmaW5lIHN5c19tc3luYwkJc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX21sb2NrCQlzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfbXVubG9jawkJc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX21sb2NrYWxsCQlzeXNfbmlfc3lzY2FsbAorI2RlZmluZSBzeXNfbXVubG9ja2FsbAkJc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX21yZW1hcAkJc3lzX25pX3N5c2NhbGwKKyNkZWZpbmUgc3lzX21pbmNvcmUJCXN5c19uaV9zeXNjYWxsCisjZGVmaW5lIHN5c19yZW1hcF9maWxlX3BhZ2VzCXN5c19uaV9zeXNjYWxsCisjZW5kaWYKKworCS5kYXRhCitFTlRSWShzeXNfY2FsbF90YWJsZSkKKwkubG9uZyBzeXNfcmVzdGFydF9zeXNjYWxsCS8qIDAgIC0gIG9sZCAic2V0dXAoKSIgc3lzdGVtIGNhbGwqLworCS5sb25nIHN5c19leGl0CisJLmxvbmcgc3lzX2ZvcmsKKwkubG9uZyBzeXNfcmVhZAorCS5sb25nIHN5c193cml0ZQorCS5sb25nIHN5c19vcGVuCQkvKiA1ICovCisJLmxvbmcgc3lzX2Nsb3NlCisJLmxvbmcgc3lzX3dhaXRwaWQKKwkubG9uZyBzeXNfY3JlYXQKKwkubG9uZyBzeXNfbGluaworCS5sb25nIHN5c191bmxpbmsJCS8qIDEwICovCisJLmxvbmcgc3lzX2V4ZWN2ZQorCS5sb25nIHN5c19jaGRpcgorCS5sb25nIHN5c190aW1lCisJLmxvbmcgc3lzX21rbm9kCisJLmxvbmcgc3lzX2NobW9kCQkvKiAxNSAqLworCS5sb25nIHN5c19sY2hvd24xNgorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBicmVhayBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19zdGF0CisJLmxvbmcgc3lzX2xzZWVrCisJLmxvbmcgc3lzX2dldHBpZAkJLyogMjAgKi8KKwkubG9uZyBzeXNfbW91bnQKKwkubG9uZyBzeXNfb2xkdW1vdW50CisJLmxvbmcgc3lzX3NldHVpZDE2CisJLmxvbmcgc3lzX2dldHVpZDE2CisJLmxvbmcgc3lzX3N0aW1lCQkvKiAyNSAqLworCS5sb25nIHN5c19wdHJhY2UKKwkubG9uZyBzeXNfYWxhcm0KKwkubG9uZyBzeXNfZnN0YXQKKwkubG9uZyBzeXNfcGF1c2UKKwkubG9uZyBzeXNfdXRpbWUJCS8qIDMwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogb2xkIHN0dHkgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgZ3R0eSBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19hY2Nlc3MKKwkubG9uZyBzeXNfbmljZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDM1ICovCQkvKiBvbGQgZnRpbWUgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc3luYworCS5sb25nIHN5c19raWxsCisJLmxvbmcgc3lzX3JlbmFtZQorCS5sb25nIHN5c19ta2RpcgorCS5sb25nIHN5c19ybWRpcgkJLyogNDAgKi8KKwkubG9uZyBzeXNfZHVwCisJLmxvbmcgc3lzX3BpcGUKKwkubG9uZyBzeXNfdGltZXMKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBvbGQgcHJvZiBzeXNjYWxsIGhvbGRlciAqLworCS5sb25nIHN5c19icmsJCS8qIDQ1ICovCisJLmxvbmcgc3lzX3NldGdpZDE2CisJLmxvbmcgc3lzX2dldGdpZDE2CisJLmxvbmcgc3lzX3NpZ25hbAorCS5sb25nIHN5c19nZXRldWlkMTYKKwkubG9uZyBzeXNfZ2V0ZWdpZDE2CS8qIDUwICovCisJLmxvbmcgc3lzX2FjY3QKKwkubG9uZyBzeXNfdW1vdW50CQkvKiByZWN5Y2xlZCBuZXZlciB1c2VkIHBoeXMoKSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBsb2NrIHN5c2NhbGwgaG9sZGVyICovCisJLmxvbmcgc3lzX2lvY3RsCisJLmxvbmcgc3lzX2ZjbnRsCQkvKiA1NSAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBtcHggc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc2V0cGdpZAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCB1bGltaXQgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzeXNfb2xkdW5hbWUgKi8KKwkubG9uZyBzeXNfdW1hc2sJCS8qIDYwICovCisJLmxvbmcgc3lzX2Nocm9vdAorCS5sb25nIHN5c191c3RhdAorCS5sb25nIHN5c19kdXAyCisJLmxvbmcgc3lzX2dldHBwaWQKKwkubG9uZyBzeXNfZ2V0cGdycAkJLyogNjUgKi8KKwkubG9uZyBzeXNfc2V0c2lkCisJLmxvbmcgc3lzX3NpZ2FjdGlvbgorCS5sb25nIHN5c19zZ2V0bWFzaworCS5sb25nIHN5c19zc2V0bWFzaworCS5sb25nIHN5c19zZXRyZXVpZDE2CS8qIDcwICovCisJLmxvbmcgc3lzX3NldHJlZ2lkMTYKKwkubG9uZyBzeXNfc2lnc3VzcGVuZAorCS5sb25nIHN5c19zaWdwZW5kaW5nCisJLmxvbmcgc3lzX3NldGhvc3RuYW1lCisJLmxvbmcgc3lzX3NldHJsaW1pdAkvKiA3NSAqLworCS5sb25nIHN5c19vbGRfZ2V0cmxpbWl0CisJLmxvbmcgc3lzX2dldHJ1c2FnZQorCS5sb25nIHN5c19nZXR0aW1lb2ZkYXkKKwkubG9uZyBzeXNfc2V0dGltZW9mZGF5CisJLmxvbmcgc3lzX2dldGdyb3VwczE2CS8qIDgwICovCisJLmxvbmcgc3lzX3NldGdyb3VwczE2CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX29sZHNlbGVjdCAqLworCS5sb25nIHN5c19zeW1saW5rCisJLmxvbmcgc3lzX2xzdGF0CisJLmxvbmcgc3lzX3JlYWRsaW5rCQkvKiA4NSAqLworCS5sb25nIHN5c191c2VsaWIKKwkubG9uZyBzeXNfc3dhcG9uCisJLmxvbmcgc3lzX3JlYm9vdAorCS5sb25nIG9sZF9yZWFkZGlyCisJLmxvbmcgb2xkX21tYXAJCS8qIDkwICovCisJLmxvbmcgc3lzX211bm1hcAorCS5sb25nIHN5c190cnVuY2F0ZQorCS5sb25nIHN5c19mdHJ1bmNhdGUKKwkubG9uZyBzeXNfZmNobW9kCisJLmxvbmcgc3lzX2ZjaG93bjE2CQkvKiA5NSAqLworCS5sb25nIHN5c19nZXRwcmlvcml0eQorCS5sb25nIHN5c19zZXRwcmlvcml0eQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCBwcm9maWwgc3lzY2FsbCBob2xkZXIgKi8KKwkubG9uZyBzeXNfc3RhdGZzCisJLmxvbmcgc3lzX2ZzdGF0ZnMJCS8qIDEwMCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGlvcGVybSAqLworCS5sb25nIHN5c19zb2NrZXRjYWxsCisJLmxvbmcgc3lzX3N5c2xvZworCS5sb25nIHN5c19zZXRpdGltZXIKKwkubG9uZyBzeXNfZ2V0aXRpbWVyCS8qIDEwNSAqLworCS5sb25nIHN5c19uZXdzdGF0CisJLmxvbmcgc3lzX25ld2xzdGF0CisJLmxvbmcgc3lzX25ld2ZzdGF0CisJLmxvbmcgc3lzX3VuYW1lCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogMTEwICovIC8qIGlvcGwgKi8KKwkubG9uZyBzeXNfdmhhbmd1cAorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGlkbGUgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiB2bTg2b2xkICovCisJLmxvbmcgc3lzX3dhaXQ0CisJLmxvbmcgc3lzX3N3YXBvZmYJCS8qIDExNSAqLworCS5sb25nIHN5c19zeXNpbmZvCisJLmxvbmcgc3lzX2lwYworCS5sb25nIHN5c19mc3luYworCS5sb25nIHN5c19zaWdyZXR1cm4KKwkubG9uZyBzeXNfY2xvbmUJCS8qIDEyMCAqLworCS5sb25nIHN5c19zZXRkb21haW5uYW1lCisJLmxvbmcgc3lzX25ld3VuYW1lCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3lzX21vZGlmeV9sZHQgKi8KKwkubG9uZyBzeXNfYWRqdGltZXgKKwkubG9uZyBzeXNfbXByb3RlY3QJCS8qIDEyNSAqLworCS5sb25nIHN5c19zaWdwcm9jbWFzaworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAiY3JlYXRlX21vZHVsZSIgKi8KKwkubG9uZyBzeXNfaW5pdF9tb2R1bGUKKwkubG9uZyBzeXNfZGVsZXRlX21vZHVsZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDEzMDogb2xkICJnZXRfa2VybmVsX3N5bXMiICovCisJLmxvbmcgc3lzX3F1b3RhY3RsCisJLmxvbmcgc3lzX2dldHBnaWQKKwkubG9uZyBzeXNfZmNoZGlyCisJLmxvbmcgc3lzX2JkZmx1c2gKKwkubG9uZyBzeXNfc3lzZnMJCS8qIDEzNSAqLworCS5sb25nIHN5c19wZXJzb25hbGl0eQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIGZvciBhZnNfc3lzY2FsbCAqLworCS5sb25nIHN5c19zZXRmc3VpZDE2CisJLmxvbmcgc3lzX3NldGZzZ2lkMTYKKwkubG9uZyBzeXNfbGxzZWVrCQkvKiAxNDAgKi8KKwkubG9uZyBzeXNfZ2V0ZGVudHMKKwkubG9uZyBzeXNfc2VsZWN0CisJLmxvbmcgc3lzX2Zsb2NrCisJLmxvbmcgc3lzX21zeW5jCisJLmxvbmcgc3lzX3JlYWR2CQkvKiAxNDUgKi8KKwkubG9uZyBzeXNfd3JpdGV2CisJLmxvbmcgc3lzX2dldHNpZAorCS5sb25nIHN5c19mZGF0YXN5bmMKKwkubG9uZyBzeXNfc3lzY3RsCisJLmxvbmcgc3lzX21sb2NrCQkvKiAxNTAgKi8KKwkubG9uZyBzeXNfbXVubG9jaworCS5sb25nIHN5c19tbG9ja2FsbAorCS5sb25nIHN5c19tdW5sb2NrYWxsCisJLmxvbmcgc3lzX3NjaGVkX3NldHBhcmFtCisJLmxvbmcgc3lzX3NjaGVkX2dldHBhcmFtICAgLyogMTU1ICovCisJLmxvbmcgc3lzX3NjaGVkX3NldHNjaGVkdWxlcgorCS5sb25nIHN5c19zY2hlZF9nZXRzY2hlZHVsZXIKKwkubG9uZyBzeXNfc2NoZWRfeWllbGQKKwkubG9uZyBzeXNfc2NoZWRfZ2V0X3ByaW9yaXR5X21heAorCS5sb25nIHN5c19zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAvKiAxNjAgKi8KKwkubG9uZyBzeXNfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisJLmxvbmcgc3lzX25hbm9zbGVlcAorCS5sb25nIHN5c19tcmVtYXAKKwkubG9uZyBzeXNfc2V0cmVzdWlkMTYKKwkubG9uZyBzeXNfZ2V0cmVzdWlkMTYJLyogMTY1ICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogdm04NiAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIG9sZCAicXVlcnlfbW9kdWxlIiAqLworCS5sb25nIHN5c19wb2xsCisJLmxvbmcgc3lzX25mc3NlcnZjdGwKKwkubG9uZyBzeXNfc2V0cmVzZ2lkMTYJLyogMTcwICovCisJLmxvbmcgc3lzX2dldHJlc2dpZDE2CisJLmxvbmcgc3lzX3ByY3RsCisJLmxvbmcgc3lzX3J0X3NpZ3JldHVybgorCS5sb25nIHN5c19ydF9zaWdhY3Rpb24KKwkubG9uZyBzeXNfcnRfc2lncHJvY21hc2sJLyogMTc1ICovCisJLmxvbmcgc3lzX3J0X3NpZ3BlbmRpbmcKKwkubG9uZyBzeXNfcnRfc2lndGltZWR3YWl0CisJLmxvbmcgc3lzX3J0X3NpZ3F1ZXVlaW5mbworCS5sb25nIHN5c19ydF9zaWdzdXNwZW5kCisJLmxvbmcgc3lzX3ByZWFkX3dyYXBwZXIJICAgLyogMTgwICovCisJLmxvbmcgc3lzX3B3cml0ZV93cmFwcGVyCisJLmxvbmcgc3lzX2Nob3duMTYKKwkubG9uZyBzeXNfZ2V0Y3dkCisJLmxvbmcgc3lzX2NhcGdldAorCS5sb25nIHN5c19jYXBzZXQgICAgICAgICAgIC8qIDE4NSAqLworCS5sb25nIHN5c19zaWdhbHRzdGFjaworCS5sb25nIHN5c19zZW5kZmlsZQorCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIHN0cmVhbXMxICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogc3RyZWFtczIgKi8KKwkubG9uZyBzeXNfdmZvcmsgICAgICAgICAgICAvKiAxOTAgKi8KKwkubG9uZyBzeXNfZ2V0cmxpbWl0CisJLmxvbmcgc3lzX21tYXAyCisJLmxvbmcgc3lzX3RydW5jYXRlNjQKKwkubG9uZyBzeXNfZnRydW5jYXRlNjQKKwkubG9uZyBzeXNfc3RhdDY0CQkvKiAxOTUgKi8KKwkubG9uZyBzeXNfbHN0YXQ2NAorCS5sb25nIHN5c19mc3RhdDY0CisJLmxvbmcgc3lzX2xjaG93bgorCS5sb25nIHN5c19nZXR1aWQKKwkubG9uZyBzeXNfZ2V0Z2lkCQkvKiAyMDAgKi8KKwkubG9uZyBzeXNfZ2V0ZXVpZAorCS5sb25nIHN5c19nZXRlZ2lkCisJLmxvbmcgc3lzX3NldHJldWlkCisJLmxvbmcgc3lzX3NldHJlZ2lkCisJLmxvbmcgc3lzX2dldGdyb3VwcwkvKiAyMDUgKi8KKwkubG9uZyBzeXNfc2V0Z3JvdXBzCisJLmxvbmcgc3lzX2ZjaG93bgorCS5sb25nIHN5c19zZXRyZXN1aWQKKwkubG9uZyBzeXNfZ2V0cmVzdWlkCisJLmxvbmcgc3lzX3NldHJlc2dpZAkvKiAyMTAgKi8KKwkubG9uZyBzeXNfZ2V0cmVzZ2lkCisJLmxvbmcgc3lzX2Nob3duCisJLmxvbmcgc3lzX3NldHVpZAorCS5sb25nIHN5c19zZXRnaWQKKwkubG9uZyBzeXNfc2V0ZnN1aWQJCS8qIDIxNSAqLworCS5sb25nIHN5c19zZXRmc2dpZAorCS5sb25nIHN5c19waXZvdF9yb290CisJLmxvbmcgc3lzX21pbmNvcmUKKwkubG9uZyBzeXNfbWFkdmlzZQorCS5sb25nIHN5c19nZXRkZW50czY0CS8qIDIyMCAqLworCS5sb25nIHN5c19mY250bDY0CisJLmxvbmcgc3lzX25pX3N5c2NhbGwJLyogcmVzZXJ2ZWQgZm9yIFRVWCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIFJlc2VydmVkIGZvciBTZWN1cml0eSAqLworCS5sb25nIHN5c19nZXR0aWQKKwkubG9uZyBzeXNfcmVhZGFoZWFkCS8qIDIyNSAqLworCS5sb25nIHN5c19zZXR4YXR0cgorCS5sb25nIHN5c19sc2V0eGF0dHIKKwkubG9uZyBzeXNfZnNldHhhdHRyCisJLmxvbmcgc3lzX2dldHhhdHRyCisJLmxvbmcgc3lzX2xnZXR4YXR0cgkvKiAyMzAgKi8KKwkubG9uZyBzeXNfZmdldHhhdHRyCisJLmxvbmcgc3lzX2xpc3R4YXR0cgorCS5sb25nIHN5c19sbGlzdHhhdHRyCisJLmxvbmcgc3lzX2ZsaXN0eGF0dHIKKwkubG9uZyBzeXNfcmVtb3ZleGF0dHIJLyogMjM1ICovCisJLmxvbmcgc3lzX2xyZW1vdmV4YXR0cgorCS5sb25nIHN5c19mcmVtb3ZleGF0dHIKKwkubG9uZyBzeXNfdGtpbGwKKwkubG9uZyBzeXNfc2VuZGZpbGU2NAorCS5sb25nIHN5c19mdXRleAkJLyogMjQwICovCisJLmxvbmcgc3lzX3NjaGVkX3NldGFmZmluaXR5CisJLmxvbmcgc3lzX3NjaGVkX2dldGFmZmluaXR5CisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAorCS5sb25nIHN5c19pb19zZXR1cAkvKiAyNDUgKi8KKwkubG9uZyBzeXNfaW9fZGVzdHJveQorCS5sb25nIHN5c19pb19nZXRldmVudHMKKwkubG9uZyBzeXNfaW9fc3VibWl0CisJLmxvbmcgc3lzX2lvX2NhbmNlbAorCS5sb25nIHN5c19mYWR2aXNlNjQJLyogMjUwICovCisJLmxvbmcgc3lzX25pX3N5c2NhbGwKKwkubG9uZyBzeXNfZXhpdF9ncm91cAorCS5sb25nIHN5c19sb29rdXBfZGNvb2tpZQorCS5sb25nIHN5c19lcG9sbF9jcmVhdGUKKwkubG9uZyBzeXNfZXBvbGxfY3RsCS8qIDI1NSAqLworCS5sb25nIHN5c19lcG9sbF93YWl0CisgCS5sb25nIHN5c19yZW1hcF9maWxlX3BhZ2VzCisgCS5sb25nIHN5c19zZXRfdGlkX2FkZHJlc3MKKyAJLmxvbmcgc3lzX3RpbWVyX2NyZWF0ZQorIAkubG9uZyBzeXNfdGltZXJfc2V0dGltZQkJLyogMjYwICovCisgCS5sb25nIHN5c190aW1lcl9nZXR0aW1lCisgCS5sb25nIHN5c190aW1lcl9nZXRvdmVycnVuCisgCS5sb25nIHN5c190aW1lcl9kZWxldGUKKyAJLmxvbmcgc3lzX2Nsb2NrX3NldHRpbWUKKyAJLmxvbmcgc3lzX2Nsb2NrX2dldHRpbWUJCS8qIDI2NSAqLworIAkubG9uZyBzeXNfY2xvY2tfZ2V0cmVzCisgCS5sb25nIHN5c19jbG9ja19uYW5vc2xlZXAKKwkubG9uZyBzeXNfc3RhdGZzNjQKKwkubG9uZyBzeXNfZnN0YXRmczY0CisJLmxvbmcgc3lzX3Rna2lsbAkJLyogMjcwICovCisJLmxvbmcgc3lzX3V0aW1lcworIAkubG9uZyBzeXNfZmFkdmlzZTY0XzY0X3dyYXBwZXIKKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBSZXNlcnZlZCBmb3IgdnNlcnZlciAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIFJlc2VydmVkIGZvciBtYmluZCAqLworCS5sb25nIHN5c19uaV9zeXNjYWxsCS8qIDI3NSAtIGdldF9tZW1wb2xpY3kgKi8KKwkubG9uZyBzeXNfbmlfc3lzY2FsbAkvKiBzZXRfbWVtcG9saWN5ICovCisJLmxvbmcgc3lzX21xX29wZW4KKwkubG9uZyBzeXNfbXFfdW5saW5rCisJLmxvbmcgc3lzX21xX3RpbWVkc2VuZAorCS5sb25nIHN5c19tcV90aW1lZHJlY2VpdmUgICAgICAgLyogMjgwICovCisJLmxvbmcgc3lzX21xX25vdGlmeQorCS5sb25nIHN5c19tcV9nZXRzZXRhdHRyCisJLmxvbmcgc3lzX2tleGVjX2xvYWQKKwkubG9uZyBzeXNfd2FpdGlkCisJLmxvbmcgc3lzX25pX3N5c2NhbGwJCS8qIDI4NSAqLworCS5sb25nIHN5c19hZGRfa2V5CisJLmxvbmcgc3lzX3JlcXVlc3Rfa2V5CisJLmxvbmcgc3lzX2tleWN0bAorCS5sb25nIHN5c19pb3ByaW9fc2V0CisJLmxvbmcgc3lzX2lvcHJpb19nZXQJCS8qIDI5MCAqLworCS5sb25nIHN5c19pbm90aWZ5X2luaXQKKwkubG9uZyBzeXNfaW5vdGlmeV9hZGRfd2F0Y2gKKwkubG9uZyBzeXNfaW5vdGlmeV9ybV93YXRjaAorCS5sb25nIHN5c19taWdyYXRlX3BhZ2VzCisJLmxvbmcgc3lzX29wZW5hdAkJLyogMjk1ICovCisJLmxvbmcgc3lzX21rZGlyYXQKKwkubG9uZyBzeXNfbWtub2RhdAorCS5sb25nIHN5c19mY2hvd25hdAorCS5sb25nIHN5c19mdXRpbWVzYXQKKwkubG9uZyBzeXNfZnN0YXRhdDY0CQkvKiAzMDAgKi8KKwkubG9uZyBzeXNfdW5saW5rYXQKKwkubG9uZyBzeXNfcmVuYW1lYXQKKwkubG9uZyBzeXNfbGlua2F0CisJLmxvbmcgc3lzX3N5bWxpbmthdAorCS5sb25nIHN5c19yZWFkbGlua2F0CQkvKiAzMDUgKi8KKwkubG9uZyBzeXNfZmNobW9kYXQKKwkubG9uZyBzeXNfZmFjY2Vzc2F0CisJLmxvbmcgc3lzX3BzZWxlY3Q2CisJLmxvbmcgc3lzX3Bwb2xsCisJLmxvbmcgc3lzX3Vuc2hhcmUJCS8qIDMxMCAqLworCS5sb25nIHN5c19zZXRfcm9idXN0X2xpc3QKKwkubG9uZyBzeXNfZ2V0X3JvYnVzdF9saXN0CisJLmxvbmcgc3lzX3NwbGljZQorCS5sb25nIHN5c19zeW5jX2ZpbGVfcmFuZ2UKKwkubG9uZyBzeXNfdGVlCQkJLyogMzE1ICovCisJLmxvbmcgc3lzX3Ztc3BsaWNlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lLmMKaW5kZXggYTE1ODlmOC4uNDUwYzY4ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWUuYwpAQCAtMywxMyArMywxMiBAQAogICoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIFRldHN1eWEgT2thZGEgJiBOaWliZSBZdXRha2EKICAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKICAqICBDb3B5cmlnaHQgKEMpIDIwMDIgIE0uIFIuIEJyb3duICA8bXJicm93bkBsaW51eC1zaC5vcmc+CiAgKgogICogIFNvbWUgY29kZSB0YWtlbiBmcm9tIGkzODYgdmVyc2lvbi4KICAqICAgIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5NSAgTGludXMgVG9ydmFsZHMKICAqLwotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgpAQCAtMTksMjIgKzE4LDI2IEBACiAjaW5jbHVkZSA8YXNtL3RpbWVyLmg+CiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwogc3RydWN0IHN5c190aW1lciAqc3lzX3RpbWVyOwogCiAvKiBNb3ZlIHRoaXMgc29tZXdoZXJlIG1vcmUgc2Vuc2libGUuLiAqLwogREVGSU5FX1NQSU5MT0NLKHJ0Y19sb2NrKTsKIEVYUE9SVF9TWU1CT0wocnRjX2xvY2spOwogCi0vKiBYWFg6IENhbiB3ZSBpbml0aWFsaXplIHRoaXMgaW4gYSByb3V0aW5lIHNvbWV3aGVyZT8gIERyZWFtY2FzdCBkb2Vzbid0IHdhbnQKLSAqIHRoZXNlIHJvdXRpbmVzIGFueXdoZXJlLi4uICovCi0jaWZkZWYgQ09ORklHX1NIX1JUQwotdm9pZCAoKnJ0Y19nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopID0gc2hfcnRjX2dldHRpbWVvZmRheTsKLWludCAoKnJ0Y19zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IHNoX3J0Y19zZXR0aW1lb2ZkYXk7Ci0jZWxzZQotdm9pZCAoKnJ0Y19nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopOwotaW50ICgqcnRjX3NldF90aW1lKShjb25zdCB0aW1lX3QpOwotI2VuZGlmCisvKiBEdW1teSBSVEMgb3BzICovCitzdGF0aWMgdm9pZCBudWxsX3J0Y19nZXRfdGltZShzdHJ1Y3QgdGltZXNwZWMgKnR2KQoreworCXR2LT50dl9zZWMgPSBta3RpbWUoMjAwMCwgMSwgMSwgMCwgMCwgMCk7CisJdHYtPnR2X25zZWMgPSAwOworfQorCitzdGF0aWMgaW50IG51bGxfcnRjX3NldF90aW1lKGNvbnN0IHRpbWVfdCBzZWNzKQoreworCXJldHVybiAwOworfQorCit2b2lkICgqcnRjX3NoX2dldF90aW1lKShzdHJ1Y3QgdGltZXNwZWMgKikgPSBudWxsX3J0Y19nZXRfdGltZTsKK2ludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KSA9IG51bGxfcnRjX3NldF90aW1lOwogCiAvKgogICogU2NoZWR1bGVyIGNsb2NrIC0gcmV0dXJucyBjdXJyZW50IHRpbWUgaW4gbmFub3NlYyB1bml0cy4KQEAgLTQ4LDE2ICs1MSwxMCBAQAogewogCXVuc2lnbmVkIGxvbmcgc2VxOwogCXVuc2lnbmVkIGxvbmcgdXNlYywgc2VjOwotCXVuc2lnbmVkIGxvbmcgbG9zdDsKIAogCWRvIHsKIAkJc2VxID0gcmVhZF9zZXFiZWdpbigmeHRpbWVfbG9jayk7CiAJCXVzZWMgPSBnZXRfdGltZXJfb2Zmc2V0KCk7Ci0KLQkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7Ci0JCWlmIChsb3N0KQotCQkJdXNlYyArPSBsb3N0ICogKDEwMDAwMDAgLyBIWik7Ci0KIAkJc2VjID0geHRpbWUudHZfc2VjOwogCQl1c2VjICs9IHh0aW1lLnR2X25zZWMgLyAxMDAwOwogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwpAQCAtNzAsNyArNjcsNiBAQAogCXR2LT50dl9zZWMgPSBzZWM7CiAJdHYtPnR2X3VzZWMgPSB1c2VjOwogfQotCiBFWFBPUlRfU1lNQk9MKGRvX2dldHRpbWVvZmRheSk7CiAKIGludCBkb19zZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0dikKQEAgLTg4LDggKzg0LDcgQEAKIAkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQogCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCiAJICovCi0JbnNlYyAtPSAxMDAwICogKGdldF90aW1lcl9vZmZzZXQoKSArCi0JCQkJKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogKDEwMDAwMDAgLyBIWikpOworCW5zZWMgLT0gMTAwMCAqIGdldF90aW1lcl9vZmZzZXQoKTsKIAogCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CiAJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKQEAgLTEwMyw3ICs5OCw2IEBACiAKIAlyZXR1cm4gMDsKIH0KLQogRVhQT1JUX1NZTUJPTChkb19zZXR0aW1lb2ZkYXkpOwogCiAvKiBsYXN0IHRpbWUgdGhlIFJUQyBjbG9jayBnb3QgdXBkYXRlZCAqLwpAQCAtMTE1LDcgKzEwOSw3IEBACiAgKi8KIHZvaWQgaGFuZGxlX3RpbWVyX3RpY2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogI2VuZGlmCkBAIC0xMzUsNyArMTI5LDcgQEAKIAkgICAgeHRpbWUudHZfc2VjID4gbGFzdF9ydGNfdXBkYXRlICsgNjYwICYmCiAJICAgICh4dGltZS50dl9uc2VjIC8gMTAwMCkgPj0gNTAwMDAwIC0gKCh1bnNpZ25lZCkgVElDS19TSVpFKSAvIDIgJiYKIAkgICAgKHh0aW1lLnR2X25zZWMgLyAxMDAwKSA8PSA1MDAwMDAgKyAoKHVuc2lnbmVkKSBUSUNLX1NJWkUpIC8gMikgewotCQlpZiAocnRjX3NldF90aW1lKHh0aW1lLnR2X3NlYykgPT0gMCkKKwkJaWYgKHJ0Y19zaF9zZXRfdGltZSh4dGltZS50dl9zZWMpID09IDApCiAJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWM7CiAJCWVsc2UKIAkJCS8qIGRvIGl0IGFnYWluIGluIDYwcyAqLwpAQCAtMTQzLDggKzEzNywzMyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19QTQoraW50IHRpbWVyX3N1c3BlbmQoc3RydWN0IHN5c19kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBzeXNfdGltZXIgKnN5c190aW1lciA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBzeXNfdGltZXIsIGRldik7CisKKwlzeXNfdGltZXItPm9wcy0+c3RvcCgpOworCisJcmV0dXJuIDA7Cit9CisKK2ludCB0aW1lcl9yZXN1bWUoc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc3lzX3RpbWVyICpzeXNfdGltZXIgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgc3lzX3RpbWVyLCBkZXYpOworCisJc3lzX3RpbWVyLT5vcHMtPnN0YXJ0KCk7CisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIHRpbWVyX3N1c3BlbmQgTlVMTAorI2RlZmluZSB0aW1lcl9yZXN1bWUgTlVMTAorI2VuZGlmCisKIHN0YXRpYyBzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHRpbWVyX3N5c2NsYXNzID0gewogCXNldF9rc2V0X25hbWUoInRpbWVyIiksCisJLnN1c3BlbmQgPSB0aW1lcl9zdXNwZW5kLAorCS5yZXN1bWUJID0gdGltZXJfcmVzdW1lLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgdGltZXJfaW5pdF9zeXNmcyh2b2lkKQpAQCAtMTU2LDcgKzE3NSw2IEBACiAJc3lzX3RpbWVyLT5kZXYuY2xzID0gJnRpbWVyX3N5c2NsYXNzOwogCXJldHVybiBzeXNkZXZfcmVnaXN0ZXIoJnN5c190aW1lci0+ZGV2KTsKIH0KLQogZGV2aWNlX2luaXRjYWxsKHRpbWVyX2luaXRfc3lzZnMpOwogCiB2b2lkICgqYm9hcmRfdGltZV9pbml0KSh2b2lkKTsKQEAgLTE2OCwxNSArMTg2LDkgQEAKIAogCWNsa19pbml0KCk7CiAKLQlpZiAocnRjX2dldF90aW1lKSB7Ci0JCXJ0Y19nZXRfdGltZSgmeHRpbWUpOwotCX0gZWxzZSB7Ci0JCXh0aW1lLnR2X3NlYyA9IG1rdGltZSgyMDAwLCAxLCAxLCAwLCAwLCAwKTsKLQkJeHRpbWUudHZfbnNlYyA9IDA7Ci0JfQotCi0gICAgICAgIHNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLXh0aW1lLnR2X3NlYywgLXh0aW1lLnR2X25zZWMpOworCXJ0Y19zaF9nZXRfdGltZSgmeHRpbWUpOworCXNldF9ub3JtYWxpemVkX3RpbWVzcGVjKCZ3YWxsX3RvX21vbm90b25pYywKKwkJCQkteHRpbWUudHZfc2VjLCAteHRpbWUudHZfbnNlYyk7CiAKIAkvKgogCSAqIEZpbmQgdGhlIHRpbWVyIHRvIHVzZSBhcyB0aGUgc3lzdGVtIHRpbWVyLCBpdCB3aWxsIGJlCmRpZmYgLS1naXQgYS9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMgYi9hcmNoL3NoL2tlcm5lbC90aW1lcnMvdGltZXItdG11LmMKaW5kZXggZDQyMTJhZC4uMjA1ODE2ZiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdGltZXJzL3RpbWVyLXRtdS5jCisrKyBiL2FyY2gvc2gva2VybmVsL3RpbWVycy90aW1lci10bXUuYwpAQCAtMTMyLDE3ICsxMzIsMTcgQEAKIAljdHJsX291dGwoMHhmZmZmZmZmZiwgVE1VMF9UQ09SKTsKIAljdHJsX291dGwoMHhmZmZmZmZmZiwgVE1VMF9UQ05UKTsKIAotCXJ0Y19nZXRfdGltZSgmdHMyKTsKKwlydGNfc2hfZ2V0X3RpbWUoJnRzMik7CiAKIAlkbyB7Ci0JCXJ0Y19nZXRfdGltZSgmdHMxKTsKKwkJcnRjX3NoX2dldF90aW1lKCZ0czEpOwogCX0gd2hpbGUgKHRzMS50dl9uc2VjID09IHRzMi50dl9uc2VjICYmIHRzMS50dl9zZWMgPT0gdHMyLnR2X3NlYyk7CiAKIAkvKiBhY3R1YWxseSBzdGFydCB0aGUgdGltZXIgKi8KIAljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOwogCiAJZG8gewotCQlydGNfZ2V0X3RpbWUoJnRzMik7CisJCXJ0Y19zaF9nZXRfdGltZSgmdHMyKTsKIAl9IHdoaWxlICh0czEudHZfbnNlYyA9PSB0czIudHZfbnNlYyAmJiB0czEudHZfc2VjID09IHRzMi50dl9zZWMpOwogCiAJZnJlcSA9IDB4ZmZmZmZmZmYgLSBjdHJsX2lubChUTVUwX1RDTlQpOwpAQCAtMTg4LDYgKzE4OCwxOCBAQAogCS5vcHMJCT0gJnRtdV9jbGtfb3BzLAogfTsKIAorc3RhdGljIGludCB0bXVfdGltZXJfc3RhcnQodm9pZCkKK3sKKwljdHJsX291dGIoVE1VX1RTVFJfSU5JVCwgVE1VX1RTVFIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRtdV90aW1lcl9zdG9wKHZvaWQpCit7CisJY3RybF9vdXRiKDAsIFRNVV9UU1RSKTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCB0bXVfdGltZXJfaW5pdCh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CkBAIC0xOTcsNyArMjA5LDcgQEAKIAl0bXUwX2Nsay5wYXJlbnQgPSBjbGtfZ2V0KCJtb2R1bGVfY2xrIik7CiAKIAkvKiBTdGFydCBUTVUwICovCi0JY3RybF9vdXRiKDAsIFRNVV9UU1RSKTsKKwl0bXVfdGltZXJfc3RvcCgpOwogI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApICYmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApCiAJY3RybF9vdXRiKFRNVV9UT0NSX0lOSVQsIFRNVV9UT0NSKTsKICNlbmRpZgpAQCAtMjExLDEzICsyMjMsMTUgQEAKIAljdHJsX291dGwoaW50ZXJ2YWwsIFRNVTBfVENPUik7CiAJY3RybF9vdXRsKGludGVydmFsLCBUTVUwX1RDTlQpOwogCi0JY3RybF9vdXRiKFRNVV9UU1RSX0lOSVQsIFRNVV9UU1RSKTsKKwl0bXVfdGltZXJfc3RhcnQoKTsKIAogCXJldHVybiAwOwogfQogCiBzdHJ1Y3Qgc3lzX3RpbWVyX29wcyB0bXVfdGltZXJfb3BzID0gewogCS5pbml0CQk9IHRtdV90aW1lcl9pbml0LAorCS5zdGFydAkJPSB0bXVfdGltZXJfc3RhcnQsCisJLnN0b3AJCT0gdG11X3RpbWVyX3N0b3AsCiAJLmdldF9mcmVxdWVuY3kJPSB0bXVfdGltZXJfZ2V0X2ZyZXF1ZW5jeSwKIAkuZ2V0X29mZnNldAk9IHRtdV90aW1lcl9nZXRfb2Zmc2V0LAogfTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3RyYXBzLmMgYi9hcmNoL3NoL2tlcm5lbC90cmFwcy5jCmluZGV4IGQ5ZGIxMTguLmMyYzU5N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9zaC9rZXJuZWwvdHJhcHMuYwpAQCAtMzYsNDAgKzM2LDE1IEBACiAKICNpZmRlZiBDT05GSUdfU0hfS0dEQgogI2luY2x1ZGUgPGFzbS9rZ2RiLmg+Ci0jZGVmaW5lIENIS19SRU1PVEVfREVCVUcocmVncykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAoKGtnZGJfZGVidWdfaG9vayAhPSAoa2dkYl9kZWJ1Z19ob29rX3QgKikgTlVMTCkgJiYgKCF1c2VyX21vZGUocmVncykpKSBcCi0gIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAoKmtnZGJfZGVidWdfaG9vaykocmVncyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisjZGVmaW5lIENIS19SRU1PVEVfREVCVUcocmVncykgICAgICAgICAgICAgICAgIAlcCit7ICAgICAgIAkJCQkJXAorCWlmIChrZ2RiX2RlYnVnX2hvb2sgJiYgIXVzZXJfbW9kZShyZWdzKSlcCisJCSgqa2dkYl9kZWJ1Z19ob29rKShyZWdzKTsgICAgICAgXAogfQogI2Vsc2UKICNkZWZpbmUgQ0hLX1JFTU9URV9ERUJVRyhyZWdzKQogI2VuZGlmCiAKLSNkZWZpbmUgRE9fRVJST1IodHJhcG5yLCBzaWduciwgc3RyLCBuYW1lLCB0c2spCQkJCVwKLWFzbWxpbmthZ2Ugdm9pZCBkb18jI25hbWUodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwJCVwKLQkJCSAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywJCVwKLQkJCSAgc3RydWN0IHB0X3JlZ3MgcmVncykJCQkJXAotewkJCQkJCQkJCVwKLQl1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CQkJCQlcCi0gCQkJCQkJCQkJXAotCS8qIENoZWNrIGlmIGl0J3MgYSBEU1AgaW5zdHJ1Y3Rpb24gKi8JCQkJXAotIAlpZiAoaXNfZHNwX2luc3QoJnJlZ3MpKSB7CQkJCQlcCi0JCS8qIEVuYWJsZSBEU1AgbW9kZSwgYW5kIHJlc3RhcnQgaW5zdHJ1Y3Rpb24uICovCQlcCi0JCXJlZ3Muc3IgfD0gU1JfRFNQOwkJCQkJXAotCQlyZXR1cm47CQkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JCQkJCQkJCQlcCi0JYXNtIHZvbGF0aWxlKCJzdGMJcjJfYmFuaywgJTAiOiAiPXIiIChlcnJvcl9jb2RlKSk7CVwKLQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJCQkJXAotCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSBlcnJvcl9jb2RlOwkJCQlcCi0JdHNrLT50aHJlYWQudHJhcF9ubyA9IHRyYXBucjsJCQkJCVwKLSAgICAgICAgQ0hLX1JFTU9URV9ERUJVRygmcmVncyk7CQkJCQlcCi0JZm9yY2Vfc2lnKHNpZ25yLCB0c2spOwkJCQkJCVwKLQlkaWVfaWZfbm9fZml4dXAoc3RyLCZyZWdzLGVycm9yX2NvZGUpOwkJCQlcCi19Ci0KICNpZmRlZiBDT05GSUdfQ1BVX1NIMgogI2RlZmluZSBUUkFQX1JFU0VSVkVEX0lOU1QJNAogI2RlZmluZSBUUkFQX0lMTEVHQUxfU0xPVF9JTlNUCTYKQEAgLTg2LDcgKzYxLDcgQEAKICNkZWZpbmUgVk1BTExPQ19PRkZTRVQgKDgqMTAyNCoxMDI0KQogI2RlZmluZSBNT0RVTEVfUkFOR0UgKDgqMTAyNCoxMDI0KQogCi1zcGlubG9ja190IGRpZV9sb2NrOworREVGSU5FX1NQSU5MT0NLKGRpZV9sb2NrKTsKIAogdm9pZCBkaWUoY29uc3QgY2hhciAqIHN0ciwgc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycikKIHsKQEAgLTU3NSw4ICs1NTAsMTE3IEBACiAjZGVmaW5lIGlzX2RzcF9pbnN0KHJlZ3MpCSgwKQogI2VuZGlmIC8qIENPTkZJR19TSF9EU1AgKi8KIAotRE9fRVJST1IoVFJBUF9SRVNFUlZFRF9JTlNULCBTSUdJTEwsICJyZXNlcnZlZCBpbnN0cnVjdGlvbiIsIHJlc2VydmVkX2luc3QsIGN1cnJlbnQpCi1ET19FUlJPUihUUkFQX0lMTEVHQUxfU0xPVF9JTlNULCBTSUdJTEwsICJpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24iLCBpbGxlZ2FsX3Nsb3RfaW5zdCwgY3VycmVudCkKK2V4dGVybiBpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQsIHN0cnVjdCBwdF9yZWdzKik7CisKK2FzbWxpbmthZ2Ugdm9pZCBkb19yZXNlcnZlZF9pbnN0KHVuc2lnbmVkIGxvbmcgcjQsIHVuc2lnbmVkIGxvbmcgcjUsCisJCQkJdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCQlzdHJ1Y3QgcHRfcmVncyByZWdzKQoreworCXVuc2lnbmVkIGxvbmcgZXJyb3JfY29kZTsKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQorCXVuc2lnbmVkIHNob3J0IGluc3Q7CisJaW50IGVycjsKKworCWdldF91c2VyKGluc3QsICh1bnNpZ25lZCBzaG9ydCopcmVncy5wYyk7CisKKwllcnIgPSBkb19mcHVfaW5zdChpbnN0LCAmcmVncyk7CisJaWYgKCFlcnIpIHsKKwkJcmVncy5wYyArPSAyOworCQlyZXR1cm47CisJfQorCS8qIG5vdCBhIEZQVSBpbnN0LiAqLworI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfU0hfRFNQCisJLyogQ2hlY2sgaWYgaXQncyBhIERTUCBpbnN0cnVjdGlvbiAqLworIAlpZiAoaXNfZHNwX2luc3QoJnJlZ3MpKSB7CisJCS8qIEVuYWJsZSBEU1AgbW9kZSwgYW5kIHJlc3RhcnQgaW5zdHJ1Y3Rpb24uICovCisJCXJlZ3Muc3IgfD0gU1JfRFNQOworCQlyZXR1cm47CisJfQorI2VuZGlmCisKKwlhc20gdm9sYXRpbGUoInN0YwlyMl9iYW5rLCAlMCI6ICI9ciIgKGVycm9yX2NvZGUpKTsKKwlsb2NhbF9pcnFfZW5hYmxlKCk7CisJdHNrLT50aHJlYWQuZXJyb3JfY29kZSA9IGVycm9yX2NvZGU7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IFRSQVBfUkVTRVJWRURfSU5TVDsKKwlDSEtfUkVNT1RFX0RFQlVHKCZyZWdzKTsKKwlmb3JjZV9zaWcoU0lHSUxMLCB0c2spOworCWRpZV9pZl9ub19maXh1cCgicmVzZXJ2ZWQgaW5zdHJ1Y3Rpb24iLCAmcmVncywgZXJyb3JfY29kZSk7Cit9CisKKyNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQorc3RhdGljIGludCBlbXVsYXRlX2JyYW5jaCh1bnNpZ25lZCBzaG9ydCBpbnN0LCBzdHJ1Y3QgcHRfcmVncyogcmVncykKK3sKKwkvKgorCSAqIGJmczogOGZ4eDogUEMrPWQqMis0OworCSAqIGJ0czogOGR4eDogUEMrPWQqMis0OworCSAqIGJyYTogYXh4eDogUEMrPUQqMis0OworCSAqIGJzcjogYnh4eDogUEMrPUQqMis0ICBhZnRlciBQUj1QQys0OworCSAqIGJyYWY6MHgyMzogUEMrPVJuKjIrNDsKKwkgKiBic3JmOjB4MDM6IFBDKz1SbioyKzQgYWZ0ZXIgUFI9UEMrNDsKKwkgKiBqbXA6IDR4MmI6IFBDPVJuOworCSAqIGpzcjogNHgwYjogUEM9Um4gICAgICBhZnRlciBQUj1QQys0OworCSAqIHJ0czogMDAwYjogUEM9UFI7CisJICovCisJaWYgKChpbnN0ICYgMHhmZDAwKSA9PSAweDhkMDApIHsKKwkJcmVncy0+cGMgKz0gU0hfUENfOEJJVF9PRkZTRVQoaW5zdCk7CisJCXJldHVybiAwOworCX0KKworCWlmICgoaW5zdCAmIDB4ZTAwMCkgPT0gMHhhMDAwKSB7CisJCXJlZ3MtPnBjICs9IFNIX1BDXzEyQklUX09GRlNFVChpbnN0KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKChpbnN0ICYgMHhmMGRmKSA9PSAweDAwMDMpIHsKKwkJcmVncy0+cGMgKz0gcmVncy0+cmVnc1soaW5zdCAmIDB4MGYwMCkgPj4gOF0gKyA0OworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGluc3QgJiAweGYwZGYpID09IDB4NDAwYikgeworCQlyZWdzLT5wYyA9IHJlZ3MtPnJlZ3NbKGluc3QgJiAweDBmMDApID4+IDhdOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoKGluc3QgJiAweGZmZmYpID09IDB4MDAwYikgeworCQlyZWdzLT5wYyA9IHJlZ3MtPnByOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCithc21saW5rYWdlIHZvaWQgZG9faWxsZWdhbF9zbG90X2luc3QodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCQl1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LAorCQkJCXN0cnVjdCBwdF9yZWdzIHJlZ3MpCit7CisJdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKKyNpZmRlZiBDT05GSUdfU0hfRlBVX0VNVQorCXVuc2lnbmVkIHNob3J0IGluc3Q7CisKKwlnZXRfdXNlcihpbnN0LCAodW5zaWduZWQgc2hvcnQgKilyZWdzLnBjICsgMSk7CisJaWYgKCFkb19mcHVfaW5zdChpbnN0LCAmcmVncykpIHsKKwkJZ2V0X3VzZXIoaW5zdCwgKHVuc2lnbmVkIHNob3J0ICopcmVncy5wYyk7CisJCWlmICghZW11bGF0ZV9icmFuY2goaW5zdCwgJnJlZ3MpKQorCQkJcmV0dXJuOworCQkvKiBmYXVsdCBpbiBicmFuY2guKi8KKwl9CisJLyogbm90IGEgRlBVIGluc3QuICovCisjZW5kaWYKKworCWFzbSB2b2xhdGlsZSgic3RjCXIyX2JhbmssICUwIjogIj1yIiAoZXJyb3JfY29kZSkpOworCWxvY2FsX2lycV9lbmFibGUoKTsKKwl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gZXJyb3JfY29kZTsKKwl0c2stPnRocmVhZC50cmFwX25vID0gVFJBUF9SRVNFUlZFRF9JTlNUOworCUNIS19SRU1PVEVfREVCVUcoJnJlZ3MpOworCWZvcmNlX3NpZyhTSUdJTEwsIHRzayk7CisJZGllX2lmX25vX2ZpeHVwKCJpbGxlZ2FsIHNsb3QgaW5zdHJ1Y3Rpb24iLCAmcmVncywgZXJyb3JfY29kZSk7Cit9CiAKIGFzbWxpbmthZ2Ugdm9pZCBkb19leGNlcHRpb25fZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKIAkJCQkgICB1bnNpZ25lZCBsb25nIHI2LCB1bnNpZ25lZCBsb25nIHI3LApAQCAtNjM0LDE0ICs3MTgsMTYgQEAKIAlleGNlcHRpb25faGFuZGxpbmdfdGFibGVbVFJBUF9JTExFR0FMX1NMT1RfSU5TVF0KIAkJPSAodm9pZCAqKWRvX2lsbGVnYWxfc2xvdF9pbnN0OwogCi0jaWZkZWYgQ09ORklHX0NQVV9TSDQKLQlpZiAoIShjcHVfZGF0YS0+ZmxhZ3MgJiBDUFVfSEFTX0ZQVSkpIHsKLQkJLyogRm9yIFNILTQgbGFja2luZyBhbiBGUFUsIHRyZWF0IGZsb2F0aW5nIHBvaW50IGluc3RydWN0aW9ucwotCQkgICBhcyByZXNlcnZlZC4gKi8KLQkJLyogZW50cnkgNjQgY29ycmVzcG9uZHMgdG8gRVhQRVZUPTB4ODAwICovCi0JCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZVs2NF0gPSAodm9pZCAqKWRvX3Jlc2VydmVkX2luc3Q7Ci0JCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZVs2NV0gPSAodm9pZCAqKWRvX2lsbGVnYWxfc2xvdF9pbnN0OwotCX0KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KSAmJiAhZGVmaW5lZChDT05GSUdfU0hfRlBVKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfU0hfRlBVX0VNVSkKKwkvKgorCSAqIEZvciBTSC00IGxhY2tpbmcgYW4gRlBVLCB0cmVhdCBmbG9hdGluZyBwb2ludCBpbnN0cnVjdGlvbnMgYXMKKwkgKiByZXNlcnZlZC4gVGhleSdsbCBiZSBoYW5kbGVkIGluIHRoZSBtYXRoLWVtdSBjYXNlLCBvciBmYXVsdGVkIG9uCisJICogb3RoZXJ3aXNlLgorCSAqLworCS8qIGVudHJ5IDY0IGNvcnJlc3BvbmRzIHRvIEVYUEVWVD0weDgwMCAqLworCWV4Y2VwdGlvbl9oYW5kbGluZ190YWJsZVs2NF0gPSAodm9pZCAqKWRvX3Jlc2VydmVkX2luc3Q7CisJZXhjZXB0aW9uX2hhbmRsaW5nX3RhYmxlWzY1XSA9ICh2b2lkICopZG9faWxsZWdhbF9zbG90X2luc3Q7CiAjZW5kaWYKIAkJCiAJLyogU2V0dXAgVkJSIGZvciBib290IGNwdSAqLwpAQCAtNjU1LDIwICs3NDEsMTIgQEAKIAl1bnNpZ25lZCBsb25nIG1vZHVsZV9lbmQgPSBWTUFMTE9DX0VORDsKIAlpbnQgaSA9IDE7CiAKLQlpZiAodHNrICYmICFzcCkgeworCWlmICghdHNrKQorCQl0c2sgPSBjdXJyZW50OworCWlmICh0c2sgPT0gY3VycmVudCkKKwkJc3AgPSAodW5zaWduZWQgbG9uZyAqKWN1cnJlbnRfc3RhY2tfcG9pbnRlcjsKKwllbHNlCiAJCXNwID0gKHVuc2lnbmVkIGxvbmcgKil0c2stPnRocmVhZC5zcDsKLQl9Ci0KLQlpZiAoIXNwKSB7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJCSJtb3YgcjE1LCAlMFxuXHQiCi0JCQkic3RjIHI3X2JhbmssICUxXG5cdCIKLQkJCTogIj1yIiAobW9kdWxlX3N0YXJ0KSwKLQkJCSAgIj1yIiAobW9kdWxlX2VuZCkKLQkJKTsKLQkJCi0JCXNwID0gKHVuc2lnbmVkIGxvbmcgKiltb2R1bGVfc3RhcnQ7Ci0JfQogCiAJc3RhY2sgPSBzcDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvc2gva2VybmVsL3ZtbGludXgubGRzLlMKaW5kZXggOTVmZGQ5MS4uNWViOTMwOSAxMDA2NDQKLS0tIGEvYXJjaC9zaC9rZXJuZWwvdm1saW51eC5sZHMuUworKysgYi9hcmNoL3NoL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC0yLDYgKzIsNyBAQAogICogbGQgc2NyaXB0IHRvIG1ha2UgU3VwZXJIIExpbnV4IGtlcm5lbAogICogV3JpdHRlbiBieSBOaWliZSBZdXRha2EKICAqLworI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgogI2luY2x1ZGUgPGFzbS1nZW5lcmljL3ZtbGludXgubGRzLmg+CiAKICNpZmRlZiBDT05GSUdfQ1BVX0xJVFRMRV9FTkRJQU4KQEAgLTEzLDcgKzE0LDcgQEAKIEVOVFJZKF9zdGFydCkKIFNFQ1RJT05TCiB7Ci0gIC4gPSAweDgwMDAwMDAwICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOworICAuID0gQ09ORklHX1BBR0VfT0ZGU0VUICsgQ09ORklHX01FTU9SWV9TVEFSVCArIENPTkZJR19aRVJPX1BBR0VfT0ZGU0VUOwogICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLmVtcHR5X3plcm9fcGFnZSA6IHsKQEAgLTQwLDE2ICs0MSwxNiBAQAogCSooLmRhdGEpCiAKICAJIC8qIEFsaWduIHRoZSBpbml0aWFsIHJhbWRpc2sgaW1hZ2UgKElOSVRSRCkgb24gcGFnZSBib3VuZGFyaWVzLiAqLwotIAkgLiA9IEFMSUdOKDQwOTYpOworIAkgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgCSBfX3JkX3N0YXJ0ID0gLjsKICAJICooLmluaXRyZCkKLSAJIC4gPSBBTElHTig0MDk2KTsKKyAJIC4gPSBBTElHTihQQUdFX1NJWkUpOwogIAkgX19yZF9lbmQgPSAuOwogCiAJQ09OU1RSVUNUT1JTCiAJfQogCi0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IHsgKiguZGF0YS5pZHQpIH0KIAogICAuID0gQUxJR04oMzIpOwpAQCAtNjAsMTIgKzYxLDEwIEBACiAKICAgX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAKLSAgLiA9IEFMSUdOKDgxOTIpOwkJLyogaW5pdF90YXNrICovCisgIC4gPSBBTElHTihUSFJFQURfU0laRSk7CQkvKiBpbml0X3Rhc2sgKi8KICAgLmRhdGEuaW5pdF90YXNrIDogeyAqKC5kYXRhLmluaXRfdGFzaykgfQotICAvKiBzdGFjayAqLwotICAuc3RhY2sgOiB7IHN0YWNrID0gLjsgIF9zdGFjayA9IC47IH0KIAotICAuID0gQUxJR04oNDA5Nik7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KICAgX19pbml0X2JlZ2luID0gLjsKICAgX3Npbml0dGV4dCA9IC47CiAgIC5pbml0LnRleHQgOiB7ICooLmluaXQudGV4dCkgfQpAQCAtOTYsNyArOTUsNyBAQAogICBfX21hY2h2ZWNfc3RhcnQgPSAuOwogICAuaW5pdC5tYWNodmVjIDogeyAqKC5pbml0Lm1hY2h2ZWMpIH0KICAgX19tYWNodmVjX2VuZCA9IC47Ci0gIC4gPSBBTElHTig0MDk2KTsKKyAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogCiAgIC4gPSBBTElHTig0KTsKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlIGIvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGJiY2UxYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL01ha2VmaWxlCkBAIC0wLDAgKzEsMzYgQEAKK29iai15ICs9IHZzeXNjYWxsLm8gdnN5c2NhbGwtc3lzY2FsbC5vCisKKyQob2JqKS92c3lzY2FsbC1zeXNjYWxsLm86IFwKKwkkKGZvcmVhY2ggRix0cmFwYSwkKG9iaikvdnN5c2NhbGwtJEYuc28pCisKKyMgVGVhY2gga2J1aWxkIGFib3V0IHRhcmdldHMKK3RhcmdldHMgKz0gJChmb3JlYWNoIEYsdHJhcGEsdnN5c2NhbGwtJEYubyB2c3lzY2FsbC0kRi5zbykKK3RhcmdldHMgKz0gdnN5c2NhbGwtbm90ZS5vIHZzeXNjYWxsLmxkcworCisjIFRoZSBEU08gaW1hZ2VzIGFyZSBidWlsdCB1c2luZyBhIHNwZWNpYWwgbGlua2VyIHNjcmlwdAorcXVpZXRfY21kX3N5c2NhbGwgPSBTWVNDQUxMICRACisgICAgICBjbWRfc3lzY2FsbCA9ICQoQ0MpIC1ub3N0ZGxpYiAkKFNZU0NGTEFHU18kKEBGKSkgXAorCQkJICAgLVdsLC1ULCQoZmlsdGVyLW91dCBGT1JDRSwkXikgLW8gJEAKKworZXhwb3J0IENQUEZMQUdTX3ZzeXNjYWxsLmxkcyArPSAtUCAtQyAtVXNoCisKK3ZzeXNjYWxsLWZsYWdzID0gLXNoYXJlZCAtcyAtV2wsLXNvbmFtZT1saW51eC1nYXRlLnNvLjEgXAorCQkkKGNhbGwgbGQtb3B0aW9uLCAtV2wkKGNvbW1hKS0taGFzaC1zdHlsZT1zeXN2KQorCitTWVNDRkxBR1NfdnN5c2NhbGwtdHJhcGEuc28JPSAkKHZzeXNjYWxsLWZsYWdzKQorCiskKG9iaikvdnN5c2NhbGwtdHJhcGEuc286IFwKKyQob2JqKS92c3lzY2FsbC0lLnNvOiAkKHNyYykvdnN5c2NhbGwubGRzICQob2JqKS92c3lzY2FsbC0lLm8gRk9SQ0UKKwkkKGNhbGwgaWZfY2hhbmdlZCxzeXNjYWxsKQorCisjIFdlIGFsc28gY3JlYXRlIGEgc3BlY2lhbCByZWxvY2F0YWJsZSBvYmplY3QgdGhhdCBzaG91bGQgbWlycm9yIHRoZSBzeW1ib2wKKyMgdGFibGUgYW5kIGxheW91dCBvZiB0aGUgbGlua2VkIERTTy4gIFdpdGggbGQgLVIgd2UgY2FuIHRoZW4gcmVmZXIgdG8KKyMgdGhlc2Ugc3ltYm9scyBpbiB0aGUga2VybmVsIGNvZGUgcmF0aGVyIHRoYW4gaGFuZC1jb2RlZCBhZGRyZXNzZXMuCitleHRyYS15ICs9IHZzeXNjYWxsLXN5bXMubworJChvYmopL2J1aWx0LWluLm86ICQob2JqKS92c3lzY2FsbC1zeW1zLm8KKyQob2JqKS9idWlsdC1pbi5vOiBsZF9mbGFncyArPSAtUiAkKG9iaikvdnN5c2NhbGwtc3ltcy5vCisKK1NZU0NGTEFHU192c3lzY2FsbC1zeW1zLm8gPSAtcgorJChvYmopL3ZzeXNjYWxsLXN5bXMubzogJChzcmMpL3ZzeXNjYWxsLmxkcyBcCisJCQkkKG9iaikvdnN5c2NhbGwtdHJhcGEubyAkKG9iaikvdnN5c2NhbGwtbm90ZS5vIEZPUkNFCisJJChjYWxsIGlmX2NoYW5nZWQsc3lzY2FsbCkKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLW5vdGUuUyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLW5vdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGI1YmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwtbm90ZS5TCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBUaGlzIHN1cHBsaWVzIC5ub3RlLiogc2VjdGlvbnMgdG8gZ28gaW50byB0aGUgUFRfTk9URSBpbnNpZGUgdGhlIHZEU08gdGV4dC4KKyAqIEhlcmUgd2UgY2FuIHN1cHBseSBzb21lIGluZm9ybWF0aW9uIHVzZWZ1bCB0byB1c2VybGFuZC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvdXRzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorCisjZGVmaW5lIEFTTV9FTEZfTk9URV9CRUdJTihuYW1lLCBmbGFncywgdmVuZG9yLCB0eXBlKQkJCSAgICAgIFwKKwkuc2VjdGlvbiBuYW1lLCBmbGFnczsJCQkJCQkgICAgICBcCisJLmJhbGlnbiA0OwkJCQkJCQkgICAgICBcCisJLmxvbmcgMWYgLSAwZjsJCS8qIG5hbWUgbGVuZ3RoICovCQkJICAgICAgXAorCS5sb25nIDNmIC0gMmY7CQkvKiBkYXRhIGxlbmd0aCAqLwkJCSAgICAgIFwKKwkubG9uZyB0eXBlOwkJLyogbm90ZSB0eXBlICovCQkJCSAgICAgIFwKKzA6CS5hc2NpeiB2ZW5kb3I7CQkvKiB2ZW5kb3IgbmFtZSAqLwkJCSAgICAgIFwKKzE6CS5iYWxpZ24gNDsJCQkJCQkJICAgICAgXAorMjoKKworI2RlZmluZSBBU01fRUxGX05PVEVfRU5ECQkJCQkJICAgICAgXAorMzoJLmJhbGlnbiA0OwkJLyogcGFkIG91dCBzZWN0aW9uICovCQkJICAgICAgXAorCS5wcmV2aW91cworCisJQVNNX0VMRl9OT1RFX0JFR0lOKCIubm90ZS5rZXJuZWwtdmVyc2lvbiIsICJhIiwgVVRTX1NZU05BTUUsIDApCisJLmxvbmcgTElOVVhfVkVSU0lPTl9DT0RFCisJQVNNX0VMRl9OT1RFX0VORApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwtc2lncmV0dXJuLlMgYi9hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC1zaWdyZXR1cm4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTVhNjRmCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwtc2lncmV0dXJuLlMKQEAgLTAsMCArMSwzOSBAQAorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworCS50ZXh0CisJLmJhbGlnbiAzMgorCS5nbG9ibCBfX2tlcm5lbF9zaWdyZXR1cm4KKwkudHlwZSBfX2tlcm5lbF9zaWdyZXR1cm4sQGZ1bmN0aW9uCitfX2tlcm5lbF9zaWdyZXR1cm46CisuTFNUQVJUX3NpZ3JldHVybjoKKwltb3YudwkxZiwgcjMKKwl0cmFwYQkjMHgxMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCisxOgkuc2hvcnQJX19OUl9zaWdyZXR1cm4KKy5MRU5EX3NpZ3JldHVybjoKKwkuc2l6ZSBfX2tlcm5lbF9zaWdyZXR1cm4sLi0uTFNUQVJUX3NpZ3JldHVybgorCisJLmJhbGlnbiAzMgorCS5nbG9ibCBfX2tlcm5lbF9ydF9zaWdyZXR1cm4KKwkudHlwZSBfX2tlcm5lbF9ydF9zaWdyZXR1cm4sQGZ1bmN0aW9uCitfX2tlcm5lbF9ydF9zaWdyZXR1cm46CisuTFNUQVJUX3J0X3NpZ3JldHVybjoKKwltb3YudwkxZiwgcjMKKwl0cmFwYQkjMHgxMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCW9yCXIwLCByMAorCisxOgkuc2hvcnQJX19OUl9ydF9zaWdyZXR1cm4KKy5MRU5EX3J0X3NpZ3JldHVybjoKKwkuc2l6ZSBfX2tlcm5lbF9ydF9zaWdyZXR1cm4sLi0uTFNUQVJUX3J0X3NpZ3JldHVybgorCisJLnNlY3Rpb24gLmVoX2ZyYW1lLCJhIixAcHJvZ2JpdHMKKwkucHJldmlvdXMKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLXN5c2NhbGwuUyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLXN5c2NhbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmFjN2YwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwtc3lzY2FsbC5TCkBAIC0wLDAgKzEsMTAgQEAKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisKK19fSU5JVERBVEEKKworCS5nbG9ibCB2c3lzY2FsbF90cmFwYV9zdGFydCwgdnN5c2NhbGxfdHJhcGFfZW5kCit2c3lzY2FsbF90cmFwYV9zdGFydDoKKwkuaW5jYmluICJhcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC10cmFwYS5zbyIKK3ZzeXNjYWxsX3RyYXBhX2VuZDoKKworX19GSU5JVApkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwtdHJhcGEuUyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLXRyYXBhLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I2ZWIzNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLXRyYXBhLlMKQEAgLTAsMCArMSw0MiBAQAorCS50ZXh0CisJLmdsb2JsIF9fa2VybmVsX3ZzeXNjYWxsCisJLnR5cGUgX19rZXJuZWxfdnN5c2NhbGwsQGZ1bmN0aW9uCitfX2tlcm5lbF92c3lzY2FsbDoKKy5MU1RBUlRfdnN5c2NhbGw6CisJLyogWFhYOiBXZSdsbCBoYXZlIHRvIGRvIHNvbWV0aGluZyBoZXJlIG9uY2Ugd2Ugb3B0IHRvIHVzZSB0aGUgdkRTTworCSAqIHBhZ2UgZm9yIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBzaWduYWwgdHJhbXBvbGluZS4uIGFzIHdlbGwgYXMKKwkgKiBmaWxsIG91dCAuZWhfZnJhbWUgLS0gUEZNLiAqLworLkxFTkRfdnN5c2NhbGw6CisJLnNpemUgX19rZXJuZWxfdnN5c2NhbGwsLi0uTFNUQVJUX3ZzeXNjYWxsCisJLnByZXZpb3VzCisKKwkuc2VjdGlvbiAuZWhfZnJhbWUsImEiLEBwcm9nYml0cworLkxDSUU6CisJLnVhbG9uZwkuTENJRV9lbmQgLSAuTENJRV9zdGFydAorLkxDSUVfc3RhcnQ6CisJLnVhbG9uZwkwCQkvKiBDSUUgSUQgKi8KKwkuYnl0ZQkweDEJCS8qIFZlcnNpb24gbnVtYmVyICovCisJLnN0cmluZwkielJTIgkJLyogTlVMLXRlcm1pbmF0ZWQgYXVnbWVudGF0aW9uIHN0cmluZyAqLworCS51bGViMTI4IDB4MQkJLyogQ29kZSBhbGlnbm1lbnQgZmFjdG9yICovCisJLnNsZWIxMjggLTQJCS8qIERhdGEgYWxpZ25tZW50IGZhY3RvciAqLworCS5ieXRlCTB4MTEJCS8qIFJldHVybiBhZGRyZXNzIHJlZ2lzdGVyIGNvbHVtbiAqLworCQkJCS8qIEF1Z21lbnRhdGlvbiBsZW5ndGggYW5kIGRhdGEgKG5vbmUpICovCisJLmJ5dGUJMHhjCQkvKiBEV19DRkFfZGVmX2NmYSAqLworCS51bGViMTI4IDB4ZgkJLyogcjE1ICovCisJLnVsZWIxMjggMHgwCQkvKiBvZmZzZXQgMCAqLworCisJLmFsaWduIDIKKy5MQ0lFX2VuZDoKKworCS51YWxvbmcJLkxGREVfZW5kLS5MRkRFX3N0YXJ0CS8qIExlbmd0aCBGREUgKi8KKy5MRkRFX3N0YXJ0OgorCS51YWxvbmcJLkxDSUUJCQkvKiBDSUUgcG9pbnRlciAqLworCS51YWxvbmcJLkxTVEFSVF92c3lzY2FsbC0uCS8qIHN0YXJ0IGFkZHJlc3MgKi8KKwkudWFsb25nCS5MRU5EX3ZzeXNjYWxsLS5MU1RBUlRfdnN5c2NhbGwKKwkudWxlYjEyOCAwCisJLmFsaWduIDIKKy5MRkRFX2VuZDoKKwkucHJldmlvdXMKKworLyogR2V0IHRoZSBjb21tb24gY29kZSBmb3IgdGhlIHNpZ3JldHVybiBlbnRyeSBwb2ludHMgKi8KKyNpbmNsdWRlICJ2c3lzY2FsbC1zaWdyZXR1cm4uUyIKZGlmZiAtLWdpdCBhL2FyY2gvc2gva2VybmVsL3ZzeXNjYWxsL3ZzeXNjYWxsLmMgYi9hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NWQ2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5jCkBAIC0wLDAgKzEsMTUwIEBACisvKgorICogYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwuYworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgUGF1bCBNdW5kdAorICoKKyAqIHZEU08gcmFuZG9taXphdGlvbgorICogQ29weXJpZ2h0KEMpIDIwMDUtMjAwNiwgUmVkIEhhdCwgSW5jLiwgSW5nbyBNb2xuYXIKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYuaD4KKworLyoKKyAqIFNob3VsZCB0aGUga2VybmVsIG1hcCBhIFZEU08gcGFnZSBpbnRvIHByb2Nlc3NlcyBhbmQgcGFzcyBpdHMKKyAqIGFkZHJlc3MgZG93biB0byBnbGliYyB1cG9uIGV4ZWMoKT8KKyAqLwordW5zaWduZWQgaW50IF9fcmVhZF9tb3N0bHkgdmRzb19lbmFibGVkID0gMTsKK0VYUE9SVF9TWU1CT0xfR1BMKHZkc29fZW5hYmxlZCk7CisKK3N0YXRpYyBpbnQgX19pbml0IHZkc29fc2V0dXAoY2hhciAqcykKK3sKKwl2ZHNvX2VuYWJsZWQgPSBzaW1wbGVfc3RydG91bChzLCBOVUxMLCAwKTsKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInZkc289IiwgdmRzb19zZXR1cCk7CisKKy8qCisgKiBUaGVzZSBzeW1ib2xzIGFyZSBkZWZpbmVkIGJ5IHZzeXNjYWxsLm8gdG8gbWFyayB0aGUgYm91bmRzCisgKiBvZiB0aGUgRUxGIERTTyBpbWFnZXMgaW5jbHVkZWQgdGhlcmVpbi4KKyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgdnN5c2NhbGxfdHJhcGFfc3RhcnQsIHZzeXNjYWxsX3RyYXBhX2VuZDsKK3N0YXRpYyB2b2lkICpzeXNjYWxsX3BhZ2U7CisKK2ludCBfX2luaXQgdnN5c2NhbGxfaW5pdCh2b2lkKQoreworCXN5c2NhbGxfcGFnZSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9BVE9NSUMpOworCisJLyoKKwkgKiBYWFg6IE1hcCB0aGlzIHBhZ2UgdG8gYSBmaXhtYXAgZW50cnkgaWYgd2UgZ2V0IGFyb3VuZAorCSAqIHRvIGFkZGluZyB0aGUgcGFnZSB0byBFTEYgY29yZSBkdW1wcworCSAqLworCisJbWVtY3B5KHN5c2NhbGxfcGFnZSwKKwkgICAgICAgJnZzeXNjYWxsX3RyYXBhX3N0YXJ0LAorCSAgICAgICAmdnN5c2NhbGxfdHJhcGFfZW5kIC0gJnZzeXNjYWxsX3RyYXBhX3N0YXJ0KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBhZ2UgKnN5c2NhbGxfdm1hX25vcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpCit7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBhZGRyZXNzIC0gdm1hLT52bV9zdGFydDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKworCWlmIChhZGRyZXNzIDwgdm1hLT52bV9zdGFydCB8fCBhZGRyZXNzID4gdm1hLT52bV9lbmQpCisJCXJldHVybiBOT1BBR0VfU0lHQlVTOworCisJcGFnZSA9IHZpcnRfdG9fcGFnZShzeXNjYWxsX3BhZ2UgKyBvZmZzZXQpOworCisJZ2V0X3BhZ2UocGFnZSk7CisKKwlyZXR1cm4gcGFnZTsKK30KKworLyogUHJldmVudCBWTUEgbWVyZ2luZyAqLworc3RhdGljIHZvaWQgc3lzY2FsbF92bWFfY2xvc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc3lzY2FsbF92bV9vcHMgPSB7CisJLm5vcGFnZQk9IHN5c2NhbGxfdm1hX25vcGFnZSwKKwkuY2xvc2UJPSBzeXNjYWxsX3ZtYV9jbG9zZSwKK307CisKKy8qIFNldHVwIGEgVk1BIGF0IHByb2dyYW0gc3RhcnR1cCBmb3IgdGhlIHZzeXNjYWxsIHBhZ2UgKi8KK2ludCBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKwkJCQlpbnQgZXhlY3V0YWJsZV9zdGFjaykKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtPm1tOworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0OworCisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlhZGRyID0gZ2V0X3VubWFwcGVkX2FyZWEoTlVMTCwgMCwgUEFHRV9TSVpFLCAwLCAwKTsKKwlpZiAoSVNfRVJSX1ZBTFVFKGFkZHIpKSB7CisJCXJldCA9IGFkZHI7CisJCWdvdG8gdXBfZmFpbDsKKwl9CisKKwl2bWEgPSBrbWVtX2NhY2hlX3phbGxvYyh2bV9hcmVhX2NhY2hlcCwgU0xBQl9LRVJORUwpOworCWlmICghdm1hKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gdXBfZmFpbDsKKwl9CisKKwl2bWEtPnZtX3N0YXJ0ID0gYWRkcjsKKwl2bWEtPnZtX2VuZCA9IGFkZHIgKyBQQUdFX1NJWkU7CisJLyogTUFZV1JJVEUgdG8gYWxsb3cgZ2RiIHRvIENPVyBhbmQgc2V0IGJyZWFrcG9pbnRzICovCisJdm1hLT52bV9mbGFncyA9IFZNX1JFQUR8Vk1fRVhFQ3xWTV9NQVlSRUFEfFZNX01BWUVYRUN8Vk1fTUFZV1JJVEU7CisJdm1hLT52bV9mbGFncyB8PSBtbS0+ZGVmX2ZsYWdzOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcHJvdGVjdGlvbl9tYXBbdm1hLT52bV9mbGFncyAmIDddOworCXZtYS0+dm1fb3BzID0gJnN5c2NhbGxfdm1fb3BzOworCXZtYS0+dm1fbW0gPSBtbTsKKworCXJldCA9IGluc2VydF92bV9zdHJ1Y3QobW0sIHZtYSk7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOworCQlnb3RvIHVwX2ZhaWw7CisJfQorCisJY3VycmVudC0+bW0tPmNvbnRleHQudmRzbyA9ICh2b2lkICopYWRkcjsKKworCW1tLT50b3RhbF92bSsrOwordXBfZmFpbDoKKwl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcmV0OworfQorCitjb25zdCBjaGFyICphcmNoX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCWlmICh2bWEtPnZtX21tICYmIHZtYS0+dm1fc3RhcnQgPT0gKGxvbmcpdm1hLT52bV9tbS0+Y29udGV4dC52ZHNvKQorCQlyZXR1cm4gIlt2ZHNvXSI7CisKKwlyZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfZ2F0ZV92bWEoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQoreworCXJldHVybiBOVUxMOworfQorCitpbnQgaW5fZ2F0ZV9hcmVhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAwOworfQorCitpbnQgaW5fZ2F0ZV9hcmVhX25vX3Rhc2sodW5zaWduZWQgbG9uZyBhZGRyZXNzKQoreworCXJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwubGRzLlMgYi9hcmNoL3NoL2tlcm5lbC92c3lzY2FsbC92c3lzY2FsbC5sZHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTNjM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9rZXJuZWwvdnN5c2NhbGwvdnN5c2NhbGwubGRzLlMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIExpbmtlciBzY3JpcHQgZm9yIHZzeXNjYWxsIERTTy4gIFRoZSB2c3lzY2FsbCBwYWdlIGlzIGFuIEVMRiBzaGFyZWQKKyAqIG9iamVjdCBwcmVsaW5rZWQgdG8gaXRzIHZpcnR1YWwgYWRkcmVzcywgYW5kIHdpdGggb25seSBvbmUgcmVhZC1vbmx5CisgKiBzZWdtZW50ICh0aGF0IGZpdHMgaW4gb25lIHBhZ2UpLiAgVGhpcyBzY3JpcHQgY29udHJvbHMgaXRzIGxheW91dC4KKyAqLworI2luY2x1ZGUgPGFzbS9hc20tb2Zmc2V0cy5oPgorCisjaWZkZWYgQ09ORklHX0NQVV9MSVRUTEVfRU5ESUFOCitPVVRQVVRfRk9STUFUKCJlbGYzMi1zaC1saW51eCIsICJlbGYzMi1zaC1saW51eCIsICJlbGYzMi1zaC1saW51eCIpCisjZWxzZQorT1VUUFVUX0ZPUk1BVCgiZWxmMzItc2hiaWctbGludXgiLCAiZWxmMzItc2hiaWctbGludXgiLCAiZWxmMzItc2hiaWctbGludXgiKQorI2VuZGlmCitPVVRQVVRfQVJDSChzaCkKKworLyogVGhlIEVMRiBlbnRyeSBwb2ludCBjYW4gYmUgdXNlZCB0byBzZXQgdGhlIEFUX1NZU0lORk8gdmFsdWUuICAqLworRU5UUlkoX19rZXJuZWxfdnN5c2NhbGwpOworCitTRUNUSU9OUworeworICAuID0gU0laRU9GX0hFQURFUlM7CisKKyAgLmhhc2ggICAgICAgICAgIDogeyAqKC5oYXNoKSB9CQk6dGV4dAorICAuZ251Lmhhc2ggICAgICAgOiB7ICooLmdudS5oYXNoKSB9CisgIC5keW5zeW0gICAgICAgICA6IHsgKiguZHluc3ltKSB9CisgIC5keW5zdHIgICAgICAgICA6IHsgKiguZHluc3RyKSB9CisgIC5nbnUudmVyc2lvbiAgICA6IHsgKiguZ251LnZlcnNpb24pIH0KKyAgLmdudS52ZXJzaW9uX2QgIDogeyAqKC5nbnUudmVyc2lvbl9kKSB9CisgIC5nbnUudmVyc2lvbl9yICA6IHsgKiguZ251LnZlcnNpb25fcikgfQorCisgIC8qIFRoaXMgbGlua2VyIHNjcmlwdCBpcyB1c2VkIGJvdGggd2l0aCAtciBhbmQgd2l0aCAtc2hhcmVkLgorICAgICBGb3IgdGhlIGxheW91dHMgdG8gbWF0Y2gsIHdlIG5lZWQgdG8gc2tpcCBtb3JlIHRoYW4gZW5vdWdoCisgICAgIHNwYWNlIGZvciB0aGUgZHluYW1pYyBzeW1ib2wgdGFibGUgZXQgYWwuICBJZiB0aGlzIGFtb3VudAorICAgICBpcyBpbnN1ZmZpY2llbnQsIGxkIC1zaGFyZWQgd2lsbCBiYXJmLiAgSnVzdCBpbmNyZWFzZSBpdCBoZXJlLiAgKi8KKyAgLiA9IDB4NDAwOworCisgIC50ZXh0ICAgICAgICAgICA6IHsgKigudGV4dCkgfQkJOnRleHQgPTB4OTA5MDkwOTAKKyAgLm5vdGUJCSAgOiB7ICooLm5vdGUuKikgfQkJOnRleHQgOm5vdGUKKyAgLmVoX2ZyYW1lX2hkciAgIDogeyAqKC5laF9mcmFtZV9oZHIpIH0JOnRleHQgOmVoX2ZyYW1lX2hkcgorICAuZWhfZnJhbWUgICAgICAgOiB7IEtFRVAgKCooLmVoX2ZyYW1lKSkgfQk6dGV4dAorICAuZHluYW1pYyAgICAgICAgOiB7ICooLmR5bmFtaWMpIH0JCTp0ZXh0IDpkeW5hbWljCisgIC51c2VsZXNzICAgICAgICA6IHsKKyAgCSooLmdvdC5wbHQpICooLmdvdCkKKwkqKC5kYXRhIC5kYXRhLiogLmdudS5saW5rb25jZS5kLiopCisJKiguZHluYnNzKQorCSooLmJzcyAuYnNzLiogLmdudS5saW5rb25jZS5iLiopCisgIH0JCQkJCQk6dGV4dAorfQorCisvKgorICogV2UgbXVzdCBzdXBwbHkgdGhlIEVMRiBwcm9ncmFtIGhlYWRlcnMgZXhwbGljaXRseSB0byBnZXQganVzdCBvbmUKKyAqIFBUX0xPQUQgc2VnbWVudCwgYW5kIHNldCB0aGUgZmxhZ3MgZXhwbGljaXRseSB0byBtYWtlIHNlZ21lbnRzIHJlYWQtb25seS4KKyAqLworUEhEUlMKK3sKKyAgdGV4dCBQVF9MT0FEIEZJTEVIRFIgUEhEUlMgRkxBR1MoNSk7IC8qIFBGX1J8UEZfWCAqLworICBkeW5hbWljIFBUX0RZTkFNSUMgRkxBR1MoNCk7IC8qIFBGX1IgKi8KKyAgbm90ZSBQVF9OT1RFIEZMQUdTKDQpOyAvKiBQRl9SICovCisgIGVoX2ZyYW1lX2hkciAweDY0NzRlNTUwOyAvKiBQVF9HTlVfRUhfRlJBTUUsIGJ1dCBsZCBkb2Vzbid0IG1hdGNoIHRoZSBuYW1lICovCit9CisKKy8qCisgKiBUaGlzIGNvbnRyb2xzIHdoYXQgc3ltYm9scyB3ZSBleHBvcnQgZnJvbSB0aGUgRFNPLgorICovCitWRVJTSU9OCit7CisgIExJTlVYXzIuNiB7CisgICAgZ2xvYmFsOgorICAgIAlfX2tlcm5lbF92c3lzY2FsbDsKKyAgICAJX19rZXJuZWxfc2lncmV0dXJuOworICAgIAlfX2tlcm5lbF9ydF9zaWdyZXR1cm47CisKKyAgICBsb2NhbDogKjsKKyAgfTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL2NoZWNrc3VtLlMgYi9hcmNoL3NoL2xpYi9jaGVja3N1bS5TCmluZGV4IDdjNTBkZmUuLmNiZGQwZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL2NoZWNrc3VtLlMKKysrIGIvYXJjaC9zaC9saWIvY2hlY2tzdW0uUwpAQCAtMjAyLDggKzIwMiw5IEBACiAJY21wL3B6CXI2CQkhIEp1bXAgaWYgd2UgaGFkIGF0IGxlYXN0IHR3byBieXRlcy4KIAlidC9zCTFmCiAJIGNscnQKKwlhZGQJIzIscjYJCSEgcjYgd2FzIDwgMi4JRGVhbCB3aXRoIGl0LgogCWJyYQk0ZgotCSBhZGQJIzIscjYJCSEgcjYgd2FzIDwgMi4JRGVhbCB3aXRoIGl0LgorCSBtb3YJcjYscjIKIAogMzoJISBIYW5kbGUgZGlmZmVyZW50IHNyYyBhbmQgZGVzdCBhbGlnbm1lbnRzLgogCSEgVGhpcyBpcyBub3QgY29tbW9uLCBzbyBzaW1wbGUgYnl0ZSBieSBieXRlIGNvcHkgd2lsbCBkby4KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbGliL21lbWNweS1zaDQuUyBiL2FyY2gvc2gvbGliL21lbWNweS1zaDQuUwppbmRleCBkYjZiNzM2Li41NjBiYzE3IDEwMDY0NAotLS0gYS9hcmNoL3NoL2xpYi9tZW1jcHktc2g0LlMKKysrIGIvYXJjaC9zaC9saWIvbWVtY3B5LXNoNC5TCkBAIC03MjcsOCArNzI3LDggQEAKIAltb3YubAlAKDB4MDQscjUpLCByMTEJISAgMTggTFMgKGxhdGVuY3k9MikKIAl4dHJjdAlyOSwgcjgJCSEgIDQ4IEVYCiAKLQltb3YudwlAKDB4MDIscjUpLCByMTIJISAgMTggTFMgKGxhdGVuY3k9MikKLQl4dHJjdAlyMTAsIHI5CQkhICA0OCBFWAorCW1vdi5sICAgQCgweDAwLHI1KSwgcjEyICEgIDE4IExTIChsYXRlbmN5PTIpCisgICAgCXh0cmN0CXIxMCwgcjkJCSEgIDQ4IEVYCiAKIAltb3ZjYS5sCXIwLEByMQkJISAgNDAgTFMgKGxhdGVuY3k9My03KQogCWFkZAkjLTB4MWMsIHIxCSEgIDUwIEVYCmRpZmYgLS1naXQgYS9hcmNoL3NoL2xpYi9tZW1zZXQuUyBiL2FyY2gvc2gvbGliL21lbXNldC5TCmluZGV4IDk1NjcwMDkuLmFmOTFmZTIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbGliL21lbXNldC5TCisrKyBiL2FyY2gvc2gvbGliL21lbXNldC5TCkBAIC0yOSw2ICsyOSw3IEBACiAJYmYvcwkxYgogCSBtb3YuYglyNSxALXI0CiAyOgkJCQkhIG1ha2UgVlZWVgorCWV4dHUuYglyNSxyNQogCXN3YXAuYglyNSxyMAkJISAgIFYwCiAJb3IJcjAscjUJCSEgICBWVgogCXN3YXAudwlyNSxyMAkJISBWVjAwCmRpZmYgLS1naXQgYS9hcmNoL3NoL21hdGgtZW11L01ha2VmaWxlIGIvYXJjaC9zaC9tYXRoLWVtdS9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhiMzQyYwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbWF0aC1lbXUvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJOj0gbWF0aC5vCmRpZmYgLS1naXQgYS9hcmNoL3NoL21hdGgtZW11L21hdGguYyBiL2FyY2gvc2gvbWF0aC1lbXUvbWF0aC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2YjYwNDYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21hdGgtZW11L21hdGguYwpAQCAtMCwwICsxLDYyNCBAQAorLyoKKyAqIGFyY2gvc2gvbWF0aC1lbXUvbWF0aC5jCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRha2FzaGkgWU9TSElJIDx0YWthc2kteUBvcHMuZHRpLm5lLmpwPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNpbmNsdWRlICJzZnAtdXRpbC5oIgorI2luY2x1ZGUgPG1hdGgtZW11L3NvZnQtZnAuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9zaW5nbGUuaD4KKyNpbmNsdWRlIDxtYXRoLWVtdS9kb3VibGUuaD4KKworI2RlZmluZQlGUFVMCQkoZnJlZ3MtPmZwdWwpCisjZGVmaW5lIEZQU0NSCQkoZnJlZ3MtPmZwc2NyKQorI2RlZmluZSBGUFNDUl9STQkoRlBTQ1ImMykKKyNkZWZpbmUgRlBTQ1JfRE4JKChGUFNDUj4+MTgpJjEpCisjZGVmaW5lIEZQU0NSX1BSCSgoRlBTQ1I+PjE5KSYxKQorI2RlZmluZSBGUFNDUl9TWgkoKEZQU0NSPj4yMCkmMSkKKyNkZWZpbmUgRlBTQ1JfRlIJKChGUFNDUj4+MjEpJjEpCisjZGVmaW5lIEZQU0NSX01BU0sJMHgwMDNmZmZmZlVMCisKKyNkZWZpbmUgQkFOSyhuKQkobl4oRlBTQ1JfRlI/MTY6MCkpCisjZGVmaW5lIEZSCSgodW5zaWduZWQgbG9uZyopKGZyZWdzLT5mcF9yZWdzKSkKKyNkZWZpbmUgRlIwCShGUltCQU5LKDApXSkKKyNkZWZpbmUgRlJuCShGUltCQU5LKG4pXSkKKyNkZWZpbmUgRlJtCShGUltCQU5LKG0pXSkKKyNkZWZpbmUgRFIJKCh1bnNpZ25lZCBsb25nIGxvbmcqKShmcmVncy0+ZnBfcmVncykpCisjZGVmaW5lIERSbgkoRFJbQkFOSyhuKS8yXSkKKyNkZWZpbmUgRFJtCShEUltCQU5LKG0pLzJdKQorCisjZGVmaW5lIFhSRUcobikJKG5eMTYpCisjZGVmaW5lIFhGbgkoRlJbQkFOSyhYUkVHKG4pKV0pCisjZGVmaW5lIFhGbQkoRlJbQkFOSyhYUkVHKG0pKV0pCisjZGVmaW5lIFhEbgkoRFJbQkFOSyhYUkVHKG4pKS8yXSkKKyNkZWZpbmUgWERtCShEUltCQU5LKFhSRUcobSkpLzJdKQorCisjZGVmaW5lIFIwCShyZWdzLT5yZWdzWzBdKQorI2RlZmluZSBSbgkocmVncy0+cmVnc1tuXSkKKyNkZWZpbmUgUm0JKHJlZ3MtPnJlZ3NbbV0pCisKKyNkZWZpbmUgV1JJVEUoZCxhKQkoe2lmKHB1dF91c2VyKGQsICh0eXBlb2YgKGQpKilhKSkgcmV0dXJuIC1FRkFVTFQ7fSkKKyNkZWZpbmUgUkVBRChkLGEpCSh7aWYoZ2V0X3VzZXIoZCwgKHR5cGVvZiAoZCkqKWEpKSByZXR1cm4gLUVGQVVMVDt9KQorCisjZGVmaW5lIFBBQ0tfUyhyLGYpCUZQX1BBQ0tfU1AoJnIsZikKKyNkZWZpbmUgVU5QQUNLX1MoZixyKQlGUF9VTlBBQ0tfU1AoZiwmcikKKyNkZWZpbmUgUEFDS19EKHIsZikgXAorCXt1MzIgdFsyXTsgRlBfUEFDS19EUCh0LGYpOyAoKHUzMiopJnIpWzBdPXRbMV07ICgodTMyKikmcilbMV09dFswXTt9CisjZGVmaW5lIFVOUEFDS19EKGYscikgXAorCXt1MzIgdFsyXTsgdFswXT0oKHUzMiopJnIpWzFdOyB0WzFdPSgodTMyKikmcilbMF07IEZQX1VOUEFDS19EUChmLHQpO30KKworLy8gMiBhcmdzIGluc3RydWN0aW9ucy4KKyNkZWZpbmUgQk9USF9QUm1uKG9wLHgpIFwKKwlGUF9ERUNMX0VYOyBpZihGUFNDUl9QUikgb3AoRCx4LERSbSxEUm4pOyBlbHNlIG9wKFMseCxGUm0sRlJuKTsKKworI2RlZmluZSBDTVBfWChTWixSLE0sTikgZG97IFwKKwlGUF9ERUNMXyMjU1ooRm0pOyBGUF9ERUNMXyMjU1ooRm4pOyBcCisJVU5QQUNLXyMjU1ooRm0sIE0pOyBVTlBBQ0tfIyNTWihGbiwgTik7IFwKKwlGUF9DTVBfIyNTWihSLCBGbiwgRm0sIDIpOyB9d2hpbGUoMCkKKyNkZWZpbmUgRVFfWChTWixSLE0sTikgZG97IFwKKwlGUF9ERUNMXyMjU1ooRm0pOyBGUF9ERUNMXyMjU1ooRm4pOyBcCisJVU5QQUNLXyMjU1ooRm0sIE0pOyBVTlBBQ0tfIyNTWihGbiwgTik7IFwKKwlGUF9DTVBfRVFfIyNTWihSLCBGbiwgRm0pOyB9d2hpbGUoMCkKKyNkZWZpbmUgQ01QKE9QKSAoeyBpbnQgcjsgQk9USF9QUm1uKE9QIyNfWCxyKTsgcjsgfSkKKworc3RhdGljIGludAorZmNtcF9ndChzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLCBpbnQgbikKK3sKKwlpZiAoQ01QKENNUCkgPiAwKQorCQlyZWdzLT5zciB8PSAxOworCWVsc2UKKwkJcmVncy0+c3IgJj0gfjE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZmNtcF9lcShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLCBpbnQgbikKK3sKKwlpZiAoQ01QKENNUCAvKkVRKi8pID09IDApCisJCXJlZ3MtPnNyIHw9IDE7CisJZWxzZQorCQlyZWdzLT5zciAmPSB+MTsKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBBUklUSF9YKFNaLE9QLE0sTikgZG97IFwKKwlGUF9ERUNMXyMjU1ooRm0pOyBGUF9ERUNMXyMjU1ooRm4pOyBGUF9ERUNMXyMjU1ooRnIpOyBcCisJVU5QQUNLXyMjU1ooRm0sIE0pOyBVTlBBQ0tfIyNTWihGbiwgTik7IFwKKwlGUF8jI09QIyNfIyNTWihGciwgRm4sIEZtKTsgXAorCVBBQ0tfIyNTWihOLCBGcik7IH13aGlsZSgwKQorCitzdGF0aWMgaW50CitmYWRkKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG0sIGludCBuKQoreworCUJPVEhfUFJtbihBUklUSF9YLCBBREQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citmc3ViKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG0sIGludCBuKQoreworCUJPVEhfUFJtbihBUklUSF9YLCBTVUIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmbXVsKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG0sIGludCBuKQoreworCUJPVEhfUFJtbihBUklUSF9YLCBNVUwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmZGl2KHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG0sIGludCBuKQoreworCUJPVEhfUFJtbihBUklUSF9YLCBESVYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmbWFjKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IG0sIGludCBuKQoreworCUZQX0RFQ0xfRVg7CisJRlBfREVDTF9TKEZyKTsKKwlGUF9ERUNMX1MoRnQpOworCUZQX0RFQ0xfUyhGMCk7CisJRlBfREVDTF9TKEZtKTsKKwlGUF9ERUNMX1MoRm4pOworCVVOUEFDS19TKEYwLCBGUjApOworCVVOUEFDS19TKEZtLCBGUm0pOworCVVOUEFDS19TKEZuLCBGUm4pOworCUZQX01VTF9TKEZ0LCBGbSwgRjApOworCUZQX0FERF9TKEZyLCBGbiwgRnQpOworCVBBQ0tfUyhGUm4sIEZyKTsKKwlyZXR1cm4gMDsKK30KKworLy8gdG8gcHJvY2VzcyBmbW92J3MgZXh0ZW50aW9uIChvZGQgbiBmb3IgRFIgYWNjZXNzIFhEKS4KKyNkZWZpbmUgRk1PVl9FWFQoeCkgaWYoeCYxKSB4Kz0xNi0xCisKK3N0YXRpYyBpbnQKK2Ztb3ZfaWR4X3JlZyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG4pOworCQlSRUFEKEZSbiwgUm0gKyBSMCArIDQpOworCQluKys7CisJCVJFQUQoRlJuLCBSbSArIFIwKTsKKwl9IGVsc2UgeworCQlSRUFEKEZSbiwgUm0gKyBSMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfbWVtX3JlZyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG4pOworCQlSRUFEKEZSbiwgUm0gKyA0KTsKKwkJbisrOworCQlSRUFEKEZSbiwgUm0pOworCX0gZWxzZSB7CisJCVJFQUQoRlJuLCBSbSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfaW5jX3JlZyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG4pOworCQlSRUFEKEZSbiwgUm0gKyA0KTsKKwkJbisrOworCQlSRUFEKEZSbiwgUm0pOworCQlSbSArPSA4OworCX0gZWxzZSB7CisJCVJFQUQoRlJuLCBSbSk7CisJCVJtICs9IDQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfcmVnX2lkeChzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG0pOworCQlXUklURShGUm0sIFJuICsgUjAgKyA0KTsKKwkJbSsrOworCQlXUklURShGUm0sIFJuICsgUjApOworCX0gZWxzZSB7CisJCVdSSVRFKEZSbSwgUm4gKyBSMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfcmVnX21lbShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG0pOworCQlXUklURShGUm0sIFJuICsgNCk7CisJCW0rKzsKKwkJV1JJVEUoRlJtLCBSbik7CisJfSBlbHNlIHsKKwkJV1JJVEUoRlJtLCBSbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfcmVnX2RlYyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG0pOworCQlSbiAtPSA4OworCQlXUklURShGUm0sIFJuICsgNCk7CisJCW0rKzsKKwkJV1JJVEUoRlJtLCBSbik7CisJfSBlbHNlIHsKKwkJUm4gLT0gNDsKKwkJV1JJVEUoRlJtLCBSbik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2Ztb3ZfcmVnX3JlZyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLAorCSAgICAgaW50IG4pCit7CisJaWYgKEZQU0NSX1NaKSB7CisJCUZNT1ZfRVhUKG0pOworCQlGTU9WX0VYVChuKTsKKwkJRFJuID0gRFJtOworCX0gZWxzZSB7CisJCUZSbiA9IEZSbTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZm5vcF9tbihzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBtLCBpbnQgbikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLy8gMSBhcmcgaW5zdHJ1Y3Rpb25zLgorI2RlZmluZSBOT1RZRVRuKGkpIHN0YXRpYyBpbnQgaShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgaW50IG4pIFwKKwl7IHByaW50ayggI2kgIiBub3QgeWV0IGRvbmUuXG4iKTsgcmV0dXJuIDA7IH0KKworTk9UWUVUbihmdHJ2KQorTk9UWUVUbihmc3FydCkKK05PVFlFVG4oZmlwcikKK05PVFlFVG4oZnNjYSkKK05PVFlFVG4oZnNycmEpCisKKyNkZWZpbmUgRU1VX0ZMT0FUX1goU1osTikgZG8geyBcCisJRlBfREVDTF8jI1NaKEZuKTsgXAorCUZQX0ZST01fSU5UXyMjU1ooRm4sIEZQVUwsIDMyLCBpbnQpOyBcCisJUEFDS18jI1NaKE4sIEZuKTsgfXdoaWxlKDApCitzdGF0aWMgaW50IGZmbG9hdChzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgaW50IG4pCit7CisJRlBfREVDTF9FWDsKKworCWlmIChGUFNDUl9QUikKKwkJRU1VX0ZMT0FUX1goRCwgRFJuKTsKKwllbHNlCisJCUVNVV9GTE9BVF9YKFMsIEZSbik7CisKKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSBFTVVfRlRSQ19YKFNaLE4pIGRvIHsgXAorCUZQX0RFQ0xfIyNTWihGbik7IFwKKwlVTlBBQ0tfIyNTWihGbiwgTik7IFwKKwlGUF9UT19JTlRfIyNTWihGUFVMLCBGbiwgMzIsIDEpOyB9d2hpbGUoMCkKK3N0YXRpYyBpbnQgZnRyYyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgaW50IG4pCit7CisJRlBfREVDTF9FWDsKKworCWlmIChGUFNDUl9QUikKKwkJRU1VX0ZUUkNfWChELCBEUm4pOworCWVsc2UKKwkJRU1VX0ZUUkNfWChTLCBGUm4pOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmNudnNkKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgbikKK3sKKwlGUF9ERUNMX0VYOworCUZQX0RFQ0xfUyhGbik7CisJRlBfREVDTF9EKEZyKTsKKwlVTlBBQ0tfUyhGbiwgRlBVTCk7CisJRlBfQ09OVihELCBTLCAyLCAxLCBGciwgRm4pOworCVBBQ0tfRChEUm4sIEZyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmY252ZHMoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnJlZ3MsIGludCBuKQoreworCUZQX0RFQ0xfRVg7CisJRlBfREVDTF9EKEZuKTsKKwlGUF9ERUNMX1MoRnIpOworCVVOUEFDS19EKEZuLCBEUm4pOworCUZQX0NPTlYoUywgRCwgMSwgMiwgRnIsIEZuKTsKKwlQQUNLX1MoRlBVTCwgRnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZ4Y2hnKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgZmxhZykKK3sKKwlGUFNDUiBePSBmbGFnOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZzdHMoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnJlZ3MsIGludCBuKQoreworCUZSbiA9IEZQVUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxkcyhzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgaW50IG4pCit7CisJRlBVTCA9IEZSbjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbmVnKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgbikKK3sKKwlGUm4gXj0gKDEgPDwgKF9GUF9XX1RZUEVfU0laRSAtIDEpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmYWJzKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgbikKK3sKKwlGUm4gJj0gfigxIDw8IChfRlBfV19UWVBFX1NJWkUgLSAxKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZmxkMChzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgaW50IG4pCit7CisJRlJuID0gMDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmbGQxKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgbikKK3sKKwlGUm4gPSAoX0ZQX0VYUEJJQVNfUyA8PCAoX0ZQX0ZSQUNCSVRTX1MgLSAxKSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZm5vcF9uKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgbikKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworLy8vIEluc3RydWN0aW9uIGRlY29kZXJzLgorCitzdGF0aWMgaW50IGlkX2Z4ZmQoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqLCBpbnQpOworc3RhdGljIGludCBpZF9mbnhkKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKiwgc3RydWN0IHB0X3JlZ3MgKiwgaW50LCBpbnQpOworCitzdGF0aWMgaW50ICgqZm54ZFtdKShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICosIGludCkgPSB7CisJZnN0cywgZmxkcywgZmZsb2F0LCBmdHJjLCBmbmVnLCBmYWJzLCBmc3FydCwgZnNycmEsCisJZmxkMCwgZmxkMSwgZmNudnNkLCBmY252ZHMsIGZub3BfbiwgZm5vcF9uLCBmaXByLCBpZF9meGZkCit9OworCitzdGF0aWMgaW50ICgqZm5teFtdKShzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICosIHN0cnVjdCBwdF9yZWdzICosIGludCwgaW50KSA9IHsKKwlmYWRkLCBmc3ViLCBmbXVsLCBmZGl2LCBmY21wX2VxLCBmY21wX2d0LCBmbW92X2lkeF9yZWcsIGZtb3ZfcmVnX2lkeCwKKwlmbW92X21lbV9yZWcsIGZtb3ZfaW5jX3JlZywgZm1vdl9yZWdfbWVtLCBmbW92X3JlZ19kZWMsCisJZm1vdl9yZWdfcmVnLCBpZF9mbnhkLCBmbWFjLCBmbm9wX21ufTsKKworc3RhdGljIGludCBpZF9meGZkKHN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZyZWdzLCBpbnQgeCkKK3sKKwljb25zdCBpbnQgZmxhZ1tdID0geyBGUFNDUl9TWiwgRlBTQ1JfUFIsIEZQU0NSX0ZSLCAwIH07CisJc3dpdGNoICh4ICYgMykgeworCWNhc2UgMzoKKwkJZnhjaGcoZnJlZ3MsIGZsYWdbeCA+PiAyXSk7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZnRydihmcmVncywgeCAtIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmc2NhKGZyZWdzLCB4KTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2lkX2ZueGQoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgeCwgaW50IG4pCit7CisJcmV0dXJuIChmbnhkW3hdKShmcmVncywgbik7Cit9CisKK3N0YXRpYyBpbnQKK2lkX2ZubXgoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MTYgY29kZSkKK3sKKwlpbnQgbiA9IChjb2RlID4+IDgpICYgMHhmLCBtID0gKGNvZGUgPj4gNCkgJiAweGYsIHggPSBjb2RlICYgMHhmOworCXJldHVybiAoZm5teFt4XSkoZnJlZ3MsIHJlZ3MsIG0sIG4pOworfQorCitzdGF0aWMgaW50CitpZF9zeXMoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnJlZ3MsIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1MTYgY29kZSkKK3sKKwlpbnQgbiA9ICgoY29kZSA+PiA4KSAmIDB4Zik7CisJdW5zaWduZWQgbG9uZyAqcmVnID0gKGNvZGUgJiAweDAwMTApID8gJkZQVUwgOiAmRlBTQ1I7CisKKwlzd2l0Y2ggKGNvZGUgJiAweGYwZmYpIHsKKwljYXNlIDB4MDA1YToKKwljYXNlIDB4MDA2YToKKwkJUm4gPSAqcmVnOworCQlicmVhazsKKwljYXNlIDB4NDA1YToKKwljYXNlIDB4NDA2YToKKwkJKnJlZyA9IFJuOworCQlicmVhazsKKwljYXNlIDB4NDA1MjoKKwljYXNlIDB4NDA2MjoKKwkJUm4gLT0gNDsKKwkJV1JJVEUoKnJlZywgUm4pOworCQlicmVhazsKKwljYXNlIDB4NDA1NjoKKwljYXNlIDB4NDA2NjoKKwkJUkVBRCgqcmVnLCBSbik7CisJCVJuICs9IDQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZwdV9lbXVsYXRlKHUxNiBjb2RlLCBzdHJ1Y3Qgc2hfZnB1X3NvZnRfc3RydWN0ICpmcmVncywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaWYgKChjb2RlICYgMHhmMDAwKSA9PSAweGYwMDApCisJCXJldHVybiBpZF9mbm14KGZyZWdzLCByZWdzLCBjb2RlKTsKKwllbHNlCisJCXJldHVybiBpZF9zeXMoZnJlZ3MsIHJlZ3MsIGNvZGUpOworfQorCisvKioKKyAqCWRlbm9ybWFsX3RvX2RvdWJsZSAtIEdpdmVuIGRlbm9ybWFsaXplZCBmbG9hdCBudW1iZXIsCisgKgkgICAgICAgICAgICAgICAgICAgICBzdG9yZSBkb3VibGUgZmxvYXQKKyAqCisgKglAZnB1OiBQb2ludGVyIHRvIHNoX2ZwdV9oYXJkIHN0cnVjdHVyZQorICoJQG46IEluZGV4IHRvIEZQIHJlZ2lzdGVyCisgKi8KK3N0YXRpYyB2b2lkIGRlbm9ybWFsX3RvX2RvdWJsZShzdHJ1Y3Qgc2hfZnB1X2hhcmRfc3RydWN0ICpmcHUsIGludCBuKQoreworCXVuc2lnbmVkIGxvbmcgZHUsIGRsOworCXVuc2lnbmVkIGxvbmcgeCA9IGZwdS0+ZnB1bDsKKwlpbnQgZXhwID0gMTAyMyAtIDEyNjsKKworCWlmICh4ICE9IDAgJiYgKHggJiAweDdmODAwMDAwKSA9PSAwKSB7CisJCWR1ID0gKHggJiAweDgwMDAwMDAwKTsKKwkJd2hpbGUgKCh4ICYgMHgwMDgwMDAwMCkgPT0gMCkgeworCQkJeCA8PD0gMTsKKwkJCWV4cC0tOworCQl9CisJCXggJj0gMHgwMDdmZmZmZjsKKwkJZHUgfD0gKGV4cCA8PCAyMCkgfCAoeCA+PiAzKTsKKwkJZGwgPSB4IDw8IDI5OworCisJCWZwdS0+ZnBfcmVnc1tuXSA9IGR1OworCQlmcHUtPmZwX3JlZ3NbbisxXSA9IGRsOworCX0KK30KKworLyoqCisgKglpZWVlX2ZwZV9oYW5kbGVyIC0gSGFuZGxlIGRlbm9ybWFsaXplZCBudW1iZXIgZXhjZXB0aW9uCisgKgorICoJQHJlZ3M6IFBvaW50ZXIgdG8gcmVnaXN0ZXIgc3RydWN0dXJlCisgKgorICoJUmV0dXJucyAxIHdoZW4gaXQncyBoYW5kbGVkIChzaG91bGQgbm90IGNhdXNlIGV4Y2VwdGlvbikuCisgKi8KK3N0YXRpYyBpbnQgaWVlZV9mcGVfaGFuZGxlcihzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwl1bnNpZ25lZCBzaG9ydCBpbnNuID0gKih1bnNpZ25lZCBzaG9ydCAqKXJlZ3MtPnBjOworCXVuc2lnbmVkIHNob3J0IGZpbnNuOworCXVuc2lnbmVkIGxvbmcgbmV4dHBjOworCWludCBuaWJbNF0gPSB7CisJCShpbnNuID4+IDEyKSAmIDB4ZiwKKwkJKGluc24gPj4gOCkgJiAweGYsCisJCShpbnNuID4+IDQpICYgMHhmLAorCQlpbnNuICYgMHhmfTsKKworCWlmIChuaWJbMF0gPT0gMHhiIHx8CisJICAgIChuaWJbMF0gPT0gMHg0ICYmIG5pYlsyXSA9PSAweDAgJiYgbmliWzNdID09IDB4YikpIC8qIGJzciAmIGpzciAqLworCQlyZWdzLT5wciA9IHJlZ3MtPnBjICsgNDsKKworCWlmIChuaWJbMF0gPT0gMHhhIHx8IG5pYlswXSA9PSAweGIpIHsgLyogYnJhICYgYnNyICovCisJCW5leHRwYyA9IHJlZ3MtPnBjICsgNCArICgoc2hvcnQpICgoaW5zbiAmIDB4ZmZmKSA8PCA0KSA+PiAzKTsKKwkJZmluc24gPSAqKHVuc2lnbmVkIHNob3J0ICopIChyZWdzLT5wYyArIDIpOworCX0gZWxzZSBpZiAobmliWzBdID09IDB4OCAmJiBuaWJbMV0gPT0gMHhkKSB7IC8qIGJ0L3MgKi8KKwkJaWYgKHJlZ3MtPnNyICYgMSkKKwkJCW5leHRwYyA9IHJlZ3MtPnBjICsgNCArICgoY2hhcikgKGluc24gJiAweGZmKSA8PCAxKTsKKwkJZWxzZQorCQkJbmV4dHBjID0gcmVncy0+cGMgKyA0OworCQlmaW5zbiA9ICoodW5zaWduZWQgc2hvcnQgKikgKHJlZ3MtPnBjICsgMik7CisJfSBlbHNlIGlmIChuaWJbMF0gPT0gMHg4ICYmIG5pYlsxXSA9PSAweGYpIHsgLyogYmYvcyAqLworCQlpZiAocmVncy0+c3IgJiAxKQorCQkJbmV4dHBjID0gcmVncy0+cGMgKyA0OworCQllbHNlCisJCQluZXh0cGMgPSByZWdzLT5wYyArIDQgKyAoKGNoYXIpIChpbnNuICYgMHhmZikgPDwgMSk7CisJCWZpbnNuID0gKih1bnNpZ25lZCBzaG9ydCAqKSAocmVncy0+cGMgKyAyKTsKKwl9IGVsc2UgaWYgKG5pYlswXSA9PSAweDQgJiYgbmliWzNdID09IDB4YiAmJgorCQkgKG5pYlsyXSA9PSAweDAgfHwgbmliWzJdID09IDB4MikpIHsgLyogam1wICYganNyICovCisJCW5leHRwYyA9IHJlZ3MtPnJlZ3NbbmliWzFdXTsKKwkJZmluc24gPSAqKHVuc2lnbmVkIHNob3J0ICopIChyZWdzLT5wYyArIDIpOworCX0gZWxzZSBpZiAobmliWzBdID09IDB4MCAmJiBuaWJbM10gPT0gMHgzICYmCisJCSAobmliWzJdID09IDB4MCB8fCBuaWJbMl0gPT0gMHgyKSkgeyAvKiBicmFmICYgYnNyZiAqLworCQluZXh0cGMgPSByZWdzLT5wYyArIDQgKyByZWdzLT5yZWdzW25pYlsxXV07CisJCWZpbnNuID0gKih1bnNpZ25lZCBzaG9ydCAqKSAocmVncy0+cGMgKyAyKTsKKwl9IGVsc2UgaWYgKGluc24gPT0gMHgwMDBiKSB7IC8qIHJ0cyAqLworCQluZXh0cGMgPSByZWdzLT5wcjsKKwkJZmluc24gPSAqKHVuc2lnbmVkIHNob3J0ICopIChyZWdzLT5wYyArIDIpOworCX0gZWxzZSB7CisJCW5leHRwYyA9IHJlZ3MtPnBjICsgMjsKKwkJZmluc24gPSBpbnNuOworCX0KKworCWlmICgoZmluc24gJiAweGYxZmYpID09IDB4ZjBhZCkgeyAvKiBmY252c2QgKi8KKwkJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCisJCWlmICgodHNrLT50aHJlYWQuZnB1LmhhcmQuZnBzY3IgJiAoMSA8PCAxNykpKSB7CisJCQkvKiBGUFUgZXJyb3IgKi8KKwkJCWRlbm9ybWFsX3RvX2RvdWJsZSAoJnRzay0+dGhyZWFkLmZwdS5oYXJkLAorCQkJCQkgICAgKGZpbnNuID4+IDgpICYgMHhmKTsKKwkJCXRzay0+dGhyZWFkLmZwdS5oYXJkLmZwc2NyICY9CisJCQkJfihGUFNDUl9DQVVTRV9NQVNLIHwgRlBTQ1JfRkxBR19NQVNLKTsKKwkJCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSk7CisJCX0gZWxzZSB7CisJCQl0c2stPnRocmVhZC50cmFwX25vID0gMTE7CisJCQl0c2stPnRocmVhZC5lcnJvcl9jb2RlID0gMDsKKwkJCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7CisJCX0KKworCQlyZWdzLT5wYyA9IG5leHRwYzsKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2FzbWxpbmthZ2Ugdm9pZCBkb19mcHVfZXJyb3IodW5zaWduZWQgbG9uZyByNCwgdW5zaWduZWQgbG9uZyByNSwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyByNiwgdW5zaWduZWQgbG9uZyByNywKKwkJCSAgICAgc3RydWN0IHB0X3JlZ3MgcmVncykKK3sKKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CisKKwlpZiAoaWVlZV9mcGVfaGFuZGxlciAoJnJlZ3MpKQorCQlyZXR1cm47CisKKwlyZWdzLnBjICs9IDI7CisJdHNrLT50aHJlYWQudHJhcF9ubyA9IDExOworCXRzay0+dGhyZWFkLmVycm9yX2NvZGUgPSAwOworCWZvcmNlX3NpZyhTSUdGUEUsIHRzayk7Cit9CisKKy8qKgorICogZnB1X2luaXQgLSBJbml0aWFsaXplIEZQVSByZWdpc3RlcnMKKyAqIEBmcHU6IFBvaW50ZXIgdG8gc29mdHdhcmUgZW11bGF0ZWQgRlBVIHJlZ2lzdGVycy4KKyAqLworc3RhdGljIHZvaWQgZnB1X2luaXQoc3RydWN0IHNoX2ZwdV9zb2Z0X3N0cnVjdCAqZnB1KQoreworCWludCBpOworCisJZnB1LT5mcHNjciA9IEZQU0NSX0lOSVQ7CisJZnB1LT5mcHVsID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7CisJCWZwdS0+ZnBfcmVnc1tpXSA9IDA7CisJCWZwdS0+eGZwX3JlZ3NbaV09IDA7CisJfQorfQorCisvKioKKyAqIGRvX2ZwdV9pbnN0IC0gSGFuZGxlIHJlc2VydmVkIGluc3RydWN0aW9ucyBmb3IgRlBVIGVtdWxhdGlvbgorICogQGluc3Q6IGluc3RydWN0aW9uIGNvZGUuCisgKiBAcmVnczogcmVnaXN0ZXJzIG9uIHN0YWNrLgorICovCitpbnQgZG9fZnB1X2luc3QodW5zaWduZWQgc2hvcnQgaW5zdCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OworCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3QgKmZwdSA9ICYodHNrLT50aHJlYWQuZnB1LnNvZnQpOworCisJaWYgKCF0ZXN0X3Rza190aHJlYWRfZmxhZyh0c2ssIFRJRl9VU0VERlBVKSkgeworCQkvKiBpbml0aWFsaXplIG9uY2UuICovCisJCWZwdV9pbml0KGZwdSk7CisJCXNldF90c2tfdGhyZWFkX2ZsYWcodHNrLCBUSUZfVVNFREZQVSk7CisJfQorCisJcmV0dXJuIGZwdV9lbXVsYXRlKGluc3QsIGZwdSwgcmVncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21hdGgtZW11L3NmcC11dGlsLmggYi9hcmNoL3NoL21hdGgtZW11L3NmcC11dGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFlMWJkMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbWF0aC1lbXUvc2ZwLXV0aWwuaApAQCAtMCwwICsxLDcyIEBACisvKgorICogVGhlc2UgYXJlIGNvcGllZCBmcm9tIGdsaWJjL3N0ZGxpYi9sb25nbG9uZy5oCisgKi8KKworI2RlZmluZSBhZGRfc3NhYWFhKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVV3R5cGUgX194OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3ggPSAoYWwpICsgKGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2gpID0gKGFoKSArIChiaCkgKyAoX194IDwgKGFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2wpID0gX194OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzdWJfZGRtbXNzKHNoLCBzbCwgYWgsIGFsLCBiaCwgYmwpIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBVV3R5cGUgX194OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfX3ggPSAoYWwpIC0gKGJsKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2gpID0gKGFoKSAtIChiaCkgLSAoX194ID4gKGFsKSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAoc2wpID0gX194OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSB1bXVsX3BwbW0odzEsIHcwLCB1LCB2KSBcCisgIF9fYXNtX18gKCJkbXVsdS5sICUyLCUzXG5cdHN0cyAgICBtYWNsLCUxXG5cdHN0cyAgbWFjaCwlMCIJXAorCTogIj1yIiAoKHUzMikodzEpKSwgIj1yIiAoKHUzMikodzApKQlcCisJOiAgInIiICgodTMyKSh1KSksICAgInIiICgodTMyKSh2KSkJXAorCTogIm1hY2wiLCAibWFjaCIpCisKKyNkZWZpbmUgX19sbF9CICgoVVd0eXBlKSAxIDw8IChXX1RZUEVfU0laRSAvIDIpKQorI2RlZmluZSBfX2xsX2xvd3BhcnQodCkgKChVV3R5cGUpICh0KSAmIChfX2xsX0IgLSAxKSkKKyNkZWZpbmUgX19sbF9oaWdocGFydCh0KSAoKFVXdHlwZSkgKHQpID4+IChXX1RZUEVfU0laRSAvIDIpKQorCisjZGVmaW5lIHVkaXZfcXJubmQocSwgciwgbjEsIG4wLCBkKSBcCisgIGRvIHsJCQkJCQkJCQlcCisgICAgVVd0eXBlIF9fZDEsIF9fZDAsIF9fcTEsIF9fcTA7CQkJCQlcCisgICAgVVd0eXBlIF9fcjEsIF9fcjAsIF9fbTsJCQkJCQlcCisgICAgX19kMSA9IF9fbGxfaGlnaHBhcnQgKGQpOwkJCQkJCVwKKyAgICBfX2QwID0gX19sbF9sb3dwYXJ0IChkKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgX19yMSA9IChuMSkgJSBfX2QxOwkJCQkJCQlcCisgICAgX19xMSA9IChuMSkgLyBfX2QxOwkJCQkJCQlcCisgICAgX19tID0gKFVXdHlwZSkgX19xMSAqIF9fZDA7CQkJCQkJXAorICAgIF9fcjEgPSBfX3IxICogX19sbF9CIHwgX19sbF9oaWdocGFydCAobjApOwkJCQlcCisgICAgaWYgKF9fcjEgPCBfX20pCQkJCQkJCVwKKyAgICAgIHsJCQkJCQkJCQlcCisJX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCQlcCisJaWYgKF9fcjEgPj0gKGQpKSAvKiBpLmUuIHdlIGRpZG4ndCBnZXQgY2Fycnkgd2hlbiBhZGRpbmcgdG8gX19yMSAqL1wKKwkgIGlmIChfX3IxIDwgX19tKQkJCQkJCVwKKwkgICAgX19xMS0tLCBfX3IxICs9IChkKTsJCQkJCVwKKyAgICAgIH0JCQkJCQkJCQlcCisgICAgX19yMSAtPSBfX207CQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBfX3IwID0gX19yMSAlIF9fZDE7CQkJCQkJCVwKKyAgICBfX3EwID0gX19yMSAvIF9fZDE7CQkJCQkJCVwKKyAgICBfX20gPSAoVVd0eXBlKSBfX3EwICogX19kMDsJCQkJCQlcCisgICAgX19yMCA9IF9fcjAgKiBfX2xsX0IgfCBfX2xsX2xvd3BhcnQgKG4wKTsJCQkJXAorICAgIGlmIChfX3IwIDwgX19tKQkJCQkJCQlcCisgICAgICB7CQkJCQkJCQkJXAorCV9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQkJXAorCWlmIChfX3IwID49IChkKSkJCQkJCQlcCisJICBpZiAoX19yMCA8IF9fbSkJCQkJCQlcCisJICAgIF9fcTAtLSwgX19yMCArPSAoZCk7CQkJCQlcCisgICAgICB9CQkJCQkJCQkJXAorICAgIF9fcjAgLT0gX19tOwkJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgKHEpID0gKFVXdHlwZSkgX19xMSAqIF9fbGxfQiB8IF9fcTA7CQkJCVwKKyAgICAocikgPSBfX3IwOwkJCQkJCQkJXAorICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGFib3J0KCkJcmV0dXJuIDAKKworI2RlZmluZSBfX0JZVEVfT1JERVIgX19MSVRUTEVfRU5ESUFOCisKKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9LY29uZmlnIGIvYXJjaC9zaC9tbS9LY29uZmlnCmluZGV4IGZiNTg2YjEuLjlkZDYwNjQgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vS2NvbmZpZworKysgYi9hcmNoL3NoL21tL0tjb25maWcKQEAgLTIwLDcgKzIwLDEwIEBACiBjb25maWcgQ1BVX1NINEEKIAlib29sCiAJc2VsZWN0IENQVV9TSDQKLQlzZWxlY3QgQ1BVX0hBU19JTlRDMl9JUlEKKworY29uZmlnIENQVV9TSDRBTF9EU1AKKwlib29sCisJc2VsZWN0IENQVV9TSDRBCiAKIGNvbmZpZyBDUFVfU1VCVFlQRV9TVDQwCiAJYm9vbApAQCAtNDgsNiArNTEsMTIgQEAKIAlzZWxlY3QgQ1BVX1NIMwogCXNlbGVjdCBDUFVfSEFTX1BJTlRfSVJRCiAKK2NvbmZpZyBDUFVfU1VCVFlQRV9TSDc3MDYKKwlib29sICJTdXBwb3J0IFNINzcwNiBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDMKKwloZWxwCisJICBTZWxlY3QgU0g3NzA2IGlmIHlvdSBoYXZlIGEgMTMzIE1oeiBTSC0zIEhENjQxNzcwNiBDUFUuCisKIGNvbmZpZyBDUFVfU1VCVFlQRV9TSDc3MDcKIAlib29sICJTdXBwb3J0IFNINzcwNyBwcm9jZXNzb3IiCiAJc2VsZWN0IENQVV9TSDMKQEAgLTY5LDYgKzc4LDEyIEBACiAJaGVscAogCSAgU2VsZWN0IFNINzcwOSBpZiB5b3UgaGF2ZSBhICA4MCBNaHogU0gtMyBIRDY0MTc3MDkgQ1BVLgogCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzEwCisJYm9vbCAiU3VwcG9ydCBTSDc3MTAgcHJvY2Vzc29yIgorCXNlbGVjdCBDUFVfU0gzCisJaGVscAorCSAgU2VsZWN0IFNINzcxMCBpZiB5b3UgaGF2ZSBhIFNIMy1EU1AgU0g3NzEwIENQVS4KKwogY29tbWVudCAiU0gtNCBQcm9jZXNzb3IgU3VwcG9ydCIKIAogY29uZmlnIENQVV9TVUJUWVBFX1NINzc1MApAQCAtMTMzLDEwICsxNDgsNiBAQAogCiBjb21tZW50ICJTSC00QSBQcm9jZXNzb3IgU3VwcG9ydCIKIAotY29uZmlnIENQVV9TVUJUWVBFX1NINzMxODAKLQlib29sICJTdXBwb3J0IFNINzMxODAgcHJvY2Vzc29yIgotCXNlbGVjdCBDUFVfU0g0QQotCiBjb25maWcgQ1BVX1NVQlRZUEVfU0g3NzcwCiAJYm9vbCAiU3VwcG9ydCBTSDc3NzAgcHJvY2Vzc29yIgogCXNlbGVjdCBDUFVfU0g0QQpAQCAtMTQ0LDYgKzE1NSwxNyBAQAogY29uZmlnIENQVV9TVUJUWVBFX1NINzc4MAogCWJvb2wgIlN1cHBvcnQgU0g3NzgwIHByb2Nlc3NvciIKIAlzZWxlY3QgQ1BVX1NINEEKKwlzZWxlY3QgQ1BVX0hBU19JTlRDMl9JUlEKKworY29tbWVudCAiU0g0QUwtRFNQIFByb2Nlc3NvciBTdXBwb3J0IgorCitjb25maWcgQ1BVX1NVQlRZUEVfU0g3MzE4MAorCWJvb2wgIlN1cHBvcnQgU0g3MzE4MCBwcm9jZXNzb3IiCisJc2VsZWN0IENQVV9TSDRBTF9EU1AKKworY29uZmlnIENQVV9TVUJUWVBFX1NINzM0MworCWJvb2wgIlN1cHBvcnQgU0g3MzQzIHByb2Nlc3NvciIKKwlzZWxlY3QgQ1BVX1NINEFMX0RTUAogCiBlbmRtZW51CiAKQEAgLTE2MSwxNSArMTgzLDU5IEBACiAJICB0dXJuaW5nIHRoaXMgb2ZmIHdpbGwgYm9vdCB0aGUga2VybmVsIG9uIHRoZXNlIG1hY2hpbmVzIHdpdGggdGhlCiAJICBNTVUgaW1wbGljaXRseSBzd2l0Y2hlZCBvZmYuCiAKK2NvbmZpZyBQQUdFX09GRlNFVAorCWhleAorCWRlZmF1bHQgIjB4ODAwMDAwMDAiIGlmIE1NVQorCWRlZmF1bHQgIjB4MDAwMDAwMDAiCisKK2NvbmZpZyBNRU1PUllfU1RBUlQKKwloZXggIlBoeXNpY2FsIG1lbW9yeSBzdGFydCBhZGRyZXNzIgorCWRlZmF1bHQgIjB4MDgwMDAwMDAiCisJLS0taGVscC0tLQorCSAgQ29tcHV0ZXJzIGJ1aWx0IHdpdGggSGl0YWNoaSBTdXBlckggcHJvY2Vzc29ycyBhbHdheXMKKwkgIG1hcCB0aGUgUk9NIHN0YXJ0aW5nIGF0IGFkZHJlc3MgemVyby4gIEJ1dCB0aGUgcHJvY2Vzc29yCisJICBkb2VzIG5vdCBzcGVjaWZ5IHRoZSByYW5nZSB0aGF0IFJBTSB0YWtlcy4KKworCSAgVGhlIHBoeXNpY2FsIG1lbW9yeSAoUkFNKSBzdGFydCBhZGRyZXNzIHdpbGwgYmUgYXV0b21hdGljYWxseQorCSAgc2V0IHRvIDA4MDAwMDAwLiBPdGhlciBwbGF0Zm9ybXMsIHN1Y2ggYXMgdGhlIFNvbHV0aW9uIEVuZ2luZQorCSAgYm9hcmRzIHR5cGljYWxseSBtYXAgUkFNIGF0IDBDMDAwMDAwLgorCisJICBUd2VhayB0aGlzIG9ubHkgd2hlbiBwb3J0aW5nIHRvIGEgbmV3IG1hY2hpbmUgd2hpY2ggZG9lcyBub3QKKwkgIGFscmVhZHkgaGF2ZSBhIGRlZmNvbmZpZy4gQ2hhbmdpbmcgaXQgZnJvbSB0aGUga25vd24gY29ycmVjdAorCSAgdmFsdWUgb24gYW55IG9mIHRoZSBrbm93biBzeXN0ZW1zIHdpbGwgb25seSBsZWFkIHRvIGRpc2FzdGVyLgorCitjb25maWcgTUVNT1JZX1NJWkUKKwloZXggIlBoeXNpY2FsIG1lbW9yeSBzaXplIgorCWRlZmF1bHQgIjB4MDA0MDAwMDAiCisJaGVscAorCSAgVGhpcyBzZXRzIHRoZSBkZWZhdWx0IG1lbW9yeSBzaXplIGFzc3VtZWQgYnkgeW91ciBTSCBrZXJuZWwuIEl0IGNhbgorCSAgYmUgb3ZlcnJpZGRlbiBhcyBub3JtYWwgYnkgdGhlICdtZW09JyBhcmd1bWVudCBvbiB0aGUga2VybmVsIGNvbW1hbmQKKwkgIGxpbmUuIElmIHVuc3VyZSwgY29uc3VsdCB5b3VyIGJvYXJkIHNwZWNpZmljYXRpb25zIG9yIGp1c3QgbGVhdmUgaXQKKwkgIGFzIDB4MDA0MDAwMDAgd2hpY2ggd2FzIHRoZSBkZWZhdWx0IHZhbHVlIGJlZm9yZSB0aGlzIGJlY2FtZQorCSAgY29uZmlndXJhYmxlLgorCiBjb25maWcgMzJCSVQKIAlib29sICJTdXBwb3J0IDMyLWJpdCBwaHlzaWNhbCBhZGRyZXNzaW5nIHRocm91Z2ggUE1CIgotCWRlcGVuZHMgb24gQ1BVX1NINEEKKwlkZXBlbmRzIG9uIENQVV9TSDRBICYmIE1NVQogCWRlZmF1bHQgeQogCWhlbHAKIAkgIElmIHlvdSBzYXkgWSBoZXJlLCBwaHlzaWNhbCBhZGRyZXNzaW5nIHdpbGwgYmUgZXh0ZW5kZWQgdG8KIAkgIDMyLWJpdHMgdGhyb3VnaCB0aGUgU0gtNEEgUE1CLiBJZiB0aGlzIGlzIG5vdCBzZXQsIGxlZ2FjeQogCSAgMjktYml0IHBoeXNpY2FsIGFkZHJlc3Npbmcgd2lsbCBiZSB1c2VkLgogCitjb25maWcgVlNZU0NBTEwKKwlib29sICJTdXBwb3J0IHZzeXNjYWxsIHBhZ2UiCisJZGVwZW5kcyBvbiBNTVUKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGlzIHdpbGwgZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBrZXJuZWwgbWFwcGluZyBhIHZEU08gcGFnZQorCSAgaW4gcHJvY2VzcyBzcGFjZSwgYW5kIHN1YnNlcXVlbnRseSBoYW5kaW5nIGRvd24gdGhlIGVudHJ5IHBvaW50CisJICB0byB0aGUgbGliYyB0aHJvdWdoIHRoZSBFTEYgYXV4aWxpYXJ5IHZlY3Rvci4KKworCSAgRnJvbSB0aGUga2VybmVsIHNpZGUgdGhpcyBpcyB1c2VkIGZvciB0aGUgc2lnbmFsIHRyYW1wb2xpbmUuCisJICBGb3Igc3lzdGVtcyB3aXRoIGFuIE1NVSB0aGF0IGNhbiBhZmZvcmQgdG8gZ2l2ZSB1cCBhIHBhZ2UsCisJICAodGhlIGRlZmF1bHQgdmFsdWUpIHNheSBZLgorCiBjaG9pY2UKIAlwcm9tcHQgIkh1Z2VUTEIgcGFnZSBzaXplIgogCWRlcGVuZHMgb24gSFVHRVRMQl9QQUdFICYmIENQVV9TSDQgJiYgTU1VCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL01ha2VmaWxlIGIvYXJjaC9zaC9tbS9NYWtlZmlsZQppbmRleCA5NDg5YTE0Li4zZmZkN2Y2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL01ha2VmaWxlCisrKyBiL2FyY2gvc2gvbW0vTWFrZWZpbGUKQEAgLTYsMjAgKzYsMjYgQEAKIAogb2JqLSQoQ09ORklHX0NQVV9TSDIpCSs9IGNhY2hlLXNoMi5vCiBvYmotJChDT05GSUdfQ1BVX1NIMykJKz0gY2FjaGUtc2gzLm8KLW9iai0kKENPTkZJR19DUFVfU0g0KQkrPSBjYWNoZS1zaDQubyBwZy1zaDQubworb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IGNhY2hlLXNoNC5vCiAKIG9iai0kKENPTkZJR19ETUFfUEFHRV9PUFMpCSs9IHBnLWRtYS5vCiBvYmotJChDT05GSUdfSFVHRVRMQl9QQUdFKQkrPSBodWdldGxicGFnZS5vCiAKIG1tdS15CQkJOj0gZmF1bHQtbm9tbXUubyB0bGItbm9tbXUubyBwZy1ub21tdS5vCi1tbXUtJChDT05GSUdfTU1VKQk6PSBmYXVsdC5vIGNsZWFyX3BhZ2UubyBjb3B5X3BhZ2UubworbW11LSQoQ09ORklHX01NVSkJOj0gZmF1bHQubyBjbGVhcl9wYWdlLm8gY29weV9wYWdlLm8gdGxiLWZsdXNoLm8JXAorCQkJICAgaW9yZW1hcC5vCiAKIG9iai15CQkJKz0gJChtbXUteSkKIAoraWZkZWYgQ09ORklHX0RFQlVHX0ZTCitvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IGNhY2hlLWRlYnVnZnMubworZW5kaWYKKwogaWZkZWYgQ09ORklHX01NVQotb2JqLSQoQ09ORklHX0NQVV9TSDMpCSs9IHRsYi1zaDMubwotb2JqLSQoQ09ORklHX0NQVV9TSDQpCSs9IHRsYi1zaDQubyBpb3JlbWFwLm8KK29iai0kKENPTkZJR19DUFVfU0gzKQkJKz0gdGxiLXNoMy5vCitvYmotJChDT05GSUdfQ1BVX1NINCkJCSs9IHRsYi1zaDQubyBwZy1zaDQubwogb2JqLSQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKSArPSBwZy1zaDc3MDUubwogZW5kaWYKIAotb2JqLSQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKSArPSBjYWNoZS1zaDc3MDUubworb2JqLSQoQ09ORklHX1NINzcwNV9DQUNIRV8zMktCKQkrPSBjYWNoZS1zaDc3MDUubworb2JqLSQoQ09ORklHXzMyQklUKQkJKz0gcG1iLm8KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jIGIvYXJjaC9zaC9tbS9jYWNoZS1kZWJ1Z2ZzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIyZDkxNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtZGVidWdmcy5jCkBAIC0wLDAgKzEsMTQ3IEBACisvKgorICogZGVidWdmcyBvcHMgZm9yIHRoZSBMMSBjYWNoZQorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworZW51bSBjYWNoZV90eXBlIHsKKwlDQUNIRV9UWVBFX0lDQUNIRSwKKwlDQUNIRV9UWVBFX0RDQUNIRSwKKwlDQUNIRV9UWVBFX1VOSUZJRUQsCit9OworCitzdGF0aWMgaW50IGNhY2hlX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcikKK3sKKwl1bnNpZ25lZCBpbnQgY2FjaGVfdHlwZSA9ICh1bnNpZ25lZCBpbnQpZmlsZS0+cHJpdmF0ZTsKKwlzdHJ1Y3QgY2FjaGVfaW5mbyAqY2FjaGU7CisJdW5zaWduZWQgaW50IHdheXNpemUsIHdheSwgY2FjaGVfc2l6ZTsKKwl1bnNpZ25lZCBsb25nIGNjciwgYmFzZTsKKwlzdGF0aWMgdW5zaWduZWQgbG9uZyBhZGRyc3RhcnQgPSAwOworCisJLyoKKwkgKiBHbyB1bmNhY2hlZCBpbW1lZGlhdGVseSBzbyB3ZSBkb24ndCBza2V3IHRoZSByZXN1bHRzIGFueQorCSAqIG1vcmUgdGhhbiB3ZSBhbHJlYWR5IGFyZS4uCisJICovCisJanVtcF90b19QMigpOworCisJY2NyID0gY3RybF9pbmwoQ0NSKTsKKwlpZiAoKGNjciAmIENDUl9DQUNIRV9FTkFCTEUpID09IDApIHsKKwkJYmFja190b19QMSgpOworCisJCXNlcV9wcmludGYoZmlsZSwgImRpc2FibGVkXG4iKTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGNhY2hlX3R5cGUgPT0gQ0FDSEVfVFlQRV9EQ0FDSEUpIHsKKwkJYmFzZSA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CisJCWNhY2hlID0gJmNwdV9kYXRhLT5kY2FjaGU7CisJfSBlbHNlIHsKKwkJYmFzZSA9IENBQ0hFX0lDX0FERFJFU1NfQVJSQVk7CisJCWNhY2hlID0gJmNwdV9kYXRhLT5pY2FjaGU7CisJfQorCisJLyoKKwkgKiBEdWUgdG8gdGhlIGFtb3VudCBvZiBkYXRhIHdyaXR0ZW4gb3V0IChkZXBlbmRpbmcgb24gdGhlIGNhY2hlIHNpemUpLAorCSAqIHdlIG1heSBiZSBpdGVyYXRlZCBvdmVyIG11bHRpcGxlIHRpbWVzLiBJbiB0aGlzIGNhc2UsIGtlZXAgdHJhY2sgb2YKKwkgKiB0aGUgZW50cnkgcG9zaXRpb24gaW4gYWRkcnN0YXJ0LCBhbmQgcmV3aW5kIGl0IHdoZW4gd2UndmUgaGl0IHRoZQorCSAqIGVuZCBvZiB0aGUgY2FjaGUuCisJICoKKwkgKiBMaWtld2lzZSwgdGhlIHNhbWUgY29kZSBpcyB1c2VkIGZvciBtdWx0aXBsZSBjYWNoZXMsIHNvIGNhcmUgbXVzdAorCSAqIGJlIHRha2VuIGZvciBib3VuY2luZyBhZGRyc3RhcnQgYmFjayBhbmQgZm9ydGggc28gdGhlIGFwcHJvcHJpYXRlCisJICogY2FjaGUgaXMgaGl0LgorCSAqLworCWNhY2hlX3NpemUgPSBjYWNoZS0+d2F5cyAqIGNhY2hlLT5zZXRzICogY2FjaGUtPmxpbmVzejsKKwlpZiAoKChhZGRyc3RhcnQgJiAweGZmMDAwMDAwKSAhPSBiYXNlKSB8fAorCSAgICAgKGFkZHJzdGFydCAmIDB4MDBmZmZmZmYpID4gY2FjaGVfc2l6ZSkKKwkJYWRkcnN0YXJ0ID0gYmFzZTsKKworCXdheXNpemUgPSBjYWNoZS0+c2V0czsKKworCS8qCisJICogSWYgdGhlIE9DIGlzIGFscmVhZHkgaW4gUkFNIG1vZGUsIHdlIG9ubHkgaGF2ZQorCSAqIGhhbGYgb2YgdGhlIGVudHJpZXMgdG8gY29uc2lkZXIuLgorCSAqLworCWlmICgoY2NyICYgQ0NSX0NBQ0hFX09SQSkgJiYgY2FjaGVfdHlwZSA9PSBDQUNIRV9UWVBFX0RDQUNIRSkKKwkJd2F5c2l6ZSA+Pj0gMTsKKworCXdheXNpemUgPDw9IGNhY2hlLT5lbnRyeV9zaGlmdDsKKworCWZvciAod2F5ID0gMDsgd2F5IDwgY2FjaGUtPndheXM7IHdheSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJdW5zaWduZWQgaW50IGxpbmU7CisKKwkJc2VxX3ByaW50ZihmaWxlLCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOworCQlzZXFfcHJpbnRmKGZpbGUsICJXYXkgJWRcbiIsIHdheSk7CisJCXNlcV9wcmludGYoZmlsZSwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKKworCQlmb3IgKGFkZHIgPSBhZGRyc3RhcnQsIGxpbmUgPSAwOworCQkgICAgIGFkZHIgPCBhZGRyc3RhcnQgKyB3YXlzaXplOworCQkgICAgIGFkZHIgKz0gY2FjaGUtPmxpbmVzeiwgbGluZSsrKSB7CisJCQl1bnNpZ25lZCBsb25nIGRhdGEgPSBjdHJsX2lubChhZGRyKTsKKworCQkJLyogQ2hlY2sgdGhlIFYgYml0LCBpZ25vcmUgaW52YWxpZCBjYWNoZWxpbmVzICovCisJCQlpZiAoKGRhdGEgJiAxKSA9PSAwKQorCQkJCWNvbnRpbnVlOworCisJCQkvKiBVOiBEaXJ0eSwgY2FjaGUgdGFnIGlzIDEwIGJpdHMgdXAgKi8KKwkJCXNlcV9wcmludGYoZmlsZSwgIiUzZDogJWMgMHglbHhcbiIsCisJCQkJICAgbGluZSwgZGF0YSAmIDIgPyAnVScgOiAnICcsCisJCQkJICAgZGF0YSAmIDB4MWZmZmZjMDApOworCQl9CisKKwkJYWRkcnN0YXJ0ICs9IGNhY2hlLT53YXlfaW5jcjsKKwl9CisKKwliYWNrX3RvX1AxKCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjYWNoZV9kZWJ1Z2ZzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGNhY2hlX3NlcV9zaG93LCBpbm9kZS0+dS5nZW5lcmljX2lwKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY2FjaGVfZGVidWdmc19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjYWNoZV9kZWJ1Z2ZzX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLmxsc2VlawkJPSBzZXFfbHNlZWssCisJLnJlbGVhc2UJPSBzZXFfcmVsZWFzZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGNhY2hlX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRjYWNoZV9kZW50cnksICppY2FjaGVfZGVudHJ5OworCisJZGNhY2hlX2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRjYWNoZSIsIFNfSVJVU1IsIE5VTEwsCisJCQkJCSAgICAodW5zaWduZWQgaW50ICopQ0FDSEVfVFlQRV9EQ0FDSEUsCisJCQkJCSAgICAmY2FjaGVfZGVidWdmc19mb3BzKTsKKwlpZiAoSVNfRVJSKGRjYWNoZV9kZW50cnkpKQorCQlyZXR1cm4gUFRSX0VSUihkY2FjaGVfZGVudHJ5KTsKKworCWljYWNoZV9kZW50cnkgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKCJpY2FjaGUiLCBTX0lSVVNSLCBOVUxMLAorCQkJCQkgICAgKHVuc2lnbmVkIGludCAqKUNBQ0hFX1RZUEVfSUNBQ0hFLAorCQkJCQkgICAgJmNhY2hlX2RlYnVnZnNfZm9wcyk7CisJaWYgKElTX0VSUihpY2FjaGVfZGVudHJ5KSkgeworCQlkZWJ1Z2ZzX3JlbW92ZShkY2FjaGVfZGVudHJ5KTsKKwkJcmV0dXJuIFBUUl9FUlIoaWNhY2hlX2RlbnRyeSk7CisJfQorCisJcmV0dXJuIDA7Cit9Cittb2R1bGVfaW5pdChjYWNoZV9kZWJ1Z2ZzX2luaXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDQuYwppbmRleCA1MjRjZWE1Li5lNDhjYzIyIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NhY2hlLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vY2FjaGUtc2g0LmMKQEAgLTIsNDkgKzIsMTIwIEBACiAgKiBhcmNoL3NoL21tL2NhY2hlLXNoNC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAxIC0gMjAwNiAgUGF1bCBNdW5kdAogICogQ29weXJpZ2h0IChDKSAyMDAzICBSaWNoYXJkIEN1cm5vdwogICoKICAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCiAgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KLSNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCi1leHRlcm4gdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTZfYWxsKHVuc2lnbmVkIGxvbmcgc3RhcnQpOwotc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2X2FsbF9leCh1bnNpZ25lZCBsb25nIHN0YXJ0KTsKLWV4dGVybiB2b2lkIF9fZmx1c2hfZGNhY2hlX2FsbCh2b2lkKTsKLXN0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX2FsbF9leCh2b2lkKTsKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgd2Ugc3VwcG9ydCB1cCB0byB3aGVuIGRvaW5nIHJhbmdlZCBkY2FjaGUKKyAqIGZsdXNoaW5nLiBBbnl0aGluZyBleGNlZWRpbmcgdGhpcyB3aWxsIHNpbXBseSBmbHVzaCB0aGUgZGNhY2hlIGluIGl0cworICogZW50aXJldHkuCisgKi8KKyNkZWZpbmUgTUFYX0RDQUNIRV9QQUdFUwk2NAkvKiBYWFg6IFR1bmUgZm9yIHdheXMgKi8KKworc3RhdGljIHZvaWQgX19mbHVzaF9kY2FjaGVfc2VnbWVudF8xd2F5KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZXh0ZW50KTsKK3N0YXRpYyB2b2lkIF9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfMndheSh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJCQl1bnNpZ25lZCBsb25nIGV4dGVudCk7CitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9zZWdtZW50XzR3YXkodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJdW5zaWduZWQgbG9uZyBleHRlbnQpOworCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBleGVjX29mZnNldCk7CisKKy8qCisgKiBUaGlzIGlzIGluaXRpYWxpc2VkIGhlcmUgdG8gZW5zdXJlIHRoYXQgaXQgaXMgbm90IHBsYWNlZCBpbiB0aGUgQlNTLiAgSWYKKyAqIHRoYXQgd2VyZSB0byBoYXBwZW4sIG5vdGUgdGhhdCBjYWNoZV9pbml0IGdldHMgY2FsbGVkIGJlZm9yZSB0aGUgQlNTIGlzCisgKiBjbGVhcmVkLCBzbyB0aGlzIHdvdWxkIGdldCBudWxsZWQgb3V0IHdoaWNoIHdvdWxkIGJlIGhvcGVsZXNzLgorICovCitzdGF0aWMgdm9pZCAoKl9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfZm4pKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpID0KKwkodm9pZCAoKikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZykpMHhkZWFkYmVlZjsKKworc3RhdGljIHZvaWQgY29tcHV0ZV9hbGlhcyhzdHJ1Y3QgY2FjaGVfaW5mbyAqYykKK3sKKwljLT5hbGlhc19tYXNrID0gKChjLT5zZXRzIC0gMSkgPDwgYy0+ZW50cnlfc2hpZnQpICYgfihQQUdFX1NJWkUgLSAxKTsKKwljLT5uX2FsaWFzZXMgPSAoYy0+YWxpYXNfbWFzayA+PiBQQUdFX1NISUZUKSArIDE7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBlbWl0X2NhY2hlX3BhcmFtcyh2b2lkKQoreworCXByaW50aygiUFZSPSUwOHggQ1ZSPSUwOHggUFJSPSUwOHhcbiIsCisJCWN0cmxfaW5sKENDTl9QVlIpLAorCQljdHJsX2lubChDQ05fQ1ZSKSwKKwkJY3RybF9pbmwoQ0NOX1BSUikpOworCXByaW50aygiSS1jYWNoZSA6IG5fd2F5cz0lZCBuX3NldHM9JWQgd2F5X2luY3I9JWRcbiIsCisJCWNwdV9kYXRhLT5pY2FjaGUud2F5cywKKwkJY3B1X2RhdGEtPmljYWNoZS5zZXRzLAorCQljcHVfZGF0YS0+aWNhY2hlLndheV9pbmNyKTsKKwlwcmludGsoIkktY2FjaGUgOiBlbnRyeV9tYXNrPTB4JTA4eCBhbGlhc19tYXNrPTB4JTA4eCBuX2FsaWFzZXM9JWRcbiIsCisJCWNwdV9kYXRhLT5pY2FjaGUuZW50cnlfbWFzaywKKwkJY3B1X2RhdGEtPmljYWNoZS5hbGlhc19tYXNrLAorCQljcHVfZGF0YS0+aWNhY2hlLm5fYWxpYXNlcyk7CisJcHJpbnRrKCJELWNhY2hlIDogbl93YXlzPSVkIG5fc2V0cz0lZCB3YXlfaW5jcj0lZFxuIiwKKwkJY3B1X2RhdGEtPmRjYWNoZS53YXlzLAorCQljcHVfZGF0YS0+ZGNhY2hlLnNldHMsCisJCWNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3IpOworCXByaW50aygiRC1jYWNoZSA6IGVudHJ5X21hc2s9MHglMDh4IGFsaWFzX21hc2s9MHglMDh4IG5fYWxpYXNlcz0lZFxuIiwKKwkJY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9tYXNrLAorCQljcHVfZGF0YS0+ZGNhY2hlLmFsaWFzX21hc2ssCisJCWNwdV9kYXRhLT5kY2FjaGUubl9hbGlhc2VzKTsKKworCWlmICghX19mbHVzaF9kY2FjaGVfc2VnbWVudF9mbikKKwkJcGFuaWMoInVua25vd24gbnVtYmVyIG9mIGNhY2hlIHdheXNcbiIpOworfQogCiAvKgogICogU0gtNCBoYXMgdmlydHVhbGx5IGluZGV4ZWQgYW5kIHBoeXNpY2FsbHkgdGFnZ2VkIGNhY2hlLgogICovCiAKLXN0cnVjdCBzZW1hcGhvcmUgcDNtYXBfc2VtWzRdOworLyogV29yc3QgY2FzZSBhc3N1bWVkIHRvIGJlIDY0ayBjYWNoZSwgZGlyZWN0LW1hcHBlZCBpLmUuIDQgc3lub255bSBiaXRzLiAqLworI2RlZmluZSBNQVhfUDNfU0VNQVBIT1JFUyAxNgorCitzdHJ1Y3Qgc2VtYXBob3JlIHAzbWFwX3NlbVtNQVhfUDNfU0VNQVBIT1JFU107CiAKIHZvaWQgX19pbml0IHAzX2NhY2hlX2luaXQodm9pZCkKIHsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcyhQM1NFRywgMCwgUEFHRV9TSVpFKjQsIF9QQUdFX0NBQ0hBQkxFKSkKKwlpbnQgaTsKKworCWNvbXB1dGVfYWxpYXMoJmNwdV9kYXRhLT5pY2FjaGUpOworCWNvbXB1dGVfYWxpYXMoJmNwdV9kYXRhLT5kY2FjaGUpOworCisJc3dpdGNoIChjcHVfZGF0YS0+ZGNhY2hlLndheXMpIHsKKwljYXNlIDE6CisJCV9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfZm4gPSBfX2ZsdXNoX2RjYWNoZV9zZWdtZW50XzF3YXk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJX19mbHVzaF9kY2FjaGVfc2VnbWVudF9mbiA9IF9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfMndheTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlfX2ZsdXNoX2RjYWNoZV9zZWdtZW50X2ZuID0gX19mbHVzaF9kY2FjaGVfc2VnbWVudF80d2F5OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlfX2ZsdXNoX2RjYWNoZV9zZWdtZW50X2ZuID0gTlVMTDsKKwkJYnJlYWs7CisJfQorCisJZW1pdF9jYWNoZV9wYXJhbXMoKTsKKworCWlmIChyZW1hcF9hcmVhX3BhZ2VzKFAzU0VHLCAwLCBQQUdFX1NJWkUgKiA0LCBfUEFHRV9DQUNIQUJMRSkpCiAJCXBhbmljKCIlcyBmYWlsZWQuIiwgX19GVU5DVElPTl9fKTsKIAotCXNlbWFfaW5pdCAoJnAzbWFwX3NlbVswXSwgMSk7Ci0Jc2VtYV9pbml0ICgmcDNtYXBfc2VtWzFdLCAxKTsKLQlzZW1hX2luaXQgKCZwM21hcF9zZW1bMl0sIDEpOwotCXNlbWFfaW5pdCAoJnAzbWFwX3NlbVszXSwgMSk7CisJZm9yIChpID0gMDsgaSA8IGNwdV9kYXRhLT5kY2FjaGUubl9hbGlhc2VzOyBpKyspCisJCXNlbWFfaW5pdCgmcDNtYXBfc2VtW2ldLCAxKTsKIH0KIAogLyoKQEAgLTg5LDcgKzE2MCw2IEBACiAJfQogfQogCi0KIC8qCiAgKiBObyB3cml0ZSBiYWNrIHBsZWFzZQogICovCkBAIC0xMDgsNDAgKzE3OCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9hbGxfZXgodm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGVuZF9hZGRyLCBlbnRyeV9vZmZzZXQ7Ci0KLQllbmRfYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVkgKyAoY3B1X2RhdGEtPmRjYWNoZS5zZXRzIDw8IGNwdV9kYXRhLT5kY2FjaGUuZW50cnlfc2hpZnQpICogY3B1X2RhdGEtPmRjYWNoZS53YXlzOwotCWVudHJ5X29mZnNldCA9IDEgPDwgY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9zaGlmdDsKLQlmb3IgKGFkZHIgPSBDQUNIRV9PQ19BRERSRVNTX0FSUkFZOyBhZGRyIDwgZW5kX2FkZHI7IGFkZHIgKz0gZW50cnlfb2Zmc2V0KSB7Ci0JCWN0cmxfb3V0bCgwLCBhZGRyKTsKLQl9Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZmx1c2hfY2FjaGVfNDA5Nl9hbGxfZXgodW5zaWduZWQgbG9uZyBzdGFydCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIsIGVudHJ5X29mZnNldDsKLQlpbnQgaTsKLQotCWVudHJ5X29mZnNldCA9IDEgPDwgY3B1X2RhdGEtPmRjYWNoZS5lbnRyeV9zaGlmdDsKLQlmb3IgKGkgPSAwOyBpIDwgY3B1X2RhdGEtPmRjYWNoZS53YXlzOyBpKyssIHN0YXJ0ICs9IGNwdV9kYXRhLT5kY2FjaGUud2F5X2luY3IpIHsKLQkJZm9yIChhZGRyID0gQ0FDSEVfT0NfQUREUkVTU19BUlJBWSArIHN0YXJ0OwotCQkgICAgIGFkZHIgPCBDQUNIRV9PQ19BRERSRVNTX0FSUkFZICsgNDA5NiArIHN0YXJ0OwotCQkgICAgIGFkZHIgKz0gZW50cnlfb2Zmc2V0KSB7Ci0JCQljdHJsX291dGwoMCwgYWRkcik7Ci0JCX0KLQl9Ci19Ci0KLXZvaWQgZmx1c2hfY2FjaGVfNDA5Nl9hbGwodW5zaWduZWQgbG9uZyBzdGFydCkKLXsKLQlpZiAoY3B1X2RhdGEtPmRjYWNoZS53YXlzID09IDEpCi0JCV9fZmx1c2hfY2FjaGVfNDA5Nl9hbGwoc3RhcnQpOwotCWVsc2UKLQkJX19mbHVzaF9jYWNoZV80MDk2X2FsbF9leChzdGFydCk7Ci19Ci0KIC8qCiAgKiBXcml0ZSBiYWNrIHRoZSByYW5nZSBvZiBELWNhY2hlLCBhbmQgcHVyZ2UgdGhlIEktY2FjaGUuCiAgKgpAQCAtMTUzLDE0ICsxODksMTQgQEAKIH0KIAogLyoKLSAqIFdyaXRlIGJhY2sgdGhlIEQtY2FjaGUgYW5kIHB1cmdlIHRoZSBJLWNhY2hlIGZvciBzaWduYWwgdHJhbXBvbGluZS4gCisgKiBXcml0ZSBiYWNrIHRoZSBELWNhY2hlIGFuZCBwdXJnZSB0aGUgSS1jYWNoZSBmb3Igc2lnbmFsIHRyYW1wb2xpbmUuCiAgKiAuLiB3aGljaCBoYXBwZW5zIHRvIGJlIHRoZSBzYW1lIGJlaGF2aW9yIGFzIGZsdXNoX2ljYWNoZV9yYW5nZSgpLgogICogU28sIHdlIHNpbXBseSBmbHVzaCBvdXQgYSBsaW5lLgogICovCiB2b2lkIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAl1bnNpZ25lZCBsb25nIHYsIGluZGV4OwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IAorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAKIAl2ID0gYWRkciAmIH4oTDFfQ0FDSEVfQllURVMtMSk7CkBAIC0xNzIsMzAgKzIwOCwzMyBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWp1bXBfdG9fUDIoKTsKLQlmb3IoaSA9IDA7IGkgPCBjcHVfZGF0YS0+aWNhY2hlLndheXM7IGkrKywgaW5kZXggKz0gY3B1X2RhdGEtPmljYWNoZS53YXlfaW5jcikKKworCWZvciAoaSA9IDA7IGkgPCBjcHVfZGF0YS0+aWNhY2hlLndheXM7CisJICAgICBpKyssIGluZGV4ICs9IGNwdV9kYXRhLT5pY2FjaGUud2F5X2luY3IpCiAJCWN0cmxfb3V0bCgwLCBpbmRleCk7CS8qIENsZWFyIG91dCBWYWxpZC1iaXQgKi8KKwogCWJhY2tfdG9fUDEoKTsKKwl3bWIoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgcGh5cykKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOyAKLQlleHRlcm4gdm9pZCBfX2ZsdXNoX2NhY2hlXzQwOTYodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGV4ZWNfb2Zmc2V0ID0gMDsKIAogCS8qCi0JICogU0g3NzUxLCBTSDc3NTFSLCBhbmQgU1Q0MCBoYXZlIG5vIHJlc3RyaWN0aW9uIHRvIGhhbmRsZSBjYWNoZS4KLQkgKiAoV2hpbGUgU0g3NzUwIG11c3QgZG8gdGhhdCBhdCBQMiBhcmVhLikKKwkgKiBBbGwgdHlwZXMgb2YgU0gtNCByZXF1aXJlIFBDIHRvIGJlIGluIFAyIHRvIG9wZXJhdGUgb24gdGhlIEktY2FjaGUuCisJICogU29tZSB0eXBlcyBvZiBTSC00IHJlcXVpcmUgUEMgdG8gYmUgaW4gUDIgdG8gb3BlcmF0ZSBvbiB0aGUgRC1jYWNoZS4KIAkgKi8KLQlpZiAoKGNwdV9kYXRhLT5mbGFncyAmIENQVV9IQVNfUDJfRkxVU0hfQlVHKQotCSAgIHx8IHN0YXJ0IDwgQ0FDSEVfT0NfQUREUkVTU19BUlJBWSkgewotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCV9fZmx1c2hfY2FjaGVfNDA5NihzdGFydCB8IFNIX0NBQ0hFX0FTU09DLCBQMVNFR0FERFIocGh5cyksIDB4MjAwMDAwMDApOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci0JfSBlbHNlIHsKLQkJX19mbHVzaF9jYWNoZV80MDk2KHN0YXJ0IHwgU0hfQ0FDSEVfQVNTT0MsIFAxU0VHQUREUihwaHlzKSwgMCk7Ci0JfQorCWlmICgoY3B1X2RhdGEtPmZsYWdzICYgQ1BVX0hBU19QMl9GTFVTSF9CVUcpIHx8CisJICAgIChzdGFydCA8IENBQ0hFX09DX0FERFJFU1NfQVJSQVkpKQorCSAgICAJZXhlY19vZmZzZXQgPSAweDIwMDAwMDAwOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCV9fZmx1c2hfY2FjaGVfNDA5NihzdGFydCB8IFNIX0NBQ0hFX0FTU09DLAorCQkJICAgUDFTRUdBRERSKHBoeXMpLCBleGVjX29mZnNldCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiAvKgpAQCAtMjA2LDE1ICsyNDUsMTkgQEAKIHsKIAlpZiAodGVzdF9iaXQoUEdfbWFwcGVkLCAmcGFnZS0+ZmxhZ3MpKSB7CiAJCXVuc2lnbmVkIGxvbmcgcGh5cyA9IFBIWVNBRERSKHBhZ2VfYWRkcmVzcyhwYWdlKSk7CisJCXVuc2lnbmVkIGxvbmcgYWRkciA9IENBQ0hFX09DX0FERFJFU1NfQVJSQVk7CisJCWludCBpLCBuOwogCiAJCS8qIExvb3AgYWxsIHRoZSBELWNhY2hlICovCi0JCWZsdXNoX2NhY2hlXzQwOTYoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSwgICAgICAgICAgcGh5cyk7Ci0JCWZsdXNoX2NhY2hlXzQwOTYoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IDB4MTAwMCwgcGh5cyk7Ci0JCWZsdXNoX2NhY2hlXzQwOTYoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IDB4MjAwMCwgcGh5cyk7Ci0JCWZsdXNoX2NhY2hlXzQwOTYoQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IDB4MzAwMCwgcGh5cyk7CisJCW4gPSBjcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlczsKKwkJZm9yIChpID0gMDsgaSA8IG47IGkrKywgYWRkciArPSBQQUdFX1NJWkUpCisJCQlmbHVzaF9jYWNoZV80MDk2KGFkZHIsIHBoeXMpOwogCX0KKworCXdtYigpOwogfQogCisvKiBUT0RPOiBTZWxlY3RpdmUgaWNhY2hlIGludmFsaWRhdGlvbiB0aHJvdWdoIElDIGFkZHJlc3MgYXJyYXkuLiAqLwogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9hbGwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCBjY3I7CkBAIC0yMjcsMzQgKzI3MCwxNDIgQEAKIAljY3IgfD0gQ0NSX0NBQ0hFX0lDSTsKIAljdHJsX291dGwoY2NyLCBDQ1IpOwogCisJLyoKKwkgKiBiYWNrX3RvX1AxKCkgd2lsbCB0YWtlIGNhcmUgb2YgdGhlIGJhcnJpZXIgZm9yIHVzLCBkb24ndCBhZGQKKwkgKiBhbm90aGVyIG9uZSEKKwkgKi8KKwogCWJhY2tfdG9fUDEoKTsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKK3ZvaWQgZmx1c2hfZGNhY2hlX2FsbCh2b2lkKQoreworCSgqX19mbHVzaF9kY2FjaGVfc2VnbWVudF9mbikoMFVMLCBjcHVfZGF0YS0+ZGNhY2hlLndheV9zaXplKTsKKwl3bWIoKTsKK30KKwogdm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCkKIHsKLQlpZiAoY3B1X2RhdGEtPmRjYWNoZS53YXlzID09IDEpCi0JCV9fZmx1c2hfZGNhY2hlX2FsbCgpOwotCWVsc2UKLQkJX19mbHVzaF9kY2FjaGVfYWxsX2V4KCk7CisJZmx1c2hfZGNhY2hlX2FsbCgpOwogCWZsdXNoX2ljYWNoZV9hbGwoKTsKIH0KIAorc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQpCit7CisJdW5zaWduZWQgbG9uZyBkID0gMCwgcCA9IHN0YXJ0ICYgUEFHRV9NQVNLOworCXVuc2lnbmVkIGxvbmcgYWxpYXNfbWFzayA9IGNwdV9kYXRhLT5kY2FjaGUuYWxpYXNfbWFzazsKKwl1bnNpZ25lZCBsb25nIG5fYWxpYXNlcyA9IGNwdV9kYXRhLT5kY2FjaGUubl9hbGlhc2VzOworCXVuc2lnbmVkIGxvbmcgc2VsZWN0X2JpdDsKKwl1bnNpZ25lZCBsb25nIGFsbF9hbGlhc2VzX21hc2s7CisJdW5zaWduZWQgbG9uZyBhZGRyX29mZnNldDsKKwlwZ2RfdCAqZGlyOworCXBtZF90ICpwbWQ7CisJcHVkX3QgKnB1ZDsKKwlwdGVfdCAqcHRlOworCWludCBpOworCisJZGlyID0gcGdkX29mZnNldChtbSwgcCk7CisJcHVkID0gcHVkX29mZnNldChkaXIsIHApOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBwKTsKKwllbmQgPSBQQUdFX0FMSUdOKGVuZCk7CisKKwlhbGxfYWxpYXNlc19tYXNrID0gKDEgPDwgbl9hbGlhc2VzKSAtIDE7CisKKwlkbyB7CisJCWlmIChwbWRfbm9uZSgqcG1kKSB8fCB1bmxpa2VseShwbWRfYmFkKCpwbWQpKSkgeworCQkJcCAmPSBQTURfTUFTSzsKKwkJCXAgKz0gUE1EX1NJWkU7CisJCQlwbWQrKzsKKworCQkJY29udGludWU7CisJCX0KKworCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHApOworCisJCWRvIHsKKwkJCXVuc2lnbmVkIGxvbmcgcGh5czsKKwkJCXB0ZV90IGVudHJ5ID0gKnB0ZTsKKworCQkJaWYgKCEocHRlX3ZhbChlbnRyeSkgJiBfUEFHRV9QUkVTRU5UKSkgeworCQkJCXB0ZSsrOworCQkJCXAgKz0gUEFHRV9TSVpFOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlwaHlzID0gcHRlX3ZhbChlbnRyeSkgJiBQVEVfUEhZU19NQVNLOworCisJCQlpZiAoKHAgXiBwaHlzKSAmIGFsaWFzX21hc2spIHsKKwkJCQlkIHw9IDEgPDwgKChwICYgYWxpYXNfbWFzaykgPj4gUEFHRV9TSElGVCk7CisJCQkJZCB8PSAxIDw8ICgocGh5cyAmIGFsaWFzX21hc2spID4+IFBBR0VfU0hJRlQpOworCisJCQkJaWYgKGQgPT0gYWxsX2FsaWFzZXNfbWFzaykKKwkJCQkJZ290byBsb29wX2V4aXQ7CisJCQl9CisKKwkJCXB0ZSsrOworCQkJcCArPSBQQUdFX1NJWkU7CisJCX0gd2hpbGUgKHAgPCBlbmQgJiYgKCh1bnNpZ25lZCBsb25nKXB0ZSAmIH5QQUdFX01BU0spKTsKKwkJcG1kKys7CisJfSB3aGlsZSAocCA8IGVuZCk7CisKK2xvb3BfZXhpdDoKKwlhZGRyX29mZnNldCA9IDA7CisJc2VsZWN0X2JpdCA9IDE7CisKKwlmb3IgKGkgPSAwOyBpIDwgbl9hbGlhc2VzOyBpKyspIHsKKwkJaWYgKGQgJiBzZWxlY3RfYml0KSB7CisJCQkoKl9fZmx1c2hfZGNhY2hlX3NlZ21lbnRfZm4pKGFkZHJfb2Zmc2V0LCBQQUdFX1NJWkUpOworCQkJd21iKCk7CisJCX0KKworCQlzZWxlY3RfYml0IDw8PSAxOworCQlhZGRyX29mZnNldCArPSBQQUdFX1NJWkU7CisJfQorfQorCisvKgorICogTm90ZSA6IChSUEMpIHNpbmNlIHRoZSBjYWNoZXMgYXJlIHBoeXNpY2FsbHkgdGFnZ2VkLCB0aGUgb25seSBwb2ludAorICogb2YgZmx1c2hfY2FjaGVfbW0gZm9yIFNILTQgaXMgdG8gZ2V0IHJpZCBvZiBhbGlhc2VzIGZyb20gdGhlCisgKiBELWNhY2hlLiAgVGhlIGFzc3VtcHRpb24gZWxzZXdoZXJlLCBlLmcuIGZsdXNoX2NhY2hlX3JhbmdlLCBpcyB0aGF0CisgKiBsaW5lcyBjYW4gc3RheSByZXNpZGVudCBzbyBsb25nIGFzIHRoZSB2aXJ0dWFsIGFkZHJlc3MgdGhleSB3ZXJlCisgKiBhY2Nlc3NlZCB3aXRoIChoZW5jZSBjYWNoZSBzZXQpIGlzIGluIGFjY29yZCB3aXRoIHRoZSBwaHlzaWNhbAorICogYWRkcmVzcyAoaS5lLiB0YWcpLiAgSXQncyBubyBkaWZmZXJlbnQgaGVyZS4gIFNvIEkgcmVja29uIHdlIGRvbid0CisgKiBuZWVkIHRvIGZsdXNoIHRoZSBJLWNhY2hlLCBzaW5jZSBhbGlhc2VzIGRvbid0IG1hdHRlciBmb3IgdGhhdC4gIFdlCisgKiBzaG91bGQgdHJ5IHRoYXQuCisgKgorICogQ2FsbGVyIHRha2VzIG1tLT5tbWFwX3NlbS4KKyAqLwogdm9pZCBmbHVzaF9jYWNoZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIHsKLQkvKiBJcyB0aGVyZSBhbnkgZ29vZCB3YXk/ICovCi0JLyogWFhYOiBwb3NzaWJseSBjYWxsIGZsdXNoX2NhY2hlX3JhbmdlIGZvciBlYWNoIHZtIGFyZWEgKi8KLQkvKiAKLQkgKiBGSVhNRTogUmVhbGx5LCB0aGUgb3B0aW1hbCBzb2x1dGlvbiBoZXJlIHdvdWxkIGJlIGFibGUgdG8gZmx1c2ggb3V0Ci0JICogaW5kaXZpZHVhbCBsaW5lcyBjcmVhdGVkIGJ5IHRoZSBzcGVjaWZpZWQgY29udGV4dCwgYnV0IHRoaXMgaXNuJ3QKLQkgKiBmZWFzaWJsZSBmb3IgYSBudW1iZXIgb2YgYXJjaGl0ZWN0dXJlcyAoc3VjaCBhcyBNSVBTLCBhbmQgc29tZQotCSAqIFNQQVJDKSAuLiBpcyB0aGlzIHBvc3NpYmxlIGZvciBTdXBlckg/Ci0JICoKLQkgKiBJbiB0aGUgbWVhbnRpbWUsIHdlJ2xsIGp1c3QgZmx1c2ggYWxsIG9mIHRoZSBjYWNoZXMuLiB0aGlzCi0JICogc2VlbXMgdG8gYmUgdGhlIHNpbXBsZXN0IHdheSB0byBhdm9pZCBhdCBsZWFzdCBhIGZldyB3YXN0ZWQKLQkgKiBjYWNoZSBmbHVzaGVzLiAtTGV0aGFsCisJLyoKKwkgKiBJZiBjYWNoZSBpcyBvbmx5IDRrLXBlci13YXksIHRoZXJlIGFyZSBuZXZlciBhbnkgJ2FsaWFzZXMnLiAgU2luY2UKKwkgKiB0aGUgY2FjaGUgaXMgcGh5c2ljYWxseSB0YWdnZWQsIHRoZSBkYXRhIGNhbiBqdXN0IGJlIGxlZnQgaW4gdGhlcmUuCiAJICovCi0JZmx1c2hfY2FjaGVfYWxsKCk7CisJaWYgKGNwdV9kYXRhLT5kY2FjaGUubl9hbGlhc2VzID09IDApCisJCXJldHVybjsKKworCS8qCisJICogRG9uJ3QgYm90aGVyIGdyb3ZlbGluZyBhcm91bmQgdGhlIGRjYWNoZSBmb3IgdGhlIFZNQSByYW5nZXMKKwkgKiBpZiB0aGVyZSBhcmUgdG9vIG1hbnkgUFRFcyB0byBtYWtlIGl0IHdvcnRod2hpbGUuCisJICovCisJaWYgKG1tLT5ucl9wdGVzID49IE1BWF9EQ0FDSEVfUEFHRVMpCisJCWZsdXNoX2RjYWNoZV9hbGwoKTsKKwllbHNlIHsKKwkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwkJLyoKKwkJICogSW4gdGhpcyBjYXNlIHRoZXJlIGFyZSByZWFzb25hYmx5IHNpemVkIHJhbmdlcyB0byBmbHVzaCwKKwkJICogaXRlcmF0ZSB0aHJvdWdoIHRoZSBWTUEgbGlzdCBhbmQgdGFrZSBjYXJlIG9mIGFueSBhbGlhc2VzLgorCQkgKi8KKwkJZm9yICh2bWEgPSBtbS0+bW1hcDsgdm1hOyB2bWEgPSB2bWEtPnZtX25leHQpCisJCQlfX2ZsdXNoX2NhY2hlX21tKG1tLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7CisJfQorCisJLyogT25seSB0b3VjaCB0aGUgaWNhY2hlIGlmIG9uZSBvZiB0aGUgVk1BcyBoYXMgVk1fRVhFQyBzZXQuICovCisJaWYgKG1tLT5leGVjX3ZtKQorCQlmbHVzaF9pY2FjaGVfYWxsKCk7CiB9CiAKIC8qCkBAIC0yNjMsMjcgKzQxNCw0MCBAQAogICogQUREUjogVmlydHVhbCBBZGRyZXNzIChVMCBhZGRyZXNzKQogICogUEZOOiBQaHlzaWNhbCBwYWdlIG51bWJlcgogICovCi12b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBwZm4pCit2b2lkIGZsdXNoX2NhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJICAgICAgdW5zaWduZWQgbG9uZyBwZm4pCiB7CiAJdW5zaWduZWQgbG9uZyBwaHlzID0gcGZuIDw8IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgaW50IGFsaWFzX21hc2s7CisKKwlhbGlhc19tYXNrID0gY3B1X2RhdGEtPmRjYWNoZS5hbGlhc19tYXNrOwogCiAJLyogV2Ugb25seSBuZWVkIHRvIGZsdXNoIEQtY2FjaGUgd2hlbiB3ZSBoYXZlIGFsaWFzICovCi0JaWYgKChhZGRyZXNzXnBoeXMpICYgQ0FDSEVfQUxJQVMpIHsKKwlpZiAoKGFkZHJlc3NecGh5cykgJiBhbGlhc19tYXNrKSB7CiAJCS8qIExvb3AgNEsgb2YgdGhlIEQtY2FjaGUgKi8KIAkJZmx1c2hfY2FjaGVfNDA5NigKLQkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIENBQ0hFX0FMSUFTKSwKKwkJCUNBQ0hFX09DX0FERFJFU1NfQVJSQVkgfCAoYWRkcmVzcyAmIGFsaWFzX21hc2spLAogCQkJcGh5cyk7CiAJCS8qIExvb3AgYW5vdGhlciA0SyBvZiB0aGUgRC1jYWNoZSAqLwogCQlmbHVzaF9jYWNoZV80MDk2KAotCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChwaHlzICYgQ0FDSEVfQUxJQVMpLAorCQkJQ0FDSEVfT0NfQUREUkVTU19BUlJBWSB8IChwaHlzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKIAl9CiAKLQlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpCi0JCS8qIExvb3AgNEsgKGhhbGYpIG9mIHRoZSBJLWNhY2hlICovCisJYWxpYXNfbWFzayA9IGNwdV9kYXRhLT5pY2FjaGUuYWxpYXNfbWFzazsKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpIHsKKwkJLyoKKwkJICogRXZpY3QgZW50cmllcyBmcm9tIHRoZSBwb3J0aW9uIG9mIHRoZSBjYWNoZSBmcm9tIHdoaWNoIGNvZGUKKwkJICogbWF5IGhhdmUgYmVlbiBleGVjdXRlZCBhdCB0aGlzIGFkZHJlc3MgKHZpcnR1YWwpLiAgVGhlcmUncworCQkgKiBubyBuZWVkIHRvIGV2aWN0IGZyb20gdGhlIHBvcnRpb24gY29ycmVzcG9uZGluZyB0byB0aGUKKwkJICogcGh5c2ljYWwgYWRkcmVzcyBhcyBmb3IgdGhlIEQtY2FjaGUsIGJlY2F1c2Ugd2Uga25vdyB0aGUKKwkJICoga2VybmVsIGhhcyBuZXZlciBleGVjdXRlZCB0aGUgY29kZSB0aHJvdWdoIGl0cyBpZGVudGl0eQorCQkgKiB0cmFuc2xhdGlvbi4KKwkJICovCiAJCWZsdXNoX2NhY2hlXzQwOTYoCi0JCQlDQUNIRV9JQ19BRERSRVNTX0FSUkFZIHwgKGFkZHJlc3MgJiAweDEwMDApLAorCQkJQ0FDSEVfSUNfQUREUkVTU19BUlJBWSB8IChhZGRyZXNzICYgYWxpYXNfbWFzayksCiAJCQlwaHlzKTsKKwl9CiB9CiAKIC8qCkBAIC0yOTgsNTIgKzQ2MiwzMSBAQAogdm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKIAkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQogewotCXVuc2lnbmVkIGxvbmcgcCA9IHN0YXJ0ICYgUEFHRV9NQVNLOwotCXBnZF90ICpkaXI7Ci0JcG1kX3QgKnBtZDsKLQlwdGVfdCAqcHRlOwotCXB0ZV90IGVudHJ5OwotCXVuc2lnbmVkIGxvbmcgcGh5czsKLQl1bnNpZ25lZCBsb25nIGQgPSAwOworCS8qCisJICogSWYgY2FjaGUgaXMgb25seSA0ay1wZXItd2F5LCB0aGVyZSBhcmUgbmV2ZXIgYW55ICdhbGlhc2VzJy4gIFNpbmNlCisJICogdGhlIGNhY2hlIGlzIHBoeXNpY2FsbHkgdGFnZ2VkLCB0aGUgZGF0YSBjYW4ganVzdCBiZSBsZWZ0IGluIHRoZXJlLgorCSAqLworCWlmIChjcHVfZGF0YS0+ZGNhY2hlLm5fYWxpYXNlcyA9PSAwKQorCQlyZXR1cm47CiAKLQlkaXIgPSBwZ2Rfb2Zmc2V0KHZtYS0+dm1fbW0sIHApOwotCXBtZCA9IHBtZF9vZmZzZXQoZGlyLCBwKTsKKwkvKgorCSAqIERvbid0IGJvdGhlciB3aXRoIHRoZSBsb29rdXAgYW5kIGFsaWFzIGNoZWNrIGlmIHdlIGhhdmUgYQorCSAqIHdpZGUgcmFuZ2UgdG8gY292ZXIsIGp1c3QgYmxvdyBhd2F5IHRoZSBkY2FjaGUgaW4gaXRzCisJICogZW50aXJldHkgaW5zdGVhZC4gLS0gUEZNLgorCSAqLworCWlmICgoKGVuZCAtIHN0YXJ0KSA+PiBQQUdFX1NISUZUKSA+PSBNQVhfRENBQ0hFX1BBR0VTKQorCQlmbHVzaF9kY2FjaGVfYWxsKCk7CisJZWxzZQorCQlfX2ZsdXNoX2NhY2hlX21tKHZtYS0+dm1fbW0sIHN0YXJ0LCBlbmQpOwogCi0JZG8gewotCQlpZiAocG1kX25vbmUoKnBtZCkgfHwgcG1kX2JhZCgqcG1kKSkgewotCQkJcCAmPSB+KCgxIDw8IFBNRF9TSElGVCkgLTEpOwotCQkJcCArPSAoMSA8PCBQTURfU0hJRlQpOwotCQkJcG1kKys7Ci0JCQljb250aW51ZTsKLQkJfQotCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHApOwotCQlkbyB7Ci0JCQllbnRyeSA9ICpwdGU7Ci0JCQlpZiAoKHB0ZV92YWwoZW50cnkpICYgX1BBR0VfUFJFU0VOVCkpIHsKLQkJCQlwaHlzID0gcHRlX3ZhbChlbnRyeSkmUFRFX1BIWVNfTUFTSzsKLQkJCQlpZiAoKHBecGh5cykgJiBDQUNIRV9BTElBUykgewotCQkJCQlkIHw9IDEgPDwgKChwICYgQ0FDSEVfQUxJQVMpPj4xMik7IAotCQkJCQlkIHw9IDEgPDwgKChwaHlzICYgQ0FDSEVfQUxJQVMpPj4xMik7Ci0JCQkJCWlmIChkID09IDB4MGYpCi0JCQkJCQlnb3RvIGxvb3BfZXhpdDsKLQkJCQl9Ci0JCQl9Ci0JCQlwdGUrKzsKLQkJCXAgKz0gUEFHRV9TSVpFOwotCQl9IHdoaWxlIChwIDwgZW5kICYmICgodW5zaWduZWQgbG9uZylwdGUgJiB+UEFHRV9NQVNLKSk7Ci0JCXBtZCsrOwotCX0gd2hpbGUgKHAgPCBlbmQpOwotIGxvb3BfZXhpdDoKLQlpZiAoZCAmIDEpCi0JCWZsdXNoX2NhY2hlXzQwOTZfYWxsKDApOwotCWlmIChkICYgMikKLQkJZmx1c2hfY2FjaGVfNDA5Nl9hbGwoMHgxMDAwKTsKLQlpZiAoZCAmIDQpCi0JCWZsdXNoX2NhY2hlXzQwOTZfYWxsKDB4MjAwMCk7Ci0JaWYgKGQgJiA4KQotCQlmbHVzaF9jYWNoZV80MDk2X2FsbCgweDMwMDApOwotCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fRVhFQykKKwlpZiAodm1hLT52bV9mbGFncyAmIFZNX0VYRUMpIHsKKwkJLyoKKwkJICogVE9ETzogSXMgdGhpcyByZXF1aXJlZD8/PyAgTmVlZCB0byBsb29rIGF0IGhvdyBJLWNhY2hlCisJCSAqIGNvaGVyZW5jeSBpcyBhc3N1cmVkIHdoZW4gbmV3IHByb2dyYW1zIGFyZSBsb2FkZWQgdG8gc2VlIGlmCisJCSAqIHRoaXMgbWF0dGVycy4KKwkJICovCiAJCWZsdXNoX2ljYWNoZV9hbGwoKTsKKwl9CiB9CiAKIC8qCkBAIC0zNTcsNSArNTAwLDI3MyBAQAogCQkJICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQogewogCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCBhZGRyLCBwYWdlX3RvX3BmbihwYWdlKSk7CisJbWIoKTsKIH0KIAorLyoqCisgKiBfX2ZsdXNoX2NhY2hlXzQwOTYKKyAqCisgKiBAYWRkcjogIGFkZHJlc3MgaW4gbWVtb3J5IG1hcHBlZCBjYWNoZSBhcnJheQorICogQHBoeXM6ICBQMSBhZGRyZXNzIHRvIGZsdXNoIChoYXMgdG8gbWF0Y2ggdGFncyBpZiBhZGRyIGhhcyAnQScgYml0CisgKiAgICAgICAgIHNldCBpLmUuIGFzc29jaWF0aXZlIHdyaXRlKQorICogQGV4ZWNfb2Zmc2V0OiBzZXQgdG8gMHgyMDAwMDAwMCBpZiBmbHVzaCBoYXMgdG8gYmUgZXhlY3V0ZWQgZnJvbSBQMgorICogICAgICAgICAgICAgICByZWdpb24gZWxzZSAweDAKKyAqCisgKiBUaGUgb2Zmc2V0IGludG8gdGhlIGNhY2hlIGFycmF5IGltcGxpZWQgYnkgJ2FkZHInIHNlbGVjdHMgdGhlCisgKiAnY29sb3VyJyBvZiB0aGUgdmlydHVhbCBhZGRyZXNzIHJhbmdlIHRoYXQgd2lsbCBiZSBmbHVzaGVkLiAgVGhlCisgKiBvcGVyYXRpb24gKHB1cmdlL3dyaXRlLWJhY2spIGlzIHNlbGVjdGVkIGJ5IHRoZSBsb3dlciAyIGJpdHMgb2YKKyAqICdwaHlzJy4KKyAqLworc3RhdGljIHZvaWQgX19mbHVzaF9jYWNoZV80MDk2KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXhlY19vZmZzZXQpCit7CisJaW50IHdheV9jb3VudDsKKwl1bnNpZ25lZCBsb25nIGJhc2VfYWRkciA9IGFkZHI7CisJc3RydWN0IGNhY2hlX2luZm8gKmRjYWNoZTsKKwl1bnNpZ25lZCBsb25nIHdheV9pbmNyOworCXVuc2lnbmVkIGxvbmcgYSwgZWEsIHA7CisJdW5zaWduZWQgbG9uZyB0ZW1wX3BjOworCisJZGNhY2hlID0gJmNwdV9kYXRhLT5kY2FjaGU7CisJLyogV3JpdGUgdGhpcyB3YXkgZm9yIGJldHRlciBhc3NlbWJseS4gKi8KKwl3YXlfY291bnQgPSBkY2FjaGUtPndheXM7CisJd2F5X2luY3IgPSBkY2FjaGUtPndheV9pbmNyOworCisJLyoKKwkgKiBBcHBseSBleGVjX29mZnNldCAoaS5lLiBicmFuY2ggdG8gUDIgaWYgcmVxdWlyZWQuKS4KKwkgKgorCSAqIEZJWE1FOgorCSAqCisJICoJSWYgSSB3cml0ZSAiPXIiIGZvciB0aGUgKHRlbXBfcGMpLCBpdCBwdXRzIHRoaXMgaW4gcjYgaGVuY2UKKwkgKgl0cmFzaGluZyBleGVjX29mZnNldCBiZWZvcmUgaXQncyBiZWVuIGFkZGVkIG9uIC0gd2h5PyAgSGVuY2UKKwkgKgkiPSZyIiBhcyBhICd3b3JrYXJvdW5kJworCSAqLworCWFzbSB2b2xhdGlsZSgibW92LmwgMWYsICUwXG5cdCIKKwkJICAgICAiYWRkICAgJTEsICUwXG5cdCIKKwkJICAgICAiam1wICAgQCUwXG5cdCIKKwkJICAgICAibm9wXG5cdCIKKwkJICAgICAiLmJhbGlnbiA0XG5cdCIKKwkJICAgICAiMTogIC5sb25nIDJmXG5cdCIKKwkJICAgICAiMjpcbiIgOiAiPSZyIiAodGVtcF9wYykgOiAiciIgKGV4ZWNfb2Zmc2V0KSk7CisKKwkvKgorCSAqIFdlIGtub3cgdGhlcmUgd2lsbCBiZSA+PTEgaXRlcmF0aW9uLCBzbyB3cml0ZSBhcyBkby13aGlsZSB0byBhdm9pZAorCSAqIHBvaW50bGVzcyBuZWFkLW9mLWxvb3AgY2hlY2sgZm9yIDAgaXRlcmF0aW9ucy4KKwkgKi8KKwlkbyB7CisJCWVhID0gYmFzZV9hZGRyICsgUEFHRV9TSVpFOworCQlhID0gYmFzZV9hZGRyOworCQlwID0gcGh5czsKKworCQlkbyB7CisJCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKilhID0gcDsKKwkJCS8qCisJCQkgKiBOZXh0IGxpbmU6IGludGVudGlvbmFsbHkgbm90IHArMzIsIHNhdmVzIGFuIGFkZCwgcAorCQkJICogd2lsbCBkbyBzaW5jZSBvbmx5IHRoZSBjYWNoZSB0YWcgYml0cyBuZWVkIHRvCisJCQkgKiBtYXRjaC4KKwkJCSAqLworCQkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopKGErMzIpID0gcDsKKwkJCWEgKz0gNjQ7CisJCQlwICs9IDY0OworCQl9IHdoaWxlIChhIDwgZWEpOworCisJCWJhc2VfYWRkciArPSB3YXlfaW5jcjsKKwl9IHdoaWxlICgtLXdheV9jb3VudCAhPSAwKTsKK30KKworLyoKKyAqIEJyZWFrIHRoZSAxLCAyIGFuZCA0IHdheSB2YXJpYW50cyBvZiB0aGlzIG91dCBpbnRvIHNlcGFyYXRlIGZ1bmN0aW9ucyB0bworICogYXZvaWQgbmVhcmx5IGFsbCB0aGUgb3ZlcmhlYWQgb2YgaGF2aW5nIHRoZSBjb25kaXRpb25hbCBzdHVmZiBpbiB0aGUgZnVuY3Rpb24KKyAqIGJvZGllcyAoKyB0aGUgMSBhbmQgMiB3YXkgY2FzZXMgYXZvaWQgc2F2aW5nIGFueSByZWdpc3RlcnMgdG9vKS4KKyAqLworc3RhdGljIHZvaWQgX19mbHVzaF9kY2FjaGVfc2VnbWVudF8xd2F5KHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCXVuc2lnbmVkIGxvbmcgZXh0ZW50X3Blcl93YXkpCit7CisJdW5zaWduZWQgbG9uZyBvcmlnX3NyLCBzcl93aXRoX2JsOworCXVuc2lnbmVkIGxvbmcgYmFzZV9hZGRyOworCXVuc2lnbmVkIGxvbmcgd2F5X2luY3IsIGxpbmVzeiwgd2F5X3NpemU7CisJc3RydWN0IGNhY2hlX2luZm8gKmRjYWNoZTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIGEwLCBhMGU7CisKKwlhc20gdm9sYXRpbGUoInN0YyBzciwgJTAiIDogIj1yIiAob3JpZ19zcikpOworCXNyX3dpdGhfYmwgPSBvcmlnX3NyIHwgKDE8PDI4KTsKKwliYXNlX2FkZHIgPSAoKHVuc2lnbmVkIGxvbmcpJmVtcHR5X3plcm9fcGFnZVswXSk7CisKKwkvKgorCSAqIFRoZSBwcmV2aW91cyBjb2RlIGFsaWduZWQgYmFzZV9hZGRyIHRvIDE2aywgaS5lLiB0aGUgd2F5X3NpemUgb2YgYWxsCisJICogZXhpc3RpbmcgU0gtNCBELWNhY2hlcy4gIFdoaWxzdCBJIGRvbid0IHNlZSBhIG5lZWQgdG8gaGF2ZSB0aGlzCisJICogYWxpZ25lZCB0byBhbnkgYmV0dGVyIHRoYW4gdGhlIGNhY2hlIGxpbmUgc2l6ZSAod2hpY2ggaXQgd2lsbCBiZQorCSAqIGFueXdheSBieSBjb25zdHJ1Y3Rpb24pLCBsZXQncyBhbGlnbiBpdCB0byBhdCBsZWFzdCB0aGUgd2F5X3NpemUgb2YKKwkgKiBhbnkgZXhpc3Rpbmcgb3IgY29uY2VpdmFibGUgU0gtNCBELWNhY2hlLiAgLS0gUlBDCisJICovCisJYmFzZV9hZGRyID0gKChiYXNlX2FkZHIgPj4gMTYpIDw8IDE2KTsKKwliYXNlX2FkZHIgfD0gc3RhcnQ7CisKKwlkY2FjaGUgPSAmY3B1X2RhdGEtPmRjYWNoZTsKKwlsaW5lc3ogPSBkY2FjaGUtPmxpbmVzejsKKwl3YXlfaW5jciA9IGRjYWNoZS0+d2F5X2luY3I7CisJd2F5X3NpemUgPSBkY2FjaGUtPndheV9zaXplOworCisJYTAgPSBiYXNlX2FkZHI7CisJYTBlID0gYmFzZV9hZGRyICsgZXh0ZW50X3Blcl93YXk7CisJZG8geworCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3IiIDogOiAiciIgKHNyX3dpdGhfYmwpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTAiIDogOiAiciIgKGEwKSk7CisJCWEwICs9IGxpbmVzejsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTAiIDogOiAiciIgKGEwKSk7CisJCWEwICs9IGxpbmVzejsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTAiIDogOiAiciIgKGEwKSk7CisJCWEwICs9IGxpbmVzejsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTAiIDogOiAiciIgKGEwKSk7CisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCBzciIgOiA6ICJyIiAob3JpZ19zcikpOworCQlhMCArPSBsaW5lc3o7CisJfSB3aGlsZSAoYTAgPCBhMGUpOworfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9zZWdtZW50XzJ3YXkodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJdW5zaWduZWQgbG9uZyBleHRlbnRfcGVyX3dheSkKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWdfc3IsIHNyX3dpdGhfYmw7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyB3YXlfaW5jciwgbGluZXN6LCB3YXlfc2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfaW5mbyAqZGNhY2hlOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYTAsIGExLCBhMGU7CisKKwlhc20gdm9sYXRpbGUoInN0YyBzciwgJTAiIDogIj1yIiAob3JpZ19zcikpOworCXNyX3dpdGhfYmwgPSBvcmlnX3NyIHwgKDE8PDI4KTsKKwliYXNlX2FkZHIgPSAoKHVuc2lnbmVkIGxvbmcpJmVtcHR5X3plcm9fcGFnZVswXSk7CisKKwkvKiBTZWUgY29tbWVudCB1bmRlciAxLXdheSBhYm92ZSAqLworCWJhc2VfYWRkciA9ICgoYmFzZV9hZGRyID4+IDE2KSA8PCAxNik7CisJYmFzZV9hZGRyIHw9IHN0YXJ0OworCisJZGNhY2hlID0gJmNwdV9kYXRhLT5kY2FjaGU7CisJbGluZXN6ID0gZGNhY2hlLT5saW5lc3o7CisJd2F5X2luY3IgPSBkY2FjaGUtPndheV9pbmNyOworCXdheV9zaXplID0gZGNhY2hlLT53YXlfc2l6ZTsKKworCWEwID0gYmFzZV9hZGRyOworCWExID0gYTAgKyB3YXlfaW5jcjsKKwlhMGUgPSBiYXNlX2FkZHIgKyBleHRlbnRfcGVyX3dheTsKKwlkbyB7CisJCWFzbSB2b2xhdGlsZSgibGRjICUwLCBzciIgOiA6ICJyIiAoc3Jfd2l0aF9ibCkpOworCQlhc20gdm9sYXRpbGUoIm1vdmNhLmwgcjAsIEAlMFxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTFcblx0IgorCQkJICAgICAib2NiaSBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTEiIDogOgorCQkJICAgICAiciIgKGEwKSwgInIiIChhMSkpOworCQlhMCArPSBsaW5lc3o7CisJCWExICs9IGxpbmVzejsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAibW92Y2EubCByMCwgQCUxXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUwXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUxIiA6IDoKKwkJCSAgICAgInIiIChhMCksICJyIiAoYTEpKTsKKwkJYTAgKz0gbGluZXN6OworCQlhMSArPSBsaW5lc3o7CisJCWFzbSB2b2xhdGlsZSgibW92Y2EubCByMCwgQCUwXG5cdCIKKwkJCSAgICAgIm1vdmNhLmwgcjAsIEAlMVxuXHQiCisJCQkgICAgICJvY2JpIEAlMFxuXHQiCisJCQkgICAgICJvY2JpIEAlMSIgOiA6CisJCQkgICAgICJyIiAoYTApLCAiciIgKGExKSk7CisJCWEwICs9IGxpbmVzejsKKwkJYTEgKz0gbGluZXN6OworCQlhc20gdm9sYXRpbGUoIm1vdmNhLmwgcjAsIEAlMFxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTFcblx0IgorCQkJICAgICAib2NiaSBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTEiIDogOgorCQkJICAgICAiciIgKGEwKSwgInIiIChhMSkpOworCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3IiIDogOiAiciIgKG9yaWdfc3IpKTsKKwkJYTAgKz0gbGluZXN6OworCQlhMSArPSBsaW5lc3o7CisJfSB3aGlsZSAoYTAgPCBhMGUpOworfQorCitzdGF0aWMgdm9pZCBfX2ZsdXNoX2RjYWNoZV9zZWdtZW50XzR3YXkodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCQkJdW5zaWduZWQgbG9uZyBleHRlbnRfcGVyX3dheSkKK3sKKwl1bnNpZ25lZCBsb25nIG9yaWdfc3IsIHNyX3dpdGhfYmw7CisJdW5zaWduZWQgbG9uZyBiYXNlX2FkZHI7CisJdW5zaWduZWQgbG9uZyB3YXlfaW5jciwgbGluZXN6LCB3YXlfc2l6ZTsKKwlzdHJ1Y3QgY2FjaGVfaW5mbyAqZGNhY2hlOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgYTAsIGExLCBhMiwgYTMsIGEwZTsKKworCWFzbSB2b2xhdGlsZSgic3RjIHNyLCAlMCIgOiAiPXIiIChvcmlnX3NyKSk7CisJc3Jfd2l0aF9ibCA9IG9yaWdfc3IgfCAoMTw8MjgpOworCWJhc2VfYWRkciA9ICgodW5zaWduZWQgbG9uZykmZW1wdHlfemVyb19wYWdlWzBdKTsKKworCS8qIFNlZSBjb21tZW50IHVuZGVyIDEtd2F5IGFib3ZlICovCisJYmFzZV9hZGRyID0gKChiYXNlX2FkZHIgPj4gMTYpIDw8IDE2KTsKKwliYXNlX2FkZHIgfD0gc3RhcnQ7CisKKwlkY2FjaGUgPSAmY3B1X2RhdGEtPmRjYWNoZTsKKwlsaW5lc3ogPSBkY2FjaGUtPmxpbmVzejsKKwl3YXlfaW5jciA9IGRjYWNoZS0+d2F5X2luY3I7CisJd2F5X3NpemUgPSBkY2FjaGUtPndheV9zaXplOworCisJYTAgPSBiYXNlX2FkZHI7CisJYTEgPSBhMCArIHdheV9pbmNyOworCWEyID0gYTEgKyB3YXlfaW5jcjsKKwlhMyA9IGEyICsgd2F5X2luY3I7CisJYTBlID0gYmFzZV9hZGRyICsgZXh0ZW50X3Blcl93YXk7CisJZG8geworCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3IiIDogOiAiciIgKHNyX3dpdGhfYmwpKTsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAibW92Y2EubCByMCwgQCUxXG5cdCIKKwkJCSAgICAgIm1vdmNhLmwgcjAsIEAlMlxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTNcblx0IgorCQkJICAgICAib2NiaSBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTFcblx0IgorCQkJICAgICAib2NiaSBAJTJcblx0IgorCQkJICAgICAib2NiaSBAJTNcblx0IiA6IDoKKwkJCSAgICAgInIiIChhMCksICJyIiAoYTEpLCAiciIgKGEyKSwgInIiIChhMykpOworCQlhMCArPSBsaW5lc3o7CisJCWExICs9IGxpbmVzejsKKwkJYTIgKz0gbGluZXN6OworCQlhMyArPSBsaW5lc3o7CisJCWFzbSB2b2xhdGlsZSgibW92Y2EubCByMCwgQCUwXG5cdCIKKwkJCSAgICAgIm1vdmNhLmwgcjAsIEAlMVxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTJcblx0IgorCQkJICAgICAibW92Y2EubCByMCwgQCUzXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUwXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUxXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUyXG5cdCIKKwkJCSAgICAgIm9jYmkgQCUzXG5cdCIgOiA6CisJCQkgICAgICJyIiAoYTApLCAiciIgKGExKSwgInIiIChhMiksICJyIiAoYTMpKTsKKwkJYTAgKz0gbGluZXN6OworCQlhMSArPSBsaW5lc3o7CisJCWEyICs9IGxpbmVzejsKKwkJYTMgKz0gbGluZXN6OworCQlhc20gdm9sYXRpbGUoIm1vdmNhLmwgcjAsIEAlMFxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTFcblx0IgorCQkJICAgICAibW92Y2EubCByMCwgQCUyXG5cdCIKKwkJCSAgICAgIm1vdmNhLmwgcjAsIEAlM1xuXHQiCisJCQkgICAgICJvY2JpIEAlMFxuXHQiCisJCQkgICAgICJvY2JpIEAlMVxuXHQiCisJCQkgICAgICJvY2JpIEAlMlxuXHQiCisJCQkgICAgICJvY2JpIEAlM1xuXHQiIDogOgorCQkJICAgICAiciIgKGEwKSwgInIiIChhMSksICJyIiAoYTIpLCAiciIgKGEzKSk7CisJCWEwICs9IGxpbmVzejsKKwkJYTEgKz0gbGluZXN6OworCQlhMiArPSBsaW5lc3o7CisJCWEzICs9IGxpbmVzejsKKwkJYXNtIHZvbGF0aWxlKCJtb3ZjYS5sIHIwLCBAJTBcblx0IgorCQkJICAgICAibW92Y2EubCByMCwgQCUxXG5cdCIKKwkJCSAgICAgIm1vdmNhLmwgcjAsIEAlMlxuXHQiCisJCQkgICAgICJtb3ZjYS5sIHIwLCBAJTNcblx0IgorCQkJICAgICAib2NiaSBAJTBcblx0IgorCQkJICAgICAib2NiaSBAJTFcblx0IgorCQkJICAgICAib2NiaSBAJTJcblx0IgorCQkJICAgICAib2NiaSBAJTNcblx0IiA6IDoKKwkJCSAgICAgInIiIChhMCksICJyIiAoYTEpLCAiciIgKGEyKSwgInIiIChhMykpOworCQlhc20gdm9sYXRpbGUoImxkYyAlMCwgc3IiIDogOiAiciIgKG9yaWdfc3IpKTsKKwkJYTAgKz0gbGluZXN6OworCQlhMSArPSBsaW5lc3o7CisJCWEyICs9IGxpbmVzejsKKwkJYTMgKz0gbGluZXN6OworCX0gd2hpbGUgKGEwIDwgYTBlKTsKK30KZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMgYi9hcmNoL3NoL21tL2NhY2hlLXNoNzcwNS5jCmluZGV4IGJmOTRlZWQuLjA0NWFiZGYgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vY2FjaGUtc2g3NzA1LmMKKysrIGIvYXJjaC9zaC9tbS9jYWNoZS1zaDc3MDUuYwpAQCAtOSw3ICs5LDYgQEAKICAqIGZvciBtb3JlIGRldGFpbHMuCiAgKgogICovCi0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvbW1hbi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CkBAIC0yNSwxNCArMjQsMTAgQEAKICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogCi0vKiBUaGUgMzJLQiBjYWNoZSBvbiB0aGUgU0g3NzA1IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBzeW5vbnltIHByb2JsZW0KLSAqIGFzIFNINCBDUFVzICovCi0KLSNkZWZpbmUgX19wdGVfb2Zmc2V0KGFkZHJlc3MpIFwKLQkJKChhZGRyZXNzID4+IFBBR0VfU0hJRlQpICYgKFBUUlNfUEVSX1BURSAtIDEpKQotI2RlZmluZSBwdGVfb2Zmc2V0KGRpciwgYWRkcmVzcykgKChwdGVfdCAqKSBwbWRfcGFnZV92YWRkcigqKGRpcikpICsgXAotCQlfX3B0ZV9vZmZzZXQoYWRkcmVzcykpCi0KKy8qCisgKiBUaGUgMzJLQiBjYWNoZSBvbiB0aGUgU0g3NzA1IHN1ZmZlcnMgZnJvbSB0aGUgc2FtZSBzeW5vbnltIHByb2JsZW0KKyAqIGFzIFNINCBDUFVzCisgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWNoZV93YmFja19hbGwodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHdheXMsIHdheXNpemUsIGFkZHJzdGFydDsKQEAgLTczLDcgKzY4LDYgQEAKIAlfX2ZsdXNoX3diYWNrX3JlZ2lvbigodm9pZCAqKXN0YXJ0LCBlbmQgLSBzdGFydCk7CiB9CiAKLQogLyoKICAqIFdyaXRlYmFjayZJbnZhbGlkYXRlIHRoZSBELWNhY2hlIG9mIHRoZSBwYWdlCiAgKi8KQEAgLTEyOCw3ICsxMjIsNiBAQAogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotCiAvKgogICogV3JpdGUgYmFjayAmIGludmFsaWRhdGUgdGhlIEQtY2FjaGUgb2YgdGhlIHBhZ2UuCiAgKiAoVG8gYXZvaWQgImFsaWFzIiBpc3N1ZXMpCkBAIC0xODYsNyArMTc5LDggQEAKICAqCiAgKiBBRERSRVNTOiBWaXJ0dWFsIEFkZHJlc3MgKFUwIGFkZHJlc3MpCiAgKi8KLXZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHBmbikKK3ZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHBmbikKIHsKIAlfX2ZsdXNoX2RjYWNoZV9wYWdlKHBmbiA8PCBQQUdFX1NISUZUKTsKIH0KQEAgLTIwMyw0ICsxOTcsMyBAQAogewogCV9fZmx1c2hfcHVyZ2VfcmVnaW9uKHBhZ2VfYWRkcmVzcyhwYWdlKSwgUEFHRV9TSVpFKTsKIH0KLQpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jbGVhcl9wYWdlLlMgYi9hcmNoL3NoL21tL2NsZWFyX3BhZ2UuUwppbmRleCAwOGFjZWFkLi43Yjk2NDI1IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NsZWFyX3BhZ2UuUworKysgYi9hcmNoL3NoL21tL2NsZWFyX3BhZ2UuUwpAQCAtMTkzLDEwMiArMTkzLDUgQEAKIAkgbm9wCiAuTDQwOTY6CS53b3JkCTQwOTYKIAotRU5UUlkoX19mbHVzaF9jYWNoZV80MDk2KQotCW1vdi5sCTFmLHIzCi0JYWRkCXI2LHIzCi0JbW92CXI0LHIwCi0JbW92CSM2NCxyMgotCXNobGwJcjIKLQltb3YJIzY0LHI2Ci0Jam1wCUByMwotCSBtb3YJIzk2LHI3Ci0JLmFsaWduCTIKLTE6CS5sb25nCTJmCi0yOgotCS5yZXB0CTMyCi0JbW92LmwJcjUsQHIwCi0JbW92LmwJcjUsQCgzMixyMCkKLQltb3YubAlyNSxAKHIwLHI2KQotCW1vdi5sCXI1LEAocjAscjcpCi0JYWRkCXIyLHI1Ci0JYWRkCXIyLHIwCi0JLmVuZHIKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlub3AKLQlydHMKLQkgbm9wCi0KLUVOVFJZKF9fZmx1c2hfZGNhY2hlX2FsbCkKLQltb3YubAkyZixyMAotCW1vdi5sCTNmLHI0Ci0JYW5kCXIwLHI0CQkhIHI0ID0gKHVuc2lnbmVkIGxvbmcpJmVtcHR5X3plcm9fcGFnZVswXSAmIH4weGZmZmZjMDAwCi0Jc3RjCXNyLHIxCQkhIHNhdmUgU1IKLQltb3YubAk0ZixyMgotCW9yCXIxLHIyCi0JbW92CSMzMixyMwotCXNobGwyCXIzCi0xOgotCWxkYwlyMixzcgkJISBzZXQgQkwgYml0Ci0JbW92Y2EubAlyMCxAcjQKLQlvY2JpCUByNAotCWFkZAkjMzIscjQKLQltb3ZjYS5sCXIwLEByNAotCW9jYmkJQHI0Ci0JYWRkCSMzMixyNAotCW1vdmNhLmwJcjAsQHI0Ci0Jb2NiaQlAcjQKLQlhZGQJIzMyLHI0Ci0JbW92Y2EubAlyMCxAcjQKLQlvY2JpCUByNAotCWxkYwlyMSxzcgkJISByZXN0b3JlIFNSCi0JZHQJcjMKLQliZi9zCTFiCi0JIGFkZAkjMzIscjQKLQotCXJ0cwotCSBub3AKLQkuYWxpZ24JMgotMjoJLmxvbmcJMHhmZmZmYzAwMAotMzoJLmxvbmcJZW1wdHlfemVyb19wYWdlCi00OgkubG9uZwkweDEwMDAwMDAwCSEgQkwgYml0Ci0KLS8qIF9fZmx1c2hfY2FjaGVfNDA5Nl9hbGwodW5zaWduZWQgbG9uZyBhZGRyKSAqLwotRU5UUlkoX19mbHVzaF9jYWNoZV80MDk2X2FsbCkKLQltb3YubAkyZixyMAotCW1vdi5sCTNmLHIyCi0JYW5kCXIwLHIyCi0Jb3IJcjIscjQJCSEgcjQgPSBhZGRyIHwgKHVuc2lnbmVkIGxvbmcpJmVtcHR5X3plcm9fcGFnZVswXSAmIH4weDNmZmYKLQlzdGMJc3IscjEJCSEgc2F2ZSBTUgotCW1vdi5sCTRmLHIyCi0Jb3IJcjEscjIKLQltb3YJIzMyLHIzCi0xOgotCWxkYwlyMixzcgkJISBzZXQgQkwgYml0Ci0JbW92Y2EubAlyMCxAcjQKLQlvY2JpCUByNAotCWFkZAkjMzIscjQKLQltb3ZjYS5sCXIwLEByNAotCW9jYmkJQHI0Ci0JYWRkCSMzMixyNAotCW1vdmNhLmwJcjAsQHI0Ci0Jb2NiaQlAcjQKLQlhZGQJIzMyLHI0Ci0JbW92Y2EubAlyMCxAcjQKLQlvY2JpCUByNAotCWxkYwlyMSxzcgkJISByZXN0b3JlIFNSCi0JZHQJcjMKLQliZi9zCTFiCi0JIGFkZAkjMzIscjQKLQotCXJ0cwotCSBub3AKLQkuYWxpZ24JMgotMjoJLmxvbmcJMHhmZmZmYzAwMAotMzoJLmxvbmcJZW1wdHlfemVyb19wYWdlCi00OgkubG9uZwkweDEwMDAwMDAwCSEgQkwgYml0CiAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9tbS9jb25zaXN0ZW50LmMgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwppbmRleCBlZTczZTMwLi5jODFlNmI2IDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYworKysgYi9hcmNoL3NoL21tL2NvbnNpc3RlbnQuYwpAQCAtOSw2ICs5LDggQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogdm9pZCAqY29uc2lzdGVudF9hbGxvYyhnZnBfdCBnZnAsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpoYW5kbGUpCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2ZhdWx0LmMgYi9hcmNoL3NoL21tL2ZhdWx0LmMKaW5kZXggNzc1Zjg2Yy4uNjg2NjNiOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9mYXVsdC5jCisrKyBiL2FyY2gvc2gvbW0vZmF1bHQuYwpAQCAtMSwzMyArMSwyMiBAQAotLyogJElkOiBmYXVsdC5jLHYgMS4xNCAyMDA0LzAxLzEzIDA1OjUyOjExIGtrb2ppbWEgRXhwICQKKy8qCisgKiBQYWdlIGZhdWx0IGhhbmRsZXIgZm9yIFNIIHdpdGggYW4gTU1VLgogICoKLSAqICBsaW51eC9hcmNoL3NoL21tL2ZhdWx0LmMKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkgIE5paWJlIFl1dGFrYQogICogIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAogICoKICAqICBCYXNlZCBvbiBsaW51eC9hcmNoL2kzODYvbW0vZmF1bHQuYzoKICAqICAgQ29weXJpZ2h0IChDKSAxOTk1ICBMaW51cyBUb3J2YWxkcworICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgogICovCi0KLSNpbmNsdWRlIDxsaW51eC9zaWduYWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KLSNpbmNsdWRlIDxsaW51eC9tbWFuLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2tnZGIuaD4KIAogZXh0ZXJuIHZvaWQgZGllKGNvbnN0IGNoYXIgKixzdHJ1Y3QgcHRfcmVncyAqLGxvbmcpOwpAQCAtODAsNyArNjksNyBAQAogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9IGVsc2UgewotCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCisJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMgfCBWTV9XUklURSkpKQogCQkJZ290byBiYWRfYXJlYTsKIAl9CiAKQEAgLTE2MCw3ICsxNDksNyBAQAogICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CkBAIC0xODcsMTggKzE3NiwzMCBAQAogCQlnb3RvIG5vX2NvbnRleHQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCiAvKgotICogQ2FsbGVkIHdpdGggaW50ZXJydXB0IGRpc2FibGVkLgorICogVGhpcyBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIFNILTQgc3RvcmUgcXVldWVzLCBhcyBwYWdlcyBmb3IgdGhpcworICogc3BhY2Ugc3RpbGwgbmVlZCB0byBiZSBmYXVsdGVkIGluIGJlZm9yZSBpdCdzIHBvc3NpYmxlIHRvIGZsdXNoIHRoZQorICogc3RvcmUgcXVldWUgY2FjaGUgZm9yIHdyaXRlb3V0IHRvIHRoZSByZW1hcHBlZCByZWdpb24uCiAgKi8KLWFzbWxpbmthZ2UgaW50IF9fZG9fcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKLQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCisjZGVmaW5lIFAzX0FERFJfTUFYCQkoUDRTRUdfU1RPUkVfUVVFICsgMHgwNDAwMDAwMCkKKyNlbHNlCisjZGVmaW5lIFAzX0FERFJfTUFYCQlQNFNFRworI2VuZGlmCisKKy8qCisgKiBDYWxsZWQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCithc21saW5rYWdlIGludCBfX2twcm9iZXMgX19kb19wYWdlX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLAorCQkJCQkgdW5zaWduZWQgbG9uZyB3cml0ZWFjY2VzcywKKwkJCQkJIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQl1bnNpZ25lZCBsb25nIGFkZHJtYXggPSBQNFNFRzsKIAlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlOwogCXB0ZV90IGVudHJ5OwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07CiAJc3BpbmxvY2tfdCAqcHRsOwogCWludCByZXQgPSAxOwogCkBAIC0yMDcsMzEgKzIwOCwzNyBAQAogCQlrZ2RiX2J1c19lcnJfaG9vaygpOwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCi0JYWRkcm1heCA9IFA0U0VHX1NUT1JFX1FVRSArIDB4MDQwMDAwMDA7Ci0jZW5kaWYKLQotCWlmIChhZGRyZXNzID49IFAzU0VHICYmIGFkZHJlc3MgPCBhZGRybWF4KSB7CisJLyoKKwkgKiBXZSBkb24ndCB0YWtlIHBhZ2UgZmF1bHRzIGZvciBQMSwgUDIsIGFuZCBwYXJ0cyBvZiBQNCwgdGhlc2UKKwkgKiBhcmUgYWx3YXlzIG1hcHBlZCwgd2hldGhlciBpdCBiZSBkdWUgdG8gbGVnYWN5IGJlaGF2aW91ciBpbgorCSAqIDI5LWJpdCBtb2RlLCBvciBkdWUgdG8gUE1CIGNvbmZpZ3VyYXRpb24gaW4gMzItYml0IG1vZGUuCisJICovCisJaWYgKGFkZHJlc3MgPj0gUDNTRUcgJiYgYWRkcmVzcyA8IFAzX0FERFJfTUFYKSB7CiAJCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKIAkJbW0gPSBOVUxMOwotCX0gZWxzZSBpZiAoYWRkcmVzcyA+PSBUQVNLX1NJWkUpCi0JCXJldHVybiAxOwotCWVsc2UgaWYgKCEobW0gPSBjdXJyZW50LT5tbSkpCi0JCXJldHVybiAxOwotCWVsc2UKLQkJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CisJfSBlbHNlIHsKKwkJaWYgKHVubGlrZWx5KGFkZHJlc3MgPj0gVEFTS19TSVpFIHx8ICFtbSkpCisJCQlyZXR1cm4gMTsKIAotCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyZXNzKTsKKwkJcGdkID0gcGdkX29mZnNldChtbSwgYWRkcmVzcyk7CisJfQorCisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHJlc3MpOworCWlmIChwdWRfbm9uZV9vcl9jbGVhcl9iYWQocHVkKSkKKwkJcmV0dXJuIDE7CisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHJlc3MpOwogCWlmIChwbWRfbm9uZV9vcl9jbGVhcl9iYWQocG1kKSkKIAkJcmV0dXJuIDE7CisKIAlpZiAobW0pCiAJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkcmVzcywgJnB0bCk7CiAJZWxzZQogCQlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHJlc3MpOwogCiAJZW50cnkgPSAqcHRlOwotCWlmIChwdGVfbm9uZShlbnRyeSkgfHwgcHRlX25vdF9wcmVzZW50KGVudHJ5KQotCSAgICB8fCAod3JpdGVhY2Nlc3MgJiYgIXB0ZV93cml0ZShlbnRyeSkpKQorCWlmICh1bmxpa2VseShwdGVfbm9uZShlbnRyeSkgfHwgcHRlX25vdF9wcmVzZW50KGVudHJ5KSkpCisJCWdvdG8gdW5sb2NrOworCWlmICh1bmxpa2VseSh3cml0ZWFjY2VzcyAmJiAhcHRlX3dyaXRlKGVudHJ5KSkpCiAJCWdvdG8gdW5sb2NrOwogCiAJaWYgKHdyaXRlYWNjZXNzKQpAQCAtMjQzLDEzICsyNTAsNyBAQAogCSAqIElUTEIgaXMgbm90IGFmZmVjdGVkIGJ5ICJsZHRsYiIgaW5zdHJ1Y3Rpb24uCiAJICogU28sIHdlIG5lZWQgdG8gZmx1c2ggdGhlIGVudHJ5IGJ5IG91cnNlbHZlcy4KIAkgKi8KLQotCXsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCQlfX2ZsdXNoX3RsYl9wYWdlKGdldF9hc2lkKCksIGFkZHJlc3MmUEFHRV9NQVNLKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KKwlfX2ZsdXNoX3RsYl9wYWdlKGdldF9hc2lkKCksIGFkZHJlc3MgJiBQQUdFX01BU0spOwogI2VuZGlmCiAKIAlzZXRfcHRlKHB0ZSwgZW50cnkpOwpAQCAtMjYwLDEyMSArMjYxLDMgQEAKIAkJcHRlX3VubWFwX3VubG9jayhwdGUsIHB0bCk7CiAJcmV0dXJuIHJldDsKIH0KLQotdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBwYWdlKQotewotCWlmICh2bWEtPnZtX21tICYmIHZtYS0+dm1fbW0tPmNvbnRleHQgIT0gTk9fQ09OVEVYVCkgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQl1bnNpZ25lZCBsb25nIGFzaWQ7Ci0JCXVuc2lnbmVkIGxvbmcgc2F2ZWRfYXNpZCA9IE1NVV9OT19BU0lEOwotCi0JCWFzaWQgPSB2bWEtPnZtX21tLT5jb250ZXh0ICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOwotCQlwYWdlICY9IFBBR0VfTUFTSzsKLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCWlmICh2bWEtPnZtX21tICE9IGN1cnJlbnQtPm1tKSB7Ci0JCQlzYXZlZF9hc2lkID0gZ2V0X2FzaWQoKTsKLQkJCXNldF9hc2lkKGFzaWQpOwotCQl9Ci0JCV9fZmx1c2hfdGxiX3BhZ2UoYXNpZCwgcGFnZSk7Ci0JCWlmIChzYXZlZF9hc2lkICE9IE1NVV9OT19BU0lEKQotCQkJc2V0X2FzaWQoc2F2ZWRfYXNpZCk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gdm1hLT52bV9tbTsKLQotCWlmIChtbS0+Y29udGV4dCAhPSBOT19DT05URVhUKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JCWludCBzaXplOwotCi0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQkJc2l6ZSA9IChlbmQgLSBzdGFydCArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKLQkJaWYgKHNpemUgPiAoTU1VX05UTEJfRU5UUklFUy80KSkgeyAvKiBUb28gbWFueSBUTEIgdG8gZmx1c2ggKi8KLQkJCW1tLT5jb250ZXh0ID0gTk9fQ09OVEVYVDsKLQkJCWlmIChtbSA9PSBjdXJyZW50LT5tbSkKLQkJCQlhY3RpdmF0ZV9jb250ZXh0KG1tKTsKLQkJfSBlbHNlIHsKLQkJCXVuc2lnbmVkIGxvbmcgYXNpZCA9IG1tLT5jb250ZXh0Jk1NVV9DT05URVhUX0FTSURfTUFTSzsKLQkJCXVuc2lnbmVkIGxvbmcgc2F2ZWRfYXNpZCA9IE1NVV9OT19BU0lEOwotCi0JCQlzdGFydCAmPSBQQUdFX01BU0s7Ci0JCQllbmQgKz0gKFBBR0VfU0laRSAtIDEpOwotCQkJZW5kICY9IFBBR0VfTUFTSzsKLQkJCWlmIChtbSAhPSBjdXJyZW50LT5tbSkgewotCQkJCXNhdmVkX2FzaWQgPSBnZXRfYXNpZCgpOwotCQkJCXNldF9hc2lkKGFzaWQpOwotCQkJfQotCQkJd2hpbGUgKHN0YXJ0IDwgZW5kKSB7Ci0JCQkJX19mbHVzaF90bGJfcGFnZShhc2lkLCBzdGFydCk7Ci0JCQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQkJfQotCQkJaWYgKHNhdmVkX2FzaWQgIT0gTU1VX05PX0FTSUQpCi0JCQkJc2V0X2FzaWQoc2F2ZWRfYXNpZCk7Ci0JCX0KLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotCX0KLX0KLQotdm9pZCBmbHVzaF90bGJfa2VybmVsX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IHNpemU7Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0Jc2l6ZSA9IChlbmQgLSBzdGFydCArIChQQUdFX1NJWkUgLSAxKSkgPj4gUEFHRV9TSElGVDsKLQlpZiAoc2l6ZSA+IChNTVVfTlRMQl9FTlRSSUVTLzQpKSB7IC8qIFRvbyBtYW55IFRMQiB0byBmbHVzaCAqLwotCQlmbHVzaF90bGJfYWxsKCk7Ci0JfSBlbHNlIHsKLQkJdW5zaWduZWQgbG9uZyBhc2lkID0gaW5pdF9tbS5jb250ZXh0Jk1NVV9DT05URVhUX0FTSURfTUFTSzsKLQkJdW5zaWduZWQgbG9uZyBzYXZlZF9hc2lkID0gZ2V0X2FzaWQoKTsKLQotCQlzdGFydCAmPSBQQUdFX01BU0s7Ci0JCWVuZCArPSAoUEFHRV9TSVpFIC0gMSk7Ci0JCWVuZCAmPSBQQUdFX01BU0s7Ci0JCXNldF9hc2lkKGFzaWQpOwotCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKLQkJCV9fZmx1c2hfdGxiX3BhZ2UoYXNpZCwgc3RhcnQpOwotCQkJc3RhcnQgKz0gUEFHRV9TSVpFOwotCQl9Ci0JCXNldF9hc2lkKHNhdmVkX2FzaWQpOwotCX0KLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQotewotCS8qIEludmFsaWRhdGUgYWxsIFRMQiBvZiB0aGlzIHByb2Nlc3MuICovCi0JLyogSW5zdGVhZCBvZiBpbnZhbGlkYXRpbmcgZWFjaCBUTEIsIHdlIGdldCBuZXcgTU1VIGNvbnRleHQuICovCi0JaWYgKG1tLT5jb250ZXh0ICE9IE5PX0NPTlRFWFQpIHsKLQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JCW1tLT5jb250ZXh0ID0gTk9fQ09OVEVYVDsKLQkJaWYgKG1tID09IGN1cnJlbnQtPm1tKQotCQkJYWN0aXZhdGVfY29udGV4dChtbSk7Ci0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLQl9Ci19Ci0KLXZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0YXR1czsKLQotCS8qCi0JICogRmx1c2ggYWxsIHRoZSBUTEIuCi0JICoKLQkgKiBXcml0ZSB0byB0aGUgTU1VIGNvbnRyb2wgcmVnaXN0ZXIncyBiaXQ6Ci0JICogCVRGLWJpdCBmb3IgU0gtMywgVEktYml0IGZvciBTSC00LgotCSAqICAgICAgSXQncyBzYW1lIHBvc2l0aW9uLCBiaXQgIzIuCi0JICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwotCXN0YXR1cyA9IGN0cmxfaW5sKE1NVUNSKTsKLQlzdGF0dXMgfD0gMHgwNDsJCQotCWN0cmxfb3V0bChzdGF0dXMsIE1NVUNSKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMgYi9hcmNoL3NoL21tL2h1Z2V0bGJwYWdlLmMKaW5kZXggMmE4NWJjMS4uMzI5MDU5ZCAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9odWdldGxicGFnZS5jCisrKyBiL2FyY2gvc2gvbW0vaHVnZXRsYnBhZ2UuYwpAQCAtMjYsNjMgKzI2LDQzIEBACiBwdGVfdCAqaHVnZV9wdGVfYWxsb2Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOworCXB1ZF90ICpwdWQ7CiAJcG1kX3QgKnBtZDsKIAlwdGVfdCAqcHRlID0gTlVMTDsKIAogCXBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpOwogCWlmIChwZ2QpIHsKLQkJcG1kID0gcG1kX2FsbG9jKG1tLCBwZ2QsIGFkZHIpOwotCQlpZiAocG1kKQotCQkJcHRlID0gcHRlX2FsbG9jX21hcChtbSwgcG1kLCBhZGRyKTsKKwkJcHVkID0gcHVkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpOworCQlpZiAocHVkKSB7CisJCQlwbWQgPSBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7CisJCQlpZiAocG1kKQorCQkJCXB0ZSA9IHB0ZV9hbGxvY19tYXAobW0sIHBtZCwgYWRkcik7CisJCX0KIAl9CisKIAlyZXR1cm4gcHRlOwogfQogCiBwdGVfdCAqaHVnZV9wdGVfb2Zmc2V0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CiAJcGdkX3QgKnBnZDsKKwlwdWRfdCAqcHVkOwogCXBtZF90ICpwbWQ7CiAJcHRlX3QgKnB0ZSA9IE5VTEw7CiAKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKTsKIAlpZiAocGdkKSB7Ci0JCXBtZCA9IHBtZF9vZmZzZXQocGdkLCBhZGRyKTsKLQkJaWYgKHBtZCkKLQkJCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwKHBtZCwgYWRkcik7CisJCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwkJaWYgKHB1ZCkgeworCQkJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOworCQkJaWYgKHBtZCkKKwkJCQlwdGUgPSBwdGVfb2Zmc2V0X21hcChwbWQsIGFkZHIpOworCQl9CiAJfQorCiAJcmV0dXJuIHB0ZTsKIH0KIAotdm9pZCBzZXRfaHVnZV9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgZW50cnkpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgSFVHRVRMQl9QQUdFX09SREVSKTsgaSsrKSB7Ci0JCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZXAsIGVudHJ5KTsKLQkJcHRlcCsrOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQkJcHRlX3ZhbChlbnRyeSkgKz0gUEFHRV9TSVpFOwotCX0KLX0KLQotcHRlX3QgaHVnZV9wdGVwX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwKQotewotCXB0ZV90IGVudHJ5OwotCWludCBpOwotCi0JZW50cnkgPSAqcHRlcDsKLQotCWZvciAoaSA9IDA7IGkgPCAoMSA8PCBIVUdFVExCX1BBR0VfT1JERVIpOyBpKyspIHsKLQkJcHRlX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKLQkJYWRkciArPSBQQUdFX1NJWkU7Ci0JCXB0ZXArKzsKLQl9Ci0KLQlyZXR1cm4gZW50cnk7Ci19Ci0KIHN0cnVjdCBwYWdlICpmb2xsb3dfaHVnZV9hZGRyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGUpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2luaXQuYyBiL2FyY2gvc2gvbW0vaW5pdC5jCmluZGV4IDhlYTI3Y2EuLjcxNTRkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW5pdC5jCisrKyBiL2FyY2gvc2gvbW0vaW5pdC5jCkBAIC0yNCw3ICsyNCw3IEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtODAsNiArODAsNyBAQAogc3RhdGljIHZvaWQgc2V0X3B0ZV9waHlzKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBwaHlzLCBwZ3Byb3RfdCBwcm90KQogewogCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKIAlwbWRfdCAqcG1kOwogCXB0ZV90ICpwdGU7CiAKQEAgLTg5LDcgKzkwLDE3IEBACiAJCXJldHVybjsKIAl9CiAKLQlwbWQgPSBwbWRfb2Zmc2V0KHBnZCwgYWRkcik7CisJcHVkID0gcHVkX29mZnNldChwZ2QsIGFkZHIpOworCWlmIChwdWRfbm9uZSgqcHVkKSkgeworCQlwbWQgPSAocG1kX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CisJCXNldF9wdWQocHVkLCBfX3B1ZChfX3BhKHBtZCkgfCBfS0VSTlBHX1RBQkxFIHwgX1BBR0VfVVNFUikpOworCQlpZiAocG1kICE9IHBtZF9vZmZzZXQocHVkLCAwKSkgeworCQkJcHVkX0VSUk9SKCpwdWQpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwogCWlmIChwbWRfbm9uZSgqcG1kKSkgewogCQlwdGUgPSAocHRlX3QgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0FUT01JQyk7CiAJCXNldF9wbWQocG1kLCBfX3BtZChfX3BhKHB0ZSkgfCBfS0VSTlBHX1RBQkxFIHwgX1BBR0VfVVNFUikpOwpAQCAtMjEyLDYgKzIyMyw4IEBACiAJZnJlZV9hcmVhX2luaXRfbm9kZSgwLCBOT0RFX0RBVEEoMCksIHpvbmVzX3NpemUsIF9fTUVNT1JZX1NUQVJUID4+IFBBR0VfU0hJRlQsIDApOwogfQogCitzdGF0aWMgc3RydWN0IGtjb3JlX2xpc3Qga2NvcmVfbWVtLCBrY29yZV92bWFsbG9jOworCiB2b2lkIF9faW5pdCBtZW1faW5pdCh2b2lkKQogewogCWV4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9fcGFnZVsxMDI0XTsKQEAgLTIzNyw4ICsyNTAsMTMgQEAKIAkgKiBTZXR1cCB3cmFwcGVycyBmb3IgY29weS9jbGVhcl9wYWdlKCksIHRoZXNlIHdpbGwgZ2V0IG92ZXJyaWRkZW4KIAkgKiBsYXRlciBpbiB0aGUgYm9vdCBwcm9jZXNzIGlmIGEgYmV0dGVyIG1ldGhvZCBpcyBhdmFpbGFibGUuCiAJICovCisjaWZkZWYgQ09ORklHX01NVQogCWNvcHlfcGFnZSA9IGNvcHlfcGFnZV9zbG93OwogCWNsZWFyX3BhZ2UgPSBjbGVhcl9wYWdlX3Nsb3c7CisjZWxzZQorCWNvcHlfcGFnZSA9IGNvcHlfcGFnZV9ub21tdTsKKwljbGVhcl9wYWdlID0gY2xlYXJfcGFnZV9ub21tdTsKKyNlbmRpZgogCiAJLyogdGhpcyB3aWxsIHB1dCBhbGwgbG93IG1lbW9yeSBvbnRvIHRoZSBmcmVlbGlzdHMgKi8KIAl0b3RhbHJhbV9wYWdlcyArPSBmcmVlX2FsbF9ib290bWVtX25vZGUoTk9ERV9EQVRBKDApKTsKQEAgLTI1NCw3ICsyNzIsMTIgQEAKIAlkYXRhc2l6ZSA9ICAodW5zaWduZWQgbG9uZykgJl9lZGF0YSAtICh1bnNpZ25lZCBsb25nKSAmX2V0ZXh0OwogCWluaXRzaXplID0gICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2VuZCAtICh1bnNpZ25lZCBsb25nKSAmX19pbml0X2JlZ2luOwogCi0JcHJpbnRrKCJNZW1vcnk6ICVsdWsvJWx1ayBhdmFpbGFibGUgKCVkayBrZXJuZWwgY29kZSwgJWRrIHJlc2VydmVkLCAlZGsgZGF0YSwgJWRrIGluaXQpXG4iLAorCWtjbGlzdF9hZGQoJmtjb3JlX21lbSwgX192YSgwKSwgbWF4X2xvd19wZm4gPDwgUEFHRV9TSElGVCk7CisJa2NsaXN0X2FkZCgma2NvcmVfdm1hbGxvYywgKHZvaWQgKilWTUFMTE9DX1NUQVJULAorCQkgICBWTUFMTE9DX0VORCAtIFZNQUxMT0NfU1RBUlQpOworCisJcHJpbnRrKEtFUk5fSU5GTyAiTWVtb3J5OiAlbHVrLyVsdWsgYXZhaWxhYmxlICglZGsga2VybmVsIGNvZGUsICIKKwkgICAgICAgIiVkayByZXNlcnZlZCwgJWRrIGRhdGEsICVkayBpbml0KVxuIiwKIAkJKHVuc2lnbmVkIGxvbmcpIG5yX2ZyZWVfcGFnZXMoKSA8PCAoUEFHRV9TSElGVC0xMCksCiAJCW1heF9tYXBuciA8PCAoUEFHRV9TSElGVC0xMCksCiAJCWNvZGVzaXplID4+IDEwLApAQCAtMjYzLDYgKzI4Niw5IEBACiAJCWluaXRzaXplID4+IDEwKTsKIAogCXAzX2NhY2hlX2luaXQoKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHZEU08gKi8KKwl2c3lzY2FsbF9pbml0KCk7CiB9CiAKIHZvaWQgZnJlZV9pbml0bWVtKHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL2lvcmVtYXAuYyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCmluZGV4IDk2ZmE0YTkuLmE5ZmU4MGMgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvc2gvbW0vaW9yZW1hcC5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgpAQCAtMTM1LDYgKzEzNiwyMCBAQAogCQlyZXR1cm4gKHZvaWQgX19pb21lbSAqKXBoeXNfdG9fdmlydChwaHlzX2FkZHIpOwogCiAJLyoKKwkgKiBJZiB3ZSdyZSBvbiBhbiBTSDc3NTEgb3IgU0g3NzgwIFBDSSBjb250cm9sbGVyLCBQQ0kgbWVtb3J5IGlzCisJICogbWFwcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgKHR5cGljYWxseSAweGZkMDAwMDAwKQorCSAqIGluIGEgbm9uLXRyYW5zbGF0YWJsZSBhcmVhLCBzbyBtYXBwaW5nIHRocm91Z2ggcGFnZSB0YWJsZXMgZm9yCisJICogdGhpcyBhcmVhIGlzIG5vdCBvbmx5IHBvaW50bGVzcywgYnV0IGFsc28gZnVuZGFtZW50YWxseQorCSAqIGJyb2tlbi4gSnVzdCByZXR1cm4gdGhlIHBoeXNpY2FsIGFkZHJlc3MgaW5zdGVhZC4KKwkgKgorCSAqIEZvciBib2FyZHMgdGhhdCBtYXAgYSBzbWFsbCBQQ0kgbWVtb3J5IGFwZXJ0dXJlIHNvbWV3aGVyZSBpbgorCSAqIFAxL1AyIHNwYWNlLCBpb3JlbWFwKCkgd2lsbCBhbHJlYWR5IGRvIHRoZSByaWdodCB0aGluZywKKwkgKiBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRoaXMgZmFyLgorCSAqLworCWlmIChpc19wY2lfbWVtYWRkcihwaHlzX2FkZHIpICYmIGlzX3BjaV9tZW1hZGRyKGxhc3RfYWRkcikpCisJCXJldHVybiAodm9pZCBfX2lvbWVtICopcGh5c19hZGRyOworCisJLyoKIAkgKiBEb24ndCBhbGxvdyBhbnlib2R5IHRvIHJlbWFwIG5vcm1hbCBSQU0gdGhhdCB3ZSdyZSB1c2luZy4uCiAJICovCiAJaWYgKHBoeXNfYWRkciA8IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSkpCkBAIC0xOTIsNyArMjA3LDcgQEAKIAl1bnNpZ25lZCBsb25nIHZhZGRyID0gKHVuc2lnbmVkIGxvbmcgX19mb3JjZSlhZGRyOwogCXN0cnVjdCB2bV9zdHJ1Y3QgKnA7CiAKLQlpZiAoUFhTRUcodmFkZHIpIDwgUDNTRUcpCisJaWYgKFBYU0VHKHZhZGRyKSA8IFAzU0VHIHx8IGlzX3BjaV9tZW1hZGRyKHZhZGRyKSkKIAkJcmV0dXJuOwogCiAjaWZkZWYgQ09ORklHXzMyQklUCmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BnLW5vbW11LmMgYi9hcmNoL3NoL21tL3BnLW5vbW11LmMKaW5kZXggOGY5MTY1YS4uZDE1MjIxYiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9tbS9wZy1ub21tdS5jCisrKyBiL2FyY2gvc2gvbW0vcGctbm9tbXUuYwpAQCAtMTQsMjMgKzE0LDI0IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotc3RhdGljIHZvaWQgY29weV9wYWdlX25vbW11KHZvaWQgKnRvLCB2b2lkICpmcm9tKQordm9pZCBjb3B5X3BhZ2Vfbm9tbXUodm9pZCAqdG8sIHZvaWQgKmZyb20pCiB7CiAJbWVtY3B5KHRvLCBmcm9tLCBQQUdFX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBjbGVhcl9wYWdlX25vbW11KHZvaWQgKnRvKQordm9pZCBjbGVhcl9wYWdlX25vbW11KHZvaWQgKnRvKQogewogCW1lbXNldCh0bywgMCwgUEFHRV9TSVpFKTsKIH0KIAotc3RhdGljIGludCBfX2luaXQgcGdfbm9tbXVfaW5pdCh2b2lkKQorX19rZXJuZWxfc2l6ZV90IF9fY29weV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCBfX2tlcm5lbF9zaXplX3QgbikKIHsKLQljb3B5X3BhZ2UgPSBjb3B5X3BhZ2Vfbm9tbXU7Ci0JY2xlYXJfcGFnZSA9IGNsZWFyX3BhZ2Vfbm9tbXU7Ci0KKwltZW1jcHkodG8sIGZyb20sIG4pOwogCXJldHVybiAwOwogfQogCi1zdWJzeXNfaW5pdGNhbGwocGdfbm9tbXVfaW5pdCk7Ci0KK19fa2VybmVsX3NpemVfdCBfX2NsZWFyX3VzZXIodm9pZCAqdG8sIF9fa2VybmVsX3NpemVfdCBuKQoreworCW1lbXNldCh0bywgMCwgbik7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3BnLXNoNC5jIGIvYXJjaC9zaC9tbS9wZy1zaDQuYwppbmRleCBjNzc2YjYwLi4wNzM3MWVkIDEwMDY0NAotLS0gYS9hcmNoL3NoL21tL3BnLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vcGctc2g0LmMKQEAgLTIsNyArMiw3IEBACiAgKiBhcmNoL3NoL21tL3BnLXNoNC5jCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAyICBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiAgUGF1bCBNdW5kdAorICogQ29weXJpZ2h0IChDKSAyMDAyIC0gMjAwNSAgUGF1bCBNdW5kdAogICoKICAqIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdQTCB2Mi4wLgogICovCkBAIC0yMyw2ICsyMyw4IEBACiAKIGV4dGVybiBzdHJ1Y3Qgc2VtYXBob3JlIHAzbWFwX3NlbVtdOwogCisjZGVmaW5lIENBQ0hFX0FMSUFTIChjcHVfZGF0YS0+ZGNhY2hlLmFsaWFzX21hc2spCisKIC8qCiAgKiBjbGVhcl91c2VyX3BhZ2UKICAqIEB0bzogUDEgYWRkcmVzcwpAQCAtMzUsMTQgKzM3LDE1IEBACiAJaWYgKCgoYWRkcmVzcyBeICh1bnNpZ25lZCBsb25nKXRvKSAmIENBQ0hFX0FMSUFTKSA9PSAwKQogCQljbGVhcl9wYWdlKHRvKTsKIAllbHNlIHsKLQkJcGdwcm90X3QgcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IAorCQlwZ3Byb3RfdCBwZ3Byb3QgPSBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwKIAkJCQkJICAgX1BBR0VfUlcgfCBfUEFHRV9DQUNIQUJMRSB8Ci0JCQkJCSAgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCAKKwkJCQkJICAgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8CiAJCQkJCSAgIF9QQUdFX0hXX1NIQVJFRCB8IF9QQUdFX0ZMQUdTX0hBUkQpOwogCQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciA9IFBIWVNBRERSKHRvKTsKIAkJdW5zaWduZWQgbG9uZyBwM19hZGRyID0gUDNTRUcgKyAoYWRkcmVzcyAmIENBQ0hFX0FMSUFTKTsKLQkJcGdkX3QgKmRpciA9IHBnZF9vZmZzZXRfayhwM19hZGRyKTsKLQkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQoZGlyLCBwM19hZGRyKTsKKwkJcGdkX3QgKnBnZCA9IHBnZF9vZmZzZXRfayhwM19hZGRyKTsKKwkJcHVkX3QgKnB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBwM19hZGRyKTsKKwkJcG1kX3QgKnBtZCA9IHBtZF9vZmZzZXQocHVkLCBwM19hZGRyKTsKIAkJcHRlX3QgKnB0ZSA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgcDNfYWRkcik7CiAJCXB0ZV90IGVudHJ5OwogCQl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNjcsMjEgKzcwLDIyIEBACiAgKiBAYWRkcmVzczogVTAgYWRkcmVzcyB0byBiZSBtYXBwZWQKICAqIEBwYWdlOiBwYWdlICh2aXJ0X3RvX3BhZ2UodG8pKQogICovCi12b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIAordm9pZCBjb3B5X3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkgICAgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJX19zZXRfYml0KFBHX21hcHBlZCwgJnBhZ2UtPmZsYWdzKTsKIAlpZiAoKChhZGRyZXNzIF4gKHVuc2lnbmVkIGxvbmcpdG8pICYgQ0FDSEVfQUxJQVMpID09IDApCiAJCWNvcHlfcGFnZSh0bywgZnJvbSk7CiAJZWxzZSB7Ci0JCXBncHJvdF90IHBncHJvdCA9IF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCAKKwkJcGdwcm90X3QgcGdwcm90ID0gX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8CiAJCQkJCSAgIF9QQUdFX1JXIHwgX1BBR0VfQ0FDSEFCTEUgfAotCQkJCQkgICBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgCisJCQkJCSAgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfAogCQkJCQkgICBfUEFHRV9IV19TSEFSRUQgfCBfUEFHRV9GTEFHU19IQVJEKTsKIAkJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSBQSFlTQUREUih0byk7CiAJCXVuc2lnbmVkIGxvbmcgcDNfYWRkciA9IFAzU0VHICsgKGFkZHJlc3MgJiBDQUNIRV9BTElBUyk7Ci0JCXBnZF90ICpkaXIgPSBwZ2Rfb2Zmc2V0X2socDNfYWRkcik7Ci0JCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KGRpciwgcDNfYWRkcik7CisJCXBnZF90ICpwZ2QgPSBwZ2Rfb2Zmc2V0X2socDNfYWRkcik7CisJCXB1ZF90ICpwdWQgPSBwdWRfb2Zmc2V0KHBnZCwgcDNfYWRkcik7CisJCXBtZF90ICpwbWQgPSBwbWRfb2Zmc2V0KHB1ZCwgcDNfYWRkcik7CiAJCXB0ZV90ICpwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHAzX2FkZHIpOwogCQlwdGVfdCBlbnRyeTsKIAkJdW5zaWduZWQgbG9uZyBmbGFnczsKZGlmZiAtLWdpdCBhL2FyY2gvc2gvbW0vcG1iLmMgYi9hcmNoL3NoL21tL3BtYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZTc0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3NoL21tL3BtYi5jCkBAIC0wLDAgKzEsNDAwIEBACisvKgorICogYXJjaC9zaC9tbS9wbWIuYworICoKKyAqIFByaXZpbGVnZWQgU3BhY2UgTWFwcGluZyBCdWZmZXIgKFBNQikgU3VwcG9ydC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgUGF1bCBNdW5kdAorICoKKyAqIFAxL1AyIFNlY3Rpb24gbWFwcGluZyBkZWZpbml0aW9ucyBmcm9tIG1hcDMyLmgsIHdoaWNoIHdhczoKKyAqCisgKglDb3B5cmlnaHQgMjAwMyAoYykgTGluZW8gU29sdXRpb25zLEluYy4KKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9tbXUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBOUl9QTUJfRU5UUklFUwkxNgorCitzdGF0aWMga21lbV9jYWNoZV90ICpwbWJfY2FjaGU7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwbWJfbWFwOworCitzdGF0aWMgc3RydWN0IHBtYl9lbnRyeSBwbWJfaW5pdF9tYXBbXSA9IHsKKwkvKiB2cG4gICAgICAgICBwcG4gICAgICAgICBmbGFncyAodWIvc3ovYy93dCkgKi8KKworCS8qIFAxIFNlY3Rpb24gTWFwcGluZ3MgKi8KKwl7IDB4ODAwMDAwMDAsIDB4MDAwMDAwMDAsIFBNQl9TWl82NE0gIHwgUE1CX0MsIH0sCisJeyAweDg0MDAwMDAwLCAweDA0MDAwMDAwLCBQTUJfU1pfNjRNICB8IFBNQl9DLCB9LAorCXsgMHg4ODAwMDAwMCwgMHgwODAwMDAwMCwgUE1CX1NaXzEyOE0gfCBQTUJfQywgfSwKKwl7IDB4OTAwMDAwMDAsIDB4MTAwMDAwMDAsIFBNQl9TWl82NE0gIHwgUE1CX0MsIH0sCisJeyAweDk0MDAwMDAwLCAweDE0MDAwMDAwLCBQTUJfU1pfNjRNICB8IFBNQl9DLCB9LAorCXsgMHg5ODAwMDAwMCwgMHgxODAwMDAwMCwgUE1CX1NaXzY0TSAgfCBQTUJfQywgfSwKKworCS8qIFAyIFNlY3Rpb24gTWFwcGluZ3MgKi8KKwl7IDB4YTAwMDAwMDAsIDB4MDAwMDAwMDAsIFBNQl9VQiB8IFBNQl9TWl82NE0gIHwgUE1CX1dULCB9LAorCXsgMHhhNDAwMDAwMCwgMHgwNDAwMDAwMCwgUE1CX1VCIHwgUE1CX1NaXzY0TSAgfCBQTUJfV1QsIH0sCisJeyAweGE4MDAwMDAwLCAweDA4MDAwMDAwLCBQTUJfVUIgfCBQTUJfU1pfMTI4TSB8IFBNQl9XVCwgfSwKKwl7IDB4YjAwMDAwMDAsIDB4MTAwMDAwMDAsIFBNQl9VQiB8IFBNQl9TWl82NE0gIHwgUE1CX1dULCB9LAorCXsgMHhiNDAwMDAwMCwgMHgxNDAwMDAwMCwgUE1CX1VCIHwgUE1CX1NaXzY0TSAgfCBQTUJfV1QsIH0sCisJeyAweGI4MDAwMDAwLCAweDE4MDAwMDAwLCBQTUJfVUIgfCBQTUJfU1pfNjRNICB8IFBNQl9XVCwgfSwKK307CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBta19wbWJfZW50cnkodW5zaWduZWQgaW50IGVudHJ5KQoreworCXJldHVybiAoZW50cnkgJiBQTUJfRV9NQVNLKSA8PCBQTUJfRV9TSElGVDsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG1rX3BtYl9hZGRyKHVuc2lnbmVkIGludCBlbnRyeSkKK3sKKwlyZXR1cm4gbWtfcG1iX2VudHJ5KGVudHJ5KSB8IFBNQl9BRERSOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbWtfcG1iX2RhdGEodW5zaWduZWQgaW50IGVudHJ5KQoreworCXJldHVybiBta19wbWJfZW50cnkoZW50cnkpIHwgUE1CX0RBVEE7Cit9CisKK3N0cnVjdCBwbWJfZW50cnkgKnBtYl9hbGxvYyh1bnNpZ25lZCBsb25nIHZwbiwgdW5zaWduZWQgbG9uZyBwcG4sCisJCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlOworCisJcG1iZSA9IGttZW1fY2FjaGVfYWxsb2MocG1iX2NhY2hlLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBtYmUpCisJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCisJcG1iZS0+dnBuCT0gdnBuOworCXBtYmUtPnBwbgk9IHBwbjsKKwlwbWJlLT5mbGFncwk9IGZsYWdzOworCisJcmV0dXJuIHBtYmU7Cit9CisKK3ZvaWQgcG1iX2ZyZWUoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwlrbWVtX2NhY2hlX2ZyZWUocG1iX2NhY2hlLCBwbWJlKTsKK30KKworLyoKKyAqIE11c3QgYmUgaW4gUDIgZm9yIF9fc2V0X3BtYl9lbnRyeSgpCisgKi8KK2ludCBfX3NldF9wbWJfZW50cnkodW5zaWduZWQgbG9uZyB2cG4sIHVuc2lnbmVkIGxvbmcgcHBuLAorCQkgICAgdW5zaWduZWQgbG9uZyBmbGFncywgaW50ICplbnRyeSkKK3sKKwl1bnNpZ25lZCBpbnQgcG9zID0gKmVudHJ5OworCisJaWYgKHVubGlrZWx5KHBvcyA9PSBQTUJfTk9fRU5UUlkpKQorCQlwb3MgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZwbWJfbWFwLCBOUl9QTUJfRU5UUklFUyk7CisKK3JlcGVhdDoKKwlpZiAodW5saWtlbHkocG9zID4gTlJfUE1CX0VOVFJJRVMpKQorCQlyZXR1cm4gLUVOT1NQQzsKKworCWlmICh0ZXN0X2FuZF9zZXRfYml0KHBvcywgJnBtYl9tYXApKSB7CisJCXBvcyA9IGZpbmRfZmlyc3RfemVyb19iaXQoJnBtYl9tYXAsIE5SX1BNQl9FTlRSSUVTKTsKKwkJZ290byByZXBlYXQ7CisJfQorCisJY3RybF9vdXRsKHZwbiB8IFBNQl9WLCBta19wbWJfYWRkcihwb3MpKTsKKworI2lmZGVmIENPTkZJR19TSF9XUklURVRIUk9VR0gKKwkvKgorCSAqIFdoZW4gd2UgYXJlIGluIDMyLWJpdCBhZGRyZXNzIGV4dGVuZGVkIG1vZGUsIENDUi5DQiBiZWNvbWVzCisJICogaW52YWxpZCwgc28gY2FyZSBtdXN0IGJlIHRha2VuIHRvIG1hbnVhbGx5IGFkanVzdCBjYWNoZWFibGUKKwkgKiB0cmFuc2xhdGlvbnMuCisJICovCisJaWYgKGxpa2VseShmbGFncyAmIFBNQl9DKSkKKwkJZmxhZ3MgfD0gUE1CX1dUOworI2VuZGlmCisKKwljdHJsX291dGwocHBuIHwgZmxhZ3MgfCBQTUJfViwgbWtfcG1iX2RhdGEocG9zKSk7CisKKwkqZW50cnkgPSBwb3M7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNldF9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwlpbnQgcmV0OworCisJanVtcF90b19QMigpOworCXJldCA9IF9fc2V0X3BtYl9lbnRyeShwbWJlLT52cG4sIHBtYmUtPnBwbiwgcG1iZS0+ZmxhZ3MsICZwbWJlLT5lbnRyeSk7CisJYmFja190b19QMSgpOworCisJcmV0dXJuIHJldDsKK30KKwordm9pZCBjbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwl1bnNpZ25lZCBpbnQgZW50cnkgPSBwbWJlLT5lbnRyeTsKKwl1bnNpZ25lZCBsb25nIGFkZHI7CisKKwkvKgorCSAqIERvbid0IGFsbG93IGNsZWFyaW5nIG9mIHdpcmVkIGluaXQgZW50cmllcywgUDEgb3IgUDIgYWNjZXNzCisJICogd2l0aG91dCBhIGNvcnJlc3BvbmRpbmcgbWFwcGluZyBpbiB0aGUgUE1CIHdpbGwgbGVhZCB0byByZXNldAorCSAqIGJ5IHRoZSBUTEIuCisJICovCisJaWYgKHVubGlrZWx5KGVudHJ5IDwgQVJSQVlfU0laRShwbWJfaW5pdF9tYXApIHx8CisJCSAgICAgZW50cnkgPj0gTlJfUE1CX0VOVFJJRVMpKQorCQlyZXR1cm47CisKKwlqdW1wX3RvX1AyKCk7CisKKwkvKiBDbGVhciBWLWJpdCAqLworCWFkZHIgPSBta19wbWJfYWRkcihlbnRyeSk7CisJY3RybF9vdXRsKGN0cmxfaW5sKGFkZHIpICYgflBNQl9WLCBhZGRyKTsKKworCWFkZHIgPSBta19wbWJfZGF0YShlbnRyeSk7CisJY3RybF9vdXRsKGN0cmxfaW5sKGFkZHIpICYgflBNQl9WLCBhZGRyKTsKKworCWJhY2tfdG9fUDEoKTsKKworCWNsZWFyX2JpdChlbnRyeSwgJnBtYl9tYXApOworfQorCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKHBtYl9saXN0X2xvY2spOworc3RhdGljIHN0cnVjdCBwbWJfZW50cnkgKnBtYl9saXN0OworCitzdGF0aWMgaW5saW5lIHZvaWQgcG1iX2xpc3RfYWRkKHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpCit7CisJc3RydWN0IHBtYl9lbnRyeSAqKnAsICp0bXA7CisKKwlwID0gJnBtYl9saXN0OworCXdoaWxlICgodG1wID0gKnApICE9IE5VTEwpCisJCXAgPSAmdG1wLT5uZXh0OworCisJcG1iZS0+bmV4dCA9IHRtcDsKKwkqcCA9IHBtYmU7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwbWJfbGlzdF9kZWwoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSkKK3sKKwlzdHJ1Y3QgcG1iX2VudHJ5ICoqcCwgKnRtcDsKKworCWZvciAocCA9ICZwbWJfbGlzdDsgKHRtcCA9ICpwKTsgcCA9ICZ0bXAtPm5leHQpCisJCWlmICh0bXAgPT0gcG1iZSkgeworCQkJKnAgPSB0bXAtPm5leHQ7CisJCQlyZXR1cm47CisJCX0KK30KKworc3RhdGljIHN0cnVjdCB7CisJdW5zaWduZWQgbG9uZyBzaXplOworCWludCBmbGFnOworfSBwbWJfc2l6ZXNbXSA9IHsKKwl7IC5zaXplCT0gMHgyMDAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfNTEyTSwgfSwKKwl7IC5zaXplID0gMHgwODAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfMTI4TSwgfSwKKwl7IC5zaXplID0gMHgwNDAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfNjRNLCAgfSwKKwl7IC5zaXplID0gMHgwMTAwMDAwMCwgLmZsYWcgPSBQTUJfU1pfMTZNLCAgfSwKK307CisKK2xvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5cywKKwkgICAgICAgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwbWJfZW50cnkgKnBtYnA7CisJdW5zaWduZWQgbG9uZyB3YW50ZWQ7CisJaW50IHBtYl9mbGFncywgaTsKKworCS8qIENvbnZlcnQgdHlwaWNhbCBwZ3Byb3QgdmFsdWUgdG8gdGhlIFBNQiBlcXVpdmFsZW50ICovCisJaWYgKGZsYWdzICYgX1BBR0VfQ0FDSEFCTEUpIHsKKwkJaWYgKGZsYWdzICYgX1BBR0VfV1QpCisJCQlwbWJfZmxhZ3MgPSBQTUJfV1Q7CisJCWVsc2UKKwkJCXBtYl9mbGFncyA9IFBNQl9DOworCX0gZWxzZQorCQlwbWJfZmxhZ3MgPSBQTUJfV1QgfCBQTUJfVUI7CisKKwlwbWJwID0gTlVMTDsKKwl3YW50ZWQgPSBzaXplOworCithZ2FpbjoKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShwbWJfc2l6ZXMpOyBpKyspIHsKKwkJc3RydWN0IHBtYl9lbnRyeSAqcG1iZTsKKwkJaW50IHJldDsKKworCQlpZiAoc2l6ZSA8IHBtYl9zaXplc1tpXS5zaXplKQorCQkJY29udGludWU7CisKKwkJcG1iZSA9IHBtYl9hbGxvYyh2YWRkciwgcGh5cywgcG1iX2ZsYWdzIHwgcG1iX3NpemVzW2ldLmZsYWcpOworCQlpZiAoSVNfRVJSKHBtYmUpKQorCQkJcmV0dXJuIFBUUl9FUlIocG1iZSk7CisKKwkJcmV0ID0gc2V0X3BtYl9lbnRyeShwbWJlKTsKKwkJaWYgKHJldCAhPSAwKSB7CisJCQlwbWJfZnJlZShwbWJlKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKworCQlwaHlzCSs9IHBtYl9zaXplc1tpXS5zaXplOworCQl2YWRkcgkrPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKKwkJc2l6ZQktPSBwbWJfc2l6ZXNbaV0uc2l6ZTsKKworCQkvKgorCQkgKiBMaW5rIGFkamFjZW50IGVudHJpZXMgdGhhdCBzcGFuIG11bHRpcGxlIFBNQiBlbnRyaWVzCisJCSAqIGZvciBlYXNpZXIgdGVhci1kb3duLgorCQkgKi8KKwkJaWYgKGxpa2VseShwbWJwKSkKKwkJCXBtYnAtPmxpbmsgPSBwbWJlOworCisJCXBtYnAgPSBwbWJlOworCX0KKworCWlmIChzaXplID49IDB4MTAwMDAwMCkKKwkJZ290byBhZ2FpbjsKKworCXJldHVybiB3YW50ZWQgLSBzaXplOworfQorCit2b2lkIHBtYl91bm1hcCh1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJc3RydWN0IHBtYl9lbnRyeSAqKnAsICpwbWJlOworCisJZm9yIChwID0gJnBtYl9saXN0OyAocG1iZSA9ICpwKTsgcCA9ICZwbWJlLT5uZXh0KQorCQlpZiAocG1iZS0+dnBuID09IGFkZHIpCisJCQlicmVhazsKKworCWlmICh1bmxpa2VseSghcG1iZSkpCisJCXJldHVybjsKKworCVdBUk5fT04oIXRlc3RfYml0KHBtYmUtPmVudHJ5LCAmcG1iX21hcCkpOworCisJZG8geworCQlzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJsaW5rID0gcG1iZTsKKworCQljbGVhcl9wbWJfZW50cnkocG1iZSk7CisJCXBtYmUgPSBwbWJsaW5rLT5saW5rOworCisJCXBtYl9mcmVlKHBtYmxpbmspOworCX0gd2hpbGUgKHBtYmUpOworfQorCitzdGF0aWMgdm9pZCBwbWJfY2FjaGVfY3Rvcih2b2lkICpwbWIsIGttZW1fY2FjaGVfdCAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCBwbWJfZW50cnkgKnBtYmUgPSBwbWI7CisKKwltZW1zZXQocG1iLCAwLCBzaXplb2Yoc3RydWN0IHBtYl9lbnRyeSkpOworCisJc3Bpbl9sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7CisKKwlwbWJlLT5lbnRyeSA9IFBNQl9OT19FTlRSWTsKKwlwbWJfbGlzdF9hZGQocG1iZSk7CisKKwlzcGluX3VubG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworfQorCitzdGF0aWMgdm9pZCBwbWJfY2FjaGVfZHRvcih2b2lkICpwbWIsIGttZW1fY2FjaGVfdCAqY2FjaGVwLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXNwaW5fbG9ja19pcnEoJnBtYl9saXN0X2xvY2spOworCXBtYl9saXN0X2RlbChwbWIpOworCXNwaW5fdW5sb2NrX2lycSgmcG1iX2xpc3RfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHBtYl9pbml0KHZvaWQpCit7CisJdW5zaWduZWQgaW50IG5yX2VudHJpZXMgPSBBUlJBWV9TSVpFKHBtYl9pbml0X21hcCk7CisJdW5zaWduZWQgaW50IGVudHJ5OworCisJQlVHX09OKHVubGlrZWx5KG5yX2VudHJpZXMgPj0gTlJfUE1CX0VOVFJJRVMpKTsKKworCXBtYl9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJwbWIiLCBzaXplb2Yoc3RydWN0IHBtYl9lbnRyeSksCisJCQkJICAgICAgMCwgMCwgcG1iX2NhY2hlX2N0b3IsIHBtYl9jYWNoZV9kdG9yKTsKKwlCVUdfT04oIXBtYl9jYWNoZSk7CisKKwlqdW1wX3RvX1AyKCk7CisKKwkvKgorCSAqIE9yZGVyaW5nIGlzIGltcG9ydGFudCwgUDIgbXVzdCBiZSBtYXBwZWQgaW4gdGhlIFBNQiBiZWZvcmUgd2UKKwkgKiBjYW4gc2V0IFBNQi5TRSwgYW5kIFAxIG11c3QgYmUgbWFwcGVkIGJlZm9yZSB3ZSBqdW1wIGJhY2sgdG8KKwkgKiBQMSBzcGFjZS4KKwkgKi8KKwlmb3IgKGVudHJ5ID0gMDsgZW50cnkgPCBucl9lbnRyaWVzOyBlbnRyeSsrKSB7CisJCXN0cnVjdCBwbWJfZW50cnkgKnBtYmUgPSBwbWJfaW5pdF9tYXAgKyBlbnRyeTsKKworCQlfX3NldF9wbWJfZW50cnkocG1iZS0+dnBuLCBwbWJlLT5wcG4sIHBtYmUtPmZsYWdzLCAmZW50cnkpOworCX0KKworCWN0cmxfb3V0bCgwLCBQTUJfSVJNQ1IpOworCisJLyogUE1CLlNFIGFuZCBVQls3XSAqLworCWN0cmxfb3V0bCgoMSA8PCAzMSkgfCAoMSA8PCA3KSwgUE1CX1BBU0NSKTsKKworCWJhY2tfdG9fUDEoKTsKKworCXJldHVybiAwOworfQorYXJjaF9pbml0Y2FsbChwbWJfaW5pdCk7CisKK3N0YXRpYyBpbnQgcG1iX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqZmlsZSwgdm9pZCAqaXRlcikKK3sKKwlpbnQgaTsKKworCXNlcV9wcmludGYoZmlsZSwgIlY6IFZhbGlkLCBDOiBDYWNoZWFibGUsIFdUOiBXcml0ZS1UaHJvdWdoXG4iCisJCQkgIkNCOiBDb3B5LUJhY2ssIEI6IEJ1ZmZlcmVkLCBVQjogVW5idWZmZXJlZFxuIik7CisJc2VxX3ByaW50ZihmaWxlLCAiZXR5ICAgdnBuICBwcG4gIHNpemUgICBmbGFnc1xuIik7CisKKwlmb3IgKGkgPSAwOyBpIDwgTlJfUE1CX0VOVFJJRVM7IGkrKykgeworCQl1bnNpZ25lZCBsb25nIGFkZHIsIGRhdGE7CisJCXVuc2lnbmVkIGludCBzaXplOworCQljaGFyICpzel9zdHIgPSBOVUxMOworCisJCWFkZHIgPSBjdHJsX2lubChta19wbWJfYWRkcihpKSk7CisJCWRhdGEgPSBjdHJsX2lubChta19wbWJfZGF0YShpKSk7CisKKwkJc2l6ZSA9IGRhdGEgJiBQTUJfU1pfTUFTSzsKKwkJc3pfc3RyID0gKHNpemUgPT0gUE1CX1NaXzE2TSkgID8gIiAxNk1CIjoKKwkJCSAoc2l6ZSA9PSBQTUJfU1pfNjRNKSAgPyAiIDY0TUIiOgorCQkJIChzaXplID09IFBNQl9TWl8xMjhNKSA/ICIxMjhNQiI6CisJCQkJCSAgICAgICAgICI1MTJNQiI7CisKKwkJLyogMDI6IFYgMHg4OCAweDA4IDEyOE1CIEMgQ0IgIEIgKi8KKwkJc2VxX3ByaW50ZihmaWxlLCAiJTAyZDogJWMgMHglMDJseCAweCUwMmx4ICVzICVjICVzICVzXG4iLAorCQkJICAgaSwgKChhZGRyICYgUE1CX1YpICYmIChkYXRhICYgUE1CX1YpKSA/ICdWJyA6ICcgJywKKwkJCSAgIChhZGRyID4+IDI0KSAmIDB4ZmYsIChkYXRhID4+IDI0KSAmIDB4ZmYsCisJCQkgICBzel9zdHIsIChkYXRhICYgUE1CX0MpID8gJ0MnIDogJyAnLAorCQkJICAgKGRhdGEgJiBQTUJfV1QpID8gIldUIiA6ICJDQiIsCisJCQkgICAoZGF0YSAmIFBNQl9VQikgPyAiVUIiIDogIiBCIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcG1iX2RlYnVnZnNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgcG1iX3NlcV9zaG93LCBOVUxMKTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcG1iX2RlYnVnZnNfZm9wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLm9wZW4JCT0gcG1iX2RlYnVnZnNfb3BlbiwKKwkucmVhZAkJPSBzZXFfcmVhZCwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBfX2luaXQgcG1iX2RlYnVnZnNfaW5pdCh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWRlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoInBtYiIsIFNfSUZSRUcgfCBTX0lSVUdPLAorCQkJCSAgICAgTlVMTCwgTlVMTCwgJnBtYl9kZWJ1Z2ZzX2ZvcHMpOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKKworCXJldHVybiAwOworfQorcG9zdGNvcmVfaW5pdGNhbGwocG1iX2RlYnVnZnNfaW5pdCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1mbHVzaC5jIGIvYXJjaC9zaC9tbS90bGItZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2VjN2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9zaC9tbS90bGItZmx1c2guYwpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIFRMQiBmbHVzaGluZyBvcGVyYXRpb25zIGZvciBTSCB3aXRoIGFuIE1NVS4KKyAqCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5ICBOaWliZSBZdXRha2EKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQorICogZm9yIG1vcmUgZGV0YWlscy4KKyAqLworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKK3ZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgcGFnZSkKK3sKKwlpZiAodm1hLT52bV9tbSAmJiB2bWEtPnZtX21tLT5jb250ZXh0LmlkICE9IE5PX0NPTlRFWFQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKwkJdW5zaWduZWQgbG9uZyBhc2lkOworCQl1bnNpZ25lZCBsb25nIHNhdmVkX2FzaWQgPSBNTVVfTk9fQVNJRDsKKworCQlhc2lkID0gdm1hLT52bV9tbS0+Y29udGV4dC5pZCAmIE1NVV9DT05URVhUX0FTSURfTUFTSzsKKwkJcGFnZSAmPSBQQUdFX01BU0s7CisKKwkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCQlpZiAodm1hLT52bV9tbSAhPSBjdXJyZW50LT5tbSkgeworCQkJc2F2ZWRfYXNpZCA9IGdldF9hc2lkKCk7CisJCQlzZXRfYXNpZChhc2lkKTsKKwkJfQorCQlfX2ZsdXNoX3RsYl9wYWdlKGFzaWQsIHBhZ2UpOworCQlpZiAoc2F2ZWRfYXNpZCAhPSBNTVVfTk9fQVNJRCkKKwkJCXNldF9hc2lkKHNhdmVkX2FzaWQpOworCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJfQorfQorCit2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHZtYS0+dm1fbW07CisKKwlpZiAobW0tPmNvbnRleHQuaWQgIT0gTk9fQ09OVEVYVCkgeworCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCQlpbnQgc2l6ZTsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CisJCWlmIChzaXplID4gKE1NVV9OVExCX0VOVFJJRVMvNCkpIHsgLyogVG9vIG1hbnkgVExCIHRvIGZsdXNoICovCisJCQltbS0+Y29udGV4dC5pZCA9IE5PX0NPTlRFWFQ7CisJCQlpZiAobW0gPT0gY3VycmVudC0+bW0pCisJCQkJYWN0aXZhdGVfY29udGV4dChtbSk7CisJCX0gZWxzZSB7CisJCQl1bnNpZ25lZCBsb25nIGFzaWQ7CisJCQl1bnNpZ25lZCBsb25nIHNhdmVkX2FzaWQgPSBNTVVfTk9fQVNJRDsKKworCQkJYXNpZCA9IG1tLT5jb250ZXh0LmlkICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOworCQkJc3RhcnQgJj0gUEFHRV9NQVNLOworCQkJZW5kICs9IChQQUdFX1NJWkUgLSAxKTsKKwkJCWVuZCAmPSBQQUdFX01BU0s7CisJCQlpZiAobW0gIT0gY3VycmVudC0+bW0pIHsKKwkJCQlzYXZlZF9hc2lkID0gZ2V0X2FzaWQoKTsKKwkJCQlzZXRfYXNpZChhc2lkKTsKKwkJCX0KKwkJCXdoaWxlIChzdGFydCA8IGVuZCkgeworCQkJCV9fZmx1c2hfdGxiX3BhZ2UoYXNpZCwgc3RhcnQpOworCQkJCXN0YXJ0ICs9IFBBR0VfU0laRTsKKwkJCX0KKwkJCWlmIChzYXZlZF9hc2lkICE9IE1NVV9OT19BU0lEKQorCQkJCXNldF9hc2lkKHNhdmVkX2FzaWQpOworCQl9CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2tlcm5lbF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBzaXplOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXNpemUgPSAoZW5kIC0gc3RhcnQgKyAoUEFHRV9TSVpFIC0gMSkpID4+IFBBR0VfU0hJRlQ7CisJaWYgKHNpemUgPiAoTU1VX05UTEJfRU5UUklFUy80KSkgeyAvKiBUb28gbWFueSBUTEIgdG8gZmx1c2ggKi8KKwkJZmx1c2hfdGxiX2FsbCgpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGxvbmcgYXNpZDsKKwkJdW5zaWduZWQgbG9uZyBzYXZlZF9hc2lkID0gZ2V0X2FzaWQoKTsKKworCQlhc2lkID0gaW5pdF9tbS5jb250ZXh0LmlkICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLOworCQlzdGFydCAmPSBQQUdFX01BU0s7CisJCWVuZCArPSAoUEFHRV9TSVpFIC0gMSk7CisJCWVuZCAmPSBQQUdFX01BU0s7CisJCXNldF9hc2lkKGFzaWQpOworCQl3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKwkJCV9fZmx1c2hfdGxiX3BhZ2UoYXNpZCwgc3RhcnQpOworCQkJc3RhcnQgKz0gUEFHRV9TSVpFOworCQl9CisJCXNldF9hc2lkKHNhdmVkX2FzaWQpOworCX0KKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKK3ZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQoreworCS8qIEludmFsaWRhdGUgYWxsIFRMQiBvZiB0aGlzIHByb2Nlc3MuICovCisJLyogSW5zdGVhZCBvZiBpbnZhbGlkYXRpbmcgZWFjaCBUTEIsIHdlIGdldCBuZXcgTU1VIGNvbnRleHQuICovCisJaWYgKG1tLT5jb250ZXh0LmlkICE9IE5PX0NPTlRFWFQpIHsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCW1tLT5jb250ZXh0LmlkID0gTk9fQ09OVEVYVDsKKwkJaWYgKG1tID09IGN1cnJlbnQtPm1tKQorCQkJYWN0aXZhdGVfY29udGV4dChtbSk7CisJCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwl9Cit9CisKK3ZvaWQgZmx1c2hfdGxiX2FsbCh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0YXR1czsKKworCS8qCisJICogRmx1c2ggYWxsIHRoZSBUTEIuCisJICoKKwkgKiBXcml0ZSB0byB0aGUgTU1VIGNvbnRyb2wgcmVnaXN0ZXIncyBiaXQ6CisJICoJVEYtYml0IGZvciBTSC0zLCBUSS1iaXQgZm9yIFNILTQuCisJICogICAgICBJdCdzIHNhbWUgcG9zaXRpb24sIGJpdCAjMi4KKwkgKi8KKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3RhdHVzID0gY3RybF9pbmwoTU1VQ1IpOworCXN0YXR1cyB8PSAweDA0OworCWN0cmxfb3V0bChzdGF0dXMsIE1NVUNSKTsKKwljdHJsX2JhcnJpZXIoKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3NoL21tL3RsYi1zaDQuYyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCmluZGV4IDExNWIxYjYuLjgxMmIyZDUgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvbW0vdGxiLXNoNC5jCisrKyBiL2FyY2gvc2gvbW0vdGxiLXNoNC5jCkBAIC0zNiw3ICszNiw2IEBACiAJdW5zaWduZWQgbG9uZyB2cG47CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgbG9uZyBwZm47Ci0JdW5zaWduZWQgbG9uZyBwdGVhOwogCiAJLyogUHRyYWNlIG1heSBjYWxsIHRoaXMgcm91dGluZS4gKi8KIAlpZiAodm1hICYmIGN1cnJlbnQtPmFjdGl2ZV9tbSAhPSB2bWEtPnZtX21tKQpAQCAtNTksMTAgKzU4LDExIEBACiAJY3RybF9vdXRsKHZwbiwgTU1VX1BURUgpOwogCiAJcHRldmFsID0gcHRlX3ZhbChwdGUpOworCiAJLyogU2V0IFBURUEgcmVnaXN0ZXIgKi8KLQkvKiBUT0RPOiBtYWtlIHRoaXMgbG9vayBsZXNzIGhhY2t5ICovCi0JcHRlYSA9ICgocHRldmFsID4+IDI4KSAmIDB4ZSkgfCAocHRldmFsICYgMHgxKTsKLQljdHJsX291dGwocHRlYSwgTU1VX1BURUEpOworCWlmIChjcHVfZGF0YS0+ZmxhZ3MgJiBDUFVfSEFTX1BURUEpCisJCS8qIFRPRE86IG1ha2UgdGhpcyBsb29rIGxlc3MgaGFja3kgKi8KKwkJY3RybF9vdXRsKCgocHRldmFsID4+IDI4KSAmIDB4ZSkgfCAocHRldmFsICYgMHgxKSwgTU1VX1BURUEpOwogCiAJLyogU2V0IFBURUwgcmVnaXN0ZXIgKi8KIAlwdGV2YWwgJj0gX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSzsgLyogZHJvcCBzb2Z0d2FyZSBmbGFncyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9vcHJvZmlsZS9NYWtlZmlsZSBiL2FyY2gvc2gvb3Byb2ZpbGUvTWFrZWZpbGUKaW5kZXggNjg2NzM4ZC4uMWYyNWQ5YiAxMDA2NDQKLS0tIGEvYXJjaC9zaC9vcHJvZmlsZS9NYWtlZmlsZQorKysgYi9hcmNoL3NoL29wcm9maWxlL01ha2VmaWxlCkBAIC03LDcgKzcsMTEgQEAKIAkJdGltZXJfaW50Lm8gKQogCiBwcm9mZHJ2ci15CQkJCTo9IG9wX21vZGVsX251bGwubworCisjIFNINzc1MC1zdHlsZSBwZXJmb3JtYW5jZSBjb3VudGVycyBleGlzdCBhY3Jvc3MgNzc1MC83NzUwUyBhbmQgNzA5MS4KK3Byb2ZkcnZyLSQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MFMpCTo9IG9wX21vZGVsX3NoNzc1MC5vCiBwcm9mZHJ2ci0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApCTo9IG9wX21vZGVsX3NoNzc1MC5vCitwcm9mZHJ2ci0kKENPTkZJR19DUFVfU1VCVFlQRV9TSDcwOTEpCTo9IG9wX21vZGVsX3NoNzc1MC5vCiAKIG9wcm9maWxlLXkJCQkJOj0gJChEUklWRVJfT0JKUykgJChwcm9mZHJ2ci15KQogCmRpZmYgLS1naXQgYS9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMgYi9hcmNoL3NoL3Rvb2xzL21hY2gtdHlwZXMKaW5kZXggMTgyZmU5MC4uYWM1NzYzOCAxMDA2NDQKLS0tIGEvYXJjaC9zaC90b29scy9tYWNoLXR5cGVzCisrKyBiL2FyY2gvc2gvdG9vbHMvbWFjaC10eXBlcwpAQCAtOCwxNiArOCwxNSBAQAogU0UJCQlTSF9TT0xVVElPTl9FTkdJTkUKIDc3NTFTRQkJCVNIXzc3NTFfU09MVVRJT05fRU5HSU5FCQkKIDczMDBTRQkJCVNIXzczMDBfU09MVVRJT05fRU5HSU5FCis3MzQzU0UJCQlTSF83MzQzX1NPTFVUSU9OX0VOR0lORQogNzMxODBTRQkJCVNIXzczMTgwX1NPTFVUSU9OX0VOR0lORQogNzc1MVNZU1RFTUgJCVNIXzc3NTFfU1lTVEVNSAogSFA2WFgJCQlTSF9IUDZYWAogSEQ2NDQ2MQkJCUhENjQ0NjEKIEhENjQ0NjUJCQlIRDY0NDY1Ci1TSDIwMDAJCQlTSF9TSDIwMDAKIFNBVFVSTgkJCVNIX1NBVFVSTgogRFJFQU1DQVNUCQlTSF9EUkVBTUNBU1QKIEJJR1NVUgkJCVNIX0JJR1NVUgotQURYCQkJU0hfQURYCiBNUEMxMjExCQkJU0hfTVBDMTIxMQogU05BUEdFQVIJCVNIX1NFQ1VSRUVER0U1NDEwCiBIUzc3NTFSVk9JUAkJU0hfSFM3NzUxUlZPSVAKQEAgLTI1LDQgKzI0LDkgQEAKIEVET1NLNzcwNQkJU0hfRURPU0s3NzA1CiBTSDQyMDJfTUlDUk9ERVYJCVNIX1NINDIwMl9NSUNST0RFVgogU0gwMwkJCVNIX1NIMDMKLQorTEFORElTSwkJCVNIX0xBTkRJU0sKK1I3NzgwUlAJCQlTSF9SNzc4MFJQCitSNzc4ME1QCQkJU0hfUjc3ODBNUAorVElUQU4JCQlTSF9USVRBTgorU0hNSU4JCQlTSF9TSE1JTgorNzcxMFZPSVBHVwkJU0hfNzcxMFZPSVBHVwpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3NoNjQva2VybmVsL3RpbWUuYwppbmRleCBiODE2MmU1Li45YzRhMzhhIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3NoNjQva2VybmVsL3RpbWUuYwpAQCAtMTA3LDggKzEwNyw2IEBACiAKICNkZWZpbmUgVElDS19TSVpFICh0aWNrX25zZWMgLyAxMDAwKQogCi1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7Ci0KIHN0YXRpYyB1bnNpZ25lZCBsb25nIHRtdV9iYXNlLCBydGNfYmFzZTsKIHVuc2lnbmVkIGxvbmcgY3ByY19iYXNlOwogCkBAIC0xOTQsMTMgKzE5Miw2IEBACiAJZG8gewogCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAkJdXNlYyA9IHVzZWNzX3NpbmNlX3RpY2soKTsKLQkJewotCQkJdW5zaWduZWQgbG9uZyBsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKLQotCQkJaWYgKGxvc3QpCi0JCQkJdXNlYyArPSBsb3N0ICogKDEwMDAwMDAgLyBIWik7Ci0JCX0KLQogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgKz0geHRpbWUudHZfbnNlYyAvIDEwMDA7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CkBAIC0yMjksOCArMjIwLDcgQEAKIAkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQogCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCiAJICovCi0JbnNlYyAtPSAxMDAwICogKHVzZWNzX3NpbmNlX3RpY2soKSArCi0JCQkJKGppZmZpZXMgLSB3YWxsX2ppZmZpZXMpICogKDEwMDAwMDAgLyBIWikpOworCW5zZWMgLT0gMTAwMCAqIHVzZWNzX3NpbmNlX3RpY2soKTsKIAogCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CiAJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKQEAgLTI5OCw3ICsyODgsNyBAQAogCWFzbSAoImdldGNvbiBjcjYyLCAlMCIgOiAiPXIiIChjdXJyZW50X2N0YykpOwogCWN0Y19sYXN0X2ludGVycnVwdCA9ICh1bnNpZ25lZCBsb25nKSBjdXJyZW50X2N0YzsKIAotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9zaDY0L21tL2ZhdWx0LmMgYi9hcmNoL3NoNjQvbW0vZmF1bHQuYwppbmRleCBmMDhkMGVhLi44ZTJmNmMyIDEwMDY0NAotLS0gYS9hcmNoL3NoNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3NoNjQvbW0vZmF1bHQuYwpAQCAtMjc3LDcgKzI3Nyw3IEBACiAJCQlzaG93X3JlZ3MocmVncyk7CiAjZW5kaWYKIAkJfQotCQlpZiAodHNrLT5waWQgPT0gMSkgeworCQlpZiAoaXNfaW5pdCh0c2spKSB7CiAJCQlwYW5pYygiSU5JVCBoYWQgdXNlciBtb2RlIGJhZF9hcmVhXG4iKTsKIAkJfQogCQl0c2stPnRocmVhZC5hZGRyZXNzID0gYWRkcmVzczsKQEAgLTMxOSwxNCArMzE5LDE0IEBACiAgKiB1cyB1bmFibGUgdG8gaGFuZGxlIHRoZSBwYWdlIGZhdWx0IGdyYWNlZnVsbHkuCiAgKi8KIG91dF9vZl9tZW1vcnk6Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJcGFuaWMoIklOSVQgb3V0IG9mIG1lbW9yeVxuIik7CiAJCXlpZWxkKCk7CiAJCWdvdG8gc3Vydml2ZTsKIAl9CiAJcHJpbnRrKCJmYXVsdDpPdXQgb2YgbWVtb3J5XG4iKTsKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCWlmIChjdXJyZW50LT5waWQgPT0gMSkgeworCWlmIChpc19pbml0KGN1cnJlbnQpKSB7CiAJCXlpZWxkKCk7CiAJCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKIAkJZ290byBzdXJ2aXZlOwpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jIGIvYXJjaC9zcGFyYy9rZXJuZWwvcGNpYy5jCmluZGV4IGJmZDMxYWEuLmVkYjZjYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3BjaWMuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9wY2ljLmMKQEAgLTcxMiw3ICs3MTIsNyBAQAogewogCXdyaXRlX3NlcWxvY2soJnh0aW1lX2xvY2spOwkvKiBEdW1teSwgdG8gc2hvdyB0aGF0IHdlIHJlbWVtYmVyICovCiAJcGNpY19jbGVhcl9jbG9ja19pcnEoKTsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKQEAgLTc2NSw4ICs3NjUsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiBzdGF0aWMgdm9pZCBwY2lfZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtNzc1LDI2ICs3NzMsMTcgQEAKIAl1bnNpZ25lZCBsb25nIG1heF9udHBfdGljayA9IHRpY2tfdXNlYyAtIHRpY2thZGo7CiAKIAlkbyB7Ci0JCXVuc2lnbmVkIGxvbmcgbG9zdDsKLQogCQlzZXEgPSByZWFkX3NlcWJlZ2luX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAkJdXNlYyA9IGRvX2dldHRpbWVvZmZzZXQoKTsKLQkJbG9zdCA9IGppZmZpZXMgLSB3YWxsX2ppZmZpZXM7CiAKIAkJLyoKIAkJICogSWYgdGltZV9hZGp1c3QgaXMgbmVnYXRpdmUgdGhlbiBOVFAgaXMgc2xvd2luZyB0aGUgY2xvY2sKIAkJICogc28gbWFrZSBzdXJlIG5vdCB0byBnbyBpbnRvIG5leHQgcG9zc2libGUgaW50ZXJ2YWwuCiAJCSAqIEJldHRlciB0byBsb3NlIHNvbWUgYWNjdXJhY3kgdGhhbiBoYXZlIHRpbWUgZ28gYmFja3dhcmRzLi4KIAkJICovCi0JCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKSB7CisJCWlmICh1bmxpa2VseSh0aW1lX2FkanVzdCA8IDApKQogCQkJdXNlYyA9IG1pbih1c2VjLCBtYXhfbnRwX3RpY2spOwogCi0JCQlpZiAobG9zdCkKLQkJCQl1c2VjICs9IGxvc3QgKiBtYXhfbnRwX3RpY2s7Ci0JCX0KLQkJZWxzZSBpZiAodW5saWtlbHkobG9zdCkpCi0JCQl1c2VjICs9IGxvc3QgKiB0aWNrX3VzZWM7Ci0KIAkJc2VjID0geHRpbWUudHZfc2VjOwogCQl1c2VjICs9ICh4dGltZS50dl9uc2VjIC8gMTAwMCk7CiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CkBAIC04MTksOCArODA4LDcgQEAKIAkgKiB3YWxsIHRpbWUuICBEaXNjb3ZlciB3aGF0IGNvcnJlY3Rpb24gZ2V0dGltZW9mZGF5KCkgd291bGQgaGF2ZQogCSAqIG1hZGUsIGFuZCB0aGVuIHVuZG8gaXQhCiAJICovCi0JdHYtPnR2X25zZWMgLT0gMTAwMCAqIChkb19nZXR0aW1lb2Zmc2V0KCkgKyAKLQkJCQkoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiAoVVNFQ19QRVJfU0VDIC8gSFopKTsKKwl0di0+dHZfbnNlYyAtPSAxMDAwICogZG9fZ2V0dGltZW9mZnNldCgpOwogCXdoaWxlICh0di0+dHZfbnNlYyA8IDApIHsKIAkJdHYtPnR2X25zZWMgKz0gTlNFQ19QRVJfU0VDOwogCQl0di0+dHZfc2VjLS07CmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKaW5kZXggODQ1MDgxYjAuLmUxMGRjODMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmMva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC90aW1lLmMKQEAgLTQzLDggKzQzLDYgQEAKICNpbmNsdWRlIDxhc20vcGNpYy5oPgogI2luY2x1ZGUgPGFzbS9vZl9kZXZpY2UuaD4KIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogZW51bSBzcGFyY19jbG9ja190eXBlIHNwX2Nsb2NrX3R5cDsKIERFRklORV9TUElOTE9DSyhtb3N0ZWtfbG9jayk7CkBAIC0xMjgsNyArMTI2LDcgQEAKICNlbmRpZgogCWNsZWFyX2Nsb2NrX2lycSgpOwogCi0JZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogI2VuZGlmCkBAIC00NDksNyArNDQ3LDcgQEAKIAogLyogT2ssIG15IGN1dGUgYXNtIGF0b21pY2l0eSB0cmljayBkb2Vzbid0IHdvcmsgYW55bW9yZS4KICAqIFRoZXJlIGFyZSBqdXN0IHRvbyBtYW55IHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgcHJvdGVjdGVkCi0gKiBub3cgKGJvdGggbWVtYmVycyBvZiB4dGltZSwgd2FsbF9qaWZmaWVzLCBldCBhbC4pCisgKiBub3cgKGJvdGggbWVtYmVycyBvZiB4dGltZSwgZXQgYWwuKQogICovCiB2b2lkIGRvX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpCiB7CkBAIC00NTksMjYgKzQ1NywxNyBAQAogCXVuc2lnbmVkIGxvbmcgbWF4X250cF90aWNrID0gdGlja191c2VjIC0gdGlja2FkajsKIAogCWRvIHsKLQkJdW5zaWduZWQgbG9uZyBsb3N0OwotCiAJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogCQl1c2VjID0gZG9fZ2V0dGltZW9mZnNldCgpOwotCQlsb3N0ID0gamlmZmllcyAtIHdhbGxfamlmZmllczsKIAogCQkvKgogCQkgKiBJZiB0aW1lX2FkanVzdCBpcyBuZWdhdGl2ZSB0aGVuIE5UUCBpcyBzbG93aW5nIHRoZSBjbG9jawogCQkgKiBzbyBtYWtlIHN1cmUgbm90IHRvIGdvIGludG8gbmV4dCBwb3NzaWJsZSBpbnRlcnZhbC4KIAkJICogQmV0dGVyIHRvIGxvc2Ugc29tZSBhY2N1cmFjeSB0aGFuIGhhdmUgdGltZSBnbyBiYWNrd2FyZHMuLgogCQkgKi8KLQkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpIHsKKwkJaWYgKHVubGlrZWx5KHRpbWVfYWRqdXN0IDwgMCkpCiAJCQl1c2VjID0gbWluKHVzZWMsIG1heF9udHBfdGljayk7CiAKLQkJCWlmIChsb3N0KQotCQkJCXVzZWMgKz0gbG9zdCAqIG1heF9udHBfdGljazsKLQkJfQotCQllbHNlIGlmICh1bmxpa2VseShsb3N0KSkKLQkJCXVzZWMgKz0gbG9zdCAqIHRpY2tfdXNlYzsKLQogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgKz0gKHh0aW1lLnR2X25zZWMgLyAxMDAwKTsKIAl9IHdoaWxlIChyZWFkX3NlcXJldHJ5X2lycXJlc3RvcmUoJnh0aW1lX2xvY2ssIHNlcSwgZmxhZ3MpKTsKQEAgLTUyMSw4ICs1MTAsNyBAQAogCSAqIHdhbGwgdGltZS4gIERpc2NvdmVyIHdoYXQgY29ycmVjdGlvbiBnZXR0aW1lb2ZkYXkoKSB3b3VsZCBoYXZlCiAJICogbWFkZSwgYW5kIHRoZW4gdW5kbyBpdCEKIAkgKi8KLQluc2VjIC09IDEwMDAgKiAoZG9fZ2V0dGltZW9mZnNldCgpICsKLQkJCShqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIChVU0VDX1BFUl9TRUMgLyBIWikpOworCW5zZWMgLT0gMTAwMCAqIGRvX2dldHRpbWVvZmZzZXQoKTsKIAogCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CiAJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmMvbGliL2NvcHlfdXNlci5TIGIvYXJjaC9zcGFyYy9saWIvY29weV91c2VyLlMKaW5kZXggNTc3NTA1Yi4uZWYwOTViNiAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYy9saWIvY29weV91c2VyLlMKKysrIGIvYXJjaC9zcGFyYy9saWIvY29weV91c2VyLlMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAjaW5jbHVkZSA8YXNtL2FzbW1hY3JvLmg+CiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vdGhyZWFkX2luZm8uaD4KIAogLyogV29yayBhcm91bmQgY3BwIC1yb2IgKi8KICNkZWZpbmUgQUxMT0MgI2FsbG9jCkBAIC0zNjYsNiArMzY3LDkgQEAKIAlibHUJMWYKIAkgY21wCSVvMSwgJWcxCiAJYmdldQkxZgorCSBsZAlbJWc2ICsgVElfUFJFRU1QVF0sICVnMQorCWNtcAklZzEsIDAKKwlibmUJMWYKIAkgbm9wCiAJc2F2ZQklc3AsIC02NCwgJXNwCiAJbW92CSVpMCwgJW8wCmRpZmYgLS1naXQgYS9hcmNoL3NwYXJjNjQvZGVmY29uZmlnIGIvYXJjaC9zcGFyYzY0L2RlZmNvbmZpZwppbmRleCA1MWNmNjAyLi4wZmJkYWE1IDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQvZGVmY29uZmlnCisrKyBiL2FyY2gvc3BhcmM2NC9kZWZjb25maWcKQEAgLTEsNyArMSw3IEBACiAjCiAjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CiAjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgKLSMgU2F0IFNlcCAyMyAxODozMjoxOSAyMDA2CisjIFR1ZSBTZXAgMjYgMjM6MDk6MzUgMjAwNgogIwogQ09ORklHX1NQQVJDPXkKIENPTkZJR19TUEFSQzY0PXkKQEAgLTE0MSw2ICsxNDEsNyBAQAogQ09ORklHX1NVTl9JTz15CiBDT05GSUdfUENJPXkKIENPTkZJR19QQ0lfRE9NQUlOUz15CisjIENPTkZJR19QQ0lfTVVMVElUSFJFQURfUFJPQkUgaXMgbm90IHNldAogIyBDT05GSUdfUENJX0RFQlVHIGlzIG5vdCBzZXQKIENPTkZJR19TVU5fT1BFTlBST01GUz1tCiBDT05GSUdfU1BBUkMzMl9DT01QQVQ9eQpAQCAtMTk0LDIxICsxOTUsOSBAQAogQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTD15CiBDT05GSUdfSU5FVF9ESUFHPXkKIENPTkZJR19JTkVUX1RDUF9ESUFHPXkKLUNPTkZJR19UQ1BfQ09OR19BRFZBTkNFRD15Ci0KLSMKLSMgVENQIGNvbmdlc3Rpb24gY29udHJvbAotIwotQ09ORklHX1RDUF9DT05HX0JJQz15Ci1DT05GSUdfVENQX0NPTkdfQ1VCSUM9bQotQ09ORklHX1RDUF9DT05HX1dFU1RXT09EPW0KLUNPTkZJR19UQ1BfQ09OR19IVENQPW0KLUNPTkZJR19UQ1BfQ09OR19IU1RDUD1tCi1DT05GSUdfVENQX0NPTkdfSFlCTEE9bQotQ09ORklHX1RDUF9DT05HX1ZFR0FTPW0KLUNPTkZJR19UQ1BfQ09OR19TQ0FMQUJMRT1tCi1DT05GSUdfVENQX0NPTkdfTFA9bQotQ09ORklHX1RDUF9DT05HX1ZFTk89bQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKIENPTkZJR19JUFY2PW0KIENPTkZJR19JUFY2X1BSSVZBQ1k9eQogQ09ORklHX0lQVjZfUk9VVEVSX1BSRUY9eQpAQCAtMjQ3LDYgKzIzNiw3IEBACiAjIERDQ1AgS2VybmVsIEhhY2tpbmcKICMKICMgQ09ORklHX0lQX0RDQ1BfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RDQ1BQUk9CRSBpcyBub3Qgc2V0CiAKICMKICMgU0NUUCBDb25maWd1cmF0aW9uIChFWFBFUklNRU5UQUwpCkBAIC00MDEsNiArMzkxLDcgQEAKICMKIENPTkZJR19SQUlEX0FUVFJTPW0KIENPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX05FVExJTks9eQogQ09ORklHX1NDU0lfUFJPQ19GUz15CiAKICMKQEAgLTQyMiwxMiArNDEzLDEzIEBACiAjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAogCiAjCi0jIFNDU0kgVHJhbnNwb3J0IEF0dHJpYnV0ZXMKKyMgU0NTSSBUcmFuc3BvcnRzCiAjCiBDT05GSUdfU0NTSV9TUElfQVRUUlM9eQogQ09ORklHX1NDU0lfRkNfQVRUUlM9eQogQ09ORklHX1NDU0lfSVNDU0lfQVRUUlM9bQogIyBDT05GSUdfU0NTSV9TQVNfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKIAogIwogIyBTQ1NJIGxvdy1sZXZlbCBkcml2ZXJzCkBAIC00NDAsMTYgKzQzMiwxOCBAQAogIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CiAjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAogIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0Ci0jIENPTkZJR19TQ1NJX1NBVEEgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX0ZVVFVSRV9ET01BSU4gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAogIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1RFWCBpcyBub3Qgc2V0CiAjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF8yIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfSVBSIGlzIG5vdCBzZXQKICMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldApAQCAtNDYyLDYgKzQ1NiwxMSBAQAogIyBDT05GSUdfU0NTSV9TVU5FU1AgaXMgbm90IHNldAogCiAjCisjIFNlcmlhbCBBVEEgKHByb2QpIGFuZCBQYXJhbGxlbCBBVEEgKGV4cGVyaW1lbnRhbCkgZHJpdmVycworIworIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKworIwogIyBNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKQogIwogQ09ORklHX01EPXkKQEAgLTU3NSw2ICs1NzQsNyBAQAogIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9bQogQ09ORklHX0JOWDI9bQorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAwIE1iaXQpCkBAIC0xMDA2LDYgKzEwMDYsNyBAQAogIyBDT05GSUdfU05EX1ZJQTgyWFhfTU9ERU0gaXMgbm90IHNldAogIyBDT05GSUdfU05EX1ZYMjIyIGlzIG5vdCBzZXQKICMgQ09ORklHX1NORF9ZTUZQQ0kgaXMgbm90IHNldAorIyBDT05GSUdfU05EX0FDOTdfUE9XRVJfU0FWRSBpcyBub3Qgc2V0CiAKICMKICMgVVNCIGRldmljZXMKQEAgLTEzNTMsNiArMTM1NCw3IEBACiAjIEtlcm5lbCBoYWNraW5nCiAjCiBDT05GSUdfUFJJTlRLX1RJTUU9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKIENPTkZJR19NQUdJQ19TWVNSUT15CiAjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYyBiL2FyY2gvc3BhcmM2NC9rZXJuZWwvc3lzX3NwYXJjMzIuYwppbmRleCBjODhhZTIzLi42OTQ0NGYyIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjNjQva2VybmVsL3N5c19zcGFyYzMyLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC9zeXNfc3BhcmMzMi5jCkBAIC0xMDE2LDcgKzEwMTYsNyBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzMzJfc3lzY3RsKHN0cnVjdCBfX3N5c2N0bF9hcmdzMzIgX191c2VyICphcmdzKQogewotI2lmbmRlZiBDT05GSUdfU1lTQ1RMCisjaWZuZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogCXJldHVybiAtRU5PU1lTOwogI2Vsc2UKIAlzdHJ1Y3QgX19zeXNjdGxfYXJnczMyIHRtcDsKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9rZXJuZWwvdGltZS5jIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKaW5kZXggYjBiNGZlZS4uMDBmNmZjNCAxMDA2NDQKLS0tIGEvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC9zcGFyYzY0L2tlcm5lbC90aW1lLmMKQEAgLTUzLDggKzUzLDYgQEAKIHVuc2lnbmVkIGxvbmcgZHMxMjg3X3JlZ3MgPSAwVUw7CiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiBzdGF0aWMgdm9pZCBfX2lvbWVtICptc3RrNDh0MDhfcmVnczsKIHN0YXRpYyB2b2lkIF9faW9tZW0gKm1zdGs0OHQ1OV9yZWdzOwogCkBAIC00NjUsNyArNDYzLDcgQEAKIAkJcHJvZmlsZV90aWNrKENQVV9QUk9GSUxJTkcsIHJlZ3MpOwogCQl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogI2VuZGlmCi0JCWRvX3RpbWVyKHJlZ3MpOworCQlkb190aW1lcigxKTsKIAogCQkvKiBHdWFyYW50ZWUgdGhhdCB0aGUgZm9sbG93aW5nIHNlcXVlbmNlcyBleGVjdXRlCiAJCSAqIHVuaW50ZXJydXB0ZWQuCkBAIC00OTYsNyArNDk0LDcgQEAKIHsKIAl3cml0ZV9zZXFsb2NrKCZ4dGltZV9sb2NrKTsKIAotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogCiAJdGltZXJfY2hlY2tfcnRjKCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMgYi9hcmNoL3NwYXJjNjQvbW0vaW5pdC5jCmluZGV4IGRjYmE0ZTYuLjA5Y2I3ZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9tbS9pbml0LmMKKysrIGIvYXJjaC9zcGFyYzY0L21tL2luaXQuYwpAQCAtOTIwLDggKzkyMCw3IEBACiAJaWYgKHNwYXJjX3JhbWRpc2tfaW1hZ2UgfHwgc3BhcmNfcmFtZGlza19pbWFnZTY0KSB7CiAJCXVuc2lnbmVkIGxvbmcgcmFtZGlza19pbWFnZSA9IHNwYXJjX3JhbWRpc2tfaW1hZ2UgPwogCQkJc3BhcmNfcmFtZGlza19pbWFnZSA6IHNwYXJjX3JhbWRpc2tfaW1hZ2U2NDsKLQkJaWYgKHJhbWRpc2tfaW1hZ2UgPj0gKHVuc2lnbmVkIGxvbmcpX2VuZCAtIDIgKiBQQUdFX1NJWkUpCi0JCQlyYW1kaXNrX2ltYWdlIC09IEtFUk5CQVNFOworCQlyYW1kaXNrX2ltYWdlIC09IEtFUk5CQVNFOwogCQlpbml0cmRfc3RhcnQgPSByYW1kaXNrX2ltYWdlICsgcGh5c19iYXNlOwogCQlpbml0cmRfZW5kID0gaW5pdHJkX3N0YXJ0ICsgc3BhcmNfcmFtZGlza19zaXplOwogCQlpZiAoaW5pdHJkX2VuZCA+IGVuZF9vZl9waHlzX21lbW9yeSkgewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jIGIvYXJjaC9zcGFyYzY0L3NvbGFyaXMvbWlzYy5jCmluZGV4IDY0MjU0MTcuLjljNTgxMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc3BhcmM2NC9zb2xhcmlzL21pc2MuYworKysgYi9hcmNoL3NwYXJjNjQvc29sYXJpcy9taXNjLmMKQEAgLTExLDYgKzExLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saW1pdHMuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXguaD4KQEAgLTQyMiw3ICs0MjMsOSBAQAogCQkJICAgU29sYXJpcyBzZXRwZ3JwIGFuZCBzZXRzaWQ/ICovCiAJCQlyZXQgPSBzeXNfc2V0cGdpZCgwLCAwKTsKIAkJCWlmIChyZXQpIHJldHVybiByZXQ7CisJCQltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCQkJY3VycmVudC0+c2lnbmFsLT50dHkgPSBOVUxMOworCQkJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCQkJcmV0dXJuIHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7CiAJCX0KIAljYXNlIDI6IC8qIGdldHNpZCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9NYWtlZmlsZS14ODZfNjQgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAppbmRleCA5NTU4YTdjLi4xMTE1NGI2IDEwMDY0NAotLS0gYS9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NAorKysgYi9hcmNoL3VtL01ha2VmaWxlLXg4Nl82NApAQCAtNCwxMCArNCwxMyBAQAogY29yZS15ICs9IGFyY2gvdW0vc3lzLXg4Nl82NC8KIFNUQVJUIDo9IDB4NjAwMDAwMDAKIAorX2V4dHJhX2ZsYWdzXyA9IC1mbm8tYnVpbHRpbiAtbTY0IC1tY21vZGVsPWtlcm5lbAorCiAjV2UgI3VuZGVmIF9feDg2XzY0X18gZm9yIGtlcm5lbHNwYWNlLCBub3QgZm9yIHVzZXJzcGFjZSB3aGVyZQogI2l0J3MgbmVlZGVkIGZvciBoZWFkZXJzIHRvIHdvcmshCi1DRkxBR1MgKz0gLVVfXyQoU1VCQVJDSClfXyAtZm5vLWJ1aWx0aW4gLW02NAotVVNFUl9DRkxBR1MgKz0gLWZuby1idWlsdGluIC1tNjQKK0NGTEFHUyArPSAtVV9fJChTVUJBUkNIKV9fICQoX2V4dHJhX2ZsYWdzXykKK1VTRVJfQ0ZMQUdTICs9ICQoX2V4dHJhX2ZsYWdzXykKKwogQ0hFQ0tGTEFHUyAgKz0gLW02NAogQUZMQUdTICs9IC1tNjQKIExERkxBR1MgKz0gLW0gZWxmX3g4Nl82NApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL2NoYW5fa2Vybi5jCmluZGV4IGU4Mjc2NGYuLjM1NzZiM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9jaGFuX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvY2hhbl9rZXJuLmMKQEAgLTExMCw3ICsxMTAsNyBAQAogCSAgICAgICAiVU1MXG4iKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjaGFuX29wcyBub3RfY29uZmlnZ2VkX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY2hhbl9vcHMgbm90X2NvbmZpZ2dlZF9vcHMgPSB7CiAJLmluaXQJCT0gbm90X2NvbmZpZ2dlZF9pbml0LAogCS5vcGVuCQk9IG5vdF9jb25maWdnZWRfb3BlbiwKIAkuY2xvc2UJCT0gbm90X2NvbmZpZ2dlZF9jbG9zZSwKQEAgLTM3Myw3ICszNzMsNyBAQAogfQogCiBpbnQgY29uc29sZV9vcGVuX2NoYW4oc3RydWN0IGxpbmUgKmxpbmUsIHN0cnVjdCBjb25zb2xlICpjbywKLQkJICAgICAgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKKwkJICAgICAgY29uc3Qgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKIHsKIAlpbnQgZXJyOwogCkBAIC00OTQsMTAgKzQ5NCwxMCBAQAogCiBzdHJ1Y3QgY2hhbl90eXBlIHsKIAljaGFyICprZXk7Ci0Jc3RydWN0IGNoYW5fb3BzICpvcHM7CisJY29uc3Qgc3RydWN0IGNoYW5fb3BzICpvcHM7CiB9OwogCi1zdGF0aWMgc3RydWN0IGNoYW5fdHlwZSBjaGFuX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNoYW5fdHlwZSBjaGFuX3RhYmxlW10gPSB7CiAJeyAiZmQiLCAmZmRfb3BzIH0sCiAKICNpZmRlZiBDT05GSUdfTlVMTF9DSEFOCkBAIC01MzQsMTAgKzUzNCwxMCBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBjaGFuICpwYXJzZV9jaGFuKHN0cnVjdCBsaW5lICpsaW5lLCBjaGFyICpzdHIsIGludCBkZXZpY2UsCi0JCQkgICAgICAgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQogewotCXN0cnVjdCBjaGFuX3R5cGUgKmVudHJ5OwotCXN0cnVjdCBjaGFuX29wcyAqb3BzOworCWNvbnN0IHN0cnVjdCBjaGFuX3R5cGUgKmVudHJ5OworCWNvbnN0IHN0cnVjdCBjaGFuX29wcyAqb3BzOwogCXN0cnVjdCBjaGFuICpjaGFuOwogCXZvaWQgKmRhdGE7CiAJaW50IGk7CkBAIC01ODIsNyArNTgyLDcgQEAKIH0KIAogaW50IHBhcnNlX2NoYW5fcGFpcihjaGFyICpzdHIsIHN0cnVjdCBsaW5lICpsaW5lLCBpbnQgZGV2aWNlLAotCQkgICAgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKKwkJICAgIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqY2hhbnMgPSAmbGluZS0+Y2hhbl9saXN0OwogCXN0cnVjdCBjaGFuICpuZXcsICpjaGFuOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2RhZW1vbi5oIGIvYXJjaC91bS9kcml2ZXJzL2RhZW1vbi5oCmluZGV4IDczMjZjNDIuLjNiYzNjZjYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9kYWVtb24uaAorKysgYi9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uLmgKQEAgLTE4LDcgKzE4LDcgQEAKIAl2b2lkICpkZXY7CiB9OwogCi1leHRlcm4gc3RydWN0IG5ldF91c2VyX2luZm8gZGFlbW9uX3VzZXJfaW5mbzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X3VzZXJfaW5mbyBkYWVtb25fdXNlcl9pbmZvOwogCiBleHRlcm4gaW50IGRhZW1vbl91c2VyX3dyaXRlKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCAKIAkJCSAgICAgc3RydWN0IGRhZW1vbl9kYXRhICpwcmkpOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYwppbmRleCA1M2QwOWVkLi44MjQzODY5IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvZGFlbW9uX2tlcm4uYwpAQCAtNTcsNyArNTcsNyBAQAogCQkJCSAoc3RydWN0IGRhZW1vbl9kYXRhICopICZscC0+dXNlcikpOwogfQogCi1zdGF0aWMgc3RydWN0IG5ldF9rZXJuX2luZm8gZGFlbW9uX2tlcm5faW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2tlcm5faW5mbyBkYWVtb25fa2Vybl9pbmZvID0gewogCS5pbml0CQkJPSBkYWVtb25faW5pdCwKIAkucHJvdG9jb2wJCT0gZXRoX3Byb3RvY29sLAogCS5yZWFkCQkJPSBkYWVtb25fcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9kYWVtb25fdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl91c2VyLmMKaW5kZXggYzk0NDI2NS4uNzc5NTRlYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2RhZW1vbl91c2VyLmMKQEAgLTE4Miw3ICsxODIsNyBAQAogCXJldHVybihtdHUpOwogfQogCi1zdHJ1Y3QgbmV0X3VzZXJfaW5mbyBkYWVtb25fdXNlcl9pbmZvID0geworY29uc3Qgc3RydWN0IG5ldF91c2VyX2luZm8gZGFlbW9uX3VzZXJfaW5mbyA9IHsKIAkuaW5pdAkJPSBkYWVtb25fdXNlcl9pbml0LAogCS5vcGVuCQk9IGRhZW1vbl9vcGVuLAogCS5jbG9zZQkgCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9mZC5jIGIvYXJjaC91bS9kcml2ZXJzL2ZkLmMKaW5kZXggYzQxZjc1ZS4uMTA4YjdkYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2ZkLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2ZkLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAljaGFyIHN0cltzaXplb2YoIjEyMzQ1Njc4OTBcMCIpXTsKIH07CiAKLXN0YXRpYyB2b2lkICpmZF9pbml0KGNoYXIgKnN0ciwgaW50IGRldmljZSwgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKK3N0YXRpYyB2b2lkICpmZF9pbml0KGNoYXIgKnN0ciwgaW50IGRldmljZSwgY29uc3Qgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKIHsKIAlzdHJ1Y3QgZmRfY2hhbiAqZGF0YTsKIAljaGFyICplbmQ7CkBAIC03Nyw3ICs3Nyw3IEBACiAJfQogfQogCi1zdHJ1Y3QgY2hhbl9vcHMgZmRfb3BzID0geworY29uc3Qgc3RydWN0IGNoYW5fb3BzIGZkX29wcyA9IHsKIAkudHlwZQkJPSAiZmQiLAogCS5pbml0CQk9IGZkX2luaXQsCiAJLm9wZW4JCT0gZmRfb3BlbiwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9ob3N0YXVkaW9fa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKaW5kZXggMzcyMzJmOS4uZDI0N2VmNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL2hvc3RhdWRpb19rZXJuLmMKQEAgLTI4MCw3ICsyODAsNyBAQAogCiAvKiBrZXJuZWwgbW9kdWxlIG9wZXJhdGlvbnMgKi8KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG9zdGF1ZGlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBob3N0YXVkaW9fZm9wcyA9IHsKICAgICAgICAgLm93bmVyICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAgICAgICAgIC5sbHNlZWsgICAgICAgICA9IG5vX2xsc2VlaywKICAgICAgICAgLnJlYWQgICAgICAgICAgID0gaG9zdGF1ZGlvX3JlYWQsCkBAIC0yOTIsNyArMjkyLDcgQEAKICAgICAgICAgLnJlbGVhc2UgICAgICAgID0gaG9zdGF1ZGlvX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBob3N0bWl4ZXJfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhvc3RtaXhlcl9mb3BzID0gewogICAgICAgICAub3duZXIgICAgICAgICAgPSBUSElTX01PRFVMRSwKICAgICAgICAgLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogICAgICAgICAuaW9jdGwgICAgICAgICAgPSBob3N0bWl4ZXJfaW9jdGxfbWl4ZGV2LApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYyBiL2FyY2gvdW0vZHJpdmVycy9saW5lLmMKaW5kZXggZWJlYmFhYi4uNTYzY2U3NiAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL2xpbmUuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbGluZS5jCkBAIC0yNTEsNyArMjUxLDcgQEAKIAkvKiBub3RoaW5nICovCiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgeworc3RhdGljIGNvbnN0IHN0cnVjdCB7CiAJaW50ICBjbWQ7CiAJY2hhciAqbGV2ZWw7CiAJY2hhciAqbmFtZTsKQEAgLTQwNSw3ICs0MDUsNyBAQAogCiBpbnQgbGluZV9zZXR1cF9pcnEoaW50IGZkLCBpbnQgaW5wdXQsIGludCBvdXRwdXQsIHN0cnVjdCBsaW5lICpsaW5lLCB2b2lkICpkYXRhKQogewotCXN0cnVjdCBsaW5lX2RyaXZlciAqZHJpdmVyID0gbGluZS0+ZHJpdmVyOworCWNvbnN0IHN0cnVjdCBsaW5lX2RyaXZlciAqZHJpdmVyID0gbGluZS0+ZHJpdmVyOwogCWludCBlcnIgPSAwLCBmbGFncyA9IElSUUZfRElTQUJMRUQgfCBJUlFGX1NIQVJFRCB8IElSUUZfU0FNUExFX1JBTkRPTTsKIAogCWlmIChpbnB1dCkKQEAgLTU1OCw3ICs1NTgsNyBAQAogfQogCiBpbnQgbGluZV9jb25maWcoc3RydWN0IGxpbmUgKmxpbmVzLCB1bnNpZ25lZCBpbnQgbnVtLCBjaGFyICpzdHIsCi0JCXN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCisJCWNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7CiAJc3RydWN0IGxpbmUgKmxpbmU7CiAJY2hhciAqbmV3OwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jYXN0LmggYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3QuaAppbmRleCBhMmM2ZGIyLi5iYzU2YWY5ZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jYXN0LmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jYXN0LmgKQEAgLTEzLDcgKzEzLDcgQEAKIAl2b2lkICpkZXY7CiB9OwogCi1leHRlcm4gc3RydWN0IG5ldF91c2VyX2luZm8gbWNhc3RfdXNlcl9pbmZvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIG1jYXN0X3VzZXJfaW5mbzsKIAogZXh0ZXJuIGludCBtY2FzdF91c2VyX3dyaXRlKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCAKIAkJCSAgICBzdHJ1Y3QgbWNhc3RfZGF0YSAqcHJpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3Rfa2Vybi5jCmluZGV4IDNhN2FmMTguLmMwOTBmYmQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jYXN0X2tlcm4uYwpAQCAtNjEsNyArNjEsNyBAQAogCQkJCSAoc3RydWN0IG1jYXN0X2RhdGEgKikgJmxwLT51c2VyKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfa2Vybl9pbmZvIG1jYXN0X2tlcm5faW5mbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2tlcm5faW5mbyBtY2FzdF9rZXJuX2luZm8gPSB7CiAJLmluaXQJCQk9IG1jYXN0X2luaXQsCiAJLnByb3RvY29sCQk9IGV0aF9wcm90b2NvbCwKIAkucmVhZAkJCT0gbWNhc3RfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvbWNhc3RfdXNlci5jCmluZGV4IGFmZTg1YmYuLjRkMmJkMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tY2FzdF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL21jYXN0X3VzZXIuYwpAQCAtMTUyLDcgKzE1Miw3IEBACiAJcmV0dXJuKG10dSk7CiB9CiAKLXN0cnVjdCBuZXRfdXNlcl9pbmZvIG1jYXN0X3VzZXJfaW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIG1jYXN0X3VzZXJfaW5mbyA9IHsKIAkuaW5pdAkJPSBtY2FzdF91c2VyX2luaXQsCiAJLm9wZW4JCT0gbWNhc3Rfb3BlbiwKIAkuY2xvc2UJIAk9IG1jYXN0X2Nsb3NlLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV9rZXJuLmMKaW5kZXggNzk2MTBiNS4uNzczYTEzNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfa2Vybi5jCkBAIC01OTgsNiArNTk4LDExIEBACiAJbWNvbnNvbGVfcmVwbHkocmVxLCBlcnJfbXNnLCBlcnIsIDApOwogfQogCitzdHJ1Y3QgbWNvbnNvbGVfb3V0cHV0IHsKKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CisJc3RydWN0IG1jX3JlcXVlc3QgKnJlcTsKK307CisKIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uc29sZV9sb2NrKTsKIHN0YXRpYyBMSVNUX0hFQUQoY2xpZW50cyk7CiBzdGF0aWMgY2hhciBjb25zb2xlX2J1ZltNQ09OU09MRV9NQVhfREFUQV07CkBAIC02MjIsMTAgKzYyNywxMCBAQAogCQkJcmV0dXJuOwogCiAJCWxpc3RfZm9yX2VhY2goZWxlLCAmY2xpZW50cyl7Ci0JCQlzdHJ1Y3QgbWNvbnNvbGVfZW50cnkgKmVudHJ5OworCQkJc3RydWN0IG1jb25zb2xlX291dHB1dCAqZW50cnk7CiAKLQkJCWVudHJ5ID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCBtY29uc29sZV9lbnRyeSwgbGlzdCk7Ci0JCQltY29uc29sZV9yZXBseV9sZW4oJmVudHJ5LT5yZXF1ZXN0LCBjb25zb2xlX2J1ZiwKKwkJCWVudHJ5ID0gbGlzdF9lbnRyeShlbGUsIHN0cnVjdCBtY29uc29sZV9vdXRwdXQsIGxpc3QpOworCQkJbWNvbnNvbGVfcmVwbHlfbGVuKGVudHJ5LT5yZXEsIGNvbnNvbGVfYnVmLAogCQkJCQkgICBjb25zb2xlX2luZGV4LCAwLCAxKTsKIAkJfQogCkBAIC02NDksMTAgKzY1NCwxMCBAQAogc3RhdGljIHZvaWQgd2l0aF9jb25zb2xlKHN0cnVjdCBtY19yZXF1ZXN0ICpyZXEsIHZvaWQgKCpwcm9jKSh2b2lkICopLAogCQkJIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3QgbWNvbnNvbGVfZW50cnkgZW50cnk7CisJc3RydWN0IG1jb25zb2xlX291dHB1dCBlbnRyeTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZW50cnkucmVxdWVzdCA9ICpyZXE7CisJZW50cnkucmVxID0gcmVxOwogCWxpc3RfYWRkKCZlbnRyeS5saXN0LCAmY2xpZW50cyk7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJmNvbnNvbGVfbG9jaywgZmxhZ3MpOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL21jb25zb2xlX3VzZXIuYwppbmRleCA1YjJmNWZlLi4xNzA2OGViIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbWNvbnNvbGVfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9tY29uc29sZV91c2VyLmMKQEAgLTEzMSw2ICsxMzEsMTAgQEAKIGludCBtY29uc29sZV9yZXBseV9sZW4oc3RydWN0IG1jX3JlcXVlc3QgKnJlcSwgY29uc3QgY2hhciAqc3RyLCBpbnQgdG90YWwsCiAJCSAgICAgICBpbnQgZXJyLCBpbnQgbW9yZSkKIHsKKwkvKiBYWFggVGhpcyBpcyBhIHN0YWNrIGNvbnN1bXB0aW9uIHByb2JsZW0uICBJdCdkIGJlIG5pY2UgdG8KKwkgKiBtYWtlIGl0IGdsb2JhbCBhbmQgc2VyaWFsaXplIGFjY2VzcyB0byBpdCwgYnV0IHRoZXJlIGFyZSBhCisJICogdG9uIG9mIGNhbGxlcnMgdG8gdGhpcyBmdW5jdGlvbi4KKwkgKi8KIAlzdHJ1Y3QgbWNvbnNvbGVfcmVwbHkgcmVwbHk7CiAJaW50IGxlbiwgbjsKIApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL21tYXBwZXJfa2Vybi5jCmluZGV4IDAyMmY2N2IuLjlhM2I1ZGEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9tbWFwcGVyX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbW1hcHBlcl9rZXJuLmMKQEAgLTg1LDcgKzg1LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1hcHBlcl9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW1hcHBlcl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkucmVhZAkJPSBtbWFwcGVyX3JlYWQsCiAJLndyaXRlCQk9IG1tYXBwZXJfd3JpdGUsCkBAIC05NSw3ICs5NSw3IEBACiAJLnJlbGVhc2UJPSBtbWFwcGVyX3JlbGVhc2UsCiB9OwogCi1zdGF0aWMgc3RydWN0IG1pc2NkZXZpY2UgbW1hcHBlcl9kZXYgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IG1pc2NkZXZpY2UgbW1hcHBlcl9kZXYgPSB7CiAJLm1pbm9yCQk9IE1JU0NfRFlOQU1JQ19NSU5PUiwKIAkubmFtZQkJPSAibW1hcHBlciIsCiAJLmZvcHMJCT0gJm1tYXBwZXJfZm9wcwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL25ldF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwppbmRleCA0YTc5NjZiLi4zMDBhNTRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvbmV0X2tlcm4uYwpAQCAtMTE0LDE4ICsxMTQsMTEgQEAKIAlzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKIAlpbnQgZXJyOwogCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7Ci0KIAlpZihscC0+ZmQgPj0gMCl7CiAJCWVyciA9IC1FTlhJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYoIWxwLT5oYXZlX21hYyl7Ci0gCQlkZXZfaXBfYWRkcihkZXYsICZscC0+bWFjWzJdKTsKLSAJCXNldF9ldGhlcl9tYWMoZGV2LCBscC0+bWFjKTsKLQl9Ci0KIAlscC0+ZmQgPSAoKmxwLT5vcGVuKSgmbHAtPnVzZXIpOwogCWlmKGxwLT5mZCA8IDApewogCQllcnIgPSBscC0+ZmQ7CkBAIC0xNDksOCArMTQyLDYgQEAKIAkgKi8KIAl3aGlsZSgoZXJyID0gdW1sX25ldF9yeChkZXYpKSA+IDApIDsKIAotCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7Ci0KIAlzcGluX2xvY2soJm9wZW5lZF9sb2NrKTsKIAlsaXN0X2FkZCgmbHAtPmxpc3QsICZvcGVuZWQpOwogCXNwaW5fdW5sb2NrKCZvcGVuZWRfbG9jayk7CkBAIC0xNjAsNyArMTUxLDYgQEAKIAlpZihscC0+Y2xvc2UgIT0gTlVMTCkgKCpscC0+Y2xvc2UpKGxwLT5mZCwgJmxwLT51c2VyKTsKIAlscC0+ZmQgPSAtMTsKIG91dDoKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTE2OSwxNSArMTU5LDEyIEBACiAJc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CiAJCiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotCXNwaW5fbG9jaygmbHAtPmxvY2spOwogCiAJZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7CiAJaWYobHAtPmNsb3NlICE9IE5VTEwpCiAJCSgqbHAtPmNsb3NlKShscC0+ZmQsICZscC0+dXNlcik7CiAJbHAtPmZkID0gLTE7CiAKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOwotCiAJc3Bpbl9sb2NrKCZvcGVuZWRfbG9jayk7CiAJbGlzdF9kZWwoJmxwLT5saXN0KTsKIAlzcGluX3VubG9jaygmb3BlbmVkX2xvY2spOwpAQCAtMjQ2LDkgKzIzMyw5IEBACiAJc3RydWN0IHVtbF9uZXRfcHJpdmF0ZSAqbHAgPSBkZXYtPnByaXY7CiAJc3RydWN0IHNvY2thZGRyICpod2FkZHIgPSBhZGRyOwogCi0Jc3Bpbl9sb2NrKCZscC0+bG9jayk7CisJc3Bpbl9sb2NrX2lycSgmbHAtPmxvY2spOwogCXNldF9ldGhlcl9tYWMoZGV2LCBod2FkZHItPnNhX2RhdGEpOwotCXNwaW5fdW5sb2NrKCZscC0+bG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZscC0+bG9jayk7CiAKIAlyZXR1cm4oMCk7CiB9CkBAIC0yNTgsNyArMjQ1LDcgQEAKIAlzdHJ1Y3QgdW1sX25ldF9wcml2YXRlICpscCA9IGRldi0+cHJpdjsKIAlpbnQgZXJyID0gMDsKIAotCXNwaW5fbG9jaygmbHAtPmxvY2spOworCXNwaW5fbG9ja19pcnEoJmxwLT5sb2NrKTsKIAogCW5ld19tdHUgPSAoKmxwLT5zZXRfbXR1KShuZXdfbXR1LCAmbHAtPnVzZXIpOwogCWlmKG5ld19tdHUgPCAwKXsKQEAgLTI2OSw3ICsyNTYsNyBAQAogCWRldi0+bXR1ID0gbmV3X210dTsKIAogIG91dDoKLQlzcGluX3VubG9jaygmbHAtPmxvY2spOworCXNwaW5fdW5sb2NrX2lycSgmbHAtPmxvY2spOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTI5NSw2ICsyODIsMzcgQEAKICNlbmRpZgogfQogCitzdGF0aWMgdm9pZCBzZXR1cF9ldGhlcmFkZHIoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICphZGRyKQoreworCWNoYXIgKmVuZDsKKwlpbnQgaTsKKworCWlmKHN0ciA9PSBOVUxMKQorCQlnb3RvIHJhbmRvbTsKKworCWZvcihpPTA7aTw2O2krKyl7CisJCWFkZHJbaV0gPSBzaW1wbGVfc3RydG91bChzdHIsICZlbmQsIDE2KTsKKwkJaWYoKGVuZCA9PSBzdHIpIHx8CisJCSAgICgoKmVuZCAhPSAnOicpICYmICgqZW5kICE9ICcsJykgJiYgKCplbmQgIT0gJ1wwJykpKXsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICJzZXR1cF9ldGhlcmFkZHI6IGZhaWxlZCB0byBwYXJzZSAnJXMnICIKKwkJCSAgICAgICAiYXMgYW4gZXRoZXJuZXQgYWRkcmVzc1xuIiwgc3RyKTsKKwkJCWdvdG8gcmFuZG9tOworCQl9CisJCXN0ciA9IGVuZCArIDE7CisJfQorCWlmKGFkZHJbMF0gJiAxKXsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAgICAiQXR0ZW1wdCB0byBhc3NpZ24gYSBicm9hZGNhc3QgZXRoZXJuZXQgYWRkcmVzcyB0byBhICIKKwkJICAgICAgICJkZXZpY2UgZGlzYWxsb3dlZFxuIik7CisJCWdvdG8gcmFuZG9tOworCX0KKwlyZXR1cm47CisKK3JhbmRvbToKKwlyYW5kb21fZXRoZXJfYWRkcihhZGRyKTsKK30KKwogc3RhdGljIERFRklORV9TUElOTE9DSyhkZXZpY2VzX2xvY2spOwogc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKIApAQCAtMzMwLDE1ICszNDgsMTMgQEAKIAlsaXN0X2FkZCgmZGV2aWNlLT5saXN0LCAmZGV2aWNlcyk7CiAJc3Bpbl91bmxvY2soJmRldmljZXNfbG9jayk7CiAKLQlpZiAoc2V0dXBfZXRoZXJhZGRyKG1hYywgZGV2aWNlLT5tYWMpKQotCQlkZXZpY2UtPmhhdmVfbWFjID0gMTsKKwlzZXR1cF9ldGhlcmFkZHIobWFjLCBkZXZpY2UtPm1hYyk7CiAKIAlwcmludGsoS0VSTl9JTkZPICJOZXRkZXZpY2UgJWQgIiwgbik7Ci0JaWYgKGRldmljZS0+aGF2ZV9tYWMpCi0JCXByaW50aygiKCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4KSAiLAotCQkgICAgICAgZGV2aWNlLT5tYWNbMF0sIGRldmljZS0+bWFjWzFdLAotCQkgICAgICAgZGV2aWNlLT5tYWNbMl0sIGRldmljZS0+bWFjWzNdLAotCQkgICAgICAgZGV2aWNlLT5tYWNbNF0sIGRldmljZS0+bWFjWzVdKTsKKwlwcmludGsoIiglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCkgIiwKKwkgICAgICAgZGV2aWNlLT5tYWNbMF0sIGRldmljZS0+bWFjWzFdLAorCSAgICAgICBkZXZpY2UtPm1hY1syXSwgZGV2aWNlLT5tYWNbM10sCisJICAgICAgIGRldmljZS0+bWFjWzRdLCBkZXZpY2UtPm1hY1s1XSk7CiAJcHJpbnRrKCI6ICIpOwogCWRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemUpOwogCWlmIChkZXYgPT0gTlVMTCkgewpAQCAtNDA0LDcgKzQyMCw2IEBACiAJCSAgLmRldiAJCQk9IGRldiwKIAkJICAuZmQgCQkJPSAtMSwKIAkJICAubWFjIAkJCT0geyAweGZlLCAweGZkLCAweDAsIDB4MCwgMHgwLCAweDB9LAotCQkgIC5oYXZlX21hYyAJCT0gZGV2aWNlLT5oYXZlX21hYywKIAkJICAucHJvdG9jb2wgCQk9IHRyYW5zcG9ydC0+a2Vybi0+cHJvdG9jb2wsCiAJCSAgLm9wZW4gCQk9IHRyYW5zcG9ydC0+dXNlci0+b3BlbiwKIAkJICAuY2xvc2UgCQk9IHRyYW5zcG9ydC0+dXNlci0+Y2xvc2UsCkBAIC00MTksMTQgKzQzNCwxMiBAQAogCWluaXRfdGltZXIoJmxwLT50bCk7CiAJc3Bpbl9sb2NrX2luaXQoJmxwLT5sb2NrKTsKIAlscC0+dGwuZnVuY3Rpb24gPSB1bWxfbmV0X3VzZXJfdGltZXJfZXhwaXJlOwotCWlmIChscC0+aGF2ZV9tYWMpCi0JCW1lbWNweShscC0+bWFjLCBkZXZpY2UtPm1hYywgc2l6ZW9mKGxwLT5tYWMpKTsKKwltZW1jcHkobHAtPm1hYywgZGV2aWNlLT5tYWMsIHNpemVvZihscC0+bWFjKSk7CiAKIAlpZiAodHJhbnNwb3J0LT51c2VyLT5pbml0KSAKIAkJKCp0cmFuc3BvcnQtPnVzZXItPmluaXQpKCZscC0+dXNlciwgZGV2KTsKIAotCWlmIChkZXZpY2UtPmhhdmVfbWFjKQotCQlzZXRfZXRoZXJfbWFjKGRldiwgZGV2aWNlLT5tYWMpOworCXNldF9ldGhlcl9tYWMoZGV2LCBkZXZpY2UtPm1hYyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTU2OSwxMiArNTgyLDEzIEBACiAJaW50IG4sIGVycjsKIAogCWVyciA9IGV0aF9wYXJzZShzdHIsICZuLCAmc3RyKTsKLQlpZihlcnIpIHJldHVybigxKTsKKwlpZihlcnIpCisJCXJldHVybiAxOwogCi0JbmV3ID0gYWxsb2NfYm9vdG1lbShzaXplb2YobmV3KSk7CisJbmV3ID0gYWxsb2NfYm9vdG1lbShzaXplb2YoKm5ldykpOwogCWlmIChuZXcgPT0gTlVMTCl7CiAJCXByaW50aygiZXRoX2luaXQgOiBhbGxvY19ib290bWVtIGZhaWxlZFxuIik7Ci0JCXJldHVybigxKTsKKwkJcmV0dXJuIDE7CiAJfQogCiAJSU5JVF9MSVNUX0hFQUQoJm5ldy0+bGlzdCk7CkBAIC01ODIsNyArNTk2LDcgQEAKIAluZXctPmluaXQgPSBzdHI7CiAKIAlsaXN0X2FkZF90YWlsKCZuZXctPmxpc3QsICZldGhfY21kX2xpbmUpOwotCXJldHVybigxKTsKKwlyZXR1cm4gMTsKIH0KIAogX19zZXR1cCgiZXRoIiwgZXRoX3NldHVwKTsKQEAgLTc1NCw0NyArNzY4LDYgQEAKIAogX191bWxfZXhpdGNhbGwoY2xvc2VfZGV2aWNlcyk7CiAKLWludCBzZXR1cF9ldGhlcmFkZHIoY2hhciAqc3RyLCB1bnNpZ25lZCBjaGFyICphZGRyKQotewotCWNoYXIgKmVuZDsKLQlpbnQgaTsKLQotCWlmKHN0ciA9PSBOVUxMKQotCQlyZXR1cm4oMCk7Ci0JZm9yKGk9MDtpPDY7aSsrKXsKLQkJYWRkcltpXSA9IHNpbXBsZV9zdHJ0b3VsKHN0ciwgJmVuZCwgMTYpOwotCQlpZigoZW5kID09IHN0cikgfHwKLQkJICAgKCgqZW5kICE9ICc6JykgJiYgKCplbmQgIT0gJywnKSAmJiAoKmVuZCAhPSAnXDAnKSkpewotCQkJcHJpbnRrKEtFUk5fRVJSIAotCQkJICAgICAgICJzZXR1cF9ldGhlcmFkZHI6IGZhaWxlZCB0byBwYXJzZSAnJXMnICIKLQkJCSAgICAgICAiYXMgYW4gZXRoZXJuZXQgYWRkcmVzc1xuIiwgc3RyKTsKLQkJCXJldHVybigwKTsKLQkJfQotCQlzdHIgPSBlbmQgKyAxOwotCX0KLQlpZihhZGRyWzBdICYgMSl7Ci0JCXByaW50ayhLRVJOX0VSUiAKLQkJICAgICAgICJBdHRlbXB0IHRvIGFzc2lnbiBhIGJyb2FkY2FzdCBldGhlcm5ldCBhZGRyZXNzIHRvIGEgIgotCQkgICAgICAgImRldmljZSBkaXNhbGxvd2VkXG4iKTsKLQkJcmV0dXJuKDApOwotCX0KLQlyZXR1cm4oMSk7Ci19Ci0KLXZvaWQgZGV2X2lwX2FkZHIodm9pZCAqZCwgdW5zaWduZWQgY2hhciAqYmluX2J1ZikKLXsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gZDsKLQlzdHJ1Y3QgaW5fZGV2aWNlICppcCA9IGRldi0+aXBfcHRyOwotCXN0cnVjdCBpbl9pZmFkZHIgKmluOwotCi0JaWYoKGlwID09IE5VTEwpIHx8ICgoaW4gPSBpcC0+aWZhX2xpc3QpID09IE5VTEwpKXsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiZGV2X2lwX2FkZHIgLSBkZXZpY2Ugbm90IGFzc2lnbmVkIGFuICIKLQkJICAgICAgICJJUCBhZGRyZXNzXG4iKTsKLQkJcmV0dXJuOwotCX0KLQltZW1jcHkoYmluX2J1ZiwgJmluLT5pZmFfYWRkcmVzcywgc2l6ZW9mKGluLT5pZmFfYWRkcmVzcykpOwotfQotCiBzdHJ1Y3Qgc2tfYnVmZiAqZXRoZXJfYWRqdXN0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZXh0cmEpCiB7CiAJaWYoKHNrYiAhPSBOVUxMKSAmJiAoc2tiX3RhaWxyb29tKHNrYikgPCBleHRyYSkpewpAQCAtODMyLDcgKzgwNSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGQ7CiAJc3RydWN0IGluX2RldmljZSAqaXAgPSBkZXYtPmlwX3B0cjsKIAlzdHJ1Y3QgaW5faWZhZGRyICppbjsKLQlfX3UzMiAqbWFza19vdXQgPSBtOworCV9fYmUzMiAqbWFza19vdXQgPSBtOwogCiAJaWYoaXAgPT0gTlVMTCkgCiAJCXJldHVybigxKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9uZXRfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKaW5kZXggMTA3YzVlNC4uZjNhM2Y4YSAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL25ldF91c2VyLmMKQEAgLTEyLDYgKzEyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2luY2x1ZGUgInVzZXIuaCIKICNpbmNsdWRlICJ1c2VyX3V0aWwuaCIKICNpbmNsdWRlICJrZXJuX3V0aWwuaCIKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9udWxsLmMgYi9hcmNoL3VtL2RyaXZlcnMvbnVsbC5jCmluZGV4IDE0Y2M1ZjcuLjkwMTZjNjggMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9udWxsLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL251bGwuYwpAQCAtOCw5ICs4LDEwIEBACiAjaW5jbHVkZSAiY2hhbl91c2VyLmgiCiAjaW5jbHVkZSAib3MuaCIKIAorLyogVGhpcyBhZGRyZXNzIGlzIHVzZWQgb25seSBhcyBhIHVuaXF1ZSBpZGVudGlmZXIgKi8KIHN0YXRpYyBpbnQgbnVsbF9jaGFuOwogCi1zdGF0aWMgdm9pZCAqbnVsbF9pbml0KGNoYXIgKnN0ciwgaW50IGRldmljZSwgc3RydWN0IGNoYW5fb3B0cyAqb3B0cykKK3N0YXRpYyB2b2lkICpudWxsX2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQogewogCXJldHVybigmbnVsbF9jaGFuKTsKIH0KQEAgLTMxLDcgKzMyLDcgQEAKIHsKIH0KIAotc3RydWN0IGNoYW5fb3BzIG51bGxfb3BzID0geworY29uc3Qgc3RydWN0IGNoYW5fb3BzIG51bGxfb3BzID0gewogCS50eXBlCQk9ICJudWxsIiwKIAkuaW5pdAkJPSBudWxsX2luaXQsCiAJLm9wZW4JCT0gbnVsbF9vcGVuLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfa2Vybi5jIGIvYXJjaC91bS9kcml2ZXJzL3BjYXBfa2Vybi5jCmluZGV4IDRjNzY3YzcuLjZlMWVmODUgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wY2FwX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF9rZXJuLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAlyZXR1cm4oLUVQRVJNKTsKIH0KIAotc3RhdGljIHN0cnVjdCBuZXRfa2Vybl9pbmZvIHBjYXBfa2Vybl9pbmZvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfa2Vybl9pbmZvIHBjYXBfa2Vybl9pbmZvID0gewogCS5pbml0CQkJPSBwY2FwX2luaXQsCiAJLnByb3RvY29sCQk9IGV0aF9wcm90b2NvbCwKIAkucmVhZAkJCT0gcGNhcF9yZWFkLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5jIGIvYXJjaC91bS9kcml2ZXJzL3BjYXBfdXNlci5jCmluZGV4IGVkZmNiMjkuLjJlZjY0MWQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wY2FwX3VzZXIuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcGNhcF91c2VyLmMKQEAgLTEyMCw3ICsxMjAsNyBAQAogCXJldHVybihoZGF0YS5sZW4pOwogfQogCi1zdHJ1Y3QgbmV0X3VzZXJfaW5mbyBwY2FwX3VzZXJfaW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHBjYXBfdXNlcl9pbmZvID0gewogCS5pbml0CQk9IHBjYXBfdXNlcl9pbml0LAogCS5vcGVuCQk9IHBjYXBfb3BlbiwKIAkuY2xvc2UJIAk9IE5VTEwsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcG9ydF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvcG9ydF91c2VyLmMKaW5kZXggYzQzZThiYi4uZjJlOGZjNCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3BvcnRfdXNlci5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9wb3J0X3VzZXIuYwpAQCAtMjcsNyArMjcsNyBAQAogCWNoYXIgZGV2W3NpemVvZigiMzI3NjhcMCIpXTsKIH07CiAKLXN0YXRpYyB2b2lkICpwb3J0X2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQorc3RhdGljIHZvaWQgKnBvcnRfaW5pdChjaGFyICpzdHIsIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7CiAJc3RydWN0IHBvcnRfY2hhbiAqZGF0YTsKIAl2b2lkICprZXJuX2RhdGE7CkBAIC0xMDAsNyArMTAwLDcgQEAKIAlvc19jbG9zZV9maWxlKGZkKTsKIH0KIAotc3RydWN0IGNoYW5fb3BzIHBvcnRfb3BzID0geworY29uc3Qgc3RydWN0IGNoYW5fb3BzIHBvcnRfb3BzID0gewogCS50eXBlCQk9ICJwb3J0IiwKIAkuaW5pdAkJPSBwb3J0X2luaXQsCiAJLm9wZW4JCT0gcG9ydF9vcGVuLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3B0eS5jIGIvYXJjaC91bS9kcml2ZXJzL3B0eS5jCmluZGV4IDFjNTU1YzMuLmFiZWM2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9wdHkuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvcHR5LmMKQEAgLTIyLDcgKzIyLDcgQEAKIAljaGFyIGRldl9uYW1lW3NpemVvZigiL2Rldi9wdHMvMDEyMzQ1NlwwIildOwogfTsKIAotc3RhdGljIHZvaWQgKnB0eV9jaGFuX2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQorc3RhdGljIHZvaWQgKnB0eV9jaGFuX2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBjb25zdCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQogewogCXN0cnVjdCBwdHlfY2hhbiAqZGF0YTsKIApAQCAtMTE4LDcgKzExOCw3IEBACiAJcmV0dXJuKGZkKTsKIH0KIAotc3RydWN0IGNoYW5fb3BzIHB0eV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgY2hhbl9vcHMgcHR5X29wcyA9IHsKIAkudHlwZQkJPSAicHR5IiwKIAkuaW5pdAkJPSBwdHlfY2hhbl9pbml0LAogCS5vcGVuCQk9IHB0eV9vcGVuLApAQCAtMTMxLDcgKzEzMSw3IEBACiAJLndpbmNoCQk9IDAsCiB9OwogCi1zdHJ1Y3QgY2hhbl9vcHMgcHRzX29wcyA9IHsKK2NvbnN0IHN0cnVjdCBjaGFuX29wcyBwdHNfb3BzID0gewogCS50eXBlCQk9ICJwdHMiLAogCS5pbml0CQk9IHB0eV9jaGFuX2luaXQsCiAJLm9wZW4JCT0gcHRzX29wZW4sCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvcmFuZG9tLmMgYi9hcmNoL3VtL2RyaXZlcnMvcmFuZG9tLmMKaW5kZXggYmE0NzFmNS4uNzNiMmJkZCAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3JhbmRvbS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9yYW5kb20uYwpAQCAtMjAsNiArMjAsMTAgQEAKIAogI2RlZmluZSBSTkdfTUlTQ0RFVl9NSU5PUgkJMTgzIC8qIG9mZmljaWFsICovCiAKKy8qIENoYW5nZWQgYXQgaW5pdCB0aW1lLCBpbiB0aGUgbm9uLW1vZHVsYXIgY2FzZSwgYW5kIGF0IG1vZHVsZSBsb2FkCisgKiB0aW1lLCBpbiB0aGUgbW9kdWxlIGNhc2UuICBQcmVzdW1hYmx5LCB0aGUgbW9kdWxlIHN1YnN5c3RlbQorICogcHJvdGVjdHMgYWdhaW5zdCBhIG1vZHVsZSBiZWluZyBsb2FkZWQgdHdpY2UgYXQgdGhlIHNhbWUgdGltZS4KKyAqLwogc3RhdGljIGludCByYW5kb21fZmQgPSAtMTsKIAogc3RhdGljIGludCBybmdfZGV2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQpAQCAtNjgsNyArNzIsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJuZ19jaHJkZXZfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcm5nX2NocmRldl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHJuZ19kZXZfb3BlbiwKIAkucmVhZAkJPSBybmdfZGV2X3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc2xpcC5oIGIvYXJjaC91bS9kcml2ZXJzL3NsaXAuaAppbmRleCBiYjBkYWI0Li5jNjRmOGM2IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcC5oCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zbGlwLmgKQEAgLTEyLDcgKzEyLDcgQEAKIAlzdHJ1Y3Qgc2xpcF9wcm90byBzbGlwOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXBfdXNlcl9pbmZvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXBfdXNlcl9pbmZvOwogCiBleHRlcm4gaW50IHNsaXBfdXNlcl9yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3Qgc2xpcF9kYXRhICpwcmkpOwogZXh0ZXJuIGludCBzbGlwX3VzZXJfd3JpdGUoaW50IGZkLCB2b2lkICpidWYsIGludCBsZW4sIHN0cnVjdCBzbGlwX2RhdGEgKnByaSk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc2xpcF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcF9rZXJuLmMKaW5kZXggMTYzZWUwZC4uY2NlYTJkNyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3NsaXBfa2Vybi5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zbGlwX2tlcm4uYwpAQCAtNjEsNyArNjEsNyBAQAogCQkJICAgICAgIChzdHJ1Y3Qgc2xpcF9kYXRhICopICZscC0+dXNlcikpOwogfQogCi1zdHJ1Y3QgbmV0X2tlcm5faW5mbyBzbGlwX2tlcm5faW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfa2Vybl9pbmZvIHNsaXBfa2Vybl9pbmZvID0gewogCS5pbml0CQkJPSBzbGlwX2luaXQsCiAJLnByb3RvY29sCQk9IHNsaXBfcHJvdG9jb2wsCiAJLnJlYWQJCQk9IHNsaXBfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlwX3VzZXIuYyBiL2FyY2gvdW0vZHJpdmVycy9zbGlwX3VzZXIuYwppbmRleCA4OWZiZWMxLi44NDYwMjg1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc2xpcF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXBfdXNlci5jCkBAIC0yNDEsNyArMjQxLDcgQEAKIAljbG9zZV9hZGRyKGFkZHIsIG5ldG1hc2ssIHByaS0+bmFtZSk7CiB9CiAKLXN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXBfdXNlcl9pbmZvID0geworY29uc3Qgc3RydWN0IG5ldF91c2VyX2luZm8gc2xpcF91c2VyX2luZm8gPSB7CiAJLmluaXQJCT0gc2xpcF91c2VyX2luaXQsCiAJLm9wZW4JCT0gc2xpcF9vcGVuLAogCS5jbG9zZQkgCT0gc2xpcF9jbG9zZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlycC5oIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwLmgKaW5kZXggNmNmODhhYi4uODljY2Y4MyAxMDA2NDQKLS0tIGEvYXJjaC91bS9kcml2ZXJzL3NsaXJwLmgKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwLmgKQEAgLTI0LDcgKzI0LDcgQEAKIAlzdHJ1Y3Qgc2xpcF9wcm90byBzbGlwOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXJwX3VzZXJfaW5mbzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgbmV0X3VzZXJfaW5mbyBzbGlycF91c2VyX2luZm87CiAKIGV4dGVybiBpbnQgc2xpcnBfdXNlcl9yZWFkKGludCBmZCwgdm9pZCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3Qgc2xpcnBfZGF0YSAqcHJpKTsKIGV4dGVybiBpbnQgc2xpcnBfdXNlcl93cml0ZShpbnQgZmQsIHZvaWQgKmJ1ZiwgaW50IGxlbiwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF9rZXJuLmMgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfa2Vybi5jCmluZGV4IDk1ZTUwYzkuLmFlMzIyZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF9rZXJuLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX2tlcm4uYwpAQCAtNjQsNyArNjQsNyBAQAogCQkJICAgICAgIChzdHJ1Y3Qgc2xpcnBfZGF0YSAqKSAmbHAtPnVzZXIpKTsKIH0KIAotc3RydWN0IG5ldF9rZXJuX2luZm8gc2xpcnBfa2Vybl9pbmZvID0geworY29uc3Qgc3RydWN0IG5ldF9rZXJuX2luZm8gc2xpcnBfa2Vybl9pbmZvID0gewogCS5pbml0CQkJPSBzbGlycF9pbml0LAogCS5wcm90b2NvbAkJPSBzbGlycF9wcm90b2NvbCwKIAkucmVhZAkJCT0gc2xpcnBfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMgYi9hcmNoL3VtL2RyaXZlcnMvc2xpcnBfdXNlci5jCmluZGV4IDMzYzVmNmUuLmNlNWU4NWQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zbGlycF91c2VyLmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3NsaXJwX3VzZXIuYwpAQCAtMTI2LDcgKzEyNiw3IEBACiAJcmV0dXJuKG10dSk7CiB9CiAKLXN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXJwX3VzZXJfaW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHNsaXJwX3VzZXJfaW5mbyA9IHsKIAkuaW5pdAkJPSBzbGlycF91c2VyX2luaXQsCiAJLm9wZW4JCT0gc2xpcnBfb3BlbiwKIAkuY2xvc2UJIAk9IHNsaXJwX2Nsb3NlLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9kcml2ZXJzL3NzbC5jIGIvYXJjaC91bS9kcml2ZXJzL3NzbC5jCmluZGV4IDZkYWZkNmYuLjZmMTNlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zc2wuYworKysgYi9hcmNoL3VtL2RyaXZlcnMvc3NsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJpcnFfdXNlci5oIgogI2luY2x1ZGUgIm1jb25zb2xlX2tlcm4uaCIKIAotc3RhdGljIGludCBzc2xfdmVyc2lvbiA9IDE7CitzdGF0aWMgY29uc3QgaW50IHNzbF92ZXJzaW9uID0gMTsKIAogLyogUmVmZXJlbmNlZCBvbmx5IGJ5IHR0eV9kcml2ZXIgYmVsb3cgLSBwcmVzdW1hYmx5IGl0J3MgbG9ja2VkIGNvcnJlY3RseQogICogYnkgdGhlIHR0eSBkcml2ZXIuCkBAIC0xMjMsNyArMTIzLDcgQEAKIH0KICNlbmRpZgogCi1zdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNzbF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIHNzbF9vcHMgPSB7CiAJLm9wZW4gCSAJCT0gc3NsX29wZW4sCiAJLmNsb3NlIAkgCQk9IGxpbmVfY2xvc2UsCiAJLndyaXRlIAkgCQk9IGxpbmVfd3JpdGUsCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc3RkZXJyX2NvbnNvbGUuYyBiL2FyY2gvdW0vZHJpdmVycy9zdGRlcnJfY29uc29sZS5jCmluZGV4IDZkMmNmMzIuLjkxMTUzOTIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy9zdGRlcnJfY29uc29sZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zdGRlcnJfY29uc29sZS5jCkBAIC05LDYgKzksOCBAQAogLyoKICAqIERvbid0IHJlZ2lzdGVyIGJ5IGRlZmF1bHQgLS0gYXMgdGhpcyByZWdpc3RlcmVzIHZlcnkgZWFybHkgaW4gdGhlCiAgKiBib290IHByb2Nlc3MgaXQgYmVjb21lcyB0aGUgZGVmYXVsdCBjb25zb2xlLgorICoKKyAqIEluaXRpYWxpemVkIGF0IGluaXQgdGltZS4KICAqLwogc3RhdGljIGludCB1c2Vfc3RkZXJyX2NvbnNvbGUgPSAwOwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5jIGIvYXJjaC91bS9kcml2ZXJzL3N0ZGlvX2NvbnNvbGUuYwppbmRleCA4NTZmNTY4Li5lNGJmY2ZlIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvc3RkaW9fY29uc29sZS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy9zdGRpb19jb25zb2xlLmMKQEAgLTEwOCw5ICsxMDgsMTAgQEAKIAlyZXR1cm4gbGluZV9vcGVuKHZ0cywgdHR5KTsKIH0KIAorLyogU2V0IGluIGFuIGluaXRjYWxsLCBjaGVja2VkIGluIGFuIGV4aXRjYWxsICovCiBzdGF0aWMgaW50IGNvbl9pbml0X2RvbmUgPSAwOwogCi1zdGF0aWMgc3RydWN0IHR0eV9vcGVyYXRpb25zIGNvbnNvbGVfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0dHlfb3BlcmF0aW9ucyBjb25zb2xlX29wcyA9IHsKIAkub3BlbiAJIAkJPSBjb25fb3BlbiwKIAkuY2xvc2UgCSAJCT0gbGluZV9jbG9zZSwKIAkud3JpdGUgCSAJCT0gbGluZV93cml0ZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy90dHkuYyBiL2FyY2gvdW0vZHJpdmVycy90dHkuYwppbmRleCA5ZjcwZWRmLi4xMWRlM2FjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdHR5LmMKKysrIGIvYXJjaC91bS9kcml2ZXJzL3R0eS5jCkBAIC0xOCw3ICsxOCw3IEBACiAJc3RydWN0IHRlcm1pb3MgdHQ7CiB9OwogCi1zdGF0aWMgdm9pZCAqdHR5X2NoYW5faW5pdChjaGFyICpzdHIsIGludCBkZXZpY2UsIHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCitzdGF0aWMgdm9pZCAqdHR5X2NoYW5faW5pdChjaGFyICpzdHIsIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7CiAJc3RydWN0IHR0eV9jaGFuICpkYXRhOwogCkBAIC02Miw3ICs2Miw3IEBACiAJcmV0dXJuIGZkOwogfQogCi1zdHJ1Y3QgY2hhbl9vcHMgdHR5X29wcyA9IHsKK2NvbnN0IHN0cnVjdCBjaGFuX29wcyB0dHlfb3BzID0gewogCS50eXBlCQk9ICJ0dHkiLAogCS5pbml0CQk9IHR0eV9jaGFuX2luaXQsCiAJLm9wZW4JCT0gdHR5X29wZW4sCmRpZmYgLS1naXQgYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYyBiL2FyY2gvdW0vZHJpdmVycy91YmRfa2Vybi5jCmluZGV4IDM0MDg1MzEuLmZkYTRhMzk0IDEwMDY0NAotLS0gYS9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYworKysgYi9hcmNoL3VtL2RyaXZlcnMvdWJkX2tlcm4uYwpAQCAtNjY4LDE4ICs2NjgsMTUgQEAKIAlpZihkZXYtPmZpbGUgPT0gTlVMTCkKIAkJZ290byBvdXQ7CiAKLQlpZiAodWJkX29wZW5fZGV2KGRldikpCi0JCWdvdG8gb3V0OwotCiAJZXJyID0gdWJkX2ZpbGVfc2l6ZShkZXYsICZkZXYtPnNpemUpOwogCWlmKGVyciA8IDApCi0JCWdvdG8gb3V0X2Nsb3NlOworCQlnb3RvIG91dDsKIAogCWRldi0+c2l6ZSA9IFJPVU5EX0JMT0NLKGRldi0+c2l6ZSk7CiAKIAllcnIgPSB1YmRfbmV3X2Rpc2soTUFKT1JfTlIsIGRldi0+c2l6ZSwgbiwgJnViZF9nZW5kaXNrW25dKTsKIAlpZihlcnIpCi0JCWdvdG8gb3V0X2Nsb3NlOworCQlnb3RvIG91dDsKIAogCWlmKGZha2VfbWFqb3IgIT0gTUFKT1JfTlIpCiAJCXViZF9uZXdfZGlzayhmYWtlX21ham9yLCBkZXYtPnNpemUsIG4sCkBAIC02OTEsOCArNjg4LDYgQEAKIAkJbWFrZV9pZGVfZW50cmllcyh1YmRfZ2VuZGlza1tuXS0+ZGlza19uYW1lKTsKIAogCWVyciA9IDA7Ci1vdXRfY2xvc2U6Ci0JdWJkX2Nsb3NlKGRldik7CiBvdXQ6CiAJcmV0dXJuIGVycjsKIH0KQEAgLTk4Niw4ICs5ODEsNiBAQAogCV9fdTY0IG9mZnNldDsKIAlpbnQgbGVuOwogCi0JaWYocmVxLT5ycV9zdGF0dXMgPT0gUlFfSU5BQ1RJVkUpIHJldHVybigxKTsKLQogCS8qIFRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUgbm93ICovCiAJaWYoKHJxX2RhdGFfZGlyKHJlcSkgPT0gV1JJVEUpICYmICFkZXYtPm9wZW5mbGFncy53KXsKIAkJcHJpbnRrKCJXcml0ZSBhdHRlbXB0ZWQgb24gcmVhZG9ubHkgdWJkIGRldmljZSAlc1xuIiwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vZHJpdmVycy94dGVybS5jIGIvYXJjaC91bS9kcml2ZXJzL3h0ZXJtLmMKaW5kZXggYWFhNjM2NjYuLjM4NmY4YjkgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vZHJpdmVycy94dGVybS5jCisrKyBiL2FyY2gvdW0vZHJpdmVycy94dGVybS5jCkBAIC0zMSw3ICszMSw3IEBACiB9OwogCiAvKiBOb3Qgc3RhdGljIGJlY2F1c2UgaXQncyBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIHR0IG1vZGUgZ2RiIGNvZGUgKi8KLXZvaWQgKnh0ZXJtX2luaXQoY2hhciAqc3RyLCBpbnQgZGV2aWNlLCBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKQordm9pZCAqeHRlcm1faW5pdChjaGFyICpzdHIsIGludCBkZXZpY2UsIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpCiB7CiAJc3RydWN0IHh0ZXJtX2NoYW4gKmRhdGE7CiAKQEAgLTE5NCw3ICsxOTQsNyBAQAogCWZyZWUoZCk7CiB9CiAKLXN0cnVjdCBjaGFuX29wcyB4dGVybV9vcHMgPSB7Citjb25zdCBzdHJ1Y3QgY2hhbl9vcHMgeHRlcm1fb3BzID0gewogCS50eXBlCQk9ICJ4dGVybSIsCiAJLmluaXQJCT0geHRlcm1faW5pdCwKIAkub3BlbgkJPSB4dGVybV9vcGVuLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL2NoYW5fa2Vybi5oIGIvYXJjaC91bS9pbmNsdWRlL2NoYW5fa2Vybi5oCmluZGV4IDFiYjVlOWQuLjU3MmQyODYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9jaGFuX2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvY2hhbl9rZXJuLmgKQEAgLTIzLDIxICsyMywyMSBAQAogCXVuc2lnbmVkIGludCBvcGVuZWQ6MTsKIAl1bnNpZ25lZCBpbnQgZW5hYmxlZDoxOwogCWludCBmZDsKLQlzdHJ1Y3QgY2hhbl9vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgY2hhbl9vcHMgKm9wczsKIAl2b2lkICpkYXRhOwogfTsKIAogZXh0ZXJuIHZvaWQgY2hhbl9pbnRlcnJ1cHQoc3RydWN0IGxpc3RfaGVhZCAqY2hhbnMsIHN0cnVjdCB3b3JrX3N0cnVjdCAqdGFzaywKIAkJCSAgIHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCBpcnEpOwogZXh0ZXJuIGludCBwYXJzZV9jaGFuX3BhaXIoY2hhciAqc3RyLCBzdHJ1Y3QgbGluZSAqbGluZSwgaW50IGRldmljZSwKLQkJCSAgIHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpOworCQkJICAgY29uc3Qgc3RydWN0IGNoYW5fb3B0cyAqb3B0cyk7CiBleHRlcm4gaW50IG9wZW5fY2hhbihzdHJ1Y3QgbGlzdF9oZWFkICpjaGFucyk7CiBleHRlcm4gaW50IHdyaXRlX2NoYW4oc3RydWN0IGxpc3RfaGVhZCAqY2hhbnMsIGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGxlbiwKIAkJCSAgICAgaW50IHdyaXRlX2lycSk7CiBleHRlcm4gaW50IGNvbnNvbGVfd3JpdGVfY2hhbihzdHJ1Y3QgbGlzdF9oZWFkICpjaGFucywgY29uc3QgY2hhciAqYnVmLCAKIAkJCSAgICAgIGludCBsZW4pOwogZXh0ZXJuIGludCBjb25zb2xlX29wZW5fY2hhbihzdHJ1Y3QgbGluZSAqbGluZSwgc3RydWN0IGNvbnNvbGUgKmNvLAotCQkJICAgICBzdHJ1Y3QgY2hhbl9vcHRzICpvcHRzKTsKKwkJCSAgICAgY29uc3Qgc3RydWN0IGNoYW5fb3B0cyAqb3B0cyk7CiBleHRlcm4gdm9pZCBkZWFjdGl2YXRlX2NoYW4oc3RydWN0IGxpc3RfaGVhZCAqY2hhbnMsIGludCBpcnEpOwogZXh0ZXJuIHZvaWQgcmVhY3RpdmF0ZV9jaGFuKHN0cnVjdCBsaXN0X2hlYWQgKmNoYW5zLCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGNoYW5fZW5hYmxlX3dpbmNoKHN0cnVjdCBsaXN0X2hlYWQgKmNoYW5zLCBzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9jaGFuX3VzZXIuaCBiL2FyY2gvdW0vaW5jbHVkZS9jaGFuX3VzZXIuaAppbmRleCA2NTliYjNjLi5hNzk1NTQ3IDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvY2hhbl91c2VyLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL2NoYW5fdXNlci5oCkBAIC0yMCw3ICsyMCw3IEBACiAKIHN0cnVjdCBjaGFuX29wcyB7CiAJY2hhciAqdHlwZTsKLQl2b2lkICooKmluaXQpKGNoYXIgKiwgaW50LCBzdHJ1Y3QgY2hhbl9vcHRzICopOworCXZvaWQgKigqaW5pdCkoY2hhciAqLCBpbnQsIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKik7CiAJaW50ICgqb3BlbikoaW50LCBpbnQsIGludCwgdm9pZCAqLCBjaGFyICoqKTsKIAl2b2lkICgqY2xvc2UpKGludCwgdm9pZCAqKTsKIAlpbnQgKCpyZWFkKShpbnQsIGNoYXIgKiwgdm9pZCAqKTsKQEAgLTMxLDggKzMxLDggQEAKIAlpbnQgd2luY2g7CiB9OwogCi1leHRlcm4gc3RydWN0IGNoYW5fb3BzIGZkX29wcywgbnVsbF9vcHMsIHBvcnRfb3BzLCBwdHNfb3BzLCBwdHlfb3BzLCB0dHlfb3BzLAotCXh0ZXJtX29wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgY2hhbl9vcHMgZmRfb3BzLCBudWxsX29wcywgcG9ydF9vcHMsIHB0c19vcHMsIHB0eV9vcHMsCisJdHR5X29wcywgeHRlcm1fb3BzOwogCiBleHRlcm4gdm9pZCBnZW5lcmljX2Nsb3NlKGludCBmZCwgdm9pZCAqdW51c2VkKTsKIGV4dGVybiBpbnQgZ2VuZXJpY19yZWFkKGludCBmZCwgY2hhciAqY19vdXQsIHZvaWQgKnVudXNlZCk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmggYi9hcmNoL3VtL2luY2x1ZGUva2Vybl91dGlsLmgKaW5kZXggODllMWRjOC4uNTljZmE5ZSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL2tlcm5fdXRpbC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9rZXJuX3V0aWwuaApAQCAtMjEsNyArMjEsNyBAQAogCWtlcm5faG5kbCB0aW1lcl9oYW5kbGVyOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBrZXJuX2hhbmRsZXJzIGhhbmRsaW5mb19rZXJuOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBrZXJuX2hhbmRsZXJzIGhhbmRsaW5mb19rZXJuOwogCiBleHRlcm4gaW50IG5jcHVzOwogZXh0ZXJuIGNoYXIgKmxpbnV4X3Byb2c7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvbGluZS5oIGIvYXJjaC91bS9pbmNsdWRlL2xpbmUuaAppbmRleCAyN2JmMmY2Li42NDJjOWEwIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbGluZS5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9saW5lLmgKQEAgLTUyLDcgKzUyLDcgQEAKIAogCWludCBzaWdpbzsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGFzazsKLQlzdHJ1Y3QgbGluZV9kcml2ZXIgKmRyaXZlcjsKKwljb25zdCBzdHJ1Y3QgbGluZV9kcml2ZXIgKmRyaXZlcjsKIAlpbnQgaGF2ZV9pcnE7CiB9OwogCkBAIC05OSw3ICs5OSw3IEBACiBleHRlcm4gdm9pZCBjbG9zZV9saW5lcyhzdHJ1Y3QgbGluZSAqbGluZXMsIGludCBubGluZXMpOwogCiBleHRlcm4gaW50IGxpbmVfY29uZmlnKHN0cnVjdCBsaW5lICpsaW5lcywgdW5zaWduZWQgaW50IHNpemVvZl9saW5lcywKLQkJICAgICAgIGNoYXIgKnN0ciwgc3RydWN0IGNoYW5fb3B0cyAqb3B0cyk7CisJCSAgICAgICBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBjaGFuX29wdHMgKm9wdHMpOwogZXh0ZXJuIGludCBsaW5lX2lkKGNoYXIgKipzdHIsIGludCAqc3RhcnRfb3V0LCBpbnQgKmVuZF9vdXQpOwogZXh0ZXJuIGludCBsaW5lX3JlbW92ZShzdHJ1Y3QgbGluZSAqbGluZXMsIHVuc2lnbmVkIGludCBzaXplb2ZfbGluZXMsIGludCBuKTsKIGV4dGVybiBpbnQgbGluZV9nZXRfY29uZmlnKGNoYXIgKmRldiwgc3RydWN0IGxpbmUgKmxpbmVzLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL25ldF9rZXJuLmggYi9hcmNoL3VtL2luY2x1ZGUvbmV0X2tlcm4uaAppbmRleCBmN2RlNmRmLi4yODA0NTlmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbmV0X2tlcm4uaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbmV0X2tlcm4uaApAQCAtMTgsNyArMTgsNiBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGRldjsKIAlpbnQgaW5kZXg7CiAJdW5zaWduZWQgY2hhciBtYWNbRVRIX0FMRU5dOwotCWludCBoYXZlX21hYzsKIH07CiAKIHN0cnVjdCB1bWxfbmV0X3ByaXZhdGUgewpAQCAtMjksNyArMjgsNiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwogCWludCBmZDsKIAl1bnNpZ25lZCBjaGFyIG1hY1tFVEhfQUxFTl07Ci0JaW50IGhhdmVfbWFjOwogCXVuc2lnbmVkIHNob3J0ICgqcHJvdG9jb2wpKHN0cnVjdCBza19idWZmICopOwogCWludCAoKm9wZW4pKHZvaWQgKik7CiAJdm9pZCAoKmNsb3NlKShpbnQsIHZvaWQgKik7CkBAIC01NCwxNSArNTIsMTQgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJY2hhciAqbmFtZTsKIAlpbnQgKCpzZXR1cCkoY2hhciAqLCBjaGFyICoqLCB2b2lkICopOwotCXN0cnVjdCBuZXRfdXNlcl9pbmZvICp1c2VyOwotCXN0cnVjdCBuZXRfa2Vybl9pbmZvICprZXJuOworCWNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvICp1c2VyOworCWNvbnN0IHN0cnVjdCBuZXRfa2Vybl9pbmZvICprZXJuOwogCWludCBwcml2YXRlX3NpemU7CiAJaW50IHNldHVwX3NpemU7CiB9OwogCiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmV0aGVyX2luaXQoaW50KTsKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBldGhlcl9wcm90b2NvbChzdHJ1Y3Qgc2tfYnVmZiAqKTsKLWV4dGVybiBpbnQgc2V0dXBfZXRoZXJhZGRyKGNoYXIgKnN0ciwgdW5zaWduZWQgY2hhciAqYWRkcik7CiBleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmV0aGVyX2FkanVzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGV4dHJhKTsKIGV4dGVybiBpbnQgdGFwX3NldHVwX2NvbW1vbihjaGFyICpzdHIsIGNoYXIgKnR5cGUsIGNoYXIgKipkZXZfbmFtZSwgCiAJCQkgICAgY2hhciAqKm1hY19vdXQsIGNoYXIgKipnYXRlX2FkZHIpOwpAQCAtNzAsMTQgKzY3LDMgQEAKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBldGhfcHJvdG9jb2woc3RydWN0IHNrX2J1ZmYgKnNrYik7CiAKICNlbmRpZgotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL25ldF91c2VyLmggYi9hcmNoL3VtL2luY2x1ZGUvbmV0X3VzZXIuaAppbmRleCA0N2VmN2NiLi4xOWYyMDdjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvbmV0X3VzZXIuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvbmV0X3VzZXIuaApAQCAtMSw0ICsxLDQgQEAKLS8qIAorLyoKICAqIENvcHlyaWdodCAoQykgMjAwMiBKZWZmIERpa2UgKGpkaWtlQGthcmF5YS5jb20pCiAgKiBMaWNlbnNlZCB1bmRlciB0aGUgR1BMCiAgKi8KQEAgLTI1LDkgKzI1LDggQEAKIH07CiAKIGV4dGVybiB2b2lkIGV0aGVyX3VzZXJfaW5pdCh2b2lkICpkYXRhLCB2b2lkICpkZXYpOwotZXh0ZXJuIHZvaWQgZGV2X2lwX2FkZHIodm9pZCAqZCwgdW5zaWduZWQgY2hhciAqYmluX2J1Zik7Ci1leHRlcm4gdm9pZCBpdGVyX2FkZHJlc3Nlcyh2b2lkICpkLCB2b2lkICgqY2IpKHVuc2lnbmVkIGNoYXIgKiwgCi0JCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICosIHZvaWQgKiksIAorZXh0ZXJuIHZvaWQgaXRlcl9hZGRyZXNzZXModm9pZCAqZCwgdm9pZCAoKmNiKSh1bnNpZ25lZCBjaGFyICosCisJCQkJCSAgICAgICB1bnNpZ25lZCBjaGFyICosIHZvaWQgKiksCiAJCQkgICB2b2lkICphcmcpOwogCiBleHRlcm4gdm9pZCAqZ2V0X291dHB1dF9idWZmZXIoaW50ICpsZW5fb3V0KTsKQEAgLTUyLDE0ICs1MSwzIEBACiBleHRlcm4gaW50IGRldl9uZXRtYXNrKHZvaWQgKmQsIHZvaWQgKm0pOwogCiAjZW5kaWYKLQotLyoKLSAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgotICogRW1hY3Mgd2lsbCBub3RpY2UgdGhpcyBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBmaWxlIGFuZCBhdXRvbWF0aWNhbGx5Ci0gKiBhZGp1c3QgdGhlIHNldHRpbmdzIGZvciB0aGlzIGJ1ZmZlciBvbmx5LiAgVGhpcyBtdXN0IHJlbWFpbiBhdCB0aGUgZW5kCi0gKiBvZiB0aGUgZmlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1maWxlLXN0eWxlOiAibGludXgiCi0gKiBFbmQ6Ci0gKi8KZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9vcy5oIGIvYXJjaC91bS9pbmNsdWRlL29zLmgKaW5kZXggMjRmYjZkOC4uMTIwY2EyMSAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL29zLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL29zLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlICJza2FzL21tX2lkLmgiCiAjaW5jbHVkZSAiaXJxX3VzZXIuaCIKICNpbmNsdWRlICJzeXNkZXAvdGxzLmgiCisjaW5jbHVkZSAic3lzZGVwL2FyY2hzZXRqbXAuaCIKIAogI2RlZmluZSBPU19UWVBFX0ZJTEUgMQogI2RlZmluZSBPU19UWVBFX0RJUiAyCkBAIC0xOTgsNyArMTk5LDkgQEAKIGV4dGVybiBpbnQgb3NfZ2V0cGlkKHZvaWQpOwogZXh0ZXJuIGludCBvc19nZXRwZ3JwKHZvaWQpOwogCisjaWZkZWYgVU1MX0NPTkZJR19NT0RFX1RUCiBleHRlcm4gdm9pZCBpbml0X25ld190aHJlYWRfc3RhY2sodm9pZCAqc2lnX3N0YWNrLCB2b2lkICgqdXNyMV9oYW5kbGVyKShpbnQpKTsKKyNlbmRpZgogZXh0ZXJuIHZvaWQgaW5pdF9uZXdfdGhyZWFkX3NpZ25hbHModm9pZCk7CiBleHRlcm4gaW50IHJ1bl9rZXJuZWxfdGhyZWFkKGludCAoKmZuKSh2b2lkICopLCB2b2lkICphcmcsIHZvaWQgKipqbXBfcHRyKTsKIApAQCAtMjE2LDcgKzIxOSw2IEBACiAgKi8KIGV4dGVybiB2b2lkIGZvcndhcmRfaXBpKGludCBmZCwgaW50IHBpZCk7CiBleHRlcm4gdm9pZCBraWxsX2NoaWxkX2RlYWQoaW50IHBpZCk7Ci1leHRlcm4gdm9pZCBzdG9wKHZvaWQpOwogZXh0ZXJuIGludCB3YWl0X2Zvcl9zdG9wKGludCBwaWQsIGludCBzaWcsIGludCBjb250X3R5cGUsIHZvaWQgKnJlbGF5KTsKIGV4dGVybiBpbnQgcHJvdGVjdF9tZW1vcnkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCSAgaW50IHIsIGludCB3LCBpbnQgeCwgaW50IG11c3Rfc3VjY2VlZCk7CkBAIC0zMDcsMTIgKzMwOSw5IEBACiBleHRlcm4gdm9pZCB1c2Vyc3BhY2UodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIHZvaWQgbWFwX3N0dWJfcGFnZXMoaW50IGZkLCB1bnNpZ25lZCBsb25nIGNvZGUsCiAJCQkgICB1bnNpZ25lZCBsb25nIGRhdGEsIHVuc2lnbmVkIGxvbmcgc3RhY2spOwotZXh0ZXJuIHZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgdm9pZCAqKnN3aXRjaF9idWZfcHRyLAotCQkJIHZvaWQgKipmb3JrX2J1Zl9wdHIsIHZvaWQgKCpoYW5kbGVyKShpbnQpKTsKLWV4dGVybiB2b2lkIHRocmVhZF93YWl0KHZvaWQgKnN3LCB2b2lkICpmYik7Ci1leHRlcm4gdm9pZCBzd2l0Y2hfdGhyZWFkcyh2b2lkICptZSwgdm9pZCAqbmV4dCk7Ci1leHRlcm4gaW50IHN0YXJ0X2lkbGVfdGhyZWFkKHZvaWQgKnN0YWNrLCB2b2lkICpzd2l0Y2hfYnVmX3B0ciwKLQkJCSAgICAgdm9pZCAqKmZvcmtfYnVmX3B0cik7CitleHRlcm4gdm9pZCBuZXdfdGhyZWFkKHZvaWQgKnN0YWNrLCBqbXBfYnVmICpidWYsIHZvaWQgKCpoYW5kbGVyKSh2b2lkKSk7CitleHRlcm4gdm9pZCBzd2l0Y2hfdGhyZWFkcyhqbXBfYnVmICptZSwgam1wX2J1ZiAqeW91KTsKK2V4dGVybiBpbnQgc3RhcnRfaWRsZV90aHJlYWQodm9pZCAqc3RhY2ssIGptcF9idWYgKnN3aXRjaF9idWYpOwogZXh0ZXJuIHZvaWQgaW5pdGlhbF90aHJlYWRfY2Jfc2thcyh2b2lkICgqcHJvYykodm9pZCAqKSwKIAkJCQkgdm9pZCAqYXJnKTsKIGV4dGVybiB2b2lkIGhhbHRfc2thcyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9za2FzL3NrYXMuaCBiL2FyY2gvdW0vaW5jbHVkZS9za2FzL3NrYXMuaAppbmRleCA4NTNiMjZmLi5lODg5MjZiIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc2thcy9za2FzLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3NrYXMvc2thcy5oCkBAIC0xNCw4ICsxNCw3IEBACiBleHRlcm4gaW50IHNrYXNfbmVlZHNfc3R1YjsKIAogZXh0ZXJuIGludCB1c2VyX3RocmVhZCh1bnNpZ25lZCBsb25nIHN0YWNrLCBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgbmV3X3RocmVhZF9wcm9jKHZvaWQgKnN0YWNrLCB2b2lkICgqaGFuZGxlcikoaW50IHNpZykpOwotZXh0ZXJuIHZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKGludCBzaWcpOworZXh0ZXJuIHZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKHZvaWQpOwogZXh0ZXJuIHZvaWQgaGFuZGxlX3N5c2NhbGwodW5pb24gdW1sX3B0X3JlZ3MgKnJlZ3MpOwogZXh0ZXJuIGludCBuZXdfbW0odW5zaWduZWQgbG9uZyBzdGFjayk7CiBleHRlcm4gdm9pZCBnZXRfc2thc19mYXVsdGluZm8oaW50IHBpZCwgc3RydWN0IGZhdWx0aW5mbyAqIGZpKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9hcmNoc2V0am1wLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLWkzODYvYXJjaHNldGptcC5oCmluZGV4IGVhMWJhM2QuLjExYmFmYWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAtaTM4Ni9hcmNoc2V0am1wLmgKKysrIGIvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC1pMzg2L2FyY2hzZXRqbXAuaApAQCAtMTYsNCArMTYsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKIAorI2RlZmluZSBKQl9JUCBfX2VpcAorI2RlZmluZSBKQl9TUCBfX2VzcAorCiAjZW5kaWYJCQkJLyogX1NFVEpNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9hcmNoc2V0am1wLmggYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9hcmNoc2V0am1wLmgKaW5kZXggNDU0ZmM2MC4uOWE1ZTFhNiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvYXJjaHNldGptcC5oCisrKyBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L2FyY2hzZXRqbXAuaApAQCAtMTgsNCArMTgsNyBAQAogCiB0eXBlZGVmIHN0cnVjdCBfX2ptcF9idWYgam1wX2J1ZlsxXTsKIAorI2RlZmluZSBKQl9JUCBfX3JpcAorI2RlZmluZSBKQl9TUCBfX3JzcAorCiAjZW5kaWYJCQkJLyogX1NFVEpNUF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2UuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3B0cmFjZS5oCmluZGV4IDhkMzUzZjAuLjYxN2JiOWVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2UuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9wdHJhY2UuaApAQCAtNTAsNiArNTAsMjEgQEAKICNkZWZpbmUgSE9TVF9GUyAyNQogI2RlZmluZSBIT1NUX0dTIDI2CiAKKy8qIEFsc28gZGVmaW5lZCBpbiBhc20vcHRyYWNlLXg4Nl82NC5oLCBidXQgbm90IGluIGxpYmMgaGVhZGVycy4gIFNvLCB0aGVzZQorICogYXJlIGFscmVhZHkgZGVmaW5lZCBmb3Iga2VybmVsIGNvZGUsIGJ1dCBub3QgZm9yIHVzZXJzcGFjZSBjb2RlLgorICovCisjaWZuZGVmIEZTX0JBU0UKKy8qIFRoZXNlIGFyZW4ndCBkZWZpbmVkIGluIHB0cmFjZS5oLCBidXQgZXhpc3QgaW4gc3RydWN0IHVzZXJfcmVnc19zdHJ1Y3QsCisgKiB3aGljaCBpcyB3aGF0IHg4Nl82NCBwdHJhY2UgYWN0dWFsbHkgdXNlcy4KKyAqLworI2RlZmluZSBGU19CQVNFIChIT1NUX0ZTX0JBU0UgKiBzaXplb2YobG9uZykpCisjZGVmaW5lIEdTX0JBU0UgKEhPU1RfR1NfQkFTRSAqIHNpemVvZihsb25nKSkKKyNkZWZpbmUgRFMgKEhPU1RfRFMgKiBzaXplb2YobG9uZykpCisjZGVmaW5lIEVTIChIT1NUX0VTICogc2l6ZW9mKGxvbmcpKQorI2RlZmluZSBGUyAoSE9TVF9GUyAqIHNpemVvZihsb25nKSkKKyNkZWZpbmUgR1MgKEhPU1RfR1MgKiBzaXplb2YobG9uZykpCisjZW5kaWYKKwogI2RlZmluZSBSRUdTX0ZTX0JBU0UocikgKChyKVtIT1NUX0ZTX0JBU0VdKQogI2RlZmluZSBSRUdTX0dTX0JBU0UocikgKChyKVtIT1NUX0dTX0JBU0VdKQogI2RlZmluZSBSRUdTX0RTKHIpICgocilbSE9TVF9EU10pCkBAIC04OSw5ICsxMDQsMTIgQEAKICNlbmRpZgogI2lmZGVmIFVNTF9DT05GSUdfTU9ERV9TS0FTCiAJc3RydWN0IHNrYXNfcmVncyB7Ci0JCS8qIFhYWCAqLwotCQl1bnNpZ25lZCBsb25nIHJlZ3NbMjddOwotCQl1bnNpZ25lZCBsb25nIGZwWzY1XTsKKwkJLyogeDg2XzY0IHB0cmFjZSB1c2VzIHNpemVvZih1c2VyX3JlZ3Nfc3RydWN0KSBhcyBpdHMgcmVnaXN0ZXIKKwkJICogZmlsZSBzaXplLCB3aGlsZSBpMzg2IHVzZXMgRlJBTUVfU0laRS4gIFRoZXJlZm9yZSwgd2UgbmVlZAorCQkgKiB0byB1c2UgVU1fRlJBTUVfU0laRSBoZXJlIGluc3RlYWQgb2YgSE9TVF9GUkFNRV9TSVpFLgorCQkgKi8KKwkJdW5zaWduZWQgbG9uZyByZWdzW1VNX0ZSQU1FX1NJWkVdOworCQl1bnNpZ25lZCBsb25nIGZwW0hPU1RfRlBfU0laRV07CiAgICAgICAgICAgICAgICAgc3RydWN0IGZhdWx0aW5mbyBmYXVsdGluZm87CiAJCWxvbmcgc3lzY2FsbDsKIAkJaW50IGlzX3VzZXI7CkBAIC0xMjAsMTEgKzEzOCwxNiBAQAogI2RlZmluZSBVUFRfUjE0KHIpIF9fQ0hPT1NFX01PREUoU0NfUjE0KFVQVF9TQyhyKSksIFJFR1NfUjE0KChyKS0+c2thcy5yZWdzKSkKICNkZWZpbmUgVVBUX1IxNShyKSBfX0NIT09TRV9NT0RFKFNDX1IxNShVUFRfU0MocikpLCBSRUdTX1IxNSgociktPnNrYXMucmVncykpCiAjZGVmaW5lIFVQVF9DUyhyKSBfX0NIT09TRV9NT0RFKFNDX0NTKFVQVF9TQyhyKSksIFJFR1NfQ1MoKHIpLT5za2FzLnJlZ3MpKQorI2RlZmluZSBVUFRfRlNfQkFTRShyKSBcCisJX19DSE9PU0VfTU9ERShTQ19GU19CQVNFKFVQVF9TQyhyKSksIFJFR1NfRlNfQkFTRSgociktPnNrYXMucmVncykpCiAjZGVmaW5lIFVQVF9GUyhyKSBfX0NIT09TRV9NT0RFKFNDX0ZTKFVQVF9TQyhyKSksIFJFR1NfRlMoKHIpLT5za2FzLnJlZ3MpKQorI2RlZmluZSBVUFRfR1NfQkFTRShyKSBcCisJX19DSE9PU0VfTU9ERShTQ19HU19CQVNFKFVQVF9TQyhyKSksIFJFR1NfR1NfQkFTRSgociktPnNrYXMucmVncykpCiAjZGVmaW5lIFVQVF9HUyhyKSBfX0NIT09TRV9NT0RFKFNDX0dTKFVQVF9TQyhyKSksIFJFR1NfR1MoKHIpLT5za2FzLnJlZ3MpKQogI2RlZmluZSBVUFRfRFMocikgX19DSE9PU0VfTU9ERShTQ19EUyhVUFRfU0MocikpLCBSRUdTX0RTKChyKS0+c2thcy5yZWdzKSkKICNkZWZpbmUgVVBUX0VTKHIpIF9fQ0hPT1NFX01PREUoU0NfRVMoVVBUX1NDKHIpKSwgUkVHU19FUygociktPnNrYXMucmVncykpCiAjZGVmaW5lIFVQVF9DUyhyKSBfX0NIT09TRV9NT0RFKFNDX0NTKFVQVF9TQyhyKSksIFJFR1NfQ1MoKHIpLT5za2FzLnJlZ3MpKQorI2RlZmluZSBVUFRfU1MocikgX19DSE9PU0VfTU9ERShTQ19TUyhVUFRfU0MocikpLCBSRUdTX1NTKChyKS0+c2thcy5yZWdzKSkKICNkZWZpbmUgVVBUX09SSUdfUkFYKHIpIFwKIAlfX0NIT09TRV9NT0RFKChyKS0+dHQub3JpZ19yYXgsIFJFR1NfT1JJR19SQVgoKHIpLT5za2FzLnJlZ3MpKQogCkBAIC0xODMsNiArMjA2LDEzIEBACiAgICAgICAgICAgICAgICAgY2FzZSBSQlA6IHZhbCA9IFVQVF9SQlAocmVncyk7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgY2FzZSBPUklHX1JBWDogdmFsID0gVVBUX09SSUdfUkFYKHJlZ3MpOyBicmVhazsgXAogICAgICAgICAgICAgICAgIGNhc2UgQ1M6IHZhbCA9IFVQVF9DUyhyZWdzKTsgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBjYXNlIFNTOiB2YWwgPSBVUFRfU1MocmVncyk7IGJyZWFrOyBcCisJCWNhc2UgRlNfQkFTRTogdmFsID0gVVBUX0ZTX0JBU0UocmVncyk7IGJyZWFrOyBcCisgICAgICAgICAgICAgICAgY2FzZSBHU19CQVNFOiB2YWwgPSBVUFRfR1NfQkFTRShyZWdzKTsgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBjYXNlIERTOiB2YWwgPSBVUFRfRFMocmVncyk7IGJyZWFrOyBcCisgICAgICAgICAgICAgICAgY2FzZSBFUzogdmFsID0gVVBUX0VTKHJlZ3MpOyBicmVhazsgXAorICAgICAgICAgICAgICAgIGNhc2UgRlMgOiB2YWwgPSBVUFRfRlMgKHJlZ3MpOyBicmVhazsgXAorCQljYXNlIEdTOiB2YWwgPSBVUFRfR1MocmVncyk7IGJyZWFrOwkgICAgXAogICAgICAgICAgICAgICAgIGNhc2UgRUZMQUdTOiB2YWwgPSBVUFRfRUZMQUdTKHJlZ3MpOyBicmVhazsgXAogICAgICAgICAgICAgICAgIGRlZmF1bHQgOiAgXAogICAgICAgICAgICAgICAgICAgICAgICAgcGFuaWMoIkJhZCByZWdpc3RlciBpbiBVUFRfUkVHIDogJWRcbiIsIHJlZyk7ICBcCkBAIC0yMTQsNiArMjQ0LDEzIEBACiAgICAgICAgICAgICAgICAgY2FzZSBSQlA6IFVQVF9SQlAocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOyBcCiAgICAgICAgICAgICAgICAgY2FzZSBPUklHX1JBWDogVVBUX09SSUdfUkFYKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsgXAogICAgICAgICAgICAgICAgIGNhc2UgQ1M6IFVQVF9DUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBjYXNlIFNTOiBVUFRfU1MocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOyBcCisgICAgICAgICAgICAgICAgY2FzZSBGU19CQVNFOiBVUFRfRlNfQkFTRShyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBjYXNlIEdTX0JBU0U6IFVQVF9HU19CQVNFKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsgXAorICAgICAgICAgICAgICAgIGNhc2UgRFM6IFVQVF9EUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKKyAgICAgICAgICAgICAgICBjYXNlIEVTOiBVUFRfRVMocmVncykgPSBfX3VwdF92YWw7IGJyZWFrOyBcCisgICAgICAgICAgICAgICAgY2FzZSBGUzogVVBUX0ZTKHJlZ3MpID0gX191cHRfdmFsOyBicmVhazsgXAorICAgICAgICAgICAgICAgIGNhc2UgR1M6IFVQVF9HUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKICAgICAgICAgICAgICAgICBjYXNlIEVGTEFHUzogVVBUX0VGTEFHUyhyZWdzKSA9IF9fdXB0X3ZhbDsgYnJlYWs7IFwKICAgICAgICAgICAgICAgICBkZWZhdWx0IDogIFwKICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmljKCJCYWQgcmVnaXN0ZXIgaW4gVVBUX1NFVCA6ICVkXG4iLCByZWcpOyAgXApkaWZmIC0tZ2l0IGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2MuaCBiL2FyY2gvdW0vaW5jbHVkZS9zeXNkZXAteDg2XzY0L3NjLmgKaW5kZXggYTE2MGQ5Zi4uOGFlZTQ1YiAxMDA2NDQKLS0tIGEvYXJjaC91bS9pbmNsdWRlL3N5c2RlcC14ODZfNjQvc2MuaAorKysgYi9hcmNoL3VtL2luY2x1ZGUvc3lzZGVwLXg4Nl82NC9zYy5oCkBAIC0zNSwxMSArMzUsMTEgQEAKICNkZWZpbmUgU0NfR1Moc2MpIFNDX09GRlNFVChzYywgU0NfR1MpCiAjZGVmaW5lIFNDX0VGTEFHUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19FRkxBR1MpCiAjZGVmaW5lIFNDX1NJR01BU0soc2MpIFNDX09GRlNFVChzYywgU0NfU0lHTUFTSykKKyNkZWZpbmUgU0NfU1Moc2MpIFNDX09GRlNFVChzYywgU0NfU1MpCiAjaWYgMAogI2RlZmluZSBTQ19PUklHX1JBWChzYykgU0NfT0ZGU0VUKHNjLCBTQ19PUklHX1JBWCkKICNkZWZpbmUgU0NfRFMoc2MpIFNDX09GRlNFVChzYywgU0NfRFMpCiAjZGVmaW5lIFNDX0VTKHNjKSBTQ19PRkZTRVQoc2MsIFNDX0VTKQotI2RlZmluZSBTQ19TUyhzYykgU0NfT0ZGU0VUKHNjLCBTQ19TUykKICNlbmRpZgogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL01ha2VmaWxlIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKaW5kZXggYTJkOTMwNi4uNmZhNjNhMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBjbGVhbi1maWxlcyA6PQogCiBvYmoteSA9IGNvbmZpZy5vIGV4ZWMubyBleGl0Y29kZS5vIGluaXRfdGFzay5vIGlycS5vIGtzeW1zLm8gbWVtLm8gXAotCXBoeXNtZW0ubyBwcm9jZXNzX2tlcm4ubyBwdHJhY2UubyByZWJvb3QubyByZXNvdXJjZS5vIHNpZ2lvLm8gXAorCXBoeXNtZW0ubyBwcm9jZXNzLm8gcHRyYWNlLm8gcmVib290Lm8gcmVzb3VyY2UubyBzaWdpby5vIFwKIAlzaWduYWwubyBzbXAubyBzeXNjYWxsLm8gc3lzcnEubyB0aW1lLm8gdGxiLm8gdHJhcC5vIHVhY2Nlc3MubyBcCiAJdW1fYXJjaC5vIHVtaWQubwogCmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9leGl0Y29kZS5jIGIvYXJjaC91bS9rZXJuZWwvZXhpdGNvZGUuYwppbmRleCBkMjFlYmFkLi44YjdmMmNkIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9leGl0Y29kZS5jCisrKyBiL2FyY2gvdW0va2VybmVsL2V4aXRjb2RlLmMKQEAgLTE2LDkgKzE2LDEzIEBACiBzdGF0aWMgaW50IHJlYWRfcHJvY19leGl0Y29kZShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKIAkJCSAgICAgIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IGxlbjsKKwlpbnQgbGVuLCB2YWw7CiAKLQlsZW4gPSBzcHJpbnRmKHBhZ2UsICIlZFxuIiwgdW1sX2V4aXRjb2RlKTsKKwkvKiBTYXZlIHVtbF9leGl0Y29kZSBpbiBhIGxvY2FsIHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBndWFyYW50ZWUKKwkgKiB0aGF0IHNwcmludGYgYWNjZXNzZXMgaXQgYXRvbWljYWxseS4KKwkgKi8KKwl2YWwgPSB1bWxfZXhpdGNvZGU7CisJbGVuID0gc3ByaW50ZihwYWdlLCAiJWRcbiIsIHZhbCk7CiAJbGVuIC09IG9mZjsKIAlpZihsZW4gPD0gb2ZmK2NvdW50KSAqZW9mID0gMTsKIAkqc3RhcnQgPSBwYWdlICsgb2ZmOwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvZ21vbl9zeW1zLmMgYi9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYwppbmRleCAyYzg2ZTdmLi4xM2FhMTE1IDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYworKysgYi9hcmNoL3VtL2tlcm5lbC9nbW9uX3N5bXMuYwpAQCAtNSw3ICs1LDcgQEAKIAogI2luY2x1ZGUgImxpbnV4L21vZHVsZS5oIgogCi1leHRlcm4gdm9pZCBfX2JiX2luaXRfZnVuYyh2b2lkICopOworZXh0ZXJuIHZvaWQgX19iYl9pbml0X2Z1bmModm9pZCAqKSAgX19hdHRyaWJ1dGVfXygod2VhaykpOwogRVhQT1JUX1NZTUJPTChfX2JiX2luaXRfZnVuYyk7CiAKIC8qIFRoaXMgaXMgZGVmaW5lZCAoYW5kIHJlZmVycmVkIHRvIGluIHByb2ZpbGluZyBzdHViIGNvZGUpIG9ubHkgYnkgc29tZSBHQ0MKQEAgLTIxLDE0ICsyMSwzIEBACiAKIGV4dGVybiB2b2lkIF9fZ2Nvdl9tZXJnZV9hZGQodm9pZCAqKSBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7CiBFWFBPUlRfU1lNQk9MKF9fZ2Nvdl9tZXJnZV9hZGQpOwotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYyBiL2FyY2gvdW0va2VybmVsL2tzeW1zLmMKaW5kZXggYzk3MDQ1ZC4uZjAzMGU0NCAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwva3N5bXMuYworKysgYi9hcmNoL3VtL2tlcm5lbC9rc3ltcy5jCkBAIC0yMSw3ICsyMSw2IEBACiAjaW5jbHVkZSAibWVtX3VzZXIuaCIKICNpbmNsdWRlICJvcy5oIgogCi1FWFBPUlRfU1lNQk9MKHN0b3ApOwogRVhQT1JUX1NZTUJPTCh1bWxfcGh5c21lbSk7CiBFWFBPUlRfU1lNQk9MKHNldF9zaWduYWxzKTsKIEVYUE9SVF9TWU1CT0woZ2V0X3NpZ25hbHMpOwpAQCAtNDEsMTIgKzQwLDE0IEBACiBFWFBPUlRfU1lNQk9MKGZpbmRfaW9tZW0pOwogCiAjaWZkZWYgQ09ORklHX01PREVfVFQKK0VYUE9SVF9TWU1CT0woc3RvcCk7CiBFWFBPUlRfU1lNQk9MKHN0cm5jcHlfZnJvbV91c2VyX3R0KTsKIEVYUE9SVF9TWU1CT0woY29weV9mcm9tX3VzZXJfdHQpOwogRVhQT1JUX1NZTUJPTChjb3B5X3RvX3VzZXJfdHQpOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTU9ERV9TS0FTCitFWFBPUlRfU1lNQk9MKHN0cm5sZW5fdXNlcl9za2FzKTsKIEVYUE9SVF9TWU1CT0woc3RybmNweV9mcm9tX3VzZXJfc2thcyk7CiBFWFBPUlRfU1lNQk9MKGNvcHlfdG9fdXNlcl9za2FzKTsKIEVYUE9SVF9TWU1CT0woY29weV9mcm9tX3VzZXJfc2thcyk7CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9tZW0uYyBiL2FyY2gvdW0va2VybmVsL21lbS5jCmluZGV4IDkzMTIxYzYuLmM5NTg1NWIgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL21lbS5jCisrKyBiL2FyY2gvdW0va2VybmVsL21lbS5jCkBAIC0yMjYsNyArMjI2LDggQEAKIAlmb3IoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHpvbmVzX3NpemUpOyBpKyspCiAJCXpvbmVzX3NpemVbaV0gPSAwOwogCi0Jem9uZXNfc2l6ZVtaT05FX0RNQV0gPSAoZW5kX2lvbWVtID4+IFBBR0VfU0hJRlQpIC0gKHVtbF9waHlzbWVtID4+IFBBR0VfU0hJRlQpOworCXpvbmVzX3NpemVbWk9ORV9OT1JNQUxdID0gKGVuZF9pb21lbSA+PiBQQUdFX1NISUZUKSAtCisJCSh1bWxfcGh5c21lbSA+PiBQQUdFX1NISUZUKTsKICNpZmRlZiBDT05GSUdfSElHSE1FTQogCXpvbmVzX3NpemVbWk9ORV9ISUdITUVNXSA9IGhpZ2htZW0gPj4gUEFHRV9TSElGVDsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gYXJjaC91bS9rZXJuZWwvcHJvY2Vzc19rZXJuLmMKcmVuYW1lIHRvIGFyY2gvdW0va2VybmVsL3Byb2Nlc3MuYwppbmRleCA1Mzc4OTVkLi5mZTZjNjRhIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzX2tlcm4uYworKysgYi9hcmNoL3VtL2tlcm5lbC9wcm9jZXNzLmMKQEAgLTEsMTAgKzEsOSBAQAotLyogCisvKgogICogQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKICAqIENvcHlyaWdodCAyMDAzIFBhdGhTY2FsZSwgSW5jLgogICogTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogICovCiAKLSNpbmNsdWRlICJsaW51eC9jb25maWcuaCIKICNpbmNsdWRlICJsaW51eC9rZXJuZWwuaCIKICNpbmNsdWRlICJsaW51eC9zY2hlZC5oIgogI2luY2x1ZGUgImxpbnV4L2ludGVycnVwdC5oIgpAQCAtMTEzLDExICsxMTIsMTEgQEAKIAogdm9pZCAqX3N3aXRjaF90byh2b2lkICpwcmV2LCB2b2lkICpuZXh0LCB2b2lkICpsYXN0KQogewotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmZyb20gPSBwcmV2OwotICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRvPSBuZXh0OworCXN0cnVjdCB0YXNrX3N0cnVjdCAqZnJvbSA9IHByZXY7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0bz0gbmV4dDsKIAotICAgICAgICB0by0+dGhyZWFkLnByZXZfc2NoZWQgPSBmcm9tOwotICAgICAgICBzZXRfY3VycmVudCh0byk7CisJdG8tPnRocmVhZC5wcmV2X3NjaGVkID0gZnJvbTsKKwlzZXRfY3VycmVudCh0byk7CiAKIAlkbyB7CiAJCWN1cnJlbnQtPnRocmVhZC5zYXZlZF90YXNrID0gTlVMTCA7CkBAIC0xMjgsNyArMTI3LDcgQEAKIAkJcHJldj0gY3VycmVudDsKIAl9IHdoaWxlKGN1cnJlbnQtPnRocmVhZC5zYXZlZF90YXNrKTsKIAotICAgICAgICByZXR1cm4oY3VycmVudC0+dGhyZWFkLnByZXZfc2NoZWQpOworCXJldHVybihjdXJyZW50LT50aHJlYWQucHJldl9zY2hlZCk7CiAKIH0KIApAQCAtMTQyLDE5ICsxNDEsMTkgQEAKIHsKIAlDSE9PU0VfTU9ERShyZWxlYXNlX3RocmVhZF90dCh0YXNrKSwgcmVsZWFzZV90aHJlYWRfc2thcyh0YXNrKSk7CiB9Ci0gCisKIHZvaWQgZXhpdF90aHJlYWQodm9pZCkKIHsKIAl1bnByb3RlY3Rfc3RhY2soKHVuc2lnbmVkIGxvbmcpIGN1cnJlbnRfdGhyZWFkKTsKIH0KLSAKKwogdm9pZCAqZ2V0X2N1cnJlbnQodm9pZCkKIHsKIAlyZXR1cm4oY3VycmVudCk7CiB9CiAKIGludCBjb3B5X3RocmVhZChpbnQgbnIsIHVuc2lnbmVkIGxvbmcgY2xvbmVfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc3AsCi0JCXVuc2lnbmVkIGxvbmcgc3RhY2tfdG9wLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiBwLCAKKwkJdW5zaWduZWQgbG9uZyBzdGFja190b3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsCiAJCXN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWludCByZXQ7CkBAIC0xODMsMTEgKzE4MiwxMSBAQAogCWludCBzYXZlX2ttYWxsb2Nfb2sgPSBrbWFsbG9jX29rOwogCiAJa21hbGxvY19vayA9IDA7Ci0JQ0hPT1NFX01PREVfUFJPQyhpbml0aWFsX3RocmVhZF9jYl90dCwgaW5pdGlhbF90aHJlYWRfY2Jfc2thcywgcHJvYywgCisJQ0hPT1NFX01PREVfUFJPQyhpbml0aWFsX3RocmVhZF9jYl90dCwgaW5pdGlhbF90aHJlYWRfY2Jfc2thcywgcHJvYywKIAkJCSBhcmcpOwogCWttYWxsb2Nfb2sgPSBzYXZlX2ttYWxsb2Nfb2s7CiB9Ci0gCisKIHVuc2lnbmVkIGxvbmcgc3RhY2tfc3AodW5zaWduZWQgbG9uZyBwYWdlKQogewogCXJldHVybihwYWdlICsgUEFHRV9TSVpFIC0gc2l6ZW9mKHZvaWQgKikpOwpAQCAtMjExLDcgKzIxMCw3IEBACiAJCSAqLwogCQlpZihuZWVkX3Jlc2NoZWQoKSkKIAkJCXNjaGVkdWxlKCk7Ci0JCQorCiAJCWlkbGVfc2xlZXAoMTApOwogCX0KIH0KQEAgLTIyNiw3ICsyMjUsNyBAQAogCXJldHVybihQQUdFX1NJWkUpOwogfQogCi12b2lkICp1bV92aXJ0X3RvX3BoeXMoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIAordm9pZCAqdW1fdmlydF90b19waHlzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaywgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkgICAgICBwdGVfdCAqcHRlX291dCkKIHsKIAlwZ2RfdCAqcGdkOwpAQCAtMjM1LDcgKzIzNCw3IEBACiAJcHRlX3QgKnB0ZTsKIAlwdGVfdCBwdGVudDsKIAotCWlmKHRhc2stPm1tID09IE5VTEwpIAorCWlmKHRhc2stPm1tID09IE5VTEwpCiAJCXJldHVybihFUlJfUFRSKC1FSU5WQUwpKTsKIAlwZ2QgPSBwZ2Rfb2Zmc2V0KHRhc2stPm1tLCBhZGRyKTsKIAlpZighcGdkX3ByZXNlbnQoKnBnZCkpCkBAIC0yNDYsNyArMjQ1LDcgQEAKIAkJcmV0dXJuKEVSUl9QVFIoLUVJTlZBTCkpOwogCiAJcG1kID0gcG1kX29mZnNldChwdWQsIGFkZHIpOwotCWlmKCFwbWRfcHJlc2VudCgqcG1kKSkgCisJaWYoIXBtZF9wcmVzZW50KCpwbWQpKQogCQlyZXR1cm4oRVJSX1BUUigtRUlOVkFMKSk7CiAKIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIGFkZHIpOwpAQCAtMjcxLDcgKzI3MCw3IEBACiAKIHZvaWQgZm9yY2Vfc2lnYnVzKHZvaWQpCiB7Ci0JcHJpbnRrKEtFUk5fRVJSICJLaWxsaW5nIHBpZCAlZCBiZWNhdXNlIG9mIGEgbGFjayBvZiBtZW1vcnlcbiIsIAorCXByaW50ayhLRVJOX0VSUiAiS2lsbGluZyBwaWQgJWQgYmVjYXVzZSBvZiBhIGxhY2sgb2YgbWVtb3J5XG4iLAogCSAgICAgICBjdXJyZW50LT5waWQpOwogCWxvY2tfa2VybmVsKCk7CiAJc2lnYWRkc2V0KCZjdXJyZW50LT5wZW5kaW5nLnNpZ25hbCwgU0lHQlVTKTsKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUgYi9hcmNoL3VtL2tlcm5lbC9za2FzL01ha2VmaWxlCmluZGV4IGVhM2E4ZTQuLjNlM2ZhN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0va2VybmVsL3NrYXMvTWFrZWZpbGUKKysrIGIvYXJjaC91bS9rZXJuZWwvc2thcy9NYWtlZmlsZQpAQCAtMyw4ICszLDcgQEAKICMgTGljZW5zZWQgdW5kZXIgdGhlIEdQTAogIwogCi1vYmoteSA6PSBjbG9uZS5vIGV4ZWNfa2Vybi5vIG1lbS5vIG1tdS5vIHByb2Nlc3Nfa2Vybi5vIFwKLQlzeXNjYWxsLm8gdGxiLm8gdWFjY2Vzcy5vCitvYmoteSA6PSBjbG9uZS5vIGV4ZWMubyBtZW0ubyBtbXUubyBwcm9jZXNzLm8gc3lzY2FsbC5vIHRsYi5vIHVhY2Nlc3MubwogCiAjIGNsb25lLm8gaXMgaW4gdGhlIHN0dWIsIHNvIGl0IGNhbid0IGJlIGJ1aWx0IHdpdGggcHJvZmlsaW5nCiAjIEdDQyBoYXJkZW5lZCBhbHNvIGF1dG8tZW5hYmxlcyAtZnBpYywgYnV0IHdlIG5lZWQgJWVieCBzbyBpdCBjYW4ndCB3b3JrIC0+CmRpZmYgLS1naXQgYS9hcmNoL3VtL2tlcm5lbC9za2FzL2V4ZWMuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvZXhlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0Yjc5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL2V4ZWMuYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKKyAqLworCisjaW5jbHVkZSAibGludXgva2VybmVsLmgiCisjaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKKyNpbmNsdWRlICJhc20vcGFnZS5oIgorI2luY2x1ZGUgImFzbS9zaWduYWwuaCIKKyNpbmNsdWRlICJhc20vcHRyYWNlLmgiCisjaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKKyNpbmNsdWRlICJhc20vbW11X2NvbnRleHQuaCIKKyNpbmNsdWRlICJ0bGIuaCIKKyNpbmNsdWRlICJza2FzLmgiCisjaW5jbHVkZSAidW1fbW11LmgiCisjaW5jbHVkZSAib3MuaCIKKwordm9pZCBmbHVzaF90aHJlYWRfc2thcyh2b2lkKQoreworCWZvcmNlX2ZsdXNoX2FsbCgpOworCXN3aXRjaF9tbV9za2FzKCZjdXJyZW50LT5tbS0+Y29udGV4dC5za2FzLmlkKTsKK30KKwordm9pZCBzdGFydF90aHJlYWRfc2thcyhzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBlaXAsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGVzcCkKK3sKKwlzZXRfZnMoVVNFUl9EUyk7CisJUFRfUkVHU19JUChyZWdzKSA9IGVpcDsKKwlQVF9SRUdTX1NQKHJlZ3MpID0gZXNwOworfQpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9leGVjX2tlcm4uYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvZXhlY19rZXJuLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3ZWQ3YmIuLjAwMDAwMDAKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9leGVjX2tlcm4uYworKysgL2Rldi9udWxsCkBAIC0xLDQxICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAyIEplZmYgRGlrZSAoamRpa2VAa2FyYXlhLmNvbSkKLSAqIExpY2Vuc2VkIHVuZGVyIHRoZSBHUEwKLSAqLwotCi0jaW5jbHVkZSAibGludXgva2VybmVsLmgiCi0jaW5jbHVkZSAiYXNtL2N1cnJlbnQuaCIKLSNpbmNsdWRlICJhc20vcGFnZS5oIgotI2luY2x1ZGUgImFzbS9zaWduYWwuaCIKLSNpbmNsdWRlICJhc20vcHRyYWNlLmgiCi0jaW5jbHVkZSAiYXNtL3VhY2Nlc3MuaCIKLSNpbmNsdWRlICJhc20vbW11X2NvbnRleHQuaCIKLSNpbmNsdWRlICJ0bGIuaCIKLSNpbmNsdWRlICJza2FzLmgiCi0jaW5jbHVkZSAidW1fbW11LmgiCi0jaW5jbHVkZSAib3MuaCIKLQotdm9pZCBmbHVzaF90aHJlYWRfc2thcyh2b2lkKQotewotCWZvcmNlX2ZsdXNoX2FsbCgpOwotICAgICAgICBzd2l0Y2hfbW1fc2thcygmY3VycmVudC0+bW0tPmNvbnRleHQuc2thcy5pZCk7Ci19Ci0KLXZvaWQgc3RhcnRfdGhyZWFkX3NrYXMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxvbmcgZWlwLCAKLQkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwKQotewotCXNldF9mcyhVU0VSX0RTKTsKLSAgICAgICAgUFRfUkVHU19JUChyZWdzKSA9IGVpcDsKLQlQVF9SRUdTX1NQKHJlZ3MpID0gZXNwOwotfQotCi0vKgotICogT3ZlcnJpZGVzIGZvciBFbWFjcyBzbyB0aGF0IHdlIGZvbGxvdyBMaW51cydzIHRhYmJpbmcgc3R5bGUuCi0gKiBFbWFjcyB3aWxsIG5vdGljZSB0aGlzIHN0dWZmIGF0IHRoZSBlbmQgb2YgdGhlIGZpbGUgYW5kIGF1dG9tYXRpY2FsbHkKLSAqIGFkanVzdCB0aGUgc2V0dGluZ3MgZm9yIHRoaXMgYnVmZmVyIG9ubHkuICBUaGlzIG11c3QgcmVtYWluIGF0IHRoZSBlbmQKLSAqIG9mIHRoZSBmaWxlLgotICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gKiBMb2NhbCB2YXJpYWJsZXM6Ci0gKiBjLWZpbGUtc3R5bGU6ICJsaW51eCIKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYyBiL2FyY2gvdW0va2VybmVsL3NrYXMvbW11LmMKaW5kZXggNzljMjI3MC4uNGNkMmZmNSAxMDA2NDQKLS0tIGEvYXJjaC91bS9rZXJuZWwvc2thcy9tbXUuYworKysgYi9hcmNoL3VtL2tlcm5lbC9za2FzL21tdS5jCkBAIC02MSw4ICs2MSwxMCBAQAogI2VuZGlmCiAKIAkqcHRlID0gbWtfcHRlKHZpcnRfdG9fcGFnZShrZXJuZWwpLCBfX3BncHJvdChfUEFHRV9QUkVTRU5UKSk7Ci0JKnB0ZSA9IHB0ZV9ta2V4ZWMoKnB0ZSk7Ci0JKnB0ZSA9IHB0ZV93cnByb3RlY3QoKnB0ZSk7CisJLyogVGhpcyBpcyB3cm9uZyBmb3IgdGhlIGNvZGUgcGFnZSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIHNpbmNlIHRoZQorCSAqIHN0dWIgaXMgbWFwcGVkIGJ5IGhhbmQgd2l0aCB0aGUgY29ycmVjdCBwZXJtaXNzaW9ucy4KKwkgKi8KKwkqcHRlID0gcHRlX21rd3JpdGUoKnB0ZSk7CiAJcmV0dXJuKDApOwogCiAgb3V0X3BtZDoKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzc19rZXJuLmMgYi9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwpzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBhcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCnJlbmFtZSB0byBhcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3MuYwppbmRleCA1NWNhZWVjLi5hZTRmYTcxIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC9za2FzL3Byb2Nlc3Nfa2Vybi5jCisrKyBiL2FyY2gvdW0va2VybmVsL3NrYXMvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMyw3IEBACiAJCXN3aXRjaF90aW1lcnMoMCk7CiAKIAlzd2l0Y2hfdGhyZWFkcygmZnJvbS0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLAotCQkgICAgICAgdG8tPnRocmVhZC5tb2RlLnNrYXMuc3dpdGNoX2J1Zik7CisJCSAgICAgICAmdG8tPnRocmVhZC5tb2RlLnNrYXMuc3dpdGNoX2J1Zik7CiAKIAlhcmNoX3N3aXRjaF90b19za2FzKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkLCBjdXJyZW50KTsKIApAQCAtNDMsMjEgKzQzLDIxIEBACiAKIGV4dGVybiB2b2lkIHNjaGVkdWxlX3RhaWwoc3RydWN0IHRhc2tfc3RydWN0ICpwcmV2KTsKIAotdm9pZCBuZXdfdGhyZWFkX2hhbmRsZXIoaW50IHNpZykKKy8qIFRoaXMgaXMgY2FsbGVkIG1hZ2ljYWxseSwgYnkgaXRzIGFkZHJlc3MgYmVpbmcgc3R1ZmZlZCBpbiBhIGptcF9idWYKKyAqIGFuZCBiZWluZyBsb25nam1wLWQgdG8uCisgKi8KK3ZvaWQgbmV3X3RocmVhZF9oYW5kbGVyKHZvaWQpCiB7CiAJaW50ICgqZm4pKHZvaWQgKiksIG47CiAJdm9pZCAqYXJnOwogCi0JZm4gPSBjdXJyZW50LT50aHJlYWQucmVxdWVzdC51LnRocmVhZC5wcm9jOwotCWFyZyA9IGN1cnJlbnQtPnRocmVhZC5yZXF1ZXN0LnUudGhyZWFkLmFyZzsKLQlvc191c3IxX3NpZ25hbCgxKTsKLQl0aHJlYWRfd2FpdCgmY3VycmVudC0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLAotCQkgICAgY3VycmVudC0+dGhyZWFkLm1vZGUuc2thcy5mb3JrX2J1Zik7Ci0KIAlpZihjdXJyZW50LT50aHJlYWQucHJldl9zY2hlZCAhPSBOVUxMKQogCQlzY2hlZHVsZV90YWlsKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkKTsKIAljdXJyZW50LT50aHJlYWQucHJldl9zY2hlZCA9IE5VTEw7CiAKKwlmbiA9IGN1cnJlbnQtPnRocmVhZC5yZXF1ZXN0LnUudGhyZWFkLnByb2M7CisJYXJnID0gY3VycmVudC0+dGhyZWFkLnJlcXVlc3QudS50aHJlYWQuYXJnOworCiAJLyogVGhlIHJldHVybiB2YWx1ZSBpcyAxIGlmIHRoZSBrZXJuZWwgdGhyZWFkIGV4ZWNzIGEgcHJvY2VzcywKIAkgKiAwIGlmIGl0IGp1c3QgZXhpdHMKIAkgKi8KQEAgLTcwLDIyICs3MCwxMyBAQAogCWVsc2UgZG9fZXhpdCgwKTsKIH0KIAotdm9pZCBuZXdfdGhyZWFkX3Byb2Modm9pZCAqc3RhY2ssIHZvaWQgKCpoYW5kbGVyKShpbnQgc2lnKSkKLXsKLQlpbml0X25ld190aHJlYWRfc3RhY2soc3RhY2ssIGhhbmRsZXIpOwotCW9zX3VzcjFfcHJvY2Vzcyhvc19nZXRwaWQoKSk7Ci19Ci0KIHZvaWQgcmVsZWFzZV90aHJlYWRfc2thcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spCiB7CiB9CiAKLXZvaWQgZm9ya19oYW5kbGVyKGludCBzaWcpCisvKiBDYWxsZWQgbWFnaWNhbGx5LCBzZWUgbmV3X3RocmVhZF9oYW5kbGVyIGFib3ZlICovCit2b2lkIGZvcmtfaGFuZGxlcih2b2lkKQogewotCW9zX3VzcjFfc2lnbmFsKDEpOwotCXRocmVhZF93YWl0KCZjdXJyZW50LT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYsCi0JCSAgICBjdXJyZW50LT50aHJlYWQubW9kZS5za2FzLmZvcmtfYnVmKTsKLSAgCQogCWZvcmNlX2ZsdXNoX2FsbCgpOwogCWlmKGN1cnJlbnQtPnRocmVhZC5wcmV2X3NjaGVkID09IE5VTEwpCiAJCXBhbmljKCJibGVjaCIpOwpAQCAtMTA5LDcgKzEwMCw3IEBACiAJCSAgICAgdW5zaWduZWQgbG9uZyBzdGFja190b3AsIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHAsCiAJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gIAl2b2lkICgqaGFuZGxlcikoaW50KTsKKwl2b2lkICgqaGFuZGxlcikodm9pZCk7CiAKIAlpZihjdXJyZW50LT50aHJlYWQuZm9ya2luZyl7CiAJICAJbWVtY3B5KCZwLT50aHJlYWQucmVncy5yZWdzLnNrYXMsICZyZWdzLT5yZWdzLnNrYXMsCkBAIC0xMjMsMTIgKzExNCwxMiBAQAogCX0KIAllbHNlIHsKIAkJaW5pdF90aHJlYWRfcmVnaXN0ZXJzKCZwLT50aHJlYWQucmVncy5yZWdzKTsKLSAgICAgICAgICAgICAgICBwLT50aHJlYWQucmVxdWVzdC51LnRocmVhZCA9IGN1cnJlbnQtPnRocmVhZC5yZXF1ZXN0LnUudGhyZWFkOworCQlwLT50aHJlYWQucmVxdWVzdC51LnRocmVhZCA9IGN1cnJlbnQtPnRocmVhZC5yZXF1ZXN0LnUudGhyZWFkOwogCQloYW5kbGVyID0gbmV3X3RocmVhZF9oYW5kbGVyOwogCX0KIAogCW5ld190aHJlYWQodGFza19zdGFja19wYWdlKHApLCAmcC0+dGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLAotCQkgICAmcC0+dGhyZWFkLm1vZGUuc2thcy5mb3JrX2J1ZiwgaGFuZGxlcik7CisJCSAgIGhhbmRsZXIpOwogCXJldHVybigwKTsKIH0KIApAQCAtMTY0LDcgKzE1NSw3IEBACiAJY3B1X3Rhc2tzWzBdLnBpZCA9IHBpZDsKIAljcHVfdGFza3NbMF0udGFzayA9IGN1cnJlbnQ7CiAjaWZkZWYgQ09ORklHX1NNUAotIAljcHVfb25saW5lX21hcCA9IGNwdW1hc2tfb2ZfY3B1KDApOworCWNwdV9vbmxpbmVfbWFwID0gY3B1bWFza19vZl9jcHUoMCk7CiAjZW5kaWYKIAlzdGFydF9rZXJuZWwoKTsKIAlyZXR1cm4oMCk7CkBAIC0xODIsOCArMTczLDcgQEAKIAlpbml0X3Rhc2sudGhyZWFkLnJlcXVlc3QudS50aHJlYWQucHJvYyA9IHN0YXJ0X2tlcm5lbF9wcm9jOwogCWluaXRfdGFzay50aHJlYWQucmVxdWVzdC51LnRocmVhZC5hcmcgPSBOVUxMOwogCXJldHVybihzdGFydF9pZGxlX3RocmVhZCh0YXNrX3N0YWNrX3BhZ2UoJmluaXRfdGFzayksCi0JCQkJICZpbml0X3Rhc2sudGhyZWFkLm1vZGUuc2thcy5zd2l0Y2hfYnVmLAotCQkJCSAmaW5pdF90YXNrLnRocmVhZC5tb2RlLnNrYXMuZm9ya19idWYpKTsKKwkJCQkgJmluaXRfdGFzay50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpKTsKIH0KIAogaW50IGV4dGVybmFsX3BpZF9za2FzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RpbWUuYyBiL2FyY2gvdW0va2VybmVsL3RpbWUuYwppbmRleCAyNDU0YmJkLi5hOTI5NjVmIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdGltZS5jCkBAIC05Myw5ICs5Myw5IEBACiAKIAl3cml0ZV9zZXFsb2NrX2lycXNhdmUoJnh0aW1lX2xvY2ssIGZsYWdzKTsKIAotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogCi0JbnNlY3MgPSBnZXRfdGltZSgpICsgbG9jYWxfb2Zmc2V0OworCW5zZWNzID0gZ2V0X3RpbWUoKTsKIAl4dGltZS50dl9zZWMgPSBuc2VjcyAvIE5TRUNfUEVSX1NFQzsKIAl4dGltZS50dl9uc2VjID0gbnNlY3MgLSB4dGltZS50dl9zZWMgKiBOU0VDX1BFUl9TRUM7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3RyYXAuYyBiL2FyY2gvdW0va2VybmVsL3RyYXAuYwppbmRleCBlNWVlYWYyLi5jN2IxOTVjIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC90cmFwLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdHJhcC5jCkBAIC0xMjAsNyArMTIwLDcgQEAKICAqIHVzIHVuYWJsZSB0byBoYW5kbGUgdGhlIHBhZ2UgZmF1bHQgZ3JhY2VmdWxseS4KICAqLwogb3V0X29mX21lbW9yeToKLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsKKwlpZiAoaXNfaW5pdChjdXJyZW50KSkgewogCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQl5aWVsZCgpOwogCQlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CkBAIC0xNDAsMTQgKzE0MCw2IEBACiAJc2VndigqZmksIFVQVF9JUChyZWdzKSwgVVBUX0lTX1VTRVIocmVncyksIHJlZ3MpOwogfQogCi1zdHJ1Y3Qga2Vybl9oYW5kbGVycyBoYW5kbGluZm9fa2VybiA9IHsKLQkucmVsYXlfc2lnbmFsID0gcmVsYXlfc2lnbmFsLAotCS53aW5jaCA9IHdpbmNoLAotCS5idXNfaGFuZGxlciA9IHJlbGF5X3NpZ25hbCwKLQkucGFnZV9mYXVsdCA9IHNlZ3ZfaGFuZGxlciwKLQkuc2lnaW9faGFuZGxlciA9IHNpZ2lvX2hhbmRsZXIsCi0JLnRpbWVyX2hhbmRsZXIgPSB0aW1lcl9oYW5kbGVyCi19OwogLyoKICAqIFdlIGdpdmUgYSAqY29weSogb2YgdGhlIGZhdWx0aW5mbyBpbiB0aGUgcmVncyB0byBzZWd2LgogICogVGhpcyBtdXN0IGJlIGRvbmUsIHNpbmNlIG5lc3RpbmcgU0VHVnMgY291bGQgb3ZlcndyaXRlCkBAIC0yNTMsNiArMjQ1LDE1IEBACiAJZG9fSVJRKFdJTkNIX0lSUSwgcmVncyk7CiB9CiAKK2NvbnN0IHN0cnVjdCBrZXJuX2hhbmRsZXJzIGhhbmRsaW5mb19rZXJuID0geworCS5yZWxheV9zaWduYWwgPSByZWxheV9zaWduYWwsCisJLndpbmNoID0gd2luY2gsCisJLmJ1c19oYW5kbGVyID0gYnVzX2hhbmRsZXIsCisJLnBhZ2VfZmF1bHQgPSBzZWd2X2hhbmRsZXIsCisJLnNpZ2lvX2hhbmRsZXIgPSBzaWdpb19oYW5kbGVyLAorCS50aW1lcl9oYW5kbGVyID0gdGltZXJfaGFuZGxlcgorfTsKKwogdm9pZCB0cmFwX2luaXQodm9pZCkKIHsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYyBiL2FyY2gvdW0va2VybmVsL3VtX2FyY2guYwppbmRleCA3ODk2Y2Y5Li41NTAwNTcxIDEwMDY0NAotLS0gYS9hcmNoL3VtL2tlcm5lbC91bV9hcmNoLmMKKysrIGIvYXJjaC91bS9rZXJuZWwvdW1fYXJjaC5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIHsKIH0KIAotc3RydWN0IHNlcV9vcGVyYXRpb25zIGNwdWluZm9fb3AgPSB7Citjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1aW5mb19vcCA9IHsKIAkuc3RhcnQJPSBjX3N0YXJ0LAogCS5uZXh0CT0gY19uZXh0LAogCS5zdG9wCT0gY19zdG9wLApkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZSBiL2FyY2gvdW0vb3MtTGludXgvTWFrZWZpbGUKaW5kZXggZjRiZmM0Yy4uYjQxODM5MiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9NYWtlZmlsZQorKysgYi9hcmNoL3VtL29zLUxpbnV4L01ha2VmaWxlCkBAIC00LDE1ICs0LDE5IEBACiAjCiAKIG9iai15ID0gYWlvLm8gZWxmX2F1eC5vIGZpbGUubyBoZWxwZXIubyBpcnEubyBtYWluLm8gbWVtLm8gcHJvY2Vzcy5vIHNpZ2lvLm8gXAotCXNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHRyYXAubyB0dC5vIHR0eS5vIHVhY2Nlc3MubyB1bWlkLm8gdGxzLm8gXAorCXNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHRyYXAubyB0dHkubyB1YWNjZXNzLm8gdW1pZC5vIHRscy5vIFwKIAl1c2VyX3N5bXMubyB1dGlsLm8gZHJpdmVycy8gc3lzLSQoU1VCQVJDSCkvCiAKIG9iai0kKENPTkZJR19NT0RFX1NLQVMpICs9IHNrYXMvCisKK29iai0kKENPTkZJR19NT0RFX1RUKSArPSB0dC5vCit1c2VyLW9ianMtJChDT05GSUdfTU9ERV9UVCkgKz0gdHQubworCiBvYmotJChDT05GSUdfVFRZX0xPRykgKz0gdHR5X2xvZy5vCiB1c2VyLW9ianMtJChDT05GSUdfVFRZX0xPRykgKz0gdHR5X2xvZy5vCiAKIFVTRVJfT0JKUyA6PSAkKHVzZXItb2Jqcy15KSBhaW8ubyBlbGZfYXV4Lm8gZmlsZS5vIGhlbHBlci5vIGlycS5vIG1haW4ubyBtZW0ubyBcCi0JcHJvY2Vzcy5vIHNpZ2lvLm8gc2lnbmFsLm8gc3RhcnRfdXAubyB0aW1lLm8gdHJhcC5vIHR0Lm8gdHR5Lm8gdGxzLm8gXAorCXByb2Nlc3MubyBzaWdpby5vIHNpZ25hbC5vIHN0YXJ0X3VwLm8gdGltZS5vIHRyYXAubyB0dHkubyB0bHMubyBcCiAJdWFjY2Vzcy5vIHVtaWQubyB1dGlsLm8KIAogQ0ZMQUdTX3VzZXJfc3ltcy5vICs9IC1EU1VCQVJDSF8kKFNVQkFSQ0gpCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRhcC5oIGIvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0YXAuaAppbmRleCBiODRmNmM0Li41N2VjZGFmIDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRhcC5oCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGFwLmgKQEAgLTEzLDcgKzEzLDcgQEAKIAl2b2lkICpkZXY7CiB9OwogCi1leHRlcm4gc3RydWN0IG5ldF91c2VyX2luZm8gZXRoZXJ0YXBfdXNlcl9pbmZvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIGV0aGVydGFwX3VzZXJfaW5mbzsKIAogLyoKICAqIE92ZXJyaWRlcyBmb3IgRW1hY3Mgc28gdGhhdCB3ZSBmb2xsb3cgTGludXMncyB0YWJiaW5nIHN0eWxlLgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX2tlcm4uYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF9rZXJuLmMKaW5kZXggNzY4NjA2Yi4uMTYzODVlMiAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL2V0aGVydGFwX2tlcm4uYworKysgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfa2Vybi5jCkBAIC02NSw3ICs2NSw3IEBACiAJcmV0dXJuKG5ldF9zZW5kKGZkLCAoKnNrYiktPmRhdGEsICgqc2tiKS0+bGVuKSk7CiB9CiAKLXN0cnVjdCBuZXRfa2Vybl9pbmZvIGV0aGVydGFwX2tlcm5faW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfa2Vybl9pbmZvIGV0aGVydGFwX2tlcm5faW5mbyA9IHsKIAkuaW5pdAkJCT0gZXRhcF9pbml0LAogCS5wcm90b2NvbAkJPSBldGhfcHJvdG9jb2wsCiAJLnJlYWQJCQk9IGV0YXBfcmVhZCwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMgYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jCmluZGV4IDhmNDk1MDcuLmY1NTliZGY3IDEwMDY0NAotLS0gYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvZXRoZXJ0YXBfdXNlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy9ldGhlcnRhcF91c2VyLmMKQEAgLTIxNiw3ICsyMTYsNyBAQAogCWV0YXBfY2xvc2VfYWRkcihhZGRyLCBuZXRtYXNrLCAmcHJpLT5jb250cm9sX2ZkKTsKIH0KIAotc3RydWN0IG5ldF91c2VyX2luZm8gZXRoZXJ0YXBfdXNlcl9pbmZvID0geworY29uc3Qgc3RydWN0IG5ldF91c2VyX2luZm8gZXRoZXJ0YXBfdXNlcl9pbmZvID0gewogCS5pbml0CQk9IGV0YXBfdXNlcl9pbml0LAogCS5vcGVuCQk9IGV0YXBfb3BlbiwKIAkuY2xvc2UJIAk9IGV0YXBfY2xvc2UsCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwLmggYi9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwLmgKaW5kZXggMjVkNGEyOC4uZDNlOGQzYSAxMDA2NDQKLS0tIGEvYXJjaC91bS9vcy1MaW51eC9kcml2ZXJzL3R1bnRhcC5oCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXAuaApAQCAtMTYsNyArMTYsNyBAQAogCXZvaWQgKmRldjsKIH07CiAKLWV4dGVybiBzdHJ1Y3QgbmV0X3VzZXJfaW5mbyB0dW50YXBfdXNlcl9pbmZvOworZXh0ZXJuIGNvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHR1bnRhcF91c2VyX2luZm87CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX2tlcm4uYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfa2Vybi5jCmluZGV4IDE5MDAwOWEuLjBlZGJhYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfa2Vybi5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfa2Vybi5jCkBAIC01Myw3ICs1Myw3IEBACiAJcmV0dXJuKG5ldF93cml0ZShmZCwgKCpza2IpLT5kYXRhLCAoKnNrYiktPmxlbikpOwogfQogCi1zdHJ1Y3QgbmV0X2tlcm5faW5mbyB0dW50YXBfa2Vybl9pbmZvID0geworY29uc3Qgc3RydWN0IG5ldF9rZXJuX2luZm8gdHVudGFwX2tlcm5faW5mbyA9IHsKIAkuaW5pdAkJCT0gdHVudGFwX2luaXQsCiAJLnByb3RvY29sCQk9IGV0aF9wcm90b2NvbCwKIAkucmVhZAkJCT0gdHVudGFwX3JlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3VtL29zLUxpbnV4L2RyaXZlcnMvdHVudGFwX3VzZXIuYyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCmluZGV4IDg3YzNhYTAuLmU4NDZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCisrKyBiL2FyY2gvdW0vb3MtTGludXgvZHJpdmVycy90dW50YXBfdXNlci5jCkBAIC0yMDUsNyArMjA1LDcgQEAKIAlyZXR1cm4obXR1KTsKIH0KIAotc3RydWN0IG5ldF91c2VyX2luZm8gdHVudGFwX3VzZXJfaW5mbyA9IHsKK2NvbnN0IHN0cnVjdCBuZXRfdXNlcl9pbmZvIHR1bnRhcF91c2VyX2luZm8gPSB7CiAJLmluaXQJCT0gdHVudGFwX3VzZXJfaW5pdCwKIAkub3BlbgkJPSB0dW50YXBfb3BlbiwKIAkuY2xvc2UJIAk9IHR1bnRhcF9jbG9zZSwKZGlmZiAtLWdpdCBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMgYi9hcmNoL3VtL29zLUxpbnV4L21lbS5jCmluZGV4IGIxNzBiNDcuLjQyMDM2ODEgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvbWVtLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9tZW0uYwpAQCAtMTMyLDYgKzEzMiw5IEBACiAJZWxzZSBpZihmb3VuZCA8IDApCiAJCXByaW50ZigicmVhZCByZXR1cm5lZCBlcnJubyAlZFxuIiwgLWZvdW5kKTsKIAorb3V0OgorCWNsb3NlKGZkKTsKKwogCXJldHVybjsKIAogZm91bmQ6CkBAIC0xNDEsMTEgKzE0NCwxMiBAQAogCiAJaWYoc3RybmNtcChidWYsICJ0bXBmcyIsIHN0cmxlbigidG1wZnMiKSkpewogCQlwcmludGYoIm5vdCB0bXBmc1xuIik7Ci0JCXJldHVybjsKKwkJZ290byBvdXQ7CiAJfQogCiAJcHJpbnRmKCJPS1xuIik7CiAJZGVmYXVsdF90bXBkaXIgPSAiL2Rldi9zaG0iOworCWdvdG8gb3V0OwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYyBiL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKaW5kZXggNDJlM2QxZWQuLmNiOWFiNTQgMTAwNjQ0Ci0tLSBhL2FyY2gvdW0vb3MtTGludXgvc2thcy9wcm9jZXNzLmMKKysrIGIvYXJjaC91bS9vcy1MaW51eC9za2FzL3Byb2Nlc3MuYwpAQCAtNDQ0LDU2ICs0NDQsMjIgQEAKIAl9CiB9CiAKLXZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgdm9pZCAqKnN3aXRjaF9idWZfcHRyLCB2b2lkICoqZm9ya19idWZfcHRyLAotCQl2b2lkICgqaGFuZGxlcikoaW50KSkKK3ZvaWQgbmV3X3RocmVhZCh2b2lkICpzdGFjaywgam1wX2J1ZiAqYnVmLCB2b2lkICgqaGFuZGxlcikodm9pZCkpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlqbXBfYnVmIHN3aXRjaF9idWYsIGZvcmtfYnVmOwotCi0JKnN3aXRjaF9idWZfcHRyID0gJnN3aXRjaF9idWY7Ci0JKmZvcmtfYnVmX3B0ciA9ICZmb3JrX2J1ZjsKLQotCS8qIFNvbWV3aGF0IHN1YnRsZSAtIHNpZ2xvbmdqbXAgcmVzdG9yZXMgdGhlIHNpZ25hbCBtYXNrIGJlZm9yZSBkb2luZwotCSAqIHRoZSBsb25nam1wLiAgVGhpcyBtZWFucyB0aGF0IHdoZW4ganVtcGluZyBmcm9tIG9uZSBzdGFjayB0byBhbm90aGVyCi0JICogd2hlbiB0aGUgdGFyZ2V0IHN0YWNrIGhhcyBpbnRlcnJ1cHRzIGVuYWJsZWQsIGFuIGludGVycnVwdCBtYXkgb2NjdXIKLQkgKiBvbiB0aGUgc291cmNlIHN0YWNrLiAgVGhpcyBpcyBiYWQgd2hlbiBzdGFydGluZyB1cCBhIHByb2Nlc3MgYmVjYXVzZQotCSAqIGl0J3Mgbm90IHN1cHBvc2VkIHRvIGdldCB0aW1lciB0aWNrcyB1bnRpbCBpdCBoYXMgYmVlbiBzY2hlZHVsZWQuCi0JICogU28sIHdlIGRpc2FibGUgaW50ZXJydXB0cyBhcm91bmQgdGhlIHNpZ3NldGptcCB0byBlbnN1cmUgdGhhdAotCSAqIHRoZXkgY2FuJ3QgaGFwcGVuIHVudGlsIHdlIGdldCBiYWNrIGhlcmUgd2hlcmUgdGhleSBhcmUgc2FmZS4KLQkgKi8KLQlmbGFncyA9IGdldF9zaWduYWxzKCk7Ci0JYmxvY2tfc2lnbmFscygpOwotCWlmKFVNTF9TRVRKTVAoJmZvcmtfYnVmKSA9PSAwKQotCQluZXdfdGhyZWFkX3Byb2Moc3RhY2ssIGhhbmRsZXIpOwotCi0JcmVtb3ZlX3NpZ3N0YWNrKCk7Ci0KLQlzZXRfc2lnbmFscyhmbGFncyk7CisJKCpidWYpWzBdLkpCX0lQID0gKHVuc2lnbmVkIGxvbmcpIGhhbmRsZXI7CisJKCpidWYpWzBdLkpCX1NQID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrICsKKwkJKFBBR0VfU0laRSA8PCBVTUxfQ09ORklHX0tFUk5FTF9TVEFDS19PUkRFUikgLSBzaXplb2Yodm9pZCAqKTsKIH0KIAogI2RlZmluZSBJTklUX0pNUF9ORVdfVEhSRUFEIDAKLSNkZWZpbmUgSU5JVF9KTVBfUkVNT1ZFX1NJR1NUQUNLIDEKLSNkZWZpbmUgSU5JVF9KTVBfQ0FMTEJBQ0sgMgotI2RlZmluZSBJTklUX0pNUF9IQUxUIDMKLSNkZWZpbmUgSU5JVF9KTVBfUkVCT09UIDQKKyNkZWZpbmUgSU5JVF9KTVBfQ0FMTEJBQ0sgMQorI2RlZmluZSBJTklUX0pNUF9IQUxUIDIKKyNkZWZpbmUgSU5JVF9KTVBfUkVCT09UIDMKIAotdm9pZCB0aHJlYWRfd2FpdCh2b2lkICpzdywgdm9pZCAqZmIpCit2b2lkIHN3aXRjaF90aHJlYWRzKGptcF9idWYgKm1lLCBqbXBfYnVmICp5b3UpCiB7Ci0Jam1wX2J1ZiBidWYsICoqc3dpdGNoX2J1ZiA9IHN3LCAqZm9ya19idWY7Ci0KLQkqc3dpdGNoX2J1ZiA9ICZidWY7Ci0JZm9ya19idWYgPSBmYjsKLQlpZihVTUxfU0VUSk1QKCZidWYpID09IDApCi0JCVVNTF9MT05HSk1QKGZvcmtfYnVmLCBJTklUX0pNUF9SRU1PVkVfU0lHU1RBQ0spOwotfQotCi12b2lkIHN3aXRjaF90aHJlYWRzKHZvaWQgKm1lLCB2b2lkICpuZXh0KQotewotCWptcF9idWYgbXlfYnVmLCAqKm1lX3B0ciA9IG1lLCAqbmV4dF9idWYgPSBuZXh0OwotCi0JKm1lX3B0ciA9ICZteV9idWY7Ci0JaWYoVU1MX1NFVEpNUCgmbXlfYnVmKSA9PSAwKQotCQlVTUxfTE9OR0pNUChuZXh0X2J1ZiwgMSk7CisJaWYoVU1MX1NFVEpNUChtZSkgPT0gMCkKKwkJVU1MX0xPTkdKTVAoeW91LCAxKTsKIH0KIAogc3RhdGljIGptcF9idWYgaW5pdGlhbF9qbXBidWY7CkBAIC01MDMsMjMgKzQ2OSwyMSBAQAogc3RhdGljIHZvaWQgKmNiX2FyZzsKIHN0YXRpYyBqbXBfYnVmICpjYl9iYWNrOwogCi1pbnQgc3RhcnRfaWRsZV90aHJlYWQodm9pZCAqc3RhY2ssIHZvaWQgKnN3aXRjaF9idWZfcHRyLCB2b2lkICoqZm9ya19idWZfcHRyKQoraW50IHN0YXJ0X2lkbGVfdGhyZWFkKHZvaWQgKnN0YWNrLCBqbXBfYnVmICpzd2l0Y2hfYnVmKQogewotCWptcF9idWYgKipzd2l0Y2hfYnVmID0gc3dpdGNoX2J1Zl9wdHI7CiAJaW50IG47CiAKIAlzZXRfaGFuZGxlcihTSUdXSU5DSCwgKF9fc2lnaGFuZGxlcl90KSBzaWdfaGFuZGxlciwKIAkJICAgIFNBX09OU1RBQ0sgfCBTQV9SRVNUQVJULCBTSUdVU1IxLCBTSUdJTywgU0lHQUxSTSwKIAkJICAgIFNJR1ZUQUxSTSwgLTEpOwogCi0JKmZvcmtfYnVmX3B0ciA9ICZpbml0aWFsX2ptcGJ1ZjsKIAluID0gVU1MX1NFVEpNUCgmaW5pdGlhbF9qbXBidWYpOwogCXN3aXRjaChuKXsKIAljYXNlIElOSVRfSk1QX05FV19USFJFQUQ6Ci0JCW5ld190aHJlYWRfcHJvYygodm9pZCAqKSBzdGFjaywgbmV3X3RocmVhZF9oYW5kbGVyKTsKLQkJYnJlYWs7Ci0JY2FzZSBJTklUX0pNUF9SRU1PVkVfU0lHU1RBQ0s6Ci0JCXJlbW92ZV9zaWdzdGFjaygpOworCQkoKnN3aXRjaF9idWYpWzBdLkpCX0lQID0gKHVuc2lnbmVkIGxvbmcpIG5ld190aHJlYWRfaGFuZGxlcjsKKwkJKCpzd2l0Y2hfYnVmKVswXS5KQl9TUCA9ICh1bnNpZ25lZCBsb25nKSBzdGFjayArCisJCQkoUEFHRV9TSVpFIDw8IFVNTF9DT05GSUdfS0VSTkVMX1NUQUNLX09SREVSKSAtCisJCQlzaXplb2Yodm9pZCAqKTsKIAkJYnJlYWs7CiAJY2FzZSBJTklUX0pNUF9DQUxMQkFDSzoKIAkJKCpjYl9wcm9jKShjYl9hcmcpOwpAQCAtNTM0LDcgKzQ5OCw3IEBACiAJZGVmYXVsdDoKIAkJcGFuaWMoIkJhZCBzaWdzZXRqbXAgcmV0dXJuIGluIHN0YXJ0X2lkbGVfdGhyZWFkIC0gJWRcbiIsIG4pOwogCX0KLQlVTUxfTE9OR0pNUCgqc3dpdGNoX2J1ZiwgMSk7CisJVU1MX0xPTkdKTVAoc3dpdGNoX2J1ZiwgMSk7CiB9CiAKIHZvaWQgaW5pdGlhbF90aHJlYWRfY2Jfc2thcyh2b2lkICgqcHJvYykodm9pZCAqKSwgdm9pZCAqYXJnKQpkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9tZW1jb25zLmMgYi9hcmNoL3Y4NTAva2VybmVsL21lbWNvbnMuYwppbmRleCA0OTE2MTRjLi44MTVmOGE0IDEwMDY0NAotLS0gYS9hcmNoL3Y4NTAva2VybmVsL21lbWNvbnMuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL21lbWNvbnMuYwpAQCAtMzAsNyArMzAsNyBAQAogCiBzdGF0aWMgc2l6ZV90IHdyaXRlIChjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pCiB7Ci0JaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJY2hhciAqcG9pbnQ7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAobWVtY29uc19sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Y4NTAva2VybmVsL3J0ZV9jYl9sZWRzLmMgYi9hcmNoL3Y4NTAva2VybmVsL3J0ZV9jYl9sZWRzLmMKaW5kZXggZjY1NDA4OC4uOTk2YmQ0ZiAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfY2JfbGVkcy5jCisrKyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX2NiX2xlZHMuYwpAQCAtNDIsNyArNDIsNyBAQAogCQkJbGVuID0gTEVEX05VTV9ESUdJVFMgLSBwb3M7CQkJXAogCQkJCQkJCQkJXAogCQlpZiAobGVuID4gMCkgewkJCQkJCVwKLQkJCWludCBfZmxhZ3M7CQkJCQlcCisJCQl1bnNpZ25lZCBsb25nIF9mbGFnczsJCQkJXAogCQkJY29uc3QgY2hhciAqX2VuZCA9IGJ1ZiArIGxlbjsJCQlcCiAJCQlpbWdfZGVjbCA9ICZsZWRzX2ltYWdlW3Bvc107CQkJXAogCQkJCQkJCQkJXApkaWZmIC0tZ2l0IGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfbWJfYV9wY2kuYyBiL2FyY2gvdjg1MC9rZXJuZWwvcnRlX21iX2FfcGNpLmMKaW5kZXggZjM2Yjc3OC4uMzUyMTNmYSAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC9ydGVfbWJfYV9wY2kuYworKysgYi9hcmNoL3Y4NTAva2VybmVsL3J0ZV9tYl9hX3BjaS5jCkBAIC0zNjUsNyArMzY1LDcgQEAKIHN0YXRpYyB2b2lkICphbGxvY19tYl9zcmFtIChzaXplX3Qgc2l6ZSkKIHsKIAlzdHJ1Y3QgbWJfc3JhbV9mcmVlX2FyZWEgKnByZXYsICpmYTsKLQlpbnQgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl2b2lkICptZW0gPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKG1iX3NyYW1fbG9jaywgZmxhZ3MpOwpAQCAtNDA2LDcgKzQwNiw3IEBACiBzdGF0aWMgdm9pZCBmcmVlX21iX3NyYW0gKHZvaWQgKm1lbSwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IG1iX3NyYW1fZnJlZV9hcmVhICpwcmV2LCAqZmEsICpuZXdfZmE7Ci0JaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdm9pZCAqZW5kID0gbWVtICsgc2l6ZTsKIAogCXNwaW5fbG9ja19pcnFzYXZlIChtYl9zcmFtX2xvY2ssIGZsYWdzKTsKQEAgLTUxNyw3ICs1MTcsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nICpuZXdfZG1hX21hcHBpbmcgKHNpemVfdCBzaXplKQogewotCWludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBkbWFfbWFwcGluZyAqbWFwcGluZzsKIAl2b2lkICptYl9zcmFtX2Jsb2NrID0gYWxsb2NfbWJfc3JhbSAoc2l6ZSk7CiAKQEAgLTU3NSw3ICs1NzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nICpmaW5kX2RtYV9tYXBwaW5nICh2b2lkICptYl9zcmFtX2FkZHIpCiB7Ci0JaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGRtYV9tYXBwaW5nICptYXBwaW5nOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKGRtYV9tYXBwaW5nc19sb2NrLCBmbGFncyk7CkBAIC01OTIsNyArNTkyLDcgQEAKIAogc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZyAqZGVhY3RpdmF0ZV9kbWFfbWFwcGluZyAodm9pZCAqbWJfc3JhbV9hZGRyKQogewotCWludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBkbWFfbWFwcGluZyAqbWFwcGluZywgKnByZXY7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSAoZG1hX21hcHBpbmdzX2xvY2ssIGZsYWdzKTsKQEAgLTYyMiw3ICs2MjIsNyBAQAogc3RhdGljIGlubGluZSB2b2lkCiBmcmVlX2RtYV9tYXBwaW5nIChzdHJ1Y3QgZG1hX21hcHBpbmcgKm1hcHBpbmcpCiB7Ci0JaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlmcmVlX21iX3NyYW0gKG1hcHBpbmctPm1iX3NyYW1fYWRkciwgbWFwcGluZy0+c2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvdjg1MC9rZXJuZWwvdGltZS5jIGIvYXJjaC92ODUwL2tlcm5lbC90aW1lLmMKaW5kZXggYTBiNDY2OS4uZjRkMWE0ZCAxMDA2NDQKLS0tIGEvYXJjaC92ODUwL2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC92ODUwL2tlcm5lbC90aW1lLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAlpZiAobWFjaF90aWNrKQogCSAgbWFjaF90aWNrICgpOwogCi0JZG9fdGltZXIgKHJlZ3MpOworCWRvX3RpbWVyICgxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L0tjb25maWcgYi9hcmNoL3g4Nl82NC9LY29uZmlnCmluZGV4IGVmZTI0OWUuLmI4N2ExOWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L0tjb25maWcKKysrIGIvYXJjaC94ODZfNjQvS2NvbmZpZwpAQCAtODUsNiArODUsOSBAQAogCWJvb2wKIAlkZWZhdWx0IHkKIAorY29uZmlnIEFSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisJZGVmX2Jvb2wgeQorCiBjb25maWcgRE1JCiAJYm9vbAogCWRlZmF1bHQgeQpAQCAtMTY4LDYgKzE3MSw3IEBACiAKIGNvbmZpZyBNSUNST0NPREUKIAl0cmlzdGF0ZSAiL2Rldi9jcHUvbWljcm9jb2RlIC0gSW50ZWwgQ1BVIG1pY3JvY29kZSBzdXBwb3J0IgorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSB0aGUgJ0ZpbGUgc3lzdGVtcycgc2VjdGlvbiwgeW91IHdpbGwgYmUKIAkgIGFibGUgdG8gdXBkYXRlIHRoZSBtaWNyb2NvZGUgb24gSW50ZWwgcHJvY2Vzc29ycy4gWW91IHdpbGwKQEAgLTE4Myw2ICsxODcsMTEgQEAKIAkgIElmIHlvdSB1c2UgbW9kcHJvYmUgb3Iga21vZCB5b3UgbWF5IGFsc28gd2FudCB0byBhZGQgdGhlIGxpbmUKIAkgICdhbGlhcyBjaGFyLW1ham9yLTEwLTE4NCBtaWNyb2NvZGUnIHRvIHlvdXIgL2V0Yy9tb2R1bGVzLmNvbmYgZmlsZS4KIAorY29uZmlnIE1JQ1JPQ09ERV9PTERfSU5URVJGQUNFCisJYm9vbAorCWRlcGVuZHMgb24gTUlDUk9DT0RFCisJZGVmYXVsdCB5CisKIGNvbmZpZyBYODZfTVNSCiAJdHJpc3RhdGUgIi9kZXYvY3B1LyovbXNyIC0gTW9kZWwtc3BlY2lmaWMgcmVnaXN0ZXIgc3VwcG9ydCIKIAloZWxwCkBAIC0zNTgsNiArMzY3LDEwIEBACiAKIHNvdXJjZSAibW0vS2NvbmZpZyIKIAorY29uZmlnIE1FTU9SWV9IT1RQTFVHX1JFU0VSVkUKKwlkZWZfYm9vbCB5CisJZGVwZW5kcyBvbiAoTUVNT1JZX0hPVFBMVUcgJiYgRElTQ09OVElHTUVNKQorCiBjb25maWcgSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQKIAlkZWZfYm9vbCB5CiAJZGVwZW5kcyBvbiBOVU1BCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9kZWZjb25maWcgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcKaW5kZXggNjQ3NjEwZS4uNDg0NGI1NCAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvZGVmY29uZmlnCisrKyBiL2FyY2gveDg2XzY0L2RlZmNvbmZpZwpAQCAtMSwxMSArMSwxMiBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjE4LWdpdDUKLSMgVHVlIFNlcCAyNiAwOTozMDo0NyAyMDA2CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMTgtZ2l0NworIyBXZWQgU2VwIDI3IDIxOjUzOjEwIDIwMDYKICMKIENPTkZJR19YODZfNjQ9eQogQ09ORklHXzY0QklUPXkKIENPTkZJR19YODY9eQorQ09ORklHX1pPTkVfRE1BMzI9eQogQ09ORklHX0xPQ0tERVBfU1VQUE9SVD15CiBDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKIENPTkZJR19TRU1BUEhPUkVfU0xFRVBFUlM9eQpAQCAtMTc5LDYgKzE4MCw3IEBACiBDT05GSUdfUE09eQogIyBDT05GSUdfUE1fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX1BNX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNX1NZU0ZTX0RFUFJFQ0FURUQgaXMgbm90IHNldAogQ09ORklHX1NPRlRXQVJFX1NVU1BFTkQ9eQogQ09ORklHX1BNX1NURF9QQVJUSVRJT049IiIKIENPTkZJR19TVVNQRU5EX1NNUD15CkBAIC0yNTEsNiArMjUzLDcgQEAKIENPTkZJR19QQ0lfTU1DT05GSUc9eQogQ09ORklHX1BDSUVQT1JUQlVTPXkKIENPTkZJR19QQ0lfTVNJPXkKKyMgQ09ORklHX1BDSV9NVUxUSVRIUkVBRF9QUk9CRSBpcyBub3Qgc2V0CiAjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAogCiAjCkBAIC0xNDU4LDYgKzE0NjEsNyBAQAogIwogQ09ORklHX1RSQUNFX0lSUUZMQUdTX1NVUFBPUlQ9eQogIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0sgaXMgbm90IHNldAogQ09ORklHX01BR0lDX1NZU1JRPXkKIENPTkZJR19VTlVTRURfU1lNQk9MUz15CiBDT05GSUdfREVCVUdfS0VSTkVMPXkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2lhMzIvc3lzX2lhMzIuYyBiL2FyY2gveDg2XzY0L2lhMzIvc3lzX2lhMzIuYwppbmRleCBiMGU4MmM3Li5mMjgwZDM2IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9pYTMyL3N5c19pYTMyLmMKKysrIGIvYXJjaC94ODZfNjQvaWEzMi9zeXNfaWEzMi5jCkBAIC02NDgsNyArNjQ4LDcgQEAKIH0KIAogCi0jaWZkZWYgQ09ORklHX1NZU0NUTAorI2lmZGVmIENPTkZJR19TWVNDVExfU1lTQ0FMTAogc3RydWN0IHN5c2N0bF9pYTMyIHsKIAl1bnNpZ25lZCBpbnQJbmFtZTsKIAlpbnQJCW5sZW47CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jIGIvYXJjaC94ODZfNjQva2VybmVsL2U4MjAuYwppbmRleCBjMGFmMzgyLi5iM2YwOTA4IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvZTgyMC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9lODIwLmMKQEAgLTE2Miw1OSArMTYyLDE0IEBACiAJcmV0dXJuIC0xVUw7CQkKIH0gCiAKLS8qIAotICogRnJlZSBib290bWVtIGJhc2VkIG9uIHRoZSBlODIwIHRhYmxlIGZvciBhIG5vZGUuCi0gKi8KLXZvaWQgX19pbml0IGU4MjBfYm9vdG1lbV9mcmVlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKLQkJc3RydWN0IGU4MjBlbnRyeSAqZWkgPSAmZTgyMC5tYXBbaV07IAotCQl1bnNpZ25lZCBsb25nIGxhc3QsIGFkZHI7Ci0KLQkJaWYgKGVpLT50eXBlICE9IEU4MjBfUkFNIHx8IAotCQkgICAgZWktPmFkZHIrZWktPnNpemUgPD0gc3RhcnQgfHwgCi0JCSAgICBlaS0+YWRkciA+PSBlbmQpCi0JCQljb250aW51ZTsKLQotCQlhZGRyID0gcm91bmRfdXAoZWktPmFkZHIsIFBBR0VfU0laRSk7Ci0JCWlmIChhZGRyIDwgc3RhcnQpIAotCQkJYWRkciA9IHN0YXJ0OwotCi0JCWxhc3QgPSByb3VuZF9kb3duKGVpLT5hZGRyICsgZWktPnNpemUsIFBBR0VfU0laRSk7IAotCQlpZiAobGFzdCA+PSBlbmQpCi0JCQlsYXN0ID0gZW5kOyAKLQotCQlpZiAobGFzdCA+IGFkZHIgJiYgbGFzdC1hZGRyID49IFBBR0VfU0laRSkKLQkJCWZyZWVfYm9vdG1lbV9ub2RlKHBnZGF0LCBhZGRyLCBsYXN0LWFkZHIpOwotCX0KLX0KLQogLyoKICAqIEZpbmQgdGhlIGhpZ2hlc3QgcGFnZSBmcmFtZSBudW1iZXIgd2UgaGF2ZSBhdmFpbGFibGUKICAqLwogdW5zaWduZWQgbG9uZyBfX2luaXQgZTgyMF9lbmRfb2ZfcmFtKHZvaWQpCiB7Ci0JaW50IGk7CiAJdW5zaWduZWQgbG9uZyBlbmRfcGZuID0gMDsKKwllbmRfcGZuID0gZmluZF9tYXhfcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnMoKTsKIAkKLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewotCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsgCi0JCXVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKLQotCQlzdGFydCA9IHJvdW5kX3VwKGVpLT5hZGRyLCBQQUdFX1NJWkUpOyAKLQkJZW5kID0gcm91bmRfZG93bihlaS0+YWRkciArIGVpLT5zaXplLCBQQUdFX1NJWkUpOyAKLQkJaWYgKHN0YXJ0ID49IGVuZCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoZWktPnR5cGUgPT0gRTgyMF9SQU0pIHsgCi0JCWlmIChlbmQgPiBlbmRfcGZuPDxQQUdFX1NISUZUKQotCQkJZW5kX3BmbiA9IGVuZD4+UEFHRV9TSElGVDsKLQkJfSBlbHNlIHsgCi0JCQlpZiAoZW5kID4gZW5kX3Bmbl9tYXA8PFBBR0VfU0hJRlQpIAotCQkJCWVuZF9wZm5fbWFwID0gZW5kPj5QQUdFX1NISUZUOwotCQl9IAotCX0KLQogCWlmIChlbmRfcGZuID4gZW5kX3Bmbl9tYXApIAogCQllbmRfcGZuX21hcCA9IGVuZF9wZm47CiAJaWYgKGVuZF9wZm5fbWFwID4gTUFYTUVNPj5QQUdFX1NISUZUKQpAQCAtMjI0LDQzICsxNzksMTAgQEAKIAlpZiAoZW5kX3BmbiA+IGVuZF9wZm5fbWFwKSAKIAkJZW5kX3BmbiA9IGVuZF9wZm5fbWFwOyAKIAorCXByaW50aygiZW5kX3Bmbl9tYXAgPSAlbHVcbiIsIGVuZF9wZm5fbWFwKTsKIAlyZXR1cm4gZW5kX3BmbjsJCiB9CiAKLS8qIAotICogQ29tcHV0ZSBob3cgbXVjaCBtZW1vcnkgaXMgbWlzc2luZyBpbiBhIHJhbmdlLgotICogVW5saWtlIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhpcyBmaWxlIHRoZSBhcmd1bWVudHMgYXJlIGluIHBhZ2UgbnVtYmVycy4KLSAqLwotdW5zaWduZWQgbG9uZyBfX2luaXQKLWU4MjBfaG9sZV9zaXplKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCi17Ci0JdW5zaWduZWQgbG9uZyByYW0gPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBzdGFydF9wZm4gPDwgUEFHRV9TSElGVDsKLQl1bnNpZ25lZCBsb25nIGVuZCA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQlpbnQgaTsKLQlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgewotCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKLQkJdW5zaWduZWQgbG9uZyBsYXN0LCBhZGRyOwotCi0JCWlmIChlaS0+dHlwZSAhPSBFODIwX1JBTSB8fAotCQkgICAgZWktPmFkZHIrZWktPnNpemUgPD0gc3RhcnQgfHwKLQkJICAgIGVpLT5hZGRyID49IGVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWFkZHIgPSByb3VuZF91cChlaS0+YWRkciwgUEFHRV9TSVpFKTsKLQkJaWYgKGFkZHIgPCBzdGFydCkKLQkJCWFkZHIgPSBzdGFydDsKLQotCQlsYXN0ID0gcm91bmRfZG93bihlaS0+YWRkciArIGVpLT5zaXplLCBQQUdFX1NJWkUpOwotCQlpZiAobGFzdCA+PSBlbmQpCi0JCQlsYXN0ID0gZW5kOwotCi0JCWlmIChsYXN0ID4gYWRkcikKLQkJCXJhbSArPSBsYXN0IC0gYWRkcjsKLQl9Ci0JcmV0dXJuICgoZW5kIC0gc3RhcnQpIC0gcmFtKSA+PiBQQUdFX1NISUZUOwotfQotCiAvKgogICogTWFyayBlODIwIHJlc2VydmVkIGFyZWFzIGFzIGJ1c3kgZm9yIHRoZSByZXNvdXJjZSBtYW5hZ2VyLgogICovCkBAIC0zNDIsNiArMjY0LDQ5IEBACiAJfQogfQogCisvKiBXYWxrIHRoZSBlODIwIG1hcCBhbmQgcmVnaXN0ZXIgYWN0aXZlIHJlZ2lvbnMgd2l0aGluIGEgbm9kZSAqLwordm9pZCBfX2luaXQKK2U4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCWludCBpOworCXVuc2lnbmVkIGxvbmcgZWlfc3RhcnRwZm4sIGVpX2VuZHBmbjsKKwlmb3IgKGkgPSAwOyBpIDwgZTgyMC5ucl9tYXA7IGkrKykgeworCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIwLm1hcFtpXTsKKwkJZWlfc3RhcnRwZm4gPSByb3VuZF91cChlaS0+YWRkciwgUEFHRV9TSVpFKSA+PiBQQUdFX1NISUZUOworCQllaV9lbmRwZm4gPSByb3VuZF9kb3duKGVpLT5hZGRyICsgZWktPnNpemUsIFBBR0VfU0laRSkKKwkJCQkJCQkJPj4gUEFHRV9TSElGVDsKKworCQkvKiBTa2lwIG1hcCBlbnRyaWVzIHNtYWxsZXIgdGhhbiBhIHBhZ2UgKi8KKwkJaWYgKGVpX3N0YXJ0cGZuID4gZWlfZW5kcGZuKQorCQkJY29udGludWU7CisKKwkJLyogQ2hlY2sgaWYgZW5kX3Bmbl9tYXAgc2hvdWxkIGJlIHVwZGF0ZWQgKi8KKwkJaWYgKGVpLT50eXBlICE9IEU4MjBfUkFNICYmIGVpX2VuZHBmbiA+IGVuZF9wZm5fbWFwKQorCQkJZW5kX3Bmbl9tYXAgPSBlaV9lbmRwZm47CisKKwkJLyogU2tpcCBpZiBtYXAgaXMgb3V0c2lkZSB0aGUgbm9kZSAqLworCQlpZiAoZWktPnR5cGUgIT0gRTgyMF9SQU0gfHwKKwkJCQllaV9lbmRwZm4gPD0gc3RhcnRfcGZuIHx8CisJCQkJZWlfc3RhcnRwZm4gPj0gZW5kX3BmbikKKwkJCWNvbnRpbnVlOworCisJCS8qIENoZWNrIGZvciBvdmVybGFwcyAqLworCQlpZiAoZWlfc3RhcnRwZm4gPCBzdGFydF9wZm4pCisJCQllaV9zdGFydHBmbiA9IHN0YXJ0X3BmbjsKKwkJaWYgKGVpX2VuZHBmbiA+IGVuZF9wZm4pCisJCQllaV9lbmRwZm4gPSBlbmRfcGZuOworCisJCS8qIE9iZXkgZW5kX3VzZXJfcGZuIHRvIHNhdmUgb24gbWVtbWFwICovCisJCWlmIChlaV9zdGFydHBmbiA+PSBlbmRfdXNlcl9wZm4pCisJCQljb250aW51ZTsKKwkJaWYgKGVpX2VuZHBmbiA+IGVuZF91c2VyX3BmbikKKwkJCWVpX2VuZHBmbiA9IGVuZF91c2VyX3BmbjsKKworCQlhZGRfYWN0aXZlX3JhbmdlKG5pZCwgZWlfc3RhcnRwZm4sIGVpX2VuZHBmbik7CisJfQorfQorCiAvKiAKICAqIEFkZCBhIG1lbW9yeSByZWdpb24gdG8gdGhlIGtlcm5lbCBlODIwIG1hcC4KICAqLyAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbXBwYXJzZS5jCmluZGV4IDIwZTg4ZjQuLmI4ZDUzZGYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9tcHBhcnNlLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL21wcGFyc2UuYwpAQCAtMTUyLDYgKzE1MiwyMSBAQAogCX0KIH0KIAorc3RhdGljIGludCBiYWRfaW9hcGljKHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKK3sKKwlpZiAobnJfaW9hcGljcyA+PSBNQVhfSU9fQVBJQ1MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogTWF4ICMgb2YgSS9PIEFQSUNzICglZCkgZXhjZWVkZWQgIgorCQkJIihmb3VuZCAlZClcbiIsIE1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7CisJCXBhbmljKCJSZWNvbXBpbGUga2VybmVsIHdpdGggYmlnZ2VyIE1BWF9JT19BUElDUyFcbiIpOworCX0KKwlpZiAoIWFkZHJlc3MpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBCb2d1cyAoemVybykgSS9PIEFQSUMgYWRkcmVzcyIKKwkJCSIgZm91bmQgaW4gdGFibGUsIHNraXBwaW5nIVxuIik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgX19pbml0IE1QX2lvYXBpY19pbmZvIChzdHJ1Y3QgbXBjX2NvbmZpZ19pb2FwaWMgKm0pCiB7CiAJaWYgKCEobS0+bXBjX2ZsYWdzICYgTVBDX0FQSUNfVVNBQkxFKSkKQEAgLTE1OSwxNiArMTc0LDEwIEBACiAKIAlwcmludGsoIkkvTyBBUElDICMlZCBhdCAweCVYLlxuIiwKIAkJbS0+bXBjX2FwaWNpZCwgbS0+bXBjX2FwaWNhZGRyKTsKLQlpZiAobnJfaW9hcGljcyA+PSBNQVhfSU9fQVBJQ1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJNYXggIyBvZiBJL08gQVBJQ3MgKCVkKSBleGNlZWRlZCAoZm91bmQgJWQpLlxuIiwKLQkJCU1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7Ci0JCXBhbmljKCJSZWNvbXBpbGUga2VybmVsIHdpdGggYmlnZ2VyIE1BWF9JT19BUElDUyEuXG4iKTsKLQl9Ci0JaWYgKCFtLT5tcGNfYXBpY2FkZHIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBib2d1cyB6ZXJvIEkvTyBBUElDIGFkZHJlc3MiCi0JCQkiIGZvdW5kIGluIE1QIHRhYmxlLCBza2lwcGluZyFcbiIpOworCisJaWYgKGJhZF9pb2FwaWMobS0+bXBjX2FwaWNhZGRyKSkKIAkJcmV0dXJuOwotCX0KKwogCW1wX2lvYXBpY3NbbnJfaW9hcGljc10gPSAqbTsKIAlucl9pb2FwaWNzKys7CiB9CkBAIC02NDcsMTYgKzY1Niw4IEBACiB7CiAJaW50IGlkeCA9IDA7CiAKLQlpZiAobnJfaW9hcGljcyA+PSBNQVhfSU9fQVBJQ1MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJFUlJPUjogTWF4ICMgb2YgSS9PIEFQSUNzICglZCkgZXhjZWVkZWQgIgotCQkJIihmb3VuZCAlZClcbiIsIE1BWF9JT19BUElDUywgbnJfaW9hcGljcyk7Ci0JCXBhbmljKCJSZWNvbXBpbGUga2VybmVsIHdpdGggYmlnZ2VyIE1BWF9JT19BUElDUyFcbiIpOwotCX0KLQlpZiAoIWFkZHJlc3MpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJXQVJOSU5HOiBCb2d1cyAoemVybykgSS9PIEFQSUMgYWRkcmVzcyIKLQkJCSIgZm91bmQgaW4gTUFEVCB0YWJsZSwgc2tpcHBpbmchXG4iKTsKKwlpZiAoYmFkX2lvYXBpYyhhZGRyZXNzKSkKIAkJcmV0dXJuOwotCX0KIAogCWlkeCA9IG5yX2lvYXBpY3MrKzsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL25taS5jIGIvYXJjaC94ODZfNjQva2VybmVsL25taS5jCmluZGV4IDRkNmZiMDQuLjdhZjljYjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9ubWkuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvbm1pLmMKQEAgLTI4LDYgKzI4LDEwIEBACiAjaW5jbHVkZSA8YXNtL21jZS5oPgogI2luY2x1ZGUgPGFzbS9pbnRlbF9hcmNoX3BlcmZtb24uaD4KIAoraW50IHVua25vd25fbm1pX3BhbmljOworaW50IG5taV93YXRjaGRvZ19lbmFibGVkOworaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKKwogLyogcGVyZmN0cl9ubWlfb3duZXIgdHJhY2tzIHRoZSBvd25lcnNoaXAgb2YgdGhlIHBlcmZjdHIgcmVnaXN0ZXJzOgogICogZXZ0c2VsX25taV9vd25lciB0cmFja3MgdGhlIG93bmVyc2hpcCBvZiB0aGUgZXZlbnQgc2VsZWN0aW9uCiAgKiAtIGRpZmZlcmVudCBwZXJmb3JtYW5jZSBjb3VudGVycy8gZXZlbnQgc2VsZWN0aW9uIG1heSBiZSByZXNlcnZlZCBmb3IKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLWRtYS5jCmluZGV4IDRkY2I2NzEuLmY4ZDg1NzQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3BjaS1kbWEuYwpAQCAtMTcwLDggKzE3MCwyMCBAQAogfQogRVhQT1JUX1NZTUJPTChkbWFfZnJlZV9jb2hlcmVudCk7CiAKK3N0YXRpYyBpbnQgZm9yYmlkX2RhYyBfX3JlYWRfbW9zdGx5OworCiBpbnQgZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogeworI2lmZGVmIENPTkZJR19QQ0kKKwlpZiAobWFzayA+IDB4ZmZmZmZmZmYgJiYgZm9yYmlkX2RhYyA+IDApIHsKKworCisKKwkJcHJpbnRrKEtFUk5fSU5GTyAiUENJOiBEaXNhbGxvd2luZyBEQUMgZm9yIGRldmljZSAlc1xuIiwgZGV2LT5idXNfaWQpOworCQlyZXR1cm4gMDsKKwl9CisjZW5kaWYKKwogCWlmIChkbWFfb3BzLT5kbWFfc3VwcG9ydGVkKQogCQlyZXR1cm4gZG1hX29wcy0+ZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwogCkBAIC0yMzEsNTcgKzI0Myw2NCBAQAogICAgYWxsb3dlZCAgb3ZlcndyaXRlIGlvbW11IG9mZiB3b3JrYXJvdW5kcyBmb3Igc3BlY2lmaWMgY2hpcHNldHMuCiAgICBzb2Z0CSBVc2Ugc29mdHdhcmUgYm91bmNlIGJ1ZmZlcmluZyAoZGVmYXVsdCBmb3IgSW50ZWwgbWFjaGluZXMpCiAgICBub2FwZXJ0dXJlIERvbid0IHRvdWNoIHRoZSBhcGVydHVyZSBmb3IgQUdQLgorICAgYWxsb3dkYWMgQWxsb3cgRE1BID40R0IKKyAgIG5vZGFjICAgIEZvcmJpZCBETUEgPjRHQgorICAgcGFuaWMgICAgRm9yY2UgcGFuaWMgd2hlbiBJT01NVSBvdmVyZmxvd3MKICovCiBfX2luaXQgaW50IGlvbW11X3NldHVwKGNoYXIgKnApCiB7Ci0gICAgaW9tbXVfbWVyZ2UgPSAxOworCWlvbW11X21lcmdlID0gMTsKIAogCWlmICghcCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLSAgICB3aGlsZSAoKnApIHsKLQkgICAgaWYgKCFzdHJuY21wKHAsIm9mZiIsMykpCi0JCSAgICBub19pb21tdSA9IDE7Ci0JICAgIC8qIGdhcnRfcGFyc2Vfb3B0aW9ucyBoYXMgbW9yZSBmb3JjZSBzdXBwb3J0ICovCi0JICAgIGlmICghc3RybmNtcChwLCJmb3JjZSIsNSkpCi0JCSAgICBmb3JjZV9pb21tdSA9IDE7Ci0JICAgIGlmICghc3RybmNtcChwLCJub2ZvcmNlIiw3KSkgewotCQkgICAgaW9tbXVfbWVyZ2UgPSAwOwotCQkgICAgZm9yY2VfaW9tbXUgPSAwOwotCSAgICB9CisJd2hpbGUgKCpwKSB7CisJCWlmICghc3RybmNtcChwLCJvZmYiLDMpKQorCQkJbm9faW9tbXUgPSAxOworCQkvKiBnYXJ0X3BhcnNlX29wdGlvbnMgaGFzIG1vcmUgZm9yY2Ugc3VwcG9ydCAqLworCQlpZiAoIXN0cm5jbXAocCwiZm9yY2UiLDUpKQorCQkJZm9yY2VfaW9tbXUgPSAxOworCQlpZiAoIXN0cm5jbXAocCwibm9mb3JjZSIsNykpIHsKKwkJCWlvbW11X21lcmdlID0gMDsKKwkJCWZvcmNlX2lvbW11ID0gMDsKKwkJfQogCi0JICAgIGlmICghc3RybmNtcChwLCAiYmlvbWVyZ2UiLDgpKSB7Ci0JCSAgICBpb21tdV9iaW9fbWVyZ2UgPSA0MDk2OwotCQkgICAgaW9tbXVfbWVyZ2UgPSAxOwotCQkgICAgZm9yY2VfaW9tbXUgPSAxOwotCSAgICB9Ci0JICAgIGlmICghc3RybmNtcChwLCAicGFuaWMiLDUpKQotCQkgICAgcGFuaWNfb25fb3ZlcmZsb3cgPSAxOwotCSAgICBpZiAoIXN0cm5jbXAocCwgIm5vcGFuaWMiLDcpKQotCQkgICAgcGFuaWNfb25fb3ZlcmZsb3cgPSAwOwotCSAgICBpZiAoIXN0cm5jbXAocCwgIm1lcmdlIiw1KSkgewotCQkgICAgaW9tbXVfbWVyZ2UgPSAxOwotCQkgICAgZm9yY2VfaW9tbXUgPSAxOwotCSAgICB9Ci0JICAgIGlmICghc3RybmNtcChwLCAibm9tZXJnZSIsNykpCi0JCSAgICBpb21tdV9tZXJnZSA9IDA7Ci0JICAgIGlmICghc3RybmNtcChwLCAiZm9yY2VzYWMiLDgpKQotCQkgICAgaW9tbXVfc2FjX2ZvcmNlID0gMTsKKwkJaWYgKCFzdHJuY21wKHAsICJiaW9tZXJnZSIsOCkpIHsKKwkJCWlvbW11X2Jpb19tZXJnZSA9IDQwOTY7CisJCQlpb21tdV9tZXJnZSA9IDE7CisJCQlmb3JjZV9pb21tdSA9IDE7CisJCX0KKwkJaWYgKCFzdHJuY21wKHAsICJwYW5pYyIsNSkpCisJCQlwYW5pY19vbl9vdmVyZmxvdyA9IDE7CisJCWlmICghc3RybmNtcChwLCAibm9wYW5pYyIsNykpCisJCQlwYW5pY19vbl9vdmVyZmxvdyA9IDA7CisJCWlmICghc3RybmNtcChwLCAibWVyZ2UiLDUpKSB7CisJCQlpb21tdV9tZXJnZSA9IDE7CisJCQlmb3JjZV9pb21tdSA9IDE7CisJCX0KKwkJaWYgKCFzdHJuY21wKHAsICJub21lcmdlIiw3KSkKKwkJCWlvbW11X21lcmdlID0gMDsKKwkJaWYgKCFzdHJuY21wKHAsICJmb3JjZXNhYyIsOCkpCisJCQlpb21tdV9zYWNfZm9yY2UgPSAxOworCQlpZiAoIXN0cm5jbXAocCwgImFsbG93ZGFjIiwgOCkpCisJCQlmb3JiaWRfZGFjID0gMDsKKwkJaWYgKCFzdHJuY21wKHAsICJub2RhYyIsIDUpKQorCQkJZm9yYmlkX2RhYyA9IC0xOwogCiAjaWZkZWYgQ09ORklHX1NXSU9UTEIKLQkgICAgaWYgKCFzdHJuY21wKHAsICJzb2Z0Iiw0KSkKLQkJICAgIHN3aW90bGIgPSAxOworCQlpZiAoIXN0cm5jbXAocCwgInNvZnQiLDQpKQorCQkJc3dpb3RsYiA9IDE7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19JT01NVQotCSAgICBnYXJ0X3BhcnNlX29wdGlvbnMocCk7CisJCWdhcnRfcGFyc2Vfb3B0aW9ucyhwKTsKICNlbmRpZgogCi0JICAgIHAgKz0gc3RyY3NwbihwLCAiLCIpOwotCSAgICBpZiAoKnAgPT0gJywnKQotCQkgICAgKytwOwotICAgIH0KLSAgICByZXR1cm4gMDsKKwkJcCArPSBzdHJjc3BuKHAsICIsIik7CisJCWlmICgqcCA9PSAnLCcpCisJCQkrK3A7CisJfQorCXJldHVybiAwOwogfQogZWFybHlfcGFyYW0oImlvbW11IiwgaW9tbXVfc2V0dXApOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvcGNpLXN3aW90bGIuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCmluZGV4IDZhNTVmODcuLjY5N2YwYWEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCkBAIC0zLDcgKzMsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKwogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogI2luY2x1ZGUgPGFzbS9zd2lvdGxiLmg+CiAjaW5jbHVkZSA8YXNtL2RtYS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQva2VybmVsL3NldHVwLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwppbmRleCBmOThlNDhjLi5mYzk0NGI1IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYworKysgYi9hcmNoL3g4Nl82NC9rZXJuZWwvc2V0dXAuYwpAQCAtMTIzLDkgKzEyMyw2IEBACiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfQlVTWSB8IElPUkVTT1VSQ0VfSU8gfQogfTsKIAotI2RlZmluZSBTVEFOREFSRF9JT19SRVNPVVJDRVMgXAotCShzaXplb2Ygc3RhbmRhcmRfaW9fcmVzb3VyY2VzIC8gc2l6ZW9mIHN0YW5kYXJkX2lvX3Jlc291cmNlc1swXSkKLQogI2RlZmluZSBJT1JFU09VUkNFX1JBTSAoSU9SRVNPVVJDRV9CVVNZIHwgSU9SRVNPVVJDRV9NRU0pCiAKIHN0cnVjdCByZXNvdXJjZSBkYXRhX3Jlc291cmNlID0gewpAQCAtMTcyLDkgKzE2OSw2IEBACiAJCS5mbGFncyA9IElPUkVTT1VSQ0VfUk9NIH0KIH07CiAKLSNkZWZpbmUgQURBUFRFUl9ST01fUkVTT1VSQ0VTIFwKLQkoc2l6ZW9mIGFkYXB0ZXJfcm9tX3Jlc291cmNlcyAvIHNpemVvZiBhZGFwdGVyX3JvbV9yZXNvdXJjZXNbMF0pCi0KIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgdmlkZW9fcm9tX3Jlc291cmNlID0gewogCS5uYW1lID0gIlZpZGVvIFJPTSIsCiAJLnN0YXJ0ID0gMHhjMDAwMCwKQEAgLTI0NSw3ICsyMzksOCBAQAogCX0KIAogCS8qIGNoZWNrIGZvciBhZGFwdGVyIHJvbXMgb24gMmsgYm91bmRhcmllcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBREFQVEVSX1JPTV9SRVNPVVJDRVMgJiYgc3RhcnQgPCB1cHBlcjsgc3RhcnQgKz0gMjA0OCkgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGFkYXB0ZXJfcm9tX3Jlc291cmNlcykgJiYgc3RhcnQgPCB1cHBlcjsKKwkgICAgIHN0YXJ0ICs9IDIwNDgpIHsKIAkJcm9tID0gaXNhX2J1c190b192aXJ0KHN0YXJ0KTsKIAkJaWYgKCFyb21zaWduYXR1cmUocm9tKSkKIAkJCWNvbnRpbnVlOwpAQCAtMjkyLDcgKzI4Nyw4IEBACiAJaWYgKGJvb3RtYXAgPT0gLTFMKQogCQlwYW5pYygiQ2Fubm90IGZpbmQgYm9vdG1lbSBtYXAgb2Ygc2l6ZSAlbGRcbiIsYm9vdG1hcF9zaXplKTsKIAlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW0oYm9vdG1hcCA+PiBQQUdFX1NISUZULCBlbmRfcGZuKTsKLQllODIwX2Jvb3RtZW1fZnJlZShOT0RFX0RBVEEoMCksIDAsIGVuZF9wZm4gPDwgUEFHRV9TSElGVCk7CisJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucygwLCBzdGFydF9wZm4sIGVuZF9wZm4pOworCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGVuZF9wZm4pOwogCXJlc2VydmVfYm9vdG1lbShib290bWFwLCBib290bWFwX3NpemUpOwogfSAKICNlbmRpZgpAQCAtMzg0LDYgKzM4MCw3IEBACiAKIAlmaW5pc2hfZTgyMF9wYXJzaW5nKCk7CiAKKwllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKDAsIDAsIC0xVUwpOwogCS8qCiAJICogcGFydGlhbGx5IHVzZWQgcGFnZXMgYXJlIG5vdCB1c2FibGUgLSB0aHVzCiAJICogd2UgYXJlIHJvdW5kaW5nIHVwd2FyZHM6CkBAIC00MTQsNiArNDExLDkgQEAKIAltYXhfcGZuID0gZW5kX3BmbjsKIAloaWdoX21lbW9yeSA9ICh2b2lkICopX192YShlbmRfcGZuICogUEFHRV9TSVpFIC0gMSkgKyAxOwogCisJLyogUmVtb3ZlIGFjdGl2ZSByYW5nZXMgc28gcmVkaXNjb3Zlcnkgd2l0aCBOVU1BLWF3YXJlbmVzcyBoYXBwZW5zICovCisJcmVtb3ZlX2FsbF9hY3RpdmVfcmFuZ2VzKCk7CisKICNpZmRlZiBDT05GSUdfQUNQSV9OVU1BCiAJLyoKIAkgKiBQYXJzZSBTUkFUIHRvIGRpc2NvdmVyIG5vZGVzLgpAQCAtNTMyLDcgKzUzMiw3IEBACiAJewogCXVuc2lnbmVkIGk7CiAJLyogcmVxdWVzdCBJL08gc3BhY2UgZm9yIGRldmljZXMgdXNlZCBvbiBhbGwgaVszNDVdODYgUENzICovCi0JZm9yIChpID0gMDsgaSA8IFNUQU5EQVJEX0lPX1JFU09VUkNFUzsgaSsrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHN0YW5kYXJkX2lvX3Jlc291cmNlcyk7IGkrKykKIAkJcmVxdWVzdF9yZXNvdXJjZSgmaW9wb3J0X3Jlc291cmNlLCAmc3RhbmRhcmRfaW9fcmVzb3VyY2VzW2ldKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMgYi9hcmNoL3g4Nl82NC9rZXJuZWwvdGltZS5jCmluZGV4IDFjMjU1ZWUuLjU1N2U5MmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC90aW1lLmMKKysrIGIvYXJjaC94ODZfNjQva2VybmVsL3RpbWUuYwpAQCAtNzcsNyArNzcsNiBAQAogc3RydWN0IHZ4dGltZV9kYXRhIF9fdnh0aW1lIF9fc2VjdGlvbl92eHRpbWU7CS8qIGZvciB2c3lzY2FsbHMgKi8KIAogdm9sYXRpbGUgdW5zaWduZWQgbG9uZyBfX2ppZmZpZXMgX19zZWN0aW9uX2ppZmZpZXMgPSBJTklUSUFMX0pJRkZJRVM7Ci11bnNpZ25lZCBsb25nIF9fd2FsbF9qaWZmaWVzIF9fc2VjdGlvbl93YWxsX2ppZmZpZXMgPSBJTklUSUFMX0pJRkZJRVM7CiBzdHJ1Y3QgdGltZXNwZWMgX194dGltZSBfX3NlY3Rpb25feHRpbWU7CiBzdHJ1Y3QgdGltZXpvbmUgX19zeXNfdHogX19zZWN0aW9uX3N5c190ejsKIApAQCAtMTE5LDcgKzExOCw3IEBACiAKIHZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0dikKIHsKLQl1bnNpZ25lZCBsb25nIHNlcSwgdDsKKwl1bnNpZ25lZCBsb25nIHNlcTsKICAJdW5zaWduZWQgaW50IHNlYywgdXNlYzsKIAogCWRvIHsKQEAgLTEzNiwxMCArMTM1LDcgQEAKIAkJICAgYmUgZm91bmQuIE5vdGUgd2hlbiB5b3UgZml4IGl0IGhlcmUgeW91IG5lZWQgdG8gZG8gdGhlIHNhbWUKIAkJICAgaW4gYXJjaC94ODZfNjQva2VybmVsL3ZzeXNjYWxsLmMgYW5kIGV4cG9ydCBhbGwgbmVlZGVkCiAJCSAgIHZhcmlhYmxlcyBpbiB2bWxpbnV4Lmxkcy4gLUFLICovIAotCi0JCXQgPSAoamlmZmllcyAtIHdhbGxfamlmZmllcykgKiBVU0VDX1BFUl9USUNLICsKLQkJCWRvX2dldHRpbWVvZmZzZXQoKTsKLQkJdXNlYyArPSB0OworCQl1c2VjICs9IGRvX2dldHRpbWVvZmZzZXQoKTsKIAogCX0gd2hpbGUgKHJlYWRfc2VxcmV0cnkoJnh0aW1lX2xvY2ssIHNlcSkpOwogCkBAIC0xNjUsOCArMTYxLDcgQEAKIAogCXdyaXRlX3NlcWxvY2tfaXJxKCZ4dGltZV9sb2NrKTsKIAotCW5zZWMgLT0gZG9fZ2V0dGltZW9mZnNldCgpICogTlNFQ19QRVJfVVNFQyArCi0JCShqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIE5TRUNfUEVSX1RJQ0s7CisJbnNlYyAtPSBkb19nZXR0aW1lb2Zmc2V0KCkgKiBOU0VDX1BFUl9VU0VDOwogCiAJd3RtX3NlYyAgPSB3YWxsX3RvX21vbm90b25pYy50dl9zZWMgKyAoeHRpbWUudHZfc2VjIC0gc2VjKTsKIAl3dG1fbnNlYyA9IHdhbGxfdG9fbW9ub3RvbmljLnR2X25zZWMgKyAoeHRpbWUudHZfbnNlYyAtIG5zZWMpOwpAQCAtNDE1LDE2ICs0MTAsMTYgQEAKIAkJCQkoKChsb25nKSBvZmZzZXQgPDwgVVNfU0NBTEUpIC8gdnh0aW1lLnRzY19xdW90KSAtIDE7CiAJfQogCi0JaWYgKGxvc3QgPiAwKSB7CisJaWYgKGxvc3QgPiAwKQogCQloYW5kbGVfbG9zdF90aWNrcyhsb3N0LCByZWdzKTsKLQkJamlmZmllcyArPSBsb3N0OwotCX0KKwllbHNlCisJCWxvc3QgPSAwOwogCiAvKgogICogRG8gdGhlIHRpbWVyIHN0dWZmLgogICovCiAKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcihsb3N0ICsgMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGUocmVncykpOwogI2VuZGlmCkBAIC0xMDcxLDcgKzEwNjYsNiBAQAogCQl2eHRpbWUubGFzdF90c2MgPSBnZXRfY3ljbGVzX3N5bmMoKTsKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jayxmbGFncyk7CiAJamlmZmllcyArPSBzbGVlcF9sZW5ndGg7Ci0Jd2FsbF9qaWZmaWVzICs9IHNsZWVwX2xlbmd0aDsKIAltb25vdG9uaWNfYmFzZSArPSBzbGVlcF9sZW5ndGggKiAoTlNFQ19QRVJfU0VDL0haKTsKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCmluZGV4IGQwNTY0ZjEuLmI5ZGYyYWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC02NywxMyArNjcsNiBAQAogCiAgIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwotICAuYnNzIDogQVQoQUREUiguYnNzKSAtIExPQURfT0ZGU0VUKSB7Ci0JKiguYnNzLnBhZ2VfYWxpZ25lZCkJCi0JKiguYnNzKQotCX0KLSAgX19ic3Nfc3RvcCA9IC47Ci0KICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKICAgLmRhdGEuY2FjaGVsaW5lX2FsaWduZWQgOiBBVChBRERSKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CkBAIC0xMDgsOSArMTAxLDYgQEAKICAgLnZnZXRjcHVfbW9kZSA6IEFUKFZMT0FEKC52Z2V0Y3B1X21vZGUpKSB7ICooLnZnZXRjcHVfbW9kZSkgfQogICB2Z2V0Y3B1X21vZGUgPSBWVklSVCgudmdldGNwdV9tb2RlKTsKIAotICAud2FsbF9qaWZmaWVzIDogQVQoVkxPQUQoLndhbGxfamlmZmllcykpIHsgKigud2FsbF9qaWZmaWVzKSB9Ci0gIHdhbGxfamlmZmllcyA9IFZWSVJUKC53YWxsX2ppZmZpZXMpOwotCiAgIC5zeXNfdHogOiBBVChWTE9BRCguc3lzX3R6KSkgeyAqKC5zeXNfdHopIH0KICAgc3lzX3R6ID0gVlZJUlQoLnN5c190eik7CiAKQEAgLTIyOSw2ICsyMTksMTMgQEAKICAgLiA9IEFMSUdOKDQwOTYpOwogICBfX25vc2F2ZV9lbmQgPSAuOwogCisgIF9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLworICAuYnNzIDogQVQoQUREUiguYnNzKSAtIExPQURfT0ZGU0VUKSB7CisJKiguYnNzLnBhZ2VfYWxpZ25lZCkKKwkqKC5ic3MpCisJfQorICBfX2Jzc19zdG9wID0gLjsKKwogICBfZW5kID0gLiA7CiAKICAgLyogU2VjdGlvbnMgdG8gYmUgZGlzY2FyZGVkICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9rZXJuZWwvdnN5c2NhbGwuYyBiL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCmluZGV4IGFjNDhjMzguLmE5OGI0NjAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCisrKyBiL2FyY2gveDg2XzY0L2tlcm5lbC92c3lzY2FsbC5jCkBAIC02Niw4ICs2Niw3IEBACiAJCXNlcXVlbmNlID0gcmVhZF9zZXFiZWdpbigmX194dGltZV9sb2NrKTsKIAkJCiAJCXNlYyA9IF9feHRpbWUudHZfc2VjOwotCQl1c2VjID0gKF9feHRpbWUudHZfbnNlYyAvIDEwMDApICsKLQkJCShfX2ppZmZpZXMgLSBfX3dhbGxfamlmZmllcykgKiAoMTAwMDAwMCAvIEhaKTsKKwkJdXNlYyA9IF9feHRpbWUudHZfbnNlYyAvIDEwMDA7CiAKIAkJaWYgKF9fdnh0aW1lLm1vZGUgIT0gVlhUSU1FX0hQRVQpIHsKIAkJCXQgPSBnZXRfY3ljbGVzX3N5bmMoKTsKQEAgLTE1NSw4ICsxNTQsOCBAQAogCSAgIFdlIGRvIHRoaXMgaGVyZSBiZWNhdXNlIG90aGVyd2lzZSB1c2VyIHNwYWNlIHdvdWxkIGRvIGl0IG9uCiAJICAgaXRzIG93biBpbiBhIGxpa2VseSBpbmZlcmlvciB3YXkgKG5vIGFjY2VzcyB0byBqaWZmaWVzKS4KIAkgICBJZiB5b3UgZG9uJ3QgbGlrZSBpdCBwYXNzIE5VTEwuICovCi0JaWYgKHRjYWNoZSAmJiB0Y2FjaGUtPnQwID09IChqID0gX19qaWZmaWVzKSkgewotCQlwID0gdGNhY2hlLT50MTsKKwlpZiAodGNhY2hlICYmIHRjYWNoZS0+YmxvYlswXSA9PSAoaiA9IF9famlmZmllcykpIHsKKwkJcCA9IHRjYWNoZS0+YmxvYlsxXTsKIAl9IGVsc2UgaWYgKF9fdmdldGNwdV9tb2RlID09IFZHRVRDUFVfUkRUU0NQKSB7CiAJCS8qIExvYWQgcGVyIENQVSBkYXRhIGZyb20gUkRUU0NQICovCiAJCXJkdHNjcChkdW1teSwgZHVtbXksIHApOwpAQCAtMTY1LDggKzE2NCw4IEBACiAJCWFzbSgibHNsICUxLCUwIiA6ICI9ciIgKHApIDogInIiIChfX1BFUl9DUFVfU0VHKSk7CiAJfQogCWlmICh0Y2FjaGUpIHsKLQkJdGNhY2hlLT50MCA9IGo7Ci0JCXRjYWNoZS0+dDEgPSBwOworCQl0Y2FjaGUtPmJsb2JbMF0gPSBqOworCQl0Y2FjaGUtPmJsb2JbMV0gPSBwOwogCX0KIAlpZiAoY3B1KQogCQkqY3B1ID0gcCAmIDB4ZmZmOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYyBiL2FyY2gveDg2XzY0L21tL2ZhdWx0LmMKaW5kZXggMWExN2IwNy4uMzc1MWI0NyAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vZmF1bHQuYworKysgYi9hcmNoL3g4Nl82NC9tbS9mYXVsdC5jCkBAIC0yNDQsNyArMjQ0LDcgQEAKIAogaW50IHVuaGFuZGxlZF9zaWduYWwoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBzaWcpCiB7Ci0JaWYgKHRzay0+cGlkID09IDEpCisJaWYgKGlzX2luaXQodHNrKSkKIAkJcmV0dXJuIDE7CiAJaWYgKHRzay0+cHRyYWNlICYgUFRfUFRSQUNFRCkKIAkJcmV0dXJuIDA7CkBAIC00NjQsNyArNDY0LDcgQEAKIAkJY2FzZSBQRl9QUk9UOgkJLyogcmVhZCwgcHJlc2VudCAqLwogCQkJZ290byBiYWRfYXJlYTsKIAkJY2FzZSAwOgkJCS8qIHJlYWQsIG5vdCBwcmVzZW50ICovCi0JCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDKSkpCisJCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgKFZNX1JFQUQgfCBWTV9FWEVDIHwgVk1fV1JJVEUpKSkKIAkJCQlnb3RvIGJhZF9hcmVhOwogCX0KIApAQCAtNTgwLDcgKzU4MCw3IEBACiAgKi8KIG91dF9vZl9tZW1vcnk6CiAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQlpZiAoY3VycmVudC0+cGlkID09IDEpIHsgCisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZ290byBhZ2FpbjsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9pbml0LmMgYi9hcmNoL3g4Nl82NC9tbS9pbml0LmMKaW5kZXggMWU0NjY5Zi4uMTljNzI1MiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vaW5pdC5jCisrKyBiL2FyY2gveDg2XzY0L21tL2luaXQuYwpAQCAtNDAzLDY5ICs0MDMsMTUgQEAKIAlfX2ZsdXNoX3RsYl9hbGwoKTsKIH0KIAotLyogQ29tcHV0ZSB6b25lIHNpemVzIGZvciB0aGUgRE1BIGFuZCBETUEzMiB6b25lcyBpbiBhIG5vZGUuICovCi1fX2luaXQgdm9pZAotc2l6ZV96b25lcyh1bnNpZ25lZCBsb25nICp6LCB1bnNpZ25lZCBsb25nICpoLAotCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pCi17Ci0gCWludCBpOwotIAl1bnNpZ25lZCBsb25nIHc7Ci0KLSAJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQotIAkJeltpXSA9IDA7Ci0KLSAJaWYgKHN0YXJ0X3BmbiA8IE1BWF9ETUFfUEZOKQotIAkJeltaT05FX0RNQV0gPSBNQVhfRE1BX1BGTiAtIHN0YXJ0X3BmbjsKLSAJaWYgKHN0YXJ0X3BmbiA8IE1BWF9ETUEzMl9QRk4pIHsKLSAJCXVuc2lnbmVkIGxvbmcgZG1hMzJfcGZuID0gTUFYX0RNQTMyX1BGTjsKLSAJCWlmIChkbWEzMl9wZm4gPiBlbmRfcGZuKQotIAkJCWRtYTMyX3BmbiA9IGVuZF9wZm47Ci0gCQl6W1pPTkVfRE1BMzJdID0gZG1hMzJfcGZuIC0gc3RhcnRfcGZuOwotIAl9Ci0gCXpbWk9ORV9OT1JNQUxdID0gZW5kX3BmbiAtIHN0YXJ0X3BmbjsKLQotIAkvKiBSZW1vdmUgbG93ZXIgem9uZXMgZnJvbSBoaWdoZXIgb25lcy4gKi8KLSAJdyA9IDA7Ci0gCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykgewotIAkJaWYgKHpbaV0pCi0gCQkJeltpXSAtPSB3OwotIAkgICAgICAgIHcgKz0geltpXTsKLQl9Ci0KLQkvKiBDb21wdXRlIGhvbGVzICovCi0JdyA9IHN0YXJ0X3BmbjsKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKLQkJdW5zaWduZWQgbG9uZyBzID0gdzsKLQkJdyArPSB6W2ldOwotCQloW2ldID0gZTgyMF9ob2xlX3NpemUocywgdyk7Ci0JfQotCi0JLyogQWRkIHRoZSBzcGFjZSBwYWNlIG5lZWRlZCBmb3IgbWVtX21hcCB0byB0aGUgaG9sZXMgdG9vLiAqLwotCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKLQkJaFtpXSArPSAoeltpXSAqIHNpemVvZihzdHJ1Y3QgcGFnZSkpIC8gUEFHRV9TSVpFOwotCi0JLyogVGhlIDE2TUIgRE1BIHpvbmUgaGFzIHRoZSBrZXJuZWwgYW5kIG90aGVyIG1pc2MgbWFwcGluZ3MuCi0gCSAgIEFjY291bnQgdGhlbSB0b28gKi8KLQlpZiAoaFtaT05FX0RNQV0pIHsKLQkJaFtaT05FX0RNQV0gKz0gZG1hX3Jlc2VydmU7Ci0JCWlmIChoW1pPTkVfRE1BXSA+PSB6W1pPTkVfRE1BXSkgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkJCSJLZXJuZWwgdG9vIGxhcmdlIGFuZCBmaWxsaW5nIHVwIFpPTkVfRE1BP1xuIik7Ci0JCQloW1pPTkVfRE1BXSA9IHpbWk9ORV9ETUFdOwotCQl9Ci0JfQotfQotCiAjaWZuZGVmIENPTkZJR19OVU1BCiB2b2lkIF9faW5pdCBwYWdpbmdfaW5pdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgem9uZXNbTUFYX05SX1pPTkVTXSwgaG9sZXNbTUFYX05SX1pPTkVTXTsKLQorCXVuc2lnbmVkIGxvbmcgbWF4X3pvbmVfcGZuc1tNQVhfTlJfWk9ORVNdID0ge01BWF9ETUFfUEZOLAorCQkJCQkJCU1BWF9ETUEzMl9QRk4sCisJCQkJCQkJZW5kX3Bmbn07CiAJbWVtb3J5X3ByZXNlbnQoMCwgMCwgZW5kX3Bmbik7CiAJc3BhcnNlX2luaXQoKTsKLQlzaXplX3pvbmVzKHpvbmVzLCBob2xlcywgMCwgZW5kX3Bmbik7Ci0JZnJlZV9hcmVhX2luaXRfbm9kZSgwLCBOT0RFX0RBVEEoMCksIHpvbmVzLAotCQkJICAgIF9fcGEoUEFHRV9PRkZTRVQpID4+IFBBR0VfU0hJRlQsIGhvbGVzKTsKKwlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KICNlbmRpZgogCkBAIC01MTcsMTkgKzQ2Myw2IEBACiAKICNpZmRlZiBDT05GSUdfTUVNT1JZX0hPVFBMVUcKIC8qCi0gKiBYWFg6IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKCkgaXMgdG8gZmluZCBub2RlIGlkIGZyb20gcGh5c2ljYWwgYWRkcmVzcwotICoJdmlhIHByb2JlIGludGVyZmFjZSBvZiBzeXNmcy4gSWYgYWNwaSBub3RpZmllcyBob3QtYWRkIGV2ZW50LCB0aGVuIGl0Ci0gKgljYW4gdGVsbCBub2RlIGlkIGJ5IHNlYXJjaGluZyBkc2R0LiBCdXQsIHByb2JlIGludGVyZmFjZSBkb2Vzbid0IGhhdmUKLSAqCW5vZGUgaWQuIFNvLCByZXR1cm4gMCBhcyBub2RlIGlkIGF0IHRoaXMgdGltZS4KLSAqLwotI2lmZGVmIENPTkZJR19OVU1BCi1pbnQgbWVtb3J5X2FkZF9waHlzYWRkcl90b19uaWQodTY0IHN0YXJ0KQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLS8qCiAgKiBNZW1vcnkgaXMgYWRkZWQgYWx3YXlzIHRvIE5PUk1BTCB6b25lLiBUaGlzIG1lYW5zIHlvdSB3aWxsIG5ldmVyIGdldAogICogYWRkaXRpb25hbCBETUEvRE1BMzIgbWVtb3J5LgogICovCkBAIC01NDEsMTIgKzQ3NCwxMiBAQAogCXVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBzaXplID4+IFBBR0VfU0hJRlQ7CiAJaW50IHJldDsKIAorCWluaXRfbWVtb3J5X21hcHBpbmcoc3RhcnQsIChzdGFydCArIHNpemUgLTEpKTsKKwogCXJldCA9IF9fYWRkX3BhZ2VzKHpvbmUsIHN0YXJ0X3BmbiwgbnJfcGFnZXMpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKLQlpbml0X21lbW9yeV9tYXBwaW5nKHN0YXJ0LCAoc3RhcnQgKyBzaXplIC0xKSk7Ci0KIAlyZXR1cm4gcmV0OwogZXJyb3I6CiAJcHJpbnRrKCIlczogUHJvYmxlbSBlbmNvdW50ZXJlZCBpbiBfX2FkZF9wYWdlcyFcbiIsIF9fZnVuY19fKTsKQEAgLTU2MCw3ICs0OTMsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9tZW1vcnkpOwogCi0jZWxzZSAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KKyNpZm5kZWYgQ09ORklHX0FDUElfTlVNQQoraW50IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKHU2NCBzdGFydCkKK3sKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKTsKKyNlbmRpZgorCisjaWZuZGVmIENPTkZJR19BQ1BJX05VTUEKK2ludCBtZW1vcnlfYWRkX3BoeXNhZGRyX3RvX25pZCh1NjQgc3RhcnQpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworI2VuZGlmIC8qIENPTkZJR19NRU1PUllfSE9UUExVRyAqLworCisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1JFU0VSVkUKIC8qCiAgKiBNZW1vcnkgSG90YWRkIHdpdGhvdXQgc3BhcnNlbWVtLiBUaGUgbWVtX21hcHMgaGF2ZSBiZWVuIGFsbG9jYXRlZCBpbiBhZHZhbmNlLAogICoganVzdCBvbmxpbmUgdGhlIHBhZ2VzLgpAQCAtNTg2LDcgKzUzNiw3IEBACiAJfQogCXJldHVybiBlcnI7CiB9Ci0jZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYywga2NvcmVfa2VybmVsLCBrY29yZV9tb2R1bGVzLAogCQkJIGtjb3JlX3ZzeXNjYWxsOwpAQCAtNjA4LDcgKzU1OCw4IEBACiAjZWxzZQogCXRvdGFscmFtX3BhZ2VzID0gZnJlZV9hbGxfYm9vdG1lbSgpOwogI2VuZGlmCi0JcmVzZXJ2ZWRwYWdlcyA9IGVuZF9wZm4gLSB0b3RhbHJhbV9wYWdlcyAtIGU4MjBfaG9sZV9zaXplKDAsIGVuZF9wZm4pOworCXJlc2VydmVkcGFnZXMgPSBlbmRfcGZuIC0gdG90YWxyYW1fcGFnZXMgLQorCQkJCQlhYnNlbnRfcGFnZXNfaW5fcmFuZ2UoMCwgZW5kX3Bmbik7CiAKIAlhZnRlcl9ib290bWVtID0gMTsKIApAQCAtNzA4LDggKzY1OSwxMCBAQAogI2Vsc2UgICAgICAgCQkKIAlyZXNlcnZlX2Jvb3RtZW0ocGh5cywgbGVuKTsgICAgCiAjZW5kaWYKLQlpZiAocGh5cytsZW4gPD0gTUFYX0RNQV9QRk4qUEFHRV9TSVpFKQorCWlmIChwaHlzK2xlbiA8PSBNQVhfRE1BX1BGTipQQUdFX1NJWkUpIHsKIAkJZG1hX3Jlc2VydmUgKz0gbGVuIC8gUEFHRV9TSVpFOworCQlzZXRfZG1hX3Jlc2VydmUoZG1hX3Jlc2VydmUpOworCX0KIH0KIAogaW50IGtlcm5fYWRkcl92YWxpZCh1bnNpZ25lZCBsb25nIGFkZHIpIApkaWZmIC0tZ2l0IGEvYXJjaC94ODZfNjQvbW0vaW9yZW1hcC5jIGIvYXJjaC94ODZfNjQvbW0vaW9yZW1hcC5jCmluZGV4IDQ1ZDdkODIuLmM2ZTVlOGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2XzY0L21tL2lvcmVtYXAuYworKysgYi9hcmNoL3g4Nl82NC9tbS9pb3JlbWFwLmMKQEAgLTEyLDExNyArMTIsMTYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9wcm90by5oPgogCiAjZGVmaW5lIElTQV9TVEFSVF9BRERSRVNTICAgICAgMHhhMDAwMAogI2RlZmluZSBJU0FfRU5EX0FERFJFU1MgICAgICAgICAgICAgICAgMHgxMDAwMDAKIAotc3RhdGljIGlubGluZSB2b2lkIHJlbWFwX2FyZWFfcHRlKHB0ZV90ICogcHRlLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQl1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBmbGFncykKLXsKLQl1bnNpZ25lZCBsb25nIGVuZDsKLQl1bnNpZ25lZCBsb25nIHBmbjsKLQotCWFkZHJlc3MgJj0gflBNRF9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQTURfU0laRSkKLQkJZW5kID0gUE1EX1NJWkU7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKLQlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKLQlkbyB7Ci0JCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKLQkJCXByaW50aygicmVtYXBfYXJlYV9wdGU6IHBhZ2UgYWxyZWFkeSBleGlzdHNcbiIpOwotCQkJQlVHKCk7Ci0JCX0KLQkJc2V0X3B0ZShwdGUsIHBmbl9wdGUocGZuLCBfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCAKLQkJCQkJX1BBR0VfR0xPQkFMIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IGZsYWdzKSkpOwotCQlhZGRyZXNzICs9IFBBR0VfU0laRTsKLQkJcGZuKys7Ci0JCXB0ZSsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgcmVtYXBfYXJlYV9wbWQocG1kX3QgKiBwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAotCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotCXVuc2lnbmVkIGxvbmcgZW5kOwotCi0JYWRkcmVzcyAmPSB+UFVEX01BU0s7Ci0JZW5kID0gYWRkcmVzcyArIHNpemU7Ci0JaWYgKGVuZCA+IFBVRF9TSVpFKQotCQllbmQgPSBQVURfU0laRTsKLQlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHRlX3QgKiBwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcmVzcyk7Ci0JCWlmICghcHRlKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCXJlbWFwX2FyZWFfcHRlKHB0ZSwgYWRkcmVzcywgZW5kIC0gYWRkcmVzcywgYWRkcmVzcyArIHBoeXNfYWRkciwgZmxhZ3MpOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQTURfU0laRSkgJiBQTURfTUFTSzsKLQkJcG1kKys7Ci0JfSB3aGlsZSAoYWRkcmVzcyAmJiAoYWRkcmVzcyA8IGVuZCkpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW5saW5lIGludCByZW1hcF9hcmVhX3B1ZChwdWRfdCAqIHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0KLQlhZGRyZXNzICY9IH5QR0RJUl9NQVNLOwotCWVuZCA9IGFkZHJlc3MgKyBzaXplOwotCWlmIChlbmQgPiBQR0RJUl9TSVpFKQotCQllbmQgPSBQR0RJUl9TSVpFOwotCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7Ci0JZG8gewotCQlwbWRfdCAqIHBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcHVkLCBhZGRyZXNzKTsKLQkJaWYgKCFwbWQpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJcmVtYXBfYXJlYV9wbWQocG1kLCBhZGRyZXNzLCBlbmQgLSBhZGRyZXNzLCBhZGRyZXNzICsgcGh5c19hZGRyLCBmbGFncyk7Ci0JCWFkZHJlc3MgPSAoYWRkcmVzcyArIFBVRF9TSVpFKSAmIFBVRF9NQVNLOwotCQlwdWQrKzsKLQl9IHdoaWxlIChhZGRyZXNzICYmIChhZGRyZXNzIDwgZW5kKSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAotCQkJCSB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JaW50IGVycm9yOwotCXBnZF90ICpwZ2Q7Ci0JdW5zaWduZWQgbG9uZyBlbmQgPSBhZGRyZXNzICsgc2l6ZTsKLQotCXBoeXNfYWRkciAtPSBhZGRyZXNzOwotCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyZXNzKTsKLQlmbHVzaF9jYWNoZV9hbGwoKTsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOwotCWRvIHsKLQkJcHVkX3QgKnB1ZDsKLQkJcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2QsIGFkZHJlc3MpOwotCQllcnJvciA9IC1FTk9NRU07Ci0JCWlmICghcHVkKQotCQkJYnJlYWs7Ci0JCWlmIChyZW1hcF9hcmVhX3B1ZChwdWQsIGFkZHJlc3MsIGVuZCAtIGFkZHJlc3MsCi0JCQkJCSBwaHlzX2FkZHIgKyBhZGRyZXNzLCBmbGFncykpCi0JCQlicmVhazsKLQkJZXJyb3IgPSAwOwotCQlhZGRyZXNzID0gKGFkZHJlc3MgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Ci0JCXBnZCsrOwotCX0gd2hpbGUgKGFkZHJlc3MgJiYgKGFkZHJlc3MgPCBlbmQpKTsKLQlmbHVzaF90bGJfYWxsKCk7Ci0JcmV0dXJuIGVycm9yOwotfQotCiAvKgogICogRml4IHVwIHRoZSBsaW5lYXIgZGlyZWN0IG1hcHBpbmcgb2YgdGhlIGtlcm5lbCB0byBhdm9pZCBjYWNoZSBhdHRyaWJ1dGUKICAqIGNvbmZsaWN0cy4KQEAgLTE2NSw2ICs2NCw3IEBACiAJdm9pZCAqIGFkZHI7CiAJc3RydWN0IHZtX3N0cnVjdCAqIGFyZWE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKKwlwZ3Byb3RfdCBwZ3Byb3Q7CiAKIAkvKiBEb24ndCBhbGxvdyB3cmFwYXJvdW5kIG9yIHplcm8gc2l6ZSAqLwogCWxhc3RfYWRkciA9IHBoeXNfYWRkciArIHNpemUgLSAxOwpAQCAtMTk0LDYgKzk0LDggQEAKIAl9CiAjZW5kaWYKIAorCXBncHJvdCA9IF9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0dMT0JBTAorCQkJICB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBmbGFncyk7CiAJLyoKIAkgKiBNYXBwaW5ncyBoYXZlIHRvIGJlIHBhZ2UtYWxpZ25lZAogCSAqLwpAQCAtMjA5LDcgKzExMSw4IEBACiAJCXJldHVybiBOVUxMOwogCWFyZWEtPnBoeXNfYWRkciA9IHBoeXNfYWRkcjsKIAlhZGRyID0gYXJlYS0+YWRkcjsKLQlpZiAocmVtYXBfYXJlYV9wYWdlcygodW5zaWduZWQgbG9uZykgYWRkciwgcGh5c19hZGRyLCBzaXplLCBmbGFncykpIHsKKwlpZiAoaW9yZW1hcF9wYWdlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWFkZHIsICh1bnNpZ25lZCBsb25nKWFkZHIgKyBzaXplLAorCQkJICAgICAgIHBoeXNfYWRkciwgcGdwcm90KSkgewogCQlyZW1vdmVfdm1fYXJlYSgodm9pZCAqKShQQUdFX01BU0sgJiAodW5zaWduZWQgbG9uZykgYWRkcikpOwogCQlyZXR1cm4gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL3g4Nl82NC9tbS9rOHRvcG9sb2d5LmMgYi9hcmNoL3g4Nl82NC9tbS9rOHRvcG9sb2d5LmMKaW5kZXggNWNmNTk0Zi4uYjViOGRiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vazh0b3BvbG9neS5jCisrKyBiL2FyY2gveDg2XzY0L21tL2s4dG9wb2xvZ3kuYwpAQCAtMTQ5LDYgKzE0OSw5IEBACiAJCQogCQlub2Rlc1tub2RlaWRdLnN0YXJ0ID0gYmFzZTsgCiAJCW5vZGVzW25vZGVpZF0uZW5kID0gbGltaXQ7CisJCWU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMobm9kZWlkLAorCQkJCW5vZGVzW25vZGVpZF0uc3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCQlub2Rlc1tub2RlaWRdLmVuZCA+PiBQQUdFX1NISUZUKTsKIAogCQlwcmV2YmFzZSA9IGJhc2U7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL251bWEuYyBiL2FyY2gveDg2XzY0L21tL251bWEuYwppbmRleCAzMjJiZjQ1Li44MjlhMDA4YiAxMDA2NDQKLS0tIGEvYXJjaC94ODZfNjQvbW0vbnVtYS5jCisrKyBiL2FyY2gveDg2XzY0L21tL251bWEuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAJCQkJCSBib290bWFwX3N0YXJ0ID4+IFBBR0VfU0hJRlQsIAogCQkJCQkgc3RhcnRfcGZuLCBlbmRfcGZuKTsgCiAKLQllODIwX2Jvb3RtZW1fZnJlZShOT0RFX0RBVEEobm9kZWlkKSwgc3RhcnQsIGVuZCk7CisJZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMobm9kZWlkLCBlbmQpOwogCiAJcmVzZXJ2ZV9ib290bWVtX25vZGUoTk9ERV9EQVRBKG5vZGVpZCksIG5vZGVkYXRhX3BoeXMsIHBnZGF0X3NpemUpOyAKIAlyZXNlcnZlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEobm9kZWlkKSwgYm9vdG1hcF9zdGFydCwgYm9vdG1hcF9wYWdlczw8UEFHRV9TSElGVCk7CkBAIC0xNzUsMTMgKzE3NSwxMSBAQAogdm9pZCBfX2luaXQgc2V0dXBfbm9kZV96b25lcyhpbnQgbm9kZWlkKQogeyAKIAl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbiwgbWVtbWFwc2l6ZSwgbGltaXQ7Ci0JdW5zaWduZWQgbG9uZyB6b25lc1tNQVhfTlJfWk9ORVNdOwotCXVuc2lnbmVkIGxvbmcgaG9sZXNbTUFYX05SX1pPTkVTXTsKIAogIAlzdGFydF9wZm4gPSBub2RlX3N0YXJ0X3Bmbihub2RlaWQpOwogIAllbmRfcGZuID0gbm9kZV9lbmRfcGZuKG5vZGVpZCk7CiAKLQlEcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyB1cCBub2RlICVkICVseC0lbHhcbiIsCisJRHByaW50ayhLRVJOX0lORk8gIlNldHRpbmcgdXAgbWVtbWFwIGZvciBub2RlICVkICVseC0lbHhcbiIsCiAJCW5vZGVpZCwgc3RhcnRfcGZuLCBlbmRfcGZuKTsKIAogCS8qIFRyeSB0byBhbGxvY2F0ZSBtZW1fbWFwIGF0IGVuZCB0byBub3QgZmlsbCB1cCBwcmVjaW91cyA8NEdCCkBAIC0xOTUsMTAgKzE5Myw2IEBACiAJCQkJcm91bmRfZG93bihsaW1pdCAtIG1lbW1hcHNpemUsIFBBR0VfU0laRSksIAogCQkJCWxpbWl0KTsKICNlbmRpZgotCi0Jc2l6ZV96b25lcyh6b25lcywgaG9sZXMsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7Ci0JZnJlZV9hcmVhX2luaXRfbm9kZShub2RlaWQsIE5PREVfREFUQShub2RlaWQpLCB6b25lcywKLQkJCSAgICBzdGFydF9wZm4sIGhvbGVzKTsKIH0gCiAKIHZvaWQgX19pbml0IG51bWFfaW5pdF9hcnJheSh2b2lkKQpAQCAtMjU5LDggKzI1MywxMSBAQAogIAkJcHJpbnRrKEtFUk5fRVJSICJObyBOVU1BIGhhc2ggZnVuY3Rpb24gZm91bmQuIEVtdWxhdGlvbiBkaXNhYmxlZC5cbiIpOwogIAkJcmV0dXJuIC0xOwogIAl9Ci0gCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCisgCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpIHsKKwkJZTgyMF9yZWdpc3Rlcl9hY3RpdmVfcmVnaW9ucyhpLCBub2Rlc1tpXS5zdGFydCA+PiBQQUdFX1NISUZULAorCQkJCQkJbm9kZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQpOwogIAkJc2V0dXBfbm9kZV9ib290bWVtKGksIG5vZGVzW2ldLnN0YXJ0LCBub2Rlc1tpXS5lbmQpOworCX0KICAJbnVtYV9pbml0X2FycmF5KCk7CiAgCXJldHVybiAwOwogfQpAQCAtMjk5LDYgKzI5Niw3IEBACiAJZm9yIChpID0gMDsgaSA8IE5SX0NQVVM7IGkrKykKIAkJbnVtYV9zZXRfbm9kZShpLCAwKTsKIAlub2RlX3RvX2NwdW1hc2tbMF0gPSBjcHVtYXNrX29mX2NwdSgwKTsKKwllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKDAsIHN0YXJ0X3BmbiwgZW5kX3Bmbik7CiAJc2V0dXBfbm9kZV9ib290bWVtKDAsIHN0YXJ0X3BmbiA8PCBQQUdFX1NISUZULCBlbmRfcGZuIDw8IFBBR0VfU0hJRlQpOwogfQogCkBAIC0zNDAsMTIgKzMzOCwxNyBAQAogdm9pZCBfX2luaXQgcGFnaW5nX2luaXQodm9pZCkKIHsgCiAJaW50IGk7CisJdW5zaWduZWQgbG9uZyBtYXhfem9uZV9wZm5zW01BWF9OUl9aT05FU10gPSB7IE1BWF9ETUFfUEZOLAorCQlNQVhfRE1BMzJfUEZOLAorCQllbmRfcGZufTsKIAogCWFyY2hfc3BhcnNlX2luaXQoKTsKIAogCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpIHsKIAkJc2V0dXBfbm9kZV96b25lcyhpKTsgCiAJfQorCisJZnJlZV9hcmVhX2luaXRfbm9kZXMobWF4X3pvbmVfcGZucyk7CiB9IAogCiBzdGF0aWMgX19pbml0IGludCBudW1hX3NldHVwKGNoYXIgKm9wdCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2XzY0L21tL3NyYXQuYyBiL2FyY2gveDg2XzY0L21tL3NyYXQuYwppbmRleCBjYTEwNzAxLi4zY2MwNTQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Nl82NC9tbS9zcmF0LmMKKysrIGIvYXJjaC94ODZfNjQvbW0vc3JhdC5jCkBAIC0yMywyMiArMjMsMTMgQEAKIAogaW50IGFjcGlfbnVtYSBfX2luaXRkYXRhOwogCi0jaWYgKGRlZmluZWQoQ09ORklHX0FDUElfSE9UUExVR19NRU1PUlkpIHx8IFwKLQlkZWZpbmVkKENPTkZJR19BQ1BJX0hPVFBMVUdfTUVNT1JZX01PRFVMRSkpIFwKLQkJJiYgIWRlZmluZWQoQ09ORklHX01FTU9SWV9IT1RQTFVHKQotI2RlZmluZSBSRVNFUlZFX0hPVEFERCAxCi0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBhY3BpX3RhYmxlX3NsaXQgKmFjcGlfc2xpdDsKIAogc3RhdGljIG5vZGVtYXNrX3Qgbm9kZXNfcGFyc2VkIF9faW5pdGRhdGE7CiBzdGF0aWMgc3RydWN0IGJvb3Rub2RlIG5vZGVzW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKLXN0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNfYWRkW01BWF9OVU1OT0RFU10gX19pbml0ZGF0YTsKK3N0YXRpYyBzdHJ1Y3QgYm9vdG5vZGUgbm9kZXNfYWRkW01BWF9OVU1OT0RFU107CiBzdGF0aWMgaW50IGZvdW5kX2FkZF9hcmVhIF9faW5pdGRhdGE7CiBpbnQgaG90YWRkX3BlcmNlbnQgX19pbml0ZGF0YSA9IDA7Ci0jaWZuZGVmIFJFU0VSVkVfSE9UQURECi0jZGVmaW5lIGhvdGFkZF9wZXJjZW50IDAJLyogSWdub3JlIGFsbCBzZXR0aW5ncyAqLwotI2VuZGlmCiAKIC8qIFRvbyBzbWFsbCBub2RlcyBjb25mdXNlIHRoZSBWTSBiYWRseS4gVXN1YWxseSB0aGV5IHJlc3VsdAogICAgZnJvbSBCSU9TIGJ1Z3MuICovCkBAIC05Myw2ICs4NCw3IEBACiAJCWFwaWNpZF90b19ub2RlW2ldID0gTlVNQV9OT19OT0RFOwogCWZvciAoaSA9IDA7IGkgPCBNQVhfTlVNTk9ERVM7IGkrKykKIAkJbm9kZXNfYWRkW2ldLnN0YXJ0ID0gbm9kZXNbaV0uZW5kID0gMDsKKwlyZW1vdmVfYWxsX2FjdGl2ZV9yYW5nZXMoKTsKIH0KIAogc3RhdGljIF9faW5pdCBpbmxpbmUgaW50IHNyYXRfZGlzYWJsZWQodm9pZCkKQEAgLTE1OSw3ICsxNTEsNyBAQAogCSAgICAgICBweG0sIHBhLT5hcGljX2lkLCBub2RlKTsKIH0KIAotI2lmZGVmIFJFU0VSVkVfSE9UQURECisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1JFU0VSVkUKIC8qCiAgKiBQcm90ZWN0IGFnYWluc3QgdG9vIGxhcmdlIGhvdGFkZCBhcmVhcyB0aGF0IHdvdWxkIGZpbGwgdXAgbWVtb3J5LgogICovCkBAIC0xNzUsNyArMTY3LDcgQEAKIAogCWlmIChtZW0gPCAwKQogCQlyZXR1cm4gMDsKLQlhbGxvd2VkID0gKGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKSkgKiBQQUdFX1NJWkU7CisJYWxsb3dlZCA9IChlbmRfcGZuIC0gYWJzZW50X3BhZ2VzX2luX3JhbmdlKDAsIGVuZF9wZm4pKSAqIFBBR0VfU0laRTsKIAlhbGxvd2VkID0gKGFsbG93ZWQgLyAxMDApICogaG90YWRkX3BlcmNlbnQ7CiAJaWYgKGFsbG9jYXRlZCArIG1lbSA+IGFsbG93ZWQpIHsKIAkJdW5zaWduZWQgbG9uZyByYW5nZTsKQEAgLTIwMiwxNSArMTk0LDM3IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyBpbnQgdXBkYXRlX2VuZF9vZl9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmQpCit7CisJZm91bmRfYWRkX2FyZWEgPSAxOworCWlmICgoZW5kID4+IFBBR0VfU0hJRlQpID4gZW5kX3BmbikKKwkJZW5kX3BmbiA9IGVuZCA+PiBQQUdFX1NISUZUOworCXJldHVybiAxOworfQorCitzdGF0aWMgaW5saW5lIGludCBzYXZlX2FkZF9pbmZvKHZvaWQpCit7CisJcmV0dXJuIGhvdGFkZF9wZXJjZW50ID4gMDsKK30KKyNlbHNlCitpbnQgdXBkYXRlX2VuZF9vZl9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmQpIHtyZXR1cm4gMDt9CitzdGF0aWMgaW50IGhvdGFkZF9lbm91Z2hfbWVtb3J5KHN0cnVjdCBib290bm9kZSAqbmQpIHtyZXR1cm4gMTt9CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRQorc3RhdGljIGlubGluZSBpbnQgc2F2ZV9hZGRfaW5mbyh2b2lkKSB7cmV0dXJuIDE7fQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNhdmVfYWRkX2luZm8odm9pZCkge3JldHVybiAwO30KKyNlbmRpZgorI2VuZGlmCiAvKgotICogSXQgaXMgZmluZSB0byBhZGQgdGhpcyBhcmVhIHRvIHRoZSBub2RlcyBkYXRhIGl0IHdpbGwgYmUgdXNlZCBsYXRlcgorICogVXBkYXRlIG5vZGVzX2FkZCBhbmQgZGVjaWRlIGlmIHRvIGluY2x1ZGUgYWRkIGFyZSBpbiB0aGUgem9uZS4KKyAqIEJvdGggU1BBUlNFIGFuZCBSRVNFUlZFIG5lZWQgbm9kZXNfYWRkIGluZm9tYXRpb24uCiAgKiBUaGlzIGNvZGUgc3VwcG9ydHMgb25lIGNvbnRpZ2lvdXMgaG90IGFkZCBhcmVhIHBlciBub2RlLgogICovCiBzdGF0aWMgaW50IHJlc2VydmVfaG90YWRkKGludCBub2RlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKIAl1bnNpZ25lZCBsb25nIHNfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKIAl1bnNpZ25lZCBsb25nIGVfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0JaW50IGNoYW5nZWQgPSAwOworCWludCByZXQgPSAwLCBjaGFuZ2VkID0gMDsKIAlzdHJ1Y3QgYm9vdG5vZGUgKm5kID0gJm5vZGVzX2FkZFtub2RlXTsKIAogCS8qIEkgaGFkIHNvbWUgdHJvdWJsZSB3aXRoIHN0cmFuZ2UgbWVtb3J5IGhvdGFkZCByZWdpb25zIGJyZWFraW5nCkBAIC0yMjUsOCArMjM5LDEwIEBACiAJfQogCiAJLyogVGhpcyBjaGVjayBtaWdodCBiZSBhIGJpdCB0b28gc3RyaWN0LCBidXQgSSdtIGtlZXBpbmcgaXQgZm9yIG5vdy4gKi8KLQlpZiAoZTgyMF9ob2xlX3NpemUoc19wZm4sIGVfcGZuKSAhPSBlX3BmbiAtIHNfcGZuKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiU1JBVDogSG90cGx1ZyBhcmVhIGhhcyBleGlzdGluZyBtZW1vcnlcbiIpOworCWlmIChhYnNlbnRfcGFnZXNfaW5fcmFuZ2Uoc19wZm4sIGVfcGZuKSAhPSBlX3BmbiAtIHNfcGZuKSB7CisJCXByaW50ayhLRVJOX0VSUgorCQkJIlNSQVQ6IEhvdHBsdWcgYXJlYSAlbHUgLT4gJWx1IGhhcyBleGlzdGluZyBtZW1vcnlcbiIsCisJCQlzX3BmbiwgZV9wZm4pOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yMzcsNyArMjUzLDYgQEAKIAogCS8qIExvb2tzIGdvb2QgKi8KIAotIAlmb3VuZF9hZGRfYXJlYSA9IDE7CiAJaWYgKG5kLT5zdGFydCA9PSBuZC0+ZW5kKSB7CiAgCQluZC0+c3RhcnQgPSBzdGFydDsKICAJCW5kLT5lbmQgPSBlbmQ7CkBAIC0yNTUsMTQgKzI3MCwxMiBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJTUkFUOiBIb3RwbHVnIHpvbmUgbm90IGNvbnRpbnVvdXMuIFBhcnRseSBpZ25vcmVkXG4iKTsKICAJfQogCi0gCWlmICgobmQtPmVuZCA+PiBQQUdFX1NISUZUKSA+IGVuZF9wZm4pCi0gCQllbmRfcGZuID0gbmQtPmVuZCA+PiBQQUdFX1NISUZUOworCXJldCA9IHVwZGF0ZV9lbmRfb2ZfbWVtb3J5KG5kLT5lbmQpOwogCiAJaWYgKGNoYW5nZWQpCiAJIAlwcmludGsoS0VSTl9JTkZPICJTUkFUOiBob3QgcGx1ZyB6b25lIGZvdW5kICVMeCAtICVMeFxuIiwgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gcmV0OwogfQotI2VuZGlmCiAKIC8qIENhbGxiYWNrIGZvciBwYXJzaW5nIG9mIHRoZSBQcm94aW1pdHkgRG9tYWluIDwtPiBNZW1vcnkgQXJlYSBtYXBwaW5ncyAqLwogdm9pZCBfX2luaXQKQEAgLTI4MSw3ICsyOTQsNyBAQAogCX0KIAlpZiAobWEtPmZsYWdzLmVuYWJsZWQgPT0gMCkKIAkJcmV0dXJuOwotIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgaG90YWRkX3BlcmNlbnQgPT0gMCkKKyAJaWYgKG1hLT5mbGFncy5ob3RfcGx1Z2dhYmxlICYmICFzYXZlX2FkZF9pbmZvKCkpCiAJCXJldHVybjsKIAlzdGFydCA9IG1hLT5iYXNlX2FkZHJfbG8gfCAoKHU2NCltYS0+YmFzZV9hZGRyX2hpIDw8IDMyKTsKIAllbmQgPSBzdGFydCArIChtYS0+bGVuZ3RoX2xvIHwgKCh1NjQpbWEtPmxlbmd0aF9oaSA8PCAzMikpOwpAQCAtMzE5LDE2ICszMzIsMTggQEAKIAogCXByaW50ayhLRVJOX0lORk8gIlNSQVQ6IE5vZGUgJXUgUFhNICV1ICVMeC0lTHhcbiIsIG5vZGUsIHB4bSwKIAkgICAgICAgbmQtPnN0YXJ0LCBuZC0+ZW5kKTsKKwllODIwX3JlZ2lzdGVyX2FjdGl2ZV9yZWdpb25zKG5vZGUsIG5kLT5zdGFydCA+PiBQQUdFX1NISUZULAorCQkJCQkJbmQtPmVuZCA+PiBQQUdFX1NISUZUKTsKKwlwdXNoX25vZGVfYm91bmRhcmllcyhub2RlLCBuZC0+c3RhcnQgPj4gUEFHRV9TSElGVCwKKwkJCQkJCW5kLT5lbmQgPj4gUEFHRV9TSElGVCk7CiAKLSNpZmRlZiBSRVNFUlZFX0hPVEFERAotIAlpZiAobWEtPmZsYWdzLmhvdF9wbHVnZ2FibGUgJiYgcmVzZXJ2ZV9ob3RhZGQobm9kZSwgc3RhcnQsIGVuZCkgPCAwKSB7CisgCWlmIChtYS0+ZmxhZ3MuaG90X3BsdWdnYWJsZSAmJiAhcmVzZXJ2ZV9ob3RhZGQobm9kZSwgc3RhcnQsIGVuZCkgPCAwKSB7CiAJCS8qIElnbm9yZSBob3RhZGQgcmVnaW9uLiBVbmRvIGRhbWFnZSAqLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgIlNSQVQ6IEhvdHBsdWcgcmVnaW9uIGlnbm9yZWRcbiIpOwogCQkqbmQgPSBvbGRub2RlOwogCQlpZiAoKG5kLT5zdGFydCB8IG5kLT5lbmQpID09IDApCiAJCQlub2RlX2NsZWFyKG5vZGUsIG5vZGVzX3BhcnNlZCk7CiAJfQotI2VuZGlmCiB9CiAKIC8qIFNhbml0eSBjaGVjayB0byBjYXRjaCBtb3JlIGJhZCBTUkFUcyAodGhleSBhcmUgYW1hemluZ2x5IGNvbW1vbikuCkBAIC0zNDMsMTMgKzM1OCwxMiBAQAogCQl1bnNpZ25lZCBsb25nIHMgPSBub2Rlc1tpXS5zdGFydCA+PiBQQUdFX1NISUZUOwogCQl1bnNpZ25lZCBsb25nIGUgPSBub2Rlc1tpXS5lbmQgPj4gUEFHRV9TSElGVDsKIAkJcHhtcmFtICs9IGUgLSBzOwotCQlweG1yYW0gLT0gZTgyMF9ob2xlX3NpemUocywgZSk7Ci0JCXB4bXJhbSAtPSBub2Rlc19hZGRbaV0uZW5kIC0gbm9kZXNfYWRkW2ldLnN0YXJ0OworCQlweG1yYW0gLT0gYWJzZW50X3BhZ2VzX2luX3JhbmdlKHMsIGUpOwogCQlpZiAoKGxvbmcpcHhtcmFtIDwgMCkKIAkJCXB4bXJhbSA9IDA7CiAJfQogCi0JZTgyMHJhbSA9IGVuZF9wZm4gLSBlODIwX2hvbGVfc2l6ZSgwLCBlbmRfcGZuKTsKKwllODIwcmFtID0gZW5kX3BmbiAtIGFic2VudF9wYWdlc19pbl9yYW5nZSgwLCBlbmRfcGZuKTsKIAkvKiBXZSBzZWVtIHRvIGxvc2UgMyBwYWdlcyBzb21ld2hlcmUuIEFsbG93IGEgYml0IG9mIHNsYWNrLiAqLwogCWlmICgobG9uZykoZTgyMHJhbSAtIHB4bXJhbSkgPj0gMSoxMDI0KjEwMjQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCkBAIC00NTIsMyArNDY2LDE2IEBACiB9CiAKIEVYUE9SVF9TWU1CT0woX19ub2RlX2Rpc3RhbmNlKTsKKworaW50IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKHU2NCBzdGFydCkKK3sKKwlpbnQgaSwgcmV0ID0gMDsKKworCWZvcl9lYWNoX25vZGUoaSkKKwkJaWYgKG5vZGVzX2FkZFtpXS5zdGFydCA8PSBzdGFydCAmJiBub2Rlc19hZGRbaV0uZW5kID4gc3RhcnQpCisJCQlyZXQgPSBpOworCisJcmV0dXJuIHJldDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKTsKKwpkaWZmIC0tZ2l0IGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYyBiL2FyY2gveHRlbnNhL2tlcm5lbC90aW1lLmMKaW5kZXggNDEyYWIzMi4uMzczNDdlMyAxMDA2NDQKLS0tIGEvYXJjaC94dGVuc2Eva2VybmVsL3RpbWUuYworKysgYi9hcmNoL3h0ZW5zYS9rZXJuZWwvdGltZS5jCkBAIC0yNiw4ICsyNiw2IEBACiAjaW5jbHVkZSA8YXNtL3BsYXRmb3JtLmg+CiAKIAotZXh0ZXJuIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgd2FsbF9qaWZmaWVzOwotCiBERUZJTkVfU1BJTkxPQ0socnRjX2xvY2spOwogRVhQT1JUX1NZTUJPTChydGNfbG9jayk7CiAKQEAgLTExMCw3ICsxMDgsNiBAQAogCSAqLwogCWNjb3VudCA9IGdldF9jY291bnQoKTsKIAluc2VjIC09IChjY291bnQgLSBsYXN0X2Njb3VudF9zdGFtcCkgKiBDQ09VTlRfTlNFQzsKLQluc2VjIC09IChqaWZmaWVzIC0gd2FsbF9qaWZmaWVzKSAqIENDT1VOVF9QRVJfSklGRlkgKiBDQ09VTlRfTlNFQzsKIAogCXd0bV9zZWMgID0gd2FsbF90b19tb25vdG9uaWMudHZfc2VjICsgKHh0aW1lLnR2X3NlYyAtIHNlYyk7CiAJd3RtX25zZWMgPSB3YWxsX3RvX21vbm90b25pYy50dl9uc2VjICsgKHh0aW1lLnR2X25zZWMgLSBuc2VjKTsKQEAgLTEyOSw3ICsxMjYsNyBAQAogdm9pZCBkb19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgbG9uZyBzZWMsIHVzZWMsIGRlbHRhLCBsb3N0LCBzZXE7CisJdW5zaWduZWQgbG9uZyBzZWMsIHVzZWMsIGRlbHRhLCBzZXE7CiAKIAlkbyB7CiAJCXNlcSA9IHJlYWRfc2VxYmVnaW5faXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwpAQCAtMTM3LDEyICsxMzQsOSBAQAogCQlkZWx0YSA9IGdldF9jY291bnQoKSAtIGxhc3RfY2NvdW50X3N0YW1wOwogCQlzZWMgPSB4dGltZS50dl9zZWM7CiAJCXVzZWMgPSAoeHRpbWUudHZfbnNlYyAvIE5TRUNfUEVSX1VTRUMpOwotCi0JCWxvc3QgPSBqaWZmaWVzIC0gd2FsbF9qaWZmaWVzOwotCiAJfSB3aGlsZSAocmVhZF9zZXFyZXRyeV9pcnFyZXN0b3JlKCZ4dGltZV9sb2NrLCBzZXEsIGZsYWdzKSk7CiAKLQl1c2VjICs9IGxvc3QgKiAoMTAwMDAwMFVML0haKSArIChkZWx0YSAqIENDT1VOVF9OU0VDKSAvIE5TRUNfUEVSX1VTRUM7CisJdXNlYyArPSAoZGVsdGEgKiBDQ09VTlRfTlNFQykgLyBOU0VDX1BFUl9VU0VDOwogCWZvciAoOyB1c2VjID49IDEwMDAwMDA7IHNlYysrLCB1c2VjIC09IDEwMDAwMDApCiAJCTsKIApAQCAtMTc1LDEyICsxNjksMTEgQEAKIAogCQlsYXN0X2Njb3VudF9zdGFtcCA9IG5leHQ7CiAJCW5leHQgKz0gQ0NPVU5UX1BFUl9KSUZGWTsKLQkJZG9fdGltZXIgKHJlZ3MpOyAvKiBMaW51eCBoYW5kbGVyIGluIGtlcm5lbC90aW1lci5jICovCisJCWRvX3RpbWVyICgxKTsgLyogTGludXggaGFuZGxlciBpbiBrZXJuZWwvdGltZXIuYyAqLwogCiAJCWlmIChudHBfc3luY2VkKCkgJiYKIAkJICAgIHh0aW1lLnR2X3NlYyAtIGxhc3RfcnRjX3VwZGF0ZSA+PSA2NTkgJiYKLQkJICAgIGFicygoeHRpbWUudHZfbnNlYy8xMDAwKS0oMTAwMDAwMC0xMDAwMDAwL0haKSk8NTAwMDAwMC9IWiAmJgotCQkgICAgamlmZmllcyAtIHdhbGxfamlmZmllcyA9PSAxKSB7CisJCSAgICBhYnMoKHh0aW1lLnR2X25zZWMvMTAwMCktKDEwMDAwMDAtMTAwMDAwMC9IWikpPDUwMDAwMDAvSFopIHsKIAogCQkJaWYgKHBsYXRmb3JtX3NldF9ydGNfdGltZSh4dGltZS50dl9zZWMrMSkgPT0gMCkKIAkJCQlsYXN0X3J0Y191cGRhdGUgPSB4dGltZS50dl9zZWMrMTsKZGlmZiAtLWdpdCBhL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMgYi9hcmNoL3h0ZW5zYS9tbS9mYXVsdC5jCmluZGV4IGE5NDVhMzMuLmRkMGRiZWMgMTAwNjQ0Ci0tLSBhL2FyY2gveHRlbnNhL21tL2ZhdWx0LmMKKysrIGIvYXJjaC94dGVuc2EvbW0vZmF1bHQuYwpAQCAtMTQ0LDcgKzE0NCw3IEBACiAJICovCiBvdXRfb2ZfbWVtb3J5OgogCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JaWYgKGN1cnJlbnQtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQoY3VycmVudCkpIHsKIAkJeWllbGQoKTsKIAkJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCQlnb3RvIHN1cnZpdmU7CmRpZmYgLS1naXQgYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jIGIvYXJjaC94dGVuc2EvcGxhdGZvcm0taXNzL25ldHdvcmsuYwppbmRleCBkOTYxNjRlLi4xNWQ2NDQxIDEwMDY0NAotLS0gYS9hcmNoL3h0ZW5zYS9wbGF0Zm9ybS1pc3MvbmV0d29yay5jCisrKyBiL2FyY2gveHRlbnNhL3BsYXRmb3JtLWlzcy9uZXR3b3JrLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkOwogCXN0cnVjdCBpbl9kZXZpY2UgKmlwID0gZGV2LT5pcF9wdHI7CiAJc3RydWN0IGluX2lmYWRkciAqaW47Ci0JdTMyIGFkZHI7CisJX19iZTMyIGFkZHI7CiAKIAlpZiAoKGlwID09IE5VTEwpIHx8ICgoaW4gPSBpcC0+aWZhX2xpc3QpID09IE5VTEwpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIkRldmljZSBub3QgYXNzaWduZWQgYW4gSVAgYWRkcmVzcyFcbiIpOwpkaWZmIC0tZ2l0IGEvYmxvY2svS2NvbmZpZyBiL2Jsb2NrL0tjb25maWcKaW5kZXggYjZmNWYwYS4uODM3NjZhNiAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZworKysgYi9ibG9jay9LY29uZmlnCkBAIC0xLDYgKzEsMjQgQEAKICMKICMgQmxvY2sgbGF5ZXIgY29yZSBjb25maWd1cmF0aW9uCiAjCitjb25maWcgQkxPQ0sKKyAgICAgICBib29sICJFbmFibGUgdGhlIGJsb2NrIGxheWVyIiBpZiBFTUJFRERFRAorICAgICAgIGRlZmF1bHQgeQorICAgICAgIGhlbHAKKwkgVGhpcyBwZXJtaXRzIHRoZSBibG9jayBsYXllciB0byBiZSByZW1vdmVkIGZyb20gdGhlIGtlcm5lbCBpZiBpdCdzIG5vdAorCSBuZWVkZWQgKG9uIHNvbWUgZW1iZWRkZWQgZGV2aWNlcyBmb3IgZXhhbXBsZSkuICBJZiB0aGlzIG9wdGlvbiBpcworCSBkaXNhYmxlZCwgdGhlbiBibG9ja2RldiBmaWxlcyB3aWxsIGJlY29tZSB1bnVzYWJsZSBhbmQgc29tZQorCSBmaWxlc3lzdGVtcyAoc3VjaCBhcyBleHQzKSB3aWxsIGJlY29tZSB1bmF2YWlsYWJsZS4KKworCSBUaGlzIG9wdGlvbiB3aWxsIGFsc28gZGlzYWJsZSBTQ1NJIGNoYXJhY3RlciBkZXZpY2VzIGFuZCBVU0Igc3RvcmFnZQorCSBzaW5jZSB0aGV5IG1ha2UgdXNlIG9mIHZhcmlvdXMgYmxvY2sgbGF5ZXIgZGVmaW5pdGlvbnMgYW5kCisJIGZhY2lsaXRpZXMuCisKKwkgU2F5IFkgaGVyZSB1bmxlc3MgeW91IGtub3cgeW91IHJlYWxseSBkb24ndCB3YW50IHRvIG1vdW50IGRpc2tzIGFuZAorCSBzdWNobGlrZS4KKworaWYgQkxPQ0sKKwogI1hYWCAtIGl0IG1ha2VzIHNlbnNlIHRvIGVuYWJsZSB0aGlzIG9ubHkgZm9yIDMyLWJpdCBzdWJhcmNoJ3MsIG5vdCBmb3IgeDg2XzY0CiAjZm9yIGluc3RhbmNlLgogY29uZmlnIExCRApAQCAtMzMsNCArNTEsNiBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBZLgogCitlbmRpZgorCiBzb3VyY2UgYmxvY2svS2NvbmZpZy5pb3NjaGVkCmRpZmYgLS1naXQgYS9ibG9jay9LY29uZmlnLmlvc2NoZWQgYi9ibG9jay9LY29uZmlnLmlvc2NoZWQKaW5kZXggNDhkMDkwZS4uOTAzZjBkMyAxMDA2NDQKLS0tIGEvYmxvY2svS2NvbmZpZy5pb3NjaGVkCisrKyBiL2Jsb2NrL0tjb25maWcuaW9zY2hlZApAQCAtMSwzICsxLDQgQEAKK2lmIEJMT0NLCiAKIG1lbnUgIklPIFNjaGVkdWxlcnMiCiAKQEAgLTY3LDMgKzY4LDUgQEAKIAlkZWZhdWx0ICJub29wIiBpZiBERUZBVUxUX05PT1AKIAogZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvYmxvY2svTWFrZWZpbGUgYi9ibG9jay9NYWtlZmlsZQppbmRleCBjMDVkZTBlLi40Yjg0ZDBkIDEwMDY0NAotLS0gYS9ibG9jay9NYWtlZmlsZQorKysgYi9ibG9jay9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBrZXJuZWwgYmxvY2sgbGF5ZXIKICMKIAotb2JqLXkJOj0gZWxldmF0b3IubyBsbF9yd19ibGsubyBpb2N0bC5vIGdlbmhkLm8gc2NzaV9pb2N0bC5vCitvYmotJChDT05GSUdfQkxPQ0spIDo9IGVsZXZhdG9yLm8gbGxfcndfYmxrLm8gaW9jdGwubyBnZW5oZC5vIHNjc2lfaW9jdGwubwogCiBvYmotJChDT05GSUdfSU9TQ0hFRF9OT09QKQkrPSBub29wLWlvc2NoZWQubwogb2JqLSQoQ09ORklHX0lPU0NIRURfQVMpCSs9IGFzLWlvc2NoZWQubwpkaWZmIC0tZ2l0IGEvYmxvY2svYXMtaW9zY2hlZC5jIGIvYmxvY2svYXMtaW9zY2hlZC5jCmluZGV4IDVkYTU2ZDQuLjUwYjk1ZTRjIDEwMDY0NAotLS0gYS9ibG9jay9hcy1pb3NjaGVkLmMKKysrIGIvYmxvY2svYXMtaW9zY2hlZC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBBbnRpY2lwYXRvcnkgJiBkZWFkbGluZSBpL28gc2NoZWR1bGVyLgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDIgSmVucyBBeGJvZSA8YXhib2VAa2VybmVsLmRrPgogICogICAgICAgICAgICAgICAgICAgICBOaWNrIFBpZ2dpbiA8bmlja3BpZ2dpbkB5YWhvby5jb20uYXU+CiAgKgogICovCkBAIC0xNCw3ICsxNCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIApAQCAtOTMsOSArOTIsOCBAQAogCXN0cnVjdCByYl9yb290IHNvcnRfbGlzdFsyXTsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm9fbGlzdFsyXTsKIAotCXN0cnVjdCBhc19ycSAqbmV4dF9hcnFbMl07CS8qIG5leHQgaW4gc29ydCBvcmRlciAqLworCXN0cnVjdCByZXF1ZXN0ICpuZXh0X3JxWzJdOwkvKiBuZXh0IGluIHNvcnQgb3JkZXIgKi8KIAlzZWN0b3JfdCBsYXN0X3NlY3RvclsyXTsJLyogbGFzdCBSRVFfU1lOQyAmIFJFUV9BU1lOQyBzZWN0b3JzICovCi0Jc3RydWN0IGhsaXN0X2hlYWQgKmhhc2g7CS8qIHJlcXVlc3QgaGFzaCAqLwogCiAJdW5zaWduZWQgbG9uZyBleGl0X3Byb2I7CS8qIHByb2JhYmlsaXR5IGEgdGFzayB3aWxsIGV4aXQgd2hpbGUKIAkJCQkJICAgYmVpbmcgd2FpdGVkIG9uICovCkBAIC0xMTUsNyArMTEzLDYgQEAKIAlpbnQgd3JpdGVfYmF0Y2hfY291bnQ7CQkvKiBtYXggIyBvZiByZXFzIGluIGEgd3JpdGUgYmF0Y2ggKi8KIAlpbnQgY3VycmVudF93cml0ZV9jb3VudDsJLyogaG93IG1hbnkgcmVxdWVzdHMgbGVmdCB0aGlzIGJhdGNoICovCiAJaW50IHdyaXRlX2JhdGNoX2lkbGVkOwkJLyogaGFzIHRoZSB3cml0ZSBiYXRjaCBnb25lIGlkbGU/ICovCi0JbWVtcG9vbF90ICphcnFfcG9vbDsKIAogCWVudW0gYW50aWNpcGF0aW9uX3N0YXR1cyBhbnRpY19zdGF0dXM7CiAJdW5zaWduZWQgbG9uZyBhbnRpY19zdGFydDsJLyogamlmZmllczogd2hlbiBpdCBzdGFydGVkICovCkBAIC0xMzMsOCArMTMwLDYgQEAKIAl1bnNpZ25lZCBsb25nIGFudGljX2V4cGlyZTsKIH07CiAKLSNkZWZpbmUgbGlzdF9lbnRyeV9maWZvKHB0cikJbGlzdF9lbnRyeSgocHRyKSwgc3RydWN0IGFzX3JxLCBmaWZvKQotCiAvKgogICogcGVyLXJlcXVlc3QgZGF0YS4KICAqLwpAQCAtMTUwLDQwICsxNDUsMTQgQEAKIAlBU19SUV9QT1NUU0NIRUQsCS8qIHdoZW4gdGhleSBzaG91bGRuJ3QgYmUgKi8KIH07CiAKLXN0cnVjdCBhc19ycSB7Ci0JLyoKLQkgKiByYnRyZWUgaW5kZXgsIGtleSBpcyB0aGUgc3RhcnRpbmcgb2Zmc2V0Ci0JICovCi0Jc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKLQlzZWN0b3JfdCByYl9rZXk7CisjZGVmaW5lIFJRX0lPQyhycSkJKChzdHJ1Y3QgaW9fY29udGV4dCAqKSAocnEpLT5lbGV2YXRvcl9wcml2YXRlKQorI2RlZmluZSBSUV9TVEFURShycSkJKChlbnVtIGFycV9zdGF0ZSkocnEpLT5lbGV2YXRvcl9wcml2YXRlMikKKyNkZWZpbmUgUlFfU0VUX1NUQVRFKHJxLCBzdGF0ZSkJKChycSktPmVsZXZhdG9yX3ByaXZhdGUyID0gKHZvaWQgKikgc3RhdGUpCiAKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxdWVzdDsKLQotCXN0cnVjdCBpb19jb250ZXh0ICppb19jb250ZXh0OwkvKiBUaGUgc3VibWl0dGluZyB0YXNrICovCi0KLQkvKgotCSAqIHJlcXVlc3QgaGFzaCwga2V5IGlzIHRoZSBlbmRpbmcgb2Zmc2V0IChmb3IgYmFjayBtZXJnZSBsb29rdXApCi0JICovCi0Jc3RydWN0IGhsaXN0X25vZGUgaGFzaDsKLQotCS8qCi0JICogZXhwaXJlIGZpZm8KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87Ci0JdW5zaWduZWQgbG9uZyBleHBpcmVzOwotCi0JdW5zaWduZWQgaW50IGlzX3N5bmM7Ci0JZW51bSBhcnFfc3RhdGUgc3RhdGU7Ci19OwotCi0jZGVmaW5lIFJRX0RBVEEocnEpCSgoc3RydWN0IGFzX3JxICopIChycSktPmVsZXZhdG9yX3ByaXZhdGUpCi0KLXN0YXRpYyBrbWVtX2NhY2hlX3QgKmFycV9wb29sOwotCi1zdGF0aWMgYXRvbWljX3QgaW9jX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaW9jX2NvdW50KTsKIHN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiAqaW9jX2dvbmU7CiAKLXN0YXRpYyB2b2lkIGFzX21vdmVfdG9fZGlzcGF0Y2goc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgYXNfcnEgKmFycSk7CitzdGF0aWMgdm9pZCBhc19tb3ZlX3RvX2Rpc3BhdGNoKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IHJlcXVlc3QgKnJxKTsKIHN0YXRpYyB2b2lkIGFzX2FudGljX3N0b3Aoc3RydWN0IGFzX2RhdGEgKmFkKTsKIAogLyoKQEAgLTE5NCw3ICsxNjMsOCBAQAogc3RhdGljIHZvaWQgZnJlZV9hc19pb19jb250ZXh0KHN0cnVjdCBhc19pb19jb250ZXh0ICphaWMpCiB7CiAJa2ZyZWUoYWljKTsKLQlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW9jX2NvdW50KSAmJiBpb2NfZ29uZSkKKwllbHZfaW9jX2NvdW50X2RlYyhpb2NfY291bnQpOworCWlmIChpb2NfZ29uZSAmJiAhZWx2X2lvY19jb3VudF9yZWFkKGlvY19jb3VudCkpCiAJCWNvbXBsZXRlKGlvY19nb25lKTsKIH0KIApAQCAtMjMwLDcgKzIwMCw3IEBACiAJCXJldC0+c2Vla190b3RhbCA9IDA7CiAJCXJldC0+c2Vla19zYW1wbGVzID0gMDsKIAkJcmV0LT5zZWVrX21lYW4gPSAwOwotCQlhdG9taWNfaW5jKCZpb2NfY291bnQpOworCQllbHZfaW9jX2NvdW50X2luYyhpb2NfY291bnQpOwogCX0KIAogCXJldHVybiByZXQ7CkBAIC0yNDAsOSArMjEwLDkgQEAKICAqIElmIHRoZSBjdXJyZW50IHRhc2sgaGFzIG5vIEFTIElPIGNvbnRleHQgdGhlbiBjcmVhdGUgb25lIGFuZCBpbml0aWFsaXNlIGl0LgogICogVGhlbiB0YWtlIGEgcmVmIG9uIHRoZSB0YXNrJ3MgaW8gY29udGV4dCBhbmQgcmV0dXJuIGl0LgogICovCi1zdGF0aWMgc3RydWN0IGlvX2NvbnRleHQgKmFzX2dldF9pb19jb250ZXh0KHZvaWQpCitzdGF0aWMgc3RydWN0IGlvX2NvbnRleHQgKmFzX2dldF9pb19jb250ZXh0KGludCBub2RlKQogewotCXN0cnVjdCBpb19jb250ZXh0ICppb2MgPSBnZXRfaW9fY29udGV4dChHRlBfQVRPTUlDKTsKKwlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jID0gZ2V0X2lvX2NvbnRleHQoR0ZQX0FUT01JQywgbm9kZSk7CiAJaWYgKGlvYyAmJiAhaW9jLT5haWMpIHsKIAkJaW9jLT5haWMgPSBhbGxvY19hc19pb19jb250ZXh0KCk7CiAJCWlmICghaW9jLT5haWMpIHsKQEAgLTI1MywxOTQgKzIyMyw0MyBAQAogCXJldHVybiBpb2M7CiB9CiAKLXN0YXRpYyB2b2lkIGFzX3B1dF9pb19jb250ZXh0KHN0cnVjdCBhc19ycSAqYXJxKQorc3RhdGljIHZvaWQgYXNfcHV0X2lvX2NvbnRleHQoc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBhc19pb19jb250ZXh0ICphaWM7CiAKLQlpZiAodW5saWtlbHkoIWFycS0+aW9fY29udGV4dCkpCisJaWYgKHVubGlrZWx5KCFSUV9JT0MocnEpKSkKIAkJcmV0dXJuOwogCi0JYWljID0gYXJxLT5pb19jb250ZXh0LT5haWM7CisJYWljID0gUlFfSU9DKHJxKS0+YWljOwogCi0JaWYgKGFycS0+aXNfc3luYyA9PSBSRVFfU1lOQyAmJiBhaWMpIHsKKwlpZiAocnFfaXNfc3luYyhycSkgJiYgYWljKSB7CiAJCXNwaW5fbG9jaygmYWljLT5sb2NrKTsKIAkJc2V0X2JpdChBU19UQVNLX0lPUlVOTklORywgJmFpYy0+c3RhdGUpOwogCQlhaWMtPmxhc3RfZW5kX3JlcXVlc3QgPSBqaWZmaWVzOwogCQlzcGluX3VubG9jaygmYWljLT5sb2NrKTsKIAl9CiAKLQlwdXRfaW9fY29udGV4dChhcnEtPmlvX2NvbnRleHQpOwotfQotCi0vKgotICogdGhlIGJhY2sgbWVyZ2UgaGFzaCBzdXBwb3J0IGZ1bmN0aW9ucwotICovCi1zdGF0aWMgY29uc3QgaW50IGFzX2hhc2hfc2hpZnQgPSA2OwotI2RlZmluZSBBU19IQVNIX0JMT0NLKHNlYykJKChzZWMpID4+IDMpCi0jZGVmaW5lIEFTX0hBU0hfRk4oc2VjKQkJKGhhc2hfbG9uZyhBU19IQVNIX0JMT0NLKChzZWMpKSwgYXNfaGFzaF9zaGlmdCkpCi0jZGVmaW5lIEFTX0hBU0hfRU5UUklFUwkJKDEgPDwgYXNfaGFzaF9zaGlmdCkKLSNkZWZpbmUgcnFfaGFzaF9rZXkocnEpCQkoKHJxKS0+c2VjdG9yICsgKHJxKS0+bnJfc2VjdG9ycykKLQotc3RhdGljIGlubGluZSB2b2lkIF9fYXNfZGVsX2FycV9oYXNoKHN0cnVjdCBhc19ycSAqYXJxKQotewotCWhsaXN0X2RlbF9pbml0KCZhcnEtPmhhc2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYXNfZGVsX2FycV9oYXNoKHN0cnVjdCBhc19ycSAqYXJxKQotewotCWlmICghaGxpc3RfdW5oYXNoZWQoJmFycS0+aGFzaCkpCi0JCV9fYXNfZGVsX2FycV9oYXNoKGFycSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFzX2FkZF9hcnFfaGFzaChzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19ycSAqYXJxKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGFycS0+cmVxdWVzdDsKLQotCUJVR19PTighaGxpc3RfdW5oYXNoZWQoJmFycS0+aGFzaCkpOwotCi0JaGxpc3RfYWRkX2hlYWQoJmFycS0+aGFzaCwgJmFkLT5oYXNoW0FTX0hBU0hfRk4ocnFfaGFzaF9rZXkocnEpKV0pOwotfQotCi0vKgotICogbW92ZSBob3QgZW50cnkgdG8gZnJvbnQgb2YgY2hhaW4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGFzX2hvdF9hcnFfaGFzaChzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19ycSAqYXJxKQotewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGFycS0+cmVxdWVzdDsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZCA9ICZhZC0+aGFzaFtBU19IQVNIX0ZOKHJxX2hhc2hfa2V5KHJxKSldOwotCi0JaWYgKGhsaXN0X3VuaGFzaGVkKCZhcnEtPmhhc2gpKSB7Ci0JCVdBUk5fT04oMSk7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoJmFycS0+aGFzaCAhPSBoZWFkLT5maXJzdCkgewotCQlobGlzdF9kZWwoJmFycS0+aGFzaCk7Ci0JCWhsaXN0X2FkZF9oZWFkKCZhcnEtPmhhc2gsIGhlYWQpOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCByZXF1ZXN0ICphc19maW5kX2FycV9oYXNoKHN0cnVjdCBhc19kYXRhICphZCwgc2VjdG9yX3Qgb2Zmc2V0KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoX2xpc3QgPSAmYWQtPmhhc2hbQVNfSEFTSF9GTihvZmZzZXQpXTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICpuZXh0OwotCXN0cnVjdCBhc19ycSAqYXJxOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShhcnEsIGVudHJ5LCBuZXh0LCBoYXNoX2xpc3QsIGhhc2gpIHsKLQkJc3RydWN0IHJlcXVlc3QgKl9fcnEgPSBhcnEtPnJlcXVlc3Q7Ci0KLQkJQlVHX09OKGhsaXN0X3VuaGFzaGVkKCZhcnEtPmhhc2gpKTsKLQotCQlpZiAoIXJxX21lcmdlYWJsZShfX3JxKSkgewotCQkJYXNfZGVsX2FycV9oYXNoKGFycSk7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCWlmIChycV9oYXNoX2tleShfX3JxKSA9PSBvZmZzZXQpCi0JCQlyZXR1cm4gX19ycTsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKKwlwdXRfaW9fY29udGV4dChSUV9JT0MocnEpKTsKIH0KIAogLyoKICAqIHJiIHRyZWUgc3VwcG9ydCBmdW5jdGlvbnMKICAqLwotI2RlZmluZSByYl9lbnRyeV9hcnEobm9kZSkJcmJfZW50cnkoKG5vZGUpLCBzdHJ1Y3QgYXNfcnEsIHJiX25vZGUpCi0jZGVmaW5lIEFSUV9SQl9ST09UKGFkLCBhcnEpCSgmKGFkKS0+c29ydF9saXN0WyhhcnEpLT5pc19zeW5jXSkKLSNkZWZpbmUgcnFfcmJfa2V5KHJxKQkJKHJxKS0+c2VjdG9yCisjZGVmaW5lIFJRX1JCX1JPT1QoYWQsIHJxKQkoJihhZCktPnNvcnRfbGlzdFtycV9pc19zeW5jKChycSkpXSkKIAotLyoKLSAqIGFzX2ZpbmRfZmlyc3RfYXJxIGZpbmRzIHRoZSBmaXJzdCAobG93ZXN0IHNlY3RvciBudW1iZXJlZCkgcmVxdWVzdAotICogZm9yIHRoZSBzcGVjaWZpZWQgZGF0YV9kaXIuIFVzZWQgdG8gc3dlZXAgYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGRpc2sKLSAqICgxLXdheSBlbGV2YXRvcikgYWZ0ZXIgd2UgcHJvY2VzcyB0aGUgbGFzdCAoaGlnaGVzdCBzZWN0b3IpIHJlcXVlc3QuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXNfcnEgKmFzX2ZpbmRfZmlyc3RfYXJxKHN0cnVjdCBhc19kYXRhICphZCwgaW50IGRhdGFfZGlyKQorc3RhdGljIHZvaWQgYXNfYWRkX3JxX3JiKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXN0cnVjdCByYl9ub2RlICpuID0gYWQtPnNvcnRfbGlzdFtkYXRhX2Rpcl0ucmJfbm9kZTsKKwlzdHJ1Y3QgcmVxdWVzdCAqYWxpYXM7CiAKLQlpZiAobiA9PSBOVUxMKQotCQlyZXR1cm4gTlVMTDsKLQotCWZvciAoOzspIHsKLQkJaWYgKG4tPnJiX2xlZnQgPT0gTlVMTCkKLQkJCXJldHVybiByYl9lbnRyeV9hcnEobik7Ci0KLQkJbiA9IG4tPnJiX2xlZnQ7Ci0JfQotfQotCi0vKgotICogQWRkIHRoZSByZXF1ZXN0IHRvIHRoZSByYiB0cmVlIGlmIGl0IGlzIHVuaXF1ZS4gIElmIHRoZXJlIGlzIGFuIGFsaWFzIChhbgotICogZXhpc3RpbmcgcmVxdWVzdCBhZ2FpbnN0IHRoZSBzYW1lIHNlY3RvciksIHdoaWNoIGNhbiBoYXBwZW4gd2hlbiB1c2luZwotICogZGlyZWN0IElPLCB0aGVuIHJldHVybiB0aGUgYWxpYXMuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgYXNfcnEgKl9fYXNfYWRkX2FycV9yYihzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19ycSAqYXJxKQotewotCXN0cnVjdCByYl9ub2RlICoqcCA9ICZBUlFfUkJfUk9PVChhZCwgYXJxKS0+cmJfbm9kZTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50ID0gTlVMTDsKLQlzdHJ1Y3QgYXNfcnEgKl9fYXJxOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGFycS0+cmVxdWVzdDsKLQotCWFycS0+cmJfa2V5ID0gcnFfcmJfa2V5KHJxKTsKLQotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJX19hcnEgPSByYl9lbnRyeV9hcnEocGFyZW50KTsKLQotCQlpZiAoYXJxLT5yYl9rZXkgPCBfX2FycS0+cmJfa2V5KQotCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlIGlmIChhcnEtPnJiX2tleSA+IF9fYXJxLT5yYl9rZXkpCi0JCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlCi0JCQlyZXR1cm4gX19hcnE7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZhcnEtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmJfaW5zZXJ0X2NvbG9yKCZhcnEtPnJiX25vZGUsIEFSUV9SQl9ST09UKGFkLCBhcnEpKTsKLQotCXJldHVybiBOVUxMOwotfQotCi1zdGF0aWMgdm9pZCBhc19hZGRfYXJxX3JiKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IGFzX3JxICphcnEpCi17Ci0Jc3RydWN0IGFzX3JxICphbGlhczsKLQotCXdoaWxlICgodW5saWtlbHkoYWxpYXMgPSBfX2FzX2FkZF9hcnFfcmIoYWQsIGFycSkpKSkgeworCXdoaWxlICgodW5saWtlbHkoYWxpYXMgPSBlbHZfcmJfYWRkKFJRX1JCX1JPT1QoYWQsIHJxKSwgcnEpKSkpIHsKIAkJYXNfbW92ZV90b19kaXNwYXRjaChhZCwgYWxpYXMpOwogCQlhc19hbnRpY19zdG9wKGFkKTsKIAl9CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBhc19kZWxfYXJxX3JiKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IGFzX3JxICphcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgYXNfZGVsX3JxX3JiKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmICghUkJfRU1QVFlfTk9ERSgmYXJxLT5yYl9ub2RlKSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JcmJfZXJhc2UoJmFycS0+cmJfbm9kZSwgQVJRX1JCX1JPT1QoYWQsIGFycSkpOwotCVJCX0NMRUFSX05PREUoJmFycS0+cmJfbm9kZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCi1hc19maW5kX2FycV9yYihzdHJ1Y3QgYXNfZGF0YSAqYWQsIHNlY3Rvcl90IHNlY3RvciwgaW50IGRhdGFfZGlyKQotewotCXN0cnVjdCByYl9ub2RlICpuID0gYWQtPnNvcnRfbGlzdFtkYXRhX2Rpcl0ucmJfbm9kZTsKLQlzdHJ1Y3QgYXNfcnEgKmFycTsKLQotCXdoaWxlIChuKSB7Ci0JCWFycSA9IHJiX2VudHJ5X2FycShuKTsKLQotCQlpZiAoc2VjdG9yIDwgYXJxLT5yYl9rZXkpCi0JCQluID0gbi0+cmJfbGVmdDsKLQkJZWxzZSBpZiAoc2VjdG9yID4gYXJxLT5yYl9rZXkpCi0JCQluID0gbi0+cmJfcmlnaHQ7Ci0JCWVsc2UKLQkJCXJldHVybiBhcnEtPnJlcXVlc3Q7Ci0JfQotCi0JcmV0dXJuIE5VTEw7CisJZWx2X3JiX2RlbChSUV9SQl9ST09UKGFkLCBycSksIHJxKTsKIH0KIAogLyoKQEAgLTQ1OCwyNiArMjc3LDI2IEBACiAgKiBhc19jaG9vc2VfcmVxIHNlbGVjdHMgdGhlIHByZWZlcnJlZCBvbmUgb2YgdHdvIHJlcXVlc3RzIG9mIHRoZSBzYW1lIGRhdGFfZGlyCiAgKiBpZ25vcmluZyB0aW1lIC0gZWcuIHRpbWVvdXRzLCB3aGljaCBpcyB0aGUgam9iIG9mIGFzX2Rpc3BhdGNoX3JlcXVlc3QKICAqLwotc3RhdGljIHN0cnVjdCBhc19ycSAqCi1hc19jaG9vc2VfcmVxKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IGFzX3JxICphcnExLCBzdHJ1Y3QgYXNfcnEgKmFycTIpCitzdGF0aWMgc3RydWN0IHJlcXVlc3QgKgorYXNfY2hvb3NlX3JlcShzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCByZXF1ZXN0ICpycTEsIHN0cnVjdCByZXF1ZXN0ICpycTIpCiB7CiAJaW50IGRhdGFfZGlyOwogCXNlY3Rvcl90IGxhc3QsIHMxLCBzMiwgZDEsIGQyOwogCWludCByMV93cmFwPTAsIHIyX3dyYXA9MDsJLyogcmVxdWVzdHMgYXJlIGJlaGluZCB0aGUgZGlzayBoZWFkICovCiAJY29uc3Qgc2VjdG9yX3QgbWF4YmFjayA9IE1BWEJBQ0s7CiAKLQlpZiAoYXJxMSA9PSBOVUxMIHx8IGFycTEgPT0gYXJxMikKLQkJcmV0dXJuIGFycTI7Ci0JaWYgKGFycTIgPT0gTlVMTCkKLQkJcmV0dXJuIGFycTE7CisJaWYgKHJxMSA9PSBOVUxMIHx8IHJxMSA9PSBycTIpCisJCXJldHVybiBycTI7CisJaWYgKHJxMiA9PSBOVUxMKQorCQlyZXR1cm4gcnExOwogCi0JZGF0YV9kaXIgPSBhcnExLT5pc19zeW5jOworCWRhdGFfZGlyID0gcnFfaXNfc3luYyhycTEpOwogCiAJbGFzdCA9IGFkLT5sYXN0X3NlY3RvcltkYXRhX2Rpcl07Ci0JczEgPSBhcnExLT5yZXF1ZXN0LT5zZWN0b3I7Ci0JczIgPSBhcnEyLT5yZXF1ZXN0LT5zZWN0b3I7CisJczEgPSBycTEtPnNlY3RvcjsKKwlzMiA9IHJxMi0+c2VjdG9yOwogCi0JQlVHX09OKGRhdGFfZGlyICE9IGFycTItPmlzX3N5bmMpOworCUJVR19PTihkYXRhX2RpciAhPSBycV9pc19zeW5jKHJxMikpOwogCiAJLyoKIAkgKiBTdHJpY3Qgb25lIHdheSBlbGV2YXRvciBfZXhjZXB0XyBpbiB0aGUgY2FzZSB3aGVyZSB3ZSBhbGxvdwpAQCAtNTA0LDYxICszMjMsNTggQEAKIAogCS8qIEZvdW5kIHJlcXVpcmVkIGRhdGEgKi8KIAlpZiAoIXIxX3dyYXAgJiYgcjJfd3JhcCkKLQkJcmV0dXJuIGFycTE7CisJCXJldHVybiBycTE7CiAJZWxzZSBpZiAoIXIyX3dyYXAgJiYgcjFfd3JhcCkKLQkJcmV0dXJuIGFycTI7CisJCXJldHVybiBycTI7CiAJZWxzZSBpZiAocjFfd3JhcCAmJiByMl93cmFwKSB7CiAJCS8qIGJvdGggYmVoaW5kIHRoZSBoZWFkICovCiAJCWlmIChzMSA8PSBzMikKLQkJCXJldHVybiBhcnExOworCQkJcmV0dXJuIHJxMTsKIAkJZWxzZQotCQkJcmV0dXJuIGFycTI7CisJCQlyZXR1cm4gcnEyOwogCX0KIAogCS8qIEJvdGggcmVxdWVzdHMgaW4gZnJvbnQgb2YgdGhlIGhlYWQgKi8KIAlpZiAoZDEgPCBkMikKLQkJcmV0dXJuIGFycTE7CisJCXJldHVybiBycTE7CiAJZWxzZSBpZiAoZDIgPCBkMSkKLQkJcmV0dXJuIGFycTI7CisJCXJldHVybiBycTI7CiAJZWxzZSB7CiAJCWlmIChzMSA+PSBzMikKLQkJCXJldHVybiBhcnExOworCQkJcmV0dXJuIHJxMTsKIAkJZWxzZQotCQkJcmV0dXJuIGFycTI7CisJCQlyZXR1cm4gcnEyOwogCX0KIH0KIAogLyoKLSAqIGFzX2ZpbmRfbmV4dF9hcnEgZmluZHMgdGhlIG5leHQgcmVxdWVzdCBhZnRlciBAcHJldiBpbiBlbGV2YXRvciBvcmRlci4KKyAqIGFzX2ZpbmRfbmV4dF9ycSBmaW5kcyB0aGUgbmV4dCByZXF1ZXN0IGFmdGVyIEBwcmV2IGluIGVsZXZhdG9yIG9yZGVyLgogICogdGhpcyB3aXRoIGFzX2Nob29zZV9yZXEgZm9ybSB0aGUgYmFzaXMgZm9yIGhvdyB0aGUgc2NoZWR1bGVyIGNob29zZXMKICAqIHdoYXQgcmVxdWVzdCB0byBwcm9jZXNzIG5leHQuIEFudGljaXBhdGlvbiB3b3JrcyBvbiB0b3Agb2YgdGhpcy4KICAqLwotc3RhdGljIHN0cnVjdCBhc19ycSAqYXNfZmluZF9uZXh0X2FycShzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19ycSAqbGFzdCkKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCithc19maW5kX25leHRfcnEoc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgcmVxdWVzdCAqbGFzdCkKIHsKLQljb25zdCBpbnQgZGF0YV9kaXIgPSBsYXN0LT5pc19zeW5jOwotCXN0cnVjdCBhc19ycSAqcmV0OwogCXN0cnVjdCByYl9ub2RlICpyYm5leHQgPSByYl9uZXh0KCZsYXN0LT5yYl9ub2RlKTsKIAlzdHJ1Y3QgcmJfbm9kZSAqcmJwcmV2ID0gcmJfcHJldigmbGFzdC0+cmJfbm9kZSk7Ci0Jc3RydWN0IGFzX3JxICphcnFfbmV4dCwgKmFycV9wcmV2OworCXN0cnVjdCByZXF1ZXN0ICpuZXh0ID0gTlVMTCwgKnByZXYgPSBOVUxMOwogCi0JQlVHX09OKCFSQl9FTVBUWV9OT0RFKCZsYXN0LT5yYl9ub2RlKSk7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJmxhc3QtPnJiX25vZGUpKTsKIAogCWlmIChyYnByZXYpCi0JCWFycV9wcmV2ID0gcmJfZW50cnlfYXJxKHJicHJldik7Ci0JZWxzZQotCQlhcnFfcHJldiA9IE5VTEw7CisJCXByZXYgPSByYl9lbnRyeV9ycShyYnByZXYpOwogCiAJaWYgKHJibmV4dCkKLQkJYXJxX25leHQgPSByYl9lbnRyeV9hcnEocmJuZXh0KTsKKwkJbmV4dCA9IHJiX2VudHJ5X3JxKHJibmV4dCk7CiAJZWxzZSB7Ci0JCWFycV9uZXh0ID0gYXNfZmluZF9maXJzdF9hcnEoYWQsIGRhdGFfZGlyKTsKLQkJaWYgKGFycV9uZXh0ID09IGxhc3QpCi0JCQlhcnFfbmV4dCA9IE5VTEw7CisJCWNvbnN0IGludCBkYXRhX2RpciA9IHJxX2lzX3N5bmMobGFzdCk7CisKKwkJcmJuZXh0ID0gcmJfZmlyc3QoJmFkLT5zb3J0X2xpc3RbZGF0YV9kaXJdKTsKKwkJaWYgKHJibmV4dCAmJiByYm5leHQgIT0gJmxhc3QtPnJiX25vZGUpCisJCQluZXh0ID0gcmJfZW50cnlfcnEocmJuZXh0KTsKIAl9CiAKLQlyZXQgPSBhc19jaG9vc2VfcmVxKGFkLAlhcnFfbmV4dCwgYXJxX3ByZXYpOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gYXNfY2hvb3NlX3JlcShhZCwgbmV4dCwgcHJldik7CiB9CiAKIC8qCkBAIC03MTIsOCArNTI4LDcgQEAKIHN0YXRpYyB2b2lkIGFzX3VwZGF0ZV9pb2hpc3Qoc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljLAogCQkJCXN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocnEpOwotCWludCBkYXRhX2RpciA9IGFycS0+aXNfc3luYzsKKwlpbnQgZGF0YV9kaXIgPSBycV9pc19zeW5jKHJxKTsKIAl1bnNpZ25lZCBsb25nIHRoaW5rdGltZSA9IDA7CiAJc2VjdG9yX3Qgc2Vla19kaXN0OwogCkBAIC03NTIsMTEgKzU2NywxMSBAQAogICogcHJldmlvdXMgb25lIGlzc3VlZC4KICAqLwogc3RhdGljIGludCBhc19jbG9zZV9yZXEoc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljLAotCQkJCXN0cnVjdCBhc19ycSAqYXJxKQorCQkJc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXVuc2lnbmVkIGxvbmcgZGVsYXk7CS8qIG1pbGxpc2Vjb25kcyAqLwogCXNlY3Rvcl90IGxhc3QgPSBhZC0+bGFzdF9zZWN0b3JbYWQtPmJhdGNoX2RhdGFfZGlyXTsKLQlzZWN0b3JfdCBuZXh0ID0gYXJxLT5yZXF1ZXN0LT5zZWN0b3I7CisJc2VjdG9yX3QgbmV4dCA9IHJxLT5zZWN0b3I7CiAJc2VjdG9yX3QgZGVsdGE7IC8qIGFjY2VwdGFibGUgY2xvc2Ugb2Zmc2V0IChpbiBzZWN0b3JzKSAqLwogCXNlY3Rvcl90IHM7CiAKQEAgLTgxMyw3ICs2MjgsNyBAQAogICoKICAqIElmIHRoaXMgdGFzayBoYXMgcXVldWVkIHNvbWUgb3RoZXIgSU8sIGRvIG5vdCBlbnRlciBlbnRpY2lwYXRpb24uCiAgKi8KLXN0YXRpYyBpbnQgYXNfY2FuX2JyZWFrX2FudGljaXBhdGlvbihzdHJ1Y3QgYXNfZGF0YSAqYWQsIHN0cnVjdCBhc19ycSAqYXJxKQorc3RhdGljIGludCBhc19jYW5fYnJlYWtfYW50aWNpcGF0aW9uKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBpb19jb250ZXh0ICppb2M7CiAJc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYzsKQEAgLTgyMSw3ICs2MzYsNyBAQAogCWlvYyA9IGFkLT5pb19jb250ZXh0OwogCUJVR19PTighaW9jKTsKIAotCWlmIChhcnEgJiYgaW9jID09IGFycS0+aW9fY29udGV4dCkgeworCWlmIChycSAmJiBpb2MgPT0gUlFfSU9DKHJxKSkgewogCQkvKiByZXF1ZXN0IGZyb20gc2FtZSBwcm9jZXNzICovCiAJCXJldHVybiAxOwogCX0KQEAgLTg0OCw3ICs2NjMsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoYXJxICYmIGFycS0+aXNfc3luYyA9PSBSRVFfU1lOQyAmJiBhc19jbG9zZV9yZXEoYWQsIGFpYywgYXJxKSkgeworCWlmIChycSAmJiBycV9pc19zeW5jKHJxKSAmJiBhc19jbG9zZV9yZXEoYWQsIGFpYywgcnEpKSB7CiAJCS8qCiAJCSAqIEZvdW5kIGEgY2xvc2UgcmVxdWVzdCB0aGF0IGlzIG5vdCBvbmUgb2Ygb3Vycy4KIAkJICoKQEAgLTg2NCw3ICs2NzksNyBAQAogCQkJYWQtPmV4aXRfbm9fY29vcCA9ICg3KmFkLT5leGl0X25vX2Nvb3ApLzg7CiAJCX0KIAotCQlhc191cGRhdGVfaW9oaXN0KGFkLCBhaWMsIGFycS0+cmVxdWVzdCk7CisJCWFzX3VwZGF0ZV9pb2hpc3QoYWQsIGFpYywgcnEpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTg5MSwxMCArNzA2LDEwIEBACiB9CiAKIC8qCi0gKiBhc19jYW5fYW50aWNpcGF0ZSBpbmRpY2F0ZXMgd2hldGhlciB3ZSBzaG91bGQgZWl0aGVyIHJ1biBhcnEKKyAqIGFzX2Nhbl9hbnRpY2lwYXRlIGluZGljYXRlcyB3aGV0aGVyIHdlIHNob3VsZCBlaXRoZXIgcnVuIHJxCiAgKiBvciBrZWVwIGFudGljaXBhdGluZyBhIGJldHRlciByZXF1ZXN0LgogICovCi1zdGF0aWMgaW50IGFzX2Nhbl9hbnRpY2lwYXRlKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IGFzX3JxICphcnEpCitzdGF0aWMgaW50IGFzX2Nhbl9hbnRpY2lwYXRlKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCWlmICghYWQtPmlvX2NvbnRleHQpCiAJCS8qCkBAIC05MDgsNyArNzIzLDcgQEAKIAkJICovCiAJCXJldHVybiAwOwogCi0JaWYgKGFzX2Nhbl9icmVha19hbnRpY2lwYXRpb24oYWQsIGFycSkpCisJaWYgKGFzX2Nhbl9icmVha19hbnRpY2lwYXRpb24oYWQsIHJxKSkKIAkJLyoKIAkJICogVGhpcyByZXF1ZXN0IGlzIGEgZ29vZCBjYW5kaWRhdGUuIERvbid0IGtlZXAgYW50aWNpcGF0aW5nLAogCQkgKiBydW4gaXQuCkBAIC05MjYsMTYgKzc0MSwxNiBAQAogfQogCiAvKgotICogYXNfdXBkYXRlX2FycSBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciBhIHJlcXVlc3QgKGFycSkgaXMgYWRkZWQgdG8KKyAqIGFzX3VwZGF0ZV9ycSBtdXN0IGJlIGNhbGxlZCB3aGVuZXZlciBhIHJlcXVlc3QgKHJxKSBpcyBhZGRlZCB0bwogICogdGhlIHNvcnRfbGlzdC4gVGhpcyBmdW5jdGlvbiBrZWVwcyBjYWNoZXMgdXAgdG8gZGF0ZSwgYW5kIGNoZWNrcyBpZiB0aGUKICAqIHJlcXVlc3QgbWlnaHQgYmUgb25lIHdlIGFyZSAiYW50aWNpcGF0aW5nIgogICovCi1zdGF0aWMgdm9pZCBhc191cGRhdGVfYXJxKHN0cnVjdCBhc19kYXRhICphZCwgc3RydWN0IGFzX3JxICphcnEpCitzdGF0aWMgdm9pZCBhc191cGRhdGVfcnEoc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JY29uc3QgaW50IGRhdGFfZGlyID0gYXJxLT5pc19zeW5jOworCWNvbnN0IGludCBkYXRhX2RpciA9IHJxX2lzX3N5bmMocnEpOwogCi0JLyoga2VlcCB0aGUgbmV4dF9hcnEgY2FjaGUgdXAgdG8gZGF0ZSAqLwotCWFkLT5uZXh0X2FycVtkYXRhX2Rpcl0gPSBhc19jaG9vc2VfcmVxKGFkLCBhcnEsIGFkLT5uZXh0X2FycVtkYXRhX2Rpcl0pOworCS8qIGtlZXAgdGhlIG5leHRfcnEgY2FjaGUgdXAgdG8gZGF0ZSAqLworCWFkLT5uZXh0X3JxW2RhdGFfZGlyXSA9IGFzX2Nob29zZV9yZXEoYWQsIHJxLCBhZC0+bmV4dF9ycVtkYXRhX2Rpcl0pOwogCiAJLyoKIAkgKiBoYXZlIHdlIGJlZW4gYW50aWNpcGF0aW5nIHRoaXMgcmVxdWVzdD8KQEAgLTk0NCw3ICs3NTksNyBAQAogCSAqLwogCWlmIChhZC0+YW50aWNfc3RhdHVzID09IEFOVElDX1dBSVRfUkVRCiAJCQl8fCBhZC0+YW50aWNfc3RhdHVzID09IEFOVElDX1dBSVRfTkVYVCkgewotCQlpZiAoYXNfY2FuX2JyZWFrX2FudGljaXBhdGlvbihhZCwgYXJxKSkKKwkJaWYgKGFzX2Nhbl9icmVha19hbnRpY2lwYXRpb24oYWQsIHJxKSkKIAkJCWFzX2FudGljX3N0b3AoYWQpOwogCX0KIH0KQEAgLTk4NCwxMiArNzk5LDExIEBACiBzdGF0aWMgdm9pZCBhc19jb21wbGV0ZWRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocnEpOwogCiAJV0FSTl9PTighbGlzdF9lbXB0eSgmcnEtPnF1ZXVlbGlzdCkpOwogCi0JaWYgKGFycS0+c3RhdGUgIT0gQVNfUlFfUkVNT1ZFRCkgewotCQlwcmludGsoImFycS0+c3RhdGUgJWRcbiIsIGFycS0+c3RhdGUpOworCWlmIChSUV9TVEFURShycSkgIT0gQVNfUlFfUkVNT1ZFRCkgeworCQlwcmludGsoInJxLT5zdGF0ZSAlZFxuIiwgUlFfU1RBVEUocnEpKTsKIAkJV0FSTl9PTigxKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtMTAwOSwxNCArODIzLDE0IEBACiAJICogYWN0dWFsbHkgc2VydmljZWQuIFRoaXMgc2hvdWxkIGhlbHAgZGV2aWNlcyB3aXRoIGJpZyBUQ1Egd2luZG93cwogCSAqIGFuZCB3cml0ZWJhY2sgY2FjaGVzCiAJICovCi0JaWYgKGFkLT5uZXdfYmF0Y2ggJiYgYWQtPmJhdGNoX2RhdGFfZGlyID09IGFycS0+aXNfc3luYykgeworCWlmIChhZC0+bmV3X2JhdGNoICYmIGFkLT5iYXRjaF9kYXRhX2RpciA9PSBycV9pc19zeW5jKHJxKSkgewogCQl1cGRhdGVfd3JpdGVfYmF0Y2goYWQpOwogCQlhZC0+Y3VycmVudF9iYXRjaF9leHBpcmVzID0gamlmZmllcyArCiAJCQkJYWQtPmJhdGNoX2V4cGlyZVtSRVFfU1lOQ107CiAJCWFkLT5uZXdfYmF0Y2ggPSAwOwogCX0KIAotCWlmIChhZC0+aW9fY29udGV4dCA9PSBhcnEtPmlvX2NvbnRleHQgJiYgYWQtPmlvX2NvbnRleHQpIHsKKwlpZiAoYWQtPmlvX2NvbnRleHQgPT0gUlFfSU9DKHJxKSAmJiBhZC0+aW9fY29udGV4dCkgewogCQlhZC0+YW50aWNfc3RhcnQgPSBqaWZmaWVzOwogCQlhZC0+aW9jX2ZpbmlzaGVkID0gMTsKIAkJaWYgKGFkLT5hbnRpY19zdGF0dXMgPT0gQU5USUNfV0FJVF9SRVEpIHsKQEAgLTEwMjgsOSArODQyLDkgQEAKIAkJfQogCX0KIAotCWFzX3B1dF9pb19jb250ZXh0KGFycSk7CisJYXNfcHV0X2lvX2NvbnRleHQocnEpOwogb3V0OgotCWFycS0+c3RhdGUgPSBBU19SUV9QT1NUU0NIRUQ7CisJUlFfU0VUX1NUQVRFKHJxLCBBU19SUV9QT1NUU0NIRUQpOwogfQogCiAvKgpAQCAtMTA0MSwyNyArODU1LDI3IEBACiAgKi8KIHN0YXRpYyB2b2lkIGFzX3JlbW92ZV9xdWV1ZWRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocnEpOwotCWNvbnN0IGludCBkYXRhX2RpciA9IGFycS0+aXNfc3luYzsKKwljb25zdCBpbnQgZGF0YV9kaXIgPSBycV9pc19zeW5jKHJxKTsKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKKwlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwogCi0JV0FSTl9PTihhcnEtPnN0YXRlICE9IEFTX1JRX1FVRVVFRCk7CisJV0FSTl9PTihSUV9TVEFURShycSkgIT0gQVNfUlFfUVVFVUVEKTsKIAotCWlmIChhcnEtPmlvX2NvbnRleHQgJiYgYXJxLT5pb19jb250ZXh0LT5haWMpIHsKLQkJQlVHX09OKCFhdG9taWNfcmVhZCgmYXJxLT5pb19jb250ZXh0LT5haWMtPm5yX3F1ZXVlZCkpOwotCQlhdG9taWNfZGVjKCZhcnEtPmlvX2NvbnRleHQtPmFpYy0+bnJfcXVldWVkKTsKKwlpb2MgPSBSUV9JT0MocnEpOworCWlmIChpb2MgJiYgaW9jLT5haWMpIHsKKwkJQlVHX09OKCFhdG9taWNfcmVhZCgmaW9jLT5haWMtPm5yX3F1ZXVlZCkpOworCQlhdG9taWNfZGVjKCZpb2MtPmFpYy0+bnJfcXVldWVkKTsKIAl9CiAKIAkvKgotCSAqIFVwZGF0ZSB0aGUgIm5leHRfYXJxIiBjYWNoZSBpZiB3ZSBhcmUgYWJvdXQgdG8gcmVtb3ZlIGl0cworCSAqIFVwZGF0ZSB0aGUgIm5leHRfcnEiIGNhY2hlIGlmIHdlIGFyZSBhYm91dCB0byByZW1vdmUgaXRzCiAJICogZW50cnkKIAkgKi8KLQlpZiAoYWQtPm5leHRfYXJxW2RhdGFfZGlyXSA9PSBhcnEpCi0JCWFkLT5uZXh0X2FycVtkYXRhX2Rpcl0gPSBhc19maW5kX25leHRfYXJxKGFkLCBhcnEpOworCWlmIChhZC0+bmV4dF9ycVtkYXRhX2Rpcl0gPT0gcnEpCisJCWFkLT5uZXh0X3JxW2RhdGFfZGlyXSA9IGFzX2ZpbmRfbmV4dF9ycShhZCwgcnEpOwogCi0JbGlzdF9kZWxfaW5pdCgmYXJxLT5maWZvKTsKLQlhc19kZWxfYXJxX2hhc2goYXJxKTsKLQlhc19kZWxfYXJxX3JiKGFkLCBhcnEpOworCXJxX2ZpZm9fY2xlYXIocnEpOworCWFzX2RlbF9ycV9yYihhZCwgcnEpOwogfQogCiAvKgpAQCAtMTA3NCw3ICs4ODgsNyBAQAogICovCiBzdGF0aWMgaW50IGFzX2ZpZm9fZXhwaXJlZChzdHJ1Y3QgYXNfZGF0YSAqYWQsIGludCBhZGlyKQogewotCXN0cnVjdCBhc19ycSAqYXJxOworCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlsb25nIGRlbHRhX2ppZjsKIAogCWRlbHRhX2ppZiA9IGppZmZpZXMgLSBhZC0+bGFzdF9jaGVja19maWZvW2FkaXJdOwpAQCAtMTA4OCw5ICs5MDIsOSBAQAogCWlmIChsaXN0X2VtcHR5KCZhZC0+Zmlmb19saXN0W2FkaXJdKSkKIAkJcmV0dXJuIDA7CiAKLQlhcnEgPSBsaXN0X2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFthZGlyXS5uZXh0KTsKKwlycSA9IHJxX2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFthZGlyXS5uZXh0KTsKIAotCXJldHVybiB0aW1lX2FmdGVyKGppZmZpZXMsIGFycS0+ZXhwaXJlcyk7CisJcmV0dXJuIHRpbWVfYWZ0ZXIoamlmZmllcywgcnFfZmlmb190aW1lKHJxKSk7CiB9CiAKIC8qCkBAIC0xMTEzLDI1ICs5MjcsMjUgQEAKIC8qCiAgKiBtb3ZlIGFuIGVudHJ5IHRvIGRpc3BhdGNoIHF1ZXVlCiAgKi8KLXN0YXRpYyB2b2lkIGFzX21vdmVfdG9fZGlzcGF0Y2goc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgYXNfcnEgKmFycSkKK3N0YXRpYyB2b2lkIGFzX21vdmVfdG9fZGlzcGF0Y2goc3RydWN0IGFzX2RhdGEgKmFkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gYXJxLT5yZXF1ZXN0OwotCWNvbnN0IGludCBkYXRhX2RpciA9IGFycS0+aXNfc3luYzsKKwljb25zdCBpbnQgZGF0YV9kaXIgPSBycV9pc19zeW5jKHJxKTsKIAotCUJVR19PTighUkJfRU1QVFlfTk9ERSgmYXJxLT5yYl9ub2RlKSk7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJnJxLT5yYl9ub2RlKSk7CiAKIAlhc19hbnRpY19zdG9wKGFkKTsKIAlhZC0+YW50aWNfc3RhdHVzID0gQU5USUNfT0ZGOwogCiAJLyoKIAkgKiBUaGlzIGhhcyB0byBiZSBzZXQgaW4gb3JkZXIgdG8gYmUgY29ycmVjdGx5IHVwZGF0ZWQgYnkKLQkgKiBhc19maW5kX25leHRfYXJxCisJICogYXNfZmluZF9uZXh0X3JxCiAJICovCiAJYWQtPmxhc3Rfc2VjdG9yW2RhdGFfZGlyXSA9IHJxLT5zZWN0b3IgKyBycS0+bnJfc2VjdG9yczsKIAogCWlmIChkYXRhX2RpciA9PSBSRVFfU1lOQykgeworCQlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jID0gUlFfSU9DKHJxKTsKIAkJLyogSW4gY2FzZSB3ZSBoYXZlIHRvIGFudGljaXBhdGUgYWZ0ZXIgdGhpcyAqLwotCQljb3B5X2lvX2NvbnRleHQoJmFkLT5pb19jb250ZXh0LCAmYXJxLT5pb19jb250ZXh0KTsKKwkJY29weV9pb19jb250ZXh0KCZhZC0+aW9fY29udGV4dCwgJmlvYyk7CiAJfSBlbHNlIHsKIAkJaWYgKGFkLT5pb19jb250ZXh0KSB7CiAJCQlwdXRfaW9fY29udGV4dChhZC0+aW9fY29udGV4dCk7CkBAIC0xMTQzLDE5ICs5NTcsMTkgQEAKIAl9CiAJYWQtPmlvY19maW5pc2hlZCA9IDA7CiAKLQlhZC0+bmV4dF9hcnFbZGF0YV9kaXJdID0gYXNfZmluZF9uZXh0X2FycShhZCwgYXJxKTsKKwlhZC0+bmV4dF9ycVtkYXRhX2Rpcl0gPSBhc19maW5kX25leHRfcnEoYWQsIHJxKTsKIAogCS8qCiAJICogdGFrZSBpdCBvZmYgdGhlIHNvcnQgYW5kIGZpZm8gbGlzdCwgYWRkIHRvIGRpc3BhdGNoIHF1ZXVlCiAJICovCiAJYXNfcmVtb3ZlX3F1ZXVlZF9yZXF1ZXN0KGFkLT5xLCBycSk7Ci0JV0FSTl9PTihhcnEtPnN0YXRlICE9IEFTX1JRX1FVRVVFRCk7CisJV0FSTl9PTihSUV9TVEFURShycSkgIT0gQVNfUlFfUVVFVUVEKTsKIAogCWVsdl9kaXNwYXRjaF9zb3J0KGFkLT5xLCBycSk7CiAKLQlhcnEtPnN0YXRlID0gQVNfUlFfRElTUEFUQ0hFRDsKLQlpZiAoYXJxLT5pb19jb250ZXh0ICYmIGFycS0+aW9fY29udGV4dC0+YWljKQotCQlhdG9taWNfaW5jKCZhcnEtPmlvX2NvbnRleHQtPmFpYy0+bnJfZGlzcGF0Y2hlZCk7CisJUlFfU0VUX1NUQVRFKHJxLCBBU19SUV9ESVNQQVRDSEVEKTsKKwlpZiAoUlFfSU9DKHJxKSAmJiBSUV9JT0MocnEpLT5haWMpCisJCWF0b21pY19pbmMoJlJRX0lPQyhycSktPmFpYy0+bnJfZGlzcGF0Y2hlZCk7CiAJYWQtPm5yX2Rpc3BhdGNoZWQrKzsKIH0KIApAQCAtMTE2Nyw5ICs5ODEsOSBAQAogc3RhdGljIGludCBhc19kaXNwYXRjaF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IGZvcmNlKQogewogCXN0cnVjdCBhc19kYXRhICphZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwotCXN0cnVjdCBhc19ycSAqYXJxOwogCWNvbnN0IGludCByZWFkcyA9ICFsaXN0X2VtcHR5KCZhZC0+Zmlmb19saXN0W1JFUV9TWU5DXSk7CiAJY29uc3QgaW50IHdyaXRlcyA9ICFsaXN0X2VtcHR5KCZhZC0+Zmlmb19saXN0W1JFUV9BU1lOQ10pOworCXN0cnVjdCByZXF1ZXN0ICpycTsKIAogCWlmICh1bmxpa2VseShmb3JjZSkpIHsKIAkJLyoKQEAgLTExODUsMTQgKzk5OSwxNCBAQAogCQlhZC0+Y2hhbmdlZF9iYXRjaCA9IDA7CiAJCWFkLT5uZXdfYmF0Y2ggPSAwOwogCi0JCXdoaWxlIChhZC0+bmV4dF9hcnFbUkVRX1NZTkNdKSB7Ci0JCQlhc19tb3ZlX3RvX2Rpc3BhdGNoKGFkLCBhZC0+bmV4dF9hcnFbUkVRX1NZTkNdKTsKKwkJd2hpbGUgKGFkLT5uZXh0X3JxW1JFUV9TWU5DXSkgeworCQkJYXNfbW92ZV90b19kaXNwYXRjaChhZCwgYWQtPm5leHRfcnFbUkVRX1NZTkNdKTsKIAkJCWRpc3BhdGNoZWQrKzsKIAkJfQogCQlhZC0+bGFzdF9jaGVja19maWZvW1JFUV9TWU5DXSA9IGppZmZpZXM7CiAKLQkJd2hpbGUgKGFkLT5uZXh0X2FycVtSRVFfQVNZTkNdKSB7Ci0JCQlhc19tb3ZlX3RvX2Rpc3BhdGNoKGFkLCBhZC0+bmV4dF9hcnFbUkVRX0FTWU5DXSk7CisJCXdoaWxlIChhZC0+bmV4dF9ycVtSRVFfQVNZTkNdKSB7CisJCQlhc19tb3ZlX3RvX2Rpc3BhdGNoKGFkLCBhZC0+bmV4dF9ycVtSRVFfQVNZTkNdKTsKIAkJCWRpc3BhdGNoZWQrKzsKIAkJfQogCQlhZC0+bGFzdF9jaGVja19maWZvW1JFUV9BU1lOQ10gPSBqaWZmaWVzOwpAQCAtMTIxNiwxOSArMTAzMCwxOSBAQAogCQkvKgogCQkgKiBiYXRjaCBpcyBzdGlsbCBydW5uaW5nIG9yIG5vIHJlYWRzIG9yIG5vIHdyaXRlcwogCQkgKi8KLQkJYXJxID0gYWQtPm5leHRfYXJxW2FkLT5iYXRjaF9kYXRhX2Rpcl07CisJCXJxID0gYWQtPm5leHRfcnFbYWQtPmJhdGNoX2RhdGFfZGlyXTsKIAogCQlpZiAoYWQtPmJhdGNoX2RhdGFfZGlyID09IFJFUV9TWU5DICYmIGFkLT5hbnRpY19leHBpcmUpIHsKIAkJCWlmIChhc19maWZvX2V4cGlyZWQoYWQsIFJFUV9TWU5DKSkKIAkJCQlnb3RvIGZpZm9fZXhwaXJlZDsKIAotCQkJaWYgKGFzX2Nhbl9hbnRpY2lwYXRlKGFkLCBhcnEpKSB7CisJCQlpZiAoYXNfY2FuX2FudGljaXBhdGUoYWQsIHJxKSkgewogCQkJCWFzX2FudGljX3dhaXRyZXEoYWQpOwogCQkJCXJldHVybiAwOwogCQkJfQogCQl9CiAKLQkJaWYgKGFycSkgeworCQlpZiAocnEpIHsKIAkJCS8qIHdlIGhhdmUgYSAibmV4dCByZXF1ZXN0IiAqLwogCQkJaWYgKHJlYWRzICYmICF3cml0ZXMpCiAJCQkJYWQtPmN1cnJlbnRfYmF0Y2hfZXhwaXJlcyA9CkBAIC0xMjU2LDcgKzEwNzAsNyBAQAogCQkJYWQtPmNoYW5nZWRfYmF0Y2ggPSAxOwogCQl9CiAJCWFkLT5iYXRjaF9kYXRhX2RpciA9IFJFUV9TWU5DOwotCQlhcnEgPSBsaXN0X2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFthZC0+YmF0Y2hfZGF0YV9kaXJdLm5leHQpOworCQlycSA9IHJxX2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFtSRVFfU1lOQ10ubmV4dCk7CiAJCWFkLT5sYXN0X2NoZWNrX2ZpZm9bYWQtPmJhdGNoX2RhdGFfZGlyXSA9IGppZmZpZXM7CiAJCWdvdG8gZGlzcGF0Y2hfcmVxdWVzdDsKIAl9CkBAIC0xMjgyLDcgKzEwOTYsNyBAQAogCQlhZC0+YmF0Y2hfZGF0YV9kaXIgPSBSRVFfQVNZTkM7CiAJCWFkLT5jdXJyZW50X3dyaXRlX2NvdW50ID0gYWQtPndyaXRlX2JhdGNoX2NvdW50OwogCQlhZC0+d3JpdGVfYmF0Y2hfaWRsZWQgPSAwOwotCQlhcnEgPSBhZC0+bmV4dF9hcnFbYWQtPmJhdGNoX2RhdGFfZGlyXTsKKwkJcnEgPSBhZC0+bmV4dF9ycVthZC0+YmF0Y2hfZGF0YV9kaXJdOwogCQlnb3RvIGRpc3BhdGNoX3JlcXVlc3Q7CiAJfQogCkBAIC0xMjk2LDggKzExMTAsNyBAQAogCiAJaWYgKGFzX2ZpZm9fZXhwaXJlZChhZCwgYWQtPmJhdGNoX2RhdGFfZGlyKSkgewogZmlmb19leHBpcmVkOgotCQlhcnEgPSBsaXN0X2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFthZC0+YmF0Y2hfZGF0YV9kaXJdLm5leHQpOwotCQlCVUdfT04oYXJxID09IE5VTEwpOworCQlycSA9IHJxX2VudHJ5X2ZpZm8oYWQtPmZpZm9fbGlzdFthZC0+YmF0Y2hfZGF0YV9kaXJdLm5leHQpOwogCX0KIAogCWlmIChhZC0+Y2hhbmdlZF9iYXRjaCkgewpAQCAtMTMxNiw3MCArMTEyOSw1OCBAQAogCX0KIAogCS8qCi0JICogYXJxIGlzIHRoZSBzZWxlY3RlZCBhcHByb3ByaWF0ZSByZXF1ZXN0LgorCSAqIHJxIGlzIHRoZSBzZWxlY3RlZCBhcHByb3ByaWF0ZSByZXF1ZXN0LgogCSAqLwotCWFzX21vdmVfdG9fZGlzcGF0Y2goYWQsIGFycSk7CisJYXNfbW92ZV90b19kaXNwYXRjaChhZCwgcnEpOwogCiAJcmV0dXJuIDE7CiB9CiAKIC8qCi0gKiBhZGQgYXJxIHRvIHJidHJlZSBhbmQgZmlmbworICogYWRkIHJxIHRvIHJidHJlZSBhbmQgZmlmbwogICovCiBzdGF0aWMgdm9pZCBhc19hZGRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocnEpOwogCWludCBkYXRhX2RpcjsKIAotCWFycS0+c3RhdGUgPSBBU19SUV9ORVc7CisJUlFfU0VUX1NUQVRFKHJxLCBBU19SUV9ORVcpOwogCi0JaWYgKHJxX2RhdGFfZGlyKGFycS0+cmVxdWVzdCkgPT0gUkVBRAotCQkJfHwgKGFycS0+cmVxdWVzdC0+ZmxhZ3MgJiBSRVFfUldfU1lOQykpCi0JCWFycS0+aXNfc3luYyA9IDE7Ci0JZWxzZQotCQlhcnEtPmlzX3N5bmMgPSAwOwotCWRhdGFfZGlyID0gYXJxLT5pc19zeW5jOworCWRhdGFfZGlyID0gcnFfaXNfc3luYyhycSk7CiAKLQlhcnEtPmlvX2NvbnRleHQgPSBhc19nZXRfaW9fY29udGV4dCgpOworCXJxLT5lbGV2YXRvcl9wcml2YXRlID0gYXNfZ2V0X2lvX2NvbnRleHQocS0+bm9kZSk7CiAKLQlpZiAoYXJxLT5pb19jb250ZXh0KSB7Ci0JCWFzX3VwZGF0ZV9pb2hpc3QoYWQsIGFycS0+aW9fY29udGV4dC0+YWljLCBhcnEtPnJlcXVlc3QpOwotCQlhdG9taWNfaW5jKCZhcnEtPmlvX2NvbnRleHQtPmFpYy0+bnJfcXVldWVkKTsKKwlpZiAoUlFfSU9DKHJxKSkgeworCQlhc191cGRhdGVfaW9oaXN0KGFkLCBSUV9JT0MocnEpLT5haWMsIHJxKTsKKwkJYXRvbWljX2luYygmUlFfSU9DKHJxKS0+YWljLT5ucl9xdWV1ZWQpOwogCX0KIAotCWFzX2FkZF9hcnFfcmIoYWQsIGFycSk7Ci0JaWYgKHJxX21lcmdlYWJsZShhcnEtPnJlcXVlc3QpKQotCQlhc19hZGRfYXJxX2hhc2goYWQsIGFycSk7CisJYXNfYWRkX3JxX3JiKGFkLCBycSk7CiAKIAkvKgogCSAqIHNldCBleHBpcmUgdGltZSAob25seSB1c2VkIGZvciByZWFkcykgYW5kIGFkZCB0byBmaWZvIGxpc3QKIAkgKi8KLQlhcnEtPmV4cGlyZXMgPSBqaWZmaWVzICsgYWQtPmZpZm9fZXhwaXJlW2RhdGFfZGlyXTsKLQlsaXN0X2FkZF90YWlsKCZhcnEtPmZpZm8sICZhZC0+Zmlmb19saXN0W2RhdGFfZGlyXSk7CisJcnFfc2V0X2ZpZm9fdGltZShycSwgamlmZmllcyArIGFkLT5maWZvX2V4cGlyZVtkYXRhX2Rpcl0pOworCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZhZC0+Zmlmb19saXN0W2RhdGFfZGlyXSk7CiAKLQlhc191cGRhdGVfYXJxKGFkLCBhcnEpOyAvKiBrZWVwIHN0YXRlIG1hY2hpbmUgdXAgdG8gZGF0ZSAqLwotCWFycS0+c3RhdGUgPSBBU19SUV9RVUVVRUQ7CisJYXNfdXBkYXRlX3JxKGFkLCBycSk7IC8qIGtlZXAgc3RhdGUgbWFjaGluZSB1cCB0byBkYXRlICovCisJUlFfU0VUX1NUQVRFKHJxLCBBU19SUV9RVUVVRUQpOwogfQogCiBzdGF0aWMgdm9pZCBhc19hY3RpdmF0ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXN0cnVjdCBhc19ycSAqYXJxID0gUlFfREFUQShycSk7Ci0KLQlXQVJOX09OKGFycS0+c3RhdGUgIT0gQVNfUlFfRElTUEFUQ0hFRCk7Ci0JYXJxLT5zdGF0ZSA9IEFTX1JRX1JFTU9WRUQ7Ci0JaWYgKGFycS0+aW9fY29udGV4dCAmJiBhcnEtPmlvX2NvbnRleHQtPmFpYykKLQkJYXRvbWljX2RlYygmYXJxLT5pb19jb250ZXh0LT5haWMtPm5yX2Rpc3BhdGNoZWQpOworCVdBUk5fT04oUlFfU1RBVEUocnEpICE9IEFTX1JRX0RJU1BBVENIRUQpOworCVJRX1NFVF9TVEFURShycSwgQVNfUlFfUkVNT1ZFRCk7CisJaWYgKFJRX0lPQyhycSkgJiYgUlFfSU9DKHJxKS0+YWljKQorCQlhdG9taWNfZGVjKCZSUV9JT0MocnEpLT5haWMtPm5yX2Rpc3BhdGNoZWQpOwogfQogCiBzdGF0aWMgdm9pZCBhc19kZWFjdGl2YXRlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGFzX3JxICphcnEgPSBSUV9EQVRBKHJxKTsKLQotCVdBUk5fT04oYXJxLT5zdGF0ZSAhPSBBU19SUV9SRU1PVkVEKTsKLQlhcnEtPnN0YXRlID0gQVNfUlFfRElTUEFUQ0hFRDsKLQlpZiAoYXJxLT5pb19jb250ZXh0ICYmIGFycS0+aW9fY29udGV4dC0+YWljKQotCQlhdG9taWNfaW5jKCZhcnEtPmlvX2NvbnRleHQtPmFpYy0+bnJfZGlzcGF0Y2hlZCk7CisJV0FSTl9PTihSUV9TVEFURShycSkgIT0gQVNfUlFfUkVNT1ZFRCk7CisJUlFfU0VUX1NUQVRFKHJxLCBBU19SUV9ESVNQQVRDSEVEKTsKKwlpZiAoUlFfSU9DKHJxKSAmJiBSUV9JT0MocnEpLT5haWMpCisJCWF0b21pY19pbmMoJlJRX0lPQyhycSktPmFpYy0+bnJfZGlzcGF0Y2hlZCk7CiB9CiAKIC8qCkBAIC0xMzk2LDkzICsxMTk3LDM1IEBACiAJCSYmIGxpc3RfZW1wdHkoJmFkLT5maWZvX2xpc3RbUkVRX1NZTkNdKTsKIH0KIAotc3RhdGljIHN0cnVjdCByZXF1ZXN0ICphc19mb3JtZXJfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsCi0JCQkJCXN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocnEpOwotCXN0cnVjdCByYl9ub2RlICpyYnByZXYgPSByYl9wcmV2KCZhcnEtPnJiX25vZGUpOwotCXN0cnVjdCByZXF1ZXN0ICpyZXQgPSBOVUxMOwotCi0JaWYgKHJicHJldikKLQkJcmV0ID0gcmJfZW50cnlfYXJxKHJicHJldiktPnJlcXVlc3Q7Ci0KLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHJlcXVlc3QgKmFzX2xhdHRlcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwKLQkJCQkJc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXN0cnVjdCBhc19ycSAqYXJxID0gUlFfREFUQShycSk7Ci0Jc3RydWN0IHJiX25vZGUgKnJibmV4dCA9IHJiX25leHQoJmFycS0+cmJfbm9kZSk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJldCA9IE5VTEw7Ci0KLQlpZiAocmJuZXh0KQotCQlyZXQgPSByYl9lbnRyeV9hcnEocmJuZXh0KS0+cmVxdWVzdDsKLQotCXJldHVybiByZXQ7Ci19Ci0KIHN0YXRpYyBpbnQKIGFzX21lcmdlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKipyZXEsIHN0cnVjdCBiaW8gKmJpbykKIHsKIAlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAlzZWN0b3JfdCByYl9rZXkgPSBiaW8tPmJpX3NlY3RvciArIGJpb19zZWN0b3JzKGJpbyk7CiAJc3RydWN0IHJlcXVlc3QgKl9fcnE7Ci0JaW50IHJldDsKLQotCS8qCi0JICogc2VlIGlmIHRoZSBtZXJnZSBoYXNoIGNhbiBzYXRpc2Z5IGEgYmFjayBtZXJnZQotCSAqLwotCV9fcnEgPSBhc19maW5kX2FycV9oYXNoKGFkLCBiaW8tPmJpX3NlY3Rvcik7Ci0JaWYgKF9fcnEpIHsKLQkJQlVHX09OKF9fcnEtPnNlY3RvciArIF9fcnEtPm5yX3NlY3RvcnMgIT0gYmlvLT5iaV9zZWN0b3IpOwotCi0JCWlmIChlbHZfcnFfbWVyZ2Vfb2soX19ycSwgYmlvKSkgewotCQkJcmV0ID0gRUxFVkFUT1JfQkFDS19NRVJHRTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfQogCiAJLyoKIAkgKiBjaGVjayBmb3IgZnJvbnQgbWVyZ2UKIAkgKi8KLQlfX3JxID0gYXNfZmluZF9hcnFfcmIoYWQsIHJiX2tleSwgYmlvX2RhdGFfZGlyKGJpbykpOwotCWlmIChfX3JxKSB7Ci0JCUJVR19PTihyYl9rZXkgIT0gcnFfcmJfa2V5KF9fcnEpKTsKLQotCQlpZiAoZWx2X3JxX21lcmdlX29rKF9fcnEsIGJpbykpIHsKLQkJCXJldCA9IEVMRVZBVE9SX0ZST05UX01FUkdFOwotCQkJZ290byBvdXQ7Ci0JCX0KKwlfX3JxID0gZWx2X3JiX2ZpbmQoJmFkLT5zb3J0X2xpc3RbYmlvX2RhdGFfZGlyKGJpbyldLCByYl9rZXkpOworCWlmIChfX3JxICYmIGVsdl9ycV9tZXJnZV9vayhfX3JxLCBiaW8pKSB7CisJCSpyZXEgPSBfX3JxOworCQlyZXR1cm4gRUxFVkFUT1JfRlJPTlRfTUVSR0U7CiAJfQogCiAJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwotb3V0OgotCWlmIChyZXQpIHsKLQkJaWYgKHJxX21lcmdlYWJsZShfX3JxKSkKLQkJCWFzX2hvdF9hcnFfaGFzaChhZCwgUlFfREFUQShfX3JxKSk7Ci0JfQotCSpyZXEgPSBfX3JxOwotCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGFzX21lcmdlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGFzX21lcmdlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGFzX2RhdGEgKmFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGFzX3JxICphcnEgPSBSUV9EQVRBKHJlcSk7Ci0KLQkvKgotCSAqIGhhc2ggYWx3YXlzIG5lZWRzIHRvIGJlIHJlcG9zaXRpb25lZCwga2V5IGlzIGVuZCBzZWN0b3IKLQkgKi8KLQlhc19kZWxfYXJxX2hhc2goYXJxKTsKLQlhc19hZGRfYXJxX2hhc2goYWQsIGFycSk7CiAKIAkvKgogCSAqIGlmIHRoZSBtZXJnZSB3YXMgYSBmcm9udCBtZXJnZSwgd2UgbmVlZCB0byByZXBvc2l0aW9uIHJlcXVlc3QKIAkgKi8KLQlpZiAocnFfcmJfa2V5KHJlcSkgIT0gYXJxLT5yYl9rZXkpIHsKLQkJYXNfZGVsX2FycV9yYihhZCwgYXJxKTsKLQkJYXNfYWRkX2FycV9yYihhZCwgYXJxKTsKKwlpZiAodHlwZSA9PSBFTEVWQVRPUl9GUk9OVF9NRVJHRSkgeworCQlhc19kZWxfcnFfcmIoYWQsIHJlcSk7CisJCWFzX2FkZF9ycV9yYihhZCwgcmVxKTsKIAkJLyoKIAkJICogTm90ZSEgQXQgdGhpcyBzdGFnZSBvZiB0aGlzIGFuZCB0aGUgbmV4dCBmdW5jdGlvbiwgb3VyIG5leHQKIAkJICogcmVxdWVzdCBtYXkgbm90IGJlIG9wdGltYWwgLSBlZyB0aGUgcmVxdWVzdCBtYXkgaGF2ZSAiZ3Jvd24iCkBAIC0xNDk0LDM4ICsxMjM3LDIyIEBACiBzdGF0aWMgdm9pZCBhc19tZXJnZWRfcmVxdWVzdHMocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAogCQkJIAlzdHJ1Y3QgcmVxdWVzdCAqbmV4dCkKIHsKLQlzdHJ1Y3QgYXNfZGF0YSAqYWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgYXNfcnEgKmFycSA9IFJRX0RBVEEocmVxKTsKLQlzdHJ1Y3QgYXNfcnEgKmFuZXh0ID0gUlFfREFUQShuZXh0KTsKLQotCUJVR19PTighYXJxKTsKLQlCVUdfT04oIWFuZXh0KTsKLQogCS8qCi0JICogcmVwb3NpdGlvbiBhcnEgKHRoaXMgaXMgdGhlIG1lcmdlZCByZXF1ZXN0KSBpbiBoYXNoLCBhbmQgaW4gcmJ0cmVlCi0JICogaW4gY2FzZSBvZiBhIGZyb250IG1lcmdlCisJICogaWYgbmV4dCBleHBpcmVzIGJlZm9yZSBycSwgYXNzaWduIGl0cyBleHBpcmUgdGltZSB0byBhcnEKKwkgKiBhbmQgbW92ZSBpbnRvIG5leHQgcG9zaXRpb24gKG5leHQgd2lsbCBiZSBkZWxldGVkKSBpbiBmaWZvCiAJICovCi0JYXNfZGVsX2FycV9oYXNoKGFycSk7Ci0JYXNfYWRkX2FycV9oYXNoKGFkLCBhcnEpOworCWlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZWxpc3QpICYmICFsaXN0X2VtcHR5KCZuZXh0LT5xdWV1ZWxpc3QpKSB7CisJCWlmICh0aW1lX2JlZm9yZShycV9maWZvX3RpbWUobmV4dCksIHJxX2ZpZm9fdGltZShyZXEpKSkgeworCQkJc3RydWN0IGlvX2NvbnRleHQgKnJpb2MgPSBSUV9JT0MocmVxKTsKKwkJCXN0cnVjdCBpb19jb250ZXh0ICpuaW9jID0gUlFfSU9DKG5leHQpOwogCi0JaWYgKHJxX3JiX2tleShyZXEpICE9IGFycS0+cmJfa2V5KSB7Ci0JCWFzX2RlbF9hcnFfcmIoYWQsIGFycSk7Ci0JCWFzX2FkZF9hcnFfcmIoYWQsIGFycSk7Ci0JfQotCi0JLyoKLQkgKiBpZiBhbmV4dCBleHBpcmVzIGJlZm9yZSBhcnEsIGFzc2lnbiBpdHMgZXhwaXJlIHRpbWUgdG8gYXJxCi0JICogYW5kIG1vdmUgaW50byBhbmV4dCBwb3NpdGlvbiAoYW5leHQgd2lsbCBiZSBkZWxldGVkKSBpbiBmaWZvCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZhcnEtPmZpZm8pICYmICFsaXN0X2VtcHR5KCZhbmV4dC0+ZmlmbykpIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGFuZXh0LT5leHBpcmVzLCBhcnEtPmV4cGlyZXMpKSB7Ci0JCQlsaXN0X21vdmUoJmFycS0+ZmlmbywgJmFuZXh0LT5maWZvKTsKLQkJCWFycS0+ZXhwaXJlcyA9IGFuZXh0LT5leHBpcmVzOworCQkJbGlzdF9tb3ZlKCZyZXEtPnF1ZXVlbGlzdCwgJm5leHQtPnF1ZXVlbGlzdCk7CisJCQlycV9zZXRfZmlmb190aW1lKHJlcSwgcnFfZmlmb190aW1lKG5leHQpKTsKIAkJCS8qCiAJCQkgKiBEb24ndCBjb3B5IGhlcmUgYnV0IHN3YXAsIGJlY2F1c2Ugd2hlbiBhbmV4dCBpcwogCQkJICogcmVtb3ZlZCBiZWxvdywgaXQgbXVzdCBjb250YWluIHRoZSB1bnVzZWQgY29udGV4dAogCQkJICovCi0JCQlzd2FwX2lvX2NvbnRleHQoJmFycS0+aW9fY29udGV4dCwgJmFuZXh0LT5pb19jb250ZXh0KTsKKwkJCXN3YXBfaW9fY29udGV4dCgmcmlvYywgJm5pb2MpOwogCQl9CiAJfQogCkBAIC0xNTMzLDkgKzEyNjAsOSBAQAogCSAqIGtpbGwga25vd2xlZGdlIG9mIG5leHQsIHRoaXMgb25lIGlzIGEgZ29uZXIKIAkgKi8KIAlhc19yZW1vdmVfcXVldWVkX3JlcXVlc3QocSwgbmV4dCk7Ci0JYXNfcHV0X2lvX2NvbnRleHQoYW5leHQpOworCWFzX3B1dF9pb19jb250ZXh0KG5leHQpOwogCi0JYW5leHQtPnN0YXRlID0gQVNfUlFfTUVSR0VEOworCVJRX1NFVF9TVEFURShuZXh0LCBBU19SUV9NRVJHRUQpOwogfQogCiAvKgpAQCAtMTU1Myw2MSArMTI4MCwxOCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7Ci0JaWYgKCFhc19xdWV1ZV9lbXB0eShxKSkKLQkJcS0+cmVxdWVzdF9mbihxKTsKKwlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyB2b2lkIGFzX3B1dF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCXN0cnVjdCBhc19kYXRhICphZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwotCXN0cnVjdCBhc19ycSAqYXJxID0gUlFfREFUQShycSk7Ci0KLQlpZiAoIWFycSkgewotCQlXQVJOX09OKDEpOwotCQlyZXR1cm47Ci0JfQotCi0JaWYgKHVubGlrZWx5KGFycS0+c3RhdGUgIT0gQVNfUlFfUE9TVFNDSEVEICYmCi0JCSAgICAgYXJxLT5zdGF0ZSAhPSBBU19SUV9QUkVTQ0hFRCAmJgotCQkgICAgIGFycS0+c3RhdGUgIT0gQVNfUlFfTUVSR0VEKSkgewotCQlwcmludGsoImFycS0+c3RhdGUgJWRcbiIsIGFycS0+c3RhdGUpOwotCQlXQVJOX09OKDEpOwotCX0KLQotCW1lbXBvb2xfZnJlZShhcnEsIGFkLT5hcnFfcG9vbCk7Ci0JcnEtPmVsZXZhdG9yX3ByaXZhdGUgPSBOVUxMOwotfQotCi1zdGF0aWMgaW50IGFzX3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICBzdHJ1Y3QgYmlvICpiaW8sIGdmcF90IGdmcF9tYXNrKQotewotCXN0cnVjdCBhc19kYXRhICphZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwotCXN0cnVjdCBhc19ycSAqYXJxID0gbWVtcG9vbF9hbGxvYyhhZC0+YXJxX3Bvb2wsIGdmcF9tYXNrKTsKLQotCWlmIChhcnEpIHsKLQkJbWVtc2V0KGFycSwgMCwgc2l6ZW9mKCphcnEpKTsKLQkJUkJfQ0xFQVJfTk9ERSgmYXJxLT5yYl9ub2RlKTsKLQkJYXJxLT5yZXF1ZXN0ID0gcnE7Ci0JCWFycS0+c3RhdGUgPSBBU19SUV9QUkVTQ0hFRDsKLQkJYXJxLT5pb19jb250ZXh0ID0gTlVMTDsKLQkJSU5JVF9ITElTVF9OT0RFKCZhcnEtPmhhc2gpOwotCQlJTklUX0xJU1RfSEVBRCgmYXJxLT5maWZvKTsKLQkJcnEtPmVsZXZhdG9yX3ByaXZhdGUgPSBhcnE7Ci0JCXJldHVybiAwOwotCX0KLQotCXJldHVybiAxOwotfQotCi1zdGF0aWMgaW50IGFzX21heV9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGludCBydywgc3RydWN0IGJpbyAqYmlvKQorc3RhdGljIGludCBhc19tYXlfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgcncpCiB7CiAJaW50IHJldCA9IEVMVl9NUVVFVUVfTUFZOwogCXN0cnVjdCBhc19kYXRhICphZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCBpb19jb250ZXh0ICppb2M7CiAJaWYgKGFkLT5hbnRpY19zdGF0dXMgPT0gQU5USUNfV0FJVF9SRVEgfHwKIAkJCWFkLT5hbnRpY19zdGF0dXMgPT0gQU5USUNfV0FJVF9ORVhUKSB7Ci0JCWlvYyA9IGFzX2dldF9pb19jb250ZXh0KCk7CisJCWlvYyA9IGFzX2dldF9pb19jb250ZXh0KHEtPm5vZGUpOwogCQlpZiAoYWQtPmlvX2NvbnRleHQgPT0gaW9jKQogCQkJcmV0ID0gRUxWX01RVUVVRV9NVVNUOwogCQlwdXRfaW9fY29udGV4dChpb2MpOwpAQCAtMTYyNiwyMyArMTMxMCwxNiBAQAogCUJVR19PTighbGlzdF9lbXB0eSgmYWQtPmZpZm9fbGlzdFtSRVFfU1lOQ10pKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmFkLT5maWZvX2xpc3RbUkVRX0FTWU5DXSkpOwogCi0JbWVtcG9vbF9kZXN0cm95KGFkLT5hcnFfcG9vbCk7CiAJcHV0X2lvX2NvbnRleHQoYWQtPmlvX2NvbnRleHQpOwotCWtmcmVlKGFkLT5oYXNoKTsKIAlrZnJlZShhZCk7CiB9CiAKIC8qCi0gKiBpbml0aWFsaXplIGVsZXZhdG9yIHByaXZhdGUgZGF0YSAoYXNfZGF0YSksIGFuZCBhbGxvYyBhIGFycSBmb3IKLSAqIGVhY2ggcmVxdWVzdCBvbiB0aGUgZnJlZSBsaXN0cworICogaW5pdGlhbGl6ZSBlbGV2YXRvciBwcml2YXRlIGRhdGEgKGFzX2RhdGEpLgogICovCiBzdGF0aWMgdm9pZCAqYXNfaW5pdF9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIGVsZXZhdG9yX3QgKmUpCiB7CiAJc3RydWN0IGFzX2RhdGEgKmFkOwotCWludCBpOwotCi0JaWYgKCFhcnFfcG9vbCkKLQkJcmV0dXJuIE5VTEw7CiAKIAlhZCA9IGttYWxsb2Nfbm9kZShzaXplb2YoKmFkKSwgR0ZQX0tFUk5FTCwgcS0+bm9kZSk7CiAJaWYgKCFhZCkKQEAgLTE2NTEsMzAgKzEzMjgsMTIgQEAKIAogCWFkLT5xID0gcTsgLyogSWRlbnRpZnkgd2hhdCBxdWV1ZSB0aGUgZGF0YSBiZWxvbmdzIHRvICovCiAKLQlhZC0+aGFzaCA9IGttYWxsb2Nfbm9kZShzaXplb2Yoc3RydWN0IGhsaXN0X2hlYWQpKkFTX0hBU0hfRU5UUklFUywKLQkJCQlHRlBfS0VSTkVMLCBxLT5ub2RlKTsKLQlpZiAoIWFkLT5oYXNoKSB7Ci0JCWtmcmVlKGFkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JYWQtPmFycV9wb29sID0gbWVtcG9vbF9jcmVhdGVfbm9kZShCTEtERVZfTUlOX1JRLCBtZW1wb29sX2FsbG9jX3NsYWIsCi0JCQkJbWVtcG9vbF9mcmVlX3NsYWIsIGFycV9wb29sLCBxLT5ub2RlKTsKLQlpZiAoIWFkLT5hcnFfcG9vbCkgewotCQlrZnJlZShhZC0+aGFzaCk7Ci0JCWtmcmVlKGFkKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJLyogYW50aWNpcGF0b3J5IHNjaGVkdWxpbmcgaGVscGVycyAqLwogCWFkLT5hbnRpY190aW1lci5mdW5jdGlvbiA9IGFzX2FudGljX3RpbWVvdXQ7CiAJYWQtPmFudGljX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylxOwogCWluaXRfdGltZXIoJmFkLT5hbnRpY190aW1lcik7CiAJSU5JVF9XT1JLKCZhZC0+YW50aWNfd29yaywgYXNfd29ya19oYW5kbGVyLCBxKTsKIAotCWZvciAoaSA9IDA7IGkgPCBBU19IQVNIX0VOVFJJRVM7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKCZhZC0+aGFzaFtpXSk7Ci0KIAlJTklUX0xJU1RfSEVBRCgmYWQtPmZpZm9fbGlzdFtSRVFfU1lOQ10pOwogCUlOSVRfTElTVF9IRUFEKCZhZC0+Zmlmb19saXN0W1JFUV9BU1lOQ10pOwogCWFkLT5zb3J0X2xpc3RbUkVRX1NZTkNdID0gUkJfUk9PVDsKQEAgLTE3ODcsMTAgKzE0NDYsOCBAQAogCQkuZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4gPSAJYXNfZGVhY3RpdmF0ZV9yZXF1ZXN0LAogCQkuZWxldmF0b3JfcXVldWVfZW1wdHlfZm4gPQlhc19xdWV1ZV9lbXB0eSwKIAkJLmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4gPQlhc19jb21wbGV0ZWRfcmVxdWVzdCwKLQkJLmVsZXZhdG9yX2Zvcm1lcl9yZXFfZm4gPQlhc19mb3JtZXJfcmVxdWVzdCwKLQkJLmVsZXZhdG9yX2xhdHRlcl9yZXFfZm4gPQlhc19sYXR0ZXJfcmVxdWVzdCwKLQkJLmVsZXZhdG9yX3NldF9yZXFfZm4gPQkJYXNfc2V0X3JlcXVlc3QsCi0JCS5lbGV2YXRvcl9wdXRfcmVxX2ZuID0JCWFzX3B1dF9yZXF1ZXN0LAorCQkuZWxldmF0b3JfZm9ybWVyX3JlcV9mbiA9CWVsdl9yYl9mb3JtZXJfcmVxdWVzdCwKKwkJLmVsZXZhdG9yX2xhdHRlcl9yZXFfZm4gPQllbHZfcmJfbGF0dGVyX3JlcXVlc3QsCiAJCS5lbGV2YXRvcl9tYXlfcXVldWVfZm4gPQlhc19tYXlfcXVldWUsCiAJCS5lbGV2YXRvcl9pbml0X2ZuID0JCWFzX2luaXRfcXVldWUsCiAJCS5lbGV2YXRvcl9leGl0X2ZuID0JCWFzX2V4aXRfcXVldWUsCkBAIC0xODA2LDExICsxNDYzLDYgQEAKIHsKIAlpbnQgcmV0OwogCi0JYXJxX3Bvb2wgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiYXNfYXJxIiwgc2l6ZW9mKHN0cnVjdCBhc19ycSksCi0JCQkJICAgICAwLCAwLCBOVUxMLCBOVUxMKTsKLQlpZiAoIWFycV9wb29sKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCXJldCA9IGVsdl9yZWdpc3RlcigmaW9zY2hlZF9hcyk7CiAJaWYgKCFyZXQpIHsKIAkJLyoKQEAgLTE4MjIsMjEgKzE0NzQsMTkgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Ja21lbV9jYWNoZV9kZXN0cm95KGFycV9wb29sKTsKIAlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgYXNfZXhpdCh2b2lkKQogewotCURFQ0xBUkVfQ09NUExFVElPTihhbGxfZ29uZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2FzKTsKIAlpb2NfZ29uZSA9ICZhbGxfZ29uZTsKIAkvKiBpb2NfZ29uZSdzIHVwZGF0ZSBtdXN0IGJlIHZpc2libGUgYmVmb3JlIHJlYWRpbmcgaW9jX2NvdW50ICovCiAJc21wX3dtYigpOwotCWlmIChhdG9taWNfcmVhZCgmaW9jX2NvdW50KSkKKwlpZiAoZWx2X2lvY19jb3VudF9yZWFkKGlvY19jb3VudCkpCiAJCXdhaXRfZm9yX2NvbXBsZXRpb24oaW9jX2dvbmUpOwogCXN5bmNocm9uaXplX3JjdSgpOwotCWttZW1fY2FjaGVfZGVzdHJveShhcnFfcG9vbCk7CiB9CiAKIG1vZHVsZV9pbml0KGFzX2luaXQpOwpkaWZmIC0tZ2l0IGEvYmxvY2svYmxrdHJhY2UuYyBiL2Jsb2NrL2Jsa3RyYWNlLmMKaW5kZXggMjY1ZjdhOC4uMTM1NTkzYyAxMDA2NDQKLS0tIGEvYmxvY2svYmxrdHJhY2UuYworKysgYi9ibG9jay9ibGt0cmFjZS5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNiBKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA2IEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTY5LDcgKzY5LDcgQEAKIC8qCiAgKiBCaW8gYWN0aW9uIGJpdHMgb2YgaW50ZXJlc3QKICAqLwotc3RhdGljIHUzMiBiaW9fYWN0WzVdIF9fcmVhZF9tb3N0bHkgPSB7IDAsIEJMS19UQ19BQ1QoQkxLX1RDX0JBUlJJRVIpLCBCTEtfVENfQUNUKEJMS19UQ19TWU5DKSwgMCwgQkxLX1RDX0FDVChCTEtfVENfQUhFQUQpIH07CitzdGF0aWMgdTMyIGJpb19hY3RbOV0gX19yZWFkX21vc3RseSA9IHsgMCwgQkxLX1RDX0FDVChCTEtfVENfQkFSUklFUiksIEJMS19UQ19BQ1QoQkxLX1RDX1NZTkMpLCAwLCBCTEtfVENfQUNUKEJMS19UQ19BSEVBRCksIDAsIDAsIDAsIEJMS19UQ19BQ1QoQkxLX1RDX01FVEEpIH07CiAKIC8qCiAgKiBNb3JlIGNvdWxkIGJlIGFkZGVkIGFzIG5lZWRlZCwgdGFraW5nIGNhcmUgdG8gaW5jcmVtZW50IHRoZSBkZWNyZW1lbnRlcgpAQCAtODEsNiArODEsOCBAQAogCSgoKHJ3KSAmICgxIDw8IEJJT19SV19TWU5DKSkgPj4gKEJJT19SV19TWU5DIC0gMSkpCiAjZGVmaW5lIHRyYWNlX2FoZWFkX2JpdChydykJXAogCSgoKHJ3KSAmICgxIDw8IEJJT19SV19BSEVBRCkpIDw8ICgyIC0gQklPX1JXX0FIRUFEKSkKKyNkZWZpbmUgdHJhY2VfbWV0YV9iaXQocncpCVwKKwkoKChydykgJiAoMSA8PCBCSU9fUldfTUVUQSkpID4+IChCSU9fUldfTUVUQSAtIDMpKQogCiAvKgogICogVGhlIHdvcmtlciBmb3IgdGhlIHZhcmlvdXMgYmxrX2FkZF90cmFjZSooKSB0eXBlcy4gRmlsbHMgb3V0IGEKQEAgLTEwMyw2ICsxMDUsNyBAQAogCXdoYXQgfD0gYmlvX2FjdFt0cmFjZV9iYXJyaWVyX2JpdChydyldOwogCXdoYXQgfD0gYmlvX2FjdFt0cmFjZV9zeW5jX2JpdChydyldOwogCXdoYXQgfD0gYmlvX2FjdFt0cmFjZV9haGVhZF9iaXQocncpXTsKKwl3aGF0IHw9IGJpb19hY3RbdHJhY2VfbWV0YV9iaXQocncpXTsKIAogCXBpZCA9IHRzay0+cGlkOwogCWlmICh1bmxpa2VseShhY3RfbG9nX2NoZWNrKGJ0LCB3aGF0LCBzZWN0b3IsIHBpZCkpKQpAQCAtMjE3LDcgKzIyMCw3IEBACiAKIHN0YXRpYyBpbnQgYmxrX2Ryb3BwZWRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlmaWxwLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1MCw4ICs0NTMsMTAgQEAKICAqKi8KIHZvaWQgYmxrX3RyYWNlX3NodXRkb3duKHJlcXVlc3RfcXVldWVfdCAqcSkKIHsKLQlibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIDApOwotCWJsa190cmFjZV9yZW1vdmUocSk7CisJaWYgKHEtPmJsa190cmFjZSkgeworCQlibGtfdHJhY2Vfc3RhcnRzdG9wKHEsIDApOworCQlibGtfdHJhY2VfcmVtb3ZlKHEpOworCX0KIH0KIAogLyoKQEAgLTQ3MSw2ICs0NzYsOSBAQAogCSp0IC09IChhICsgYikgLyAyOwogfQogCisvKgorICogY2FsaWJyYXRlIG91ciBpbnRlci1DUFUgdGltaW5ncworICovCiBzdGF0aWMgdm9pZCBibGtfdHJhY2VfY2hlY2tfY3B1X3RpbWUodm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgKnQ7CkBAIC00ODgsMjAgKzQ5Niw2IEBACiAJcHV0X2NwdSgpOwogfQogCi0vKgotICogQ2FsbCBibGtfdHJhY2VfY2hlY2tfY3B1X3RpbWUoKSBvbiBlYWNoIENQVSB0byBjYWxpYnJhdGUgb3VyIGludGVyLUNQVQotICogdGltaW5ncwotICovCi1zdGF0aWMgdm9pZCBibGtfdHJhY2VfY2FsaWJyYXRlX29mZnNldHModm9pZCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0Jc21wX2NhbGxfZnVuY3Rpb24oYmxrX3RyYWNlX2NoZWNrX2NwdV90aW1lLCBOVUxMLCAxLCAxKTsKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JYmxrX3RyYWNlX2NoZWNrX2NwdV90aW1lKE5VTEwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKLX0KLQogc3RhdGljIHZvaWQgYmxrX3RyYWNlX3NldF9odF9vZmZzZXRzKHZvaWQpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfU0NIRURfU01UKQpAQCAtNTMwLDcgKzUyNCw3IEBACiBzdGF0aWMgX19pbml0IGludCBibGtfdHJhY2VfaW5pdCh2b2lkKQogewogCW11dGV4X2luaXQoJmJsa190cmVlX211dGV4KTsKLQlibGtfdHJhY2VfY2FsaWJyYXRlX29mZnNldHMoKTsKKwlvbl9lYWNoX2NwdShibGtfdHJhY2VfY2hlY2tfY3B1X3RpbWUsIE5VTEwsIDEsIDEpOwogCWJsa190cmFjZV9zZXRfaHRfb2Zmc2V0cygpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9ibG9jay9jZnEtaW9zY2hlZC5jIGIvYmxvY2svY2ZxLWlvc2NoZWQuYwppbmRleCAzYTNhZWUwLi5kM2Q3NjEzIDEwMDY0NAotLS0gYS9ibG9jay9jZnEtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2NmcS1pb3NjaGVkLmMKQEAgLTQsNyArNCw3IEBACiAgKiAgQmFzZWQgb24gaWRlYXMgZnJvbSBhIHByZXZpb3VzbHkgdW5maW5pc2hlZCBpbwogICogIHNjaGVkdWxlciAocm91bmQgcm9iaW4gcGVyLXByb2Nlc3MgZGlzayBzY2hlZHVsaW5nKSBhbmQgQW5kcmVhIEFyY2FuZ2VsaS4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzIEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KICAqLwogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMTcsNyArMTcsNiBAQAogICogdHVuYWJsZXMKICAqLwogc3RhdGljIGNvbnN0IGludCBjZnFfcXVhbnR1bSA9IDQ7CQkvKiBtYXggcXVldWUgaW4gb25lIHJvdW5kIG9mIHNlcnZpY2UgKi8KLXN0YXRpYyBjb25zdCBpbnQgY2ZxX3F1ZXVlZCA9IDg7CQkvKiBtaW5pbXVtIHJxIGFsbG9jYXRlIGxpbWl0IHBlci1xdWV1ZSovCiBzdGF0aWMgY29uc3QgaW50IGNmcV9maWZvX2V4cGlyZVsyXSA9IHsgSFogLyA0LCBIWiAvIDggfTsKIHN0YXRpYyBjb25zdCBpbnQgY2ZxX2JhY2tfbWF4ID0gMTYgKiAxMDI0OwkvKiBtYXhpbXVtIGJhY2t3YXJkcyBzZWVrLCBpbiBLaUIgKi8KIHN0YXRpYyBjb25zdCBpbnQgY2ZxX2JhY2tfcGVuYWx0eSA9IDI7CQkvKiBwZW5hbHR5IG9mIGEgYmFja3dhcmRzIHNlZWsgKi8KQEAgLTMyLDggKzMxLDYgQEAKIAogI2RlZmluZSBDRlFfS0VZX0FTWU5DCQkoMCkKIAotc3RhdGljIERFRklORV9TUElOTE9DSyhjZnFfZXhpdF9sb2NrKTsKLQogLyoKICAqIGZvciB0aGUgaGFzaCBvZiBjZnFxIGluc2lkZSB0aGUgY2ZxZAogICovCkBAIC00MSwzNyArMzgsMTkgQEAKICNkZWZpbmUgQ0ZRX1FIQVNIX0VOVFJJRVMJKDEgPDwgQ0ZRX1FIQVNIX1NISUZUKQogI2RlZmluZSBsaXN0X2VudHJ5X3FoYXNoKGVudHJ5KQlobGlzdF9lbnRyeSgoZW50cnkpLCBzdHJ1Y3QgY2ZxX3F1ZXVlLCBjZnFfaGFzaCkKIAotLyoKLSAqIGZvciB0aGUgaGFzaCBvZiBjcnEgaW5zaWRlIHRoZSBjZnFxCi0gKi8KLSNkZWZpbmUgQ0ZRX01IQVNIX1NISUZUCQk2Ci0jZGVmaW5lIENGUV9NSEFTSF9CTE9DSyhzZWMpCSgoc2VjKSA+PiAzKQotI2RlZmluZSBDRlFfTUhBU0hfRU5UUklFUwkoMSA8PCBDRlFfTUhBU0hfU0hJRlQpCi0jZGVmaW5lIENGUV9NSEFTSF9GTihzZWMpCWhhc2hfbG9uZyhDRlFfTUhBU0hfQkxPQ0soc2VjKSwgQ0ZRX01IQVNIX1NISUZUKQotI2RlZmluZSBycV9oYXNoX2tleShycSkJCSgocnEpLT5zZWN0b3IgKyAocnEpLT5ucl9zZWN0b3JzKQotI2RlZmluZSBsaXN0X2VudHJ5X2hhc2gocHRyKQlobGlzdF9lbnRyeSgocHRyKSwgc3RydWN0IGNmcV9ycSwgaGFzaCkKLQogI2RlZmluZSBsaXN0X2VudHJ5X2NmcXEocHRyKQlsaXN0X2VudHJ5KChwdHIpLCBzdHJ1Y3QgY2ZxX3F1ZXVlLCBjZnFfbGlzdCkKLSNkZWZpbmUgbGlzdF9lbnRyeV9maWZvKHB0cikJbGlzdF9lbnRyeSgocHRyKSwgc3RydWN0IHJlcXVlc3QsIHF1ZXVlbGlzdCkKIAotI2RlZmluZSBSUV9EQVRBKHJxKQkJKHJxKS0+ZWxldmF0b3JfcHJpdmF0ZQorI2RlZmluZSBSUV9DSUMocnEpCQkoKHN0cnVjdCBjZnFfaW9fY29udGV4dCopKHJxKS0+ZWxldmF0b3JfcHJpdmF0ZSkKKyNkZWZpbmUgUlFfQ0ZRUShycSkJCSgocnEpLT5lbGV2YXRvcl9wcml2YXRlMikKIAotLyoKLSAqIHJiLXRyZWUgZGVmaW5lcwotICovCi0jZGVmaW5lIHJiX2VudHJ5X2NycShub2RlKQlyYl9lbnRyeSgobm9kZSksIHN0cnVjdCBjZnFfcnEsIHJiX25vZGUpCi0jZGVmaW5lIHJxX3JiX2tleShycSkJCShycSktPnNlY3RvcgotCi1zdGF0aWMga21lbV9jYWNoZV90ICpjcnFfcG9vbDsKIHN0YXRpYyBrbWVtX2NhY2hlX3QgKmNmcV9wb29sOwogc3RhdGljIGttZW1fY2FjaGVfdCAqY2ZxX2lvY19wb29sOwogCi1zdGF0aWMgYXRvbWljX3QgaW9jX2NvdW50ID0gQVRPTUlDX0lOSVQoMCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgbG9uZywgaW9jX2NvdW50KTsKIHN0YXRpYyBzdHJ1Y3QgY29tcGxldGlvbiAqaW9jX2dvbmU7CiAKICNkZWZpbmUgQ0ZRX1BSSU9fTElTVFMJCUlPUFJJT19CRV9OUgogI2RlZmluZSBjZnFfY2xhc3NfaWRsZShjZnFxKQkoKGNmcXEpLT5pb3ByaW9fY2xhc3MgPT0gSU9QUklPX0NMQVNTX0lETEUpCi0jZGVmaW5lIGNmcV9jbGFzc19iZShjZnFxKQkoKGNmcXEpLT5pb3ByaW9fY2xhc3MgPT0gSU9QUklPX0NMQVNTX0JFKQogI2RlZmluZSBjZnFfY2xhc3NfcnQoY2ZxcSkJKChjZnFxKS0+aW9wcmlvX2NsYXNzID09IElPUFJJT19DTEFTU19SVCkKIAogI2RlZmluZSBBU1lOQwkJCSgwKQpAQCAtMTAzLDI5ICs4MiwxNCBAQAogCXVuc2lnbmVkIGludCBidXN5X3F1ZXVlczsKIAogCS8qCi0JICogbm9uLW9yZGVyZWQgbGlzdCBvZiBlbXB0eSBjZnFxJ3MKLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGVtcHR5X2xpc3Q7Ci0KLQkvKgogCSAqIGNmcXEgbG9va3VwIGhhc2gKIAkgKi8KIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqY2ZxX2hhc2g7CiAKLQkvKgotCSAqIGdsb2JhbCBjcnEgaGFzaCBmb3IgYWxsIHF1ZXVlcwotCSAqLwotCXN0cnVjdCBobGlzdF9oZWFkICpjcnFfaGFzaDsKLQotCW1lbXBvb2xfdCAqY3JxX3Bvb2w7Ci0KIAlpbnQgcnFfaW5fZHJpdmVyOwogCWludCBod190YWc7CiAKIAkvKgotCSAqIHNjaGVkdWxlIHNsaWNlIHN0YXRlIGluZm8KLQkgKi8KLQkvKgogCSAqIGlkbGUgd2luZG93IG1hbmFnZW1lbnQKIAkgKi8KIAlzdHJ1Y3QgdGltZXJfbGlzdCBpZGxlX3NsaWNlX3RpbWVyOwpAQCAtMTQxLDEzICsxMDUsMTAgQEAKIAlzZWN0b3JfdCBsYXN0X3NlY3RvcjsKIAl1bnNpZ25lZCBsb25nIGxhc3RfZW5kX3JlcXVlc3Q7CiAKLQl1bnNpZ25lZCBpbnQgcnFfc3RhcnZlZDsKLQogCS8qCiAJICogdHVuYWJsZXMsIHNlZSB0b3Agb2YgZmlsZQogCSAqLwogCXVuc2lnbmVkIGludCBjZnFfcXVhbnR1bTsKLQl1bnNpZ25lZCBpbnQgY2ZxX3F1ZXVlZDsKIAl1bnNpZ25lZCBpbnQgY2ZxX2ZpZm9fZXhwaXJlWzJdOwogCXVuc2lnbmVkIGludCBjZnFfYmFja19wZW5hbHR5OwogCXVuc2lnbmVkIGludCBjZnFfYmFja19tYXg7CkBAIC0xNzAsMjMgKzEzMSwyNCBAQAogCXN0cnVjdCBobGlzdF9ub2RlIGNmcV9oYXNoOwogCS8qIGhhc2gga2V5ICovCiAJdW5zaWduZWQgaW50IGtleTsKLQkvKiBvbiBlaXRoZXIgcnIgb3IgZW1wdHkgbGlzdCBvZiBjZnFkICovCisJLyogbWVtYmVyIG9mIHRoZSByci9idXN5L2N1ci9pZGxlIGNmcWQgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgY2ZxX2xpc3Q7CiAJLyogc29ydGVkIGxpc3Qgb2YgcGVuZGluZyByZXF1ZXN0cyAqLwogCXN0cnVjdCByYl9yb290IHNvcnRfbGlzdDsKIAkvKiBpZiBmaWZvIGlzbid0IGV4cGlyZWQsIG5leHQgcmVxdWVzdCB0byBzZXJ2ZSAqLwotCXN0cnVjdCBjZnFfcnEgKm5leHRfY3JxOworCXN0cnVjdCByZXF1ZXN0ICpuZXh0X3JxOwogCS8qIHJlcXVlc3RzIHF1ZXVlZCBpbiBzb3J0X2xpc3QgKi8KIAlpbnQgcXVldWVkWzJdOwogCS8qIGN1cnJlbnRseSBhbGxvY2F0ZWQgcmVxdWVzdHMgKi8KIAlpbnQgYWxsb2NhdGVkWzJdOworCS8qIHBlbmRpbmcgbWV0YWRhdGEgcmVxdWVzdHMgKi8KKwlpbnQgbWV0YV9wZW5kaW5nOwogCS8qIGZpZm8gbGlzdCBvZiByZXF1ZXN0cyBpbiBzb3J0X2xpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87CiAKIAl1bnNpZ25lZCBsb25nIHNsaWNlX3N0YXJ0OwogCXVuc2lnbmVkIGxvbmcgc2xpY2VfZW5kOwogCXVuc2lnbmVkIGxvbmcgc2xpY2VfbGVmdDsKLQl1bnNpZ25lZCBsb25nIHNlcnZpY2VfbGFzdDsKIAogCS8qIG51bWJlciBvZiByZXF1ZXN0cyB0aGF0IGFyZSBvbiB0aGUgZGlzcGF0Y2ggbGlzdCAqLwogCWludCBvbl9kaXNwYXRjaFsyXTsKQEAgLTE5OSwxOCArMTYxLDYgQEAKIAl1bnNpZ25lZCBpbnQgZmxhZ3M7CiB9OwogCi1zdHJ1Y3QgY2ZxX3JxIHsKLQlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOwotCXNlY3Rvcl90IHJiX2tleTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcmVxdWVzdDsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSBoYXNoOwotCi0Jc3RydWN0IGNmcV9xdWV1ZSAqY2ZxX3F1ZXVlOwotCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqaW9fY29udGV4dDsKLQotCXVuc2lnbmVkIGludCBjcnFfZmxhZ3M7Ci19OwotCiBlbnVtIGNmcXFfc3RhdGVfZmxhZ3MgewogCUNGUV9DRlFRX0ZMQUdfb25fcnIgPSAwLAogCUNGUV9DRlFRX0ZMQUdfd2FpdF9yZXF1ZXN0LApAQCAtMjIwLDYgKzE3MCw3IEBACiAJQ0ZRX0NGUVFfRkxBR19maWZvX2V4cGlyZSwKIAlDRlFfQ0ZRUV9GTEFHX2lkbGVfd2luZG93LAogCUNGUV9DRlFRX0ZMQUdfcHJpb19jaGFuZ2VkLAorCUNGUV9DRlFRX0ZMQUdfcXVldWVfbmV3LAogfTsKIAogI2RlZmluZSBDRlFfQ0ZRUV9GTlMobmFtZSkJCQkJCQlcCkBAIC0yNDQsNzAgKzE5NSwxNCBAQAogQ0ZRX0NGUVFfRk5TKGZpZm9fZXhwaXJlKTsKIENGUV9DRlFRX0ZOUyhpZGxlX3dpbmRvdyk7CiBDRlFfQ0ZRUV9GTlMocHJpb19jaGFuZ2VkKTsKK0NGUV9DRlFRX0ZOUyhxdWV1ZV9uZXcpOwogI3VuZGVmIENGUV9DRlFRX0ZOUwogCi1lbnVtIGNmcV9ycV9zdGF0ZV9mbGFncyB7Ci0JQ0ZRX0NSUV9GTEFHX2lzX3N5bmMgPSAwLAotfTsKLQotI2RlZmluZSBDRlFfQ1JRX0ZOUyhuYW1lKQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfbWFya19jcnFfIyNuYW1lKHN0cnVjdCBjZnFfcnEgKmNycSkJCVwKLXsJCQkJCQkJCQlcCi0JY3JxLT5jcnFfZmxhZ3MgfD0gKDEgPDwgQ0ZRX0NSUV9GTEFHXyMjbmFtZSk7CQkJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfY2xlYXJfY3JxXyMjbmFtZShzdHJ1Y3QgY2ZxX3JxICpjcnEpCQlcCi17CQkJCQkJCQkJXAotCWNycS0+Y3JxX2ZsYWdzICY9IH4oMSA8PCBDRlFfQ1JRX0ZMQUdfIyNuYW1lKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIGlubGluZSBpbnQgY2ZxX2NycV8jI25hbWUoY29uc3Qgc3RydWN0IGNmcV9ycSAqY3JxKQkJXAotewkJCQkJCQkJCVwKLQlyZXR1cm4gKGNycS0+Y3JxX2ZsYWdzICYgKDEgPDwgQ0ZRX0NSUV9GTEFHXyMjbmFtZSkpICE9IDA7CVwKLX0KLQotQ0ZRX0NSUV9GTlMoaXNfc3luYyk7Ci0jdW5kZWYgQ0ZRX0NSUV9GTlMKLQogc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKmNmcV9maW5kX2NmcV9oYXNoKHN0cnVjdCBjZnFfZGF0YSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIHNob3J0KTsKLXN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9pbnNlcnQocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCBjZnFfcnEgKik7CitzdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfaW5zZXJ0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFfZ2V0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgdW5zaWduZWQgaW50IGtleSwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGdmcF90IGdmcF9tYXNrKTsKIAogLyoKLSAqIGxvdHMgb2YgZGVhZGxpbmUgaW9zY2hlZCBkdXBlcywgY2FuIGJlIGFic3RyYWN0ZWQgbGF0ZXIuLi4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGNmcV9kZWxfY3JxX2hhc2goc3RydWN0IGNmcV9ycSAqY3JxKQotewotCWhsaXN0X2RlbF9pbml0KCZjcnEtPmhhc2gpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgY2ZxX2FkZF9jcnFfaGFzaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcnEgKmNycSkKLXsKLQljb25zdCBpbnQgaGFzaF9pZHggPSBDRlFfTUhBU0hfRk4ocnFfaGFzaF9rZXkoY3JxLT5yZXF1ZXN0KSk7Ci0KLQlobGlzdF9hZGRfaGVhZCgmY3JxLT5oYXNoLCAmY2ZxZC0+Y3JxX2hhc2hbaGFzaF9pZHhdKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXF1ZXN0ICpjZnFfZmluZF9ycV9oYXNoKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc2VjdG9yX3Qgb2Zmc2V0KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoX2xpc3QgPSAmY2ZxZC0+Y3JxX2hhc2hbQ0ZRX01IQVNIX0ZOKG9mZnNldCldOwotCXN0cnVjdCBobGlzdF9ub2RlICplbnRyeSwgKm5leHQ7Ci0KLQlobGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBuZXh0LCBoYXNoX2xpc3QpIHsKLQkJc3RydWN0IGNmcV9ycSAqY3JxID0gbGlzdF9lbnRyeV9oYXNoKGVudHJ5KTsKLQkJc3RydWN0IHJlcXVlc3QgKl9fcnEgPSBjcnEtPnJlcXVlc3Q7Ci0KLQkJaWYgKCFycV9tZXJnZWFibGUoX19ycSkpIHsKLQkJCWNmcV9kZWxfY3JxX2hhc2goY3JxKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHJxX2hhc2hfa2V5KF9fcnEpID09IG9mZnNldCkKLQkJCXJldHVybiBfX3JxOwotCX0KLQotCXJldHVybiBOVUxMOwotfQotCi0vKgogICogc2NoZWR1bGVyIHJ1biBvZiBxdWV1ZSwgaWYgdGhlcmUgYXJlIHJlcXVlc3RzIHBlbmRpbmcgYW5kIG5vIG9uZSBpbiB0aGUKICAqIGRyaXZlciB0aGF0IHdpbGwgcmVzdGFydCBxdWV1ZWluZwogICovCkBAIC0zMzMsMTIgKzIyOCwxMiBAQAogfQogCiAvKgotICogTGlmdGVkIGZyb20gQVMgLSBjaG9vc2Ugd2hpY2ggb2YgY3JxMSBhbmQgY3JxMiB0aGF0IGlzIGJlc3Qgc2VydmVkIG5vdy4KKyAqIExpZnRlZCBmcm9tIEFTIC0gY2hvb3NlIHdoaWNoIG9mIHJxMSBhbmQgcnEyIHRoYXQgaXMgYmVzdCBzZXJ2ZWQgbm93LgogICogV2UgY2hvb3NlIHRoZSByZXF1ZXN0IHRoYXQgaXMgY2xvc2VzdCB0byB0aGUgaGVhZCByaWdodCBub3cuIERpc3RhbmNlCiAgKiBiZWhpbmQgdGhlIGhlYWQgaXMgcGVuYWxpemVkIGFuZCBvbmx5IGFsbG93ZWQgdG8gYSBjZXJ0YWluIGV4dGVudC4KICAqLwotc3RhdGljIHN0cnVjdCBjZnFfcnEgKgotY2ZxX2Nob29zZV9yZXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3JxICpjcnExLCBzdHJ1Y3QgY2ZxX3JxICpjcnEyKQorc3RhdGljIHN0cnVjdCByZXF1ZXN0ICoKK2NmcV9jaG9vc2VfcmVxKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IHJlcXVlc3QgKnJxMSwgc3RydWN0IHJlcXVlc3QgKnJxMikKIHsKIAlzZWN0b3JfdCBsYXN0LCBzMSwgczIsIGQxID0gMCwgZDIgPSAwOwogCXVuc2lnbmVkIGxvbmcgYmFja19tYXg7CkBAIC0zNDYsMTggKzI0MSwyMiBAQAogI2RlZmluZSBDRlFfUlEyX1dSQVAJMHgwMiAvKiByZXF1ZXN0IDIgd3JhcHMgKi8KIAl1bnNpZ25lZCB3cmFwID0gMDsgLyogYml0IG1hc2s6IHJlcXVlc3RzIGJlaGluZCB0aGUgZGlzayBoZWFkPyAqLwogCi0JaWYgKGNycTEgPT0gTlVMTCB8fCBjcnExID09IGNycTIpCi0JCXJldHVybiBjcnEyOwotCWlmIChjcnEyID09IE5VTEwpCi0JCXJldHVybiBjcnExOworCWlmIChycTEgPT0gTlVMTCB8fCBycTEgPT0gcnEyKQorCQlyZXR1cm4gcnEyOworCWlmIChycTIgPT0gTlVMTCkKKwkJcmV0dXJuIHJxMTsKIAotCWlmIChjZnFfY3JxX2lzX3N5bmMoY3JxMSkgJiYgIWNmcV9jcnFfaXNfc3luYyhjcnEyKSkKLQkJcmV0dXJuIGNycTE7Ci0JZWxzZSBpZiAoY2ZxX2NycV9pc19zeW5jKGNycTIpICYmICFjZnFfY3JxX2lzX3N5bmMoY3JxMSkpCi0JCXJldHVybiBjcnEyOworCWlmIChycV9pc19zeW5jKHJxMSkgJiYgIXJxX2lzX3N5bmMocnEyKSkKKwkJcmV0dXJuIHJxMTsKKwllbHNlIGlmIChycV9pc19zeW5jKHJxMikgJiYgIXJxX2lzX3N5bmMocnExKSkKKwkJcmV0dXJuIHJxMjsKKwlpZiAocnFfaXNfbWV0YShycTEpICYmICFycV9pc19tZXRhKHJxMikpCisJCXJldHVybiBycTE7CisJZWxzZSBpZiAocnFfaXNfbWV0YShycTIpICYmICFycV9pc19tZXRhKHJxMSkpCisJCXJldHVybiBycTI7CiAKLQlzMSA9IGNycTEtPnJlcXVlc3QtPnNlY3RvcjsKLQlzMiA9IGNycTItPnJlcXVlc3QtPnNlY3RvcjsKKwlzMSA9IHJxMS0+c2VjdG9yOworCXMyID0gcnEyLT5zZWN0b3I7CiAKIAlsYXN0ID0gY2ZxZC0+bGFzdF9zZWN0b3I7CiAKQEAgLTM5MiwyMyArMjkxLDIzIEBACiAJICogY2hlY2sgdHdvIHZhcmlhYmxlcyBmb3IgYWxsIHBlcm11dGF0aW9uczogLS0+IGZhc3RlciEKIAkgKi8KIAlzd2l0Y2ggKHdyYXApIHsKLQljYXNlIDA6IC8qIGNvbW1vbiBjYXNlIGZvciBDRlE6IGNycTEgYW5kIGNycTIgbm90IHdyYXBwZWQgKi8KKwljYXNlIDA6IC8qIGNvbW1vbiBjYXNlIGZvciBDRlE6IHJxMSBhbmQgcnEyIG5vdCB3cmFwcGVkICovCiAJCWlmIChkMSA8IGQyKQotCQkJcmV0dXJuIGNycTE7CisJCQlyZXR1cm4gcnExOwogCQllbHNlIGlmIChkMiA8IGQxKQotCQkJcmV0dXJuIGNycTI7CisJCQlyZXR1cm4gcnEyOwogCQllbHNlIHsKIAkJCWlmIChzMSA+PSBzMikKLQkJCQlyZXR1cm4gY3JxMTsKKwkJCQlyZXR1cm4gcnExOwogCQkJZWxzZQotCQkJCXJldHVybiBjcnEyOworCQkJCXJldHVybiBycTI7CiAJCX0KIAogCWNhc2UgQ0ZRX1JRMl9XUkFQOgotCQlyZXR1cm4gY3JxMTsKKwkJcmV0dXJuIHJxMTsKIAljYXNlIENGUV9SUTFfV1JBUDoKLQkJcmV0dXJuIGNycTI7Ci0JY2FzZSAoQ0ZRX1JRMV9XUkFQfENGUV9SUTJfV1JBUCk6IC8qIGJvdGggY3JxcyB3cmFwcGVkICovCisJCXJldHVybiBycTI7CisJY2FzZSAoQ0ZRX1JRMV9XUkFQfENGUV9SUTJfV1JBUCk6IC8qIGJvdGggcnFzIHdyYXBwZWQgKi8KIAlkZWZhdWx0OgogCQkvKgogCQkgKiBTaW5jZSBib3RoIHJxcyBhcmUgd3JhcHBlZCwKQEAgLTQxNyw1MCArMzE2LDQzIEBACiAJCSAqIHNpbmNlIGJhY2sgc2VlayB0YWtlcyBtb3JlIHRpbWUgdGhhbiBmb3J3YXJkLgogCQkgKi8KIAkJaWYgKHMxIDw9IHMyKQotCQkJcmV0dXJuIGNycTE7CisJCQlyZXR1cm4gcnExOwogCQllbHNlCi0JCQlyZXR1cm4gY3JxMjsKKwkJCXJldHVybiBycTI7CiAJfQogfQogCiAvKgogICogd291bGQgYmUgbmljZSB0byB0YWtlIGZpZm8gZXhwaXJlIHRpbWUgaW50byBhY2NvdW50IGFzIHdlbGwKICAqLwotc3RhdGljIHN0cnVjdCBjZnFfcnEgKgotY2ZxX2ZpbmRfbmV4dF9jcnEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQkgIHN0cnVjdCBjZnFfcnEgKmxhc3QpCitzdGF0aWMgc3RydWN0IHJlcXVlc3QgKgorY2ZxX2ZpbmRfbmV4dF9ycShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCisJCSAgc3RydWN0IHJlcXVlc3QgKmxhc3QpCiB7Ci0Jc3RydWN0IGNmcV9ycSAqY3JxX25leHQgPSBOVUxMLCAqY3JxX3ByZXYgPSBOVUxMOwotCXN0cnVjdCByYl9ub2RlICpyYm5leHQsICpyYnByZXY7CisJc3RydWN0IHJiX25vZGUgKnJibmV4dCA9IHJiX25leHQoJmxhc3QtPnJiX25vZGUpOworCXN0cnVjdCByYl9ub2RlICpyYnByZXYgPSByYl9wcmV2KCZsYXN0LT5yYl9ub2RlKTsKKwlzdHJ1Y3QgcmVxdWVzdCAqbmV4dCA9IE5VTEwsICpwcmV2ID0gTlVMTDsKIAotCWlmICghKHJibmV4dCA9IHJiX25leHQoJmxhc3QtPnJiX25vZGUpKSkgewotCQlyYm5leHQgPSByYl9maXJzdCgmY2ZxcS0+c29ydF9saXN0KTsKLQkJaWYgKHJibmV4dCA9PSAmbGFzdC0+cmJfbm9kZSkKLQkJCXJibmV4dCA9IE5VTEw7Ci0JfQotCi0JcmJwcmV2ID0gcmJfcHJldigmbGFzdC0+cmJfbm9kZSk7CisJQlVHX09OKFJCX0VNUFRZX05PREUoJmxhc3QtPnJiX25vZGUpKTsKIAogCWlmIChyYnByZXYpCi0JCWNycV9wcmV2ID0gcmJfZW50cnlfY3JxKHJicHJldik7CisJCXByZXYgPSByYl9lbnRyeV9ycShyYnByZXYpOworCiAJaWYgKHJibmV4dCkKLQkJY3JxX25leHQgPSByYl9lbnRyeV9jcnEocmJuZXh0KTsKKwkJbmV4dCA9IHJiX2VudHJ5X3JxKHJibmV4dCk7CisJZWxzZSB7CisJCXJibmV4dCA9IHJiX2ZpcnN0KCZjZnFxLT5zb3J0X2xpc3QpOworCQlpZiAocmJuZXh0ICYmIHJibmV4dCAhPSAmbGFzdC0+cmJfbm9kZSkKKwkJCW5leHQgPSByYl9lbnRyeV9ycShyYm5leHQpOworCX0KIAotCXJldHVybiBjZnFfY2hvb3NlX3JlcShjZnFkLCBjcnFfbmV4dCwgY3JxX3ByZXYpOwotfQotCi1zdGF0aWMgdm9pZCBjZnFfdXBkYXRlX25leHRfY3JxKHN0cnVjdCBjZnFfcnEgKmNycSkKLXsKLQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY3JxLT5jZnFfcXVldWU7Ci0KLQlpZiAoY2ZxcS0+bmV4dF9jcnEgPT0gY3JxKQotCQljZnFxLT5uZXh0X2NycSA9IGNmcV9maW5kX25leHRfY3JxKGNmcXEtPmNmcWQsIGNmcXEsIGNycSk7CisJcmV0dXJuIGNmcV9jaG9vc2VfcmVxKGNmcWQsIG5leHQsIHByZXYpOwogfQogCiBzdGF0aWMgdm9pZCBjZnFfcmVzb3J0X3JyX2xpc3Qoc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSwgaW50IHByZWVtcHRlZCkKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjZnFxLT5jZnFkOwotCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsICplbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwogCiAJQlVHX09OKCFjZnFfY2ZxcV9vbl9ycihjZnFxKSk7CiAKQEAgLTQ4NSwzMSArMzc3LDI2IEBACiAJfQogCiAJLyoKLQkgKiBpZiBxdWV1ZSB3YXMgcHJlZW1wdGVkLCBqdXN0IGFkZCB0byBmcm9udCB0byBiZSBmYWlyLiBidXN5X3JyCi0JICogaXNuJ3Qgc29ydGVkLCBidXQgaW5zZXJ0IGF0IHRoZSBiYWNrIGZvciBmYWlybmVzcy4KKwkgKiBJZiB0aGlzIHF1ZXVlIHdhcyBwcmVlbXB0ZWQgb3IgaXMgbmV3IChuZXZlciBiZWVuIHNlcnZpY2VkKSwgbGV0CisJICogaXQgYmUgYWRkZWQgZmlyc3QgZm9yIGZhaXJuZXNzIGJ1dCBiZWluZCBvdGhlciBuZXcgcXVldWVzLgorCSAqIE90aGVyd2lzZSwganVzdCBhZGQgdG8gdGhlIGJhY2sgIG9mIHRoZSBsaXN0LgogCSAqLwotCWlmIChwcmVlbXB0ZWQgfHwgbGlzdCA9PSAmY2ZxZC0+YnVzeV9ycikgewotCQlpZiAocHJlZW1wdGVkKQotCQkJbGlzdCA9IGxpc3QtPnByZXY7CisJaWYgKHByZWVtcHRlZCB8fCBjZnFfY2ZxcV9xdWV1ZV9uZXcoY2ZxcSkpIHsKKwkJc3RydWN0IGxpc3RfaGVhZCAqbiA9IGxpc3Q7CisJCXN0cnVjdCBjZnFfcXVldWUgKl9fY2ZxcTsKIAotCQlsaXN0X2FkZF90YWlsKCZjZnFxLT5jZnFfbGlzdCwgbGlzdCk7Ci0JCXJldHVybjsKKwkJd2hpbGUgKG4tPm5leHQgIT0gbGlzdCkgeworCQkJX19jZnFxID0gbGlzdF9lbnRyeV9jZnFxKG4tPm5leHQpOworCQkJaWYgKCFjZnFfY2ZxcV9xdWV1ZV9uZXcoX19jZnFxKSkKKwkJCQlicmVhazsKKworCQkJbiA9IG4tPm5leHQ7CisJCX0KKworCQlsaXN0ID0gbjsKIAl9CiAKLQkvKgotCSAqIHNvcnQgYnkgd2hlbiBxdWV1ZSB3YXMgbGFzdCBzZXJ2aWNlZAotCSAqLwotCWVudHJ5ID0gbGlzdDsKLQl3aGlsZSAoKGVudHJ5ID0gZW50cnktPnByZXYpICE9IGxpc3QpIHsKLQkJc3RydWN0IGNmcV9xdWV1ZSAqX19jZnFxID0gbGlzdF9lbnRyeV9jZnFxKGVudHJ5KTsKLQotCQlpZiAoIV9fY2ZxcS0+c2VydmljZV9sYXN0KQotCQkJYnJlYWs7Ci0JCWlmICh0aW1lX2JlZm9yZShfX2NmcXEtPnNlcnZpY2VfbGFzdCwgY2ZxcS0+c2VydmljZV9sYXN0KSkKLQkJCWJyZWFrOwotCX0KLQotCWxpc3RfYWRkKCZjZnFxLT5jZnFfbGlzdCwgZW50cnkpOworCWxpc3RfYWRkX3RhaWwoJmNmcXEtPmNmcV9saXN0LCBsaXN0KTsKIH0KIAogLyoKQEAgLTUzMSw3ICs0MTgsNyBAQAogewogCUJVR19PTighY2ZxX2NmcXFfb25fcnIoY2ZxcSkpOwogCWNmcV9jbGVhcl9jZnFxX29uX3JyKGNmcXEpOwotCWxpc3RfbW92ZSgmY2ZxcS0+Y2ZxX2xpc3QsICZjZnFkLT5lbXB0eV9saXN0KTsKKwlsaXN0X2RlbF9pbml0KCZjZnFxLT5jZnFfbGlzdCk7CiAKIAlCVUdfT04oIWNmcWQtPmJ1c3lfcXVldWVzKTsKIAljZnFkLT5idXN5X3F1ZXVlcy0tOwpAQCAtNTQwLDgxICs0MjcsNDMgQEAKIC8qCiAgKiByYiB0cmVlIHN1cHBvcnQgZnVuY3Rpb25zCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBjZnFfZGVsX2NycV9yYihzdHJ1Y3QgY2ZxX3JxICpjcnEpCitzdGF0aWMgaW5saW5lIHZvaWQgY2ZxX2RlbF9ycV9yYihzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNycS0+Y2ZxX3F1ZXVlOworCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBSUV9DRlFRKHJxKTsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjZnFxLT5jZnFkOwotCWNvbnN0IGludCBzeW5jID0gY2ZxX2NycV9pc19zeW5jKGNycSk7CisJY29uc3QgaW50IHN5bmMgPSBycV9pc19zeW5jKHJxKTsKIAogCUJVR19PTighY2ZxcS0+cXVldWVkW3N5bmNdKTsKIAljZnFxLT5xdWV1ZWRbc3luY10tLTsKIAotCWNmcV91cGRhdGVfbmV4dF9jcnEoY3JxKTsKLQotCXJiX2VyYXNlKCZjcnEtPnJiX25vZGUsICZjZnFxLT5zb3J0X2xpc3QpOworCWVsdl9yYl9kZWwoJmNmcXEtPnNvcnRfbGlzdCwgcnEpOwogCiAJaWYgKGNmcV9jZnFxX29uX3JyKGNmcXEpICYmIFJCX0VNUFRZX1JPT1QoJmNmcXEtPnNvcnRfbGlzdCkpCiAJCWNmcV9kZWxfY2ZxcV9ycihjZnFkLCBjZnFxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBjZnFfcnEgKgotX19jZnFfYWRkX2NycV9yYihzdHJ1Y3QgY2ZxX3JxICpjcnEpCitzdGF0aWMgdm9pZCBjZnFfYWRkX3JxX3JiKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmY3JxLT5jZnFfcXVldWUtPnNvcnRfbGlzdC5yYl9ub2RlOwotCXN0cnVjdCByYl9ub2RlICpwYXJlbnQgPSBOVUxMOwotCXN0cnVjdCBjZnFfcnEgKl9fY3JxOwotCi0Jd2hpbGUgKCpwKSB7Ci0JCXBhcmVudCA9ICpwOwotCQlfX2NycSA9IHJiX2VudHJ5X2NycShwYXJlbnQpOwotCi0JCWlmIChjcnEtPnJiX2tleSA8IF9fY3JxLT5yYl9rZXkpCi0JCQlwID0gJigqcCktPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKGNycS0+cmJfa2V5ID4gX19jcnEtPnJiX2tleSkKLQkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7Ci0JCWVsc2UKLQkJCXJldHVybiBfX2NycTsKLQl9Ci0KLQlyYl9saW5rX25vZGUoJmNycS0+cmJfbm9kZSwgcGFyZW50LCBwKTsKLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHZvaWQgY2ZxX2FkZF9jcnFfcmIoc3RydWN0IGNmcV9ycSAqY3JxKQotewotCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBjcnEtPmNmcV9xdWV1ZTsKKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gUlFfQ0ZRUShycSk7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ZxcS0+Y2ZxZDsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBjcnEtPnJlcXVlc3Q7Ci0Jc3RydWN0IGNmcV9ycSAqX19hbGlhczsKKwlzdHJ1Y3QgcmVxdWVzdCAqX19hbGlhczsKIAotCWNycS0+cmJfa2V5ID0gcnFfcmJfa2V5KHJxKTsKLQljZnFxLT5xdWV1ZWRbY2ZxX2NycV9pc19zeW5jKGNycSldKys7CisJY2ZxcS0+cXVldWVkW3JxX2lzX3N5bmMocnEpXSsrOwogCiAJLyoKIAkgKiBsb29rcyBhIGxpdHRsZSBvZGQsIGJ1dCB0aGUgZmlyc3QgaW5zZXJ0IG1pZ2h0IHJldHVybiBhbiBhbGlhcy4KIAkgKiBpZiB0aGF0IGhhcHBlbnMsIHB1dCB0aGUgYWxpYXMgb24gdGhlIGRpc3BhdGNoIGxpc3QKIAkgKi8KLQl3aGlsZSAoKF9fYWxpYXMgPSBfX2NmcV9hZGRfY3JxX3JiKGNycSkpICE9IE5VTEwpCisJd2hpbGUgKChfX2FsaWFzID0gZWx2X3JiX2FkZCgmY2ZxcS0+c29ydF9saXN0LCBycSkpICE9IE5VTEwpCiAJCWNmcV9kaXNwYXRjaF9pbnNlcnQoY2ZxZC0+cXVldWUsIF9fYWxpYXMpOwotCi0JcmJfaW5zZXJ0X2NvbG9yKCZjcnEtPnJiX25vZGUsICZjZnFxLT5zb3J0X2xpc3QpOwotCi0JaWYgKCFjZnFfY2ZxcV9vbl9ycihjZnFxKSkKLQkJY2ZxX2FkZF9jZnFxX3JyKGNmcWQsIGNmcXEpOwotCi0JLyoKLQkgKiBjaGVjayBpZiB0aGlzIHJlcXVlc3QgaXMgYSBiZXR0ZXIgbmV4dC1zZXJ2ZSBjYW5kaWRhdGUKLQkgKi8KLQljZnFxLT5uZXh0X2NycSA9IGNmcV9jaG9vc2VfcmVxKGNmcWQsIGNmcXEtPm5leHRfY3JxLCBjcnEpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKLWNmcV9yZXBvc2l0aW9uX2NycV9yYihzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBzdHJ1Y3QgY2ZxX3JxICpjcnEpCitjZnFfcmVwb3NpdGlvbl9ycV9yYihzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JcmJfZXJhc2UoJmNycS0+cmJfbm9kZSwgJmNmcXEtPnNvcnRfbGlzdCk7Ci0JY2ZxcS0+cXVldWVkW2NmcV9jcnFfaXNfc3luYyhjcnEpXS0tOwotCi0JY2ZxX2FkZF9jcnFfcmIoY3JxKTsKKwllbHZfcmJfZGVsKCZjZnFxLT5zb3J0X2xpc3QsIHJxKTsKKwljZnFxLT5xdWV1ZWRbcnFfaXNfc3luYyhycSldLS07CisJY2ZxX2FkZF9ycV9yYihycSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCkBAIC02MjMsMjcgKzQ3MiwxNCBAQAogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlwaWRfdCBrZXkgPSBjZnFfcXVldWVfcGlkKHRzaywgYmlvX2RhdGFfZGlyKGJpbykpOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7Ci0Jc3RydWN0IHJiX25vZGUgKm47Ci0Jc2VjdG9yX3Qgc2VjdG9yOwogCiAJY2ZxcSA9IGNmcV9maW5kX2NmcV9oYXNoKGNmcWQsIGtleSwgdHNrLT5pb3ByaW8pOwotCWlmICghY2ZxcSkKLQkJZ290byBvdXQ7CisJaWYgKGNmcXEpIHsKKwkJc2VjdG9yX3Qgc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IgKyBiaW9fc2VjdG9ycyhiaW8pOwogCi0Jc2VjdG9yID0gYmlvLT5iaV9zZWN0b3IgKyBiaW9fc2VjdG9ycyhiaW8pOwotCW4gPSBjZnFxLT5zb3J0X2xpc3QucmJfbm9kZTsKLQl3aGlsZSAobikgewotCQlzdHJ1Y3QgY2ZxX3JxICpjcnEgPSByYl9lbnRyeV9jcnEobik7Ci0KLQkJaWYgKHNlY3RvciA8IGNycS0+cmJfa2V5KQotCQkJbiA9IG4tPnJiX2xlZnQ7Ci0JCWVsc2UgaWYgKHNlY3RvciA+IGNycS0+cmJfa2V5KQotCQkJbiA9IG4tPnJiX3JpZ2h0OwotCQllbHNlCi0JCQlyZXR1cm4gY3JxLT5yZXF1ZXN0OworCQlyZXR1cm4gZWx2X3JiX2ZpbmQoJmNmcXEtPnNvcnRfbGlzdCwgc2VjdG9yKTsKIAl9CiAKLW91dDoKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtNjczLDExICs1MDksMTggQEAKIAogc3RhdGljIHZvaWQgY2ZxX3JlbW92ZV9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgY2ZxX3JxICpjcnEgPSBSUV9EQVRBKHJxKTsKKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gUlFfQ0ZRUShycSk7CisKKwlpZiAoY2ZxcS0+bmV4dF9ycSA9PSBycSkKKwkJY2ZxcS0+bmV4dF9ycSA9IGNmcV9maW5kX25leHRfcnEoY2ZxcS0+Y2ZxZCwgY2ZxcSwgcnEpOwogCiAJbGlzdF9kZWxfaW5pdCgmcnEtPnF1ZXVlbGlzdCk7Ci0JY2ZxX2RlbF9jcnFfcmIoY3JxKTsKLQljZnFfZGVsX2NycV9oYXNoKGNycSk7CisJY2ZxX2RlbF9ycV9yYihycSk7CisKKwlpZiAocnFfaXNfbWV0YShycSkpIHsKKwkJV0FSTl9PTighY2ZxcS0+bWV0YV9wZW5kaW5nKTsKKwkJY2ZxcS0+bWV0YV9wZW5kaW5nLS07CisJfQogfQogCiBzdGF0aWMgaW50CkBAIC02ODUsMzkgKzUyOCwyMyBAQAogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCXN0cnVjdCByZXF1ZXN0ICpfX3JxOwotCWludCByZXQ7Ci0KLQlfX3JxID0gY2ZxX2ZpbmRfcnFfaGFzaChjZnFkLCBiaW8tPmJpX3NlY3Rvcik7Ci0JaWYgKF9fcnEgJiYgZWx2X3JxX21lcmdlX29rKF9fcnEsIGJpbykpIHsKLQkJcmV0ID0gRUxFVkFUT1JfQkFDS19NRVJHRTsKLQkJZ290byBvdXQ7Ci0JfQogCiAJX19ycSA9IGNmcV9maW5kX3JxX2ZtZXJnZShjZnFkLCBiaW8pOwogCWlmIChfX3JxICYmIGVsdl9ycV9tZXJnZV9vayhfX3JxLCBiaW8pKSB7Ci0JCXJldCA9IEVMRVZBVE9SX0ZST05UX01FUkdFOwotCQlnb3RvIG91dDsKKwkJKnJlcSA9IF9fcnE7CisJCXJldHVybiBFTEVWQVRPUl9GUk9OVF9NRVJHRTsKIAl9CiAKIAlyZXR1cm4gRUxFVkFUT1JfTk9fTUVSR0U7Ci1vdXQ6Ci0JKnJlcSA9IF9fcnE7Ci0JcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgY2ZxX21lcmdlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJlcSkKK3N0YXRpYyB2b2lkIGNmcV9tZXJnZWRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCisJCQkgICAgICAgaW50IHR5cGUpCiB7Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGNmcV9ycSAqY3JxID0gUlFfREFUQShyZXEpOworCWlmICh0eXBlID09IEVMRVZBVE9SX0ZST05UX01FUkdFKSB7CisJCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBSUV9DRlFRKHJlcSk7CiAKLQljZnFfZGVsX2NycV9oYXNoKGNycSk7Ci0JY2ZxX2FkZF9jcnFfaGFzaChjZnFkLCBjcnEpOwotCi0JaWYgKHJxX3JiX2tleShyZXEpICE9IGNycS0+cmJfa2V5KSB7Ci0JCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBjcnEtPmNmcV9xdWV1ZTsKLQotCQljZnFfdXBkYXRlX25leHRfY3JxKGNycSk7Ci0JCWNmcV9yZXBvc2l0aW9uX2NycV9yYihjZnFxLCBjcnEpOworCQljZnFfcmVwb3NpdGlvbl9ycV9yYihjZnFxLCByZXEpOwogCX0KIH0KIApAQCAtNzI1LDggKzU1Miw2IEBACiBjZnFfbWVyZ2VkX3JlcXVlc3RzKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLAogCQkgICAgc3RydWN0IHJlcXVlc3QgKm5leHQpCiB7Ci0JY2ZxX21lcmdlZF9yZXF1ZXN0KHEsIHJxKTsKLQogCS8qCiAJICogcmVwb3NpdGlvbiBpbiBmaWZvIGlmIG5leHQgaXMgb2xkZXIgdGhhbiBycQogCSAqLwpAQCAtNzY4LDEzICs1OTMsMTIgQEAKIAlpZiAoY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpKQogCQlkZWxfdGltZXIoJmNmcWQtPmlkbGVfc2xpY2VfdGltZXIpOwogCi0JaWYgKCFwcmVlbXB0ZWQgJiYgIWNmcV9jZnFxX2Rpc3BhdGNoZWQoY2ZxcSkpIHsKLQkJY2ZxcS0+c2VydmljZV9sYXN0ID0gbm93OworCWlmICghcHJlZW1wdGVkICYmICFjZnFfY2ZxcV9kaXNwYXRjaGVkKGNmcXEpKQogCQljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7Ci0JfQogCiAJY2ZxX2NsZWFyX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKIAljZnFfY2xlYXJfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSk7CisJY2ZxX2NsZWFyX2NmcXFfcXVldWVfbmV3KGNmcXEpOwogCiAJLyoKIAkgKiBzdG9yZSB3aGF0IHdhcyBsZWZ0IG9mIHRoaXMgc2xpY2UsIGlmIHRoZSBxdWV1ZSBpZGxlZCBvdXQKQEAgLTg2OCwyNiArNjkyLDI1IEBACiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IE5VTEw7CiAKLQkvKgotCSAqIGlmIGN1cnJlbnQgbGlzdCBpcyBub24tZW1wdHksIGdyYWIgZmlyc3QgZW50cnkuIGlmIGl0IGlzIGVtcHR5LAotCSAqIGdldCBuZXh0IHByaW8gbGV2ZWwgYW5kIGdyYWIgZmlyc3QgZW50cnkgdGhlbiBpZiBhbnkgYXJlIHNwbGljZWQKLQkgKi8KLQlpZiAoIWxpc3RfZW1wdHkoJmNmcWQtPmN1cl9ycikgfHwgY2ZxX2dldF9uZXh0X3ByaW9fbGV2ZWwoY2ZxZCkgIT0gLTEpCisJaWYgKCFsaXN0X2VtcHR5KCZjZnFkLT5jdXJfcnIpIHx8IGNmcV9nZXRfbmV4dF9wcmlvX2xldmVsKGNmcWQpICE9IC0xKSB7CisJCS8qCisJCSAqIGlmIGN1cnJlbnQgbGlzdCBpcyBub24tZW1wdHksIGdyYWIgZmlyc3QgZW50cnkuIGlmIGl0IGlzCisJCSAqIGVtcHR5LCBnZXQgbmV4dCBwcmlvIGxldmVsIGFuZCBncmFiIGZpcnN0IGVudHJ5IHRoZW4gaWYgYW55CisJCSAqIGFyZSBzcGxpY2VkCisJCSAqLwogCQljZnFxID0gbGlzdF9lbnRyeV9jZnFxKGNmcWQtPmN1cl9yci5uZXh0KTsKLQotCS8qCi0JICogSWYgbm8gbmV3IHF1ZXVlcyBhcmUgYXZhaWxhYmxlLCBjaGVjayBpZiB0aGUgYnVzeSBsaXN0IGhhcyBzb21lCi0JICogYmVmb3JlIGZhbGxpbmcgYmFjayB0byBpZGxlIGlvLgotCSAqLwotCWlmICghY2ZxcSAmJiAhbGlzdF9lbXB0eSgmY2ZxZC0+YnVzeV9ycikpCisJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmY2ZxZC0+YnVzeV9ycikpIHsKKwkJLyoKKwkJICogSWYgbm8gbmV3IHF1ZXVlcyBhcmUgYXZhaWxhYmxlLCBjaGVjayBpZiB0aGUgYnVzeSBsaXN0IGhhcworCQkgKiBzb21lIGJlZm9yZSBmYWxsaW5nIGJhY2sgdG8gaWRsZSBpby4KKwkJICovCiAJCWNmcXEgPSBsaXN0X2VudHJ5X2NmcXEoY2ZxZC0+YnVzeV9yci5uZXh0KTsKLQotCS8qCi0JICogaWYgd2UgaGF2ZSBpZGxlIHF1ZXVlcyBhbmQgbm8gcnQgb3IgYmUgcXVldWVzIGhhZCBwZW5kaW5nCi0JICogcmVxdWVzdHMsIGVpdGhlciBhbGxvdyBpbW1lZGlhdGUgc2VydmljZSBpZiB0aGUgZ3JhY2UgcGVyaW9kCi0JICogaGFzIHBhc3NlZCBvciBhcm0gdGhlIGlkbGUgZ3JhY2UgdGltZXIKLQkgKi8KLQlpZiAoIWNmcXEgJiYgIWxpc3RfZW1wdHkoJmNmcWQtPmlkbGVfcnIpKSB7CisJfSBlbHNlIGlmICghbGlzdF9lbXB0eSgmY2ZxZC0+aWRsZV9ycikpIHsKKwkJLyoKKwkJICogaWYgd2UgaGF2ZSBpZGxlIHF1ZXVlcyBhbmQgbm8gcnQgb3IgYmUgcXVldWVzIGhhZCBwZW5kaW5nCisJCSAqIHJlcXVlc3RzLCBlaXRoZXIgYWxsb3cgaW1tZWRpYXRlIHNlcnZpY2UgaWYgdGhlIGdyYWNlIHBlcmlvZAorCQkgKiBoYXMgcGFzc2VkIG9yIGFybSB0aGUgaWRsZSBncmFjZSB0aW1lcgorCQkgKi8KIAkJdW5zaWduZWQgbG9uZyBlbmQgPSBjZnFkLT5sYXN0X2VuZF9yZXF1ZXN0ICsgQ0ZRX0lETEVfR1JBQ0U7CiAKIAkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkKQEAgLTk0MiwxNiArNzY1LDE0IEBACiAJcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyB2b2lkIGNmcV9kaXNwYXRjaF9pbnNlcnQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgY2ZxX3JxICpjcnEpCitzdGF0aWMgdm9pZCBjZnFfZGlzcGF0Y2hfaW5zZXJ0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwotCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBjcnEtPmNmcV9xdWV1ZTsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IFJRX0NGUVEocnEpOwogCi0JY2ZxcS0+bmV4dF9jcnEgPSBjZnFfZmluZF9uZXh0X2NycShjZnFkLCBjZnFxLCBjcnEpOwotCWNmcV9yZW1vdmVfcmVxdWVzdChjcnEtPnJlcXVlc3QpOwotCWNmcXEtPm9uX2Rpc3BhdGNoW2NmcV9jcnFfaXNfc3luYyhjcnEpXSsrOwotCWVsdl9kaXNwYXRjaF9zb3J0KHEsIGNycS0+cmVxdWVzdCk7CisJY2ZxX3JlbW92ZV9yZXF1ZXN0KHJxKTsKKwljZnFxLT5vbl9kaXNwYXRjaFtycV9pc19zeW5jKHJxKV0rKzsKKwllbHZfZGlzcGF0Y2hfc29ydChxLCBycSk7CiAKIAlycSA9IGxpc3RfZW50cnkocS0+cXVldWVfaGVhZC5wcmV2LCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KTsKIAljZnFkLT5sYXN0X3NlY3RvciA9IHJxLT5zZWN0b3IgKyBycS0+bnJfc2VjdG9yczsKQEAgLTk2MCwyNCArNzgxLDIzIEBACiAvKgogICogcmV0dXJuIGV4cGlyZWQgZW50cnksIG9yIE5VTEwgdG8ganVzdCBzdGFydCBmcm9tIHNjcmF0Y2ggaW4gcmJ0cmVlCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGNmcV9ycSAqY2ZxX2NoZWNrX2ZpZm8oc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHJlcXVlc3QgKmNmcV9jaGVja19maWZvKHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ZxcS0+Y2ZxZDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0Jc3RydWN0IGNmcV9ycSAqY3JxOworCWludCBmaWZvOwogCiAJaWYgKGNmcV9jZnFxX2ZpZm9fZXhwaXJlKGNmcXEpKQogCQlyZXR1cm4gTlVMTDsKKwlpZiAobGlzdF9lbXB0eSgmY2ZxcS0+ZmlmbykpCisJCXJldHVybiBOVUxMOwogCi0JaWYgKCFsaXN0X2VtcHR5KCZjZnFxLT5maWZvKSkgewotCQlpbnQgZmlmbyA9IGNmcV9jZnFxX2NsYXNzX3N5bmMoY2ZxcSk7CisJZmlmbyA9IGNmcV9jZnFxX2NsYXNzX3N5bmMoY2ZxcSk7CisJcnEgPSBycV9lbnRyeV9maWZvKGNmcXEtPmZpZm8ubmV4dCk7CiAKLQkJY3JxID0gUlFfREFUQShsaXN0X2VudHJ5X2ZpZm8oY2ZxcS0+Zmlmby5uZXh0KSk7Ci0JCXJxID0gY3JxLT5yZXF1ZXN0OwotCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBycS0+c3RhcnRfdGltZSArIGNmcWQtPmNmcV9maWZvX2V4cGlyZVtmaWZvXSkpIHsKLQkJCWNmcV9tYXJrX2NmcXFfZmlmb19leHBpcmUoY2ZxcSk7Ci0JCQlyZXR1cm4gY3JxOwotCQl9CisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcnEtPnN0YXJ0X3RpbWUgKyBjZnFkLT5jZnFfZmlmb19leHBpcmVbZmlmb10pKSB7CisJCWNmcV9tYXJrX2NmcXFfZmlmb19leHBpcmUoY2ZxcSk7CisJCXJldHVybiBycTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTEwNjMsMjUgKzg4MywyNSBAQAogCUJVR19PTihSQl9FTVBUWV9ST09UKCZjZnFxLT5zb3J0X2xpc3QpKTsKIAogCWRvIHsKLQkJc3RydWN0IGNmcV9ycSAqY3JxOworCQlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAKIAkJLyoKIAkJICogZm9sbG93IGV4cGlyZWQgcGF0aCwgZWxzZSBnZXQgZmlyc3QgbmV4dCBhdmFpbGFibGUKIAkJICovCi0JCWlmICgoY3JxID0gY2ZxX2NoZWNrX2ZpZm8oY2ZxcSkpID09IE5VTEwpCi0JCQljcnEgPSBjZnFxLT5uZXh0X2NycTsKKwkJaWYgKChycSA9IGNmcV9jaGVja19maWZvKGNmcXEpKSA9PSBOVUxMKQorCQkJcnEgPSBjZnFxLT5uZXh0X3JxOwogCiAJCS8qCiAJCSAqIGZpbmFsbHksIGluc2VydCByZXF1ZXN0IGludG8gZHJpdmVyIGRpc3BhdGNoIGxpc3QKIAkJICovCi0JCWNmcV9kaXNwYXRjaF9pbnNlcnQoY2ZxZC0+cXVldWUsIGNycSk7CisJCWNmcV9kaXNwYXRjaF9pbnNlcnQoY2ZxZC0+cXVldWUsIHJxKTsKIAogCQljZnFkLT5kaXNwYXRjaF9zbGljZSsrOwogCQlkaXNwYXRjaGVkKys7CiAKIAkJaWYgKCFjZnFkLT5hY3RpdmVfY2ljKSB7Ci0JCQlhdG9taWNfaW5jKCZjcnEtPmlvX2NvbnRleHQtPmlvYy0+cmVmY291bnQpOwotCQkJY2ZxZC0+YWN0aXZlX2NpYyA9IGNycS0+aW9fY29udGV4dDsKKwkJCWF0b21pY19pbmMoJlJRX0NJQyhycSktPmlvYy0+cmVmY291bnQpOworCQkJY2ZxZC0+YWN0aXZlX2NpYyA9IFJRX0NJQyhycSk7CiAJCX0KIAogCQlpZiAoUkJfRU1QVFlfUk9PVCgmY2ZxcS0+c29ydF9saXN0KSkKQEAgLTExMTIsMTMgKzkzMiwxMiBAQAogY2ZxX2ZvcmNlZF9kaXNwYXRjaF9jZnFxcyhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQogewogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEsICpuZXh0OwotCXN0cnVjdCBjZnFfcnEgKmNycTsKIAlpbnQgZGlzcGF0Y2hlZDsKIAogCWRpc3BhdGNoZWQgPSAwOwogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjZnFxLCBuZXh0LCBsaXN0LCBjZnFfbGlzdCkgewotCQl3aGlsZSAoKGNycSA9IGNmcXEtPm5leHRfY3JxKSkgewotCQkJY2ZxX2Rpc3BhdGNoX2luc2VydChjZnFxLT5jZnFkLT5xdWV1ZSwgY3JxKTsKKwkJd2hpbGUgKGNmcXEtPm5leHRfcnEpIHsKKwkJCWNmcV9kaXNwYXRjaF9pbnNlcnQoY2ZxcS0+Y2ZxZC0+cXVldWUsIGNmcXEtPm5leHRfcnEpOwogCQkJZGlzcGF0Y2hlZCsrOwogCQl9CiAJCUJVR19PTighbGlzdF9lbXB0eSgmY2ZxcS0+ZmlmbykpOwpAQCAtMTE5NCw4ICsxMDEzLDggQEAKIH0KIAogLyoKLSAqIHRhc2sgaG9sZHMgb25lIHJlZmVyZW5jZSB0byB0aGUgcXVldWUsIGRyb3BwZWQgd2hlbiB0YXNrIGV4aXRzLiBlYWNoIGNycQotICogaW4tZmxpZ2h0IG9uIHRoaXMgcXVldWUgYWxzbyBob2xkcyBhIHJlZmVyZW5jZSwgZHJvcHBlZCB3aGVuIGNycSBpcyBmcmVlZC4KKyAqIHRhc2sgaG9sZHMgb25lIHJlZmVyZW5jZSB0byB0aGUgcXVldWUsIGRyb3BwZWQgd2hlbiB0YXNrIGV4aXRzLiBlYWNoIHJxCisgKiBpbi1mbGlnaHQgb24gdGhpcyBxdWV1ZSBhbHNvIGhvbGRzIGEgcmVmZXJlbmNlLCBkcm9wcGVkIHdoZW4gcnEgaXMgZnJlZWQuCiAgKgogICogcXVldWUgbG9jayBtdXN0IGJlIGhlbGQgaGVyZS4KICAqLwpAQCAtMTIyMyw3ICsxMDQyLDcgQEAKIAlrbWVtX2NhY2hlX2ZyZWUoY2ZxX3Bvb2wsIGNmcXEpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBjZnFfcXVldWUgKgorc3RhdGljIHN0cnVjdCBjZnFfcXVldWUgKgogX19jZnFfZmluZF9jZnFfaGFzaChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHVuc2lnbmVkIGludCBrZXksIHVuc2lnbmVkIGludCBwcmlvLAogCQkgICAgY29uc3QgaW50IGhhc2h2YWwpCiB7CkBAIC0xMjYwLDYyICsxMDc5LDYzIEBACiAJCWZyZWVkKys7CiAJfQogCi0JaWYgKGF0b21pY19zdWJfYW5kX3Rlc3QoZnJlZWQsICZpb2NfY291bnQpICYmIGlvY19nb25lKQorCWVsdl9pb2NfY291bnRfbW9kKGlvY19jb3VudCwgLWZyZWVkKTsKKworCWlmIChpb2NfZ29uZSAmJiAhZWx2X2lvY19jb3VudF9yZWFkKGlvY19jb3VudCkpCiAJCWNvbXBsZXRlKGlvY19nb25lKTsKIH0KIAotc3RhdGljIHZvaWQgY2ZxX3RyaW0oc3RydWN0IGlvX2NvbnRleHQgKmlvYykKK3N0YXRpYyB2b2lkIGNmcV9leGl0X2NmcXEoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewotCWlvYy0+c2V0X2lvcHJpbyA9IE5VTEw7Ci0JY2ZxX2ZyZWVfaW9fY29udGV4dChpb2MpOworCWlmICh1bmxpa2VseShjZnFxID09IGNmcWQtPmFjdGl2ZV9xdWV1ZSkpCisJCV9fY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgY2ZxcSwgMCk7CisKKwljZnFfcHV0X3F1ZXVlKGNmcXEpOwogfQogCitzdGF0aWMgdm9pZCBfX2NmcV9leGl0X3NpbmdsZV9pb19jb250ZXh0KHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwKKwkJCQkJIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljKQoreworCWxpc3RfZGVsX2luaXQoJmNpYy0+cXVldWVfbGlzdCk7CisJc21wX3dtYigpOworCWNpYy0+a2V5ID0gTlVMTDsKKworCWlmIChjaWMtPmNmcXFbQVNZTkNdKSB7CisJCWNmcV9leGl0X2NmcXEoY2ZxZCwgY2ljLT5jZnFxW0FTWU5DXSk7CisJCWNpYy0+Y2ZxcVtBU1lOQ10gPSBOVUxMOworCX0KKworCWlmIChjaWMtPmNmcXFbU1lOQ10pIHsKKwkJY2ZxX2V4aXRfY2ZxcShjZnFkLCBjaWMtPmNmcXFbU1lOQ10pOworCQljaWMtPmNmcXFbU1lOQ10gPSBOVUxMOworCX0KK30KKworCiAvKgogICogQ2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZAogICovCiBzdGF0aWMgdm9pZCBjZnFfZXhpdF9zaW5nbGVfaW9fY29udGV4dChzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYykKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBjaWMtPmtleTsKLQlyZXF1ZXN0X3F1ZXVlX3QgKnE7CiAKLQlpZiAoIWNmcWQpCi0JCXJldHVybjsKKwlpZiAoY2ZxZCkgeworCQlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBjZnFkLT5xdWV1ZTsKIAotCXEgPSBjZnFkLT5xdWV1ZTsKLQotCVdBUk5fT04oIWlycXNfZGlzYWJsZWQoKSk7Ci0KLQlzcGluX2xvY2socS0+cXVldWVfbG9jayk7Ci0KLQlpZiAoY2ljLT5jZnFxW0FTWU5DXSkgewotCQlpZiAodW5saWtlbHkoY2ljLT5jZnFxW0FTWU5DXSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpKQotCQkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjaWMtPmNmcXFbQVNZTkNdLCAwKTsKLQkJY2ZxX3B1dF9xdWV1ZShjaWMtPmNmcXFbQVNZTkNdKTsKLQkJY2ljLT5jZnFxW0FTWU5DXSA9IE5VTEw7CisJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CisJCV9fY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoY2ZxZCwgY2ljKTsKKwkJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCX0KLQotCWlmIChjaWMtPmNmcXFbU1lOQ10pIHsKLQkJaWYgKHVubGlrZWx5KGNpYy0+Y2ZxcVtTWU5DXSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpKQotCQkJX19jZnFfc2xpY2VfZXhwaXJlZChjZnFkLCBjaWMtPmNmcXFbU1lOQ10sIDApOwotCQljZnFfcHV0X3F1ZXVlKGNpYy0+Y2ZxcVtTWU5DXSk7Ci0JCWNpYy0+Y2ZxcVtTWU5DXSA9IE5VTEw7Ci0JfQotCi0JY2ljLT5rZXkgPSBOVUxMOwotCWxpc3RfZGVsX2luaXQoJmNpYy0+cXVldWVfbGlzdCk7Ci0Jc3Bpbl91bmxvY2socS0+cXVldWVfbG9jayk7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9leGl0X2lvX2NvbnRleHQoc3RydWN0IGlvX2NvbnRleHQgKmlvYykKIHsKIAlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKl9fY2ljOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHJiX25vZGUgKm47CiAKIAkvKgogCSAqIHB1dCB0aGUgcmVmZXJlbmNlIHRoaXMgdGFzayBpcyBob2xkaW5nIHRvIHRoZSB2YXJpb3VzIHF1ZXVlcwogCSAqLwotCXNwaW5fbG9ja19pcnFzYXZlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CiAKIAluID0gcmJfZmlyc3QoJmlvYy0+Y2ljX3Jvb3QpOwogCXdoaWxlIChuICE9IE5VTEwpIHsKQEAgLTEzMjQsMjIgKzExNDQsMjEgQEAKIAkJY2ZxX2V4aXRfc2luZ2xlX2lvX2NvbnRleHQoX19jaWMpOwogCQluID0gcmJfbmV4dChuKTsKIAl9Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjZnFfZXhpdF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKgogY2ZxX2FsbG9jX2lvX2NvbnRleHQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBnZnBfdCBnZnBfbWFzaykKIHsKLQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYyA9IGttZW1fY2FjaGVfYWxsb2MoY2ZxX2lvY19wb29sLCBnZnBfbWFzayk7CisJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAKKwljaWMgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoY2ZxX2lvY19wb29sLCBnZnBfbWFzaywgY2ZxZC0+cXVldWUtPm5vZGUpOwogCWlmIChjaWMpIHsKIAkJbWVtc2V0KGNpYywgMCwgc2l6ZW9mKCpjaWMpKTsKIAkJY2ljLT5sYXN0X2VuZF9yZXF1ZXN0ID0gamlmZmllczsKIAkJSU5JVF9MSVNUX0hFQUQoJmNpYy0+cXVldWVfbGlzdCk7CiAJCWNpYy0+ZHRvciA9IGNmcV9mcmVlX2lvX2NvbnRleHQ7CiAJCWNpYy0+ZXhpdCA9IGNmcV9leGl0X2lvX2NvbnRleHQ7Ci0JCWF0b21pY19pbmMoJmlvY19jb3VudCk7CisJCWVsdl9pb2NfY291bnRfaW5jKGlvY19jb3VudCk7CiAJfQogCiAJcmV0dXJuIGNpYzsKQEAgLTE0MjAsMTUgKzEyMzksMTIgQEAKIAlzcGluX3VubG9jayhjZnFkLT5xdWV1ZS0+cXVldWVfbG9jayk7CiB9CiAKLS8qCi0gKiBjYWxsYmFjayBmcm9tIHN5c19pb3ByaW9fc2V0LCBpcnFzIGFyZSBkaXNhYmxlZAotICovCi1zdGF0aWMgaW50IGNmcV9pb2Nfc2V0X2lvcHJpbyhzdHJ1Y3QgaW9fY29udGV4dCAqaW9jLCB1bnNpZ25lZCBpbnQgaW9wcmlvKQorc3RhdGljIHZvaWQgY2ZxX2lvY19zZXRfaW9wcmlvKHN0cnVjdCBpb19jb250ZXh0ICppb2MpCiB7CiAJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWM7CiAJc3RydWN0IHJiX25vZGUgKm47CiAKLQlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOworCWlvYy0+aW9wcmlvX2NoYW5nZWQgPSAwOwogCiAJbiA9IHJiX2ZpcnN0KCZpb2MtPmNpY19yb290KTsKIAl3aGlsZSAobiAhPSBOVUxMKSB7CkBAIC0xNDM3LDEwICsxMjUzLDYgQEAKIAkJY2hhbmdlZF9pb3ByaW8oY2ljKTsKIAkJbiA9IHJiX25leHQobik7CiAJfQotCi0Jc3Bpbl91bmxvY2soJmNmcV9leGl0X2xvY2spOwotCi0JcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX3F1ZXVlICoKQEAgLTE0NjAsMTIgKzEyNzIsMTggQEAKIAkJCWNmcXEgPSBuZXdfY2ZxcTsKIAkJCW5ld19jZnFxID0gTlVMTDsKIAkJfSBlbHNlIGlmIChnZnBfbWFzayAmIF9fR0ZQX1dBSVQpIHsKKwkJCS8qCisJCQkgKiBJbmZvcm0gdGhlIGFsbG9jYXRvciBvZiB0aGUgZmFjdCB0aGF0IHdlIHdpbGwKKwkJCSAqIGp1c3QgcmVwZWF0IHRoaXMgYWxsb2NhdGlvbiBpZiBpdCBmYWlscywgdG8gYWxsb3cKKwkJCSAqIHRoZSBhbGxvY2F0b3IgdG8gZG8gd2hhdGV2ZXIgaXQgbmVlZHMgdG8gYXR0ZW1wdCB0bworCQkJICogZnJlZSBtZW1vcnkuCisJCQkgKi8KIAkJCXNwaW5fdW5sb2NrX2lycShjZnFkLT5xdWV1ZS0+cXVldWVfbG9jayk7Ci0JCQluZXdfY2ZxcSA9IGttZW1fY2FjaGVfYWxsb2MoY2ZxX3Bvb2wsIGdmcF9tYXNrKTsKKwkJCW5ld19jZnFxID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNmcV9wb29sLCBnZnBfbWFza3xfX0dGUF9OT0ZBSUwsIGNmcWQtPnF1ZXVlLT5ub2RlKTsKIAkJCXNwaW5fbG9ja19pcnEoY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2spOwogCQkJZ290byByZXRyeTsKIAkJfSBlbHNlIHsKLQkJCWNmcXEgPSBrbWVtX2NhY2hlX2FsbG9jKGNmcV9wb29sLCBnZnBfbWFzayk7CisJCQljZnFxID0ga21lbV9jYWNoZV9hbGxvY19ub2RlKGNmcV9wb29sLCBnZnBfbWFzaywgY2ZxZC0+cXVldWUtPm5vZGUpOwogCQkJaWYgKCFjZnFxKQogCQkJCWdvdG8gb3V0OwogCQl9CkBAIC0xNDgwLDEzICsxMjk4LDEzIEBACiAJCWhsaXN0X2FkZF9oZWFkKCZjZnFxLT5jZnFfaGFzaCwgJmNmcWQtPmNmcV9oYXNoW2hhc2h2YWxdKTsKIAkJYXRvbWljX3NldCgmY2ZxcS0+cmVmLCAwKTsKIAkJY2ZxcS0+Y2ZxZCA9IGNmcWQ7Ci0JCWNmcXEtPnNlcnZpY2VfbGFzdCA9IDA7CiAJCS8qCiAJCSAqIHNldCAtPnNsaWNlX2xlZnQgdG8gYWxsb3cgcHJlZW1wdGlvbiBmb3IgYSBuZXcgcHJvY2VzcwogCQkgKi8KIAkJY2ZxcS0+c2xpY2VfbGVmdCA9IDIgKiBjZnFkLT5jZnFfc2xpY2VfaWRsZTsKIAkJY2ZxX21hcmtfY2ZxcV9pZGxlX3dpbmRvdyhjZnFxKTsKIAkJY2ZxX21hcmtfY2ZxcV9wcmlvX2NoYW5nZWQoY2ZxcSk7CisJCWNmcV9tYXJrX2NmcXFfcXVldWVfbmV3KGNmcXEpOwogCQljZnFfaW5pdF9wcmlvX2RhdGEoY2ZxcSk7CiAJfQogCkBAIC0xNTAyLDEyICsxMzIwLDEwIEBACiBzdGF0aWMgdm9pZAogY2ZxX2Ryb3BfZGVhZF9jaWMoc3RydWN0IGlvX2NvbnRleHQgKmlvYywgc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMpCiB7Ci0Jc3Bpbl9sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlXQVJOX09OKCFsaXN0X2VtcHR5KCZjaWMtPnF1ZXVlX2xpc3QpKTsKIAlyYl9lcmFzZSgmY2ljLT5yYl9ub2RlLCAmaW9jLT5jaWNfcm9vdCk7Ci0JbGlzdF9kZWxfaW5pdCgmY2ljLT5xdWV1ZV9saXN0KTsKLQlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAJa21lbV9jYWNoZV9mcmVlKGNmcV9pb2NfcG9vbCwgY2ljKTsKLQlhdG9taWNfZGVjKCZpb2NfY291bnQpOworCWVsdl9pb2NfY291bnRfZGVjKGlvY19jb3VudCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKgpAQCAtMTU1MSw3ICsxMzY3LDYgQEAKIAljaWMtPmlvYyA9IGlvYzsKIAljaWMtPmtleSA9IGNmcWQ7CiAKLQlpb2MtPnNldF9pb3ByaW8gPSBjZnFfaW9jX3NldF9pb3ByaW87CiByZXN0YXJ0OgogCXBhcmVudCA9IE5VTEw7CiAJcCA9ICZpb2MtPmNpY19yb290LnJiX25vZGU7CkBAIC0xNTczLDExICsxMzg4LDEyIEBACiAJCQlCVUcoKTsKIAl9CiAKLQlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCXJiX2xpbmtfbm9kZSgmY2ljLT5yYl9ub2RlLCBwYXJlbnQsIHApOwogCXJiX2luc2VydF9jb2xvcigmY2ljLT5yYl9ub2RlLCAmaW9jLT5jaWNfcm9vdCk7CisKKwlzcGluX2xvY2tfaXJxKGNmcWQtPnF1ZXVlLT5xdWV1ZV9sb2NrKTsKIAlsaXN0X2FkZCgmY2ljLT5xdWV1ZV9saXN0LCAmY2ZxZC0+Y2ljX2xpc3QpOwotCXNwaW5fdW5sb2NrKCZjZnFfZXhpdF9sb2NrKTsKKwlzcGluX3VubG9ja19pcnEoY2ZxZC0+cXVldWUtPnF1ZXVlX2xvY2spOwogfQogCiAvKgpAQCAtMTU5Myw3ICsxNDA5LDcgQEAKIAogCW1pZ2h0X3NsZWVwX2lmKGdmcF9tYXNrICYgX19HRlBfV0FJVCk7CiAKLQlpb2MgPSBnZXRfaW9fY29udGV4dChnZnBfbWFzayk7CisJaW9jID0gZ2V0X2lvX2NvbnRleHQoZ2ZwX21hc2ssIGNmcWQtPnF1ZXVlLT5ub2RlKTsKIAlpZiAoIWlvYykKIAkJcmV0dXJuIE5VTEw7CiAKQEAgLTE2MDcsNiArMTQyMywxMCBAQAogCiAJY2ZxX2NpY19saW5rKGNmcWQsIGlvYywgY2ljKTsKIG91dDoKKwlzbXBfcmVhZF9iYXJyaWVyX2RlcGVuZHMoKTsKKwlpZiAodW5saWtlbHkoaW9jLT5pb3ByaW9fY2hhbmdlZCkpCisJCWNmcV9pb2Nfc2V0X2lvcHJpbyhpb2MpOworCiAJcmV0dXJuIGNpYzsKIGVycjoKIAlwdXRfaW9fY29udGV4dChpb2MpOwpAQCAtMTY0MCwxNSArMTQ2MCwxNSBAQAogCiBzdGF0aWMgdm9pZAogY2ZxX3VwZGF0ZV9pb19zZWVrdGltZShzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljLAotCQkgICAgICAgc3RydWN0IGNmcV9ycSAqY3JxKQorCQkgICAgICAgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCXNlY3Rvcl90IHNkaXN0OwogCXU2NCB0b3RhbDsKIAotCWlmIChjaWMtPmxhc3RfcmVxdWVzdF9wb3MgPCBjcnEtPnJlcXVlc3QtPnNlY3RvcikKLQkJc2Rpc3QgPSBjcnEtPnJlcXVlc3QtPnNlY3RvciAtIGNpYy0+bGFzdF9yZXF1ZXN0X3BvczsKKwlpZiAoY2ljLT5sYXN0X3JlcXVlc3RfcG9zIDwgcnEtPnNlY3RvcikKKwkJc2Rpc3QgPSBycS0+c2VjdG9yIC0gY2ljLT5sYXN0X3JlcXVlc3RfcG9zOwogCWVsc2UKLQkJc2Rpc3QgPSBjaWMtPmxhc3RfcmVxdWVzdF9wb3MgLSBjcnEtPnJlcXVlc3QtPnNlY3RvcjsKKwkJc2Rpc3QgPSBjaWMtPmxhc3RfcmVxdWVzdF9wb3MgLSBycS0+c2VjdG9yOwogCiAJLyoKIAkgKiBEb24ndCBhbGxvdyB0aGUgc2VlayBkaXN0YW5jZSB0byBnZXQgdG9vIGxhcmdlIGZyb20gdGhlCkBAIC0xNjk5LDcgKzE1MTksNyBAQAogICovCiBzdGF0aWMgaW50CiBjZnFfc2hvdWxkX3ByZWVtcHQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpuZXdfY2ZxcSwKLQkJICAgc3RydWN0IGNmcV9ycSAqY3JxKQorCQkgICBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IGNmcWQtPmFjdGl2ZV9xdWV1ZTsKIApAQCAtMTcxOCw3ICsxNTM4LDE3IEBACiAJICovCiAJaWYgKG5ld19jZnFxLT5zbGljZV9sZWZ0IDwgY2ZxZC0+Y2ZxX3NsaWNlX2lkbGUpCiAJCXJldHVybiAwOwotCWlmIChjZnFfY3JxX2lzX3N5bmMoY3JxKSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwkvKgorCSAqIGlmIHRoZSBuZXcgcmVxdWVzdCBpcyBzeW5jLCBidXQgdGhlIGN1cnJlbnRseSBydW5uaW5nIHF1ZXVlIGlzCisJICogbm90LCBsZXQgdGhlIHN5bmMgcmVxdWVzdCBoYXZlIHByaW9yaXR5LgorCSAqLworCWlmIChycV9pc19zeW5jKHJxKSAmJiAhY2ZxX2NmcXFfc3luYyhjZnFxKSkKKwkJcmV0dXJuIDE7CisJLyoKKwkgKiBTbyBib3RoIHF1ZXVlcyBhcmUgc3luYy4gTGV0IHRoZSBuZXcgcmVxdWVzdCBnZXQgZGlzayB0aW1lIGlmCisJICogaXQncyBhIG1ldGFkYXRhIHJlcXVlc3QgYW5kIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGRvaW5nIHJlZ3VsYXIgSU8uCisJICovCisJaWYgKHJxX2lzX21ldGEocnEpICYmICFjZnFxLT5tZXRhX3BlbmRpbmcpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC0xNzMwLDQ3ICsxNTYwLDQ1IEBACiAgKi8KIHN0YXRpYyB2b2lkIGNmcV9wcmVlbXB0X3F1ZXVlKHN0cnVjdCBjZnFfZGF0YSAqY2ZxZCwgc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSkKIHsKLQlzdHJ1Y3QgY2ZxX3F1ZXVlICpfX2NmcXEsICpuZXh0OwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKF9fY2ZxcSwgbmV4dCwgJmNmcWQtPmN1cl9yciwgY2ZxX2xpc3QpCi0JCWNmcV9yZXNvcnRfcnJfbGlzdChfX2NmcXEsIDEpOworCWNmcV9zbGljZV9leHBpcmVkKGNmcWQsIDEpOwogCiAJaWYgKCFjZnFxLT5zbGljZV9sZWZ0KQogCQljZnFxLT5zbGljZV9sZWZ0ID0gY2ZxX3ByaW9fdG9fc2xpY2UoY2ZxZCwgY2ZxcSkgLyAyOwogCisJLyoKKwkgKiBQdXQgdGhlIG5ldyBxdWV1ZSBhdCB0aGUgZnJvbnQgb2YgdGhlIG9mIHRoZSBjdXJyZW50IGxpc3QsCisJICogc28gd2Uga25vdyB0aGF0IGl0IHdpbGwgYmUgc2VsZWN0ZWQgbmV4dC4KKwkgKi8KKwlCVUdfT04oIWNmcV9jZnFxX29uX3JyKGNmcXEpKTsKKwlsaXN0X21vdmUoJmNmcXEtPmNmcV9saXN0LCAmY2ZxZC0+Y3VyX3JyKTsKKwogCWNmcXEtPnNsaWNlX2VuZCA9IGNmcXEtPnNsaWNlX2xlZnQgKyBqaWZmaWVzOwotCWNmcV9zbGljZV9leHBpcmVkKGNmcWQsIDEpOwotCV9fY2ZxX3NldF9hY3RpdmVfcXVldWUoY2ZxZCwgY2ZxcSk7CiB9CiAKIC8qCi0gKiBzaG91bGQgcmVhbGx5IGJlIGEgbGxfcndfYmxrLmMgaGVscGVyCi0gKi8KLXN0YXRpYyB2b2lkIGNmcV9zdGFydF9xdWV1ZWluZyhzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCi17Ci0JcmVxdWVzdF9xdWV1ZV90ICpxID0gY2ZxZC0+cXVldWU7Ci0KLQlpZiAoIWJsa19xdWV1ZV9wbHVnZ2VkKHEpKQotCQlxLT5yZXF1ZXN0X2ZuKHEpOwotCWVsc2UKLQkJX19nZW5lcmljX3VucGx1Z19kZXZpY2UocSk7Ci19Ci0KLS8qCi0gKiBDYWxsZWQgd2hlbiBhIG5ldyBmcyByZXF1ZXN0IChjcnEpIGlzIGFkZGVkICh0byBjZnFxKS4gQ2hlY2sgaWYgdGhlcmUncworICogQ2FsbGVkIHdoZW4gYSBuZXcgZnMgcmVxdWVzdCAocnEpIGlzIGFkZGVkICh0byBjZnFxKS4gQ2hlY2sgaWYgdGhlcmUncwogICogc29tZXRoaW5nIHdlIHNob3VsZCBkbyBhYm91dCBpdAogICovCiBzdGF0aWMgdm9pZAotY2ZxX2NycV9lbnF1ZXVlZChzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEsCi0JCSBzdHJ1Y3QgY2ZxX3JxICpjcnEpCitjZnFfcnFfZW5xdWV1ZWQoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAorCQlzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBjcnEtPmlvX2NvbnRleHQ7CisJc3RydWN0IGNmcV9pb19jb250ZXh0ICpjaWMgPSBSUV9DSUMocnEpOworCisJaWYgKHJxX2lzX21ldGEocnEpKQorCQljZnFxLT5tZXRhX3BlbmRpbmcrKzsKKworCS8qCisJICogY2hlY2sgaWYgdGhpcyByZXF1ZXN0IGlzIGEgYmV0dGVyIG5leHQtc2VydmUgY2FuZGlkYXRlKSkgeworCSAqLworCWNmcXEtPm5leHRfcnEgPSBjZnFfY2hvb3NlX3JlcShjZnFkLCBjZnFxLT5uZXh0X3JxLCBycSk7CisJQlVHX09OKCFjZnFxLT5uZXh0X3JxKTsKIAogCS8qCiAJICogd2UgbmV2ZXIgd2FpdCBmb3IgYW4gYXN5bmMgcmVxdWVzdCBhbmQgd2UgZG9uJ3QgYWxsb3cgcHJlZW1wdGlvbgogCSAqIG9mIGFuIGFzeW5jIHJlcXVlc3QuIHNvIGp1c3QgcmV0dXJuIGVhcmx5CiAJICovCi0JaWYgKCFjZnFfY3JxX2lzX3N5bmMoY3JxKSkgeworCWlmICghcnFfaXNfc3luYyhycSkpIHsKIAkJLyoKIAkJICogc3luYyBwcm9jZXNzIGlzc3VlZCBhbiBhc3luYyByZXF1ZXN0LCBpZiBpdCdzIHdhaXRpbmcKIAkJICogdGhlbiBleHBpcmUgaXQgYW5kIGtpY2sgcnEgaGFuZGxpbmcuCkBAIC0xNzc4LDE3ICsxNjA2LDE3IEBACiAJCWlmIChjaWMgPT0gY2ZxZC0+YWN0aXZlX2NpYyAmJgogCQkgICAgZGVsX3RpbWVyKCZjZnFkLT5pZGxlX3NsaWNlX3RpbWVyKSkgewogCQkJY2ZxX3NsaWNlX2V4cGlyZWQoY2ZxZCwgMCk7Ci0JCQljZnFfc3RhcnRfcXVldWVpbmcoY2ZxZCwgY2ZxcSk7CisJCQlibGtfc3RhcnRfcXVldWVpbmcoY2ZxZC0+cXVldWUpOwogCQl9CiAJCXJldHVybjsKIAl9CiAKIAljZnFfdXBkYXRlX2lvX3RoaW5rdGltZShjZnFkLCBjaWMpOwotCWNmcV91cGRhdGVfaW9fc2Vla3RpbWUoY2ZxZCwgY2ljLCBjcnEpOworCWNmcV91cGRhdGVfaW9fc2Vla3RpbWUoY2ZxZCwgY2ljLCBycSk7CiAJY2ZxX3VwZGF0ZV9pZGxlX3dpbmRvdyhjZnFkLCBjZnFxLCBjaWMpOwogCiAJY2ljLT5sYXN0X3F1ZXVlID0gamlmZmllczsKLQljaWMtPmxhc3RfcmVxdWVzdF9wb3MgPSBjcnEtPnJlcXVlc3QtPnNlY3RvciArIGNycS0+cmVxdWVzdC0+bnJfc2VjdG9yczsKKwljaWMtPmxhc3RfcmVxdWVzdF9wb3MgPSBycS0+c2VjdG9yICsgcnEtPm5yX3NlY3RvcnM7CiAKIAlpZiAoY2ZxcSA9PSBjZnFkLT5hY3RpdmVfcXVldWUpIHsKIAkJLyoKQEAgLTE3OTksOSArMTYyNyw5IEBACiAJCWlmIChjZnFfY2ZxcV93YWl0X3JlcXVlc3QoY2ZxcSkpIHsKIAkJCWNmcV9tYXJrX2NmcXFfbXVzdF9kaXNwYXRjaChjZnFxKTsKIAkJCWRlbF90aW1lcigmY2ZxZC0+aWRsZV9zbGljZV90aW1lcik7Ci0JCQljZnFfc3RhcnRfcXVldWVpbmcoY2ZxZCwgY2ZxcSk7CisJCQlibGtfc3RhcnRfcXVldWVpbmcoY2ZxZC0+cXVldWUpOwogCQl9Ci0JfSBlbHNlIGlmIChjZnFfc2hvdWxkX3ByZWVtcHQoY2ZxZCwgY2ZxcSwgY3JxKSkgeworCX0gZWxzZSBpZiAoY2ZxX3Nob3VsZF9wcmVlbXB0KGNmcWQsIGNmcXEsIHJxKSkgewogCQkvKgogCQkgKiBub3QgdGhlIGFjdGl2ZSBxdWV1ZSAtIGV4cGlyZSBjdXJyZW50IHNsaWNlIGlmIGl0IGlzCiAJCSAqIGlkbGUgYW5kIGhhcyBleHBpcmVkIGl0J3MgbWVhbiB0aGlua3RpbWUgb3IgdGhpcyBuZXcgcXVldWUKQEAgLTE4MDksMzQgKzE2MzcsMzIgQEAKIAkJICovCiAJCWNmcV9wcmVlbXB0X3F1ZXVlKGNmcWQsIGNmcXEpOwogCQljZnFfbWFya19jZnFxX211c3RfZGlzcGF0Y2goY2ZxcSk7Ci0JCWNmcV9zdGFydF9xdWV1ZWluZyhjZnFkLCBjZnFxKTsKKwkJYmxrX3N0YXJ0X3F1ZXVlaW5nKGNmcWQtPnF1ZXVlKTsKIAl9CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9pbnNlcnRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgY2ZxX3JxICpjcnEgPSBSUV9EQVRBKHJxKTsKLQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY3JxLT5jZnFfcXVldWU7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IFJRX0NGUVEocnEpOwogCiAJY2ZxX2luaXRfcHJpb19kYXRhKGNmcXEpOwogCi0JY2ZxX2FkZF9jcnFfcmIoY3JxKTsKKwljZnFfYWRkX3JxX3JiKHJxKTsKKworCWlmICghY2ZxX2NmcXFfb25fcnIoY2ZxcSkpCisJCWNmcV9hZGRfY2ZxcV9ycihjZnFkLCBjZnFxKTsKIAogCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZjZnFxLT5maWZvKTsKIAotCWlmIChycV9tZXJnZWFibGUocnEpKQotCQljZnFfYWRkX2NycV9oYXNoKGNmcWQsIGNycSk7Ci0KLQljZnFfY3JxX2VucXVldWVkKGNmcWQsIGNmcXEsIGNycSk7CisJY2ZxX3JxX2VucXVldWVkKGNmcWQsIGNmcXEsIHJxKTsKIH0KIAogc3RhdGljIHZvaWQgY2ZxX2NvbXBsZXRlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXN0cnVjdCBjZnFfcnEgKmNycSA9IFJRX0RBVEEocnEpOwotCXN0cnVjdCBjZnFfcXVldWUgKmNmcXEgPSBjcnEtPmNmcV9xdWV1ZTsKKwlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gUlFfQ0ZRUShycSk7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gY2ZxcS0+Y2ZxZDsKLQljb25zdCBpbnQgc3luYyA9IGNmcV9jcnFfaXNfc3luYyhjcnEpOworCWNvbnN0IGludCBzeW5jID0gcnFfaXNfc3luYyhycSk7CiAJdW5zaWduZWQgbG9uZyBub3c7CiAKIAlub3cgPSBqaWZmaWVzOwpAQCAtMTg0OSwxNSArMTY3NSwxMSBAQAogCWlmICghY2ZxX2NsYXNzX2lkbGUoY2ZxcSkpCiAJCWNmcWQtPmxhc3RfZW5kX3JlcXVlc3QgPSBub3c7CiAKLQlpZiAoIWNmcV9jZnFxX2Rpc3BhdGNoZWQoY2ZxcSkpIHsKLQkJaWYgKGNmcV9jZnFxX29uX3JyKGNmcXEpKSB7Ci0JCQljZnFxLT5zZXJ2aWNlX2xhc3QgPSBub3c7Ci0JCQljZnFfcmVzb3J0X3JyX2xpc3QoY2ZxcSwgMCk7Ci0JCX0KLQl9CisJaWYgKCFjZnFfY2ZxcV9kaXNwYXRjaGVkKGNmcXEpICYmIGNmcV9jZnFxX29uX3JyKGNmcXEpKQorCQljZnFfcmVzb3J0X3JyX2xpc3QoY2ZxcSwgMCk7CiAKIAlpZiAoc3luYykKLQkJY3JxLT5pb19jb250ZXh0LT5sYXN0X2VuZF9yZXF1ZXN0ID0gbm93OworCQlSUV9DSUMocnEpLT5sYXN0X2VuZF9yZXF1ZXN0ID0gbm93OwogCiAJLyoKIAkgKiBJZiB0aGlzIGlzIHRoZSBhY3RpdmUgcXVldWUsIGNoZWNrIGlmIGl0IG5lZWRzIHRvIGJlIGV4cGlyZWQsCkBAIC0xODczLDMwICsxNjk1LDYgQEAKIAl9CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCi1jZnFfZm9ybWVyX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCi17Ci0Jc3RydWN0IGNmcV9ycSAqY3JxID0gUlFfREFUQShycSk7Ci0Jc3RydWN0IHJiX25vZGUgKnJicHJldiA9IHJiX3ByZXYoJmNycS0+cmJfbm9kZSk7Ci0KLQlpZiAocmJwcmV2KQotCQlyZXR1cm4gcmJfZW50cnlfY3JxKHJicHJldiktPnJlcXVlc3Q7Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQotc3RhdGljIHN0cnVjdCByZXF1ZXN0ICoKLWNmcV9sYXR0ZXJfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgY2ZxX3JxICpjcnEgPSBSUV9EQVRBKHJxKTsKLQlzdHJ1Y3QgcmJfbm9kZSAqcmJuZXh0ID0gcmJfbmV4dCgmY3JxLT5yYl9ub2RlKTsKLQotCWlmIChyYm5leHQpCi0JCXJldHVybiByYl9lbnRyeV9jcnEocmJuZXh0KS0+cmVxdWVzdDsKLQotCXJldHVybiBOVUxMOwotfQotCiAvKgogICogd2UgdGVtcG9yYXJpbHkgYm9vc3QgbG93ZXIgcHJpb3JpdHkgcXVldWVzIGlmIHRoZXkgYXJlIGhvbGRpbmcgZnMgZXhjbHVzaXZlCiAgKiByZXNvdXJjZXMuIHRoZXkgYXJlIGJvb3N0ZWQgdG8gbm9ybWFsIHByaW8gKENMQVNTX0JFLzQpCkBAIC0xOTMzLDkgKzE3MzEsNyBAQAogCQljZnFfcmVzb3J0X3JyX2xpc3QoY2ZxcSwgMCk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50Ci1fX2NmcV9tYXlfcXVldWUoc3RydWN0IGNmcV9kYXRhICpjZnFkLCBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxLAotCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGludCBydykKK3N0YXRpYyBpbmxpbmUgaW50IF9fY2ZxX21heV9xdWV1ZShzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxKQogewogCWlmICgoY2ZxX2NmcXFfd2FpdF9yZXF1ZXN0KGNmcXEpIHx8IGNmcV9jZnFxX211c3RfYWxsb2MoY2ZxcSkpICYmCiAJICAgICFjZnFfY2ZxcV9tdXN0X2FsbG9jX3NsaWNlKGNmcXEpKSB7CkBAIC0xOTQ2LDcgKzE3NDIsNyBAQAogCXJldHVybiBFTFZfTVFVRVVFX01BWTsKIH0KIAotc3RhdGljIGludCBjZnFfbWF5X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8pCitzdGF0aWMgaW50IGNmcV9tYXlfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgcncpCiB7CiAJc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2sgPSBjdXJyZW50OwpAQCAtMTk2Myw0OCArMTc1OSwzMCBAQAogCQljZnFfaW5pdF9wcmlvX2RhdGEoY2ZxcSk7CiAJCWNmcV9wcmlvX2Jvb3N0KGNmcXEpOwogCi0JCXJldHVybiBfX2NmcV9tYXlfcXVldWUoY2ZxZCwgY2ZxcSwgdHNrLCBydyk7CisJCXJldHVybiBfX2NmcV9tYXlfcXVldWUoY2ZxcSk7CiAJfQogCiAJcmV0dXJuIEVMVl9NUVVFVUVfTUFZOwogfQogCi1zdGF0aWMgdm9pZCBjZnFfY2hlY2tfd2FpdGVycyhyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBjZnFfcXVldWUgKmNmcXEpCi17Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0KLQlpZiAodW5saWtlbHkoY2ZxZC0+cnFfc3RhcnZlZCkpIHsKLQkJc3RydWN0IHJlcXVlc3RfbGlzdCAqcmwgPSAmcS0+cnE7Ci0KLQkJc21wX21iKCk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZybC0+d2FpdFtSRUFEXSkpCi0JCQl3YWtlX3VwKCZybC0+d2FpdFtSRUFEXSk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZybC0+d2FpdFtXUklURV0pKQotCQkJd2FrZV91cCgmcmwtPndhaXRbV1JJVEVdKTsKLQl9Ci19Ci0KIC8qCiAgKiBxdWV1ZSBsb2NrIGhlbGQgaGVyZQogICovCiBzdGF0aWMgdm9pZCBjZnFfcHV0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGNmcV9ycSAqY3JxID0gUlFfREFUQShycSk7CisJc3RydWN0IGNmcV9xdWV1ZSAqY2ZxcSA9IFJRX0NGUVEocnEpOwogCi0JaWYgKGNycSkgewotCQlzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxID0gY3JxLT5jZnFfcXVldWU7CisJaWYgKGNmcXEpIHsKIAkJY29uc3QgaW50IHJ3ID0gcnFfZGF0YV9kaXIocnEpOwogCiAJCUJVR19PTighY2ZxcS0+YWxsb2NhdGVkW3J3XSk7CiAJCWNmcXEtPmFsbG9jYXRlZFtyd10tLTsKIAotCQlwdXRfaW9fY29udGV4dChjcnEtPmlvX2NvbnRleHQtPmlvYyk7CisJCXB1dF9pb19jb250ZXh0KFJRX0NJQyhycSktPmlvYyk7CiAKLQkJbWVtcG9vbF9mcmVlKGNycSwgY2ZxZC0+Y3JxX3Bvb2wpOwogCQlycS0+ZWxldmF0b3JfcHJpdmF0ZSA9IE5VTEw7CisJCXJxLT5lbGV2YXRvcl9wcml2YXRlMiA9IE5VTEw7CiAKLQkJY2ZxX2NoZWNrX3dhaXRlcnMocSwgY2ZxcSk7CiAJCWNmcV9wdXRfcXVldWUoY2ZxcSk7CiAJfQogfQpAQCAtMjAxMyw4ICsxNzkxLDcgQEAKICAqIEFsbG9jYXRlIGNmcSBkYXRhIHN0cnVjdHVyZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgcmVxdWVzdC4KICAqLwogc3RhdGljIGludAotY2ZxX3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sCi0JCWdmcF90IGdmcF9tYXNrKQorY2ZxX3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBnZnBfdCBnZnBfbWFzaykKIHsKIAlzdHJ1Y3QgY2ZxX2RhdGEgKmNmcWQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayA9IGN1cnJlbnQ7CkBAIC0yMDIyLDcgKzE3OTksNiBAQAogCWNvbnN0IGludCBydyA9IHJxX2RhdGFfZGlyKHJxKTsKIAlwaWRfdCBrZXkgPSBjZnFfcXVldWVfcGlkKHRzaywgcncpOwogCXN0cnVjdCBjZnFfcXVldWUgKmNmcXE7Ci0Jc3RydWN0IGNmcV9ycSAqY3JxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGlzX3N5bmMgPSBrZXkgIT0gQ0ZRX0tFWV9BU1lOQzsKIApAQCAtMjA0Niw0MiArMTgyMiwxOCBAQAogCiAJY2ZxcS0+YWxsb2NhdGVkW3J3XSsrOwogCWNmcV9jbGVhcl9jZnFxX211c3RfYWxsb2MoY2ZxcSk7Ci0JY2ZxZC0+cnFfc3RhcnZlZCA9IDA7CiAJYXRvbWljX2luYygmY2ZxcS0+cmVmKTsKKwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogCi0JY3JxID0gbWVtcG9vbF9hbGxvYyhjZnFkLT5jcnFfcG9vbCwgZ2ZwX21hc2spOwotCWlmIChjcnEpIHsKLQkJUkJfQ0xFQVJfTk9ERSgmY3JxLT5yYl9ub2RlKTsKLQkJY3JxLT5yYl9rZXkgPSAwOwotCQljcnEtPnJlcXVlc3QgPSBycTsKLQkJSU5JVF9ITElTVF9OT0RFKCZjcnEtPmhhc2gpOwotCQljcnEtPmNmcV9xdWV1ZSA9IGNmcXE7Ci0JCWNycS0+aW9fY29udGV4dCA9IGNpYzsKKwlycS0+ZWxldmF0b3JfcHJpdmF0ZSA9IGNpYzsKKwlycS0+ZWxldmF0b3JfcHJpdmF0ZTIgPSBjZnFxOworCXJldHVybiAwOwogCi0JCWlmIChpc19zeW5jKQotCQkJY2ZxX21hcmtfY3JxX2lzX3N5bmMoY3JxKTsKLQkJZWxzZQotCQkJY2ZxX2NsZWFyX2NycV9pc19zeW5jKGNycSk7Ci0KLQkJcnEtPmVsZXZhdG9yX3ByaXZhdGUgPSBjcnE7Ci0JCXJldHVybiAwOwotCX0KLQotCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQljZnFxLT5hbGxvY2F0ZWRbcnddLS07Ci0JaWYgKCEoY2ZxcS0+YWxsb2NhdGVkWzBdICsgY2ZxcS0+YWxsb2NhdGVkWzFdKSkKLQkJY2ZxX21hcmtfY2ZxcV9tdXN0X2FsbG9jKGNmcXEpOwotCWNmcV9wdXRfcXVldWUoY2ZxcSk7CiBxdWV1ZV9mYWlsOgogCWlmIChjaWMpCiAJCXB1dF9pb19jb250ZXh0KGNpYy0+aW9jKTsKLQkvKgotCSAqIG1hcmsgdXMgcnEgYWxsb2NhdGlvbiBzdGFydmVkLiB3ZSBuZWVkIHRvIGtpY2tzdGFydCB0aGUgcHJvY2VzcwotCSAqIG91cnNlbHZlcyBpZiB0aGVyZSBhcmUgbm8gcGVuZGluZyByZXF1ZXN0cyB0aGF0IGNhbiBkbyBpdCBmb3IgdXMuCi0JICogdGhhdCB3b3VsZCBiZSBhbiBleHRyZW1lbHkgcmFyZSBPT00gc2l0dWF0aW9uCi0JICovCi0JY2ZxZC0+cnFfc3RhcnZlZCA9IDE7CisKIAljZnFfc2NoZWR1bGVfZGlzcGF0Y2goY2ZxZCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIDE7CkBAIC0yMDkwLDI3ICsxODQyLDEwIEBACiBzdGF0aWMgdm9pZCBjZnFfa2lja19xdWV1ZSh2b2lkICpkYXRhKQogewogCXJlcXVlc3RfcXVldWVfdCAqcSA9IGRhdGE7Ci0Jc3RydWN0IGNmcV9kYXRhICpjZnFkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKLQotCWlmIChjZnFkLT5ycV9zdGFydmVkKSB7Ci0JCXN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsID0gJnEtPnJxOwotCi0JCS8qCi0JCSAqIHdlIGFyZW4ndCBndWFyYW50ZWVkIHRvIGdldCBhIHJlcXVlc3QgYWZ0ZXIgdGhpcywgYnV0IHdlCi0JCSAqIGhhdmUgdG8gYmUgb3Bwb3J0dW5pc3RpYwotCQkgKi8KLQkJc21wX21iKCk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZybC0+d2FpdFtSRUFEXSkpCi0JCQl3YWtlX3VwKCZybC0+d2FpdFtSRUFEXSk7Ci0JCWlmICh3YWl0cXVldWVfYWN0aXZlKCZybC0+d2FpdFtXUklURV0pKQotCQkJd2FrZV91cCgmcmwtPndhaXRbV1JJVEVdKTsKLQl9Ci0KLQlibGtfcmVtb3ZlX3BsdWcocSk7Ci0JcS0+cmVxdWVzdF9mbihxKTsKKwlibGtfc3RhcnRfcXVldWVpbmcocSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShxLT5xdWV1ZV9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTIxOTMsNyArMTkyOCw2IEBACiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKLQlzcGluX2xvY2soJmNmcV9leGl0X2xvY2spOwogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKIAlpZiAoY2ZxZC0+YWN0aXZlX3F1ZXVlKQpAQCAtMjIwMywyNSArMTkzNywxNCBAQAogCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQgKmNpYyA9IGxpc3RfZW50cnkoY2ZxZC0+Y2ljX2xpc3QubmV4dCwKIAkJCQkJCQlzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsCiAJCQkJCQkJcXVldWVfbGlzdCk7Ci0JCWlmIChjaWMtPmNmcXFbQVNZTkNdKSB7Ci0JCQljZnFfcHV0X3F1ZXVlKGNpYy0+Y2ZxcVtBU1lOQ10pOwotCQkJY2ljLT5jZnFxW0FTWU5DXSA9IE5VTEw7Ci0JCX0KLQkJaWYgKGNpYy0+Y2ZxcVtTWU5DXSkgewotCQkJY2ZxX3B1dF9xdWV1ZShjaWMtPmNmcXFbU1lOQ10pOwotCQkJY2ljLT5jZnFxW1NZTkNdID0gTlVMTDsKLQkJfQotCQljaWMtPmtleSA9IE5VTEw7Ci0JCWxpc3RfZGVsX2luaXQoJmNpYy0+cXVldWVfbGlzdCk7CisKKwkJX19jZnFfZXhpdF9zaW5nbGVfaW9fY29udGV4dChjZnFkLCBjaWMpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlzcGluX3VubG9jaygmY2ZxX2V4aXRfbG9jayk7CiAKIAljZnFfc2h1dGRvd25fdGltZXJfd3EoY2ZxZCk7CiAKLQltZW1wb29sX2Rlc3Ryb3koY2ZxZC0+Y3JxX3Bvb2wpOwotCWtmcmVlKGNmcWQtPmNycV9oYXNoKTsKIAlrZnJlZShjZnFkLT5jZnFfaGFzaCk7CiAJa2ZyZWUoY2ZxZCk7CiB9CkBAIC0yMjMxLDcgKzE5NTQsNyBAQAogCXN0cnVjdCBjZnFfZGF0YSAqY2ZxZDsKIAlpbnQgaTsKIAotCWNmcWQgPSBrbWFsbG9jKHNpemVvZigqY2ZxZCksIEdGUF9LRVJORUwpOworCWNmcWQgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKCpjZnFkKSwgR0ZQX0tFUk5FTCwgcS0+bm9kZSk7CiAJaWYgKCFjZnFkKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMjI0MywyMyArMTk2NiwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZjZnFkLT5idXN5X3JyKTsKIAlJTklUX0xJU1RfSEVBRCgmY2ZxZC0+Y3VyX3JyKTsKIAlJTklUX0xJU1RfSEVBRCgmY2ZxZC0+aWRsZV9ycik7Ci0JSU5JVF9MSVNUX0hFQUQoJmNmcWQtPmVtcHR5X2xpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZjZnFkLT5jaWNfbGlzdCk7CiAKLQljZnFkLT5jcnFfaGFzaCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSAqIENGUV9NSEFTSF9FTlRSSUVTLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWNmcWQtPmNycV9oYXNoKQotCQlnb3RvIG91dF9jcnFoYXNoOwotCi0JY2ZxZC0+Y2ZxX2hhc2ggPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaGxpc3RfaGVhZCkgKiBDRlFfUUhBU0hfRU5UUklFUywgR0ZQX0tFUk5FTCk7CisJY2ZxZC0+Y2ZxX2hhc2ggPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSAqIENGUV9RSEFTSF9FTlRSSUVTLCBHRlBfS0VSTkVMLCBxLT5ub2RlKTsKIAlpZiAoIWNmcWQtPmNmcV9oYXNoKQotCQlnb3RvIG91dF9jZnFoYXNoOworCQlnb3RvIG91dF9mcmVlOwogCi0JY2ZxZC0+Y3JxX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2woQkxLREVWX01JTl9SUSwgY3JxX3Bvb2wpOwotCWlmICghY2ZxZC0+Y3JxX3Bvb2wpCi0JCWdvdG8gb3V0X2NycXBvb2w7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQ0ZRX01IQVNIX0VOVFJJRVM7IGkrKykKLQkJSU5JVF9ITElTVF9IRUFEKCZjZnFkLT5jcnFfaGFzaFtpXSk7CiAJZm9yIChpID0gMDsgaSA8IENGUV9RSEFTSF9FTlRSSUVTOyBpKyspCiAJCUlOSVRfSExJU1RfSEVBRCgmY2ZxZC0+Y2ZxX2hhc2hbaV0pOwogCkBAIC0yMjc1LDcgKzE5ODcsNiBAQAogCiAJSU5JVF9XT1JLKCZjZnFkLT51bnBsdWdfd29yaywgY2ZxX2tpY2tfcXVldWUsIHEpOwogCi0JY2ZxZC0+Y2ZxX3F1ZXVlZCA9IGNmcV9xdWV1ZWQ7CiAJY2ZxZC0+Y2ZxX3F1YW50dW0gPSBjZnFfcXVhbnR1bTsKIAljZnFkLT5jZnFfZmlmb19leHBpcmVbMF0gPSBjZnFfZmlmb19leHBpcmVbMF07CiAJY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzFdID0gY2ZxX2ZpZm9fZXhwaXJlWzFdOwpAQCAtMjI4NywxOSArMTk5OCwxMyBAQAogCWNmcWQtPmNmcV9zbGljZV9pZGxlID0gY2ZxX3NsaWNlX2lkbGU7CiAKIAlyZXR1cm4gY2ZxZDsKLW91dF9jcnFwb29sOgotCWtmcmVlKGNmcWQtPmNmcV9oYXNoKTsKLW91dF9jZnFoYXNoOgotCWtmcmVlKGNmcWQtPmNycV9oYXNoKTsKLW91dF9jcnFoYXNoOgorb3V0X2ZyZWU6CiAJa2ZyZWUoY2ZxZCk7CiAJcmV0dXJuIE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkIGNmcV9zbGFiX2tpbGwodm9pZCkKIHsKLQlpZiAoY3JxX3Bvb2wpCi0JCWttZW1fY2FjaGVfZGVzdHJveShjcnFfcG9vbCk7CiAJaWYgKGNmcV9wb29sKQogCQlrbWVtX2NhY2hlX2Rlc3Ryb3koY2ZxX3Bvb2wpOwogCWlmIChjZnFfaW9jX3Bvb2wpCkBAIC0yMzA4LDExICsyMDEzLDYgQEAKIAogc3RhdGljIGludCBfX2luaXQgY2ZxX3NsYWJfc2V0dXAodm9pZCkKIHsKLQljcnFfcG9vbCA9IGttZW1fY2FjaGVfY3JlYXRlKCJjcnFfcG9vbCIsIHNpemVvZihzdHJ1Y3QgY2ZxX3JxKSwgMCwgMCwKLQkJCQkJTlVMTCwgTlVMTCk7Ci0JaWYgKCFjcnFfcG9vbCkKLQkJZ290byBmYWlsOwotCiAJY2ZxX3Bvb2wgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiY2ZxX3Bvb2wiLCBzaXplb2Yoc3RydWN0IGNmcV9xdWV1ZSksIDAsIDAsCiAJCQkJCU5VTEwsIE5VTEwpOwogCWlmICghY2ZxX3Bvb2wpCkBAIC0yMzU4LDcgKzIwNTgsNiBAQAogCXJldHVybiBjZnFfdmFyX3Nob3coX19kYXRhLCAocGFnZSkpOwkJCQlcCiB9CiBTSE9XX0ZVTkNUSU9OKGNmcV9xdWFudHVtX3Nob3csIGNmcWQtPmNmcV9xdWFudHVtLCAwKTsKLVNIT1dfRlVOQ1RJT04oY2ZxX3F1ZXVlZF9zaG93LCBjZnFkLT5jZnFfcXVldWVkLCAwKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX2ZpZm9fZXhwaXJlX3N5bmNfc2hvdywgY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzFdLCAxKTsKIFNIT1dfRlVOQ1RJT04oY2ZxX2ZpZm9fZXhwaXJlX2FzeW5jX3Nob3csIGNmcWQtPmNmcV9maWZvX2V4cGlyZVswXSwgMSk7CiBTSE9XX0ZVTkNUSU9OKGNmcV9iYWNrX3NlZWtfbWF4X3Nob3csIGNmcWQtPmNmcV9iYWNrX21heCwgMCk7CkBAIC0yMzg2LDcgKzIwODUsNiBAQAogCXJldHVybiByZXQ7CQkJCQkJCVwKIH0KIFNUT1JFX0ZVTkNUSU9OKGNmcV9xdWFudHVtX3N0b3JlLCAmY2ZxZC0+Y2ZxX3F1YW50dW0sIDEsIFVJTlRfTUFYLCAwKTsKLVNUT1JFX0ZVTkNUSU9OKGNmcV9xdWV1ZWRfc3RvcmUsICZjZnFkLT5jZnFfcXVldWVkLCAxLCBVSU5UX01BWCwgMCk7CiBTVE9SRV9GVU5DVElPTihjZnFfZmlmb19leHBpcmVfc3luY19zdG9yZSwgJmNmcWQtPmNmcV9maWZvX2V4cGlyZVsxXSwgMSwgVUlOVF9NQVgsIDEpOwogU1RPUkVfRlVOQ1RJT04oY2ZxX2ZpZm9fZXhwaXJlX2FzeW5jX3N0b3JlLCAmY2ZxZC0+Y2ZxX2ZpZm9fZXhwaXJlWzBdLCAxLCBVSU5UX01BWCwgMSk7CiBTVE9SRV9GVU5DVElPTihjZnFfYmFja19zZWVrX21heF9zdG9yZSwgJmNmcWQtPmNmcV9iYWNrX21heCwgMCwgVUlOVF9NQVgsIDApOwpAQCAtMjQwMiw3ICsyMTAwLDYgQEAKIAogc3RhdGljIHN0cnVjdCBlbHZfZnNfZW50cnkgY2ZxX2F0dHJzW10gPSB7CiAJQ0ZRX0FUVFIocXVhbnR1bSksCi0JQ0ZRX0FUVFIocXVldWVkKSwKIAlDRlFfQVRUUihmaWZvX2V4cGlyZV9zeW5jKSwKIAlDRlFfQVRUUihmaWZvX2V4cGlyZV9hc3luYyksCiAJQ0ZRX0FUVFIoYmFja19zZWVrX21heCksCkBAIC0yNDI1LDE0ICsyMTIyLDE0IEBACiAJCS5lbGV2YXRvcl9kZWFjdGl2YXRlX3JlcV9mbiA9CWNmcV9kZWFjdGl2YXRlX3JlcXVlc3QsCiAJCS5lbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbiA9CWNmcV9xdWV1ZV9lbXB0eSwKIAkJLmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4gPQljZnFfY29tcGxldGVkX3JlcXVlc3QsCi0JCS5lbGV2YXRvcl9mb3JtZXJfcmVxX2ZuID0JY2ZxX2Zvcm1lcl9yZXF1ZXN0LAotCQkuZWxldmF0b3JfbGF0dGVyX3JlcV9mbiA9CWNmcV9sYXR0ZXJfcmVxdWVzdCwKKwkJLmVsZXZhdG9yX2Zvcm1lcl9yZXFfZm4gPQllbHZfcmJfZm9ybWVyX3JlcXVlc3QsCisJCS5lbGV2YXRvcl9sYXR0ZXJfcmVxX2ZuID0JZWx2X3JiX2xhdHRlcl9yZXF1ZXN0LAogCQkuZWxldmF0b3Jfc2V0X3JlcV9mbiA9CQljZnFfc2V0X3JlcXVlc3QsCiAJCS5lbGV2YXRvcl9wdXRfcmVxX2ZuID0JCWNmcV9wdXRfcmVxdWVzdCwKIAkJLmVsZXZhdG9yX21heV9xdWV1ZV9mbiA9CWNmcV9tYXlfcXVldWUsCiAJCS5lbGV2YXRvcl9pbml0X2ZuID0JCWNmcV9pbml0X3F1ZXVlLAogCQkuZWxldmF0b3JfZXhpdF9mbiA9CQljZnFfZXhpdF9xdWV1ZSwKLQkJLnRyaW0gPQkJCQljZnFfdHJpbSwKKwkJLnRyaW0gPQkJCQljZnFfZnJlZV9pb19jb250ZXh0LAogCX0sCiAJLmVsZXZhdG9yX2F0dHJzID0JY2ZxX2F0dHJzLAogCS5lbGV2YXRvcl9uYW1lID0JImNmcSIsCkBAIC0yNDYzLDEyICsyMTYwLDEyIEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBjZnFfZXhpdCh2b2lkKQogewotCURFQ0xBUkVfQ09NUExFVElPTihhbGxfZ29uZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soYWxsX2dvbmUpOwogCWVsdl91bnJlZ2lzdGVyKCZpb3NjaGVkX2NmcSk7CiAJaW9jX2dvbmUgPSAmYWxsX2dvbmU7CiAJLyogaW9jX2dvbmUncyB1cGRhdGUgbXVzdCBiZSB2aXNpYmxlIGJlZm9yZSByZWFkaW5nIGlvY19jb3VudCAqLwogCXNtcF93bWIoKTsKLQlpZiAoYXRvbWljX3JlYWQoJmlvY19jb3VudCkpCisJaWYgKGVsdl9pb2NfY291bnRfcmVhZChpb2NfY291bnQpKQogCQl3YWl0X2Zvcl9jb21wbGV0aW9uKGlvY19nb25lKTsKIAlzeW5jaHJvbml6ZV9yY3UoKTsKIAljZnFfc2xhYl9raWxsKCk7CmRpZmYgLS1naXQgYS9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMgYi9ibG9jay9kZWFkbGluZS1pb3NjaGVkLmMKaW5kZXggYzdjYTlmMC4uYjdjNWIzNCAxMDA2NDQKLS0tIGEvYmxvY2svZGVhZGxpbmUtaW9zY2hlZC5jCisrKyBiL2Jsb2NrL2RlYWRsaW5lLWlvc2NoZWQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgRGVhZGxpbmUgaS9vIHNjaGVkdWxlci4KICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAyIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+CisgKiAgQ29weXJpZ2h0IChDKSAyMDAyIEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KICAqLwogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgotI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9yYnRyZWUuaD4KIAogLyoKQEAgLTI0LDEzICsyMyw2IEBACiBzdGF0aWMgY29uc3QgaW50IGZpZm9fYmF0Y2ggPSAxNjsgICAgICAgLyogIyBvZiBzZXF1ZW50aWFsIHJlcXVlc3RzIHRyZWF0ZWQgYXMgb25lCiAJCQkJICAgICBieSB0aGUgYWJvdmUgcGFyYW1ldGVycy4gRm9yIHRocm91Z2hwdXQuICovCiAKLXN0YXRpYyBjb25zdCBpbnQgZGVhZGxpbmVfaGFzaF9zaGlmdCA9IDU7Ci0jZGVmaW5lIERMX0hBU0hfQkxPQ0soc2VjKQkoKHNlYykgPj4gMykKLSNkZWZpbmUgRExfSEFTSF9GTihzZWMpCQkoaGFzaF9sb25nKERMX0hBU0hfQkxPQ0soKHNlYykpLCBkZWFkbGluZV9oYXNoX3NoaWZ0KSkKLSNkZWZpbmUgRExfSEFTSF9FTlRSSUVTCQkoMSA8PCBkZWFkbGluZV9oYXNoX3NoaWZ0KQotI2RlZmluZSBycV9oYXNoX2tleShycSkJCSgocnEpLT5zZWN0b3IgKyAocnEpLT5ucl9zZWN0b3JzKQotI2RlZmluZSBPTl9IQVNIKGRycSkJCSghaGxpc3RfdW5oYXNoZWQoJihkcnEpLT5oYXNoKSkKLQogc3RydWN0IGRlYWRsaW5lX2RhdGEgewogCS8qCiAJICogcnVuIHRpbWUgZGF0YQpAQCAtNDUsOCArMzcsNyBAQAogCS8qCiAJICogbmV4dCBpbiBzb3J0IG9yZGVyLiByZWFkLCB3cml0ZSBvciBib3RoIGFyZSBOVUxMCiAJICovCi0Jc3RydWN0IGRlYWRsaW5lX3JxICpuZXh0X2RycVsyXTsKLQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaDsJLyogcmVxdWVzdCBoYXNoICovCisJc3RydWN0IHJlcXVlc3QgKm5leHRfcnFbMl07CiAJdW5zaWduZWQgaW50IGJhdGNoaW5nOwkJLyogbnVtYmVyIG9mIHNlcXVlbnRpYWwgcmVxdWVzdHMgbWFkZSAqLwogCXNlY3Rvcl90IGxhc3Rfc2VjdG9yOwkJLyogaGVhZCBwb3NpdGlvbiAqLwogCXVuc2lnbmVkIGludCBzdGFydmVkOwkJLyogdGltZXMgcmVhZHMgaGF2ZSBzdGFydmVkIHdyaXRlcyAqLwpAQCAtNTgsMjQwICs0OSw2OSBAQAogCWludCBmaWZvX2JhdGNoOwogCWludCB3cml0ZXNfc3RhcnZlZDsKIAlpbnQgZnJvbnRfbWVyZ2VzOwotCi0JbWVtcG9vbF90ICpkcnFfcG9vbDsKIH07CiAKLS8qCi0gKiBwcmUtcmVxdWVzdCBkYXRhLgotICovCi1zdHJ1Y3QgZGVhZGxpbmVfcnEgewotCS8qCi0JICogcmJ0cmVlIGluZGV4LCBrZXkgaXMgdGhlIHN0YXJ0aW5nIG9mZnNldAotCSAqLwotCXN0cnVjdCByYl9ub2RlIHJiX25vZGU7Ci0Jc2VjdG9yX3QgcmJfa2V5Oworc3RhdGljIHZvaWQgZGVhZGxpbmVfbW92ZV9yZXF1ZXN0KHN0cnVjdCBkZWFkbGluZV9kYXRhICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi0Jc3RydWN0IHJlcXVlc3QgKnJlcXVlc3Q7Ci0KLQkvKgotCSAqIHJlcXVlc3QgaGFzaCwga2V5IGlzIHRoZSBlbmRpbmcgb2Zmc2V0IChmb3IgYmFjayBtZXJnZSBsb29rdXApCi0JICovCi0Jc3RydWN0IGhsaXN0X25vZGUgaGFzaDsKLQotCS8qCi0JICogZXhwaXJlIGZpZm8KLQkgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGZpZm87Ci0JdW5zaWduZWQgbG9uZyBleHBpcmVzOwotfTsKLQotc3RhdGljIHZvaWQgZGVhZGxpbmVfbW92ZV9yZXF1ZXN0KHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpOwotCi1zdGF0aWMga21lbV9jYWNoZV90ICpkcnFfcG9vbDsKLQotI2RlZmluZSBSUV9EQVRBKHJxKQkoKHN0cnVjdCBkZWFkbGluZV9ycSAqKSAocnEpLT5lbGV2YXRvcl9wcml2YXRlKQotCi0vKgotICogdGhlIGJhY2sgbWVyZ2UgaGFzaCBzdXBwb3J0IGZ1bmN0aW9ucwotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgX19kZWFkbGluZV9kZWxfZHJxX2hhc2goc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpCi17Ci0JaGxpc3RfZGVsX2luaXQoJmRycS0+aGFzaCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWFkbGluZV9kZWxfZHJxX2hhc2goc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpCi17Ci0JaWYgKE9OX0hBU0goZHJxKSkKLQkJX19kZWFkbGluZV9kZWxfZHJxX2hhc2goZHJxKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkCi1kZWFkbGluZV9hZGRfZHJxX2hhc2goc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcnEtPnJlcXVlc3Q7Ci0KLQlCVUdfT04oT05fSEFTSChkcnEpKTsKLQotCWhsaXN0X2FkZF9oZWFkKCZkcnEtPmhhc2gsICZkZC0+aGFzaFtETF9IQVNIX0ZOKHJxX2hhc2hfa2V5KHJxKSldKTsKLX0KLQotLyoKLSAqIG1vdmUgaG90IGVudHJ5IHRvIGZyb250IG9mIGNoYWluCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZAotZGVhZGxpbmVfaG90X2RycV9oYXNoKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJxLT5yZXF1ZXN0OwotCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkID0gJmRkLT5oYXNoW0RMX0hBU0hfRk4ocnFfaGFzaF9rZXkocnEpKV07Ci0KLQlpZiAoT05fSEFTSChkcnEpICYmICZkcnEtPmhhc2ggIT0gaGVhZC0+Zmlyc3QpIHsKLQkJaGxpc3RfZGVsKCZkcnEtPmhhc2gpOwotCQlobGlzdF9hZGRfaGVhZCgmZHJxLT5oYXNoLCBoZWFkKTsKLQl9Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCi1kZWFkbGluZV9maW5kX2RycV9oYXNoKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc2VjdG9yX3Qgb2Zmc2V0KQotewotCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoX2xpc3QgPSAmZGQtPmhhc2hbRExfSEFTSF9GTihvZmZzZXQpXTsKLQlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZW50cnksICpuZXh0OwotCXN0cnVjdCBkZWFkbGluZV9ycSAqZHJxOwotCi0JaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShkcnEsIGVudHJ5LCBuZXh0LCBoYXNoX2xpc3QsIGhhc2gpIHsKLQkJc3RydWN0IHJlcXVlc3QgKl9fcnEgPSBkcnEtPnJlcXVlc3Q7Ci0KLQkJQlVHX09OKCFPTl9IQVNIKGRycSkpOwotCi0JCWlmICghcnFfbWVyZ2VhYmxlKF9fcnEpKSB7Ci0JCQlfX2RlYWRsaW5lX2RlbF9kcnFfaGFzaChkcnEpOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAocnFfaGFzaF9rZXkoX19ycSkgPT0gb2Zmc2V0KQotCQkJcmV0dXJuIF9fcnE7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiByYiB0cmVlIHN1cHBvcnQgZnVuY3Rpb25zCi0gKi8KLSNkZWZpbmUgcmJfZW50cnlfZHJxKG5vZGUpCXJiX2VudHJ5KChub2RlKSwgc3RydWN0IGRlYWRsaW5lX3JxLCByYl9ub2RlKQotI2RlZmluZSBEUlFfUkJfUk9PVChkZCwgZHJxKQkoJihkZCktPnNvcnRfbGlzdFtycV9kYXRhX2RpcigoZHJxKS0+cmVxdWVzdCldKQotI2RlZmluZSBycV9yYl9rZXkocnEpCQkocnEpLT5zZWN0b3IKLQotc3RhdGljIHN0cnVjdCBkZWFkbGluZV9ycSAqCi1fX2RlYWRsaW5lX2FkZF9kcnFfcmIoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSkKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqKnAgPSAmRFJRX1JCX1JPT1QoZGQsIGRycSktPnJiX25vZGU7Ci0Jc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpfX2RycTsKLQotCXdoaWxlICgqcCkgewotCQlwYXJlbnQgPSAqcDsKLQkJX19kcnEgPSByYl9lbnRyeV9kcnEocGFyZW50KTsKLQotCQlpZiAoZHJxLT5yYl9rZXkgPCBfX2RycS0+cmJfa2V5KQotCQkJcCA9ICYoKnApLT5yYl9sZWZ0OwotCQllbHNlIGlmIChkcnEtPnJiX2tleSA+IF9fZHJxLT5yYl9rZXkpCi0JCQlwID0gJigqcCktPnJiX3JpZ2h0OwotCQllbHNlCi0JCQlyZXR1cm4gX19kcnE7Ci0JfQotCi0JcmJfbGlua19ub2RlKCZkcnEtPnJiX25vZGUsIHBhcmVudCwgcCk7Ci0JcmV0dXJuIE5VTEw7Ci19CisjZGVmaW5lIFJRX1JCX1JPT1QoZGQsIHJxKQkoJihkZCktPnNvcnRfbGlzdFtycV9kYXRhX2RpcigocnEpKV0pCiAKIHN0YXRpYyB2b2lkCi1kZWFkbGluZV9hZGRfZHJxX3JiKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpCitkZWFkbGluZV9hZGRfcnFfcmIoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpfX2FsaWFzOwotCi0JZHJxLT5yYl9rZXkgPSBycV9yYl9rZXkoZHJxLT5yZXF1ZXN0KTsKKwlzdHJ1Y3QgcmJfcm9vdCAqcm9vdCA9IFJRX1JCX1JPT1QoZGQsIHJxKTsKKwlzdHJ1Y3QgcmVxdWVzdCAqX19hbGlhczsKIAogcmV0cnk6Ci0JX19hbGlhcyA9IF9fZGVhZGxpbmVfYWRkX2RycV9yYihkZCwgZHJxKTsKLQlpZiAoIV9fYWxpYXMpIHsKLQkJcmJfaW5zZXJ0X2NvbG9yKCZkcnEtPnJiX25vZGUsIERSUV9SQl9ST09UKGRkLCBkcnEpKTsKLQkJcmV0dXJuOworCV9fYWxpYXMgPSBlbHZfcmJfYWRkKHJvb3QsIHJxKTsKKwlpZiAodW5saWtlbHkoX19hbGlhcykpIHsKKwkJZGVhZGxpbmVfbW92ZV9yZXF1ZXN0KGRkLCBfX2FsaWFzKTsKKwkJZ290byByZXRyeTsKIAl9Ci0KLQlkZWFkbGluZV9tb3ZlX3JlcXVlc3QoZGQsIF9fYWxpYXMpOwotCWdvdG8gcmV0cnk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotZGVhZGxpbmVfZGVsX2RycV9yYihzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsIHN0cnVjdCBkZWFkbGluZV9ycSAqZHJxKQorZGVhZGxpbmVfZGVsX3JxX3JiKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWNvbnN0IGludCBkYXRhX2RpciA9IHJxX2RhdGFfZGlyKGRycS0+cmVxdWVzdCk7CisJY29uc3QgaW50IGRhdGFfZGlyID0gcnFfZGF0YV9kaXIocnEpOwogCi0JaWYgKGRkLT5uZXh0X2RycVtkYXRhX2Rpcl0gPT0gZHJxKSB7Ci0JCXN0cnVjdCByYl9ub2RlICpyYm5leHQgPSByYl9uZXh0KCZkcnEtPnJiX25vZGUpOworCWlmIChkZC0+bmV4dF9ycVtkYXRhX2Rpcl0gPT0gcnEpIHsKKwkJc3RydWN0IHJiX25vZGUgKnJibmV4dCA9IHJiX25leHQoJnJxLT5yYl9ub2RlKTsKIAotCQlkZC0+bmV4dF9kcnFbZGF0YV9kaXJdID0gTlVMTDsKKwkJZGQtPm5leHRfcnFbZGF0YV9kaXJdID0gTlVMTDsKIAkJaWYgKHJibmV4dCkKLQkJCWRkLT5uZXh0X2RycVtkYXRhX2Rpcl0gPSByYl9lbnRyeV9kcnEocmJuZXh0KTsKKwkJCWRkLT5uZXh0X3JxW2RhdGFfZGlyXSA9IHJiX2VudHJ5X3JxKHJibmV4dCk7CiAJfQogCi0JQlVHX09OKCFSQl9FTVBUWV9OT0RFKCZkcnEtPnJiX25vZGUpKTsKLQlyYl9lcmFzZSgmZHJxLT5yYl9ub2RlLCBEUlFfUkJfUk9PVChkZCwgZHJxKSk7Ci0JUkJfQ0xFQVJfTk9ERSgmZHJxLT5yYl9ub2RlKTsKLX0KLQotc3RhdGljIHN0cnVjdCByZXF1ZXN0ICoKLWRlYWRsaW5lX2ZpbmRfZHJxX3JiKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc2VjdG9yX3Qgc2VjdG9yLCBpbnQgZGF0YV9kaXIpCi17Ci0Jc3RydWN0IHJiX25vZGUgKm4gPSBkZC0+c29ydF9saXN0W2RhdGFfZGlyXS5yYl9ub2RlOwotCXN0cnVjdCBkZWFkbGluZV9ycSAqZHJxOwotCi0Jd2hpbGUgKG4pIHsKLQkJZHJxID0gcmJfZW50cnlfZHJxKG4pOwotCi0JCWlmIChzZWN0b3IgPCBkcnEtPnJiX2tleSkKLQkJCW4gPSBuLT5yYl9sZWZ0OwotCQllbHNlIGlmIChzZWN0b3IgPiBkcnEtPnJiX2tleSkKLQkJCW4gPSBuLT5yYl9yaWdodDsKLQkJZWxzZQotCQkJcmV0dXJuIGRycS0+cmVxdWVzdDsKLQl9Ci0KLQlyZXR1cm4gTlVMTDsKKwllbHZfcmJfZGVsKFJRX1JCX1JPT1QoZGQsIHJxKSwgcnEpOwogfQogCiAvKgotICogZGVhZGxpbmVfZmluZF9maXJzdF9kcnEgZmluZHMgdGhlIGZpcnN0IChsb3dlc3Qgc2VjdG9yIG51bWJlcmVkKSByZXF1ZXN0Ci0gKiBmb3IgdGhlIHNwZWNpZmllZCBkYXRhX2Rpci4gVXNlZCB0byBzd2VlcCBiYWNrIHRvIHRoZSBzdGFydCBvZiB0aGUgZGlzawotICogKDEtd2F5IGVsZXZhdG9yKSBhZnRlciB3ZSBwcm9jZXNzIHRoZSBsYXN0IChoaWdoZXN0IHNlY3RvcikgcmVxdWVzdC4KLSAqLwotc3RhdGljIHN0cnVjdCBkZWFkbGluZV9ycSAqCi1kZWFkbGluZV9maW5kX2ZpcnN0X2RycShzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsIGludCBkYXRhX2RpcikKLXsKLQlzdHJ1Y3QgcmJfbm9kZSAqbiA9IGRkLT5zb3J0X2xpc3RbZGF0YV9kaXJdLnJiX25vZGU7Ci0KLQlmb3IgKDs7KSB7Ci0JCWlmIChuLT5yYl9sZWZ0ID09IE5VTEwpCi0JCQlyZXR1cm4gcmJfZW50cnlfZHJxKG4pOwotCQkKLQkJbiA9IG4tPnJiX2xlZnQ7Ci0JfQotfQotCi0vKgotICogYWRkIGRycSB0byByYnRyZWUgYW5kIGZpZm8KKyAqIGFkZCBycSB0byByYnRyZWUgYW5kIGZpZm8KICAqLwogc3RhdGljIHZvaWQKIGRlYWRsaW5lX2FkZF9yZXF1ZXN0KHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpkcnEgPSBSUV9EQVRBKHJxKTsKKwljb25zdCBpbnQgZGF0YV9kaXIgPSBycV9kYXRhX2RpcihycSk7CiAKLQljb25zdCBpbnQgZGF0YV9kaXIgPSBycV9kYXRhX2RpcihkcnEtPnJlcXVlc3QpOworCWRlYWRsaW5lX2FkZF9ycV9yYihkZCwgcnEpOwogCi0JZGVhZGxpbmVfYWRkX2RycV9yYihkZCwgZHJxKTsKIAkvKgogCSAqIHNldCBleHBpcmUgdGltZSAob25seSB1c2VkIGZvciByZWFkcykgYW5kIGFkZCB0byBmaWZvIGxpc3QKIAkgKi8KLQlkcnEtPmV4cGlyZXMgPSBqaWZmaWVzICsgZGQtPmZpZm9fZXhwaXJlW2RhdGFfZGlyXTsKLQlsaXN0X2FkZF90YWlsKCZkcnEtPmZpZm8sICZkZC0+Zmlmb19saXN0W2RhdGFfZGlyXSk7Ci0KLQlpZiAocnFfbWVyZ2VhYmxlKHJxKSkKLQkJZGVhZGxpbmVfYWRkX2RycV9oYXNoKGRkLCBkcnEpOworCXJxX3NldF9maWZvX3RpbWUocnEsIGppZmZpZXMgKyBkZC0+Zmlmb19leHBpcmVbZGF0YV9kaXJdKTsKKwlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmZGQtPmZpZm9fbGlzdFtkYXRhX2Rpcl0pOwogfQogCiAvKgotICogcmVtb3ZlIHJxIGZyb20gcmJ0cmVlLCBmaWZvLCBhbmQgaGFzaAorICogcmVtb3ZlIHJxIGZyb20gcmJ0cmVlIGFuZCBmaWZvLgogICovCiBzdGF0aWMgdm9pZCBkZWFkbGluZV9yZW1vdmVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSA9IFJRX0RBVEEocnEpOwogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCi0JbGlzdF9kZWxfaW5pdCgmZHJxLT5maWZvKTsKLQlkZWFkbGluZV9kZWxfZHJxX3JiKGRkLCBkcnEpOwotCWRlYWRsaW5lX2RlbF9kcnFfaGFzaChkcnEpOworCXJxX2ZpZm9fY2xlYXIocnEpOworCWRlYWRsaW5lX2RlbF9ycV9yYihkZCwgcnEpOwogfQogCiBzdGF0aWMgaW50CkBAIC0zMDIsMjcgKzEyMiwxNCBAQAogCWludCByZXQ7CiAKIAkvKgotCSAqIHNlZSBpZiB0aGUgbWVyZ2UgaGFzaCBjYW4gc2F0aXNmeSBhIGJhY2sgbWVyZ2UKLQkgKi8KLQlfX3JxID0gZGVhZGxpbmVfZmluZF9kcnFfaGFzaChkZCwgYmlvLT5iaV9zZWN0b3IpOwotCWlmIChfX3JxKSB7Ci0JCUJVR19PTihfX3JxLT5zZWN0b3IgKyBfX3JxLT5ucl9zZWN0b3JzICE9IGJpby0+Ymlfc2VjdG9yKTsKLQotCQlpZiAoZWx2X3JxX21lcmdlX29rKF9fcnEsIGJpbykpIHsKLQkJCXJldCA9IEVMRVZBVE9SX0JBQ0tfTUVSR0U7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQotCS8qCiAJICogY2hlY2sgZm9yIGZyb250IG1lcmdlCiAJICovCiAJaWYgKGRkLT5mcm9udF9tZXJnZXMpIHsKLQkJc2VjdG9yX3QgcmJfa2V5ID0gYmlvLT5iaV9zZWN0b3IgKyBiaW9fc2VjdG9ycyhiaW8pOworCQlzZWN0b3JfdCBzZWN0b3IgPSBiaW8tPmJpX3NlY3RvciArIGJpb19zZWN0b3JzKGJpbyk7CiAKLQkJX19ycSA9IGRlYWRsaW5lX2ZpbmRfZHJxX3JiKGRkLCByYl9rZXksIGJpb19kYXRhX2RpcihiaW8pKTsKKwkJX19ycSA9IGVsdl9yYl9maW5kKCZkZC0+c29ydF9saXN0W2Jpb19kYXRhX2RpcihiaW8pXSwgc2VjdG9yKTsKIAkJaWYgKF9fcnEpIHsKLQkJCUJVR19PTihyYl9rZXkgIT0gcnFfcmJfa2V5KF9fcnEpKTsKKwkJCUJVR19PTihzZWN0b3IgIT0gX19ycS0+c2VjdG9yKTsKIAogCQkJaWYgKGVsdl9ycV9tZXJnZV9vayhfX3JxLCBiaW8pKSB7CiAJCQkJcmV0ID0gRUxFVkFUT1JfRlJPTlRfTUVSR0U7CkBAIC0zMzMsMjkgKzE0MCwyMSBAQAogCiAJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwogb3V0OgotCWlmIChyZXQpCi0JCWRlYWRsaW5lX2hvdF9kcnFfaGFzaChkZCwgUlFfREFUQShfX3JxKSk7CiAJKnJlcSA9IF9fcnE7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgZGVhZGxpbmVfbWVyZ2VkX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQorc3RhdGljIHZvaWQgZGVhZGxpbmVfbWVyZ2VkX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxLAorCQkJCSAgICBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSA9IFJRX0RBVEEocmVxKTsKLQotCS8qCi0JICogaGFzaCBhbHdheXMgbmVlZHMgdG8gYmUgcmVwb3NpdGlvbmVkLCBrZXkgaXMgZW5kIHNlY3RvcgotCSAqLwotCWRlYWRsaW5lX2RlbF9kcnFfaGFzaChkcnEpOwotCWRlYWRsaW5lX2FkZF9kcnFfaGFzaChkZCwgZHJxKTsKIAogCS8qCiAJICogaWYgdGhlIG1lcmdlIHdhcyBhIGZyb250IG1lcmdlLCB3ZSBuZWVkIHRvIHJlcG9zaXRpb24gcmVxdWVzdAogCSAqLwotCWlmIChycV9yYl9rZXkocmVxKSAhPSBkcnEtPnJiX2tleSkgewotCQlkZWFkbGluZV9kZWxfZHJxX3JiKGRkLCBkcnEpOwotCQlkZWFkbGluZV9hZGRfZHJxX3JiKGRkLCBkcnEpOworCWlmICh0eXBlID09IEVMRVZBVE9SX0ZST05UX01FUkdFKSB7CisJCWVsdl9yYl9kZWwoUlFfUkJfUk9PVChkZCwgcmVxKSwgcmVxKTsKKwkJZGVhZGxpbmVfYWRkX3JxX3JiKGRkLCByZXEpOwogCX0KIH0KIApAQCAtMzYzLDMzICsxNjIsMTQgQEAKIGRlYWRsaW5lX21lcmdlZF9yZXF1ZXN0cyhyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpyZXEsCiAJCQkgc3RydWN0IHJlcXVlc3QgKm5leHQpCiB7Ci0Jc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpkcnEgPSBSUV9EQVRBKHJlcSk7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpkbmV4dCA9IFJRX0RBVEEobmV4dCk7Ci0KLQlCVUdfT04oIWRycSk7Ci0JQlVHX09OKCFkbmV4dCk7Ci0KIAkvKgotCSAqIHJlcG9zaXRpb24gZHJxICh0aGlzIGlzIHRoZSBtZXJnZWQgcmVxdWVzdCkgaW4gaGFzaCwgYW5kIGluIHJidHJlZQotCSAqIGluIGNhc2Ugb2YgYSBmcm9udCBtZXJnZQorCSAqIGlmIG5leHQgZXhwaXJlcyBiZWZvcmUgcnEsIGFzc2lnbiBpdHMgZXhwaXJlIHRpbWUgdG8gcnEKKwkgKiBhbmQgbW92ZSBpbnRvIG5leHQgcG9zaXRpb24gKG5leHQgd2lsbCBiZSBkZWxldGVkKSBpbiBmaWZvCiAJICovCi0JZGVhZGxpbmVfZGVsX2RycV9oYXNoKGRycSk7Ci0JZGVhZGxpbmVfYWRkX2RycV9oYXNoKGRkLCBkcnEpOwotCi0JaWYgKHJxX3JiX2tleShyZXEpICE9IGRycS0+cmJfa2V5KSB7Ci0JCWRlYWRsaW5lX2RlbF9kcnFfcmIoZGQsIGRycSk7Ci0JCWRlYWRsaW5lX2FkZF9kcnFfcmIoZGQsIGRycSk7Ci0JfQotCi0JLyoKLQkgKiBpZiBkbmV4dCBleHBpcmVzIGJlZm9yZSBkcnEsIGFzc2lnbiBpdHMgZXhwaXJlIHRpbWUgdG8gZHJxCi0JICogYW5kIG1vdmUgaW50byBkbmV4dCBwb3NpdGlvbiAoZG5leHQgd2lsbCBiZSBkZWxldGVkKSBpbiBmaWZvCi0JICovCi0JaWYgKCFsaXN0X2VtcHR5KCZkcnEtPmZpZm8pICYmICFsaXN0X2VtcHR5KCZkbmV4dC0+ZmlmbykpIHsKLQkJaWYgKHRpbWVfYmVmb3JlKGRuZXh0LT5leHBpcmVzLCBkcnEtPmV4cGlyZXMpKSB7Ci0JCQlsaXN0X21vdmUoJmRycS0+ZmlmbywgJmRuZXh0LT5maWZvKTsKLQkJCWRycS0+ZXhwaXJlcyA9IGRuZXh0LT5leHBpcmVzOworCWlmICghbGlzdF9lbXB0eSgmcmVxLT5xdWV1ZWxpc3QpICYmICFsaXN0X2VtcHR5KCZuZXh0LT5xdWV1ZWxpc3QpKSB7CisJCWlmICh0aW1lX2JlZm9yZShycV9maWZvX3RpbWUobmV4dCksIHJxX2ZpZm9fdGltZShyZXEpKSkgeworCQkJbGlzdF9tb3ZlKCZyZXEtPnF1ZXVlbGlzdCwgJm5leHQtPnF1ZXVlbGlzdCk7CisJCQlycV9zZXRfZmlmb190aW1lKHJlcSwgcnFfZmlmb190aW1lKG5leHQpKTsKIAkJfQogCX0KIApAQCAtNDAzLDUyICsxODMsNTAgQEAKICAqIG1vdmUgcmVxdWVzdCBmcm9tIHNvcnQgbGlzdCB0byBkaXNwYXRjaCBxdWV1ZS4KICAqLwogc3RhdGljIGlubGluZSB2b2lkCi1kZWFkbGluZV9tb3ZlX3RvX2Rpc3BhdGNoKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IGRlYWRsaW5lX3JxICpkcnEpCitkZWFkbGluZV9tb3ZlX3RvX2Rpc3BhdGNoKHN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXJlcXVlc3RfcXVldWVfdCAqcSA9IGRycS0+cmVxdWVzdC0+cTsKKwlyZXF1ZXN0X3F1ZXVlX3QgKnEgPSBycS0+cTsKIAotCWRlYWRsaW5lX3JlbW92ZV9yZXF1ZXN0KHEsIGRycS0+cmVxdWVzdCk7Ci0JZWx2X2Rpc3BhdGNoX2FkZF90YWlsKHEsIGRycS0+cmVxdWVzdCk7CisJZGVhZGxpbmVfcmVtb3ZlX3JlcXVlc3QocSwgcnEpOworCWVsdl9kaXNwYXRjaF9hZGRfdGFpbChxLCBycSk7CiB9CiAKIC8qCiAgKiBtb3ZlIGFuIGVudHJ5IHRvIGRpc3BhdGNoIHF1ZXVlCiAgKi8KIHN0YXRpYyB2b2lkCi1kZWFkbGluZV9tb3ZlX3JlcXVlc3Qoc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkLCBzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSkKK2RlYWRsaW5lX21vdmVfcmVxdWVzdChzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQljb25zdCBpbnQgZGF0YV9kaXIgPSBycV9kYXRhX2RpcihkcnEtPnJlcXVlc3QpOwotCXN0cnVjdCByYl9ub2RlICpyYm5leHQgPSByYl9uZXh0KCZkcnEtPnJiX25vZGUpOworCWNvbnN0IGludCBkYXRhX2RpciA9IHJxX2RhdGFfZGlyKHJxKTsKKwlzdHJ1Y3QgcmJfbm9kZSAqcmJuZXh0ID0gcmJfbmV4dCgmcnEtPnJiX25vZGUpOwogCi0JZGQtPm5leHRfZHJxW1JFQURdID0gTlVMTDsKLQlkZC0+bmV4dF9kcnFbV1JJVEVdID0gTlVMTDsKKwlkZC0+bmV4dF9ycVtSRUFEXSA9IE5VTEw7CisJZGQtPm5leHRfcnFbV1JJVEVdID0gTlVMTDsKIAogCWlmIChyYm5leHQpCi0JCWRkLT5uZXh0X2RycVtkYXRhX2Rpcl0gPSByYl9lbnRyeV9kcnEocmJuZXh0KTsKKwkJZGQtPm5leHRfcnFbZGF0YV9kaXJdID0gcmJfZW50cnlfcnEocmJuZXh0KTsKIAkKLQlkZC0+bGFzdF9zZWN0b3IgPSBkcnEtPnJlcXVlc3QtPnNlY3RvciArIGRycS0+cmVxdWVzdC0+bnJfc2VjdG9yczsKKwlkZC0+bGFzdF9zZWN0b3IgPSBycS0+c2VjdG9yICsgcnEtPm5yX3NlY3RvcnM7CiAKIAkvKgogCSAqIHRha2UgaXQgb2ZmIHRoZSBzb3J0IGFuZCBmaWZvIGxpc3QsIG1vdmUKIAkgKiB0byBkaXNwYXRjaCBxdWV1ZQogCSAqLwotCWRlYWRsaW5lX21vdmVfdG9fZGlzcGF0Y2goZGQsIGRycSk7CisJZGVhZGxpbmVfbW92ZV90b19kaXNwYXRjaChkZCwgcnEpOwogfQogCi0jZGVmaW5lIGxpc3RfZW50cnlfZmlmbyhwdHIpCWxpc3RfZW50cnkoKHB0ciksIHN0cnVjdCBkZWFkbGluZV9ycSwgZmlmbykKLQogLyoKICAqIGRlYWRsaW5lX2NoZWNrX2ZpZm8gcmV0dXJucyAwIGlmIHRoZXJlIGFyZSBubyBleHBpcmVkIHJlYWRzIG9uIHRoZSBmaWZvLAogICogMSBvdGhlcndpc2UuIFJlcXVpcmVzICFsaXN0X2VtcHR5KCZkZC0+Zmlmb19saXN0W2RhdGFfZGlyXSkKICAqLwogc3RhdGljIGlubGluZSBpbnQgZGVhZGxpbmVfY2hlY2tfZmlmbyhzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQsIGludCBkZGlyKQogewotCXN0cnVjdCBkZWFkbGluZV9ycSAqZHJxID0gbGlzdF9lbnRyeV9maWZvKGRkLT5maWZvX2xpc3RbZGRpcl0ubmV4dCk7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gcnFfZW50cnlfZmlmbyhkZC0+Zmlmb19saXN0W2RkaXJdLm5leHQpOwogCiAJLyoKLQkgKiBkcnEgaXMgZXhwaXJlZCEKKwkgKiBycSBpcyBleHBpcmVkIQogCSAqLwotCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRycS0+ZXhwaXJlcykpCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgcnFfZmlmb190aW1lKHJxKSkpCiAJCXJldHVybiAxOwogCiAJcmV0dXJuIDA7CkBAIC00NjMsMjEgKzI0MSwyMSBAQAogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZCA9IHEtPmVsZXZhdG9yLT5lbGV2YXRvcl9kYXRhOwogCWNvbnN0IGludCByZWFkcyA9ICFsaXN0X2VtcHR5KCZkZC0+Zmlmb19saXN0W1JFQURdKTsKIAljb25zdCBpbnQgd3JpdGVzID0gIWxpc3RfZW1wdHkoJmRkLT5maWZvX2xpc3RbV1JJVEVdKTsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycTsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJaW50IGRhdGFfZGlyOwogCiAJLyoKIAkgKiBiYXRjaGVzIGFyZSBjdXJyZW50bHkgcmVhZHMgWE9SIHdyaXRlcwogCSAqLwotCWlmIChkZC0+bmV4dF9kcnFbV1JJVEVdKQotCQlkcnEgPSBkZC0+bmV4dF9kcnFbV1JJVEVdOworCWlmIChkZC0+bmV4dF9ycVtXUklURV0pCisJCXJxID0gZGQtPm5leHRfcnFbV1JJVEVdOwogCWVsc2UKLQkJZHJxID0gZGQtPm5leHRfZHJxW1JFQURdOworCQlycSA9IGRkLT5uZXh0X3JxW1JFQURdOwogCi0JaWYgKGRycSkgeworCWlmIChycSkgewogCQkvKiB3ZSBoYXZlIGEgIm5leHQgcmVxdWVzdCIgKi8KIAkJCi0JCWlmIChkZC0+bGFzdF9zZWN0b3IgIT0gZHJxLT5yZXF1ZXN0LT5zZWN0b3IpCisJCWlmIChkZC0+bGFzdF9zZWN0b3IgIT0gcnEtPnNlY3RvcikKIAkJCS8qIGVuZCB0aGUgYmF0Y2ggb24gYSBub24gc2VxdWVudGlhbCByZXF1ZXN0ICovCiAJCQlkZC0+YmF0Y2hpbmcgKz0gZGQtPmZpZm9fYmF0Y2g7CiAJCQpAQCAtNTI2LDMwICszMDQsMzMgQEAKIAlpZiAoZGVhZGxpbmVfY2hlY2tfZmlmbyhkZCwgZGF0YV9kaXIpKSB7CiAJCS8qIEFuIGV4cGlyZWQgcmVxdWVzdCBleGlzdHMgLSBzYXRpc2Z5IGl0ICovCiAJCWRkLT5iYXRjaGluZyA9IDA7Ci0JCWRycSA9IGxpc3RfZW50cnlfZmlmbyhkZC0+Zmlmb19saXN0W2RhdGFfZGlyXS5uZXh0KTsKKwkJcnEgPSBycV9lbnRyeV9maWZvKGRkLT5maWZvX2xpc3RbZGF0YV9kaXJdLm5leHQpOwogCQkKLQl9IGVsc2UgaWYgKGRkLT5uZXh0X2RycVtkYXRhX2Rpcl0pIHsKKwl9IGVsc2UgaWYgKGRkLT5uZXh0X3JxW2RhdGFfZGlyXSkgewogCQkvKgogCQkgKiBUaGUgbGFzdCByZXEgd2FzIHRoZSBzYW1lIGRpciBhbmQgd2UgaGF2ZSBhIG5leHQgcmVxdWVzdCBpbgogCQkgKiBzb3J0IG9yZGVyLiBObyBleHBpcmVkIHJlcXVlc3RzIHNvIGNvbnRpbnVlIG9uIGZyb20gaGVyZS4KIAkJICovCi0JCWRycSA9IGRkLT5uZXh0X2RycVtkYXRhX2Rpcl07CisJCXJxID0gZGQtPm5leHRfcnFbZGF0YV9kaXJdOwogCX0gZWxzZSB7CisJCXN0cnVjdCByYl9ub2RlICpub2RlOwogCQkvKgogCQkgKiBUaGUgbGFzdCByZXEgd2FzIHRoZSBvdGhlciBkaXJlY3Rpb24gb3Igd2UgaGF2ZSBydW4gb3V0IG9mCiAJCSAqIGhpZ2hlci1zZWN0b3JlZCByZXF1ZXN0cy4gR28gYmFjayB0byB0aGUgbG93ZXN0IHNlY3RvcmVkCiAJCSAqIHJlcXVlc3QgKDEgd2F5IGVsZXZhdG9yKSBhbmQgc3RhcnQgYSBuZXcgYmF0Y2guCiAJCSAqLwogCQlkZC0+YmF0Y2hpbmcgPSAwOwotCQlkcnEgPSBkZWFkbGluZV9maW5kX2ZpcnN0X2RycShkZCwgZGF0YV9kaXIpOworCQlub2RlID0gcmJfZmlyc3QoJmRkLT5zb3J0X2xpc3RbZGF0YV9kaXJdKTsKKwkJaWYgKG5vZGUpCisJCQlycSA9IHJiX2VudHJ5X3JxKG5vZGUpOwogCX0KIAogZGlzcGF0Y2hfcmVxdWVzdDoKIAkvKgotCSAqIGRycSBpcyB0aGUgc2VsZWN0ZWQgYXBwcm9wcmlhdGUgcmVxdWVzdC4KKwkgKiBycSBpcyB0aGUgc2VsZWN0ZWQgYXBwcm9wcmlhdGUgcmVxdWVzdC4KIAkgKi8KIAlkZC0+YmF0Y2hpbmcrKzsKLQlkZWFkbGluZV9tb3ZlX3JlcXVlc3QoZGQsIGRycSk7CisJZGVhZGxpbmVfbW92ZV9yZXF1ZXN0KGRkLCBycSk7CiAKIAlyZXR1cm4gMTsKIH0KQEAgLTU2MiwzMCArMzQzLDYgQEAKIAkJJiYgbGlzdF9lbXB0eSgmZGQtPmZpZm9fbGlzdFtSRUFEXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCi1kZWFkbGluZV9mb3JtZXJfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSA9IFJRX0RBVEEocnEpOwotCXN0cnVjdCByYl9ub2RlICpyYnByZXYgPSByYl9wcmV2KCZkcnEtPnJiX25vZGUpOwotCi0JaWYgKHJicHJldikKLQkJcmV0dXJuIHJiX2VudHJ5X2RycShyYnByZXYpLT5yZXF1ZXN0OwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqCi1kZWFkbGluZV9sYXR0ZXJfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSA9IFJRX0RBVEEocnEpOwotCXN0cnVjdCByYl9ub2RlICpyYm5leHQgPSByYl9uZXh0KCZkcnEtPnJiX25vZGUpOwotCi0JaWYgKHJibmV4dCkKLQkJcmV0dXJuIHJiX2VudHJ5X2RycShyYm5leHQpLT5yZXF1ZXN0OwotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyB2b2lkIGRlYWRsaW5lX2V4aXRfcXVldWUoZWxldmF0b3JfdCAqZSkKIHsKIAlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBlLT5lbGV2YXRvcl9kYXRhOwpAQCAtNTkzLDQ2ICszNTAsMjEgQEAKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRkLT5maWZvX2xpc3RbUkVBRF0pKTsKIAlCVUdfT04oIWxpc3RfZW1wdHkoJmRkLT5maWZvX2xpc3RbV1JJVEVdKSk7CiAKLQltZW1wb29sX2Rlc3Ryb3koZGQtPmRycV9wb29sKTsKLQlrZnJlZShkZC0+aGFzaCk7CiAJa2ZyZWUoZGQpOwogfQogCiAvKgotICogaW5pdGlhbGl6ZSBlbGV2YXRvciBwcml2YXRlIGRhdGEgKGRlYWRsaW5lX2RhdGEpLCBhbmQgYWxsb2MgYSBkcnEgZm9yCi0gKiBlYWNoIHJlcXVlc3Qgb24gdGhlIGZyZWUgbGlzdHMKKyAqIGluaXRpYWxpemUgZWxldmF0b3IgcHJpdmF0ZSBkYXRhIChkZWFkbGluZV9kYXRhKS4KICAqLwogc3RhdGljIHZvaWQgKmRlYWRsaW5lX2luaXRfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBlbGV2YXRvcl90ICplKQogewogCXN0cnVjdCBkZWFkbGluZV9kYXRhICpkZDsKLQlpbnQgaTsKLQotCWlmICghZHJxX3Bvb2wpCi0JCXJldHVybiBOVUxMOwogCiAJZGQgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKCpkZCksIEdGUF9LRVJORUwsIHEtPm5vZGUpOwogCWlmICghZGQpCiAJCXJldHVybiBOVUxMOwogCW1lbXNldChkZCwgMCwgc2l6ZW9mKCpkZCkpOwogCi0JZGQtPmhhc2ggPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSpETF9IQVNIX0VOVFJJRVMsCi0JCQkJR0ZQX0tFUk5FTCwgcS0+bm9kZSk7Ci0JaWYgKCFkZC0+aGFzaCkgewotCQlrZnJlZShkZCk7Ci0JCXJldHVybiBOVUxMOwotCX0KLQotCWRkLT5kcnFfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX25vZGUoQkxLREVWX01JTl9SUSwgbWVtcG9vbF9hbGxvY19zbGFiLAotCQkJCQltZW1wb29sX2ZyZWVfc2xhYiwgZHJxX3Bvb2wsIHEtPm5vZGUpOwotCWlmICghZGQtPmRycV9wb29sKSB7Ci0JCWtmcmVlKGRkLT5oYXNoKTsKLQkJa2ZyZWUoZGQpOwotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgRExfSEFTSF9FTlRSSUVTOyBpKyspCi0JCUlOSVRfSExJU1RfSEVBRCgmZGQtPmhhc2hbaV0pOwotCiAJSU5JVF9MSVNUX0hFQUQoJmRkLT5maWZvX2xpc3RbUkVBRF0pOwogCUlOSVRfTElTVF9IRUFEKCZkZC0+Zmlmb19saXN0W1dSSVRFXSk7CiAJZGQtPnNvcnRfbGlzdFtSRUFEXSA9IFJCX1JPT1Q7CkBAIC02NDUsMzkgKzM3Nyw2IEBACiAJcmV0dXJuIGRkOwogfQogCi1zdGF0aWMgdm9pZCBkZWFkbGluZV9wdXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKLXsKLQlzdHJ1Y3QgZGVhZGxpbmVfZGF0YSAqZGQgPSBxLT5lbGV2YXRvci0+ZWxldmF0b3JfZGF0YTsKLQlzdHJ1Y3QgZGVhZGxpbmVfcnEgKmRycSA9IFJRX0RBVEEocnEpOwotCi0JbWVtcG9vbF9mcmVlKGRycSwgZGQtPmRycV9wb29sKTsKLQlycS0+ZWxldmF0b3JfcHJpdmF0ZSA9IE5VTEw7Ci19Ci0KLXN0YXRpYyBpbnQKLWRlYWRsaW5lX3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8sCi0JCSAgICAgZ2ZwX3QgZ2ZwX21hc2spCi17Ci0Jc3RydWN0IGRlYWRsaW5lX2RhdGEgKmRkID0gcS0+ZWxldmF0b3ItPmVsZXZhdG9yX2RhdGE7Ci0Jc3RydWN0IGRlYWRsaW5lX3JxICpkcnE7Ci0KLQlkcnEgPSBtZW1wb29sX2FsbG9jKGRkLT5kcnFfcG9vbCwgZ2ZwX21hc2spOwotCWlmIChkcnEpIHsKLQkJbWVtc2V0KGRycSwgMCwgc2l6ZW9mKCpkcnEpKTsKLQkJUkJfQ0xFQVJfTk9ERSgmZHJxLT5yYl9ub2RlKTsKLQkJZHJxLT5yZXF1ZXN0ID0gcnE7Ci0KLQkJSU5JVF9ITElTVF9OT0RFKCZkcnEtPmhhc2gpOwotCi0JCUlOSVRfTElTVF9IRUFEKCZkcnEtPmZpZm8pOwotCi0JCXJxLT5lbGV2YXRvcl9wcml2YXRlID0gZHJxOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlyZXR1cm4gMTsKLX0KLQogLyoKICAqIHN5c2ZzIHBhcnRzIGJlbG93CiAgKi8KQEAgLTc1NywxMCArNDU2LDggQEAKIAkJLmVsZXZhdG9yX2Rpc3BhdGNoX2ZuID0JCWRlYWRsaW5lX2Rpc3BhdGNoX3JlcXVlc3RzLAogCQkuZWxldmF0b3JfYWRkX3JlcV9mbiA9CQlkZWFkbGluZV9hZGRfcmVxdWVzdCwKIAkJLmVsZXZhdG9yX3F1ZXVlX2VtcHR5X2ZuID0JZGVhZGxpbmVfcXVldWVfZW1wdHksCi0JCS5lbGV2YXRvcl9mb3JtZXJfcmVxX2ZuID0JZGVhZGxpbmVfZm9ybWVyX3JlcXVlc3QsCi0JCS5lbGV2YXRvcl9sYXR0ZXJfcmVxX2ZuID0JZGVhZGxpbmVfbGF0dGVyX3JlcXVlc3QsCi0JCS5lbGV2YXRvcl9zZXRfcmVxX2ZuID0JCWRlYWRsaW5lX3NldF9yZXF1ZXN0LAotCQkuZWxldmF0b3JfcHV0X3JlcV9mbiA9IAkJZGVhZGxpbmVfcHV0X3JlcXVlc3QsCisJCS5lbGV2YXRvcl9mb3JtZXJfcmVxX2ZuID0JZWx2X3JiX2Zvcm1lcl9yZXF1ZXN0LAorCQkuZWxldmF0b3JfbGF0dGVyX3JlcV9mbiA9CWVsdl9yYl9sYXR0ZXJfcmVxdWVzdCwKIAkJLmVsZXZhdG9yX2luaXRfZm4gPQkJZGVhZGxpbmVfaW5pdF9xdWV1ZSwKIAkJLmVsZXZhdG9yX2V4aXRfZm4gPQkJZGVhZGxpbmVfZXhpdF9xdWV1ZSwKIAl9LApAQCAtNzcyLDI0ICs0NjksMTEgQEAKIAogc3RhdGljIGludCBfX2luaXQgZGVhZGxpbmVfaW5pdCh2b2lkKQogewotCWludCByZXQ7Ci0KLQlkcnFfcG9vbCA9IGttZW1fY2FjaGVfY3JlYXRlKCJkZWFkbGluZV9kcnEiLCBzaXplb2Yoc3RydWN0IGRlYWRsaW5lX3JxKSwKLQkJCQkgICAgIDAsIDAsIE5VTEwsIE5VTEwpOwotCi0JaWYgKCFkcnFfcG9vbCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlyZXQgPSBlbHZfcmVnaXN0ZXIoJmlvc2NoZWRfZGVhZGxpbmUpOwotCWlmIChyZXQpCi0JCWttZW1fY2FjaGVfZGVzdHJveShkcnFfcG9vbCk7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiBlbHZfcmVnaXN0ZXIoJmlvc2NoZWRfZGVhZGxpbmUpOwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZGVhZGxpbmVfZXhpdCh2b2lkKQogewotCWttZW1fY2FjaGVfZGVzdHJveShkcnFfcG9vbCk7CiAJZWx2X3VucmVnaXN0ZXIoJmlvc2NoZWRfZGVhZGxpbmUpOwogfQogCmRpZmYgLS1naXQgYS9ibG9jay9lbGV2YXRvci5jIGIvYmxvY2svZWxldmF0b3IuYwppbmRleCA5YjcyZGM3Li40ODdkZDNkIDEwMDY0NAotLS0gYS9ibG9jay9lbGV2YXRvci5jCisrKyBiL2Jsb2NrL2VsZXZhdG9yLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIENvcHlyaWdodCAoQykgMjAwMCBBbmRyZWEgQXJjYW5nZWxpIDxhbmRyZWFAc3VzZS5kZT4gU3VTRQogICoKLSAqIDMwMDQyMDAwIEplbnMgQXhib2UgPGF4Ym9lQHN1c2UuZGU+IDoKKyAqIDMwMDQyMDAwIEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4gOgogICoKICAqIFNwbGl0IHRoZSBlbGV2YXRvciBhIGJpdCBzbyB0aGF0IGl0IGlzIHBvc3NpYmxlIHRvIGNob29zZSBhIGRpZmZlcmVudAogICogb25lIG9yIGV2ZW4gd3JpdGUgYSBuZXcgInBsdWcgaW4iLiBUaGVyZSBhcmUgdGhyZWUgcGllY2VzOgpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9ibGt0cmFjZV9hcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9oYXNoLmg+CiAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC00MCw2ICs0MSwxNiBAQAogc3RhdGljIExJU1RfSEVBRChlbHZfbGlzdCk7CiAKIC8qCisgKiBNZXJnZSBoYXNoIHN0dWZmLgorICovCitzdGF0aWMgY29uc3QgaW50IGVsdl9oYXNoX3NoaWZ0ID0gNjsKKyNkZWZpbmUgRUxWX0hBU0hfQkxPQ0soc2VjKQkoKHNlYykgPj4gMykKKyNkZWZpbmUgRUxWX0hBU0hfRk4oc2VjKQkoaGFzaF9sb25nKEVMVl9IQVNIX0JMT0NLKChzZWMpKSwgZWx2X2hhc2hfc2hpZnQpKQorI2RlZmluZSBFTFZfSEFTSF9FTlRSSUVTCSgxIDw8IGVsdl9oYXNoX3NoaWZ0KQorI2RlZmluZSBycV9oYXNoX2tleShycSkJCSgocnEpLT5zZWN0b3IgKyAocnEpLT5ucl9zZWN0b3JzKQorI2RlZmluZSBFTFZfT05fSEFTSChycSkJCSghaGxpc3RfdW5oYXNoZWQoJihycSktPmhhc2gpKQorCisvKgogICogY2FuIHdlIHNhZmVseSBtZXJnZSB3aXRoIHRoaXMgcmVxdWVzdD8KICAqLwogaW5saW5lIGludCBlbHZfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCkBAIC01Niw4ICs2Nyw3IEBACiAJLyoKIAkgKiBzYW1lIGRldmljZSBhbmQgbm8gc3BlY2lhbCBzdHVmZiBzZXQsIG1lcmdlIGlzIG9rCiAJICovCi0JaWYgKHJxLT5ycV9kaXNrID09IGJpby0+YmlfYmRldi0+YmRfZGlzayAmJgotCSAgICAhcnEtPndhaXRpbmcgJiYgIXJxLT5zcGVjaWFsKQorCWlmIChycS0+cnFfZGlzayA9PSBiaW8tPmJpX2JkZXYtPmJkX2Rpc2sgJiYgIXJxLT5zcGVjaWFsKQogCQlyZXR1cm4gMTsKIAogCXJldHVybiAwOwpAQCAtMTUxLDI3ICsxNjEsNDQgQEAKIAogc3RhdGljIHN0cnVjdCBrb2JqX3R5cGUgZWx2X2t0eXBlOwogCi1zdGF0aWMgZWxldmF0b3JfdCAqZWxldmF0b3JfYWxsb2Moc3RydWN0IGVsZXZhdG9yX3R5cGUgKmUpCitzdGF0aWMgZWxldmF0b3JfdCAqZWxldmF0b3JfYWxsb2MocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgZWxldmF0b3JfdHlwZSAqZSkKIHsKLQllbGV2YXRvcl90ICplcSA9IGttYWxsb2Moc2l6ZW9mKGVsZXZhdG9yX3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXEpIHsKLQkJbWVtc2V0KGVxLCAwLCBzaXplb2YoKmVxKSk7Ci0JCWVxLT5vcHMgPSAmZS0+b3BzOwotCQllcS0+ZWxldmF0b3JfdHlwZSA9IGU7Ci0JCWtvYmplY3RfaW5pdCgmZXEtPmtvYmopOwotCQlzbnByaW50ZihlcS0+a29iai5uYW1lLCBLT0JKX05BTUVfTEVOLCAiJXMiLCAiaW9zY2hlZCIpOwotCQllcS0+a29iai5rdHlwZSA9ICZlbHZfa3R5cGU7Ci0JCW11dGV4X2luaXQoJmVxLT5zeXNmc19sb2NrKTsKLQl9IGVsc2UgewotCQllbGV2YXRvcl9wdXQoZSk7Ci0JfQorCWVsZXZhdG9yX3QgKmVxOworCWludCBpOworCisJZXEgPSBrbWFsbG9jX25vZGUoc2l6ZW9mKGVsZXZhdG9yX3QpLCBHRlBfS0VSTkVMLCBxLT5ub2RlKTsKKwlpZiAodW5saWtlbHkoIWVxKSkKKwkJZ290byBlcnI7CisKKwltZW1zZXQoZXEsIDAsIHNpemVvZigqZXEpKTsKKwllcS0+b3BzID0gJmUtPm9wczsKKwllcS0+ZWxldmF0b3JfdHlwZSA9IGU7CisJa29iamVjdF9pbml0KCZlcS0+a29iaik7CisJc25wcmludGYoZXEtPmtvYmoubmFtZSwgS09CSl9OQU1FX0xFTiwgIiVzIiwgImlvc2NoZWQiKTsKKwllcS0+a29iai5rdHlwZSA9ICZlbHZfa3R5cGU7CisJbXV0ZXhfaW5pdCgmZXEtPnN5c2ZzX2xvY2spOworCisJZXEtPmhhc2ggPSBrbWFsbG9jX25vZGUoc2l6ZW9mKHN0cnVjdCBobGlzdF9oZWFkKSAqIEVMVl9IQVNIX0VOVFJJRVMsCisJCQkJCUdGUF9LRVJORUwsIHEtPm5vZGUpOworCWlmICghZXEtPmhhc2gpCisJCWdvdG8gZXJyOworCisJZm9yIChpID0gMDsgaSA8IEVMVl9IQVNIX0VOVFJJRVM7IGkrKykKKwkJSU5JVF9ITElTVF9IRUFEKCZlcS0+aGFzaFtpXSk7CisKIAlyZXR1cm4gZXE7CitlcnI6CisJa2ZyZWUoZXEpOworCWVsZXZhdG9yX3B1dChlKTsKKwlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgZWxldmF0b3JfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iaikKIHsKIAllbGV2YXRvcl90ICplID0gY29udGFpbmVyX29mKGtvYmosIGVsZXZhdG9yX3QsIGtvYmopOworCiAJZWxldmF0b3JfcHV0KGUtPmVsZXZhdG9yX3R5cGUpOworCWtmcmVlKGUtPmhhc2gpOwogCWtmcmVlKGUpOwogfQogCkBAIC0xOTgsNyArMjI1LDcgQEAKIAkJZSA9IGVsZXZhdG9yX2dldCgibm9vcCIpOwogCX0KIAotCWVxID0gZWxldmF0b3JfYWxsb2MoZSk7CisJZXEgPSBlbGV2YXRvcl9hbGxvYyhxLCBlKTsKIAlpZiAoIWVxKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMjEyLDYgKzIzOSw4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorRVhQT1JUX1NZTUJPTChlbGV2YXRvcl9pbml0KTsKKwogdm9pZCBlbGV2YXRvcl9leGl0KGVsZXZhdG9yX3QgKmUpCiB7CiAJbXV0ZXhfbG9jaygmZS0+c3lzZnNfbG9jayk7CkBAIC0yMjMsMTAgKzI1MiwxMTggQEAKIAlrb2JqZWN0X3B1dCgmZS0+a29iaik7CiB9CiAKK0VYUE9SVF9TWU1CT0woZWxldmF0b3JfZXhpdCk7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2Vsdl9ycWhhc2hfZGVsKHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlobGlzdF9kZWxfaW5pdCgmcnEtPmhhc2gpOworfQorCitzdGF0aWMgdm9pZCBlbHZfcnFoYXNoX2RlbChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlpZiAoRUxWX09OX0hBU0gocnEpKQorCQlfX2Vsdl9ycWhhc2hfZGVsKHJxKTsKK30KKworc3RhdGljIHZvaWQgZWx2X3JxaGFzaF9hZGQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOworCisJQlVHX09OKEVMVl9PTl9IQVNIKHJxKSk7CisJaGxpc3RfYWRkX2hlYWQoJnJxLT5oYXNoLCAmZS0+aGFzaFtFTFZfSEFTSF9GTihycV9oYXNoX2tleShycSkpXSk7Cit9CisKK3N0YXRpYyB2b2lkIGVsdl9ycWhhc2hfcmVwb3NpdGlvbihyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3sKKwlfX2Vsdl9ycWhhc2hfZGVsKHJxKTsKKwllbHZfcnFoYXNoX2FkZChxLCBycSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVxdWVzdCAqZWx2X3JxaGFzaF9maW5kKHJlcXVlc3RfcXVldWVfdCAqcSwgc2VjdG9yX3Qgb2Zmc2V0KQoreworCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGFzaF9saXN0ID0gJmUtPmhhc2hbRUxWX0hBU0hfRk4ob2Zmc2V0KV07CisJc3RydWN0IGhsaXN0X25vZGUgKmVudHJ5LCAqbmV4dDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnE7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHJxLCBlbnRyeSwgbmV4dCwgaGFzaF9saXN0LCBoYXNoKSB7CisJCUJVR19PTighRUxWX09OX0hBU0gocnEpKTsKKworCQlpZiAodW5saWtlbHkoIXJxX21lcmdlYWJsZShycSkpKSB7CisJCQlfX2Vsdl9ycWhhc2hfZGVsKHJxKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJxX2hhc2hfa2V5KHJxKSA9PSBvZmZzZXQpCisJCQlyZXR1cm4gcnE7CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiBSQi10cmVlIHN1cHBvcnQgZnVuY3Rpb25zIGZvciBpbnNlcnRpbmcvbG9va3VwL3JlbW92YWwgb2YgcmVxdWVzdHMKKyAqIGluIGEgc29ydGVkIFJCIHRyZWUuCisgKi8KK3N0cnVjdCByZXF1ZXN0ICplbHZfcmJfYWRkKHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHJiX25vZGUgKipwID0gJnJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJiX25vZGUgKnBhcmVudCA9IE5VTEw7CisJc3RydWN0IHJlcXVlc3QgKl9fcnE7CisKKwl3aGlsZSAoKnApIHsKKwkJcGFyZW50ID0gKnA7CisJCV9fcnEgPSByYl9lbnRyeShwYXJlbnQsIHN0cnVjdCByZXF1ZXN0LCByYl9ub2RlKTsKKworCQlpZiAocnEtPnNlY3RvciA8IF9fcnEtPnNlY3RvcikKKwkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKKwkJZWxzZSBpZiAocnEtPnNlY3RvciA+IF9fcnEtPnNlY3RvcikKKwkJCXAgPSAmKCpwKS0+cmJfcmlnaHQ7CisJCWVsc2UKKwkJCXJldHVybiBfX3JxOworCX0KKworCXJiX2xpbmtfbm9kZSgmcnEtPnJiX25vZGUsIHBhcmVudCwgcCk7CisJcmJfaW5zZXJ0X2NvbG9yKCZycS0+cmJfbm9kZSwgcm9vdCk7CisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0woZWx2X3JiX2FkZCk7CisKK3ZvaWQgZWx2X3JiX2RlbChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCUJVR19PTihSQl9FTVBUWV9OT0RFKCZycS0+cmJfbm9kZSkpOworCXJiX2VyYXNlKCZycS0+cmJfbm9kZSwgcm9vdCk7CisJUkJfQ0xFQVJfTk9ERSgmcnEtPnJiX25vZGUpOworfQorCitFWFBPUlRfU1lNQk9MKGVsdl9yYl9kZWwpOworCitzdHJ1Y3QgcmVxdWVzdCAqZWx2X3JiX2ZpbmQoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHNlY3Rvcl90IHNlY3RvcikKK3sKKwlzdHJ1Y3QgcmJfbm9kZSAqbiA9IHJvb3QtPnJiX25vZGU7CisJc3RydWN0IHJlcXVlc3QgKnJxOworCisJd2hpbGUgKG4pIHsKKwkJcnEgPSByYl9lbnRyeShuLCBzdHJ1Y3QgcmVxdWVzdCwgcmJfbm9kZSk7CisKKwkJaWYgKHNlY3RvciA8IHJxLT5zZWN0b3IpCisJCQluID0gbi0+cmJfbGVmdDsKKwkJZWxzZSBpZiAoc2VjdG9yID4gcnEtPnNlY3RvcikKKwkJCW4gPSBuLT5yYl9yaWdodDsKKwkJZWxzZQorCQkJcmV0dXJuIHJxOworCX0KKworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKGVsdl9yYl9maW5kKTsKKwogLyoKICAqIEluc2VydCBycSBpbnRvIGRpc3BhdGNoIHF1ZXVlIG9mIHEuICBRdWV1ZSBsb2NrIG11c3QgYmUgaGVsZCBvbgotICogZW50cnkuICBJZiBzb3J0ICE9IDAsIHJxIGlzIHNvcnQtaW5zZXJ0ZWQ7IG90aGVyd2lzZSwgcnEgd2lsbCBiZQotICogYXBwZW5kZWQgdG8gdGhlIGRpc3BhdGNoIHF1ZXVlLiAgVG8gYmUgdXNlZCBieSBzcGVjaWZpYyBlbGV2YXRvcnMuCisgKiBlbnRyeS4gIHJxIGlzIHNvcnQgaW5zdGVkIGludG8gdGhlIGRpc3BhdGNoIHF1ZXVlLiBUbyBiZSB1c2VkIGJ5CisgKiBzcGVjaWZpYyBlbGV2YXRvcnMuCiAgKi8KIHZvaWQgZWx2X2Rpc3BhdGNoX3NvcnQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CkBAIC0yMzUsNiArMzcyLDkgQEAKIAogCWlmIChxLT5sYXN0X21lcmdlID09IHJxKQogCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKKworCWVsdl9ycWhhc2hfZGVsKHEsIHJxKTsKKwogCXEtPm5yX3NvcnRlZC0tOwogCiAJYm91bmRhcnkgPSBxLT5lbmRfc2VjdG9yOwpAQCAtMjQyLDcgKzM4Miw3IEBACiAJbGlzdF9mb3JfZWFjaF9wcmV2KGVudHJ5LCAmcS0+cXVldWVfaGVhZCkgewogCQlzdHJ1Y3QgcmVxdWVzdCAqcG9zID0gbGlzdF9lbnRyeV9ycShlbnRyeSk7CiAKLQkJaWYgKHBvcy0+ZmxhZ3MgJiAoUkVRX1NPRlRCQVJSSUVSfFJFUV9IQVJEQkFSUklFUnxSRVFfU1RBUlRFRCkpCisJCWlmIChwb3MtPmNtZF9mbGFncyAmIChSRVFfU09GVEJBUlJJRVJ8UkVRX0hBUkRCQVJSSUVSfFJFUV9TVEFSVEVEKSkKIAkJCWJyZWFrOwogCQlpZiAocnEtPnNlY3RvciA+PSBib3VuZGFyeSkgewogCQkJaWYgKHBvcy0+c2VjdG9yIDwgYm91bmRhcnkpCkBAIC0yNTgsMTEgKzM5OCwzOCBAQAogCWxpc3RfYWRkKCZycS0+cXVldWVsaXN0LCBlbnRyeSk7CiB9CiAKK0VYUE9SVF9TWU1CT0woZWx2X2Rpc3BhdGNoX3NvcnQpOworCisvKgorICogSW5zZXJ0IHJxIGludG8gZGlzcGF0Y2ggcXVldWUgb2YgcS4gIFF1ZXVlIGxvY2sgbXVzdCBiZSBoZWxkIG9uCisgKiBlbnRyeS4gIHJxIGlzIGFkZGVkIHRvIHRoZSBiYWNrIG9mIHRoZSBkaXNwYXRjaCBxdWV1ZS4gVG8gYmUgdXNlZCBieQorICogc3BlY2lmaWMgZWxldmF0b3JzLgorICovCit2b2lkIGVsdl9kaXNwYXRjaF9hZGRfdGFpbChzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCWlmIChxLT5sYXN0X21lcmdlID09IHJxKQorCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKKworCWVsdl9ycWhhc2hfZGVsKHEsIHJxKTsKKworCXEtPm5yX3NvcnRlZC0tOworCisJcS0+ZW5kX3NlY3RvciA9IHJxX2VuZF9zZWN0b3IocnEpOworCXEtPmJvdW5kYXJ5X3JxID0gcnE7CisJbGlzdF9hZGRfdGFpbCgmcnEtPnF1ZXVlbGlzdCwgJnEtPnF1ZXVlX2hlYWQpOworfQorCitFWFBPUlRfU1lNQk9MKGVsdl9kaXNwYXRjaF9hZGRfdGFpbCk7CisKIGludCBlbHZfbWVyZ2UocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqKnJlcSwgc3RydWN0IGJpbyAqYmlvKQogewogCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKKwlzdHJ1Y3QgcmVxdWVzdCAqX19ycTsKIAlpbnQgcmV0OwogCisJLyoKKwkgKiBGaXJzdCB0cnkgb25lLWhpdCBjYWNoZS4KKwkgKi8KIAlpZiAocS0+bGFzdF9tZXJnZSkgewogCQlyZXQgPSBlbHZfdHJ5X21lcmdlKHEtPmxhc3RfbWVyZ2UsIGJpbyk7CiAJCWlmIChyZXQgIT0gRUxFVkFUT1JfTk9fTUVSR0UpIHsKQEAgLTI3MSwxOCArNDM4LDMwIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNlZSBpZiBvdXIgaGFzaCBsb29rdXAgY2FuIGZpbmQgYSBwb3RlbnRpYWwgYmFja21lcmdlLgorCSAqLworCV9fcnEgPSBlbHZfcnFoYXNoX2ZpbmQocSwgYmlvLT5iaV9zZWN0b3IpOworCWlmIChfX3JxICYmIGVsdl9ycV9tZXJnZV9vayhfX3JxLCBiaW8pKSB7CisJCSpyZXEgPSBfX3JxOworCQlyZXR1cm4gRUxFVkFUT1JfQkFDS19NRVJHRTsKKwl9CisKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9tZXJnZV9mbikKIAkJcmV0dXJuIGUtPm9wcy0+ZWxldmF0b3JfbWVyZ2VfZm4ocSwgcmVxLCBiaW8pOwogCiAJcmV0dXJuIEVMRVZBVE9SX05PX01FUkdFOwogfQogCi12b2lkIGVsdl9tZXJnZWRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3ZvaWQgZWx2X21lcmdlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgdHlwZSkKIHsKIAllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9tZXJnZWRfZm4pCi0JCWUtPm9wcy0+ZWxldmF0b3JfbWVyZ2VkX2ZuKHEsIHJxKTsKKwkJZS0+b3BzLT5lbGV2YXRvcl9tZXJnZWRfZm4ocSwgcnEsIHR5cGUpOworCisJaWYgKHR5cGUgPT0gRUxFVkFUT1JfQkFDS19NRVJHRSkKKwkJZWx2X3JxaGFzaF9yZXBvc2l0aW9uKHEsIHJxKTsKIAogCXEtPmxhc3RfbWVyZ2UgPSBycTsKIH0KQEAgLTI5NCw4ICs0NzMsMTEgQEAKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX21lcmdlX3JlcV9mbikKIAkJZS0+b3BzLT5lbGV2YXRvcl9tZXJnZV9yZXFfZm4ocSwgcnEsIG5leHQpOwotCXEtPm5yX3NvcnRlZC0tOwogCisJZWx2X3JxaGFzaF9yZXBvc2l0aW9uKHEsIHJxKTsKKwllbHZfcnFoYXNoX2RlbChxLCBuZXh0KTsKKworCXEtPm5yX3NvcnRlZC0tOwogCXEtPmxhc3RfbWVyZ2UgPSBycTsKIH0KIApAQCAtMzEzLDcgKzQ5NSw3IEBACiAJCQllLT5vcHMtPmVsZXZhdG9yX2RlYWN0aXZhdGVfcmVxX2ZuKHEsIHJxKTsKIAl9CiAKLQlycS0+ZmxhZ3MgJj0gflJFUV9TVEFSVEVEOworCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9TVEFSVEVEOwogCiAJZWx2X2luc2VydChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX1JFUVVFVUUpOwogfQpAQCAtMzQ0LDEzICs1MjYsMTMgQEAKIAogCXN3aXRjaCAod2hlcmUpIHsKIAljYXNlIEVMRVZBVE9SX0lOU0VSVF9GUk9OVDoKLQkJcnEtPmZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfU09GVEJBUlJJRVI7CiAKIAkJbGlzdF9hZGQoJnJxLT5xdWV1ZWxpc3QsICZxLT5xdWV1ZV9oZWFkKTsKIAkJYnJlYWs7CiAKIAljYXNlIEVMRVZBVE9SX0lOU0VSVF9CQUNLOgotCQlycS0+ZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOworCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKIAkJZWx2X2RyYWluX2VsZXZhdG9yKHEpOwogCQlsaXN0X2FkZF90YWlsKCZycS0+cXVldWVsaXN0LCAmcS0+cXVldWVfaGVhZCk7CiAJCS8qCkBAIC0zNjksMTAgKzU1MSwxNCBAQAogCiAJY2FzZSBFTEVWQVRPUl9JTlNFUlRfU09SVDoKIAkJQlVHX09OKCFibGtfZnNfcmVxdWVzdChycSkpOwotCQlycS0+ZmxhZ3MgfD0gUkVRX1NPUlRFRDsKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfU09SVEVEOwogCQlxLT5ucl9zb3J0ZWQrKzsKLQkJaWYgKHEtPmxhc3RfbWVyZ2UgPT0gTlVMTCAmJiBycV9tZXJnZWFibGUocnEpKQotCQkJcS0+bGFzdF9tZXJnZSA9IHJxOworCQlpZiAocnFfbWVyZ2VhYmxlKHJxKSkgeworCQkJZWx2X3JxaGFzaF9hZGQocSwgcnEpOworCQkJaWYgKCFxLT5sYXN0X21lcmdlKQorCQkJCXEtPmxhc3RfbWVyZ2UgPSBycTsKKwkJfQorCiAJCS8qCiAJCSAqIFNvbWUgaW9zY2hlZHMgKGNmcSkgcnVuIHEtPnJlcXVlc3RfZm4gZGlyZWN0bHksIHNvCiAJCSAqIHJxIGNhbm5vdCBiZSBhY2Nlc3NlZCBhZnRlciBjYWxsaW5nCkBAIC0zODcsNyArNTczLDcgQEAKIAkJICogaW5zZXJ0aW9uOyBvdGhlcndpc2UsIHJlcXVlc3RzIHNob3VsZCBiZSByZXF1ZXVlZAogCQkgKiBpbiBvcmRzZXEgb3JkZXIuCiAJCSAqLwotCQlycS0+ZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOworCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKIAogCQlpZiAocS0+b3Jkc2VxID09IDApIHsKIAkJCWxpc3RfYWRkKCZycS0+cXVldWVsaXN0LCAmcS0+cXVldWVfaGVhZCk7CkBAIC00MjksOSArNjE1LDkgQEAKIAkJICAgICAgIGludCBwbHVnKQogewogCWlmIChxLT5vcmRjb2xvcikKLQkJcnEtPmZsYWdzIHw9IFJFUV9PUkRFUkVEX0NPTE9SOworCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9PUkRFUkVEX0NPTE9SOwogCi0JaWYgKHJxLT5mbGFncyAmIChSRVFfU09GVEJBUlJJRVIgfCBSRVFfSEFSREJBUlJJRVIpKSB7CisJaWYgKHJxLT5jbWRfZmxhZ3MgJiAoUkVRX1NPRlRCQVJSSUVSIHwgUkVRX0hBUkRCQVJSSUVSKSkgewogCQkvKgogCQkgKiB0b2dnbGUgb3JkZXJlZCBjb2xvcgogCQkgKi8KQEAgLTQ1Miw3ICs2MzgsNyBAQAogCQkJcS0+ZW5kX3NlY3RvciA9IHJxX2VuZF9zZWN0b3IocnEpOwogCQkJcS0+Ym91bmRhcnlfcnEgPSBycTsKIAkJfQotCX0gZWxzZSBpZiAoIShycS0+ZmxhZ3MgJiBSRVFfRUxWUFJJVikgJiYgd2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlQpCisJfSBlbHNlIGlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRUxWUFJJVikgJiYgd2hlcmUgPT0gRUxFVkFUT1JfSU5TRVJUX1NPUlQpCiAJCXdoZXJlID0gRUxFVkFUT1JfSU5TRVJUX0JBQ0s7CiAKIAlpZiAocGx1ZykKQEAgLTQ2MSw2ICs2NDcsOCBAQAogCWVsdl9pbnNlcnQocSwgcnEsIHdoZXJlKTsKIH0KIAorRVhQT1JUX1NZTUJPTChfX2Vsdl9hZGRfcmVxdWVzdCk7CisKIHZvaWQgZWx2X2FkZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBpbnQgd2hlcmUsCiAJCSAgICAgaW50IHBsdWcpCiB7CkBAIC00NzEsNiArNjU5LDggQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKHEtPnF1ZXVlX2xvY2ssIGZsYWdzKTsKIH0KIAorRVhQT1JUX1NZTUJPTChlbHZfYWRkX3JlcXVlc3QpOworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICpfX2Vsdl9uZXh0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxKQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKQEAgLTQ5Myw3ICs2ODMsNyBAQAogCWludCByZXQ7CiAKIAl3aGlsZSAoKHJxID0gX19lbHZfbmV4dF9yZXF1ZXN0KHEpKSAhPSBOVUxMKSB7Ci0JCWlmICghKHJxLT5mbGFncyAmIFJFUV9TVEFSVEVEKSkgeworCQlpZiAoIShycS0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpKSB7CiAJCQllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CiAKIAkJCS8qCkBAIC01MTAsNyArNzAwLDcgQEAKIAkJCSAqIGl0LCBhIHJlcXVlc3QgdGhhdCBoYXMgYmVlbiBkZWxheWVkIHNob3VsZAogCQkJICogbm90IGJlIHBhc3NlZCBieSBuZXcgaW5jb21pbmcgcmVxdWVzdHMKIAkJCSAqLwotCQkJcnEtPmZsYWdzIHw9IFJFUV9TVEFSVEVEOworCQkJcnEtPmNtZF9mbGFncyB8PSBSRVFfU1RBUlRFRDsKIAkJCWJsa19hZGRfdHJhY2VfcnEocSwgcnEsIEJMS19UQV9JU1NVRSk7CiAJCX0KIApAQCAtNTE5LDcgKzcwOSw3IEBACiAJCQlxLT5ib3VuZGFyeV9ycSA9IE5VTEw7CiAJCX0KIAotCQlpZiAoKHJxLT5mbGFncyAmIFJFUV9ET05UUFJFUCkgfHwgIXEtPnByZXBfcnFfZm4pCisJCWlmICgocnEtPmNtZF9mbGFncyAmIFJFUV9ET05UUFJFUCkgfHwgIXEtPnByZXBfcnFfZm4pCiAJCQlicmVhazsKIAogCQlyZXQgPSBxLT5wcmVwX3JxX2ZuKHEsIHJxKTsKQEAgLTU0MSw3ICs3MzEsNyBAQAogCQkJCW5yX2J5dGVzID0gcnEtPmRhdGFfbGVuOwogCiAJCQlibGtkZXZfZGVxdWV1ZV9yZXF1ZXN0KHJxKTsKLQkJCXJxLT5mbGFncyB8PSBSRVFfUVVJRVQ7CisJCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9RVUlFVDsKIAkJCWVuZF90aGF0X3JlcXVlc3RfY2h1bmsocnEsIDAsIG5yX2J5dGVzKTsKIAkJCWVuZF90aGF0X3JlcXVlc3RfbGFzdChycSwgMCk7CiAJCX0gZWxzZSB7CkBAIC01NTQsOSArNzQ0LDEyIEBACiAJcmV0dXJuIHJxOwogfQogCitFWFBPUlRfU1lNQk9MKGVsdl9uZXh0X3JlcXVlc3QpOworCiB2b2lkIGVsdl9kZXF1ZXVlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJQlVHX09OKGxpc3RfZW1wdHkoJnJxLT5xdWV1ZWxpc3QpKTsKKwlCVUdfT04oRUxWX09OX0hBU0gocnEpKTsKIAogCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOwogCkBAIC01NjksNiArNzYyLDggQEAKIAkJcS0+aW5fZmxpZ2h0Kys7CiB9CiAKK0VYUE9SVF9TWU1CT0woZWx2X2RlcXVldWVfcmVxdWVzdCk7CisKIGludCBlbHZfcXVldWVfZW1wdHkocmVxdWVzdF9xdWV1ZV90ICpxKQogewogCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKQEAgLTU4Miw2ICs3NzcsOCBAQAogCXJldHVybiAxOwogfQogCitFWFBPUlRfU1lNQk9MKGVsdl9xdWV1ZV9lbXB0eSk7CisKIHN0cnVjdCByZXF1ZXN0ICplbHZfbGF0dGVyX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJZWxldmF0b3JfdCAqZSA9IHEtPmVsZXZhdG9yOwpAQCAtNjAwLDEzICs3OTcsMTIgQEAKIAlyZXR1cm4gTlVMTDsKIH0KIAotaW50IGVsdl9zZXRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwgc3RydWN0IGJpbyAqYmlvLAotCQkgICAgZ2ZwX3QgZ2ZwX21hc2spCitpbnQgZWx2X3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBnZnBfdCBnZnBfbWFzaykKIHsKIAllbGV2YXRvcl90ICplID0gcS0+ZWxldmF0b3I7CiAKIAlpZiAoZS0+b3BzLT5lbGV2YXRvcl9zZXRfcmVxX2ZuKQotCQlyZXR1cm4gZS0+b3BzLT5lbGV2YXRvcl9zZXRfcmVxX2ZuKHEsIHJxLCBiaW8sIGdmcF9tYXNrKTsKKwkJcmV0dXJuIGUtPm9wcy0+ZWxldmF0b3Jfc2V0X3JlcV9mbihxLCBycSwgZ2ZwX21hc2spOwogCiAJcnEtPmVsZXZhdG9yX3ByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwpAQCAtNjIwLDEyICs4MTYsMTIgQEAKIAkJZS0+b3BzLT5lbGV2YXRvcl9wdXRfcmVxX2ZuKHEsIHJxKTsKIH0KIAotaW50IGVsdl9tYXlfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxLCBpbnQgcncsIHN0cnVjdCBiaW8gKmJpbykKK2ludCBlbHZfbWF5X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3KQogewogCWVsZXZhdG9yX3QgKmUgPSBxLT5lbGV2YXRvcjsKIAogCWlmIChlLT5vcHMtPmVsZXZhdG9yX21heV9xdWV1ZV9mbikKLQkJcmV0dXJuIGUtPm9wcy0+ZWxldmF0b3JfbWF5X3F1ZXVlX2ZuKHEsIHJ3LCBiaW8pOworCQlyZXR1cm4gZS0+b3BzLT5lbGV2YXRvcl9tYXlfcXVldWVfZm4ocSwgcncpOwogCiAJcmV0dXJuIEVMVl9NUVVFVUVfTUFZOwogfQpAQCAtNzkyLDcgKzk4OCw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSBuZXcgZWxldmF0b3IKIAkgKi8KLQllID0gZWxldmF0b3JfYWxsb2MobmV3X2UpOworCWUgPSBlbGV2YXRvcl9hbGxvYyhxLCBuZXdfZSk7CiAJaWYgKCFlKQogCQlyZXR1cm4gMDsKIApAQCAtOTA4LDExICsxMTA0LDI2IEBACiAJcmV0dXJuIGxlbjsKIH0KIAotRVhQT1JUX1NZTUJPTChlbHZfZGlzcGF0Y2hfc29ydCk7Ci1FWFBPUlRfU1lNQk9MKGVsdl9hZGRfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKF9fZWx2X2FkZF9yZXF1ZXN0KTsKLUVYUE9SVF9TWU1CT0woZWx2X25leHRfcmVxdWVzdCk7Ci1FWFBPUlRfU1lNQk9MKGVsdl9kZXF1ZXVlX3JlcXVlc3QpOwotRVhQT1JUX1NZTUJPTChlbHZfcXVldWVfZW1wdHkpOwotRVhQT1JUX1NZTUJPTChlbGV2YXRvcl9leGl0KTsKLUVYUE9SVF9TWU1CT0woZWxldmF0b3JfaW5pdCk7CitzdHJ1Y3QgcmVxdWVzdCAqZWx2X3JiX2Zvcm1lcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQoreworCXN0cnVjdCByYl9ub2RlICpyYnByZXYgPSByYl9wcmV2KCZycS0+cmJfbm9kZSk7CisKKwlpZiAocmJwcmV2KQorCQlyZXR1cm4gcmJfZW50cnlfcnEocmJwcmV2KTsKKworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKGVsdl9yYl9mb3JtZXJfcmVxdWVzdCk7CisKK3N0cnVjdCByZXF1ZXN0ICplbHZfcmJfbGF0dGVyX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit7CisJc3RydWN0IHJiX25vZGUgKnJibmV4dCA9IHJiX25leHQoJnJxLT5yYl9ub2RlKTsKKworCWlmIChyYm5leHQpCisJCXJldHVybiByYl9lbnRyeV9ycShyYm5leHQpOworCisJcmV0dXJuIE5VTEw7Cit9CisKK0VYUE9SVF9TWU1CT0woZWx2X3JiX2xhdHRlcl9yZXF1ZXN0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2dlbmhkLmMgYi9ibG9jay9nZW5oZC5jCmluZGV4IDI1ZDFmNDIuLjY1MzkxOWQgMTAwNjQ0Ci0tLSBhL2Jsb2NrL2dlbmhkLmMKKysrIGIvYmxvY2svZ2VuaGQuYwpAQCAtMjk1LDEwICsyOTUsMTUgQEAKIAogc3RhdGljIGludCBfX2luaXQgZ2VuaGRfZGV2aWNlX2luaXQodm9pZCkKIHsKKwlpbnQgZXJyOworCiAJYmRldl9tYXAgPSBrb2JqX21hcF9pbml0KGJhc2VfcHJvYmUsICZibG9ja19zdWJzeXNfbG9jayk7CiAJYmxrX2Rldl9pbml0KCk7Ci0Jc3Vic3lzdGVtX3JlZ2lzdGVyKCZibG9ja19zdWJzeXMpOwotCXJldHVybiAwOworCWVyciA9IHN1YnN5c3RlbV9yZWdpc3RlcigmYmxvY2tfc3Vic3lzKTsKKwlpZiAoZXJyIDwgMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN1YnN5c3RlbV9yZWdpc3RlciBlcnJvcjogJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogc3Vic3lzX2luaXRjYWxsKGdlbmhkX2RldmljZV9pbml0KTsKZGlmZiAtLWdpdCBhL2Jsb2NrL2xsX3J3X2Jsay5jIGIvYmxvY2svbGxfcndfYmxrLmMKaW5kZXggOWMzYTA2Yi4uODM0MjVmYiAxMDA2NDQKLS0tIGEvYmxvY2svbGxfcndfYmxrLmMKKysrIGIvYmxvY2svbGxfcndfYmxrLmMKQEAgLTM5LDYgKzM5LDcgQEAKIHN0YXRpYyB2b2lkIGRyaXZlX3N0YXRfYWNjdChzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBucl9zZWN0b3JzLCBpbnQgbmV3X2lvKTsKIHN0YXRpYyB2b2lkIGluaXRfcmVxdWVzdF9mcm9tX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmlvICpiaW8pOwogc3RhdGljIGludCBfX21ha2VfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKmJpbyk7CitzdGF0aWMgc3RydWN0IGlvX2NvbnRleHQgKmN1cnJlbnRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKTsKIAogLyoKICAqIEZvciB0aGUgYWxsb2NhdGVkIHJlcXVlc3QgdGFibGVzCkBAIC0yNzcsMTkgKzI3OCwxOSBAQAogCiBFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9tYWtlX3JlcXVlc3QpOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcnFfaW5pdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKK3N0YXRpYyB2b2lkIHJxX2luaXQocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJSU5JVF9MSVNUX0hFQUQoJnJxLT5xdWV1ZWxpc3QpOwogCUlOSVRfTElTVF9IRUFEKCZycS0+ZG9uZWxpc3QpOwogCiAJcnEtPmVycm9ycyA9IDA7Ci0JcnEtPnJxX3N0YXR1cyA9IFJRX0FDVElWRTsKIAlycS0+YmlvID0gcnEtPmJpb3RhaWwgPSBOVUxMOworCUlOSVRfSExJU1RfTk9ERSgmcnEtPmhhc2gpOworCVJCX0NMRUFSX05PREUoJnJxLT5yYl9ub2RlKTsKIAlycS0+aW9wcmlvID0gMDsKIAlycS0+YnVmZmVyID0gTlVMTDsKIAlycS0+cmVmX2NvdW50ID0gMTsKIAlycS0+cSA9IHE7Ci0JcnEtPndhaXRpbmcgPSBOVUxMOwogCXJxLT5zcGVjaWFsID0gTlVMTDsKIAlycS0+ZGF0YV9sZW4gPSAwOwogCXJxLT5kYXRhID0gTlVMTDsKQEAgLTM4Miw4ICszODMsOCBAQAogCWlmIChycSA9PSAmcS0+cG9zdF9mbHVzaF9ycSkKIAkJcmV0dXJuIFFVRVVFX09SRFNFUV9QT1NURkxVU0g7CiAKLQlpZiAoKHJxLT5mbGFncyAmIFJFUV9PUkRFUkVEX0NPTE9SKSA9PQotCSAgICAocS0+b3JpZ19iYXJfcnEtPmZsYWdzICYgUkVRX09SREVSRURfQ09MT1IpKQorCWlmICgocnEtPmNtZF9mbGFncyAmIFJFUV9PUkRFUkVEX0NPTE9SKSA9PQorCSAgICAocS0+b3JpZ19iYXJfcnEtPmNtZF9mbGFncyAmIFJFUV9PUkRFUkVEX0NPTE9SKSkKIAkJcmV0dXJuIFFVRVVFX09SRFNFUV9EUkFJTjsKIAllbHNlCiAJCXJldHVybiBRVUVVRV9PUkRTRVFfRE9ORTsKQEAgLTQ0NiwxMSArNDQ3LDExIEBACiAJCWVuZF9pbyA9IHBvc3RfZmx1c2hfZW5kX2lvOwogCX0KIAorCXJxLT5jbWRfZmxhZ3MgPSBSRVFfSEFSREJBUlJJRVI7CiAJcnFfaW5pdChxLCBycSk7Ci0JcnEtPmZsYWdzID0gUkVRX0hBUkRCQVJSSUVSOwogCXJxLT5lbGV2YXRvcl9wcml2YXRlID0gTlVMTDsKKwlycS0+ZWxldmF0b3JfcHJpdmF0ZTIgPSBOVUxMOwogCXJxLT5ycV9kaXNrID0gcS0+YmFyX3JxLnJxX2Rpc2s7Ci0JcnEtPnJsID0gTlVMTDsKIAlycS0+ZW5kX2lvID0gZW5kX2lvOwogCXEtPnByZXBhcmVfZmx1c2hfZm4ocSwgcnEpOwogCkBAIC00NzEsMTEgKzQ3MiwxMyBAQAogCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwogCXEtPm9yaWdfYmFyX3JxID0gcnE7CiAJcnEgPSAmcS0+YmFyX3JxOworCXJxLT5jbWRfZmxhZ3MgPSAwOwogCXJxX2luaXQocSwgcnEpOwotCXJxLT5mbGFncyA9IGJpb19kYXRhX2RpcihxLT5vcmlnX2Jhcl9ycS0+YmlvKTsKLQlycS0+ZmxhZ3MgfD0gcS0+b3JkZXJlZCAmIFFVRVVFX09SREVSRURfRlVBID8gUkVRX0ZVQSA6IDA7CisJaWYgKGJpb19kYXRhX2RpcihxLT5vcmlnX2Jhcl9ycS0+YmlvKSA9PSBXUklURSkKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUlc7CisJcnEtPmNtZF9mbGFncyB8PSBxLT5vcmRlcmVkICYgUVVFVUVfT1JERVJFRF9GVUEgPyBSRVFfRlVBIDogMDsKIAlycS0+ZWxldmF0b3JfcHJpdmF0ZSA9IE5VTEw7Ci0JcnEtPnJsID0gTlVMTDsKKwlycS0+ZWxldmF0b3JfcHJpdmF0ZTIgPSBOVUxMOwogCWluaXRfcmVxdWVzdF9mcm9tX2JpbyhycSwgcS0+b3JpZ19iYXJfcnEtPmJpbyk7CiAJcnEtPmVuZF9pbyA9IGJhcl9lbmRfaW87CiAKQEAgLTU4Nyw4ICs1OTAsOCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBvcmRlcmVkX2Jpb19lbmRpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbywKLQkJCQkgICAgdW5zaWduZWQgaW50IG5ieXRlcywgaW50IGVycm9yKQorc3RhdGljIGludCBvcmRlcmVkX2Jpb19lbmRpbyhzdHJ1Y3QgcmVxdWVzdCAqcnEsIHN0cnVjdCBiaW8gKmJpbywKKwkJCSAgICAgdW5zaWduZWQgaW50IG5ieXRlcywgaW50IGVycm9yKQogewogCXJlcXVlc3RfcXVldWVfdCAqcSA9IHJxLT5xOwogCWJpb19lbmRfaW9fdCAqZW5kaW87CkBAIC0xMTI0LDcgKzExMjcsNyBAQAogCX0KIAogCWxpc3RfZGVsX2luaXQoJnJxLT5xdWV1ZWxpc3QpOwotCXJxLT5mbGFncyAmPSB+UkVRX1FVRVVFRDsKKwlycS0+Y21kX2ZsYWdzICY9IH5SRVFfUVVFVUVEOwogCXJxLT50YWcgPSAtMTsKIAogCWlmICh1bmxpa2VseShicXQtPnRhZ19pbmRleFt0YWddID09IE5VTEwpKQpAQCAtMTE2MCw3ICsxMTYzLDcgQEAKIAlzdHJ1Y3QgYmxrX3F1ZXVlX3RhZyAqYnF0ID0gcS0+cXVldWVfdGFnczsKIAlpbnQgdGFnOwogCi0JaWYgKHVubGlrZWx5KChycS0+ZmxhZ3MgJiBSRVFfUVVFVUVEKSkpIHsKKwlpZiAodW5saWtlbHkoKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVFVUVEKSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSIAogCQkgICAgICAgIiVzOiByZXF1ZXN0ICVwIGZvciBkZXZpY2UgWyVzXSBhbHJlYWR5IHRhZ2dlZCAlZCIsCiAJCSAgICAgICBfX0ZVTkNUSU9OX18sIHJxLApAQCAtMTE2OCwxMyArMTE3MSwxOCBAQAogCQlCVUcoKTsKIAl9CiAKLQl0YWcgPSBmaW5kX2ZpcnN0X3plcm9fYml0KGJxdC0+dGFnX21hcCwgYnF0LT5tYXhfZGVwdGgpOwotCWlmICh0YWcgPj0gYnF0LT5tYXhfZGVwdGgpCi0JCXJldHVybiAxOworCS8qCisJICogUHJvdGVjdCBhZ2FpbnN0IHNoYXJlZCB0YWcgbWFwcywgYXMgd2UgbWF5IG5vdCBoYXZlIGV4Y2x1c2l2ZQorCSAqIGFjY2VzcyB0byB0aGUgdGFnIG1hcC4KKwkgKi8KKwlkbyB7CisJCXRhZyA9IGZpbmRfZmlyc3RfemVyb19iaXQoYnF0LT50YWdfbWFwLCBicXQtPm1heF9kZXB0aCk7CisJCWlmICh0YWcgPj0gYnF0LT5tYXhfZGVwdGgpCisJCQlyZXR1cm4gMTsKIAotCV9fc2V0X2JpdCh0YWcsIGJxdC0+dGFnX21hcCk7CisJfSB3aGlsZSAodGVzdF9hbmRfc2V0X2JpdCh0YWcsIGJxdC0+dGFnX21hcCkpOwogCi0JcnEtPmZsYWdzIHw9IFJFUV9RVUVVRUQ7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVFVUVEOwogCXJxLT50YWcgPSB0YWc7CiAJYnF0LT50YWdfaW5kZXhbdGFnXSA9IHJxOwogCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwpAQCAtMTIxMCw2NSArMTIxOCwzMSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIiVzOiBiYWQgdGFnIGZvdW5kIG9uIGxpc3RcbiIsIF9fRlVOQ1RJT05fXyk7CiAJCQlsaXN0X2RlbF9pbml0KCZycS0+cXVldWVsaXN0KTsKLQkJCXJxLT5mbGFncyAmPSB+UkVRX1FVRVVFRDsKKwkJCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9RVUVVRUQ7CiAJCX0gZWxzZQogCQkJYmxrX3F1ZXVlX2VuZF90YWcocSwgcnEpOwogCi0JCXJxLT5mbGFncyAmPSB+UkVRX1NUQVJURUQ7CisJCXJxLT5jbWRfZmxhZ3MgJj0gflJFUV9TVEFSVEVEOwogCQlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgRUxFVkFUT1JfSU5TRVJUX0JBQ0ssIDApOwogCX0KIH0KIAogRVhQT1JUX1NZTUJPTChibGtfcXVldWVfaW52YWxpZGF0ZV90YWdzKTsKIAotc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBycV9mbGFnc1tdID0gewotCSJSRVFfUlciLAotCSJSRVFfRkFJTEZBU1QiLAotCSJSRVFfU09SVEVEIiwKLQkiUkVRX1NPRlRCQVJSSUVSIiwKLQkiUkVRX0hBUkRCQVJSSUVSIiwKLQkiUkVRX0ZVQSIsCi0JIlJFUV9DTUQiLAotCSJSRVFfTk9NRVJHRSIsCi0JIlJFUV9TVEFSVEVEIiwKLQkiUkVRX0RPTlRQUkVQIiwKLQkiUkVRX1FVRVVFRCIsCi0JIlJFUV9FTFZQUklWIiwKLQkiUkVRX1BDIiwKLQkiUkVRX0JMT0NLX1BDIiwKLQkiUkVRX1NFTlNFIiwKLQkiUkVRX0ZBSUxFRCIsCi0JIlJFUV9RVUlFVCIsCi0JIlJFUV9TUEVDSUFMIiwKLQkiUkVRX0RSSVZFX0NNRCIsCi0JIlJFUV9EUklWRV9UQVNLIiwKLQkiUkVRX0RSSVZFX1RBU0tGSUxFIiwKLQkiUkVRX1BSRUVNUFQiLAotCSJSRVFfUE1fU1VTUEVORCIsCi0JIlJFUV9QTV9SRVNVTUUiLAotCSJSRVFfUE1fU0hVVERPV04iLAotCSJSRVFfT1JERVJFRF9DT0xPUiIsCi19OwotCiB2b2lkIGJsa19kdW1wX3JxX2ZsYWdzKHN0cnVjdCByZXF1ZXN0ICpycSwgY2hhciAqbXNnKQogewogCWludCBiaXQ7CiAKLQlwcmludGsoIiVzOiBkZXYgJXM6IGZsYWdzID0gIiwgbXNnLAotCQlycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIpOwotCWJpdCA9IDA7Ci0JZG8gewotCQlpZiAocnEtPmZsYWdzICYgKDEgPDwgYml0KSkKLQkJCXByaW50aygiJXMgIiwgcnFfZmxhZ3NbYml0XSk7Ci0JCWJpdCsrOwotCX0gd2hpbGUgKGJpdCA8IF9fUkVRX05SX0JJVFMpOworCXByaW50aygiJXM6IGRldiAlczogdHlwZT0leCwgZmxhZ3M9JXhcbiIsIG1zZywKKwkJcnEtPnJxX2Rpc2sgPyBycS0+cnFfZGlzay0+ZGlza19uYW1lIDogIj8iLCBycS0+Y21kX3R5cGUsCisJCXJxLT5jbWRfZmxhZ3MpOwogCiAJcHJpbnRrKCJcbnNlY3RvciAlbGx1LCBuci9jbnIgJWx1LyV1XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXJxLT5zZWN0b3IsCiAJCQkJCQkgICAgICAgcnEtPm5yX3NlY3RvcnMsCiAJCQkJCQkgICAgICAgcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CiAJcHJpbnRrKCJiaW8gJXAsIGJpb3RhaWwgJXAsIGJ1ZmZlciAlcCwgZGF0YSAlcCwgbGVuICV1XG4iLCBycS0+YmlvLCBycS0+YmlvdGFpbCwgcnEtPmJ1ZmZlciwgcnEtPmRhdGEsIHJxLT5kYXRhX2xlbik7CiAKLQlpZiAocnEtPmZsYWdzICYgKFJFUV9CTE9DS19QQyB8IFJFUV9QQykpIHsKKwlpZiAoYmxrX3BjX3JlcXVlc3QocnEpKSB7CiAJCXByaW50aygiY2RiOiAiKTsKIAkJZm9yIChiaXQgPSAwOyBiaXQgPCBzaXplb2YocnEtPmNtZCk7IGJpdCsrKQogCQkJcHJpbnRrKCIlMDJ4ICIsIHJxLT5jbWRbYml0XSk7CkBAIC0xNDQxLDcgKzE0MTUsNyBAQAogCWludCBucl9waHlzX3NlZ3MgPSBiaW9fcGh5c19zZWdtZW50cyhxLCBiaW8pOwogCiAJaWYgKHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHEtPm1heF9waHlzX3NlZ21lbnRzKSB7Ci0JCXJlcS0+ZmxhZ3MgfD0gUkVRX05PTUVSR0U7CisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9OT01FUkdFOwogCQlpZiAocmVxID09IHEtPmxhc3RfbWVyZ2UpCiAJCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0xNDY0LDcgKzE0MzgsNyBAQAogCiAJaWYgKHJlcS0+bnJfaHdfc2VnbWVudHMgKyBucl9od19zZWdzID4gcS0+bWF4X2h3X3NlZ21lbnRzCiAJICAgIHx8IHJlcS0+bnJfcGh5c19zZWdtZW50cyArIG5yX3BoeXNfc2VncyA+IHEtPm1heF9waHlzX3NlZ21lbnRzKSB7Ci0JCXJlcS0+ZmxhZ3MgfD0gUkVRX05PTUVSR0U7CisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9OT01FUkdFOwogCQlpZiAocmVxID09IHEtPmxhc3RfbWVyZ2UpCiAJCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKIAkJcmV0dXJuIDA7CkBAIC0xNDkxLDcgKzE0NjUsNyBAQAogCQltYXhfc2VjdG9ycyA9IHEtPm1heF9zZWN0b3JzOwogCiAJaWYgKHJlcS0+bnJfc2VjdG9ycyArIGJpb19zZWN0b3JzKGJpbykgPiBtYXhfc2VjdG9ycykgewotCQlyZXEtPmZsYWdzIHw9IFJFUV9OT01FUkdFOworCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfTk9NRVJHRTsKIAkJaWYgKHJlcSA9PSBxLT5sYXN0X21lcmdlKQogCQkJcS0+bGFzdF9tZXJnZSA9IE5VTEw7CiAJCXJldHVybiAwOwpAQCAtMTUzMCw3ICsxNTA0LDcgQEAKIAogCiAJaWYgKHJlcS0+bnJfc2VjdG9ycyArIGJpb19zZWN0b3JzKGJpbykgPiBtYXhfc2VjdG9ycykgewotCQlyZXEtPmZsYWdzIHw9IFJFUV9OT01FUkdFOworCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfTk9NRVJHRTsKIAkJaWYgKHJlcSA9PSBxLT5sYXN0X21lcmdlKQogCQkJcS0+bGFzdF9tZXJnZSA9IE5VTEw7CiAJCXJldHVybiAwOwpAQCAtMTg0Nyw4ICsxODIxLDcgQEAKIAlpZiAocS0+cXVldWVfdGFncykKIAkJX19ibGtfcXVldWVfZnJlZV90YWdzKHEpOwogCi0JaWYgKHEtPmJsa190cmFjZSkKLQkJYmxrX3RyYWNlX3NodXRkb3duKHEpOworCWJsa190cmFjZV9zaHV0ZG93bihxKTsKIAogCWttZW1fY2FjaGVfZnJlZShyZXF1ZXN0cV9jYWNoZXAsIHEpOwogfQpAQCAtMjAzMCwxNCArMjAwMywxMyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYmxrX2ZyZWVfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZiAocnEtPmZsYWdzICYgUkVRX0VMVlBSSVYpCisJaWYgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRUxWUFJJVikKIAkJZWx2X3B1dF9yZXF1ZXN0KHEsIHJxKTsKIAltZW1wb29sX2ZyZWUocnEsIHEtPnJxLnJxX3Bvb2wpOwogfQogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCByZXF1ZXN0ICoKLWJsa19hbGxvY19yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3LCBzdHJ1Y3QgYmlvICpiaW8sCi0JCSAgaW50IHByaXYsIGdmcF90IGdmcF9tYXNrKQorc3RhdGljIHN0cnVjdCByZXF1ZXN0ICoKK2Jsa19hbGxvY19yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgaW50IHJ3LCBpbnQgcHJpdiwgZ2ZwX3QgZ2ZwX21hc2spCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gbWVtcG9vbF9hbGxvYyhxLT5ycS5ycV9wb29sLCBnZnBfbWFzayk7CiAKQEAgLTIwNDUsMTcgKzIwMTcsMTcgQEAKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKgotCSAqIGZpcnN0IHRocmVlIGJpdHMgYXJlIGlkZW50aWNhbCBpbiBycS0+ZmxhZ3MgYW5kIGJpby0+YmlfcncsCisJICogZmlyc3QgdGhyZWUgYml0cyBhcmUgaWRlbnRpY2FsIGluIHJxLT5jbWRfZmxhZ3MgYW5kIGJpby0+YmlfcncsCiAJICogc2VlIGJpby5oIGFuZCBibGtkZXYuaAogCSAqLwotCXJxLT5mbGFncyA9IHJ3OworCXJxLT5jbWRfZmxhZ3MgPSBydyB8IFJFUV9BTExPQ0VEOwogCiAJaWYgKHByaXYpIHsKLQkJaWYgKHVubGlrZWx5KGVsdl9zZXRfcmVxdWVzdChxLCBycSwgYmlvLCBnZnBfbWFzaykpKSB7CisJCWlmICh1bmxpa2VseShlbHZfc2V0X3JlcXVlc3QocSwgcnEsIGdmcF9tYXNrKSkpIHsKIAkJCW1lbXBvb2xfZnJlZShycSwgcS0+cnEucnFfcG9vbCk7CiAJCQlyZXR1cm4gTlVMTDsKIAkJfQotCQlycS0+ZmxhZ3MgfD0gUkVRX0VMVlBSSVY7CisJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0VMVlBSSVY7CiAJfQogCiAJcmV0dXJuIHJxOwpAQCAtMjE0MiwxMyArMjExNCwxMyBAQAogCXN0cnVjdCBpb19jb250ZXh0ICppb2MgPSBOVUxMOwogCWludCBtYXlfcXVldWUsIHByaXY7CiAKLQltYXlfcXVldWUgPSBlbHZfbWF5X3F1ZXVlKHEsIHJ3LCBiaW8pOworCW1heV9xdWV1ZSA9IGVsdl9tYXlfcXVldWUocSwgcncpOwogCWlmIChtYXlfcXVldWUgPT0gRUxWX01RVUVVRV9OTykKIAkJZ290byBycV9zdGFydmVkOwogCiAJaWYgKHJsLT5jb3VudFtyd10rMSA+PSBxdWV1ZV9jb25nZXN0aW9uX29uX3RocmVzaG9sZChxKSkgewogCQlpZiAocmwtPmNvdW50W3J3XSsxID49IHEtPm5yX3JlcXVlc3RzKSB7Ci0JCQlpb2MgPSBjdXJyZW50X2lvX2NvbnRleHQoR0ZQX0FUT01JQyk7CisJCQlpb2MgPSBjdXJyZW50X2lvX2NvbnRleHQoR0ZQX0FUT01JQywgcS0+bm9kZSk7CiAJCQkvKgogCQkJICogVGhlIHF1ZXVlIHdpbGwgZmlsbCBhZnRlciB0aGlzIGFsbG9jYXRpb24sIHNvIHNldAogCQkJICogaXQgYXMgZnVsbCwgYW5kIG1hcmsgdGhpcyBwcm9jZXNzIGFzICJiYXRjaGluZyIuCkBAIC0yMTkwLDcgKzIxNjIsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxKHEtPnF1ZXVlX2xvY2spOwogCi0JcnEgPSBibGtfYWxsb2NfcmVxdWVzdChxLCBydywgYmlvLCBwcml2LCBnZnBfbWFzayk7CisJcnEgPSBibGtfYWxsb2NfcmVxdWVzdChxLCBydywgcHJpdiwgZ2ZwX21hc2spOwogCWlmICh1bmxpa2VseSghcnEpKSB7CiAJCS8qCiAJCSAqIEFsbG9jYXRpb24gZmFpbGVkIHByZXN1bWFibHkgZHVlIHRvIG1lbW9yeS4gVW5kbyBhbnl0aGluZwpAQCAtMjIyNiw3ICsyMTk4LDYgQEAKIAkJaW9jLT5ucl9iYXRjaF9yZXF1ZXN0cy0tOwogCQogCXJxX2luaXQocSwgcnEpOwotCXJxLT5ybCA9IHJsOwogCiAJYmxrX2FkZF90cmFjZV9nZW5lcmljKHEsIGJpbywgcncsIEJMS19UQV9HRVRSUSk7CiBvdXQ6CkBAIC0yMjY5LDcgKzIyNDAsNyBAQAogCQkJICogdXAgdG8gYSBiaWcgYmF0Y2ggb2YgdGhlbSBmb3IgYSBzbWFsbCBwZXJpb2QgdGltZS4KIAkJCSAqIFNlZSBpb2NfYmF0Y2hpbmcsIGlvY19zZXRfYmF0Y2hpbmcKIAkJCSAqLwotCQkJaW9jID0gY3VycmVudF9pb19jb250ZXh0KEdGUF9OT0lPKTsKKwkJCWlvYyA9IGN1cnJlbnRfaW9fY29udGV4dChHRlBfTk9JTywgcS0+bm9kZSk7CiAJCQlpb2Nfc2V0X2JhdGNoaW5nKHEsIGlvYyk7CiAKIAkJCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CkBAIC0yMzAxLDYgKzIyNzIsMjUgQEAKIEVYUE9SVF9TWU1CT0woYmxrX2dldF9yZXF1ZXN0KTsKIAogLyoqCisgKiBibGtfc3RhcnRfcXVldWVpbmcgLSBpbml0aWF0ZSBkaXNwYXRjaCBvZiByZXF1ZXN0cyB0byBkZXZpY2UKKyAqIEBxOgkJcmVxdWVzdCBxdWV1ZSB0byBraWNrIGludG8gZ2VhcgorICoKKyAqIFRoaXMgaXMgYmFzaWNhbGx5IGEgaGVscGVyIHRvIHJlbW92ZSB0aGUgbmVlZCB0byBrbm93IHdoZXRoZXIgYSBxdWV1ZQorICogaXMgcGx1Z2dlZCBvciBub3QgaWYgc29tZW9uZSBqdXN0IHdhbnRzIHRvIGluaXRpYXRlIGRpc3BhdGNoIG9mIHJlcXVlc3RzCisgKiBmb3IgdGhpcyBxdWV1ZS4KKyAqCisgKiBUaGUgcXVldWUgbG9jayBtdXN0IGJlIGhlbGQgd2l0aCBpbnRlcnJ1cHRzIGRpc2FibGVkLgorICovCit2b2lkIGJsa19zdGFydF9xdWV1ZWluZyhyZXF1ZXN0X3F1ZXVlX3QgKnEpCit7CisJaWYgKCFibGtfcXVldWVfcGx1Z2dlZChxKSkKKwkJcS0+cmVxdWVzdF9mbihxKTsKKwllbHNlCisJCV9fZ2VuZXJpY191bnBsdWdfZGV2aWNlKHEpOworfQorRVhQT1JUX1NZTUJPTChibGtfc3RhcnRfcXVldWVpbmcpOworCisvKioKICAqIGJsa19yZXF1ZXVlX3JlcXVlc3QgLSBwdXQgYSByZXF1ZXN0IGJhY2sgb24gcXVldWUKICAqIEBxOgkJcmVxdWVzdCBxdWV1ZSB3aGVyZSByZXF1ZXN0IHNob3VsZCBiZSBpbnNlcnRlZAogICogQHJxOgkJcmVxdWVzdCB0byBiZSBpbnNlcnRlZApAQCAtMjM1Miw3ICsyMzQyLDggQEAKIAkgKiBtdXN0IG5vdCBhdHRlbXB0IG1lcmdlcyBvbiB0aGlzKSBhbmQgdGhhdCBpdCBhY3RzIGFzIGEgc29mdAogCSAqIGJhcnJpZXIKIAkgKi8KLQlycS0+ZmxhZ3MgfD0gUkVRX1NQRUNJQUwgfCBSRVFfU09GVEJBUlJJRVI7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKKwlycS0+Y21kX2ZsYWdzIHw9IFJFUV9TT0ZUQkFSUklFUjsKIAogCXJxLT5zcGVjaWFsID0gZGF0YTsKIApAQCAtMjM2NiwxMSArMjM1Nyw3IEBACiAKIAlkcml2ZV9zdGF0X2FjY3QocnEsIHJxLT5ucl9zZWN0b3JzLCAxKTsKIAlfX2Vsdl9hZGRfcmVxdWVzdChxLCBycSwgd2hlcmUsIDApOwotCi0JaWYgKGJsa19xdWV1ZV9wbHVnZ2VkKHEpKQotCQlfX2dlbmVyaWNfdW5wbHVnX2RldmljZShxKTsKLQllbHNlCi0JCXEtPnJlcXVlc3RfZm4ocSk7CisJYmxrX3N0YXJ0X3F1ZXVlaW5nKHEpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUocS0+cXVldWVfbG9jaywgZmxhZ3MpOwogfQogCkBAIC0yNTU5LDcgKzI1NDYsNyBAQAogCWludCB3aGVyZSA9IGF0X2hlYWQgPyBFTEVWQVRPUl9JTlNFUlRfRlJPTlQgOiBFTEVWQVRPUl9JTlNFUlRfQkFDSzsKIAogCXJxLT5ycV9kaXNrID0gYmRfZGlzazsKLQlycS0+ZmxhZ3MgfD0gUkVRX05PTUVSR0U7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfTk9NRVJHRTsKIAlycS0+ZW5kX2lvID0gZG9uZTsKIAlXQVJOX09OKGlycXNfZGlzYWJsZWQoKSk7CiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKQEAgLTI1OTksMTAgKzI1ODYsOSBAQAogCQlycS0+c2Vuc2VfbGVuID0gMDsKIAl9CiAKLQlycS0+d2FpdGluZyA9ICZ3YWl0OworCXJxLT5lbmRfaW9fZGF0YSA9ICZ3YWl0OwogCWJsa19leGVjdXRlX3JxX25vd2FpdChxLCBiZF9kaXNrLCBycSwgYXRfaGVhZCwgYmxrX2VuZF9zeW5jX3JxKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKLQlycS0+d2FpdGluZyA9IE5VTEw7CiAKIAlpZiAocnEtPmVycm9ycykKIAkJZXJyID0gLUVJTzsKQEAgLTI3MTEsOCArMjY5Nyw2IEBACiAgKi8KIHZvaWQgX19ibGtfcHV0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcmVxKQogewotCXN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsID0gcmVxLT5ybDsKLQogCWlmICh1bmxpa2VseSghcSkpCiAJCXJldHVybjsKIAlpZiAodW5saWtlbHkoLS1yZXEtPnJlZl9jb3VudCkpCkBAIC0yNzIwLDE4ICsyNzA0LDE2IEBACiAKIAllbHZfY29tcGxldGVkX3JlcXVlc3QocSwgcmVxKTsKIAotCXJlcS0+cnFfc3RhdHVzID0gUlFfSU5BQ1RJVkU7Ci0JcmVxLT5ybCA9IE5VTEw7Ci0KIAkvKgogCSAqIFJlcXVlc3QgbWF5IG5vdCBoYXZlIG9yaWdpbmF0ZWQgZnJvbSBsbF9yd19ibGsuIGlmIG5vdCwKIAkgKiBpdCBkaWRuJ3QgY29tZSBvdXQgb2Ygb3VyIHJlc2VydmVkIHJxIHBvb2xzCiAJICovCi0JaWYgKHJsKSB7CisJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0FMTE9DRUQpIHsKIAkJaW50IHJ3ID0gcnFfZGF0YV9kaXIocmVxKTsKLQkJaW50IHByaXYgPSByZXEtPmZsYWdzICYgUkVRX0VMVlBSSVY7CisJCWludCBwcml2ID0gcmVxLT5jbWRfZmxhZ3MgJiBSRVFfRUxWUFJJVjsKIAogCQlCVUdfT04oIWxpc3RfZW1wdHkoJnJlcS0+cXVldWVsaXN0KSk7CisJCUJVR19PTighaGxpc3RfdW5oYXNoZWQoJnJlcS0+aGFzaCkpOwogCiAJCWJsa19mcmVlX3JlcXVlc3QocSwgcmVxKTsKIAkJZnJlZWRfcmVxdWVzdChxLCBydywgcHJpdik7CkBAIC0yNzY1LDkgKzI3NDcsOSBAQAogICovCiB2b2lkIGJsa19lbmRfc3luY19ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvcikKIHsKLQlzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZyA9IHJxLT53YWl0aW5nOworCXN0cnVjdCBjb21wbGV0aW9uICp3YWl0aW5nID0gcnEtPmVuZF9pb19kYXRhOwogCi0JcnEtPndhaXRpbmcgPSBOVUxMOworCXJxLT5lbmRfaW9fZGF0YSA9IE5VTEw7CiAJX19ibGtfcHV0X3JlcXVlc3QocnEtPnEsIHJxKTsKIAogCS8qCkBAIC0yODMwLDcgKzI4MTIsNyBAQAogCiAJaWYgKHJxX2RhdGFfZGlyKHJlcSkgIT0gcnFfZGF0YV9kaXIobmV4dCkKIAkgICAgfHwgcmVxLT5ycV9kaXNrICE9IG5leHQtPnJxX2Rpc2sKLQkgICAgfHwgbmV4dC0+d2FpdGluZyB8fCBuZXh0LT5zcGVjaWFsKQorCSAgICB8fCBuZXh0LT5zcGVjaWFsKQogCQlyZXR1cm4gMDsKIAogCS8qCkBAIC0yODkxLDIyICsyODczLDI0IEBACiAKIHN0YXRpYyB2b2lkIGluaXRfcmVxdWVzdF9mcm9tX2JpbyhzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JcmVxLT5mbGFncyB8PSBSRVFfQ01EOworCXJlcS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9GUzsKIAogCS8qCiAJICogaW5oZXJpdCBGQUlMRkFTVCBmcm9tIGJpbyAoZm9yIHJlYWQtYWhlYWQsIGFuZCBleHBsaWNpdCBGQUlMRkFTVCkKIAkgKi8KIAlpZiAoYmlvX3J3X2FoZWFkKGJpbykgfHwgYmlvX2ZhaWxmYXN0KGJpbykpCi0JCXJlcS0+ZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUOworCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEZBU1Q7CiAKIAkvKgogCSAqIFJFUV9CQVJSSUVSIGltcGxpZXMgbm8gbWVyZ2luZywgYnV0IGxldHMgbWFrZSBpdCBleHBsaWNpdAogCSAqLwogCWlmICh1bmxpa2VseShiaW9fYmFycmllcihiaW8pKSkKLQkJcmVxLT5mbGFncyB8PSAoUkVRX0hBUkRCQVJSSUVSIHwgUkVRX05PTUVSR0UpOworCQlyZXEtPmNtZF9mbGFncyB8PSAoUkVRX0hBUkRCQVJSSUVSIHwgUkVRX05PTUVSR0UpOwogCiAJaWYgKGJpb19zeW5jKGJpbykpCi0JCXJlcS0+ZmxhZ3MgfD0gUkVRX1JXX1NZTkM7CisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9SV19TWU5DOworCWlmIChiaW9fcndfbWV0YShiaW8pKQorCQlyZXEtPmNtZF9mbGFncyB8PSBSRVFfUldfTUVUQTsKIAogCXJlcS0+ZXJyb3JzID0gMDsKIAlyZXEtPmhhcmRfc2VjdG9yID0gcmVxLT5zZWN0b3IgPSBiaW8tPmJpX3NlY3RvcjsKQEAgLTI5MTUsNyArMjg5OSw2IEBACiAJcmVxLT5ucl9waHlzX3NlZ21lbnRzID0gYmlvX3BoeXNfc2VnbWVudHMocmVxLT5xLCBiaW8pOwogCXJlcS0+bnJfaHdfc2VnbWVudHMgPSBiaW9faHdfc2VnbWVudHMocmVxLT5xLCBiaW8pOwogCXJlcS0+YnVmZmVyID0gYmlvX2RhdGEoYmlvKTsJLyogc2VlIC0+YnVmZmVyIGNvbW1lbnQgYWJvdmUgKi8KLQlyZXEtPndhaXRpbmcgPSBOVUxMOwogCXJlcS0+YmlvID0gcmVxLT5iaW90YWlsID0gYmlvOwogCXJlcS0+aW9wcmlvID0gYmlvX3ByaW8oYmlvKTsKIAlyZXEtPnJxX2Rpc2sgPSBiaW8tPmJpX2JkZXYtPmJkX2Rpc2s7CkBAIC0yOTI1LDE3ICsyOTA4LDExIEBACiBzdGF0aWMgaW50IF9fbWFrZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqYmlvKQogewogCXN0cnVjdCByZXF1ZXN0ICpyZXE7Ci0JaW50IGVsX3JldCwgcncsIG5yX3NlY3RvcnMsIGN1cl9ucl9zZWN0b3JzLCBiYXJyaWVyLCBlcnIsIHN5bmM7Ci0JdW5zaWduZWQgc2hvcnQgcHJpbzsKLQlzZWN0b3JfdCBzZWN0b3I7CisJaW50IGVsX3JldCwgbnJfc2VjdG9ycywgYmFycmllciwgZXJyOworCWNvbnN0IHVuc2lnbmVkIHNob3J0IHByaW8gPSBiaW9fcHJpbyhiaW8pOworCWNvbnN0IGludCBzeW5jID0gYmlvX3N5bmMoYmlvKTsKIAotCXNlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCW5yX3NlY3RvcnMgPSBiaW9fc2VjdG9ycyhiaW8pOwotCWN1cl9ucl9zZWN0b3JzID0gYmlvX2N1cl9zZWN0b3JzKGJpbyk7Ci0JcHJpbyA9IGJpb19wcmlvKGJpbyk7Ci0KLQlydyA9IGJpb19kYXRhX2RpcihiaW8pOwotCXN5bmMgPSBiaW9fc3luYyhiaW8pOwogCiAJLyoKIAkgKiBsb3cgbGV2ZWwgZHJpdmVyIGNhbiBpbmRpY2F0ZSB0aGF0IGl0IHdhbnRzIHBhZ2VzIGFib3ZlIGEKQEAgLTI5NDQsOCArMjkyMSw2IEBACiAJICovCiAJYmxrX3F1ZXVlX2JvdW5jZShxLCAmYmlvKTsKIAotCXNwaW5fbG9ja19wcmVmZXRjaChxLT5xdWV1ZV9sb2NrKTsKLQogCWJhcnJpZXIgPSBiaW9fYmFycmllcihiaW8pOwogCWlmICh1bmxpa2VseShiYXJyaWVyKSAmJiAocS0+bmV4dF9vcmRlcmVkID09IFFVRVVFX09SREVSRURfTk9ORSkpIHsKIAkJZXJyID0gLUVPUE5PVFNVUFA7CkBAIC0yOTczLDcgKzI5NDgsNyBAQAogCQkJcmVxLT5pb3ByaW8gPSBpb3ByaW9fYmVzdChyZXEtPmlvcHJpbywgcHJpbyk7CiAJCQlkcml2ZV9zdGF0X2FjY3QocmVxLCBucl9zZWN0b3JzLCAwKTsKIAkJCWlmICghYXR0ZW1wdF9iYWNrX21lcmdlKHEsIHJlcSkpCi0JCQkJZWx2X21lcmdlZF9yZXF1ZXN0KHEsIHJlcSk7CisJCQkJZWx2X21lcmdlZF9yZXF1ZXN0KHEsIHJlcSwgZWxfcmV0KTsKIAkJCWdvdG8gb3V0OwogCiAJCWNhc2UgRUxFVkFUT1JfRlJPTlRfTUVSR0U6CkBAIC0yOTkzLDE0ICsyOTY4LDE0IEBACiAJCQkgKiBub3QgdG91Y2ggcmVxLT5idWZmZXIgZWl0aGVyLi4uCiAJCQkgKi8KIAkJCXJlcS0+YnVmZmVyID0gYmlvX2RhdGEoYmlvKTsKLQkJCXJlcS0+Y3VycmVudF9ucl9zZWN0b3JzID0gY3VyX25yX3NlY3RvcnM7Ci0JCQlyZXEtPmhhcmRfY3VyX3NlY3RvcnMgPSBjdXJfbnJfc2VjdG9yczsKLQkJCXJlcS0+c2VjdG9yID0gcmVxLT5oYXJkX3NlY3RvciA9IHNlY3RvcjsKKwkJCXJlcS0+Y3VycmVudF9ucl9zZWN0b3JzID0gYmlvX2N1cl9zZWN0b3JzKGJpbyk7CisJCQlyZXEtPmhhcmRfY3VyX3NlY3RvcnMgPSByZXEtPmN1cnJlbnRfbnJfc2VjdG9yczsKKwkJCXJlcS0+c2VjdG9yID0gcmVxLT5oYXJkX3NlY3RvciA9IGJpby0+Ymlfc2VjdG9yOwogCQkJcmVxLT5ucl9zZWN0b3JzID0gcmVxLT5oYXJkX25yX3NlY3RvcnMgKz0gbnJfc2VjdG9yczsKIAkJCXJlcS0+aW9wcmlvID0gaW9wcmlvX2Jlc3QocmVxLT5pb3ByaW8sIHByaW8pOwogCQkJZHJpdmVfc3RhdF9hY2N0KHJlcSwgbnJfc2VjdG9ycywgMCk7CiAJCQlpZiAoIWF0dGVtcHRfZnJvbnRfbWVyZ2UocSwgcmVxKSkKLQkJCQllbHZfbWVyZ2VkX3JlcXVlc3QocSwgcmVxKTsKKwkJCQllbHZfbWVyZ2VkX3JlcXVlc3QocSwgcmVxLCBlbF9yZXQpOwogCQkJZ290byBvdXQ7CiAKIAkJLyogRUxWX05PX01FUkdFOiBlbGV2YXRvciBzYXlzIGRvbid0L2Nhbid0IG1lcmdlLiAqLwpAQCAtMzAxMyw3ICsyOTg4LDcgQEAKIAkgKiBHcmFiIGEgZnJlZSByZXF1ZXN0LiBUaGlzIGlzIG1pZ2h0IHNsZWVwIGJ1dCBjYW4gbm90IGZhaWwuCiAJICogUmV0dXJucyB3aXRoIHRoZSBxdWV1ZSB1bmxvY2tlZC4KIAkgKi8KLQlyZXEgPSBnZXRfcmVxdWVzdF93YWl0KHEsIHJ3LCBiaW8pOworCXJlcSA9IGdldF9yZXF1ZXN0X3dhaXQocSwgYmlvX2RhdGFfZGlyKGJpbyksIGJpbyk7CiAKIAkvKgogCSAqIEFmdGVyIGRyb3BwaW5nIHRoZSBsb2NrIGFuZCBwb3NzaWJseSBzbGVlcGluZyBoZXJlLCBvdXIgcmVxdWVzdApAQCAtMzMwNyw3ICszMjgyLDcgQEAKIAkJcmVxLT5lcnJvcnMgPSAwOwogCiAJaWYgKCF1cHRvZGF0ZSkgewotCQlpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSAmJiAhKHJlcS0+ZmxhZ3MgJiBSRVFfUVVJRVQpKQorCQlpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSAmJiAhKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkKIAkJCXByaW50aygiZW5kX3JlcXVlc3Q6IEkvTyBlcnJvciwgZGV2ICVzLCBzZWN0b3IgJWxsdVxuIiwKIAkJCQlyZXEtPnJxX2Rpc2sgPyByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSA6ICI/IiwKIAkJCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcS0+c2VjdG9yKTsKQEAgLTM1NzAsOCArMzU0NSw4IEBACiAKIHZvaWQgYmxrX3JxX2Jpb19wcmVwKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxLCBzdHJ1Y3QgYmlvICpiaW8pCiB7Ci0JLyogZmlyc3QgdHdvIGJpdHMgYXJlIGlkZW50aWNhbCBpbiBycS0+ZmxhZ3MgYW5kIGJpby0+YmlfcncgKi8KLQlycS0+ZmxhZ3MgfD0gKGJpby0+YmlfcncgJiAzKTsKKwkvKiBmaXJzdCB0d28gYml0cyBhcmUgaWRlbnRpY2FsIGluIHJxLT5jbWRfZmxhZ3MgYW5kIGJpby0+YmlfcncgKi8KKwlycS0+Y21kX2ZsYWdzIHw9IChiaW8tPmJpX3J3ICYgMyk7CiAKIAlycS0+bnJfcGh5c19zZWdtZW50cyA9IGJpb19waHlzX3NlZ21lbnRzKHEsIGJpbyk7CiAJcnEtPm5yX2h3X3NlZ21lbnRzID0gYmlvX2h3X3NlZ21lbnRzKHEsIGJpbyk7CkBAIC0zNjU5LDI1ICszNjM0LDIyIEBACiAvKiBDYWxsZWQgYnkgdGhlIGV4aXR0aW5nIHRhc2sgKi8KIHZvaWQgZXhpdF9pb19jb250ZXh0KHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgaW9fY29udGV4dCAqaW9jOwogCXN0cnVjdCBjZnFfaW9fY29udGV4dCAqY2ljOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXRhc2tfbG9jayhjdXJyZW50KTsKIAlpb2MgPSBjdXJyZW50LT5pb19jb250ZXh0OwogCWN1cnJlbnQtPmlvX2NvbnRleHQgPSBOVUxMOwotCWlvYy0+dGFzayA9IE5VTEw7CiAJdGFza191bmxvY2soY3VycmVudCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCisJaW9jLT50YXNrID0gTlVMTDsKIAlpZiAoaW9jLT5haWMgJiYgaW9jLT5haWMtPmV4aXQpCiAJCWlvYy0+YWljLT5leGl0KGlvYy0+YWljKTsKIAlpZiAoaW9jLT5jaWNfcm9vdC5yYl9ub2RlICE9IE5VTEwpIHsKIAkJY2ljID0gcmJfZW50cnkocmJfZmlyc3QoJmlvYy0+Y2ljX3Jvb3QpLCBzdHJ1Y3QgY2ZxX2lvX2NvbnRleHQsIHJiX25vZGUpOwogCQljaWMtPmV4aXQoaW9jKTsKIAl9Ci0gCisKIAlwdXRfaW9fY29udGV4dChpb2MpOwogfQogCkBAIC0zNjg5LDcgKzM2NjEsNyBAQAogICogYnV0IHNpbmNlIHRoZSBjdXJyZW50IHRhc2sgaXRzZWxmIGhvbGRzIGEgcmVmZXJlbmNlLCB0aGUgY29udGV4dCBjYW4gYmUKICAqIHVzZWQgaW4gZ2VuZXJhbCBjb2RlLCBzbyBsb25nIGFzIGl0IHN0YXlzIHdpdGhpbiBgY3VycmVudGAgY29udGV4dC4KICAqLwotc3RydWN0IGlvX2NvbnRleHQgKmN1cnJlbnRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MpCitzdGF0aWMgc3RydWN0IGlvX2NvbnRleHQgKmN1cnJlbnRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MsIGludCBub2RlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrID0gY3VycmVudDsKIAlzdHJ1Y3QgaW9fY29udGV4dCAqcmV0OwpAQCAtMzY5OCwxMSArMzY3MCwxMSBAQAogCWlmIChsaWtlbHkocmV0KSkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGttZW1fY2FjaGVfYWxsb2MoaW9jb250ZXh0X2NhY2hlcCwgZ2ZwX2ZsYWdzKTsKKwlyZXQgPSBrbWVtX2NhY2hlX2FsbG9jX25vZGUoaW9jb250ZXh0X2NhY2hlcCwgZ2ZwX2ZsYWdzLCBub2RlKTsKIAlpZiAocmV0KSB7CiAJCWF0b21pY19zZXQoJnJldC0+cmVmY291bnQsIDEpOwogCQlyZXQtPnRhc2sgPSBjdXJyZW50OwotCQlyZXQtPnNldF9pb3ByaW8gPSBOVUxMOworCQlyZXQtPmlvcHJpb19jaGFuZ2VkID0gMDsKIAkJcmV0LT5sYXN0X3dhaXRlZCA9IGppZmZpZXM7IC8qIGRvZXNuJ3QgbWF0dGVyLi4uICovCiAJCXJldC0+bnJfYmF0Y2hfcmVxdWVzdHMgPSAwOyAvKiBiZWNhdXNlIHRoaXMgaXMgMCAqLwogCQlyZXQtPmFpYyA9IE5VTEw7CkBAIC0zNzIyLDEwICszNjk0LDEwIEBACiAgKgogICogVGhpcyBpcyBhbHdheXMgY2FsbGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSB0YXNrIHdoaWNoIHN1Ym1pdHRlZCB0aGUgSS9PLgogICovCi1zdHJ1Y3QgaW9fY29udGV4dCAqZ2V0X2lvX2NvbnRleHQoZ2ZwX3QgZ2ZwX2ZsYWdzKQorc3RydWN0IGlvX2NvbnRleHQgKmdldF9pb19jb250ZXh0KGdmcF90IGdmcF9mbGFncywgaW50IG5vZGUpCiB7CiAJc3RydWN0IGlvX2NvbnRleHQgKnJldDsKLQlyZXQgPSBjdXJyZW50X2lvX2NvbnRleHQoZ2ZwX2ZsYWdzKTsKKwlyZXQgPSBjdXJyZW50X2lvX2NvbnRleHQoZ2ZwX2ZsYWdzLCBub2RlKTsKIAlpZiAobGlrZWx5KHJldCkpCiAJCWF0b21pY19pbmMoJnJldC0+cmVmY291bnQpOwogCXJldHVybiByZXQ7CkBAIC0zODM4LDkgKzM4MTAsNiBAQAogCXNzaXplX3QgcmV0ID0gcXVldWVfdmFyX3N0b3JlKCZyYV9rYiwgcGFnZSwgY291bnQpOwogCiAJc3Bpbl9sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKLQlpZiAocmFfa2IgPiAocS0+bWF4X3NlY3RvcnMgPj4gMSkpCi0JCXJhX2tiID0gKHEtPm1heF9zZWN0b3JzID4+IDEpOwotCiAJcS0+YmFja2luZ19kZXZfaW5mby5yYV9wYWdlcyA9IHJhX2tiID4+IChQQUdFX0NBQ0hFX1NISUZUIC0gMTApOwogCXNwaW5fdW5sb2NrX2lycShxLT5xdWV1ZV9sb2NrKTsKIApkaWZmIC0tZ2l0IGEvYmxvY2svbm9vcC1pb3NjaGVkLmMgYi9ibG9jay9ub29wLWlvc2NoZWQuYwppbmRleCA1NmE3YzYyLi43OWFmNDMxIDEwMDY0NAotLS0gYS9ibG9jay9ub29wLWlvc2NoZWQuYworKysgYi9ibG9jay9ub29wLWlvc2NoZWQuYwpAQCAtNjksNyArNjksNyBAQAogewogCXN0cnVjdCBub29wX2RhdGEgKm5kOwogCi0JbmQgPSBrbWFsbG9jKHNpemVvZigqbmQpLCBHRlBfS0VSTkVMKTsKKwluZCA9IGttYWxsb2Nfbm9kZShzaXplb2YoKm5kKSwgR0ZQX0tFUk5FTCwgcS0+bm9kZSk7CiAJaWYgKCFuZCkKIAkJcmV0dXJuIE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJm5kLT5xdWV1ZSk7CmRpZmYgLS1naXQgYS9ibG9jay9zY3NpX2lvY3RsLmMgYi9ibG9jay9zY3NpX2lvY3RsLmMKaW5kZXggYjMzZWRhMi4uMmRjMzI2NCAxMDA2NDQKLS0tIGEvYmxvY2svc2NzaV9pb2N0bC5jCisrKyBiL2Jsb2NrL3Njc2lfaW9jdGwuYwpAQCAtMjk0LDcgKzI5NCw3IEBACiAJcnEtPnNlbnNlID0gc2Vuc2U7CiAJcnEtPnNlbnNlX2xlbiA9IDA7CiAKLQlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCWJpbyA9IHJxLT5iaW87CiAKIAkvKgpAQCAtNDcwLDcgKzQ3MCw3IEBACiAJbWVtc2V0KHNlbnNlLCAwLCBzaXplb2Yoc2Vuc2UpKTsKIAlycS0+c2Vuc2UgPSBzZW5zZTsKIAlycS0+c2Vuc2VfbGVuID0gMDsKLQlycS0+ZmxhZ3MgfD0gUkVRX0JMT0NLX1BDOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCiAJYmxrX2V4ZWN1dGVfcnEocSwgZGlzaywgcnEsIDApOwogCkBAIC01MDIsNyArNTAyLDcgQEAKIAlpbnQgZXJyOwogCiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QocSwgV1JJVEUsIF9fR0ZQX1dBSVQpOwotCXJxLT5mbGFncyB8PSBSRVFfQkxPQ0tfUEM7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CiAJcnEtPmRhdGEgPSBOVUxMOwogCXJxLT5kYXRhX2xlbiA9IDA7CiAJcnEtPnRpbWVvdXQgPSBCTEtfREVGQVVMVF9USU1FT1VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY29ybi9jaGFyL2kyYy5jIGIvZHJpdmVycy9hY29ybi9jaGFyL2kyYy5jCmluZGV4IGMyNmMwOGIuLmJkYjljOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNvcm4vY2hhci9pMmMuYworKysgYi9kcml2ZXJzL2Fjb3JuL2NoYXIvaTJjLmMKQEAgLTMwOCw3ICszMDgsNiBAQAogCS5nZXRzZGEJCT0gaW9jX2dldHNkYSwKIAkuZ2V0c2NsCQk9IGlvY19nZXRzY2wsCiAJLnVkZWxheQkJPSA4MCwKLQkubWRlbGF5CQk9IDgwLAogCS50aW1lb3V0CT0gMTAwCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMgYi9kcml2ZXJzL2FjcGkvYWNwaV9tZW1ob3RwbHVnLmMKaW5kZXggMWRkYTM3MC4uOTgwOTlkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjcGlfbWVtaG90cGx1Zy5jCisrKyBiL2RyaXZlcnMvYWNwaS9hY3BpX21lbWhvdHBsdWcuYwpAQCAtMjM4LDYgKzIzOCwxMCBAQAogCQkJbnVtX2VuYWJsZWQrKzsKIAkJCWNvbnRpbnVlOwogCQl9CisKKwkJaWYgKG5vZGUgPCAwKQorCQkJbm9kZSA9IG1lbW9yeV9hZGRfcGh5c2FkZHJfdG9fbmlkKGluZm8tPnN0YXJ0X2FkZHIpOworCiAJCXJlc3VsdCA9IGFkZF9tZW1vcnkobm9kZSwgaW5mby0+c3RhcnRfYWRkciwgaW5mby0+bGVuZ3RoKTsKIAkJaWYgKHJlc3VsdCkKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2kyY19lYy5jIGIvZHJpdmVycy9hY3BpL2kyY19lYy5jCmluZGV4IDY4MDljMjguLjYzNDJlNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9pMmNfZWMuYworKysgYi9kcml2ZXJzL2FjcGkvaTJjX2VjLmMKQEAgLTI5Myw3ICsyOTMsNyBAQAogCQlJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sgfCBJMkNfRlVOQ19TTUJVU19IV1BFQ19DQUxDKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGFjcGlfZWNfc21idXNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGFjcGlfZWNfc21idXNfYWxnb3JpdGhtID0gewogCS5zbWJ1c194ZmVyID0gYWNwaV9lY19zbWJfYWNjZXNzLAogCS5mdW5jdGlvbmFsaXR5ID0gYWNwaV9lY19zbWJfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvb3NsLmMgYi9kcml2ZXJzL2FjcGkvb3NsLmMKaW5kZXggNTA3ZjA1MS4uMjBiZWVhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL29zbC5jCisrKyBiL2RyaXZlcnMvYWNwaS9vc2wuYwpAQCAtMTA3OSw3ICsxMDc5LDcgQEAKIAogYWNwaV9zdGF0dXMgYWNwaV9vc19kZWxldGVfY2FjaGUoYWNwaV9jYWNoZV90ICogY2FjaGUpCiB7Ci0JKHZvaWQpa21lbV9jYWNoZV9kZXN0cm95KGNhY2hlKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGUpOwogCXJldHVybiAoQUVfT0spOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvcHJvY2Vzc29yX2lkbGUuYyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCmluZGV4IDcxMDY2MDYuLjBhMzk1ZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCisrKyBiL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfaWRsZS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBuZWVkX3Jlc2NoZWQoKSAqLworI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3kuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC00NTMsNyArNDU0LDggQEAKIAkgKi8KIAlpZiAoY3gtPnByb21vdGlvbi5zdGF0ZSAmJgogCSAgICAoKGN4LT5wcm9tb3Rpb24uc3RhdGUgLSBwci0+cG93ZXIuc3RhdGVzKSA8PSBtYXhfY3N0YXRlKSkgewotCQlpZiAoc2xlZXBfdGlja3MgPiBjeC0+cHJvbW90aW9uLnRocmVzaG9sZC50aWNrcykgeworCQlpZiAoc2xlZXBfdGlja3MgPiBjeC0+cHJvbW90aW9uLnRocmVzaG9sZC50aWNrcyAmJgorCQkgIGN4LT5wcm9tb3Rpb24uc3RhdGUtPmxhdGVuY3kgPD0gc3lzdGVtX2xhdGVuY3lfY29uc3RyYWludCgpKSB7CiAJCQljeC0+cHJvbW90aW9uLmNvdW50Kys7CiAJCQljeC0+ZGVtb3Rpb24uY291bnQgPSAwOwogCQkJaWYgKGN4LT5wcm9tb3Rpb24uY291bnQgPj0KQEAgLTQ5NCw4ICs0OTYsMTAgQEAKICAgICAgIGVuZDoKIAkvKgogCSAqIERlbW90ZSBpZiBjdXJyZW50IHN0YXRlIGV4Y2VlZHMgbWF4X2NzdGF0ZQorCSAqIG9yIGlmIHRoZSBsYXRlbmN5IG9mIHRoZSBjdXJyZW50IHN0YXRlIGlzIHVuYWNjZXB0YWJsZQogCSAqLwotCWlmICgocHItPnBvd2VyLnN0YXRlIC0gcHItPnBvd2VyLnN0YXRlcykgPiBtYXhfY3N0YXRlKSB7CisJaWYgKChwci0+cG93ZXIuc3RhdGUgLSBwci0+cG93ZXIuc3RhdGVzKSA+IG1heF9jc3RhdGUgfHwKKwkJcHItPnBvd2VyLnN0YXRlLT5sYXRlbmN5ID4gc3lzdGVtX2xhdGVuY3lfY29uc3RyYWludCgpKSB7CiAJCWlmIChjeC0+ZGVtb3Rpb24uc3RhdGUpCiAJCQluZXh0X3N0YXRlID0gY3gtPmRlbW90aW9uLnN0YXRlOwogCX0KQEAgLTEwMDksOSArMTAxMywxMSBAQAogCiAJc2VxX3ByaW50ZihzZXEsICJhY3RpdmUgc3RhdGU6ICAgICAgICAgICAgQyV6ZFxuIgogCQkgICAibWF4X2NzdGF0ZTogICAgICAgICAgICAgIEMlZFxuIgotCQkgICAiYnVzIG1hc3RlciBhY3Rpdml0eTogICAgICUwOHhcbiIsCisJCSAgICJidXMgbWFzdGVyIGFjdGl2aXR5OiAgICAgJTA4eFxuIgorCQkgICAibWF4aW11bSBhbGxvd2VkIGxhdGVuY3k6ICVkIHVzZWNcbiIsCiAJCSAgIHByLT5wb3dlci5zdGF0ZSA/IHByLT5wb3dlci5zdGF0ZSAtIHByLT5wb3dlci5zdGF0ZXMgOiAwLAotCQkgICBtYXhfY3N0YXRlLCAodW5zaWduZWQpcHItPnBvd2VyLmJtX2FjdGl2aXR5KTsKKwkJICAgbWF4X2NzdGF0ZSwgKHVuc2lnbmVkKXByLT5wb3dlci5ibV9hY3Rpdml0eSwKKwkJICAgc3lzdGVtX2xhdGVuY3lfY29uc3RyYWludCgpKTsKIAogCXNlcV9wdXRzKHNlcSwgInN0YXRlczpcbiIpOwogCkBAIC0xMDc3LDYgKzEwODMsMjggQEAKIAkucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAorc3RhdGljIHZvaWQgc21wX2NhbGxiYWNrKHZvaWQgKnYpCit7CisJLyogd2UgYWxyZWFkeSB3b2tlIHRoZSBDUFUgdXAsIG5vdGhpbmcgbW9yZSB0byBkbyAqLworfQorCisvKgorICogVGhpcyBmdW5jdGlvbiBnZXRzIGNhbGxlZCB3aGVuIGEgcGFydCBvZiB0aGUga2VybmVsIGhhcyBhIG5ldyBsYXRlbmN5CisgKiByZXF1aXJlbWVudC4gIFRoaXMgbWVhbnMgd2UgbmVlZCB0byBnZXQgYWxsIHByb2Nlc3NvcnMgb3V0IG9mIHRoZWlyIEMtc3RhdGUsCisgKiBhbmQgdGhlbiByZWNhbGN1bGF0ZSBhIG5ldyBzdWl0YWJsZSBDLXN0YXRlLiBKdXN0IGRvIGEgY3Jvc3MtY3B1IElQSTsgdGhhdAorICogd2FrZXMgdGhlbSBhbGwgcmlnaHQgdXAuCisgKi8KK3N0YXRpYyBpbnQgYWNwaV9wcm9jZXNzb3JfbGF0ZW5jeV9ub3RpZnkoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpiLAorCQl1bnNpZ25lZCBsb25nIGwsIHZvaWQgKnYpCit7CisJc21wX2NhbGxfZnVuY3Rpb24oc21wX2NhbGxiYWNrLCBOVUxMLCAwLCAxKTsKKwlyZXR1cm4gTk9USUZZX09LOworfQorCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGFjcGlfcHJvY2Vzc29yX2xhdGVuY3lfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBhY3BpX3Byb2Nlc3Nvcl9sYXRlbmN5X25vdGlmeSwKK307CisKIGludCBhY3BpX3Byb2Nlc3Nvcl9wb3dlcl9pbml0KHN0cnVjdCBhY3BpX3Byb2Nlc3NvciAqcHIsCiAJCQkgICAgICBzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZSkKIHsKQEAgLTEwOTMsNiArMTEyMSw3IEBACiAJCQkgICAgICAgIkFDUEk6IHByb2Nlc3NvciBsaW1pdGVkIHRvIG1heCBDLXN0YXRlICVkXG4iLAogCQkJICAgICAgIG1heF9jc3RhdGUpOwogCQlmaXJzdF9ydW4rKzsKKwkJcmVnaXN0ZXJfbGF0ZW5jeV9ub3RpZmllcigmYWNwaV9wcm9jZXNzb3JfbGF0ZW5jeV9ub3RpZmllcik7CiAJfQogCiAJaWYgKCFwcikKQEAgLTExNjQsNiArMTE5Myw3IEBACiAJCSAqIGNvcGllcyBvZiBwbV9pZGxlIGJlZm9yZSBwcm9jZWVkaW5nLgogCQkgKi8KIAkJY3B1X2lkbGVfd2FpdCgpOworCQl1bnJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIoJmFjcGlfcHJvY2Vzc29yX2xhdGVuY3lfbm90aWZpZXIpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvS2NvbmZpZyBiL2RyaXZlcnMvYXRhL0tjb25maWcKaW5kZXggOTk4MzdkOS4uM2Y0YWEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvS2NvbmZpZworKysgYi9kcml2ZXJzL2F0YS9LY29uZmlnCkBAIC0zMTEsNyArMzExLDcgQEAKIAogY29uZmlnIFBBVEFfTEVHQUNZCiAJdHJpc3RhdGUgIkxlZ2FjeSBJU0EgUEFUQSBzdXBwb3J0IChFeHBlcmltZW50YWwpIgotCWRlcGVuZHMgb24gUENJICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSVNBICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgSVNBL1ZMQiBidXMgbGVnYWN5IFBBVEEKIAkgIHBvcnRzIGFuZCBhbGxvd3MgdGhlbSB0byBiZSBhY2Nlc3NlZCB2aWEgdGhlIG5ldyBBVEEgbGF5ZXIuCkBAIC00MDAsNiArNDAwLDcgQEAKIAogY29uZmlnIFBBVEFfUURJCiAJdHJpc3RhdGUgIlFESSBWTEIgUEFUQSBzdXBwb3J0IgorCWRlcGVuZHMgb24gSVNBCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUURJIDY1MDAgYW5kIDY1ODAgUEFUQSBjb250cm9sbGVycyBvbiBWRVNBIGxvY2FsIGJ1cy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYyBiL2RyaXZlcnMvYXRhL2F0YV9nZW5lcmljLmMKaW5kZXggMWQxYzMwYS4uMzc3NDI1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvYXRhX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL2F0YS9hdGFfZ2VuZXJpYy5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCiAJLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMgYi9kcml2ZXJzL2F0YS9hdGFfcGlpeC5jCmluZGV4IGZmYTExMWUuLjU3MTk3MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL2F0YV9waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvYXRhX3BpaXguYwpAQCAtNjQzLDExICs2NDMsOSBAQAogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAotCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnBpaXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9wcmludGsoYXAsIEtFUk5fSU5GTywgInBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIik7Ci0JCWFwLT5laF9jb250ZXh0LmkuYWN0aW9uICY9IH5BVEFfRUhfUkVTRVRfTUFTSzsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnBpaXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisJCQogCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jIGIvZHJpdmVycy9hdGEvbGliYXRhLWNvcmUuYwppbmRleCA3NTNiMDE1Li5iNGFiZDY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtY29yZS5jCisrKyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1jb3JlLmMKQEAgLTU0NTMsNiArNTQ1MywxMSBAQAogCWludCByYzsKIAogCURQUklOVEsoIkVOVEVSXG4iKTsKKwkKKwlpZiAoZW50LT5pcnEgPT0gMCkgeworCQlkZXZfcHJpbnRrKEtFUk5fRVJSLCBkZXYsICJpcyBub3QgYXZhaWxhYmxlOiBObyBpbnRlcnJ1cHQgYXNzaWduZWQuXG4iKTsKKwkJcmV0dXJuIDA7CisJfQogCS8qIGFsbG9jIGEgY29udGFpbmVyIGZvciBvdXIgbGlzdCBvZiBBVEEgcG9ydHMgKGJ1c2VzKSAqLwogCWhvc3QgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXRhX2hvc3QpICsKIAkJICAgICAgIChlbnQtPm5fcG9ydHMgKiBzaXplb2Yodm9pZCAqKSksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvbGliYXRhLWVoLmMgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwppbmRleCAzZmE4MGYwLi4wMmIyYjI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtZWguYworKysgYi9kcml2ZXJzL2F0YS9saWJhdGEtZWguYwpAQCAtMTUxNSw3ICsxNTE1LDExIEBACiAJaWYgKHByZXJlc2V0KSB7CiAJCXJjID0gcHJlcmVzZXQoYXApOwogCQlpZiAocmMpIHsKLQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9FUlIsCisJCQlpZiAocmMgPT0gLUVOT0VOVCkgeworCQkJCWF0YV9wb3J0X3ByaW50ayhhcCwgS0VSTl9ERUJVRywgInBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIik7CisJCQkJYXAtPmVoX2NvbnRleHQuaS5hY3Rpb24gJj0gfkFUQV9FSF9SRVNFVF9NQVNLOworCQkJfSBlbHNlCisJCQkJYXRhX3BvcnRfcHJpbnRrKGFwLCBLRVJOX0VSUiwKIAkJCQkJInByZXJlc2V0IGZhaWxlZCAoZXJybm89JWQpXG4iLCByYyk7CiAJCQlyZXR1cm4gcmM7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYyBiL2RyaXZlcnMvYXRhL2xpYmF0YS1zZmYuYwppbmRleCA2ODhiYjU1Li4wOGIzYTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9saWJhdGEtc2ZmLmMKKysrIGIvZHJpdmVycy9hdGEvbGliYXRhLXNmZi5jCkBAIC04ODEsNyArODgxLDcgQEAKIAlwcm9iZV9lbnQtPnByaXZhdGVfZGF0YSA9IHBvcnRbMF0tPnByaXZhdGVfZGF0YTsKIAogCWlmIChwb3J0X21hc2sgJiBBVEFfUE9SVF9QUklNQVJZKSB7Ci0JCXByb2JlX2VudC0+aXJxID0gMTQ7CisJCXByb2JlX2VudC0+aXJxID0gQVRBX1BSSU1BUllfSVJROwogCQlwcm9iZV9lbnQtPnBvcnRbMF0uY21kX2FkZHIgPSBBVEFfUFJJTUFSWV9DTUQ7CiAJCXByb2JlX2VudC0+cG9ydFswXS5hbHRzdGF0dXNfYWRkciA9CiAJCXByb2JlX2VudC0+cG9ydFswXS5jdGxfYWRkciA9IEFUQV9QUklNQVJZX0NUTDsKQEAgLTg5Niw5ICs4OTYsOSBAQAogCiAJaWYgKHBvcnRfbWFzayAmIEFUQV9QT1JUX1NFQ09OREFSWSkgewogCQlpZiAocHJvYmVfZW50LT5pcnEpCi0JCQlwcm9iZV9lbnQtPmlycTIgPSAxNTsKKwkJCXByb2JlX2VudC0+aXJxMiA9IEFUQV9TRUNPTkRBUllfSVJROwogCQllbHNlCi0JCQlwcm9iZV9lbnQtPmlycSA9IDE1OworCQkJcHJvYmVfZW50LT5pcnEgPSBBVEFfU0VDT05EQVJZX0lSUTsKIAkJcHJvYmVfZW50LT5wb3J0WzFdLmNtZF9hZGRyID0gQVRBX1NFQ09OREFSWV9DTUQ7CiAJCXByb2JlX2VudC0+cG9ydFsxXS5hbHRzdGF0dXNfYWRkciA9CiAJCXByb2JlX2VudC0+cG9ydFsxXS5jdGxfYWRkciA9IEFUQV9TRUNPTkRBUllfQ1RMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYWxpLmMKaW5kZXggODQ0OGVlNi4uODdhZjNiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hbGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FsaS5jCkBAIC0zNjksNyArMzY5LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCkBAIC00MTAsNyArNDEwLDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCkBAIC00NDgsNyArNDQ4LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCkBAIC00ODUsNyArNDg1LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hbWQuYwppbmRleCAzMjkzY2Y5Li41OTllZTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2FtZC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfYW1kLmMKQEAgLTI1LDcgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9hbWQiCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi40IgogCiAvKioKICAqCXRpbWluZ19zZXR1cAkJLQlzaGFyZWQgdGltaW5nIGNvbXB1dGF0aW9uIGFuZCBsb2FkCkBAIC0xMzcsMTEgKzEzNyw4IEBACiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCXU4IGF0YTY2OwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYW1kX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpIHsKLQkJYXRhX3BvcnRfZGlzYWJsZShhcCk7Ci0JCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIsIGFwLT5pZCk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhbWRfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDQyLCAmYXRhNjYpOwogCWlmIChhdGE2NiAmIGJpdG1hc2tbYXAtPnBvcnRfbm9dKQpAQCAtMTY3LDExICsxNjQsOSBAQAogCQl7IDB4NDAsIDEsIDB4MDEsIDB4MDEgfQogCX07CiAKLQlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhbWRfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmFtZF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCS8qIE5vIGhvc3Qgc2lkZSBjYWJsZSBkZXRlY3Rpb24gKi8KIAlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBODA7CiAJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOwpAQCAtMjYyLDEyICsyNTcsOCBAQAogCXU4IGF0YTY2OwogCXUxNiB1ZG1hOwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmbnZfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQotCisJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmbnZfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCAweDUyLCAmYXRhNjYpOwogCWlmIChhdGE2NiAmIGJpdG1hc2tbYXAtPnBvcnRfbm9dKQpAQCAtMzY4LDcgKzM1OSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNDAyLDcgKzM5Myw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNDM2LDcgKzQyNyw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNDcwLDcgKzQ2MSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNTA0LDcgKzQ5NSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNTM4LDcgKzUyOSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jIGIvZHJpdmVycy9hdGEvcGF0YV9hcnRvcC5jCmluZGV4IGQ2ZWYzYmYuLmM0Y2NiNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfYXJ0b3AuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2FydG9wLmMKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9hdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9hcnRvcCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC4xIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjIiCiAKIC8qCiAgKglUaGUgQVJUT1AgaGFzIDMzIE1oeiBhbmQgIm92ZXIgY2xvY2tlZCIgdGltaW5nIHRhYmxlcy4gVW50aWwgd2UKQEAgLTQ3LDExICs0Nyw5IEBACiAJCXsgMHg0QVUsIDFVLCAweDA0VUwsIDB4MDRVTCB9LAkvKiBwb3J0IDEgKi8KIAl9OwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYXJ0b3BfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmFydG9wX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCisJCXJldHVybiAtRU5PRU5UOworCiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTQwOwogCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKIH0KQEAgLTkwLDExICs4OCw5IEBACiAJdTggdG1wOwogCiAJLyogT2RkIG51bWJlcmVkIGRldmljZSBpZHMgYXJlIHRoZSB1bml0cyB3aXRoIGVuYWJsZSBiaXRzICh0aGUgLVIgY2FyZHMpICovCi0JaWYgKHBkZXYtPmRldmljZSAlIDEgJiYgIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhcnRvcF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKHBkZXYtPmRldmljZSAlIDEgJiYgIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZhcnRvcF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDksICZ0bXApOwogCWlmICh0bXAgJiAoMSA+PiBhcC0+cG9ydF9ubykpCiAJCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKQEAgLTM0NCw3ICszNDAsNyBAQAogCS5ibWRtYV9zdGF0dXMJCT0gYXRhX2JtZG1hX3N0YXR1cywKIAkucWNfcHJlcAkJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKQEAgLTM3OSw4ICszNzUsNiBAQAogCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKLQogCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAogCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfYXRpaXhwLmMKaW5kZXggM2Y3OGExZS4uNmMyMjY5YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9hdGlpeHAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2F0aWl4cC5jCkBAIC0yMiw3ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfYXRpaXhwIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC40LjIiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjQuMyIKIAogZW51bSB7CiAJQVRJSVhQX0lERV9QSU9fVElNSU5HCT0gMHg0MCwKQEAgLTQxLDExICs0MSw5IEBACiAJCXsgMHg0OCwgMSwgMHgwOCwgMHgwMCB9CiAJfTsKIAotCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJmF0aWl4cF9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmYXRpaXhwX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCisJCXJldHVybiAtRU5PRU5UOworCiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTgwOwogCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKIH0KQEAgLTI0NCw3ICsyNDIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NtZDY0eC5jCmluZGV4IGFiZjFiYjcuLmU5MmIwZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY21kNjR4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jbWQ2NHguYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtMzM1LDcgKzMzNSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtMzY5LDcgKzM2OSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTIwLmMKaW5kZXggNzkyY2U0OC4uYTZjNmNlYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9jczU1MjAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUyMC5jCkBAIC0xOTMsOCArMTkzLDYgQEAKIAkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCiAJLmRhdGFfeGZlcgkJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAotCS5lbmdfdGltZW91dAkJPSBhdGFfZW5nX3RpbWVvdXQsCi0KIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCmluZGV4IGYzZDhhM2IuLjdiYmE0ZDk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTMwLmMKQEAgLTIwNyw3ICsyMDcsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gY3M1NTMwX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2NzNTUzNS5jCmluZGV4IDY5ZDZiNDIuLmQ2NGZjZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfY3M1NTM1LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9jczU1MzUuYwpAQCAtMjExLDcgKzIxMSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9jeXByZXNzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwppbmRleCBmZDU1NDc0Li5kZmE1YWM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2N5cHJlc3MuYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9lZmFyLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwppbmRleCBjMzBiYzE4Li45NWNkMWNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2VmYXIuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX2VmYXIiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjQuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC4yIgogCiAvKioKICAqCWVmYXJfcHJlX3Jlc2V0CS0JY2hlY2sgZm9yIDQwLzgwIHBpbgpAQCAtNDIsMTEgKzQyLDkgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJdTggdG1wOwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmZWZhcl9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmZWZhcl9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIDB4NDcsICZ0bXApOwogCWlmICh0bXAgJiAoMiA+PiBhcC0+cG9ydF9ubykpCiAJCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKQEAgLTI2Myw4ICsyNjEsNiBAQAogCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKLQogCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAogCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0MzY2LmMKaW5kZXggOTRiYjFkZi4uY2Y2NTZlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzNjYuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX2hwdDM2Ni5jCkBAIC0zNjAsNyArMzYwLDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzN3guYwppbmRleCA1MzJhNzkyLi4xMDMxOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDM3eC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0Mzd4LmMKQEAgLTc5Myw3ICs3OTMsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTgzMiw3ICs4MzIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTg3Miw3ICs4NzIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTkxMiw3ICs5MTIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gybi5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKaW5kZXggMDZjOGRiMC4uNWM1ZDRmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDJuLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gaHB0M3gybl9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jIGIvZHJpdmVycy9hdGEvcGF0YV9ocHQzeDMuYwppbmRleCAxNTI3NzAxLi4xZjA4NGFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX2hwdDN4My5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfaHB0M3gzLmMKQEAgLTE0NSw3ICsxNDUsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMgYi9kcml2ZXJzL2F0YS9wYXRhX2lzYXBucC5jCmluZGV4IDczOTQ4YzguLjY0MGI4YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXNhcG5wLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pc2FwbnAuYwpAQCAtNTIsNyArNTIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2l0ODIxeC5jCmluZGV4IGFmMzkwOTcuLjgyYTQ2ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9pdDgyMXguYwpAQCAtNzAzLDcgKzcwMyw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBpdDgyMXhfc21hcnRfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNzM5LDcgKzczOSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBpdDgyMXhfcGFzc3RocnVfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfam1pY3Jvbi5jIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKaW5kZXggNjgzMmE2NC4uYmUzYTg2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9qbWljcm9uLmMKQEAgLTUxLDcgKzUxLDcgQEAKIAkvKiBDaGVjayBpZiBvdXIgcG9ydCBpcyBlbmFibGVkICovCiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4NDAsICZjb250cm9sKTsKIAlpZiAoKGNvbnRyb2wgJiBwb3J0X21hc2spID09IDApCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVOT0VOVDsKIAogCS8qIFRoZXJlIGFyZSB0d28gYmFzaWMgbWFwcGluZ3MuIE9uZSBoYXMgdGhlIHR3byBTQVRBIHBvcnRzIG1lcmdlZAogCSAgIGFzIG1hc3Rlci9zbGF2ZSBhbmQgdGhlIHNlY29uZGFyeSBhcyBQQVRBLCB0aGUgb3RoZXIgaGFzIG9ubHkgdGhlCkBAIC0xNjQsOCArMTY0LDcgQEAKIAkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCiAJLmRhdGFfeGZlcgkJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAotCS8qIFRpbWVvdXQgaGFuZGxpbmcuIFNwZWNpYWwgcmVjb3ZlcnkgaG9va3MgaGVyZSAqLwotCS5lbmdfdGltZW91dAkJPSBhdGFfZW5nX3RpbWVvdXQsCisJLyogSVJRLXJlbGF0ZWQgaG9va3MgKi8KIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMgYi9kcml2ZXJzL2F0YS9wYXRhX2xlZ2FjeS5jCmluZGV4IGFkMzdjMjIuLjEwMjMxZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbGVnYWN5LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9sZWdhY3kuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXJfbm9pcnEsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtMTg2LDcgKzE4Niw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXJfbm9pcnEsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtMjk2LDcgKzI5Niw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gcGRjX2RhdGFfeGZlcl92bGIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtMzQ4LDcgKzM0OCw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCS8qIENoZWNrIHZsYi9ub2lycSAqLwogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTQxMSw3ICs0MTEsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAkvKiBGSVhNRTogQ2hlY2sgMzJiaXQgYW5kIG5vaXJxICovCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNTI5LDcgKzUyOSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNjU5LDcgKzY1OSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBvcHRpODJjNDZ4X3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYyBiL2RyaXZlcnMvYXRhL3BhdGFfbXBpaXguYwppbmRleCAxOTU4YzRlLi4zYzY1MzkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX21waWl4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9tcGlpeC5jCkBAIC0xOCw3ICsxOCw3IEBACiAgKiBUaGUgZHJpdmVyIGNvbmNpb3VzbHkga2VlcHMgdGhpcyBsb2dpYyBpbnRlcm5hbGx5IHRvIGF2b2lkIHB1c2hpbmcgcXVpcmt5CiAgKiBQQVRBIGhpc3RvcnkgaW50byB0aGUgY2xlYW4gbGliYXRhIGxheWVyLgogICoKLSAqIFRoaW5rcGFkIHNwZWNpZmljIG5vdGU6IElmIHlvdSBib290IGFuIE1QSUlYIHVzaW5nIHRoaW5rcGFkIHdpdGggYSBQQ01DSUEKKyAqIFRoaW5rcGFkIHNwZWNpZmljIG5vdGU6IElmIHlvdSBib290IGFuIE1QSUlYIHVzaW5nIGEgdGhpbmtwYWQgd2l0aCBhIFBDTUNJQQogICogaGFyZCBkaXNrIHByZXNlbnQgdGhpcyBkcml2ZXIgd2lsbCBub3QgZGV0ZWN0IGl0LiBUaGlzIGlzIG5vdCBhIGJ1Zy4gSW4gdGhpcwogICogY29uZmlndXJhdGlvbiB0aGUgc2Vjb25kYXJ5IHBvcnQgb2YgdGhlIE1QSUlYIGlzIGRpc2FibGVkIGFuZCB0aGUgYWRkcmVzc2VzCiAgKiBhcmUgZGVjb2RlZCBieSB0aGUgUENNQ0lBIGJyaWRnZSBhbmQgdGhlcmVmb3JlIGFyZSBmb3IgYSBnZW5lcmljIElERSBkcml2ZXIKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9tcGlpeCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuNy4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC43LjIiCiAKIGVudW0gewogCUlERVRJTSA9IDB4NkMsCQkvKiBJREUgY29udHJvbCByZWdpc3RlciAqLwpAQCAtNTQsMTEgKzU0LDggQEAKIAkJeyAweDZGLCAxLCAweDgwLCAweDgwIH0KIAl9OwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmbXBpaXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm1waWl4X2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCisJCXJldHVybiAtRU5PRU5UOwogCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25ldGNlbGwuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCmluZGV4IDE2Y2IyNTQuLjc2ZWI5YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbmV0Y2VsbC5jCkBAIC05MCw4ICs5MCw3IEBACiAJLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAogCS5kYXRhX3hmZXIJCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKLQkvKiBUaW1lb3V0IGhhbmRsaW5nLiBTcGVjaWFsIHJlY292ZXJ5IGhvb2tzIGhlcmUgKi8KLQkuZW5nX3RpbWVvdXQJCT0gYXRhX2VuZ190aW1lb3V0LAorCS8qIElSUS1yZWxhdGVkIGhvb2tzICovCiAJLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCiAJLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX25zODc0MTAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCmluZGV4IDkzZDY2NDYuLjIwMDVhOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfbnM4NzQxMC5jCkBAIC00NSwxMSArNDUsOCBAQAogCQl7IDB4NDcsIDEsIDB4MDgsIDB4MDggfQogCX07CiAKLQlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZuczg3NDEwX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpIHsKLQkJYXRhX3BvcnRfZGlzYWJsZShhcCk7Ci0JCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIsIGFwLT5pZCk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZuczg3NDEwX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCisJCXJldHVybiAtRU5PRU5UOwogCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CkBAIC0xNzksNyArMTc2LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IG5zODc0MTBfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9vbGRwaWl4LmMgYi9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYwppbmRleCAwNGM2MThhLi4zMWEyODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX29sZHBpaXguYwpAQCAtMjUsNyArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX29sZHBpaXgiCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIwLjUuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNS4yIgogCiAvKioKICAqCW9sZHBpaXhfcHJlX3Jlc2V0CQktCXByb2JlIGJlZ2luCkBAIC00MiwxMSArNDIsOCBAQAogCQl7IDB4NDNVLCAxVSwgMHg4MFVMLCAweDgwVUwgfSwJLyogcG9ydCAxICovCiAJfTsKIAotCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm9sZHBpaXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJm9sZHBpaXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTQwOwogCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aS5jIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKaW5kZXggYzNkMDEzMi4uNTdmZTIxZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9vcHRpLmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9vcHRpIgotI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjQiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIuNSIKIAogZW51bSB7CiAJUkVBRF9SRUcJPSAwLAkvKiBpbmRleCBvZiBSZWFkIGN5Y2xlIHRpbWluZyByZWdpc3RlciAqLwpAQCAtNTksMTEgKzU5LDkgQEAKIAkJeyAweDQwLCAxLCAweDA4LCAweDAwIH0KIAl9OwogCi0JaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb3B0aV9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb3B0aV9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKQorCQlyZXR1cm4gLUVOT0VOVDsKKwogCWFwLT5jYmwgPSBBVEFfQ0JMX1BBVEE0MDsKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CkBAIC0yMjksNyArMjI3LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX29wdGlkbWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCmluZGV4IDE3N2E0NTUuLjcyOTZhMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCisrKyBiL2RyaXZlcnMvYXRhL3BhdGFfb3B0aWRtYS5jCkBAIC0zMyw3ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvbGliYXRhLmg+CiAKICNkZWZpbmUgRFJWX05BTUUgInBhdGFfb3B0aWRtYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4xIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjIiCiAKIGVudW0gewogCVJFQURfUkVHCT0gMCwJLyogaW5kZXggb2YgUmVhZCBjeWNsZSB0aW1pbmcgcmVnaXN0ZXIgKi8KQEAgLTU5LDExICs1OSw5IEBACiAJCTB4NDAsIDEsIDB4MDgsIDB4MDAKIAl9OwogCi0JaWYgKGFwLT5wb3J0X25vICYmICFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmb3B0aWRtYV9lbmFibGVfYml0cykpIHsKLQkJYXRhX3BvcnRfZGlzYWJsZShhcCk7Ci0JCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIsIGFwLT5pZCk7Ci0JCXJldHVybiAwOwotCX0KKwlpZiAoYXAtPnBvcnRfbm8gJiYgIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZvcHRpZG1hX2VuYWJsZV9iaXRzKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CisKIAlhcC0+Y2JsID0gQVRBX0NCTF9QQVRBNDA7CiAJcmV0dXJuIGF0YV9zdGRfcHJlcmVzZXQoYXApOwogfQpAQCAtMzg4LDcgKzM4Niw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApAQCAtNDIzLDcgKzQyMSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcGNtY2lhLmMKaW5kZXggNjJiMjVjZC4uY2I1MDFlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9wY21jaWEuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BjbWNpYS5jCkBAIC04Nyw3ICs4Nyw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXJfbm9pcnEsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jIGIvZHJpdmVycy9hdGEvcGF0YV9wZGMyMDI3eC5jCmluZGV4IDMxYWI5YzguLmJkNGVkNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfcGRjMjAyN3guYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3BkYzIwMjd4LmMKQEAgLTM2LDcgKzM2LDcgQEAKICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2RlZmluZSBEUlZfTkFNRQkicGF0YV9wZGMyMDI3eCIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNzQtYWMzIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC43NC1hYzUiCiAjdW5kZWYgUERDX0RFQlVHCiAKICNpZmRlZiBQRENfREVCVUcKQEAgLTMxMSwxMCArMzExLDggQEAKIHN0YXRpYyBpbnQgcGRjMjAyN3hfcHJlcmVzZXQoc3RydWN0IGF0YV9wb3J0ICphcCkKIHsKIAkvKiBDaGVjayB3aGV0aGVyIHBvcnQgZW5hYmxlZCAqLwotCWlmICghcGRjMjAyN3hfcG9ydF9lbmFibGVkKGFwKSkgewotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwZGMyMDI3eF9wb3J0X2VuYWJsZWQoYXApKQorCQlyZXR1cm4gLUVOT0VOVDsKIAlwZGMyMDI3eF9jYmxfZGV0ZWN0KGFwKTsKIAlyZXR1cm4gYXRhX3N0ZF9wcmVyZXNldChhcCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jIGIvZHJpdmVycy9hdGEvcGF0YV9xZGkuYwppbmRleCAzNWNmZGYwYS4uNzk3N2Y0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9xZGkuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3FkaS5jCkBAIC0xODQsNyArMTg0LDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IHFkaV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBxZGlfZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTIxMiw3ICsyMTIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gcWRpX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IHFkaV9kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yYWRpc3lzLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwppbmRleCAyNzdmODQxLi5jMjBiY2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3JhZGlzeXMuYwpAQCAtMjU1LDggKzI1NSw2IEBACiAJLnFjX2lzc3VlCQk9IHJhZGlzeXNfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKLQogCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAogCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYyBiL2RyaXZlcnMvYXRhL3BhdGFfcnoxMDAwLmMKaW5kZXggM2M2ZDg0Zi4uZWNjYzZmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV9yejEwMDAuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3J6MTAwMC5jCkBAIC0xMTIsNyArMTEyLDcgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5mcmVlemUJCT0gYXRhX2JtZG1hX2ZyZWV6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NjMTIwMC5jCmluZGV4IDQxNjZjMWEuLjEwN2U2Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2MxMjAwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zYzEyMDAuYwpAQCAtMjE3LDcgKzIxNyw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBzYzEyMDBfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jIGIvZHJpdmVycy9hdGEvcGF0YV9zZXJ2ZXJ3b3Jrcy5jCmluZGV4IGFmNDU2MTEuLmE1YzhkN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NlcnZlcndvcmtzLmMKQEAgLTQxLDcgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9zZXJ2ZXJ3b3JrcyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMy42IgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4zLjciCiAKICNkZWZpbmUgU1ZXS1NfQ1NCNV9SRVZJU0lPTl9ORVcJMHg5MiAvKiBtaW4gUENJX1JFVklTSU9OX0lEIGZvciBVRE1BNSAoQTIuMCkgKi8KICNkZWZpbmUgU1ZXS1NfQ1NCNl9SRVZJU0lPTgkweGEwIC8qIG1pbiBQQ0lfUkVWSVNJT05fSUQgZm9yIFVETUE0IChBMS4wKSAqLwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJeyBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjVJREUsIFBDSV9WRU5ET1JfSURfREVMTCwgZGVsbF9jYWJsZSB9LAogCXsgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFLCBQQ0lfVkVORE9SX0lEX0RFTEwsIGRlbGxfY2FibGUgfSwKIAl7IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSwgUENJX1ZFTkRPUl9JRF9TVU4sICBzdW5fY2FibGUgfSwKLQl7IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCwgUENJX0FOWV9JRCwgb3NiNF9jYWJsZSB9LAorCXsgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFLCBQQ0lfQU5ZX0lELCBvc2I0X2NhYmxlIH0sCiAJeyBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjVJREUsIFBDSV9BTllfSUQsIGNzYl9jYWJsZSB9LAogCXsgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFLCBQQ0lfQU5ZX0lELCBjc2JfY2FibGUgfSwKIAl7IFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNklERTIsIFBDSV9BTllfSUQsIGNzYl9jYWJsZSB9LApAQCAtMzUyLDEwICszNTIsMTIgQEAKIAogCS5xY19wcmVwIAk9IGF0YV9xY19wcmVwLAogCS5xY19pc3N1ZQk9IGF0YV9xY19pc3N1ZV9wcm90LAotCS5lbmdfdGltZW91dAk9IGF0YV9lbmdfdGltZW91dCwKKwogCS5kYXRhX3hmZXIJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAogCS5pcnFfaGFuZGxlcgk9IGF0YV9pbnRlcnJ1cHQsCisJLmlycV9jbGVhcgk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCisKIAkucG9ydF9zdGFydAk9IGF0YV9wb3J0X3N0YXJ0LAogCS5wb3J0X3N0b3AJPSBhdGFfcG9ydF9zdG9wLAogCS5ob3N0X3N0b3AJPSBhdGFfaG9zdF9zdG9wCkBAIC0zODUsMTAgKzM4NywxMiBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKKwkuaXJxX2NsZWFyCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKKwogCS5wb3J0X3N0YXJ0CT0gYXRhX3BvcnRfc3RhcnQsCiAJLnBvcnRfc3RvcAk9IGF0YV9wb3J0X3N0b3AsCiAJLmhvc3Rfc3RvcAk9IGF0YV9ob3N0X3N0b3AKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3NpbDY4MC5jCmluZGV4IDhmN2RiOTYuLmM4YjJlMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lsNjgwLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaWw2ODAuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAKIAkucWNfcHJlcCAJPSBhdGFfcWNfcHJlcCwKIAkucWNfaXNzdWUJPSBhdGFfcWNfaXNzdWVfcHJvdCwKLQkuZW5nX3RpbWVvdXQJPSBhdGFfZW5nX3RpbWVvdXQsCisKIAkuZGF0YV94ZmVyCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKIAkuaXJxX2hhbmRsZXIJPSBhdGFfaW50ZXJydXB0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zaXMuYyBiL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKaW5kZXggMmU1NTUxNjguLjE3NzkxZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2lzLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV9zaXMuYwpAQCAtMzQsNyArMzQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2F0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FCSJwYXRhX3NpcyIKLSNkZWZpbmUgRFJWX1ZFUlNJT04JIjAuNC4zIgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMC40LjQiCiAKIHN0cnVjdCBzaXNfY2hpcHNldCB7CiAJdTE2IGRldmljZTsJCQkvKiBQQ0kgaG9zdCBJRCAqLwpAQCAtNzQsMTEgKzc0LDkgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoYXAtPmhvc3QtPmRldik7CiAJdTE2IHRtcDsKIAotCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnNpc19lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCWF0YV9wb3J0X2Rpc2FibGUoYXApOwotCQlwcmludGsoS0VSTl9JTkZPICJhdGEldTogcG9ydCBkaXNhYmxlZC4gaWdub3JpbmcuXG4iLCBhcC0+aWQpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmc2lzX2VuYWJsZV9iaXRzW2FwLT5wb3J0X25vXSkpCisJCXJldHVybiAtRU5PRU5UOworCiAJLyogVGhlIHRvcCBiaXQgb2YgdGhpcyByZWdpc3RlciBpcyB0aGUgY2FibGUgZGV0ZWN0IGJpdCAqLwogCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIDB4NTAgKyAyICogYXAtPnBvcnRfbm8sICZ0bXApOwogCWlmICh0bXAgJiAweDgwMDApCkBAIC01NzUsOCArNTczLDYgQEAKIAkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCiAJLmRhdGFfeGZlcgkJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAotCS5lbmdfdGltZW91dAkJPSBhdGFfZW5nX3RpbWVvdXQsCi0KIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCiAKQEAgLTYxMCw4ICs2MDYsNiBAQAogCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKLQogCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAogCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKIApAQCAtNjQ2LDggKzY0MCw2IEBACiAJLnFjX2lzc3VlCQk9IGF0YV9xY19pc3N1ZV9wcm90LAogCS5kYXRhX3hmZXIJCT0gYXRhX3Bpb19kYXRhX3hmZXIsCiAKLQkuZW5nX3RpbWVvdXQJCT0gYXRhX2VuZ190aW1lb3V0LAotCiAJLmlycV9oYW5kbGVyCQk9IGF0YV9pbnRlcnJ1cHQsCiAJLmlycV9jbGVhcgkJPSBhdGFfYm1kbWFfaXJxX2NsZWFyLAogCkBAIC02ODEsOCArNjczLDYgQEAKIAkucWNfaXNzdWUJCT0gYXRhX3FjX2lzc3VlX3Byb3QsCiAJLmRhdGFfeGZlcgkJPSBhdGFfcGlvX2RhdGFfeGZlciwKIAotCS5lbmdfdGltZW91dAkJPSBhdGFfZW5nX3RpbWVvdXQsCi0KIAkuaXJxX2hhbmRsZXIJCT0gYXRhX2ludGVycnVwdCwKIAkuaXJxX2NsZWFyCQk9IGF0YV9ibWRtYV9pcnFfY2xlYXIsCiAKQEAgLTcxNiw4ICs3MDYsNiBAQAogCS5xY19pc3N1ZQkJPSBhdGFfcWNfaXNzdWVfcHJvdCwKIAkuZGF0YV94ZmVyCQk9IGF0YV9waW9fZGF0YV94ZmVyLAogCi0JLmVuZ190aW1lb3V0CQk9IGF0YV9lbmdfdGltZW91dCwKLQogCS5pcnFfaGFuZGxlcgkJPSBhdGFfaW50ZXJydXB0LAogCS5pcnFfY2xlYXIJCT0gYXRhX2JtZG1hX2lycV9jbGVhciwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jIGIvZHJpdmVycy9hdGEvcGF0YV9zbDgyYzEwNS5jCmluZGV4IGY4NDk5NzguLjViNzYyYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfc2w4MmMxMDUuYworKysgYi9kcml2ZXJzL2F0YS9wYXRhX3NsODJjMTA1LmMKQEAgLTE5LDcgKzE5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9saWJhdGEuaD4KIAogI2RlZmluZSBEUlZfTkFNRSAicGF0YV9zbDgyYzEwNSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMi4yIgorI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjMiCiAKIGVudW0gewogCS8qCkBAIC00OSwxMSArNDksOCBAQAogCX07CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCi0JaWYgKGFwLT5wb3J0X25vICYmICFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmc2w4MmMxMDVfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJZGV2X3ByaW50ayhLRVJOX0lORk8sICZwZGV2LT5kZXYsICJwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKGFwLT5wb3J0X25vICYmICFwY2lfdGVzdF9jb25maWdfYml0cyhwZGV2LCAmc2w4MmMxMDVfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTQwOwogCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKIH0KQEAgLTI2NCw3ICsyNjEsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdHJpZmxleC5jIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKaW5kZXggMzZmNzg4Ny4uYTk1NGVkOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV90cmlmbGV4LmMKQEAgLTQ2LDEzICs0NiwxMyBAQAogI2RlZmluZSBEUlZfVkVSU0lPTiAiMC4yLjUiCiAKIC8qKgotICoJdHJpZmxleF9wcm9iZV9pbml0CQktCXByb2JlIGJlZ2luCisgKgl0cmlmbGV4X3ByZXJlc2V0CQktCXByb2JlIGJlZ2luCiAgKglAYXA6IEFUQSBwb3J0CiAgKgogICoJU2V0IHVwIGNhYmxlIHR5cGUgYW5kIHVzZSBnZW5lcmljIHByb2JlIGluaXQKICAqLwogCi1zdGF0aWMgaW50IHRyaWZsZXhfcHJvYmVfaW5pdChzdHJ1Y3QgYXRhX3BvcnQgKmFwKQorc3RhdGljIGludCB0cmlmbGV4X3ByZXJlc2V0KHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfYml0cyB0cmlmbGV4X2VuYWJsZV9iaXRzW10gPSB7CiAJCXsgMHg4MCwgMSwgMHgwMSwgMHgwMSB9LApAQCAtNjEsMTEgKzYxLDggQEAKIAogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihhcC0+aG9zdC0+ZGV2KTsKIAotCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnRyaWZsZXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkgewotCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYXRhJXU6IHBvcnQgZGlzYWJsZWQuIGlnbm9yaW5nLlxuIiwgYXAtPmlkKTsKLQkJcmV0dXJuIDA7Ci0JfQorCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnRyaWZsZXhfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJcmV0dXJuIC1FTk9FTlQ7CiAJYXAtPmNibCA9IEFUQV9DQkxfUEFUQTQwOwogCXJldHVybiBhdGFfc3RkX3ByZXJlc2V0KGFwKTsKIH0KQEAgLTc0LDcgKzcxLDcgQEAKIAogc3RhdGljIHZvaWQgdHJpZmxleF9lcnJvcl9oYW5kbGVyKHN0cnVjdCBhdGFfcG9ydCAqYXApCiB7Ci0JYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCB0cmlmbGV4X3Byb2JlX2luaXQsIGF0YV9zdGRfc29mdHJlc2V0LCBOVUxMLCBhdGFfc3RkX3Bvc3RyZXNldCk7CisJYXRhX2JtZG1hX2RyaXZlX2VoKGFwLCB0cmlmbGV4X3ByZXJlc2V0LCBhdGFfc3RkX3NvZnRyZXNldCwgTlVMTCwgYXRhX3N0ZF9wb3N0cmVzZXQpOwogfQogCiAvKioKQEAgLTIyMSw3ICsyMTgsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMgYi9kcml2ZXJzL2F0YS9wYXRhX3ZpYS5jCmluZGV4IDFiMmZmMTMuLjdiNWRkMjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYXRhL3BhdGFfdmlhLmMKKysrIGIvZHJpdmVycy9hdGEvcGF0YV92aWEuYwpAQCAtNjAsNyArNjAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xpYmF0YS5oPgogCiAjZGVmaW5lIERSVl9OQU1FICJwYXRhX3ZpYSIKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS4xMyIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMS4xNCIKIAogLyoKICAqCVRoZSBmb2xsb3dpbmcgY29tZXMgZGlyZWN0bHkgZnJvbSBWb2p0ZWNoIFBhdmxpaydzIGlkZS9wY2kvdmlhODJjeHh4CkBAIC0xNTUsMTEgKzE1NSw4IEBACiAKIAkJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGFwLT5ob3N0LT5kZXYpOwogCi0JCWlmICghcGNpX3Rlc3RfY29uZmlnX2JpdHMocGRldiwgJnZpYV9lbmFibGVfYml0c1thcC0+cG9ydF9ub10pKSB7Ci0JCQlhdGFfcG9ydF9kaXNhYmxlKGFwKTsKLQkJCXByaW50ayhLRVJOX0lORk8gImF0YSV1OiBwb3J0IGRpc2FibGVkLiBpZ25vcmluZy5cbiIsIGFwLT5pZCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCQlpZiAoIXBjaV90ZXN0X2NvbmZpZ19iaXRzKHBkZXYsICZ2aWFfZW5hYmxlX2JpdHNbYXAtPnBvcnRfbm9dKSkKKwkJCXJldHVybiAtRU5PRU5UOwogCX0KIAogCWlmICgoY29uZmlnLT5mbGFncyAmIFZJQV9VRE1BKSA+PSBWSUFfVURNQV82NikKQEAgLTMyNSw3ICszMjIsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKQEAgLTM2MCw3ICszNTcsNyBAQAogCiAJLnFjX3ByZXAgCT0gYXRhX3FjX3ByZXAsCiAJLnFjX2lzc3VlCT0gYXRhX3FjX2lzc3VlX3Byb3QsCi0JLmVuZ190aW1lb3V0CT0gYXRhX2VuZ190aW1lb3V0LAorCiAJLmRhdGFfeGZlcgk9IGF0YV9waW9fZGF0YV94ZmVyX25vaXJxLAogCiAJLmlycV9oYW5kbGVyCT0gYXRhX2ludGVycnVwdCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYXRhL3NhdGFfbXYuYyBiL2RyaXZlcnMvYXRhL3NhdGFfbXYuYwppbmRleCBmZGNlNmUwLi5jMDE0OTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2F0YS9zYXRhX212LmMKKysrIGIvZHJpdmVycy9hdGEvc2F0YV9tdi5jCkBAIC00NjMsNiArNDYzLDcgQEAKIAogCS5xY19wcmVwCQk9IG12X3FjX3ByZXBfaWllLAogCS5xY19pc3N1ZQkJPSBtdl9xY19pc3N1ZSwKKwkuZGF0YV94ZmVyCQk9IGF0YV9tbWlvX2RhdGFfeGZlciwKIAogCS5lbmdfdGltZW91dAkJPSBtdl9lbmdfdGltZW91dCwKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL01ha2VmaWxlIGIvZHJpdmVycy9iYXNlL01ha2VmaWxlCmluZGV4IGI1MzllNWUuLjdiYmI5ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2Jhc2UvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiBvYmotJChDT05GSUdfSVNBKQkrPSBpc2Eubwogb2JqLSQoQ09ORklHX0ZXX0xPQURFUikJKz0gZmlybXdhcmVfY2xhc3Mubwogb2JqLSQoQ09ORklHX05VTUEpCSs9IG5vZGUubwotb2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHKSArPSBtZW1vcnkubworb2JqLSQoQ09ORklHX01FTU9SWV9IT1RQTFVHX1NQQVJTRSkgKz0gbWVtb3J5Lm8KIG9iai0kKENPTkZJR19TTVApCSs9IHRvcG9sb2d5Lm8KIG9iai0kKENPTkZJR19TWVNfSFlQRVJWSVNPUikgKz0gaHlwZXJ2aXNvci5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9jbGFzcy5jIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKaW5kZXggYjA2YjBlMi4uYjMyYjc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2NsYXNzLmMKKysrIGIvZHJpdmVycy9iYXNlL2NsYXNzLmMKQEAgLTIyOCw3ICsyMjgsNyBAQAogCiAvKioKICAqIGNsYXNzX2Rlc3Ryb3kgLSBkZXN0cm95cyBhIHN0cnVjdCBjbGFzcyBzdHJ1Y3R1cmUKLSAqIEBjczogcG9pbnRlciB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgaXMgdG8gYmUgZGVzdHJveWVkCisgKiBAY2xzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xhc3MgdGhhdCBpcyB0byBiZSBkZXN0cm95ZWQKICAqCiAgKiBOb3RlLCB0aGUgcG9pbnRlciB0byBiZSBkZXN0cm95ZWQgbXVzdCBoYXZlIGJlZW4gY3JlYXRlZCB3aXRoIGEgY2FsbAogICogdG8gY2xhc3NfY3JlYXRlKCkuCkBAIC02NTgsOSArNjU4LDkgQEAKIAogLyoqCiAgKiBjbGFzc19kZXZpY2VfY3JlYXRlIC0gY3JlYXRlcyBhIGNsYXNzIGRldmljZSBhbmQgcmVnaXN0ZXJzIGl0IHdpdGggc3lzZnMKLSAqIEBjczogcG9pbnRlciB0byB0aGUgc3RydWN0IGNsYXNzIHRoYXQgdGhpcyBkZXZpY2Ugc2hvdWxkIGJlIHJlZ2lzdGVyZWQgdG8uCisgKiBAY2xzOiBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xhc3MgdGhhdCB0aGlzIGRldmljZSBzaG91bGQgYmUgcmVnaXN0ZXJlZCB0by4KICAqIEBwYXJlbnQ6IHBvaW50ZXIgdG8gdGhlIHBhcmVudCBzdHJ1Y3QgY2xhc3NfZGV2aWNlIG9mIHRoaXMgbmV3IGRldmljZSwgaWYgYW55LgotICogQGRldjogdGhlIGRldl90IGZvciB0aGUgY2hhciBkZXZpY2UgdG8gYmUgYWRkZWQuCisgKiBAZGV2dDogdGhlIGRldl90IGZvciB0aGUgY2hhciBkZXZpY2UgdG8gYmUgYWRkZWQuCiAgKiBAZGV2aWNlOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZGV2aWNlIHRoYXQgaXMgYXNzaW9jaWF0ZWQgd2l0aCB0aGlzIGNsYXNzIGRldmljZS4KICAqIEBmbXQ6IHN0cmluZyBmb3IgdGhlIGNsYXNzIGRldmljZSdzIG5hbWUKICAqCkBAIC03NjYsNyArNzY2LDcgQEAKIC8qKgogICogY2xhc3NfZGV2aWNlX2Rlc3Ryb3kgLSByZW1vdmVzIGEgY2xhc3MgZGV2aWNlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBjbGFzc19kZXZpY2VfY3JlYXRlKCkKICAqIEBjbHM6IHRoZSBwb2ludGVyIHRvIHRoZSBzdHJ1Y3QgY2xhc3MgdGhhdCB0aGlzIGRldmljZSB3YXMgcmVnaXN0ZXJlZCAqIHdpdGguCi0gKiBAZGV2OiB0aGUgZGV2X3Qgb2YgdGhlIGRldmljZSB0aGF0IHdhcyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQuCisgKiBAZGV2dDogdGhlIGRldl90IG9mIHRoZSBkZXZpY2UgdGhhdCB3YXMgcHJldmlvdXNseSByZWdpc3RlcmVkLgogICoKICAqIFRoaXMgY2FsbCB1bnJlZ2lzdGVycyBhbmQgY2xlYW5zIHVwIGEgY2xhc3MgZGV2aWNlIHRoYXQgd2FzIGNyZWF0ZWQgd2l0aCBhCiAgKiBjYWxsIHRvIGNsYXNzX2RldmljZV9jcmVhdGUoKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9iYXNlL2Zpcm13YXJlX2NsYXNzLmMgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwppbmRleCA1ZDZjMDExLi4xNDYxNTY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYworKysgYi9kcml2ZXJzL2Jhc2UvZmlybXdhcmVfY2xhc3MuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8bGludXgvZmlybXdhcmUuaD4KICNpbmNsdWRlICJiYXNlLmgiCkBAIC01MTEsNyArNTEyLDYgQEAKIAkJV0FSTl9PTigxKTsKIAkJcmV0dXJuIDA7CiAJfQotCWRhZW1vbml6ZSgiJXMvJXMiLCAiZmlybXdhcmUiLCBmd193b3JrLT5uYW1lKTsKIAlyZXQgPSBfcmVxdWVzdF9maXJtd2FyZSgmZncsIGZ3X3dvcmstPm5hbWUsIGZ3X3dvcmstPmRldmljZSwKIAkJZndfd29yay0+dWV2ZW50KTsKIAlpZiAocmV0IDwgMCkKQEAgLTU0Niw5ICs1NDYsOSBAQAogCWNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqY29udGV4dCwKIAl2b2lkICgqY29udCkoY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywgdm9pZCAqY29udGV4dCkpCiB7CisJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCXN0cnVjdCBmaXJtd2FyZV93b3JrICpmd193b3JrID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBmaXJtd2FyZV93b3JrKSwKIAkJCQkJCUdGUF9BVE9NSUMpOwotCWludCByZXQ7CiAKIAlpZiAoIWZ3X3dvcmspCiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNTY2LDE0ICs1NjYsMTQgQEAKIAkJLnVldmVudCA9IHVldmVudCwKIAl9OwogCi0JcmV0ID0ga2VybmVsX3RocmVhZChyZXF1ZXN0X2Zpcm13YXJlX3dvcmtfZnVuYywgZndfd29yaywKLQkJCSAgICBDTE9ORV9GUyB8IENMT05FX0ZJTEVTKTsKKwl0YXNrID0ga3RocmVhZF9ydW4ocmVxdWVzdF9maXJtd2FyZV93b3JrX2Z1bmMsIGZ3X3dvcmssCisJCQkgICAgImZpcm13YXJlLyVzIiwgbmFtZSk7CiAKLQlpZiAocmV0IDwgMCkgeworCWlmIChJU19FUlIodGFzaykpIHsKIAkJZndfd29yay0+Y29udChOVUxMLCBmd193b3JrLT5jb250ZXh0KTsKIAkJbW9kdWxlX3B1dChmd193b3JrLT5tb2R1bGUpOwogCQlrZnJlZShmd193b3JrKTsKLQkJcmV0dXJuIHJldDsKKwkJcmV0dXJuIFBUUl9FUlIodGFzayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjAyLDcgKzYwMiw3IEBACiAJY2xhc3NfdW5yZWdpc3RlcigmZmlybXdhcmVfY2xhc3MpOwogfQogCi1tb2R1bGVfaW5pdChmaXJtd2FyZV9jbGFzc19pbml0KTsKK2ZzX2luaXRjYWxsKGZpcm13YXJlX2NsYXNzX2luaXQpOwogbW9kdWxlX2V4aXQoZmlybXdhcmVfY2xhc3NfZXhpdCk7CiAKIEVYUE9SVF9TWU1CT0wocmVsZWFzZV9maXJtd2FyZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuYwppbmRleCBhMzYwMjE1Li5iM2Y2MzlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5jCisrKyBiL2RyaXZlcnMvYmxvY2svREFDOTYwLmMKQEAgLTc3MCw3ICs3NzAsNyBAQAogc3RhdGljIHZvaWQgREFDOTYwX0V4ZWN1dGVDb21tYW5kKERBQzk2MF9Db21tYW5kX1QgKkNvbW1hbmQpCiB7CiAgIERBQzk2MF9Db250cm9sbGVyX1QgKkNvbnRyb2xsZXIgPSBDb21tYW5kLT5Db250cm9sbGVyOwotICBERUNMQVJFX0NPTVBMRVRJT04oQ29tcGxldGlvbik7CisgIERFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKENvbXBsZXRpb24pOwogICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICBDb21tYW5kLT5Db21wbGV0aW9uID0gJkNvbXBsZXRpb247CiAKQEAgLTMzMzEsNyArMzMzMSw3IEBACiAJCUNvbW1hbmQtPkRtYURpcmVjdGlvbiA9IFBDSV9ETUFfVE9ERVZJQ0U7CiAJCUNvbW1hbmQtPkNvbW1hbmRUeXBlID0gREFDOTYwX1dyaXRlQ29tbWFuZDsKIAl9Ci0JQ29tbWFuZC0+Q29tcGxldGlvbiA9IFJlcXVlc3QtPndhaXRpbmc7CisJQ29tbWFuZC0+Q29tcGxldGlvbiA9IFJlcXVlc3QtPmVuZF9pb19kYXRhOwogCUNvbW1hbmQtPkxvZ2ljYWxEcml2ZU51bWJlciA9IChsb25nKVJlcXVlc3QtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKIAlDb21tYW5kLT5CbG9ja051bWJlciA9IFJlcXVlc3QtPnNlY3RvcjsKIAlDb21tYW5kLT5CbG9ja0NvdW50ID0gUmVxdWVzdC0+bnJfc2VjdG9yczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmggYi9kcml2ZXJzL2Jsb2NrL0RBQzk2MC5oCmluZGV4IGE4MmYzN2YuLmY5MjE3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svREFDOTYwLmgKKysrIGIvZHJpdmVycy9ibG9jay9EQUM5NjAuaApAQCAtNzEsNyArNzEsNyBAQAogICBEZWZpbmUgYSBCb29sZWFuIGRhdGEgdHlwZS4KICovCiAKLXR5cGVkZWYgZW51bSB7IGZhbHNlLCB0cnVlIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGJvb2xlYW47Cit0eXBlZGVmIGJvb2wgYm9vbGVhbjsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9LY29uZmlnIGIvZHJpdmVycy9ibG9jay9LY29uZmlnCmluZGV4IGI1MzgyY2UuLjQyMmUzMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL2Jsb2NrL0tjb25maWcKQEAgLTIsNiArMiw4IEBACiAjIEJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCitpZiBCTE9DSworCiBtZW51ICJCbG9jayBkZXZpY2VzIgogCiBjb25maWcgQkxLX0RFVl9GRApAQCAtNDY4LDMgKzQ3MCw1IEBACiAJZGV2aWNlcyBsaWtlIHRoZSBDb3JhaWQgRXRoZXJEcml2ZSAoUikgU3RvcmFnZSBCbGFkZS4KIAogZW5kbWVudQorCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jY2lzcy5jIGIvZHJpdmVycy9ibG9jay9jY2lzcy5jCmluZGV4IDJjZDMzOTEuLjk5Zjg3ZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3MuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NjaXNzLmMKQEAgLTE0NCwxMyArMTQ0LDEzIEBACiBzdGF0aWMgaW50IGRlcmVnaXN0ZXJfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaywgZHJpdmVfaW5mb19zdHJ1Y3QgKmRydiwKIAkJCSAgIGludCBjbGVhcl9hbGwpOwogCi1zdGF0aWMgdm9pZCBjY2lzc19yZWFkX2NhcGFjaXR5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBSZWFkQ2FwZGF0YV9zdHJ1Y3QgKmJ1ZiwKLQkJCQlpbnQgd2l0aGlycSwgdW5zaWduZWQgaW50ICp0b3RhbF9zaXplLAotCQkJCXVuc2lnbmVkIGludCAqYmxvY2tfc2l6ZSk7Ci1zdGF0aWMgdm9pZCBjY2lzc19nZW9tZXRyeV9pbnF1aXJ5KGludCBjdGxyLCBpbnQgbG9ndm9sLCBpbnQgd2l0aGlycSwKLQkJCQkgICB1bnNpZ25lZCBpbnQgdG90YWxfc2l6ZSwKLQkJCQkgICB1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwKLQkJCQkgICBJbnF1aXJ5RGF0YV9zdHJ1Y3QgKmlucV9idWZmLAorc3RhdGljIHZvaWQgY2Npc3NfcmVhZF9jYXBhY2l0eShpbnQgY3RsciwgaW50IGxvZ3ZvbCwgaW50IHdpdGhpcnEsCisJCQlzZWN0b3JfdCAqdG90YWxfc2l6ZSwgdW5zaWduZWQgaW50ICpibG9ja19zaXplKTsKK3N0YXRpYyB2b2lkIGNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoaW50IGN0bHIsIGludCBsb2d2b2wsIGludCB3aXRoaXJxLAorCQkJc2VjdG9yX3QgKnRvdGFsX3NpemUsIHVuc2lnbmVkIGludCAqYmxvY2tfc2l6ZSk7CitzdGF0aWMgdm9pZCBjY2lzc19nZW9tZXRyeV9pbnF1aXJ5KGludCBjdGxyLCBpbnQgbG9ndm9sLAorCQkJaW50IHdpdGhpcnEsIHNlY3Rvcl90IHRvdGFsX3NpemUsCisJCQl1bnNpZ25lZCBpbnQgYmxvY2tfc2l6ZSwgSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiwKIAkJCQkgICBkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2KTsKIHN0YXRpYyB2b2lkIGNjaXNzX2dldGdlb21ldHJ5KGludCBjbnRsX251bSk7CiBzdGF0aWMgdm9pZCBfX2RldmluaXQgY2Npc3NfaW50ZXJydXB0X21vZGUoY3Rscl9pbmZvX3QgKiwgc3RydWN0IHBjaV9kZXYgKiwKQEAgLTg3OSw3ICs4NzksNyBAQAogCQkJY2hhciAqYnVmZiA9IE5VTEw7CiAJCQl1NjRiaXQgdGVtcDY0OwogCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQkJCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKwkJCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCiAJCQlpZiAoIWFyZykKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk5Nyw3ICs5OTcsNyBAQAogCQkJQllURSBzZ191c2VkID0gMDsKIAkJCWludCBzdGF0dXMgPSAwOwogCQkJaW50IGk7Ci0JCQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJCQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAkJCV9fdTMyIGxlZnQ7CiAJCQlfX3UzMiBzejsKIAkJCUJZVEUgX191c2VyICpkYXRhX3B0cjsKQEAgLTEyMjksNyArMTIyOSw2IEBACiAJCWludCBucl9zZWN0b3JzID0gYmlvX3NlY3RvcnMoYmlvKTsKIAogCQliaW8tPmJpX25leHQgPSBOVUxMOwotCQlibGtfZmluaXNoZWRfaW8obGVuKTsKIAkJYmlvX2VuZGlvKGJpbywgbnJfc2VjdG9ycyA8PCA5LCBzdGF0dXMgPyAwIDogLUVJTyk7CiAJCWJpbyA9IHhiaDsKIAl9CkBAIC0xMzI2LDEwICsxMzI1LDkgQEAKIHsKIAljdGxyX2luZm9fdCAqaCA9IGhiYVtjdGxyXTsKIAlzdHJ1Y3QgZ2VuZGlzayAqZGlzazsKLQlSZWFkQ2FwZGF0YV9zdHJ1Y3QgKnNpemVfYnVmZiA9IE5VTEw7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAJdW5zaWduZWQgaW50IGJsb2NrX3NpemU7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3NpemU7CisJc2VjdG9yX3QgdG90YWxfc2l6ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gMDsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMTM0OCwxNSArMTM0NiwyNSBAQAogCQlyZXR1cm47CiAKIAkvKiBHZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGRpc2sgYW5kIG1vZGlmeSB0aGUgZHJpdmVyIHN0cnVjdHVyZSAqLwotCXNpemVfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWlmIChzaXplX2J1ZmYgPT0gTlVMTCkKLQkJZ290byBtZW1fbXNnOwogCWlucV9idWZmID0ga21hbGxvYyhzaXplb2YoSW5xdWlyeURhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGlucV9idWZmID09IE5VTEwpCiAJCWdvdG8gbWVtX21zZzsKIAotCWNjaXNzX3JlYWRfY2FwYWNpdHkoY3RsciwgZHJ2X2luZGV4LCBzaXplX2J1ZmYsIDEsCisJY2Npc3NfcmVhZF9jYXBhY2l0eShjdGxyLCBkcnZfaW5kZXgsIDEsCiAJCQkgICAgJnRvdGFsX3NpemUsICZibG9ja19zaXplKTsKKworCS8qIHRvdGFsIHNpemUgPSBsYXN0IExCQSArIDEgKi8KKwkvKiBGRkZGRkZGRiArIDEgPSAwLCBjYW5ub3QgaGF2ZSBhIGxvZ2ljYWwgdm9sdW1lIG9mIHNpemUgMCAqLworCS8qIHNvIHdlIGFzc3VtZSB0aGlzIHZvbHVtZSB0aGlzIG11c3QgYmUgPjJUQiBpbiBzaXplICovCisJaWYgKHRvdGFsX3NpemUgPT0gKF9fdTMyKSAwKSB7CisJCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoY3RsciwgZHJ2X2luZGV4LCAxLAorCQkmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOworCQloLT5jY2lzc19yZWFkID0gQ0NJU1NfUkVBRF8xNjsKKwkJaC0+Y2Npc3Nfd3JpdGUgPSBDQ0lTU19XUklURV8xNjsKKwl9IGVsc2UgeworCQloLT5jY2lzc19yZWFkID0gQ0NJU1NfUkVBRF8xMDsKKwkJaC0+Y2Npc3Nfd3JpdGUgPSBDQ0lTU19XUklURV8xMDsKKwl9CiAJY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShjdGxyLCBkcnZfaW5kZXgsIDEsIHRvdGFsX3NpemUsIGJsb2NrX3NpemUsCiAJCQkgICAgICAgaW5xX2J1ZmYsICZoLT5kcnZbZHJ2X2luZGV4XSk7CiAKQEAgLTEzOTIsNyArMTQwMCw2IEBACiAJfQogCiAgICAgICBmcmVlcmV0OgotCWtmcmVlKHNpemVfYnVmZik7CiAJa2ZyZWUoaW5xX2J1ZmYpOwogCXJldHVybjsKICAgICAgIG1lbV9tc2c6CkBAIC0xNzE3LDYgKzE3MjQsMjIgQEAKIAkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CiAJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKIAkJCWJyZWFrOworCQljYXNlIENDSVNTX1JFQURfQ0FQQUNJVFlfMTY6CisJCQljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Wb2xJZCA9IGgtPmRydltsb2dfdW5pdF0uTHVuSUQ7CisJCQljLT5IZWFkZXIuTFVOLkxvZ0Rldi5Nb2RlID0gMTsKKwkJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTY7CisJCQljLT5SZXF1ZXN0LlR5cGUuQXR0cmlidXRlID0gQVRUUl9TSU1QTEU7CisJCQljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0gWEZFUl9SRUFEOworCQkJYy0+UmVxdWVzdC5UaW1lb3V0ID0gMDsKKwkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOworCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDEwOworCQkJYy0+UmVxdWVzdC5DREJbMTBdID0gKHNpemUgPj4gMjQpICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuQ0RCWzExXSA9IChzaXplID4+IDE2KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQlsxMl0gPSAoc2l6ZSA+PiA4KSAmIDB4RkY7CisJCQljLT5SZXF1ZXN0LkNEQlsxM10gPSBzaXplICYgMHhGRjsKKwkJCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CisJCQljLT5SZXF1ZXN0LkNEQlswXSA9IGNtZDsKKwkJCWJyZWFrOwogCQljYXNlIENDSVNTX0NBQ0hFX0ZMVVNIOgogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxMjsKIAkJCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKQEAgLTE3NTAsNiArMTc3Myw3IEBACiAJCQltZW1zZXQoJmMtPlJlcXVlc3QuQ0RCWzBdLCAwLCBzaXplb2YoYy0+UmVxdWVzdC5DREIpKTsKIAkJCWMtPlJlcXVlc3QuQ0RCWzBdID0gY21kOwkvKiByZXNldCAqLwogCQkJYy0+UmVxdWVzdC5DREJbMV0gPSAweDA0OwkvKiByZXNldCBhIExVTiAqLworCQkJYnJlYWs7CiAJCWNhc2UgMzoJLyogTm8tT3AgbWVzc2FnZSAqLwogCQkJYy0+UmVxdWVzdC5DREJMZW4gPSAxOwogCQkJYy0+UmVxdWVzdC5UeXBlLkF0dHJpYnV0ZSA9IEFUVFJfU0lNUExFOwpAQCAtMTc5Miw3ICsxODE2LDcgQEAKIAl1NjRiaXQgYnVmZl9kbWFfaGFuZGxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldHVybl9zdGF0dXM7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCiAJaWYgKChjID0gY21kX2FsbG9jKGgsIDApKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE4OTMsMTIgKzE5MTcsMTUgQEAKIH0KIAogc3RhdGljIHZvaWQgY2Npc3NfZ2VvbWV0cnlfaW5xdWlyeShpbnQgY3RsciwgaW50IGxvZ3ZvbCwKLQkJCQkgICBpbnQgd2l0aGlycSwgdW5zaWduZWQgaW50IHRvdGFsX3NpemUsCisJCQkJICAgaW50IHdpdGhpcnEsIHNlY3Rvcl90IHRvdGFsX3NpemUsCiAJCQkJICAgdW5zaWduZWQgaW50IGJsb2NrX3NpemUsCiAJCQkJICAgSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiwKIAkJCQkgICBkcml2ZV9pbmZvX3N0cnVjdCAqZHJ2KQogewogCWludCByZXR1cm5fY29kZTsKKwl1bnNpZ25lZCBsb25nIHQ7CisJdW5zaWduZWQgbG9uZyByZW07CisKIAltZW1zZXQoaW5xX2J1ZmYsIDAsIHNpemVvZihJbnF1aXJ5RGF0YV9zdHJ1Y3QpKTsKIAlpZiAod2l0aGlycSkKIAkJcmV0dXJuX2NvZGUgPSBzZW5kY21kX3dpdGhpcnEoQ0lTU19JTlFVSVJZLCBjdGxyLApAQCAtMTkxNywxMCArMTk0NCwxMCBAQAogCQkJZHJ2LT5ucl9ibG9ja3MgPSB0b3RhbF9zaXplOwogCQkJZHJ2LT5oZWFkcyA9IDI1NTsKIAkJCWRydi0+c2VjdG9ycyA9IDMyOwkvLyBTZWN0b3JzIHBlciB0cmFjawotCQkJZHJ2LT5jeWxpbmRlcnMgPSB0b3RhbF9zaXplIC8gMjU1IC8gMzI7CisJCQl0ID0gZHJ2LT5oZWFkcyAqIGRydi0+c2VjdG9yczsKKwkJCWRydi0+Y3lsaW5kZXJzID0gdG90YWxfc2l6ZTsKKwkJCXJlbSA9IGRvX2RpdihkcnYtPmN5bGluZGVycywgdCk7CiAJCX0gZWxzZSB7Ci0JCQl1bnNpZ25lZCBpbnQgdDsKLQogCQkJZHJ2LT5ibG9ja19zaXplID0gYmxvY2tfc2l6ZTsKIAkJCWRydi0+bnJfYmxvY2tzID0gdG90YWxfc2l6ZTsKIAkJCWRydi0+aGVhZHMgPSBpbnFfYnVmZi0+ZGF0YV9ieXRlWzZdOwpAQCAtMTkzMCw0MiArMTk1Nyw4NCBAQAogCQkJZHJ2LT5yYWlkX2xldmVsID0gaW5xX2J1ZmYtPmRhdGFfYnl0ZVs4XTsKIAkJCXQgPSBkcnYtPmhlYWRzICogZHJ2LT5zZWN0b3JzOwogCQkJaWYgKHQgPiAxKSB7Ci0JCQkJZHJ2LT5jeWxpbmRlcnMgPSB0b3RhbF9zaXplIC8gdDsKKwkJCQlkcnYtPmN5bGluZGVycyA9IHRvdGFsX3NpemU7CisJCQkJcmVtID0gZG9fZGl2KGRydi0+Y3lsaW5kZXJzLCB0KTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CQkvKiBHZXQgZ2VvbWV0cnkgZmFpbGVkICovCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiByZWFkaW5nIGdlb21ldHJ5IGZhaWxlZFxuIik7CiAJfQotCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGhlYWRzPSAlZCwgc2VjdG9ycz0gJWQsIGN5bGluZGVycz0gJWRcblxuIiwKKwlwcmludGsoS0VSTl9JTkZPICIgICAgICBoZWFkcz0lZCwgc2VjdG9ycz0lZCwgY3lsaW5kZXJzPSVkXG5cbiIsCiAJICAgICAgIGRydi0+aGVhZHMsIGRydi0+c2VjdG9ycywgZHJ2LT5jeWxpbmRlcnMpOwogfQogCiBzdGF0aWMgdm9pZAotY2Npc3NfcmVhZF9jYXBhY2l0eShpbnQgY3RsciwgaW50IGxvZ3ZvbCwgUmVhZENhcGRhdGFfc3RydWN0ICpidWYsCi0JCSAgICBpbnQgd2l0aGlycSwgdW5zaWduZWQgaW50ICp0b3RhbF9zaXplLAorY2Npc3NfcmVhZF9jYXBhY2l0eShpbnQgY3RsciwgaW50IGxvZ3ZvbCwgaW50IHdpdGhpcnEsIHNlY3Rvcl90ICp0b3RhbF9zaXplLAogCQkgICAgdW5zaWduZWQgaW50ICpibG9ja19zaXplKQogeworCVJlYWRDYXBkYXRhX3N0cnVjdCAqYnVmOwogCWludCByZXR1cm5fY29kZTsKLQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdCkpOwogCWlmICh3aXRoaXJxKQogCQlyZXR1cm5fY29kZSA9IHNlbmRjbWRfd2l0aGlycShDQ0lTU19SRUFEX0NBUEFDSVRZLAotCQkJCQkgICAgICBjdGxyLCBidWYsIHNpemVvZigqYnVmKSwgMSwKLQkJCQkJICAgICAgbG9ndm9sLCAwLCBUWVBFX0NNRCk7CisJCQkJY3RsciwgYnVmLCBzaXplb2YoUmVhZENhcGRhdGFfc3RydWN0KSwKKwkJCQkJMSwgbG9ndm9sLCAwLCBUWVBFX0NNRCk7CiAJZWxzZQogCQlyZXR1cm5fY29kZSA9IHNlbmRjbWQoQ0NJU1NfUkVBRF9DQVBBQ0lUWSwKLQkJCQkgICAgICBjdGxyLCBidWYsIHNpemVvZigqYnVmKSwgMSwgbG9ndm9sLCAwLAotCQkJCSAgICAgIE5VTEwsIFRZUEVfQ01EKTsKKwkJCQljdGxyLCBidWYsIHNpemVvZihSZWFkQ2FwZGF0YV9zdHJ1Y3QpLAorCQkJCQkxLCBsb2d2b2wsIDAsIE5VTEwsIFRZUEVfQ01EKTsKIAlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKLQkJKnRvdGFsX3NpemUgPQotCQkgICAgYmUzMl90b19jcHUoKigoX19iZTMyICopICYgYnVmLT50b3RhbF9zaXplWzBdKSkgKyAxOwotCQkqYmxvY2tfc2l6ZSA9IGJlMzJfdG9fY3B1KCooKF9fYmUzMiAqKSAmIGJ1Zi0+YmxvY2tfc2l6ZVswXSkpOworCQkqdG90YWxfc2l6ZSA9IGJlMzJfdG9fY3B1KCooX191MzIgKikgYnVmLT50b3RhbF9zaXplKSsxOworCQkqYmxvY2tfc2l6ZSA9IGJlMzJfdG9fY3B1KCooX191MzIgKikgYnVmLT5ibG9ja19zaXplKTsKIAl9IGVsc2UgewkJLyogcmVhZCBjYXBhY2l0eSBjb21tYW5kIGZhaWxlZCAqLwogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogcmVhZCBjYXBhY2l0eSBmYWlsZWRcbiIpOwogCQkqdG90YWxfc2l6ZSA9IDA7CiAJCSpibG9ja19zaXplID0gQkxPQ0tfU0laRTsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICAgICAgYmxvY2tzPSAldSBibG9ja19zaXplPSAlZFxuIiwKKwlpZiAoKnRvdGFsX3NpemUgIT0gKF9fdTMyKSAwKQorCQlwcmludGsoS0VSTl9JTkZPICIgICAgICBibG9ja3M9ICVsbGQgYmxvY2tfc2l6ZT0gJWRcbiIsCisJCSp0b3RhbF9zaXplLCAqYmxvY2tfc2l6ZSk7CisJa2ZyZWUoYnVmKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkCitjY2lzc19yZWFkX2NhcGFjaXR5XzE2KGludCBjdGxyLCBpbnQgbG9ndm9sLCBpbnQgd2l0aGlycSwgc2VjdG9yX3QgKnRvdGFsX3NpemUsIAkJCQl1bnNpZ25lZCBpbnQgKmJsb2NrX3NpemUpCit7CisJUmVhZENhcGRhdGFfc3RydWN0XzE2ICpidWY7CisJaW50IHJldHVybl9jb2RlOworCWJ1ZiA9IGttYWxsb2Moc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdF8xNiksIEdGUF9LRVJORUwpOworCWlmIChidWYgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisJbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdF8xNikpOworCWlmICh3aXRoaXJxKSB7CisJCXJldHVybl9jb2RlID0gc2VuZGNtZF93aXRoaXJxKENDSVNTX1JFQURfQ0FQQUNJVFlfMTYsCisJCQljdGxyLCBidWYsIHNpemVvZihSZWFkQ2FwZGF0YV9zdHJ1Y3RfMTYpLAorCQkJCTEsIGxvZ3ZvbCwgMCwgVFlQRV9DTUQpOworCX0KKwllbHNlIHsKKwkJcmV0dXJuX2NvZGUgPSBzZW5kY21kKENDSVNTX1JFQURfQ0FQQUNJVFlfMTYsCisJCQljdGxyLCBidWYsIHNpemVvZihSZWFkQ2FwZGF0YV9zdHJ1Y3RfMTYpLAorCQkJCTEsIGxvZ3ZvbCwgMCwgTlVMTCwgVFlQRV9DTUQpOworCX0KKwlpZiAocmV0dXJuX2NvZGUgPT0gSU9fT0spIHsKKwkJKnRvdGFsX3NpemUgPSBiZTY0X3RvX2NwdSgqKF9fdTY0ICopIGJ1Zi0+dG90YWxfc2l6ZSkrMTsKKwkJKmJsb2NrX3NpemUgPSBiZTMyX3RvX2NwdSgqKF9fdTMyICopIGJ1Zi0+YmxvY2tfc2l6ZSk7CisJfSBlbHNlIHsJCS8qIHJlYWQgY2FwYWNpdHkgY29tbWFuZCBmYWlsZWQgKi8KKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2Npc3M6IHJlYWQgY2FwYWNpdHkgZmFpbGVkXG4iKTsKKwkJKnRvdGFsX3NpemUgPSAwOworCQkqYmxvY2tfc2l6ZSA9IEJMT0NLX1NJWkU7CisJfQorCXByaW50ayhLRVJOX0lORk8gIiAgICAgIGJsb2Nrcz0gJWxsZCBibG9ja19zaXplPSAlZFxuIiwKIAkgICAgICAgKnRvdGFsX3NpemUsICpibG9ja19zaXplKTsKKwlrZnJlZShidWYpOwogCXJldHVybjsKIH0KIApAQCAtMTk3Niw4ICsyMDQ1LDcgQEAKIAlpbnQgbG9ndm9sOwogCWludCBGT1VORCA9IDA7CiAJdW5zaWduZWQgaW50IGJsb2NrX3NpemU7Ci0JdW5zaWduZWQgaW50IHRvdGFsX3NpemU7Ci0JUmVhZENhcGRhdGFfc3RydWN0ICpzaXplX2J1ZmYgPSBOVUxMOworCXNlY3Rvcl90IHRvdGFsX3NpemU7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZiA9IE5VTEw7CiAKIAlmb3IgKGxvZ3ZvbCA9IDA7IGxvZ3ZvbCA8IENJU1NfTUFYX0xVTjsgbG9ndm9sKyspIHsKQEAgLTE5OTAsMjcgKzIwNTgsMjQgQEAKIAlpZiAoIUZPVU5EKQogCQlyZXR1cm4gMTsKIAotCXNpemVfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKFJlYWRDYXBkYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwotCWlmIChzaXplX2J1ZmYgPT0gTlVMTCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7Ci0JCXJldHVybiAxOwotCX0KIAlpbnFfYnVmZiA9IGttYWxsb2Moc2l6ZW9mKElucXVpcnlEYXRhX3N0cnVjdCksIEdGUF9LRVJORUwpOwogCWlmIChpbnFfYnVmZiA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImNjaXNzOiBvdXQgb2YgbWVtb3J5XG4iKTsKLQkJa2ZyZWUoc2l6ZV9idWZmKTsKIAkJcmV0dXJuIDE7CiAJfQotCi0JY2Npc3NfcmVhZF9jYXBhY2l0eShoLT5jdGxyLCBsb2d2b2wsIHNpemVfYnVmZiwgMSwgJnRvdGFsX3NpemUsCi0JCQkgICAgJmJsb2NrX3NpemUpOworCWlmIChoLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTApIHsKKwkJY2Npc3NfcmVhZF9jYXBhY2l0eShoLT5jdGxyLCBsb2d2b2wsIDEsCisJCQkJCSZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisJfSBlbHNlIHsKKwkJY2Npc3NfcmVhZF9jYXBhY2l0eV8xNihoLT5jdGxyLCBsb2d2b2wsIDEsCisJCQkJCSZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisJfQogCWNjaXNzX2dlb21ldHJ5X2lucXVpcnkoaC0+Y3RsciwgbG9ndm9sLCAxLCB0b3RhbF9zaXplLCBibG9ja19zaXplLAogCQkJICAgICAgIGlucV9idWZmLCBkcnYpOwogCiAJYmxrX3F1ZXVlX2hhcmRzZWN0X3NpemUoZHJ2LT5xdWV1ZSwgZHJ2LT5ibG9ja19zaXplKTsKIAlzZXRfY2FwYWNpdHkoZGlzaywgZHJ2LT5ucl9ibG9ja3MpOwogCi0Ja2ZyZWUoc2l6ZV9idWZmKTsKIAlrZnJlZShpbnFfYnVmZik7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNDE5LDcgKzI0ODQsOCBAQAogewogCWN0bHJfaW5mb190ICpoID0gcS0+cXVldWVkYXRhOwogCUNvbW1hbmRMaXN0X3N0cnVjdCAqYzsKLQlpbnQgc3RhcnRfYmxrLCBzZWc7CisJc2VjdG9yX3Qgc3RhcnRfYmxrOworCWludCBzZWc7CiAJc3RydWN0IHJlcXVlc3QgKmNyZXE7CiAJdTY0Yml0IHRlbXA2NDsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgdG1wX3NnW01BWFNHRU5UUklFU107CkBAIC0yNDYzLDEwICsyNTI5LDEwIEBACiAJYy0+UmVxdWVzdC5UeXBlLlR5cGUgPSBUWVBFX0NNRDsJLy8gSXQgaXMgYSBjb21tYW5kLgogCWMtPlJlcXVlc3QuVHlwZS5BdHRyaWJ1dGUgPSBBVFRSX1NJTVBMRTsKIAljLT5SZXF1ZXN0LlR5cGUuRGlyZWN0aW9uID0KLQkgICAgKHJxX2RhdGFfZGlyKGNyZXEpID09IFJFQUQpID8gWEZFUl9SRUFEIDogWEZFUl9XUklURTsKKwkgICAgKHJxX2RhdGFfZGlyKGNyZXEpID09IFJFQUQpID8gaC0+Y2Npc3NfcmVhZCA6IGgtPmNjaXNzX3dyaXRlOwogCWMtPlJlcXVlc3QuVGltZW91dCA9IDA7CS8vIERvbid0IHRpbWUgb3V0CiAJYy0+UmVxdWVzdC5DREJbMF0gPQotCSAgICAocnFfZGF0YV9kaXIoY3JlcSkgPT0gUkVBRCkgPyBDQ0lTU19SRUFEIDogQ0NJU1NfV1JJVEU7CisJICAgIChycV9kYXRhX2RpcihjcmVxKSA9PSBSRUFEKSA/IGgtPmNjaXNzX3JlYWQgOiBoLT5jY2lzc193cml0ZTsKIAlzdGFydF9ibGsgPSBjcmVxLT5zZWN0b3I7CiAjaWZkZWYgQ0NJU1NfREVCVUcKIAlwcmludGsoS0VSTl9ERUJVRyAiY2lzczogc2VjdG9yID0lZCBucl9zZWN0b3JzPSVkXG4iLCAoaW50KWNyZXEtPnNlY3RvciwKQEAgLTI1MDAsMTUgKzI1NjYsMzMgQEAKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCiAJYy0+SGVhZGVyLlNHTGlzdCA9IGMtPkhlYWRlci5TR1RvdGFsID0gc2VnOwotCWMtPlJlcXVlc3QuQ0RCWzFdID0gMDsKLQljLT5SZXF1ZXN0LkNEQlsyXSA9IChzdGFydF9ibGsgPj4gMjQpICYgMHhmZjsJLy9NU0IKLQljLT5SZXF1ZXN0LkNEQlszXSA9IChzdGFydF9ibGsgPj4gMTYpICYgMHhmZjsKLQljLT5SZXF1ZXN0LkNEQls0XSA9IChzdGFydF9ibGsgPj4gOCkgJiAweGZmOwotCWMtPlJlcXVlc3QuQ0RCWzVdID0gc3RhcnRfYmxrICYgMHhmZjsKLQljLT5SZXF1ZXN0LkNEQls2XSA9IDA7CS8vIChzZWN0ID4+IDI0KSAmIDB4ZmY7IE1TQgotCWMtPlJlcXVlc3QuQ0RCWzddID0gKGNyZXEtPm5yX3NlY3RvcnMgPj4gOCkgJiAweGZmOwotCWMtPlJlcXVlc3QuQ0RCWzhdID0gY3JlcS0+bnJfc2VjdG9ycyAmIDB4ZmY7Ci0JYy0+UmVxdWVzdC5DREJbOV0gPSBjLT5SZXF1ZXN0LkNEQlsxMV0gPSBjLT5SZXF1ZXN0LkNEQlsxMl0gPSAwOworCWlmKGgtPmNjaXNzX3JlYWQgPT0gQ0NJU1NfUkVBRF8xMCkgeworCQljLT5SZXF1ZXN0LkNEQlsxXSA9IDA7CisJCWMtPlJlcXVlc3QuQ0RCWzJdID0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOwkvL01TQgorCQljLT5SZXF1ZXN0LkNEQlszXSA9IChzdGFydF9ibGsgPj4gMTYpICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbNF0gPSAoc3RhcnRfYmxrID4+IDgpICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbNV0gPSBzdGFydF9ibGsgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls2XSA9IDA7CS8vIChzZWN0ID4+IDI0KSAmIDB4ZmY7IE1TQgorCQljLT5SZXF1ZXN0LkNEQls3XSA9IChjcmVxLT5ucl9zZWN0b3JzID4+IDgpICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbOF0gPSBjcmVxLT5ucl9zZWN0b3JzICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbOV0gPSBjLT5SZXF1ZXN0LkNEQlsxMV0gPSBjLT5SZXF1ZXN0LkNEQlsxMl0gPSAwOworCX0gZWxzZSB7CisJCWMtPlJlcXVlc3QuQ0RCTGVuID0gMTY7CisJCWMtPlJlcXVlc3QuQ0RCWzFdPSAwOworCQljLT5SZXF1ZXN0LkNEQlsyXT0gKHN0YXJ0X2JsayA+PiA1NikgJiAweGZmOwkvL01TQgorCQljLT5SZXF1ZXN0LkNEQlszXT0gKHN0YXJ0X2JsayA+PiA0OCkgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls0XT0gKHN0YXJ0X2JsayA+PiA0MCkgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls1XT0gKHN0YXJ0X2JsayA+PiAzMikgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls2XT0gKHN0YXJ0X2JsayA+PiAyNCkgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls3XT0gKHN0YXJ0X2JsayA+PiAxNikgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls4XT0gKHN0YXJ0X2JsayA+PiAgOCkgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQls5XT0gc3RhcnRfYmxrICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbMTBdPSAoY3JlcS0+bnJfc2VjdG9ycyA+PiAgMjQpICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbMTFdPSAoY3JlcS0+bnJfc2VjdG9ycyA+PiAgMTYpICYgMHhmZjsKKwkJYy0+UmVxdWVzdC5DREJbMTJdPSAoY3JlcS0+bnJfc2VjdG9ycyA+PiAgOCkgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQlsxM109IGNyZXEtPm5yX3NlY3RvcnMgJiAweGZmOworCQljLT5SZXF1ZXN0LkNEQlsxNF0gPSBjLT5SZXF1ZXN0LkNEQlsxNV0gPSAwOworCX0KIAogCXNwaW5fbG9ja19pcnEocS0+cXVldWVfbG9jayk7CiAKQEAgLTI1MTgsOSArMjYwMiw5IEBACiAJCWgtPm1heFFzaW5jZWluaXQgPSBoLT5RZGVwdGg7CiAKIAlnb3RvIHF1ZXVlOwotICAgICAgZnVsbDoKK2Z1bGw6CiAJYmxrX3N0b3BfcXVldWUocSk7Ci0gICAgICBzdGFydGlvOgorc3RhcnRpbzoKIAkvKiBXZSB3aWxsIGFscmVhZHkgaGF2ZSB0aGUgZHJpdmVyIGxvY2sgaGVyZSBzbyBub3QgbmVlZAogCSAqIHRvIGxvY2sgaXQuCiAJICovCkBAIC0yOTQ4LDMxICszMDMyLDIzIEBACiBzdGF0aWMgdm9pZCBjY2lzc19nZXRnZW9tZXRyeShpbnQgY250bF9udW0pCiB7CiAJUmVwb3J0THVuRGF0YV9zdHJ1Y3QgKmxkX2J1ZmY7Ci0JUmVhZENhcGRhdGFfc3RydWN0ICpzaXplX2J1ZmY7CiAJSW5xdWlyeURhdGFfc3RydWN0ICppbnFfYnVmZjsKIAlpbnQgcmV0dXJuX2NvZGU7CiAJaW50IGk7CiAJaW50IGxpc3RsZW5ndGggPSAwOwogCV9fdTMyIGx1bmlkID0gMDsKIAlpbnQgYmxvY2tfc2l6ZTsKLQlpbnQgdG90YWxfc2l6ZTsKKwlzZWN0b3JfdCB0b3RhbF9zaXplOwogCiAJbGRfYnVmZiA9IGt6YWxsb2Moc2l6ZW9mKFJlcG9ydEx1bkRhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGxkX2J1ZmYgPT0gTlVMTCkgewogCQlwcmludGsoS0VSTl9FUlIgImNjaXNzOiBvdXQgb2YgbWVtb3J5XG4iKTsKIAkJcmV0dXJuOwogCX0KLQlzaXplX2J1ZmYgPSBrbWFsbG9jKHNpemVvZihSZWFkQ2FwZGF0YV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2l6ZV9idWZmID09IE5VTEwpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7Ci0JCWtmcmVlKGxkX2J1ZmYpOwotCQlyZXR1cm47Ci0JfQogCWlucV9idWZmID0ga21hbGxvYyhzaXplb2YoSW5xdWlyeURhdGFfc3RydWN0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGlucV9idWZmID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjY2lzczogb3V0IG9mIG1lbW9yeVxuIik7CiAJCWtmcmVlKGxkX2J1ZmYpOwotCQlrZnJlZShzaXplX2J1ZmYpOwogCQlyZXR1cm47CiAJfQogCS8qIEdldCB0aGUgZmlybXdhcmUgdmVyc2lvbiAqLwpAQCAtMzAyNyw3ICszMTAzLDYgQEAKICNlbmRpZgkJCQkvKiBDQ0lTU19ERUJVRyAqLwogCiAJaGJhW2NudGxfbnVtXS0+aGlnaGVzdF9sdW4gPSBoYmFbY250bF9udW1dLT5udW1fbHVucyAtIDE7Ci0vLyAgICAgIGZvcihpPTA7IGk8ICBoYmFbY250bF9udW1dLT5udW1fbHVuczsgaSsrKQogCWZvciAoaSA9IDA7IGkgPCBDSVNTX01BWF9MVU47IGkrKykgewogCQlpZiAoaSA8IGhiYVtjbnRsX251bV0tPm51bV9sdW5zKSB7CiAJCQlsdW5pZCA9ICgweGZmICYgKHVuc2lnbmVkIGludCkobGRfYnVmZi0+TFVOW2ldWzNdKSkKQEAgLTMwNDYsOCArMzEyMSwyNiBAQAogCQkJICAgICAgIGxkX2J1ZmYtPkxVTltpXVsyXSwgbGRfYnVmZi0+TFVOW2ldWzNdLAogCQkJICAgICAgIGhiYVtjbnRsX251bV0tPmRydltpXS5MdW5JRCk7CiAjZW5kaWYJCQkJLyogQ0NJU1NfREVCVUcgKi8KLQkJCWNjaXNzX3JlYWRfY2FwYWNpdHkoY250bF9udW0sIGksIHNpemVfYnVmZiwgMCwKKworCQkvKiB0ZXN0aW5nIHRvIHNlZSBpZiAxNi1ieXRlIENEQnMgYXJlIGFscmVhZHkgYmVpbmcgdXNlZCAqLworCQlpZihoYmFbY250bF9udW1dLT5jY2lzc19yZWFkID09IENDSVNTX1JFQURfMTYpIHsKKwkJCWNjaXNzX3JlYWRfY2FwYWNpdHlfMTYoY250bF9udW0sIGksIDAsCiAJCQkJCSAgICAmdG90YWxfc2l6ZSwgJmJsb2NrX3NpemUpOworCQkJZ290byBnZW9faW5xOworCQl9CisJCWNjaXNzX3JlYWRfY2FwYWNpdHkoY250bF9udW0sIGksIDAsICZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisKKwkJLyogdG90YWxfc2l6ZSA9IGxhc3QgTEJBICsgMSAqLworCQlpZih0b3RhbF9zaXplID09IChfX3UzMikgMCkgeworCQkJY2Npc3NfcmVhZF9jYXBhY2l0eV8xNihjbnRsX251bSwgaSwgMCwKKwkJCSZ0b3RhbF9zaXplLCAmYmxvY2tfc2l6ZSk7CisJCQloYmFbY250bF9udW1dLT5jY2lzc19yZWFkID0gQ0NJU1NfUkVBRF8xNjsKKwkJCWhiYVtjbnRsX251bV0tPmNjaXNzX3dyaXRlID0gQ0NJU1NfV1JJVEVfMTY7CisJCX0gZWxzZSB7CisJCQloYmFbY250bF9udW1dLT5jY2lzc19yZWFkID0gQ0NJU1NfUkVBRF8xMDsKKwkJCWhiYVtjbnRsX251bV0tPmNjaXNzX3dyaXRlID0gQ0NJU1NfV1JJVEVfMTA7CisJCX0KK2dlb19pbnE6CiAJCQljY2lzc19nZW9tZXRyeV9pbnF1aXJ5KGNudGxfbnVtLCBpLCAwLCB0b3RhbF9zaXplLAogCQkJCQkgICAgICAgYmxvY2tfc2l6ZSwgaW5xX2J1ZmYsCiAJCQkJCSAgICAgICAmaGJhW2NudGxfbnVtXS0+ZHJ2W2ldKTsKQEAgLTMwNTcsNyArMzE1MCw2IEBACiAJCX0KIAl9CiAJa2ZyZWUobGRfYnVmZik7Ci0Ja2ZyZWUoc2l6ZV9idWZmKTsKIAlrZnJlZShpbnFfYnVmZik7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3MuaCBiL2RyaXZlcnMvYmxvY2svY2Npc3MuaAppbmRleCA4NjhlMGQ4Li41NjIyMzVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL2NjaXNzLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzcy5oCkBAIC03Niw2ICs3Niw5IEBACiAJdW5zaWduZWQgaW50IGludHJbNF07CiAJdW5zaWduZWQgaW50IG1zaXhfdmVjdG9yOwogCXVuc2lnbmVkIGludCBtc2lfdmVjdG9yOworCUJZVEUJY2Npc3NfcmVhZDsKKwlCWVRFCWNjaXNzX3dyaXRlOworCUJZVEUJY2Npc3NfcmVhZF9jYXBhY2l0eTsKIAogCS8vIGluZm9ybWF0aW9uIGFib3V0IGVhY2ggbG9naWNhbCB2b2x1bWUKIAlkcml2ZV9pbmZvX3N0cnVjdCBkcnZbQ0lTU19NQVhfTFVOXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmggYi9kcml2ZXJzL2Jsb2NrL2NjaXNzX2NtZC5oCmluZGV4IDUzZmVhNTQuLjRhZjdjNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3NfY21kLmgKKysrIGIvZHJpdmVycy9ibG9jay9jY2lzc19jbWQuaApAQCAtMTE4LDExICsxMTgsMzQgQEAKICAgQllURSBibG9ja19zaXplWzRdOwkvLyBTaXplIG9mIGJsb2NrcyBpbiBieXRlcwogfSBSZWFkQ2FwZGF0YV9zdHJ1Y3Q7CiAKLS8vIDEyIGJ5dGUgY29tbWFuZHMgbm90IGltcGxlbWVudGVkIGluIGZpcm13YXJlIHlldC4gCi0vLyAjZGVmaW5lIENDSVNTX1JFQUQgCTB4YTgJLy8gUmVhZCgxMikKLS8vICNkZWZpbmUgQ0NJU1NfV1JJVEUJMHhhYQkvLyBXcml0ZSgxMikKLSAjZGVmaW5lIENDSVNTX1JFQUQgICAweDI4ICAgIC8vIFJlYWQoMTApCi0gI2RlZmluZSBDQ0lTU19XUklURSAgMHgyYSAgICAvLyBXcml0ZSgxMCkKKyNkZWZpbmUgQ0NJU1NfUkVBRF9DQVBBQ0lUWV8xNiAweDllIC8qIFJlYWQgQ2FwYWNpdHkgMTYgKi8KKworLyogc2VydmljZSBhY3Rpb24gdG8gZGlmZmVyZW50aWF0ZSBhIDE2IGJ5dGUgcmVhZCBjYXBhY2l0eSBmcm9tCisgICBvdGhlciBjb21tYW5kcyB0aGF0IHVzZSB0aGUgMHg5ZSBTQ1NJIG9wIGNvZGUgKi8KKworI2RlZmluZSBDQ0lTU19SRUFEX0NBUEFDSVRZXzE2X1NFUlZJQ0VfQUNUIDB4MTAKKwordHlwZWRlZiBzdHJ1Y3QgX1JlYWRDYXBkYXRhX3N0cnVjdF8xNgoreworCUJZVEUgdG90YWxfc2l6ZVs4XTsgICAvKiBUb3RhbCBzaXplIGluIGJsb2NrcyAqLworCUJZVEUgYmxvY2tfc2l6ZVs0XTsgICAvKiBTaXplIG9mIGJsb2NrcyBpbiBieXRlcyAqLworCUJZVEUgcHJvdF9lbjoxOyAgICAgICAvKiBwcm90ZWN0aW9uIGVuYWJsZSBiaXQgKi8KKwlCWVRFIHJ0b19lbjoxOyAgICAgICAgLyogcmVmZXJlbmNlIHRhZyBvd24gZW5hYmxlIGJpdCAqLworCUJZVEUgcmVzZXJ2ZWQ6NjsgICAgICAvKiByZXNlcnZlZCBiaXRzICovCisJQllURSByZXNlcnZlZDJbMThdOyAgIC8qIHJlc2VydmVkIGJ5dGVzIHBlciBzcGVjICovCit9IFJlYWRDYXBkYXRhX3N0cnVjdF8xNjsKKworLyogRGVmaW5lIHRoZSBzdXBwb3J0ZWQgcmVhZC93cml0ZSBjb21tYW5kcyBmb3IgY2Npc3MgYmFzZWQgY29udHJvbGxlcnMgKi8KKworI2RlZmluZSBDQ0lTU19SRUFEXzEwICAgMHgyOCAgICAvKiBSZWFkKDEwKSAgKi8KKyNkZWZpbmUgQ0NJU1NfV1JJVEVfMTAgIDB4MmEgICAgLyogV3JpdGUoMTApICovCisjZGVmaW5lIENDSVNTX1JFQURfMTYgICAweDg4ICAgIC8qIFJlYWQoMTYpICAqLworI2RlZmluZSBDQ0lTU19XUklURV8xNiAgMHg4YSAgICAvKiBXcml0ZSgxNikgKi8KKworLyogRGVmaW5lIHRoZSBDREIgbGVuZ3RocyBzdXBwb3J0ZWQgYnkgY2Npc3MgYmFzZWQgY29udHJvbGxlcnMgKi8KKworI2RlZmluZSBDREJfTEVOMTAJMTAKKyNkZWZpbmUgQ0RCX0xFTjE2CTE2CiAKIC8vIEJNSUMgY29tbWFuZHMgCiAjZGVmaW5lIEJNSUNfUkVBRCAweDI2CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2NjaXNzX3Njc2kuYyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCmluZGV4IDA1Zjc5ZDcuLmJiMTUwNTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCisrKyBiL2RyaXZlcnMvYmxvY2svY2Npc3Nfc2NzaS5jCkBAIC03NjYsNyArNzY2LDcgQEAKIAkJCWludCBkaXJlY3Rpb24pCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAKIAljcC0+Y21kX3R5cGUgPSBDTURfSU9DVExfUEVORDsJCS8vIHRyZWF0IHRoaXMgbGlrZSBhbiBpb2N0bCAKIAljcC0+c2NzaV9jbWQgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jIGIvZHJpdmVycy9ibG9jay9jcHFhcnJheS5jCmluZGV4IDc4MDgyZWQuLjRhYmMxOTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svY3BxYXJyYXkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKQEAgLTk4OSw3ICs5ODksNiBAQAogCQl4YmggPSBiaW8tPmJpX25leHQ7CiAJCWJpby0+YmlfbmV4dCA9IE5VTEw7CiAJCQotCQlibGtfZmluaXNoZWRfaW8obnJfc2VjdG9ycyk7CiAJCWJpb19lbmRpbyhiaW8sIG5yX3NlY3RvcnMgPDwgOSwgb2sgPyAwIDogLUVJTyk7CiAKIAkJYmlvID0geGJoOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYyBiL2RyaXZlcnMvYmxvY2svZmxvcHB5LmMKaW5kZXggYWQxZDcwNi4uNjI5YzU3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9mbG9wcHkuYworKysgYi9kcml2ZXJzL2Jsb2NrL2Zsb3BweS5jCkBAIC0yOTkxLDggKzI5OTEsOCBAQAogCWlmICh1c2FnZV9jb3VudCA9PSAwKSB7CiAJCXByaW50aygid2FybmluZzogdXNhZ2UgY291bnQ9MCwgY3VycmVudF9yZXE9JXAgZXhpdGluZ1xuIiwKIAkJICAgICAgIGN1cnJlbnRfcmVxKTsKLQkJcHJpbnRrKCJzZWN0PSVsZCBmbGFncz0lbHhcbiIsIChsb25nKWN1cnJlbnRfcmVxLT5zZWN0b3IsCi0JCSAgICAgICBjdXJyZW50X3JlcS0+ZmxhZ3MpOworCQlwcmludGsoInNlY3Q9JWxkIHR5cGU9JXggZmxhZ3M9JXhcbiIsIChsb25nKWN1cnJlbnRfcmVxLT5zZWN0b3IsCisJCSAgICAgICBjdXJyZW50X3JlcS0+Y21kX3R5cGUsIGN1cnJlbnRfcmVxLT5jbWRfZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWlmICh0ZXN0X2JpdCgwLCAmZmRjX2J1c3kpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL2xvb3AuYyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCmluZGV4IDdiM2I5NGQuLmQ2YmI4ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svbG9vcC5jCisrKyBiL2RyaXZlcnMvYmxvY2svbG9vcC5jCkBAIC02NiwxMiArNjYsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2xvb3AuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9zdXNwZW5kLmg+CiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4JCS8qIGZvciBpbnZhbGlkYXRlX2JkZXYoKSAqLwogI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CiAjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIApAQCAtNTIyLDE1ICs1MjQsMTIgQEAKIAkJZ290byBvdXQ7CiAJaWYgKHVubGlrZWx5KHJ3ID09IFdSSVRFICYmIChsby0+bG9fZmxhZ3MgJiBMT19GTEFHU19SRUFEX09OTFkpKSkKIAkJZ290byBvdXQ7Ci0JbG8tPmxvX3BlbmRpbmcrKzsKIAlsb29wX2FkZF9iaW8obG8sIG9sZF9iaW8pOworCXdha2VfdXAoJmxvLT5sb19ldmVudCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZsby0+bG9fbG9jayk7Ci0JY29tcGxldGUoJmxvLT5sb19iaF9kb25lKTsKIAlyZXR1cm4gMDsKIAogb3V0OgotCWlmIChsby0+bG9fcGVuZGluZyA9PSAwKQotCQljb21wbGV0ZSgmbG8tPmxvX2JoX2RvbmUpOwogCXNwaW5fdW5sb2NrX2lycSgmbG8tPmxvX2xvY2spOwogCWJpb19pb19lcnJvcihvbGRfYmlvLCBvbGRfYmlvLT5iaV9zaXplKTsKIAlyZXR1cm4gMDsKQEAgLTU3MCwxNCArNTY5LDE4IEBACiAgKiB0byBhdm9pZCBibG9ja2luZyBpbiBvdXIgbWFrZV9yZXF1ZXN0X2ZuLiBpdCBhbHNvIGRvZXMgbG9vcCBkZWNyeXB0aW5nCiAgKiBvbiByZWFkcyBmb3IgYmxvY2sgYmFja2VkIGxvb3AsIGFzIHRoYXQgaXMgdG9vIGhlYXZ5IHRvIGRvIGZyb20KICAqIGJfZW5kX2lvIGNvbnRleHQgd2hlcmUgaXJxcyBtYXkgYmUgZGlzYWJsZWQuCisgKgorICogTG9vcCBleHBsYW5hdGlvbjogIGxvb3BfY2xyX2ZkKCkgc2V0cyBsb19zdGF0ZSB0byBMb19ydW5kb3duIGJlZm9yZQorICogY2FsbGluZyBrdGhyZWFkX3N0b3AoKS4gIFRoZXJlZm9yZSBvbmNlIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSBpcworICogdHJ1ZSwgbWFrZV9yZXF1ZXN0IHdpbGwgbm90IHBsYWNlIGFueSBtb3JlIHJlcXVlc3RzLiAgVGhlcmVmb3JlCisgKiBvbmNlIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSBpcyB0cnVlIGFuZCBsb19iaW8gaXMgTlVMTCwgd2UgYXJlCisgKiBkb25lIHdpdGggdGhlIGxvb3AuCiAgKi8KIHN0YXRpYyBpbnQgbG9vcF90aHJlYWQodm9pZCAqZGF0YSkKIHsKIAlzdHJ1Y3QgbG9vcF9kZXZpY2UgKmxvID0gZGF0YTsKIAlzdHJ1Y3QgYmlvICpiaW87CiAKLQlkYWVtb25pemUoImxvb3AlZCIsIGxvLT5sb19udW1iZXIpOwotCiAJLyoKIAkgKiBsb29wIGNhbiBiZSB1c2VkIGluIGFuIGVuY3J5cHRlZCBkZXZpY2UsCiAJICogaGVuY2UsIGl0IG11c3RuJ3QgYmUgc3RvcHBlZCBhdCBhbGwKQEAgLTU4Nyw0NyArNTkwLDIxIEBACiAKIAlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIC0yMCk7CiAKLQlsby0+bG9fc3RhdGUgPSBMb19ib3VuZDsKLQlsby0+bG9fcGVuZGluZyA9IDE7CisJd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkgfHwgbG8tPmxvX2JpbykgewogCi0JLyoKLQkgKiBjb21wbGV0ZSBpdCwgd2UgYXJlIHJ1bm5pbmcKLQkgKi8KLQljb21wbGV0ZSgmbG8tPmxvX2RvbmUpOworCQl3YWl0X2V2ZW50X2ludGVycnVwdGlibGUobG8tPmxvX2V2ZW50LAorCQkJCWxvLT5sb19iaW8gfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKTsKIAotCWZvciAoOzspIHsKLQkJaW50IHBlbmRpbmc7Ci0KLQkJaWYgKHdhaXRfZm9yX2NvbXBsZXRpb25faW50ZXJydXB0aWJsZSgmbG8tPmxvX2JoX2RvbmUpKQorCQlpZiAoIWxvLT5sb19iaW8pCiAJCQljb250aW51ZTsKLQogCQlzcGluX2xvY2tfaXJxKCZsby0+bG9fbG9jayk7Ci0KLQkJLyoKLQkJICogY291bGQgYmUgY29tcGxldGVkIGJlY2F1c2Ugb2YgdGVhci1kb3duLCBub3QgcGVuZGluZyB3b3JrCi0JCSAqLwotCQlpZiAodW5saWtlbHkoIWxvLT5sb19wZW5kaW5nKSkgewotCQkJc3Bpbl91bmxvY2tfaXJxKCZsby0+bG9fbG9jayk7Ci0JCQlicmVhazsKLQkJfQotCiAJCWJpbyA9IGxvb3BfZ2V0X2Jpbyhsbyk7Ci0JCWxvLT5sb19wZW5kaW5nLS07Ci0JCXBlbmRpbmcgPSBsby0+bG9fcGVuZGluZzsKIAkJc3Bpbl91bmxvY2tfaXJxKCZsby0+bG9fbG9jayk7CiAKIAkJQlVHX09OKCFiaW8pOwogCQlsb29wX2hhbmRsZV9iaW8obG8sIGJpbyk7Ci0KLQkJLyoKLQkJICogdXBwZWQgYm90aCBmb3IgcGVuZGluZyB3b3JrIGFuZCB0ZWFyLWRvd24sIGxvX3BlbmRpbmcKLQkJICogd2lsbCBoaXQgemVybyB0aGVuCi0JCSAqLwotCQlpZiAodW5saWtlbHkoIXBlbmRpbmcpKQotCQkJYnJlYWs7CiAJfQogCi0JY29tcGxldGUoJmxvLT5sb19kb25lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjYyLDcgKzYzOSw4IEBACiAKIAltYXBwaW5nX3NldF9nZnBfbWFzayhvbGRfZmlsZS0+Zl9tYXBwaW5nLCBsby0+b2xkX2dmcF9tYXNrKTsKIAlsby0+bG9fYmFja2luZ19maWxlID0gZmlsZTsKLQlsby0+bG9fYmxvY2tzaXplID0gbWFwcGluZy0+aG9zdC0+aV9ibGtzaXplOworCWxvLT5sb19ibG9ja3NpemUgPSBTX0lTQkxLKG1hcHBpbmctPmhvc3QtPmlfbW9kZSkgPworCQltYXBwaW5nLT5ob3N0LT5pX2JkZXYtPmJkX2Jsb2NrX3NpemUgOiBQQUdFX1NJWkU7CiAJbG8tPm9sZF9nZnBfbWFzayA9IG1hcHBpbmdfZ2ZwX21hc2sobWFwcGluZyk7CiAJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbG8tPm9sZF9nZnBfbWFzayAmIH4oX19HRlBfSU98X19HRlBfRlMpKTsKIAljb21wbGV0ZSgmcC0+d2FpdCk7CkBAIC03OTQsNyArNzcyLDkgQEAKIAkJaWYgKCEobG9fZmxhZ3MgJiBMT19GTEFHU19VU0VfQU9QUykgJiYgIWZpbGUtPmZfb3AtPndyaXRlKQogCQkJbG9fZmxhZ3MgfD0gTE9fRkxBR1NfUkVBRF9PTkxZOwogCi0JCWxvX2Jsb2Nrc2l6ZSA9IGlub2RlLT5pX2Jsa3NpemU7CisJCWxvX2Jsb2Nrc2l6ZSA9IFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgPworCQkJaW5vZGUtPmlfYmRldi0+YmRfYmxvY2tfc2l6ZSA6IFBBR0VfU0laRTsKKwogCQllcnJvciA9IDA7CiAJfSBlbHNlIHsKIAkJZ290byBvdXRfcHV0ZjsKQEAgLTgzNywxMiArODE3LDI2IEBACiAKIAlzZXRfYmxvY2tzaXplKGJkZXYsIGxvX2Jsb2Nrc2l6ZSk7CiAKLQllcnJvciA9IGtlcm5lbF90aHJlYWQobG9vcF90aHJlYWQsIGxvLCBDTE9ORV9LRVJORUwpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gb3V0X3B1dGY7Ci0Jd2FpdF9mb3JfY29tcGxldGlvbigmbG8tPmxvX2RvbmUpOworCWxvLT5sb190aHJlYWQgPSBrdGhyZWFkX2NyZWF0ZShsb29wX3RocmVhZCwgbG8sICJsb29wJWQiLAorCQkJCQkJbG8tPmxvX251bWJlcik7CisJaWYgKElTX0VSUihsby0+bG9fdGhyZWFkKSkgeworCQllcnJvciA9IFBUUl9FUlIobG8tPmxvX3RocmVhZCk7CisJCWdvdG8gb3V0X2NscjsKKwl9CisJbG8tPmxvX3N0YXRlID0gTG9fYm91bmQ7CisJd2FrZV91cF9wcm9jZXNzKGxvLT5sb190aHJlYWQpOwogCXJldHVybiAwOwogCitvdXRfY2xyOgorCWxvLT5sb190aHJlYWQgPSBOVUxMOworCWxvLT5sb19kZXZpY2UgPSBOVUxMOworCWxvLT5sb19iYWNraW5nX2ZpbGUgPSBOVUxMOworCWxvLT5sb19mbGFncyA9IDA7CisJc2V0X2NhcGFjaXR5KGRpc2tzW2xvLT5sb19udW1iZXJdLCAwKTsKKwlpbnZhbGlkYXRlX2JkZXYoYmRldiwgMCk7CisJYmRfc2V0X3NpemUoYmRldiwgMCk7CisJbWFwcGluZ19zZXRfZ2ZwX21hc2sobWFwcGluZywgbG8tPm9sZF9nZnBfbWFzayk7CisJbG8tPmxvX3N0YXRlID0gTG9fdW5ib3VuZDsKICBvdXRfcHV0ZjoKIAlmcHV0KGZpbGUpOwogIG91dDoKQEAgLTkwNCwxMiArODk4LDkgQEAKIAogCXNwaW5fbG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAlsby0+bG9fc3RhdGUgPSBMb19ydW5kb3duOwotCWxvLT5sb19wZW5kaW5nLS07Ci0JaWYgKCFsby0+bG9fcGVuZGluZykKLQkJY29tcGxldGUoJmxvLT5sb19iaF9kb25lKTsKIAlzcGluX3VubG9ja19pcnEoJmxvLT5sb19sb2NrKTsKIAotCXdhaXRfZm9yX2NvbXBsZXRpb24oJmxvLT5sb19kb25lKTsKKwlrdGhyZWFkX3N0b3AobG8tPmxvX3RocmVhZCk7CiAKIAlsby0+bG9fYmFja2luZ19maWxlID0gTlVMTDsKIApAQCAtOTIyLDYgKzkxMyw3IEBACiAJbG8tPmxvX3NpemVsaW1pdCA9IDA7CiAJbG8tPmxvX2VuY3J5cHRfa2V5X3NpemUgPSAwOwogCWxvLT5sb19mbGFncyA9IDA7CisJbG8tPmxvX3RocmVhZCA9IE5VTEw7CiAJbWVtc2V0KGxvLT5sb19lbmNyeXB0X2tleSwgMCwgTE9fS0VZX1NJWkUpOwogCW1lbXNldChsby0+bG9fY3J5cHRfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKIAltZW1zZXQobG8tPmxvX2ZpbGVfbmFtZSwgMCwgTE9fTkFNRV9TSVpFKTsKQEAgLTExNzQsNiArMTE2NiwxNjIgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorc3RydWN0IGNvbXBhdF9sb29wX2luZm8geworCWNvbXBhdF9pbnRfdAlsb19udW1iZXI7ICAgICAgLyogaW9jdGwgci9vICovCisJY29tcGF0X2Rldl90CWxvX2RldmljZTsgICAgICAvKiBpb2N0bCByL28gKi8KKwljb21wYXRfdWxvbmdfdAlsb19pbm9kZTsgICAgICAgLyogaW9jdGwgci9vICovCisJY29tcGF0X2Rldl90CWxvX3JkZXZpY2U7ICAgICAvKiBpb2N0bCByL28gKi8KKwljb21wYXRfaW50X3QJbG9fb2Zmc2V0OworCWNvbXBhdF9pbnRfdAlsb19lbmNyeXB0X3R5cGU7CisJY29tcGF0X2ludF90CWxvX2VuY3J5cHRfa2V5X3NpemU7ICAgIC8qIGlvY3RsIHcvbyAqLworCWNvbXBhdF9pbnRfdAlsb19mbGFnczsgICAgICAgLyogaW9jdGwgci9vICovCisJY2hhcgkJbG9fbmFtZVtMT19OQU1FX1NJWkVdOworCXVuc2lnbmVkIGNoYXIJbG9fZW5jcnlwdF9rZXlbTE9fS0VZX1NJWkVdOyAvKiBpb2N0bCB3L28gKi8KKwljb21wYXRfdWxvbmdfdAlsb19pbml0WzJdOworCWNoYXIJCXJlc2VydmVkWzRdOworfTsKKworLyoKKyAqIFRyYW5zZmVyIDMyLWJpdCBjb21wYXRpYmlsaXR5IHN0cnVjdHVyZSBpbiB1c2Vyc3BhY2UgdG8gNjQtYml0IGxvb3AgaW5mbworICogLSBub2lubGluZWQgdG8gcmVkdWNlIHN0YWNrIHNwYWNlIHVzYWdlIGluIG1haW4gcGFydCBvZiBkcml2ZXIKKyAqLworc3RhdGljIG5vaW5saW5lIGludAorbG9vcF9pbmZvNjRfZnJvbV9jb21wYXQoY29uc3Qgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gKmFyZywKKwkJCXN0cnVjdCBsb29wX2luZm82NCAqaW5mbzY0KQoreworCXN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmluZm8sIGFyZywgc2l6ZW9mKGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwltZW1zZXQoaW5mbzY0LCAwLCBzaXplb2YoKmluZm82NCkpOworCWluZm82NC0+bG9fbnVtYmVyID0gaW5mby5sb19udW1iZXI7CisJaW5mbzY0LT5sb19kZXZpY2UgPSBpbmZvLmxvX2RldmljZTsKKwlpbmZvNjQtPmxvX2lub2RlID0gaW5mby5sb19pbm9kZTsKKwlpbmZvNjQtPmxvX3JkZXZpY2UgPSBpbmZvLmxvX3JkZXZpY2U7CisJaW5mbzY0LT5sb19vZmZzZXQgPSBpbmZvLmxvX29mZnNldDsKKwlpbmZvNjQtPmxvX3NpemVsaW1pdCA9IDA7CisJaW5mbzY0LT5sb19lbmNyeXB0X3R5cGUgPSBpbmZvLmxvX2VuY3J5cHRfdHlwZTsKKwlpbmZvNjQtPmxvX2VuY3J5cHRfa2V5X3NpemUgPSBpbmZvLmxvX2VuY3J5cHRfa2V5X3NpemU7CisJaW5mbzY0LT5sb19mbGFncyA9IGluZm8ubG9fZmxhZ3M7CisJaW5mbzY0LT5sb19pbml0WzBdID0gaW5mby5sb19pbml0WzBdOworCWluZm82NC0+bG9faW5pdFsxXSA9IGluZm8ubG9faW5pdFsxXTsKKwlpZiAoaW5mby5sb19lbmNyeXB0X3R5cGUgPT0gTE9fQ1JZUFRfQ1JZUFRPQVBJKQorCQltZW1jcHkoaW5mbzY0LT5sb19jcnlwdF9uYW1lLCBpbmZvLmxvX25hbWUsIExPX05BTUVfU0laRSk7CisJZWxzZQorCQltZW1jcHkoaW5mbzY0LT5sb19maWxlX25hbWUsIGluZm8ubG9fbmFtZSwgTE9fTkFNRV9TSVpFKTsKKwltZW1jcHkoaW5mbzY0LT5sb19lbmNyeXB0X2tleSwgaW5mby5sb19lbmNyeXB0X2tleSwgTE9fS0VZX1NJWkUpOworCXJldHVybiAwOworfQorCisvKgorICogVHJhbnNmZXIgNjQtYml0IGxvb3AgaW5mbyB0byAzMi1iaXQgY29tcGF0aWJpbGl0eSBzdHJ1Y3R1cmUgaW4gdXNlcnNwYWNlCisgKiAtIG5vaW5saW5lZCB0byByZWR1Y2Ugc3RhY2sgc3BhY2UgdXNhZ2UgaW4gbWFpbiBwYXJ0IG9mIGRyaXZlcgorICovCitzdGF0aWMgbm9pbmxpbmUgaW50Citsb29wX2luZm82NF90b19jb21wYXQoY29uc3Qgc3RydWN0IGxvb3BfaW5mbzY0ICppbmZvNjQsCisJCSAgICAgIHN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIF9fdXNlciAqYXJnKQoreworCXN0cnVjdCBjb21wYXRfbG9vcF9pbmZvIGluZm87CisKKwltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CisJaW5mby5sb19udW1iZXIgPSBpbmZvNjQtPmxvX251bWJlcjsKKwlpbmZvLmxvX2RldmljZSA9IGluZm82NC0+bG9fZGV2aWNlOworCWluZm8ubG9faW5vZGUgPSBpbmZvNjQtPmxvX2lub2RlOworCWluZm8ubG9fcmRldmljZSA9IGluZm82NC0+bG9fcmRldmljZTsKKwlpbmZvLmxvX29mZnNldCA9IGluZm82NC0+bG9fb2Zmc2V0OworCWluZm8ubG9fZW5jcnlwdF90eXBlID0gaW5mbzY0LT5sb19lbmNyeXB0X3R5cGU7CisJaW5mby5sb19lbmNyeXB0X2tleV9zaXplID0gaW5mbzY0LT5sb19lbmNyeXB0X2tleV9zaXplOworCWluZm8ubG9fZmxhZ3MgPSBpbmZvNjQtPmxvX2ZsYWdzOworCWluZm8ubG9faW5pdFswXSA9IGluZm82NC0+bG9faW5pdFswXTsKKwlpbmZvLmxvX2luaXRbMV0gPSBpbmZvNjQtPmxvX2luaXRbMV07CisJaWYgKGluZm8ubG9fZW5jcnlwdF90eXBlID09IExPX0NSWVBUX0NSWVBUT0FQSSkKKwkJbWVtY3B5KGluZm8ubG9fbmFtZSwgaW5mbzY0LT5sb19jcnlwdF9uYW1lLCBMT19OQU1FX1NJWkUpOworCWVsc2UKKwkJbWVtY3B5KGluZm8ubG9fbmFtZSwgaW5mbzY0LT5sb19maWxlX25hbWUsIExPX05BTUVfU0laRSk7CisJbWVtY3B5KGluZm8ubG9fZW5jcnlwdF9rZXksIGluZm82NC0+bG9fZW5jcnlwdF9rZXksIExPX0tFWV9TSVpFKTsKKworCS8qIGVycm9yIGluIGNhc2UgdmFsdWVzIHdlcmUgdHJ1bmNhdGVkICovCisJaWYgKGluZm8ubG9fZGV2aWNlICE9IGluZm82NC0+bG9fZGV2aWNlIHx8CisJICAgIGluZm8ubG9fcmRldmljZSAhPSBpbmZvNjQtPmxvX3JkZXZpY2UgfHwKKwkgICAgaW5mby5sb19pbm9kZSAhPSBpbmZvNjQtPmxvX2lub2RlIHx8CisJICAgIGluZm8ubG9fb2Zmc2V0ICE9IGluZm82NC0+bG9fb2Zmc2V0IHx8CisJICAgIGluZm8ubG9faW5pdFswXSAhPSBpbmZvNjQtPmxvX2luaXRbMF0gfHwKKwkgICAgaW5mby5sb19pbml0WzFdICE9IGluZm82NC0+bG9faW5pdFsxXSkKKwkJcmV0dXJuIC1FT1ZFUkZMT1c7CisKKwlpZiAoY29weV90b191c2VyKGFyZywgJmluZm8sIHNpemVvZihpbmZvKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50Citsb29wX3NldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0OworCWludCByZXQ7CisKKwlyZXQgPSBsb29wX2luZm82NF9mcm9tX2NvbXBhdChhcmcsICZpbmZvNjQpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldHVybiBsb29wX3NldF9zdGF0dXMobG8sICZpbmZvNjQpOworfQorCitzdGF0aWMgaW50Citsb29wX2dldF9zdGF0dXNfY29tcGF0KHN0cnVjdCBsb29wX2RldmljZSAqbG8sCisJCSAgICAgICBzdHJ1Y3QgY29tcGF0X2xvb3BfaW5mbyBfX3VzZXIgKmFyZykKK3sKKwlzdHJ1Y3QgbG9vcF9pbmZvNjQgaW5mbzY0OworCWludCBlcnIgPSAwOworCisJaWYgKCFhcmcpCisJCWVyciA9IC1FSU5WQUw7CisJaWYgKCFlcnIpCisJCWVyciA9IGxvb3BfZ2V0X3N0YXR1cyhsbywgJmluZm82NCk7CisJaWYgKCFlcnIpCisJCWVyciA9IGxvb3BfaW5mbzY0X3RvX2NvbXBhdCgmaW5mbzY0LCBhcmcpOworCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBsb25nIGxvX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CisJaW50IGVycjsKKworCWxvY2tfa2VybmVsKCk7CisJc3dpdGNoKGNtZCkgeworCWNhc2UgTE9PUF9TRVRfU1RBVFVTOgorCQltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkJZXJyID0gbG9vcF9zZXRfc3RhdHVzX2NvbXBhdCgKKwkJCWxvLCAoY29uc3Qgc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICopIGFyZyk7CisJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJCWJyZWFrOworCWNhc2UgTE9PUF9HRVRfU1RBVFVTOgorCQltdXRleF9sb2NrKCZsby0+bG9fY3RsX211dGV4KTsKKwkJZXJyID0gbG9vcF9nZXRfc3RhdHVzX2NvbXBhdCgKKwkJCWxvLCAoc3RydWN0IGNvbXBhdF9sb29wX2luZm8gX191c2VyICopIGFyZyk7CisJCW11dGV4X3VubG9jaygmbG8tPmxvX2N0bF9tdXRleCk7CisJCWJyZWFrOworCWNhc2UgTE9PUF9DTFJfRkQ6CisJY2FzZSBMT09QX0dFVF9TVEFUVVM2NDoKKwljYXNlIExPT1BfU0VUX1NUQVRVUzY0OgorCQlhcmcgPSAodW5zaWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpOworCWNhc2UgTE9PUF9TRVRfRkQ6CisJY2FzZSBMT09QX0NIQU5HRV9GRDoKKwkJZXJyID0gbG9faW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVOT0lPQ1RMQ01EOworCQlicmVhazsKKwl9CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiBlcnI7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBsb19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewogCXN0cnVjdCBsb29wX2RldmljZSAqbG8gPSBpbm9kZS0+aV9iZGV2LT5iZF9kaXNrLT5wcml2YXRlX2RhdGE7CkBAIC0xMjAxLDYgKzEzNDksOSBAQAogCS5vcGVuID0JCWxvX29wZW4sCiAJLnJlbGVhc2UgPQlsb19yZWxlYXNlLAogCS5pb2N0bCA9CWxvX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0JbG9fY29tcGF0X2lvY3RsLAorI2VuZGlmCiB9OwogCiAvKgpAQCAtMTI4NCw5ICsxNDM1LDkgQEAKIAkJaWYgKCFsby0+bG9fcXVldWUpCiAJCQlnb3RvIG91dF9tZW00OwogCQltdXRleF9pbml0KCZsby0+bG9fY3RsX211dGV4KTsKLQkJaW5pdF9jb21wbGV0aW9uKCZsby0+bG9fZG9uZSk7Ci0JCWluaXRfY29tcGxldGlvbigmbG8tPmxvX2JoX2RvbmUpOwogCQlsby0+bG9fbnVtYmVyID0gaTsKKwkJbG8tPmxvX3RocmVhZCA9IE5VTEw7CisJCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmxvLT5sb19ldmVudCk7CiAJCXNwaW5fbG9ja19pbml0KCZsby0+bG9fbG9jayk7CiAJCWRpc2stPm1ham9yID0gTE9PUF9NQUpPUjsKIAkJZGlzay0+Zmlyc3RfbWlub3IgPSBpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9uYmQuYyBiL2RyaXZlcnMvYmxvY2svbmJkLmMKaW5kZXggYmRiYWRlOS4uOWQxMDM1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ibG9jay9uYmQuYworKysgYi9kcml2ZXJzL2Jsb2NrL25iZC5jCkBAIC00MDcsMTAgKzQwNywxMCBAQAogCQlzdHJ1Y3QgbmJkX2RldmljZSAqbG87CiAKIAkJYmxrZGV2X2RlcXVldWVfcmVxdWVzdChyZXEpOwotCQlkcHJpbnRrKERCR19CTEtERVYsICIlczogcmVxdWVzdCAlcDogZGVxdWV1ZWQgKGZsYWdzPSVseClcbiIsCi0JCQkJcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIHJlcSwgcmVxLT5mbGFncyk7CisJCWRwcmludGsoREJHX0JMS0RFViwgIiVzOiByZXF1ZXN0ICVwOiBkZXF1ZXVlZCAoZmxhZ3M9JXgpXG4iLAorCQkJCXJlcS0+cnFfZGlzay0+ZGlza19uYW1lLCByZXEsIHJlcS0+Y21kX3R5cGUpOwogCi0JCWlmICghKHJlcS0+ZmxhZ3MgJiBSRVFfQ01EKSkKKwkJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKQogCQkJZ290byBlcnJvcl9vdXQ7CiAKIAkJbG8gPSByZXEtPnJxX2Rpc2stPnByaXZhdGVfZGF0YTsKQEAgLTQ4OSw3ICs0ODksNyBAQAogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBOQkRfRElTQ09OTkVDVDoKIAkgICAgICAgIHByaW50ayhLRVJOX0lORk8gIiVzOiBOQkRfRElTQ09OTkVDVFxuIiwgbG8tPmRpc2stPmRpc2tfbmFtZSk7Ci0JCXNyZXEuZmxhZ3MgPSBSRVFfU1BFQ0lBTDsKKwkJc3JlcS5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJCW5iZF9jbWQoJnNyZXEpID0gTkJEX0NNRF9ESVNDOwogCQkvKgogCQkgKiBTZXQgdGhlc2UgdG8gc2FuZSB2YWx1ZXMgaW4gY2FzZSBzZXJ2ZXIgaW1wbGVtZW50YXRpb24KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMgYi9kcml2ZXJzL2Jsb2NrL3BhcmlkZS9wZC5jCmluZGV4IDI0MDM3MjEuLjQwYTExZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGFyaWRlL3BkLmMKKysrIGIvZHJpdmVycy9ibG9jay9wYXJpZGUvcGQuYwpAQCAtNDM3LDcgKzQzNyw3IEBACiAKIHN0YXRpYyBlbnVtIGFjdGlvbiBkb19wZF9pb19zdGFydCh2b2lkKQogewotCWlmIChwZF9yZXEtPmZsYWdzICYgUkVRX1NQRUNJQUwpIHsKKwlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChwZF9yZXEpKSB7CiAJCXBoYXNlID0gcGRfc3BlY2lhbDsKIAkJcmV0dXJuIHBkX3NwZWNpYWwoKTsKIAl9CkBAIC03MTMsMjAgKzcxMywxOCBAQAogc3RhdGljIGludCBwZF9zcGVjaWFsX2NvbW1hbmQoc3RydWN0IHBkX3VuaXQgKmRpc2ssCiAJCSAgICAgIGVudW0gYWN0aW9uICgqZnVuYykoc3RydWN0IHBkX3VuaXQgKmRpc2spKQogewotCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAlzdHJ1Y3QgcmVxdWVzdCBycTsKIAlpbnQgZXJyID0gMDsKIAogCW1lbXNldCgmcnEsIDAsIHNpemVvZihycSkpOwogCXJxLmVycm9ycyA9IDA7Ci0JcnEucnFfc3RhdHVzID0gUlFfQUNUSVZFOwogCXJxLnJxX2Rpc2sgPSBkaXNrLT5nZDsKIAlycS5yZWZfY291bnQgPSAxOwotCXJxLndhaXRpbmcgPSAmd2FpdDsKKwlycS5lbmRfaW9fZGF0YSA9ICZ3YWl0OwogCXJxLmVuZF9pbyA9IGJsa19lbmRfc3luY19ycTsKIAlibGtfaW5zZXJ0X3JlcXVlc3QoZGlzay0+Z2QtPnF1ZXVlLCAmcnEsIDAsIGZ1bmMpOwogCXdhaXRfZm9yX2NvbXBsZXRpb24oJndhaXQpOwotCXJxLndhaXRpbmcgPSBOVUxMOwogCWlmIChycS5lcnJvcnMpCiAJCWVyciA9IC1FSU87CiAJYmxrX3B1dF9yZXF1ZXN0KCZycSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BrdGNkdmQuYyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCmluZGV4IDQ1MWI5OTYuLmE2YjJhYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCisrKyBiL2RyaXZlcnMvYmxvY2svcGt0Y2R2ZC5jCkBAIC0zNDgsNyArMzQ4LDcgQEAKIAljaGFyIHNlbnNlW1NDU0lfU0VOU0VfQlVGRkVSU0laRV07CiAJcmVxdWVzdF9xdWV1ZV90ICpxOwogCXN0cnVjdCByZXF1ZXN0ICpycTsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAJaW50IGVyciA9IDA7CiAKIAlxID0gYmRldl9nZXRfcXVldWUocGQtPmJkZXYpOwpAQCAtMzY1LDE3ICszNjUsMTcgQEAKIAlycS0+c2Vuc2UgPSBzZW5zZTsKIAltZW1zZXQoc2Vuc2UsIDAsIHNpemVvZihzZW5zZSkpOwogCXJxLT5zZW5zZV9sZW4gPSAwOwotCXJxLT5mbGFncyB8PSBSRVFfQkxPQ0tfUEMgfCBSRVFfSEFSREJBUlJJRVI7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfSEFSREJBUlJJRVI7CiAJaWYgKGNnYy0+cXVpZXQpCi0JCXJxLT5mbGFncyB8PSBSRVFfUVVJRVQ7CisJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwogCW1lbWNweShycS0+Y21kLCBjZ2MtPmNtZCwgQ0RST01fUEFDS0VUX1NJWkUpOwogCWlmIChzaXplb2YocnEtPmNtZCkgPiBDRFJPTV9QQUNLRVRfU0laRSkKIAkJbWVtc2V0KHJxLT5jbWQgKyBDRFJPTV9QQUNLRVRfU0laRSwgMCwgc2l6ZW9mKHJxLT5jbWQpIC0gQ0RST01fUEFDS0VUX1NJWkUpOwogCXJxLT5jbWRfbGVuID0gQ09NTUFORF9TSVpFKHJxLT5jbWRbMF0pOwogCiAJcnEtPnJlZl9jb3VudCsrOwotCXJxLT5mbGFncyB8PSBSRVFfTk9NRVJHRTsKLQlycS0+d2FpdGluZyA9ICZ3YWl0OworCXJxLT5lbmRfaW9fZGF0YSA9ICZ3YWl0OwogCXJxLT5lbmRfaW8gPSBibGtfZW5kX3N5bmNfcnE7CiAJZWx2X2FkZF9yZXF1ZXN0KHEsIHJxLCBFTEVWQVRPUl9JTlNFUlRfQkFDSywgMSk7CiAJZ2VuZXJpY191bnBsdWdfZGV2aWNlKHEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibG9jay9zd2ltMy5jIGIvZHJpdmVycy9ibG9jay9zd2ltMy5jCmluZGV4IGNjNDJlNzYuLmYyMzA1ZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbTMuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW0zLmMKQEAgLTMxOSw4ICszMTksOCBAQAogCQlwcmludGsoImRvX2ZkX3JlcTogZGV2PSVzIGNtZD0lZCBzZWM9JWxkIG5yX3NlYz0lbGQgYnVmPSVwXG4iLAogCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIHJlcS0+Y21kLAogCQkgICAgICAgKGxvbmcpcmVxLT5zZWN0b3IsIHJlcS0+bnJfc2VjdG9ycywgcmVxLT5idWZmZXIpOwotCQlwcmludGsoIiAgICAgICAgICAgcnFfc3RhdHVzPSVkIGVycm9ycz0lZCBjdXJyZW50X25yX3NlY3RvcnM9JWxkXG4iLAotCQkgICAgICAgcmVxLT5ycV9zdGF0dXMsIHJlcS0+ZXJyb3JzLCByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CisJCXByaW50aygiICAgICAgICAgICBlcnJvcnM9JWQgY3VycmVudF9ucl9zZWN0b3JzPSVsZFxuIiwKKwkJICAgICAgIHJlcS0+ZXJyb3JzLCByZXEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CiAjZW5kaWYKIAogCQlpZiAocmVxLT5zZWN0b3IgPCAwIHx8IHJlcS0+c2VjdG9yID49IGZzLT50b3RhbF9zZWNzKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3N3aW1faW9wLmMgYi9kcml2ZXJzL2Jsb2NrL3N3aW1faW9wLmMKaW5kZXggODllM2MyZi4uZGZkYTc5NmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svc3dpbV9pb3AuYworKysgYi9kcml2ZXJzL2Jsb2NrL3N3aW1faW9wLmMKQEAgLTUyOSw4ICs1MjksOCBAQAogCQlwcmludGsoImRvX2ZkX3JlcTogZGV2PSVzIGNtZD0lZCBzZWM9JWxkIG5yX3NlYz0lbGQgYnVmPSVwXG4iLAogCQkgICAgICAgQ1VSUkVOVC0+cnFfZGlzay0+ZGlza19uYW1lLCBDVVJSRU5ULT5jbWQsCiAJCSAgICAgICBDVVJSRU5ULT5zZWN0b3IsIENVUlJFTlQtPm5yX3NlY3RvcnMsIENVUlJFTlQtPmJ1ZmZlcik7Ci0JCXByaW50aygiICAgICAgICAgICBycV9zdGF0dXM9JWQgZXJyb3JzPSVkIGN1cnJlbnRfbnJfc2VjdG9ycz0lbGRcbiIsCi0JCSAgICAgICBDVVJSRU5ULT5ycV9zdGF0dXMsIENVUlJFTlQtPmVycm9ycywgQ1VSUkVOVC0+Y3VycmVudF9ucl9zZWN0b3JzKTsKKwkJcHJpbnRrKCIgICAgICAgICAgIGVycm9ycz0lZCBjdXJyZW50X25yX3NlY3RvcnM9JWxkXG4iLAorCQkgICAgICBDVVJSRU5ULT5lcnJvcnMsIENVUlJFTlQtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CiAjZW5kaWYKIAogCQlpZiAoQ1VSUkVOVC0+c2VjdG9yIDwgMCB8fCBDVVJSRU5ULT5zZWN0b3IgPj0gZnMtPnRvdGFsX3NlY3MpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2svdWIuYyBiL2RyaXZlcnMvYmxvY2svdWIuYwppbmRleCBkNjJiNDlmLi40NWE4ZjQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3ViLmMKKysrIGIvZHJpdmVycy9ibG9jay91Yi5jCkBAIC0zNTgsNyArMzU4LDcgQEAKIHN0YXRpYyB2b2lkIHViX2NtZF9idWlsZF9wYWNrZXQoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKICAgICBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCwgc3RydWN0IHViX3JlcXVlc3QgKnVycSk7CiBzdGF0aWMgdm9pZCB1Yl9yd19jbWRfZG9uZShzdHJ1Y3QgdWJfZGV2ICpzYywgc3RydWN0IHViX3Njc2lfY21kICpjbWQpOwotc3RhdGljIHZvaWQgdWJfZW5kX3JxKHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IHVwdG9kYXRlKTsKK3N0YXRpYyB2b2lkIHViX2VuZF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBzdGF0dXMpOwogc3RhdGljIGludCB1Yl9yd19jbWRfcmV0cnkoc3RydWN0IHViX2RldiAqc2MsIHN0cnVjdCB1Yl9sdW4gKmx1biwKICAgICBzdHJ1Y3QgdWJfcmVxdWVzdCAqdXJxLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCk7CiBzdGF0aWMgaW50IHViX3N1Ym1pdF9zY3NpKHN0cnVjdCB1Yl9kZXYgKnNjLCBzdHJ1Y3QgdWJfc2NzaV9jbWQgKmNtZCk7CkBAIC02MzksOSArNjM5LDE1IEBACiAJc3RydWN0IHViX3JlcXVlc3QgKnVycTsKIAlpbnQgbl9lbGVtOwogCi0JaWYgKGF0b21pY19yZWFkKCZzYy0+cG9pc29uKSB8fCBsdW4tPmNoYW5nZWQpIHsKKwlpZiAoYXRvbWljX3JlYWQoJnNjLT5wb2lzb24pKSB7CiAJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOwotCQl1Yl9lbmRfcnEocnEsIDApOworCQl1Yl9lbmRfcnEocnEsIERJRF9OT19DT05ORUNUIDw8IDE2KTsKKwkJcmV0dXJuIDA7CisJfQorCisJaWYgKGx1bi0+Y2hhbmdlZCAmJiAhYmxrX3BjX3JlcXVlc3QocnEpKSB7CisJCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocnEpOworCQl1Yl9lbmRfcnEocnEsIFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNjkzLDcgKzY5OSw3IEBACiAKIGRyb3A6CiAJdWJfcHV0X2NtZChsdW4sIGNtZCk7Ci0JdWJfZW5kX3JxKHJxLCAwKTsKKwl1Yl9lbmRfcnEocnEsIERJRF9FUlJPUiA8PCAxNik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc2MSw0NyArNzY3LDUzIEBACiAJc3RydWN0IHViX2x1biAqbHVuID0gY21kLT5sdW47CiAJc3RydWN0IHViX3JlcXVlc3QgKnVycSA9IGNtZC0+YmFjazsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7Ci0JaW50IHVwdG9kYXRlOworCXVuc2lnbmVkIGludCBzY3NpX3N0YXR1czsKIAogCXJxID0gdXJxLT5ycTsKIAogCWlmIChjbWQtPmVycm9yID09IDApIHsKLQkJdXB0b2RhdGUgPSAxOwotCiAJCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKIAkJCWlmIChjbWQtPmFjdF9sZW4gPj0gcnEtPmRhdGFfbGVuKQogCQkJCXJxLT5kYXRhX2xlbiA9IDA7CiAJCQllbHNlCiAJCQkJcnEtPmRhdGFfbGVuIC09IGNtZC0+YWN0X2xlbjsKIAkJfQorCQlzY3NpX3N0YXR1cyA9IDA7CiAJfSBlbHNlIHsKLQkJdXB0b2RhdGUgPSAwOwotCiAJCWlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKIAkJCS8qIFVCX1NFTlNFX1NJWkUgaXMgc21hbGxlciB0aGFuIFNDU0lfU0VOU0VfQlVGRkVSU0laRSAqLwogCQkJbWVtY3B5KHJxLT5zZW5zZSwgc2MtPnRvcF9zZW5zZSwgVUJfU0VOU0VfU0laRSk7CiAJCQlycS0+c2Vuc2VfbGVuID0gVUJfU0VOU0VfU0laRTsKIAkJCWlmIChzYy0+dG9wX3NlbnNlWzBdICE9IDApCi0JCQkJcnEtPmVycm9ycyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKKwkJCQlzY3NpX3N0YXR1cyA9IFNBTV9TVEFUX0NIRUNLX0NPTkRJVElPTjsKIAkJCWVsc2UKLQkJCQlycS0+ZXJyb3JzID0gRElEX0VSUk9SIDw8IDE2OworCQkJCXNjc2lfc3RhdHVzID0gRElEX0VSUk9SIDw8IDE2OwogCQl9IGVsc2UgewogCQkJaWYgKGNtZC0+ZXJyb3IgPT0gLUVJTykgewogCQkJCWlmICh1Yl9yd19jbWRfcmV0cnkoc2MsIGx1biwgdXJxLCBjbWQpID09IDApCiAJCQkJCXJldHVybjsKIAkJCX0KKwkJCXNjc2lfc3RhdHVzID0gU0FNX1NUQVRfQ0hFQ0tfQ09ORElUSU9OOwogCQl9CiAJfQogCiAJdXJxLT5ycSA9IE5VTEw7CiAKIAl1Yl9wdXRfY21kKGx1biwgY21kKTsKLQl1Yl9lbmRfcnEocnEsIHVwdG9kYXRlKTsKKwl1Yl9lbmRfcnEocnEsIHNjc2lfc3RhdHVzKTsKIAlibGtfc3RhcnRfcXVldWUobHVuLT5kaXNrLT5xdWV1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIHViX2VuZF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCB1cHRvZGF0ZSkKK3N0YXRpYyB2b2lkIHViX2VuZF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGludCBzY3NpX3N0YXR1cykKIHsKKwlpbnQgdXB0b2RhdGU7CisKKwlpZiAoc2NzaV9zdGF0dXMgPT0gMCkgeworCQl1cHRvZGF0ZSA9IDE7CisJfSBlbHNlIHsKKwkJdXB0b2RhdGUgPSAwOworCQlycS0+ZXJyb3JzID0gc2NzaV9zdGF0dXM7CisJfQogCWVuZF90aGF0X3JlcXVlc3RfZmlyc3QocnEsIHVwdG9kYXRlLCBycS0+aGFyZF9ucl9zZWN0b3JzKTsKIAllbmRfdGhhdF9yZXF1ZXN0X2xhc3QocnEsIHVwdG9kYXRlKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmxvY2sveGQuYyBiL2RyaXZlcnMvYmxvY2sveGQuYwppbmRleCBlODI4ZTRjLi5lYmYzMDI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jsb2NrL3hkLmMKKysrIGIvZHJpdmVycy9ibG9jay94ZC5jCkBAIC0zMTMsNyArMzEzLDcgQEAKIAkJaW50IHJlcyA9IDA7CiAJCWludCByZXRyeTsKIAotCQlpZiAoIShyZXEtPmZsYWdzICYgUkVRX0NNRCkpIHsKKwkJaWYgKCFibGtfZnNfcmVxdWVzdChyZXEpKSB7CiAJCQllbmRfcmVxdWVzdChyZXEsIDApOwogCQkJY29udGludWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMgYi9kcml2ZXJzL2JsdWV0b290aC9iZnVzYi5jCmluZGV4IDIzZjk2MjEuLmVmY2MyOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2JmdXNiLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvYmZ1c2IuYwpAQCAtMiw3ICsyLDcgQEAKICAqCiAgKiAgQVZNIEJsdWVGUklUWiEgVVNCIGRyaXZlcgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDMgIE1hcmNlbCBIb2x0bWFubiA8bWFyY2VsQGhvbHRtYW5uLm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgogICoKICAqCiAgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKQEAgLTU5LDcgKzU5LDYgQEAKIAogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGJmdXNiX3RhYmxlKTsKIAotCiAjZGVmaW5lIEJGVVNCX01BWF9CTE9DS19TSVpFCTI1NgogCiAjZGVmaW5lIEJGVVNCX0JMT0NLX1RJTUVPVVQJMzAwMApAQCAtNzAsNyArNjksNyBAQAogI2RlZmluZSBCRlVTQl9NQVhfQlVMS19UWAkyCiAjZGVmaW5lIEJGVVNCX01BWF9CVUxLX1JYCTIKIAotc3RydWN0IGJmdXNiIHsKK3N0cnVjdCBiZnVzYl9kYXRhIHsKIAlzdHJ1Y3QgaGNpX2RldgkJKmhkZXY7CiAKIAl1bnNpZ25lZCBsb25nCQlzdGF0ZTsKQEAgLTkyLDEzNyArOTEsMTM2IEBACiAJc3RydWN0IHNrX2J1ZmZfaGVhZAljb21wbGV0ZWRfcTsKIH07CiAKLXN0cnVjdCBiZnVzYl9zY2Igeworc3RydWN0IGJmdXNiX2RhdGFfc2NiIHsKIAlzdHJ1Y3QgdXJiICp1cmI7CiB9OwogCiBzdGF0aWMgdm9pZCBiZnVzYl90eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIHN0YXRpYyB2b2lkIGJmdXNiX3J4X2NvbXBsZXRlKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogCi1zdGF0aWMgc3RydWN0IHVyYiAqYmZ1c2JfZ2V0X2NvbXBsZXRlZChzdHJ1Y3QgYmZ1c2IgKmJmdXNiKQorc3RhdGljIHN0cnVjdCB1cmIgKmJmdXNiX2dldF9jb21wbGV0ZWQoc3RydWN0IGJmdXNiX2RhdGEgKmRhdGEpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzdHJ1Y3QgdXJiICp1cmIgPSBOVUxMOwogCi0JQlRfREJHKCJiZnVzYiAlcCIsIGJmdXNiKTsKKwlCVF9EQkcoImJmdXNiICVwIiwgZGF0YSk7CiAKLQlza2IgPSBza2JfZGVxdWV1ZSgmYmZ1c2ItPmNvbXBsZXRlZF9xKTsKKwlza2IgPSBza2JfZGVxdWV1ZSgmZGF0YS0+Y29tcGxldGVkX3EpOwogCWlmIChza2IpIHsKLQkJdXJiID0gKChzdHJ1Y3QgYmZ1c2Jfc2NiICopIHNrYi0+Y2IpLT51cmI7CisJCXVyYiA9ICgoc3RydWN0IGJmdXNiX2RhdGFfc2NiICopIHNrYi0+Y2IpLT51cmI7CiAJCWtmcmVlX3NrYihza2IpOwogCX0KIAogCXJldHVybiB1cmI7CiB9CiAKLXN0YXRpYyB2b2lkIGJmdXNiX3VubGlua191cmJzKHN0cnVjdCBiZnVzYiAqYmZ1c2IpCitzdGF0aWMgdm9pZCBiZnVzYl91bmxpbmtfdXJicyhzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXN0cnVjdCB1cmIgKnVyYjsKIAotCUJUX0RCRygiYmZ1c2IgJXAiLCBiZnVzYik7CisJQlRfREJHKCJiZnVzYiAlcCIsIGRhdGEpOwogCi0Jd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmYmZ1c2ItPnBlbmRpbmdfcSkpKSB7Ci0JCXVyYiA9ICgoc3RydWN0IGJmdXNiX3NjYiAqKSBza2ItPmNiKS0+dXJiOworCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmRhdGEtPnBlbmRpbmdfcSkpKSB7CisJCXVyYiA9ICgoc3RydWN0IGJmdXNiX2RhdGFfc2NiICopIHNrYi0+Y2IpLT51cmI7CiAJCXVzYl9raWxsX3VyYih1cmIpOwotCQlza2JfcXVldWVfdGFpbCgmYmZ1c2ItPmNvbXBsZXRlZF9xLCBza2IpOworCQlza2JfcXVldWVfdGFpbCgmZGF0YS0+Y29tcGxldGVkX3EsIHNrYik7CiAJfQogCi0Jd2hpbGUgKCh1cmIgPSBiZnVzYl9nZXRfY29tcGxldGVkKGJmdXNiKSkpCisJd2hpbGUgKCh1cmIgPSBiZnVzYl9nZXRfY29tcGxldGVkKGRhdGEpKSkKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiB9CiAKLQotc3RhdGljIGludCBiZnVzYl9zZW5kX2J1bGsoc3RydWN0IGJmdXNiICpiZnVzYiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyBpbnQgYmZ1c2Jfc2VuZF9idWxrKHN0cnVjdCBiZnVzYl9kYXRhICpkYXRhLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewotCXN0cnVjdCBiZnVzYl9zY2IgKnNjYiA9ICh2b2lkICopIHNrYi0+Y2I7Ci0Jc3RydWN0IHVyYiAqdXJiID0gYmZ1c2JfZ2V0X2NvbXBsZXRlZChiZnVzYik7CisJc3RydWN0IGJmdXNiX2RhdGFfc2NiICpzY2IgPSAodm9pZCAqKSBza2ItPmNiOworCXN0cnVjdCB1cmIgKnVyYiA9IGJmdXNiX2dldF9jb21wbGV0ZWQoZGF0YSk7CiAJaW50IGVyciwgcGlwZTsKIAotCUJUX0RCRygiYmZ1c2IgJXAgc2tiICVwIGxlbiAlZCIsIGJmdXNiLCBza2IsIHNrYi0+bGVuKTsKKwlCVF9EQkcoImJmdXNiICVwIHNrYiAlcCBsZW4gJWQiLCBkYXRhLCBza2IsIHNrYi0+bGVuKTsKIAogCWlmICghdXJiICYmICEodXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGlwZSA9IHVzYl9zbmRidWxrcGlwZShiZnVzYi0+dWRldiwgYmZ1c2ItPmJ1bGtfb3V0X2VwKTsKKwlwaXBlID0gdXNiX3NuZGJ1bGtwaXBlKGRhdGEtPnVkZXYsIGRhdGEtPmJ1bGtfb3V0X2VwKTsKIAotCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgYmZ1c2ItPnVkZXYsIHBpcGUsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLCBkYXRhLT51ZGV2LCBwaXBlLCBza2ItPmRhdGEsIHNrYi0+bGVuLAogCQkJYmZ1c2JfdHhfY29tcGxldGUsIHNrYik7CiAKIAlzY2ItPnVyYiA9IHVyYjsKIAotCXNrYl9xdWV1ZV90YWlsKCZiZnVzYi0+cGVuZGluZ19xLCBza2IpOworCXNrYl9xdWV1ZV90YWlsKCZkYXRhLT5wZW5kaW5nX3EsIHNrYik7CiAKIAllcnIgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOwogCWlmIChlcnIpIHsKIAkJQlRfRVJSKCIlcyBidWxrIHR4IHN1Ym1pdCBmYWlsZWQgdXJiICVwIGVyciAlZCIsIAotCQkJCQliZnVzYi0+aGRldi0+bmFtZSwgdXJiLCBlcnIpOwotCQlza2JfdW5saW5rKHNrYiwgJmJmdXNiLT5wZW5kaW5nX3EpOworCQkJCQlkYXRhLT5oZGV2LT5uYW1lLCB1cmIsIGVycik7CisJCXNrYl91bmxpbmsoc2tiLCAmZGF0YS0+cGVuZGluZ19xKTsKIAkJdXNiX2ZyZWVfdXJiKHVyYik7CiAJfSBlbHNlCi0JCWF0b21pY19pbmMoJmJmdXNiLT5wZW5kaW5nX3R4KTsKKwkJYXRvbWljX2luYygmZGF0YS0+cGVuZGluZ190eCk7CiAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBiZnVzYl90eF93YWtldXAoc3RydWN0IGJmdXNiICpiZnVzYikKK3N0YXRpYyB2b2lkIGJmdXNiX3R4X3dha2V1cChzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YSkKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCi0JQlRfREJHKCJiZnVzYiAlcCIsIGJmdXNiKTsKKwlCVF9EQkcoImJmdXNiICVwIiwgZGF0YSk7CiAKLQlpZiAodGVzdF9hbmRfc2V0X2JpdChCRlVTQl9UWF9QUk9DRVNTLCAmYmZ1c2ItPnN0YXRlKSkgewotCQlzZXRfYml0KEJGVVNCX1RYX1dBS0VVUCwgJmJmdXNiLT5zdGF0ZSk7CisJaWYgKHRlc3RfYW5kX3NldF9iaXQoQkZVU0JfVFhfUFJPQ0VTUywgJmRhdGEtPnN0YXRlKSkgeworCQlzZXRfYml0KEJGVVNCX1RYX1dBS0VVUCwgJmRhdGEtPnN0YXRlKTsKIAkJcmV0dXJuOwogCX0KIAogCWRvIHsKLQkJY2xlYXJfYml0KEJGVVNCX1RYX1dBS0VVUCwgJmJmdXNiLT5zdGF0ZSk7CisJCWNsZWFyX2JpdChCRlVTQl9UWF9XQUtFVVAsICZkYXRhLT5zdGF0ZSk7CiAKLQkJd2hpbGUgKChhdG9taWNfcmVhZCgmYmZ1c2ItPnBlbmRpbmdfdHgpIDwgQkZVU0JfTUFYX0JVTEtfVFgpICYmCi0JCQkJKHNrYiA9IHNrYl9kZXF1ZXVlKCZiZnVzYi0+dHJhbnNtaXRfcSkpKSB7Ci0JCQlpZiAoYmZ1c2Jfc2VuZF9idWxrKGJmdXNiLCBza2IpIDwgMCkgewotCQkJCXNrYl9xdWV1ZV9oZWFkKCZiZnVzYi0+dHJhbnNtaXRfcSwgc2tiKTsKKwkJd2hpbGUgKChhdG9taWNfcmVhZCgmZGF0YS0+cGVuZGluZ190eCkgPCBCRlVTQl9NQVhfQlVMS19UWCkgJiYKKwkJCQkoc2tiID0gc2tiX2RlcXVldWUoJmRhdGEtPnRyYW5zbWl0X3EpKSkgeworCQkJaWYgKGJmdXNiX3NlbmRfYnVsayhkYXRhLCBza2IpIDwgMCkgeworCQkJCXNrYl9xdWV1ZV9oZWFkKCZkYXRhLT50cmFuc21pdF9xLCBza2IpOwogCQkJCWJyZWFrOwogCQkJfQogCQl9CiAKLQl9IHdoaWxlICh0ZXN0X2JpdChCRlVTQl9UWF9XQUtFVVAsICZiZnVzYi0+c3RhdGUpKTsKKwl9IHdoaWxlICh0ZXN0X2JpdChCRlVTQl9UWF9XQUtFVVAsICZkYXRhLT5zdGF0ZSkpOwogCi0JY2xlYXJfYml0KEJGVVNCX1RYX1BST0NFU1MsICZiZnVzYi0+c3RhdGUpOworCWNsZWFyX2JpdChCRlVTQl9UWF9QUk9DRVNTLCAmZGF0YS0+c3RhdGUpOwogfQogCiBzdGF0aWMgdm9pZCBiZnVzYl90eF9jb21wbGV0ZShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCBza19idWZmICpza2IgPSAoc3RydWN0IHNrX2J1ZmYgKikgdXJiLT5jb250ZXh0OwotCXN0cnVjdCBiZnVzYiAqYmZ1c2IgPSAoc3RydWN0IGJmdXNiICopIHNrYi0+ZGV2OworCXN0cnVjdCBiZnVzYl9kYXRhICpkYXRhID0gKHN0cnVjdCBiZnVzYl9kYXRhICopIHNrYi0+ZGV2OwogCi0JQlRfREJHKCJiZnVzYiAlcCB1cmIgJXAgc2tiICVwIGxlbiAlZCIsIGJmdXNiLCB1cmIsIHNrYiwgc2tiLT5sZW4pOworCUJUX0RCRygiYmZ1c2IgJXAgdXJiICVwIHNrYiAlcCBsZW4gJWQiLCBkYXRhLCB1cmIsIHNrYiwgc2tiLT5sZW4pOwogCi0JYXRvbWljX2RlYygmYmZ1c2ItPnBlbmRpbmdfdHgpOworCWF0b21pY19kZWMoJmRhdGEtPnBlbmRpbmdfdHgpOwogCi0JaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmJmdXNiLT5oZGV2LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmRhdGEtPmhkZXYtPmZsYWdzKSkKIAkJcmV0dXJuOwogCiAJaWYgKCF1cmItPnN0YXR1cykKLQkJYmZ1c2ItPmhkZXYtPnN0YXQuYnl0ZV90eCArPSBza2ItPmxlbjsKKwkJZGF0YS0+aGRldi0+c3RhdC5ieXRlX3R4ICs9IHNrYi0+bGVuOwogCWVsc2UKLQkJYmZ1c2ItPmhkZXYtPnN0YXQuZXJyX3R4Kys7CisJCWRhdGEtPmhkZXYtPnN0YXQuZXJyX3R4Kys7CiAKLQlyZWFkX2xvY2soJmJmdXNiLT5sb2NrKTsKKwlyZWFkX2xvY2soJmRhdGEtPmxvY2spOwogCi0Jc2tiX3VubGluayhza2IsICZiZnVzYi0+cGVuZGluZ19xKTsKLQlza2JfcXVldWVfdGFpbCgmYmZ1c2ItPmNvbXBsZXRlZF9xLCBza2IpOworCXNrYl91bmxpbmsoc2tiLCAmZGF0YS0+cGVuZGluZ19xKTsKKwlza2JfcXVldWVfdGFpbCgmZGF0YS0+Y29tcGxldGVkX3EsIHNrYik7CiAKLQliZnVzYl90eF93YWtldXAoYmZ1c2IpOworCWJmdXNiX3R4X3dha2V1cChkYXRhKTsKIAotCXJlYWRfdW5sb2NrKCZiZnVzYi0+bG9jayk7CisJcmVhZF91bmxvY2soJmRhdGEtPmxvY2spOwogfQogCiAKLXN0YXRpYyBpbnQgYmZ1c2Jfcnhfc3VibWl0KHN0cnVjdCBiZnVzYiAqYmZ1c2IsIHN0cnVjdCB1cmIgKnVyYikKK3N0YXRpYyBpbnQgYmZ1c2Jfcnhfc3VibWl0KHN0cnVjdCBiZnVzYl9kYXRhICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIpCiB7Ci0Jc3RydWN0IGJmdXNiX3NjYiAqc2NiOworCXN0cnVjdCBiZnVzYl9kYXRhX3NjYiAqc2NiOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciwgcGlwZSwgc2l6ZSA9IEhDSV9NQVhfRlJBTUVfU0laRSArIDMyOwogCkBAIC0yMzEsMjggKzIyOSwyOSBAQAogCWlmICghdXJiICYmICEodXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfQVRPTUlDKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JaWYgKCEoc2tiID0gYnRfc2tiX2FsbG9jKHNpemUsIEdGUF9BVE9NSUMpKSkgeworCXNrYiA9IGJ0X3NrYl9hbGxvYyhzaXplLCBHRlBfQVRPTUlDKTsKKwlpZiAoIXNrYikgewogCQl1c2JfZnJlZV91cmIodXJiKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc2tiLT5kZXYgPSAodm9pZCAqKSBiZnVzYjsKKwlza2ItPmRldiA9ICh2b2lkICopIGRhdGE7CiAKLQlzY2IgPSAoc3RydWN0IGJmdXNiX3NjYiAqKSBza2ItPmNiOworCXNjYiA9IChzdHJ1Y3QgYmZ1c2JfZGF0YV9zY2IgKikgc2tiLT5jYjsKIAlzY2ItPnVyYiA9IHVyYjsKIAotCXBpcGUgPSB1c2JfcmN2YnVsa3BpcGUoYmZ1c2ItPnVkZXYsIGJmdXNiLT5idWxrX2luX2VwKTsKKwlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKGRhdGEtPnVkZXYsIGRhdGEtPmJ1bGtfaW5fZXApOwogCi0JdXNiX2ZpbGxfYnVsa191cmIodXJiLCBiZnVzYi0+dWRldiwgcGlwZSwgc2tiLT5kYXRhLCBzaXplLAorCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZGF0YS0+dWRldiwgcGlwZSwgc2tiLT5kYXRhLCBzaXplLAogCQkJYmZ1c2JfcnhfY29tcGxldGUsIHNrYik7CiAKLQlza2JfcXVldWVfdGFpbCgmYmZ1c2ItPnBlbmRpbmdfcSwgc2tiKTsKKwlza2JfcXVldWVfdGFpbCgmZGF0YS0+cGVuZGluZ19xLCBza2IpOwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyKSB7CiAJCUJUX0VSUigiJXMgYnVsayByeCBzdWJtaXQgZmFpbGVkIHVyYiAlcCBlcnIgJWQiLAotCQkJCQliZnVzYi0+aGRldi0+bmFtZSwgdXJiLCBlcnIpOwotCQlza2JfdW5saW5rKHNrYiwgJmJmdXNiLT5wZW5kaW5nX3EpOworCQkJCQlkYXRhLT5oZGV2LT5uYW1lLCB1cmIsIGVycik7CisJCXNrYl91bmxpbmsoc2tiLCAmZGF0YS0+cGVuZGluZ19xKTsKIAkJa2ZyZWVfc2tiKHNrYik7CiAJCXVzYl9mcmVlX3VyYih1cmIpOwogCX0KQEAgLTI2MCwxNSArMjU5LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmZ1c2JfcmVjdl9ibG9jayhzdHJ1Y3QgYmZ1c2IgKmJmdXNiLCBpbnQgaGRyLCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgbGVuKQorc3RhdGljIGlubGluZSBpbnQgYmZ1c2JfcmVjdl9ibG9jayhzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YSwgaW50IGhkciwgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogewotCUJUX0RCRygiYmZ1c2IgJXAgaGRyIDB4JTAyeCBkYXRhICVwIGxlbiAlZCIsIGJmdXNiLCBoZHIsIGRhdGEsIGxlbik7CisJQlRfREJHKCJiZnVzYiAlcCBoZHIgMHglMDJ4IGRhdGEgJXAgbGVuICVkIiwgZGF0YSwgaGRyLCBidWYsIGxlbik7CiAKIAlpZiAoaGRyICYgMHgxMCkgewotCQlCVF9FUlIoIiVzIGVycm9yIGluIGJsb2NrIiwgYmZ1c2ItPmhkZXYtPm5hbWUpOwotCQlpZiAoYmZ1c2ItPnJlYXNzZW1ibHkpCi0JCQlrZnJlZV9za2IoYmZ1c2ItPnJlYXNzZW1ibHkpOwotCQliZnVzYi0+cmVhc3NlbWJseSA9IE5VTEw7CisJCUJUX0VSUigiJXMgZXJyb3IgaW4gYmxvY2siLCBkYXRhLT5oZGV2LT5uYW1lKTsKKwkJaWYgKGRhdGEtPnJlYXNzZW1ibHkpCisJCQlrZnJlZV9za2IoZGF0YS0+cmVhc3NlbWJseSk7CisJCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTI3Nyw0NiArMjc2LDQ2IEBACiAJCXVuc2lnbmVkIGNoYXIgcGt0X3R5cGU7CiAJCWludCBwa3RfbGVuID0gMDsKIAotCQlpZiAoYmZ1c2ItPnJlYXNzZW1ibHkpIHsKLQkJCUJUX0VSUigiJXMgdW5leHBlY3RlZCBzdGFydCBibG9jayIsIGJmdXNiLT5oZGV2LT5uYW1lKTsKLQkJCWtmcmVlX3NrYihiZnVzYi0+cmVhc3NlbWJseSk7Ci0JCQliZnVzYi0+cmVhc3NlbWJseSA9IE5VTEw7CisJCWlmIChkYXRhLT5yZWFzc2VtYmx5KSB7CisJCQlCVF9FUlIoIiVzIHVuZXhwZWN0ZWQgc3RhcnQgYmxvY2siLCBkYXRhLT5oZGV2LT5uYW1lKTsKKwkJCWtmcmVlX3NrYihkYXRhLT5yZWFzc2VtYmx5KTsKKwkJCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCQl9CiAKIAkJaWYgKGxlbiA8IDEpIHsKLQkJCUJUX0VSUigiJXMgbm8gcGFja2V0IHR5cGUgZm91bmQiLCBiZnVzYi0+aGRldi0+bmFtZSk7CisJCQlCVF9FUlIoIiVzIG5vIHBhY2tldCB0eXBlIGZvdW5kIiwgZGF0YS0+aGRldi0+bmFtZSk7CiAJCQlyZXR1cm4gLUVQUk9UTzsKIAkJfQogCi0JCXBrdF90eXBlID0gKmRhdGErKzsgbGVuLS07CisJCXBrdF90eXBlID0gKmJ1ZisrOyBsZW4tLTsKIAogCQlzd2l0Y2ggKHBrdF90eXBlKSB7CiAJCWNhc2UgSENJX0VWRU5UX1BLVDoKIAkJCWlmIChsZW4gPj0gSENJX0VWRU5UX0hEUl9TSVpFKSB7Ci0JCQkJc3RydWN0IGhjaV9ldmVudF9oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX2V2ZW50X2hkciAqKSBkYXRhOworCQkJCXN0cnVjdCBoY2lfZXZlbnRfaGRyICpoZHIgPSAoc3RydWN0IGhjaV9ldmVudF9oZHIgKikgYnVmOwogCQkJCXBrdF9sZW4gPSBIQ0lfRVZFTlRfSERSX1NJWkUgKyBoZHItPnBsZW47CiAJCQl9IGVsc2UgewotCQkJCUJUX0VSUigiJXMgZXZlbnQgYmxvY2sgaXMgdG9vIHNob3J0IiwgYmZ1c2ItPmhkZXYtPm5hbWUpOworCQkJCUJUX0VSUigiJXMgZXZlbnQgYmxvY2sgaXMgdG9vIHNob3J0IiwgZGF0YS0+aGRldi0+bmFtZSk7CiAJCQkJcmV0dXJuIC1FSUxTRVE7CiAJCQl9CiAJCQlicmVhazsKIAogCQljYXNlIEhDSV9BQ0xEQVRBX1BLVDoKIAkJCWlmIChsZW4gPj0gSENJX0FDTF9IRFJfU0laRSkgewotCQkJCXN0cnVjdCBoY2lfYWNsX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfYWNsX2hkciAqKSBkYXRhOworCQkJCXN0cnVjdCBoY2lfYWNsX2hkciAqaGRyID0gKHN0cnVjdCBoY2lfYWNsX2hkciAqKSBidWY7CiAJCQkJcGt0X2xlbiA9IEhDSV9BQ0xfSERSX1NJWkUgKyBfX2xlMTZfdG9fY3B1KGhkci0+ZGxlbik7CiAJCQl9IGVsc2UgewotCQkJCUJUX0VSUigiJXMgZGF0YSBibG9jayBpcyB0b28gc2hvcnQiLCBiZnVzYi0+aGRldi0+bmFtZSk7CisJCQkJQlRfRVJSKCIlcyBkYXRhIGJsb2NrIGlzIHRvbyBzaG9ydCIsIGRhdGEtPmhkZXYtPm5hbWUpOwogCQkJCXJldHVybiAtRUlMU0VROwogCQkJfQogCQkJYnJlYWs7CiAKIAkJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6CiAJCQlpZiAobGVuID49IEhDSV9TQ09fSERSX1NJWkUpIHsKLQkJCQlzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikgZGF0YTsKKwkJCQlzdHJ1Y3QgaGNpX3Njb19oZHIgKmhkciA9IChzdHJ1Y3QgaGNpX3Njb19oZHIgKikgYnVmOwogCQkJCXBrdF9sZW4gPSBIQ0lfU0NPX0hEUl9TSVpFICsgaGRyLT5kbGVuOwogCQkJfSBlbHNlIHsKLQkJCQlCVF9FUlIoIiVzIGF1ZGlvIGJsb2NrIGlzIHRvbyBzaG9ydCIsIGJmdXNiLT5oZGV2LT5uYW1lKTsKKwkJCQlCVF9FUlIoIiVzIGF1ZGlvIGJsb2NrIGlzIHRvbyBzaG9ydCIsIGRhdGEtPmhkZXYtPm5hbWUpOwogCQkJCXJldHVybiAtRUlMU0VROwogCQkJfQogCQkJYnJlYWs7CkBAIC0zMjQsMjcgKzMyMywyNyBAQAogCiAJCXNrYiA9IGJ0X3NrYl9hbGxvYyhwa3RfbGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFza2IpIHsKLQkJCUJUX0VSUigiJXMgbm8gbWVtb3J5IGZvciB0aGUgcGFja2V0IiwgYmZ1c2ItPmhkZXYtPm5hbWUpOworCQkJQlRfRVJSKCIlcyBubyBtZW1vcnkgZm9yIHRoZSBwYWNrZXQiLCBkYXRhLT5oZGV2LT5uYW1lKTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKLQkJc2tiLT5kZXYgPSAodm9pZCAqKSBiZnVzYi0+aGRldjsKKwkJc2tiLT5kZXYgPSAodm9pZCAqKSBkYXRhLT5oZGV2OwogCQlidF9jYihza2IpLT5wa3RfdHlwZSA9IHBrdF90eXBlOwogCi0JCWJmdXNiLT5yZWFzc2VtYmx5ID0gc2tiOworCQlkYXRhLT5yZWFzc2VtYmx5ID0gc2tiOwogCX0gZWxzZSB7Ci0JCWlmICghYmZ1c2ItPnJlYXNzZW1ibHkpIHsKLQkJCUJUX0VSUigiJXMgdW5leHBlY3RlZCBjb250aW51YXRpb24gYmxvY2siLCBiZnVzYi0+aGRldi0+bmFtZSk7CisJCWlmICghZGF0YS0+cmVhc3NlbWJseSkgeworCQkJQlRfRVJSKCIlcyB1bmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBibG9jayIsIGRhdGEtPmhkZXYtPm5hbWUpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAKIAlpZiAobGVuID4gMCkKLQkJbWVtY3B5KHNrYl9wdXQoYmZ1c2ItPnJlYXNzZW1ibHksIGxlbiksIGRhdGEsIGxlbik7CisJCW1lbWNweShza2JfcHV0KGRhdGEtPnJlYXNzZW1ibHksIGxlbiksIGJ1ZiwgbGVuKTsKIAogCWlmIChoZHIgJiAweDA4KSB7Ci0JCWhjaV9yZWN2X2ZyYW1lKGJmdXNiLT5yZWFzc2VtYmx5KTsKLQkJYmZ1c2ItPnJlYXNzZW1ibHkgPSBOVUxMOworCQloY2lfcmVjdl9mcmFtZShkYXRhLT5yZWFzc2VtYmx5KTsKKwkJZGF0YS0+cmVhc3NlbWJseSA9IE5VTEw7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC0zNTMsMjIgKzM1MiwyMiBAQAogc3RhdGljIHZvaWQgYmZ1c2JfcnhfY29tcGxldGUoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gKHN0cnVjdCBza19idWZmICopIHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgYmZ1c2IgKmJmdXNiID0gKHN0cnVjdCBiZnVzYiAqKSBza2ItPmRldjsKKwlzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYmZ1c2JfZGF0YSAqKSBza2ItPmRldjsKIAl1bnNpZ25lZCBjaGFyICpidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAlpbnQgY291bnQgPSB1cmItPmFjdHVhbF9sZW5ndGg7CiAJaW50IGVyciwgaGRyLCBsZW47CiAKIAlCVF9EQkcoImJmdXNiICVwIHVyYiAlcCBza2IgJXAgbGVuICVkIiwgYmZ1c2IsIHVyYiwgc2tiLCBza2ItPmxlbik7CiAKLQlyZWFkX2xvY2soJmJmdXNiLT5sb2NrKTsKKwlyZWFkX2xvY2soJmRhdGEtPmxvY2spOwogCi0JaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmJmdXNiLT5oZGV2LT5mbGFncykpCisJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmRhdGEtPmhkZXYtPmZsYWdzKSkKIAkJZ290byB1bmxvY2s7CiAKIAlpZiAodXJiLT5zdGF0dXMgfHwgIWNvdW50KQogCQlnb3RvIHJlc3VibWl0OwogCi0JYmZ1c2ItPmhkZXYtPnN0YXQuYnl0ZV9yeCArPSBjb3VudDsKKwlkYXRhLT5oZGV2LT5zdGF0LmJ5dGVfcnggKz0gY291bnQ7CiAKIAlza2JfcHV0KHNrYiwgY291bnQpOwogCkBAIC0zODcsOTAgKzM4Niw4OSBAQAogCiAJCWlmIChjb3VudCA8IGxlbikgewogCQkJQlRfRVJSKCIlcyBibG9jayBleHRlbmRzIG92ZXIgVVJCIGJ1ZmZlciByYW5nZXMiLAotCQkJCQliZnVzYi0+aGRldi0+bmFtZSk7CisJCQkJCWRhdGEtPmhkZXYtPm5hbWUpOwogCQl9CiAKIAkJaWYgKChoZHIgJiAweGUxKSA9PSAweGMxKQotCQkJYmZ1c2JfcmVjdl9ibG9jayhiZnVzYiwgaGRyLCBidWYsIGxlbik7CisJCQliZnVzYl9yZWN2X2Jsb2NrKGRhdGEsIGhkciwgYnVmLCBsZW4pOwogCiAJCWNvdW50IC09IGxlbjsKIAkJYnVmICAgKz0gbGVuOwogCX0KIAotCXNrYl91bmxpbmsoc2tiLCAmYmZ1c2ItPnBlbmRpbmdfcSk7CisJc2tiX3VubGluayhza2IsICZkYXRhLT5wZW5kaW5nX3EpOwogCWtmcmVlX3NrYihza2IpOwogCi0JYmZ1c2Jfcnhfc3VibWl0KGJmdXNiLCB1cmIpOworCWJmdXNiX3J4X3N1Ym1pdChkYXRhLCB1cmIpOwogCi0JcmVhZF91bmxvY2soJmJmdXNiLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAlyZXR1cm47CiAKIHJlc3VibWl0OgotCXVyYi0+ZGV2ID0gYmZ1c2ItPnVkZXY7CisJdXJiLT5kZXYgPSBkYXRhLT51ZGV2OwogCiAJZXJyID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoZXJyKSB7CiAJCUJUX0VSUigiJXMgYnVsayByZXN1Ym1pdCBmYWlsZWQgdXJiICVwIGVyciAlZCIsCi0JCQkJCWJmdXNiLT5oZGV2LT5uYW1lLCB1cmIsIGVycik7CisJCQkJCWRhdGEtPmhkZXYtPm5hbWUsIHVyYiwgZXJyKTsKIAl9CiAKIHVubG9jazoKLQlyZWFkX3VubG9jaygmYmZ1c2ItPmxvY2spOworCXJlYWRfdW5sb2NrKCZkYXRhLT5sb2NrKTsKIH0KIAotCiBzdGF0aWMgaW50IGJmdXNiX29wZW4oc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7Ci0Jc3RydWN0IGJmdXNiICpiZnVzYiA9IChzdHJ1Y3QgYmZ1c2IgKikgaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGJmdXNiX2RhdGEgKmRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpLCBlcnI7CiAKLQlCVF9EQkcoImhkZXYgJXAgYmZ1c2IgJXAiLCBoZGV2LCBiZnVzYik7CisJQlRfREJHKCJoZGV2ICVwIGJmdXNiICVwIiwgaGRldiwgZGF0YSk7CiAKIAlpZiAodGVzdF9hbmRfc2V0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIDA7CiAKLQl3cml0ZV9sb2NrX2lycXNhdmUoJmJmdXNiLT5sb2NrLCBmbGFncyk7CisJd3JpdGVfbG9ja19pcnFzYXZlKCZkYXRhLT5sb2NrLCBmbGFncyk7CiAKLQllcnIgPSBiZnVzYl9yeF9zdWJtaXQoYmZ1c2IsIE5VTEwpOworCWVyciA9IGJmdXNiX3J4X3N1Ym1pdChkYXRhLCBOVUxMKTsKIAlpZiAoIWVycikgewogCQlmb3IgKGkgPSAxOyBpIDwgQkZVU0JfTUFYX0JVTEtfUlg7IGkrKykKLQkJCWJmdXNiX3J4X3N1Ym1pdChiZnVzYiwgTlVMTCk7CisJCQliZnVzYl9yeF9zdWJtaXQoZGF0YSwgTlVMTCk7CiAJfSBlbHNlIHsKIAkJY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpOwogCX0KIAotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZiZnVzYi0+bG9jaywgZmxhZ3MpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IGJmdXNiX2ZsdXNoKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewotCXN0cnVjdCBiZnVzYiAqYmZ1c2IgPSAoc3RydWN0IGJmdXNiICopIGhkZXYtPmRyaXZlcl9kYXRhOworCXN0cnVjdCBiZnVzYl9kYXRhICpkYXRhID0gaGRldi0+ZHJpdmVyX2RhdGE7CiAKLQlCVF9EQkcoImhkZXYgJXAgYmZ1c2IgJXAiLCBoZGV2LCBiZnVzYik7CisJQlRfREJHKCJoZGV2ICVwIGJmdXNiICVwIiwgaGRldiwgZGF0YSk7CiAKLQlza2JfcXVldWVfcHVyZ2UoJmJmdXNiLT50cmFuc21pdF9xKTsKKwlza2JfcXVldWVfcHVyZ2UoJmRhdGEtPnRyYW5zbWl0X3EpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYmZ1c2JfY2xvc2Uoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7Ci0Jc3RydWN0IGJmdXNiICpiZnVzYiA9IChzdHJ1Y3QgYmZ1c2IgKikgaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGJmdXNiX2RhdGEgKmRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JQlRfREJHKCJoZGV2ICVwIGJmdXNiICVwIiwgaGRldiwgYmZ1c2IpOworCUJUX0RCRygiaGRldiAlcCBiZnVzYiAlcCIsIGhkZXYsIGRhdGEpOwogCiAJaWYgKCF0ZXN0X2FuZF9jbGVhcl9iaXQoSENJX1JVTk5JTkcsICZoZGV2LT5mbGFncykpCiAJCXJldHVybiAwOwogCi0Jd3JpdGVfbG9ja19pcnFzYXZlKCZiZnVzYi0+bG9jaywgZmxhZ3MpOwotCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZiZnVzYi0+bG9jaywgZmxhZ3MpOworCXdyaXRlX2xvY2tfaXJxc2F2ZSgmZGF0YS0+bG9jaywgZmxhZ3MpOworCXdyaXRlX3VubG9ja19pcnFyZXN0b3JlKCZkYXRhLT5sb2NrLCBmbGFncyk7CiAKLQliZnVzYl91bmxpbmtfdXJicyhiZnVzYik7CisJYmZ1c2JfdW5saW5rX3VyYnMoZGF0YSk7CiAJYmZ1c2JfZmx1c2goaGRldik7CiAKIAlyZXR1cm4gMDsKQEAgLTQ3OSw3ICs0NzcsNyBAQAogc3RhdGljIGludCBiZnVzYl9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7Ci0Jc3RydWN0IGJmdXNiICpiZnVzYjsKKwlzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YTsKIAlzdHJ1Y3Qgc2tfYnVmZiAqbnNrYjsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKIAlpbnQgc2VudCA9IDAsIHNpemUsIGNvdW50OwpAQCAtNDk0LDcgKzQ5Miw3IEBACiAJaWYgKCF0ZXN0X2JpdChIQ0lfUlVOTklORywgJmhkZXYtPmZsYWdzKSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWJmdXNiID0gKHN0cnVjdCBiZnVzYiAqKSBoZGV2LT5kcml2ZXJfZGF0YTsKKwlkYXRhID0gaGRldi0+ZHJpdmVyX2RhdGE7CiAKIAlzd2l0Y2ggKGJ0X2NiKHNrYiktPnBrdF90eXBlKSB7CiAJY2FzZSBIQ0lfQ09NTUFORF9QS1Q6CkBAIC01MTQsMTIgKzUxMiwxMyBAQAogCWNvdW50ID0gc2tiLT5sZW47CiAKIAkvKiBNYXggSENJIGZyYW1lIHNpemUgc2VlbXMgdG8gYmUgMTUxMSArIDEgKi8KLQlpZiAoIShuc2tiID0gYnRfc2tiX2FsbG9jKGNvdW50ICsgMzIsIEdGUF9BVE9NSUMpKSkgeworCW5za2IgPSBidF9za2JfYWxsb2MoY291bnQgKyAzMiwgR0ZQX0FUT01JQyk7CisJaWYgKCFuc2tiKSB7CiAJCUJUX0VSUigiQ2FuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBuZXcgcGFja2V0Iik7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCW5za2ItPmRldiA9ICh2b2lkICopIGJmdXNiOworCW5za2ItPmRldiA9ICh2b2lkICopIGRhdGE7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCRlVTQl9NQVhfQkxPQ0tfU0laRSk7CkBAIC01MzYsMTggKzUzNSwxOCBAQAogCX0KIAogCS8qIERvbid0IHNlbmQgZnJhbWUgd2l0aCBtdWx0aXBsZSBzaXplIG9mIGJ1bGsgbWF4IHBhY2tldCAqLwotCWlmICgobnNrYi0+bGVuICUgYmZ1c2ItPmJ1bGtfcGt0X3NpemUpID09IDApIHsKKwlpZiAoKG5za2ItPmxlbiAlIGRhdGEtPmJ1bGtfcGt0X3NpemUpID09IDApIHsKIAkJYnVmWzBdID0gMHhkZDsKIAkJYnVmWzFdID0gMHgwMDsKIAkJbWVtY3B5KHNrYl9wdXQobnNrYiwgMiksIGJ1ZiwgMik7CiAJfQogCi0JcmVhZF9sb2NrKCZiZnVzYi0+bG9jayk7CisJcmVhZF9sb2NrKCZkYXRhLT5sb2NrKTsKIAotCXNrYl9xdWV1ZV90YWlsKCZiZnVzYi0+dHJhbnNtaXRfcSwgbnNrYik7Ci0JYmZ1c2JfdHhfd2FrZXVwKGJmdXNiKTsKKwlza2JfcXVldWVfdGFpbCgmZGF0YS0+dHJhbnNtaXRfcSwgbnNrYik7CisJYmZ1c2JfdHhfd2FrZXVwKGRhdGEpOwogCi0JcmVhZF91bmxvY2soJmJmdXNiLT5sb2NrKTsKKwlyZWFkX3VubG9jaygmZGF0YS0+bG9jayk7CiAKIAlrZnJlZV9za2Ioc2tiKTsKIApAQCAtNTU2LDExICs1NTUsMTEgQEAKIAogc3RhdGljIHZvaWQgYmZ1c2JfZGVzdHJ1Y3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7Ci0Jc3RydWN0IGJmdXNiICpiZnVzYiA9IChzdHJ1Y3QgYmZ1c2IgKikgaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IGJmdXNiX2RhdGEgKmRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAotCUJUX0RCRygiaGRldiAlcCBiZnVzYiAlcCIsIGhkZXYsIGJmdXNiKTsKKwlCVF9EQkcoImhkZXYgJXAgYmZ1c2IgJXAiLCBoZGV2LCBkYXRhKTsKIAotCWtmcmVlKGJmdXNiKTsKKwlrZnJlZShkYXRhKTsKIH0KIAogc3RhdGljIGludCBiZnVzYl9pb2N0bChzdHJ1Y3QgaGNpX2RldiAqaGRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCkBAIC01NjgsMjUgKzU2NywyNCBAQAogCXJldHVybiAtRU5PSU9DVExDTUQ7CiB9CiAKLQotc3RhdGljIGludCBiZnVzYl9sb2FkX2Zpcm13YXJlKHN0cnVjdCBiZnVzYiAqYmZ1c2IsIHVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLCBpbnQgY291bnQpCitzdGF0aWMgaW50IGJmdXNiX2xvYWRfZmlybXdhcmUoc3RydWN0IGJmdXNiX2RhdGEgKmRhdGEsIHVuc2lnbmVkIGNoYXIgKmZpcm13YXJlLCBpbnQgY291bnQpCiB7CiAJdW5zaWduZWQgY2hhciAqYnVmOwogCWludCBlcnIsIHBpcGUsIGxlbiwgc2l6ZSwgc2VudCA9IDA7CiAKLQlCVF9EQkcoImJmdXNiICVwIHVkZXYgJXAiLCBiZnVzYiwgYmZ1c2ItPnVkZXYpOworCUJUX0RCRygiYmZ1c2IgJXAgdWRldiAlcCIsIGRhdGEsIGRhdGEtPnVkZXYpOwogCiAJQlRfSU5GTygiQmx1ZUZSSVRaISBVU0IgbG9hZGluZyBmaXJtd2FyZSIpOwogCi0JcGlwZSA9IHVzYl9zbmRjdHJscGlwZShiZnVzYi0+dWRldiwgMCk7CisJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAwKTsKIAotCWlmICh1c2JfY29udHJvbF9tc2coYmZ1c2ItPnVkZXYsIHBpcGUsIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCisJaWYgKHVzYl9jb250cm9sX21zZyhkYXRhLT51ZGV2LCBwaXBlLCBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OLAogCQkJCTAsIDEsIDAsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKSA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gbG9hZGluZyBjb25maWd1cmF0aW9uIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JYmZ1c2ItPnVkZXYtPnRvZ2dsZVswXSA9IGJmdXNiLT51ZGV2LT50b2dnbGVbMV0gPSAwOworCWRhdGEtPnVkZXYtPnRvZ2dsZVswXSA9IGRhdGEtPnVkZXYtPnRvZ2dsZVsxXSA9IDA7CiAKIAlidWYgPSBrbWFsbG9jKEJGVVNCX01BWF9CTE9DS19TSVpFICsgMywgR0ZQX0FUT01JQyk7CiAJaWYgKCFidWYpIHsKQEAgLTU5NCwxNCArNTkyLDE0IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXBpcGUgPSB1c2Jfc25kYnVsa3BpcGUoYmZ1c2ItPnVkZXYsIGJmdXNiLT5idWxrX291dF9lcCk7CisJcGlwZSA9IHVzYl9zbmRidWxrcGlwZShkYXRhLT51ZGV2LCBkYXRhLT5idWxrX291dF9lcCk7CiAKIAl3aGlsZSAoY291bnQpIHsKIAkJc2l6ZSA9IG1pbl90KHVpbnQsIGNvdW50LCBCRlVTQl9NQVhfQkxPQ0tfU0laRSArIDMpOwogCiAJCW1lbWNweShidWYsIGZpcm13YXJlICsgc2VudCwgc2l6ZSk7CiAKLQkJZXJyID0gdXNiX2J1bGtfbXNnKGJmdXNiLT51ZGV2LCBwaXBlLCBidWYsIHNpemUsCisJCWVyciA9IHVzYl9idWxrX21zZyhkYXRhLT51ZGV2LCBwaXBlLCBidWYsIHNpemUsCiAJCQkJCSZsZW4sIEJGVVNCX0JMT0NLX1RJTUVPVVQpOwogCiAJCWlmIChlcnIgfHwgKGxlbiAhPSBzaXplKSkgewpAQCAtNjEzLDIxICs2MTEsMjMgQEAKIAkJY291bnQgLT0gc2l6ZTsKIAl9CiAKLQlpZiAoKGVyciA9IHVzYl9idWxrX21zZyhiZnVzYi0+dWRldiwgcGlwZSwgTlVMTCwgMCwKLQkJCQkmbGVuLCBCRlVTQl9CTE9DS19USU1FT1VUKSkgPCAwKSB7CisJZXJyID0gdXNiX2J1bGtfbXNnKGRhdGEtPnVkZXYsIHBpcGUsIE5VTEwsIDAsCisJCQkJCSZsZW4sIEJGVVNCX0JMT0NLX1RJTUVPVVQpOworCWlmIChlcnIgPCAwKSB7CiAJCUJUX0VSUigiRXJyb3IgaW4gbnVsbCBwYWNrZXQgcmVxdWVzdCIpOwogCQlnb3RvIGVycm9yOwogCX0KIAotCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoYmZ1c2ItPnVkZXYsIDApOworCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUoZGF0YS0+dWRldiwgMCk7CiAKLSAgICAgICAgaWYgKChlcnIgPSB1c2JfY29udHJvbF9tc2coYmZ1c2ItPnVkZXYsIHBpcGUsIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT04sCi0JCQkJMCwgMiwgMCwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpKSA8IDApIHsKKwllcnIgPSB1c2JfY29udHJvbF9tc2coZGF0YS0+dWRldiwgcGlwZSwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKKwkJCQkwLCAyLCAwLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CisJaWYgKGVyciA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCBjaGFuZ2UgdG8gcnVubmluZyBjb25maWd1cmF0aW9uIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JYmZ1c2ItPnVkZXYtPnRvZ2dsZVswXSA9IGJmdXNiLT51ZGV2LT50b2dnbGVbMV0gPSAwOworCWRhdGEtPnVkZXYtPnRvZ2dsZVswXSA9IGRhdGEtPnVkZXYtPnRvZ2dsZVsxXSA9IDA7CiAKIAlCVF9JTkZPKCJCbHVlRlJJVFohIFVTQiBkZXZpY2UgcmVhZHkiKTsKIApAQCAtNjM3LDkgKzYzNyw5IEBACiBlcnJvcjoKIAlrZnJlZShidWYpOwogCi0JcGlwZSA9IHVzYl9zbmRjdHJscGlwZShiZnVzYi0+dWRldiwgMCk7CisJcGlwZSA9IHVzYl9zbmRjdHJscGlwZShkYXRhLT51ZGV2LCAwKTsKIAotCXVzYl9jb250cm9sX21zZyhiZnVzYi0+dWRldiwgcGlwZSwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKKwl1c2JfY29udHJvbF9tc2coZGF0YS0+dWRldiwgcGlwZSwgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiwKIAkJCQkwLCAwLCAwLCBOVUxMLCAwLCBVU0JfQ1RSTF9TRVRfVElNRU9VVCk7CiAKIAlyZXR1cm4gZXJyOwpAQCAtNjUyLDcgKzY1Miw3IEBACiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpidWxrX291dF9lcDsKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmJ1bGtfaW5fZXA7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXY7Ci0Jc3RydWN0IGJmdXNiICpiZnVzYjsKKwlzdHJ1Y3QgYmZ1c2JfZGF0YSAqZGF0YTsKIAogCUJUX0RCRygiaW50ZiAlcCBpZCAlcCIsIGludGYsIGlkKTsKIApAQCAtNjcyLDIzICs2NzIsMjQgQEAKIAl9CiAKIAkvKiBJbml0aWFsaXplIGNvbnRyb2wgc3RydWN0dXJlIGFuZCBsb2FkIGZpcm13YXJlICovCi0JaWYgKCEoYmZ1c2IgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYmZ1c2IpLCBHRlBfS0VSTkVMKSkpIHsKKwlkYXRhID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJmdXNiX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpIHsKIAkJQlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGNvbnRyb2wgc3RydWN0dXJlIik7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQliZnVzYi0+dWRldiA9IHVkZXY7Ci0JYmZ1c2ItPmJ1bGtfaW5fZXAgICAgPSBidWxrX2luX2VwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7Ci0JYmZ1c2ItPmJ1bGtfb3V0X2VwICAgPSBidWxrX291dF9lcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzOwotCWJmdXNiLT5idWxrX3BrdF9zaXplID0gbGUxNl90b19jcHUoYnVsa19vdXRfZXAtPmRlc2Mud01heFBhY2tldFNpemUpOworCWRhdGEtPnVkZXYgPSB1ZGV2OworCWRhdGEtPmJ1bGtfaW5fZXAgICAgPSBidWxrX2luX2VwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGF0YS0+YnVsa19vdXRfZXAgICA9IGJ1bGtfb3V0X2VwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3M7CisJZGF0YS0+YnVsa19wa3Rfc2l6ZSA9IGxlMTZfdG9fY3B1KGJ1bGtfb3V0X2VwLT5kZXNjLndNYXhQYWNrZXRTaXplKTsKIAotCXJ3bG9ja19pbml0KCZiZnVzYi0+bG9jayk7CisJcndsb2NrX2luaXQoJmRhdGEtPmxvY2spOwogCi0JYmZ1c2ItPnJlYXNzZW1ibHkgPSBOVUxMOworCWRhdGEtPnJlYXNzZW1ibHkgPSBOVUxMOwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmYmZ1c2ItPnRyYW5zbWl0X3EpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmJmdXNiLT5wZW5kaW5nX3EpOwotCXNrYl9xdWV1ZV9oZWFkX2luaXQoJmJmdXNiLT5jb21wbGV0ZWRfcSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZGF0YS0+dHJhbnNtaXRfcSk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZGF0YS0+cGVuZGluZ19xKTsKKwlza2JfcXVldWVfaGVhZF9pbml0KCZkYXRhLT5jb21wbGV0ZWRfcSk7CiAKIAlpZiAocmVxdWVzdF9maXJtd2FyZSgmZmlybXdhcmUsICJiZnViYXNlLmZybSIsICZ1ZGV2LT5kZXYpIDwgMCkgewogCQlCVF9FUlIoIkZpcm13YXJlIHJlcXVlc3QgZmFpbGVkIik7CkBAIC02OTcsNyArNjk4LDcgQEAKIAogCUJUX0RCRygiZmlybXdhcmUgZGF0YSAlcCBzaXplICVkIiwgZmlybXdhcmUtPmRhdGEsIGZpcm13YXJlLT5zaXplKTsKIAotCWlmIChiZnVzYl9sb2FkX2Zpcm13YXJlKGJmdXNiLCBmaXJtd2FyZS0+ZGF0YSwgZmlybXdhcmUtPnNpemUpIDwgMCkgeworCWlmIChiZnVzYl9sb2FkX2Zpcm13YXJlKGRhdGEsIGZpcm13YXJlLT5kYXRhLCBmaXJtd2FyZS0+c2l6ZSkgPCAwKSB7CiAJCUJUX0VSUigiRmlybXdhcmUgbG9hZGluZyBmYWlsZWQiKTsKIAkJZ290byByZWxlYXNlOwogCX0KQEAgLTcxMSwxMCArNzEyLDEwIEBACiAJCWdvdG8gZXJyb3I7CiAJfQogCi0JYmZ1c2ItPmhkZXYgPSBoZGV2OworCWRhdGEtPmhkZXYgPSBoZGV2OwogCiAJaGRldi0+dHlwZSA9IEhDSV9VU0I7Ci0JaGRldi0+ZHJpdmVyX2RhdGEgPSBiZnVzYjsKKwloZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7CiAJU0VUX0hDSURFVl9ERVYoaGRldiwgJmludGYtPmRldik7CiAKIAloZGV2LT5vcGVuICAgICA9IGJmdXNiX29wZW47CkBAIC03MzIsNyArNzMzLDcgQEAKIAkJZ290byBlcnJvcjsKIAl9CiAKLQl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGJmdXNiKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIGRhdGEpOwogCiAJcmV0dXJuIDA7CiAKQEAgLTc0MCw3ICs3NDEsNyBAQAogCXJlbGVhc2VfZmlybXdhcmUoZmlybXdhcmUpOwogCiBlcnJvcjoKLQlrZnJlZShiZnVzYik7CisJa2ZyZWUoZGF0YSk7CiAKIGRvbmU6CiAJcmV0dXJuIC1FSU87CkBAIC03NDgsOCArNzQ5LDggQEAKIAogc3RhdGljIHZvaWQgYmZ1c2JfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQlzdHJ1Y3QgYmZ1c2IgKmJmdXNiID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGJmdXNiLT5oZGV2OworCXN0cnVjdCBiZnVzYl9kYXRhICpkYXRhID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRhdGEtPmhkZXY7CiAKIAlCVF9EQkcoImludGYgJXAiLCBpbnRmKTsKIApAQCAtNzc5LDcgKzc4MCw4IEBACiAKIAlCVF9JTkZPKCJCbHVlRlJJVFohIFVTQiBkcml2ZXIgdmVyICVzIiwgVkVSU0lPTik7CiAKLQlpZiAoKGVyciA9IHVzYl9yZWdpc3RlcigmYmZ1c2JfZHJpdmVyKSkgPCAwKQorCWVyciA9IHVzYl9yZWdpc3RlcigmYmZ1c2JfZHJpdmVyKTsKKwlpZiAoZXJyIDwgMCkKIAkJQlRfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgQmx1ZUZSSVRaISBVU0IgZHJpdmVyIik7CiAKIAlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX2xkaXNjLmMgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwppbmRleCA5M2JhMjViLi40MjBiNjQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfbGRpc2MuYwpAQCAtMjQxLDE1ICsyNDEsMTEgQEAKIAogc3RhdGljIHZvaWQgaGNpX3VhcnRfZGVzdHJ1Y3Qoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7Ci0Jc3RydWN0IGhjaV91YXJ0ICpodTsKLQogCWlmICghaGRldikKIAkJcmV0dXJuOwogCiAJQlRfREJHKCIlcyIsIGhkZXYtPm5hbWUpOwotCi0JaHUgPSAoc3RydWN0IGhjaV91YXJ0ICopIGhkZXYtPmRyaXZlcl9kYXRhOwotCWtmcmVlKGh1KTsKKwlrZnJlZShoZGV2LT5kcml2ZXJfZGF0YSk7CiB9CiAKIC8qIC0tLS0tLSBMRElTQyBwYXJ0IC0tLS0tLSAqLwpAQCAtMjcyLDcgKzI2OCw3IEBACiAJCXJldHVybiAtRUVYSVNUOwogCiAJaWYgKCEoaHUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGNpX3VhcnQpLCBHRlBfS0VSTkVMKSkpIHsKLQkJQlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBjb250cm9sbCBzdHJ1Y3R1cmUiKTsKKwkJQlRfRVJSKCJDYW4ndCBhbGxvY2F0ZSBjb250cm9sIHN0cnVjdHVyZSIpOwogCQlyZXR1cm4gLUVORklMRTsKIAl9CiAKQEAgLTM2MCw3ICszNTYsNyBAQAogICogICAgIAogICogUmV0dXJuIFZhbHVlOiAgICBOb25lCiAgKi8KLXN0YXRpYyB2b2lkIGhjaV91YXJ0X3R0eV9yZWNlaXZlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNvbnN0IF9fdTggKmRhdGEsIGNoYXIgKmZsYWdzLCBpbnQgY291bnQpCitzdGF0aWMgdm9pZCBoY2lfdWFydF90dHlfcmVjZWl2ZShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBjb25zdCB1OCAqZGF0YSwgY2hhciAqZmxhZ3MsIGludCBjb3VudCkKIHsKIAlzdHJ1Y3QgaGNpX3VhcnQgKmh1ID0gKHZvaWQgKil0dHktPmRpc2NfZGF0YTsKIApAQCAtMzc1LDcgKzM3MSw4IEBACiAJaHUtPmhkZXYtPnN0YXQuYnl0ZV9yeCArPSBjb3VudDsKIAlzcGluX3VubG9jaygmaHUtPnJ4X2xvY2spOwogCi0JaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChUVFlfVEhST1RUTEVELCZ0dHktPmZsYWdzKSAmJiB0dHktPmRyaXZlci0+dW50aHJvdHRsZSkKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KFRUWV9USFJPVFRMRUQsICZ0dHktPmZsYWdzKSAmJgorCQkJCQl0dHktPmRyaXZlci0+dW50aHJvdHRsZSkKIAkJdHR5LT5kcml2ZXItPnVudGhyb3R0bGUodHR5KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3VzYi5jCmluZGV4IGUyZDRiZWEuLjA4MDFhZjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV91c2IuYworKysgYi9kcml2ZXJzL2JsdWV0b290aC9oY2lfdXNiLmMKQEAgLTk2LDYgKzk2LDkgQEAKIAkvKiBFcmljc3NvbiB3aXRoIG5vbi1zdGFuZGFyZCBpZCAqLwogCXsgVVNCX0RFVklDRSgweDBiZGIsIDB4MTAwMikgfSwKIAorCS8qIENhbnlvbiBDTi1CVFUxIHdpdGggSElEIGludGVyZmFjZXMgKi8KKwl7IFVTQl9ERVZJQ0UoMHgwYzEwLCAweDAwMDApLCAuZHJpdmVyX2luZm8gPSBIQ0lfUkVTRVQgfSwKKwogCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYyBiL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKaW5kZXggYWFjNjdhM2EuLmEyNzhkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmx1ZXRvb3RoL2hjaV92aGNpLmMKKysrIGIvZHJpdmVycy9ibHVldG9vdGgvaGNpX3ZoY2kuYwpAQCAtMiw5ICsyLDkgQEAKICAqCiAgKiAgQmx1ZXRvb3RoIHZpcnR1YWwgSENJIGRyaXZlcgogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMSBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBNYXhpbSBLcmFzbnlhbnNreSA8bWF4a0BxdWFsY29tbS5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgTWFyY2VsIEhvbHRtYW5uIDxtYXJjZWxAaG9sdG1hbm4ub3JnPgorICogIENvcHlyaWdodCAoQykgMjAwMC0yMDAxICBRdWFsY29tbSBJbmNvcnBvcmF0ZWQKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyAgTWF4aW0gS3Jhc255YW5za3kgPG1heGtAcXVhbGNvbW0uY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNC0yMDA2ICBNYXJjZWwgSG9sdG1hbm4gPG1hcmNlbEBob2x0bWFubi5vcmc+CiAgKgogICoKICAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNzIsMjEgKzcyLDIxIEBACiAKIHN0YXRpYyBpbnQgdmhjaV9jbG9zZV9kZXYoc3RydWN0IGhjaV9kZXYgKmhkZXYpCiB7Ci0Jc3RydWN0IHZoY2lfZGF0YSAqdmhjaSA9IGhkZXYtPmRyaXZlcl9kYXRhOworCXN0cnVjdCB2aGNpX2RhdGEgKmRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAogCWlmICghdGVzdF9hbmRfY2xlYXJfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gMDsKIAotCXNrYl9xdWV1ZV9wdXJnZSgmdmhjaS0+cmVhZHEpOworCXNrYl9xdWV1ZV9wdXJnZSgmZGF0YS0+cmVhZHEpOwogCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmhjaV9mbHVzaChzdHJ1Y3QgaGNpX2RldiAqaGRldikKIHsKLQlzdHJ1Y3QgdmhjaV9kYXRhICp2aGNpID0gaGRldi0+ZHJpdmVyX2RhdGE7CisJc3RydWN0IHZoY2lfZGF0YSAqZGF0YSA9IGhkZXYtPmRyaXZlcl9kYXRhOwogCi0Jc2tiX3F1ZXVlX3B1cmdlKCZ2aGNpLT5yZWFkcSk7CisJc2tiX3F1ZXVlX3B1cmdlKCZkYXRhLT5yZWFkcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk0LDcgKzk0LDcgQEAKIHN0YXRpYyBpbnQgdmhjaV9zZW5kX2ZyYW1lKHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGhjaV9kZXYqIGhkZXYgPSAoc3RydWN0IGhjaV9kZXYgKikgc2tiLT5kZXY7Ci0Jc3RydWN0IHZoY2lfZGF0YSAqdmhjaTsKKwlzdHJ1Y3QgdmhjaV9kYXRhICpkYXRhOwogCiAJaWYgKCFoZGV2KSB7CiAJCUJUX0VSUigiRnJhbWUgZm9yIHVua25vd24gSENJIGRldmljZSAoaGRldj1OVUxMKSIpOwpAQCAtMTA0LDE1ICsxMDQsMTUgQEAKIAlpZiAoIXRlc3RfYml0KEhDSV9SVU5OSU5HLCAmaGRldi0+ZmxhZ3MpKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JdmhjaSA9IGhkZXYtPmRyaXZlcl9kYXRhOworCWRhdGEgPSBoZGV2LT5kcml2ZXJfZGF0YTsKIAogCW1lbWNweShza2JfcHVzaChza2IsIDEpLCAmYnRfY2Ioc2tiKS0+cGt0X3R5cGUsIDEpOwotCXNrYl9xdWV1ZV90YWlsKCZ2aGNpLT5yZWFkcSwgc2tiKTsKKwlza2JfcXVldWVfdGFpbCgmZGF0YS0+cmVhZHEsIHNrYik7CiAKLQlpZiAodmhjaS0+ZmxhZ3MgJiBWSENJX0ZBU1lOQykKLQkJa2lsbF9mYXN5bmMoJnZoY2ktPmZhc3luYywgU0lHSU8sIFBPTExfSU4pOworCWlmIChkYXRhLT5mbGFncyAmIFZIQ0lfRkFTWU5DKQorCQlraWxsX2Zhc3luYygmZGF0YS0+ZmFzeW5jLCBTSUdJTywgUE9MTF9JTik7CiAKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnZoY2ktPnJlYWRfd2FpdCk7CisJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZkYXRhLT5yZWFkX3dhaXQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAKIAlrZnJlZShoZGV2LT5kcml2ZXJfZGF0YSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgc3NpemVfdCB2aGNpX2dldF91c2VyKHN0cnVjdCB2aGNpX2RhdGEgKnZoY2ksCitzdGF0aWMgaW5saW5lIHNzaXplX3QgdmhjaV9nZXRfdXNlcihzdHJ1Y3QgdmhjaV9kYXRhICpkYXRhLAogCQkJCQljb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKQEAgLTEzOSw3ICsxMzksNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlza2ItPmRldiA9ICh2b2lkICopIHZoY2ktPmhkZXY7CisJc2tiLT5kZXYgPSAodm9pZCAqKSBkYXRhLT5oZGV2OwogCWJ0X2NiKHNrYiktPnBrdF90eXBlID0gKigoX191OCAqKSBza2ItPmRhdGEpOwogCXNrYl9wdWxsKHNrYiwgMSk7CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIGlubGluZSBzc2l6ZV90IHZoY2lfcHV0X3VzZXIoc3RydWN0IHZoY2lfZGF0YSAqdmhjaSwKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCB2aGNpX3B1dF91c2VyKHN0cnVjdCB2aGNpX2RhdGEgKmRhdGEsCiAJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjaGFyIF9fdXNlciAqYnVmLCBpbnQgY291bnQpCiB7CiAJY2hhciBfX3VzZXIgKnB0ciA9IGJ1ZjsKQEAgLTE2MSw0MiArMTYxLDQzIEBACiAKIAl0b3RhbCArPSBsZW47CiAKLQl2aGNpLT5oZGV2LT5zdGF0LmJ5dGVfdHggKz0gbGVuOworCWRhdGEtPmhkZXYtPnN0YXQuYnl0ZV90eCArPSBsZW47CiAKIAlzd2l0Y2ggKGJ0X2NiKHNrYiktPnBrdF90eXBlKSB7CiAJY2FzZSBIQ0lfQ09NTUFORF9QS1Q6Ci0JCXZoY2ktPmhkZXYtPnN0YXQuY21kX3R4Kys7CisJCWRhdGEtPmhkZXYtPnN0YXQuY21kX3R4Kys7CiAJCWJyZWFrOwogCiAJY2FzZSBIQ0lfQUNMREFUQV9QS1Q6Ci0JCXZoY2ktPmhkZXYtPnN0YXQuYWNsX3R4Kys7CisJCWRhdGEtPmhkZXYtPnN0YXQuYWNsX3R4Kys7CiAJCWJyZWFrOwogCiAJY2FzZSBIQ0lfU0NPREFUQV9QS1Q6Ci0JCXZoY2ktPmhkZXYtPnN0YXQuY21kX3R4Kys7CisJCWRhdGEtPmhkZXYtPnN0YXQuY21kX3R4Kys7CiAJCWJyZWFrOwogCX07CiAKIAlyZXR1cm4gdG90YWw7CiB9CiAKLXN0YXRpYyBsb2ZmX3QgdmhjaV9sbHNlZWsoc3RydWN0IGZpbGUgKiBmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKQorc3RhdGljIGxvZmZfdCB2aGNpX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbikKIHsKIAlyZXR1cm4gLUVTUElQRTsKIH0KIAotc3RhdGljIHNzaXplX3QgdmhjaV9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwb3MpCitzdGF0aWMgc3NpemVfdCB2aGNpX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKIAlERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTsKLQlzdHJ1Y3QgdmhjaV9kYXRhICp2aGNpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aGNpX2RhdGEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIAlzc2l6ZV90IHJldCA9IDA7CiAKLQlhZGRfd2FpdF9xdWV1ZSgmdmhjaS0+cmVhZF93YWl0LCAmd2FpdCk7CisJYWRkX3dhaXRfcXVldWUoJmRhdGEtPnJlYWRfd2FpdCwgJndhaXQpOwogCXdoaWxlIChjb3VudCkgewogCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCi0JCXNrYiA9IHNrYl9kZXF1ZXVlKCZ2aGNpLT5yZWFkcSk7CisJCXNrYiA9IHNrYl9kZXF1ZXVlKCZkYXRhLT5yZWFkcSk7CiAJCWlmICghc2tiKSB7CiAJCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKIAkJCQlyZXQgPSAtRUFHQUlOOwpAQCAtMjEzLDcgKzIxNCw3IEBACiAJCX0KIAogCQlpZiAoYWNjZXNzX29rKFZFUklGWV9XUklURSwgYnVmLCBjb3VudCkpCi0JCQlyZXQgPSB2aGNpX3B1dF91c2VyKHZoY2ksIHNrYiwgYnVmLCBjb3VudCk7CisJCQlyZXQgPSB2aGNpX3B1dF91c2VyKGRhdGEsIHNrYiwgYnVmLCBjb3VudCk7CiAJCWVsc2UKIAkJCXJldCA9IC1FRkFVTFQ7CiAKQEAgLTIyMSw3ICsyMjIsNyBAQAogCQlicmVhazsKIAl9CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQlyZW1vdmVfd2FpdF9xdWV1ZSgmdmhjaS0+cmVhZF93YWl0LCAmd2FpdCk7CisJcmVtb3ZlX3dhaXRfcXVldWUoJmRhdGEtPnJlYWRfd2FpdCwgJndhaXQpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTIyOSwyMSArMjMwLDIxIEBACiBzdGF0aWMgc3NpemVfdCB2aGNpX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLAogCQkJY29uc3QgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKIHsKLQlzdHJ1Y3QgdmhjaV9kYXRhICp2aGNpID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB2aGNpX2RhdGEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgYnVmLCBjb3VudCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JcmV0dXJuIHZoY2lfZ2V0X3VzZXIodmhjaSwgYnVmLCBjb3VudCk7CisJcmV0dXJuIHZoY2lfZ2V0X3VzZXIoZGF0YSwgYnVmLCBjb3VudCk7CiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmhjaV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICp3YWl0KQogewotCXN0cnVjdCB2aGNpX2RhdGEgKnZoY2kgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZoY2lfZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXBvbGxfd2FpdChmaWxlLCAmdmhjaS0+cmVhZF93YWl0LCB3YWl0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJmRhdGEtPnJlYWRfd2FpdCwgd2FpdCk7CiAKLQlpZiAoIXNrYl9xdWV1ZV9lbXB0eSgmdmhjaS0+cmVhZHEpKQorCWlmICghc2tiX3F1ZXVlX2VtcHR5KCZkYXRhLT5yZWFkcSkpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCiAJcmV0dXJuIFBPTExPVVQgfCBQT0xMV1JOT1JNOwpAQCAtMjU3LDI2ICsyNTgsMjYgQEAKIAogc3RhdGljIGludCB2aGNpX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0Jc3RydWN0IHZoY2lfZGF0YSAqdmhjaTsKKwlzdHJ1Y3QgdmhjaV9kYXRhICpkYXRhOwogCXN0cnVjdCBoY2lfZGV2ICpoZGV2OwogCi0JdmhjaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX2RhdGEpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXZoY2kpCisJZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2aGNpX2RhdGEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRhdGEpCiAJCXJldHVybiAtRU5PTUVNOwogCi0Jc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdmhjaS0+cmVhZHEpOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZoY2ktPnJlYWRfd2FpdCk7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmZGF0YS0+cmVhZHEpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRhdGEtPnJlYWRfd2FpdCk7CiAKIAloZGV2ID0gaGNpX2FsbG9jX2RldigpOwogCWlmICghaGRldikgewotCQlrZnJlZSh2aGNpKTsKKwkJa2ZyZWUoZGF0YSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXZoY2ktPmhkZXYgPSBoZGV2OworCWRhdGEtPmhkZXYgPSBoZGV2OwogCi0JaGRldi0+dHlwZSA9IEhDSV9WSENJOwotCWhkZXYtPmRyaXZlcl9kYXRhID0gdmhjaTsKKwloZGV2LT50eXBlID0gSENJX1ZJUlRVQUw7CisJaGRldi0+ZHJpdmVyX2RhdGEgPSBkYXRhOwogCiAJaGRldi0+b3BlbiAgICAgPSB2aGNpX29wZW5fZGV2OwogCWhkZXYtPmNsb3NlICAgID0gdmhjaV9jbG9zZV9kZXY7CkBAIC0yODgsMjAgKzI4OSwyMCBAQAogCiAJaWYgKGhjaV9yZWdpc3Rlcl9kZXYoaGRldikgPCAwKSB7CiAJCUJUX0VSUigiQ2FuJ3QgcmVnaXN0ZXIgSENJIGRldmljZSIpOwotCQlrZnJlZSh2aGNpKTsKKwkJa2ZyZWUoZGF0YSk7CiAJCWhjaV9mcmVlX2RldihoZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSB2aGNpOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRhdGE7CiAKIAlyZXR1cm4gbm9uc2Vla2FibGVfb3Blbihpbm9kZSwgZmlsZSk7CiB9CiAKIHN0YXRpYyBpbnQgdmhjaV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCB2aGNpX2RhdGEgKnZoY2kgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSB2aGNpLT5oZGV2OworCXN0cnVjdCB2aGNpX2RhdGEgKmRhdGEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkYXRhLT5oZGV2OwogCiAJaWYgKGhjaV91bnJlZ2lzdGVyX2RldihoZGV2KSA8IDApIHsKIAkJQlRfRVJSKCJDYW4ndCB1bnJlZ2lzdGVyIEhDSSBkZXZpY2UgJXMiLCBoZGV2LT5uYW1lKTsKQEAgLTMxNiwxNyArMzE3LDE3IEBACiAKIHN0YXRpYyBpbnQgdmhjaV9mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG9uKQogewotCXN0cnVjdCB2aGNpX2RhdGEgKnZoY2kgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHZoY2lfZGF0YSAqZGF0YSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlpbnQgZXJyOwogCi0JZXJyID0gZmFzeW5jX2hlbHBlcihmZCwgZmlsZSwgb24sICZ2aGNpLT5mYXN5bmMpOworCWVyciA9IGZhc3luY19oZWxwZXIoZmQsIGZpbGUsIG9uLCAmZGF0YS0+ZmFzeW5jKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKIAogCWlmIChvbikKLQkJdmhjaS0+ZmxhZ3MgfD0gVkhDSV9GQVNZTkM7CisJCWRhdGEtPmZsYWdzIHw9IFZIQ0lfRkFTWU5DOwogCWVsc2UKLQkJdmhjaS0+ZmxhZ3MgJj0gflZIQ0lfRkFTWU5DOworCQlkYXRhLT5mbGFncyAmPSB+VkhDSV9GQVNZTkM7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vS2NvbmZpZyBiL2RyaXZlcnMvY2Ryb20vS2NvbmZpZwppbmRleCBmZjU2NTJkLi40YjEyZTkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Nkcm9tL0tjb25maWcKKysrIGIvZHJpdmVycy9jZHJvbS9LY29uZmlnCkBAIC0zLDcgKzMsNyBAQAogIwogCiBtZW51ICJPbGQgQ0QtUk9NIGRyaXZlcnMgKG5vdCBTQ1NJLCBub3QgSURFKSIKLQlkZXBlbmRzIG9uIElTQQorCWRlcGVuZHMgb24gSVNBICYmIEJMT0NLCiAKIGNvbmZpZyBDRF9OT19JREVTQ1NJCiAJYm9vbCAiU3VwcG9ydCBub24tU0NTSS9JREUvQVRBUEkgQ0RST00gZHJpdmVzIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jZHJvbS9jZHJvbS5jIGIvZHJpdmVycy9jZHJvbS9jZHJvbS5jCmluZGV4IGQyMzljZjguLmIzOGM4NGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2Ryb20uYworKysgYi9kcml2ZXJzL2Nkcm9tL2Nkcm9tLmMKQEAgLTIxMjksNyArMjEyOSw3IEBACiAJCXJxLT5jbWRbOV0gPSAweGY4OwogCiAJCXJxLT5jbWRfbGVuID0gMTI7Ci0JCXJxLT5mbGFncyB8PSBSRVFfQkxPQ0tfUEM7CisJCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOwogCQlycS0+dGltZW91dCA9IDYwICogSFo7CiAJCWJpbyA9IHJxLT5iaW87CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMgYi9kcml2ZXJzL2Nkcm9tL2NkdTMxYS5jCmluZGV4IDM3YmRiMDEuLmNjZDkxYzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2Ryb20vY2R1MzFhLmMKKysrIGIvZHJpdmVycy9jZHJvbS9jZHUzMWEuYwpAQCAtMTMzOCw4ICsxMzM4LDEwIEBACiAJCX0KIAogCQkvKiBXVEY/Pz8gKi8KLQkJaWYgKCEocmVxLT5mbGFncyAmIFJFUV9DTUQpKQorCQlpZiAoIWJsa19mc19yZXF1ZXN0KHJlcSkpIHsKKwkJCWVuZF9yZXF1ZXN0KHJlcSwgMCk7CiAJCQljb250aW51ZTsKKwkJfQogCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBXUklURSkgewogCQkJZW5kX3JlcXVlc3QocmVxLCAwKTsKIAkJCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL0tjb25maWcgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwppbmRleCA1MmVhOTRiLi5iZGUxYzY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvS2NvbmZpZwpAQCAtNDM5LDYgKzQzOSwxNCBAQAogICAgICAgICAgSWYgeW91IGhhdmUgYW4gU0dJIEFsdGl4IHdpdGggYW4gYXR0YWNoZWQgU0FCcmljawogICAgICAgICAgc2F5IFkgb3IgTSBoZXJlLCBvdGhlcndpc2Ugc2F5IE4uCiAKK2NvbmZpZyBNU1BFQworCXRyaXN0YXRlICJNZW1vcnkgc3BlY2lhbCBvcGVyYXRpb25zIGRyaXZlciIKKwlkZXBlbmRzIG9uIElBNjQKKwloZWxwCisJICBJZiB5b3UgaGF2ZSBhbiBpYTY0IGFuZCB5b3Ugd2FudCB0byBlbmFibGUgbWVtb3J5IHNwZWNpYWwKKwkgIG9wZXJhdGlvbnMgc3VwcG9ydCAoZm9ybWVybHkga25vd24gYXMgZmV0Y2hvcCksIHNheSBZIGhlcmUsCisJICBvdGhlcndpc2Ugc2F5IE4uCisKIHNvdXJjZSAiZHJpdmVycy9zZXJpYWwvS2NvbmZpZyIKIAogY29uZmlnIFVOSVg5OF9QVFlTCkBAIC03MzksNyArNzQ3LDcgQEAKIAogY29uZmlnIFJUQwogCXRyaXN0YXRlICJFbmhhbmNlZCBSZWFsIFRpbWUgQ2xvY2sgU3VwcG9ydCIKLQlkZXBlbmRzIG9uICFQUEMgJiYgIVBBUklTQyAmJiAhSUE2NCAmJiAhTTY4SyAmJiAoIVNQQVJDIHx8IFBDSSkgJiYgIUZSViAmJiAhQVJNCisJZGVwZW5kcyBvbiAhUFBDICYmICFQQVJJU0MgJiYgIUlBNjQgJiYgIU02OEsgJiYgKCFTUEFSQyB8fCBQQ0kpICYmICFGUlYgJiYgIUFSTSAmJiAhU1VQRVJICiAJLS0taGVscC0tLQogCSAgSWYgeW91IHNheSBZIGhlcmUgYW5kIGNyZWF0ZSBhIGNoYXJhY3RlciBzcGVjaWFsIGZpbGUgL2Rldi9ydGMgd2l0aAogCSAgbWFqb3IgbnVtYmVyIDEwIGFuZCBtaW5vciBudW1iZXIgMTM1IHVzaW5nIG1rbm9kICgibWFuIG1rbm9kIiksIHlvdQpAQCAtODIzLDE0ICs4MzEsNiBAQAogCSAgd2lsbCBnZXQgYWNjZXNzIHRvIHRoZSByZWFsIHRpbWUgY2xvY2sgKG9yIGhhcmR3YXJlIGNsb2NrKSBidWlsdAogCSAgaW50byB5b3VyIGNvbXB1dGVyLgogCi1jb25maWcgUzNDMjQxMF9SVEMKLQlib29sICJTM0MyNDEwIFJUQyBEcml2ZXIiCi0JZGVwZW5kcyBvbiBBUkNIX1MzQzI0MTAKLQloZWxwCi0JICBSVEMgKFJlYWx0aW1lIENsb2NrKSBkcml2ZXIgZm9yIHRoZSBjbG9jayBpbmJ1aWx0IGludG8gdGhlCi0JICBTYW1zdW5nIFMzQzI0MTAuIFRoaXMgY2FuIHByb3ZpZGUgcGVyaW9kaWMgaW50ZXJydXB0IHJhdGVzCi0JICBmcm9tIDFIeiB0byA2NEh6IGZvciB1c2VyIHByb2dyYW1zLCBhbmQgd2FrZXVwIGZyb20gQWxhcm0uCi0KIGNvbmZpZyBDT0JBTFRfTENECiAJYm9vbCAiU3VwcG9ydCBmb3IgQ29iYWx0IExDRCIKIAlkZXBlbmRzIG9uIE1JUFNfQ09CQUxUCkBAIC0xMDA2LDYgKzEwMDYsNyBAQAogCiBjb25maWcgUkFXX0RSSVZFUgogCXRyaXN0YXRlICJSQVcgZHJpdmVyICgvZGV2L3Jhdy9yYXdOKSAoT0JTT0xFVEUpIgorCWRlcGVuZHMgb24gQkxPQ0sKIAloZWxwCiAJICBUaGUgcmF3IGRyaXZlciBwZXJtaXRzIGJsb2NrIGRldmljZXMgdG8gYmUgYm91bmQgdG8gL2Rldi9yYXcvcmF3Ti4gCiAJICBPbmNlIGJvdW5kLCBJL08gYWdhaW5zdCAvZGV2L3Jhdy9yYXdOIHVzZXMgZWZmaWNpZW50IHplcm8tY29weSBJL08uIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCmluZGV4IDhjNmRmYzYyLi4xOTExNGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9jaGFyL01ha2VmaWxlCkBAIC00Nyw2ICs0Nyw3IEBACiBvYmotJChDT05GSUdfSFZDX0RSSVZFUikJKz0gaHZjX2NvbnNvbGUubwogb2JqLSQoQ09ORklHX1JBV19EUklWRVIpCSs9IHJhdy5vCiBvYmotJChDT05GSUdfU0dJX1NOU0MpCQkrPSBzbnNjLm8gc25zY19ldmVudC5vCitvYmotJChDT05GSUdfTVNQRUMpCQkrPSBtc3BlYy5vCiBvYmotJChDT05GSUdfTU1USU1FUikJCSs9IG1tdGltZXIubwogb2JqLSQoQ09ORklHX1ZJT0NPTlMpCQkrPSB2aW9jb25zLm8KIG9iai0kKENPTkZJR19WSU9UQVBFKQkJKz0gdmlvdGFwZS5vCkBAIC02OCw3ICs2OSw2IEBACiBvYmotJChDT05GSUdfU0dJX0RTMTI4NikJKz0gZHMxMjg2Lm8KIG9iai0kKENPTkZJR19TR0lfSVAyN19SVEMpCSs9IGlwMjctcnRjLm8KIG9iai0kKENPTkZJR19EUzEzMDIpCQkrPSBkczEzMDIubwotb2JqLSQoQ09ORklHX1MzQzI0MTBfUlRDKQkrPSBzM2MyNDEwLXJ0Yy5vCiBpZmVxICgkKENPTkZJR19HRU5FUklDX05WUkFNKSx5KQogICBvYmotJChDT05GSUdfTlZSQU0pCSs9IGdlbmVyaWNfbnZyYW0ubwogZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnIGIvZHJpdmVycy9jaGFyL2RybS9LY29uZmlnCmluZGV4IDUyNzhjMzguLmVmODMzYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vS2NvbmZpZworKysgYi9kcml2ZXJzL2NoYXIvZHJtL0tjb25maWcKQEAgLTYwLDcgKzYwLDkgQEAKIAkgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhIHN5c3RlbSB0aGF0IGhhcyBJbnRlbCA4MzBNLCA4NDVHLAogCSAgODUyR00sIDg1NUdNIG9yIDg2NUcgaW50ZWdyYXRlZCBncmFwaGljcy4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGk4MzAuICBBR1Agc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIKLQkgIHRvIHdvcmsuIFRoaXMgZHJpdmVyIHdpbGwgZXZlbnR1YWxseSBiZSByZXBsYWNlZCBieSB0aGUgaTkxNSBvbmUuCisJICB0byB3b3JrLiBUaGlzIGRyaXZlciBpcyB1c2VkIGJ5IHRoZSBvbGRlciBYIHJlbGVhc2VzIFgub3JnIDYuNyBhbmQKKwkgIFhGcmVlODYgNC4zLiBJZiB1bnN1cmUsIGJ1aWxkIHRoaXMgYW5kIGk5MTUgYXMgbW9kdWxlcyBhbmQgdGhlIFggc2VydmVyCisJICB3aWxsIGxvYWQgdGhlIGNvcnJlY3Qgb25lLgogCiBjb25maWcgRFJNX0k5MTUKIAl0cmlzdGF0ZSAiaTkxNSBkcml2ZXIiCkBAIC02OCw4ICs3MCw5IEBACiAJICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYSBzeXN0ZW0gdGhhdCBoYXMgSW50ZWwgODMwTSwgODQ1RywKIAkgIDg1MkdNLCA4NTVHTSA4NjVHIG9yIDkxNUcgaW50ZWdyYXRlZCBncmFwaGljcy4gIElmIE0gaXMgc2VsZWN0ZWQsIHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGk5MTUuICBBR1Agc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgdGhpcyBkcml2ZXIKLQkgIHRvIHdvcmsuIFRoaXMgZHJpdmVyIHdpbGwgZXZlbnR1YWxseSByZXBsYWNlIHRoZSBJODMwIGRyaXZlciwgd2hlbgotCSAgbGF0ZXIgcmVsZWFzZSBvZiBYIHN0YXJ0IHRvIHVzZSB0aGUgbmV3IEREWCBhbmQgRFJJLgorCSAgdG8gd29yay4gVGhpcyBkcml2ZXIgaXMgdXNlZCBieSB0aGUgSW50ZWwgZHJpdmVyIGluIFgub3JnIDYuOCBhbmQKKwkgIFhGcmVlODYgNC40IGFuZCBhYm92ZS4gSWYgdW5zdXJlLCBidWlsZCB0aGlzIGFuZCBpODMwIGFzIG1vZHVsZXMgYW5kIAorCSAgdGhlIFggc2VydmVyIHdpbGwgbG9hZCB0aGUgY29ycmVjdCBvbmUuCiAJCiBlbmRjaG9pY2UKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9NYWtlZmlsZSBiL2RyaXZlcnMvY2hhci9kcm0vTWFrZWZpbGUKaW5kZXggOWQxODBjNC4uM2FkMGY2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvZHJtL01ha2VmaWxlCkBAIC02LDcgKzYsNyBAQAogCQlkcm1fZHJ2Lm8gZHJtX2ZvcHMubyBkcm1faW9jdGwubyBkcm1faXJxLm8gXAogCQlkcm1fbG9jay5vIGRybV9tZW1vcnkubyBkcm1fcHJvYy5vIGRybV9zdHViLm8gZHJtX3ZtLm8gXAogCQlkcm1fYWdwc3VwcG9ydC5vIGRybV9zY2F0dGVyLm8gYXRpX3BjaWdhcnQubyBkcm1fcGNpLm8gXAotCQlkcm1fc3lzZnMubworCQlkcm1fc3lzZnMubyBkcm1faGFzaHRhYi5vIGRybV9zbWFuLm8gZHJtX21tLm8KIAogdGRmeC1vYmpzICAgOj0gdGRmeF9kcnYubwogcjEyOC1vYmpzICAgOj0gcjEyOF9kcnYubyByMTI4X2NjZS5vIHIxMjhfc3RhdGUubyByMTI4X2lycS5vCkBAIC0xNiw5ICsxNiw5IEBACiBpOTE1LW9ianMgICA6PSBpOTE1X2Rydi5vIGk5MTVfZG1hLm8gaTkxNV9pcnEubyBpOTE1X21lbS5vCiByYWRlb24tb2JqcyA6PSByYWRlb25fZHJ2Lm8gcmFkZW9uX2NwLm8gcmFkZW9uX3N0YXRlLm8gcmFkZW9uX21lbS5vIHJhZGVvbl9pcnEubyByMzAwX2NtZGJ1Zi5vCiBmZmItb2JqcyAgICA6PSBmZmJfZHJ2Lm8gZmZiX2NvbnRleHQubwotc2lzLW9ianMgICAgOj0gc2lzX2Rydi5vIHNpc19kcy5vIHNpc19tbS5vCitzaXMtb2JqcyAgICA6PSBzaXNfZHJ2Lm8gc2lzX21tLm8KIHNhdmFnZS1vYmpzIDo9IHNhdmFnZV9kcnYubyBzYXZhZ2VfYmNpLm8gc2F2YWdlX3N0YXRlLm8KLXZpYS1vYmpzICAgIDo9IHZpYV9pcnEubyB2aWFfZHJ2Lm8gdmlhX2RzLm8gdmlhX21hcC5vIHZpYV9tbS5vIHZpYV9kbWEubyB2aWFfdmVyaWZpZXIubyB2aWFfdmlkZW8ubyB2aWFfZG1hYmxpdC5vCit2aWEtb2JqcyAgICA6PSB2aWFfaXJxLm8gdmlhX2Rydi5vIHZpYV9tYXAubyB2aWFfbW0ubyB2aWFfZG1hLm8gdmlhX3ZlcmlmaWVyLm8gdmlhX3ZpZGVvLm8gdmlhX2RtYWJsaXQubwogCiBpZmVxICgkKENPTkZJR19DT01QQVQpLHkpCiBkcm0tb2JqcyAgICArPSBkcm1faW9jMzIubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1QLmggYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAppbmRleCBkMmE1NjE4Li43NjkwYTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybVAuaApAQCAtNzksNiArNzksNyBAQAogI2RlZmluZSBfX09TX0hBU19NVFJSIChkZWZpbmVkKENPTkZJR19NVFJSKSkKIAogI2luY2x1ZGUgImRybV9vc19saW51eC5oIgorI2luY2x1ZGUgImRybV9oYXNodGFiLmgiCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qKiBcbmFtZSBEUk0gdGVtcGxhdGUgY3VzdG9taXphdGlvbiBkZWZhdWx0cyAqLwpAQCAtMTA0LDcgKzEwNSw3IEBACiAjZGVmaW5lIERSTV9ERUJVR19DT0RFIDIJICAvKio8IEluY2x1ZGUgZGVidWdnaW5nIGNvZGUgaWYgPiAxLCB0aGVuCiAJCQkJICAgICBhbHNvIGluY2x1ZGUgbG9vcGluZyBkZXRlY3Rpb24uICovCiAKLSNkZWZpbmUgRFJNX0hBU0hfU0laRQkgICAgICAxNiAvKio8IFNpemUgb2Yga2V5IGhhc2ggdGFibGUuIE11c3QgYmUgcG93ZXIgb2YgMi4gKi8KKyNkZWZpbmUgRFJNX01BR0lDX0hBU0hfT1JERVIgIDQgIC8qKjwgU2l6ZSBvZiBrZXkgaGFzaCB0YWJsZS4gTXVzdCBiZSBwb3dlciBvZiAyLiAqLwogI2RlZmluZSBEUk1fS0VSTkVMX0NPTlRFWFQgICAgMAkgLyoqPCBDaGFuZ2UgZHJtX3Jlc2N0eCBpZiBjaGFuZ2VkICovCiAjZGVmaW5lIERSTV9SRVNFUlZFRF9DT05URVhUUyAxCSAvKio8IENoYW5nZSBkcm1fcmVzY3R4IGlmIGNoYW5nZWQgKi8KICNkZWZpbmUgRFJNX0xPT1BJTkdfTElNSVQgICAgIDUwMDAwMDAKQEAgLTEzNCwxOSArMTM1LDEyIEBACiAjZGVmaW5lIERSTV9NRU1fQ1RYQklUTUFQIDE4CiAjZGVmaW5lIERSTV9NRU1fU1RVQiAgICAgIDE5CiAjZGVmaW5lIERSTV9NRU1fU0dMSVNUUyAgIDIwCi0jZGVmaW5lIERSTV9NRU1fQ1RYTElTVCAgMjEKKyNkZWZpbmUgRFJNX01FTV9DVFhMSVNUICAgMjEKKyNkZWZpbmUgRFJNX01FTV9NTSAgICAgICAgMjIKKyNkZWZpbmUgRFJNX01FTV9IQVNIVEFCICAgMjMKIAogI2RlZmluZSBEUk1fTUFYX0NUWEJJVE1BUCAoUEFHRV9TSVpFICogOCkKLQotLypAfSovCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKiBcbmFtZSBCYWNrd2FyZCBjb21wYXRpYmlsaXR5IHNlY3Rpb24gKi8KLS8qQHsqLwotCi0jZGVmaW5lIERSTV9SUFJfQVJHKHZtYSkgdm1hLAotCi0jZGVmaW5lIFZNX09GRlNFVCh2bWEpICgodm1hKS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCkKKyNkZWZpbmUgRFJNX01BUF9IQVNIX09GRlNFVCAweDEwMDAwMDAwCiAKIC8qQH0qLwogCkBAIC0yMTEsOCArMjA1LDYgQEAKIC8qQHsqLwogCiAjZGVmaW5lIERSTV9BUlJBWV9TSVpFKHgpIEFSUkFZX1NJWkUoeCkKLSNkZWZpbmUgRFJNX01JTihhLGIpIG1pbihhLGIpCi0jZGVmaW5lIERSTV9NQVgoYSxiKSBtYXgoYSxiKQogCiAjZGVmaW5lIERSTV9MRUZUQ09VTlQoeCkgKCgoeCktPnJwICsgKHgpLT5jb3VudCAtICh4KS0+d3ApICUgKCh4KS0+Y291bnQgKyAxKSkKICNkZWZpbmUgRFJNX0JVRkNPVU5UKHgpICgoeCktPmNvdW50IC0gRFJNX0xFRlRDT1VOVCh4KSkKQEAgLTI4Niw3ICsyNzgsOCBAQAogfSBkcm1fZGV2c3RhdGVfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hZ2ljX2VudHJ5IHsKLQlkcm1fbWFnaWNfdCBtYWdpYzsKKwlkcm1faGFzaF9pdGVtX3QgaGFzaF9pdGVtOworCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXY7CiAJc3RydWN0IGRybV9tYWdpY19lbnRyeSAqbmV4dDsKIH0gZHJtX21hZ2ljX2VudHJ5X3Q7CkBAIC00OTMsNiArNDg2LDcgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcF9saXN0IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7CQkvKio8IGxpc3QgaGVhZCAqLworCWRybV9oYXNoX2l0ZW1fdCBoYXNoOwogCWRybV9tYXBfdCAqbWFwOwkJCS8qKjwgbWFwcGluZyAqLwogCXVuc2lnbmVkIGludCB1c2VyX3Rva2VuOwogfSBkcm1fbWFwX2xpc3RfdDsKQEAgLTUyNyw2ICs1MjEsMjIgQEAKIAlkcm1fbG9jYWxfbWFwX3QgbWFwcGluZzsKIH0gZHJtX2F0aV9wY2lnYXJ0X2luZm87CiAKKy8qCisgKiBHZW5lcmljIG1lbW9yeSBtYW5hZ2VyIHN0cnVjdHMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZHJtX21tX25vZGUgeworCXN0cnVjdCBsaXN0X2hlYWQgZmxfZW50cnk7CisJc3RydWN0IGxpc3RfaGVhZCBtbF9lbnRyeTsKKwlpbnQgZnJlZTsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0OworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwl2b2lkICpwcml2YXRlOworfSBkcm1fbW1fbm9kZV90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fbW0geworCWRybV9tbV9ub2RlX3Qgcm9vdF9ub2RlOworfSBkcm1fbW1fdDsKKwogLyoqCiAgKiBEUk0gZHJpdmVyIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50IHRoZSBjb21tb24gY29kZSBmb3IKICAqIGEgZmFtaWx5IG9mIGNhcmRzLiBUaGVyZSB3aWxsIG9uZSBkcm1fZGV2aWNlIGZvciBlYWNoIGNhcmQgcHJlc2VudApAQCAtNjQ2LDEzICs2NTYsMTUgQEAKIAkvKkB7ICovCiAJZHJtX2ZpbGVfdCAqZmlsZV9maXJzdDsJCS8qKjwgZmlsZSBsaXN0IGhlYWQgKi8KIAlkcm1fZmlsZV90ICpmaWxlX2xhc3Q7CQkvKio8IGZpbGUgbGlzdCB0YWlsICovCi0JZHJtX21hZ2ljX2hlYWRfdCBtYWdpY2xpc3RbRFJNX0hBU0hfU0laRV07CS8qKjwgbWFnaWMgaGFzaCB0YWJsZSAqLworCWRybV9vcGVuX2hhc2hfdCBtYWdpY2xpc3Q7CS8qKjwgbWFnaWMgaGFzaCB0YWJsZSAqLworCXN0cnVjdCBsaXN0X2hlYWQgbWFnaWNmcmVlOwogCS8qQH0gKi8KIAogCS8qKiBcbmFtZSBNZW1vcnkgbWFuYWdlbWVudCAqLwogCS8qQHsgKi8KIAlkcm1fbWFwX2xpc3RfdCAqbWFwbGlzdDsJLyoqPCBMaW5rZWQgbGlzdCBvZiByZWdpb25zICovCiAJaW50IG1hcF9jb3VudDsJCQkvKio8IE51bWJlciBvZiBtYXBwYWJsZSByZWdpb25zICovCisJZHJtX29wZW5faGFzaF90IG1hcF9oYXNoOwkvKio8IFVzZXIgdG9rZW4gaGFzaCB0YWJsZSBmb3IgbWFwcyAqLwogCiAJLyoqIFxuYW1lIENvbnRleHQgaGFuZGxlIG1hbmFnZW1lbnQgKi8KIAkvKkB7ICovCkBAIC03MTEsMTAgKzcyMyw4IEBACiAJZHJtX2FncF9oZWFkX3QgKmFncDsJLyoqPCBBR1AgZGF0YSAqLwogCiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CQkvKio8IFBDSSBkZXZpY2Ugc3RydWN0dXJlICovCi0JaW50IHBjaV9kb21haW47CQkJLyoqPCBQQ0kgYnVzIGRvbWFpbiBudW1iZXIgKi8KLQlpbnQgcGNpX2J1czsJCQkvKio8IFBDSSBidXMgbnVtYmVyICovCi0JaW50IHBjaV9zbG90OwkJCS8qKjwgUENJIHNsb3QgbnVtYmVyICovCi0JaW50IHBjaV9mdW5jOwkJCS8qKjwgUENJIGZ1bmN0aW9uIG51bWJlciAqLworCWludCBwY2lfdmVuZG9yOwkJCS8qKjwgUENJIHZlbmRvciBpZCAqLworCWludCBwY2lfZGV2aWNlOwkJCS8qKjwgUENJIGRldmljZSBpZCAqLwogI2lmZGVmIF9fYWxwaGFfXwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKICNlbmRpZgpAQCAtNzM2LDYgKzc0NiwxMiBAQAogCXJldHVybiAoKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBmZWF0dXJlKSA/IDEgOiAwKTsKIH0KIAorI2lmZGVmIF9fYWxwaGFfXworI2RlZmluZSBkcm1fZ2V0X3BjaV9kb21haW4oZGV2KSBkZXYtPmhvc2UtPmJ1cy0+bnVtYmVyCisjZWxzZQorI2RlZmluZSBkcm1fZ2V0X3BjaV9kb21haW4oZGV2KSAwCisjZW5kaWYKKwogI2lmIF9fT1NfSEFTX0FHUAogc3RhdGljIGlubGluZSBpbnQgZHJtX2NvcmVfaGFzX0FHUChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogewpAQCAtMTAxMSw2ICsxMDI3LDE4IEBACiAJCQkJCQkgZHJtX2hlYWRfdCAqaGVhZCk7CiBleHRlcm4gdm9pZCBkcm1fc3lzZnNfZGV2aWNlX3JlbW92ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYpOwogCisvKgorICogQmFzaWMgbWVtb3J5IG1hbmFnZXIgc3VwcG9ydCAoZHJtX21tLmMpCisgKi8KK2V4dGVybiBkcm1fbW1fbm9kZV90ICpkcm1fbW1fZ2V0X2Jsb2NrKGRybV9tbV9ub2RlX3QgKiBwYXJlbnQsCisJCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICAgdW5zaWduZWQgYWxpZ25tZW50KTsKK2V4dGVybiB2b2lkIGRybV9tbV9wdXRfYmxvY2soZHJtX21tX3QgKm1tLCBkcm1fbW1fbm9kZV90ICpjdXIpOworZXh0ZXJuIGRybV9tbV9ub2RlX3QgKmRybV9tbV9zZWFyY2hfZnJlZShjb25zdCBkcm1fbW1fdCAqbW0sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkJIHVuc2lnbmVkIGFsaWdubWVudCwgaW50IGJlc3RfbWF0Y2gpOworZXh0ZXJuIGludCBkcm1fbW1faW5pdChkcm1fbW1fdCAqbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CitleHRlcm4gdm9pZCBkcm1fbW1fdGFrZWRvd24oZHJtX21tX3QgKm1tKTsKKwogLyogSW5saW5lIHJlcGxhY2VtZW50cyBmb3IgRFJNX0lPUkVNQVAgbWFjcm9zICovCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9tYXAgKm1hcCwKIAkJCQkJc3RydWN0IGRybV9kZXZpY2UgKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2F1dGguYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2F1dGguYwppbmRleCAyYTM3NTg2Li5jN2IxOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9hdXRoLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fYXV0aC5jCkBAIC0zNiwyMCArMzYsNiBAQAogI2luY2x1ZGUgImRybVAuaCIKIAogLyoqCi0gKiBHZW5lcmF0ZSBhIGhhc2gga2V5IGZyb20gYSBtYWdpYy4KLSAqCi0gKiBccGFyYW0gbWFnaWMgbWFnaWMuCi0gKiBccmV0dXJuIGhhc2gga2V5LgotICoKLSAqIFRoZSBrZXkgaXMgdGhlIG1vZHVsdXMgb2YgdGhlIGhhc2ggdGFibGUgc2l6ZSwgI0RSTV9IQVNIX1NJWkUsIHdoaWNoIG11c3QgYmUKLSAqIGEgcG93ZXIgb2YgMi4KLSAqLwotc3RhdGljIGludCBkcm1faGFzaF9tYWdpYyhkcm1fbWFnaWNfdCBtYWdpYykKLXsKLQlyZXR1cm4gbWFnaWMgJiAoRFJNX0hBU0hfU0laRSAtIDEpOwotfQotCi0vKioKICAqIEZpbmQgdGhlIGZpbGUgd2l0aCB0aGUgZ2l2ZW4gbWFnaWMgbnVtYmVyLgogICoKICAqIFxwYXJhbSBkZXYgRFJNIGRldmljZS4KQEAgLTYzLDE0ICs0OSwxMiBAQAogewogCWRybV9maWxlX3QgKnJldHZhbCA9IE5VTEw7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKnB0OwotCWludCBoYXNoID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOworCWRybV9oYXNoX2l0ZW1fdCAqaGFzaDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlmb3IgKHB0ID0gZGV2LT5tYWdpY2xpc3RbaGFzaF0uaGVhZDsgcHQ7IHB0ID0gcHQtPm5leHQpIHsKLQkJaWYgKHB0LT5tYWdpYyA9PSBtYWdpYykgewotCQkJcmV0dmFsID0gcHQtPnByaXY7Ci0JCQlicmVhazsKLQkJfQorCWlmICghZHJtX2h0X2ZpbmRfaXRlbSgmZGV2LT5tYWdpY2xpc3QsICh1bnNpZ25lZCBsb25nKW1hZ2ljLCAmaGFzaCkpIHsKKwkJcHQgPSBkcm1faGFzaF9lbnRyeShoYXNoLCBkcm1fbWFnaWNfZW50cnlfdCwgaGFzaF9pdGVtKTsKKwkJcmV0dmFsID0gcHQtPnByaXY7CiAJfQogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CkBAIC05MCwyOCArNzQsMjAgQEAKIHN0YXRpYyBpbnQgZHJtX2FkZF9tYWdpYyhkcm1fZGV2aWNlX3QgKiBkZXYsIGRybV9maWxlX3QgKiBwcml2LAogCQkJIGRybV9tYWdpY190IG1hZ2ljKQogewotCWludCBoYXNoOwogCWRybV9tYWdpY19lbnRyeV90ICplbnRyeTsKIAogCURSTV9ERUJVRygiJWRcbiIsIG1hZ2ljKTsKIAotCWhhc2ggPSBkcm1faGFzaF9tYWdpYyhtYWdpYyk7CiAJZW50cnkgPSBkcm1fYWxsb2Moc2l6ZW9mKCplbnRyeSksIERSTV9NRU1fTUFHSUMpOwogCWlmICghZW50cnkpCiAJCXJldHVybiAtRU5PTUVNOwogCW1lbXNldChlbnRyeSwgMCwgc2l6ZW9mKCplbnRyeSkpOwotCWVudHJ5LT5tYWdpYyA9IG1hZ2ljOwogCWVudHJ5LT5wcml2ID0gcHJpdjsKLQllbnRyeS0+bmV4dCA9IE5VTEw7CiAKKwllbnRyeS0+aGFzaF9pdGVtLmtleSA9ICh1bnNpZ25lZCBsb25nKW1hZ2ljOwogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKLQlpZiAoZGV2LT5tYWdpY2xpc3RbaGFzaF0udGFpbCkgewotCQlkZXYtPm1hZ2ljbGlzdFtoYXNoXS50YWlsLT5uZXh0ID0gZW50cnk7Ci0JCWRldi0+bWFnaWNsaXN0W2hhc2hdLnRhaWwgPSBlbnRyeTsKLQl9IGVsc2UgewotCQlkZXYtPm1hZ2ljbGlzdFtoYXNoXS5oZWFkID0gZW50cnk7Ci0JCWRldi0+bWFnaWNsaXN0W2hhc2hdLnRhaWwgPSBlbnRyeTsKLQl9CisJZHJtX2h0X2luc2VydF9pdGVtKCZkZXYtPm1hZ2ljbGlzdCwgJmVudHJ5LT5oYXNoX2l0ZW0pOworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5oZWFkLCAmZGV2LT5tYWdpY2ZyZWUpOwogCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCiAJcmV0dXJuIDA7CkBAIC0xMjgsMzQgKzEwNCwyNCBAQAogICovCiBzdGF0aWMgaW50IGRybV9yZW1vdmVfbWFnaWMoZHJtX2RldmljZV90ICogZGV2LCBkcm1fbWFnaWNfdCBtYWdpYykKIHsKLQlkcm1fbWFnaWNfZW50cnlfdCAqcHJldiA9IE5VTEw7CiAJZHJtX21hZ2ljX2VudHJ5X3QgKnB0OwotCWludCBoYXNoOworCWRybV9oYXNoX2l0ZW1fdCAqaGFzaDsKIAogCURSTV9ERUJVRygiJWRcbiIsIG1hZ2ljKTsKLQloYXNoID0gZHJtX2hhc2hfbWFnaWMobWFnaWMpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwotCWZvciAocHQgPSBkZXYtPm1hZ2ljbGlzdFtoYXNoXS5oZWFkOyBwdDsgcHJldiA9IHB0LCBwdCA9IHB0LT5uZXh0KSB7Ci0JCWlmIChwdC0+bWFnaWMgPT0gbWFnaWMpIHsKLQkJCWlmIChkZXYtPm1hZ2ljbGlzdFtoYXNoXS5oZWFkID09IHB0KSB7Ci0JCQkJZGV2LT5tYWdpY2xpc3RbaGFzaF0uaGVhZCA9IHB0LT5uZXh0OwotCQkJfQotCQkJaWYgKGRldi0+bWFnaWNsaXN0W2hhc2hdLnRhaWwgPT0gcHQpIHsKLQkJCQlkZXYtPm1hZ2ljbGlzdFtoYXNoXS50YWlsID0gcHJldjsKLQkJCX0KLQkJCWlmIChwcmV2KSB7Ci0JCQkJcHJldi0+bmV4dCA9IHB0LT5uZXh0OwotCQkJfQotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCWlmIChkcm1faHRfZmluZF9pdGVtKCZkZXYtPm1hZ2ljbGlzdCwgKHVuc2lnbmVkIGxvbmcpbWFnaWMsICZoYXNoKSkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXB0ID0gZHJtX2hhc2hfZW50cnkoaGFzaCwgZHJtX21hZ2ljX2VudHJ5X3QsIGhhc2hfaXRlbSk7CisJZHJtX2h0X3JlbW92ZV9pdGVtKCZkZXYtPm1hZ2ljbGlzdCwgaGFzaCk7CisJbGlzdF9kZWwoJnB0LT5oZWFkKTsKIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCWRybV9mcmVlKHB0LCBzaXplb2YoKnB0KSwgRFJNX01FTV9NQUdJQyk7CiAKLQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9idWZzLmMKaW5kZXggMDA2YjA2ZC4uMDI5YmFlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fYnVmcy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2J1ZnMuYwpAQCAtNjUsNDQgKzY1LDMwIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLS8qCi0gKiBVc2VkIHRvIGFsbG9jYXRlIDMyLWJpdCBoYW5kbGVzIGZvciBtYXBwaW5ncy4KLSAqLwotI2RlZmluZSBTVEFSVF9SQU5HRSAweDEwMDAwMDAwCi0jZGVmaW5lIEVORF9SQU5HRSAweDQwMDAwMDAwCi0KLSNpZmRlZiBfTFA2NAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaW50IEhhbmRsZUlEKHVuc2lnbmVkIGxvbmcgbGhhbmRsZSwKLQkJCQkJZHJtX2RldmljZV90ICpkZXYpCitzdGF0aWMgaW50IGRybV9tYXBfaGFuZGxlKGRybV9kZXZpY2VfdCAqZGV2LCBkcm1faGFzaF9pdGVtX3QgKmhhc2gsCisJCQkgIHVuc2lnbmVkIGxvbmcgdXNlcl90b2tlbiwgaW50IGhhc2hlZF9oYW5kbGUpCiB7Ci0Jc3RhdGljIHVuc2lnbmVkIGludCBtYXAzMl9oYW5kbGUgPSBTVEFSVF9SQU5HRTsKLQl1bnNpZ25lZCBpbnQgaGFzaDsKLQotCWlmIChsaGFuZGxlICYgMHhmZmZmZmZmZjAwMDAwMDAwKSB7Ci0JCWhhc2ggPSBtYXAzMl9oYW5kbGU7Ci0JCW1hcDMyX2hhbmRsZSArPSBQQUdFX1NJWkU7Ci0JCWlmIChtYXAzMl9oYW5kbGUgPiBFTkRfUkFOR0UpCi0JCQltYXAzMl9oYW5kbGUgPSBTVEFSVF9SQU5HRTsKLQl9IGVsc2UKLQkJaGFzaCA9IGxoYW5kbGU7Ci0KLQl3aGlsZSAoMSkgewotCQlkcm1fbWFwX2xpc3RfdCAqX2VudHJ5OwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KF9lbnRyeSwgJmRldi0+bWFwbGlzdC0+aGVhZCwgaGVhZCkgewotCQkJaWYgKF9lbnRyeS0+dXNlcl90b2tlbiA9PSBoYXNoKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmICgmX2VudHJ5LT5oZWFkID09ICZkZXYtPm1hcGxpc3QtPmhlYWQpCi0JCQlyZXR1cm4gaGFzaDsKLQotCQloYXNoICs9IFBBR0VfU0laRTsKLQkJbWFwMzJfaGFuZGxlICs9IFBBR0VfU0laRTsKLQl9Ci19CisJaW50IHVzZV9oYXNoZWRfaGFuZGxlOworI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQorCXVzZV9oYXNoZWRfaGFuZGxlID0gKCh1c2VyX3Rva2VuICYgMHhGRkZGRkZGRjAwMDAwMDAwVUwpIHx8IGhhc2hlZF9oYW5kbGUpOworI2VsaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCisJdXNlX2hhc2hlZF9oYW5kbGUgPSBoYXNoZWRfaGFuZGxlOwogI2Vsc2UKLSMgZGVmaW5lIEhhbmRsZUlEKHgsZGV2KSAodW5zaWduZWQgaW50KSh4KQorI2Vycm9yIFVuc3VwcG9ydGVkIGxvbmcgc2l6ZS4gTmVpdGhlciA2NCBub3IgMzIgYml0cy4KICNlbmRpZgogCisJaWYgKCF1c2VfaGFzaGVkX2hhbmRsZSkgeworCQlpbnQgcmV0OworCQloYXNoLT5rZXkgPSB1c2VyX3Rva2VuOworCQlyZXQgPSBkcm1faHRfaW5zZXJ0X2l0ZW0oJmRldi0+bWFwX2hhc2gsIGhhc2gpOworCQlpZiAocmV0ICE9IC1FSU5WQUwpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gZHJtX2h0X2p1c3RfaW5zZXJ0X3BsZWFzZSgmZGV2LT5tYXBfaGFzaCwgaGFzaCwKKwkJCQkJIHVzZXJfdG9rZW4sIDMyIC0gUEFHRV9TSElGVCAtIDMsCisJCQkJCSBQQUdFX1NISUZULCBEUk1fTUFQX0hBU0hfT0ZGU0VUKTsKK30KKwogLyoqCiAgKiBJb2N0bCB0byBzcGVjaWZ5IGEgcmFuZ2Ugb2YgbWVtb3J5IHRoYXQgaXMgYXZhaWxhYmxlIGZvciBtYXBwaW5nIGJ5IGEgbm9uLXJvb3QgcHJvY2Vzcy4KICAqCkBAIC0xMjMsNiArMTA5LDggQEAKIAlkcm1fbWFwX3QgKm1hcDsKIAlkcm1fbWFwX2xpc3RfdCAqbGlzdDsKIAlkcm1fZG1hX2hhbmRsZV90ICpkbWFoOworCXVuc2lnbmVkIGxvbmcgdXNlcl90b2tlbjsKKwlpbnQgcmV0OwogCiAJbWFwID0gZHJtX2FsbG9jKHNpemVvZigqbWFwKSwgRFJNX01FTV9NQVBTKTsKIAlpZiAoIW1hcCkKQEAgLTI1NywxMSArMjQ1LDIwIEBACiAKIAltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAJbGlzdF9hZGQoJmxpc3QtPmhlYWQsICZkZXYtPm1hcGxpc3QtPmhlYWQpOworCiAJLyogQXNzaWduIGEgMzItYml0IGhhbmRsZSAqLwogCS8qIFdlIGRvIGl0IGhlcmUgc28gdGhhdCBkZXYtPnN0cnVjdF9tdXRleCBwcm90ZWN0cyB0aGUgaW5jcmVtZW50ICovCi0JbGlzdC0+dXNlcl90b2tlbiA9IEhhbmRsZUlEKG1hcC0+dHlwZSA9PSBfRFJNX1NITQotCQkJCSAgICA/ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlCi0JCQkJICAgIDogbWFwLT5vZmZzZXQsIGRldik7CisJdXNlcl90b2tlbiA9IChtYXAtPnR5cGUgPT0gX0RSTV9TSE0pID8gKHVuc2lnbmVkIGxvbmcpbWFwLT5oYW5kbGUgOgorCQltYXAtPm9mZnNldDsKKwlyZXQgPSBkcm1fbWFwX2hhbmRsZShkZXYsICZsaXN0LT5oYXNoLCB1c2VyX3Rva2VuLCAwKTsKKwlpZiAocmV0KSB7CisJCWRybV9mcmVlKG1hcCwgc2l6ZW9mKCptYXApLCBEUk1fTUVNX01BUFMpOworCQlkcm1fZnJlZShsaXN0LCBzaXplb2YoKmxpc3QpLCBEUk1fTUVNX01BUFMpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlsaXN0LT51c2VyX3Rva2VuID0gbGlzdC0+aGFzaC5rZXk7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CiAKIAkqbWFwbGlzdCA9IGxpc3Q7CkBAIC0zNDYsNiArMzQzLDcgQEAKIAogCQlpZiAocl9saXN0LT5tYXAgPT0gbWFwKSB7CiAJCQlsaXN0X2RlbChsaXN0KTsKKwkJCWRybV9odF9yZW1vdmVfa2V5KCZkZXYtPm1hcF9oYXNoLCByX2xpc3QtPnVzZXJfdG9rZW4pOwogCQkJZHJtX2ZyZWUobGlzdCwgc2l6ZW9mKCpsaXN0KSwgRFJNX01FTV9NQVBTKTsKIAkJCWJyZWFrOwogCQl9CkBAIC00NDEsOCArNDM5LDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghbWFwKQorCWlmICghbWFwKSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAKIAkvKiBSZWdpc3RlciBhbmQgZnJhbWVidWZmZXIgbWFwcyBhcmUgcGVybWFuZW50ICovCiAJaWYgKChtYXAtPnR5cGUgPT0gX0RSTV9SRUdJU1RFUlMpIHx8IChtYXAtPnR5cGUgPT0gX0RSTV9GUkFNRV9CVUZGRVIpKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCmluZGV4IDNjMGI4ODIuLmIzNjZjNWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2Rydi5jCkBAIC0xMTgsNyArMTE4LDcgQEAKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9XQUlUX1ZCTEFOSyldID0ge2RybV93YWl0X3ZibGFuaywgMH0sCiB9OwogCi0jZGVmaW5lIERSSVZFUl9JT0NUTF9DT1VOVAlEUk1fQVJSQVlfU0laRSggZHJtX2lvY3RscyApCisjZGVmaW5lIERSSVZFUl9JT0NUTF9DT1VOVAlBUlJBWV9TSVpFKCBkcm1faW9jdGxzICkKIAogLyoqCiAgKiBUYWtlIGRvd24gdGhlIERSTSBkZXZpY2UuCkBAIC0xNTUsMTIgKzE1NSwxMyBAQAogCWRlbF90aW1lcigmZGV2LT50aW1lcik7CiAKIAkvKiBDbGVhciBwaWQgbGlzdCAqLwotCWZvciAoaSA9IDA7IGkgPCBEUk1fSEFTSF9TSVpFOyBpKyspIHsKLQkJZm9yIChwdCA9IGRldi0+bWFnaWNsaXN0W2ldLmhlYWQ7IHB0OyBwdCA9IG5leHQpIHsKLQkJCW5leHQgPSBwdC0+bmV4dDsKKwlpZiAoZGV2LT5tYWdpY2ZyZWUubmV4dCkgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocHQsIG5leHQsICZkZXYtPm1hZ2ljZnJlZSwgaGVhZCkgeworCQkJbGlzdF9kZWwoJnB0LT5oZWFkKTsKKwkJCWRybV9odF9yZW1vdmVfaXRlbSgmZGV2LT5tYWdpY2xpc3QsICZwdC0+aGFzaF9pdGVtKTsKIAkJCWRybV9mcmVlKHB0LCBzaXplb2YoKnB0KSwgRFJNX01FTV9NQUdJQyk7CiAJCX0KLQkJZGV2LT5tYWdpY2xpc3RbaV0uaGVhZCA9IGRldi0+bWFnaWNsaXN0W2ldLnRhaWwgPSBOVUxMOworCQlkcm1faHRfcmVtb3ZlKCZkZXYtPm1hZ2ljbGlzdCk7CiAJfQogCiAJLyogQ2xlYXIgQUdQIGluZm9ybWF0aW9uICovCkBAIC0yOTksNiArMzAwLDcgQEAKIAlpZiAoZGV2LT5tYXBsaXN0KSB7CiAJCWRybV9mcmVlKGRldi0+bWFwbGlzdCwgc2l6ZW9mKCpkZXYtPm1hcGxpc3QpLCBEUk1fTUVNX01BUFMpOwogCQlkZXYtPm1hcGxpc3QgPSBOVUxMOworCQlkcm1faHRfcmVtb3ZlKCZkZXYtPm1hcF9oYXNoKTsKIAl9CiAKIAlkcm1fY3R4Yml0bWFwX2NsZWFudXAoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX2ZvcHMuYwppbmRleCBiN2Y3OTUxLi44OThmNDdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9mb3BzLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fZm9wcy5jCkBAIC01Myw2ICs1Myw4IEBACiAJCQlyZXR1cm4gcmV0OwogCX0KIAorCWRldi0+bWFnaWNmcmVlLm5leHQgPSBOVUxMOworCiAJLyogcHJlYnVpbGQgdGhlIFNBUkVBICovCiAJaSA9IGRybV9hZGRtYXAoZGV2LCAwLCBTQVJFQV9NQVgsIF9EUk1fU0hNLCBfRFJNX0NPTlRBSU5TX0xPQ0ssICZtYXApOwogCWlmIChpICE9IDApCkBAIC02OSwxMyArNzEsMTEgQEAKIAkJCXJldHVybiBpOwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBEUk1fQVJSQVlfU0laRShkZXYtPmNvdW50cyk7IGkrKykKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXYtPmNvdW50cyk7IGkrKykKIAkJYXRvbWljX3NldCgmZGV2LT5jb3VudHNbaV0sIDApOwogCi0JZm9yIChpID0gMDsgaSA8IERSTV9IQVNIX1NJWkU7IGkrKykgewotCQlkZXYtPm1hZ2ljbGlzdFtpXS5oZWFkID0gTlVMTDsKLQkJZGV2LT5tYWdpY2xpc3RbaV0udGFpbCA9IE5VTEw7Ci0JfQorCWRybV9odF9jcmVhdGUoJmRldi0+bWFnaWNsaXN0LCBEUk1fTUFHSUNfSEFTSF9PUkRFUik7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+bWFnaWNmcmVlKTsKIAogCWRldi0+Y3R4bGlzdCA9IGRybV9hbGxvYyhzaXplb2YoKmRldi0+Y3R4bGlzdCksIERSTV9NRU1fQ1RYTElTVCk7CiAJaWYgKGRldi0+Y3R4bGlzdCA9PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYjJkNjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9oYXNodGFiLmMKQEAgLTAsMCArMSwxOTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDA2IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBCaXNtYXJjaywgTkQuIFVTQS4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyAqICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKKyAqIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKKyAqIGRpc3RyaWJ1dGUsIHN1YiBsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KKyAqIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlCisgKiBuZXh0IHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucworICogb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVJTLCBBVVRIT1JTIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCisgKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCisgKiBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICoKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogU2ltcGxlIG9wZW4gaGFzaCB0YWIgaW1wbGVtZW50YXRpb24uCisgKgorICogQXV0aG9yczoKKyAqIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKi8KKworI2luY2x1ZGUgImRybVAuaCIKKyNpbmNsdWRlICJkcm1faGFzaHRhYi5oIgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKworaW50IGRybV9odF9jcmVhdGUoZHJtX29wZW5faGFzaF90ICpodCwgdW5zaWduZWQgaW50IG9yZGVyKQoreworCXVuc2lnbmVkIGludCBpOworCisJaHQtPnNpemUgPSAxIDw8IG9yZGVyOworCWh0LT5vcmRlciA9IG9yZGVyOworCWh0LT5maWxsID0gMDsKKwlodC0+dGFibGUgPSB2bWFsbG9jKGh0LT5zaXplKnNpemVvZigqaHQtPnRhYmxlKSk7CisJaWYgKCFodC0+dGFibGUpIHsKKwkJRFJNX0VSUk9SKCJPdXQgb2YgbWVtb3J5IGZvciBoYXNoIHRhYmxlXG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCWZvciAoaT0wOyBpPCBodC0+c2l6ZTsgKytpKSB7CisJCUlOSVRfSExJU1RfSEVBRCgmaHQtPnRhYmxlW2ldKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgZHJtX2h0X3ZlcmJvc2VfbGlzdChkcm1fb3Blbl9oYXNoX3QgKmh0LCB1bnNpZ25lZCBsb25nIGtleSkKK3sKKwlkcm1faGFzaF9pdGVtX3QgKmVudHJ5OworCXN0cnVjdCBobGlzdF9oZWFkICpoX2xpc3Q7CisJc3RydWN0IGhsaXN0X25vZGUgKmxpc3Q7CisJdW5zaWduZWQgaW50IGhhc2hlZF9rZXk7CisJaW50IGNvdW50ID0gMDsKKworCWhhc2hlZF9rZXkgPSBoYXNoX2xvbmcoa2V5LCBodC0+b3JkZXIpOworCURSTV9ERUJVRygiS2V5IGlzIDB4JTA4bHgsIEhhc2hlZCBrZXkgaXMgMHglMDh4XG4iLCBrZXksIGhhc2hlZF9rZXkpOworCWhfbGlzdCA9ICZodC0+dGFibGVbaGFzaGVkX2tleV07CisJaGxpc3RfZm9yX2VhY2gobGlzdCwgaF9saXN0KSB7CisJCWVudHJ5ID0gaGxpc3RfZW50cnkobGlzdCwgZHJtX2hhc2hfaXRlbV90LCBoZWFkKTsKKwkJRFJNX0RFQlVHKCJjb3VudCAlZCwga2V5OiAweCUwOGx4XG4iLCBjb3VudCsrLCBlbnRyeS0+a2V5KTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGxpc3Rfbm9kZSAqZHJtX2h0X2ZpbmRfa2V5KGRybV9vcGVuX2hhc2hfdCAqaHQsIAorCQkJCQkgIHVuc2lnbmVkIGxvbmcga2V5KQoreworCWRybV9oYXNoX2l0ZW1fdCAqZW50cnk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhfbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdDsKKwl1bnNpZ25lZCBpbnQgaGFzaGVkX2tleTsKKworCWhhc2hlZF9rZXkgPSBoYXNoX2xvbmcoa2V5LCBodC0+b3JkZXIpOworCWhfbGlzdCA9ICZodC0+dGFibGVbaGFzaGVkX2tleV07CisJaGxpc3RfZm9yX2VhY2gobGlzdCwgaF9saXN0KSB7CisJCWVudHJ5ID0gaGxpc3RfZW50cnkobGlzdCwgZHJtX2hhc2hfaXRlbV90LCBoZWFkKTsKKwkJaWYgKGVudHJ5LT5rZXkgPT0ga2V5KQorCQkJcmV0dXJuIGxpc3Q7CisJCWlmIChlbnRyeS0+a2V5ID4ga2V5KQorCQkJYnJlYWs7CisJfQorCXJldHVybiBOVUxMOworfQorCisKK2ludCBkcm1faHRfaW5zZXJ0X2l0ZW0oZHJtX29wZW5faGFzaF90ICpodCwgZHJtX2hhc2hfaXRlbV90ICppdGVtKQoreworCWRybV9oYXNoX2l0ZW1fdCAqZW50cnk7CisJc3RydWN0IGhsaXN0X2hlYWQgKmhfbGlzdDsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdCwgKnBhcmVudDsKKwl1bnNpZ25lZCBpbnQgaGFzaGVkX2tleTsKKwl1bnNpZ25lZCBsb25nIGtleSA9IGl0ZW0tPmtleTsKKworCWhhc2hlZF9rZXkgPSBoYXNoX2xvbmcoa2V5LCBodC0+b3JkZXIpOworCWhfbGlzdCA9ICZodC0+dGFibGVbaGFzaGVkX2tleV07CisJcGFyZW50ID0gTlVMTDsKKwlobGlzdF9mb3JfZWFjaChsaXN0LCBoX2xpc3QpIHsKKwkJZW50cnkgPSBobGlzdF9lbnRyeShsaXN0LCBkcm1faGFzaF9pdGVtX3QsIGhlYWQpOworCQlpZiAoZW50cnktPmtleSA9PSBrZXkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGVudHJ5LT5rZXkgPiBrZXkpCisJCQlicmVhazsKKwkJcGFyZW50ID0gbGlzdDsKKwl9CisJaWYgKHBhcmVudCkgeworCQlobGlzdF9hZGRfYWZ0ZXIocGFyZW50LCAmaXRlbS0+aGVhZCk7CisJfSBlbHNlIHsKKwkJaGxpc3RfYWRkX2hlYWQoJml0ZW0tPmhlYWQsIGhfbGlzdCk7CisJfQorCXJldHVybiAwOworfQorCisvKgorICogSnVzdCBpbnNlcnQgYW4gaXRlbSBhbmQgcmV0dXJuIGFueSAiYml0cyIgYml0IGtleSB0aGF0IGhhc24ndCBiZWVuIAorICogdXNlZCBiZWZvcmUuCisgKi8KK2ludCBkcm1faHRfanVzdF9pbnNlcnRfcGxlYXNlKGRybV9vcGVuX2hhc2hfdCAqaHQsIGRybV9oYXNoX2l0ZW1fdCAqaXRlbSwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc2VlZCwgaW50IGJpdHMsIGludCBzaGlmdCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgYWRkKQoreworCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBtYXNrID0gKDEgPDwgYml0cykgLSAxOworCXVuc2lnbmVkIGxvbmcgZmlyc3QsIHVuc2hpZnRlZF9rZXk7CisKKwl1bnNoaWZ0ZWRfa2V5ID0gaGFzaF9sb25nKHNlZWQsIGJpdHMpOworCWZpcnN0ID0gdW5zaGlmdGVkX2tleTsKKwlkbyB7CisJCWl0ZW0tPmtleSA9ICh1bnNoaWZ0ZWRfa2V5IDw8IHNoaWZ0KSArIGFkZDsKKwkJcmV0ID0gZHJtX2h0X2luc2VydF9pdGVtKGh0LCBpdGVtKTsKKwkJaWYgKHJldCkKKwkJCXVuc2hpZnRlZF9rZXkgPSAodW5zaGlmdGVkX2tleSArIDEpICYgbWFzazsKKwl9IHdoaWxlKHJldCAmJiAodW5zaGlmdGVkX2tleSAhPSBmaXJzdCkpOworCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkF2YWlsYWJsZSBrZXkgYml0IHNwYWNlIGV4aGF1c3RlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9odF9maW5kX2l0ZW0oZHJtX29wZW5faGFzaF90ICpodCwgdW5zaWduZWQgbG9uZyBrZXksCisJCSAgICAgZHJtX2hhc2hfaXRlbV90ICoqaXRlbSkKK3sKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbGlzdDsKKworCWxpc3QgPSBkcm1faHRfZmluZF9rZXkoaHQsIGtleSk7CisJaWYgKCFsaXN0KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSppdGVtID0gaGxpc3RfZW50cnkobGlzdCwgZHJtX2hhc2hfaXRlbV90LCBoZWFkKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGRybV9odF9yZW1vdmVfa2V5KGRybV9vcGVuX2hhc2hfdCAqaHQsIHVuc2lnbmVkIGxvbmcga2V5KQoreworCXN0cnVjdCBobGlzdF9ub2RlICpsaXN0OworCisJbGlzdCA9IGRybV9odF9maW5kX2tleShodCwga2V5KTsKKwlpZiAobGlzdCkgeworCQlobGlzdF9kZWxfaW5pdChsaXN0KTsKKwkJaHQtPmZpbGwtLTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitpbnQgZHJtX2h0X3JlbW92ZV9pdGVtKGRybV9vcGVuX2hhc2hfdCAqaHQsIGRybV9oYXNoX2l0ZW1fdCAqaXRlbSkKK3sKKwlobGlzdF9kZWxfaW5pdCgmaXRlbS0+aGVhZCk7CisJaHQtPmZpbGwtLTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkcm1faHRfcmVtb3ZlKGRybV9vcGVuX2hhc2hfdCAqaHQpCit7CisJaWYgKGh0LT50YWJsZSkgeworCQl2ZnJlZShodC0+dGFibGUpOworCQlodC0+dGFibGUgPSBOVUxMOworCX0KK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faGFzaHRhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwYWZlYzAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9oYXNodGFiLmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IDIwMDYgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIEJpc21hY2ssIE5ELiBVU0EuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNpbXBsZSBvcGVuIGhhc2ggdGFiIGltcGxlbWVudGF0aW9uLgorICoKKyAqIEF1dGhvcnM6CisgKiBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpZm5kZWYgRFJNX0hBU0hUQUJfSAorI2RlZmluZSBEUk1fSEFTSFRBQl9ICisKKyNkZWZpbmUgZHJtX2hhc2hfZW50cnkoX3B0ciwgX3R5cGUsIF9tZW1iZXIpIGNvbnRhaW5lcl9vZihfcHRyLCBfdHlwZSwgX21lbWJlcikKKwordHlwZWRlZiBzdHJ1Y3QgZHJtX2hhc2hfaXRlbXsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBoZWFkOworCXVuc2lnbmVkIGxvbmcga2V5OworfSBkcm1faGFzaF9pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9vcGVuX2hhc2h7CisJdW5zaWduZWQgaW50IHNpemU7CisJdW5zaWduZWQgaW50IG9yZGVyOworCXVuc2lnbmVkIGludCBmaWxsOworCXN0cnVjdCBobGlzdF9oZWFkICp0YWJsZTsKK30gZHJtX29wZW5faGFzaF90OworCisKK2V4dGVybiBpbnQgZHJtX2h0X2NyZWF0ZShkcm1fb3Blbl9oYXNoX3QgKmh0LCB1bnNpZ25lZCBpbnQgb3JkZXIpOworZXh0ZXJuIGludCBkcm1faHRfaW5zZXJ0X2l0ZW0oZHJtX29wZW5faGFzaF90ICpodCwgZHJtX2hhc2hfaXRlbV90ICppdGVtKTsKK2V4dGVybiBpbnQgZHJtX2h0X2p1c3RfaW5zZXJ0X3BsZWFzZShkcm1fb3Blbl9oYXNoX3QgKmh0LCBkcm1faGFzaF9pdGVtX3QgKml0ZW0sCisJCQkJICAgICB1bnNpZ25lZCBsb25nIHNlZWQsIGludCBiaXRzLCBpbnQgc2hpZnQsCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZCk7CitleHRlcm4gaW50IGRybV9odF9maW5kX2l0ZW0oZHJtX29wZW5faGFzaF90ICpodCwgdW5zaWduZWQgbG9uZyBrZXksIGRybV9oYXNoX2l0ZW1fdCAqKml0ZW0pOworCitleHRlcm4gdm9pZCBkcm1faHRfdmVyYm9zZV9saXN0KGRybV9vcGVuX2hhc2hfdCAqaHQsIHVuc2lnbmVkIGxvbmcga2V5KTsKK2V4dGVybiBpbnQgZHJtX2h0X3JlbW92ZV9rZXkoZHJtX29wZW5faGFzaF90ICpodCwgdW5zaWduZWQgbG9uZyBrZXkpOworZXh0ZXJuIGludCBkcm1faHRfcmVtb3ZlX2l0ZW0oZHJtX29wZW5faGFzaF90ICpodCwgZHJtX2hhc2hfaXRlbV90ICppdGVtKTsKK2V4dGVybiB2b2lkIGRybV9odF9yZW1vdmUoZHJtX29wZW5faGFzaF90ICpodCk7CisKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pb2MzMi5jCmluZGV4IGU5ZTJkYjEuLmQ0Zjg3NDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvYzMyLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jMzIuYwpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAlkcm1faW9jdGxfY29tcGF0X3QgKmZuOwogCWludCByZXQ7CiAKLQlpZiAobnIgPj0gRFJNX0FSUkFZX1NJWkUoZHJtX2NvbXBhdF9pb2N0bHMpKQorCWlmIChuciA+PSBBUlJBWV9TSVpFKGRybV9jb21wYXRfaW9jdGxzKSkKIAkJcmV0dXJuIC1FTk9UVFk7CiAKIAlmbiA9IGRybV9jb21wYXRfaW9jdGxzW25yXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9pb2N0bC5jCmluZGV4IDU1NWYzMjMuLjU2NTg5NTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lvY3RsLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faW9jdGwuYwpAQCAtMTI3LDkgKzEyNywxMCBAQAogCWRvbWFpbiA9IGJ1cyA+PiA4OwogCWJ1cyAmPSAweGZmOwogCi0JaWYgKChkb21haW4gIT0gZGV2LT5wY2lfZG9tYWluKSB8fAotCSAgICAoYnVzICE9IGRldi0+cGNpX2J1cykgfHwKLQkgICAgKHNsb3QgIT0gZGV2LT5wY2lfc2xvdCkgfHwgKGZ1bmMgIT0gZGV2LT5wY2lfZnVuYykpCisJaWYgKChkb21haW4gIT0gZHJtX2dldF9wY2lfZG9tYWluKGRldikpIHx8CisJICAgIChidXMgIT0gZGV2LT5wZGV2LT5idXMtPm51bWJlcikgfHwKKwkgICAgKHNsb3QgIT0gUENJX1NMT1QoZGV2LT5wZGV2LT5kZXZmbikpIHx8CisJICAgIChmdW5jICE9IFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlyZXR1cm4gMDsKQEAgLTE0MCwxNSArMTQxLDE3IEBACiAJaW50IGxlbjsKIAogCWlmIChkZXYtPnVuaXF1ZSAhPSBOVUxMKQotCQlyZXR1cm4gRUJVU1k7CisJCXJldHVybiAwOwogCiAJZGV2LT51bmlxdWVfbGVuID0gNDA7CiAJZGV2LT51bmlxdWUgPSBkcm1fYWxsb2MoZGV2LT51bmlxdWVfbGVuICsgMSwgRFJNX01FTV9EUklWRVIpOwogCWlmIChkZXYtPnVuaXF1ZSA9PSBOVUxMKQotCQlyZXR1cm4gRU5PTUVNOworCQlyZXR1cm4gLUVOT01FTTsKIAogCWxlbiA9IHNucHJpbnRmKGRldi0+dW5pcXVlLCBkZXYtPnVuaXF1ZV9sZW4sICJwY2k6JTA0eDolMDJ4OiUwMnguJWQiLAotCQkgZGV2LT5wY2lfZG9tYWluLCBkZXYtPnBjaV9idXMsIGRldi0+cGNpX3Nsb3QsIGRldi0+cGNpX2Z1bmMpOworCQkgICAgICAgZHJtX2dldF9wY2lfZG9tYWluKGRldiksIGRldi0+cGRldi0+YnVzLT5udW1iZXIsCisJCSAgICAgICBQQ0lfU0xPVChkZXYtPnBkZXYtPmRldmZuKSwKKwkJICAgICAgIFBDSV9GVU5DKGRldi0+cGRldi0+ZGV2Zm4pKTsKIAogCWlmIChsZW4gPiBkZXYtPnVuaXF1ZV9sZW4pCiAJCURSTV9FUlJPUigiVW5pcXVlIGJ1ZmZlciBvdmVyZmxvd2VkXG4iKTsKQEAgLTE1Nyw3ICsxNjAsNyBAQAogCSAgICBkcm1fYWxsb2Moc3RybGVuKGRldi0+ZHJpdmVyLT5wY2lfZHJpdmVyLm5hbWUpICsgZGV2LT51bmlxdWVfbGVuICsKIAkJICAgICAgMiwgRFJNX01FTV9EUklWRVIpOwogCWlmIChkZXYtPmRldm5hbWUgPT0gTlVMTCkKLQkJcmV0dXJuIEVOT01FTTsKKwkJcmV0dXJuIC1FTk9NRU07CiAKIAlzcHJpbnRmKGRldi0+ZGV2bmFtZSwgIiVzQCVzIiwgZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSwKIAkJZGV2LT51bmlxdWUpOwpAQCAtMzMwLDI3ICszMzMsMzIgQEAKIAlkcm1fc2V0X3ZlcnNpb25fdCByZXR2OwogCWludCBpZl92ZXJzaW9uOwogCWRybV9zZXRfdmVyc2lvbl90IF9fdXNlciAqYXJncCA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CisJaW50IHJldDsKIAotCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChzdiwgYXJncCwgc2l6ZW9mKHN2KSk7CisJaWYgKGNvcHlfZnJvbV91c2VyKCZzdiwgYXJncCwgc2l6ZW9mKHN2KSkpCisJCXJldHVybiAtRUZBVUxUOwogCiAJcmV0di5kcm1fZGlfbWFqb3IgPSBEUk1fSUZfTUFKT1I7CiAJcmV0di5kcm1fZGlfbWlub3IgPSBEUk1fSUZfTUlOT1I7CiAJcmV0di5kcm1fZGRfbWFqb3IgPSBkZXYtPmRyaXZlci0+bWFqb3I7CiAJcmV0di5kcm1fZGRfbWlub3IgPSBkZXYtPmRyaXZlci0+bWlub3I7CiAKLQlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKGFyZ3AsIHJldHYsIHNpemVvZihzdikpOworCWlmIChjb3B5X3RvX3VzZXIoYXJncCwgJnJldHYsIHNpemVvZihyZXR2KSkpCisJCXJldHVybiAtRUZBVUxUOwogCiAJaWYgKHN2LmRybV9kaV9tYWpvciAhPSAtMSkgewogCQlpZiAoc3YuZHJtX2RpX21ham9yICE9IERSTV9JRl9NQUpPUiB8fAogCQkgICAgc3YuZHJtX2RpX21pbm9yIDwgMCB8fCBzdi5kcm1fZGlfbWlub3IgPiBEUk1fSUZfTUlOT1IpCi0JCQlyZXR1cm4gRUlOVkFMOworCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmX3ZlcnNpb24gPSBEUk1fSUZfVkVSU0lPTihzdi5kcm1fZGlfbWFqb3IsIHN2LmRybV9kaV9taW5vcik7Ci0JCWRldi0+aWZfdmVyc2lvbiA9IERSTV9NQVgoaWZfdmVyc2lvbiwgZGV2LT5pZl92ZXJzaW9uKTsKKwkJZGV2LT5pZl92ZXJzaW9uID0gbWF4KGlmX3ZlcnNpb24sIGRldi0+aWZfdmVyc2lvbik7CiAJCWlmIChzdi5kcm1fZGlfbWlub3IgPj0gMSkgewogCQkJLyoKIAkJCSAqIFZlcnNpb24gMS4xIGluY2x1ZGVzIHR5aW5nIG9mIERSTSB0byBzcGVjaWZpYyBkZXZpY2UKIAkJCSAqLwotCQkJZHJtX3NldF9idXNpZChkZXYpOworCQkJcmV0ID0gZHJtX3NldF9idXNpZChkZXYpOworCQkJaWYgKHJldCkKKwkJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQogCkBAIC0zNTgsNyArMzY2LDcgQEAKIAkJaWYgKHN2LmRybV9kZF9tYWpvciAhPSBkZXYtPmRyaXZlci0+bWFqb3IgfHwKIAkJICAgIHN2LmRybV9kZF9taW5vciA8IDAKIAkJICAgIHx8IHN2LmRybV9kZF9taW5vciA+IGRldi0+ZHJpdmVyLT5taW5vcikKLQkJCXJldHVybiBFSU5WQUw7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlpZiAoZGV2LT5kcml2ZXItPnNldF92ZXJzaW9uKQogCQkJZGV2LT5kcml2ZXItPnNldF92ZXJzaW9uKGRldiwgJnN2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKaW5kZXggZWJkYjcxOC4uNDU1M2EzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1faXJxLmMKQEAgLTY0LDkgKzY0LDkgQEAKIAlpZiAoY29weV9mcm9tX3VzZXIoJnAsIGFyZ3AsIHNpemVvZihwKSkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JaWYgKChwLmJ1c251bSA+PiA4KSAhPSBkZXYtPnBjaV9kb21haW4gfHwKLQkgICAgKHAuYnVzbnVtICYgMHhmZikgIT0gZGV2LT5wY2lfYnVzIHx8Ci0JICAgIHAuZGV2bnVtICE9IGRldi0+cGNpX3Nsb3QgfHwgcC5mdW5jbnVtICE9IGRldi0+cGNpX2Z1bmMpCisJaWYgKChwLmJ1c251bSA+PiA4KSAhPSBkcm1fZ2V0X3BjaV9kb21haW4oZGV2KSB8fAorCSAgICAocC5idXNudW0gJiAweGZmKSAhPSBkZXYtPnBkZXYtPmJ1cy0+bnVtYmVyIHx8CisJICAgIHAuZGV2bnVtICE9IFBDSV9TTE9UKGRldi0+cGRldi0+ZGV2Zm4pIHx8IHAuZnVuY251bSAhPSBQQ0lfRlVOQyhkZXYtPnBkZXYtPmRldmZuKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlwLmlycSA9IGRldi0+aXJxOwpAQCAtMjU1LDcgKzI1NSw4IEBACiAJaWYgKCFkZXYtPmlycSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwodmJsd2FpdCwgYXJncCwgc2l6ZW9mKHZibHdhaXQpKTsKKwlpZiAoY29weV9mcm9tX3VzZXIoJnZibHdhaXQsIGFyZ3AsIHNpemVvZih2Ymx3YWl0KSkpCisJCXJldHVybiAtRUZBVUxUOwogCiAJc3dpdGNoICh2Ymx3YWl0LnJlcXVlc3QudHlwZSAmIH5fRFJNX1ZCTEFOS19GTEFHU19NQVNLKSB7CiAJY2FzZSBfRFJNX1ZCTEFOS19SRUxBVElWRToKQEAgLTMyOSw3ICszMzAsOCBAQAogCX0KIAogICAgICAgZG9uZToKLQlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKGFyZ3AsIHZibHdhaXQsIHNpemVvZih2Ymx3YWl0KSk7CisJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdmJsd2FpdCwgc2l6ZW9mKHZibHdhaXQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CiAKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fbW0uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE3NTI2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX21tLmMKQEAgLTAsMCArMSwyMDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIENvcHlyaWdodCAyMDA2IFR1bmdzdGVuIEdyYXBoaWNzLCBJbmMuLCBCaXNtYXJjaywgTkQuLCBVU0EuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICogR2VuZXJpYyBzaW1wbGUgbWVtb3J5IG1hbmFnZXIgaW1wbGVtZW50YXRpb24uIEludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBiYXNlCisgKiBjbGFzcyBpbXBsZW1lbnRhdGlvbiBmb3IgbW9yZSBhZHZhbmNlZCBtZW1vcnkgbWFuYWdlcnMuCisgKgorICogTm90ZSB0aGF0IHRoZSBhbGdvcml0aG0gdXNlZCBpcyBxdWl0ZSBzaW1wbGUgYW5kIHRoZXJlIG1pZ2h0IGJlIHN1YnN0YW50aWFsCisgKiBwZXJmb3JtYW5jZSBnYWlucyBpZiBhIHNtYXJ0ZXIgZnJlZSBsaXN0IGlzIGltcGxlbWVudGVkLiBDdXJyZW50bHkgaXQgaXMganVzdCBhbgorICogdW5vcmRlcmVkIHN0YWNrIG9mIGZyZWUgcmVnaW9ucy4gVGhpcyBjb3VsZCBlYXNpbHkgYmUgaW1wcm92ZWQgaWYgYW4gUkItdHJlZQorICogaXMgdXNlZCBpbnN0ZWFkLiBBdCBsZWFzdCBpZiB3ZSBleHBlY3QgaGVhdnkgZnJhZ21lbnRhdGlvbi4KKyAqCisgKiBBbGlnbmVkIGFsbG9jYXRpb25zIGNhbiBhbHNvIHNlZSBpbXByb3ZlbWVudC4KKyAqCisgKiBBdXRob3JzOgorICogVGhvbWFzIEhlbGxzdHL2bSA8dGhvbWFzLWF0LXR1bmdzdGVuZ3JhcGhpY3MtZG90LWNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorCitkcm1fbW1fbm9kZV90ICpkcm1fbW1fZ2V0X2Jsb2NrKGRybV9tbV9ub2RlX3QgKiBwYXJlbnQsCisJCQkJdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBhbGlnbm1lbnQpCit7CisKKwlkcm1fbW1fbm9kZV90ICpjaGlsZDsKKworCWlmIChhbGlnbm1lbnQpCisJCXNpemUgKz0gYWxpZ25tZW50IC0gMTsKKworCWlmIChwYXJlbnQtPnNpemUgPT0gc2l6ZSkgeworCQlsaXN0X2RlbF9pbml0KCZwYXJlbnQtPmZsX2VudHJ5KTsKKwkJcGFyZW50LT5mcmVlID0gMDsKKwkJcmV0dXJuIHBhcmVudDsKKwl9IGVsc2UgeworCQljaGlsZCA9IChkcm1fbW1fbm9kZV90ICopIGRybV9hbGxvYyhzaXplb2YoKmNoaWxkKSwgRFJNX01FTV9NTSk7CisJCWlmICghY2hpbGQpCisJCQlyZXR1cm4gTlVMTDsKKworCQlJTklUX0xJU1RfSEVBRCgmY2hpbGQtPm1sX2VudHJ5KTsKKwkJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5mbF9lbnRyeSk7CisKKwkJY2hpbGQtPmZyZWUgPSAwOworCQljaGlsZC0+c2l6ZSA9IHNpemU7CisJCWNoaWxkLT5zdGFydCA9IHBhcmVudC0+c3RhcnQ7CisKKwkJbGlzdF9hZGRfdGFpbCgmY2hpbGQtPm1sX2VudHJ5LCAmcGFyZW50LT5tbF9lbnRyeSk7CisJCXBhcmVudC0+c2l6ZSAtPSBzaXplOworCQlwYXJlbnQtPnN0YXJ0ICs9IHNpemU7CisJfQorCXJldHVybiBjaGlsZDsKK30KKworLyoKKyAqIFB1dCBhIGJsb2NrLiBNZXJnZSB3aXRoIHRoZSBwcmV2aW91cyBhbmQgLyBvciBuZXh0IGJsb2NrIGlmIHRoZXkgYXJlIGZyZWUuCisgKiBPdGhlcndpc2UgYWRkIHRvIHRoZSBmcmVlIHN0YWNrLgorICovCisKK3ZvaWQgZHJtX21tX3B1dF9ibG9jayhkcm1fbW1fdCAqIG1tLCBkcm1fbW1fbm9kZV90ICogY3VyKQoreworCisJZHJtX21tX25vZGVfdCAqbGlzdF9yb290ID0gJm1tLT5yb290X25vZGU7CisJc3RydWN0IGxpc3RfaGVhZCAqY3VyX2hlYWQgPSAmY3VyLT5tbF9lbnRyeTsKKwlzdHJ1Y3QgbGlzdF9oZWFkICpyb290X2hlYWQgPSAmbGlzdF9yb290LT5tbF9lbnRyeTsKKwlkcm1fbW1fbm9kZV90ICpwcmV2X25vZGUgPSBOVUxMOworCWRybV9tbV9ub2RlX3QgKm5leHRfbm9kZTsKKworCWludCBtZXJnZWQgPSAwOworCisJaWYgKGN1cl9oZWFkLT5wcmV2ICE9IHJvb3RfaGVhZCkgeworCQlwcmV2X25vZGUgPSBsaXN0X2VudHJ5KGN1cl9oZWFkLT5wcmV2LCBkcm1fbW1fbm9kZV90LCBtbF9lbnRyeSk7CisJCWlmIChwcmV2X25vZGUtPmZyZWUpIHsKKwkJCXByZXZfbm9kZS0+c2l6ZSArPSBjdXItPnNpemU7CisJCQltZXJnZWQgPSAxOworCQl9CisJfQorCWlmIChjdXJfaGVhZC0+bmV4dCAhPSByb290X2hlYWQpIHsKKwkJbmV4dF9ub2RlID0gbGlzdF9lbnRyeShjdXJfaGVhZC0+bmV4dCwgZHJtX21tX25vZGVfdCwgbWxfZW50cnkpOworCQlpZiAobmV4dF9ub2RlLT5mcmVlKSB7CisJCQlpZiAobWVyZ2VkKSB7CisJCQkJcHJldl9ub2RlLT5zaXplICs9IG5leHRfbm9kZS0+c2l6ZTsKKwkJCQlsaXN0X2RlbCgmbmV4dF9ub2RlLT5tbF9lbnRyeSk7CisJCQkJbGlzdF9kZWwoJm5leHRfbm9kZS0+ZmxfZW50cnkpOworCQkJCWRybV9mcmVlKG5leHRfbm9kZSwgc2l6ZW9mKCpuZXh0X25vZGUpLAorCQkJCQkgRFJNX01FTV9NTSk7CisJCQl9IGVsc2UgeworCQkJCW5leHRfbm9kZS0+c2l6ZSArPSBjdXItPnNpemU7CisJCQkJbmV4dF9ub2RlLT5zdGFydCA9IGN1ci0+c3RhcnQ7CisJCQkJbWVyZ2VkID0gMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoIW1lcmdlZCkgeworCQljdXItPmZyZWUgPSAxOworCQlsaXN0X2FkZCgmY3VyLT5mbF9lbnRyeSwgJmxpc3Rfcm9vdC0+ZmxfZW50cnkpOworCX0gZWxzZSB7CisJCWxpc3RfZGVsKCZjdXItPm1sX2VudHJ5KTsKKwkJZHJtX2ZyZWUoY3VyLCBzaXplb2YoKmN1ciksIERSTV9NRU1fTU0pOworCX0KK30KKworZHJtX21tX25vZGVfdCAqZHJtX21tX3NlYXJjaF9mcmVlKGNvbnN0IGRybV9tbV90ICogbW0sCisJCQkJICB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkJICB1bnNpZ25lZCBhbGlnbm1lbnQsIGludCBiZXN0X21hdGNoKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisJY29uc3Qgc3RydWN0IGxpc3RfaGVhZCAqZnJlZV9zdGFjayA9ICZtbS0+cm9vdF9ub2RlLmZsX2VudHJ5OworCWRybV9tbV9ub2RlX3QgKmVudHJ5OworCWRybV9tbV9ub2RlX3QgKmJlc3Q7CisJdW5zaWduZWQgbG9uZyBiZXN0X3NpemU7CisKKwliZXN0ID0gTlVMTDsKKwliZXN0X3NpemUgPSB+MFVMOworCisJaWYgKGFsaWdubWVudCkKKwkJc2l6ZSArPSBhbGlnbm1lbnQgLSAxOworCisJbGlzdF9mb3JfZWFjaChsaXN0LCBmcmVlX3N0YWNrKSB7CisJCWVudHJ5ID0gbGlzdF9lbnRyeShsaXN0LCBkcm1fbW1fbm9kZV90LCBmbF9lbnRyeSk7CisJCWlmIChlbnRyeS0+c2l6ZSA+PSBzaXplKSB7CisJCQlpZiAoIWJlc3RfbWF0Y2gpCisJCQkJcmV0dXJuIGVudHJ5OworCQkJaWYgKHNpemUgPCBiZXN0X3NpemUpIHsKKwkJCQliZXN0ID0gZW50cnk7CisJCQkJYmVzdF9zaXplID0gZW50cnktPnNpemU7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gYmVzdDsKK30KKworaW50IGRybV9tbV9pbml0KGRybV9tbV90ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkcm1fbW1fbm9kZV90ICpjaGlsZDsKKworCUlOSVRfTElTVF9IRUFEKCZtbS0+cm9vdF9ub2RlLm1sX2VudHJ5KTsKKwlJTklUX0xJU1RfSEVBRCgmbW0tPnJvb3Rfbm9kZS5mbF9lbnRyeSk7CisJY2hpbGQgPSAoZHJtX21tX25vZGVfdCAqKSBkcm1fYWxsb2Moc2l6ZW9mKCpjaGlsZCksIERSTV9NRU1fTU0pOworCWlmICghY2hpbGQpCisJCXJldHVybiAtRU5PTUVNOworCisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5tbF9lbnRyeSk7CisJSU5JVF9MSVNUX0hFQUQoJmNoaWxkLT5mbF9lbnRyeSk7CisKKwljaGlsZC0+c3RhcnQgPSBzdGFydDsKKwljaGlsZC0+c2l6ZSA9IHNpemU7CisJY2hpbGQtPmZyZWUgPSAxOworCisJbGlzdF9hZGQoJmNoaWxkLT5mbF9lbnRyeSwgJm1tLT5yb290X25vZGUuZmxfZW50cnkpOworCWxpc3RfYWRkKCZjaGlsZC0+bWxfZW50cnksICZtbS0+cm9vdF9ub2RlLm1sX2VudHJ5KTsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRybV9tbV9pbml0KTsKKwordm9pZCBkcm1fbW1fdGFrZWRvd24oZHJtX21tX3QgKiBtbSkKK3sKKwlzdHJ1Y3QgbGlzdF9oZWFkICpibm9kZSA9IG1tLT5yb290X25vZGUuZmxfZW50cnkubmV4dDsKKwlkcm1fbW1fbm9kZV90ICplbnRyeTsKKworCWVudHJ5ID0gbGlzdF9lbnRyeShibm9kZSwgZHJtX21tX25vZGVfdCwgZmxfZW50cnkpOworCisJaWYgKGVudHJ5LT5tbF9lbnRyeS5uZXh0ICE9ICZtbS0+cm9vdF9ub2RlLm1sX2VudHJ5IHx8CisJICAgIGVudHJ5LT5mbF9lbnRyeS5uZXh0ICE9ICZtbS0+cm9vdF9ub2RlLmZsX2VudHJ5KSB7CisJCURSTV9FUlJPUigiTWVtb3J5IG1hbmFnZXIgbm90IGNsZWFuLiBEZWxheWluZyB0YWtlZG93blxuIik7CisJCXJldHVybjsKKwl9CisKKwlsaXN0X2RlbCgmZW50cnktPmZsX2VudHJ5KTsKKwlsaXN0X2RlbCgmZW50cnktPm1sX2VudHJ5KTsKKworCWRybV9mcmVlKGVudHJ5LCBzaXplb2YoKmVudHJ5KSwgRFJNX01FTV9NTSk7Cit9CisKK0VYUE9SVF9TWU1CT0woZHJtX21tX3Rha2Vkb3duKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3BjaWlkcy5oIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKaW5kZXggYjFiYjNjNy4uMDkzOThkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fcGNpaWRzLmgKQEAgLTMsMTMgKzMsMTMgQEAKICAgIFBsZWFzZSBjb250YWN0IGRyaS1kZXZlbEBsaXN0cy5zZi5uZXQgdG8gYWRkIG5ldyBjYXJkcyB0byB0aGlzIGxpc3QKICovCiAjZGVmaW5lIHJhZGVvbl9QQ0lfSURTIFwKLQl7MHgxMDAyLCAweDMxNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDMxNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8Q0hJUF9JU19NT0JJTElUWXxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHgzMTU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfENISVBfSVNfTU9CSUxJVFl8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4M0U1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHgzRTU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDQxMzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMxMDB8Q0hJUF9JU19JR1B9LCBcCi0JezB4MTAwMiwgMHg0MTM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfENISVBfSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4MzE1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHgzMTUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDMxNTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4M0U1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDNFNTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0MTM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMTAwfFJBREVPTl9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg0MTM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg0MTQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCiAJezB4MTAwMiwgMHg0MTQ1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCiAJezB4MTAwMiwgMHg0MTQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCkBAIC0yNSwzNSArMjUsMzUgQEAKIAl7MHgxMDAyLCAweDQxNTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB9LCBcCiAJezB4MTAwMiwgMHg0MTU1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzUwfSwgXAogCXsweDEwMDIsIDB4NDE1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MH0sIFwKLQl7MHgxMDAyLCAweDQyMzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8Q0hJUF9JU19JR1B9LCBcCisJezB4MTAwMiwgMHg0MjM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfFJBREVPTl9JU19JR1B9LCBcCiAJezB4MTAwMiwgMHg0MjQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCiAJezB4MTAwMiwgMHg0MjQzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IyMDB9LCBcCi0JezB4MTAwMiwgMHg0MzM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMTAwfENISVBfSVNfSUdQfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0MzM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfENISVBfSVNfSUdQfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0NDM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMjAwfENISVBfSVNfSUdQfENISVBfSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0MzM2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMTAwfFJBREVPTl9JU19JR1B8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NDMzNywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzIwMHxSQURFT05fSVNfSUdQfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDQ0MzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMyMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0OTY2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjUwfSwgXAogCXsweDEwMDIsIDB4NDk2NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI1MH0sIFwKLQl7MHgxMDAyLCAweDRBNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg0QTQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NEE0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDRBNEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg0QTRDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NEE0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDRBNEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX0lTX01PQklMSVRZfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDRBNEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg0QTUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NEE1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDRCNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg0QjRBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NEI0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDRCNEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg0QzU3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjAwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzU4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjAwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzU5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzVBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjUwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzY2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjUwfENISVBfSVNfTU9CSUxJVFl9LCBcCi0JezB4MTAwMiwgMHg0QzY3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjUwfENISVBfSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0QTQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTRBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTRDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTRELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg0QTRFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEE0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEE1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEE1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEI0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEI0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEI0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEI0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NEM1NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjIwMHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0QzU4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjAwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDRDNTksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NEM1QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0QzY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjUwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDRDNjYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyNTB8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NEM2NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI1MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg0RTQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCiAJezB4MTAwMiwgMHg0RTQ1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCiAJezB4MTAwMiwgMHg0RTQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IzMDB9LCBcCkBAIC02MiwxNiArNjIsMTYgQEAKIAl7MHgxMDAyLCAweDRFNDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjM1MH0sIFwKIAl7MHgxMDAyLCAweDRFNEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjM1MH0sIFwKIAl7MHgxMDAyLCAweDRFNEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjM1MH0sIFwKLQl7MHgxMDAyLCAweDRFNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDRFNTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDRFNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDRFNTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDRFNTQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDRFNTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8Q0hJUF9JU19NT0JJTElUWX0sIFwKLQl7MHgxMDAyLCAweDUxNDQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjEwMHxDSElQX1NJTkdMRV9DUlRDfSwgXAotCXsweDEwMDIsIDB4NTE0NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SMTAwfENISVBfU0lOR0xFX0NSVEN9LCBcCi0JezB4MTAwMiwgMHg1MTQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IxMDB8Q0hJUF9TSU5HTEVfQ1JUQ30sIFwKLQl7MHgxMDAyLCAweDUxNDcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjEwMHxDSElQX1NJTkdMRV9DUlRDfSwgXAorCXsweDEwMDIsIDB4NEU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0RTUxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzUwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDRFNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NEU1MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM1MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg0RTU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzUwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDRFNTYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzNTB8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NTE0NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SMTAwfFJBREVPTl9TSU5HTEVfQ1JUQ30sIFwKKwl7MHgxMDAyLCAweDUxNDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjEwMHxSQURFT05fU0lOR0xFX0NSVEN9LCBcCisJezB4MTAwMiwgMHg1MTQ2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1IxMDB8UkFERU9OX1NJTkdMRV9DUlRDfSwgXAorCXsweDEwMDIsIDB4NTE0NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SMTAwfFJBREVPTl9TSU5HTEVfQ1JUQ30sIFwKIAl7MHgxMDAyLCAweDUxNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKIAl7MHgxMDAyLCAweDUxNEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKIAl7MHgxMDAyLCAweDUxNEQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjIwMH0sIFwKQEAgLTgwLDU5ICs4MCw1OSBAQAogCXsweDEwMDIsIDB4NTE1OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjEwMH0sIFwKIAl7MHgxMDAyLCAweDUxNUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCiAJezB4MTAwMiwgMHg1MTVFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMTAwfSwgXAotCXsweDEwMDIsIDB4NTQ2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxDSElQX0lTX01PQklMSVRZfSwgXAotCXsweDEwMDIsIDB4NTQ2MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxDSElQX0lTX01PQklMSVRZfSwgXAotCXsweDEwMDIsIDB4NTQ2NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxDSElQX0lTX01PQklMSVRZfSwgXAotCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NDksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1NTRBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1NTRELCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1NTUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU1NTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1NTU0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxDSElQX0lTX01PQklMSVRZfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU2NEIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8Q0hJUF9JU19NT0JJTElUWXxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1NjRGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfENISVBfSVNfTU9CSUxJVFl8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NTY1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxDSElQX0lTX01PQklMSVRZfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDU2NTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8Q0hJUF9JU19NT0JJTElUWXxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ODM0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTMzAwfENISVBfSVNfSUdQfSwgXAotCXsweDEwMDIsIDB4NTgzNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzMwMHxDSElQX0lTX0lHUHxDSElQX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NTQ2MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg1NDYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDU0NjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX0lTX01PQklMSVRZfSwgXAorCXsweDEwMDIsIDB4NTU0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0QywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU0RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTU1NCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTY0QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1NjRCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU2NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NTY1MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1NjUzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDU4MzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUH0sIFwKKwl7MHgxMDAyLCAweDU4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCiAJezB4MTAwMiwgMHg1OTYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYyODB9LCBcCiAJezB4MTAwMiwgMHg1OTY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfSwgXAogCXsweDEwMDIsIDB4NTk2NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MH0sIFwKIAl7MHgxMDAyLCAweDU5NjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYxMDB9LCBcCi0JezB4MTAwMiwgMHg1YjYwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDViNjIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1YjY0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDViNjUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxDSElQX0lTX01PQklMSVRZfSwgXAotCXsweDEwMDIsIDB4NWM2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxDSElQX0lTX01PQklMSVRZfSwgXAotCXsweDEwMDIsIDB4NWQ0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfSVNfTU9CSUxJVFl8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfSVNfTU9CSUxJVFl8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfSVNfTU9CSUxJVFl8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0YywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ0ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWQ1NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWU0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZTRiLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDVlNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NWU0ZCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxDSElQX05FV19NRU1NQVB9LCBcCi0JezB4MTAwMiwgMHg1ZTRmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfENISVBfTkVXX01FTU1BUH0sIFwKLQl7MHgxMDAyLCAweDc4MzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8Q0hJUF9JU19JR1B8Q0hJUF9ORVdfTUVNTUFQfSwgXAotCXsweDEwMDIsIDB4NzgzNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzMwMHxDSElQX0lTX0lHUHxDSElQX0lTX01PQklMSVRZfENISVBfTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDViNjAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1YjYyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWI2MywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjM4MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDViNjQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlYzODB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1YjY1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMzgwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWM2MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjI4MHxSQURFT05fSVNfTU9CSUxJVFl9LCBcCisJezB4MTAwMiwgMHg1YzYzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWMjgwfFJBREVPTl9JU19NT0JJTElUWX0sIFwKKwl7MHgxMDAyLCAweDVkNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZDQ5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I0MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWQ0YSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SNDIwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNGYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVkNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUjQyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVlNDgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZTRhLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWU0YiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDVlNGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY0MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg1ZTRkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNDEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4NWU0ZiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjQxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDc4MzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezAsIDAsIDB9CiAKICNkZWZpbmUgcjEyOF9QQ0lfSURTIFwKQEAgLTIwOSw2ICsyMDksNyBAQAogCXsweDEwMzksIDB4MDMwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MHgxMDM5LCAweDUzMDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezB4MTAzOSwgMHg2MzAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDEwMzksIDB4NjMzMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgU0lTX0NISVBfMzE1fSwgXAogCXsweDEwMzksIDB4NzMwMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MCwgMCwgMH0KIApAQCAtMjI3LDYgKzIyOCwxMCBAQAogCXsweDExMDYsIDB4MzEyMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MHgxMTA2LCAweDcyMDUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCiAJezB4MTEwNiwgMHgzMTA4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDExMDYsIDB4MzMwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKKwl7MHgxMTA2LCAweDMxNTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezB4MTEwNiwgMHgzMzQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDExMDYsIDB4NzIwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MCwgMCwgMH0KIAogI2RlZmluZSBpODEwX1BDSV9JRFMgXApAQCAtMjg1LDUgKzI5MCw5IEBACiAJezB4ODA4NiwgMHgyNTkyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAogCXsweDgwODYsIDB4Mjc3MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKIAl7MHg4MDg2LCAweDI3YTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezB4ODA4NiwgMHgyOTcyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAorCXsweDgwODYsIDB4Mjk4MiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMH0sIFwKKwl7MHg4MDg2LCAweDI5OTIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDB9LCBcCisJezB4ODA4NiwgMHgyOWEyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwgXAogCXswLCAwLCAwfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9wcm9jLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9wcm9jLmMKaW5kZXggMzYyYTI3MC4uNjJkNWZlMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3Byb2MuYwpAQCAtNTEwLDcgKzUxMCw3IEBACiAJCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFID8gJ3MnIDogJ3AnLAogCQkJICAgICAgIHZtYS0+dm1fZmxhZ3MgJiBWTV9MT0NLRUQgPyAnbCcgOiAnLScsCiAJCQkgICAgICAgdm1hLT52bV9mbGFncyAmIFZNX0lPID8gJ2knIDogJy0nLAotCQkJICAgICAgIFZNX09GRlNFVCh2bWEpKTsKKwkJCSAgICAgICB2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpOwogCiAjaWYgZGVmaW5lZChfX2kzODZfXykKIAkJcGdwcm90ID0gcGdwcm90X3ZhbCh2bWEtPnZtX3BhZ2VfcHJvdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zbWFuLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zbWFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI1YzgyMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uYwpAQCAtMCwwICsxLDM1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogQ29weXJpZ2h0IDIwMDYgVHVuZ3N0ZW4gR3JhcGhpY3MsIEluYy4sIEJpc21hcmNrLiwgTkQuLCBVU0EuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisgKiAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCisgKiB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCisgKiBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvCisgKiBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBDT1BZUklHSFQgSE9MREVSUywgQVVUSE9SUyBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUgorICogT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRQorICogVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KKyAqCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFNpbXBsZSBtZW1vcnkgbWFuYWdlciBpbnRlcmZhY2UgdGhhdCBrZWVwcyB0cmFjayBvbiBhbGxvY2F0ZSByZWdpb25zIG9uIGEKKyAqIHBlciAib3duZXIiIGJhc2lzLiBBbGwgcmVnaW9ucyBhc3NvY2lhdGVkIHdpdGggYW4gIm93bmVyIiBjYW4gYmUgcmVsZWFzZWQKKyAqIHdpdGggYSBzaW1wbGUgY2FsbC4gVHlwaWNhbGx5IGlmIHRoZSAib3duZXIiIGV4aXN0cy4gVGhlIG93bmVyIGlzIGFueQorICogInVuc2lnbmVkIGxvbmciIGlkZW50aWZpZXIuIENhbiB0eXBpY2FsbHkgYmUgYSBwb2ludGVyIHRvIGEgZmlsZSBwcml2YXRlCisgKiBzdHJ1Y3Qgb3IgYSBjb250ZXh0IGlkZW50aWZpZXIuCisgKgorICogQXV0aG9yczoKKyAqIFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKi8KKworI2luY2x1ZGUgImRybV9zbWFuLmgiCisKK3R5cGVkZWYgc3RydWN0IGRybV9vd25lcl9pdGVtIHsKKwlkcm1faGFzaF9pdGVtX3Qgb3duZXJfaGFzaDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIHNtYW5fbGlzdDsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG1lbV9ibG9ja3M7Cit9IGRybV9vd25lcl9pdGVtX3Q7CisKK3ZvaWQgZHJtX3NtYW5fdGFrZWRvd24oZHJtX3NtYW5fdCAqIHNtYW4pCit7CisJZHJtX2h0X3JlbW92ZSgmc21hbi0+dXNlcl9oYXNoX3RhYik7CisJZHJtX2h0X3JlbW92ZSgmc21hbi0+b3duZXJfaGFzaF90YWIpOworCWlmIChzbWFuLT5tbSkKKwkJZHJtX2ZyZWUoc21hbi0+bW0sIHNtYW4tPm51bV9tYW5hZ2VycyAqIHNpemVvZigqc21hbi0+bW0pLAorCQkJIERSTV9NRU1fTU0pOworfQorCitFWFBPUlRfU1lNQk9MKGRybV9zbWFuX3Rha2Vkb3duKTsKKworaW50Citkcm1fc21hbl9pbml0KGRybV9zbWFuX3QgKiBzbWFuLCB1bnNpZ25lZCBpbnQgbnVtX21hbmFnZXJzLAorCSAgICAgIHVuc2lnbmVkIGludCB1c2VyX29yZGVyLCB1bnNpZ25lZCBpbnQgb3duZXJfb3JkZXIpCit7CisJaW50IHJldCA9IDA7CisKKwlzbWFuLT5tbSA9IChkcm1fc21hbl9tbV90ICopIGRybV9jYWxsb2MobnVtX21hbmFnZXJzLCBzaXplb2YoKnNtYW4tPm1tKSwKKwkJCQkJCURSTV9NRU1fTU0pOworCWlmICghc21hbi0+bW0pIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCXNtYW4tPm51bV9tYW5hZ2VycyA9IG51bV9tYW5hZ2VyczsKKwlJTklUX0xJU1RfSEVBRCgmc21hbi0+b3duZXJfaXRlbXMpOworCXJldCA9IGRybV9odF9jcmVhdGUoJnNtYW4tPm93bmVyX2hhc2hfdGFiLCBvd25lcl9vcmRlcik7CisJaWYgKHJldCkKKwkJZ290byBvdXQxOworCXJldCA9IGRybV9odF9jcmVhdGUoJnNtYW4tPnVzZXJfaGFzaF90YWIsIHVzZXJfb3JkZXIpOworCWlmICghcmV0KQorCQlnb3RvIG91dDsKKworCWRybV9odF9yZW1vdmUoJnNtYW4tPm93bmVyX2hhc2hfdGFiKTsKK291dDE6CisJZHJtX2ZyZWUoc21hbi0+bW0sIG51bV9tYW5hZ2VycyAqIHNpemVvZigqc21hbi0+bW0pLCBEUk1fTUVNX01NKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGRybV9zbWFuX2luaXQpOworCitzdGF0aWMgdm9pZCAqZHJtX3NtYW5fbW1fYWxsb2NhdGUodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCSAgdW5zaWduZWQgYWxpZ25tZW50KQoreworCWRybV9tbV90ICptbSA9IChkcm1fbW1fdCAqKSBwcml2YXRlOworCWRybV9tbV9ub2RlX3QgKnRtcDsKKworCXRtcCA9IGRybV9tbV9zZWFyY2hfZnJlZShtbSwgc2l6ZSwgYWxpZ25tZW50LCAxKTsKKwlpZiAoIXRtcCkgeworCQlyZXR1cm4gTlVMTDsKKwl9CisJdG1wID0gZHJtX21tX2dldF9ibG9jayh0bXAsIHNpemUsIGFsaWdubWVudCk7CisJcmV0dXJuIHRtcDsKK30KKworc3RhdGljIHZvaWQgZHJtX3NtYW5fbW1fZnJlZSh2b2lkICpwcml2YXRlLCB2b2lkICpyZWYpCit7CisJZHJtX21tX3QgKm1tID0gKGRybV9tbV90ICopIHByaXZhdGU7CisJZHJtX21tX25vZGVfdCAqbm9kZSA9IChkcm1fbW1fbm9kZV90ICopIHJlZjsKKworCWRybV9tbV9wdXRfYmxvY2sobW0sIG5vZGUpOworfQorCitzdGF0aWMgdm9pZCBkcm1fc21hbl9tbV9kZXN0cm95KHZvaWQgKnByaXZhdGUpCit7CisJZHJtX21tX3QgKm1tID0gKGRybV9tbV90ICopIHByaXZhdGU7CisJZHJtX21tX3Rha2Vkb3duKG1tKTsKKwlkcm1fZnJlZShtbSwgc2l6ZW9mKCptbSksIERSTV9NRU1fTU0pOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkcm1fc21hbl9tbV9vZmZzZXQodm9pZCAqcHJpdmF0ZSwgdm9pZCAqcmVmKQoreworCWRybV9tbV9ub2RlX3QgKm5vZGUgPSAoZHJtX21tX25vZGVfdCAqKSByZWY7CisJcmV0dXJuIG5vZGUtPnN0YXJ0OworfQorCitpbnQKK2RybV9zbWFuX3NldF9yYW5nZShkcm1fc21hbl90ICogc21hbiwgdW5zaWduZWQgaW50IG1hbmFnZXIsCisJCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKK3sKKwlkcm1fc21hbl9tbV90ICpzbWFuX21tOworCWRybV9tbV90ICptbTsKKwlpbnQgcmV0OworCisJQlVHX09OKG1hbmFnZXIgPj0gc21hbi0+bnVtX21hbmFnZXJzKTsKKworCXNtYW5fbW0gPSAmc21hbi0+bW1bbWFuYWdlcl07CisJbW0gPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqbW0pLCBEUk1fTUVNX01NKTsKKwlpZiAoIW1tKSB7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzbWFuX21tLT5wcml2YXRlID0gbW07CisJcmV0ID0gZHJtX21tX2luaXQobW0sIHN0YXJ0LCBzaXplKTsKKworCWlmIChyZXQpIHsKKwkJZHJtX2ZyZWUobW0sIHNpemVvZigqbW0pLCBEUk1fTUVNX01NKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlzbWFuX21tLT5hbGxvY2F0ZSA9IGRybV9zbWFuX21tX2FsbG9jYXRlOworCXNtYW5fbW0tPmZyZWUgPSBkcm1fc21hbl9tbV9mcmVlOworCXNtYW5fbW0tPmRlc3Ryb3kgPSBkcm1fc21hbl9tbV9kZXN0cm95OworCXNtYW5fbW0tPm9mZnNldCA9IGRybV9zbWFuX21tX29mZnNldDsKKworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRybV9zbWFuX3NldF9yYW5nZSk7CisKK2ludAorZHJtX3NtYW5fc2V0X21hbmFnZXIoZHJtX3NtYW5fdCAqIHNtYW4sIHVuc2lnbmVkIGludCBtYW5hZ2VyLAorCQkgICAgIGRybV9zbWFuX21tX3QgKiBhbGxvY2F0b3IpCit7CisJQlVHX09OKG1hbmFnZXIgPj0gc21hbi0+bnVtX21hbmFnZXJzKTsKKwlzbWFuLT5tbVttYW5hZ2VyXSA9ICphbGxvY2F0b3I7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGRybV9vd25lcl9pdGVtX3QgKmRybV9zbWFuX2dldF9vd25lcl9pdGVtKGRybV9zbWFuX3QgKiBzbWFuLAorCQkJCQkJIHVuc2lnbmVkIGxvbmcgb3duZXIpCit7CisJaW50IHJldDsKKwlkcm1faGFzaF9pdGVtX3QgKm93bmVyX2hhc2hfaXRlbTsKKwlkcm1fb3duZXJfaXRlbV90ICpvd25lcl9pdGVtOworCisJcmV0ID0gZHJtX2h0X2ZpbmRfaXRlbSgmc21hbi0+b3duZXJfaGFzaF90YWIsIG93bmVyLCAmb3duZXJfaGFzaF9pdGVtKTsKKwlpZiAoIXJldCkgeworCQlyZXR1cm4gZHJtX2hhc2hfZW50cnkob3duZXJfaGFzaF9pdGVtLCBkcm1fb3duZXJfaXRlbV90LAorCQkJCSAgICAgIG93bmVyX2hhc2gpOworCX0KKworCW93bmVyX2l0ZW0gPSBkcm1fY2FsbG9jKDEsIHNpemVvZigqb3duZXJfaXRlbSksIERSTV9NRU1fTU0pOworCWlmICghb3duZXJfaXRlbSkKKwkJZ290byBvdXQ7CisKKwlJTklUX0xJU1RfSEVBRCgmb3duZXJfaXRlbS0+bWVtX2Jsb2Nrcyk7CisJb3duZXJfaXRlbS0+b3duZXJfaGFzaC5rZXkgPSBvd25lcjsKKwlpZiAoZHJtX2h0X2luc2VydF9pdGVtKCZzbWFuLT5vd25lcl9oYXNoX3RhYiwgJm93bmVyX2l0ZW0tPm93bmVyX2hhc2gpKQorCQlnb3RvIG91dDE7CisKKwlsaXN0X2FkZF90YWlsKCZvd25lcl9pdGVtLT5zbWFuX2xpc3QsICZzbWFuLT5vd25lcl9pdGVtcyk7CisJcmV0dXJuIG93bmVyX2l0ZW07CisKK291dDE6CisJZHJtX2ZyZWUob3duZXJfaXRlbSwgc2l6ZW9mKCpvd25lcl9pdGVtKSwgRFJNX01FTV9NTSk7CitvdXQ6CisJcmV0dXJuIE5VTEw7Cit9CisKK2RybV9tZW1ibG9ja19pdGVtX3QgKmRybV9zbWFuX2FsbG9jKGRybV9zbWFuX3QgKnNtYW4sIHVuc2lnbmVkIGludCBtYW5hZ2VyLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGFsaWdubWVudCwKKwkJCQkgICAgdW5zaWduZWQgbG9uZyBvd25lcikKK3sKKwl2b2lkICp0bXA7CisJZHJtX3NtYW5fbW1fdCAqc21hbl9tbTsKKwlkcm1fb3duZXJfaXRlbV90ICpvd25lcl9pdGVtOworCWRybV9tZW1ibG9ja19pdGVtX3QgKm1lbWJsb2NrOworCisJQlVHX09OKG1hbmFnZXIgPj0gc21hbi0+bnVtX21hbmFnZXJzKTsKKworCXNtYW5fbW0gPSAmc21hbi0+bW1bbWFuYWdlcl07CisJdG1wID0gc21hbl9tbS0+YWxsb2NhdGUoc21hbl9tbS0+cHJpdmF0ZSwgc2l6ZSwgYWxpZ25tZW50KTsKKworCWlmICghdG1wKSB7CisJCXJldHVybiBOVUxMOworCX0KKworCW1lbWJsb2NrID0gZHJtX2NhbGxvYygxLCBzaXplb2YoKm1lbWJsb2NrKSwgRFJNX01FTV9NTSk7CisKKwlpZiAoIW1lbWJsb2NrKQorCQlnb3RvIG91dDsKKworCW1lbWJsb2NrLT5tbV9pbmZvID0gdG1wOworCW1lbWJsb2NrLT5tbSA9IHNtYW5fbW07CisJbWVtYmxvY2stPnNtYW4gPSBzbWFuOworCisJaWYgKGRybV9odF9qdXN0X2luc2VydF9wbGVhc2UKKwkgICAgKCZzbWFuLT51c2VyX2hhc2hfdGFiLCAmbWVtYmxvY2stPnVzZXJfaGFzaCwKKwkgICAgICh1bnNpZ25lZCBsb25nKW1lbWJsb2NrLCAzMiwgMCwgMCkpCisJCWdvdG8gb3V0MTsKKworCW93bmVyX2l0ZW0gPSBkcm1fc21hbl9nZXRfb3duZXJfaXRlbShzbWFuLCBvd25lcik7CisJaWYgKCFvd25lcl9pdGVtKQorCQlnb3RvIG91dDI7CisKKwlsaXN0X2FkZF90YWlsKCZtZW1ibG9jay0+b3duZXJfbGlzdCwgJm93bmVyX2l0ZW0tPm1lbV9ibG9ja3MpOworCisJcmV0dXJuIG1lbWJsb2NrOworCitvdXQyOgorCWRybV9odF9yZW1vdmVfaXRlbSgmc21hbi0+dXNlcl9oYXNoX3RhYiwgJm1lbWJsb2NrLT51c2VyX2hhc2gpOworb3V0MToKKwlkcm1fZnJlZShtZW1ibG9jaywgc2l6ZW9mKCptZW1ibG9jayksIERSTV9NRU1fTU0pOworb3V0OgorCXNtYW5fbW0tPmZyZWUoc21hbl9tbS0+cHJpdmF0ZSwgdG1wKTsKKworCXJldHVybiBOVUxMOworfQorCitFWFBPUlRfU1lNQk9MKGRybV9zbWFuX2FsbG9jKTsKKworc3RhdGljIHZvaWQgZHJtX3NtYW5fZnJlZShkcm1fbWVtYmxvY2tfaXRlbV90ICppdGVtKQoreworCWRybV9zbWFuX3QgKnNtYW4gPSBpdGVtLT5zbWFuOworCisJbGlzdF9kZWwoJml0ZW0tPm93bmVyX2xpc3QpOworCWRybV9odF9yZW1vdmVfaXRlbSgmc21hbi0+dXNlcl9oYXNoX3RhYiwgJml0ZW0tPnVzZXJfaGFzaCk7CisJaXRlbS0+bW0tPmZyZWUoaXRlbS0+bW0tPnByaXZhdGUsIGl0ZW0tPm1tX2luZm8pOworCWRybV9mcmVlKGl0ZW0sIHNpemVvZigqaXRlbSksIERSTV9NRU1fTU0pOworfQorCitpbnQgZHJtX3NtYW5fZnJlZV9rZXkoZHJtX3NtYW5fdCAqc21hbiwgdW5zaWduZWQgaW50IGtleSkKK3sKKwlkcm1faGFzaF9pdGVtX3QgKmhhc2hfaXRlbTsKKwlkcm1fbWVtYmxvY2tfaXRlbV90ICptZW1ibG9ja19pdGVtOworCisJaWYgKGRybV9odF9maW5kX2l0ZW0oJnNtYW4tPnVzZXJfaGFzaF90YWIsIGtleSwgJmhhc2hfaXRlbSkpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtYmxvY2tfaXRlbSA9IGRybV9oYXNoX2VudHJ5KGhhc2hfaXRlbSwgZHJtX21lbWJsb2NrX2l0ZW1fdCwgdXNlcl9oYXNoKTsKKwlkcm1fc21hbl9mcmVlKG1lbWJsb2NrX2l0ZW0pOworCXJldHVybiAwOworfQorCitFWFBPUlRfU1lNQk9MKGRybV9zbWFuX2ZyZWVfa2V5KTsKKworc3RhdGljIHZvaWQgZHJtX3NtYW5fcmVtb3ZlX293bmVyKGRybV9zbWFuX3QgKnNtYW4sCisJCQkJICBkcm1fb3duZXJfaXRlbV90ICpvd25lcl9pdGVtKQoreworCWxpc3RfZGVsKCZvd25lcl9pdGVtLT5zbWFuX2xpc3QpOworCWRybV9odF9yZW1vdmVfaXRlbSgmc21hbi0+b3duZXJfaGFzaF90YWIsICZvd25lcl9pdGVtLT5vd25lcl9oYXNoKTsKKwlkcm1fZnJlZShvd25lcl9pdGVtLCBzaXplb2YoKm93bmVyX2l0ZW0pLCBEUk1fTUVNX01NKTsKK30KKworaW50IGRybV9zbWFuX293bmVyX2NsZWFuKGRybV9zbWFuX3QgKnNtYW4sIHVuc2lnbmVkIGxvbmcgb3duZXIpCit7CisKKwlkcm1faGFzaF9pdGVtX3QgKmhhc2hfaXRlbTsKKwlkcm1fb3duZXJfaXRlbV90ICpvd25lcl9pdGVtOworCisJaWYgKGRybV9odF9maW5kX2l0ZW0oJnNtYW4tPm93bmVyX2hhc2hfdGFiLCBvd25lciwgJmhhc2hfaXRlbSkpIHsKKwkJcmV0dXJuIC0xOworCX0KKworCW93bmVyX2l0ZW0gPSBkcm1faGFzaF9lbnRyeShoYXNoX2l0ZW0sIGRybV9vd25lcl9pdGVtX3QsIG93bmVyX2hhc2gpOworCWlmIChvd25lcl9pdGVtLT5tZW1fYmxvY2tzLm5leHQgPT0gJm93bmVyX2l0ZW0tPm1lbV9ibG9ja3MpIHsKKwkJZHJtX3NtYW5fcmVtb3ZlX293bmVyKHNtYW4sIG93bmVyX2l0ZW0pOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK0VYUE9SVF9TWU1CT0woZHJtX3NtYW5fb3duZXJfY2xlYW4pOworCitzdGF0aWMgdm9pZCBkcm1fc21hbl9kb19vd25lcl9jbGVhbnVwKGRybV9zbWFuX3QgKnNtYW4sCisJCQkJICAgICAgZHJtX293bmVyX2l0ZW1fdCAqb3duZXJfaXRlbSkKK3sKKwlkcm1fbWVtYmxvY2tfaXRlbV90ICplbnRyeSwgKm5leHQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHQsICZvd25lcl9pdGVtLT5tZW1fYmxvY2tzLAorCQkJCSBvd25lcl9saXN0KSB7CisJCWRybV9zbWFuX2ZyZWUoZW50cnkpOworCX0KKwlkcm1fc21hbl9yZW1vdmVfb3duZXIoc21hbiwgb3duZXJfaXRlbSk7Cit9CisKK3ZvaWQgZHJtX3NtYW5fb3duZXJfY2xlYW51cChkcm1fc21hbl90ICpzbWFuLCB1bnNpZ25lZCBsb25nIG93bmVyKQoreworCisJZHJtX2hhc2hfaXRlbV90ICpoYXNoX2l0ZW07CisJZHJtX293bmVyX2l0ZW1fdCAqb3duZXJfaXRlbTsKKworCWlmIChkcm1faHRfZmluZF9pdGVtKCZzbWFuLT5vd25lcl9oYXNoX3RhYiwgb3duZXIsICZoYXNoX2l0ZW0pKSB7CisKKwkJcmV0dXJuOworCX0KKworCW93bmVyX2l0ZW0gPSBkcm1faGFzaF9lbnRyeShoYXNoX2l0ZW0sIGRybV9vd25lcl9pdGVtX3QsIG93bmVyX2hhc2gpOworCWRybV9zbWFuX2RvX293bmVyX2NsZWFudXAoc21hbiwgb3duZXJfaXRlbSk7Cit9CisKK0VYUE9SVF9TWU1CT0woZHJtX3NtYW5fb3duZXJfY2xlYW51cCk7CisKK3ZvaWQgZHJtX3NtYW5fY2xlYW51cChkcm1fc21hbl90ICpzbWFuKQoreworCWRybV9vd25lcl9pdGVtX3QgKmVudHJ5LCAqbmV4dDsKKwl1bnNpZ25lZCBpbnQgaTsKKwlkcm1fc21hbl9tbV90ICpzbWFuX21tOworCisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBuZXh0LCAmc21hbi0+b3duZXJfaXRlbXMsIHNtYW5fbGlzdCkgeworCQlkcm1fc21hbl9kb19vd25lcl9jbGVhbnVwKHNtYW4sIGVudHJ5KTsKKwl9CisJaWYgKHNtYW4tPm1tKSB7CisJCWZvciAoaSA9IDA7IGkgPCBzbWFuLT5udW1fbWFuYWdlcnM7ICsraSkgeworCQkJc21hbl9tbSA9ICZzbWFuLT5tbVtpXTsKKwkJCWlmIChzbWFuX21tLT5wcml2YXRlKSB7CisJCQkJc21hbl9tbS0+ZGVzdHJveShzbWFuX21tLT5wcml2YXRlKTsKKwkJCQlzbWFuX21tLT5wcml2YXRlID0gTlVMTDsKKwkJCX0KKwkJfQorCX0KK30KKworRVhQT1JUX1NZTUJPTChkcm1fc21hbl9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uaCBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3NtYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGM3MzJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL2RybS9kcm1fc21hbi5oCkBAIC0wLDAgKzEsMTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBDb3B5cmlnaHQgMjAwNiBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQmlzbWFyY2ssIE5ELiwgVVNBLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKKyAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCisgKiBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBTaW1wbGUgbWVtb3J5IE1BTmFnZXIgaW50ZXJmYWNlIHRoYXQga2VlcHMgdHJhY2sgb24gYWxsb2NhdGUgcmVnaW9ucyBvbiBhCisgKiBwZXIgIm93bmVyIiBiYXNpcy4gQWxsIHJlZ2lvbnMgYXNzb2NpYXRlZCB3aXRoIGFuICJvd25lciIgY2FuIGJlIHJlbGVhc2VkCisgKiB3aXRoIGEgc2ltcGxlIGNhbGwuIFR5cGljYWxseSBpZiB0aGUgIm93bmVyIiBleGlzdHMuIFRoZSBvd25lciBpcyBhbnkKKyAqICJ1bnNpZ25lZCBsb25nIiBpZGVudGlmaWVyLiBDYW4gdHlwaWNhbGx5IGJlIGEgcG9pbnRlciB0byBhIGZpbGUgcHJpdmF0ZQorICogc3RydWN0IG9yIGEgY29udGV4dCBpZGVudGlmaWVyLgorICoKKyAqIEF1dGhvcnM6CisgKiBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgorICovCisKKyNpZm5kZWYgRFJNX1NNQU5fSAorI2RlZmluZSBEUk1fU01BTl9ICisKKyNpbmNsdWRlICJkcm1QLmgiCisjaW5jbHVkZSAiZHJtX2hhc2h0YWIuaCIKKworLyoKKyAqIEEgY2xhc3MgdGhhdCBpcyBhbiBhYnN0cmF0aW9uIG9mIGEgc2ltcGxlIG1lbW9yeSBhbGxvY2F0b3IuCisgKiBUaGUgc21hbiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIGRlZmF1bHQgc3VjaCBhbGxvY2F0b3IKKyAqIHVzaW5nIHRoZSBkcm1fbW0uYyBpbXBsZW1lbnRhdGlvbi4gQnV0IHRoZSB1c2VyIGNhbiByZXBsYWNlIGl0LgorICogU2VlIHRoZSBTaVMgaW1wbGVtZW50YXRpb24sIHdoaWNoIG1heSB1c2UgdGhlIFNpUyBGQiBrZXJuZWwgbW9kdWxlCisgKiBmb3IgbWVtb3J5IG1hbmFnZW1lbnQuCisgKi8KKwordHlwZWRlZiBzdHJ1Y3QgZHJtX3NtYW5fbW0geworCS8qIHByaXZhdGUgaW5mby4gSWYgYWxsb2NhdGVkLCBuZWVkcyB0byBiZSBkZXN0cm95ZWQgYnkgdGhlIGRlc3Ryb3kKKwkgICBmdW5jdGlvbiAqLworCXZvaWQgKnByaXZhdGU7CisKKwkvKiBBbGxvY2F0ZSBhIG1lbW9yeSBibG9jayB3aXRoIGdpdmVuIHNpemUgYW5kIGFsaWdubWVudC4KKwkgICBSZXR1cm4gYW4gb3BhcXVlIHJlZmVyZW5jZSB0byB0aGUgbWVtb3J5IGJsb2NrICovCisKKwl2b2lkICooKmFsbG9jYXRlKSAodm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJICAgdW5zaWduZWQgYWxpZ25tZW50KTsKKworCS8qIEZyZWUgYSBtZW1vcnkgYmxvY2suICJyZWYiIGlzIHRoZSBvcGFxdWUgcmVmZXJlbmNlIHRoYXQgd2UgZ290IGZyb20KKwkgICB0aGUgImFsbG9jIiBmdW5jdGlvbiAqLworCisJdm9pZCAoKmZyZWUpICh2b2lkICpwcml2YXRlLCB2b2lkICpyZWYpOworCisJLyogRnJlZSBhbGwgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGFsbG9jYXRvciAqLworCisJdm9pZCAoKmRlc3Ryb3kpICh2b2lkICpwcml2YXRlKTsKKworCS8qIFJldHVybiBhIG1lbW9yeSBvZmZzZXQgZnJvbSB0aGUgb3BhcXVlIHJlZmVyZW5jZSByZXR1cm5lZCBmcm9tIHRoZQorCSAgICJhbGxvYyIgZnVuY3Rpb24gKi8KKworCXVuc2lnbmVkIGxvbmcgKCpvZmZzZXQpICh2b2lkICpwcml2YXRlLCB2b2lkICpyZWYpOworfSBkcm1fc21hbl9tbV90OworCit0eXBlZGVmIHN0cnVjdCBkcm1fbWVtYmxvY2tfaXRlbSB7CisJc3RydWN0IGxpc3RfaGVhZCBvd25lcl9saXN0OworCWRybV9oYXNoX2l0ZW1fdCB1c2VyX2hhc2g7CisJdm9pZCAqbW1faW5mbzsKKwlkcm1fc21hbl9tbV90ICptbTsKKwlzdHJ1Y3QgZHJtX3NtYW4gKnNtYW47Cit9IGRybV9tZW1ibG9ja19pdGVtX3Q7CisKK3R5cGVkZWYgc3RydWN0IGRybV9zbWFuIHsKKwlkcm1fc21hbl9tbV90ICptbTsKKwlpbnQgbnVtX21hbmFnZXJzOworCWRybV9vcGVuX2hhc2hfdCBvd25lcl9oYXNoX3RhYjsKKwlkcm1fb3Blbl9oYXNoX3QgdXNlcl9oYXNoX3RhYjsKKwlzdHJ1Y3QgbGlzdF9oZWFkIG93bmVyX2l0ZW1zOworfSBkcm1fc21hbl90OworCisvKgorICogVGFrZSBkb3duIGEgbWVtb3J5IG1hbmFnZXIuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGFmdGVyIGEKKyAqIHN1Y2Nlc3NmdWwgaW5pdCBhbmQgYWZ0ZXIgYSBjYWxsIHRvIGRybV9zbWFuX2NsZWFudXAuCisgKi8KKworZXh0ZXJuIHZvaWQgZHJtX3NtYW5fdGFrZWRvd24oZHJtX3NtYW5fdCAqIHNtYW4pOworCisvKgorICogQWxsb2NhdGUgc3RydWN0dXJlcyBmb3IgYSBtYW5hZ2VyLgorICogbnVtX21hbmFnZXJzIGFyZSB0aGUgbnVtYmVyIG9mIG1lbW9yeSBwb29scyB0byBtYW5hZ2UuIChWUkFNLCBBR1AsIC4uLi4pCisgKiB1c2VyX29yZGVyIGlzIHRoZSBsb2cyIG9mIHRoZSBudW1iZXIgb2YgYnVja2V0cyBpbiB0aGUgdXNlciBoYXNoIHRhYmxlLgorICoJICAgIHNldCB0aGlzIHRvIGFwcHJveGltYXRlbHkgbG9nMiBvZiB0aGUgbWF4IG51bWJlciBvZiBtZW1vcnkgcmVnaW9ucworICoJICAgIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgZm9yIF9hbGxfIHBvb2xzIHRvZ2V0aGVyLgorICogb3duZXJfb3JkZXIgaXMgdGhlIGxvZzIgb2YgdGhlIG51bWJlciBvZiBidWNrZXRzIGluIHRoZSBvd25lciBoYXNoIHRhYmxlLgorICoJICAgIHNldCB0aGlzIHRvIGFwcHJveGltYXRlbHkgbG9nMiBvZgorICoJICAgIHRoZSBudW1iZXIgb2YgY2xpZW50IGZpbGUgY29ubmVjdGlvbnMgdGhhdCB3aWxsCisgKgkgICAgYmUgdXNpbmcgdGhlIG1hbmFnZXIuCisgKgorICovCisKK2V4dGVybiBpbnQgZHJtX3NtYW5faW5pdChkcm1fc21hbl90ICogc21hbiwgdW5zaWduZWQgaW50IG51bV9tYW5hZ2VycywKKwkJCSB1bnNpZ25lZCBpbnQgdXNlcl9vcmRlciwgdW5zaWduZWQgaW50IG93bmVyX29yZGVyKTsKKworLyoKKyAqIEluaXRpYWxpemUgYSBkcm1fbW0uYyBhbGxvY2F0b3IuIFNob3VsZCBiZSBjYWxsZWQgb25seSBvbmNlIGZvciBlYWNoCisgKiBtYW5hZ2VyIHVubGVzcyBhIGN1c3RvbWl6ZWQgYWxsb2dhdG9yIGlzIHVzZWQuCisgKi8KKworZXh0ZXJuIGludCBkcm1fc21hbl9zZXRfcmFuZ2UoZHJtX3NtYW5fdCAqIHNtYW4sIHVuc2lnbmVkIGludCBtYW5hZ2VyLAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBzaXplKTsKKworLyoKKyAqIEluaXRpYWxpemUgYSBjdXN0b21pemVkIGFsbG9jYXRvciBmb3Igb25lIG9mIHRoZSBtYW5hZ2Vycy4KKyAqIChTZWUgdGhlIFNpUyBtb2R1bGUpLiBUaGUgb2JqZWN0IHBvaW50ZWQgdG8gYnkgImFsbG9jYXRvciIgaXMgY29waWVkLAorICogc28gaXQgY2FuIGJlIGRlc3Ryb3llZCBhZnRlciB0aGlzIGNhbGwuCisgKi8KKworZXh0ZXJuIGludCBkcm1fc21hbl9zZXRfbWFuYWdlcihkcm1fc21hbl90ICogc21hbiwgdW5zaWduZWQgaW50IG1hbmFuZ2VyLAorCQkJCWRybV9zbWFuX21tX3QgKiBhbGxvY2F0b3IpOworCisvKgorICogQWxsb2NhdGUgYSBtZW1vcnkgYmxvY2suIEFsaWdtZW50IGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCisgKi8KKworZXh0ZXJuIGRybV9tZW1ibG9ja19pdGVtX3QgKmRybV9zbWFuX2FsbG9jKGRybV9zbWFuX3QgKiBzbWFuLAorCQkJCQkgICB1bnNpZ25lZCBpbnQgbWFuYWdlciwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyBzaXplLAorCQkJCQkgICB1bnNpZ25lZCBhbGlnbm1lbnQsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgb3duZXIpOworLyoKKyAqIEZyZWUgYSBtZW1vcnkgYmxvY2sgaWRlbnRpZmllZCBieSBpdHMgdXNlciBoYXNoIGtleS4KKyAqLworCitleHRlcm4gaW50IGRybV9zbWFuX2ZyZWVfa2V5KGRybV9zbWFuX3QgKiBzbWFuLCB1bnNpZ25lZCBpbnQga2V5KTsKKworLyoKKyAqIHJldHVybnMgMSBpZmYgdGhlcmUgYXJlIG5vIHN0YWxlIG1lbW9yeSBibG9ja3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMgb3duZXIuCisgKiBUeXBpY2FsbHkgY2FsbGVkIHRvIGRldGVybWluZSBpZiB3ZSBuZWVkIHRvIGlkbGUgdGhlIGhhcmR3YXJlIGFuZCBjYWxsCisgKiBkcm1fc21hbl9vd25lcl9jbGVhbnVwLiBJZiB0aGVyZSBhcmUgbm8gc3RhbGUgbWVtb3J5IGJsb2NrcywgaXQgcmVtb3ZlcyBhbGwKKyAqIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggb3duZXIuCisgKi8KKworZXh0ZXJuIGludCBkcm1fc21hbl9vd25lcl9jbGVhbihkcm1fc21hbl90ICogc21hbiwgdW5zaWduZWQgbG9uZyBvd25lcik7CisKKy8qCisgKiBGcmVlcyBhbGwgc3RhbGUgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhpcyBvd25lci4gTm90ZSB0aGF0IHRoaXMKKyAqIHJlcXVpcmVzIHRoYXQgdGhlIGhhcmR3YXJlIGlzIGZpbmlzaGVkIHdpdGggYWxsIGJsb2Nrcywgc28gdGhlIGdyYXBoaWNzIGVuZ2luZQorICogc2hvdWxkIGJlIGlkbGVkIGJlZm9yZSB0aGlzIGNhbGwgaXMgbWFkZS4gVGhpcyBmdW5jdGlvbiBhbHNvIGZyZWVzCisgKiBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCAib3duZXIiIGFuZCBzaG91bGQgYmUgY2FsbGVkIHdoZW4gb3duZXIKKyAqIGlzIG5vdCBnb2luZyB0byBiZSByZWZlcmVuY2VkIGFueW1vcmUuCisgKi8KKworZXh0ZXJuIHZvaWQgZHJtX3NtYW5fb3duZXJfY2xlYW51cChkcm1fc21hbl90ICogc21hbiwgdW5zaWduZWQgbG9uZyBvd25lcik7CisKKy8qCisgKiBGcmVlcyBhbGwgc3RhbGUgbWVtb3J5IGJsb2NrcyBhc3NvY2lhdGVkIHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VyLgorICogU2VlIGlkbGluZyBhYm92ZS4KKyAqLworCitleHRlcm4gdm9pZCBkcm1fc21hbl9jbGVhbnVwKGRybV9zbWFuX3QgKiBzbWFuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV9zdHViLmMKaW5kZXggOWE4NDJhMy4uN2IxZDRlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fc3R1Yi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3N0dWIuYwpAQCAtNjUsMjIgKzY1LDIyIEBACiAJbXV0ZXhfaW5pdCgmZGV2LT5jdHhsaXN0X211dGV4KTsKIAogCWRldi0+cGRldiA9IHBkZXY7CisJZGV2LT5wY2lfZGV2aWNlID0gcGRldi0+ZGV2aWNlOworCWRldi0+cGNpX3ZlbmRvciA9IHBkZXYtPnZlbmRvcjsKIAogI2lmZGVmIF9fYWxwaGFfXwogCWRldi0+aG9zZSA9IHBkZXYtPnN5c2RhdGE7Ci0JZGV2LT5wY2lfZG9tYWluID0gZGV2LT5ob3NlLT5idXMtPm51bWJlcjsKLSNlbHNlCi0JZGV2LT5wY2lfZG9tYWluID0gMDsKICNlbmRpZgotCWRldi0+cGNpX2J1cyA9IHBkZXYtPmJ1cy0+bnVtYmVyOwotCWRldi0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChwZGV2LT5kZXZmbik7Ci0JZGV2LT5wY2lfZnVuYyA9IFBDSV9GVU5DKHBkZXYtPmRldmZuKTsKIAlkZXYtPmlycSA9IHBkZXYtPmlycTsKIAogCWRldi0+bWFwbGlzdCA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKCpkZXYtPm1hcGxpc3QpLCBEUk1fTUVNX01BUFMpOwogCWlmIChkZXYtPm1hcGxpc3QgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+bWFwbGlzdC0+aGVhZCk7CisJaWYgKGRybV9odF9jcmVhdGUoJmRldi0+bWFwX2hhc2gsIDEyKSkgeworCQlkcm1fZnJlZShkZXYtPm1hcGxpc3QsIHNpemVvZigqZGV2LT5tYXBsaXN0KSwgRFJNX01FTV9NQVBTKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogdGhlIERSTSBoYXMgNiBiYXNpYyBjb3VudGVycyAqLwogCWRldi0+Y291bnRlcnMgPSA2OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYyBiL2RyaXZlcnMvY2hhci9kcm0vZHJtX3ZtLmMKaW5kZXggZmZkMDgwMC4uYjQwYWU0MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9kcm1fdm0uYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2RybV92bS5jCkBAIC01OSw3ICs1OSw3IEBACiAJZHJtX2RldmljZV90ICpkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZHJtX21hcF90ICptYXAgPSBOVUxMOwogCWRybV9tYXBfbGlzdF90ICpyX2xpc3Q7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKwlkcm1faGFzaF9pdGVtX3QgKmhhc2g7CiAKIAkvKgogCSAqIEZpbmQgdGhlIHJpZ2h0IG1hcApAQCAtNzAsMTQgKzcwLDExIEBACiAJaWYgKCFkZXYtPmFncCB8fCAhZGV2LT5hZ3AtPmNhbnRfdXNlX2FwZXJ0dXJlKQogCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKIAotCWxpc3RfZm9yX2VhY2gobGlzdCwgJmRldi0+bWFwbGlzdC0+aGVhZCkgewotCQlyX2xpc3QgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV9tYXBfbGlzdF90LCBoZWFkKTsKLQkJbWFwID0gcl9saXN0LT5tYXA7Ci0JCWlmICghbWFwKQotCQkJY29udGludWU7Ci0JCWlmIChyX2xpc3QtPnVzZXJfdG9rZW4gPT0gVk1fT0ZGU0VUKHZtYSkpCi0JCQlicmVhazsKLQl9CisJaWYgKGRybV9odF9maW5kX2l0ZW0oJmRldi0+bWFwX2hhc2gsIHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCwgJmhhc2gpKQorCQlnb3RvIHZtX25vcGFnZV9lcnJvcjsKKworCXJfbGlzdCA9IGRybV9oYXNoX2VudHJ5KGhhc2gsIGRybV9tYXBfbGlzdF90LCBoYXNoKTsKKwltYXAgPSByX2xpc3QtPm1hcDsKIAogCWlmIChtYXAgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKSB7CiAJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CkBAIC00NjcsNyArNDY0LDcgQEAKIAlkZXYgPSBwcml2LT5oZWFkLT5kZXY7CiAJZG1hID0gZGV2LT5kbWE7CiAJRFJNX0RFQlVHKCJzdGFydCA9IDB4JWx4LCBlbmQgPSAweCVseCwgb2Zmc2V0ID0gMHglbHhcbiIsCi0JCSAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIFZNX09GRlNFVCh2bWEpKTsKKwkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUKTsKIAogCS8qIExlbmd0aCBtdXN0IG1hdGNoIGV4YWN0IHBhZ2UgY291bnQgKi8KIAlpZiAoIWRtYSB8fCAobGVuZ3RoID4+IFBBR0VfU0hJRlQpICE9IGRtYS0+cGFnZV9jb3VudCkgewpAQCAtNTIxLDEyICs1MTgsMTEgQEAKIAlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCWRybV9kZXZpY2VfdCAqZGV2ID0gcHJpdi0+aGVhZC0+ZGV2OwogCWRybV9tYXBfdCAqbWFwID0gTlVMTDsKLQlkcm1fbWFwX2xpc3RfdCAqcl9saXN0OwogCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gMDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OworCWRybV9oYXNoX2l0ZW1fdCAqaGFzaDsKIAogCURSTV9ERUJVRygic3RhcnQgPSAweCVseCwgZW5kID0gMHglbHgsIG9mZnNldCA9IDB4JWx4XG4iLAotCQkgIHZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCBWTV9PRkZTRVQodm1hKSk7CisJCSAgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHZtYS0+dm1fcGdvZmYgPDwgUEFHRV9TSElGVCk7CiAKIAlpZiAoIXByaXYtPmF1dGhlbnRpY2F0ZWQpCiAJCXJldHVybiAtRUFDQ0VTOwpAQCAtNTM1LDcgKzUzMSw3IEBACiAJICogdGhlIEFHUCBtYXBwZWQgYXQgcGh5c2ljYWwgYWRkcmVzcyAwCiAJICogLS1CZW5ILgogCSAqLwotCWlmICghVk1fT0ZGU0VUKHZtYSkKKwlpZiAoISh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpCiAjaWYgX19PU19IQVNfQUdQCiAJICAgICYmICghZGV2LT5hZ3AKIAkJfHwgZGV2LT5hZ3AtPmFncF9pbmZvLmRldmljZS0+dmVuZG9yICE9IFBDSV9WRU5ET1JfSURfQVBQTEUpCkBAIC01NDMsMjMgKzUzOSwxMiBAQAogCSAgICApCiAJCXJldHVybiBkcm1fbW1hcF9kbWEoZmlscCwgdm1hKTsKIAotCS8qIEEgc2VxdWVudGlhbCBzZWFyY2ggb2YgYSBsaW5rZWQgbGlzdCBpcwotCSAgIGZpbmUgaGVyZSBiZWNhdXNlOiAxKSB0aGVyZSB3aWxsIG9ubHkgYmUKLQkgICBhYm91dCA1LTEwIGVudHJpZXMgaW4gdGhlIGxpc3QgYW5kLCAyKSBhCi0JICAgRFJJIGNsaWVudCBvbmx5IGhhcyB0byBkbyB0aGlzIG1hcHBpbmcKLQkgICBvbmNlLCBzbyBpdCBkb2Vzbid0IGhhdmUgdG8gYmUgb3B0aW1pemVkCi0JICAgZm9yIHBlcmZvcm1hbmNlLCBldmVuIGlmIHRoZSBsaXN0IHdhcyBhCi0JICAgYml0IGxvbmdlci4gKi8KLQlsaXN0X2Zvcl9lYWNoKGxpc3QsICZkZXYtPm1hcGxpc3QtPmhlYWQpIHsKLQotCQlyX2xpc3QgPSBsaXN0X2VudHJ5KGxpc3QsIGRybV9tYXBfbGlzdF90LCBoZWFkKTsKLQkJbWFwID0gcl9saXN0LT5tYXA7Ci0JCWlmICghbWFwKQotCQkJY29udGludWU7Ci0JCWlmIChyX2xpc3QtPnVzZXJfdG9rZW4gPT0gVk1fT0ZGU0VUKHZtYSkpCi0JCQlicmVhazsKKwlpZiAoZHJtX2h0X2ZpbmRfaXRlbSgmZGV2LT5tYXBfaGFzaCwgdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZULCAmaGFzaCkpIHsKKwkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCBtYXBcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwltYXAgPSBkcm1faGFzaF9lbnRyeShoYXNoLCBkcm1fbWFwX2xpc3RfdCwgaGFzaCktPm1hcDsKIAlpZiAoIW1hcCB8fCAoKG1hcC0+ZmxhZ3MgJiBfRFJNX1JFU1RSSUNURUQpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKSkKIAkJcmV0dXJuIC1FUEVSTTsKIApAQCAtNjIwLDcgKzYwNSw3IEBACiAJCW9mZnNldCA9IGRldi0+ZHJpdmVyLT5nZXRfcmVnX29mcyhkZXYpOwogI2lmZGVmIF9fc3BhcmNfXwogCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOwotCQlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKERSTV9SUFJfQVJHKHZtYSkgdm1hLT52bV9zdGFydCwKKwkJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCiAJCQkJICAgICAgIChtYXAtPm9mZnNldCArIG9mZnNldCkgPj4gUEFHRV9TSElGVCwKIAkJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LAogCQkJCSAgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMgYi9kcml2ZXJzL2NoYXIvZHJtL2k4MTBfZG1hLmMKaW5kZXggYzY1OGRkZS4uZmEyZGU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9pODEwX2RtYS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vaTgxMF9kbWEuYwpAQCAtMTA2LDcgKzEwNiw3IEBACiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJaWYgKGlvX3JlbWFwX3Bmbl9yYW5nZSh2bWEsIHZtYS0+dm1fc3RhcnQsCi0JCQkgICAgICAgVk1fT0ZGU0VUKHZtYSkgPj4gUEFHRV9TSElGVCwKKwkJCSAgICAgICB2bWEtPnZtX3Bnb2ZmLAogCQkJICAgICAgIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCwgdm1hLT52bV9wYWdlX3Byb3QpKQogCQlyZXR1cm4gLUVBR0FJTjsKIAlyZXR1cm4gMDsKQEAgLTE0MSwxMCArMTQxLDEwIEBACiAJCQkJCSAgICBNQVBfU0hBUkVELCBidWYtPmJ1c19hZGRyZXNzKTsKIAlkZXZfcHJpdi0+bW1hcF9idWZmZXIgPSBOVUxMOwogCWZpbHAtPmZfb3AgPSBvbGRfZm9wczsKLQlpZiAoKHVuc2lnbmVkIGxvbmcpYnVmX3ByaXYtPnZpcnR1YWwgPiAtMTAyNFVMKSB7CisJaWYgKElTX0VSUihidWZfcHJpdi0+dmlydHVhbCkpIHsKIAkJLyogUmVhbCBlcnJvciAqLwogCQlEUk1fRVJST1IoIm1tYXAgZXJyb3JcbiIpOwotCQlyZXRjb2RlID0gKHNpZ25lZCBpbnQpYnVmX3ByaXYtPnZpcnR1YWw7CisJCXJldGNvZGUgPSBQVFJfRVJSKGJ1Zl9wcml2LT52aXJ0dWFsKTsKIAkJYnVmX3ByaXYtPnZpcnR1YWwgPSBOVUxMOwogCX0KIAl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKQEAgLTgwOCw3ICs4MDgsNyBAQAogCQkgICAgKChHRlhfT1BfUFJJTUlUSVZFIHwgcHJpbSB8ICgodXNlZCAvIDQpIC0gMikpKTsKIAogCQlpZiAodXNlZCAmIDQpIHsKLQkJCSoodTMyICopICgodTMyKSBidWZfcHJpdi0+a2VybmVsX3ZpcnR1YWwgKyB1c2VkKSA9IDA7CisJCQkqKHUzMiAqKSAoKGNoYXIgKikgYnVmX3ByaXYtPmtlcm5lbF92aXJ0dWFsICsgdXNlZCkgPSAwOwogCQkJdXNlZCArPSA0OwogCQl9CiAKQEAgLTExNjYsNyArMTE2Niw3IEBACiAKIAlpZiAoYnVmX3ByaXYtPmN1cnJlbnRseV9tYXBwZWQgPT0gSTgxMF9CVUZfTUFQUEVEKSB7CiAJCWlmICh1c2VkICYgNCkgewotCQkJKih1MzIgKikgKCh1MzIpIGJ1Zl9wcml2LT52aXJ0dWFsICsgdXNlZCkgPSAwOworCQkJKih1MzIgKikgKChjaGFyICopIGJ1Zl9wcml2LT52aXJ0dWFsICsgdXNlZCkgPSAwOwogCQkJdXNlZCArPSA0OwogCQl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kbWEuYyBiL2RyaXZlcnMvY2hhci9kcm0vaTgzMF9kbWEuYwppbmRleCBiMGY4MTVkLi40ZjBlNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k4MzBfZG1hLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pODMwX2RtYS5jCkBAIC0xMDgsNyArMTA4LDcgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwKLQkJCSAgICAgICBWTV9PRkZTRVQodm1hKSA+PiBQQUdFX1NISUZULAorCQkJICAgICAgIHZtYS0+dm1fcGdvZmYsCiAJCQkgICAgICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX3BhZ2VfcHJvdCkpCiAJCXJldHVybiAtRUFHQUlOOwogCXJldHVybiAwOwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAJaWYgKElTX0VSUigodm9pZCAqKXZpcnR1YWwpKSB7CS8qIHVnaCAqLwogCQkvKiBSZWFsIGVycm9yICovCiAJCURSTV9FUlJPUigibW1hcCBlcnJvclxuIik7Ci0JCXJldGNvZGUgPSB2aXJ0dWFsOworCQlyZXRjb2RlID0gUFRSX0VSUigodm9pZCAqKXZpcnR1YWwpOwogCQlidWZfcHJpdi0+dmlydHVhbCA9IE5VTEw7CiAJfSBlbHNlIHsKIAkJYnVmX3ByaXYtPnZpcnR1YWwgPSAodm9pZCBfX3VzZXIgKil2aXJ0dWFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RtYS5jCmluZGV4IGE5NDIzM2IuLmZiNzkxM2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZG1hLmMKQEAgLTMxLDYgKzMxLDExIEBACiAjaW5jbHVkZSAiaTkxNV9kcm0uaCIKICNpbmNsdWRlICJpOTE1X2Rydi5oIgogCisjZGVmaW5lIElTX0k5NjVHKGRldikgKGRldi0+cGNpX2RldmljZSA9PSAweDI5NzIgfHwgXAorCQkgICAgICAgZGV2LT5wY2lfZGV2aWNlID09IDB4Mjk4MiB8fCBcCisJCSAgICAgICBkZXYtPnBjaV9kZXZpY2UgPT0gMHgyOTkyIHx8IFwKKwkJICAgICAgIGRldi0+cGNpX2RldmljZSA9PSAweDI5QTIpCisKIC8qIFJlYWxseSB3YW50IGFuIE9TLWluZGVwZW5kZW50IHJlc2V0dGFibGUgdGltZXIuICBXb3VsZCBsaWtlIHRvIGhhdmUKICAqIHRoaXMgbG9vcCBydW4gZm9yIChlZykgMyBzZWMsIGJ1dCBoYXZlIHRoZSB0aW1lciByZXNldCBldmVyeSB0aW1lCiAgKiB0aGUgaGVhZCBwb2ludGVyIGNoYW5nZXMsIHNvIHRoYXQgRUJVU1kgb25seSBoYXBwZW5zIGlmIHRoZSByaW5nCkBAIC0yNTUsNyArMjYwLDcgQEAKIAkJcmV0Y29kZSA9IGk5MTVfZG1hX3Jlc3VtZShkZXYpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZXRjb2RlID0gLUVJTlZBTDsKKwkJcmV0Y29kZSA9IERSTV9FUlIoRUlOVkFMKTsKIAkJYnJlYWs7CiAJfQogCkBAIC0zNDcsNyArMzUyLDcgQEAKIAlpZiAoKGR3b3JkcysxKSAqIHNpemVvZihpbnQpID49IGRldl9wcml2LT5yaW5nLlNpemUgLSA4KQogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCi0JQkVHSU5fTFBfUklORygoKGR3b3JkcysxKSZ+MSkpOworCUJFR0lOX0xQX1JJTkcoKGR3b3JkcysxKSZ+MSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZHdvcmRzOykgewogCQlpbnQgY21kLCBzejsKQEAgLTM4Niw3ICszOTEsNyBAQAogCVJJTkdfTE9DQUxTOwogCiAJaWYgKERSTV9DT1BZX0ZST01fVVNFUl9VTkNIRUNLRUQoJmJveCwgJmJveGVzW2ldLCBzaXplb2YoYm94KSkpIHsKLQkJcmV0dXJuIEVGQVVMVDsKKwkJcmV0dXJuIERSTV9FUlIoRUZBVUxUKTsKIAl9CiAKIAlpZiAoYm94LnkyIDw9IGJveC55MSB8fCBib3gueDIgPD0gYm94LngxIHx8IGJveC55MiA8PSAwIHx8IGJveC54MiA8PSAwKSB7CkBAIC0zOTUsMjQgKzQwMCw0MCBAQAogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0KIAotCUJFR0lOX0xQX1JJTkcoNik7Ci0JT1VUX1JJTkcoR0ZYX09QX0RSQVdSRUNUX0lORk8pOwotCU9VVF9SSU5HKERSMSk7Ci0JT1VUX1JJTkcoKGJveC54MSAmIDB4ZmZmZikgfCAoYm94LnkxIDw8IDE2KSk7Ci0JT1VUX1JJTkcoKChib3gueDIgLSAxKSAmIDB4ZmZmZikgfCAoKGJveC55MiAtIDEpIDw8IDE2KSk7Ci0JT1VUX1JJTkcoRFI0KTsKLQlPVVRfUklORygwKTsKLQlBRFZBTkNFX0xQX1JJTkcoKTsKKwlpZiAoSVNfSTk2NUcoZGV2KSkgeworCQlCRUdJTl9MUF9SSU5HKDQpOworCQlPVVRfUklORyhHRlhfT1BfRFJBV1JFQ1RfSU5GT19JOTY1KTsKKwkJT1VUX1JJTkcoKGJveC54MSAmIDB4ZmZmZikgfCAoYm94LnkxIDw8IDE2KSk7CisJCU9VVF9SSU5HKCgoYm94LngyIC0gMSkgJiAweGZmZmYpIHwgKChib3gueTIgLSAxKSA8PCAxNikpOworCQlPVVRfUklORyhEUjQpOworCQlBRFZBTkNFX0xQX1JJTkcoKTsKKwl9IGVsc2UgeworCQlCRUdJTl9MUF9SSU5HKDYpOworCQlPVVRfUklORyhHRlhfT1BfRFJBV1JFQ1RfSU5GTyk7CisJCU9VVF9SSU5HKERSMSk7CisJCU9VVF9SSU5HKChib3gueDEgJiAweGZmZmYpIHwgKGJveC55MSA8PCAxNikpOworCQlPVVRfUklORygoKGJveC54MiAtIDEpICYgMHhmZmZmKSB8ICgoYm94LnkyIC0gMSkgPDwgMTYpKTsKKwkJT1VUX1JJTkcoRFI0KTsKKwkJT1VUX1JJTkcoMCk7CisJCUFEVkFOQ0VfTFBfUklORygpOworCX0KIAogCXJldHVybiAwOwogfQogCisvKiBYWFg6IEVtaXR0aW5nIHRoZSBjb3VudGVyIHNob3VsZCByZWFsbHkgYmUgbW92ZWQgdG8gcGFydCBvZiB0aGUgSVJRCisgKiBlbWl0LiBGb3Igbm93LCBkbyBpdCBpbiBib3RoIHBsYWNlczoKKyAqLworCiBzdGF0aWMgdm9pZCBpOTE1X2VtaXRfYnJlYWRjcnVtYihkcm1fZGV2aWNlX3QgKmRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlSSU5HX0xPQ0FMUzsKIAotCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSBkZXZfcHJpdi0+Y291bnRlcisrOworCWRldl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2VucXVldWUgPSArK2Rldl9wcml2LT5jb3VudGVyOworCisJaWYgKGRldl9wcml2LT5jb3VudGVyID4gMHg3RkZGRkZGRlVMKQorCQlkZXZfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9lbnF1ZXVlID0gZGV2X3ByaXYtPmNvdW50ZXIgPSAxOwogCiAJQkVHSU5fTFBfUklORyg0KTsKIAlPVVRfUklORyhDTURfU1RPUkVfRFdPUkRfSURYKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcm0uaCBiL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcm0uaAppbmRleCA1YWEzZTBlLi42YWY4M2U2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2RybS5oCkBAIC05OCw2ICs5OCwxMiBAQAogCWludCByb3RhdGVkX3NpemU7CiAJaW50IHJvdGF0ZWRfcGl0Y2g7CiAJaW50IHZpcnR1YWxYLCB2aXJ0dWFsWTsKKworCXVuc2lnbmVkIGludCBmcm9udF90aWxlZDsKKwl1bnNpZ25lZCBpbnQgYmFja190aWxlZDsKKwl1bnNpZ25lZCBpbnQgZGVwdGhfdGlsZWQ7CisJdW5zaWduZWQgaW50IHJvdGF0ZWRfdGlsZWQ7CisJdW5zaWduZWQgaW50IHJvdGF0ZWQyX3RpbGVkOwogfSBkcm1faTkxNV9zYXJlYV90OwogCiAvKiBGbGFncyBmb3IgcGVyZl9ib3hlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2Rydi5oCmluZGV4IDJkNTY1MDMuLmZkYzJiZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfZHJ2LmgKQEAgLTE0Niw5ICsxNDYsOSBAQAogI2RlZmluZSBCRUdJTl9MUF9SSU5HKG4pIGRvIHsJCQkJXAogCWlmIChJOTE1X1ZFUkJPU0UpCQkJCVwKIAkJRFJNX0RFQlVHKCJCRUdJTl9MUF9SSU5HKCVkKSBpbiAlc1xuIiwJXAotCQkJICBuLCBfX0ZVTkNUSU9OX18pOwkJXAotCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8IG4qNCkJCQlcCi0JCWk5MTVfd2FpdF9yaW5nKGRldiwgbio0LCBfX0ZVTkNUSU9OX18pOwkJXAorCQkJICAobiksIF9fRlVOQ1RJT05fXyk7CQlcCisJaWYgKGRldl9wcml2LT5yaW5nLnNwYWNlIDwgKG4pKjQpCQkJXAorCQlpOTE1X3dhaXRfcmluZyhkZXYsIChuKSo0LCBfX0ZVTkNUSU9OX18pOwkJXAogCW91dGNvdW50ID0gMDsJCQkJCVwKIAlvdXRyaW5nID0gZGV2X3ByaXYtPnJpbmcudGFpbDsJCQlcCiAJcmluZ21hc2sgPSBkZXZfcHJpdi0+cmluZy50YWlsX21hc2s7CQlcCkBAIC0xNTcsNyArMTU3LDcgQEAKIAogI2RlZmluZSBPVVRfUklORyhuKSBkbyB7CQkJCQlcCiAJaWYgKEk5MTVfVkVSQk9TRSkgRFJNX0RFQlVHKCIgICBPVVRfUklORyAleFxuIiwgKGludCkobikpOwlcCi0JKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikodmlydCArIG91dHJpbmcpID0gbjsJCVwKKwkqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh2aXJ0ICsgb3V0cmluZykgPSAobik7CVwKICAgICAgICAgb3V0Y291bnQrKzsJCQkJCQlcCiAJb3V0cmluZyArPSA0OwkJCQkJCVwKIAlvdXRyaW5nICY9IHJpbmdtYXNrOwkJCQkJXApAQCAtMjU0LDYgKzI1NCw4IEBACiAjZGVmaW5lIEdGWF9PUF9ERVNUQlVGRkVSX1ZBUlMgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODU8PDE2KXwweDApCiAjZGVmaW5lIEdGWF9PUF9EUkFXUkVDVF9JTkZPICAgICAoKDB4Mzw8MjkpfCgweDFkPDwyNCl8KDB4ODA8PDE2KXwoMHgzKSkKIAorI2RlZmluZSBHRlhfT1BfRFJBV1JFQ1RfSU5GT19JOTY1ICgoMHg3OTAwPDwxNil8MHgyKQorCiAjZGVmaW5lIE1JX0JBVENIX0JVRkZFUiAJKCgweDMwPDwyMyl8MSkKICNkZWZpbmUgTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIAkoMHgzMTw8MjMpCiAjZGVmaW5lIE1JX0JBVENIX0JVRkZFUl9FTkQgCSgweEE8PDIzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jIGIvZHJpdmVycy9jaGFyL2RybS9pOTE1X2lycS5jCmluZGV4IGNkOTZjZmEuLjBkNGExNjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vaTkxNV9pcnEuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL2k5MTVfaXJxLmMKQEAgLTcxLDIxICs3MSwyNyBAQAogc3RhdGljIGludCBpOTE1X2VtaXRfaXJxKGRybV9kZXZpY2VfdCAqIGRldikKIHsKIAlkcm1faTkxNV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQl1MzIgcmV0OwogCVJJTkdfTE9DQUxTOwogCiAJaTkxNV9rZXJuZWxfbG9zdF9jb250ZXh0KGRldik7CiAKIAlEUk1fREVCVUcoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOwogCi0JcmV0ID0gZGV2X3ByaXYtPmNvdW50ZXI7CisJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9ICsrZGV2X3ByaXYtPmNvdW50ZXI7CiAKLQlCRUdJTl9MUF9SSU5HKDIpOworCWlmIChkZXZfcHJpdi0+Y291bnRlciA+IDB4N0ZGRkZGRkZVTCkKKwkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfZW5xdWV1ZSA9IGRldl9wcml2LT5jb3VudGVyID0gMTsKKworCUJFR0lOX0xQX1JJTkcoNik7CisJT1VUX1JJTkcoQ01EX1NUT1JFX0RXT1JEX0lEWCk7CisJT1VUX1JJTkcoMjApOworCU9VVF9SSU5HKGRldl9wcml2LT5jb3VudGVyKTsKKwlPVVRfUklORygwKTsKIAlPVVRfUklORygwKTsKIAlPVVRfUklORyhHRlhfT1BfVVNFUl9JTlRFUlJVUFQpOwogCUFEVkFOQ0VfTFBfUklORygpOwotCi0JcmV0dXJuIHJldDsKKwkKKwlyZXR1cm4gZGV2X3ByaXYtPmNvdW50ZXI7CiB9CiAKIHN0YXRpYyBpbnQgaTkxNV93YWl0X2lycShkcm1fZGV2aWNlX3QgKiBkZXYsIGludCBpcnFfbnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fY3AuYwppbmRleCA1YWQ0M2JhLi41ZWQ5NjU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9jcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2NwLmMKQEAgLTg2NCwxMyArODY0LDEzIEBACiAKIAlkZXZfcHJpdi0+c3RhdHMuYm94ZXMgfD0gUkFERU9OX0JPWF9XQUlUX0lETEU7CiAKLQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFUKTsKLQl0bXAgfD0gUkFERU9OX1JCMkRfRENfRkxVU0hfQUxMOwotCVJBREVPTl9XUklURShSQURFT05fUkIyRF9EU1RDQUNIRV9DVExTVEFULCB0bXApOworCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9SQjNEX0RTVENBQ0hFX0NUTFNUQVQpOworCXRtcCB8PSBSQURFT05fUkIzRF9EQ19GTFVTSF9BTEw7CisJUkFERU9OX1dSSVRFKFJBREVPTl9SQjNEX0RTVENBQ0hFX0NUTFNUQVQsIHRtcCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7Ci0JCWlmICghKFJBREVPTl9SRUFEKFJBREVPTl9SQjJEX0RTVENBQ0hFX0NUTFNUQVQpCi0JCSAgICAgICYgUkFERU9OX1JCMkRfRENfQlVTWSkpIHsKKwkJaWYgKCEoUkFERU9OX1JFQUQoUkFERU9OX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCkKKwkJICAgICAgJiBSQURFT05fUkIzRF9EQ19CVVNZKSkgewogCQkJcmV0dXJuIDA7CiAJCX0KIAkJRFJNX1VERUxBWSgxKTsKQEAgLTExMzAsNyArMTEzMCw3IEBACiAJCQkgICAgIHwgKGRldl9wcml2LT5mYl9sb2NhdGlvbiA+PiAxNikpOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfQUdQKSB7CisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJUkFERU9OX1dSSVRFKFJBREVPTl9BR1BfQkFTRSwgKHVuc2lnbmVkIGludClkZXYtPmFncC0+YmFzZSk7CiAJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLAogCQkJICAgICAoKChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKwpAQCAtMTE1OCw3ICsxMTU4LDcgQEAKIAlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfQUdQKSB7CisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsCiAJCQkgICAgIGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldAogCQkJICAgICAtIGRldi0+YWdwLT5iYXNlICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwpAQCAtMTI1OCw2ICsxMjU4LDEzIEBACiAJCWRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPSAwOwogCQlEUk1fSU5GTygid3JpdGViYWNrIGZvcmNlZCBvZmZcbiIpOwogCX0KKworCWlmICghZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykgeworCQkvKiBEaXNhYmxlIHdyaXRlYmFjayB0byBhdm9pZCB1bm5lY2Vzc2FyeSBidXMgbWFzdGVyIHRyYW5zZmVyICovCisJCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUkFERU9OX0NQX1JCX0NOVEwpIHwKKwkJCSAgICAgUkFERU9OX1JCX05PX1VQREFURSk7CisJCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9VTVNLLCAwKTsKKwl9CiB9CiAKIC8qIEVuYWJsZSBvciBkaXNhYmxlIFBDSS1FIEdBUlQgb24gdGhlIGNoaXAgKi8KQEAgLTEyOTUsNyArMTMwMiw3IEBACiB7CiAJdTMyIHRtcDsKIAotCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX1BDSUUpIHsKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKIAkJcmFkZW9uX3NldF9wY2llZ2FydChkZXZfcHJpdiwgb24pOwogCQlyZXR1cm47CiAJfQpAQCAtMTMzMywyMCArMTM0MCwyMiBAQAogCURSTV9ERUJVRygiXG4iKTsKIAogCS8qIGlmIHdlIHJlcXVpcmUgbmV3IG1lbW9yeSBtYXAgYnV0IHdlIGRvbid0IGhhdmUgaXQgZmFpbCAqLwotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9ORVdfTUVNTUFQKSAmJiAhZGV2X3ByaXYtPm5ld19tZW1tYXApCi0JewotCQlEUk1fRVJST1IoIkNhbm5vdCBpbml0aWFsaXNlIERSTSBvbiB0aGlzIGNhcmRcblRoaXMgY2FyZCByZXF1aXJlcyBhIG5ldyBYLm9yZyBERFhcbiIpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX05FV19NRU1NQVApICYmICFkZXZfcHJpdi0+bmV3X21lbW1hcCkgeworCQlEUk1fRVJST1IoIkNhbm5vdCBpbml0aWFsaXNlIERSTSBvbiB0aGlzIGNhcmRcblRoaXMgY2FyZCByZXF1aXJlcyBhIG5ldyBYLm9yZyBERFggZm9yIDNEXG4iKTsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoaW5pdC0+aXNfcGNpICYmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX0FHUCkpCi0JeworCWlmIChpbml0LT5pc19wY2kgJiYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApKSB7CiAJCURSTV9ERUJVRygiRm9yY2luZyBBR1AgY2FyZCB0byBQQ0kgbW9kZVxuIik7Ci0JCWRldl9wcml2LT5mbGFncyAmPSB+Q0hJUF9JU19BR1A7CisJCWRldl9wcml2LT5mbGFncyAmPSB+UkFERU9OX0lTX0FHUDsKKwl9IGVsc2UgaWYgKCEoZGV2X3ByaXYtPmZsYWdzICYgKFJBREVPTl9JU19BR1AgfCBSQURFT05fSVNfUENJIHwgUkFERU9OX0lTX1BDSUUpKQorCQkgICAmJiAhaW5pdC0+aXNfcGNpKSB7CisJCURSTV9ERUJVRygiUmVzdG9yaW5nIEFHUCBmbGFnXG4iKTsKKwkJZGV2X3ByaXYtPmZsYWdzIHw9IFJBREVPTl9JU19BR1A7CiAJfQogCi0JaWYgKCghKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfQUdQKSkgJiYgIWRldi0+c2cpIHsKKwlpZiAoKCEoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkpICYmICFkZXYtPnNnKSB7CiAJCURSTV9FUlJPUigiUENJIEdBUlQgbWVtb3J5IG5vdCBhbGxvY2F0ZWQhXG4iKTsKIAkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKQEAgLTE0ODksNyArMTQ5OCw3IEBACiAJCQkJICAgIGluaXQtPnNhcmVhX3ByaXZfb2Zmc2V0KTsKIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX0FHUCkgeworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CiAJCWRybV9jb3JlX2lvcmVtYXAoZGV2X3ByaXYtPmNwX3JpbmcsIGRldik7CiAJCWRybV9jb3JlX2lvcmVtYXAoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsKIAkJZHJtX2NvcmVfaW9yZW1hcChkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOwpAQCAtMTU0OCw3ICsxNTU3LDcgQEAKIAkJICogYWxpZ24gaXQgZG93bi4KIAkJICovCiAjaWYgX19PU19IQVNfQUdQCi0JCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX0FHUCkgeworCQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQkJYmFzZSA9IGRldi0+YWdwLT5iYXNlOwogCQkJLyogQ2hlY2sgaWYgdmFsaWQgKi8KIAkJCWlmICgoYmFzZSArIGRldl9wcml2LT5nYXJ0X3NpemUpID4gZGV2X3ByaXYtPmZiX2xvY2F0aW9uICYmCkBAIC0xNTc4LDcgKzE1ODcsNyBAQAogCX0KIAogI2lmIF9fT1NfSEFTX0FHUAotCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX0FHUCkKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkKIAkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0CiAJCQkJCQkgLSBkZXYtPmFncC0+YmFzZQogCQkJCQkJICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwpAQCAtMTYwNCw3ICsxNjEzLDcgQEAKIAlkZXZfcHJpdi0+cmluZy5oaWdoX21hcmsgPSBSQURFT05fUklOR19ISUdIX01BUks7CiAKICNpZiBfX09TX0hBU19BR1AKLQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19BR1ApIHsKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwogCQlyYWRlb25fc2V0X3BjaWdhcnQoZGV2X3ByaXYsIDApOwogCX0gZWxzZQpAQCAtMTYyNCw3ICsxNjMzLDcgQEAKIAkJCSAgICBkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuaGFuZGxlOwogCiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmlzX3BjaWUgPQotCQkJICAgICEhKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfUENJRSk7CisJCQkgICAgISEoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpOwogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID0KIAkJCSAgICBEUk1fQVRJX0dBUlRfRkI7CiAKQEAgLTE2MzYsNyArMTY0NSw3IEBACiAJCQkgICAgRFJNX0FUSV9HQVJUX01BSU47CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwogCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciA9IDA7Ci0JCQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19QQ0lFKSB7CisJCQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX1BDSUUpIHsKIAkJCQlEUk1fRVJST1IKIAkJCQkgICAgKCJDYW5ub3QgdXNlIFBDSSBFeHByZXNzIHdpdGhvdXQgR0FSVCBpbiBGQiBtZW1vcnlcbiIpOwogCQkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CkBAIC0xNjc4LDcgKzE2ODcsNyBAQAogCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwogCiAjaWYgX19PU19IQVNfQUdQCi0JaWYgKGRldl9wcml2LT5mbGFncyAmIENISVBfSVNfQUdQKSB7CisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKIAkJaWYgKGRldl9wcml2LT5jcF9yaW5nICE9IE5VTEwpIHsKIAkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOwogCQkJZGV2X3ByaXYtPmNwX3JpbmcgPSBOVUxMOwpAQCAtMTczMyw3ICsxNzQyLDcgQEAKIAlEUk1fREVCVUcoIlN0YXJ0aW5nIHJhZGVvbl9kb19yZXN1bWVfY3AoKVxuIik7CiAKICNpZiBfX09TX0hBU19BR1AKLQlpZiAoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19BR1ApIHsKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgewogCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwogCQlyYWRlb25fc2V0X3BjaWdhcnQoZGV2X3ByaXYsIDApOwogCX0gZWxzZQpAQCAtMjE3NywxMyArMjE4NiwxNSBAQAogCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OwogCWRldl9wcml2LT5mbGFncyA9IGZsYWdzOwogCi0Jc3dpdGNoIChmbGFncyAmIENISVBfRkFNSUxZX01BU0spIHsKKwlzd2l0Y2ggKGZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CiAJY2FzZSBDSElQX1IxMDA6CiAJY2FzZSBDSElQX1JWMjAwOgogCWNhc2UgQ0hJUF9SMjAwOgogCWNhc2UgQ0hJUF9SMzAwOgorCWNhc2UgQ0hJUF9SMzUwOgogCWNhc2UgQ0hJUF9SNDIwOgotCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gQ0hJUF9IQVNfSElFUlo7CisJY2FzZSBDSElQX1JWNDEwOgorCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gUkFERU9OX0hBU19ISUVSWjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogYWxsIG90aGVyIGNoaXBzIGhhdmUgbm8gaGllcmFyY2hpY2FsIHogYnVmZmVyICovCkBAIC0yMTkxLDEzICsyMjAyLDE0IEBACiAJfQogCiAJaWYgKGRybV9kZXZpY2VfaXNfYWdwKGRldikpCi0JCWRldl9wcml2LT5mbGFncyB8PSBDSElQX0lTX0FHUDsKLQotCWlmIChkcm1fZGV2aWNlX2lzX3BjaWUoZGV2KSkKLQkJZGV2X3ByaXYtPmZsYWdzIHw9IENISVBfSVNfUENJRTsKKwkJZGV2X3ByaXYtPmZsYWdzIHw9IFJBREVPTl9JU19BR1A7CisJZWxzZSBpZiAoZHJtX2RldmljZV9pc19wY2llKGRldikpCisJCWRldl9wcml2LT5mbGFncyB8PSBSQURFT05fSVNfUENJRTsKKwllbHNlCisJCWRldl9wcml2LT5mbGFncyB8PSBSQURFT05fSVNfUENJOwogCiAJRFJNX0RFQlVHKCIlcyBjYXJkIGRldGVjdGVkXG4iLAotCQkgICgoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19BR1ApID8gIkFHUCIgOiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX1BDSUUpID8gIlBDSUUiIDogIlBDSSIpKSkpOworCQkgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgPyAiQUdQIiA6ICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKSA/ICJQQ0lFIiA6ICJQQ0kiKSkpKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuYyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5jCmluZGV4IGViOTg1YzIuLjJlYjY1MmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX2Rydi5jCkBAIC00NCw3ICs0NCw3IEBACiBzdGF0aWMgaW50IGRyaV9saWJyYXJ5X25hbWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgY2hhciAqYnVmKQogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JaW50IGZhbWlseSA9IGRldl9wcml2LT5mbGFncyAmIENISVBfRkFNSUxZX01BU0s7CisJaW50IGZhbWlseSA9IGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSzsKIAogCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLAogCQkgICAgICAgIChmYW1pbHkgPCBDSElQX1IyMDApID8gInJhZGVvbiIgOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaAppbmRleCBlNWEyNTZmLi5mNDVjZDdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9kcnYuaApAQCAtMTMzLDE1ICsxMzMsMTYgQEAKICAqIENoaXAgZmxhZ3MKICAqLwogZW51bSByYWRlb25fY2hpcF9mbGFncyB7Ci0JQ0hJUF9GQU1JTFlfTUFTSyA9IDB4MDAwMGZmZmZVTCwKLQlDSElQX0ZMQUdTX01BU0sgPSAweGZmZmYwMDAwVUwsCi0JQ0hJUF9JU19NT0JJTElUWSA9IDB4MDAwMTAwMDBVTCwKLQlDSElQX0lTX0lHUCA9IDB4MDAwMjAwMDBVTCwKLQlDSElQX1NJTkdMRV9DUlRDID0gMHgwMDA0MDAwMFVMLAotCUNISVBfSVNfQUdQID0gMHgwMDA4MDAwMFVMLAotCUNISVBfSEFTX0hJRVJaID0gMHgwMDEwMDAwMFVMLAotCUNISVBfSVNfUENJRSA9IDB4MDAyMDAwMDBVTCwKLQlDSElQX05FV19NRU1NQVAgPSAweDAwNDAwMDAwVUwsCisJUkFERU9OX0ZBTUlMWV9NQVNLID0gMHgwMDAwZmZmZlVMLAorCVJBREVPTl9GTEFHU19NQVNLID0gMHhmZmZmMDAwMFVMLAorCVJBREVPTl9JU19NT0JJTElUWSA9IDB4MDAwMTAwMDBVTCwKKwlSQURFT05fSVNfSUdQID0gMHgwMDAyMDAwMFVMLAorCVJBREVPTl9TSU5HTEVfQ1JUQyA9IDB4MDAwNDAwMDBVTCwKKwlSQURFT05fSVNfQUdQID0gMHgwMDA4MDAwMFVMLAorCVJBREVPTl9IQVNfSElFUlogPSAweDAwMTAwMDAwVUwsCisJUkFERU9OX0lTX1BDSUUgPSAweDAwMjAwMDAwVUwsCisJUkFERU9OX05FV19NRU1NQVAgPSAweDAwNDAwMDAwVUwsCisJUkFERU9OX0lTX1BDSSA9IDB4MDA4MDAwMDBVTCwKIH07CiAKICNkZWZpbmUgR0VUX1JJTkdfSEVBRChkZXZfcHJpdikJKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MgPyBcCkBAIC00MjQsNiArNDI1LDggQEAKICNkZWZpbmUgUkFERU9OX1JCM0RfQ09MT1JPRkZTRVQJCTB4MWM0MAogI2RlZmluZSBSQURFT05fUkIzRF9DT0xPUlBJVENICQkweDFjNDgKIAorI2RlZmluZQlSQURFT05fU1JDX1hfWQkJCTB4MTU5MAorCiAjZGVmaW5lIFJBREVPTl9EUF9HVUlfTUFTVEVSX0NOVEwJMHgxNDZjCiAjCWRlZmluZSBSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTAkoMSA8PCAwKQogIwlkZWZpbmUgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwJKDEgPDwgMSkKQEAgLTQ0MSw2ICs0NDQsNyBAQAogIwlkZWZpbmUgUkFERU9OX1JPUDNfUwkJCTB4MDBjYzAwMDAKICMJZGVmaW5lIFJBREVPTl9ST1AzX1AJCQkweDAwZjAwMDAwCiAjZGVmaW5lIFJBREVPTl9EUF9XUklURV9NQVNLCQkweDE2Y2MKKyNkZWZpbmUgUkFERU9OX1NSQ19QSVRDSF9PRkZTRVQJCTB4MTQyOAogI2RlZmluZSBSQURFT05fRFNUX1BJVENIX09GRlNFVAkJMHgxNDJjCiAjZGVmaW5lIFJBREVPTl9EU1RfUElUQ0hfT0ZGU0VUX0MJMHgxYzgwCiAjCWRlZmluZSBSQURFT05fRFNUX1RJTEVfTElORUFSCQkoMCA8PCAzMCkKQEAgLTU0NSw2ICs1NDksMTEgQEAKICMJZGVmaW5lIFJBREVPTl9SQjNEX1pDX0ZSRUUJCSgxIDw8IDIpCiAjCWRlZmluZSBSQURFT05fUkIzRF9aQ19GTFVTSF9BTEwJCTB4NQogIwlkZWZpbmUgUkFERU9OX1JCM0RfWkNfQlVTWQkJKDEgPDwgMzEpCisjZGVmaW5lIFJBREVPTl9SQjNEX0RTVENBQ0hFX0NUTFNUQVQJMHgzMjVjCisjCWRlZmluZSBSQURFT05fUkIzRF9EQ19GTFVTSAkJKDMgPDwgMCkKKyMJZGVmaW5lIFJBREVPTl9SQjNEX0RDX0ZSRUUJCSgzIDw8IDIpCisjCWRlZmluZSBSQURFT05fUkIzRF9EQ19GTFVTSF9BTEwJCTB4ZgorIwlkZWZpbmUgUkFERU9OX1JCM0RfRENfQlVTWQkJKDEgPDwgMzEpCiAjZGVmaW5lIFJBREVPTl9SQjNEX1pTVEVOQ0lMQ05UTAkweDFjMmMKICMJZGVmaW5lIFJBREVPTl9aX1RFU1RfTUFTSwkJKDcgPDwgNCkKICMJZGVmaW5lIFJBREVPTl9aX1RFU1RfQUxXQVlTCQkoNyA8PCA0KQpAQCAtNjgxLDYgKzY5MCw3IEBACiAjZGVmaW5lIFJBREVPTl9DUF9SQl9CQVNFCQkweDA3MDAKICNkZWZpbmUgUkFERU9OX0NQX1JCX0NOVEwJCTB4MDcwNAogIwlkZWZpbmUgUkFERU9OX0JVRl9TV0FQXzMyQklUCQkoMiA8PCAxNikKKyMJZGVmaW5lIFJBREVPTl9SQl9OT19VUERBVEUJCSgxIDw8IDI3KQogI2RlZmluZSBSQURFT05fQ1BfUkJfUlBUUl9BRERSCQkweDA3MGMKICNkZWZpbmUgUkFERU9OX0NQX1JCX1JQVFIJCTB4MDcxMAogI2RlZmluZSBSQURFT05fQ1BfUkJfV1BUUgkJMHgwNzE0CkBAIC05ODYsMTMgKzk5NiwxMyBAQAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSQURFT05fRkxVU0hfQ0FDSEUoKSBkbyB7CQkJCQlcCi0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9SQjJEX0RTVENBQ0hFX0NUTFNUQVQsIDAgKSApOwlcCi0JT1VUX1JJTkcoIFJBREVPTl9SQjJEX0RDX0ZMVVNIICk7CQkJCVwKKwlPVVRfUklORyggQ1BfUEFDS0VUMCggUkFERU9OX1JCM0RfRFNUQ0FDSEVfQ1RMU1RBVCwgMCApICk7CVwKKwlPVVRfUklORyggUkFERU9OX1JCM0RfRENfRkxVU0ggKTsJCQkJXAogfSB3aGlsZSAoMCkKIAogI2RlZmluZSBSQURFT05fUFVSR0VfQ0FDSEUoKSBkbyB7CQkJCQlcCi0JT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9SQjJEX0RTVENBQ0hFX0NUTFNUQVQsIDAgKSApOwlcCi0JT1VUX1JJTkcoIFJBREVPTl9SQjJEX0RDX0ZMVVNIX0FMTCApOwkJCQlcCisJT1VUX1JJTkcoIENQX1BBQ0tFVDAoIFJBREVPTl9SQjNEX0RTVENBQ0hFX0NUTFNUQVQsIDAgKSApOwlcCisJT1VUX1JJTkcoIFJBREVPTl9SQjNEX0RDX0ZMVVNIX0FMTCApOwkJCQlcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIFJBREVPTl9GTFVTSF9aQ0FDSEUoKSBkbyB7CQkJCQlcCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9jaGFyL2RybS9yYWRlb25fc3RhdGUuYwppbmRleCAzOWE3ZjY4Li5mZWFjNWYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vcmFkZW9uX3N0YXRlLmMKQEAgLTQyLDcgKzQyLDExIEBACiAJCQkJCQkgICAgZHJtX2ZpbGVfdCAqIGZpbHBfcHJpdiwKIAkJCQkJCSAgICB1MzIgKm9mZnNldCkKIHsKLQl1MzIgb2ZmID0gKm9mZnNldDsKKwl1NjQgb2ZmID0gKm9mZnNldDsKKwl1MzIgZmJfc3RhcnQgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJdTMyIGZiX2VuZCA9IGZiX3N0YXJ0ICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxOworCXUzMiBnYXJ0X3N0YXJ0ID0gZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJdTMyIGdhcnRfZW5kID0gZ2FydF9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxOwogCXN0cnVjdCBkcm1fcmFkZW9uX2RyaXZlcl9maWxlX2ZpZWxkcyAqcmFkZW9uX3ByaXY7CiAKIAkvKiBIcm0gLi4uIHRoZSBzdG9yeSBvZiB0aGUgb2Zmc2V0IC4uLiBTbyB0aGlzIGZ1bmN0aW9uIGNvbnZlcnRzCkBAIC02MiwxMCArNjYsOCBAQAogCS8qIEZpcnN0LCB0aGUgYmVzdCBjYXNlLCB0aGUgb2Zmc2V0IGFscmVhZHkgbGFuZHMgaW4gZWl0aGVyIHRoZQogCSAqIGZyYW1lYnVmZmVyIG9yIHRoZSBHQVJUIG1hcHBlZCBzcGFjZQogCSAqLwotCWlmICgob2ZmID49IGRldl9wcml2LT5mYl9sb2NhdGlvbiAmJgotCSAgICAgb2ZmIDwgKGRldl9wcml2LT5mYl9sb2NhdGlvbiArIGRldl9wcml2LT5mYl9zaXplKSkgfHwKLQkgICAgKG9mZiA+PSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAmJgotCSAgICAgb2ZmIDwgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkpKQorCWlmICgob2ZmID49IGZiX3N0YXJ0ICYmIG9mZiA8PSBmYl9lbmQpIHx8CisJICAgIChvZmYgPj0gZ2FydF9zdGFydCAmJiBvZmYgPD0gZ2FydF9lbmQpKQogCQlyZXR1cm4gMDsKIAogCS8qIE9rLCB0aGF0IGRpZG4ndCBoYXBwZW4uLi4gbm93IGNoZWNrIGlmIHdlIGhhdmUgYSB6ZXJvIGJhc2VkCkBAIC03OCwxNiArODAsMTMgQEAKIAl9CiAKIAkvKiBGaW5hbGx5LCBhc3N1bWUgd2UgYWltZWQgYXQgYSBHQVJUIG9mZnNldCBpZiBiZXlvbmQgdGhlIGZiICovCi0JaWYgKG9mZiA+IChkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZSkpCi0JCW9mZiA9IG9mZiAtIChkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZSkgKwotCQkJZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJaWYgKG9mZiA+IGZiX2VuZCkKKwkJb2ZmID0gb2ZmIC0gZmJfZW5kIC0gMSArIGdhcnRfc3RhcnQ7CiAKIAkvKiBOb3cgcmVjaGVjayBhbmQgZmFpbCBpZiBvdXQgb2YgYm91bmRzICovCi0JaWYgKChvZmYgPj0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uICYmCi0JICAgICBvZmYgPCAoZGV2X3ByaXYtPmZiX2xvY2F0aW9uICsgZGV2X3ByaXYtPmZiX3NpemUpKSB8fAotCSAgICAob2ZmID49IGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICYmCi0JICAgICBvZmYgPCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplKSkpIHsKLQkJRFJNX0RFQlVHKCJvZmZzZXQgZml4ZWQgdXAgdG8gMHgleFxuIiwgb2ZmKTsKKwlpZiAoKG9mZiA+PSBmYl9zdGFydCAmJiBvZmYgPD0gZmJfZW5kKSB8fAorCSAgICAob2ZmID49IGdhcnRfc3RhcnQgJiYgb2ZmIDw9IGdhcnRfZW5kKSkgeworCQlEUk1fREVCVUcoIm9mZnNldCBmaXhlZCB1cCB0byAweCV4XG4iLCAodW5zaWduZWQgaW50KW9mZik7CiAJCSpvZmZzZXQgPSBvZmY7CiAJCXJldHVybiAwOwogCX0KQEAgLTg2OSw3ICs4NjgsNyBAQAogCQkgKi8KIAkJZGV2X3ByaXYtPnNhcmVhX3ByaXYtPmN0eF9vd25lciA9IDA7CiAKLQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0hBU19ISUVSWikKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSEFTX0hJRVJaKQogCQkgICAgJiYgKGZsYWdzICYgUkFERU9OX1VTRV9ISUVSWikpIHsKIAkJCS8qIEZJWE1FIDogcmV2ZXJzZSBlbmdpbmVlciB0aGF0IGZvciBSeDAwIGNhcmRzICovCiAJCQkvKiBGSVhNRSA6IHRoZSBtYXNrIHN1cHBvc2VkbHkgY29udGFpbnMgbG93LXJlcyB6IHZhbHVlcy4gU28gY2FuJ3Qgc2V0CkBAIC05MTQsNyArOTEzLDcgQEAKIAkJZm9yIChpID0gMDsgaSA8IG5ib3g7IGkrKykgewogCQkJaW50IHRpbGVvZmZzZXQsIG5ydGlsZXN4LCBucnRpbGVzeSwgajsKIAkJCS8qIGl0IGxvb2tzIGxpa2UgcjIwMCBuZWVkcyBydi1zdHlsZSBjbGVhcnMsIGF0IGxlYXN0IGlmIGhpZXJ6IGlzIG5vdCBlbmFibGVkPyAqLwotCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0hBU19ISUVSWikKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0hBU19ISUVSWikKIAkJCSAgICAmJiAhKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMjAwKSkgewogCQkJCS8qIEZJWE1FIDogZmlndXJlIHRoaXMgb3V0IGZvciByMjAwICh3aGVuIGhpZXJ6IGlzIGVuYWJsZWQpLiBPcgogCQkJCSAgIG1heWJlIHIyMDAgYWN0dWFsbHkgZG9lc24ndCBuZWVkIHRvIHB1dCB0aGUgbG93LXJlcyB6IHZhbHVlIGludG8KQEAgLTk5OCw3ICs5OTcsNyBAQAogCQl9CiAKIAkJLyogVE9ETyBkb24ndCBhbHdheXMgY2xlYXIgYWxsIGhpLWxldmVsIHogdGlsZXMgKi8KLQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0hBU19ISUVSWikKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSEFTX0hJRVJaKQogCQkgICAgJiYgKGRldl9wcml2LT5taWNyb2NvZGVfdmVyc2lvbiA9PSBVQ09ERV9SMjAwKQogCQkgICAgJiYgKGZsYWdzICYgUkFERU9OX1VTRV9ISUVSWikpCiAJCQkvKiByMTAwIGFuZCBjYXJkcyB3aXRob3V0IGhpZXJhcmNoaWNhbCB6LWJ1ZmZlciBoYXZlIG5vIGhpZ2gtbGV2ZWwgei1idWZmZXIgKi8KQEAgLTEyNzAsOSArMTI2OSw5IEBACiAKIAkJRFJNX0RFQlVHKCJkaXNwYXRjaCBzd2FwICVkLCVkLSVkLCVkXG4iLCB4LCB5LCB3LCBoKTsKIAotCQlCRUdJTl9SSU5HKDcpOworCQlCRUdJTl9SSU5HKDkpOwogCi0JCU9VVF9SSU5HKENQX1BBQ0tFVDMoUkFERU9OX0NOVExfQklUQkxUX01VTFRJLCA1KSk7CisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX0RQX0dVSV9NQVNURVJfQ05UTCwgMCkpOwogCQlPVVRfUklORyhSQURFT05fR01DX1NSQ19QSVRDSF9PRkZTRVRfQ05UTCB8CiAJCQkgUkFERU9OX0dNQ19EU1RfUElUQ0hfT0ZGU0VUX0NOVEwgfAogCQkJIFJBREVPTl9HTUNfQlJVU0hfTk9ORSB8CkBAIC0xMjg0LDYgKzEyODMsNyBAQAogCiAJCS8qIE1ha2UgdGhpcyB3b3JrIGV2ZW4gaWYgZnJvbnQgJiBiYWNrIGFyZSBmbGlwcGVkOgogCQkgKi8KKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMChSQURFT05fU1JDX1BJVENIX09GRlNFVCwgMSkpOwogCQlpZiAoZGV2X3ByaXYtPmN1cnJlbnRfcGFnZSA9PSAwKSB7CiAJCQlPVVRfUklORyhkZXZfcHJpdi0+YmFja19waXRjaF9vZmZzZXQpOwogCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCk7CkBAIC0xMjkyLDYgKzEyOTIsNyBAQAogCQkJT1VUX1JJTkcoZGV2X3ByaXYtPmJhY2tfcGl0Y2hfb2Zmc2V0KTsKIAkJfQogCisJCU9VVF9SSU5HKENQX1BBQ0tFVDAoUkFERU9OX1NSQ19YX1ksIDIpKTsKIAkJT1VUX1JJTkcoKHggPDwgMTYpIHwgeSk7CiAJCU9VVF9SSU5HKCh4IDw8IDE2KSB8IHkpOwogCQlPVVRfUklORygodyA8PCAxNikgfCBoKTsKQEAgLTI5ODcsMTYgKzI5ODgsMjEgQEAKIAljYXNlIFJBREVPTl9QQVJBTV9HQVJUX1RFWF9IQU5ETEU6CiAJCXZhbHVlID0gZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0OwogCQlicmVhazsKLQkKKwljYXNlIFJBREVPTl9QQVJBTV9TQ1JBVENIX09GRlNFVDoKKwkJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKQorCQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJdmFsdWUgPSBSQURFT05fU0NSQVRDSF9SRUdfT0ZGU0VUOworCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9DQVJEX1RZUEU6Ci0JCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBDSElQX0lTX1BDSUUpCisJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkKIAkJCXZhbHVlID0gUkFERU9OX0NBUkRfUENJRTsKLQkJZWxzZSBpZiAoZGV2X3ByaXYtPmZsYWdzICYgQ0hJUF9JU19BR1ApCisJCWVsc2UgaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCiAJCQl2YWx1ZSA9IFJBREVPTl9DQVJEX0FHUDsKIAkJZWxzZQogCQkJdmFsdWUgPSBSQURFT05fQ0FSRF9QQ0k7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CisJCURSTV9ERUJVRygiSW52YWxpZCBwYXJhbWV0ZXIgJWRcbiIsIHBhcmFtLnBhcmFtKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5jIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJ2LmMKaW5kZXggNWU5ZGM4Ni4uM2Q1YjMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJ2LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHJ2LmMKQEAgLTM1LDExICszNSw0NCBAQAogCXNpc2Rydl9QQ0lfSURTCiB9OwogCitzdGF0aWMgaW50IHNpc19kcml2ZXJfbG9hZChkcm1fZGV2aWNlX3QgKmRldiwgdW5zaWduZWQgbG9uZyBjaGlwc2V0KQoreworCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdjsKKwlpbnQgcmV0OworCisJZGV2X3ByaXYgPSBkcm1fY2FsbG9jKDEsIHNpemVvZihkcm1fc2lzX3ByaXZhdGVfdCksIERSTV9NRU1fRFJJVkVSKTsKKwlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIERSTV9FUlIoRU5PTUVNKTsKKworCWRldi0+ZGV2X3ByaXZhdGUgPSAodm9pZCAqKWRldl9wcml2OworCWRldl9wcml2LT5jaGlwc2V0ID0gY2hpcHNldDsKKwlyZXQgPSBkcm1fc21hbl9pbml0KCZkZXZfcHJpdi0+c21hbiwgMiwgMTIsIDgpOworCWlmIChyZXQpIHsKKwkJZHJtX2ZyZWUoZGV2X3ByaXYsIHNpemVvZihkZXZfcHJpdiksIERSTV9NRU1fRFJJVkVSKTsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNpc19kcml2ZXJfdW5sb2FkKGRybV9kZXZpY2VfdCAqZGV2KQoreworCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisKKwlkcm1fc21hbl90YWtlZG93bigmZGV2X3ByaXYtPnNtYW4pOworCWRybV9mcmVlKGRldl9wcml2LCBzaXplb2YoKmRldl9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXIgPSB7CiAJLmRyaXZlcl9mZWF0dXJlcyA9IERSSVZFUl9VU0VfQUdQIHwgRFJJVkVSX1VTRV9NVFJSLAotCS5jb250ZXh0X2N0b3IgPSBzaXNfaW5pdF9jb250ZXh0LAotCS5jb250ZXh0X2R0b3IgPSBzaXNfZmluYWxfY29udGV4dCwKLQkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAorCS5sb2FkID0gc2lzX2RyaXZlcl9sb2FkLAorCS51bmxvYWQgPSBzaXNfZHJpdmVyX3VubG9hZCwKKwkuY29udGV4dF9kdG9yID0gTlVMTCwKKwkuZG1hX3F1aWVzY2VudCA9IHNpc19pZGxlLAorCS5yZWNsYWltX2J1ZmZlcnMgPSBOVUxMLAorCS5yZWNsYWltX2J1ZmZlcnNfbG9ja2VkID0gc2lzX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQsCisJLmxhc3RjbG9zZSA9IHNpc19sYXN0Y2xvc2UsCiAJLmdldF9tYXBfb2ZzID0gZHJtX2NvcmVfZ2V0X21hcF9vZnMsCiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLmlvY3RscyA9IHNpc19pb2N0bHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCmluZGV4IGUyMThlNTIuLjJiOGQ2ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vc2lzX2Rydi5oCkBAIC0zMSwyMyArMzEsMzkgQEAKIC8qIEdlbmVyYWwgY3VzdG9taXphdGlvbjoKICAqLwogCi0jZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJTSVMiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IJCSJTSVMsIFR1bmdzdGVuIEdyYXBoaWNzIgogI2RlZmluZSBEUklWRVJfTkFNRQkJInNpcyIKICNkZWZpbmUgRFJJVkVSX0RFU0MJCSJTSVMgMzAwLzYzMC81NDAiCi0jZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAwMzA4MjYiCisjZGVmaW5lIERSSVZFUl9EQVRFCQkiMjAwNjA3MDQiCiAjZGVmaW5lIERSSVZFUl9NQUpPUgkJMQotI2RlZmluZSBEUklWRVJfTUlOT1IJCTEKLSNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMAorI2RlZmluZSBEUklWRVJfTUlOT1IJCTIKKyNkZWZpbmUgRFJJVkVSX1BBVENITEVWRUwJMQogCi0jaW5jbHVkZSAic2lzX2RzLmgiCitlbnVtIHNpc19mYW1pbHkgeworCVNJU19PVEhFUiA9IDAsCisJU0lTX0NISVBfMzE1ID0gMSwKK307CisKKyNpbmNsdWRlICJkcm1fc21hbi5oIgorCisjZGVmaW5lIFNJU19CQVNFIChkZXZfcHJpdi0+bW1pbykKKyNkZWZpbmUgU0lTX1JFQUQocmVnKSAgICAgICAgIERSTV9SRUFEMzIoU0lTX0JBU0UsIHJlZyk7CisjZGVmaW5lIFNJU19XUklURShyZWcsIHZhbCkgICBEUk1fV1JJVEUzMihTSVNfQkFTRSwgcmVnLCB2YWwpOwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fc2lzX3ByaXZhdGUgewotCW1lbUhlYXBfdCAqQUdQSGVhcDsKLQltZW1IZWFwX3QgKkZCSGVhcDsKKwlkcm1fbG9jYWxfbWFwX3QgKm1taW87CisJdW5zaWduZWQgaW50IGlkbGVfZmF1bHQ7CisJZHJtX3NtYW5fdCBzbWFuOworCXVuc2lnbmVkIGludCBjaGlwc2V0OworCWludCB2cmFtX2luaXRpYWxpemVkOworCWludCBhZ3BfaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgbG9uZyB2cmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFncF9vZmZzZXQ7CiB9IGRybV9zaXNfcHJpdmF0ZV90OwogCi1leHRlcm4gaW50IHNpc19pbml0X2NvbnRleHQoZHJtX2RldmljZV90ICogZGV2LCBpbnQgY29udGV4dCk7Ci1leHRlcm4gaW50IHNpc19maW5hbF9jb250ZXh0KGRybV9kZXZpY2VfdCAqIGRldiwgaW50IGNvbnRleHQpOworZXh0ZXJuIGludCBzaXNfaWRsZShkcm1fZGV2aWNlX3QgKmRldik7CitleHRlcm4gdm9pZCBzaXNfcmVjbGFpbV9idWZmZXJzX2xvY2tlZChkcm1fZGV2aWNlX3QgKmRldiwgc3RydWN0IGZpbGUgKmZpbHApOworZXh0ZXJuIHZvaWQgc2lzX2xhc3RjbG9zZShkcm1fZGV2aWNlX3QgKmRldik7CiAKIGV4dGVybiBkcm1faW9jdGxfZGVzY190IHNpc19pb2N0bHNbXTsKIGV4dGVybiBpbnQgc2lzX21heF9pb2N0bDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyZTQ4NWQ0Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX2RzLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyOTkgKzAsMCBAQAotLyogc2lzX2RzLmMgLS0gUHJpdmF0ZSBoZWFkZXIgZm9yIERpcmVjdCBSZW5kZXJpbmcgTWFuYWdlciAtKi0gbGludXgtYyAtKi0KLSAqIENyZWF0ZWQ6IE1vbiBKYW4gIDQgMTA6MDU6MDUgMTk5OSBieSBzY2xpbkBzaXMuY29tLnR3Ci0gKgotICogQ29weXJpZ2h0IDIwMDAgU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycCwgSW5jLiwgSHNpbkNodSwgVGFpd2FuLgotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKLSAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKLSAqIFNvZnR3YXJlLgotICoKLSAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCi0gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKLSAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAotICogUFJFQ0lTSU9OIElOU0lHSFQgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAotICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCi0gKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICogQXV0aG9yczoKLSAqICAgIFN1bmctQ2hpbmcgTGluIDxzY2xpbkBzaXMuY29tLnR3PgotICoKLSAqLwotCi0jaW5jbHVkZSAiZHJtUC5oIgotI2luY2x1ZGUgImRybS5oIgotI2luY2x1ZGUgInNpc19kcy5oIgotCi0vKiBTZXQgRGF0YSBTdHJ1Y3R1cmUsIG5vdCBjaGVjayByZXBlYXRlZCB2YWx1ZQotICogdGVtcG9yYXJpbHkgdXNlZAotICovCi0KLXNldF90ICpzZXRJbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc2V0X3QgKnNldDsKLQotCXNldCA9IChzZXRfdCAqKSBkcm1fYWxsb2Moc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOwotCWlmIChzZXQgIT0gTlVMTCkgewotCQlmb3IgKGkgPSAwOyBpIDwgU0VUX1NJWkU7IGkrKykgewotCQkJc2V0LT5saXN0W2ldLmZyZWVfbmV4dCA9IGkgKyAxOwotCQkJc2V0LT5saXN0W2ldLmFsbG9jX25leHQgPSAtMTsKLQkJfQotCQlzZXQtPmxpc3RbU0VUX1NJWkUgLSAxXS5mcmVlX25leHQgPSAtMTsKLQkJc2V0LT5mcmVlID0gMDsKLQkJc2V0LT5hbGxvYyA9IC0xOwotCQlzZXQtPnRyYWNlID0gLTE7Ci0JfQotCXJldHVybiBzZXQ7Ci19Ci0KLWludCBzZXRBZGQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSBpdGVtKQotewotCWludCBmcmVlID0gc2V0LT5mcmVlOwotCi0JaWYgKGZyZWUgIT0gLTEpIHsKLQkJc2V0LT5saXN0W2ZyZWVdLnZhbCA9IGl0ZW07Ci0JCXNldC0+ZnJlZSA9IHNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQ7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc2V0LT5saXN0W2ZyZWVdLmFsbG9jX25leHQgPSBzZXQtPmFsbG9jOwotCXNldC0+YWxsb2MgPSBmcmVlOwotCXNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQgPSAtMTsKLQotCXJldHVybiAxOwotfQotCi1pbnQgc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSkKLXsKLQlpbnQgYWxsb2MgPSBzZXQtPmFsbG9jOwotCWludCBwcmV2ID0gLTE7Ci0KLQl3aGlsZSAoYWxsb2MgIT0gLTEpIHsKLQkJaWYgKHNldC0+bGlzdFthbGxvY10udmFsID09IGl0ZW0pIHsKLQkJCWlmIChwcmV2ICE9IC0xKQotCQkJCXNldC0+bGlzdFtwcmV2XS5hbGxvY19uZXh0ID0KLQkJCQkgICAgc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OwotCQkJZWxzZQotCQkJCXNldC0+YWxsb2MgPSBzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQ7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gYWxsb2M7Ci0JCWFsbG9jID0gc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OwotCX0KLQotCWlmIChhbGxvYyA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQlzZXQtPmxpc3RbYWxsb2NdLmZyZWVfbmV4dCA9IHNldC0+ZnJlZTsKLQlzZXQtPmZyZWUgPSBhbGxvYzsKLQlzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQgPSAtMTsKLQotCXJldHVybiAxOwotfQotCi0vKiBzZXRGaXJzdCAtPiBzZXRBZGQgLT4gc2V0TmV4dCBpcyB3cm9uZyAqLwotCi1pbnQgc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pCi17Ci0JaWYgKHNldC0+YWxsb2MgPT0gLTEpCi0JCXJldHVybiAwOwotCi0JKml0ZW0gPSBzZXQtPmxpc3Rbc2V0LT5hbGxvY10udmFsOwotCXNldC0+dHJhY2UgPSBzZXQtPmxpc3Rbc2V0LT5hbGxvY10uYWxsb2NfbmV4dDsKLQotCXJldHVybiAxOwotfQotCi1pbnQgc2V0TmV4dChzZXRfdCAqIHNldCwgSVRFTV9UWVBFICogaXRlbSkKLXsKLQlpZiAoc2V0LT50cmFjZSA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQkqaXRlbSA9IHNldC0+bGlzdFtzZXQtPnRyYWNlXS52YWw7Ci0Jc2V0LT50cmFjZSA9IHNldC0+bGlzdFtzZXQtPnRyYWNlXS5hbGxvY19uZXh0OwotCi0JcmV0dXJuIDE7Ci19Ci0KLWludCBzZXREZXN0cm95KHNldF90ICogc2V0KQotewotCWRybV9mcmVlKHNldCwgc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLS8qCi0gKiBHTFggSGFyZHdhcmUgRGV2aWNlIERyaXZlciBjb21tb24gY29kZQotICogQ29weXJpZ2h0IChDKSAxOTk5IFdpdHRhd2F0IFlhbXdvbmcKLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgotICoKLSAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkCi0gKiBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUwotICogT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFdJVFRBV0FUIFlBTVdPTkcsIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCi0gKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKLSAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRQotICogT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCi0gKgotICovCi0KLSNkZWZpbmUgSVNGUkVFKGJwdHIpICgoYnB0ciktPmZyZWUpCi0KLW1lbUhlYXBfdCAqbW1Jbml0KGludCBvZnMsIGludCBzaXplKQotewotCVBNZW1CbG9jayBibG9ja3M7Ci0KLQlpZiAoc2l6ZSA8PSAwKQotCQlyZXR1cm4gTlVMTDsKLQotCWJsb2NrcyA9IChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwgRFJNX01FTV9EUklWRVIpOwotCWlmIChibG9ja3MgIT0gTlVMTCkgewotCQlibG9ja3MtPm9mcyA9IG9mczsKLQkJYmxvY2tzLT5zaXplID0gc2l6ZTsKLQkJYmxvY2tzLT5mcmVlID0gMTsKLQkJcmV0dXJuIChtZW1IZWFwX3QgKikgYmxvY2tzOwotCX0gZWxzZQotCQlyZXR1cm4gTlVMTDsKLX0KLQotLyogQ2hlY2tzIGlmIGEgcG9pbnRlciAnYicgaXMgcGFydCBvZiB0aGUgaGVhcCAnaGVhcCcgKi8KLWludCBtbUJsb2NrSW5IZWFwKG1lbUhlYXBfdCAqIGhlYXAsIFBNZW1CbG9jayBiKQotewotCVRNZW1CbG9jayAqcDsKLQotCWlmIChoZWFwID09IE5VTEwgfHwgYiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCXAgPSBoZWFwOwotCXdoaWxlIChwICE9IE5VTEwgJiYgcCAhPSBiKSB7Ci0JCXAgPSBwLT5uZXh0OwotCX0KLQlpZiAocCA9PSBiKQotCQlyZXR1cm4gMTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi1zdGF0aWMgVE1lbUJsb2NrICpTbGljZUJsb2NrKFRNZW1CbG9jayAqIHAsCi0JCQkgICAgIGludCBzdGFydG9mcywgaW50IHNpemUsCi0JCQkgICAgIGludCByZXNlcnZlZCwgaW50IGFsaWdubWVudCkKLXsKLQlUTWVtQmxvY2sgKm5ld2Jsb2NrOwotCi0JLyogYnJlYWsgbGVmdCAqLwotCWlmIChzdGFydG9mcyA+IHAtPm9mcykgewotCQluZXdibG9jayA9IChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKLQkJCQkJCSAgICBEUk1fTUVNX0RSSVZFUik7Ci0JCW5ld2Jsb2NrLT5vZnMgPSBzdGFydG9mczsKLQkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gKHN0YXJ0b2ZzIC0gcC0+b2ZzKTsKLQkJbmV3YmxvY2stPmZyZWUgPSAxOwotCQluZXdibG9jay0+bmV4dCA9IHAtPm5leHQ7Ci0JCXAtPnNpemUgLT0gbmV3YmxvY2stPnNpemU7Ci0JCXAtPm5leHQgPSBuZXdibG9jazsKLQkJcCA9IG5ld2Jsb2NrOwotCX0KLQotCS8qIGJyZWFrIHJpZ2h0ICovCi0JaWYgKHNpemUgPCBwLT5zaXplKSB7Ci0JCW5ld2Jsb2NrID0gKFRNZW1CbG9jayAqKSBkcm1fY2FsbG9jKDEsIHNpemVvZihUTWVtQmxvY2spLAotCQkJCQkJICAgIERSTV9NRU1fRFJJVkVSKTsKLQkJbmV3YmxvY2stPm9mcyA9IHN0YXJ0b2ZzICsgc2l6ZTsKLQkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gc2l6ZTsKLQkJbmV3YmxvY2stPmZyZWUgPSAxOwotCQluZXdibG9jay0+bmV4dCA9IHAtPm5leHQ7Ci0JCXAtPnNpemUgPSBzaXplOwotCQlwLT5uZXh0ID0gbmV3YmxvY2s7Ci0JfQotCi0JLyogcCA9IG1pZGRsZSBibG9jayAqLwotCXAtPmFsaWduID0gYWxpZ25tZW50OwotCXAtPmZyZWUgPSAwOwotCXAtPnJlc2VydmVkID0gcmVzZXJ2ZWQ7Ci0JcmV0dXJuIHA7Ci19Ci0KLVBNZW1CbG9jayBtbUFsbG9jTWVtKG1lbUhlYXBfdCAqIGhlYXAsIGludCBzaXplLCBpbnQgYWxpZ24yLCBpbnQgc3RhcnRTZWFyY2gpCi17Ci0JaW50IG1hc2ssIHN0YXJ0b2ZzLCBlbmRvZnM7Ci0JVE1lbUJsb2NrICpwOwotCi0JaWYgKGhlYXAgPT0gTlVMTCB8fCBhbGlnbjIgPCAwIHx8IHNpemUgPD0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltYXNrID0gKDEgPDwgYWxpZ24yKSAtIDE7Ci0Jc3RhcnRvZnMgPSAwOwotCXAgPSAoVE1lbUJsb2NrICopIGhlYXA7Ci0Jd2hpbGUgKHAgIT0gTlVMTCkgewotCQlpZiAoSVNGUkVFKHApKSB7Ci0JCQlzdGFydG9mcyA9IChwLT5vZnMgKyBtYXNrKSAmIH5tYXNrOwotCQkJaWYgKHN0YXJ0b2ZzIDwgc3RhcnRTZWFyY2gpIHsKLQkJCQlzdGFydG9mcyA9IHN0YXJ0U2VhcmNoOwotCQkJfQotCQkJZW5kb2ZzID0gc3RhcnRvZnMgKyBzaXplOwotCQkJaWYgKGVuZG9mcyA8PSAocC0+b2ZzICsgcC0+c2l6ZSkpCi0JCQkJYnJlYWs7Ci0JCX0KLQkJcCA9IHAtPm5leHQ7Ci0JfQotCWlmIChwID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCXAgPSBTbGljZUJsb2NrKHAsIHN0YXJ0b2ZzLCBzaXplLCAwLCBtYXNrICsgMSk7Ci0JcC0+aGVhcCA9IGhlYXA7Ci0JcmV0dXJuIHA7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBKb2luMkJsb2NrcyhUTWVtQmxvY2sgKiBwKQotewotCWlmIChwLT5mcmVlICYmIHAtPm5leHQgJiYgcC0+bmV4dC0+ZnJlZSkgewotCQlUTWVtQmxvY2sgKnEgPSBwLT5uZXh0OwotCQlwLT5zaXplICs9IHEtPnNpemU7Ci0JCXAtPm5leHQgPSBxLT5uZXh0OwotCQlkcm1fZnJlZShxLCBzaXplb2YoVE1lbUJsb2NrKSwgRFJNX01FTV9EUklWRVIpOwotCQlyZXR1cm4gMTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLWludCBtbUZyZWVNZW0oUE1lbUJsb2NrIGIpCi17Ci0JVE1lbUJsb2NrICpwLCAqcHJldjsKLQotCWlmIChiID09IE5VTEwpCi0JCXJldHVybiAwOwotCWlmIChiLT5oZWFwID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXAgPSBiLT5oZWFwOwotCXByZXYgPSBOVUxMOwotCXdoaWxlIChwICE9IE5VTEwgJiYgcCAhPSBiKSB7Ci0JCXByZXYgPSBwOwotCQlwID0gcC0+bmV4dDsKLQl9Ci0JaWYgKHAgPT0gTlVMTCB8fCBwLT5mcmVlIHx8IHAtPnJlc2VydmVkKQotCQlyZXR1cm4gLTE7Ci0KLQlwLT5mcmVlID0gMTsKLQlKb2luMkJsb2NrcyhwKTsKLQlpZiAocHJldikKLQkJSm9pbjJCbG9ja3MocHJldik7Ci0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcy5oIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTRmMmI0Ny4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3Npc19kcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTQ2ICswLDAgQEAKLS8qIHNpc19kcy5oIC0tIFByaXZhdGUgaGVhZGVyIGZvciBEaXJlY3QgUmVuZGVyaW5nIE1hbmFnZXIgLSotIGxpbnV4LWMgLSotIAotICogQ3JlYXRlZDogTW9uIEphbiAgNCAxMDowNTowNSAxOTk5IGJ5IHNjbGluQHNpcy5jb20udHcKLSAqLwotLyoKLSAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAsIEluYy4sIEhzaW5DaHUsIFRhaXdhbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Ci0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCi0gKiBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFBSRUNJU0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqIEF1dGhvcnM6Ci0gKiAgICBTdW5nLUNoaW5nIExpbiA8c2NsaW5Ac2lzLmNvbS50dz4KLSAqCi0gKi8KLQotI2lmbmRlZiBfX1NJU19EU19IX18KLSNkZWZpbmUgX19TSVNfRFNfSF9fCi0KLS8qIFNldCBEYXRhIFN0cnVjdHVyZSAqLwotCi0jZGVmaW5lIFNFVF9TSVpFIDUwMDAKLQotdHlwZWRlZiB1bnNpZ25lZCBsb25nIElURU1fVFlQRTsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCUlURU1fVFlQRSB2YWw7Ci0JaW50IGFsbG9jX25leHQsIGZyZWVfbmV4dDsKLX0gbGlzdF9pdGVtX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgYWxsb2M7Ci0JaW50IGZyZWU7Ci0JaW50IHRyYWNlOwotCWxpc3RfaXRlbV90IGxpc3RbU0VUX1NJWkVdOwotfSBzZXRfdDsKLQotc2V0X3QgKnNldEluaXQodm9pZCk7Ci1pbnQgc2V0QWRkKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7Ci1pbnQgc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7Ci1pbnQgc2V0Rmlyc3Qoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOwotaW50IHNldE5leHQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOwotaW50IHNldERlc3Ryb3koc2V0X3QgKiBzZXQpOwotCi0vKgotICogR0xYIEhhcmR3YXJlIERldmljZSBEcml2ZXIgY29tbW9uIGNvZGUKLSAqIENvcHlyaWdodCAoQykgMTk5OSBXaXR0YXdhdCBZYW13b25nCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZAotICogaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MKLSAqIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBXSVRUQVdBVCBZQU1XT05HLCBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAotICogREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCi0gKiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUKLSAqIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICoKLSAqLwotCi1zdHJ1Y3QgbWVtX2Jsb2NrX3QgewotCXN0cnVjdCBtZW1fYmxvY2tfdCAqbmV4dDsKLQlzdHJ1Y3QgbWVtX2Jsb2NrX3QgKmhlYXA7Ci0JaW50IG9mcywgc2l6ZTsKLQlpbnQgYWxpZ247Ci0JdW5zaWduZWQgaW50IGZyZWU6MTsKLQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6MTsKLX07Ci10eXBlZGVmIHN0cnVjdCBtZW1fYmxvY2tfdCBUTWVtQmxvY2s7Ci10eXBlZGVmIHN0cnVjdCBtZW1fYmxvY2tfdCAqUE1lbUJsb2NrOwotCi0vKiBhIGhlYXAgaXMganVzdCB0aGUgZmlyc3QgYmxvY2sgaW4gYSBjaGFpbiAqLwotdHlwZWRlZiBzdHJ1Y3QgbWVtX2Jsb2NrX3QgbWVtSGVhcF90OwotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbW1CbG9ja1NpemUoUE1lbUJsb2NrIGIpCi17Ci0JcmV0dXJuIGItPnNpemU7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtbU9mZnNldChQTWVtQmxvY2sgYikKLXsKLQlyZXR1cm4gYi0+b2ZzOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1tTWFya1Jlc2VydmVkKFBNZW1CbG9jayBiKQotewotCWItPnJlc2VydmVkID0gMTsKLX0KLQotLyoKLSAqIGlucHV0OiB0b3RhbCBzaXplIGluIGJ5dGVzCi0gKiByZXR1cm46IGEgaGVhcCBwb2ludGVyIGlmIE9LLCBOVUxMIGlmIGVycm9yCi0gKi8KLW1lbUhlYXBfdCAqbW1Jbml0KGludCBvZnMsIGludCBzaXplKTsKLQotLyoKLSAqIEFsbG9jYXRlICdzaXplJyBieXRlcyB3aXRoIDJeYWxpZ24yIGJ5dGVzIGFsaWdubWVudCwKLSAqIHJlc3RyaWN0IHRoZSBzZWFyY2ggdG8gZnJlZSBtZW1vcnkgYWZ0ZXIgJ3N0YXJ0U2VhcmNoJwotICogZGVwdGggYW5kIGJhY2sgYnVmZmVycyBzaG91bGQgYmUgaW4gZGlmZmVyZW50IDRtYiBiYW5rcwotICogdG8gZ2V0IGJldHRlciBwYWdlIGhpdHMgaWYgcG9zc2libGUKLSAqIGlucHV0OglzaXplID0gc2l6ZSBvZiBibG9jawotICogICAgICAgCWFsaWduMiA9IDJeYWxpZ24yIGJ5dGVzIGFsaWdubWVudAotICoJCXN0YXJ0U2VhcmNoID0gbGluZWFyIG9mZnNldCBmcm9tIHN0YXJ0IG9mIGhlYXAgdG8gYmVnaW4gc2VhcmNoCi0gKiByZXR1cm46IHBvaW50ZXIgdG8gdGhlIGFsbG9jYXRlZCBibG9jaywgMCBpZiBlcnJvcgotICovCi1QTWVtQmxvY2sgbW1BbGxvY01lbShtZW1IZWFwX3QgKiBoZWFwLCBpbnQgc2l6ZSwgaW50IGFsaWduMiwgaW50IHN0YXJ0U2VhcmNoKTsKLQotLyoKLSAqIFJldHVybnMgMSBpZiB0aGUgYmxvY2sgJ2InIGlzIHBhcnQgb2YgdGhlIGhlYXAgJ2hlYXAnCi0gKi8KLWludCBtbUJsb2NrSW5IZWFwKFBNZW1CbG9jayBoZWFwLCBQTWVtQmxvY2sgYik7Ci0KLS8qCi0gKiBGcmVlIGJsb2NrIHN0YXJ0cyBhdCBvZmZzZXQKLSAqIGlucHV0OiBwb2ludGVyIHRvIGEgYmxvY2sKLSAqIHJldHVybjogMCBpZiBPSywgLTEgaWYgZXJyb3IKLSAqLwotaW50IG1tRnJlZU1lbShQTWVtQmxvY2sgYik7Ci0KLS8qIEZvciBkZWJ1Z2luZyBwdXJwb3NlLiAqLwotdm9pZCBtbUR1bXBNZW1JbmZvKG1lbUhlYXBfdCAqIG1tSW5pdCk7Ci0KLSNlbmRpZgkJCQkvKiBfX1NJU19EU19IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX21tLmMgYi9kcml2ZXJzL2NoYXIvZHJtL3Npc19tbS5jCmluZGV4IDVlOTkzNmIuLmQyNmY1ZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vc2lzX21tLmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS9zaXNfbW0uYwpAQCAtMSw0MTQgKzEsMzQ4IEBACi0vKiBzaXNfbW0uYyAtLSBQcml2YXRlIGhlYWRlciBmb3IgRGlyZWN0IFJlbmRlcmluZyBNYW5hZ2VyIC0qLSBsaW51eC1jIC0qLQotICogQ3JlYXRlZDogTW9uIEphbiAgNCAxMDowNTowNSAxOTk5IGJ5IHNjbGluQHNpcy5jb20udHcKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKLSAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAsIEluYy4sIEhzaW5DaHUsIFRhaXdhbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwNiBUdW5nc3RlbiBHcmFwaGljcywgSW5jLiwgQmlzbWFyY2ssIE5ELiwgVVNBLgorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAotICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCi0gKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorICogIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZworICogd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorICogZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0bworICogcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CiAgKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAotICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQotICogU29mdHdhcmUuCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQorICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKKyAqIG9mIHRoZSBTb2Z0d2FyZS4KICAqCiAgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgogICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFBSRUNJU0lPTiBJTlNJR0hUIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERFUlMsIEFVVEhPUlMgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sCisgKiBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IKKyAqIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUKKyAqIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCiAgKgorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKICAqIEF1dGhvcnM6Ci0gKiAgICBTdW5nLUNoaW5nIExpbiA8c2NsaW5Ac2lzLmNvbS50dz4KLSAqCisgKiAgICBUaG9tYXMgSGVsbHN0cvZtIDx0aG9tYXMtYXQtdHVuZ3N0ZW5ncmFwaGljcy1kb3QtY29tPgogICovCiAKICNpbmNsdWRlICJkcm1QLmgiCiAjaW5jbHVkZSAic2lzX2RybS5oIgogI2luY2x1ZGUgInNpc19kcnYuaCIKLSNpbmNsdWRlICJzaXNfZHMuaCIKLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQotI2luY2x1ZGUgPHZpZGVvL3Npc2ZiLmg+Ci0jZW5kaWYKIAotI2RlZmluZSBNQVhfQ09OVEVYVCAxMDAKKyNpbmNsdWRlIDx2aWRlby9zaXNmYi5oPgorCiAjZGVmaW5lIFZJREVPX1RZUEUgMAogI2RlZmluZSBBR1BfVFlQRSAxCiAKLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgdXNlZDsKLQlpbnQgY29udGV4dDsKLQlzZXRfdCAqc2V0c1syXTsJCS8qIDAgZm9yIHZpZGVvLCAxIGZvciBBR1AgKi8KLX0gc2lzX2NvbnRleHRfdDsKIAotc3RhdGljIHNpc19jb250ZXh0X3QgZ2xvYmFsX3Bwcml2W01BWF9DT05URVhUXTsKLQotc3RhdGljIGludCBhZGRfYWxsb2Nfc2V0KGludCBjb250ZXh0LCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IHZhbCkKLXsKLQlpbnQgaSwgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7Ci0JCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJiBnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSB7Ci0JCQlyZXR2YWwgPSBzZXRBZGQoZ2xvYmFsX3Bwcml2W2ldLnNldHNbdHlwZV0sIHZhbCk7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IGRlbF9hbGxvY19zZXQoaW50IGNvbnRleHQsIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgdmFsKQotewotCWludCBpLCByZXR2YWwgPSAwOwotCi0JZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspIHsKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmIGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpIHsKLQkJCXJldHZhbCA9IHNldERlbChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCXJldHVybiByZXR2YWw7Ci19Ci0KKyNpZiBkZWZpbmVkKENPTkZJR19GQl9TSVMpCiAvKiBmYiBtYW5hZ2VtZW50IHZpYSBmYiBkZXZpY2UgKi8KLSNpZiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQogCi1zdGF0aWMgaW50IHNpc19mYl9pbml0KERSTV9JT0NUTF9BUkdTKQotewotCXJldHVybiAwOwotfQorI2RlZmluZSBTSVNfTU1fQUxJR05fU0hJRlQgMAorI2RlZmluZSBTSVNfTU1fQUxJR05fTUFTSyAwCiAKLXN0YXRpYyBpbnQgc2lzX2ZiX2FsbG9jKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIHZvaWQgKnNpc19zbWFuX21tX2FsbG9jYXRlKHZvaWQgKnByaXZhdGUsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgIHVuc2lnbmVkIGFsaWdubWVudCkKIHsKLQlkcm1fc2lzX21lbV90IGZiOwogCXN0cnVjdCBzaXNfbWVtcmVxIHJlcTsKLQlkcm1fc2lzX21lbV90IF9fdXNlciAqYXJncCA9IChkcm1fc2lzX21lbV90IF9fdXNlciAqKWRhdGE7Ci0JaW50IHJldHZhbCA9IDA7CiAKLQlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZmIsIGFyZ3AsIHNpemVvZihmYikpOwotCi0JcmVxLnNpemUgPSBmYi5zaXplOworCXJlcS5zaXplID0gc2l6ZTsKIAlzaXNfbWFsbG9jKCZyZXEpOwotCWlmIChyZXEub2Zmc2V0KSB7Ci0JCS8qIFRPRE8gKi8KLQkJZmIub2Zmc2V0ID0gcmVxLm9mZnNldDsKLQkJZmIuZnJlZSA9IHJlcS5vZmZzZXQ7Ci0JCWlmICghYWRkX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSURFT19UWVBFLCBmYi5mcmVlKSkgewotCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOwotCQkJc2lzX2ZyZWUocmVxLm9mZnNldCk7Ci0JCQlyZXR2YWwgPSBEUk1fRVJSKEVJTlZBTCk7Ci0JCX0KLQl9IGVsc2UgewotCQlmYi5vZmZzZXQgPSAwOwotCQlmYi5zaXplID0gMDsKLQkJZmIuZnJlZSA9IDA7Ci0JfQotCi0JRFJNX0NPUFlfVE9fVVNFUl9JT0NUTChhcmdwLCBmYiwgc2l6ZW9mKGZiKSk7Ci0KLQlEUk1fREVCVUcoImFsbG9jIGZiLCBzaXplID0gJWQsIG9mZnNldCA9ICVkXG4iLCBmYi5zaXplLCByZXEub2Zmc2V0KTsKLQotCXJldHVybiByZXR2YWw7CisJaWYgKHJlcS5zaXplID09IDApCisJCXJldHVybiBOVUxMOworCWVsc2UKKwkJcmV0dXJuICh2b2lkICopfnJlcS5vZmZzZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2lzX2ZiX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCitzdGF0aWMgdm9pZCBzaXNfc21hbl9tbV9mcmVlKHZvaWQgKnByaXZhdGUsIHZvaWQgKnJlZikKIHsKLQlkcm1fc2lzX21lbV90IGZiOwotCWludCByZXR2YWwgPSAwOwotCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKikgZGF0YSwgc2l6ZW9mKGZiKSk7Ci0KLQlpZiAoIWZiLmZyZWUpCi0JCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0KLQlpZiAoIWRlbF9hbGxvY19zZXQoZmIuY29udGV4dCwgVklERU9fVFlQRSwgZmIuZnJlZSkpCi0JCXJldHZhbCA9IERSTV9FUlIoRUlOVkFMKTsKLQlzaXNfZnJlZShmYi5mcmVlKTsKLQotCURSTV9ERUJVRygiZnJlZSBmYiwgb2Zmc2V0ID0gMHglbHhcbiIsIGZiLmZyZWUpOwotCi0JcmV0dXJuIHJldHZhbDsKKwlzaXNfZnJlZSh+KCh1bnNpZ25lZCBsb25nKXJlZikpOwogfQogCi0jZWxzZQorc3RhdGljIHZvaWQgc2lzX3NtYW5fbW1fZGVzdHJveSh2b2lkICpwcml2YXRlKQoreworCTsKK30KIAotLyogQ2FsbGVkIGJ5IHRoZSBYIFNlcnZlciB0byBpbml0aWFsaXplIHRoZSBGQiBoZWFwLiAgQWxsb2NhdGlvbnMgd2lsbCBmYWlsCi0gKiB1bmxlc3MgdGhpcyBpcyBjYWxsZWQuICBPZmZzZXQgaXMgdGhlIGJlZ2lubmluZyBvZiB0aGUgaGVhcCBmcm9tIHRoZQotICogZnJhbWVidWZmZXIgb2Zmc2V0IChNYXhYRkJNZW0gaW4gWEZyZWU4NikuCi0gKgotICogTWVtb3J5IGxheW91dCBhY2NvcmRpbmcgdG8gVGhvbWFzIFdpbmlzY2hvZmVyOgotICogfC0tLS0tLS0tLS0tLS0tLS0tLXxERERERERERERERERERERERERERERERERERERERHxISEhIfENDQ0NDQ0NDQ0NDfAotICoKLSAqICAgIFggZHJpdmVyL3Npc2ZiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhXLSAgIENvbW1hbmQtCi0gKiAgZnJhbWVidWZmZXIgbWVtb3J5ICAgICAgICAgICBEUkkgaGVhcCAgICAgICAgICAgQ3Vyc29yICAgcXVldWUKLSAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lzX3NtYW5fbW1fb2Zmc2V0KHZvaWQgKnByaXZhdGUsIHZvaWQgKnJlZikKK3sKKwlyZXR1cm4gfigodW5zaWduZWQgbG9uZylyZWYpOworfQorCisjZWxzZSAvKiBDT05GSUdfRkJfU0lTICovCisKKyNkZWZpbmUgU0lTX01NX0FMSUdOX1NISUZUIDQKKyNkZWZpbmUgU0lTX01NX0FMSUdOX01BU0sgKCAoMSA8PCBTSVNfTU1fQUxJR05fU0hJRlQpIC0gMSkKKworI2VuZGlmIC8qIENPTkZJR19GQl9TSVMgKi8KKwogc3RhdGljIGludCBzaXNfZmJfaW5pdChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3Npc19mYl90IGZiOworCWludCByZXQ7CiAKIAlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwoZmIsIChkcm1fc2lzX2ZiX3QgX191c2VyICopIGRhdGEsIHNpemVvZihmYikpOwogCi0JaWYgKGRldl9wcml2ID09IE5VTEwpIHsKLQkJZGV2LT5kZXZfcHJpdmF0ZSA9IGRybV9jYWxsb2MoMSwgc2l6ZW9mKGRybV9zaXNfcHJpdmF0ZV90KSwKLQkJCQkJICAgICAgRFJNX01FTV9EUklWRVIpOwotCQlkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JCWlmIChkZXZfcHJpdiA9PSBOVUxMKQotCQkJcmV0dXJuIEVOT01FTTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisjaWYgZGVmaW5lZChDT05GSUdfRkJfU0lTKQorCXsKKwkJZHJtX3NtYW5fbW1fdCBzbWFuX21tOworCQlzbWFuX21tLnByaXZhdGUgPSAodm9pZCAqKTB4RkZGRkZGRkY7CisJCXNtYW5fbW0uYWxsb2NhdGUgPSBzaXNfc21hbl9tbV9hbGxvY2F0ZTsKKwkJc21hbl9tbS5mcmVlID0gc2lzX3NtYW5fbW1fZnJlZTsKKwkJc21hbl9tbS5kZXN0cm95ID0gc2lzX3NtYW5fbW1fZGVzdHJveTsKKwkJc21hbl9tbS5vZmZzZXQgPSBzaXNfc21hbl9tbV9vZmZzZXQ7CisJCXJldCA9CisJCSAgICBkcm1fc21hbl9zZXRfbWFuYWdlcigmZGV2X3ByaXYtPnNtYW4sIFZJREVPX1RZUEUsICZzbWFuX21tKTsKKwl9CisjZWxzZQorCXJldCA9IGRybV9zbWFuX3NldF9yYW5nZSgmZGV2X3ByaXYtPnNtYW4sIFZJREVPX1RZUEUsIDAsCisJCQkJIGZiLnNpemUgPj4gU0lTX01NX0FMSUdOX1NISUZUKTsKKyNlbmRpZgorCisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIlZSQU0gbWVtb3J5IG1hbmFnZXIgaW5pdGlhbGlzYXRpb24gZXJyb3JcbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoZGV2X3ByaXYtPkZCSGVhcCAhPSBOVUxMKQotCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCWRldl9wcml2LT52cmFtX2luaXRpYWxpemVkID0gMTsKKwlkZXZfcHJpdi0+dnJhbV9vZmZzZXQgPSBmYi5vZmZzZXQ7CiAKLQlkZXZfcHJpdi0+RkJIZWFwID0gbW1Jbml0KGZiLm9mZnNldCwgZmIuc2l6ZSk7Ci0KKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAlEUk1fREVCVUcoIm9mZnNldCA9ICV1LCBzaXplID0gJXUiLCBmYi5vZmZzZXQsIGZiLnNpemUpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2lzX2ZiX2FsbG9jKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIGludCBzaXNfZHJtX2FsbG9jKGRybV9kZXZpY2VfdCAqIGRldiwgZHJtX2ZpbGVfdCAqIHByaXYsCisJCQkgdW5zaWduZWQgbG9uZyBkYXRhLCBpbnQgcG9vbCkKIHsKLQlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Ci0JZHJtX3Npc19tZW1fdCBfX3VzZXIgKmFyZ3AgPSAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKilkYXRhOwotCWRybV9zaXNfbWVtX3QgZmI7Ci0JUE1lbUJsb2NrIGJsb2NrOworCWRybV9zaXNfbWVtX3QgX191c2VyICphcmdwID0gKGRybV9zaXNfbWVtX3QgX191c2VyICopIGRhdGE7CisJZHJtX3Npc19tZW1fdCBtZW07CiAJaW50IHJldHZhbCA9IDA7CisJZHJtX21lbWJsb2NrX2l0ZW1fdCAqaXRlbTsKIAotCWlmIChkZXZfcHJpdiA9PSBOVUxMIHx8IGRldl9wcml2LT5GQkhlYXAgPT0gTlVMTCkKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwobWVtLCBhcmdwLCBzaXplb2YobWVtKSk7CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisKKwlpZiAoMCA9PSAoKHBvb2wgPT0gMCkgPyBkZXZfcHJpdi0+dnJhbV9pbml0aWFsaXplZCA6CisJCSAgICAgIGRldl9wcml2LT5hZ3BfaW5pdGlhbGl6ZWQpKSB7CisJCURSTV9FUlJPUgorCQkgICAgKCJBdHRlbXB0IHRvIGFsbG9jYXRlIGZyb20gdW5pbml0aWFsaXplZCBtZW1vcnkgbWFuYWdlci5cbiIpOwogCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCBhcmdwLCBzaXplb2YoZmIpKTsKLQotCWJsb2NrID0gbW1BbGxvY01lbShkZXZfcHJpdi0+RkJIZWFwLCBmYi5zaXplLCAwLCAwKTsKLQlpZiAoYmxvY2spIHsKLQkJLyogVE9ETyAqLwotCQlmYi5vZmZzZXQgPSBibG9jay0+b2ZzOwotCQlmYi5mcmVlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7Ci0JCWlmICghYWRkX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSURFT19UWVBFLCBmYi5mcmVlKSkgewotCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOwotCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spIGZiLmZyZWUpOwotCQkJcmV0dmFsID0gRFJNX0VSUihFSU5WQUwpOwotCQl9Ci0JfSBlbHNlIHsKLQkJZmIub2Zmc2V0ID0gMDsKLQkJZmIuc2l6ZSA9IDA7Ci0JCWZiLmZyZWUgPSAwOwogCX0KIAotCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoYXJncCwgZmIsIHNpemVvZihmYikpOworCW1lbS5zaXplID0gKG1lbS5zaXplICsgU0lTX01NX0FMSUdOX01BU0spID4+IFNJU19NTV9BTElHTl9TSElGVDsKKwlpdGVtID0gZHJtX3NtYW5fYWxsb2MoJmRldl9wcml2LT5zbWFuLCBwb29sLCBtZW0uc2l6ZSwgMCwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOwogCi0JRFJNX0RFQlVHKCJhbGxvYyBmYiwgc2l6ZSA9ICVkLCBvZmZzZXQgPSAlZFxuIiwgZmIuc2l6ZSwgZmIub2Zmc2V0KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoaXRlbSkgeworCQltZW0ub2Zmc2V0ID0gKChwb29sID09IDApID8KKwkJCSAgICAgIGRldl9wcml2LT52cmFtX29mZnNldCA6IGRldl9wcml2LT5hZ3Bfb2Zmc2V0KSArCisJCSAgICAoaXRlbS0+bW0tPgorCQkgICAgIG9mZnNldChpdGVtLT5tbSwgaXRlbS0+bW1faW5mbykgPDwgU0lTX01NX0FMSUdOX1NISUZUKTsKKwkJbWVtLmZyZWUgPSBpdGVtLT51c2VyX2hhc2gua2V5OworCQltZW0uc2l6ZSA9IG1lbS5zaXplIDw8IFNJU19NTV9BTElHTl9TSElGVDsKKwl9IGVsc2UgeworCQltZW0ub2Zmc2V0ID0gMDsKKwkJbWVtLnNpemUgPSAwOworCQltZW0uZnJlZSA9IDA7CisJCXJldHZhbCA9IERSTV9FUlIoRU5PTUVNKTsKKwl9CisKKwlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKGFyZ3AsIG1lbSwgc2l6ZW9mKG1lbSkpOworCisJRFJNX0RFQlVHKCJhbGxvYyAlZCwgc2l6ZSA9ICVkLCBvZmZzZXQgPSAlZFxuIiwgcG9vbCwgbWVtLnNpemUsCisJCSAgbWVtLm9mZnNldCk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IHNpc19mYl9mcmVlKERSTV9JT0NUTF9BUkdTKQorc3RhdGljIGludCBzaXNfZHJtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9zaXNfbWVtX3QgZmI7CisJZHJtX3Npc19tZW1fdCBtZW07CisJaW50IHJldDsKIAotCWlmIChkZXZfcHJpdiA9PSBOVUxMIHx8IGRldl9wcml2LT5GQkhlYXAgPT0gTlVMTCkKLQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwobWVtLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKikgZGF0YSwKKwkJCQkgc2l6ZW9mKG1lbSkpOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCAoZHJtX3Npc19tZW1fdCBfX3VzZXIgKikgZGF0YSwgc2l6ZW9mKGZiKSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGRybV9zbWFuX2ZyZWVfa2V5KCZkZXZfcHJpdi0+c21hbiwgbWVtLmZyZWUpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCURSTV9ERUJVRygiZnJlZSA9IDB4JWx4XG4iLCBtZW0uZnJlZSk7CiAKLQlpZiAoIW1tQmxvY2tJbkhlYXAoZGV2X3ByaXYtPkZCSGVhcCwgKFBNZW1CbG9jaykgZmIuZnJlZSkpCi0JCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0KLQlpZiAoIWRlbF9hbGxvY19zZXQoZmIuY29udGV4dCwgVklERU9fVFlQRSwgZmIuZnJlZSkpCi0JCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7Ci0JbW1GcmVlTWVtKChQTWVtQmxvY2spIGZiLmZyZWUpOwotCi0JRFJNX0RFQlVHKCJmcmVlIGZiLCBmcmVlID0gMHglbHhcbiIsIGZiLmZyZWUpOwotCi0JcmV0dXJuIDA7CisJcmV0dXJuIHJldDsKIH0KIAotI2VuZGlmCi0KLS8qIGFncCBtZW1vcnkgbWFuYWdlbWVudCAqLworc3RhdGljIGludCBzaXNfZmJfYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCit7CisJRFJNX0RFVklDRTsKKwlyZXR1cm4gc2lzX2RybV9hbGxvYyhkZXYsIHByaXYsIGRhdGEsIFZJREVPX1RZUEUpOworfQogCiBzdGF0aWMgaW50IHNpc19pb2N0bF9hZ3BfaW5pdChEUk1fSU9DVExfQVJHUykKIHsKIAlEUk1fREVWSUNFOwogCWRybV9zaXNfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAJZHJtX3Npc19hZ3BfdCBhZ3A7Ci0KLQlpZiAoZGV2X3ByaXYgPT0gTlVMTCkgewotCQlkZXYtPmRldl9wcml2YXRlID0gZHJtX2NhbGxvYygxLCBzaXplb2YoZHJtX3Npc19wcml2YXRlX3QpLAotCQkJCQkgICAgICBEUk1fTUVNX0RSSVZFUik7Ci0JCWRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQkJaWYgKGRldl9wcml2ID09IE5VTEwpCi0JCQlyZXR1cm4gRU5PTUVNOwotCX0KLQotCWlmIChkZXZfcHJpdi0+QUdQSGVhcCAhPSBOVUxMKQotCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCWludCByZXQ7CisJZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCiAJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFncCwgKGRybV9zaXNfYWdwX3QgX191c2VyICopIGRhdGEsCiAJCQkJIHNpemVvZihhZ3ApKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gZHJtX3NtYW5fc2V0X3JhbmdlKCZkZXZfcHJpdi0+c21hbiwgQUdQX1RZUEUsIDAsCisJCQkJIGFncC5zaXplID4+IFNJU19NTV9BTElHTl9TSElGVCk7CiAKLQlkZXZfcHJpdi0+QUdQSGVhcCA9IG1tSW5pdChhZ3Aub2Zmc2V0LCBhZ3Auc2l6ZSk7CisJaWYgKHJldCkgeworCQlEUk1fRVJST1IoIkFHUCBtZW1vcnkgbWFuYWdlciBpbml0aWFsaXNhdGlvbiBlcnJvclxuIik7CisJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCQlyZXR1cm4gcmV0OworCX0KKworCWRldl9wcml2LT5hZ3BfaW5pdGlhbGl6ZWQgPSAxOworCWRldl9wcml2LT5hZ3Bfb2Zmc2V0ID0gYWdwLm9mZnNldDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAogCURSTV9ERUJVRygib2Zmc2V0ID0gJXUsIHNpemUgPSAldSIsIGFncC5vZmZzZXQsIGFncC5zaXplKTsKLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNpc19pb2N0bF9hZ3BfYWxsb2MoRFJNX0lPQ1RMX0FSR1MpCiB7CiAJRFJNX0RFVklDRTsKLQlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9zaXNfbWVtX3QgX191c2VyICphcmdwID0gKGRybV9zaXNfbWVtX3QgX191c2VyICopZGF0YTsKLQlkcm1fc2lzX21lbV90IGFncDsKLQlQTWVtQmxvY2sgYmxvY2s7Ci0JaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoZGV2X3ByaXYgPT0gTlVMTCB8fCBkZXZfcHJpdi0+QUdQSGVhcCA9PSBOVUxMKQotCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwotCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFncCwgYXJncCwgc2l6ZW9mKGFncCkpOwotCi0JYmxvY2sgPSBtbUFsbG9jTWVtKGRldl9wcml2LT5BR1BIZWFwLCBhZ3Auc2l6ZSwgMCwgMCk7Ci0JaWYgKGJsb2NrKSB7Ci0JCS8qIFRPRE8gKi8KLQkJYWdwLm9mZnNldCA9IGJsb2NrLT5vZnM7Ci0JCWFncC5mcmVlID0gKHVuc2lnbmVkIGxvbmcpYmxvY2s7Ci0JCWlmICghYWRkX2FsbG9jX3NldChhZ3AuY29udGV4dCwgQUdQX1RZUEUsIGFncC5mcmVlKSkgewotCQkJRFJNX0RFQlVHKCJhZGRpbmcgdG8gYWxsb2NhdGlvbiBzZXQgZmFpbHNcbiIpOwotCQkJbW1GcmVlTWVtKChQTWVtQmxvY2spIGFncC5mcmVlKTsKLQkJCXJldHZhbCA9IC0xOwotCQl9Ci0JfSBlbHNlIHsKLQkJYWdwLm9mZnNldCA9IDA7Ci0JCWFncC5zaXplID0gMDsKLQkJYWdwLmZyZWUgPSAwOwotCX0KLQotCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoYXJncCwgYWdwLCBzaXplb2YoYWdwKSk7Ci0KLQlEUk1fREVCVUcoImFsbG9jIGFncCwgc2l6ZSA9ICVkLCBvZmZzZXQgPSAlZFxuIiwgYWdwLnNpemUsIGFncC5vZmZzZXQpOwotCi0JcmV0dXJuIHJldHZhbDsKKwlyZXR1cm4gc2lzX2RybV9hbGxvYyhkZXYsIHByaXYsIGRhdGEsIEFHUF9UWVBFKTsKIH0KIAotc3RhdGljIGludCBzaXNfaW9jdGxfYWdwX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCitzdGF0aWMgZHJtX2xvY2FsX21hcF90ICpzaXNfcmVnX2luaXQoZHJtX2RldmljZV90ICpkZXYpCiB7Ci0JRFJNX0RFVklDRTsKKwlkcm1fbWFwX2xpc3RfdCAqZW50cnk7CisJZHJtX2xvY2FsX21hcF90ICptYXA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmZGV2LT5tYXBsaXN0LT5oZWFkLCBoZWFkKSB7CisJCW1hcCA9IGVudHJ5LT5tYXA7CisJCWlmICghbWFwKQorCQkJY29udGludWU7CisJCWlmIChtYXAtPnR5cGUgPT0gX0RSTV9SRUdJU1RFUlMpIHsKKwkJCXJldHVybiBtYXA7CisJCX0KKwl9CisJcmV0dXJuIE5VTEw7Cit9CisKK2ludCBzaXNfaWRsZShkcm1fZGV2aWNlX3QgKmRldikKK3sKIAlkcm1fc2lzX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCWRybV9zaXNfbWVtX3QgYWdwOworCXVpbnQzMl90IGlkbGVfcmVnOworCXVuc2lnbmVkIGxvbmcgZW5kOworCWludCBpOwogCi0JaWYgKGRldl9wcml2ID09IE5VTEwgfHwgZGV2X3ByaXYtPkFHUEhlYXAgPT0gTlVMTCkKLQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwlpZiAoZGV2X3ByaXYtPmlkbGVfZmF1bHQpCisJCXJldHVybiAwOwogCi0JRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGFncCwgKGRybV9zaXNfbWVtX3QgX191c2VyICopIGRhdGEsCi0JCQkJIHNpemVvZihhZ3ApKTsKKwlpZiAoZGV2X3ByaXYtPm1taW8gPT0gTlVMTCkgeworCQlkZXZfcHJpdi0+bW1pbyA9IHNpc19yZWdfaW5pdChkZXYpOworCQlpZiAoZGV2X3ByaXYtPm1taW8gPT0gTlVMTCkgeworCQkJRFJNX0VSUk9SKCJDb3VsZCBub3QgZmluZCByZWdpc3RlciBtYXAuXG4iKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCQorCS8qCisJICogSW1wbGVtZW50IGEgZGV2aWNlIHN3aXRjaCBoZXJlIGlmIG5lZWRlZAorCSAqLwogCi0JaWYgKCFtbUJsb2NrSW5IZWFwKGRldl9wcml2LT5BR1BIZWFwLCAoUE1lbUJsb2NrKSBhZ3AuZnJlZSkpCi0JCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJaWYgKGRldl9wcml2LT5jaGlwc2V0ICE9IFNJU19DSElQXzMxNSkKKwkJcmV0dXJuIDA7CiAKLQltbUZyZWVNZW0oKFBNZW1CbG9jaykgYWdwLmZyZWUpOwotCWlmICghZGVsX2FsbG9jX3NldChhZ3AuY29udGV4dCwgQUdQX1RZUEUsIGFncC5mcmVlKSkKLQkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkvKgorCSAqIFRpbWVvdXQgYWZ0ZXIgMyBzZWNvbmRzLiBXZSBjYW5ub3QgdXNlIERSTV9XQUlUX09OIGhlcmUKKwkgKiBiZWNhdXNlIGl0cyBwb2xsaW5nIGZyZXF1ZW5jeSBpcyB0b28gbG93LgorCSAqLwogCi0JRFJNX0RFQlVHKCJmcmVlIGFncCwgZnJlZSA9IDB4JWx4XG4iLCBhZ3AuZnJlZSk7CisJZW5kID0gamlmZmllcyArIChEUk1fSFogKiAzKTsKKworCWZvciAoaT0wOyBpPDQ7ICsraSkgeworCQlkbyB7CisJCQlpZGxlX3JlZyA9IFNJU19SRUFEKDB4ODVjYyk7CisJCX0gd2hpbGUgKCAhdGltZV9hZnRlcl9lcShqaWZmaWVzLCBlbmQpICYmCisJCQkgICgoaWRsZV9yZWcgJiAweDgwMDAwMDAwKSAhPSAweDgwMDAwMDAwKSk7CisJfQorCisJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgZW5kKSkgeworCQlEUk1fRVJST1IoIkdyYXBoaWNzIGVuZ2luZSBpZGxlIHRpbWVvdXQuICIKKwkJCSAgIkRpc2FibGluZyBpZGxlIGNoZWNrXG4iKTsKKwkJZGV2X3ByaXYtPmlkbGVfZmF1bHQgPSAxOworCX0KKworCS8qCisJICogVGhlIGNhbGxlciBuZXZlciBzZWVzIGFuIGVycm9yIGNvZGUuIEl0IGdldHMgdHJhcHBlZAorCSAqIGluIGxpYmRybS4KKwkgKi8KIAogCXJldHVybiAwOwogfQogCi1pbnQgc2lzX2luaXRfY29udGV4dChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBpbnQgY29udGV4dCkKKwordm9pZCBzaXNfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7Ci0JaW50IGk7CisJZHJtX3Npc19wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7Ci0JCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJgotCQkgICAgKGdsb2JhbF9wcHJpdltpXS5jb250ZXh0ID09IGNvbnRleHQpKQotCQkJYnJlYWs7Ci0JfQorCWlmICghZGV2X3ByaXYpCisJCXJldHVybjsKIAotCWlmIChpID49IE1BWF9DT05URVhUKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7Ci0JCQlpZiAoIWdsb2JhbF9wcHJpdltpXS51c2VkKSB7Ci0JCQkJZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPSBjb250ZXh0OwotCQkJCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMTsKLQkJCQlnbG9iYWxfcHByaXZbaV0uc2V0c1swXSA9IHNldEluaXQoKTsKLQkJCQlnbG9iYWxfcHByaXZbaV0uc2V0c1sxXSA9IHNldEluaXQoKTsKLQkJCQlEUk1fREVCVUcoImluaXQgYWxsb2NhdGlvbiBzZXQsIHNvY2tldD0lZCwgIgotCQkJCQkgICJjb250ZXh0ID0gJWRcbiIsIGksIGNvbnRleHQpOwotCQkJCWJyZWFrOwotCQkJfQotCQl9Ci0JCWlmICgoaSA+PSBNQVhfQ09OVEVYVCkgfHwgKGdsb2JhbF9wcHJpdltpXS5zZXRzWzBdID09IE5VTEwpIHx8Ci0JCSAgICAoZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV0gPT0gTlVMTCkpIHsKLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCi0JcmV0dXJuIDE7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWRybV9zbWFuX2NsZWFudXAoJmRldl9wcml2LT5zbWFuKTsKKwlkZXZfcHJpdi0+dnJhbV9pbml0aWFsaXplZCA9IDA7CisJZGV2X3ByaXYtPmFncF9pbml0aWFsaXplZCA9IDA7CisJZGV2X3ByaXYtPm1taW8gPSBOVUxMOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogfQogCi1pbnQgc2lzX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCit2b2lkIHNpc19yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKGRybV9kZXZpY2VfdCAqIGRldiwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0JaW50IGk7CisJZHJtX3Npc19wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCi0JZm9yIChpID0gMDsgaSA8IE1BWF9DT05URVhUOyBpKyspIHsKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmCi0JCSAgICAoZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkpCi0JCQlicmVhazsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJaWYgKGRybV9zbWFuX293bmVyX2NsZWFuKCZkZXZfcHJpdi0+c21hbiwgKHVuc2lnbmVkIGxvbmcpcHJpdikpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybjsKIAl9CiAKLQlpZiAoaSA8IE1BWF9DT05URVhUKSB7Ci0JCXNldF90ICpzZXQ7Ci0JCUlURU1fVFlQRSBpdGVtOwotCQlpbnQgcmV0dmFsOwotCi0JCURSTV9ERUJVRygiZmluZCBzb2NrZXQgJWQsIGNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7Ci0KLQkJLyogVmlkZW8gTWVtb3J5ICovCi0JCXNldCA9IGdsb2JhbF9wcHJpdltpXS5zZXRzWzBdOwotCQlyZXR2YWwgPSBzZXRGaXJzdChzZXQsICZpdGVtKTsKLQkJd2hpbGUgKHJldHZhbCkgewotCQkJRFJNX0RFQlVHKCJmcmVlIHZpZGVvIG1lbW9yeSAweCVseFxuIiwgaXRlbSk7Ci0jaWYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoQ09ORklHX0ZCX1NJUykKLQkJCXNpc19mcmVlKGl0ZW0pOwotI2Vsc2UKLQkJCW1tRnJlZU1lbSgoUE1lbUJsb2NrKSBpdGVtKTsKLSNlbmRpZgotCQkJcmV0dmFsID0gc2V0TmV4dChzZXQsICZpdGVtKTsKLQkJfQotCQlzZXREZXN0cm95KHNldCk7Ci0KLQkJLyogQUdQIE1lbW9yeSAqLwotCQlzZXQgPSBnbG9iYWxfcHByaXZbaV0uc2V0c1sxXTsKLQkJcmV0dmFsID0gc2V0Rmlyc3Qoc2V0LCAmaXRlbSk7Ci0JCXdoaWxlIChyZXR2YWwpIHsKLQkJCURSTV9ERUJVRygiZnJlZSBhZ3AgbWVtb3J5IDB4JWx4XG4iLCBpdGVtKTsKLQkJCW1tRnJlZU1lbSgoUE1lbUJsb2NrKSBpdGVtKTsKLQkJCXJldHZhbCA9IHNldE5leHQoc2V0LCAmaXRlbSk7Ci0JCX0KLQkJc2V0RGVzdHJveShzZXQpOwotCi0JCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMDsKKwlpZiAoZGV2LT5kcml2ZXItPmRtYV9xdWllc2NlbnQpIHsKKwkJZGV2LT5kcml2ZXItPmRtYV9xdWllc2NlbnQoZGV2KTsKIAl9CiAKLQlyZXR1cm4gMTsKKwlkcm1fc21hbl9vd25lcl9jbGVhbnVwKCZkZXZfcHJpdi0+c21hbiwgKHVuc2lnbmVkIGxvbmcpcHJpdik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0dXJuOwogfQogCiBkcm1faW9jdGxfZGVzY190IHNpc19pb2N0bHNbXSA9IHsKIAlbRFJNX0lPQ1RMX05SKERSTV9TSVNfRkJfQUxMT0MpXSA9IHtzaXNfZmJfYWxsb2MsIERSTV9BVVRIfSwKLQlbRFJNX0lPQ1RMX05SKERSTV9TSVNfRkJfRlJFRSldID0ge3Npc19mYl9mcmVlLCBEUk1fQVVUSH0sCi0JW0RSTV9JT0NUTF9OUihEUk1fU0lTX0FHUF9JTklUKV0gPSB7c2lzX2lvY3RsX2FncF9pbml0LCBEUk1fQVVUSHxEUk1fTUFTVEVSfERSTV9ST09UX09OTFl9LAorCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9GUkVFKV0gPSB7c2lzX2RybV9mcmVlLCBEUk1fQVVUSH0sCisJW0RSTV9JT0NUTF9OUihEUk1fU0lTX0FHUF9JTklUKV0gPQorCSAgICB7c2lzX2lvY3RsX2FncF9pbml0LCBEUk1fQVVUSCB8IERSTV9NQVNURVIgfCBEUk1fUk9PVF9PTkxZfSwKIAlbRFJNX0lPQ1RMX05SKERSTV9TSVNfQUdQX0FMTE9DKV0gPSB7c2lzX2lvY3RsX2FncF9hbGxvYywgRFJNX0FVVEh9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19BR1BfRlJFRSldID0ge3Npc19pb2N0bF9hZ3BfZnJlZSwgRFJNX0FVVEh9LAotCVtEUk1fSU9DVExfTlIoRFJNX1NJU19GQl9JTklUKV0gPSB7c2lzX2ZiX2luaXQsIERSTV9BVVRIfERSTV9NQVNURVJ8RFJNX1JPT1RfT05MWX0KKwlbRFJNX0lPQ1RMX05SKERSTV9TSVNfQUdQX0ZSRUUpXSA9IHtzaXNfZHJtX2ZyZWUsIERSTV9BVVRIfSwKKwlbRFJNX0lPQ1RMX05SKERSTV9TSVNfRkJfSU5JVCldID0KKwkgICAge3Npc19mYl9pbml0LCBEUk1fQVVUSCB8IERSTV9NQVNURVIgfCBEUk1fUk9PVF9PTkxZfQogfTsKIAogaW50IHNpc19tYXhfaW9jdGwgPSBEUk1fQVJSQVlfU0laRShzaXNfaW9jdGxzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYWJsaXQuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RtYWJsaXQuYwppbmRleCA3OGE4MWE0Li42MGMxNjk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kbWFibGl0LmMKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZG1hYmxpdC5jCkBAIC00MSw5ICs0MSw5IEBACiAKICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAKLSNkZWZpbmUgVklBX1BHRE4oeCkgICAgICAgICAgICAgKCgodW5zaWduZWQgbG9uZykoeCkpICYgUEFHRV9NQVNLKQotI2RlZmluZSBWSUFfUEdPRkYoeCkgICAgICAgICAgICAoKCh1bnNpZ25lZCBsb25nKSh4KSkgJiB+UEFHRV9NQVNLKQotI2RlZmluZSBWSUFfUEZOKHgpICAgICAgICAgICAgICAoKHVuc2lnbmVkIGxvbmcpKHgpID4+IFBBR0VfU0hJRlQpCisjZGVmaW5lIFZJQV9QR0ROKHgpCSAgICAgKCgodW5zaWduZWQgbG9uZykoeCkpICYgUEFHRV9NQVNLKQorI2RlZmluZSBWSUFfUEdPRkYoeCkJICAgICgoKHVuc2lnbmVkIGxvbmcpKHgpKSAmIH5QQUdFX01BU0spCisjZGVmaW5lIFZJQV9QRk4oeCkJICAgICAgKCh1bnNpZ25lZCBsb25nKSh4KSA+PiBQQUdFX1NISUZUKQogCiB0eXBlZGVmIHN0cnVjdCBfZHJtX3ZpYV9kZXNjcmlwdG9yIHsKIAl1aW50MzJfdCBtZW1fYWRkcjsKQEAgLTEyMSwxOSArMTIxLDE5IEBACiAJCQogCQl3aGlsZSAobGluZV9sZW4gPiAwKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlbWFpbmluZ19sZW4gPSBtaW4oUEFHRV9TSVpFLVZJQV9QR09GRihjdXJfbWVtKSwgbGluZV9sZW4pOworCQkJcmVtYWluaW5nX2xlbiA9IG1pbihQQUdFX1NJWkUtVklBX1BHT0ZGKGN1cl9tZW0pLCBsaW5lX2xlbik7CiAJCQlsaW5lX2xlbiAtPSByZW1haW5pbmdfbGVuOwogCiAJCQlpZiAobW9kZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NfcHRyLT5tZW1fYWRkciA9IAorCQkJCWRlc2NfcHRyLT5tZW1fYWRkciA9IAogCQkJCQlkbWFfbWFwX3BhZ2UoJnBkZXYtPmRldiwgCiAJCQkJCQkgICAgIHZzZy0+cGFnZXNbVklBX1BGTihjdXJfbWVtKSAtIAogCQkJCQkJCQlWSUFfUEZOKGZpcnN0X2FkZHIpXSwKIAkJCQkJCSAgICAgVklBX1BHT0ZGKGN1cl9tZW0pLCByZW1haW5pbmdfbGVuLCAKIAkJCQkJCSAgICAgdnNnLT5kaXJlY3Rpb24pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX3B0ci0+ZGV2X2FkZHIgPSBjdXJfZmI7CisJCQkJZGVzY19wdHItPmRldl9hZGRyID0gY3VyX2ZiOwogCQkJCQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjX3B0ci0+c2l6ZSA9IHJlbWFpbmluZ19sZW47CisJCQkJZGVzY19wdHItPnNpemUgPSByZW1haW5pbmdfbGVuOwogCQkJCWRlc2NfcHRyLT5uZXh0ID0gKHVpbnQzMl90KSBuZXh0OwogCQkJCW5leHQgPSBkbWFfbWFwX3NpbmdsZSgmcGRldi0+ZGV2LCBkZXNjX3B0ciwgc2l6ZW9mKCpkZXNjX3B0ciksIAogCQkJCQkJICAgICAgRE1BX1RPX0RFVklDRSk7CkBAIC0xNjIsNyArMTYyLDcgQEAKIAogLyoKICAqIEZ1bmN0aW9uIHRoYXQgZnJlZXMgdXAgYWxsIHJlc291cmNlcyBmb3IgYSBibGl0LiBJdCBpcyB1c2FibGUgZXZlbiBpZiB0aGUgCi0gKiBibGl0IGluZm8gaGFzIG9ubHkgYmUgcGFydGlhbGx5IGJ1aWx0IGFzIGxvbmcgYXMgdGhlIHN0YXR1cyBlbnVtIGlzIGNvbnNpc3RlbnQKKyAqIGJsaXQgaW5mbyBoYXMgb25seSBiZWVuIHBhcnRpYWxseSBidWlsdCBhcyBsb25nIGFzIHRoZSBzdGF0dXMgZW51bSBpcyBjb25zaXN0ZW50CiAgKiB3aXRoIHRoZSBhY3R1YWwgc3RhdHVzIG9mIHRoZSB1c2VkIHJlc291cmNlcy4KICAqLwogCkBAIC0yMzgsOCArMjM4LDExIEBACiAJCXJldHVybiBEUk1fRVJSKEVOT01FTSk7CiAJbWVtc2V0KHZzZy0+cGFnZXMsIDAsIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSAqIHZzZy0+bnVtX3BhZ2VzKTsKIAlkb3duX3JlYWQoJmN1cnJlbnQtPm1tLT5tbWFwX3NlbSk7Ci0JcmV0ID0gZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sICh1bnNpZ25lZCBsb25nKSB4ZmVyLT5tZW1fYWRkciwKLQkJCSAgICAgdnNnLT5udW1fcGFnZXMsIHZzZy0+ZGlyZWN0aW9uLCAwLCB2c2ctPnBhZ2VzLCBOVUxMKTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyhjdXJyZW50LCBjdXJyZW50LT5tbSwKKwkJCSAgICAgKHVuc2lnbmVkIGxvbmcpeGZlci0+bWVtX2FkZHIsCisJCQkgICAgIHZzZy0+bnVtX3BhZ2VzLAorCQkJICAgICAodnNnLT5kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSwKKwkJCSAgICAgMCwgdnNnLT5wYWdlcywgTlVMTCk7CiAKIAl1cF9yZWFkKCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOwogCWlmIChyZXQgIT0gdnNnLT5udW1fcGFnZXMpIHsKQEAgLTQ3NSw5ICs0NzgsMTUgQEAKIAlpZiAoIXRpbWVyX3BlbmRpbmcoJmJsaXRxLT5wb2xsX3RpbWVyKSkgewogCQlibGl0cS0+cG9sbF90aW1lci5leHBpcmVzID0gamlmZmllcysxOwogCQlhZGRfdGltZXIoJmJsaXRxLT5wb2xsX3RpbWVyKTsKLQl9Ci0JdmlhX2RtYWJsaXRfaGFuZGxlcihkZXYsIGVuZ2luZSwgMCk7CiAKKwkgICAgICAgLyoKKwkJKiBSZXJ1biBoYW5kbGVyIHRvIGRlbGV0ZSB0aW1lciBpZiBlbmdpbmVzIGFyZSBvZmYsIGFuZAorCQkqIHRvIHNob3J0ZW4gYWJvcnQgbGF0ZW5jeS4gVGhpcyBpcyBhIGxpdHRsZSBuYXN0eS4KKwkJKi8KKworCSAgICAgICB2aWFfZG1hYmxpdF9oYW5kbGVyKGRldiwgZW5naW5lLCAwKTsKKworCX0KIH0KIAogCkBAIC01OTcsMTUgKzYwNiwyNyBAQAogCSAqIChOb3QgYSBiaWcgbGltaXRhdGlvbiBhbnl3YXkuKQogCSAqLwogCi0JaWYgKCgoeGZlci0+bWVtX3N0cmlkZSAtIHhmZXItPmxpbmVfbGVuZ3RoKSA+PSBQQUdFX1NJWkUpIHx8Ci0JICAgICh4ZmVyLT5tZW1fc3RyaWRlID4gMjA0OCo0KSkgeworCWlmICgoeGZlci0+bWVtX3N0cmlkZSAtIHhmZXItPmxpbmVfbGVuZ3RoKSA+PSBQQUdFX1NJWkUpIHsKIAkJRFJNX0VSUk9SKCJUb28gbGFyZ2Ugc3lzdGVtIG1lbW9yeSBzdHJpZGUuIFN0cmlkZTogJWQsICIKIAkJCSAgIkxlbmd0aDogJWRcbiIsIHhmZXItPm1lbV9zdHJpZGUsIHhmZXItPmxpbmVfbGVuZ3RoKTsKIAkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAKLQlpZiAoeGZlci0+bnVtX2xpbmVzID4gMjA0OCkgewotCQlEUk1fRVJST1IoIlRvbyBtYW55IFBDSSBETUEgYml0Ymx0IGxpbmVzLlxuIik7CisJaWYgKCh4ZmVyLT5tZW1fc3RyaWRlID09IHhmZXItPmxpbmVfbGVuZ3RoKSAmJgorCSAgICh4ZmVyLT5mYl9zdHJpZGUgPT0geGZlci0+bGluZV9sZW5ndGgpKSB7CisJCXhmZXItPm1lbV9zdHJpZGUgKj0geGZlci0+bnVtX2xpbmVzOworCQl4ZmVyLT5saW5lX2xlbmd0aCA9IHhmZXItPm1lbV9zdHJpZGU7CisJCXhmZXItPmZiX3N0cmlkZSA9IHhmZXItPm1lbV9zdHJpZGU7CisJCXhmZXItPm51bV9saW5lcyA9IDE7CisJfQorCisJLyoKKwkgKiBEb24ndCBsb2NrIGFuIGFyYml0cmFyeSBsYXJnZSBudW1iZXIgb2YgcGFnZXMsIHNpbmNlIHRoYXQgY2F1c2VzIGEKKwkgKiBET1Mgc2VjdXJpdHkgaG9sZS4KKwkgKi8KKworCWlmICh4ZmVyLT5udW1fbGluZXMgPiAyMDQ4IHx8ICh4ZmVyLT5udW1fbGluZXMqeGZlci0+bWVtX3N0cmlkZSA+ICgyMDQ4KjIwNDgqNCkpKSB7CisJCURSTV9FUlJPUigiVG9vIGxhcmdlIFBDSSBETUEgYml0Ymx0LlxuIik7CiAJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQkJCiAKQEAgLTYyOCwxNiArNjQ5LDE3IEBACiAKICNpZmRlZiBWSUFfQlVHRlJFRQogCWlmICgoKCh1bnNpZ25lZCBsb25nKXhmZXItPm1lbV9hZGRyICYgMykgIT0gKCh1bnNpZ25lZCBsb25nKXhmZXItPmZiX2FkZHIgJiAzKSkgfHwKLQkgICAgKCh4ZmVyLT5tZW1fc3RyaWRlICYgMykgIT0gKHhmZXItPmZiX3N0cmlkZSAmIDMpKSkgeworCSAgICAoKHhmZXItPm51bV9saW5lcyA+IDEpICYmICgoeGZlci0+bWVtX3N0cmlkZSAmIDMpICE9ICh4ZmVyLT5mYl9zdHJpZGUgJiAzKSkpKSB7CiAJCURSTV9FUlJPUigiSW52YWxpZCBEUk0gYml0Ymx0IGFsaWdubWVudC5cbiIpOwotCSAgICAgICAgcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKKwkJcmV0dXJuIERSTV9FUlIoRUlOVkFMKTsKIAl9CiAjZWxzZQogCWlmICgoKCh1bnNpZ25lZCBsb25nKXhmZXItPm1lbV9hZGRyICYgMTUpIHx8Ci0JICAgICgodW5zaWduZWQgbG9uZyl4ZmVyLT5mYl9hZGRyICYgMykpIHx8ICh4ZmVyLT5tZW1fc3RyaWRlICYgMTUpIHx8Ci0JICAgICh4ZmVyLT5mYl9zdHJpZGUgJiAzKSkgeworCSAgICAgICgodW5zaWduZWQgbG9uZyl4ZmVyLT5mYl9hZGRyICYgMykpIHx8CisJICAgKCh4ZmVyLT5udW1fbGluZXMgPiAxKSAmJiAKKwkgICAoKHhmZXItPm1lbV9zdHJpZGUgJiAxNSkgfHwgKHhmZXItPmZiX3N0cmlkZSAmIDMpKSkpIHsKIAkJRFJNX0VSUk9SKCJJbnZhbGlkIERSTSBiaXRibHQgYWxpZ25tZW50LlxuIik7Ci0JICAgICAgICByZXR1cm4gRFJNX0VSUihFSU5WQUwpOworCQlyZXR1cm4gRFJNX0VSUihFSU5WQUwpOwogCX0JCiAjZW5kaWYKIApAQCAtNzE1LDcgKzczNyw3IEBACiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fdmlhX3NnX2luZm9fdCAqdnNnOwogCWRybV92aWFfYmxpdHFfdCAqYmxpdHE7Ci0gICAgICAgIGludCByZXQ7CisJaW50IHJldDsKIAlpbnQgZW5naW5lOwogCXVuc2lnbmVkIGxvbmcgaXJxc2F2ZTsKIApAQCAtNzU2LDcgKzc3OCw3IEBACiAKIC8qCiAgKiBTeW5jIG9uIGEgcHJldmlvdXNseSBzdWJtaXR0ZWQgYmxpdC4gTm90ZSB0aGF0IHRoZSBYIHNlcnZlciB1c2Ugc2lnbmFscyBleHRlbnNpdmVseSwgYW5kCi0gKiB0aGF0IHRoZXJlIGlzIGEgdmVyeSBiaWcgcHJvYWJpbGl0eSB0aGF0IHRoaXMgSU9DVEwgd2lsbCBiZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4gSW4gdGhhdAorICogdGhhdCB0aGVyZSBpcyBhIHZlcnkgYmlnIHByb2JhYmlsaXR5IHRoYXQgdGhpcyBJT0NUTCB3aWxsIGJlIGludGVycnVwdGVkIGJ5IGEgc2lnbmFsLiBJbiB0aGF0CiAgKiBjYXNlIGl0IHJldHVybnMgd2l0aCAtRUFHQUlOIGZvciB0aGUgc2lnbmFsIHRvIGJlIGRlbGl2ZXJlZC4gCiAgKiBUaGUgY2FsbGVyIHNob3VsZCB0aGVuIHJlaXNzdWUgdGhlIElPQ1RMLiBUaGlzIGlzIHNpbWlsYXIgdG8gd2hhdCBpcyBiZWluZyBkb25lIGZvciBkcm1HZXRMb2NrKCkuCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2RybS5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKaW5kZXggNDdmMGI1Yi4uZTRlZTk3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKKysrIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHJtLmgKQEAgLTI1MCw2ICsyNTAsMTIgQEAKIAl1bnNpZ25lZCBlbmdpbmU7CiB9IGRybV92aWFfYmxpdHN5bmNfdDsKIAorLyogLSAqIEJlbG93LCJmbGFncyIgaXMgY3VycmVudGx5IHVudXNlZCBidXQgd2lsbCBiZSB1c2VkIGZvciBwb3NzaWJsZSBmdXR1cmUKKyAqIGV4dGVuc2lvbnMgbGlrZSBrZXJuZWwgc3BhY2UgYm91bmNlIGJ1ZmZlcnMgZm9yIGJhZCBhbGlnbm1lbnRzIGFuZAorICogYmxpdCBlbmdpbmUgYnVzeS13YWl0IHBvbGxpbmcgZm9yIGJldHRlciBsYXRlbmN5IGluIHRoZSBhYnNlbmNlIG9mCisgKiBpbnRlcnJ1cHRzLgorICovCisKIHR5cGVkZWYgc3RydWN0IGRybV92aWFfZG1hYmxpdCB7CiAJdWludDMyX3QgbnVtX2xpbmVzOwogCXVpbnQzMl90IGxpbmVfbGVuZ3RoOwpAQCAtMjYwLDcgKzI2Niw3IEBACiAJdW5zaWduZWQgY2hhciAqbWVtX2FkZHI7CiAJdWludDMyX3QgbWVtX3N0cmlkZTsKIAotCWludCBib3VuY2VfYnVmZmVyOworCXVpbnQzMl90IGZsYWdzOwogCWludCB0b19mYjsKIAogCWRybV92aWFfYmxpdHN5bmNfdCBzeW5jOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2RybS92aWFfZHJ2LmMgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYwppbmRleCBiM2QzNjRkLi5iYjlkZGU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuYwpAQCAtNDMsNyArNDMsNiBAQAogCSAgICBEUklWRVJfSVJRX1NIQVJFRCB8IERSSVZFUl9JUlFfVkJMLAogCS5sb2FkID0gdmlhX2RyaXZlcl9sb2FkLAogCS51bmxvYWQgPSB2aWFfZHJpdmVyX3VubG9hZCwKLQkuY29udGV4dF9jdG9yID0gdmlhX2luaXRfY29udGV4dCwKIAkuY29udGV4dF9kdG9yID0gdmlhX2ZpbmFsX2NvbnRleHQsCiAJLnZibGFua193YWl0ID0gdmlhX2RyaXZlcl92Ymxhbmtfd2FpdCwKIAkuaXJxX3ByZWluc3RhbGwgPSB2aWFfZHJpdmVyX2lycV9wcmVpbnN0YWxsLApAQCAtNTMsNiArNTIsOCBAQAogCS5kbWFfcXVpZXNjZW50ID0gdmlhX2RyaXZlcl9kbWFfcXVpZXNjZW50LAogCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkucmVjbGFpbV9idWZmZXJzID0gZHJtX2NvcmVfcmVjbGFpbV9idWZmZXJzLAorCS5yZWNsYWltX2J1ZmZlcnNfbG9ja2VkID0gdmlhX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQsCisJLmxhc3RjbG9zZSA9IHZpYV9sYXN0Y2xvc2UsCiAJLmdldF9tYXBfb2ZzID0gZHJtX2NvcmVfZ2V0X21hcF9vZnMsCiAJLmdldF9yZWdfb2ZzID0gZHJtX2NvcmVfZ2V0X3JlZ19vZnMsCiAJLmlvY3RscyA9IHZpYV9pb2N0bHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcnYuaCBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCmluZGV4IDUyYmNjN2IuLmQyMWI1YjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX2Rydi5oCkBAIC0yNCwxNSArMjQsMTYgQEAKICNpZm5kZWYgX1ZJQV9EUlZfSF8KICNkZWZpbmUgX1ZJQV9EUlZfSF8KIAorI2luY2x1ZGUgImRybV9zbWFuLmgiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IJIlZhcmlvdXMiCiAKICNkZWZpbmUgRFJJVkVSX05BTUUJCSJ2aWEiCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiVklBIFVuaWNocm9tZSAvIFBybyIKLSNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA1MTExNiIKKyNkZWZpbmUgRFJJVkVSX0RBVEUJCSIyMDA2MDUyOSIKIAogI2RlZmluZSBEUklWRVJfTUFKT1IJCTIKLSNkZWZpbmUgRFJJVkVSX01JTk9SCQk3Ci0jZGVmaW5lIERSSVZFUl9QQVRDSExFVkVMCTQKKyNkZWZpbmUgRFJJVkVSX01JTk9SCQkxMAorI2RlZmluZSBEUklWRVJfUEFUQ0hMRVZFTAkwCiAKICNpbmNsdWRlICJ2aWFfdmVyaWZpZXIuaCIKIApAQCAtODUsNiArODYsMTIgQEAKIAl1aW50MzJfdCBpcnFfZW5hYmxlX21hc2s7CiAJdWludDMyX3QgaXJxX3BlbmRpbmdfbWFzazsKIAlpbnQgKmlycV9tYXA7CisJdW5zaWduZWQgaW50IGlkbGVfZmF1bHQ7CisJZHJtX3NtYW5fdCBzbWFuOworCWludCB2cmFtX2luaXRpYWxpemVkOworCWludCBhZ3BfaW5pdGlhbGl6ZWQ7CisJdW5zaWduZWQgbG9uZyB2cmFtX29mZnNldDsKKwl1bnNpZ25lZCBsb25nIGFncF9vZmZzZXQ7CiAJZHJtX3ZpYV9ibGl0cV90IGJsaXRfcXVldWVzW1ZJQV9OVU1fQkxJVF9FTkdJTkVTXTsKIH0gZHJtX3ZpYV9wcml2YXRlX3Q7CiAKQEAgLTEzNSw2ICsxNDIsOSBAQAogZXh0ZXJuIHZvaWQgdmlhX2NsZWFudXBfZnV0ZXgoZHJtX3ZpYV9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiBleHRlcm4gdm9pZCB2aWFfcmVsZWFzZV9mdXRleChkcm1fdmlhX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgY29udGV4dCk7CiAKK2V4dGVybiB2b2lkIHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkKGRybV9kZXZpY2VfdCAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCk7CitleHRlcm4gdm9pZCB2aWFfbGFzdGNsb3NlKGRybV9kZXZpY2VfdCAqZGV2KTsKKwogZXh0ZXJuIHZvaWQgdmlhX2RtYWJsaXRfaGFuZGxlcihkcm1fZGV2aWNlX3QgKmRldiwgaW50IGVuZ2luZSwgaW50IGZyb21faXJxKTsKIGV4dGVybiB2b2lkIHZpYV9pbml0X2RtYWJsaXQoZHJtX2RldmljZV90ICpkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHMuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQyOTczNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5jCisrKyAvZGV2L251bGwKQEAgLTEsMjczICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAsIEluYy4sIEhzaW5DaHUsIFRhaXdhbi4KLSAqCi0gKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQotICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKLSAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KLSAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWIgbGljZW5zZSwKLSAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQotICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAqCi0gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZQotICogbmV4dCBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMKLSAqIG9mIHRoZSBTb2Z0d2FyZS4KLSAqCi0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgotICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCi0gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKLSAqIFZJQSwgUzMgR1JBUEhJQ1MsIEFORC9PUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCi0gKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwKLSAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUgotICogREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgotICovCi0jaW5jbHVkZSAiZHJtUC5oIgotCi0jaW5jbHVkZSAidmlhX2RzLmgiCi1leHRlcm4gdW5zaWduZWQgaW50IFZJQV9ERUJVRzsKLQotc2V0X3QgKnZpYV9zZXRJbml0KHZvaWQpCi17Ci0JaW50IGk7Ci0Jc2V0X3QgKnNldDsKLQlzZXQgPSAoc2V0X3QgKikgZHJtX2FsbG9jKHNpemVvZihzZXRfdCksIERSTV9NRU1fRFJJVkVSKTsKLQlmb3IgKGkgPSAwOyBpIDwgU0VUX1NJWkU7IGkrKykgewotCQlzZXQtPmxpc3RbaV0uZnJlZV9uZXh0ID0gaSArIDE7Ci0JCXNldC0+bGlzdFtpXS5hbGxvY19uZXh0ID0gLTE7Ci0JfQotCXNldC0+bGlzdFtTRVRfU0laRSAtIDFdLmZyZWVfbmV4dCA9IC0xOwotCXNldC0+ZnJlZSA9IDA7Ci0Jc2V0LT5hbGxvYyA9IC0xOwotCXNldC0+dHJhY2UgPSAtMTsKLQlyZXR1cm4gc2V0OwotfQotCi1pbnQgdmlhX3NldEFkZChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pCi17Ci0JaW50IGZyZWUgPSBzZXQtPmZyZWU7Ci0JaWYgKGZyZWUgIT0gLTEpIHsKLQkJc2V0LT5saXN0W2ZyZWVdLnZhbCA9IGl0ZW07Ci0JCXNldC0+ZnJlZSA9IHNldC0+bGlzdFtmcmVlXS5mcmVlX25leHQ7Ci0JfSBlbHNlIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXNldC0+bGlzdFtmcmVlXS5hbGxvY19uZXh0ID0gc2V0LT5hbGxvYzsKLQlzZXQtPmFsbG9jID0gZnJlZTsKLQlzZXQtPmxpc3RbZnJlZV0uZnJlZV9uZXh0ID0gLTE7Ci0JcmV0dXJuIDE7Ci19Ci0KLWludCB2aWFfc2V0RGVsKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSkKLXsKLQlpbnQgYWxsb2MgPSBzZXQtPmFsbG9jOwotCWludCBwcmV2ID0gLTE7Ci0KLQl3aGlsZSAoYWxsb2MgIT0gLTEpIHsKLQkJaWYgKHNldC0+bGlzdFthbGxvY10udmFsID09IGl0ZW0pIHsKLQkJCWlmIChwcmV2ICE9IC0xKQotCQkJCXNldC0+bGlzdFtwcmV2XS5hbGxvY19uZXh0ID0KLQkJCQkgICAgc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OwotCQkJZWxzZQotCQkJCXNldC0+YWxsb2MgPSBzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQ7Ci0JCQlicmVhazsKLQkJfQotCQlwcmV2ID0gYWxsb2M7Ci0JCWFsbG9jID0gc2V0LT5saXN0W2FsbG9jXS5hbGxvY19uZXh0OwotCX0KLQotCWlmIChhbGxvYyA9PSAtMSkKLQkJcmV0dXJuIDA7Ci0KLQlzZXQtPmxpc3RbYWxsb2NdLmZyZWVfbmV4dCA9IHNldC0+ZnJlZTsKLQlzZXQtPmZyZWUgPSBhbGxvYzsKLQlzZXQtPmxpc3RbYWxsb2NdLmFsbG9jX25leHQgPSAtMTsKLQotCXJldHVybiAxOwotfQotCi0vKiBzZXRGaXJzdCAtPiBzZXRBZGQgLT4gc2V0TmV4dCBpcyB3cm9uZyAqLwotCi1pbnQgdmlhX3NldEZpcnN0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKQotewotCWlmIChzZXQtPmFsbG9jID09IC0xKQotCQlyZXR1cm4gMDsKLQotCSppdGVtID0gc2V0LT5saXN0W3NldC0+YWxsb2NdLnZhbDsKLQlzZXQtPnRyYWNlID0gc2V0LT5saXN0W3NldC0+YWxsb2NdLmFsbG9jX25leHQ7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IHZpYV9zZXROZXh0KHNldF90ICogc2V0LCBJVEVNX1RZUEUgKiBpdGVtKQotewotCWlmIChzZXQtPnRyYWNlID09IC0xKQotCQlyZXR1cm4gMDsKLQotCSppdGVtID0gc2V0LT5saXN0W3NldC0+dHJhY2VdLnZhbDsKLQlzZXQtPnRyYWNlID0gc2V0LT5saXN0W3NldC0+dHJhY2VdLmFsbG9jX25leHQ7Ci0KLQlyZXR1cm4gMTsKLX0KLQotaW50IHZpYV9zZXREZXN0cm95KHNldF90ICogc2V0KQotewotCWRybV9mcmVlKHNldCwgc2l6ZW9mKHNldF90KSwgRFJNX01FTV9EUklWRVIpOwotCi0JcmV0dXJuIDE7Ci19Ci0KLSNkZWZpbmUgSVNGUkVFKGJwdHIpICgoYnB0ciktPmZyZWUpCi0KLSNkZWZpbmUgZnByaW50ZihmbXQsIGFyZy4uLikgZG97fXdoaWxlKDApCi0KLW1lbUhlYXBfdCAqdmlhX21tSW5pdChpbnQgb2ZzLCBpbnQgc2l6ZSkKLXsKLQlQTWVtQmxvY2sgYmxvY2tzOwotCi0JaWYgKHNpemUgPD0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlibG9ja3MgPSAoVE1lbUJsb2NrICopIGRybV9jYWxsb2MoMSwgc2l6ZW9mKFRNZW1CbG9jayksIERSTV9NRU1fRFJJVkVSKTsKLQotCWlmIChibG9ja3MpIHsKLQkJYmxvY2tzLT5vZnMgPSBvZnM7Ci0JCWJsb2Nrcy0+c2l6ZSA9IHNpemU7Ci0JCWJsb2Nrcy0+ZnJlZSA9IDE7Ci0JCXJldHVybiAobWVtSGVhcF90ICopIGJsb2NrczsKLQl9IGVsc2UKLQkJcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBUTWVtQmxvY2sgKlNsaWNlQmxvY2soVE1lbUJsb2NrICogcCwKLQkJCSAgICAgaW50IHN0YXJ0b2ZzLCBpbnQgc2l6ZSwKLQkJCSAgICAgaW50IHJlc2VydmVkLCBpbnQgYWxpZ25tZW50KQotewotCVRNZW1CbG9jayAqbmV3YmxvY2s7Ci0KLQkvKiBicmVhayBsZWZ0ICovCi0JaWYgKHN0YXJ0b2ZzID4gcC0+b2ZzKSB7Ci0JCW5ld2Jsb2NrID0KLQkJICAgIChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKLQkJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7Ci0JCW5ld2Jsb2NrLT5vZnMgPSBzdGFydG9mczsKLQkJbmV3YmxvY2stPnNpemUgPSBwLT5zaXplIC0gKHN0YXJ0b2ZzIC0gcC0+b2ZzKTsKLQkJbmV3YmxvY2stPmZyZWUgPSAxOwotCQluZXdibG9jay0+bmV4dCA9IHAtPm5leHQ7Ci0JCXAtPnNpemUgLT0gbmV3YmxvY2stPnNpemU7Ci0JCXAtPm5leHQgPSBuZXdibG9jazsKLQkJcCA9IG5ld2Jsb2NrOwotCX0KLQotCS8qIGJyZWFrIHJpZ2h0ICovCi0JaWYgKHNpemUgPCBwLT5zaXplKSB7Ci0JCW5ld2Jsb2NrID0KLQkJICAgIChUTWVtQmxvY2sgKikgZHJtX2NhbGxvYygxLCBzaXplb2YoVE1lbUJsb2NrKSwKLQkJCQkJICAgICBEUk1fTUVNX0RSSVZFUik7Ci0JCW5ld2Jsb2NrLT5vZnMgPSBzdGFydG9mcyArIHNpemU7Ci0JCW5ld2Jsb2NrLT5zaXplID0gcC0+c2l6ZSAtIHNpemU7Ci0JCW5ld2Jsb2NrLT5mcmVlID0gMTsKLQkJbmV3YmxvY2stPm5leHQgPSBwLT5uZXh0OwotCQlwLT5zaXplID0gc2l6ZTsKLQkJcC0+bmV4dCA9IG5ld2Jsb2NrOwotCX0KLQotCS8qIHAgPSBtaWRkbGUgYmxvY2sgKi8KLQlwLT5hbGlnbiA9IGFsaWdubWVudDsKLQlwLT5mcmVlID0gMDsKLQlwLT5yZXNlcnZlZCA9IHJlc2VydmVkOwotCXJldHVybiBwOwotfQotCi1QTWVtQmxvY2sgdmlhX21tQWxsb2NNZW0obWVtSGVhcF90ICogaGVhcCwgaW50IHNpemUsIGludCBhbGlnbjIsCi0JCQkgaW50IHN0YXJ0U2VhcmNoKQotewotCWludCBtYXNrLCBzdGFydG9mcywgZW5kb2ZzOwotCVRNZW1CbG9jayAqcDsKLQotCWlmICghaGVhcCB8fCBhbGlnbjIgPCAwIHx8IHNpemUgPD0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQltYXNrID0gKDEgPDwgYWxpZ24yKSAtIDE7Ci0Jc3RhcnRvZnMgPSAwOwotCXAgPSAoVE1lbUJsb2NrICopIGhlYXA7Ci0KLQl3aGlsZSAocCkgewotCQlpZiAoSVNGUkVFKHApKSB7Ci0JCQlzdGFydG9mcyA9IChwLT5vZnMgKyBtYXNrKSAmIH5tYXNrOwotCi0JCQlpZiAoc3RhcnRvZnMgPCBzdGFydFNlYXJjaCkKLQkJCQlzdGFydG9mcyA9IHN0YXJ0U2VhcmNoOwotCi0JCQllbmRvZnMgPSBzdGFydG9mcyArIHNpemU7Ci0KLQkJCWlmIChlbmRvZnMgPD0gKHAtPm9mcyArIHAtPnNpemUpKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJcCA9IHAtPm5leHQ7Ci0JfQotCi0JaWYgKCFwKQotCQlyZXR1cm4gTlVMTDsKLQotCXAgPSBTbGljZUJsb2NrKHAsIHN0YXJ0b2ZzLCBzaXplLCAwLCBtYXNrICsgMSk7Ci0JcC0+aGVhcCA9IGhlYXA7Ci0KLQlyZXR1cm4gcDsKLX0KLQotc3RhdGljIF9faW5saW5lX18gaW50IEpvaW4yQmxvY2tzKFRNZW1CbG9jayAqIHApCi17Ci0JaWYgKHAtPmZyZWUgJiYgcC0+bmV4dCAmJiBwLT5uZXh0LT5mcmVlKSB7Ci0JCVRNZW1CbG9jayAqcSA9IHAtPm5leHQ7Ci0JCXAtPnNpemUgKz0gcS0+c2l6ZTsKLQkJcC0+bmV4dCA9IHEtPm5leHQ7Ci0JCWRybV9mcmVlKHEsIHNpemVvZihUTWVtQmxvY2spLCBEUk1fTUVNX0RSSVZFUik7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLWludCB2aWFfbW1GcmVlTWVtKFBNZW1CbG9jayBiKQotewotCVRNZW1CbG9jayAqcCwgKnByZXY7Ci0KLQlpZiAoIWIpCi0JCXJldHVybiAwOwotCi0JaWYgKCFiLT5oZWFwKSB7Ci0JCWZwcmludGYoc3RkZXJyLCAibm8gaGVhcFxuIik7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCXAgPSBiLT5oZWFwOwotCXByZXYgPSBOVUxMOwotCi0Jd2hpbGUgKHAgJiYgcCAhPSBiKSB7Ci0JCXByZXYgPSBwOwotCQlwID0gcC0+bmV4dDsKLQl9Ci0KLQlpZiAoIXAgfHwgcC0+ZnJlZSB8fCBwLT5yZXNlcnZlZCkgewotCQlpZiAoIXApCi0JCQlmcHJpbnRmKHN0ZGVyciwgImJsb2NrIG5vdCBmb3VuZCBpbiBoZWFwXG4iKTsKLQkJZWxzZSBpZiAocC0+ZnJlZSkKLQkJCWZwcmludGYoc3RkZXJyLCAiYmxvY2sgYWxyZWFkeSBmcmVlXG4iKTsKLQkJZWxzZQotCQkJZnByaW50ZihzdGRlcnIsICJibG9jayBpcyByZXNlcnZlZFxuIik7Ci0KLQkJcmV0dXJuIC0xOwotCX0KLQotCXAtPmZyZWUgPSAxOwotCUpvaW4yQmxvY2tzKHApOwotCi0JaWYgKHByZXYpCi0JCUpvaW4yQmxvY2tzKHByZXYpOwotCi0JcmV0dXJuIDA7Ci19CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5oIGIvZHJpdmVycy9jaGFyL2RybS92aWFfZHMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDJiYjlmMy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9kcy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgMTk5OC0yMDAzIFZJQSBUZWNobm9sb2dpZXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDAxLTIwMDMgUzMgR3JhcGhpY3MsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KLSAqIENvcHlyaWdodCAyMDAwIFNpbGljb24gSW50ZWdyYXRlZCBTeXN0ZW1zIENvcnAsIEluYy4sIEhzaW5DaHUsIFRhaXdhbi4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKLSAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCi0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCi0gKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViIGxpY2Vuc2UsCi0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKLSAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Ci0gKgotICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUKLSAqIG5leHQgcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zCi0gKiBvZiB0aGUgU29mdHdhcmUuCi0gKgotICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKLSAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAotICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMCi0gKiBWSUEsIFMzIEdSQVBISUNTLCBBTkQvT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgotICogT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCi0gKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKLSAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KLSAqLwotI2lmbmRlZiBfdmlhX2RzX2hfCi0jZGVmaW5lIF92aWFfZHNfaF8KLQotI2luY2x1ZGUgImRybVAuaCIKLQotLyogU2V0IERhdGEgU3RydWN0dXJlICovCi0jZGVmaW5lIFNFVF9TSVpFIDUwMDAKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBJVEVNX1RZUEU7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQlJVEVNX1RZUEUgdmFsOwotCWludCBhbGxvY19uZXh0LCBmcmVlX25leHQ7Ci19IGxpc3RfaXRlbV90OwotCi10eXBlZGVmIHN0cnVjdCB7Ci0JaW50IGFsbG9jOwotCWludCBmcmVlOwotCWludCB0cmFjZTsKLQlsaXN0X2l0ZW1fdCBsaXN0W1NFVF9TSVpFXTsKLX0gc2V0X3Q7Ci0KLXNldF90ICp2aWFfc2V0SW5pdCh2b2lkKTsKLWludCB2aWFfc2V0QWRkKHNldF90ICogc2V0LCBJVEVNX1RZUEUgaXRlbSk7Ci1pbnQgdmlhX3NldERlbChzZXRfdCAqIHNldCwgSVRFTV9UWVBFIGl0ZW0pOwotaW50IHZpYV9zZXRGaXJzdChzZXRfdCAqIHNldCwgSVRFTV9UWVBFICogaXRlbSk7Ci1pbnQgdmlhX3NldE5leHQoc2V0X3QgKiBzZXQsIElURU1fVFlQRSAqIGl0ZW0pOwotaW50IHZpYV9zZXREZXN0cm95KHNldF90ICogc2V0KTsKLQotI2VuZGlmCi0KLSNpZm5kZWYgTU1fSU5DCi0jZGVmaW5lIE1NX0lOQwotCi1zdHJ1Y3QgbWVtX2Jsb2NrX3QgewotCXN0cnVjdCBtZW1fYmxvY2tfdCAqbmV4dDsKLQlzdHJ1Y3QgbWVtX2Jsb2NrX3QgKmhlYXA7Ci0JaW50IG9mcywgc2l6ZTsKLQlpbnQgYWxpZ247Ci0JdW5zaWduZWQgaW50IGZyZWU6MTsKLQl1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6MTsKLX07Ci10eXBlZGVmIHN0cnVjdCBtZW1fYmxvY2tfdCBUTWVtQmxvY2s7Ci10eXBlZGVmIHN0cnVjdCBtZW1fYmxvY2tfdCAqUE1lbUJsb2NrOwotCi0vKiBhIGhlYXAgaXMganVzdCB0aGUgZmlyc3QgYmxvY2sgaW4gYSBjaGFpbiAqLwotdHlwZWRlZiBzdHJ1Y3QgbWVtX2Jsb2NrX3QgbWVtSGVhcF90OwotCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgbW1CbG9ja1NpemUoUE1lbUJsb2NrIGIpCi17Ci0JcmV0dXJuIGItPnNpemU7Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGludCBtbU9mZnNldChQTWVtQmxvY2sgYikKLXsKLQlyZXR1cm4gYi0+b2ZzOwotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIG1tTWFya1Jlc2VydmVkKFBNZW1CbG9jayBiKQotewotCWItPnJlc2VydmVkID0gMTsKLX0KLQotLyoKLSAqIGlucHV0OiB0b3RhbCBzaXplIGluIGJ5dGVzCi0gKiByZXR1cm46IGEgaGVhcCBwb2ludGVyIGlmIE9LLCBOVUxMIGlmIGVycm9yCi0gKi8KLW1lbUhlYXBfdCAqdmlhX21tSW5pdChpbnQgb2ZzLCBpbnQgc2l6ZSk7Ci0KLVBNZW1CbG9jayB2aWFfbW1BbGxvY01lbShtZW1IZWFwX3QgKiBoZWFwLCBpbnQgc2l6ZSwgaW50IGFsaWduMiwKLQkJCSBpbnQgc3RhcnRTZWFyY2gpOwotCi0vKgotICogRnJlZSBibG9jayBzdGFydHMgYXQgb2Zmc2V0Ci0gKiBpbnB1dDogcG9pbnRlciB0byBhIGJsb2NrCi0gKiByZXR1cm46IDAgaWYgT0ssIC0xIGlmIGVycm9yCi0gKi8KLWludCB2aWFfbW1GcmVlTWVtKFBNZW1CbG9jayBiKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tYXAuYyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCmluZGV4IGM2YTA4ZTkuLjc4MjAxMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21hcC5jCkBAIC05OCw2ICs5OCw3IEBACiBpbnQgdmlhX2RyaXZlcl9sb2FkKGRybV9kZXZpY2VfdCAqZGV2LCB1bnNpZ25lZCBsb25nIGNoaXBzZXQpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2OworCWludCByZXQgPSAwOwogCiAJZGV2X3ByaXYgPSBkcm1fY2FsbG9jKDEsIHNpemVvZihkcm1fdmlhX3ByaXZhdGVfdCksIERSTV9NRU1fRFJJVkVSKTsKIAlpZiAoZGV2X3ByaXYgPT0gTlVMTCkKQEAgLTEwOCwxMyArMTA5LDE5IEBACiAJaWYgKGNoaXBzZXQgPT0gVklBX1BST19HUk9VUF9BKQogCQlkZXZfcHJpdi0+cHJvX2dyb3VwX2EgPSAxOwogCi0JcmV0dXJuIDA7CisJcmV0ID0gZHJtX3NtYW5faW5pdCgmZGV2X3ByaXYtPnNtYW4sIDIsIDEyLCA4KTsKKwlpZiAocmV0KSB7CisJCWRybV9mcmVlKGRldl9wcml2LCBzaXplb2YoKmRldl9wcml2KSwgRFJNX01FTV9EUklWRVIpOworCX0KKwlyZXR1cm4gcmV0OwogfQogCiBpbnQgdmlhX2RyaXZlcl91bmxvYWQoZHJtX2RldmljZV90ICpkZXYpCiB7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWRybV9zbWFuX3Rha2Vkb3duKCZkZXZfcHJpdi0+c21hbik7CisKIAlkcm1fZnJlZShkZXZfcHJpdiwgc2l6ZW9mKGRybV92aWFfcHJpdmF0ZV90KSwgRFJNX01FTV9EUklWRVIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jIGIvZHJpdmVycy9jaGFyL2RybS92aWFfbW0uYwppbmRleCAzM2UwY2IxLi4yZmNmMDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvZHJtL3ZpYV9tbS5jCisrKyBiL2RyaXZlcnMvY2hhci9kcm0vdmlhX21tLmMKQEAgLTEsNiArMSw2IEBACiAvKgotICogQ29weXJpZ2h0IDE5OTgtMjAwMyBWSUEgVGVjaG5vbG9naWVzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgMjAwMS0yMDAzIFMzIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgMjAwNiBUdW5nc3RlbiBHcmFwaGljcyBJbmMuLCBCaXNtYXJjaywgTkQuLCBVU0EuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCiAgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLApAQCAtMTYsMzQ3ICsxNiwxOTQgQEAKICAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCiAgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKICAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAotICogVklBLCBTMyBHUkFQSElDUywgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKLSAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIFRIRUlSIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwKKyAqIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCiAgKiBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIKICAqIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KICAqLworLyoKKyAqIEF1dGhvcnM6IFRob21hcyBIZWxsc3Ry9m0gPHRob21hcy1hdC10dW5nc3RlbmdyYXBoaWNzLWRvdC1jb20+CisgKi8KKwogI2luY2x1ZGUgImRybVAuaCIKICNpbmNsdWRlICJ2aWFfZHJtLmgiCiAjaW5jbHVkZSAidmlhX2Rydi5oIgotI2luY2x1ZGUgInZpYV9kcy5oIgotI2luY2x1ZGUgInZpYV9tbS5oIgorI2luY2x1ZGUgImRybV9zbWFuLmgiCiAKLSNkZWZpbmUgTUFYX0NPTlRFWFQgMTAwCi0KLXR5cGVkZWYgc3RydWN0IHsKLQlpbnQgdXNlZDsKLQlpbnQgY29udGV4dDsKLQlzZXRfdCAqc2V0c1syXTsJCS8qIDAgZm9yIGZyYW1lIGJ1ZmZlciwgMSBmb3IgQUdQICwgMiBmb3IgU3lzdGVtICovCi19IHZpYV9jb250ZXh0X3Q7Ci0KLXN0YXRpYyB2aWFfY29udGV4dF90IGdsb2JhbF9wcHJpdltNQVhfQ09OVEVYVF07Ci0KLXN0YXRpYyBpbnQgdmlhX2FncF9hbGxvYyhkcm1fdmlhX21lbV90ICogbWVtKTsKLXN0YXRpYyBpbnQgdmlhX2FncF9mcmVlKGRybV92aWFfbWVtX3QgKiBtZW0pOwotc3RhdGljIGludCB2aWFfZmJfYWxsb2MoZHJtX3ZpYV9tZW1fdCAqIG1lbSk7Ci1zdGF0aWMgaW50IHZpYV9mYl9mcmVlKGRybV92aWFfbWVtX3QgKiBtZW0pOwotCi1zdGF0aWMgaW50IGFkZF9hbGxvY19zZXQoaW50IGNvbnRleHQsIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlpbnQgaSwgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7Ci0JCWlmIChnbG9iYWxfcHByaXZbaV0udXNlZCAmJiBnbG9iYWxfcHByaXZbaV0uY29udGV4dCA9PSBjb250ZXh0KSB7Ci0JCQlyZXR2YWwgPSB2aWFfc2V0QWRkKGdsb2JhbF9wcHJpdltpXS5zZXRzW3R5cGVdLCB2YWwpOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi1zdGF0aWMgaW50IGRlbF9hbGxvY19zZXQoaW50IGNvbnRleHQsIGludCB0eXBlLCB1bnNpZ25lZCBsb25nIHZhbCkKLXsKLQlpbnQgaSwgcmV0dmFsID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKQotCQlpZiAoZ2xvYmFsX3Bwcml2W2ldLnVzZWQgJiYgZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkgewotCQkJcmV0dmFsID0gdmlhX3NldERlbChnbG9iYWxfcHByaXZbaV0uc2V0c1t0eXBlXSwgdmFsKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBhZ3AgbWVtb3J5IG1hbmFnZW1lbnQgKi8KLXN0YXRpYyBtZW1IZWFwX3QgKkFncEhlYXAgPSBOVUxMOworI2RlZmluZSBWSUFfTU1fQUxJR05fU0hJRlQgNAorI2RlZmluZSBWSUFfTU1fQUxJR05fTUFTSyAoICgxIDw8IFZJQV9NTV9BTElHTl9TSElGVCkgLSAxKQogCiBpbnQgdmlhX2FncF9pbml0KERSTV9JT0NUTF9BUkdTKQogeworCURSTV9ERVZJQ0U7CiAJZHJtX3ZpYV9hZ3BfdCBhZ3A7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisJaW50IHJldDsKIAogCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChhZ3AsIChkcm1fdmlhX2FncF90IF9fdXNlciAqKSBkYXRhLAogCQkJCSBzaXplb2YoYWdwKSk7CisJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCXJldCA9IGRybV9zbWFuX3NldF9yYW5nZSgmZGV2X3ByaXYtPnNtYW4sIFZJQV9NRU1fQUdQLCAwLAorCQkJCSBhZ3Auc2l6ZSA+PiBWSUFfTU1fQUxJR05fU0hJRlQpOwogCi0JQWdwSGVhcCA9IHZpYV9tbUluaXQoYWdwLm9mZnNldCwgYWdwLnNpemUpOworCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJBR1AgbWVtb3J5IG1hbmFnZXIgaW5pdGlhbGlzYXRpb24gZXJyb3JcbiIpOworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKLQlEUk1fREVCVUcoIm9mZnNldCA9ICVsdSwgc2l6ZSA9ICVsdSIsICh1bnNpZ25lZCBsb25nKWFncC5vZmZzZXQsCi0JCSAgKHVuc2lnbmVkIGxvbmcpYWdwLnNpemUpOworCWRldl9wcml2LT5hZ3BfaW5pdGlhbGl6ZWQgPSAxOworCWRldl9wcml2LT5hZ3Bfb2Zmc2V0ID0gYWdwLm9mZnNldDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKIAorCURSTV9ERUJVRygib2Zmc2V0ID0gJXUsIHNpemUgPSAldSIsIGFncC5vZmZzZXQsIGFncC5zaXplKTsKIAlyZXR1cm4gMDsKIH0KIAotLyogZmIgbWVtb3J5IG1hbmFnZW1lbnQgKi8KLXN0YXRpYyBtZW1IZWFwX3QgKkZCSGVhcCA9IE5VTEw7Ci0KIGludCB2aWFfZmJfaW5pdChEUk1fSU9DVExfQVJHUykKIHsKKwlEUk1fREVWSUNFOwogCWRybV92aWFfZmJfdCBmYjsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSAoZHJtX3ZpYV9wcml2YXRlX3QgKikgZGV2LT5kZXZfcHJpdmF0ZTsKKwlpbnQgcmV0OwogCiAJRFJNX0NPUFlfRlJPTV9VU0VSX0lPQ1RMKGZiLCAoZHJtX3ZpYV9mYl90IF9fdXNlciAqKSBkYXRhLCBzaXplb2YoZmIpKTsKIAotCUZCSGVhcCA9IHZpYV9tbUluaXQoZmIub2Zmc2V0LCBmYi5zaXplKTsKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJcmV0ID0gZHJtX3NtYW5fc2V0X3JhbmdlKCZkZXZfcHJpdi0+c21hbiwgVklBX01FTV9WSURFTywgMCwKKwkJCQkgZmIuc2l6ZSA+PiBWSUFfTU1fQUxJR05fU0hJRlQpOwogCi0JRFJNX0RFQlVHKCJvZmZzZXQgPSAlbHUsIHNpemUgPSAlbHUiLCAodW5zaWduZWQgbG9uZylmYi5vZmZzZXQsCi0JCSAgKHVuc2lnbmVkIGxvbmcpZmIuc2l6ZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IHZpYV9pbml0X2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmCi0JCSAgICAoZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkpCi0JCQlicmVhazsKLQotCWlmIChpID49IE1BWF9DT05URVhUKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBNQVhfQ09OVEVYVDsgaSsrKSB7Ci0JCQlpZiAoIWdsb2JhbF9wcHJpdltpXS51c2VkKSB7Ci0JCQkJZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPSBjb250ZXh0OwotCQkJCWdsb2JhbF9wcHJpdltpXS51c2VkID0gMTsKLQkJCQlnbG9iYWxfcHByaXZbaV0uc2V0c1swXSA9IHZpYV9zZXRJbml0KCk7Ci0JCQkJZ2xvYmFsX3Bwcml2W2ldLnNldHNbMV0gPSB2aWFfc2V0SW5pdCgpOwotCQkJCURSTV9ERUJVRygiaW5pdCBhbGxvY2F0aW9uIHNldCwgc29ja2V0PSVkLCIKLQkJCQkJICAiIGNvbnRleHQgPSAlZFxuIiwgaSwgY29udGV4dCk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoKGkgPj0gTUFYX0NPTlRFWFQpIHx8IChnbG9iYWxfcHByaXZbaV0uc2V0c1swXSA9PSBOVUxMKSB8fAotCQkgICAgKGdsb2JhbF9wcHJpdltpXS5zZXRzWzFdID09IE5VTEwpKSB7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCWlmIChyZXQpIHsKKwkJRFJNX0VSUk9SKCJWUkFNIG1lbW9yeSBtYW5hZ2VyIGluaXRpYWxpc2F0aW9uIGVycm9yXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiByZXQ7CiAJfQogCi0JcmV0dXJuIDE7CisJZGV2X3ByaXYtPnZyYW1faW5pdGlhbGl6ZWQgPSAxOworCWRldl9wcml2LT52cmFtX29mZnNldCA9IGZiLm9mZnNldDsKKworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCURSTV9ERUJVRygib2Zmc2V0ID0gJXUsIHNpemUgPSAldSIsIGZiLm9mZnNldCwgZmIuc2l6ZSk7CisKKwlyZXR1cm4gMDsKKwogfQogCiBpbnQgdmlhX2ZpbmFsX2NvbnRleHQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IGNvbnRleHQpCiB7Ci0JaW50IGk7CiAJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTUFYX0NPTlRFWFQ7IGkrKykKLQkJaWYgKGdsb2JhbF9wcHJpdltpXS51c2VkICYmCi0JCSAgICAoZ2xvYmFsX3Bwcml2W2ldLmNvbnRleHQgPT0gY29udGV4dCkpCi0JCQlicmVhazsKLQotCWlmIChpIDwgTUFYX0NPTlRFWFQpIHsKLQkJc2V0X3QgKnNldDsKLQkJSVRFTV9UWVBFIGl0ZW07Ci0JCWludCByZXR2YWw7Ci0KLQkJRFJNX0RFQlVHKCJmaW5kIHNvY2tldCAlZCwgY29udGV4dCA9ICVkXG4iLCBpLCBjb250ZXh0KTsKLQotCQkvKiBWaWRlbyBNZW1vcnkgKi8KLQkJc2V0ID0gZ2xvYmFsX3Bwcml2W2ldLnNldHNbMF07Ci0JCXJldHZhbCA9IHZpYV9zZXRGaXJzdChzZXQsICZpdGVtKTsKLQkJd2hpbGUgKHJldHZhbCkgewotCQkJRFJNX0RFQlVHKCJmcmVlIHZpZGVvIG1lbW9yeSAweCVseFxuIiwgaXRlbSk7Ci0JCQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGl0ZW0pOwotCQkJcmV0dmFsID0gdmlhX3NldE5leHQoc2V0LCAmaXRlbSk7Ci0JCX0KLQkJdmlhX3NldERlc3Ryb3koc2V0KTsKLQotCQkvKiBBR1AgTWVtb3J5ICovCi0JCXNldCA9IGdsb2JhbF9wcHJpdltpXS5zZXRzWzFdOwotCQlyZXR2YWwgPSB2aWFfc2V0Rmlyc3Qoc2V0LCAmaXRlbSk7Ci0JCXdoaWxlIChyZXR2YWwpIHsKLQkJCURSTV9ERUJVRygiZnJlZSBhZ3AgbWVtb3J5IDB4JWx4XG4iLCBpdGVtKTsKLQkJCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgaXRlbSk7Ci0JCQlyZXR2YWwgPSB2aWFfc2V0TmV4dChzZXQsICZpdGVtKTsKLQkJfQotCQl2aWFfc2V0RGVzdHJveShzZXQpOwotCQlnbG9iYWxfcHByaXZbaV0udXNlZCA9IDA7Ci0JfQogCXZpYV9yZWxlYXNlX2Z1dGV4KGRldl9wcml2LCBjb250ZXh0KTsKIAotI2lmIGRlZmluZWQoX19saW51eF9fKQogCS8qIExpbnV4IHNwZWNpZmljIHVudGlsIGNvbnRleHQgdHJhY2tpbmcgY29kZSBnZXRzIHBvcnRlZCB0byBCU0QgKi8KIAkvKiBMYXN0IGNvbnRleHQsIHBlcmZvcm0gY2xlYW51cCAqLwogCWlmIChkZXYtPmN0eF9jb3VudCA9PSAxICYmIGRldi0+ZGV2X3ByaXZhdGUpIHsKIAkJRFJNX0RFQlVHKCJMYXN0IENvbnRleHRcbiIpOwogCQlpZiAoZGV2LT5pcnEpCiAJCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOwotCiAJCXZpYV9jbGVhbnVwX2Z1dGV4KGRldl9wcml2KTsKIAkJdmlhX2RvX2NsZWFudXBfbWFwKGRldik7CiAJfQotI2VuZGlmCi0KIAlyZXR1cm4gMTsKIH0KIAordm9pZCB2aWFfbGFzdGNsb3NlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gKGRybV92aWFfcHJpdmF0ZV90ICopIGRldi0+ZGV2X3ByaXZhdGU7CisKKwlpZiAoIWRldl9wcml2KQorCQlyZXR1cm47CisKKwltdXRleF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJZHJtX3NtYW5fY2xlYW51cCgmZGV2X3ByaXYtPnNtYW4pOworCWRldl9wcml2LT52cmFtX2luaXRpYWxpemVkID0gMDsKKwlkZXZfcHJpdi0+YWdwX2luaXRpYWxpemVkID0gMDsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKK30JCisKIGludCB2aWFfbWVtX2FsbG9jKERSTV9JT0NUTF9BUkdTKQogeworCURSTV9ERVZJQ0U7CisKIAlkcm1fdmlhX21lbV90IG1lbTsKKwlpbnQgcmV0dmFsID0gMDsKKwlkcm1fbWVtYmxvY2tfaXRlbV90ICppdGVtOworCWRybV92aWFfcHJpdmF0ZV90ICpkZXZfcHJpdiA9IChkcm1fdmlhX3ByaXZhdGVfdCAqKSBkZXYtPmRldl9wcml2YXRlOworCXVuc2lnbmVkIGxvbmcgdG1wU2l6ZTsKIAogCURSTV9DT1BZX0ZST01fVVNFUl9JT0NUTChtZW0sIChkcm1fdmlhX21lbV90IF9fdXNlciAqKSBkYXRhLAogCQkJCSBzaXplb2YobWVtKSk7CiAKLQlzd2l0Y2ggKG1lbS50eXBlKSB7Ci0JY2FzZSBWSUFfTUVNX1ZJREVPOgotCQlpZiAodmlhX2ZiX2FsbG9jKCZtZW0pIDwgMCkKLQkJCXJldHVybiAtRUZBVUxUOwotCQlEUk1fQ09QWV9UT19VU0VSX0lPQ1RMKChkcm1fdmlhX21lbV90IF9fdXNlciAqKSBkYXRhLCBtZW0sCi0JCQkJICAgICAgIHNpemVvZihtZW0pKTsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWSUFfTUVNX0FHUDoKLQkJaWYgKHZpYV9hZ3BfYWxsb2MoJm1lbSkgPCAwKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCURSTV9DT1BZX1RPX1VTRVJfSU9DVEwoKGRybV92aWFfbWVtX3QgX191c2VyICopIGRhdGEsIG1lbSwKLQkJCQkgICAgICAgc2l6ZW9mKG1lbSkpOwotCQlyZXR1cm4gMDsKKwlpZiAobWVtLnR5cGUgPiBWSUFfTUVNX0FHUCkgeworCQlEUk1fRVJST1IoIlVua25vd24gbWVtb3J5IHR5cGUgYWxsb2NhdGlvblxuIik7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CisJfQorCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoMCA9PSAoKG1lbS50eXBlID09IFZJQV9NRU1fVklERU8pID8gZGV2X3ByaXYtPnZyYW1faW5pdGlhbGl6ZWQgOgorCQkgICAgICBkZXZfcHJpdi0+YWdwX2luaXRpYWxpemVkKSkgeworCQlEUk1fRVJST1IKKwkJICAgICgiQXR0ZW1wdCB0byBhbGxvY2F0ZSBmcm9tIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1hbmFnZXIuXG4iKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJCXJldHVybiBEUk1fRVJSKEVJTlZBTCk7CiAJfQogCi0JcmV0dXJuIC1FRkFVTFQ7Ci19Ci0KLXN0YXRpYyBpbnQgdmlhX2ZiX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pCi17Ci0JZHJtX3ZpYV9tbV90IGZiOwotCVBNZW1CbG9jayBibG9jazsKLQlpbnQgcmV0dmFsID0gMDsKLQotCWlmICghRkJIZWFwKQotCQlyZXR1cm4gLTE7Ci0KLQlmYi5zaXplID0gbWVtLT5zaXplOwotCWZiLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7Ci0KLQlibG9jayA9IHZpYV9tbUFsbG9jTWVtKEZCSGVhcCwgZmIuc2l6ZSwgNSwgMCk7Ci0JaWYgKGJsb2NrKSB7Ci0JCWZiLm9mZnNldCA9IGJsb2NrLT5vZnM7Ci0JCWZiLmZyZWUgPSAodW5zaWduZWQgbG9uZylibG9jazsKLQkJaWYgKCFhZGRfYWxsb2Nfc2V0KGZiLmNvbnRleHQsIFZJQV9NRU1fVklERU8sIGZiLmZyZWUpKSB7Ci0JCQlEUk1fREVCVUcoImFkZGluZyB0byBhbGxvY2F0aW9uIHNldCBmYWlsc1xuIik7Ci0JCQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGZiLmZyZWUpOwotCQkJcmV0dmFsID0gLTE7Ci0JCX0KKwl0bXBTaXplID0gKG1lbS5zaXplICsgVklBX01NX0FMSUdOX01BU0spID4+IFZJQV9NTV9BTElHTl9TSElGVDsKKwlpdGVtID0gZHJtX3NtYW5fYWxsb2MoJmRldl9wcml2LT5zbWFuLCBtZW0udHlwZSwgdG1wU2l6ZSwgMCwKKwkJCSAgICAgICh1bnNpZ25lZCBsb25nKXByaXYpOworCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOworCWlmIChpdGVtKSB7CisJCW1lbS5vZmZzZXQgPSAoKG1lbS50eXBlID09IFZJQV9NRU1fVklERU8pID8KKwkJCSAgICAgIGRldl9wcml2LT52cmFtX29mZnNldCA6IGRldl9wcml2LT5hZ3Bfb2Zmc2V0KSArCisJCSAgICAoaXRlbS0+bW0tPgorCQkgICAgIG9mZnNldChpdGVtLT5tbSwgaXRlbS0+bW1faW5mbykgPDwgVklBX01NX0FMSUdOX1NISUZUKTsKKwkJbWVtLmluZGV4ID0gaXRlbS0+dXNlcl9oYXNoLmtleTsKIAl9IGVsc2UgewotCQlmYi5vZmZzZXQgPSAwOwotCQlmYi5zaXplID0gMDsKLQkJZmIuZnJlZSA9IDA7Ci0JCXJldHZhbCA9IC0xOworCQltZW0ub2Zmc2V0ID0gMDsKKwkJbWVtLnNpemUgPSAwOworCQltZW0uaW5kZXggPSAwOworCQlEUk1fREVCVUcoIlZpZGVvIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHZhbCA9IERSTV9FUlIoRU5PTUVNKTsKIAl9CisJRFJNX0NPUFlfVE9fVVNFUl9JT0NUTCgoZHJtX3ZpYV9tZW1fdCBfX3VzZXIgKikgZGF0YSwgbWVtLCBzaXplb2YobWVtKSk7CiAKLQltZW0tPm9mZnNldCA9IGZiLm9mZnNldDsKLQltZW0tPmluZGV4ID0gZmIuZnJlZTsKLQotCURSTV9ERUJVRygiYWxsb2MgZmIsIHNpemUgPSAlZCwgb2Zmc2V0ID0gJWRcbiIsIGZiLnNpemUsCi0JCSAgKGludClmYi5vZmZzZXQpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCB2aWFfYWdwX2FsbG9jKGRybV92aWFfbWVtX3QgKiBtZW0pCi17Ci0JZHJtX3ZpYV9tbV90IGFncDsKLQlQTWVtQmxvY2sgYmxvY2s7Ci0JaW50IHJldHZhbCA9IDA7Ci0KLQlpZiAoIUFncEhlYXApCi0JCXJldHVybiAtMTsKLQotCWFncC5zaXplID0gbWVtLT5zaXplOwotCWFncC5jb250ZXh0ID0gbWVtLT5jb250ZXh0OwotCi0JYmxvY2sgPSB2aWFfbW1BbGxvY01lbShBZ3BIZWFwLCBhZ3Auc2l6ZSwgNSwgMCk7Ci0JaWYgKGJsb2NrKSB7Ci0JCWFncC5vZmZzZXQgPSBibG9jay0+b2ZzOwotCQlhZ3AuZnJlZSA9ICh1bnNpZ25lZCBsb25nKWJsb2NrOwotCQlpZiAoIWFkZF9hbGxvY19zZXQoYWdwLmNvbnRleHQsIFZJQV9NRU1fQUdQLCBhZ3AuZnJlZSkpIHsKLQkJCURSTV9ERUJVRygiYWRkaW5nIHRvIGFsbG9jYXRpb24gc2V0IGZhaWxzXG4iKTsKLQkJCXZpYV9tbUZyZWVNZW0oKFBNZW1CbG9jaykgYWdwLmZyZWUpOwotCQkJcmV0dmFsID0gLTE7Ci0JCX0KLQl9IGVsc2UgewotCQlhZ3Aub2Zmc2V0ID0gMDsKLQkJYWdwLnNpemUgPSAwOwotCQlhZ3AuZnJlZSA9IDA7Ci0JfQotCi0JbWVtLT5vZmZzZXQgPSBhZ3Aub2Zmc2V0OwotCW1lbS0+aW5kZXggPSBhZ3AuZnJlZTsKLQotCURSTV9ERUJVRygiYWxsb2MgYWdwLCBzaXplID0gJWQsIG9mZnNldCA9ICVkXG4iLCBhZ3Auc2l6ZSwKLQkJICAodW5zaWduZWQgaW50KWFncC5vZmZzZXQpOwogCXJldHVybiByZXR2YWw7CiB9CiAKIGludCB2aWFfbWVtX2ZyZWUoRFJNX0lPQ1RMX0FSR1MpCiB7CisJRFJNX0RFVklDRTsKKwlkcm1fdmlhX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCWRybV92aWFfbWVtX3QgbWVtOworCWludCByZXQ7CiAKIAlEUk1fQ09QWV9GUk9NX1VTRVJfSU9DVEwobWVtLCAoZHJtX3ZpYV9tZW1fdCBfX3VzZXIgKikgZGF0YSwKIAkJCQkgc2l6ZW9mKG1lbSkpOwogCi0Jc3dpdGNoIChtZW0udHlwZSkgeworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXQgPSBkcm1fc21hbl9mcmVlX2tleSgmZGV2X3ByaXYtPnNtYW4sIG1lbS5pbmRleCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7CisJRFJNX0RFQlVHKCJmcmVlID0gMHglbHhcbiIsIG1lbS5pbmRleCk7CiAKLQljYXNlIFZJQV9NRU1fVklERU86Ci0JCWlmICh2aWFfZmJfZnJlZSgmbWVtKSA9PSAwKQotCQkJcmV0dXJuIDA7Ci0JCWJyZWFrOwotCWNhc2UgVklBX01FTV9BR1A6Ci0JCWlmICh2aWFfYWdwX2ZyZWUoJm1lbSkgPT0gMCkKLQkJCXJldHVybiAwOwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IHZpYV9mYl9mcmVlKGRybV92aWFfbWVtX3QgKiBtZW0pCisKK3ZvaWQgdmlhX3JlY2xhaW1fYnVmZmVyc19sb2NrZWQoZHJtX2RldmljZV90ICogZGV2LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlkcm1fdmlhX21tX3QgZmI7Ci0JaW50IHJldHZhbCA9IDA7CisJZHJtX3ZpYV9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlkcm1fZmlsZV90ICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCi0JaWYgKCFGQkhlYXApIHsKLQkJcmV0dXJuIC0xOworCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlpZiAoZHJtX3NtYW5fb3duZXJfY2xlYW4oJmRldl9wcml2LT5zbWFuLCAodW5zaWduZWQgbG9uZylwcml2KSkgeworCQltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwkJcmV0dXJuOwogCX0KIAotCWZiLmZyZWUgPSBtZW0tPmluZGV4OwotCWZiLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7Ci0KLQlpZiAoIWZiLmZyZWUpIHsKLQkJcmV0dXJuIC0xOwotCisJaWYgKGRldi0+ZHJpdmVyLT5kbWFfcXVpZXNjZW50KSB7CisJCWRldi0+ZHJpdmVyLT5kbWFfcXVpZXNjZW50KGRldik7CiAJfQogCi0JdmlhX21tRnJlZU1lbSgoUE1lbUJsb2NrKSBmYi5mcmVlKTsKLQotCWlmICghZGVsX2FsbG9jX3NldChmYi5jb250ZXh0LCBWSUFfTUVNX1ZJREVPLCBmYi5mcmVlKSkgewotCQlyZXR2YWwgPSAtMTsKLQl9Ci0KLQlEUk1fREVCVUcoImZyZWUgZmIsIGZyZWUgPSAlbGRcbiIsIGZiLmZyZWUpOwotCi0JcmV0dXJuIHJldHZhbDsKLX0KLQotc3RhdGljIGludCB2aWFfYWdwX2ZyZWUoZHJtX3ZpYV9tZW1fdCAqIG1lbSkKLXsKLQlkcm1fdmlhX21tX3QgYWdwOwotCi0JaW50IHJldHZhbCA9IDA7Ci0KLQlhZ3AuZnJlZSA9IG1lbS0+aW5kZXg7Ci0JYWdwLmNvbnRleHQgPSBtZW0tPmNvbnRleHQ7Ci0KLQlpZiAoIWFncC5mcmVlKQotCQlyZXR1cm4gLTE7Ci0KLQl2aWFfbW1GcmVlTWVtKChQTWVtQmxvY2spIGFncC5mcmVlKTsKLQotCWlmICghZGVsX2FsbG9jX3NldChhZ3AuY29udGV4dCwgVklBX01FTV9BR1AsIGFncC5mcmVlKSkgewotCQlyZXR2YWwgPSAtMTsKLQl9Ci0KLQlEUk1fREVCVUcoImZyZWUgYWdwLCBmcmVlID0gJWxkXG4iLCBhZ3AuZnJlZSk7Ci0KLQlyZXR1cm4gcmV0dmFsOworCWRybV9zbWFuX293bmVyX2NsZWFudXAoJmRldl9wcml2LT5zbWFuLCAodW5zaWduZWQgbG9uZylwcml2KTsKKwltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKKwlyZXR1cm47CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZHMxMjg2LmMgYi9kcml2ZXJzL2NoYXIvZHMxMjg2LmMKaW5kZXggMjFjODIyOS4uNmQ1OGIwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2RzMTI4Ni5jCisrKyBiL2RyaXZlcnMvY2hhci9kczEyODYuYwpAQCAtMTA0LDcgKzEwNCw3IEBACiAJc3dpdGNoIChjbWQpIHsKIAljYXNlIFJUQ19BSUVfT0ZGOgkvKiBNYXNrIGFsYXJtIGludC4gZW5hYi4gYml0CSovCiAJewotCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKQpAQCAtMTIwLDcgKzEyMCw3IEBACiAJfQogCWNhc2UgUlRDX0FJRV9PTjoJLyogQWxsb3cgYWxhcm0gaW50ZXJydXB0cy4JKi8KIAl7Ci0JCXVuc2lnbmVkIGludCBmbGFnczsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkJdW5zaWduZWQgY2hhciB2YWw7CiAKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfVElNRSkpCkBAIC0xMzYsNyArMTM2LDcgQEAKIAl9CiAJY2FzZSBSVENfV0lFX09GRjoJLyogTWFzayB3YXRjaGRvZyBpbnQuIGVuYWIuIGJpdAkqLwogCXsKLQkJdW5zaWduZWQgaW50IGZsYWdzOworCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCQl1bnNpZ25lZCBjaGFyIHZhbDsKIAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19USU1FKSkKQEAgLTE1Miw3ICsxNTIsNyBAQAogCX0KIAljYXNlIFJUQ19XSUVfT046CS8qIEFsbG93IHdhdGNoZG9nIGludGVycnVwdHMuCSovCiAJewotCQl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJCXVuc2lnbmVkIGNoYXIgdmFsOwogCiAJCWlmICghY2FwYWJsZShDQVBfU1lTX1RJTUUpKQpAQCAtNDM0LDcgKzQzNCw3IEBACiBzdGF0aWMgdm9pZCBkczEyODZfZ2V0X3RpbWUoc3RydWN0IHJ0Y190aW1lICpydGNfdG0pCiB7CiAJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgaW50IGZsYWdzOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgbG9uZyB1aXBfd2F0Y2hkb2cgPSBqaWZmaWVzOwogCiAJLyoKQEAgLTQ5NCw3ICs0OTQsOCBAQAogewogCXVuc2lnbmVkIGNoYXIgbW9uLCBkYXksIGhycywgbWluLCBzZWMsIGxlYXBfeXI7CiAJdW5zaWduZWQgY2hhciBzYXZlX2NvbnRyb2w7Ci0JdW5zaWduZWQgaW50IHlycywgZmxhZ3M7CisJdW5zaWduZWQgaW50IHlyczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAKIAl5cnMgPSBydGNfdG0tPnRtX3llYXIgKyAxOTAwOwpAQCAtNTUyLDcgKzU1Myw3IEBACiBzdGF0aWMgdm9pZCBkczEyODZfZ2V0X2FsbV90aW1lKHN0cnVjdCBydGNfdGltZSAqYWxtX3RtKQogewogCXVuc2lnbmVkIGNoYXIgY21kOwotCXVuc2lnbmVkIGludCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyoKIAkgKiBPbmx5IHRoZSB2YWx1ZXMgdGhhdCB3ZSByZWFkIGZyb20gdGhlIFJUQyBhcmUgc2V0LiBUaGF0CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvZ2VuZXJpY19zZXJpYWwuYyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCmluZGV4IDVlNTljMGIuLjQ3MTFkOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvY2hhci9nZW5lcmljX3NlcmlhbC5jCkBAIC03NDYsMTEgKzc0Niw5IEBACiAJCWdzX2RwcmludGsgKEdTX0RFQlVHX1RFUk1JT1MsICJ0ZXJtaW9zIHN0cnVjdHVyZSAoJXApOlxuIiwgdGlvc3ApOwogCX0KIAotI2lmIDAKIAkvKiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiB0aGF0IGlzIG9ubHkgYWxsb3dlZCBmb3IgZHVtYiBjYXJkcyAqLwogCS8qIFNtYXJ0IGNhcmRzIHJlcXVpcmUga25vd2xlZGdlIG9mIGlmbGFncyBhbmQgb2ZsYWdzIHRvbzogdGhhdCAKIAkgICBtaWdodCBjaGFuZ2UgaGFyZHdhcmUgY29va2luZyBtb2RlLi4uLiAqLwotI2VuZGlmCiAJaWYgKG9sZF90ZXJtaW9zKSB7CiAJCWlmKCAgICh0aW9zcC0+Y19pZmxhZyA9PSBvbGRfdGVybWlvcy0+Y19pZmxhZykKIAkJICAgJiYgKHRpb3NwLT5jX29mbGFnID09IG9sZF90ZXJtaW9zLT5jX29mbGFnKQpAQCAtNzc0LDE0ICs3NzIsNyBAQAogCQlpZighbWVtY21wKHRpb3NwLT5jX2NjLCBvbGRfdGVybWlvcy0+Y19jYywgTkNDKSkgcHJpbnRrKCJjX2NjIGNoYW5nZWRcbiIpOwogCX0KIAotCWJhdWRyYXRlID0gdGlvc3AtPmNfY2ZsYWcgJiBDQkFVRDsKLQlpZiAoYmF1ZHJhdGUgJiBDQkFVREVYKSB7Ci0JCWJhdWRyYXRlICY9IH5DQkFVREVYOwotCQlpZiAoKGJhdWRyYXRlIDwgMSkgfHwgKGJhdWRyYXRlID4gNCkpCi0JCQl0aW9zcC0+Y19jZmxhZyAmPSB+Q0JBVURFWDsKLQkJZWxzZQotCQkJYmF1ZHJhdGUgKz0gMTU7Ci0JfQorCWJhdWRyYXRlID0gdHR5X2dldF9iYXVkX3JhdGUodHR5KTsKIAogCWJhdWRyYXRlID0gZ3NfYmF1ZHJhdGVzW2JhdWRyYXRlXTsKIAlpZiAoKHRpb3NwLT5jX2NmbGFnICYgQ0JBVUQpID09IEIzODQwMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYyBiL2RyaXZlcnMvY2hhci9od19yYW5kb20vaW50ZWwtcm5nLmMKaW5kZXggY2NkN2U3MS4uOGVmYmM5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2h3X3JhbmRvbS9pbnRlbC1ybmcuYworKysgYi9kcml2ZXJzL2NoYXIvaHdfcmFuZG9tL2ludGVsLXJuZy5jCkBAIC01MCw2ICs1MCw0MyBAQAogI2RlZmluZSBJTlRFTF9STkdfQUREUl9MRU4JCQkzCiAKIC8qCisgKiBMUEMgYnJpZGdlIFBDSSBjb25maWcgc3BhY2UgcmVnaXN0ZXJzCisgKi8KKyNkZWZpbmUgRldIX0RFQ19FTjFfUkVHX09MRAkJCTB4ZTMKKyNkZWZpbmUgRldIX0RFQ19FTjFfUkVHX05FVwkJCTB4ZDkgLyogaGlnaCBieXRlIG9mIDE2LWJpdCByZWdpc3RlciAqLworI2RlZmluZSBGV0hfRjhfRU5fTUFTSwkJCQkweDgwCisKKyNkZWZpbmUgQklPU19DTlRMX1JFR19PTEQJCQkweDRlCisjZGVmaW5lIEJJT1NfQ05UTF9SRUdfTkVXCQkJMHhkYworI2RlZmluZSBCSU9TX0NOVExfV1JJVEVfRU5BQkxFX01BU0sJCTB4MDEKKyNkZWZpbmUgQklPU19DTlRMX0xPQ0tfRU5BQkxFX01BU0sJCTB4MDIKKworLyoKKyAqIE1hZ2ljIGFkZHJlc3MgYXQgd2hpY2ggSW50ZWwgRmlybXdhcmUgSHVicyBnZXQgYWNjZXNzZWQKKyAqLworI2RlZmluZSBJTlRFTF9GV0hfQUREUgkJCQkweGZmZmYwMDAwCisjZGVmaW5lIElOVEVMX0ZXSF9BRERSX0xFTgkJCTIKKworLyoKKyAqIEludGVsIEZpcm13YXJlIEh1YiBjb21tYW5kIGNvZGVzICh3cml0ZSB0byBhbnkgYWRkcmVzcyBpbnNpZGUgdGhlIGRldmljZSkKKyAqLworI2RlZmluZSBJTlRFTF9GV0hfUkVTRVRfQ01ECQkJMHhmZiAvKiBha2EgUkVBRF9BUlJBWSAqLworI2RlZmluZSBJTlRFTF9GV0hfUkVBRF9JRF9DTUQJCQkweDkwCisKKy8qCisgKiBJbnRlbCBGaXJtd2FyZSBIdWIgUmVhZCBJRCBjb21tYW5kIHJlc3VsdCBhZGRyZXNzZXMKKyAqLworI2RlZmluZSBJTlRFTF9GV0hfTUFOVUZBQ1RVUkVSX0NPREVfQUREUkVTUwkweDAwMDAwMAorI2RlZmluZSBJTlRFTF9GV0hfREVWSUNFX0NPREVfQUREUkVTUwkJMHgwMDAwMDEKKworLyoKKyAqIEludGVsIEZpcm13YXJlIEh1YiBSZWFkIElEIGNvbW1hbmQgcmVzdWx0IHZhbHVlcworICovCisjZGVmaW5lIElOVEVMX0ZXSF9NQU5VRkFDVFVSRVJfQ09ERQkJMHg4OQorI2RlZmluZSBJTlRFTF9GV0hfREVWSUNFX0NPREVfOE0JCTB4YWMKKyNkZWZpbmUgSU5URUxfRldIX0RFVklDRV9DT0RFXzRNCQkweGFkCisKKy8qCiAgKiBEYXRhIGZvciBQQ0kgZHJpdmVyIGludGVyZmFjZQogICoKICAqIFRoaXMgZGF0YSBvbmx5IGV4aXN0cyBmb3IgZXhwb3J0aW5nIHRoZSBzdXBwb3J0ZWQKQEAgLTU4LDEyICs5NSw1MCBAQAogICogd2FudCB0byByZWdpc3RlciBhbm90aGVyIGRyaXZlciBvbiB0aGUgc2FtZSBQQ0kgaWQuCiAgKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lfdGJsW10gPSB7Ci0JeyAweDgwODYsIDB4MjQxOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLQl7IDB4ODA4NiwgMHgyNDI4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAotCXsgMHg4MDg2LCAweDI0MzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCi0JeyAweDgwODYsIDB4MjQ0OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwKLQl7IDB4ODA4NiwgMHgyNDRlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LAotCXsgMHg4MDg2LCAweDI0NWUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sCisvKiBBQQorCXsgMHg4MDg2LCAweDI0MTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sICovCisJeyAweDgwODYsIDB4MjQxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgLyogQUEgKi8KKy8qIEFCCisJeyAweDgwODYsIDB4MjQyOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgKi8KKwl7IDB4ODA4NiwgMHgyNDIwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBBQiAqLworLyogPz8KKwl7IDB4ODA4NiwgMHgyNDMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAqLworLyogQkFNLCBDQU0sIERCTSwgRkJNLCBHeE0KKwl7IDB4ODA4NiwgMHgyNDQ4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAqLworCXsgMHg4MDg2LCAweDI0NGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIEJBTSAqLworCXsgMHg4MDg2LCAweDI0OGMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIENBTSAqLworCXsgMHg4MDg2LCAweDI0Y2MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIERCTSAqLworCXsgMHg4MDg2LCAweDI2NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIEZCTSAqLworCXsgMHg4MDg2LCAweDI3YjksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIEd4TSAqLworCXsgMHg4MDg2LCAweDI3YmQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIEd4TSBESCAqLworLyogQkEsIENBLCBEQiwgRXgsIDYzMDAsIEZ4LCA2MzF4LzYzMngsIEd4CisJeyAweDgwODYsIDB4MjQ0ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgKi8KKwl7IDB4ODA4NiwgMHgyNDQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBCQSAqLworCXsgMHg4MDg2LCAweDI0ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIENBICovCisJeyAweDgwODYsIDB4MjRjMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgLyogREIgKi8KKwl7IDB4ODA4NiwgMHgyNGQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBFeCAqLworCXsgMHg4MDg2LCAweDI1YTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMDAgKi8KKwl7IDB4ODA4NiwgMHgyNjQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBGeCAqLworCXsgMHg4MDg2LCAweDI2NzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2NzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2EsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2IsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2MsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2QsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI2N2YsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIDYzMXgvNjMyeCAqLworCXsgMHg4MDg2LCAweDI3YjgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIDAsIH0sIC8qIEd4ICovCisvKiBFCisJeyAweDgwODYsIDB4MjQ1ZSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgMCwgfSwgKi8KKwl7IDB4ODA4NiwgMHgyNDUwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwLCB9LCAvKiBFICAqLwogCXsgMCwgfSwJLyogdGVybWluYXRlIGxpc3QgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgcGNpX3RibCk7CkBAIC0xMzgsMjIgKzIxMywxMTUgQEAKIH07CiAKIAorI2lmZGVmIENPTkZJR19TTVAKK3N0YXRpYyBjaGFyIF9faW5pdGRhdGEgd2FpdGZsYWc7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBpbnRlbF9pbml0X3dhaXQodm9pZCAqdW51c2VkKQoreworCXdoaWxlICh3YWl0ZmxhZykKKwkJY3B1X3JlbGF4KCk7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBfX2luaXQgbW9kX2luaXQodm9pZCkKIHsKIAlpbnQgZXJyID0gLUVOT0RFVjsKKwl1bnNpZ25lZCBpOworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCXZvaWQgX19pb21lbSAqbWVtOwotCXU4IGh3X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXU4IGJpb3NfY250bF9vZmYsIGZ3aF9kZWNfZW4xX29mZjsKKwl1OCBiaW9zX2NudGxfdmFsID0gMHhmZiwgZndoX2RlY19lbjFfdmFsID0gMHhmZjsKKwl1OCBod19zdGF0dXMsIG1mYywgZHZjOwogCi0JaWYgKCFwY2lfZGV2X3ByZXNlbnQocGNpX3RibCkpCisJZm9yIChpID0gMDsgIWRldiAmJiBwY2lfdGJsW2ldLnZlbmRvcjsgKytpKQorCQlkZXYgPSBwY2lfZ2V0X2RldmljZShwY2lfdGJsW2ldLnZlbmRvciwgcGNpX3RibFtpXS5kZXZpY2UsIE5VTEwpOworCisJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OyAvKiBEZXZpY2Ugbm90IGZvdW5kLiAqLwogCisJLyogQ2hlY2sgZm9yIEludGVsIDgyODAyICovCisJaWYgKGRldi0+ZGV2aWNlIDwgMHgyNjQwKSB7CisJCWZ3aF9kZWNfZW4xX29mZiA9IEZXSF9ERUNfRU4xX1JFR19PTEQ7CisJCWJpb3NfY250bF9vZmYgPSBCSU9TX0NOVExfUkVHX09MRDsKKwl9IGVsc2UgeworCQlmd2hfZGVjX2VuMV9vZmYgPSBGV0hfREVDX0VOMV9SRUdfTkVXOworCQliaW9zX2NudGxfb2ZmID0gQklPU19DTlRMX1JFR19ORVc7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBmd2hfZGVjX2VuMV9vZmYsICZmd2hfZGVjX2VuMV92YWwpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgYmlvc19jbnRsX29mZiwgJmJpb3NfY250bF92YWwpOworCisJbWVtID0gaW9yZW1hcF9ub2NhY2hlKElOVEVMX0ZXSF9BRERSLCBJTlRFTF9GV0hfQUREUl9MRU4pOworCWlmIChtZW0gPT0gTlVMTCkgeworCQlwY2lfZGV2X3B1dChkZXYpOworCQllcnIgPSAtRUJVU1k7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogU2luY2UgdGhlIEJJT1MgY29kZS9kYXRhIGlzIGdvaW5nIHRvIGRpc2FwcGVhciBmcm9tIGl0cyBub3JtYWwKKwkgKiBsb2NhdGlvbiB3aXRoIHRoZSBSZWFkIElEIGNvbW1hbmQsIGFsbCBhY3Rpdml0eSBvbiB0aGUgc3lzdGVtCisJICogbXVzdCBiZSBzdG9wcGVkIHVudGlsIHRoZSBzdGF0ZSBpcyBiYWNrIHRvIG5vcm1hbC4KKwkgKi8KKyNpZmRlZiBDT05GSUdfU01QCisJc2V0X21iKHdhaXRmbGFnLCAxKTsKKwlpZiAoc21wX2NhbGxfZnVuY3Rpb24oaW50ZWxfaW5pdF93YWl0LCBOVUxMLCAxLCAwKSAhPSAwKSB7CisJCXNldF9tYih3YWl0ZmxhZywgMCk7CisJCXBjaV9kZXZfcHV0KGRldik7CisJCXByaW50ayhLRVJOX0VSUiBQRlggImNhbm5vdCBydW4gb24gYWxsIHByb2Nlc3NvcnNcbiIpOworCQllcnIgPSAtRUFHQUlOOworCQlnb3RvIGVycl91bm1hcDsKKwl9CisjZW5kaWYKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisKKwlpZiAoIShmd2hfZGVjX2VuMV92YWwgJiBGV0hfRjhfRU5fTUFTSykpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsCisJCSAgICAgICAgICAgICAgICAgICAgICBmd2hfZGVjX2VuMV9vZmYsCisJCSAgICAgICAgICAgICAgICAgICAgICBmd2hfZGVjX2VuMV92YWwgfCBGV0hfRjhfRU5fTUFTSyk7CisJaWYgKCEoYmlvc19jbnRsX3ZhbCAmCisJICAgICAgKEJJT1NfQ05UTF9MT0NLX0VOQUJMRV9NQVNLfEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSykpKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LAorCQkgICAgICAgICAgICAgICAgICAgICAgYmlvc19jbnRsX29mZiwKKwkJICAgICAgICAgICAgICAgICAgICAgIGJpb3NfY250bF92YWwgfCBCSU9TX0NOVExfV1JJVEVfRU5BQkxFX01BU0spOworCisJd3JpdGViKElOVEVMX0ZXSF9SRVNFVF9DTUQsIG1lbSk7CisJd3JpdGViKElOVEVMX0ZXSF9SRUFEX0lEX0NNRCwgbWVtKTsKKwltZmMgPSByZWFkYihtZW0gKyBJTlRFTF9GV0hfTUFOVUZBQ1RVUkVSX0NPREVfQUREUkVTUyk7CisJZHZjID0gcmVhZGIobWVtICsgSU5URUxfRldIX0RFVklDRV9DT0RFX0FERFJFU1MpOworCXdyaXRlYihJTlRFTF9GV0hfUkVTRVRfQ01ELCBtZW0pOworCisJaWYgKCEoYmlvc19jbnRsX3ZhbCAmCisJICAgICAgKEJJT1NfQ05UTF9MT0NLX0VOQUJMRV9NQVNLfEJJT1NfQ05UTF9XUklURV9FTkFCTEVfTUFTSykpKQorCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUoZGV2LCBiaW9zX2NudGxfb2ZmLCBiaW9zX2NudGxfdmFsKTsKKwlpZiAoIShmd2hfZGVjX2VuMV92YWwgJiBGV0hfRjhfRU5fTUFTSykpCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIGZ3aF9kZWNfZW4xX29mZiwgZndoX2RlY19lbjFfdmFsKTsKKworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNpZmRlZiBDT05GSUdfU01QCisJLyogVGVsbCBvdGhlciBDUFVzIHRvIHJlc3VtZS4gKi8KKwlzZXRfbWIod2FpdGZsYWcsIDApOworI2VuZGlmCisKKwlpb3VubWFwKG1lbSk7CisJcGNpX2Rldl9wdXQoZGV2KTsKKworCWlmIChtZmMgIT0gSU5URUxfRldIX01BTlVGQUNUVVJFUl9DT0RFIHx8CisJICAgIChkdmMgIT0gSU5URUxfRldIX0RFVklDRV9DT0RFXzhNICYmCisJICAgICBkdmMgIT0gSU5URUxfRldIX0RFVklDRV9DT0RFXzRNKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJGV0ggbm90IGRldGVjdGVkXG4iKTsKKwkJZXJyID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCiAJZXJyID0gLUVOT01FTTsKIAltZW0gPSBpb3JlbWFwKElOVEVMX1JOR19BRERSLCBJTlRFTF9STkdfQUREUl9MRU4pOwogCWlmICghbWVtKQogCQlnb3RvIG91dDsKIAlpbnRlbF9ybmcucHJpdiA9ICh1bnNpZ25lZCBsb25nKW1lbTsKIAotCS8qIENoZWNrIGZvciBJbnRlbCA4MjgwMiAqLworCS8qIENoZWNrIGZvciBSYW5kb20gTnVtYmVyIEdlbmVyYXRvciAqLwogCWVyciA9IC1FTk9ERVY7CiAJaHdfc3RhdHVzID0gaHdzdGF0dXNfZ2V0KG1lbSk7CiAJaWYgKChod19zdGF0dXMgJiBJTlRFTF9STkdfUFJFU0VOVCkgPT0gMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcDIvaXAybWFpbi5jIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKaW5kZXggNzkwN2FlOC4uMzMxZjQ0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwMi9pcDJtYWluLmMKQEAgLTQzNiw2ICs0MzYsNyBAQAogI2lmZGVmIENPTkZJR19QQ0kKIAkJaWYgKGlwMmNvbmZpZy50eXBlW2ldID09IFBDSSAmJiBpcDJjb25maWcucGNpX2RldltpXSkgewogCQkJcGNpX2Rpc2FibGVfZGV2aWNlKGlwMmNvbmZpZy5wY2lfZGV2W2ldKTsKKwkJCXBjaV9kZXZfcHV0KGlwMmNvbmZpZy5wY2lfZGV2W2ldKTsKIAkJCWlwMmNvbmZpZy5wY2lfZGV2W2ldID0gTlVMTDsKIAkJfQogI2VuZGlmCkBAIC01MDUsNiArNTA2LDcgQEAKIAlzdGF0aWMgaW50IGxvYWRlZDsKIAlpMmVCb3JkU3RyUHRyIHBCID0gTlVMTDsKIAlpbnQgcmMgPSAtMTsKKwlzdGF0aWMgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXZfaSA9IE5VTEw7CiAKIAlpcDJ0cmFjZSAoSVRSQ19OT19QT1JULCBJVFJDX0lOSVQsIElUUkNfRU5URVIsIDAgKTsKIApAQCAtNTg4LDggKzU5MCw3IEBACiAJCWNhc2UgUENJOgogI2lmZGVmIENPTkZJR19QQ0kKIAkJCXsKLQkJCQlzdHJ1Y3QgcGNpX2RldiAqcGNpX2Rldl9pID0gTlVMTDsKLQkJCQlwY2lfZGV2X2kgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DT01QVVRPTkUsCisJCQkJcGNpX2Rldl9pID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9DT01QVVRPTkUsCiAJCQkJCQkJICBQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9JUDJFWCwgcGNpX2Rldl9pKTsKIAkJCQlpZiAocGNpX2Rldl9pICE9IE5VTEwpIHsKIAkJCQkJdW5zaWduZWQgaW50IGFkZHI7CkBAIC02MDAsNyArNjAxLDcgQEAKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCWlwMmNvbmZpZy50eXBlW2ldID0gUENJOwotCQkJCQlpcDJjb25maWcucGNpX2RldltpXSA9IHBjaV9kZXZfaTsKKwkJCQkJaXAyY29uZmlnLnBjaV9kZXZbaV0gPSBwY2lfZGV2X2dldChwY2lfZGV2X2kpOwogCQkJCQlzdGF0dXMgPQogCQkJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGNpX2Rldl9pLCBQQ0lfQkFTRV9BRERSRVNTXzEsICZhZGRyKTsKIAkJCQkJaWYgKCBhZGRyICYgMSApIHsKQEAgLTY0MSw2ICs2NDIsOSBAQAogCQkJYnJlYWs7CiAJCX0JLyogc3dpdGNoICovCiAJfQkvKiBmb3IgKi8KKwlpZiAocGNpX2Rldl9pKQorCQlwY2lfZGV2X3B1dChwY2lfZGV2X2kpOworCiAJZm9yICggaSA9IDA7IGkgPCBJUDJfTUFYX0JPQVJEUzsgKytpICkgewogCQlpZiAoIGlwMmNvbmZpZy5hZGRyW2ldICkgewogCQkJcEIgPSBrbWFsbG9jKCBzaXplb2YoaTJlQm9yZFN0ciksIEdGUF9LRVJORUwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9kZXZpbnRmLmMgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwppbmRleCA2OGQ3YzYxLi44MWZjZjBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYworKysgYi9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX2RldmludGYuYwpAQCAtMzc3LDcgKzM3Nyw4IEBACiAJCQlicmVhazsKIAkJfQogCi0JCXJ2ID0gaXBtaV9yZWdpc3Rlcl9mb3JfY21kKHByaXYtPnVzZXIsIHZhbC5uZXRmbiwgdmFsLmNtZCk7CisJCXJ2ID0gaXBtaV9yZWdpc3Rlcl9mb3JfY21kKHByaXYtPnVzZXIsIHZhbC5uZXRmbiwgdmFsLmNtZCwKKwkJCQkJICAgSVBNSV9DSEFOX0FMTCk7CiAJCWJyZWFrOwogCX0KIApAQCAtMzkwLDcgKzM5MSwzNiBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlydiA9IGlwbWlfdW5yZWdpc3Rlcl9mb3JfY21kKHByaXYtPnVzZXIsIHZhbC5uZXRmbiwgdmFsLmNtZCk7CisJCXJ2ID0gaXBtaV91bnJlZ2lzdGVyX2Zvcl9jbWQocHJpdi0+dXNlciwgdmFsLm5ldGZuLCB2YWwuY21kLAorCQkJCQkgICAgIElQTUlfQ0hBTl9BTEwpOworCQlicmVhazsKKwl9CisKKwljYXNlIElQTUlDVExfUkVHSVNURVJfRk9SX0NNRF9DSEFOUzoKKwl7CisJCXN0cnVjdCBpcG1pX2NtZHNwZWNfY2hhbnMgdmFsOworCisJCWlmIChjb3B5X2Zyb21fdXNlcigmdmFsLCBhcmcsIHNpemVvZih2YWwpKSkgeworCQkJcnYgPSAtRUZBVUxUOworCQkJYnJlYWs7CisJCX0KKworCQlydiA9IGlwbWlfcmVnaXN0ZXJfZm9yX2NtZChwcml2LT51c2VyLCB2YWwubmV0Zm4sIHZhbC5jbWQsCisJCQkJCSAgIHZhbC5jaGFucyk7CisJCWJyZWFrOworCX0KKworCWNhc2UgSVBNSUNUTF9VTlJFR0lTVEVSX0ZPUl9DTURfQ0hBTlM6CisJeworCQlzdHJ1Y3QgaXBtaV9jbWRzcGVjX2NoYW5zIHZhbDsKKworCQlpZiAoY29weV9mcm9tX3VzZXIoJnZhbCwgYXJnLCBzaXplb2YodmFsKSkpIHsKKwkJCXJ2ID0gLUVGQVVMVDsKKwkJCWJyZWFrOworCQl9CisKKwkJcnYgPSBpcG1pX3VucmVnaXN0ZXJfZm9yX2NtZChwcml2LT51c2VyLCB2YWwubmV0Zm4sIHZhbC5jbWQsCisJCQkJCSAgICAgdmFsLmNoYW5zKTsKIAkJYnJlYWs7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvaXBtaS9pcG1pX21zZ2hhbmRsZXIuYyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCmluZGV4IDg0M2QzNGMuLjI0NTVlOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCisrKyBiL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jCkBAIC05Niw2ICs5Niw3IEBACiAJaXBtaV91c2VyX3QgICB1c2VyOwogCXVuc2lnbmVkIGNoYXIgbmV0Zm47CiAJdW5zaWduZWQgY2hhciBjbWQ7CisJdW5zaWduZWQgaW50ICBjaGFuczsKIAogCS8qCiAJICogVGhpcyBpcyB1c2VkIHRvIGZvcm0gYSBsaW5rZWQgbGlzZWQgZHVyaW5nIG1hc3MgZGVsZXRpb24uCkBAIC05NTMsMjQgKzk1NCw0MSBAQAogCiBzdGF0aWMgc3RydWN0IGNtZF9yY3ZyICpmaW5kX2NtZF9yY3ZyKGlwbWlfc21pX3QgICAgaW50ZiwKIAkJCQkgICAgICB1bnNpZ25lZCBjaGFyIG5ldGZuLAotCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgY21kKQorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgY21kLAorCQkJCSAgICAgIHVuc2lnbmVkIGNoYXIgY2hhbikKIHsKIAlzdHJ1Y3QgY21kX3JjdnIgKnJjdnI7CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyY3ZyLCAmaW50Zi0+Y21kX3JjdnJzLCBsaW5rKSB7Ci0JCWlmICgocmN2ci0+bmV0Zm4gPT0gbmV0Zm4pICYmIChyY3ZyLT5jbWQgPT0gY21kKSkKKwkJaWYgKChyY3ZyLT5uZXRmbiA9PSBuZXRmbikgJiYgKHJjdnItPmNtZCA9PSBjbWQpCisJCQkJCSYmIChyY3ZyLT5jaGFucyAmICgxIDw8IGNoYW4pKSkKIAkJCXJldHVybiByY3ZyOwogCX0KIAlyZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludCBpc19jbWRfcmN2cl9leGNsdXNpdmUoaXBtaV9zbWlfdCAgICBpbnRmLAorCQkJCSB1bnNpZ25lZCBjaGFyIG5ldGZuLAorCQkJCSB1bnNpZ25lZCBjaGFyIGNtZCwKKwkJCQkgdW5zaWduZWQgaW50ICBjaGFucykKK3sKKwlzdHJ1Y3QgY21kX3JjdnIgKnJjdnI7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShyY3ZyLCAmaW50Zi0+Y21kX3JjdnJzLCBsaW5rKSB7CisJCWlmICgocmN2ci0+bmV0Zm4gPT0gbmV0Zm4pICYmIChyY3ZyLT5jbWQgPT0gY21kKQorCQkJCQkmJiAocmN2ci0+Y2hhbnMgJiBjaGFucykpCisJCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIDE7Cit9CisKIGludCBpcG1pX3JlZ2lzdGVyX2Zvcl9jbWQoaXBtaV91c2VyX3QgICB1c2VyLAogCQkJICB1bnNpZ25lZCBjaGFyIG5ldGZuLAotCQkJICB1bnNpZ25lZCBjaGFyIGNtZCkKKwkJCSAgdW5zaWduZWQgY2hhciBjbWQsCisJCQkgIHVuc2lnbmVkIGludCAgY2hhbnMpCiB7CiAJaXBtaV9zbWlfdCAgICAgIGludGYgPSB1c2VyLT5pbnRmOwogCXN0cnVjdCBjbWRfcmN2ciAqcmN2cjsKLQlzdHJ1Y3QgY21kX3JjdnIgKmVudHJ5OwogCWludCAgICAgICAgICAgICBydiA9IDA7CiAKIApAQCAtOTc5LDEyICs5OTcsMTIgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJcmN2ci0+Y21kID0gY21kOwogCXJjdnItPm5ldGZuID0gbmV0Zm47CisJcmN2ci0+Y2hhbnMgPSBjaGFuczsKIAlyY3ZyLT51c2VyID0gdXNlcjsKIAogCW11dGV4X2xvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7CiAJLyogTWFrZSBzdXJlIHRoZSBjb21tYW5kL25ldGZuIGlzIG5vdCBhbHJlYWR5IHJlZ2lzdGVyZWQuICovCi0JZW50cnkgPSBmaW5kX2NtZF9yY3ZyKGludGYsIG5ldGZuLCBjbWQpOwotCWlmIChlbnRyeSkgeworCWlmICghaXNfY21kX3JjdnJfZXhjbHVzaXZlKGludGYsIG5ldGZuLCBjbWQsIGNoYW5zKSkgewogCQlydiA9IC1FQlVTWTsKIAkJZ290byBvdXRfdW5sb2NrOwogCX0KQEAgLTEwMDEsMjQgKzEwMTksMzkgQEAKIAogaW50IGlwbWlfdW5yZWdpc3Rlcl9mb3JfY21kKGlwbWlfdXNlcl90ICAgdXNlciwKIAkJCSAgICB1bnNpZ25lZCBjaGFyIG5ldGZuLAotCQkJICAgIHVuc2lnbmVkIGNoYXIgY21kKQorCQkJICAgIHVuc2lnbmVkIGNoYXIgY21kLAorCQkJICAgIHVuc2lnbmVkIGludCAgY2hhbnMpCiB7CiAJaXBtaV9zbWlfdCAgICAgIGludGYgPSB1c2VyLT5pbnRmOwogCXN0cnVjdCBjbWRfcmN2ciAqcmN2cjsKKwlzdHJ1Y3QgY21kX3JjdnIgKnJjdnJzID0gTlVMTDsKKwlpbnQgaSwgcnYgPSAtRU5PRU5UOwogCiAJbXV0ZXhfbG9jaygmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKLQkvKiBNYWtlIHN1cmUgdGhlIGNvbW1hbmQvbmV0Zm4gaXMgbm90IGFscmVhZHkgcmVnaXN0ZXJlZC4gKi8KLQlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kKTsKLQlpZiAoKHJjdnIpICYmIChyY3ZyLT51c2VyID09IHVzZXIpKSB7Ci0JCWxpc3RfZGVsX3JjdSgmcmN2ci0+bGluayk7Ci0JCW11dGV4X3VubG9jaygmaW50Zi0+Y21kX3JjdnJzX211dGV4KTsKLQkJc3luY2hyb25pemVfcmN1KCk7Ci0JCWtmcmVlKHJjdnIpOwotCQlyZXR1cm4gMDsKLQl9IGVsc2UgewotCQltdXRleF91bmxvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7Ci0JCXJldHVybiAtRU5PRU5UOworCWZvciAoaSA9IDA7IGkgPCBJUE1JX05VTV9DSEFOTkVMUzsgaSsrKSB7CisJCWlmICgoKDEgPDwgaSkgJiBjaGFucykgPT0gMCkKKwkJCWNvbnRpbnVlOworCQlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kLCBpKTsKKwkJaWYgKHJjdnIgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQlpZiAocmN2ci0+dXNlciA9PSB1c2VyKSB7CisJCQlydiA9IDA7CisJCQlyY3ZyLT5jaGFucyAmPSB+Y2hhbnM7CisJCQlpZiAocmN2ci0+Y2hhbnMgPT0gMCkgeworCQkJCWxpc3RfZGVsX3JjdSgmcmN2ci0+bGluayk7CisJCQkJcmN2ci0+bmV4dCA9IHJjdnJzOworCQkJCXJjdnJzID0gcmN2cjsKKwkJCX0KKwkJfQogCX0KKwltdXRleF91bmxvY2soJmludGYtPmNtZF9yY3Zyc19tdXRleCk7CisJc3luY2hyb25pemVfcmN1KCk7CisJd2hpbGUgKHJjdnJzKSB7CisJCXJjdnIgPSByY3ZyczsKKwkJcmN2cnMgPSByY3ZyLT5uZXh0OworCQlrZnJlZShyY3ZyKTsKKwl9CisJcmV0dXJuIHJ2OwogfQogCiB2b2lkIGlwbWlfdXNlcl9zZXRfcnVuX3RvX2NvbXBsZXRpb24oaXBtaV91c2VyX3QgdXNlciwgaW50IHZhbCkKQEAgLTI1NDgsNiArMjU4MSw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgIHJ2ID0gMDsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgbmV0Zm47CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgIGNtZDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgY2hhbjsKIAlpcG1pX3VzZXJfdCAgICAgICAgICAgICAgdXNlciA9IE5VTEw7CiAJc3RydWN0IGlwbWlfaXBtYl9hZGRyICAgICppcG1iX2FkZHI7CiAJc3RydWN0IGlwbWlfcmVjdl9tc2cgICAgICpyZWN2X21zZzsKQEAgLTI1NjgsOSArMjYwMiwxMCBAQAogCiAJbmV0Zm4gPSBtc2ctPnJzcFs0XSA+PiAyOwogCWNtZCA9IG1zZy0+cnNwWzhdOworCWNoYW4gPSBtc2ctPnJzcFszXSAmIDB4ZjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kKTsKKwlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kLCBjaGFuKTsKIAlpZiAocmN2cikgewogCQl1c2VyID0gcmN2ci0+dXNlcjsKIAkJa3JlZl9nZXQoJnVzZXItPnJlZmNvdW50KTsKQEAgLTI3MjgsNiArMjc2Myw3IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgIHJ2ID0gMDsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgbmV0Zm47CiAJdW5zaWduZWQgY2hhciAgICAgICAgICAgIGNtZDsKKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgY2hhbjsKIAlpcG1pX3VzZXJfdCAgICAgICAgICAgICAgdXNlciA9IE5VTEw7CiAJc3RydWN0IGlwbWlfbGFuX2FkZHIgICAgICpsYW5fYWRkcjsKIAlzdHJ1Y3QgaXBtaV9yZWN2X21zZyAgICAgKnJlY3ZfbXNnOwpAQCAtMjc0OCw5ICsyNzg0LDEwIEBACiAKIAluZXRmbiA9IG1zZy0+cnNwWzZdID4+IDI7CiAJY21kID0gbXNnLT5yc3BbMTBdOworCWNoYW4gPSBtc2ctPnJzcFszXSAmIDB4ZjsKIAogCXJjdV9yZWFkX2xvY2soKTsKLQlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kKTsKKwlyY3ZyID0gZmluZF9jbWRfcmN2cihpbnRmLCBuZXRmbiwgY21kLCBjaGFuKTsKIAlpZiAocmN2cikgewogCQl1c2VyID0gcmN2ci0+dXNlcjsKIAkJa3JlZl9nZXQoJnVzZXItPnJlZmNvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggYWJjYTk4Yi4uOTA4NTIxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTkxNiw3ICs5MTYsMTEgQEAKIAluZXdfc21pLT5sYXN0X3RpbWVvdXRfamlmZmllcyA9IGppZmZpZXM7CiAJbW9kX3RpbWVyKCZuZXdfc21pLT5zaV90aW1lciwgamlmZmllcyArIFNJX1RJTUVPVVRfSklGRklFUyk7CiAKLSAJaWYgKG5ld19zbWktPnNpX3R5cGUgIT0gU0lfQlQpIHsKKwkvKgorCSAqIFRoZSBCVCBpbnRlcmZhY2UgaXMgZWZmaWNpZW50IGVub3VnaCB0byBub3QgbmVlZCBhIHRocmVhZCwKKwkgKiBhbmQgdGhlcmUgaXMgbm8gbmVlZCBmb3IgYSB0aHJlYWQgaWYgd2UgaGF2ZSBpbnRlcnJ1cHRzLgorCSAqLworIAlpZiAoKG5ld19zbWktPnNpX3R5cGUgIT0gU0lfQlQpICYmICghbmV3X3NtaS0+aXJxKSkgewogCQluZXdfc21pLT50aHJlYWQgPSBrdGhyZWFkX3J1bihpcG1pX3RocmVhZCwgbmV3X3NtaSwKIAkJCQkJICAgICAgImtpcG1pJWQiLCBuZXdfc21pLT5pbnRmX251bSk7CiAJCWlmIChJU19FUlIobmV3X3NtaS0+dGhyZWFkKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzaWNvbS5jIGIvZHJpdmVycy9jaGFyL2lzaWNvbS5jCmluZGV4IDkxM2JlMjMuLjJlMWRhNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc2ljb20uYworKysgYi9kcml2ZXJzL2NoYXIvaXNpY29tLmMKQEAgLTE3NTYsOSArMTc1NiwxMiBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZW5kOwogCisJcmV0dmFsID0gLUVJTzsKKwogCWZvciAoZnJhbWUgPSAoc3RydWN0IHN0ZnJhbWUgKilmdy0+ZGF0YTsKIAkJCWZyYW1lIDwgKHN0cnVjdCBzdGZyYW1lICopKGZ3LT5kYXRhICsgZnctPnNpemUpOwotCQkJZnJhbWUrKykgeworCQkJZnJhbWUgPSAoc3RydWN0IHN0ZnJhbWUgKikoKHU4ICopKGZyYW1lICsgMSkgKworCQkJCWZyYW1lLT5jb3VudCkpIHsKIAkJaWYgKFdhaXRUaWxsQ2FyZElzRnJlZShiYXNlKSkKIAkJCWdvdG8gZXJycmVsZnc7CiAKQEAgLTE3OTcsMjMgKzE4MDAsMTIgQEAKIAkJfQogIAl9CiAKLQlyZXR2YWwgPSAtRUlPOwotCi0JaWYgKFdhaXRUaWxsQ2FyZElzRnJlZShiYXNlKSkKLQkJZ290byBlcnJyZWxmdzsKLQotCW91dHcoMHhmMiwgYmFzZSk7Ci0Jb3V0dygweDgwMCwgYmFzZSk7Ci0Jb3V0dygweDAsIGJhc2UpOwotCW91dHcoMHgwLCBiYXNlKTsKLQlJbnRlcnJ1cHRUaGVDYXJkKGJhc2UpOwotCW91dHcoMHgwLCBiYXNlICsgMHg0KTsgLyogZm9yIElTSTQ2MDggY2FyZHMgKi8KLQogLyogWFhYOiBzaG91bGQgd2UgdGVzdCBpdCBieSByZWFkaW5nIGl0IGJhY2sgYW5kIGNvbXBhcmluZyB3aXRoIG9yaWdpbmFsIGxpa2UKICAqIGluIGxvYWQgZmlybXdhcmUgcGFja2FnZT8gKi8KLQlmb3IgKGZyYW1lID0gKHN0cnVjdCBzdGZyYW1lKilmdy0+ZGF0YTsKLQkJCWZyYW1lIDwgKHN0cnVjdCBzdGZyYW1lKikoZnctPmRhdGEgKyBmdy0+c2l6ZSk7Ci0JCQlmcmFtZSsrKSB7CisJZm9yIChmcmFtZSA9IChzdHJ1Y3Qgc3RmcmFtZSAqKWZ3LT5kYXRhOworCQkJZnJhbWUgPCAoc3RydWN0IHN0ZnJhbWUgKikoZnctPmRhdGEgKyBmdy0+c2l6ZSk7CisJCQlmcmFtZSA9IChzdHJ1Y3Qgc3RmcmFtZSAqKSgodTggKikoZnJhbWUgKyAxKSArCisJCQkJZnJhbWUtPmNvdW50KSkgewogCQlpZiAoV2FpdFRpbGxDYXJkSXNGcmVlKGJhc2UpKQogCQkJZ290byBlcnJyZWxmdzsKIApAQCAtMTg2Myw2ICsxODU1LDE3IEBACiAJCX0KIAl9CiAKKwkvKiB4ZmVyIGN0cmwgKi8KKwlpZiAoV2FpdFRpbGxDYXJkSXNGcmVlKGJhc2UpKQorCQlnb3RvIGVycnJlbGZ3OworCisJb3V0dygweGYyLCBiYXNlKTsKKwlvdXR3KDB4ODAwLCBiYXNlKTsKKwlvdXR3KDB4MCwgYmFzZSk7CisJb3V0dygweDAsIGJhc2UpOworCUludGVycnVwdFRoZUNhcmQoYmFzZSk7CisJb3V0dygweDAsIGJhc2UgKyAweDQpOyAvKiBmb3IgSVNJNDYwOCBjYXJkcyAqLworCiAJYm9hcmQtPnN0YXR1cyB8PSBGSVJNV0FSRV9MT0FERUQ7CiAJcmV0dmFsID0gMDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jIGIvZHJpdmVycy9jaGFyL2lzdGFsbGlvbi5jCmluZGV4IDhjMDk5OTcuLjZiNGQ4MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9pc3RhbGxpb24uYworKysgYi9kcml2ZXJzL2NoYXIvaXN0YWxsaW9uLmMKQEAgLTYxMiwxNiArNjEyLDYgQEAKICNkZWZpbmUJTUlOT1IyQlJEKG1pbikJCSgoKG1pbikgJiAweGMwKSA+PiA2KQogI2RlZmluZQlNSU5PUjJQT1JUKG1pbikJCSgobWluKSAmIDB4M2YpCiAKLS8qCi0gKglEZWZpbmUgYSBiYXVkIHJhdGUgdGFibGUgdGhhdCBjb252ZXJ0cyB0ZXJtaW9zIGJhdWQgcmF0ZSBzZWxlY3RvcgotICoJaW50byB0aGUgYWN0dWFsIGJhdWQgcmF0ZSB2YWx1ZS4gQWxsIGJhdWQgcmF0ZSBjYWxjdWxhdGlvbnMgYXJlIGJhc2VkCi0gKglvbiB0aGUgYWN0dWFsIGJhdWQgcmF0ZSByZXF1aXJlZC4KLSAqLwotc3RhdGljIHVuc2lnbmVkIGludAlzdGxpX2JhdWRyYXRlc1tdID0gewotCTAsIDUwLCA3NSwgMTEwLCAxMzQsIDE1MCwgMjAwLCAzMDAsIDYwMCwgMTIwMCwgMTgwMCwgMjQwMCwgNDgwMCwKLQk5NjAwLCAxOTIwMCwgMzg0MDAsIDU3NjAwLCAxMTUyMDAsIDIzMDQwMCwgNDYwODAwLCA5MjE2MDAKLX07Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTI3NDcsMTUgKzI3MzcsNyBAQAogLyoKICAqCVN0YXJ0IG9mIGJ5IHNldHRpbmcgdGhlIGJhdWQsIGNoYXIgc2l6ZSwgcGFyaXR5IGFuZCBzdG9wIGJpdCBpbmZvLgogICovCi0JcHAtPmJhdWRvdXQgPSB0aW9zcC0+Y19jZmxhZyAmIENCQVVEOwotCWlmIChwcC0+YmF1ZG91dCAmIENCQVVERVgpIHsKLQkJcHAtPmJhdWRvdXQgJj0gfkNCQVVERVg7Ci0JCWlmICgocHAtPmJhdWRvdXQgPCAxKSB8fCAocHAtPmJhdWRvdXQgPiA0KSkKLQkJCXRpb3NwLT5jX2NmbGFnICY9IH5DQkFVREVYOwotCQllbHNlCi0JCQlwcC0+YmF1ZG91dCArPSAxNTsKLQl9Ci0JcHAtPmJhdWRvdXQgPSBzdGxpX2JhdWRyYXRlc1twcC0+YmF1ZG91dF07CisJcHAtPmJhdWRvdXQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShwb3J0cC0+dHR5KTsKIAlpZiAoKHRpb3NwLT5jX2NmbGFnICYgQ0JBVUQpID09IEIzODQwMCkgewogCQlpZiAoKHBvcnRwLT5mbGFncyAmIEFTWU5DX1NQRF9NQVNLKSA9PSBBU1lOQ19TUERfSEkpCiAJCQlwcC0+YmF1ZG91dCA9IDU3NjAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL2xwLmMgYi9kcml2ZXJzL2NoYXIvbHAuYwppbmRleCBmODc1ZmRhLi4xZWNlYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbHAuYworKysgYi9kcml2ZXJzL2NoYXIvbHAuYwpAQCAtOTA2LDcgKzkwNiw3IEBACiAJbHBfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJwcmludGVyIik7CiAJaWYgKElTX0VSUihscF9jbGFzcykpIHsKIAkJZXJyID0gUFRSX0VSUihscF9jbGFzcyk7Ci0JCWdvdG8gb3V0X2RldmZzOworCQlnb3RvIG91dF9yZWc7CiAJfQogCiAJaWYgKHBhcnBvcnRfcmVnaXN0ZXJfZHJpdmVyICgmbHBfZHJpdmVyKSkgewpAQCAtOTI3LDcgKzkyNyw3IEBACiAKIG91dF9jbGFzczoKIAljbGFzc19kZXN0cm95KGxwX2NsYXNzKTsKLW91dF9kZXZmczoKK291dF9yZWc6CiAJdW5yZWdpc3Rlcl9jaHJkZXYoTFBfTUFKT1IsICJscCIpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWJjcy5jIGIvZHJpdmVycy9jaGFyL21iY3MuYwppbmRleCAwMzg1NjUwLi42MzYzNTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbWJjcy5jCisrKyBiL2RyaXZlcnMvY2hhci9tYmNzLmMKQEAgLTIyLDYgKzIyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtNDQ3LDE1ICs0NDgsMTUgQEAKIAlsb2ZmX3QgbmV3cG9zOwogCiAJc3dpdGNoICh3aGVuY2UpIHsKLQljYXNlIDA6CQkvKiBTRUVLX1NFVCAqLworCWNhc2UgU0VFS19TRVQ6CiAJCW5ld3BvcyA9IG9mZjsKIAkJYnJlYWs7CiAKLQljYXNlIDE6CQkvKiBTRUVLX0NVUiAqLworCWNhc2UgU0VFS19DVVI6CiAJCW5ld3BvcyA9IGZpbHAtPmZfcG9zICsgb2ZmOwogCQlicmVhazsKIAotCWNhc2UgMjoJCS8qIFNFRUtfRU5EICovCisJY2FzZSBTRUVLX0VORDoKIAkJbmV3cG9zID0gTUJDU19TUkFNX1NJWkUgKyBvZmY7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbWVtLmMgYi9kcml2ZXJzL2NoYXIvbWVtLmMKaW5kZXggOTE3YjIwNC4uNjUxMTAxMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL21lbS5jCisrKyBiL2RyaXZlcnMvY2hhci9tZW0uYwpAQCAtMjM4LDYgKzIzOCwzMiBAQAogfQogI2VuZGlmCiAKKyNpZm5kZWYgQ09ORklHX01NVQorc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X3VubWFwcGVkX2FyZWFfbWVtKHN0cnVjdCBmaWxlICpmaWxlLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGFkZHIsCisJCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGVuLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmICghdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2UocGdvZmYsIGxlbikpCisJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVJTlZBTDsKKwlyZXR1cm4gcGdvZmY7Cit9CisKKy8qIGNhbid0IGRvIGFuIGluLXBsYWNlIHByaXZhdGUgbWFwcGluZyBpZiB0aGVyZSdzIG5vIE1NVSAqLworc3RhdGljIGlubGluZSBpbnQgcHJpdmF0ZV9tYXBwaW5nX29rKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiB2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkU7Cit9CisjZWxzZQorI2RlZmluZSBnZXRfdW5tYXBwZWRfYXJlYV9tZW0JTlVMTAorCitzdGF0aWMgaW5saW5lIGludCBwcml2YXRlX21hcHBpbmdfb2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKwogc3RhdGljIGludCBtbWFwX21lbShzdHJ1Y3QgZmlsZSAqIGZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKIHsKIAlzaXplX3Qgc2l6ZSA9IHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydDsKQEAgLTI0NSw2ICsyNzEsOSBAQAogCWlmICghdmFsaWRfbW1hcF9waHlzX2FkZHJfcmFuZ2Uodm1hLT52bV9wZ29mZiwgc2l6ZSkpCiAJCXJldHVybiAtRUlOVkFMOwogCisJaWYgKCFwcml2YXRlX21hcHBpbmdfb2sodm1hKSkKKwkJcmV0dXJuIC1FTk9TWVM7CisKIAl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBoeXNfbWVtX2FjY2Vzc19wcm90KGZpbGUsIHZtYS0+dm1fcGdvZmYsCiAJCQkJCQkgc2l6ZSwKIAkJCQkJCSB2bWEtPnZtX3BhZ2VfcHJvdCk7CkBAIC01MjIsNyArNTUxLDcgQEAKICAJcmV0dXJuIHZpcnRyICsgd3JvdGU7CiB9CiAKLSNpZiBkZWZpbmVkKENPTkZJR19JU0EpIHx8ICFkZWZpbmVkKF9fbWM2ODAwMF9fKQorI2lmIChkZWZpbmVkKENPTkZJR19JU0EpIHx8IGRlZmluZWQoQ09ORklHX1BDSSkpICYmICFkZWZpbmVkKF9fbWM2ODAwMF9fKQogc3RhdGljIHNzaXplX3QgcmVhZF9wb3J0KHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCiAJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CkBAIC03ODIsNiArODExLDcgQEAKIAkud3JpdGUJCT0gd3JpdGVfbWVtLAogCS5tbWFwCQk9IG1tYXBfbWVtLAogCS5vcGVuCQk9IG9wZW5fbWVtLAorCS5nZXRfdW5tYXBwZWRfYXJlYSA9IGdldF91bm1hcHBlZF9hcmVhX21lbSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGttZW1fZm9wcyA9IHsKQEAgLTc5MCw2ICs4MjAsNyBAQAogCS53cml0ZQkJPSB3cml0ZV9rbWVtLAogCS5tbWFwCQk9IG1tYXBfa21lbSwKIAkub3BlbgkJPSBvcGVuX2ttZW0sCisJLmdldF91bm1hcHBlZF9hcmVhID0gZ2V0X3VubWFwcGVkX2FyZWFfbWVtLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbnVsbF9mb3BzID0gewpAQCAtNzk5LDcgKzgzMCw3IEBACiAJLnNwbGljZV93cml0ZQk9IHNwbGljZV93cml0ZV9udWxsLAogfTsKIAotI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pCisjaWYgKGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfUENJKSkgJiYgIWRlZmluZWQoX19tYzY4MDAwX18pCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwb3J0X2ZvcHMgPSB7CiAJLmxsc2VlawkJPSBtZW1vcnlfbHNlZWssCiAJLnJlYWQJCT0gcmVhZF9wb3J0LApAQCAtODE1LDYgKzg0NiwxMCBAQAogCS5tbWFwCQk9IG1tYXBfemVybywKIH07CiAKKy8qCisgKiBjYXBhYmlsaXRpZXMgZm9yIC9kZXYvemVybworICogLSBwZXJtaXRzIHByaXZhdGUgbWFwcGluZ3MsICJjb3BpZXMiIGFyZSB0YWtlbiBvZiB0aGUgc291cmNlIG9mIHplcm9zCisgKi8KIHN0YXRpYyBzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyB6ZXJvX2JkaSA9IHsKIAkuY2FwYWJpbGl0aWVzCT0gQkRJX0NBUF9NQVBfQ09QWSwKIH07CkBAIC04NjIsMTQgKzg5NywxOCBAQAogCXN3aXRjaCAoaW1pbm9yKGlub2RlKSkgewogCQljYXNlIDE6CiAJCQlmaWxwLT5mX29wID0gJm1lbV9mb3BzOworCQkJZmlscC0+Zl9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0KKwkJCQkmZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGk7CiAJCQlicmVhazsKIAkJY2FzZSAyOgogCQkJZmlscC0+Zl9vcCA9ICZrbWVtX2ZvcHM7CisJCQlmaWxwLT5mX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPQorCQkJCSZkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaTsKIAkJCWJyZWFrOwogCQljYXNlIDM6CiAJCQlmaWxwLT5mX29wID0gJm51bGxfZm9wczsKIAkJCWJyZWFrOwotI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pCisjaWYgKGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfUENJKSkgJiYgIWRlZmluZWQoX19tYzY4MDAwX18pCiAJCWNhc2UgNDoKIAkJCWZpbHAtPmZfb3AgPSAmcG9ydF9mb3BzOwogCQkJYnJlYWs7CkBAIC05MTYsNyArOTU1LDcgQEAKIAl7MSwgIm1lbSIsICAgICBTX0lSVVNSIHwgU19JV1VTUiB8IFNfSVJHUlAsICZtZW1fZm9wc30sCiAJezIsICJrbWVtIiwgICAgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLCAma21lbV9mb3BzfSwKIAl7MywgIm51bGwiLCAgICBTX0lSVUdPIHwgU19JV1VHTywgICAgICAgICAgICZudWxsX2ZvcHN9LAotI2lmIGRlZmluZWQoQ09ORklHX0lTQSkgfHwgIWRlZmluZWQoX19tYzY4MDAwX18pCisjaWYgKGRlZmluZWQoQ09ORklHX0lTQSkgfHwgZGVmaW5lZChDT05GSUdfUENJKSkgJiYgIWRlZmluZWQoX19tYzY4MDAwX18pCiAJezQsICJwb3J0IiwgICAgU19JUlVTUiB8IFNfSVdVU1IgfCBTX0lSR1JQLCAmcG9ydF9mb3BzfSwKICNlbmRpZgogCXs1LCAiemVybyIsICAgIFNfSVJVR08gfCBTX0lXVUdPLCAgICAgICAgICAgJnplcm9fZm9wc30sCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbW94YS5jIGIvZHJpdmVycy9jaGFyL21veGEuYwppbmRleCBhMzY5ZGQ2Li5jMWE2ZDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvbW94YS5jCisrKyBiL2RyaXZlcnMvY2hhci9tb3hhLmMKQEAgLTI2MCw3ICsyNjAsNyBAQAogc3RhdGljIHZvaWQgTW94YVBvcnREaXNhYmxlKGludCk7CiBzdGF0aWMgbG9uZyBNb3hhUG9ydEdldE1heEJhdWQoaW50KTsKIHN0YXRpYyBsb25nIE1veGFQb3J0U2V0QmF1ZChpbnQsIGxvbmcpOwotc3RhdGljIGludCBNb3hhUG9ydFNldFRlcm1pbyhpbnQsIHN0cnVjdCB0ZXJtaW9zICopOworc3RhdGljIGludCBNb3hhUG9ydFNldFRlcm1pbyhpbnQsIHN0cnVjdCB0ZXJtaW9zICosIHNwZWVkX3QpOwogc3RhdGljIGludCBNb3hhUG9ydEdldExpbmVPdXQoaW50LCBpbnQgKiwgaW50ICopOwogc3RhdGljIHZvaWQgTW94YVBvcnRMaW5lQ3RybChpbnQsIGludCwgaW50KTsKIHN0YXRpYyB2b2lkIE1veGFQb3J0Rmxvd0N0cmwoaW50LCBpbnQsIGludCwgaW50LCBpbnQsIGludCk7CkBAIC05ODYsNyArOTg2LDcgQEAKIAlpZiAodHMtPmNfaWZsYWcgJiBJWEFOWSkKIAkJeGFueSA9IDE7CiAJTW94YVBvcnRGbG93Q3RybChjaC0+cG9ydCwgcnRzLCBjdHMsIHR4ZmxvdywgcnhmbG93LCB4YW55KTsKLQlNb3hhUG9ydFNldFRlcm1pbyhjaC0+cG9ydCwgdHMpOworCU1veGFQb3J0U2V0VGVybWlvKGNoLT5wb3J0LCB0cywgdHR5X2dldF9iYXVkX3JhdGUodHR5KSk7CiB9CiAKIHN0YXRpYyBpbnQgYmxvY2tfdGlsbF9yZWFkeShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgZmlsZSAqZmlscCwKQEAgLTE5MDAsOSArMTkwMCwxMCBAQAogICoKICAqICAgICAgRnVuY3Rpb24gMTI6ICAgIENvbmZpZ3VyZSB0aGUgcG9ydC4KICAqICAgICAgU3ludGF4OgotICogICAgICBpbnQgIE1veGFQb3J0U2V0VGVybWlvKGludCBwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqdGVybWlvKTsKKyAqICAgICAgaW50ICBNb3hhUG9ydFNldFRlcm1pbyhpbnQgcG9ydCwgc3RydWN0IHRlcm1pb3MgKnRlcm1pbywgc3BlZWRfdCBiYXVkKTsKICAqICAgICAgICAgICBpbnQgcG9ydCAgICAgICAgICAgOiBwb3J0IG51bWJlciAoMCAtIDEyNykKICAqICAgICAgICAgICBzdHJ1Y3QgdGVybWlvcyAqIHRlcm1pbyA6IHRlcm1pbyBzdHJ1Y3R1cmUgcG9pbnRlcgorICoJICAgICBzcGVlZF90IGJhdWQJOiBiYXVkIHJhdGUKICAqCiAgKiAgICAgICAgICAgcmV0dXJuOiAgICAtMSAgICAgIDogdGhpcyBwb3J0IGlzIGludmFsaWQgb3IgdGVybWlvID09IE5VTEwKICAqICAgICAgICAgICAgICAgICAgICAgIDAgICAgICAgOiBzZXR0aW5nIE8uSy4KQEAgLTIxODIsMTEgKzIxODMsMTAgQEAKIAlyZXR1cm4gKGJhdWQpOwogfQogCi1pbnQgTW94YVBvcnRTZXRUZXJtaW8oaW50IHBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW8pCitpbnQgTW94YVBvcnRTZXRUZXJtaW8oaW50IHBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW8sIHNwZWVkX3QgYmF1ZCkKIHsKIAl2b2lkIF9faW9tZW0gKm9mc0FkZHI7CiAJdGNmbGFnX3QgY2ZsYWc7Ci0JbG9uZyBiYXVkOwogCXRjZmxhZ190IG1vZGUgPSAwOwogCiAJaWYgKG1veGFDaGtQb3J0W3BvcnRdID09IDAgfHwgdGVybWlvID09IDApCkBAIC0yMjIyLDc3ICsyMjIyLDkgQEAKIAogCW1veGFmdW5jKG9mc0FkZHIsIEZDX1NldERhdGFNb2RlLCAodXNob3J0KSBtb2RlKTsKIAotCWNmbGFnICY9IChDQkFVRCB8IENCQVVERVgpOwotI2lmbmRlZiBCOTIxNjAwCi0jZGVmaW5lCUI5MjE2MDAJKEI0NjA4MDArMSkKLSNlbmRpZgotCXN3aXRjaCAoY2ZsYWcpIHsKLQljYXNlIEI5MjE2MDA6Ci0JCWJhdWQgPSA5MjE2MDBMOwotCQlicmVhazsKLQljYXNlIEI0NjA4MDA6Ci0JCWJhdWQgPSA0NjA4MDBMOwotCQlicmVhazsKLQljYXNlIEIyMzA0MDA6Ci0JCWJhdWQgPSAyMzA0MDBMOwotCQlicmVhazsKLQljYXNlIEIxMTUyMDA6Ci0JCWJhdWQgPSAxMTUyMDBMOwotCQlicmVhazsKLQljYXNlIEI1NzYwMDoKLQkJYmF1ZCA9IDU3NjAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMzg0MDA6Ci0JCWJhdWQgPSAzODQwMEw7Ci0JCWJyZWFrOwotCWNhc2UgQjE5MjAwOgotCQliYXVkID0gMTkyMDBMOwotCQlicmVhazsKLQljYXNlIEI5NjAwOgotCQliYXVkID0gOTYwMEw7Ci0JCWJyZWFrOwotCWNhc2UgQjQ4MDA6Ci0JCWJhdWQgPSA0ODAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMjQwMDoKLQkJYmF1ZCA9IDI0MDBMOwotCQlicmVhazsKLQljYXNlIEIxODAwOgotCQliYXVkID0gMTgwMEw7Ci0JCWJyZWFrOwotCWNhc2UgQjEyMDA6Ci0JCWJhdWQgPSAxMjAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCNjAwOgotCQliYXVkID0gNjAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMzAwOgotCQliYXVkID0gMzAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMjAwOgotCQliYXVkID0gMjAwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMTUwOgotCQliYXVkID0gMTUwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCMTM0OgotCQliYXVkID0gMTM0TDsKLQkJYnJlYWs7Ci0JY2FzZSBCMTEwOgotCQliYXVkID0gMTEwTDsKLQkJYnJlYWs7Ci0JY2FzZSBCNzU6Ci0JCWJhdWQgPSA3NUw7Ci0JCWJyZWFrOwotCWNhc2UgQjUwOgotCQliYXVkID0gNTBMOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQliYXVkID0gMDsKLQl9CiAJaWYgKChtb3hhX2JvYXJkc1twb3J0IC8gTUFYX1BPUlRTX1BFUl9CT0FSRF0uYm9hcmRUeXBlID09IE1PWEFfQk9BUkRfQzMyMF9JU0EpIHx8CiAJICAgIChtb3hhX2JvYXJkc1twb3J0IC8gTUFYX1BPUlRTX1BFUl9CT0FSRF0uYm9hcmRUeXBlID09IE1PWEFfQk9BUkRfQzMyMF9QQ0kpKSB7Ci0JCWlmIChiYXVkID09IDkyMTYwMEwpCisJCWlmIChiYXVkID49IDkyMTYwMEwpCiAJCQlyZXR1cm4gKC0xKTsKIAl9CiAJTW94YVBvcnRTZXRCYXVkKHBvcnQsIGJhdWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL21zcGVjLmMgYi9kcml2ZXJzL2NoYXIvbXNwZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDI2YjFlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL21zcGVjLmMKQEAgLTAsMCArMSw0MjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuICBBbGwgcmlnaHRzCisgKiByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKy8qCisgKiBTTiBQbGF0Zm9ybSBTcGVjaWFsIE1lbW9yeSAobXNwZWMpIFN1cHBvcnQKKyAqCisgKiBUaGlzIGRyaXZlciBleHBvcnRzIHRoZSBTTiBzcGVjaWFsIG1lbW9yeSAobXNwZWMpIGZhY2lsaXR5IHRvIHVzZXIKKyAqIHByb2Nlc3Nlcy4KKyAqIFRoZXJlIGFyZSB0aHJlZSB0eXBlcyBvZiBtZW1vcnkgbWFkZSBhdmFpbGFibGUgdGhydSB0aGlzIGRyaXZlcjoKKyAqIGZldGNob3BzLCB1bmNhY2hlZCBhbmQgY2FjaGVkLgorICoKKyAqIEZldGNob3BzIGFyZSBhdG9taWMgbWVtb3J5IG9wZXJhdGlvbnMgdGhhdCBhcmUgaW1wbGVtZW50ZWQgaW4gdGhlCisgKiBtZW1vcnkgY29udHJvbGxlciBvbiBTR0kgU04gaGFyZHdhcmUuCisgKgorICogVW5jYWNoZWQgYXJlIHVzZWQgZm9yIG1lbW9yeSB3cml0ZSBjb21iaW5pbmcgZmVhdHVyZSBvZiB0aGUgaWE2NAorICogY3B1LgorICoKKyAqIENhY2hlZCBhcmUgdXNlZCBmb3IgYXJlYXMgb2YgbWVtb3J5IHRoYXQgYXJlIHVzZWQgYXMgY2FjaGVkIGFkZHJlc3NlcworICogb24gb3VyIHBhcnRpdGlvbiBhbmQgdXNlZCBhcyB1bmNhY2hlZCBhZGRyZXNzZXMgZnJvbSBvdGhlciBwYXJ0aXRpb25zLgorICogRHVlIHRvIGEgZGVzaWduIGNvbnN0cmFpbnQgb2YgdGhlIFNOMiBTaHViLCB5b3UgY2FuIG5vdCBoYXZlIHByb2Nlc3NvcnMKKyAqIG9uIHRoZSBzYW1lIEZTQiBwZXJmb3JtIGJvdGggYSBjYWNoZWQgYW5kIHVuY2FjaGVkIHJlZmVyZW5jZSB0byB0aGUKKyAqIHNhbWUgY2FjaGUgbGluZS4gIFRoZXNlIHNwZWNpYWwgbWVtb3J5IGNhY2hlZCByZWdpb25zIHByZXZlbnQgdGhlCisgKiBrZXJuZWwgZnJvbSBldmVyIGRyb3BwaW5nIGluIGEgVExCIGVudHJ5IGFuZCB0aGVyZWZvcmUgcHJldmVudCB0aGUKKyAqIHByb2Nlc3NvciBmcm9tIGV2ZXIgc3BlY3VsYXRpbmcgYSBjYWNoZSBsaW5lIGZyb20gdGhpcyBwYWdlLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L21pc2NkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9udW1hLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL3VuY2FjaGVkLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FkZHJzLmg+CisjaW5jbHVkZSA8YXNtL3NuL2FyY2guaD4KKyNpbmNsdWRlIDxhc20vc24vbXNwZWMuaD4KKyNpbmNsdWRlIDxhc20vc24vc25fY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20vc24vaW8uaD4KKyNpbmNsdWRlIDxhc20vc24vYnRlLmg+CisjaW5jbHVkZSA8YXNtL3NuL3NodWJpby5oPgorCisKKyNkZWZpbmUgRkVUQ0hPUF9JRAkiU0dJIEZldGNob3AsIgorI2RlZmluZSBDQUNIRURfSUQJIkNhY2hlZCwiCisjZGVmaW5lIFVOQ0FDSEVEX0lECSJVbmNhY2hlZCIKKyNkZWZpbmUgUkVWSVNJT04JIjQuMCIKKyNkZWZpbmUgTVNQRUNfQkFTRU5BTUUJIm1zcGVjIgorCisvKgorICogUGFnZSB0eXBlcyBhbGxvY2F0ZWQgYnkgdGhlIGRldmljZS4KKyAqLworZW51bSB7CisJTVNQRUNfRkVUQ0hPUCA9IDEsCisJTVNQRUNfQ0FDSEVELAorCU1TUEVDX1VOQ0FDSEVECit9OworCitzdGF0aWMgaW50IGlzX3NuMjsKKworLyoKKyAqIE9uZSBvZiB0aGVzZSBzdHJ1Y3R1cmVzIGlzIGFsbG9jYXRlZCB3aGVuIGFuIG1zcGVjIHJlZ2lvbiBpcyBtbWFwZWQuIFRoZQorICogc3RydWN0dXJlIGlzIHBvaW50ZWQgdG8gYnkgdGhlIHZtYS0+dm1fcHJpdmF0ZV9kYXRhIGZpZWxkIGluIHRoZSB2bWEgc3RydWN0LgorICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZWNvcmQgdGhlIGFkZHJlc3NlcyBvZiB0aGUgbXNwZWMgcGFnZXMuCisgKi8KK3N0cnVjdCB2bWFfZGF0YSB7CisJYXRvbWljX3QgcmVmY250OwkvKiBOdW1iZXIgb2Ygdm1hcyBzaGFyaW5nIHRoZSBkYXRhLiAqLworCXNwaW5sb2NrX3QgbG9jazsJLyogU2VyaWFsaXplIGFjY2VzcyB0byB0aGUgdm1hLiAqLworCWludCBjb3VudDsJCS8qIE51bWJlciBvZiBwYWdlcyBhbGxvY2F0ZWQuICovCisJaW50IHR5cGU7CQkvKiBUeXBlIG9mIHBhZ2VzIGFsbG9jYXRlZC4gKi8KKwl1bnNpZ25lZCBsb25nIG1hZGRyWzBdOwkvKiBBcnJheSBvZiBNU1BFQyBhZGRyZXNzZXMuICovCit9OworCisvKiB1c2VkIG9uIHNodWIyIHRvIGNsZWFyIEZPUCBjYWNoZSBpbiB0aGUgSFVCICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyBzY3JhdGNoX3BhZ2VbTUFYX05VTU5PREVTXTsKKyNkZWZpbmUgU0gyX0FNT19DQUNIRV9FTlRSSUVTCTQKKworc3RhdGljIGlubGluZSBpbnQKK21zcGVjX3plcm9fYmxvY2sodW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGVuKQoreworCWludCBzdGF0dXM7CisKKwlpZiAoaXNfc24yKSB7CisJCWlmIChpc19zaHViMigpKSB7CisJCQlpbnQgbmlkOworCQkJdm9pZCAqcDsKKwkJCWludCBpOworCisJCQluaWQgPSBuYXNpZF90b19jbm9kZWlkKGdldF9ub2RlX251bWJlcihfX3BhKGFkZHIpKSk7CisJCQlwID0gKHZvaWQgKilUT19BTU8oc2NyYXRjaF9wYWdlW25pZF0pOworCisJCQlmb3IgKGk9MDsgaSA8IFNIMl9BTU9fQ0FDSEVfRU5UUklFUzsgaSsrKSB7CisJCQkJRkVUQ0hPUF9MT0FEX09QKHAsIEZFVENIT1BfTE9BRCk7CisJCQkJcCArPSBGRVRDSE9QX1ZBUl9TSVpFOworCQkJfQorCQl9CisKKwkJc3RhdHVzID0gYnRlX2NvcHkoMCwgYWRkciAmIH5fX0lBNjRfVU5DQUNIRURfT0ZGU0VULCBsZW4sCisJCQkJICBCVEVfV0FDUVVJUkUgfCBCVEVfWkVST19GSUxMLCBOVUxMKTsKKwl9IGVsc2UgeworCQltZW1zZXQoKGNoYXIgKikgYWRkciwgMCwgbGVuKTsKKwkJc3RhdHVzID0gMDsKKwl9CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoKKyAqIG1zcGVjX29wZW4KKyAqCisgKiBDYWxsZWQgd2hlbiBhIGRldmljZSBtYXBwaW5nIGlzIGNyZWF0ZWQgYnkgYSBtZWFucyBvdGhlciB0aGFuIG1tYXAKKyAqICh2aWEgZm9yaywgZXRjLikuICBJbmNyZW1lbnRzIHRoZSByZWZlcmVuY2UgY291bnQgb24gdGhlIHVuZGVybHlpbmcKKyAqIG1zcGVjIGRhdGEgc28gaXQgaXMgbm90IGZyZWVkIHByZW1hdHVyZWx5LgorICovCitzdGF0aWMgdm9pZAorbXNwZWNfb3BlbihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgdm1hX2RhdGEgKnZkYXRhOworCisJdmRhdGEgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlhdG9taWNfaW5jKCZ2ZGF0YS0+cmVmY250KTsKK30KKworLyoKKyAqIG1zcGVjX2Nsb3NlCisgKgorICogQ2FsbGVkIHdoZW4gdW5tYXBwaW5nIGEgZGV2aWNlIG1hcHBpbmcuIEZyZWVzIGFsbCBtc3BlYyBwYWdlcworICogYmVsb25naW5nIHRvIHRoZSB2bWEuCisgKi8KK3N0YXRpYyB2b2lkCittc3BlY19jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlzdHJ1Y3Qgdm1hX2RhdGEgKnZkYXRhOworCWludCBpLCBwYWdlcywgcmVzdWx0LCB2ZGF0YV9zaXplOworCisJdmRhdGEgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlpZiAoIWF0b21pY19kZWNfYW5kX3Rlc3QoJnZkYXRhLT5yZWZjbnQpKQorCQlyZXR1cm47CisKKwlwYWdlcyA9ICh2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpID4+IFBBR0VfU0hJRlQ7CisJdmRhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgdm1hX2RhdGEpICsgcGFnZXMgKiBzaXplb2YobG9uZyk7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJaWYgKHZkYXRhLT5tYWRkcltpXSA9PSAwKQorCQkJY29udGludWU7CisJCS8qCisJCSAqIENsZWFyIHRoZSBwYWdlIGJlZm9yZSBzdGlja2luZyBpdCBiYWNrCisJCSAqIGludG8gdGhlIHBvb2wuCisJCSAqLworCQlyZXN1bHQgPSBtc3BlY196ZXJvX2Jsb2NrKHZkYXRhLT5tYWRkcltpXSwgUEFHRV9TSVpFKTsKKwkJaWYgKCFyZXN1bHQpCisJCQl1bmNhY2hlZF9mcmVlX3BhZ2UodmRhdGEtPm1hZGRyW2ldKTsKKwkJZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAibXNwZWNfY2xvc2UoKTogIgorCQkJICAgICAgICJmYWlsZWQgdG8gemVybyBwYWdlICVpXG4iLAorCQkJICAgICAgIHJlc3VsdCk7CisJfQorCisJaWYgKHZkYXRhX3NpemUgPD0gUEFHRV9TSVpFKQorCQlrZnJlZSh2ZGF0YSk7CisJZWxzZQorCQl2ZnJlZSh2ZGF0YSk7Cit9CisKKworLyoKKyAqIG1zcGVjX25vcGZuCisgKgorICogQ3JlYXRlcyBhIG1zcGVjIHBhZ2UgYW5kIG1hcHMgaXQgdG8gdXNlciBzcGFjZS4KKyAqLworc3RhdGljIHVuc2lnbmVkIGxvbmcKK21zcGVjX25vcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCit7CisJdW5zaWduZWQgbG9uZyBwYWRkciwgbWFkZHI7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IGluZGV4OworCXN0cnVjdCB2bWFfZGF0YSAqdmRhdGEgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKworCWluZGV4ID0gKGFkZHJlc3MgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCW1hZGRyID0gKHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcpIHZkYXRhLT5tYWRkcltpbmRleF07CisJaWYgKG1hZGRyID09IDApIHsKKwkJbWFkZHIgPSB1bmNhY2hlZF9hbGxvY19wYWdlKG51bWFfbm9kZV9pZCgpKTsKKwkJaWYgKG1hZGRyID09IDApCisJCQlyZXR1cm4gTk9QRk5fT09NOworCisJCXNwaW5fbG9jaygmdmRhdGEtPmxvY2spOworCQlpZiAodmRhdGEtPm1hZGRyW2luZGV4XSA9PSAwKSB7CisJCQl2ZGF0YS0+Y291bnQrKzsKKwkJCXZkYXRhLT5tYWRkcltpbmRleF0gPSBtYWRkcjsKKwkJfSBlbHNlIHsKKwkJCXVuY2FjaGVkX2ZyZWVfcGFnZShtYWRkcik7CisJCQltYWRkciA9IHZkYXRhLT5tYWRkcltpbmRleF07CisJCX0KKwkJc3Bpbl91bmxvY2soJnZkYXRhLT5sb2NrKTsKKwl9CisKKwlpZiAodmRhdGEtPnR5cGUgPT0gTVNQRUNfRkVUQ0hPUCkKKwkJcGFkZHIgPSBUT19BTU8obWFkZHIpOworCWVsc2UKKwkJcGFkZHIgPSBfX3BhKFRPX0NBQyhtYWRkcikpOworCisJcGZuID0gcGFkZHIgPj4gUEFHRV9TSElGVDsKKworCXJldHVybiBwZm47Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgbXNwZWNfdm1fb3BzID0geworCS5vcGVuID0gbXNwZWNfb3BlbiwKKwkuY2xvc2UgPSBtc3BlY19jbG9zZSwKKwkubm9wZm4gPSBtc3BlY19ub3BmbgorfTsKKworLyoKKyAqIG1zcGVjX21tYXAKKyAqCisgKiBDYWxsZWQgd2hlbiBtbWFwaW5nIHRoZSBkZXZpY2UuICBJbml0aWFsaXplcyB0aGUgdm1hIHdpdGggYSBmYXVsdCBoYW5kbGVyCisgKiBhbmQgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBuZWNlc3NhcnkgdG8gYWxsb2NhdGUsIHRyYWNrLCBhbmQgZnJlZSB0aGUKKyAqIHVuZGVybHlpbmcgcGFnZXMuCisgKi8KK3N0YXRpYyBpbnQKK21zcGVjX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBpbnQgdHlwZSkKK3sKKwlzdHJ1Y3Qgdm1hX2RhdGEgKnZkYXRhOworCWludCBwYWdlcywgdmRhdGFfc2l6ZTsKKworCWlmICh2bWEtPnZtX3Bnb2ZmICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCh2bWEtPnZtX2ZsYWdzICYgVk1fU0hBUkVEKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSA9PSAwKQorCQlyZXR1cm4gLUVQRVJNOworCisJcGFnZXMgPSAodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+PiBQQUdFX1NISUZUOworCXZkYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IHZtYV9kYXRhKSArIHBhZ2VzICogc2l6ZW9mKGxvbmcpOworCWlmICh2ZGF0YV9zaXplIDw9IFBBR0VfU0laRSkKKwkJdmRhdGEgPSBrbWFsbG9jKHZkYXRhX3NpemUsIEdGUF9LRVJORUwpOworCWVsc2UKKwkJdmRhdGEgPSB2bWFsbG9jKHZkYXRhX3NpemUpOworCWlmICghdmRhdGEpCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldCh2ZGF0YSwgMCwgdmRhdGFfc2l6ZSk7CisKKwl2ZGF0YS0+dHlwZSA9IHR5cGU7CisJc3Bpbl9sb2NrX2luaXQoJnZkYXRhLT5sb2NrKTsKKwl2ZGF0YS0+cmVmY250ID0gQVRPTUlDX0lOSVQoMSk7CisJdm1hLT52bV9wcml2YXRlX2RhdGEgPSB2ZGF0YTsKKworCXZtYS0+dm1fZmxhZ3MgfD0gKFZNX0lPIHwgVk1fTE9DS0VEIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVApOworCWlmICh2ZGF0YS0+dHlwZSA9PSBNU1BFQ19GRVRDSE9QIHx8IHZkYXRhLT50eXBlID09IE1TUEVDX1VOQ0FDSEVEKQorCQl2bWEtPnZtX3BhZ2VfcHJvdCA9IHBncHJvdF9ub25jYWNoZWQodm1hLT52bV9wYWdlX3Byb3QpOworCXZtYS0+dm1fb3BzID0gJm1zcGVjX3ZtX29wczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50CitmZXRjaG9wX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiBtc3BlY19tbWFwKGZpbGUsIHZtYSwgTVNQRUNfRkVUQ0hPUCk7Cit9CisKK3N0YXRpYyBpbnQKK2NhY2hlZF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlyZXR1cm4gbXNwZWNfbW1hcChmaWxlLCB2bWEsIE1TUEVDX0NBQ0hFRCk7Cit9CisKK3N0YXRpYyBpbnQKK3VuY2FjaGVkX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQoreworCXJldHVybiBtc3BlY19tbWFwKGZpbGUsIHZtYSwgTVNQRUNfVU5DQUNIRUQpOworfQorCitzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmZXRjaG9wX2ZvcHMgPSB7CisJLm93bmVyID0gVEhJU19NT0RVTEUsCisJLm1tYXAgPSBmZXRjaG9wX21tYXAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBmZXRjaG9wX21pc2NkZXYgPSB7CisJLm1pbm9yID0gTUlTQ19EWU5BTUlDX01JTk9SLAorCS5uYW1lID0gInNnaV9mZXRjaG9wIiwKKwkuZm9wcyA9ICZmZXRjaG9wX2ZvcHMKK307CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhY2hlZF9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5tbWFwID0gY2FjaGVkX21tYXAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSBjYWNoZWRfbWlzY2RldiA9IHsKKwkubWlub3IgPSBNSVNDX0RZTkFNSUNfTUlOT1IsCisJLm5hbWUgPSAibXNwZWNfY2FjaGVkIiwKKwkuZm9wcyA9ICZjYWNoZWRfZm9wcworfTsKKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdW5jYWNoZWRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkubW1hcCA9IHVuY2FjaGVkX21tYXAKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWlzY2RldmljZSB1bmNhY2hlZF9taXNjZGV2ID0geworCS5taW5vciA9IE1JU0NfRFlOQU1JQ19NSU5PUiwKKwkubmFtZSA9ICJtc3BlY191bmNhY2hlZCIsCisJLmZvcHMgPSAmdW5jYWNoZWRfZm9wcworfTsKKworLyoKKyAqIG1zcGVjX2luaXQKKyAqCisgKiBDYWxsZWQgYXQgYm9vdCB0aW1lIHRvIGluaXRpYWxpemUgdGhlIG1zcGVjIGZhY2lsaXR5LgorICovCitzdGF0aWMgaW50IF9faW5pdAorbXNwZWNfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisJaW50IG5pZDsKKworCS8qCisJICogVGhlIGZldGNob3AgZGV2aWNlIG9ubHkgd29ya3Mgb24gU04yIGhhcmR3YXJlLCB1bmNhY2hlZCBhbmQgY2FjaGVkCisJICogbWVtb3J5IGRyaXZlcnMgc2hvdWxkIGJvdGggYmUgdmFsaWQgb24gYWxsIGlhNjQgaGFyZHdhcmUKKwkgKi8KKwlpZiAoaWE2NF9wbGF0Zm9ybV9pcygic24yIikpIHsKKwkJaXNfc24yID0gMTsKKwkJaWYgKGlzX3NodWIyKCkpIHsKKwkJCXJldCA9IC1FTk9NRU07CisJCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpIHsKKwkJCQlpbnQgYWN0dWFsX25pZDsKKwkJCQlpbnQgbmFzaWQ7CisJCQkJdW5zaWduZWQgbG9uZyBwaHlzOworCisJCQkJc2NyYXRjaF9wYWdlW25pZF0gPSB1bmNhY2hlZF9hbGxvY19wYWdlKG5pZCk7CisJCQkJaWYgKHNjcmF0Y2hfcGFnZVtuaWRdID09IDApCisJCQkJCWdvdG8gZnJlZV9zY3JhdGNoX3BhZ2VzOworCQkJCXBoeXMgPSBfX3BhKHNjcmF0Y2hfcGFnZVtuaWRdKTsKKwkJCQluYXNpZCA9IGdldF9ub2RlX251bWJlcihwaHlzKTsKKwkJCQlhY3R1YWxfbmlkID0gbmFzaWRfdG9fY25vZGVpZChuYXNpZCk7CisJCQkJaWYgKGFjdHVhbF9uaWQgIT0gbmlkKQorCQkJCQlnb3RvIGZyZWVfc2NyYXRjaF9wYWdlczsKKwkJCX0KKwkJfQorCisJCXJldCA9IG1pc2NfcmVnaXN0ZXIoJmZldGNob3BfbWlzY2Rldik7CisJCWlmIChyZXQpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgICAgICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSAlaVxuIiwKKwkJCSAgICAgICBGRVRDSE9QX0lELCByZXQpOworCQkJZ290byBmcmVlX3NjcmF0Y2hfcGFnZXM7CisJCX0KKwl9CisJcmV0ID0gbWlzY19yZWdpc3RlcigmY2FjaGVkX21pc2NkZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSAlaVxuIiwKKwkJICAgICAgIENBQ0hFRF9JRCwgcmV0KTsKKwkJaWYgKGlzX3NuMikKKwkJCW1pc2NfZGVyZWdpc3RlcigmZmV0Y2hvcF9taXNjZGV2KTsKKwkJZ290byBmcmVlX3NjcmF0Y2hfcGFnZXM7CisJfQorCXJldCA9IG1pc2NfcmVnaXN0ZXIoJnVuY2FjaGVkX21pc2NkZXYpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZmFpbGVkIHRvIHJlZ2lzdGVyIGRldmljZSAlaVxuIiwKKwkJICAgICAgIFVOQ0FDSEVEX0lELCByZXQpOworCQltaXNjX2RlcmVnaXN0ZXIoJmNhY2hlZF9taXNjZGV2KTsKKwkJaWYgKGlzX3NuMikKKwkJCW1pc2NfZGVyZWdpc3RlcigmZmV0Y2hvcF9taXNjZGV2KTsKKwkJZ290byBmcmVlX3NjcmF0Y2hfcGFnZXM7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgaW5pdGlhbGl6ZWQgZGV2aWNlczogJXMgJXMgJXNcbiIsCisJICAgICAgIE1TUEVDX0JBU0VOQU1FLCBSRVZJU0lPTiwgaXNfc24yID8gRkVUQ0hPUF9JRCA6ICIiLAorCSAgICAgICBDQUNIRURfSUQsIFVOQ0FDSEVEX0lEKTsKKworCXJldHVybiAwOworCisgZnJlZV9zY3JhdGNoX3BhZ2VzOgorCWZvcl9lYWNoX25vZGUobmlkKSB7CisJCWlmIChzY3JhdGNoX3BhZ2VbbmlkXSAhPSAwKQorCQkJdW5jYWNoZWRfZnJlZV9wYWdlKHNjcmF0Y2hfcGFnZVtuaWRdKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgX19leGl0Cittc3BlY19leGl0KHZvaWQpCit7CisJaW50IG5pZDsKKworCW1pc2NfZGVyZWdpc3RlcigmdW5jYWNoZWRfbWlzY2Rldik7CisJbWlzY19kZXJlZ2lzdGVyKCZjYWNoZWRfbWlzY2Rldik7CisJaWYgKGlzX3NuMikgeworCQltaXNjX2RlcmVnaXN0ZXIoJmZldGNob3BfbWlzY2Rldik7CisKKwkJZm9yX2VhY2hfbm9kZShuaWQpIHsKKwkJCWlmIChzY3JhdGNoX3BhZ2VbbmlkXSAhPSAwKQorCQkJCXVuY2FjaGVkX2ZyZWVfcGFnZShzY3JhdGNoX3BhZ2VbbmlkXSk7CisJCX0KKwl9Cit9CisKK21vZHVsZV9pbml0KG1zcGVjX2luaXQpOworbW9kdWxlX2V4aXQobXNwZWNfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIlNpbGljb24gR3JhcGhpY3MsIEluYy4gPGxpbnV4LWFsdGl4QHNnaS5jb20+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgU0dJIFNOIHNwZWNpYWwgbWVtb3J5IG9wZXJhdGlvbnMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9td2F2ZS9td2F2ZWRkLmMgYi9kcml2ZXJzL2NoYXIvbXdhdmUvbXdhdmVkZC5jCmluZGV4IDM5YTJlNjYuLjhkMTQ4MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9td2F2ZS9td2F2ZWRkLmMKKysrIGIvZHJpdmVycy9jaGFyL213YXZlL213YXZlZGQuYwpAQCAtMjk3LDcgKzI5Nyw3IEBACiAJCQkJIiBpcGNudW0gJXgsIHVzSW50Q291bnQgJXhcbiIsCiAJCQkJaXBjbnVtLAogCQkJCXBEcnZEYXRhLT5JUENzW2lwY251bV0udXNJbnRDb3VudCk7Ci0JCQlpZiAoaXBjbnVtID4gQVJSQVlfU0laRShwRHJ2RGF0YS0+SVBDcykpIHsKKwkJCWlmIChpcGNudW0gPj0gQVJSQVlfU0laRShwRHJ2RGF0YS0+SVBDcykpIHsKIAkJCQlQUklOVEtfRVJST1IoS0VSTl9FUlJfTVdBVkUKIAkJCQkJCSJtd2F2ZWRkOjptd2F2ZV9pb2N0bDoiCiAJCQkJCQkiIElPQ1RMX01XX0dFVF9JUEM6IEVycm9yOiIKQEAgLTM1NSw3ICszNTUsNyBAQAogCQkJCSJtd2F2ZWRkOjptd2F2ZV9pb2N0bCBJT0NUTF9NV19VTlJFR0lTVEVSX0lQQyIKIAkJCQkiIGlwY251bSAleFxuIiwKIAkJCQlpcGNudW0pOwotCQkJaWYgKGlwY251bSA+IEFSUkFZX1NJWkUocERydkRhdGEtPklQQ3MpKSB7CisJCQlpZiAoaXBjbnVtID49IEFSUkFZX1NJWkUocERydkRhdGEtPklQQ3MpKSB7CiAJCQkJUFJJTlRLX0VSUk9SKEtFUk5fRVJSX01XQVZFCiAJCQkJCQkibXdhdmVkZDo6bXdhdmVfaW9jdGw6IgogCQkJCQkJIiBJT0NUTF9NV19VTlJFR0lTVEVSX0lQQzoiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvbXhzZXIuYyBiL2RyaXZlcnMvY2hhci9teHNlci5jCmluZGV4IDU1NmFiZDMuLjI3YTY1MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9teHNlci5jCisrKyBiL2RyaXZlcnMvY2hhci9teHNlci5jCkBAIC0yNTU0LDcxICsyNTU0LDcgQEAKICNkZWZpbmUgQjkyMTYwMCAoQjQ2MDgwMCArMSkKICNlbmRpZgogCWlmIChteHNlcl9zZXRfYmF1ZF9tZXRob2RbaW5mby0+cG9ydF0gPT0gMCkgewotCQlzd2l0Y2ggKGNmbGFnICYgKENCQVVEIHwgQ0JBVURFWCkpIHsKLQkJY2FzZSBCOTIxNjAwOgotCQkJYmF1ZCA9IDkyMTYwMDsKLQkJCWJyZWFrOwotCQljYXNlIEI0NjA4MDA6Ci0JCQliYXVkID0gNDYwODAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQjIzMDQwMDoKLQkJCWJhdWQgPSAyMzA0MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBCMTE1MjAwOgotCQkJYmF1ZCA9IDExNTIwMDsKLQkJCWJyZWFrOwotCQljYXNlIEI1NzYwMDoKLQkJCWJhdWQgPSA1NzYwMDsKLQkJCWJyZWFrOwotCQljYXNlIEIzODQwMDoKLQkJCWJhdWQgPSAzODQwMDsKLQkJCWJyZWFrOwotCQljYXNlIEIxOTIwMDoKLQkJCWJhdWQgPSAxOTIwMDsKLQkJCWJyZWFrOwotCQljYXNlIEI5NjAwOgotCQkJYmF1ZCA9IDk2MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBCNDgwMDoKLQkJCWJhdWQgPSA0ODAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQjI0MDA6Ci0JCQliYXVkID0gMjQwMDsKLQkJCWJyZWFrOwotCQljYXNlIEIxODAwOgotCQkJYmF1ZCA9IDE4MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBCMTIwMDoKLQkJCWJhdWQgPSAxMjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQjYwMDoKLQkJCWJhdWQgPSA2MDA7Ci0JCQlicmVhazsKLQkJY2FzZSBCMzAwOgotCQkJYmF1ZCA9IDMwMDsKLQkJCWJyZWFrOwotCQljYXNlIEIyMDA6Ci0JCQliYXVkID0gMjAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQjE1MDoKLQkJCWJhdWQgPSAxNTA7Ci0JCQlicmVhazsKLQkJY2FzZSBCMTM0OgotCQkJYmF1ZCA9IDEzNDsKLQkJCWJyZWFrOwotCQljYXNlIEIxMTA6Ci0JCQliYXVkID0gMTEwOwotCQkJYnJlYWs7Ci0JCWNhc2UgQjc1OgotCQkJYmF1ZCA9IDc1OwotCQkJYnJlYWs7Ci0JCWNhc2UgQjUwOgotCQkJYmF1ZCA9IDUwOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQliYXVkID0gMDsKLQkJCWJyZWFrOwotCQl9CisJCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZShpbmZvLT50dHkpOwogCQlteHNlcl9zZXRfYmF1ZChpbmZvLCBiYXVkKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYyBiL2RyaXZlcnMvY2hhci9wYzg3MzZ4X2dwaW8uYwppbmRleCA4NGU1YTY4Li5lY2ZhZjE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvcGM4NzM2eF9ncGlvLmMKKysrIGIvZHJpdmVycy9jaGFyL3BjODczNnhfZ3Bpby5jCkBAIC0xODgsMTYgKzE4OCw2IEBACiAJcGM4NzM2eF9ncGlvX3NoYWRvd1twb3J0XSA9IHZhbDsKIH0KIAotc3RhdGljIHZvaWQgcGM4NzM2eF9ncGlvX3NldF9oaWdoKHVuc2lnbmVkIGluZGV4KQotewotCXBjODczNnhfZ3Bpb19zZXQoaW5kZXgsIDEpOwotfQotCi1zdGF0aWMgdm9pZCBwYzg3MzZ4X2dwaW9fc2V0X2xvdyh1bnNpZ25lZCBpbmRleCkKLXsKLQlwYzg3MzZ4X2dwaW9fc2V0KGluZGV4LCAwKTsKLX0KLQogc3RhdGljIGludCBwYzg3MzZ4X2dwaW9fY3VycmVudCh1bnNpZ25lZCBtaW5vcikKIHsKIAlpbnQgcG9ydCwgYml0OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3JhbmRvbS5jIGIvZHJpdmVycy9jaGFyL3JhbmRvbS5jCmluZGV4IDRjM2E1Y2EuLmI0MzBhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYW5kb20uYworKysgYi9kcml2ZXJzL2NoYXIvcmFuZG9tLmMKQEAgLTY1NSw2ICs2NTUsNyBAQAogCWFkZF90aW1lcl9yYW5kb21uZXNzKGlycV90aW1lcl9zdGF0ZVtpcnFdLCAweDEwMCArIGlycSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfQkxPQ0sKIHZvaWQgYWRkX2Rpc2tfcmFuZG9tbmVzcyhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKIAlpZiAoIWRpc2sgfHwgIWRpc2stPnJhbmRvbSkKQEAgLTY2Nyw2ICs2NjgsNyBAQAogfQogCiBFWFBPUlRfU1lNQk9MKGFkZF9kaXNrX3JhbmRvbW5lc3MpOworI2VuZGlmCiAKICNkZWZpbmUgRVhUUkFDVF9TSVpFIDEwCiAKQEAgLTkxOCw2ICs5MjAsNyBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19CTE9DSwogdm9pZCByYW5kX2luaXRpYWxpemVfZGlzayhzdHJ1Y3QgZ2VuZGlzayAqZGlzaykKIHsKIAlzdHJ1Y3QgdGltZXJfcmFuZF9zdGF0ZSAqc3RhdGU7CkBAIC05MzIsNiArOTM1LDcgQEAKIAkJZGlzay0+cmFuZG9tID0gc3RhdGU7CiAJfQogfQorI2VuZGlmCiAKIHN0YXRpYyBzc2l6ZV90CiByYW5kb21fcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvcmF3LmMgYi9kcml2ZXJzL2NoYXIvcmF3LmMKaW5kZXggNTc5ODY4YS4uODliNzE4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jhdy5jCisrKyBiL2RyaXZlcnMvY2hhci9yYXcuYwpAQCAtMjM4LDM5ICsyMzgsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3NpemVfdCByYXdfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaW92ZWMgbG9jYWxfaW92ID0gewotCQkuaW92X2Jhc2UgPSAoY2hhciBfX3VzZXIgKilidWYsCi0JCS5pb3ZfbGVuID0gY291bnQKLQl9OwotCi0JcmV0dXJuIGdlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2soZmlsZSwgJmxvY2FsX2lvdiwgMSwgcHBvcyk7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IHJhd19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJCXNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKLXsKLQlzdHJ1Y3QgaW92ZWMgbG9jYWxfaW92ID0gewotCQkuaW92X2Jhc2UgPSAoY2hhciBfX3VzZXIgKilidWYsCi0JCS5pb3ZfbGVuID0gY291bnQKLQl9OwotCi0JcmV0dXJuIGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsICZsb2NhbF9pb3YsIDEsICZpb2NiLT5raV9wb3MpOwotfQotCi0KIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhd19mb3BzID0gewotCS5yZWFkCT0JZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJPQlkb19zeW5jX3JlYWQsCiAJLmFpb19yZWFkID0gCWdlbmVyaWNfZmlsZV9haW9fcmVhZCwKLQkud3JpdGUJPQlyYXdfZmlsZV93cml0ZSwKLQkuYWlvX3dyaXRlID0gCXJhd19maWxlX2Fpb193cml0ZSwKKwkud3JpdGUJPQlkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUgPSAJZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2ssCiAJLm9wZW4JPQlyYXdfb3BlbiwKIAkucmVsZWFzZT0JcmF3X3JlbGVhc2UsCiAJLmlvY3RsCT0JcmF3X2lvY3RsLAotCS5yZWFkdgk9IAlnZW5lcmljX2ZpbGVfcmVhZHYsCi0JLndyaXRldgk9IAlnZW5lcmljX2ZpbGVfd3JpdGV2LAogCS5vd25lcgk9CVRISVNfTU9EVUxFLAogfTsKIApAQCAtMjg4LDMxICsyNjMsMzQgQEAKIHN0YXRpYyBpbnQgX19pbml0IHJhd19pbml0KHZvaWQpCiB7CiAJZGV2X3QgZGV2ID0gTUtERVYoUkFXX01BSk9SLCAwKTsKKwlpbnQgcmV0OwogCi0JaWYgKHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBNQVhfUkFXX01JTk9SUywgInJhdyIpKQorCXJldCA9IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBNQVhfUkFXX01JTk9SUywgInJhdyIpOworCWlmIChyZXQpCiAJCWdvdG8gZXJyb3I7CiAKIAljZGV2X2luaXQoJnJhd19jZGV2LCAmcmF3X2ZvcHMpOwotCWlmIChjZGV2X2FkZCgmcmF3X2NkZXYsIGRldiwgTUFYX1JBV19NSU5PUlMpKSB7CisJcmV0ID0gY2Rldl9hZGQoJnJhd19jZGV2LCBkZXYsIE1BWF9SQVdfTUlOT1JTKTsKKwlpZiAocmV0KSB7CiAJCWtvYmplY3RfcHV0KCZyYXdfY2Rldi5rb2JqKTsKLQkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgTUFYX1JBV19NSU5PUlMpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycm9yX3JlZ2lvbjsKIAl9CiAKIAlyYXdfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJyYXciKTsKIAlpZiAoSVNfRVJSKHJhd19jbGFzcykpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJFcnJvciBjcmVhdGluZyByYXcgY2xhc3MuXG4iKTsKIAkJY2Rldl9kZWwoJnJhd19jZGV2KTsKLQkJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKGRldiwgTUFYX1JBV19NSU5PUlMpOwotCQlnb3RvIGVycm9yOworCQlyZXQgPSBQVFJfRVJSKHJhd19jbGFzcyk7CisJCWdvdG8gZXJyb3JfcmVnaW9uOwogCX0KIAljbGFzc19kZXZpY2VfY3JlYXRlKHJhd19jbGFzcywgTlVMTCwgTUtERVYoUkFXX01BSk9SLCAwKSwgTlVMTCwgInJhd2N0bCIpOwogCiAJcmV0dXJuIDA7CiAKK2Vycm9yX3JlZ2lvbjoKKwl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2LCBNQVhfUkFXX01JTk9SUyk7CiBlcnJvcjoKLQlwcmludGsoS0VSTl9FUlIgImVycm9yIHJlZ2lzdGVyIHJhdyBkZXZpY2VcbiIpOwotCXJldHVybiAxOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCByYXdfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYyBiL2RyaXZlcnMvY2hhci9yaXNjb204LmMKaW5kZXggZjFjOTRmNy4uMDZiOWY3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Jpc2NvbTguYworKysgYi9kcml2ZXJzL2NoYXIvcmlzY29tOC5jCkBAIC02NzUsMjYgKzY3NSwxMiBAQAogCXBvcnQtPkNPUjIgPSAwOwogCXBvcnQtPk1TVlIgPSBNU1ZSX1JUUzsKIAkKLQliYXVkID0gQ19CQVVEKHR0eSk7Ci0JCi0JaWYgKGJhdWQgJiBDQkFVREVYKSB7Ci0JCWJhdWQgJj0gfkNCQVVERVg7Ci0JCWlmIChiYXVkIDwgMSB8fCBiYXVkID4gMikgCi0JCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgJj0gfkNCQVVERVg7Ci0JCWVsc2UKLQkJCWJhdWQgKz0gMTU7Ci0JfQotCWlmIChiYXVkID09IDE1KSAgewotCQlpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKLQkJCWJhdWQgKys7Ci0JCWlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKLQkJCWJhdWQgKz0gMjsKLQl9CisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CiAJCiAJLyogU2VsZWN0IHBvcnQgb24gdGhlIGJvYXJkICovCiAJcmNfb3V0KGJwLCBDRDE4MF9DQVIsIHBvcnRfTm8ocG9ydCkpOwogCQotCWlmICghYmF1ZF90YWJsZVtiYXVkXSkgIHsKKwlpZiAoIWJhdWQpICB7CiAJCS8qIERyb3AgRFRSICYgZXhpdCAqLwogCQlicC0+RFRSIHw9ICgxdSA8PCBwb3J0X05vKHBvcnQpKTsKIAkJcmNfb3V0KGJwLCBSQ19EVFIsIGJwLT5EVFIpOwpAQCAtNzEwLDcgKzY5Niw3IEBACiAJICovCiAJCiAJLyogU2V0IGJhdWQgcmF0ZSBmb3IgcG9ydCAqLwotCXRtcCA9ICgoKFJDX09TQ0ZSRVEgKyBiYXVkX3RhYmxlW2JhdWRdLzIpIC8gYmF1ZF90YWJsZVtiYXVkXSArCisJdG1wID0gKCgoUkNfT1NDRlJFUSArIGJhdWQvMikgLyBiYXVkICsKIAkJQ0QxODBfVFBDLzIpIC8gQ0QxODBfVFBDKTsKIAogCXJjX291dChicCwgQ0QxODBfUkJQUkgsICh0bXAgPj4gOCkgJiAweGZmKTsgCkBAIC03MTgsNyArNzA0LDcgQEAKIAlyY19vdXQoYnAsIENEMTgwX1JCUFJMLCB0bXAgJiAweGZmKTsgCiAJcmNfb3V0KGJwLCBDRDE4MF9UQlBSTCwgdG1wICYgMHhmZik7CiAJCi0JYmF1ZCA9IChiYXVkX3RhYmxlW2JhdWRdICsgNSkgLyAxMDsgICAvKiBFc3RpbWF0ZWQgQ1BTICovCisJYmF1ZCA9IChiYXVkICsgNSkgLyAxMDsgICAvKiBFc3RpbWF0ZWQgQ1BTICovCiAJCiAJLyogVHdvIHRpbWVyIHRpY2tzIHNlZW1zIGVub3VnaCB0byB3YWtldXAgc29tZXRoaW5nIGxpa2UgU0xJUCBkcml2ZXIgKi8KIAl0bXAgPSAoKGJhdWQgKyBIWi8yKSAvIEhaKSAqIDIgLSBDRDE4MF9ORklGTzsJCQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3J0Yy5jIGIvZHJpdmVycy9jaGFyL3J0Yy5jCmluZGV4IGFiNjQyOWIuLjY1NmY4YzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9ydGMuYworKysgYi9kcml2ZXJzL2NoYXIvcnRjLmMKQEAgLTEyNjIsMTAgKzEyNjIsOCBAQAogCSAqIE9uY2UgdGhlIHJlYWQgY2xlYXJzLCByZWFkIHRoZSBSVEMgdGltZSAoYWdhaW4gdmlhIGlvY3RsKS4gRWFzeS4KIAkgKi8KIAotCXdoaWxlIChydGNfaXNfdXBkYXRpbmcoKSAhPSAwICYmIGppZmZpZXMgLSB1aXBfd2F0Y2hkb2cgPCAyKkhaLzEwMCkgewotCQliYXJyaWVyKCk7CisJd2hpbGUgKHJ0Y19pc191cGRhdGluZygpICE9IDAgJiYgamlmZmllcyAtIHVpcF93YXRjaGRvZyA8IDIqSFovMTAwKQogCQljcHVfcmVsYXgoKTsKLQl9CiAKIAkvKgogCSAqIE9ubHkgdGhlIHZhbHVlcyB0aGF0IHdlIHJlYWQgZnJvbSB0aGUgUlRDIGFyZSBzZXQuIFdlIGxlYXZlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvczNjMjQxMC1ydGMuYyBiL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NDU4ZWYxLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvY2hhci9zM2MyNDEwLXJ0Yy5jCisrKyAvZGV2L251bGwKQEAgLTEsNTkxICswLDAgQEAKLS8qIGRyaXZlcnMvY2hhci9zM2MyNDEwX3J0Yy5jCi0gKgotICogQ29weXJpZ2h0IChjKSAyMDA0IFNpbXRlYyBFbGVjdHJvbmljcyA8bGludXhAc2ltdGVjLmNvLnVrPgotICoJCSAgICAgIGh0dHA6Ly93d3cuc2ltdGVjLmNvLnVrL3Byb2R1Y3RzL1NXTElOVVgvCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKiBTM0MyNDEwIEludGVybmFsIFJUQyBEcml2ZXIKLSAqCi0gKiAgQ2hhbmdlbG9nOgotICoJMDgtTm92LTIwMDQJQkpECUluaXRpYWwgY3JlYXRpb24KLSAqCTEyLU5vdi0yMDA0CUJKRAlBZGRlZCBwZXJpb2RpYyBJUlEgYW5kIFBNIGNvZGUKLSAqCTIyLU5vdi0yMDA0CUJKRAlTaWduLXRlc3Qgb24gYWxhcm0gY29kZSB0byBjaGVjayBmb3IgPDAKLSAqCTEwLU1hci0yMDA1CUxDVlIJQ2hhbmdlZCBTM0MyNDEwX1ZBX1JUQyB0byBTM0MyNFhYX1ZBX1JUQwotKi8KLQotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGxpbnV4L3J0Yy5oPgotI2luY2x1ZGUgPGxpbnV4L2JjZC5oPgotI2luY2x1ZGUgPGxpbnV4L2Nsay5oPgotCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3J0Yy5oPgotCi0jaW5jbHVkZSA8YXNtL21hY2gvdGltZS5oPgotCi0jaW5jbHVkZSA8YXNtL2FyY2gvcmVncy1ydGMuaD4KLQotLyogbmVlZCB0aGlzIGZvciB0aGUgUlRDX0FGIGRlZmluaXRpb25zICovCi0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLQotI3VuZGVmIFMzQzI0WFhfVkFfUlRDCi0jZGVmaW5lIFMzQzI0WFhfVkFfUlRDIHMzYzI0MTBfcnRjX2Jhc2UKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqczNjMjQxMF9ydGNfbWVtOwotCi1zdGF0aWMgdm9pZCBfX2lvbWVtICpzM2MyNDEwX3J0Y19iYXNlOwotc3RhdGljIGludCBzM2MyNDEwX3J0Y19hbGFybW5vID0gTk9fSVJROwotc3RhdGljIGludCBzM2MyNDEwX3J0Y190aWNrbm8gID0gTk9fSVJROwotc3RhdGljIGludCBzM2MyNDEwX3J0Y19mcmVxICAgID0gMTsKLQotc3RhdGljIERFRklORV9TUElOTE9DSyhzM2MyNDEwX3J0Y19waWVfbG9jayk7Ci0KLS8qIElSUSBIYW5kbGVycyAqLwotCi1zdGF0aWMgaXJxcmV0dXJuX3QgczNjMjQxMF9ydGNfYWxhcm1pcnEoaW50IGlycSwgdm9pZCAqaWQsIHN0cnVjdCBwdF9yZWdzICpyKQotewotCXJ0Y191cGRhdGUoMSwgUlRDX0FGIHwgUlRDX0lSUUYpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHMzYzI0MTBfcnRjX3RpY2tpcnEoaW50IGlycSwgdm9pZCAqaWQsIHN0cnVjdCBwdF9yZWdzICpyKQotewotCXJ0Y191cGRhdGUoMSwgUlRDX1BGIHwgUlRDX0lSUUYpOwotCXJldHVybiBJUlFfSEFORExFRDsKLX0KLQotLyogVXBkYXRlIGNvbnRyb2wgcmVnaXN0ZXJzICovCi1zdGF0aWMgdm9pZCBzM2MyNDEwX3J0Y19zZXRhaWUoaW50IHRvKQotewotCXVuc2lnbmVkIGludCB0bXA7Ci0KLQlwcl9kZWJ1ZygiJXM6IGFpZT0lZFxuIiwgX19GVU5DVElPTl9fLCB0byk7Ci0KLQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0FMTSk7Ci0KLQlpZiAodG8pCi0JCXRtcCB8PSBTM0MyNDEwX1JUQ0FMTV9BTE1FTjsKLQllbHNlCi0JCXRtcCAmPSB+UzNDMjQxMF9SVENBTE1fQUxNRU47Ci0KLQotCXdyaXRlYih0bXAsIFMzQzI0MTBfUlRDQUxNKTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMF9ydGNfc2V0cGllKGludCB0bykKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0JcHJfZGVidWcoIiVzOiBwaWU9JWRcbiIsIF9fRlVOQ1RJT05fXywgdG8pOwotCi0Jc3Bpbl9sb2NrX2lycSgmczNjMjQxMF9ydGNfcGllX2xvY2spOwotCXRtcCA9IHJlYWRiKFMzQzI0MTBfVElDTlQpICYgflMzQzI0MTBfVElDTlRfRU5BQkxFOwotCi0JaWYgKHRvKQotCQl0bXAgfD0gUzNDMjQxMF9USUNOVF9FTkFCTEU7Ci0KLQl3cml0ZWIodG1wLCBTM0MyNDEwX1RJQ05UKTsKLQlzcGluX3VubG9ja19pcnEoJnMzYzI0MTBfcnRjX3BpZV9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgczNjMjQxMF9ydGNfc2V0ZnJlcShpbnQgZnJlcSkKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0Jc3Bpbl9sb2NrX2lycSgmczNjMjQxMF9ydGNfcGllX2xvY2spOwotCXRtcCA9IHJlYWRiKFMzQzI0MTBfVElDTlQpICYgUzNDMjQxMF9USUNOVF9FTkFCTEU7Ci0KLQlzM2MyNDEwX3J0Y19mcmVxID0gZnJlcTsKLQotCXRtcCB8PSAoMTI4IC8gZnJlcSktMTsKLQotCXdyaXRlYih0bXAsIFMzQzI0MTBfVElDTlQpOwotCXNwaW5fdW5sb2NrX2lycSgmczNjMjQxMF9ydGNfcGllX2xvY2spOwotfQotCi0vKiBUaW1lIHJlYWQvd3JpdGUgKi8KLQotc3RhdGljIGludCBzM2MyNDEwX3J0Y19nZXR0aW1lKHN0cnVjdCBydGNfdGltZSAqcnRjX3RtKQotewotCXVuc2lnbmVkIGludCBoYXZlX3JldHJpZWQgPSAwOwotCi0gcmV0cnlfZ2V0X3RpbWU6Ci0JcnRjX3RtLT50bV9taW4gID0gcmVhZGIoUzNDMjQxMF9SVENNSU4pOwotCXJ0Y190bS0+dG1faG91ciA9IHJlYWRiKFMzQzI0MTBfUlRDSE9VUik7Ci0JcnRjX3RtLT50bV9tZGF5ID0gcmVhZGIoUzNDMjQxMF9SVENEQVRFKTsKLQlydGNfdG0tPnRtX21vbiAgPSByZWFkYihTM0MyNDEwX1JUQ01PTik7Ci0JcnRjX3RtLT50bV95ZWFyID0gcmVhZGIoUzNDMjQxMF9SVENZRUFSKTsKLQlydGNfdG0tPnRtX3NlYyAgPSByZWFkYihTM0MyNDEwX1JUQ1NFQyk7Ci0KLQkvKiB0aGUgb25seSB3YXkgdG8gd29yayBvdXQgd2V0aGVyIHRoZSBzeXN0ZW0gd2FzIG1pZC11cGRhdGUKLQkgKiB3aGVuIHdlIHJlYWQgaXQgaXMgdG8gY2hlY2sgdGhlIHNlY29uZCBjb3VudGVyLCBhbmQgaWYgaXQKLQkgKiBpcyB6ZXJvLCB0aGVuIHdlIHJlLXRyeSB0aGUgZW50aXJlIHJlYWQKLQkgKi8KLQotCWlmIChydGNfdG0tPnRtX3NlYyA9PSAwICYmICFoYXZlX3JldHJpZWQpIHsKLQkJaGF2ZV9yZXRyaWVkID0gMTsKLQkJZ290byByZXRyeV9nZXRfdGltZTsKLQl9Ci0KLQlwcl9kZWJ1ZygicmVhZCB0aW1lICUwMnguJTAyeC4lMDJ4ICUwMngvJTAyeC8lMDJ4XG4iLAotCQkgcnRjX3RtLT50bV95ZWFyLCBydGNfdG0tPnRtX21vbiwgcnRjX3RtLT50bV9tZGF5LAotCQkgcnRjX3RtLT50bV9ob3VyLCBydGNfdG0tPnRtX21pbiwgcnRjX3RtLT50bV9zZWMpOwotCi0JQkNEX1RPX0JJTihydGNfdG0tPnRtX3NlYyk7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX21pbik7Ci0JQkNEX1RPX0JJTihydGNfdG0tPnRtX2hvdXIpOwotCUJDRF9UT19CSU4ocnRjX3RtLT50bV9tZGF5KTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1fbW9uKTsKLQlCQ0RfVE9fQklOKHJ0Y190bS0+dG1feWVhcik7Ci0KLQlydGNfdG0tPnRtX3llYXIgKz0gMTAwOwotCXJ0Y190bS0+dG1fbW9uIC09IDE7Ci0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3NldHRpbWUoc3RydWN0IHJ0Y190aW1lICp0bSkKLXsKLQkvKiB0aGUgcnRjIGdldHMgcm91bmQgdGhlIHkyayBwcm9ibGVtIGJ5IGp1c3Qgbm90IHN1cHBvcnRpbmcgaXQgKi8KLQotCWlmICh0bS0+dG1feWVhciA8IDEwMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fc2VjKSwgIFMzQzI0MTBfUlRDU0VDKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgIFMzQzI0MTBfUlRDTUlOKTsKLQl3cml0ZWIoQklOMkJDRCh0bS0+dG1faG91ciksIFMzQzI0MTBfUlRDSE9VUik7Ci0Jd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBTM0MyNDEwX1JUQ0RBVEUpOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV9tb24gKyAxKSwgUzNDMjQxMF9SVENNT04pOwotCXdyaXRlYihCSU4yQkNEKHRtLT50bV95ZWFyIC0gMTAwKSwgUzNDMjQxMF9SVENZRUFSKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX2dldGFsYXJtKHN0cnVjdCBydGNfd2thbHJtICphbHJtKQotewotCXN0cnVjdCBydGNfdGltZSAqYWxtX3RtID0gJmFscm0tPnRpbWU7Ci0JdW5zaWduZWQgaW50IGFsbV9lbjsKLQotCWFsbV90bS0+dG1fc2VjICA9IHJlYWRiKFMzQzI0MTBfQUxNU0VDKTsKLQlhbG1fdG0tPnRtX21pbiAgPSByZWFkYihTM0MyNDEwX0FMTU1JTik7Ci0JYWxtX3RtLT50bV9ob3VyID0gcmVhZGIoUzNDMjQxMF9BTE1IT1VSKTsKLQlhbG1fdG0tPnRtX21vbiAgPSByZWFkYihTM0MyNDEwX0FMTU1PTik7Ci0JYWxtX3RtLT50bV9tZGF5ID0gcmVhZGIoUzNDMjQxMF9BTE1EQVRFKTsKLQlhbG1fdG0tPnRtX3llYXIgPSByZWFkYihTM0MyNDEwX0FMTVlFQVIpOwotCi0JYWxtX2VuID0gcmVhZGIoUzNDMjQxMF9SVENBTE0pOwotCi0JcHJfZGVidWcoInJlYWQgYWxhcm0gJTAyeCAlMDJ4LiUwMnguJTAyeCAlMDJ4LyUwMngvJTAyeFxuIiwKLQkJIGFsbV9lbiwKLQkJIGFsbV90bS0+dG1feWVhciwgYWxtX3RtLT50bV9tb24sIGFsbV90bS0+dG1fbWRheSwKLQkJIGFsbV90bS0+dG1faG91ciwgYWxtX3RtLT50bV9taW4sIGFsbV90bS0+dG1fc2VjKTsKLQotCi0JLyogZGVjb2RlIHRoZSBhbGFybSBlbmFibGUgZmllbGQgKi8KLQotCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9TRUNFTikgewotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fc2VjKTsKLQl9IGVsc2UgewotCQlhbG1fdG0tPnRtX3NlYyA9IDB4ZmY7Ci0JfQotCi0JaWYgKGFsbV9lbiAmIFMzQzI0MTBfUlRDQUxNX01JTkVOKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9taW4pOwotCX0gZWxzZSB7Ci0JCWFsbV90bS0+dG1fbWluID0gMHhmZjsKLQl9Ci0KLQlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fSE9VUkVOKSB7Ci0JCUJDRF9UT19CSU4oYWxtX3RtLT50bV9ob3VyKTsKLQl9IGVsc2UgewotCQlhbG1fdG0tPnRtX2hvdXIgPSAweGZmOwotCX0KLQotCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9EQVlFTikgewotCQlCQ0RfVE9fQklOKGFsbV90bS0+dG1fbWRheSk7Ci0JfSBlbHNlIHsKLQkJYWxtX3RtLT50bV9tZGF5ID0gMHhmZjsKLQl9Ci0KLQlpZiAoYWxtX2VuICYgUzNDMjQxMF9SVENBTE1fTU9ORU4pIHsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX21vbik7Ci0JCWFsbV90bS0+dG1fbW9uIC09IDE7Ci0JfSBlbHNlIHsKLQkJYWxtX3RtLT50bV9tb24gPSAweGZmOwotCX0KLQotCWlmIChhbG1fZW4gJiBTM0MyNDEwX1JUQ0FMTV9ZRUFSRU4pIHsKLQkJQkNEX1RPX0JJTihhbG1fdG0tPnRtX3llYXIpOwotCX0gZWxzZSB7Ci0JCWFsbV90bS0+dG1feWVhciA9IDB4ZmZmZjsKLQl9Ci0KLQkvKiB0b2RvIC0gc2V0IGFscm0tPmVuYWJsZWQgPyAqLwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfc2V0YWxhcm0oc3RydWN0IHJ0Y193a2Fscm0gKmFscm0pCi17Ci0Jc3RydWN0IHJ0Y190aW1lICp0bSA9ICZhbHJtLT50aW1lOwotCXVuc2lnbmVkIGludCBhbHJtX2VuOwotCi0JcHJfZGVidWcoInMzYzI0MTBfcnRjX3NldGFsYXJtOiAlZCwgJTAyeC8lMDJ4LyUwMnggJTAyeC4lMDJ4LiUwMnhcbiIsCi0JCSBhbHJtLT5lbmFibGVkLAotCQkgdG0tPnRtX21kYXkgJiAweGZmLCB0bS0+dG1fbW9uICYgMHhmZiwgdG0tPnRtX3llYXIgJiAweGZmLAotCQkgdG0tPnRtX2hvdXIgJiAweGZmLCB0bS0+dG1fbWluICYgMHhmZiwgdG0tPnRtX3NlYyk7Ci0KLQlpZiAoYWxybS0+ZW5hYmxlZCB8fCAxKSB7Ci0JCWFscm1fZW4gPSByZWFkYihTM0MyNDEwX1JUQ0FMTSkgJiBTM0MyNDEwX1JUQ0FMTV9BTE1FTjsKLQkJd3JpdGViKDB4MDAsIFMzQzI0MTBfUlRDQUxNKTsKLQotCQlpZiAodG0tPnRtX3NlYyA8IDYwICYmIHRtLT50bV9zZWMgPj0gMCkgewotCQkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9TRUNFTjsKLQkJCXdyaXRlYihCSU4yQkNEKHRtLT50bV9zZWMpLCBTM0MyNDEwX0FMTVNFQyk7Ci0JCX0KLQotCQlpZiAodG0tPnRtX21pbiA8IDYwICYmIHRtLT50bV9taW4gPj0gMCkgewotCQkJYWxybV9lbiB8PSBTM0MyNDEwX1JUQ0FMTV9NSU5FTjsKLQkJCXdyaXRlYihCSU4yQkNEKHRtLT50bV9taW4pLCBTM0MyNDEwX0FMTU1JTik7Ci0JCX0KLQotCQlpZiAodG0tPnRtX2hvdXIgPCAyNCAmJiB0bS0+dG1faG91ciA+PSAwKSB7Ci0JCQlhbHJtX2VuIHw9IFMzQzI0MTBfUlRDQUxNX0hPVVJFTjsKLQkJCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgUzNDMjQxMF9BTE1IT1VSKTsKLQkJfQotCi0JCXByX2RlYnVnKCJzZXR0aW5nIFMzQzI0MTBfUlRDQUxNIHRvICUwOHhcbiIsIGFscm1fZW4pOwotCi0JCXdyaXRlYihhbHJtX2VuLCBTM0MyNDEwX1JUQ0FMTSk7Ci0JCWVuYWJsZV9pcnFfd2FrZShzM2MyNDEwX3J0Y19hbGFybW5vKTsKLQl9IGVsc2UgewotCQlhbHJtX2VuID0gcmVhZGIoUzNDMjQxMF9SVENBTE0pOwotCQlhbHJtX2VuICY9IH5TM0MyNDEwX1JUQ0FMTV9BTE1FTjsKLQkJd3JpdGViKGFscm1fZW4sIFMzQzI0MTBfUlRDQUxNKTsKLQkJZGlzYWJsZV9pcnFfd2FrZShzM2MyNDEwX3J0Y19hbGFybW5vKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3J0Y19pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgUlRDX0FJRV9PRkY6Ci0JY2FzZSBSVENfQUlFX09OOgotCQlzM2MyNDEwX3J0Y19zZXRhaWUoKGNtZCA9PSBSVENfQUlFX09OKSA/IDEgOiAwKTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFJUQ19QSUVfT0ZGOgotCWNhc2UgUlRDX1BJRV9PTjoKLQkJczNjMjQxMF9ydGNfc2V0cGllKChjbWQgPT0gUlRDX1BJRV9PTikgPyAxIDogMCk7Ci0JCXJldHVybiAwOwotCi0JY2FzZSBSVENfSVJRUF9SRUFEOgotCQlyZXR1cm4gcHV0X3VzZXIoczNjMjQxMF9ydGNfZnJlcSwgKHVuc2lnbmVkIGxvbmcgX191c2VyICopYXJnKTsKLQotCWNhc2UgUlRDX0lSUVBfU0VUOgotCQlpZiAoYXJnIDwgMSB8fCBhcmcgPiA2NCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmICghY2FwYWJsZShDQVBfU1lTX1JFU09VUkNFKSkKLQkJCXJldHVybiAtRUFDQ0VTOwotCi0JCS8qIGNoZWNrIGZvciBwb3dlciBvZiAyICovCi0KLQkJaWYgKChhcmcgJiAoYXJnLTEpKSAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBzZXR0aW5nIGZyZXF1ZW5jeSAlbGRcbiIsIGFyZyk7Ci0KLQkJczNjMjQxMF9ydGNfc2V0ZnJlcShhcmcpOwotCQlyZXR1cm4gMDsKLQotCWNhc2UgUlRDX1VJRV9PTjoKLQljYXNlIFJUQ19VSUVfT0ZGOgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gLUVJTlZBTDsKLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3J0Y19wcm9jKGNoYXIgKmJ1ZikKLXsKLQl1bnNpZ25lZCBpbnQgcnRjYWxtID0gcmVhZGIoUzNDMjQxMF9SVENBTE0pOwotCXVuc2lnbmVkIGludCB0aWNudCA9IHJlYWRiIChTM0MyNDEwX1RJQ05UKTsKLQljaGFyICpwID0gYnVmOwotCi0JcCArPSBzcHJpbnRmKHAsICJhbGFybV9JUlFcdDogJXNcbiIsCi0JCSAgICAgKHJ0Y2FsbSAmIFMzQzI0MTBfUlRDQUxNX0FMTUVOKSA/ICJ5ZXMiIDogIm5vIiApOwotCXAgKz0gc3ByaW50ZihwLCAicGVyaW9kaWNfSVJRXHQ6ICVzXG4iLAotCQkgICAgICh0aWNudCAmIFMzQzI0MTBfVElDTlRfRU5BQkxFKSA/ICJ5ZXMiIDogIm5vIiApOwotCXAgKz0gc3ByaW50ZihwLCAicGVyaW9kaWNfZnJlcVx0OiAlZFxuIiwgczNjMjQxMF9ydGNfZnJlcSk7Ci0KLQlyZXR1cm4gcCAtIGJ1ZjsKLX0KLQotc3RhdGljIGludCBzM2MyNDEwX3J0Y19vcGVuKHZvaWQpCi17Ci0JaW50IHJldDsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHMzYzI0MTBfcnRjX2FsYXJtbm8sIHMzYzI0MTBfcnRjX2FsYXJtaXJxLAotCQkJICBJUlFGX0RJU0FCTEVELCAgInMzYzI0MTAtcnRjIGFsYXJtIiwgTlVMTCk7Ci0KLQlpZiAocmV0KQotCQlwcmludGsoS0VSTl9FUlIgIklSUSVkIGFscmVhZHkgaW4gdXNlXG4iLCBzM2MyNDEwX3J0Y19hbGFybW5vKTsKLQotCXJldCA9IHJlcXVlc3RfaXJxKHMzYzI0MTBfcnRjX3RpY2tubywgczNjMjQxMF9ydGNfdGlja2lycSwKLQkJCSAgSVJRRl9ESVNBQkxFRCwgICJzM2MyNDEwLXJ0YyB0aWNrIiwgTlVMTCk7Ci0KLQlpZiAocmV0KSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiSVJRJWQgYWxyZWFkeSBpbiB1c2VcbiIsIHMzYzI0MTBfcnRjX3RpY2tubyk7Ci0JCWdvdG8gdGlja19lcnI7Ci0JfQotCi0JcmV0dXJuIHJldDsKLQotIHRpY2tfZXJyOgotCWZyZWVfaXJxKHMzYzI0MTBfcnRjX2FsYXJtbm8sIE5VTEwpOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIHMzYzI0MTBfcnRjX3JlbGVhc2Uodm9pZCkKLXsKLQkvKiBkbyBub3QgY2xlYXIgQUlFIGhlcmUsIGl0IG1heSBiZSBuZWVkZWQgZm9yIHdha2UgKi8KLQotCXMzYzI0MTBfcnRjX3NldHBpZSgwKTsKLQlmcmVlX2lycShzM2MyNDEwX3J0Y19hbGFybW5vLCBOVUxMKTsKLQlmcmVlX2lycShzM2MyNDEwX3J0Y190aWNrbm8sIE5VTEwpOwotfQotCi1zdGF0aWMgc3RydWN0IHJ0Y19vcHMgczNjMjQxMF9ydGNvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IHMzYzI0MTBfcnRjX29wZW4sCi0JLnJlbGVhc2UJPSBzM2MyNDEwX3J0Y19yZWxlYXNlLAotCS5pb2N0bAkJPSBzM2MyNDEwX3J0Y19pb2N0bCwKLQkucmVhZF90aW1lCT0gczNjMjQxMF9ydGNfZ2V0dGltZSwKLQkuc2V0X3RpbWUJPSBzM2MyNDEwX3J0Y19zZXR0aW1lLAotCS5yZWFkX2FsYXJtCT0gczNjMjQxMF9ydGNfZ2V0YWxhcm0sCi0JLnNldF9hbGFybQk9IHMzYzI0MTBfcnRjX3NldGFsYXJtLAotCS5wcm9jCSAgICAgICAgPSBzM2MyNDEwX3J0Y19wcm9jLAotfTsKLQotc3RhdGljIHZvaWQgczNjMjQxMF9ydGNfZW5hYmxlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBlbikKLXsKLQl1bnNpZ25lZCBpbnQgdG1wOwotCi0JaWYgKHMzYzI0MTBfcnRjX2Jhc2UgPT0gTlVMTCkKLQkJcmV0dXJuOwotCi0JaWYgKCFlbikgewotCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7Ci0JCXdyaXRlYih0bXAgJiB+UzNDMjQxMF9SVENDT05fUlRDRU4sIFMzQzI0MTBfUlRDQ09OKTsKLQotCQl0bXAgPSByZWFkYihTM0MyNDEwX1RJQ05UKTsKLQkJd3JpdGViKHRtcCAmIH5TM0MyNDEwX1RJQ05UX0VOQUJMRSwgUzNDMjQxMF9USUNOVCk7Ci0JfSBlbHNlIHsKLQkJLyogcmUtZW5hYmxlIHRoZSBkZXZpY2UsIGFuZCBjaGVjayBpdCBpcyBvayAqLwotCi0JCWlmICgocmVhZGIoUzNDMjQxMF9SVENDT04pICYgUzNDMjQxMF9SVENDT05fUlRDRU4pID09IDApewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJ0YyBkaXNhYmxlZCwgcmUtZW5hYmxpbmdcbiIpOwotCi0JCQl0bXAgPSByZWFkYihTM0MyNDEwX1JUQ0NPTik7Ci0JCQl3cml0ZWIodG1wIHwgUzNDMjQxMF9SVENDT05fUlRDRU4gLCBTM0MyNDEwX1JUQ0NPTik7Ci0JCX0KLQotCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NOVFNFTCkpewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NOVFNFTFxuIik7Ci0KLQkJCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKLQkJCXdyaXRlYih0bXAmIH5TM0MyNDEwX1JUQ0NPTl9DTlRTRUwgLCBTM0MyNDEwX1JUQ0NPTik7Ci0JCX0KLQotCQlpZiAoKHJlYWRiKFMzQzI0MTBfUlRDQ09OKSAmIFMzQzI0MTBfUlRDQ09OX0NMS1JTVCkpewotCQkJZGV2X2luZm8oJnBkZXYtPmRldiwgInJlbW92aW5nIFMzQzI0MTBfUlRDQ09OX0NMS1JTVFxuIik7Ci0KLQkJCXRtcCA9IHJlYWRiKFMzQzI0MTBfUlRDQ09OKTsKLQkJCXdyaXRlYih0bXAgJiB+UzNDMjQxMF9SVENDT05fQ0xLUlNULCBTM0MyNDEwX1JUQ0NPTik7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKLXsKLQl1bnJlZ2lzdGVyX3J0YygmczNjMjQxMF9ydGNvcHMpOwotCi0JczNjMjQxMF9ydGNfc2V0cGllKDApOwotCXMzYzI0MTBfcnRjX3NldGFpZSgwKTsKLQotCWlmIChzM2MyNDEwX3J0Y19tZW0gIT0gTlVMTCkgewotCQlwcl9kZWJ1ZygiczNjMjQxMF9ydGM6IHJlbGVhc2luZyBzM2MyNDEwX3J0Y19tZW1cbiIpOwotCQlpb3VubWFwKHMzYzI0MTBfcnRjX2Jhc2UpOwotCQlyZWxlYXNlX3Jlc291cmNlKHMzYzI0MTBfcnRjX21lbSk7Ci0JCWtmcmVlKHMzYzI0MTBfcnRjX21lbSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgczNjMjQxMF9ydGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlpbnQgcmV0OwotCi0JcHJfZGVidWcoIiVzOiBwcm9iZT0lcFxuIiwgX19GVU5DVElPTl9fLCBwZGV2KTsKLQotCS8qIGZpbmQgdGhlIElSUXMgKi8KLQotCXMzYzI0MTBfcnRjX3RpY2tubyA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7Ci0JaWYgKHMzYzI0MTBfcnRjX3RpY2tubyA8IDApIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIGZvciBydGMgdGlja1xuIik7Ci0JCXJldHVybiAtRU5PRU5UOwotCX0KLQotCXMzYzI0MTBfcnRjX2FsYXJtbm8gPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwotCWlmIChzM2MyNDEwX3J0Y19hbGFybW5vIDwgMCkgewotCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBpcnEgZm9yIGFsYXJtXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JcHJfZGVidWcoInMzYzI0MTBfcnRjOiB0aWNrIGlycSAlZCwgYWxhcm0gaXJxICVkXG4iLAotCQkgczNjMjQxMF9ydGNfdGlja25vLCBzM2MyNDEwX3J0Y19hbGFybW5vKTsKLQotCS8qIGdldCB0aGUgbWVtb3J5IHJlZ2lvbiAqLwotCi0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKLQlpZiAocmVzID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIHRvIGdldCBtZW1vcnkgcmVnaW9uIHJlc291cmNlXG4iKTsKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0JfQotCi0JczNjMjQxMF9ydGNfbWVtID0gcmVxdWVzdF9tZW1fcmVnaW9uKHJlcy0+c3RhcnQsIHJlcy0+ZW5kLXJlcy0+c3RhcnQrMSwKLQkJCQkgICAgIHBkZXYtPm5hbWUpOwotCi0JaWYgKHMzYzI0MTBfcnRjX21lbSA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgImZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSByZWdpb25cbiIpOwotCQlyZXQgPSAtRU5PRU5UOwotCQlnb3RvIGV4aXRfZXJyOwotCX0KLQotCXMzYzI0MTBfcnRjX2Jhc2UgPSBpb3JlbWFwKHJlcy0+c3RhcnQsIHJlcy0+ZW5kIC0gcmVzLT5zdGFydCArIDEpOwotCWlmIChzM2MyNDEwX3J0Y19iYXNlID09IE5VTEwpIHsKLQkJZGV2X2VycigmcGRldi0+ZGV2LCAiZmFpbGVkIGlvcmVtYXAoKVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdF9lcnI7Ci0JfQotCi0JczNjMjQxMF9ydGNfbWVtID0gcmVzOwotCXByX2RlYnVnKCJzM2MyNDEwX3J0Y19iYXNlPSVwXG4iLCBzM2MyNDEwX3J0Y19iYXNlKTsKLQotIAlwcl9kZWJ1ZygiczNjMjQxMF9ydGM6IFJUQ0NPTj0lMDJ4XG4iLCByZWFkYihTM0MyNDEwX1JUQ0NPTikpOwotCi0JLyogY2hlY2sgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgaXMgc2V0dXAgY29ycmVjdGx5ICovCi0KLQlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7Ci0KLSAJcHJfZGVidWcoInMzYzI0MTBfcnRjOiBSVENDT049JTAyeFxuIiwgcmVhZGIoUzNDMjQxMF9SVENDT04pKTsKLQotCXMzYzI0MTBfcnRjX3NldGZyZXEoczNjMjQxMF9ydGNfZnJlcSk7Ci0KLQkvKiByZWdpc3RlciBSVEMgYW5kIGV4aXQgKi8KLQotCXJlZ2lzdGVyX3J0YygmczNjMjQxMF9ydGNvcHMpOwotCXJldHVybiAwOwotCi0gZXhpdF9lcnI6Ci0JZGV2X2VycigmcGRldi0+ZGV2LCAiZXJyb3IgJWQgZHVyaW5nIGluaXRpYWxpc2F0aW9uXG4iLCByZXQpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotI2lmZGVmIENPTkZJR19QTQotCi0vKiBTM0MyNDEwIFJUQyBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KLQotc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBzM2MyNDEwX3J0Y19kZWx0YTsKLQotc3RhdGljIGludCB0aWNudF9zYXZlOwotCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQotewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0KLQkvKiBzYXZlIFRJQ05UIGZvciBhbnlvbmUgdXNpbmcgcGVyaW9kaWMgaW50ZXJydXB0cyAqLwotCi0JdGljbnRfc2F2ZSA9IHJlYWRiKFMzQzI0MTBfVElDTlQpOwotCi0JLyogY2FsY3VsYXRlIHRpbWUgZGVsdGEgZm9yIHN1c3BlbmQgKi8KLQotCXMzYzI0MTBfcnRjX2dldHRpbWUoJnRtKTsKLQlydGNfdG1fdG9fdGltZSgmdG0sICZ0aW1lLnR2X3NlYyk7Ci0Jc2F2ZV90aW1lX2RlbHRhKCZzM2MyNDEwX3J0Y19kZWx0YSwgJnRpbWUpOwotCXMzYzI0MTBfcnRjX2VuYWJsZShwZGV2LCAwKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHMzYzI0MTBfcnRjX3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVjdCBydGNfdGltZSB0bTsKLQlzdHJ1Y3QgdGltZXNwZWMgdGltZTsKLQotCXRpbWUudHZfbnNlYyA9IDA7Ci0KLQlzM2MyNDEwX3J0Y19lbmFibGUocGRldiwgMSk7Ci0JczNjMjQxMF9ydGNfZ2V0dGltZSgmdG0pOwotCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKLQlyZXN0b3JlX3RpbWVfZGVsdGEoJnMzYzI0MTBfcnRjX2RlbHRhLCAmdGltZSk7Ci0KLQl3cml0ZWIodGljbnRfc2F2ZSwgUzNDMjQxMF9USUNOVCk7Ci0JcmV0dXJuIDA7Ci19Ci0jZWxzZQotI2RlZmluZSBzM2MyNDEwX3J0Y19zdXNwZW5kIE5VTEwKLSNkZWZpbmUgczNjMjQxMF9ydGNfcmVzdW1lICBOVUxMCi0jZW5kaWYKLQotc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgczNjMjQxMF9ydGNkcnYgPSB7Ci0JLnByb2JlCQk9IHMzYzI0MTBfcnRjX3Byb2JlLAotCS5yZW1vdmUJCT0gczNjMjQxMF9ydGNfcmVtb3ZlLAotCS5zdXNwZW5kCT0gczNjMjQxMF9ydGNfc3VzcGVuZCwKLQkucmVzdW1lCQk9IHMzYzI0MTBfcnRjX3Jlc3VtZSwKLQkuZHJpdmVyCQk9IHsKLQkJLm5hbWUJPSAiczNjMjQxMC1ydGMiLAotCQkub3duZXIJPSBUSElTX01PRFVMRSwKLQl9LAotfTsKLQotc3RhdGljIGNoYXIgX19pbml0ZGF0YSBiYW5uZXJbXSA9ICJTM0MyNDEwIFJUQywgKGMpIDIwMDQgU2ltdGVjIEVsZWN0cm9uaWNzXG4iOwotCi1zdGF0aWMgaW50IF9faW5pdCBzM2MyNDEwX3J0Y19pbml0KHZvaWQpCi17Ci0JcHJpbnRrKGJhbm5lcik7Ci0JcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmczNjMjQxMF9ydGNkcnYpOwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgczNjMjQxMF9ydGNfZXhpdCh2b2lkKQotewotCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZzM2MyNDEwX3J0Y2Rydik7Ci19Ci0KLW1vZHVsZV9pbml0KHMzYzI0MTBfcnRjX2luaXQpOwotbW9kdWxlX2V4aXQoczNjMjQxMF9ydGNfZXhpdCk7Ci0KLU1PRFVMRV9ERVNDUklQVElPTigiUzNDMjRYWCBSVEMgRHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJCZW4gRG9va3MsIDxiZW5Ac2ltdGVjLmNvLnVrPiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NjeDIwMF9ncGlvLmMgYi9kcml2ZXJzL2NoYXIvc2N4MjAwX2dwaW8uYwppbmRleCBiOTU2YzdiLi45OWU1MjcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvc2N4MjAwX2dwaW8uYworKysgYi9kcml2ZXJzL2NoYXIvc2N4MjAwX2dwaW8uYwpAQCAtNDQsNyArNDQsNyBAQAogCS5ncGlvX2NoYW5nZQk9IHNjeDIwMF9ncGlvX2NoYW5nZSwKIAkuZ3Bpb19jdXJyZW50CT0gc2N4MjAwX2dwaW9fY3VycmVudAogfTsKLUVYUE9SVF9TWU1CT0woc2N4MjAwX2dwaW9fb3BzKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHNjeDIwMF9ncGlvX29wcyk7CiAKIHN0YXRpYyBpbnQgc2N4MjAwX2dwaW9fb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKQEAgLTY5LDcgKzY5LDcgQEAKIAkucmVsZWFzZSA9IHNjeDIwMF9ncGlvX3JlbGVhc2UsCiB9OwogCi1zdHJ1Y3QgY2RldiBzY3gyMDBfZ3Bpb19jZGV2OyAgLyogdXNlIDEgY2RldiBmb3IgYWxsIHBpbnMgKi8KK3N0YXRpYyBzdHJ1Y3QgY2RldiBzY3gyMDBfZ3Bpb19jZGV2OyAgLyogdXNlIDEgY2RldiBmb3IgYWxsIHBpbnMgKi8KIAogc3RhdGljIGludCBfX2luaXQgc2N4MjAwX2dwaW9faW5pdCh2b2lkKQogewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jIGIvZHJpdmVycy9jaGFyL3NlbGVjdGlvbi5jCmluZGV4IDcxMDkzYTkuLjc0Y2ZmODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zZWxlY3Rpb24uYworKysgYi9kcml2ZXJzL2NoYXIvc2VsZWN0aW9uLmMKQEAgLTMzLDcgKzMzLDcgQEAKIAogLyogVmFyaWFibGVzIGZvciBzZWxlY3Rpb24gY29udHJvbC4gKi8KIC8qIFVzZSBhIGR5bmFtaWMgYnVmZmVyLCBpbnN0ZWFkIG9mIHN0YXRpYyAoRGVjIDE5OTQpICovCi1zdHJ1Y3QgdmNfZGF0YSAqc2VsX2NvbnM7CQkvKiBtdXN0IG5vdCBiZSBkaXNhbGxvY2F0ZWQgKi8KK3N0cnVjdCB2Y19kYXRhICpzZWxfY29uczsJCS8qIG11c3Qgbm90IGJlIGRlYWxsb2NhdGVkICovCiBzdGF0aWMgdm9sYXRpbGUgaW50IHNlbF9zdGFydCA9IC0xOyAJLyogY2xlYXJlZCBieSBjbGVhcl9zZWxlY3Rpb24gKi8KIHN0YXRpYyBpbnQgc2VsX2VuZDsKIHN0YXRpYyBpbnQgc2VsX2J1ZmZlcl9sdGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKaW5kZXggYTFkMzAzZjkuLmY1MmM3YzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zcGVjaWFsaXguYworKysgYi9kcml2ZXJzL2NoYXIvc3BlY2lhbGl4LmMKQEAgLTE4Miw3ICsxODIsNiBAQAogI2RlZmluZSBSU19FVkVOVF9XUklURV9XQUtFVVAJMAogCiBzdGF0aWMgc3RydWN0IHR0eV9kcml2ZXIgKnNwZWNpYWxpeF9kcml2ZXI7Ci1zdGF0aWMgdW5zaWduZWQgY2hhciAqIHRtcF9idWY7CiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGJhdWRfdGFibGVbXSA9ICB7CiAJMCwgNTAsIDc1LCAxMTAsIDEzNCwgMTUwLCAyMDAsIDMwMCwgNjAwLCAxMjAwLCAxODAwLCAyNDAwLCA0ODAwLApAQCAtMTA4NywyNCArMTA4NiwxNiBAQAogCQlwb3J0LT5NU1ZSID0gIChzeF9pbihicCwgQ0QxODZ4X01TVlIpICYgTVNWUl9SVFMpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJwLT5sb2NrLCBmbGFncyk7CiAJZHByaW50ayAoU1hfREVCVUdfVEVSTUlPUywgInN4OiBnb3QgTVNWUj0lMDJ4LlxuIiwgcG9ydC0+TVNWUik7Ci0JYmF1ZCA9IENfQkFVRCh0dHkpOworCWJhdWQgPSB0dHlfZ2V0X2JhdWRfcmF0ZSh0dHkpOwogCi0JaWYgKGJhdWQgJiBDQkFVREVYKSB7Ci0JCWJhdWQgJj0gfkNCQVVERVg7Ci0JCWlmIChiYXVkIDwgMSB8fCBiYXVkID4gMikKLQkJCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyAmPSB+Q0JBVURFWDsKLQkJZWxzZQotCQkJYmF1ZCArPSAxNTsKLQl9Ci0JaWYgKGJhdWQgPT0gMTUpIHsKKwlpZiAoYmF1ZCA9PSAzODQwMCkgewogCQlpZiAoKHBvcnQtPmZsYWdzICYgQVNZTkNfU1BEX01BU0spID09IEFTWU5DX1NQRF9ISSkKIAkJCWJhdWQgKys7CiAJCWlmICgocG9ydC0+ZmxhZ3MgJiBBU1lOQ19TUERfTUFTSykgPT0gQVNZTkNfU1BEX1ZISSkKIAkJCWJhdWQgKz0gMjsKIAl9CiAKLQotCWlmICghYmF1ZF90YWJsZVtiYXVkXSkgeworCWlmICghYmF1ZCkgewogCQkvKiBEcm9wIERUUiAmIGV4aXQgKi8KIAkJZHByaW50ayAoU1hfREVCVUdfVEVSTUlPUywgIkRyb3BwaW5nIERUUi4uLiAgSG1tLi4uLlxuIik7CiAJCWlmICghU1hfQ1JUU0NUUyAodHR5KSkgewpAQCAtMTEzNCw3ICsxMTI1LDcgQEAKIAkJICAgICAgICAgICAgICAgICAgIlRoaXMgaXMgYW4gdW50ZXN0ZWQgb3B0aW9uLCBwbGVhc2UgYmUgY2FyZWZ1bGwuXG4iLAogCQkgICAgICAgICAgICAgICAgICBwb3J0X05vIChwb3J0KSwgdG1wKTsKIAllbHNlCi0JCXRtcCA9ICgoKFNYX09TQ0ZSRVEgKyBiYXVkX3RhYmxlW2JhdWRdLzIpIC8gYmF1ZF90YWJsZVtiYXVkXSArCisJCXRtcCA9ICgoKFNYX09TQ0ZSRVEgKyBiYXVkLzIpIC8gYmF1ZCArCiAJCSAgICAgICAgIENEMTg2eF9UUEMvMikgLyBDRDE4NnhfVFBDKTsKIAogCWlmICgodG1wIDwgMHgxMCkgJiYgdGltZV9iZWZvcmUoYWdhaW4sIGppZmZpZXMpKSB7CkBAIC0xNjgyLDcgKzE2NzMsNyBAQAogCiAJYnAgPSBwb3J0X0JvYXJkKHBvcnQpOwogCi0JaWYgKCFwb3J0LT54bWl0X2J1ZiB8fCAhdG1wX2J1ZikgeworCWlmICghcG9ydC0+eG1pdF9idWYpIHsKIAkJZnVuY19leGl0KCk7CiAJCXJldHVybiAwOwogCX0KQEAgLTI0MDYsMTIgKzIzOTcsNiBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAoISh0bXBfYnVmID0gKHVuc2lnbmVkIGNoYXIgKikgZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKSkgewotCQlwcmludGsoS0VSTl9FUlIgInN4OiBDb3VsZG4ndCBnZXQgZnJlZSBwYWdlLlxuIik7Ci0JCXB1dF90dHlfZHJpdmVyKHNwZWNpYWxpeF9kcml2ZXIpOwotCQlmdW5jX2V4aXQoKTsKLQkJcmV0dXJuIDE7Ci0JfQogCXNwZWNpYWxpeF9kcml2ZXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJc3BlY2lhbGl4X2RyaXZlci0+bmFtZSA9ICJ0dHlXIjsKIAlzcGVjaWFsaXhfZHJpdmVyLT5tYWpvciA9IFNQRUNJQUxJWF9OT1JNQUxfTUFKT1I7CkBAIC0yNDI1LDcgKzI0MTAsNiBAQAogCiAJaWYgKChlcnJvciA9IHR0eV9yZWdpc3Rlcl9kcml2ZXIoc3BlY2lhbGl4X2RyaXZlcikpKSB7CiAJCXB1dF90dHlfZHJpdmVyKHNwZWNpYWxpeF9kcml2ZXIpOwotCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdG1wX2J1Zik7CiAJCXByaW50ayhLRVJOX0VSUiAic3g6IENvdWxkbid0IHJlZ2lzdGVyIHNwZWNpYWxpeCBJTzgrIGRyaXZlciwgZXJyb3IgPSAlZFxuIiwKIAkJICAgICAgIGVycm9yKTsKIAkJZnVuY19leGl0KCk7CkBAIC0yNDUxLDcgKzI0MzUsNiBAQAogewogCWZ1bmNfZW50ZXIoKTsKIAotCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZyl0bXBfYnVmKTsKIAl0dHlfdW5yZWdpc3Rlcl9kcml2ZXIoc3BlY2lhbGl4X2RyaXZlcik7CiAJcHV0X3R0eV9kcml2ZXIoc3BlY2lhbGl4X2RyaXZlcik7CiAJZnVuY19leGl0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3luY2xpbmtfZ3QuYyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCmluZGV4IDJmMDdiMDguLjc4YmM4NTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCisrKyBiL2RyaXZlcnMvY2hhci9zeW5jbGlua19ndC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICRJZDogc3luY2xpbmtfZ3QuYyx2IDQuMjUgMjAwNi8wMi8wNiAyMToyMDozMyBwYXVsa2YgRXhwICQKKyAqICRJZDogc3luY2xpbmtfZ3QuYyx2IDQuMzYgMjAwNi8wOC8yOCAyMDo0NzoxNCBwYXVsa2YgRXhwICQKICAqCiAgKiBEZXZpY2UgZHJpdmVyIGZvciBNaWNyb2dhdGUgU3luY0xpbmsgR1Qgc2VyaWFsIGFkYXB0ZXJzLgogICoKQEAgLTkxLDEyICs5MSwxMiBAQAogICogbW9kdWxlIGlkZW50aWZpY2F0aW9uCiAgKi8KIHN0YXRpYyBjaGFyICpkcml2ZXJfbmFtZSAgICAgPSAiU3luY0xpbmsgR1QiOwotc3RhdGljIGNoYXIgKmRyaXZlcl92ZXJzaW9uICA9ICIkUmV2aXNpb246IDQuMjUgJCI7CitzdGF0aWMgY2hhciAqZHJpdmVyX3ZlcnNpb24gID0gIiRSZXZpc2lvbjogNC4zNiAkIjsKIHN0YXRpYyBjaGFyICp0dHlfZHJpdmVyX25hbWUgPSAic3luY2xpbmtfZ3QiOwogc3RhdGljIGNoYXIgKnR0eV9kZXZfcHJlZml4ICA9ICJ0dHlTTEciOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogI2RlZmluZSBNR1NMX01BR0lDIDB4NTQwMQotI2RlZmluZSBNQVhfREVWSUNFUyAxMgorI2RlZmluZSBNQVhfREVWSUNFUyAzMgogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgcGNpX3RhYmxlW10gPSB7CiAJe1BDSV9WRU5ET1JfSURfTUlDUk9HQVRFLCBTWU5DTElOS19HVF9ERVZJQ0VfSUQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsfSwKQEAgLTQ2MSw3ICs0NjEsNyBAQAogc3RhdGljIHZvaWQgcmVzZXRfYWRhcHRlcihzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKTsKIHN0YXRpYyB2b2lkIHJlc2V0X3BvcnQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CiBzdGF0aWMgdm9pZCBhc3luY19tb2RlKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwotc3RhdGljIHZvaWQgaGRsY19tb2RlKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOworc3RhdGljIHZvaWQgc3luY19tb2RlKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogCiBzdGF0aWMgdm9pZCByeF9zdG9wKHN0cnVjdCBzbGd0X2luZm8gKmluZm8pOwogc3RhdGljIHZvaWQgcnhfc3RhcnQoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbyk7CkBAIC04ODEsNyArODgxLDkgQEAKIAlpZiAoIWNvdW50KQogCQlnb3RvIGNsZWFudXA7CiAKLQlpZiAoaW5mby0+cGFyYW1zLm1vZGUgPT0gTUdTTF9NT0RFX1JBVykgeworCWlmIChpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfUkFXIHx8CisJICAgIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9NT05PU1lOQyB8fAorCSAgICBpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfQklTWU5DKSB7CiAJCXVuc2lnbmVkIGludCBidWZzX25lZWRlZCA9IChjb3VudC9ETUFCVUZTSVpFKTsKIAkJdW5zaWduZWQgaW50IGJ1ZnNfZnJlZSA9IGZyZWVfdGJ1Zl9jb3VudChpbmZvKTsKIAkJaWYgKGNvdW50ICUgRE1BQlVGU0laRSkKQEAgLTE4OTcsNiArMTg5OSw4IEBACiAJCQkJd2hpbGUocnhfZ2V0X2ZyYW1lKGluZm8pKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTUdTTF9NT0RFX1JBVzoKKwkJCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgorCQkJY2FzZSBNR1NMX01PREVfQklTWU5DOgogCQkJCXdoaWxlKHJ4X2dldF9idWYoaW5mbykpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMjM2MiwxMCArMjM2Niw5IEBACiAJcnhfc3RvcChpbmZvKTsKIAl0eF9zdG9wKGluZm8pOwogCi0JaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9IRExDIHx8Ci0JICAgIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcgfHwKKwlpZiAoaW5mby0+cGFyYW1zLm1vZGUgIT0gTUdTTF9NT0RFX0FTWU5DIHx8CiAJICAgIGluZm8tPm5ldGNvdW50KQotCQloZGxjX21vZGUoaW5mbyk7CisJCXN5bmNfbW9kZShpbmZvKTsKIAllbHNlCiAJCWFzeW5jX21vZGUoaW5mbyk7CiAKQEAgLTI1NjQsNiArMjU2NywxMCBAQAogCWlmIChlbmFibGUpIHsKIAkJaWYgKCFpbmZvLT5yeF9lbmFibGVkKQogCQkJcnhfc3RhcnQoaW5mbyk7CisJCWVsc2UgaWYgKGVuYWJsZSA9PSAyKSB7CisJCQkvKiBmb3JjZSBodW50IG1vZGUgKHdyaXRlIDEgdG8gUkNSWzNdKSAqLworCQkJd3JfcmVnMTYoaW5mbywgUkNSLCByZF9yZWcxNihpbmZvLCBSQ1IpIHwgQklUMyk7CisJCX0KIAl9IGVsc2UgewogCQlpZiAoaW5mby0+cnhfZW5hYmxlZCkKIAkJCXJ4X3N0b3AoaW5mbyk7CkBAIC0zNzQ4LDcgKzM3NTUsNyBAQAogewogCWlmICghaW5mby0+dHhfZW5hYmxlZCkgewogCQl3cl9yZWcxNihpbmZvLCBUQ1IsCi0JCQkodW5zaWduZWQgc2hvcnQpKHJkX3JlZzE2KGluZm8sIFRDUikgfCBCSVQxKSk7CisJCQkgKHVuc2lnbmVkIHNob3J0KSgocmRfcmVnMTYoaW5mbywgVENSKSB8IEJJVDEpICYgfkJJVDIpKTsKIAkJaW5mby0+dHhfZW5hYmxlZCA9IFRSVUU7CiAJfQogCkBAIC0zNzc1LDEzICszNzgyLDE4IEBACiAJCQkJdGRtYV9yZXNldChpbmZvKTsKIAkJCQkvKiBzZXQgMXN0IGRlc2NyaXB0b3IgYWRkcmVzcyAqLwogCQkJCXdyX3JlZzMyKGluZm8sIFREREFSLCBpbmZvLT50YnVmc1tpbmZvLT50YnVmX3N0YXJ0XS5wZGVzYyk7Ci0JCQkJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcpCisJCQkJc3dpdGNoKGluZm8tPnBhcmFtcy5tb2RlKSB7CisJCQkJY2FzZSBNR1NMX01PREVfUkFXOgorCQkJCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgorCQkJCWNhc2UgTUdTTF9NT0RFX0JJU1lOQzoKIAkJCQkJd3JfcmVnMzIoaW5mbywgVERDU1IsIEJJVDIgKyBCSVQwKTsgLyogSVJRICsgRE1BIGVuYWJsZSAqLwotCQkJCWVsc2UKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKIAkJCQkJd3JfcmVnMzIoaW5mbywgVERDU1IsIEJJVDApOyAvKiBETUEgZW5hYmxlICovCisJCQkJfQogCQkJfQogCi0JCQlpZiAoaW5mby0+cGFyYW1zLm1vZGUgIT0gTUdTTF9NT0RFX1JBVykgeworCQkJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9IRExDKSB7CiAJCQkJaW5mby0+dHhfdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwMDApOwogCQkJCWFkZF90aW1lcigmaW5mby0+dHhfdGltZXIpOwogCQkJfQpAQCAtMzgxNCw3ICszODI2LDYgQEAKIAkvKiByZXNldCBhbmQgZGlzYWJsZSB0cmFuc21pdHRlciAqLwogCXZhbCA9IHJkX3JlZzE2KGluZm8sIFRDUikgJiB+QklUMTsgICAgICAgICAgLyogY2xlYXIgZW5hYmxlIGJpdCAqLwogCXdyX3JlZzE2KGluZm8sIFRDUiwgKHVuc2lnbmVkIHNob3J0KSh2YWwgfCBCSVQyKSk7IC8qIHNldCByZXNldCBiaXQgKi8KLQl3cl9yZWcxNihpbmZvLCBUQ1IsIHZhbCk7ICAgICAgICAgICAgICAgICAgLyogY2xlYXIgcmVzZXQgKi8KIAogCXNsZ3RfaXJxX29mZihpbmZvLCBJUlFfVFhEQVRBICsgSVJRX1RYSURMRSArIElSUV9UWFVOREVSKTsKIApAQCAtMzk4Miw3ICszOTkzLDcgQEAKIAkJZW5hYmxlX2xvb3BiYWNrKGluZm8pOwogfQogCi1zdGF0aWMgdm9pZCBoZGxjX21vZGUoc3RydWN0IHNsZ3RfaW5mbyAqaW5mbykKK3N0YXRpYyB2b2lkIHN5bmNfbW9kZShzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIHNob3J0IHZhbDsKIApAQCAtMzk5Miw3ICs0MDAzLDcgQEAKIAogCS8qIFRDUiAodHggY29udHJvbCkKIAkgKgotCSAqIDE1Li4xMyAgbW9kZSwgMDAwPUhETEMgMDAxPXJhdyBzeW5jCisJICogMTUuLjEzICBtb2RlLCAwMDA9SERMQyAwMDE9cmF3IDAxMD1hc3luYyAwMTE9bW9ub3N5bmMgMTAwPWJpc3luYwogCSAqIDEyLi4xMCAgZW5jb2RpbmcKIAkgKiAwOSAgICAgIENSQyBlbmFibGUKIAkgKiAwOCAgICAgIENSQzMyCkBAIC00MDA2LDggKzQwMTcsMTEgQEAKIAkgKi8KIAl2YWwgPSAwOwogCi0JaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcpCi0JCXZhbCB8PSBCSVQxMzsKKwlzd2l0Y2goaW5mby0+cGFyYW1zLm1vZGUpIHsKKwljYXNlIE1HU0xfTU9ERV9NT05PU1lOQzogdmFsIHw9IEJJVDE0ICsgQklUMTM7IGJyZWFrOworCWNhc2UgTUdTTF9NT0RFX0JJU1lOQzogICB2YWwgfD0gQklUMTU7IGJyZWFrOworCWNhc2UgTUdTTF9NT0RFX1JBVzogICAgICB2YWwgfD0gQklUMTM7IGJyZWFrOworCX0KIAlpZiAoaW5mby0+aWZfbW9kZSAmIE1HU0xfSU5URVJGQUNFX1JUU19FTikKIAkJdmFsIHw9IEJJVDc7CiAKQEAgLTQwNTgsNyArNDA3Miw3IEBACiAKIAkvKiBSQ1IgKHJ4IGNvbnRyb2wpCiAJICoKLQkgKiAxNS4uMTMgIG1vZGUsIDAwMD1IRExDIDAwMT1yYXcgc3luYworCSAqIDE1Li4xMyAgbW9kZSwgMDAwPUhETEMgMDAxPXJhdyAwMTA9YXN5bmMgMDExPW1vbm9zeW5jIDEwMD1iaXN5bmMKIAkgKiAxMi4uMTAgIGVuY29kaW5nCiAJICogMDkgICAgICBDUkMgZW5hYmxlCiAJICogMDggICAgICBDUkMzMgpAQCAtNDA2OSw4ICs0MDgzLDExIEBACiAJICovCiAJdmFsID0gMDsKIAotCWlmIChpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfUkFXKQotCQl2YWwgfD0gQklUMTM7CisJc3dpdGNoKGluZm8tPnBhcmFtcy5tb2RlKSB7CisJY2FzZSBNR1NMX01PREVfTU9OT1NZTkM6IHZhbCB8PSBCSVQxNCArIEJJVDEzOyBicmVhazsKKwljYXNlIE1HU0xfTU9ERV9CSVNZTkM6ICAgdmFsIHw9IEJJVDE1OyBicmVhazsKKwljYXNlIE1HU0xfTU9ERV9SQVc6ICAgICAgdmFsIHw9IEJJVDEzOyBicmVhazsKKwl9CiAKIAlzd2l0Y2goaW5mby0+cGFyYW1zLmVuY29kaW5nKQogCXsKQEAgLTQzMDksMTAgKzQzMjYsMTUgQEAKIAl3aGlsZSghZG9uZSkgewogCQkvKiByZXNldCBjdXJyZW50IGJ1ZmZlciBmb3IgcmV1c2UgKi8KIAkJaW5mby0+cmJ1ZnNbaV0uc3RhdHVzID0gMDsKLQkJaWYgKGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcpCisJCXN3aXRjaChpbmZvLT5wYXJhbXMubW9kZSkgeworCQljYXNlIE1HU0xfTU9ERV9SQVc6CisJCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgorCQljYXNlIE1HU0xfTU9ERV9CSVNZTkM6CiAJCQlzZXRfZGVzY19jb3VudChpbmZvLT5yYnVmc1tpXSwgaW5mby0+cmF3X3J4X3NpemUpOwotCQllbHNlCisJCQlicmVhazsKKwkJZGVmYXVsdDoKIAkJCXNldF9kZXNjX2NvdW50KGluZm8tPnJidWZzW2ldLCBETUFCVUZTSVpFKTsKKwkJfQogCiAJCWlmIChpID09IGxhc3QpCiAJCQlkb25lID0gMTsKQEAgLTQ0NzcsMTMgKzQ0OTksMjQgQEAKIHN0YXRpYyBpbnQgcnhfZ2V0X2J1ZihzdHJ1Y3Qgc2xndF9pbmZvICppbmZvKQogewogCXVuc2lnbmVkIGludCBpID0gaW5mby0+cmJ1Zl9jdXJyZW50OworCXVuc2lnbmVkIGludCBjb3VudDsKIAogCWlmICghZGVzY19jb21wbGV0ZShpbmZvLT5yYnVmc1tpXSkpCiAJCXJldHVybiAwOwotCURCR0RBVEEoaW5mbywgaW5mby0+cmJ1ZnNbaV0uYnVmLCBkZXNjX2NvdW50KGluZm8tPnJidWZzW2ldKSwgInJ4Iik7Ci0JREJHSU5GTygoInJ4X2dldF9idWYgc2l6ZT0lZFxuIiwgZGVzY19jb3VudChpbmZvLT5yYnVmc1tpXSkpKTsKLQlsZGlzY19yZWNlaXZlX2J1ZihpbmZvLT50dHksIGluZm8tPnJidWZzW2ldLmJ1ZiwKLQkJCSAgaW5mby0+ZmxhZ19idWYsIGRlc2NfY291bnQoaW5mby0+cmJ1ZnNbaV0pKTsKKwljb3VudCA9IGRlc2NfY291bnQoaW5mby0+cmJ1ZnNbaV0pOworCXN3aXRjaChpbmZvLT5wYXJhbXMubW9kZSkgeworCWNhc2UgTUdTTF9NT0RFX01PTk9TWU5DOgorCWNhc2UgTUdTTF9NT0RFX0JJU1lOQzoKKwkJLyogaWdub3JlIHJlc2lkdWUgaW4gYnl0ZSBzeW5jaHJvbm91cyBtb2RlcyAqLworCQlpZiAoZGVzY19yZXNpZHVlKGluZm8tPnJidWZzW2ldKSkKKwkJCWNvdW50LS07CisJCWJyZWFrOworCX0KKwlEQkdEQVRBKGluZm8sIGluZm8tPnJidWZzW2ldLmJ1ZiwgY291bnQsICJyeCIpOworCURCR0lORk8oKCJyeF9nZXRfYnVmIHNpemU9JWRcbiIsIGNvdW50KSk7CisJaWYgKGNvdW50KQorCQlsZGlzY19yZWNlaXZlX2J1ZihpbmZvLT50dHksIGluZm8tPnJidWZzW2ldLmJ1ZiwKKwkJCQkgIGluZm8tPmZsYWdfYnVmLCBjb3VudCk7CiAJZnJlZV9yYnVmcyhpbmZvLCBpLCBpKTsKIAlyZXR1cm4gMTsKIH0KQEAgLTQ1NDksOCArNDU4MiwxMyBAQAogCQlzaXplIC09IGNvdW50OwogCQlidWYgICs9IGNvdW50OwogCi0JCWlmICghc2l6ZSAmJiBpbmZvLT5wYXJhbXMubW9kZSAhPSBNR1NMX01PREVfUkFXKQotCQkJc2V0X2Rlc2NfZW9mKCpkLCAxKTsgLyogSERMQzogc2V0IEVPRiBvZiBsYXN0IGRlc2MgKi8KKwkJLyoKKwkJICogc2V0IEVPRiBiaXQgZm9yIGxhc3QgYnVmZmVyIG9mIEhETEMgZnJhbWUgb3IKKwkJICogZm9yIGV2ZXJ5IGJ1ZmZlciBpbiByYXcgbW9kZQorCQkgKi8KKwkJaWYgKCghc2l6ZSAmJiBpbmZvLT5wYXJhbXMubW9kZSA9PSBNR1NMX01PREVfSERMQykgfHwKKwkJICAgIGluZm8tPnBhcmFtcy5tb2RlID09IE1HU0xfTU9ERV9SQVcpCisJCQlzZXRfZGVzY19lb2YoKmQsIDEpOwogCQllbHNlCiAJCQlzZXRfZGVzY19lb2YoKmQsIDApOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvc3lzcnEuYyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCmluZGV4IGVlM2NhOGYuLjZiNGQ0ZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9zeXNycS5jCisrKyBiL2RyaXZlcnMvY2hhci9zeXNycS5jCkBAIC0xMTMsNiArMTEzLDcgQEAKIHN0YXRpYyB2b2lkIHN5c3JxX2hhbmRsZV9yZWJvb3QoaW50IGtleSwgc3RydWN0IHB0X3JlZ3MgKnB0X3JlZ3MsCiAJCQkJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKKwlsb2NrZGVwX29mZigpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIAllbWVyZ2VuY3lfcmVzdGFydCgpOwogfQpAQCAtMjA4LDcgKzIwOSw3IEBACiAJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCiAJZm9yX2VhY2hfcHJvY2VzcyhwKSB7Ci0JCWlmIChwLT5tbSAmJiBwLT5waWQgIT0gMSkKKwkJaWYgKHAtPm1tICYmICFpc19pbml0KHApKQogCQkJLyogTm90IHN3YXBwZXIsIGluaXQgbm9yIGtlcm5lbCB0aHJlYWQgKi8KIAkJCWZvcmNlX3NpZyhzaWcsIHApOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci90dHlfaW8uYyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwppbmRleCBiYjBkOTE5Li4zMzM3NDE3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3R0eV9pby5jCisrKyBiL2RyaXZlcnMvY2hhci90dHlfaW8uYwpAQCAtMTI5LDYgKzEyOSw3IEBACiAvKiBTZW1hcGhvcmUgdG8gcHJvdGVjdCBjcmVhdGluZyBhbmQgcmVsZWFzaW5nIGEgdHR5LiBUaGlzIGlzIHNoYXJlZCB3aXRoCiAgICB2dC5jIGZvciBkZWVwbHkgZGlzZ3VzdGluZyBoYWNrIHJlYXNvbnMgKi8KIERFRklORV9NVVRFWCh0dHlfbXV0ZXgpOworRVhQT1JUX1NZTUJPTCh0dHlfbXV0ZXgpOwogCiAjaWZkZWYgQ09ORklHX1VOSVg5OF9QVFlTCiBleHRlcm4gc3RydWN0IHR0eV9kcml2ZXIgKnB0bV9kcml2ZXI7CS8qIFVuaXg5OCBwdHkgbWFzdGVyczsgZm9yIC9kZXYvcHRteCAqLwpAQCAtMTYwLDE3ICsxNjEsMTEgQEAKICAqCWJlZW4gaW5pdGlhbGl6ZWQgaW4gYW55IHdheSBidXQgaGFzIGJlZW4gemVyb2VkCiAgKgogICoJTG9ja2luZzogbm9uZQotICoJRklYTUU6IHVzZSBremFsbG9jCiAgKi8KIAogc3RhdGljIHN0cnVjdCB0dHlfc3RydWN0ICphbGxvY190dHlfc3RydWN0KHZvaWQpCiB7Ci0Jc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKLQotCXR0eSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0dHlfc3RydWN0KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHR0eSkKLQkJbWVtc2V0KHR0eSwgMCwgc2l6ZW9mKHN0cnVjdCB0dHlfc3RydWN0KSk7Ci0JcmV0dXJuIHR0eTsKKwlyZXR1cm4ga3phbGxvYyhzaXplb2Yoc3RydWN0IHR0eV9zdHJ1Y3QpLCBHRlBfS0VSTkVMKTsKIH0KIAogc3RhdGljIHZvaWQgdHR5X2J1ZmZlcl9mcmVlX2FsbChzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKQEAgLTQ4MywxMCArNDc4LDkgQEAKIAkJdGItPnVzZWQgKz0gc3BhY2U7CiAJCWNvcGllZCArPSBzcGFjZTsKIAkJY2hhcnMgKz0gc3BhY2U7Ci0JfQotCS8qIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgd2UgbmVlZCB0byBzcGxpdCB0aGUgZGF0YSBvdmVyCi0JICAgc2V2ZXJhbCBidWZmZXJzLiBJZiB0aGlzIGlzIHRoZSBjYXNlIHdlIG11c3QgbG9vcCAqLwotCXdoaWxlICh1bmxpa2VseShzaXplID4gY29waWVkKSk7CisJCS8qIFRoZXJlIGlzIGEgc21hbGwgY2hhbmNlIHRoYXQgd2UgbmVlZCB0byBzcGxpdCB0aGUgZGF0YSBvdmVyCisJCSAgIHNldmVyYWwgYnVmZmVycy4gSWYgdGhpcyBpcyB0aGUgY2FzZSB3ZSBtdXN0IGxvb3AgKi8KKwl9IHdoaWxlICh1bmxpa2VseShzaXplID4gY29waWVkKSk7CiAJcmV0dXJuIGNvcGllZDsKIH0KIEVYUE9SVF9TWU1CT0wodHR5X2luc2VydF9mbGlwX3N0cmluZyk7CkBAIC01MjEsMTAgKzUxNSw5IEBACiAJCWNvcGllZCArPSBzcGFjZTsKIAkJY2hhcnMgKz0gc3BhY2U7CiAJCWZsYWdzICs9IHNwYWNlOwotCX0KLQkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgotCSAgIHNldmVyYWwgYnVmZmVycy4gSWYgdGhpcyBpcyB0aGUgY2FzZSB3ZSBtdXN0IGxvb3AgKi8KLQl3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOworCQkvKiBUaGVyZSBpcyBhIHNtYWxsIGNoYW5jZSB0aGF0IHdlIG5lZWQgdG8gc3BsaXQgdGhlIGRhdGEgb3ZlcgorCQkgICBzZXZlcmFsIGJ1ZmZlcnMuIElmIHRoaXMgaXMgdGhlIGNhc2Ugd2UgbXVzdCBsb29wICovCisJfSB3aGlsZSAodW5saWtlbHkoc2l6ZSA+IGNvcGllZCkpOwogCXJldHVybiBjb3BpZWQ7CiB9CiBFWFBPUlRfU1lNQk9MKHR0eV9pbnNlcnRfZmxpcF9zdHJpbmdfZmxhZ3MpOwpAQCAtNjI2LDkgKzYxOSw5IEBACiAgCiBzdGF0aWMgdm9pZCB0dHlfc2V0X3Rlcm1pb3NfbGRpc2Moc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgaW50IG51bSkKIHsKLQlkb3duKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCXR0eS0+dGVybWlvcy0+Y19saW5lID0gbnVtOwotCXVwKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CiB9CiAKIC8qCkBAIC0xMzQ2LDkgKzEzMzksOSBAQAogCSAqLwogCWlmICh0dHktPmRyaXZlci0+ZmxhZ3MgJiBUVFlfRFJJVkVSX1JFU0VUX1RFUk1JT1MpCiAJewotCQlkb3duKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwkJbXV0ZXhfbG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIAkJKnR0eS0+dGVybWlvcyA9IHR0eS0+ZHJpdmVyLT5pbml0X3Rlcm1pb3M7Ci0JCXVwKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCX0KIAkKIAkvKiBEZWZlciBsZGlzYyBzd2l0Y2ggKi8KQEAgLTIwNzIsOCArMjA2NSw5IEBACiAKIAkvKiBjYWxsIHRoZSB0dHkgcmVsZWFzZV9tZW0gcm91dGluZSB0byBjbGVhbiBvdXQgdGhpcyBzbG90ICovCiByZWxlYXNlX21lbV9vdXQ6Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9kZXY6IGxkaXNjIG9wZW4gZmFpbGVkLCAiCi0JCQkgImNsZWFyaW5nIHNsb3QgJWRcbiIsIGlkeCk7CisJaWYgKHByaW50a19yYXRlbGltaXQoKSkKKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9kZXY6IGxkaXNjIG9wZW4gZmFpbGVkLCAiCisJCQkJICJjbGVhcmluZyBzbG90ICVkXG4iLCBpZHgpOwogCXJlbGVhc2VfbWVtKHR0eSwgaWR4KTsKIAlnb3RvIGVuZF9pbml0OwogfQpAQCAtMjcyNiw2ICsyNzIwLDggQEAKICAqCUxvY2tpbmc6CiAgKgkJQ2FsbGVkIGZ1bmN0aW9ucyB0YWtlIHR0eV9sZGlzY19sb2NrCiAgKgkJY3VycmVudC0+c2lnbmFsLT50dHkgY2hlY2sgaXMgc2FmZSB3aXRob3V0IGxvY2tzCisgKgorICoJRklYTUU6IG1heSByYWNlIG5vcm1hbCByZWNlaXZlIHByb2Nlc3NpbmcKICAqLwogCiBzdGF0aWMgaW50IHRpb2NzdGkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBfX3VzZXIgKnApCkBAIC0yNzQ4LDE4ICsyNzQ0LDIxIEBACiAgKglAdHR5OyB0dHkKICAqCUBhcmc6IHVzZXIgYnVmZmVyIGZvciByZXN1bHQKICAqCi0gKglDb3BpZXMgdGhlIGtlcm5lbCBpZGVhIG9mIHRoZSB3aW5kb3cgc2l6ZSBpbnRvIHRoZSB1c2VyIGJ1ZmZlci4gTm8KLSAqCWxvY2tpbmcgaXMgZG9uZS4KKyAqCUNvcGllcyB0aGUga2VybmVsIGlkZWEgb2YgdGhlIHdpbmRvdyBzaXplIGludG8gdGhlIHVzZXIgYnVmZmVyLgogICoKLSAqCUZJWE1FOiBSZXR1cm5pbmcgcmFuZG9tIHZhbHVlcyByYWNpbmcgYSB3aW5kb3cgc2l6ZSBzZXQgaXMgd3JvbmcKLSAqCXNob3VsZCBsb2NrIGhlcmUgYWdhaW5zdCB0aGF0CisgKglMb2NraW5nOiB0dHktPnRlcm1pb3Nfc2VtIGlzIHRha2VuIHRvIGVuc3VyZSB0aGUgd2luc2l6ZSBkYXRhCisgKgkJaXMgY29uc2lzdGVudC4KICAqLwogCiBzdGF0aWMgaW50IHRpb2Nnd2luc3ooc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHdpbnNpemUgX191c2VyICogYXJnKQogewotCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmdHR5LT53aW5zaXplLCBzaXplb2YoKmFyZykpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlyZXR1cm4gMDsKKwlpbnQgZXJyOworCisJbXV0ZXhfbG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKKwllcnIgPSBjb3B5X3RvX3VzZXIoYXJnLCAmdHR5LT53aW5zaXplLCBzaXplb2YoKmFyZykpOworCW11dGV4X3VubG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKKworCXJldHVybiBlcnIgPyAtRUZBVUxUOiAwOwogfQogCiAvKioKQEAgLTI3NzIsMTIgKzI3NzEsMTEgQEAKICAqCWFjdHVhbGx5IGhhcyBkcml2ZXIgbGV2ZWwgbWVhbmluZyBhbmQgdHJpZ2dlcnMgYSBWQyByZXNpemUuCiAgKgogICoJTG9ja2luZzoKLSAqCQlUaGUgY29uc29sZV9zZW0gaXMgdXNlZCB0byBlbnN1cmUgd2UgZG8gbm90IHRyeSBhbmQgcmVzaXplCi0gKgl0aGUgY29uc29sZSB0d2ljZSBhdCBvbmNlLgotICoJRklYTUU6IFR3byByYWNpbmcgc2l6ZSBzZXRzIG1heSBsZWF2ZSB0aGUgY29uc29sZSBhbmQga2VybmVsCi0gKgkJcGFyYW1ldGVycyBkaXNhZ3JlZWluZy4gSXMgdGhpcyBleHBsb2l0YWJsZSA/Ci0gKglGSVhNRTogUmFuZG9tIHZhbHVlcyByYWNpbmcgYSB3aW5kb3cgc2l6ZSBnZXQgaXMgd3JvbmcKLSAqCXNob3VsZCBsb2NrIGhlcmUgYWdhaW5zdCB0aGF0CisgKgkJQ2FsbGVkIGZ1bmN0aW9uIHVzZSB0aGUgY29uc29sZV9zZW0gaXMgdXNlZCB0byBlbnN1cmUgd2UgZG8KKyAqCW5vdCB0cnkgYW5kIHJlc2l6ZSB0aGUgY29uc29sZSB0d2ljZSBhdCBvbmNlLgorICoJCVRoZSB0dHktPnRlcm1pb3Nfc2VtIGlzIHVzZWQgdG8gZW5zdXJlIHdlIGRvbid0IGRvdWJsZQorICoJcmVzaXplIGFuZCBnZXQgY29uZnVzZWQuIExvY2sgb3JkZXIgLSB0dHktPnRlcm1pb3Muc2VtIGJlZm9yZQorICoJY29uc29sZSBzZW0KICAqLwogCiBzdGF0aWMgaW50IHRpb2Nzd2luc3ooc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IHR0eV9zdHJ1Y3QgKnJlYWxfdHR5LApAQCAtMjc4NywxNyArMjc4NSwxOCBAQAogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXBfd3MsIGFyZywgc2l6ZW9mKCphcmcpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CisKKwltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCWlmICghbWVtY21wKCZ0bXBfd3MsICZ0dHktPndpbnNpemUsIHNpemVvZigqYXJnKSkpCi0JCXJldHVybiAwOworCQlnb3RvIGRvbmU7CisKICNpZmRlZiBDT05GSUdfVlQKIAlpZiAodHR5LT5kcml2ZXItPnR5cGUgPT0gVFRZX0RSSVZFUl9UWVBFX0NPTlNPTEUpIHsKLQkJaW50IHJjOwotCi0JCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKLQkJcmMgPSB2Y19yZXNpemUodHR5LT5kcml2ZXJfZGF0YSwgdG1wX3dzLndzX2NvbCwgdG1wX3dzLndzX3Jvdyk7Ci0JCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIC1FTlhJTzsKKwkJaWYgKHZjX2xvY2tfcmVzaXplKHR0eS0+ZHJpdmVyX2RhdGEsIHRtcF93cy53c19jb2wsCisJCQkJCXRtcF93cy53c19yb3cpKSB7CisJCQltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CisgCQkJcmV0dXJuIC1FTlhJTzsKKwkJfQogCX0KICNlbmRpZgogCWlmICh0dHktPnBncnAgPiAwKQpAQCAtMjgwNiw2ICsyODA1LDggQEAKIAkJa2lsbF9wZyhyZWFsX3R0eS0+cGdycCwgU0lHV0lOQ0gsIDEpOwogCXR0eS0+d2luc2l6ZSA9IHRtcF93czsKIAlyZWFsX3R0eS0+d2luc2l6ZSA9IHRtcF93czsKK2RvbmU6CisJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCXJldHVybiAwOwogfQogCkBAIC0yODgwLDkgKzI4ODEsNyBAQAogICoJTG9ja2luZzoKICAqCQlUYWtlcyB0YXNrbGlzdCBsb2NrIGludGVybmFsbHkgdG8gd2FsayBzZXNzaW9ucwogICoJCVRha2VzIHRhc2tfbG9jaygpIHdoZW4gdXBkYXRpbmcgc2lnbmFsLT50dHkKLSAqCi0gKglGSVhNRTogdHR5X211dGV4IGlzIG5lZWRlZCB0byBwcm90ZWN0IHNpZ25hbC0+dHR5IHJlZmVyZW5jZXMuCi0gKglGSVhNRTogd2h5IHRhc2tfbG9jayBvbiB0aGUgc2lnbmFsLT50dHkgcmVmZXJlbmNlID8/CisgKgkJVGFrZXMgdHR5X211dGV4KCkgdG8gcHJvdGVjdCB0dHkgaW5zdGFuY2UKICAqCiAgKi8KIApAQCAtMjkxNyw5ICsyOTE2LDExIEBACiAJCX0gZWxzZQogCQkJcmV0dXJuIC1FUEVSTTsKIAl9CisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKIAl0YXNrX2xvY2soY3VycmVudCk7CiAJY3VycmVudC0+c2lnbmFsLT50dHkgPSB0dHk7CiAJdGFza191bmxvY2soY3VycmVudCk7CisJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOwogCWN1cnJlbnQtPnNpZ25hbC0+dHR5X29sZF9wZ3JwID0gMDsKIAl0dHktPnNlc3Npb24gPSBjdXJyZW50LT5zaWduYWwtPnNlc3Npb247CiAJdHR5LT5wZ3JwID0gcHJvY2Vzc19ncm91cChjdXJyZW50KTsKQEAgLTI5NTksOCArMjk2MCw2IEBACiAgKglwZXJtaXR0ZWQgd2hlcmUgdGhlIHR0eSBzZXNzaW9uIGlzIG91ciBzZXNzaW9uLgogICoKICAqCUxvY2tpbmc6IE5vbmUKLSAqCi0gKglGSVhNRTogY3VycmVudC0+c2lnbmFsLT50dHkgcmVmZXJlbmNpbmcgaXMgdW5zYWZlLgogICovCiAKIHN0YXRpYyBpbnQgdGlvY3NwZ3JwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCB0dHlfc3RydWN0ICpyZWFsX3R0eSwgcGlkX3QgX191c2VyICpwKQpAQCAtMzAzOSwxOSArMzAzOCwyMCBAQAogICoJdGltZWQgYnJlYWsgZnVuY3Rpb25hbGl0eS4KICAqCiAgKglMb2NraW5nOgotICoJCU5vbmUKKyAqCQlhdG9taWNfd3JpdGVfbG9jayBzZXJpYWxpemVzCiAgKgotICoJRklYTUU6Ci0gKgkJV2hhdCBpZiB0d28gb3ZlcmxhcAogICovCiAKIHN0YXRpYyBpbnQgc2VuZF9icmVhayhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgZHVyYXRpb24pCiB7CisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmdHR5LT5hdG9taWNfd3JpdGVfbG9jaykpCisJCXJldHVybiAtRUlOVFI7CiAJdHR5LT5kcml2ZXItPmJyZWFrX2N0bCh0dHksIC0xKTsKIAlpZiAoIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CiAJCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKGR1cmF0aW9uKTsKIAl9CiAJdHR5LT5kcml2ZXItPmJyZWFrX2N0bCh0dHksIDApOworCW11dGV4X3VubG9jaygmdHR5LT5hdG9taWNfd3JpdGVfbG9jayk7CiAJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQogCQlyZXR1cm4gLUVJTlRSOwogCXJldHVybiAwOwpAQCAtMzE0NCw2ICszMTQ0LDggQEAKIAlpZiAodHR5X3BhcmFub2lhX2NoZWNrKHR0eSwgaW5vZGUsICJ0dHlfaW9jdGwiKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwkvKiBDSEVDS01FOiBpcyB0aGlzIHNhZmUgYXMgb25lIGVuZCBjbG9zZXMgPyAqLworCiAJcmVhbF90dHkgPSB0dHk7CiAJaWYgKHR0eS0+ZHJpdmVyLT50eXBlID09IFRUWV9EUklWRVJfVFlQRV9QVFkgJiYKIAkgICAgdHR5LT5kcml2ZXItPnN1YnR5cGUgPT0gUFRZX1RZUEVfTUFTVEVSKQpAQCAtMzU4MCw3ICszNTgyLDcgQEAKIAl0dHlfYnVmZmVyX2luaXQodHR5KTsKIAlJTklUX1dPUksoJnR0eS0+YnVmLndvcmssIGZsdXNoX3RvX2xkaXNjLCB0dHkpOwogCWluaXRfTVVURVgoJnR0eS0+YnVmLnB0eV9zZW0pOwotCWluaXRfTVVURVgoJnR0eS0+dGVybWlvc19zZW0pOworCW11dGV4X2luaXQoJnR0eS0+dGVybWlvc19tdXRleCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdHR5LT53cml0ZV93YWl0KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ0dHktPnJlYWRfd2FpdCk7CiAJSU5JVF9XT1JLKCZ0dHktPmhhbmd1cF93b3JrLCBkb190dHlfaGFuZ3VwLCB0dHkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jIGIvZHJpdmVycy9jaGFyL3R0eV9pb2N0bC5jCmluZGV4IDRhZDQ3ZDMuLjNiNmZhN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci90dHlfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdHR5X2lvY3RsLmMKQEAgLTIwLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTMxLDcgKzEzMiw3IEBACiAKIAkvKiBGSVhNRTogd2UgbmVlZCB0byBkZWNpZGUgb24gc29tZSBsb2NraW5nL29yZGVyaW5nIHNlbWFudGljcwogCSAgIGZvciB0aGUgc2V0X3Rlcm1pb3Mgbm90aWZpY2F0aW9uIGV2ZW50dWFsbHkgKi8KLQlkb3duKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwltdXRleF9sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCiAJKnR0eS0+dGVybWlvcyA9ICpuZXdfdGVybWlvczsKIAl1bnNldF9sb2NrZWRfdGVybWlvcyh0dHktPnRlcm1pb3MsICZvbGRfdGVybWlvcywgdHR5LT50ZXJtaW9zX2xvY2tlZCk7CkBAIC0xNzYsNyArMTc3LDcgQEAKIAkJCShsZC0+c2V0X3Rlcm1pb3MpKHR0eSwgJm9sZF90ZXJtaW9zKTsKIAkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKIAl9Ci0JdXAoJnR0eS0+dGVybWlvc19zZW0pOworCW11dGV4X3VubG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIH0KIAogLyoqCkBAIC0yODQsMTMgKzI4NSwxMyBAQAogewogCXN0cnVjdCBzZ3R0eWIgdG1wOwogCi0JZG93bigmdHR5LT50ZXJtaW9zX3NlbSk7CisJbXV0ZXhfbG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIAl0bXAuc2dfaXNwZWVkID0gMDsKIAl0bXAuc2dfb3NwZWVkID0gMDsKIAl0bXAuc2dfZXJhc2UgPSB0dHktPnRlcm1pb3MtPmNfY2NbVkVSQVNFXTsKIAl0bXAuc2dfa2lsbCA9IHR0eS0+dGVybWlvcy0+Y19jY1tWS0lMTF07CiAJdG1wLnNnX2ZsYWdzID0gZ2V0X3NnZmxhZ3ModHR5KTsKLQl1cCgmdHR5LT50ZXJtaW9zX3NlbSk7CisJbXV0ZXhfdW5sb2NrKCZ0dHktPnRlcm1pb3NfbXV0ZXgpOwogCQogCXJldHVybiBjb3B5X3RvX3VzZXIoc2d0dHliLCAmdG1wLCBzaXplb2YodG1wKSkgPyAtRUZBVUxUIDogMDsKIH0KQEAgLTM0NSwxMiArMzQ2LDEyIEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZ0bXAsIHNndHR5Yiwgc2l6ZW9mKHRtcCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWRvd24oJnR0eS0+dGVybWlvc19zZW0pOwkJCisJbXV0ZXhfbG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIAl0ZXJtaW9zID0gICp0dHktPnRlcm1pb3M7CiAJdGVybWlvcy5jX2NjW1ZFUkFTRV0gPSB0bXAuc2dfZXJhc2U7CiAJdGVybWlvcy5jX2NjW1ZLSUxMXSA9IHRtcC5zZ19raWxsOwogCXNldF9zZ2ZsYWdzKCZ0ZXJtaW9zLCB0bXAuc2dfZmxhZ3MpOwotCXVwKCZ0dHktPnRlcm1pb3Nfc2VtKTsKKwltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CiAJY2hhbmdlX3Rlcm1pb3ModHR5LCAmdGVybWlvcyk7CiAJcmV0dXJuIDA7CiB9CkBAIC00MjIsMjQgKzQyMywyOCBAQAogICoKICAqCVNlbmQgYSBoaWdoIHByaW9yaXR5IGNoYXJhY3RlciB0byB0aGUgdHR5IGV2ZW4gaWYgc3RvcHBlZAogICoKLSAqCUxvY2tpbmc6IG5vbmUKLSAqCi0gKglGSVhNRTogb3ZlcmxhcHBpbmcgY2FsbHMgd2l0aCBzdGFydC9zdG9wIHR0eSBsb3NlIHN0YXRlIG9mIHR0eQorICoJTG9ja2luZzogbm9uZSBmb3IgeGNoYXIgbWV0aG9kLCB3cml0ZSBvcmRlcmluZyBmb3Igd3JpdGUgbWV0aG9kLgogICovCiAKLXN0YXRpYyB2b2lkIHNlbmRfcHJpb19jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCitzdGF0aWMgaW50IHNlbmRfcHJpb19jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpCiB7CiAJaW50CXdhc19zdG9wcGVkID0gdHR5LT5zdG9wcGVkOwogCiAJaWYgKHR0eS0+ZHJpdmVyLT5zZW5kX3hjaGFyKSB7CiAJCXR0eS0+ZHJpdmVyLT5zZW5kX3hjaGFyKHR0eSwgY2gpOwotCQlyZXR1cm47CisJCXJldHVybiAwOwogCX0KKworCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCiAJaWYgKHdhc19zdG9wcGVkKQogCQlzdGFydF90dHkodHR5KTsKIAl0dHktPmRyaXZlci0+d3JpdGUodHR5LCAmY2gsIDEpOwogCWlmICh3YXNfc3RvcHBlZCkKIAkJc3RvcF90dHkodHR5KTsKKwltdXRleF91bmxvY2soJnR0eS0+YXRvbWljX3dyaXRlX2xvY2spOworCXJldHVybiAwOwogfQogCiBpbnQgbl90dHlfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKQEAgLTUxMywxMSArNTE4LDExIEBACiAJCQkJYnJlYWs7CiAJCQljYXNlIFRDSU9GRjoKIAkJCQlpZiAoU1RPUF9DSEFSKHR0eSkgIT0gX19ESVNBQkxFRF9DSEFSKQotCQkJCQlzZW5kX3ByaW9fY2hhcih0dHksIFNUT1BfQ0hBUih0dHkpKTsKKwkJCQkJcmV0dXJuIHNlbmRfcHJpb19jaGFyKHR0eSwgU1RPUF9DSEFSKHR0eSkpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBUQ0lPTjoKIAkJCQlpZiAoU1RBUlRfQ0hBUih0dHkpICE9IF9fRElTQUJMRURfQ0hBUikKLQkJCQkJc2VuZF9wcmlvX2NoYXIodHR5LCBTVEFSVF9DSEFSKHR0eSkpOworCQkJCQlyZXR1cm4gc2VuZF9wcmlvX2NoYXIodHR5LCBTVEFSVF9DSEFSKHR0eSkpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTU5MiwxMSArNTk3LDExIEBACiAJCWNhc2UgVElPQ1NTT0ZUQ0FSOgogCQkJaWYgKGdldF91c2VyKGFyZywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgYXJnKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWRvd24oJnR0eS0+dGVybWlvc19zZW0pOworCQkJbXV0ZXhfbG9jaygmdHR5LT50ZXJtaW9zX211dGV4KTsKIAkJCXR0eS0+dGVybWlvcy0+Y19jZmxhZyA9CiAJCQkJKCh0dHktPnRlcm1pb3MtPmNfY2ZsYWcgJiB+Q0xPQ0FMKSB8CiAJCQkJIChhcmcgPyBDTE9DQUwgOiAwKSk7Ci0JCQl1cCgmdHR5LT50ZXJtaW9zX3NlbSk7CisJCQltdXRleF91bmxvY2soJnR0eS0+dGVybWlvc19tdXRleCk7CiAJCQlyZXR1cm4gMDsKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRU5PSU9DVExDTUQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMgYi9kcml2ZXJzL2NoYXIvdmNfc2NyZWVuLmMKaW5kZXggYTkyNDdiNS4uYmQ3YTk4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3ZjX3NjcmVlbi5jCisrKyBiL2RyaXZlcnMvY2hhci92Y19zY3JlZW4uYwpAQCAtNDc0LDE0ICs0NzQsMTUgQEAKIAogc3RhdGljIHN0cnVjdCBjbGFzcyAqdmNfY2xhc3M7CiAKLXZvaWQgdmNzX21ha2VfZGV2ZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKK3ZvaWQgdmNzX21ha2Vfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGFzc19kZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxKSwKIAkJCU5VTEwsICJ2Y3MldSIsIHR0eS0+aW5kZXggKyAxKTsKIAljbGFzc19kZXZpY2VfY3JlYXRlKHZjX2NsYXNzLCBOVUxMLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpLAogCQkJTlVMTCwgInZjc2EldSIsIHR0eS0+aW5kZXggKyAxKTsKIH0KLXZvaWQgdmNzX3JlbW92ZV9kZXZmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQorCit2b2lkIHZjc19yZW1vdmVfc3lzZnMoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkKIHsKIAljbGFzc19kZXZpY2VfZGVzdHJveSh2Y19jbGFzcywgTUtERVYoVkNTX01BSk9SLCB0dHktPmluZGV4ICsgMSkpOwogCWNsYXNzX2RldmljZV9kZXN0cm95KHZjX2NsYXNzLCBNS0RFVihWQ1NfTUFKT1IsIHR0eS0+aW5kZXggKyAxMjkpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci92dC5jIGIvZHJpdmVycy9jaGFyL3Z0LmMKaW5kZXggZGE3ZTY2YS4uZmI3NWRhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL3Z0LmMKKysrIGIvZHJpdmVycy9jaGFyL3Z0LmMKQEAgLTYzLDYgKzYzLDEzIEBACiAgKgogICogUmVtb3ZlZCBjb25zb2xlX2xvY2ssIGVuYWJsZWQgaW50ZXJydXB0cyBhY3Jvc3MgYWxsIGNvbnNvbGUgb3BlcmF0aW9ucwogICogMTMgTWFyY2ggMjAwMSwgQW5kcmV3IE1vcnRvbgorICoKKyAqIEZpeGVkIFVURi04IG1vZGUgc28gYWx0ZXJuYXRlIGNoYXJzZXQgbW9kZXMgYWx3YXlzIHdvcmsgYWNjb3JkaW5nCisgKiB0byBjb250cm9sIHNlcXVlbmNlcyBpbnRlcnByZXRlZCBpbiBkb19jb25fdHJvbCBmdW5jdGlvbgorICogcHJlc2VydmluZyBiYWNrd2FyZCBWVDEwMCBzZW1pZ3JhcGhpY3MgY29tcGF0aWJpbGl0eSwKKyAqIG1hbGZvcm1lZCBVVEYgc2VxdWVuY2VzIHJlcHJlc2VudGVkIGFzIHNlcXVlbmNlcyBvZiByZXBsYWNlbWVudCBnbHlwaHMsCisgKiBvcmlnaW5hbCBjb2RlcyBvciAnPycgYXMgYSBsYXN0IHJlc29ydCBpZiByZXBsYWNlbWVudCBnbHlwaCBpcyB1bmRlZmluZWQKKyAqIGJ5IEFkYW0gVGxhL2xrYSA8YXRsa2FAcGcuZ2RhLnBsPiwgQXVnIDIwMDYKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0xMjgsOCArMTM1LDggQEAKICNkZWZpbmUgREVGQVVMVF9CRUxMX1BJVENICTc1MAogI2RlZmluZSBERUZBVUxUX0JFTExfRFVSQVRJT04JKEhaLzgpCiAKLWV4dGVybiB2b2lkIHZjc19tYWtlX2RldmZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwotZXh0ZXJuIHZvaWQgdmNzX3JlbW92ZV9kZXZmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKK2V4dGVybiB2b2lkIHZjc19tYWtlX3N5c2ZzKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOworZXh0ZXJuIHZvaWQgdmNzX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKIAogZXh0ZXJuIHZvaWQgY29uc29sZV9tYXBfaW5pdCh2b2lkKTsKICNpZmRlZiBDT05GSUdfUFJPTV9DT05TT0xFCkBAIC03MzAsNyArNzM3LDggQEAKIAkgICAgdmlzdWFsX2luaXQodmMsIGN1cnJjb25zLCAxKTsKIAkgICAgaWYgKCEqdmMtPnZjX3VuaV9wYWdlZGlyX2xvYykKIAkJY29uX3NldF9kZWZhdWx0X3VuaW1hcCh2Yyk7Ci0JICAgIHZjLT52Y19zY3JlZW5idWYgPSBrbWFsbG9jKHZjLT52Y19zY3JlZW5idWZfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJICAgIGlmICghdmMtPnZjX2ttYWxsb2NlZCkKKwkJdmMtPnZjX3NjcmVlbmJ1ZiA9IGttYWxsb2ModmMtPnZjX3NjcmVlbmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKIAkgICAgaWYgKCF2Yy0+dmNfc2NyZWVuYnVmKSB7CiAJCWtmcmVlKHZjKTsKIAkJdmNfY29uc1tjdXJyY29uc10uZCA9IE5VTEw7CkBAIC04NzgsOCArODg2LDE3IEBACiAJcmV0dXJuIGVycjsKIH0KIAoraW50IHZjX2xvY2tfcmVzaXplKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IGNvbHMsIHVuc2lnbmVkIGludCBsaW5lcykKK3sKKwlpbnQgcmM7CiAKLXZvaWQgdmNfZGlzYWxsb2NhdGUodW5zaWduZWQgaW50IGN1cnJjb25zKQorCWFjcXVpcmVfY29uc29sZV9zZW0oKTsKKwlyYyA9IHZjX3Jlc2l6ZSh2YywgY29scywgbGluZXMpOworCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgdmNfZGVhbGxvY2F0ZSh1bnNpZ25lZCBpbnQgY3VycmNvbnMpCiB7CiAJV0FSTl9DT05TT0xFX1VOTE9DS0VEKCk7CiAKQEAgLTIwMDUsMTcgKzIwMjIsMjMgQEAKIAkJLyogRG8gbm8gdHJhbnNsYXRpb24gYXQgYWxsIGluIGNvbnRyb2wgc3RhdGVzICovCiAJCWlmICh2Yy0+dmNfc3RhdGUgIT0gRVNub3JtYWwpIHsKIAkJCXRjID0gYzsKLQkJfSBlbHNlIGlmICh2Yy0+dmNfdXRmKSB7CisJCX0gZWxzZSBpZiAodmMtPnZjX3V0ZiAmJiAhdmMtPnZjX2Rpc3BfY3RybCkgewogCQkgICAgLyogQ29tYmluZSBVVEYtOCBpbnRvIFVuaWNvZGUgKi8KLQkJICAgIC8qIEluY29tcGxldGUgY2hhcmFjdGVycyBzaWxlbnRseSBpZ25vcmVkICovCisJCSAgICAvKiBNYWxmb3JtZWQgc2VxdWVuY2VzIGFzIHNlcXVlbmNlcyBvZiByZXBsYWNlbWVudCBnbHlwaHMgKi8KK3Jlc2Nhbl9sYXN0X2J5dGU6CiAJCSAgICBpZihjID4gMHg3ZikgewotCQkJaWYgKHZjLT52Y191dGZfY291bnQgPiAwICYmIChjICYgMHhjMCkgPT0gMHg4MCkgewotCQkJCXZjLT52Y191dGZfY2hhciA9ICh2Yy0+dmNfdXRmX2NoYXIgPDwgNikgfCAoYyAmIDB4M2YpOwotCQkJCXZjLT52Y191dGZfY291bnQtLTsKLQkJCQlpZiAodmMtPnZjX3V0Zl9jb3VudCA9PSAwKQotCQkJCSAgICB0YyA9IGMgPSB2Yy0+dmNfdXRmX2NoYXI7Ci0JCQkJZWxzZSBjb250aW51ZTsKKwkJCWlmICh2Yy0+dmNfdXRmX2NvdW50KSB7CisJCQkgICAgICAgaWYgKChjICYgMHhjMCkgPT0gMHg4MCkgeworCQkJCSAgICAgICB2Yy0+dmNfdXRmX2NoYXIgPSAodmMtPnZjX3V0Zl9jaGFyIDw8IDYpIHwgKGMgJiAweDNmKTsKKyAgICAgICAJCQkJICAgICAgIGlmICgtLXZjLT52Y191dGZfY291bnQpIHsKKwkJCQkJICAgICAgIHZjLT52Y19ucGFyKys7CisJCQkJICAgCSAgICAgICBjb250aW51ZTsKKyAgICAgICAJCQkJICAgICAgIH0KKwkJCQkgICAgICAgdGMgPSBjID0gdmMtPnZjX3V0Zl9jaGFyOworCQkJICAgICAgIH0gZWxzZQorCQkJCSAgICAgICBnb3RvIHJlcGxhY2VtZW50X2dseXBoOwogCQkJfSBlbHNlIHsKKwkJCQl2Yy0+dmNfbnBhciA9IDA7CiAJCQkJaWYgKChjICYgMHhlMCkgPT0gMHhjMCkgewogCQkJCSAgICB2Yy0+dmNfdXRmX2NvdW50ID0gMTsKIAkJCQkgICAgdmMtPnZjX3V0Zl9jaGFyID0gKGMgJiAweDFmKTsKQEAgLTIwMzIsMTQgKzIwNTUsMTUgQEAKIAkJCQkgICAgdmMtPnZjX3V0Zl9jb3VudCA9IDU7CiAJCQkJICAgIHZjLT52Y191dGZfY2hhciA9IChjICYgMHgwMSk7CiAJCQkJfSBlbHNlCi0JCQkJICAgIHZjLT52Y191dGZfY291bnQgPSAwOworCSAgICAJCQkgICAgZ290byByZXBsYWNlbWVudF9nbHlwaDsKIAkJCQljb250aW51ZTsKIAkJCSAgICAgIH0KIAkJICAgIH0gZWxzZSB7CisJCSAgICAgIGlmICh2Yy0+dmNfdXRmX2NvdW50KQorCSAgCQkgICAgICBnb3RvIHJlcGxhY2VtZW50X2dseXBoOwogCQkgICAgICB0YyA9IGM7Ci0JCSAgICAgIHZjLT52Y191dGZfY291bnQgPSAwOwogCQkgICAgfQotCQl9IGVsc2UgewkvKiBubyB1dGYgKi8KKwkJfSBlbHNlIHsJLyogbm8gdXRmIG9yIGFsdGVybmF0ZSBjaGFyc2V0IG1vZGUgKi8KIAkJICB0YyA9IHZjLT52Y190cmFuc2xhdGVbdmMtPnZjX3RvZ2dsZV9tZXRhID8gKGMgfCAweDgwKSA6IGNdOwogCQl9CiAKQEAgLTIwNTQsMzEgKzIwNzgsMzMgQEAKICAgICAgICAgICAgICAgICAgKiBkaXJlY3QtdG8tZm9udCB6b25lIGluIFVURi04IG1vZGUuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgb2sgPSB0YyAmJiAoYyA+PSAzMiB8fAotCQkJICAgICghdmMtPnZjX3V0ZiAmJiAhKCgodmMtPnZjX2Rpc3BfY3RybCA/IENUUkxfQUxXQVlTCi0JCQkJCQk6IENUUkxfQUNUSU9OKSA+PiBjKSAmIDEpKSkKKwkJCSAgICAhKHZjLT52Y19kaXNwX2N0cmwgPyAoQ1RSTF9BTFdBWVMgPj4gYykgJiAxIDoKKwkJCQkgIHZjLT52Y191dGYgfHwgKChDVFJMX0FDVElPTiA+PiBjKSAmIDEpKSkKIAkJCSYmIChjICE9IDEyNyB8fCB2Yy0+dmNfZGlzcF9jdHJsKQogCQkJJiYgKGMgIT0gMTI4KzI3KTsKIAogCQlpZiAodmMtPnZjX3N0YXRlID09IEVTbm9ybWFsICYmIG9rKSB7CiAJCQkvKiBOb3cgdHJ5IHRvIGZpbmQgb3V0IGhvdyB0byBkaXNwbGF5IGl0ICovCiAJCQl0YyA9IGNvbnZfdW5pX3RvX3BjKHZjLCB0Yyk7Ci0JCQlpZiAoIHRjID09IC00ICkgeworCQkJaWYgKHRjICYgfmNoYXJtYXNrKSB7CisJCQkJaWYgKCB0YyA9PSAtNCApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgZ290IC00IChub3QgZm91bmQpIHRoZW4gc2VlIGlmIHdlIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCBhIHJlcGxhY2VtZW50IGNoYXJhY3RlciAoVStGRkZEKSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YyA9IGNvbnZfdW5pX3RvX3BjKHZjLCAweGZmZmQpOworcmVwbGFjZW1lbnRfZ2x5cGg6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl0YyA9IGNvbnZfdW5pX3RvX3BjKHZjLCAweGZmZmQpOworCQkJCQlpZiAoISh0YyAmIH5jaGFybWFzaykpCisJCQkJCQlnb3RvIGRpc3BsYXlfZ2x5cGg7CisgICAgICAgICAgICAgICAgICAgICAgICAJfSBlbHNlIGlmICggdGMgIT0gLTMgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJY29udGludWU7IC8qIG5vdGhpbmcgdG8gZGlzcGxheSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBoYXNoIHRhYmxlIG9yIG5vIHJlcGxhY2VtZW50IC0tCisJCQkJICogaG9wZSBmb3IgdGhlIGJlc3QgKi8KKwkJCQlpZiAoIGMgJiB+Y2hhcm1hc2sgKQorCQkJCQl0YyA9ICc/JzsKKwkJCQllbHNlCisJCQkJCXRjID0gYzsKKwkJCX0KIAotCQkJCS8qIE9uZSByZWFzb24gZm9yIHRoZSAtNCBjYW4gYmUgdGhhdCB3ZSBqdXN0Ci0JCQkJICAgZGlkIGEgY2xlYXJfdW5pbWFwKCk7Ci0JCQkJICAgdHJ5IGF0IGxlYXN0IHRvIHNob3cgc29tZXRoaW5nLiAqLwotCQkJCWlmICh0YyA9PSAtNCkKLQkJCQkgICAgIHRjID0gYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRjID09IC0zICkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBCYWQgaGFzaCB0YWJsZSAtLSBob3BlIGZvciB0aGUgYmVzdCAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YyA9IGM7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCQlpZiAodGMgJiB+Y2hhcm1hc2spCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBDb252ZXJzaW9uIGZhaWxlZCAqLwotCitkaXNwbGF5X2dseXBoOgogCQkJaWYgKHZjLT52Y19uZWVkX3dyYXAgfHwgdmMtPnZjX2RlY2ltKQogCQkJCUZMVVNICiAJCQlpZiAodmMtPnZjX25lZWRfd3JhcCkgewpAQCAtMjEwMiw2ICsyMTI4LDE1IEBACiAJCQkJdmMtPnZjX3grKzsKIAkJCQlkcmF3X3RvID0gKHZjLT52Y19wb3MgKz0gMik7CiAJCQl9CisJCQlpZiAodmMtPnZjX3V0Zl9jb3VudCkgeworCQkJCWlmICh2Yy0+dmNfbnBhcikgeworCQkJCQl2Yy0+dmNfbnBhci0tOworCQkJCQlnb3RvIGRpc3BsYXlfZ2x5cGg7CisJCQkJfQorCQkJCXZjLT52Y191dGZfY291bnQgPSAwOworCQkJCWMgPSBvcmlnOworCQkJCWdvdG8gcmVzY2FuX2xhc3RfYnl0ZTsKKwkJCX0KIAkJCWNvbnRpbnVlOwogCQl9CiAJCUZMVVNICkBAIC0yNDk4LDcgKzI1MzMsNyBAQAogCQkJCXR0eS0+d2luc2l6ZS53c19jb2wgPSB2Y19jb25zW2N1cnJjb25zXS5kLT52Y19jb2xzOwogCQkJfQogCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQkJdmNzX21ha2VfZGV2ZnModHR5KTsKKwkJCXZjc19tYWtlX3N5c2ZzKHR0eSk7CiAJCQlyZXR1cm4gcmV0OwogCQl9CiAJfQpAQCAtMjUxMSw3ICsyNTQ2LDcgQEAKICAqIGFuZCB0YWtpbmcgYSByZWYgYWdhaW5zdCB0aGUgdHR5IHdoaWxlIHdlJ3JlIGluIHRoZSBwcm9jZXNzIG9mIGZvcmdldHRpbmcKICAqIGFib3V0IGl0IGFuZCBjbGVhbmluZyB0aGluZ3MgdXAuCiAgKgotICogVGhpcyBpcyBiZWNhdXNlIHZjc19yZW1vdmVfZGV2ZnMoKSBjYW4gc2xlZXAgYW5kIHdpbGwgZHJvcCB0aGUgQktMLgorICogVGhpcyBpcyBiZWNhdXNlIHZjc19yZW1vdmVfc3lzZnMoKSBjYW4gc2xlZXAgYW5kIHdpbGwgZHJvcCB0aGUgQktMLgogICovCiBzdGF0aWMgdm9pZCBjb25fY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKmZpbHApCiB7CkBAIC0yNTI0LDcgKzI1NTksNyBAQAogCQkJdmMtPnZjX3R0eSA9IE5VTEw7CiAJCXR0eS0+ZHJpdmVyX2RhdGEgPSBOVUxMOwogCQlyZWxlYXNlX2NvbnNvbGVfc2VtKCk7Ci0JCXZjc19yZW1vdmVfZGV2ZnModHR5KTsKKwkJdmNzX3JlbW92ZV9zeXNmcyh0dHkpOwogCQltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAJCS8qCiAJCSAqIHR0eV9tdXRleCBpcyByZWxlYXNlZCwgYnV0IHdlIHN0aWxsIGhvbGQgQktMLCBzbyB0aGVyZSBpcwpAQCAtMzc2NSw2ICszODAwLDcgQEAKIEVYUE9SVF9TWU1CT0wodXBkYXRlX3JlZ2lvbik7CiBFWFBPUlRfU1lNQk9MKHJlZHJhd19zY3JlZW4pOwogRVhQT1JUX1NZTUJPTCh2Y19yZXNpemUpOworRVhQT1JUX1NZTUJPTCh2Y19sb2NrX3Jlc2l6ZSk7CiBFWFBPUlRfU1lNQk9MKGZnX2NvbnNvbGUpOwogRVhQT1JUX1NZTUJPTChjb25zb2xlX2JsYW5rX2hvb2spOwogRVhQT1JUX1NZTUJPTChjb25zb2xlX2JsYW5rZWQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Z0X2lvY3RsLmMgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwppbmRleCBhNTYyOGE4Li5hNTNlMzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYworKysgYi9kcml2ZXJzL2NoYXIvdnRfaW9jdGwuYwpAQCAtOTYsNyArOTYsNyBAQAogCQlpZiAoIXBlcm0pCiAJCQlyZXR1cm4gLUVQRVJNOwogCQlpZiAoIWkgJiYgdiA9PSBLX05PU1VDSE1BUCkgewotCQkJLyogZGlzYWxsb2NhdGUgbWFwICovCisJCQkvKiBkZWFsbG9jYXRlIG1hcCAqLwogCQkJa2V5X21hcCA9IGtleV9tYXBzW3NdOwogCQkJaWYgKHMgJiYga2V5X21hcCkgewogCQkJICAgIGtleV9tYXBzW3NdID0gTlVMTDsKQEAgLTgxOSwyMCArODE5LDIwIEBACiAJCWlmIChhcmcgPiBNQVhfTlJfQ09OU09MRVMpCiAJCQlyZXR1cm4gLUVOWElPOwogCQlpZiAoYXJnID09IDApIHsKLQkJICAgIC8qIGRpc2FsbG9jYXRlIGFsbCB1bnVzZWQgY29uc29sZXMsIGJ1dCBsZWF2ZSAwICovCisJCSAgICAvKiBkZWFsbG9jYXRlIGFsbCB1bnVzZWQgY29uc29sZXMsIGJ1dCBsZWF2ZSAwICovCiAJCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7CiAJCQlmb3IgKGk9MTsgaTxNQVhfTlJfQ09OU09MRVM7IGkrKykKIAkJCQlpZiAoISBWVF9CVVNZKGkpKQotCQkJCQl2Y19kaXNhbGxvY2F0ZShpKTsKKwkJCQkJdmNfZGVhbGxvY2F0ZShpKTsKIAkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJfSBlbHNlIHsKLQkJCS8qIGRpc2FsbG9jYXRlIGEgc2luZ2xlIGNvbnNvbGUsIGlmIHBvc3NpYmxlICovCisJCQkvKiBkZWFsbG9jYXRlIGEgc2luZ2xlIGNvbnNvbGUsIGlmIHBvc3NpYmxlICovCiAJCQlhcmctLTsKIAkJCWlmIChWVF9CVVNZKGFyZykpCiAJCQkJcmV0dXJuIC1FQlVTWTsKIAkJCWlmIChhcmcpIHsJCQkgICAgICAvKiBsZWF2ZSAwICovCiAJCQkJYWNxdWlyZV9jb25zb2xlX3NlbSgpOwotCQkJCXZjX2Rpc2FsbG9jYXRlKGFyZyk7CisJCQkJdmNfZGVhbGxvY2F0ZShhcmcpOwogCQkJCXJlbGVhc2VfY29uc29sZV9zZW0oKTsKIAkJCX0KIAkJfQpAQCAtODQ3LDExICs4NDcsOCBAQAogCQlpZiAoZ2V0X3VzZXIobGwsICZ2dHNpemVzLT52X3Jvd3MpIHx8CiAJCSAgICBnZXRfdXNlcihjYywgJnZ0c2l6ZXMtPnZfY29scykpCiAJCQlyZXR1cm4gLUVGQVVMVDsKLQkJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9DT05TT0xFUzsgaSsrKSB7Ci0JCQlhY3F1aXJlX2NvbnNvbGVfc2VtKCk7Ci0JCQl2Y19yZXNpemUodmNfY29uc1tpXS5kLCBjYywgbGwpOwotCQkJcmVsZWFzZV9jb25zb2xlX3NlbSgpOwotCQl9CisJCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfQ09OU09MRVM7IGkrKykKKwkJCXZjX2xvY2tfcmVzaXplKHZjX2NvbnNbaV0uZCwgY2MsIGxsKTsKIAkJcmV0dXJuIDA7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCmluZGV4IGZmZjg5YzIuLjc3YWI3ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCisrKyBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9LY29uZmlnCkBAIC0xNjUsNiArMTY1LDEzIEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlcDkzeHhfd2R0LgogCitjb25maWcgT01BUF9XQVRDSERPRworCXRyaXN0YXRlICJPTUFQIFdhdGNoZG9nIgorCWRlcGVuZHMgb24gV0FUQ0hET0cgJiYgKEFSQ0hfT01BUDE2WFggfHwgQVJDSF9PTUFQMjRYWCkKKwloZWxwCisJICBTdXBwb3J0IGZvciBUSSBPTUFQMTYxMC9PTUFQMTcxMC9PTUFQMjQyMCB3YXRjaGRvZy4gIFNheSAnWScgaGVyZSB0bworCSAgZW5hYmxlIHRoZSBPTUFQMTYxMC9PTUFQMTcxMCB3YXRjaGRvZyB0aW1lci4KKwogIyBYODYgKGkzODYgKyBpYTY0ICsgeDg2XzY0KSBBcmNoaXRlY3R1cmUKIAogY29uZmlnIEFDUVVJUkVfV0RUCkBAIC01MTAsNiArNTE3LDE0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzaHdkdC4KIAorY29uZmlnIFNIX1dEVF9NTUFQCisJYm9vbCAiQWxsb3cgbW1hcCBvZiBTSCBXRFQiCisJZGVmYXVsdCBuCisJZGVwZW5kcyBvbiBTSF9XRFQKKwloZWxwCisJICBJZiB5b3Ugc2F5IFkgaGVyZSwgdXNlciBhcHBsaWNhdGlvbnMgd2lsbCBiZSBhYmxlIHRvIG1tYXAgdGhlCisJICBXRFQvQ1BHIHJlZ2lzdGVycy4KKyMKICMgU1BBUkM2NCBBcmNoaXRlY3R1cmUKIAogY29uZmlnIFdBVENIRE9HX0NQMVhYWApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL01ha2VmaWxlCmluZGV4IDZhYjc3YjYuLjUwOTlmOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci93YXRjaGRvZy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvTWFrZWZpbGUKQEAgLTI0LDYgKzI0LDcgQEAKIAogIyBBUk0gQXJjaGl0ZWN0dXJlCiBvYmotJChDT05GSUdfQVQ5MV9XQVRDSERPRykgKz0gYXQ5MV93ZHQubworb2JqLSQoQ09ORklHX09NQVBfV0FUQ0hET0cpICs9IG9tYXBfd2R0Lm8KIG9iai0kKENPTkZJR18yMTI4NV9XQVRDSERPRykgKz0gd2R0Mjg1Lm8KIG9iai0kKENPTkZJR185NzdfV0FUQ0hET0cpICs9IHdkdDk3Ny5vCiBvYmotJChDT05GSUdfSVhQMjAwMF9XQVRDSERPRykgKz0gaXhwMjAwMF93ZHQubwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjkwYjkwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmMKQEAgLTAsMCArMSwzOTEgQEAKKy8qCisgKiBsaW51eC9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuYworICoKKyAqIFdhdGNoZG9nIGRyaXZlciBmb3IgdGhlIFRJIE9NQVAgMTZ4eCAmIDI0eHggMzJLSHogKG5vbi1zZWN1cmUpIHdhdGNoZG9nCisgKgorICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKgkgPGdkYXZpc0BtdmlzdGEuY29tPiBvciA8c291cmNlQG12aXN0YS5jb20+CisgKgorICogMjAwMyAoYykgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlCisgKiB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMKKyAqIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkgd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcworICogb3IgaW1wbGllZC4KKyAqCisgKiBIaXN0b3J5OgorICoKKyAqIDIwMDMwNTI3OiBHZW9yZ2UgRy4gRGF2aXMgPGdkYXZpc0BtdmlzdGEuY29tPgorICoJSW5pdGlhbGx5IGJhc2VkIG9uIGxpbnV4LTIuNC4xOS1ybWs3LXB4YTEvZHJpdmVycy9jaGFyL3NhMTEwMF93ZHQuYworICoJKGMpIENvcHlyaWdodCAyMDAwIE9sZWcgRHJva2luIDxncmVlbkBjcmltZWEuZWR1PgorICoJQmFzZWQgb24gU29mdERvZyBkcml2ZXIgYnkgQWxhbiBDb3ggPGFsYW5AcmVkaGF0LmNvbT4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMuCisgKgkxLiBNb2RpZmllZCB0byBzdXBwb3J0IE9NQVAxNjEwIDMyLUtIeiB3YXRjaGRvZyB0aW1lcgorICoJMi4gUG9ydGVkIHRvIDIuNiBrZXJuZWwKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUgRGF2aWQgQnJvd25lbGwKKyAqCVVzZSB0aGUgZHJpdmVyIG1vZGVsIGFuZCBzdGFuZGFyZCBpZGVudGlmaWVyczsgaGFuZGxlIGJpZ2dlciB0aW1lb3V0cy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbWlzY2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhdGNoZG9nLmg+CisjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4KKworI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcHJjbS5oPgorCisjaW5jbHVkZSAib21hcF93ZHQuaCIKKworc3RhdGljIHVuc2lnbmVkIHRpbWVyX21hcmdpbjsKK21vZHVsZV9wYXJhbSh0aW1lcl9tYXJnaW4sIHVpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyh0aW1lcl9tYXJnaW4sICJpbml0aWFsIHdhdGNoZG9nIHRpbWVvdXQgKGluIHNlY29uZHMpIik7CisKK3N0YXRpYyBpbnQgb21hcF93ZHRfdXNlcnM7CitzdGF0aWMgc3RydWN0IGNsayAqYXJtd2R0X2NrID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3QgY2xrICptcHVfd2R0X2ljayA9IE5VTEw7CitzdGF0aWMgc3RydWN0IGNsayAqbXB1X3dkdF9mY2sgPSBOVUxMOworCitzdGF0aWMgdW5zaWduZWQgaW50IHdkdF90cmdyX3BhdHRlcm4gPSAweDEyMzQ7CisKK3N0YXRpYyB2b2lkIG9tYXBfd2R0X3Bpbmcodm9pZCkKK3sKKwkvKiB3YWl0IGZvciBwb3N0ZWQgd3JpdGUgdG8gY29tcGxldGUgKi8KKwl3aGlsZSAoKG9tYXBfcmVhZGwoT01BUF9XQVRDSERPR19XUFMpKSAmIDB4MDgpCisJCWNwdV9yZWxheCgpOworCXdkdF90cmdyX3BhdHRlcm4gPSB+d2R0X3RyZ3JfcGF0dGVybjsKKwlvbWFwX3dyaXRlbCh3ZHRfdHJncl9wYXR0ZXJuLCAoT01BUF9XQVRDSERPR19UR1IpKTsKKwkvKiB3YWl0IGZvciBwb3N0ZWQgd3JpdGUgdG8gY29tcGxldGUgKi8KKwl3aGlsZSAoKG9tYXBfcmVhZGwoT01BUF9XQVRDSERPR19XUFMpKSAmIDB4MDgpCisJCWNwdV9yZWxheCgpOworCS8qIHJlbG9hZGVkIFdDUlIgZnJvbSBXTERSICovCit9CisKK3N0YXRpYyB2b2lkIG9tYXBfd2R0X2VuYWJsZSh2b2lkKQoreworCS8qIFNlcXVlbmNlIHRvIGVuYWJsZSB0aGUgd2F0Y2hkb2cgKi8KKwlvbWFwX3dyaXRlbCgweEJCQkIsIE9NQVBfV0FUQ0hET0dfU1BSKTsKKwl3aGlsZSAoKG9tYXBfcmVhZGwoT01BUF9XQVRDSERPR19XUFMpKSAmIDB4MTApCisJCWNwdV9yZWxheCgpOworCW9tYXBfd3JpdGVsKDB4NDQ0NCwgT01BUF9XQVRDSERPR19TUFIpOworCXdoaWxlICgob21hcF9yZWFkbChPTUFQX1dBVENIRE9HX1dQUykpICYgMHgxMCkKKwkJY3B1X3JlbGF4KCk7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfd2R0X2Rpc2FibGUodm9pZCkKK3sKKwkvKiBzZXF1ZW5jZSByZXF1aXJlZCB0byBkaXNhYmxlIHdhdGNoZG9nICovCisJb21hcF93cml0ZWwoMHhBQUFBLCBPTUFQX1dBVENIRE9HX1NQUik7CS8qIFRJTUVSX01PREUgKi8KKwl3aGlsZSAob21hcF9yZWFkbChPTUFQX1dBVENIRE9HX1dQUykgJiAweDEwKQorCQljcHVfcmVsYXgoKTsKKwlvbWFwX3dyaXRlbCgweDU1NTUsIE9NQVBfV0FUQ0hET0dfU1BSKTsJLyogVElNRVJfTU9ERSAqLworCXdoaWxlIChvbWFwX3JlYWRsKE9NQVBfV0FUQ0hET0dfV1BTKSAmIDB4MTApCisJCWNwdV9yZWxheCgpOworfQorCitzdGF0aWMgdm9pZCBvbWFwX3dkdF9hZGp1c3RfdGltZW91dCh1bnNpZ25lZCBuZXdfdGltZW91dCkKK3sKKwlpZiAobmV3X3RpbWVvdXQgPCBUSU1FUl9NQVJHSU5fTUlOKQorCQluZXdfdGltZW91dCA9IFRJTUVSX01BUkdJTl9ERUZBVUxUOworCWlmIChuZXdfdGltZW91dCA+IFRJTUVSX01BUkdJTl9NQVgpCisJCW5ld190aW1lb3V0ID0gVElNRVJfTUFSR0lOX01BWDsKKwl0aW1lcl9tYXJnaW4gPSBuZXdfdGltZW91dDsKK30KKworc3RhdGljIHZvaWQgb21hcF93ZHRfc2V0X3RpbWVvdXQodm9pZCkKK3sKKwl1MzIgcHJlX21hcmdpbiA9IEdFVF9XTERSX1ZBTCh0aW1lcl9tYXJnaW4pOworCisJLyoganVzdCBjb3VudCB1cCBhdCAzMiBLSHogKi8KKwl3aGlsZSAob21hcF9yZWFkbChPTUFQX1dBVENIRE9HX1dQUykgJiAweDA0KQorCQljcHVfcmVsYXgoKTsKKwlvbWFwX3dyaXRlbChwcmVfbWFyZ2luLCBPTUFQX1dBVENIRE9HX0xEUik7CisJd2hpbGUgKG9tYXBfcmVhZGwoT01BUF9XQVRDSERPR19XUFMpICYgMHgwNCkKKwkJY3B1X3JlbGF4KCk7Cit9CisKKy8qCisgKglBbGxvdyBvbmx5IG9uZSB0YXNrIHRvIGhvbGQgaXQgb3BlbgorICovCisKK3N0YXRpYyBpbnQgb21hcF93ZHRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlpZiAodGVzdF9hbmRfc2V0X2JpdCgxLCAodW5zaWduZWQgbG9uZyAqKSZvbWFwX3dkdF91c2VycykpCisJCXJldHVybiAtRUJVU1k7CisKKwlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCWNsa19lbmFibGUoYXJtd2R0X2NrKTsJLyogRW5hYmxlIHRoZSBjbG9jayAqLworCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNsa19lbmFibGUobXB1X3dkdF9pY2spOyAgICAvKiBFbmFibGUgdGhlIGludGVyZmFjZSBjbG9jayAqLworCQljbGtfZW5hYmxlKG1wdV93ZHRfZmNrKTsgICAgLyogRW5hYmxlIHRoZSBmdW5jdGlvbmFsIGNsb2NrICovCisJfQorCisJLyogaW5pdGlhbGl6ZSBwcmVzY2FsZXIgKi8KKwl3aGlsZSAob21hcF9yZWFkbChPTUFQX1dBVENIRE9HX1dQUykgJiAweDAxKQorCQljcHVfcmVsYXgoKTsKKwlvbWFwX3dyaXRlbCgoMSA8PCA1KSB8IChQVFYgPDwgMiksIE9NQVBfV0FUQ0hET0dfQ05UUkwpOworCXdoaWxlIChvbWFwX3JlYWRsKE9NQVBfV0FUQ0hET0dfV1BTKSAmIDB4MDEpCisJCWNwdV9yZWxheCgpOworCisJb21hcF93ZHRfc2V0X3RpbWVvdXQoKTsKKwlvbWFwX3dkdF9lbmFibGUoKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBvbWFwX3dkdF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCS8qCisJICogICAgICBTaHV0IG9mZiB0aGUgdGltZXIgdW5sZXNzIE5PV0FZT1VUIGlzIGRlZmluZWQuCisJICovCisjaWZuZGVmIENPTkZJR19XQVRDSERPR19OT1dBWU9VVAorCW9tYXBfd2R0X2Rpc2FibGUoKTsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQljbGtfZGlzYWJsZShhcm13ZHRfY2spOwkvKiBEaXNhYmxlIHRoZSBjbG9jayAqLworCQljbGtfcHV0KGFybXdkdF9jayk7CisJCWFybXdkdF9jayA9IE5VTEw7CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWNsa19kaXNhYmxlKG1wdV93ZHRfaWNrKTsJLyogRGlzYWJsZSB0aGUgY2xvY2sgKi8KKwkJY2xrX2Rpc2FibGUobXB1X3dkdF9mY2spOwkvKiBEaXNhYmxlIHRoZSBjbG9jayAqLworCQljbGtfcHV0KG1wdV93ZHRfaWNrKTsKKwkJY2xrX3B1dChtcHVfd2R0X2Zjayk7CisJCW1wdV93ZHRfaWNrID0gTlVMTDsKKwkJbXB1X3dkdF9mY2sgPSBOVUxMOworCX0KKyNlbHNlCisJcHJpbnRrKEtFUk5fQ1JJVCAib21hcF93ZHQ6IFVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyFcbiIpOworI2VuZGlmCisJb21hcF93ZHRfdXNlcnMgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdAorb21hcF93ZHRfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpkYXRhLAorCQlzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCit7CisJLyogUmVmcmVzaCBMT0FEX1RJTUUuICovCisJaWYgKGxlbikKKwkJb21hcF93ZHRfcGluZygpOworCXJldHVybiBsZW47Cit9CisKK3N0YXRpYyBpbnQKK29tYXBfd2R0X2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAorCXVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCWludCBuZXdfbWFyZ2luOworCXN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBpZGVudCA9IHsKKwkJLmlkZW50aXR5ID0gIk9NQVAgV2F0Y2hkb2ciLAorCQkub3B0aW9ucyA9IFdESU9GX1NFVFRJTUVPVVQsCisJCS5maXJtd2FyZV92ZXJzaW9uID0gMCwKKwl9OworCisJc3dpdGNoIChjbWQpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCWNhc2UgV0RJT0NfR0VUU1VQUE9SVDoKKwkJcmV0dXJuIGNvcHlfdG9fdXNlcigoc3RydWN0IHdhdGNoZG9nX2luZm8gX191c2VyICopYXJnLCAmaWRlbnQsCisJCQkJc2l6ZW9mKGlkZW50KSk7CisJY2FzZSBXRElPQ19HRVRTVEFUVVM6CisJCXJldHVybiBwdXRfdXNlcigwLCAoaW50IF9fdXNlciAqKWFyZyk7CisJY2FzZSBXRElPQ19HRVRCT09UU1RBVFVTOgorCQlpZiAoY3B1X2lzX29tYXAxNnh4KCkpCisJCQlyZXR1cm4gcHV0X3VzZXIob21hcF9yZWFkdyhBUk1fU1lTU1QpLAorCQkJCQkoaW50IF9fdXNlciAqKWFyZyk7CisJCWlmIChjcHVfaXNfb21hcDI0eHgoKSkKKwkJCXJldHVybiBwdXRfdXNlcihvbWFwX3ByY21fZ2V0X3Jlc2V0X3NvdXJjZXMoKSwKKwkJCQkJKGludCBfX3VzZXIgKilhcmcpOworCWNhc2UgV0RJT0NfS0VFUEFMSVZFOgorCQlvbWFwX3dkdF9waW5nKCk7CisJCXJldHVybiAwOworCWNhc2UgV0RJT0NfU0VUVElNRU9VVDoKKwkJaWYgKGdldF91c2VyKG5ld19tYXJnaW4sIChpbnQgX191c2VyICopYXJnKSkKKwkJCXJldHVybiAtRUZBVUxUOworCQlvbWFwX3dkdF9hZGp1c3RfdGltZW91dChuZXdfbWFyZ2luKTsKKworCQlvbWFwX3dkdF9kaXNhYmxlKCk7CisJCW9tYXBfd2R0X3NldF90aW1lb3V0KCk7CisJCW9tYXBfd2R0X2VuYWJsZSgpOworCisJCW9tYXBfd2R0X3BpbmcoKTsKKwkJLyogRmFsbCAqLworCWNhc2UgV0RJT0NfR0VUVElNRU9VVDoKKwkJcmV0dXJuIHB1dF91c2VyKHRpbWVyX21hcmdpbiwgKGludCBfX3VzZXIgKilhcmcpOworCX0KK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgb21hcF93ZHRfZm9wcyA9IHsKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkud3JpdGUgPSBvbWFwX3dkdF93cml0ZSwKKwkuaW9jdGwgPSBvbWFwX3dkdF9pb2N0bCwKKwkub3BlbiA9IG9tYXBfd2R0X29wZW4sCisJLnJlbGVhc2UgPSBvbWFwX3dkdF9yZWxlYXNlLAorfTsKKworc3RhdGljIHN0cnVjdCBtaXNjZGV2aWNlIG9tYXBfd2R0X21pc2NkZXYgPSB7CisJLm1pbm9yID0gV0FUQ0hET0dfTUlOT1IsCisJLm5hbWUgPSAid2F0Y2hkb2ciLAorCS5mb3BzID0gJm9tYXBfd2R0X2ZvcHMKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG9tYXBfd2R0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHJlc291cmNlICpyZXMsICptZW07CisJaW50IHJldDsKKworCS8qIHJlc2VydmUgc3RhdGljIHJlZ2lzdGVyIG1hcHBpbmdzICovCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuIC1FTk9FTlQ7CisKKwltZW0gPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcmVzLT5lbmQgLSByZXMtPnN0YXJ0ICsgMSwKKwkJCQkgcGRldi0+bmFtZSk7CisJaWYgKG1lbSA9PSBOVUxMKQorCQlyZXR1cm4gLUVCVVNZOworCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgbWVtKTsKKworCW9tYXBfd2R0X3VzZXJzID0gMDsKKworCWlmIChjcHVfaXNfb21hcDE2eHgoKSkgeworCQlhcm13ZHRfY2sgPSBjbGtfZ2V0KCZwZGV2LT5kZXYsICJhcm13ZHRfY2siKTsKKwkJaWYgKElTX0VSUihhcm13ZHRfY2spKSB7CisJCQlyZXQgPSBQVFJfRVJSKGFybXdkdF9jayk7CisJCQlhcm13ZHRfY2sgPSBOVUxMOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCW1wdV93ZHRfaWNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9pY2siKTsKKwkJaWYgKElTX0VSUihtcHVfd2R0X2ljaykpIHsKKwkJCXJldCA9IFBUUl9FUlIobXB1X3dkdF9pY2spOworCQkJbXB1X3dkdF9pY2sgPSBOVUxMOworCQkJZ290byBmYWlsOworCQl9CisJCW1wdV93ZHRfZmNrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAibXB1X3dkdF9mY2siKTsKKwkJaWYgKElTX0VSUihtcHVfd2R0X2ZjaykpIHsKKwkJCXJldCA9IFBUUl9FUlIobXB1X3dkdF9mY2spOworCQkJbXB1X3dkdF9mY2sgPSBOVUxMOworCQkJZ290byBmYWlsOworCQl9CisJfQorCisJb21hcF93ZHRfZGlzYWJsZSgpOworCW9tYXBfd2R0X2FkanVzdF90aW1lb3V0KHRpbWVyX21hcmdpbik7CisKKwlvbWFwX3dkdF9taXNjZGV2LmRldiA9ICZwZGV2LT5kZXY7CisJcmV0ID0gbWlzY19yZWdpc3Rlcigmb21hcF93ZHRfbWlzY2Rldik7CisJaWYgKHJldCkKKwkJZ290byBmYWlsOworCisJcHJfaW5mbygiT01BUCBXYXRjaGRvZyBUaW1lcjogaW5pdGlhbCB0aW1lb3V0ICVkIHNlY1xuIiwgdGltZXJfbWFyZ2luKTsKKworCS8qIGF1dG9nYXRlIE9DUCBpbnRlcmZhY2UgY2xvY2sgKi8KKwlvbWFwX3dyaXRlbCgweDAxLCBPTUFQX1dBVENIRE9HX1NZU19DT05GSUcpOworCXJldHVybiAwOworCitmYWlsOgorCWlmIChhcm13ZHRfY2spCisJCWNsa19wdXQoYXJtd2R0X2NrKTsKKwlpZiAobXB1X3dkdF9pY2spCisJCWNsa19wdXQobXB1X3dkdF9pY2spOworCWlmIChtcHVfd2R0X2ZjaykKKwkJY2xrX3B1dChtcHVfd2R0X2Zjayk7CisJcmVsZWFzZV9yZXNvdXJjZShtZW0pOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfd2R0X3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJb21hcF93ZHRfZGlzYWJsZSgpOworfQorCitzdGF0aWMgaW50IG9tYXBfd2R0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCByZXNvdXJjZSAqbWVtID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJbWlzY19kZXJlZ2lzdGVyKCZvbWFwX3dkdF9taXNjZGV2KTsKKwlyZWxlYXNlX3Jlc291cmNlKG1lbSk7CisJaWYgKGFybXdkdF9jaykKKwkJY2xrX3B1dChhcm13ZHRfY2spOworCWlmIChtcHVfd2R0X2ljaykKKwkJY2xrX3B1dChtcHVfd2R0X2ljayk7CisJaWYgKG1wdV93ZHRfZmNrKQorCQljbGtfcHV0KG1wdV93ZHRfZmNrKTsKKwlyZXR1cm4gMDsKK30KKworI2lmZGVmCUNPTkZJR19QTQorCisvKiBSRVZJU0lUIC4uLiBub3QgY2xlYXIgdGhpcyBpcyB0aGUgYmVzdCB3YXkgdG8gaGFuZGxlIHN5c3RlbSBzdXNwZW5kOyBhbmQKKyAqIGl0J3MgdmVyeSBpbmFwcHJvcHJpYXRlIGZvciBzZWxlY3RpdmUgZGV2aWNlIHN1c3BlbmQgKGUuZy4gc3VzcGVuZGluZyB0aGlzCisgKiB0aHJvdWdoIHN5c2ZzIHJhdGhlciB0aGFuIGJ5IHN0b3BwaW5nIHRoZSB3YXRjaGRvZyBkYWVtb24pLiAgQWxzbywgdGhpcworICogbWF5IG5vdCBwbGF5IHdlbGwgZW5vdWdoIHdpdGggTk9XQVlPVVQuLi4KKyAqLworCitzdGF0aWMgaW50IG9tYXBfd2R0X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCWlmIChvbWFwX3dkdF91c2VycykKKwkJb21hcF93ZHRfZGlzYWJsZSgpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG9tYXBfd2R0X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCWlmIChvbWFwX3dkdF91c2VycykgeworCQlvbWFwX3dkdF9lbmFibGUoKTsKKwkJb21hcF93ZHRfcGluZygpOworCX0KKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUJb21hcF93ZHRfc3VzcGVuZAlOVUxMCisjZGVmaW5lCW9tYXBfd2R0X3Jlc3VtZQkJTlVMTAorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG9tYXBfd2R0X2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcF93ZHRfcHJvYmUsCisJLnJlbW92ZQkJPSBvbWFwX3dkdF9yZW1vdmUsCisJLnNodXRkb3duCT0gb21hcF93ZHRfc2h1dGRvd24sCisJLnN1c3BlbmQJPSBvbWFwX3dkdF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcF93ZHRfcmVzdW1lLAorCS5kcml2ZXIJCT0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKKwkJLm5hbWUJPSAib21hcF93ZHQiLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX3dkdF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3Rlcigmb21hcF93ZHRfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG9tYXBfd2R0X2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF93ZHRfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQob21hcF93ZHRfaW5pdCk7Cittb2R1bGVfZXhpdChvbWFwX3dkdF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiR2VvcmdlIEcuIERhdmlzIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuaCBiL2RyaXZlcnMvY2hhci93YXRjaGRvZy9vbWFwX3dkdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYTUzMmE1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9jaGFyL3dhdGNoZG9nL29tYXBfd2R0LmgKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqICBsaW51eC9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvb21hcF93ZHQuaAorICoKKyAqICBCUklFRiBNT0RVTEUgREVTQ1JJUFRJT04KKyAqICAgICAgT01BUCBXYXRjaGRvZyB0aW1lciByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDQgVGV4YXMgSW5zdHJ1bWVudHMuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRISVMgIFNPRlRXQVJFICBJUyBQUk9WSURFRCAgIGBgQVMgIElTJycgQU5EICAgQU5ZICBFWFBSRVNTIE9SIElNUExJRUQKKyAqICBXQVJSQU5USUVTLCAgIElOQ0xVRElORywgQlVUIE5PVCAgTElNSVRFRCAgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqICBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4KKyAqICBOTyAgRVZFTlQgIFNIQUxMICAgVEhFIEFVVEhPUiAgQkUgICAgTElBQkxFIEZPUiBBTlkgICBESVJFQ1QsIElORElSRUNULAorICogIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogIE5PVCBMSU1JVEVEICAgVE8sIFBST0NVUkVNRU5UIE9GICBTVUJTVElUVVRFIEdPT0RTICBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogIFVTRSwgREFUQSwgIE9SIFBST0ZJVFM7IE9SICBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorICogIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlICB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICogIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX09NQVBfV0FUQ0hET0dfSAorI2RlZmluZSBfT01BUF9XQVRDSERPR19ICisKKyNkZWZpbmUgT01BUDE2MTBfV0FUQ0hET0dfQkFTRQkJMHhmZmZlYjAwMAorI2RlZmluZSBPTUFQMjQyMF9XQVRDSERPR19CQVNFCQkweDQ4MDIyMDAwCS8qV0RUIFRpbWVyIDIgKi8KKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyNFhYCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfQkFTRSAJCU9NQVAyNDIwX1dBVENIRE9HX0JBU0UKKyNlbHNlCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfQkFTRSAJCU9NQVAxNjEwX1dBVENIRE9HX0JBU0UKKyNkZWZpbmUgUk1fUlNUU1RfV0tVUAkJCTAKKyNlbmRpZgorCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfUkVWCQkoT01BUF9XQVRDSERPR19CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9XQVRDSERPR19TWVNfQ09ORklHCShPTUFQX1dBVENIRE9HX0JBU0UgKyAweDEwKQorI2RlZmluZSBPTUFQX1dBVENIRE9HX1NUQVRVUwkJKE9NQVBfV0FUQ0hET0dfQkFTRSArIDB4MTQpCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfQ05UUkwJCShPTUFQX1dBVENIRE9HX0JBU0UgKyAweDI0KQorI2RlZmluZSBPTUFQX1dBVENIRE9HX0NSUgkJKE9NQVBfV0FUQ0hET0dfQkFTRSArIDB4MjgpCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfTERSCQkoT01BUF9XQVRDSERPR19CQVNFICsgMHgyYykKKyNkZWZpbmUgT01BUF9XQVRDSERPR19UR1IJCShPTUFQX1dBVENIRE9HX0JBU0UgKyAweDMwKQorI2RlZmluZSBPTUFQX1dBVENIRE9HX1dQUwkJKE9NQVBfV0FUQ0hET0dfQkFTRSArIDB4MzQpCisjZGVmaW5lIE9NQVBfV0FUQ0hET0dfU1BSCQkoT01BUF9XQVRDSERPR19CQVNFICsgMHg0OCkKKworLyogVXNpbmcgdGhlIHByZXNjYWxlciwgdGhlIE9NQVAgd2F0Y2hkb2cgY291bGQgZ28gZm9yIG1hbnkKKyAqIG1vbnRocyBiZWZvcmUgZmlyaW5nLiAgVGhlc2UgbGltaXRzIHdvcmsgd2l0aG91dCBzY2FsaW5nLAorICogd2l0aCB0aGUgNjAgc2Vjb25kIGRlZmF1bHQgYXNzdW1lZCBieSBtb3N0IHRvb2xzIGFuZCBkb2NzLgorICovCisjZGVmaW5lIFRJTUVSX01BUkdJTl9NQVggICAgCSgyNCAqIDYwICogNjApCS8qIDEgZGF5ICovCisjZGVmaW5lIFRJTUVSX01BUkdJTl9ERUZBVUxUCTYwCS8qIDYwIHNlY3MgKi8KKyNkZWZpbmUgVElNRVJfTUFSR0lOX01JTgkxCisKKyNkZWZpbmUgUFRWCQkJMAkvKiBwcmVzY2FsZSAqLworI2RlZmluZSBHRVRfV0xEUl9WQUwoc2VjcykJKDB4ZmZmZmZmZmYgLSAoKHNlY3MpICogKDMyNzY4LygxPDxQVFYpKSkgKyAxKQorCisjZW5kaWYJCQkJLyogX09NQVBfV0FUQ0hET0dfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3dhdGNoZG9nL3Nod2R0LmMgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2h3ZHQuYwppbmRleCAxMzU1MDM4Li5lNWI4YzY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2h3ZHQuYworKysgYi9kcml2ZXJzL2NoYXIvd2F0Y2hkb2cvc2h3ZHQuYwpAQCAtMjcsNyArMjcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLQorI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vd2F0Y2hkb2cuaD4KQEAgLTEyNSw3ICsxMjUsNiBAQAogCiAvKioKICAqIAlzaF93ZHRfc3RvcCAtIFN0b3AgdGhlIFdhdGNoZG9nCi0gKgogICogCVN0b3BzIHRoZSB3YXRjaGRvZy4KICAqLwogc3RhdGljIHZvaWQgc2hfd2R0X3N0b3Aodm9pZCkKQEAgLTE0MSwyMiArMTQwLDIwIEBACiAKIC8qKgogICogCXNoX3dkdF9rZWVwYWxpdmUgLSBLZWVwIHRoZSBVc2Vyc3BhY2UgV2F0Y2hkb2cgQWxpdmUKLSAqCiAgKiAJVGhlIFVzZXJzcGFjZSB3YXRjaGRvZyBnb3QgYSBLZWVwQWxpdmU6IHNjaGVkdWxlIHRoZSBuZXh0IGhlYXJ0YmVhdC4KICAqLwotc3RhdGljIHZvaWQgc2hfd2R0X2tlZXBhbGl2ZSh2b2lkKQorc3RhdGljIGlubGluZSB2b2lkIHNoX3dkdF9rZWVwYWxpdmUodm9pZCkKIHsKIAluZXh0X2hlYXJ0YmVhdCA9IGppZmZpZXMgKyAoaGVhcnRiZWF0ICogSFopOwogfQogCiAvKioKICAqIAlzaF93ZHRfc2V0X2hlYXJ0YmVhdCAtIFNldCB0aGUgVXNlcnNwYWNlIFdhdGNoZG9nIGhlYXJ0YmVhdAotICoKICAqIAlTZXQgdGhlIFVzZXJzcGFjZSBXYXRjaGRvZyBoZWFydGJlYXQKICAqLwogc3RhdGljIGludCBzaF93ZHRfc2V0X2hlYXJ0YmVhdChpbnQgdCkKIHsKLQlpZiAoKHQgPCAxKSB8fCAodCA+IDM2MDApKSAvKiBhcmJpdHJhcnkgdXBwZXIgbGltaXQgKi8KKwlpZiAodW5saWtlbHkoKHQgPCAxKSB8fCAodCA+IDM2MDApKSkgLyogYXJiaXRyYXJ5IHVwcGVyIGxpbWl0ICovCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGVhcnRiZWF0ID0gdDsKQEAgLTE2NSw3ICsxNjIsNiBAQAogCiAvKioKICAqIAlzaF93ZHRfcGluZyAtIFBpbmcgdGhlIFdhdGNoZG9nCi0gKgogICoJQGRhdGE6IFVudXNlZAogICoKICAqIAlDbGVhcnMgb3ZlcmZsb3cgYml0LCByZXNldHMgdGltZXIgY291bnRlci4KQEAgLTE4MiwxNCArMTc4LDEzIEBACiAJCXNoX3dkdF93cml0ZV9jbnQoMCk7CiAKIAkJbW9kX3RpbWVyKCZ0aW1lciwgbmV4dF9waW5nX3BlcmlvZChjbG9ja19kaXZpc2lvbl9yYXRpbykpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgUEZYICJIZWFydGJlYXQgbG9zdCEgV2lsbCBub3QgcGluZyB0aGUgd2F0Y2hkb2dcbiIpOwotCX0KKwl9IGVsc2UKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBQRlggIkhlYXJ0YmVhdCBsb3N0ISBXaWxsIG5vdCBwaW5nICIKKwkJICAgICAgICJ0aGUgd2F0Y2hkb2dcbiIpOwogfQogCiAvKioKICAqIAlzaF93ZHRfb3BlbiAtIE9wZW4gdGhlIERldmljZQotICoKICAqIAlAaW5vZGU6IGlub2RlIG9mIGRldmljZQogICogCUBmaWxlOiBmaWxlIGhhbmRsZSBvZiBkZXZpY2UKICAqCkBAIC0yMDksNyArMjA0LDYgQEAKIAogLyoqCiAgKiAJc2hfd2R0X2Nsb3NlIC0gQ2xvc2UgdGhlIERldmljZQotICoKICAqIAlAaW5vZGU6IGlub2RlIG9mIGRldmljZQogICogCUBmaWxlOiBmaWxlIGhhbmRsZSBvZiBkZXZpY2UKICAqCkBAIC0yMjAsNyArMjE0LDggQEAKIAlpZiAoc2h3ZHRfZXhwZWN0X2Nsb3NlID09IDQyKSB7CiAJCXNoX3dkdF9zdG9wKCk7CiAJfSBlbHNlIHsKLQkJcHJpbnRrKEtFUk5fQ1JJVCBQRlggIlVuZXhwZWN0ZWQgY2xvc2UsIG5vdCBzdG9wcGluZyB3YXRjaGRvZyFcbiIpOworCQlwcmludGsoS0VSTl9DUklUIFBGWCAiVW5leHBlY3RlZCBjbG9zZSwgbm90ICIKKwkJICAgICAgICJzdG9wcGluZyB3YXRjaGRvZyFcbiIpOwogCQlzaF93ZHRfa2VlcGFsaXZlKCk7CiAJfQogCkBAIC0yMzIsNyArMjI3LDYgQEAKIAogLyoqCiAgKiAJc2hfd2R0X3dyaXRlIC0gV3JpdGUgdG8gRGV2aWNlCi0gKgogICogCUBmaWxlOiBmaWxlIGhhbmRsZSBvZiBkZXZpY2UKICAqIAlAYnVmOiBidWZmZXIgdG8gd3JpdGUKICAqIAlAY291bnQ6IGxlbmd0aCBvZiBidWZmZXIKQEAgLTI2NCw4ICsyNTgsNTYgQEAKIH0KIAogLyoqCi0gKiAJc2hfd2R0X2lvY3RsIC0gUXVlcnkgRGV2aWNlCisgKiAJc2hfd2R0X21tYXAgLSBtYXAgV0RUL0NQRyByZWdpc3RlcnMgaW50byB1c2Vyc3BhY2UKKyAqIAlAZmlsZTogZmlsZSBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2UKKyAqIAlAdm1hOiBWTUEgdG8gbWFwIHRoZSByZWdpc3RlcnMgaW50bwogICoKKyAqIAlBIHNpbXBsZSBtbWFwKCkgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBjb3JuZXIgY2FzZXMgd2hlcmUgdGhlIGNvdW50ZXIKKyAqIAluZWVkcyB0byBiZSBtYXBwZWQgaW4gdXNlcnNwYWNlIGRpcmVjdGx5LiBEdWUgdG8gdGhlIHJlbGF0aXZlbHkgc21hbGwKKyAqIAlzaXplIG9mIHRoZSBhcmVhLCBuZWlnaGJvdXJpbmcgcmVnaXN0ZXJzIG5vdCBuZWNlc3NhcmlseSB0aWVkIHRvIHRoZQorICogCUNQRyB3aWxsIGFsc28gYmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSByZWdpc3RlciBwYWdlLCBzbyB0aGlzIHJlbWFpbnMKKyAqIAljb25maWd1cmFibGUgZm9yIHVzZXJzIHRoYXQgcmVhbGx5IGtub3cgd2hhdCB0aGV5J3JlIGRvaW5nLgorICoKKyAqCUFkZGl0aW9uYWx5LCB0aGUgcmVnaXN0ZXIgcGFnZSBtYXBzIGluIHRoZSBDUEcgcmVnaXN0ZXIgYmFzZSByZWxhdGl2ZQorICoJdG8gdGhlIG5lYXJlc3QgcGFnZS1hbGlnbmVkIGJvdW5kYXJ5LCB3aGljaCByZXF1aXJlcyB0aGF0IHVzZXJzcGFjZSBkbworICoJdGhlIGFwcHJvcHJpYXRlIENQVSBzdWJ0eXBlIG1hdGggZm9yIGNhbGN1bGF0aW5nIHRoZSBwYWdlIG9mZnNldCBmb3IKKyAqCXRoZSBjb3VudGVyIHZhbHVlLgorICovCitzdGF0aWMgaW50IHNoX3dkdF9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKK3sKKwlpbnQgcmV0ID0gLUVOT1NZUzsKKworI2lmZGVmIENPTkZJR19TSF9XRFRfTU1BUAorCXVuc2lnbmVkIGxvbmcgYWRkcjsKKworCS8qIE9ubHkgc3VwcG9ydCB0aGUgc2ltcGxlIGNhc2VzIHdoZXJlIHdlIG1hcCBpbiBhIHJlZ2lzdGVyIHBhZ2UuICovCisJaWYgKCgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSAhPSBQQUdFX1NJWkUpIHx8IHZtYS0+dm1fcGdvZmYpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoKKwkgKiBQaWNrIFdUQ05UIGFzIHRoZSBzdGFydCwgaXQncyB1c3VhbGx5IHRoZSBmaXJzdCByZWdpc3RlciBhZnRlciB0aGUKKwkgKiBGUlFDUiwgYW5kIG5laXRoZXIgb25lIGFyZSBnZW5lcmFsbHkgcGFnZS1hbGlnbmVkIG91dCBvZiB0aGUgYm94LgorCSAqLworCWFkZHIgPSBXVENOVCAmIH4oUEFHRV9TSVpFIC0gMSk7CisKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPOworCXZtYS0+dm1fcGFnZV9wcm90ID0gcGdwcm90X25vbmNhY2hlZCh2bWEtPnZtX3BhZ2VfcHJvdCk7CisKKwlpZiAoaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdm1hLT52bV9zdGFydCwgYWRkciA+PiBQQUdFX1NISUZULAorCQkJICAgICAgIFBBR0VfU0laRSwgdm1hLT52bV9wYWdlX3Byb3QpKSB7CisJCXByaW50ayhLRVJOX0VSUiBQRlggIiVzOiBpb19yZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAorCQkgICAgICAgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCisJcmV0ID0gMDsKKyNlbmRpZgorCisJcmV0dXJuIHJldDsKK30KKworLyoqCisgKiAJc2hfd2R0X2lvY3RsIC0gUXVlcnkgRGV2aWNlCiAgKiAJQGlub2RlOiBpbm9kZSBvZiBkZXZpY2UKICAqIAlAZmlsZTogZmlsZSBoYW5kbGUgb2YgZGV2aWNlCiAgKiAJQGNtZDogd2F0Y2hkb2cgY29tbWFuZApAQCAtMzI2LDcgKzM2OCw2IEBACiAKIC8qKgogICogCXNoX3dkdF9ub3RpZnlfc3lzIC0gTm90aWZpZXIgSGFuZGxlcgotICoKICAqIAlAdGhpczogbm90aWZpZXIgYmxvY2sKICAqIAlAY29kZTogbm90aWZpZXIgZXZlbnQKICAqIAlAdW51c2VkOiB1bnVzZWQKQEAgLTMzNyw5ICszNzgsOCBAQAogc3RhdGljIGludCBzaF93ZHRfbm90aWZ5X3N5cyhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqdW51c2VkKQogewotCWlmIChjb2RlID09IFNZU19ET1dOIHx8IGNvZGUgPT0gU1lTX0hBTFQpIHsKKwlpZiAoY29kZSA9PSBTWVNfRE9XTiB8fCBjb2RlID09IFNZU19IQUxUKQogCQlzaF93ZHRfc3RvcCgpOwotCX0KIAogCXJldHVybiBOT1RJRllfRE9ORTsKIH0KQEAgLTM1MSwxMCArMzkxLDEyIEBACiAJLmlvY3RsCQk9IHNoX3dkdF9pb2N0bCwKIAkub3BlbgkJPSBzaF93ZHRfb3BlbiwKIAkucmVsZWFzZQk9IHNoX3dkdF9jbG9zZSwKKwkubW1hcAkJPSBzaF93ZHRfbW1hcCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgd2F0Y2hkb2dfaW5mbyBzaF93ZHRfaW5mbyA9IHsKLQkub3B0aW9ucwkJPSBXRElPRl9LRUVQQUxJVkVQSU5HIHwgV0RJT0ZfU0VUVElNRU9VVCB8IFdESU9GX01BR0lDQ0xPU0UsCisJLm9wdGlvbnMJCT0gV0RJT0ZfS0VFUEFMSVZFUElORyB8IFdESU9GX1NFVFRJTUVPVVQgfAorCQkJCSAgV0RJT0ZfTUFHSUNDTE9TRSwKIAkuZmlybXdhcmVfdmVyc2lvbgk9IDEsCiAJLmlkZW50aXR5CQk9ICJTSCBXRFQiLAogfTsKQEAgLTM3MSw3ICs0MTMsNiBAQAogCiAvKioKICAqIAlzaF93ZHRfaW5pdCAtIEluaXRpYWxpemUgbW9kdWxlCi0gKgogICogCVJlZ2lzdGVycyB0aGUgZGV2aWNlIGFuZCBub3RpZmllciBoYW5kbGVyLiBBY3R1YWwgZGV2aWNlCiAgKiAJaW5pdGlhbGl6YXRpb24gaXMgaGFuZGxlZCBieSBzaF93ZHRfb3BlbigpLgogICovCkBAIC0zODEsMTUgKzQyMiwxNSBAQAogCiAJaWYgKChjbG9ja19kaXZpc2lvbl9yYXRpbyA8IDB4NSkgfHwgKGNsb2NrX2RpdmlzaW9uX3JhdGlvID4gMHg3KSkgewogCQljbG9ja19kaXZpc2lvbl9yYXRpbyA9IFdUQ1NSX0NLU180MDk2OwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiY2xvY2tfZGl2aXNpb25fcmF0aW8gdmFsdWUgbXVzdCBiZSAweDU8PXg8PTB4NywgdXNpbmcgJWRcbiIsCi0JCQljbG9ja19kaXZpc2lvbl9yYXRpbyk7CisJCXByaW50ayhLRVJOX0lORk8gUEZYICJjbG9ja19kaXZpc2lvbl9yYXRpbyB2YWx1ZSBtdXN0ICIKKwkJICAgICAgICJiZSAweDU8PXg8PTB4NywgdXNpbmcgJWRcbiIsIGNsb2NrX2RpdmlzaW9uX3JhdGlvKTsKIAl9CiAKLQlpZiAoc2hfd2R0X3NldF9oZWFydGJlYXQoaGVhcnRiZWF0KSkKLQl7CisJcmMgPSBzaF93ZHRfc2V0X2hlYXJ0YmVhdChoZWFydGJlYXQpOworCWlmICh1bmxpa2VseShyYykpIHsKIAkJaGVhcnRiZWF0ID0gV0FUQ0hET0dfSEVBUlRCRUFUOwotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgYmUgMTw9eDw9MzYwMCwgdXNpbmcgJWRcbiIsCi0JCQloZWFydGJlYXQpOworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiaGVhcnRiZWF0IHZhbHVlIG11c3QgIgorCQkgICAgICAgImJlIDE8PXg8PTM2MDAsIHVzaW5nICVkXG4iLCBoZWFydGJlYXQpOwogCX0KIAogCWluaXRfdGltZXIoJnRpbWVyKTsKQEAgLTM5NywxNSArNDM4LDE2IEBACiAJdGltZXIuZGF0YSA9IDA7CiAKIAlyYyA9IHJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc2hfd2R0X25vdGlmaWVyKTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgcmVnaXN0ZXIgcmVib290IG5vdGlmaWVyIChlcnI9JWQpXG4iLCByYyk7CisJaWYgKHVubGlrZWx5KHJjKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIgKGVycj0lZClcbiIsCisJCSAgICAgICByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKIAlyYyA9IG1pc2NfcmVnaXN0ZXIoJnNoX3dkdF9taXNjZGV2KTsKLQlpZiAocmMpIHsKLQkJcHJpbnRrKEtFUk5fRVJSIFBGWCAiQ2FuJ3QgcmVnaXN0ZXIgbWlzY2RldiBvbiBtaW5vcj0lZCAoZXJyPSVkKVxuIiwKLQkJCXNoX3dkdF9taXNjZGV2Lm1pbm9yLCByYyk7CisJaWYgKHVubGlrZWx5KHJjKSkgeworCQlwcmludGsoS0VSTl9FUlIgUEZYICJDYW4ndCByZWdpc3RlciBtaXNjZGV2IG9uICIKKwkJICAgICAgICJtaW5vcj0lZCAoZXJyPSVkKVxuIiwgc2hfd2R0X21pc2NkZXYubWlub3IsIHJjKTsKIAkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJnNoX3dkdF9ub3RpZmllcik7CiAJCXJldHVybiByYzsKIAl9CkBAIC00MTgsNyArNDYwLDYgQEAKIAogLyoqCiAgKiAJc2hfd2R0X2V4aXQgLSBEZWluaXRpYWxpemUgbW9kdWxlCi0gKgogICogCVVucmVnaXN0ZXJzIHRoZSBkZXZpY2UgYW5kIG5vdGlmaWVyIGhhbmRsZXIuIEFjdHVhbCBkZXZpY2UKICAqIAlkZWluaXRpYWxpemF0aW9uIGlzIGhhbmRsZWQgYnkgc2hfd2R0X2Nsb3NlKCkuCiAgKi8KQEAgLTQzNCwxNCArNDc1LDEzIEBACiBNT0RVTEVfQUxJQVNfTUlTQ0RFVihXQVRDSERPR19NSU5PUik7CiAKIG1vZHVsZV9wYXJhbShjbG9ja19kaXZpc2lvbl9yYXRpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoY2xvY2tfZGl2aXNpb25fcmF0aW8sICJDbG9jayBkaXZpc2lvbiByYXRpby4gVmFsaWQgcmFuZ2VzIGFyZSBmcm9tIDB4NSAoMS4zMW1zKSB0byAweDcgKDUuMjVtcykuIERlZmF1bHRzIHRvIDB4Ny4iKTsKK01PRFVMRV9QQVJNX0RFU0MoY2xvY2tfZGl2aXNpb25fcmF0aW8sICJDbG9jayBkaXZpc2lvbiByYXRpby4gVmFsaWQgcmFuZ2VzIGFyZSBmcm9tIDB4NSAoMS4zMW1zKSB0byAweDcgKDUuMjVtcykuIChkZWZhdWx0PSIgX19NT0RVTEVfU1RSSU5HKGNsb2NrX2RpdmlzaW9uX3JhdGlvKSAiKSIpOwogCiBtb2R1bGVfcGFyYW0oaGVhcnRiZWF0LCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhoZWFydGJlYXQsICJXYXRjaGRvZyBoZWFydGJlYXQgaW4gc2Vjb25kcy4gKDE8PWhlYXJ0YmVhdDw9MzYwMCwgZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19IRUFSVEJFQVQpICIpIik7CiAKIG1vZHVsZV9wYXJhbShub3dheW91dCwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0Mobm93YXlvdXQsICJXYXRjaGRvZyBjYW5ub3QgYmUgc3RvcHBlZCBvbmNlIHN0YXJ0ZWQgKGRlZmF1bHQ9Q09ORklHX1dBVENIRE9HX05PV0FZT1VUKSIpOworTU9EVUxFX1BBUk1fREVTQyhub3dheW91dCwgIldhdGNoZG9nIGNhbm5vdCBiZSBzdG9wcGVkIG9uY2Ugc3RhcnRlZCAoZGVmYXVsdD0iIF9fTU9EVUxFX1NUUklORyhXQVRDSERPR19OT1dBWU9VVCkgIikiKTsKIAogbW9kdWxlX2luaXQoc2hfd2R0X2luaXQpOwogbW9kdWxlX2V4aXQoc2hfd2R0X2V4aXQpOwotCmRpZmYgLS1naXQgYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jIGIvZHJpdmVycy9jcHVmcmVxL2NwdWZyZXEuYwppbmRleCBkMzVhOWYwLi4yY2FhZjcxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2NwdWZyZXEvY3B1ZnJlcS5jCisrKyBiL2RyaXZlcnMvY3B1ZnJlcS9jcHVmcmVxLmMKQEAgLTk5NCw3ICs5OTQsNyBAQAogCXVuc2lnbmVkIGludCBjdXJfZnJlcSA9IDA7CiAJc3RydWN0IGNwdWZyZXFfcG9saWN5ICpjcHVfcG9saWN5OwogCi0JZHByaW50aygicmVzdW1pbmcgY3B1ICV1XG4iLCBjcHUpOworCWRwcmludGsoInN1c3BlbmRpbmcgY3B1ICV1XG4iLCBjcHUpOwogCiAJaWYgKCFjcHVfb25saW5lKGNwdSkpCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9laXNhL2Vpc2EtYnVzLmMgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwppbmRleCA2MDc4ZTJmLi4zYTM2NWUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYworKysgYi9kcml2ZXJzL2Vpc2EvZWlzYS1idXMuYwpAQCAtMTI4LDkgKzEyOCwyMyBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGVpc2FfYnVzX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCQkgICBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKK3sKKwlzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZShkZXYpOworCWludCBpID0gMDsKKwlpbnQgbGVuZ3RoID0gMDsKKworCWFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJICAgICAgICJNT0RBTElBUz0iIEVJU0FfREVWSUNFX01PREFMSUFTX0ZNVCwgZWRldi0+aWQuc2lnKTsKKwllbnZwW2ldID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKwogc3RydWN0IGJ1c190eXBlIGVpc2FfYnVzX3R5cGUgPSB7CiAJLm5hbWUgID0gImVpc2EiLAogCS5tYXRjaCA9IGVpc2FfYnVzX21hdGNoLAorCS51ZXZlbnQgPSBlaXNhX2J1c191ZXZlbnQsCiB9OwogCiBpbnQgZWlzYV9kcml2ZXJfcmVnaXN0ZXIgKHN0cnVjdCBlaXNhX2RyaXZlciAqZWRydikKQEAgLTE2MCw2ICsxNzQsMTQgQEAKIAogc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVJVR08sIGVpc2Ffc2hvd19zdGF0ZSwgTlVMTCk7CiAKK3N0YXRpYyBzc2l6ZV90IGVpc2Ffc2hvd19tb2RhbGlhcyAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworICAgICAgICBzdHJ1Y3QgZWlzYV9kZXZpY2UgKmVkZXYgPSB0b19laXNhX2RldmljZSAoZGV2KTsKKyAgICAgICAgcmV0dXJuIHNwcmludGYgKGJ1ZiwgRUlTQV9ERVZJQ0VfTU9EQUxJQVNfRk1UICJcbiIsIGVkZXYtPmlkLnNpZyk7Cit9CisKK3N0YXRpYyBERVZJQ0VfQVRUUihtb2RhbGlhcywgU19JUlVHTywgZWlzYV9zaG93X21vZGFsaWFzLCBOVUxMKTsKKwogc3RhdGljIGludCBfX2luaXQgZWlzYV9pbml0X2RldmljZSAoc3RydWN0IGVpc2Ffcm9vdF9kZXZpY2UgKnJvb3QsCiAJCQkJICAgIHN0cnVjdCBlaXNhX2RldmljZSAqZWRldiwKIAkJCQkgICAgaW50IHNsb3QpCkBAIC0yMDksNiArMjMxLDcgQEAKIAogCWRldmljZV9jcmVhdGVfZmlsZSAoJmVkZXYtPmRldiwgJmRldl9hdHRyX3NpZ25hdHVyZSk7CiAJZGV2aWNlX2NyZWF0ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlZCk7CisJZGV2aWNlX2NyZWF0ZV9maWxlICgmZWRldi0+ZGV2LCAmZGV2X2F0dHJfbW9kYWxpYXMpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2ZjNC9mYy5jIGIvZHJpdmVycy9mYzQvZmMuYwppbmRleCAxYTE1OWU4Li4yMmQxNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2ZjNC9mYy5jCisrKyBiL2RyaXZlcnMvZmM0L2ZjLmMKQEAgLTk3NCw3ICs5NzQsNiBAQAogCSAqLwogCiAJZmMtPnJzdF9wa3QtPmRldmljZS0+aG9zdC0+ZWhfYWN0aW9uID0gJnNlbTsKLQlmYy0+cnN0X3BrdC0+cmVxdWVzdC0+cnFfc3RhdHVzID0gUlFfU0NTSV9CVVNZOwogCiAJZmMtPnJzdF9wa3QtPmRvbmUgPSBmY3Bfc2NzaV9yZXNldF9kb25lOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggYjllMzg4Ni4uYjhiNTk2ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtMTIzLDYgKzEyMywyNiBAQAogCQlkZXYtPnR5cGUgPSAqZCsrICYgMHg3ZjsKIAkJZGV2LT5uYW1lID0gZG1pX3N0cmluZyhkbSwgKmQpOwogCQlkZXYtPmRldmljZV9kYXRhID0gTlVMTDsKKwkJbGlzdF9hZGQoJmRldi0+bGlzdCwgJmRtaV9kZXZpY2VzKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBkbWlfc2F2ZV9vZW1fc3RyaW5nc19kZXZpY2VzKHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKK3sKKwlpbnQgaSwgY291bnQgPSAqKHU4ICopKGRtICsgMSk7CisJc3RydWN0IGRtaV9kZXZpY2UgKmRldjsKKworCWZvciAoaSA9IDE7IGkgPD0gY291bnQ7IGkrKykgeworCQlkZXYgPSBkbWlfYWxsb2Moc2l6ZW9mKCpkZXYpKTsKKwkJaWYgKCFkZXYpIHsKKwkJCXByaW50ayhLRVJOX0VSUgorCQkJICAgImRtaV9zYXZlX29lbV9zdHJpbmdzX2RldmljZXM6IG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZGV2LT50eXBlID0gRE1JX0RFVl9UWVBFX09FTV9TVFJJTkc7CisJCWRldi0+bmFtZSA9IGRtaV9zdHJpbmcoZG0sIGkpOworCQlkZXYtPmRldmljZV9kYXRhID0gTlVMTDsKIAogCQlsaXN0X2FkZCgmZGV2LT5saXN0LCAmZG1pX2RldmljZXMpOwogCX0KQEAgLTE4MSw2ICsyMDEsOSBAQAogCWNhc2UgMTA6CS8qIE9uYm9hcmQgRGV2aWNlcyBJbmZvcm1hdGlvbiAqLwogCQlkbWlfc2F2ZV9kZXZpY2VzKGRtKTsKIAkJYnJlYWs7CisJY2FzZSAxMToJLyogT0VNIFN0cmluZ3MgKi8KKwkJZG1pX3NhdmVfb2VtX3N0cmluZ3NfZGV2aWNlcyhkbSk7CisJCWJyZWFrOwogCWNhc2UgMzg6CS8qIElQTUkgRGV2aWNlIEluZm9ybWF0aW9uICovCiAJCWRtaV9zYXZlX2lwbWlfZGV2aWNlKGRtKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL0tjb25maWcgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKaW5kZXggMGUzMWEwYy4uOWI4OGIyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwpAQCAtNTMsNyArNTMsNyBAQAogCiBjb25maWcgU0VOU09SU19BRE0xMDI1CiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFETTEwMjUgYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBBbmFsb2cgRGV2aWNlcyBBRE0xMDI1CkBAIC05NCw2ICs5NCwxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgYWRtOTI0MC4KIAorY29uZmlnIFNFTlNPUlNfSzhURU1QCisJdHJpc3RhdGUgIkFNRCBLOCBwcm9jZXNzb3Igc2Vuc29yIgorCWRlcGVuZHMgb24gSFdNT04gJiYgWDg2ICYmIFBDSSAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgdGhlIHRlbXBlcmF0dXJlCisJICBzZW5zb3IocykgaW5zaWRlIHlvdXIgQU1EIEs4IENQVS4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgazh0ZW1wLgorCiBjb25maWcgU0VOU09SU19BU0IxMDAKIAl0cmlzdGF0ZSAiQXN1cyBBU0IxMDAgQmFjaCIKIAlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKQEAgLTEyMSw3ICsxMzEsNyBAQAogCiBjb25maWcgU0VOU09SU19EUzE2MjEKIAl0cmlzdGF0ZSAiRGFsbGFzIFNlbWljb25kdWN0b3IgRFMxNjIxIGFuZCBEUzE2MjUiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRGFsbGFzIFNlbWljb25kdWN0b3IKIAkgIERTMTYyMSBhbmQgRFMxNjI1IHNlbnNvciBjaGlwcy4KQEAgLTE0MSw3ICsxNTEsNyBAQAogCiBjb25maWcgU0VOU09SU19GU0NIRVIKIAl0cmlzdGF0ZSAiRlNDIEhlcm1lcyIKLQlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEhXTU9OICYmIEkyQwogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBGdWppdHN1IFNpZW1lbnMKIAkgIENvbXB1dGVycyBIZXJtZXMgc2Vuc29yIGNoaXBzLgpAQCAtMTUxLDcgKzE2MSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0ZTQ1BPUwogCXRyaXN0YXRlICJGU0MgUG9zZWlkb24iCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgRnVqaXRzdSBTaWVtZW5zCiAJICBDb21wdXRlcnMgUG9zZWlkb24gc2Vuc29yIGNoaXBzLgpAQCAtMTcxLDcgKzE4MSw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0dMNTIwU00KIAl0cmlzdGF0ZSAiR2VuZXN5cyBMb2dpYyBHTDUyMFNNIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBHZW5lc3lzIExvZ2ljIEdMNTIwU00KQEAgLTE4NiwxNSArMTk2LDE1IEBACiAJc2VsZWN0IEkyQ19JU0EKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscAotCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIElURSBJVDg3eHggc2Vuc29yIGNoaXBzCi0JICBhbmQgY2xvbmVzOiBTaVM5NjAuCisJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgSVRFIElUODcwNUYsIElUODcxMkYsCisJICBJVDg3MTZGIGFuZCBJVDg3MThGIHNlbnNvciBjaGlwcywgYW5kIHRoZSBTaVM5NjAgY2xvbmUuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGl0ODcuCiAKIGNvbmZpZyBTRU5TT1JTX0xNNjMKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTYzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIHRoZSBOYXRpb25hbCBTZW1pY29uZHVjdG9yCiAJICBMTTYzIHJlbW90ZSBkaW9kZSBkaWdpdGFsIHRlbXBlcmF0dXJlIHNlbnNvciB3aXRoIGludGVncmF0ZWQgZmFuCkBAIC0yMzEsNyArMjQxLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE03NwogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNzciCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTc3CiAJICBzZW5zb3IgY2hpcHMuCkBAIC0yNDEsNyArMjUxLDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTE03OAogCXRyaXN0YXRlICJOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNNzggYW5kIGNvbXBhdGlibGVzIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJc2VsZWN0IEkyQ19JU0EKIAlzZWxlY3QgSFdNT05fVklECiAJaGVscApAQCAtMjg0LDcgKzI5NCw3IEBACiAKIGNvbmZpZyBTRU5TT1JTX0xNODcKIAl0cmlzdGF0ZSAiTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTg3IgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciBOYXRpb25hbCBTZW1pY29uZHVjdG9yIExNODcKQEAgLTMwOSw3ICszMTksNyBAQAogCiBjb25maWcgU0VOU09SU19MTTkyCiAJdHJpc3RhdGUgIk5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE05MiBhbmQgY29tcGF0aWJsZXMiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgTmF0aW9uYWwgU2VtaWNvbmR1Y3RvciBMTTkyCiAJICBhbmQgTWF4aW0gTUFYNjYzNSBzZW5zb3IgY2hpcHMuCkBAIC0zMTksNyArMzI5LDcgQEAKIAogY29uZmlnIFNFTlNPUlNfTUFYMTYxOQogCXRyaXN0YXRlICJNYXhpbSBNQVgxNjE5IHNlbnNvciBjaGlwIgotCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCWRlcGVuZHMgb24gSFdNT04gJiYgSTJDCiAJaGVscAogCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIE1BWDE2MTkgc2Vuc29yIGNoaXAuCiAKQEAgLTM1NCw3ICszNjQsNyBAQAogCiBjb25maWcgU0VOU09SU19TTVNDNDdNMQogCXRyaXN0YXRlICJTTVNDIExQQzQ3TTEweCBhbmQgY29tcGF0aWJsZXMiCi0JZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMKIAlzZWxlY3QgSTJDX0lTQQogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgaW50ZWdyYXRlZCBmYW4KQEAgLTQwNyw4ICs0MTcsMTkgQEAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHZpYTY4NmEuCiAKK2NvbmZpZyBTRU5TT1JTX1ZUMTIxMQorCXRyaXN0YXRlICJWSUEgVlQxMjExIgorCWRlcGVuZHMgb24gSFdNT04gJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IEhXTU9OX1ZJRAorCWhlbHAKKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgdGhlbiB5b3UgZ2V0IHN1cHBvcnQgZm9yIGhhcmR3YXJlIG1vbml0b3JpbmcKKwkgIGZlYXR1cmVzIG9mIHRoZSBWSUEgVlQxMjExIFN1cGVyLUkvTyBjaGlwLgorCisJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCisJICB3aWxsIGJlIGNhbGxlZCB2dDEyMTEuCisKIGNvbmZpZyBTRU5TT1JTX1ZUODIzMQotCXRyaXN0YXRlICJWVDgyMzEiCisJdHJpc3RhdGUgIlZJQSBWVDgyMzEiCiAJZGVwZW5kcyBvbiBIV01PTiAmJiBJMkMgJiYgUENJICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBIV01PTl9WSUQKIAlzZWxlY3QgSTJDX0lTQQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9NYWtlZmlsZSBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKaW5kZXggMzE0MTU4NC4uYWYwMWNjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCkBAIC0yNyw2ICsyNyw3IEBACiBvYmotJChDT05GSUdfU0VOU09SU19HTDUyMFNNKQkrPSBnbDUyMHNtLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0hEQVBTKQkrPSBoZGFwcy5vCiBvYmotJChDT05GSUdfU0VOU09SU19JVDg3KQkrPSBpdDg3Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX0s4VEVNUCkJKz0gazh0ZW1wLm8KIG9iai0kKENPTkZJR19TRU5TT1JTX0xNNjMpCSs9IGxtNjMubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfTE03MCkJKz0gbG03MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19MTTc1KQkrPSBsbTc1Lm8KQEAgLTQ1LDYgKzQ2LDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX1NNU0M0N00xKQkrPSBzbXNjNDdtMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyKSs9IHNtc2M0N20xOTIubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVklBNjg2QSkJKz0gdmlhNjg2YS5vCitvYmotJChDT05GSUdfU0VOU09SU19WVDEyMTEpCSs9IHZ0MTIxMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19WVDgyMzEpCSs9IHZ0ODIzMS5vCiBvYmotJChDT05GSUdfU0VOU09SU19XODM2MjdFSEYpCSs9IHc4MzYyN2VoZi5vCiBvYmotJChDT05GSUdfU0VOU09SU19XODNMNzg1VFMpCSs9IHc4M2w3ODV0cy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jIGIvZHJpdmVycy9od21vbi9hYml0dWd1cnUuYwppbmRleCAzNWFkMWIwLi5lNWNiMGZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FiaXR1Z3VydS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWJpdHVndXJ1LmMKQEAgLTEzNTQsMTMgKzEzNTQsMzkgQEAKIAkJcmV0dXJuIE5VTEw7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgYWJpdHVndXJ1X3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXN0cnVjdCBhYml0dWd1cnVfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCS8qIG1ha2Ugc3VyZSBhbGwgY29tbXVuaWNhdGlvbnMgd2l0aCB0aGUgdWd1cnUgYXJlIGRvbmUgYW5kIG5vIG5ldworCSAgIG9uZXMgYXJlIHN0YXJ0ZWQgKi8KKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWJpdHVndXJ1X3Jlc3VtZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBhYml0dWd1cnVfZGF0YSAqZGF0YSA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCS8qIFNlZSBpZiB0aGUgdUd1cnUgaXMgc3RpbGwgcmVhZHkgKi8KKwlpZiAoaW5iX3AoZGF0YS0+YWRkciArIEFCSVRfVUdVUlVfREFUQSkgIT0gQUJJVF9VR1VSVV9TVEFUVVNfSU5QVVQpCisJCWRhdGEtPnVndXJ1X3JlYWR5ID0gMDsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIGFiaXR1Z3VydV9zdXNwZW5kCU5VTEwKKyNkZWZpbmUgYWJpdHVndXJ1X3Jlc3VtZQlOVUxMCisjZW5kaWYgLyogQ09ORklHX1BNICovCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFiaXR1Z3VydV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKIAkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gQUJJVF9VR1VSVV9OQU1FLAogCX0sCi0JLnByb2JlCT0gYWJpdHVndXJ1X3Byb2JlLAotCS5yZW1vdmUJPSBfX2RldmV4aXRfcChhYml0dWd1cnVfcmVtb3ZlKSwKKwkucHJvYmUJCT0gYWJpdHVndXJ1X3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoYWJpdHVndXJ1X3JlbW92ZSksCisJLnN1c3BlbmQJPSBhYml0dWd1cnVfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFiaXR1Z3VydV9yZXN1bWUsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBhYml0dWd1cnVfZGV0ZWN0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjEuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCmluZGV4IDJiNmU3NGQuLmM0NjYzMjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyMS5jCkBAIC0xOTAsNiArMTkwLDIxIEBACiAJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBhZG0xMDIxX2RldGVjdCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDIxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkbTEwMjFfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRtMTAyMV9hdHRyaWJ1dGVzLAorfTsKKwogc3RhdGljIGludCBhZG0xMDIxX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKIHsKIAlpbnQgaTsKQEAgLTI4NywyMiArMzAyLDE5IEBACiAJCWFkbTEwMjFfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjFfZ3JvdXApKSkKKwkJZ290byBlcnJvcjI7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBlcnJvcjI7CisJCWdvdG8gZXJyb3IzOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7Ci0KIAlyZXR1cm4gMDsKIAorZXJyb3IzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhZG0xMDIxX2dyb3VwKTsKIGVycm9yMjoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGVycm9yMToKQEAgLTMyNiw2ICszMzgsNyBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjFfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNS5jIGIvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKaW5kZXggYTRjODU5Yy4uOGM1NjI4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKKysrIGIvZHJpdmVycy9od21vbi9hZG0xMDI1LmMKQEAgLTMxNSw2ICszMTUsNDkgQEAKIAlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGFkbTEwMjVfZGV0ZWN0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkbTEwMjVfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW41X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW41X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWF4LmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCSZkZXZfYXR0cl92cm0uYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG0xMDI1X2dyb3VwID0geworCS5hdHRycyA9IGFkbTEwMjVfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDI1X2F0dHJpYnV0ZXNfb3B0W10gPSB7CisJJmRldl9hdHRyX2luNF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNF9tYXguYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG0xMDI1X2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBhZG0xMDI1X2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZG9lcyBtb3JlIHRoYW4ganVzdCBkZXRlY3Rpb24uIElmIGRldGVjdGlvbgogICogc3VjY2VlZHMsIGl0IGFsc28gcmVnaXN0ZXJzIHRoZSBuZXcgY2hpcC4KQEAgLTQxNSw0NiArNDU4LDMxIEBACiAJYWRtMTAyNV9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmYWRtMTAyNV9ncm91cCkpKQogCQlnb3RvIGV4aXRfZGV0YWNoOwotCX0KLQotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjVfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY3B1MF92aWQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdnJtKTsKIAogCS8qIFBpbiAxMSBpcyBlaXRoZXIgaW40ICgrMTJWKSBvciBWSUQ0ICovCiAJaWYgKCEoY29uZmlnICYgMHgyMCkpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9tYXgpOworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW40X2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNF9taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW40X21heCkpKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjVfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhZG0xMDI1X2dyb3VwX29wdCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTUxMSw2ICs1MzksOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjVfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjVfZ3JvdXBfb3B0KTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2FkbTEwMjYuYyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCmluZGV4IDZkNGY4YjguLmI0NjE4YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCisrKyBiL2RyaXZlcnMvaHdtb24vYWRtMTAyNi5jCkBAIC0zMjMsMTUgKzMyMyw2IEBACiAJcmV0dXJuIGkyY19wcm9iZShhZGFwdGVyLCAmYWRkcl9kYXRhLCBhZG0xMDI2X2RldGVjdCk7CiB9CiAKLXN0YXRpYyBpbnQgYWRtMTAyNl9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGFkbTEwMjZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShkYXRhKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCBhZG0xMDI2X3JlYWRfdmFsdWUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewogCWludCByZXM7CkBAIC0xNDUwLDYgKzE0NDEsMTM1IEBACiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDJfYXV0b19wb2ludDJfcHdtLCBTX0lSVUdPLCBzaG93X2F1dG9fcHdtX21heCwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIodGVtcDNfYXV0b19wb2ludDJfcHdtLCBTX0lSVUdPLCBzaG93X2F1dG9fcHdtX21heCwgTlVMTCk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDI2X2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW45X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW45X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTBfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjExX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjExX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTJfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjEyX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjE0X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjE0X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTVfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjE1X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xNl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMTZfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW40X2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuNl9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjZfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW43X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW43X2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuN19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjhfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW44X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfb2Zmc2V0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX29mZnNldC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0X2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9jcml0X2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19jcml0X2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtX21hc2suYXR0ciwKKwkmZGV2X2F0dHJfZ3Bpby5hdHRyLAorCSZkZXZfYXR0cl9ncGlvX21hc2suYXR0ciwKKwkmZGV2X2F0dHJfcHdtMS5hdHRyLAorCSZkZXZfYXR0cl9wd20yLmF0dHIsCisJJmRldl9hdHRyX3B3bTMuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMV9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMl9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfcHdtM19lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDFfcHdtLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQxX3B3bS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50MV9wd20uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDJfcHdtLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQyX3B3bS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50Ml9wd20uYXR0ciwKKwkmZGV2X2F0dHJfYW5hbG9nX291dC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGFkbTEwMjZfZ3JvdXAgPSB7CisJLmF0dHJzID0gYWRtMTAyNl9hdHRyaWJ1dGVzLAorfTsKKwogc3RhdGljIGludCBhZG0xMDI2X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAogCQkJICBpbnQga2luZCkKIHsKQEAgLTE1NTQsMTQ1ICsxNjc0LDIwIEBACiAJYWRtMTAyNl9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmYWRtMTAyNl9ncm91cCkpKQorCQlnb3RvIGV4aXRkZXRhY2g7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0ZGV0YWNoOworCQlnb3RvIGV4aXRyZW1vdmU7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW44X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW45X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjlfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjlfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjEwX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjEwX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xMF9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjExX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xMl9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTJfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjEzX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjEzX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xM19taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTRfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTRfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjE0X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xNV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xNV9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMTVfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjE2X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjE2X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xNl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW40X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuNV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuNV9kaXYuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW42X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW42X2Rpdi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuNl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW43X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuOF9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuOF9kaXYuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjhfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9vZmZzZXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfb2Zmc2V0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgCi0JCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDFfdGVtcC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsIAotCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQxX3RlbXAuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAKLQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50MV90ZW1wLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50MV90ZW1wX2h5c3QuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQxX3RlbXBfaHlzdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYXV0b19wb2ludDFfdGVtcF9oeXN0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgCi0JCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfYXV0b19wb2ludDJfdGVtcC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsIAotCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2F1dG9fcG9pbnQyX3RlbXAuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAKLQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19hdXRvX3BvaW50Ml90ZW1wLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2NyaXRfZW5hYmxlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2NyaXRfZW5hYmxlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2NyaXRfZW5hYmxlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3ZybSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1fbWFzayk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9ncGlvKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2dwaW9fbWFzayk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20zX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50MV9wd20pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfYXV0b19wb2ludDFfcHdtKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQxX3B3bSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9hdXRvX3BvaW50Ml9wd20pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfYXV0b19wb2ludDJfcHdtKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2F1dG9fcG9pbnQyX3B3bSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbmFsb2dfb3V0KTsKIAlyZXR1cm4gMDsKIAogCS8qIEVycm9yIG91dCBhbmQgY2xlYW51cCBjb2RlICovCitleGl0cmVtb3ZlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhZG0xMDI2X2dyb3VwKTsKIGV4aXRkZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0ZnJlZToKQEAgLTE3MDAsNiArMTY5NSwxNyBAQAogZXhpdDoKIAlyZXR1cm4gZXJyOwogfQorCitzdGF0aWMgaW50IGFkbTEwMjZfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCXN0cnVjdCBhZG0xMDI2X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMjZfZ3JvdXApOworCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJa2ZyZWUoZGF0YSk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNtX2FkbTEwMjZfaW5pdCh2b2lkKQogewogCXJldHVybiBpMmNfYWRkX2RyaXZlcigmYWRtMTAyNl9kcml2ZXIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hZG0xMDMxLmMgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwppbmRleCAzYmYyZGE2Li4xMjI2ODNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYworKysgYi9kcml2ZXJzL2h3bW9uL2FkbTEwMzEuYwpAQCAtNzMwLDYgKzczMCw2MSBAQAogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgYWRtMTAzMV9kZXRlY3QpOwogfQogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYWRtMTAzMV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfcHdtMS5hdHRyLAorCSZkZXZfYXR0cl9hdXRvX2ZhbjFfY2hhbm5lbC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9jcml0LmF0dHIsCisKKwkmZGV2X2F0dHJfYXV0b190ZW1wMV9vZmYuYXR0ciwKKwkmZGV2X2F0dHJfYXV0b190ZW1wMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfYXV0b190ZW1wMV9tYXguYXR0ciwKKworCSZkZXZfYXR0cl9hdXRvX3RlbXAyX29mZi5hdHRyLAorCSZkZXZfYXR0cl9hdXRvX3RlbXAyX21pbi5hdHRyLAorCSZkZXZfYXR0cl9hdXRvX3RlbXAyX21heC5hdHRyLAorCisJJmRldl9hdHRyX2F1dG9fZmFuMV9taW5fcHdtLmF0dHIsCisKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG0xMDMxX2dyb3VwID0geworCS5hdHRycyA9IGFkbTEwMzFfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICphZG0xMDMxX2F0dHJpYnV0ZXNfb3B0W10gPSB7CisJJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfcHdtMi5hdHRyLAorCSZkZXZfYXR0cl9hdXRvX2ZhbjJfY2hhbm5lbC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX2NyaXQuYXR0ciwKKwkmZGV2X2F0dHJfYXV0b190ZW1wM19vZmYuYXR0ciwKKwkmZGV2X2F0dHJfYXV0b190ZW1wM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfYXV0b190ZW1wM19tYXguYXR0ciwKKwkmZGV2X2F0dHJfYXV0b19mYW4yX21pbl9wd20uYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG0xMDMxX2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBhZG0xMDMxX2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCiBzdGF0aWMgaW50IGFkbTEwMzFfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewpAQCAtNzg5LDU3ICs4NDQsMjYgQEAKIAlhZG0xMDMxX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhZG0xMDMxX2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKKwlpZiAoa2luZCA9PSBhZG0xMDMxKSB7CisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwKKwkJCQkJCSZhZG0xMDMxX2dyb3VwX29wdCkpKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKLQl9Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9kaXYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hdXRvX2ZhbjFfY2hhbm5lbCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2NyaXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9jcml0KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYXV0b190ZW1wMV9vZmYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYXV0b190ZW1wMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYXV0b190ZW1wMV9tYXgpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hdXRvX3RlbXAyX29mZik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hdXRvX3RlbXAyX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hdXRvX3RlbXAyX21heCk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2F1dG9fZmFuMV9taW5fcHdtKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQotCWlmIChraW5kID09IGFkbTEwMzEpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2Rpdik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkgICAmZGV2X2F0dHJfYXV0b19mYW4yX2NoYW5uZWwpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2lucHV0KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX21heCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfY3JpdCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYXV0b190ZW1wM19vZmYpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2F1dG9fdGVtcDNfbWluKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hdXRvX3RlbXAzX21heCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYXV0b19mYW4yX21pbl9wd20pOworCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAogCXJldHVybiAwOwogCitleGl0X3JlbW92ZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmYWRtMTAzMV9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFkbTEwMzFfZ3JvdXBfb3B0KTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtODU0LDYgKzg3OCw4IEBACiAJaW50IHJldDsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWRtMTAzMV9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWRtMTAzMV9ncm91cF9vcHQpOwogCWlmICgocmV0ID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkgIT0gMCkgewogCQlyZXR1cm4gcmV0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vYWRtOTI0MC5jIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKaW5kZXggNDNmNjk5MS4uMzc3OTYxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hZG05MjQwLmMKKysrIGIvZHJpdmVycy9od21vbi9hZG05MjQwLmMKQEAgLTQ2NSw2ICs0NjUsNDUgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjaGFzc2lzX2NsZWFyLCBTX0lXVVNSLCBOVUxMLCBjaGFzc2lzX2NsZWFyKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmFkbTkyNDBfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJmRldl9hdHRyX2FvdXRfb3V0cHV0LmF0dHIsCisJJmRldl9hdHRyX2NoYXNzaXNfY2xlYXIuYXR0ciwKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhZG05MjQwX2dyb3VwID0geworCS5hdHRycyA9IGFkbTkyNDBfYXR0cmlidXRlcywKK307CisKIAogLyoqKiBzZW5zb3IgY2hpcCBkZXRlY3QgYW5kIGRyaXZlciBpbnN0YWxsICoqKi8KIApAQCAtNTQ4LDcyICs1ODcsMTkgQEAKIAlhZG05MjQwX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogcG9wdWxhdGUgc3lzZnMgZmlsZXN5c3RlbSAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFkbTkyNDBfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW4yX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luNF9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW41X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2luNV9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2Rpdi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FvdXRfb3V0cHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2NoYXNzaXNfY2xlYXIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY3B1MF92aWQpOwotCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhZG05MjQwX2dyb3VwKTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtNjM1LDYgKzYyMSw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYWRtOTI0MF9ncm91cCk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hc2IxMDAuYyBiL2RyaXZlcnMvaHdtb24vYXNiMTAwLmMKaW5kZXggZmFjYzFjYy4uNTdiMWM3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9hc2IxMDAuYworKysgYi9kcml2ZXJzL2h3bW9uL2FzYjEwMC5jCkBAIC0yOTgsMTIgKzI5OCw2IEBACiBzeXNmc19pbig1KTsKIHN5c2ZzX2luKDYpOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9pbihjbGllbnQsIG9mZnNldCkgZG8geyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNvZmZzZXQjI19pbnB1dCk7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4jI29mZnNldCMjX21pbik7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4jI29mZnNldCMjX21heCk7IFwKLX0gd2hpbGUgKDApCi0KIC8qIDMgRmFucyAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKIHsKQEAgLTQyMSwxMiArNDE1LDYgQEAKIHN5c2ZzX2ZhbigyKTsKIHN5c2ZzX2ZhbigzKTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKGNsaWVudCwgb2Zmc2V0KSBkbyB7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19pbnB1dCk7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19taW4pOyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfZGl2KTsgXAotfSB3aGlsZSAoMCkKLQogLyogNCBUZW1wLiBTZW5zb3JzICovCiBzdGF0aWMgaW50IHNwcmludGZfdGVtcF9mcm9tX3JlZyh1MTYgcmVnLCBjaGFyICpidWYsIGludCBucikKIHsKQEAgLTUxNSwxMiArNTAzLDYgQEAKIHN5c2ZzX3RlbXAoNCk7CiAKIC8qIFZJRCAqLwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChjbGllbnQsIG51bSkgZG8geyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI251bSMjX2lucHV0KTsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNudW0jI19tYXgpOyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI251bSMjX21heF9oeXN0KTsgXAotfSB3aGlsZSAoMCkKLQogc3RhdGljIHNzaXplX3Qgc2hvd192aWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBhc2IxMDBfZGF0YSAqZGF0YSA9IGFzYjEwMF91cGRhdGVfZGV2aWNlKGRldik7CkBAIC01MjgsOCArNTEwLDYgQEAKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGNwdTBfdmlkLCBTX0lSVUdPLCBzaG93X3ZpZCwgTlVMTCk7Ci0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV92aWQoY2xpZW50KSBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY3B1MF92aWQpCiAKIC8qIFZSTSAqLwogc3RhdGljIHNzaXplX3Qgc2hvd192cm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtNTQ5LDggKzUyOSw2IEBACiAKIC8qIEFsYXJtcyAqLwogc3RhdGljIERFVklDRV9BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtLCBzZXRfdnJtKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3ZybShjbGllbnQpIFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl92cm0pOwogCiBzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01NTksOCArNTM3LDYgQEAKIH0KIAogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfYWxhcm1zKGNsaWVudCkgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcykKIAogLyogMSBQV00gKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfcHdtMShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC02MDcsMTAgKzU4Myw2NSBAQAogc3RhdGljIERFVklDRV9BVFRSKHB3bTEsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3B3bTEsIHNldF9wd20xKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihwd20xX2VuYWJsZSwgU19JUlVHTyB8IFNfSVdVU1IsCiAJCXNob3dfcHdtX2VuYWJsZTEsIHNldF9wd21fZW5hYmxlMSk7Ci0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9wd20xKGNsaWVudCkgZG8geyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xKTsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9lbmFibGUpOyBcCi19IHdoaWxlICgwKQorCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXNiMTAwX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4zX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW40X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjVfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW42X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luNl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW42X21heC5hdHRyLAorCisJJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfZGl2LmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDRfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDRfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXA0X21heF9oeXN0LmF0dHIsCisKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9wd20xLmF0dHIsCisJJmRldl9hdHRyX3B3bTFfZW5hYmxlLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhc2IxMDBfZ3JvdXAgPSB7CisJLmF0dHJzID0gYXNiMTAwX2F0dHJpYnV0ZXMsCit9OwogCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuOgogCWFzYjEwMF9kcml2ZXIgaXMgaW5zZXJ0ZWQgKHdoZW4gdGhpcyBtb2R1bGUgaXMgbG9hZGVkKSwgZm9yIGVhY2gKQEAgLTgxMCwzOCArODQxLDE5IEBACiAJZGF0YS0+ZmFuX21pblsyXSA9IGFzYjEwMF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIEFTQjEwMF9SRUdfRkFOX01JTigyKSk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFzYjEwMF9ncm91cCkpKQorCQlnb3RvIEVSUk9SMzsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIEVSUk9SMzsKKwkJZ290byBFUlJPUjQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDApOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDMpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDYpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMyk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCA0KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV92aWQobmV3X2NsaWVudCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3ZybShuZXdfY2xpZW50KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9hbGFybXMobmV3X2NsaWVudCk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtMShuZXdfY2xpZW50KTsKLQogCXJldHVybiAwOwogCitFUlJPUjQ6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmFzYjEwMF9ncm91cCk7CiBFUlJPUjM6CiAJaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVsxXSk7CiAJaTJjX2RldGFjaF9jbGllbnQoZGF0YS0+bG03NVswXSk7CkBAIC04NjEsOCArODczLDEwIEBACiAJaW50IGVycjsKIAogCS8qIG1haW4gY2xpZW50ICovCi0JaWYgKGRhdGEpCisJaWYgKGRhdGEpIHsKIAkJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmYXNiMTAwX2dyb3VwKTsKKwl9CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9hdHhwMS5jIGIvZHJpdmVycy9od21vbi9hdHhwMS5jCmluZGV4IDcyOGExZTguLjBjY2RkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vYXR4cDEuYworKysgYi9kcml2ZXJzL2h3bW9uL2F0eHAxLmMKQEAgLTI3LDYgKzI3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU3lzdGVtIHZvbHRhZ2VzIGNvbnRyb2wgdmlhIEF0dGFuc2ljIEFUWFAxIik7CkBAIC0xMTYsOCArMTE3LDcgQEAKIHsKIAlzdHJ1Y3QgYXR4cDFfZGF0YSAqZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCWNoYXIgdmlkOwotCWNoYXIgY3ZpZDsKKwlpbnQgdmlkLCBjdmlkOwogCXVuc2lnbmVkIGludCB2Y29yZTsKIAogCWNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKQEAgLTI1MSw2ICsyNTEsMTcgQEAKICovCiBzdGF0aWMgREVWSUNFX0FUVFIoZ3BpbzIsIFNfSVJVR08gfCBTX0lXVVNSLCBhdHhwMV9zaG93Z3BpbzIsIGF0eHAxX3N0b3JlZ3BpbzIpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR4cDFfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9ncGlvMS5hdHRyLAorCSZkZXZfYXR0cl9ncGlvMi5hdHRyLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGF0eHAxX2dyb3VwID0geworCS5hdHRycyA9IGF0eHAxX2F0dHJpYnV0ZXMsCit9OworCiAKIHN0YXRpYyBpbnQgYXR4cDFfYXR0YWNoX2FkYXB0ZXIoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewpAQCAtMzIwLDIxICszMzEsMjMgQEAKIAkJZ290byBleGl0X2ZyZWU7CiAJfQogCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhdHhwMV9ncm91cCkpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9ncGlvMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9ncGlvMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7Ci0KIAlkZXZfaW5mbygmbmV3X2NsaWVudC0+ZGV2LCAiVXNpbmcgVlJNOiAlZC4lZFxuIiwKIAkJCSBkYXRhLT52cm0gLyAxMCwgZGF0YS0+dnJtICUgMTApOwogCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZhdHhwMV9ncm91cCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTM0OSw2ICszNjIsNyBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmF0eHAxX2dyb3VwKTsKIAogCWVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCmluZGV4IDQ3OGViNGIuLmM4NDljMGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKKysrIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgImxtNzUuaCIKIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KQEAgLTE3OCw2ICsxNzksMTggQEAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPICwgc2hvd190ZW1wX21pbiwgc2V0X3RlbXBfbWluKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZHMxNjIxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBkczE2MjFfZ3JvdXAgPSB7CisJLmF0dHJzID0gZHMxNjIxX2F0dHJpYnV0ZXMsCit9OworCiAKIHN0YXRpYyBpbnQgZHMxNjIxX2F0dGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKQEAgLTI1MywyMSArMjY2LDE5IEBACiAJZHMxNjIxX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZkczE2MjFfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCQogCXJldHVybiAwOwogCi0vKiBPSywgdGhpcyBpcyBub3QgZXhhY3RseSBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlLCB1c3VhbGx5LiBCdXQgaXQgaXMKLSAgIHZlcnkgY29kZS1lZmZpY2llbnQgaW4gdGhpcyBjYXNlLiAqLworICAgICAgZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmRzMTYyMV9ncm91cCk7CiAgICAgICBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKICAgICAgIGV4aXRfZnJlZToKQEAgLTI4Miw2ICsyOTMsNyBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmRzMTYyMV9ncm91cCk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9mNzE4MDVmLmMgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwppbmRleCBmZDcyNDQwLi5kZTE3YTcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYworKysgYi9kcml2ZXJzL2h3bW9uL2Y3MTgwNWYuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBmNzE4MDVmLmMgLSBkcml2ZXIgZm9yIHRoZSBGaW50ZWsgRjcxODA1Ri9GRyBTdXBlci1JL08gY2hpcCBpbnRlZ3JhdGVkCiAgKiAgICAgICAgICAgICBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDUgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICoKICAqIFRoZSBGNzE4MDVGL0ZHIGlzIGEgTFBDIFN1cGVyLUkvTyBjaGlwIG1hZGUgYnkgRmludGVrLiBJdCBpbnRlZ3JhdGVzCiAgKiBjb21wbGV0ZSBoYXJkd2FyZSBtb25pdG9yaW5nIGZlYXR1cmVzOiB2b2x0YWdlLCBmYW4gYW5kIHRlbXBlcmF0dXJlCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2OwpAQCAtMTQ3LDcgKzE0OCw3IEBACiAJdTggdGVtcF9oaWdoWzNdOwogCXU4IHRlbXBfaHlzdFszXTsKIAl1OCB0ZW1wX21vZGU7Ci0JdTggYWxhcm1zWzNdOworCXVuc2lnbmVkIGxvbmcgYWxhcm1zOwogfTsKIAogc3RhdGljIGlubGluZSBsb25nIGluX2Zyb21fcmVnKHU4IHJlZykKQEAgLTMxMSwxMCArMzEyLDkgQEAKIAkJCWRhdGEtPnRlbXBbbnJdID0gZjcxODA1Zl9yZWFkOChkYXRhLAogCQkJCQkgRjcxODA1Rl9SRUdfVEVNUChucikpOwogCQl9Ci0JCWZvciAobnIgPSAwOyBuciA8IDM7IG5yKyspIHsKLQkJCWRhdGEtPmFsYXJtc1tucl0gPSBmNzE4MDVmX3JlYWQ4KGRhdGEsCi0JCQkJCSAgIEY3MTgwNUZfUkVHX1NUQVRVUyhucikpOwotCQl9CisJCWRhdGEtPmFsYXJtcyA9IGY3MTgwNWZfcmVhZDgoZGF0YSwgRjcxODA1Rl9SRUdfU1RBVFVTKDApKQorCQkJKyAoZjcxODA1Zl9yZWFkOChkYXRhLCBGNzE4MDVGX1JFR19TVEFUVVMoMSkpIDw8IDgpCisJCQkrIChmNzE4MDVmX3JlYWQ4KGRhdGEsIEY3MTgwNUZfUkVHX1NUQVRVUygyKSkgPDwgMTYpOwogCiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKQEAgLTU1Nyw4ICs1NTcsNyBAQAogewogCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBmNzE4MDVmX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXNbMF0gfAotCQkJCSAgICAoKGRhdGEtPmFsYXJtc1sxXSAmIDB4MDEpIDw8IDgpKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIGRhdGEtPmFsYXJtcyAmIDB4MWZmKTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXNfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKQEAgLTU2Niw3ICs1NjUsNyBAQAogewogCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBmNzE4MDVmX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXNbMl0gJiAweDA3KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlbHVcbiIsIChkYXRhLT5hbGFybXMgPj4gMTYpICYgMHgwNyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYWxhcm1zX3RlbXAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQpAQCAtNTc0LDcgKzU3MywxNyBAQAogewogCXN0cnVjdCBmNzE4MDVmX2RhdGEgKmRhdGEgPSBmNzE4MDVmX3VwZGF0ZV9kZXZpY2UoZGV2KTsKIAotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoZGF0YS0+YWxhcm1zWzFdID4+IDMpICYgMHgwNyk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCAoZGF0YS0+YWxhcm1zID4+IDExKSAmIDB4MDcpOworfQorCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gZjcxODA1Zl91cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCWludCBiaXRuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx1XG4iLCAoZGF0YS0+YWxhcm1zID4+IGJpdG5yKSAmIDEpOwogfQogCiBzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQpAQCAtNTg1LDg4ICs1OTQsMTg5IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIGRhdGEtPm5hbWUpOwogfQogCi1zdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZjcxODA1Zl9kZXZfYXR0cltdID0gewotCV9fQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4wLCBOVUxMKSwKLQlfX0FUVFIoaW4wX21heCwgU19JUlVHT3wgU19JV1VTUiwgc2hvd19pbjBfbWF4LCBzZXRfaW4wX21heCksCi0JX19BVFRSKGluMF9taW4sIFNfSVJVR098IFNfSVdVU1IsIHNob3dfaW4wX21pbiwgc2V0X2luMF9taW4pLAotCV9fQVRUUihhbGFybXNfaW4sIFNfSVJVR08sIHNob3dfYWxhcm1zX2luLCBOVUxMKSwKLQlfX0FUVFIoYWxhcm1zX2ZhbiwgU19JUlVHTywgc2hvd19hbGFybXNfZmFuLCBOVUxMKSwKLQlfX0FUVFIoYWxhcm1zX3RlbXAsIFNfSVJVR08sIHNob3dfYWxhcm1zX3RlbXAsIE5VTEwpLAotCV9fQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpLAorc3RhdGljIERFVklDRV9BVFRSKGluMF9pbnB1dCwgU19JUlVHTywgc2hvd19pbjAsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGluMF9tYXgsIFNfSVJVR098IFNfSVdVU1IsIHNob3dfaW4wX21heCwgc2V0X2luMF9tYXgpOworc3RhdGljIERFVklDRV9BVFRSKGluMF9taW4sIFNfSVJVR098IFNfSVdVU1IsIHNob3dfaW4wX21pbiwgc2V0X2luMF9taW4pOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjhfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjhfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjhfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDgpOworCitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4yX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQkgIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCSAgc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgMik7CisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfaHlzdCwgc2V0X3RlbXBfaHlzdCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfaHlzdCwgc2V0X3RlbXBfaHlzdCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCSAgICBzaG93X3RlbXBfaHlzdCwgc2V0X3RlbXBfaHlzdCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAyKTsKKworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjBfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjFfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjNfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDQpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjVfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDYpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjdfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDcpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjhfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDE3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTgpOworc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc19pbiwgU19JUlVHTywgc2hvd19hbGFybXNfaW4sIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGFsYXJtc19mYW4sIFNfSVJVR08sIHNob3dfYWxhcm1zX2ZhbiwgTlVMTCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zX3RlbXAsIFNfSVJVR08sIHNob3dfYWxhcm1zX3RlbXAsIE5VTEwpOworCitzdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmY3MTgwNWZfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWluLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW44X21pbi5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfdHlwZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX3R5cGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM190eXBlLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zX2luLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtc190ZW1wLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtc19mYW4uYXR0ciwKKworCSZkZXZfYXR0cl9uYW1lLmF0dHIsCisJTlVMTAogfTsKIAotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmNzE4MDVmX3NlbnNvcl9hdHRyW10gPSB7Ci0JU0VOU09SX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxKSwKLQlTRU5TT1JfQVRUUihpbjFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCAxKSwKLQlTRU5TT1JfQVRUUihpbjFfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCAxKSwKLQlTRU5TT1JfQVRUUihpbjJfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKGluMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDIpLAotCVNFTlNPUl9BVFRSKGluMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDIpLAotCVNFTlNPUl9BVFRSKGluM19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMyksCi0JU0VOU09SX0FUVFIoaW4zX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X2luX21heCwgc2V0X2luX21heCwgMyksCi0JU0VOU09SX0FUVFIoaW4zX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X2luX21pbiwgc2V0X2luX21pbiwgMyksCi0JU0VOU09SX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA0KSwKLQlTRU5TT1JfQVRUUihpbjRfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA0KSwKLQlTRU5TT1JfQVRUUihpbjRfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA0KSwKLQlTRU5TT1JfQVRUUihpbjVfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDUpLAotCVNFTlNPUl9BVFRSKGluNV9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDUpLAotCVNFTlNPUl9BVFRSKGluNV9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDUpLAotCVNFTlNPUl9BVFRSKGluNl9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNiksCi0JU0VOU09SX0FUVFIoaW42X21heCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X2luX21heCwgc2V0X2luX21heCwgNiksCi0JU0VOU09SX0FUVFIoaW42X21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X2luX21pbiwgc2V0X2luX21pbiwgNiksCi0JU0VOU09SX0FUVFIoaW43X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA3KSwKLQlTRU5TT1JfQVRUUihpbjdfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWF4LCBzZXRfaW5fbWF4LCA3KSwKLQlTRU5TT1JfQVRUUihpbjdfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfaW5fbWluLCBzZXRfaW5fbWluLCA3KSwKLQlTRU5TT1JfQVRUUihpbjhfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDgpLAotCVNFTlNPUl9BVFRSKGluOF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDgpLAotCVNFTlNPUl9BVFRSKGluOF9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19pbl9taW4sIHNldF9pbl9taW4sIDgpLAotCi0JU0VOU09SX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCksCi0JU0VOU09SX0FUVFIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfdGVtcF9tYXgsIHNldF90ZW1wX21heCwgMCksCi0JU0VOU09SX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd190ZW1wX2h5c3QsIHNldF90ZW1wX2h5c3QsIDApLAotCVNFTlNPUl9BVFRSKHRlbXAxX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAwKSwKLQlTRU5TT1JfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxKSwKLQlTRU5TT1JfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd190ZW1wX21heCwgc2V0X3RlbXBfbWF4LCAxKSwKLQlTRU5TT1JfQVRUUih0ZW1wMl9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X3RlbXBfaHlzdCwgc2V0X3RlbXBfaHlzdCwgMSksCi0JU0VOU09SX0FUVFIodGVtcDJfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDEpLAotCVNFTlNPUl9BVFRSKHRlbXAzX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X3RlbXBfbWF4LCBzZXRfdGVtcF9tYXgsIDIpLAotCVNFTlNPUl9BVFRSKHRlbXAzX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfdGVtcF9oeXN0LCBzZXRfdGVtcF9oeXN0LCAyKSwKLQlTRU5TT1JfQVRUUih0ZW1wM190eXBlLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMiksCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBmNzE4MDVmX2dyb3VwID0geworCS5hdHRycyA9IGY3MTgwNWZfYXR0cmlidXRlcywKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgZjcxODA1Zl9mYW5fYXR0cltdID0gewotCVNFTlNPUl9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKSwKLQlTRU5TT1JfQVRUUihmYW4xX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICBzaG93X2Zhbl9taW4sIHNldF9mYW5fbWluLCAwKSwKLQlTRU5TT1JfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMSksCi0JU0VOU09SX0FUVFIoZmFuMl9taW4sIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgc2hvd19mYW5fbWluLCBzZXRfZmFuX21pbiwgMSksCi0JU0VOU09SX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKGZhbjNfbWluLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDIpLAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmY3MTgwNWZfYXR0cmlidXRlc19mYW5bM11bNF0gPSB7CisJeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19hbGFybS5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZjcxODA1Zl9ncm91cF9mYW5bM10gPSB7CisJeyAuYXR0cnMgPSBmNzE4MDVmX2F0dHJpYnV0ZXNfZmFuWzBdIH0sCisJeyAuYXR0cnMgPSBmNzE4MDVmX2F0dHJpYnV0ZXNfZmFuWzFdIH0sCisJeyAuYXR0cnMgPSBmNzE4MDVmX2F0dHJpYnV0ZXNfZmFuWzJdIH0sCiB9OwogCiAvKgpAQCAtNzE0LDQzICs4MjQsMzUgQEAKIAogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOwogCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIkNsYXNzIHJlZ2lzdHJhdGlvbiBmYWlsZWQgKCVkKVxuIiwgZXJyKTsKLQkJZ290byBleGl0X2ZyZWU7Ci0JfQotCiAJLyogSW5pdGlhbGl6ZSB0aGUgRjcxODA1RiBjaGlwICovCiAJZjcxODA1Zl9pbml0X2RldmljZShkYXRhKTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGludGVyZmFjZSBmaWxlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGY3MTgwNWZfZGV2X2F0dHIpOyBpKyspIHsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZmNzE4MDVmX2Rldl9hdHRyW2ldKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9jbGFzczsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZjcxODA1Zl9zZW5zb3JfYXR0cik7IGkrKykgewotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKLQkJCQkJICZmNzE4MDVmX3NlbnNvcl9hdHRyW2ldLmRldl9hdHRyKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXhpdF9jbGFzczsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZjcxODA1Zl9mYW5fYXR0cik7IGkrKykgewotCQlpZiAoIShkYXRhLT5mYW5fZW5hYmxlZCAmICgxIDw8IChpIC8gMikpKSkKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKSkpCisJCWdvdG8gZXhpdF9mcmVlOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKCEoZGF0YS0+ZmFuX2VuYWJsZWQgJiAoMSA8PCBpKSkpCiAJCQljb250aW51ZTsKLQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCi0JCQkJCSAmZjcxODA1Zl9mYW5fYXR0cltpXS5kZXZfYXR0cik7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIGV4aXRfY2xhc3M7CisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZwZGV2LT5kZXYua29iaiwKKwkJCQkJICAgICAgJmY3MTgwNWZfZ3JvdXBfZmFuW2ldKSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOworCX0KKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCiAJcmV0dXJuIDA7CiAKLWV4aXRfY2xhc3M6Ci0JZGV2X2VycigmcGRldi0+ZGV2LCAiU3lzZnMgaW50ZXJmYWNlIGNyZWF0aW9uIGZhaWxlZFxuIik7Ci0JaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9mYW5baV0pOwogZXhpdF9mcmVlOgorCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOwogCWtmcmVlKGRhdGEpOwogZXhpdDoKIAlyZXR1cm4gZXJyOwpAQCAtNzU5LDkgKzg2MSwxMyBAQAogc3RhdGljIGludCBfX2RldmV4aXQgZjcxODA1Zl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgZjcxODA1Zl9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJaW50IGk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LmtvYmosICZmNzE4MDVmX2dyb3VwKTsKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKQorCQlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmZjcxODA1Zl9ncm91cF9mYW5baV0pOwogCWtmcmVlKGRhdGEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jIGIvZHJpdmVycy9od21vbi9mc2NoZXIuYwppbmRleCA2YmM3NmI0Li4xOTcxNzc1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2hlci5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaGVyLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyoKICAqIEFkZHJlc3NlcyB0byBzY2FuCkBAIC0yNDAsNDcgKzI0MSw0NSBAQAogc3lzZnNfY29udHJvbChGU0NIRVJfUkVHX0NPTlRST0wpCiBzeXNmc193YXRjaGRvZyhGU0NIRVJfUkVHX1dET0dfQ09OVFJPTCwgRlNDSEVSX1JFR19XRE9HX1NUQVRFLCBGU0NIRVJfUkVHX1dET0dfUFJFU0VUKQogICAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfc3RhdHVzKTsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20jI29mZnNldCk7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19kaXYpOyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfaW5wdXQpOyBcCi19IHdoaWxlICgwKQorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmZzY2hlcl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3JldmlzaW9uLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9jb250cm9sLmF0dHIsCiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3RlbXAoY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNvZmZzZXQjI19zdGF0dXMpOyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI29mZnNldCMjX2lucHV0KTsgXAotfSB3aGlsZSAoMCkKKwkmZGV2X2F0dHJfd2F0Y2hkb2dfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX3dhdGNoZG9nX2NvbnRyb2wuYXR0ciwKKwkmZGV2X2F0dHJfd2F0Y2hkb2dfcHJlc2V0LmF0dHIsCiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2luKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4jI29mZnNldCMjX2lucHV0KTsgXAotfSB3aGlsZSAoMCkKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfaW5wdXQuYXR0ciwKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfcmV2aXNpb24oY2xpZW50KSBcCi1kbyB7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcmV2aXNpb24pOyBcCi19IHdoaWxlICgwKQorCSZkZXZfYXR0cl9mYW4xX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9wd20yLmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfZGl2LmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMy5hdHRyLAogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9hbGFybXMoY2xpZW50KSBcCi1kbyB7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsgXAotfSB3aGlsZSAoMCkKKwkmZGV2X2F0dHJfdGVtcDFfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfaW5wdXQuYXR0ciwKKwlOVUxMCit9OwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9jb250cm9sKGNsaWVudCkgXAotZG8geyBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2NvbnRyb2wpOyBcCi19IHdoaWxlICgwKQorc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZnNjaGVyX2dyb3VwID0geworCS5hdHRycyA9IGZzY2hlcl9hdHRyaWJ1dGVzLAorfTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfd2F0Y2hkb2coY2xpZW50KSBcCi1kbyB7IFwKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfd2F0Y2hkb2dfc3RhdHVzKTsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl93YXRjaGRvZ19jb250cm9sKTsgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl93YXRjaGRvZ19wcmVzZXQpOyBcCi19IHdoaWxlICgwKQotICAKIC8qCiAgKiBSZWFsIGNvZGUKICAqLwpAQCAtMzQyLDMxICszNDEsMTkgQEAKIAlmc2NoZXJfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmZzY2hlcl9ncm91cCkpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3JldmlzaW9uKG5ld19jbGllbnQpOwotCWRldmljZV9jcmVhdGVfZmlsZV9hbGFybXMobmV3X2NsaWVudCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2NvbnRyb2wobmV3X2NsaWVudCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3dhdGNoZG9nKG5ld19jbGllbnQpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDApOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMik7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAzKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDMpOwotCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZmc2NoZXJfZ3JvdXApOwogZXhpdF9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2ZyZWU6CkBAIC0zODEsNiArMzY4LDcgQEAKIAlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZmc2NoZXJfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZnNjcG9zLmMgYi9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jCmluZGV4IDZkYzQ4NDZiLi5lYTUwNmE3N2Y5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY3Bvcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjcG9zLmMKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyoKICAqIEFkZHJlc3NlcyB0byBzY2FuCkBAIC00MzIsNiArNDMzLDQ0IEBACiBzdGF0aWMgREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X3ZvbHRfNSwgTlVMTCk7CiBzdGF0aWMgREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X3ZvbHRfYmF0dCwgTlVMTCk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpmc2Nwb3NfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9ldmVudC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCisJJmRldl9hdHRyX3dkb2dfY29udHJvbC5hdHRyLAorCSZkZXZfYXR0cl93ZG9nX3ByZXNldC5hdHRyLAorCSZkZXZfYXR0cl93ZG9nX3N0YXRlLmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX3Jlc2V0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9yZXNldC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfcmVzZXQuYXR0ciwKKworCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfc3RhdHVzLmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfcmlwcGxlLmF0dHIsCisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX3N0YXR1cy5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX3JpcHBsZS5hdHRyLAorCSZkZXZfYXR0cl9wd20yLmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuM19zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfZmFuM19yaXBwbGUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBmc2Nwb3NfZ3JvdXAgPSB7CisJLmF0dHJzID0gZnNjcG9zX2F0dHJpYnV0ZXMsCit9OworCiBzdGF0aWMgaW50IGZzY3Bvc19hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJaWYgKCEoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfSFdNT04pKQpAQCAtNDk3LDQyICs1MzYsMTkgQEAKIAlkZXZfaW5mbygmbmV3X2NsaWVudC0+ZGV2LCAiRm91bmQgZnNjcG9zIGNoaXAsIHJldiAldVxuIiwgZGF0YS0+cmV2aXNpb24pOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZmc2Nwb3NfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZXZlbnQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfd2RvZ19jb250cm9sKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3dkb2dfcHJlc2V0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3dkb2dfc3RhdGUpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfc3RhdHVzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX3Jlc2V0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX3N0YXR1cyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9yZXNldCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19zdGF0dXMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfcmVzZXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX3N0YXR1cyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX3JpcHBsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9zdGF0dXMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9yaXBwbGUpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4zX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfc3RhdHVzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfcmlwcGxlKTsKLQogCXJldHVybiAwOwogCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmZnNjcG9zX2dyb3VwKTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtNTQ3LDYgKzU2Myw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZnNjcG9zX2dyb3VwKTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2dsNTE4c20uYyBiL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCmluZGV4IDY2MDZhYWIuLmMxMDM2NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCisrKyBiL2RyaXZlcnMvaHdtb24vZ2w1MThzbS5jCkBAIC00NCw2ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMzQwLDYgKzM0MSw0MiBAQAogc3RhdGljIERFVklDRV9BVFRSKGJlZXBfbWFzaywgU19JV1VTUnxTX0lSVUdPLAogCXNob3dfYmVlcF9tYXNrLCBzZXRfYmVlcF9tYXNrKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdsNTE4X2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4zX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21heC5hdHRyLAorCisJJmRldl9hdHRyX2ZhbjFfYXV0by5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKKworCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwkmZGV2X2F0dHJfYmVlcF9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfYmVlcF9tYXNrLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ2w1MThfZ3JvdXAgPSB7CisJLmF0dHJzID0gZ2w1MThfYXR0cmlidXRlcywKK307CisKIC8qCiAgKiBSZWFsIGNvZGUKICAqLwpAQCAtNDIwLDQzICs0NTcsMTkgQEAKIAlnbDUxOF9pbml0X2NsaWVudCgoc3RydWN0IGkyY19jbGllbnQgKikgbmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmdsNTE4X2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9hdXRvKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX2Rpdik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2Rpdik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfZW5hYmxlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfbWFzayk7Ci0KIAlyZXR1cm4gMDsKIAotLyogT0ssIHRoaXMgaXMgbm90IGV4YWN0bHkgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSwgdXN1YWxseS4gQnV0IGl0IGlzCi0gICB2ZXJ5IGNvZGUtZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gKi8KLQorZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmdsNTE4X2dyb3VwKTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtNDkwLDYgKzUwMyw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZ2w1MThfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZ2w1MjBzbS5jIGIvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKaW5kZXggMTRlODEwZi4uZWJlN2I5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKKysrIGIvZHJpdmVycy9od21vbi9nbDUyMHNtLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qIFR5cGUgb2YgdGhlIGV4dHJhIHNlbnNvciAqLwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGV4dHJhX3NlbnNvcl90eXBlOwpAQCAtMTkwLDU1ICsxOTEsMjkgQEAKICNkZWZpbmUgc3lzZnNfdmlkKG4pIFwKIHN5c2ZzX3JvX24oY3B1LCBuLCBfdmlkLCBHTDUyMF9SRUdfVklEX0lOUFVUKQogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV92aWQoY2xpZW50LCBuKSBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY3B1IyNuIyNfdmlkKQotCiAjZGVmaW5lIHN5c2ZzX2luKG4pIFwKIHN5c2ZzX3JvX24oaW4sIG4sIF9pbnB1dCwgR0w1MjBfUkVHX0lOIyNuIyNJTlBVVCkgXAogc3lzZnNfcndfbihpbiwgbiwgX21pbiwgR0w1MjBfUkVHX0lOIyNuIyNfTUlOKSBcCiBzeXNmc19yd19uKGluLCBuLCBfbWF4LCBHTDUyMF9SRUdfSU4jI24jI19NQVgpIFwKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfaW4oY2xpZW50LCBuKSBcCi0oe2RldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbiMjbiMjX2lucHV0KTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNuIyNfbWluKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNuIyNfbWF4KTt9KQotCiAjZGVmaW5lIHN5c2ZzX2ZhbihuKSBcCiBzeXNmc19yb19uKGZhbiwgbiwgX2lucHV0LCBHTDUyMF9SRUdfRkFOX0lOUFVUKSBcCiBzeXNmc19yd19uKGZhbiwgbiwgX21pbiwgR0w1MjBfUkVHX0ZBTl9NSU4pIFwKIHN5c2ZzX3J3X24oZmFuLCBuLCBfZGl2LCBHTDUyMF9SRUdfRkFOX0RJVikKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKGNsaWVudCwgbikgXAotKHtkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNuIyNfaW5wdXQpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNuIyNfbWluKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjbiMjX2Rpdik7fSkKLQogI2RlZmluZSBzeXNmc19mYW5fb2ZmKG4pIFwKIHN5c2ZzX3J3X24oZmFuLCBuLCBfb2ZmLCBHTDUyMF9SRUdfRkFOX09GRikgXAogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9mYW5fb2ZmKGNsaWVudCwgbikgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjbiMjX29mZikKLQogI2RlZmluZSBzeXNmc190ZW1wKG4pIFwKIHN5c2ZzX3JvX24odGVtcCwgbiwgX2lucHV0LCBHTDUyMF9SRUdfVEVNUCMjbiMjX0lOUFVUKSBcCiBzeXNmc19yd19uKHRlbXAsIG4sIF9tYXgsIEdMNTIwX1JFR19URU1QIyNuIyNfTUFYKSBcCiBzeXNmc19yd19uKHRlbXAsIG4sIF9tYXhfaHlzdCwgR0w1MjBfUkVHX1RFTVAjI24jI19NQVhfSFlTVCkKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChjbGllbnQsIG4pIFwKLSh7ZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI24jI19pbnB1dCk7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNuIyNfbWF4KTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI24jI19tYXhfaHlzdCk7fSkKLQogI2RlZmluZSBzeXNmc19hbGFybXMoKSBcCiBzeXNmc19ybyhhbGFybXMsICwgR0w1MjBfUkVHX0FMQVJNUykgXAogc3lzZnNfcncoYmVlcF9lbmFibGUsICwgR0w1MjBfUkVHX0JFRVBfRU5BQkxFKSBcCiBzeXNmc19ydyhiZWVwX21hc2ssICwgR0w1MjBfUkVHX0JFRVBfTUFTSykKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfYWxhcm1zKGNsaWVudCkgXAotKHtkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfZW5hYmxlKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfbWFzayk7fSkKLQogCiBzeXNmc192aWQoMCkKIApAQCAtNTExLDYgKzQ4Niw1OSBAQAogCXJldHVybiBjb3VudDsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmdsNTIwX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKworCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX29mZi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCisKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJmRldl9hdHRyX2JlZXBfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX2JlZXBfbWFzay5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdsNTIwX2dyb3VwID0geworCS5hdHRycyA9IGdsNTIwX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZ2w1MjBfYXR0cmlidXRlc19vcHRbXSA9IHsKKwkmZGV2X2F0dHJfaW40X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luNF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW40X21heC5hdHRyLAorCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGdsNTIwX2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBnbDUyMF9hdHRyaWJ1dGVzX29wdCwKK307CisKIAogLyoKICAqIFJlYWwgY29kZQpAQCAtNTcyLDMzICs2MDAsMzkgQEAKIAlnbDUyMF9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmZ2w1MjBfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKworCWlmIChkYXRhLT50d29fdGVtcHMpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3RlbXAyX2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3RlbXAyX21heCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl90ZW1wMl9tYXhfaHlzdCkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9IGVsc2UgeworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkgICAgICAmZGV2X2F0dHJfaW40X2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX2luNF9taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkgICAgICAmZGV2X2F0dHJfaW40X21heCkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZV92aWQobmV3X2NsaWVudCwgMCk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMyk7Ci0JaWYgKCFkYXRhLT50d29fdGVtcHMpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA0KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuX29mZihuZXdfY2xpZW50LCAxKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDEpOwotCWlmIChkYXRhLT50d29fdGVtcHMpCi0JCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDIpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2FsYXJtcyhuZXdfY2xpZW50KTsKLQogCXJldHVybiAwOwogCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmZ2w1MjBfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZnbDUyMF9ncm91cF9vcHQpOwogZXhpdF9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2ZyZWU6CkBAIC02NTIsNiArNjg2LDggQEAKIAlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZnbDUyMF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmZ2w1MjBfZ3JvdXBfb3B0KTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMgYi9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKaW5kZXggNDJiNjMyOC4uMjZiZTRlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9oZGFwcy5jCisrKyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwpAQCAtNTM3LDYgKzUzNyw3IEBACiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFQ0MiIpLAogCQlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJUaGlua1BhZCBUNDMiKSwKIAkJSERBUFNfRE1JX01BVENIX0xFTk9WTygiVGhpbmtQYWQgVDYwcCIpLAorCQlIREFQU19ETUlfTUFUQ0hfTEVOT1ZPKCJUaGlua1BhZCBUNjAiKSwKIAkJSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgWDQwIiksCiAJCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIlRoaW5rUGFkIFg0MSIpLAogCQlIREFQU19ETUlfTUFUQ0hfTEVOT1ZPKCJUaGlua1BhZCBYNjAiKSwKQEAgLTU4Nyw3ICs1ODgsOSBAQAogCWlucHV0X3NldF9hYnNfcGFyYW1zKGhkYXBzX2lkZXYsIEFCU19ZLAogCQkJLTI1NiwgMjU2LCBIREFQU19JTlBVVF9GVVpaLCBIREFQU19JTlBVVF9GTEFUKTsKIAotCWlucHV0X3JlZ2lzdGVyX2RldmljZShoZGFwc19pZGV2KTsKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaGRhcHNfaWRldik7CisJaWYgKHJldCkKKwkJZ290byBvdXRfaWRldjsKIAogCS8qIHN0YXJ0IHVwIG91ciB0aW1lciBmb3IgdGhlIGlucHV0IGRldmljZSAqLwogCWluaXRfdGltZXIoJmhkYXBzX3RpbWVyKTsKQEAgLTU5OCw2ICs2MDEsOCBAQAogCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBkcml2ZXIgc3VjY2Vzc2Z1bGx5IGxvYWRlZC5cbiIpOwogCXJldHVybiAwOwogCitvdXRfaWRldjoKKwlpbnB1dF9mcmVlX2RldmljZShoZGFwc19pZGV2KTsKIG91dF9ncm91cDoKIAlzeXNmc19yZW1vdmVfZ3JvdXAoJnBkZXYtPmRldi5rb2JqLCAmaGRhcHNfYXR0cmlidXRlX2dyb3VwKTsKIG91dF9kZXZpY2U6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2l0ODcuYyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCmluZGV4IDA2ZGY5MmIuLjMyM2VmMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCisrKyBiL2RyaXZlcnMvaHdtb24vaXQ4Ny5jCkBAIC00LDEwICs0LDEyIEBACiAKICAgICBTdXBwb3J0czogSVQ4NzA1RiAgU3VwZXIgSS9PIGNoaXAgdy9MUEMgaW50ZXJmYWNlCiAgICAgICAgICAgICAgIElUODcxMkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZSAmIFNNQnVzCisgICAgICAgICAgICAgIElUODcxNkYgIFN1cGVyIEkvTyBjaGlwIHcvTFBDIGludGVyZmFjZQorICAgICAgICAgICAgICBJVDg3MThGICBTdXBlciBJL08gY2hpcCB3L0xQQyBpbnRlcmZhY2UKICAgICAgICAgICAgICAgU2lzOTUwICAgQSBjbG9uZSBvZiB0aGUgSVQ4NzA1RgogCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxIENocmlzIEdhdXRocm9uIDxjaHJpc2dAMC1pbi5jb20+IAotICAgIExhcmdlbHkgaW5zcGlyZWQgYnkgbG03OC5jIG9mIHRoZSBzYW1lIHBhY2thZ2UKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBKZWFuIERlbHZhcmUgPGtoYWxpQGxpbnV4LWZyLm9yZz4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI0LDEzICsyNiw2IEBACiAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCiAqLwogCi0vKgotICAgIGRqZ0BwZHA4Lm5ldCBEYXZpZCBHZXNzd2VpbiA3LzE4LzAxCi0gICAgTW9kaWZpZWQgdG8gZml4IGJ1ZyB3aXRoIG5vdCBhbGwgYWxhcm1zIGVuYWJsZWQuCi0gICAgQWRkZWQgYWJpbGl0eSB0byByZWFkIGJhdHRlcnkgdm9sdGFnZSBhbmQgc2VsZWN0IHRlbXBlcmF0dXJlIHNlbnNvcgotICAgIHR5cGUgYXQgbW9kdWxlIGxvYWQgdGltZS4KLSovCi0KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpAQCAtNDIsNiArMzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogCkBAIC01MCwxMiArNDYsMTMgQEAKIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpc2FfYWRkcmVzczsKIAogLyogSW5zbW9kIHBhcmFtZXRlcnMgKi8KLUkyQ19DTElFTlRfSU5TTU9EXzIoaXQ4NywgaXQ4NzEyKTsKK0kyQ19DTElFTlRfSU5TTU9EXzQoaXQ4NywgaXQ4NzEyLCBpdDg3MTYsIGl0ODcxOCk7CiAKICNkZWZpbmUJUkVHCTB4MmUJLyogVGhlIHJlZ2lzdGVyIHRvIHJlYWQvd3JpdGUgKi8KICNkZWZpbmUJREVWCTB4MDcJLyogUmVnaXN0ZXI6IExvZ2ljYWwgZGV2aWNlIHNlbGVjdCAqLwogI2RlZmluZQlWQUwJMHgyZgkvKiBUaGUgdmFsdWUgdG8gcmVhZC93cml0ZSAqLwogI2RlZmluZSBQTUUJMHgwNAkvKiBUaGUgZGV2aWNlIHdpdGggdGhlIGZhbiByZWdpc3RlcnMgaW4gaXQgKi8KKyNkZWZpbmUgR1BJTwkweDA3CS8qIFRoZSBkZXZpY2Ugd2l0aCB0aGUgSVQ4NzE4RiBWSUQgdmFsdWUgaW4gaXQgKi8KICNkZWZpbmUJREVWSUQJMHgyMAkvKiBSZWdpc3RlcjogRGV2aWNlIElEICovCiAjZGVmaW5lCURFVlJFVgkweDIyCS8qIFJlZ2lzdGVyOiBEZXZpY2UgUmV2aXNpb24gKi8KIApAQCAtNzcsMTAgKzc0LDEwIEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotc3VwZXJpb19zZWxlY3Qodm9pZCkKK3N1cGVyaW9fc2VsZWN0KGludCBsZG4pCiB7CiAJb3V0YihERVYsIFJFRyk7Ci0Jb3V0YihQTUUsIFZBTCk7CisJb3V0YihsZG4sIFZBTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtOTksMjAgKzk2LDI3IEBACiAJb3V0YigweDAyLCBWQUwpOwogfQogCisvKiBMb2dpY2FsIGRldmljZSA0IHJlZ2lzdGVycyAqLwogI2RlZmluZSBJVDg3MTJGX0RFVklEIDB4ODcxMgogI2RlZmluZSBJVDg3MDVGX0RFVklEIDB4ODcwNQorI2RlZmluZSBJVDg3MTZGX0RFVklEIDB4ODcxNgorI2RlZmluZSBJVDg3MThGX0RFVklEIDB4ODcxOAogI2RlZmluZSBJVDg3X0FDVF9SRUcgIDB4MzAKICNkZWZpbmUgSVQ4N19CQVNFX1JFRyAweDYwCiAKKy8qIExvZ2ljYWwgZGV2aWNlIDcgcmVnaXN0ZXJzIChJVDg3MTJGIGFuZCBsYXRlcikgKi8KKyNkZWZpbmUgSVQ4N19TSU9fUElOWDJfUkVHCTB4MmMJLyogUGluIHNlbGVjdGlvbiAqLworI2RlZmluZSBJVDg3X1NJT19WSURfUkVHCTB4ZmMJLyogVklEIHZhbHVlICovCisKIC8qIFVwZGF0ZSBiYXR0ZXJ5IHZvbHRhZ2UgYWZ0ZXIgZXZlcnkgcmVhZGluZyBpZiB0cnVlICovCiBzdGF0aWMgaW50IHVwZGF0ZV92YmF0OwogCiAvKiBOb3QgYWxsIEJJT1NlcyBwcm9wZXJseSBjb25maWd1cmUgdGhlIFBXTSByZWdpc3RlcnMgKi8KIHN0YXRpYyBpbnQgZml4X3B3bV9wb2xhcml0eTsKIAotLyogQ2hpcCBUeXBlICovCi0KKy8qIFZhbHVlcyByZWFkIGZyb20gU3VwZXItSS9PIGNvbmZpZyBzcGFjZSAqLwogc3RhdGljIHUxNiBjaGlwX3R5cGU7CitzdGF0aWMgdTggdmlkX3ZhbHVlOwogCiAvKiBNYW55IElUODcgY29uc3RhbnRzIHNwZWNpZmllZCBiZWxvdyAqLwogCkBAIC0xMzEsMTMgKzEzNSwyMSBAQAogI2RlZmluZSBJVDg3X1JFR19BTEFSTTIgICAgICAgIDB4MDIKICNkZWZpbmUgSVQ4N19SRUdfQUxBUk0zICAgICAgICAweDAzCiAKKy8qIFRoZSBJVDg3MThGIGhhcyB0aGUgVklEIHZhbHVlIGluIGEgZGlmZmVyZW50IHJlZ2lzdGVyLCBpbiBTdXBlci1JL08KKyAgIGNvbmZpZ3VyYXRpb24gc3BhY2UuICovCiAjZGVmaW5lIElUODdfUkVHX1ZJRCAgICAgICAgICAgMHgwYQorLyogV2FybmluZzogcmVnaXN0ZXIgMHgwYiBpcyB1c2VkIGZvciBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQgaW4KKyAgIG5ldyBjaGlwcy9yZXZpc2lvbnMuIEkgc3VzcGVjdCBvbmx5IDE2LWJpdCB0YWNob21ldGVyIG1vZGUgd2lsbCB3b3JrCisgICBmb3IgdGhlc2UuICovCiAjZGVmaW5lIElUODdfUkVHX0ZBTl9ESVYgICAgICAgMHgwYgorI2RlZmluZSBJVDg3X1JFR19GQU5fMTZCSVQgICAgIDB4MGMKIAogLyogTW9uaXRvcnM6IDkgdm9sdGFnZSAoMCB0byA3LCBiYXR0ZXJ5KSwgMyB0ZW1wICgxIHRvIDMpLCAzIGZhbiAoMSB0byAzKSAqLwogCiAjZGVmaW5lIElUODdfUkVHX0ZBTihucikgICAgICAgKDB4MGQgKyAobnIpKQogI2RlZmluZSBJVDg3X1JFR19GQU5fTUlOKG5yKSAgICgweDEwICsgKG5yKSkKKyNkZWZpbmUgSVQ4N19SRUdfRkFOWChucikgICAgICAoMHgxOCArIChucikpCisjZGVmaW5lIElUODdfUkVHX0ZBTlhfTUlOKG5yKSAgKDB4MWIgKyAobnIpKQogI2RlZmluZSBJVDg3X1JFR19GQU5fTUFJTl9DVFJMIDB4MTMKICNkZWZpbmUgSVQ4N19SRUdfRkFOX0NUTCAgICAgICAweDE0CiAjZGVmaW5lIElUODdfUkVHX1BXTShucikgICAgICAgKDB4MTUgKyAobnIpKQpAQCAtMTY5LDcgKzE4MSwxNiBAQAogCQkJICAgICAyNTQpOwogfQogCitzdGF0aWMgaW5saW5lIHUxNiBGQU4xNl9UT19SRUcobG9uZyBycG0pCit7CisJaWYgKHJwbSA9PSAwKQorCQlyZXR1cm4gMHhmZmZmOworCXJldHVybiBTRU5TT1JTX0xJTUlUKCgxMzUwMDAwICsgcnBtKSAvIChycG0gKiAyKSwgMSwgMHhmZmZlKTsKK30KKwogI2RlZmluZSBGQU5fRlJPTV9SRUcodmFsLGRpdikgKCh2YWwpPT0wPy0xOih2YWwpPT0yNTU/MDoxMzUwMDAwLygodmFsKSooZGl2KSkpCisvKiBUaGUgZGl2aWRlciBpcyBmaXhlZCB0byAyIGluIDE2LWJpdCBtb2RlICovCisjZGVmaW5lIEZBTjE2X0ZST01fUkVHKHZhbCkgKCh2YWwpPT0wPy0xOih2YWwpPT0weGZmZmY/MDoxMzUwMDAwLygodmFsKSoyKSkKIAogI2RlZmluZSBURU1QX1RPX1JFRyh2YWwpIChTRU5TT1JTX0xJTUlUKCgodmFsKTwwPygoKHZhbCktNTAwKS8xMDAwKTpcCiAJCQkJCSgodmFsKSs1MDApLzEwMDApLC0xMjgsMTI3KSkKQEAgLTE4MSw3ICsyMDIsNyBAQAogc3RhdGljIGludCBESVZfVE9fUkVHKGludCB2YWwpCiB7CiAJaW50IGFuc3dlciA9IDA7Ci0Jd2hpbGUgKCh2YWwgPj49IDEpICE9IDApCisJd2hpbGUgKGFuc3dlciA8IDcgJiYgKHZhbCA+Pj0gMSkpCiAJCWFuc3dlcisrOwogCXJldHVybiBhbnN3ZXI7CiB9CkBAIC0yMDMsMTAgKzIyNCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBJbiBqaWZmaWVzICovCiAKIAl1OCBpbls5XTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggaW5fbWF4WzldOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KLQl1OCBpbl9taW5bOV07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwotCXU4IGZhblszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCi0JdTggZmFuX21pblszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlICovCisJdTggaW5fbWF4WzhdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KKwl1OCBpbl9taW5bOF07CQkvKiBSZWdpc3RlciB2YWx1ZSAqLworCXU4IGhhc19mYW47CQkvKiBCaXRmaWVsZCwgZmFucyBlbmFibGVkICovCisJdTE2IGZhblszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlcywgcG9zc2libHkgY29tYmluZWQgKi8KKwl1MTYgZmFuX21pblszXTsJCS8qIFJlZ2lzdGVyIHZhbHVlcywgcG9zc2libHkgY29tYmluZWQgKi8KIAl1OCB0ZW1wWzNdOwkJLyogUmVnaXN0ZXIgdmFsdWUgKi8KIAl1OCB0ZW1wX2hpZ2hbM107CS8qIFJlZ2lzdGVyIHZhbHVlICovCiAJdTggdGVtcF9sb3dbM107CQkvKiBSZWdpc3RlciB2YWx1ZSAqLwpAQCAtMjQzLDYgKzI2NSw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpdDg3X2lzYV9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gIml0ODctaXNhIiwKIAl9LAogCS5hdHRhY2hfYWRhcHRlcgk9IGl0ODdfaXNhX2F0dGFjaF9hZGFwdGVyLApAQCAtNTQ0LDE1ICs1NjcsMTUgQEAKIAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB2YWwgPSBzaW1wbGVfc3RydG9sKGJ1ZiwgTlVMTCwgMTApOwotCWludCBpLCBtaW5bM107CisJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwlpbnQgbWluOwogCXU4IG9sZDsKIAogCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlvbGQgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fRElWKTsKIAotCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCi0JCW1pbltpXSA9IEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5fbWluW2ldLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdltpXSkpOworCS8qIFNhdmUgZmFuIG1pbiBsaW1pdCAqLworCW1pbiA9IEZBTl9GUk9NX1JFRyhkYXRhLT5mYW5fbWluW25yXSwgRElWX0ZST01fUkVHKGRhdGEtPmZhbl9kaXZbbnJdKSk7CiAKIAlzd2l0Y2ggKG5yKSB7CiAJY2FzZSAwOgpAQCAtNTcyLDEwICs1OTUsMTAgQEAKIAkJdmFsIHw9IDB4MSA8PCA2OwogCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fRElWLCB2YWwpOwogCi0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykgewotCQlkYXRhLT5mYW5fbWluW2ldPUZBTl9UT19SRUcobWluW2ldLCBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdltpXSkpOwotCQlpdDg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOX01JTihpKSwgZGF0YS0+ZmFuX21pbltpXSk7Ci0JfQorCS8qIFJlc3RvcmUgZmFuIG1pbiBsaW1pdCAqLworCWRhdGEtPmZhbl9taW5bbnJdID0gRkFOX1RPX1JFRyhtaW4sIERJVl9GUk9NX1JFRyhkYXRhLT5mYW5fZGl2W25yXSkpOworCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fTUlOKG5yKSwgZGF0YS0+ZmFuX21pbltucl0pOworCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJcmV0dXJuIGNvdW50OwogfQpAQCAtNjU2LDYgKzY3OSw1OSBAQAogc2hvd19wd21fb2Zmc2V0KDIpOwogc2hvd19wd21fb2Zmc2V0KDMpOwogCisvKiBBIGRpZmZlcmVudCBzZXQgb2YgY2FsbGJhY2tzIGZvciAxNi1iaXQgZmFucyAqLworc3RhdGljIHNzaXplX3Qgc2hvd19mYW4xNihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQljaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IGl0ODdfZGF0YSAqZGF0YSA9IGl0ODdfdXBkYXRlX2RldmljZShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBGQU4xNl9GUk9NX1JFRyhkYXRhLT5mYW5bbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfZmFuMTZfbWluKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaXQ4N191cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIEZBTjE2X0ZST01fUkVHKGRhdGEtPmZhbl9taW5bbnJdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW4xNl9taW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgaXQ4N19kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+ZmFuX21pbltucl0gPSBGQU4xNl9UT19SRUcodmFsKTsKKwlpdDg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOX01JTihuciksCisJCQkgZGF0YS0+ZmFuX21pbltucl0gJiAweGZmKTsKKwlpdDg3X3dyaXRlX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOWF9NSU4obnIpLAorCQkJIGRhdGEtPmZhbl9taW5bbnJdID4+IDgpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyogV2Ugd2FudCB0byB1c2UgdGhlIHNhbWUgc3lzZnMgZmlsZSBuYW1lcyBhcyA4LWJpdCBmYW5zLCBidXQgd2UgbmVlZAorICAgZGlmZmVyZW50IHZhcmlhYmxlIG5hbWVzLCBzbyB3ZSBoYXZlIHRvIHVzZSBTRU5TT1JfQVRUUiBpbnN0ZWFkIG9mCisgICBTRU5TT1JfREVWSUNFX0FUVFIuICovCisjZGVmaW5lIHNob3dfZmFuMTZfb2Zmc2V0KG9mZnNldCkgXAorc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZW5zb3JfZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19pbnB1dDE2IFwKKwk9IFNFTlNPUl9BVFRSKGZhbiMjb2Zmc2V0IyNfaW5wdXQsIFNfSVJVR08sCQlcCisJCXNob3dfZmFuMTYsIE5VTEwsIG9mZnNldCAtIDEpOwkJCVwKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2Vuc29yX2Rldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfbWluMTYgXAorCT0gU0VOU09SX0FUVFIoZmFuIyNvZmZzZXQjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLAlcCisJCXNob3dfZmFuMTZfbWluLCBzZXRfZmFuMTZfbWluLCBvZmZzZXQgLSAxKQorCitzaG93X2ZhbjE2X29mZnNldCgxKTsKK3Nob3dfZmFuMTZfb2Zmc2V0KDIpOworc2hvd19mYW4xNl9vZmZzZXQoMyk7CisKIC8qIEFsYXJtcyAqLwogc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNjgzLDggKzc1OSw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERFVklDRV9BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtX3JlZywgc3RvcmVfdnJtX3JlZyk7Ci0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV92cm0oY2xpZW50KSBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdnJtKQogCiBzdGF0aWMgc3NpemVfdAogc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTY5Myw4ICs3NjcsODggQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIChsb25nKSB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkLCBkYXRhLT52cm0pKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjcHUwX3ZpZCwgU19JUlVHTywgc2hvd192aWRfcmVnLCBOVUxMKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3ZpZChjbGllbnQpIFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCkKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKml0ODdfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV90eXBlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl90eXBlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM190eXBlLmRldl9hdHRyLmF0dHIsCisKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgaXQ4N19ncm91cCA9IHsKKwkuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqaXQ4N19hdHRyaWJ1dGVzX29wdFtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dDE2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbjE2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0MTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluMTYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQxNi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4xNi5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2Rpdi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfZGl2LmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfZW5hYmxlLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKKworCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBpdDg3X2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBpdDg3X2F0dHJpYnV0ZXNfb3B0LAorfTsKIAogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKICAgICAgKiBpdDg3X2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaApAQCAtNzIwLDEwICs4NzQsMTIgQEAKIAlzdXBlcmlvX2VudGVyKCk7CiAJY2hpcF90eXBlID0gc3VwZXJpb19pbncoREVWSUQpOwogCWlmIChjaGlwX3R5cGUgIT0gSVQ4NzEyRl9ERVZJRAorCSAmJiBjaGlwX3R5cGUgIT0gSVQ4NzE2Rl9ERVZJRAorCSAmJiBjaGlwX3R5cGUgIT0gSVQ4NzE4Rl9ERVZJRAogCSAmJiBjaGlwX3R5cGUgIT0gSVQ4NzA1Rl9ERVZJRCkKIAkgCWdvdG8gZXhpdDsKIAotCXN1cGVyaW9fc2VsZWN0KCk7CisJc3VwZXJpb19zZWxlY3QoUE1FKTsKIAlpZiAoIShzdXBlcmlvX2luYihJVDg3X0FDVF9SRUcpICYgMHgwMSkpIHsKIAkJcHJfaW5mbygiaXQ4NzogRGV2aWNlIG5vdCBhY3RpdmF0ZWQsIHNraXBwaW5nXG4iKTsKIAkJZ290byBleGl0OwpAQCAtNzM5LDYgKzg5NSwyMSBAQAogCXByX2luZm8oIml0ODc6IEZvdW5kIElUJTA0eEYgY2hpcCBhdCAweCV4LCByZXZpc2lvbiAlZFxuIiwKIAkJY2hpcF90eXBlLCAqYWRkcmVzcywgc3VwZXJpb19pbmIoREVWUkVWKSAmIDB4MGYpOwogCisJLyogUmVhZCBHUElPIGNvbmZpZyBhbmQgVklEIHZhbHVlIGZyb20gTEROIDcgKEdQSU8pICovCisJaWYgKGNoaXBfdHlwZSAhPSBJVDg3MDVGX0RFVklEKSB7CisJCWludCByZWc7CisKKwkJc3VwZXJpb19zZWxlY3QoR1BJTyk7CisJCWlmIChjaGlwX3R5cGUgPT0gaXQ4NzE4KQorCQkJdmlkX3ZhbHVlID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fVklEX1JFRyk7CisKKwkJcmVnID0gc3VwZXJpb19pbmIoSVQ4N19TSU9fUElOWDJfUkVHKTsKKwkJaWYgKHJlZyAmICgxIDw8IDApKQorCQkJcHJfaW5mbygiaXQ4NzogaW4zIGlzIFZDQyAoKzVWKVxuIik7CisJCWlmIChyZWcgJiAoMSA8PCAxKSkKKwkJCXByX2luZm8oIml0ODc6IGluNyBpcyBWQ0NIICgrNVYgU3RhbmQtQnkpXG4iKTsKKwl9CisKIGV4aXQ6CiAJc3VwZXJpb19leGl0KCk7CiAJcmV0dXJuIGVycjsKQEAgLTc5OSw4ICs5NzAsMTkgQEAKIAkJaSA9IGl0ODdfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBJVDg3X1JFR19DSElQSUQpOwogCQlpZiAoaSA9PSAweDkwKSB7CiAJCQlraW5kID0gaXQ4NzsKLQkJCWlmICgoaXNfaXNhKSAmJiAoY2hpcF90eXBlID09IElUODcxMkZfREVWSUQpKQotCQkJCWtpbmQgPSBpdDg3MTI7CisJCQlpZiAoaXNfaXNhKSB7CisJCQkJc3dpdGNoIChjaGlwX3R5cGUpIHsKKwkJCQljYXNlIElUODcxMkZfREVWSUQ6CisJCQkJCWtpbmQgPSBpdDg3MTI7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgSVQ4NzE2Rl9ERVZJRDoKKwkJCQkJa2luZCA9IGl0ODcxNjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBJVDg3MThGX0RFVklEOgorCQkJCQlraW5kID0gaXQ4NzE4OworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CiAJCX0KIAkJZWxzZSB7CiAJCQlpZiAoa2luZCA9PSAwKQpAQCAtODE3LDYgKzk5OSwxMCBAQAogCQluYW1lID0gIml0ODciOwogCX0gZWxzZSBpZiAoa2luZCA9PSBpdDg3MTIpIHsKIAkJbmFtZSA9ICJpdDg3MTIiOworCX0gZWxzZSBpZiAoa2luZCA9PSBpdDg3MTYpIHsKKwkJbmFtZSA9ICJpdDg3MTYiOworCX0gZWxzZSBpZiAoa2luZCA9PSBpdDg3MTgpIHsKKwkJbmFtZSA9ICJpdDg3MTgiOwogCX0KIAogCS8qIEZpbGwgaW4gdGhlIHJlbWFpbmluZyBjbGllbnQgZmllbGRzIGFuZCBwdXQgaXQgaW50byB0aGUgZ2xvYmFsIGxpc3QgKi8KQEAgLTg0MSw3NiArMTAyNywxMDMgQEAKIAlpdDg3X2luaXRfY2xpZW50KG5ld19jbGllbnQsIGRhdGEpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZpdDg3X2dyb3VwKSkpCisJCWdvdG8gRVJST1IzOworCisJLyogRG8gbm90IGNyZWF0ZSBmYW4gZmlsZXMgZm9yIGRpc2FibGVkIGZhbnMgKi8KKwlpZiAoZGF0YS0+dHlwZSA9PSBpdDg3MTYgfHwgZGF0YS0+dHlwZSA9PSBpdDg3MTgpIHsKKwkJLyogMTYtYml0IHRhY2hvbWV0ZXJzICovCisJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMCkpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dDE2LmRldl9hdHRyKSkKKwkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4xNi5kZXZfYXR0cikpKQorCQkJCWdvdG8gRVJST1I0OworCQl9CisJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMSkpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dDE2LmRldl9hdHRyKSkKKwkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9taW4xNi5kZXZfYXR0cikpKQorCQkJCWdvdG8gRVJST1I0OworCQl9CisJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMikpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dDE2LmRldl9hdHRyKSkKKwkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4xNi5kZXZfYXR0cikpKQorCQkJCWdvdG8gRVJST1I0OworCQl9CisJfSBlbHNlIHsKKwkJLyogOC1iaXQgdGFjaG9tZXRlcnMgd2l0aCBjbG9jayBkaXZpZGVyICovCisJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgMCkpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0cikpCisJCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKSkKKwkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIpKSkKKwkJCQlnb3RvIEVSUk9SNDsKKwkJfQorCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDEpKSB7CisJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIpKQorCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0cikpCisJCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJICAgICAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyKSkpCisJCQkJZ290byBFUlJPUjQ7CisJCX0KKwkJaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAyKSkgeworCQkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2lucHV0LmRldl9hdHRyKSkKKwkJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfZmFuM19taW4uZGV2X2F0dHIpKQorCQkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0cikpKQorCQkJCWdvdG8gRVJST1I0OworCQl9CisJfQorCisJaWYgKGVuYWJsZV9wd21faW50ZXJmYWNlKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20yX2VuYWJsZS5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20zX2VuYWJsZS5kZXZfYXR0cikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJICAgICAmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkgICAgICZzZW5zb3JfZGV2X2F0dHJfcHdtMy5kZXZfYXR0cikpKQorCQkJZ290byBFUlJPUjQ7CisJfQorCisJaWYgKGRhdGEtPnR5cGUgPT0gaXQ4NzEyIHx8IGRhdGEtPnR5cGUgPT0gaXQ4NzE2CisJIHx8IGRhdGEtPnR5cGUgPT0gaXQ4NzE4KSB7CisJCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKKwkJLyogVklEIHJlYWRpbmcgZnJvbSBTdXBlci1JL08gY29uZmlnIHNwYWNlIGlmIGF2YWlsYWJsZSAqLworCQlkYXRhLT52aWQgPSB2aWRfdmFsdWU7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJmRldl9hdHRyX3ZybSkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCSAgICAgJmRldl9hdHRyX2NwdTBfdmlkKSkpCisJCQlnb3RvIEVSUk9SNDsKKwl9CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBFUlJPUjM7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjdfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luOF9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfdHlwZS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfdHlwZS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfdHlwZS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuM19pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCWlmIChlbmFibGVfcHdtX2ludGVyZmFjZSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9wd20xX2VuYWJsZS5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bTJfZW5hYmxlLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9wd20xLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfcHdtMi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIpOwotCX0KLQotCWlmIChkYXRhLT50eXBlID09IGl0ODcxMikgewotCQlkYXRhLT52cm0gPSB2aWRfd2hpY2hfdnJtKCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV92cm0obmV3X2NsaWVudCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV92aWQobmV3X2NsaWVudCk7CisJCWdvdG8gRVJST1I0OwogCX0KIAogCXJldHVybiAwOwogCitFUlJPUjQ6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJml0ODdfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZpdDg3X2dyb3VwX29wdCk7CiBFUlJPUjM6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBFUlJPUjI6CkBAIC05MjgsNiArMTE0MSw4IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmaXQ4N19ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmaXQ4N19ncm91cF9vcHQpOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKQEAgLTEwNDQsNiArMTI1OSwyMiBAQAogCQlkYXRhLT5tYW51YWxfcHdtX2N0bFtpXSA9IDB4ZmY7CiAJfQogCisJLyogU29tZSBjaGlwcyBzZWVtIHRvIGhhdmUgZGVmYXVsdCB2YWx1ZSAweGZmIGZvciBhbGwgbGltaXQKKwkgKiByZWdpc3RlcnMuIEZvciBsb3cgdm9sdGFnZSBsaW1pdHMgaXQgbWFrZXMgbm8gc2Vuc2UgYW5kIHRyaWdnZXJzCisJICogYWxhcm1zLCBzbyBjaGFuZ2UgdG8gMCBpbnN0ZWFkLiBGb3IgaGlnaCB0ZW1wZXJhdHVyZSBsaW1pdHMsIGl0CisJICogbWVhbnMgLTEgZGVncmVlIEMsIHdoaWNoIHN1cnByaXNpbmdseSBkb2Vzbid0IHRyaWdnZXIgYW4gYWxhcm0sCisJICogYnV0IGlzIHN0aWxsIGNvbmZ1c2luZywgc28gY2hhbmdlIHRvIDEyNyBkZWdyZWVzIEMuICovCisJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworCQl0bXAgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19WSU5fTUlOKGkpKTsKKwkJaWYgKHRtcCA9PSAweGZmKQorCQkJaXQ4N193cml0ZV92YWx1ZShjbGllbnQsIElUODdfUkVHX1ZJTl9NSU4oaSksIDApOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXRtcCA9IGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX1RFTVBfSElHSChpKSk7CisJCWlmICh0bXAgPT0gMHhmZikKKwkJCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19URU1QX0hJR0goaSksIDEyNyk7CisJfQorCiAJLyogQ2hlY2sgaWYgdGVtcGVyYXR1cmUgY2hhbm5uZWxzIGFyZSByZXNldCBtYW51YWxseSBvciBieSBzb21lIHJlYXNvbiAqLwogCXRtcCA9IGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX1RFTVBfRU5BQkxFKTsKIAlpZiAoKHRtcCAmIDB4M2YpID09IDApIHsKQEAgLTEwNjcsNiArMTI5OCwxOCBAQAogCQlkYXRhLT5mYW5fbWFpbl9jdHJsIHw9IDB4NzA7CiAJCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fTUFJTl9DVFJMLCBkYXRhLT5mYW5fbWFpbl9jdHJsKTsKIAl9CisJZGF0YS0+aGFzX2ZhbiA9IChkYXRhLT5mYW5fbWFpbl9jdHJsID4+IDQpICYgMHgwNzsKKworCS8qIFNldCB0YWNob21ldGVycyB0byAxNi1iaXQgbW9kZSBpZiBuZWVkZWQgKi8KKwlpZiAoZGF0YS0+dHlwZSA9PSBpdDg3MTYgfHwgZGF0YS0+dHlwZSA9PSBpdDg3MTgpIHsKKwkJdG1wID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOXzE2QklUKTsKKwkJaWYgKH50bXAgJiAweDA3ICYgZGF0YS0+aGFzX2ZhbikgeworCQkJZGV2X2RiZygmY2xpZW50LT5kZXYsCisJCQkJIlNldHRpbmcgZmFuMS0zIHRvIDE2LWJpdCBtb2RlXG4iKTsKKwkJCWl0ODdfd3JpdGVfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fMTZCSVQsCisJCQkJCSB0bXAgfCAweDA3KTsKKwkJfQorCX0KIAogCS8qIFNldCBjdXJyZW50IGZhbiBtb2RlIHJlZ2lzdGVycyBhbmQgdGhlIGRlZmF1bHQgc2V0dGluZ3MgZm9yIHRoZQogCSAqIG90aGVyIG1vZGUgcmVnaXN0ZXJzICovCkBAIC0xMTE3LDE4ICsxMzYwLDI2IEBACiAJCQlkYXRhLT5pbl9tYXhbaV0gPQogCQkJICAgIGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX1ZJTl9NQVgoaSkpOwogCQl9CisJCS8qIGluOCAoYmF0dGVyeSkgaGFzIG5vIGxpbWl0IHJlZ2lzdGVycyAqLwogCQlkYXRhLT5pbls4XSA9CiAJCSAgICBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19WSU4oOCkpOwotCQkvKiBUZW1wZXJhdHVyZSBzZW5zb3IgZG9lc24ndCBoYXZlIGxpbWl0IHJlZ2lzdGVycywgc2V0Ci0JCSAgIHRvIG1pbiBhbmQgbWF4IHZhbHVlICovCi0JCWRhdGEtPmluX21pbls4XSA9IDA7Ci0JCWRhdGEtPmluX21heFs4XSA9IDI1NTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlkYXRhLT5mYW5baV0gPQotCQkJICAgIGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0ZBTihpKSk7CisJCQkvKiBTa2lwIGRpc2FibGVkIGZhbnMgKi8KKwkJCWlmICghKGRhdGEtPmhhc19mYW4gJiAoMSA8PCBpKSkpCisJCQkJY29udGludWU7CisKIAkJCWRhdGEtPmZhbl9taW5baV0gPQogCQkJICAgIGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0ZBTl9NSU4oaSkpOworCQkJZGF0YS0+ZmFuW2ldID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCQkgICAgICAgSVQ4N19SRUdfRkFOKGkpKTsKKwkJCS8qIEFkZCBoaWdoIGJ5dGUgaWYgaW4gMTYtYml0IG1vZGUgKi8KKwkJCWlmIChkYXRhLT50eXBlID09IGl0ODcxNiB8fCBkYXRhLT50eXBlID09IGl0ODcxOCkgeworCQkJCWRhdGEtPmZhbltpXSB8PSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCQkJSVQ4N19SRUdfRkFOWChpKSkgPDwgODsKKwkJCQlkYXRhLT5mYW5fbWluW2ldIHw9IGl0ODdfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQlJVDg3X1JFR19GQU5YX01JTihpKSkgPDwgODsKKwkJCX0KIAkJfQogCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CiAJCQlkYXRhLT50ZW1wW2ldID0KQEAgLTExMzksMTAgKzEzOTAsMTQgQEAKIAkJCSAgICBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19URU1QX0xPVyhpKSk7CiAJCX0KIAotCQlpID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfRkFOX0RJVik7Ci0JCWRhdGEtPmZhbl9kaXZbMF0gPSBpICYgMHgwNzsKLQkJZGF0YS0+ZmFuX2RpdlsxXSA9IChpID4+IDMpICYgMHgwNzsKLQkJZGF0YS0+ZmFuX2RpdlsyXSA9IChpICYgMHg0MCkgPyAzIDogMTsKKwkJLyogTmV3ZXIgY2hpcHMgZG9uJ3QgaGF2ZSBjbG9jayBkaXZpZGVycyAqLworCQlpZiAoKGRhdGEtPmhhc19mYW4gJiAweDA3KSAmJiBkYXRhLT50eXBlICE9IGl0ODcxNgorCQkgJiYgZGF0YS0+dHlwZSAhPSBpdDg3MTgpIHsKKwkJCWkgPSBpdDg3X3JlYWRfdmFsdWUoY2xpZW50LCBJVDg3X1JFR19GQU5fRElWKTsKKwkJCWRhdGEtPmZhbl9kaXZbMF0gPSBpICYgMHgwNzsKKwkJCWRhdGEtPmZhbl9kaXZbMV0gPSAoaSA+PiAzKSAmIDB4MDc7CisJCQlkYXRhLT5mYW5fZGl2WzJdID0gKGkgJiAweDQwKSA/IDMgOiAxOworCQl9CiAKIAkJZGF0YS0+YWxhcm1zID0KIAkJCWl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX0FMQVJNMSkgfApAQCAtMTE1Miw5ICsxNDA3LDExIEBACiAKIAkJZGF0YS0+c2Vuc29yID0gaXQ4N19yZWFkX3ZhbHVlKGNsaWVudCwgSVQ4N19SRUdfVEVNUF9FTkFCTEUpOwogCQkvKiBUaGUgODcwNSBkb2VzIG5vdCBoYXZlIFZJRCBjYXBhYmlsaXR5ICovCi0JCWlmIChkYXRhLT50eXBlID09IGl0ODcxMikgeworCQlpZiAoZGF0YS0+dHlwZSA9PSBpdDg3MTIgfHwgZGF0YS0+dHlwZSA9PSBpdDg3MTYpIHsKIAkJCWRhdGEtPnZpZCA9IGl0ODdfcmVhZF92YWx1ZShjbGllbnQsIElUODdfUkVHX1ZJRCk7Ci0JCQlkYXRhLT52aWQgJj0gMHgxZjsKKwkJCS8qIFRoZSBvbGRlciBJVDg3MTJGIHJldmlzaW9ucyBoYWQgb25seSA1IFZJRCBwaW5zLAorCQkJICAgYnV0IHdlIGFzc3VtZSBpdCBpcyBhbHdheXMgc2FmZSB0byByZWFkIDYgYml0cy4gKi8KKwkJCWRhdGEtPnZpZCAmPSAweDNmOwogCQl9CiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKQEAgLTExOTIsOCArMTQ0OSw5IEBACiB9CiAKIAotTU9EVUxFX0FVVEhPUigiQ2hyaXMgR2F1dGhyb24gPGNocmlzZ0AwLWluLmNvbT4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiSVQ4NzA1RiwgSVQ4NzEyRiwgU2lzOTUwIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQ2hyaXMgR2F1dGhyb24gPGNocmlzZ0AwLWluLmNvbT4sICIKKwkgICAgICAiSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIklUODcwNUYvODcxMkYvODcxNkYvODcxOEYsIFNpUzk1MCBkcml2ZXIiKTsKIG1vZHVsZV9wYXJhbSh1cGRhdGVfdmJhdCwgYm9vbCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKHVwZGF0ZV92YmF0LCAiVXBkYXRlIHZiYXQgaWYgc2V0IGVsc2UgcmV0dXJuIHBvd2VydXAgdmFsdWUiKTsKIG1vZHVsZV9wYXJhbShmaXhfcHdtX3BvbGFyaXR5LCBib29sLCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vazh0ZW1wLmMgYi9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OGI2NGUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL2h3bW9uL2s4dGVtcC5jCkBAIC0wLDAgKzEsMjk0IEBACisvKgorICogazh0ZW1wLmMgLSBMaW51eCBrZXJuZWwgbW9kdWxlIGZvciBoYXJkd2FyZSBtb25pdG9yaW5nCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICoKKyAqIEluc3BpcmVkIGZyb20gdGhlIHc4Mzc4NSBhbmQgYW1kNzU2IGRyaXZlcnMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICogMDIxMTAtMTMwMSBVU0EuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisKKyNkZWZpbmUgVEVNUF9GUk9NX1JFRyh2YWwpCSgoKCgodmFsKSA+PiAxNikgJiAweGZmKSAtIDQ5KSAqIDEwMDApCisjZGVmaW5lIFJFR19URU1QCTB4ZTQKKyNkZWZpbmUgU0VMX1BMQUNFCTB4NDAKKyNkZWZpbmUgU0VMX0NPUkUJMHgwNAorCitzdHJ1Y3Qgazh0ZW1wX2RhdGEgeworCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldjsKKwlzdHJ1Y3QgbXV0ZXggdXBkYXRlX2xvY2s7CisJY29uc3QgY2hhciAqbmFtZTsKKwljaGFyIHZhbGlkOwkJLyogemVybyB1bnRpbCBmb2xsb3dpbmcgZmllbGRzIGFyZSB2YWxpZCAqLworCXVuc2lnbmVkIGxvbmcgbGFzdF91cGRhdGVkOwkvKiBpbiBqaWZmaWVzICovCisKKwkvKiByZWdpc3RlcnMgdmFsdWVzICovCisJdTggc2Vuc29yc3A7CQkvKiBzZW5zb3IgcHJlc2VuY2UgYml0cyAtIFNFTF9DT1JFICYgU0VMX1BMQUNFICovCisJdTMyIHRlbXBbMl1bMl07CQkvKiBjb3JlLCBwbGFjZSAqLworfTsKKworc3RhdGljIHN0cnVjdCBrOHRlbXBfZGF0YSAqazh0ZW1wX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBrOHRlbXBfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOworCXU4IHRtcDsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCWlmICghZGF0YS0+dmFsaWQKKwkgICAgfHwgdGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWikpIHsKKwkJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsICZ0bXApOworCQl0bXAgJj0gfihTRUxfUExBQ0UgfCBTRUxfQ09SRSk7CQkvKiBTZWxlY3Qgc2Vuc29yIDAsIGNvcmUwICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBSRUdfVEVNUCwgdG1wKTsKKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19URU1QLCAmZGF0YS0+dGVtcFswXVswXSk7CisKKwkJaWYgKGRhdGEtPnNlbnNvcnNwICYgU0VMX1BMQUNFKSB7CisJCQl0bXAgfD0gU0VMX1BMQUNFOwkvKiBTZWxlY3Qgc2Vuc29yIDEsIGNvcmUwICovCisJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsIHRtcCk7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUkVHX1RFTVAsCisJCQkJCSAgICAgICZkYXRhLT50ZW1wWzBdWzFdKTsKKwkJfQorCisJCWlmIChkYXRhLT5zZW5zb3JzcCAmIFNFTF9DT1JFKSB7CisJCQl0bXAgJj0gflNFTF9QTEFDRTsJLyogU2VsZWN0IHNlbnNvciAwLCBjb3JlMSAqLworCQkJdG1wIHw9IFNFTF9DT1JFOworCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFJFR19URU1QLCB0bXApOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19URU1QLAorCQkJCQkgICAgICAmZGF0YS0+dGVtcFsxXVswXSk7CisKKwkJCWlmIChkYXRhLT5zZW5zb3JzcCAmIFNFTF9QTEFDRSkgeworCQkJCXRtcCB8PSBTRUxfUExBQ0U7CS8qIFNlbGVjdCBzZW5zb3IgMSwgY29yZTEgKi8KKwkJCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsIHRtcCk7CisJCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIFJFR19URU1QLAorCQkJCQkJICAgICAgJmRhdGEtPnRlbXBbMV1bMV0pOworCQkJfQorCQl9CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBkYXRhOworfQorCisvKgorICogU3lzZnMgc3R1ZmYKKyAqLworCitzdGF0aWMgc3NpemVfdCBzaG93X25hbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZQorCQkJICpkZXZhdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGs4dGVtcF9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgZGF0YS0+bmFtZSk7Cit9CisKKworc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2YXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICphdHRyID0KKwkgICAgdG9fc2Vuc29yX2Rldl9hdHRyXzIoZGV2YXR0cik7CisJaW50IGNvcmUgPSBhdHRyLT5ucjsKKwlpbnQgcGxhY2UgPSBhdHRyLT5pbmRleDsKKwlzdHJ1Y3Qgazh0ZW1wX2RhdGEgKmRhdGEgPSBrOHRlbXBfdXBkYXRlX2RldmljZShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsCisJCSAgICAgICBURU1QX0ZST01fUkVHKGRhdGEtPnRlbXBbY29yZV1bcGxhY2VdKSk7Cit9CisKKy8qIGNvcmUsIHBsYWNlICovCisKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAwLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wNF9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAxLCAxKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihuYW1lLCBTX0lSVUdPLCBzaG93X25hbWUsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgazh0ZW1wX2lkc1tdID0geworCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0FNRCwgUENJX0RFVklDRV9JRF9BTURfSzhfTkJfTUlTQykgfSwKKwl7IDAgfSwKK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBrOHRlbXBfaWRzKTsKKworc3RhdGljIGludCBfX2RldmluaXQgazh0ZW1wX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQkJCSAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQoreworCWludCBlcnI7CisJdTggc2NmZzsKKwl1MzIgdGVtcDsKKwlzdHJ1Y3Qgazh0ZW1wX2RhdGEgKmRhdGE7CisJdTMyIGNwdWlkID0gY3B1aWRfZWF4KDEpOworCisJLyogdGhpcyBmZWF0dXJlIHNob3VsZCBiZSBhdmFpbGFibGUgc2luY2UgU0gtQzAgY29yZSAqLworCWlmICgoY3B1aWQgPT0gMHhmNDApIHx8IChjcHVpZCA9PSAweGY1MCkgfHwgKGNwdWlkID09IDB4ZjUxKSkgeworCQllcnIgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrOHRlbXBfZGF0YSksIEdGUF9LRVJORUwpKSkgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsICZzY2ZnKTsKKwlzY2ZnICY9IH4oU0VMX1BMQUNFIHwgU0VMX0NPUkUpOwkJLyogU2VsZWN0IHNlbnNvciAwLCBjb3JlMCAqLworCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBSRUdfVEVNUCwgc2NmZyk7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsICZzY2ZnKTsKKworCWlmIChzY2ZnICYgKFNFTF9QTEFDRSB8IFNFTF9DT1JFKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJDb25maWd1cmF0aW9uIGJpdChzKSBzdHVjayBhdCAxIVxuIik7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9mcmVlOworCX0KKworCXNjZmcgfD0gKFNFTF9QTEFDRSB8IFNFTF9DT1JFKTsKKwlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsIHNjZmcpOworCisJLyogbm93IHdlIGtub3cgaWYgd2UgY2FuIGNoYW5nZSBjb3JlIGFuZC9vciBzZW5zb3IgKi8KKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBSRUdfVEVNUCwgJmRhdGEtPnNlbnNvcnNwKTsKKworCWlmIChkYXRhLT5zZW5zb3JzcCAmIFNFTF9QTEFDRSkgeworCQlzY2ZnICY9IH5TRUxfQ09SRTsJLyogU2VsZWN0IHNlbnNvciAxLCBjb3JlMCAqLworCQlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGRldiwgUkVHX1RFTVAsIHNjZmcpOworCQlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgUkVHX1RFTVAsICZ0ZW1wKTsKKwkJc2NmZyB8PSBTRUxfQ09SRTsJLyogcHJlcGFyZSBmb3IgbmV4dCBzZWxlY3Rpb24gKi8KKwkJaWYgKCEoKHRlbXAgPj4gMTYpICYgMHhmZikpCS8qIGlmIHRlbXAgaXMgMCAtNDlDIGlzIG5vdCBsaWtlbHkgKi8KKwkJCWRhdGEtPnNlbnNvcnNwICY9IH5TRUxfUExBQ0U7CisJfQorCisJaWYgKGRhdGEtPnNlbnNvcnNwICYgU0VMX0NPUkUpIHsKKwkJc2NmZyAmPSB+U0VMX1BMQUNFOwkvKiBTZWxlY3Qgc2Vuc29yIDAsIGNvcmUxICovCisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwZGV2LCBSRUdfVEVNUCwgc2NmZyk7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBSRUdfVEVNUCwgJnRlbXApOworCQlpZiAoISgodGVtcCA+PiAxNikgJiAweGZmKSkJLyogaWYgdGVtcCBpcyAwIC00OUMgaXMgbm90IGxpa2VseSAqLworCQkJZGF0YS0+c2Vuc29yc3AgJj0gflNFTF9DT1JFOworCX0KKworCWRhdGEtPm5hbWUgPSAiazh0ZW1wIjsKKwltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIGRhdGEpOworCisJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwkvKiBzZW5zb3IgY2FuIGJlIGNoYW5nZWQgYW5kIHJlcG9ydHMgc29tZXRoaW5nICovCisJaWYgKGRhdGEtPnNlbnNvcnNwICYgU0VMX1BMQUNFKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwkvKiBjb3JlIGNhbiBiZSBjaGFuZ2VkIGFuZCByZXBvcnRzIHNvbWV0aGluZyAqLworCWlmIChkYXRhLT5zZW5zb3JzcCAmIFNFTF9DT1JFKSB7CisJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmcGRldi0+ZGV2LAorCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpOworCQlpZiAoZXJyKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwkJaWYgKGRhdGEtPnNlbnNvcnNwICYgU0VMX1BMQUNFKQorCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuCisJCQkJCSAgIGRldl9hdHRyKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3JlbW92ZTsKKwl9CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnBkZXYtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldik7CisKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KKworCXJldHVybiAwOworCitleGl0X3JlbW92ZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfbmFtZSk7CitleGl0X2ZyZWU6CisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworZXhpdDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgazh0ZW1wX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3Qgazh0ZW1wX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoJnBkZXYtPmRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsCisJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJnBkZXYtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0cik7CisJZGV2aWNlX3JlbW92ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlkZXZfc2V0X2RydmRhdGEoJnBkZXYtPmRldiwgTlVMTCk7CisJa2ZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBrOHRlbXBfZHJpdmVyID0geworCS5uYW1lID0gIms4dGVtcCIsCisJLmlkX3RhYmxlID0gazh0ZW1wX2lkcywKKwkucHJvYmUgPSBrOHRlbXBfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKGs4dGVtcF9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgazh0ZW1wX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmazh0ZW1wX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBrOHRlbXBfZXhpdCh2b2lkKQoreworCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmazh0ZW1wX2RyaXZlcik7Cit9CisKK01PRFVMRV9BVVRIT1IoIlJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBTUQgSzggY29yZSB0ZW1wZXJhdHVyZSBtb25pdG9yIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK21vZHVsZV9pbml0KGs4dGVtcF9pbml0KQorbW9kdWxlX2V4aXQoazh0ZW1wX2V4aXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtNjMuYyBiL2RyaXZlcnMvaHdtb24vbG02My5jCmluZGV4IDA3MWYwZmMuLmQ2OWYzY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG02My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG02My5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxtNjMuYyAtIGRyaXZlciBmb3IgdGhlIE5hdGlvbmFsIFNlbWljb25kdWN0b3IgTE02MyB0ZW1wZXJhdHVyZSBzZW5zb3IKICAqICAgICAgICAgIHdpdGggaW50ZWdyYXRlZCBmYW4gY29udHJvbAotICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDUgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgIEplYW4gRGVsdmFyZSA8a2hhbGlAbGludXgtZnIub3JnPgogICogQmFzZWQgb24gdGhlIGxtOTAgZHJpdmVyLgogICoKICAqIFRoZSBMTTYzIGlzIGEgc2Vuc29yIGNoaXAgbWFkZSBieSBOYXRpb25hbCBTZW1pY29uZHVjdG9yLiBJdCBtZWFzdXJlcwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogCiAvKgogICogQWRkcmVzc2VzIHRvIHNjYW4KQEAgLTMzMCw2ICszMzEsMTYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+YWxhcm1zKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLAorCQkJICBjaGFyICpidWYpCit7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOworCXN0cnVjdCBsbTYzX2RhdGEgKmRhdGEgPSBsbTYzX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgYml0bnIgPSBhdHRyLT5pbmRleDsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCAoZGF0YS0+YWxhcm1zID4+IGJpdG5yKSAmIDEpOworfQorCiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAwKTsKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2ZhbiwKIAlzZXRfZmFuLCAxKTsKQEAgLTM1MCw4ICszNjEsNTIgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUih0ZW1wMl9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXAyX2NyaXRfaHlzdCwKIAlzZXRfdGVtcDJfY3JpdF9oeXN0KTsKIAorLyogSW5kaXZpZHVhbCBhbGFybSBmaWxlcyAqLworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4xX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dF9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CisvKiBSYXcgYWxhcm0gZmlsZSBmb3IgY29tcGF0aWJpbGl0eSAqLwogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG02M19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMV9lbmFibGUuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9jcml0X2h5c3QuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXRfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG02M19ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTYzX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG02M19hdHRyaWJ1dGVzX2ZhbjFbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG02M19ncm91cF9mYW4xID0geworCS5hdHRycyA9IGxtNjNfYXR0cmlidXRlc19mYW4xLAorfTsKKwogLyoKICAqIFJlYWwgY29kZQogICovCkBAIC00MzgsMzcgKzQ5MywyNiBAQAogCWxtNjNfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwKKwkJCQkgICAgICAmbG02M19ncm91cCkpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCWlmIChkYXRhLT5jb25maWcgJiAweDA0KSB7IC8qIHRhY2hvbWV0ZXIgZW5hYmxlZCAqLworCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosCisJCQkJCSAgICAgICZsbTYzX2dyb3VwX2ZhbjEpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQorCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCi0JaWYgKGRhdGEtPmNvbmZpZyAmIDB4MDQpIHsgLyogdGFjaG9tZXRlciBlbmFibGVkICovCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIpOwotCX0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTEpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9lbmFibGUpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9jcml0X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQogCXJldHVybiAwOwogCitleGl0X3JlbW92ZV9maWxlczoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG02M19ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNjNfZ3JvdXBfZmFuMSk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTUxOCw2ICs1NjIsOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNjNfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtNjNfZ3JvdXBfZmFuMSk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc1LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwppbmRleCBmYzI1YjkwLi43YzY1YjhiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzUuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzUuYwpAQCAtMTEyLDYgKzExMiwxOCBAQAogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbG03NV9kZXRlY3QpOwogfQogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03NV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG03NV9ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTc1X2F0dHJpYnV0ZXMsCit9OworCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBpMmNfcHJvYmUgKi8KIHN0YXRpYyBpbnQgbG03NV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCiB7CkBAIC0xOTksMTggKzIxMSwxOSBAQAogCWxtNzVfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAJCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc1X2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0KIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzVfZ3JvdXApOwogZXhpdF9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2ZyZWU6CkBAIC0yMjMsNiArMjM2LDcgQEAKIHsKIAlzdHJ1Y3QgbG03NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTc1X2dyb3VwKTsKIAlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogCWtmcmVlKGRhdGEpOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTc3LmMgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwppbmRleCA0NTljYzk3Li5kZDk2OWYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtNzcuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtNzcuYwpAQCAtMjEyLDYgKzIxMiwyMyBAQAogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbG03N19kZXRlY3QpOwogfQogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG03N19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0X2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluX2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTc3X2dyb3VwID0geworCS5hdHRycyA9IGxtNzdfYXR0cmlidXRlcywKK307CisKIC8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwogc3RhdGljIGludCBsbTc3X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKIHsKQEAgLTMxNywyMiArMzM0LDE5IEBACiAJbG03N19pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG03N19ncm91cCkpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9jcml0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbl9oeXN0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heF9oeXN0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7CiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTc3X2dyb3VwKTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtMzQ1LDYgKzM1OSw3IEBACiB7CiAJc3RydWN0IGxtNzdfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03N19ncm91cCk7CiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG03OC5jIGIvZHJpdmVycy9od21vbi9sbTc4LmMKaW5kZXggYTZjZTdhYi4uYWMxYjc0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTc4LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTc4LmMKQEAgLTE3NSw2ICsxNzUsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgbG03OF9pc2FfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJsbTc4LWlzYSIsCiAJfSwKIAkuYXR0YWNoX2FkYXB0ZXIJPSBsbTc4X2lzYV9hdHRhY2hfYWRhcHRlciwKQEAgLTQ4MSw2ICs0ODIsNTAgQEAKIAlyZXR1cm4gbG03OF9kZXRlY3QoYWRhcHRlciwgaXNhX2FkZHJlc3MsIC0xKTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtNzhfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW41X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luNV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW41X21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjZfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW42X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjZfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfZGl2LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtNzhfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG03OF9hdHRyaWJ1dGVzLAorfTsKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCiBzdGF0aWMgaW50IGxtNzhfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewpAQCAtNjE1LDUwICs2NjAsMTkgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApKSkKKwkJZ290byBFUlJPUjM7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBFUlJPUjM7CisJCWdvdG8gRVJST1I0OwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjVfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW42X2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW42X21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX2Rpdik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuM19taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuM19kaXYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKLQogCXJldHVybiAwOwogCitFUlJPUjQ6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtNzhfZ3JvdXApOwogRVJST1IzOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogRVJST1IyOgpAQCAtNjc2LDYgKzY5MCw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbG03OF9ncm91cCk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9sbTgwLmMgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwppbmRleCBiNGNjZGZjLi4wNjQ1MTZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2xtODAuYworKysgYi9kcml2ZXJzL2h3bW9uL2xtODAuYwpAQCAtMzk0LDYgKzM5NCw0OCBAQAogCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgbG04MF9kZXRlY3QpOwogfQogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04MF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW40X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjVfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW42X21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW40X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luNV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjZfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfZGl2LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxtODBfZ3JvdXAgPSB7CisJLmF0dHJzID0gbG04MF9hdHRyaWJ1dGVzLAorfTsKKwogc3RhdGljIGludCBsbTgwX2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKIHsKIAlpbnQgaSwgY3VyOwpAQCAtNDUyLDQ4ICs0OTQsMTkgQEAKIAlkYXRhLT5mYW5fbWluWzFdID0gbG04MF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIExNODBfUkVHX0ZBTl9NSU4oMikpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTgwX2dyb3VwKSkpCisJCWdvdG8gZXJyb3JfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXJyb3JfZGV0YWNoOworCQlnb3RvIGVycm9yX3JlbW92ZTsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjVfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW42X21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjZfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9jcml0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2NyaXRfaHlzdCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCiAJcmV0dXJuIDA7CiAKK2Vycm9yX3JlbW92ZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG04MF9ncm91cCk7CiBlcnJvcl9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBlcnJvcl9mcmVlOgpAQCAtNTA4LDcgKzUyMSw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7Ci0KKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTgwX2dyb3VwKTsKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODMuYyBiL2RyaXZlcnMvaHdtb24vbG04My5jCmluZGV4IDIxMzdkNzguLmZlYjg3YjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04My5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04My5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxtODMuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgKiAgICAgICAgICBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogSGVhdmlseSBpbnNwaXJlZCBmcm9tIHRoZSBsbTc4LCBsbTc1IGFuZCBhZG0xMDIxIGRyaXZlcnMuIFRoZSBMTTgzIGlzCiAgKiBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwgU2VtaWNvbmR1Y3Rvci4gSXQgcmVwb3J0cyB1cCB0byBmb3VyCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qCiAgKiBBZGRyZXNzZXMgdG8gc2NhbgpAQCAtMTkxLDYgKzE5MiwxNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXMpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGxtODNfZGF0YSAqZGF0YSA9IGxtODNfdXBkYXRlX2RldmljZShkZXYpOworCWludCBiaXRuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7Cit9CisKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAsIE5VTEwsIDEpOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wLCBOVUxMLCAyKTsKQEAgLTIwOCw4ICsyMTksNjQgQEAKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDNfY3JpdCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGVtcCwKIAlzZXRfdGVtcCwgOCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXA0X2NyaXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgOCk7CisKKy8qIEluZGl2aWR1YWwgYWxhcm0gZmlsZXMgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wM19pbnB1dF9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAzX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDgpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wNF9jcml0X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCA5KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfaW5wdXRfZmF1bHQsIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDRfbWF4X2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2lucHV0X2ZhdWx0LCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMTUpOworLyogUmF3IGFsYXJtIGZpbGUgZm9yIGNvbXBhdGliaWxpdHkgKi8KIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtODNfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfY3JpdC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXhfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04M19ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTgzX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04M19hdHRyaWJ1dGVzX29wdFtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfY3JpdC5kZXZfYXR0ci5hdHRyLAorCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dF9mYXVsdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04M19ncm91cF9vcHQgPSB7CisJLmF0dHJzID0gbG04M19hdHRyaWJ1dGVzX29wdCwKK307CisKIC8qCiAgKiBSZWFsIGNvZGUKICAqLwpAQCAtMzE4LDU5ICszODUsMzIgQEAKIAkJZ290byBleGl0X2ZyZWU7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgdGhlIExNODMgY2hpcAotCSAqIChOb3RoaW5nIHRvIGRvIGZvciB0aGlzIG9uZS4pCi0JICovCi0KLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOwotCX0KLQotCS8qCisJICogUmVnaXN0ZXIgc3lzZnMgaG9va3MKIAkgKiBUaGUgTE04MiBjYW4gb25seSBtb25pdG9yIG9uZSBleHRlcm5hbCBkaW9kZSB3aGljaCBpcwogCSAqIGF0IHRoZSBzYW1lIHJlZ2lzdGVyIGFzIHRoZSBMTTgzIHRlbXAzIGVudHJ5IC0gc28gd2UKIAkgKiBkZWNsYXJlIDEgYW5kIDMgY29tbW9uLCBhbmQgdGhlbiAyIGFuZCA0IG9ubHkgZm9yIHRoZSBMTTgzLgogCSAqLwogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0cik7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2NyaXQuZGV2X2F0dHIpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKIAogCWlmIChraW5kID09IGxtODMpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfaW5wdXQuZGV2X2F0dHIpOworCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosCisJCQkJCSAgICAgICZsbTgzX2dyb3VwX29wdCkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CiAKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXguZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heC5kZXZfYXR0cik7Ci0KLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9jcml0LmRldl9hdHRyKTsKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTgzX2dyb3VwX29wdCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTM4NSw2ICs0MjUsOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODNfZ3JvdXBfb3B0KTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtODUuYyBiL2RyaXZlcnMvaHdtb24vbG04NS5jCmluZGV4IDM0MmU5NjYuLjJjMzI5M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG04NS5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG04NS5jCkBAIC0xMDI1LDYgKzEwMjUsODkgQEAKIAlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtODVfZGV0ZWN0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtODVfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW40X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjNfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjRfbWluLmF0dHIsCisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMi5hdHRyLAorCSZkZXZfYXR0cl9wd20zLmF0dHIsCisJJmRldl9hdHRyX3B3bTFfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX3B3bTJfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX3B3bTNfZW5hYmxlLmF0dHIsCisJJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luM19tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19tYXguYXR0ciwKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9wd20xX2F1dG9fY2hhbm5lbHMuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMl9hdXRvX2NoYW5uZWxzLmF0dHIsCisJJmRldl9hdHRyX3B3bTNfYXV0b19jaGFubmVscy5hdHRyLAorCSZkZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbi5hdHRyLAorCSZkZXZfYXR0cl9wd20yX2F1dG9fcHdtX21pbi5hdHRyLAorCSZkZXZfYXR0cl9wd20zX2F1dG9fcHdtX21pbi5hdHRyLAorCSZkZXZfYXR0cl9wd20xX2F1dG9fcHdtX21pbmN0bC5hdHRyLAorCSZkZXZfYXR0cl9wd20yX2F1dG9fcHdtX21pbmN0bC5hdHRyLAorCSZkZXZfYXR0cl9wd20zX2F1dG9fcHdtX21pbmN0bC5hdHRyLAorCSZkZXZfYXR0cl9wd20xX2F1dG9fcHdtX2ZyZXEuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9mcmVxLmF0dHIsCisJJmRldl9hdHRyX3B3bTNfYXV0b19wd21fZnJlcS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfb2ZmLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2F1dG9fdGVtcF9vZmYuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX29mZi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2F1dG9fdGVtcF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2F1dG9fdGVtcF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9hdXRvX3RlbXBfY3JpdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfY3JpdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19hdXRvX3RlbXBfY3JpdC5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04NV9ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTg1X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04NV9hdHRyaWJ1dGVzX29wdFtdID0geworCSZkZXZfYXR0cl9pbjRfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW40X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWF4LmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTg1X2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBsbTg1X2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogc3RhdGljIGludCBsbTg1X2RldGVjdChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLAogCQlpbnQga2luZCkKIHsKQEAgLTExNjMsODcgKzEyNDYsMzMgQEAKIAlsbTg1X2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKSkpCiAJCWdvdG8gRVJST1IyOwotCX0KLQotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuNF9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4zX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW40X21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20zX2VuYWJsZSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3ZybSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9hdXRvX2NoYW5uZWxzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTJfYXV0b19jaGFubmVscyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20zX2F1dG9fY2hhbm5lbHMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtM19hdXRvX3B3bV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9taW5jdGwpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMl9hdXRvX3B3bV9taW5jdGwpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtM19hdXRvX3B3bV9taW5jdGwpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtMV9hdXRvX3B3bV9mcmVxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bTJfYXV0b19wd21fZnJlcSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20zX2F1dG9fcHdtX2ZyZXEpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX29mZik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfb2ZmKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2F1dG9fdGVtcF9vZmYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2F1dG9fdGVtcF9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9hdXRvX3RlbXBfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2F1dG9fdGVtcF9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfYXV0b190ZW1wX2NyaXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfYXV0b190ZW1wX2NyaXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfYXV0b190ZW1wX2NyaXQpOwogCiAJLyogVGhlIEFEVDc0NjMgaGFzIGFuIG9wdGlvbmFsIFZSTSAxMCBtb2RlIHdoZXJlIHBpbiAyMSBpcyB1c2VkCiAJICAgYXMgYSBzaXh0aCBkaWdpdGFsIFZJRCBpbnB1dCByYXRoZXIgdGhhbiBhbiBhbmFsb2cgaW5wdXQuICovCiAJZGF0YS0+dmlkID0gbG04NV9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIExNODVfUkVHX1ZJRCk7Ci0JaWYgKCEoa2luZCA9PSBhZHQ3NDYzICYmIChkYXRhLT52aWQgJiAweDgwKSkpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9tYXgpOworCWlmICghKGtpbmQgPT0gYWR0NzQ2MyAmJiAoZGF0YS0+dmlkICYgMHg4MCkpKQorCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW40X2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNF9taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW40X21heCkpKQorCQkJZ290byBFUlJPUjM7CisKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBFUlJPUjM7CiAJfQogCiAJcmV0dXJuIDA7CiAKIAkvKiBFcnJvciBvdXQgYW5kIGNsZWFudXAgY29kZSAqLworICAgIEVSUk9SMzoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG04NV9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODVfZ3JvdXBfb3B0KTsKICAgICBFUlJPUjI6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiAgICAgRVJST1IxOgpAQCAtMTI1Niw2ICsxMjg1LDggQEAKIHsKIAlzdHJ1Y3QgbG04NV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZsbTg1X2dyb3VwX29wdCk7CiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlrZnJlZShkYXRhKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG04Ny5jIGIvZHJpdmVycy9od21vbi9sbTg3LmMKaW5kZXggZTZjMWI2My4uM2NlODI1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTg3LmMKKysrIGIvZHJpdmVycy9od21vbi9sbTg3LmMKQEAgLTU0Miw2ICs1NDIsNzggQEAKIAlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsIGxtODdfZGV0ZWN0KTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtODdfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMl9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4zX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW40X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfY3JpdC5hdHRyLAorCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCSZkZXZfYXR0cl9hb3V0X291dHB1dC5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG04N19ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTg3X2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG04N19hdHRyaWJ1dGVzX29wdFtdID0geworCSZkZXZfYXR0cl9pbjZfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW42X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjZfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCisJJmRldl9hdHRyX2luN19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjdfbWluLmF0dHIsCisJJmRldl9hdHRyX2luN19tYXguYXR0ciwKKworCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDNfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX21pbi5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19jcml0LmF0dHIsCisKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4wX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjVfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW41X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjVfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTg3X2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBsbTg3X2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogLyoKICAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gZG9lcyBtb3JlIHRoYW4ganVzdCBkZXRlY3Rpb24uIElmIGRldGVjdGlvbgogICogc3VjY2VlZHMsIGl0IGFsc28gcmVnaXN0ZXJzIHRoZSBuZXcgY2hpcC4KQEAgLTYwOSw3NyArNjgxLDkwIEBACiAJZGF0YS0+aW5fc2NhbGVbN10gPSAxODc1OwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwKSkpCiAJCWdvdG8gZXhpdF9kZXRhY2g7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjRfbWF4KTsKIAogCWlmIChkYXRhLT5jaGFubmVsICYgQ0hBTl9OT19GQU4oMCkpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjZfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNl9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNl9tYXgpOworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW42X2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNl9taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW42X21heCkpKQorCQkJZ290byBleGl0X3JlbW92ZTsKIAl9IGVsc2UgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfbWluKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX2Rpdik7Ci0JfQotCWlmIChkYXRhLT5jaGFubmVsICYgQ0hBTl9OT19GQU4oMSkpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjdfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luN19taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luN19tYXgpOwotCX0gZWxzZSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9pbnB1dCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfZGl2KTsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2ZhbjFfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfZmFuMV9taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfZmFuMV9kaXYpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2NyaXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9jcml0KTsKKwlpZiAoZGF0YS0+Y2hhbm5lbCAmIENIQU5fTk9fRkFOKDEpKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjdfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW43X21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjdfbWF4KSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0gZWxzZSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9mYW4yX2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2ZhbjJfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2ZhbjJfZGl2KSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOworCX0KIAogCWlmIChkYXRhLT5jaGFubmVsICYgQ0hBTl9URU1QMykgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX2lucHV0KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAzX21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfY3JpdCk7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl90ZW1wM19pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl90ZW1wM19tYXgpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfdGVtcDNfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX3RlbXAzX2NyaXQpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfSBlbHNlIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9taW4pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9tYXgpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNV9pbnB1dCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW41X21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW41X21heCk7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjBfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW4wX21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjBfbWF4KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNV9pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjVfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNV9tYXgpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCiAJaWYgKCEoZGF0YS0+Y2hhbm5lbCAmIENIQU5fTk9fVklEKSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl92cm0pOworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfY3B1MF92aWQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfdnJtKSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FvdXRfb3V0cHV0KTsKKwlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZ290byBleGl0X3JlbW92ZTsKKwl9CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTg3X2dyb3VwX29wdCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTczMiw2ICs4MTcsOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtODdfZ3JvdXBfb3B0KTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2xtOTAuYyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCmluZGV4IGQ5ZWVhZjcuLjY4ODJjZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vbG05MC5jCisrKyBiL2RyaXZlcnMvaHdtb24vbG05MC5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIGxtOTAuYyAtIFBhcnQgb2YgbG1fc2Vuc29ycywgTGludXgga2VybmVsIG1vZHVsZXMgZm9yIGhhcmR3YXJlCiAgKiAgICAgICAgICBtb25pdG9yaW5nCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgKgogICogQmFzZWQgb24gdGhlIGxtODMgZHJpdmVyLiBUaGUgTE05MCBpcyBhIHNlbnNvciBjaGlwIG1hZGUgYnkgTmF0aW9uYWwKICAqIFNlbWljb25kdWN0b3IuIEl0IHJlcG9ydHMgdXAgdG8gdHdvIHRlbXBlcmF0dXJlcyAoaXRzIG93biBwbHVzIHVwIHRvCkBAIC03OSw2ICs3OSw3IEBACiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qCiAgKiBBZGRyZXNzZXMgdG8gc2NhbgpAQCAtMzI3LDYgKzMyOCwxNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXMpOwogfQogCitzdGF0aWMgc3NpemVfdCBzaG93X2FsYXJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUKKwkJCSAgKmRldmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CisJc3RydWN0IGxtOTBfZGF0YSAqZGF0YSA9IGxtOTBfdXBkYXRlX2RldmljZShkZXYpOworCWludCBiaXRuciA9IGF0dHItPmluZGV4OworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChkYXRhLT5hbGFybXMgPj4gYml0bnIpICYgMSk7Cit9CisKIHN0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDgsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMTEsIE5VTEwsIDApOwogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXA4LApAQCAtMzQ0LDggKzM1NSw0NSBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMV9jcml0X2h5c3QsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RlbXBoeXN0LAogCXNldF90ZW1waHlzdCwgMyk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfaHlzdCwgU19JUlVHTywgc2hvd190ZW1waHlzdCwgTlVMTCwgNCk7CisKKy8qIEluZGl2aWR1YWwgYWxhcm0gZmlsZXMgKi8KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIodGVtcDFfY3JpdF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX2NyaXRfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUih0ZW1wMl9pbnB1dF9mYXVsdCwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAyX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21pbl9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRlbXAxX21heF9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNik7CisvKiBSYXcgYWxhcm0gZmlsZSBmb3IgY29tcGF0aWJpbGl0eSAqLwogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbG05MF9hdHRyaWJ1dGVzW10gPSB7CisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0X2h5c3QuZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXRfZmF1bHQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9taW5fYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBsbTkwX2dyb3VwID0geworCS5hdHRycyA9IGxtOTBfYXR0cmlidXRlcywKK307CisKIC8qIHBlYyB1c2VkIGZvciBBRE0xMDMyIG9ubHkgKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfcGVjKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmR1bW15LAogCQkJY2hhciAqYnVmKQpAQCAtNTY5LDM5ICs2MTcsMjUgQEAKIAlsbTkwX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTkwX2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisJaWYgKG5ld19jbGllbnQtPmZsYWdzICYgSTJDX0NMSUVOVF9QRUMpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3BlYykpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2NyaXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9jcml0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfY3JpdF9oeXN0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7Ci0KLQlpZiAobmV3X2NsaWVudC0+ZmxhZ3MgJiBJMkNfQ0xJRU5UX1BFQykKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wZWMpOwotCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTkwX2dyb3VwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3BlYyk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTYzNCw2ICs2NjgsOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtOTBfZ3JvdXApOworCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wZWMpOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbG05Mi5jIGIvZHJpdmVycy9od21vbi9sbTkyLmMKaW5kZXggMTk3Zjc3Mi4uMzBiNTM2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9sbTkyLmMKKysrIGIvZHJpdmVycy9od21vbi9sbTkyLmMKQEAgLTI4OCw2ICsyODgsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxtOTJfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9jcml0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX2NyaXRfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWluX2h5c3QuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbG05Ml9ncm91cCA9IHsKKwkuYXR0cnMgPSBsbTkyX2F0dHJpYnV0ZXMsCit9OworCiAvKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGRvZXMgbW9yZSB0aGFuIGp1c3QgZGV0ZWN0aW9uLiBJZiBkZXRlY3Rpb24KICAgIHN1Y2NlZWRzLCBpdCBhbHNvIHJlZ2lzdGVycyB0aGUgbmV3IGNoaXAuICovCiBzdGF0aWMgaW50IGxtOTJfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQpAQCAtMzU5LDIzICszNzYsMTkgQEAKIAlsbTkyX2luaXRfY2xpZW50KG5ld19jbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZsbTkyX2dyb3VwKSkpCisJCWdvdG8gZXhpdF9kZXRhY2g7CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X3JlbW92ZTsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX2NyaXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfY3JpdF9oeXN0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9taW5faHlzdCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxhcm1zKTsKLQogCXJldHVybiAwOwogCitleGl0X3JlbW92ZToKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmbG05Ml9ncm91cCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTM5Nyw2ICs0MTAsNyBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJmxtOTJfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vbWF4MTYxOS5jIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKaW5kZXggYjQxMzViNS4uMmY1OGY2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKKysrIGIvZHJpdmVycy9od21vbi9tYXgxNjE5LmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgxOCwgMHgxOSwgMHgxYSwKIAkJCQkJMHgyOSwgMHgyYSwgMHgyYiwKQEAgLTE3Miw2ICsxNzMsMjIgQEAKIAlzZXRfdGVtcF9oeXN0Mik7CiBzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtcywgTlVMTCk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICptYXgxNjE5X2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWluLmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9jcml0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2NyaXRfaHlzdC5hdHRyLAorCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIG1heDE2MTlfZ3JvdXAgPSB7CisJLmF0dHJzID0gbWF4MTYxOV9hdHRyaWJ1dGVzLAorfTsKKwogLyoKICAqIFJlYWwgY29kZQogICovCkBAIC0yNzMsMjIgKzI5MCwxOSBAQAogCW1heDE2MTlfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJm1heDE2MTlfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wMl9jcml0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX2NyaXRfaHlzdCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZtYXgxNjE5X2dyb3VwKTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgpAQCAtMzE4LDYgKzMzMiw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmbWF4MTYxOV9ncm91cCk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9wYzg3MzYwLmMgYi9kcml2ZXJzL2h3bW9uL3BjODczNjAuYwppbmRleCBhZTA1ZTQ4Li4zYjhiODE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3BjODczNjAuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjODczNjAuYwpAQCAtMjM4LDYgKzIzOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBwYzg3MzYwX2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAicGM4NzM2MCIsCiAJfSwKIAkuYXR0YWNoX2FkYXB0ZXIJPSBwYzg3MzYwX2RldGVjdCwKQEAgLTMyNyw2ICszMjgsMTIgQEAKIAlTRU5TT1JfQVRUUihmYW4zX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc2V0X2Zhbl9taW4sIDIpLAogfTsKIAorI2RlZmluZSBGQU5fVU5JVF9BVFRSUyhYKQlcCisJJmZhbl9pbnB1dFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmZhbl9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZmYW5fZGl2W1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmZmFuX21pbltYXS5kZXZfYXR0ci5hdHRyCisKIHN0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CkBAIC0zNTksNiArMzY2LDE5IEBACiAJU0VOU09SX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzZXRfcHdtLCAyKSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogcGM4NzM2eF9mYW5fYXR0cl9hcnJheVtdID0geworCUZBTl9VTklUX0FUVFJTKDApLAorCUZBTl9VTklUX0FUVFJTKDEpLAorCUZBTl9VTklUX0FUVFJTKDIpLAorCSZwd21bMF0uZGV2X2F0dHIuYXR0ciwKKwkmcHdtWzFdLmRldl9hdHRyLmF0dHIsCisJJnB3bVsyXS5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwYzg3MzZ4X2Zhbl9ncm91cCA9IHsKKwkuYXR0cnMgPSBwYzg3MzZ4X2Zhbl9hdHRyX2FycmF5LAorfTsKKwogc3RhdGljIHNzaXplX3Qgc2hvd19pbl9pbnB1dChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpOwpAQCAtNDcxLDYgKzQ5MSw2MSBAQAogCVNFTlNPUl9BVFRSKGluMTBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHNldF9pbl9tYXgsIDEwKSwKIH07CiAKKyNkZWZpbmUgVklOX1VOSVRfQVRUUlMoWCkgXAorCSZpbl9pbnB1dFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX3N0YXR1c1tYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21pbltYXS5kZXZfYXR0ci5hdHRyLAlcCisJJmluX21heFtYXS5kZXZfYXR0ci5hdHRyCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdmlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQsIGRhdGEtPnZybSkpOworfQorc3RhdGljIERFVklDRV9BVFRSKGNwdTBfdmlkLCBTX0lSVUdPLCBzaG93X3ZpZCwgTlVMTCk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdnJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPnZybSk7Cit9CitzdGF0aWMgc3NpemVfdCBzZXRfdnJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCWRhdGEtPnZybSA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXJldHVybiBjb3VudDsKK30KK3N0YXRpYyBERVZJQ0VfQVRUUih2cm0sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3ZybSwgc2V0X3ZybSk7CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5fYWxhcm1zKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gcGM4NzM2MF91cGRhdGVfZGV2aWNlKGRldik7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGRhdGEtPmluX2FsYXJtcyk7Cit9CitzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zX2luLCBTX0lSVUdPLCBzaG93X2luX2FsYXJtcywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwYzg3MzZ4X3Zpbl9hdHRyX2FycmF5W10gPSB7CisJVklOX1VOSVRfQVRUUlMoMCksCisJVklOX1VOSVRfQVRUUlMoMSksCisJVklOX1VOSVRfQVRUUlMoMiksCisJVklOX1VOSVRfQVRUUlMoMyksCisJVklOX1VOSVRfQVRUUlMoNCksCisJVklOX1VOSVRfQVRUUlMoNSksCisJVklOX1VOSVRfQVRUUlMoNiksCisJVklOX1VOSVRfQVRUUlMoNyksCisJVklOX1VOSVRfQVRUUlMoOCksCisJVklOX1VOSVRfQVRUUlMoOSksCisJVklOX1VOSVRfQVRUUlMoMTApLAorCSZkZXZfYXR0cl9jcHUwX3ZpZC5hdHRyLAorCSZkZXZfYXR0cl92cm0uYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zX2luLmF0dHIsCisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjODczNnhfdmluX2dyb3VwID0geworCS5hdHRycyA9IHBjODczNnhfdmluX2F0dHJfYXJyYXksCit9OworCiBzdGF0aWMgc3NpemVfdCBzaG93X3RoZXJtX2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKmF0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoZGV2YXR0cik7CkBAIC01ODksMzMgKzY2NCwyMiBAQAogCQkgICAgc2hvd190aGVybV9jcml0LCBzZXRfdGhlcm1fY3JpdCwgMisxMSksCiB9OwogCi1zdGF0aWMgc3NpemVfdCBzaG93X3ZpZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IHBjODczNjBfZGF0YSAqZGF0YSA9IHBjODczNjBfdXBkYXRlX2RldmljZShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCB2aWRfZnJvbV9yZWcoZGF0YS0+dmlkLCBkYXRhLT52cm0pKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihjcHUwX3ZpZCwgU19JUlVHTywgc2hvd192aWQsIE5VTEwpOworI2RlZmluZSBUSEVSTV9VTklUX0FUVFJTKFgpIFwKKwkmdGhlcm1faW5wdXRbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9zdGF0dXNbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9taW5bWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9tYXhbWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0aGVybV9jcml0W1hdLmRldl9hdHRyLmF0dHIKIAotc3RhdGljIHNzaXplX3Qgc2hvd192cm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+dnJtKTsKLX0KLXN0YXRpYyBzc2l6ZV90IHNldF92cm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKLQlzdHJ1Y3QgcGM4NzM2MF9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JZGF0YS0+dnJtID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0JcmV0dXJuIGNvdW50OwotfQotc3RhdGljIERFVklDRV9BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtLCBzZXRfdnJtKTsKLQotc3RhdGljIHNzaXplX3Qgc2hvd19pbl9hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQotewotCXN0cnVjdCBwYzg3MzYwX2RhdGEgKmRhdGEgPSBwYzg3MzYwX3VwZGF0ZV9kZXZpY2UoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIldVxuIiwgZGF0YS0+aW5fYWxhcm1zKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXNfaW4sIFNfSVJVR08sIHNob3dfaW5fYWxhcm1zLCBOVUxMKTsKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogcGM4NzM2eF90aGVybV9hdHRyX2FycmF5W10gPSB7CisJVEhFUk1fVU5JVF9BVFRSUygwKSwKKwlUSEVSTV9VTklUX0FUVFJTKDEpLAorCVRIRVJNX1VOSVRfQVRUUlMoMiksCisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjODczNnhfdGhlcm1fZ3JvdXAgPSB7CisJLmF0dHJzID0gcGM4NzM2eF90aGVybV9hdHRyX2FycmF5LAorfTsKIAogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wX2lucHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRldmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTczNSw2ICs3OTksMjUgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXNfdGVtcCwgU19JUlVHTywgc2hvd190ZW1wX2FsYXJtcywgTlVMTCk7CiAKKyNkZWZpbmUgVEVNUF9VTklUX0FUVFJTKFgpIFwKKwkmdGVtcF9pbnB1dFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJnRlbXBfc3RhdHVzW1hdLmRldl9hdHRyLmF0dHIsCVwKKwkmdGVtcF9taW5bWF0uZGV2X2F0dHIuYXR0ciwJXAorCSZ0ZW1wX21heFtYXS5kZXZfYXR0ci5hdHRyLAlcCisJJnRlbXBfY3JpdFtYXS5kZXZfYXR0ci5hdHRyCisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICogcGM4NzM2eF90ZW1wX2F0dHJfYXJyYXlbXSA9IHsKKwlURU1QX1VOSVRfQVRUUlMoMCksCisJVEVNUF9VTklUX0FUVFJTKDEpLAorCVRFTVBfVU5JVF9BVFRSUygyKSwKKwkvKiBpbmNsdWRlIHRoZSBmZXcgbWlzY2VsbGFuZW91cyBhdHRzIGhlcmUgKi8KKwkmZGV2X2F0dHJfYWxhcm1zX3RlbXAuYXR0ciwKKwlOVUxMCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGM4NzM2eF90ZW1wX2dyb3VwID0geworCS5hdHRycyA9IHBjODczNnhfdGVtcF9hdHRyX2FycmF5LAorfTsKKwogLyoKICAqIERldmljZSBkZXRlY3Rpb24sIHJlZ2lzdHJhdGlvbiBhbmQgdXBkYXRlCiAgKi8KQEAgLTkzNSw2MCArMTAxOCw2OSBAQAogCQlwYzg3MzYwX2luaXRfY2xpZW50KGNsaWVudCwgdXNlX3RoZXJtaXN0b3JzKTsKIAl9CiAKLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCS8qIFJlZ2lzdGVyIGFsbC1vci1ub3RoaW5nIHN5c2ZzIGdyb3VwcyAqLworCisJaWYgKGRhdGEtPmlubnIgJiYKKwkgICAgKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKKwkJCQkgICAgICAmcGM4NzM2eF92aW5fZ3JvdXApKSkKKwkJZ290byBFUlJPUjM7CisKKwlpZiAoZGF0YS0+aW5uciA9PSAxNCAmJgorCSAgICAoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCSAgICAgICZwYzg3MzZ4X3RoZXJtX2dyb3VwKSkpCisJCWdvdG8gRVJST1IzOworCisJLyogY3JlYXRlIGRldmljZSBhdHRyLWZpbGVzIGZvciB2YXJ5aW5nIHN5c2ZzIGdyb3VwcyAqLworCisJaWYgKGRhdGEtPnRlbXBucikgeworCQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+dGVtcG5yOyBpKyspIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnRlbXBfaW5wdXRbaV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9taW5baV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9tYXhbaV0uZGV2X2F0dHIpKQorCQkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmdGVtcF9jcml0W2ldLmRldl9hdHRyKSkKKwkJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnRlbXBfc3RhdHVzW2ldLmRldl9hdHRyKSkpCisJCQkJZ290byBFUlJPUjM7CisJCX0KKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWxhcm1zX3RlbXApKSkKKwkJCWdvdG8gRVJST1IzOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5mYW5ucjsgaSsrKSB7CisJCWlmIChGQU5fQ09ORklHX01PTklUT1IoZGF0YS0+ZmFuX2NvbmYsIGkpCisJCSAgICAmJiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZmYW5faW5wdXRbaV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZmYW5fbWluW2ldLmRldl9hdHRyKSkKKwkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmZmFuX2RpdltpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJmZhbl9zdGF0dXNbaV0uZGV2X2F0dHIpKSkpCisJCQlnb3RvIEVSUk9SMzsKKworCQlpZiAoRkFOX0NPTkZJR19DT05UUk9MKGRhdGEtPmZhbl9jb25mLCBpKQorCQkgICAgJiYgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZwd21baV0uZGV2X2F0dHIpKSkKKwkJCWdvdG8gRVJST1IzOworCX0KKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CiAJCWdvdG8gRVJST1IzOwogCX0KLQotCWlmIChkYXRhLT5pbm5yKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCAxMTsgaSsrKSB7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmluX21pbltpXS5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmaW5fbWF4W2ldLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZpbl9zdGF0dXNbaV0uZGV2X2F0dHIpOwotCQl9Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl92cm0pOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfYWxhcm1zX2luKTsKLQl9Ci0KLQlpZiAoZGF0YS0+dGVtcG5yKSB7Ci0JCWZvciAoaSA9IDA7IGkgPCBkYXRhLT50ZW1wbnI7IGkrKykgewotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRlbXBfaW5wdXRbaV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRlbXBfbWluW2ldLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0ZW1wX21heFtpXS5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGVtcF9jcml0W2ldLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0ZW1wX3N0YXR1c1tpXS5kZXZfYXR0cik7Ci0JCX0KLQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2FsYXJtc190ZW1wKTsKLQl9Ci0KLQlpZiAoZGF0YS0+aW5uciA9PSAxNCkgewotCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGhlcm1faW5wdXRbaV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnRoZXJtX21pbltpXS5kZXZfYXR0cik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmdGhlcm1fbWF4W2ldLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0aGVybV9jcml0W2ldLmRldl9hdHRyKTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZ0aGVybV9zdGF0dXNbaV0uZGV2X2F0dHIpOwotCQl9Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGRhdGEtPmZhbm5yOyBpKyspIHsKLQkJaWYgKEZBTl9DT05GSUdfTU9OSVRPUihkYXRhLT5mYW5fY29uZiwgaSkpIHsKLQkJCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZmYW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmZhbl9taW5baV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmZhbl9kaXZbaV0uZGV2X2F0dHIpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmZhbl9zdGF0dXNbaV0uZGV2X2F0dHIpOwotCQl9Ci0JCWlmIChGQU5fQ09ORklHX0NPTlRST0woZGF0YS0+ZmFuX2NvbmYsIGkpKQotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnB3bVtpXS5kZXZfYXR0cik7Ci0JfQotCiAJcmV0dXJuIDA7CiAKIEVSUk9SMzoKKwkvKiBjYW4gc3RpbGwgcmVtb3ZlIGdyb3VwcyB3aG9zZSBtZW1iZXJzIHdlcmUgYWRkZWQgaW5kaXZpZHVhbGx5ICovCisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGM4NzM2eF90ZW1wX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwYzg3MzZ4X2Zhbl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGM4NzM2eF90aGVybV9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmcGM4NzM2eF92aW5fZ3JvdXApOworCiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIEVSUk9SMjoKIAlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CkBAIC0xMDA4LDYgKzExMDAsMTEgQEAKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CiAKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwYzg3MzZ4X3RlbXBfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjODczNnhfZmFuX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwYzg3MzZ4X3RoZXJtX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwYzg3MzZ4X3Zpbl9ncm91cCk7CisKIAlpZiAoKGkgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc2lzNTU5NS5jIGIvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKaW5kZXggMDYzZjcxYy4uOTVhNGI1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKKysrIGIvZHJpdmVycy9od21vbi9zaXM1NTk1LmMKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogCkBAIC0yMDAsNiArMjAxLDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNpczU1OTVfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJzaXM1NTk1IiwKIAl9LAogCS5hdHRhY2hfYWRhcHRlcgk9IHNpczU1OTVfZGV0ZWN0LApAQCAtNDcyLDYgKzQ3NCw1MCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXMpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXMsIE5VTEwpOworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc2lzNTU5NV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWluLmF0dHIsCisJJmRldl9hdHRyX2luM19tYXguYXR0ciwKKworCSZkZXZfYXR0cl9mYW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfZGl2LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9kaXYuYXR0ciwKKworCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzaXM1NTk1X2dyb3VwID0geworCS5hdHRycyA9IHNpczU1OTVfYXR0cmlidXRlcywKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzaXM1NTk1X2F0dHJpYnV0ZXNfb3B0W10gPSB7CisJJmRldl9hdHRyX2luNF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNF9tYXguYXR0ciwKKworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzaXM1NTk1X2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBzaXM1NTk1X2F0dHJpYnV0ZXNfb3B0LAorfTsKICAKIC8qIFRoaXMgaXMgY2FsbGVkIHdoZW4gdGhlIG1vZHVsZSBpcyBsb2FkZWQgKi8KIHN0YXRpYyBpbnQgc2lzNTU5NV9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQpAQCAtNTY1LDQzICs2MTEsMzcgQEAKIAl9CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnNpczU1OTVfZ3JvdXApKSkKKwkJZ290byBleGl0X2RldGFjaDsKKwlpZiAoZGF0YS0+bWF4aW5zID09IDQpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX2luNF9pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9pbjRfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX2luNF9tYXgpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfSBlbHNlIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3RlbXAxX2lucHV0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3RlbXAxX21heCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdCkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwl9CisKIAlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBleGl0X2RldGFjaDsKKwkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19tYXgpOwotCWlmIChkYXRhLT5tYXhpbnMgPT0gNCkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9pbnB1dCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21heCk7Ci0JfQotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX2Rpdik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7Ci0JaWYgKGRhdGEtPm1heGlucyA9PSAzKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAxX21heCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCX0KIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnNpczU1OTVfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzaXM1NTk1X2dyb3VwX29wdCk7CiBleGl0X2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTYxOCw2ICs2NTgsOCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNpczU1OTVfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNpczU1OTVfZ3JvdXBfb3B0KTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3YjM5Ny5jCmluZGV4IGI2MDg2MTguLjcyYjBlMmQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYworKysgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N2IzOTcuYwpAQCAtMTc2LDkgKzE3Niw2IEBACiBzeXNmc190ZW1wKDMpOwogc3lzZnNfdGVtcCg0KTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChjbGllbnQsIG51bSkgXAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNudW0jI19pbnB1dCkKLQogLyogRkFOOiAxIFJQTS9iaXQKICAgIFJFRzogY291bnQgb2YgOTBrSHogcHVsc2VzIC8gcmV2b2x1dGlvbiAqLwogc3RhdGljIGludCBmYW5fZnJvbV9yZWcodTE2IHJlZykKQEAgLTIwNSw4ICsyMDIsMjIgQEAKIHN5c2ZzX2ZhbigzKTsKIHN5c2ZzX2Zhbig0KTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKGNsaWVudCwgbnVtKSBcCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjbnVtIyNfaW5wdXQpCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc21zYzQ3YjM5N19hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXA0X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjRfaW5wdXQuYXR0ciwKKworCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNtc2M0N2IzOTdfZ3JvdXAgPSB7CisJLmF0dHJzID0gc21zYzQ3YjM5N19hdHRyaWJ1dGVzLAorfTsKIAogc3RhdGljIGludCBzbXNjNDdiMzk3X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKQEAgLTIxNCw2ICsyMjUsNyBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNtc2M0N2IzOTdfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKQEAgLTIyOCw2ICsyNDAsNyBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgc21zYzQ3YjM5N19kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInNtc2M0N2IzOTciLAogCX0sCiAJLmF0dGFjaF9hZGFwdGVyCT0gc21zYzQ3YjM5N19kZXRlY3QsCkBAIC0yNjcsMjQgKzI4MCwxOSBAQAogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQogCQlnb3RvIGVycm9yX2ZyZWU7CiAKKwlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdiMzk3X2dyb3VwKSkpCisJCWdvdG8gZXJyb3JfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXJyb3JfZGV0YWNoOworCQlnb3RvIGVycm9yX3JlbW92ZTsKIAl9CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCA0KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKG5ld19jbGllbnQsIDMpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgNCk7Ci0KIAlyZXR1cm4gMDsKIAorZXJyb3JfcmVtb3ZlOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdiMzk3X2dyb3VwKTsKIGVycm9yX2RldGFjaDoKIAlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGVycm9yX2ZyZWU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMgYi9kcml2ZXJzL2h3bW9uL3Ntc2M0N20xLmMKaW5kZXggODI1ZThmNy4uNDcxMzJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vc21zYzQ3bTEuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIC8qIEFkZHJlc3MgaXMgYXV0b2RldGVjdGVkLCB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlICovCkBAIC0xMjgsNiArMTI5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHNtc2M0N20xX2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAic21zYzQ3bTEiLAogCX0sCiAJLmF0dGFjaF9hZGFwdGVyCT0gc21zYzQ3bTFfZGV0ZWN0LApAQCAtMzQ2LDYgKzM0OCwzMCBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBnZXRfYWxhcm1zLCBOVUxMKTsKIAorLyogQWxtb3N0IGFsbCBzeXNmcyBmaWxlcyBtYXkgb3IgbWF5IG5vdCBiZSBjcmVhdGVkIGRlcGVuZGluZyBvbiB0aGUgY2hpcAorICAgc2V0dXAgc28gd2UgY3JlYXRlIHRoZW0gaW5kaXZpZHVhbGx5LiBJdCBpcyBzdGlsbCBjb252ZW5pZW50IHRvIGRlZmluZSBhCisgICBncm91cCB0byByZW1vdmUgdGhlbSBhbGwgYXQgb25jZS4gKi8KK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpzbXNjNDdtMV9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfZmFuMV9kaXYuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2Rpdi5hdHRyLAorCisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMV9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMi5hdHRyLAorCSZkZXZfYXR0cl9wd20yX2VuYWJsZS5hdHRyLAorCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHNtc2M0N20xX2dyb3VwID0geworCS5hdHRycyA9IHNtc2M0N20xX2F0dHJpYnV0ZXMsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBzbXNjNDdtMV9maW5kKHVuc2lnbmVkIHNob3J0ICphZGRyKQogewogCXU4IHZhbDsKQEAgLTQyOCw3ICs0NTQsOCBAQAogCXB3bTIgPSAoc21zYzQ3bTFfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBTTVNDNDdNMV9SRUdfUFBJTigxKSkgJiAweDA1KQogCSAgICAgICA9PSAweDA0OwogCWlmICghKGZhbjEgfHwgZmFuMiB8fCBwd20xIHx8IHB3bTIpKSB7Ci0JCWRldl93YXJuKCZuZXdfY2xpZW50LT5kZXYsICJEZXZpY2UgaXMgbm90IGNvbmZpZ3VyZWQsIHdpbGwgbm90IHVzZVxuIik7CisJCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJEZXZpY2UgYXQgMHgleCBpcyBub3QgY29uZmlndXJlZCwgIgorCQkJICJ3aWxsIG5vdCB1c2VcbiIsIG5ld19jbGllbnQtPmFkZHIpOwogCQllcnIgPSAtRU5PREVWOwogCQlnb3RvIGVycm9yX2ZyZWU7CiAJfQpAQCAtNDQ1LDQ2ICs0NzIsNjIgQEAKIAlzbXNjNDdtMV91cGRhdGVfZGV2aWNlKCZuZXdfY2xpZW50LT5kZXYsIDEpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoJm5ld19jbGllbnQtPmRldik7Ci0JaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKLQkJZ290byBlcnJvcl9kZXRhY2g7Ci0JfQotCiAJaWYgKGZhbjEpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX2lucHV0KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4xX21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9kaXYpOworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMV9pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9mYW4xX21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9mYW4xX2RpdikpKQorCQkJZ290byBlcnJvcl9yZW1vdmVfZmlsZXM7CiAJfSBlbHNlCiAJCWRldl9kYmcoJm5ld19jbGllbnQtPmRldiwgIkZhbiAxIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCAiCiAJCQkic2tpcHBpbmdcbiIpOwogCiAJaWYgKGZhbjIpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX21pbik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMl9kaXYpOworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkgICAgICAmZGV2X2F0dHJfZmFuMl9pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9mYW4yX21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9mYW4yX2RpdikpKQorCQkJZ290byBlcnJvcl9yZW1vdmVfZmlsZXM7CiAJfSBlbHNlCiAJCWRldl9kYmcoJm5ld19jbGllbnQtPmRldiwgIkZhbiAyIG5vdCBlbmFibGVkIGJ5IGhhcmR3YXJlLCAiCiAJCQkic2tpcHBpbmdcbiIpOwogCiAJaWYgKHB3bTEpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20xX2VuYWJsZSk7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9wd20xKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3B3bTFfZW5hYmxlKSkpCisJCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKIAl9IGVsc2UKIAkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiUFdNIDEgbm90IGVuYWJsZWQgYnkgaGFyZHdhcmUsICIKIAkJCSJza2lwcGluZ1xuIik7CiAJaWYgKHB3bTIpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20yKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSk7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9wd20yKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX3B3bTJfZW5hYmxlKSkpCisJCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKIAl9IGVsc2UKIAkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiUFdNIDIgbm90IGVuYWJsZWQgYnkgaGFyZHdhcmUsICIKIAkJCSJza2lwcGluZ1xuIik7CiAKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7CisJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcykpKQorCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKKwlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKKwkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCQlnb3RvIGVycm9yX3JlbW92ZV9maWxlczsKKwl9CiAKIAlyZXR1cm4gMDsKIAotZXJyb3JfZGV0YWNoOgorZXJyb3JfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdtMV9ncm91cCk7CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBlcnJvcl9mcmVlOgogCWtmcmVlKGRhdGEpOwpAQCAtNDk5LDYgKzU0Miw3IEBACiAJaW50IGVycjsKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmc21zYzQ3bTFfZ3JvdXApOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vc21zYzQ3bTE5Mi5jIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKaW5kZXggYmRjNDU3MC4uYTY4MzNmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKKysrIGIvZHJpdmVycy9od21vbi9zbXNjNDdtMTkyLmMKQEAgLTMwLDYgKzMwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXZpZC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAKIC8qIEFkZHJlc3NlcyB0byBzY2FuICovCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDJjLCAweDJkLCBJMkNfQ0xJRU5UX0VORCB9OwpAQCAtMzcwLDYgKzM3MSw3NSBAQAogc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihpbjZfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDB4MDQwMCk7CiBzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGluN19hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgMHgwODAwKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnNtc2M0N20xOTJfYXR0cmlidXRlc1tdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjBfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW41X2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjZfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9hbGFybS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKworCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9vZmZzZXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2FsYXJtLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX29mZnNldC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0X2ZhdWx0LmRldl9hdHRyLmF0dHIsCisKKwkmZGV2X2F0dHJfY3B1MF92aWQuYXR0ciwKKwkmZGV2X2F0dHJfdnJtLmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgc21zYzQ3bTE5Ml9ncm91cCA9IHsKKwkuYXR0cnMgPSBzbXNjNDdtMTkyX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqc21zYzQ3bTE5Ml9hdHRyaWJ1dGVzX2luNFtdID0geworCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfYWxhcm0uZGV2X2F0dHIuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBzbXNjNDdtMTkyX2dyb3VwX2luNCA9IHsKKwkuYXR0cnMgPSBzbXNjNDdtMTkyX2F0dHJpYnV0ZXNfaW40LAorfTsKKwogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKICAgICAqIHNtc2M0N20xOTJfZHJpdmVyIGlzIGluc2VydGVkICh3aGVuIHRoaXMgbW9kdWxlIGlzIGxvYWRlZCksIGZvciBlYWNoCiAgICAgICBhdmFpbGFibGUgYWRhcHRlcgpAQCAtNDcxLDgwICs1NDEsMjggQEAKIAlzbXNjNDdtMTkyX2luaXRfY2xpZW50KGNsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdtMTkyX2dyb3VwKSkpCiAJCWdvdG8gZXhpdF9kZXRhY2g7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjBfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjBfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMF9hbGFybS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4xX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMV9hbGFybS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4yX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjJfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luMl9hbGFybS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjNfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjNfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luM19hbGFybS5kZXZfYXR0cik7CiAKIAkvKiBQaW4gMTEwIGlzIGVpdGhlciBpbjQgKCsxMlYpIG9yIFZJRDQgKi8KIAljb25maWcgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBTTVNDNDdNMTkyX1JFR19DT05GSUcpOwogCWlmICghKGNvbmZpZyAmIDB4MjApKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LAotCQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfaW40X21pbi5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCi0JCQkJICAgJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKLQkJCQkgICAmc2Vuc29yX2Rldl9hdHRyX2luNF9hbGFybS5kZXZfYXR0cik7CisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCQkgICAgICAmc21zYzQ3bTE5Ml9ncm91cF9pbjQpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNV9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW41X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjVfYWxhcm0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luNl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjZfYWxhcm0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2luN19taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfaW43X21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9pbjdfYWxhcm0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfb2Zmc2V0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2FsYXJtLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9taW4uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX29mZnNldC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9hbGFybS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXRfZmF1bHQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21pbi5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKLQkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfb2Zmc2V0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2FsYXJtLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19pbnB1dF9mYXVsdC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdnJtKTsKKworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQogCiAJcmV0dXJuIDA7CiAKK2V4aXRfcmVtb3ZlX2ZpbGVzOgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNtc2M0N20xOTJfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnNtc2M0N20xOTJfZ3JvdXBfaW40KTsKIGV4aXRfZGV0YWNoOgogCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CiBleGl0X2ZyZWU6CkBAIC01NTksNiArNTc3LDggQEAKIAlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdtMTkyX2dyb3VwKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZzbXNjNDdtMTkyX2dyb3VwX2luNCk7CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi92aWE2ODZhLmMgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwppbmRleCAxNjYyOThmLi5mOGFjYWRhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYworKysgYi9kcml2ZXJzL2h3bW9uL3ZpYTY4NmEuYwpAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAKIApAQCAtNTcwLDEwICs1NzEsNTMgQEAKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnZpYTY4NmFfYXR0cmlidXRlc1tdID0geworCSZkZXZfYXR0cl9pbjBfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4xX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW40X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMF9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2luM19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW40X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNF9tYXguYXR0ciwKKworCSZkZXZfYXR0cl90ZW1wMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19tYXhfaHlzdC5hdHRyLAorCisJJmRldl9hdHRyX2ZhbjFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfZmFuMl9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2Rpdi5hdHRyLAorCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHZpYTY4NmFfZ3JvdXAgPSB7CisJLmF0dHJzID0gdmlhNjg2YV9hdHRyaWJ1dGVzLAorfTsKKwogLyogVGhlIGRyaXZlci4gSSBjaG9vc2UgdG8gdXNlIHR5cGUgaTJjX2RyaXZlciwgYXMgYXQgaXMgaWRlbnRpY2FsIHRvIGJvdGgKICAgIHNtYnVzX2RyaXZlciBhbmQgaXNhX2RyaXZlciwgYW5kIGNsaWVudHMgY291bGQgYmUgb2YgZWl0aGVyIGtpbmQgKi8KIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2aWE2ODZhX2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAidmlhNjg2YSIsCiAJfSwKIAkuYXR0YWNoX2FkYXB0ZXIJPSB2aWE2ODZhX2RldGVjdCwKQEAgLTY0OSw0NiArNjkzLDE5IEBACiAJdmlhNjg2YV9pbml0X2NsaWVudChuZXdfY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmdmlhNjg2YV9ncm91cCkpKQorCQlnb3RvIGV4aXRfZGV0YWNoOworCiAJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMl9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMF9taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4xX21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luM19taW4pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW40X21pbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjBfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbjNfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luNF9tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfaW5wdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAyX21heCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDFfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDJfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuMV9pbnB1dCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4yX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfbWluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjFfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbjJfZGl2KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2FsYXJtcyk7Ci0KIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnZpYTY4NmFfZ3JvdXApOwogZXhpdF9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2ZyZWU6CkBAIC03MDQsNiArNzIxLDcgQEAKIAlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ2aWE2ODZhX2dyb3VwKTsKIAogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0MTIxMS5jIGIvZHJpdmVycy9od21vbi92dDEyMTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWNjNTYwCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9od21vbi92dDEyMTEuYwpAQCAtMCwwICsxLDEzNTUgQEAKKy8qCisgKiB2dDEyMTEuYyAtIGRyaXZlciBmb3IgdGhlIFZJQSBWVDEyMTEgU3VwZXItSS9PIGNoaXAgaW50ZWdyYXRlZCBoYXJkd2FyZQorICogICAgICAgICAgICBtb25pdG9yaW5nIGZlYXR1cmVzCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSnVlcmcgSGFlZmxpZ2VyIDxqdWVyZ2hAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBkcml2ZXIgZm9yIGtlcm5lbCAyLjQgYnkgTWFyayBELiBTdHVkZWJha2VyCisgKiBhbmQgaXRzIHBvcnQgdG8ga2VybmVsIDIuNiBieSBMYXJzIEVrbWFuLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9od21vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2h3bW9uLXN5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvaHdtb24tdmlkLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworc3RhdGljIGludCB1Y2hfY29uZmlnID0gLTE7Cittb2R1bGVfcGFyYW0odWNoX2NvbmZpZywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0ModWNoX2NvbmZpZywgIkluaXRpYWxpemUgdGhlIHVuaXZlcnNhbCBjaGFubmVsIGNvbmZpZ3VyYXRpb24iKTsKKworc3RhdGljIGludCBpbnRfbW9kZSA9IC0xOworbW9kdWxlX3BhcmFtKGludF9tb2RlLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbnRfbW9kZSwgIkZvcmNlIHRoZSB0ZW1wZXJhdHVyZSBpbnRlcnJ1cHQgbW9kZSIpOworCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldjsKKworI2RlZmluZSBEUlZOQU1FICJ2dDEyMTEiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVnaXN0ZXJzCisgKgorICogVGhlIHNlbnNvcnMgYXJlIGRlZmluZWQgYXMgZm9sbG93cy4KKyAqCisgKiBTZW5zb3IgICAgICAgICAgVm9sdGFnZSBNb2RlICAgVGVtcCBNb2RlICAgTm90ZXMgKGZyb20gdGhlIGRhdGFzaGVldCkKKyAqIC0tLS0tLS0tICAgICAgICAtLS0tLS0tLS0tLS0gICAtLS0tLS0tLS0gICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUmVhZGluZyAxICAgICAgICAgICAgICAgICAgICAgIHRlbXAxICAgICAgIEludGVsIHRoZXJtYWwgZGlvZGUKKyAqIFJlYWRpbmcgMyAgICAgICAgICAgICAgICAgICAgICB0ZW1wMiAgICAgICBJbnRlcm5hbCB0aGVybWFsIGRpb2RlCisgKiBVQ0gxL1JlYWRpbmcyICAgaW4wICAgICAgICAgICAgdGVtcDMgICAgICAgTlRDIHR5cGUgdGhlcm1pc3RvcgorICogVUNIMiAgICAgICAgICAgIGluMSAgICAgICAgICAgIHRlbXA0ICAgICAgICsyLjVWCisgKiBVQ0gzICAgICAgICAgICAgaW4yICAgICAgICAgICAgdGVtcDUgICAgICAgVmNjUAorICogVUNINCAgICAgICAgICAgIGluMyAgICAgICAgICAgIHRlbXA2ICAgICAgICs1VgorICogVUNINSAgICAgICAgICAgIGluNCAgICAgICAgICAgIHRlbXA3ICAgICAgICsxMlYKKyAqIDMuM1YgICAgICAgICAgICBpbjUgICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5hbCBWREQgKCszLjNWKQorICoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBWb2x0YWdlcyAoaW4pIG51bWJlcmVkIDAtNSAoaXgpICovCisjZGVmaW5lIFZUMTIxMV9SRUdfSU4oaXgpCQkoMHgyMSArIChpeCkpCisjZGVmaW5lIFZUMTIxMV9SRUdfSU5fTUlOKGl4KQkJKChpeCkgPT0gMCA/IDB4M2UgOiAweDJhICsgMiAqIChpeCkpCisjZGVmaW5lIFZUMTIxMV9SRUdfSU5fTUFYKGl4KQkJKChpeCkgPT0gMCA/IDB4M2QgOiAweDI5ICsgMiAqIChpeCkpCisKKy8qIFRlbXBlcmF0dXJlcyAodGVtcCkgbnVtYmVyZWQgMC02IChpeCkgKi8KK3N0YXRpYyB1OCByZWd0ZW1wW10JPSB7MHgxZiwgMHgyMCwgMHgyMSwgMHgyMiwgMHgyMywgMHgyNCwgMHgyNX07CitzdGF0aWMgdTggcmVndGVtcG1heFtdCT0gezB4MzksIDB4MWQsIDB4M2QsIDB4MmIsIDB4MmQsIDB4MmYsIDB4MzF9Oworc3RhdGljIHU4IHJlZ3RlbXBoeXN0W10JPSB7MHgzYSwgMHgxZSwgMHgzZSwgMHgyYywgMHgyZSwgMHgzMCwgMHgzMn07CisKKy8qIEZhbnMgbnVtYmVyZWQgMC0xIChpeCkgKi8KKyNkZWZpbmUgVlQxMjExX1JFR19GQU4oaXgpCQkoMHgyOSArIChpeCkpCisjZGVmaW5lIFZUMTIxMV9SRUdfRkFOX01JTihpeCkJCSgweDNiICsgKGl4KSkKKyNkZWZpbmUgVlQxMjExX1JFR19GQU5fRElWCQkgMHg0NworCisvKiBQV01zIG51bWJlcmVkIDAtMSAoaXgpICovCisvKiBBdXRvIHBvaW50cyBudW1iZXJlZCAwLTMgKGFwKSAqLworI2RlZmluZSBWVDEyMTFfUkVHX1BXTShpeCkJCSgweDYwICsgKGl4KSkKKyNkZWZpbmUgVlQxMjExX1JFR19QV01fQ0xLCQkgMHg1MAorI2RlZmluZSBWVDEyMTFfUkVHX1BXTV9DVEwJCSAweDUxCisjZGVmaW5lIFZUMTIxMV9SRUdfUFdNX0FVVE9fVEVNUChhcCkJKDB4NTUgLSAoYXApKQorI2RlZmluZSBWVDEyMTFfUkVHX1BXTV9BVVRPX1BXTShpeCwgYXApCSgweDU4ICsgMiAqIChpeCkgLSAoYXApKQorCisvKiBNaXNjZWxsYW5lb3VzIHJlZ2lzdGVycyAqLworI2RlZmluZSBWVDEyMTFfUkVHX0NPTkZJRwkJMHg0MAorI2RlZmluZSBWVDEyMTFfUkVHX0FMQVJNMQkJMHg0MQorI2RlZmluZSBWVDEyMTFfUkVHX0FMQVJNMgkJMHg0MgorI2RlZmluZSBWVDEyMTFfUkVHX1ZJRAkJCTB4NDUKKyNkZWZpbmUgVlQxMjExX1JFR19VQ0hfQ09ORklHCQkweDRhCisjZGVmaW5lIFZUMTIxMV9SRUdfVEVNUDFfQ09ORklHCQkweDRiCisjZGVmaW5lIFZUMTIxMV9SRUdfVEVNUDJfQ09ORklHCQkweDRjCisKKy8qIEluLCB0ZW1wICYgZmFuIGFsYXJtIGJpdHMgKi8KK3N0YXRpYyBjb25zdCB1OCBiaXRhbGFybWluW10JPSB7MTEsIDAsIDEsIDMsIDgsIDIsIDl9Oworc3RhdGljIGNvbnN0IHU4IGJpdGFsYXJtdGVtcFtdCT0gezQsIDE1LCAxMSwgMCwgMSwgMywgOH07CitzdGF0aWMgY29uc3QgdTggYml0YWxhcm1mYW5bXQk9IHs2LCA3fTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBEYXRhIHN0cnVjdHVyZXMgYW5kIG1hbmlwdWxhdGlvbiB0aGVyZW9mCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RydWN0IHZ0MTIxMV9kYXRhIHsKKwl1bnNpZ25lZCBzaG9ydCBhZGRyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OworCisJc3RydWN0IG11dGV4IHVwZGF0ZV9sb2NrOworCWNoYXIgdmFsaWQ7CQkJLyogIT0wIGlmIGZvbGxvd2luZyBmaWVsZHMgYXJlIHZhbGlkICovCisJdW5zaWduZWQgbG9uZyBsYXN0X3VwZGF0ZWQ7CS8qIEluIGppZmZpZXMgKi8KKworCS8qIFJlZ2lzdGVyIHZhbHVlcyAqLworCXU4ICBpbls2XTsKKwl1OCAgaW5fbWF4WzZdOworCXU4ICBpbl9taW5bNl07CisJdTggIHRlbXBbN107CisJdTggIHRlbXBfbWF4WzddOworCXU4ICB0ZW1wX2h5c3RbN107CisJdTggIGZhblsyXTsKKwl1OCAgZmFuX21pblsyXTsKKwl1OCAgZmFuX2RpdlsyXTsKKwl1OCAgZmFuX2N0bDsKKwl1OCAgcHdtWzJdOworCXU4ICBwd21fY3RsWzJdOworCXU4ICBwd21fY2xrOworCXU4ICBwd21fYXV0b190ZW1wWzRdOworCXU4ICBwd21fYXV0b19wd21bMl1bNF07CisJdTggIHZpZDsJCS8qIFJlYWQgb25jZSBhdCBpbml0IHRpbWUgKi8KKwl1OCAgdnJtOworCXU4ICB1Y2hfY29uZmlnOwkJLyogUmVhZCBvbmNlIGF0IGluaXQgdGltZSAqLworCXUxNiBhbGFybXM7Cit9OworCisvKiBpeCA9IFswLTVdICovCisjZGVmaW5lIElTVk9MVChpeCwgdWNoX2NvbmZpZykJKChpeCkgPiA0ID8gMSA6IFwKKwkJCQkgISgoKHVjaF9jb25maWcpID4+ICgoaXgpICsgMikpICYgMSkpCisKKy8qIGl4ID0gWzAtNl0gKi8KKyNkZWZpbmUgSVNURU1QKGl4LCB1Y2hfY29uZmlnKQkoKGl4KSA8IDIgPyAxIDogXAorCQkJCSAoKHVjaF9jb25maWcpID4+IChpeCkpICYgMSkKKworLyogaW41IChpeCA9IDUpIGlzIHNwZWNpYWwuIEl0J3MgdGhlIGludGVybmFsIDMuM1Ygc28gaXQncyBzY2FsZWQgaW4gdGhlCisgICBkcml2ZXIgYWNjb3JkaW5nIHRvIHRoZSBWVDEyMTEgQklPUyBwb3J0aW5nIGd1aWRlICovCisjZGVmaW5lIElOX0ZST01fUkVHKGl4LCByZWcpCSgocmVnKSA8IDMgPyAwIDogKGl4KSA9PSA1ID8gXAorCQkJCSAoKChyZWcpIC0gMykgKiAxNTg4MiArIDQ3OSkgLyA5NTggOiBcCisJCQkJICgoKHJlZykgLSAzKSAqIDEwMDAwICsgNDc5KSAvIDk1OCkKKyNkZWZpbmUgSU5fVE9fUkVHKGl4LCB2YWwpCShTRU5TT1JTX0xJTUlUKChpeCkgPT0gNSA/IFwKKwkJCQkgKCh2YWwpICogOTU4ICsgNzk0MSkgLyAxNTg4MiArIDMgOiBcCisJCQkJICgodmFsKSAqIDk1OCArIDUwMDApIC8gMTAwMDAgKyAzLCAwLCAyNTUpKQorCisvKiB0ZW1wMSAoaXggPSAwKSBpcyBhbiBpbnRlbCB0aGVybWFsIGRpb2RlIHdoaWNoIGlzIHNjYWxlZCBpbiB1c2VyIHNwYWNlLgorICAgdGVtcDIgKGl4ID0gMSkgaXMgdGhlIGludGVybmFsIHRlbXAgZGlvZGUgc28gaXQncyBzY2FsZWQgaW4gdGhlIGRyaXZlcgorICAgYWNjb3JkaW5nIHRvIHNvbWUgbWVhc3VyZW1lbnRzIHRoYXQgSSB0b29rIG9uIGFuIEVQSUEgTTEwMDAwLgorICAgdGVtcDMtNyBhcmUgdGhlcm1pc3RvciBiYXNlZCBzbyB0aGUgZHJpdmVyIHJldHVybnMgdGhlIHZvbHRhZ2UgbWVhc3VyZWQgYXQKKyAgIHRoZSBwaW4gKHJhbmdlIDBWIC0gMi4yVikuICovCisjZGVmaW5lIFRFTVBfRlJPTV9SRUcoaXgsIHJlZykJKChpeCkgPT0gMCA/IChyZWcpICogMTAwMCA6IFwKKwkJCQkgKGl4KSA9PSAxID8gKHJlZykgPCA1MSA/IDAgOiBcCisJCQkJICgocmVnKSAtIDUxKSAqIDEwMDAgOiBcCisJCQkJICgoMjUzIC0gKHJlZykpICogMjIwMCArIDEwNSkgLyAyMTApCisjZGVmaW5lIFRFTVBfVE9fUkVHKGl4LCB2YWwpCVNFTlNPUlNfTElNSVQoIFwKKwkJCQkgKChpeCkgPT0gMCA/ICgodmFsKSArIDUwMCkgLyAxMDAwIDogXAorCQkJCSAgKGl4KSA9PSAxID8gKCh2YWwpICsgNTAwKSAvIDEwMDAgKyA1MSA6IFwKKwkJCQkgIDI1MyAtICgodmFsKSAqIDIxMCArIDExMDApIC8gMjIwMCksIDAsIDI1NSkKKworI2RlZmluZSBESVZfRlJPTV9SRUcocmVnKQkoMSA8PCAocmVnKSkKKworI2RlZmluZSBSUE1fRlJPTV9SRUcocmVnLCBkaXYpCSgoKHJlZykgPT0gMCkgfHwgKChyZWcpID09IDI1NSkgPyAwIDogXAorCQkJCSAxMzEwNzIwIC8gKHJlZykgLyBESVZfRlJPTV9SRUcoZGl2KSkKKyNkZWZpbmUgUlBNX1RPX1JFRyh2YWwsIGRpdikJKCh2YWwpID09IDAgPyAyNTUgOiBcCisJCQkJIFNFTlNPUlNfTElNSVQoKDEzMTA3MjAgLyAodmFsKSAvIFwKKwkJCQkgRElWX0ZST01fUkVHKGRpdikpLCAxLCAyNTQpKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFN1cGVyLUkvTyBjb25zdGFudHMgYW5kIGZ1bmN0aW9ucworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENvbmZpZ3VyYXRpb24gJiBkYXRhIGluZGV4IHBvcnQgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNJT19SRUdfQ0lQCQkweDJlCisjZGVmaW5lIFNJT19SRUdfRElQCQkweDJmCisKKy8qIENvbmZpZ3VyYXRpb24gcmVnaXN0ZXJzICovCisjZGVmaW5lIFNJT19WVDEyMTFfTEROCQkweDA3CS8qIGxvZ2ljYWwgZGV2aWNlIG51bWJlciAqLworI2RlZmluZSBTSU9fVlQxMjExX0RFVklECTB4MjAJLyogZGV2aWNlIElEICovCisjZGVmaW5lIFNJT19WVDEyMTFfREVWUkVWCTB4MjEJLyogZGV2aWNlIHJldmlzaW9uICovCisjZGVmaW5lIFNJT19WVDEyMTFfQUNUSVZFCTB4MzAJLyogSFcgbW9uaXRvciBhY3RpdmUgKi8KKyNkZWZpbmUgU0lPX1ZUMTIxMV9CQUREUgkweDYwCS8qIGJhc2UgSS9PIGFkZHJlc3MgKi8KKyNkZWZpbmUgU0lPX1ZUMTIxMV9JRAkJMHgzYwkvKiBWVDEyMTEgZGV2aWNlIElEICovCisKKy8qIFZUMTIxMSBsb2dpY2FsIGRldmljZSBudW1iZXJzICovCisjZGVmaW5lIFNJT19WVDEyMTFfTEROX0hXTU9OCTB4MGIJLyogSFcgbW9uaXRvciAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19vdXRiKGludCByZWcsIGludCB2YWwpCit7CisJb3V0YihyZWcsIFNJT19SRUdfQ0lQKTsKKwlvdXRiKHZhbCwgU0lPX1JFR19ESVApOworfQorCitzdGF0aWMgaW5saW5lIGludCBzdXBlcmlvX2luYihpbnQgcmVnKQoreworCW91dGIocmVnLCBTSU9fUkVHX0NJUCk7CisJcmV0dXJuIGluYihTSU9fUkVHX0RJUCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcmlvX3NlbGVjdChpbnQgbGRuKQoreworCW91dGIoU0lPX1ZUMTIxMV9MRE4sIFNJT19SRUdfQ0lQKTsKKwlvdXRiKGxkbiwgU0lPX1JFR19ESVApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19lbnRlcih2b2lkKQoreworCW91dGIoMHg4NywgU0lPX1JFR19DSVApOworCW91dGIoMHg4NywgU0lPX1JFR19DSVApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJpb19leGl0KHZvaWQpCit7CisJb3V0YigweGFhLCBTSU9fUkVHX0NJUCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGV2aWNlIEkvTyBhY2Nlc3MKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW5saW5lIHU4IHZ0MTIxMV9yZWFkOChzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEsIHU4IHJlZykKK3sKKwlyZXR1cm4gaW5iKGRhdGEtPmFkZHIgKyByZWcpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdnQxMjExX3dyaXRlOChzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEsIHU4IHJlZywgdTggdmFsKQoreworCW91dGIodmFsLCBkYXRhLT5hZGRyICsgcmVnKTsKK30KKworc3RhdGljIHN0cnVjdCB2dDEyMTFfZGF0YSAqdnQxMjExX3VwZGF0ZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCWludCBpeCwgdmFsOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogcmVnaXN0ZXJzIGNhY2hlIGlzIHJlZnJlc2hlZCBhZnRlciAxIHNlY29uZCAqLworCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIGRhdGEtPmxhc3RfdXBkYXRlZCArIEhaKSB8fCAhZGF0YS0+dmFsaWQpIHsKKwkJLyogcmVhZCBWSUQgKi8KKwkJZGF0YS0+dmlkID0gdnQxMjExX3JlYWQ4KGRhdGEsIFZUMTIxMV9SRUdfVklEKSAmIDB4MWY7CisKKwkJLyogdm9sdGFnZSAoaW4pIHJlZ2lzdGVycyAqLworCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPmluKTsgaXgrKykgeworCQkJaWYgKElTVk9MVChpeCwgZGF0YS0+dWNoX2NvbmZpZykpIHsKKwkJCQlkYXRhLT5pbltpeF0gPSB2dDEyMTFfcmVhZDgoZGF0YSwKKwkJCQkJCVZUMTIxMV9SRUdfSU4oaXgpKTsKKwkJCQlkYXRhLT5pbl9taW5baXhdID0gdnQxMjExX3JlYWQ4KGRhdGEsCisJCQkJCQlWVDEyMTFfUkVHX0lOX01JTihpeCkpOworCQkJCWRhdGEtPmluX21heFtpeF0gPSB2dDEyMTFfcmVhZDgoZGF0YSwKKwkJCQkJCVZUMTIxMV9SRUdfSU5fTUFYKGl4KSk7CisJCQl9CisJCX0KKworCQkvKiB0ZW1wIHJlZ2lzdGVycyAqLworCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXApOyBpeCsrKSB7CisJCQlpZiAoSVNURU1QKGl4LCBkYXRhLT51Y2hfY29uZmlnKSkgeworCQkJCWRhdGEtPnRlbXBbaXhdID0gdnQxMjExX3JlYWQ4KGRhdGEsCisJCQkJCQlyZWd0ZW1wW2l4XSk7CisJCQkJZGF0YS0+dGVtcF9tYXhbaXhdID0gdnQxMjExX3JlYWQ4KGRhdGEsCisJCQkJCQlyZWd0ZW1wbWF4W2l4XSk7CisJCQkJZGF0YS0+dGVtcF9oeXN0W2l4XSA9IHZ0MTIxMV9yZWFkOChkYXRhLAorCQkJCQkJcmVndGVtcGh5c3RbaXhdKTsKKwkJCX0KKwkJfQorCisJCS8qIGZhbiAmIHB3bSByZWdpc3RlcnMgKi8KKwkJZm9yIChpeCA9IDA7IGl4IDwgQVJSQVlfU0laRShkYXRhLT5mYW4pOyBpeCsrKSB7CisJCQlkYXRhLT5mYW5baXhdID0gdnQxMjExX3JlYWQ4KGRhdGEsCisJCQkJCQlWVDEyMTFfUkVHX0ZBTihpeCkpOworCQkJZGF0YS0+ZmFuX21pbltpeF0gPSB2dDEyMTFfcmVhZDgoZGF0YSwKKwkJCQkJCVZUMTIxMV9SRUdfRkFOX01JTihpeCkpOworCQkJZGF0YS0+cHdtW2l4XSA9IHZ0MTIxMV9yZWFkOChkYXRhLAorCQkJCQkJVlQxMjExX1JFR19QV00oaXgpKTsKKwkJfQorCQl2YWwgPSB2dDEyMTFfcmVhZDgoZGF0YSwgVlQxMjExX1JFR19GQU5fRElWKTsKKwkJZGF0YS0+ZmFuX2RpdlswXSA9ICh2YWwgPj4gNCkgJiAzOworCQlkYXRhLT5mYW5fZGl2WzFdID0gKHZhbCA+PiA2KSAmIDM7CisJCWRhdGEtPmZhbl9jdGwgPSB2YWwgJiAweGY7CisKKwkJdmFsID0gdnQxMjExX3JlYWQ4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NUTCk7CisJCWRhdGEtPnB3bV9jdGxbMF0gPSB2YWwgJiAweGY7CisJCWRhdGEtPnB3bV9jdGxbMV0gPSAodmFsID4+IDQpICYgMHhmOworCisJCWRhdGEtPnB3bV9jbGsgPSB2dDEyMTFfcmVhZDgoZGF0YSwgVlQxMjExX1JFR19QV01fQ0xLKTsKKworCQkvKiBwd20gJiB0ZW1wIGF1dG8gcG9pbnQgcmVnaXN0ZXJzICovCisJCWRhdGEtPnB3bV9hdXRvX3B3bVswXVsxXSA9IHZ0MTIxMV9yZWFkOChkYXRhLAorCQkJCQkJVlQxMjExX1JFR19QV01fQVVUT19QV00oMCwgMSkpOworCQlkYXRhLT5wd21fYXV0b19wd21bMF1bMl0gPSB2dDEyMTFfcmVhZDgoZGF0YSwKKwkJCQkJCVZUMTIxMV9SRUdfUFdNX0FVVE9fUFdNKDAsIDIpKTsKKwkJZGF0YS0+cHdtX2F1dG9fcHdtWzFdWzFdID0gdnQxMjExX3JlYWQ4KGRhdGEsCisJCQkJCQlWVDEyMTFfUkVHX1BXTV9BVVRPX1BXTSgxLCAxKSk7CisJCWRhdGEtPnB3bV9hdXRvX3B3bVsxXVsyXSA9IHZ0MTIxMV9yZWFkOChkYXRhLAorCQkJCQkJVlQxMjExX1JFR19QV01fQVVUT19QV00oMSwgMikpOworCQlmb3IgKGl4ID0gMDsgaXggPCBBUlJBWV9TSVpFKGRhdGEtPnB3bV9hdXRvX3RlbXApOyBpeCsrKSB7CisJCQlkYXRhLT5wd21fYXV0b190ZW1wW2l4XSA9IHZ0MTIxMV9yZWFkOChkYXRhLAorCQkJCQkJVlQxMjExX1JFR19QV01fQVVUT19URU1QKGl4KSk7CisJCX0KKworCQkvKiBhbGFybSByZWdpc3RlcnMgKi8KKwkJZGF0YS0+YWxhcm1zID0gKHZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX0FMQVJNMikgPDwgOCkgfAorCQkJCXZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX0FMQVJNMSk7CisKKwkJZGF0YS0+bGFzdF91cGRhdGVkID0gamlmZmllczsKKwkJZGF0YS0+dmFsaWQgPSAxOworCX0KKworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGRhdGE7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVm9sdGFnZSBzeXNmcyBpbnRlcmZhY2VzCisgKiBpeCA9IFswLTVdCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBTSE9XX0lOX0lOUFVUCTAKKyNkZWZpbmUgU0hPV19TRVRfSU5fTUlOCTEKKyNkZWZpbmUgU0hPV19TRVRfSU5fTUFYCTIKKyNkZWZpbmUgU0hPV19JTl9BTEFSTQkzCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSB2dDEyMTFfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWludCByZXM7CisKKwlzd2l0Y2ggKGZuKSB7CisJY2FzZSBTSE9XX0lOX0lOUFVUOgorCQlyZXMgPSBJTl9GUk9NX1JFRyhpeCwgZGF0YS0+aW5baXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9JTl9NSU46CisJCXJlcyA9IElOX0ZST01fUkVHKGl4LCBkYXRhLT5pbl9taW5baXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9JTl9NQVg6CisJCXJlcyA9IElOX0ZST01fUkVHKGl4LCBkYXRhLT5pbl9tYXhbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX0lOX0FMQVJNOgorCQlyZXMgPSAoZGF0YS0+YWxhcm1zID4+IGJpdGFsYXJtaW5baXhdKSAmIDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJlcyA9IDA7CisJCWRldl9kYmcoZGV2LCAiVW5rbm93biBhdHRyIGZldGNoICglZClcbiIsIGZuKTsKKwl9CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgcmVzKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2V0X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlzd2l0Y2ggKGZuKSB7CisJY2FzZSBTSE9XX1NFVF9JTl9NSU46CisJCWRhdGEtPmluX21pbltpeF0gPSBJTl9UT19SRUcoaXgsIHZhbCk7CisJCXZ0MTIxMV93cml0ZTgoZGF0YSwgVlQxMjExX1JFR19JTl9NSU4oaXgpLCBkYXRhLT5pbl9taW5baXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9JTl9NQVg6CisJCWRhdGEtPmluX21heFtpeF0gPSBJTl9UT19SRUcoaXgsIHZhbCk7CisJCXZ0MTIxMV93cml0ZTgoZGF0YSwgVlQxMjExX1JFR19JTl9NQVgoaXgpLCBkYXRhLT5pbl9tYXhbaXhdKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJVbmtub3duIGF0dHIgZmV0Y2ggKCVkKVxuIiwgZm4pOworCX0KKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBUZW1wZXJhdHVyZSBzeXNmcyBpbnRlcmZhY2VzCisgKiBpeCA9IFswLTZdCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBTSE9XX1RFTVBfSU5QVVQJCTAKKyNkZWZpbmUgU0hPV19TRVRfVEVNUF9NQVgJMQorI2RlZmluZSBTSE9XX1NFVF9URU1QX01BWF9IWVNUCTIKKyNkZWZpbmUgU0hPV19URU1QX0FMQVJNCQkzCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSB2dDEyMTFfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWludCByZXM7CisKKwlzd2l0Y2ggKGZuKSB7CisJY2FzZSBTSE9XX1RFTVBfSU5QVVQ6CisJCXJlcyA9IFRFTVBfRlJPTV9SRUcoaXgsIGRhdGEtPnRlbXBbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9URU1QX01BWDoKKwkJcmVzID0gVEVNUF9GUk9NX1JFRyhpeCwgZGF0YS0+dGVtcF9tYXhbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9URU1QX01BWF9IWVNUOgorCQlyZXMgPSBURU1QX0ZST01fUkVHKGl4LCBkYXRhLT50ZW1wX2h5c3RbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1RFTVBfQUxBUk06CisJCXJlcyA9IChkYXRhLT5hbGFybXMgPj4gYml0YWxhcm10ZW1wW2l4XSkgJiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAwOworCQlkZXZfZGJnKGRldiwgIlVua25vd24gYXR0ciBmZXRjaCAoJWQpXG4iLCBmbik7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHJfMiA9CisJCQkJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKKwlpbnQgZm4gPSBzZW5zb3JfYXR0cl8yLT5ucjsKKwlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJc3dpdGNoIChmbikgeworCWNhc2UgU0hPV19TRVRfVEVNUF9NQVg6CisJCWRhdGEtPnRlbXBfbWF4W2l4XSA9IFRFTVBfVE9fUkVHKGl4LCB2YWwpOworCQl2dDEyMTFfd3JpdGU4KGRhdGEsIHJlZ3RlbXBtYXhbaXhdLAorCQkJICAgICAgZGF0YS0+dGVtcF9tYXhbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9URU1QX01BWF9IWVNUOgorCQlkYXRhLT50ZW1wX2h5c3RbaXhdID0gVEVNUF9UT19SRUcoaXgsIHZhbCk7CisJCXZ0MTIxMV93cml0ZTgoZGF0YSwgcmVndGVtcGh5c3RbaXhdLAorCQkJICAgICAgZGF0YS0+dGVtcF9oeXN0W2l4XSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9kYmcoZGV2LCAiVW5rbm93biBhdHRyIGZldGNoICglZClcbiIsIGZuKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRmFuIHN5c2ZzIGludGVyZmFjZXMKKyAqIGl4ID0gWzAtMV0KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIFNIT1dfRkFOX0lOUFVUCQkwCisjZGVmaW5lIFNIT1dfU0VUX0ZBTl9NSU4JMQorI2RlZmluZSBTSE9XX1NFVF9GQU5fRElWCTIKKyNkZWZpbmUgU0hPV19GQU5fQUxBUk0JCTMKKworc3RhdGljIHNzaXplX3Qgc2hvd19mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSB2dDEyMTFfdXBkYXRlX2RldmljZShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWludCByZXM7CisKKwlzd2l0Y2ggKGZuKSB7CisJY2FzZSBTSE9XX0ZBTl9JTlBVVDoKKwkJcmVzID0gUlBNX0ZST01fUkVHKGRhdGEtPmZhbltpeF0sIGRhdGEtPmZhbl9kaXZbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9GQU5fTUlOOgorCQlyZXMgPSBSUE1fRlJPTV9SRUcoZGF0YS0+ZmFuX21pbltpeF0sIGRhdGEtPmZhbl9kaXZbaXhdKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9GQU5fRElWOgorCQlyZXMgPSBESVZfRlJPTV9SRUcoZGF0YS0+ZmFuX2RpdltpeF0pOworCQlicmVhazsKKwljYXNlIFNIT1dfRkFOX0FMQVJNOgorCQlyZXMgPSAoZGF0YS0+YWxhcm1zID4+IGJpdGFsYXJtZmFuW2l4XSkgJiAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAwOworCQlkZXZfZGJnKGRldiwgIlVua25vd24gYXR0ciBmZXRjaCAoJWQpXG4iLCBmbik7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9mYW4oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpbnQgcmVnOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogc3luYyB0aGUgZGF0YSBjYWNoZSAqLworCXJlZyA9IHZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX0ZBTl9ESVYpOworCWRhdGEtPmZhbl9kaXZbMF0gPSAocmVnID4+IDQpICYgMzsKKwlkYXRhLT5mYW5fZGl2WzFdID0gKHJlZyA+PiA2KSAmIDM7CisJZGF0YS0+ZmFuX2N0bCA9IHJlZyAmIDB4ZjsKKworCXN3aXRjaCAoZm4pIHsKKwljYXNlIFNIT1dfU0VUX0ZBTl9NSU46CisJCWRhdGEtPmZhbl9taW5baXhdID0gUlBNX1RPX1JFRyh2YWwsIGRhdGEtPmZhbl9kaXZbaXhdKTsKKwkJdnQxMjExX3dyaXRlOChkYXRhLCBWVDEyMTFfUkVHX0ZBTl9NSU4oaXgpLAorCQkJICAgICAgZGF0YS0+ZmFuX21pbltpeF0pOworCQlicmVhazsKKwljYXNlIFNIT1dfU0VUX0ZBTl9ESVY6CisJCXN3aXRjaCAodmFsKSB7CisJCQljYXNlIDE6IGRhdGEtPmZhbl9kaXZbaXhdID0gMDsgYnJlYWs7CisJCQljYXNlIDI6IGRhdGEtPmZhbl9kaXZbaXhdID0gMTsgYnJlYWs7CisJCQljYXNlIDQ6IGRhdGEtPmZhbl9kaXZbaXhdID0gMjsgYnJlYWs7CisJCQljYXNlIDg6IGRhdGEtPmZhbl9kaXZbaXhdID0gMzsgYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWNvdW50ID0gLUVJTlZBTDsKKwkJCQlkZXZfd2FybihkZXYsICJmYW4gZGl2IHZhbHVlICVsZCBub3QgIgorCQkJCQkgInN1cHBvcnRlZC4gQ2hvb3NlIG9uZSBvZiAxLCAyLCAiCisJCQkJCSAiNCwgb3IgOC5cbiIsIHZhbCk7CisJCQkJZ290byBFWElUOworCQl9CisJCXZ0MTIxMV93cml0ZTgoZGF0YSwgVlQxMjExX1JFR19GQU5fRElWLAorCQkJICAgICAgKChkYXRhLT5mYW5fZGl2WzFdIDw8IDYpIHwKKwkJCSAgICAgICAoZGF0YS0+ZmFuX2RpdlswXSA8PCA0KSB8CisJCQkJZGF0YS0+ZmFuX2N0bCkpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkZXZfZGJnKGRldiwgIlVua25vd24gYXR0ciBmZXRjaCAoJWQpXG4iLCBmbik7CisJfQorCitFWElUOgorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBQV00gc3lzZnMgaW50ZXJmYWNlcworICogaXggPSBbMC0xXQorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgU0hPV19QV00JCQkwCisjZGVmaW5lIFNIT1dfU0VUX1BXTV9FTkFCTEUJCTEKKyNkZWZpbmUgU0hPV19TRVRfUFdNX0ZSRVEJCTIKKyNkZWZpbmUgU0hPV19TRVRfUFdNX0FVVE9fQ0hBTk5FTFNfVEVNUAkzCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHZ0MTIxMV9kYXRhICpkYXRhID0gdnQxMjExX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHJfMiA9CisJCQkJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKKwlpbnQgZm4gPSBzZW5zb3JfYXR0cl8yLT5ucjsKKwlpbnQgcmVzOworCisJc3dpdGNoIChmbikgeworCWNhc2UgU0hPV19QV006CisJCXJlcyA9IGRhdGEtPnB3bVtpeF07CisJCWJyZWFrOworCWNhc2UgU0hPV19TRVRfUFdNX0VOQUJMRToKKwkJcmVzID0gKChkYXRhLT5wd21fY3RsW2l4XSA+PiAzKSAmIDEpID8gMiA6IDA7CisJCWJyZWFrOworCWNhc2UgU0hPV19TRVRfUFdNX0ZSRVE6CisJCXJlcyA9IDkwMDAwID4+IChkYXRhLT5wd21fY2xrICYgNyk7CisJCWJyZWFrOworCWNhc2UgU0hPV19TRVRfUFdNX0FVVE9fQ0hBTk5FTFNfVEVNUDoKKwkJcmVzID0gKGRhdGEtPnB3bV9jdGxbaXhdICYgNykgKyAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXMgPSAwOworCQlkZXZfZGJnKGRldiwgIlVua25vd24gYXR0ciBmZXRjaCAoJWQpXG4iLCBmbik7CisJfQorCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHJlcyk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd20oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBmbiA9IHNlbnNvcl9hdHRyXzItPm5yOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpbnQgdG1wLCByZWc7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlzd2l0Y2ggKGZuKSB7CisJY2FzZSBTSE9XX1NFVF9QV01fRU5BQkxFOgorCQkvKiBzeW5jIHRoZSBkYXRhIGNhY2hlICovCisJCXJlZyA9IHZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX0ZBTl9ESVYpOworCQlkYXRhLT5mYW5fZGl2WzBdID0gKHJlZyA+PiA0KSAmIDM7CisJCWRhdGEtPmZhbl9kaXZbMV0gPSAocmVnID4+IDYpICYgMzsKKwkJZGF0YS0+ZmFuX2N0bCA9IHJlZyAmIDB4ZjsKKwkJcmVnID0gdnQxMjExX3JlYWQ4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NUTCk7CisJCWRhdGEtPnB3bV9jdGxbMF0gPSByZWcgJiAweGY7CisJCWRhdGEtPnB3bV9jdGxbMV0gPSAocmVnID4+IDQpICYgMHhmOworCQlzd2l0Y2ggKHZhbCkgeworCQljYXNlIDA6CisJCQlkYXRhLT5wd21fY3RsW2l4XSAmPSA3OworCQkJLyogZGlzYWJsZSBTbWFydEd1YXJkaWFuIGlmIGJvdGggUFdNIG91dHB1dHMgYXJlCisJCQkgKiBkaXNhYmxlZCAqLworCQkJaWYgKChkYXRhLT5wd21fY3RsW2l4IF4gMV0gJiAxKSA9PSAwKSB7CisJCQkJZGF0YS0+ZmFuX2N0bCAmPSAweGU7CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZGF0YS0+cHdtX2N0bFtpeF0gfD0gODsKKwkJCWRhdGEtPmZhbl9jdGwgfD0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJY291bnQgPSAtRUlOVkFMOworCQkJZGV2X3dhcm4oZGV2LCAicHdtIG1vZGUgJWxkIG5vdCBzdXBwb3J0ZWQuICIKKwkJCQkgIkNob29zZSBvbmUgb2YgMCBvciAyLlxuIiwgdmFsKTsKKwkJCWdvdG8gRVhJVDsKKwkJfQorCQl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NUTCwKKwkJCSAgICAgICgoZGF0YS0+cHdtX2N0bFsxXSA8PCA0KSB8CisJCQkJZGF0YS0+cHdtX2N0bFswXSkpOworCQl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfRkFOX0RJViwKKwkJCSAgICAgICgoZGF0YS0+ZmFuX2RpdlsxXSA8PCA2KSB8CisJCQkgICAgICAgKGRhdGEtPmZhbl9kaXZbMF0gPDwgNCkgfAorCQkJCWRhdGEtPmZhbl9jdGwpKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9QV01fRlJFUToKKwkJdmFsID0gMTM1MDAwIC8gU0VOU09SU19MSU1JVCh2YWwsIDEzNTAwMCA+PiA3LCAxMzUwMDApOworCQkvKiBjYWxjdWxhdGUgdG1wID0gbG9nMih2YWwpICovCisJCXRtcCA9IDA7CisJCWZvciAodmFsID4+PSAxOyB2YWwgPiAwOyB2YWwgPj49IDEpIHsKKwkJCXRtcCsrOworCQl9CisJCS8qIHN5bmMgdGhlIGRhdGEgY2FjaGUgKi8KKwkJcmVnID0gdnQxMjExX3JlYWQ4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NMSyk7CisJCWRhdGEtPnB3bV9jbGsgPSAocmVnICYgMHhmOCkgfCB0bXA7CisJCXZ0MTIxMV93cml0ZTgoZGF0YSwgVlQxMjExX1JFR19QV01fQ0xLLCBkYXRhLT5wd21fY2xrKTsKKwkJYnJlYWs7CisJY2FzZSBTSE9XX1NFVF9QV01fQVVUT19DSEFOTkVMU19URU1QOgorCQlpZiAoKHZhbCA8IDEpIHx8ICh2YWwgPiA3KSkgeworCQkJY291bnQgPSAtRUlOVkFMOworCQkJZGV2X3dhcm4oZGV2LCAidGVtcCBjaGFubmVsICVsZCBub3Qgc3VwcG9ydGVkLiAiCisJCQkJICJDaG9vc2UgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDcuXG4iLCB2YWwpOworCQkJZ290byBFWElUOworCQl9CisJCWlmICghSVNURU1QKHZhbCAtIDEsIGRhdGEtPnVjaF9jb25maWcpKSB7CisJCQljb3VudCA9IC1FSU5WQUw7CisJCQlkZXZfd2FybihkZXYsICJ0ZW1wIGNoYW5uZWwgJWxkIGlzIG5vdCBhdmFpbGFibGUuXG4iLAorCQkJCSB2YWwpOworCQkJZ290byBFWElUOworCQl9CisJCS8qIHN5bmMgdGhlIGRhdGEgY2FjaGUgKi8KKwkJcmVnID0gdnQxMjExX3JlYWQ4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NUTCk7CisJCWRhdGEtPnB3bV9jdGxbMF0gPSByZWcgJiAweGY7CisJCWRhdGEtPnB3bV9jdGxbMV0gPSAocmVnID4+IDQpICYgMHhmOworCQlkYXRhLT5wd21fY3RsW2l4XSA9IChkYXRhLT5wd21fY3RsW2l4XSAmIDgpIHwgKHZhbCAtIDEpOworCQl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0NUTCwKKwkJCSAgICAgICgoZGF0YS0+cHdtX2N0bFsxXSA8PCA0KSB8IGRhdGEtPnB3bV9jdGxbMF0pKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZGV2X2RiZyhkZXYsICJVbmtub3duIGF0dHIgZmV0Y2ggKCVkKVxuIiwgZm4pOworCX0KKworRVhJVDoKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUFdNIGF1dG8gcG9pbnQgZGVmaW5pdGlvbnMKKyAqIGl4ID0gWzAtMV0KKyAqIGFwID0gWzAtM10KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICogcHdtW2l4KzFdX2F1dG9fcG9pbnRbYXArMV1fdGVtcCBtYXBwaW5nIHRhYmxlOgorICogTm90ZSB0aGF0IHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgc2V0IG9mIHRlbXAgYXV0byBwb2ludHMgdGhhdCBjb250cm9scyBib3RoCisgKiBQV00gY29udHJvbGxlcnMuIFdlIHN0aWxsIGNyZWF0ZSAyIHNldHMgb2Ygc3lzZnMgZmlsZXMgdG8gbWFrZSBpdCBsb29rCisgKiBtb3JlIGNvbnNpc3RlbnQgZXZlbiB0aG91Z2ggdGhleSBtYXAgdG8gdGhlIHNhbWUgcmVnaXN0ZXJzLgorICoKKyAqIGl4IGFwIDogZGVzY3JpcHRpb24KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIDAgIDAgIDogcHdtMS8yIG9mZiB0ZW1wZXJhdHVyZSAgICAgICAgKHB3bV9hdXRvX3RlbXBbMF0pCisgKiAwICAxICA6IHB3bTEvMiBsb3cgc3BlZWQgdGVtcGVyYXR1cmUgIChwd21fYXV0b190ZW1wWzFdKQorICogMCAgMiAgOiBwd20xLzIgaGlnaCBzcGVlZCB0ZW1wZXJhdHVyZSAocHdtX2F1dG9fdGVtcFsyXSkKKyAqIDAgIDMgIDogcHdtMS8yIGZ1bGwgc3BlZWQgdGVtcGVyYXR1cmUgKHB3bV9hdXRvX3RlbXBbM10pCisgKiAxICAwICA6IHB3bTEvMiBvZmYgdGVtcGVyYXR1cmUgICAgICAgIChwd21fYXV0b190ZW1wWzBdKQorICogMSAgMSAgOiBwd20xLzIgbG93IHNwZWVkIHRlbXBlcmF0dXJlICAocHdtX2F1dG9fdGVtcFsxXSkKKyAqIDEgIDIgIDogcHdtMS8yIGhpZ2ggc3BlZWQgdGVtcGVyYXR1cmUgKHB3bV9hdXRvX3RlbXBbMl0pCisgKiAxICAzICA6IHB3bTEvMiBmdWxsIHNwZWVkIHRlbXBlcmF0dXJlIChwd21fYXV0b190ZW1wWzNdKQorICovCisKK3N0YXRpYyBzc2l6ZV90IHNob3dfcHdtX2F1dG9fcG9pbnRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJCQljaGFyICpidWYpCit7CisJc3RydWN0IHZ0MTIxMV9kYXRhICpkYXRhID0gdnQxMjExX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHJfMiA9CisJCQkJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKKwlpbnQgYXAgPSBzZW5zb3JfYXR0cl8yLT5ucjsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBURU1QX0ZST01fUkVHKGRhdGEtPnB3bV9jdGxbaXhdICYgNywKKwkJICAgICAgIGRhdGEtPnB3bV9hdXRvX3RlbXBbYXBdKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9wd21fYXV0b19wb2ludF90ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yICpzZW5zb3JfYXR0cl8yID0KKwkJCQkJCXRvX3NlbnNvcl9kZXZfYXR0cl8yKGF0dHIpOworCWludCBpeCA9IHNlbnNvcl9hdHRyXzItPmluZGV4OworCWludCBhcCA9IHNlbnNvcl9hdHRyXzItPm5yOworCWxvbmcgdmFsID0gc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKTsKKwlpbnQgcmVnOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJLyogc3luYyB0aGUgZGF0YSBjYWNoZSAqLworCXJlZyA9IHZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX1BXTV9DVEwpOworCWRhdGEtPnB3bV9jdGxbMF0gPSByZWcgJiAweGY7CisJZGF0YS0+cHdtX2N0bFsxXSA9IChyZWcgPj4gNCkgJiAweGY7CisKKwlkYXRhLT5wd21fYXV0b190ZW1wW2FwXSA9IFRFTVBfVE9fUkVHKGRhdGEtPnB3bV9jdGxbaXhdICYgNywgdmFsKTsKKwl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfUFdNX0FVVE9fVEVNUChhcCksCisJCSAgICAgIGRhdGEtPnB3bV9hdXRvX3RlbXBbYXBdKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHB3bVtpeCsxXV9hdXRvX3BvaW50W2FwKzFdX3B3bSBtYXBwaW5nIHRhYmxlOgorICogTm90ZSB0aGF0IHRoZSBQV00gYXV0byBwb2ludHMgMCAmIDMgYXJlIGhhcmQtd2lyZWQgaW4gdGhlIFZUMTIxMSBhbmQgY2FuJ3QKKyAqIGJlIGNoYW5nZWQuCisgKgorICogaXggYXAgOiBkZXNjcmlwdGlvbgorICogLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMCAgMCAgOiBwd20xIG9mZiAgICAgICAgICAgICAgICAgICAocHdtX2F1dG9fcHdtWzBdWzBdLCBoYXJkLXdpcmVkIHRvIDApCisgKiAwICAxICA6IHB3bTEgbG93IHNwZWVkIGR1dHkgY3ljbGUgIChwd21fYXV0b19wd21bMF1bMV0pCisgKiAwICAyICA6IHB3bTEgaGlnaCBzcGVlZCBkdXR5IGN5Y2xlIChwd21fYXV0b19wd21bMF1bMl0pCisgKiAwICAzICA6IHB3bTEgZnVsbCBzcGVlZCAgICAgICAgICAgIChwd21fYXV0b19wd21bMF1bM10sIGhhcmQtd2lyZWQgdG8gMjU1KQorICogMSAgMCAgOiBwd20yIG9mZiAgICAgICAgICAgICAgICAgICAocHdtX2F1dG9fcHdtWzFdWzBdLCBoYXJkLXdpcmVkIHRvIDApCisgKiAxICAxICA6IHB3bTIgbG93IHNwZWVkIGR1dHkgY3ljbGUgIChwd21fYXV0b19wd21bMV1bMV0pCisgKiAxICAyICA6IHB3bTIgaGlnaCBzcGVlZCBkdXR5IGN5Y2xlIChwd21fYXV0b19wd21bMV1bMl0pCisgKiAxICAzICA6IHB3bTIgZnVsbCBzcGVlZCAgICAgICAgICAgIChwd21fYXV0b19wd21bMV1bM10sIGhhcmQtd2lyZWQgdG8gMjU1KQorKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd19wd21fYXV0b19wb2ludF9wd20oc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICAgY2hhciAqYnVmKQoreworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YSA9IHZ0MTIxMV91cGRhdGVfZGV2aWNlKGRldik7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgKnNlbnNvcl9hdHRyXzIgPQorCQkJCQkJdG9fc2Vuc29yX2Rldl9hdHRyXzIoYXR0cik7CisJaW50IGl4ID0gc2Vuc29yX2F0dHJfMi0+aW5kZXg7CisJaW50IGFwID0gc2Vuc29yX2F0dHJfMi0+bnI7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cHdtX2F1dG9fcHdtW2l4XVthcF0pOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfcHdtX2F1dG9fcG9pbnRfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCQkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiAqc2Vuc29yX2F0dHJfMiA9CisJCQkJCQl0b19zZW5zb3JfZGV2X2F0dHJfMihhdHRyKTsKKwlpbnQgaXggPSBzZW5zb3JfYXR0cl8yLT5pbmRleDsKKwlpbnQgYXAgPSBzZW5zb3JfYXR0cl8yLT5ucjsKKwlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwlpZiAoKHZhbCA8IDApIHx8ICh2YWwgPiAyNTUpKSB7CisJCWRldl9lcnIoZGV2LCAicHdtIHZhbHVlICVsZCBpcyBvdXQgb2YgcmFuZ2UuICIKKwkJCSJDaG9vc2UgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kIDI1NS4iICwgdmFsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bV9hdXRvX3B3bVtpeF1bYXBdID0gdmFsOworCXZ0MTIxMV93cml0ZTgoZGF0YSwgVlQxMjExX1JFR19QV01fQVVUT19QV00oaXgsIGFwKSwKKwkJICAgICAgZGF0YS0+cHdtX2F1dG9fcHdtW2l4XVthcF0pOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJcmV0dXJuIGNvdW50OworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIE1pc2NlbGxhbmVvdXMgc3lzZnMgaW50ZXJmYWNlcyAoVlJNLCBWSUQsIG5hbWUsIGFuZCAobGVnYWN5KSBhbGFybXMpCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHNzaXplX3Qgc2hvd192cm0oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT52cm0pOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfdnJtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCSAgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlsb25nIHZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CisKKwlkYXRhLT52cm0gPSB2YWw7CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfdmlkKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljaGFyICpidWYpCit7CisJc3RydWN0IHZ0MTIxMV9kYXRhICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgdmlkX2Zyb21fcmVnKGRhdGEtPnZpZCwgZGF0YS0+dnJtKSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBkYXRhLT5uYW1lKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19hbGFybXMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEgPSB2dDEyMTFfdXBkYXRlX2RldmljZShkZXYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmFsYXJtcyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRGV2aWNlIGF0dHJpYnV0ZSBzdHJ1Y3RzCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2RlZmluZSBTRU5TT1JfQVRUUl9JTl9JTlBVVChpeCkgXAorCVNFTlNPUl9BVFRSXzIoaW4jI2l4IyNfaW5wdXQsIFNfSVJVR08sIFwKKwkJc2hvd19pbiwgTlVMTCwgU0hPV19JTl9JTlBVVCwgaXgpCisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB2dDEyMTFfc3lzZnNfaW5faW5wdXRbXSA9IHsKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCgwKSwKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCgxKSwKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCgyKSwKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCgzKSwKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCg0KSwKKwlTRU5TT1JfQVRUUl9JTl9JTlBVVCg1KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfSU5fTUlOKGl4KSBcCisJU0VOU09SX0FUVFJfMihpbiMjaXgjI19taW4sIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfaW4sIHNldF9pbiwgU0hPV19TRVRfSU5fTUlOLCBpeCkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHZ0MTIxMV9zeXNmc19pbl9taW5bXSA9IHsKKwlTRU5TT1JfQVRUUl9JTl9NSU4oMCksCisJU0VOU09SX0FUVFJfSU5fTUlOKDEpLAorCVNFTlNPUl9BVFRSX0lOX01JTigyKSwKKwlTRU5TT1JfQVRUUl9JTl9NSU4oMyksCisJU0VOU09SX0FUVFJfSU5fTUlOKDQpLAorCVNFTlNPUl9BVFRSX0lOX01JTig1KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfSU5fTUFYKGl4KSBcCisJU0VOU09SX0FUVFJfMihpbiMjaXgjI19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfaW4sIHNldF9pbiwgU0hPV19TRVRfSU5fTUFYLCBpeCkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHZ0MTIxMV9zeXNmc19pbl9tYXhbXSA9IHsKKwlTRU5TT1JfQVRUUl9JTl9NQVgoMCksCisJU0VOU09SX0FUVFJfSU5fTUFYKDEpLAorCVNFTlNPUl9BVFRSX0lOX01BWCgyKSwKKwlTRU5TT1JfQVRUUl9JTl9NQVgoMyksCisJU0VOU09SX0FUVFJfSU5fTUFYKDQpLAorCVNFTlNPUl9BVFRSX0lOX01BWCg1KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfSU5fQUxBUk0oaXgpIFwKKwlTRU5TT1JfQVRUUl8yKGluIyNpeCMjX2FsYXJtLCBTX0lSVUdPLCBcCisJCXNob3dfaW4sIE5VTEwsIFNIT1dfSU5fQUxBUk0sIGl4KQorCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgdnQxMjExX3N5c2ZzX2luX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFJfSU5fQUxBUk0oMCksCisJU0VOU09SX0FUVFJfSU5fQUxBUk0oMSksCisJU0VOU09SX0FUVFJfSU5fQUxBUk0oMiksCisJU0VOU09SX0FUVFJfSU5fQUxBUk0oMyksCisJU0VOU09SX0FUVFJfSU5fQUxBUk0oNCksCisJU0VOU09SX0FUVFJfSU5fQUxBUk0oNSksCit9OworCisjZGVmaW5lIFNFTlNPUl9BVFRSX1RFTVBfSU5QVVQoaXgpIFwKKwlTRU5TT1JfQVRUUl8yKHRlbXAjI2l4IyNfaW5wdXQsIFNfSVJVR08sIFwKKwkJc2hvd190ZW1wLCBOVUxMLCBTSE9XX1RFTVBfSU5QVVQsIGl4LTEpCisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB2dDEyMTFfc3lzZnNfdGVtcF9pbnB1dFtdID0geworCVNFTlNPUl9BVFRSX1RFTVBfSU5QVVQoMSksCisJU0VOU09SX0FUVFJfVEVNUF9JTlBVVCgyKSwKKwlTRU5TT1JfQVRUUl9URU1QX0lOUFVUKDMpLAorCVNFTlNPUl9BVFRSX1RFTVBfSU5QVVQoNCksCisJU0VOU09SX0FUVFJfVEVNUF9JTlBVVCg1KSwKKwlTRU5TT1JfQVRUUl9URU1QX0lOUFVUKDYpLAorCVNFTlNPUl9BVFRSX1RFTVBfSU5QVVQoNyksCit9OworCisjZGVmaW5lIFNFTlNPUl9BVFRSX1RFTVBfTUFYKGl4KSBcCisJU0VOU09SX0FUVFJfMih0ZW1wIyNpeCMjX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd190ZW1wLCBzZXRfdGVtcCwgU0hPV19TRVRfVEVNUF9NQVgsIGl4LTEpCisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiB2dDEyMTFfc3lzZnNfdGVtcF9tYXhbXSA9IHsKKwlTRU5TT1JfQVRUUl9URU1QX01BWCgxKSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCgyKSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCgzKSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCg0KSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCg1KSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCg2KSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWCg3KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfVEVNUF9NQVhfSFlTVChpeCkgXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaXgjI19tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd190ZW1wLCBzZXRfdGVtcCwgU0hPV19TRVRfVEVNUF9NQVhfSFlTVCwgaXgtMSkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHZ0MTIxMV9zeXNmc190ZW1wX21heF9oeXN0W10gPSB7CisJU0VOU09SX0FUVFJfVEVNUF9NQVhfSFlTVCgxKSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWF9IWVNUKDIpLAorCVNFTlNPUl9BVFRSX1RFTVBfTUFYX0hZU1QoMyksCisJU0VOU09SX0FUVFJfVEVNUF9NQVhfSFlTVCg0KSwKKwlTRU5TT1JfQVRUUl9URU1QX01BWF9IWVNUKDUpLAorCVNFTlNPUl9BVFRSX1RFTVBfTUFYX0hZU1QoNiksCisJU0VOU09SX0FUVFJfVEVNUF9NQVhfSFlTVCg3KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfVEVNUF9BTEFSTShpeCkgXAorCVNFTlNPUl9BVFRSXzIodGVtcCMjaXgjI19hbGFybSwgU19JUlVHTywgXAorCQlzaG93X3RlbXAsIE5VTEwsIFNIT1dfVEVNUF9BTEFSTSwgaXgtMSkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHZ0MTIxMV9zeXNmc190ZW1wX2FsYXJtW10gPSB7CisJU0VOU09SX0FUVFJfVEVNUF9BTEFSTSgxKSwKKwlTRU5TT1JfQVRUUl9URU1QX0FMQVJNKDIpLAorCVNFTlNPUl9BVFRSX1RFTVBfQUxBUk0oMyksCisJU0VOU09SX0FUVFJfVEVNUF9BTEFSTSg0KSwKKwlTRU5TT1JfQVRUUl9URU1QX0FMQVJNKDUpLAorCVNFTlNPUl9BVFRSX1RFTVBfQUxBUk0oNiksCisJU0VOU09SX0FUVFJfVEVNUF9BTEFSTSg3KSwKK307CisKKyNkZWZpbmUgU0VOU09SX0FUVFJfRkFOKGl4KSBcCisJU0VOU09SX0FUVFJfMihmYW4jI2l4IyNfaW5wdXQsIFNfSVJVR08sIFwKKwkJc2hvd19mYW4sIE5VTEwsIFNIT1dfRkFOX0lOUFVULCBpeC0xKSwgXAorCVNFTlNPUl9BVFRSXzIoZmFuIyNpeCMjX21pbiwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19mYW4sIHNldF9mYW4sIFNIT1dfU0VUX0ZBTl9NSU4sIGl4LTEpLCBcCisJU0VOU09SX0FUVFJfMihmYW4jI2l4IyNfZGl2LCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X2Zhbiwgc2V0X2ZhbiwgU0hPV19TRVRfRkFOX0RJViwgaXgtMSksIFwKKwlTRU5TT1JfQVRUUl8yKGZhbiMjaXgjI19hbGFybSwgU19JUlVHTywgXAorCQlzaG93X2ZhbiwgTlVMTCwgU0hPV19GQU5fQUxBUk0sIGl4LTEpCisKKyNkZWZpbmUgU0VOU09SX0FUVFJfUFdNKGl4KSBcCisJU0VOU09SX0FUVFJfMihwd20jI2l4LCBTX0lSVUdPLCBcCisJCXNob3dfcHdtLCBOVUxMLCBTSE9XX1BXTSwgaXgtMSksIFwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaXgjI19lbmFibGUsIFNfSVJVR08gfCBTX0lXVVNSLCBcCisJCXNob3dfcHdtLCBzZXRfcHdtLCBTSE9XX1NFVF9QV01fRU5BQkxFLCBpeC0xKSwgXAorCVNFTlNPUl9BVFRSXzIocHdtIyNpeCMjX2F1dG9fY2hhbm5lbHNfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19wd20sIHNldF9wd20sIFNIT1dfU0VUX1BXTV9BVVRPX0NIQU5ORUxTX1RFTVAsIGl4LTEpCisKKyNkZWZpbmUgU0VOU09SX0FUVFJfUFdNX0ZSRVEoaXgpIFwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaXgjI19mcmVxLCBTX0lSVUdPIHwgU19JV1VTUiwgXAorCQlzaG93X3B3bSwgc2V0X3B3bSwgU0hPV19TRVRfUFdNX0ZSRVEsIGl4LTEpCisKKyNkZWZpbmUgU0VOU09SX0FUVFJfUFdNX0ZSRVFfUk8oaXgpIFwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaXgjI19mcmVxLCBTX0lSVUdPLCBcCisJCXNob3dfcHdtLCBOVUxMLCBTSE9XX1NFVF9QV01fRlJFUSwgaXgtMSkKKworI2RlZmluZSBTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9URU1QKGl4LCBhcCkgXAorCVNFTlNPUl9BVFRSXzIocHdtIyNpeCMjX2F1dG9fcG9pbnQjI2FwIyNfdGVtcCwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19wd21fYXV0b19wb2ludF90ZW1wLCBzZXRfcHdtX2F1dG9fcG9pbnRfdGVtcCwgXAorCQlhcC0xLCBpeC0xKQorCisjZGVmaW5lIFNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1RFTVBfUk8oaXgsIGFwKSBcCisJU0VOU09SX0FUVFJfMihwd20jI2l4IyNfYXV0b19wb2ludCMjYXAjI190ZW1wLCBTX0lSVUdPLCBcCisJCXNob3dfcHdtX2F1dG9fcG9pbnRfdGVtcCwgTlVMTCwgXAorCQlhcC0xLCBpeC0xKQorCisjZGVmaW5lIFNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1BXTShpeCwgYXApIFwKKwlTRU5TT1JfQVRUUl8yKHB3bSMjaXgjI19hdXRvX3BvaW50IyNhcCMjX3B3bSwgU19JUlVHTyB8IFNfSVdVU1IsIFwKKwkJc2hvd19wd21fYXV0b19wb2ludF9wd20sIHNldF9wd21fYXV0b19wb2ludF9wd20sIFwKKwkJYXAtMSwgaXgtMSkKKworI2RlZmluZSBTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9QV01fUk8oaXgsIGFwKSBcCisJU0VOU09SX0FUVFJfMihwd20jI2l4IyNfYXV0b19wb2ludCMjYXAjI19wd20sIFNfSVJVR08sIFwKKwkJc2hvd19wd21fYXV0b19wb2ludF9wd20sIE5VTEwsIFwKKwkJYXAtMSwgaXgtMSkKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHZ0MTIxMV9zeXNmc19mYW5fcHdtW10gPSB7CisJU0VOU09SX0FUVFJfRkFOKDEpLAorCVNFTlNPUl9BVFRSX0ZBTigyKSwKKwlTRU5TT1JfQVRUUl9QV00oMSksCisJU0VOU09SX0FUVFJfUFdNKDIpLAorCVNFTlNPUl9BVFRSX1BXTV9GUkVRKDEpLAorCVNFTlNPUl9BVFRSX1BXTV9GUkVRX1JPKDIpLAorCVNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1RFTVAoMSwgMSksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfVEVNUCgxLCAyKSwKKwlTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9URU1QKDEsIDMpLAorCVNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1RFTVAoMSwgNCksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfVEVNUF9STygyLCAxKSwKKwlTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9URU1QX1JPKDIsIDIpLAorCVNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1RFTVBfUk8oMiwgMyksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfVEVNUF9STygyLCA0KSwKKwlTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9QV01fUk8oMSwgMSksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfUFdNKDEsIDIpLAorCVNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1BXTSgxLCAzKSwKKwlTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9QV01fUk8oMSwgNCksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfUFdNX1JPKDIsIDEpLAorCVNFTlNPUl9BVFRSX1BXTV9BVVRPX1BPSU5UX1BXTSgyLCAyKSwKKwlTRU5TT1JfQVRUUl9QV01fQVVUT19QT0lOVF9QV00oMiwgMyksCisJU0VOU09SX0FUVFJfUFdNX0FVVE9fUE9JTlRfUFdNX1JPKDIsIDQpLAorfTsKKworc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHZ0MTIxMV9zeXNmc19taXNjW10gPSB7CisJX19BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtLCBzZXRfdnJtKSwKKwlfX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkLCBOVUxMKSwKKwlfX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKSwKKwlfX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtcywgTlVMTCksCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIERldmljZSByZWdpc3RyYXRpb24gYW5kIGluaXRpYWxpemF0aW9uCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHZ0MTIxMV9pbml0X2RldmljZShzdHJ1Y3QgdnQxMjExX2RhdGEgKmRhdGEpCit7CisJLyogc2V0IFZSTSAqLworCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKKworCS8qIFJlYWQgKGFuZCBpbml0aWFsaXplKSBVQ0ggY29uZmlnICovCisJZGF0YS0+dWNoX2NvbmZpZyA9IHZ0MTIxMV9yZWFkOChkYXRhLCBWVDEyMTFfUkVHX1VDSF9DT05GSUcpOworCWlmICh1Y2hfY29uZmlnID4gLTEpIHsKKwkJZGF0YS0+dWNoX2NvbmZpZyA9IChkYXRhLT51Y2hfY29uZmlnICYgMHg4MykgfAorCQkJCSAgICh1Y2hfY29uZmlnIDw8IDIpOworCQl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfVUNIX0NPTkZJRywgZGF0YS0+dWNoX2NvbmZpZyk7CisJfQorCisJLyogSW5pdGlhbGl6ZSB0aGUgaW50ZXJydXB0IG1vZGUgKGlmIHJlcXVlc3QgYXQgbW9kdWxlIGxvYWQgdGltZSkuCisJICogVGhlIFZUMTIxMSBpbXBsZW1lbnRzIDMgZGlmZmVyZW50IG1vZGVzIGZvciBjbGVhcmluZyBpbnRlcnJ1cHRzOgorCSAqIDA6IENsZWFyIElOVCB3aGVuIHN0YXR1cyByZWdpc3RlciBpcyByZWFkLiBSZWdlbmVyYXRlIElOVCBhcyBsb25nCisJICogICAgYXMgdGVtcCBzdGF5cyBhYm92ZSBoeXN0ZXJlc2lzIGxpbWl0LgorCSAqIDE6IENsZWFyIElOVCB3aGVuIHN0YXR1cyByZWdpc3RlciBpcyByZWFkLiBET04nVCByZWdlbmVyYXRlIElOVAorCSAqICAgIHVudGlsIHRlbXAgZmFsbHMgYmVsb3cgaHlzdGVyZXNpcyBsaW1pdCBhbmQgZXhjZWVkcyBob3QgbGltaXQKKwkgKiAgICBhZ2Fpbi4KKwkgKiAyOiBDbGVhciBJTlQgd2hlbiB0ZW1wIGZhbGxzIGJlbG93IG1heCBsaW1pdC4KKwkgKgorCSAqIFRoZSBkcml2ZXIgb25seSBhbGxvd3MgdG8gZm9yY2UgbW9kZSAwIHNpbmNlIHRoYXQncyB0aGUgb25seSBvbmUKKwkgKiB0aGF0IG1ha2VzIHNlbnNlIGZvciAnc2Vuc29ycycgKi8KKwlpZiAoaW50X21vZGUgPT0gMCkgeworCQl2dDEyMTFfd3JpdGU4KGRhdGEsIFZUMTIxMV9SRUdfVEVNUDFfQ09ORklHLCAwKTsKKwkJdnQxMjExX3dyaXRlOChkYXRhLCBWVDEyMTFfUkVHX1RFTVAyX0NPTkZJRywgMCk7CisJfQorCisJLyogRmlsbCBpbiBzb21lIGhhcmQgd2lyZWQgdmFsdWVzIGludG8gb3VyIGRhdGEgc3RydWN0ICovCisJZGF0YS0+cHdtX2F1dG9fcHdtWzBdWzNdID0gMjU1OworCWRhdGEtPnB3bV9hdXRvX3B3bVsxXVszXSA9IDI1NTsKK30KKworc3RhdGljIHZvaWQgdnQxMjExX3JlbW92ZV9zeXNmcyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDEyMTFfc3lzZnNfaW5faW5wdXQpOyBpKyspIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwKKwkJCSZ2dDEyMTFfc3lzZnNfaW5faW5wdXRbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc19pbl9taW5baV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc19pbl9tYXhbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc19pbl9hbGFybVtpXS5kZXZfYXR0cik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0MTIxMV9zeXNmc190ZW1wX2lucHV0KTsgaSsrKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsCisJCQkmdnQxMjExX3N5c2ZzX3RlbXBfaW5wdXRbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc190ZW1wX21heFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsCisJCQkmdnQxMjExX3N5c2ZzX3RlbXBfbWF4X2h5c3RbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc190ZW1wX2FsYXJtW2ldLmRldl9hdHRyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnQxMjExX3N5c2ZzX2Zhbl9wd20pOyBpKyspIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwKKwkJCSZ2dDEyMTFfc3lzZnNfZmFuX3B3bVtpXS5kZXZfYXR0cik7CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0MTIxMV9zeXNmc19taXNjKTsgaSsrKSB7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZ2dDEyMTFfc3lzZnNfbWlzY1tpXSk7CisJfQorfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCB2dDEyMTFfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2OworCXN0cnVjdCB2dDEyMTFfZGF0YSAqZGF0YTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwlpbnQgaSwgZXJyOworCisJaWYgKCEoZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB2dDEyMTFfZGF0YSksIEdGUF9LRVJORUwpKSkgeworCQllcnIgPSAtRU5PTUVNOworCQlkZXZfZXJyKGRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlnb3RvIEVYSVQ7CisJfQorCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfSU8sIDApOworCWRhdGEtPmFkZHIgPSByZXMtPnN0YXJ0OworCWRhdGEtPm5hbWUgPSBEUlZOQU1FOworCW11dGV4X2luaXQoJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGRhdGEpOworCisJLyogSW5pdGlhbGl6ZSB0aGUgVlQxMjExIGNoaXAgKi8KKwl2dDEyMTFfaW5pdF9kZXZpY2UoZGF0YSk7CisKKwkvKiBDcmVhdGUgc3lzZnMgaW50ZXJmYWNlIGZpbGVzICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnQxMjExX3N5c2ZzX2luX2lucHV0KTsgaSsrKSB7CisJCWlmIChJU1ZPTFQoaSwgZGF0YS0+dWNoX2NvbmZpZykpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmdnQxMjExX3N5c2ZzX2luX2lucHV0W2ldLmRldl9hdHRyKSkgfHwKKwkJCSAgICAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmdnQxMjExX3N5c2ZzX2luX21pbltpXS5kZXZfYXR0cikpIHx8CisJCQkgICAgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnZ0MTIxMV9zeXNmc19pbl9tYXhbaV0uZGV2X2F0dHIpKSB8fAorCQkJICAgIChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZ2dDEyMTFfc3lzZnNfaW5fYWxhcm1baV0uZGV2X2F0dHIpKSkgeworCQkJCWdvdG8gRVhJVF9ERVZfUkVNT1ZFOworCQkJfQorCQl9CisJfQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0MTIxMV9zeXNmc190ZW1wX2lucHV0KTsgaSsrKSB7CisJCWlmIChJU1RFTVAoaSwgZGF0YS0+dWNoX2NvbmZpZykpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmdnQxMjExX3N5c2ZzX3RlbXBfaW5wdXRbaV0uZGV2X2F0dHIpKSB8fAorCQkJICAgIChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZ2dDEyMTFfc3lzZnNfdGVtcF9tYXhbaV0uZGV2X2F0dHIpKSB8fAorCQkJICAgIChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZ2dDEyMTFfc3lzZnNfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cikpIHx8CisJCQkgICAgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnZ0MTIxMV9zeXNmc190ZW1wX2FsYXJtW2ldLmRldl9hdHRyKSkpIHsKKwkJCQlnb3RvIEVYSVRfREVWX1JFTU9WRTsKKwkJCX0KKwkJfQorCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDEyMTFfc3lzZnNfZmFuX3B3bSk7IGkrKykgeworCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJJnZ0MTIxMV9zeXNmc19mYW5fcHdtW2ldLmRldl9hdHRyKTsKKwkJaWYgKGVycikgeworCQkJZ290byBFWElUX0RFVl9SRU1PVkU7CisJCX0KKwl9CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnQxMjExX3N5c2ZzX21pc2MpOyBpKyspIHsKKwkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJICAgICAgICZ2dDEyMTFfc3lzZnNfbWlzY1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCWdvdG8gRVhJVF9ERVZfUkVNT1ZFOworCQl9CisJfQorCisJLyogUmVnaXN0ZXIgZGV2aWNlICovCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CisJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CisJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKKwkJZGV2X2VycihkZXYsICJDbGFzcyByZWdpc3RyYXRpb24gZmFpbGVkICglZClcbiIsIGVycik7CisJCWdvdG8gRVhJVF9ERVZfUkVNT1ZFX1NJTEVOVDsKKwl9CisKKwlyZXR1cm4gMDsKKworRVhJVF9ERVZfUkVNT1ZFOgorCWRldl9lcnIoZGV2LCAiU3lzZnMgaW50ZXJmYWNlIGNyZWF0aW9uIGZhaWxlZCAoJWQpXG4iLCBlcnIpOworRVhJVF9ERVZfUkVNT1ZFX1NJTEVOVDoKKwl2dDEyMTFfcmVtb3ZlX3N5c2ZzKHBkZXYpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWtmcmVlKGRhdGEpOworRVhJVDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCB2dDEyMTFfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHZ0MTIxMV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOworCXZ0MTIxMV9yZW1vdmVfc3lzZnMocGRldik7CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoZGF0YSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgdnQxMjExX2RyaXZlciA9IHsKKwkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgID0gRFJWTkFNRSwKKwl9LAorCS5wcm9iZSAgPSB2dDEyMTFfcHJvYmUsCisJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHZ0MTIxMV9yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgdnQxMjExX2RldmljZV9hZGQodW5zaWduZWQgc2hvcnQgYWRkcmVzcykKK3sKKwlzdHJ1Y3QgcmVzb3VyY2UgcmVzID0geworCQkuc3RhcnQJPSBhZGRyZXNzLAorCQkuZW5kCT0gYWRkcmVzcyArIDB4N2YsCisJCS5mbGFncwk9IElPUkVTT1VSQ0VfSU8sCisJfTsKKwlpbnQgZXJyOworCisJcGRldiA9IHBsYXRmb3JtX2RldmljZV9hbGxvYyhEUlZOQU1FLCBhZGRyZXNzKTsKKwlpZiAoIXBkZXYpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIGFsbG9jYXRpb24gZmFpbGVkICglZClcbiIsCisJCSAgICAgICBlcnIpOworCQlnb3RvIEVYSVQ7CisJfQorCisJcmVzLm5hbWUgPSBwZGV2LT5uYW1lOworCWVyciA9IHBsYXRmb3JtX2RldmljZV9hZGRfcmVzb3VyY2VzKHBkZXYsICZyZXMsIDEpOworCWlmIChlcnIpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIERSVk5BTUUgIjogRGV2aWNlIHJlc291cmNlIGFkZGl0aW9uIGZhaWxlZCAiCisJCSAgICAgICAiKCVkKVxuIiwgZXJyKTsKKwkJZ290byBFWElUX0RFVl9QVVQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZGV2aWNlX2FkZChwZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZOQU1FICI6IERldmljZSBhZGRpdGlvbiBmYWlsZWQgKCVkKVxuIiwKKwkJICAgICAgIGVycik7CisJCWdvdG8gRVhJVF9ERVZfUFVUOworCX0KKworCXJldHVybiAwOworCitFWElUX0RFVl9QVVQ6CisJcGxhdGZvcm1fZGV2aWNlX3B1dChwZGV2KTsKK0VYSVQ6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2luaXQgdnQxMjExX2ZpbmQodW5zaWduZWQgc2hvcnQgKmFkZHJlc3MpCit7CisJaW50IGVyciA9IC1FTk9ERVY7CisKKwlzdXBlcmlvX2VudGVyKCk7CisKKwlpZiAoc3VwZXJpb19pbmIoU0lPX1ZUMTIxMV9ERVZJRCkgIT0gU0lPX1ZUMTIxMV9JRCkgeworCQlnb3RvIEVYSVQ7CisJfQorCisJc3VwZXJpb19zZWxlY3QoU0lPX1ZUMTIxMV9MRE5fSFdNT04pOworCisJaWYgKChzdXBlcmlvX2luYihTSU9fVlQxMjExX0FDVElWRSkgJiAxKSA9PSAwKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWTkFNRSAiOiBIVyBtb25pdG9yIGlzIGRpc2FibGVkLCAiCisJCSAgICAgICAic2tpcHBpbmdcbiIpOworCQlnb3RvIEVYSVQ7CisJfQorCisJKmFkZHJlc3MgPSAoKHN1cGVyaW9faW5iKFNJT19WVDEyMTFfQkFERFIpIDw8IDgpIHwKKwkJICAgIChzdXBlcmlvX2luYihTSU9fVlQxMjExX0JBRERSICsgMSkpKSAmIDB4ZmYwMDsKKwlpZiAoKmFkZHJlc3MgPT0gMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HIERSVk5BTUUgIjogQmFzZSBhZGRyZXNzIGlzIG5vdCBzZXQsICIKKwkJICAgICAgICJza2lwcGluZ1xuIik7CisJCWdvdG8gRVhJVDsKKwl9CisKKwllcnIgPSAwOworCXByaW50ayhLRVJOX0lORk8gRFJWTkFNRSAiOiBGb3VuZCBWVDEyMTEgY2hpcCBhdCAweCUwNHgsICIKKwkgICAgICAgInJldmlzaW9uICV1XG4iLCAqYWRkcmVzcywgc3VwZXJpb19pbmIoU0lPX1ZUMTIxMV9ERVZSRVYpKTsKKworRVhJVDoKKwlzdXBlcmlvX2V4aXQoKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCB2dDEyMTFfaW5pdCh2b2lkKQoreworCWludCBlcnI7CisJdW5zaWduZWQgc2hvcnQgYWRkcmVzcyA9IDA7CisKKwllcnIgPSB2dDEyMTFfZmluZCgmYWRkcmVzcyk7CisJaWYgKGVycikgeworCQlnb3RvIEVYSVQ7CisJfQorCisJaWYgKCh1Y2hfY29uZmlnIDwgLTEpIHx8ICh1Y2hfY29uZmlnID4gMzEpKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWTkFNRSAiOiBJbnZhbGlkIFVDSCBjb25maWd1cmF0aW9uICVkLiAiCisJCSAgICAgICAiQ2hvb3NlIGEgdmFsdWUgYmV0d2VlbiAwIGFuZCAzMS5cbiIsIHVjaF9jb25maWcpOworCSAgZ290byBFWElUOworCX0KKworCWlmICgoaW50X21vZGUgPCAtMSkgfHwgKGludF9tb2RlID4gMCkpIHsKKwkJZXJyID0gLUVJTlZBTDsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyBEUlZOQU1FICI6IEludmFsaWQgaW50ZXJydXB0IG1vZGUgJWQuICIKKwkJICAgICAgICJPbmx5IG1vZGUgMCBpcyBzdXBwb3J0ZWQuXG4iLCBpbnRfbW9kZSk7CisJICBnb3RvIEVYSVQ7CisJfQorCisJZXJyID0gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZ2dDEyMTFfZHJpdmVyKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gRVhJVDsKKwl9CisKKwkvKiBTZXRzIGdsb2JhbCBwZGV2IGFzIGEgc2lkZSBlZmZlY3QgKi8KKwllcnIgPSB2dDEyMTFfZGV2aWNlX2FkZChhZGRyZXNzKTsKKwlpZiAoZXJyKSB7CisJCWdvdG8gRVhJVF9EUlZfVU5SRUdJU1RFUjsKKwl9CisKKwlyZXR1cm4gMDsKKworRVhJVF9EUlZfVU5SRUdJU1RFUjoKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdnQxMjExX2RyaXZlcik7CitFWElUOgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB2dDEyMTFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKHBkZXYpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ2dDEyMTFfZHJpdmVyKTsKK30KKworTU9EVUxFX0FVVEhPUigiSnVlcmcgSGFlZmxpZ2VyIDxqdWVyZ2hAZ21haWwuY29tPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJWVDEyMTEgc2Vuc29ycyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCittb2R1bGVfaW5pdCh2dDEyMTFfaW5pdCk7Cittb2R1bGVfZXhpdCh2dDEyMTFfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jIGIvZHJpdmVycy9od21vbi92dDgyMzEuYwppbmRleCA2ODZmM2RlLi45M2Y5M2Q0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3Z0ODIzMS5jCisrKyBiL2RyaXZlcnMvaHdtb24vdnQ4MjMxLmMKQEAgLTQ1MSwzNyArNDUxLDYgQEAKIGRlZmluZV90ZW1wZXJhdHVyZV9zeXNmcyg1KTsKIGRlZmluZV90ZW1wZXJhdHVyZV9zeXNmcyg2KTsKIAotI2RlZmluZSBDRkdfSU5GT19URU1QKGlkKQl7ICZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjaWQjI19pbnB1dC5kZXZfYXR0ciwgXAotCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjaWQjI19tYXhfaHlzdC5kZXZfYXR0ciwgXAotCQkJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcCMjaWQjI19tYXguZGV2X2F0dHIgfQotI2RlZmluZSBDRkdfSU5GT19WT0xUKGlkKQl7ICZzZW5zb3JfZGV2X2F0dHJfaW4jI2lkIyNfaW5wdXQuZGV2X2F0dHIsIFwKLQkJCQkmc2Vuc29yX2Rldl9hdHRyX2luIyNpZCMjX21pbi5kZXZfYXR0ciwgXAotCQkJCSZzZW5zb3JfZGV2X2F0dHJfaW4jI2lkIyNfbWF4LmRldl9hdHRyIH0KLQotc3RydWN0IHN0cl9kZXZpY2VfYXR0cl90YWJsZSB7Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmlucHV0OwotCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICptaW47Ci0Jc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKm1heDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc3RyX2RldmljZV9hdHRyX3RhYmxlIGNmZ19pbmZvX3RlbXBbXSA9IHsKLQl7ICZkZXZfYXR0cl90ZW1wMV9pbnB1dCwgJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LCAmZGV2X2F0dHJfdGVtcDFfbWF4IH0sCi0JQ0ZHX0lORk9fVEVNUCgyKSwKLQlDRkdfSU5GT19URU1QKDMpLAotCUNGR19JTkZPX1RFTVAoNCksCi0JQ0ZHX0lORk9fVEVNUCg1KSwKLQlDRkdfSU5GT19URU1QKDYpCi19OwotCi1zdGF0aWMgc3RydWN0IHN0cl9kZXZpY2VfYXR0cl90YWJsZSBjZmdfaW5mb192b2x0W10gPSB7Ci0JQ0ZHX0lORk9fVk9MVCgwKSwKLQlDRkdfSU5GT19WT0xUKDEpLAotCUNGR19JTkZPX1ZPTFQoMiksCi0JQ0ZHX0lORk9fVk9MVCgzKSwKLQlDRkdfSU5GT19WT0xUKDQpLAotCXsgJmRldl9hdHRyX2luNV9pbnB1dCwgJmRldl9hdHRyX2luNV9taW4sICZkZXZfYXR0cl9pbjVfbWF4IH0KLX07Ci0KIC8qIEZhbnMgKi8KIHN0YXRpYyBzc2l6ZV90IHNob3dfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTU4NSw4ICs1NTQsMTEwIEBACiAKIHN0YXRpYyBERVZJQ0VfQVRUUihhbGFybXMsIFNfSVJVR08sIHNob3dfYWxhcm1zLCBOVUxMKTsKIAorc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnZ0ODIzMV9hdHRyaWJ1dGVzX3RlbXBzWzZdWzRdID0geworCXsKKwkJJmRldl9hdHRyX3RlbXAxX2lucHV0LmF0dHIsCisJCSZkZXZfYXR0cl90ZW1wMV9tYXhfaHlzdC5hdHRyLAorCQkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAyX21heC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wM19tYXguZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA0X21heF9oeXN0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDRfbWF4LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNV9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA1X21heC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX3RlbXA2X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDZfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl90ZW1wNl9tYXguZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHZ0ODIzMV9ncm91cF90ZW1wc1s2XSA9IHsKKwl7IC5hdHRycyA9IHZ0ODIzMV9hdHRyaWJ1dGVzX3RlbXBzWzBdIH0sCisJeyAuYXR0cnMgPSB2dDgyMzFfYXR0cmlidXRlc190ZW1wc1sxXSB9LAorCXsgLmF0dHJzID0gdnQ4MjMxX2F0dHJpYnV0ZXNfdGVtcHNbMl0gfSwKKwl7IC5hdHRycyA9IHZ0ODIzMV9hdHRyaWJ1dGVzX3RlbXBzWzNdIH0sCisJeyAuYXR0cnMgPSB2dDgyMzFfYXR0cmlidXRlc190ZW1wc1s0XSB9LAorCXsgLmF0dHJzID0gdnQ4MjMxX2F0dHJpYnV0ZXNfdGVtcHNbNV0gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp2dDgyMzFfYXR0cmlidXRlc192b2x0c1s2XVs0XSA9IHsKKwl7CisJCSZzZW5zb3JfZGV2X2F0dHJfaW4wX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luMF9tYXguZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4xX21heC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX2luMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjJfbWF4LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfaW4zX2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2luM19tYXguZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfaW40X21heC5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmZGV2X2F0dHJfaW41X2lucHV0LmF0dHIsCisJCSZkZXZfYXR0cl9pbjVfbWluLmF0dHIsCisJCSZkZXZfYXR0cl9pbjVfbWF4LmF0dHIsCisJCU5VTEwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB2dDgyMzFfZ3JvdXBfdm9sdHNbNl0gPSB7CisJeyAuYXR0cnMgPSB2dDgyMzFfYXR0cmlidXRlc192b2x0c1swXSB9LAorCXsgLmF0dHJzID0gdnQ4MjMxX2F0dHJpYnV0ZXNfdm9sdHNbMV0gfSwKKwl7IC5hdHRycyA9IHZ0ODIzMV9hdHRyaWJ1dGVzX3ZvbHRzWzJdIH0sCisJeyAuYXR0cnMgPSB2dDgyMzFfYXR0cmlidXRlc192b2x0c1szXSB9LAorCXsgLmF0dHJzID0gdnQ4MjMxX2F0dHJpYnV0ZXNfdm9sdHNbNF0gfSwKKwl7IC5hdHRycyA9IHZ0ODIzMV9hdHRyaWJ1dGVzX3ZvbHRzWzVdIH0sCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqdnQ4MjMxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyLmF0dHIsCisJJmRldl9hdHRyX2FsYXJtcy5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHZ0ODIzMV9ncm91cCA9IHsKKwkuYXR0cnMgPSB2dDgyMzFfYXR0cmlidXRlcywKK307CisKIHN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciB2dDgyMzFfZHJpdmVyID0gewogCS5kcml2ZXIgPSB7CisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCQkubmFtZQk9ICJ2dDgyMzEiLAogCX0sCiAJLmF0dGFjaF9hZGFwdGVyCT0gdnQ4MjMxX2RldGVjdCwKQEAgLTY3MCw0MyArNzQxLDQzIEBACiAJdnQ4MjMxX2luaXRfY2xpZW50KGNsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewotCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ2dDgyMzFfZ3JvdXApKSkKIAkJZ290byBleGl0X2RldGFjaDsKLQl9CiAKIAkvKiBNdXN0IHVwZGF0ZSBkZXZpY2UgaW5mb3JtYXRpb24gdG8gZmluZCBvdXQgdGhlIGNvbmZpZyBmaWVsZCAqLwogCWRhdGEtPnVjaF9jb25maWcgPSB2dDgyMzFfcmVhZF92YWx1ZShjbGllbnQsIFZUODIzMV9SRUdfVUNIX0NPTkZJRyk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjZmdfaW5mb190ZW1wKTsgaSsrKSB7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodnQ4MjMxX2dyb3VwX3RlbXBzKTsgaSsrKSB7CiAJCWlmIChJU1RFTVAoaSwgZGF0YS0+dWNoX2NvbmZpZykpIHsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsCi0JCQkJCSAgIGNmZ19pbmZvX3RlbXBbaV0uaW5wdXQpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgY2ZnX2luZm9fdGVtcFtpXS5tYXgpOwotCQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgY2ZnX2luZm9fdGVtcFtpXS5taW4pOworCQkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosCisJCQkJCSZ2dDgyMzFfZ3JvdXBfdGVtcHNbaV0pKSkKKwkJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCQl9CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2ZnX2luZm9fdm9sdCk7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0ODIzMV9ncm91cF92b2x0cyk7IGkrKykgewogCQlpZiAoSVNWT0xUKGksIGRhdGEtPnVjaF9jb25maWcpKSB7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LAotCQkJCQkgICBjZmdfaW5mb192b2x0W2ldLmlucHV0KTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsIGNmZ19pbmZvX3ZvbHRbaV0ubWF4KTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsIGNmZ19pbmZvX3ZvbHRbaV0ubWluKTsKKwkJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLAorCQkJCQkmdnQ4MjMxX2dyb3VwX3ZvbHRzW2ldKSkpCisJCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKIAkJfQogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfbWluLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmc2Vuc29yX2Rldl9hdHRyX2ZhbjJfZGl2LmRldl9hdHRyKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisJfQogCXJldHVybiAwOwogCitleGl0X3JlbW92ZV9maWxlczoKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDgyMzFfZ3JvdXBfdm9sdHMpOyBpKyspCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnZ0ODIzMV9ncm91cF92b2x0c1tpXSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2dDgyMzFfZ3JvdXBfdGVtcHMpOyBpKyspCisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnZ0ODIzMV9ncm91cF90ZW1wc1tpXSk7CisKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ2dDgyMzFfZ3JvdXApOwogZXhpdF9kZXRhY2g6CiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIGV4aXRfZnJlZToKQEAgLTcxOSwxMCArNzkwLDE4IEBACiBzdGF0aWMgaW50IHZ0ODIzMV9kZXRhY2hfY2xpZW50KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7CiAJc3RydWN0IHZ0ODIzMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKIAorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0ODIzMV9ncm91cF92b2x0cyk7IGkrKykKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdnQ4MjMxX2dyb3VwX3ZvbHRzW2ldKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZ0ODIzMV9ncm91cF90ZW1wcyk7IGkrKykKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdnQ4MjMxX2dyb3VwX3RlbXBzW2ldKTsKKworCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnZ0ODIzMV9ncm91cCk7CisKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKSB7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYyBiL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKaW5kZXggNDAzMDFiYy4uODMzZmFhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCkBAIC0yLDYgKzIsOSBAQAogICAgIHc4MzYyN2VoZiAtIERyaXZlciBmb3IgdGhlIGhhcmR3YXJlIG1vbml0b3JpbmcgZnVuY3Rpb25hbGl0eSBvZgogICAgICAgICAgICAgICAgIHRoZSBXaW5ib25kIFc4MzYyN0VIRiBTdXBlci1JL08gY2hpcAogICAgIENvcHlyaWdodCAoQykgMjAwNSAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CisgICAgQ29weXJpZ2h0IChDKSAyMDA2ICBZdWFuIE11IChXaW5ib25kKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0BzaC5jdnV0LmN6PgorICAgICAgICAgICAgICAgICAgICAgICAgRGF2aWQgSHViYmFyZCA8ZGF2aWQuYy5odWJiYXJkQGdtYWlsLmNvbT4KIAogICAgIFNoYW1lbGVzc2x5IHJpcHBlZCBmcm9tIHRoZSB3ODM2MjdoZiBkcml2ZXIKICAgICBDb3B5cmlnaHQgKEMpIDIwMDMgIE1hcmsgU3R1ZGViYWtlcgpAQCAtMjksOCArMzIsOCBAQAogCiAgICAgU3VwcG9ydHMgdGhlIGZvbGxvd2luZyBjaGlwczoKIAotICAgIENoaXAgICAgICAgICN2aW4gICAgI2ZhbiAgICAjcHdtICAgICN0ZW1wICAgY2hpcF9pZCBtYW5faWQKLSAgICB3ODM2MjdlaGYgICAxMCAgICAgIDUgICAgICAgLSAgICAgICAzICAgICAgIDB4ODggICAgMHg1Y2EzCisgICAgQ2hpcCAgICAgICAgI3ZpbiAgICAjZmFuICAgICNwd20gICAgI3RlbXAgICBjaGlwX2lkICAgIG1hbl9pZAorICAgIHc4MzYyN2VoZiAgIDEwICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAgMHg4OCwweGExICAweDVjYTMKICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE0NSwxMCArMTQ4LDQ0IEBACiAjZGVmaW5lIFc4MzYyN0VIRl9SRUdfQUxBUk0yCQkweDQ1QQogI2RlZmluZSBXODM2MjdFSEZfUkVHX0FMQVJNMwkJMHg0NUIKIAorLyogU21hcnRGYW4gcmVnaXN0ZXJzICovCisvKiBEQyBvciBQV00gb3V0cHV0IGZhbiBjb25maWd1cmF0aW9uICovCitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19QV01fRU5BQkxFW10gPSB7CisJMHgwNCwJCQkvKiBTWVMgRkFOMCBvdXRwdXQgbW9kZSBhbmQgUFdNIG1vZGUgKi8KKwkweDA0LAkJCS8qIENQVSBGQU4wIG91dHB1dCBtb2RlIGFuZCBQV00gbW9kZSAqLworCTB4MTIsCQkJLyogQVVYIEZBTiBtb2RlICovCisJMHg2MiwJCQkvKiBDUFUgZmFuMSBtb2RlICovCit9OworCitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1BXTV9NT0RFX1NISUZUW10gPSB7IDAsIDEsIDAsIDYgfTsKK3N0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUFdNX0VOQUJMRV9TSElGVFtdID0geyAyLCA0LCAxLCA0IH07CisKKy8qIEZBTiBEdXR5IEN5Y2xlLCBiZSB1c2VkIHRvIGNvbnRyb2wgKi8KK3N0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUkVHX1BXTVtdID0geyAweDAxLCAweDAzLCAweDExLCAweDYxIH07CitzdGF0aWMgY29uc3QgdTggVzgzNjI3RUhGX1JFR19UQVJHRVRbXSA9IHsgMHgwNSwgMHgwNiwgMHgxMywgMHg2MyB9Oworc3RhdGljIGNvbnN0IHU4IFc4MzYyN0VIRl9SRUdfVE9MRVJBTkNFW10gPSB7IDB4MDcsIDB4MDcsIDB4MTQsIDB4NjIgfTsKKworCisvKiBBZHZhbmNlZCBGYW4gY29udHJvbCwgc29tZSB2YWx1ZXMgYXJlIGNvbW1vbiBmb3IgYWxsIGZhbnMgKi8KK3N0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUkVHX0ZBTl9NSU5fT1VUUFVUW10gPSB7IDB4MDgsIDB4MDksIDB4MTUsIDB4NjQgfTsKK3N0YXRpYyBjb25zdCB1OCBXODM2MjdFSEZfUkVHX0ZBTl9TVE9QX1RJTUVbXSA9IHsgMHgwQywgMHgwRCwgMHgxNywgMHg2NiB9OworCiAvKgogICogQ29udmVyc2lvbnMKICAqLwogCisvKiAxIGlzIFBXTSBtb2RlLCBvdXRwdXQgaW4gbXMgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHN0ZXBfdGltZV9mcm9tX3JlZyh1OCByZWcsIHU4IG1vZGUpCit7CisJcmV0dXJuIG1vZGUgPyAxMDAgKiByZWcgOiA0MDAgKiByZWc7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggc3RlcF90aW1lX3RvX3JlZyh1bnNpZ25lZCBpbnQgbXNlYywgdTggbW9kZSkKK3sKKwlyZXR1cm4gU0VOU09SU19MSU1JVCgobW9kZSA/IChtc2VjICsgNTApIC8gMTAwIDoKKwkJCQkJCShtc2VjICsgMjAwKSAvIDQwMCksIDEsIDI1NSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CiBmYW5fZnJvbV9yZWcodTggcmVnLCB1bnNpZ25lZCBpbnQgZGl2KQogewpAQCAtMTcwLDEyICsyMDcsMTIgQEAKIH0KIAogc3RhdGljIGlubGluZSBzOAotdGVtcDFfdG9fcmVnKGludCB0ZW1wKQordGVtcDFfdG9fcmVnKGludCB0ZW1wLCBpbnQgbWluLCBpbnQgbWF4KQogewotCWlmICh0ZW1wIDw9IC0xMjgwMDApCi0JCXJldHVybiAtMTI4OwotCWlmICh0ZW1wID49IDEyNzAwMCkKLQkJcmV0dXJuIDEyNzsKKwlpZiAodGVtcCA8PSBtaW4pCisJCXJldHVybiBtaW4gLyAxMDAwOworCWlmICh0ZW1wID49IG1heCkKKwkJcmV0dXJuIG1heCAvIDEwMDA7CiAJaWYgKHRlbXAgPCAwKQogCQlyZXR1cm4gKHRlbXAgLSA1MDApIC8gMTAwMDsKIAlyZXR1cm4gKHRlbXAgKyA1MDApIC8gMTAwMDsKQEAgLTIyMyw2ICsyNjAsMTYgQEAKIAlzMTYgdGVtcF9tYXhbMl07CiAJczE2IHRlbXBfbWF4X2h5c3RbMl07CiAJdTMyIGFsYXJtczsKKworCXU4IHB3bV9tb2RlWzRdOyAvKiAwLT5EQyB2YXJpYWJsZSB2b2x0YWdlLCAxLT5QV00gdmFyaWFibGUgZHV0eSBjeWNsZSAqLworCXU4IHB3bV9lbmFibGVbNF07IC8qIDEtPm1hbnVhbAorCQkJICAgICAyLT50aGVybWFsIGNydWlzZSAoYWxzbyBjYWxsZWQgU21hcnRGYW4gSSkgKi8KKwl1OCBwd21bNF07CisJdTggdGFyZ2V0X3RlbXBbNF07CisJdTggdG9sZXJhbmNlWzRdOworCisJdTggZmFuX21pbl9vdXRwdXRbNF07IC8qIG1pbmltdW0gZmFuIHNwZWVkICovCisJdTggZmFuX3N0b3BfdGltZVs0XTsKIH07CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3dvcmRfc2l6ZWQodTE2IHJlZykKQEAgLTM0OSw2ICszOTYsNyBAQAogewogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CiAJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHB3bWNmZyA9IDAsIHRvbGVyYW5jZSA9IDA7IC8qIHNodXQgdXAgdGhlIGNvbXBpbGVyICovCiAJaW50IGk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CkBAIC00MTYsNiArNDY0LDM0IEBACiAJCQl9CiAJCX0KIAorCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCQkvKiBwd21jZmcsIHRvbGFyYW5jZSBtYXBwZWQgZm9yIGk9MCwgaT0xIHRvIHNhbWUgcmVnICovCisJCQlpZiAoaSAhPSAxKSB7CisJCQkJcHdtY2ZnID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCQkJVzgzNjI3RUhGX1JFR19QV01fRU5BQkxFW2ldKTsKKwkJCQl0b2xlcmFuY2UgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQlXODM2MjdFSEZfUkVHX1RPTEVSQU5DRVtpXSk7CisJCQl9CisJCQlkYXRhLT5wd21fbW9kZVtpXSA9CisJCQkJKChwd21jZmcgPj4gVzgzNjI3RUhGX1BXTV9NT0RFX1NISUZUW2ldKSAmIDEpCisJCQkJPyAwIDogMTsKKwkJCWRhdGEtPnB3bV9lbmFibGVbaV0gPQorCQkJCQkoKHB3bWNmZyA+PiBXODM2MjdFSEZfUFdNX0VOQUJMRV9TSElGVFtpXSkKKwkJCQkJCSYgMykgKyAxOworCQkJZGF0YS0+cHdtW2ldID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoY2xpZW50LAorCQkJCQkJVzgzNjI3RUhGX1JFR19QV01baV0pOworCQkJZGF0YS0+ZmFuX21pbl9vdXRwdXRbaV0gPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQlXODM2MjdFSEZfUkVHX0ZBTl9NSU5fT1VUUFVUW2ldKTsKKwkJCWRhdGEtPmZhbl9zdG9wX3RpbWVbaV0gPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShjbGllbnQsCisJCQkJCQlXODM2MjdFSEZfUkVHX0ZBTl9TVE9QX1RJTUVbaV0pOworCQkJZGF0YS0+dGFyZ2V0X3RlbXBbaV0gPQorCQkJCXc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwKKwkJCQkJVzgzNjI3RUhGX1JFR19UQVJHRVRbaV0pICYKKwkJCQkJKGRhdGEtPnB3bV9tb2RlW2ldID09IDEgPyAweDdmIDogMHhmZik7CisJCQlkYXRhLT50b2xlcmFuY2VbaV0gPSAodG9sZXJhbmNlID4+IChpID09IDEgPyA0IDogMCkpCisJCQkJCQkJCQkmIDB4MGY7CisJCX0KKwogCQkvKiBNZWFzdXJlZCB0ZW1wZXJhdHVyZXMgYW5kIGxpbWl0cyAqLwogCQlkYXRhLT50ZW1wMSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwKIAkJCSAgICAgIFc4MzYyN0VIRl9SRUdfVEVNUDEpOwpAQCAtNTQ2LDE0ICs2MjIsNiBAQAogICAgICAgIFNFTlNPUl9BVFRSKGluOV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA5KSwKIH07CiAKLXN0YXRpYyB2b2lkIGRldmljZV9jcmVhdGVfZmlsZV9pbihzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpKQotewotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5fbWluW2ldLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2luX21heFtpXS5kZXZfYXR0cik7Ci19Ci0KICNkZWZpbmUgc2hvd19mYW5fcmVnKHJlZykgXAogc3RhdGljIHNzaXplX3QgXAogc2hvd18jI3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCkBAIC02ODEsMTQgKzc0OSw2IEBACiAJU0VOU09SX0FUVFIoZmFuNV9kaXYsIFNfSVJVR08sIHNob3dfZmFuX2RpdiwgTlVMTCwgNCksCiB9OwogCi1zdGF0aWMgdm9pZCBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGkpCi17Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9mYW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfZmFuX2FsYXJtW2ldLmRldl9hdHRyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2Zhbl9kaXZbaV0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfZmFuX21pbltpXS5kZXZfYXR0cik7Ci19Ci0KICNkZWZpbmUgc2hvd190ZW1wMV9yZWcocmVnKSBcCiBzdGF0aWMgc3NpemVfdCBcCiBzaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKQEAgLTcxMSw3ICs3NzEsNyBAQAogCXUzMiB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsgXAogIFwKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKLQlkYXRhLT50ZW1wMV8jI3JlZyA9IHRlbXAxX3RvX3JlZyh2YWwpOyBcCisJZGF0YS0+dGVtcDFfIyNyZWcgPSB0ZW1wMV90b19yZWcodmFsLCAtMTI4MDAwLCAxMjcwMDApOyBcCiAJdzgzNjI3ZWhmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19URU1QMV8jI1JFRywgXAogCQkJICAgICAgZGF0YS0+dGVtcDFfIyNyZWcpOyBcCiAJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKQEAgLTc3NywxMCArODM3LDMwOSBAQAogCVNFTlNPUl9BVFRSKHRlbXAzX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMyksCiB9OwogCisjZGVmaW5lIHNob3dfcHdtX3JlZyhyZWcpIFwKK3N0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJCQljaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IHc4MzYyN2VoZl91cGRhdGVfZGV2aWNlKGRldik7IFwKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOyBcCisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPnJlZ1tucl0pOyBcCit9CisKK3Nob3dfcHdtX3JlZyhwd21fbW9kZSkKK3Nob3dfcHdtX3JlZyhwd21fZW5hYmxlKQorc2hvd19wd21fcmVnKHB3bSkKKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3B3bV9tb2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXUzMiB2YWwgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKKwl1MTYgcmVnOworCisJaWYgKHZhbCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZWcgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfUFdNX0VOQUJMRVtucl0pOworCWRhdGEtPnB3bV9tb2RlW25yXSA9IHZhbDsKKwlyZWcgJj0gfigxIDw8IFc4MzYyN0VIRl9QV01fTU9ERV9TSElGVFtucl0pOworCWlmICghdmFsKQorCQlyZWcgfD0gMSA8PCBXODM2MjdFSEZfUFdNX01PREVfU0hJRlRbbnJdOworCXc4MzYyN2VoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfUFdNX0VOQUJMRVtucl0sIHJlZyk7CisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgc3NpemVfdAorc3RvcmVfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7CisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OworCXUzMiB2YWwgPSBTRU5TT1JTX0xJTUlUKHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApLCAwLCAyNTUpOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCWRhdGEtPnB3bVtucl0gPSB2YWw7CisJdzgzNjI3ZWhmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19QV01bbnJdLCB2YWwpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworc3RhdGljIHNzaXplX3QKK3N0b3JlX3B3bV9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdTMyIHZhbCA9IHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApOworCXUxNiByZWc7CisKKwlpZiAoIXZhbCB8fCAodmFsID4gMikpCS8qIG9ubHkgbW9kZXMgMSBhbmQgMiBhcmUgc3VwcG9ydGVkICovCisJCXJldHVybiAtRUlOVkFMOworCW11dGV4X2xvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZWcgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfUFdNX0VOQUJMRVtucl0pOworCWRhdGEtPnB3bV9lbmFibGVbbnJdID0gdmFsOworCXJlZyAmPSB+KDB4MDMgPDwgVzgzNjI3RUhGX1BXTV9FTkFCTEVfU0hJRlRbbnJdKTsKKwlyZWcgfD0gKHZhbCAtIDEpIDw8IFc4MzYyN0VIRl9QV01fRU5BQkxFX1NISUZUW25yXTsKKwl3ODM2MjdlaGZfd3JpdGVfdmFsdWUoY2xpZW50LCBXODM2MjdFSEZfUkVHX1BXTV9FTkFCTEVbbnJdLCByZWcpOworCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJldHVybiBjb3VudDsKK30KKworCisjZGVmaW5lIHNob3dfdG9sX3RlbXAocmVnKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJCQljaGFyICpidWYpIFwKK3sgXAorCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IHc4MzYyN2VoZl91cGRhdGVfZGV2aWNlKGRldik7IFwKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOyBcCisJaW50IG5yID0gc2Vuc29yX2F0dHItPmluZGV4OyBcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRlbXAxX2Zyb21fcmVnKGRhdGEtPnJlZ1tucl0pKTsgXAorfQorCitzaG93X3RvbF90ZW1wKHRvbGVyYW5jZSkKK3Nob3dfdG9sX3RlbXAodGFyZ2V0X3RlbXApCisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90YXJnZXRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsKKwlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgKnNlbnNvcl9hdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGF0dHIpOworCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsKKwl1OCB2YWwgPSB0ZW1wMV90b19yZWcoc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCksIDAsIDEyNzAwMCk7CisKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisJZGF0YS0+dGFyZ2V0X3RlbXBbbnJdID0gdmFsOworCXc4MzYyN2VoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfVEFSR0VUW25yXSwgdmFsKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90CitzdG9yZV90b2xlcmFuY2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7CisJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7CisJdTE2IHJlZzsKKwkvKiBMaW1pdCB0aGUgdGVtcCB0byAwQyAtIDE1QyAqLworCXU4IHZhbCA9IHRlbXAxX3RvX3JlZyhzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSwgMCwgMTUwMDApOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCXJlZyA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19UT0xFUkFOQ0VbbnJdKTsKKwlkYXRhLT50b2xlcmFuY2VbbnJdID0gdmFsOworCWlmIChuciA9PSAxKQorCQlyZWcgPSAocmVnICYgMHgwZikgfCAodmFsIDw8IDQpOworCWVsc2UKKwkJcmVnID0gKHJlZyAmIDB4ZjApIHwgdmFsOworCXc4MzYyN2VoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfVE9MRVJBTkNFW25yXSwgcmVnKTsKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bVtdID0geworCVNFTlNPUl9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHN0b3JlX3B3bSwgMSksCisJU0VOU09SX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzdG9yZV9wd20sIDIpLAorCVNFTlNPUl9BVFRSKHB3bTQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bV9tb2RlW10gPSB7CisJU0VOU09SX0FUVFIocHdtMV9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fbW9kZSwKKwkJICAgIHN0b3JlX3B3bV9tb2RlLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bV9tb2RlLAorCQkgICAgc3RvcmVfcHdtX21vZGUsIDEpLAorCVNFTlNPUl9BVFRSKHB3bTNfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtX21vZGUsCisJCSAgICBzdG9yZV9wd21fbW9kZSwgMiksCisJU0VOU09SX0FUVFIocHdtNF9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fbW9kZSwKKwkJICAgIHN0b3JlX3B3bV9tb2RlLCAzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bV9lbmFibGVbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtX2VuYWJsZSwKKwkJICAgIHN0b3JlX3B3bV9lbmFibGUsIDApLAorCVNFTlNPUl9BVFRSKHB3bTJfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd21fZW5hYmxlLAorCQkgICAgc3RvcmVfcHdtX2VuYWJsZSwgMSksCisJU0VOU09SX0FUVFIocHdtM19lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bV9lbmFibGUsCisJCSAgICBzdG9yZV9wd21fZW5hYmxlLCAyKSwKKwlTRU5TT1JfQVRUUihwd200X2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtX2VuYWJsZSwKKwkJICAgIHN0b3JlX3B3bV9lbmFibGUsIDMpLAorfTsKKworc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfdGFyZ2V0X3RlbXBbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGFyZ2V0X3RlbXAsCisJCSAgICBzdG9yZV90YXJnZXRfdGVtcCwgMCksCisJU0VOU09SX0FUVFIocHdtMl90YXJnZXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3RhcmdldF90ZW1wLAorCQkgICAgc3RvcmVfdGFyZ2V0X3RlbXAsIDEpLAorCVNFTlNPUl9BVFRSKHB3bTNfdGFyZ2V0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd190YXJnZXRfdGVtcCwKKwkJICAgIHN0b3JlX3RhcmdldF90ZW1wLCAyKSwKKwlTRU5TT1JfQVRUUihwd200X3RhcmdldCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdGFyZ2V0X3RlbXAsCisJCSAgICBzdG9yZV90YXJnZXRfdGVtcCwgMyksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90b2xlcmFuY2VbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdG9sZXJhbmNlLAorCQkgICAgc3RvcmVfdG9sZXJhbmNlLCAwKSwKKwlTRU5TT1JfQVRUUihwd20yX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdG9sZXJhbmNlLAorCQkgICAgc3RvcmVfdG9sZXJhbmNlLCAxKSwKKwlTRU5TT1JfQVRUUihwd20zX3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdG9sZXJhbmNlLAorCQkgICAgc3RvcmVfdG9sZXJhbmNlLCAyKSwKKwlTRU5TT1JfQVRUUihwd200X3RvbGVyYW5jZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfdG9sZXJhbmNlLAorCQkgICAgc3RvcmVfdG9sZXJhbmNlLCAzKSwKK307CisKKy8qIFNtYXJ0IEZhbiByZWdpc3RlcnMgKi8KKworI2RlZmluZSBmYW5fZnVuY3Rpb25zKHJlZywgUkVHKSBcCitzdGF0aWMgc3NpemVfdCBzaG93XyMjcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIFwKKwkJICAgICAgIGNoYXIgKmJ1ZikgXAoreyBcCisJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhID0gdzgzNjI3ZWhmX3VwZGF0ZV9kZXZpY2UoZGV2KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7IFwKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7IFwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgZGF0YS0+cmVnW25yXSk7IFwKK31cCitzdGF0aWMgc3NpemVfdCBcCitzdG9yZV8jI3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCQkgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3tcCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHRvX2kyY19jbGllbnQoZGV2KTsgXAorCXN0cnVjdCB3ODM2MjdlaGZfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOyBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsgXAorCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsgXAorCXUzMiB2YWwgPSBTRU5TT1JTX0xJTUlUKHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApLCAxLCAyNTUpOyBcCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJZGF0YS0+cmVnW25yXSA9IHZhbDsgXAorCXc4MzYyN2VoZl93cml0ZV92YWx1ZShjbGllbnQsIFc4MzYyN0VIRl9SRUdfIyNSRUdbbnJdLCAgdmFsKTsgXAorCW11dGV4X3VubG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOyBcCisJcmV0dXJuIGNvdW50OyBcCit9CisKK2Zhbl9mdW5jdGlvbnMoZmFuX21pbl9vdXRwdXQsIEZBTl9NSU5fT1VUUFVUKQorCisjZGVmaW5lIGZhbl90aW1lX2Z1bmN0aW9ucyhyZWcsIFJFRykgXAorc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCisJCQkJY2hhciAqYnVmKSBcCit7IFwKKwlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSB3ODM2MjdlaGZfdXBkYXRlX2RldmljZShkZXYpOyBcCisJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICpzZW5zb3JfYXR0ciA9IHRvX3NlbnNvcl9kZXZfYXR0cihhdHRyKTsgXAorCWludCBuciA9IHNlbnNvcl9hdHRyLT5pbmRleDsgXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBcCisJCQlzdGVwX3RpbWVfZnJvbV9yZWcoZGF0YS0+cmVnW25yXSwgZGF0YS0+cHdtX21vZGVbbnJdKSk7IFwKK30gXAorXAorc3RhdGljIHNzaXplX3QgXAorc3RvcmVfIyNyZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgXAorCQkJY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpIFwKK3sgXAorCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7IFwKKwlzdHJ1Y3QgdzgzNjI3ZWhmX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsgXAorCXN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSAqc2Vuc29yX2F0dHIgPSB0b19zZW5zb3JfZGV2X2F0dHIoYXR0cik7IFwKKwlpbnQgbnIgPSBzZW5zb3JfYXR0ci0+aW5kZXg7IFwKKwl1OCB2YWwgPSBzdGVwX3RpbWVfdG9fcmVnKHNpbXBsZV9zdHJ0b3VsKGJ1ZiwgTlVMTCwgMTApLCBcCisJCQkJCWRhdGEtPnB3bV9tb2RlW25yXSk7IFwKKwltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7IFwKKwlkYXRhLT5yZWdbbnJdID0gdmFsOyBcCisJdzgzNjI3ZWhmX3dyaXRlX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR18jI1JFR1tucl0sIHZhbCk7IFwKKwltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsgXAorCXJldHVybiBjb3VudDsgXAorfSBcCisKK2Zhbl90aW1lX2Z1bmN0aW9ucyhmYW5fc3RvcF90aW1lLCBGQU5fU1RPUF9USU1FKQorCisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3NmM19hcnJheXNfZmFuNFtdID0geworCVNFTlNPUl9BVFRSKHB3bTRfc3RvcF90aW1lLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fc3RvcF90aW1lLAorCQkgICAgc3RvcmVfZmFuX3N0b3BfdGltZSwgMyksCisJU0VOU09SX0FUVFIocHdtNF9taW5fb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluX291dHB1dCwKKwkJICAgIHN0b3JlX2Zhbl9taW5fb3V0cHV0LCAzKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3NmM19hcnJheXNbXSA9IHsKKwlTRU5TT1JfQVRUUihwd20xX3N0b3BfdGltZSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX3N0b3BfdGltZSwKKwkJICAgIHN0b3JlX2Zhbl9zdG9wX3RpbWUsIDApLAorCVNFTlNPUl9BVFRSKHB3bTJfc3RvcF90aW1lLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fc3RvcF90aW1lLAorCQkgICAgc3RvcmVfZmFuX3N0b3BfdGltZSwgMSksCisJU0VOU09SX0FUVFIocHdtM19zdG9wX3RpbWUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9zdG9wX3RpbWUsCisJCSAgICBzdG9yZV9mYW5fc3RvcF90aW1lLCAyKSwKKwlTRU5TT1JfQVRUUihwd20xX21pbl9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW5fb3V0cHV0LAorCQkgICAgc3RvcmVfZmFuX21pbl9vdXRwdXQsIDApLAorCVNFTlNPUl9BVFRSKHB3bTJfbWluX291dHB1dCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbl9vdXRwdXQsCisJCSAgICBzdG9yZV9mYW5fbWluX291dHB1dCwgMSksCisJU0VOU09SX0FUVFIocHdtM19taW5fb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluX291dHB1dCwKKwkJICAgIHN0b3JlX2Zhbl9taW5fb3V0cHV0LCAyKSwKK307CisKIC8qCiAgKiBEcml2ZXIgYW5kIGNsaWVudCBtYW5hZ2VtZW50CiAgKi8KIAorc3RhdGljIHZvaWQgdzgzNjI3ZWhmX2RldmljZV9yZW1vdmVfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2KQoreworCS8qIHNvbWUgZW50cmllcyBpbiB0aGUgZm9sbG93aW5nIGFycmF5cyBtYXkgbm90IGhhdmUgYmVlbiB1c2VkIGluCisJICogZGV2aWNlX2NyZWF0ZV9maWxlKCksIGJ1dCBkZXZpY2VfcmVtb3ZlX2ZpbGUoKSB3aWxsIGlnbm9yZSB0aGVtICovCisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5cyk7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zZjNfYXJyYXlzW2ldLmRldl9hdHRyKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5c19mYW40KTsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3NmM19hcnJheXNfZmFuNFtpXS5kZXZfYXR0cik7CisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9pbl9pbnB1dFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2luX21pbltpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fbWF4W2ldLmRldl9hdHRyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2Zhbl9pbnB1dFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX2FsYXJtW2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9mYW5fZGl2W2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9mYW5fbWluW2ldLmRldl9hdHRyKTsKKwl9CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3B3bVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtX21vZGVbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3B3bV9lbmFibGVbaV0uZGV2X2F0dHIpOworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RhcmdldF90ZW1wW2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90b2xlcmFuY2VbaV0uZGV2X2F0dHIpOworCX0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfdGVtcCk7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wW2ldLmRldl9hdHRyKTsKK30KKwogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4MzYyN2VoZl9kcml2ZXI7CiAKIHN0YXRpYyB2b2lkIHc4MzYyN2VoZl9pbml0X2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQpAQCAtODEwLDYgKzExNjksNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHc4MzYyN2VoZl9kYXRhICpkYXRhOwogCXN0cnVjdCBkZXZpY2UgKmRldjsKKwl1OCBmYW40cGluLCBmYW41cGluOwogCWludCBpLCBlcnIgPSAwOwogCiAJaWYgKCFyZXF1ZXN0X3JlZ2lvbihhZGRyZXNzICsgUkVHSU9OX09GRlNFVCwgUkVHSU9OX0xFTkdUSCwKQEAgLTg0OCwzNSArMTIwOCw4NyBAQAogCQlkYXRhLT5mYW5fbWluW2ldID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCSAgIFc4MzYyN0VIRl9SRUdfRkFOX01JTltpXSk7CiAKKwkvKiBmYW40IGFuZCBmYW41IHNoYXJlIHNvbWUgcGlucyB3aXRoIHRoZSBHUElPIGFuZCBzZXJpYWwgZmxhc2ggKi8KKworCXN1cGVyaW9fZW50ZXIoKTsKKwlmYW41cGluID0gc3VwZXJpb19pbmIoMHgyNCkgJiAweDI7CisJZmFuNHBpbiA9IHN1cGVyaW9faW5iKDB4MjkpICYgMHg2OworCXN1cGVyaW9fZXhpdCgpOworCiAJLyogSXQgbG9va3MgbGlrZSBmYW40IGFuZCBmYW41IHBpbnMgY2FuIGJlIGFsdGVybmF0aXZlbHkgdXNlZAogCSAgIGFzIGZhbiBvbi9vZmYgc3dpdGNoZXMgKi8KKwogCWRhdGEtPmhhc19mYW4gPSAweDA3OyAvKiBmYW4xLCBmYW4yIGFuZCBmYW4zICovCiAJaSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNjI3RUhGX1JFR19GQU5ESVYxKTsKLQlpZiAoaSAmICgxIDw8IDIpKQorCWlmICgoaSAmICgxIDw8IDIpKSAmJiAoIWZhbjRwaW4pKQogCQlkYXRhLT5oYXNfZmFuIHw9ICgxIDw8IDMpOwotCWlmIChpICYgKDEgPDwgMCkpCisJaWYgKChpICYgKDEgPDwgMCkpICYmICghZmFuNXBpbikpCiAJCWRhdGEtPmhhc19mYW4gfD0gKDEgPDwgNCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworICAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmM19hcnJheXMpOyBpKyspCisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCSZzZGFfc2YzX2FycmF5c1tpXS5kZXZfYXR0cikpKQorCQkJZ290byBleGl0X3JlbW92ZTsKKworCS8qIGlmIGZhbjQgaXMgZW5hYmxlZCBjcmVhdGUgdGhlIHNmMyBmaWxlcyBmb3IgaXQgKi8KKwlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IDMpKQorCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5c19mYW40KTsgaSsrKSB7CisJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpKSkKKwkJCQlnb3RvIGV4aXRfcmVtb3ZlOworCQl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2luX2lucHV0W2ldLmRldl9hdHRyKSkKKwkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV9pbl9taW5baV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV9pbl9tYXhbaV0uZGV2X2F0dHIpKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCWlmIChkYXRhLT5oYXNfZmFuICYgKDEgPDwgaSkpIHsKKwkJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnNkYV9mYW5faW5wdXRbaV0uZGV2X2F0dHIpKQorCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmc2RhX2Zhbl9hbGFybVtpXS5kZXZfYXR0cikpCisJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZzZGFfZmFuX2RpdltpXS5kZXZfYXR0cikpCisJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZzZGFfZmFuX21pbltpXS5kZXZfYXR0cikpKQorCQkJCWdvdG8gZXhpdF9yZW1vdmU7CisJCQlpZiAoaSA8IDQgJiYgLyogdzgzNjI3ZWhmIG9ubHkgaGFzIDQgcHdtICovCisJCQkJKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmc2RhX3B3bVtpXS5kZXZfYXR0cikpCisJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCSZzZGFfcHdtX21vZGVbaV0uZGV2X2F0dHIpKQorCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmc2RhX3B3bV9lbmFibGVbaV0uZGV2X2F0dHIpKQorCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCQkmc2RhX3RhcmdldF90ZW1wW2ldLmRldl9hdHRyKSkKKwkJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkJJnNkYV90b2xlcmFuY2VbaV0uZGV2X2F0dHIpKSkpCisJCQkJZ290byBleGl0X3JlbW92ZTsKKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQorCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcFtpXS5kZXZfYXR0cikpKQorCQkJZ290byBleGl0X3JlbW92ZTsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOwogCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgewogCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7Ci0JCWdvdG8gZXhpdF9kZXRhY2g7CisJCWdvdG8gZXhpdF9yZW1vdmU7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCWRldmljZV9jcmVhdGVfZmlsZV9pbihkZXYsIGkpOwotCi0JZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewotCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGkpKQotCQkJZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihkZXYsIGkpOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfdGVtcCk7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV90ZW1wW2ldLmRldl9hdHRyKTsKLQogCXJldHVybiAwOwogCi1leGl0X2RldGFjaDoKK2V4aXRfcmVtb3ZlOgorCXc4MzYyN2VoZl9kZXZpY2VfcmVtb3ZlX2ZpbGVzKGRldik7CiAJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIGV4aXRfZnJlZToKIAlrZnJlZShkYXRhKTsKQEAgLTg5Miw2ICsxMzA0LDcgQEAKIAlpbnQgZXJyOwogCiAJaHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZGF0YS0+Y2xhc3NfZGV2KTsKKwl3ODM2MjdlaGZfZGV2aWNlX3JlbW92ZV9maWxlcygmY2xpZW50LT5kZXYpOwogCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKQEAgLTkwMyw2ICsxMzE2LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4MzYyN2VoZl9kcml2ZXIgPSB7CiAJLmRyaXZlciA9IHsKKwkJLm93bmVyCT0gVEhJU19NT0RVTEUsCiAJCS5uYW1lCT0gInc4MzYyN2VoZiIsCiAJfSwKIAkuYXR0YWNoX2FkYXB0ZXIJPSB3ODM2MjdlaGZfZGV0ZWN0LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODM2MjdoZi5jIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCmluZGV4IDc5MzY4ZDUuLmRmZGMyOWM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL3c4MzYyN2hmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdoZi5jCkBAIC0zMzksNiArMzM5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4MzYyN2hmX2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIJPSBUSElTX01PRFVMRSwKIAkJLm5hbWUJPSAidzgzNjI3aGYiLAogCX0sCiAJLmF0dGFjaF9hZGFwdGVyCT0gdzgzNjI3aGZfZGV0ZWN0LApAQCAtNTExLDEzICs1MTIsNiBAQAogc3RhdGljIERFVklDRV9BVFRSKGluMF9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLAogCXNob3dfcmVnc19pbl9tYXgwLCBzdG9yZV9yZWdzX2luX21heDApOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9pbihjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4jI29mZnNldCMjX2lucHV0KTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNvZmZzZXQjI19taW4pOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4jI29mZnNldCMjX21heCk7IFwKLX0gd2hpbGUgKDApCi0KICNkZWZpbmUgc2hvd19mYW5fcmVnKHJlZykgXAogc3RhdGljIHNzaXplX3Qgc2hvd18jI3JlZyAoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikgXAogeyBcCkBAIC01NzUsMTIgKzU2OSw2IEBACiBzeXNmc19mYW5fb2Zmc2V0KDMpOwogc3lzZnNfZmFuX21pbl9vZmZzZXQoMyk7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19pbnB1dCk7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9mYW4jI29mZnNldCMjX21pbik7IFwKLX0gd2hpbGUgKDApCi0KICNkZWZpbmUgc2hvd190ZW1wX3JlZyhyZWcpIFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpIFwKIHsgXApAQCAtNjU1LDEzICs2NDMsNiBAQAogc3lzZnNfdGVtcF9vZmZzZXRzKDIpOwogc3lzZnNfdGVtcF9vZmZzZXRzKDMpOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV90ZW1wKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNvZmZzZXQjI19pbnB1dCk7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNvZmZzZXQjI19tYXgpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfbWF4X2h5c3QpOyBcCi19IHdoaWxlICgwKQotCiBzdGF0aWMgc3NpemVfdAogc2hvd192aWRfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTY2OSw4ICs2NTAsNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsZFxuIiwgKGxvbmcpIHZpZF9mcm9tX3JlZyhkYXRhLT52aWQsIGRhdGEtPnZybSkpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGNwdTBfdmlkLCBTX0lSVUdPLCBzaG93X3ZpZF9yZWcsIE5VTEwpOwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdmlkKGNsaWVudCkgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2NwdTBfdmlkKQogCiBzdGF0aWMgc3NpemVfdAogc2hvd192cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTY5MSw4ICs2NzAsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih2cm0sIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3ZybV9yZWcsIHN0b3JlX3ZybV9yZWcpOwotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdnJtKGNsaWVudCkgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3ZybSkKIAogc3RhdGljIHNzaXplX3QKIHNob3dfYWxhcm1zX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC03MDEsOCArNjc4LDYgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbGRcbiIsIChsb25nKSBkYXRhLT5hbGFybXMpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXNfcmVnLCBOVUxMKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2FsYXJtcyhjbGllbnQpIFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpCiAKICNkZWZpbmUgc2hvd19iZWVwX3JlZyhSRUcsIHJlZykgXAogc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwXyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpIFwKQEAgLTc2NSwxMiArNzQwLDYgQEAKIHN5c2ZzX2JlZXAoRU5BQkxFLCBlbmFibGUpOwogc3lzZnNfYmVlcChNQVNLLCBtYXNrKTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfYmVlcChjbGllbnQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfZW5hYmxlKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2JlZXBfbWFzayk7IFwKLX0gd2hpbGUgKDApCi0KIHN0YXRpYyBzc2l6ZV90CiBzaG93X2Zhbl9kaXZfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCiB7CkBAIC04MzYsMTEgKzgwNSw2IEBACiBzeXNmc19mYW5fZGl2KDIpOwogc3lzZnNfZmFuX2RpdigzKTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuX2RpdihjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19kaXYpOyBcCi19IHdoaWxlICgwKQotCiBzdGF0aWMgc3NpemVfdAogc2hvd19wd21fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCiB7CkBAIC04OTUsMTEgKzg1OSw2IEBACiBzeXNmc19wd20oMik7CiBzeXNmc19wd20oMyk7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3B3bShjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcHdtIyNvZmZzZXQpOyBcCi19IHdoaWxlICgwKQotCiBzdGF0aWMgc3NpemVfdAogc2hvd19zZW5zb3JfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpCiB7CkBAIC05NzEsMTIgKzkzMCw2IEBACiBzeXNmc19zZW5zb3IoMik7CiBzeXNmc19zZW5zb3IoMyk7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3NlbnNvcihjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfdHlwZSk7IFwKLX0gd2hpbGUgKDApCi0KLQogc3RhdGljIGludCBfX2luaXQgdzgzNjI3aGZfZmluZChpbnQgc2lvYWRkciwgdW5zaWduZWQgc2hvcnQgKmFkZHIpCiB7CiAJdTE2IHZhbDsKQEAgLTEwMDgsNiArOTYxLDg1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp3ODM2MjdoZl9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX2luMF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjBfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMl9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW4yX21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjNfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4zX21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjNfbWF4LmF0dHIsCisJJmRldl9hdHRyX2luNF9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjRfbWluLmF0dHIsCisJJmRldl9hdHRyX2luNF9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW43X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luN19taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW43X21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjhfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW44X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjhfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfZmFuMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4xX2Rpdi5hdHRyLAorCSZkZXZfYXR0cl9mYW4yX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfbWluLmF0dHIsCisJJmRldl9hdHRyX2ZhbjJfZGl2LmF0dHIsCisKKwkmZGV2X2F0dHJfdGVtcDFfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX21heF9oeXN0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAxX3R5cGUuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDJfbWF4LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX21heF9oeXN0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAyX3R5cGUuYXR0ciwKKworCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwkmZGV2X2F0dHJfYmVlcF9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfYmVlcF9tYXNrLmF0dHIsCisKKwkmZGV2X2F0dHJfcHdtMS5hdHRyLAorCSZkZXZfYXR0cl9wd20yLmF0dHIsCisKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3ODM2MjdoZl9ncm91cCA9IHsKKwkuYXR0cnMgPSB3ODM2MjdoZl9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnc4MzYyN2hmX2F0dHJpYnV0ZXNfb3B0W10gPSB7CisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9pbjFfbWluLmF0dHIsCisJJmRldl9hdHRyX2luMV9tYXguYXR0ciwKKwkmZGV2X2F0dHJfaW41X2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luNV9taW4uYXR0ciwKKwkmZGV2X2F0dHJfaW41X21heC5hdHRyLAorCSZkZXZfYXR0cl9pbjZfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW42X21pbi5hdHRyLAorCSZkZXZfYXR0cl9pbjZfbWF4LmF0dHIsCisKKwkmZGV2X2F0dHJfZmFuM19pbnB1dC5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX21pbi5hdHRyLAorCSZkZXZfYXR0cl9mYW4zX2Rpdi5hdHRyLAorCisJJmRldl9hdHRyX3RlbXAzX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX21heC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM19tYXhfaHlzdC5hdHRyLAorCSZkZXZfYXR0cl90ZW1wM190eXBlLmF0dHIsCisKKwkmZGV2X2F0dHJfcHdtMy5hdHRyLAorCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNjI3aGZfZ3JvdXBfb3B0ID0geworCS5hdHRycyA9IHc4MzYyN2hmX2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogc3RhdGljIGludCB3ODM2MjdoZl9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQogewogCWludCB2YWwsIGtpbmQ7CkBAIC0xMTA3LDYyICsxMTM5LDcyIEBACiAJZGF0YS0+ZmFuX21pblsxXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTigyKSk7CiAJZGF0YS0+ZmFuX21pblsyXSA9IHc4MzYyN2hmX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfRkFOX01JTigzKSk7CiAKLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLworCS8qIFJlZ2lzdGVyIGNvbW1vbiBkZXZpY2UgYXR0cmlidXRlcyAqLworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnc4MzYyN2hmX2dyb3VwKSkpCisJCWdvdG8gRVJST1IzOworCisJLyogUmVnaXN0ZXIgY2hpcC1zcGVjaWZpYyBkZXZpY2UgYXR0cmlidXRlcyAqLworCWlmIChraW5kID09IHc4MzYyN2hmIHx8IGtpbmQgPT0gdzgzNjk3aGYpCisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjVfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW41X21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjVfbWF4KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNl9pbnB1dCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjZfbWluKSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2luNl9tYXgpKSkKKwkJCWdvdG8gRVJST1I0OworCisJaWYgKGtpbmQgIT0gdzgzNjk3aGYpCisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjFfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfaW4xX21pbikpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9pbjFfbWF4KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX2ZhbjNfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfZmFuM19taW4pKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfZmFuM19kaXYpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfdGVtcDNfaW5wdXQpKQorCQkgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfdGVtcDNfbWF4KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX3RlbXAzX21heF9oeXN0KSkKKwkJIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJJmRldl9hdHRyX3RlbXAzX3R5cGUpKSkKKwkJCWdvdG8gRVJST1I0OworCisJaWYgKGtpbmQgIT0gdzgzNjk3aGYgJiYgZGF0YS0+dmlkICE9IDB4ZmYpCisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9jcHUwX3ZpZCkpCisJCSB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl92cm0pKSkKKwkJCWdvdG8gRVJST1I0OworCisJaWYgKGtpbmQgPT0gdzgzNjI3dGhmIHx8IGtpbmQgPT0gdzgzNjM3aGYgfHwga2luZCA9PSB3ODM2ODd0aGYpCisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSZkZXZfYXR0cl9wd20zKSkpCisJCQlnb3RvIEVSUk9SNDsKKwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIEVSUk9SMzsKKwkJZ290byBFUlJPUjQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDApOwotCWlmIChraW5kICE9IHc4MzY5N2hmKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNCk7Ci0JaWYgKGtpbmQgPT0gdzgzNjI3aGYgfHwga2luZCA9PSB3ODM2OTdoZikgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA2KTsKLQl9Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDcpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA4KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAyKTsKLQlpZiAoa2luZCAhPSB3ODM2OTdoZikKLQkJZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAzKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV90ZW1wKG5ld19jbGllbnQsIDIpOwotCWlmIChraW5kICE9IHc4MzY5N2hmKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAzKTsKLQotCWlmIChraW5kICE9IHc4MzY5N2hmICYmIGRhdGEtPnZpZCAhPSAweGZmKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV92aWQobmV3X2NsaWVudCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV92cm0obmV3X2NsaWVudCk7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2Zhbl9kaXYobmV3X2NsaWVudCwgMSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2Zhbl9kaXYobmV3X2NsaWVudCwgMik7Ci0JaWYgKGtpbmQgIT0gdzgzNjk3aGYpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW5fZGl2KG5ld19jbGllbnQsIDMpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2FsYXJtcyhuZXdfY2xpZW50KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9iZWVwKG5ld19jbGllbnQpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3B3bShuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDIpOwotCWlmIChraW5kID09IHc4MzYyN3RoZiB8fCBraW5kID09IHc4MzYzN2hmIHx8IGtpbmQgPT0gdzgzNjg3dGhmKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDMpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX3NlbnNvcihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKG5ld19jbGllbnQsIDIpOwotCWlmIChraW5kICE9IHc4MzY5N2hmKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKG5ld19jbGllbnQsIDMpOwotCiAJcmV0dXJuIDA7CiAKKyAgICAgIEVSUk9SNDoKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmdzgzNjI3aGZfZ3JvdXApOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZ3ODM2MjdoZl9ncm91cF9vcHQpOwogICAgICAgRVJST1IzOgogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogICAgICAgRVJST1IyOgpAQCAtMTE4MCw2ICsxMjIyLDkgQEAKIAogCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CiAKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZ3ODM2MjdoZl9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNjI3aGZfZ3JvdXBfb3B0KTsKKwogCWlmICgoZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KSkpCiAJCXJldHVybiBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzgxZC5jIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKaW5kZXggN2JlNDY5ZS4uYTQ1ODRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3ODFkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3ODFkLmMKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtaXNhLmg+CiAjaW5jbHVkZSA8bGludXgvaHdtb24uaD4KICNpbmNsdWRlIDxsaW51eC9od21vbi12aWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC0yODgsNiArMjg5LDcgQEAKIAogc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIHc4Mzc4MWRfaXNhX2RyaXZlciA9IHsKIAkuZHJpdmVyID0geworCQkub3duZXIgPSBUSElTX01PRFVMRSwKIAkJLm5hbWUgPSAidzgzNzgxZC1pc2EiLAogCX0sCiAJLmF0dGFjaF9hZGFwdGVyID0gdzgzNzgxZF9pc2FfYXR0YWNoX2FkYXB0ZXIsCkBAIC0zNTksMTMgKzM2MSw2IEBACiBzeXNmc19pbl9vZmZzZXRzKDcpOwogc3lzZnNfaW5fb2Zmc2V0cyg4KTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfaW4oY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNvZmZzZXQjI19pbnB1dCk7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9pbiMjb2Zmc2V0IyNfbWluKTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2luIyNvZmZzZXQjI19tYXgpOyBcCi19IHdoaWxlICgwKQotCiAjZGVmaW5lIHNob3dfZmFuX3JlZyhyZWcpIFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNyZWcgKHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVmLCBpbnQgbnIpIFwKIHsgXApAQCAtNDIwLDEyICs0MTUsNiBAQAogc3lzZnNfZmFuX29mZnNldCgzKTsKIHN5c2ZzX2Zhbl9taW5fb2Zmc2V0KDMpOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9mYW4oY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfaW5wdXQpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfZmFuIyNvZmZzZXQjI19taW4pOyBcCi19IHdoaWxlICgwKQotCiAjZGVmaW5lIHNob3dfdGVtcF9yZWcocmVnKSBcCiBzdGF0aWMgc3NpemVfdCBzaG93XyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKSBcCiB7IFwKQEAgLTQ5NiwxMyArNDg1LDYgQEAKIHN5c2ZzX3RlbXBfb2Zmc2V0cygyKTsKIHN5c2ZzX3RlbXBfb2Zmc2V0cygzKTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChjbGllbnQsIG9mZnNldCkgXAotZG8geyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfaW5wdXQpOyBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfdGVtcCMjb2Zmc2V0IyNfbWF4KTsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3RlbXAjI29mZnNldCMjX21heF9oeXN0KTsgXAotfSB3aGlsZSAoMCkKLQogc3RhdGljIHNzaXplX3QKIHNob3dfdmlkX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CkBAIC01MTAsMTAgKzQ5Miw4IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWxkXG4iLCAobG9uZykgdmlkX2Zyb21fcmVnKGRhdGEtPnZpZCwgZGF0YS0+dnJtKSk7CiB9CiAKLXN0YXRpYwotREVWSUNFX0FUVFIoY3B1MF92aWQsIFNfSVJVR08sIHNob3dfdmlkX3JlZywgTlVMTCk7Ci0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV92aWQoY2xpZW50KSBcCi1kZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY3B1MF92aWQpOworc3RhdGljIERFVklDRV9BVFRSKGNwdTBfdmlkLCBTX0lSVUdPLCBzaG93X3ZpZF9yZWcsIE5VTEwpOworCiBzdGF0aWMgc3NpemVfdAogc2hvd192cm1fcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTUzNCwxMCArNTE0LDggQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYwotREVWSUNFX0FUVFIodnJtLCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd192cm1fcmVnLCBzdG9yZV92cm1fcmVnKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX3ZybShjbGllbnQpIFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl92cm0pOworc3RhdGljIERFVklDRV9BVFRSKHZybSwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdnJtX3JlZywgc3RvcmVfdnJtX3JlZyk7CisKIHN0YXRpYyBzc2l6ZV90CiBzaG93X2FsYXJtc19yZWcoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewpAQCAtNTQ1LDEwICs1MjMsOCBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBkYXRhLT5hbGFybXMpOwogfQogCi1zdGF0aWMKLURFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXNfcmVnLCBOVUxMKTsKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2FsYXJtcyhjbGllbnQpIFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGFybXMpOworc3RhdGljIERFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXNfcmVnLCBOVUxMKTsKKwogc3RhdGljIHNzaXplX3Qgc2hvd19iZWVwX21hc2sgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3QgdzgzNzgxZF9kYXRhICpkYXRhID0gdzgzNzgxZF91cGRhdGVfZGV2aWNlKGRldik7CkBAIC02MTQsMTIgKzU5MCw2IEBACiBzeXNmc19iZWVwKEVOQUJMRSwgZW5hYmxlKTsKIHN5c2ZzX2JlZXAoTUFTSywgbWFzayk7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2JlZXAoY2xpZW50KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9iZWVwX2VuYWJsZSk7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9iZWVwX21hc2spOyBcCi19IHdoaWxlICgwKQotCiBzdGF0aWMgc3NpemVfdAogc2hvd19mYW5fZGl2X3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQogewpAQCAtNjg1LDExICs2NTUsNiBAQAogc3lzZnNfZmFuX2RpdigyKTsKIHN5c2ZzX2Zhbl9kaXYoMyk7CiAKLSNkZWZpbmUgZGV2aWNlX2NyZWF0ZV9maWxlX2Zhbl9kaXYoY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX2ZhbiMjb2Zmc2V0IyNfZGl2KTsgXAotfSB3aGlsZSAoMCkKLQogc3RhdGljIHNzaXplX3QKIHNob3dfcHdtX3JlZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZiwgaW50IG5yKQogewpAQCAtNzg2LDE2ICs3NTEsNiBAQAogc3lzZnNfcHdtKDMpOwogc3lzZnNfcHdtKDQpOwogCi0jZGVmaW5lIGRldmljZV9jcmVhdGVfZmlsZV9wd20oY2xpZW50LCBvZmZzZXQpIFwKLWRvIHsgXAotZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwgJmRldl9hdHRyX3B3bSMjb2Zmc2V0KTsgXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtZW5hYmxlKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9wd20jI29mZnNldCMjX2VuYWJsZSk7IFwKLX0gd2hpbGUgKDApCi0KIHN0YXRpYyBzc2l6ZV90CiBzaG93X3NlbnNvcl9yZWcoc3RydWN0IGRldmljZSAqZGV2LCBjaGFyICpidWYsIGludCBucikKIHsKQEAgLTg2NCwxMSArODE5LDYgQEAKIHN5c2ZzX3NlbnNvcigyKTsKIHN5c2ZzX3NlbnNvcigzKTsKIAotI2RlZmluZSBkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKGNsaWVudCwgb2Zmc2V0KSBcCi1kbyB7IFwKLWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl90ZW1wIyNvZmZzZXQjI190eXBlKTsgXAotfSB3aGlsZSAoMCkKLQogLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbjoKICAgICAgKiB3ODM3ODFkX2RyaXZlciBpcyBpbnNlcnRlZCAod2hlbiB0aGlzIG1vZHVsZSBpcyBsb2FkZWQpLCBmb3IgZWFjaAogICAgICAgIGF2YWlsYWJsZSBhZGFwdGVyCkBAIC05OTMsMTEgKzk0Myw2OSBAQAogCXJldHVybiBlcnI7CiB9CiAKKyNkZWZpbmUgSU5fVU5JVF9BVFRSUyhYKQkJCVwKKwkmZGV2X2F0dHJfaW4jI1gjI19pbnB1dC5hdHRyLAkJXAorCSZkZXZfYXR0cl9pbiMjWCMjX21pbi5hdHRyLAkJXAorCSZkZXZfYXR0cl9pbiMjWCMjX21heC5hdHRyCisKKyNkZWZpbmUgRkFOX1VOSVRfQVRUUlMoWCkJCQlcCisJJmRldl9hdHRyX2ZhbiMjWCMjX2lucHV0LmF0dHIsCQlcCisJJmRldl9hdHRyX2ZhbiMjWCMjX21pbi5hdHRyLAkJXAorCSZkZXZfYXR0cl9mYW4jI1gjI19kaXYuYXR0cgorCisjZGVmaW5lIFRFTVBfVU5JVF9BVFRSUyhYKQkJCVwKKwkmZGV2X2F0dHJfdGVtcCMjWCMjX2lucHV0LmF0dHIsCQlcCisJJmRldl9hdHRyX3RlbXAjI1gjI19tYXguYXR0ciwJCVwKKwkmZGV2X2F0dHJfdGVtcCMjWCMjX21heF9oeXN0LmF0dHIKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUqIHc4Mzc4MWRfYXR0cmlidXRlc1tdID0geworCUlOX1VOSVRfQVRUUlMoMCksCisJSU5fVU5JVF9BVFRSUygyKSwKKwlJTl9VTklUX0FUVFJTKDMpLAorCUlOX1VOSVRfQVRUUlMoNCksCisJSU5fVU5JVF9BVFRSUyg1KSwKKwlJTl9VTklUX0FUVFJTKDYpLAorCUZBTl9VTklUX0FUVFJTKDEpLAorCUZBTl9VTklUX0FUVFJTKDIpLAorCUZBTl9VTklUX0FUVFJTKDMpLAorCVRFTVBfVU5JVF9BVFRSUygxKSwKKwlURU1QX1VOSVRfQVRUUlMoMiksCisJJmRldl9hdHRyX2NwdTBfdmlkLmF0dHIsCisJJmRldl9hdHRyX3ZybS5hdHRyLAorCSZkZXZfYXR0cl9hbGFybXMuYXR0ciwKKwkmZGV2X2F0dHJfYmVlcF9tYXNrLmF0dHIsCisJJmRldl9hdHRyX2JlZXBfZW5hYmxlLmF0dHIsCisJTlVMTAorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHc4Mzc4MWRfZ3JvdXAgPSB7CisJLmF0dHJzID0gdzgzNzgxZF9hdHRyaWJ1dGVzLAorfTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnc4Mzc4MWRfYXR0cmlidXRlc19vcHRbXSA9IHsKKwlJTl9VTklUX0FUVFJTKDEpLAorCUlOX1VOSVRfQVRUUlMoNyksCisJSU5fVU5JVF9BVFRSUyg4KSwKKwlURU1QX1VOSVRfQVRUUlMoMyksCisJJmRldl9hdHRyX3B3bTEuYXR0ciwKKwkmZGV2X2F0dHJfcHdtMi5hdHRyLAorCSZkZXZfYXR0cl9wd20yX2VuYWJsZS5hdHRyLAorCSZkZXZfYXR0cl9wd20zLmF0dHIsCisJJmRldl9hdHRyX3B3bTQuYXR0ciwKKwkmZGV2X2F0dHJfdGVtcDFfdHlwZS5hdHRyLAorCSZkZXZfYXR0cl90ZW1wMl90eXBlLmF0dHIsCisJJmRldl9hdHRyX3RlbXAzX3R5cGUuYXR0ciwKKwlOVUxMCit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgdzgzNzgxZF9ncm91cF9vcHQgPSB7CisJLmF0dHJzID0gdzgzNzgxZF9hdHRyaWJ1dGVzX29wdCwKK307CisKIHN0YXRpYyBpbnQKIHc4Mzc4MWRfZGV0ZWN0KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQogewogCWludCBpID0gMCwgdmFsMSA9IDAsIHZhbDI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKm5ld19jbGllbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJc3RydWN0IHc4Mzc4MWRfZGF0YSAqZGF0YTsKIAlpbnQgZXJyOwogCWNvbnN0IGNoYXIgKmNsaWVudF9uYW1lID0gIiI7CkBAIC0xMDc0LDEzICsxMDgyLDE0IEBACiAJCWdvdG8gRVJST1IxOwogCX0KIAotCW5ld19jbGllbnQgPSAmZGF0YS0+Y2xpZW50OwotCWkyY19zZXRfY2xpZW50ZGF0YShuZXdfY2xpZW50LCBkYXRhKTsKLQluZXdfY2xpZW50LT5hZGRyID0gYWRkcmVzczsKKwljbGllbnQgPSAmZGF0YS0+Y2xpZW50OworCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRhdGEpOworCWNsaWVudC0+YWRkciA9IGFkZHJlc3M7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+bG9jayk7Ci0JbmV3X2NsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JbmV3X2NsaWVudC0+ZHJpdmVyID0gaXNfaXNhID8gJnc4Mzc4MWRfaXNhX2RyaXZlciA6ICZ3ODM3ODFkX2RyaXZlcjsKLQluZXdfY2xpZW50LT5mbGFncyA9IDA7CisJY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKKwljbGllbnQtPmRyaXZlciA9IGlzX2lzYSA/ICZ3ODM3ODFkX2lzYV9kcml2ZXIgOiAmdzgzNzgxZF9kcml2ZXI7CisJY2xpZW50LT5mbGFncyA9IDA7CisJZGV2ID0gJmNsaWVudC0+ZGV2OwogCiAJLyogTm93LCB3ZSBkbyB0aGUgcmVtYWluaW5nIGRldGVjdGlvbi4gKi8KIApAQCAtMTA4OSwyMCArMTA5OCwxOCBAQAogCSAgIGZvcmNlXyo9Li4uIHBhcmFtZXRlciwgYW5kIHRoZSBXaW5ib25kIHdpbGwgYmUgcmVzZXQgdG8gdGhlIHJpZ2h0CiAJICAgYmFuay4gKi8KIAlpZiAoa2luZCA8IDApIHsKLQkJaWYgKHc4Mzc4MWRfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgewotCQkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwICIKLQkJCQkiM1xuIik7CisJCWlmICh3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19DT05GSUcpICYgMHg4MCkgeworCQkJZGV2X2RiZyhkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgM1xuIik7CiAJCQllcnIgPSAtRU5PREVWOwogCQkJZ290byBFUlJPUjI7CiAJCX0KLQkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBXODM3ODFEX1JFR19CQU5LKTsKLQkJdmFsMiA9IHc4Mzc4MWRfcmVhZF92YWx1ZShuZXdfY2xpZW50LCBXODM3ODFEX1JFR19DSElQTUFOKTsKKwkJdmFsMSA9IHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspOworCQl2YWwyID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCS8qIENoZWNrIGZvciBXaW5ib25kIG9yIEFzdXMgSUQgaWYgaW4gYmFuayAwICovCiAJCWlmICgoISh2YWwxICYgMHgwNykpICYmCiAJCSAgICAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgIT0gMHhhMykgJiYgKHZhbDIgIT0gMHhjMykpCiAJCSAgICAgfHwgKCh2YWwxICYgMHg4MCkgJiYgKHZhbDIgIT0gMHg1YykgJiYgKHZhbDIgIT0gMHgxMikpKSkgewotCQkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCBhdCBzdGVwICIKLQkJCQkiNFxuIik7CisJCQlkZXZfZGJnKGRldiwgIkRldGVjdGlvbiBmYWlsZWQgYXQgc3RlcCA0XG4iKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQlnb3RvIEVSUk9SMjsKIAkJfQpAQCAtMTExMSw5ICsxMTE4LDggQEAKIAkJaWYgKCghaXNfaXNhKSAmJiAoKCghKHZhbDEgJiAweDgwKSkgJiYgKHZhbDIgPT0gMHhhMykpIHx8CiAJCQkJICAoKHZhbDEgJiAweDgwKSAmJiAodmFsMiA9PSAweDVjKSkpKSB7CiAJCQlpZiAodzgzNzgxZF9yZWFkX3ZhbHVlCi0JCQkgICAgKG5ld19jbGllbnQsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7Ci0JCQkJZGV2X2RiZygmbmV3X2NsaWVudC0+ZGV2LCAiRGV0ZWN0aW9uIGZhaWxlZCAiCi0JCQkJCSJhdCBzdGVwIDVcbiIpOworCQkJICAgIChjbGllbnQsIFc4Mzc4MURfUkVHX0kyQ19BRERSKSAhPSBhZGRyZXNzKSB7CisJCQkJZGV2X2RiZyhkZXYsICJEZXRlY3Rpb24gZmFpbGVkIGF0IHN0ZXAgNVxuIik7CiAJCQkJZXJyID0gLUVOT0RFVjsKIAkJCQlnb3RvIEVSUk9SMjsKIAkJCX0KQEAgLTExMjIsMjcgKzExMjgsMjYgQEAKIAogCS8qIFdlIGhhdmUgZWl0aGVyIGhhZCBhIGZvcmNlIHBhcmFtZXRlciwgb3Igd2UgaGF2ZSBhbHJlYWR5IGRldGVjdGVkIHRoZQogCSAgIFdpbmJvbmQuIFB1dCBpdCBub3cgaW50byBiYW5rIDAgYW5kIFZlbmRvciBJRCBIaWdoIEJ5dGUgKi8KLQl3ODM3ODFkX3dyaXRlX3ZhbHVlKG5ld19jbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCi0JCQkgICAgKHc4Mzc4MWRfcmVhZF92YWx1ZShuZXdfY2xpZW50LAotCQkJCQkJVzgzNzgxRF9SRUdfQkFOSykgJiAweDc4KSB8Ci0JCQkgICAgMHg4MCk7CisJdzgzNzgxZF93cml0ZV92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkssCisJCQkgICAgKHc4Mzc4MWRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc4MURfUkVHX0JBTkspCisJCQkgICAgICYgMHg3OCkgfCAweDgwKTsKIAogCS8qIERldGVybWluZSB0aGUgY2hpcCB0eXBlLiAqLwogCWlmIChraW5kIDw9IDApIHsKIAkJLyogZ2V0IHZlbmRvciBJRCAqLwotCQl2YWwyID0gdzgzNzgxZF9yZWFkX3ZhbHVlKG5ld19jbGllbnQsIFc4Mzc4MURfUkVHX0NISVBNQU4pOworCQl2YWwyID0gdzgzNzgxZF9yZWFkX3ZhbHVlKGNsaWVudCwgVzgzNzgxRF9SRUdfQ0hJUE1BTik7CiAJCWlmICh2YWwyID09IDB4NWMpCiAJCQl2ZW5kaWQgPSB3aW5ib25kOwogCQllbHNlIGlmICh2YWwyID09IDB4MTIpCiAJCQl2ZW5kaWQgPSBhc3VzOwogCQllbHNlIHsKLQkJCWRldl9kYmcoJm5ld19jbGllbnQtPmRldiwgIkNoaXAgd2FzIG1hZGUgYnkgbmVpdGhlciAiCisJCQlkZXZfZGJnKGRldiwgIkNoaXAgd2FzIG1hZGUgYnkgbmVpdGhlciAiCiAJCQkJIldpbmJvbmQgbm9yIEFzdXM/XG4iKTsKIAkJCWVyciA9IC1FTk9ERVY7CiAJCQlnb3RvIEVSUk9SMjsKIAkJfQogCi0JCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUobmV3X2NsaWVudCwgVzgzNzgxRF9SRUdfV0NISVBJRCk7CisJCXZhbDEgPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3ODFEX1JFR19XQ0hJUElEKTsKIAkJaWYgKCh2YWwxID09IDB4MTAgfHwgdmFsMSA9PSAweDExKSAmJiB2ZW5kaWQgPT0gd2luYm9uZCkKIAkJCWtpbmQgPSB3ODM3ODFkOwogCQllbHNlIGlmICh2YWwxID09IDB4MzAgJiYgdmVuZGlkID09IHdpbmJvbmQpCkBAIC0xMTU2LDcgKzExNjEsNyBAQAogCQkJa2luZCA9IGFzOTkxMjdmOwogCQllbHNlIHsKIAkJCWlmIChraW5kID09IDApCi0JCQkJZGV2X3dhcm4oJm5ld19jbGllbnQtPmRldiwgIklnbm9yaW5nICdmb3JjZScgIgorCQkJCWRldl93YXJuKGRldiwgIklnbm9yaW5nICdmb3JjZScgIgogCQkJCQkgInBhcmFtZXRlciBmb3IgdW5rbm93biBjaGlwIGF0ICIKIAkJCQkJICJhZGFwdGVyICVkLCBhZGRyZXNzIDB4JTAyeFxuIiwKIAkJCQkJIGkyY19hZGFwdGVyX2lkKGFkYXB0ZXIpLCBhZGRyZXNzKTsKQEAgLTExNzgsMjAgKzExODMsMjAgQEAKIAl9CiAKIAkvKiBGaWxsIGluIHRoZSByZW1haW5pbmcgY2xpZW50IGZpZWxkcyBhbmQgcHV0IGludG8gdGhlIGdsb2JhbCBsaXN0ICovCi0Jc3RybGNweShuZXdfY2xpZW50LT5uYW1lLCBjbGllbnRfbmFtZSwgSTJDX05BTUVfU0laRSk7CisJc3RybGNweShjbGllbnQtPm5hbWUsIGNsaWVudF9uYW1lLCBJMkNfTkFNRV9TSVpFKTsKIAlkYXRhLT50eXBlID0ga2luZDsKIAogCWRhdGEtPnZhbGlkID0gMDsKIAltdXRleF9pbml0KCZkYXRhLT51cGRhdGVfbG9jayk7CiAKIAkvKiBUZWxsIHRoZSBJMkMgbGF5ZXIgYSBuZXcgY2xpZW50IGhhcyBhcnJpdmVkICovCi0JaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChuZXdfY2xpZW50KSkpCisJaWYgKChlcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJZ290byBFUlJPUjI7CiAKIAkvKiBhdHRhY2ggc2Vjb25kYXJ5IGkyYyBsbTc1LWxpa2UgY2xpZW50cyAqLwogCWlmICghaXNfaXNhKSB7CiAJCWlmICgoZXJyID0gdzgzNzgxZF9kZXRlY3Rfc3ViY2xpZW50cyhhZGFwdGVyLCBhZGRyZXNzLAotCQkJCWtpbmQsIG5ld19jbGllbnQpKSkKKwkJCQlraW5kLCBjbGllbnQpKSkKIAkJCWdvdG8gRVJST1IzOwogCX0gZWxzZSB7CiAJCWRhdGEtPmxtNzVbMF0gPSBOVUxMOwpAQCAtMTE5OSwxMSArMTIwNCwxMSBAQAogCX0KIAogCS8qIEluaXRpYWxpemUgdGhlIGNoaXAgKi8KLQl3ODM3ODFkX2luaXRfY2xpZW50KG5ld19jbGllbnQpOworCXc4Mzc4MWRfaW5pdF9jbGllbnQoY2xpZW50KTsKIAogCS8qIEEgZmV3IHZhcnMgbmVlZCB0byBiZSBmaWxsZWQgdXBvbiBzdGFydHVwICovCiAJZm9yIChpID0gMTsgaSA8PSAzOyBpKyspIHsKLQkJZGF0YS0+ZmFuX21pbltpIC0gMV0gPSB3ODM3ODFkX3JlYWRfdmFsdWUobmV3X2NsaWVudCwKKwkJZGF0YS0+ZmFuX21pbltpIC0gMV0gPSB3ODM3ODFkX3JlYWRfdmFsdWUoY2xpZW50LAogCQkJCQlXODM3ODFEX1JFR19GQU5fTUlOKGkpKTsKIAl9CiAJaWYgKGtpbmQgIT0gdzgzNzgxZCAmJiBraW5kICE9IGFzOTkxMjdmKQpAQCAtMTIxMSw2NSArMTIxNiw2OCBAQAogCQkJZGF0YS0+cHdtZW5hYmxlW2ldID0gMTsKIAogCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCi0JZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKCZuZXdfY2xpZW50LT5kZXYpOworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwKSkpCisJCWdvdG8gRVJST1I0OworCisJaWYgKGtpbmQgIT0gdzgzNzgzcykgeworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfaW5wdXQpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjFfbWluKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW4xX21heCkpKQorCQkJZ290byBFUlJPUjQ7CisJfQorCWlmIChraW5kICE9IGFzOTkxMjdmICYmIGtpbmQgIT0gdzgzNzgxZCAmJiBraW5kICE9IHc4Mzc4M3MpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW43X2lucHV0KSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW43X21pbikpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2luN19tYXgpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjhfaW5wdXQpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9pbjhfbWluKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfaW44X21heCkpKQorCQkJZ290byBFUlJPUjQ7CisJfQorCWlmIChraW5kICE9IHc4Mzc4M3MpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfdGVtcDNfaW5wdXQpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl90ZW1wM19tYXgpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCQkgJmRldl9hdHRyX3RlbXAzX21heF9oeXN0KSkpCisJCQlnb3RvIEVSUk9SNDsKKwl9CisKKwlpZiAoa2luZCAhPSB3ODM3ODFkICYmIGtpbmQgIT0gYXM5OTEyN2YpIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHdtMSkpCisJCSAgICB8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3B3bTIpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20yX2VuYWJsZSkpKQorCQkJZ290byBFUlJPUjQ7CisJfQorCWlmIChraW5kID09IHc4Mzc4MmQgJiYgIWlzX2lzYSkgeworCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9wd20zKSkKKwkJICAgIHx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfcHdtNCkpKQorCQkJZ290byBFUlJPUjQ7CisJfQorCisJaWYgKGtpbmQgIT0gYXM5OTEyN2YgJiYga2luZCAhPSB3ODM3ODFkKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX3RlbXAxX3R5cGUpKQorCQkgICAgfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCQkgJmRldl9hdHRyX3RlbXAyX3R5cGUpKSkKKwkJCWdvdG8gRVJST1I0OworCQlpZiAoa2luZCAhPSB3ODM3ODNzKSB7CisJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJCQkgICAgICAmZGV2X2F0dHJfdGVtcDNfdHlwZSkpKQorCQkJCWdvdG8gRVJST1I0OworCQl9CisJfQorCisJZGF0YS0+Y2xhc3NfZGV2ID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyKGRldik7CiAJaWYgKElTX0VSUihkYXRhLT5jbGFzc19kZXYpKSB7CiAJCWVyciA9IFBUUl9FUlIoZGF0YS0+Y2xhc3NfZGV2KTsKIAkJZ290byBFUlJPUjQ7CiAJfQogCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDApOwotCWlmIChraW5kICE9IHc4Mzc4M3MpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgMik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDMpOwotCWRldmljZV9jcmVhdGVfZmlsZV9pbihuZXdfY2xpZW50LCA0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgNSk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDYpOwotCWlmIChraW5kICE9IGFzOTkxMjdmICYmIGtpbmQgIT0gdzgzNzgxZCAmJiBraW5kICE9IHc4Mzc4M3MpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlX2luKG5ld19jbGllbnQsIDcpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfaW4obmV3X2NsaWVudCwgOCk7Ci0JfQotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW4obmV3X2NsaWVudCwgMyk7Ci0KLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAxKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAyKTsKLQlpZiAoa2luZCAhPSB3ODM3ODNzKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfdGVtcChuZXdfY2xpZW50LCAzKTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV92aWQobmV3X2NsaWVudCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlX3ZybShuZXdfY2xpZW50KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9mYW5fZGl2KG5ld19jbGllbnQsIDEpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW5fZGl2KG5ld19jbGllbnQsIDIpOwotCWRldmljZV9jcmVhdGVfZmlsZV9mYW5fZGl2KG5ld19jbGllbnQsIDMpOwotCi0JZGV2aWNlX2NyZWF0ZV9maWxlX2FsYXJtcyhuZXdfY2xpZW50KTsKLQotCWRldmljZV9jcmVhdGVfZmlsZV9iZWVwKG5ld19jbGllbnQpOwotCi0JaWYgKGtpbmQgIT0gdzgzNzgxZCAmJiBraW5kICE9IGFzOTkxMjdmKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV9wd20obmV3X2NsaWVudCwgMSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV9wd20obmV3X2NsaWVudCwgMik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZV9wd21lbmFibGUobmV3X2NsaWVudCwgMik7Ci0JfQotCWlmIChraW5kID09IHc4Mzc4MmQgJiYgIWlzX2lzYSkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDMpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfcHdtKG5ld19jbGllbnQsIDQpOwotCX0KLQotCWlmIChraW5kICE9IGFzOTkxMjdmICYmIGtpbmQgIT0gdzgzNzgxZCkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKG5ld19jbGllbnQsIDEpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfc2Vuc29yKG5ld19jbGllbnQsIDIpOwotCQlpZiAoa2luZCAhPSB3ODM3ODNzKQotCQkJZGV2aWNlX2NyZWF0ZV9maWxlX3NlbnNvcihuZXdfY2xpZW50LCAzKTsKLQl9Ci0KIAlyZXR1cm4gMDsKIAogRVJST1I0OgorCXN5c2ZzX3JlbW92ZV9ncm91cCgmZGV2LT5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3ODFkX2dyb3VwX29wdCk7CisKIAlpZiAoZGF0YS0+bG03NVsxXSkgewogCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzFdKTsKIAkJa2ZyZWUoZGF0YS0+bG03NVsxXSk7CkBAIC0xMjc5LDcgKzEyODcsNyBAQAogCQlrZnJlZShkYXRhLT5sbTc1WzBdKTsKIAl9CiBFUlJPUjM6Ci0JaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CisJaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIEVSUk9SMjoKIAlrZnJlZShkYXRhKTsKIEVSUk9SMToKQEAgLTEyOTYsOSArMTMwNCwxMSBAQAogCWludCBlcnI7CiAKIAkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKQorCWlmIChkYXRhKSB7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7Ci0KKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZjbGllbnQtPmRldi5rb2JqLCAmdzgzNzgxZF9ncm91cCk7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc4MWRfZ3JvdXBfb3B0KTsKKwl9CiAJaWYgKGkyY19pc19pc2FfY2xpZW50KGNsaWVudCkpCiAJCXJlbGVhc2VfcmVnaW9uKGNsaWVudC0+YWRkciwgVzgzNzgxRF9FWFRFTlQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL3c4Mzc5MWQuYyBiL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCmluZGV4IGVlYzQzYWIuLmQ5NjVkMDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vdzgzNzkxZC5jCkBAIC0yNyw5ICsyNyw5IEBACiAKICAgICBUaGUgdzgzNzkxZCBjaGlwIGFwcGVhcnMgdG8gYmUgcGFydCB3YXkgYmV0d2VlbiB0aGUgODM3ODFkIGFuZCB0aGUKICAgICA4Mzc5MmQuIFRodXMsIHRoaXMgZmlsZSBpcyBkZXJpdmVkIGZyb20gYm90aCB0aGUgdzgzNzkyZC5jIGFuZAotICAgIHc4Mzc4MWQuYyBmaWxlcywgYnV0IGl0cyBvdXRwdXQgaXMgbW9yZSBhbG9uZyB0aGUgbGluZXMgb2YgdGhlCi0gICAgODM3ODFkICh3aGljaCBtZWFucyB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgdXNlci1tb2RlIHNlbnNvcnMKLSAgICBwcm9ncmFtIHdoaWNoIHRyZWF0cyB0aGUgODM3OTFkIGFzIGFuIDgzNzgxZCkuCisgICAgdzgzNzgxZC5jIGZpbGVzLgorCisgICAgVGhlIHc4Mzc5MWcgY2hpcCBpcyB0aGUgc2FtZSBhcyB0aGUgdzgzNzkxZCBidXQgbGVhZC1mcmVlLgogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgpAQCAtMTE3Miw2ICsxMTcyLDcgQEAKIAkJCSh3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19CRUVQX0NUUkxbMV0pIDw8IDgpICsKIAkJCSh3ODM3OTFkX3JlYWQoY2xpZW50LCBXODM3OTFEX1JFR19CRUVQX0NUUkxbMl0pIDw8IDE2KTsKIAorCQkvKiBFeHRyYWN0IGdsb2JhbCBiZWVwIGVuYWJsZSBmbGFnICovCiAJCWRhdGEtPmJlZXBfZW5hYmxlID0KIAkJCShkYXRhLT5iZWVwX21hc2sgPj4gR0xPQkFMX0JFRVBfRU5BQkxFX1NISUZUKSAmIDB4MDE7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNzkyZC5jIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKaW5kZXggNzU3NmVjOS4uNGUxMDgyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODM3OTJkLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM3OTJkLmMKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9od21vbi1zeXNmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KIAogLyogQWRkcmVzc2VzIHRvIHNjYW4gKi8KIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsIEkyQ19DTElFTlRfRU5EIH07CkBAIC0zODEsNDEgKzM4Miw2IEBACiBzdG9yZV9pbl9yZWcoTUlOLCBtaW4pOwogc3RvcmVfaW5fcmVnKE1BWCwgbWF4KTsKIAotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBzZGFfaW5faW5wdXRbXSA9IHsKLQlTRU5TT1JfQVRUUihpbjBfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDApLAotCVNFTlNPUl9BVFRSKGluMV9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgMSksCi0JU0VOU09SX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAyKSwKLQlTRU5TT1JfQVRUUihpbjNfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDMpLAotCVNFTlNPUl9BVFRSKGluNF9pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNCksCi0JU0VOU09SX0FUVFIoaW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA1KSwKLQlTRU5TT1JfQVRUUihpbjZfaW5wdXQsIFNfSVJVR08sIHNob3dfaW4sIE5VTEwsIDYpLAotCVNFTlNPUl9BVFRSKGluN19pbnB1dCwgU19JUlVHTywgc2hvd19pbiwgTlVMTCwgNyksCi0JU0VOU09SX0FUVFIoaW44X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA4KSwKLX07Ci1zdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9pbl9taW5bXSA9IHsKLSAgICAgICBTRU5TT1JfQVRUUihpbjBfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgMCksCi0gICAgICAgU0VOU09SX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDEpLAotICAgICAgIFNFTlNPUl9BVFRSKGluMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAyKSwKLSAgICAgICBTRU5TT1JfQVRUUihpbjNfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgMyksCi0gICAgICAgU0VOU09SX0FUVFIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDQpLAotICAgICAgIFNFTlNPUl9BVFRSKGluNV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA1KSwKLSAgICAgICBTRU5TT1JfQVRUUihpbjZfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9taW4sIHN0b3JlX2luX21pbiwgNiksCi0gICAgICAgU0VOU09SX0FUVFIoaW43X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWluLCBzdG9yZV9pbl9taW4sIDcpLAotICAgICAgIFNFTlNPUl9BVFRSKGluOF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA4KSwKLX07Ci1zdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9pbl9tYXhbXSA9IHsKLSAgICAgICBTRU5TT1JfQVRUUihpbjBfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgMCksCi0gICAgICAgU0VOU09SX0FUVFIoaW4xX21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDEpLAotICAgICAgIFNFTlNPUl9BVFRSKGluMl9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAyKSwKLSAgICAgICBTRU5TT1JfQVRUUihpbjNfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgMyksCi0gICAgICAgU0VOU09SX0FUVFIoaW40X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDQpLAotICAgICAgIFNFTlNPUl9BVFRSKGluNV9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA1KSwKLSAgICAgICBTRU5TT1JfQVRUUihpbjZfbWF4LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19pbl9tYXgsIHN0b3JlX2luX21heCwgNiksCi0gICAgICAgU0VOU09SX0FUVFIoaW43X21heCwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfaW5fbWF4LCBzdG9yZV9pbl9tYXgsIDcpLAotICAgICAgIFNFTlNPUl9BVFRSKGluOF9tYXgsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA4KSwKLX07Ci0KLQogI2RlZmluZSBzaG93X2Zhbl9yZWcocmVnKSBcCiBzdGF0aWMgc3NpemVfdCBzaG93XyMjcmVnIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBcCiAJCQljaGFyICpidWYpIFwKQEAgLTQ5OSwzNSArNDY1LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX2Zhbl9pbnB1dFtdID0gewotCVNFTlNPUl9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKSwKLQlTRU5TT1JfQVRUUihmYW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMiksCi0JU0VOU09SX0FUVFIoZmFuM19pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDMpLAotCVNFTlNPUl9BVFRSKGZhbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA0KSwKLQlTRU5TT1JfQVRUUihmYW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgNSksCi0JU0VOU09SX0FUVFIoZmFuNl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDYpLAotCVNFTlNPUl9BVFRSKGZhbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA3KSwKLX07Ci1zdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV9mYW5fbWluW10gPSB7Ci0JU0VOU09SX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDEpLAotCVNFTlNPUl9BVFRSKGZhbjJfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAyKSwKLQlTRU5TT1JfQVRUUihmYW4zX21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc3RvcmVfZmFuX21pbiwgMyksCi0JU0VOU09SX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDQpLAotCVNFTlNPUl9BVFRSKGZhbjVfbWluLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA1KSwKLQlTRU5TT1JfQVRUUihmYW42X21pbiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX21pbiwgc3RvcmVfZmFuX21pbiwgNiksCi0JU0VOU09SX0FUVFIoZmFuN19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9taW4sIHN0b3JlX2Zhbl9taW4sIDcpLAotfTsKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX2Zhbl9kaXZbXSA9IHsKLQlTRU5TT1JfQVRUUihmYW4xX2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgMSksCi0JU0VOU09SX0FUVFIoZmFuMl9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDIpLAotCVNFTlNPUl9BVFRSKGZhbjNfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAzKSwKLQlTRU5TT1JfQVRUUihmYW40X2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNCksCi0JU0VOU09SX0FUVFIoZmFuNV9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2Zhbl9kaXYsIHN0b3JlX2Zhbl9kaXYsIDUpLAotCVNFTlNPUl9BVFRSKGZhbjZfZGl2LCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA2KSwKLQlTRU5TT1JfQVRUUihmYW43X2RpdiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNyksCi19OwotCi0KIC8qIHJlYWQvd3JpdGUgdGhlIHRlbXBlcmF0dXJlMSwgaW5jbHVkZXMgbWVhc3VyZWQgdmFsdWUgYW5kIGxpbWl0cyAqLwogCiBzdGF0aWMgc3NpemVfdCBzaG93X3RlbXAxKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC01OTUsMjQgKzUzMiw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlXzIgc2RhX3RlbXBfaW5wdXRbXSA9IHsKLQlTRU5TT1JfQVRUUl8yKHRlbXAxX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAxLCBOVUxMLCAwLCAwKSwKLQlTRU5TT1JfQVRUUl8yKHRlbXAyX2lucHV0LCBTX0lSVUdPLCBzaG93X3RlbXAyMywgTlVMTCwgMCwgMCksCi0JU0VOU09SX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMjMsIE5VTEwsIDEsIDApLAotfTsKLQotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNkYV90ZW1wX21heFtdID0gewotCVNFTlNPUl9BVFRSXzIodGVtcDFfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMSwgc3RvcmVfdGVtcDEsIDAsIDEpLAotCVNFTlNPUl9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgMCwgMiksCi0JU0VOU09SX0FUVFJfMih0ZW1wM19tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAyMywgc3RvcmVfdGVtcDIzLCAxLCAyKSwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGVfMiBzZGFfdGVtcF9tYXhfaHlzdFtdID0gewotCVNFTlNPUl9BVFRSXzIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAxLCBzdG9yZV90ZW1wMSwgMCwgMiksCi0JU0VOU09SX0FUVFJfMih0ZW1wMl9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDIzLCBzdG9yZV90ZW1wMjMsIDAsIDQpLAotCVNFTlNPUl9BVFRSXzIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAyMywgc3RvcmVfdGVtcDIzLCAxLCA0KSwKLX07Ci0KIC8qIGdldCByZWF0aW1lIHN0YXR1cyBvZiBhbGwgc2Vuc29ycyBpdGVtczogdm9sdGFnZSwgdGVtcCwgZmFuICovCiBzdGF0aWMgc3NpemVfdAogc2hvd19hbGFybXNfcmVnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTYyMSw5ICs1NDAsNiBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBkYXRhLT5hbGFybXMpOwogfQogCi1zdGF0aWMKLURFVklDRV9BVFRSKGFsYXJtcywgU19JUlVHTywgc2hvd19hbGFybXNfcmVnLCBOVUxMKTsKLQogc3RhdGljIHNzaXplX3QKIHNob3dfcHdtKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCiAJCWNoYXIgKmJ1ZikKQEAgLTcxNSwyMSArNjMxLDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bVtdID0gewotCVNFTlNPUl9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAwKSwKLQlTRU5TT1JfQVRUUihwd20yLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHN0b3JlX3B3bSwgMSksCi0JU0VOU09SX0FUVFIocHdtMywgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzdG9yZV9wd20sIDIpLAotfTsKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bV9lbmFibGVbXSA9IHsKLQlTRU5TT1JfQVRUUihwd20xX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAxKSwKLQlTRU5TT1JfQVRUUihwd20yX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAyKSwKLQlTRU5TT1JfQVRUUihwd20zX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAzKSwKLX07Ci0KLQogc3RhdGljIHNzaXplX3QKIHNob3dfcHdtX21vZGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCWNoYXIgKmJ1ZikKQEAgLTc2NywxNiArNjY4LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3B3bV9tb2RlW10gPSB7Ci0JU0VOU09SX0FUVFIocHdtMV9tb2RlLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgIHNob3dfcHdtX21vZGUsIHN0b3JlX3B3bV9tb2RlLCAwKSwKLQlTRU5TT1JfQVRUUihwd20yX21vZGUsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICAgc2hvd19wd21fbW9kZSwgc3RvcmVfcHdtX21vZGUsIDEpLAotCVNFTlNPUl9BVFRSKHB3bTNfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgMiksCi19OwotCi0KIHN0YXRpYyBzc2l6ZV90CiBzaG93X3JlZ3NfY2hhc3NpcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQkJY2hhciAqYnVmKQpAQCAtNzg1LDggKzY3Niw2IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGRhdGEtPmNoYXNzaXMpOwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIoY2hhc3NpcywgU19JUlVHTywgc2hvd19yZWdzX2NoYXNzaXMsIE5VTEwpOwotCiBzdGF0aWMgc3NpemVfdAogc2hvd19jaGFzc2lzX2NsZWFyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKQEAgLTgxNSw5ICs3MDQsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKGNoYXNzaXNfY2xlYXIsIFNfSVJVR08gfCBTX0lXVVNSLAotCQlzaG93X2NoYXNzaXNfY2xlYXIsIHN0b3JlX2NoYXNzaXNfY2xlYXIpOwotCiAvKiBGb3IgU21hcnQgRmFuIEkgLyBUaGVybWFsIENydWlzZSAqLwogc3RhdGljIHNzaXplX3QKIHNob3dfdGhlcm1hbF9jcnVpc2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKQEAgLTg1MywxNSArNzM5LDYgQEAKIAlyZXR1cm4gY291bnQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RoZXJtYWxfY3J1aXNlW10gPSB7Ci0JU0VOU09SX0FUVFIodGhlcm1hbF9jcnVpc2UxLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgIHNob3dfdGhlcm1hbF9jcnVpc2UsIHN0b3JlX3RoZXJtYWxfY3J1aXNlLCAxKSwKLQlTRU5TT1JfQVRUUih0aGVybWFsX2NydWlzZTIsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICAgc2hvd190aGVybWFsX2NydWlzZSwgc3RvcmVfdGhlcm1hbF9jcnVpc2UsIDIpLAotCVNFTlNPUl9BVFRSKHRoZXJtYWxfY3J1aXNlMywgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgMyksCi19OwotCiAvKiBGb3IgU21hcnQgRmFuIEkvVGhlcm1hbCBDcnVpc2UgYW5kIFNtYXJ0IEZhbiBJSSAqLwogc3RhdGljIHNzaXplX3QKIHNob3dfdG9sZXJhbmNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCkBAIC05MDEsMTUgKzc3OCw2IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90b2xlcmFuY2VbXSA9IHsKLQlTRU5TT1JfQVRUUih0b2xlcmFuY2UxLCBTX0lXVVNSIHwgU19JUlVHTywKLQkJICAgIHNob3dfdG9sZXJhbmNlLCBzdG9yZV90b2xlcmFuY2UsIDEpLAotCVNFTlNPUl9BVFRSKHRvbGVyYW5jZTIsIFNfSVdVU1IgfCBTX0lSVUdPLAotCQkgICAgc2hvd190b2xlcmFuY2UsIHN0b3JlX3RvbGVyYW5jZSwgMiksCi0JU0VOU09SX0FUVFIodG9sZXJhbmNlMywgU19JV1VTUiB8IFNfSVJVR08sCi0JCSAgICBzaG93X3RvbGVyYW5jZSwgc3RvcmVfdG9sZXJhbmNlLCAzKSwKLX07Ci0KIC8qIEZvciBTbWFydCBGYW4gSUkgKi8KIHN0YXRpYyBzc2l6ZV90CiBzaG93X3NmMl9wb2ludChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApAQCAtOTQ2LDM2ICs4MTQsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNkYV9zZjJfcG9pbnRbXSA9IHsKLQlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDFfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDEsIDEpLAotCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50Ml9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMiwgMSksCi0JU0VOU09SX0FUVFJfMihzZjJfcG9pbnQzX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAzLCAxKSwKLQlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDRfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDQsIDEpLAotCi0JU0VOU09SX0FUVFJfMihzZjJfcG9pbnQxX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAxLCAyKSwKLQlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDJfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDIsIDIpLAotCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50M19mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMywgMiksCi0JU0VOU09SX0FUVFJfMihzZjJfcG9pbnQ0X2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCA0LCAyKSwKLQotCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50MV9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMSwgMyksCi0JU0VOU09SX0FUVFJfMihzZjJfcG9pbnQyX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAyLCAzKSwKLQlTRU5TT1JfQVRUUl8yKHNmMl9wb2ludDNfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDMsIDMpLAotCVNFTlNPUl9BVFRSXzIoc2YyX3BvaW50NF9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgNCwgMyksCi19OwotCi0KIHN0YXRpYyBzc2l6ZV90CiBzaG93X3NmMl9sZXZlbChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljaGFyICpidWYpCkBAIC0xMDE2LDI5ICs4NTQsNiBAQAogCXJldHVybiBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZV8yIHNkYV9zZjJfbGV2ZWxbXSA9IHsKLQlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDFfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDEsIDEpLAotCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsMl9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMiwgMSksCi0JU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwzX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAzLCAxKSwKLQotCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsMV9mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMSwgMiksCi0JU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwyX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAyLCAyKSwKLQlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDNfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDMsIDIpLAotCi0JU0VOU09SX0FUVFJfMihzZjJfbGV2ZWwxX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkgICAgICBzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAxLCAzKSwKLQlTRU5TT1JfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCi0JCSAgICAgIHNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDIsIDMpLAotCVNFTlNPUl9BVFRSXzIoc2YyX2xldmVsM19mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKLQkJICAgICAgc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMyksCi19OwotCiAvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuOgogICAgICAqIHc4Mzc5MmRfZHJpdmVyIGlzIGluc2VydGVkICh3aGVuIHRoaXMgbW9kdWxlIGlzIGxvYWRlZCksIGZvciBlYWNoCiAgICAgICAgYXZhaWxhYmxlIGFkYXB0ZXIKQEAgLTExMzksMTIgKzk1NCwyOTcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZCBkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKHN0cnVjdCBkZXZpY2UgKmRldiwgaW50IGkpCi17Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9mYW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfZmFuX2RpdltpXS5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV9mYW5fbWluW2ldLmRldl9hdHRyKTsKLX0KK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW42X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW44X2lucHV0LCBTX0lSVUdPLCBzaG93X2luLCBOVUxMLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW42X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW44X21pbiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21pbiwgc3RvcmVfaW5fbWluLCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4wX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4xX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4yX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW4zX21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW40X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW41X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW42X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW43X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoaW44X21heCwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X2luX21heCwgc3RvcmVfaW5fbWF4LCA4KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCwgMCwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcDIzLCBOVUxMLCAwLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wM19pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMjMsIE5VTEwsIDEsIDApOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAxX21heCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3RlbXAxLCBzdG9yZV90ZW1wMSwgMCwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wMjMsCisJCQlzdG9yZV90ZW1wMjMsIDAsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDIzLAorCQkJc3RvcmVfdGVtcDIzLCAxLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMih0ZW1wMV9tYXhfaHlzdCwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3RlbXAxLCBzdG9yZV90ZW1wMSwgMCwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDJfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgMCwgNCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd190ZW1wMjMsIHN0b3JlX3RlbXAyMywgMSwgNCk7CitzdGF0aWMgREVWSUNFX0FUVFIoYWxhcm1zLCBTX0lSVUdPLCBzaG93X2FsYXJtc19yZWcsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGNoYXNzaXMsIFNfSVJVR08sIHNob3dfcmVnc19jaGFzc2lzLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihjaGFzc2lzX2NsZWFyLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfY2hhc3Npc19jbGVhciwgc3RvcmVfY2hhc3Npc19jbGVhcik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTEsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3B3bSwgc3RvcmVfcHdtLCAwKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtMiwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfcHdtLCBzdG9yZV9wd20sIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20zLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19wd20sIHN0b3JlX3B3bSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywKKwkJCXNob3dfcHdtZW5hYmxlLCBzdG9yZV9wd21lbmFibGUsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihwd20yX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bWVuYWJsZSwgc3RvcmVfcHdtZW5hYmxlLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIocHdtM19lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19wd21lbmFibGUsIHN0b3JlX3B3bWVuYWJsZSwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTFfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgMCk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTJfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHB3bTNfbW9kZSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3B3bV9tb2RlLCBzdG9yZV9wd21fbW9kZSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRvbGVyYW5jZTEsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190b2xlcmFuY2UsIHN0b3JlX3RvbGVyYW5jZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRvbGVyYW5jZTIsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190b2xlcmFuY2UsIHN0b3JlX3RvbGVyYW5jZSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRvbGVyYW5jZTMsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd190b2xlcmFuY2UsIHN0b3JlX3RvbGVyYW5jZSwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRoZXJtYWxfY3J1aXNlMSwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRoZXJtYWxfY3J1aXNlMiwgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKHRoZXJtYWxfY3J1aXNlMywgU19JV1VTUiB8IFNfSVJVR08sCisJCQlzaG93X3RoZXJtYWxfY3J1aXNlLCBzdG9yZV90aGVybWFsX2NydWlzZSwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX3BvaW50MV9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDEsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9wb2ludDJfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAyLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfcG9pbnQzX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX3BvaW50NF9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDQsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9wb2ludDFfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAxLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfcG9pbnQyX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMiwgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX3BvaW50M19mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDMsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9wb2ludDRfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCA0LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfcG9pbnQxX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgMSwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX3BvaW50Ml9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX3BvaW50LCBzdG9yZV9zZjJfcG9pbnQsIDIsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9wb2ludDNfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9wb2ludCwgc3RvcmVfc2YyX3BvaW50LCAzLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfcG9pbnQ0X2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfcG9pbnQsIHN0b3JlX3NmMl9wb2ludCwgNCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX2xldmVsMV9mYW4xLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDEsIDEpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMSwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAyLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfbGV2ZWwzX2ZhbjEsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMSk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX2xldmVsMV9mYW4yLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDEsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMiwgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAyLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfbGV2ZWwzX2ZhbjIsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSXzIoc2YyX2xldmVsMV9mYW4zLCBTX0lSVUdPIHwgU19JV1VTUiwKKwkJCXNob3dfc2YyX2xldmVsLCBzdG9yZV9zZjJfbGV2ZWwsIDEsIDMpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUl8yKHNmMl9sZXZlbDJfZmFuMywgU19JUlVHTyB8IFNfSVdVU1IsCisJCQlzaG93X3NmMl9sZXZlbCwgc3RvcmVfc2YyX2xldmVsLCAyLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFJfMihzZjJfbGV2ZWwzX2ZhbjMsIFNfSVJVR08gfCBTX0lXVVNSLAorCQkJc2hvd19zZjJfbGV2ZWwsIHN0b3JlX3NmMl9sZXZlbCwgMywgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjFfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDIpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW4zX2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgMyk7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjRfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNV9pbnB1dCwgU19JUlVHTywgc2hvd19mYW4sIE5VTEwsIDUpOworc3RhdGljIFNFTlNPUl9ERVZJQ0VfQVRUUihmYW42X2lucHV0LCBTX0lSVUdPLCBzaG93X2ZhbiwgTlVMTCwgNik7CitzdGF0aWMgU0VOU09SX0RFVklDRV9BVFRSKGZhbjdfaW5wdXQsIFNfSVJVR08sIHNob3dfZmFuLCBOVUxMLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNV9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNl9taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuN19taW4sIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fbWluLCBzdG9yZV9mYW5fbWluLCA3KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMV9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAxKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuMl9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAyKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuM19kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCAzKTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNF9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA0KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNV9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA1KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuNl9kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA2KTsKK3N0YXRpYyBTRU5TT1JfREVWSUNFX0FUVFIoZmFuN19kaXYsIFNfSVdVU1IgfCBTX0lSVUdPLAorCQkJc2hvd19mYW5fZGl2LCBzdG9yZV9mYW5fZGl2LCA3KTsKKworc3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKnc4Mzc5MmRfYXR0cmlidXRlc19mYW5bNF1bNF0gPSB7CisJeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW40X21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjRfZGl2LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9LCB7CisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjVfbWluLmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNV9kaXYuZGV2X2F0dHIuYXR0ciwKKwkJTlVMTAorCX0sIHsKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW42X2lucHV0LmRldl9hdHRyLmF0dHIsCisJCSZzZW5zb3JfZGV2X2F0dHJfZmFuNl9taW4uZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW42X2Rpdi5kZXZfYXR0ci5hdHRyLAorCQlOVUxMCisJfSwgeworCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkJJnNlbnNvcl9kZXZfYXR0cl9mYW43X21pbi5kZXZfYXR0ci5hdHRyLAorCQkmc2Vuc29yX2Rldl9hdHRyX2ZhbjdfZGl2LmRldl9hdHRyLmF0dHIsCisJCU5VTEwKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCB3ODM3OTJkX2dyb3VwX2Zhbls0XSA9IHsKKwl7IC5hdHRycyA9IHc4Mzc5MmRfYXR0cmlidXRlc19mYW5bMF0gfSwKKwl7IC5hdHRycyA9IHc4Mzc5MmRfYXR0cmlidXRlc19mYW5bMV0gfSwKKwl7IC5hdHRycyA9IHc4Mzc5MmRfYXR0cmlidXRlc19mYW5bMl0gfSwKKwl7IC5hdHRycyA9IHc4Mzc5MmRfYXR0cmlidXRlc19mYW5bM10gfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICp3ODM3OTJkX2F0dHJpYnV0ZXNbXSA9IHsKKwkmc2Vuc29yX2Rldl9hdHRyX2luMF9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4wX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4xX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjFfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjJfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luMl9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luM19pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW4zX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW40X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjRfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjVfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luNl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW42X21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfaW43X2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjdfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9pbjhfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2luOF9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heF9oeXN0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDJfbWF4LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90ZW1wMl9tYXhfaHlzdC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RlbXAzX21heC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGVtcDNfbWF4X2h5c3QuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTFfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMV9lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTJfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtMl9lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3B3bTNfbW9kZS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfcHdtM19lbmFibGUuZGV2X2F0dHIuYXR0ciwKKwkmZGV2X2F0dHJfYWxhcm1zLmF0dHIsCisJJmRldl9hdHRyX2NoYXNzaXMuYXR0ciwKKwkmZGV2X2F0dHJfY2hhc3Npc19jbGVhci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdG9sZXJhbmNlMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfdGhlcm1hbF9jcnVpc2UxLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90b2xlcmFuY2UyLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl90aGVybWFsX2NydWlzZTIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RvbGVyYW5jZTMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3RoZXJtYWxfY3J1aXNlMy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX3BvaW50MV9mYW4xLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfcG9pbnQyX2ZhbjEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9wb2ludDNfZmFuMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX3BvaW50NF9mYW4xLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfcG9pbnQxX2ZhbjIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9wb2ludDJfZmFuMi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX3BvaW50M19mYW4yLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfcG9pbnQ0X2ZhbjIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9wb2ludDFfZmFuMy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX3BvaW50Ml9mYW4zLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfcG9pbnQzX2ZhbjMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9wb2ludDRfZmFuMy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX2xldmVsMV9mYW4xLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfbGV2ZWwyX2ZhbjEuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9sZXZlbDNfZmFuMS5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX2xldmVsMV9mYW4yLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfbGV2ZWwyX2ZhbjIuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9sZXZlbDNfZmFuMi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfc2YyX2xldmVsMV9mYW4zLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9zZjJfbGV2ZWwyX2ZhbjMuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX3NmMl9sZXZlbDNfZmFuMy5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9pbnB1dC5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMV9taW4uZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjFfZGl2LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX2lucHV0LmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4yX21pbi5kZXZfYXR0ci5hdHRyLAorCSZzZW5zb3JfZGV2X2F0dHJfZmFuMl9kaXYuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfaW5wdXQuZGV2X2F0dHIuYXR0ciwKKwkmc2Vuc29yX2Rldl9hdHRyX2ZhbjNfbWluLmRldl9hdHRyLmF0dHIsCisJJnNlbnNvcl9kZXZfYXR0cl9mYW4zX2Rpdi5kZXZfYXR0ci5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHc4Mzc5MmRfZ3JvdXAgPSB7CisJLmF0dHJzID0gdzgzNzkyZF9hdHRyaWJ1dGVzLAorfTsKIAogc3RhdGljIGludAogdzgzNzkyZF9kZXRlY3Qoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCBpbnQgYWRkcmVzcywgaW50IGtpbmQpCkBAIC0xMjY4LDU5ICsxMzY4LDQ2IEBACiAJfQogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKi8KLQlkYXRhLT5jbGFzc19kZXYgPSBod21vbl9kZXZpY2VfcmVnaXN0ZXIoZGV2KTsKLQlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKLQkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOworCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3OTJkX2dyb3VwKSkpCiAJCWdvdG8gRVJST1IzOwotCX0KLQlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX2luX21heFtpXS5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5fbWluW2ldLmRldl9hdHRyKTsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IDM7IGkrKykKLQkJZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihkZXYsIGkpOwogCiAJLyogUmVhZCBHUElPIGVuYWJsZSByZWdpc3RlciB0byBjaGVjayBpZiBwaW5zIGZvciBmYW4gNCw1IGFyZSB1c2VkIGFzCiAJICAgR1BJTyAqLwogCXZhbDEgPSB3ODM3OTJkX3JlYWRfdmFsdWUoY2xpZW50LCBXODM3OTJEX1JFR19HUElPX0VOKTsKKwogCWlmICghKHZhbDEgJiAweDQwKSkKLQkJZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihkZXYsIDMpOworCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCQkgICAgICAmdzgzNzkyZF9ncm91cF9mYW5bMF0pKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CisKIAlpZiAoISh2YWwxICYgMHgyMCkpCi0JCWRldmljZV9jcmVhdGVfZmlsZV9mYW4oZGV2LCA0KTsKKwkJaWYgKChlcnIgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwKKwkJCQkJICAgICAgJnc4Mzc5MmRfZ3JvdXBfZmFuWzFdKSkpCisJCQlnb3RvIGV4aXRfcmVtb3ZlX2ZpbGVzOwogCiAJdmFsMSA9IHc4Mzc5MmRfcmVhZF92YWx1ZShjbGllbnQsIFc4Mzc5MkRfUkVHX1BJTik7CiAJaWYgKHZhbDEgJiAweDQwKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGVfZmFuKGRldiwgNSk7CisJCWlmICgoZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZkZXYtPmtvYmosCisJCQkJCSAgICAgICZ3ODM3OTJkX2dyb3VwX2ZhblsyXSkpKQorCQkJZ290byBleGl0X3JlbW92ZV9maWxlczsKKwogCWlmICh2YWwxICYgMHgwNCkKLQkJZGV2aWNlX2NyZWF0ZV9maWxlX2ZhbihkZXYsIDYpOworCQlpZiAoKGVyciA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLAorCQkJCQkgICAgICAmdzgzNzkyZF9ncm91cF9mYW5bM10pKSkKKwkJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAKLQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcF9pbnB1dFtpXS5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcF9tYXhbaV0uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3RlbXBfbWF4X2h5c3RbaV0uZGV2X2F0dHIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3RoZXJtYWxfY3J1aXNlW2ldLmRldl9hdHRyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJnNkYV90b2xlcmFuY2VbaV0uZGV2X2F0dHIpOworCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcihkZXYpOworCWlmIChJU19FUlIoZGF0YS0+Y2xhc3NfZGV2KSkgeworCQllcnIgPSBQVFJfRVJSKGRhdGEtPmNsYXNzX2Rldik7CisJCWdvdG8gZXhpdF9yZW1vdmVfZmlsZXM7CiAJfQogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3B3bSk7IGkrKykgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3B3bVtpXS5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfcHdtX2VuYWJsZVtpXS5kZXZfYXR0cik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfcHdtX21vZGVbaV0uZGV2X2F0dHIpOwotCX0KLQotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9hbGFybXMpOwotCWRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jaGFzc2lzKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfY2hhc3Npc19jbGVhcik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YyX3BvaW50KTsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3NmMl9wb2ludFtpXS5kZXZfYXR0cik7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YyX2xldmVsKTsgaSsrKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LCAmc2RhX3NmMl9sZXZlbFtpXS5kZXZfYXR0cik7Ci0KIAlyZXR1cm4gMDsKIAorZXhpdF9yZW1vdmVfZmlsZXM6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3OTJkX2dyb3VwKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ODM3OTJkX2dyb3VwX2Zhbik7IGkrKykKKwkJc3lzZnNfcmVtb3ZlX2dyb3VwKCZkZXYtPmtvYmosICZ3ODM3OTJkX2dyb3VwX2ZhbltpXSk7CiBFUlJPUjM6CiAJaWYgKGRhdGEtPmxtNzVbMF0gIT0gTlVMTCkgewogCQlpMmNfZGV0YWNoX2NsaWVudChkYXRhLT5sbTc1WzBdKTsKQEAgLTEzNDIsMTEgKzE0MjksMTYgQEAKIHc4Mzc5MmRfZGV0YWNoX2NsaWVudChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewogCXN0cnVjdCB3ODM3OTJkX2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlpbnQgZXJyOworCWludCBlcnIsIGk7CiAKIAkvKiBtYWluIGNsaWVudCAqLwotCWlmIChkYXRhKQorCWlmIChkYXRhKSB7CiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmNsYXNzX2Rldik7CisJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnc4Mzc5MmRfZ3JvdXApOworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ODM3OTJkX2dyb3VwX2Zhbik7IGkrKykKKwkJCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwKKwkJCQkJICAgJnc4Mzc5MmRfZ3JvdXBfZmFuW2ldKTsKKwl9CiAKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYyBiL2RyaXZlcnMvaHdtb24vdzgzbDc4NXRzLmMKaW5kZXggM2YyYmFjMS4uYTNmY2FjZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9od21vbi93ODNsNzg1dHMuYworKysgYi9kcml2ZXJzL2h3bW9uL3c4M2w3ODV0cy5jCkBAIC0yMzYsMjEgKzIzNiwzMCBAQAogCSAqIE5vdGhpbmcgeWV0LCBhc3N1bWUgaXQgaXMgYWxyZWFkeSBzdGFydGVkLgogCSAqLwogCisJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKKwllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9yZW1vdmU7CisKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwogCWRhdGEtPmNsYXNzX2RldiA9IGh3bW9uX2RldmljZV9yZWdpc3RlcigmbmV3X2NsaWVudC0+ZGV2KTsKIAlpZiAoSVNfRVJSKGRhdGEtPmNsYXNzX2RldikpIHsKIAkJZXJyID0gUFRSX0VSUihkYXRhLT5jbGFzc19kZXYpOwotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfcmVtb3ZlOwogCX0KIAotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAotCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9pbnB1dC5kZXZfYXR0cik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCi0JCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7Ci0KIAlyZXR1cm4gMDsKIAotZXhpdF9kZXRhY2g6CitleGl0X3JlbW92ZToKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LAorCQkJICAgJnNlbnNvcl9kZXZfYXR0cl90ZW1wMV9tYXguZGV2X2F0dHIpOwogCWkyY19kZXRhY2hfY2xpZW50KG5ld19jbGllbnQpOwogZXhpdF9mcmVlOgogCWtmcmVlKGRhdGEpOwpAQCAtMjY0LDcgKzI3MywxMCBAQAogCWludCBlcnI7CiAKIAlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihkYXRhLT5jbGFzc19kZXYpOwotCisJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKKwkJCSAgICZzZW5zb3JfZGV2X2F0dHJfdGVtcDFfaW5wdXQuZGV2X2F0dHIpOworCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsCisJCQkgICAmc2Vuc29yX2Rldl9hdHRyX3RlbXAxX21heC5kZXZfYXR0cik7CiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL0tjb25maWcKaW5kZXggMjQzODNhZi4uMTE5MzVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9LY29uZmlnCkBAIC0xLDUgKzEsNSBAQAogIwotIyBDaGFyYWN0ZXIgZGV2aWNlIGNvbmZpZ3VyYXRpb24KKyMgSTJDIHN1YnN5c3RlbSBjb25maWd1cmF0aW9uCiAjCiAKIG1lbnUgIkkyQyBzdXBwb3J0IgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2FsZ29zL0tjb25maWcKaW5kZXggMzA0MDgwMS4uYzAzNDgyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvS2NvbmZpZworKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9LY29uZmlnCkBAIC01MywxMiArNTMsNiBAQAogCXRyaXN0YXRlICJNUEM4eHggQ1BNIEkyQyBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiA4eHggJiYgSTJDCiAKLWNvbmZpZyBJMkNfQUxHT19TSUJZVEUKLQl0cmlzdGF0ZSAiU2lCeXRlIFNNQnVzIGludGVyZmFjZSIKLQlkZXBlbmRzIG9uIFNJQllURV9TQjF4eHhfU09DICYmIEkyQwotCWhlbHAKLQkgIFN1cHBvcnRzIHRoZSBTaUJ5dGUgU09DIG9uLWNoaXAgSTJDIGludGVyZmFjZXMgKDIgY2hhbm5lbHMpLgotCiBjb25maWcgSTJDX0FMR09fU0dJCiAJdHJpc3RhdGUgIkkyQyBTR0kgaW50ZXJmYWNlcyIKIAlkZXBlbmRzIG9uIEkyQyAmJiAoU0dJX0lQMjIgfHwgU0dJX0lQMzIgfHwgWDg2X1ZJU1dTKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9hbGdvcy9NYWtlZmlsZQppbmRleCA4NjdmZTFmLi4yMDhiZTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2kyYy9hbGdvcy9NYWtlZmlsZQpAQCAtNiw3ICs2LDYgQEAKIG9iai0kKENPTkZJR19JMkNfQUxHT1BDRikJKz0gaTJjLWFsZ28tcGNmLm8KIG9iai0kKENPTkZJR19JMkNfQUxHT1BDQSkJKz0gaTJjLWFsZ28tcGNhLm8KIG9iai0kKENPTkZJR19JMkNfQUxHT0lURSkJKz0gaTJjLWFsZ28taXRlLm8KLW9iai0kKENPTkZJR19JMkNfQUxHT19TSUJZVEUpCSs9IGkyYy1hbGdvLXNpYnl0ZS5vCiBvYmotJChDT05GSUdfSTJDX0FMR09fU0dJKQkrPSBpMmMtYWxnby1zZ2kubwogCiBpZmVxICgkKENPTkZJR19JMkNfREVCVUdfQUxHTykseSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLWJpdC5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKaW5kZXggYWIyMzBjMC4uMjFjMzZiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tYml0LmMKQEAgLTc2LDE3ICs3NiwxNSBAQAogICogUmFpc2Ugc2NsIGxpbmUsIGFuZCBkbyBjaGVja2luZyBmb3IgZGVsYXlzLiBUaGlzIGlzIG5lY2Vzc2FyeSBmb3Igc2xvd2VyCiAgKiBkZXZpY2VzLgogICovCi1zdGF0aWMgaW5saW5lIGludCBzY2xoaShzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFkYXApCitzdGF0aWMgaW50IHNjbGhpKHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWRhcCkKIHsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0OwogCiAJc2V0c2NsKGFkYXAsMSk7CiAKIAkvKiBOb3QgYWxsIGFkYXB0ZXJzIGhhdmUgc2NsIHNlbnNlIGxpbmUuLi4gKi8KLQlpZiAoYWRhcC0+Z2V0c2NsID09IE5VTEwgKSB7Ci0JCXVkZWxheShhZGFwLT51ZGVsYXkpOwotCQlyZXR1cm4gMDsKLQl9CisJaWYgKCFhZGFwLT5nZXRzY2wpCisJCWdvdG8gZG9uZTsKIAogCXN0YXJ0PWppZmZpZXM7CiAJd2hpbGUgKCEgZ2V0c2NsKGFkYXApICkgewkKQEAgLTEwMSw2ICs5OSw4IEBACiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIAlERUJTVEFUKHByaW50ayhLRVJOX0RFQlVHICJuZWVkZWQgJWxkIGppZmZpZXNcbiIsIGppZmZpZXMtc3RhcnQpKTsKKworZG9uZToKIAl1ZGVsYXkoYWRhcC0+dWRlbGF5KTsKIAlyZXR1cm4gMDsKIH0gCkBAIC0xMjEsNyArMTIxLDYgQEAKIAlERUJQUk9UTyhwcmludGsoIiBTciAiKSk7CiAJc2V0c2RhKGFkYXAsMSk7CiAJc2NsaGkoYWRhcCk7Ci0JdWRlbGF5KGFkYXAtPnVkZWxheSk7CiAJCiAJc2RhbG8oYWRhcCk7CiAJc2NsbG8oYWRhcCk7CkBAIC0zMDYsNyArMzA1LDcgQEAKICAqIDAgY2hpcCBkaWQgbm90IGFuc3dlcgogICogLXggdHJhbnNtaXNzaW9uIGVycm9yCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IHRyeV9hZGRyZXNzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCitzdGF0aWMgaW50IHRyeV9hZGRyZXNzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCiAJCSAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHIsIGludCByZXRyaWVzKQogewogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSAqYWRhcCA9IGkyY19hZGFwLT5hbGdvX2RhdGE7CkBAIC0zNTQsMTUgKzM1MywxMSBAQAogCQkJcmV0dXJuIChyZXR2YWw8MCk/IHJldHZhbCA6IC1FRkFVTFQ7CiAJCQkgICAgICAgIC8qIGdvdCBhIGJldHRlciBvbmUgPz8gKi8KIAkJfQotI2lmIDAKLQkJLyogZnJvbSBhc20vZGVsYXkuaCAqLwotCQlfX2RlbGF5KGFkYXAtPm1kZWxheSAqIChsb29wc19wZXJfc2VjIC8gMTAwMCkgKTsKLSNlbmRpZgogCX0KIAlyZXR1cm4gd3Jjb3VudDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgcmVhZGJ5dGVzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnICptc2cpCitzdGF0aWMgaW50IHJlYWRieXRlcyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNnKQogewogCWludCBpbnZhbDsKIAlpbnQgcmRjb3VudD0wOyAgIAkvKiBjb3VudHMgYnl0ZXMgcmVhZCAqLwpAQCAtNDEyLDcgKzQwNyw3IEBACiAgKiAteCBhbiBlcnJvciBvY2N1cnJlZCAobGlrZTogLUVSRU1PVEVJTyBpZiB0aGUgZGV2aWNlIGRpZCBub3QgYW5zd2VyLCBvcgogICoJLUVUSU1FRE9VVCwgZm9yIGV4YW1wbGUgaWYgdGhlIGxpbmVzIGFyZSBzdHVjay4uLikgCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJpdF9kb0FkZHJlc3Moc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZykgCitzdGF0aWMgaW50IGJpdF9kb0FkZHJlc3Moc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZykKIHsKIAl1bnNpZ25lZCBzaG9ydCBmbGFncyA9IG1zZy0+ZmxhZ3M7CiAJdW5zaWduZWQgc2hvcnQgbmFrX29rID0gbXNnLT5mbGFncyAmIEkyQ19NX0lHTk9SRV9OQUs7CkBAIC01MTcsNyArNTEyLDcgQEAKIAogLyogLS0tLS1leHBvcnRlZCBhbGdvcml0aG0gZGF0YTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gaTJjX2JpdF9hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19iaXRfYWxnbyA9IHsKIAkubWFzdGVyX3hmZXIJPSBiaXRfeGZlciwKIAkuZnVuY3Rpb25hbGl0eQk9IGJpdF9mdW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjYS5jIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKaW5kZXggYjg4YTZmYy4uOTA4MWM5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKKysrIGIvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tcGNhLmMKQEAgLTM1NSw3ICszNTUsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gcGNhX2FsZ28gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gcGNhX2FsZ28gPSB7CiAJLm1hc3Rlcl94ZmVyCT0gcGNhX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBwY2FfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1wY2YuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCmluZGV4IDViMjQ5MzAuLjNiMjAwMzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXBjZi5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAogLyogLS0tLS1leHBvcnRlZCBhbGdvcml0aG0gZGF0YTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gcGNmX2FsZ28gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gcGNmX2FsZ28gPSB7CiAJLm1hc3Rlcl94ZmVyCT0gcGNmX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBwY2ZfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1zZ2kuYyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCmluZGV4IDkzMmM0ZmEuLjQ5MGQ5OTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCisrKyBiL2RyaXZlcnMvaTJjL2FsZ29zL2kyYy1hbGdvLXNnaS5jCkBAIC0xNTcsNyArMTU3LDcgQEAKIAlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNnaV9hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNnaV9hbGdvID0gewogCS5tYXN0ZXJfeGZlcgk9IHNnaV94ZmVyLAogCS5mdW5jdGlvbmFsaXR5CT0gc2dpX2Z1bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYWxnb3MvaTJjLWFsZ28tc2lieXRlLmMgYi9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1zaWJ5dGUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzJkNDFjNi4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL2kyYy9hbGdvcy9pMmMtYWxnby1zaWJ5dGUuYworKysgL2Rldi9udWxsCkBAIC0xLDIxNSArMCwwIEBACi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0vKiBpMmMtYWxnby1zaWJ5dGUuYyBpMmMgZHJpdmVyIGFsZ29yaXRobXMgZm9yIGJpdC1zaGlmdCBhZGFwdGVycwkJICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogICBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMiwyMDAzIEJyb2FkY29tIENvcnBvcmF0aW9uCi0gICAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAwIFNpbW9uIEcuIFZvZ2wKLQotICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgkJICAgICAqLwotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0vKiBXaXRoIHNvbWUgY2hhbmdlcyBmcm9tIEt59nN0aSBN5Gxra2kgPGttYWxra2lAY2MuaHV0LmZpPiBhbmQgZXZlbgotICAgRnJvZG8gTG9vaWphYXJkIDxmcm9kb2xAZGRzLm5sPi4gICovCi0KLS8qIFBvcnRlZCBmb3IgU2lCeXRlIFNPQ3MgYnkgQnJvYWRjb20gQ29ycG9yYXRpb24uICAqLwotCi0jaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotCi0jaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NpYnl0ZS9zYjEyNTBfcmVncy5oPgotI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX3NtYnVzLmg+Ci0KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1zaWJ5dGUuaD4KLQotLyogLS0tLS0gZ2xvYmFsIGRlZmluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNkZWZpbmUgU01CX0NTUihhLHIpICgobG9uZykoYS0+cmVnX2Jhc2UgKyByKSkKLQotLyogLS0tLS0gZ2xvYmFsIHZhcmlhYmxlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0JKi8KLQotLyogbW9kdWxlIHBhcmFtZXRlcnM6Ci0gKi8KLXN0YXRpYyBpbnQgYml0X3NjYW47CS8qIGhhdmUgYSBsb29rIGF0IHdoYXQncyBoYW5naW5nICdyb3VuZAkJKi8KLQotCi1zdGF0aWMgaW50IHNtYnVzX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTE2IGFkZHIsIAotICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCi0gICAgICAgICAgICAgICAgICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSkKLXsKLQlzdHJ1Y3QgaTJjX2FsZ29fc2lieXRlX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOwotICAgICAgICBpbnQgZGF0YV9ieXRlcyA9IDA7Ci0gICAgICAgIGludCBlcnJvcjsKLQotICAgICAgICB3aGlsZSAoY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9TVEFUVVMpKSAmIE1fU01CX0JVU1kpCi0gICAgICAgICAgICAgICAgOwotCi0gICAgICAgIHN3aXRjaCAoc2l6ZSkgewotICAgICAgICBjYXNlIEkyQ19TTUJVU19RVUlDSzoKLSAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfCAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCA/IE1fU01CX1FEQVRBIDogMCkgfAotCQkJICAgVl9TTUJfVFRfUVVJQ0tDTUQpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSTJDX1NNQlVTX0JZVEU6Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMigoVl9TTUJfQUREUihhZGRyKSB8IFZfU01CX1RUX1JEMUJZVEUpLAotCQkJCSAgU01CX0NTUihhZGFwLCBSX1NNQl9TVEFSVCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV9ieXRlcyA9IDE7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMihWX1NNQl9DTUQoY29tbWFuZCksIFNNQl9DU1IoYWRhcCwgUl9TTUJfQ01EKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfCBWX1NNQl9UVF9XUjFCWVRFKSwKLQkJCQkgIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBUlQpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgSTJDX1NNQlVTX0JZVEVfREFUQToKLSAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoVl9TTUJfQ01EKGNvbW1hbmQpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX0NNRCkpOwotICAgICAgICAgICAgICAgIGlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfCBWX1NNQl9UVF9DTURfUkQxQllURSksCi0JCQkJICBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhX2J5dGVzID0gMTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgY3NyX291dDMyKFZfU01CX0xCKGRhdGEtPmJ5dGUpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX0RBVEEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMigoVl9TTUJfQUREUihhZGRyKSB8IFZfU01CX1RUX1dSMkJZVEUpLAotCQkJCSAgU01CX0NTUihhZGFwLCBSX1NNQl9TVEFSVCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOgotICAgICAgICAgICAgICAgIGNzcl9vdXQzMihWX1NNQl9DTUQoY29tbWFuZCksIFNNQl9DU1IoYWRhcCwgUl9TTUJfQ01EKSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMigoVl9TTUJfQUREUihhZGRyKSB8IFZfU01CX1RUX0NNRF9SRDJCWVRFKSwKLQkJCQkgIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBUlQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfYnl0ZXMgPSAyOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoVl9TTUJfTEIoZGF0YS0+d29yZCAmIDB4ZmYpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX0RBVEEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMihWX1NNQl9NQihkYXRhLT53b3JkID4+IDgpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX0RBVEEpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNzcl9vdXQzMigoVl9TTUJfQUREUihhZGRyKSB8IFZfU01CX1RUX1dSMkJZVEUpLAotCQkJCSAgU01CX0NTUihhZGFwLCBSX1NNQl9TVEFSVCkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7ICAgICAgLyogWFhYS1cgYmV0dGVyIGVycm9yIGNvZGU/ICovCi0gICAgICAgIH0KLQotICAgICAgICB3aGlsZSAoY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9TVEFUVVMpKSAmIE1fU01CX0JVU1kpCi0gICAgICAgICAgICAgICAgOwotCi0gICAgICAgIGVycm9yID0gY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9TVEFUVVMpKTsKLSAgICAgICAgaWYgKGVycm9yICYgTV9TTUJfRVJST1IpIHsKLSAgICAgICAgICAgICAgICAvKiBDbGVhciBlcnJvciBiaXQgYnkgd3JpdGluZyBhIDEgKi8KLSAgICAgICAgICAgICAgICBjc3Jfb3V0MzIoTV9TTUJfRVJST1IsIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBVFVTKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOyAgICAgIC8qIFhYWEtXIGJldHRlciBlcnJvciBjb2RlPyAqLwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGRhdGFfYnl0ZXMgPT0gMSkKLSAgICAgICAgICAgICAgICBkYXRhLT5ieXRlID0gY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9EQVRBKSkgJiAweGZmOwotICAgICAgICBpZiAoZGF0YV9ieXRlcyA9PSAyKQotICAgICAgICAgICAgICAgIGRhdGEtPndvcmQgPSBjc3JfaW4zMihTTUJfQ1NSKGFkYXAsIFJfU01CX0RBVEEpKSAmIDB4ZmZmZjsKLQotICAgICAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBhbGdvX2NvbnRyb2woc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLCAKLQl1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHUzMiBiaXRfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JcmV0dXJuIChJMkNfRlVOQ19TTUJVU19RVUlDSyB8IEkyQ19GVU5DX1NNQlVTX0JZVEUgfAotICAgICAgICAgICAgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSk7Ci19Ci0KLQotLyogLS0tLS1leHBvcnRlZCBhbGdvcml0aG0gZGF0YTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLwotCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gaTJjX3NpYnl0ZV9hbGdvID0gewotCS5zbWJ1c194ZmVyCT0gc21idXNfeGZlciwKLQkuYWxnb19jb250cm9sCT0gYWxnb19jb250cm9sLCAvKiBpb2N0bCAqLwotCS5mdW5jdGlvbmFsaXR5CT0gYml0X2Z1bmMsCi19OwotCi0vKiAKLSAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZSAKLSAqLwotaW50IGkyY19zaWJ5dGVfYWRkX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBpbnQgc3BlZWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IGkyY19hbGdvX3NpYnl0ZV9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKLQotCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KLQlpMmNfYWRhcC0+YWxnbyA9ICZpMmNfc2lieXRlX2FsZ287Ci0gICAgICAgIAotICAgICAgICAvKiBTZXQgdGhlIGZyZXF1ZW5jeSB0byAxMDAga0h6ICovCi0gICAgICAgIGNzcl9vdXQzMihzcGVlZCwgU01CX0NTUihhZGFwLFJfU01CX0ZSRVEpKTsKLSAgICAgICAgY3NyX291dDMyKDAsIFNNQl9DU1IoYWRhcCxSX1NNQl9DT05UUk9MKSk7Ci0KLQkvKiBzY2FuIGJ1cyAqLwotCWlmIChiaXRfc2NhbikgewotICAgICAgICAgICAgICAgIHVuaW9uIGkyY19zbWJ1c19kYXRhIGRhdGE7Ci0gICAgICAgICAgICAgICAgaW50IHJjOwotCQlwcmludGsoS0VSTl9JTkZPICIgaTJjLWFsZ28tc2lieXRlLm86IHNjYW5uaW5nIGJ1cyAlcy5cbiIsCi0JCSAgICAgICBpMmNfYWRhcC0+bmFtZSk7Ci0JCWZvciAoaSA9IDB4MDA7IGkgPCAweDdmOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFhYWEtXIGlzIHRoaXMgYSByZWFsaXN0aWMgcHJvYmU/ICovCi0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IHNtYnVzX3hmZXIoaTJjX2FkYXAsIGksIDAsIEkyQ19TTUJVU19SRUFELCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEkyQ19TTUJVU19CWVRFX0RBVEEsICZkYXRhKTsKLQkJCWlmICghcmMpIHsKLQkJCQlwcmludGsoIiglMDJ4KSIsaSk7IAotCQkJfSBlbHNlIAotCQkJCXByaW50aygiLiIpOyAKLQkJfQotCQlwcmludGsoIlxuIik7Ci0JfQotCi0JcmV0dXJuIGkyY19hZGRfYWRhcHRlcihpMmNfYWRhcCk7Ci19Ci0KLQotaW50IGkyY19zaWJ5dGVfZGVsX2J1cyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JaW50IHJlczsKLQotCWlmICgocmVzID0gaTJjX2RlbF9hZGFwdGVyKGFkYXApKSA8IDApCi0JCXJldHVybiByZXM7Ci0KLQlyZXR1cm4gMDsKLX0KLQotaW50IF9faW5pdCBpMmNfYWxnb19zaWJ5dGVfaW5pdCAodm9pZCkKLXsKLQlwcmludGsoImkyYy1hbGdvLXNpYnl0ZS5vOiBpMmMgU2lCeXRlIGFsZ29yaXRobSBtb2R1bGVcbiIpOwotCXJldHVybiAwOwotfQotCi0KLUVYUE9SVF9TWU1CT0woaTJjX3NpYnl0ZV9hZGRfYnVzKTsKLUVYUE9SVF9TWU1CT0woaTJjX3NpYnl0ZV9kZWxfYnVzKTsKLQotI2lmZGVmIE1PRFVMRQotTU9EVUxFX0FVVEhPUigiS2lwIFdhbGtlciwgQnJvYWRjb20gQ29ycC4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiU2lCeXRlIEkyQy1CdXMgYWxnb3JpdGhtIik7Ci1tb2R1bGVfcGFyYW0oYml0X3NjYW4sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGJpdF9zY2FuLCAiU2NhbiBmb3IgYWN0aXZlIGNoaXBzIG9uIHRoZSBidXMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotaW50IGluaXRfbW9kdWxlKHZvaWQpIAotewotCXJldHVybiBpMmNfYWxnb19zaWJ5dGVfaW5pdCgpOwotfQotCi12b2lkIGNsZWFudXBfbW9kdWxlKHZvaWQpIAotewotfQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvS2NvbmZpZyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCmluZGV4IDg4NDMyMGUuLjBkOTY2NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9LY29uZmlnCkBAIC03NSwxMSArNzUsMTEgQEAKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hbWQ4MTExLgogCiBjb25maWcgSTJDX0FVMTU1MAotCXRyaXN0YXRlICJBdTE1NTAgU01CdXMgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gSTJDICYmIFNPQ19BVTE1NTAKKwl0cmlzdGF0ZSAiQXUxNTUwL0F1MTIwMCBTTUJ1cyBpbnRlcmZhY2UiCisJZGVwZW5kcyBvbiBJMkMgJiYgKFNPQ19BVTE1NTAgfHwgU09DX0FVMTIwMCkKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUKLQkgIEF1MTU1MCBTTUJ1cyBpbnRlcmZhY2UuCisJICBBdTE1NTAgYW5kIEF1MTIwMCBTTUJ1cyBpbnRlcmZhY2UuCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy1hdTE1NTAuCkBAIC0xOTYsNyArMTk2LDcgQEAKIAogY29uZmlnIEkyQ19JT1AzWFgKIAl0cmlzdGF0ZSAiSW50ZWwgSU9QM3h4IGFuZCBJWFA0eHggb24tY2hpcCBJMkMgaW50ZXJmYWNlIgotCWRlcGVuZHMgb24gKEFSQ0hfSU9QM1hYIHx8IEFSQ0hfSVhQNFhYKSAmJiBJMkMKKwlkZXBlbmRzIG9uIChBUkNIX0lPUDMyWCB8fCBBUkNIX0lPUDMzWCB8fCBBUkNIX0lYUDRYWCkgJiYgSTJDCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIElJQyBidXMgY29udHJvbGxlciBvbgogCSAgdGhlIEludGVsIElPUDN4eCBJL08gUHJvY2Vzc29ycyBvciBJWFA0eHggTmV0d29yayBQcm9jZXNzb3JzLgpAQCAtMjg3LDYgKzI4NywxNiBAQAogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLW9jb3Jlcy4KIAorY29uZmlnIEkyQ19PTUFQCisJdHJpc3RhdGUgIk9NQVAgSTJDIGFkYXB0ZXIiCisJZGVwZW5kcyBvbiBJMkMgJiYgQVJDSF9PTUFQCisJZGVmYXVsdCB5IGlmIE1BQ0hfT01BUF9IMyB8fCBNQUNIX09NQVBfT1NLCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgdG8gdGhpcyBvcHRpb24sIHN1cHBvcnQgd2lsbCBiZSBpbmNsdWRlZCBmb3IgdGhlCisJICBJMkMgaW50ZXJmYWNlIG9uIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBPTUFQMS8yIGZhbWlseSBvZiBwcm9jZXNzb3JzLgorCSAgTGlrZSBPTUFQMTUxMC8xNjEwLzE3MTAvNTkxMiBhbmQgT01BUDI0MnguCisJICBGb3IgZGV0YWlscyBzZWUgaHR0cDovL3d3dy50aS5jb20vb21hcC4KKwogY29uZmlnIEkyQ19QQVJQT1JUCiAJdHJpc3RhdGUgIlBhcmFsbGVsIHBvcnQgYWRhcHRlciIKIAlkZXBlbmRzIG9uIEkyQyAmJiBQQVJQT1JUCkBAIC00ODIsMTkgKzQ5MiwxOSBAQAogCSAgd2lsbCBiZSBjYWxsZWQgaTJjLXZpYS4KIAogY29uZmlnIEkyQ19WSUFQUk8KLQl0cmlzdGF0ZSAiVklBIDgyQzU5Ni84MkM2ODYvODIzeCIKKwl0cmlzdGF0ZSAiVklBIDgyQzU5Ni84MkM2ODYvODJ4eCIKIAlkZXBlbmRzIG9uIEkyQyAmJiBQQ0kKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyB0byB0aGlzIG9wdGlvbiwgc3VwcG9ydCB3aWxsIGJlIGluY2x1ZGVkIGZvciB0aGUgVklBCi0JICA4MkM1OTYvODJDNjg2LzgyM3ggSTJDIGludGVyZmFjZXMuICBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcgCisJICA4MkM1OTYvODJDNjg2LzgyeHggSTJDIGludGVyZmFjZXMuICBTcGVjaWZpY2FsbHksIHRoZSBmb2xsb3dpbmcKIAkgIGNoaXBzZXRzIGFyZSBzdXBwb3J0ZWQ6Ci0JICA4MkM1OTZBL0IKLQkgIDgyQzY4NkEvQgotCSAgODIzMQotCSAgODIzMwotCSAgODIzM0EKLQkgIDgyMzUKLQkgIDgyMzcKKwkgICAgVlQ4MkM1OTZBL0IKKwkgICAgVlQ4MkM2ODZBL0IKKwkgICAgVlQ4MjMxCisJICAgIFZUODIzMy9BCisJICAgIFZUODIzNQorCSAgICBWVDgyMzdSL0EKKwkgICAgVlQ4MjUxCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiAgSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIGkyYy12aWFwcm8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUgYi9kcml2ZXJzL2kyYy9idXNzZXMvTWFrZWZpbGUKaW5kZXggYWM1NmRmNS4uNDkzYzg3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9NYWtlZmlsZQpAQCAtMjQsNiArMjQsNyBAQAogb2JqLSQoQ09ORklHX0kyQ19NVjY0WFhYKQkrPSBpMmMtbXY2NHh4eC5vCiBvYmotJChDT05GSUdfSTJDX05GT1JDRTIpCSs9IGkyYy1uZm9yY2UyLm8KIG9iai0kKENPTkZJR19JMkNfT0NPUkVTKQkrPSBpMmMtb2NvcmVzLm8KK29iai0kKENPTkZJR19JMkNfT01BUCkJCSs9IGkyYy1vbWFwLm8KIG9iai0kKENPTkZJR19JMkNfUEFSUE9SVCkJKz0gaTJjLXBhcnBvcnQubwogb2JqLSQoQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUKQkrPSBpMmMtcGFycG9ydC1saWdodC5vCiBvYmotJChDT05GSUdfSTJDX1BDQV9JU0EpCSs9IGkyYy1wY2EtaXNhLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTUzNS5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKaW5kZXggZDNlZjQ2YS4uZTc1ZDMzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTM1LmMKQEAgLTQ2OCw3ICs0NjgsNyBAQAogCSAgICBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKIAkuc21idXNfeGZlcgk9IGFsaTE1MzVfYWNjZXNzLAogCS5mdW5jdGlvbmFsaXR5CT0gYWxpMTUzNV9mdW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTU2My5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKaW5kZXggZTZmNjMyMC4uMzNmYmI0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbGkxNTYzLmMKQEAgLTM2Nyw3ICszNjcsNyBAQAogCXJlbGVhc2VfcmVnaW9uKGFsaTE1NjNfc21iYSxBTEkxNTYzX1NNQl9JT1NJWkUpOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gYWxpMTU2M19hbGdvcml0aG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gYWxpMTU2M19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBhbGkxNTYzX2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eQk9IGFsaTE1NjNfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFsaTE1eDMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCmluZGV4IDdhNWMwOTQuLjNmMTFiNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYWxpMTV4My5jCkBAIC00NjMsNyArNDYzLDcgQEAKIAkgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBhbGkxNXgzX2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eQk9IGFsaTE1eDNfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hbWQ3NTYuYwppbmRleCAxNzUwZGVkLi4yZDIxYWZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDc1Ni5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kNzU2LmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCSAgICBJMkNfRlVOQ19TTUJVU19CTE9DS19EQVRBIHwgSTJDX0ZVTkNfU01CVVNfUFJPQ19DQUxMOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKIAkuc21idXNfeGZlcgk9IGFtZDc1Nl9hY2Nlc3MsCiAJLmZ1bmN0aW9uYWxpdHkJPSBhbWQ3NTZfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWFtZDgxMTEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCmluZGV4IGU1ZWY1NjAuLjBmYmM3MTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYW1kODExMS5jCkBAIC0zMTYsNyArMzE2LDcgQEAKIAkJSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLIHwgSTJDX0ZVTkNfU01CVVNfSFdQRUNfQ0FMQzsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIgPSBhbWQ4MTExX2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eSA9IGFtZDgxMTFfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF1MTU1MC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1hdTE1NTAuYwppbmRleCBkMDZlZGNlLi5kN2U3YzM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWF1MTU1MC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtYXUxNTUwLmMKQEAgLTM0LDggKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogCi0jaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTAwMC5oPgotI2luY2x1ZGUgPGFzbS9tYWNoLXBiMXgwMC9wYjE1NTAuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MXh4eF9wc2MuaD4KIAogI2luY2x1ZGUgImkyYy1hdTE1NTAuaCIKQEAgLTExOCwxMyArMTE3LDE5IEBACiAKIAkvKiBSZXNldCB0aGUgRklGT3MsIGNsZWFyIGV2ZW50cy4KIAkqLwotCXNwLT5wc2Nfc21icGNyID0gUFNDX1NNQlBDUl9EQzsKKwlzdGF0ID0gc3AtPnBzY19zbWJzdGF0OwogCXNwLT5wc2Nfc21iZXZudCA9IFBTQ19TTUJFVk5UX0FMTENMUjsKIAlhdV9zeW5jKCk7Ci0JZG8gewotCQlzdGF0ID0gc3AtPnBzY19zbWJwY3I7CisKKwlpZiAoIShzdGF0ICYgUFNDX1NNQlNUQVRfVEUpIHx8ICEoc3RhdCAmIFBTQ19TTUJTVEFUX1JFKSkgeworCQlzcC0+cHNjX3NtYnBjciA9IFBTQ19TTUJQQ1JfREM7CiAJCWF1X3N5bmMoKTsKLQl9IHdoaWxlICgoc3RhdCAmIFBTQ19TTUJQQ1JfREMpICE9IDApOworCQlkbyB7CisJCQlzdGF0ID0gc3AtPnBzY19zbWJwY3I7CisJCQlhdV9zeW5jKCk7CisJCX0gd2hpbGUgKChzdGF0ICYgUFNDX1NNQlBDUl9EQykgIT0gMCk7CisJCXVkZWxheSg1MCk7CisJfQogCiAJLyogV3JpdGUgb3V0IHRoZSBpMmMgY2hpcCBhZGRyZXNzIGFuZCBzcGVjaWZ5IG9wZXJhdGlvbgogCSovCkBAIC0yNzksMTAgKzI4NCwxMCBAQAogc3RhdGljIHUzMgogYXUxNTUwX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewotCXJldHVybiBJMkNfRlVOQ19JMkM7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhdTE1NTBfYWxnbyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBhdTE1NTBfYWxnbyA9IHsKIAkubWFzdGVyX3hmZXIJPSBhdTE1NTBfeGZlciwKIAkuZnVuY3Rpb25hbGl0eQk9IGF1MTU1MF9mdW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtZWxla3Rvci5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKaW5kZXggNTlmODMwOC4uY2FhOGU1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1lbGVrdG9yLmMKQEAgLTE5Niw3ICsxOTYsNiBAQAogCS5nZXRjbG9jayAgID0gcGNmX2lzYV9nZXRjbG9jaywKIAkud2FpdGZvcnBpbiA9IHBjZl9pc2Ffd2FpdGZvcnBpbiwKIAkudWRlbGF5CSAgICA9IDEwLAotCS5tZGVsYXkJICAgID0gMTAsCiAJLnRpbWVvdXQgICAgPSAxMDAsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWh5ZHJhLmMKaW5kZXggZTBjYjNiMC4uNDU3ZDQ4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1oeWRyYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaHlkcmEuYwpAQCAtOTksNyArOTksNiBAQAogCS5nZXRzZGEJCT0gaHlkcmFfYml0X2dldHNkYSwKIAkuZ2V0c2NsCQk9IGh5ZHJhX2JpdF9nZXRzY2wsCiAJLnVkZWxheQkJPSA1LAotCS5tZGVsYXkJCT0gNSwKIAkudGltZW91dAk9IEhaCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDdiZTFkMGEuLmJiYjJmYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC00MzQsNyArNDM0LDcgQEAKIAkgICAgIHwgKGlzaWNoNCA/IEkyQ19GVU5DX1NNQlVTX0hXUEVDX0NBTEMgOiAwKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBpODAxX2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eQk9IGk4MDFfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MTAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCmluZGV4IDc0OGJlMzAuLmI2NmZiNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgxMC5jCkBAIC0xNjYsNyArMTY2LDYgQEAKIAkuZ2V0c2RhCQk9IGJpdF9pODEwaTJjX2dldHNkYSwKIAkuZ2V0c2NsCQk9IGJpdF9pODEwaTJjX2dldHNjbCwKIAkudWRlbGF5CQk9IENZQ0xFX0RFTEFZLAotCS5tZGVsYXkJCT0gQ1lDTEVfREVMQVksCiAJLnRpbWVvdXQJPSBUSU1FT1VULAogfTsKIApAQCAtMTgyLDcgKzE4MSw2IEBACiAJLmdldHNkYQkJPSBiaXRfaTgxMGRkY19nZXRzZGEsCiAJLmdldHNjbAkJPSBiaXRfaTgxMGRkY19nZXRzY2wsCiAJLnVkZWxheQkJPSBDWUNMRV9ERUxBWSwKLQkubWRlbGF5CQk9IENZQ0xFX0RFTEFZLAogCS50aW1lb3V0CT0gVElNRU9VVCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaWJtX2lpYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKaW5kZXggMDU5OWJiZC4uNWJjY2I1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pYm1faWljLmMKQEAgLTYyNSw3ICs2MjUsNyBAQAogCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfMTBCSVRfQUREUjsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGlpY19hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGlpY19hbGdvID0gewogCS5tYXN0ZXJfeGZlciAJPSBpaWNfeGZlciwKIAkuZnVuY3Rpb25hbGl0eQk9IGlpY19mdW5jCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaW9wM3h4LmMKaW5kZXggNDhjNTY5My4uNDQzNmM4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pb3AzeHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlvcDN4eC5jCkBAIC04MiwxNCArODIsMTYgQEAKIAogCS8qIAogCSAqIEV2ZXJ5IHRpbWUgdW5pdCBlbmFibGUgaXMgYXNzZXJ0ZWQsIEdQT0QgbmVlZHMgdG8gYmUgY2xlYXJlZAotCSAqIG9uIElPUDMyMSB0byBhdm9pZCBkYXRhIGNvcnJ1cHRpb24gb24gdGhlIGJ1cy4KKwkgKiBvbiBJT1AzWFggdG8gYXZvaWQgZGF0YSBjb3JydXB0aW9uIG9uIHRoZSBidXMuCiAJICovCi0jaWZkZWYgQ09ORklHX0FSQ0hfSU9QMzIxCi0jZGVmaW5lIElPUDMyMV9HUE9EX0kyQzAgICAgMHgwMGMwICAvKiBjbGVhciB0aGVzZSBiaXRzIHRvIGVuYWJsZSBjaDAgKi8KLSNkZWZpbmUgSU9QMzIxX0dQT0RfSTJDMSAgICAweDAwMzAgIC8qIGNsZWFyIHRoZXNlIGJpdHMgdG8gZW5hYmxlIGNoMSAqLwotCi0JKklPUDMyMV9HUE9EICY9IChpb3AzeHhfYWRhcC0+aWQgPT0gMCkgPyB+SU9QMzIxX0dQT0RfSTJDMCA6IAotCQl+SU9QMzIxX0dQT0RfSTJDMTsKKyNpZmRlZiBDT05GSUdfUExBVF9JT1AKKwlpZiAoaW9wM3h4X2FkYXAtPmlkID09IDApIHsKKwkJZ3Bpb19saW5lX3NldChJT1AzWFhfR1BJT19MSU5FKDcpLCBHUElPX0xPVyk7CisJCWdwaW9fbGluZV9zZXQoSU9QM1hYX0dQSU9fTElORSg2KSwgR1BJT19MT1cpOworCX0gZWxzZSB7CisJCWdwaW9fbGluZV9zZXQoSU9QM1hYX0dQSU9fTElORSg1KSwgR1BJT19MT1cpOworCQlncGlvX2xpbmVfc2V0KElPUDNYWF9HUElPX0xJTkUoNCksIEdQSU9fTE9XKTsKKwl9CiAjZW5kaWYKIAkvKiBOQiBTUiBiaXRzIG5vdCBzYW1lIHBvc2l0aW9uIGFzIENSIElFIGJpdHMgOi0oICovCiAJaW9wM3h4X2FkYXAtPlNSX2VuYWJsZWQgPSAKQEAgLTQwMSw3ICs0MDMsNyBAQAogCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gaW9wM3h4X2kyY19hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGlvcDN4eF9pMmNfYWxnbyA9IHsKIAkubWFzdGVyX3hmZXIJPSBpb3AzeHhfaTJjX21hc3Rlcl94ZmVyLAogCS5hbGdvX2NvbnRyb2wJPSBpb3AzeHhfaTJjX2FsZ29fY29udHJvbCwKIAkuZnVuY3Rpb25hbGl0eQk9IGlvcDN4eF9pMmNfZnVuYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzYS5jCmluZGV4IGMzZTFkM2U4Li40MzgwNjUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWlzYS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXNhLmMKQEAgLTQzLDcgKzQzLDcgQEAKIHN0YXRpYyB1MzIgaXNhX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKIAogLyogVGhpcyBpcyB0aGUgYWN0dWFsIGFsZ29yaXRobSB3ZSBkZWZpbmUgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpc2FfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGlzYV9hbGdvcml0aG0gPSB7CiAJLmZ1bmN0aW9uYWxpdHkJPSBpc2FfZnVuYywKIH07CiAKQEAgLTg5LDkgKzg5LDE0IEBACiAJZGV2X2RiZygmaXNhX2FkYXB0ZXIuZGV2LCAiRHJpdmVyICVzIHJlZ2lzdGVyZWRcbiIsIGRyaXZlci0+ZHJpdmVyLm5hbWUpOwogCiAJLyogTm93IGxvb2sgZm9yIGNsaWVudHMgKi8KLQlkcml2ZXItPmF0dGFjaF9hZGFwdGVyKCZpc2FfYWRhcHRlcik7Ci0KLQlyZXR1cm4gMDsKKwlyZXMgPSBkcml2ZXItPmF0dGFjaF9hZGFwdGVyKCZpc2FfYWRhcHRlcik7CisJaWYgKHJlcykgeworCQlkZXZfZXJyKCZpc2FfYWRhcHRlci5kZXYsCisJCQkiRHJpdmVyICVzIGZhaWxlZCB0byBhdHRhY2ggYWRhcHRlciwgdW5yZWdpc3RlcmluZ1xuIiwKKwkJCWRyaXZlci0+ZHJpdmVyLm5hbWUpOworCQlkcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyLT5kcml2ZXIpOworCX0KKwlyZXR1cm4gcmVzOwogfQogCiBpbnQgaTJjX2lzYV9kZWxfZHJpdmVyKHN0cnVjdCBpMmNfZHJpdmVyICpkcml2ZXIpCkBAIC0xMjUsNiArMTMwLDggQEAKIAogc3RhdGljIGludCBfX2luaXQgaTJjX2lzYV9pbml0KHZvaWQpCiB7CisJaW50IGVycjsKKwogCW11dGV4X2luaXQoJmlzYV9hZGFwdGVyLmNsaXN0X2xvY2spOwogCUlOSVRfTElTVF9IRUFEKCZpc2FfYWRhcHRlci5jbGllbnRzKTsKIApAQCAtMTMzLDggKzE0MCwxNiBAQAogCXNwcmludGYoaXNhX2FkYXB0ZXIuZGV2LmJ1c19pZCwgImkyYy0lZCIsIGlzYV9hZGFwdGVyLm5yKTsKIAlpc2FfYWRhcHRlci5kZXYuZHJpdmVyID0gJmkyY19hZGFwdGVyX2RyaXZlcjsKIAlpc2FfYWRhcHRlci5kZXYucmVsZWFzZSA9ICZpMmNfYWRhcHRlcl9kZXZfcmVsZWFzZTsKLQlkZXZpY2VfcmVnaXN0ZXIoJmlzYV9hZGFwdGVyLmRldik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpc2FfYWRhcHRlci5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwllcnIgPSBkZXZpY2VfcmVnaXN0ZXIoJmlzYV9hZGFwdGVyLmRldik7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImkyYy1pc2E6IEZhaWxlZCB0byByZWdpc3RlciBkZXZpY2VcbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmaXNhX2FkYXB0ZXIuZGV2LCAmZGV2X2F0dHJfbmFtZSk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImkyYy1pc2E6IEZhaWxlZCB0byBjcmVhdGUgbmFtZSBmaWxlXG4iKTsKKwkJZ290byBleGl0X3VucmVnaXN0ZXI7CisJfQogCiAJLyogQWRkIHRoaXMgYWRhcHRlciB0byB0aGUgaTJjX2FkYXB0ZXIgY2xhc3MgKi8KIAltZW1zZXQoJmlzYV9hZGFwdGVyLmNsYXNzX2RldiwgMHgwMCwgc2l6ZW9mKHN0cnVjdCBjbGFzc19kZXZpY2UpKTsKQEAgLTE0MiwxMSArMTU3LDI0IEBACiAJaXNhX2FkYXB0ZXIuY2xhc3NfZGV2LmNsYXNzID0gJmkyY19hZGFwdGVyX2NsYXNzOwogCXN0cmxjcHkoaXNhX2FkYXB0ZXIuY2xhc3NfZGV2LmNsYXNzX2lkLCBpc2FfYWRhcHRlci5kZXYuYnVzX2lkLAogCQlCVVNfSURfU0laRSk7Ci0JY2xhc3NfZGV2aWNlX3JlZ2lzdGVyKCZpc2FfYWRhcHRlci5jbGFzc19kZXYpOworCWVyciA9IGNsYXNzX2RldmljZV9yZWdpc3RlcigmaXNhX2FkYXB0ZXIuY2xhc3NfZGV2KTsKKwlpZiAoZXJyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaTJjLWlzYTogRmFpbGVkIHRvIHJlZ2lzdGVyIGNsYXNzIGRldmljZVxuIik7CisJCWdvdG8gZXhpdF9yZW1vdmVfbmFtZTsKKwl9CiAKIAlkZXZfZGJnKCZpc2FfYWRhcHRlci5kZXYsICIlcyByZWdpc3RlcmVkXG4iLCBpc2FfYWRhcHRlci5uYW1lKTsKIAogCXJldHVybiAwOworCitleGl0X3JlbW92ZV9uYW1lOgorCWRldmljZV9yZW1vdmVfZmlsZSgmaXNhX2FkYXB0ZXIuZGV2LCAmZGV2X2F0dHJfbmFtZSk7CitleGl0X3VucmVnaXN0ZXI6CisJaW5pdF9jb21wbGV0aW9uKCZpc2FfYWRhcHRlci5kZXZfcmVsZWFzZWQpOyAvKiBOZWVkZWQ/ICovCisJZGV2aWNlX3VucmVnaXN0ZXIoJmlzYV9hZGFwdGVyLmRldik7CisJd2FpdF9mb3JfY29tcGxldGlvbigmaXNhX2FkYXB0ZXIuZGV2X3JlbGVhc2VkKTsKK2V4aXQ6CisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IGkyY19pc2FfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXRlLmMKaW5kZXggZDgyZTZkYWUuLjU1OWE2MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXRlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1pdGUuYwpAQCAtMTA5LDcgKzEwOSw3IEBACiBzdGF0aWMgdm9pZCBpaWNfaXRlX3dhaXRmb3JwaW4odm9pZCkgewogICAgREVGSU5FX1dBSVQod2FpdCk7CiAgICBpbnQgdGltZW91dCA9IDI7Ci0gICBsb25nIGZsYWdzOworICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAogICAgLyogSWYgaW50ZXJydXB0cyBhcmUgZW5hYmxlZCAod2hpY2ggdGhleSBhcmUpLCB0aGVuIHB1dCB0aGUgcHJvY2VzcyB0bwogICAgICogc2xlZXAuICBUaGlzIHByb2Nlc3Mgd2lsbCBiZSBhd2FrZW5lZCBieSB0d28gZXZlbnRzIC0tIGVpdGhlciB0aGUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwMjAwMC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKaW5kZXggY2Q2ZjQ1ZC4uZGQzZjRjZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHAyMDAwLmMKQEAgLTExNCw3ICsxMTQsNiBAQAogCWRydl9kYXRhLT5hbGdvX2RhdGEuZ2V0c2RhID0gaXhwMjAwMF9iaXRfZ2V0c2RhOwogCWRydl9kYXRhLT5hbGdvX2RhdGEuZ2V0c2NsID0gaXhwMjAwMF9iaXRfZ2V0c2NsOwogCWRydl9kYXRhLT5hbGdvX2RhdGEudWRlbGF5ID0gNjsKLQlkcnZfZGF0YS0+YWxnb19kYXRhLm1kZWxheSA9IDY7CiAJZHJ2X2RhdGEtPmFsZ29fZGF0YS50aW1lb3V0ID0gMTAwOwogCiAJZHJ2X2RhdGEtPmFkYXB0ZXIuaWQgPSBJMkNfSFdfQl9JWFAyMDAwLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaXhwNHh4LmMKaW5kZXggMmVkMDcxMS4uYWI1NzMyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1peHA0eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWl4cDR4eC5jCkBAIC0xMjIsNyArMTIyLDYgQEAKIAlkcnZfZGF0YS0+YWxnb19kYXRhLmdldHNkYSA9IGl4cDR4eF9iaXRfZ2V0c2RhOwogCWRydl9kYXRhLT5hbGdvX2RhdGEuZ2V0c2NsID0gaXhwNHh4X2JpdF9nZXRzY2w7CiAJZHJ2X2RhdGEtPmFsZ29fZGF0YS51ZGVsYXkgPSAxMDsKLQlkcnZfZGF0YS0+YWxnb19kYXRhLm1kZWxheSA9IDEwOwogCWRydl9kYXRhLT5hbGdvX2RhdGEudGltZW91dCA9IDEwMDsKIAogCWRydl9kYXRhLT5hZGFwdGVyLmlkID0gSTJDX0hXX0JfSVhQNFhYOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKaW5kZXggMzc3YWI0MC4uMTU1YTk4NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCkBAIC0yNzIsNyArMjcyLDcgQEAKIAlyZXR1cm4gSTJDX0ZVTkNfSTJDIHwgSTJDX0ZVTkNfU01CVVNfRU1VTDsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG1wY19hbGdvID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG1wY19hbGdvID0gewogCS5tYXN0ZXJfeGZlciA9IG1wY194ZmVyLAogCS5mdW5jdGlvbmFsaXR5ID0gbXBjX2Z1bmN0aW9uYWxpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tdjY0eHh4LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwppbmRleCBhYzVjZGUxLi5lYWNiYWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW12NjR4eHguYwpAQCAtNDMxLDcgKzQzMSw3IEBACiAJcmV0dXJuIG51bTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIG12NjR4eHhfaTJjX2FsZ28gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gbXY2NHh4eF9pMmNfYWxnbyA9IHsKIAkubWFzdGVyX3hmZXIgPSBtdjY0eHh4X2kyY194ZmVyLAogCS5mdW5jdGlvbmFsaXR5ID0gbXY2NHh4eF9pMmNfZnVuY3Rpb25hbGl0eSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW5mb3JjZTIuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCmluZGV4IDYwNGI0OWUuLmUwMjkyZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbmZvcmNlMi5jCkBAIC0xMDksNyArMTA5LDcgQEAKIHN0YXRpYyB1MzIgbmZvcmNlMl9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcik7CiAKIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIgPSBuZm9yY2UyX2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eSA9IG5mb3JjZTJfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jb3Jlcy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vY29yZXMuYwppbmRleCA1OTI4MjQwLi45NTJhMjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9jb3Jlcy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtb2NvcmVzLmMKQEAgLTE5OSw3ICsxOTksNyBAQAogCXJldHVybiBJMkNfRlVOQ19JMkMgfCBJMkNfRlVOQ19TTUJVU19FTVVMOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gb2NvcmVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBvY29yZXNfYWxnb3JpdGhtID0gewogCS5tYXN0ZXJfeGZlcgk9IG9jb3Jlc194ZmVyLAogCS5mdW5jdGlvbmFsaXR5CT0gb2NvcmVzX2Z1bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW9tYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWQ4N2QyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1vbWFwLmMKQEAgLTAsMCArMSw2NzYgQEAKKy8qCisgKiBUSSBPTUFQIEkyQyBtYXN0ZXIgbW9kZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA0IFRleGFzIEluc3RydW1lbnRzLgorICoKKyAqIFVwZGF0ZWQgdG8gd29yayB3aXRoIG11bHRpcGxlIEkyQyBpbnRlcmZhY2VzIG9uIDI0eHggYnkKKyAqIFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+IGFuZCBJbXJlIERlYWsgPGltcmUuZGVha0Bub2tpYS5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgTm9raWEgQ29ycG9yYXRpb24KKyAqCisgKiBDbGVhbmVkIHVwIGJ5IEp1aGEgWXJq9mzkIDxqdWhhLnlyam9sYUBub2tpYS5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworLyogdGltZW91dCB3YWl0aW5nIGZvciB0aGUgY29udHJvbGxlciB0byByZXNwb25kICovCisjZGVmaW5lIE9NQVBfSTJDX1RJTUVPVVQgKG1zZWNzX3RvX2ppZmZpZXMoMTAwMCkpCisKKyNkZWZpbmUgT01BUF9JMkNfUkVWX1JFRwkJMHgwMAorI2RlZmluZSBPTUFQX0kyQ19JRV9SRUcJCQkweDA0CisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfUkVHCQkweDA4CisjZGVmaW5lIE9NQVBfSTJDX0lWX1JFRwkJCTB4MGMKKyNkZWZpbmUgT01BUF9JMkNfU1lTU19SRUcJCTB4MTAKKyNkZWZpbmUgT01BUF9JMkNfQlVGX1JFRwkJMHgxNAorI2RlZmluZSBPTUFQX0kyQ19DTlRfUkVHCQkweDE4CisjZGVmaW5lIE9NQVBfSTJDX0RBVEFfUkVHCQkweDFjCisjZGVmaW5lIE9NQVBfSTJDX1NZU0NfUkVHCQkweDIwCisjZGVmaW5lIE9NQVBfSTJDX0NPTl9SRUcJCTB4MjQKKyNkZWZpbmUgT01BUF9JMkNfT0FfUkVHCQkJMHgyOAorI2RlZmluZSBPTUFQX0kyQ19TQV9SRUcJCQkweDJjCisjZGVmaW5lIE9NQVBfSTJDX1BTQ19SRUcJCTB4MzAKKyNkZWZpbmUgT01BUF9JMkNfU0NMTF9SRUcJCTB4MzQKKyNkZWZpbmUgT01BUF9JMkNfU0NMSF9SRUcJCTB4MzgKKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9SRUcJCTB4M2MKKworLyogSTJDIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKE9NQVBfSTJDX0lFKTogKi8KKyNkZWZpbmUgT01BUF9JMkNfSUVfWFJEWQkoMSA8PCA0KQkvKiBUWCBkYXRhIHJlYWR5IGludCBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfSUVfUlJEWQkoMSA8PCAzKQkvKiBSWCBkYXRhIHJlYWR5IGludCBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfSUVfQVJEWQkoMSA8PCAyKQkvKiBBY2Nlc3MgcmVhZHkgaW50IGVuYWJsZSAqLworI2RlZmluZSBPTUFQX0kyQ19JRV9OQUNLCSgxIDw8IDEpCS8qIE5vIGFjayBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfSTJDX0lFX0FMCQkoMSA8PCAwKQkvKiBBcmJpdHJhdGlvbiBsb3N0IGludCBlbmEgKi8KKworLyogSTJDIFN0YXR1cyBSZWdpc3RlciAoT01BUF9JMkNfU1RBVCk6ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfU0JECSgxIDw8IDE1KQkvKiBTaW5nbGUgYnl0ZSBkYXRhICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfQkIJKDEgPDwgMTIpCS8qIEJ1cyBidXN5ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfUk9WUgkoMSA8PCAxMSkJLyogUmVjZWl2ZSBvdmVycnVuICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfWFVERgkoMSA8PCAxMCkJLyogVHJhbnNtaXQgdW5kZXJmbG93ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfQUFTCSgxIDw8IDkpCS8qIEFkZHJlc3MgYXMgc2xhdmUgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1RBVF9BRDAJKDEgPDwgOCkJLyogQWRkcmVzcyB6ZXJvICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfWFJEWQkoMSA8PCA0KQkvKiBUcmFuc21pdCBkYXRhIHJlYWR5ICovCisjZGVmaW5lIE9NQVBfSTJDX1NUQVRfUlJEWQkoMSA8PCAzKQkvKiBSZWNlaXZlIGRhdGEgcmVhZHkgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1RBVF9BUkRZCSgxIDw8IDIpCS8qIFJlZ2lzdGVyIGFjY2VzcyByZWFkeSAqLworI2RlZmluZSBPTUFQX0kyQ19TVEFUX05BQ0sJKDEgPDwgMSkJLyogTm8gYWNrIGludGVycnVwdCBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1RBVF9BTAkoMSA8PCAwKQkvKiBBcmJpdHJhdGlvbiBsb3N0IGludCBlbmEgKi8KKworLyogSTJDIEJ1ZmZlciBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChPTUFQX0kyQ19CVUYpOiAqLworI2RlZmluZSBPTUFQX0kyQ19CVUZfUkRNQV9FTgkoMSA8PCAxNSkJLyogUlggRE1BIGNoYW5uZWwgZW5hYmxlICovCisjZGVmaW5lIE9NQVBfSTJDX0JVRl9YRE1BX0VOCSgxIDw8IDcpCS8qIFRYIERNQSBjaGFubmVsIGVuYWJsZSAqLworCisvKiBJMkMgQ29uZmlndXJhdGlvbiBSZWdpc3RlciAoT01BUF9JMkNfQ09OKTogKi8KKyNkZWZpbmUgT01BUF9JMkNfQ09OX0VOCQkoMSA8PCAxNSkJLyogSTJDIG1vZHVsZSBlbmFibGUgKi8KKyNkZWZpbmUgT01BUF9JMkNfQ09OX0JFCQkoMSA8PCAxNCkJLyogQmlnIGVuZGlhbiBtb2RlICovCisjZGVmaW5lIE9NQVBfSTJDX0NPTl9TVEIJKDEgPDwgMTEpCS8qIFN0YXJ0IGJ5dGUgbW9kZSAobWFzdGVyKSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fTVNUCSgxIDw8IDEwKQkvKiBNYXN0ZXIvc2xhdmUgbW9kZSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fVFJYCSgxIDw8IDkpCS8qIFRYL1JYIG1vZGUgKG1hc3RlciBvbmx5KSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fWEEJCSgxIDw8IDgpCS8qIEV4cGFuZCBhZGRyZXNzICovCisjZGVmaW5lIE9NQVBfSTJDX0NPTl9STQkJKDEgPDwgMikJLyogUmVwZWF0IG1vZGUgKG1hc3RlciBvbmx5KSAqLworI2RlZmluZSBPTUFQX0kyQ19DT05fU1RQCSgxIDw8IDEpCS8qIFN0b3AgY29uZCAobWFzdGVyIG9ubHkpICovCisjZGVmaW5lIE9NQVBfSTJDX0NPTl9TVFQJKDEgPDwgMCkJLyogU3RhcnQgY29uZGl0aW9uIChtYXN0ZXIpICovCisKKy8qIEkyQyBTeXN0ZW0gVGVzdCBSZWdpc3RlciAoT01BUF9JMkNfU1lTVEVTVCk6ICovCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9TVF9FTgkJKDEgPDwgMTUpCS8qIFN5c3RlbSB0ZXN0IGVuYWJsZSAqLworI2RlZmluZSBPTUFQX0kyQ19TWVNURVNUX0ZSRUUJCSgxIDw8IDE0KQkvKiBGcmVlIHJ1bm5pbmcgbW9kZSAqLworI2RlZmluZSBPTUFQX0kyQ19TWVNURVNUX1RNT0RFX01BU0sJKDMgPDwgMTIpCS8qIFRlc3QgbW9kZSBzZWxlY3QgKi8KKyNkZWZpbmUgT01BUF9JMkNfU1lTVEVTVF9UTU9ERV9TSElGVAkoMTIpCQkvKiBUZXN0IG1vZGUgc2VsZWN0ICovCisjZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1RfU0NMX0kJCSgxIDw8IDMpCS8qIFNDTCBsaW5lIHNlbnNlIGluICovCisjZGVmaW5lIE9NQVBfSTJDX1NZU1RFU1RfU0NMX08JCSgxIDw8IDIpCS8qIFNDTCBsaW5lIGRyaXZlIG91dCAqLworI2RlZmluZSBPTUFQX0kyQ19TWVNURVNUX1NEQV9JCQkoMSA8PCAxKQkvKiBTREEgbGluZSBzZW5zZSBpbiAqLworI2RlZmluZSBPTUFQX0kyQ19TWVNURVNUX1NEQV9PCQkoMSA8PCAwKQkvKiBTREEgbGluZSBkcml2ZSBvdXQgKi8KKyNlbmRpZgorCisvKiBJMkMgU3lzdGVtIFN0YXR1cyByZWdpc3RlciAoT01BUF9JMkNfU1lTUyk6ICovCisjZGVmaW5lIE9NQVBfSTJDX1NZU1NfUkRPTkUJCSgxIDw8IDApCS8qIFJlc2V0IERvbmUgKi8KKworLyogSTJDIFN5c3RlbSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyIChPTUFQX0kyQ19TWVNDKTogKi8KKyNkZWZpbmUgT01BUF9JMkNfU1lTQ19TUlNUCQkoMSA8PCAxKQkvKiBTb2Z0IFJlc2V0ICovCisKKy8qIFJFVklTSVQ6IFVzZSBwbGF0Zm9ybV9kYXRhIGluc3RlYWQgb2YgbW9kdWxlIHBhcmFtZXRlcnMgKi8KKy8qIEZhc3QgTW9kZSA9IDQwMCBrSHosIFN0YW5kYXJkID0gMTAwIGtIeiAqLworc3RhdGljIGludCBjbG9jayA9IDEwMDsgLyogRGVmYXVsdDogMTAwIGtIeiAqLworbW9kdWxlX3BhcmFtKGNsb2NrLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhjbG9jaywgIlNldCBJMkMgY2xvY2sgaW4ga0h6OiA0MDA9ZmFzdCBtb2RlIChkZWZhdWx0ID09IDEwMCkiKTsKKworc3RydWN0IG9tYXBfaTJjX2RldiB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwl2b2lkIF9faW9tZW0JCSpiYXNlOwkJLyogdmlydHVhbCAqLworCWludAkJCWlycTsKKwlzdHJ1Y3QgY2xrCQkqaWNsazsJCS8qIEludGVyZmFjZSBjbG9jayAqLworCXN0cnVjdCBjbGsJCSpmY2xrOwkJLyogRnVuY3Rpb25hbCBjbG9jayAqLworCXN0cnVjdCBjb21wbGV0aW9uCWNtZF9jb21wbGV0ZTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSppb2FyZWE7CisJdTE2CQkJY21kX2VycjsKKwl1OAkJCSpidWY7CisJc2l6ZV90CQkJYnVmX2xlbjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJYWRhcHRlcjsKKwl1bnNpZ25lZAkJcmV2MToxOworfTsKKworc3RhdGljIGlubGluZSB2b2lkIG9tYXBfaTJjX3dyaXRlX3JlZyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICppMmNfZGV2LAorCQkJCSAgICAgIGludCByZWcsIHUxNiB2YWwpCit7CisJX19yYXdfd3JpdGV3KHZhbCwgaTJjX2Rldi0+YmFzZSArIHJlZyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTE2IG9tYXBfaTJjX3JlYWRfcmVnKHN0cnVjdCBvbWFwX2kyY19kZXYgKmkyY19kZXYsIGludCByZWcpCit7CisJcmV0dXJuIF9fcmF3X3JlYWR3KGkyY19kZXYtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgaW50IG9tYXBfaTJjX2dldF9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQoreworCWlmIChjcHVfaXNfb21hcDE2eHgoKSB8fCBjcHVfaXNfb21hcDI0eHgoKSkgeworCQlkZXYtPmljbGsgPSBjbGtfZ2V0KGRldi0+ZGV2LCAiaTJjX2ljayIpOworCQlpZiAoSVNfRVJSKGRldi0+aWNsaykpIHsKKwkJCWRldi0+aWNsayA9IE5VTEw7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQorCX0KKworCWRldi0+ZmNsayA9IGNsa19nZXQoZGV2LT5kZXYsICJpMmNfZmNrIik7CisJaWYgKElTX0VSUihkZXYtPmZjbGspKSB7CisJCWlmIChkZXYtPmljbGsgIT0gTlVMTCkgeworCQkJY2xrX3B1dChkZXYtPmljbGspOworCQkJZGV2LT5pY2xrID0gTlVMTDsKKwkJfQorCQlkZXYtPmZjbGsgPSBOVUxMOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgb21hcF9pMmNfcHV0X2Nsb2NrcyhzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCit7CisJY2xrX3B1dChkZXYtPmZjbGspOworCWRldi0+ZmNsayA9IE5VTEw7CisJaWYgKGRldi0+aWNsayAhPSBOVUxMKSB7CisJCWNsa19wdXQoZGV2LT5pY2xrKTsKKwkJZGV2LT5pY2xrID0gTlVMTDsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIG9tYXBfaTJjX2VuYWJsZV9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQoreworCWlmIChkZXYtPmljbGsgIT0gTlVMTCkKKwkJY2xrX2VuYWJsZShkZXYtPmljbGspOworCWNsa19lbmFibGUoZGV2LT5mY2xrKTsKK30KKworc3RhdGljIHZvaWQgb21hcF9pMmNfZGlzYWJsZV9jbG9ja3Moc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQoreworCWlmIChkZXYtPmljbGsgIT0gTlVMTCkKKwkJY2xrX2Rpc2FibGUoZGV2LT5pY2xrKTsKKwljbGtfZGlzYWJsZShkZXYtPmZjbGspOworfQorCitzdGF0aWMgaW50IG9tYXBfaTJjX2luaXQoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2KQoreworCXUxNiBwc2MgPSAwOworCXVuc2lnbmVkIGxvbmcgZmNsa19yYXRlID0gMTIwMDAwMDA7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJaWYgKCFkZXYtPnJldjEpIHsKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU1lTQ19SRUcsIE9NQVBfSTJDX1NZU0NfU1JTVCk7CisJCS8qIEZvciBzb21lIHJlYXNvbiB3ZSBuZWVkIHRvIHNldCB0aGUgRU4gYml0IGJlZm9yZSB0aGUKKwkJICogcmVzZXQgZG9uZSBiaXQgZ2V0cyBzZXQuICovCisJCXRpbWVvdXQgPSBqaWZmaWVzICsgT01BUF9JMkNfVElNRU9VVDsKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgT01BUF9JMkNfQ09OX0VOKTsKKwkJd2hpbGUgKCEob21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19TWVNTX1JFRykgJgorCQkJIE9NQVBfSTJDX1NZU1NfUkRPTkUpKSB7CisJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJCWRldl93YXJuKGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIgorCQkJCQkJImZvciBjb250cm9sbGVyIHJlc2V0XG4iKTsKKwkJCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwkJCX0KKwkJCW1zbGVlcCgxKTsKKwkJfQorCX0KKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKKworCWlmIChjcHVfY2xhc3NfaXNfb21hcDEoKSkgeworCQlzdHJ1Y3QgY2xrICphcm14b3JfY2s7CisKKwkJYXJteG9yX2NrID0gY2xrX2dldChOVUxMLCAiYXJteG9yX2NrIik7CisJCWlmIChJU19FUlIoYXJteG9yX2NrKSkKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAiQ291bGQgbm90IGdldCBhcm14b3JfY2tcbiIpOworCQllbHNlIHsKKwkJCWZjbGtfcmF0ZSA9IGNsa19nZXRfcmF0ZShhcm14b3JfY2spOworCQkJY2xrX3B1dChhcm14b3JfY2spOworCQl9CisJCS8qIFRSTSBmb3IgNTkxMiBzYXlzIHRoZSBJMkMgY2xvY2sgbXVzdCBiZSBwcmVzY2FsZWQgdG8gYmUKKwkJICogYmV0d2VlbiA3IC0gMTIgTUh6LiBUaGUgWE9SIGlucHV0IGNsb2NrIGlzIHR5cGljYWxseQorCQkgKiAxMiwgMTMgb3IgMTkuMiBNSHouIFNvIHdlIHNob3VsZCBoYXZlIGNvZGUgdGhhdCBwcm9kdWNlczoKKwkJICoKKwkJICogWE9SIE1IeglEaXZpZGVyCQlQcmVzY2FsZXIKKwkJICogMTIJCTEJCTAKKwkJICogMTMJCTIJCTEKKwkJICogMTkuMgkJMgkJMQorCQkgKi8KKwkJaWYgKGZjbGtfcmF0ZSA+IDE2MDAwMDAwKQorCQkJcHNjID0gKGZjbGtfcmF0ZSArIDgwMDAwMDApIC8gMTIwMDAwMDA7CisJfQorCisJLyogU2V0dXAgY2xvY2sgcHJlc2NhbGVyIHRvIG9idGFpbiBhcHByb3ggMTJNSHogSTJDIG1vZHVsZSBjbG9jazogKi8KKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19QU0NfUkVHLCBwc2MpOworCisJLyogUHJvZ3JhbSBkZXNpcmVkIG9wZXJhdGluZyByYXRlICovCisJZmNsa19yYXRlIC89IChwc2MgKyAxKSAqIDEwMDA7CisJaWYgKHBzYyA+IDIpCisJCXBzYyA9IDI7CisKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TQ0xMX1JFRywKKwkJCSAgIGZjbGtfcmF0ZSAvIChjbG9jayAqIDIpIC0gNyArIHBzYyk7CisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU0NMSF9SRUcsCisJCQkgICBmY2xrX3JhdGUgLyAoY2xvY2sgKiAyKSAtIDcgKyBwc2MpOworCisJLyogVGFrZSB0aGUgSTJDIG1vZHVsZSBvdXQgb2YgcmVzZXQ6ICovCisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgT01BUF9JMkNfQ09OX0VOKTsKKworCS8qIEVuYWJsZSBpbnRlcnJ1cHRzICovCisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfSUVfUkVHLAorCQkJICAgKE9NQVBfSTJDX0lFX1hSRFkgfCBPTUFQX0kyQ19JRV9SUkRZIHwKKwkJCSAgICBPTUFQX0kyQ19JRV9BUkRZIHwgT01BUF9JMkNfSUVfTkFDSyB8CisJCQkgICAgT01BUF9JMkNfSUVfQUwpKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFdhaXRpbmcgb24gQnVzIEJ1c3kKKyAqLworc3RhdGljIGludCBvbWFwX2kyY193YWl0X2Zvcl9iYihzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisJdGltZW91dCA9IGppZmZpZXMgKyBPTUFQX0kyQ19USU1FT1VUOworCXdoaWxlIChvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX1NUQVRfUkVHKSAmIE9NQVBfSTJDX1NUQVRfQkIpIHsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpIHsKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAidGltZW91dCB3YWl0aW5nIGZvciBidXMgcmVhZHlcbiIpOworCQkJcmV0dXJuIC1FVElNRURPVVQ7CisJCX0KKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogTG93IGxldmVsIG1hc3RlciByZWFkL3dyaXRlIHRyYW5zYWN0aW9uLgorICovCitzdGF0aWMgaW50IG9tYXBfaTJjX3hmZXJfbXNnKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwKKwkJCSAgICAgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IHN0b3ApCit7CisJc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwKTsKKwlpbnQgcjsKKwl1MTYgdzsKKworCWRldl9kYmcoZGV2LT5kZXYsICJhZGRyOiAweCUwNHgsIGxlbjogJWQsIGZsYWdzOiAweCV4LCBzdG9wOiAlZFxuIiwKKwkJbXNnLT5hZGRyLCBtc2ctPmxlbiwgbXNnLT5mbGFncywgc3RvcCk7CisKKwlpZiAobXNnLT5sZW4gPT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TQV9SRUcsIG1zZy0+YWRkcik7CisKKwkvKiBSRVZJU0lUOiBDb3VsZCB0aGUgU1RCIGJpdCBvZiBJMkNfQ09OIGJlIHVzZWQgd2l0aCBwcm9iaW5nPyAqLworCWRldi0+YnVmID0gbXNnLT5idWY7CisJZGV2LT5idWZfbGVuID0gbXNnLT5sZW47CisKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DTlRfUkVHLCBkZXYtPmJ1Zl9sZW4pOworCisJaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNtZF9jb21wbGV0ZSk7CisJZGV2LT5jbWRfZXJyID0gMDsKKworCXcgPSBPTUFQX0kyQ19DT05fRU4gfCBPTUFQX0kyQ19DT05fTVNUIHwgT01BUF9JMkNfQ09OX1NUVDsKKwlpZiAobXNnLT5mbGFncyAmIEkyQ19NX1RFTikKKwkJdyB8PSBPTUFQX0kyQ19DT05fWEE7CisJaWYgKCEobXNnLT5mbGFncyAmIEkyQ19NX1JEKSkKKwkJdyB8PSBPTUFQX0kyQ19DT05fVFJYOworCWlmIChzdG9wKQorCQl3IHw9IE9NQVBfSTJDX0NPTl9TVFA7CisJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRywgdyk7CisKKwlyID0gd2FpdF9mb3JfY29tcGxldGlvbl9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQoJmRldi0+Y21kX2NvbXBsZXRlLAorCQkJCQkJICAgICAgT01BUF9JMkNfVElNRU9VVCk7CisJZGV2LT5idWZfbGVuID0gMDsKKwlpZiAociA8IDApCisJCXJldHVybiByOworCWlmIChyID09IDApIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImNvbnRyb2xsZXIgdGltZWQgb3V0XG4iKTsKKwkJb21hcF9pMmNfaW5pdChkZXYpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlpZiAobGlrZWx5KCFkZXYtPmNtZF9lcnIpKQorCQlyZXR1cm4gMDsKKworCS8qIFdlIGhhdmUgYW4gZXJyb3IgKi8KKwlpZiAoZGV2LT5jbWRfZXJyICYgKE9NQVBfSTJDX1NUQVRfQUwgfCBPTUFQX0kyQ19TVEFUX1JPVlIgfAorCQkJICAgIE9NQVBfSTJDX1NUQVRfWFVERikpIHsKKwkJb21hcF9pMmNfaW5pdChkZXYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlpZiAoZGV2LT5jbWRfZXJyICYgT01BUF9JMkNfU1RBVF9OQUNLKSB7CisJCWlmIChtc2ctPmZsYWdzICYgSTJDX01fSUdOT1JFX05BSykKKwkJCXJldHVybiAwOworCQlpZiAoc3RvcCkgeworCQkJdyA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfQ09OX1JFRyk7CisJCQl3IHw9IE9NQVBfSTJDX0NPTl9TVFA7CisJCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCB3KTsKKwkJfQorCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIC1FSU87Cit9CisKKworLyoKKyAqIFByZXBhcmUgY29udHJvbGxlciBmb3IgYSB0cmFuc2FjdGlvbiBhbmQgY2FsbCBvbWFwX2kyY194ZmVyX21zZworICogdG8gZG8gdGhlIHdvcmsgZHVyaW5nIElSUSBwcm9jZXNzaW5nLgorICovCitzdGF0aWMgaW50CitvbWFwX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcCk7CisJaW50IGk7CisJaW50IHI7CisKKwlvbWFwX2kyY19lbmFibGVfY2xvY2tzKGRldik7CisKKwkvKiBSRVZJU0lUOiBpbml0aWFsaXplIGFuZCB1c2UgYWRhcC0+cmV0cmllcy4gVGhpcyBpcyBhbiBvcHRpb25hbAorCSAqIGZlYXR1cmUgKi8KKwlpZiAoKHIgPSBvbWFwX2kyY193YWl0X2Zvcl9iYihkZXYpKSA8IDApCisJCWdvdG8gb3V0OworCisJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7CisJCXIgPSBvbWFwX2kyY194ZmVyX21zZyhhZGFwLCAmbXNnc1tpXSwgKGkgPT0gKG51bSAtIDEpKSk7CisJCWlmIChyICE9IDApCisJCQlicmVhazsKKwl9CisKKwlpZiAociA9PSAwKQorCQlyID0gbnVtOworb3V0OgorCW9tYXBfaTJjX2Rpc2FibGVfY2xvY2tzKGRldik7CisJcmV0dXJuIHI7Cit9CisKK3N0YXRpYyB1MzIKK29tYXBfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCXJldHVybiBJMkNfRlVOQ19JMkMgfCAoSTJDX0ZVTkNfU01CVVNfRU1VTCAmIH5JMkNfRlVOQ19TTUJVU19RVUlDSyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb21hcF9pMmNfY29tcGxldGVfY21kKHN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiwgdTE2IGVycikKK3sKKwlkZXYtPmNtZF9lcnIgfD0gZXJyOworCWNvbXBsZXRlKCZkZXYtPmNtZF9jb21wbGV0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorb21hcF9pMmNfYWNrX3N0YXQoc3RydWN0IG9tYXBfaTJjX2RldiAqZGV2LCB1MTYgc3RhdCkKK3sKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19TVEFUX1JFRywgc3RhdCk7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF9pMmNfcmV2MV9pc3IoaW50IHRoaXNfaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBvbWFwX2kyY19kZXYgKmRldiA9IGRldl9pZDsKKwl1MTYgaXYsIHc7CisKKwlpdiA9IG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfSVZfUkVHKTsKKwlzd2l0Y2ggKGl2KSB7CisJY2FzZSAweDAwOgkvKiBOb25lICovCisJCWJyZWFrOworCWNhc2UgMHgwMToJLyogQXJiaXRyYXRpb24gbG9zdCAqLworCQlkZXZfZXJyKGRldi0+ZGV2LCAiQXJiaXRyYXRpb24gbG9zdFxuIik7CisJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIE9NQVBfSTJDX1NUQVRfQUwpOworCQlicmVhazsKKwljYXNlIDB4MDI6CS8qIE5vIGFja25vd2xlZGdlbWVudCAqLworCQlvbWFwX2kyY19jb21wbGV0ZV9jbWQoZGV2LCBPTUFQX0kyQ19TVEFUX05BQ0spOworCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCBPTUFQX0kyQ19DT05fU1RQKTsKKwkJYnJlYWs7CisJY2FzZSAweDAzOgkvKiBSZWdpc3RlciBhY2Nlc3MgcmVhZHkgKi8KKwkJb21hcF9pMmNfY29tcGxldGVfY21kKGRldiwgMCk7CisJCWJyZWFrOworCWNhc2UgMHgwNDoJLyogUmVjZWl2ZSBkYXRhIHJlYWR5ICovCisJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJCXcgPSBvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX0RBVEFfUkVHKTsKKwkJCSpkZXYtPmJ1ZisrID0gdzsKKwkJCWRldi0+YnVmX2xlbi0tOworCQkJaWYgKGRldi0+YnVmX2xlbikgeworCQkJCSpkZXYtPmJ1ZisrID0gdyA+PiA4OworCQkJCWRldi0+YnVmX2xlbi0tOworCQkJfQorCQl9IGVsc2UKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJSUkRZIElSUSB3aGlsZSBubyBkYXRhIHJlcXVlc3RlZFxuIik7CisJCWJyZWFrOworCWNhc2UgMHgwNToJLyogVHJhbnNtaXQgZGF0YSByZWFkeSAqLworCQlpZiAoZGV2LT5idWZfbGVuKSB7CisJCQl3ID0gKmRldi0+YnVmKys7CisJCQlkZXYtPmJ1Zl9sZW4tLTsKKwkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJCQl3IHw9ICpkZXYtPmJ1ZisrIDw8IDg7CisJCQkJZGV2LT5idWZfbGVuLS07CisJCQl9CisJCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19EQVRBX1JFRywgdyk7CisJCX0gZWxzZQorCQkJZGV2X2VycihkZXYtPmRldiwgIlhSRFkgSVJRIHdoaWxlIG5vIGRhdGEgdG8gc2VuZFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBJUlFfTk9ORTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdAorb21hcF9pMmNfaXNyKGludCB0aGlzX2lycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3Qgb21hcF9pMmNfZGV2ICpkZXYgPSBkZXZfaWQ7CisJdTE2IGJpdHM7CisJdTE2IHN0YXQsIHc7CisJaW50IGNvdW50ID0gMDsKKworCWJpdHMgPSBvbWFwX2kyY19yZWFkX3JlZyhkZXYsIE9NQVBfSTJDX0lFX1JFRyk7CisJd2hpbGUgKChzdGF0ID0gKG9tYXBfaTJjX3JlYWRfcmVnKGRldiwgT01BUF9JMkNfU1RBVF9SRUcpKSkgJiBiaXRzKSB7CisJCWRldl9kYmcoZGV2LT5kZXYsICJJUlEgKElTUiA9IDB4JTA0eClcbiIsIHN0YXQpOworCQlpZiAoY291bnQrKyA9PSAxMDApIHsKKwkJCWRldl93YXJuKGRldi0+ZGV2LCAiVG9vIG11Y2ggd29yayBpbiBvbmUgSVJRXG4iKTsKKwkJCWJyZWFrOworCQl9CisKKwkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfU1RBVF9SRUcsIHN0YXQpOworCisJCWlmIChzdGF0ICYgT01BUF9JMkNfU1RBVF9BUkRZKSB7CisJCQlvbWFwX2kyY19jb21wbGV0ZV9jbWQoZGV2LCAwKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChzdGF0ICYgT01BUF9JMkNfU1RBVF9SUkRZKSB7CisJCQl3ID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19EQVRBX1JFRyk7CisJCQlpZiAoZGV2LT5idWZfbGVuKSB7CisJCQkJKmRldi0+YnVmKysgPSB3OworCQkJCWRldi0+YnVmX2xlbi0tOworCQkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJCQkJKmRldi0+YnVmKysgPSB3ID4+IDg7CisJCQkJCWRldi0+YnVmX2xlbi0tOworCQkJCX0KKwkJCX0gZWxzZQorCQkJCWRldl9lcnIoZGV2LT5kZXYsICJSUkRZIElSUSB3aGlsZSBubyBkYXRhIgorCQkJCQkJInJlcXVlc3RlZFxuIik7CisJCQlvbWFwX2kyY19hY2tfc3RhdChkZXYsIE9NQVBfSTJDX1NUQVRfUlJEWSk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfWFJEWSkgeworCQkJdyA9IDA7CisJCQlpZiAoZGV2LT5idWZfbGVuKSB7CisJCQkJdyA9ICpkZXYtPmJ1ZisrOworCQkJCWRldi0+YnVmX2xlbi0tOworCQkJCWlmIChkZXYtPmJ1Zl9sZW4pIHsKKwkJCQkJdyB8PSAqZGV2LT5idWYrKyA8PCA4OworCQkJCQlkZXYtPmJ1Zl9sZW4tLTsKKwkJCQl9CisJCQl9IGVsc2UKKwkJCQlkZXZfZXJyKGRldi0+ZGV2LCAiWFJEWSBJUlEgd2hpbGUgbm8iCisJCQkJCSJkYXRhIHRvIHNlbmRcbiIpOworCQkJb21hcF9pMmNfd3JpdGVfcmVnKGRldiwgT01BUF9JMkNfREFUQV9SRUcsIHcpOworCQkJb21hcF9pMmNfYWNrX3N0YXQoZGV2LCBPTUFQX0kyQ19TVEFUX1hSRFkpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHN0YXQgJiBPTUFQX0kyQ19TVEFUX1JPVlIpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJSZWNlaXZlIG92ZXJydW5cbiIpOworCQkJZGV2LT5jbWRfZXJyIHw9IE9NQVBfSTJDX1NUQVRfUk9WUjsKKwkJfQorCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfWFVERikgeworCQkJZGV2X2VycihkZXYtPmRldiwgIlRyYW5zbWl0IG92ZXJmbG93XG4iKTsKKwkJCWRldi0+Y21kX2VyciB8PSBPTUFQX0kyQ19TVEFUX1hVREY7CisJCX0KKwkJaWYgKHN0YXQgJiBPTUFQX0kyQ19TVEFUX05BQ0spIHsKKwkJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIE9NQVBfSTJDX1NUQVRfTkFDSyk7CisJCQlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLAorCQkJCQkgICBPTUFQX0kyQ19DT05fU1RQKTsKKwkJfQorCQlpZiAoc3RhdCAmIE9NQVBfSTJDX1NUQVRfQUwpIHsKKwkJCWRldl9lcnIoZGV2LT5kZXYsICJBcmJpdHJhdGlvbiBsb3N0XG4iKTsKKwkJCW9tYXBfaTJjX2NvbXBsZXRlX2NtZChkZXYsIE9NQVBfSTJDX1NUQVRfQUwpOworCQl9CisJfQorCisJcmV0dXJuIGNvdW50ID8gSVJRX0hBTkRMRUQgOiBJUlFfTk9ORTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIG9tYXBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyCT0gb21hcF9pMmNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IG9tYXBfaTJjX2Z1bmMsCit9OworCitzdGF0aWMgaW50CitvbWFwX2kyY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBvbWFwX2kyY19kZXYJKmRldjsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmFkYXA7CisJc3RydWN0IHJlc291cmNlCQkqbWVtLCAqaXJxLCAqaW9hcmVhOworCWludCByOworCisJLyogTk9URTogZHJpdmVyIHVzZXMgdGhlIHN0YXRpYyByZWdpc3RlciBtYXBwaW5nICovCisJbWVtID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlKHBkZXYsIElPUkVTT1VSQ0VfTUVNLCAwKTsKKwlpZiAoIW1lbSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJubyBtZW0gcmVzb3VyY2U/XG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlycSA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX0lSUSwgMCk7CisJaWYgKCFpcnEpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAibm8gaXJxIHJlc291cmNlP1xuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlvYXJlYSA9IHJlcXVlc3RfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEsCisJCQlwZGV2LT5uYW1lKTsKKwlpZiAoIWlvYXJlYSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJJMkMgcmVnaW9uIGFscmVhZHkgY2xhaW1lZFxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaWYgKGNsb2NrID4gMjAwKQorCQljbG9jayA9IDQwMDsJLyogRmFzdCBtb2RlICovCisJZWxzZQorCQljbG9jayA9IDEwMDsJLyogU3RhbmRhcmQgbW9kZSAqLworCisJZGV2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfaTJjX2RldiksIEdGUF9LRVJORUwpOworCWlmICghZGV2KSB7CisJCXIgPSAtRU5PTUVNOworCQlnb3RvIGVycl9yZWxlYXNlX3JlZ2lvbjsKKwl9CisKKwlkZXYtPmRldiA9ICZwZGV2LT5kZXY7CisJZGV2LT5pcnEgPSBpcnEtPnN0YXJ0OworCWRldi0+YmFzZSA9ICh2b2lkIF9faW9tZW0gKikgSU9fQUREUkVTUyhtZW0tPnN0YXJ0KTsKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOworCisJaWYgKChyID0gb21hcF9pMmNfZ2V0X2Nsb2NrcyhkZXYpKSAhPSAwKQorCQlnb3RvIGVycl9mcmVlX21lbTsKKworCW9tYXBfaTJjX2VuYWJsZV9jbG9ja3MoZGV2KTsKKworCWlmIChjcHVfaXNfb21hcDE1eHgoKSkKKwkJZGV2LT5yZXYxID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19SRVZfUkVHKSA8IDB4MjA7CisKKwkvKiByZXNldCBBU0FQLCBjbGVhcmluZyBhbnkgSVJRcyAqLworCW9tYXBfaTJjX2luaXQoZGV2KTsKKworCXIgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgZGV2LT5yZXYxID8gb21hcF9pMmNfcmV2MV9pc3IgOiBvbWFwX2kyY19pc3IsCisJCQkwLCBwZGV2LT5uYW1lLCBkZXYpOworCisJaWYgKHIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWx1cmUgcmVxdWVzdGluZyBpcnEgJWlcbiIsIGRldi0+aXJxKTsKKwkJZ290byBlcnJfdW51c2VfY2xvY2tzOworCX0KKwlyID0gb21hcF9pMmNfcmVhZF9yZWcoZGV2LCBPTUFQX0kyQ19SRVZfUkVHKSAmIDB4ZmY7CisJZGV2X2luZm8oZGV2LT5kZXYsICJidXMgJWQgcmV2JWQuJWQgYXQgJWQga0h6XG4iLAorCQkgcGRldi0+aWQsIHIgPj4gNCwgciAmIDB4ZiwgY2xvY2spOworCisJYWRhcCA9ICZkZXYtPmFkYXB0ZXI7CisJaTJjX3NldF9hZGFwZGF0YShhZGFwLCBkZXYpOworCWFkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJYWRhcC0+Y2xhc3MgPSBJMkNfQ0xBU1NfSFdNT047CisJc3RybmNweShhZGFwLT5uYW1lLCAiT01BUCBJMkMgYWRhcHRlciIsIHNpemVvZihhZGFwLT5uYW1lKSk7CisJYWRhcC0+YWxnbyA9ICZvbWFwX2kyY19hbGdvOworCWFkYXAtPmRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OworCisJLyogaTJjIGRldmljZSBkcml2ZXJzIG1heSBiZSBhY3RpdmUgb24gcmV0dXJuIGZyb20gYWRkX2FkYXB0ZXIoKSAqLworCXIgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CisJaWYgKHIpIHsKKwkJZGV2X2VycihkZXYtPmRldiwgImZhaWx1cmUgYWRkaW5nIGFkYXB0ZXJcbiIpOworCQlnb3RvIGVycl9mcmVlX2lycTsKKwl9CisKKwlvbWFwX2kyY19kaXNhYmxlX2Nsb2NrcyhkZXYpOworCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX2lycToKKwlmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKK2Vycl91bnVzZV9jbG9ja3M6CisJb21hcF9pMmNfZGlzYWJsZV9jbG9ja3MoZGV2KTsKKwlvbWFwX2kyY19wdXRfY2xvY2tzKGRldik7CitlcnJfZnJlZV9tZW06CisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CisJa2ZyZWUoZGV2KTsKK2Vycl9yZWxlYXNlX3JlZ2lvbjoKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKKwlyZWxlYXNlX21lbV9yZWdpb24obWVtLT5zdGFydCwgKG1lbS0+ZW5kIC0gbWVtLT5zdGFydCkgKyAxKTsKKworCXJldHVybiByOworfQorCitzdGF0aWMgaW50CitvbWFwX2kyY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9pMmNfZGV2CSpkZXYgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCSptZW07CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCWkyY19kZWxfYWRhcHRlcigmZGV2LT5hZGFwdGVyKTsKKwlvbWFwX2kyY193cml0ZV9yZWcoZGV2LCBPTUFQX0kyQ19DT05fUkVHLCAwKTsKKwlvbWFwX2kyY19wdXRfY2xvY2tzKGRldik7CisJa2ZyZWUoZGV2KTsKKwltZW0gPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCXJlbGVhc2VfbWVtX3JlZ2lvbihtZW0tPnN0YXJ0LCAobWVtLT5lbmQgLSBtZW0tPnN0YXJ0KSArIDEpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2kyY19kcml2ZXIgPSB7CisJLnByb2JlCQk9IG9tYXBfaTJjX3Byb2JlLAorCS5yZW1vdmUJCT0gb21hcF9pMmNfcmVtb3ZlLAorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJpMmNfb21hcCIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCisvKiBJMkMgbWF5IGJlIG5lZWRlZCB0byBicmluZyB1cCBvdGhlciBkcml2ZXJzICovCitzdGF0aWMgaW50IF9faW5pdAorb21hcF9pMmNfaW5pdF9kcml2ZXIodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX2kyY19kcml2ZXIpOworfQorc3Vic3lzX2luaXRjYWxsKG9tYXBfaTJjX2luaXRfZHJpdmVyKTsKKworc3RhdGljIHZvaWQgX19leGl0IG9tYXBfaTJjX2V4aXRfZHJpdmVyKHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJm9tYXBfaTJjX2RyaXZlcik7Cit9Cittb2R1bGVfZXhpdChvbWFwX2kyY19leGl0X2RyaXZlcik7CisKK01PRFVMRV9BVVRIT1IoIk1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4gKGFuZCBvdGhlcnMpIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlRJIE9NQVAgSTJDIGJ1cyBhZGFwdGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQtbGlnaHQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCmluZGV4IGUwOWViYmIuLjVlYjJiZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGFycG9ydC1saWdodC5jCkBAIC0xMDMsNyArMTAzLDYgQEAKIAkuZ2V0c2RhCQk9IHBhcnBvcnRfZ2V0c2RhLAogCS5nZXRzY2wJCT0gcGFycG9ydF9nZXRzY2wsCiAJLnVkZWxheQkJPSA1MCwKLQkubWRlbGF5CQk9IDUwLAogCS50aW1lb3V0CT0gSFosCiB9OyAKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wYXJwb3J0LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwppbmRleCA5MzRiZDU1Li40OGE4Mjk0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBhcnBvcnQuYwpAQCAtMTM4LDcgKzEzOCw2IEBACiAJLmdldHNkYQkJPSBwYXJwb3J0X2dldHNkYSwKIAkuZ2V0c2NsCQk9IHBhcnBvcnRfZ2V0c2NsLAogCS51ZGVsYXkJCT0gNjAsCi0JLm1kZWxheQkJPSA2MCwKIAkudGltZW91dAk9IEhaLAogfTsgCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcGlpeDQuYwppbmRleCA4ZjJmNjViLi4zMGM3YTFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBpaXg0LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1waWl4NC5jCkBAIC0zNzYsNyArMzc2LDcgQEAKIAkgICAgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQTsKIH0KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBwaWl4NF9hY2Nlc3MsCiAJLmZ1bmN0aW9uYWxpdHkJPSBwaWl4NF9mdW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcG93ZXJtYWMuYwppbmRleCBkNjU4ZDkxLi5hNTA4Y2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXBvd2VybWFjLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wb3dlcm1hYy5jCkBAIC0xNzUsNyArMTc1LDcgQEAKIH0KIAogLyogRm9yIG5vdywgd2Ugb25seSBoYW5kbGUgc21idXMgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfcG93ZXJtYWNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGkyY19wb3dlcm1hY19hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBpMmNfcG93ZXJtYWNfc21idXNfeGZlciwKIAkubWFzdGVyX3hmZXIJPSBpMmNfcG93ZXJtYWNfbWFzdGVyX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBpMmNfcG93ZXJtYWNfZnVuYywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXByb3NhdmFnZS5jCmluZGV4IDk0Nzk1MjUuLjc3NDVlMjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHJvc2F2YWdlLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1wcm9zYXZhZ2UuYwpAQCAtMTgwLDcgKzE4MCw2IEBACiAJcC0+YWxnby5nZXRzZGEJICA9IGJpdF9zM3ZpYV9nZXRzZGE7CiAJcC0+YWxnby5nZXRzY2wJICA9IGJpdF9zM3ZpYV9nZXRzY2w7CiAJcC0+YWxnby51ZGVsYXkJICA9IENZQ0xFX0RFTEFZOwotCXAtPmFsZ28ubWRlbGF5CSAgPSBDWUNMRV9ERUxBWTsKIAlwLT5hbGdvLnRpbWVvdXQJICA9IFRJTUVPVVQ7CiAJcC0+YWxnby5kYXRhCSAgPSBwOwogCXAtPm1tdmdhCSAgPSBtbXZnYTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXB4YS5jCmluZGV4IGVlMTE0YjQuLmNkNGFkOTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtcHhhLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1weGEuYwpAQCAtOTI2LDcgKzkyNiw3IEBACiAJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfcHhhX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBpMmNfcHhhX2FsZ29yaXRobSA9IHsKIAkubWFzdGVyX3hmZXIJPSBpMmNfcHhhX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBpMmNfcHhhX2Z1bmN0aW9uYWxpdHksCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zM2MyNDEwLmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwppbmRleCA1ZDI5NTBlLi45ZWJlNDI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXMzYzI0MTAuYwpAQCAtNTY2LDcgKzU2Niw3IEBACiAKIC8qIGkyYyBidXMgcmVnaXN0cmF0aW9uIGluZm8gKi8KIAotc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIHMzYzI0eHhfaTJjX2FsZ29yaXRobSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzM2MyNHh4X2kyY19hbGdvcml0aG0gPSB7CiAJLm1hc3Rlcl94ZmVyCQk9IHMzYzI0eHhfaTJjX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJCT0gczNjMjR4eF9pMmNfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNhdmFnZTQuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jCmluZGV4IDBjODUxODIuLjIwOWY0N2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2F2YWdlNC5jCkBAIC0xNDAsNyArMTQwLDYgQEAKIAkuZ2V0c2RhCQk9IGJpdF9zYXZpMmNfZ2V0c2RhLAogCS5nZXRzY2wJCT0gYml0X3NhdmkyY19nZXRzY2wsCiAJLnVkZWxheQkJPSBDWUNMRV9ERUxBWSwKLQkubWRlbGF5CQk9IENZQ0xFX0RFTEFZLAogCS50aW1lb3V0CT0gVElNRU9VVAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaWJ5dGUuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lieXRlLmMKaW5kZXggZmE1MDNlZC4uMGNhNTk5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaWJ5dGUuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpYnl0ZS5jCkBAIC0xLDYgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNCBTdGV2ZW4gSi4gSGlsbAogICogQ29weXJpZ2h0IChDKSAyMDAxLDIwMDIsMjAwMyBCcm9hZGNvbSBDb3Jwb3JhdGlvbgorICogQ29weXJpZ2h0IChDKSAxOTk1LTIwMDAgU2ltb24gRy4gVm9nbAogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0xNywxMSArMTgsMTYyIEBACiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KICAqLwogCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tc2lieXRlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9zaWJ5dGUvc2IxMjUwX3JlZ3MuaD4KICNpbmNsdWRlIDxhc20vc2lieXRlL3NiMTI1MF9zbWJ1cy5oPgogCisKK3N0cnVjdCBpMmNfYWxnb19zaWJ5dGVfZGF0YSB7CisJdm9pZCAqZGF0YTsJCS8qIHByaXZhdGUgZGF0YSAqLworCWludCAgIGJ1czsJCS8qIHdoaWNoIGJ1cyAqLworCXZvaWQgKnJlZ19iYXNlOwkJLyogQ1NSIGJhc2UgKi8KK307CisKKy8qIC0tLS0tIGdsb2JhbCBkZWZpbmVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisjZGVmaW5lIFNNQl9DU1IoYSxyKSAoKGxvbmcpKGEtPnJlZ19iYXNlICsgcikpCisKKy8qIC0tLS0tIGdsb2JhbCB2YXJpYWJsZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIG1vZHVsZSBwYXJhbWV0ZXJzOgorICovCitzdGF0aWMgaW50IGJpdF9zY2FuOwkvKiBoYXZlIGEgbG9vayBhdCB3aGF0J3MgaGFuZ2luZyAncm91bmQgKi8KK21vZHVsZV9wYXJhbShiaXRfc2NhbiwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoYml0X3NjYW4sICJTY2FuIGZvciBhY3RpdmUgY2hpcHMgb24gdGhlIGJ1cyIpOworCisKK3N0YXRpYyBpbnQgc21idXNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1MTYgYWRkciwKKwkJICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3MsIGNoYXIgcmVhZF93cml0ZSwKKwkJICAgICAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICogZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2FsZ29fc2lieXRlX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCWludCBkYXRhX2J5dGVzID0gMDsKKwlpbnQgZXJyb3I7CisKKwl3aGlsZSAoY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9TVEFUVVMpKSAmIE1fU01CX0JVU1kpCisJCTsKKworCXN3aXRjaCAoc2l6ZSkgeworCWNhc2UgSTJDX1NNQlVTX1FVSUNLOgorCQljc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfAorCQkJICAgKHJlYWRfd3JpdGUgPT0gSTJDX1NNQlVTX1JFQUQgPyBNX1NNQl9RREFUQSA6IDApIHwKKwkJCSAgIFZfU01CX1RUX1FVSUNLQ01EKSwgU01CX0NTUihhZGFwLCBSX1NNQl9TVEFSVCkpOworCQlicmVhazsKKwljYXNlIEkyQ19TTUJVU19CWVRFOgorCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgeworCQkJY3NyX291dDMyKChWX1NNQl9BRERSKGFkZHIpIHwgVl9TTUJfVFRfUkQxQllURSksCisJCQkJICBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7CisJCQlkYXRhX2J5dGVzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNzcl9vdXQzMihWX1NNQl9DTUQoY29tbWFuZCksIFNNQl9DU1IoYWRhcCwgUl9TTUJfQ01EKSk7CisJCQljc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfCBWX1NNQl9UVF9XUjFCWVRFKSwKKwkJCQkgIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBUlQpKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEkyQ19TTUJVU19CWVRFX0RBVEE6CisJCWNzcl9vdXQzMihWX1NNQl9DTUQoY29tbWFuZCksIFNNQl9DU1IoYWRhcCwgUl9TTUJfQ01EKSk7CisJCWlmIChyZWFkX3dyaXRlID09IEkyQ19TTUJVU19SRUFEKSB7CisJCQljc3Jfb3V0MzIoKFZfU01CX0FERFIoYWRkcikgfCBWX1NNQl9UVF9DTURfUkQxQllURSksCisJCQkJICBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7CisJCQlkYXRhX2J5dGVzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWNzcl9vdXQzMihWX1NNQl9MQihkYXRhLT5ieXRlKSwKKwkJCQkgIFNNQl9DU1IoYWRhcCwgUl9TTUJfREFUQSkpOworCQkJY3NyX291dDMyKChWX1NNQl9BRERSKGFkZHIpIHwgVl9TTUJfVFRfV1IyQllURSksCisJCQkJICBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBJMkNfU01CVVNfV09SRF9EQVRBOgorCQljc3Jfb3V0MzIoVl9TTUJfQ01EKGNvbW1hbmQpLCBTTUJfQ1NSKGFkYXAsIFJfU01CX0NNRCkpOworCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgeworCQkJY3NyX291dDMyKChWX1NNQl9BRERSKGFkZHIpIHwgVl9TTUJfVFRfQ01EX1JEMkJZVEUpLAorCQkJCSAgU01CX0NTUihhZGFwLCBSX1NNQl9TVEFSVCkpOworCQkJZGF0YV9ieXRlcyA9IDI7CisJCX0gZWxzZSB7CisJCQljc3Jfb3V0MzIoVl9TTUJfTEIoZGF0YS0+d29yZCAmIDB4ZmYpLAorCQkJCSAgU01CX0NTUihhZGFwLCBSX1NNQl9EQVRBKSk7CisJCQljc3Jfb3V0MzIoVl9TTUJfTUIoZGF0YS0+d29yZCA+PiA4KSwKKwkJCQkgIFNNQl9DU1IoYWRhcCwgUl9TTUJfREFUQSkpOworCQkJY3NyX291dDMyKChWX1NNQl9BRERSKGFkZHIpIHwgVl9TTUJfVFRfV1IyQllURSksCisJCQkJICBTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVJUKSk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC0xOyAgICAgIC8qIFhYWEtXIGJldHRlciBlcnJvciBjb2RlPyAqLworCX0KKworCXdoaWxlIChjc3JfaW4zMihTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVRVUykpICYgTV9TTUJfQlVTWSkKKwkJOworCisJZXJyb3IgPSBjc3JfaW4zMihTTUJfQ1NSKGFkYXAsIFJfU01CX1NUQVRVUykpOworCWlmIChlcnJvciAmIE1fU01CX0VSUk9SKSB7CisJCS8qIENsZWFyIGVycm9yIGJpdCBieSB3cml0aW5nIGEgMSAqLworCQljc3Jfb3V0MzIoTV9TTUJfRVJST1IsIFNNQl9DU1IoYWRhcCwgUl9TTUJfU1RBVFVTKSk7CisJCXJldHVybiAtMTsgICAgICAvKiBYWFhLVyBiZXR0ZXIgZXJyb3IgY29kZT8gKi8KKwl9CisKKwlpZiAoZGF0YV9ieXRlcyA9PSAxKQorCQlkYXRhLT5ieXRlID0gY3NyX2luMzIoU01CX0NTUihhZGFwLCBSX1NNQl9EQVRBKSkgJiAweGZmOworCWlmIChkYXRhX2J5dGVzID09IDIpCisJCWRhdGEtPndvcmQgPSBjc3JfaW4zMihTTUJfQ1NSKGFkYXAsIFJfU01CX0RBVEEpKSAmIDB4ZmZmZjsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdTMyIGJpdF9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gKEkyQ19GVU5DX1NNQlVTX1FVSUNLIHwgSTJDX0ZVTkNfU01CVVNfQllURSB8CisJCUkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSB8IEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSk7Cit9CisKKworLyogLS0tLS1leHBvcnRlZCBhbGdvcml0aG0gZGF0YTogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQkqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gaTJjX3NpYnl0ZV9hbGdvID0geworCS5zbWJ1c194ZmVyCT0gc21idXNfeGZlciwKKwkuZnVuY3Rpb25hbGl0eQk9IGJpdF9mdW5jLAorfTsKKworLyoKKyAqIHJlZ2lzdGVyaW5nIGZ1bmN0aW9ucyB0byBsb2FkIGFsZ29yaXRobXMgYXQgcnVudGltZQorICovCitpbnQgaTJjX3NpYnl0ZV9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIGludCBzcGVlZCkKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgaTJjX2FsZ29fc2lieXRlX2RhdGEgKmFkYXAgPSBpMmNfYWRhcC0+YWxnb19kYXRhOworCisJLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLworCWkyY19hZGFwLT5hbGdvID0gJmkyY19zaWJ5dGVfYWxnbzsKKworCS8qIFNldCB0aGUgZnJlcXVlbmN5IHRvIDEwMCBrSHogKi8KKwljc3Jfb3V0MzIoc3BlZWQsIFNNQl9DU1IoYWRhcCxSX1NNQl9GUkVRKSk7CisJY3NyX291dDMyKDAsIFNNQl9DU1IoYWRhcCxSX1NNQl9DT05UUk9MKSk7CisKKwkvKiBzY2FuIGJ1cyAqLworCWlmIChiaXRfc2NhbikgeworCQl1bmlvbiBpMmNfc21idXNfZGF0YSBkYXRhOworCQlpbnQgcmM7CisJCXByaW50ayhLRVJOX0lORk8gIiBpMmMtYWxnby1zaWJ5dGUubzogc2Nhbm5pbmcgYnVzICVzLlxuIiwKKwkJICAgICAgIGkyY19hZGFwLT5uYW1lKTsKKwkJZm9yIChpID0gMHgwMDsgaSA8IDB4N2Y7IGkrKykgeworCQkJLyogWFhYS1cgaXMgdGhpcyBhIHJlYWxpc3RpYyBwcm9iZT8gKi8KKwkJCXJjID0gc21idXNfeGZlcihpMmNfYWRhcCwgaSwgMCwgSTJDX1NNQlVTX1JFQUQsIDAsCisJCQkJCUkyQ19TTUJVU19CWVRFX0RBVEEsICZkYXRhKTsKKwkJCWlmICghcmMpIHsKKwkJCQlwcmludGsoIiglMDJ4KSIsaSk7CisJCQl9IGVsc2UKKwkJCQlwcmludGsoIi4iKTsKKwkJfQorCQlwcmludGsoIlxuIik7CisJfQorCisJcmV0dXJuIGkyY19hZGRfYWRhcHRlcihpMmNfYWRhcCk7Cit9CisKKwogc3RhdGljIHN0cnVjdCBpMmNfYWxnb19zaWJ5dGVfZGF0YSBzaWJ5dGVfYm9hcmRfZGF0YVsyXSA9IHsKIAl7IE5VTEwsIDAsICh2b2lkICopIChDS1NFRzErQV9TTUJfQkFTRSgwKSkgfSwKIAl7IE5VTEwsIDEsICh2b2lkICopIChDS1NFRzErQV9TTUJfQkFTRSgxKSkgfQpAQCAtNTgsMTMgKzIxMCwxMyBAQAogCiBzdGF0aWMgdm9pZCBfX2V4aXQgaTJjX3NpYnl0ZV9leGl0KHZvaWQpCiB7Ci0JaTJjX3NpYnl0ZV9kZWxfYnVzKCZzaWJ5dGVfYm9hcmRfYWRhcHRlclswXSk7Ci0JaTJjX3NpYnl0ZV9kZWxfYnVzKCZzaWJ5dGVfYm9hcmRfYWRhcHRlclsxXSk7CisJaTJjX2RlbF9hZGFwdGVyKCZzaWJ5dGVfYm9hcmRfYWRhcHRlclswXSk7CisJaTJjX2RlbF9hZGFwdGVyKCZzaWJ5dGVfYm9hcmRfYWRhcHRlclsxXSk7CiB9CiAKIG1vZHVsZV9pbml0KGkyY19zaWJ5dGVfaW5pdCk7CiBtb2R1bGVfZXhpdChpMmNfc2lieXRlX2V4aXQpOwogCi1NT0RVTEVfQVVUSE9SKCJLaXAgV2Fsa2VyIDxrd2Fsa2VyQGJyb2FkY29tLmNvbT4sIFN0ZXZlbiBKLiBIaWxsIDxzamhpbGxAcmVhbGl0eWRpbHV0ZWQuY29tPiIpOworTU9EVUxFX0FVVEhPUigiS2lwIFdhbGtlciAoQnJvYWRjb20gQ29ycC4pLCBTdGV2ZW4gSi4gSGlsbCA8c2poaWxsQHJlYWxpdHlkaWx1dGVkLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiU01CdXMgYWRhcHRlciByb3V0aW5lcyBmb3IgU2lCeXRlIGJvYXJkcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczU1OTUuYwppbmRleCBiNTdhYjc0ZC4uMzhiYmZkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM1NTk1LmMKQEAgLTM1OCw3ICszNTgsNyBAQAogCSAgICBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0gewogCS5zbWJ1c194ZmVyCT0gc2lzNTU5NV9hY2Nlc3MsCiAJLmZ1bmN0aW9uYWxpdHkJPSBzaXM1NTk1X2Z1bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzNjMwLmMKaW5kZXggYWNiNzVlMi4uZGVjMGJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM2MzAuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczYzMC5jCkBAIC00NTAsNyArNDUwLDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKIAkuc21idXNfeGZlcgk9IHNpczYzMF9hY2Nlc3MsCiAJLmZ1bmN0aW9uYWxpdHkJPSBzaXM2MzBfZnVuYywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zaXM5NnguYwppbmRleCAxYTczYzA1Li43ZmQwN2ZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXNpczk2eC5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc2lzOTZ4LmMKQEAgLTI0Miw3ICsyNDIsNyBAQAogCSAgICBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0gewogCS5zbWJ1c194ZmVyCT0gc2lzOTZ4X2FjY2VzcywKIAkuZnVuY3Rpb25hbGl0eQk9IHNpczk2eF9mdW5jLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtc3R1Yi5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHViLmMKaW5kZXggNzNmNDgxZS4uYTU0YWRjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHViLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1zdHViLmMKQEAgLTI3LDYgKzI3LDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KIAorc3RhdGljIHVuc2lnbmVkIHNob3J0IGNoaXBfYWRkcjsKK21vZHVsZV9wYXJhbShjaGlwX2FkZHIsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGNoaXBfYWRkciwgIkNoaXAgYWRkcmVzcyAoYmV0d2VlbiAweDAzIGFuZCAweDc3KVxuIik7CisKIHN0YXRpYyB1OCAgc3R1Yl9wb2ludGVyOwogc3RhdGljIHU4ICBzdHViX2J5dGVzWzI1Nl07CiBzdGF0aWMgdTE2IHN0dWJfd29yZHNbMjU2XTsKQEAgLTM3LDYgKzQxLDkgQEAKIHsKIAlzMzIgcmV0OwogCisJaWYgKGFkZHIgIT0gY2hpcF9hZGRyKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN3aXRjaCAoc2l6ZSkgewogCiAJY2FzZSBJMkNfU01CVVNfUVVJQ0s6CkBAIC0xMDgsNyArMTE1LDcgQEAKIAkJSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgSTJDX0ZVTkNfU01CVVNfV09SRF9EQVRBOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNtYnVzX2FsZ29yaXRobSA9IHsKIAkuZnVuY3Rpb25hbGl0eQk9IHN0dWJfZnVuYywKIAkuc21idXNfeGZlcgk9IHN0dWJfeGZlciwKIH07CkBAIC0xMjIsNyArMTI5LDE3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGkyY19zdHViX2luaXQodm9pZCkKIHsKLQlwcmludGsoS0VSTl9JTkZPICJpMmMtc3R1YiBsb2FkZWRcbiIpOworCWlmICghY2hpcF9hZGRyKSB7CisJCXByaW50ayhLRVJOX0VSUiAiaTJjLXN0dWI6IFBsZWFzZSBzcGVjaWZ5IGEgY2hpcCBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmIChjaGlwX2FkZHIgPCAweDAzIHx8IGNoaXBfYWRkciA+IDB4NzcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpMmMtc3R1YjogSW52YWxpZCBjaGlwIGFkZHJlc3MgMHglMDJ4XG4iLAorCQkgICAgICAgY2hpcF9hZGRyKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiaTJjLXN0dWI6IFZpcnR1YWwgY2hpcCBhdCAweCUwMnhcbiIsIGNoaXBfYWRkcik7CiAJcmV0dXJuIGkyY19hZGRfYWRhcHRlcigmc3R1Yl9hZGFwdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhLmMKaW5kZXggNDg0YmJhYy4uOTEwZTIwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWEuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYS5jCkBAIC04MSw3ICs4MSw2IEBACiAJLmdldHNkYQkJPSBiaXRfdmlhX2dldHNkYSwKIAkuZ2V0c2NsCQk9IGJpdF92aWFfZ2V0c2NsLAogCS51ZGVsYXkJCT0gNSwKLQkubWRlbGF5CQk9IDUsCiAJLnRpbWVvdXQJPSBIWgogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdmlhcHJvLmMKaW5kZXggNDdlNTJiZi4uZWZjNmJiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12aWFwcm8uYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLXZpYXByby5jCkBAIC0zNCw2ICszNCw4IEBACiAgICBWVDgyMzNBICAgICAgICAgICAgMHgzMTQ3ICAgICAgICAgICAgIHllcz8KICAgIFZUODIzNSAgICAgICAgICAgICAweDMxNzcgICAgICAgICAgICAgeWVzCiAgICBWVDgyMzdSICAgICAgICAgICAgMHgzMjI3ICAgICAgICAgICAgIHllcworICAgVlQ4MjM3QSAgICAgICAgICAgIDB4MzMzNyAgICAgICAgICAgICB5ZXMKKyAgIFZUODI1MSAgICAgICAgICAgICAweDMyODcgICAgICAgICAgICAgeWVzCiAKICAgIE5vdGU6IHdlIGFzc3VtZSB0aGVyZSBjYW4gb25seSBiZSBvbmUgZGV2aWNlLCB3aXRoIG9uZSBTTUJ1cyBpbnRlcmZhY2UuCiAqLwpAQCAtMjk3LDcgKzI5OSw3IEBACiAJcmV0dXJuIGZ1bmM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBzbWJ1c19hbGdvcml0aG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc21idXNfYWxnb3JpdGhtID0gewogCS5zbWJ1c194ZmVyCT0gdnQ1OTZfYWNjZXNzLAogCS5mdW5jdGlvbmFsaXR5CT0gdnQ1OTZfZnVuYywKIH07CkBAIC0zODEsNyArMzgzLDkgQEAKIAlkZXZfZGJnKCZwZGV2LT5kZXYsICJWVDU5Nl9zbWJhID0gMHglWFxuIiwgdnQ1OTZfc21iYSk7CiAKIAlzd2l0Y2ggKHBkZXYtPmRldmljZSkgeworCWNhc2UgUENJX0RFVklDRV9JRF9WSUFfODI1MToKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzc6CisJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM3QToKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzU6CiAJY2FzZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQToKIAljYXNlIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfMDoKQEAgLTQzMiw4ICs0MzYsMTIgQEAKIAkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMyB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzNyksCiAJICAuZHJpdmVyX2RhdGEgPSBTTUJCQTMgfSwKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9WSUEsIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdBKSwKKwkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMyB9LAogCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODIzMV80KSwKIAkgIC5kcml2ZXJfZGF0YSA9IFNNQkJBMSB9LAorCXsgUENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1ZJQSwgUENJX0RFVklDRV9JRF9WSUFfODI1MSksCisJICAuZHJpdmVyX2RhdGEgPSBTTUJCQTMgfSwKIAl7IDAsIH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtdm9vZG9vMy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKaW5kZXggYjY3NTc3My4uNmM4ZDI1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKKysrIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy12b29kb28zLmMKQEAgLTE2MCw3ICsxNjAsNiBAQAogCS5nZXRzZGEJCT0gYml0X3Zvb2kyY19nZXRzZGEsCiAJLmdldHNjbAkJPSBiaXRfdm9vaTJjX2dldHNjbCwKIAkudWRlbGF5CQk9IENZQ0xFX0RFTEFZLAotCS5tZGVsYXkJCT0gQ1lDTEVfREVMQVksCiAJLnRpbWVvdXQJPSBUSU1FT1VUCiB9OwogCkBAIC0xNzcsNyArMTc2LDYgQEAKIAkuZ2V0c2RhCQk9IGJpdF92b29kZGNfZ2V0c2RhLAogCS5nZXRzY2wJCT0gYml0X3Zvb2RkY19nZXRzY2wsCiAJLnVkZWxheQkJPSBDWUNMRV9ERUxBWSwKLQkubWRlbGF5CQk9IENZQ0xFX0RFTEFZLAogCS50aW1lb3V0CT0gVElNRU9VVAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfYWNiLmMKaW5kZXggZWFlOWU4MS4uMzJhYWIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9hY2IuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2FjYi5jCkBAIC0zODMsNyArMzgzLDcgQEAKIH0KIAogLyogRm9yIG5vdywgd2Ugb25seSBoYW5kbGUgY29tYmluZWQgbW9kZSAoc21idXMpICovCi1zdGF0aWMgc3RydWN0IGkyY19hbGdvcml0aG0gc2N4MjAwX2FjYl9hbGdvcml0aG0gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19hbGdvcml0aG0gc2N4MjAwX2FjYl9hbGdvcml0aG0gPSB7CiAJLnNtYnVzX3hmZXIJPSBzY3gyMDBfYWNiX3NtYnVzX3hmZXIsCiAJLmZ1bmN0aW9uYWxpdHkJPSBzY3gyMDBfYWNiX2Z1bmMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9pMmMuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9zY3gyMDBfaTJjLmMKaW5kZXggY2IzZWY1YS4uOGI2NWE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvYnVzc2VzL3NjeDIwMF9pMmMuYworKysgYi9kcml2ZXJzL2kyYy9idXNzZXMvc2N4MjAwX2kyYy5jCkBAIC03MSwxMiArNzEsMTIgQEAKICAqLwogCiBzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIHNjeDIwMF9pMmNfZGF0YSA9IHsKLQlOVUxMLAotCXNjeDIwMF9pMmNfc2V0c2RhLAotCXNjeDIwMF9pMmNfc2V0c2NsLAotCXNjeDIwMF9pMmNfZ2V0c2RhLAotCXNjeDIwMF9pMmNfZ2V0c2NsLAotCTEwLCAxMCwgMTAwLAkJLyogd2FpdHMsIHRpbWVvdXQgKi8KKwkuc2V0c2RhCQk9IHNjeDIwMF9pMmNfc2V0c2RhLAorCS5zZXRzY2wJCT0gc2N4MjAwX2kyY19zZXRzY2wsCisJLmdldHNkYQkJPSBzY3gyMDBfaTJjX2dldHNkYSwKKwkuZ2V0c2NsCQk9IHNjeDIwMF9pMmNfZ2V0c2NsLAorCS51ZGVsYXkJCT0gMTAsCisJLnRpbWVvdXQJPSAxMDAsCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNjeDIwMF9pMmNfb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvZWVwcm9tLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYwppbmRleCAxM2MxMDgyLi5jZWMzYTBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy9lZXByb20uYwpAQCAtMjA5LDEwICsyMDksMTQgQEAKIAl9CiAKIAkvKiBjcmVhdGUgdGhlIHN5c2ZzIGVlcHJvbSBmaWxlICovCi0Jc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJmVlcHJvbV9hdHRyKTsKKwllcnIgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJm5ld19jbGllbnQtPmRldi5rb2JqLCAmZWVwcm9tX2F0dHIpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kZXRhY2g7CiAKIAlyZXR1cm4gMDsKIAorZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2tmcmVlOgogCWtmcmVlKGRhdGEpOwogZXhpdDoKQEAgLTIyMyw2ICsyMjcsOCBAQAogewogCWludCBlcnI7CiAKKwlzeXNmc19yZW1vdmVfYmluX2ZpbGUoJmNsaWVudC0+ZGV2LmtvYmosICZlZXByb21fYXR0cik7CisKIAllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9pc3AxMzAxX29tYXAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCmluZGV4IGY5MjUwNWIuLjE4MmYwNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL2lzcDEzMDFfb21hcC5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KLSNpbmNsdWRlIDxsaW51eC91c2Jfb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9tYXg2ODc1LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9tYXg2ODc1LmMKaW5kZXggODhkMmRkZS4uNzY2NDVjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvbWF4Njg3NS5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL21heDY4NzUuYwpAQCAtMTk5LDggKzE5OSw3IEBACiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCiAJLyogSW5pdCBmYWtlIGNsaWVudCBkYXRhICovCi0JLyogc2V0IHRoZSBjbGllbnQgZGF0YSB0byB0aGUgaTJjX2NsaWVudCBzbyB0aGF0IGl0IHdpbGwgZ2V0IGZyZWVkICovCi0JaTJjX3NldF9jbGllbnRkYXRhKGZha2VfY2xpZW50LCBmYWtlX2NsaWVudCk7CisJaTJjX3NldF9jbGllbnRkYXRhKGZha2VfY2xpZW50LCBOVUxMKTsKIAlmYWtlX2NsaWVudC0+YWRkciA9IGFkZHJlc3MgfCAxOwogCWZha2VfY2xpZW50LT5hZGFwdGVyID0gYWRhcHRlcjsKIAlmYWtlX2NsaWVudC0+ZHJpdmVyID0gJm1heDY4NzVfZHJpdmVyOwpAQCAtMjE0LDEzICsyMTMsMTcgQEAKIAkJZ290byBleGl0X2tmcmVlMjsKIAogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoZmFrZV9jbGllbnQpKSAhPSAwKQotCQlnb3RvIGV4aXRfZGV0YWNoOworCQlnb3RvIGV4aXRfZGV0YWNoMTsKIAotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcmVhbF9jbGllbnQtPmRldi5rb2JqLCAmdXNlcl9lZXByb21fYXR0cik7CisJZXJyID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZyZWFsX2NsaWVudC0+ZGV2LmtvYmosICZ1c2VyX2VlcHJvbV9hdHRyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXRfZGV0YWNoMjsKIAogCXJldHVybiAwOwogCi1leGl0X2RldGFjaDoKK2V4aXRfZGV0YWNoMjoKKwlpMmNfZGV0YWNoX2NsaWVudChmYWtlX2NsaWVudCk7CitleGl0X2RldGFjaDE6CiAJaTJjX2RldGFjaF9jbGllbnQocmVhbF9jbGllbnQpOwogZXhpdF9rZnJlZTI6CiAJa2ZyZWUoZmFrZV9jbGllbnQpOwpAQCAtMjI5LDE0ICsyMzIsMjQgQEAKIAlyZXR1cm4gZXJyOwogfQogCisvKiBXaWxsIGJlIGNhbGxlZCBmb3IgYm90aCB0aGUgcmVhbCBjbGllbnQgYW5kIHRoZSBmYWtlIGNsaWVudCAqLwogc3RhdGljIGludCBtYXg2ODc1X2RldGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlpbnQgZXJyOworCXN0cnVjdCBtYXg2ODc1X2RhdGEgKmRhdGEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCS8qIGRhdGEgaXMgTlVMTCBmb3IgdGhlIGZha2UgY2xpZW50ICovCisJaWYgKGRhdGEpCisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmY2xpZW50LT5kZXYua29iaiwgJnVzZXJfZWVwcm9tX2F0dHIpOwogCiAJZXJyID0gaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKworCWlmIChkYXRhKQkJLyogcmVhbCBjbGllbnQgKi8KKwkJa2ZyZWUoZGF0YSk7CisJZWxzZQkJCS8qIGZha2UgY2xpZW50ICovCisJCWtmcmVlKGNsaWVudCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjYTk1MzkuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3BjYTk1MzkuYwppbmRleCBjYjIyMjgwLi5mNDNjNGU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2E5NTM5LmMKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvcGNhOTUzOS5jCkBAIC0xNDgsMTEgKzE0OCwxNiBAQAogCWlmICgoZXJyID0gaTJjX2F0dGFjaF9jbGllbnQobmV3X2NsaWVudCkpKQogCQlnb3RvIGV4aXRfa2ZyZWU7CiAKLQkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAoZG9uJ3QgY2FyZSBhYm91dCBmYWlsdXJlKSAqLwotCXN5c2ZzX2NyZWF0ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZwY2E5NTM5X2RlZmF0dHJfZ3JvdXApOworCS8qIFJlZ2lzdGVyIHN5c2ZzIGhvb2tzICovCisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwKKwkJCQkgJnBjYTk1MzlfZGVmYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKIAogCXJldHVybiAwOwogCitleGl0X2RldGFjaDoKKwlpMmNfZGV0YWNoX2NsaWVudChuZXdfY2xpZW50KTsKIGV4aXRfa2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiBleGl0OgpAQCAtMTYzLDYgKzE2OCw4IEBACiB7CiAJaW50IGVycjsKIAorCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjYTk1MzlfZGVmYXR0cl9ncm91cCk7CisKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc0LmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTc0LmMKaW5kZXggYzNlNjQ0OS4uMzJiMjU0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU3NC5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1NzQuYwpAQCAtMTA1LDYgKzEwNSwxNiBAQAogCiBzdGF0aWMgREVWSUNFX0FUVFIod3JpdGUsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X3dyaXRlLCBzZXRfd3JpdGUpOwogCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNmODU3NF9hdHRyaWJ1dGVzW10gPSB7CisJJmRldl9hdHRyX3JlYWQuYXR0ciwKKwkmZGV2X2F0dHJfd3JpdGUuYXR0ciwKKwlOVUxMCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBwY2Y4NTc0X2F0dHJfZ3JvdXAgPSB7CisJLmF0dHJzID0gcGNmODU3NF9hdHRyaWJ1dGVzLAorfTsKKwogLyoKICAqIFJlYWwgY29kZQogICovCkBAIC0xNjYsMTMgKzE3NiwxMyBAQAogCXBjZjg1NzRfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfcmVhZCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsICZkZXZfYXR0cl93cml0ZSk7CisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnBjZjg1NzRfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKIAlyZXR1cm4gMDsKIAotLyogT0ssIHRoaXMgaXMgbm90IGV4YWN0bHkgZ29vZCBwcm9ncmFtbWluZyBwcmFjdGljZSwgdXN1YWxseS4gQnV0IGl0IGlzCi0gICB2ZXJ5IGNvZGUtZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gKi8KLQorICAgICAgZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiAgICAgICBleGl0X2ZyZWU6CiAJa2ZyZWUoZGF0YSk7CiAgICAgICBleGl0OgpAQCAtMTgzLDYgKzE5Myw4IEBACiB7CiAJaW50IGVycjsKIAorCXN5c2ZzX3JlbW92ZV9ncm91cCgmY2xpZW50LT5kZXYua29iaiwgJnBjZjg1NzRfYXR0cl9ncm91cCk7CisKIAlpZiAoKGVyciA9IGkyY19kZXRhY2hfY2xpZW50KGNsaWVudCkpKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMgYi9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMKaW5kZXggOTI1YTZiMy4uNGRjMzYzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvcGNmODU5MS5jCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1OTEuYwpAQCAtMTU4LDYgKzE1OCwyOCBAQAogc3RhdGljIERFVklDRV9BVFRSKG91dDBfZW5hYmxlLCBTX0lXVVNSIHwgU19JUlVHTywgCiAJCSAgIHNob3dfb3V0MF9lbmFibGUsIHNldF9vdXQwX2VuYWJsZSk7CiAKK3N0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y4NTkxX2F0dHJpYnV0ZXNbXSA9IHsKKwkmZGV2X2F0dHJfb3V0MF9lbmFibGUuYXR0ciwKKwkmZGV2X2F0dHJfb3V0MF9vdXRwdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4wX2lucHV0LmF0dHIsCisJJmRldl9hdHRyX2luMV9pbnB1dC5hdHRyLAorCU5VTEwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIHBjZjg1OTFfYXR0cl9ncm91cCA9IHsKKwkuYXR0cnMgPSBwY2Y4NTkxX2F0dHJpYnV0ZXMsCit9OworCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqcGNmODU5MV9hdHRyaWJ1dGVzX29wdFtdID0geworCSZkZXZfYXR0cl9pbjJfaW5wdXQuYXR0ciwKKwkmZGV2X2F0dHJfaW4zX2lucHV0LmF0dHIsCisJTlVMTAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgcGNmODU5MV9hdHRyX2dyb3VwX29wdCA9IHsKKwkuYXR0cnMgPSBwY2Y4NTkxX2F0dHJpYnV0ZXNfb3B0LAorfTsKKwogLyoKICAqIFJlYWwgY29kZQogICovCkBAIC0yMTEsMjQgKzIzMywzMSBAQAogCXBjZjg1OTFfaW5pdF9jbGllbnQobmV3X2NsaWVudCk7CiAKIAkvKiBSZWdpc3RlciBzeXNmcyBob29rcyAqLwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfb3V0MF9lbmFibGUpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfb3V0MF9vdXRwdXQpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4wX2lucHV0KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwgJmRldl9hdHRyX2luMV9pbnB1dCk7CisJZXJyID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnBjZjg1OTFfYXR0cl9ncm91cCk7CisJaWYgKGVycikKKwkJZ290byBleGl0X2RldGFjaDsKIAogCS8qIFJlZ2lzdGVyIGlucHV0MiBpZiBub3QgaW4gInR3byBkaWZmZXJlbnRpYWwgaW5wdXRzIiBtb2RlICovCi0JaWYgKGlucHV0X21vZGUgIT0gMyApCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4yX2lucHV0KTsKLQkJCi0JLyogUmVnaXN0ZXIgaW5wdXQzIG9ubHkgaW4gImZvdXIgc2luZ2xlIGVuZGVkIGlucHV0cyIgbW9kZSAqLwotCWlmIChpbnB1dF9tb2RlID09IDApCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmbmV3X2NsaWVudC0+ZGV2LCAmZGV2X2F0dHJfaW4zX2lucHV0KTsKLQkKLQlyZXR1cm4gMDsKLQkKLQkvKiBPSywgdGhpcyBpcyBub3QgZXhhY3RseSBnb29kIHByb2dyYW1taW5nIHByYWN0aWNlLCB1c3VhbGx5LiBCdXQgaXQgaXMKLQkgICB2ZXJ5IGNvZGUtZWZmaWNpZW50IGluIHRoaXMgY2FzZS4gKi8KKwlpZiAoaW5wdXRfbW9kZSAhPSAzKSB7CisJCWlmICgoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZuZXdfY2xpZW50LT5kZXYsCisJCQkJCSAgICAgICZkZXZfYXR0cl9pbjJfaW5wdXQpKSkKKwkJCWdvdG8gZXhpdF9zeXNmc19yZW1vdmU7CisJfQogCisJLyogUmVnaXN0ZXIgaW5wdXQzIG9ubHkgaW4gImZvdXIgc2luZ2xlIGVuZGVkIGlucHV0cyIgbW9kZSAqLworCWlmIChpbnB1dF9tb2RlID09IDApIHsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm5ld19jbGllbnQtPmRldiwKKwkJCQkJICAgICAgJmRldl9hdHRyX2luM19pbnB1dCkpKQorCQkJZ290byBleGl0X3N5c2ZzX3JlbW92ZTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXhpdF9zeXNmc19yZW1vdmU6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZuZXdfY2xpZW50LT5kZXYua29iaiwgJnBjZjg1OTFfYXR0cl9ncm91cF9vcHQpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmbmV3X2NsaWVudC0+ZGV2LmtvYmosICZwY2Y4NTkxX2F0dHJfZ3JvdXApOworZXhpdF9kZXRhY2g6CisJaTJjX2RldGFjaF9jbGllbnQobmV3X2NsaWVudCk7CiBleGl0X2tmcmVlOgogCWtmcmVlKGRhdGEpOwogZXhpdDoKQEAgLTIzOSw2ICsyNjgsOSBAQAogewogCWludCBlcnI7CiAKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwY2Y4NTkxX2F0dHJfZ3JvdXBfb3B0KTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmNsaWVudC0+ZGV2LmtvYmosICZwY2Y4NTkxX2F0dHJfZ3JvdXApOworCiAJaWYgKChlcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpKSkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYyBiL2RyaXZlcnMvaTJjL2NoaXBzL3RwczY1MDEwLmMKaW5kZXggMGJlNmZkNi4uNmE3NTc4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvY2hpcHMvdHBzNjUwMTAuYworKysgYi9kcml2ZXJzL2kyYy9jaGlwcy90cHM2NTAxMC5jCkBAIC0zMDUsNyArMzA1LDcgQEAKIAogc3RhdGljIGludCBkYmdfdHBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGRiZ19zaG93LCBpbm9kZS0+dS5nZW5lcmljX2lwKTsKKwlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgZGJnX3Nob3csIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWJ1Z19mb3BzID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYyBiL2RyaXZlcnMvaTJjL2kyYy1jb3JlLmMKaW5kZXggOWNiMjc3ZC4uN2NhODFmNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pMmMvaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtY29yZS5jCkBAIC0xODMsMTUgKzE4MywyMSBAQAogCXNwcmludGYoYWRhcC0+ZGV2LmJ1c19pZCwgImkyYy0lZCIsIGFkYXAtPm5yKTsKIAlhZGFwLT5kZXYuZHJpdmVyID0gJmkyY19hZGFwdGVyX2RyaXZlcjsKIAlhZGFwLT5kZXYucmVsZWFzZSA9ICZpMmNfYWRhcHRlcl9kZXZfcmVsZWFzZTsKLQlkZXZpY2VfcmVnaXN0ZXIoJmFkYXAtPmRldik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZhZGFwLT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKKwlyZXMgPSBkZXZpY2VfcmVnaXN0ZXIoJmFkYXAtPmRldik7CisJaWYgKHJlcykKKwkJZ290byBvdXRfbGlzdDsKKwlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmFkYXAtPmRldiwgJmRldl9hdHRyX25hbWUpOworCWlmIChyZXMpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CiAKIAkvKiBBZGQgdGhpcyBhZGFwdGVyIHRvIHRoZSBpMmNfYWRhcHRlciBjbGFzcyAqLwogCW1lbXNldCgmYWRhcC0+Y2xhc3NfZGV2LCAweDAwLCBzaXplb2Yoc3RydWN0IGNsYXNzX2RldmljZSkpOwogCWFkYXAtPmNsYXNzX2Rldi5kZXYgPSAmYWRhcC0+ZGV2OwogCWFkYXAtPmNsYXNzX2Rldi5jbGFzcyA9ICZpMmNfYWRhcHRlcl9jbGFzczsKIAlzdHJsY3B5KGFkYXAtPmNsYXNzX2Rldi5jbGFzc19pZCwgYWRhcC0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUpOwotCWNsYXNzX2RldmljZV9yZWdpc3RlcigmYWRhcC0+Y2xhc3NfZGV2KTsKKwlyZXMgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoJmFkYXAtPmNsYXNzX2Rldik7CisJaWYgKHJlcykKKwkJZ290byBvdXRfcmVtb3ZlX25hbWU7CiAKIAlkZXZfZGJnKCZhZGFwLT5kZXYsICJhZGFwdGVyIFslc10gcmVnaXN0ZXJlZFxuIiwgYWRhcC0+bmFtZSk7CiAKQEAgLTIwNiw2ICsyMTIsMTcgQEAKIG91dF91bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZjb3JlX2xpc3RzKTsKIAlyZXR1cm4gcmVzOworCitvdXRfcmVtb3ZlX25hbWU6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZhZGFwLT5kZXYsICZkZXZfYXR0cl9uYW1lKTsKK291dF91bnJlZ2lzdGVyOgorCWluaXRfY29tcGxldGlvbigmYWRhcC0+ZGV2X3JlbGVhc2VkKTsgLyogTmVlZGVkPyAqLworCWRldmljZV91bnJlZ2lzdGVyKCZhZGFwLT5kZXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmFkYXAtPmRldl9yZWxlYXNlZCk7CitvdXRfbGlzdDoKKwlsaXN0X2RlbCgmYWRhcC0+bGlzdCk7CisJaWRyX3JlbW92ZSgmaTJjX2FkYXB0ZXJfaWRyLCBhZGFwLT5ucik7CisJZ290byBvdXRfdW5sb2NrOwogfQogCiAKQEAgLTM5NCwyMyArNDExLDE1IEBACiBpbnQgaTJjX2F0dGFjaF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7CisJaW50IHJlcyA9IDA7CiAKIAltdXRleF9sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAlpZiAoX19pMmNfY2hlY2tfYWRkcihjbGllbnQtPmFkYXB0ZXIsIGNsaWVudC0+YWRkcikpIHsKLQkJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKLQkJcmV0dXJuIC1FQlVTWTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCWxpc3RfYWRkX3RhaWwoJmNsaWVudC0+bGlzdCwmYWRhcHRlci0+Y2xpZW50cyk7Ci0JbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKIAkKLQlpZiAoYWRhcHRlci0+Y2xpZW50X3JlZ2lzdGVyKSAgewotCQlpZiAoYWRhcHRlci0+Y2xpZW50X3JlZ2lzdGVyKGNsaWVudCkpICB7Ci0JCQlkZXZfZGJnKCZhZGFwdGVyLT5kZXYsICJjbGllbnRfcmVnaXN0ZXIgIgotCQkJCSJmYWlsZWQgZm9yIGNsaWVudCBbJXNdIGF0IDB4JTAyeFxuIiwKLQkJCQljbGllbnQtPm5hbWUsIGNsaWVudC0+YWRkcik7Ci0JCX0KLQl9Ci0KIAljbGllbnQtPnVzYWdlX2NvdW50ID0gMDsKIAogCWNsaWVudC0+ZGV2LnBhcmVudCA9ICZjbGllbnQtPmFkYXB0ZXItPmRldjsKQEAgLTQyMiwxMCArNDMxLDM1IEBACiAJCSIlZC0lMDR4IiwgaTJjX2FkYXB0ZXJfaWQoYWRhcHRlciksIGNsaWVudC0+YWRkcik7CiAJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiY2xpZW50IFslc10gcmVnaXN0ZXJlZCB3aXRoIGJ1cyBpZCAlc1xuIiwKIAkJY2xpZW50LT5uYW1lLCBjbGllbnQtPmRldi5idXNfaWQpOwotCWRldmljZV9yZWdpc3RlcigmY2xpZW50LT5kZXYpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9jbGllbnRfbmFtZSk7Ci0JCisJcmVzID0gZGV2aWNlX3JlZ2lzdGVyKCZjbGllbnQtPmRldik7CisJaWYgKHJlcykKKwkJZ290byBvdXRfbGlzdDsKKwlyZXMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfY2xpZW50X25hbWUpOworCWlmIChyZXMpCisJCWdvdG8gb3V0X3VucmVnaXN0ZXI7CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKworCWlmIChhZGFwdGVyLT5jbGllbnRfcmVnaXN0ZXIpICB7CisJCWlmIChhZGFwdGVyLT5jbGllbnRfcmVnaXN0ZXIoY2xpZW50KSkgeworCQkJZGV2X2RiZygmYWRhcHRlci0+ZGV2LCAiY2xpZW50X3JlZ2lzdGVyICIKKwkJCQkiZmFpbGVkIGZvciBjbGllbnQgWyVzXSBhdCAweCUwMnhcbiIsCisJCQkJY2xpZW50LT5uYW1lLCBjbGllbnQtPmFkZHIpOworCQl9CisJfQorCiAJcmV0dXJuIDA7CisKK291dF91bnJlZ2lzdGVyOgorCWluaXRfY29tcGxldGlvbigmY2xpZW50LT5yZWxlYXNlZCk7IC8qIE5lZWRlZD8gKi8KKwlkZXZpY2VfdW5yZWdpc3RlcigmY2xpZW50LT5kZXYpOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmNsaWVudC0+cmVsZWFzZWQpOworb3V0X2xpc3Q6CisJbGlzdF9kZWwoJmNsaWVudC0+bGlzdCk7CisJZGV2X2VycigmYWRhcHRlci0+ZGV2LCAiRmFpbGVkIHRvIGF0dGFjaCBpMmMgY2xpZW50ICVzIGF0IDB4JTAyeCAiCisJCSIoJWQpXG4iLCBjbGllbnQtPm5hbWUsIGNsaWVudC0+YWRkciwgcmVzKTsKK291dF91bmxvY2s6CisJbXV0ZXhfdW5sb2NrKCZhZGFwdGVyLT5jbGlzdF9sb2NrKTsKKwlyZXR1cm4gcmVzOwogfQogCiAKQEAgLTY3NCwxMSArNzA4LDE2IEBACiAKIAkvKiBGaW5hbGx5IGNhbGwgdGhlIGN1c3RvbSBkZXRlY3Rpb24gZnVuY3Rpb24gKi8KIAllcnIgPSBmb3VuZF9wcm9jKGFkYXB0ZXIsIGFkZHIsIGtpbmQpOwotCiAJLyogLUVOT0RFViBjYW4gYmUgcmV0dXJuZWQgaWYgdGhlcmUgaXMgYSBjaGlwIGF0IHRoZSBnaXZlbiBhZGRyZXNzCiAJICAgYnV0IGl0IGlzbid0IHN1cHBvcnRlZCBieSB0aGlzIGNoaXAgZHJpdmVyLiBXZSBjYXRjaCBpdCBoZXJlIGFzCiAJICAgdGhpcyBpc24ndCBhbiBlcnJvci4gKi8KLQlyZXR1cm4gKGVyciA9PSAtRU5PREVWKSA/IDAgOiBlcnI7CisJaWYgKGVyciA9PSAtRU5PREVWKQorCQllcnIgPSAwOworCisJaWYgKGVycikKKwkJZGV2X3dhcm4oJmFkYXB0ZXItPmRldiwgIkNsaWVudCBjcmVhdGlvbiBmYWlsZWQgYXQgMHgleCAoJWQpXG4iLAorCQkJIGFkZHIsIGVycik7CisJcmV0dXJuIGVycjsKIH0KIAogaW50IGkyY19wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCkBAIC04NjgsNyArOTA3LDcgQEAKIAkgICAgICAgICAgICAgICAgICAgSTJDX1NNQlVTX1JFQUQsMCxJMkNfU01CVVNfQllURSwgJmRhdGEpKQogCQlyZXR1cm4gLTE7CiAJZWxzZQotCQlyZXR1cm4gMHgwRkYgJiBkYXRhLmJ5dGU7CisJCXJldHVybiBkYXRhLmJ5dGU7CiB9CiAKIHMzMiBpMmNfc21idXNfd3JpdGVfYnl0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCB2YWx1ZSkKQEAgLTg4NCw3ICs5MjMsNyBAQAogCSAgICAgICAgICAgICAgICAgICBJMkNfU01CVVNfUkVBRCxjb21tYW5kLCBJMkNfU01CVVNfQllURV9EQVRBLCZkYXRhKSkKIAkJcmV0dXJuIC0xOwogCWVsc2UKLQkJcmV0dXJuIDB4MEZGICYgZGF0YS5ieXRlOworCQlyZXR1cm4gZGF0YS5ieXRlOwogfQogCiBzMzIgaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLCB1OCB2YWx1ZSkKQEAgLTkwMyw3ICs5NDIsNyBAQAogCSAgICAgICAgICAgICAgICAgICBJMkNfU01CVVNfUkVBRCxjb21tYW5kLCBJMkNfU01CVVNfV09SRF9EQVRBLCAmZGF0YSkpCiAJCXJldHVybiAtMTsKIAllbHNlCi0JCXJldHVybiAweDBGRkZGICYgZGF0YS53b3JkOworCQlyZXR1cm4gZGF0YS53b3JkOwogfQogCiBzMzIgaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCBjb21tYW5kLCB1MTYgdmFsdWUpCkBAIC0xMDA2LDcgKzEwNDUsNyBAQAogCQllbHNlIHsKIAkJCW1zZ1swXS5sZW49MzsKIAkJCW1zZ2J1ZjBbMV0gPSBkYXRhLT53b3JkICYgMHhmZjsKLQkJCW1zZ2J1ZjBbMl0gPSAoZGF0YS0+d29yZCA+PiA4KSAmIDB4ZmY7CisJCQltc2didWYwWzJdID0gZGF0YS0+d29yZCA+PiA4OwogCQl9CiAJCWJyZWFrOwogCWNhc2UgSTJDX1NNQlVTX1BST0NfQ0FMTDoKQEAgLTEwMTUsNyArMTA1NCw3IEBACiAJCW1zZ1swXS5sZW4gPSAzOwogCQltc2dbMV0ubGVuID0gMjsKIAkJbXNnYnVmMFsxXSA9IGRhdGEtPndvcmQgJiAweGZmOwotCQltc2didWYwWzJdID0gKGRhdGEtPndvcmQgPj4gOCkgJiAweGZmOworCQltc2didWYwWzJdID0gZGF0YS0+d29yZCA+PiA4OwogCQlicmVhazsKIAljYXNlIEkyQ19TTUJVU19CTE9DS19EQVRBOgogCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pMmMvaTJjLWRldi5jIGIvZHJpdmVycy9pMmMvaTJjLWRldi5jCmluZGV4IDU4Y2NkZGQuLjNmODY5MDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2kyYy1kZXYuYworKysgYi9kcml2ZXJzL2kyYy9pMmMtZGV2LmMKQEAgLTMyLDQzICszMiwzNSBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWRldi5oPgotI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBpMmNkZXZfY2xpZW50X3RlbXBsYXRlOworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY2Rldl9kcml2ZXI7CiAKIHN0cnVjdCBpMmNfZGV2IHsKLQlpbnQgbWlub3I7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwogCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CiB9OwotI2RlZmluZSB0b19pMmNfZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgaTJjX2RldiwgY2xhc3NfZGV2KQogCiAjZGVmaW5lIEkyQ19NSU5PUlMJMjU2Ci1zdGF0aWMgc3RydWN0IGkyY19kZXYgKmkyY19kZXZfYXJyYXlbSTJDX01JTk9SU107Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGkyY19kZXZfYXJyYXlfbG9jayk7CitzdGF0aWMgTElTVF9IRUFEKGkyY19kZXZfbGlzdCk7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGkyY19kZXZfbGlzdF9sb2NrKTsKIAogc3RhdGljIHN0cnVjdCBpMmNfZGV2ICppMmNfZGV2X2dldF9ieV9taW5vcih1bnNpZ25lZCBpbmRleCkKIHsKIAlzdHJ1Y3QgaTJjX2RldiAqaTJjX2RldjsKIAotCXNwaW5fbG9jaygmaTJjX2Rldl9hcnJheV9sb2NrKTsKLQlpMmNfZGV2ID0gaTJjX2Rldl9hcnJheVtpbmRleF07Ci0Jc3Bpbl91bmxvY2soJmkyY19kZXZfYXJyYXlfbG9jayk7Ci0JcmV0dXJuIGkyY19kZXY7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RldiAqaTJjX2Rldl9nZXRfYnlfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0Jc3RydWN0IGkyY19kZXYgKmkyY19kZXYgPSBOVUxMOwotCi0Jc3Bpbl9sb2NrKCZpMmNfZGV2X2FycmF5X2xvY2spOwotCWlmICgoaTJjX2Rldl9hcnJheVthZGFwLT5ucl0pICYmCi0JICAgIChpMmNfZGV2X2FycmF5W2FkYXAtPm5yXS0+YWRhcCA9PSBhZGFwKSkKLQkJaTJjX2RldiA9IGkyY19kZXZfYXJyYXlbYWRhcC0+bnJdOwotCXNwaW5fdW5sb2NrKCZpMmNfZGV2X2FycmF5X2xvY2spOworCXNwaW5fbG9jaygmaTJjX2Rldl9saXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaTJjX2RldiwgJmkyY19kZXZfbGlzdCwgbGlzdCkgeworCQlpZiAoaTJjX2Rldi0+YWRhcC0+bnIgPT0gaW5kZXgpCisJCQlnb3RvIGZvdW5kOworCX0KKwlpMmNfZGV2ID0gTlVMTDsKK2ZvdW5kOgorCXNwaW5fdW5sb2NrKCZpMmNfZGV2X2xpc3RfbG9jayk7CiAJcmV0dXJuIGkyY19kZXY7CiB9CiAKQEAgLTc2LDMwICs2OCwyOCBAQAogewogCXN0cnVjdCBpMmNfZGV2ICppMmNfZGV2OwogCisJaWYgKGFkYXAtPm5yID49IEkyQ19NSU5PUlMpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJpMmMtZGV2OiBPdXQgb2YgZGV2aWNlIG1pbm9ycyAoJWQpXG4iLAorCQkgICAgICAgYWRhcC0+bnIpOworCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKwl9CisKIAlpMmNfZGV2ID0ga3phbGxvYyhzaXplb2YoKmkyY19kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWkyY19kZXYpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOworCWkyY19kZXYtPmFkYXAgPSBhZGFwOwogCi0Jc3Bpbl9sb2NrKCZpMmNfZGV2X2FycmF5X2xvY2spOwotCWlmIChpMmNfZGV2X2FycmF5W2FkYXAtPm5yXSkgewotCQlzcGluX3VubG9jaygmaTJjX2Rldl9hcnJheV9sb2NrKTsKLQkJZGV2X2VycigmYWRhcC0+ZGV2LCAiaTJjLWRldiBhbHJlYWR5IGhhcyBhIGRldmljZSBhc3NpZ25lZCB0byB0aGlzIGFkYXB0ZXJcbiIpOwotCQlnb3RvIGVycm9yOwotCX0KLQlpMmNfZGV2LT5taW5vciA9IGFkYXAtPm5yOwotCWkyY19kZXZfYXJyYXlbYWRhcC0+bnJdID0gaTJjX2RldjsKLQlzcGluX3VubG9jaygmaTJjX2Rldl9hcnJheV9sb2NrKTsKKwlzcGluX2xvY2soJmkyY19kZXZfbGlzdF9sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZpMmNfZGV2LT5saXN0LCAmaTJjX2Rldl9saXN0KTsKKwlzcGluX3VubG9jaygmaTJjX2Rldl9saXN0X2xvY2spOwogCXJldHVybiBpMmNfZGV2OwotZXJyb3I6Ci0Ja2ZyZWUoaTJjX2Rldik7Ci0JcmV0dXJuIEVSUl9QVFIoLUVOT0RFVik7CiB9CiAKIHN0YXRpYyB2b2lkIHJldHVybl9pMmNfZGV2KHN0cnVjdCBpMmNfZGV2ICppMmNfZGV2KQogewotCXNwaW5fbG9jaygmaTJjX2Rldl9hcnJheV9sb2NrKTsKLQlpMmNfZGV2X2FycmF5W2kyY19kZXYtPm1pbm9yXSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmkyY19kZXZfYXJyYXlfbG9jayk7CisJc3Bpbl9sb2NrKCZpMmNfZGV2X2xpc3RfbG9jayk7CisJbGlzdF9kZWwoJmkyY19kZXYtPmxpc3QpOworCXNwaW5fdW5sb2NrKCZpMmNfZGV2X2xpc3RfbG9jayk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYWRhcHRlcl9uYW1lKHN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiwgY2hhciAqYnVmKQpAQCAtMzc1LDEyICszNjUsMTMgQEAKIAlpZiAoIWFkYXApCiAJCXJldHVybiAtRU5PREVWOwogCi0JY2xpZW50ID0ga21hbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOworCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKCpjbGllbnQpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNsaWVudCkgewogCQlpMmNfcHV0X2FkYXB0ZXIoYWRhcCk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQltZW1jcHkoY2xpZW50LCAmaTJjZGV2X2NsaWVudF90ZW1wbGF0ZSwgc2l6ZW9mKCpjbGllbnQpKTsKKwlzbnByaW50ZihjbGllbnQtPm5hbWUsIEkyQ19OQU1FX1NJWkUsICJpMmMtZGV2ICVkIiwgYWRhcC0+bnIpOworCWNsaWVudC0+ZHJpdmVyID0gJmkyY2Rldl9kcml2ZXI7CiAKIAkvKiByZWdpc3RlcmVkIHdpdGggYWRhcHRlciwgcGFzc2VkIGFzIGNsaWVudCB0byB1c2VyICovCiAJY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKQEAgLTQxNSw0MSArNDA2LDQ3IEBACiBzdGF0aWMgaW50IGkyY2Rldl9hdHRhY2hfYWRhcHRlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCiB7CiAJc3RydWN0IGkyY19kZXYgKmkyY19kZXY7Ci0Jc3RydWN0IGRldmljZSAqZGV2OworCWludCByZXM7CiAKIAlpMmNfZGV2ID0gZ2V0X2ZyZWVfaTJjX2RldihhZGFwKTsKIAlpZiAoSVNfRVJSKGkyY19kZXYpKQogCQlyZXR1cm4gUFRSX0VSUihpMmNfZGV2KTsKIAotCXByX2RlYnVnKCJpMmMtZGV2OiBhZGFwdGVyIFslc10gcmVnaXN0ZXJlZCBhcyBtaW5vciAlZFxuIiwKLQkJIGFkYXAtPm5hbWUsIGkyY19kZXYtPm1pbm9yKTsKLQogCS8qIHJlZ2lzdGVyIHRoaXMgaTJjIGRldmljZSB3aXRoIHRoZSBkcml2ZXIgY29yZSAqLwotCWkyY19kZXYtPmFkYXAgPSBhZGFwOwotCWRldiA9ICZhZGFwLT5kZXY7CiAJaTJjX2Rldi0+Y2xhc3NfZGV2ID0gY2xhc3NfZGV2aWNlX2NyZWF0ZShpMmNfZGV2X2NsYXNzLCBOVUxMLAotCQkJCQkJIE1LREVWKEkyQ19NQUpPUiwgaTJjX2Rldi0+bWlub3IpLAotCQkJCQkJIGRldiwgImkyYy0lZCIsIGkyY19kZXYtPm1pbm9yKTsKLQlpZiAoIWkyY19kZXYtPmNsYXNzX2RldikKKwkJCQkJCSBNS0RFVihJMkNfTUFKT1IsIGFkYXAtPm5yKSwKKwkJCQkJCSAmYWRhcC0+ZGV2LCAiaTJjLSVkIiwKKwkJCQkJCSBhZGFwLT5ucik7CisJaWYgKCFpMmNfZGV2LT5jbGFzc19kZXYpIHsKKwkJcmVzID0gLUVOT0RFVjsKIAkJZ290byBlcnJvcjsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoaTJjX2Rldi0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbmFtZSk7CisJfQorCXJlcyA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShpMmNfZGV2LT5jbGFzc19kZXYsICZjbGFzc19kZXZpY2VfYXR0cl9uYW1lKTsKKwlpZiAocmVzKQorCQlnb3RvIGVycm9yX2Rlc3Ryb3k7CisKKwlwcl9kZWJ1ZygiaTJjLWRldjogYWRhcHRlciBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCisJCSBhZGFwLT5uYW1lLCBhZGFwLT5ucik7CiAJcmV0dXJuIDA7CitlcnJvcl9kZXN0cm95OgorCWNsYXNzX2RldmljZV9kZXN0cm95KGkyY19kZXZfY2xhc3MsIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpKTsKIGVycm9yOgogCXJldHVybl9pMmNfZGV2KGkyY19kZXYpOwogCWtmcmVlKGkyY19kZXYpOwotCXJldHVybiAtRU5PREVWOworCXJldHVybiByZXM7CiB9CiAKIHN0YXRpYyBpbnQgaTJjZGV2X2RldGFjaF9hZGFwdGVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgaTJjX2RldiAqaTJjX2RldjsKIAotCWkyY19kZXYgPSBpMmNfZGV2X2dldF9ieV9hZGFwdGVyKGFkYXApOwotCWlmICghaTJjX2RldikKLQkJcmV0dXJuIC1FTk9ERVY7CisJaTJjX2RldiA9IGkyY19kZXZfZ2V0X2J5X21pbm9yKGFkYXAtPm5yKTsKKwlpZiAoIWkyY19kZXYpIC8qIGF0dGFjaF9hZGFwdGVyIG11c3QgaGF2ZSBmYWlsZWQgKi8KKwkJcmV0dXJuIDA7CiAKKwljbGFzc19kZXZpY2VfcmVtb3ZlX2ZpbGUoaTJjX2Rldi0+Y2xhc3NfZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfbmFtZSk7CiAJcmV0dXJuX2kyY19kZXYoaTJjX2Rldik7Ci0JY2xhc3NfZGV2aWNlX2Rlc3Ryb3koaTJjX2Rldl9jbGFzcywgTUtERVYoSTJDX01BSk9SLCBpMmNfZGV2LT5taW5vcikpOworCWNsYXNzX2RldmljZV9kZXN0cm95KGkyY19kZXZfY2xhc3MsIE1LREVWKEkyQ19NQUpPUiwgYWRhcC0+bnIpKTsKIAlrZnJlZShpMmNfZGV2KTsKIAogCXByX2RlYnVnKCJpMmMtZGV2OiBhZGFwdGVyIFslc10gdW5yZWdpc3RlcmVkXG4iLCBhZGFwLT5uYW1lKTsKQEAgLTQ3MSwxMiArNDY4LDYgQEAKIAkuZGV0YWNoX2NsaWVudAk9IGkyY2Rldl9kZXRhY2hfY2xpZW50LAogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGkyY2Rldl9jbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUJCT0gIkkyQyAvZGV2IGVudHJ5IiwKLQkuYWRkcgkJPSAtMSwKLQkuZHJpdmVyCQk9ICZpMmNkZXZfZHJpdmVyLAotfTsKLQogc3RhdGljIGludCBfX2luaXQgaTJjX2Rldl9pbml0KHZvaWQpCiB7CiAJaW50IHJlczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL0tjb25maWcgYi9kcml2ZXJzL2lkZS9LY29uZmlnCmluZGV4IGI2ZmIxNjcuLjY5ZDYyN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL0tjb25maWcKKysrIGIvZHJpdmVycy9pZGUvS2NvbmZpZwpAQCAtNCw2ICs0LDggQEAKICMgQW5kcmUgSGVkcmljayA8YW5kcmVAbGludXgtaWRlLm9yZz4KICMKIAoraWYgQkxPQ0sKKwogbWVudSAiQVRBL0FUQVBJL01GTS9STEwgc3VwcG9ydCIKIAogY29uZmlnIElERQpAQCAtMTA4MiwzICsxMDg0LDUgQEAKIGVuZGlmCiAKIGVuZG1lbnUKKworZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggNjU0ZDRjZC4uNjliYmI2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTM3Miw3ICszNzIsNyBAQAogewogCWludCBsb2cgPSAwOwogCi0JaWYgKCFzZW5zZSB8fCAhcnEgfHwgKHJxLT5mbGFncyAmIFJFUV9RVUlFVCkpCisJaWYgKCFzZW5zZSB8fCAhcnEgfHwgKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaCAoc2Vuc2UtPnNlbnNlX2tleSkgewpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCiAJaWRlX2luaXRfZHJpdmVfY21kKHJxKTsKLQlycS0+ZmxhZ3MgPSBSRVFfUEM7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CiAJcnEtPnJxX2Rpc2sgPSBjZC0+ZGlzazsKIH0KIApAQCAtNjE3LDcgKzYxNyw3IEBACiAJcnEtPmNtZFswXSA9IEdQQ01EX1JFUVVFU1RfU0VOU0U7CiAJcnEtPmNtZFs0XSA9IHJxLT5kYXRhX2xlbiA9IDE4OwogCi0JcnEtPmZsYWdzID0gUkVRX1NFTlNFOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NFTlNFOwogCiAJLyogTk9URSEgU2F2ZSB0aGUgZmFpbGVkIGNvbW1hbmQgaW4gInJxLT5idWZmZXIiICovCiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kOwpAQCAtNjMwLDEwICs2MzAsMTAgQEAKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBIV0dST1VQKGRyaXZlKS0+cnE7CiAJaW50IG5zZWN0b3JzID0gcnEtPmhhcmRfY3VyX3NlY3RvcnM7CiAKLQlpZiAoKHJxLT5mbGFncyAmIFJFUV9TRU5TRSkgJiYgdXB0b2RhdGUpIHsKKwlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpICYmIHVwdG9kYXRlKSB7CiAJCS8qCi0JCSAqIEZvciBSRVFfU0VOU0UsICJycS0+YnVmZmVyIiBwb2ludHMgdG8gdGhlIG9yaWdpbmFsIGZhaWxlZAotCQkgKiByZXF1ZXN0CisJCSAqIEZvciBSRVFfVFlQRV9TRU5TRSwgInJxLT5idWZmZXIiIHBvaW50cyB0byB0aGUgb3JpZ2luYWwKKwkJICogZmFpbGVkIHJlcXVlc3QKIAkJICovCiAJCXN0cnVjdCByZXF1ZXN0ICpmYWlsZWQgPSAoc3RydWN0IHJlcXVlc3QgKikgcnEtPmJ1ZmZlcjsKIAkJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CkBAIC03MDYsMTcgKzcwNiwxNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlpZiAocnEtPmZsYWdzICYgUkVRX1NFTlNFKSB7CisJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHJxKSkgewogCQkvKiBXZSBnb3QgYW4gZXJyb3IgdHJ5aW5nIHRvIGdldCBzZW5zZSBpbmZvCiAJCSAgIGZyb20gdGhlIGRyaXZlIChwcm9iYWJseSB3aGlsZSB0cnlpbmcKIAkJICAgdG8gcmVjb3ZlciBmcm9tIGEgZm9ybWVyIGVycm9yKS4gIEp1c3QgZ2l2ZSB1cC4gKi8KIAotCQlycS0+ZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfRkFJTEVEOwogCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7CiAJCWlkZV9lcnJvcihkcml2ZSwgInJlcXVlc3Qgc2Vuc2UgZmFpbHVyZSIsIHN0YXQpOwogCQlyZXR1cm4gMTsKIAotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgKFJFUV9QQyB8IFJFUV9CTE9DS19QQykpIHsKKwl9IGVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkgewogCQkvKiBBbGwgb3RoZXIgZnVuY3Rpb25zLCBleGNlcHQgZm9yIFJFQUQuICovCiAJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTcyNCw3ICs3MjQsNyBAQAogCQkgKiBpZiB3ZSBoYXZlIGFuIGVycm9yLCBwYXNzIGJhY2sgQ0hFQ0tfQ09ORElUSU9OIGFzIHRoZQogCQkgKiBzY3NpIHN0YXR1cyBieXRlCiAJCSAqLwotCQlpZiAoKHJxLT5mbGFncyAmIFJFUV9CTE9DS19QQykgJiYgIXJxLT5lcnJvcnMpCisJCWlmICghcnEtPmVycm9ycykKIAkJCXJxLT5lcnJvcnMgPSBTQU1fU1RBVF9DSEVDS19DT05ESVRJT047CiAKIAkJLyogQ2hlY2sgZm9yIHRyYXkgb3Blbi4gKi8KQEAgLTczNSwxMiArNzM1LDEyIEBACiAJCQljZHJvbV9zYXdfbWVkaWFfY2hhbmdlIChkcml2ZSk7CiAJCQkvKnByaW50aygiJXM6IG1lZGlhIGNoYW5nZWRcbiIsZHJpdmUtPm5hbWUpOyovCiAJCQlyZXR1cm4gMDsKLQkJfSBlbHNlIGlmICghKHJxLT5mbGFncyAmIFJFUV9RVUlFVCkpIHsKKwkJfSBlbHNlIGlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKSB7CiAJCQkvKiBPdGhlcndpc2UsIHByaW50IGFuIGVycm9yLiAqLwogCQkJaWRlX2R1bXBfc3RhdHVzKGRyaXZlLCAicGFja2V0IGNvbW1hbmQgZXJyb3IiLCBzdGF0KTsKIAkJfQogCQkKLQkJcnEtPmZsYWdzIHw9IFJFUV9GQUlMRUQ7CisJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKIAogCQkvKgogCQkgKiBpbnN0ZWFkIG9mIHBsYXlpbmcgZ2FtZXMgd2l0aCBtb3ZpbmcgY29tcGxldGlvbnMgYXJvdW5kLApAQCAtODgxLDcgKzg4MSw3IEBACiAJCQl3YWl0ID0gQVRBUElfV0FJVF9QQzsKIAkJCWJyZWFrOwogCQlkZWZhdWx0OgotCQkJaWYgKCEocnEtPmZsYWdzICYgUkVRX1FVSUVUKSkKKwkJCWlmICghKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUVVJRVQpKQogCQkJCXByaW50ayhLRVJOX0lORk8gImlkZS1jZDogY21kIDB4JXggdGltZWQgb3V0XG4iLCBycS0+Y21kWzBdKTsKIAkJCXdhaXQgPSAwOwogCQkJYnJlYWs7CkBAIC0xMTI0LDcgKzExMjQsNyBAQAogCQlpZiAocnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA+IDApIHsKIAkJCXByaW50ayAoS0VSTl9FUlIgIiVzOiBjZHJvbV9yZWFkX2ludHI6IGRhdGEgdW5kZXJydW4gKCVkIGJsb2NrcylcbiIsCiAJCQkJZHJpdmUtPm5hbWUsIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOwotCQkJcnEtPmZsYWdzIHw9IFJFUV9GQUlMRUQ7CisJCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRUQ7CiAJCQljZHJvbV9lbmRfcmVxdWVzdChkcml2ZSwgMCk7CiAJCX0gZWxzZQogCQkJY2Ryb21fZW5kX3JlcXVlc3QoZHJpdmUsIDEpOwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKIAkJCXByaW50ayAoIiVzOiBjZHJvbV9wY19pbnRyOiBkYXRhIHVuZGVycnVuICVkXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBwYy0+YnVmbGVuKTsKIAkJCSovCi0JCQlycS0+ZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKKwkJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxFRDsKIAkJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKIAkJfQogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CkBAIC0xNTA5LDcgKzE1MDksNyBAQAogCQlycS0+ZGF0YSArPSB0aGlzbGVuOwogCQlycS0+ZGF0YV9sZW4gLT0gdGhpc2xlbjsKIAotCQlpZiAocnEtPmZsYWdzICYgUkVRX1NFTlNFKQorCQlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKQogCQkJcnEtPnNlbnNlX2xlbiArPSB0aGlzbGVuOwogCX0gZWxzZSB7CiBjb25mdXNlZDoKQEAgLTE1MTcsNyArMTUxNyw3IEBACiAJCQkiYXBwZWFycyBjb25mdXNlZCAoaXJlYXNvbiA9IDB4JTAyeCkuICIKIAkJCSJUcnlpbmcgdG8gcmVjb3ZlciBieSBlbmRpbmcgcmVxdWVzdC5cbiIsCiAJCQlkcml2ZS0+bmFtZSwgaXJlYXNvbik7Ci0JCXJxLT5mbGFncyB8PSBSRVFfRkFJTEVEOworCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9GQUlMRUQ7CiAJCWNkcm9tX2VuZF9yZXF1ZXN0KGRyaXZlLCAwKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KQEAgLTE1NDYsNyArMTU0Niw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8gPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAKIAlpbmZvLT5kbWEgPSAwOwotCXJxLT5mbGFncyAmPSB+UkVRX0ZBSUxFRDsKKwlycS0+Y21kX2ZsYWdzICY9IH5SRVFfRkFJTEVEOwogCWxlbiA9IHJxLT5kYXRhX2xlbjsKIAogCS8qIFN0YXJ0IHNlbmRpbmcgdGhlIGNvbW1hbmQgdG8gdGhlIGRyaXZlLiAqLwpAQCAtMTU1OCw3ICsxNTU4LDcgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9zZW5zZSBzZW5zZTsKIAlpbnQgcmV0cmllcyA9IDEwOwotCXVuc2lnbmVkIGludCBmbGFncyA9IHJxLT5mbGFnczsKKwl1bnNpZ25lZCBpbnQgZmxhZ3MgPSBycS0+Y21kX2ZsYWdzOwogCiAJaWYgKHJxLT5zZW5zZSA9PSBOVUxMKQogCQlycS0+c2Vuc2UgPSAmc2Vuc2U7CkBAIC0xNTY3LDE0ICsxNTY3LDE0IEBACiAJZG8gewogCQlpbnQgZXJyb3I7CiAJCXVuc2lnbmVkIGxvbmcgdGltZSA9IGppZmZpZXM7Ci0JCXJxLT5mbGFncyA9IGZsYWdzOworCQlycS0+Y21kX2ZsYWdzID0gZmxhZ3M7CiAKIAkJZXJyb3IgPSBpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSwgaWRlX3dhaXQpOwogCQl0aW1lID0gamlmZmllcyAtIHRpbWU7CiAKIAkJLyogRklYTUU6IHdlIHNob3VsZCBwcm9iYWJseSBhYm9ydC9yZXRyeSBvciBzb21ldGhpbmcgCiAJCSAqIGluIGNhc2Ugb2YgZmFpbHVyZSAqLwotCQlpZiAocnEtPmZsYWdzICYgUkVRX0ZBSUxFRCkgeworCQlpZiAocnEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRUQpIHsKIAkJCS8qIFRoZSByZXF1ZXN0IGZhaWxlZC4gIFJldHJ5IGlmIGl0IHdhcyBkdWUgdG8gYSB1bml0CiAJCQkgICBhdHRlbnRpb24gc3RhdHVzCiAJCQkgICAodXN1YWxseSBtZWFucyBtZWRpYSB3YXMgY2hhbmdlZCkuICovCkBAIC0xNTk2LDEwICsxNTk2LDEwIEBACiAJCX0KIAogCQkvKiBFbmQgb2YgcmV0cnkgbG9vcC4gKi8KLQl9IHdoaWxlICgocnEtPmZsYWdzICYgUkVRX0ZBSUxFRCkgJiYgcmV0cmllcyA+PSAwKTsKKwl9IHdoaWxlICgocnEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRUQpICYmIHJldHJpZXMgPj0gMCk7CiAKIAkvKiBSZXR1cm4gYW4gZXJyb3IgaWYgdGhlIGNvbW1hbmQgZmFpbGVkLiAqLwotCXJldHVybiAocnEtPmZsYWdzICYgUkVRX0ZBSUxFRCkgPyAtRUlPIDogMDsKKwlyZXR1cm4gKHJxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEVEKSA/IC1FSU8gOiAwOwogfQogCiAvKgpAQCAtMTk2Myw3ICsxOTYzLDcgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCXJxLT5mbGFncyB8PSBSRVFfUVVJRVQ7CisJcnEtPmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAKIAlpbmZvLT5kbWEgPSAwOwogCkBAIC0yMDIzLDExICsyMDIzLDExIEBACiAJCX0KIAkJaW5mby0+bGFzdF9ibG9jayA9IGJsb2NrOwogCQlyZXR1cm4gYWN0aW9uOwotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgKFJFUV9QQyB8IFJFUV9TRU5TRSkpIHsKKwl9IGVsc2UgaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TRU5TRSkgewogCQlyZXR1cm4gY2Ryb21fZG9fcGFja2V0X2NvbW1hbmQoZHJpdmUpOwotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgUkVRX0JMT0NLX1BDKSB7CisJfSBlbHNlIGlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKIAkJcmV0dXJuIGNkcm9tX2RvX2Jsb2NrX3BjKGRyaXZlLCBycSk7Ci0JfSBlbHNlIGlmIChycS0+ZmxhZ3MgJiBSRVFfU1BFQ0lBTCkgeworCX0gZWxzZSBpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJLyoKIAkJICogcmlnaHQgbm93IHRoaXMgY2FuIG9ubHkgYmUgYSByZXNldC4uLgogCQkgKi8KQEAgLTIxMDUsNyArMjEwNSw3IEBACiAKIAlyZXEuc2Vuc2UgPSBzZW5zZTsKIAlyZXEuY21kWzBdID0gR1BDTURfVEVTVF9VTklUX1JFQURZOwotCXJlcS5mbGFncyB8PSBSRVFfUVVJRVQ7CisJcmVxLmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAKICNpZiAhIFNUQU5EQVJEX0FUQVBJCiAgICAgICAgIC8qIHRoZSBTYW55byAzIENEIGNoYW5nZXIgdXNlcyBieXRlIDcgb2YgVEVTVF9VTklUX1JFQURZIHRvIApAQCAtMjIwNyw3ICsyMjA3LDcgQEAKIAlyZXEuY21kWzBdID0gR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZOwogCXJlcS5kYXRhID0gKGNoYXIgKikmY2FwYnVmOwogCXJlcS5kYXRhX2xlbiA9IHNpemVvZihjYXBidWYpOwotCXJlcS5mbGFncyB8PSBSRVFfUVVJRVQ7CisJcmVxLmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAKIAlzdGF0ID0gY2Ryb21fcXVldWVfcGFja2V0X2NvbW1hbmQoZHJpdmUsICZyZXEpOwogCWlmIChzdGF0ID09IDApIHsKQEAgLTIyMzAsNyArMjIzMCw3IEBACiAJcmVxLnNlbnNlID0gc2Vuc2U7CiAJcmVxLmRhdGEgPSAgYnVmOwogCXJlcS5kYXRhX2xlbiA9IGJ1ZmxlbjsKLQlyZXEuZmxhZ3MgfD0gUkVRX1FVSUVUOworCXJlcS5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwogCXJlcS5jbWRbMF0gPSBHUENNRF9SRUFEX1RPQ19QTUFfQVRJUDsKIAlyZXEuY21kWzZdID0gdHJhY2tubzsKIAlyZXEuY21kWzddID0gKGJ1ZmxlbiA+PiA4KTsKQEAgLTI1MzEsNyArMjUzMSw3IEBACiAJcmVxLnRpbWVvdXQgPSBjZ2MtPnRpbWVvdXQ7CiAKIAlpZiAoY2djLT5xdWlldCkKLQkJcmVxLmZsYWdzIHw9IFJFUV9RVUlFVDsKKwkJcmVxLmNtZF9mbGFncyB8PSBSRVFfUVVJRVQ7CiAKIAlyZXEuc2Vuc2UgPSBjZ2MtPnNlbnNlOwogCWNnYy0+c3RhdCA9IGNkcm9tX3F1ZXVlX3BhY2tldF9jb21tYW5kKGRyaXZlLCAmcmVxKTsKQEAgLTI2MjksNyArMjYyOSw4IEBACiAJaW50IHJldDsKIAogCWNkcm9tX3ByZXBhcmVfcmVxdWVzdChkcml2ZSwgJnJlcSk7Ci0JcmVxLmZsYWdzID0gUkVRX1NQRUNJQUwgfCBSRVFfUVVJRVQ7CisJcmVxLmNtZF90eXBlID0gUkVRX1RZUEVfU1BFQ0lBTDsKKwlyZXEuY21kX2ZsYWdzID0gUkVRX1FVSUVUOwogCXJldCA9IGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZyZXEsIGlkZV93YWl0KTsKIAogCS8qCkBAIC0zMTE2LDkgKzMxMTcsOSBAQAogCiBzdGF0aWMgaW50IGlkZV9jZHJvbV9wcmVwX2ZuKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlmIChycS0+ZmxhZ3MgJiBSRVFfQ01EKQorCWlmIChibGtfZnNfcmVxdWVzdChycSkpCiAJCXJldHVybiBpZGVfY2Ryb21fcHJlcF9mcyhxLCBycSk7Ci0JZWxzZSBpZiAocnEtPmZsYWdzICYgUkVRX0JMT0NLX1BDKQorCWVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKIAkJcmV0dXJuIGlkZV9jZHJvbV9wcmVwX3BjKHJxKTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYyBiL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKaW5kZXggN2NmM2ViMC4uMGEwNWEzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRpc2suYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCkBAIC02OTksNyArNjk5LDggQEAKIAkJcnEtPmNtZFswXSA9IFdJTl9GTFVTSF9DQUNIRTsKIAogCi0JcnEtPmZsYWdzIHw9IFJFUV9EUklWRV9UQVNLOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0FUQV9UQVNLOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1NPRlRCQVJSSUVSOwogCXJxLT5idWZmZXIgPSBycS0+Y21kOwogfQogCkBAIC03NDAsNyArNzQxLDcgQEAKIAlpZiAoZHJpdmUtPnNwZWNpYWwuYi5zZXRfbXVsdG1vZGUpCiAJCXJldHVybiAtRUJVU1k7CiAJaWRlX2luaXRfZHJpdmVfY21kICgmcnEpOwotCXJxLmZsYWdzID0gUkVRX0RSSVZFX0NNRDsKKwlycS5jbWRfdHlwZSA9IFJFUV9UWVBFX0FUQV9DTUQ7CiAJZHJpdmUtPm11bHRfcmVxID0gYXJnOwogCWRyaXZlLT5zcGVjaWFsLmIuc2V0X211bHRtb2RlID0gMTsKIAkodm9pZCkgaWRlX2RvX2RyaXZlX2NtZCAoZHJpdmUsICZycSwgaWRlX3dhaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRtYS5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCmluZGV4IDdjM2ExM2UuLmMzNTQ2ZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKQEAgLTIwNSw3ICsyMDUsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBIV0lGKGRyaXZlKTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAKLQlCVUdfT04oKHJxLT5mbGFncyAmIFJFUV9EUklWRV9UQVNLRklMRSkgJiYgcnEtPm5yX3NlY3RvcnMgPiAyNTYpOworCUJVR19PTigocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgJiYgcnEtPm5yX3NlY3RvcnMgPiAyNTYpOwogCiAJaWRlX21hcF9zZyhkcml2ZSwgcnEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggYWRiZTlmNy4uOGNjZWU5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtNTg4LDcgKzU4OCw3IEBACiAJLyogV2h5IGRvZXMgdGhpcyBoYXBwZW4/ICovCiAJaWYgKCFycSkKIAkJcmV0dXJuIDA7Ci0JaWYgKCEocnEtPmZsYWdzICYgUkVRX1NQRUNJQUwpKSB7IC8vaWYgKCFJREVGTE9QUFlfUlFfQ01EIChycS0+Y21kKSkgeworCWlmICghYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJLyogb3VyIHJlYWwgbG9jYWwgZW5kIHJlcXVlc3QgZnVuY3Rpb24gKi8KIAkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnNlY3MpOwogCQlyZXR1cm4gMDsKQEAgLTY4OSw3ICs2ODksNyBAQAogCiAJaWRlX2luaXRfZHJpdmVfY21kKHJxKTsKIAlycS0+YnVmZmVyID0gKGNoYXIgKikgcGM7Ci0JcnEtPmZsYWdzID0gUkVRX1NQRUNJQUw7CS8vcnEtPmNtZCA9IElERUZMT1BQWV9QQ19SUTsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCXJxLT5ycV9kaXNrID0gZmxvcHB5LT5kaXNrOwogCSh2b2lkKSBpZGVfZG9fZHJpdmVfY21kKGRyaXZlLCBycSwgaWRlX3ByZWVtcHQpOwogfQpAQCAtMTI1MCw3ICsxMjUwLDcgQEAKIAlwYy0+Y2FsbGJhY2sgPSAmaWRlZmxvcHB5X3J3X2NhbGxiYWNrOwogCXBjLT5ycSA9IHJxOwogCXBjLT5iX2NvdW50ID0gY21kID09IFJFQUQgPyAwIDogcnEtPmJpby0+Ymlfc2l6ZTsKLQlpZiAocnEtPmZsYWdzICYgUkVRX1JXKQorCWlmIChycS0+Y21kX2ZsYWdzICYgUkVRX1JXKQogCQlzZXRfYml0KFBDX1dSSVRJTkcsICZwYy0+ZmxhZ3MpOwogCXBjLT5idWZmZXIgPSBOVUxMOwogCXBjLT5yZXF1ZXN0X3RyYW5zZmVyID0gcGMtPmJ1ZmZlcl9zaXplID0gYmxvY2tzICogZmxvcHB5LT5ibG9ja19zaXplOwpAQCAtMTI4MSw4ICsxMjgxLDcgQEAKIAlpZGVmbG9wcHlfcGNfdCAqcGM7CiAJdW5zaWduZWQgbG9uZyBibG9jayA9ICh1bnNpZ25lZCBsb25nKWJsb2NrX3M7CiAKLQlkZWJ1Z19sb2coS0VSTl9JTkZPICJycV9zdGF0dXM6ICVkLCBkZXY6ICVzLCBmbGFnczogJWx4LCBlcnJvcnM6ICVkXG4iLAotCQkJcnEtPnJxX3N0YXR1cywKKwlkZWJ1Z19sb2coS0VSTl9JTkZPICJkZXY6ICVzLCBmbGFnczogJWx4LCBlcnJvcnM6ICVkXG4iLAogCQkJcnEtPnJxX2Rpc2sgPyBycS0+cnFfZGlzay0+ZGlza19uYW1lIDogIj8iLAogCQkJcnEtPmZsYWdzLCBycS0+ZXJyb3JzKTsKIAlkZWJ1Z19sb2coS0VSTl9JTkZPICJzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCAiCkBAIC0xMzAzLDcgKzEzMDIsNyBAQAogCQlpZGVmbG9wcHlfZG9fZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQotCWlmIChycS0+ZmxhZ3MgJiBSRVFfQ01EKSB7CisJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlpZiAoKChsb25nKXJxLT5zZWN0b3IgJSBmbG9wcHktPmJzX2ZhY3RvcikgfHwKIAkJICAgIChycS0+bnJfc2VjdG9ycyAlIGZsb3BweS0+YnNfZmFjdG9yKSkgewogCQkJcHJpbnRrKCIlczogdW5zdXBwb3J0ZWQgci93IHJlcXVlc3Qgc2l6ZVxuIiwKQEAgLTEzMTMsOSArMTMxMiw5IEBACiAJCX0KIAkJcGMgPSBpZGVmbG9wcHlfbmV4dF9wY19zdG9yYWdlKGRyaXZlKTsKIAkJaWRlZmxvcHB5X2NyZWF0ZV9yd19jbWQoZmxvcHB5LCBwYywgcnEsIGJsb2NrKTsKLQl9IGVsc2UgaWYgKHJxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSB7CisJfSBlbHNlIGlmIChibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQlwYyA9IChpZGVmbG9wcHlfcGNfdCAqKSBycS0+YnVmZmVyOwotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgUkVRX0JMT0NLX1BDKSB7CisJfSBlbHNlIGlmIChibGtfcGNfcmVxdWVzdChycSkpIHsKIAkJcGMgPSBpZGVmbG9wcHlfbmV4dF9wY19zdG9yYWdlKGRyaXZlKTsKIAkJaWYgKGlkZWZsb3BweV9ibG9ja3BjX2NtZChmbG9wcHksIHBjLCBycSkpIHsKIAkJCWlkZWZsb3BweV9kb19lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7CkBAIC0xMzQzLDcgKzEzNDIsNyBAQAogCiAJaWRlX2luaXRfZHJpdmVfY21kICgmcnEpOwogCXJxLmJ1ZmZlciA9IChjaGFyICopIHBjOwotCXJxLmZsYWdzID0gUkVRX1NQRUNJQUw7CQkvLwlycS5jbWQgPSBJREVGTE9QUFlfUENfUlE7CisJcnEuY21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCXJxLnJxX2Rpc2sgPSBmbG9wcHktPmRpc2s7CiAKIAlyZXR1cm4gaWRlX2RvX2RyaXZlX2NtZChkcml2ZSwgJnJxLCBpZGVfd2FpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW8uYyBiL2RyaXZlcnMvaWRlL2lkZS1pby5jCmluZGV4IGZiNjc5NTIuLjM4NDc5YTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtNTksNyArNTksNyBAQAogewogCWludCByZXQgPSAxOwogCi0JQlVHX09OKCEocnEtPmZsYWdzICYgUkVRX1NUQVJURUQpKTsKKwlCVUdfT04oIWJsa19ycV9zdGFydGVkKHJxKSk7CiAKIAkvKgogCSAqIGlmIGZhaWxmYXN0IGlzIHNldCBvbiBhIHJlcXVlc3QsIG92ZXJyaWRlIG51bWJlciBvZiBzZWN0b3JzIGFuZApAQCAtMTQxLDcgKzE0MSw3IEBACiAKIHN0YXRpYyB2b2lkIGlkZV9jb21wbGV0ZV9wb3dlcl9zdGVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0LCB1OCBlcnJvcikKIHsKLQlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZW5kX2lvX2RhdGE7CisJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7CiAKIAlpZiAoZHJpdmUtPm1lZGlhICE9IGlkZV9kaXNrKQogCQlyZXR1cm47CkBAIC0xNjQsNyArMTY0LDcgQEAKIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfc3RhcnRfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZW5kX2lvX2RhdGE7CisJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7CiAJaWRlX3Rhc2tfdCAqYXJncyA9IHJxLT5zcGVjaWFsOwogCiAJbWVtc2V0KGFyZ3MsIDAsIHNpemVvZigqYXJncykpOwpAQCAtMjQ0LDcgKzI0NCw3IEBACiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaWRlX2xvY2ssIGZsYWdzKTsKIAotCUJVR19PTighKHJxLT5mbGFncyAmIFJFUV9TVEFSVEVEKSk7CisJQlVHX09OKCFibGtfcnFfc3RhcnRlZChycSkpOwogCiAJLyoKIAkgKiBpZiBmYWlsZmFzdCBpcyBzZXQgb24gYSByZXF1ZXN0LCBvdmVycmlkZSBudW1iZXIgb2Ygc2VjdG9ycyBhbmQKQEAgLTM2Niw3ICszNjYsNyBAQAogCXJxID0gSFdHUk9VUChkcml2ZSktPnJxOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlkZV9sb2NrLCBmbGFncyk7CiAKLQlpZiAocnEtPmZsYWdzICYgUkVRX0RSSVZFX0NNRCkgeworCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX0NNRCkgewogCQl1OCAqYXJncyA9ICh1OCAqKSBycS0+YnVmZmVyOwogCQlpZiAocnEtPmVycm9ycyA9PSAwKQogCQkJcnEtPmVycm9ycyA9ICFPS19TVEFUKHN0YXQsUkVBRFlfU1RBVCxCQURfU1RBVCk7CkBAIC0zNzYsNyArMzc2LDcgQEAKIAkJCWFyZ3NbMV0gPSBlcnI7CiAJCQlhcmdzWzJdID0gaHdpZi0+SU5CKElERV9OU0VDVE9SX1JFRyk7CiAJCX0KLQl9IGVsc2UgaWYgKHJxLT5mbGFncyAmIFJFUV9EUklWRV9UQVNLKSB7CisJfSBlbHNlIGlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0spIHsKIAkJdTggKmFyZ3MgPSAodTggKikgcnEtPmJ1ZmZlcjsKIAkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKIAkJCXJxLT5lcnJvcnMgPSAhT0tfU1RBVChzdGF0LFJFQURZX1NUQVQsQkFEX1NUQVQpOwpAQCAtMzkwLDcgKzM5MCw3IEBACiAJCQlhcmdzWzVdID0gaHdpZi0+SU5CKElERV9IQ1lMX1JFRyk7CiAJCQlhcmdzWzZdID0gaHdpZi0+SU5CKElERV9TRUxFQ1RfUkVHKTsKIAkJfQotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tGSUxFKSB7CisJfSBlbHNlIGlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CiAJCWlkZV90YXNrX3QgKmFyZ3MgPSAoaWRlX3Rhc2tfdCAqKSBycS0+c3BlY2lhbDsKIAkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKIAkJCXJxLT5lcnJvcnMgPSAhT0tfU1RBVChzdGF0LFJFQURZX1NUQVQsQkFEX1NUQVQpOwpAQCAtNDIxLDcgKzQyMSw3IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgewotCQlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZW5kX2lvX2RhdGE7CisJCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5kYXRhOwogI2lmZGVmIERFQlVHX1BNCiAJCXByaW50aygiJXM6IGNvbXBsZXRlX3Bvd2VyX3N0ZXAoc3RlcDogJWQsIHN0YXQ6ICV4LCBlcnI6ICV4KVxuIiwKIAkJCWRyaXZlLT5uYW1lLCBycS0+cG0tPnBtX3N0ZXAsIHN0YXQsIGVycik7CkBAIC01ODcsNyArNTg3LDcgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiAJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCi0JaWYgKHJxLT5mbGFncyAmIChSRVFfRFJJVkVfQ01EIHwgUkVRX0RSSVZFX1RBU0sgfCBSRVFfRFJJVkVfVEFTS0ZJTEUpKSB7CisJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJcnEtPmVycm9ycyA9IDE7CiAJCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CkBAIC02MzgsNyArNjM4LDcgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiAJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCi0JaWYgKHJxLT5mbGFncyAmIChSRVFfRFJJVkVfQ01EIHwgUkVRX0RSSVZFX1RBU0sgfCBSRVFfRFJJVkVfVEFTS0ZJTEUpKSB7CisJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJcnEtPmVycm9ycyA9IDE7CiAJCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBCVVNZX1NUQVQsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CkBAIC04MDgsNyArODA4LDcgQEAKIAlpZiAoaHdpZi0+c2dfbWFwcGVkKQkvKiBuZWVkZWQgYnkgaWRlLXNjc2kgKi8KIAkJcmV0dXJuOwogCi0JaWYgKChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpID09IDApIHsKKwlpZiAocnEtPmNtZF90eXBlICE9IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewogCQlod2lmLT5zZ19uZW50cyA9IGJsa19ycV9tYXBfc2coZHJpdmUtPnF1ZXVlLCBycSwgc2cpOwogCX0gZWxzZSB7CiAJCXNnX2luaXRfb25lKHNnLCBycS0+YnVmZmVyLCBycS0+bnJfc2VjdG9ycyAqIFNFQ1RPUl9TSVpFKTsKQEAgLTg0NCw3ICs4NDQsNyBAQAogCQlzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IEhXSUYoZHJpdmUpOwotCWlmIChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewogIAkJaWRlX3Rhc2tfdCAqYXJncyA9IHJxLT5zcGVjaWFsOwogIAogCQlpZiAoIWFyZ3MpCkBAIC04NjYsNyArODY2LDcgQEAKIAkJaWYgKGFyZ3MtPnRmX291dF9mbGFncy5hbGwgIT0gMCkgCiAJCQlyZXR1cm4gZmxhZ2dlZF90YXNrZmlsZShkcml2ZSwgYXJncyk7CiAJCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgYXJncyk7Ci0JfSBlbHNlIGlmIChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTSykgeworCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLKSB7CiAJCXU4ICphcmdzID0gcnEtPmJ1ZmZlcjsKIAkJdTggc2VsOwogIApAQCAtODkyLDcgKzg5Miw3IEBACiAgCQlod2lmLT5PVVRCKHNlbCwgSURFX1NFTEVDVF9SRUcpOwogIAkJaWRlX2NtZChkcml2ZSwgYXJnc1swXSwgYXJnc1syXSwgJmRyaXZlX2NtZF9pbnRyKTsKICAJCXJldHVybiBpZGVfc3RhcnRlZDsKLSAJfSBlbHNlIGlmIChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfQ01EKSB7CisgCX0gZWxzZSBpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9DTUQpIHsKICAJCXU4ICphcmdzID0gcnEtPmJ1ZmZlcjsKIAogCQlpZiAoIWFyZ3MpCkBAIC05MzMsNyArOTMzLDcgQEAKIAogc3RhdGljIHZvaWQgaWRlX2NoZWNrX3BtX3N0YXRlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlICpwbSA9IHJxLT5lbmRfaW9fZGF0YTsKKwlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKIAogCWlmIChibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSAmJgogCSAgICBwbS0+cG1fc3RlcCA9PSBpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZCkKQEAgLTk4MCw3ICs5ODAsNyBAQAogCWlkZV9zdGFydHN0b3BfdCBzdGFydHN0b3A7CiAJc2VjdG9yX3QgYmxvY2s7CiAKLQlCVUdfT04oIShycS0+ZmxhZ3MgJiBSRVFfU1RBUlRFRCkpOworCUJVR19PTighYmxrX3JxX3N0YXJ0ZWQocnEpKTsKIAogI2lmZGVmIERFQlVHCiAJcHJpbnRrKCIlczogc3RhcnRfcmVxdWVzdDogY3VycmVudD0weCUwOGx4XG4iLApAQCAtMTAxMywxMiArMTAxMywxMiBAQAogCWlmICghZHJpdmUtPnNwZWNpYWwuYWxsKSB7CiAJCWlkZV9kcml2ZXJfdCAqZHJ2OwogCi0JCWlmIChycS0+ZmxhZ3MgJiAoUkVRX0RSSVZFX0NNRCB8IFJFUV9EUklWRV9UQVNLKSkKLQkJCXJldHVybiBleGVjdXRlX2RyaXZlX2NtZChkcml2ZSwgcnEpOwotCQllbHNlIGlmIChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpCisJCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX0NNRCB8fAorCQkgICAgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLIHx8CisJCSAgICBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKQogCQkJcmV0dXJuIGV4ZWN1dGVfZHJpdmVfY21kKGRyaXZlLCBycSk7CiAJCWVsc2UgaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkgewotCQkJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmVuZF9pb19kYXRhOworCQkJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7CiAjaWZkZWYgREVCVUdfUE0KIAkJCXByaW50aygiJXM6IHN0YXJ0X3Bvd2VyX3N0ZXAoc3RlcDogJWQpXG4iLAogCQkJCWRyaXZlLT5uYW1lLCBycS0+cG0tPnBtX3N0ZXApOwpAQCAtMTI2NCw3ICsxMjY0LDcgQEAKIAkJICogV2UgY291bnQgaG93IG1hbnkgdGltZXMgd2UgbG9vcCBoZXJlIHRvIG1ha2Ugc3VyZSB3ZSBzZXJ2aWNlCiAJCSAqIGFsbCBkcml2ZXMgaW4gdGhlIGh3Z3JvdXAgd2l0aG91dCBsb29waW5nIGZvciBldmVyCiAJCSAqLwotCQlpZiAoZHJpdmUtPmJsb2NrZWQgJiYgIWJsa19wbV9yZXF1ZXN0KHJxKSAmJiAhKHJxLT5mbGFncyAmIFJFUV9QUkVFTVBUKSkgeworCQlpZiAoZHJpdmUtPmJsb2NrZWQgJiYgIWJsa19wbV9yZXF1ZXN0KHJxKSAmJiAhKHJxLT5jbWRfZmxhZ3MgJiBSRVFfUFJFRU1QVCkpIHsKIAkJCWRyaXZlID0gZHJpdmUtPm5leHQgPyBkcml2ZS0+bmV4dCA6IGh3Z3JvdXAtPmRyaXZlOwogCQkJaWYgKGxvb3BzKysgPCA0ICYmICFibGtfcXVldWVfcGx1Z2dlZChkcml2ZS0+cXVldWUpKQogCQkJCWdvdG8gYWdhaW47CkBAIC0xNjcwLDcgKzE2NzAsNyBAQAogdm9pZCBpZGVfaW5pdF9kcml2ZV9jbWQgKHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAltZW1zZXQocnEsIDAsIHNpemVvZigqcnEpKTsKLQlycS0+ZmxhZ3MgPSBSRVFfRFJJVkVfQ01EOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0FUQV9DTUQ7CiAJcnEtPnJlZl9jb3VudCA9IDE7CiB9CiAKQEAgLTE3MTAsNyArMTcxMCw2IEBACiAJaW50IG11c3Rfd2FpdCA9IChhY3Rpb24gPT0gaWRlX3dhaXQgfHwgYWN0aW9uID09IGlkZV9oZWFkX3dhaXQpOwogCiAJcnEtPmVycm9ycyA9IDA7Ci0JcnEtPnJxX3N0YXR1cyA9IFJRX0FDVElWRTsKIAogCS8qCiAJICogd2UgbmVlZCB0byBob2xkIGFuIGV4dHJhIHJlZmVyZW5jZSB0byByZXF1ZXN0IGZvciBzYWZlIGluc3BlY3Rpb24KQEAgLTE3MTgsNyArMTcxNyw3IEBACiAJICovCiAJaWYgKG11c3Rfd2FpdCkgewogCQlycS0+cmVmX2NvdW50Kys7Ci0JCXJxLT53YWl0aW5nID0gJndhaXQ7CisJCXJxLT5lbmRfaW9fZGF0YSA9ICZ3YWl0OwogCQlycS0+ZW5kX2lvID0gYmxrX2VuZF9zeW5jX3JxOwogCX0KIApAQCAtMTcyNyw3ICsxNzI2LDcgQEAKIAkJaHdncm91cC0+cnEgPSBOVUxMOwogCWlmIChhY3Rpb24gPT0gaWRlX3ByZWVtcHQgfHwgYWN0aW9uID09IGlkZV9oZWFkX3dhaXQpIHsKIAkJd2hlcmUgPSBFTEVWQVRPUl9JTlNFUlRfRlJPTlQ7Ci0JCXJxLT5mbGFncyB8PSBSRVFfUFJFRU1QVDsKKwkJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKIAl9CiAJX19lbHZfYWRkX3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBycSwgd2hlcmUsIDApOwogCWlkZV9kb19yZXF1ZXN0KGh3Z3JvdXAsIElERV9OT19JUlEpOwpAQCAtMTczNiw3ICsxNzM1LDYgQEAKIAllcnIgPSAwOwogCWlmIChtdXN0X3dhaXQpIHsKIAkJd2FpdF9mb3JfY29tcGxldGlvbigmd2FpdCk7Ci0JCXJxLT53YWl0aW5nID0gTlVMTDsKIAkJaWYgKHJxLT5lcnJvcnMpCiAJCQllcnIgPSAtRUlPOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMgYi9kcml2ZXJzL2lkZS9pZGUtbGliLmMKaW5kZXggMWZlZmYyMy4uODUwZWY2MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWxpYi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwpAQCAtNDU2LDEzICs0NTYsMTQgQEAKIAlzcGluX3VubG9jaygmaWRlX2xvY2spOwogCWlmICghcnEpCiAJCXJldHVybjsKLQlpZiAocnEtPmZsYWdzICYgKFJFUV9EUklWRV9DTUQgfCBSRVFfRFJJVkVfVEFTSykpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9DTUQgfHwKKwkgICAgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLKSB7CiAJCWNoYXIgKmFyZ3MgPSBycS0+YnVmZmVyOwogCQlpZiAoYXJncykgewogCQkJb3Bjb2RlID0gYXJnc1swXTsKIAkJCWZvdW5kID0gMTsKIAkJfQotCX0gZWxzZSBpZiAocnEtPmZsYWdzICYgUkVRX0RSSVZFX1RBU0tGSUxFKSB7CisJfSBlbHNlIGlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CiAJCWlkZV90YXNrX3QgKmFyZ3MgPSBycS0+c3BlY2lhbDsKIAkJaWYgKGFyZ3MpIHsKIAkJCXRhc2tfc3RydWN0X3QgKnRmID0gKHRhc2tfc3RydWN0X3QgKikgYXJncy0+dGZSZWdpc3RlcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCmluZGV4IDcwNjdhYjkuLmUyZjRiYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhcGUuYwpAQCAtMTc3Niw3ICsxNzc2LDcgQEAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfaW5pdF9ycShzdHJ1Y3QgcmVxdWVzdCAqcnEsIHU4IGNtZCkKIHsKIAltZW1zZXQocnEsIDAsIHNpemVvZigqcnEpKTsKLQlycS0+ZmxhZ3MgPSBSRVFfU1BFQ0lBTDsKKwlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9TUEVDSUFMOwogCXJxLT5jbWRbMF0gPSBjbWQ7CiB9CiAKQEAgLTI0MjMsOCArMjQyMyw4IEBACiAjaWYgSURFVEFQRV9ERUJVR19MT0cKICNpZiAwCiAJaWYgKHRhcGUtPmRlYnVnX2xldmVsID49IDUpCi0JCXByaW50ayhLRVJOX0lORk8gImlkZS10YXBlOiBycV9zdGF0dXM6ICVkLCAiCi0JCQkiZGV2OiAlcywgY21kOiAlbGQsIGVycm9yczogJWRcbiIsIHJxLT5ycV9zdGF0dXMsCisJCXByaW50ayhLRVJOX0lORk8gImlkZS10YXBlOiAgJWQsICIKKwkJCSJkZXY6ICVzLCBjbWQ6ICVsZCwgZXJyb3JzOiAlZFxuIiwKIAkJCSBycS0+cnFfZGlzay0+ZGlza19uYW1lLCBycS0+Y21kWzBdLCBycS0+ZXJyb3JzKTsKICNlbmRpZgogCWlmICh0YXBlLT5kZWJ1Z19sZXZlbCA+PSAyKQpAQCAtMjQzMywxMiArMjQzMywxMiBAQAogCQkJcnEtPnNlY3RvciwgcnEtPm5yX3NlY3RvcnMsIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOwogI2VuZGlmIC8qIElERVRBUEVfREVCVUdfTE9HICovCiAKLQlpZiAoKHJxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSA9PSAwKSB7CisJaWYgKCFibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQkvKgogCQkgKiBXZSBkbyBub3Qgc3VwcG9ydCBidWZmZXIgY2FjaGUgb3JpZ2luYXRlZCByZXF1ZXN0cy4KIAkJICovCiAJCXByaW50ayhLRVJOX05PVElDRSAiaWRlLXRhcGU6ICVzOiBVbnN1cHBvcnRlZCByZXF1ZXN0IGluICIKLQkJCSJyZXF1ZXN0IHF1ZXVlICglbGQpXG4iLCBkcml2ZS0+bmFtZSwgcnEtPmZsYWdzKTsKKwkJCSJyZXF1ZXN0IHF1ZXVlICglZClcbiIsIGRyaXZlLT5uYW1lLCBycS0+Y21kX3R5cGUpOwogCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQpAQCAtMjc2NCwxNiArMjc2NCwxNiBAQAogICovCiBzdGF0aWMgdm9pZCBpZGV0YXBlX3dhaXRfZm9yX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAogI2lmIElERVRBUEVfREVCVUdfQlVHUwotCWlmIChycSA9PSBOVUxMIHx8IChycS0+ZmxhZ3MgJiBSRVFfU1BFQ0lBTCkgPT0gMCkgeworCWlmIChycSA9PSBOVUxMIHx8ICFibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSkgewogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtdGFwZTogYnVnOiBUcnlpbmcgdG8gc2xlZXAgb24gbm9uLXZhbGlkIHJlcXVlc3RcbiIpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmIC8qIElERVRBUEVfREVCVUdfQlVHUyAqLwotCXJxLT53YWl0aW5nID0gJndhaXQ7CisJcnEtPmVuZF9pb19kYXRhID0gJndhaXQ7CiAJcnEtPmVuZF9pbyA9IGJsa19lbmRfc3luY19ycTsKIAlzcGluX3VubG9ja19pcnEoJnRhcGUtPnNwaW5sb2NrKTsKIAl3YWl0X2Zvcl9jb21wbGV0aW9uKCZ3YWl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKaW5kZXggOTdhOTI0NC4uMWQwNDcwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXRhc2tmaWxlLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCiBzdGF0aWMgdm9pZCB0YXNrX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQogewotCWlmIChycS0+ZmxhZ3MgJiBSRVFfRFJJVkVfVEFTS0ZJTEUpIHsKKwlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgewogCQlpZGVfdGFza190ICp0YXNrID0gcnEtPnNwZWNpYWw7CiAKIAkJaWYgKHRhc2stPnRmX291dF9mbGFncy5hbGwpIHsKQEAgLTQ3NCw3ICs0NzQsNyBAQAogCXN0cnVjdCByZXF1ZXN0IHJxOwogCiAJbWVtc2V0KCZycSwgMCwgc2l6ZW9mKHJxKSk7Ci0JcnEuZmxhZ3MgPSBSRVFfRFJJVkVfVEFTS0ZJTEU7CisJcnEuY21kX3R5cGUgPSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEU7CiAJcnEuYnVmZmVyID0gYnVmOwogCiAJLyoKQEAgLTQ5OSw3ICs0OTksNyBAQAogCQlycS5oYXJkX2N1cl9zZWN0b3JzID0gcnEuY3VycmVudF9ucl9zZWN0b3JzID0gcnEubnJfc2VjdG9yczsKIAogCQlpZiAoYXJncy0+Y29tbWFuZF90eXBlID09IElERV9EUklWRV9UQVNLX1JBV19XUklURSkKLQkJCXJxLmZsYWdzIHw9IFJFUV9SVzsKKwkJCXJxLmNtZF9mbGFncyB8PSBSRVFfUlc7CiAJfQogCiAJcnEuc3BlY2lhbCA9IGFyZ3M7CkBAIC03MzcsNyArNzM3LDcgQEAKIAlzdHJ1Y3QgcmVxdWVzdCBycTsKIAogCWlkZV9pbml0X2RyaXZlX2NtZCgmcnEpOwotCXJxLmZsYWdzID0gUkVRX0RSSVZFX1RBU0s7CisJcnEuY21kX3R5cGUgPSBSRVFfVFlQRV9BVEFfVEFTSzsKIAlycS5idWZmZXIgPSBidWY7CiAJcmV0dXJuIGlkZV9kb19kcml2ZV9jbWQoZHJpdmUsICZycSwgaWRlX3dhaXQpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLmMgYi9kcml2ZXJzL2lkZS9pZGUuYwppbmRleCA5Yzg0NjhkLi4yYjFhMTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUuYwpAQCAtMTIxNyw5ICsxMjE3LDkgQEAKIAltZW1zZXQoJnJxLCAwLCBzaXplb2YocnEpKTsKIAltZW1zZXQoJnJxcG0sIDAsIHNpemVvZihycXBtKSk7CiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwotCXJxLmZsYWdzID0gUkVRX1BNX1NVU1BFTkQ7CisJcnEuY21kX3R5cGUgPSBSRVFfVFlQRV9QTV9TVVNQRU5EOwogCXJxLnNwZWNpYWwgPSAmYXJnczsKLQlycS5lbmRfaW9fZGF0YSA9ICZycXBtOworCXJxLmRhdGEgPSAmcnFwbTsKIAlycXBtLnBtX3N0ZXAgPSBpZGVfcG1fc3RhdGVfc3RhcnRfc3VzcGVuZDsKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQogCQltZXNnLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOwpAQCAtMTIzOCw5ICsxMjM4LDkgQEAKIAltZW1zZXQoJnJxLCAwLCBzaXplb2YocnEpKTsKIAltZW1zZXQoJnJxcG0sIDAsIHNpemVvZihycXBtKSk7CiAJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOwotCXJxLmZsYWdzID0gUkVRX1BNX1JFU1VNRTsKKwlycS5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1JFU1VNRTsKIAlycS5zcGVjaWFsID0gJmFyZ3M7Ci0JcnEuZW5kX2lvX2RhdGEgPSAmcnFwbTsKKwlycS5kYXRhID0gJnJxcG07CiAJcnFwbS5wbV9zdGVwID0gaWRlX3BtX3N0YXRlX3N0YXJ0X3Jlc3VtZTsKIAlycXBtLnBtX3N0YXRlID0gUE1fRVZFTlRfT047CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2xlZ2FjeS9oZC5jIGIvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMKaW5kZXggYWViZWNkOC4uNGFiOTMxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMKKysrIGIvZHJpdmVycy9pZGUvbGVnYWN5L2hkLmMKQEAgLTYyNiw3ICs2MjYsNyBAQAogCQlyZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgKHJlcS0+Y21kID09IFJFQUQpPyJyZWFkIjoid3JpdCIsCiAJCWN5bCwgaGVhZCwgc2VjLCBuc2VjdCwgcmVxLT5idWZmZXIpOwogI2VuZGlmCi0JaWYgKHJlcS0+ZmxhZ3MgJiBSRVFfQ01EKSB7CisJaWYgKGJsa19mc19yZXF1ZXN0KHJlcSkpIHsKIAkJc3dpdGNoIChycV9kYXRhX2RpcihyZXEpKSB7CiAJCWNhc2UgUkVBRDoKIAkJCWhkX291dChkaXNrLG5zZWN0LHNlYyxoZWFkLGN5bCxXSU5fUkVBRCwmcmVhZF9pbnRyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYyBiL2RyaXZlcnMvaWRlL3BjaS9hdGlpeHAuYwppbmRleCBhNTc0ZGU1Li5kNTViOTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvYXRpaXhwLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL2F0aWl4cC5jCkBAIC0zMTgsNiArMzE4LDIwIEBACiAJaHdpZi0+ZHJpdmVzWzBdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOwogfQogCitzdGF0aWMgdm9pZCBfX2RldmluaXQgaW5pdF9od2lmX3NiNjAwX2xlZ2FjeShpZGVfaHdpZl90ICpod2lmKQoreworCisJaHdpZi0+YXRhcGlfZG1hID0gMTsKKwlod2lmLT51bHRyYV9tYXNrID0gMHg3ZjsKKwlod2lmLT5td2RtYV9tYXNrID0gMHgwNzsKKwlod2lmLT5zd2RtYV9tYXNrID0gMHgwNzsKKworCWlmICghbm9hdXRvZG1hKQorCQlod2lmLT5hdXRvZG1hID0gMTsKKwlod2lmLT5kcml2ZXNbMF0uYXV0b2RtYSA9IGh3aWYtPmF1dG9kbWE7CisJaHdpZi0+ZHJpdmVzWzFdLmF1dG9kbWEgPSBod2lmLT5hdXRvZG1hOworfQorCiBzdGF0aWMgaWRlX3BjaV9kZXZpY2VfdCBhdGlpeHBfcGNpX2luZm9bXSBfX2RldmluaXRkYXRhID0gewogCXsJLyogMCAqLwogCQkubmFtZQkJPSAiQVRJSVhQIiwKQEAgLTMyNiw2ICszNDAsMTIgQEAKIAkJLmF1dG9kbWEJPSBBVVRPRE1BLAogCQkuZW5hYmxlYml0cwk9IHt7MHg0OCwweDAxLDB4MDB9LCB7MHg0OCwweDA4LDB4MDB9fSwKIAkJLmJvb3RhYmxlCT0gT05fQk9BUkQsCisJfSx7CS8qIDEgKi8KKwkJLm5hbWUJCT0gIkFUSSBTQjYwMCBTQVRBIExlZ2FjeSBJREUiLAorCQkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NiNjAwX2xlZ2FjeSwKKwkJLmNoYW5uZWxzCT0gMiwKKwkJLmF1dG9kbWEJPSBBVVRPRE1BLAorCQkuYm9vdGFibGUJPSBPTl9CT0FSRCwKIAl9CiB9OwogCkBAIC0zNDgsNiArMzY4LDcgQEAKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFAzMDBfSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA0MDBfSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKIAl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfSURFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCAwfSwKKwl7IFBDSV9WRU5ET1JfSURfQVRJLCBQQ0lfREVWSUNFX0lEX0FUSV9JWFA2MDBfU0FUQSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgKFBDSV9DTEFTU19TVE9SQUdFX0lERTw8OCl8MHg4YSwgMHhmZmZmMDUsIDF9LAogCXsgMCwgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgYXRpaXhwX3BjaV90YmwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYyBiL2RyaXZlcnMvaWRlL3BjaS9waWl4LmMKaW5kZXggNTAzMzJkZC4uZWI1YmFiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvcGNpL3BpaXguYworKysgYi9kcml2ZXJzL2lkZS9wY2kvcGlpeC5jCkBAIC02MTUsNyArNjE1LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IE5VTEw7CiAJdTE2IGNmZzsKIAl1OCByZXY7Ci0Jd2hpbGUoKHBkZXY9cGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCwgcGRldikpIT1OVUxMKQorCXdoaWxlKChwZGV2PXBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCwgcGRldikpIT1OVUxMKQogCXsKIAkJLyogTG9vayBmb3IgNDUwTlggUFhCLiBDaGVjayBmb3IgcHJvYmxlbSBjb25maWd1cmF0aW9ucwogCQkgICBBIFBDSSBxdWlyayBjaGVja3MgYml0IDYgYWxyZWFkeSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGNpL3NlcnZlcndvcmtzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwppbmRleCBmMDYzZDk1Li4wNTc1NDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYworKysgYi9kcml2ZXJzL2lkZS9wY2kvc2VydmVyd29ya3MuYwpAQCAtMzU5LDcgKzM1OSw3IEBACiAKIAkvKiBPU0I0IDogU291dGggQnJpZGdlIGFuZCBJREUgKi8KIAlpZiAoZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19PU0I0SURFKSB7Ci0JCWlzYV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKKwkJaXNhX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsCiAJCQkgIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNCwgTlVMTCk7CiAJCWlmIChpc2FfZGV2KSB7CiAJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoaXNhX2RldiwgMHg2NCwgJnJlZyk7CkBAIC0zODAsNyArMzgwLDcgQEAKIAkJaWYgKCEoUENJX0ZVTkMoZGV2LT5kZXZmbikgJiAxKSkgewogCQkJc3RydWN0IHBjaV9kZXYgKiBmaW5kZXYgPSBOVUxMOwogCQkJdTMyIHJlZzRjID0gMDsKLQkJCWZpbmRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkJZmluZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJCQlQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjUsIE5VTEwpOwogCQkJaWYgKGZpbmRldikgewogCQkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChmaW5kZXYsIDB4NEMsICZyZWc0Yyk7CkBAIC0zODgsNiArMzg4LDcgQEAKIAkJCQlyZWc0YyB8PSAgMHgwMDAwMDA0MDsKIAkJCQlyZWc0YyB8PSAgMHgwMDAwMDAyMDsKIAkJCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGZpbmRldiwgMHg0QywgcmVnNGMpOworCQkJCXBjaV9kZXZfcHV0KGZpbmRldik7CiAJCQl9CiAJCQlvdXRiX3AoMHgwNiwgMHgwYzAwKTsKIAkJCWRldi0+aXJxID0gaW5iX3AoMHgwYzAxKTsKQEAgLTM5NSwxMiArMzk2LDEzIEBACiAJCQlzdHJ1Y3QgcGNpX2RldiAqIGZpbmRldiA9IE5VTEw7CiAJCQl1OCByZWc0MSA9IDA7CiAKLQkJCWZpbmRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLAorCQkJZmluZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9TRVJWRVJXT1JLUywKIAkJCQkJUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2LCBOVUxMKTsKIAkJCWlmIChmaW5kZXYpIHsKIAkJCQlwY2lfcmVhZF9jb25maWdfYnl0ZShmaW5kZXYsIDB4NDEsICZyZWc0MSk7CiAJCQkJcmVnNDEgJj0gfjB4NDA7CiAJCQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGZpbmRldiwgMHg0MSwgcmVnNDEpOworCQkJCXBjaV9kZXZfcHV0KGZpbmRldik7CiAJCQl9CiAJCQkvKgogCQkJICogVGhpcyBpcyBhIGRldmljZSBwaW4gaXNzdWUgb24gQ1NCNi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMgYi9kcml2ZXJzL2lkZS9wY2kvc2lzNTUxMy5jCmluZGV4IGYwMzE5NmMuLjkyZWRmNzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BjaS9zaXM1NTEzLmMKKysrIGIvZHJpdmVycy9pZGUvcGNpL3NpczU1MTMuYwpAQCAtNzM5LDcgKzczOSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShTaVNIb3N0Q2hpcEluZm8pICYmICFjaGlwc2V0X2ZhbWlseTsgaSsrKSB7CiAKLQkJaG9zdCA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCBTaVNIb3N0Q2hpcEluZm9baV0uaG9zdF9pZCwgTlVMTCk7CisJCWhvc3QgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX1NJLCBTaVNIb3N0Q2hpcEluZm9baV0uaG9zdF9pZCwgTlVMTCk7CiAKIAkJaWYgKCFob3N0KQogCQkJY29udGludWU7CkBAIC03NTMsNiArNzUzLDcgQEAKIAkJCWlmIChob3N0cmV2ID49IDB4MzApCiAJCQkJY2hpcHNldF9mYW1pbHkgPSBBVEFfMTAwYTsKIAkJfQorCQlwY2lfZGV2X3B1dChob3N0KTsKIAkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU0lTNTUxMzogJXMgJXMgY29udHJvbGxlclxuIiwKIAkJCSBTaVNIb3N0Q2hpcEluZm9baV0ubmFtZSwgY2hpcHNldF9jYXBhYmlsaXR5W2NoaXBzZXRfZmFtaWx5XSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcgYi9kcml2ZXJzL2llZWUxMzk0L0tjb25maWcKaW5kZXggMTg2NzM3NS4uMjc2OWU1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9LY29uZmlnCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvS2NvbmZpZwpAQCAtMTIwLDEyICsxMjAsMTkgQEAKIAkgIHRoaXMgb3B0aW9uIG9ubHkgaWYgeW91IGhhdmUgYW4gSUVFRSAxMzk0IHZpZGVvIGRldmljZSBjb25uZWN0ZWQgdG8KIAkgIGFuIE9IQ0ktMTM5NCBjYXJkLgogCitjb21tZW50ICJTQlAtMiBzdXBwb3J0IChmb3Igc3RvcmFnZSBkZXZpY2VzKSByZXF1aXJlcyBTQ1NJIgorCWRlcGVuZHMgb24gSUVFRTEzOTQgJiYgU0NTST1uCisKIGNvbmZpZyBJRUVFMTM5NF9TQlAyCiAJdHJpc3RhdGUgIlNCUC0yIHN1cHBvcnQgKEhhcmRkaXNrcyBldGMuKSIKIAlkZXBlbmRzIG9uIElFRUUxMzk0ICYmIFNDU0kgJiYgKFBDSSB8fCBCUk9LRU4pCiAJaGVscAotCSAgVGhpcyBvcHRpb24gZW5hYmxlcyB5b3UgdG8gdXNlIFNCUC0yIGRldmljZXMgY29ubmVjdGVkIHRvIHlvdXIgSUVFRQotCSAgMTM5NCBidXMuICBTQlAtMiBkZXZpY2VzIGluY2x1ZGUgaGFyZGRyaXZlcyBhbmQgRFZEIGRldmljZXMuCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHlvdSB0byB1c2UgU0JQLTIgZGV2aWNlcyBjb25uZWN0ZWQgdG8gYW4gSUVFRQorCSAgMTM5NCBidXMuICBTQlAtMiBkZXZpY2VzIGluY2x1ZGUgc3RvcmFnZSBkZXZpY2VzIGxpa2UgaGFyZGRpc2tzIGFuZAorCSAgRFZEIGRyaXZlcywgYWxzbyBzb21lIG90aGVyIEZpcmVXaXJlIGRldmljZXMgbGlrZSBzY2FubmVycy4KKworCSAgWW91IHNob3VsZCBhbHNvIGVuYWJsZSBzdXBwb3J0IGZvciBkaXNrcywgQ0QtUk9NcywgZXRjLiBpbiB0aGUgU0NTSQorCSAgY29uZmlndXJhdGlvbiBzZWN0aW9uLgogCiBjb25maWcgSUVFRTEzOTRfU0JQMl9QSFlTX0RNQQogCWJvb2wgIkVuYWJsZSByZXBsYWNlbWVudCBmb3IgcGh5c2ljYWwgRE1BIGluIFNCUDIiCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jIGIvZHJpdmVycy9pZWVlMTM5NC9jc3IuYwppbmRleCAxNDk1NzNkLi5hYjBjODBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2Nzci5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmMKQEAgLTE3LDExICsxNywxMyBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogCiAjaW5jbHVkZSAiY3NyMTIxMi5oIgogI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCkBAIC0xNDksMzEgKzE1MSwxOCBAQAogCiAvKgogICogSEkgPT0gc2Vjb25kcyAoYml0cyAwOjIpCi0gKiBMTyA9PSBmcmFjdGlvbiB1bml0cyBvZiAxLzgwMDAgb2YgYSBzZWNvbmQsIGFzIHBlciAxMzk0IChiaXRzIDE5OjMxKQorICogTE8gPT0gZnJhY3Rpb25zIG9mIGEgc2Vjb25kIGluIHVuaXRzIG9mIDEyNXVzZWMgKGJpdHMgMTk6MzEpCiAgKgotICogQ29udmVydCB0byB1bml0cyBhbmQgdGhlbiB0byBIWiwgZm9yIGNvbXBhcmlzb24gdG8gamlmZmllcy4KLSAqCi0gKiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBlbmQgdXAgYmVpbmcgODAwIHVuaXRzLCBvciAxMDBtcyAoMTI1dXNlYyBwZXIKLSAqIHVuaXQpLgotICoKLSAqIE5PVEU6IFRoZSBzcGVjIHNheXMgMS84MDAwLCBidXQgYWxzbyBzYXlzIHdlIGNhbiBjb21wdXRlIGJhc2VkIG9uIDEvODE5MgotICogbGlrZSBDU1Igc3BlY2lmaWVzLiBTaG91bGQgbWFrZSBvdXIgbWF0aCBsZXNzIGNvbXBsZXguCisgKiBDb252ZXJ0IFNQTElUX1RJTUVPVVQgdG8gamlmZmllcy4KKyAqIFRoZSBkZWZhdWx0IGFuZCBtaW5pbXVtIGFzIHBlciAxMzk0YS0yMDAwIGNsYXVzZSA4LjMuMi4yLjYgaXMgMTAwbXMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBjYWxjdWxhdGVfZXhwaXJlKHN0cnVjdCBjc3JfY29udHJvbCAqY3NyKQogewotCXVuc2lnbmVkIGxvbmcgdW5pdHM7CisJdW5zaWduZWQgbG9uZyB1c2VjcyA9CisJCShjc3ItPnNwbGl0X3RpbWVvdXRfaGkgJiAweDA3KSAqIFVTRUNfUEVSX1NFQyArCisJCShjc3ItPnNwbGl0X3RpbWVvdXRfbG8gPj4gMTkpICogMTI1TDsKIAotCS8qIFRha2UgdGhlIHNlY29uZHMsIGFuZCBjb252ZXJ0IHRvIHVuaXRzICovCi0JdW5pdHMgPSAodW5zaWduZWQgbG9uZykoY3NyLT5zcGxpdF90aW1lb3V0X2hpICYgMHgwNykgPDwgMTM7Ci0KLQkvKiBBZGQgaW4gdGhlIGZyYWN0aW9uYWwgdW5pdHMgKi8KLQl1bml0cyArPSAodW5zaWduZWQgbG9uZykoY3NyLT5zcGxpdF90aW1lb3V0X2xvID4+IDE5KTsKLQotCS8qIENvbnZlcnQgdG8gamlmZmllcyAqLwotCWNzci0+ZXhwaXJlID0gKHVuc2lnbmVkIGxvbmcpKHVuaXRzICogSFopID4+IDEzVUw7Ci0KLQkvKiBKdXN0IHRvIGtlZXAgZnJvbSByb3VuZGluZyBsb3cgKi8KLQljc3ItPmV4cGlyZSsrOworCWNzci0+ZXhwaXJlID0gdXNlY3NfdG9famlmZmllcyh1c2VjcyA+IDEwMDAwMEwgPyB1c2VjcyA6IDEwMDAwMEwpOwogCiAJSFBTQl9WRVJCT1NFKCJDU1I6IHNldHRpbmcgZXhwaXJlIHRvICVsdSwgSFo9JXUiLCBjc3ItPmV4cGlyZSwgSFopOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuaCBiL2RyaXZlcnMvaWVlZTEzOTQvY3NyLmgKaW5kZXggZWE5YWE0Zi4uZjExNTQ2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9jc3IuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2Nzci5oCkBAIC0xLDc1ICsxLDczIEBACi0KICNpZm5kZWYgX0lFRUUxMzk0X0NTUl9ICiAjZGVmaW5lIF9JRUVFMTM5NF9DU1JfSAogCi0jaWZkZWYgQ09ORklHX1BSRUVNUFQKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2VuZGlmCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KIAogI2luY2x1ZGUgImNzcjEyMTIuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgogCi0jZGVmaW5lIENTUl9SRUdJU1RFUl9CQVNFICAweGZmZmZmMDAwMDAwMFVMTAorI2RlZmluZSBDU1JfUkVHSVNURVJfQkFTRQkJMHhmZmZmZjAwMDAwMDBVTEwKIAogLyogcmVnaXN0ZXIgb2Zmc2V0cyByZWxhdGl2ZSB0byBDU1JfUkVHSVNURVJfQkFTRSAqLwotI2RlZmluZSBDU1JfU1RBVEVfQ0xFQVIgICAgICAgICAgIDB4MAotI2RlZmluZSBDU1JfU1RBVEVfU0VUICAgICAgICAgICAgIDB4NAotI2RlZmluZSBDU1JfTk9ERV9JRFMgICAgICAgICAgICAgIDB4OAotI2RlZmluZSBDU1JfUkVTRVRfU1RBUlQgICAgICAgICAgIDB4YwotI2RlZmluZSBDU1JfU1BMSVRfVElNRU9VVF9ISSAgICAgIDB4MTgKLSNkZWZpbmUgQ1NSX1NQTElUX1RJTUVPVVRfTE8gICAgICAweDFjCi0jZGVmaW5lIENTUl9DWUNMRV9USU1FICAgICAgICAgICAgMHgyMDAKLSNkZWZpbmUgQ1NSX0JVU19USU1FICAgICAgICAgICAgICAweDIwNAotI2RlZmluZSBDU1JfQlVTWV9USU1FT1VUICAgICAgICAgIDB4MjEwCi0jZGVmaW5lIENTUl9CVVNfTUFOQUdFUl9JRCAgICAgICAgMHgyMWMKLSNkZWZpbmUgQ1NSX0JBTkRXSURUSF9BVkFJTEFCTEUgICAweDIyMAotI2RlZmluZSBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFICAgIDB4MjI0Ci0jZGVmaW5lIENTUl9DSEFOTkVMU19BVkFJTEFCTEVfSEkgMHgyMjQKLSNkZWZpbmUgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9MTyAweDIyOAotI2RlZmluZSBDU1JfQlJPQURDQVNUX0NIQU5ORUwgICAgIDB4MjM0Ci0jZGVmaW5lIENTUl9DT05GSUdfUk9NICAgICAgICAgICAgMHg0MDAKLSNkZWZpbmUgQ1NSX0NPTkZJR19ST01fRU5EICAgICAgICAweDgwMAotI2RlZmluZSBDU1JfRkNQX0NPTU1BTkQgICAgICAgICAgIDB4QjAwCi0jZGVmaW5lIENTUl9GQ1BfUkVTUE9OU0UgICAgICAgICAgMHhEMDAKLSNkZWZpbmUgQ1NSX0ZDUF9FTkQgICAgICAgICAgICAgICAweEYwMAotI2RlZmluZSBDU1JfVE9QT0xPR1lfTUFQICAgICAgICAgIDB4MTAwMAotI2RlZmluZSBDU1JfVE9QT0xPR1lfTUFQX0VORCAgICAgIDB4MTQwMAotI2RlZmluZSBDU1JfU1BFRURfTUFQICAgICAgICAgICAgIDB4MjAwMAotI2RlZmluZSBDU1JfU1BFRURfTUFQX0VORCAgICAgICAgIDB4MzAwMAorI2RlZmluZSBDU1JfU1RBVEVfQ0xFQVIJCQkweDAKKyNkZWZpbmUgQ1NSX1NUQVRFX1NFVAkJCTB4NAorI2RlZmluZSBDU1JfTk9ERV9JRFMJCQkweDgKKyNkZWZpbmUgQ1NSX1JFU0VUX1NUQVJUCQkJMHhjCisjZGVmaW5lIENTUl9TUExJVF9USU1FT1VUX0hJCQkweDE4CisjZGVmaW5lIENTUl9TUExJVF9USU1FT1VUX0xPCQkweDFjCisjZGVmaW5lIENTUl9DWUNMRV9USU1FCQkJMHgyMDAKKyNkZWZpbmUgQ1NSX0JVU19USU1FCQkJMHgyMDQKKyNkZWZpbmUgQ1NSX0JVU1lfVElNRU9VVAkJMHgyMTAKKyNkZWZpbmUgQ1NSX0JVU19NQU5BR0VSX0lECQkweDIxYworI2RlZmluZSBDU1JfQkFORFdJRFRIX0FWQUlMQUJMRQkJMHgyMjAKKyNkZWZpbmUgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRQkJMHgyMjQKKyNkZWZpbmUgQ1NSX0NIQU5ORUxTX0FWQUlMQUJMRV9ISQkweDIyNAorI2RlZmluZSBDU1JfQ0hBTk5FTFNfQVZBSUxBQkxFX0xPCTB4MjI4CisjZGVmaW5lIENTUl9CUk9BRENBU1RfQ0hBTk5FTAkJMHgyMzQKKyNkZWZpbmUgQ1NSX0NPTkZJR19ST00JCQkweDQwMAorI2RlZmluZSBDU1JfQ09ORklHX1JPTV9FTkQJCTB4ODAwCisjZGVmaW5lIENTUl9GQ1BfQ09NTUFORAkJCTB4QjAwCisjZGVmaW5lIENTUl9GQ1BfUkVTUE9OU0UJCTB4RDAwCisjZGVmaW5lIENTUl9GQ1BfRU5ECQkJMHhGMDAKKyNkZWZpbmUgQ1NSX1RPUE9MT0dZX01BUAkJMHgxMDAwCisjZGVmaW5lIENTUl9UT1BPTE9HWV9NQVBfRU5ECQkweDE0MDAKKyNkZWZpbmUgQ1NSX1NQRUVEX01BUAkJCTB4MjAwMAorI2RlZmluZSBDU1JfU1BFRURfTUFQX0VORAkJMHgzMDAwCiAKIC8qIElFRUUgMTM5NCBidXMgc3BlY2lmaWMgQ29uZmlndXJhdGlvbiBST00gS2V5IElEcyAqLwogI2RlZmluZSBJRUVFMTM5NF9LVl9JRF9QT1dFUl9SRVFVSVJFTUVOVFMgKDB4MzApCiAKLS8qIElFRUUgMTM5NCBCdXMgSW5mb3JhbWF0aW9uIEJsb2NrIHNwZWNpZmljcyAqLworLyogSUVFRSAxMzk0IEJ1cyBJbmZvcm1hdGlvbiBCbG9jayBzcGVjaWZpY3MgKi8KICNkZWZpbmUgQ1NSX0JVU19JTkZPX1NJWkUgKDUgKiBzaXplb2YocXVhZGxldF90KSkKIAotI2RlZmluZSBDU1JfSVJNQ19TSElGVCAzMQotI2RlZmluZSBDU1JfQ01DX1NISUZUICAzMAotI2RlZmluZSBDU1JfSVNDX1NISUZUICAyOQotI2RlZmluZSBDU1JfQk1DX1NISUZUICAyOAotI2RlZmluZSBDU1JfUE1DX1NISUZUICAyNwotI2RlZmluZSBDU1JfQ1lDX0NMS19BQ0NfU0hJRlQgMTYKLSNkZWZpbmUgQ1NSX01BWF9SRUNfU0hJRlQgMTIKLSNkZWZpbmUgQ1NSX01BWF9ST01fU0hJRlQgOAotI2RlZmluZSBDU1JfR0VORVJBVElPTl9TSElGVCA0CisjZGVmaW5lIENTUl9JUk1DX1NISUZUCQkJMzEKKyNkZWZpbmUgQ1NSX0NNQ19TSElGVAkJCTMwCisjZGVmaW5lIENTUl9JU0NfU0hJRlQJCQkyOQorI2RlZmluZSBDU1JfQk1DX1NISUZUCQkJMjgKKyNkZWZpbmUgQ1NSX1BNQ19TSElGVAkJCTI3CisjZGVmaW5lIENTUl9DWUNfQ0xLX0FDQ19TSElGVAkJMTYKKyNkZWZpbmUgQ1NSX01BWF9SRUNfU0hJRlQJCTEyCisjZGVmaW5lIENTUl9NQVhfUk9NX1NISUZUCQk4CisjZGVmaW5lIENTUl9HRU5FUkFUSU9OX1NISUZUCQk0CiAKICNkZWZpbmUgQ1NSX1NFVF9CVVNfSU5GT19HRU5FUkFUSU9OKGNzciwgZ2VuKQkJCQlcCiAJKChjc3IpLT5idXNfaW5mb19kYXRhWzJdID0JCQkJCVwKIAkJY3B1X3RvX2JlMzIoKGJlMzJfdG9fY3B1KChjc3IpLT5idXNfaW5mb19kYXRhWzJdKSAmCVwKLQkJCSAgICAgfigweGYgPDwgQ1NSX0dFTkVSQVRJT05fU0hJRlQpKSB8ICAgICAgICAgIFwKKwkJCSAgICAgfigweGYgPDwgQ1NSX0dFTkVSQVRJT05fU0hJRlQpKSB8CQlcCiAJCQkgICAgKGdlbikgPDwgQ1NSX0dFTkVSQVRJT05fU0hJRlQpKQogCiBzdHJ1Y3QgY3NyX2NvbnRyb2wgewotICAgICAgICBzcGlubG9ja190IGxvY2s7CisJc3BpbmxvY2tfdCBsb2NrOwogCi0gICAgICAgIHF1YWRsZXRfdCBzdGF0ZTsKLSAgICAgICAgcXVhZGxldF90IG5vZGVfaWRzOwotICAgICAgICBxdWFkbGV0X3Qgc3BsaXRfdGltZW91dF9oaSwgc3BsaXRfdGltZW91dF9sbzsKLQl1bnNpZ25lZCBsb25nIGV4cGlyZTsJLy8gQ2FsY3VsYXRlZCBmcm9tIHNwbGl0X3RpbWVvdXQKLSAgICAgICAgcXVhZGxldF90IGN5Y2xlX3RpbWU7Ci0gICAgICAgIHF1YWRsZXRfdCBidXNfdGltZTsKLSAgICAgICAgcXVhZGxldF90IGJ1c19tYW5hZ2VyX2lkOwotICAgICAgICBxdWFkbGV0X3QgYmFuZHdpZHRoX2F2YWlsYWJsZTsKLSAgICAgICAgcXVhZGxldF90IGNoYW5uZWxzX2F2YWlsYWJsZV9oaSwgY2hhbm5lbHNfYXZhaWxhYmxlX2xvOworCXF1YWRsZXRfdCBzdGF0ZTsKKwlxdWFkbGV0X3Qgbm9kZV9pZHM7CisJcXVhZGxldF90IHNwbGl0X3RpbWVvdXRfaGksIHNwbGl0X3RpbWVvdXRfbG87CisJdW5zaWduZWQgbG9uZyBleHBpcmU7CS8qIENhbGN1bGF0ZWQgZnJvbSBzcGxpdF90aW1lb3V0ICovCisJcXVhZGxldF90IGN5Y2xlX3RpbWU7CisJcXVhZGxldF90IGJ1c190aW1lOworCXF1YWRsZXRfdCBidXNfbWFuYWdlcl9pZDsKKwlxdWFkbGV0X3QgYmFuZHdpZHRoX2F2YWlsYWJsZTsKKwlxdWFkbGV0X3QgY2hhbm5lbHNfYXZhaWxhYmxlX2hpLCBjaGFubmVsc19hdmFpbGFibGVfbG87CiAJcXVhZGxldF90IGJyb2FkY2FzdF9jaGFubmVsOwogCiAJLyogQnVzIEluZm8gKi8KQEAgLTg0LDggKzgyLDggQEAKIAogCXN0cnVjdCBjc3IxMjEyX2NzciAqcm9tOwogCi0gICAgICAgIHF1YWRsZXRfdCB0b3BvbG9neV9tYXBbMjU2XTsKLSAgICAgICAgcXVhZGxldF90IHNwZWVkX21hcFsxMDI0XTsKKwlxdWFkbGV0X3QgdG9wb2xvZ3lfbWFwWzI1Nl07CisJcXVhZGxldF90IHNwZWVkX21hcFsxMDI0XTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgY3NyMTIxMl9idXNfb3BzIGNzcl9idXNfb3BzOwpAQCAtOTMsNCArOTEsOSBAQAogaW50IGluaXRfY3NyKHZvaWQpOwogdm9pZCBjbGVhbnVwX2Nzcih2b2lkKTsKIAorLyogaHBzYl91cGRhdGVfY29uZmlnX3JvbSgpIGlzIGRlcHJlY2F0ZWQgKi8KK3N0cnVjdCBocHNiX2hvc3Q7CitpbnQgaHBzYl91cGRhdGVfY29uZmlnX3JvbShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBjb25zdCBxdWFkbGV0X3QgKm5ld19yb20sCisJCQkgICBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hhciByb21fdmVyc2lvbik7CisKICNlbmRpZiAvKiBfSUVFRTEzOTRfQ1NSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMgYi9kcml2ZXJzL2llZWUxMzk0L2RtYS5jCmluZGV4IGNhNTE2N2QuLmM2OGYzMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuYwpAQCAtNywxMCArNywxMyBAQAogICogZGlyZWN0b3J5IG9mIHRoZSBrZXJuZWwgc291cmNlcyBmb3IgZGV0YWlscy4KICAqLwogCi0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKICNpbmNsdWRlICJkbWEuaCIKIAogLyogZG1hX3Byb2dfcmVnaW9uICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5oIGIvZHJpdmVycy9pZWVlMTM5NC9kbWEuaAppbmRleCAwNjE1NTBhLi5hMTY4MmFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2RtYS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvZG1hLmgKQEAgLTEwLDY5ICsxMCw5MSBAQAogI2lmbmRlZiBJRUVFMTM5NF9ETUFfSAogI2RlZmluZSBJRUVFMTM5NF9ETUFfSAogCi0jaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CiAKLS8qIHN0cnVjdCBkbWFfcHJvZ19yZWdpb24KK3N0cnVjdCBwY2lfZGV2Oworc3RydWN0IHNjYXR0ZXJsaXN0Oworc3RydWN0IHZtX2FyZWFfc3RydWN0OwogCi0gICBhIHNtYWxsLCBwaHlzaWNhbGx5LWNvbnRpZ3VvdXMgRE1BIGJ1ZmZlciB3aXRoIHJhbmRvbS1hY2Nlc3MsCi0gICBzeW5jaHJvbm91cyB1c2FnZSBjaGFyYWN0ZXJpc3RpY3MKLSovCi0KKy8qKgorICogc3RydWN0IGRtYV9wcm9nX3JlZ2lvbiAtIHNtYWxsIGNvbnRpZ3VvdXMgRE1BIGJ1ZmZlcgorICogQGt2aXJ0OiAgICBrZXJuZWwgdmlydHVhbCBhZGRyZXNzCisgKiBAZGV2OiAgICAgIFBDSSBkZXZpY2UKKyAqIEBuX3BhZ2VzOiAgbnVtYmVyIG9mIGtlcm5lbCBwYWdlcworICogQGJ1c19hZGRyOiBiYXNlIGJ1cyBhZGRyZXNzCisgKgorICogYSBzbWFsbCwgcGh5c2ljYWxseSBjb250aWd1b3VzIERNQSBidWZmZXIgd2l0aCByYW5kb20tYWNjZXNzLCBzeW5jaHJvbm91cworICogdXNhZ2UgY2hhcmFjdGVyaXN0aWNzCisgKi8KIHN0cnVjdCBkbWFfcHJvZ19yZWdpb24gewotCXVuc2lnbmVkIGNoYXIgICAgKmt2aXJ0OyAgICAgLyoga2VybmVsIHZpcnR1YWwgYWRkcmVzcyAqLwotCXN0cnVjdCBwY2lfZGV2ICAgKmRldjsgICAgICAgLyogUENJIGRldmljZSAqLwotCXVuc2lnbmVkIGludCAgICAgIG5fcGFnZXM7ICAgLyogIyBvZiBrZXJuZWwgcGFnZXMgKi8KLQlkbWFfYWRkcl90ICAgICAgICBidXNfYWRkcjsgIC8qIGJhc2UgYnVzIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBjaGFyICprdmlydDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXVuc2lnbmVkIGludCBuX3BhZ2VzOworCWRtYV9hZGRyX3QgYnVzX2FkZHI7CiB9OwogCiAvKiBjbGVhciBvdXQgYWxsIGZpZWxkcyBidXQgZG8gbm90IGFsbG9jYXRlIGFueSBtZW1vcnkgKi8KIHZvaWQgZG1hX3Byb2dfcmVnaW9uX2luaXQoc3RydWN0IGRtYV9wcm9nX3JlZ2lvbiAqcHJvZyk7Ci1pbnQgIGRtYV9wcm9nX3JlZ2lvbl9hbGxvYyhzdHJ1Y3QgZG1hX3Byb2dfcmVnaW9uICpwcm9nLCB1bnNpZ25lZCBsb25nIG5fYnl0ZXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IGRtYV9wcm9nX3JlZ2lvbl9hbGxvYyhzdHJ1Y3QgZG1hX3Byb2dfcmVnaW9uICpwcm9nLCB1bnNpZ25lZCBsb25nIG5fYnl0ZXMsCisJCQkgIHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBkbWFfcHJvZ19yZWdpb25fZnJlZShzdHJ1Y3QgZG1hX3Byb2dfcmVnaW9uICpwcm9nKTsKIAotc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9wcm9nX3JlZ2lvbl9vZmZzZXRfdG9fYnVzKHN0cnVjdCBkbWFfcHJvZ19yZWdpb24gKnByb2csIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQorc3RhdGljIGlubGluZSBkbWFfYWRkcl90IGRtYV9wcm9nX3JlZ2lvbl9vZmZzZXRfdG9fYnVzKAorCQlzdHJ1Y3QgZG1hX3Byb2dfcmVnaW9uICpwcm9nLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlyZXR1cm4gcHJvZy0+YnVzX2FkZHIgKyBvZmZzZXQ7CiB9CiAKLS8qIHN0cnVjdCBkbWFfcmVnaW9uCi0KLSAgIGEgbGFyZ2UsIG5vbi1waHlzaWNhbGx5LWNvbnRpZ3VvdXMgRE1BIGJ1ZmZlciB3aXRoIHN0cmVhbWluZywKLSAgIGFzeW5jaHJvbm91cyB1c2FnZSBjaGFyYWN0ZXJpc3RpY3MKLSovCi0KKy8qKgorICogc3RydWN0IGRtYV9yZWdpb24gLSBsYXJnZSBub24tY29udGlndW91cyBETUEgYnVmZmVyCisgKiBAdmlydDogICAgICAgIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3MKKyAqIEBkZXY6ICAgICAgICAgUENJIGRldmljZQorICogQG5fcGFnZXM6ICAgICBudW1iZXIgb2Yga2VybmVsIHBhZ2VzCisgKiBAbl9kbWFfcGFnZXM6IG51bWJlciBvZiBJT01NVSBwYWdlcworICogQHNnbGlzdDogICAgICBJT01NVSBtYXBwaW5nCisgKiBAZGlyZWN0aW9uOiAgIFBDSV9ETUFfVE9ERVZJQ0UsIGV0Yy4KKyAqCisgKiBhIGxhcmdlLCBub24tcGh5c2ljYWxseS1jb250aWd1b3VzIERNQSBidWZmZXIgd2l0aCBzdHJlYW1pbmcsIGFzeW5jaHJvbm91cworICogdXNhZ2UgY2hhcmFjdGVyaXN0aWNzCisgKi8KIHN0cnVjdCBkbWFfcmVnaW9uIHsKLQl1bnNpZ25lZCBjaGFyICAgICAgKmt2aXJ0OyAgICAgICAvKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzICovCi0Jc3RydWN0IHBjaV9kZXYgICAgICpkZXY7ICAgICAgICAgLyogUENJIGRldmljZSAqLwotCXVuc2lnbmVkIGludCAgICAgICAgbl9wYWdlczsgICAgIC8qICMgb2Yga2VybmVsIHBhZ2VzICovCi0JdW5zaWduZWQgaW50ICAgICAgICBuX2RtYV9wYWdlczsgLyogIyBvZiBJT01NVSBwYWdlcyAqLwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0OyAgICAgIC8qIElPTU1VIG1hcHBpbmcgKi8KLQlpbnQgICAgICAgICAgICAgICAgIGRpcmVjdGlvbjsgICAvKiBQQ0lfRE1BX1RPREVWSUNFLCBldGMgKi8KKwl1bnNpZ25lZCBjaGFyICprdmlydDsKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXVuc2lnbmVkIGludCBuX3BhZ2VzOworCXVuc2lnbmVkIGludCBuX2RtYV9wYWdlczsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdDsKKwlpbnQgZGlyZWN0aW9uOwogfTsKIAogLyogY2xlYXIgb3V0IGFsbCBmaWVsZHMgYnV0IGRvIG5vdCBhbGxvY2F0ZSBhbnl0aGluZyAqLwogdm9pZCBkbWFfcmVnaW9uX2luaXQoc3RydWN0IGRtYV9yZWdpb24gKmRtYSk7CiAKIC8qIGFsbG9jYXRlIHRoZSBidWZmZXIgYW5kIG1hcCBpdCB0byB0aGUgSU9NTVUgKi8KLWludCAgZG1hX3JlZ2lvbl9hbGxvYyhzdHJ1Y3QgZG1hX3JlZ2lvbiAqZG1hLCB1bnNpZ25lZCBsb25nIG5fYnl0ZXMsIHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBkaXJlY3Rpb24pOworaW50IGRtYV9yZWdpb25fYWxsb2Moc3RydWN0IGRtYV9yZWdpb24gKmRtYSwgdW5zaWduZWQgbG9uZyBuX2J5dGVzLAorCQkgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCBkaXJlY3Rpb24pOwogCiAvKiB1bm1hcCBhbmQgZnJlZSB0aGUgYnVmZmVyICovCiB2b2lkIGRtYV9yZWdpb25fZnJlZShzdHJ1Y3QgZG1hX3JlZ2lvbiAqZG1hKTsKIAogLyogc3luYyB0aGUgQ1BVJ3MgdmlldyBvZiB0aGUgYnVmZmVyICovCi12b2lkIGRtYV9yZWdpb25fc3luY19mb3JfY3B1KHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbik7Cit2b2lkIGRtYV9yZWdpb25fc3luY19mb3JfY3B1KHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGxlbik7CisKIC8qIHN5bmMgdGhlIElPIGJ1cycgdmlldyBvZiB0aGUgYnVmZmVyICovCi12b2lkIGRtYV9yZWdpb25fc3luY19mb3JfZGV2aWNlKHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIGxlbik7Cit2b2lkIGRtYV9yZWdpb25fc3luY19mb3JfZGV2aWNlKHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCXVuc2lnbmVkIGxvbmcgbGVuKTsKIAogLyogbWFwIHRoZSBidWZmZXIgaW50byBhIHVzZXIgc3BhY2UgcHJvY2VzcyAqLwotaW50ICBkbWFfcmVnaW9uX21tYXAoc3RydWN0IGRtYV9yZWdpb24gKmRtYSwgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2ludCAgZG1hX3JlZ2lvbl9tbWFwKHN0cnVjdCBkbWFfcmVnaW9uICpkbWEsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAogLyogbWFjcm8gdG8gaW5kZXggaW50byBhIERNQSByZWdpb24gKG9yIGRtYV9wcm9nX3JlZ2lvbikgKi8KLSNkZWZpbmUgZG1hX3JlZ2lvbl9pKF9kbWEsIF90eXBlLCBfaW5kZXgpICggKChfdHlwZSopICgoX2RtYSktPmt2aXJ0KSkgKyAoX2luZGV4KSApCisjZGVmaW5lIGRtYV9yZWdpb25faShfZG1hLCBfdHlwZSwgX2luZGV4KSBcCisJKCAoKF90eXBlKikgKChfZG1hKS0+a3ZpcnQpKSArIChfaW5kZXgpICkKIAogLyogcmV0dXJuIHRoZSBETUEgYnVzIGFkZHJlc3Mgb2YgdGhlIGJ5dGUgd2l0aCB0aGUgZ2l2ZW4gb2Zmc2V0Ci0gICByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkbWFfcmVnaW9uICovCi1kbWFfYWRkcl90IGRtYV9yZWdpb25fb2Zmc2V0X3RvX2J1cyhzdHJ1Y3QgZG1hX3JlZ2lvbiAqZG1hLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CisgKiByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkbWFfcmVnaW9uICovCitkbWFfYWRkcl90IGRtYV9yZWdpb25fb2Zmc2V0X3RvX2J1cyhzdHJ1Y3QgZG1hX3JlZ2lvbiAqZG1hLAorCQkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiAKICNlbmRpZiAvKiBJRUVFMTM5NF9ETUFfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQtcHJpdmF0ZS5oIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQtcHJpdmF0ZS5oCmluZGV4IDgwYjVhYzcuLjdkMWQyODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LXByaXZhdGUuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC1wcml2YXRlLmgKQEAgLTQ2MCw3ICs0NjAsNyBAQAogCWludCBkbWFfcnVubmluZzsKIAogCS8qCi0JICAzKSB0aGUgc2xlZXBpbmcgc2VtYXBob3JlICdzZW0nIC0gdGhpcyBpcyB1c2VkIGZyb20gcHJvY2VzcyBjb250ZXh0IG9ubHksCisJICAzKSB0aGUgc2xlZXBpbmcgbXV0ZXggJ210eCcgLSB0aGlzIGlzIHVzZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQgb25seSwKIAkgIHRvIHNlcmlhbGl6ZSB2YXJpb3VzIG9wZXJhdGlvbnMgb24gdGhlIHZpZGVvX2NhcmQuIEV2ZW4gdGhvdWdoIG9ubHkgb25lCiAJICBvcGVuKCkgaXMgYWxsb3dlZCwgd2Ugc3RpbGwgbmVlZCB0byBwcmV2ZW50IG11bHRpcGxlIHRocmVhZHMgb2YgZXhlY3V0aW9uCiAJICBmcm9tIGVudGVyaW5nIGNhbGxzIGxpa2UgcmVhZCwgd3JpdGUsIGlvY3RsLCBldGMuCkBAIC00NjgsOSArNDY4LDkgQEAKIAkgIEkgaG9uZXN0bHkgY2FuJ3QgdGhpbmsgb2YgYSBnb29kIHJlYXNvbiB0byB1c2UgZHYxMzk0IGZyb20gc2V2ZXJhbCB0aHJlYWRzCiAJICBhdCBvbmNlLCBidXQgd2UgbmVlZCB0byBzZXJpYWxpemUgYW55d2F5IHRvIHByZXZlbnQgb29wc2VzID0pLgogCi0JICBOT1RFOiBpZiB5b3UgbmVlZCBib3RoIHNwaW5sb2NrIGFuZCBzZW0sIHRha2Ugc2VtIGZpcnN0IHRvIGF2b2lkIGRlYWRsb2NrIQorCSAgTk9URTogaWYgeW91IG5lZWQgYm90aCBzcGlubG9jayBhbmQgbXR4LCB0YWtlIG10eCBmaXJzdCB0byBhdm9pZCBkZWFkbG9jayEKIAkgKi8KLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKKwlzdHJ1Y3QgbXV0ZXggbXR4OwogCiAJLyogcGVvcGxlIHdhaXRpbmcgZm9yIGJ1ZmZlciBzcGFjZSwgcGxlYXNlIGZvcm0gYSBsaW5lIGhlcmUuLi4gKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2R2MTM5NC5jCmluZGV4IDg3NTMyZGQuLjZjNzJmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvZHYxMzk0LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9kdjEzOTQuYwpAQCAtOTUsNiArOTUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgpAQCAtMTEwLDE1ICsxMTEsMTUgQEAKICNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAKLSNpbmNsdWRlICJpZWVlMTM5NC5oIgotI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCi0jaW5jbHVkZSAibm9kZW1nci5oIgotI2luY2x1ZGUgImhvc3RzLmgiCi0jaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgotI2luY2x1ZGUgImhpZ2hsZXZlbC5oIgogI2luY2x1ZGUgImR2MTM5NC5oIgogI2luY2x1ZGUgImR2MTM5NC1wcml2YXRlLmgiCi0KKyNpbmNsdWRlICJoaWdobGV2ZWwuaCIKKyNpbmNsdWRlICJob3N0cy5oIgorI2luY2x1ZGUgImllZWUxMzk0LmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgorI2luY2x1ZGUgImllZWUxMzk0X2hvdHBsdWcuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgorI2luY2x1ZGUgIm5vZGVtZ3IuaCIKICNpbmNsdWRlICJvaGNpMTM5NC5oIgogCiAvKiBERUJVRyBMRVZFTFM6CkBAIC0xMzYsMTMgKzEzNywxMyBAQAogI2lmIERWMTM5NF9ERUJVR19MRVZFTCA+PSAyCiAjZGVmaW5lIGlycV9wcmludGsoIGFyZ3MuLi4gKSBwcmludGsoIGFyZ3MgKQogI2Vsc2UKLSNkZWZpbmUgaXJxX3ByaW50ayggYXJncy4uLiApCisjZGVmaW5lIGlycV9wcmludGsoIGFyZ3MuLi4gKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWYgRFYxMzk0X0RFQlVHX0xFVkVMID49IDEKICNkZWZpbmUgZGVidWdfcHJpbnRrKCBhcmdzLi4uICkgcHJpbnRrKCBhcmdzKQogI2Vsc2UKLSNkZWZpbmUgZGVidWdfcHJpbnRrKCBhcmdzLi4uICkKKyNkZWZpbmUgZGVidWdfcHJpbnRrKCBhcmdzLi4uICkgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogLyogaXNzdWUgYSBkdW1teSBQQ0kgcmVhZCB0byBmb3JjZSB0aGUgcHJlY2VkaW5nIHdyaXRlCkBAIC0yNDcsNyArMjQ4LDcgQEAKIAogICAgRnJhbWVfcHJlcGFyZSgpIG11c3QgYmUgY2FsbGVkIE9VVFNJREUgdGhlIHZpZGVvLT5zcGlubG9jay4KICAgIEhvd2V2ZXIsIGZyYW1lX3ByZXBhcmUoKSBtdXN0IHN0aWxsIGJlIHNlcmlhbGl6ZWQsIHNvCi0gICBpdCBzaG91bGQgYmUgY2FsbGVkIFdJVEggdGhlIHZpZGVvLT5zZW0gdGFrZW4uCisgICBpdCBzaG91bGQgYmUgY2FsbGVkIFdJVEggdGhlIHZpZGVvLT5tdHggdGFrZW4uCiAgKi8KIAogc3RhdGljIHZvaWQgZnJhbWVfcHJlcGFyZShzdHJ1Y3QgdmlkZW9fY2FyZCAqdmlkZW8sIHVuc2lnbmVkIGludCB0aGlzX2ZyYW1lKQpAQCAtMTI3MSw3ICsxMjcyLDcgQEAKIAlpbnQgcmV0dmFsID0gLUVJTlZBTDsKIAogCS8qIHNlcmlhbGl6ZSBtbWFwICovCi0JZG93bigmdmlkZW8tPnNlbSk7CisJbXV0ZXhfbG9jaygmdmlkZW8tPm10eCk7CiAKIAlpZiAoICEgdmlkZW9fY2FyZF9pbml0aWFsaXplZCh2aWRlbykgKSB7CiAJCXJldHZhbCA9IGRvX2R2MTM5NF9pbml0X2RlZmF1bHQodmlkZW8pOwpAQCAtMTI4MSw3ICsxMjgyLDcgQEAKIAogCXJldHZhbCA9IGRtYV9yZWdpb25fbW1hcCgmdmlkZW8tPmR2X2J1ZiwgZmlsZSwgdm1hKTsKIG91dDoKLQl1cCgmdmlkZW8tPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlby0+bXR4KTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xMzM3LDE3ICsxMzM4LDE3IEBACiAKIAkvKiBzZXJpYWxpemUgdGhpcyB0byBwcmV2ZW50IG11bHRpLXRocmVhZGVkIG1heWhlbSAqLwogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlpZiAoZG93bl90cnlsb2NrKCZ2aWRlby0+c2VtKSkKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZ2aWRlby0+bXR4KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCX0gZWxzZSB7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJnZpZGVvLT5zZW0pKQorCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+bXR4KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCiAJaWYgKCAhdmlkZW9fY2FyZF9pbml0aWFsaXplZCh2aWRlbykgKSB7CiAJCXJldCA9IGRvX2R2MTM5NF9pbml0X2RlZmF1bHQodmlkZW8pOwogCQlpZiAocmV0KSB7Ci0JCQl1cCgmdmlkZW8tPnNlbSk7CisJCQltdXRleF91bmxvY2soJnZpZGVvLT5tdHgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCX0KQEAgLTE0MTgsNyArMTQxOSw3IEBACiAKIAlyZW1vdmVfd2FpdF9xdWV1ZSgmdmlkZW8tPndhaXRxLCAmd2FpdCk7CiAJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKLQl1cCgmdmlkZW8tPnNlbSk7CisJbXV0ZXhfdW5sb2NrKCZ2aWRlby0+bXR4KTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDM0LDE3ICsxNDM1LDE3IEBACiAKIAkvKiBzZXJpYWxpemUgdGhpcyB0byBwcmV2ZW50IG11bHRpLXRocmVhZGVkIG1heWhlbSAqLwogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlpZiAoZG93bl90cnlsb2NrKCZ2aWRlby0+c2VtKSkKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZ2aWRlby0+bXR4KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCX0gZWxzZSB7Ci0JCWlmIChkb3duX2ludGVycnVwdGlibGUoJnZpZGVvLT5zZW0pKQorCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+bXR4KSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7CiAJfQogCiAJaWYgKCAhdmlkZW9fY2FyZF9pbml0aWFsaXplZCh2aWRlbykgKSB7CiAJCXJldCA9IGRvX2R2MTM5NF9pbml0X2RlZmF1bHQodmlkZW8pOwogCQlpZiAocmV0KSB7Ci0JCQl1cCgmdmlkZW8tPnNlbSk7CisJCQltdXRleF91bmxvY2soJnZpZGVvLT5tdHgpOwogCQkJcmV0dXJuIHJldDsKIAkJfQogCQl2aWRlby0+Y29udGludWl0eV9jb3VudGVyID0gLTE7CkBAIC0xNTI2LDcgKzE1MjcsNyBAQAogCiAJcmVtb3ZlX3dhaXRfcXVldWUoJnZpZGVvLT53YWl0cSwgJndhaXQpOwogCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JdXAoJnZpZGVvLT5zZW0pOworCW11dGV4X3VubG9jaygmdmlkZW8tPm10eCk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTU0NywxMiArMTU0OCwxMiBAQAogCiAJLyogc2VyaWFsaXplIHRoaXMgdG8gcHJldmVudCBtdWx0aS10aHJlYWRlZCBtYXloZW0gKi8KIAlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKLQkJaWYgKGRvd25fdHJ5bG9jaygmdmlkZW8tPnNlbSkpIHsKKwkJaWYgKCFtdXRleF90cnlsb2NrKCZ2aWRlby0+bXR4KSkgewogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FQUdBSU47CiAJCX0KIAl9IGVsc2UgewotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+c2VtKSkgeworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2aWRlby0+bXR4KSkgewogCQkJdW5sb2NrX2tlcm5lbCgpOwogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAkJfQpAQCAtMTc3OCw3ICsxNzc5LDcgQEAKIAl9CiAKICBvdXQ6Ci0JdXAoJnZpZGVvLT5zZW0pOworCW11dGV4X3VubG9jaygmdmlkZW8tPm10eCk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0yMjUzLDcgKzIyNTQsNyBAQAogCWNsZWFyX2JpdCgwLCAmdmlkZW8tPm9wZW4pOwogCXNwaW5fbG9ja19pbml0KCZ2aWRlby0+c3BpbmxvY2spOwogCXZpZGVvLT5kbWFfcnVubmluZyA9IDA7Ci0JaW5pdF9NVVRFWCgmdmlkZW8tPnNlbSk7CisJbXV0ZXhfaW5pdCgmdmlkZW8tPm10eCk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmdmlkZW8tPndhaXRxKTsKIAl2aWRlby0+ZmFzeW5jID0gTlVMTDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ldGgxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwppbmRleCAyZDViNTdiLi44YTdiOGZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2V0aDEzOTQuYwpAQCAtNjQsMTkgKzY0LDE5IEBACiAjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2RlbGF5Lmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogI2luY2x1ZGUgPG5ldC9hcnAuaD4KIAorI2luY2x1ZGUgImNvbmZpZ19yb21zLmgiCiAjaW5jbHVkZSAiY3NyMTIxMi5oIgotI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCi0jaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgotI2luY2x1ZGUgImllZWUxMzk0X3RyYW5zYWN0aW9ucy5oIgotI2luY2x1ZGUgImllZWUxMzk0LmgiCisjaW5jbHVkZSAiZXRoMTM5NC5oIgogI2luY2x1ZGUgImhpZ2hsZXZlbC5oIgorI2luY2x1ZGUgImllZWUxMzk0LmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgorI2luY2x1ZGUgImllZWUxMzk0X2hvdHBsdWcuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90cmFuc2FjdGlvbnMuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgogI2luY2x1ZGUgImlzby5oIgogI2luY2x1ZGUgIm5vZGVtZ3IuaCIKLSNpbmNsdWRlICJldGgxMzk0LmgiCi0jaW5jbHVkZSAiY29uZmlnX3JvbXMuaCIKIAogI2RlZmluZSBFVEgxMzk0X1BSSU5UX0cobGV2ZWwsIGZtdCwgYXJncy4uLikgXAogCXByaW50ayhsZXZlbCAiJXM6ICIgZm10LCBkcml2ZXJfbmFtZSwgIyMgYXJncykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmggYi9kcml2ZXJzL2llZWUxMzk0L2hpZ2hsZXZlbC5oCmluZGV4IGUxMTlmYjguLjUwZjJkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaGlnaGxldmVsLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9oaWdobGV2ZWwuaApAQCAtMSw2MCArMSw2MSBAQAotCiAjaWZuZGVmIElFRUUxMzk0X0hJR0hMRVZFTF9ICiAjZGVmaW5lIElFRUUxMzk0X0hJR0hMRVZFTF9ICiAKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCitzdHJ1Y3QgbW9kdWxlOworCisjaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKKworc3RydWN0IGhwc2JfaG9zdDsKKworLyogaW50ZXJuYWwgdG8gaWVlZTEzOTQgY29yZSAqLwogc3RydWN0IGhwc2JfYWRkcmVzc19zZXJ2ZSB7Ci0gICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaG9zdF9saXN0OyAvKiBwZXIgaG9zdCBsaXN0ICovCi0KLSAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBobF9saXN0OyAvKiBocHNiX2hpZ2hsZXZlbCBsaXN0ICovCi0KLSAgICAgICAgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgKm9wOwotCisJc3RydWN0IGxpc3RfaGVhZCBob3N0X2xpc3Q7CS8qIHBlciBob3N0IGxpc3QgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGhsX2xpc3Q7CS8qIGhwc2JfaGlnaGxldmVsIGxpc3QgKi8KKwlzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyAqb3A7CiAJc3RydWN0IGhwc2JfaG9zdCAqaG9zdDsKLQotICAgICAgICAvKiBmaXJzdCBhZGRyZXNzIGhhbmRsZWQgYW5kIGZpcnN0IGFkZHJlc3MgYmVoaW5kLCBxdWFkbGV0IGFsaWduZWQgKi8KLSAgICAgICAgdTY0IHN0YXJ0LCBlbmQ7CisJdTY0IHN0YXJ0OwkvKiBmaXJzdCBhZGRyZXNzIGhhbmRsZWQsIHF1YWRsZXQgYWxpZ25lZCAqLworCXU2NCBlbmQ7CS8qIGZpcnN0IGFkZHJlc3MgYmVoaW5kLCBxdWFkbGV0IGFsaWduZWQgKi8KIH07CiAKLQotLyoKLSAqIFRoZSBhYm92ZSBzdHJ1Y3RzIGFyZSBpbnRlcm5hbCB0byBoaWdobGV2ZWwgZHJpdmVyIGhhbmRsaW5nLiAgT25seSB0aGUKLSAqIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSBvZiBpbnRlcmVzdCB0byBhY3R1YWwgaGlnaGxldmVsIGRyaXZlcnMuCi0gKi8KKy8qIE9ubHkgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmVzIGFyZSBvZiBpbnRlcmVzdCB0byBhY3R1YWwgaGlnaGxldmVsIGRyaXZlcnMuICovCiAKIHN0cnVjdCBocHNiX2hpZ2hsZXZlbCB7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJY29uc3QgY2hhciAqbmFtZTsKIAotICAgICAgICAvKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBwb2ludGVycyBjYW4gbGVnYWxseSBiZSBOVUxMLCBleGNlcHQgZm9yCi0gICAgICAgICAqIGlzb19yZWNlaXZlIHdoaWNoIGNhbiBvbmx5IGJlIE5VTEwgd2hlbiB5b3UgZG9uJ3QgcmVxdWVzdAotICAgICAgICAgKiBjaGFubmVscy4gKi8KKwkvKiBBbnkgb2YgdGhlIGZvbGxvd2luZyBwb2ludGVycyBjYW4gbGVnYWxseSBiZSBOVUxMLCBleGNlcHQgZm9yCisJICogaXNvX3JlY2VpdmUgd2hpY2ggY2FuIG9ubHkgYmUgTlVMTCB3aGVuIHlvdSBkb24ndCByZXF1ZXN0CisJICogY2hhbm5lbHMuICovCiAKLSAgICAgICAgLyogTmV3IGhvc3QgaW5pdGlhbGl6ZWQuICBXaWxsIGFsc28gYmUgY2FsbGVkIGR1cmluZwotICAgICAgICAgKiBocHNiX3JlZ2lzdGVyX2hpZ2hsZXZlbCBmb3IgYWxsIGhvc3RzIGFscmVhZHkgaW5zdGFsbGVkLiAqLwotICAgICAgICB2b2lkICgqYWRkX2hvc3QpIChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KTsKKwkvKiBOZXcgaG9zdCBpbml0aWFsaXplZC4gIFdpbGwgYWxzbyBiZSBjYWxsZWQgZHVyaW5nCisJICogaHBzYl9yZWdpc3Rlcl9oaWdobGV2ZWwgZm9yIGFsbCBob3N0cyBhbHJlYWR5IGluc3RhbGxlZC4gKi8KKwl2b2lkICgqYWRkX2hvc3QpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwogCi0gICAgICAgIC8qIEhvc3QgYWJvdXQgdG8gYmUgcmVtb3ZlZC4gIFdpbGwgYWxzbyBiZSBjYWxsZWQgZHVyaW5nCi0gICAgICAgICAqIGhwc2JfdW5yZWdpc3Rlcl9oaWdobGV2ZWwgb25jZSBmb3IgZWFjaCBob3N0LiAqLwotICAgICAgICB2b2lkICgqcmVtb3ZlX2hvc3QpIChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KTsKKwkvKiBIb3N0IGFib3V0IHRvIGJlIHJlbW92ZWQuICBXaWxsIGFsc28gYmUgY2FsbGVkIGR1cmluZworCSAqIGhwc2JfdW5yZWdpc3Rlcl9oaWdobGV2ZWwgb25jZSBmb3IgZWFjaCBob3N0LiAqLworCXZvaWQgKCpyZW1vdmVfaG9zdCkoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CiAKLSAgICAgICAgLyogSG9zdCBleHBlcmllbmNlZCBidXMgcmVzZXQgd2l0aCBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuCisJLyogSG9zdCBleHBlcmllbmNlZCBidXMgcmVzZXQgd2l0aCBwb3NzaWJsZSBjb25maWd1cmF0aW9uIGNoYW5nZXMuCiAJICogTm90ZSB0aGF0IHRoaXMgb25lIG1heSBvY2N1ciBkdXJpbmcgaW50ZXJydXB0L2JvdHRvbSBoYWxmIGhhbmRsaW5nLgogCSAqIFlvdSBjYW4gbm90IGV4cGVjdCB0byBiZSBhYmxlIHRvIGRvIHN0b2NrIGhwc2JfcmVhZHMuICovCi0gICAgICAgIHZvaWQgKCpob3N0X3Jlc2V0KSAoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CisJdm9pZCAoKmhvc3RfcmVzZXQpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwogCi0gICAgICAgIC8qIEFuIGlzb2Nocm9ub3VzIHBhY2tldCB3YXMgcmVjZWl2ZWQuICBDaGFubmVsIGNvbnRhaW5zIHRoZSBjaGFubmVsCi0gICAgICAgICAqIG51bWJlciBmb3IgeW91ciBjb252ZW5pZW5jZSwgaXQgaXMgYWxzbyBjb250YWluZWQgaW4gdGhlIGluY2x1ZGVkCi0gICAgICAgICAqIHBhY2tldCBoZWFkZXIgKGZpcnN0IHF1YWRsZXQsIENSQ3MgYXJlIG1pc3NpbmcpLiAgWW91IG1heSBnZXQgY2FsbGVkCi0gICAgICAgICAqIGZvciBjaGFubmVsL2hvc3QgY29tYmluYXRpb25zIHlvdSBkaWQgbm90IHJlcXVlc3QuICovCi0gICAgICAgIHZvaWQgKCppc29fcmVjZWl2ZSkgKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBjaGFubmVsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWFkbGV0X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOworCS8qIEFuIGlzb2Nocm9ub3VzIHBhY2tldCB3YXMgcmVjZWl2ZWQuICBDaGFubmVsIGNvbnRhaW5zIHRoZSBjaGFubmVsCisJICogbnVtYmVyIGZvciB5b3VyIGNvbnZlbmllbmNlLCBpdCBpcyBhbHNvIGNvbnRhaW5lZCBpbiB0aGUgaW5jbHVkZWQKKwkgKiBwYWNrZXQgaGVhZGVyIChmaXJzdCBxdWFkbGV0LCBDUkNzIGFyZSBtaXNzaW5nKS4gIFlvdSBtYXkgZ2V0IGNhbGxlZAorCSAqIGZvciBjaGFubmVsL2hvc3QgY29tYmluYXRpb25zIHlvdSBkaWQgbm90IHJlcXVlc3QuICovCisJdm9pZCAoKmlzb19yZWNlaXZlKShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgY2hhbm5lbCwKKwkJCSAgICBxdWFkbGV0X3QgKmRhdGEsIHNpemVfdCBsZW5ndGgpOwogCi0gICAgICAgIC8qIEEgd3JpdGUgcmVxdWVzdCB3YXMgcmVjZWl2ZWQgb24gZWl0aGVyIHRoZSBGQ1BfQ09NTUFORCAoZGlyZWN0aW9uID0KLSAgICAgICAgICogMCkgb3IgdGhlIEZDUF9SRVNQT05TRSAoZGlyZWN0aW9uID0gMSkgcmVnaXN0ZXIuICBUaGUgY3RzIGFyZwotICAgICAgICAgKiBjb250YWlucyB0aGUgY3RzIGZpZWxkIChmaXJzdCBieXRlIG9mIGRhdGEpLiAqLwotICAgICAgICB2b2lkICgqZmNwX3JlcXVlc3QpIChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBpbnQgZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3RzLCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CisJLyogQSB3cml0ZSByZXF1ZXN0IHdhcyByZWNlaXZlZCBvbiBlaXRoZXIgdGhlIEZDUF9DT01NQU5EIChkaXJlY3Rpb24gPQorCSAqIDApIG9yIHRoZSBGQ1BfUkVTUE9OU0UgKGRpcmVjdGlvbiA9IDEpIHJlZ2lzdGVyLiAgVGhlIGN0cyBhcmcKKwkgKiBjb250YWlucyB0aGUgY3RzIGZpZWxkIChmaXJzdCBieXRlIG9mIGRhdGEpLiAqLworCXZvaWQgKCpmY3BfcmVxdWVzdCkoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgaW50IGRpcmVjdGlvbiwKKwkJCSAgICBpbnQgY3RzLCB1OCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiAKIAkvKiBUaGVzZSBhcmUgaW5pdGlhbGl6ZWQgYnkgdGhlIHN1YnN5c3RlbSB3aGVuIHRoZQogCSAqIGhwc2JfaGlnbGV2ZWwgaXMgcmVnaXN0ZXJlZC4gKi8KQEAgLTY3LDYxICs2OCw2MiBAQAogfTsKIAogc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgewotICAgICAgICAvKgotICAgICAgICAgKiBOdWxsIGZ1bmN0aW9uIHBvaW50ZXJzIHdpbGwgbWFrZSB0aGUgcmVzcGVjdGl2ZSBvcGVyYXRpb24gY29tcGxldGUKLSAgICAgICAgICogd2l0aCBSQ09ERV9UWVBFX0VSUk9SLiAgTWFrZXMgZm9yIGVhc3kgdG8gaW1wbGVtZW50IHJlYWQtb25seQotICAgICAgICAgKiByZWdpc3RlcnMgKGp1c3QgbGVhdmUgZXZlcnl0aGluZyBidXQgcmVhZCBOVUxMKS4KLSAgICAgICAgICoKLSAgICAgICAgICogQWxsIGZ1bmN0aW9ucyBzaGFsbCByZXR1cm4gYXBwcm9wcmlhdGUgSUVFRSAxMzk0IHJjb2Rlcy4KLSAgICAgICAgICovCisJLyoKKwkgKiBOdWxsIGZ1bmN0aW9uIHBvaW50ZXJzIHdpbGwgbWFrZSB0aGUgcmVzcGVjdGl2ZSBvcGVyYXRpb24gY29tcGxldGUKKwkgKiB3aXRoIFJDT0RFX1RZUEVfRVJST1IuICBNYWtlcyBmb3IgZWFzeSB0byBpbXBsZW1lbnQgcmVhZC1vbmx5CisJICogcmVnaXN0ZXJzIChqdXN0IGxlYXZlIGV2ZXJ5dGhpbmcgYnV0IHJlYWQgTlVMTCkuCisJICoKKwkgKiBBbGwgZnVuY3Rpb25zIHNoYWxsIHJldHVybiBhcHByb3ByaWF0ZSBJRUVFIDEzOTQgcmNvZGVzLgorCSAqLwogCi0gICAgICAgIC8qIFRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRvIGltcGxlbWVudCBibG9jayByZWFkcyBmb3IgdGhlbXNlbHZlcy4gKi8KLSAgICAgICAgLyogVGhlc2UgZnVuY3Rpb25zIGVpdGhlciByZXR1cm4gYSByZXNwb25zZSBjb2RlCi0gICAgICAgICAgIG9yIGEgbmVnYXRpdmUgbnVtYmVyLiBJbiB0aGUgZmlyc3QgY2FzZSBhIHJlc3BvbnNlIHdpbGwgYmUgZ2VuZXJhdGVkOyBpbiB0aGUKLSAgICAgICAgICAgbGF0ZXIgY2FzZSwgbm8gcmVzcG9uc2Ugd2lsbCBiZSBzZW50IGFuZCB0aGUgZHJpdmVyLCB0aGF0IGhhbmRsZWQgdGhlIHJlcXVlc3QKLSAgICAgICAgICAgd2lsbCBzZW5kIHRoZSByZXNwb25zZSBpdHNlbGYKLSAgICAgICAgKi8KLSAgICAgICAgaW50ICgqcmVhZCkgKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgdTY0IGFkZHIsIHNpemVfdCBsZW5ndGgsIHUxNiBmbGFncyk7Ci0gICAgICAgIGludCAoKndyaXRlKSAoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgaW50IGRlc3RpZCwKLQkJICAgICAgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCwgdTE2IGZsYWdzKTsKKwkvKiBUaGVzZSBmdW5jdGlvbnMgaGF2ZSB0byBpbXBsZW1lbnQgYmxvY2sgcmVhZHMgZm9yIHRoZW1zZWx2ZXMuCisJICoKKwkgKiBUaGVzZSBmdW5jdGlvbnMgZWl0aGVyIHJldHVybiBhIHJlc3BvbnNlIGNvZGUgb3IgYSBuZWdhdGl2ZSBudW1iZXIuCisJICogSW4gdGhlIGZpcnN0IGNhc2UgYSByZXNwb25zZSB3aWxsIGJlIGdlbmVyYXRlZC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwKKwkgKiBubyByZXNwb25zZSB3aWxsIGJlIHNlbnQgYW5kIHRoZSBkcml2ZXIgd2hpY2ggaGFuZGxlZCB0aGUgcmVxdWVzdAorCSAqIHdpbGwgc2VuZCB0aGUgcmVzcG9uc2UgaXRzZWxmLiAqLworCWludCAoKnJlYWQpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqYnVmZmVyLAorCQkgICAgdTY0IGFkZHIsIHNpemVfdCBsZW5ndGgsIHUxNiBmbGFncyk7CisJaW50ICgqd3JpdGUpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIGludCBkZXN0aWQsCisJCSAgICAgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCwgdTE2IGZsYWdzKTsKIAotICAgICAgICAvKiBMb2NrIHRyYW5zYWN0aW9uczogd3JpdGUgcmVzdWx0cyBvZiBleHRfdGNvZGUgb3BlcmF0aW9uIGludG8KLSAgICAgICAgICogKnN0b3JlLiAqLwotICAgICAgICBpbnQgKCpsb2NrKSAoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgcXVhZGxldF90ICpzdG9yZSwKLSAgICAgICAgICAgICAgICAgICAgIHU2NCBhZGRyLCBxdWFkbGV0X3QgZGF0YSwgcXVhZGxldF90IGFyZywgaW50IGV4dF90Y29kZSwgdTE2IGZsYWdzKTsKLSAgICAgICAgaW50ICgqbG9jazY0KSAoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgb2N0bGV0X3QgKnN0b3JlLAotICAgICAgICAgICAgICAgICAgICAgICB1NjQgYWRkciwgb2N0bGV0X3QgZGF0YSwgb2N0bGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLCB1MTYgZmxhZ3MpOworCS8qIExvY2sgdHJhbnNhY3Rpb25zOiB3cml0ZSByZXN1bHRzIG9mIGV4dF90Y29kZSBvcGVyYXRpb24gaW50bworCSAqICpzdG9yZS4gKi8KKwlpbnQgKCpsb2NrKShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBxdWFkbGV0X3QgKnN0b3JlLAorCQkgICAgdTY0IGFkZHIsIHF1YWRsZXRfdCBkYXRhLCBxdWFkbGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLAorCQkgICAgdTE2IGZsYWdzKTsKKwlpbnQgKCpsb2NrNjQpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIG9jdGxldF90ICpzdG9yZSwKKwkJICAgICAgdTY0IGFkZHIsIG9jdGxldF90IGRhdGEsIG9jdGxldF90IGFyZywgaW50IGV4dF90Y29kZSwKKwkJICAgICAgdTE2IGZsYWdzKTsKIH07CiAKLQogdm9pZCBoaWdobGV2ZWxfYWRkX2hvc3Qoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CiB2b2lkIGhpZ2hsZXZlbF9yZW1vdmVfaG9zdChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0KTsKIHZvaWQgaGlnaGxldmVsX2hvc3RfcmVzZXQoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CiAKLQotLyogdGhlc2UgZnVuY3Rpb25zIGFyZSBjYWxsZWQgdG8gaGFuZGxlIHRyYW5zYWN0aW9ucy4gVGhleSBhcmUgY2FsbGVkLCB3aGVuCi0gICBhIHBhY2tldCBhcnJpdmVzLiBUaGUgZmxhZ3MgYXJndW1lbnQgY29udGFpbnMgdGhlIHNlY29uZCB3b3JkIG9mIHRoZSBmaXJzdCBoZWFkZXIKLSAgIHF1YWRsZXQgb2YgdGhlIGluY29taW5nIHBhY2tldCAoY29udGFpbmluZyB0cmFuc2FjdGlvbiBsYWJlbCwgcmV0cnkgY29kZSwKLSAgIHRyYW5zYWN0aW9uIGNvZGUgYW5kIHByaW9yaXR5KS4gVGhlc2UgZnVuY3Rpb25zIGVpdGhlciByZXR1cm4gYSByZXNwb25zZSBjb2RlCi0gICBvciBhIG5lZ2F0aXZlIG51bWJlci4gSW4gdGhlIGZpcnN0IGNhc2UgYSByZXNwb25zZSB3aWxsIGJlIGdlbmVyYXRlZDsgaW4gdGhlCi0gICBsYXRlciBjYXNlLCBubyByZXNwb25zZSB3aWxsIGJlIHNlbnQgYW5kIHRoZSBkcml2ZXIsIHRoYXQgaGFuZGxlZCB0aGUgcmVxdWVzdAotICAgd2lsbCBzZW5kIHRoZSByZXNwb25zZSBpdHNlbGYuCi0qLwotaW50IGhpZ2hsZXZlbF9yZWFkKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHZvaWQgKmRhdGEsCi0gICAgICAgICAgICAgICAgICAgdTY0IGFkZHIsIHVuc2lnbmVkIGludCBsZW5ndGgsIHUxNiBmbGFncyk7Ci1pbnQgaGlnaGxldmVsX3dyaXRlKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIGludCBkZXN0aWQsCi0JCSAgICB2b2lkICpkYXRhLCB1NjQgYWRkciwgdW5zaWduZWQgaW50IGxlbmd0aCwgdTE2IGZsYWdzKTsKKy8qCisgKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxlZCB0byBoYW5kbGUgdHJhbnNhY3Rpb25zLiBUaGV5IGFyZSBjYWxsZWQgd2hlbiBhCisgKiBwYWNrZXQgYXJyaXZlcy4gIFRoZSBmbGFncyBhcmd1bWVudCBjb250YWlucyB0aGUgc2Vjb25kIHdvcmQgb2YgdGhlIGZpcnN0CisgKiBoZWFkZXIgcXVhZGxldCBvZiB0aGUgaW5jb21pbmcgcGFja2V0IChjb250YWluaW5nIHRyYW5zYWN0aW9uIGxhYmVsLCByZXRyeQorICogY29kZSwgdHJhbnNhY3Rpb24gY29kZSBhbmQgcHJpb3JpdHkpLiAgVGhlc2UgZnVuY3Rpb25zIGVpdGhlciByZXR1cm4gYQorICogcmVzcG9uc2UgY29kZSBvciBhIG5lZ2F0aXZlIG51bWJlci4gIEluIHRoZSBmaXJzdCBjYXNlIGEgcmVzcG9uc2Ugd2lsbCBiZQorICogZ2VuZXJhdGVkLiAgSW4gdGhlIGxhdHRlciBjYXNlLCBubyByZXNwb25zZSB3aWxsIGJlIHNlbnQgYW5kIHRoZSBkcml2ZXIgd2hpY2gKKyAqIGhhbmRsZWQgdGhlIHJlcXVlc3Qgd2lsbCBzZW5kIHRoZSByZXNwb25zZSBpdHNlbGYuCisgKi8KK2ludCBoaWdobGV2ZWxfcmVhZChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCB2b2lkICpkYXRhLCB1NjQgYWRkciwKKwkJICAgdW5zaWduZWQgaW50IGxlbmd0aCwgdTE2IGZsYWdzKTsKK2ludCBoaWdobGV2ZWxfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgaW50IGRlc3RpZCwgdm9pZCAqZGF0YSwKKwkJICAgIHU2NCBhZGRyLCB1bnNpZ25lZCBpbnQgbGVuZ3RoLCB1MTYgZmxhZ3MpOwogaW50IGhpZ2hsZXZlbF9sb2NrKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGludCBub2RlaWQsIHF1YWRsZXRfdCAqc3RvcmUsCi0gICAgICAgICAgICAgICAgICAgdTY0IGFkZHIsIHF1YWRsZXRfdCBkYXRhLCBxdWFkbGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLCB1MTYgZmxhZ3MpOworCQkgICB1NjQgYWRkciwgcXVhZGxldF90IGRhdGEsIHF1YWRsZXRfdCBhcmcsIGludCBleHRfdGNvZGUsCisJCSAgIHUxNiBmbGFncyk7CiBpbnQgaGlnaGxldmVsX2xvY2s2NChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBvY3RsZXRfdCAqc3RvcmUsCi0gICAgICAgICAgICAgICAgICAgICB1NjQgYWRkciwgb2N0bGV0X3QgZGF0YSwgb2N0bGV0X3QgYXJnLCBpbnQgZXh0X3Rjb2RlLCB1MTYgZmxhZ3MpOworCQkgICAgIHU2NCBhZGRyLCBvY3RsZXRfdCBkYXRhLCBvY3RsZXRfdCBhcmcsIGludCBleHRfdGNvZGUsCisJCSAgICAgdTE2IGZsYWdzKTsKIAotdm9pZCBoaWdobGV2ZWxfaXNvX3JlY2VpdmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgdm9pZCAqZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW5ndGgpOwordm9pZCBoaWdobGV2ZWxfaXNvX3JlY2VpdmUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7CiB2b2lkIGhpZ2hsZXZlbF9mY3BfcmVxdWVzdChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBpbnQgbm9kZWlkLCBpbnQgZGlyZWN0aW9uLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbmd0aCk7Ci0KKwkJCSAgIHZvaWQgKmRhdGEsIHNpemVfdCBsZW5ndGgpOwogCiAvKgogICogUmVnaXN0ZXIgaGlnaGxldmVsIGRyaXZlci4gIFRoZSBuYW1lIHBvaW50ZXIgaGFzIHRvIHN0YXkgdmFsaWQgYXQgYWxsIHRpbWVzCkBAIC0xMzIsMTMgKzEzNCwxNSBAQAogCiAvKgogICogUmVnaXN0ZXIgaGFuZGxlcnMgZm9yIGhvc3QgYWRkcmVzcyBzcGFjZXMuICBTdGFydCBhbmQgZW5kIGFyZSA0OCBiaXQgcG9pbnRlcnMKLSAqIGFuZCBoYXZlIHRvIGJlIHF1YWRsZXQgYWxpZ25lZCAoZW5kIHBvaW50cyB0byB0aGUgZmlyc3QgYWRkcmVzcyBiZWhpbmQgdGhlCi0gKiBoYW5kbGVkIGFkZHJlc3Nlcy4gIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBmb3IgYSBzaW5nbGUKLSAqIGhwc2JfaGlnaGxldmVsIHRvIGltcGxlbWVudCBzcGFyc2UgcmVnaXN0ZXIgc2V0cy4gIFRoZSByZXF1ZXN0ZWQgcmVnaW9uIG11c3QKLSAqIG5vdCBvdmVybGFwIGFueSBwcmV2aW91c2x5IGFsbG9jYXRlZCByZWdpb24sIG90aGVyd2lzZSByZWdpc3RlcmluZyB3aWxsIGZhaWwuCisgKiBhbmQgaGF2ZSB0byBiZSBxdWFkbGV0IGFsaWduZWQuICBBcmd1bWVudCAiZW5kIiBwb2ludHMgdG8gdGhlIGZpcnN0IGFkZHJlc3MKKyAqIGJlaGluZCB0aGUgaGFuZGxlZCBhZGRyZXNzZXMuICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgZm9yCisgKiBhIHNpbmdsZSBocHNiX2hpZ2hsZXZlbCB0byBpbXBsZW1lbnQgc3BhcnNlIHJlZ2lzdGVyIHNldHMuICBUaGUgcmVxdWVzdGVkCisgKiByZWdpb24gbXVzdCBub3Qgb3ZlcmxhcCBhbnkgcHJldmlvdXNseSBhbGxvY2F0ZWQgcmVnaW9uLCBvdGhlcndpc2UKKyAqIHJlZ2lzdGVyaW5nIHdpbGwgZmFpbC4KICAqCi0gKiBJdCByZXR1cm5zIHRydWUgZm9yIHN1Y2Nlc3NmdWwgYWxsb2NhdGlvbi4gIFRoZXJlIGlzIG5vIHVucmVnaXN0ZXIgZnVuY3Rpb24sCi0gKiBhbGwgYWRkcmVzcyBzcGFjZXMgYXJlIGRlYWxsb2NhdGVkIHRvZ2V0aGVyIHdpdGggdGhlIGhwc2JfaGlnaGxldmVsLgorICogSXQgcmV0dXJucyB0cnVlIGZvciBzdWNjZXNzZnVsIGFsbG9jYXRpb24uICBBZGRyZXNzIHNwYWNlcyBjYW4gYmUKKyAqIHVucmVnaXN0ZXJlZCB3aXRoIGhwc2JfdW5yZWdpc3Rlcl9hZGRyc3BhY2UuICBBbGwgcmVtYWluaW5nIGFkZHJlc3Mgc3BhY2VzCisgKiBhcmUgYXV0b21hdGljYWxseSBkZWFsbG9jYXRlZCB0b2dldGhlciB3aXRoIHRoZSBocHNiX2hpZ2hsZXZlbC4KICAqLwogdTY0IGhwc2JfYWxsb2NhdGVfYW5kX3JlZ2lzdGVyX2FkZHJzcGFjZShzdHJ1Y3QgaHBzYl9oaWdobGV2ZWwgKmhsLAogCQkJCQkgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKQEAgLTE0NiwyMCArMTUwLDE4IEBACiAJCQkJCSB1NjQgc2l6ZSwgdTY0IGFsaWdubWVudCwKIAkJCQkJIHU2NCBzdGFydCwgdTY0IGVuZCk7CiBpbnQgaHBzYl9yZWdpc3Rlcl9hZGRyc3BhY2Uoc3RydWN0IGhwc2JfaGlnaGxldmVsICpobCwgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaHBzYl9hZGRyZXNzX29wcyAqb3BzLCB1NjQgc3RhcnQsIHU2NCBlbmQpOwotCisJCQkgICAgc3RydWN0IGhwc2JfYWRkcmVzc19vcHMgKm9wcywgdTY0IHN0YXJ0LCB1NjQgZW5kKTsKIGludCBocHNiX3VucmVnaXN0ZXJfYWRkcnNwYWNlKHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQgc3RhcnQpOworCQkJICAgICAgdTY0IHN0YXJ0KTsKIAogLyoKICAqIEVuYWJsZSBvciBkaXNhYmxlIHJlY2V2aW5nIGEgY2VydGFpbiBpc29jaHJvbm91cyBjaGFubmVsIHRocm91Z2ggdGhlCiAgKiBpc29fcmVjZWl2ZSBvcC4KICAqLwogaW50IGhwc2JfbGlzdGVuX2NoYW5uZWwoc3RydWN0IGhwc2JfaGlnaGxldmVsICpobCwgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY2hhbm5lbCk7CisJCQkgdW5zaWduZWQgaW50IGNoYW5uZWwpOwogdm9pZCBocHNiX3VubGlzdGVuX2NoYW5uZWwoc3RydWN0IGhwc2JfaGlnaGxldmVsICpobCwgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjaGFubmVsKTsKLQorCQkJICAgdW5zaWduZWQgaW50IGNoYW5uZWwpOwogCiAvKiBSZXRyaWV2ZSBhIGhvc3RpbmZvIHBvaW50ZXIgYm91bmQgdG8gdGhpcyBkcml2ZXIvaG9zdCAqLwogdm9pZCAqaHBzYl9nZXRfaG9zdGluZm8oc3RydWN0IGhwc2JfaGlnaGxldmVsICpobCwgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CkBAIC0xNzIsMTkgKzE3NCwyNCBAQAogdm9pZCBocHNiX2Rlc3Ryb3lfaG9zdGluZm8oc3RydWN0IGhwc2JfaGlnaGxldmVsICpobCwgc3RydWN0IGhwc2JfaG9zdCAqaG9zdCk7CiAKIC8qIFNldCBhbiBhbHRlcm5hdGUgbG9va3VwIGtleSBmb3IgdGhlIGhvc3RpbmZvIGJvdW5kIHRvIHRoaXMgZHJpdmVyL2hvc3QgKi8KLXZvaWQgaHBzYl9zZXRfaG9zdGluZm9fa2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIHVuc2lnbmVkIGxvbmcga2V5KTsKK3ZvaWQgaHBzYl9zZXRfaG9zdGluZm9fa2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCisJCQkgICB1bnNpZ25lZCBsb25nIGtleSk7CiAKLS8qIFJldHJpZXZlIHRoZSBhbHRlcm5hdGUgbG9va3VwIGtleSBmb3IgdGhlIGhvc3RpbmZvIGJvdW5kIHRvIHRoaXMgZHJpdmVyL2hvc3QgKi8KLXVuc2lnbmVkIGxvbmcgaHBzYl9nZXRfaG9zdGluZm9fa2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOworLyogUmV0cmlldmUgdGhlIGFsdGVybmF0ZSBsb29rdXAga2V5IGZvciB0aGUgaG9zdGluZm8gYm91bmQgdG8gdGhpcworICogZHJpdmVyL2hvc3QgKi8KK3Vuc2lnbmVkIGxvbmcgaHBzYl9nZXRfaG9zdGluZm9fa2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsCisJCQkJICAgIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwogCiAvKiBSZXRyaWV2ZSBhIGhvc3RpbmZvIHBvaW50ZXIgYm91bmQgdG8gdGhpcyBkcml2ZXIgdXNpbmcgaXRzIGFsdGVybmF0ZSBrZXkgKi8KIHZvaWQgKmhwc2JfZ2V0X2hvc3RpbmZvX2J5a2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHVuc2lnbmVkIGxvbmcga2V5KTsKIAogLyogU2V0IHRoZSBob3N0aW5mbyBwb2ludGVyIHRvIHNvbWV0aGluZyB1c2VmdWwuIFVzdWFsbHkgZm9sbG93cyBhIGNhbGwgdG8KICAqIGhwc2JfY3JlYXRlX2hvc3RpbmZvLCB3aGVyZSB0aGUgc2l6ZSBpcyAwLiAqLwotaW50IGhwc2Jfc2V0X2hvc3RpbmZvKHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIHZvaWQgKmRhdGEpOworaW50IGhwc2Jfc2V0X2hvc3RpbmZvKHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsIHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCisJCSAgICAgIHZvaWQgKmRhdGEpOwogCiAvKiBSZXRyaWV2ZSBocHNiX2hvc3QgdXNpbmcgYSBoaWdobGV2ZWwgaGFuZGxlIGFuZCBhIGtleSAqLwotc3RydWN0IGhwc2JfaG9zdCAqaHBzYl9nZXRfaG9zdF9ieWtleShzdHJ1Y3QgaHBzYl9oaWdobGV2ZWwgKmhsLCB1bnNpZ25lZCBsb25nIGtleSk7CitzdHJ1Y3QgaHBzYl9ob3N0ICpocHNiX2dldF9ob3N0X2J5a2V5KHN0cnVjdCBocHNiX2hpZ2hsZXZlbCAqaGwsCisJCQkJICAgICAgdW5zaWduZWQgbG9uZyBrZXkpOwogCiAjZW5kaWYgLyogSUVFRTEzOTRfSElHSExFVkVMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuYwppbmRleCA0ZmVlYWQ0Li5kOTBhM2ExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5jCkBAIC05MCw2ICs5MCwxNiBAQAogCXJldHVybiAwOwogfQogCisvKgorICogVGhlIHBlbmRpbmdfcGFja2V0X3F1ZXVlIGlzIHNwZWNpYWwgaW4gdGhhdCBpdCdzIHByb2Nlc3NlZAorICogZnJvbSBoYXJkaXJxIGNvbnRleHQgdG9vIChzdWNoIGFzIGhwc2JfYnVzX3Jlc2V0KCkpLiBIZW5jZQorICogc3BsaXQgdGhlIGxvY2sgY2xhc3MgZnJvbSB0aGUgdXN1YWwgbmV0d29ya2luZyBza2ItaGVhZAorICogbG9jayBjbGFzcyBieSB1c2luZyBhIHNlcGFyYXRlIGtleSBmb3IgaXQ6CisgKi8KK3N0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgcGVuZGluZ19wYWNrZXRfcXVldWVfa2V5OworCitzdGF0aWMgREVGSU5FX01VVEVYKGhvc3RfbnVtX2FsbG9jKTsKKwogLyoqCiAgKiBocHNiX2FsbG9jX2hvc3QgLSBhbGxvY2F0ZSBhIG5ldyBob3N0IGNvbnRyb2xsZXIuCiAgKiBAZHJ2OiB0aGUgZHJpdmVyIHRoYXQgd2lsbCBtYW5hZ2UgdGhlIGhvc3QgY29udHJvbGxlcgpAQCAtMTA1LDE2ICsxMTUsNiBAQAogICogUmV0dXJuIFZhbHVlOiBhIHBvaW50ZXIgdG8gdGhlICZocHNiX2hvc3QgaWYgc3VjY2Vzc2Z1bCwgJU5VTEwgaWYKICAqIG5vIG1lbW9yeSB3YXMgYXZhaWxhYmxlLgogICovCi1zdGF0aWMgREVGSU5FX01VVEVYKGhvc3RfbnVtX2FsbG9jKTsKLQotLyoKLSAqIFRoZSBwZW5kaW5nX3BhY2tldF9xdWV1ZSBpcyBzcGVjaWFsIGluIHRoYXQgaXQncyBwcm9jZXNzZWQKLSAqIGZyb20gaGFyZGlycSBjb250ZXh0IHRvbyAoc3VjaCBhcyBocHNiX2J1c19yZXNldCgpKS4gSGVuY2UKLSAqIHNwbGl0IHRoZSBsb2NrIGNsYXNzIGZyb20gdGhlIHVzdWFsIG5ldHdvcmtpbmcgc2tiLWhlYWQKLSAqIGxvY2sgY2xhc3MgYnkgdXNpbmcgYSBzZXBhcmF0ZSBrZXkgZm9yIGl0OgotICovCi1zdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IHBlbmRpbmdfcGFja2V0X3F1ZXVlX2tleTsKLQogc3RydWN0IGhwc2JfaG9zdCAqaHBzYl9hbGxvY19ob3N0KHN0cnVjdCBocHNiX2hvc3RfZHJpdmVyICpkcnYsIHNpemVfdCBleHRyYSwKIAkJCQkgIHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTE0Myw5ICsxNDMsNiBAQAogCWZvciAoaSA9IDI7IGkgPCAxNjsgaSsrKQogCQloLT5jc3IuZ2VuX3RpbWVzdGFtcFtpXSA9IGppZmZpZXMgLSA2MCAqIEhaOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaC0+dHBvb2wpOyBpKyspCi0JCUhQU0JfVFBPT0xfSU5JVCgmaC0+dHBvb2xbaV0pOwotCiAJYXRvbWljX3NldCgmaC0+Z2VuZXJhdGlvbiwgMCk7CiAKIAlJTklUX1dPUksoJmgtPmRlbGF5ZWRfcmVzZXQsIGRlbGF5ZWRfcmVzZXRfYnVzLCBoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaG9zdHMuaAppbmRleCA5YWQ0YjI0Li5iYzZkYmZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2hvc3RzLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ob3N0cy5oCkBAIC0yLDE3ICsyLDE5IEBACiAjZGVmaW5lIF9JRUVFMTM5NF9IT1NUU19ICiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KLSNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAotI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KK3N0cnVjdCBwY2lfZGV2Oworc3RydWN0IG1vZHVsZTsKIAogI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCiAjaW5jbHVkZSAiY3NyLmgiCiAKLQogc3RydWN0IGhwc2JfcGFja2V0Owogc3RydWN0IGhwc2JfaXNvOwogCkBAIC0zMyw3ICszNSw2IEBACiAJaW50IG5vZGVfY291bnQ7ICAgICAgLyogbnVtYmVyIG9mIGlkZW50aWZpZWQgbm9kZXMgb24gdGhpcyBidXMgKi8KIAlpbnQgc2VsZmlkX2NvdW50OyAgICAvKiB0b3RhbCBudW1iZXIgb2YgU2VsZklEcyByZWNlaXZlZCAqLwogCWludCBub2Rlc19hY3RpdmU7ICAgIC8qIG51bWJlciBvZiBub2RlcyB3aXRoIGFjdGl2ZSBsaW5rIGxheWVyICovCi0JdTggc3BlZWRbQUxMX05PREVTXTsgLyogc3BlZWQgYmV0d2VlbiBlYWNoIG5vZGUgYW5kIGxvY2FsIG5vZGUgKi8KIAogCW5vZGVpZF90IG5vZGVfaWQ7ICAgIC8qIG5vZGUgSUQgb2YgdGhpcyBob3N0ICovCiAJbm9kZWlkX3QgaXJtX2lkOyAgICAgLyogSUQgb2YgdGhpcyBidXMnIGlzb2Nocm9ub3VzIHJlc291cmNlIG1hbmFnZXIgKi8KQEAgLTUzLDMyICs1NCwzMCBAQAogCWludCByZXNldF9yZXRyaWVzOwogCXF1YWRsZXRfdCAqdG9wb2xvZ3lfbWFwOwogCXU4ICpzcGVlZF9tYXA7Ci0Jc3RydWN0IGNzcl9jb250cm9sIGNzcjsKLQotCS8qIFBlciBub2RlIHRsYWJlbCBwb29sIGFsbG9jYXRpb24gKi8KLQlzdHJ1Y3QgaHBzYl90bGFiZWxfcG9vbCB0cG9vbFtBTExfTk9ERVNdOwotCi0Jc3RydWN0IGhwc2JfaG9zdF9kcml2ZXIgKmRyaXZlcjsKLQotCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCiAJaW50IGlkOwotCisJc3RydWN0IGhwc2JfaG9zdF9kcml2ZXIgKmRyaXZlcjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsKIAogCWludCB1cGRhdGVfY29uZmlnX3JvbTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZGVsYXllZF9yZXNldDsKLQogCXVuc2lnbmVkIGludCBjb25maWdfcm9tczsKIAogCXN0cnVjdCBsaXN0X2hlYWQgYWRkcl9zcGFjZTsKIAl1NjQgbG93X2FkZHJfc3BhY2U7CS8qIHVwcGVyIGJvdW5kIG9mIHBoeXNpY2FsIERNQSBhcmVhICovCiAJdTY0IG1pZGRsZV9hZGRyX3NwYWNlOwkvKiB1cHBlciBib3VuZCBvZiBwb3N0ZWQgd3JpdGUgYXJlYSAqLworCisJdTggc3BlZWRbQUxMX05PREVTXTsJLyogc3BlZWQgYmV0d2VlbiBlYWNoIG5vZGUgYW5kIGxvY2FsIG5vZGUgKi8KKworCS8qIHBlciBub2RlIHRsYWJlbCBhbGxvY2F0aW9uICovCisJdTggbmV4dF90bFtBTExfTk9ERVNdOworCXN0cnVjdCB7IERFQ0xBUkVfQklUTUFQKG1hcCwgNjQpOyB9IHRsX3Bvb2xbQUxMX05PREVTXTsKKworCXN0cnVjdCBjc3JfY29udHJvbCBjc3I7CiB9OwogCi0KLQogZW51bSBkZXZjdGxfY21kIHsKIAkvKiBIb3N0IGlzIHJlcXVlc3RlZCB0byByZXNldCBpdHMgYnVzIGFuZCBjYW5jZWwgYWxsIG91dHN0YW5kaW5nIGFzeW5jCiAJICogcmVxdWVzdHMuICBJZiBhcmcgPT0gMSwgaXQgc2hhbGwgYWxzbyBhdHRlbXB0IHRvIGJlY29tZSByb290IG9uIHRoZQpAQCAtMTEyLDcgKzExMSw3IEBACiAKIGVudW0gaXNvY3RsX2NtZCB7CiAJLyogcmF3aXNvIEFQSSAtIHNlZSBpc28uaCBmb3IgdGhlIG1lYW5pbmdzIG9mIHRoZXNlIGNvbW1hbmRzCi0JICAgKHRoZXkgY29ycmVzcG9uZCBleGFjdGx5IHRvIHRoZSBocHNiX2lzb18qIEFQSSBmdW5jdGlvbnMpCisJICogKHRoZXkgY29ycmVzcG9uZCBleGFjdGx5IHRvIHRoZSBocHNiX2lzb18qIEFQSSBmdW5jdGlvbnMpCiAJICogSU5JVCA9IGFsbG9jYXRlIHJlc291cmNlcwogCSAqIFNUQVJUID0gYmVnaW4gdHJhbnNtaXNzaW9uL3JlY2VwdGlvbgogCSAqIFNUT1AgPSBoYWx0IHRyYW5zbWlzc2lvbi9yZWNlcHRpb24KQEAgLTE2MCw3ICsxNTksOCBAQAogCS8qIFRoZSBoYXJkd2FyZSBkcml2ZXIgbWF5IG9wdGlvbmFsbHkgc3VwcG9ydCBhIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZAogCSAqIHRvIHNldCB0aGUgaGFyZHdhcmUgQ29uZmlnUk9NIGlmIHRoZSBoYXJkd2FyZSBzdXBwb3J0cyBoYW5kbGluZwogCSAqIHJlYWRzIHRvIHRoZSBDb25maWdST00gb24gaXRzIG93bi4gKi8KLQl2b2lkICgqc2V0X2h3X2NvbmZpZ19yb20pIChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBxdWFkbGV0X3QgKmNvbmZpZ19yb20pOworCXZvaWQgKCpzZXRfaHdfY29uZmlnX3JvbSkoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKKwkJCQkgIHF1YWRsZXRfdCAqY29uZmlnX3JvbSk7CiAKIAkvKiBUaGlzIGZ1bmN0aW9uIHNoYWxsIGltcGxlbWVudCBwYWNrZXQgdHJhbnNtaXNzaW9uIGJhc2VkIG9uCiAJICogcGFja2V0LT50eXBlLiAgSXQgc2hhbGwgQ1JDIGJvdGggcGFydHMgb2YgdGhlIHBhY2tldCAodW5sZXNzCkBAIC0xNzAsMjAgKzE3MCwyMSBAQAogCSAqIGNhbGxlZC4gIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmUuCiAJICogTk9URTogVGhlIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGFibGUgaW4gaW50ZXJydXB0IGNvbnRleHQuCiAJICovCi0JaW50ICgqdHJhbnNtaXRfcGFja2V0KSAoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKLQkJCQlzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldCk7CisJaW50ICgqdHJhbnNtaXRfcGFja2V0KShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LAorCQkJICAgICAgIHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0KTsKIAogCS8qIFRoaXMgZnVuY3Rpb24gcmVxdWVzdHMgbWlzY2VsbGFub3VzIHNlcnZpY2VzIGZyb20gdGhlIGRyaXZlciwgc2VlCiAJICogYWJvdmUgZm9yIGNvbW1hbmQgY29kZXMgYW5kIGV4cGVjdGVkIGFjdGlvbnMuICBSZXR1cm4gLTEgZm9yIHVua25vd24KIAkgKiBjb21tYW5kLCB0aG91Z2ggdGhhdCBzaG91bGQgbmV2ZXIgaGFwcGVuLgogCSAqLwotCWludCAoKmRldmN0bCkgKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGVudW0gZGV2Y3RsX2NtZCBjb21tYW5kLCBpbnQgYXJnKTsKKwlpbnQgKCpkZXZjdGwpKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIGVudW0gZGV2Y3RsX2NtZCBjb21tYW5kLCBpbnQgYXJnKTsKIAogCSAvKiBJU08gdHJhbnNtaXNzaW9uL3JlY2VwdGlvbiBmdW5jdGlvbnMuIFJldHVybiAwIG9uIHN1Y2Nlc3MsIC0xCiAJICAqIChvciAtRVhYWCBlcnJubyBjb2RlKSBvbiBmYWlsdXJlLiBJZiB0aGUgbG93LWxldmVsIGRyaXZlciBkb2VzIG5vdAogCSAgKiBzdXBwb3J0IHRoZSBuZXcgSVNPIEFQSSwgc2V0IGlzb2N0bCB0byBOVUxMLgogCSAgKi8KLQlpbnQgKCppc29jdGwpIChzdHJ1Y3QgaHBzYl9pc28gKmlzbywgZW51bSBpc29jdGxfY21kIGNvbW1hbmQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKKwlpbnQgKCppc29jdGwpKHN0cnVjdCBocHNiX2lzbyAqaXNvLCBlbnVtIGlzb2N0bF9jbWQgY29tbWFuZCwKKwkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAJLyogVGhpcyBmdW5jdGlvbiBpcyBtYWlubHkgdG8gcmVkaXJlY3QgbG9jYWwgQ1NSIHJlYWRzL2xvY2tzIHRvIHRoZSBpc28KIAkgKiBtYW5hZ2VtZW50IHJlZ2lzdGVycyAoYnVzIG1hbmFnZXIgaWQsIGJhbmR3aWR0aCBhdmFpbGFibGUsIGNoYW5uZWxzCkBAIC0xOTYsMTkgKzE5NywxMSBAQAogCQkJCSBxdWFkbGV0X3QgZGF0YSwgcXVhZGxldF90IGNvbXBhcmUpOwogfTsKIAotCiBzdHJ1Y3QgaHBzYl9ob3N0ICpocHNiX2FsbG9jX2hvc3Qoc3RydWN0IGhwc2JfaG9zdF9kcml2ZXIgKmRydiwgc2l6ZV90IGV4dHJhLAogCQkJCSAgc3RydWN0IGRldmljZSAqZGV2KTsKIGludCBocHNiX2FkZF9ob3N0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwogdm9pZCBocHNiX3JlbW92ZV9ob3N0KHN0cnVjdCBocHNiX2hvc3QgKmgpOwogCi0vKiBUaGUgZm9sbG93aW5nIDIgZnVuY3Rpb25zIGFyZSBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgd2hlbiB0aGUKLSAqIHJhdzEzOTQvbGlicmF3MTM5NCB1cGRhdGUgaXMgY29tcGxldGUuICovCi1pbnQgaHBzYl91cGRhdGVfY29uZmlnX3JvbShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LAotICAgICAgY29uc3QgcXVhZGxldF90ICpuZXdfcm9tLCBzaXplX3Qgc2l6ZSwgdW5zaWduZWQgY2hhciByb21fdmVyc2lvbik7Ci1pbnQgaHBzYl9nZXRfY29uZmlnX3JvbShzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBxdWFkbGV0X3QgKmJ1ZmZlciwKLSAgICAgIHNpemVfdCBidWZmZXJzaXplLCBzaXplX3QgKnJvbV9zaXplLCB1bnNpZ25lZCBjaGFyICpyb21fdmVyc2lvbik7Ci0KIC8qIFVwZGF0ZXMgdGhlIGNvbmZpZ3VyYXRpb24gcm9tIGltYWdlIG9mIGEgaG9zdC4gIHJvbV92ZXJzaW9uIG11c3QgYmUgdGhlCiAgKiBjdXJyZW50IHZlcnNpb24sIG90aGVyd2lzZSBpdCB3aWxsIGZhaWwgd2l0aCByZXR1cm4gdmFsdWUgLTEuIElmIHRoaXMKICAqIGhvc3QgZG9lcyBub3Qgc3VwcG9ydCBjb25maWctcm9tLXVwZGF0ZSwgaXQgd2lsbCByZXR1cm4gLUVJTlZBTC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTQtaW9jdGwuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTQtaW9jdGwuaAppbmRleCAxNTY3MDM5Li44ZjIwNzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0LWlvY3RsLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NC1pb2N0bC5oCkBAIC0xLDUgKzEsNyBAQAotLyogQmFzZSBmaWxlIGZvciBhbGwgaWVlZTEzOTQgaW9jdGwncy4gTGludXgtMTM5NCBoYXMgYWxsb2NhdGVkIGJhc2UgJyMnCi0gKiB3aXRoIGEgcmFuZ2Ugb2YgMHgwMC0weDNmLiAqLworLyoKKyAqIEJhc2UgZmlsZSBmb3IgYWxsIGllZWUxMzk0IGlvY3RsJ3MuCisgKiBMaW51eC0xMzk0IGhhcyBhbGxvY2F0ZWQgYmFzZSAnIycgd2l0aCBhIHJhbmdlIG9mIDB4MDAtMHgzZi4KKyAqLwogCiAjaWZuZGVmIF9fSUVFRTEzOTRfSU9DVExfSAogI2RlZmluZSBfX0lFRUUxMzk0X0lPQ1RMX0gKQEAgLTk2LDggKzk4LDcgQEAKIAlfSU9XICgnIycsIDB4MjcsIHN0cnVjdCByYXcxMzk0X2lzb19wYWNrZXRzKQogI2RlZmluZSBSQVcxMzk0X0lPQ19JU09fWE1JVF9TWU5DCQlcCiAJX0lPICAoJyMnLCAweDI4KQotI2RlZmluZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9GTFVTSCAgICAgICAgICAgICAgXAorI2RlZmluZSBSQVcxMzk0X0lPQ19JU09fUkVDVl9GTFVTSAkJXAogCV9JTyAgKCcjJywgMHgyOSkKIAotCiAjZW5kaWYgLyogX19JRUVFMTM5NF9JT0NUTF9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0LmggYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0LmgKaW5kZXggOTM2ZDc3Ni4uNDA0OTIwNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NC5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTQuaApAQCAtNSw3NyArNSw3OCBAQAogI2lmbmRlZiBfSUVFRTEzOTRfSUVFRTEzOTRfSAogI2RlZmluZSBfSUVFRTEzOTRfSUVFRTEzOTRfSAogCi0jZGVmaW5lIFRDT0RFX1dSSVRFUSAgICAgICAgICAgICAweDAKLSNkZWZpbmUgVENPREVfV1JJVEVCICAgICAgICAgICAgIDB4MQotI2RlZmluZSBUQ09ERV9XUklURV9SRVNQT05TRSAgICAgMHgyCi0jZGVmaW5lIFRDT0RFX1JFQURRICAgICAgICAgICAgICAweDQKLSNkZWZpbmUgVENPREVfUkVBREIgICAgICAgICAgICAgIDB4NQotI2RlZmluZSBUQ09ERV9SRUFEUV9SRVNQT05TRSAgICAgMHg2Ci0jZGVmaW5lIFRDT0RFX1JFQURCX1JFU1BPTlNFICAgICAweDcKLSNkZWZpbmUgVENPREVfQ1lDTEVfU1RBUlQgICAgICAgIDB4OAotI2RlZmluZSBUQ09ERV9MT0NLX1JFUVVFU1QgICAgICAgMHg5Ci0jZGVmaW5lIFRDT0RFX0lTT19EQVRBICAgICAgICAgICAweGEKLSNkZWZpbmUgVENPREVfU1RSRUFNX0RBVEEgICAgICAgIDB4YQotI2RlZmluZSBUQ09ERV9MT0NLX1JFU1BPTlNFICAgICAgMHhiCisjZGVmaW5lIFRDT0RFX1dSSVRFUQkJMHgwCisjZGVmaW5lIFRDT0RFX1dSSVRFQgkJMHgxCisjZGVmaW5lIFRDT0RFX1dSSVRFX1JFU1BPTlNFCTB4MgorI2RlZmluZSBUQ09ERV9SRUFEUQkJMHg0CisjZGVmaW5lIFRDT0RFX1JFQURCCQkweDUKKyNkZWZpbmUgVENPREVfUkVBRFFfUkVTUE9OU0UJMHg2CisjZGVmaW5lIFRDT0RFX1JFQURCX1JFU1BPTlNFCTB4NworI2RlZmluZSBUQ09ERV9DWUNMRV9TVEFSVAkweDgKKyNkZWZpbmUgVENPREVfTE9DS19SRVFVRVNUCTB4OQorI2RlZmluZSBUQ09ERV9JU09fREFUQQkJMHhhCisjZGVmaW5lIFRDT0RFX1NUUkVBTV9EQVRBCTB4YQorI2RlZmluZSBUQ09ERV9MT0NLX1JFU1BPTlNFCTB4YgogCi0jZGVmaW5lIFJDT0RFX0NPTVBMRVRFICAgICAgICAgICAweDAKLSNkZWZpbmUgUkNPREVfQ09ORkxJQ1RfRVJST1IgICAgIDB4NAotI2RlZmluZSBSQ09ERV9EQVRBX0VSUk9SICAgICAgICAgMHg1Ci0jZGVmaW5lIFJDT0RFX1RZUEVfRVJST1IgICAgICAgICAweDYKLSNkZWZpbmUgUkNPREVfQUREUkVTU19FUlJPUiAgICAgIDB4NworI2RlZmluZSBSQ09ERV9DT01QTEVURQkJMHgwCisjZGVmaW5lIFJDT0RFX0NPTkZMSUNUX0VSUk9SCTB4NAorI2RlZmluZSBSQ09ERV9EQVRBX0VSUk9SCTB4NQorI2RlZmluZSBSQ09ERV9UWVBFX0VSUk9SCTB4NgorI2RlZmluZSBSQ09ERV9BRERSRVNTX0VSUk9SCTB4NwogCi0jZGVmaW5lIEVYVENPREVfTUFTS19TV0FQICAgICAgICAweDEKLSNkZWZpbmUgRVhUQ09ERV9DT01QQVJFX1NXQVAgICAgIDB4MgotI2RlZmluZSBFWFRDT0RFX0ZFVENIX0FERCAgICAgICAgMHgzCi0jZGVmaW5lIEVYVENPREVfTElUVExFX0FERCAgICAgICAweDQKLSNkZWZpbmUgRVhUQ09ERV9CT1VOREVEX0FERCAgICAgIDB4NQotI2RlZmluZSBFWFRDT0RFX1dSQVBfQUREICAgICAgICAgMHg2CisjZGVmaW5lIEVYVENPREVfTUFTS19TV0FQCTB4MQorI2RlZmluZSBFWFRDT0RFX0NPTVBBUkVfU1dBUAkweDIKKyNkZWZpbmUgRVhUQ09ERV9GRVRDSF9BREQJMHgzCisjZGVmaW5lIEVYVENPREVfTElUVExFX0FERAkweDQKKyNkZWZpbmUgRVhUQ09ERV9CT1VOREVEX0FERAkweDUKKyNkZWZpbmUgRVhUQ09ERV9XUkFQX0FERAkweDYKIAotI2RlZmluZSBBQ0tfQ09NUExFVEUgICAgICAgICAgICAgMHgxCi0jZGVmaW5lIEFDS19QRU5ESU5HICAgICAgICAgICAgICAweDIKLSNkZWZpbmUgQUNLX0JVU1lfWCAgICAgICAgICAgICAgIDB4NAotI2RlZmluZSBBQ0tfQlVTWV9BICAgICAgICAgICAgICAgMHg1Ci0jZGVmaW5lIEFDS19CVVNZX0IgICAgICAgICAgICAgICAweDYKLSNkZWZpbmUgQUNLX1RBUkRZICAgICAgICAgICAgICAgIDB4YgotI2RlZmluZSBBQ0tfQ09ORkxJQ1RfRVJST1IgICAgICAgMHhjCi0jZGVmaW5lIEFDS19EQVRBX0VSUk9SICAgICAgICAgICAweGQKLSNkZWZpbmUgQUNLX1RZUEVfRVJST1IgICAgICAgICAgIDB4ZQotI2RlZmluZSBBQ0tfQUREUkVTU19FUlJPUiAgICAgICAgMHhmCisjZGVmaW5lIEFDS19DT01QTEVURQkJMHgxCisjZGVmaW5lIEFDS19QRU5ESU5HCQkweDIKKyNkZWZpbmUgQUNLX0JVU1lfWAkJMHg0CisjZGVmaW5lIEFDS19CVVNZX0EJCTB4NQorI2RlZmluZSBBQ0tfQlVTWV9CCQkweDYKKyNkZWZpbmUgQUNLX1RBUkRZCQkweGIKKyNkZWZpbmUgQUNLX0NPTkZMSUNUX0VSUk9SCTB4YworI2RlZmluZSBBQ0tfREFUQV9FUlJPUgkJMHhkCisjZGVmaW5lIEFDS19UWVBFX0VSUk9SCQkweGUKKyNkZWZpbmUgQUNLX0FERFJFU1NfRVJST1IJMHhmCiAKIC8qIE5vbi1zdGFuZGFyZCAiQUNLIGNvZGVzIiBmb3IgaW50ZXJuYWwgdXNlICovCi0jZGVmaW5lIEFDS1hfTk9ORSAgICAgICAgICAgICAgICAoLTEpCi0jZGVmaW5lIEFDS1hfU0VORF9FUlJPUiAgICAgICAgICAoLTIpCi0jZGVmaW5lIEFDS1hfQUJPUlRFRCAgICAgICAgICAgICAoLTMpCi0jZGVmaW5lIEFDS1hfVElNRU9VVCAgICAgICAgICAgICAoLTQpCisjZGVmaW5lIEFDS1hfTk9ORQkJKC0xKQorI2RlZmluZSBBQ0tYX1NFTkRfRVJST1IJCSgtMikKKyNkZWZpbmUgQUNLWF9BQk9SVEVECQkoLTMpCisjZGVmaW5lIEFDS1hfVElNRU9VVAkJKC00KQogCisjZGVmaW5lIElFRUUxMzk0X1NQRUVEXzEwMAkweDAwCisjZGVmaW5lIElFRUUxMzk0X1NQRUVEXzIwMAkweDAxCisjZGVmaW5lIElFRUUxMzk0X1NQRUVEXzQwMAkweDAyCisjZGVmaW5lIElFRUUxMzk0X1NQRUVEXzgwMAkweDAzCisjZGVmaW5lIElFRUUxMzk0X1NQRUVEXzE2MDAJMHgwNAorI2RlZmluZSBJRUVFMTM5NF9TUEVFRF8zMjAwCTB4MDUKIAotI2RlZmluZSBJRUVFMTM5NF9TUEVFRF8xMDAJCTB4MDAKLSNkZWZpbmUgSUVFRTEzOTRfU1BFRURfMjAwCQkweDAxCi0jZGVmaW5lIElFRUUxMzk0X1NQRUVEXzQwMAkJMHgwMgotI2RlZmluZSBJRUVFMTM5NF9TUEVFRF84MDAJCTB4MDMKLSNkZWZpbmUgSUVFRTEzOTRfU1BFRURfMTYwMAkJMHgwNAotI2RlZmluZSBJRUVFMTM5NF9TUEVFRF8zMjAwCQkweDA1CiAvKiBUaGUgY3VycmVudCBoaWdoZXN0IHRlc3RlZCBzcGVlZCBzdXBwb3J0ZWQgYnkgdGhlIHN1YnN5c3RlbSAqLwotI2RlZmluZSBJRUVFMTM5NF9TUEVFRF9NQVgJCUlFRUUxMzk0X1NQRUVEXzgwMAorI2RlZmluZSBJRUVFMTM5NF9TUEVFRF9NQVgJSUVFRTEzOTRfU1BFRURfODAwCiAKIC8qIE1hcHMgc3BlZWQgdmFsdWVzIGFib3ZlIHRvIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uICovCiBleHRlcm4gY29uc3QgY2hhciAqaHBzYl9zcGVlZHRvX3N0cltdOwogCi0KIC8qIDEzOTRhIGNhYmxlIFBIWSBwYWNrZXRzICovCi0jZGVmaW5lIFNFTEZJRF9QV1JDTF9OT19QT1dFUiAgICAweDAKLSNkZWZpbmUgU0VMRklEX1BXUkNMX1BST1ZJREVfMTVXIDB4MQotI2RlZmluZSBTRUxGSURfUFdSQ0xfUFJPVklERV8zMFcgMHgyCi0jZGVmaW5lIFNFTEZJRF9QV1JDTF9QUk9WSURFXzQ1VyAweDMKLSNkZWZpbmUgU0VMRklEX1BXUkNMX1VTRV8xVyAgICAgIDB4NAotI2RlZmluZSBTRUxGSURfUFdSQ0xfVVNFXzNXICAgICAgMHg1Ci0jZGVmaW5lIFNFTEZJRF9QV1JDTF9VU0VfNlcgICAgICAweDYKLSNkZWZpbmUgU0VMRklEX1BXUkNMX1VTRV8xMFcgICAgIDB4NworI2RlZmluZSBTRUxGSURfUFdSQ0xfTk9fUE9XRVIJCTB4MAorI2RlZmluZSBTRUxGSURfUFdSQ0xfUFJPVklERV8xNVcJMHgxCisjZGVmaW5lIFNFTEZJRF9QV1JDTF9QUk9WSURFXzMwVwkweDIKKyNkZWZpbmUgU0VMRklEX1BXUkNMX1BST1ZJREVfNDVXCTB4MworI2RlZmluZSBTRUxGSURfUFdSQ0xfVVNFXzFXCQkweDQKKyNkZWZpbmUgU0VMRklEX1BXUkNMX1VTRV8zVwkJMHg1CisjZGVmaW5lIFNFTEZJRF9QV1JDTF9VU0VfNlcJCTB4NgorI2RlZmluZSBTRUxGSURfUFdSQ0xfVVNFXzEwVwkJMHg3CiAKLSNkZWZpbmUgU0VMRklEX1BPUlRfQ0hJTEQgICAgICAgIDB4MwotI2RlZmluZSBTRUxGSURfUE9SVF9QQVJFTlQgICAgICAgMHgyCi0jZGVmaW5lIFNFTEZJRF9QT1JUX05DT05OICAgICAgICAweDEKLSNkZWZpbmUgU0VMRklEX1BPUlRfTk9ORSAgICAgICAgIDB4MAorI2RlZmluZSBTRUxGSURfUE9SVF9DSElMRAkJMHgzCisjZGVmaW5lIFNFTEZJRF9QT1JUX1BBUkVOVAkJMHgyCisjZGVmaW5lIFNFTEZJRF9QT1JUX05DT05OCQkweDEKKyNkZWZpbmUgU0VMRklEX1BPUlRfTk9ORQkJMHgwCisKKyNkZWZpbmUgU0VMRklEX1NQRUVEX1VOS05PV04JCTB4MwkvKiAxMzk0YiBQSFkgKi8KIAogI2RlZmluZSBQSFlQQUNLRVRfTElOS09OCQkJMHg0MDAwMDAwMAogI2RlZmluZSBQSFlQQUNLRVRfUEhZQ09ORklHX1IJCQkweDAwODAwMDAwCkBAIC05MSw3NiArOTIsNzYgQEAKIAogI2RlZmluZSBFWFRQSFlQQUNLRVRfVFlQRU1BU0sJCQkweEMwRkMwMDAwCiAKLSNkZWZpbmUgUEhZUEFDS0VUX1BPUlRfU0hJRlQgICAgIDI0Ci0jZGVmaW5lIFBIWVBBQ0tFVF9HQVBDT1VOVF9TSElGVCAxNgorI2RlZmluZSBQSFlQQUNLRVRfUE9SVF9TSElGVAkJMjQKKyNkZWZpbmUgUEhZUEFDS0VUX0dBUENPVU5UX1NISUZUCTE2CiAKIC8qIDEzOTRhIFBIWSByZWdpc3RlciBtYXAgYml0bWFza3MgKi8KLSNkZWZpbmUgUEhZXzAwX1BIWVNJQ0FMX0lEICAgICAgIDB4RkMKLSNkZWZpbmUgUEhZXzAwX1IgICAgICAgICAgICAgICAgIDB4MDIgLyogUm9vdCAqLwotI2RlZmluZSBQSFlfMDBfUFMgICAgICAgICAgICAgICAgMHgwMSAvKiBQb3dlciBTdGF0dXMqLwotI2RlZmluZSBQSFlfMDFfUkhCICAgICAgICAgICAgICAgMHg4MCAvKiBSb290IEhvbGQtT2ZmICovCi0jZGVmaW5lIFBIWV8wMV9JQlIgICAgICAgICAgICAgICAweDgwIC8qIEluaXRpYXRlIEJ1cyBSZXNldCAqLwotI2RlZmluZSBQSFlfMDFfR0FQX0NPVU5UICAgICAgICAgMHgzRgotI2RlZmluZSBQSFlfMDJfRVhURU5ERUQgICAgICAgICAgMHhFMCAvKiAweDcgZm9yIDEzOTRhLWNvbXBsaWFudCBQSFkgKi8KLSNkZWZpbmUgUEhZXzAyX1RPVEFMX1BPUlRTICAgICAgIDB4MUYKLSNkZWZpbmUgUEhZXzAzX01BWF9TUEVFRCAgICAgICAgIDB4RTAKLSNkZWZpbmUgUEhZXzAzX0RFTEFZICAgICAgICAgICAgIDB4MEYKLSNkZWZpbmUgUEhZXzA0X0xDVFJMICAgICAgICAgICAgIDB4ODAgLyogTGluayBBY3RpdmUgUmVwb3J0IENvbnRyb2wgKi8KLSNkZWZpbmUgUEhZXzA0X0NPTlRFTkRFUiAgICAgICAgIDB4NDAKLSNkZWZpbmUgUEhZXzA0X0pJVFRFUiAgICAgICAgICAgIDB4MzgKLSNkZWZpbmUgUEhZXzA0X1BXUl9DTEFTUyAgICAgICAgIDB4MDcgLyogUG93ZXIgQ2xhc3MgKi8KLSNkZWZpbmUgUEhZXzA1X1dBVENIRE9HICAgICAgICAgIDB4ODAKLSNkZWZpbmUgUEhZXzA1X0lTQlIgICAgICAgICAgICAgIDB4NDAgLyogSW5pdGlhdGUgU2hvcnQgQnVzIFJlc2V0ICovCi0jZGVmaW5lIFBIWV8wNV9MT09QICAgICAgICAgICAgICAweDIwIC8qIExvb3AgRGV0ZWN0ICovCi0jZGVmaW5lIFBIWV8wNV9QV1JfRkFJTCAgICAgICAgICAweDEwIC8qIENhYmxlIFBvd2VyIEZhaWx1cmUgRGV0ZWN0ICovCi0jZGVmaW5lIFBIWV8wNV9USU1FT1VUICAgICAgICAgICAweDA4IC8qIEFyYml0cmF0aW9uIFN0YXRlIE1hY2hpbmUgVGltZW91dCAqLwotI2RlZmluZSBQSFlfMDVfUE9SVF9FVkVOVCAgICAgICAgMHgwNCAvKiBQb3J0IEV2ZW50IERldGVjdCAqLwotI2RlZmluZSBQSFlfMDVfRU5BQl9BQ0NFTCAgICAgICAgMHgwMiAvKiBFbmFibGUgQXJiaXRyYXRpb24gQWNjZWxlcmF0aW9uICovCi0jZGVmaW5lIFBIWV8wNV9FTkFCX01VTFRJICAgICAgICAweDAxIC8qIEVuYS4gTXVsdGlzcGVlZCBQYWNrZXQgQ29uY2F0ZW5hdGlvbiAqLworI2RlZmluZSBQSFlfMDBfUEhZU0lDQUxfSUQJMHhGQworI2RlZmluZSBQSFlfMDBfUgkJMHgwMiAvKiBSb290ICovCisjZGVmaW5lIFBIWV8wMF9QUwkJMHgwMSAvKiBQb3dlciBTdGF0dXMqLworI2RlZmluZSBQSFlfMDFfUkhCCQkweDgwIC8qIFJvb3QgSG9sZC1PZmYgKi8KKyNkZWZpbmUgUEhZXzAxX0lCUgkJMHg4MCAvKiBJbml0aWF0ZSBCdXMgUmVzZXQgKi8KKyNkZWZpbmUgUEhZXzAxX0dBUF9DT1VOVAkweDNGCisjZGVmaW5lIFBIWV8wMl9FWFRFTkRFRAkJMHhFMCAvKiAweDcgZm9yIDEzOTRhLWNvbXBsaWFudCBQSFkgKi8KKyNkZWZpbmUgUEhZXzAyX1RPVEFMX1BPUlRTCTB4MUYKKyNkZWZpbmUgUEhZXzAzX01BWF9TUEVFRAkweEUwCisjZGVmaW5lIFBIWV8wM19ERUxBWQkJMHgwRgorI2RlZmluZSBQSFlfMDRfTENUUkwJCTB4ODAgLyogTGluayBBY3RpdmUgUmVwb3J0IENvbnRyb2wgKi8KKyNkZWZpbmUgUEhZXzA0X0NPTlRFTkRFUgkweDQwCisjZGVmaW5lIFBIWV8wNF9KSVRURVIJCTB4MzgKKyNkZWZpbmUgUEhZXzA0X1BXUl9DTEFTUwkweDA3IC8qIFBvd2VyIENsYXNzICovCisjZGVmaW5lIFBIWV8wNV9XQVRDSERPRwkJMHg4MAorI2RlZmluZSBQSFlfMDVfSVNCUgkJMHg0MCAvKiBJbml0aWF0ZSBTaG9ydCBCdXMgUmVzZXQgKi8KKyNkZWZpbmUgUEhZXzA1X0xPT1AJCTB4MjAgLyogTG9vcCBEZXRlY3QgKi8KKyNkZWZpbmUgUEhZXzA1X1BXUl9GQUlMCQkweDEwIC8qIENhYmxlIFBvd2VyIEZhaWx1cmUgRGV0ZWN0ICovCisjZGVmaW5lIFBIWV8wNV9USU1FT1VUCQkweDA4IC8qIEFyYml0cmF0aW9uIFN0YXRlIE1hY2hpbmUgVGltZW91dCAqLworI2RlZmluZSBQSFlfMDVfUE9SVF9FVkVOVAkweDA0IC8qIFBvcnQgRXZlbnQgRGV0ZWN0ICovCisjZGVmaW5lIFBIWV8wNV9FTkFCX0FDQ0VMCTB4MDIgLyogRW5hYmxlIEFyYml0cmF0aW9uIEFjY2VsZXJhdGlvbiAqLworI2RlZmluZSBQSFlfMDVfRU5BQl9NVUxUSQkweDAxIC8qIEVuYS4gTXVsdGlzcGVlZCBQYWNrZXQgQ29uY2F0ZW5hdGlvbiAqLwogCiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiAjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECiAKIHN0cnVjdCBzZWxmaWQgewotICAgICAgICB1MzIgcGFja2V0X2lkZW50aWZpZXI6MjsgLyogYWx3YXlzIGJpbmFyeSAxMCAqLwotICAgICAgICB1MzIgcGh5X2lkOjY7Ci0gICAgICAgIC8qIGJ5dGUgKi8KLSAgICAgICAgdTMyIGV4dGVuZGVkOjE7IC8qIGlmIHRydWUgaXMgc3RydWN0IGV4dF9zZWxmaWQgKi8KLSAgICAgICAgdTMyIGxpbmtfYWN0aXZlOjE7Ci0gICAgICAgIHUzMiBnYXBfY291bnQ6NjsKLSAgICAgICAgLyogYnl0ZSAqLwotICAgICAgICB1MzIgc3BlZWQ6MjsKLSAgICAgICAgdTMyIHBoeV9kZWxheToyOwotICAgICAgICB1MzIgY29udGVuZGVyOjE7Ci0gICAgICAgIHUzMiBwb3dlcl9jbGFzczozOwotICAgICAgICAvKiBieXRlICovCi0gICAgICAgIHUzMiBwb3J0MDoyOwotICAgICAgICB1MzIgcG9ydDE6MjsKLSAgICAgICAgdTMyIHBvcnQyOjI7Ci0gICAgICAgIHUzMiBpbml0aWF0ZWRfcmVzZXQ6MTsKLSAgICAgICAgdTMyIG1vcmVfcGFja2V0czoxOworCXUzMiBwYWNrZXRfaWRlbnRpZmllcjoyOyAvKiBhbHdheXMgYmluYXJ5IDEwICovCisJdTMyIHBoeV9pZDo2OworCS8qIGJ5dGUgKi8KKwl1MzIgZXh0ZW5kZWQ6MTsgLyogaWYgdHJ1ZSBpcyBzdHJ1Y3QgZXh0X3NlbGZpZCAqLworCXUzMiBsaW5rX2FjdGl2ZToxOworCXUzMiBnYXBfY291bnQ6NjsKKwkvKiBieXRlICovCisJdTMyIHNwZWVkOjI7CisJdTMyIHBoeV9kZWxheToyOworCXUzMiBjb250ZW5kZXI6MTsKKwl1MzIgcG93ZXJfY2xhc3M6MzsKKwkvKiBieXRlICovCisJdTMyIHBvcnQwOjI7CisJdTMyIHBvcnQxOjI7CisJdTMyIHBvcnQyOjI7CisJdTMyIGluaXRpYXRlZF9yZXNldDoxOworCXUzMiBtb3JlX3BhY2tldHM6MTsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKIHN0cnVjdCBleHRfc2VsZmlkIHsKLSAgICAgICAgdTMyIHBhY2tldF9pZGVudGlmaWVyOjI7IC8qIGFsd2F5cyBiaW5hcnkgMTAgKi8KLSAgICAgICAgdTMyIHBoeV9pZDo2OwotICAgICAgICAvKiBieXRlICovCi0gICAgICAgIHUzMiBleHRlbmRlZDoxOyAvKiBpZiBmYWxzZSBpcyBzdHJ1Y3Qgc2VsZmlkICovCi0gICAgICAgIHUzMiBzZXFfbnI6MzsKLSAgICAgICAgdTMyIHJlc2VydmVkOjI7Ci0gICAgICAgIHUzMiBwb3J0YToyOwotICAgICAgICAvKiBieXRlICovCi0gICAgICAgIHUzMiBwb3J0YjoyOwotICAgICAgICB1MzIgcG9ydGM6MjsKLSAgICAgICAgdTMyIHBvcnRkOjI7Ci0gICAgICAgIHUzMiBwb3J0ZToyOwotICAgICAgICAvKiBieXRlICovCi0gICAgICAgIHUzMiBwb3J0ZjoyOwotICAgICAgICB1MzIgcG9ydGc6MjsKLSAgICAgICAgdTMyIHBvcnRoOjI7Ci0gICAgICAgIHUzMiByZXNlcnZlZDI6MTsKLSAgICAgICAgdTMyIG1vcmVfcGFja2V0czoxOworCXUzMiBwYWNrZXRfaWRlbnRpZmllcjoyOyAvKiBhbHdheXMgYmluYXJ5IDEwICovCisJdTMyIHBoeV9pZDo2OworCS8qIGJ5dGUgKi8KKwl1MzIgZXh0ZW5kZWQ6MTsgLyogaWYgZmFsc2UgaXMgc3RydWN0IHNlbGZpZCAqLworCXUzMiBzZXFfbnI6MzsKKwl1MzIgcmVzZXJ2ZWQ6MjsKKwl1MzIgcG9ydGE6MjsKKwkvKiBieXRlICovCisJdTMyIHBvcnRiOjI7CisJdTMyIHBvcnRjOjI7CisJdTMyIHBvcnRkOjI7CisJdTMyIHBvcnRlOjI7CisJLyogYnl0ZSAqLworCXUzMiBwb3J0ZjoyOworCXUzMiBwb3J0ZzoyOworCXUzMiBwb3J0aDoyOworCXUzMiByZXNlcnZlZDI6MTsKKwl1MzIgbW9yZV9wYWNrZXRzOjE7CiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogCiAjZWxpZiBkZWZpbmVkIF9fTElUVExFX0VORElBTl9CSVRGSUVMRCAvKiBfX0JJR19FTkRJQU5fQklURklFTEQgKi8KQEAgLTE3MSw0OSArMTcyLDQ4IEBACiAgKi8KIAogc3RydWN0IHNlbGZpZCB7Ci0gICAgICAgIHUzMiBwaHlfaWQ6NjsKLSAgICAgICAgdTMyIHBhY2tldF9pZGVudGlmaWVyOjI7IC8qIGFsd2F5cyBiaW5hcnkgMTAgKi8KLSAgICAgICAgLyogYnl0ZSAqLwotICAgICAgICB1MzIgZ2FwX2NvdW50OjY7Ci0gICAgICAgIHUzMiBsaW5rX2FjdGl2ZToxOwotICAgICAgICB1MzIgZXh0ZW5kZWQ6MTsgLyogaWYgdHJ1ZSBpcyBzdHJ1Y3QgZXh0X3NlbGZpZCAqLwotICAgICAgICAvKiBieXRlICovCi0gICAgICAgIHUzMiBwb3dlcl9jbGFzczozOwotICAgICAgICB1MzIgY29udGVuZGVyOjE7Ci0gICAgICAgIHUzMiBwaHlfZGVsYXk6MjsKLSAgICAgICAgdTMyIHNwZWVkOjI7Ci0gICAgICAgIC8qIGJ5dGUgKi8KLSAgICAgICAgdTMyIG1vcmVfcGFja2V0czoxOwotICAgICAgICB1MzIgaW5pdGlhdGVkX3Jlc2V0OjE7Ci0gICAgICAgIHUzMiBwb3J0MjoyOwotICAgICAgICB1MzIgcG9ydDE6MjsKLSAgICAgICAgdTMyIHBvcnQwOjI7CisJdTMyIHBoeV9pZDo2OworCXUzMiBwYWNrZXRfaWRlbnRpZmllcjoyOyAvKiBhbHdheXMgYmluYXJ5IDEwICovCisJLyogYnl0ZSAqLworCXUzMiBnYXBfY291bnQ6NjsKKwl1MzIgbGlua19hY3RpdmU6MTsKKwl1MzIgZXh0ZW5kZWQ6MTsgLyogaWYgdHJ1ZSBpcyBzdHJ1Y3QgZXh0X3NlbGZpZCAqLworCS8qIGJ5dGUgKi8KKwl1MzIgcG93ZXJfY2xhc3M6MzsKKwl1MzIgY29udGVuZGVyOjE7CisJdTMyIHBoeV9kZWxheToyOworCXUzMiBzcGVlZDoyOworCS8qIGJ5dGUgKi8KKwl1MzIgbW9yZV9wYWNrZXRzOjE7CisJdTMyIGluaXRpYXRlZF9yZXNldDoxOworCXUzMiBwb3J0MjoyOworCXUzMiBwb3J0MToyOworCXUzMiBwb3J0MDoyOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKIAogc3RydWN0IGV4dF9zZWxmaWQgewotICAgICAgICB1MzIgcGh5X2lkOjY7Ci0gICAgICAgIHUzMiBwYWNrZXRfaWRlbnRpZmllcjoyOyAvKiBhbHdheXMgYmluYXJ5IDEwICovCi0gICAgICAgIC8qIGJ5dGUgKi8KLSAgICAgICAgdTMyIHBvcnRhOjI7Ci0gICAgICAgIHUzMiByZXNlcnZlZDoyOwotICAgICAgICB1MzIgc2VxX25yOjM7Ci0gICAgICAgIHUzMiBleHRlbmRlZDoxOyAvKiBpZiBmYWxzZSBpcyBzdHJ1Y3Qgc2VsZmlkICovCi0gICAgICAgIC8qIGJ5dGUgKi8KLSAgICAgICAgdTMyIHBvcnRlOjI7Ci0gICAgICAgIHUzMiBwb3J0ZDoyOwotICAgICAgICB1MzIgcG9ydGM6MjsKLSAgICAgICAgdTMyIHBvcnRiOjI7Ci0gICAgICAgIC8qIGJ5dGUgKi8KLSAgICAgICAgdTMyIG1vcmVfcGFja2V0czoxOwotICAgICAgICB1MzIgcmVzZXJ2ZWQyOjE7Ci0gICAgICAgIHUzMiBwb3J0aDoyOwotICAgICAgICB1MzIgcG9ydGc6MjsKLSAgICAgICAgdTMyIHBvcnRmOjI7CisJdTMyIHBoeV9pZDo2OworCXUzMiBwYWNrZXRfaWRlbnRpZmllcjoyOyAvKiBhbHdheXMgYmluYXJ5IDEwICovCisJLyogYnl0ZSAqLworCXUzMiBwb3J0YToyOworCXUzMiByZXNlcnZlZDoyOworCXUzMiBzZXFfbnI6MzsKKwl1MzIgZXh0ZW5kZWQ6MTsgLyogaWYgZmFsc2UgaXMgc3RydWN0IHNlbGZpZCAqLworCS8qIGJ5dGUgKi8KKwl1MzIgcG9ydGU6MjsKKwl1MzIgcG9ydGQ6MjsKKwl1MzIgcG9ydGM6MjsKKwl1MzIgcG9ydGI6MjsKKwkvKiBieXRlICovCisJdTMyIG1vcmVfcGFja2V0czoxOworCXUzMiByZXNlcnZlZDI6MTsKKwl1MzIgcG9ydGg6MjsKKwl1MzIgcG9ydGc6MjsKKwl1MzIgcG9ydGY6MjsKIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAKICNlbHNlCiAjZXJyb3IgV2hhdD8gUERQIGVuZGlhbj8KICNlbmRpZiAvKiBfX0JJR19FTkRJQU5fQklURklFTEQgKi8KIAotCiAjZW5kaWYgLyogX0lFRUUxMzk0X0lFRUUxMzk0X0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5jIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKaW5kZXggZjQzNzM5Yy4uNWZjY2Y5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9jb3JlLmMKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgogCiAjaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKICNpbmNsdWRlICJpZWVlMTM5NC5oIgpAQCAtODYsNyArODUsNyBAQAogCXByaW50aygiXG4iKTsKIH0KICNlbHNlCi0jZGVmaW5lIGR1bXBfcGFja2V0KGEsYixjLGQpCisjZGVmaW5lIGR1bXBfcGFja2V0KGEsYixjLGQpIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGFib3J0X3JlcXVlc3RzKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpOwpAQCAtMzU1LDEwICszNTQsMTIgQEAKIAkJfQogCX0KIAorI2lmIFNFTEZJRF9TUEVFRF9VTktOT1dOICE9IElFRUUxMzk0X1NQRUVEX01BWAogCS8qIGFzc3VtZSBtYXhpbXVtIHNwZWVkIGZvciAxMzk0YiBQSFlzLCBub2RlbWdyIHdpbGwgY29ycmVjdCBpdCAqLwogCWZvciAobiA9IDA7IG4gPCBub2RlY291bnQ7IG4rKykKLQkJaWYgKHNwZWVkY2FwW25dID09IDMpCisJCWlmIChzcGVlZGNhcFtuXSA9PSBTRUxGSURfU1BFRURfVU5LTk9XTikKIAkJCXNwZWVkY2FwW25dID0gSUVFRTEzOTRfU1BFRURfTUFYOworI2VuZGlmCiB9CiAKIApAQCAtMTE2OSw3ICsxMTcwLDcgQEAKIAl1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oSUVFRTEzOTRfQ09SRV9ERVYsIDI1Nik7CiB9CiAKLW1vZHVsZV9pbml0KGllZWUxMzk0X2luaXQpOworZnNfaW5pdGNhbGwoaWVlZTEzOTRfaW5pdCk7IC8qIHNhbWUgYXMgb2hjaTEzOTQgKi8KIG1vZHVsZV9leGl0KGllZWUxMzk0X2NsZWFudXApOwogCiAvKiBFeHBvcnRlZCBzeW1ib2xzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2NvcmUuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCmluZGV4IDBlY2JmMzMuLmFmNGE3OGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfY29yZS5oCkBAIC0xLDEyICsxLDE1IEBACi0KICNpZm5kZWYgX0lFRUUxMzk0X0NPUkVfSAogI2RlZmluZSBfSUVFRTEzOTRfQ09SRV9ICiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vYXRvbWljLmg+Ci0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgotI2luY2x1ZGUgImhvc3RzLmgiCiAKKyNpbmNsdWRlICJob3N0cy5oIgorI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCiAKIHN0cnVjdCBocHNiX3BhY2tldCB7CiAJLyogVGhpcyBzdHJ1Y3QgaXMgYmFzaWNhbGx5IHJlYWQtb25seSBmb3IgaG9zdHMgd2l0aCB0aGUgZXhjZXB0aW9uIG9mCkBAIC01OCw3ICs2MSw2IEBACiAJc2l6ZV90IGhlYWRlcl9zaXplOwogCXNpemVfdCBkYXRhX3NpemU7CiAKLQogCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7CiAJdW5zaWduZWQgaW50IGdlbmVyYXRpb247CiAKQEAgLTgwLDcgKzgyLDcgQEAKIAogLyogU2V0IGEgdGFzayBmb3Igd2hlbiBhIHBhY2tldCBjb21wbGV0ZXMgKi8KIHZvaWQgaHBzYl9zZXRfcGFja2V0X2NvbXBsZXRlX3Rhc2soc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQsCi0JCXZvaWQgKCpyb3V0aW5lKSh2b2lkICopLCB2b2lkICpkYXRhKTsKKwkJCQkgICB2b2lkICgqcm91dGluZSkodm9pZCAqKSwgdm9pZCAqZGF0YSk7CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhwc2JfcGFja2V0ICpkcml2ZXJfcGFja2V0KHN0cnVjdCBsaXN0X2hlYWQgKmwpCiB7CkBAIC05Miw3ICs5NCw2IEBACiBzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfYWxsb2NfcGFja2V0KHNpemVfdCBkYXRhX3NpemUpOwogdm9pZCBocHNiX2ZyZWVfcGFja2V0KHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0KTsKIAotCiAvKgogICogR2VuZXJhdGlvbiBjb3VudGVyIGZvciB0aGUgY29tcGxldGUgMTM5NCBzdWJzeXN0ZW0uICBHZW5lcmF0aW9uIGdldHMKICAqIGluY3JlbWVudGVkIG9uIGV2ZXJ5IGNoYW5nZSBpbiB0aGUgc3Vic3lzdGVtIChlLmcuIGJ1cyByZXNldCkuCkBAIC0yMDQsMTAgKzIwNSwxNCBAQAogI2RlZmluZSBJRUVFMTM5NF9NSU5PUl9CTE9DS19FWFBFUklNRU5UQUwgMTUKIAogI2RlZmluZSBJRUVFMTM5NF9DT1JFX0RFVgkgIE1LREVWKElFRUUxMzk0X01BSk9SLCAwKQotI2RlZmluZSBJRUVFMTM5NF9SQVcxMzk0X0RFVgkgIE1LREVWKElFRUUxMzk0X01BSk9SLCBJRUVFMTM5NF9NSU5PUl9CTE9DS19SQVcxMzk0ICogMTYpCi0jZGVmaW5lIElFRUUxMzk0X1ZJREVPMTM5NF9ERVYJICBNS0RFVihJRUVFMTM5NF9NQUpPUiwgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfVklERU8xMzk0ICogMTYpCi0jZGVmaW5lIElFRUUxMzk0X0RWMTM5NF9ERVYJICBNS0RFVihJRUVFMTM5NF9NQUpPUiwgSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYpCi0jZGVmaW5lIElFRUUxMzk0X0VYUEVSSU1FTlRBTF9ERVYgTUtERVYoSUVFRTEzOTRfTUFKT1IsIElFRUUxMzk0X01JTk9SX0JMT0NLX0VYUEVSSU1FTlRBTCAqIDE2KQorI2RlZmluZSBJRUVFMTM5NF9SQVcxMzk0X0RFVgkgIE1LREVWKElFRUUxMzk0X01BSk9SLCBcCisJCQkJCUlFRUUxMzk0X01JTk9SX0JMT0NLX1JBVzEzOTQgKiAxNikKKyNkZWZpbmUgSUVFRTEzOTRfVklERU8xMzk0X0RFVgkgIE1LREVWKElFRUUxMzk0X01BSk9SLCBcCisJCQkJCUlFRUUxMzk0X01JTk9SX0JMT0NLX1ZJREVPMTM5NCAqIDE2KQorI2RlZmluZSBJRUVFMTM5NF9EVjEzOTRfREVWCSAgTUtERVYoSUVFRTEzOTRfTUFKT1IsIFwKKwkJCQkJSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRFYxMzk0ICogMTYpCisjZGVmaW5lIElFRUUxMzk0X0VYUEVSSU1FTlRBTF9ERVYgTUtERVYoSUVFRTEzOTRfTUFKT1IsIFwKKwkJCQkJSUVFRTEzOTRfTUlOT1JfQkxPQ0tfRVhQRVJJTUVOVEFMICogMTYpCiAKIC8qIHJldHVybiB0aGUgaW5kZXggKHdpdGhpbiBhIG1pbm9yIG51bWJlciBibG9jaykgb2YgYSBmaWxlICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgaWVlZTEzOTRfZmlsZV90b19pbnN0YW5jZShzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTIyMyw0ICsyMjgsMyBAQAogZXh0ZXJuIHN0cnVjdCBjbGFzcyAqaHBzYl9wcm90b2NvbF9jbGFzczsKIAogI2VuZGlmIC8qIF9JRUVFMTM5NF9DT1JFX0ggKi8KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF9ob3RwbHVnLmggYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2hvdHBsdWcuaAppbmRleCA1YmU3MGQzLi5kZDU1MDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2hvdHBsdWcuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X2hvdHBsdWcuaApAQCAtMSwzMyArMSwxOSBAQAogI2lmbmRlZiBfSUVFRTEzOTRfSE9UUExVR19ICiAjZGVmaW5lIF9JRUVFMTM5NF9IT1RQTFVHX0gKIAotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+Ci0KIC8qIFVuaXQgc3BlYyBpZCBhbmQgc3cgdmVyc2lvbiBlbnRyeSBmb3Igc29tZSBwcm90b2NvbHMgKi8KICNkZWZpbmUgQVZDX1VOSVRfU1BFQ19JRF9FTlRSWQkJMHgwMDAwQTAyRAogI2RlZmluZSBBVkNfU1dfVkVSU0lPTl9FTlRSWQkJMHgwMDAxMDAwMQogI2RlZmluZSBDQU1FUkFfVU5JVF9TUEVDX0lEX0VOVFJZCTB4MDAwMEEwMkQKICNkZWZpbmUgQ0FNRVJBX1NXX1ZFUlNJT05fRU5UUlkJCTB4MDAwMDAxMDAKIAotLyogQ2hlY2sgdG8gbWFrZSBzdXJlIHRoaXMgYWxsIGlzbid0IGFscmVhZHkgZGVmaW5lZCAqLwotI2lmbmRlZiBJRUVFMTM5NF9NQVRDSF9WRU5ET1JfSUQKLQotI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9WRU5ET1JfSUQJMHgwMDAxCi0jZGVmaW5lIElFRUUxMzk0X01BVENIX01PREVMX0lECQkweDAwMDIKLSNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfU1BFQ0lGSUVSX0lECTB4MDAwNAotI2RlZmluZSBJRUVFMTM5NF9NQVRDSF9WRVJTSU9OCQkweDAwMDgKLQotc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCB7Ci0JdTMyIG1hdGNoX2ZsYWdzOwotCXUzMiB2ZW5kb3JfaWQ7Ci0JdTMyIG1vZGVsX2lkOwotCXUzMiBzcGVjaWZpZXJfaWQ7Ci0JdTMyIHZlcnNpb247Ci0Jdm9pZCAqZHJpdmVyX2RhdGE7Ci19OwotCi0jZW5kaWYKKy8qIC9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oIGRlZmluZXM6CisgKglJRUVFMTM5NF9NQVRDSF9WRU5ET1JfSUQKKyAqCUlFRUUxMzk0X01BVENIX01PREVMX0lECisgKglJRUVFMTM5NF9NQVRDSF9TUEVDSUZJRVJfSUQKKyAqCUlFRUUxMzk0X01BVENIX1ZFUlNJT04KKyAqCXN0cnVjdCBpZWVlMTM5NF9kZXZpY2VfaWQKKyAqLworI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCiAjZW5kaWYgLyogX0lFRUUxMzk0X0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuYyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmMKaW5kZXggYTExNGI5MS4uMDgzM2ZjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5jCkBAIC05LDE5ICs5LDE3IEBACiAgKiBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCBzb3VyY2VzIGZvciBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgotI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKKyNpbmNsdWRlIDxhc20vYnVnLmg+CiAjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CiAKICNpbmNsdWRlICJpZWVlMTM5NC5oIgogI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCiAjaW5jbHVkZSAiaG9zdHMuaCIKICNpbmNsdWRlICJpZWVlMTM5NF9jb3JlLmgiCi0jaW5jbHVkZSAiaGlnaGxldmVsLmgiCi0jaW5jbHVkZSAibm9kZW1nci5oIgogI2luY2x1ZGUgImllZWUxMzk0X3RyYW5zYWN0aW9ucy5oIgogCiAjZGVmaW5lIFBSRVBfQVNZTkNfSEVBRF9BRERSRVNTKHRjKSBcCkBAIC0zMSw2ICsyOSwxMyBAQAogICAgICAgICBwYWNrZXQtPmhlYWRlclsxXSA9IChwYWNrZXQtPmhvc3QtPm5vZGVfaWQgPDwgMTYpIHwgKGFkZHIgPj4gMzIpOyBcCiAgICAgICAgIHBhY2tldC0+aGVhZGVyWzJdID0gYWRkciAmIDB4ZmZmZmZmZmYKIAorI2lmbmRlZiBIUFNCX0RFQlVHX1RMQUJFTFMKK3N0YXRpYworI2VuZGlmCitzcGlubG9ja190IGhwc2JfdGxhYmVsX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKK3N0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRCh0bGFiZWxfd3EpOworCiBzdGF0aWMgdm9pZCBmaWxsX2FzeW5jX3JlYWRxdWFkKHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0LCB1NjQgYWRkcikKIHsKIAlQUkVQX0FTWU5DX0hFQURfQUREUkVTUyhUQ09ERV9SRUFEUSk7CkBAIC0xMTQsOSArMTE5LDQxIEBACiAJcGFja2V0LT50Y29kZSA9IFRDT0RFX0lTT19EQVRBOwogfQogCisvKiBzYW1lIGFzIGhwc2JfZ2V0X3RsYWJlbCwgZXhjZXB0IHRoYXQgaXQgcmV0dXJucyBpbW1lZGlhdGVseSAqLworc3RhdGljIGludCBocHNiX2dldF90bGFiZWxfYXRvbWljKHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsICp0cDsKKwl1OCAqbmV4dDsKKwlpbnQgdGxhYmVsLCBuID0gTk9ERUlEX1RPX05PREUocGFja2V0LT5ub2RlX2lkKTsKKworCS8qIEJyb2FkY2FzdCB0cmFuc2FjdGlvbnMgYXJlIGNvbXBsZXRlIG9uY2UgdGhlIHJlcXVlc3QgaGFzIGJlZW4gc2VudC4KKwkgKiBVc2UgdGhlIHNhbWUgdHJhbnNhY3Rpb24gbGFiZWwgZm9yIGFsbCBicm9hZGNhc3QgdHJhbnNhY3Rpb25zLiAqLworCWlmICh1bmxpa2VseShuID09IEFMTF9OT0RFUykpIHsKKwkJcGFja2V0LT50bGFiZWwgPSAwOworCQlyZXR1cm4gMDsKKwl9CisJdHAgPSBwYWNrZXQtPmhvc3QtPnRsX3Bvb2xbbl0ubWFwOworCW5leHQgPSAmcGFja2V0LT5ob3N0LT5uZXh0X3RsW25dOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwc2JfdGxhYmVsX2xvY2ssIGZsYWdzKTsKKwl0bGFiZWwgPSBmaW5kX25leHRfemVyb19iaXQodHAsIDY0LCAqbmV4dCk7CisJaWYgKHRsYWJlbCA+IDYzKQorCQl0bGFiZWwgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHRwLCA2NCk7CisJaWYgKHRsYWJlbCA+IDYzKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwc2JfdGxhYmVsX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIC1FQUdBSU47CisJfQorCV9fc2V0X2JpdCh0bGFiZWwsIHRwKTsKKwkqbmV4dCA9ICh0bGFiZWwgKyAxKSAmIDYzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhwc2JfdGxhYmVsX2xvY2ssIGZsYWdzKTsKKworCXBhY2tldC0+dGxhYmVsID0gdGxhYmVsOworCXJldHVybiAwOworfQorCiAvKioKICAqIGhwc2JfZ2V0X3RsYWJlbCAtIGFsbG9jYXRlIGEgdHJhbnNhY3Rpb24gbGFiZWwKLSAqIEBwYWNrZXQ6IHRoZSBwYWNrZXQgd2hvJ3MgdGxhYmVsL3Rwb29sIHdlIHNldAorICogQHBhY2tldDogdGhlIHBhY2tldCB3aG9zZSB0bGFiZWwgYW5kIHRsX3Bvb2wgd2Ugc2V0CiAgKgogICogRXZlcnkgYXN5bmNocm9ub3VzIHRyYW5zYWN0aW9uIG9uIHRoZSAxMzk0IGJ1cyBuZWVkcyBhIHRyYW5zYWN0aW9uCiAgKiBsYWJlbCB0byBtYXRjaCB0aGUgcmVzcG9uc2UgdG8gdGhlIHJlcXVlc3QuICBUaGlzIGxhYmVsIGhhcyB0byBiZQpAQCAtMTMwLDQyICsxNjcsMjUgQEAKICAqIFJldHVybiB2YWx1ZTogWmVybyBvbiBzdWNjZXNzLCBvdGhlcndpc2Ugbm9uLXplcm8uIEEgbm9uLXplcm8gcmV0dXJuCiAgKiBnZW5lcmFsbHkgbWVhbnMgdGhlcmUgYXJlIG5vIGF2YWlsYWJsZSB0bGFiZWxzLiBJZiB0aGlzIGlzIGNhbGxlZCBvdXQKICAqIG9mIGludGVycnVwdCBvciBhdG9taWMgY29udGV4dCwgdGhlbiBpdCB3aWxsIHNsZWVwIHVudGlsIGNhbiByZXR1cm4gYQotICogdGxhYmVsLgorICogdGxhYmVsIG9yIGEgc2lnbmFsIGlzIHJlY2VpdmVkLgogICovCiBpbnQgaHBzYl9nZXRfdGxhYmVsKHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0KQogewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0Jc3RydWN0IGhwc2JfdGxhYmVsX3Bvb2wgKnRwOwotCWludCBuID0gTk9ERUlEX1RPX05PREUocGFja2V0LT5ub2RlX2lkKTsKKwlpZiAoaXJxc19kaXNhYmxlZCgpIHx8IGluX2F0b21pYygpKQorCQlyZXR1cm4gaHBzYl9nZXRfdGxhYmVsX2F0b21pYyhwYWNrZXQpOwogCi0JaWYgKHVubGlrZWx5KG4gPT0gQUxMX05PREVTKSkKLQkJcmV0dXJuIDA7Ci0JdHAgPSAmcGFja2V0LT5ob3N0LT50cG9vbFtuXTsKLQotCWlmIChpcnFzX2Rpc2FibGVkKCkgfHwgaW5fYXRvbWljKCkpIHsKLQkJaWYgKGRvd25fdHJ5bG9jaygmdHAtPmNvdW50KSkKLQkJCXJldHVybiAxOwotCX0gZWxzZSB7Ci0JCWRvd24oJnRwLT5jb3VudCk7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7Ci0KLQlwYWNrZXQtPnRsYWJlbCA9IGZpbmRfbmV4dF96ZXJvX2JpdCh0cC0+cG9vbCwgNjQsIHRwLT5uZXh0KTsKLQlpZiAocGFja2V0LT50bGFiZWwgPiA2MykKLQkJcGFja2V0LT50bGFiZWwgPSBmaW5kX2ZpcnN0X3plcm9fYml0KHRwLT5wb29sLCA2NCk7Ci0JdHAtPm5leHQgPSAocGFja2V0LT50bGFiZWwgKyAxKSAlIDY0OwotCS8qIFNob3VsZCBfbmV2ZXJfIGhhcHBlbiAqLwotCUJVR19PTih0ZXN0X2FuZF9zZXRfYml0KHBhY2tldC0+dGxhYmVsLCB0cC0+cG9vbCkpOwotCXRwLT5hbGxvY2F0aW9ucysrOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRwLT5sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gMDsKKwkvKiBOQjogVGhlIG1hY3JvIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIGlzIGNhbGxlZCB3aXRoIGEgY29uZGl0aW9uCisJICogYXJndW1lbnQgd2l0aCBzaWRlIGVmZmVjdC4gIFRoaXMgaXMgb25seSBwb3NzaWJsZSBiZWNhdXNlIHRoZSBzaWRlCisJICogZWZmZWN0IGRvZXMgbm90IG9jY3VyIHVudGlsIHRoZSBjb25kaXRpb24gYmVjYW1lIHRydWUsIGFuZAorCSAqIHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZSgpIHdvbid0IGV2YWx1YXRlIHRoZSBjb25kaXRpb24gYWdhaW4gYWZ0ZXIKKwkgKiB0aGF0LiAqLworCXJldHVybiB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUodGxhYmVsX3dxLAorCQkJCQkhaHBzYl9nZXRfdGxhYmVsX2F0b21pYyhwYWNrZXQpKTsKIH0KIAogLyoqCiAgKiBocHNiX2ZyZWVfdGxhYmVsIC0gZnJlZSBhbiBhbGxvY2F0ZWQgdHJhbnNhY3Rpb24gbGFiZWwKLSAqIEBwYWNrZXQ6IHBhY2tldCB3aG9zIHRsYWJlbC90cG9vbCBuZWVkcyB0byBiZSBjbGVhcmVkCisgKiBAcGFja2V0OiBwYWNrZXQgd2hvc2UgdGxhYmVsIGFuZCB0bF9wb29sIG5lZWRzIHRvIGJlIGNsZWFyZWQKICAqCiAgKiBGcmVlcyB0aGUgdHJhbnNhY3Rpb24gbGFiZWwgYWxsb2NhdGVkIHdpdGggaHBzYl9nZXRfdGxhYmVsKCkuICBUaGUKICAqIHRsYWJlbCBoYXMgdG8gYmUgZnJlZWQgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbXBsZXRlIChpLmUuIHJlc3BvbnNlCkBAIC0xNzYsMjEgKzE5NiwyMCBAQAogICovCiB2b2lkIGhwc2JfZnJlZV90bGFiZWwoc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlzdHJ1Y3QgaHBzYl90bGFiZWxfcG9vbCAqdHA7Ci0JaW50IG4gPSBOT0RFSURfVE9fTk9ERShwYWNrZXQtPm5vZGVfaWQpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3MsICp0cDsKKwlpbnQgdGxhYmVsLCBuID0gTk9ERUlEX1RPX05PREUocGFja2V0LT5ub2RlX2lkKTsKIAogCWlmICh1bmxpa2VseShuID09IEFMTF9OT0RFUykpCiAJCXJldHVybjsKLQl0cCA9ICZwYWNrZXQtPmhvc3QtPnRwb29sW25dOworCXRwID0gcGFja2V0LT5ob3N0LT50bF9wb29sW25dLm1hcDsKKwl0bGFiZWwgPSBwYWNrZXQtPnRsYWJlbDsKKwlCVUdfT04odGxhYmVsID4gNjMgfHwgdGxhYmVsIDwgMCk7CiAKLQlCVUdfT04ocGFja2V0LT50bGFiZWwgPiA2MyB8fCBwYWNrZXQtPnRsYWJlbCA8IDApOworCXNwaW5fbG9ja19pcnFzYXZlKCZocHNiX3RsYWJlbF9sb2NrLCBmbGFncyk7CisJQlVHX09OKCFfX3Rlc3RfYW5kX2NsZWFyX2JpdCh0bGFiZWwsIHRwKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHBzYl90bGFiZWxfbG9jaywgZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRwLT5sb2NrLCBmbGFncyk7Ci0JQlVHX09OKCF0ZXN0X2FuZF9jbGVhcl9iaXQocGFja2V0LT50bGFiZWwsIHRwLT5wb29sKSk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHAtPmxvY2ssIGZsYWdzKTsKLQotCXVwKCZ0cC0+Y291bnQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmdGxhYmVsX3dxKTsKIH0KIAogaW50IGhwc2JfcGFja2V0X3N1Y2Nlc3Moc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQpCkBAIC0yMTQsNyArMjMzLDcgQEAKIAkJCQkgcGFja2V0LT5ub2RlX2lkKTsKIAkJCXJldHVybiAtRUFHQUlOOwogCQl9Ci0JCUhQU0JfUEFOSUMoInJlYWNoZWQgdW5yZWFjaGFibGUgY29kZSAxIGluICVzIiwgX19GVU5DVElPTl9fKTsKKwkJQlVHKCk7CiAKIAljYXNlIEFDS19CVVNZX1g6CiAJY2FzZSBBQ0tfQlVTWV9BOgpAQCAtMjYxLDggKzI4MCw3IEBACiAJCQkgcGFja2V0LT5hY2tfY29kZSwgcGFja2V0LT5ub2RlX2lkLCBwYWNrZXQtPnRjb2RlKTsKIAkJcmV0dXJuIC1FQUdBSU47CiAJfQotCi0JSFBTQl9QQU5JQygicmVhY2hlZCB1bnJlYWNoYWJsZSBjb2RlIDIgaW4gJXMiLCBfX0ZVTkNUSU9OX18pOworCUJVRygpOwogfQogCiBzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfbWFrZV9yZWFkcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5oIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90cmFuc2FjdGlvbnMuaAppbmRleCA0NWJhNzg0Li5jMTM2OWM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3RyYW5zYWN0aW9ucy5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmgKQEAgLTEsMzIgKzEsMzIgQEAKICNpZm5kZWYgX0lFRUUxMzk0X1RSQU5TQUNUSU9OU19ICiAjZGVmaW5lIF9JRUVFMTM5NF9UUkFOU0FDVElPTlNfSAogCi0jaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgogCi0vKgotICogR2V0IGFuZCBmcmVlIHRyYW5zYWN0aW9uIGxhYmVscy4KLSAqLworc3RydWN0IGhwc2JfcGFja2V0Oworc3RydWN0IGhwc2JfaG9zdDsKKwogaW50IGhwc2JfZ2V0X3RsYWJlbChzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldCk7CiB2b2lkIGhwc2JfZnJlZV90bGFiZWwoc3RydWN0IGhwc2JfcGFja2V0ICpwYWNrZXQpOwotCiBzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfbWFrZV9yZWFkcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsCiAJCQkJCSB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCk7CiBzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfbWFrZV9sb2NrcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHU2NCBhZGRyLCBpbnQgZXh0Y29kZSwgcXVhZGxldF90ICpkYXRhLAorCQkJCQkgdTY0IGFkZHIsIGludCBleHRjb2RlLCBxdWFkbGV0X3QgKmRhdGEsCiAJCQkJCSBxdWFkbGV0X3QgYXJnKTsKLXN0cnVjdCBocHNiX3BhY2tldCAqaHBzYl9tYWtlX2xvY2s2NHBhY2tldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBub2RlaWRfdCBub2RlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTY0IGFkZHIsIGludCBleHRjb2RlLCBvY3RsZXRfdCAqZGF0YSwKLQkJCQkJICBvY3RsZXRfdCBhcmcpOwotc3RydWN0IGhwc2JfcGFja2V0ICpocHNiX21ha2VfcGh5cGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVhZGxldF90IGRhdGEpIDsKLXN0cnVjdCBocHNiX3BhY2tldCAqaHBzYl9tYWtlX2lzb3BhY2tldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LAotCQkJCQlpbnQgbGVuZ3RoLCBpbnQgY2hhbm5lbCwKLQkJCQkJaW50IHRhZywgaW50IHN5bmMpOwotc3RydWN0IGhwc2JfcGFja2V0ICpocHNiX21ha2Vfd3JpdGVwYWNrZXQgKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsCi0JCQkJCSAgIHU2NCBhZGRyLCBxdWFkbGV0X3QgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCk7CitzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfbWFrZV9sb2NrNjRwYWNrZXQoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwKKwkJCQkJICAgbm9kZWlkX3Qgbm9kZSwgdTY0IGFkZHIsIGludCBleHRjb2RlLAorCQkJCQkgICBvY3RsZXRfdCAqZGF0YSwgb2N0bGV0X3QgYXJnKTsKK3N0cnVjdCBocHNiX3BhY2tldCAqaHBzYl9tYWtlX3BoeXBhY2tldChzdHJ1Y3QgaHBzYl9ob3N0ICpob3N0LCBxdWFkbGV0X3QgZGF0YSk7CitzdHJ1Y3QgaHBzYl9wYWNrZXQgKmhwc2JfbWFrZV9pc29wYWNrZXQoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IGxlbmd0aCwKKwkJCQkJaW50IGNoYW5uZWwsIGludCB0YWcsIGludCBzeW5jKTsKK3N0cnVjdCBocHNiX3BhY2tldCAqaHBzYl9tYWtlX3dyaXRlcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsCisJCQkJCSAgbm9kZWlkX3Qgbm9kZSwgdTY0IGFkZHIsCisJCQkJCSAgcXVhZGxldF90ICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOwogc3RydWN0IGhwc2JfcGFja2V0ICpocHNiX21ha2Vfc3RyZWFtcGFja2V0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIHU4ICpidWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCwgaW50IGNoYW5uZWwsIGludCB0YWcsIGludCBzeW5jKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoLCBpbnQgY2hhbm5lbCwgaW50IHRhZywKKwkJCQkJICAgaW50IHN5bmMpOwogCiAvKgogICogaHBzYl9wYWNrZXRfc3VjY2VzcyAtIE1ha2Ugc2Vuc2Ugb2YgdGhlIGFjayBhbmQgcmVwbHkgY29kZXMgYW5kCkBAIC00MCw5ICs0MCw4IEBACiAgKi8KIGludCBocHNiX3BhY2tldF9zdWNjZXNzKHN0cnVjdCBocHNiX3BhY2tldCAqcGFja2V0KTsKIAotCiAvKgotICogVGhlIGdlbmVyaWMgcmVhZCwgd3JpdGUgYW5kIGxvY2sgZnVuY3Rpb25zLiAgQWxsIHJlY29nbml6ZSB0aGUgbG9jYWwgbm9kZSBJRAorICogVGhlIGdlbmVyaWMgcmVhZCBhbmQgd3JpdGUgZnVuY3Rpb25zLiAgQWxsIHJlY29nbml6ZSB0aGUgbG9jYWwgbm9kZSBJRAogICogYW5kIGFjdCBhY2NvcmRpbmdseS4gIFJlYWQgYW5kIHdyaXRlIGF1dG9tYXRpY2FsbHkgdXNlIHF1YWRsZXQgY29tbWFuZHMgaWYKICAqIGxlbmd0aCA9PSA0IGFuZCBhbmQgYmxvY2sgY29tbWFuZHMgb3RoZXJ3aXNlIChob3dldmVyLCB0aGV5IGRvIG5vdCB5ZXQKICAqIHN1cHBvcnQgbGVuZ3RocyB0aGF0IGFyZSBub3QgYSBtdWx0aXBsZSBvZiA0KS4gIFlvdSBtdXN0IGV4cGxpY2l0bHkgc3BlY2lmaXkKQEAgLTU0LDQgKzUzLDggQEAKIGludCBocHNiX3dyaXRlKHN0cnVjdCBocHNiX2hvc3QgKmhvc3QsIG5vZGVpZF90IG5vZGUsIHVuc2lnbmVkIGludCBnZW5lcmF0aW9uLAogCSAgICAgICB1NjQgYWRkciwgcXVhZGxldF90ICpidWZmZXIsIHNpemVfdCBsZW5ndGgpOwogCisjaWZkZWYgSFBTQl9ERUJVR19UTEFCRUxTCitleHRlcm4gc3BpbmxvY2tfdCBocHNiX3RsYWJlbF9sb2NrOworI2VuZGlmCisKICNlbmRpZiAvKiBfSUVFRTEzOTRfVFJBTlNBQ1RJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHlwZXMuaCBiL2RyaXZlcnMvaWVlZTEzOTQvaWVlZTEzOTRfdHlwZXMuaAppbmRleCAzMTY1NjA5Li45ODAzYWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2llZWUxMzk0X3R5cGVzLmgKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pZWVlMTM5NF90eXBlcy5oCkBAIC0xLDM3ICsxLDExIEBACi0KICNpZm5kZWYgX0lFRUUxMzk0X1RZUEVTX0gKICNkZWZpbmUgX0lFRUUxMzk0X1RZUEVTX0gKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgotCi0jaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCi0KLS8qIFRyYW5zYWN0aW9uIExhYmVsIGhhbmRsaW5nICovCi1zdHJ1Y3QgaHBzYl90bGFiZWxfcG9vbCB7Ci0JREVDTEFSRV9CSVRNQVAocG9vbCwgNjQpOwotCXNwaW5sb2NrX3QgbG9jazsKLQl1OCBuZXh0OwotCXUzMiBhbGxvY2F0aW9uczsKLQlzdHJ1Y3Qgc2VtYXBob3JlIGNvdW50OwotfTsKLQotI2RlZmluZSBIUFNCX1RQT09MX0lOSVQoX3RwKQkJCVwKLWRvIHsJCQkJCQlcCi0JYml0bWFwX3plcm8oKF90cCktPnBvb2wsIDY0KTsJCVwKLQlzcGluX2xvY2tfaW5pdCgmKF90cCktPmxvY2spOwkJXAotCShfdHApLT5uZXh0ID0gMDsJCQlcCi0JKF90cCktPmFsbG9jYXRpb25zID0gMDsJCQlcCi0Jc2VtYV9pbml0KCYoX3RwKS0+Y291bnQsIDYzKTsJCVwKLX0gd2hpbGUgKDApCi0KLQogdHlwZWRlZiB1MzIgcXVhZGxldF90OwogdHlwZWRlZiB1NjQgb2N0bGV0X3Q7CiB0eXBlZGVmIHUxNiBub2RlaWRfdDsKQEAgLTU0LDQ2ICsyOCw0MCBAQAogI2RlZmluZSBOT0RFX0JVU19BUkdTKF9faG9zdCwgX19ub2RlaWQpCVwKIAlfX2hvc3QtPmlkLCBOT0RFSURfVE9fTk9ERShfX25vZGVpZCksIE5PREVJRF9UT19CVVMoX19ub2RlaWQpCiAKLSNkZWZpbmUgSFBTQl9QUklOVChsZXZlbCwgZm10LCBhcmdzLi4uKSBwcmludGsobGV2ZWwgImllZWUxMzk0OiAiIGZtdCAiXG4iICwgIyMgYXJncykKKyNkZWZpbmUgSFBTQl9QUklOVChsZXZlbCwgZm10LCBhcmdzLi4uKSBcCisJcHJpbnRrKGxldmVsICJpZWVlMTM5NDogIiBmbXQgIlxuIiAsICMjIGFyZ3MpCiAKLSNkZWZpbmUgSFBTQl9ERUJVRyhmbXQsIGFyZ3MuLi4pIEhQU0JfUFJJTlQoS0VSTl9ERUJVRywgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgSFBTQl9JTkZPKGZtdCwgYXJncy4uLikgSFBTQl9QUklOVChLRVJOX0lORk8sIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIEhQU0JfTk9USUNFKGZtdCwgYXJncy4uLikgSFBTQl9QUklOVChLRVJOX05PVElDRSwgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgSFBTQl9XQVJOKGZtdCwgYXJncy4uLikgSFBTQl9QUklOVChLRVJOX1dBUk5JTkcsIGZtdCAsICMjIGFyZ3MpCi0jZGVmaW5lIEhQU0JfRVJSKGZtdCwgYXJncy4uLikgSFBTQl9QUklOVChLRVJOX0VSUiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSFBTQl9ERUJVRyhmbXQsIGFyZ3MuLi4pCUhQU0JfUFJJTlQoS0VSTl9ERUJVRywgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSFBTQl9JTkZPKGZtdCwgYXJncy4uLikJCUhQU0JfUFJJTlQoS0VSTl9JTkZPLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBIUFNCX05PVElDRShmbXQsIGFyZ3MuLi4pCUhQU0JfUFJJTlQoS0VSTl9OT1RJQ0UsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIEhQU0JfV0FSTihmbXQsIGFyZ3MuLi4pCQlIUFNCX1BSSU5UKEtFUk5fV0FSTklORywgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSFBTQl9FUlIoZm10LCBhcmdzLi4uKQkJSFBTQl9QUklOVChLRVJOX0VSUiwgZm10ICwgIyMgYXJncykKIAogI2lmZGVmIENPTkZJR19JRUVFMTM5NF9WRVJCT1NFREVCVUcKLSNkZWZpbmUgSFBTQl9WRVJCT1NFKGZtdCwgYXJncy4uLikgSFBTQl9QUklOVChLRVJOX0RFQlVHLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBIUFNCX1ZFUkJPU0UoZm10LCBhcmdzLi4uKQlIUFNCX1BSSU5UKEtFUk5fREVCVUcsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIEhQU0JfREVCVUdfVExBQkVMUwogI2Vsc2UKLSNkZWZpbmUgSFBTQl9WRVJCT1NFKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgSFBTQl9WRVJCT1NFKGZtdCwgYXJncy4uLikJZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotI2RlZmluZSBIUFNCX1BBTklDKGZtdCwgYXJncy4uLikgcGFuaWMoImllZWUxMzk0OiAiIGZtdCAiXG4iICwgIyMgYXJncykKLQotI2RlZmluZSBIUFNCX1RSQUNFKCkgSFBTQl9QUklOVChLRVJOX0lORk8sICJUUkFDRSAtICVzLCAlcygpLCBsaW5lICVkIiwgX19GSUxFX18sIF9fRlVOQ1RJT05fXywgX19MSU5FX18pCi0KLQogI2lmZGVmIF9fQklHX0VORElBTgogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICptZW1jcHlfbGUzMih1MzIgKmRlc3QsIGNvbnN0IHUzMiAqX19zcmMsIHNpemVfdCBjb3VudCkKK3N0YXRpYyBpbmxpbmUgdm9pZCAqbWVtY3B5X2xlMzIodTMyICpkZXN0LCBjb25zdCB1MzIgKl9fc3JjLCBzaXplX3QgY291bnQpCiB7Ci0gICAgICAgIHZvaWQgKnRtcCA9IGRlc3Q7CisJdm9pZCAqdG1wID0gZGVzdDsKIAl1MzIgKnNyYyA9ICh1MzIgKilfX3NyYzsKIAotICAgICAgICBjb3VudCAvPSA0OwotCi0gICAgICAgIHdoaWxlIChjb3VudC0tKSB7Ci0gICAgICAgICAgICAgICAgKmRlc3QrKyA9IHN3YWIzMnAoc3JjKyspOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRtcDsKKwljb3VudCAvPSA0OworCXdoaWxlIChjb3VudC0tKQorCQkqZGVzdCsrID0gc3dhYjMycChzcmMrKyk7CisJcmV0dXJuIHRtcDsKIH0KIAogI2Vsc2UKIAogc3RhdGljIF9faW5saW5lX18gdm9pZCAqbWVtY3B5X2xlMzIodTMyICpkZXN0LCBjb25zdCB1MzIgKnNyYywgc2l6ZV90IGNvdW50KQogewotICAgICAgICByZXR1cm4gbWVtY3B5KGRlc3QsIHNyYywgY291bnQpOworCXJldHVybiBtZW1jcHkoZGVzdCwgc3JjLCBjb3VudCk7CiB9CiAKICNlbmRpZiAvKiBfX0JJR19FTkRJQU4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmMgYi9kcml2ZXJzL2llZWUxMzk0L2lzby5jCmluZGV4IGYyNjY4MGUuLjA4YmQxNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9pc28uYwpAQCAtOSw4ICs5LDExIEBACiAgKiBkaXJlY3Rvcnkgb2YgdGhlIGtlcm5lbCBzb3VyY2VzIGZvciBkZXRhaWxzLgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisKKyNpbmNsdWRlICJob3N0cy5oIgogI2luY2x1ZGUgImlzby5oIgogCiB2b2lkIGhwc2JfaXNvX3N0b3Aoc3RydWN0IGhwc2JfaXNvICppc28pCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L2lzby5oIGIvZHJpdmVycy9pZWVlMTM5NC9pc28uaAppbmRleCAzZWZjNjBiLi4xMjEwYTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L2lzby5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvaXNvLmgKQEAgLTEyLDMzICsxMiw0MCBAQAogI2lmbmRlZiBJRUVFMTM5NF9JU09fSAogI2RlZmluZSBJRUVFMTM5NF9JU09fSAogCi0jaW5jbHVkZSAiaG9zdHMuaCIKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKwogI2luY2x1ZGUgImRtYS5oIgogCitzdHJ1Y3QgaHBzYl9ob3N0OworCiAvKiBoaWdoLWxldmVsIElTTyBpbnRlcmZhY2UgKi8KIAotLyogVGhpcyBBUEkgc2VuZHMgYW5kIHJlY2VpdmVzIGlzb2Nocm9ub3VzIHBhY2tldHMgb24gYSBsYXJnZSwKLSAgIHZpcnR1YWxseS1jb250aWd1b3VzIGtlcm5lbCBtZW1vcnkgYnVmZmVyLiBUaGUgYnVmZmVyIG1heSBiZSBtYXBwZWQKLSAgIGludG8gYSB1c2VyLXNwYWNlIHByb2Nlc3MgZm9yIHplcm8tY29weSB0cmFuc21pc3Npb24gYW5kIHJlY2VwdGlvbi4KLQotICAgVGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJvdW5kYXJpZXMgYmV0d2VlbiBwYWNrZXRzIGluIHRoZSBidWZmZXIuIEEKLSAgIHBhY2tldCBtYXkgYmUgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQgYXQgYW55IGxvY2F0aW9uLiBIb3dldmVyLAotICAgbG93LWxldmVsIGRyaXZlcnMgbWF5IGltcG9zZSBjZXJ0YWluIHJlc3RyaWN0aW9ucyBvbiBhbGlnbm1lbnQgb3IKLSAgIHNpemUgb2YgcGFja2V0cy4gKGUuZy4gaW4gT0hDSSBubyBwYWNrZXQgbWF5IGNyb3NzIGEgcGFnZSBib3VuZGFyeSwKLSAgIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBxdWFkbGV0LWFsaWduZWQpCi0qLworLyoKKyAqIFRoaXMgQVBJIHNlbmRzIGFuZCByZWNlaXZlcyBpc29jaHJvbm91cyBwYWNrZXRzIG9uIGEgbGFyZ2UsCisgKiB2aXJ0dWFsbHktY29udGlndW91cyBrZXJuZWwgbWVtb3J5IGJ1ZmZlci4gVGhlIGJ1ZmZlciBtYXkgYmUgbWFwcGVkCisgKiBpbnRvIGEgdXNlci1zcGFjZSBwcm9jZXNzIGZvciB6ZXJvLWNvcHkgdHJhbnNtaXNzaW9uIGFuZCByZWNlcHRpb24uCisgKgorICogVGhlcmUgYXJlIG5vIGV4cGxpY2l0IGJvdW5kYXJpZXMgYmV0d2VlbiBwYWNrZXRzIGluIHRoZSBidWZmZXIuIEEKKyAqIHBhY2tldCBtYXkgYmUgdHJhbnNtaXR0ZWQgb3IgcmVjZWl2ZWQgYXQgYW55IGxvY2F0aW9uLiBIb3dldmVyLAorICogbG93LWxldmVsIGRyaXZlcnMgbWF5IGltcG9zZSBjZXJ0YWluIHJlc3RyaWN0aW9ucyBvbiBhbGlnbm1lbnQgb3IKKyAqIHNpemUgb2YgcGFja2V0cy4gKGUuZy4gaW4gT0hDSSBubyBwYWNrZXQgbWF5IGNyb3NzIGEgcGFnZSBib3VuZGFyeSwKKyAqIGFuZCBwYWNrZXRzIHNob3VsZCBiZSBxdWFkbGV0LWFsaWduZWQpCisgKi8KIAogLyogUGFja2V0IGRlc2NyaXB0b3IgLSB0aGUgQVBJIG1haW50YWlucyBhIHJpbmcgYnVmZmVyIG9mIHRoZXNlIHBhY2tldAotICAgZGVzY3JpcHRvcnMgaW4ga2VybmVsIG1lbW9yeSAoaHBzYl9pc28uaW5mb3NbXSkuICAqLwotCisgKiBkZXNjcmlwdG9ycyBpbiBrZXJuZWwgbWVtb3J5IChocHNiX2lzby5pbmZvc1tdKS4gICovCiBzdHJ1Y3QgaHBzYl9pc29fcGFja2V0X2luZm8gewogCS8qIG9mZnNldCBvZiBkYXRhIHBheWxvYWQgcmVsYXRpdmUgdG8gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGJ1ZmZlciAqLwogCV9fdTMyIG9mZnNldDsKIAotCS8qIGxlbmd0aCBvZiB0aGUgZGF0YSBwYXlsb2FkLCBpbiBieXRlcyAobm90IGluY2x1ZGluZyB0aGUgaXNvY2hyb25vdXMgaGVhZGVyKSAqLworCS8qIGxlbmd0aCBvZiB0aGUgZGF0YSBwYXlsb2FkLCBpbiBieXRlcyAobm90IGluY2x1ZGluZyB0aGUgaXNvY2hyb25vdXMKKwkgKiBoZWFkZXIpICovCiAJX191MTYgbGVuOwogCi0JLyogKHJlY3Ygb25seSkgdGhlIGN5Y2xlIG51bWJlciAobW9kIDgwMDApIG9uIHdoaWNoIHRoZSBwYWNrZXQgd2FzIHJlY2VpdmVkICovCisJLyogKHJlY3Ygb25seSkgdGhlIGN5Y2xlIG51bWJlciAobW9kIDgwMDApIG9uIHdoaWNoIHRoZSBwYWNrZXQgd2FzCisJICogcmVjZWl2ZWQgKi8KIAlfX3UxNiBjeWNsZTsKIAogCS8qIChyZWN2IG9ubHkpIGNoYW5uZWwgb24gd2hpY2ggdGhlIHBhY2tldCB3YXMgcmVjZWl2ZWQgKi8KQEAgLTQ4LDEyICs1NSwxMCBAQAogCV9fdTggdGFnOwogCV9fdTggc3k7CiAKLQkvKgotCSAqIGxlbmd0aCBpbiBieXRlcyBvZiB0aGUgcGFja2V0IGluY2x1ZGluZyBoZWFkZXIvdHJhaWxlci4KLQkgKiBNVVNUIGJlIGF0IHN0cnVjdHVyZSBlbmQsIHNpbmNlIHRoZSBmaXJzdCBwYXJ0IG9mIHRoaXMgc3RydWN0dXJlIGlzIGFsc28gCi0JICogZGVmaW5lZCBpbiByYXcxMzk0LmggKGkuZS4gc3RydWN0IHJhdzEzOTRfaXNvX3BhY2tldF9pbmZvKSwgaXMgY29waWVkIHRvIAotCSAqIHVzZXJzcGFjZSBhbmQgaXMgYWNjZXNzZWQgdGhlcmUgdGhyb3VnaCBsaWJyYXcxMzk0LiAKLQkgKi8KKwkvKiBsZW5ndGggaW4gYnl0ZXMgb2YgdGhlIHBhY2tldCBpbmNsdWRpbmcgaGVhZGVyL3RyYWlsZXIuCisJICogTVVTVCBiZSBhdCBzdHJ1Y3R1cmUgZW5kLCBzaW5jZSB0aGUgZmlyc3QgcGFydCBvZiB0aGlzIHN0cnVjdHVyZSBpcworCSAqIGFsc28gZGVmaW5lZCBpbiByYXcxMzk0LmggKGkuZS4gc3RydWN0IHJhdzEzOTRfaXNvX3BhY2tldF9pbmZvKSwgaXMKKwkgKiBjb3BpZWQgdG8gdXNlcnNwYWNlIGFuZCBpcyBhY2Nlc3NlZCB0aGVyZSB0aHJvdWdoIGxpYnJhdzEzOTQuICovCiAJX191MTYgdG90YWxfbGVuOwogfTsKIApAQCAtNzUsOCArODAsOCBAQAogCXZvaWQgKmhvc3RkYXRhOwogCiAJLyogYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgKGZyb20gaW50ZXJydXB0IGNvbnRleHQpIGFmdGVyCi0gICAgICAgICAgIG91dGdvaW5nIHBhY2tldHMgaGF2ZSBiZWVuIHNlbnQsIG9yIGluY29taW5nIHBhY2tldHMgaGF2ZQotICAgICAgICAgICBhcnJpdmVkICovCisJICogb3V0Z29pbmcgcGFja2V0cyBoYXZlIGJlZW4gc2VudCwgb3IgaW5jb21pbmcgcGFja2V0cyBoYXZlCisJICogYXJyaXZlZCAqLwogCXZvaWQgKCpjYWxsYmFjaykoc3RydWN0IGhwc2JfaXNvKik7CiAKIAkvKiB3YWl0IGZvciBidWZmZXIgc3BhY2UgKi8KQEAgLTg4LDcgKzkzLDcgQEAKIAogCiAJLyogZ3JlYXRlc3QgIyBvZiBwYWNrZXRzIGJldHdlZW4gaW50ZXJydXB0cyAtIGNvbnRyb2xzCi0JICAgdGhlIG1heGltdW0gbGF0ZW5jeSBvZiB0aGUgYnVmZmVyICovCisJICogdGhlIG1heGltdW0gbGF0ZW5jeSBvZiB0aGUgYnVmZmVyICovCiAJaW50IGlycV9pbnRlcnZhbDsKIAogCS8qIHRoZSBidWZmZXIgZm9yIHBhY2tldCBkYXRhIHBheWxvYWRzICovCkBAIC0xMTIsOCArMTE3LDggQEAKIAlpbnQgcGt0X2RtYTsKIAogCS8qIGhvdyBtYW55IHBhY2tldHMsIHN0YXJ0aW5nIGF0IGZpcnN0X3BhY2tldDoKLQkgICAodHJhbnNtaXQpIGFyZSByZWFkeSB0byBiZSBmaWxsZWQgd2l0aCBkYXRhCi0JICAgKHJlY2VpdmUpICBjb250YWluIHJlY2VpdmVkIGRhdGEgKi8KKwkgKiAodHJhbnNtaXQpIGFyZSByZWFkeSB0byBiZSBmaWxsZWQgd2l0aCBkYXRhCisJICogKHJlY2VpdmUpICBjb250YWluIHJlY2VpdmVkIGRhdGEgKi8KIAlpbnQgbl9yZWFkeV9wYWNrZXRzOwogCiAJLyogaG93IG1hbnkgdGltZXMgdGhlIGJ1ZmZlciBoYXMgb3ZlcmZsb3dlZCBvciB1bmRlcmZsb3dlZCAqLwpAQCAtMTM0LDcgKzEzOSw3IEBACiAJaW50IHN0YXJ0X2N5Y2xlOwogCiAJLyogY3ljbGUgYXQgd2hpY2ggbmV4dCBwYWNrZXQgd2lsbCBiZSB0cmFuc21pdHRlZCwKLQkgICAtMSBpZiBub3Qga25vd24gKi8KKwkgKiAtMSBpZiBub3Qga25vd24gKi8KIAlpbnQgeG1pdF9jeWNsZTsKIAogCS8qIHJpbmdidWZmZXIgb2YgcGFja2V0IGRlc2NyaXB0b3JzIGluIHJlZ3VsYXIga2VybmVsIG1lbW9yeQpAQCAtMTcwLDI1ICsxNzUsMzAgQEAKIGludCBocHNiX2lzb19yZWN2X3NldF9jaGFubmVsX21hc2soc3RydWN0IGhwc2JfaXNvICppc28sIHU2NCBtYXNrKTsKIAogLyogc3RhcnQvc3RvcCBETUEgKi8KLWludCBocHNiX2lzb194bWl0X3N0YXJ0KHN0cnVjdCBocHNiX2lzbyAqaXNvLCBpbnQgc3RhcnRfb25fY3ljbGUsIGludCBwcmVidWZmZXIpOwotaW50IGhwc2JfaXNvX3JlY3Zfc3RhcnQoc3RydWN0IGhwc2JfaXNvICppc28sIGludCBzdGFydF9vbl9jeWNsZSwgaW50IHRhZ19tYXNrLCBpbnQgc3luYyk7CitpbnQgaHBzYl9pc29feG1pdF9zdGFydChzdHJ1Y3QgaHBzYl9pc28gKmlzbywgaW50IHN0YXJ0X29uX2N5Y2xlLAorCQkJaW50IHByZWJ1ZmZlcik7CitpbnQgaHBzYl9pc29fcmVjdl9zdGFydChzdHJ1Y3QgaHBzYl9pc28gKmlzbywgaW50IHN0YXJ0X29uX2N5Y2xlLAorCQkJaW50IHRhZ19tYXNrLCBpbnQgc3luYyk7CiB2b2lkIGhwc2JfaXNvX3N0b3Aoc3RydWN0IGhwc2JfaXNvICppc28pOwogCiAvKiBkZWFsbG9jYXRlIGJ1ZmZlciBhbmQgRE1BIGNvbnRleHQgKi8KIHZvaWQgaHBzYl9pc29fc2h1dGRvd24oc3RydWN0IGhwc2JfaXNvICppc28pOwogCi0vKiBxdWV1ZSBhIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uLiAnb2Zmc2V0JyBpcyByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZQotICAgRE1BIGJ1ZmZlciwgd2hlcmUgdGhlIHBhY2tldCdzIGRhdGEgcGF5bG9hZCBzaG91bGQgYWxyZWFkeSBoYXZlIGJlZW4gcGxhY2VkICovCi1pbnQgaHBzYl9pc29feG1pdF9xdWV1ZV9wYWNrZXQoc3RydWN0IGhwc2JfaXNvICppc28sIHUzMiBvZmZzZXQsIHUxNiBsZW4sIHU4IHRhZywgdTggc3kpOworLyogcXVldWUgYSBwYWNrZXQgZm9yIHRyYW5zbWlzc2lvbi4KKyAqICdvZmZzZXQnIGlzIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIERNQSBidWZmZXIsIHdoZXJlIHRoZSBwYWNrZXQncworICogZGF0YSBwYXlsb2FkIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBwbGFjZWQuICovCitpbnQgaHBzYl9pc29feG1pdF9xdWV1ZV9wYWNrZXQoc3RydWN0IGhwc2JfaXNvICppc28sIHUzMiBvZmZzZXQsIHUxNiBsZW4sCisJCQkgICAgICAgdTggdGFnLCB1OCBzeSk7CiAKIC8qIHdhaXQgdW50aWwgYWxsIHF1ZXVlZCBwYWNrZXRzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCB0byB0aGUgYnVzICovCiBpbnQgaHBzYl9pc29feG1pdF9zeW5jKHN0cnVjdCBocHNiX2lzbyAqaXNvKTsKIAogLyogTiBwYWNrZXRzIGhhdmUgYmVlbiByZWFkIG91dCBvZiB0aGUgYnVmZmVyLCByZS11c2UgdGhlIGJ1ZmZlciBzcGFjZSAqLwotaW50ICBocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhzdHJ1Y3QgaHBzYl9pc28gKnJlY3YsIHVuc2lnbmVkIGludCBuX3BhY2tldHMpOworaW50ICBocHNiX2lzb19yZWN2X3JlbGVhc2VfcGFja2V0cyhzdHJ1Y3QgaHBzYl9pc28gKnJlY3YsCisJCQkJICAgdW5zaWduZWQgaW50IG5fcGFja2V0cyk7CiAKIC8qIGNoZWNrIGZvciBhcnJpdmFsIG9mIG5ldyBwYWNrZXRzIGltbWVkaWF0ZWx5IChldmVuIGlmIGlycV9pbnRlcnZhbAotICAgaGFzIG5vdCB5ZXQgYmVlbiByZWFjaGVkKSAqLworICogaGFzIG5vdCB5ZXQgYmVlbiByZWFjaGVkKSAqLwogaW50IGhwc2JfaXNvX3JlY3ZfZmx1c2goc3RydWN0IGhwc2JfaXNvICppc28pOwogCiAvKiByZXR1cm5zICMgb2YgcGFja2V0cyByZWFkeSB0byBzZW5kIG9yIHJlY2VpdmUgKi8KQEAgLTE5NywxNCArMjA3LDE1IEBACiAvKiB0aGUgZm9sbG93aW5nIGFyZSBjYWxsYmFja3MgYXZhaWxhYmxlIHRvIGxvdy1sZXZlbCBkcml2ZXJzICovCiAKIC8qIGNhbGwgYWZ0ZXIgYSBwYWNrZXQgaGFzIGJlZW4gdHJhbnNtaXR0ZWQgdG8gdGhlIGJ1cyAoaW50ZXJydXB0IGNvbnRleHQgaXMgT0spCi0gICAnY3ljbGUnIGlzIHRoZSBfZXhhY3RfIGN5Y2xlIHRoZSBwYWNrZXQgd2FzIHNlbnQgb24KLSAgICdlcnJvcicgc2hvdWxkIGJlIG5vbi16ZXJvIGlmIHNvbWUgc29ydCBvZiBlcnJvciBvY2N1cnJlZCB3aGVuIHNlbmRpbmcgdGhlIHBhY2tldAotKi8KKyAqICdjeWNsZScgaXMgdGhlIF9leGFjdF8gY3ljbGUgdGhlIHBhY2tldCB3YXMgc2VudCBvbgorICogJ2Vycm9yJyBzaG91bGQgYmUgbm9uLXplcm8gaWYgc29tZSBzb3J0IG9mIGVycm9yIG9jY3VycmVkIHdoZW4gc2VuZGluZyB0aGUKKyAqICBwYWNrZXQgKi8KIHZvaWQgaHBzYl9pc29fcGFja2V0X3NlbnQoc3RydWN0IGhwc2JfaXNvICppc28sIGludCBjeWNsZSwgaW50IGVycm9yKTsKIAogLyogY2FsbCBhZnRlciBhIHBhY2tldCBoYXMgYmVlbiByZWNlaXZlZCAoaW50ZXJydXB0IGNvbnRleHQgT0spICovCiB2b2lkIGhwc2JfaXNvX3BhY2tldF9yZWNlaXZlZChzdHJ1Y3QgaHBzYl9pc28gKmlzbywgdTMyIG9mZnNldCwgdTE2IGxlbiwKLQkJCSAgICAgIHUxNiB0b3RhbF9sZW4sIHUxNiBjeWNsZSwgdTggY2hhbm5lbCwgdTggdGFnLCB1OCBzeSk7CisJCQkgICAgICB1MTYgdG90YWxfbGVuLCB1MTYgY3ljbGUsIHU4IGNoYW5uZWwsIHU4IHRhZywKKwkJCSAgICAgIHU4IHN5KTsKIAogLyogY2FsbCB0byB3YWtlIHdhaXRpbmcgcHJvY2Vzc2VzIGFmdGVyIGJ1ZmZlciBzcGFjZSBoYXMgb3BlbmVkIHVwLiAqLwogdm9pZCBocHNiX2lzb193YWtlKHN0cnVjdCBocHNiX2lzbyAqaXNvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWVlZTEzOTQvbm9kZW1nci5jIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKaW5kZXggZDU0MWI1MC4uM2U3OTc0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmMKQEAgLTEyLDI2ICsxMiwyMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC9rbW9kLmg+Ci0jaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva3RocmVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogCi0jaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKKyNpbmNsdWRlICJjc3IuaCIKKyNpbmNsdWRlICJoaWdobGV2ZWwuaCIKKyNpbmNsdWRlICJob3N0cy5oIgogI2luY2x1ZGUgImllZWUxMzk0LmgiCiAjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgotI2luY2x1ZGUgImhvc3RzLmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfaG90cGx1Zy5oIgorI2luY2x1ZGUgImllZWUxMzk0X3R5cGVzLmgiCiAjaW5jbHVkZSAiaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmgiCi0jaW5jbHVkZSAiaGlnaGxldmVsLmgiCi0jaW5jbHVkZSAiY3NyLmgiCiAjaW5jbHVkZSAibm9kZW1nci5oIgogCiBzdGF0aWMgaW50IGlnbm9yZV9kcml2ZXJzOwotbW9kdWxlX3BhcmFtKGlnbm9yZV9kcml2ZXJzLCBpbnQsIDA0NDQpOworbW9kdWxlX3BhcmFtKGlnbm9yZV9kcml2ZXJzLCBpbnQsIFNfSVJVR08gfCBTX0lXVVNSKTsKIE1PRFVMRV9QQVJNX0RFU0MoaWdub3JlX2RyaXZlcnMsICJEaXNhYmxlIGF1dG9tYXRpYyBwcm9iaW5nIGZvciBkcml2ZXJzLiIpOwogCiBzdHJ1Y3Qgbm9kZW1ncl9jc3JfaW5mbyB7CkBAIC03MSw3ICs2OCw3IEBACiAJdTggaSwgKnNwZWVkLCBvbGRfc3BlZWQsIGdvb2Rfc3BlZWQ7CiAJaW50IHJldDsKIAotCXNwZWVkID0gY2ktPmhvc3QtPnNwZWVkICsgTk9ERUlEX1RPX05PREUoY2ktPm5vZGVpZCk7CisJc3BlZWQgPSAmKGNpLT5ob3N0LT5zcGVlZFtOT0RFSURfVE9fTk9ERShjaS0+bm9kZWlkKV0pOwogCW9sZF9zcGVlZCA9ICpzcGVlZDsKIAlnb29kX3NwZWVkID0gSUVFRTEzOTRfU1BFRURfTUFYICsgMTsKIApAQCAtMTYxLDE2ICsxNTgsMTIgQEAKICAqIGJ1dCBub3cgd2UgYXJlIG11Y2ggc2ltcGxlciBiZWNhdXNlIG9mIHRoZSBMRE0uCiAgKi8KIAotc3RhdGljIERFQ0xBUkVfTVVURVgobm9kZW1ncl9zZXJpYWxpemUpOworc3RhdGljIERFRklORV9NVVRFWChub2RlbWdyX3NlcmlhbGl6ZSk7CiAKIHN0cnVjdCBob3N0X2luZm8gewogCXN0cnVjdCBocHNiX2hvc3QgKmhvc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwotCXN0cnVjdCBjb21wbGV0aW9uIGV4aXRlZDsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHJlc2V0X3NlbTsKLQlpbnQgcGlkOwotCWNoYXIgZGFlbW9uX25hbWVbMTVdOwotCWludCBraWxsX21lOworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGhyZWFkOwogfTsKIAogc3RhdGljIGludCBub2RlbWdyX2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7CkBAIC0zMzQsMzQgKzMyNyw0NCBAQAogc3RhdGljIERFVklDRV9BVFRSKGJ1c19vcHRpb25zLFNfSVJVR08sZndfc2hvd19uZV9idXNfb3B0aW9ucyxOVUxMKTsKIAogCi0vKiB0bGFiZWxzX2ZyZWUsIHRsYWJlbHNfYWxsb2NhdGlvbnMsIHRsYWJlbHNfbWFzayBhcmUgcmVhZCBub24tYXRvbWljYWxseQotICogaGVyZSwgdGhlcmVmb3JlIGRpc3BsYXllZCB2YWx1ZXMgbWF5IGJlIG9jY2FzaW9uYWxseSB3cm9uZy4gKi8KLXN0YXRpYyBzc2l6ZV90IGZ3X3Nob3dfbmVfdGxhYmVsc19mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKKyNpZmRlZiBIUFNCX0RFQlVHX1RMQUJFTFMKK3N0YXRpYyBzc2l6ZV90IGZ3X3Nob3dfbmVfdGxhYmVsc19mcmVlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKIHsKIAlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmUgPSBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3Qgbm9kZV9lbnRyeSwgZGV2aWNlKTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgNjQgLSBiaXRtYXBfd2VpZ2h0KG5lLT50cG9vbC0+cG9vbCwgNjQpKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgKnRwID0gbmUtPmhvc3QtPnRsX3Bvb2xbTk9ERUlEX1RPX05PREUobmUtPm5vZGVpZCldLm1hcDsKKwlpbnQgdGY7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaHBzYl90bGFiZWxfbG9jaywgZmxhZ3MpOworCXRmID0gNjQgLSBiaXRtYXBfd2VpZ2h0KHRwLCA2NCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHBzYl90bGFiZWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHRmKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUih0bGFiZWxzX2ZyZWUsU19JUlVHTyxmd19zaG93X25lX3RsYWJlbHNfZnJlZSxOVUxMKTsKIAogCi1zdGF0aWMgc3NpemVfdCBmd19zaG93X25lX3RsYWJlbHNfYWxsb2NhdGlvbnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3QgZndfc2hvd19uZV90bGFiZWxzX21hc2soc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBub2RlX2VudHJ5LCBkZXZpY2UpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiV1XG4iLCBuZS0+dHBvb2wtPmFsbG9jYXRpb25zKTsKLX0KLXN0YXRpYyBERVZJQ0VfQVRUUih0bGFiZWxzX2FsbG9jYXRpb25zLFNfSVJVR08sZndfc2hvd19uZV90bGFiZWxzX2FsbG9jYXRpb25zLE5VTEwpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgbG9uZyAqdHAgPSBuZS0+aG9zdC0+dGxfcG9vbFtOT0RFSURfVE9fTk9ERShuZS0+bm9kZWlkKV0ubWFwOworCXU2NCB0bTsKIAotCi1zdGF0aWMgc3NpemVfdCBmd19zaG93X25lX3RsYWJlbHNfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCi17Ci0Jc3RydWN0IG5vZGVfZW50cnkgKm5lID0gY29udGFpbmVyX29mKGRldiwgc3RydWN0IG5vZGVfZW50cnksIGRldmljZSk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmhwc2JfdGxhYmVsX2xvY2ssIGZsYWdzKTsKICNpZiAoQklUU19QRVJfTE9ORyA8PSAzMikKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwOGx4JTA4bHhcbiIsIG5lLT50cG9vbC0+cG9vbFswXSwgbmUtPnRwb29sLT5wb29sWzFdKTsKKwl0bSA9ICgodTY0KXRwWzBdIDw8IDMyKSArIHRwWzFdOwogI2Vsc2UKLQlyZXR1cm4gc3ByaW50ZihidWYsICIweCUwMTZseFxuIiwgbmUtPnRwb29sLT5wb29sWzBdKTsKKwl0bSA9IHRwWzBdOwogI2VuZGlmCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHBzYl90bGFiZWxfbG9jaywgZmxhZ3MpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiMHglMDE2bGx4XG4iLCB0bSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIodGxhYmVsc19tYXNrLCBTX0lSVUdPLCBmd19zaG93X25lX3RsYWJlbHNfbWFzaywgTlVMTCk7CisjZW5kaWYgLyogSFBTQl9ERUJVR19UTEFCRUxTICovCiAKIAogc3RhdGljIHNzaXplX3QgZndfc2V0X2lnbm9yZV9kcml2ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCkBAIC00MDgsMjYgKzQxMSwxMSBAQAogfQogc3RhdGljIEJVU19BVFRSKGRlc3Ryb3lfbm9kZSwgU19JV1VTUiB8IFNfSVJVR08sIGZ3X2dldF9kZXN0cm95X25vZGUsIGZ3X3NldF9kZXN0cm95X25vZGUpOwogCi1zdGF0aWMgaW50IG5vZGVtZ3JfcmVzY2FuX2J1c190aHJlYWQodm9pZCAqX191bnVzZWQpCi17Ci0JLyogTm8gdXNlcmxldmVsIGFjY2VzcyBuZWVkZWQgKi8KLQlkYWVtb25pemUoImtmd3Jlc2NhbiIpOwotCi0JYnVzX3Jlc2Nhbl9kZXZpY2VzKCZpZWVlMTM5NF9idXNfdHlwZSk7Ci0KLQlyZXR1cm4gMDsKLX0KIAogc3RhdGljIHNzaXplX3QgZndfc2V0X3Jlc2NhbihzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0JaW50IHN0YXRlID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7Ci0KLQkvKiBEb24ndCB3YWl0IGZvciB0aGlzLCBvciBjYXJlIGFib3V0IGVycm9ycy4gUm9vdCBjb3VsZCBkbwotCSAqIHNvbWV0aGluZyBzdHVwaWQgYW5kIHNwYXduIHRoaXMgYSBsb3Qgb2YgdGltZXMsIGJ1dCB0aGF0J3MKLQkgKiByb290J3MgZmF1bHQuICovCi0JaWYgKHN0YXRlID09IDEpCi0JCWtlcm5lbF90aHJlYWQobm9kZW1ncl9yZXNjYW5fYnVzX3RocmVhZCwgTlVMTCwgQ0xPTkVfS0VSTkVMKTsKLQorCWlmIChzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKSA9PSAxKQorCQlidXNfcmVzY2FuX2RldmljZXMoJmllZWUxMzk0X2J1c190eXBlKTsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgc3NpemVfdCBmd19nZXRfcmVzY2FuKHN0cnVjdCBidXNfdHlwZSAqYnVzLCBjaGFyICpidWYpCkBAIC00ODMsOSArNDcxLDEwIEBACiAJJmRldl9hdHRyX25lX3ZlbmRvcl9pZCwKIAkmZGV2X2F0dHJfbmVfbm9kZWlkLAogCSZkZXZfYXR0cl9idXNfb3B0aW9ucywKKyNpZmRlZiBIUFNCX0RFQlVHX1RMQUJFTFMKIAkmZGV2X2F0dHJfdGxhYmVsc19mcmVlLAotCSZkZXZfYXR0cl90bGFiZWxzX2FsbG9jYXRpb25zLAogCSZkZXZfYXR0cl90bGFiZWxzX21hc2ssCisjZW5kaWYKIH07CiAKIApAQCAtODA0LDggKzc5Myw2IEBACiAJaWYgKCFuZSkKIAkJcmV0dXJuIE5VTEw7CiAKLQluZS0+dHBvb2wgPSAmaG9zdC0+dHBvb2xbbm9kZWlkICYgTk9ERV9NQVNLXTsKLQogCW5lLT5ob3N0ID0gaG9zdDsKIAluZS0+bm9kZWlkID0gbm9kZWlkOwogCW5lLT5nZW5lcmF0aW9uID0gZ2VuZXJhdGlvbjsKQEAgLTEyNTEsNiArMTIzOCw3IEBACiAJb2N0bGV0X3QgZ3VpZDsKIAlzdHJ1Y3QgY3NyMTIxMl9jc3IgKmNzcjsKIAlzdHJ1Y3Qgbm9kZW1ncl9jc3JfaW5mbyAqY2k7CisJdTggKnNwZWVkOwogCiAJY2kgPSBrbWFsbG9jKHNpemVvZigqY2kpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWNpKQpAQCAtMTI1OSw4ICsxMjQ3LDEyIEBACiAJY2ktPmhvc3QgPSBob3N0OwogCWNpLT5ub2RlaWQgPSBub2RlaWQ7CiAJY2ktPmdlbmVyYXRpb24gPSBnZW5lcmF0aW9uOwotCWNpLT5zcGVlZF91bnZlcmlmaWVkID0KLQkJaG9zdC0+c3BlZWRbTk9ERUlEX1RPX05PREUobm9kZWlkKV0gPiBJRUVFMTM5NF9TUEVFRF8xMDA7CisKKwkvKiBQcmVwYXJlIGZvciBzcGVlZCBwcm9iZSB3aGljaCBvY2N1cnMgd2hlbiByZWFkaW5nIHRoZSBST00gKi8KKwlzcGVlZCA9ICYoaG9zdC0+c3BlZWRbTk9ERUlEX1RPX05PREUobm9kZWlkKV0pOworCWlmICgqc3BlZWQgPiBob3N0LT5jc3IubG5rX3NwZCkKKwkJKnNwZWVkID0gaG9zdC0+Y3NyLmxua19zcGQ7CisJY2ktPnNwZWVkX3VudmVyaWZpZWQgPSAqc3BlZWQgPiBJRUVFMTM5NF9TUEVFRF8xMDA7CiAKIAkvKiBXZSBuZWVkIHRvIGRldGVjdCB3aGVuIHRoZSBDb25maWdST00ncyBnZW5lcmF0aW9uIGhhcyBjaGFuZ2VkLAogCSAqIHNvIHdlIG9ubHkgdXBkYXRlIHRoZSBub2RlJ3MgaW5mbyB3aGVuIGl0IG5lZWRzIHRvIGJlLiAgKi8KQEAgLTEzMDAsOCArMTI5Miw2IEBACiAJCW5vZGVtZ3JfY3JlYXRlX25vZGUoZ3VpZCwgY3NyLCBoaSwgbm9kZWlkLCBnZW5lcmF0aW9uKTsKIAllbHNlCiAJCW5vZGVtZ3JfdXBkYXRlX25vZGUobmUsIGNzciwgaGksIG5vZGVpZCwgZ2VuZXJhdGlvbik7Ci0KLQlyZXR1cm47CiB9CiAKIApAQCAtMTMyNiw2ICsxMzE2LDcgQEAKIH0KIAogCisvKiBDYWxsZXIgbmVlZHMgdG8gaG9sZCBub2RlbWdyX3VkX2NsYXNzLnN1YnN5cy5yd3NlbSBhcyByZWFkZXIuICovCiBzdGF0aWMgdm9pZCBub2RlbWdyX3N1c3BlbmRfbmUoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNkZXY7CkBAIC0xMzYxLDYgKzEzNTIsNyBAQAogCW5lLT5pbl9saW1ibyA9IDA7CiAJZGV2aWNlX3JlbW92ZV9maWxlKCZuZS0+ZGV2aWNlLCAmZGV2X2F0dHJfbmVfaW5fbGltYm8pOwogCisJZG93bl9yZWFkKCZub2RlbWdyX3VkX2NsYXNzLnN1YnN5cy5yd3NlbSk7CiAJZG93bl9yZWFkKCZuZS0+ZGV2aWNlLmJ1cy0+c3Vic3lzLnJ3c2VtKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZub2RlbWdyX3VkX2NsYXNzLmNoaWxkcmVuLCBub2RlKSB7CiAJCXVkID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgY2xhc3NfZGV2KTsKQEAgLTEzNzIsMjEgKzEzNjQsMjEgQEAKIAkJCXVkLT5kZXZpY2UuZHJpdmVyLT5yZXN1bWUoJnVkLT5kZXZpY2UpOwogCX0KIAl1cF9yZWFkKCZuZS0+ZGV2aWNlLmJ1cy0+c3Vic3lzLnJ3c2VtKTsKKwl1cF9yZWFkKCZub2RlbWdyX3VkX2NsYXNzLnN1YnN5cy5yd3NlbSk7CiAKIAlIUFNCX0RFQlVHKCJOb2RlIHJlc3VtZWQ6IElEOkJVU1siIE5PREVfQlVTX0ZNVCAiXSAgR1VJRFslMDE2THhdIiwKIAkJICAgTk9ERV9CVVNfQVJHUyhuZS0+aG9zdCwgbmUtPm5vZGVpZCksICh1bnNpZ25lZCBsb25nIGxvbmcpbmUtPmd1aWQpOwogfQogCiAKKy8qIENhbGxlciBuZWVkcyB0byBob2xkIG5vZGVtZ3JfdWRfY2xhc3Muc3Vic3lzLnJ3c2VtIGFzIHJlYWRlci4gKi8KIHN0YXRpYyB2b2lkIG5vZGVtZ3JfdXBkYXRlX3BkcnYoc3RydWN0IG5vZGVfZW50cnkgKm5lKQogewogCXN0cnVjdCB1bml0X2RpcmVjdG9yeSAqdWQ7CiAJc3RydWN0IGhwc2JfcHJvdG9jb2xfZHJpdmVyICpwZHJ2OwotCXN0cnVjdCBjbGFzcyAqY2xhc3MgPSAmbm9kZW1ncl91ZF9jbGFzczsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZGV2OwogCi0JZG93bl9yZWFkKCZjbGFzcy0+c3Vic3lzLnJ3c2VtKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZjbGFzcy0+Y2hpbGRyZW4sIG5vZGUpIHsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNkZXYsICZub2RlbWdyX3VkX2NsYXNzLmNoaWxkcmVuLCBub2RlKSB7CiAJCXVkID0gY29udGFpbmVyX29mKGNkZXYsIHN0cnVjdCB1bml0X2RpcmVjdG9yeSwgY2xhc3NfZGV2KTsKIAkJaWYgKHVkLT5uZSAhPSBuZSB8fCAhdWQtPmRldmljZS5kcml2ZXIpCiAJCQljb250aW51ZTsKQEAgLTEzOTksNyArMTM5MSw2IEBACiAJCQl1cF93cml0ZSgmdWQtPmRldmljZS5idXMtPnN1YnN5cy5yd3NlbSk7CiAJCX0KIAl9Ci0JdXBfcmVhZCgmY2xhc3MtPnN1YnN5cy5yd3NlbSk7CiB9CiAKIApAQCAtMTQzMCw2ICsxNDIxLDggQEAKIH0KIAogCisvKiBDYWxsZXIgbmVlZHMgdG8gaG9sZCBub2RlbWdyX3VkX2NsYXNzLnN1YnN5cy5yd3NlbSBhcyByZWFkZXIgYmVjYXVzZSB0aGUKKyAqIGNhbGxzIHRvIG5vZGVtZ3JfdXBkYXRlX3BkcnYoKSBhbmQgbm9kZW1ncl9zdXNwZW5kX25lKCkgaGVyZSByZXF1aXJlIGl0LiAqLwogc3RhdGljIHZvaWQgbm9kZW1ncl9wcm9iZV9uZShzdHJ1Y3QgaG9zdF9pbmZvICpoaSwgc3RydWN0IG5vZGVfZW50cnkgKm5lLCBpbnQgZ2VuZXJhdGlvbikKIHsKIAlzdHJ1Y3QgZGV2aWNlICpkZXY7CkBAIC0xNDkyLDkgKzE0ODUsOCBAQAogCS8qIElmIHdlIGhhZCBhIGJ1cyByZXNldCB3aGlsZSB3ZSB3ZXJlIHNjYW5uaW5nIHRoZSBidXMsIGl0IGlzCiAJICogcG9zc2libGUgdGhhdCB3ZSBkaWQgbm90IHByb2JlIGFsbCBub2Rlcy4gIEluIHRoYXQgY2FzZSwgd2UKIAkgKiBza2lwIHRoZSBjbGVhbiB1cCBmb3Igbm93LCBzaW5jZSB3ZSBjb3VsZCByZW1vdmUgbm9kZXMgdGhhdAotCSAqIHdlcmUgc3RpbGwgb24gdGhlIGJ1cy4gIFRoZSBidXMgcmVzZXQgaW5jcmVhc2VkIGhpLT5yZXNldF9zZW0sCi0JICogc28gdGhlcmUncyBhIGJ1cyBzY2FuIHBlbmRpbmcgd2hpY2ggd2lsbCBkbyB0aGUgY2xlYW4gdXAKLQkgKiBldmVudHVhbGx5LgorCSAqIHdlcmUgc3RpbGwgb24gdGhlIGJ1cy4gIEFub3RoZXIgYnVzIHNjYW4gaXMgcGVuZGluZyB3aGljaCB3aWxsCisJICogZG8gdGhlIGNsZWFuIHVwIGV2ZW50dWFsbHkuCiAJICoKIAkgKiBOb3cgbGV0J3MgdGVsbCB0aGUgYnVzIHRvIHJlc2NhbiBvdXIgZGV2aWNlcy4gVGhpcyBtYXkgc2VlbQogCSAqIGxpa2Ugb3ZlcmhlYWQsIGJ1dCB0aGUgZHJpdmVyLW1vZGVsIGNvcmUgd2lsbCBvbmx5IHNjYW4gYQpAQCAtMTYyMiw0MSArMTYxNCwzNyBAQAogewogCXN0cnVjdCBob3N0X2luZm8gKmhpID0gKHN0cnVjdCBob3N0X2luZm8gKilfX2hpOwogCXN0cnVjdCBocHNiX2hvc3QgKmhvc3QgPSBoaS0+aG9zdDsKLQlpbnQgcmVzZXRfY3ljbGVzID0gMDsKLQotCS8qIE5vIHVzZXJsZXZlbCBhY2Nlc3MgbmVlZGVkICovCi0JZGFlbW9uaXplKGhpLT5kYWVtb25fbmFtZSk7CisJdW5zaWduZWQgaW50IGcsIGdlbmVyYXRpb24gPSBnZXRfaHBzYl9nZW5lcmF0aW9uKGhvc3QpIC0gMTsKKwlpbnQgaSwgcmVzZXRfY3ljbGVzID0gMDsKIAogCS8qIFNldHVwIG91ciBkZXZpY2UtbW9kZWwgZW50cmllcyAqLwogCW5vZGVtZ3JfY3JlYXRlX2hvc3RfZGV2X2ZpbGVzKGhvc3QpOwogCi0JLyogU2l0IGFuZCB3YWl0IGZvciBhIHNpZ25hbCB0byBwcm9iZSB0aGUgbm9kZXMgb24gdGhlIGJ1cy4gVGhpcwotCSAqIGhhcHBlbnMgd2hlbiB3ZSBnZXQgYSBidXMgcmVzZXQuICovCi0Jd2hpbGUgKDEpIHsKLQkJdW5zaWduZWQgaW50IGdlbmVyYXRpb24gPSAwOwotCQlpbnQgaTsKKwlmb3IgKDs7KSB7CisJCS8qIFNsZWVwIHVudGlsIG5leHQgYnVzIHJlc2V0ICovCisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmIChnZXRfaHBzYl9nZW5lcmF0aW9uKGhvc3QpID09IGdlbmVyYXRpb24pCisJCQlzY2hlZHVsZSgpOworCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CiAKLQkJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmaGktPnJlc2V0X3NlbSkgfHwKLQkJICAgIGRvd25faW50ZXJydXB0aWJsZSgmbm9kZW1ncl9zZXJpYWxpemUpKSB7CisJCS8qIFRocmVhZCBtYXkgaGF2ZSBiZWVuIHdva2VuIHVwIHRvIGZyZWV6ZSBvciB0byBleGl0ICovCisJCWlmICh0cnlfdG9fZnJlZXplKCkpCisJCQljb250aW51ZTsKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKKwkJCWdvdG8gZXhpdDsKKworCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZub2RlbWdyX3NlcmlhbGl6ZSkpIHsKIAkJCWlmICh0cnlfdG9fZnJlZXplKCkpCiAJCQkJY29udGludWU7Ci0JCQlwcmludGsoIk5vZGVNZ3I6IHJlY2VpdmVkIHVuZXhwZWN0ZWQgc2lnbmFsPyFcbiIgKTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGhpLT5raWxsX21lKSB7Ci0JCQl1cCgmbm9kZW1ncl9zZXJpYWxpemUpOwotCQkJYnJlYWs7CisJCQlnb3RvIGV4aXQ7CiAJCX0KIAogCQkvKiBQYXVzZSBmb3IgMS80IHNlY29uZCBpbiAxLzE2IHNlY29uZCBpbnRlcnZhbHMsCiAJCSAqIHRvIG1ha2Ugc3VyZSB0aGluZ3Mgc2V0dGxlIGRvd24uICovCisJCWcgPSBnZXRfaHBzYl9nZW5lcmF0aW9uKGhvc3QpOwogCQlmb3IgKGkgPSAwOyBpIDwgNCA7IGkrKykgewotCQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg2MykpIHsKLQkJCQl1cCgmbm9kZW1ncl9zZXJpYWxpemUpOwotCQkJCWdvdG8gY2F1Z2h0X3NpZ25hbDsKLQkJCX0KKwkJCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSg2MykgfHwga3RocmVhZF9zaG91bGRfc3RvcCgpKQorCQkJCWdvdG8gdW5sb2NrX2V4aXQ7CiAKIAkJCS8qIE5vdyBnZXQgdGhlIGdlbmVyYXRpb24gaW4gd2hpY2ggdGhlIG5vZGUgSUQncyB3ZSBjb2xsZWN0CiAJCQkgKiBhcmUgdmFsaWQuICBEdXJpbmcgdGhlIGJ1cyBzY2FuIHdlIHdpbGwgdXNlIHRoaXMgZ2VuZXJhdGlvbgpAQCAtMTY2NywyMCArMTY1NSwxNCBAQAogCiAJCQkvKiBJZiB3ZSBnZXQgYSByZXNldCBiZWZvcmUgd2UgYXJlIGRvbmUgd2FpdGluZywgdGhlbgogCQkJICogc3RhcnQgdGhlIHRoZSB3YWl0aW5nIG92ZXIgYWdhaW4gKi8KLQkJCXdoaWxlICghZG93bl90cnlsb2NrKCZoaS0+cmVzZXRfc2VtKSkKLQkJCQlpID0gMDsKLQotCQkJLyogQ2hlY2sgdGhlIGtpbGxfbWUgYWdhaW4gKi8KLQkJCWlmIChoaS0+a2lsbF9tZSkgewotCQkJCXVwKCZub2RlbWdyX3NlcmlhbGl6ZSk7Ci0JCQkJZ290byBjYXVnaHRfc2lnbmFsOwotCQkJfQorCQkJaWYgKGdlbmVyYXRpb24gIT0gZykKKwkJCQlnID0gZ2VuZXJhdGlvbiwgaSA9IDA7CiAJCX0KIAogCQlpZiAoIW5vZGVtZ3JfY2hlY2tfaXJtX2NhcGFiaWxpdHkoaG9zdCwgcmVzZXRfY3ljbGVzKSB8fAogCQkgICAgIW5vZGVtZ3JfZG9faXJtX2R1dGllcyhob3N0LCByZXNldF9jeWNsZXMpKSB7CiAJCQlyZXNldF9jeWNsZXMrKzsKLQkJCXVwKCZub2RlbWdyX3NlcmlhbGl6ZSk7CisJCQltdXRleF91bmxvY2soJm5vZGVtZ3Jfc2VyaWFsaXplKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAJCXJlc2V0X2N5Y2xlcyA9IDA7CkBAIC0xNjk4LDEzICsxNjgwLDEzIEBACiAJCS8qIFVwZGF0ZSBzb21lIG9mIG91ciBzeXNmcyBzeW1saW5rcyAqLwogCQlub2RlbWdyX3VwZGF0ZV9ob3N0X2Rldl9saW5rcyhob3N0KTsKIAotCQl1cCgmbm9kZW1ncl9zZXJpYWxpemUpOworCQltdXRleF91bmxvY2soJm5vZGVtZ3Jfc2VyaWFsaXplKTsKIAl9Ci0KLWNhdWdodF9zaWduYWw6Cit1bmxvY2tfZXhpdDoKKwltdXRleF91bmxvY2soJm5vZGVtZ3Jfc2VyaWFsaXplKTsKK2V4aXQ6CiAJSFBTQl9WRVJCT1NFKCJOb2RlTWdyOiBFeGl0aW5nIHRocmVhZCIpOwotCi0JY29tcGxldGVfYW5kX2V4aXQoJmhpLT5leGl0ZWQsIDApOworCXJldHVybiAwOwogfQogCiBpbnQgbm9kZW1ncl9mb3JfZWFjaF9ob3N0KHZvaWQgKl9fZGF0YSwgaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKSkKQEAgLTE3NjQsNDEgKzE3NDYsMjcgQEAKIAlzdHJ1Y3QgaG9zdF9pbmZvICpoaTsKIAogCWhpID0gaHBzYl9jcmVhdGVfaG9zdGluZm8oJm5vZGVtZ3JfaGlnaGxldmVsLCBob3N0LCBzaXplb2YoKmhpKSk7Ci0KIAlpZiAoIWhpKSB7Ci0JCUhQU0JfRVJSICgiTm9kZU1ncjogb3V0IG9mIG1lbW9yeSBpbiBhZGQgaG9zdCIpOworCQlIUFNCX0VSUigiTm9kZU1ncjogb3V0IG9mIG1lbW9yeSBpbiBhZGQgaG9zdCIpOwogCQlyZXR1cm47CiAJfQotCiAJaGktPmhvc3QgPSBob3N0OwotCWluaXRfY29tcGxldGlvbigmaGktPmV4aXRlZCk7Ci0gICAgICAgIHNlbWFfaW5pdCgmaGktPnJlc2V0X3NlbSwgMCk7Ci0KLQlzcHJpbnRmKGhpLT5kYWVtb25fbmFtZSwgImtub2RlbWdyZF8lZCIsIGhvc3QtPmlkKTsKLQotCWhpLT5waWQgPSBrZXJuZWxfdGhyZWFkKG5vZGVtZ3JfaG9zdF90aHJlYWQsIGhpLCBDTE9ORV9LRVJORUwpOwotCi0JaWYgKGhpLT5waWQgPCAwKSB7Ci0JCUhQU0JfRVJSICgiTm9kZU1ncjogZmFpbGVkIHRvIHN0YXJ0ICVzIHRocmVhZCBmb3IgJXMiLAotCQkJICBoaS0+ZGFlbW9uX25hbWUsIGhvc3QtPmRyaXZlci0+bmFtZSk7CisJaGktPnRocmVhZCA9IGt0aHJlYWRfcnVuKG5vZGVtZ3JfaG9zdF90aHJlYWQsIGhpLCAia25vZGVtZ3JkXyVkIiwKKwkJCQkgaG9zdC0+aWQpOworCWlmIChJU19FUlIoaGktPnRocmVhZCkpIHsKKwkJSFBTQl9FUlIoIk5vZGVNZ3I6IGNhbm5vdCBzdGFydCB0aHJlYWQgZm9yIGhvc3QgJWQiLCBob3N0LT5pZCk7CiAJCWhwc2JfZGVzdHJveV9ob3N0aW5mbygmbm9kZW1ncl9oaWdobGV2ZWwsIGhvc3QpOwotCQlyZXR1cm47CiAJfQotCi0JcmV0dXJuOwogfQogCiBzdGF0aWMgdm9pZCBub2RlbWdyX2hvc3RfcmVzZXQoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCkKIHsKIAlzdHJ1Y3QgaG9zdF9pbmZvICpoaSA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZub2RlbWdyX2hpZ2hsZXZlbCwgaG9zdCk7CiAKLQlpZiAoaGkgIT0gTlVMTCkgewotCQlIUFNCX1ZFUkJPU0UoIk5vZGVNZ3I6IFByb2Nlc3NpbmcgaG9zdCByZXNldCBmb3IgJXMiLCBoaS0+ZGFlbW9uX25hbWUpOwotCQl1cCgmaGktPnJlc2V0X3NlbSk7Ci0JfSBlbHNlCi0JCUhQU0JfRVJSICgiTm9kZU1ncjogY291bGQgbm90IHByb2Nlc3MgcmVzZXQgb2YgdW51c2VkIGhvc3QiKTsKLQotCXJldHVybjsKKwlpZiAoaGkpIHsKKwkJSFBTQl9WRVJCT1NFKCJOb2RlTWdyOiBQcm9jZXNzaW5nIHJlc2V0IGZvciBob3N0ICVkIiwgaG9zdC0+aWQpOworCQl3YWtlX3VwX3Byb2Nlc3MoaGktPnRocmVhZCk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBub2RlbWdyX3JlbW92ZV9ob3N0KHN0cnVjdCBocHNiX2hvc3QgKmhvc3QpCkBAIC0xODA2LDE4ICsxNzc0LDkgQEAKIAlzdHJ1Y3QgaG9zdF9pbmZvICpoaSA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZub2RlbWdyX2hpZ2hsZXZlbCwgaG9zdCk7CiAKIAlpZiAoaGkpIHsKLQkJaWYgKGhpLT5waWQgPj0gMCkgewotCQkJaGktPmtpbGxfbWUgPSAxOwotCQkJbWIoKTsKLQkJCXVwKCZoaS0+cmVzZXRfc2VtKTsKLQkJCXdhaXRfZm9yX2NvbXBsZXRpb24oJmhpLT5leGl0ZWQpOwotCQkJbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYoJmhvc3QtPmRldmljZSk7Ci0JCX0KLQl9IGVsc2UKLQkJSFBTQl9FUlIoIk5vZGVNZ3I6IGhvc3QgJXMgZG9lcyBub3QgZXhpc3QsIGNhbm5vdCByZW1vdmUiLAotCQkJIGhvc3QtPmRyaXZlci0+bmFtZSk7Ci0KLQlyZXR1cm47CisJCWt0aHJlYWRfc3RvcChoaS0+dGhyZWFkKTsKKwkJbm9kZW1ncl9yZW1vdmVfaG9zdF9kZXYoJmhvc3QtPmRldmljZSk7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IGhwc2JfaGlnaGxldmVsIG5vZGVtZ3JfaGlnaGxldmVsID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9ub2RlbWdyLmggYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAppbmRleCAwYjI2NjE2Li4wZTFlN2Q5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L25vZGVtZ3IuaApAQCAtMjEsOSArMjEsMTUgQEAKICNkZWZpbmUgX0lFRUUxMzk0X05PREVNR1JfSAogCiAjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Ci0jaW5jbHVkZSAiY3NyMTIxMi5oIgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCiAjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgotI2luY2x1ZGUgImllZWUxMzk0X2hvdHBsdWcuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgorCitzdHJ1Y3QgY3NyMTIxMl9jc3I7CitzdHJ1Y3QgY3NyMTIxMl9rZXl2YWw7CitzdHJ1Y3QgaHBzYl9ob3N0Oworc3RydWN0IGllZWUxMzk0X2RldmljZV9pZDsKIAogLyogJzEnICczJyAnOScgJzQnIGluIEFTQ0lJICovCiAjZGVmaW5lIElFRUUxMzk0X0JVU0lEX01BR0lDCV9fY29uc3RhbnRfY3B1X3RvX2JlMzIoMHgzMTMzMzkzNCkKQEAgLTQ0LDcgKzUwLDYgQEAKIAl1MTYJbWF4X3JlYzsJLyogTWF4aW11bSBwYWNrZXQgc2l6ZSBub2RlIGNhbiByZWNlaXZlICovCiB9OwogCi0KICNkZWZpbmUgVU5JVF9ESVJFQ1RPUllfVkVORE9SX0lECQkweDAxCiAjZGVmaW5lIFVOSVRfRElSRUNUT1JZX01PREVMX0lECQkJMHgwMgogI2RlZmluZSBVTklUX0RJUkVDVE9SWV9TUEVDSUZJRVJfSUQJCTB4MDQKQEAgLTU5LDggKzY0LDggQEAKICAqIHVuaXQgZGlyZWN0b3J5IGZvciBlYWNoIG9mIHRoZXNlIHByb3RvY29scy4KICAqLwogc3RydWN0IHVuaXRfZGlyZWN0b3J5IHsKLQlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7ICAvKiBUaGUgbm9kZSB3aGljaCB0aGlzIGRpcmVjdG9yeSBiZWxvbmdzIHRvICovCi0Jb2N0bGV0X3QgYWRkcmVzczsgICAgICAgLyogQWRkcmVzcyBvZiB0aGUgdW5pdCBkaXJlY3Rvcnkgb24gdGhlIG5vZGUgKi8KKwlzdHJ1Y3Qgbm9kZV9lbnRyeSAqbmU7CS8qIFRoZSBub2RlIHdoaWNoIHRoaXMgZGlyZWN0b3J5IGJlbG9uZ3MgdG8gKi8KKwlvY3RsZXRfdCBhZGRyZXNzOwkvKiBBZGRyZXNzIG9mIHRoZSB1bml0IGRpcmVjdG9yeSBvbiB0aGUgbm9kZSAqLwogCXU4IGZsYWdzOwkJLyogSW5kaWNhdGVzIHdoaWNoIGVudHJpZXMgd2VyZSByZWFkICovCiAKIAlxdWFkbGV0X3QgdmVuZG9yX2lkOwpAQCAtNzksMTEgKzg0LDEwIEBACiAJaW50IGxlbmd0aDsJCS8qIE51bWJlciBvZiBxdWFkbGV0cyAqLwogCiAJc3RydWN0IGRldmljZSBkZXZpY2U7Ci0KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlIGNsYXNzX2RldjsKIAogCXN0cnVjdCBjc3IxMjEyX2tleXZhbCAqdWRfa3Y7Ci0JdTMyIGx1bjsgICAgICAgICAgICAgICAgLyogbG9naWNhbCB1bml0IG51bWJlciBpbW1lZGlhdGUgdmFsdWUgKi8KKwl1MzIgbHVuOwkJLyogbG9naWNhbCB1bml0IG51bWJlciBpbW1lZGlhdGUgdmFsdWUgKi8KIH07CiAKIHN0cnVjdCBub2RlX2VudHJ5IHsKQEAgLTEwMywxMCArMTA3LDggQEAKIAljb25zdCBjaGFyICp2ZW5kb3Jfb3VpOwogCiAJdTMyIGNhcGFiaWxpdGllczsKLQlzdHJ1Y3QgaHBzYl90bGFiZWxfcG9vbCAqdHBvb2w7CiAKIAlzdHJ1Y3QgZGV2aWNlIGRldmljZTsKLQogCXN0cnVjdCBjbGFzc19kZXZpY2UgY2xhc3NfZGV2OwogCiAJLyogTWVhbnMgdGhpcyBub2RlIGlzIG5vdCBhdHRhY2hlZCBhbnltb3JlICovCkBAIC0xNTMsOCArMTU1LDggQEAKIC8qCiAgKiBUaGlzIHdpbGwgZmlsbCBpbiB0aGUgZ2l2ZW4sIHByZS1pbml0aWFsaXNlZCBocHNiX3BhY2tldCB3aXRoIHRoZSBjdXJyZW50CiAgKiBpbmZvcm1hdGlvbiBmcm9tIHRoZSBub2RlIGVudHJ5IChob3N0LCBub2RlIElELCBnZW5lcmF0aW9uIG51bWJlcikuICBJdCB3aWxsCi0gKiByZXR1cm4gZmFsc2UgaWYgdGhlIG5vZGUgb3duaW5nIHRoZSBHVUlEIGlzIG5vdCBhY2Nlc3NpYmxlIChhbmQgbm90IG1vZGlmeSB0aGUKLSAqIGhwc2JfcGFja2V0KSBhbmQgcmV0dXJuIHRydWUgb3RoZXJ3aXNlLgorICogcmV0dXJuIGZhbHNlIGlmIHRoZSBub2RlIG93bmluZyB0aGUgR1VJRCBpcyBub3QgYWNjZXNzaWJsZSAoYW5kIG5vdCBtb2RpZnkKKyAqIHRoZSBocHNiX3BhY2tldCkgYW5kIHJldHVybiB0cnVlIG90aGVyd2lzZS4KICAqCiAgKiBOb3RlIHRoYXQgcGFja2V0IHNlbmRpbmcgbWF5IHN0aWxsIGZhaWwgaW4gaHBzYl9zZW5kX3BhY2tldCBpZiBhIGJ1cyByZXNldAogICogaGFwcGVucyB3aGlsZSB5b3UgYXJlIHRyeWluZyB0byBzZXQgdXAgdGhlIHBhY2tldCAoZHVlIHRvIG9ic29sZXRlIGdlbmVyYXRpb24KQEAgLTE3MCwxNiArMTcyLDEzIEBACiBpbnQgaHBzYl9ub2RlX2xvY2soc3RydWN0IG5vZGVfZW50cnkgKm5lLCB1NjQgYWRkciwKIAkJICAgaW50IGV4dGNvZGUsIHF1YWRsZXRfdCAqZGF0YSwgcXVhZGxldF90IGFyZyk7CiAKLQogLyogSXRlcmF0ZSB0aGUgaG9zdHMsIGNhbGxpbmcgYSBnaXZlbiBmdW5jdGlvbiB3aXRoIHN1cHBsaWVkIGRhdGEgZm9yIGVhY2gKICAqIGhvc3QuICovCiBpbnQgbm9kZW1ncl9mb3JfZWFjaF9ob3N0KHZvaWQgKl9fZGF0YSwgaW50ICgqY2IpKHN0cnVjdCBocHNiX2hvc3QgKiwgdm9pZCAqKSk7CiAKLQogaW50IGluaXRfaWVlZTEzOTRfbm9kZW1ncih2b2lkKTsKIHZvaWQgY2xlYW51cF9pZWVlMTM5NF9ub2RlbWdyKHZvaWQpOwogCi0KIC8qIFRoZSB0ZW1wbGF0ZSBmb3IgYSBob3N0IGRldmljZSAqLwogZXh0ZXJuIHN0cnVjdCBkZXZpY2Ugbm9kZW1ncl9kZXZfdGVtcGxhdGVfaG9zdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC9vaGNpMTM5NC5jCmluZGV4IDQ0OGRmMjcuLjhmZDAwMzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvb2hjaTEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L29oY2kxMzk0LmMKQEAgLTEzNiw3ICsxMzYsNyBAQAogI2RlZmluZSBEQkdNU0coZm10LCBhcmdzLi4uKSBcCiBwcmludGsoS0VSTl9JTkZPICIlczogZnctaG9zdCVkOiAiIGZtdCAiXG4iICwgT0hDSTEzOTRfRFJJVkVSX05BTUUsIG9oY2ktPmhvc3QtPmlkICwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIERCR01TRyhmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIERCR01TRyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSUVFRTEzOTRfT0hDSV9ETUFfREVCVUcKQEAgLTE0OCw4ICsxNDgsOCBAQAogCQktLWdsb2JhbF9vdXRzdGFuZGluZ19kbWFzLCAjIyBhcmdzKQogc3RhdGljIGludCBnbG9iYWxfb3V0c3RhbmRpbmdfZG1hcyA9IDA7CiAjZWxzZQotI2RlZmluZSBPSENJX0RNQV9BTExPQyhmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIE9IQ0lfRE1BX0ZSRUUoZm10LCBhcmdzLi4uKQorI2RlZmluZSBPSENJX0RNQV9BTExPQyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBPSENJX0RNQV9GUkVFKGZtdCwgYXJncy4uLikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAogLyogcHJpbnQgZ2VuZXJhbCAoY2FyZCBpbmRlcGVuZGVudCkgaW5mb3JtYXRpb24gKi8KQEAgLTE4MSwzNiArMTgxLDM1IEBACiBzdGF0aWMgdm9pZCBvaGNpMTM5NF9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKIAogI2lmbmRlZiBfX0xJVFRMRV9FTkRJQU4KLXN0YXRpYyB1bnNpZ25lZCBoZHJfc2l6ZXNbXSA9Ci17Citjb25zdCBzdGF0aWMgc2l6ZV90IGhkcl9zaXplc1tdID0gewogCTMsCS8qIFRDT0RFX1dSSVRFUSAqLwogCTQsCS8qIFRDT0RFX1dSSVRFQiAqLwogCTMsCS8qIFRDT0RFX1dSSVRFX1JFU1BPTlNFICovCi0JMCwJLyogPz8/ICovCisJMCwJLyogcmVzZXJ2ZWQgKi8KIAkzLAkvKiBUQ09ERV9SRUFEUSAqLwogCTQsCS8qIFRDT0RFX1JFQURCICovCiAJMywJLyogVENPREVfUkVBRFFfUkVTUE9OU0UgKi8KIAk0LAkvKiBUQ09ERV9SRUFEQl9SRVNQT05TRSAqLwotCTEsCS8qIFRDT0RFX0NZQ0xFX1NUQVJUICg/Pz8pICovCisJMSwJLyogVENPREVfQ1lDTEVfU1RBUlQgKi8KIAk0LAkvKiBUQ09ERV9MT0NLX1JFUVVFU1QgKi8KIAkyLAkvKiBUQ09ERV9JU09fREFUQSAqLwogCTQsCS8qIFRDT0RFX0xPQ0tfUkVTUE9OU0UgKi8KKwkJLyogcmVzdCBpcyByZXNlcnZlZCBvciBsaW5rLWludGVybmFsICovCiB9OwogCi0vKiBTd2FwIGhlYWRlcnMgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwYWNrZXRfc3dhYihxdWFkbGV0X3QgKmRhdGEsIGludCB0Y29kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBoZWFkZXJfbGUzMl90b19jcHUocXVhZGxldF90ICpkYXRhLCB1bnNpZ25lZCBjaGFyIHRjb2RlKQogewotCXNpemVfdCBzaXplID0gaGRyX3NpemVzW3Rjb2RlXTsKKwlzaXplX3Qgc2l6ZTsKIAotCWlmICh0Y29kZSA+IFRDT0RFX0xPQ0tfUkVTUE9OU0UgfHwgaGRyX3NpemVzW3Rjb2RlXSA9PSAwKQorCWlmICh1bmxpa2VseSh0Y29kZSA+PSBBUlJBWV9TSVpFKGhkcl9zaXplcykpKQogCQlyZXR1cm47CiAKKwlzaXplID0gaGRyX3NpemVzW3Rjb2RlXTsKIAl3aGlsZSAoc2l6ZS0tKQotCQlkYXRhW3NpemVdID0gc3dhYjMyKGRhdGFbc2l6ZV0pOworCQlkYXRhW3NpemVdID0gbGUzMl90b19jcHUoZGF0YVtzaXplXSk7CiB9CiAjZWxzZQotLyogRG9uJ3Qgd2FzdGUgY3ljbGVzIG9uIHNhbWUgc2V4IGJ5dGUgc3dhcHMgKi8KLSNkZWZpbmUgcGFja2V0X3N3YWIodyx4KQorI2RlZmluZSBoZWFkZXJfbGUzMl90b19jcHUodyx4KSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZiAvKiAhTElUVExFX0VORElBTiAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTcwMSw3ICs3MDAsNyBAQAogCQkJCWQtPnByZ19jcHVbaWR4XS0+ZGF0YVsyXSA9IHBhY2tldC0+aGVhZGVyWzJdOwogCQkJCWQtPnByZ19jcHVbaWR4XS0+ZGF0YVszXSA9IHBhY2tldC0+aGVhZGVyWzNdOwogCQkJfQotCQkJcGFja2V0X3N3YWIoZC0+cHJnX2NwdVtpZHhdLT5kYXRhLCBwYWNrZXQtPnRjb2RlKTsKKwkJCWhlYWRlcl9sZTMyX3RvX2NwdShkLT5wcmdfY3B1W2lkeF0tPmRhdGEsIHBhY2tldC0+dGNvZGUpOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChwYWNrZXQtPmRhdGFfc2l6ZSkgeyAvKiBibG9jayB0cmFuc21pdCAqLwpAQCAtNzc3LDcgKzc3Niw3IEBACiAgICAgICAgICAgICAgICAgZC0+cHJnX2NwdVtpZHhdLT5kYXRhWzBdID0gcGFja2V0LT5zcGVlZF9jb2RlPDwxNiB8CiAgICAgICAgICAgICAgICAgICAgICAgICAocGFja2V0LT5oZWFkZXJbMF0gJiAweEZGRkYpOwogICAgICAgICAgICAgICAgIGQtPnByZ19jcHVbaWR4XS0+ZGF0YVsxXSA9IHBhY2tldC0+aGVhZGVyWzBdICYgMHhGRkZGMDAwMDsKLQkJcGFja2V0X3N3YWIoZC0+cHJnX2NwdVtpZHhdLT5kYXRhLCBwYWNrZXQtPnRjb2RlKTsKKwkJaGVhZGVyX2xlMzJfdG9fY3B1KGQtPnByZ19jcHVbaWR4XS0+ZGF0YSwgcGFja2V0LT50Y29kZSk7CiAKICAgICAgICAgICAgICAgICBkLT5wcmdfY3B1W2lkeF0tPmJlZ2luLmNvbnRyb2wgPQogCQkJY3B1X3RvX2xlMzIoRE1BX0NUTF9PVVRQVVRfTU9SRSB8CkBAIC0yNTk4LDggKzI1OTcsOSBAQAogICogRGV0ZXJtaW5lIHRoZSBsZW5ndGggb2YgYSBwYWNrZXQgaW4gdGhlIGJ1ZmZlcgogICogT3B0aW1pemF0aW9uIHN1Z2dlc3RlZCBieSBQYXNjYWwgRHJvbGV0IDxwYXNjYWwuZHJvbGV0QGluZm9ybWlzc2lvbi5jYT4KICAqLwotc3RhdGljIF9faW5saW5lX18gaW50IHBhY2tldF9sZW5ndGgoc3RydWN0IGRtYV9yY3ZfY3R4ICpkLCBpbnQgaWR4LCBxdWFkbGV0X3QgKmJ1Zl9wdHIsCi0JCQkgaW50IG9mZnNldCwgdW5zaWduZWQgY2hhciB0Y29kZSwgaW50IG5vc3dhcCkKK3N0YXRpYyBpbmxpbmUgaW50IHBhY2tldF9sZW5ndGgoc3RydWN0IGRtYV9yY3ZfY3R4ICpkLCBpbnQgaWR4LAorCQkJCXF1YWRsZXRfdCAqYnVmX3B0ciwgaW50IG9mZnNldCwKKwkJCQl1bnNpZ25lZCBjaGFyIHRjb2RlLCBpbnQgbm9zd2FwKQogewogCWludCBsZW5ndGggPSAtMTsKIApAQCAtMjczMCw3ICsyNzMwLDcgQEAKIAkJICogYnVzIHJlc2V0LiBXZSBhbHdheXMgaWdub3JlIGl0LiAgKi8KIAkJaWYgKHRjb2RlICE9IE9IQ0kxMzk0X1RDT0RFX1BIWSkgewogCQkJaWYgKCFvaGNpLT5ub19zd2FwX2luY29taW5nKQotCQkJCXBhY2tldF9zd2FiKGQtPnNwYiwgdGNvZGUpOworCQkJCWhlYWRlcl9sZTMyX3RvX2NwdShkLT5zcGIsIHRjb2RlKTsKIAkJCURCR01TRygiUGFja2V0IHJlY2VpdmVkIGZyb20gbm9kZSIKIAkJCQkiICVkIGFjaz0weCUwMlggc3BkPSVkIHRjb2RlPTB4JVgiCiAJCQkJIiBsZW5ndGg9JWQgY3R4PSVkIHRsYWJlbD0lZCIsCkBAIC0yNzM4LDcgKzI3MzgsNyBAQAogCQkJCShjb25kX2xlMzJfdG9fY3B1KGQtPnNwYltsZW5ndGgvNC0xXSwgb2hjaS0+bm9fc3dhcF9pbmNvbWluZyk+PjE2KSYweDFmLAogCQkJCShjb25kX2xlMzJfdG9fY3B1KGQtPnNwYltsZW5ndGgvNC0xXSwgb2hjaS0+bm9fc3dhcF9pbmNvbWluZyk+PjIxKSYweDMsCiAJCQkJdGNvZGUsIGxlbmd0aCwgZC0+Y3R4LAotCQkJCShjb25kX2xlMzJfdG9fY3B1KGQtPnNwYlswXSwgb2hjaS0+bm9fc3dhcF9pbmNvbWluZyk+PjEwKSYweDNmKTsKKwkJCQkoZC0+c3BiWzBdPj4xMCkmMHgzZik7CiAKIAkJCWFjayA9ICgoKGNvbmRfbGUzMl90b19jcHUoZC0+c3BiW2xlbmd0aC80LTFdLCBvaGNpLT5ub19zd2FwX2luY29taW5nKT4+MTYpJjB4MWYpCiAJCQkJPT0gMHgxMSkgPyAxIDogMDsKQEAgLTM1MjksOSArMzUyOSwxMCBAQAogCQlwdXRfZGV2aWNlKGRldik7CiB9CiAKLQorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBvaGNpMTM5NF9wY2lfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKKy8qIFBvd2VyTWFjIHJlc3VtZSBjb2RlIGNvbWVzIGZpcnN0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKQEAgLTM1NDMsMTcgKzM1NDQsMjMgQEAKIAl9CiAjZW5kaWYgLyogQ09ORklHX1BQQ19QTUFDICovCiAKKwlwY2lfc2V0X3Bvd2VyX3N0YXRlKHBkZXYsIFBDSV9EMCk7CiAJcGNpX3Jlc3RvcmVfc3RhdGUocGRldik7Ci0JcGNpX2VuYWJsZV9kZXZpY2UocGRldik7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gcGNpX2VuYWJsZV9kZXZpY2UocGRldik7CiB9CiAKLQogc3RhdGljIGludCBvaGNpMTM5NF9wY2lfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpbnQgZXJyOwogCisJZXJyID0gcGNpX3NhdmVfc3RhdGUocGRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisJZXJyID0gcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBwY2lfY2hvb3NlX3N0YXRlKHBkZXYsIHN0YXRlKSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKy8qIFBvd2VyTWFjIHN1c3BlbmQgY29kZSBjb21lcyBsYXN0ICovCiAjaWZkZWYgQ09ORklHX1BQQ19QTUFDCiAJaWYgKG1hY2hpbmVfaXMocG93ZXJtYWMpKSB7CiAJCXN0cnVjdCBkZXZpY2Vfbm9kZSAqb2Zfbm9kZTsKQEAgLTM1NjMsMTEgKzM1NzAsMTEgQEAKIAkJaWYgKG9mX25vZGUpCiAJCQlwbWFjX2NhbGxfZmVhdHVyZShQTUFDX0ZUUl8xMzk0X0VOQUJMRSwgb2Zfbm9kZSwgMCwgMCk7CiAJfQotI2VuZGlmCi0KLQlyZXR1cm4gMDsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1BNQUMgKi8KK291dDoKKwlyZXR1cm4gZXJyOwogfQotCisjZW5kaWYgLyogQ09ORklHX1BNICovCiAKICNkZWZpbmUgUENJX0NMQVNTX0ZJUkVXSVJFX09IQ0kgICAgICgoUENJX0NMQVNTX1NFUklBTF9GSVJFV0lSRSA8PCA4KSB8IDB4MTApCiAKQEAgLTM1OTAsOCArMzU5NywxMCBAQAogCS5pZF90YWJsZSA9CW9oY2kxMzk0X3BjaV90YmwsCiAJLnByb2JlID0Jb2hjaTEzOTRfcGNpX3Byb2JlLAogCS5yZW1vdmUgPQlvaGNpMTM5NF9wY2lfcmVtb3ZlLAorI2lmZGVmIENPTkZJR19QTQogCS5yZXN1bWUgPQlvaGNpMTM5NF9wY2lfcmVzdW1lLAogCS5zdXNwZW5kID0Jb2hjaTEzOTRfcGNpX3N1c3BlbmQsCisjZW5kaWYKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMzcxOCw1ICszNzI3LDcgQEAKIAlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlcigmb2hjaTEzOTRfcGNpX2RyaXZlcik7CiB9CiAKLW1vZHVsZV9pbml0KG9oY2kxMzk0X2luaXQpOworLyogUmVnaXN0ZXIgYmVmb3JlIG1vc3Qgb3RoZXIgZGV2aWNlIGRyaXZlcnMuCisgKiBVc2VmdWwgZm9yIHJlbW90ZSBkZWJ1Z2dpbmcgdmlhIHBoeXNpY2FsIERNQSwgZS5nLiB1c2luZyBmaXJlc2NvcGUuICovCitmc19pbml0Y2FsbChvaGNpMTM5NF9pbml0KTsKIG1vZHVsZV9leGl0KG9oY2kxMzk0X2NsZWFudXApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMgYi9kcml2ZXJzL2llZWUxMzk0L3BjaWx5bnguYwppbmRleCBlNmY0MTIzLi5iNGYxNDZmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKKysrIGIvZHJpdmVycy9pZWVlMTM5NC9wY2lseW54LmMKQEAgLTEzNyw3ICsxMzcsNiBAQAogCS5nZXRzZGEJCQk9IGJpdF9nZXRzZGEsCiAJLmdldHNjbAkJCT0gYml0X2dldHNjbCwKIAkudWRlbGF5CQkJPSA1LAotCS5tZGVsYXkJCQk9IDUsCiAJLnRpbWVvdXQJCT0gMTAwLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaCBiL2RyaXZlcnMvaWVlZTEzOTQvcmF3MTM5NC1wcml2YXRlLmgKaW5kZXggYzkzNTg3Yi4uYzc3MzFkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LXByaXZhdGUuaAorKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQtcHJpdmF0ZS5oCkBAIC0yOSw5ICsyOSw4IEBACiAKICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZXFfcGVuZGluZzsKICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZXFfY29tcGxldGU7Ci0gICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgY29tcGxldGVfc2VtOwogICAgICAgICBzcGlubG9ja190IHJlcWxpc3RzX2xvY2s7Ci0gICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHBvbGxfd2FpdF9jb21wbGV0ZTsKKyAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9jb21wbGV0ZTsKIAogICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGFkZHJfbGlzdDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9yYXcxMzk0LmMgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwppbmRleCA1NzFlYTY4Li41ZWM0ZjVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3JhdzEzOTQuYwpAQCAtNDQsMTQgKzQ0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAKICNpbmNsdWRlICJjc3IxMjEyLmgiCi0jaW5jbHVkZSAiaWVlZTEzOTQuaCIKLSNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgotI2luY2x1ZGUgImllZWUxMzk0X2NvcmUuaCIKLSNpbmNsdWRlICJub2RlbWdyLmgiCi0jaW5jbHVkZSAiaG9zdHMuaCIKICNpbmNsdWRlICJoaWdobGV2ZWwuaCIKLSNpbmNsdWRlICJpc28uaCIKKyNpbmNsdWRlICJob3N0cy5oIgorI2luY2x1ZGUgImllZWUxMzk0LmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgorI2luY2x1ZGUgImllZWUxMzk0X2hvdHBsdWcuaCIKICNpbmNsdWRlICJpZWVlMTM5NF90cmFuc2FjdGlvbnMuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgorI2luY2x1ZGUgImlzby5oIgorI2luY2x1ZGUgIm5vZGVtZ3IuaCIKICNpbmNsdWRlICJyYXcxMzk0LmgiCiAjaW5jbHVkZSAicmF3MTM5NC1wcml2YXRlLmgiCiAKQEAgLTY2LDcgKzY3LDcgQEAKICNkZWZpbmUgREJHTVNHKGZtdCwgYXJncy4uLikgXAogcHJpbnRrKEtFUk5fSU5GTyAicmF3MTM5NDoiIGZtdCAiXG4iICwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIERCR01TRyhmbXQsIGFyZ3MuLi4pCisjZGVmaW5lIERCR01TRyhmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKIHN0YXRpYyBMSVNUX0hFQUQoaG9zdF9pbmZvX2xpc3QpOwpAQCAtMTMyLDEwICsxMzMsOSBAQAogc3RhdGljIHZvaWQgX19xdWV1ZV9jb21wbGV0ZV9yZXEoc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxKQogewogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gcmVxLT5maWxlX2luZm87Ci0JbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJmZpLT5yZXFfY29tcGxldGUpOwogCi0JdXAoJmZpLT5jb21wbGV0ZV9zZW0pOwotCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZmktPnBvbGxfd2FpdF9jb21wbGV0ZSk7CisJbGlzdF9tb3ZlX3RhaWwoJnJlcS0+bGlzdCwgJmZpLT5yZXFfY29tcGxldGUpOworIAl3YWtlX3VwKCZmaS0+d2FpdF9jb21wbGV0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIHF1ZXVlX2NvbXBsZXRlX3JlcShzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXEpCkBAIC00NjMsMTMgKzQ2MywzNiBAQAogCiAjZW5kaWYKIAorLyogZ2V0IG5leHQgY29tcGxldGVkIHJlcXVlc3QgIChjYWxsZXIgbXVzdCBob2xkIGZpLT5yZXFsaXN0c19sb2NrKSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpfX25leHRfY29tcGxldGVfcmVxKHN0cnVjdCBmaWxlX2luZm8gKmZpKQoreworCXN0cnVjdCBsaXN0X2hlYWQgKmxoOworCXN0cnVjdCBwZW5kaW5nX3JlcXVlc3QgKnJlcSA9IE5VTEw7CisKKwlpZiAoIWxpc3RfZW1wdHkoJmZpLT5yZXFfY29tcGxldGUpKSB7CisJCWxoID0gZmktPnJlcV9jb21wbGV0ZS5uZXh0OworCQlsaXN0X2RlbChsaCk7CisJCXJlcSA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QsIGxpc3QpOworCX0KKwlyZXR1cm4gcmVxOworfQorCisvKiBhdG9taWNhbGx5IGdldCBuZXh0IGNvbXBsZXRlZCByZXF1ZXN0ICovCitzdGF0aWMgc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqbmV4dF9jb21wbGV0ZV9yZXEoc3RydWN0IGZpbGVfaW5mbyAqZmkpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgcGVuZGluZ19yZXF1ZXN0ICpyZXE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKKwlyZXEgPSBfX25leHRfY29tcGxldGVfcmVxKGZpKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmaS0+cmVxbGlzdHNfbG9jaywgZmxhZ3MpOworCXJldHVybiByZXE7Cit9CiAKIHN0YXRpYyBzc2l6ZV90IHJhdzEzOTRfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKiBidWZmZXIsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKiBvZmZzZXRfaXNfaWdub3JlZCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBmaWxlX2luZm8gKmZpID0gKHN0cnVjdCBmaWxlX2luZm8gKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqbGg7CiAJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxOwogCXNzaXplX3QgcmV0OwogCkBAIC00ODcsMjIgKzUxMCwyMSBAQAogCX0KIAogCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykgewotCQlpZiAoZG93bl90cnlsb2NrKCZmaS0+Y29tcGxldGVfc2VtKSkgeworCQlpZiAoIShyZXEgPSBuZXh0X2NvbXBsZXRlX3JlcShmaSkpKQogCQkJcmV0dXJuIC1FQUdBSU47Ci0JCX0KIAl9IGVsc2UgewotCQlpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZmaS0+Y29tcGxldGVfc2VtKSkgeworCQkvKgorCQkgKiBOQjogV2UgY2FsbCB0aGUgbWFjcm8gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCkgd2l0aCBhCisJCSAqIGNvbmRpdGlvbiBhcmd1bWVudCB3aXRoIHNpZGUgZWZmZWN0LiAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlCisJCSAqIGJlY2F1c2UgdGhlIHNpZGUgZWZmZWN0IGRvZXMgbm90IG9jY3VyIHVudGlsIHRoZSBjb25kaXRpb24KKwkJICogYmVjYW1lIHRydWUsIGFuZCB3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKSB3b24ndCBldmFsdWF0ZQorCQkgKiB0aGUgY29uZGl0aW9uIGFnYWluIGFmdGVyIHRoYXQuCisJCSAqLworCQlpZiAod2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKGZpLT53YWl0X2NvbXBsZXRlLAorCQkJCQkgICAgIChyZXEgPSBuZXh0X2NvbXBsZXRlX3JlcShmaSkpKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCX0KIAl9CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKLQlsaCA9IGZpLT5yZXFfY29tcGxldGUubmV4dDsKLQlsaXN0X2RlbChsaCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKLQotCXJlcSA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QsIGxpc3QpOwotCiAJaWYgKHJlcS0+cmVxLmxlbmd0aCkgewogCQlpZiAoY29weV90b191c2VyKGludDJwdHIocmVxLT5yZXEucmVjdmIpLCByZXEtPmRhdGEsCiAJCQkJIHJlcS0+cmVxLmxlbmd0aCkpIHsKQEAgLTE3NTIsNiArMTc3NCw3IEBACiAJYWRkci0+bm90aWZpY2F0aW9uX29wdGlvbnMgfD0gYWRkci0+Y2xpZW50X3RyYW5zYWN0aW9uczsKIAlhZGRyLT5yZWN2YiA9IHJlcS0+cmVxLnJlY3ZiOwogCWFkZHItPnJlY19sZW5ndGggPSAodTE2KSAoKHJlcS0+cmVxLm1pc2MgPj4gMTYpICYgMHhGRkZGKTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCWhpID0gZmluZF9ob3N0X2luZm8oZmktPmhvc3QpOwogCXNhbWVfaG9zdCA9IDA7CkBAIC0xNzc3LDkgKzE4MDAsOSBAQAogCX0KIAlpZiAoc2FtZV9ob3N0KSB7CiAJCS8qIGFkZHJlc3NyYW5nZSBvY2N1cGllZCBieSBzYW1lIGhvc3QgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJdmZyZWUoYWRkci0+YWRkcl9zcGFjZV9idWZmZXIpOwogCQlrZnJlZShhZGRyKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuICgtRUFMUkVBRFkpOwogCX0KIAkvKiBhbm90aGVyIGhvc3Qgd2l0aCB2YWxpZCBhZGRyZXNzLWVudHJ5IGNvbnRhaW5pbmcgc2FtZSBhZGRyZXNzcmFuZ2UgKi8KQEAgLTE4MDcsNiArMTgzMCw4IEBACiAJCQl9CiAJCX0KIAl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKKwogCWlmIChhbm90aGVyX2hvc3QpIHsKIAkJREJHTVNHKCJhbm90aGVyIGhvc3RzIGVudHJ5IGlzIHZhbGlkIC0+IFNVQ0NFU1MiKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihpbnQycHRyKHJlcS0+cmVxLnJlY3ZiKSwKQEAgLTE4MTUsMTEgKzE4NDAsMTEgQEAKIAkJCSAgICAgICAiIGFkZHJlc3MtcmFuZ2UtZW50cnkgaXMgaW52YWxpZCAtPiBFRkFVTFQgISEhXG4iKTsKIAkJCXZmcmVlKGFkZHItPmFkZHJfc3BhY2VfYnVmZmVyKTsKIAkJCWtmcmVlKGFkZHIpOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJCXJldHVybiAoLUVGQVVMVCk7CiAJCX0KIAkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsJLyogaW1tZWRpYXRlIHN1Y2Nlc3Mgb3IgZmFpbCAqLwogCQkvKiBJTlNFUlQgRU5UUlkgKi8KKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAJCWxpc3RfYWRkX3RhaWwoJmFkZHItPmFkZHJfbGlzdCwgJmZpLT5hZGRyX2xpc3QpOwogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByYXcxMzk0X3JlcXVlc3QpOwpAQCAtMTgzMCwxNSArMTg1NSwxNSBAQAogCQkJCSAgICByZXEtPnJlcS5hZGRyZXNzICsgcmVxLT5yZXEubGVuZ3RoKTsKIAlpZiAocmV0dmFsKSB7CiAJCS8qIElOU0VSVCBFTlRSWSAqLworCQlzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJbGlzdF9hZGRfdGFpbCgmYWRkci0+YWRkcl9saXN0LCAmZmktPmFkZHJfbGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAJfSBlbHNlIHsKIAkJREJHTVNHKCJhcm1fcmVnaXN0ZXIgZmFpbGVkIGVycm5vOiAlZCBcbiIsIHJldHZhbCk7CiAJCXZmcmVlKGFkZHItPmFkZHJfc3BhY2VfYnVmZmVyKTsKIAkJa2ZyZWUoYWRkcik7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAJCXJldHVybiAoLUVBTFJFQURZKTsKIAl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAlmcmVlX3BlbmRpbmdfcmVxdWVzdChyZXEpOwkvKiBpbW1lZGlhdGUgc3VjY2VzcyBvciBmYWlsICovCiAJcmV0dXJuIHNpemVvZihzdHJ1Y3QgcmF3MTM5NF9yZXF1ZXN0KTsKIH0KQEAgLTE5MDQsMTAgKzE5MjksMTAgQEAKIAlpZiAoYW5vdGhlcl9ob3N0KSB7CiAJCURCR01TRygiZGVsZXRlIGVudHJ5IGZyb20gbGlzdCAtPiBzdWNjZXNzIik7CiAJCWxpc3RfZGVsKCZhZGRyLT5hZGRyX2xpc3QpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCQl2ZnJlZShhZGRyLT5hZGRyX3NwYWNlX2J1ZmZlcik7CiAJCWtmcmVlKGFkZHIpOwogCQlmcmVlX3BlbmRpbmdfcmVxdWVzdChyZXEpOwkvKiBpbW1lZGlhdGUgc3VjY2VzcyBvciBmYWlsICovCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7CiAJCXJldHVybiBzaXplb2Yoc3RydWN0IHJhdzEzOTRfcmVxdWVzdCk7CiAJfQogCXJldHZhbCA9CkBAIC0xOTQ5LDIzICsxOTc0LDE5IEBACiAJCSAgICAoYXJtX2FkZHItPmVuZCA+IHJlcS0+cmVxLmFkZHJlc3MpKSB7CiAJCQlpZiAocmVxLT5yZXEuYWRkcmVzcyArIHJlcS0+cmVxLmxlbmd0aCA8PSBhcm1fYWRkci0+ZW5kKSB7CiAJCQkJb2Zmc2V0ID0gcmVxLT5yZXEuYWRkcmVzcyAtIGFybV9hZGRyLT5zdGFydDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCiAJCQkJREJHTVNHCiAJCQkJICAgICgiYXJtX2dldF9idWYgY29weV90b191c2VyKCAlMDhYLCAlcCwgJXUgKSIsCiAJCQkJICAgICAodTMyKSByZXEtPnJlcS5yZWN2YiwKIAkJCQkgICAgIGFybV9hZGRyLT5hZGRyX3NwYWNlX2J1ZmZlciArIG9mZnNldCwKIAkJCQkgICAgICh1MzIpIHJlcS0+cmVxLmxlbmd0aCk7Ci0KIAkJCQlpZiAoY29weV90b191c2VyCiAJCQkJICAgIChpbnQycHRyKHJlcS0+cmVxLnJlY3ZiKSwKIAkJCQkgICAgIGFybV9hZGRyLT5hZGRyX3NwYWNlX2J1ZmZlciArIG9mZnNldCwKLQkJCQkgICAgIHJlcS0+cmVxLmxlbmd0aCkpIHsKLQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssCi0JCQkJCQkJICAgICAgIGZsYWdzKTsKKwkJCQkgICAgIHJlcS0+cmVxLmxlbmd0aCkpCiAJCQkJCXJldHVybiAoLUVGQVVMVCk7Ci0JCQkJfQogCi0JCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaG9zdF9pbmZvX2xvY2ssIGZsYWdzKTsKIAkJCQkvKiBXZSBoYXZlIHRvIGZyZWUgdGhlIHJlcXVlc3QsIGJlY2F1c2Ugd2UKIAkJCQkgKiBxdWV1ZSBubyByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSBub2JvZHkKIAkJCQkgKiB3aWxsIGZyZWUgaXQuICovCkBAIC0yMDA1LDI0ICsyMDI2LDIzIEBACiAJCSAgICAoYXJtX2FkZHItPmVuZCA+IHJlcS0+cmVxLmFkZHJlc3MpKSB7CiAJCQlpZiAocmVxLT5yZXEuYWRkcmVzcyArIHJlcS0+cmVxLmxlbmd0aCA8PSBhcm1fYWRkci0+ZW5kKSB7CiAJCQkJb2Zmc2V0ID0gcmVxLT5yZXEuYWRkcmVzcyAtIGFybV9hZGRyLT5zdGFydDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZob3N0X2luZm9fbG9jaywgZmxhZ3MpOwogCiAJCQkJREJHTVNHCiAJCQkJICAgICgiYXJtX3NldF9idWYgY29weV9mcm9tX3VzZXIoICVwLCAlMDhYLCAldSApIiwKIAkJCQkgICAgIGFybV9hZGRyLT5hZGRyX3NwYWNlX2J1ZmZlciArIG9mZnNldCwKIAkJCQkgICAgICh1MzIpIHJlcS0+cmVxLnNlbmRiLAogCQkJCSAgICAgKHUzMikgcmVxLT5yZXEubGVuZ3RoKTsKLQogCQkJCWlmIChjb3B5X2Zyb21fdXNlcgogCQkJCSAgICAoYXJtX2FkZHItPmFkZHJfc3BhY2VfYnVmZmVyICsgb2Zmc2V0LAogCQkJCSAgICAgaW50MnB0cihyZXEtPnJlcS5zZW5kYiksCi0JCQkJICAgICByZXEtPnJlcS5sZW5ndGgpKSB7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLAotCQkJCQkJCSAgICAgICBmbGFncyk7CisJCQkJICAgICByZXEtPnJlcS5sZW5ndGgpKQogCQkJCQlyZXR1cm4gKC1FRkFVTFQpOwotCQkJCX0KIAotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3RfaW5mb19sb2NrLCBmbGFncyk7Ci0JCQkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsJLyogd2UgaGF2ZSB0byBmcmVlIHRoZSByZXF1ZXN0LCBiZWNhdXNlIHdlIHF1ZXVlIG5vIHJlc3BvbnNlLCBhbmQgdGhlcmVmb3JlIG5vYm9keSB3aWxsIGZyZWUgaXQgKi8KKwkJCQkvKiBXZSBoYXZlIHRvIGZyZWUgdGhlIHJlcXVlc3QsIGJlY2F1c2Ugd2UKKwkJCQkgKiBxdWV1ZSBubyByZXNwb25zZSwgYW5kIHRoZXJlZm9yZSBub2JvZHkKKwkJCQkgKiB3aWxsIGZyZWUgaXQuICovCisJCQkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKIAkJCQlyZXR1cm4gc2l6ZW9mKHN0cnVjdCByYXcxMzk0X3JlcXVlc3QpOwogCQkJfSBlbHNlIHsKIAkJCQlEQkdNU0coImFybV9zZXRfYnVmIHJlcXVlc3QgZXhjZWVkZWQgbWFwcGluZyIpOwpAQCAtMjc0NCw3ICsyNzY0LDcgQEAKIAl1bnNpZ25lZCBpbnQgbWFzayA9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlwb2xsX3dhaXQoZmlsZSwgJmZpLT5wb2xsX3dhaXRfY29tcGxldGUsIHB0KTsKKwlwb2xsX3dhaXQoZmlsZSwgJmZpLT53YWl0X2NvbXBsZXRlLCBwdCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZmktPnJlcWxpc3RzX2xvY2ssIGZsYWdzKTsKIAlpZiAoIWxpc3RfZW1wdHkoJmZpLT5yZXFfY29tcGxldGUpKSB7CkBAIC0yNzY5LDkgKzI3ODksOCBAQAogCWZpLT5zdGF0ZSA9IG9wZW5lZDsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9wZW5kaW5nKTsKIAlJTklUX0xJU1RfSEVBRCgmZmktPnJlcV9jb21wbGV0ZSk7Ci0Jc2VtYV9pbml0KCZmaS0+Y29tcGxldGVfc2VtLCAwKTsKIAlzcGluX2xvY2tfaW5pdCgmZmktPnJlcWxpc3RzX2xvY2spOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZpLT5wb2xsX3dhaXRfY29tcGxldGUpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmZpLT53YWl0X2NvbXBsZXRlKTsKIAlJTklUX0xJU1RfSEVBRCgmZmktPmFkZHJfbGlzdCk7CiAKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaTsKQEAgLTI3ODQsNyArMjgwMyw3IEBACiAJc3RydWN0IGZpbGVfaW5mbyAqZmkgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGxpc3RfaGVhZCAqbGg7CiAJc3RydWN0IHBlbmRpbmdfcmVxdWVzdCAqcmVxOwotCWludCBkb25lID0gMCwgaSwgZmFpbCA9IDA7CisJaW50IGksIGZhaWw7CiAJaW50IHJldHZhbCA9IDA7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAJc3RydWN0IGFybV9hZGRyICphZGRyID0gTlVMTDsKQEAgLTI4NjQsMjUgKzI4ODMsMjggQEAKIAkJICAgICAgICJlcnJvcihzKSBvY2N1cnJlZCBcbiIpOwogCX0KIAotCXdoaWxlICghZG9uZSkgeworCWZvciAoOzspIHsKKwkJLyogVGhpcyBsb2NrZWQgc2VjdGlvbiBndWFyYW50ZWVzIHRoYXQgbmVpdGhlcgorCQkgKiBjb21wbGV0ZSBub3IgcGVuZGluZyByZXF1ZXN0cyBleGlzdCBvbmNlIGkhPTAgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmZpLT5yZXFsaXN0c19sb2NrLCBmbGFncyk7Ci0KLQkJd2hpbGUgKCFsaXN0X2VtcHR5KCZmaS0+cmVxX2NvbXBsZXRlKSkgewotCQkJbGggPSBmaS0+cmVxX2NvbXBsZXRlLm5leHQ7Ci0JCQlsaXN0X2RlbChsaCk7Ci0KLQkJCXJlcSA9IGxpc3RfZW50cnkobGgsIHN0cnVjdCBwZW5kaW5nX3JlcXVlc3QsIGxpc3QpOwotCisJCXdoaWxlICgocmVxID0gX19uZXh0X2NvbXBsZXRlX3JlcShmaSkpKQogCQkJZnJlZV9wZW5kaW5nX3JlcXVlc3QocmVxKTsKLQkJfQogCi0JCWlmIChsaXN0X2VtcHR5KCZmaS0+cmVxX3BlbmRpbmcpKQotCQkJZG9uZSA9IDE7Ci0KKwkJaSA9IGxpc3RfZW1wdHkoJmZpLT5yZXFfcGVuZGluZyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZpLT5yZXFsaXN0c19sb2NrLCBmbGFncyk7CiAKLQkJaWYgKCFkb25lKQotCQkJZG93bl9pbnRlcnJ1cHRpYmxlKCZmaS0+Y29tcGxldGVfc2VtKTsKKwkJaWYgKGkpCisJCQlicmVhazsKKwkJLyoKKwkJICogU2xlZXAgdW50aWwgbW9yZSByZXF1ZXN0cyBjYW4gYmUgZnJlZWQuCisJCSAqCisJCSAqIE5COiBXZSBjYWxsIHRoZSBtYWNybyB3YWl0X2V2ZW50KCkgd2l0aCBhIGNvbmRpdGlvbiBhcmd1bWVudAorCQkgKiB3aXRoIHNpZGUgZWZmZWN0LiAgVGhpcyBpcyBvbmx5IHBvc3NpYmxlIGJlY2F1c2UgdGhlIHNpZGUKKwkJICogZWZmZWN0IGRvZXMgbm90IG9jY3VyIHVudGlsIHRoZSBjb25kaXRpb24gYmVjYW1lIHRydWUsIGFuZAorCQkgKiB3YWl0X2V2ZW50KCkgd29uJ3QgZXZhbHVhdGUgdGhlIGNvbmRpdGlvbiBhZ2FpbiBhZnRlciB0aGF0LgorCQkgKi8KKwkJd2FpdF9ldmVudChmaS0+d2FpdF9jb21wbGV0ZSwgKHJlcSA9IG5leHRfY29tcGxldGVfcmVxKGZpKSkpOworCQlmcmVlX3BlbmRpbmdfcmVxdWVzdChyZXEpOwogCX0KIAogCS8qIFJlbW92ZSBhbnkgc3ViLXRyZWVzIGxlZnQgYnkgdXNlciBzcGFjZSBwcm9ncmFtcyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZWVlMTM5NC9zYnAyLmMgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwppbmRleCBiMDg3NTVlLi42OTg2YWMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuYworKysgYi9kcml2ZXJzL2llZWUxMzk0L3NicDIuYwpAQCAtMzgsMzEgKzM4LDM2IEBACiAgKgkgIGJ1dCB0aGUgY29kZSBuZWVkcyBhZGRpdGlvbmFsIGRlYnVnZ2luZy4KICAqLwogCisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvZ2ZwLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KLSNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdGF0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAKLSNpbmNsdWRlIDxhc20vY3VycmVudC5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaWZkZWYgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEhZU19ETUEKKyNpbmNsdWRlIDxhc20vaW8uaD4gLyogZm9yIGJ1c190b192aXJ0ICovCisjZW5kaWYKIAogI2luY2x1ZGUgPHNjc2kvc2NzaS5oPgogI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5kLmg+CkBAIC03MSwxMyArNzYsMTQgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfaG9zdC5oPgogCiAjaW5jbHVkZSAiY3NyMTIxMi5oIgotI2luY2x1ZGUgImllZWUxMzk0LmgiCi0jaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKLSNpbmNsdWRlICJpZWVlMTM5NF9jb3JlLmgiCi0jaW5jbHVkZSAibm9kZW1nci5oIgotI2luY2x1ZGUgImhvc3RzLmgiCiAjaW5jbHVkZSAiaGlnaGxldmVsLmgiCisjaW5jbHVkZSAiaG9zdHMuaCIKKyNpbmNsdWRlICJpZWVlMTM5NC5oIgorI2luY2x1ZGUgImllZWUxMzk0X2NvcmUuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF9ob3RwbHVnLmgiCiAjaW5jbHVkZSAiaWVlZTEzOTRfdHJhbnNhY3Rpb25zLmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKKyNpbmNsdWRlICJub2RlbWdyLmgiCiAjaW5jbHVkZSAic2JwMi5oIgogCiAvKgpAQCAtMTczLDExICsxNzksNiBAQAogCSIsIG92ZXJyaWRlIGludGVybmFsIGJsYWNrbGlzdCA9ICIgX19zdHJpbmdpZnkoU0JQMl9XT1JLQVJPVU5EX09WRVJSSURFKQogCSIsIG9yIGEgY29tYmluYXRpb24pIik7CiAKLS8qIGxlZ2FjeSBwYXJhbWV0ZXIgKi8KLXN0YXRpYyBpbnQgZm9yY2VfaW5xdWlyeV9oYWNrOwotbW9kdWxlX3BhcmFtKGZvcmNlX2lucXVpcnlfaGFjaywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZm9yY2VfaW5xdWlyeV9oYWNrLCAiRGVwcmVjYXRlZCwgdXNlICd3b3JrYXJvdW5kcyciKTsKLQogLyoKICAqIEV4cG9ydCBpbmZvcm1hdGlvbiBhYm91dCBwcm90b2NvbHMvZGV2aWNlcyBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIuCiAgKi8KQEAgLTIwOCw5ICsyMDksOSBAQAogI2RlZmluZSBvdXRzdGFuZGluZ19vcmJfaW5jciBnbG9iYWxfb3V0c3RhbmRpbmdfY29tbWFuZF9vcmJzKysKICNkZWZpbmUgb3V0c3RhbmRpbmdfb3JiX2RlY3IgZ2xvYmFsX291dHN0YW5kaW5nX2NvbW1hbmRfb3Jicy0tCiAjZWxzZQotI2RlZmluZSBTQlAyX09SQl9ERUJVRyhmbXQsIGFyZ3MuLi4pCi0jZGVmaW5lIG91dHN0YW5kaW5nX29yYl9pbmNyCi0jZGVmaW5lIG91dHN0YW5kaW5nX29yYl9kZWNyCisjZGVmaW5lIFNCUDJfT1JCX0RFQlVHKGZtdCwgYXJncy4uLikJZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIG91dHN0YW5kaW5nX29yYl9pbmNyCQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgb3V0c3RhbmRpbmdfb3JiX2RlY3IJCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSUVFRTEzOTRfU0JQMl9ERUJVR19ETUEKQEAgLTIyMiw4ICsyMjMsOCBAQAogCQkgLS1nbG9iYWxfb3V0c3RhbmRpbmdfZG1hcywgIyMgYXJncykKIHN0YXRpYyB1MzIgZ2xvYmFsX291dHN0YW5kaW5nX2RtYXMgPSAwOwogI2Vsc2UKLSNkZWZpbmUgU0JQMl9ETUFfQUxMT0MoZm10LCBhcmdzLi4uKQotI2RlZmluZSBTQlAyX0RNQV9GUkVFKGZtdCwgYXJncy4uLikKKyNkZWZpbmUgU0JQMl9ETUFfQUxMT0MoZm10LCBhcmdzLi4uKQlkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgU0JQMl9ETUFfRlJFRShmbXQsIGFyZ3MuLi4pCWRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKICNpZiBDT05GSUdfSUVFRTEzOTRfU0JQMl9ERUJVRyA+PSAyCkBAIC0yMzcsNyArMjM4LDcgQEAKICNkZWZpbmUgU0JQMl9OT1RJQ0UoZm10LCBhcmdzLi4uKQlIUFNCX05PVElDRSgic2JwMjogImZtdCwgIyMgYXJncykKICNkZWZpbmUgU0JQMl9XQVJOKGZtdCwgYXJncy4uLikJCUhQU0JfV0FSTigic2JwMjogImZtdCwgIyMgYXJncykKICNlbHNlCi0jZGVmaW5lIFNCUDJfREVCVUcoZm10LCBhcmdzLi4uKQorI2RlZmluZSBTQlAyX0RFQlVHKGZtdCwgYXJncy4uLikJZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIFNCUDJfSU5GTyhmbXQsIGFyZ3MuLi4pCQlIUFNCX0lORk8oInNicDI6ICJmbXQsICMjIGFyZ3MpCiAjZGVmaW5lIFNCUDJfTk9USUNFKGZtdCwgYXJncy4uLikgICAgICAgSFBTQl9OT1RJQ0UoInNicDI6ICJmbXQsICMjIGFyZ3MpCiAjZGVmaW5lIFNCUDJfV0FSTihmbXQsIGFyZ3MuLi4pICAgICAgICAgSFBTQl9XQVJOKCJzYnAyOiAiZm10LCAjIyBhcmdzKQpAQCAtMzU2LDcgKzM1Nyw3IEBACiAvKgogICogQ29udmVydHMgYSBidWZmZXIgZnJvbSBiZTMyIHRvIGNwdSBieXRlIG9yZGVyaW5nLiBMZW5ndGggaXMgaW4gYnl0ZXMuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2JwMnV0aWxfYmUzMl90b19jcHVfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYnAydXRpbF9iZTMyX3RvX2NwdV9idWZmZXIodm9pZCAqYnVmZmVyLCBpbnQgbGVuZ3RoKQogewogCXUzMiAqdGVtcCA9IGJ1ZmZlcjsKIApAQCAtMzY5LDcgKzM3MCw3IEBACiAvKgogICogQ29udmVydHMgYSBidWZmZXIgZnJvbSBjcHUgdG8gYmUzMiBieXRlIG9yZGVyaW5nLiBMZW5ndGggaXMgaW4gYnl0ZXMuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgc2JwMnV0aWxfY3B1X3RvX2JlMzJfYnVmZmVyKHZvaWQgKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIodm9pZCAqYnVmZmVyLCBpbnQgbGVuZ3RoKQogewogCXUzMiAqdGVtcCA9IGJ1ZmZlcjsKIApAQCAtMzgwLDggKzM4MSw4IEBACiB9CiAjZWxzZSAvKiBCSUdfRU5ESUFOICovCiAvKiBXaHkgd2FzdGUgdGhlIGNwdSBjeWNsZXM/ICovCi0jZGVmaW5lIHNicDJ1dGlsX2JlMzJfdG9fY3B1X2J1ZmZlcih4LHkpCi0jZGVmaW5lIHNicDJ1dGlsX2NwdV90b19iZTMyX2J1ZmZlcih4LHkpCisjZGVmaW5lIHNicDJ1dGlsX2JlMzJfdG9fY3B1X2J1ZmZlcih4LHkpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoeCx5KSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0lFRUUxMzk0X1NCUDJfUEFDS0VUX0RVTVAKQEAgLTQxNywyNCArNDE4LDI2IEBACiAJcmV0dXJuOwogfQogI2Vsc2UKLSNkZWZpbmUgc2JwMnV0aWxfcGFja2V0X2R1bXAodyx4LHkseikKKyNkZWZpbmUgc2JwMnV0aWxfcGFja2V0X2R1bXAodyx4LHkseikgZG8ge30gd2hpbGUgKDApCiAjZW5kaWYKIAotLyoKLSAqIEdvb2Z5IHJvdXRpbmUgdGhhdCBiYXNpY2FsbHkgZG9lcyBhIGRvd25fdGltZW91dCBmdW5jdGlvbi4KLSAqLwotc3RhdGljIGludCBzYnAydXRpbF9kb3duX3RpbWVvdXQoYXRvbWljX3QgKmRvbmUsIGludCB0aW1lb3V0KQotewotCWludCBpOworc3RhdGljIERFQ0xBUkVfV0FJVF9RVUVVRV9IRUFEKGFjY2Vzc193cSk7CiAKLQlmb3IgKGkgPSB0aW1lb3V0OyAoaSA+IDAgJiYgYXRvbWljX3JlYWQoZG9uZSkgPT0gMCk7IGktPSBIWi8xMCkgewotCQlpZiAobXNsZWVwX2ludGVycnVwdGlibGUoMTAwKSkJLyogMTAwbXMgKi8KLQkJCXJldHVybiAxOwotCX0KLQlyZXR1cm4gKGkgPiAwKSA/IDAgOiAxOworLyoKKyAqIFdhaXRzIGZvciBjb21wbGV0aW9uIG9mIGFuIFNCUC0yIGFjY2VzcyByZXF1ZXN0LgorICogUmV0dXJucyBub256ZXJvIGlmIHRpbWVkIG91dCBvciBwcmVtYXR1cmVseSBpbnRlcnJ1cHRlZC4KKyAqLworc3RhdGljIGludCBzYnAydXRpbF9hY2Nlc3NfdGltZW91dChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLAorCQkJCSAgIGludCB0aW1lb3V0KQoreworCWxvbmcgbGVmdG92ZXIgPSB3YWl0X2V2ZW50X2ludGVycnVwdGlibGVfdGltZW91dCgKKwkJCQlhY2Nlc3Nfd3EsIHNjc2lfaWQtPmFjY2Vzc19jb21wbGV0ZSwgdGltZW91dCk7CisKKwlzY3NpX2lkLT5hY2Nlc3NfY29tcGxldGUgPSAwOworCXJldHVybiBsZWZ0b3ZlciA8PSAwOwogfQogCi0vKiBGcmVlJ3MgYW4gYWxsb2NhdGVkIHBhY2tldCAqLworLyogRnJlZXMgYW4gYWxsb2NhdGVkIHBhY2tldCAqLwogc3RhdGljIHZvaWQgc2JwMl9mcmVlX3BhY2tldChzdHJ1Y3QgaHBzYl9wYWNrZXQgKnBhY2tldCkKIHsKIAlocHNiX2ZyZWVfdGxhYmVsKHBhY2tldCk7CkBAIC00NjgsNiArNDcxLDQ0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkIHNicDJ1dGlsX25vdGlmeV9mZXRjaF9hZ2VudChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLAorCQkJCQl1NjQgb2Zmc2V0LCBxdWFkbGV0X3QgKmRhdGEsIHNpemVfdCBsZW4pCit7CisJLyoKKwkgKiBUaGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBhZnRlciBhIGJ1cyByZXNldCB3aXRoaW4gd2hpY2ggdGhlIG5vZGUKKwkgKiBlbnRyeSdzIGdlbmVyYXRpb24gaXMgY3VycmVudCBidXQgdGhlIHJlY29ubmVjdCB3YXNuJ3QgY29tcGxldGVkLgorCSAqLworCWlmICh1bmxpa2VseShhdG9taWNfcmVhZCgmc2NzaV9pZC0+c3RhdGUpID09IFNCUDJMVV9TVEFURV9JTl9SRVNFVCkpCisJCXJldHVybjsKKworCWlmIChocHNiX25vZGVfd3JpdGUoc2NzaV9pZC0+bmUsCisJCQkgICAgc2NzaV9pZC0+c2JwMl9jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHIgKyBvZmZzZXQsCisJCQkgICAgZGF0YSwgbGVuKSkKKwkJU0JQMl9FUlIoInNicDJ1dGlsX25vdGlmeV9mZXRjaF9hZ2VudCBmYWlsZWQuIik7CisJLyoKKwkgKiBOb3cgYWNjZXB0IG5ldyBTQ1NJIGNvbW1hbmRzLCB1bmxlc3MgYSBidXMgcmVzZXQgaGFwcGVuZGVkIGR1cmluZworCSAqIGhwc2Jfbm9kZV93cml0ZS4KKwkgKi8KKwlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZzY3NpX2lkLT5zdGF0ZSkgIT0gU0JQMkxVX1NUQVRFX0lOX1JFU0VUKSkKKwkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNjc2lfaWQtPnNjc2lfaG9zdCk7Cit9CisKK3N0YXRpYyB2b2lkIHNicDJ1dGlsX3dyaXRlX29yYl9wb2ludGVyKHZvaWQgKnApCit7CisJcXVhZGxldF90IGRhdGFbMl07CisKKwlkYXRhWzBdID0gT1JCX1NFVF9OT0RFX0lEKAorCQkJKChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICopcCktPmhpLT5ob3N0LT5ub2RlX2lkKTsKKwlkYXRhWzFdID0gKChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICopcCktPmxhc3Rfb3JiX2RtYTsKKwlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoZGF0YSwgOCk7CisJc2JwMnV0aWxfbm90aWZ5X2ZldGNoX2FnZW50KHAsIFNCUDJfT1JCX1BPSU5URVJfT0ZGU0VULCBkYXRhLCA4KTsKK30KKworc3RhdGljIHZvaWQgc2JwMnV0aWxfd3JpdGVfZG9vcmJlbGwodm9pZCAqcCkKK3sKKwlzYnAydXRpbF9ub3RpZnlfZmV0Y2hfYWdlbnQocCwgU0JQMl9ET09SQkVMTF9PRkZTRVQsIE5VTEwsIDQpOworfQorCiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gY3JlYXRlIGEgcG9vbCBvZiBjb21tYW5kIG9yYnMgdXNlZCBmb3IKICAqIGNvbW1hbmQgcHJvY2Vzc2luZy4gSXQgaXMgY2FsbGVkIHdoZW4gYSBuZXcgc2JwMiBkZXZpY2UgaXMgZGV0ZWN0ZWQuCkBAIC00OTIsNyArNTMzLDcgQEAKIAkJY29tbWFuZC0+Y29tbWFuZF9vcmJfZG1hID0KIAkJICAgIHBjaV9tYXBfc2luZ2xlKGhpLT5ob3N0LT5wZGV2LCAmY29tbWFuZC0+Y29tbWFuZF9vcmIsCiAJCQkJICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCSAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlTQlAyX0RNQV9BTExPQygic2luZ2xlIGNvbW1hbmQgb3JiIERNQSIpOwogCQljb21tYW5kLT5zZ2VfZG1hID0KIAkJICAgIHBjaV9tYXBfc2luZ2xlKGhpLT5ob3N0LT5wZGV2LApAQCAtNTI1LDcgKzU2Niw3IEBACiAJCQkvKiBSZWxlYXNlIG91ciBnZW5lcmljIERNQSdzICovCiAJCQlwY2lfdW5tYXBfc2luZ2xlKGhvc3QtPnBkZXYsIGNvbW1hbmQtPmNvbW1hbmRfb3JiX2RtYSwKIAkJCQkJIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCSBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCQkgUENJX0RNQV9UT0RFVklDRSk7CiAJCQlTQlAyX0RNQV9GUkVFKCJzaW5nbGUgY29tbWFuZCBvcmIgRE1BIik7CiAJCQlwY2lfdW5tYXBfc2luZ2xlKGhvc3QtPnBkZXYsIGNvbW1hbmQtPnNnZV9kbWEsCiAJCQkJCSBzaXplb2YoY29tbWFuZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCkBAIC03MTUsNiArNzU2LDcgQEAKIAkJCXNicDJzY3NpX2NvbXBsZXRlX2FsbF9jb21tYW5kcyhzY3NpX2lkLCBESURfTk9fQ09OTkVDVCk7CiAJCS8qIHNjc2lfcmVtb3ZlX2RldmljZSgpIHdpbGwgdHJpZ2dlciBzaHV0ZG93biBmdW5jdGlvbnMgb2YgU0NTSQogCQkgKiBoaWdobGV2ZWwgZHJpdmVycyB3aGljaCB3b3VsZCBkZWFkbG9jayBpZiBibG9ja2VkLiAqLworCQlhdG9taWNfc2V0KCZzY3NpX2lkLT5zdGF0ZSwgU0JQMkxVX1NUQVRFX0lOX1NIVVRET1dOKTsKIAkJc2NzaV91bmJsb2NrX3JlcXVlc3RzKHNjc2lfaWQtPnNjc2lfaG9zdCk7CiAJfQogCXNkZXYgPSBzY3NpX2lkLT5zZGV2OwpAQCAtNzY2LDEwICs4MDgsMTIgQEAKIAkgKi8KIAlzYnAyc2NzaV9jb21wbGV0ZV9hbGxfY29tbWFuZHMoc2NzaV9pZCwgRElEX0JVU19CVVNZKTsKIAotCS8qIE1ha2Ugc3VyZSB3ZSB1bmJsb2NrIHJlcXVlc3RzIChzaW5jZSB0aGlzIGlzIGxpa2VseSBhZnRlciBhIGJ1cwotCSAqIHJlc2V0KS4gKi8KLQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2NzaV9pZC0+c2NzaV9ob3N0KTsKLQorCS8qIEFjY2VwdCBuZXcgY29tbWFuZHMgdW5sZXNzIHRoZXJlIHdhcyBhbm90aGVyIGJ1cyByZXNldCBpbiB0aGUKKwkgKiBtZWFudGltZS4gKi8KKwlpZiAoaHBzYl9ub2RlX2VudHJ5X3ZhbGlkKHNjc2lfaWQtPm5lKSkgeworCQlhdG9taWNfc2V0KCZzY3NpX2lkLT5zdGF0ZSwgU0JQMkxVX1NUQVRFX1JVTk5JTkcpOworCQlzY3NpX3VuYmxvY2tfcmVxdWVzdHMoc2NzaV9pZC0+c2NzaV9ob3N0KTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc5NCwxMSArODM4LDEyIEBACiAJc2NzaV9pZC0+c3BlZWRfY29kZSA9IElFRUUxMzk0X1NQRUVEXzEwMDsKIAlzY3NpX2lkLT5tYXhfcGF5bG9hZF9zaXplID0gc2JwMl9zcGVlZHRvX21heF9wYXlsb2FkW0lFRUUxMzk0X1NQRUVEXzEwMF07CiAJc2NzaV9pZC0+c3RhdHVzX2ZpZm9fYWRkciA9IENTUjEyMTJfSU5WQUxJRF9BRERSX1NQQUNFOwotCWF0b21pY19zZXQoJnNjc2lfaWQtPnNicDJfbG9naW5fY29tcGxldGUsIDApOwogCUlOSVRfTElTVF9IRUFEKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2ludXNlKTsKIAlJTklUX0xJU1RfSEVBRCgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9jb21wbGV0ZWQpOwogCUlOSVRfTElTVF9IRUFEKCZzY3NpX2lkLT5zY3NpX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2spOworCWF0b21pY19zZXQoJnNjc2lfaWQtPnN0YXRlLCBTQlAyTFVfU1RBVEVfUlVOTklORyk7CisJSU5JVF9XT1JLKCZzY3NpX2lkLT5wcm90b2NvbF93b3JrLCBOVUxMLCBOVUxMKTsKIAogCXVkLT5kZXZpY2UuZHJpdmVyX2RhdGEgPSBzY3NpX2lkOwogCkBAIC04ODEsMTEgKzkyNiwxNCBAQAogCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQ7CiAKIAloaSA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZzYnAyX2hpZ2hsZXZlbCwgaG9zdCk7Ci0KLQlpZiAoaGkpIHsKLQkJbGlzdF9mb3JfZWFjaF9lbnRyeShzY3NpX2lkLCAmaGktPnNjc2lfaWRzLCBzY3NpX2xpc3QpCisJaWYgKCFoaSkKKwkJcmV0dXJuOworCWxpc3RfZm9yX2VhY2hfZW50cnkoc2NzaV9pZCwgJmhpLT5zY3NpX2lkcywgc2NzaV9saXN0KQorCQlpZiAobGlrZWx5KGF0b21pY19yZWFkKCZzY3NpX2lkLT5zdGF0ZSkgIT0KKwkJCSAgIFNCUDJMVV9TVEFURV9JTl9TSFVURE9XTikpIHsKKwkJCWF0b21pY19zZXQoJnNjc2lfaWQtPnN0YXRlLCBTQlAyTFVfU1RBVEVfSU5fUkVTRVQpOwogCQkJc2NzaV9ibG9ja19yZXF1ZXN0cyhzY3NpX2lkLT5zY3NpX2hvc3QpOwotCX0KKwkJfQogfQogCiAvKgpAQCAtOTcwLDggKzEwMTgsNyBAQAogCSAqIGNvbm5lY3RlZCB0byB0aGUgc2JwMiBkZXZpY2UgYmVpbmcgcmVtb3ZlZC4gVGhhdCBob3N0IHdvdWxkCiAJICogaGF2ZSBhIGNlcnRhaW4gYW1vdW50IG9mIHRpbWUgdG8gcmVsb2dpbiBiZWZvcmUgdGhlIHNicDIgZGV2aWNlCiAJICogYWxsb3dzIHNvbWVvbmUgZWxzZSB0byBsb2dpbiBpbnN0ZWFkLiBPbmUgc2Vjb25kIG1ha2VzIHNlbnNlLiAqLwotCW1zbGVlcF9pbnRlcnJ1cHRpYmxlKDEwMDApOwotCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkgeworCWlmIChtc2xlZXBfaW50ZXJydXB0aWJsZSgxMDAwKSkgewogCQlzYnAyX3JlbW92ZV9kZXZpY2Uoc2NzaV9pZCk7CiAJCXJldHVybiAtRUlOVFI7CiAJfQpAQCAtMTAzNiw3ICsxMDgzLDcgQEAKIAkJc2NzaV9yZW1vdmVfaG9zdChzY3NpX2lkLT5zY3NpX2hvc3QpOwogCQlzY3NpX2hvc3RfcHV0KHNjc2lfaWQtPnNjc2lfaG9zdCk7CiAJfQotCisJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKIAlzYnAydXRpbF9yZW1vdmVfY29tbWFuZF9vcmJfcG9vbChzY3NpX2lkKTsKIAogCWxpc3RfZGVsKCZzY3NpX2lkLT5zY3NpX2xpc3QpOwpAQCAtMTE4MiwxNyArMTIyOSwxNCBAQAogCQkJICAgICAic2JwMiBxdWVyeSBsb2dpbnMgb3JiIiwgc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYl9kbWEpOwogCiAJbWVtc2V0KHNjc2lfaWQtPnF1ZXJ5X2xvZ2luc19yZXNwb25zZSwgMCwgc2l6ZW9mKHN0cnVjdCBzYnAyX3F1ZXJ5X2xvZ2luc19yZXNwb25zZSkpOwotCW1lbXNldCgmc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLCAwLCBzaXplb2Yoc3RydWN0IHNicDJfc3RhdHVzX2Jsb2NrKSk7CiAKIAlkYXRhWzBdID0gT1JCX1NFVF9OT0RFX0lEKGhpLT5ob3N0LT5ub2RlX2lkKTsKIAlkYXRhWzFdID0gc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYl9kbWE7CiAJc2JwMnV0aWxfY3B1X3RvX2JlMzJfYnVmZmVyKGRhdGEsIDgpOwogCi0JYXRvbWljX3NldCgmc2NzaV9pZC0+c2JwMl9sb2dpbl9jb21wbGV0ZSwgMCk7Ci0KIAlocHNiX25vZGVfd3JpdGUoc2NzaV9pZC0+bmUsIHNjc2lfaWQtPnNicDJfbWFuYWdlbWVudF9hZ2VudF9hZGRyLCBkYXRhLCA4KTsKIAotCWlmIChzYnAydXRpbF9kb3duX3RpbWVvdXQoJnNjc2lfaWQtPnNicDJfbG9naW5fY29tcGxldGUsIDIqSFopKSB7CisJaWYgKHNicDJ1dGlsX2FjY2Vzc190aW1lb3V0KHNjc2lfaWQsIDIqSFopKSB7CiAJCVNCUDJfSU5GTygiRXJyb3IgcXVlcnlpbmcgbG9naW5zIHRvIFNCUC0yIGRldmljZSAtIHRpbWVkIG91dCIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC0xMjAyLDExICsxMjQ2LDggQEAKIAkJcmV0dXJuIC1FSU87CiAJfQogCi0JaWYgKFNUQVRVU19HRVRfUkVTUChzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSB8fAotCSAgICBTVEFUVVNfR0VUX0RFQURfQklUKHNjc2lfaWQtPnN0YXR1c19ibG9jay5PUkJfb2Zmc2V0X2hpX21pc2MpIHx8Ci0JICAgIFNUQVRVU19HRVRfU0JQX1NUQVRVUyhzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSkgewotCi0JCVNCUDJfSU5GTygiRXJyb3IgcXVlcnlpbmcgbG9naW5zIHRvIFNCUC0yIGRldmljZSAtIHRpbWVkIG91dCIpOworCWlmIChTVEFUVVNfVEVTVF9SRFMoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykpIHsKKwkJU0JQMl9JTkZPKCJFcnJvciBxdWVyeWluZyBsb2dpbnMgdG8gU0JQLTIgZGV2aWNlIC0gZmFpbGVkIik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTI3OCwyMSArMTMxOSwxOCBAQAogCQkJICAgICAic2JwMiBsb2dpbiBvcmIiLCBzY3NpX2lkLT5sb2dpbl9vcmJfZG1hKTsKIAogCW1lbXNldChzY3NpX2lkLT5sb2dpbl9yZXNwb25zZSwgMCwgc2l6ZW9mKHN0cnVjdCBzYnAyX2xvZ2luX3Jlc3BvbnNlKSk7Ci0JbWVtc2V0KCZzY3NpX2lkLT5zdGF0dXNfYmxvY2ssIDAsIHNpemVvZihzdHJ1Y3Qgc2JwMl9zdGF0dXNfYmxvY2spKTsKIAogCWRhdGFbMF0gPSBPUkJfU0VUX05PREVfSUQoaGktPmhvc3QtPm5vZGVfaWQpOwogCWRhdGFbMV0gPSBzY3NpX2lkLT5sb2dpbl9vcmJfZG1hOwogCXNicDJ1dGlsX2NwdV90b19iZTMyX2J1ZmZlcihkYXRhLCA4KTsKIAotCWF0b21pY19zZXQoJnNjc2lfaWQtPnNicDJfbG9naW5fY29tcGxldGUsIDApOwotCiAJaHBzYl9ub2RlX3dyaXRlKHNjc2lfaWQtPm5lLCBzY3NpX2lkLT5zYnAyX21hbmFnZW1lbnRfYWdlbnRfYWRkciwgZGF0YSwgOCk7CiAKIAkvKgogCSAqIFdhaXQgZm9yIGxvZ2luIHN0YXR1cyAodXAgdG8gMjAgc2Vjb25kcykuLi4KIAkgKi8KLQlpZiAoc2JwMnV0aWxfZG93bl90aW1lb3V0KCZzY3NpX2lkLT5zYnAyX2xvZ2luX2NvbXBsZXRlLCAyMCpIWikpIHsKLQkJU0JQMl9FUlIoIkVycm9yIGxvZ2dpbmcgaW50byBTQlAtMiBkZXZpY2UgLSBsb2dpbiB0aW1lZC1vdXQiKTsKKwlpZiAoc2JwMnV0aWxfYWNjZXNzX3RpbWVvdXQoc2NzaV9pZCwgMjAqSFopKSB7CisJCVNCUDJfRVJSKCJFcnJvciBsb2dnaW5nIGludG8gU0JQLTIgZGV2aWNlIC0gdGltZWQgb3V0Iik7CiAJCXJldHVybiAtRUlPOwogCX0KIApAQCAtMTMwMCwxOCArMTMzOCwxMiBAQAogCSAqIFNhbml0eS4gTWFrZSBzdXJlIHN0YXR1cyByZXR1cm5lZCBtYXRjaGVzIGxvZ2luIG9yYi4KIAkgKi8KIAlpZiAoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8gIT0gc2NzaV9pZC0+bG9naW5fb3JiX2RtYSkgewotCQlTQlAyX0VSUigiRXJyb3IgbG9nZ2luZyBpbnRvIFNCUC0yIGRldmljZSAtIGxvZ2luIHRpbWVkLW91dCIpOworCQlTQlAyX0VSUigiRXJyb3IgbG9nZ2luZyBpbnRvIFNCUC0yIGRldmljZSAtIHRpbWVkIG91dCIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKLQkvKgotCSAqIENoZWNrIHN0YXR1cwotCSAqLwotCWlmIChTVEFUVVNfR0VUX1JFU1Aoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykgfHwKLQkgICAgU1RBVFVTX0dFVF9ERUFEX0JJVChzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSB8fAotCSAgICBTVEFUVVNfR0VUX1NCUF9TVEFUVVMoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykpIHsKLQotCQlTQlAyX0VSUigiRXJyb3IgbG9nZ2luZyBpbnRvIFNCUC0yIGRldmljZSAtIGxvZ2luIGZhaWxlZCIpOworCWlmIChTVEFUVVNfVEVTVF9SRFMoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykpIHsKKwkJU0JQMl9FUlIoIkVycm9yIGxvZ2dpbmcgaW50byBTQlAtMiBkZXZpY2UgLSBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xMzM1LDkgKzEzNjcsNyBAQAogCXNjc2lfaWQtPnNicDJfY29tbWFuZF9ibG9ja19hZ2VudF9hZGRyICY9IDB4MDAwMGZmZmZmZmZmZmZmZlVMTDsKIAogCVNCUDJfSU5GTygiTG9nZ2VkIGludG8gU0JQLTIgZGV2aWNlIik7Ci0KIAlyZXR1cm4gMDsKLQogfQogCiAvKgpAQCAtMTM4NywyMSArMTQxNywxNyBAQAogCWRhdGFbMV0gPSBzY3NpX2lkLT5sb2dvdXRfb3JiX2RtYTsKIAlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoZGF0YSwgOCk7CiAKLQlhdG9taWNfc2V0KCZzY3NpX2lkLT5zYnAyX2xvZ2luX2NvbXBsZXRlLCAwKTsKLQogCWVycm9yID0gaHBzYl9ub2RlX3dyaXRlKHNjc2lfaWQtPm5lLAogCQkJCXNjc2lfaWQtPnNicDJfbWFuYWdlbWVudF9hZ2VudF9hZGRyLCBkYXRhLCA4KTsKIAlpZiAoZXJyb3IpCiAJCXJldHVybiBlcnJvcjsKIAogCS8qIFdhaXQgZm9yIGRldmljZSB0byBsb2dvdXQuLi4xIHNlY29uZC4gKi8KLQlpZiAoc2JwMnV0aWxfZG93bl90aW1lb3V0KCZzY3NpX2lkLT5zYnAyX2xvZ2luX2NvbXBsZXRlLCBIWikpCisJaWYgKHNicDJ1dGlsX2FjY2Vzc190aW1lb3V0KHNjc2lfaWQsIEhaKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlTQlAyX0lORk8oIkxvZ2dlZCBvdXQgb2YgU0JQLTIgZGV2aWNlIik7Ci0KIAlyZXR1cm4gMDsKLQogfQogCiAvKgpAQCAtMTQ0NSwyMCArMTQ3MSwxMCBAQAogCXNicDJ1dGlsX3BhY2tldF9kdW1wKHNjc2lfaWQtPnJlY29ubmVjdF9vcmIsIHNpemVvZihzdHJ1Y3Qgc2JwMl9yZWNvbm5lY3Rfb3JiKSwKIAkJCSAgICAgInNicDIgcmVjb25uZWN0IG9yYiIsIHNjc2lfaWQtPnJlY29ubmVjdF9vcmJfZG1hKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSBzdGF0dXMgZmlmbwotCSAqLwotCW1lbXNldCgmc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLCAwLCBzaXplb2Yoc3RydWN0IHNicDJfc3RhdHVzX2Jsb2NrKSk7Ci0KLQkvKgotCSAqIE9rLCBsZXQncyB3cml0ZSB0byB0aGUgdGFyZ2V0J3MgbWFuYWdlbWVudCBhZ2VudCByZWdpc3RlcgotCSAqLwogCWRhdGFbMF0gPSBPUkJfU0VUX05PREVfSUQoaGktPmhvc3QtPm5vZGVfaWQpOwogCWRhdGFbMV0gPSBzY3NpX2lkLT5yZWNvbm5lY3Rfb3JiX2RtYTsKIAlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoZGF0YSwgOCk7CiAKLQlhdG9taWNfc2V0KCZzY3NpX2lkLT5zYnAyX2xvZ2luX2NvbXBsZXRlLCAwKTsKLQogCWVycm9yID0gaHBzYl9ub2RlX3dyaXRlKHNjc2lfaWQtPm5lLAogCQkJCXNjc2lfaWQtPnNicDJfbWFuYWdlbWVudF9hZ2VudF9hZGRyLCBkYXRhLCA4KTsKIAlpZiAoZXJyb3IpCkBAIC0xNDY3LDggKzE0ODMsOCBAQAogCS8qCiAJICogV2FpdCBmb3IgcmVjb25uZWN0IHN0YXR1cyAodXAgdG8gMSBzZWNvbmQpLi4uCiAJICovCi0JaWYgKHNicDJ1dGlsX2Rvd25fdGltZW91dCgmc2NzaV9pZC0+c2JwMl9sb2dpbl9jb21wbGV0ZSwgSFopKSB7Ci0JCVNCUDJfRVJSKCJFcnJvciByZWNvbm5lY3RpbmcgdG8gU0JQLTIgZGV2aWNlIC0gcmVjb25uZWN0IHRpbWVkLW91dCIpOworCWlmIChzYnAydXRpbF9hY2Nlc3NfdGltZW91dChzY3NpX2lkLCBIWikpIHsKKwkJU0JQMl9FUlIoIkVycm9yIHJlY29ubmVjdGluZyB0byBTQlAtMiBkZXZpY2UgLSB0aW1lZCBvdXQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCkBAIC0xNDc2LDI1ICsxNDkyLDE3IEBACiAJICogU2FuaXR5LiBNYWtlIHN1cmUgc3RhdHVzIHJldHVybmVkIG1hdGNoZXMgcmVjb25uZWN0IG9yYi4KIAkgKi8KIAlpZiAoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8gIT0gc2NzaV9pZC0+cmVjb25uZWN0X29yYl9kbWEpIHsKLQkJU0JQMl9FUlIoIkVycm9yIHJlY29ubmVjdGluZyB0byBTQlAtMiBkZXZpY2UgLSByZWNvbm5lY3QgdGltZWQtb3V0Iik7CisJCVNCUDJfRVJSKCJFcnJvciByZWNvbm5lY3RpbmcgdG8gU0JQLTIgZGV2aWNlIC0gdGltZWQgb3V0Iik7CiAJCXJldHVybiAtRUlPOwogCX0KIAotCS8qCi0JICogQ2hlY2sgc3RhdHVzCi0JICovCi0JaWYgKFNUQVRVU19HRVRfUkVTUChzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSB8fAotCSAgICBTVEFUVVNfR0VUX0RFQURfQklUKHNjc2lfaWQtPnN0YXR1c19ibG9jay5PUkJfb2Zmc2V0X2hpX21pc2MpIHx8Ci0JICAgIFNUQVRVU19HRVRfU0JQX1NUQVRVUyhzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSkgewotCi0JCVNCUDJfRVJSKCJFcnJvciByZWNvbm5lY3RpbmcgdG8gU0JQLTIgZGV2aWNlIC0gcmVjb25uZWN0IGZhaWxlZCIpOworCWlmIChTVEFUVVNfVEVTVF9SRFMoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykpIHsKKwkJU0JQMl9FUlIoIkVycm9yIHJlY29ubmVjdGluZyB0byBTQlAtMiBkZXZpY2UgLSBmYWlsZWQiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCiAJSFBTQl9ERUJVRygiUmVjb25uZWN0ZWQgdG8gU0JQLTIgZGV2aWNlIik7Ci0KIAlyZXR1cm4gMDsKLQogfQogCiAvKgpAQCAtMTU5MiwxMSArMTYwMCw2IEBACiAJfQogCiAJd29ya2Fyb3VuZHMgPSBzYnAyX2RlZmF1bHRfd29ya2Fyb3VuZHM7Ci0JaWYgKGZvcmNlX2lucXVpcnlfaGFjaykgewotCQlTQlAyX1dBUk4oImZvcmNlX2lucXVpcnlfaGFjayBpcyBkZXByZWNhdGVkLiAiCi0JCQkgICJVc2UgcGFyYW1ldGVyICd3b3JrYXJvdW5kcycgaW5zdGVhZC4iKTsKLQkJd29ya2Fyb3VuZHMgfD0gU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzY7Ci0JfQogCiAJaWYgKCEod29ya2Fyb3VuZHMgJiBTQlAyX1dPUktBUk9VTkRfT1ZFUlJJREUpKQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzYnAyX3dvcmthcm91bmRzX3RhYmxlKTsgaSsrKSB7CkBAIC0xNzA1LDkgKzE3MDgsMTQgQEAKIAlxdWFkbGV0X3QgZGF0YTsKIAl1NjQgYWRkcjsKIAlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlTQlAyX0RFQlVHX0VOVEVSKCk7CiAKKwljYW5jZWxfZGVsYXllZF93b3JrKCZzY3NpX2lkLT5wcm90b2NvbF93b3JrKTsKKwlpZiAod2FpdCkKKwkJZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwogCWRhdGEgPSBudG9obChTQlAyX0FHRU5UX1JFU0VUX0RBVEEpOwogCWFkZHIgPSBzY3NpX2lkLT5zYnAyX2NvbW1hbmRfYmxvY2tfYWdlbnRfYWRkciArIFNCUDJfQUdFTlRfUkVTRVRfT0ZGU0VUOwogCkBAIC0xNzI0LDcgKzE3MzIsOSBAQAogCS8qCiAJICogTmVlZCB0byBtYWtlIHN1cmUgb3JiIHBvaW50ZXIgaXMgd3JpdHRlbiBvbiBuZXh0IGNvbW1hbmQKIAkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CiAJc2NzaV9pZC0+bGFzdF9vcmIgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xOTYxLDEzICsxOTcxLDE3IEBACiAvKgogICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gb3JkZXIgdG8gYmVnaW4gYSByZWd1bGFyIFNCUC0yIGNvbW1hbmQuCiAgKi8KLXN0YXRpYyBpbnQgc2JwMl9saW5rX29yYl9jb21tYW5kKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQsCitzdGF0aWMgdm9pZCBzYnAyX2xpbmtfb3JiX2NvbW1hbmQoc3RydWN0IHNjc2lfaWRfaW5zdGFuY2VfZGF0YSAqc2NzaV9pZCwKIAkJCQkgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvICpjb21tYW5kKQogewogCXN0cnVjdCBzYnAyc2NzaV9ob3N0X2luZm8gKmhpID0gc2NzaV9pZC0+aGk7CiAJc3RydWN0IHNicDJfY29tbWFuZF9vcmIgKmNvbW1hbmRfb3JiID0gJmNvbW1hbmQtPmNvbW1hbmRfb3JiOwotCXN0cnVjdCBub2RlX2VudHJ5ICpuZSA9IHNjc2lfaWQtPm5lOwotCXU2NCBhZGRyOworCXN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiICpsYXN0X29yYjsKKwlkbWFfYWRkcl90IGxhc3Rfb3JiX2RtYTsKKwl1NjQgYWRkciA9IHNjc2lfaWQtPnNicDJfY29tbWFuZF9ibG9ja19hZ2VudF9hZGRyOworCXF1YWRsZXRfdCBkYXRhWzJdOworCXNpemVfdCBsZW5ndGg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW91dHN0YW5kaW5nX29yYl9pbmNyOwogCVNCUDJfT1JCX0RFQlVHKCJzZW5kaW5nIGNvbW1hbmQgb3JiICVwLCB0b3RhbCBvcmJzID0gJXgiLApAQCAtMTk3NSw3MyArMTk4OSw3MCBAQAogCiAJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKGhpLT5ob3N0LT5wZGV2LCBjb21tYW5kLT5jb21tYW5kX29yYl9kbWEsCiAJCQkJICAgICAgIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CisJCQkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoaS0+aG9zdC0+cGRldiwgY29tbWFuZC0+c2dlX2RtYSwKIAkJCQkgICAgICAgc2l6ZW9mKGNvbW1hbmQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLAogCQkJCSAgICAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwogCS8qCiAJICogQ2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgcHJldmlvdXMgb3JicyB0byB1c2UKIAkgKi8KLQlpZiAoc2NzaV9pZC0+bGFzdF9vcmIgPT0gTlVMTCkgewotCQlxdWFkbGV0X3QgZGF0YVsyXTsKLQorCXNwaW5fbG9ja19pcnFzYXZlKCZzY3NpX2lkLT5zYnAyX2NvbW1hbmRfb3JiX2xvY2ssIGZsYWdzKTsKKwlsYXN0X29yYiA9IHNjc2lfaWQtPmxhc3Rfb3JiOworCWxhc3Rfb3JiX2RtYSA9IHNjc2lfaWQtPmxhc3Rfb3JiX2RtYTsKKwlpZiAoIWxhc3Rfb3JiKSB7CiAJCS8qCi0JCSAqIE9rLCBsZXQncyB3cml0ZSB0byB0aGUgdGFyZ2V0J3MgbWFuYWdlbWVudCBhZ2VudCByZWdpc3RlcgorCQkgKiBsYXN0X29yYiA9PSBOVUxMIG1lYW5zOiBXZSBrbm93IHRoYXQgdGhlIHRhcmdldCdzIGZldGNoIGFnZW50CisJCSAqIGlzIG5vdCBhY3RpdmUgcmlnaHQgbm93LgogCQkgKi8KLQkJYWRkciA9IHNjc2lfaWQtPnNicDJfY29tbWFuZF9ibG9ja19hZ2VudF9hZGRyICsgU0JQMl9PUkJfUE9JTlRFUl9PRkZTRVQ7CisJCWFkZHIgKz0gU0JQMl9PUkJfUE9JTlRFUl9PRkZTRVQ7CiAJCWRhdGFbMF0gPSBPUkJfU0VUX05PREVfSUQoaGktPmhvc3QtPm5vZGVfaWQpOwogCQlkYXRhWzFdID0gY29tbWFuZC0+Y29tbWFuZF9vcmJfZG1hOwogCQlzYnAydXRpbF9jcHVfdG9fYmUzMl9idWZmZXIoZGF0YSwgOCk7Ci0KLQkJU0JQMl9PUkJfREVCVUcoIndyaXRlIGNvbW1hbmQgYWdlbnQsIGNvbW1hbmQgb3JiICVwIiwgY29tbWFuZF9vcmIpOwotCi0JCWlmIChzYnAydXRpbF9ub2RlX3dyaXRlX25vX3dhaXQobmUsIGFkZHIsIGRhdGEsIDgpIDwgMCkgewotCQkJU0JQMl9FUlIoInNicDJ1dGlsX25vZGVfd3JpdGVfbm9fd2FpdCBmYWlsZWQuXG4iKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJU0JQMl9PUkJfREVCVUcoIndyaXRlIGNvbW1hbmQgYWdlbnQgY29tcGxldGUiKTsKLQotCQlzY3NpX2lkLT5sYXN0X29yYiA9IGNvbW1hbmRfb3JiOwotCQlzY3NpX2lkLT5sYXN0X29yYl9kbWEgPSBjb21tYW5kLT5jb21tYW5kX29yYl9kbWE7Ci0KKwkJbGVuZ3RoID0gODsKIAl9IGVsc2UgewotCQlxdWFkbGV0X3QgZGF0YTsKLQogCQkvKgotCQkgKiBXZSBoYXZlIGFuIG9yYiBhbHJlYWR5IHNlbnQgKG1heWJlIG9yIG1heWJlIG5vdAotCQkgKiBwcm9jZXNzZWQpIHRoYXQgd2UgY2FuIGFwcGVuZCB0aGlzIG9yYiB0by4gU28gZG8gc28sCi0JCSAqIGFuZCByaW5nIHRoZSBkb29yYmVsbC4gSGF2ZSB0byBiZSB2ZXJ5IGNhcmVmdWwKLQkJICogbW9kaWZ5aW5nIHRoZXNlIG5leHQgb3JiIHBvaW50ZXJzLCBhcyB0aGV5IGFyZSBhY2Nlc3NlZAotCQkgKiBib3RoIGJ5IHRoZSBzYnAyIGRldmljZSBhbmQgdXMuCisJCSAqIGxhc3Rfb3JiICE9IE5VTEwgbWVhbnM6IFdlIGtub3cgdGhhdCB0aGUgdGFyZ2V0J3MgZmV0Y2ggYWdlbnQKKwkJICogaXMgKHZlcnkgcHJvYmFibHkpIG5vdCBkZWFkIG9yIGluIHJlc2V0IHN0YXRlIHJpZ2h0IG5vdy4KKwkJICogV2UgaGF2ZSBhbiBPUkIgYWxyZWFkeSBzZW50IHRoYXQgd2UgY2FuIGFwcGVuZCBhIG5ldyBvbmUgdG8uCisJCSAqIFRoZSB0YXJnZXQncyBmZXRjaCBhZ2VudCBtYXkgb3IgbWF5IG5vdCBoYXZlIHJlYWQgdGhpcworCQkgKiBwcmV2aW91cyBPUkIgeWV0LgogCQkgKi8KLQkJc2NzaV9pZC0+bGFzdF9vcmItPm5leHRfT1JCX2xvID0KLQkJICAgIGNwdV90b19iZTMyKGNvbW1hbmQtPmNvbW1hbmRfb3JiX2RtYSk7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+cGRldiwgbGFzdF9vcmJfZG1hLAorCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKKwkJCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOworCQlsYXN0X29yYi0+bmV4dF9PUkJfbG8gPSBjcHVfdG9fYmUzMihjb21tYW5kLT5jb21tYW5kX29yYl9kbWEpOworCQl3bWIoKTsKIAkJLyogVGVsbHMgaGFyZHdhcmUgdGhhdCB0aGlzIHBvaW50ZXIgaXMgdmFsaWQgKi8KLQkJc2NzaV9pZC0+bGFzdF9vcmItPm5leHRfT1JCX2hpID0gMHgwOwotCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaGktPmhvc3QtPnBkZXYsCi0JCQkJCSAgICAgICBzY3NpX2lkLT5sYXN0X29yYl9kbWEsCisJCWxhc3Rfb3JiLT5uZXh0X09SQl9oaSA9IDA7CisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShoaS0+aG9zdC0+cGRldiwgbGFzdF9vcmJfZG1hLAogCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJICAgICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7Ci0KLQkJLyoKLQkJICogUmluZyB0aGUgZG9vcmJlbGwKLQkJICovCi0JCWRhdGEgPSBjcHVfdG9fYmUzMihjb21tYW5kLT5jb21tYW5kX29yYl9kbWEpOwotCQlhZGRyID0gc2NzaV9pZC0+c2JwMl9jb21tYW5kX2Jsb2NrX2FnZW50X2FkZHIgKyBTQlAyX0RPT1JCRUxMX09GRlNFVDsKLQotCQlTQlAyX09SQl9ERUJVRygicmluZyBkb29yYmVsbCwgY29tbWFuZCBvcmIgJXAiLCBjb21tYW5kX29yYik7Ci0KLQkJaWYgKHNicDJ1dGlsX25vZGVfd3JpdGVfbm9fd2FpdChuZSwgYWRkciwgJmRhdGEsIDQpIDwgMCkgewotCQkJU0JQMl9FUlIoInNicDJ1dGlsX25vZGVfd3JpdGVfbm9fd2FpdCBmYWlsZWQiKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJc2NzaV9pZC0+bGFzdF9vcmIgPSBjb21tYW5kX29yYjsKLQkJc2NzaV9pZC0+bGFzdF9vcmJfZG1hID0gY29tbWFuZC0+Y29tbWFuZF9vcmJfZG1hOwotCisJCQkJCSAgICAgICBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJYWRkciArPSBTQlAyX0RPT1JCRUxMX09GRlNFVDsKKwkJZGF0YVswXSA9IDA7CisJCWxlbmd0aCA9IDQ7CiAJfQotCXJldHVybiAwOworCXNjc2lfaWQtPmxhc3Rfb3JiID0gY29tbWFuZF9vcmI7CisJc2NzaV9pZC0+bGFzdF9vcmJfZG1hID0gY29tbWFuZC0+Y29tbWFuZF9vcmJfZG1hOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOworCisJU0JQMl9PUkJfREVCVUcoIndyaXRlIHRvICVzIHJlZ2lzdGVyLCBjb21tYW5kIG9yYiAlcCIsCisJCQlsYXN0X29yYiA/ICJET09SQkVMTCIgOiAiT1JCX1BPSU5URVIiLCBjb21tYW5kX29yYik7CisJaWYgKHNicDJ1dGlsX25vZGVfd3JpdGVfbm9fd2FpdChzY3NpX2lkLT5uZSwgYWRkciwgZGF0YSwgbGVuZ3RoKSkgeworCQkvKgorCQkgKiBzYnAydXRpbF9ub2RlX3dyaXRlX25vX3dhaXQgZmFpbGVkLiBXZSBjZXJ0YWlubHkgcmFuIG91dAorCQkgKiBvZiB0cmFuc2FjdGlvbiBsYWJlbHMsIHBlcmhhcHMganVzdCBiZWNhdXNlIHRoZXJlIHdlcmUgbm8KKwkJICogY29udGV4dCBzd2l0Y2hlcyB3aGljaCBnYXZlIGtocHNicGt0IGEgY2hhbmNlIHRvIGNvbGxlY3QKKwkJICogZnJlZSB0bGFiZWxzLiBUcnkgYWdhaW4gaW4gbm9uLWF0b21pYyBjb250ZXh0LiBJZiBuZWNlc3NhcnksCisJCSAqIHRoZSB3b3JrcXVldWUgam9iIHdpbGwgc2xlZXAgdG8gZ3VhcmFudGVlZGx5IGdldCBhIHRsYWJlbC4KKwkJICogV2UgZG8gbm90IGFjY2VwdCBuZXcgY29tbWFuZHMgdW50aWwgdGhlIGpvYiBpcyBvdmVyLgorCQkgKi8KKwkJc2NzaV9ibG9ja19yZXF1ZXN0cyhzY3NpX2lkLT5zY3NpX2hvc3QpOworCQlQUkVQQVJFX1dPUksoJnNjc2lfaWQtPnByb3RvY29sX3dvcmssCisJCQkgICAgIGxhc3Rfb3JiID8gc2JwMnV0aWxfd3JpdGVfZG9vcmJlbGw6CisJCQkJCXNicDJ1dGlsX3dyaXRlX29yYl9wb2ludGVyLAorCQkJICAgICBzY3NpX2lkKTsKKwkJc2NoZWR1bGVfd29yaygmc2NzaV9pZC0+cHJvdG9jb2xfd29yayk7CisJfQogfQogCiAvKgpAQCAtMjA3OCwxMSArMjA4OSw2IEBACiAJCQkgICAgICJzYnAyIGNvbW1hbmQgb3JiIiwgY29tbWFuZC0+Y29tbWFuZF9vcmJfZG1hKTsKIAogCS8qCi0JICogSW5pdGlhbGl6ZSBzdGF0dXMgZmlmbwotCSAqLwotCW1lbXNldCgmc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLCAwLCBzaXplb2Yoc3RydWN0IHNicDJfc3RhdHVzX2Jsb2NrKSk7Ci0KLQkvKgogCSAqIExpbmsgdXAgdGhlIG9yYiwgYW5kIHJpbmcgdGhlIGRvb3JiZWxsIGlmIG5lZWRlZAogCSAqLwogCXNicDJfbGlua19vcmJfY29tbWFuZChzY3NpX2lkLCBjb21tYW5kKTsKQEAgLTIxMjMsMTIgKzIxMjksMTQgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIGRlYWxzIHdpdGggc3RhdHVzIHdyaXRlcyBmcm9tIHRoZSBTQlAtMiBkZXZpY2UKICAqLwotc3RhdGljIGludCBzYnAyX2hhbmRsZV9zdGF0dXNfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgaW50IGRlc3RpZCwKLQkJCQkgICAgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCwgdTE2IGZsKQorc3RhdGljIGludCBzYnAyX2hhbmRsZV9zdGF0dXNfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwKKwkJCQkgICAgaW50IGRlc3RpZCwgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwKKwkJCQkgICAgc2l6ZV90IGxlbmd0aCwgdTE2IGZsKQogewogCXN0cnVjdCBzYnAyc2NzaV9ob3N0X2luZm8gKmhpOwogCXN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQgPSBOVUxMLCAqc2NzaV9pZF90bXA7CiAJc3RydWN0IHNjc2lfY21uZCAqU0NwbnQgPSBOVUxMOworCXN0cnVjdCBzYnAyX3N0YXR1c19ibG9jayAqc2I7CiAJdTMyIHNjc2lfc3RhdHVzID0gU0JQMl9TQ1NJX1NUQVRVU19HT09EOwogCXN0cnVjdCBzYnAyX2NvbW1hbmRfaW5mbyAqY29tbWFuZDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwpAQCAtMjEzNywxOCArMjE0NSwxOSBAQAogCiAJc2JwMnV0aWxfcGFja2V0X2R1bXAoZGF0YSwgbGVuZ3RoLCAic2JwMiBzdGF0dXMgd3JpdGUgYnkgZGV2aWNlIiwgKHUzMilhZGRyKTsKIAotCWlmICghaG9zdCkgeworCWlmICh1bmxpa2VseShsZW5ndGggPCA4IHx8IGxlbmd0aCA+IHNpemVvZihzdHJ1Y3Qgc2JwMl9zdGF0dXNfYmxvY2spKSkgeworCQlTQlAyX0VSUigiV3Jvbmcgc2l6ZSBvZiBzdGF0dXMgYmxvY2siKTsKKwkJcmV0dXJuIFJDT0RFX0FERFJFU1NfRVJST1I7CisJfQorCWlmICh1bmxpa2VseSghaG9zdCkpIHsKIAkJU0JQMl9FUlIoImhvc3QgaXMgTlVMTCAtIHRoaXMgaXMgYmFkISIpOwogCQlyZXR1cm4gUkNPREVfQUREUkVTU19FUlJPUjsKIAl9Ci0KIAloaSA9IGhwc2JfZ2V0X2hvc3RpbmZvKCZzYnAyX2hpZ2hsZXZlbCwgaG9zdCk7Ci0KLQlpZiAoIWhpKSB7CisJaWYgKHVubGlrZWx5KCFoaSkpIHsKIAkJU0JQMl9FUlIoImhvc3QgaW5mbyBpcyBOVUxMIC0gdGhpcyBpcyBiYWQhIik7CiAJCXJldHVybiBSQ09ERV9BRERSRVNTX0VSUk9SOwogCX0KLQogCS8qCiAJICogRmluZCBvdXIgc2NzaV9pZCBzdHJ1Y3R1cmUgYnkgbG9va2luZyBhdCB0aGUgc3RhdHVzIGZpZm8gYWRkcmVzcwogCSAqIHdyaXR0ZW4gdG8gYnkgdGhlIHNicDIgZGV2aWNlLgpAQCAtMjE2MCwzMiArMjE2OSwzNSBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0KLQlpZiAoIXNjc2lfaWQpIHsKKwlpZiAodW5saWtlbHkoIXNjc2lfaWQpKSB7CiAJCVNCUDJfRVJSKCJzY3NpX2lkIGlzIE5VTEwgLSBkZXZpY2UgaXMgZ29uZT8iKTsKIAkJcmV0dXJuIFJDT0RFX0FERFJFU1NfRVJST1I7CiAJfQogCiAJLyoKLQkgKiBQdXQgcmVzcG9uc2UgaW50byBzY3NpX2lkIHN0YXR1cyBmaWZvLi4uCisJICogUHV0IHJlc3BvbnNlIGludG8gc2NzaV9pZCBzdGF0dXMgZmlmbyBidWZmZXIuIFRoZSBmaXJzdCB0d28gYnl0ZXMKKwkgKiBjb21lIGluIGJpZyBlbmRpYW4gYml0IG9yZGVyLiBPZnRlbiB0aGUgdGFyZ2V0IHdyaXRlcyBvbmx5IGEKKwkgKiB0cnVuY2F0ZWQgc3RhdHVzIGJsb2NrLCBtaW5pbWFsbHkgdGhlIGZpcnN0IHR3byBxdWFkbGV0cy4gVGhlIHJlc3QKKwkgKiBpcyBpbXBsaWVkIHRvIGJlIHplcm9zLgogCSAqLwotCW1lbWNweSgmc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLCBkYXRhLCBsZW5ndGgpOworCXNiID0gJnNjc2lfaWQtPnN0YXR1c19ibG9jazsKKwltZW1zZXQoc2ItPmNvbW1hbmRfc2V0X2RlcGVuZGVudCwgMCwgc2l6ZW9mKHNiLT5jb21tYW5kX3NldF9kZXBlbmRlbnQpKTsKKwltZW1jcHkoc2IsIGRhdGEsIGxlbmd0aCk7CisJc2JwMnV0aWxfYmUzMl90b19jcHVfYnVmZmVyKHNiLCA4KTsKIAogCS8qCi0JICogQnl0ZSBzd2FwIGZpcnN0IHR3byBxdWFkbGV0cyAoOCBieXRlcykgb2Ygc3RhdHVzIGZvciBwcm9jZXNzaW5nCisJICogSWdub3JlIHVuc29saWNpdGVkIHN0YXR1cy4gSGFuZGxlIGNvbW1hbmQgT1JCIHN0YXR1cy4KIAkgKi8KLQlzYnAydXRpbF9iZTMyX3RvX2NwdV9idWZmZXIoJnNjc2lfaWQtPnN0YXR1c19ibG9jaywgOCk7Ci0KLQkvKgotCSAqIEhhbmRsZSBjb21tYW5kIE9SQiBzdGF0dXMgaGVyZSBpZiBuZWNlc3NhcnkuIEZpcnN0LCBuZWVkIHRvIG1hdGNoIHN0YXR1cyB3aXRoIGNvbW1hbmQuCi0JICovCi0JY29tbWFuZCA9IHNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3Jfb3JiKHNjc2lfaWQsIHNjc2lfaWQtPnN0YXR1c19ibG9jay5PUkJfb2Zmc2V0X2xvKTsKKwlpZiAodW5saWtlbHkoU1RBVFVTX0dFVF9TUkMoc2ItPk9SQl9vZmZzZXRfaGlfbWlzYykgPT0gMikpCisJCWNvbW1hbmQgPSBOVUxMOworCWVsc2UKKwkJY29tbWFuZCA9IHNicDJ1dGlsX2ZpbmRfY29tbWFuZF9mb3Jfb3JiKHNjc2lfaWQsCisJCQkJCQkJc2ItPk9SQl9vZmZzZXRfbG8pOwogCWlmIChjb21tYW5kKSB7Ci0KIAkJU0JQMl9ERUJVRygiRm91bmQgc3RhdHVzIGZvciBjb21tYW5kIE9SQiIpOwogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPnBkZXYsIGNvbW1hbmQtPmNvbW1hbmRfb3JiX2RtYSwKIAkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc2JwMl9jb21tYW5kX29yYiksCi0JCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCQkgICAgUENJX0RNQV9UT0RFVklDRSk7CiAJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+cGRldiwgY29tbWFuZC0+c2dlX2RtYSwKIAkJCQkJICAgIHNpemVvZihjb21tYW5kLT5zY2F0dGVyX2dhdGhlcl9lbGVtZW50KSwKIAkJCQkJICAgIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7CkBAIC0yMTk0LDcgKzIyMDYsMTIgQEAKIAkJb3V0c3RhbmRpbmdfb3JiX2RlY3I7CiAKIAkJLyoKLQkJICogTWF0Y2hlZCBzdGF0dXMgd2l0aCBjb21tYW5kLCBub3cgZ3JhYiBzY3NpIGNvbW1hbmQgcG9pbnRlcnMgYW5kIGNoZWNrIHN0YXR1cworCQkgKiBNYXRjaGVkIHN0YXR1cyB3aXRoIGNvbW1hbmQsIG5vdyBncmFiIHNjc2kgY29tbWFuZCBwb2ludGVycworCQkgKiBhbmQgY2hlY2sgc3RhdHVzLgorCQkgKi8KKwkJLyoKKwkJICogRklYTUU6IElmIHRoZSBzcmMgZmllbGQgaW4gdGhlIHN0YXR1cyBpcyAxLCB0aGUgT1JCIERNQSBtdXN0CisJCSAqIG5vdCBiZSByZXVzZWQgdW50aWwgc3RhdHVzIGZvciBhIHN1YnNlcXVlbnQgT1JCIGlzIHJlY2VpdmVkLgogCQkgKi8KIAkJU0NwbnQgPSBjb21tYW5kLT5DdXJyZW50X1NDcG50OwogCQlzcGluX2xvY2tfaXJxc2F2ZSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9sb2NrLCBmbGFncyk7CkBAIC0yMjAyLDYxICsyMjE5LDY0IEBACiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCiAJCWlmIChTQ3BudCkgeworCQkJdTMyIGggPSBzYi0+T1JCX29mZnNldF9oaV9taXNjOworCQkJdTMyIHIgPSBTVEFUVVNfR0VUX1JFU1AoaCk7CiAKLQkJCS8qCi0JCQkgKiBTZWUgaWYgdGhlIHRhcmdldCBzdG9yZWQgYW55IHNjc2kgc3RhdHVzIGluZm9ybWF0aW9uCi0JCQkgKi8KLQkJCWlmIChTVEFUVVNfR0VUX0xFTkdUSChzY3NpX2lkLT5zdGF0dXNfYmxvY2suT1JCX29mZnNldF9oaV9taXNjKSA+IDEpIHsKLQkJCQkvKgotCQkJCSAqIFRyYW5zbGF0ZSBTQlAtMiBzdGF0dXMgdG8gU0NTSSBzZW5zZSBkYXRhCi0JCQkJICovCi0JCQkJU0JQMl9ERUJVRygiQ0hFQ0sgQ09ORElUSU9OIik7Ci0JCQkJc2NzaV9zdGF0dXMgPSBzYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKCh1bmNoYXIgKikmc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLCBTQ3BudC0+c2Vuc2VfYnVmZmVyKTsKKwkJCWlmIChyICE9IFJFU1BfU1RBVFVTX1JFUVVFU1RfQ09NUExFVEUpIHsKKwkJCQlTQlAyX1dBUk4oInJlc3AgMHgleCwgc2JwX3N0YXR1cyAweCV4IiwKKwkJCQkJICByLCBTVEFUVVNfR0VUX1NCUF9TVEFUVVMoaCkpOworCQkJCXNjc2lfc3RhdHVzID0KKwkJCQkJciA9PSBSRVNQX1NUQVRVU19UUkFOU1BPUlRfRkFJTFVSRSA/CisJCQkJCVNCUDJfU0NTSV9TVEFUVVNfQlVTWSA6CisJCQkJCVNCUDJfU0NTSV9TVEFUVVNfQ09NTUFORF9URVJNSU5BVEVEOwogCQkJfQotCiAJCQkvKgotCQkJICogQ2hlY2sgdG8gc2VlIGlmIHRoZSBkZWFkIGJpdCBpcyBzZXQuIElmIHNvLCB3ZSdsbCBoYXZlIHRvIGluaXRpYXRlCi0JCQkgKiBhIGZldGNoIGFnZW50IHJlc2V0LgorCQkJICogU2VlIGlmIHRoZSB0YXJnZXQgc3RvcmVkIGFueSBzY3NpIHN0YXR1cyBpbmZvcm1hdGlvbi4KIAkJCSAqLwotCQkJaWYgKFNUQVRVU19HRVRfREVBRF9CSVQoc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfaGlfbWlzYykpIHsKLQotCQkJCS8qCi0JCQkJICogSW5pdGlhdGUgYSBmZXRjaCBhZ2VudCByZXNldC4KLQkJCQkgKi8KLQkJCQlTQlAyX0RFQlVHKCJEZWFkIGJpdCBzZXQgLSBpbml0aWF0aW5nIGZldGNoIGFnZW50IHJlc2V0Iik7CisJCQlpZiAoU1RBVFVTX0dFVF9MRU4oaCkgPiAxKSB7CisJCQkJU0JQMl9ERUJVRygiQ0hFQ0sgQ09ORElUSU9OIik7CisJCQkJc2NzaV9zdGF0dXMgPSBzYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKAorCQkJCQkodW5jaGFyICopc2IsIFNDcG50LT5zZW5zZV9idWZmZXIpOworCQkJfQorCQkJLyoKKwkJCSAqIENoZWNrIHRvIHNlZSBpZiB0aGUgZGVhZCBiaXQgaXMgc2V0LiBJZiBzbywgd2UnbGwKKwkJCSAqIGhhdmUgdG8gaW5pdGlhdGUgYSBmZXRjaCBhZ2VudCByZXNldC4KKwkJCSAqLworCQkJaWYgKFNUQVRVU19URVNUX0RFQUQoaCkpIHsKKwkJCQlTQlAyX0RFQlVHKCJEZWFkIGJpdCBzZXQgLSAiCisJCQkJCSAgICJpbml0aWF0aW5nIGZldGNoIGFnZW50IHJlc2V0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNicDJfYWdlbnRfcmVzZXQoc2NzaV9pZCwgMCk7CiAJCQl9Ci0KIAkJCVNCUDJfT1JCX0RFQlVHKCJjb21wbGV0aW5nIGNvbW1hbmQgb3JiICVwIiwgJmNvbW1hbmQtPmNvbW1hbmRfb3JiKTsKIAkJfQogCiAJCS8qCi0JCSAqIENoZWNrIGhlcmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBubyBjb21tYW5kcyBpbi11c2UuIElmIHRoZXJlIGFyZSBub25lLCB3ZSBjYW4KLQkJICogbnVsbCBvdXQgbGFzdCBvcmIgc28gdGhhdCBuZXh0IHRpbWUgYXJvdW5kIHdlIHdyaXRlIGRpcmVjdGx5IHRvIHRoZSBvcmIgcG9pbnRlci4uLgotCQkgKiBRdWljayBzdGFydCBzYXZlcyBvbmUgMTM5NCBidXMgdHJhbnNhY3Rpb24uCisJCSAqIENoZWNrIGhlcmUgdG8gc2VlIGlmIHRoZXJlIGFyZSBubyBjb21tYW5kcyBpbi11c2UuIElmIHRoZXJlCisJCSAqIGFyZSBub25lLCB3ZSBrbm93IHRoYXQgdGhlIGZldGNoIGFnZW50IGxlZnQgdGhlIGFjdGl2ZSBzdGF0ZQorCQkgKiBfYW5kXyB0aGF0IHdlIGRpZCBub3QgcmVhY3RpdmF0ZSBpdCB5ZXQuIFRoZXJlZm9yZSBjbGVhcgorCQkgKiBsYXN0X29yYiBzbyB0aGF0IG5leHQgdGltZSB3ZSB3cml0ZSBkaXJlY3RseSB0byB0aGUKKwkJICogT1JCX1BPSU5URVIgcmVnaXN0ZXIuIFRoYXQgd2F5IHRoZSBmZXRjaCBhZ2VudCBkb2VzIG5vdCBuZWVkCisJCSAqIHRvIHJlZmV0Y2ggdGhlIG5leHRfT1JCLgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwotCQlpZiAobGlzdF9lbXB0eSgmc2NzaV9pZC0+c2JwMl9jb21tYW5kX29yYl9pbnVzZSkpIHsKKwkJaWYgKGxpc3RfZW1wdHkoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfaW51c2UpKQogCQkJc2NzaV9pZC0+bGFzdF9vcmIgPSBOVUxMOwotCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjc2lfaWQtPnNicDJfY29tbWFuZF9vcmJfbG9jaywgZmxhZ3MpOwogCiAJfSBlbHNlIHsKLQogCQkvKgogCQkgKiBJdCdzIHByb2JhYmx5IGEgbG9naW4vbG9nb3V0L3JlY29ubmVjdCBzdGF0dXMuCiAJCSAqLwotCQlpZiAoKHNjc2lfaWQtPmxvZ2luX29yYl9kbWEgPT0gc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8pIHx8Ci0JCSAgICAoc2NzaV9pZC0+cXVlcnlfbG9naW5zX29yYl9kbWEgPT0gc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8pIHx8Ci0JCSAgICAoc2NzaV9pZC0+cmVjb25uZWN0X29yYl9kbWEgPT0gc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8pIHx8Ci0JCSAgICAoc2NzaV9pZC0+bG9nb3V0X29yYl9kbWEgPT0gc2NzaV9pZC0+c3RhdHVzX2Jsb2NrLk9SQl9vZmZzZXRfbG8pKSB7Ci0JCQlhdG9taWNfc2V0KCZzY3NpX2lkLT5zYnAyX2xvZ2luX2NvbXBsZXRlLCAxKTsKKwkJaWYgKChzYi0+T1JCX29mZnNldF9sbyA9PSBzY3NpX2lkLT5yZWNvbm5lY3Rfb3JiX2RtYSkgfHwKKwkJICAgIChzYi0+T1JCX29mZnNldF9sbyA9PSBzY3NpX2lkLT5sb2dpbl9vcmJfZG1hKSB8fAorCQkgICAgKHNiLT5PUkJfb2Zmc2V0X2xvID09IHNjc2lfaWQtPnF1ZXJ5X2xvZ2luc19vcmJfZG1hKSB8fAorCQkgICAgKHNiLT5PUkJfb2Zmc2V0X2xvID09IHNjc2lfaWQtPmxvZ291dF9vcmJfZG1hKSkgeworCQkJc2NzaV9pZC0+YWNjZXNzX2NvbXBsZXRlID0gMTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmYWNjZXNzX3dxKTsKIAkJfQogCX0KIAogCWlmIChTQ3BudCkgewotCi0JCS8qIENvbXBsZXRlIHRoZSBTQ1NJIGNvbW1hbmQuICovCiAJCVNCUDJfREVCVUcoIkNvbXBsZXRpbmcgU0NTSSBjb21tYW5kIik7CiAJCXNicDJzY3NpX2NvbXBsZXRlX2NvbW1hbmQoc2NzaV9pZCwgc2NzaV9zdGF0dXMsIFNDcG50LAogCQkJCQkgIGNvbW1hbmQtPkN1cnJlbnRfZG9uZSk7CkBAIC0yMzcyLDcgKzIzOTIsNyBAQAogCQljb21tYW5kID0gbGlzdF9lbnRyeShsaCwgc3RydWN0IHNicDJfY29tbWFuZF9pbmZvLCBsaXN0KTsKIAkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5wZGV2LCBjb21tYW5kLT5jb21tYW5kX29yYl9kbWEsCiAJCQkJCSAgICBzaXplb2Yoc3RydWN0IHNicDJfY29tbWFuZF9vcmIpLAotCQkJCQkgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaGktPmhvc3QtPnBkZXYsIGNvbW1hbmQtPnNnZV9kbWEsCiAJCQkJCSAgICBzaXplb2YoY29tbWFuZC0+c2NhdHRlcl9nYXRoZXJfZWxlbWVudCksCiAJCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOwpAQCAtMjQ5NSw2ICsyNTE1LDcgQEAKIAkJKHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKilzZGV2LT5ob3N0LT5ob3N0ZGF0YVswXTsKIAogCXNjc2lfaWQtPnNkZXYgPSBzZGV2OworCXNkZXYtPmFsbG93X3Jlc3RhcnQgPSAxOwogCiAJaWYgKHNjc2lfaWQtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX0lOUVVJUllfMzYpCiAJCXNkZXYtPmlucXVpcnlfbGVuID0gMzY7CkBAIC0yNTA4LDE2ICsyNTI5LDEyIEBACiAKIAlibGtfcXVldWVfZG1hX2FsaWdubWVudChzZGV2LT5yZXF1ZXN0X3F1ZXVlLCAoNTEyIC0gMSkpOwogCXNkZXYtPnVzZV8xMF9mb3JfcncgPSAxOwotCXNkZXYtPnVzZV8xMF9mb3JfbXMgPSAxOwogCiAJaWYgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLICYmCiAJICAgIHNjc2lfaWQtPndvcmthcm91bmRzICYgU0JQMl9XT1JLQVJPVU5EX01PREVfU0VOU0VfOCkKIAkJc2Rldi0+c2tpcF9tc19wYWdlXzggPSAxOwogCWlmIChzY3NpX2lkLT53b3JrYXJvdW5kcyAmIFNCUDJfV09SS0FST1VORF9GSVhfQ0FQQUNJVFkpCiAJCXNkZXYtPmZpeF9jYXBhY2l0eSA9IDE7Ci0JaWYgKHNjc2lfaWQtPm5lLT5ndWlkX3ZlbmRvcl9pZCA9PSAweDAwMTBiOSAmJiAvKiBNYXh0b3IncyBPVUkgKi8KLQkgICAgKHNkZXYtPnR5cGUgPT0gVFlQRV9ESVNLIHx8IHNkZXYtPnR5cGUgPT0gVFlQRV9SQkMpKQotCQlzZGV2LT5hbGxvd19yZXN0YXJ0ID0gMTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjU1NSw3ICsyNTcyLDcgQEAKIAkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShoaS0+aG9zdC0+cGRldiwKIAkJCQkJCSAgICBjb21tYW5kLT5jb21tYW5kX29yYl9kbWEsCiAJCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiKSwKLQkJCQkJCSAgICBQQ0lfRE1BX0JJRElSRUNUSU9OQUwpOworCQkJCQkJICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KGhpLT5ob3N0LT5wZGV2LAogCQkJCQkJICAgIGNvbW1hbmQtPnNnZV9kbWEsCiAJCQkJCQkgICAgc2l6ZW9mKGNvbW1hbmQtPnNjYXR0ZXJfZ2F0aGVyX2VsZW1lbnQpLApAQCAtMjU3MSw3ICsyNTg4LDcgQEAKIAkJLyoKIAkJICogSW5pdGlhdGUgYSBmZXRjaCBhZ2VudCByZXNldC4KIAkJICovCi0JCXNicDJfYWdlbnRfcmVzZXQoc2NzaV9pZCwgMCk7CisJCXNicDJfYWdlbnRfcmVzZXQoc2NzaV9pZCwgMSk7CiAJCXNicDJzY3NpX2NvbXBsZXRlX2FsbF9jb21tYW5kcyhzY3NpX2lkLCBESURfQlVTX0JVU1kpOwogCX0KIApAQCAtMjU5MCw3ICsyNjA3LDcgQEAKIAogCWlmIChzYnAydXRpbF9ub2RlX2lzX2F2YWlsYWJsZShzY3NpX2lkKSkgewogCQlTQlAyX0VSUigiR2VuZXJhdGluZyBzYnAyIGZldGNoIGFnZW50IHJlc2V0Iik7Ci0JCXNicDJfYWdlbnRfcmVzZXQoc2NzaV9pZCwgMCk7CisJCXNicDJfYWdlbnRfcmVzZXQoc2NzaV9pZCwgMSk7CiAJfQogCiAJcmV0dXJuIFNVQ0NFU1M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3NicDIuaCBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCmluZGV4IGIyMmNlMWEuLmFiYmU0OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvc2JwMi5oCkBAIC00Niw4ICs0Niw4IEBACiAjZGVmaW5lIE9SQl9TRVRfRElSRUNUSU9OKHZhbHVlKQkJKCh2YWx1ZSAmIDB4MSkgPDwgMjcpCiAKIHN0cnVjdCBzYnAyX2NvbW1hbmRfb3JiIHsKLQl2b2xhdGlsZSB1MzIgbmV4dF9PUkJfaGk7Ci0Jdm9sYXRpbGUgdTMyIG5leHRfT1JCX2xvOworCXUzMiBuZXh0X09SQl9oaTsKKwl1MzIgbmV4dF9PUkJfbG87CiAJdTMyIGRhdGFfZGVzY3JpcHRvcl9oaTsKIAl1MzIgZGF0YV9kZXNjcmlwdG9yX2xvOwogCXUzMiBtaXNjOwpAQCAtMTgwLDEyICsxODAsMTQgQEAKIAogI2RlZmluZSBTQlAyX1NDU0lfU1RBVFVTX1NFTEVDVElPTl9USU1FT1VUCTB4ZmYKIAotI2RlZmluZSBTVEFUVVNfR0VUX09SQl9PRkZTRVRfSEkodmFsdWUpICAgICAgICAgKHZhbHVlICYgMHhmZmZmKQotI2RlZmluZSBTVEFUVVNfR0VUX1NCUF9TVEFUVVModmFsdWUpICAgICAgICAgICAgKCh2YWx1ZSA+PiAxNikgJiAweGZmKQotI2RlZmluZSBTVEFUVVNfR0VUX0xFTkdUSCh2YWx1ZSkgICAgICAgICAgICAgICAgKCh2YWx1ZSA+PiAyNCkgJiAweDcpCi0jZGVmaW5lIFNUQVRVU19HRVRfREVBRF9CSVQodmFsdWUpICAgICAgICAgICAgICAoKHZhbHVlID4+IDI3KSAmIDB4MSkKLSNkZWZpbmUgU1RBVFVTX0dFVF9SRVNQKHZhbHVlKSAgICAgICAgICAgICAgICAgICgodmFsdWUgPj4gMjgpICYgMHgzKQotI2RlZmluZSBTVEFUVVNfR0VUX1NSQyh2YWx1ZSkgICAgICAgICAgICAgICAgICAgKCh2YWx1ZSA+PiAzMCkgJiAweDMpCisjZGVmaW5lIFNUQVRVU19HRVRfU1JDKHZhbHVlKQkJCSgoKHZhbHVlKSA+PiAzMCkgJiAweDMpCisjZGVmaW5lIFNUQVRVU19HRVRfUkVTUCh2YWx1ZSkJCQkoKCh2YWx1ZSkgPj4gMjgpICYgMHgzKQorI2RlZmluZSBTVEFUVVNfR0VUX0xFTih2YWx1ZSkJCQkoKCh2YWx1ZSkgPj4gMjQpICYgMHg3KQorI2RlZmluZSBTVEFUVVNfR0VUX1NCUF9TVEFUVVModmFsdWUpCQkoKCh2YWx1ZSkgPj4gMTYpICYgMHhmZikKKyNkZWZpbmUgU1RBVFVTX0dFVF9PUkJfT0ZGU0VUX0hJKHZhbHVlKQkJKCh2YWx1ZSkgJiAweDAwMDBmZmZmKQorI2RlZmluZSBTVEFUVVNfVEVTVF9ERUFEKHZhbHVlKQkJCSgodmFsdWUpICYgMHgwODAwMDAwMCkKKy8qIHRlc3QgJ3Jlc3AnIHwgJ2RlYWQnIHwgJ3NicDJfc3RhdHVzJyAqLworI2RlZmluZSBTVEFUVVNfVEVTVF9SRFModmFsdWUpCQkJKCh2YWx1ZSkgJiAweDM4ZmYwMDAwKQogCiBzdHJ1Y3Qgc2JwMl9zdGF0dXNfYmxvY2sgewogCXUzMiBPUkJfb2Zmc2V0X2hpX21pc2M7CkBAIC0zMTgsOSArMzIwLDkgQEAKIAl1NjQgc3RhdHVzX2ZpZm9fYWRkcjsKIAogCS8qCi0JICogVmFyaWFibGUgdXNlZCBmb3IgbG9naW5zLCByZWNvbm5lY3RzLCBsb2dvdXRzLCBxdWVyeSBsb2dpbnMKKwkgKiBXYWl0cXVldWUgZmxhZyBmb3IgbG9naW5zLCByZWNvbm5lY3RzLCBsb2dvdXRzLCBxdWVyeSBsb2dpbnMKIAkgKi8KLQlhdG9taWNfdCBzYnAyX2xvZ2luX2NvbXBsZXRlOworCWludCBhY2Nlc3NfY29tcGxldGU6MTsKIAogCS8qCiAJICogUG9vbCBvZiBjb21tYW5kIG9yYnMsIHNvIHdlIGNhbiBoYXZlIG1vcmUgdGhhbiBvdmVybGFwcGVkIGNvbW1hbmQgcGVyIGlkCkBAIC0zNDQsNiArMzQ2LDE2IEBACiAKIAkvKiBEZXZpY2Ugc3BlY2lmaWMgd29ya2Fyb3VuZHMvYnJva2VuZXNzICovCiAJdW5zaWduZWQgd29ya2Fyb3VuZHM7CisKKwlhdG9taWNfdCBzdGF0ZTsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QgcHJvdG9jb2xfd29yazsKK307CisKKy8qIEZvciB1c2UgaW4gc2NzaV9pZF9pbnN0YW5jZV9kYXRhLnN0YXRlICovCitlbnVtIHNicDJsdV9zdGF0ZV90eXBlcyB7CisJU0JQMkxVX1NUQVRFX1JVTk5JTkcsCQkvKiBhbGwgbm9ybWFsICovCisJU0JQMkxVX1NUQVRFX0lOX1JFU0VULAkJLyogYmV0d2VlbiBidXMgcmVzZXQgYW5kIHJlY29ubmVjdCAqLworCVNCUDJMVV9TVEFURV9JTl9TSFVURE9XTgkvKiB3aGVuIHNicDJfcmVtb3ZlIHdhcyBjYWxsZWQgKi8KIH07CiAKIC8qIFNicDIgaG9zdCBkYXRhIHN0cnVjdHVyZSAob25lIHBlciBJRUVFMTM5NCBob3N0KSAqLwpAQCAtMzkwLDExICs0MDIsNiBAQAogc3RhdGljIGludCBzYnAyX2hhbmRsZV9zdGF0dXNfd3JpdGUoc3RydWN0IGhwc2JfaG9zdCAqaG9zdCwgaW50IG5vZGVpZCwgaW50IGRlc3RpZCwKIAkJCQkgICAgcXVhZGxldF90ICpkYXRhLCB1NjQgYWRkciwgc2l6ZV90IGxlbmd0aCwgdTE2IGZsYWdzKTsKIHN0YXRpYyBpbnQgc2JwMl9hZ2VudF9yZXNldChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLCBpbnQgd2FpdCk7Ci1zdGF0aWMgaW50IHNicDJfbGlua19vcmJfY29tbWFuZChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLAotCQkJCSBzdHJ1Y3Qgc2JwMl9jb21tYW5kX2luZm8gKmNvbW1hbmQpOwotc3RhdGljIGludCBzYnAyX3NlbmRfY29tbWFuZChzdHJ1Y3Qgc2NzaV9pZF9pbnN0YW5jZV9kYXRhICpzY3NpX2lkLAotCQkJICAgICBzdHJ1Y3Qgc2NzaV9jbW5kICpTQ3BudCwKLQkJCSAgICAgdm9pZCAoKmRvbmUpKHN0cnVjdCBzY3NpX2NtbmQgKikpOwogc3RhdGljIHVuc2lnbmVkIGludCBzYnAyX3N0YXR1c190b19zZW5zZV9kYXRhKHVuY2hhciAqc2JwMl9zdGF0dXMsCiAJCQkJCSAgICAgIHVuY2hhciAqc2Vuc2VfZGF0YSk7CiBzdGF0aWMgdm9pZCBzYnAyX3BhcnNlX3VuaXRfZGlyZWN0b3J5KHN0cnVjdCBzY3NpX2lkX2luc3RhbmNlX2RhdGEgKnNjc2lfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jIGIvZHJpdmVycy9pZWVlMTM5NC92aWRlbzEzOTQuYwppbmRleCBjNmUzZjAyLi45YmM2NTA1IDEwMDY0NAotLS0gYS9kcml2ZXJzL2llZWUxMzk0L3ZpZGVvMTM5NC5jCisrKyBiL2RyaXZlcnMvaWVlZTEzOTQvdmlkZW8xMzk0LmMKQEAgLTQ5LDE2ICs0OSwxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2NkZXYuaD4KIAotI2luY2x1ZGUgImllZWUxMzk0LmgiCi0jaW5jbHVkZSAiaWVlZTEzOTRfdHlwZXMuaCIKLSNpbmNsdWRlICJob3N0cy5oIgotI2luY2x1ZGUgImllZWUxMzk0X2NvcmUuaCIKLSNpbmNsdWRlICJoaWdobGV2ZWwuaCIKLSNpbmNsdWRlICJ2aWRlbzEzOTQuaCIKLSNpbmNsdWRlICJub2RlbWdyLmgiCiAjaW5jbHVkZSAiZG1hLmgiCi0KKyNpbmNsdWRlICJoaWdobGV2ZWwuaCIKKyNpbmNsdWRlICJob3N0cy5oIgorI2luY2x1ZGUgImllZWUxMzk0LmgiCisjaW5jbHVkZSAiaWVlZTEzOTRfY29yZS5oIgorI2luY2x1ZGUgImllZWUxMzk0X2hvdHBsdWcuaCIKKyNpbmNsdWRlICJpZWVlMTM5NF90eXBlcy5oIgorI2luY2x1ZGUgIm5vZGVtZ3IuaCIKICNpbmNsdWRlICJvaGNpMTM5NC5oIgorI2luY2x1ZGUgInZpZGVvMTM5NC5oIgogCiAjZGVmaW5lIElTT19DSEFOTkVMUyA2NAogCkBAIC0xMjksNyArMTI5LDcgQEAKICNkZWZpbmUgREJHTVNHKGNhcmQsIGZtdCwgYXJncy4uLikgXAogcHJpbnRrKEtFUk5fSU5GTyAidmlkZW8xMzk0XyVkOiAiIGZtdCAiXG4iICwgY2FyZCAsICMjIGFyZ3MpCiAjZWxzZQotI2RlZmluZSBEQkdNU0coY2FyZCwgZm10LCBhcmdzLi4uKQorI2RlZmluZSBEQkdNU0coY2FyZCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogCiAvKiBwcmludCBnZW5lcmFsIChjYXJkIGluZGVwZW5kZW50KSBpbmZvcm1hdGlvbiAqLwpAQCAtMTE4MSw3ICsxMTgxLDggQEAKIAogCWxvY2tfa2VybmVsKCk7CiAJaWYgKGN0eC0+Y3VycmVudF9jdHggPT0gTlVMTCkgewotCQlQUklOVChLRVJOX0VSUiwgY3R4LT5vaGNpLT5ob3N0LT5pZCwgIkN1cnJlbnQgaXNvIGNvbnRleHQgbm90IHNldCIpOworCQlQUklOVChLRVJOX0VSUiwgY3R4LT5vaGNpLT5ob3N0LT5pZCwKKwkJCQkiQ3VycmVudCBpc28gY29udGV4dCBub3Qgc2V0Iik7CiAJfSBlbHNlCiAJCXJlcyA9IGRtYV9yZWdpb25fbW1hcCgmY3R4LT5jdXJyZW50X2N0eC0+ZG1hLCBmaWxlLCB2bWEpOwogCXVubG9ja19rZXJuZWwoKTsKQEAgLTExODksNiArMTE5MCw0MCBAQAogCXJldHVybiByZXM7CiB9CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgdmlkZW8xMzk0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKnB0KQoreworCXN0cnVjdCBmaWxlX2N0eCAqY3R4OworCXVuc2lnbmVkIGludCBtYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBkbWFfaXNvX2N0eCAqZDsKKwlpbnQgaTsKKworCWxvY2tfa2VybmVsKCk7CisJY3R4ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCWQgPSBjdHgtPmN1cnJlbnRfY3R4OworCWlmIChkID09IE5VTEwpIHsKKwkJUFJJTlQoS0VSTl9FUlIsIGN0eC0+b2hjaS0+aG9zdC0+aWQsCisJCQkJIkN1cnJlbnQgaXNvIGNvbnRleHQgbm90IHNldCIpOworCQltYXNrID0gUE9MTEVSUjsKKwkJZ290byBkb25lOworCX0KKworCXBvbGxfd2FpdChmaWxlLCAmZC0+d2FpdHEsIHB0KTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkLT5sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IGQtPm51bV9kZXNjOyBpKyspIHsKKwkJaWYgKGQtPmJ1ZmZlcl9zdGF0dXNbaV0gPT0gVklERU8xMzk0X0JVRkZFUl9SRUFEWSkgeworCQkJbWFzayB8PSBQT0xMSU4gfCBQT0xMUkROT1JNOworCQkJYnJlYWs7CisJCX0KKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZC0+bG9jaywgZmxhZ3MpOworZG9uZToKKwl1bmxvY2tfa2VybmVsKCk7CisKKwlyZXR1cm4gbWFzazsKK30KKwogc3RhdGljIGludCB2aWRlbzEzOTRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgaSA9IGllZWUxMzk0X2ZpbGVfdG9faW5zdGFuY2UoZmlsZSk7CkBAIC0xMjU3LDYgKzEyOTIsNyBAQAogI2lmZGVmIENPTkZJR19DT01QQVQKIAkuY29tcGF0X2lvY3RsID0gdmlkZW8xMzk0X2NvbXBhdF9pb2N0bCwKICNlbmRpZgorCS5wb2xsID0JCXZpZGVvMTM5NF9wb2xsLAogCS5tbWFwID0JCXZpZGVvMTM5NF9tbWFwLAogCS5vcGVuID0JCXZpZGVvMTM5NF9vcGVuLAogCS5yZWxlYXNlID0JdmlkZW8xMzk0X3JlbGVhc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL2FkZHIuYwppbmRleCA5Y2JmMDllLi42MGQzZmJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9hZGRyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2NvcmUvYWRkci5jCkBAIC04Niw3ICs4Niw3IEBACiBpbnQgcmRtYV90cmFuc2xhdGVfaXAoc3RydWN0IHNvY2thZGRyICphZGRyLCBzdHJ1Y3QgcmRtYV9kZXZfYWRkciAqZGV2X2FkZHIpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQl1MzIgaXAgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX2FkZHIuc19hZGRyOworCV9fYmUzMiBpcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHIpLT5zaW5fYWRkci5zX2FkZHI7CiAJaW50IHJldDsKIAogCWRldiA9IGlwX2Rldl9maW5kKGlwKTsKQEAgLTIzOSw3ICsyMzksNyBAQAogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJdTMyIHNyY19pcCA9IHNyY19pbi0+c2luX2FkZHIuc19hZGRyOwotCXUzMiBkc3RfaXAgPSBkc3RfaW4tPnNpbl9hZGRyLnNfYWRkcjsKKwlfX2JlMzIgZHN0X2lwID0gZHN0X2luLT5zaW5fYWRkci5zX2FkZHI7CiAJaW50IHJldDsKIAogCWRldiA9IGlwX2Rldl9maW5kKGRzdF9pcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvY29yZS9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCmluZGV4IDA4MmYwM2MuLjQ5M2Y0YzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9jb3JlL21hZC5jCkBAIC0yOTg3LDEwICsyOTg3LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpYl9tYWRfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKIAlpYl91bnJlZ2lzdGVyX2NsaWVudCgmbWFkX2NsaWVudCk7Ci0KLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGliX21hZF9jYWNoZSkpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgUEZYICJGYWlsZWQgdG8gZGVzdHJveSBpYl9tYWQgY2FjaGVcbiIpOwotCX0KKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaWJfbWFkX2NhY2hlKTsKIH0KIAogbW9kdWxlX2luaXQoaWJfbWFkX2luaXRfbW9kdWxlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9hZS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FlLmMKaW5kZXggMDhmNDZjOC4uM2FhZTQ5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FlLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FlLmMKQEAgLTE5Nyw3ICsxOTcsNyBAQAogCQkJInJlc291cmNlPSV4LCBxcF9zdGF0ZT0lc1xuIiwKIAkJCV9fRlVOQ1RJT05fXywKIAkJCXRvX2V2ZW50X3N0cihldmVudF9pZCksCi0JCQliZTY0X3RvX2NwdSh3ci0+YWUuYWVfZ2VuZXJpYy51c2VyX2NvbnRleHQpLAorCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYmU2NF90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMudXNlcl9jb250ZXh0KSwKIAkJCWJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnJlc291cmNlX3R5cGUpLAogCQkJYmUzMl90b19jcHUod3ItPmFlLmFlX2dlbmVyaWMucmVzb3VyY2UpLAogCQkJdG9fcXBfc3RhdGVfc3RyKGJlMzJfdG9fY3B1KHdyLT5hZS5hZV9nZW5lcmljLnFwX3N0YXRlKSkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2FsbG9jLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYwppbmRleCAxZDI1Mjk5Li4wMjhhNjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfYWxsb2MuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCQkgICAgKCh1bnNpZ25lZCBsb25nKSAmKGhlYWQtPnNoYXJlZF9wdHJbbXFzcF0pIC0KIAkJCSAgICAgKHVuc2lnbmVkIGxvbmcpIGhlYWQpOwogCQlwcl9kZWJ1ZygiJXMgYWRkciAlcCBkbWFfYWRkciAlbGx4XG4iLCBfX0ZVTkNUSU9OX18sCi0JCQkgJihoZWFkLT5zaGFyZWRfcHRyW21xc3BdKSwgKHU2NCkqZG1hX2FkZHIpOworCQkJICYoaGVhZC0+c2hhcmVkX3B0clttcXNwXSksICh1bnNpZ25lZCBsb25nIGxvbmcpICpkbWFfYWRkcik7CiAJCXJldHVybiAmKGhlYWQtPnNoYXJlZF9wdHJbbXFzcF0pOwogCX0KIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9jbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NtLmMKaW5kZXggNDg1MjU0ZS4uNzViOTNlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NtLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX2NtLmMKQEAgLTMwMiw3ICszMDIsNyBAQAogCXZxX3JlcSA9IHZxX3JlcV9hbGxvYyhjMmRldik7CiAJaWYgKCF2cV9yZXEpIHsKIAkJZXJyID0gLUVOT01FTTsKLQkJZ290byBiYWlsMTsKKwkJZ290byBiYWlsMDsKIAl9CiAJdnFfcmVxLT5xcCA9IHFwOwogCXZxX3JlcS0+Y21faWQgPSBjbV9pZDsKQEAgLTMxMSw3ICszMTEsNyBAQAogCXdyID0ga21hbGxvYyhjMmRldi0+cmVxX3ZxLm1zZ19zaXplLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXdyKSB7CiAJCWVyciA9IC1FTk9NRU07Ci0JCWdvdG8gYmFpbDI7CisJCWdvdG8gYmFpbDE7CiAJfQogCiAJLyogQnVpbGQgdGhlIFdSICovCkBAIC0zMzEsNyArMzMxLDcgQEAKIAkvKiBWYWxpZGF0ZSBwcml2YXRlX2RhdGEgbGVuZ3RoICovCiAJaWYgKGl3X3BhcmFtLT5wcml2YXRlX2RhdGFfbGVuID4gQzJfTUFYX1BSSVZBVEVfREFUQV9TSVpFKSB7CiAJCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gYmFpbDI7CisJCWdvdG8gYmFpbDE7CiAJfQogCiAJaWYgKGl3X3BhcmFtLT5wcml2YXRlX2RhdGEpIHsKQEAgLTM0OCwxOSArMzQ4LDE5IEBACiAJZXJyID0gdnFfc2VuZF93cihjMmRldiwgKHVuaW9uIGMyd3IgKikgd3IpOwogCWlmIChlcnIpIHsKIAkJdnFfcmVxX3B1dChjMmRldiwgdnFfcmVxKTsKLQkJZ290byBiYWlsMjsKKwkJZ290byBiYWlsMTsKIAl9CiAKIAkvKiBXYWl0IGZvciByZXBseSBmcm9tIGFkYXB0ZXIgKi8KIAllcnIgPSB2cV93YWl0X2Zvcl9yZXBseShjMmRldiwgdnFfcmVxKTsKIAlpZiAoZXJyKQotCQlnb3RvIGJhaWwyOworCQlnb3RvIGJhaWwxOwogCiAJLyogQ2hlY2sgdGhhdCByZXBseSBpcyBwcmVzZW50ICovCiAJcmVwbHkgPSAoc3RydWN0IGMyd3JfY3JfYWNjZXB0X3JlcCAqKSAodW5zaWduZWQgbG9uZykgdnFfcmVxLT5yZXBseV9tc2c7CiAJaWYgKCFyZXBseSkgewogCQllcnIgPSAtRU5PTUVNOwotCQlnb3RvIGJhaWwyOworCQlnb3RvIGJhaWwxOwogCX0KIAogCWVyciA9IGMyX2Vycm5vKHJlcGx5KTsKQEAgLTM2OCw5ICszNjgsOCBAQAogCiAJaWYgKCFlcnIpCiAJCWMyX3NldF9xcF9zdGF0ZShxcCwgQzJfUVBfU1RBVEVfUlRTKTsKLSBiYWlsMjoKLQlrZnJlZSh3cik7CiAgYmFpbDE6CisJa2ZyZWUod3IpOwogCXZxX3JlcV9mcmVlKGMyZGV2LCB2cV9yZXEpOwogIGJhaWwwOgogCWlmIChlcnIpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9wcm92aWRlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKaW5kZXggZGQ2YWY1NS4uZGE5OGQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3Byb3ZpZGVyLmMKQEAgLTM5MCwxNCArMzkwLDE4IEBACiAJfQogCiAJbXIgPSBrbWFsbG9jKHNpemVvZigqbXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1yKQorCWlmICghbXIpIHsKKwkJdmZyZWUocGFnZV9saXN0KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CisJfQogCiAJbXItPnBkID0gdG9fYzJwZChpYl9wZCk7CiAJcHJfZGVidWcoIiVzIC0gcGFnZSBzaGlmdCAlZCwgcGJsX2RlcHRoICVkLCB0b3RhbF9sZW4gJXUsICIKIAkJIippb3ZhX3N0YXJ0ICVsbHgsIGZpcnN0IHBhICVsbHgsIGxhc3QgcGEgJWxseFxuIiwKIAkJX19GVU5DVElPTl9fLCBwYWdlX3NoaWZ0LCBwYmxfZGVwdGgsIHRvdGFsX2xlbiwKLQkJKmlvdmFfc3RhcnQsIHBhZ2VfbGlzdFswXSwgcGFnZV9saXN0W3BibF9kZXB0aC0xXSk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpICppb3ZhX3N0YXJ0LAorCSAgICAgICAJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGFnZV9saXN0WzBdLAorCSAgICAgICAJKHVuc2lnbmVkIGxvbmcgbG9uZykgcGFnZV9saXN0W3BibF9kZXB0aC0xXSk7CiAgIAllcnIgPSBjMl9uc21yX3JlZ2lzdGVyX3BoeXNfa2Vybih0b19jMmRldihpYl9wZC0+ZGV2aWNlKSwgcGFnZV9saXN0LAogIAkJCQkJICgxIDw8IHBhZ2Vfc2hpZnQpLCBwYmxfZGVwdGgsCiAJCQkJCSB0b3RhbF9sZW4sIDAsIGlvdmFfc3RhcnQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcm5pYy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2Ftc28xMTAwL2MyX3JuaWMuYwppbmRleCBmNDlhMzJiLi5lMzdjNTY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvYW1zbzExMDAvYzJfcm5pYy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9hbXNvMTEwMC9jMl9ybmljLmMKQEAgLTUyNyw3ICs1MjcsNyBAQAogCQkJCSAgICAgIAkJRE1BX0ZST01fREVWSUNFKTsKIAlwY2lfdW5tYXBfYWRkcl9zZXQoJmMyZGV2LT5yZXBfdnEsIG1hcHBpbmcsIGMyZGV2LT5yZXBfdnEuaG9zdF9kbWEpOwogCXByX2RlYnVnKCIlcyByZXBfdnEgdmEgJXAgZG1hICVsbHhcbiIsIF9fRlVOQ1RJT05fXywgcTFfcGFnZXMsCi0JCSAodTY0KWMyZGV2LT5yZXBfdnEuaG9zdF9kbWEpOworCQkgKHVuc2lnbmVkIGxvbmcgbG9uZykgYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CiAJYzJfbXFfcmVwX2luaXQoJmMyZGV2LT5yZXBfdnEsCiAJCSAgIDEsCiAJCSAgIHFzaXplLApAQCAtNTUwLDcgKzU1MCw3IEBACiAJCQkJICAgICAgCQlETUFfRlJPTV9ERVZJQ0UpOwogCXBjaV91bm1hcF9hZGRyX3NldCgmYzJkZXYtPmFlcSwgbWFwcGluZywgYzJkZXYtPmFlcS5ob3N0X2RtYSk7CiAJcHJfZGVidWcoIiVzIGFlcSB2YSAlcCBkbWEgJWxseFxuIiwgX19GVU5DVElPTl9fLCBxMV9wYWdlcywKLQkJICh1NjQpYzJkZXYtPnJlcF92cS5ob3N0X2RtYSk7CisJCSAodW5zaWduZWQgbG9uZyBsb25nKSBjMmRldi0+cmVwX3ZxLmhvc3RfZG1hKTsKIAljMl9tcV9yZXBfaW5pdCgmYzJkZXYtPmFlcSwKIAkJICAgICAgIDIsCiAJCSAgICAgICBxc2l6ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9jb21tb24uaAppbmRleCBmNTc3OTA1Li41NDEzOWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY29tbW9uLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NvbW1vbi5oCkBAIC0xNDEsOCArMTQxLDkgQEAKIAkgKiBwYWNrZXRzIGlmIGlwYXRoIG5vdCBjb25maWd1cmVkLCBldGMuKQogCSAqLwogCV9fdTY0IHNwc19rcmRyb3BzOworCV9fdTY0IHNwc190eGVwYXJpdHk7IC8qIFBJTyBidWZmZXIgcGFyaXR5IGVycm9yLCByZWNvdmVyZWQgKi8KIAkvKiBwYWQgZm9yIGZ1dHVyZSBncm93dGggKi8KLQlfX3U2NCBfX3Nwc19wYWRbNDZdOworCV9fdTY0IF9fc3BzX3BhZFs0NV07CiB9OwogCiAvKgpAQCAtMTg1LDYgKzE4Niw5IEBACiAjZGVmaW5lIElQQVRIX1JVTlRJTUVfUENJRQkweDIKICNkZWZpbmUgSVBBVEhfUlVOVElNRV9GT1JDRV9XQ19PUkRFUgkweDQKICNkZWZpbmUgSVBBVEhfUlVOVElNRV9SQ1ZIRFJfQ09QWQkweDgKKyNkZWZpbmUgSVBBVEhfUlVOVElNRV9NQVNURVIJMHgxMAorI2RlZmluZSBJUEFUSF9SVU5USU1FX1BCQ19SRVdSSVRFIDB4MjAKKyNkZWZpbmUgSVBBVEhfUlVOVElNRV9MT09TRV9ETUFfQUxJR04gMHg0MAogCiAvKgogICogVGhpcyBzdHJ1Y3R1cmUgaXMgcmV0dXJuZWQgYnkgaXBhdGhfdXNlcmluaXQoKSBpbW1lZGlhdGVseSBhZnRlcgpAQCAtMjAyLDcgKzIwNiw4IEBACiAJLyogdmVyc2lvbiBvZiBzb2Z0d2FyZSwgZm9yIGZlYXR1cmUgY2hlY2tpbmcuICovCiAJX191MzIgc3BpX3N3X3ZlcnNpb247CiAJLyogSW5maW5pUGF0aCBwb3J0IGFzc2lnbmVkLCBnb2VzIGludG8gc2VudCBwYWNrZXRzICovCi0JX191MzIgc3BpX3BvcnQ7CisJX191MTYgc3BpX3BvcnQ7CisJX191MTYgc3BpX3N1YnBvcnQ7CiAJLyoKIAkgKiBJQiBNVFUsIHBhY2tldHMgSUIgZGF0YSBtdXN0IGJlIGxlc3MgdGhhbiB0aGlzLgogCSAqIFRoZSBNVFUgaXMgaW4gYnl0ZXMsIGFuZCB3aWxsIGJlIGEgbXVsdGlwbGUgb2YgNCBieXRlcy4KQEAgLTIxOCw3ICsyMjMsNyBAQAogCV9fdTMyIHNwaV90aWRjbnQ7CiAJLyogc2l6ZSBvZiB0aGUgVElEIEVhZ2VyIGxpc3QgaW4gaW5maW5pcGF0aCwgaW4gZW50cmllcyAqLwogCV9fdTMyIHNwaV90aWRlZ3JjbnQ7Ci0JLyogc2l6ZSBvZiBhIHNpbmdsZSByZWNlaXZlIGhlYWRlciBxdWV1ZSBlbnRyeS4gKi8KKwkvKiBzaXplIG9mIGEgc2luZ2xlIHJlY2VpdmUgaGVhZGVyIHF1ZXVlIGVudHJ5IGluIHdvcmRzLiAqLwogCV9fdTMyIHNwaV9yY3ZoZHJlbnRfc2l6ZTsKIAkvKgogCSAqIENvdW50IG9mIHJlY2VpdmUgaGVhZGVyIHF1ZXVlIGVudHJpZXMgYWxsb2NhdGVkLgpAQCAtMzEwLDYgKzMxNSwxMiBAQAogCV9fdTMyIHNwaV9maWxsZXJfZm9yX2FsaWduOwogCS8qIGFkZHJlc3Mgb2YgcmVhZG9ubHkgbWVtb3J5IGNvcHkgb2YgdGhlIHJjdmhkcnEgdGFpbCByZWdpc3Rlci4gKi8KIAlfX3U2NCBzcGlfcmN2aGRyX3RhaWxhZGRyOworCisJLyogc2hhcmVkIG1lbW9yeSBwYWdlcyBmb3Igc3VicG9ydHMgaWYgSVBBVEhfUlVOVElNRV9NQVNURVIgaXMgc2V0ICovCisJX191NjQgc3BpX3N1YnBvcnRfdXJlZ2Jhc2U7CisJX191NjQgc3BpX3N1YnBvcnRfcmN2ZWdyYnVmOworCV9fdTY0IHNwaV9zdWJwb3J0X3Jjdmhkcl9iYXNlOworCiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkKDgpKSk7CiAKIApAQCAtMzI4LDEyICszMzksMTIgQEAKIAogLyoKICAqIE1pbm9yIHZlcnNpb24gZGlmZmVyZW5jZXMgYXJlIGFsd2F5cyBjb21wYXRpYmxlCi0gKiBhIHdpdGhpbiBhIG1ham9yIHZlcnNpb24sIGhvd2V2ZXIgaWYgaWYgdXNlciBzb2Z0d2FyZSBpcyBsYXJnZXIKKyAqIGEgd2l0aGluIGEgbWFqb3IgdmVyc2lvbiwgaG93ZXZlciBpZiB1c2VyIHNvZnR3YXJlIGlzIGxhcmdlcgogICogdGhhbiBkcml2ZXIgc29mdHdhcmUsIHNvbWUgbmV3IGZlYXR1cmVzIGFuZC9vciBzdHJ1Y3R1cmUgZmllbGRzCiAgKiBtYXkgbm90IGJlIGltcGxlbWVudGVkOyB0aGUgdXNlciBjb2RlIG11c3QgZGVhbCB3aXRoIHRoaXMgaWYgaXQKLSAqIGNhcmVzLCBvciBpdCBtdXN0IGFib3J0IGFmdGVyIGluaXRpYWxpemF0aW9uIHJlcG9ydHMgdGhlIGRpZmZlcmVuY2UKKyAqIGNhcmVzLCBvciBpdCBtdXN0IGFib3J0IGFmdGVyIGluaXRpYWxpemF0aW9uIHJlcG9ydHMgdGhlIGRpZmZlcmVuY2UuCiAgKi8KLSNkZWZpbmUgSVBBVEhfVVNFUl9TV01JTk9SIDIKKyNkZWZpbmUgSVBBVEhfVVNFUl9TV01JTk9SIDMKIAogI2RlZmluZSBJUEFUSF9VU0VSX1NXVkVSU0lPTiAoKElQQVRIX1VTRVJfU1dNQUpPUjw8MTYpIHwgSVBBVEhfVVNFUl9TV01JTk9SKQogCkBAIC0zNzksNyArMzkwLDE2IEBACiAJICovCiAJX191MzIgc3B1X3JjdmhkcnNpemU7CiAKLQlfX3U2NCBzcHVfdW51c2VkOyAvKiBrZXB0IGZvciBjb21wYXRpYmxlIGxheW91dCAqLworCS8qCisJICogSWYgdHdvIG9yIG1vcmUgcHJvY2Vzc2VzIHdpc2ggdG8gc2hhcmUgYSBwb3J0LCBlYWNoIHByb2Nlc3MKKwkgKiBtdXN0IHNldCB0aGUgc3B1X3N1YnBvcnRfY250IGFuZCBzcHVfc3VicG9ydF9pZCB0byB0aGUgc2FtZQorCSAqIHZhbHVlcy4gIFRoZSBvbmx5IHJlc3RyaWN0aW9uIG9uIHRoZSBzcHVfc3VicG9ydF9pZCBpcyB0aGF0CisJICogaXQgYmUgdW5pcXVlIGZvciBhIGdpdmVuIG5vZGUuCisJICovCisJX191MTYgc3B1X3N1YnBvcnRfY250OworCV9fdTE2IHNwdV9zdWJwb3J0X2lkOworCisJX191MzIgc3B1X3VudXNlZDsgLyoga2VwdCBmb3IgY29tcGF0aWJsZSBsYXlvdXQgKi8KIAogCS8qCiAJICogYWRkcmVzcyBvZiBzdHJ1Y3QgYmFzZV9pbmZvIHRvIHdyaXRlIHRvCkBAIC0zOTIsMTkgKzQxMiwyNSBAQAogCiAjZGVmaW5lIElQQVRIX0NNRF9NSU4JCTE2CiAKLSNkZWZpbmUgSVBBVEhfQ01EX1VTRVJfSU5JVAkxNgkvKiBzZXQgdXAgdXNlcnNwYWNlICovCisjZGVmaW5lIF9fSVBBVEhfQ01EX1VTRVJfSU5JVAkxNgkvKiBvbGQgc2V0IHVwIHVzZXJzcGFjZSAoZm9yIG9sZCB1c2VyIGNvZGUpICovCiAjZGVmaW5lIElQQVRIX0NNRF9QT1JUX0lORk8JMTcJLyogZmluZCBvdXQgd2hhdCByZXNvdXJjZXMgd2UgZ290ICovCiAjZGVmaW5lIElQQVRIX0NNRF9SRUNWX0NUUkwJMTgJLyogY29udHJvbCByZWNlaXB0IG9mIHBhY2tldHMgKi8KICNkZWZpbmUgSVBBVEhfQ01EX1RJRF9VUERBVEUJMTkJLyogdXBkYXRlIGV4cGVjdGVkIFRJRCBlbnRyaWVzICovCiAjZGVmaW5lIElQQVRIX0NNRF9USURfRlJFRQkyMAkvKiBmcmVlIGV4cGVjdGVkIFRJRCBlbnRyaWVzICovCiAjZGVmaW5lIElQQVRIX0NNRF9TRVRfUEFSVF9LRVkJMjEJLyogYWRkIHBhcnRpdGlvbiBrZXkgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1NMQVZFX0lORk8JMjIJLyogcmV0dXJuIGluZm8gb24gc2xhdmUgcHJvY2Vzc2VzICovCisjZGVmaW5lIElQQVRIX0NNRF9BU1NJR05fUE9SVAkyMwkvKiBhbGxvY2F0ZSBIQ0EgYW5kIHBvcnQgKi8KKyNkZWZpbmUgSVBBVEhfQ01EX1VTRVJfSU5JVCAJMjQJLyogc2V0IHVwIHVzZXJzcGFjZSAqLwogCi0jZGVmaW5lIElQQVRIX0NNRF9NQVgJCTIxCisjZGVmaW5lIElQQVRIX0NNRF9NQVgJCTI0CiAKIHN0cnVjdCBpcGF0aF9wb3J0X2luZm8gewogCV9fdTMyIG51bV9hY3RpdmU7CS8qIG51bWJlciBvZiBhY3RpdmUgdW5pdHMgKi8KIAlfX3UzMiB1bml0OwkJLyogdW5pdCAoY2hpcCkgYXNzaWduZWQgdG8gY2FsbGVyICovCi0JX191MzIgcG9ydDsJCS8qIHBvcnQgb24gdW5pdCBhc3NpZ25lZCB0byBjYWxsZXIgKi8KKwlfX3UxNiBwb3J0OwkJLyogcG9ydCBvbiB1bml0IGFzc2lnbmVkIHRvIGNhbGxlciAqLworCV9fdTE2IHN1YnBvcnQ7CQkvKiBzdWJwb3J0IG9uIHVuaXQgYXNzaWduZWQgdG8gY2FsbGVyICovCisJX191MTYgbnVtX3BvcnRzOwkvKiBudW1iZXIgb2YgcG9ydHMgYXZhaWxhYmxlIG9uIHVuaXQgKi8KKwlfX3UxNiBudW1fc3VicG9ydHM7CS8qIG51bWJlciBvZiBzdWJwb3J0IHNsYXZlcyBvcGVuZWQgb24gcG9ydCAqLwogfTsKIAogc3RydWN0IGlwYXRoX3RpZF9pbmZvIHsKQEAgLTQzNSw2ICs0NjEsOCBAQAogCQlfX3UzMiByZWN2X2N0cmw7CiAJCS8qIHBhcnRpdGlvbiBrZXkgdG8gc2V0ICovCiAJCV9fdTE2IHBhcnRfa2V5OworCQkvKiB1c2VyIGFkZHJlc3Mgb2YgX191MzIgYml0bWFzayBvZiBhY3RpdmUgc2xhdmVzICovCisJCV9fdTY0IHNsYXZlX21hc2tfYWRkcjsKIAl9IGNtZDsKIH07CiAKQEAgLTU5Niw2ICs2MjQsMTAgQEAKIAogLyogS19Qa3RGbGFncyBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfS1BGX0lOVFIgMHgxCisjZGVmaW5lIElORklOSVBBVEhfS1BGX1NVQlBPUlRfTUFTSyAweDMKKyNkZWZpbmUgSU5GSU5JUEFUSF9LUEZfU1VCUE9SVF9TSElGVCAxCisKKyNkZWZpbmUgSU5GSU5JUEFUSF9NQVhfU1VCUE9SVAk0CiAKIC8qIFNlbmRQSU8gcGVyLWJ1ZmZlciBjb250cm9sICovCiAjZGVmaW5lIElORklOSVBBVEhfU1BfVEVTVCAgICAweDQwCkBAIC02MTAsNyArNjQyLDcgQEAKIAkvKgogCSAqIFZlcnNpb24gLSA0IGJpdHMsIFBvcnQgLSA0IGJpdHMsIFRJRCAtIDEwIGJpdHMgYW5kIE9mZnNldCAtCiAJICogMTQgYml0cyBiZWZvcmUgRUNPIGNoYW5nZSB+MjggRGVjIDAzLiAgQWZ0ZXIgdGhhdCwgVmVycyA0LAotCSAqIFBvcnQgMywgVElEIDExLCBvZmZzZXQgMTQuCisJICogUG9ydCA0LCBUSUQgMTEsIG9mZnNldCAxMy4KIAkgKi8KIAlfX2xlMzIgdmVyX3BvcnRfdGlkX29mZnNldDsKIAlfX2xlMTYgY2hrc3VtOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYwppbmRleCAwNDkyMjFiLi44NzQ2MmUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfY3EuYwpAQCAtNDYsNyArNDYsNyBAQAogICovCiB2b2lkIGlwYXRoX2NxX2VudGVyKHN0cnVjdCBpcGF0aF9jcSAqY3EsIHN0cnVjdCBpYl93YyAqZW50cnksIGludCBzb2xpY2l0ZWQpCiB7Ci0Jc3RydWN0IGlwYXRoX2NxX3djICp3YyA9IGNxLT5xdWV1ZTsKKwlzdHJ1Y3QgaXBhdGhfY3Ffd2MgKndjOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTMyIGhlYWQ7CiAJdTMyIG5leHQ7CkBAIC01Nyw2ICs1Nyw3IEBACiAJICogTm90ZSB0aGF0IHRoZSBoZWFkIHBvaW50ZXIgbWlnaHQgYmUgd3JpdGFibGUgYnkgdXNlciBwcm9jZXNzZXMuCiAJICogVGFrZSBjYXJlIHRvIHZlcmlmeSBpdCBpcyBhIHNhbmUgdmFsdWUuCiAJICovCisJd2MgPSBjcS0+cXVldWU7CiAJaGVhZCA9IHdjLT5oZWFkOwogCWlmIChoZWFkID49ICh1bnNpZ25lZCkgY3EtPmliY3EuY3FlKSB7CiAJCWhlYWQgPSBjcS0+aWJjcS5jcWU7CkBAIC0xMDksMjEgKzExMCwyNyBAQAogaW50IGlwYXRoX3BvbGxfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgbnVtX2VudHJpZXMsIHN0cnVjdCBpYl93YyAqZW50cnkpCiB7CiAJc3RydWN0IGlwYXRoX2NxICpjcSA9IHRvX2ljcShpYmNxKTsKLQlzdHJ1Y3QgaXBhdGhfY3Ffd2MgKndjID0gY3EtPnF1ZXVlOworCXN0cnVjdCBpcGF0aF9jcV93YyAqd2M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbnBvbGxlZDsKKwl1MzIgdGFpbDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjcS0+bG9jaywgZmxhZ3MpOwogCisJd2MgPSBjcS0+cXVldWU7CisJdGFpbCA9IHdjLT50YWlsOworCWlmICh0YWlsID4gKHUzMikgY3EtPmliY3EuY3FlKQorCQl0YWlsID0gKHUzMikgY3EtPmliY3EuY3FlOwogCWZvciAobnBvbGxlZCA9IDA7IG5wb2xsZWQgPCBudW1fZW50cmllczsgKytucG9sbGVkLCArK2VudHJ5KSB7Ci0JCWlmICh3Yy0+dGFpbCA9PSB3Yy0+aGVhZCkKKwkJaWYgKHRhaWwgPT0gd2MtPmhlYWQpCiAJCQlicmVhazsKLQkJKmVudHJ5ID0gd2MtPnF1ZXVlW3djLT50YWlsXTsKLQkJaWYgKHdjLT50YWlsID49IGNxLT5pYmNxLmNxZSkKLQkJCXdjLT50YWlsID0gMDsKKwkJKmVudHJ5ID0gd2MtPnF1ZXVlW3RhaWxdOworCQlpZiAodGFpbCA+PSBjcS0+aWJjcS5jcWUpCisJCQl0YWlsID0gMDsKIAkJZWxzZQotCQkJd2MtPnRhaWwrKzsKKwkJCXRhaWwrKzsKIAl9CisJd2MtPnRhaWwgPSB0YWlsOwogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY3EtPmxvY2ssIGZsYWdzKTsKIApAQCAtMTc3LDExICsxODQsNiBAQAogCQlnb3RvIGRvbmU7CiAJfQogCi0JaWYgKGRldi0+bl9jcXNfYWxsb2NhdGVkID09IGliX2lwYXRoX21heF9jcXMpIHsKLQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBkb25lOwotCX0KLQogCS8qIEFsbG9jYXRlIHRoZSBjb21wbGV0aW9uIHF1ZXVlIHN0cnVjdHVyZS4gKi8KIAljcSA9IGttYWxsb2Moc2l6ZW9mKCpjcSksIEdGUF9LRVJORUwpOwogCWlmICghY3EpIHsKQEAgLTIzNyw2ICsyMzksMTYgQEAKIAl9IGVsc2UKIAkJY3EtPmlwID0gTlVMTDsKIAorCXNwaW5fbG9jaygmZGV2LT5uX2Nxc19sb2NrKTsKKwlpZiAoZGV2LT5uX2Nxc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X2NxcykgeworCQlzcGluX3VubG9jaygmZGV2LT5uX2Nxc19sb2NrKTsKKwkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKKwkJZ290byBiYWlsX3djOworCX0KKworCWRldi0+bl9jcXNfYWxsb2NhdGVkKys7CisJc3Bpbl91bmxvY2soJmRldi0+bl9jcXNfbG9jayk7CisKIAkvKgogCSAqIGliX2NyZWF0ZV9jcSgpIHdpbGwgaW5pdGlhbGl6ZSBjcS0+aWJjcSBleGNlcHQgZm9yIGNxLT5pYmNxLmNxZS4KIAkgKiBUaGUgbnVtYmVyIG9mIGVudHJpZXMgc2hvdWxkIGJlID49IHRoZSBudW1iZXIgcmVxdWVzdGVkIG9yIHJldHVybgpAQCAtMjUzLDcgKzI2NSw2IEBACiAKIAlyZXQgPSAmY3EtPmliY3E7CiAKLQlkZXYtPm5fY3FzX2FsbG9jYXRlZCsrOwogCWdvdG8gZG9uZTsKIAogYmFpbF93YzoKQEAgLTI4MCw3ICsyOTEsOSBAQAogCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSB0b19pY3EoaWJjcSk7CiAKIAl0YXNrbGV0X2tpbGwoJmNxLT5jb21wdGFzayk7CisJc3Bpbl9sb2NrKCZkZXYtPm5fY3FzX2xvY2spOwogCWRldi0+bl9jcXNfYWxsb2NhdGVkLS07CisJc3Bpbl91bmxvY2soJmRldi0+bl9jcXNfbG9jayk7CiAJaWYgKGNxLT5pcCkKIAkJa3JlZl9wdXQoJmNxLT5pcC0+cmVmLCBpcGF0aF9yZWxlYXNlX21tYXBfaW5mbyk7CiAJZWxzZQpAQCAtMzE2LDEwICszMjksMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyoqCisgKiBpcGF0aF9yZXNpemVfY3EgLSBjaGFuZ2UgdGhlIHNpemUgb2YgdGhlIENRCisgKiBAaWJjcTogdGhlIGNvbXBsZXRpb24gcXVldWUKKyAqCisgKiBSZXR1cm5zIDAgZm9yIHN1Y2Nlc3MuCisgKi8KIGludCBpcGF0aF9yZXNpemVfY3Eoc3RydWN0IGliX2NxICppYmNxLCBpbnQgY3FlLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKQogewogCXN0cnVjdCBpcGF0aF9jcSAqY3EgPSB0b19pY3EoaWJjcSk7Ci0Jc3RydWN0IGlwYXRoX2NxX3djICpvbGRfd2MgPSBjcS0+cXVldWU7CisJc3RydWN0IGlwYXRoX2NxX3djICpvbGRfd2M7CiAJc3RydWN0IGlwYXRoX2NxX3djICp3YzsKIAl1MzIgaGVhZCwgdGFpbCwgbjsKIAlpbnQgcmV0OwpAQCAtMzU1LDYgKzM3NCw3IEBACiAJICogTWFrZSBzdXJlIGhlYWQgYW5kIHRhaWwgYXJlIHNhbmUgc2luY2UgdGhleQogCSAqIG1pZ2h0IGJlIHVzZXIgd3JpdGFibGUuCiAJICovCisJb2xkX3djID0gY3EtPnF1ZXVlOwogCWhlYWQgPSBvbGRfd2MtPmhlYWQ7CiAJaWYgKGhlYWQgPiAodTMyKSBjcS0+aWJjcS5jcWUpCiAJCWhlYWQgPSAodTMyKSBjcS0+aWJjcS5jcWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZHJpdmVyLmMKaW5kZXggMjEwODQ2Ni4uMTJjZWZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9kcml2ZXIuYwpAQCAtOTUsMTYgKzk1LDYgQEAKIAkiUmVjb3ZJZGxlIiwKIH07CiAKLS8qCi0gKiBUaGVzZSB2YXJpYWJsZXMgYXJlIGluaXRpYWxpemVkIGluIHRoZSBjaGlwLXNwZWNpZmljIGZpbGVzCi0gKiBidXQgYXJlIGRlZmluZWQgaGVyZS4KLSAqLwotdTE2IGlwYXRoX2dwaW9fc2RhX251bSwgaXBhdGhfZ3Bpb19zY2xfbnVtOwotdTY0IGlwYXRoX2dwaW9fc2RhLCBpcGF0aF9ncGlvX3NjbDsKLXU2NCBpbmZpbmlwYXRoX2lfYml0c2V4dGFudDsKLWlwYXRoX2Vycl90IGluZmluaXBhdGhfZV9iaXRzZXh0YW50LCBpbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50OwotdTMyIGluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrLCBpbmZpbmlwYXRoX2lfcmN2dXJnX21hc2s7Ci0KIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcGF0aF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICopOwogc3RhdGljIGludCBfX2RldmluaXQgaXBhdGhfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKiwKIAkJCQkgICAgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKik7CkBAIC01MjcsMjggKzUxNywxNDYgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgdm9pZCBfX2RldmV4aXQgY2xlYW51cF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCWludCBwb3J0OworCisJaXBhdGhfc2h1dGRvd25fZGV2aWNlKGRkKTsKKworCWlmICgqZGQtPmlwYXRoX3N0YXR1c3AgJiBJUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UKSB7CisJCS8qIGNhbid0IGRvIGFueXRoaW5nIG1vcmUgd2l0aCBjaGlwOyBuZWVkcyByZS1pbml0ICovCisJCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0NISVBfUFJFU0VOVDsKKwkJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkgeworCQkJLyoKKwkJCSAqIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBjbGVhbmVkIHVwIGJlZm9yZSB0aGVzZSBhcmUKKwkJCSAqIHRvIGVuc3VyZSBhbnkgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzICJmYWlsIiB1bnRpbAorCQkJICogcmUtaW5pdAorCQkJICovCisJCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBOVUxMOworCQkJZGQtPmlwYXRoX3VyZWdiYXNlID0gMDsKKwkJCWRkLT5pcGF0aF9zcmVnYmFzZSA9IDA7CisJCQlkZC0+aXBhdGhfY3JlZ2Jhc2UgPSAwOworCQkJZGQtPmlwYXRoX2tyZWdzaXplID0gMDsKKwkJfQorCQlpcGF0aF9kaXNhYmxlX3djKGRkKTsKKwl9CisKKwlpZiAoZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEpIHsKKwkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLAorCQkJCSAgKHZvaWQgKikgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEsCisJCQkJICBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpOworCQlkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSA9IE5VTEw7CisJfQorCWlmIChkZC0+aXBhdGhfZHVtbXlfaGRycSkgeworCQlkbWFfZnJlZV9jb2hlcmVudCgmZGQtPnBjaWRldi0+ZGV2LAorCQkJZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3JjdmhkcnFfc2l6ZSwKKwkJCWRkLT5pcGF0aF9kdW1teV9oZHJxLCBkZC0+aXBhdGhfZHVtbXlfaGRycV9waHlzKTsKKwkJZGQtPmlwYXRoX2R1bW15X2hkcnEgPSBOVUxMOworCX0KKworCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvdykgeworCQlzdHJ1Y3QgcGFnZSAqKnRtcHAgPSBkZC0+aXBhdGhfcGFnZXNoYWRvdzsKKwkJZG1hX2FkZHJfdCAqdG1wZCA9IGRkLT5pcGF0aF9waHlzc2hhZG93OworCQlpbnQgaSwgY250ID0gMDsKKworCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbmxvY2tpbmcgYW55IGV4cFRJRCBwYWdlcyBzdGlsbCAiCisJCQkgICAibG9ja2VkXG4iKTsKKwkJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGRkLT5pcGF0aF9jZmdwb3J0czsgcG9ydCsrKSB7CisJCQlpbnQgcG9ydF90aWRiYXNlID0gcG9ydCAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJCQlpbnQgbWF4dGlkID0gcG9ydF90aWRiYXNlICsgZGQtPmlwYXRoX3JjdnRpZGNudDsKKwkJCWZvciAoaSA9IHBvcnRfdGlkYmFzZTsgaSA8IG1heHRpZDsgaSsrKSB7CisJCQkJaWYgKCF0bXBwW2ldKQorCQkJCQljb250aW51ZTsKKwkJCQlwY2lfdW5tYXBfcGFnZShkZC0+cGNpZGV2LCB0bXBkW2ldLAorCQkJCQlQQUdFX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKCZ0bXBwW2ldLCAxKTsKKwkJCQl0bXBwW2ldID0gTlVMTDsKKwkJCQljbnQrKzsKKwkJCX0KKwkJfQorCQlpZiAoY250KSB7CisJCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MgKz0gY250OworCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVGhlcmUgd2VyZSBzdGlsbCAldSBleHBUSUQgIgorCQkJCSAgICJlbnRyaWVzIGxvY2tlZFxuIiwgY250KTsKKwkJfQorCQlpZiAoaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcyB8fAorCQkgICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKQorCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWxsdSBwYWdlcyBsb2NrZWQsICVsbHUgIgorCQkJCSAgICJ1bmxvY2tlZCB2aWEgaXBhdGhfbXt1bn1sb2NrXG4iLAorCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCisJCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcywKKwkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJCSAgIGlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2Nrcyk7CisKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiRnJlZSBzaGFkb3cgcGFnZSB0aWQgYXJyYXkgYXQgJXBcbiIsCisJCQkgICBkZC0+aXBhdGhfcGFnZXNoYWRvdyk7CisJCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOworCX0KKworCS8qCisJICogZnJlZSBhbnkgcmVzb3VyY2VzIHN0aWxsIGluIHVzZSAodXN1YWxseSBqdXN0IGtlcm5lbCBwb3J0cykKKwkgKiBhdCB1bmxvYWQ7IHdlIGRvIGZvciBwb3J0Y250LCBub3QgY2ZncG9ydHMsIGJlY2F1c2UgY2ZncG9ydHMKKwkgKiBjb3VsZCBoYXZlIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkZWQuCisJICovCisJZm9yIChwb3J0ID0gMDsgcG9ydCA8IGRkLT5pcGF0aF9wb3J0Y250OyBwb3J0KyspIHsKKwkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtwb3J0XTsKKwkJZGQtPmlwYXRoX3BkW3BvcnRdID0gTlVMTDsKKwkJaXBhdGhfZnJlZV9wZGRhdGEoZGQsIHBkKTsKKwl9CisJa2ZyZWUoZGQtPmlwYXRoX3BkKTsKKwkvKgorCSAqIGRlYnVnZ2FiaWxpdHksIGluIGNhc2Ugc29tZSBjbGVhbnVwIHBhdGggdHJpZXMgdG8gdXNlIGl0CisJICogYWZ0ZXIgdGhpcworCSAqLworCWRkLT5pcGF0aF9wZCA9IE5VTEw7Cit9CisKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpcGF0aF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CiAKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJyZW1vdmluZywgcGRldj0lcFxuIiwgcGRldik7Ci0JaWYgKCFwZGV2KQotCQlyZXR1cm47CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAicmVtb3ZpbmcsIHBkZXY9JXAsIGRkPSVwXG4iLCBwZGV2LCBkZCk7CiAKLQlkZCA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlpcGF0aF91bnJlZ2lzdGVyX2liX2RldmljZShkZC0+dmVyYnNfZGV2KTsKKwlpZiAoZGQtPnZlcmJzX2RldikKKwkJaXBhdGhfdW5yZWdpc3Rlcl9pYl9kZXZpY2UoZGQtPnZlcmJzX2Rldik7CisKIAlpcGF0aF9kaWFnX3JlbW92ZShkZCk7CiAJaXBhdGhfdXNlcl9yZW1vdmUoZGQpOwogCWlwYXRoZnNfcmVtb3ZlX2RldmljZShkZCk7CiAJaXBhdGhfZGV2aWNlX3JlbW92ZV9ncm91cCgmcGRldi0+ZGV2LCBkZCk7CisKIAlpcGF0aF9jZGJnKFZFUkJPU0UsICJSZWxlYXNpbmcgcGNpIG1lbW9yeSByZWdpb25zLCBkZCAlcCwgIgogCQkgICAidW5pdCAldVxuIiwgZGQsICh1MzIpIGRkLT5pcGF0aF91bml0KTsKLQlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKSB7Ci0JCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlVubWFwcGluZyBrcmVnYmFzZSAlcFxuIiwKLQkJCSAgIGRkLT5pcGF0aF9rcmVnYmFzZSk7Ci0JCWlvdW5tYXAoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpOwotCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBOVUxMOwotCX0KKworCWNsZWFudXBfZGV2aWNlKGRkKTsKKworCS8qCisJICogdHVybiBvZmYgcmN2LCBzZW5kLCBhbmQgaW50ZXJydXB0cyBmb3IgYWxsIHBvcnRzLCBhbGwgZHJpdmVycworCSAqIHNob3VsZCBhbHNvIGhhcmQgcmVzZXQgdGhlIGNoaXAgaGVyZT8KKwkgKiBmcmVlIHVwIHBvcnQgMCAoa2VybmVsKSByY3ZoZHIsIGVnciBidWZzLCBhbmQgZXZlbnR1YWxseSB0aWQgYnVmcworCSAqIGZvciBhbGwgdmVyc2lvbnMgb2YgdGhlIGRyaXZlciwgaWYgdGhleSB3ZXJlIGFsbG9jYXRlZAorCSAqLworCWlmIChwZGV2LT5pcnEpIHsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLAorCQkJICAgInVuaXQgJXUgZnJlZV9pcnEgb2YgaXJxICV4XG4iLAorCQkJICAgZGQtPmlwYXRoX3VuaXQsIHBkZXYtPmlycSk7CisJCWZyZWVfaXJxKHBkZXYtPmlycSwgZGQpOworCX0gZWxzZQorCQlpcGF0aF9kYmcoImlycSBpcyAwLCBub3QgZG9pbmcgZnJlZV9pcnEgIgorCQkJICAiZm9yIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKKwkvKgorCSAqIHdlIGNoZWNrIGZvciBOVUxMIGhlcmUsIGJlY2F1c2UgaXQncyBvdXRzaWRlCisJICogdGhlIGtyZWdiYXNlIGNoZWNrLCBhbmQgd2UgbmVlZCB0byBjYWxsIGl0CisJICogYWZ0ZXIgdGhlIGZyZWVfaXJxLglUaHVzIGl0J3MgcG9zc2libGUgdGhhdAorCSAqIHRoZSBmdW5jdGlvbiBwb2ludGVycyB3ZXJlIG5ldmVyIGluaXRpYWxpemVkLgorCSAqLworCWlmIChkZC0+aXBhdGhfZl9jbGVhbnVwKQorCQkvKiBjbGVhbiB1cCBjaGlwLXNwZWNpZmljIHN0dWZmICovCisJCWRkLT5pcGF0aF9mX2NsZWFudXAoZGQpOworCisJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5tYXBwaW5nIGtyZWdiYXNlICVwXG4iLCBkZC0+aXBhdGhfa3JlZ2Jhc2UpOworCWlvdW5tYXAoKHZvbGF0aWxlIHZvaWQgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UpOwogCXBjaV9yZWxlYXNlX3JlZ2lvbnMocGRldik7CiAJaXBhdGhfY2RiZyhWRVJCT1NFLCAiY2FsbGluZyBwY2lfZGlzYWJsZV9kZXZpY2VcbiIpOwogCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKQEAgLTc2MCw4ICs4NjgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkICppcGF0aF9nZXRfZWdyYnVmKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTMyIGJ1Zm51bSwKIAkJCQkgICAgIGludCBlcnIpCiB7Ci0JcmV0dXJuIGRkLT5pcGF0aF9wb3J0MF9za2JzID8KLQkJKHZvaWQgKilkZC0+aXBhdGhfcG9ydDBfc2tic1tidWZudW1dLT5kYXRhIDogTlVMTDsKKwlyZXR1cm4gZGQtPmlwYXRoX3BvcnQwX3NrYmluZm8gPworCQkodm9pZCAqKSBkZC0+aXBhdGhfcG9ydDBfc2tiaW5mb1tidWZudW1dLnNrYi0+ZGF0YSA6IE5VTEw7CiB9CiAKIC8qKgpAQCAtNzgzLDMxICs4OTEsMzQgQEAKIAkgKi8KIAogCS8qCi0JICogV2UgbmVlZCA0IGV4dHJhIGJ5dGVzIGZvciB1bmFsaWduZWQgdHJhbnNmZXIgY29weWluZworCSAqIFdlIG5lZWQgMiBleHRyYSBieXRlcyBmb3IgaXBhdGhfZXRoZXIgZGF0YSBzZW50IGluIHRoZQorCSAqIGtleSBoZWFkZXIuICBJbiBvcmRlciB0byBrZWVwIGV2ZXJ5dGhpbmcgZHdvcmQgYWxpZ25lZCwKKwkgKiB3ZSdsbCByZXNlcnZlIDQgYnl0ZXMuCiAJICovCisJbGVuID0gZGQtPmlwYXRoX2libWF4bGVuICsgNDsKKwogCWlmIChkZC0+aXBhdGhfZmxhZ3MgJiBJUEFUSF80QllURV9USUQpIHsKLQkJLyogd2UgbmVlZCBhIDRLQiBtdWx0aXBsZSBhbGlnbm1lbnQsIGFuZCB0aGVyZSBpcyBubyB3YXkKKwkJLyogV2UgbmVlZCBhIDJLQiBtdWx0aXBsZSBhbGlnbm1lbnQsIGFuZCB0aGVyZSBpcyBubyB3YXkKIAkJICogdG8gZG8gaXQgZXhjZXB0IHRvIGFsbG9jYXRlIGV4dHJhIGFuZCB0aGVuIHNrYl9yZXNlcnZlCiAJCSAqIGVub3VnaCB0byBicmluZyBpdCB1cCB0byB0aGUgcmlnaHQgYWxpZ25tZW50LgogCQkgKi8KLQkJbGVuID0gZGQtPmlwYXRoX2libWF4bGVuICsgNCArICgxIDw8IDExKSAtIDE7CisJCWxlbiArPSAyMDQ3OwogCX0KLQllbHNlCi0JCWxlbiA9IGRkLT5pcGF0aF9pYm1heGxlbiArIDQ7CisKIAlza2IgPSBfX2Rldl9hbGxvY19za2IobGVuLCBnZnBfbWFzayk7CiAJaWYgKCFza2IpIHsKIAkJaXBhdGhfZGV2X2VycihkZCwgIkZhaWxlZCB0byBhbGxvY2F0ZSBza2J1ZmYsIGxlbmd0aCAldVxuIiwKIAkJCSAgICAgIGxlbik7CiAJCWdvdG8gYmFpbDsKIAl9CisKKwlza2JfcmVzZXJ2ZShza2IsIDQpOworCiAJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIXzRCWVRFX1RJRCkgewotCQl1MzIgdW5hID0gKCgxIDw8IDExKSAtIDEpICYgKHVuc2lnbmVkIGxvbmcpKHNrYi0+ZGF0YSArIDQpOworCQl1MzIgdW5hID0gKHVuc2lnbmVkIGxvbmcpc2tiLT5kYXRhICYgMjA0NzsKIAkJaWYgKHVuYSkKLQkJCXNrYl9yZXNlcnZlKHNrYiwgNCArICgxIDw8IDExKSAtIHVuYSk7Ci0JCWVsc2UKLQkJCXNrYl9yZXNlcnZlKHNrYiwgNCk7Ci0JfSBlbHNlCi0JCXNrYl9yZXNlcnZlKHNrYiwgNCk7CisJCQlza2JfcmVzZXJ2ZShza2IsIDIwNDggLSB1bmEpOworCX0KIAogYmFpbDoKIAlyZXR1cm4gc2tiOwpAQCAtMTMyNiw2ICsxNDM3LDkgQEAKIAkJCQkgICAgICAiZm9yIHBvcnQgJXUgcmN2aGRycXRhaWxhZGRyIGZhaWxlZFxuIiwKIAkJCQkgICAgICBwZC0+cG9ydF9wb3J0KTsKIAkJCXJldCA9IC1FTk9NRU07CisJCQlkbWFfZnJlZV9jb2hlcmVudCgmZGQtPnBjaWRldi0+ZGV2LCBhbXQsCisJCQkJCSAgcGQtPnBvcnRfcmN2aGRycSwgcGQtPnBvcnRfcmN2aGRycV9waHlzKTsKKwkJCXBkLT5wb3J0X3JjdmhkcnEgPSBOVUxMOwogCQkJZ290byBiYWlsOwogCQl9CiAJCXBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzID0gcGh5c19oZHJxdGFpbDsKQEAgLTEzNDcsMTIgKzE0NjEsMTMgQEAKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLCAicmV1c2UgcG9ydCAlZCByY3ZoZHJxIEAlcCAlbGx4IHBoeXM7ICIKIAkJCSAgICJoZHJ0YWlsYWRkckAlcCAlbGx4IHBoeXNpY2FsXG4iLAogCQkJICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcmN2aGRycSwKLQkJCSAgIHBkLT5wb3J0X3JjdmhkcnFfcGh5cywgcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIsCi0JCQkgICAodW5zaWduZWQgbG9uZyBsb25nKXBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzKTsKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBkLT5wb3J0X3JjdmhkcnFfcGh5cywKKwkJCSAgIHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyLCAodW5zaWduZWQgbG9uZyBsb25nKQorCQkJICAgcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXMpOwogCiAJLyogY2xlYXIgZm9yIHNlY3VyaXR5IGFuZCBzYW5pdHkgb24gZWFjaCB1c2UgKi8KIAltZW1zZXQocGQtPnBvcnRfcmN2aGRycSwgMCwgcGQtPnBvcnRfcmN2aGRycV9zaXplKTsKLQltZW1zZXQoKHZvaWQgKilwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciwgMCwgUEFHRV9TSVpFKTsKKwltZW1zZXQocGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIsIDAsIFBBR0VfU0laRSk7CiAKIAkvKgogCSAqIHRlbGwgY2hpcCBlYWNoIHRpbWUgd2UgaW5pdCBpdCwgZXZlbiBpZiB3ZSBhcmUgcmUtdXNpbmcgcHJldmlvdXMKQEAgLTE4MDUsNyArMTkyMCw3IEBACiAJCXBkLT5wb3J0X3JjdmhkcnEgPSBOVUxMOwogCQlpZiAocGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIpIHsKIAkJCWRtYV9mcmVlX2NvaGVyZW50KCZkZC0+cGNpZGV2LT5kZXYsIFBBR0VfU0laRSwKLQkJCQkJICh2b2lkICopcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIsCisJCQkJCSBwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciwKIAkJCQkJIHBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzKTsKIAkJCXBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0gTlVMTDsKIAkJfQpAQCAtMTgyNCwyNCArMTkzOSwzMiBAQAogCQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgc2l6ZSwKIAkJCQliYXNlLCBwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1tlXSk7CiAJCX0KLQkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmKTsKKwkJa2ZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmKTsKIAkJcGQtPnBvcnRfcmN2ZWdyYnVmID0gTlVMTDsKLQkJdmZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOworCQlrZnJlZShwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyk7CiAJCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzID0gTlVMTDsKIAkJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyA9IDA7Ci0JfSBlbHNlIGlmIChwZC0+cG9ydF9wb3J0ID09IDAgJiYgZGQtPmlwYXRoX3BvcnQwX3NrYnMpIHsKKwl9IGVsc2UgaWYgKHBkLT5wb3J0X3BvcnQgPT0gMCAmJiBkZC0+aXBhdGhfcG9ydDBfc2tiaW5mbykgewogCQl1bnNpZ25lZCBlOwotCQlzdHJ1Y3Qgc2tfYnVmZiAqKnNrYnMgPSBkZC0+aXBhdGhfcG9ydDBfc2ticzsKKwkJc3RydWN0IGlwYXRoX3NrYmluZm8gKnNrYmluZm8gPSBkZC0+aXBhdGhfcG9ydDBfc2tiaW5mbzsKIAotCQlkZC0+aXBhdGhfcG9ydDBfc2ticyA9IE5VTEw7Ci0JCWlwYXRoX2NkYmcoVkVSQk9TRSwgImZyZWUgY2xvc2VkIHBvcnQgJWQgaXBhdGhfcG9ydDBfc2ticyAiCi0JCQkgICAiQCAlcFxuIiwgcGQtPnBvcnRfcG9ydCwgc2ticyk7CisJCWRkLT5pcGF0aF9wb3J0MF9za2JpbmZvID0gTlVMTDsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiZnJlZSBjbG9zZWQgcG9ydCAlZCAiCisJCQkgICAiaXBhdGhfcG9ydDBfc2tiaW5mbyBAICVwXG4iLCBwZC0+cG9ydF9wb3J0LAorCQkJICAgc2tiaW5mbyk7CiAJCWZvciAoZSA9IDA7IGUgPCBkZC0+aXBhdGhfcmN2ZWdyY250OyBlKyspCi0JCQlpZiAoc2tic1tlXSkKLQkJCQlkZXZfa2ZyZWVfc2tiKHNrYnNbZV0pOwotCQl2ZnJlZShza2JzKTsKKwkJaWYgKHNrYmluZm9bZV0uc2tiKSB7CisJCQlwY2lfdW5tYXBfc2luZ2xlKGRkLT5wY2lkZXYsIHNrYmluZm9bZV0ucGh5cywKKwkJCQkJIGRkLT5pcGF0aF9pYm1heGxlbiwKKwkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQlkZXZfa2ZyZWVfc2tiKHNrYmluZm9bZV0uc2tiKTsKKwkJfQorCQl2ZnJlZShza2JpbmZvKTsKIAl9CiAJa2ZyZWUocGQtPnBvcnRfdGlkX3BnX2xpc3QpOworCXZmcmVlKHBkLT5zdWJwb3J0X3VyZWdiYXNlKTsKKwl2ZnJlZShwZC0+c3VicG9ydF9yY3ZlZ3JidWYpOworCXZmcmVlKHBkLT5zdWJwb3J0X3Jjdmhkcl9iYXNlKTsKIAlrZnJlZShwZCk7CiB9CiAKQEAgLTE5MDcsMTUwICsyMDMwLDEyIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW51cF9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQotewotCWludCBwb3J0OwotCi0JaXBhdGhfc2h1dGRvd25fZGV2aWNlKGRkKTsKLQotCWlmICgqZGQtPmlwYXRoX3N0YXR1c3AgJiBJUEFUSF9TVEFUVVNfQ0hJUF9QUkVTRU5UKSB7Ci0JCS8qIGNhbid0IGRvIGFueXRoaW5nIG1vcmUgd2l0aCBjaGlwOyBuZWVkcyByZS1pbml0ICovCi0JCSpkZC0+aXBhdGhfc3RhdHVzcCAmPSB+SVBBVEhfU1RBVFVTX0NISVBfUFJFU0VOVDsKLQkJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkgewotCQkJLyoKLQkJCSAqIGlmIHdlIGhhdmVuJ3QgYWxyZWFkeSBjbGVhbmVkIHVwIGJlZm9yZSB0aGVzZSBhcmUKLQkJCSAqIHRvIGVuc3VyZSBhbnkgcmVnaXN0ZXIgcmVhZHMvd3JpdGVzICJmYWlsIiB1bnRpbAotCQkJICogcmUtaW5pdAotCQkJICovCi0JCQlkZC0+aXBhdGhfa3JlZ2Jhc2UgPSBOVUxMOwotCQkJZGQtPmlwYXRoX3VyZWdiYXNlID0gMDsKLQkJCWRkLT5pcGF0aF9zcmVnYmFzZSA9IDA7Ci0JCQlkZC0+aXBhdGhfY3JlZ2Jhc2UgPSAwOwotCQkJZGQtPmlwYXRoX2tyZWdzaXplID0gMDsKLQkJfQotCQlpcGF0aF9kaXNhYmxlX3djKGRkKTsKLQl9Ci0KLQlpZiAoZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEpIHsKLQkJZG1hX2ZyZWVfY29oZXJlbnQoJmRkLT5wY2lkZXYtPmRldiwgUEFHRV9TSVpFLAotCQkJCSAgKHZvaWQgKikgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEsCi0JCQkJICBkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX3BoeXMpOwotCQlkZC0+aXBhdGhfcGlvYXZhaWxyZWdzX2RtYSA9IE5VTEw7Ci0JfQotCWlmIChkZC0+aXBhdGhfZHVtbXlfaGRycSkgewotCQlkbWFfZnJlZV9jb2hlcmVudCgmZGQtPnBjaWRldi0+ZGV2LAotCQkJZGQtPmlwYXRoX3BkWzBdLT5wb3J0X3JjdmhkcnFfc2l6ZSwKLQkJCWRkLT5pcGF0aF9kdW1teV9oZHJxLCBkZC0+aXBhdGhfZHVtbXlfaGRycV9waHlzKTsKLQkJZGQtPmlwYXRoX2R1bW15X2hkcnEgPSBOVUxMOwotCX0KLQotCWlmIChkZC0+aXBhdGhfcGFnZXNoYWRvdykgewotCQlzdHJ1Y3QgcGFnZSAqKnRtcHAgPSBkZC0+aXBhdGhfcGFnZXNoYWRvdzsKLQkJaW50IGksIGNudCA9IDA7Ci0KLQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVW5sb2NraW5nIGFueSBleHBUSUQgcGFnZXMgc3RpbGwgIgotCQkJICAgImxvY2tlZFxuIik7Ci0JCWZvciAocG9ydCA9IDA7IHBvcnQgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IHBvcnQrKykgewotCQkJaW50IHBvcnRfdGlkYmFzZSA9IHBvcnQgKiBkZC0+aXBhdGhfcmN2dGlkY250OwotCQkJaW50IG1heHRpZCA9IHBvcnRfdGlkYmFzZSArIGRkLT5pcGF0aF9yY3Z0aWRjbnQ7Ci0JCQlmb3IgKGkgPSBwb3J0X3RpZGJhc2U7IGkgPCBtYXh0aWQ7IGkrKykgewotCQkJCWlmICghdG1wcFtpXSkKLQkJCQkJY29udGludWU7Ci0JCQkJaXBhdGhfcmVsZWFzZV91c2VyX3BhZ2VzKCZ0bXBwW2ldLCAxKTsKLQkJCQl0bXBwW2ldID0gTlVMTDsKLQkJCQljbnQrKzsKLQkJCX0KLQkJfQotCQlpZiAoY250KSB7Ci0JCQlpcGF0aF9zdGF0cy5zcHNfcGFnZXVubG9ja3MgKz0gY250OwotCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVGhlcmUgd2VyZSBzdGlsbCAldSBleHBUSUQgIgotCQkJCSAgICJlbnRyaWVzIGxvY2tlZFxuIiwgY250KTsKLQkJfQotCQlpZiAoaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcyB8fAotCQkgICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2V1bmxvY2tzKQotCQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJWxsdSBwYWdlcyBsb2NrZWQsICVsbHUgIgotCQkJCSAgICJ1bmxvY2tlZCB2aWEgaXBhdGhfbXt1bn1sb2NrXG4iLAotCQkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJICAgaXBhdGhfc3RhdHMuc3BzX3BhZ2Vsb2NrcywKLQkJCQkgICAodW5zaWduZWQgbG9uZyBsb25nKQotCQkJCSAgIGlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2Nrcyk7Ci0KLQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiRnJlZSBzaGFkb3cgcGFnZSB0aWQgYXJyYXkgYXQgJXBcbiIsCi0JCQkgICBkZC0+aXBhdGhfcGFnZXNoYWRvdyk7Ci0JCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKLQkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOwotCX0KLQotCS8qCi0JICogZnJlZSBhbnkgcmVzb3VyY2VzIHN0aWxsIGluIHVzZSAodXN1YWxseSBqdXN0IGtlcm5lbCBwb3J0cykKLQkgKiBhdCB1bmxvYWQ7IHdlIGRvIGZvciBwb3J0Y250LCBub3QgY2ZncG9ydHMsIGJlY2F1c2UgY2ZncG9ydHMKLQkgKiBjb3VsZCBoYXZlIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBsb2FkZWQuCi0JICovCi0JZm9yIChwb3J0ID0gMDsgcG9ydCA8IGRkLT5pcGF0aF9wb3J0Y250OyBwb3J0KyspIHsKLQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCA9IGRkLT5pcGF0aF9wZFtwb3J0XTsKLQkJZGQtPmlwYXRoX3BkW3BvcnRdID0gTlVMTDsKLQkJaXBhdGhfZnJlZV9wZGRhdGEoZGQsIHBkKTsKLQl9Ci0Ja2ZyZWUoZGQtPmlwYXRoX3BkKTsKLQkvKgotCSAqIGRlYnVnZ2FiaWxpdHksIGluIGNhc2Ugc29tZSBjbGVhbnVwIHBhdGggdHJpZXMgdG8gdXNlIGl0Ci0JICogYWZ0ZXIgdGhpcwotCSAqLwotCWRkLT5pcGF0aF9wZCA9IE5VTEw7Ci19Ci0KIHN0YXRpYyB2b2lkIF9fZXhpdCBpbmZpbmlwYXRoX2NsZWFudXAodm9pZCkKIHsKLQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsICp0bXA7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWlwYXRoX2RpYWdwa3RfcmVtb3ZlKCk7Ci0KIAlpcGF0aF9leGl0X2lwYXRoZnMoKTsKIAogCWlwYXRoX2RyaXZlcl9yZW1vdmVfZ3JvdXAoJmlwYXRoX2RyaXZlci5kcml2ZXIpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlwYXRoX2RldnNfbG9jaywgZmxhZ3MpOwotCi0JLyoKLQkgKiB0dXJuIG9mZiByY3YsIHNlbmQsIGFuZCBpbnRlcnJ1cHRzIGZvciBhbGwgcG9ydHMsIGFsbCBkcml2ZXJzCi0JICogc2hvdWxkIGFsc28gaGFyZCByZXNldCB0aGUgY2hpcCBoZXJlPwotCSAqIGZyZWUgdXAgcG9ydCAwIChrZXJuZWwpIHJjdmhkciwgZWdyIGJ1ZnMsIGFuZCBldmVudHVhbGx5IHRpZCBidWZzCi0JICogZm9yIGFsbCB2ZXJzaW9ucyBvZiB0aGUgZHJpdmVyLCBpZiB0aGV5IHdlcmUgYWxsb2NhdGVkCi0JICovCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRkLCB0bXAsICZpcGF0aF9kZXZfbGlzdCwgaXBhdGhfbGlzdCkgewotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcGF0aF9kZXZzX2xvY2ssIGZsYWdzKTsKLQotCQlpZiAoZGQtPmlwYXRoX2tyZWdiYXNlKQotCQkJY2xlYW51cF9kZXZpY2UoZGQpOwotCi0JCWlmIChkZC0+cGNpZGV2KSB7Ci0JCQlpZiAoZGQtPnBjaWRldi0+aXJxKSB7Ci0JCQkJaXBhdGhfY2RiZyhWRVJCT1NFLAotCQkJCQkgICAidW5pdCAldSBmcmVlX2lycSBvZiBpcnEgJXhcbiIsCi0JCQkJCSAgIGRkLT5pcGF0aF91bml0LCBkZC0+cGNpZGV2LT5pcnEpOwotCQkJCWZyZWVfaXJxKGRkLT5wY2lkZXYtPmlycSwgZGQpOwotCQkJfSBlbHNlCi0JCQkJaXBhdGhfZGJnKCJpcnEgaXMgMCwgbm90IGRvaW5nIGZyZWVfaXJxICIKLQkJCQkJICAiZm9yIHVuaXQgJXVcbiIsIGRkLT5pcGF0aF91bml0KTsKLQotCQkJLyoKLQkJCSAqIHdlIGNoZWNrIGZvciBOVUxMIGhlcmUsIGJlY2F1c2UgaXQncyBvdXRzaWRlCi0JCQkgKiB0aGUga3JlZ2Jhc2UgY2hlY2ssIGFuZCB3ZSBuZWVkIHRvIGNhbGwgaXQKLQkJCSAqIGFmdGVyIHRoZSBmcmVlX2lycS4gIFRodXMgaXQncyBwb3NzaWJsZSB0aGF0Ci0JCQkgKiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgd2VyZSBuZXZlciBpbml0aWFsaXplZC4KLQkJCSAqLwotCQkJaWYgKGRkLT5pcGF0aF9mX2NsZWFudXApCi0JCQkJLyogY2xlYW4gdXAgY2hpcC1zcGVjaWZpYyBzdHVmZiAqLwotCQkJCWRkLT5pcGF0aF9mX2NsZWFudXAoZGQpOwotCi0JCQlkZC0+cGNpZGV2ID0gTlVMTDsKLQkJfQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7Ci0JfQotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXBhdGhfZGV2c19sb2NrLCBmbGFncyk7Ci0KIAlpcGF0aF9jZGJnKFZFUkJPU0UsICJVbnJlZ2lzdGVyaW5nIHBjaSBkcml2ZXJcbiIpOwogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmaXBhdGhfZHJpdmVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2VlcHJvbS5jCmluZGV4IDMzMTMzNTYuLmE0MDE5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9lZXByb20uYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZWVwcm9tLmMKQEAgLTEwMCw5ICsxMDAsOSBAQAogCWdwaW92YWwgPSAmZGQtPmlwYXRoX2dwaW9fb3V0OwogCXJlYWRfdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0Y3RybCk7CiAJaWYgKGxpbmUgPT0gaTJjX2xpbmVfc2NsKQotCQltYXNrID0gaXBhdGhfZ3Bpb19zY2w7CisJCW1hc2sgPSBkZC0+aXBhdGhfZ3Bpb19zY2w7CiAJZWxzZQotCQltYXNrID0gaXBhdGhfZ3Bpb19zZGE7CisJCW1hc2sgPSBkZC0+aXBhdGhfZ3Bpb19zZGE7CiAKIAlpZiAobmV3X2xpbmVfc3RhdGUgPT0gaTJjX2xpbmVfaGlnaCkKIAkJLyogdHJpLXN0YXRlIHRoZSBvdXRwdXQgcmF0aGVyIHRoYW4gZm9yY2UgaGlnaCAqLwpAQCAtMTE5LDEyICsxMTksMTIgQEAKIAkJd3JpdGVfdmFsID0gMHgwVUw7CiAKIAlpZiAobGluZSA9PSBpMmNfbGluZV9zY2wpIHsKLQkJd3JpdGVfdmFsIDw8PSBpcGF0aF9ncGlvX3NjbF9udW07Ci0JCSpncGlvdmFsID0gKmdwaW92YWwgJiB+KDFVTCA8PCBpcGF0aF9ncGlvX3NjbF9udW0pOworCQl3cml0ZV92YWwgPDw9IGRkLT5pcGF0aF9ncGlvX3NjbF9udW07CisJCSpncGlvdmFsID0gKmdwaW92YWwgJiB+KDFVTCA8PCBkZC0+aXBhdGhfZ3Bpb19zY2xfbnVtKTsKIAkJKmdwaW92YWwgfD0gd3JpdGVfdmFsOwogCX0gZWxzZSB7Ci0JCXdyaXRlX3ZhbCA8PD0gaXBhdGhfZ3Bpb19zZGFfbnVtOwotCQkqZ3Bpb3ZhbCA9ICpncGlvdmFsICYgfigxVUwgPDwgaXBhdGhfZ3Bpb19zZGFfbnVtKTsKKwkJd3JpdGVfdmFsIDw8PSBkZC0+aXBhdGhfZ3Bpb19zZGFfbnVtOworCQkqZ3Bpb3ZhbCA9ICpncGlvdmFsICYgfigxVUwgPDwgZGQtPmlwYXRoX2dwaW9fc2RhX251bSk7CiAJCSpncGlvdmFsIHw9IHdyaXRlX3ZhbDsKIAl9CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX291dCwgKmdwaW92YWwpOwpAQCAtMTU3LDkgKzE1Nyw5IEBACiAJcmVhZF92YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsKTsKIAkvKiBjb25maWcgbGluZSB0byBiZSBhbiBpbnB1dCAqLwogCWlmIChsaW5lID09IGkyY19saW5lX3NjbCkKLQkJbWFzayA9IGlwYXRoX2dwaW9fc2NsOworCQltYXNrID0gZGQtPmlwYXRoX2dwaW9fc2NsOwogCWVsc2UKLQkJbWFzayA9IGlwYXRoX2dwaW9fc2RhOworCQltYXNrID0gZGQtPmlwYXRoX2dwaW9fc2RhOwogCXdyaXRlX3ZhbCA9IHJlYWRfdmFsICYgfm1hc2s7CiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9leHRjdHJsLCB3cml0ZV92YWwpOwogCXJlYWRfdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZXh0c3RhdHVzKTsKQEAgLTE4Nyw2ICsxODcsNyBAQAogc3RhdGljIHZvaWQgaTJjX3dhaXRfZm9yX3dyaXRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7CiAJKHZvaWQpaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2NyYXRjaCk7CisJcm1iKCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjbF9vdXQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCB1OCBiaXQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZmlsZV9vcHMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCmluZGV4IDI5OTMwZTIuLmE5ZGRjNjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9maWxlX29wcy5jCkBAIC00MSw2ICs0MSwxMiBAQAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgogCisvKgorICogbW1hcDY0IGRvZXNuJ3QgYWxsb3cgYWxsIDY0IGJpdHMgZm9yIDMyLWJpdCBhcHBsaWNhdGlvbnMKKyAqIHNvIG9ubHkgdXNlIHRoZSBsb3cgNDMgYml0cy4KKyAqLworI2RlZmluZSBNTUFQNjRfTUFTSwkweDdGRkZGRkZGRkZGVUwKKwogc3RhdGljIGludCBpcGF0aF9vcGVuKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKIHN0YXRpYyBpbnQgaXBhdGhfY2xvc2Uoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwogc3RhdGljIHNzaXplX3QgaXBhdGhfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LApAQCAtNTcsMTggKzYzLDM1IEBACiAJLm1tYXAgPSBpcGF0aF9tbWFwCiB9OwogCi1zdGF0aWMgaW50IGlwYXRoX2dldF9iYXNlX2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKK3N0YXRpYyBpbnQgaXBhdGhfZ2V0X2Jhc2VfaW5mbyhzdHJ1Y3QgZmlsZSAqZnAsCiAJCQkgICAgICAgdm9pZCBfX3VzZXIgKnViYXNlLCBzaXplX3QgdWJhc2Vfc2l6ZSkKIHsKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gcG9ydF9mcChmcCk7CiAJaW50IHJldCA9IDA7CiAJc3RydWN0IGlwYXRoX2Jhc2VfaW5mbyAqa2luZm8gPSBOVUxMOwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXVuc2lnbmVkIHN1YnBvcnRfY250OworCWludCBzaGFyZWQsIG1hc3RlcjsKKwlzaXplX3Qgc3o7CiAKLQlpZiAodWJhc2Vfc2l6ZSA8IHNpemVvZigqa2luZm8pKSB7CisJc3VicG9ydF9jbnQgPSBwZC0+cG9ydF9zdWJwb3J0X2NudDsKKwlpZiAoIXN1YnBvcnRfY250KSB7CisJCXNoYXJlZCA9IDA7CisJCW1hc3RlciA9IDA7CisJCXN1YnBvcnRfY250ID0gMTsKKwl9IGVsc2UgeworCQlzaGFyZWQgPSAxOworCQltYXN0ZXIgPSAhc3VicG9ydF9mcChmcCk7CisJfQorCisJc3ogPSBzaXplb2YoKmtpbmZvKTsKKwkvKiBJZiBwb3J0IHNoYXJpbmcgaXMgbm90IHJlcXVlc3RlZCwgYWxsb3cgdGhlIG9sZCBzaXplIHN0cnVjdHVyZSAqLworCWlmICghc2hhcmVkKQorCQlzeiAtPSAzICogc2l6ZW9mKHU2NCk7CisJaWYgKHViYXNlX3NpemUgPCBzeikgewogCQlpcGF0aF9jZGJnKFBST0MsCi0JCQkgICAiQmFzZSBzaXplICVsdSwgbmVlZCAlbHUgKHZlcnNpb24gbWlzbWF0Y2g/KVxuIiwKLQkJCSAgICh1bnNpZ25lZCBsb25nKSB1YmFzZV9zaXplLAotCQkJICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZigqa2luZm8pKTsKKwkJCSAgICJCYXNlIHNpemUgJXp1LCBuZWVkICV6dSAodmVyc2lvbiBtaXNtYXRjaD8pXG4iLAorCQkJICAgdWJhc2Vfc2l6ZSwgc3opOwogCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtOTUsNyArMTE4LDkgQEAKIAlraW5mby0+c3BpX3Jjdl9lZ3JwZXJjaHVuayA9IHBkLT5wb3J0X3JjdmVncmJ1ZnNfcGVyY2h1bms7CiAJa2luZm8tPnNwaV9yY3ZfZWdyY2h1bmtzaXplID0ga2luZm8tPnNwaV9yY3ZfZWdyYnVmdG90bGVuIC8KIAkJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rczsKLQlraW5mby0+c3BpX3RpZGNudCA9IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJa2luZm8tPnNwaV90aWRjbnQgPSBkZC0+aXBhdGhfcmN2dGlkY250IC8gc3VicG9ydF9jbnQ7CisJaWYgKG1hc3RlcikKKwkJa2luZm8tPnNwaV90aWRjbnQgKz0gZGQtPmlwYXRoX3JjdnRpZGNudCAlIHN1YnBvcnRfY250OwogCS8qCiAJICogZm9yIHRoaXMgdXNlLCBtYXkgYmUgaXBhdGhfY2ZncG9ydHMgc3VtbWVkIG92ZXIgYWxsIGNoaXBzIHRoYXQKIAkgKiBhcmUgYXJlIGNvbmZpZ3VyZWQgYW5kIHByZXNlbnQKQEAgLTExOCwzMSArMTQzLDc1IEBACiAJICogcGFnZV9hZGRyZXNzKCkgbWFjcm8gd29ya2VkLCBidXQgaW4gMi42LjExLCBldmVuIHRoYXQgcmV0dXJucyB0aGUKIAkgKiBmdWxsIDY0IGJpdCBhZGRyZXNzICh1cHBlciBiaXRzIGFsbCAxJ3MpLiAgU28gZmFyLCB1c2luZyB0aGUKIAkgKiBwaHlzaWNhbCBhZGRyZXNzZXMgKG9yIGNoaXAgb2Zmc2V0cywgZm9yIGNoaXAgbWFwcGluZykgd29ya3MsIGJ1dAotCSAqIG5vIGRvdWJ0IHNvbWUgZnV0dXJlIGtlcm5lbCByZWxlYXNlIHdpbGwgY2hhbmcgdGhhdCwgYW5kIHdlJ2xsIGJlCi0JICogb24gdG8geWV0IGFub3RoZXIgbWV0aG9kIG9mIGRlYWxpbmcgd2l0aCB0aGlzCisJICogbm8gZG91YnQgc29tZSBmdXR1cmUga2VybmVsIHJlbGVhc2Ugd2lsbCBjaGFuZ2UgdGhhdCwgYW5kIHdlJ2xsIGJlCisJICogb24gdG8geWV0IGFub3RoZXIgbWV0aG9kIG9mIGRlYWxpbmcgd2l0aCB0aGlzLgogCSAqLwogCWtpbmZvLT5zcGlfcmN2aGRyX2Jhc2UgPSAodTY0KSBwZC0+cG9ydF9yY3ZoZHJxX3BoeXM7Ci0Ja2luZm8tPnNwaV9yY3ZoZHJfdGFpbGFkZHIgPSAodTY0KXBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzOworCWtpbmZvLT5zcGlfcmN2aGRyX3RhaWxhZGRyID0gKHU2NCkgcGQtPnBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXM7CiAJa2luZm8tPnNwaV9yY3ZfZWdyYnVmcyA9ICh1NjQpIHBkLT5wb3J0X3JjdmVncl9waHlzOwogCWtpbmZvLT5zcGlfcGlvYXZhaWxhZGRyID0gKHU2NCkgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzOwogCWtpbmZvLT5zcGlfc3RhdHVzID0gKHU2NCkga2luZm8tPnNwaV9waW9hdmFpbGFkZHIgKwogCQkodm9pZCAqKSBkZC0+aXBhdGhfc3RhdHVzcCAtCiAJCSh2b2lkICopIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfZG1hOwotCWtpbmZvLT5zcGlfcGlvYnVmYmFzZSA9ICh1NjQpIHBkLT5wb3J0X3Bpb2J1ZnM7Ci0Ja2luZm8tPl9fc3BpX3VyZWdiYXNlID0KLQkJZGQtPmlwYXRoX3VyZWdiYXNlICsgZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7CisJaWYgKCFzaGFyZWQpIHsKKwkJa2luZm8tPnNwaV9waW9jbnQgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0OworCQlraW5mby0+c3BpX3Bpb2J1ZmJhc2UgPSAodTY0KSBwZC0+cG9ydF9waW9idWZzOworCQlraW5mby0+X19zcGlfdXJlZ2Jhc2UgPSAodTY0KSBkZC0+aXBhdGhfdXJlZ2Jhc2UgKworCQkJZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7CisJfSBlbHNlIGlmIChtYXN0ZXIpIHsKKwkJa2luZm8tPnNwaV9waW9jbnQgPSAoZGQtPmlwYXRoX3BidWZzcG9ydCAvIHN1YnBvcnRfY250KSArCisJCQkJICAgIChkZC0+aXBhdGhfcGJ1ZnNwb3J0ICUgc3VicG9ydF9jbnQpOworCQkvKiBNYXN0ZXIncyBQSU8gYnVmZmVycyBhcmUgYWZ0ZXIgYWxsIHRoZSBzbGF2ZSdzICovCisJCWtpbmZvLT5zcGlfcGlvYnVmYmFzZSA9ICh1NjQpIHBkLT5wb3J0X3Bpb2J1ZnMgKworCQkJZGQtPmlwYXRoX3BhbGlnbiAqCisJCQkoZGQtPmlwYXRoX3BidWZzcG9ydCAtIGtpbmZvLT5zcGlfcGlvY250KTsKKwkJa2luZm8tPl9fc3BpX3VyZWdiYXNlID0gKHU2NCkgZGQtPmlwYXRoX3VyZWdiYXNlICsKKwkJCWRkLT5pcGF0aF9wYWxpZ24gKiBwZC0+cG9ydF9wb3J0OworCX0gZWxzZSB7CisJCXVuc2lnbmVkIHNsYXZlID0gc3VicG9ydF9mcChmcCkgLSAxOwogCi0Ja2luZm8tPnNwaV9waW9pbmRleCA9IGRkLT5pcGF0aF9wYnVmc3BvcnQgKiAocGQtPnBvcnRfcG9ydCAtIDEpOwotCWtpbmZvLT5zcGlfcGlvY250ID0gZGQtPmlwYXRoX3BidWZzcG9ydDsKKwkJa2luZm8tPnNwaV9waW9jbnQgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0IC8gc3VicG9ydF9jbnQ7CisJCWtpbmZvLT5zcGlfcGlvYnVmYmFzZSA9ICh1NjQpIHBkLT5wb3J0X3Bpb2J1ZnMgKworCQkJZGQtPmlwYXRoX3BhbGlnbiAqIGtpbmZvLT5zcGlfcGlvY250ICogc2xhdmU7CisJCWtpbmZvLT5fX3NwaV91cmVnYmFzZSA9ICgodTY0KSBwZC0+c3VicG9ydF91cmVnYmFzZSArCisJCQlQQUdFX1NJWkUgKiBzbGF2ZSkgJiBNTUFQNjRfTUFTSzsKKworCQlraW5mby0+c3BpX3Jjdmhkcl9iYXNlID0gKCh1NjQpIHBkLT5zdWJwb3J0X3Jjdmhkcl9iYXNlICsKKwkJCXBkLT5wb3J0X3JjdmhkcnFfc2l6ZSAqIHNsYXZlKSAmIE1NQVA2NF9NQVNLOworCQlraW5mby0+c3BpX3Jjdmhkcl90YWlsYWRkciA9CisJCQkodTY0KSBwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cyAmIE1NQVA2NF9NQVNLOworCQlraW5mby0+c3BpX3Jjdl9lZ3JidWZzID0gKCh1NjQpIHBkLT5zdWJwb3J0X3JjdmVncmJ1ZiArCisJCQlkZC0+aXBhdGhfcmN2ZWdyY250ICogZGQtPmlwYXRoX3JjdmVncmJ1ZnNpemUgKiBzbGF2ZSkgJgorCQkJTU1BUDY0X01BU0s7CisJfQorCisJa2luZm8tPnNwaV9waW9pbmRleCA9IChraW5mby0+c3BpX3Bpb2J1ZmJhc2UgLSBkZC0+aXBhdGhfcGlvYnVmYmFzZSkgLworCQlkZC0+aXBhdGhfcGFsaWduOwogCWtpbmZvLT5zcGlfcGlvYWxpZ24gPSBkZC0+aXBhdGhfcGFsaWduOwogCiAJa2luZm8tPnNwaV9xcGFpciA9IElQQVRIX0tEX1FQOwogCWtpbmZvLT5zcGlfcGlvc2l6ZSA9IGRkLT5pcGF0aF9pYm1heGxlbjsKIAlraW5mby0+c3BpX210dSA9IGRkLT5pcGF0aF9pYm1heGxlbjsJLyogbWF4bGVuLCBub3QgaWJtdHUgKi8KIAlraW5mby0+c3BpX3BvcnQgPSBwZC0+cG9ydF9wb3J0OworCWtpbmZvLT5zcGlfc3VicG9ydCA9IHN1YnBvcnRfZnAoZnApOwogCWtpbmZvLT5zcGlfc3dfdmVyc2lvbiA9IElQQVRIX0tFUk5fU1dWRVJTSU9OOwogCWtpbmZvLT5zcGlfaHdfdmVyc2lvbiA9IGRkLT5pcGF0aF9yZXZpc2lvbjsKIAorCWlmIChtYXN0ZXIpIHsKKwkJa2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfTUFTVEVSOworCQlraW5mby0+c3BpX3N1YnBvcnRfdXJlZ2Jhc2UgPQorCQkJKHU2NCkgcGQtPnN1YnBvcnRfdXJlZ2Jhc2UgJiBNTUFQNjRfTUFTSzsKKwkJa2luZm8tPnNwaV9zdWJwb3J0X3JjdmVncmJ1ZiA9CisJCQkodTY0KSBwZC0+c3VicG9ydF9yY3ZlZ3JidWYgJiBNTUFQNjRfTUFTSzsKKwkJa2luZm8tPnNwaV9zdWJwb3J0X3Jjdmhkcl9iYXNlID0KKwkJCSh1NjQpIHBkLT5zdWJwb3J0X3Jjdmhkcl9iYXNlICYgTU1BUDY0X01BU0s7CisJCWlwYXRoX2NkYmcoUFJPQywgInBvcnQgJXUgZmxhZ3MgJXggJWxseCAlbGx4ICVsbHhcbiIsCisJCQlraW5mby0+c3BpX3BvcnQsIGtpbmZvLT5zcGlfcnVudGltZV9mbGFncywKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGtpbmZvLT5zcGlfc3VicG9ydF91cmVnYmFzZSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGtpbmZvLT5zcGlfc3VicG9ydF9yY3ZlZ3JidWYsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKSBraW5mby0+c3BpX3N1YnBvcnRfcmN2aGRyX2Jhc2UpOworCX0KKwogCWlmIChjb3B5X3RvX3VzZXIodWJhc2UsIGtpbmZvLCBzaXplb2YoKmtpbmZvKSkpCiAJCXJldCA9IC1FRkFVTFQ7CiAKQEAgLTE1NCw2ICsyMjMsNyBAQAogLyoqCiAgKiBpcGF0aF90aWRfdXBkYXRlIC0gdXBkYXRlIGEgcG9ydCBUSUQKICAqIEBwZDogdGhlIHBvcnQKKyAqIEBmcDogdGhlIGlwYXRoIGRldmljZSBmaWxlCiAgKiBAdGk6IHRoZSBUSUQgaW5mb3JtYXRpb24KICAqCiAgKiBUaGUgbmV3IGltcGxlbWVudGF0aW9uIGFzIG9mIE9jdCAyMDA0IGlzIHRoYXQgdGhlIGRyaXZlciBhc3NpZ25zCkBAIC0xNzYsMTEgKzI0NiwxMSBAQAogICogdmlydHVhbGx5IGNvbnRpZ3VvdXMgcGFnZXMsIHRoYXQgc2hvdWxkIGNoYW5nZSB0byBpbXByb3ZlCiAgKiBwZXJmb3JtYW5jZS4KICAqLwotc3RhdGljIGludCBpcGF0aF90aWRfdXBkYXRlKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCitzdGF0aWMgaW50IGlwYXRoX3RpZF91cGRhdGUoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgc3RydWN0IGZpbGUgKmZwLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpcGF0aF90aWRfaW5mbyAqdGkpCiB7CiAJaW50IHJldCA9IDAsIG50aWRzOwotCXUzMiB0aWQsIHBvcnR0aWQsIGNudCwgaSwgdGlkY250OworCXUzMiB0aWQsIHBvcnR0aWQsIGNudCwgaSwgdGlkY250LCB0aWRvZmY7CiAJdTE2ICp0aWRsaXN0OwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOwogCXU2NCBwaHlzYWRkcjsKQEAgLTE4OCw2ICsyNTgsNyBAQAogCXU2NCBfX2lvbWVtICp0aWRiYXNlOwogCXVuc2lnbmVkIGxvbmcgdGlkbWFwWzhdOwogCXN0cnVjdCBwYWdlICoqcGFnZXAgPSBOVUxMOworCXVuc2lnbmVkIHN1YnBvcnQgPSBzdWJwb3J0X2ZwKGZwKTsKIAogCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3cpIHsKIAkJcmV0ID0gLUVOT01FTTsKQEAgLTIwNCwyMCArMjc1LDM0IEBACiAJCXJldCA9IC1FRkFVTFQ7CiAJCWdvdG8gZG9uZTsKIAl9Ci0JdGlkY250ID0gZGQtPmlwYXRoX3JjdnRpZGNudDsKLQlpZiAoY250ID49IHRpZGNudCkgeworCXBvcnR0aWQgPSBwZC0+cG9ydF9wb3J0ICogZGQtPmlwYXRoX3JjdnRpZGNudDsKKwlpZiAoIXBkLT5wb3J0X3N1YnBvcnRfY250KSB7CisJCXRpZGNudCA9IGRkLT5pcGF0aF9yY3Z0aWRjbnQ7CisJCXRpZCA9IHBkLT5wb3J0X3RpZGN1cnNvcjsKKwkJdGlkb2ZmID0gMDsKKwl9IGVsc2UgaWYgKCFzdWJwb3J0KSB7CisJCXRpZGNudCA9IChkZC0+aXBhdGhfcmN2dGlkY250IC8gcGQtPnBvcnRfc3VicG9ydF9jbnQpICsKKwkJCSAoZGQtPmlwYXRoX3JjdnRpZGNudCAlIHBkLT5wb3J0X3N1YnBvcnRfY250KTsKKwkJdGlkb2ZmID0gZGQtPmlwYXRoX3JjdnRpZGNudCAtIHRpZGNudDsKKwkJcG9ydHRpZCArPSB0aWRvZmY7CisJCXRpZCA9IHRpZGN1cnNvcl9mcChmcCk7CisJfSBlbHNlIHsKKwkJdGlkY250ID0gZGQtPmlwYXRoX3JjdnRpZGNudCAvIHBkLT5wb3J0X3N1YnBvcnRfY250OworCQl0aWRvZmYgPSB0aWRjbnQgKiAoc3VicG9ydCAtIDEpOworCQlwb3J0dGlkICs9IHRpZG9mZjsKKwkJdGlkID0gdGlkY3Vyc29yX2ZwKGZwKTsKKwl9CisJaWYgKGNudCA+IHRpZGNudCkgewogCQkvKiBtYWtlIHN1cmUgaXQgYWxsIGZpdHMgaW4gcG9ydF90aWRfcGdfbGlzdCAqLwogCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiUHJvY2VzcyB0cmllZCB0byBhbGxvY2F0ZSAldSAiCiAJCQkgIlRJRHMsIG9ubHkgdHJ5aW5nIG1heCAoJXUpXG4iLCBjbnQsIHRpZGNudCk7CiAJCWNudCA9IHRpZGNudDsKIAl9Ci0JcGFnZXAgPSAoc3RydWN0IHBhZ2UgKiopcGQtPnBvcnRfdGlkX3BnX2xpc3Q7Ci0JdGlkbGlzdCA9ICh1MTYgKikgKCZwYWdlcFtjbnRdKTsKKwlwYWdlcCA9ICYoKHN0cnVjdCBwYWdlICoqKSBwZC0+cG9ydF90aWRfcGdfbGlzdClbdGlkb2ZmXTsKKwl0aWRsaXN0ID0gJigodTE2ICopICZwYWdlcFtkZC0+aXBhdGhfcmN2dGlkY250XSlbdGlkb2ZmXTsKIAogCW1lbXNldCh0aWRtYXAsIDAsIHNpemVvZih0aWRtYXApKTsKLQl0aWQgPSBwZC0+cG9ydF90aWRjdXJzb3I7CiAJLyogYmVmb3JlIGRlY3JlbWVudDsgY2hpcCBhY3R1YWwgIyAqLwotCXBvcnR0aWQgPSBwZC0+cG9ydF9wb3J0ICogdGlkY250OwogCW50aWRzID0gdGlkY250OwogCXRpZGJhc2UgPSAodTY0IF9faW9tZW0gKikgKCgoY2hhciBfX2lvbWVtICopIGRkLT5pcGF0aF9rcmVnYmFzZSkgKwogCQkJCSAgIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKQEAgLTI3NCwxNiArMzU5LDE5IEBACiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJYnJlYWs7CiAJCX0KLQkJdGlkbGlzdFtpXSA9IHRpZDsKKwkJdGlkbGlzdFtpXSA9IHRpZCArIHRpZG9mZjsKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiVXBkYXRpbmcgaWR4ICV1IHRvIFRJRCAldSwgIgotCQkJICAgInZhZGRyICVseFxuIiwgaSwgdGlkLCB2YWRkcik7CisJCQkgICAidmFkZHIgJWx4XG4iLCBpLCB0aWQgKyB0aWRvZmYsIHZhZGRyKTsKIAkJLyogd2UgImtub3ciIHN5c3RlbSBwYWdlcyBhbmQgVElEIHBhZ2VzIGFyZSBzYW1lIHNpemUgKi8KIAkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0gPSBwYWdlcFtpXTsKKwkJZGQtPmlwYXRoX3BoeXNzaGFkb3dbcG9ydHRpZCArIHRpZF0gPSBpcGF0aF9tYXBfcGFnZSgKKwkJCWRkLT5wY2lkZXYsIHBhZ2VwW2ldLCAwLCBQQUdFX1NJWkUsCisJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOwogCQkvKgogCQkgKiBkb24ndCBuZWVkIGF0b21pYyBvciBpdCdzIG92ZXJoZWFkCiAJCSAqLwogCQlfX3NldF9iaXQodGlkLCB0aWRtYXApOwotCQlwaHlzYWRkciA9IHBhZ2VfdG9fcGh5cyhwYWdlcFtpXSk7CisJCXBoeXNhZGRyID0gZGQtPmlwYXRoX3BoeXNzaGFkb3dbcG9ydHRpZCArIHRpZF07CiAJCWlwYXRoX3N0YXRzLnNwc19wYWdlbG9ja3MrKzsKIAkJaXBhdGhfY2RiZyhWRVJCT1NFLAogCQkJICAgIlRJRCAldSwgdmFkZHIgJWx4LCBwaHlzYWRkciAlbGx4IHBncCAlcFxuIiwKQEAgLTMxNyw2ICs0MDUsOSBAQAogCQkJCQkgICB0aWQpOwogCQkJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsICZ0aWRiYXNlW3RpZF0sIDEsCiAJCQkJCQkgICAgZGQtPmlwYXRoX3RpZGludmFsaWQpOworCQkJCXBjaV91bm1hcF9wYWdlKGRkLT5wY2lkZXYsCisJCQkJCWRkLT5pcGF0aF9waHlzc2hhZG93W3BvcnR0aWQgKyB0aWRdLAorCQkJCQlQQUdFX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCQkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0gPSBOVUxMOwogCQkJCWlwYXRoX3N0YXRzLnNwc19wYWdldW5sb2NrcysrOwogCQkJfQpAQCAtMzQxLDcgKzQzMiwxMCBAQAogCQl9CiAJCWlmICh0aWQgPT0gdGlkY250KQogCQkJdGlkID0gMDsKLQkJcGQtPnBvcnRfdGlkY3Vyc29yID0gdGlkOworCQlpZiAoIXBkLT5wb3J0X3N1YnBvcnRfY250KQorCQkJcGQtPnBvcnRfdGlkY3Vyc29yID0gdGlkOworCQllbHNlCisJCQl0aWRjdXJzb3JfZnAoZnApID0gdGlkOwogCX0KIAogZG9uZToKQEAgLTM1NCw2ICs0NDgsNyBAQAogLyoqCiAgKiBpcGF0aF90aWRfZnJlZSAtIGZyZWUgYSBwb3J0IFRJRAogICogQHBkOiB0aGUgcG9ydAorICogQHN1YnBvcnQ6IHRoZSBzdWJwb3J0CiAgKiBAdGk6IHRoZSBUSUQgaW5mbwogICoKICAqIHJpZ2h0IG5vdyB3ZSBhcmUgdW5sb2NraW5nIG9uZSBwYWdlIGF0IGEgdGltZSwgYnV0IHNpbmNlCkBAIC0zNjcsNyArNDYyLDcgQEAKICAqIHRoZXkgcGFzcyBpbiB0byB1cy4KICAqLwogCi1zdGF0aWMgaW50IGlwYXRoX3RpZF9mcmVlKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCitzdGF0aWMgaW50IGlwYXRoX3RpZF9mcmVlKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHVuc2lnbmVkIHN1YnBvcnQsCiAJCQkgIGNvbnN0IHN0cnVjdCBpcGF0aF90aWRfaW5mbyAqdGkpCiB7CiAJaW50IHJldCA9IDA7CkBAIC0zODgsMTEgKzQ4MywyMCBAQAogCX0KIAogCXBvcnR0aWQgPSBwZC0+cG9ydF9wb3J0ICogZGQtPmlwYXRoX3JjdnRpZGNudDsKKwlpZiAoIXBkLT5wb3J0X3N1YnBvcnRfY250KQorCQl0aWRjbnQgPSBkZC0+aXBhdGhfcmN2dGlkY250OworCWVsc2UgaWYgKCFzdWJwb3J0KSB7CisJCXRpZGNudCA9IChkZC0+aXBhdGhfcmN2dGlkY250IC8gcGQtPnBvcnRfc3VicG9ydF9jbnQpICsKKwkJCSAoZGQtPmlwYXRoX3JjdnRpZGNudCAlIHBkLT5wb3J0X3N1YnBvcnRfY250KTsKKwkJcG9ydHRpZCArPSBkZC0+aXBhdGhfcmN2dGlkY250IC0gdGlkY250OworCX0gZWxzZSB7CisJCXRpZGNudCA9IGRkLT5pcGF0aF9yY3Z0aWRjbnQgLyBwZC0+cG9ydF9zdWJwb3J0X2NudDsKKwkJcG9ydHRpZCArPSB0aWRjbnQgKiAoc3VicG9ydCAtIDEpOworCX0KIAl0aWRiYXNlID0gKHU2NCBfX2lvbWVtICopICgoY2hhciBfX2lvbWVtICopKGRkLT5pcGF0aF9rcmVnYmFzZSkgKwogCQkJCSAgIGRkLT5pcGF0aF9yY3Z0aWRiYXNlICsKIAkJCQkgICBwb3J0dGlkICogc2l6ZW9mKCp0aWRiYXNlKSk7CiAKLQl0aWRjbnQgPSBkZC0+aXBhdGhfcmN2dGlkY250OwogCWxpbWl0ID0gc2l6ZW9mKHRpZG1hcCkgKiBCSVRTX1BFUl9CWVRFOwogCWlmIChsaW1pdCA+IHRpZGNudCkKIAkJLyoganVzdCBpbiBjYXNlIHNpemUgY2hhbmdlcyBpbiBmdXR1cmUgKi8KQEAgLTQxNyw2ICs1MjEsOSBAQAogCQkJCSAgIHBkLT5wb3J0X3BpZCwgdGlkKTsKIAkJCWRkLT5pcGF0aF9mX3B1dF90aWQoZGQsICZ0aWRiYXNlW3RpZF0sIDEsCiAJCQkJCSAgICBkZC0+aXBhdGhfdGlkaW52YWxpZCk7CisJCQlwY2lfdW5tYXBfcGFnZShkZC0+cGNpZGV2LAorCQkJCWRkLT5pcGF0aF9waHlzc2hhZG93W3BvcnR0aWQgKyB0aWRdLAorCQkJCVBBR0VfU0laRSwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJCWlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlcygKIAkJCQkmZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0sIDEpOwogCQkJZGQtPmlwYXRoX3BhZ2VzaGFkb3dbcG9ydHRpZCArIHRpZF0gPSBOVUxMOwpAQCAtNTgxLDIwICs2ODgsMjQgQEAKIC8qKgogICogaXBhdGhfbWFuYWdlX3JjdnEgLSBtYW5hZ2UgYSBwb3J0J3MgcmVjZWl2ZSBxdWV1ZQogICogQHBkOiB0aGUgcG9ydAorICogQHN1YnBvcnQ6IHRoZSBzdWJwb3J0CiAgKiBAc3RhcnRfc3RvcDogYWN0aW9uIHRvIGNhcnJ5IG91dAogICoKICAqIHN0YXJ0X3N0b3AgPT0gMCBkaXNhYmxlcyByZWNlaXZlIG9uIHRoZSBwb3J0LCBmb3IgdXNlIGluIHF1ZXVlCiAgKiBvdmVyZmxvdyBjb25kaXRpb25zLiAgc3RhcnRfc3RvcD09MSByZS1lbmFibGVzLCB0byBiZSB1c2VkIHRvCiAgKiByZS1pbml0IHRoZSBzb2Z0d2FyZSBjb3B5IG9mIHRoZSBoZWFkIHJlZ2lzdGVyCiAgKi8KLXN0YXRpYyBpbnQgaXBhdGhfbWFuYWdlX3JjdnEoc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgaW50IHN0YXJ0X3N0b3ApCitzdGF0aWMgaW50IGlwYXRoX21hbmFnZV9yY3ZxKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHVuc2lnbmVkIHN1YnBvcnQsCisJCQkgICAgIGludCBzdGFydF9zdG9wKQogewogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOwogCXU2NCB0dmFsOwogCi0JaXBhdGhfY2RiZyhQUk9DLCAiJXNhYmxpbmcgcmN2IGZvciB1bml0ICV1IHBvcnQgJXVcbiIsCisJaXBhdGhfY2RiZyhQUk9DLCAiJXNhYmxpbmcgcmN2IGZvciB1bml0ICV1IHBvcnQgJXU6JXVcbiIsCiAJCSAgIHN0YXJ0X3N0b3AgPyAiZW4iIDogImRpcyIsIGRkLT5pcGF0aF91bml0LAotCQkgICBwZC0+cG9ydF9wb3J0KTsKKwkJICAgcGQtPnBvcnRfcG9ydCwgc3VicG9ydCk7CisJaWYgKHN1YnBvcnQpCisJCWdvdG8gYmFpbDsKIAkvKiBhdG9taWNhbGx5IGNsZWFyIHJlY2VpdmUgZW5hYmxlIHBvcnQuICovCiAJaWYgKHN0YXJ0X3N0b3ApIHsKIAkJLyoKQEAgLTYwOSw3ICs3MjAsNyBAQAogCQkgKiB1cGRhdGVkIGFuZCBjb3JyZWN0IGl0c2VsZiwgZXZlbiBpbiB0aGUgZmFjZSBvZiBzb2Z0d2FyZQogCQkgKiBidWdzLgogCQkgKi8KLQkJKnBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0gMDsKKwkJKih2b2xhdGlsZSB1NjQgKilwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IDA7CiAJCXNldF9iaXQoSU5GSU5JUEFUSF9SX1BPUlRFTkFCTEVfU0hJRlQgKyBwZC0+cG9ydF9wb3J0LAogCQkJJmRkLT5pcGF0aF9yY3ZjdHJsKTsKIAl9IGVsc2UKQEAgLTYzMCw2ICs3NDEsNyBAQAogCQl0dmFsID0gaXBhdGhfcmVhZF91cmVnMzIoZGQsIHVyX3JjdmhkcnRhaWwsIHBkLT5wb3J0X3BvcnQpOwogCX0KIAkvKiBhbHdheXM7IG5ldyBoZWFkIHNob3VsZCBiZSBlcXVhbCB0byBuZXcgdGFpbDsgc2VlIGFib3ZlICovCitiYWlsOgogCXJldHVybiAwOwogfQogCkBAIC02ODcsNiArNzk5LDM2IEBACiAJfQogfQogCisvKgorICogSW5pdGlhbGl6ZSB0aGUgcG9ydCBkYXRhIHdpdGggdGhlIHJlY2VpdmUgYnVmZmVyIHNpemVzCisgKiBzbyB0aGlzIGNhbiBiZSBkb25lIHdoaWxlIHRoZSBtYXN0ZXIgcG9ydCBpcyBsb2NrZWQuCisgKiBPdGhlcndpc2UsIHRoZXJlIGlzIGEgcmFjZSB3aXRoIGEgc2xhdmUgb3BlbmluZyB0aGUgcG9ydAorICogYW5kIHNlZWluZyB0aGVzZSBmaWVsZHMgdW5pbml0aWFsaXplZC4KKyAqLworc3RhdGljIHZvaWQgaW5pdF91c2VyX2Vncl9zaXplcyhzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkKQoreworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCA9IHBkLT5wb3J0X2RkOworCXVuc2lnbmVkIGVncnBlcmNodW5rLCBlZ3JjbnQsIHNpemU7CisKKwkvKgorCSAqIHRvIGF2b2lkIHdhc3RpbmcgYSBsb3Qgb2YgbWVtb3J5LCB3ZSBhbGxvY2F0ZSAzMktCIGNodW5rcyBvZgorCSAqIHBoeXNpY2FsbHkgY29udGlndW91cyBtZW1vcnksIGFkdmFuY2UgdGhyb3VnaCBpdCB1bnRpbCB1c2VkIHVwCisJICogYW5kIHRoZW4gYWxsb2NhdGUgbW9yZS4gIE9mIGNvdXJzZSwgd2UgbmVlZCBtZW1vcnkgdG8gc3RvcmUgdGhvc2UKKwkgKiBleHRyYSBwb2ludGVycywgbm93LiAgU3RhcnRlZCBvdXQgd2l0aCAyNTZLQiwgYnV0IHVuZGVyIGhlYXZ5CisJICogbWVtb3J5IHByZXNzdXJlIChjcmVhdGluZyBsYXJnZSBmaWxlcyBhbmQgdGhlbiBjb3B5aW5nIHRoZW0gb3ZlcgorCSAqIE5GUyB3aGlsZSBkb2luZyBsb3RzIG9mIE1QSSBqb2JzKSwgd2UgaGl0IHNvbWUgYWxsb2NhdGlvbgorCSAqIGZhaWx1cmVzLCBldmVuIHRob3VnaCB3ZSBjYW4gc2xlZXAuLi4gICgyLjYuMTApIFN0aWxsIGdldAorCSAqIGZhaWx1cmVzIGF0IDY0Sy4gIDMySyBpcyB0aGUgbG93ZXN0IHdlIGNhbiBnbyB3aXRob3V0IHdhc3RpbmcKKwkgKiBhZGRpdGlvbmFsIG1lbW9yeS4KKwkgKi8KKwlzaXplID0gMHg4MDAwOworCWVncnBlcmNodW5rID0gc2l6ZSAvIGRkLT5pcGF0aF9yY3ZlZ3JidWZzaXplOworCWVncmNudCA9IGRkLT5pcGF0aF9yY3ZlZ3JjbnQ7CisJcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyA9IChlZ3JjbnQgKyBlZ3JwZXJjaHVuayAtIDEpIC8gZWdycGVyY2h1bms7CisJcGQtPnBvcnRfcmN2ZWdyYnVmc19wZXJjaHVuayA9IGVncnBlcmNodW5rOworCXBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplID0gc2l6ZTsKK30KKwogLyoqCiAgKiBpcGF0aF9jcmVhdGVfdXNlcl9lZ3IgLSBhbGxvY2F0ZSBlYWdlciBUSUQgYnVmZmVycwogICogQHBkOiB0aGUgcG9ydCB0byBhbGxvY2F0ZSBUSUQgYnVmZmVycyBmb3IKQEAgLTcwMiw3ICs4NDQsNyBAQAogc3RhdGljIGludCBpcGF0aF9jcmVhdGVfdXNlcl9lZ3Ioc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKIHsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKLQl1bnNpZ25lZCBlLCBlZ3JjbnQsIGFsbG9jZWQsIGVncnBlcmNodW5rLCBjaHVuaywgZWdyc2l6ZSwgZWdyb2ZmOworCXVuc2lnbmVkIGUsIGVncmNudCwgZWdycGVyY2h1bmssIGNodW5rLCBlZ3JzaXplLCBlZ3JvZmY7CiAJc2l6ZV90IHNpemU7CiAJaW50IHJldDsKIAlnZnBfdCBnZnBfZmxhZ3M7CkBAIC03MjIsMzEgKzg2NCwxOCBAQAogCWlwYXRoX2NkYmcoVkVSQk9TRSwgIkFsbG9jYXRpbmcgJWQgZWdyIGJ1ZmZlcnMsIGF0IGVncnRpZCAiCiAJCSAgICJvZmZzZXQgJXgsIGVncnNpemUgJXVcbiIsIGVncmNudCwgZWdyb2ZmLCBlZ3JzaXplKTsKIAotCS8qCi0JICogdG8gYXZvaWQgd2FzdGluZyBhIGxvdCBvZiBtZW1vcnksIHdlIGFsbG9jYXRlIDMyS0IgY2h1bmtzIG9mCi0JICogcGh5c2ljYWxseSBjb250aWd1b3VzIG1lbW9yeSwgYWR2YW5jZSB0aHJvdWdoIGl0IHVudGlsIHVzZWQgdXAKLQkgKiBhbmQgdGhlbiBhbGxvY2F0ZSBtb3JlLiAgT2YgY291cnNlLCB3ZSBuZWVkIG1lbW9yeSB0byBzdG9yZSB0aG9zZQotCSAqIGV4dHJhIHBvaW50ZXJzLCBub3cuICBTdGFydGVkIG91dCB3aXRoIDI1NktCLCBidXQgdW5kZXIgaGVhdnkKLQkgKiBtZW1vcnkgcHJlc3N1cmUgKGNyZWF0aW5nIGxhcmdlIGZpbGVzIGFuZCB0aGVuIGNvcHlpbmcgdGhlbSBvdmVyCi0JICogTkZTIHdoaWxlIGRvaW5nIGxvdHMgb2YgTVBJIGpvYnMpLCB3ZSBoaXQgc29tZSBhbGxvY2F0aW9uCi0JICogZmFpbHVyZXMsIGV2ZW4gdGhvdWdoIHdlIGNhbiBzbGVlcC4uLiAgKDIuNi4xMCkgU3RpbGwgZ2V0Ci0JICogZmFpbHVyZXMgYXQgNjRLLiAgMzJLIGlzIHRoZSBsb3dlc3Qgd2UgY2FuIGdvIHdpdGhvdXQgd2FzdGluZwotCSAqIGFkZGl0aW9uYWwgbWVtb3J5LgotCSAqLwotCXNpemUgPSAweDgwMDA7Ci0JYWxsb2NlZCA9IEFMSUdOKGVncnNpemUgKiBlZ3JjbnQsIHNpemUpOwotCWVncnBlcmNodW5rID0gc2l6ZSAvIGVncnNpemU7Ci0JY2h1bmsgPSAoZWdyY250ICsgZWdycGVyY2h1bmsgLSAxKSAvIGVncnBlcmNodW5rOwotCXBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3MgPSBjaHVuazsKLQlwZC0+cG9ydF9yY3ZlZ3JidWZzX3BlcmNodW5rID0gZWdycGVyY2h1bms7Ci0JcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemUgPSBzaXplOwotCXBkLT5wb3J0X3JjdmVncmJ1ZiA9IHZtYWxsb2MoY2h1bmsgKiBzaXplb2YocGQtPnBvcnRfcmN2ZWdyYnVmWzBdKSk7CisJY2h1bmsgPSBwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzOworCWVncnBlcmNodW5rID0gcGQtPnBvcnRfcmN2ZWdyYnVmc19wZXJjaHVuazsKKwlzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CisJcGQtPnBvcnRfcmN2ZWdyYnVmID0ga21hbGxvYyhjaHVuayAqIHNpemVvZihwZC0+cG9ydF9yY3ZlZ3JidWZbMF0pLAorCQkJCSAgICAgR0ZQX0tFUk5FTCk7CiAJaWYgKCFwZC0+cG9ydF9yY3ZlZ3JidWYpIHsKIAkJcmV0ID0gLUVOT01FTTsKIAkJZ290byBiYWlsOwogCX0KIAlwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyA9Ci0JCXZtYWxsb2MoY2h1bmsgKiBzaXplb2YocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXNbMF0pKTsKKwkJa21hbGxvYyhjaHVuayAqIHNpemVvZihwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5c1swXSksCisJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzKSB7CiAJCXJldCA9IC1FTk9NRU07CiAJCWdvdG8gYmFpbF9yY3ZlZ3JidWY7CkBAIC03OTEsMTA1ICs5MjAsMjMgQEAKIAkJCQkgIHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzW2VdKTsKIAogCX0KLQl2ZnJlZShwZC0+cG9ydF9yY3ZlZ3JidWZfcGh5cyk7CisJa2ZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmX3BoeXMpOwogCXBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzID0gTlVMTDsKIGJhaWxfcmN2ZWdyYnVmOgotCXZmcmVlKHBkLT5wb3J0X3JjdmVncmJ1Zik7CisJa2ZyZWUocGQtPnBvcnRfcmN2ZWdyYnVmKTsKIAlwZC0+cG9ydF9yY3ZlZ3JidWYgPSBOVUxMOwogYmFpbDoKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGlwYXRoX2RvX3VzZXJfaW5pdChzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAotCQkJICAgICAgY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfaW5mbyAqdWluZm8pCi17Ci0JaW50IHJldCA9IDA7Ci0Jc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7Ci0JdTMyIGhlYWQzMjsKLQotCS8qIGZvciBub3csIGlmIG1ham9yIHZlcnNpb24gaXMgZGlmZmVyZW50LCBiYWlsICovCi0JaWYgKCh1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uID4+IDE2KSAhPSBJUEFUSF9VU0VSX1NXTUFKT1IpIHsKLQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKLQkJCSAiVXNlciBtYWpvciB2ZXJzaW9uICVkIG5vdCBzYW1lIGFzIGRyaXZlciAiCi0JCQkgIm1ham9yICVkXG4iLCB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uID4+IDE2LAotCQkJIElQQVRIX1VTRVJfU1dNQUpPUik7Ci0JCXJldCA9IC1FTk9ERVY7Ci0JCWdvdG8gZG9uZTsKLQl9Ci0KLQlpZiAoKHVpbmZvLT5zcHVfdXNlcnZlcnNpb24gJiAweGZmZmYpICE9IElQQVRIX1VTRVJfU1dNSU5PUikKLQkJaXBhdGhfZGJnKCJVc2VyIG1pbm9yIHZlcnNpb24gJWQgbm90IHNhbWUgYXMgZHJpdmVyICIKLQkJCSAgIm1pbm9yICVkXG4iLCB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uICYgMHhmZmZmLAotCQkJICBJUEFUSF9VU0VSX1NXTUlOT1IpOwotCi0JaWYgKHVpbmZvLT5zcHVfcmN2aGRyc2l6ZSkgewotCQlyZXQgPSBpcGF0aF9zZXRyY3ZoZHJzaXplKGRkLCB1aW5mby0+c3B1X3JjdmhkcnNpemUpOwotCQlpZiAocmV0KQotCQkJZ290byBkb25lOwotCX0KLQotCS8qIGZvciBub3cgd2UgZG8gbm90aGluZyB3aXRoIHJjdmhkcmNudDogdWluZm8tPnNwdV9yY3ZoZHJjbnQgKi8KLQotCS8qIGZvciByaWdodCBub3csIGtlcm5lbCBwaW9idWZzIGFyZSBhdCBlbmQsIHNvIHBvcnQgMSBpcyBhdCAwICovCi0JcGQtPnBvcnRfcGlvYnVmcyA9IGRkLT5pcGF0aF9waW9idWZiYXNlICsKLQkJZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwZC0+cG9ydF9wb3J0IC0KLQkJCQkgICAgICAgMSkgKiBkZC0+aXBhdGhfcGFsaWduOwotCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNldCBiYXNlIG9mIHBpb2J1ZnMgZm9yIHBvcnQgJXUgdG8gMHgleFxuIiwKLQkJICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcGlvYnVmcyk7Ci0KLQkvKgotCSAqIE5vdyBhbGxvY2F0ZSB0aGUgcmN2aGRyIFEgYW5kIGVhZ2VyIFRJRHM7IHNraXAgdGhlIFRJRAotCSAqIGFycmF5IGZvciB0aW1lIGJlaW5nLiAgSWYgcGQtPnBvcnRfcG9ydCA+IGNoaXAtc3VwcG9ydGVkLAotCSAqIHdlIG5lZWQgdG8gZG8gZXh0cmEgc3R1ZmYgaGVyZSB0byBoYW5kbGUgYnkgaGFuZGxpbmcgb3ZlcmZsb3cKLQkgKiB0aHJvdWdoIHBvcnQgMCwgc29tZWRheQotCSAqLwotCXJldCA9IGlwYXRoX2NyZWF0ZV9yY3ZoZHJxKGRkLCBwZCk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGlwYXRoX2NyZWF0ZV91c2VyX2VncihwZCk7Ci0JaWYgKHJldCkKLQkJZ290byBkb25lOwotCi0JLyoKLQkgKiBzZXQgdGhlIGVhZ2VyIGhlYWQgcmVnaXN0ZXIgZm9yIHRoaXMgcG9ydCB0byB0aGUgY3VycmVudCB2YWx1ZXMKLQkgKiBvZiB0aGUgdGFpbCBwb2ludGVycywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGV5IHdlcmUKLQkgKiB1cGRhdGVkIG9uIGxhc3QgdXNlIG9mIHRoZSBwb3J0LgotCSAqLwotCWhlYWQzMiA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIHBkLT5wb3J0X3BvcnQpOwotCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgaGVhZDMyLCBwZC0+cG9ydF9wb3J0KTsKLQlkZC0+aXBhdGhfbGFzdGVncmhlYWRzW3BkLT5wb3J0X3BvcnRdID0gLTE7Ci0JZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHNbcGQtPnBvcnRfcG9ydF0gPSAtMTsKLQlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcm90ZSBwb3J0JWQgZWdyaGVhZCAleCBmcm9tIHRhaWwgcmVnc1xuIiwKLQkJcGQtPnBvcnRfcG9ydCwgaGVhZDMyKTsKLQlwZC0+cG9ydF90aWRjdXJzb3IgPSAwOwkvKiBzdGFydCBhdCBiZWdpbm5pbmcgYWZ0ZXIgb3BlbiAqLwotCS8qCi0JICogbm93IGVuYWJsZSB0aGUgcG9ydDsgdGhlIHRhaWwgcmVnaXN0ZXJzIHdpbGwgYmUgd3JpdHRlbiB0byBtZW1vcnkKLQkgKiBieSB0aGUgY2hpcCBhcyBzb29uIGFzIGl0IHNlZXMgdGhlIHdyaXRlIHRvCi0JICogZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLiAgVGhlIHVwZGF0ZSBvbmx5IGhhcHBlbnMgb24KLQkgKiB0cmFuc2l0aW9uIGZyb20gMCB0byAxLCBzbyBjbGVhciBpdCBmaXJzdCwgdGhlbiBzZXQgaXQgYXMgcGFydCBvZgotCSAqIGVuYWJsaW5nIHRoZSBwb3J0LiAgVGhpcyB3aWxsICh2ZXJ5IGJyaWVmbHkpIGFmZmVjdCBhbnkgb3RoZXIKLQkgKiBvcGVuIHBvcnRzLCBidXQgaXQgc2hvdWxkbid0IGJlIGxvbmcgZW5vdWdoIHRvIGJlIGFuIGlzc3VlLgotCSAqIFdlIGV4cGxpY3RseSBzZXQgdGhlIGluLW1lbW9yeSBjb3B5IHRvIDAgYmVmb3JlaGFuZCwgc28gd2UgZG9uJ3QKLQkgKiBoYXZlIHRvIHdhaXQgdG8gYmUgc3VyZSB0aGUgRE1BIHVwZGF0ZSBoYXMgaGFwcGVuZWQuCi0JICovCi0JKnBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyID0gMFVMTDsKLQlzZXRfYml0KElORklOSVBBVEhfUl9QT1JURU5BQkxFX1NISUZUICsgcGQtPnBvcnRfcG9ydCwKLQkJJmRkLT5pcGF0aF9yY3ZjdHJsKTsKLQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCi0JCQkgZGQtPmlwYXRoX3JjdmN0cmwgJiB+SU5GSU5JUEFUSF9SX1RBSUxVUEQpOwotCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfcmN2Y3RybCwKLQkJCSBkZC0+aXBhdGhfcmN2Y3RybCk7Ci1kb25lOgotCXJldHVybiByZXQ7Ci19Ci0KIAogLyogY29tbW9uIGNvZGUgZm9yIHRoZSBtYXBwaW5ncyBvbiBkbWFfYWxsb2NfY29oZXJlbnQgbWVtICovCiBzdGF0aWMgaW50IGlwYXRoX21tYXBfbWVtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJICAgICBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLCB1bnNpZ25lZCBsZW4sCi0JCQkgICAgIGludCB3cml0ZV9vaywgZG1hX2FkZHJfdCBhZGRyLCBjaGFyICp3aGF0KQorCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHVuc2lnbmVkIGxlbiwgaW50IHdyaXRlX29rLAorCXZvaWQgKmt2YWRkciwgY2hhciAqd2hhdCkKIHsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBwZC0+cG9ydF9kZDsKLQl1bnNpZ25lZCBwZm4gPSAodW5zaWduZWQgbG9uZylhZGRyID4+IFBBR0VfU0hJRlQ7CisJdW5zaWduZWQgbG9uZyBwZm47CiAJaW50IHJldDsKIAogCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+IGxlbikgewpAQCAtOTEyLDE3ICs5NTksMTcgQEAKIAkJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CiAJfQogCisJcGZuID0gdmlydF90b19waHlzKGt2YWRkcikgPj4gUEFHRV9TSElGVDsKIAlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCB2bWEtPnZtX3N0YXJ0LCBwZm4sCiAJCQkgICAgICBsZW4sIHZtYS0+dm1fcGFnZV9wcm90KTsKIAlpZiAocmV0KQotCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAotCQkJICIlcyBwb3J0JXUgbW1hcCBvZiAlbHgsICV4IGJ5dGVzIHIlYyBmYWlsZWQ6ICVkXG4iLAotCQkJIHdoYXQsIHBkLT5wb3J0X3BvcnQsICh1bnNpZ25lZCBsb25nKWFkZHIsIGxlbiwKLQkJCSB3cml0ZV9vaz8ndyc6J28nLCByZXQpOworCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiJXMgcG9ydCV1IG1tYXAgb2YgJWx4LCAleCAiCisJCQkgImJ5dGVzIHIlYyBmYWlsZWQ6ICVkXG4iLCB3aGF0LCBwZC0+cG9ydF9wb3J0LAorCQkJIHBmbiwgbGVuLCB3cml0ZV9vaz8ndyc6J28nLCByZXQpOwogCWVsc2UKLQkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJXMgcG9ydCV1IG1tYXBlZCAlbHgsICV4IGJ5dGVzIHIlY1xuIiwKLQkJCXdoYXQsIHBkLT5wb3J0X3BvcnQsICh1bnNpZ25lZCBsb25nKWFkZHIsIGxlbiwKLQkJCSB3cml0ZV9vaz8ndyc6J28nKTsKKwkJaXBhdGhfY2RiZyhWRVJCT1NFLCAiJXMgcG9ydCV1IG1tYXBlZCAlbHgsICV4IGJ5dGVzICIKKwkJCSAgICJyJWNcbiIsIHdoYXQsIHBkLT5wb3J0X3BvcnQsIHBmbiwgbGVuLAorCQkJICAgd3JpdGVfb2s/J3cnOidvJyk7CiBiYWlsOgogCXJldHVybiByZXQ7CiB9CkBAIC05NTcsNyArMTAwNCw4IEBACiAKIHN0YXRpYyBpbnQgbW1hcF9waW9idWZzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLAotCQkJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCkKKwkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsCisJCQl1bnNpZ25lZCBwaW9idWZzLCB1bnNpZ25lZCBwaW9jbnQpCiB7CiAJdW5zaWduZWQgbG9uZyBwaHlzOwogCWludCByZXQ7CkBAIC05NjgsMTYgKzEwMTYsMTUgQEAKIAkgKiBwcm9jZXNzIGRhdGEsIGFuZCBjYXRjaGVzIHVzZXJzIHdobyBtaWdodCB0cnkgdG8gcmVhZCB0aGUgaS9vCiAJICogc3BhY2UgZHVlIHRvIGEgYnVnLgogCSAqLwotCWlmICgodm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0KSA+Ci0JICAgIChkZC0+aXBhdGhfcGJ1ZnNwb3J0ICogZGQtPmlwYXRoX3BhbGlnbikpIHsKKwlpZiAoKHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCkgPiAocGlvY250ICogZGQtPmlwYXRoX3BhbGlnbikpIHsKIAkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwgIkZBSUwgbW1hcCBwaW9idWZzOiAiCiAJCQkgInJlcWxlbiAlbHggPiBQQUdFXG4iLAogCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7Ci0JCXJldCA9IC1FRkFVTFQ7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlwaHlzID0gZGQtPmlwYXRoX3BoeXNhZGRyICsgcGQtPnBvcnRfcGlvYnVmczsKKwlwaHlzID0gZGQtPmlwYXRoX3BoeXNhZGRyICsgcGlvYnVmczsKIAogCS8qCiAJICogRG9uJ3QgbWFyayB0aGlzIGFzIG5vbi1jYWNoZWQsIG9yIHdlIGRvbid0IGdldCB0aGUKQEAgLTEwMTEsNyArMTA1OCw3IEBACiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gcGQtPnBvcnRfZGQ7CiAJdW5zaWduZWQgbG9uZyBzdGFydCwgc2l6ZTsKIAlzaXplX3QgdG90YWxfc2l6ZSwgaTsKLQlkbWFfYWRkcl90ICpwaHlzOworCXVuc2lnbmVkIGxvbmcgcGZuOwogCWludCByZXQ7CiAKIAlzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemU7CkBAIC0xMDIxLDcgKzEwNjgsNyBAQAogCQkJICJyZXFsZW4gJWx4ID4gYWN0dWFsICVseFxuIiwKIAkJCSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsCiAJCQkgKHVuc2lnbmVkIGxvbmcpIHRvdGFsX3NpemUpOwotCQlyZXQgPSAtRUZBVUxUOworCQlyZXQgPSAtRUlOVkFMOwogCQlnb3RvIGJhaWw7CiAJfQogCkBAIC0xMDM1LDExICsxMDgyLDExIEBACiAJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CiAKIAlzdGFydCA9IHZtYS0+dm1fc3RhcnQ7Ci0JcGh5cyA9IHBkLT5wb3J0X3JjdmVncmJ1Zl9waHlzOwogCiAJZm9yIChpID0gMDsgaSA8IHBkLT5wb3J0X3JjdmVncmJ1Zl9jaHVua3M7IGkrKywgc3RhcnQgKz0gc2l6ZSkgewotCQlyZXQgPSByZW1hcF9wZm5fcmFuZ2Uodm1hLCBzdGFydCwgcGh5c1tpXSA+PiBQQUdFX1NISUZULAotCQkJCSAgICAgIHNpemUsIHZtYS0+dm1fcGFnZV9wcm90KTsKKwkJcGZuID0gdmlydF90b19waHlzKHBkLT5wb3J0X3JjdmVncmJ1ZltpXSkgPj4gUEFHRV9TSElGVDsKKwkJcmV0ID0gcmVtYXBfcGZuX3JhbmdlKHZtYSwgc3RhcnQsIHBmbiwgc2l6ZSwKKwkJCQkgICAgICB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBiYWlsOwogCX0KQEAgLTEwNDksNiArMTA5NiwxMjIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKgorICogaXBhdGhfZmlsZV92bWFfbm9wYWdlIC0gaGFuZGxlIGEgVk1BIHBhZ2UgZmF1bHQuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgcGFnZSAqaXBhdGhfZmlsZV92bWFfbm9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50ICp0eXBlKQoreworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gYWRkcmVzcyAtIHZtYS0+dm1fc3RhcnQ7CisJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOT1BBR0VfU0lHQlVTOworCXZvaWQgKnBhZ2VwdHI7CisKKwkvKgorCSAqIENvbnZlcnQgdGhlIHZtYWxsb2MgYWRkcmVzcyBpbnRvIGEgc3RydWN0IHBhZ2UuCisJICovCisJcGFnZXB0ciA9ICh2b2lkICopKG9mZnNldCArICh2bWEtPnZtX3Bnb2ZmIDw8IFBBR0VfU0hJRlQpKTsKKwlwYWdlID0gdm1hbGxvY190b19wYWdlKHBhZ2VwdHIpOworCWlmICghcGFnZSkKKwkJZ290byBvdXQ7CisKKwkvKiBJbmNyZW1lbnQgdGhlIHJlZmVyZW5jZSBjb3VudC4gKi8KKwlnZXRfcGFnZShwYWdlKTsKKwlpZiAodHlwZSkKKwkJKnR5cGUgPSBWTV9GQVVMVF9NSU5PUjsKK291dDoKKwlyZXR1cm4gcGFnZTsKK30KKworc3RhdGljIHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpcGF0aF9maWxlX3ZtX29wcyA9IHsKKwkubm9wYWdlID0gaXBhdGhfZmlsZV92bWFfbm9wYWdlLAorfTsKKworc3RhdGljIGludCBtbWFwX2t2YWRkcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdTY0IHBnYWRkciwKKwkJICAgICAgIHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHVuc2lnbmVkIHN1YnBvcnQpCit7CisJdW5zaWduZWQgbG9uZyBsZW47CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOworCXZvaWQgKmFkZHI7CisJc2l6ZV90IHNpemU7CisJaW50IHJldDsKKworCS8qIElmIHRoZSBwb3J0IGlzIG5vdCBzaGFyZWQsIGFsbCBhZGRyZXNzZXMgc2hvdWxkIGJlIHBoeXNpY2FsICovCisJaWYgKCFwZC0+cG9ydF9zdWJwb3J0X2NudCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJZGQgPSBwZC0+cG9ydF9kZDsKKwlzaXplID0gcGQtPnBvcnRfcmN2ZWdyYnVmX2NodW5rcyAqIHBkLT5wb3J0X3JjdmVncmJ1Zl9zaXplOworCisJLyoKKwkgKiBNYXN0ZXIgaGFzIGFsbCB0aGUgc2xhdmUgdXJlZ2Jhc2UsIHJjdmhkcnEsIGFuZAorCSAqIHJjdmVncmJ1ZnMgbW1hcHBlZC4KKwkgKi8KKwlpZiAoc3VicG9ydCA9PSAwKSB7CisJCXVuc2lnbmVkIG51bV9zbGF2ZXMgPSBwZC0+cG9ydF9zdWJwb3J0X2NudCAtIDE7CisKKwkJaWYgKHBnYWRkciA9PSAoKHU2NCkgcGQtPnN1YnBvcnRfdXJlZ2Jhc2UgJiBNTUFQNjRfTUFTSykpIHsKKwkJCWFkZHIgPSBwZC0+c3VicG9ydF91cmVnYmFzZTsKKwkJCXNpemUgPSBQQUdFX1NJWkUgKiBudW1fc2xhdmVzOworCQl9IGVsc2UgaWYgKHBnYWRkciA9PSAoKHU2NCkgcGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UgJgorCQkJCSAgICAgIE1NQVA2NF9NQVNLKSkgeworCQkJYWRkciA9IHBkLT5zdWJwb3J0X3Jjdmhkcl9iYXNlOworCQkJc2l6ZSA9IHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSAqIG51bV9zbGF2ZXM7CisJCX0gZWxzZSBpZiAocGdhZGRyID09ICgodTY0KSBwZC0+c3VicG9ydF9yY3ZlZ3JidWYgJgorCQkJCSAgICAgIE1NQVA2NF9NQVNLKSkgeworCQkJYWRkciA9IHBkLT5zdWJwb3J0X3JjdmVncmJ1ZjsKKwkJCXNpemUgKj0gbnVtX3NsYXZlczsKKwkJfSBlbHNlIHsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGJhaWw7CisJCX0KKwl9IGVsc2UgaWYgKHBnYWRkciA9PSAoKCh1NjQpIHBkLT5zdWJwb3J0X3VyZWdiYXNlICsKKwkJCSAgICAgICBQQUdFX1NJWkUgKiAoc3VicG9ydCAtIDEpKSAmIE1NQVA2NF9NQVNLKSkgeworCQlhZGRyID0gcGQtPnN1YnBvcnRfdXJlZ2Jhc2UgKyBQQUdFX1NJWkUgKiAoc3VicG9ydCAtIDEpOworCQlzaXplID0gUEFHRV9TSVpFOworCX0gZWxzZSBpZiAocGdhZGRyID09ICgoKHU2NCkgcGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UgKworCQkJICAgICAgIHBkLT5wb3J0X3JjdmhkcnFfc2l6ZSAqIChzdWJwb3J0IC0gMSkpICYKKwkJCSAgICAgIE1NQVA2NF9NQVNLKSkgeworCQlhZGRyID0gcGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UgKworCQkJcGQtPnBvcnRfcmN2aGRycV9zaXplICogKHN1YnBvcnQgLSAxKTsKKwkJc2l6ZSA9IHBkLT5wb3J0X3JjdmhkcnFfc2l6ZTsKKwl9IGVsc2UgaWYgKHBnYWRkciA9PSAoKCh1NjQpIHBkLT5zdWJwb3J0X3JjdmVncmJ1ZiArCisJCQkgICAgICAgc2l6ZSAqIChzdWJwb3J0IC0gMSkpICYgTU1BUDY0X01BU0spKSB7CisJCWFkZHIgPSBwZC0+c3VicG9ydF9yY3ZlZ3JidWYgKyBzaXplICogKHN1YnBvcnQgLSAxKTsKKwkJLyogcmN2ZWdyYnVmcyBhcmUgcmVhZC1vbmx5IG9uIHRoZSBzbGF2ZSAqLworCQlpZiAodm1hLT52bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LAorCQkJCSAiQ2FuJ3QgbWFwIGVhZ2VyIGJ1ZmZlcnMgYXMgIgorCQkJCSAid3JpdGFibGUgKGZsYWdzPSVseClcbiIsIHZtYS0+dm1fZmxhZ3MpOworCQkJcmV0ID0gLUVQRVJNOworCQkJZ290byBiYWlsOworCQl9CisJCS8qCisJCSAqIERvbid0IGFsbG93IHBlcm1pc3Npb24gdG8gbGF0ZXIgY2hhbmdlIHRvIHdyaXRlYWJsZQorCQkgKiB3aXRoIG1wcm90ZWN0LgorCQkgKi8KKwkJdm1hLT52bV9mbGFncyAmPSB+Vk1fTUFZV1JJVEU7CisJfSBlbHNlIHsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBiYWlsOworCX0KKwlsZW4gPSB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQ7CisJaWYgKGxlbiA+IHNpemUpIHsKKwkJaXBhdGhfY2RiZyhNTSwgIkZBSUw6IHJlcWxlbiAlbHggPiAlenhcbiIsIGxlbiwgc2l6ZSk7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gYmFpbDsKKwl9CisKKwl2bWEtPnZtX3Bnb2ZmID0gKHVuc2lnbmVkIGxvbmcpIGFkZHIgPj4gUEFHRV9TSElGVDsKKwl2bWEtPnZtX29wcyA9ICZpcGF0aF9maWxlX3ZtX29wczsKKwl2bWEtPnZtX2ZsYWdzIHw9IFZNX1JFU0VSVkVEIHwgVk1fRE9OVEVYUEFORDsKKwlyZXQgPSAwOworCitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKIC8qKgogICogaXBhdGhfbW1hcCAtIG1tYXAgdmFyaW91cyBzdHJ1Y3R1cmVzIGludG8gdXNlciBzcGFjZQogICogQGZwOiB0aGUgZmlsZSBwb2ludGVyCkBAIC0xMDY0LDczICsxMjI3LDk5IEBACiAJc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZDsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAJdTY0IHBnYWRkciwgdXJlZzsKKwl1bnNpZ25lZCBwaW9idWZzLCBwaW9jbnQ7CiAJaW50IHJldDsKIAogCXBkID0gcG9ydF9mcChmcCk7CisJaWYgKCFwZCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQogCWRkID0gcGQtPnBvcnRfZGQ7CiAKIAkvKgogCSAqIFRoaXMgaXMgdGhlIGlwYXRoX2RvX3VzZXJfaW5pdCgpIGNvZGUsIG1hcHBpbmcgdGhlIHNoYXJlZCBidWZmZXJzCiAJICogaW50byB0aGUgdXNlciBwcm9jZXNzLiBUaGUgYWRkcmVzcyByZWZlcnJlZCB0byBieSB2bV9wZ29mZiBpcyB0aGUKLQkgKiB2aXJ0dWFsLCBub3QgcGh5c2ljYWwsIGFkZHJlc3M7IHdlIG9ubHkgZG8gb25lIG1tYXAgZm9yIGVhY2gKLQkgKiBzcGFjZSBtYXBwZWQuCisJICogZmlsZSBvZmZzZXQgcGFzc2VkIHZpYSBtbWFwKCkuICBGb3Igc2hhcmVkIHBvcnRzLCB0aGlzIGlzIHRoZQorCSAqIGtlcm5lbCB2bWFsbG9jKCkgYWRkcmVzcyBvZiB0aGUgcGFnZXMgdG8gc2hhcmUgd2l0aCB0aGUgbWFzdGVyLgorCSAqIEZvciBub24tc2hhcmVkIG9yIG1hc3RlciBwb3J0cywgdGhpcyBpcyBhIHBoeXNpY2FsIGFkZHJlc3MuCisJICogV2Ugb25seSBkbyBvbmUgbW1hcCBmb3IgZWFjaCBzcGFjZSBtYXBwZWQuCiAJICovCiAJcGdhZGRyID0gdm1hLT52bV9wZ29mZiA8PCBQQUdFX1NISUZUOwogCiAJLyoKLQkgKiBNdXN0IGZpdCBpbiA0MCBiaXRzIGZvciBvdXIgaGFyZHdhcmU7IHNvbWUgY2hlY2tlZCBlbHNld2hlcmUsCi0JICogYnV0IHdlJ2xsIGJlIHBhcmFub2lkLiAgQ2hlY2sgZm9yIDAgaXMgbW9zdGx5IGluIGNhc2Ugb25lIG9mIHRoZQotCSAqIGFsbG9jYXRpb25zIGZhaWxlZCwgYnV0IHVzZXIgY2FsbGVkIG1tYXAgYW55d2F5LiAgIFdlIHdhbnQgdG8gY2F0Y2gKLQkgKiB0aGF0IGJlZm9yZSBpdCBjYW4gbWF0Y2guCisJICogQ2hlY2sgZm9yIDAgaW4gY2FzZSBvbmUgb2YgdGhlIGFsbG9jYXRpb25zIGZhaWxlZCwgYnV0IHVzZXIKKwkgKiBjYWxsZWQgbW1hcCBhbnl3YXkuCiAJICovCi0JaWYgKCFwZ2FkZHIgfHwgcGdhZGRyID49ICgxVUxMPDw0MCkpICB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsICJCYWQgcGh5cyBhZGRyICVsbHgsIHN0YXJ0ICVseCwgZW5kICVseFxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpcGdhZGRyLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCS8qIGp1c3QgdGhlIG9mZnNldCBvZiB0aGUgcG9ydCB1c2VyIHJlZ2lzdGVycywgbm90IHBoeXNpY2FsIGFkZHIgKi8KLQl1cmVnID0gZGQtPmlwYXRoX3VyZWdiYXNlICsgZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7Ci0KLQlpcGF0aF9jZGJnKE1NLCAidXNoYXJlOiBwZ2FkZHIgJWxseCB2bV9zdGFydD0lbHgsIHZtbGVuICVseFxuIiwKLQkJICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgcGdhZGRyLCB2bWEtPnZtX3N0YXJ0LAotCQkgICB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQpOwotCi0JaWYgKHZtYS0+dm1fc3RhcnQgJiAoUEFHRV9TSVpFLTEpKSB7Ci0JCWlwYXRoX2Rldl9lcnIoZGQsCi0JCQkidm1fc3RhcnQgbm90IGFsaWduZWQ6ICVseCwgZW5kPSVseCBwaHlzICVseFxuIiwKLQkJCXZtYS0+dm1fc3RhcnQsIHZtYS0+dm1fZW5kLCAodW5zaWduZWQgbG9uZylwZ2FkZHIpOworCWlmICghcGdhZGRyKSAgewogCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CiAJfQotCWVsc2UgaWYgKHBnYWRkciA9PSB1cmVnKQorCisJaXBhdGhfY2RiZyhNTSwgInBnYWRkciAlbGx4IHZtX3N0YXJ0PSVseCBsZW4gJWx4IHBvcnQgJXU6JXU6JXVcbiIsCisJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHBnYWRkciwgdm1hLT52bV9zdGFydCwKKwkJICAgdm1hLT52bV9lbmQgLSB2bWEtPnZtX3N0YXJ0LCBkZC0+aXBhdGhfdW5pdCwKKwkJICAgcGQtPnBvcnRfcG9ydCwgc3VicG9ydF9mcChmcCkpOworCisJLyoKKwkgKiBQaHlzaWNhbCBhZGRyZXNzZXMgbXVzdCBmaXQgaW4gNDAgYml0cyBmb3Igb3VyIGhhcmR3YXJlLgorCSAqIENoZWNrIGZvciBrZXJuZWwgdmlydHVhbCBhZGRyZXNzZXMgZmlyc3QsIGFueXRoaW5nIGVsc2UgbXVzdAorCSAqIG1hdGNoIGEgSFcgb3IgbWVtb3J5IGFkZHJlc3MuCisJICovCisJaWYgKHBnYWRkciA+PSAoMVVMTDw8NDApKSB7CisJCXJldCA9IG1tYXBfa3ZhZGRyKHZtYSwgcGdhZGRyLCBwZCwgc3VicG9ydF9mcChmcCkpOworCQlnb3RvIGJhaWw7CisJfQorCisJaWYgKCFwZC0+cG9ydF9zdWJwb3J0X2NudCkgeworCQkvKiBwb3J0IGlzIG5vdCBzaGFyZWQgKi8KKwkJdXJlZyA9IGRkLT5pcGF0aF91cmVnYmFzZSArIGRkLT5pcGF0aF9wYWxpZ24gKiBwZC0+cG9ydF9wb3J0OworCQlwaW9jbnQgPSBkZC0+aXBhdGhfcGJ1ZnNwb3J0OworCQlwaW9idWZzID0gcGQtPnBvcnRfcGlvYnVmczsKKwl9IGVsc2UgaWYgKCFzdWJwb3J0X2ZwKGZwKSkgeworCQkvKiBjYWxsZXIgaXMgdGhlIG1hc3RlciAqLworCQl1cmVnID0gZGQtPmlwYXRoX3VyZWdiYXNlICsgZGQtPmlwYXRoX3BhbGlnbiAqIHBkLT5wb3J0X3BvcnQ7CisJCXBpb2NudCA9IChkZC0+aXBhdGhfcGJ1ZnNwb3J0IC8gcGQtPnBvcnRfc3VicG9ydF9jbnQpICsKKwkJCSAoZGQtPmlwYXRoX3BidWZzcG9ydCAlIHBkLT5wb3J0X3N1YnBvcnRfY250KTsKKwkJcGlvYnVmcyA9IHBkLT5wb3J0X3Bpb2J1ZnMgKworCQkJZGQtPmlwYXRoX3BhbGlnbiAqIChkZC0+aXBhdGhfcGJ1ZnNwb3J0IC0gcGlvY250KTsKKwl9IGVsc2UgeworCQl1bnNpZ25lZCBzbGF2ZSA9IHN1YnBvcnRfZnAoZnApIC0gMTsKKworCQkvKiBjYWxsZXIgaXMgYSBzbGF2ZSAqLworCQl1cmVnID0gMDsKKwkJcGlvY250ID0gZGQtPmlwYXRoX3BidWZzcG9ydCAvIHBkLT5wb3J0X3N1YnBvcnRfY250OworCQlwaW9idWZzID0gcGQtPnBvcnRfcGlvYnVmcyArIGRkLT5pcGF0aF9wYWxpZ24gKiBwaW9jbnQgKiBzbGF2ZTsKKwl9CisKKwlpZiAocGdhZGRyID09IHVyZWcpCiAJCXJldCA9IG1tYXBfdXJlZyh2bWEsIGRkLCB1cmVnKTsKLQllbHNlIGlmIChwZ2FkZHIgPT0gcGQtPnBvcnRfcGlvYnVmcykKLQkJcmV0ID0gbW1hcF9waW9idWZzKHZtYSwgZGQsIHBkKTsKLQllbHNlIGlmIChwZ2FkZHIgPT0gKHU2NCkgcGQtPnBvcnRfcmN2ZWdyX3BoeXMpCisJZWxzZSBpZiAocGdhZGRyID09IHBpb2J1ZnMpCisJCXJldCA9IG1tYXBfcGlvYnVmcyh2bWEsIGRkLCBwZCwgcGlvYnVmcywgcGlvY250KTsKKwllbHNlIGlmIChwZ2FkZHIgPT0gZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19waHlzKQorCQkvKiBpbi1tZW1vcnkgY29weSBvZiBwaW9hdmFpbCByZWdpc3RlcnMgKi8KKwkJcmV0ID0gaXBhdGhfbW1hcF9tZW0odm1hLCBwZCwgUEFHRV9TSVpFLCAwLAorCQkJICAgICAgCSAgICAgKHZvaWQgKikgZGQtPmlwYXRoX3Bpb2F2YWlscmVnc19kbWEsCisJCQkJICAgICAicGlvYXZhaWwgcmVnaXN0ZXJzIik7CisJZWxzZSBpZiAoc3VicG9ydF9mcChmcCkpCisJCS8qIFN1YnBvcnRzIGRvbid0IG1tYXAgdGhlIHBoeXNpY2FsIHJlY2VpdmUgYnVmZmVycyAqLworCQlyZXQgPSAtRUlOVkFMOworCWVsc2UgaWYgKHBnYWRkciA9PSBwZC0+cG9ydF9yY3ZlZ3JfcGh5cykKIAkJcmV0ID0gbW1hcF9yY3ZlZ3JidWZzKHZtYSwgcGQpOwotCWVsc2UgaWYgKHBnYWRkciA9PSAodTY0KSBwZC0+cG9ydF9yY3ZoZHJxX3BoeXMpIHsKKwllbHNlIGlmIChwZ2FkZHIgPT0gKHU2NCkgcGQtPnBvcnRfcmN2aGRycV9waHlzKQogCQkvKgogCQkgKiBUaGUgcmN2aGRycSBpdHNlbGY7IHJlYWRvbmx5IGV4Y2VwdCBvbiBIVCAoc28gaGF2ZQogCQkgKiB0byBhbGxvdyB3cml0YWJsZSBtYXBwaW5nKSwgbXVsdGlwbGUgcGFnZXMsIGNvbnRpZ3VvdXMKIAkJICogZnJvbSBhbiBpL28gcGVyc3BlY3RpdmUuCiAJCSAqLwotCQl1bnNpZ25lZCB0b3RhbF9zaXplID0KLQkJCUFMSUdOKGRkLT5pcGF0aF9yY3ZoZHJjbnQgKiBkZC0+aXBhdGhfcmN2aGRyZW50c2l6ZQotCQkJICAgKiBzaXplb2YodTMyKSwgUEFHRV9TSVpFKTsKLQkJcmV0ID0gaXBhdGhfbW1hcF9tZW0odm1hLCBwZCwgdG90YWxfc2l6ZSwgMSwKLQkJCQkgICAgIHBkLT5wb3J0X3JjdmhkcnFfcGh5cywKKwkJcmV0ID0gaXBhdGhfbW1hcF9tZW0odm1hLCBwZCwgcGQtPnBvcnRfcmN2aGRycV9zaXplLCAxLAorCQkJCSAgICAgcGQtPnBvcnRfcmN2aGRycSwKIAkJCQkgICAgICJyY3ZoZHJxIik7Ci0JfQotCWVsc2UgaWYgKHBnYWRkciA9PSAodTY0KXBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzKQorCWVsc2UgaWYgKHBnYWRkciA9PSAodTY0KSBwZC0+cG9ydF9yY3ZoZHJxdGFpbGFkZHJfcGh5cykKIAkJLyogaW4tbWVtb3J5IGNvcHkgb2YgcmN2aGRycSB0YWlsIHJlZ2lzdGVyICovCiAJCXJldCA9IGlwYXRoX21tYXBfbWVtKHZtYSwgcGQsIFBBR0VfU0laRSwgMCwKLQkJCQkgICAgIHBkLT5wb3J0X3JjdmhkcnF0YWlsYWRkcl9waHlzLAorCQkJCSAgICAgcGQtPnBvcnRfcmN2aGRydGFpbF9rdmFkZHIsCiAJCQkJICAgICAicmN2aGRycSB0YWlsIik7Ci0JZWxzZSBpZiAocGdhZGRyID09IGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cykKLQkJLyogaW4tbWVtb3J5IGNvcHkgb2YgcGlvYXZhaWwgcmVnaXN0ZXJzICovCi0JCXJldCA9IGlwYXRoX21tYXBfbWVtKHZtYSwgcGQsIFBBR0VfU0laRSwgMCwKLQkJCQkgICAgIGRkLT5pcGF0aF9waW9hdmFpbHJlZ3NfcGh5cywKLQkJCQkgICAgICJwaW9hdmFpbCByZWdpc3RlcnMiKTsKIAllbHNlCiAJCXJldCA9IC1FSU5WQUw7CiAKQEAgLTExMzgsOSArMTMyNywxMCBAQAogCiAJaWYgKHJldCA8IDApCiAJCWRldl9pbmZvKCZkZC0+cGNpZGV2LT5kZXYsCi0JCQkgIkZhaWx1cmUgJWQgb24gYWRkciAlbHgsIG9mZiAlbHhcbiIsCi0JCQkgLXJldCwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9wZ29mZik7Ci0KKwkJCSAiRmFpbHVyZSAlZCBvbiBvZmYgJWxseCBsZW4gJWx4XG4iLAorCQkJIC1yZXQsICh1bnNpZ25lZCBsb25nIGxvbmcpcGdhZGRyLAorCQkJIHZtYS0+dm1fZW5kIC0gdm1hLT52bV9zdGFydCk7CitiYWlsOgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTExNTQsNiArMTM0NCw4IEBACiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkOwogCiAJcGQgPSBwb3J0X2ZwKGZwKTsKKwlpZiAoIXBkKQorCQlnb3RvIGJhaWw7CiAJZGQgPSBwZC0+cG9ydF9kZDsKIAogCWJpdCA9IHBkLT5wb3J0X3BvcnQgKyBJTkZJTklQQVRIX1JfSU5UUkFWQUlMX1NISUZUOwpAQCAtMTE3Niw3ICsxMzY4LDcgQEAKIAogCWlmICh0YWlsID09IGhlYWQpIHsKIAkJc2V0X2JpdChJUEFUSF9QT1JUX1dBSVRJTkdfUkNWLCAmcGQtPnBvcnRfZmxhZyk7Ci0JCWlmKGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZikgLyogYXJtIHJjdiBpbnRlcnJ1cHQgKi8KKwkJaWYgKGRkLT5pcGF0aF9yaGRyaGVhZF9pbnRyX29mZikgLyogYXJtIHJjdiBpbnRlcnJ1cHQgKi8KIAkJCSh2b2lkKWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmhkcmhlYWQsCiAJCQkJCSAgICAgICBkZC0+aXBhdGhfcmhkcmhlYWRfaW50cl9vZmYKIAkJCQkJICAgICAgIHwgaGVhZCwgcGQtPnBvcnRfcG9ydCk7CkBAIC0xMjAwLDE4ICsxMzkyLDgwIEBACiAJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAogCQkJIGRkLT5pcGF0aF9yY3ZjdHJsKTsKIAorYmFpbDoKIAlyZXR1cm4gcG9sbGZsYWc7CiB9CiAKLXN0YXRpYyBpbnQgdHJ5X2FsbG9jX3BvcnQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgcG9ydCwKLQkJCSAgc3RydWN0IGZpbGUgKmZwKQorc3RhdGljIGludCBpbml0X3N1YnBvcnRzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwKKwkJCSBzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkLAorCQkJIGNvbnN0IHN0cnVjdCBpcGF0aF91c2VyX2luZm8gKnVpbmZvKQogeworCWludCByZXQgPSAwOworCXVuc2lnbmVkIG51bV9zbGF2ZXM7CisJc2l6ZV90IHNpemU7CisKKwkvKiBPbGQgdXNlciBiaW5hcmllcyBkb24ndCBrbm93IGFib3V0IHN1YnBvcnRzICovCisJaWYgKCh1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uICYgMHhmZmZmKSAhPSBJUEFUSF9VU0VSX1NXTUlOT1IpCisJCWdvdG8gYmFpbDsKKwkvKgorCSAqIElmIHRoZSB1c2VyIGlzIHJlcXVlc3RpbmcgemVybyBvciBvbmUgcG9ydCwKKwkgKiBza2lwIHRoZSBzdWJwb3J0IGFsbG9jYXRpb24uCisJICovCisJaWYgKHVpbmZvLT5zcHVfc3VicG9ydF9jbnQgPD0gMSkKKwkJZ290byBiYWlsOworCWlmICh1aW5mby0+c3B1X3N1YnBvcnRfY250ID4gNCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQorCisJbnVtX3NsYXZlcyA9IHVpbmZvLT5zcHVfc3VicG9ydF9jbnQgLSAxOworCXBkLT5zdWJwb3J0X3VyZWdiYXNlID0gdm1hbGxvYyhQQUdFX1NJWkUgKiBudW1fc2xhdmVzKTsKKwlpZiAoIXBkLT5zdWJwb3J0X3VyZWdiYXNlKSB7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gYmFpbDsKKwl9CisJLyogTm90ZTogcGQtPnBvcnRfcmN2aGRycV9zaXplIGlzbid0IGluaXRpYWxpemVkIHlldC4gKi8KKwlzaXplID0gQUxJR04oZGQtPmlwYXRoX3JjdmhkcmNudCAqIGRkLT5pcGF0aF9yY3ZoZHJlbnRzaXplICoKKwkJICAgICBzaXplb2YodTMyKSwgUEFHRV9TSVpFKSAqIG51bV9zbGF2ZXM7CisJcGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UgPSB2bWFsbG9jKHNpemUpOworCWlmICghcGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBiYWlsX3VyZWc7CisJfQorCisJcGQtPnN1YnBvcnRfcmN2ZWdyYnVmID0gdm1hbGxvYyhwZC0+cG9ydF9yY3ZlZ3JidWZfY2h1bmtzICoKKwkJCQkJcGQtPnBvcnRfcmN2ZWdyYnVmX3NpemUgKgorCQkJCQludW1fc2xhdmVzKTsKKwlpZiAoIXBkLT5zdWJwb3J0X3JjdmVncmJ1ZikgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIGJhaWxfcmhkcjsKKwl9CisKKwlwZC0+cG9ydF9zdWJwb3J0X2NudCA9IHVpbmZvLT5zcHVfc3VicG9ydF9jbnQ7CisJcGQtPnBvcnRfc3VicG9ydF9pZCA9IHVpbmZvLT5zcHVfc3VicG9ydF9pZDsKKwlwZC0+YWN0aXZlX3NsYXZlcyA9IDE7CisJZ290byBiYWlsOworCitiYWlsX3JoZHI6CisJdmZyZWUocGQtPnN1YnBvcnRfcmN2aGRyX2Jhc2UpOworYmFpbF91cmVnOgorCXZmcmVlKHBkLT5zdWJwb3J0X3VyZWdiYXNlKTsKKwlwZC0+c3VicG9ydF91cmVnYmFzZSA9IE5VTEw7CitiYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdHJ5X2FsbG9jX3BvcnQoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpbnQgcG9ydCwKKwkJCSAgc3RydWN0IGZpbGUgKmZwLAorCQkJICBjb25zdCBzdHJ1Y3QgaXBhdGhfdXNlcl9pbmZvICp1aW5mbykKK3sKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOwogCWludCByZXQ7CiAKLQlpZiAoIWRkLT5pcGF0aF9wZFtwb3J0XSkgewotCQl2b2lkICpwLCAqcHRtcDsKKwlpZiAoIShwZCA9IGRkLT5pcGF0aF9wZFtwb3J0XSkpIHsKKwkJdm9pZCAqcHRtcDsKIAotCQlwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwYXRoX3BvcnRkYXRhKSwgR0ZQX0tFUk5FTCk7CisJCXBkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGlwYXRoX3BvcnRkYXRhKSwgR0ZQX0tFUk5FTCk7CiAKIAkJLyoKIAkJICogQWxsb2NhdGUgbWVtb3J5IGZvciB1c2UgaW4gaXBhdGhfdGlkX3VwZGF0ZSgpIGp1c3Qgb25jZQpAQCAtMTIyMSwzNCArMTQ3NSwzNiBAQAogCQlwdG1wID0ga21hbGxvYyhkZC0+aXBhdGhfcmN2dGlkY250ICogc2l6ZW9mKHUxNikgKwogCQkJICAgICAgIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKiopLAogCQkJICAgICAgIEdGUF9LRVJORUwpOwotCQlpZiAoIXAgfHwgIXB0bXApIHsKKwkJaWYgKCFwZCB8fCAhcHRtcCkgewogCQkJaXBhdGhfZGV2X2VycihkZCwgIlVuYWJsZSB0byBhbGxvY2F0ZSBwb3J0ZGF0YSAiCiAJCQkJICAgICAgIm1lbW9yeSwgZmFpbGluZyBvcGVuXG4iKTsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlrZnJlZShwKTsKKwkJCWtmcmVlKHBkKTsKIAkJCWtmcmVlKHB0bXApOwogCQkJZ290byBiYWlsOwogCQl9Ci0JCWRkLT5pcGF0aF9wZFtwb3J0XSA9IHA7CisJCWRkLT5pcGF0aF9wZFtwb3J0XSA9IHBkOwogCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfcG9ydCA9IHBvcnQ7CiAJCWRkLT5pcGF0aF9wZFtwb3J0XS0+cG9ydF9kZCA9IGRkOwogCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfdGlkX3BnX2xpc3QgPSBwdG1wOwogCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfd2FpdCk7CiAJfQotCWlmICghZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X2NudCkgewotCQlkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfY250ID0gMTsKLQkJZnAtPnByaXZhdGVfZGF0YSA9ICh2b2lkICopIGRkLT5pcGF0aF9wZFtwb3J0XTsKKwlpZiAoIXBkLT5wb3J0X2NudCkgeworCQlwZC0+dXNlcnZlcnNpb24gPSB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uOworCQlpbml0X3VzZXJfZWdyX3NpemVzKHBkKTsKKwkJaWYgKChyZXQgPSBpbml0X3N1YnBvcnRzKGRkLCBwZCwgdWluZm8pKSAhPSAwKQorCQkJZ290byBiYWlsOwogCQlpcGF0aF9jZGJnKFBST0MsICIlc1sldV0gb3BlbmVkIHVuaXQ6cG9ydCAldToldVxuIiwKIAkJCSAgIGN1cnJlbnQtPmNvbW0sIGN1cnJlbnQtPnBpZCwgZGQtPmlwYXRoX3VuaXQsCiAJCQkgICBwb3J0KTsKLQkJZGQtPmlwYXRoX3BkW3BvcnRdLT5wb3J0X3BpZCA9IGN1cnJlbnQtPnBpZDsKLQkJc3RybmNweShkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfY29tbSwgY3VycmVudC0+Y29tbSwKLQkJCXNpemVvZihkZC0+aXBhdGhfcGRbcG9ydF0tPnBvcnRfY29tbSkpOworCQlwZC0+cG9ydF9jbnQgPSAxOworCQlwb3J0X2ZwKGZwKSA9IHBkOworCQlwZC0+cG9ydF9waWQgPSBjdXJyZW50LT5waWQ7CisJCXN0cm5jcHkocGQtPnBvcnRfY29tbSwgY3VycmVudC0+Y29tbSwgc2l6ZW9mKHBkLT5wb3J0X2NvbW0pKTsKIAkJaXBhdGhfc3RhdHMuc3BzX3BvcnRzKys7CiAJCXJldCA9IDA7Ci0JCWdvdG8gYmFpbDsKLQl9Ci0JcmV0ID0gLUVCVVNZOworCX0gZWxzZQorCQlyZXQgPSAtRUJVU1k7CiAKIGJhaWw6CiAJcmV0dXJuIHJldDsKQEAgLTEyNjQsNyArMTUyMCw4IEBACiAJCQkJICAgICB8IElQQVRIX0xJTktVTkspKTsKIH0KIAotc3RhdGljIGludCBmaW5kX2ZyZWVfcG9ydChpbnQgdW5pdCwgc3RydWN0IGZpbGUgKmZwKQorc3RhdGljIGludCBmaW5kX2ZyZWVfcG9ydChpbnQgdW5pdCwgc3RydWN0IGZpbGUgKmZwLAorCQkJICBjb25zdCBzdHJ1Y3QgaXBhdGhfdXNlcl9pbmZvICp1aW5mbykKIHsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAodW5pdCk7CiAJaW50IHJldCwgaTsKQEAgLTEyNzksOCArMTUzNiw4IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKLQkJcmV0ID0gdHJ5X2FsbG9jX3BvcnQoZGQsIGksIGZwKTsKKwlmb3IgKGkgPSAxOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJcmV0ID0gdHJ5X2FsbG9jX3BvcnQoZGQsIGksIGZwLCB1aW5mbyk7CiAJCWlmIChyZXQgIT0gLUVCVVNZKQogCQkJZ290byBiYWlsOwogCX0KQEAgLTEyOTAsMTMgKzE1NDcsMTQgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGZpbmRfYmVzdF91bml0KHN0cnVjdCBmaWxlICpmcCkKK3N0YXRpYyBpbnQgZmluZF9iZXN0X3VuaXQoc3RydWN0IGZpbGUgKmZwLAorCQkJICBjb25zdCBzdHJ1Y3QgaXBhdGhfdXNlcl9pbmZvICp1aW5mbykKIHsKIAlpbnQgcmV0ID0gMCwgaSwgcHJlZnVuaXQgPSAtMSwgZGV2bWF4OwogCWludCBtYXhvZmFsbHBvcnRzLCBucHJlc2VudCwgbnVwOwogCWludCBuZGV2OwogCi0JKHZvaWQpIGlwYXRoX2NvdW50X3VuaXRzKCZucHJlc2VudCwgJm51cCwgJm1heG9mYWxscG9ydHMpOworCWRldm1heCA9IGlwYXRoX2NvdW50X3VuaXRzKCZucHJlc2VudCwgJm51cCwgJm1heG9mYWxscG9ydHMpOwogCiAJLyoKIAkgKiBUaGlzIGNvZGUgaXMgcHJlc2VudCB0byBhbGxvdyBhIGtub3dsZWRnZWFibGUgcGVyc29uIHRvCkBAIC0xMzQzLDggKzE2MDEsNiBAQAogCiAJaWYgKHByZWZ1bml0ICE9IC0xKQogCQlkZXZtYXggPSBwcmVmdW5pdCArIDE7Ci0JZWxzZQotCQlkZXZtYXggPSBpcGF0aF9jb3VudF91bml0cyhOVUxMLCBOVUxMLCBOVUxMKTsKIHJlY2hlY2s6CiAJZm9yIChpID0gMTsgaSA8IG1heG9mYWxscG9ydHM7IGkrKykgewogCQlmb3IgKG5kZXYgPSBwcmVmdW5pdCAhPSAtMSA/IHByZWZ1bml0IDogMDsgbmRldiA8IGRldm1heDsKQEAgLTEzNTksNyArMTYxNSw3IEBACiAJCQkJICogbmV4dC4KIAkJCQkgKi8KIAkJCQljb250aW51ZTsKLQkJCXJldCA9IHRyeV9hbGxvY19wb3J0KGRkLCBpLCBmcCk7CisJCQlyZXQgPSB0cnlfYWxsb2NfcG9ydChkZCwgaSwgZnAsIHVpbmZvKTsKIAkJCWlmICghcmV0KQogCQkJCWdvdG8gZG9uZTsKIAkJfQpAQCAtMTM5NSwyMiArMTY1MSwxODMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IGZpbmRfc2hhcmVkX3BvcnQoc3RydWN0IGZpbGUgKmZwLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpcGF0aF91c2VyX2luZm8gKnVpbmZvKQoreworCWludCBkZXZtYXgsIG5kZXYsIGk7CisJaW50IHJldCA9IDA7CisKKwlkZXZtYXggPSBpcGF0aF9jb3VudF91bml0cyhOVUxMLCBOVUxMLCBOVUxMKTsKKworCWZvciAobmRldiA9IDA7IG5kZXYgPCBkZXZtYXg7IG5kZXYrKykgeworCQlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBpcGF0aF9sb29rdXAobmRldik7CisKKwkJaWYgKCFkZCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKGkgPSAxOyBpIDwgZGQtPmlwYXRoX2NmZ3BvcnRzOyBpKyspIHsKKwkJCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQgPSBkZC0+aXBhdGhfcGRbaV07CisKKwkJCS8qIFNraXAgcG9ydHMgd2hpY2ggYXJlIG5vdCB5ZXQgb3BlbiAqLworCQkJaWYgKCFwZCB8fCAhcGQtPnBvcnRfY250KQorCQkJCWNvbnRpbnVlOworCQkJLyogU2tpcCBwb3J0IGlmIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIHJlcXVlc3RlZCBvbmUgKi8KKwkJCWlmIChwZC0+cG9ydF9zdWJwb3J0X2lkICE9IHVpbmZvLT5zcHVfc3VicG9ydF9pZCkKKwkJCQljb250aW51ZTsKKwkJCS8qIFZlcmlmeSB0aGUgc2hhcmluZyBwcm9jZXNzIG1hdGNoZXMgdGhlIG1hc3RlciAqLworCQkJaWYgKHBkLT5wb3J0X3N1YnBvcnRfY250ICE9IHVpbmZvLT5zcHVfc3VicG9ydF9jbnQgfHwKKwkJCSAgICBwZC0+dXNlcnZlcnNpb24gIT0gdWluZm8tPnNwdV91c2VydmVyc2lvbiB8fAorCQkJICAgIHBkLT5wb3J0X2NudCA+PSBwZC0+cG9ydF9zdWJwb3J0X2NudCkgeworCQkJCXJldCA9IC1FSU5WQUw7CisJCQkJZ290byBkb25lOworCQkJfQorCQkJcG9ydF9mcChmcCkgPSBwZDsKKwkJCXN1YnBvcnRfZnAoZnApID0gcGQtPnBvcnRfY250Kys7CisJCQl0aWRjdXJzb3JfZnAoZnApID0gMDsKKwkJCXBkLT5hY3RpdmVfc2xhdmVzIHw9IDEgPDwgc3VicG9ydF9mcChmcCk7CisJCQlpcGF0aF9jZGJnKFBST0MsCisJCQkJICAgIiVzWyV1XSAldSBzaGFyaW5nICVzWyV1XSB1bml0OnBvcnQgJXU6JXVcbiIsCisJCQkJICAgY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLAorCQkJCSAgIHN1YnBvcnRfZnAoZnApLAorCQkJCSAgIHBkLT5wb3J0X2NvbW0sIHBkLT5wb3J0X3BpZCwKKwkJCQkgICBkZC0+aXBhdGhfdW5pdCwgcGQtPnBvcnRfcG9ydCk7CisJCQlyZXQgPSAxOworCQkJZ290byBkb25lOworCQl9CisJfQorCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgaXBhdGhfb3BlbihzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApCiB7Ci0JaW50IHJldCwgdXNlcl9taW5vcjsKKwkvKiBUaGUgcmVhbCB3b3JrIGlzIHBlcmZvcm1lZCBsYXRlciBpbiBpcGF0aF9hc3NpZ25fcG9ydCgpICovCisJZnAtPnByaXZhdGVfZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpcGF0aF9maWxlZGF0YSksIEdGUF9LRVJORUwpOworCXJldHVybiBmcC0+cHJpdmF0ZV9kYXRhID8gMCA6IC1FTk9NRU07Cit9CisKKworLyogR2V0IHBvcnQgZWFybHksIHNvIGNhbiBzZXQgYWZmaW5pdHkgcHJpb3IgdG8gbWVtb3J5IGFsbG9jYXRpb24gKi8KK3N0YXRpYyBpbnQgaXBhdGhfYXNzaWduX3BvcnQoc3RydWN0IGZpbGUgKmZwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfaW5mbyAqdWluZm8pCit7CisJaW50IHJldDsKKwlpbnQgaV9taW5vcjsKKwl1bnNpZ25lZCBzd21pbm9yOworCisJLyogQ2hlY2sgdG8gYmUgc3VyZSB3ZSBoYXZlbid0IGFscmVhZHkgaW5pdGlhbGl6ZWQgdGhpcyBmaWxlICovCisJaWYgKHBvcnRfZnAoZnApKSB7CisJCXJldCA9IC1FSU5WQUw7CisJCWdvdG8gZG9uZTsKKwl9CisKKwkvKiBmb3Igbm93LCBpZiBtYWpvciB2ZXJzaW9uIGlzIGRpZmZlcmVudCwgYmFpbCAqLworCWlmICgodWluZm8tPnNwdV91c2VydmVyc2lvbiA+PiAxNikgIT0gSVBBVEhfVVNFUl9TV01BSk9SKSB7CisJCWlwYXRoX2RiZygiVXNlciBtYWpvciB2ZXJzaW9uICVkIG5vdCBzYW1lIGFzIGRyaXZlciAiCisJCQkgICJtYWpvciAlZFxuIiwgdWluZm8tPnNwdV91c2VydmVyc2lvbiA+PiAxNiwKKwkJCSAgSVBBVEhfVVNFUl9TV01BSk9SKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBkb25lOworCX0KKworCXN3bWlub3IgPSB1aW5mby0+c3B1X3VzZXJ2ZXJzaW9uICYgMHhmZmZmOworCWlmIChzd21pbm9yICE9IElQQVRIX1VTRVJfU1dNSU5PUikKKwkJaXBhdGhfZGJnKCJVc2VyIG1pbm9yIHZlcnNpb24gJWQgbm90IHNhbWUgYXMgZHJpdmVyICIKKwkJCSAgIm1pbm9yICVkXG4iLCBzd21pbm9yLCBJUEFUSF9VU0VSX1NXTUlOT1IpOwogCiAJbXV0ZXhfbG9jaygmaXBhdGhfbXV0ZXgpOwogCi0JdXNlcl9taW5vciA9IGltaW5vcihpbikgLSBJUEFUSF9VU0VSX01JTk9SX0JBU0U7Ci0JaXBhdGhfY2RiZyhWRVJCT1NFLCAib3BlbiBvbiBkZXYgJWx4IChtaW5vciAlZClcbiIsCi0JCSAgIChsb25nKWluLT5pX3JkZXYsIHVzZXJfbWlub3IpOworCWlmIChzd21pbm9yID09IElQQVRIX1VTRVJfU1dNSU5PUiAmJiB1aW5mby0+c3B1X3N1YnBvcnRfY250ICYmCisJICAgIChyZXQgPSBmaW5kX3NoYXJlZF9wb3J0KGZwLCB1aW5mbykpKSB7CisJCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCQlpZiAocmV0ID4gMCkKKwkJCXJldCA9IDA7CisJCWdvdG8gZG9uZTsKKwl9CiAKLQlpZiAodXNlcl9taW5vcikKLQkJcmV0ID0gZmluZF9mcmVlX3BvcnQodXNlcl9taW5vciAtIDEsIGZwKTsKKwlpX21pbm9yID0gaW1pbm9yKGZwLT5mX2RlbnRyeS0+ZF9pbm9kZSkgLSBJUEFUSF9VU0VSX01JTk9SX0JBU0U7CisJaXBhdGhfY2RiZyhWRVJCT1NFLCAib3BlbiBvbiBkZXYgJWx4IChtaW5vciAlZClcbiIsCisJCSAgIChsb25nKWZwLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9yZGV2LCBpX21pbm9yKTsKKworCWlmIChpX21pbm9yKQorCQlyZXQgPSBmaW5kX2ZyZWVfcG9ydChpX21pbm9yIC0gMSwgZnAsIHVpbmZvKTsKIAllbHNlCi0JCXJldCA9IGZpbmRfYmVzdF91bml0KGZwKTsKKwkJcmV0ID0gZmluZF9iZXN0X3VuaXQoZnAsIHVpbmZvKTsKIAogCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCitkb25lOgorCXJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludCBpcGF0aF9kb191c2VyX2luaXQoc3RydWN0IGZpbGUgKmZwLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGlwYXRoX3VzZXJfaW5mbyAqdWluZm8pCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOworCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKKwl1MzIgaGVhZDMyOworCisJcGQgPSBwb3J0X2ZwKGZwKTsKKwlkZCA9IHBkLT5wb3J0X2RkOworCisJaWYgKHVpbmZvLT5zcHVfcmN2aGRyc2l6ZSkgeworCQlyZXQgPSBpcGF0aF9zZXRyY3ZoZHJzaXplKGRkLCB1aW5mby0+c3B1X3JjdmhkcnNpemUpOworCQlpZiAocmV0KQorCQkJZ290byBkb25lOworCX0KKworCS8qIGZvciBub3cgd2UgZG8gbm90aGluZyB3aXRoIHJjdmhkcmNudDogdWluZm8tPnNwdV9yY3ZoZHJjbnQgKi8KKworCS8qIGZvciByaWdodCBub3csIGtlcm5lbCBwaW9idWZzIGFyZSBhdCBlbmQsIHNvIHBvcnQgMSBpcyBhdCAwICovCisJcGQtPnBvcnRfcGlvYnVmcyA9IGRkLT5pcGF0aF9waW9idWZiYXNlICsKKwkJZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwZC0+cG9ydF9wb3J0IC0gMSkgKiBkZC0+aXBhdGhfcGFsaWduOworCWlwYXRoX2NkYmcoVkVSQk9TRSwgIlNldCBiYXNlIG9mIHBpb2J1ZnMgZm9yIHBvcnQgJXUgdG8gMHgleFxuIiwKKwkJICAgcGQtPnBvcnRfcG9ydCwgcGQtPnBvcnRfcGlvYnVmcyk7CisKKwkvKgorCSAqIE5vdyBhbGxvY2F0ZSB0aGUgcmN2aGRyIFEgYW5kIGVhZ2VyIFRJRHM7IHNraXAgdGhlIFRJRAorCSAqIGFycmF5IGZvciB0aW1lIGJlaW5nLiAgSWYgcGQtPnBvcnRfcG9ydCA+IGNoaXAtc3VwcG9ydGVkLAorCSAqIHdlIG5lZWQgdG8gZG8gZXh0cmEgc3R1ZmYgaGVyZSB0byBoYW5kbGUgYnkgaGFuZGxpbmcgb3ZlcmZsb3cKKwkgKiB0aHJvdWdoIHBvcnQgMCwgc29tZWRheQorCSAqLworCXJldCA9IGlwYXRoX2NyZWF0ZV9yY3ZoZHJxKGRkLCBwZCk7CisJaWYgKCFyZXQpCisJCXJldCA9IGlwYXRoX2NyZWF0ZV91c2VyX2VncihwZCk7CisJaWYgKHJldCkKKwkJZ290byBkb25lOworCisJLyoKKwkgKiBzZXQgdGhlIGVhZ2VyIGhlYWQgcmVnaXN0ZXIgZm9yIHRoaXMgcG9ydCB0byB0aGUgY3VycmVudCB2YWx1ZXMKKwkgKiBvZiB0aGUgdGFpbCBwb2ludGVycywgc2luY2Ugd2UgZG9uJ3Qga25vdyBpZiB0aGV5IHdlcmUKKwkgKiB1cGRhdGVkIG9uIGxhc3QgdXNlIG9mIHRoZSBwb3J0LgorCSAqLworCWhlYWQzMiA9IGlwYXRoX3JlYWRfdXJlZzMyKGRkLCB1cl9yY3ZlZ3JpbmRleHRhaWwsIHBkLT5wb3J0X3BvcnQpOworCWlwYXRoX3dyaXRlX3VyZWcoZGQsIHVyX3JjdmVncmluZGV4aGVhZCwgaGVhZDMyLCBwZC0+cG9ydF9wb3J0KTsKKwlkZC0+aXBhdGhfbGFzdGVncmhlYWRzW3BkLT5wb3J0X3BvcnRdID0gLTE7CisJZGQtPmlwYXRoX2xhc3RyY3ZoZHJxdGFpbHNbcGQtPnBvcnRfcG9ydF0gPSAtMTsKKwlpcGF0aF9jZGJnKFZFUkJPU0UsICJXcm90ZSBwb3J0JWQgZWdyaGVhZCAleCBmcm9tIHRhaWwgcmVnc1xuIiwKKwkJcGQtPnBvcnRfcG9ydCwgaGVhZDMyKTsKKwlwZC0+cG9ydF90aWRjdXJzb3IgPSAwOwkvKiBzdGFydCBhdCBiZWdpbm5pbmcgYWZ0ZXIgb3BlbiAqLworCS8qCisJICogbm93IGVuYWJsZSB0aGUgcG9ydDsgdGhlIHRhaWwgcmVnaXN0ZXJzIHdpbGwgYmUgd3JpdHRlbiB0byBtZW1vcnkKKwkgKiBieSB0aGUgY2hpcCBhcyBzb29uIGFzIGl0IHNlZXMgdGhlIHdyaXRlIHRvCisJICogZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLiAgVGhlIHVwZGF0ZSBvbmx5IGhhcHBlbnMgb24KKwkgKiB0cmFuc2l0aW9uIGZyb20gMCB0byAxLCBzbyBjbGVhciBpdCBmaXJzdCwgdGhlbiBzZXQgaXQgYXMgcGFydCBvZgorCSAqIGVuYWJsaW5nIHRoZSBwb3J0LiAgVGhpcyB3aWxsICh2ZXJ5IGJyaWVmbHkpIGFmZmVjdCBhbnkgb3RoZXIKKwkgKiBvcGVuIHBvcnRzLCBidXQgaXQgc2hvdWxkbid0IGJlIGxvbmcgZW5vdWdoIHRvIGJlIGFuIGlzc3VlLgorCSAqIFdlIGV4cGxpY3RseSBzZXQgdGhlIGluLW1lbW9yeSBjb3B5IHRvIDAgYmVmb3JlaGFuZCwgc28gd2UgZG9uJ3QKKwkgKiBoYXZlIHRvIHdhaXQgdG8gYmUgc3VyZSB0aGUgRE1BIHVwZGF0ZSBoYXMgaGFwcGVuZWQuCisJICovCisJKih2b2xhdGlsZSB1NjQgKilwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkciA9IDBVTEw7CisJc2V0X2JpdChJTkZJTklQQVRIX1JfUE9SVEVOQUJMRV9TSElGVCArIHBkLT5wb3J0X3BvcnQsCisJCSZkZC0+aXBhdGhfcmN2Y3RybCk7CisJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9yY3ZjdHJsLAorCQkJIGRkLT5pcGF0aF9yY3ZjdHJsICYgfklORklOSVBBVEhfUl9UQUlMVVBEKTsKKwlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3JjdmN0cmwsCisJCQkgZGQtPmlwYXRoX3JjdmN0cmwpOworZG9uZToKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xNDMzLDYgKzE4NTAsOCBAQAogCQlpZiAoIWRkLT5pcGF0aF9wYWdlc2hhZG93W2ldKQogCQkJY29udGludWU7CiAKKwkJcGNpX3VubWFwX3BhZ2UoZGQtPnBjaWRldiwgZGQtPmlwYXRoX3BoeXNzaGFkb3dbaV0sCisJCQlQQUdFX1NJWkUsIFBDSV9ETUFfRlJPTURFVklDRSk7CiAJCWlwYXRoX3JlbGVhc2VfdXNlcl9wYWdlc19vbl9jbG9zZSgmZGQtPmlwYXRoX3BhZ2VzaGFkb3dbaV0sCiAJCQkJCQkgIDEpOwogCQlkZC0+aXBhdGhfcGFnZXNoYWRvd1tpXSA9IE5VTEw7CkBAIC0xNDUzLDYgKzE4NzIsNyBAQAogc3RhdGljIGludCBpcGF0aF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmluLCBzdHJ1Y3QgZmlsZSAqZnApCiB7CiAJaW50IHJldCA9IDA7CisJc3RydWN0IGlwYXRoX2ZpbGVkYXRhICpmZDsKIAlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkOwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZDsKIAl1bnNpZ25lZCBwb3J0OwpAQCAtMTQ2Miw5ICsxODgyLDI0IEBACiAKIAltdXRleF9sb2NrKCZpcGF0aF9tdXRleCk7CiAKLQlwZCA9IHBvcnRfZnAoZnApOwotCXBvcnQgPSBwZC0+cG9ydF9wb3J0OworCWZkID0gKHN0cnVjdCBpcGF0aF9maWxlZGF0YSAqKSBmcC0+cHJpdmF0ZV9kYXRhOwogCWZwLT5wcml2YXRlX2RhdGEgPSBOVUxMOworCXBkID0gZmQtPnBkOworCWlmICghcGQpIHsKKwkJbXV0ZXhfdW5sb2NrKCZpcGF0aF9tdXRleCk7CisJCWdvdG8gYmFpbDsKKwl9CisJaWYgKC0tcGQtPnBvcnRfY250KSB7CisJCS8qCisJCSAqIFhYWCBJZiB0aGUgbWFzdGVyIGNsb3NlcyB0aGUgcG9ydCBiZWZvcmUgdGhlIHNsYXZlKHMpLAorCQkgKiByZXZva2UgdGhlIG1tYXAgZm9yIHRoZSBlYWdlciByZWNlaXZlIHF1ZXVlIHNvCisJCSAqIHRoZSBzbGF2ZShzKSBkb24ndCB3YWl0IGZvciByZWNlaXZlIGRhdGEgZm9yZXZlci4KKwkJICovCisJCXBkLT5hY3RpdmVfc2xhdmVzICY9IH4oMSA8PCBmZC0+c3VicG9ydCk7CisJCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOworCQlnb3RvIGJhaWw7CisJfQorCXBvcnQgPSBwZC0+cG9ydF9wb3J0OwogCWRkID0gcGQtPnBvcnRfZGQ7CiAKIAlpZiAocGQtPnBvcnRfaGRycWZ1bGwpIHsKQEAgLTE1MDMsOCArMTkzOCw2IEBACiAKIAkJLyogY2xlYW4gdXAgdGhlIHBrZXlzIGZvciB0aGlzIHBvcnQgdXNlciAqLwogCQlpcGF0aF9jbGVhbl9wYXJ0X2tleShwZCwgZGQpOwotCi0KIAkJLyoKIAkJICogYmUgcGFyYW5vaWQsIGFuZCBuZXZlciB3cml0ZSAwJ3MgdG8gdGhlc2UsIGp1c3QgdXNlIGFuCiAJCSAqIHVudXNlZCBwYXJ0IG9mIHRoZSBwb3J0IDAgdGFpbCBwYWdlLiAgT2YgY291cnNlLApAQCAtMTUyMywzOSArMTk1Niw0OSBAQAogCQlpID0gZGQtPmlwYXRoX3BidWZzcG9ydCAqIChwb3J0IC0gMSk7CiAJCWlwYXRoX2Rpc2FybV9waW9idWZzKGRkLCBpLCBkZC0+aXBhdGhfcGJ1ZnNwb3J0KTsKIAorCQlkZC0+aXBhdGhfZl9jbGVhcl90aWRzKGRkLCBwZC0+cG9ydF9wb3J0KTsKKwogCQlpZiAoZGQtPmlwYXRoX3BhZ2VzaGFkb3cpCiAJCQl1bmxvY2tfZXhwZWN0ZWRfdGlkcyhwZCk7CiAJCWlwYXRoX3N0YXRzLnNwc19wb3J0cy0tOwogCQlpcGF0aF9jZGJnKFBST0MsICIlc1sldV0gY2xvc2VkIHBvcnQgJXU6JXVcbiIsCiAJCQkgICBwZC0+cG9ydF9jb21tLCBwZC0+cG9ydF9waWQsCiAJCQkgICBkZC0+aXBhdGhfdW5pdCwgcG9ydCk7Ci0KLQkJZGQtPmlwYXRoX2ZfY2xlYXJfdGlkcyhkZCwgcGQtPnBvcnRfcG9ydCk7CiAJfQogCi0JcGQtPnBvcnRfY250ID0gMDsKIAlwZC0+cG9ydF9waWQgPSAwOwotCiAJZGQtPmlwYXRoX3BkW3BkLT5wb3J0X3BvcnRdID0gTlVMTDsgLyogYmVmb3JlIHJlbGVhc2luZyBtdXRleCAqLwogCW11dGV4X3VubG9jaygmaXBhdGhfbXV0ZXgpOwogCWlwYXRoX2ZyZWVfcGRkYXRhKGRkLCBwZCk7IC8qIGFmdGVyIHJlbGVhc2luZyB0aGUgbXV0ZXggKi8KIAorYmFpbDoKKwlrZnJlZShmZCk7CiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCBpcGF0aF9wb3J0X2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKK3N0YXRpYyBpbnQgaXBhdGhfcG9ydF9pbmZvKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQsIHUxNiBzdWJwb3J0LAogCQkJICAgc3RydWN0IGlwYXRoX3BvcnRfaW5mbyBfX3VzZXIgKnVpbmZvKQogewogCXN0cnVjdCBpcGF0aF9wb3J0X2luZm8gaW5mbzsKIAlpbnQgbnVwOwogCWludCByZXQ7CisJc2l6ZV90IHN6OwogCiAJKHZvaWQpIGlwYXRoX2NvdW50X3VuaXRzKE5VTEwsICZudXAsIE5VTEwpOwogCWluZm8ubnVtX2FjdGl2ZSA9IG51cDsKIAlpbmZvLnVuaXQgPSBwZC0+cG9ydF9kZC0+aXBhdGhfdW5pdDsKIAlpbmZvLnBvcnQgPSBwZC0+cG9ydF9wb3J0OworCWluZm8uc3VicG9ydCA9IHN1YnBvcnQ7CisJLyogRG9uJ3QgcmV0dXJuIG5ldyBmaWVsZHMgaWYgb2xkIGxpYnJhcnkgb3BlbmVkIHRoZSBwb3J0LiAqLworCWlmICgocGQtPnVzZXJ2ZXJzaW9uICYgMHhmZmZmKSA9PSBJUEFUSF9VU0VSX1NXTUlOT1IpIHsKKwkJLyogTnVtYmVyIG9mIHVzZXIgcG9ydHMgYXZhaWxhYmxlIGZvciB0aGlzIGRldmljZS4gKi8KKwkJaW5mby5udW1fcG9ydHMgPSBwZC0+cG9ydF9kZC0+aXBhdGhfY2ZncG9ydHMgLSAxOworCQlpbmZvLm51bV9zdWJwb3J0cyA9IHBkLT5wb3J0X3N1YnBvcnRfY250OworCQlzeiA9IHNpemVvZihpbmZvKTsKKwl9IGVsc2UKKwkJc3ogPSBzaXplb2YoaW5mbykgLSAyICogc2l6ZW9mKHUxNik7CiAKLQlpZiAoY29weV90b191c2VyKHVpbmZvLCAmaW5mbywgc2l6ZW9mKGluZm8pKSkgeworCWlmIChjb3B5X3RvX3VzZXIodWluZm8sICZpbmZvLCBzeikpIHsKIAkJcmV0ID0gLUVGQVVMVDsKIAkJZ290byBiYWlsOwogCX0KQEAgLTE1NjUsNiArMjAwOCwxNiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgaXBhdGhfZ2V0X3NsYXZlX2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwKKwkJCQl2b2lkIF9fdXNlciAqc2xhdmVfbWFza19hZGRyKQoreworCWludCByZXQgPSAwOworCisJaWYgKGNvcHlfdG9fdXNlcihzbGF2ZV9tYXNrX2FkZHIsICZwZC0+YWN0aXZlX3NsYXZlcywgc2l6ZW9mKHUzMikpKQorCQlyZXQgPSAtRUZBVUxUOworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGlwYXRoX3dyaXRlKHN0cnVjdCBmaWxlICpmcCwgY29uc3QgY2hhciBfX3VzZXIgKmRhdGEsCiAJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqb2ZmKQogewpAQCAtMTU5MSw2ICsyMDQ0LDggQEAKIAljb25zdW1lZCA9IHNpemVvZihjbWQudHlwZSk7CiAKIAlzd2l0Y2ggKGNtZC50eXBlKSB7CisJY2FzZSBJUEFUSF9DTURfQVNTSUdOX1BPUlQ6CisJY2FzZSBfX0lQQVRIX0NNRF9VU0VSX0lOSVQ6CiAJY2FzZSBJUEFUSF9DTURfVVNFUl9JTklUOgogCQljb3B5ID0gc2l6ZW9mKGNtZC5jbWQudXNlcl9pbmZvKTsKIAkJZGVzdCA9ICZjbWQuY21kLnVzZXJfaW5mbzsKQEAgLTE2MTcsNiArMjA3MiwxMSBAQAogCQlkZXN0ID0gJmNtZC5jbWQucGFydF9rZXk7CiAJCXNyYyA9ICZ1Y21kLT5jbWQucGFydF9rZXk7CiAJCWJyZWFrOworCWNhc2UgSVBBVEhfQ01EX1NMQVZFX0lORk86CisJCWNvcHkgPSBzaXplb2YoY21kLmNtZC5zbGF2ZV9tYXNrX2FkZHIpOworCQlkZXN0ID0gJmNtZC5jbWQuc2xhdmVfbWFza19hZGRyOworCQlzcmMgPSAmdWNtZC0+Y21kLnNsYXZlX21hc2tfYWRkcjsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBiYWlsOwpAQCAtMTYzNCwzNCArMjA5NCw1NSBAQAogCiAJY29uc3VtZWQgKz0gY29weTsKIAlwZCA9IHBvcnRfZnAoZnApOworCWlmICghcGQgJiYgY21kLnR5cGUgIT0gX19JUEFUSF9DTURfVVNFUl9JTklUICYmCisJCWNtZC50eXBlICE9IElQQVRIX0NNRF9BU1NJR05fUE9SVCkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGJhaWw7CisJfQogCiAJc3dpdGNoIChjbWQudHlwZSkgeworCWNhc2UgSVBBVEhfQ01EX0FTU0lHTl9QT1JUOgorCQlyZXQgPSBpcGF0aF9hc3NpZ25fcG9ydChmcCwgJmNtZC5jbWQudXNlcl9pbmZvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gYmFpbDsKKwkJYnJlYWs7CisJY2FzZSBfX0lQQVRIX0NNRF9VU0VSX0lOSVQ6CisJCS8qIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LCBnZXQgcG9ydCBmaXJzdCAqLworCQlyZXQgPSBpcGF0aF9hc3NpZ25fcG9ydChmcCwgJmNtZC5jbWQudXNlcl9pbmZvKTsKKwkJaWYgKHJldCkKKwkJCWdvdG8gYmFpbDsKKwkJLyogYW5kIGZhbGwgdGhyb3VnaCB0byBjdXJyZW50IHZlcnNpb24uICovCiAJY2FzZSBJUEFUSF9DTURfVVNFUl9JTklUOgotCQlyZXQgPSBpcGF0aF9kb191c2VyX2luaXQocGQsICZjbWQuY21kLnVzZXJfaW5mbyk7Ci0JCWlmIChyZXQgPCAwKQorCQlyZXQgPSBpcGF0aF9kb191c2VyX2luaXQoZnAsICZjbWQuY21kLnVzZXJfaW5mbyk7CisJCWlmIChyZXQpCiAJCQlnb3RvIGJhaWw7CiAJCXJldCA9IGlwYXRoX2dldF9iYXNlX2luZm8oCi0JCQlwZCwgKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKQorCQkJZnAsICh2b2lkIF9fdXNlciAqKSAodW5zaWduZWQgbG9uZykKIAkJCWNtZC5jbWQudXNlcl9pbmZvLnNwdV9iYXNlX2luZm8sCiAJCQljbWQuY21kLnVzZXJfaW5mby5zcHVfYmFzZV9pbmZvX3NpemUpOwogCQlicmVhazsKIAljYXNlIElQQVRIX0NNRF9SRUNWX0NUUkw6Ci0JCXJldCA9IGlwYXRoX21hbmFnZV9yY3ZxKHBkLCBjbWQuY21kLnJlY3ZfY3RybCk7CisJCXJldCA9IGlwYXRoX21hbmFnZV9yY3ZxKHBkLCBzdWJwb3J0X2ZwKGZwKSwgY21kLmNtZC5yZWN2X2N0cmwpOwogCQlicmVhazsKIAljYXNlIElQQVRIX0NNRF9QT1JUX0lORk86Ci0JCXJldCA9IGlwYXRoX3BvcnRfaW5mbyhwZCwKKwkJcmV0ID0gaXBhdGhfcG9ydF9pbmZvKHBkLCBzdWJwb3J0X2ZwKGZwKSwKIAkJCQkgICAgICAoc3RydWN0IGlwYXRoX3BvcnRfaW5mbyBfX3VzZXIgKikKIAkJCQkgICAgICAodW5zaWduZWQgbG9uZykgY21kLmNtZC5wb3J0X2luZm8pOwogCQlicmVhazsKIAljYXNlIElQQVRIX0NNRF9USURfVVBEQVRFOgotCQlyZXQgPSBpcGF0aF90aWRfdXBkYXRlKHBkLCAmY21kLmNtZC50aWRfaW5mbyk7CisJCXJldCA9IGlwYXRoX3RpZF91cGRhdGUocGQsIGZwLCAmY21kLmNtZC50aWRfaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgSVBBVEhfQ01EX1RJRF9GUkVFOgotCQlyZXQgPSBpcGF0aF90aWRfZnJlZShwZCwgJmNtZC5jbWQudGlkX2luZm8pOworCQlyZXQgPSBpcGF0aF90aWRfZnJlZShwZCwgc3VicG9ydF9mcChmcCksICZjbWQuY21kLnRpZF9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBJUEFUSF9DTURfU0VUX1BBUlRfS0VZOgogCQlyZXQgPSBpcGF0aF9zZXRfcGFydF9rZXkocGQsIGNtZC5jbWQucGFydF9rZXkpOwogCQlicmVhazsKKwljYXNlIElQQVRIX0NNRF9TTEFWRV9JTkZPOgorCQlyZXQgPSBpcGF0aF9nZXRfc2xhdmVfaW5mbyhwZCwKKwkJCQkJICAgKHZvaWQgX191c2VyICopICh1bnNpZ25lZCBsb25nKQorCQkJCQkgICBjbWQuY21kLnNsYXZlX21hc2tfYWRkcik7CisJCWJyZWFrOwogCX0KIAogCWlmIChyZXQgPj0gMCkKQEAgLTE4NTgsNCArMjMzOSwzIEBACiBiYWlsOgogCXJldHVybjsKIH0KLQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ZzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwppbmRleCBhNWViMzBhLi5kOWZmMjgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfZnMuYwpAQCAtNjEsMTQgKzYxLDEzIEBACiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJaW5vZGUtPmlfdWlkID0gMDsKIAlpbm9kZS0+aV9naWQgPSAwOwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7CiAJaWYgKChtb2RlICYgU19JRk1UKSA9PSBTX0lGRElSKSB7CiAJCWlub2RlLT5pX29wID0gJnNpbXBsZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtPmlfbmxpbmsrKzsKLQkJZGlyLT5pX25saW5rKys7CisJCWluY19ubGluayhpbm9kZSk7CisJCWluY19ubGluayhkaXIpOwogCX0KIAogCWlub2RlLT5pX2ZvcCA9IGZvcHM7CkBAIC0xMTksNyArMTE4LDcgQEAKIAl1MTYgaTsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAKLQlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCiAJZm9yIChpID0gMDsgaSA8IE5VTV9DT1VOVEVSUzsgaSsrKQogCQljb3VudGVyc1tpXSA9IGlwYXRoX3NuYXBfY250cihkZCwgaSk7CkBAIC0xMzksNyArMTM4LDcgQEAKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAJdTY0IGd1aWQ7CiAKLQlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCiAJZ3VpZCA9IGJlNjRfdG9fY3B1KGRkLT5pcGF0aF9ndWlkKTsKIApAQCAtMTc4LDcgKzE3Nyw3IEBACiAJdTMyIHRtcCwgdG1wMjsKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAKLQlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCiAJLyogc28gd2Ugb25seSBpbml0aWFsaXplIG5vbi16ZXJvIGZpZWxkcy4gKi8KIAltZW1zZXQocG9ydGluZm8sIDAsIHNpemVvZiBwb3J0aW5mbyk7CkBAIC0zMjUsNyArMzI0LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAotCWRkID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAJaWYgKGlwYXRoX2VlcHJvbV9yZWFkKGRkLCBwb3MsIHRtcCwgY291bnQpKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJmYWlsZWQgdG8gcmVhZCBmcm9tIGZsYXNoXG4iKTsKIAkJcmV0ID0gLUVOWElPOwpAQCAtMzU3LDE5ICszNTYsMTYgQEAKIAogCXBvcyA9ICpwcG9zOwogCi0JaWYgKCBwb3MgPCAwKSB7CisJaWYgKHBvcyAhPSAwKSB7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAocG9zID49IHNpemVvZihzdHJ1Y3QgaXBhdGhfZmxhc2gpKSB7Ci0JCXJldCA9IDA7CisJaWYgKGNvdW50ICE9IHNpemVvZihzdHJ1Y3QgaXBhdGhfZmxhc2gpKSB7CisJCXJldCA9IC1FSU5WQUw7CiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlpZiAoY291bnQgPiBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSAtIHBvcykKLQkJY291bnQgPSBzaXplb2Yoc3RydWN0IGlwYXRoX2ZsYXNoKSAtIHBvczsKLQogCXRtcCA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghdG1wKSB7CiAJCXJldCA9IC1FTk9NRU07CkBAIC0zODEsNyArMzc3LDcgQEAKIAkJZ290byBiYWlsX3RtcDsKIAl9CiAKLQlkZCA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJZGQgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWlmIChpcGF0aF9lZXByb21fd3JpdGUoZGQsIHBvcywgdG1wLCBjb3VudCkpIHsKIAkJcmV0ID0gLUVOWElPOwogCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIHdyaXRlIHRvIGZsYXNoXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjExMC5jCmluZGV4IGJmMjQ1NWEuLjllNGU4ZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTEwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMTAuYwpAQCAtMjUyLDggKzI1Miw4IEBACiB9OwogCiAvKiBrcl9pbnRzdGF0dXMsIGtyX2ludGNsZWFyLCBrcl9pbnRtYXNrIGJpdHMgKi8KLSNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLIDB4MUZGCi0jZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9NQVNLIDB4MUZGCisjZGVmaW5lIElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSyAoKDFVPDw5KS0xKQorI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSyAoKDFVPDw5KS0xKQogCiAvKiBrcl9od2VycmNsZWFyLCBrcl9od2Vycm1hc2ssIGtyX2h3ZXJyc3RhdHVzLCBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfSFdFX0hUQ01FTVBBUklUWUVSUl9TSElGVCAwCkBAIC0zMzgsNyArMzM4LDcgQEAKIAlpZiAoY3JjYml0cykgewogCQl1MTYgY3RybDAsIGN0cmwxOwogCQlzbnByaW50ZihiaXRzbXNnLCBzaXplb2YgYml0c21zZywKLQkJCSAiW0hUJXMgbGFuZSAlcyBDUkMgKCVsbHgpOyBpZ25vcmUgdGlsbCByZWxvYWRdIiwKKwkJCSAiW0hUJXMgbGFuZSAlcyBDUkMgKCVsbHgpOyBwb3dlcmN5Y2xlIHRvIGNvbXBsZXRlbHkgY2xlYXJdIiwKIAkJCSAhKGNyY2JpdHMgJiBfSVBBVEhfSFRMSU5LMV9DUkNCSVRTKSA/CiAJCQkgIjAgKEEpIiA6ICghKGNyY2JpdHMgJiBfSVBBVEhfSFRMSU5LMF9DUkNCSVRTKQogCQkJCSAgICA/ICIxIChCKSIgOiAiMCsxIChBK0IpIiksCkBAIC0zODksMTcgKzM4OSwyOCBAQAogCQkJCSAgICAgX0lQQVRIX0hUTElOSzFfQ1JDQklUUykpKTsKIH0KIAorLyogNjExMCBzcGVjaWZpYyBoYXJkd2FyZSBlcnJvcnMuLi4gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXBhdGhfaHdlcnJvcl9tc2dzIGlwYXRoXzYxMTBfaHdlcnJvcl9tc2dzW10gPSB7CisJSU5GSU5JUEFUSF9IV0VfTVNHKEhUQ0JVU0lSRVFQQVJJVFlFUlIsICJIVEMgSXJlcSBQYXJpdHkiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coSFRDQlVTVFJFUVBBUklUWUVSUiwgIkhUQyBUcmVxIFBhcml0eSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhIVENCVVNUUkVTUFBBUklUWUVSUiwgIkhUQyBUcmVzcCBQYXJpdHkiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coSFRDTUlTQ0VSUjUsICJIVCBjb3JlIE1pc2M1IiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKEhUQ01JU0NFUlI2LCAiSFQgY29yZSBNaXNjNiIpLAorCUlORklOSVBBVEhfSFdFX01TRyhIVENNSVNDRVJSNywgIkhUIGNvcmUgTWlzYzciKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUlhEU1lOQ01FTVBBUklUWUVSUiwgIlJ4IERzeW5jIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFNFUkRFU1BMTEZBSUxFRCwgIlNlckRlcyBQTEwiKSwKK307CisKIC8qKgotICogaXBhdGhfaHRfaGFuZGxlX2h3ZXJyb3JzIC0gZGlzcGxheSBoYXJkd2FyZSBlcnJvcnMKKyAqIGlwYXRoX2h0X2hhbmRsZV9od2Vycm9ycyAtIGRpc3BsYXkgaGFyZHdhcmUgZXJyb3JzLgogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKICAqIEBtc2c6IHRoZSBvdXRwdXQgYnVmZmVyCiAgKiBAbXNnbDogdGhlIHNpemUgb2YgdGhlIG91dHB1dCBidWZmZXIKICAqCi0gKiBVc2Ugc2FtZSBtc2cgYnVmZmVyIGFzIHJlZ3VsYXIgZXJyb3JzIHRvIGF2b2lkCi0gKiBleGNlc3NpdmUgc3RhY2sgdXNlLiAgTW9zdCBoYXJkd2FyZSBlcnJvcnMgYXJlIGNhdGFzdHJvcGhpYywgYnV0IGZvcgotICogcmlnaHQgbm93LCB3ZSdsbCBwcmludCB0aGVtIGFuZCBjb250aW51ZS4KLSAqIFdlIHJldXNlIHRoZSBzYW1lIG1lc3NhZ2UgYnVmZmVyIGFzIGlwYXRoX2hhbmRsZV9lcnJvcnMoKSB0byBhdm9pZAotICogZXhjZXNzaXZlIHN0YWNrIHVzYWdlLgorICogVXNlIHNhbWUgbXNnIGJ1ZmZlciBhcyByZWd1bGFyIGVycm9ycyB0byBhdm9pZCBleGNlc3NpdmUgc3RhY2sKKyAqIHVzZS4gIE1vc3QgaGFyZHdhcmUgZXJyb3JzIGFyZSBjYXRhc3Ryb3BoaWMsIGJ1dCBmb3IgcmlnaHQgbm93LAorICogd2UnbGwgcHJpbnQgdGhlbSBhbmQgY29udGludWUuICBXZSByZXVzZSB0aGUgc2FtZSBtZXNzYWdlIGJ1ZmZlciBhcworICogaXBhdGhfaGFuZGxlX2Vycm9ycygpIHRvIGF2b2lkIGV4Y2Vzc2l2ZSBzdGFjayB1c2FnZS4KICAqLwogc3RhdGljIHZvaWQgaXBhdGhfaHRfaGFuZGxlX2h3ZXJyb3JzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgY2hhciAqbXNnLAogCQkJCSAgICAgc2l6ZV90IG1zZ2wpCkBAIC00NDAsMTkgKzQ1MSw0OSBAQAogCSAqIG1ha2Ugc3VyZSB3ZSBnZXQgdGhpcyBtdWNoIG91dCwgdW5sZXNzIHRvbGQgdG8gYmUgcXVpZXQsCiAJICogb3IgaXQncyBvY2N1cnJlZCB3aXRoaW4gdGhlIGxhc3QgNSBzZWNvbmRzCiAJICovCi0JaWYgKChod2VycnMgJiB+ZGQtPmlwYXRoX2xhc3Rod2Vycm9yKSB8fAorCWlmICgoaHdlcnJzICYgfihkZC0+aXBhdGhfbGFzdGh3ZXJyb3IgfAorCQkJKChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCSAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT1BCQykKKwkJCTw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkpKSB8fAogCSAgICAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1ZFUkJEQkcpKQogCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiSGFyZHdhcmUgZXJyb3I6IGh3ZXJyPTB4JWxseCAiCiAJCQkgIihjbGVhcmVkKVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaHdlcnJzKTsKIAlkZC0+aXBhdGhfbGFzdGh3ZXJyb3IgfD0gaHdlcnJzOwogCi0JaWYgKGh3ZXJycyAmIH5pbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50KQorCWlmIChod2VycnMgJiB+ZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50KQogCQlpcGF0aF9kZXZfZXJyKGRkLCAiaHdlcnJvciBpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGVycm9ycyAiCiAJCQkgICAgICAiJWxseCBzZXRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgICAoaHdlcnJzICYgfmluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQpKTsKKwkJCSAgICAgIChod2VycnMgJiB+ZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50KSk7CiAKIAljdHJsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCk7CiAJaWYgKGN0cmwgJiBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSkgeworCQkvKgorCQkgKiBwYXJpdHkgZXJyb3JzIGluIHNlbmQgbWVtb3J5IGFyZSByZWNvdmVyYWJsZSwKKwkJICoganVzdCBjYW5jZWwgdGhlIHNlbmQgKGlmIGluZGljYXRlZCBpbiAqIHNlbmRidWZmZXJlcnJvciksCisJCSAqIGNvdW50IHRoZSBvY2N1cnJlbmNlLCB1bmZyZWV6ZSAoaWYgbm8gb3RoZXIgaGFuZGxlZAorCQkgKiBoYXJkd2FyZSBlcnJvciBiaXRzIGFyZSBzZXQpLCBhbmQgY29udGludWUuIFRoZXkgY2FuCisJCSAqIG9jY3VyIGlmIGEgcHJvY2Vzc29yIHNwZWN1bGF0aXZlIHJlYWQgaXMgZG9uZSB0byB0aGUgUElPCisJCSAqIGJ1ZmZlciB3aGlsZSB3ZSBhcmUgc2VuZGluZyBhIHBhY2tldCwgZm9yIGV4YW1wbGUuCisJCSAqLworCQlpZiAoaHdlcnJzICYgKChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPUEJDKQorCQkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSkgeworCQkJaXBhdGhfc3RhdHMuc3BzX3R4ZXBhcml0eSsrOworCQkJaXBhdGhfZGJnKCJSZWNvdmVyaW5nIGZyb20gVFhFIHBhcml0eSBlcnJvciAoJWxsdSksICIKKwkJCSAgICAJICAiaHdlcnJzdGF0dXM9JWxseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3N0YXRzLnNwc190eGVwYXJpdHksCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBod2VycnMpOworCQkJaXBhdGhfZGlzYXJtX3NlbmRlcnJidWZzKGRkKTsKKwkJCWh3ZXJycyAmPSB+KChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCQkgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9QQkMpCisJCQkJICAgIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCk7CisJCQlpZiAoIWh3ZXJycykgeyAvKiBlbHNlIGxlYXZlIGluIGZyZWV6ZSBtb2RlICovCisJCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwKKwkJCQkJCSBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkJCQkgZGQtPmlwYXRoX2NvbnRyb2wpOworCQkJCXJldHVybjsKKwkJCX0KKwkJfQogCQlpZiAoaHdlcnJzKSB7CiAJCQkvKgogCQkJICogaWYgYW55IHNldCB0aGF0IHdlIGFyZW4ndCBpZ25vcmluZzsgb25seQpAQCAtNDk5LDQ0ICs1NDAsMTYgQEAKIAkJCSBiaXRzKTsKIAkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOwogCX0KLQlpZiAoaHdlcnJzICYgKElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLCi0JCSAgICAgIDw8IElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKLQkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+Ci0JCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSAmCi0JCQkgICAgICBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyk7Ci0JCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLCAiW1JYRSBQYXJpdHkgRXJycyAleF0gIiwKLQkJCSBiaXRzKTsKLQkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOwotCX0KLQlpZiAoaHdlcnJzICYgKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLCi0JCSAgICAgIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKLQkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+Ci0JCQkgICAgICAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSAmCi0JCQkgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyk7Ci0JCXNucHJpbnRmKGJpdHNtc2csIHNpemVvZiBiaXRzbXNnLCAiW1RYRSBQYXJpdHkgRXJycyAleF0gIiwKLQkJCSBiaXRzKTsKLQkJc3RybGNhdChtc2csIGJpdHNtc2csIG1zZ2wpOwotCX0KLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSUJDQlVTVE9TUENQQVJJVFlFUlIpCi0JCXN0cmxjYXQobXNnLCAiW0lCMklQQVRIIFBhcml0eV0iLCBtc2dsKTsKLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlIpCi0JCXN0cmxjYXQobXNnLCAiW0lQQVRIMklCIFBhcml0eV0iLCBtc2dsKTsKLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDQlVTSVJFUVBBUklUWUVSUikKLQkJc3RybGNhdChtc2csICJbSFRDIElyZXEgUGFyaXR5XSIsIG1zZ2wpOwotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENCVVNUUkVRUEFSSVRZRVJSKQotCQlzdHJsY2F0KG1zZywgIltIVEMgVHJlcSBQYXJpdHldIiwgbXNnbCk7Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ0JVU1RSRVNQUEFSSVRZRVJSKQotCQlzdHJsY2F0KG1zZywgIltIVEMgVHJlc3AgUGFyaXR5XSIsIG1zZ2wpOworCisJaXBhdGhfZm9ybWF0X2h3ZXJyb3JzKGh3ZXJycywKKwkJCSAgICAgIGlwYXRoXzYxMTBfaHdlcnJvcl9tc2dzLAorCQkJICAgICAgc2l6ZW9mKGlwYXRoXzYxMTBfaHdlcnJvcl9tc2dzKSAvCisJCQkgICAgICBzaXplb2YoaXBhdGhfNjExMF9od2Vycm9yX21zZ3NbMF0pLAorCQkJICAgICAgbXNnLCBtc2dsKTsKIAogCWlmIChod2VycnMgJiAoX0lQQVRIX0hUTElOSzBfQ1JDQklUUyB8IF9JUEFUSF9IVExJTksxX0NSQ0JJVFMpKQogCQlod2Vycl9jcmNiaXRzKGRkLCBod2VycnMsIG1zZywgbXNnbCk7CiAKLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfSFRDTUlTQ0VSUjUpCi0JCXN0cmxjYXQobXNnLCAiW0hUIGNvcmUgTWlzYzVdIiwgbXNnbCk7Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0hUQ01JU0NFUlI2KQotCQlzdHJsY2F0KG1zZywgIltIVCBjb3JlIE1pc2M2XSIsIG1zZ2wpOwotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9IVENNSVNDRVJSNykKLQkJc3RybGNhdChtc2csICJbSFQgY29yZSBNaXNjN10iLCBtc2dsKTsKIAlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRCkgewogCQlzdHJsY2F0KG1zZywgIltNZW1vcnkgQklTVCB0ZXN0IGZhaWxlZCwgSW5maW5pUGF0aCBoYXJkd2FyZSB1bnVzYWJsZV0iLAogCQkJbXNnbCk7CkBAIC01NzMsMTEgKzU4Niw2IEBACiAJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOwogCX0KIAotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9SWERTWU5DTUVNUEFSSVRZRVJSKQotCQlzdHJsY2F0KG1zZywgIltSeCBEc3luY10iLCBtc2dsKTsKLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEKQotCQlzdHJsY2F0KG1zZywgIltTZXJEZXMgUExMXSIsIG1zZ2wpOwotCiAJaXBhdGhfZGV2X2VycihkZCwgIiVzIGhhcmR3YXJlIGVycm9yXG4iLCBtc2cpOwogCWlmIChpc2ZhdGFsICYmICFpcGF0aF9kaWFnX2ludXNlICYmIGRkLT5pcGF0aF9mcmVlemVtc2cpCiAJCS8qCkBAIC03NDIsNyArNzUwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBIVF9DQVBBQklMSVRZX0lEICAgMHgwOAkvKiBIVCBjYXBhYmlsaXRpZXMgbm90IGRlZmluZWQgaW4ga2VybmVsICovCiAjZGVmaW5lIEhUX0lOVFJfRElTQ19DT05GSUcgIDB4ODAJLyogSFQgaW50ZXJydXB0IGFuZCBkaXNjb3ZlcnkgY2FwICovCiAjZGVmaW5lIEhUX0lOVFJfUkVHX0lOREVYICAgIDIJLyogaW50Y29uZmlnIHJlcXVpcmVzIGluZGlyZWN0IGFjY2Vzc2VzICovCiAKQEAgLTk3Myw3ICs5ODAsNyBAQAogCSAqIGRvIHRoaXMgZWFybHksIGJlZm9yZSB3ZSBldmVyIGVuYWJsZSBlcnJvcnMgb3IgaGFyZHdhcmUgZXJyb3JzLAogCSAqIG1vc3RseSB0byBhdm9pZCBjYXVzaW5nIHRoZSBjaGlwIHRvIGVudGVyIGZyZWV6ZSBtb2RlLgogCSAqLwotCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgSFRfQ0FQQUJJTElUWV9JRCk7CisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShwZGV2LCBQQ0lfQ0FQX0lEX0hUKTsKIAlpZiAoIXBvcykgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiQ291bGRuJ3QgZmluZCBIeXBlclRyYW5zcG9ydCAiCiAJCQkgICAgICAiY2FwYWJpbGl0eTsgbm8gaW50ZXJydXB0c1xuIik7CkBAIC05OTYsNyArMTAwMyw3IEBACiAJCWVsc2UgaWYgKGNhcF90eXBlID09IEhUX0lOVFJfRElTQ19DT05GSUcpCiAJCQlpaGFuZGxlciA9IHNldF9pbnRfaGFuZGxlcihkZCwgcGRldiwgcG9zKTsKIAl9IHdoaWxlICgocG9zID0gcGNpX2ZpbmRfbmV4dF9jYXBhYmlsaXR5KHBkZXYsIHBvcywKLQkJCQkJCSBIVF9DQVBBQklMSVRZX0lEKSkpOworCQkJCQkJIFBDSV9DQVBfSURfSFQpKSk7CiAKIAlpZiAoIWloYW5kbGVyKSB7CiAJCWlwYXRoX2Rldl9lcnIoZGQsICJDb3VsZG4ndCBmaW5kIGludGVycnVwdCBoYW5kbGVyIGluICIKQEAgLTEwODEsMjEgKzEwODgsMjEgQEAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2V4dGN0cmwsIGV4dGN0bCk7CiB9CiAKLXN0YXRpYyB2b2lkIGlwYXRoX2luaXRfaHRfdmFyaWFibGVzKHZvaWQpCitzdGF0aWMgdm9pZCBpcGF0aF9pbml0X2h0X3ZhcmlhYmxlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JaXBhdGhfZ3Bpb19zZGFfbnVtID0gX0lQQVRIX0dQSU9fU0RBX05VTTsKLQlpcGF0aF9ncGlvX3NjbF9udW0gPSBfSVBBVEhfR1BJT19TQ0xfTlVNOwotCWlwYXRoX2dwaW9fc2RhID0gSVBBVEhfR1BJT19TREE7Ci0JaXBhdGhfZ3Bpb19zY2wgPSBJUEFUSF9HUElPX1NDTDsKKwlkZC0+aXBhdGhfZ3Bpb19zZGFfbnVtID0gX0lQQVRIX0dQSU9fU0RBX05VTTsKKwlkZC0+aXBhdGhfZ3Bpb19zY2xfbnVtID0gX0lQQVRIX0dQSU9fU0NMX05VTTsKKwlkZC0+aXBhdGhfZ3Bpb19zZGEgPSBJUEFUSF9HUElPX1NEQTsKKwlkZC0+aXBhdGhfZ3Bpb19zY2wgPSBJUEFUSF9HUElPX1NDTDsKIAotCWluZmluaXBhdGhfaV9iaXRzZXh0YW50ID0KKwlkZC0+aXBhdGhfaV9iaXRzZXh0YW50ID0KIAkJKElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSyA8PCBJTkZJTklQQVRIX0lfUkNWVVJHX1NISUZUKSB8CiAJCShJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSyA8PAogCQkgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX1NISUZUKSB8CiAJCUlORklOSVBBVEhfSV9FUlJPUiB8IElORklOSVBBVEhfSV9TUElPU0VOVCB8CiAJCUlORklOSVBBVEhfSV9TUElPQlVGQVZBSUwgfCBJTkZJTklQQVRIX0lfR1BJTzsKIAotCWluZmluaXBhdGhfZV9iaXRzZXh0YW50ID0KKwlkZC0+aXBhdGhfZV9iaXRzZXh0YW50ID0KIAkJSU5GSU5JUEFUSF9FX1JGT1JNQVRFUlIgfCBJTkZJTklQQVRIX0VfUlZDUkMgfAogCQlJTkZJTklQQVRIX0VfUklDUkMgfCBJTkZJTklQQVRIX0VfUk1JTlBLVExFTiB8CiAJCUlORklOSVBBVEhfRV9STUFYUEtUTEVOIHwgSU5GSU5JUEFUSF9FX1JMT05HUEtUTEVOIHwKQEAgLTExMTMsNyArMTEyMCw3IEBACiAJCUlORklOSVBBVEhfRV9JTlZBTElEQUREUiB8IElORklOSVBBVEhfRV9SRVNFVCB8CiAJCUlORklOSVBBVEhfRV9IQVJEV0FSRTsKIAotCWluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQgPQorCWRkLT5pcGF0aF9od2VfYml0c2V4dGFudCA9CiAJCShJTkZJTklQQVRIX0hXRV9IVENNRU1QQVJJVFlFUlJfTUFTSyA8PAogCQkgSU5GSU5JUEFUSF9IV0VfSFRDTUVNUEFSSVRZRVJSX1NISUZUKSB8CiAJCShJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyA8PApAQCAtMTE0Miw4ICsxMTQ5LDggQEAKIAkJSU5GSU5JUEFUSF9IV0VfSUJDQlVTVE9TUENQQVJJVFlFUlIgfAogCQlJTkZJTklQQVRIX0hXRV9JQkNCVVNGUlNQQ1BBUklUWUVSUjsKIAotCWluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrID0gSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0s7Ci0JaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrID0gSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLOworCWRkLT5pcGF0aF9pX3JjdmF2YWlsX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSzsKKwlkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSzsKIH0KIAogLyoqCkBAIC0xNjA4LDUgKzE2MTUsNSBAQAogCSAqIGRvIHZlcnkgZWFybHkgaW5pdCB0aGF0IGlzIG5lZWRlZCBiZWZvcmUgaXBhdGhfZl9idXMgaXMKIAkgKiBjYWxsZWQKIAkgKi8KLQlpcGF0aF9pbml0X2h0X3ZhcmlhYmxlcygpOworCWlwYXRoX2luaXRfaHRfdmFyaWFibGVzKGRkKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaWJhNjEyMC5jCmluZGV4IGQ4NjUxNmQuLmE3MmFiOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pYmE2MTIwLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2liYTYxMjAuYwpAQCAtMjYzLDggKzI2Myw4IEBACiB9OwogCiAvKiBrcl9pbnRzdGF0dXMsIGtyX2ludGNsZWFyLCBrcl9pbnRtYXNrIGJpdHMgKi8KLSNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLIDB4MUYKLSNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgMHgxRgorI2RlZmluZSBJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgKCgxVTw8NSktMSkKKyNkZWZpbmUgSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgKCgxVTw8NSktMSkKIAogLyoga3JfaHdlcnJjbGVhciwga3JfaHdlcnJtYXNrLCBrcl9od2VycnN0YXR1cywgYml0cyAqLwogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sgIDB4MDAwMDAwMDAwMDAwMDAzZlVMTApAQCAtMjk0LDYgKzI5NCwzMyBAQAogI2RlZmluZSBJUEFUSF9HUElPX1NDTCAoMVVMTCA8PCBcCiAJKF9JUEFUSF9HUElPX1NDTF9OVU0rSU5GSU5JUEFUSF9FWFRDX0dQSU9PRV9TSElGVCkpCiAKKy8qCisgKiBSZXYyIHNpbGljb24gYWxsb3dzIHN1cHByZXNzaW5nIGNoZWNrIGZvciBBcm1MYXVuY2ggZXJyb3JzLgorICogdGhpcyBjYW4gc3BlZWQgdXAgc2hvcnQgcGFja2V0IHNlbmRzIG9uIHN5c3RlbXMgdGhhdCBkbworICogbm90IGd1YXJhbnRlZWUgd3JpdGUtb3JkZXIuCisgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9YR1hTX1NVUFBSRVNTX0FSTUxBVU5DSF9FUlIgKDFVTEw8PDYzKQorCisvKiA2MTIwIHNwZWNpZmljIGhhcmR3YXJlIGVycm9ycy4uLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBpcGF0aF9od2Vycm9yX21zZ3MgaXBhdGhfNjEyMF9od2Vycm9yX21zZ3NbXSA9IHsKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRVBPSVNPTkVEVExQLCAiUENJZSBQb2lzb25lZCBUTFAiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUNQTFRJTUVPVVQsICJQQ0llIGNvbXBsZXRpb24gdGltZW91dCIpLAorCS8qCisJICogSW4gcHJhY3RpY2UsIGl0J3MgdW5saWtlbHkgd3RoYXQgd2UnbGwgc2VlIFBDSWUgUExMLCBvciBidXMKKwkgKiBwYXJpdHkgb3IgbWVtb3J5IHBhcml0eSBlcnJvciBmYWlsdXJlcywgYmVjYXVzZSBtb3N0IGxpa2VseSB3ZQorCSAqIHdvbid0IGJlIGFibGUgdG8gdGFsayB0byB0aGUgY29yZSBvZiB0aGUgY2hpcC4gIE5vbmV0aGVsZXNzLCB3ZQorCSAqIG1pZ2h0IHNlZSB0aGVtLCBpZiB0aGV5IGFyZSBpbiBwYXJ0cyBvZiB0aGUgUENJZSBjb3JlIHRoYXQgYXJlbid0CisJICogZXNzZW50aWFsLgorCSAqLworCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFMVBMTEZBSUxFRCwgIlBDSWVQTEwxIiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFBDSUUwUExMRkFJTEVELCAiUENJZVBMTDAiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUJVU1BBUklUWVhUTEgsICJQQ0llIFhUTEggY29yZSBwYXJpdHkiKSwKKwlJTkZJTklQQVRIX0hXRV9NU0coUENJRUJVU1BBUklUWVhBRE0sICJQQ0llIEFETSBUWCBjb3JlIHBhcml0eSIpLAorCUlORklOSVBBVEhfSFdFX01TRyhQQ0lFQlVTUEFSSVRZUkFETSwgIlBDSWUgQURNIFJYIGNvcmUgcGFyaXR5IiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKFJYRFNZTkNNRU1QQVJJVFlFUlIsICJSeCBEc3luYyIpLAorCUlORklOSVBBVEhfSFdFX01TRyhTRVJERVNQTExGQUlMRUQsICJTZXJEZXMgUExMIiksCit9OworCiAvKioKICAqIGlwYXRoX3BlX2hhbmRsZV9od2Vycm9ycyAtIGRpc3BsYXkgaGFyZHdhcmUgZXJyb3JzLgogICogQGRkOiB0aGUgaW5maW5pcGF0aCBkZXZpY2UKQEAgLTM0MywxOSArMzcwLDQ5IEBACiAJICogbWFrZSBzdXJlIHdlIGdldCB0aGlzIG11Y2ggb3V0LCB1bmxlc3MgdG9sZCB0byBiZSBxdWlldCwKIAkgKiBvciBpdCdzIG9jY3VycmVkIHdpdGhpbiB0aGUgbGFzdCA1IHNlY29uZHMKIAkgKi8KLQlpZiAoKGh3ZXJycyAmIH5kZC0+aXBhdGhfbGFzdGh3ZXJyb3IpIHx8CisJaWYgKChod2VycnMgJiB+KGRkLT5pcGF0aF9sYXN0aHdlcnJvciB8CisJCQkoKElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9CVUYgfAorCQkJICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPUEJDKQorCQkJIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkpKSB8fAogCSAgICAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1ZFUkJEQkcpKQogCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiSGFyZHdhcmUgZXJyb3I6IGh3ZXJyPTB4JWxseCAiCiAJCQkgIihjbGVhcmVkKVxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZykgaHdlcnJzKTsKIAlkZC0+aXBhdGhfbGFzdGh3ZXJyb3IgfD0gaHdlcnJzOwogCi0JaWYgKGh3ZXJycyAmIH5pbmZpbmlwYXRoX2h3ZV9iaXRzZXh0YW50KQorCWlmIChod2VycnMgJiB+ZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50KQogCQlpcGF0aF9kZXZfZXJyKGRkLCAiaHdlcnJvciBpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGVycm9ycyAiCiAJCQkgICAgICAiJWxseCBzZXRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgICAoaHdlcnJzICYgfmluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQpKTsKKwkJCSAgICAgIChod2VycnMgJiB+ZGQtPmlwYXRoX2h3ZV9iaXRzZXh0YW50KSk7CiAKIAljdHJsID0gaXBhdGhfcmVhZF9rcmVnMzIoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCk7CiAJaWYgKGN0cmwgJiBJTkZJTklQQVRIX0NfRlJFRVpFTU9ERSkgeworCQkvKgorCQkgKiBwYXJpdHkgZXJyb3JzIGluIHNlbmQgbWVtb3J5IGFyZSByZWNvdmVyYWJsZSwKKwkJICoganVzdCBjYW5jZWwgdGhlIHNlbmQgKGlmIGluZGljYXRlZCBpbiAqIHNlbmRidWZmZXJlcnJvciksCisJCSAqIGNvdW50IHRoZSBvY2N1cnJlbmNlLCB1bmZyZWV6ZSAoaWYgbm8gb3RoZXIgaGFuZGxlZAorCQkgKiBoYXJkd2FyZSBlcnJvciBiaXRzIGFyZSBzZXQpLCBhbmQgY29udGludWUuIFRoZXkgY2FuCisJCSAqIG9jY3VyIGlmIGEgcHJvY2Vzc29yIHNwZWN1bGF0aXZlIHJlYWQgaXMgZG9uZSB0byB0aGUgUElPCisJCSAqIGJ1ZmZlciB3aGlsZSB3ZSBhcmUgc2VuZGluZyBhIHBhY2tldCwgZm9yIGV4YW1wbGUuCisJCSAqLworCQlpZiAoaHdlcnJzICYgKChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPUEJDKQorCQkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSkgeworCQkJaXBhdGhfc3RhdHMuc3BzX3R4ZXBhcml0eSsrOworCQkJaXBhdGhfZGJnKCJSZWNvdmVyaW5nIGZyb20gVFhFIHBhcml0eSBlcnJvciAoJWxsdSksICIKKwkJCSAgICAJICAiaHdlcnJzdGF0dXM9JWxseFxuIiwKKwkJCQkgICh1bnNpZ25lZCBsb25nIGxvbmcpIGlwYXRoX3N0YXRzLnNwc190eGVwYXJpdHksCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKSBod2VycnMpOworCQkJaXBhdGhfZGlzYXJtX3NlbmRlcnJidWZzKGRkKTsKKwkJCWh3ZXJycyAmPSB+KChJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfUElPQlVGIHwKKwkJCQkgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9QSU9QQkMpCisJCQkJICAgIDw8IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCk7CisJCQlpZiAoIWh3ZXJycykgeyAvKiBlbHNlIGxlYXZlIGluIGZyZWV6ZSBtb2RlICovCisJCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwKKwkJCQkJCSBkZC0+aXBhdGhfa3JlZ3MtPmtyX2NvbnRyb2wsCisJCQkJCQkgZGQtPmlwYXRoX2NvbnRyb2wpOworCQkJICAgIHJldHVybjsKKwkJCX0KKwkJfQogCQlpZiAoaHdlcnJzKSB7CiAJCQkvKgogCQkJICogaWYgYW55IHNldCB0aGF0IHdlIGFyZW4ndCBpZ25vcmluZyBvbmx5IG1ha2UgdGhlCkBAIC0zNzksOSArNDM2LDggQEAKIAkJfSBlbHNlIHsKIAkJCWlwYXRoX2RiZygiQ2xlYXJpbmcgZnJlZXplbW9kZSBvbiBpZ25vcmVkIGhhcmR3YXJlICIKIAkJCQkgICJlcnJvclxuIik7Ci0JCQljdHJsICY9IH5JTkZJTklQQVRIX0NfRlJFRVpFTU9ERTsKIAkJCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfY29udHJvbCwKLQkJCQkJIGN0cmwpOworCQkJICAgCQkgZGQtPmlwYXRoX2NvbnRyb2wpOwogCQl9CiAJfQogCkBAIC0zOTYsMjQgKzQ1MiwxMyBAQAogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2h3ZXJybWFzaywKIAkJCQkgZGQtPmlwYXRoX2h3ZXJybWFzayk7CiAJfQotCWlmIChod2VycnMgJiAoSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0sKLQkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSkgewotCQliaXRzID0gKHUzMikgKChod2VycnMgPj4KLQkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQpICYKLQkJCSAgICAgIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9NQVNLKTsKLQkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csICJbUlhFIFBhcml0eSBFcnJzICV4XSAiLAotCQkJIGJpdHMpOwotCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7Ci0JfQotCWlmIChod2VycnMgJiAoSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01BU0sKLQkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSkgewotCQliaXRzID0gKHUzMikgKChod2VycnMgPj4KLQkJCSAgICAgICBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQpICYKLQkJCSAgICAgIElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NQVNLKTsKLQkJc25wcmludGYoYml0c21zZywgc2l6ZW9mIGJpdHNtc2csICJbVFhFIFBhcml0eSBFcnJzICV4XSAiLAotCQkJIGJpdHMpOwotCQlzdHJsY2F0KG1zZywgYml0c21zZywgbXNnbCk7Ci0JfQorCisJaXBhdGhfZm9ybWF0X2h3ZXJyb3JzKGh3ZXJycywKKwkJCSAgICAgIGlwYXRoXzYxMjBfaHdlcnJvcl9tc2dzLAorCQkJICAgICAgc2l6ZW9mKGlwYXRoXzYxMjBfaHdlcnJvcl9tc2dzKS8KKwkJCSAgICAgIHNpemVvZihpcGF0aF82MTIwX2h3ZXJyb3JfbXNnc1swXSksCisJCQkgICAgICBtc2csIG1zZ2wpOworCiAJaWYgKGh3ZXJycyAmIChJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sKIAkJICAgICAgPDwgSU5GSU5JUEFUSF9IV0VfUENJRU1FTVBBUklUWUVSUl9TSElGVCkpIHsKIAkJYml0cyA9ICh1MzIpICgoaHdlcnJzID4+CkBAIC00MjMsMTAgKzQ2OCw2IEBACiAJCQkgIltQQ0llIE1lbSBQYXJpdHkgRXJycyAleF0gIiwgYml0cyk7CiAJCXN0cmxjYXQobXNnLCBiaXRzbXNnLCBtc2dsKTsKIAl9Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU1RPU1BDUEFSSVRZRVJSKQotCQlzdHJsY2F0KG1zZywgIltJQjJJUEFUSCBQYXJpdHldIiwgbXNnbCk7Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX0lCQ0JVU0ZSU1BDUEFSSVRZRVJSKQotCQlzdHJsY2F0KG1zZywgIltJUEFUSDJJQiBQYXJpdHldIiwgbXNnbCk7CiAKICNkZWZpbmUgX0lQQVRIX1BMTF9GQUlMIChJTkZJTklQQVRIX0hXRV9DT1JFUExMX0ZCU0xJUCB8CVwKIAkJCSBJTkZJTklQQVRIX0hXRV9DT1JFUExMX1JGU0xJUCApCkBAIC00NTIsMzQgKzQ5Myw2IEBACiAJCQkJIGRkLT5pcGF0aF9od2Vycm1hc2spOwogCX0KIAotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFUE9JU09ORURUTFApCi0JCXN0cmxjYXQobXNnLCAiW1BDSWUgUG9pc29uZWQgVExQXSIsIG1zZ2wpOwotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFQ1BMVElNRU9VVCkKLQkJc3RybGNhdChtc2csICJbUENJZSBjb21wbGV0aW9uIHRpbWVvdXRdIiwgbXNnbCk7Ci0KLQkvKgotCSAqIEluIHByYWN0aWNlLCBpdCdzIHVubGlrZWx5IHd0aGF0IHdlJ2xsIHNlZSBQQ0llIFBMTCwgb3IgYnVzCi0JICogcGFyaXR5IG9yIG1lbW9yeSBwYXJpdHkgZXJyb3IgZmFpbHVyZXMsIGJlY2F1c2UgbW9zdCBsaWtlbHkgd2UKLQkgKiB3b24ndCBiZSBhYmxlIHRvIHRhbGsgdG8gdGhlIGNvcmUgb2YgdGhlIGNoaXAuICBOb25ldGhlbGVzcywgd2UKLQkgKiBtaWdodCBzZWUgdGhlbSwgaWYgdGhleSBhcmUgaW4gcGFydHMgb2YgdGhlIFBDSWUgY29yZSB0aGF0IGFyZW4ndAotCSAqIGVzc2VudGlhbC4KLQkgKi8KLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRTFQTExGQUlMRUQpCi0JCXN0cmxjYXQobXNnLCAiW1BDSWVQTEwxXSIsIG1zZ2wpOwotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9QQ0lFMFBMTEZBSUxFRCkKLQkJc3RybGNhdChtc2csICJbUENJZVBMTDBdIiwgbXNnbCk7Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYVExIKQotCQlzdHJsY2F0KG1zZywgIltQQ0llIFhUTEggY29yZSBwYXJpdHldIiwgbXNnbCk7Ci0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlYQURNKQotCQlzdHJsY2F0KG1zZywgIltQQ0llIEFETSBUWCBjb3JlIHBhcml0eV0iLCBtc2dsKTsKLQlpZiAoaHdlcnJzICYgSU5GSU5JUEFUSF9IV0VfUENJRUJVU1BBUklUWVJBRE0pCi0JCXN0cmxjYXQobXNnLCAiW1BDSWUgQURNIFJYIGNvcmUgcGFyaXR5XSIsIG1zZ2wpOwotCi0JaWYgKGh3ZXJycyAmIElORklOSVBBVEhfSFdFX1JYRFNZTkNNRU1QQVJJVFlFUlIpCi0JCXN0cmxjYXQobXNnLCAiW1J4IERzeW5jXSIsIG1zZ2wpOwotCWlmIChod2VycnMgJiBJTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQpCi0JCXN0cmxjYXQobXNnLCAiW1NlckRlcyBQTExdIiwgbXNnbCk7Ci0KIAlpcGF0aF9kZXZfZXJyKGRkLCAiJXMgaGFyZHdhcmUgZXJyb3JcbiIsIG1zZyk7CiAJaWYgKGlzZmF0YWwgJiYgIWlwYXRoX2RpYWdfaW51c2UgJiYgZGQtPmlwYXRoX2ZyZWV6ZW1zZykgewogCQkvKgpAQCAtNTI1LDYgKzUzOCw5IEBACiAJY2FzZSA1OgogCQluID0gIkluZmluaVBhdGhfUU1INzE0MCI7CiAJCWJyZWFrOworCWNhc2UgNjoKKwkJbiA9ICJJbmZpbmlQYXRoX1FMRTcxNDIiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQlpcGF0aF9kZXZfZXJyKGRkLAogCQkJICAgICAgIkRvbid0IHlldCBrbm93IGFib3V0IGJvYXJkIHdpdGggSUQgJXVcbiIsCkBAIC01NzEsOSArNTg3LDEyIEBACiAJaWYgKCFkZC0+aXBhdGhfYm9hcmRyZXYpCS8vIG5vIFBMTCBmb3IgRW11bGF0b3IKIAkJdmFsICY9IH5JTkZJTklQQVRIX0hXRV9TRVJERVNQTExGQUlMRUQ7CiAKLQkvKiB3b3JrYXJvdW5kIGJ1ZyA5NDYwIGluIGludGVybmFsIGludGVyZmFjZSBidXMgcGFyaXR5IGNoZWNraW5nICovCi0JdmFsICY9IH5JTkZJTklQQVRIX0hXRV9QQ0lFQlVTUEFSSVRZUkFETTsKLQorCWlmIChkZC0+aXBhdGhfbWlucmV2IDwgMikgeworCQkvKiB3b3JrYXJvdW5kIGJ1ZyA5NDYwIGluIGludGVybmFsIGludGVyZmFjZSBidXMgcGFyaXR5CisJCSAqIGNoZWNraW5nLiBGaXhlZCAoSFcgYnVnIDk0OTApIGluIFJldjIuCisJCSAqLworCQl2YWwgJj0gfklORklOSVBBVEhfSFdFX1BDSUVCVVNQQVJJVFlSQURNOworCX0KIAlkZC0+aXBhdGhfaHdlcnJtYXNrID0gdmFsOwogfQogCkBAIC01ODMsOCArNjAyLDggQEAKICAqLwogc3RhdGljIGludCBpcGF0aF9wZV9icmluZ3VwX3NlcmRlcyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpCiB7Ci0JdTY0IHZhbCwgdG1wLCBjb25maWcxOwotCWludCByZXQgPSAwLCBjaGFuZ2UgPSAwOworCXU2NCB2YWwsIHRtcCwgY29uZmlnMSwgcHJldl92YWw7CisJaW50IHJldCA9IDA7CiAKIAlpcGF0aF9kYmcoIlRyeWluZyB0byBicmluZ3VwIHNlcmRlc1xuIik7CiAKQEAgLTY0MSw2ICs2NjAsNyBAQAogCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NjcmF0Y2gpOwogCiAJdmFsID0gaXBhdGhfcmVhZF9rcmVnNjQoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfeGd4c2NvbmZpZyk7CisJcHJldl92YWwgPSB2YWw7CiAJaWYgKCgodmFsID4+IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCkgJgogCSAgICAgSU5GSU5JUEFUSF9YR1hTX01ESU9BRERSX01BU0spICE9IDMpIHsKIAkJdmFsICY9CkBAIC02NDgsMTEgKzY2OCw5IEBACiAJCQkgIElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVCk7CiAJCS8qIE1ESU8gYWRkcmVzcyAzICovCiAJCXZhbCB8PSAzVUxMIDw8IElORklOSVBBVEhfWEdYU19NRElPQUREUl9TSElGVDsKLQkJY2hhbmdlID0gMTsKIAl9CiAJaWYgKHZhbCAmIElORklOSVBBVEhfWEdYU19SRVNFVCkgewogCQl2YWwgJj0gfklORklOSVBBVEhfWEdYU19SRVNFVDsKLQkJY2hhbmdlID0gMTsKIAl9CiAJaWYgKCgodmFsID4+IElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQpICYKIAkgICAgIElORklOSVBBVEhfWEdYU19SWF9QT0xfTUFTSykgIT0gZGQtPmlwYXRoX3J4X3BvbF9pbnYgKSB7CkBAIC02NjEsOSArNjc5LDE5IEBACiAJCSAgICAgICAgIElORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQpOwogCQl2YWwgfD0gZGQtPmlwYXRoX3J4X3BvbF9pbnYgPDwKIAkJCUlORklOSVBBVEhfWEdYU19SWF9QT0xfU0hJRlQ7Ci0JCWNoYW5nZSA9IDE7CiAJfQotCWlmIChjaGFuZ2UpCisJaWYgKGRkLT5pcGF0aF9taW5yZXYgPj0gMikgeworCQkvKiBSZXYgMi4gY2FuIHRvbGVyYXRlIG11bHRpcGxlIHdyaXRlcyB0byBQQkMsIGFuZAorCQkgKiBhbGxvd2luZyB0aGVtIGNhbiBwcm92aWRlIGxvd2VyIGxhdGVuY3kgb24gc29tZQorCQkgKiBDUFVzLCBidXQgdGhpcyBmZWF0dXJlIGlzIG9mZiBieSBkZWZhdWx0LCBvbmx5CisJCSAqIHR1cm5lZCBvbiBieSBzZXR0aW5nIEQ2MyBvZiBYR1hTY29uZmlnIHJlZy4KKwkJICogTWF5IHdhbnQgdG8gbWFrZSB0aGlzIGNvbmRpdGlvbmFsIG1vcmUKKwkJICogZmluZS1ncmFpbmVkIGluIGZ1dHVyZS4gVGhpcyBpcyBub3QgZXhhY3RseQorCQkgKiByZWxhdGVkIHRvIFhHWFMsIGJ1dCB3aGVyZSB0aGUgYml0IGVuZGVkIHVwLgorCQkgKi8KKwkJdmFsIHw9IElORklOSVBBVEhfWEdYU19TVVBQUkVTU19BUk1MQVVOQ0hfRVJSOworCX0KKwlpZiAodmFsICE9IHByZXZfdmFsKQogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3hneHNjb25maWcsIHZhbCk7CiAKIAl2YWwgPSBpcGF0aF9yZWFkX2tyZWc2NChkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZXJkZXNjb25maWcwKTsKQEAgLTcxNyw5ICs3NDUsMjUgQEAKIAlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlcmRlc2NvbmZpZzAsIHZhbCk7CiB9CiAKLS8qIHRoaXMgaXMgbm90IHlldCBuZWVkZWQgb24gdGhpcyBjaGlwLCBzbyBqdXN0IHJldHVybiAwLiAqLwogc3RhdGljIGludCBpcGF0aF9wZV9pbnRjb25maWcoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogeworCXU2NCB2YWw7CisJdTMyIGNoaXByZXY7CisKKwkvKgorCSAqIElmIHRoZSBjaGlwIHN1cHBvcnRzIGFkZGVkIGVycm9yIGluZGljYXRpb24gdmlhIEdQSU8gcGlucywKKwkgKiBlbmFibGUgaW50ZXJydXB0cyBvbiB0aG9zZSBiaXRzIHNvIHRoZSBpbnRlcnJ1cHQgcm91dGluZQorCSAqIGNhbiBjb3VudCB0aGUgZXZlbnRzLiBBbHNvIHNldCBmbGFnIHNvIGludGVycnVwdCByb3V0aW5lCisJICogY2FuIGtub3cgdGhleSBhcmUgZXhwZWN0ZWQuCisJICovCisJY2hpcHJldiA9IGRkLT5pcGF0aF9yZXZpc2lvbiA+PiBJTkZJTklQQVRIX1JfQ0hJUFJFVk1JTk9SX1NISUZUOworCWlmICgoY2hpcHJldiAmIElORklOSVBBVEhfUl9DSElQUkVWTUlOT1JfTUFTSykgPiAxKSB7CisJCS8qIFJldjIrIHJlcG9ydHMgZXh0cmEgZXJyb3JzIHZpYSBpbnRlcm5hbCBHUElPIHBpbnMgKi8KKwkJZGQtPmlwYXRoX2ZsYWdzIHw9IElQQVRIX0dQSU9fRVJSSU5UUlM7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7CisJCXZhbCB8PSBJUEFUSF9HUElPX0VSUklOVFJfTUFTSzsKKwkJaXBhdGhfd3JpdGVfa3JlZyggZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLCB2YWwpOworCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtODUzLDIxICs4OTcsMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgaXBhdGhfaW5pdF9wZV92YXJpYWJsZXModm9pZCkKK3N0YXRpYyB2b2lkIGlwYXRoX2luaXRfcGVfdmFyaWFibGVzKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKIAkvKgogCSAqIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsCiAJICogdXNlZCBmb3IgSTJDIHNlcmlhbCBmbGFzaAogCSAqLwotCWlwYXRoX2dwaW9fc2RhX251bSA9IF9JUEFUSF9HUElPX1NEQV9OVU07Ci0JaXBhdGhfZ3Bpb19zY2xfbnVtID0gX0lQQVRIX0dQSU9fU0NMX05VTTsKLQlpcGF0aF9ncGlvX3NkYSA9IElQQVRIX0dQSU9fU0RBOwotCWlwYXRoX2dwaW9fc2NsID0gSVBBVEhfR1BJT19TQ0w7CisJZGQtPmlwYXRoX2dwaW9fc2RhX251bSA9IF9JUEFUSF9HUElPX1NEQV9OVU07CisJZGQtPmlwYXRoX2dwaW9fc2NsX251bSA9IF9JUEFUSF9HUElPX1NDTF9OVU07CisJZGQtPmlwYXRoX2dwaW9fc2RhID0gSVBBVEhfR1BJT19TREE7CisJZGQtPmlwYXRoX2dwaW9fc2NsID0gSVBBVEhfR1BJT19TQ0w7CiAKIAkvKiB2YXJpYWJsZXMgZm9yIHNhbml0eSBjaGVja2luZyBpbnRlcnJ1cHQgYW5kIGVycm9ycyAqLwotCWluZmluaXBhdGhfaHdlX2JpdHNleHRhbnQgPQorCWRkLT5pcGF0aF9od2VfYml0c2V4dGFudCA9CiAJCShJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAogCQkgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1NISUZUKSB8CisJCShJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTUFTSyA8PAorCQkgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUKSB8CiAJCShJTkZJTklQQVRIX0hXRV9QQ0lFTUVNUEFSSVRZRVJSX01BU0sgPDwKIAkJIElORklOSVBBVEhfSFdFX1BDSUVNRU1QQVJJVFlFUlJfU0hJRlQpIHwKIAkJSU5GSU5JUEFUSF9IV0VfUENJRTFQTExGQUlMRUQgfApAQCAtODgzLDEzICs5MjksMTMgQEAKIAkJSU5GSU5JUEFUSF9IV0VfU0VSREVTUExMRkFJTEVEIHwKIAkJSU5GSU5JUEFUSF9IV0VfSUJDQlVTVE9TUENQQVJJVFlFUlIgfAogCQlJTkZJTklQQVRIX0hXRV9JQkNCVVNGUlNQQ1BBUklUWUVSUjsKLQlpbmZpbmlwYXRoX2lfYml0c2V4dGFudCA9CisJZGQtPmlwYXRoX2lfYml0c2V4dGFudCA9CiAJCShJTkZJTklQQVRIX0lfUkNWVVJHX01BU0sgPDwgSU5GSU5JUEFUSF9JX1JDVlVSR19TSElGVCkgfAogCQkoSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0sgPDwKIAkJIElORklOSVBBVEhfSV9SQ1ZBVkFJTF9TSElGVCkgfAogCQlJTkZJTklQQVRIX0lfRVJST1IgfCBJTkZJTklQQVRIX0lfU1BJT1NFTlQgfAogCQlJTkZJTklQQVRIX0lfU1BJT0JVRkFWQUlMIHwgSU5GSU5JUEFUSF9JX0dQSU87Ci0JaW5maW5pcGF0aF9lX2JpdHNleHRhbnQgPQorCWRkLT5pcGF0aF9lX2JpdHNleHRhbnQgPQogCQlJTkZJTklQQVRIX0VfUkZPUk1BVEVSUiB8IElORklOSVBBVEhfRV9SVkNSQyB8CiAJCUlORklOSVBBVEhfRV9SSUNSQyB8IElORklOSVBBVEhfRV9STUlOUEtUTEVOIHwKIAkJSU5GSU5JUEFUSF9FX1JNQVhQS1RMRU4gfCBJTkZJTklQQVRIX0VfUkxPTkdQS1RMRU4gfApAQCAtOTA3LDggKzk1Myw4IEBACiAJCUlORklOSVBBVEhfRV9JTlZBTElEQUREUiB8IElORklOSVBBVEhfRV9SRVNFVCB8CiAJCUlORklOSVBBVEhfRV9IQVJEV0FSRTsKIAotCWluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrID0gSU5GSU5JUEFUSF9JX1JDVkFWQUlMX01BU0s7Ci0JaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrID0gSU5GSU5JUEFUSF9JX1JDVlVSR19NQVNLOworCWRkLT5pcGF0aF9pX3JjdmF2YWlsX21hc2sgPSBJTkZJTklQQVRIX0lfUkNWQVZBSUxfTUFTSzsKKwlkZC0+aXBhdGhfaV9yY3Z1cmdfbWFzayA9IElORklOSVBBVEhfSV9SQ1ZVUkdfTUFTSzsKIH0KIAogLyogc2V0dXAgdGhlIE1TSSBzdHVmZiBhZ2FpbiBhZnRlciBhIHJlc2V0LiAgSSdkIGxpa2UgdG8ganVzdCBjYWxsCkBAIC0xMDgyLDYgKzExMjgsNDUgQEAKIAltbWlvd2IoKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZC0+aXBhdGhfdGlkX2xvY2ssIGZsYWdzKTsKIH0KKy8qKgorICogaXBhdGhfcGVfcHV0X3RpZF8yIC0gd3JpdGUgYSBUSUQgaW4gY2hpcCwgUmV2aXNpb24gMiBvciBoaWdoZXIKKyAqIEBkZDogdGhlIGluZmluaXBhdGggZGV2aWNlCisgKiBAdGlkcHRyOiBwb2ludGVyIHRvIHRoZSBleHBlY3RlZCBUSUQgKGluIGNoaXApIHRvIHVkcGF0ZQorICogQHRpZHR5cGU6IDAgZm9yIGVhZ2VyLCAxIGZvciBleHBlY3RlZAorICogQHBhOiBwaHlzaWNhbCBhZGRyZXNzIG9mIGluIG1lbW9yeSBidWZmZXI7IGlwYXRoX3RpZGludmFsaWQgaWYgZnJlZWluZworICoKKyAqIFRoaXMgZXhpc3RzIGFzIGEgc2VwYXJhdGUgcm91dGluZSB0byBhbGxvdyBmb3Igc2VsZWN0aW9uIG9mIHRoZQorICogYXBwcm9wcmlhdGUgImZsYXZvciIuIFRoZSBzdGF0aWMgY2FsbHMgaW4gY2xlYW51cCBqdXN0IHVzZSB0aGUKKyAqIHJldmlzaW9uLWFnbm9zdGljIGZvcm0sIGFzIHRoZXkgYXJlIG5vdCBwZXJmb3JtYW5jZSBjcml0aWNhbC4KKyAqLworc3RhdGljIHZvaWQgaXBhdGhfcGVfcHV0X3RpZF8yKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCwgdTY0IF9faW9tZW0gKnRpZHB0ciwKKwkJCSAgICAgdTMyIHR5cGUsIHVuc2lnbmVkIGxvbmcgcGEpCit7CisJdTMyIF9faW9tZW0gKnRpZHAzMiA9ICh1MzIgX19pb21lbSAqKXRpZHB0cjsKKworCWlmIChwYSAhPSBkZC0+aXBhdGhfdGlkaW52YWxpZCkgeworCQlpZiAocGEgJiAoKDFVIDw8IDExKSAtIDEpKSB7CisJCQlkZXZfaW5mbygmZGQtPnBjaWRldi0+ZGV2LCAiQlVHOiBwaHlzYWRkciAlbHggIgorCQkJCSAibm90IDJLQiBhbGlnbmVkIVxuIiwgcGEpOworCQkJcmV0dXJuOworCQl9CisJCXBhID4+PSAxMTsKKwkJLyogcGFyYW5vaWEgY2hlY2sgKi8KKwkJaWYgKHBhICYgKDc8PDI5KSkKKwkJCWlwYXRoX2Rldl9lcnIoZGQsCisJCQkJICAgICAgIkJVRzogUGh5c2ljYWwgcGFnZSBhZGRyZXNzIDB4JWx4ICIKKwkJCQkgICAgICAiaGFzIGJpdHMgc2V0IGluIDMxLTI5XG4iLCBwYSk7CisKKwkJaWYgKHR5cGUgPT0gMCkKKwkJCXBhIHw9IGRkLT5pcGF0aF90aWR0ZW1wbGF0ZTsKKwkJZWxzZSAvKiBmb3Igbm93LCBhbHdheXMgZnVsbCA0S0IgcGFnZSAqLworCQkJcGEgfD0gMiA8PCAyOTsKKwl9CisJaWYgKGRkLT5pcGF0aF9rcmVnYmFzZSkKKwkJd3JpdGVsKHBhLCB0aWRwMzIpOworCW1taW93YigpOworfQorCiAKIC8qKgogICogaXBhdGhfcGVfY2xlYXJfdGlkIC0gY2xlYXIgYWxsIFRJRCBlbnRyaWVzIGZvciBhIHBvcnQsIGV4cGVjdGVkIGFuZCBlYWdlcgpAQCAtMTIwMyw3ICsxMjg4LDcgQEAKIAogLyoqCiAgKiBpcGF0aF9pbml0X3BlX2dldF9iYXNlX2luZm8gLSBzZXQgY2hpcC1zcGVjaWZpYyBmbGFncyBmb3IgdXNlciBjb2RlCi0gKiBAZGQ6IHRoZSBpbmZpbmlwYXRoIGRldmljZQorICogQHBkOiB0aGUgaW5maW5pcGF0aCBwb3J0CiAgKiBAa2Jhc2U6IGlwYXRoX2Jhc2VfaW5mbyBwb2ludGVyCiAgKgogICogV2Ugc2V0IHRoZSBQQ0lFIGZsYWcgYmVjYXVzZSB0aGUgbG93ZXIgYmFuZHdpZHRoIG9uIFBDSWUgdnMKQEAgLTEyMTIsNiArMTI5Nyw3IEBACiBzdGF0aWMgaW50IGlwYXRoX3BlX2dldF9iYXNlX2luZm8oc3RydWN0IGlwYXRoX3BvcnRkYXRhICpwZCwgdm9pZCAqa2Jhc2UpCiB7CiAJc3RydWN0IGlwYXRoX2Jhc2VfaW5mbyAqa2luZm8gPSBrYmFzZTsKKwlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQ7CiAKIAlpZiAoaXBhdGhfdW5vcmRlcmVkX3djKCkpIHsKIAkJa2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfRk9SQ0VfV0NfT1JERVI7CkBAIC0xMjIwLDggKzEzMDYsMjAgQEAKIAllbHNlCiAJCWlwYXRoX2NkYmcoUFJPQywgIk5vdCBJbnRlbCBwcm9jZXNzb3IsIFdDIG9yZGVyZWRcbiIpOwogCi0Ja2luZm8tPnNwaV9ydW50aW1lX2ZsYWdzIHw9IElQQVRIX1JVTlRJTUVfUENJRTsKKwlpZiAocGQgPT0gTlVMTCkKKwkJZ290byBkb25lOwogCisJZGQgPSBwZC0+cG9ydF9kZDsKKworCWlmIChkZCAhPSBOVUxMICYmIGRkLT5pcGF0aF9taW5yZXYgPj0gMikgeworCQlpcGF0aF9jZGJnKFBST0MsICJJQkE2MTIwIFJldjIsIGFsbG93IG11bHRpcGxlIFBCQyB3cml0ZVxuIik7CisJCWtpbmZvLT5zcGlfcnVudGltZV9mbGFncyB8PSBJUEFUSF9SVU5USU1FX1BCQ19SRVdSSVRFOworCQlpcGF0aF9jZGJnKFBST0MsICJJQkE2MTIwIFJldjIsIGFsbG93IGxvb3NlIERNQSBhbGlnbm1lbnRcbiIpOworCQlraW5mby0+c3BpX3J1bnRpbWVfZmxhZ3MgfD0gSVBBVEhfUlVOVElNRV9MT09TRV9ETUFfQUxJR047CisJfQorCitkb25lOgorCWtpbmZvLT5zcGlfcnVudGltZV9mbGFncyB8PSBJUEFUSF9SVU5USU1FX1BDSUU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEyNDQsNyArMTM0MiwxMCBAQAogCWRkLT5pcGF0aF9mX3F1aWV0X3NlcmRlcyA9IGlwYXRoX3BlX3F1aWV0X3NlcmRlczsKIAlkZC0+aXBhdGhfZl9icmluZ3VwX3NlcmRlcyA9IGlwYXRoX3BlX2JyaW5ndXBfc2VyZGVzOwogCWRkLT5pcGF0aF9mX2NsZWFyX3RpZHMgPSBpcGF0aF9wZV9jbGVhcl90aWRzOwotCWRkLT5pcGF0aF9mX3B1dF90aWQgPSBpcGF0aF9wZV9wdXRfdGlkOworCWlmIChkZC0+aXBhdGhfbWlucmV2ID49IDIpCisJCWRkLT5pcGF0aF9mX3B1dF90aWQgPSBpcGF0aF9wZV9wdXRfdGlkXzI7CisJZWxzZQorCQlkZC0+aXBhdGhfZl9wdXRfdGlkID0gaXBhdGhfcGVfcHV0X3RpZDsKIAlkZC0+aXBhdGhfZl9jbGVhbnVwID0gaXBhdGhfc2V0dXBfcGVfY2xlYW51cDsKIAlkZC0+aXBhdGhfZl9zZXRleHRsZWQgPSBpcGF0aF9zZXR1cF9wZV9zZXRleHRsZWQ7CiAJZGQtPmlwYXRoX2ZfZ2V0X2Jhc2VfaW5mbyA9IGlwYXRoX3BlX2dldF9iYXNlX2luZm87CkBAIC0xMjU5LDYgKzEzNjAsNiBAQAogCWRkLT5pcGF0aF9rcmVncyA9ICZpcGF0aF9wZV9rcmVnczsKIAlkZC0+aXBhdGhfY3JlZ3MgPSAmaXBhdGhfcGVfY3JlZ3M7CiAKLQlpcGF0aF9pbml0X3BlX3ZhcmlhYmxlcygpOworCWlwYXRoX2luaXRfcGVfdmFyaWFibGVzKGRkKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2luaXRfY2hpcC5jCmluZGV4IDQ0NjY5ZGMuLmQ4MTljY2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbml0X2NoaXAuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW5pdF9jaGlwLmMKQEAgLTg4LDEzICs4OCwxMyBAQAogc3RhdGljIGludCBjcmVhdGVfcG9ydDBfZWdyKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKIHsKIAl1bnNpZ25lZCBlLCBlZ3JjbnQ7Ci0Jc3RydWN0IHNrX2J1ZmYgKipza2JzOworCXN0cnVjdCBpcGF0aF9za2JpbmZvICpza2JpbmZvOwogCWludCByZXQ7CiAKIAllZ3JjbnQgPSBkZC0+aXBhdGhfcmN2ZWdyY250OwogCi0Jc2ticyA9IHZtYWxsb2Moc2l6ZW9mKCpkZC0+aXBhdGhfcG9ydDBfc2ticykgKiBlZ3JjbnQpOwotCWlmIChza2JzID09IE5VTEwpIHsKKwlza2JpbmZvID0gdm1hbGxvYyhzaXplb2YoKmRkLT5pcGF0aF9wb3J0MF9za2JpbmZvKSAqIGVncmNudCk7CisJaWYgKHNrYmluZm8gPT0gTlVMTCkgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiYWxsb2NhdGlvbiBlcnJvciBmb3IgZWFnZXIgVElEICIKIAkJCSAgICAgICJza2IgYXJyYXlcbiIpOwogCQlyZXQgPSAtRU5PTUVNOwpAQCAtMTA5LDEzICsxMDksMTMgQEAKIAkJICogNCBieXRlcyBzbyB0aGF0IHRoZSBkYXRhIGJ1ZmZlciBzdGF5cyB3b3JkIGFsaWduZWQuCiAJCSAqIFNlZSBpcGF0aF9rcmVjZWl2ZSgpIGZvciBtb3JlIGRldGFpbHMuCiAJCSAqLwotCQlza2JzW2VdID0gaXBhdGhfYWxsb2Nfc2tiKGRkLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFza2JzW2VdKSB7CisJCXNrYmluZm9bZV0uc2tiID0gaXBhdGhfYWxsb2Nfc2tiKGRkLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFza2JpbmZvW2VdLnNrYikgewogCQkJaXBhdGhfZGV2X2VycihkZCwgIlNLQiBhbGxvY2F0aW9uIGVycm9yIGZvciAiCiAJCQkJICAgICAgImVhZ2VyIFRJRCAldVxuIiwgZSk7CiAJCQl3aGlsZSAoZSAhPSAwKQotCQkJCWRldl9rZnJlZV9za2Ioc2tic1stLWVdKTsKLQkJCXZmcmVlKHNrYnMpOworCQkJCWRldl9rZnJlZV9za2Ioc2tiaW5mb1stLWVdLnNrYik7CisJCQl2ZnJlZShza2JpbmZvKTsKIAkJCXJldCA9IC1FTk9NRU07CiAJCQlnb3RvIGJhaWw7CiAJCX0KQEAgLTEyNCwxNCArMTI0LDE3IEBACiAJICogQWZ0ZXIgbG9vcCBhYm92ZSwgc28gd2UgY2FuIHRlc3Qgbm9uLU5VTEwgdG8gc2VlIGlmIHJlYWR5CiAJICogdG8gdXNlIGF0IHJlY2VpdmUsIGV0Yy4KIAkgKi8KLQlkZC0+aXBhdGhfcG9ydDBfc2ticyA9IHNrYnM7CisJZGQtPmlwYXRoX3BvcnQwX3NrYmluZm8gPSBza2JpbmZvOwogCiAJZm9yIChlID0gMDsgZSA8IGVncmNudDsgZSsrKSB7Ci0JCXVuc2lnbmVkIGxvbmcgcGh5cyA9Ci0JCQl2aXJ0X3RvX3BoeXMoZGQtPmlwYXRoX3BvcnQwX3NrYnNbZV0tPmRhdGEpOworCQlkZC0+aXBhdGhfcG9ydDBfc2tiaW5mb1tlXS5waHlzID0KKwkJICBpcGF0aF9tYXBfc2luZ2xlKGRkLT5wY2lkZXYsCisJCQkJICAgZGQtPmlwYXRoX3BvcnQwX3NrYmluZm9bZV0uc2tiLT5kYXRhLAorCQkJCSAgIGRkLT5pcGF0aF9pYm1heGxlbiwgUENJX0RNQV9GUk9NREVWSUNFKTsKIAkJZGQtPmlwYXRoX2ZfcHV0X3RpZChkZCwgZSArICh1NjQgX19pb21lbSAqKQogCQkJCSAgICAoKGNoYXIgX19pb21lbSAqKSBkZC0+aXBhdGhfa3JlZ2Jhc2UgKwotCQkJCSAgICAgZGQtPmlwYXRoX3JjdmVncmJhc2UpLCAwLCBwaHlzKTsKKwkJCQkgICAgIGRkLT5pcGF0aF9yY3ZlZ3JiYXNlKSwgMCwKKwkJCQkgICAgZGQtPmlwYXRoX3BvcnQwX3NrYmluZm9bZV0ucGh5cyk7CiAJfQogCiAJcmV0ID0gMDsKQEAgLTQzMiwxNiArNDM1LDMzIEBACiAgKi8KIHN0YXRpYyB2b2lkIGluaXRfc2hhZG93X3RpZHMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewotCWRkLT5pcGF0aF9wYWdlc2hhZG93ID0gKHN0cnVjdCBwYWdlICoqKQotCQl2bWFsbG9jKGRkLT5pcGF0aF9jZmdwb3J0cyAqIGRkLT5pcGF0aF9yY3Z0aWRjbnQgKgorCXN0cnVjdCBwYWdlICoqcGFnZXM7CisJZG1hX2FkZHJfdCAqYWRkcnM7CisKKwlwYWdlcyA9IHZtYWxsb2MoZGQtPmlwYXRoX2NmZ3BvcnRzICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCiAJCQlzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwotCWlmICghZGQtPmlwYXRoX3BhZ2VzaGFkb3cpCisJaWYgKCFwYWdlcykgewogCQlpcGF0aF9kZXZfZXJyKGRkLCAiZmFpbGVkIHRvIGFsbG9jYXRlIHNoYWRvdyBwYWdlICogIgogCQkJICAgICAgImFycmF5LCBubyBleHBlY3RlZCBzZW5kcyFcbiIpOwotCWVsc2UKLQkJbWVtc2V0KGRkLT5pcGF0aF9wYWdlc2hhZG93LCAwLAotCQkgICAgICAgZGQtPmlwYXRoX2NmZ3BvcnRzICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCi0JCSAgICAgICBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOworCQlkZC0+aXBhdGhfcGFnZXNoYWRvdyA9IE5VTEw7CisJCXJldHVybjsKKwl9CisKKwlhZGRycyA9IHZtYWxsb2MoZGQtPmlwYXRoX2NmZ3BvcnRzICogZGQtPmlwYXRoX3JjdnRpZGNudCAqCisJCQlzaXplb2YoZG1hX2FkZHJfdCkpOworCWlmICghYWRkcnMpIHsKKwkJaXBhdGhfZGV2X2VycihkZCwgImZhaWxlZCB0byBhbGxvY2F0ZSBzaGFkb3cgZG1hIGhhbmRsZSAiCisJCQkgICAgICAiYXJyYXksIG5vIGV4cGVjdGVkIHNlbmRzIVxuIik7CisJCXZmcmVlKGRkLT5pcGF0aF9wYWdlc2hhZG93KTsKKwkJZGQtPmlwYXRoX3BhZ2VzaGFkb3cgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJbWVtc2V0KHBhZ2VzLCAwLCBkZC0+aXBhdGhfY2ZncG9ydHMgKiBkZC0+aXBhdGhfcmN2dGlkY250ICoKKwkgICAgICAgc2l6ZW9mKHN0cnVjdCBwYWdlICopKTsKKworCWRkLT5pcGF0aF9wYWdlc2hhZG93ID0gcGFnZXM7CisJZGQtPmlwYXRoX3BoeXNzaGFkb3cgPSBhZGRyczsKIH0KIAogc3RhdGljIHZvaWQgZW5hYmxlX2NoaXAoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9pbnRyLmMKaW5kZXggNDliZjdiYi4uNmJlZTUzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2ludHIuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfaW50ci5jCkBAIC0zNyw2ICszNyw1MCBAQAogI2luY2x1ZGUgImlwYXRoX3ZlcmJzLmgiCiAjaW5jbHVkZSAiaXBhdGhfY29tbW9uLmgiCiAKKy8qCisgKiBDYWxsZWQgd2hlbiB3ZSBtaWdodCBoYXZlIGFuIGVycm9yIHRoYXQgaXMgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyCisgKiBQSU8gYnVmZmVyLCBhbmQgbWF5IG5lZWQgdG8gY2FuY2VsIHRoYXQgYnVmZmVyLCBzbyBpdCBjYW4gYmUgcmUtdXNlZC4KKyAqLwordm9pZCBpcGF0aF9kaXNhcm1fc2VuZGVycmJ1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQoreworCXUzMiBwaW9iY250OworCXVuc2lnbmVkIGxvbmcgc2J1Zls0XTsKKwkvKgorCSAqIGl0J3MgcG9zc2libGUgdGhhdCBzZW5kYnVmZmVyZXJyb3IgY291bGQgaGF2ZSBiaXRzIHNldDsgbWlnaHQKKwkgKiBoYXZlIGFscmVhZHkgZG9uZSB0aGlzIGFzIGEgcmVzdWx0IG9mIGhhcmR3YXJlIGVycm9yIGhhbmRsaW5nCisJICovCisJcGlvYmNudCA9IGRkLT5pcGF0aF9waW9iY250MmsgKyBkZC0+aXBhdGhfcGlvYmNudDRrOworCS8qIHJlYWQgdGhlc2UgYmVmb3JlIHdyaXRpbmcgZXJyb3JjbGVhciAqLworCXNidWZbMF0gPSBpcGF0aF9yZWFkX2tyZWc2NCgKKwkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yKTsKKwlzYnVmWzFdID0gaXBhdGhfcmVhZF9rcmVnNjQoCisJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvciArIDEpOworCWlmIChwaW9iY250ID4gMTI4KSB7CisJCXNidWZbMl0gPSBpcGF0aF9yZWFkX2tyZWc2NCgKKwkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvciArIDIpOworCQlzYnVmWzNdID0gaXBhdGhfcmVhZF9rcmVnNjQoCisJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAzKTsKKwl9CisKKwlpZiAoc2J1ZlswXSB8fCBzYnVmWzFdIHx8IChwaW9iY250ID4gMTI4ICYmIChzYnVmWzJdIHx8IHNidWZbM10pKSkgeworCQlpbnQgaTsKKwkJaWYgKGlwYXRoX2RlYnVnICYgKF9fSVBBVEhfUEtUREJHfF9fSVBBVEhfREJHKSkgeworCQkJX19JUEFUSF9EQkdfV0hJQ0goX19JUEFUSF9QS1REQkd8X19JUEFUSF9EQkcsCisJCQkJCSAgIlNlbmRidWZFcnJzICVseCAlbHgiLCBzYnVmWzBdLAorCQkJCQkgIHNidWZbMV0pOworCQkJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9QS1REQkcgJiYgcGlvYmNudCA+IDEyOCkKKwkJCQlwcmludGsoIiAlbHggJWx4ICIsIHNidWZbMl0sIHNidWZbM10pOworCQkJcHJpbnRrKCJcbiIpOworCQl9CisKKwkJZm9yIChpID0gMDsgaSA8IHBpb2JjbnQ7IGkrKykKKwkJCWlmICh0ZXN0X2JpdChpLCBzYnVmKSkKKwkJCQlpcGF0aF9kaXNhcm1fcGlvYnVmcyhkZCwgaSwgMSk7CisJCWRkLT5pcGF0aF9sYXN0Y2FuY2VsID0gamlmZmllcyszOyAvKiBubyBhcm1sYXVuY2ggZm9yIGEgYml0ICovCisJfQorfQorCisKIC8qIFRoZXNlIGFyZSBhbGwgcmN2LXJlbGF0ZWQgZXJyb3JzIHdoaWNoIHdlIHdhbnQgdG8gY291bnQgZm9yIHN0YXRzICovCiAjZGVmaW5lIEVfU1VNX1BLVEVSUlMgXAogCShJTkZJTklQQVRIX0VfUkhEUkxFTiB8IElORklOSVBBVEhfRV9SQkFEVElEIHwgXApAQCAtNjgsNTMgKzExMiw5IEBACiAKIHN0YXRpYyB1NjQgaGFuZGxlX2Vfc3VtX2VycnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkLCBpcGF0aF9lcnJfdCBlcnJzKQogewotCXVuc2lnbmVkIGxvbmcgc2J1Zls0XTsKIAl1NjQgaWdub3JlX3RoaXNfdGltZSA9IDA7Ci0JdTMyIHBpb2JjbnQ7CiAKLQkvKiBpZiBwb3NzaWJsZSB0aGF0IHNlbmRidWZmZXJlcnJvciBjb3VsZCBiZSB2YWxpZCAqLwotCXBpb2JjbnQgPSBkZC0+aXBhdGhfcGlvYmNudDJrICsgZGQtPmlwYXRoX3Bpb2JjbnQ0azsKLQkvKiByZWFkIHRoZXNlIGJlZm9yZSB3cml0aW5nIGVycm9yY2xlYXIgKi8KLQlzYnVmWzBdID0gaXBhdGhfcmVhZF9rcmVnNjQoCi0JCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX3NlbmRidWZmZXJlcnJvcik7Ci0Jc2J1ZlsxXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAotCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAxKTsKLQlpZiAocGlvYmNudCA+IDEyOCkgewotCQlzYnVmWzJdID0gaXBhdGhfcmVhZF9rcmVnNjQoCi0JCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9zZW5kYnVmZmVyZXJyb3IgKyAyKTsKLQkJc2J1ZlszXSA9IGlwYXRoX3JlYWRfa3JlZzY0KAotCQkJZGQsIGRkLT5pcGF0aF9rcmVncy0+a3Jfc2VuZGJ1ZmZlcmVycm9yICsgMyk7Ci0JfQotCi0JaWYgKHNidWZbMF0gfHwgc2J1ZlsxXSB8fCAocGlvYmNudCA+IDEyOCAmJiAoc2J1ZlsyXSB8fCBzYnVmWzNdKSkpIHsKLQkJaW50IGk7Ci0KLQkJaXBhdGhfY2RiZyhQS1QsICJTZW5kYnVmRXJycyAlbHggJWx4ICIsIHNidWZbMF0sIHNidWZbMV0pOwotCQlpZiAoaXBhdGhfZGVidWcgJiBfX0lQQVRIX1BLVERCRyAmJiBwaW9iY250ID4gMTI4KQotCQkJcHJpbnRrKCIlbHggJWx4ICIsIHNidWZbMl0sIHNidWZbM10pOwotCQlmb3IgKGkgPSAwOyBpIDwgcGlvYmNudDsgaSsrKSB7Ci0JCQlpZiAodGVzdF9iaXQoaSwgc2J1ZikpIHsKLQkJCQl1MzIgX19pb21lbSAqcGlvYnVmOwotCQkJCWlmIChpIDwgZGQtPmlwYXRoX3Bpb2JjbnQyaykKLQkJCQkJcGlvYnVmID0gKHUzMiBfX2lvbWVtICopCi0JCQkJCQkoZGQtPmlwYXRoX3BpbzJrYmFzZSArCi0JCQkJCQkgaSAqIGRkLT5pcGF0aF9wYWxpZ24pOwotCQkJCWVsc2UKLQkJCQkJcGlvYnVmID0gKHUzMiBfX2lvbWVtICopCi0JCQkJCQkoZGQtPmlwYXRoX3BpbzRrYmFzZSArCi0JCQkJCQkgKGkgLSBkZC0+aXBhdGhfcGlvYmNudDJrKSAqCi0JCQkJCQkgZGQtPmlwYXRoXzRrYWxpZ24pOwotCi0JCQkJaXBhdGhfY2RiZyhQS1QsCi0JCQkJCSAgICJQSU9idWZbJXVdIEAlcCBwYmMgaXMgJXg7ICIsCi0JCQkJCSAgIGksIHBpb2J1ZiwgcmVhZGwocGlvYnVmKSk7Ci0KLQkJCQlpcGF0aF9kaXNhcm1fcGlvYnVmcyhkZCwgaSwgMSk7Ci0JCQl9Ci0JCX0KLQkJaWYgKGlwYXRoX2RlYnVnICYgX19JUEFUSF9QS1REQkcpCi0JCQlwcmludGsoIlxuIik7Ci0JfQorCWlwYXRoX2Rpc2FybV9zZW5kZXJyYnVmcyhkZCk7CiAJaWYgKChlcnJzICYgRV9TVU1fTElOS19QS1RFUlJTKSAmJgogCSAgICAhKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0xJTktBQ1RJVkUpKSB7CiAJCS8qCkBAIC0xMzIsNiArMTMyLDgyIEBACiAJcmV0dXJuIGlnbm9yZV90aGlzX3RpbWU7CiB9CiAKKy8qIGdlbmVyaWMgaHcgZXJyb3IgbWVzc2FnZXMuLi4gKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01TRyhhKSBcCisJeyBcCisJCS5tYXNrID0gKCBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfIyNhIDw8ICAgIFwKKwkJCSAgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1NISUZUICksICAgXAorCQkubXNnID0gIlRYRSAiICNhICIgTWVtb3J5IFBhcml0eSIJICAgICBcCisJfQorI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKGEpIFwKKwl7IFwKKwkJLm1hc2sgPSAoIElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl8jI2EgPDwgICAgXAorCQkJICBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQgKSwgICBcCisJCS5tc2cgPSAiUlhFICIgI2EgIiBNZW1vcnkgUGFyaXR5IgkgICAgIFwKKwl9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXBhdGhfaHdlcnJvcl9tc2dzIGlwYXRoX2dlbmVyaWNfaHdlcnJvcl9tc2dzW10gPSB7CisJSU5GSU5JUEFUSF9IV0VfTVNHKElCQ0JVU0ZSU1BDUEFSSVRZRVJSLCAiSVBBVEgySUIgUGFyaXR5IiksCisJSU5GSU5JUEFUSF9IV0VfTVNHKElCQ0JVU1RPU1BDUEFSSVRZRVJSLCAiSUIySVBBVEggUGFyaXR5IiksCisKKwlJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfTVNHKFBJT0JVRiksCisJSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX01TRyhQSU9QQkMpLAorCUlORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9NU0coUElPTEFVTkNIRklGTyksCisKKwlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKFJDVkJVRiksCisJSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01TRyhMT09LVVBRKSwKKwlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKEVBR0VSVElEKSwKKwlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKEVYUFRJRCksCisJSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01TRyhGTEFHQlVGKSwKKwlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKERBVEFJTkZPKSwKKwlJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfTVNHKEhEUklORk8pLAorfTsKKworLyoqCisgKiBpcGF0aF9mb3JtYXRfaHdtc2cgLSBmb3JtYXQgYSBzaW5nbGUgaHdlcnJvciBtZXNzYWdlCisgKiBAbXNnIG1lc3NhZ2UgYnVmZmVyCisgKiBAbXNnbCBsZW5ndGggb2YgbWVzc2FnZSBidWZmZXIKKyAqIEBod21zZyBtZXNzYWdlIHRvIGFkZCB0byBtZXNzYWdlIGJ1ZmZlcgorICovCitzdGF0aWMgdm9pZCBpcGF0aF9mb3JtYXRfaHdtc2coY2hhciAqbXNnLCBzaXplX3QgbXNnbCwgY29uc3QgY2hhciAqaHdtc2cpCit7CisJc3RybGNhdChtc2csICJbIiwgbXNnbCk7CisJc3RybGNhdChtc2csIGh3bXNnLCBtc2dsKTsKKwlzdHJsY2F0KG1zZywgIl0iLCBtc2dsKTsKK30KKworLyoqCisgKiBpcGF0aF9mb3JtYXRfaHdlcnJvcnMgLSBmb3JtYXQgaGFyZHdhcmUgZXJyb3IgbWVzc2FnZXMgZm9yIGRpc3BsYXkKKyAqIEBod2VycnMgaGFyZHdhcmUgZXJyb3JzIGJpdCB2ZWN0b3IKKyAqIEBod2Vycm1zZ3MgaGFyZHdhcmUgZXJyb3IgZGVzY3JpcHRpb25zCisgKiBAbmh3ZXJybXNncyBudW1iZXIgb2YgaHdlcnJtc2dzCisgKiBAbXNnIG1lc3NhZ2UgYnVmZmVyCisgKiBAbXNnbCBtZXNzYWdlIGJ1ZmZlciBsZW5ndGgKKyAqLwordm9pZCBpcGF0aF9mb3JtYXRfaHdlcnJvcnModTY0IGh3ZXJycywKKwkJCSAgIGNvbnN0IHN0cnVjdCBpcGF0aF9od2Vycm9yX21zZ3MgKmh3ZXJybXNncywKKwkJCSAgIHNpemVfdCBuaHdlcnJtc2dzLAorCQkJICAgY2hhciAqbXNnLCBzaXplX3QgbXNnbCkKK3sKKwlpbnQgaTsKKwljb25zdCBpbnQgZ2xlbiA9CisJICAgIHNpemVvZihpcGF0aF9nZW5lcmljX2h3ZXJyb3JfbXNncykgLworCSAgICBzaXplb2YoaXBhdGhfZ2VuZXJpY19od2Vycm9yX21zZ3NbMF0pOworCisJZm9yIChpPTA7IGk8Z2xlbjsgaSsrKSB7CisJCWlmIChod2VycnMgJiBpcGF0aF9nZW5lcmljX2h3ZXJyb3JfbXNnc1tpXS5tYXNrKSB7CisJCQlpcGF0aF9mb3JtYXRfaHdtc2cobXNnLCBtc2dsLAorCQkJCQkgICBpcGF0aF9nZW5lcmljX2h3ZXJyb3JfbXNnc1tpXS5tc2cpOworCQl9CisJfQorCisJZm9yIChpPTA7IGk8bmh3ZXJybXNnczsgaSsrKSB7CisJCWlmIChod2VycnMgJiBod2Vycm1zZ3NbaV0ubWFzaykgeworCQkJaXBhdGhfZm9ybWF0X2h3bXNnKG1zZywgbXNnbCwgaHdlcnJtc2dzW2ldLm1zZyk7CisJCX0KKwl9Cit9CisKIC8qIHJldHVybiB0aGUgc3RyaW5ncyBmb3IgdGhlIG1vc3QgY29tbW9uIGxpbmsgc3RhdGVzICovCiBzdGF0aWMgY2hhciAqaWJfbGlua3N0YXRlKHUzMiBsaW5rc3RhdGUpCiB7CkBAIC00MDQsMTAgKzQ4MCwxMCBAQAogCQlkZC0+aXBhdGhfZl9oYW5kbGVfaHdlcnJvcnMoZGQsIG1zZywgc2l6ZW9mIG1zZyk7CiAJfQogCi0JaWYgKCFub3ByaW50ICYmIChlcnJzICYgfmluZmluaXBhdGhfZV9iaXRzZXh0YW50KSkKKwlpZiAoIW5vcHJpbnQgJiYgKGVycnMgJiB+ZGQtPmlwYXRoX2VfYml0c2V4dGFudCkpCiAJCWlwYXRoX2Rldl9lcnIoZGQsICJlcnJvciBpbnRlcnJ1cHQgd2l0aCB1bmtub3duIGVycm9ycyAiCiAJCQkgICAgICAiJWxseCBzZXRcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkgICAgICAoZXJycyAmIH5pbmZpbmlwYXRoX2VfYml0c2V4dGFudCkpOworCQkJICAgICAgKGVycnMgJiB+ZGQtPmlwYXRoX2VfYml0c2V4dGFudCkpOwogCiAJaWYgKGVycnMgJiBFX1NVTV9FUlJTKQogCQlpZ25vcmVfdGhpc190aW1lID0gaGFuZGxlX2Vfc3VtX2VycnMoZGQsIGVycnMpOwpAQCAtNDc4LDYgKzU1NCwxNCBAQAogCQkJfihJTkZJTklQQVRIX0VfSEFSRFdBUkUgfAogCQkJICBJTkZJTklQQVRIX0VfSUJTVEFUVVNDSEFOR0VEKTsKIAl9CisKKwkvKiBsaWtlbHkgZHVlIHRvIGNhbmNlbCwgc28gc3VwcHJlc3MgKi8KKwlpZiAoKGVycnMgJiAoSU5GSU5JUEFUSF9FX1NQS1RMRU4gfCBJTkZJTklQQVRIX0VfU1BJT0FSTUxBVU5DSCkpICYmCisJCWRkLT5pcGF0aF9sYXN0Y2FuY2VsID4gamlmZmllcykgeworCQlpcGF0aF9kYmcoIlN1cHByZXNzZWQgYXJtbGF1bmNoL3Nwa3RsZW4gYWZ0ZXIgZXJyb3Igc2VuZCBjYW5jZWxcbiIpOworCQllcnJzICY9IH4oSU5GSU5JUEFUSF9FX1NQSU9BUk1MQVVOQ0ggfCBJTkZJTklQQVRIX0VfU1BLVExFTik7CisJfQorCiAJaWYgKCFlcnJzKQogCQlyZXR1cm4gMDsKIApAQCAtNTI5LDcgKzYxMyw3IEBACiAJCQkJICogZG9uJ3QgcmVwb3J0IHNhbWUgcG9pbnQgbXVsdGlwbGUgdGltZXMsCiAJCQkJICogZXhjZXB0IGtlcm5lbAogCQkJCSAqLwotCQkJCXRsID0gKHUzMikgKiBwZC0+cG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcjsKKwkJCQl0bCA9ICoodTY0ICopIHBkLT5wb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwogCQkJCWlmICh0bCA9PSBkZC0+aXBhdGhfbGFzdHJjdmhkcnF0YWlsc1tpXSkKIAkJCQkJY29udGludWU7CiAJCQkJaGQgPSBpcGF0aF9yZWFkX3VyZWczMihkZCwgdXJfcmN2aGRyaGVhZCwKQEAgLTcyOSw5ICs4MTMsOSBAQAogCWludCByY3ZkaW50ID0gMDsKIAogCXBvcnRyID0gKChpc3RhdCA+PiBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpICYKLQkJIGluZmluaXBhdGhfaV9yY3ZhdmFpbF9tYXNrKQorCQkgZGQtPmlwYXRoX2lfcmN2YXZhaWxfbWFzaykKIAkJfCAoKGlzdGF0ID4+IElORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQpICYKLQkJICAgaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrKTsKKwkJICAgZGQtPmlwYXRoX2lfcmN2dXJnX21hc2spOwogCWZvciAoaSA9IDE7IGkgPCBkZC0+aXBhdGhfY2ZncG9ydHM7IGkrKykgewogCQlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKnBkID0gZGQtPmlwYXRoX3BkW2ldOwogCQlpZiAocG9ydHIgJiAoMSA8PCBpKSAmJiBwZCAmJiBwZC0+cG9ydF9jbnQgJiYKQEAgLTgwOCw3ICs4OTIsNyBAQAogCWlmIChvbGRoZWFkICE9IGN1cnRhaWwpIHsKIAkJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgewogCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAotCQkJCQkgKHU2NCkgKDEgPDwgMikpOworCQkJCQkgKHU2NCkgKDEgPDwgSVBBVEhfR1BJT19QT1JUMF9CSVQpKTsKIAkJCWlzdGF0ID0gcG9ydDByYml0cyB8IElORklOSVBBVEhfSV9HUElPOwogCQl9CiAJCWVsc2UKQEAgLTgzOCwxMCArOTIyLDEwIEBACiAJaWYgKHVuZXhwZWN0ZWQpCiAJCXVuZXhwZWN0ZWQgPSAwOwogCi0JaWYgKHVubGlrZWx5KGlzdGF0ICYgfmluZmluaXBhdGhfaV9iaXRzZXh0YW50KSkKKwlpZiAodW5saWtlbHkoaXN0YXQgJiB+ZGQtPmlwYXRoX2lfYml0c2V4dGFudCkpCiAJCWlwYXRoX2Rldl9lcnIoZGQsCiAJCQkgICAgICAiaW50ZXJydXB0IHdpdGggdW5rbm93biBpbnRlcnJ1cHRzICV4IHNldFxuIiwKLQkJCSAgICAgIGlzdGF0ICYgKHUzMikgfiBpbmZpbmlwYXRoX2lfYml0c2V4dGFudCk7CisJCQkgICAgICBpc3RhdCAmICh1MzIpIH4gZGQtPmlwYXRoX2lfYml0c2V4dGFudCk7CiAJZWxzZQogCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJpbnRyIHN0YXQ9MHgleFxuIiwgaXN0YXQpOwogCkBAIC04NjcsMjYgKzk1MSw4MCBAQAogCiAJaWYgKGlzdGF0ICYgSU5GSU5JUEFUSF9JX0dQSU8pIHsKIAkJLyoKLQkJICogUGFja2V0cyBhcmUgYXZhaWxhYmxlIGluIHRoZSBwb3J0IDAgcmN2IHF1ZXVlLgotCQkgKiBFdmVudHVhbGx5IHRoaXMgbmVlZHMgdG8gYmUgZ2VuZXJhbGl6ZWQgdG8gY2hlY2sKLQkJICogSVBBVEhfR1BJT19JTlRSLCBhbmQgdGhlIHNwZWNpZmljIEdQSU8gYml0LCBpZgotCQkgKiBHUElPIGludGVycnVwdHMgYXJlIHVzZWQgZm9yIGFueXRoaW5nIGVsc2UuCisJCSAqIEdQSU8gaW50ZXJydXB0cyBmYWxsIGluIHR3byBicm9hZCBjbGFzc2VzOgorCQkgKiBHUElPXzIgaW5kaWNhdGVzIChvbiBzb21lIEhUNHh4IGJvYXJkcykgdGhhdCBhIHBhY2tldAorCQkgKiAgICAgICAgaGFzIGFycml2ZWQgZm9yIFBvcnQgMC4gQ2hlY2tpbmcgZm9yIHRoaXMKKwkJICogICAgICAgIGlzIGNvbnRyb2xsZWQgYnkgZmxhZyBJUEFUSF9HUElPX0lOVFIuCisJCSAqIEdQSU9fMy4uNSBvbiBJQkE2MTIwIFJldjIgY2hpcHMgaW5kaWNhdGUgZXJyb3JzCisJCSAqICAgICAgICB0aGF0IHdlIG5lZWQgdG8gY291bnQuIENoZWNraW5nIGZvciB0aGlzCisJCSAqICAgICAgICBpcyBjb250cm9sbGVkIGJ5IGZsYWcgSVBBVEhfR1BJT19FUlJJTlRSUy4KIAkJICovCi0JCWlmICh1bmxpa2VseSghKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikpKSB7Ci0JCQl1MzIgZ3Bpb3N0YXR1czsKLQkJCWdwaW9zdGF0dXMgPSBpcGF0aF9yZWFkX2tyZWczMigKLQkJCQlkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX3N0YXR1cyk7Ci0JCQlpcGF0aF9kYmcoIlVuZXhwZWN0ZWQgR1BJTyBpbnRlcnJ1cHQgYml0cyAleFxuIiwKLQkJCQkgIGdwaW9zdGF0dXMpOwotCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAotCQkJCQkgZ3Bpb3N0YXR1cyk7CisJCXUzMiBncGlvc3RhdHVzOworCQl1MzIgdG9fY2xlYXIgPSAwOworCisJCWdwaW9zdGF0dXMgPSBpcGF0aF9yZWFkX2tyZWczMigKKwkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fc3RhdHVzKTsKKwkJLyogRmlyc3QgdGhlIGVycm9yLWNvdW50ZXIgY2FzZS4KKwkJICovCisJCWlmICgoZ3Bpb3N0YXR1cyAmIElQQVRIX0dQSU9fRVJSSU5UUl9NQVNLKSAmJgorCQkgICAgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fRVJSSU5UUlMpKSB7CisJCQkvKiB3YW50IHRvIGNsZWFyIHRoZSBiaXRzIHdlIHNlZSBhc3NlcnRlZC4gKi8KKwkJCXRvX2NsZWFyIHw9IChncGlvc3RhdHVzICYgSVBBVEhfR1BJT19FUlJJTlRSX01BU0spOworCisJCQkvKgorCQkJICogQ291bnQgYXBwcm9wcmlhdGVseSwgY2xlYXIgYml0cyBvdXQgb2Ygb3VyIGNvcHksCisJCQkgKiBhcyB0aGV5IGhhdmUgYmVlbiAiaGFuZGxlZCIuCisJCQkgKi8KKwkJCWlmIChncGlvc3RhdHVzICYgKDEgPDwgSVBBVEhfR1BJT19SWFVWTF9CSVQpKSB7CisJCQkJaXBhdGhfZGJnKCJGbG93Q3RsIG9uIFVuc3VwVkxcbiIpOworCQkJCWRkLT5pcGF0aF9yeGZjX3Vuc3VwdmxfZXJycysrOworCQkJfQorCQkJaWYgKGdwaW9zdGF0dXMgJiAoMSA8PCBJUEFUSF9HUElPX09WUlVOX0JJVCkpIHsKKwkJCQlpcGF0aF9kYmcoIk92ZXJydW4gVGhyZXNob2xkIGV4Y2VlZGVkXG4iKTsKKwkJCQlkZC0+aXBhdGhfb3ZlcnJ1bl90aHJlc2hfZXJycysrOworCQkJfQorCQkJaWYgKGdwaW9zdGF0dXMgJiAoMSA8PCBJUEFUSF9HUElPX0xMSV9CSVQpKSB7CisJCQkJaXBhdGhfZGJnKCJMb2NhbCBMaW5rIEludGVncml0eSBlcnJvclxuIik7CisJCQkJZGQtPmlwYXRoX2xsaV9lcnJzKys7CisJCQl9CisJCQlncGlvc3RhdHVzICY9IH5JUEFUSF9HUElPX0VSUklOVFJfTUFTSzsKIAkJfQotCQllbHNlIHsKLQkJCS8qIENsZWFyIEdQSU8gc3RhdHVzIGJpdCAyICovCi0JCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fY2xlYXIsCi0JCQkJCSh1NjQpICgxIDw8IDIpKTsKKwkJLyogTm93IHRoZSBQb3J0MCBSZWNlaXZlIGNhc2UgKi8KKwkJaWYgKChncGlvc3RhdHVzICYgKDEgPDwgSVBBVEhfR1BJT19QT1JUMF9CSVQpKSAmJgorCQkgICAgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikpIHsKKwkJCS8qCisJCQkgKiBHUElPIHN0YXR1cyBiaXQgMiBpcyBzZXQsIGFuZCB3ZSBleHBlY3RlZCBpdC4KKwkJCSAqIGNsZWFyIGl0IGFuZCBpbmRpY2F0ZSBpbiBwMGJpdHMuCisJCQkgKiBUaGlzIHByb2JhYmx5IG9ubHkgaGFwcGVucyBpZiBhIFBvcnQwIHBrdAorCQkJICogYXJyaXZlcyBhdCBfanVzdF8gdGhlIHdyb25nIHRpbWUsIGFuZCB3ZQorCQkJICogaGFuZGxlIHRoYXQgYnkgc2V0aW5nIGNoazByY3Y7CisJCQkgKi8KKwkJCXRvX2NsZWFyIHw9ICgxIDw8IElQQVRIX0dQSU9fUE9SVDBfQklUKTsKKwkJCWdwaW9zdGF0dXMgJj0gfigxIDw8IElQQVRIX0dQSU9fUE9SVDBfQklUKTsKIAkJCWNoazByY3YgPSAxOwogCQl9CisJCWlmICh1bmxpa2VseShncGlvc3RhdHVzKSkgeworCQkJLyoKKwkJCSAqIFNvbWUgdW5leHBlY3RlZCBiaXRzIHJlbWFpbi4gSWYgdGhleSBjb3VsZCBoYXZlCisJCQkgKiBjYXVzZWQgdGhlIGludGVycnVwdCwgY29tcGxhaW4gYW5kIGNsZWFyLgorCQkJICogTUVBOiB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm9uLWlkZWFsLgorCQkJICogd2Ugc2hvdWxkIGxvb2sgaW50byBhdXRvLWRpc2FibGUgb2YgdW5leHBlY3RlZAorCQkJICogR1BJTyBpbnRlcnJ1cHRzLCBwb3NzaWJseSBvbiBhICJ0aHJlZSBzdHJpa2VzIgorCQkJICogYmFzaXMuCisJCQkgKi8KKwkJCXUzMiBtYXNrOworCQkJbWFzayA9IGlwYXRoX3JlYWRfa3JlZzMyKAorCQkJCWRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7CisJCQlpZiAobWFzayAmIGdwaW9zdGF0dXMpIHsKKwkJCQlpcGF0aF9kYmcoIlVuZXhwZWN0ZWQgR1BJTyBJUlEgYml0cyAleFxuIiwKKwkJCQkgIGdwaW9zdGF0dXMgJiBtYXNrKTsKKwkJCQl0b19jbGVhciB8PSAoZ3Bpb3N0YXR1cyAmIG1hc2spOworCQkJfQorCQl9CisJCWlmICh0b19jbGVhcikgeworCQkJaXBhdGhfd3JpdGVfa3JlZyhkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX2NsZWFyLAorCQkJCQkodTY0KSB0b19jbGVhcik7CisJCX0KIAl9CiAJY2hrMHJjdiB8PSBpc3RhdCAmIHBvcnQwcmJpdHM7CiAKQEAgLTkxMSw5ICsxMDQ5LDkgQEAKIAkJaXN0YXQgJj0gfnBvcnQwcmJpdHM7CiAJfQogCi0JaWYgKGlzdGF0ICYgKChpbmZpbmlwYXRoX2lfcmN2YXZhaWxfbWFzayA8PAorCWlmIChpc3RhdCAmICgoZGQtPmlwYXRoX2lfcmN2YXZhaWxfbWFzayA8PAogCQkgICAgICBJTkZJTklQQVRIX0lfUkNWQVZBSUxfU0hJRlQpCi0JCSAgICAgfCAoaW5maW5pcGF0aF9pX3JjdnVyZ19tYXNrIDw8CisJCSAgICAgfCAoZGQtPmlwYXRoX2lfcmN2dXJnX21hc2sgPDwKIAkJCUlORklOSVBBVEhfSV9SQ1ZVUkdfU0hJRlQpKSkKIAkJaGFuZGxlX3VyY3YoZGQsIGlzdGF0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tlcm5lbC5oCmluZGV4IGE4YTU2MjcuLmQ3NTQwYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXJuZWwuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2VybmVsLmgKQEAgLTM5LDYgKzM5LDggQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAogI2luY2x1ZGUgImlwYXRoX2NvbW1vbi5oIgpAQCAtNjIsNyArNjQsNyBAQAogCS8qIHJjdmhkcnEgYmFzZSwgbmVlZHMgbW1hcCBiZWZvcmUgdXNlZnVsICovCiAJdm9pZCAqcG9ydF9yY3ZoZHJxOwogCS8qIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Mgd2hlcmUgaGRycXRhaWwgaXMgdXBkYXRlZCAqLwotCXZvbGF0aWxlIF9fbGU2NCAqcG9ydF9yY3ZoZHJ0YWlsX2t2YWRkcjsKKwl2b2lkICpwb3J0X3JjdmhkcnRhaWxfa3ZhZGRyOwogCS8qCiAJICogdGVtcCBidWZmZXIgZm9yIGV4cGVjdGVkIHNlbmQgc2V0dXAsIGFsbG9jYXRlZCBhdCBvcGVuLCBpbnN0ZWFkCiAJICogb2YgZWFjaCBzZXR1cCBjYWxsCkBAIC03OSw4ICs4MSw4IEBACiAJZG1hX2FkZHJfdCBwb3J0X3JjdmhkcnFfcGh5czsKIAlkbWFfYWRkcl90IHBvcnRfcmN2aGRycXRhaWxhZGRyX3BoeXM7CiAJLyoKLQkgKiBudW1iZXIgb2Ygb3BlbnMgb24gdGhpcyBpbnN0YW5jZSAoMCBvciAxOyBpZ25vcmluZyBmb3JrcywgZHVwLAotCSAqIGV0Yy4gZm9yIG5vdykKKwkgKiBudW1iZXIgb2Ygb3BlbnMgKGluY2x1ZGluZyBzbGF2ZSBzdWJwb3J0cykgb24gdGhpcyBpbnN0YW5jZQorCSAqIChpZ25vcmluZyBmb3JrcywgZHVwLCBldGMuIGZvciBub3cpCiAJICovCiAJaW50IHBvcnRfY250OwogCS8qCkBAIC04OSw2ICs5MSwxMCBAQAogCSAqLwogCS8qIGluc3RlYWQgb2YgY2FsY3VsYXRpbmcgaXQgKi8KIAl1bnNpZ25lZCBwb3J0X3BvcnQ7CisJLyogbm9uLXplcm8gaWYgcG9ydCBpcyBiZWluZyBzaGFyZWQuICovCisJdTE2IHBvcnRfc3VicG9ydF9jbnQ7CisJLyogbm9uLXplcm8gaWYgcG9ydCBpcyBiZWluZyBzaGFyZWQuICovCisJdTE2IHBvcnRfc3VicG9ydF9pZDsKIAkvKiBjaGlwIG9mZnNldCBvZiBQSU8gYnVmZmVycyBmb3IgdGhpcyBwb3J0ICovCiAJdTMyIHBvcnRfcGlvYnVmczsKIAkvKiBob3cgbWFueSBhbGxvY19wYWdlcygpIGNodW5rcyBpbiBwb3J0X3JjdmVncmJ1Zl9wYWdlcyAqLwpAQCAtMTIxLDYgKzEyNywxNiBAQAogCXUxNiBwb3J0X3BrZXlzWzRdOwogCS8qIHNvIGZpbGUgb3BzIGNhbiBnZXQgYXQgdW5pdCAqLwogCXN0cnVjdCBpcGF0aF9kZXZkYXRhICpwb3J0X2RkOworCS8qIEEgcGFnZSBvZiBtZW1vcnkgZm9yIHJjdmhkcmhlYWQsIHJjdmVncmhlYWQsIHJjdmVncnRhaWwgKiBOICovCisJdm9pZCAqc3VicG9ydF91cmVnYmFzZTsKKwkvKiBBbiBhcnJheSBvZiBwYWdlcyBmb3IgdGhlIGVhZ2VyIHJlY2VpdmUgYnVmZmVycyAqIE4gKi8KKwl2b2lkICpzdWJwb3J0X3JjdmVncmJ1ZjsKKwkvKiBBbiBhcnJheSBvZiBwYWdlcyBmb3IgdGhlIGVhZ2VyIGhlYWRlciBxdWV1ZSBlbnRyaWVzICogTiAqLworCXZvaWQgKnN1YnBvcnRfcmN2aGRyX2Jhc2U7CisJLyogVGhlIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgd2hpY2ggb3BlbmVkIHRoaXMgcG9ydCAqLworCXUzMiB1c2VydmVyc2lvbjsKKwkvKiBCaXRtYXNrIG9mIGFjdGl2ZSBzbGF2ZXMgKi8KKwl1MzIgYWN0aXZlX3NsYXZlczsKIH07CiAKIHN0cnVjdCBza19idWZmOwpAQCAtMTMyLDYgKzE0OCwxMSBAQAogCXZvaWQgKmxfYXJnOwogfTsKIAorc3RydWN0IGlwYXRoX3NrYmluZm8geworCXN0cnVjdCBza19idWZmICpza2I7CisJZG1hX2FkZHJfdCBwaHlzOworfTsKKwogc3RydWN0IGlwYXRoX2RldmRhdGEgewogCXN0cnVjdCBsaXN0X2hlYWQgaXBhdGhfbGlzdDsKIApAQCAtMTU0LDcgKzE3NSw3IEBACiAJLyogaXBhdGhfY2ZncG9ydHMgcG9pbnRlcnMgKi8KIAlzdHJ1Y3QgaXBhdGhfcG9ydGRhdGEgKippcGF0aF9wZDsKIAkvKiBza19idWZmcyB1c2VkIGJ5IHBvcnQgMCBlYWdlciByZWNlaXZlIHF1ZXVlICovCi0Jc3RydWN0IHNrX2J1ZmYgKippcGF0aF9wb3J0MF9za2JzOworCXN0cnVjdCBpcGF0aF9za2JpbmZvICppcGF0aF9wb3J0MF9za2JpbmZvOwogCS8qIGt2aXJ0IGFkZHJlc3Mgb2YgMXN0IDJrIHBpbyBidWZmZXIgKi8KIAl2b2lkIF9faW9tZW0gKmlwYXRoX3BpbzJrYmFzZTsKIAkvKiBrdmlydCBhZGRyZXNzIG9mIDFzdCA0ayBwaW8gYnVmZmVyICovCkBAIC0zMTUsMTIgKzMzNiwxNiBAQAogCXU4IGlwYXRoX2h0X3NsYXZlX29mZjsKIAkvKiBmb3Igd3JpdGUgY29tYmluaW5nIHNldHRpbmdzICovCiAJdW5zaWduZWQgbG9uZyBpcGF0aF93Y19jb29raWU7CisJdW5zaWduZWQgbG9uZyBpcGF0aF93Y19iYXNlOworCXVuc2lnbmVkIGxvbmcgaXBhdGhfd2NfbGVuOwogCS8qIHJlZiBjb3VudCBmb3IgZWFjaCBwa2V5ICovCiAJYXRvbWljX3QgaXBhdGhfcGtleXJlZnNbNF07CiAJLyogc2hhZG93IGNvcHkgb2YgYWxsIGV4cHRpZHMgcGh5c2FkZHI7IHVzZWQgb25seSBieSBmdW5jc2ltICovCiAJdTY0ICppcGF0aF90aWRzaW1zaGFkb3c7CiAJLyogc2hhZG93IGNvcHkgb2Ygc3RydWN0IHBhZ2UgKidzIGZvciBleHAgdGlkIHBhZ2VzICovCiAJc3RydWN0IHBhZ2UgKippcGF0aF9wYWdlc2hhZG93OworCS8qIHNoYWRvdyBjb3B5IG9mIGRtYSBoYW5kbGVzIGZvciBleHAgdGlkIHBhZ2VzICovCisJZG1hX2FkZHJfdCAqaXBhdGhfcGh5c3NoYWRvdzsKIAkvKiBsb2NrIHRvIHdvcmthcm91bmQgY2hpcCBidWcgOTQzNyAqLwogCXNwaW5sb2NrX3QgaXBhdGhfdGlkX2xvY2s7CiAKQEAgLTQwMiw2ICs0MjcsOSBAQAogCXVuc2lnbmVkIGxvbmcgaXBhdGhfcmN2Y3RybDsKIAkvKiBzaGFkb3cga3Jfc2VuZGN0cmwgKi8KIAl1bnNpZ25lZCBsb25nIGlwYXRoX3NlbmRjdHJsOworCS8qIHBvcnRzIHdhaXRpbmcgZm9yIFBJT2F2YWlsIGludHIgKi8KKwl1bnNpZ25lZCBsb25nIGlwYXRoX3BvcnRwaW93YWl0OworCXVuc2lnbmVkIGxvbmcgaXBhdGhfbGFzdGNhbmNlbDsgLyogdG8gbm90IGNvdW50IGFybWxhdW5jaCBhZnRlciBjYW5jZWwgKi8KIAogCS8qIHZhbHVlIHdlIHB1dCBpbiBrcl9yY3ZoZHJjbnQgKi8KIAl1MzIgaXBhdGhfcmN2aGRyY250OwpAQCAtNDY1LDggKzQ5Myw2IEBACiAJdTMyIGlwYXRoX2h0d2lkdGg7CiAJLyogSFQgc3BlZWQgKDIwMCw0MDAsODAwLDEwMDApIGZyb20gSFQgY29uZmlnICovCiAJdTMyIGlwYXRoX2h0c3BlZWQ7Ci0JLyogcG9ydHMgd2FpdGluZyBmb3IgUElPYXZhaWwgaW50ciAqLwotCXVuc2lnbmVkIGxvbmcgaXBhdGhfcG9ydHBpb3dhaXQ7CiAJLyoKIAkgKiBudW1iZXIgb2Ygc2VxdWVudGlhbCBpYmNzdGF0dXMgY2hhbmdlIGZvciBwb2xsaW5nIGFjdGl2ZS9xdWlldAogCSAqIChpLmUuLCBsaW5rIG5vdCBjb21pbmcgdXApLgpAQCAtNTEwLDggKzUzNiw0NyBAQAogCXUzMiBpcGF0aF9sbGlfY291bnRlcjsKIAkvKiBsb2NhbCBsaW5rIGludGVncml0eSBlcnJvcnMgKi8KIAl1MzIgaXBhdGhfbGxpX2Vycm9yczsKKwkvKgorCSAqIEFib3ZlIGNvdW50cyBvbmx5IGNhc2VzIHdoZXJlIF9zdWNjZXNzaXZlXyBMb2NhbExpbmtJbnRlZ3JpdHkKKwkgKiBlcnJvcnMgd2VyZSBzZWVuIGluIHRoZSByZWNlaXZlIGhlYWRlcnMgb2Yga2Vybi1wYWNrZXRzLgorCSAqIEJlbG93IGFyZSB0aGUgdGhyZWUgKG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykgY291bnRlcnMKKwkgKiBtYWludGFpbmVkIHZpYSBHUElPIGludGVycnVwdHMgb24gaWJhNjEyMC1yZXYyLgorCSAqLworCXUzMiBpcGF0aF9yeGZjX3Vuc3VwdmxfZXJyczsKKwl1MzIgaXBhdGhfb3ZlcnJ1bl90aHJlc2hfZXJyczsKKwl1MzIgaXBhdGhfbGxpX2VycnM7CisKKwkvKgorCSAqIE5vdCBhbGwgZGV2aWNlcyBtYW5hZ2VkIGJ5IGEgZHJpdmVyIGluc3RhbmNlIGFyZSB0aGUgc2FtZQorCSAqIHR5cGUsIHNvIHRoZXNlIGZpZWxkcyBtdXN0IGJlIHBlci1kZXZpY2UuCisJICovCisJdTY0IGlwYXRoX2lfYml0c2V4dGFudDsKKwlpcGF0aF9lcnJfdCBpcGF0aF9lX2JpdHNleHRhbnQ7CisJaXBhdGhfZXJyX3QgaXBhdGhfaHdlX2JpdHNleHRhbnQ7CisKKwkvKgorCSAqIEJlbG93IHNob3VsZCBiZSBjb21wdXRhYmxlIGZyb20gbnVtYmVyIG9mIHBvcnRzLAorCSAqIHNpbmNlIHRoZXkgYXJlIG5ldmVyIG1vZGlmaWVkLgorCSAqLworCXUzMiBpcGF0aF9pX3JjdmF2YWlsX21hc2s7CisJdTMyIGlwYXRoX2lfcmN2dXJnX21hc2s7CisKKwkvKgorCSAqIFJlZ2lzdGVyIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsIHVzZWQgZm9yCisJICogSTJDIHNlcmlhbCBmbGFzaC4KKwkgKi8KKwl1MTYgaXBhdGhfZ3Bpb19zZGFfbnVtOworCXUxNiBpcGF0aF9ncGlvX3NjbF9udW07CisJdTY0IGlwYXRoX2dwaW9fc2RhOworCXU2NCBpcGF0aF9ncGlvX3NjbDsKIH07CiAKKy8qIFByaXZhdGUgZGF0YSBmb3IgZmlsZSBvcGVyYXRpb25zICovCitzdHJ1Y3QgaXBhdGhfZmlsZWRhdGEgeworCXN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqcGQ7CisJdW5zaWduZWQgc3VicG9ydDsKKwl1bnNpZ25lZCB0aWRjdXJzb3I7Cit9OwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgaXBhdGhfZGV2X2xpc3Q7CiBleHRlcm4gc3BpbmxvY2tfdCBpcGF0aF9kZXZzX2xvY2s7CiBleHRlcm4gc3RydWN0IGlwYXRoX2RldmRhdGEgKmlwYXRoX2xvb2t1cChpbnQgdW5pdCk7CkBAIC01MjEsNiArNTg2LDcgQEAKIHZvaWQgaXBhdGhfZGlzYWJsZV93YyhzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQpOwogaW50IGlwYXRoX2NvdW50X3VuaXRzKGludCAqbnByZXNlbnRwLCBpbnQgKm51cHAsIHUzMiAqbWF4cG9ydHNwKTsKIHZvaWQgaXBhdGhfc2h1dGRvd25fZGV2aWNlKHN0cnVjdCBpcGF0aF9kZXZkYXRhICopOwordm9pZCBpcGF0aF9kaXNhcm1fc2VuZGVycmJ1ZnMoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiAKIHN0cnVjdCBmaWxlX29wZXJhdGlvbnM7CiBpbnQgaXBhdGhfY2Rldl9pbml0KGludCBtaW5vciwgY2hhciAqbmFtZSwgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKQEAgLTU3Miw3ICs2MzgsMTEgQEAKIGludCBpcGF0aF9zZXRfcnhfcG9sX2ludihzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQsIHU4IG5ld19wb2xfaW52KTsKIAogLyogZm9yIHVzZSBpbiBzeXN0ZW0gY2FsbHMsIHdoZXJlIHdlIHdhbnQgdG8ga25vdyBkZXZpY2UgdHlwZSwgZXRjLiAqLwotI2RlZmluZSBwb3J0X2ZwKGZwKSAoKHN0cnVjdCBpcGF0aF9wb3J0ZGF0YSAqKSAoZnApLT5wcml2YXRlX2RhdGEpCisjZGVmaW5lIHBvcnRfZnAoZnApICgoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopKGZwKS0+cHJpdmF0ZV9kYXRhKS0+cGQKKyNkZWZpbmUgc3VicG9ydF9mcChmcCkgXAorCSgoc3RydWN0IGlwYXRoX2ZpbGVkYXRhICopKGZwKS0+cHJpdmF0ZV9kYXRhKS0+c3VicG9ydAorI2RlZmluZSB0aWRjdXJzb3JfZnAoZnApIFwKKwkoKHN0cnVjdCBpcGF0aF9maWxlZGF0YSAqKShmcCktPnByaXZhdGVfZGF0YSktPnRpZGN1cnNvcgogCiAvKgogICogdmFsdWVzIGZvciBpcGF0aF9mbGFncwpAQCAtNjEyLDYgKzY4MiwxNSBAQAogCQkvKiBjYW4gbWlzcyBwb3J0MCByeCBpbnRlcnJ1cHRzICovCiAjZGVmaW5lIElQQVRIX1BPTExfUlhfSU5UUiAgMHg0MDAwMAogI2RlZmluZSBJUEFUSF9ESVNBQkxFRCAgICAgIDB4ODAwMDAgLyogYWRtaW5pc3RyYXRpdmVseSBkaXNhYmxlZCAqLworCQkvKiBVc2UgR1BJTyBpbnRlcnJ1cHRzIGZvciBuZXcgY291bnRlcnMgKi8KKyNkZWZpbmUgSVBBVEhfR1BJT19FUlJJTlRSUyAweDEwMDAwMAorCisvKiBCaXRzIGluIEdQSU8gZm9yIHRoZSBhZGRlZCBpbnRlcnJ1cHRzICovCisjZGVmaW5lIElQQVRIX0dQSU9fUE9SVDBfQklUIDIKKyNkZWZpbmUgSVBBVEhfR1BJT19SWFVWTF9CSVQgMworI2RlZmluZSBJUEFUSF9HUElPX09WUlVOX0JJVCA0CisjZGVmaW5lIElQQVRIX0dQSU9fTExJX0JJVCA1CisjZGVmaW5lIElQQVRIX0dQSU9fRVJSSU5UUl9NQVNLIDB4MzgKIAogLyogcG9ydGRhdGEgZmxhZyBiaXQgb2Zmc2V0cyAqLwogCQkvKiB3YWl0aW5nIGZvciBhIHBhY2tldCB0byBhcnJpdmUgKi8KQEAgLTc5OSw2ICs4NzgsMTMgQEAKIGludCBpcGF0aGZzX3JlbW92ZV9kZXZpY2Uoc3RydWN0IGlwYXRoX2RldmRhdGEgKik7CiAKIC8qCisgKiBkbWFfYWRkciB3cmFwcGVycyAtIGFsbCAwJ3MgaW52YWxpZCBmb3IgaHcKKyAqLworZG1hX2FkZHJfdCBpcGF0aF9tYXBfcGFnZShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJICBzaXplX3QsIGludCk7CitkbWFfYWRkcl90IGlwYXRoX21hcF9zaW5nbGUoc3RydWN0IHBjaV9kZXYgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7CisKKy8qCiAgKiBGbHVzaCB3cml0ZSBjb21iaW5pbmcgc3RvcmUgYnVmZmVycyAoaWYgcHJlc2VudCkgYW5kIHBlcmZvcm0gYSB3cml0ZQogICogYmFycmllci4KICAqLwpAQCAtODU1LDQgKzk0MSwyMCBAQAogCiAjZW5kaWYgLyogX0lQQVRIX0RFQlVHR0lORyAqLwogCisvKgorICogdGhpcyBpcyB1c2VkIGZvciBmb3JtYXR0aW5nIGh3IGVycm9yIG1lc3NhZ2VzLi4uCisgKi8KK3N0cnVjdCBpcGF0aF9od2Vycm9yX21zZ3MgeworCXU2NCBtYXNrOworCWNvbnN0IGNoYXIgKm1zZzsKK307CisKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfTVNHKGEsIGIpIHsgLm1hc2sgPSBJTkZJTklQQVRIX0hXRV8jI2EsIC5tc2cgPSBiIH0KKworLyogaW4gaXBhdGhfaW50ci5jLi4uICovCit2b2lkIGlwYXRoX2Zvcm1hdF9od2Vycm9ycyh1NjQgaHdlcnJzLAorCQkJICAgY29uc3Qgc3RydWN0IGlwYXRoX2h3ZXJyb3JfbXNncyAqaHdlcnJtc2dzLAorCQkJICAgc2l6ZV90IG5od2Vycm1zZ3MsCisJCQkgICBjaGFyICptc2csIHNpemVfdCBsbXNnKTsKKwogI2VuZGlmCQkJCS8qIF9JUEFUSF9LRVJORUxfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9rZXlzLmMKaW5kZXggYmExYjkzMi4uOWE2Y2JkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX2tleXMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfa2V5cy5jCkBAIC0xMTgsOSArMTE4LDEwIEBACiAgKiBDaGVjayB0aGUgSUIgU0dFIGZvciB2YWxpZGl0eSBhbmQgaW5pdGlhbGl6ZSBvdXIgaW50ZXJuYWwgdmVyc2lvbgogICogb2YgaXQuCiAgKi8KLWludCBpcGF0aF9sa2V5X29rKHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsIHN0cnVjdCBpcGF0aF9zZ2UgKmlzZ2UsCitpbnQgaXBhdGhfbGtleV9vayhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfc2dlICppc2dlLAogCQkgIHN0cnVjdCBpYl9zZ2UgKnNnZSwgaW50IGFjYykKIHsKKwlzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0ID0gJnRvX2lkZXYocXAtPmlicXAuZGV2aWNlKS0+bGtfdGFibGU7CiAJc3RydWN0IGlwYXRoX21yZWdpb24gKm1yOwogCXVuc2lnbmVkIG4sIG07CiAJc2l6ZV90IG9mZjsKQEAgLTE0MCw3ICsxNDEsOCBAQAogCQlnb3RvIGJhaWw7CiAJfQogCW1yID0gcmt0LT50YWJsZVsoc2dlLT5sa2V5ID4+ICgzMiAtIGliX2lwYXRoX2xrZXlfdGFibGVfc2l6ZSkpXTsKLQlpZiAodW5saWtlbHkobXIgPT0gTlVMTCB8fCBtci0+bGtleSAhPSBzZ2UtPmxrZXkpKSB7CisJaWYgKHVubGlrZWx5KG1yID09IE5VTEwgfHwgbXItPmxrZXkgIT0gc2dlLT5sa2V5IHx8CisJCSAgICAgcXAtPmlicXAucGQgIT0gbXItPnBkKSkgewogCQlyZXQgPSAwOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtMTg4LDkgKzE5MCwxMCBAQAogICoKICAqIFJldHVybiAxIGlmIHN1Y2Nlc3NmdWwsIG90aGVyd2lzZSAwLgogICovCi1pbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCitpbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKIAkJICB1MzIgbGVuLCB1NjQgdmFkZHIsIHUzMiBya2V5LCBpbnQgYWNjKQogeworCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QgPSAmZGV2LT5sa190YWJsZTsKIAlzdHJ1Y3QgaXBhdGhfc2dlICpzZ2UgPSAmc3MtPnNnZTsKIAlzdHJ1Y3QgaXBhdGhfbXJlZ2lvbiAqbXI7CkBAIC0yMTQsNyArMjE3LDggQEAKIAl9CiAKIAltciA9IHJrdC0+dGFibGVbKHJrZXkgPj4gKDMyIC0gaWJfaXBhdGhfbGtleV90YWJsZV9zaXplKSldOwotCWlmICh1bmxpa2VseShtciA9PSBOVUxMIHx8IG1yLT5sa2V5ICE9IHJrZXkpKSB7CisJaWYgKHVubGlrZWx5KG1yID09IE5VTEwgfHwgbXItPmxrZXkgIT0gcmtleSB8fAorCQkgICAgIHFwLT5pYnFwLnBkICE9IG1yLT5wZCkpIHsKIAkJcmV0ID0gMDsKIAkJZ290byBiYWlsOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tYWQuYwppbmRleCA3MmQxZGI4Li4yNTkwOGIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfbWFkLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21hZC5jCkBAIC04Nyw3ICs4Nyw4IEBACiAJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gdG9faWRldihpYmRldiktPmRkOwogCXUzMiB2ZW5kb3IsIG1hanJldiwgbWlucmV2OwogCi0JaWYgKHNtcC0+YXR0cl9tb2QpCisJLyogR1VJRCAwIGlzIGlsbGVnYWwgKi8KKwlpZiAoc21wLT5hdHRyX21vZCB8fCAoZGQtPmlwYXRoX2d1aWQgPT0gMCkpCiAJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOwogCiAJbmlwLT5iYXNlX3ZlcnNpb24gPSAxOwpAQCAtMTMxLDEwICsxMzIsMTUgQEAKIAkgKiBXZSBvbmx5IHN1cHBvcnQgb25lIEdVSUQgZm9yIG5vdy4gIElmIHRoaXMgY2hhbmdlcywgdGhlCiAJICogcG9ydGluZm8uZ3VpZF9jYXAgZmllbGQgbmVlZHMgdG8gYmUgdXBkYXRlZCB0b28uCiAJICovCi0JaWYgKHN0YXJ0Z3ggPT0gMCkKLQkJLyogVGhlIGZpcnN0IGlzIGEgY29weSBvZiB0aGUgcmVhZC1vbmx5IEhXIEdVSUQuICovCi0JCSpwID0gdG9faWRldihpYmRldiktPmRkLT5pcGF0aF9ndWlkOwotCWVsc2UKKwlpZiAoc3RhcnRneCA9PSAwKSB7CisJCV9fYmU2NCBnID0gdG9faWRldihpYmRldiktPmRkLT5pcGF0aF9ndWlkOworCQlpZiAoZyA9PSAwKQorCQkJLyogR1VJRCAwIGlzIGlsbGVnYWwgKi8KKwkJCXNtcC0+c3RhdHVzIHw9IElCX1NNUF9JTlZBTElEX0ZJRUxEOworCQllbHNlCisJCQkvKiBUaGUgZmlyc3QgaXMgYSBjb3B5IG9mIHRoZSByZWFkLW9ubHkgSFcgR1VJRC4gKi8KKwkJCSpwID0gZzsKKwl9IGVsc2UKIAkJc21wLT5zdGF0dXMgfD0gSUJfU01QX0lOVkFMSURfRklFTEQ7CiAKIAlyZXR1cm4gcmVwbHkoc21wKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX21yLmMKaW5kZXggYjM2ZjZmYi4uYTA2NzNjMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9tci5jCkBAIC0xMzgsNiArMTM4LDcgQEAKIAkJZ290byBiYWlsOwogCX0KIAorCW1yLT5tci5wZCA9IHBkOwogCW1yLT5tci51c2VyX2Jhc2UgPSAqaW92YV9zdGFydDsKIAltci0+bXIuaW92YSA9ICppb3ZhX3N0YXJ0OwogCW1yLT5tci5sZW5ndGggPSAwOwpAQCAtMTk3LDYgKzE5OCw3IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKKwltci0+bXIucGQgPSBwZDsKIAltci0+bXIudXNlcl9iYXNlID0gcmVnaW9uLT51c2VyX2Jhc2U7CiAJbXItPm1yLmlvdmEgPSByZWdpb24tPnZpcnRfYmFzZTsKIAltci0+bXIubGVuZ3RoID0gcmVnaW9uLT5sZW5ndGg7CkBAIC0yODksNiArMjkxLDcgQEAKIAkgKiBSZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCBidXQgbm8gdmFsaWQgbWFwcGluZyAoUktFWSBjYW4ndCBiZQogCSAqIHVzZWQpLgogCSAqLworCWZtci0+bXIucGQgPSBwZDsKIAlmbXItPm1yLnVzZXJfYmFzZSA9IDA7CiAJZm1yLT5tci5pb3ZhID0gMDsKIAlmbXItPm1yLmxlbmd0aCA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcXAuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCmluZGV4IDIyNGIwZjQuLjQ2YzFjODkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9xcC5jCkBAIC0zMzUsNiArMzM1LDcgQEAKIAlxcC0+c19hY2tfc3RhdGUgPSBJQl9PUENPREVfUkNfQUNLTk9XTEVER0U7CiAJcXAtPnJfYWNrX3N0YXRlID0gSUJfT1BDT0RFX1JDX0FDS05PV0xFREdFOwogCXFwLT5yX25ha19zdGF0ZSA9IDA7CisJcXAtPnJfd3JpZF92YWxpZCA9IDA7CiAJcXAtPnNfcm5yX3RpbWVvdXQgPSAwOwogCXFwLT5zX2hlYWQgPSAwOwogCXFwLT5zX3RhaWwgPSAwOwpAQCAtMzQyLDYgKzM0Myw3IEBACiAJcXAtPnNfbGFzdCA9IDA7CiAJcXAtPnNfc3NuID0gMTsKIAlxcC0+c19sc24gPSAwOworCXFwLT5zX3dhaXRfY3JlZGl0ID0gMDsKIAlpZiAocXAtPnJfcnEud3EpIHsKIAkJcXAtPnJfcnEud3EtPmhlYWQgPSAwOwogCQlxcC0+cl9ycS53cS0+dGFpbCA9IDA7CkBAIC0zNTIsMTIgKzM1NCwxMyBAQAogLyoqCiAgKiBpcGF0aF9lcnJvcl9xcCAtIHB1dCBhIFFQIGludG8gYW4gZXJyb3Igc3RhdGUKICAqIEBxcDogdGhlIFFQIHRvIHB1dCBpbnRvIGFuIGVycm9yIHN0YXRlCisgKiBAZXJyOiB0aGUgcmVjZWl2ZSBjb21wbGV0aW9uIGVycm9yIHRvIHNpZ25hbCBpZiBhIFJXUUUgaXMgYWN0aXZlCiAgKgogICogRmx1c2hlcyBib3RoIHNlbmQgYW5kIHJlY2VpdmUgd29yayBxdWV1ZXMuCiAgKiBRUCBzX2xvY2sgc2hvdWxkIGJlIGhlbGQgYW5kIGludGVycnVwdHMgZGlzYWJsZWQuCiAgKi8KIAotdm9pZCBpcGF0aF9lcnJvcl9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwKQordm9pZCBpcGF0aF9lcnJvcl9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBlbnVtIGliX3djX3N0YXR1cyBlcnIpCiB7CiAJc3RydWN0IGlwYXRoX2liZGV2ICpkZXYgPSB0b19pZGV2KHFwLT5pYnFwLmRldmljZSk7CiAJc3RydWN0IGliX3djIHdjOwpAQCAtMzczLDcgKzM3Niw2IEBACiAJCWxpc3RfZGVsX2luaXQoJnFwLT5waW93YWl0KTsKIAlzcGluX3VubG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOwogCi0Jd2Muc3RhdHVzID0gSUJfV0NfV1JfRkxVU0hfRVJSOwogCXdjLnZlbmRvcl9lcnIgPSAwOwogCXdjLmJ5dGVfbGVuID0gMDsKIAl3Yy5pbW1fZGF0YSA9IDA7CkBAIC0zODUsNiArMzg3LDEyIEBACiAJd2Muc2wgPSAwOwogCXdjLmRsaWRfcGF0aF9iaXRzID0gMDsKIAl3Yy5wb3J0X251bSA9IDA7CisJaWYgKHFwLT5yX3dyaWRfdmFsaWQpIHsKKwkJcXAtPnJfd3JpZF92YWxpZCA9IDA7CisJCXdjLnN0YXR1cyA9IGVycjsKKwkJaXBhdGhfY3FfZW50ZXIodG9faWNxKHFwLT5pYnFwLnNlbmRfY3EpLCAmd2MsIDEpOworCX0KKwl3Yy5zdGF0dXMgPSBJQl9XQ19XUl9GTFVTSF9FUlI7CiAKIAl3aGlsZSAocXAtPnNfbGFzdCAhPSBxcC0+c19oZWFkKSB7CiAJCXN0cnVjdCBpcGF0aF9zd3FlICp3cWUgPSBnZXRfc3dxZV9wdHIocXAsIHFwLT5zX2xhc3QpOwpAQCAtNTAxLDcgKzUwOSw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBJQl9RUFNfRVJSOgotCQlpcGF0aF9lcnJvcl9xcChxcCk7CisJCWlwYXRoX2Vycm9yX3FwKHFwLCBJQl9XQ19HRU5FUkFMX0VSUik7CiAJCWJyZWFrOwogCiAJZGVmYXVsdDoKQEAgLTUxNiw3ICs1MjQsNyBAQAogCQlxcC0+cmVtb3RlX3FwbiA9IGF0dHItPmRlc3RfcXBfbnVtOwogCiAJaWYgKGF0dHJfbWFzayAmIElCX1FQX1NRX1BTTikgewotCQlxcC0+c19uZXh0X3BzbiA9IGF0dHItPnNxX3BzbjsKKwkJcXAtPnNfcHNuID0gcXAtPnNfbmV4dF9wc24gPSBhdHRyLT5zcV9wc247CiAJCXFwLT5zX2xhc3RfcHNuID0gcXAtPnNfbmV4dF9wc24gLSAxOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JjLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwppbmRleCBhMDg2NTQwLi5hNTA0Y2Y2IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmMuYwpAQCAtMjAxLDYgKzIwMSwxOCBAQAogCSAgICBxcC0+c19ybnJfdGltZW91dCkKIAkJZ290byBkb25lOwogCisJLyogTGltaXQgdGhlIG51bWJlciBvZiBwYWNrZXRzIHNlbnQgd2l0aG91dCBhbiBBQ0suICovCisJaWYgKGlwYXRoX2NtcDI0KHFwLT5zX3BzbiwgcXAtPnNfbGFzdF9wc24gKyBJUEFUSF9QU05fQ1JFRElUKSA+IDApIHsKKwkJcXAtPnNfd2FpdF9jcmVkaXQgPSAxOworCQlkZXYtPm5fcmNfc3RhbGxzKys7CisJCXNwaW5fbG9jaygmZGV2LT5wZW5kaW5nX2xvY2spOworCQlpZiAobGlzdF9lbXB0eSgmcXAtPnRpbWVyd2FpdCkpCisJCQlsaXN0X2FkZF90YWlsKCZxcC0+dGltZXJ3YWl0LAorCQkJCSAgICAgICZkZXYtPnBlbmRpbmdbZGV2LT5wZW5kaW5nX2luZGV4XSk7CisJCXNwaW5fdW5sb2NrKCZkZXYtPnBlbmRpbmdfbG9jayk7CisJCWdvdG8gZG9uZTsKKwl9CisKIAkvKiBoZWFkZXIgc2l6ZSBpbiAzMi1iaXQgd29yZHMgTFJIK0JUSCA9ICg4KzEyKS80LiAqLwogCWh3b3JkcyA9IDU7CiAJYnRoMCA9IDA7CkBAIC0yMjEsNyArMjMzLDcgQEAKIAkJCS8qIENoZWNrIGlmIHNlbmQgd29yayBxdWV1ZSBpcyBlbXB0eS4gKi8KIAkJCWlmIChxcC0+c190YWlsID09IHFwLT5zX2hlYWQpCiAJCQkJZ290byBkb25lOwotCQkJcXAtPnNfcHNuID0gd3FlLT5wc24gPSBxcC0+c19uZXh0X3BzbjsKKwkJCXdxZS0+cHNuID0gcXAtPnNfbmV4dF9wc247CiAJCQluZXdyZXEgPSAxOwogCQl9CiAJCS8qCkBAIC0zOTMsMTIgKzQwNSw2IEBACiAJCXNzID0gJnFwLT5zX3NnZTsKIAkJbGVuID0gcXAtPnNfbGVuOwogCQlpZiAobGVuID4gcG10dSkgewotCQkJLyoKLQkJCSAqIFJlcXVlc3QgYW4gQUNLIGV2ZXJ5IDEvMiBNQiB0byBhdm9pZCByZXRyYW5zbWl0Ci0JCQkgKiB0aW1lb3V0cy4KLQkJCSAqLwotCQkJaWYgKCgod3FlLT5sZW5ndGggLSBsZW4pICUgKDUxMiAqIDEwMjQpKSA9PSAwKQotCQkJCWJ0aDIgfD0gMSA8PCAzMTsKIAkJCWxlbiA9IHBtdHU7CiAJCQlicmVhazsKIAkJfQpAQCAtNDM1LDEyICs0NDEsNiBAQAogCQlzcyA9ICZxcC0+c19zZ2U7CiAJCWxlbiA9IHFwLT5zX2xlbjsKIAkJaWYgKGxlbiA+IHBtdHUpIHsKLQkJCS8qCi0JCQkgKiBSZXF1ZXN0IGFuIEFDSyBldmVyeSAxLzIgTUIgdG8gYXZvaWQgcmV0cmFuc21pdAotCQkJICogdGltZW91dHMuCi0JCQkgKi8KLQkJCWlmICgoKHdxZS0+bGVuZ3RoIC0gbGVuKSAlICg1MTIgKiAxMDI0KSkgPT0gMCkKLQkJCQlidGgyIHw9IDEgPDwgMzE7CiAJCQlsZW4gPSBwbXR1OwogCQkJYnJlYWs7CiAJCX0KQEAgLTQ5OCw2ICs0OTgsOCBAQAogCQkgKi8KIAkJZ290byBkb25lOwogCX0KKwlpZiAoaXBhdGhfY21wMjQocXAtPnNfcHNuLCBxcC0+c19sYXN0X3BzbiArIElQQVRIX1BTTl9DUkVESVQgLSAxKSA+PSAwKQorCQlidGgyIHw9IDEgPDwgMzE7CS8qIFJlcXVlc3QgQUNLLiAqLwogCXFwLT5zX2xlbiAtPSBsZW47CiAJcXAtPnNfaGRyd29yZHMgPSBod29yZHM7CiAJcXAtPnNfY3VyX3NnZSA9IHNzOwpAQCAtNzM3LDYgKzczOSwxNSBAQAogCXJldHVybjsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9sYXN0X3BzbihzdHJ1Y3QgaXBhdGhfcXAgKnFwLCB1MzIgcHNuKQoreworCWlmIChxcC0+c193YWl0X2NyZWRpdCkgeworCQlxcC0+c193YWl0X2NyZWRpdCA9IDA7CisJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJnFwLT5zX3Rhc2spOworCX0KKwlxcC0+c19sYXN0X3BzbiA9IHBzbjsKK30KKwogLyoqCiAgKiBkb19yY19hY2sgLSBwcm9jZXNzIGFuIGluY29taW5nIFJDIEFDSwogICogQHFwOiB0aGUgUVAgdGhlIEFDSyBjYW1lIGluIG9uCkBAIC04MDUsNyArODE2LDcgQEAKIAkJCSAqIFRoZSBsYXN0IHZhbGlkIFBTTiBzZWVuIGlzIHRoZSBwcmV2aW91cwogCQkJICogcmVxdWVzdCdzLgogCQkJICovCi0JCQlxcC0+c19sYXN0X3BzbiA9IHdxZS0+cHNuIC0gMTsKKwkJCXVwZGF0ZV9sYXN0X3BzbihxcCwgd3FlLT5wc24gLSAxKTsKIAkJCS8qIFJldHJ5IHRoaXMgcmVxdWVzdC4gKi8KIAkJCWlwYXRoX3Jlc3RhcnRfcmMocXAsIHdxZS0+cHNuLCAmd2MpOwogCQkJLyoKQEAgLTg2NCw3ICs4NzUsNyBAQAogCQlpcGF0aF9nZXRfY3JlZGl0KHFwLCBhZXRoKTsKIAkJcXAtPnNfcm5yX3JldHJ5ID0gcXAtPnNfcm5yX3JldHJ5X2NudDsKIAkJcXAtPnNfcmV0cnkgPSBxcC0+c19yZXRyeV9jbnQ7Ci0JCXFwLT5zX2xhc3RfcHNuID0gcHNuOworCQl1cGRhdGVfbGFzdF9wc24ocXAsIHBzbik7CiAJCXJldCA9IDE7CiAJCWdvdG8gYmFpbDsKIApAQCAtODgzLDcgKzg5NCw3IEBACiAJCQlnb3RvIGJhaWw7CiAKIAkJLyogVGhlIGxhc3QgdmFsaWQgUFNOIGlzIHRoZSBwcmV2aW91cyBQU04uICovCi0JCXFwLT5zX2xhc3RfcHNuID0gcHNuIC0gMTsKKwkJdXBkYXRlX2xhc3RfcHNuKHFwLCBwc24gLSAxKTsKIAogCQlkZXYtPm5fcmNfcmVzZW5kcyArPSAoaW50KXFwLT5zX3BzbiAtIChpbnQpcHNuOwogCkBAIC04OTgsNyArOTA5LDcgQEAKIAljYXNlIDM6CQkvKiBOQUsgKi8KIAkJLyogVGhlIGxhc3QgdmFsaWQgUFNOIHNlZW4gaXMgdGhlIHByZXZpb3VzIHJlcXVlc3Qncy4gKi8KIAkJaWYgKHFwLT5zX2xhc3QgIT0gcXAtPnNfdGFpbCkKLQkJCXFwLT5zX2xhc3RfcHNuID0gd3FlLT5wc24gLSAxOworCQkJdXBkYXRlX2xhc3RfcHNuKHFwLCB3cWUtPnBzbiAtIDEpOwogCQlzd2l0Y2ggKChhZXRoID4+IElQQVRIX0FFVEhfQ1JFRElUX1NISUZUKSAmCiAJCQlJUEFUSF9BRVRIX0NSRURJVF9NQVNLKSB7CiAJCWNhc2UgMDoJLyogUFNOIHNlcXVlbmNlIGVycm9yICovCkBAIC0xMDcxLDcgKzEwODIsNyBAQAogCQkgKiBzaW5jZSB3ZSBkb24ndCB3YW50IHNfc2dlIG1vZGlmaWVkLgogCQkgKi8KIAkJcXAtPnNfbGVuIC09IHBtdHU7Ci0JCXFwLT5zX2xhc3RfcHNuID0gcHNuOworCQl1cGRhdGVfbGFzdF9wc24ocXAsIHBzbik7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnFwLT5zX2xvY2ssIGZsYWdzKTsKIAkJaXBhdGhfY29weV9zZ2UoJnFwLT5zX3NnZSwgZGF0YSwgcG10dSk7CiAJCWdvdG8gYmFpbDsKQEAgLTEyMjMsNyArMTIzNCw3IEBACiAJCQkgKiBBZGRyZXNzIHJhbmdlIG11c3QgYmUgYSBzdWJzZXQgb2YgdGhlIG9yaWdpbmFsCiAJCQkgKiByZXF1ZXN0IGFuZCBzdGFydCBvbiBwbXR1IGJvdW5kYXJpZXMuCiAJCQkgKi8KLQkJCW9rID0gaXBhdGhfcmtleV9vayhkZXYsICZxcC0+c19yZG1hX3NnZSwKKwkJCW9rID0gaXBhdGhfcmtleV9vayhxcCwgJnFwLT5zX3JkbWFfc2dlLAogCQkJCQkgICBxcC0+c19yZG1hX2xlbiwgdmFkZHIsIHJrZXksCiAJCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfUkVBRCk7CiAJCQlpZiAodW5saWtlbHkoIW9rKSkgewpAQCAtMTI4Miw2ICsxMjkzLDE0IEBACiAJcmV0dXJuIDE7CiB9CiAKK3N0YXRpYyB2b2lkIGlwYXRoX3JjX2Vycm9yKHN0cnVjdCBpcGF0aF9xcCAqcXAsIGVudW0gaWJfd2Nfc3RhdHVzIGVycikKK3sKKwlzcGluX2xvY2tfaXJxKCZxcC0+c19sb2NrKTsKKwlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCWlwYXRoX2Vycm9yX3FwKHFwLCBlcnIpOworCXNwaW5fdW5sb2NrX2lycSgmcXAtPnNfbG9jayk7Cit9CisKIC8qKgogICogaXBhdGhfcmNfcmN2IC0gcHJvY2VzcyBhbiBpbmNvbWluZyBSQyBwYWNrZXQKICAqIEBkZXY6IHRoZSBkZXZpY2UgdGhpcyBwYWNrZXQgY2FtZSBpbiBvbgpAQCAtMTMwOSw2ICsxMzI4LDEwIEBACiAJc3RydWN0IGliX3JldGggKnJldGg7CiAJaW50IGhlYWRlcl9pbl9kYXRhOwogCisJLyogVmFsaWRhdGUgdGhlIFNMSUQuIFNlZSBDaC4gOS42LjEuNSAqLworCWlmICh1bmxpa2VseShiZTE2X3RvX2NwdShoZHItPmxyaFszXSkgIT0gcXAtPnJlbW90ZV9haF9hdHRyLmRsaWQpKQorCQlnb3RvIGRvbmU7CisKIAkvKiBDaGVjayBmb3IgR1JIICovCiAJaWYgKCFoYXNfZ3JoKSB7CiAJCW9oZHIgPSAmaGRyLT51Lm90aDsKQEAgLTEzNzAsOCArMTM5Myw3IEBACiAJCSAqLwogCQlpZiAocXAtPnJfYWNrX3N0YXRlID49IE9QKENPTVBBUkVfU1dBUCkpCiAJCQlnb3RvIHNlbmRfYWNrOwotCQkvKiBYWFggRmx1c2ggV1FFcyAqLwotCQlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCQlpcGF0aF9yY19lcnJvcihxcCwgSUJfV0NfUkVNX0lOVl9SRVFfRVJSKTsKIAkJcXAtPnJfYWNrX3N0YXRlID0gT1AoU0VORF9PTkxZKTsKIAkJcXAtPnJfbmFrX3N0YXRlID0gSUJfTkFLX0lOVkFMSURfUkVRVUVTVDsKIAkJcXAtPnJfYWNrX3BzbiA9IHFwLT5yX3BzbjsKQEAgLTE0NzcsOSArMTQ5OSw5IEBACiAJCQlnb3RvIG5hY2tfaW52OwogCQlpcGF0aF9jb3B5X3NnZSgmcXAtPnJfc2dlLCBkYXRhLCB0bGVuKTsKIAkJcXAtPnJfbXNuKys7Ci0JCWlmIChvcGNvZGUgPT0gT1AoUkRNQV9XUklURV9MQVNUKSB8fAotCQkgICAgb3Bjb2RlID09IE9QKFJETUFfV1JJVEVfT05MWSkpCisJCWlmICghcXAtPnJfd3JpZF92YWxpZCkKIAkJCWJyZWFrOworCQlxcC0+cl93cmlkX3ZhbGlkID0gMDsKIAkJd2Mud3JfaWQgPSBxcC0+cl93cl9pZDsKIAkJd2Muc3RhdHVzID0gSUJfV0NfU1VDQ0VTUzsKIAkJd2Mub3Bjb2RlID0gSUJfV0NfUkVDVjsKQEAgLTE1MTcsNyArMTUzOSw3IEBACiAJCQlpbnQgb2s7CiAKIAkJCS8qIENoZWNrIHJrZXkgJiBOQUsgKi8KLQkJCW9rID0gaXBhdGhfcmtleV9vayhkZXYsICZxcC0+cl9zZ2UsCisJCQlvayA9IGlwYXRoX3JrZXlfb2socXAsICZxcC0+cl9zZ2UsCiAJCQkJCSAgIHFwLT5yX2xlbiwgdmFkZHIsIHJrZXksCiAJCQkJCSAgIElCX0FDQ0VTU19SRU1PVEVfV1JJVEUpOwogCQkJaWYgKHVubGlrZWx5KCFvaykpCkBAIC0xNTU5LDcgKzE1ODEsNyBAQAogCQkJaW50IG9rOwogCiAJCQkvKiBDaGVjayBya2V5ICYgTkFLICovCi0JCQlvayA9IGlwYXRoX3JrZXlfb2soZGV2LCAmcXAtPnNfcmRtYV9zZ2UsCisJCQlvayA9IGlwYXRoX3JrZXlfb2socXAsICZxcC0+c19yZG1hX3NnZSwKIAkJCQkJICAgcXAtPnNfcmRtYV9sZW4sIHZhZGRyLCBya2V5LAogCQkJCQkgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpOwogCQkJaWYgKHVubGlrZWx5KCFvaykpIHsKQEAgLTE2MTgsNyArMTY0MCw3IEBACiAJCQlnb3RvIG5hY2tfaW52OwogCQlya2V5ID0gYmUzMl90b19jcHUoYXRldGgtPnJrZXkpOwogCQkvKiBDaGVjayBya2V5ICYgTkFLICovCi0JCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhkZXYsICZxcC0+cl9zZ2UsCisJCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhxcCwgJnFwLT5yX3NnZSwKIAkJCQkJICAgIHNpemVvZih1NjQpLCB2YWRkciwgcmtleSwKIAkJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSkpCiAJCQlnb3RvIG5hY2tfYWNjOwpAQCAtMTY3MCw4ICsxNjkyLDcgQEAKIAkgKiBpcyBwZW5kaW5nIHRob3VnaC4KIAkgKi8KIAlpZiAocXAtPnJfYWNrX3N0YXRlIDwgT1AoQ09NUEFSRV9TV0FQKSkgewotCQkvKiBYWFggRmx1c2ggV1FFcyAqLwotCQlxcC0+c3RhdGUgPSBJQl9RUFNfRVJSOworCQlpcGF0aF9yY19lcnJvcihxcCwgSUJfV0NfUkVNX0FDQ0VTU19FUlIpOwogCQlxcC0+cl9hY2tfc3RhdGUgPSBPUChSRE1BX1dSSVRFX09OTFkpOwogCQlxcC0+cl9uYWtfc3RhdGUgPSBJQl9OQUtfUkVNT1RFX0FDQ0VTU19FUlJPUjsKIAkJcXAtPnJfYWNrX3BzbiA9IHFwLT5yX3BzbjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9yZWdpc3RlcnMuaAppbmRleCA2ZTIzYjNkLi5kZmZjNzYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcmVnaXN0ZXJzLmgKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3JlZ2lzdGVycy5oCkBAIC0xMzQsMTAgKzEzNCwyNCBAQAogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9UWEVNRU1QQVJJVFlFUlJfU0hJRlQgNDAKICNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX01BU0sgMHg3RlVMTAogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9SWEVNRU1QQVJJVFlFUlJfU0hJRlQgNDQKLSNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhEU1lOQ01FTVBBUklUWUVSUiAgMHgwMDAwMDAwNDAwMDAwMDAwVUxMCi0jZGVmaW5lIElORklOSVBBVEhfSFdFX01FTUJJU1RGQUlMRUQgICAgICAgIDB4MDA0MDAwMDAwMDAwMDAwMFVMTAogI2RlZmluZSBJTkZJTklQQVRIX0hXRV9JQkNCVVNUT1NQQ1BBUklUWUVSUiAweDQwMDAwMDAwMDAwMDAwMDBVTEwKICNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfSUJDQlVTRlJTUENQQVJJVFlFUlIgMHg4MDAwMDAwMDAwMDAwMDAwVUxMCisvKiB0eGUgbWVtIHBhcml0eSBlcnJvcnMgKHNoaWZ0IGJ5IElORklOSVBBVEhfSFdFX1RYRU1FTVBBUklUWUVSUl9TSElGVCkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT0JVRgkweDFVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT1BCQwkweDJVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfVFhFTUVNUEFSSVRZRVJSX1BJT0xBVU5DSEZJRk8gMHg0VUxMCisvKiByeGUgbWVtIHBhcml0eSBlcnJvcnMgKHNoaWZ0IGJ5IElORklOSVBBVEhfSFdFX1JYRU1FTVBBUklUWUVSUl9TSElGVCkgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX1JDVkJVRiAgIDB4MDFVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0xPT0tVUFEgIDB4MDJVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0VBR0VSVElEIDB4MDRVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0VYUFRJRCAgIDB4MDhVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0ZMQUdCVUYgIDB4MTBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0RBVEFJTkZPIDB4MjBVTEwKKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfUlhFTUVNUEFSSVRZRVJSX0hEUklORk8gIDB4NDBVTEwKKy8qIHdhbGRvIHNwZWNpZmljIC0tIGZpbmQgdGhlIHJlc3QgaW4gaXBhdGhfNjExMC5jICovCisjZGVmaW5lIElORklOSVBBVEhfSFdFX1JYRFNZTkNNRU1QQVJJVFlFUlIgIDB4MDAwMDAwMDQwMDAwMDAwMFVMTAorLyogbW9udHkgc3BlY2lmaWMgLS0gZmluZCB0aGUgcmVzdCBpbiBpcGF0aF82MTIwLmMgKi8KKyNkZWZpbmUgSU5GSU5JUEFUSF9IV0VfTUVNQklTVEZBSUxFRAkweDAwNDAwMDAwMDAwMDAwMDBVTEwKIAogLyoga3JfaHdkaWFnY3RybCBiaXRzICovCiAjZGVmaW5lIElORklOSVBBVEhfRENfRk9SQ0VUWEVNRU1QQVJJVFlFUlJfTUFTSyAweEZVTEwKQEAgLTIwOSw5ICsyMjMsOSBAQAogCiAvKiBjb21iaW5hdGlvbiBsaW5rIHN0YXR1cyBzdGF0ZXMgdGhhdCB3ZSB1c2Ugd2l0aCBzb21lIGZyZXF1ZW5jeSAqLwogI2RlZmluZSBJUEFUSF9JQlNUQVRFX01BU0sgKChJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfTUFTSyBcCi0JCTw8IElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpIHwgXAorCQk8PCBJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpIHwgXAogCQkoSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9NQVNLIFwKLQkJPDxJTkZJTklQQVRIX0lCQ1NfTElOS1RSQUlOSU5HU1RBVEVfU0hJRlQpKQorCQk8PElORklOSVBBVEhfSUJDU19MSU5LU1RBVEVfU0hJRlQpKQogI2RlZmluZSBJUEFUSF9JQlNUQVRFX0lOSVQgKChJTkZJTklQQVRIX0lCQ1NfTF9TVEFURV9JTklUIFwKIAkJPDwgSU5GSU5JUEFUSF9JQkNTX0xJTktTVEFURV9TSElGVCkgfCBcCiAJCShJTkZJTklQQVRIX0lCQ1NfTFRfU1RBVEVfTElOS1VQIFwKQEAgLTMwMiw2ICszMTYsMTcgQEAKIAogdHlwZWRlZiB1NjQgaXBhdGhfZXJyX3Q7CiAKKy8qIFRoZSBmb2xsb3dpbmcgY2hhbmdlIHdpdGggdGhlIHR5cGUgb2YgZGV2aWNlLCBzbworICogbmVlZCB0byBiZSBwYXJ0IG9mIHRoZSBpcGF0aF9kZXZkYXRhIHN0cnVjdCwgb3IKKyAqIHdlIGNvdWxkIGhhdmUgcHJvYmxlbXMgcGx1Z2dpbmcgaW4gZGV2aWNlcyBvZgorICogZGlmZmVyZW50IHR5cGVzIChlLmcuIG9uZSBIVCwgb25lIFBDSUUpCisgKiBpbiBvbmUgc3lzdGVtLCB0byBiZSBtYW5hZ2VkIGJ5IG9uZSBkcml2ZXIuCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBmaWxlIGlzIG1heSBhbHNvIGJlIGluY2x1ZGVkCisgKiBieSBvdGhlciBjb2RlLCBzbyBsZWF2ZSB0aGUgZGVjbGFyYXRpb25zIGhlcmUKKyAqIHRlbXBvcmFyaWx5LiBNaW5vciBmb290cHJpbnQgaXNzdWUgaWYgY29tbW9uLW1vZGVsCisgKiBsaW5rZXIgdXNlZCwgbm9uZSBpZiBDODkrIGxpbmtlciB1c2VkLgorICovCisKIC8qIG1hc2sgb2YgZGVmaW5lZCBiaXRzIGZvciB2YXJpb3VzIHJlZ2lzdGVycyAqLwogZXh0ZXJuIHU2NCBpbmZpbmlwYXRoX2lfYml0c2V4dGFudDsKIGV4dGVybiBpcGF0aF9lcnJfdCBpbmZpbmlwYXRoX2VfYml0c2V4dGFudCwgaW5maW5pcGF0aF9od2VfYml0c2V4dGFudDsKQEAgLTMxMCwxMyArMzM1LDYgQEAKIGV4dGVybiB1MzIgaW5maW5pcGF0aF9pX3JjdmF2YWlsX21hc2ssIGluZmluaXBhdGhfaV9yY3Z1cmdfbWFzazsKIAogLyoKLSAqIHJlZ2lzdGVyIGJpdHMgZm9yIHNlbGVjdGluZyBpMmMgZGlyZWN0aW9uIGFuZCB2YWx1ZXMsIHVzZWQgZm9yIEkyQyBzZXJpYWwKLSAqIGZsYXNoCi0gKi8KLWV4dGVybiB1MTYgaXBhdGhfZ3Bpb19zZGFfbnVtLCBpcGF0aF9ncGlvX3NjbF9udW07Ci1leHRlcm4gdTY0IGlwYXRoX2dwaW9fc2RhLCBpcGF0aF9ncGlvX3NjbDsKLQotLyoKICAqIFRoZXNlIGFyZSB0aGUgaW5maW5pcGF0aCBnZW5lcmFsIHJlZ2lzdGVyIG51bWJlcnMgKG5vdCBvZmZzZXRzKS4KICAqIFRoZSBrZXJuZWwgcmVnaXN0ZXJzIGFyZSB1c2VkIGRpcmVjdGx5LCB0aG9zZSBiZXlvbmQgdGhlIGtlcm5lbAogICogcmVnaXN0ZXJzIGFyZSBjYWxjdWxhdGVkIGZyb20gb25lIG9mIHRoZSBiYXNlIHJlZ2lzdGVycy4gIFRoZSB1c2Ugb2YKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9ydWMuYwppbmRleCA1YzFkYTJkLi5mNzUzMDUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfcnVjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3J1Yy5jCkBAIC0xMDgsNyArMTA4LDYgQEAKIAogc3RhdGljIGludCBpbml0X3NnZShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlKQogewotCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihxcC0+aWJxcC5kZXZpY2UpOwogCWludCB1c2VyID0gdG9faXBkKHFwLT5pYnFwLnBkKS0+dXNlcjsKIAlpbnQgaSwgaiwgcmV0OwogCXN0cnVjdCBpYl93YyB3YzsKQEAgLTExOSw4ICsxMTgsNyBAQAogCQkJY29udGludWU7CiAJCS8qIENoZWNrIExLRVkgKi8KIAkJaWYgKCh1c2VyICYmIHdxZS0+c2dfbGlzdFtpXS5sa2V5ID09IDApIHx8Ci0JCSAgICAhaXBhdGhfbGtleV9vaygmZGV2LT5sa190YWJsZSwKLQkJCQkgICAmcXAtPnJfc2dfbGlzdFtqXSwgJndxZS0+c2dfbGlzdFtpXSwKKwkJICAgICFpcGF0aF9sa2V5X29rKHFwLCAmcXAtPnJfc2dfbGlzdFtqXSwgJndxZS0+c2dfbGlzdFtpXSwKIAkJCQkgICBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKQogCQkJZ290byBiYWRfbGtleTsKIAkJcXAtPnJfbGVuICs9IHdxZS0+c2dfbGlzdFtpXS5sZW5ndGg7CkBAIC0yMzEsNiArMjI5LDcgQEAKIAkJfQogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZycS0+bG9jaywgZmxhZ3MpOworCXFwLT5yX3dyaWRfdmFsaWQgPSAxOwogCiBiYWlsOgogCXJldHVybiByZXQ7CkBAIC0zMjYsNyArMzI1LDcgQEAKIAljYXNlIElCX1dSX1JETUFfV1JJVEU6CiAJCWlmICh3cWUtPmxlbmd0aCA9PSAwKQogCQkJYnJlYWs7Ci0JCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhkZXYsICZxcC0+cl9zZ2UsIHdxZS0+bGVuZ3RoLAorCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2socXAsICZxcC0+cl9zZ2UsIHdxZS0+bGVuZ3RoLAogCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyLAogCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJrZXksCiAJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1dSSVRFKSkpIHsKQEAgLTM1MCw3ICszNDksNyBAQAogCQlicmVhazsKIAogCWNhc2UgSUJfV1JfUkRNQV9SRUFEOgotCQlpZiAodW5saWtlbHkoIWlwYXRoX3JrZXlfb2soZGV2LCAmc3FwLT5zX3NnZSwgd3FlLT5sZW5ndGgsCisJCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhxcCwgJnNxcC0+c19zZ2UsIHdxZS0+bGVuZ3RoLAogCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJlbW90ZV9hZGRyLAogCQkJCQkgICAgd3FlLT53ci53ci5yZG1hLnJrZXksCiAJCQkJCSAgICBJQl9BQ0NFU1NfUkVNT1RFX1JFQUQpKSkKQEAgLTM2NSw3ICszNjQsNyBAQAogCiAJY2FzZSBJQl9XUl9BVE9NSUNfQ01QX0FORF9TV1A6CiAJY2FzZSBJQl9XUl9BVE9NSUNfRkVUQ0hfQU5EX0FERDoKLQkJaWYgKHVubGlrZWx5KCFpcGF0aF9ya2V5X29rKGRldiwgJnFwLT5yX3NnZSwgc2l6ZW9mKHU2NCksCisJCWlmICh1bmxpa2VseSghaXBhdGhfcmtleV9vayhxcCwgJnFwLT5yX3NnZSwgc2l6ZW9mKHU2NCksCiAJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmVtb3RlX2FkZHIsCiAJCQkJCSAgICB3cWUtPndyLndyLnJkbWEucmtleSwKIAkJCQkJICAgIElCX0FDQ0VTU19SRU1PVEVfQVRPTUlDKSkpCkBAIC01NzUsOCArNTc0LDcgQEAKIAkJfQogCQlpZiAod3ItPnNnX2xpc3RbaV0ubGVuZ3RoID09IDApCiAJCQljb250aW51ZTsKLQkJaWYgKCFpcGF0aF9sa2V5X29rKCZ0b19pZGV2KHFwLT5pYnFwLmRldmljZSktPmxrX3RhYmxlLAotCQkJCSAgICZ3cWUtPnNnX2xpc3Rbal0sICZ3ci0+c2dfbGlzdFtpXSwKKwkJaWYgKCFpcGF0aF9sa2V5X29rKHFwLCAmd3FlLT5zZ19saXN0W2pdLCAmd3ItPnNnX2xpc3RbaV0sCiAJCQkJICAgYWNjKSkgewogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcXAtPnNfbG9jaywgZmxhZ3MpOwogCQkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zcnEuYwppbmRleCA5NDFlODY2Li45NDAzMzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3JxLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3NycS5jCkBAIC0xMDQsMTEgKzEwNCw2IEBACiAJdTMyIHN6OwogCXN0cnVjdCBpYl9zcnEgKnJldDsKIAotCWlmIChkZXYtPm5fc3Jxc19hbGxvY2F0ZWQgPT0gaWJfaXBhdGhfbWF4X3NycXMpIHsKLQkJcmV0ID0gRVJSX1BUUigtRU5PTUVNKTsKLQkJZ290byBkb25lOwotCX0KLQogCWlmIChzcnFfaW5pdF9hdHRyLT5hdHRyLm1heF93ciA9PSAwKSB7CiAJCXJldCA9IEVSUl9QVFIoLUVJTlZBTCk7CiAJCWdvdG8gZG9uZTsKQEAgLTE4MCwxMCArMTc1LDE3IEBACiAJc3Bpbl9sb2NrX2luaXQoJnNycS0+cnEubG9jayk7CiAJc3JxLT5ycS53cS0+aGVhZCA9IDA7CiAJc3JxLT5ycS53cS0+dGFpbCA9IDA7Ci0Jc3JxLT5ycS5tYXhfc2dlID0gc3JxX2luaXRfYXR0ci0+YXR0ci5tYXhfc2dlOwogCXNycS0+bGltaXQgPSBzcnFfaW5pdF9hdHRyLT5hdHRyLnNycV9saW1pdDsKIAotCWRldi0+bl9zcnFzX2FsbG9jYXRlZCsrOworCXNwaW5fbG9jaygmZGV2LT5uX3NycXNfbG9jayk7CisJaWYgKGRldi0+bl9zcnFzX2FsbG9jYXRlZCA9PSBpYl9pcGF0aF9tYXhfc3JxcykgeworCQlzcGluX3VubG9jaygmZGV2LT5uX3NycXNfbG9jayk7CisJCXJldCA9IEVSUl9QVFIoLUVOT01FTSk7CisJCWdvdG8gYmFpbF93cTsKKwl9CisKKyAJZGV2LT5uX3NycXNfYWxsb2NhdGVkKys7CisJc3Bpbl91bmxvY2soJmRldi0+bl9zcnFzX2xvY2spOwogCiAJcmV0ID0gJnNycS0+aWJzcnE7CiAJZ290byBkb25lOwpAQCAtMzUxLDggKzM1MywxMyBAQAogCXN0cnVjdCBpcGF0aF9zcnEgKnNycSA9IHRvX2lzcnEoaWJzcnEpOwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYnNycS0+ZGV2aWNlKTsKIAorCXNwaW5fbG9jaygmZGV2LT5uX3NycXNfbG9jayk7CiAJZGV2LT5uX3NycXNfYWxsb2NhdGVkLS07Ci0JdmZyZWUoc3JxLT5ycS53cSk7CisJc3Bpbl91bmxvY2soJmRldi0+bl9zcnFzX2xvY2spOworCWlmIChzcnEtPmlwKQorCQlrcmVmX3B1dCgmc3JxLT5pcC0+cmVmLCBpcGF0aF9yZWxlYXNlX21tYXBfaW5mbyk7CisJZWxzZQorCQl2ZnJlZShzcnEtPnJxLndxKTsKIAlrZnJlZShzcnEpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfc3lzZnMuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCmluZGV4IGUyOTkxNDguLjE4MmRlMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF9zeXNmcy5jCkBAIC0yNTcsNyArMjU3LDcgQEAKIAlzdHJ1Y3QgaXBhdGhfZGV2ZGF0YSAqZGQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlzc2l6ZV90IHJldDsKIAl1bnNpZ25lZCBzaG9ydCBndWlkWzhdOwotCV9fYmU2NCBuZ3VpZDsKKwlfX2JlNjQgbmV3X2d1aWQ7CiAJdTggKm5nOwogCWludCBpOwogCkBAIC0yNjYsNyArMjY2LDcgQEAKIAkJICAgJmd1aWRbNF0sICZndWlkWzVdLCAmZ3VpZFs2XSwgJmd1aWRbN10pICE9IDgpCiAJCWdvdG8gaW52YWxpZDsKIAotCW5nID0gKHU4ICopICZuZ3VpZDsKKwluZyA9ICh1OCAqKSAmbmV3X2d1aWQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CiAJCWlmIChndWlkW2ldID4gMHhmZikKQEAgLTI3NCw3ICsyNzQsMTAgQEAKIAkJbmdbaV0gPSBndWlkW2ldOwogCX0KIAotCWRkLT5pcGF0aF9ndWlkID0gbmd1aWQ7CisJaWYgKG5ld19ndWlkID09IDApCisJCWdvdG8gaW52YWxpZDsKKworCWRkLT5pcGF0aF9ndWlkID0gbmV3X2d1aWQ7CiAJZGQtPmlwYXRoX25ndWlkID0gMTsKIAogCXJldCA9IHN0cmxlbihidWYpOwpAQCAtMjk3LDYgKzMwMCwxNiBAQAogCXJldHVybiBzY25wcmludGYoYnVmLCBQQUdFX1NJWkUsICIldVxuIiwgZGQtPmlwYXRoX25ndWlkKTsKIH0KIAorc3RhdGljIHNzaXplX3Qgc2hvd19ucG9ydHMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkgICBjaGFyICpidWYpCit7CisJc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwkvKiBSZXR1cm4gdGhlIG51bWJlciBvZiB1c2VyIHBvcnRzIGF2YWlsYWJsZS4gKi8KKwlyZXR1cm4gc2NucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXVcbiIsIGRkLT5pcGF0aF9jZmdwb3J0cyAtIDEpOworfQorCiBzdGF0aWMgc3NpemVfdCBzaG93X3NlcmlhbChzdHJ1Y3QgZGV2aWNlICpkZXYsCiAJCQkgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKIAkJCSAgIGNoYXIgKmJ1ZikKQEAgLTYwOCw2ICs2MjEsNyBAQAogc3RhdGljIERFVklDRV9BVFRSKG10dSwgU19JV1VTUiB8IFNfSVJVR08sIHNob3dfbXR1LCBzdG9yZV9tdHUpOwogc3RhdGljIERFVklDRV9BVFRSKGVuYWJsZWQsIFNfSVdVU1IgfCBTX0lSVUdPLCBzaG93X2VuYWJsZWQsIHN0b3JlX2VuYWJsZWQpOwogc3RhdGljIERFVklDRV9BVFRSKG5ndWlkLCBTX0lSVUdPLCBzaG93X25ndWlkLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihucG9ydHMsIFNfSVJVR08sIHNob3dfbnBvcnRzLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihyZXNldCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfcmVzZXQpOwogc3RhdGljIERFVklDRV9BVFRSKHNlcmlhbCwgU19JUlVHTywgc2hvd19zZXJpYWwsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKHN0YXR1cywgU19JUlVHTywgc2hvd19zdGF0dXMsIE5VTEwpOwpAQCAtNjIzLDYgKzYzNyw3IEBACiAJJmRldl9hdHRyX21saWQuYXR0ciwKIAkmZGV2X2F0dHJfbXR1LmF0dHIsCiAJJmRldl9hdHRyX25ndWlkLmF0dHIsCisJJmRldl9hdHRyX25wb3J0cy5hdHRyLAogCSZkZXZfYXR0cl9zZXJpYWwuYXR0ciwKIAkmZGV2X2F0dHJfc3RhdHVzLmF0dHIsCiAJJmRldl9hdHRyX3N0YXR1c19zdHIuYXR0ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91Yy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKaW5kZXggMGZkM2NkZS4uZTYzNmNmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VjLmMKQEAgLTI0Niw2ICsyNDYsMTAgQEAKIAlzdHJ1Y3QgaWJfcmV0aCAqcmV0aDsKIAlpbnQgaGVhZGVyX2luX2RhdGE7CiAKKwkvKiBWYWxpZGF0ZSB0aGUgU0xJRC4gU2VlIENoLiA5LjYuMS41ICovCisJaWYgKHVubGlrZWx5KGJlMTZfdG9fY3B1KGhkci0+bHJoWzNdKSAhPSBxcC0+cmVtb3RlX2FoX2F0dHIuZGxpZCkpCisJCWdvdG8gZG9uZTsKKwogCS8qIENoZWNrIGZvciBHUkggKi8KIAlpZiAoIWhhc19ncmgpIHsKIAkJb2hkciA9ICZoZHItPnUub3RoOwpAQCAtNDQwLDcgKzQ0NCw3IEBACiAJCQlpbnQgb2s7CiAKIAkJCS8qIENoZWNrIHJrZXkgKi8KLQkJCW9rID0gaXBhdGhfcmtleV9vayhkZXYsICZxcC0+cl9zZ2UsIHFwLT5yX2xlbiwKKwkJCW9rID0gaXBhdGhfcmtleV9vayhxcCwgJnFwLT5yX3NnZSwgcXAtPnJfbGVuLAogCQkJCQkgICB2YWRkciwgcmtleSwKIAkJCQkJICAgSUJfQUNDRVNTX1JFTU9URV9XUklURSk7CiAJCQlpZiAodW5saWtlbHkoIW9rKSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VkLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwppbmRleCA2OTkxZDFkLi40OWYxMTAyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdWQuYwpAQCAtMzksNyArMzksNiBAQAogc3RhdGljIGludCBpbml0X3NnZShzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfcndxZSAqd3FlLAogCQkgICAgdTMyICpsZW5ndGhwLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcykKIHsKLQlzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiA9IHRvX2lkZXYocXAtPmlicXAuZGV2aWNlKTsKIAlpbnQgdXNlciA9IHRvX2lwZChxcC0+aWJxcC5wZCktPnVzZXI7CiAJaW50IGksIGosIHJldDsKIAlzdHJ1Y3QgaWJfd2Mgd2M7CkBAIC01MCw4ICs0OSw3IEBACiAJCQljb250aW51ZTsKIAkJLyogQ2hlY2sgTEtFWSAqLwogCQlpZiAoKHVzZXIgJiYgd3FlLT5zZ19saXN0W2ldLmxrZXkgPT0gMCkgfHwKLQkJICAgICFpcGF0aF9sa2V5X29rKCZkZXYtPmxrX3RhYmxlLAotCQkJCSAgIGogPyAmc3MtPnNnX2xpc3RbaiAtIDFdIDogJnNzLT5zZ2UsCisJCSAgICAhaXBhdGhfbGtleV9vayhxcCwgaiA/ICZzcy0+c2dfbGlzdFtqIC0gMV0gOiAmc3MtPnNnZSwKIAkJCQkgICAmd3FlLT5zZ19saXN0W2ldLCBJQl9BQ0NFU1NfTE9DQUxfV1JJVEUpKQogCQkJZ290byBiYWRfbGtleTsKIAkJKmxlbmd0aHAgKz0gd3FlLT5zZ19saXN0W2ldLmxlbmd0aDsKQEAgLTM0Myw3ICszNDEsNyBAQAogCiAJCWlmICh3ci0+c2dfbGlzdFtpXS5sZW5ndGggPT0gMCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWlwYXRoX2xrZXlfb2soJmRldi0+bGtfdGFibGUsIHNzLm51bV9zZ2UgPworCQlpZiAoIWlwYXRoX2xrZXlfb2socXAsIHNzLm51bV9zZ2UgPwogCQkJCSAgIHNnX2xpc3QgKyBzcy5udW1fc2dlIC0gMSA6ICZzcy5zZ2UsCiAJCQkJICAgJndyLT5zZ19saXN0W2ldLCAwKSkgewogCQkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdXNlcl9wYWdlcy5jCmluZGV4IGUzMmZjYTkuLjQxMzc1NGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF91c2VyX3BhZ2VzLmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3VzZXJfcGFnZXMuYwpAQCAtOTAsNiArOTAsNjIgQEAKIH0KIAogLyoqCisgKiBpcGF0aF9tYXBfcGFnZSAtIGEgc2FmZXR5IHdyYXBwZXIgYXJvdW5kIHBjaV9tYXBfcGFnZSgpCisgKgorICogQSBkbWFfYWRkciBvZiBhbGwgMCdzIGlzIGludGVycHJldGVkIGJ5IHRoZSBjaGlwIGFzICJkaXNhYmxlZCIuCisgKiBVbmZvcnR1bmF0ZWx5LCBpdCBjYW4gYWxzbyBiZSBhIHZhbGlkIGRtYV9hZGRyIHJldHVybmVkIG9uIHNvbWUKKyAqIGFyY2hpdGVjdHVyZXMuCisgKgorICogVGhlIHBvd2VycGMgaW9tbXUgYXNzaWducyBkbWFfYWRkcnMgaW4gYXNjZW5kaW5nIG9yZGVyLCBzbyB3ZSBkb24ndAorICogaGF2ZSB0byBib3RoZXIgd2l0aCByZXRyaWVzIG9yIG1hcHBpbmcgYSBkdW1teSBwYWdlIHRvIGluc3VyZSB3ZQorICogZG9uJ3QganVzdCBnZXQgdGhlIHNhbWUgbWFwcGluZyBhZ2Fpbi4KKyAqCisgKiBJJ20gc3VyZSB3ZSB3b24ndCBiZSBzbyBsdWNreSB3aXRoIG90aGVyIGlvbW11J3MsIHNvIEZJWE1FLgorICovCitkbWFfYWRkcl90IGlwYXRoX21hcF9wYWdlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWRtYV9hZGRyX3QgcGh5czsKKworCXBoeXMgPSBwY2lfbWFwX3BhZ2UoaHdkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKworCWlmIChwaHlzID09IDApIHsKKwkJcGNpX3VubWFwX3BhZ2UoaHdkZXYsIHBoeXMsIHNpemUsIGRpcmVjdGlvbik7CisJCXBoeXMgPSBwY2lfbWFwX3BhZ2UoaHdkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJLyoKKwkJICogRklYTUU6IElmIHdlIGdldCAwIGFnYWluLCB3ZSBzaG91bGQga2VlcCB0aGlzIHBhZ2UsCisJCSAqIG1hcCBhbm90aGVyLCB0aGVuIGZyZWUgdGhlIDAgcGFnZS4KKwkJICovCisJfQorCisJcmV0dXJuIHBoeXM7Cit9CisKKy8qKgorICogaXBhdGhfbWFwX3NpbmdsZSAtIGEgc2FmZXR5IHdyYXBwZXIgYXJvdW5kIHBjaV9tYXBfc2luZ2xlKCkKKyAqCisgKiBTYW1lIGlkZWEgYXMgaXBhdGhfbWFwX3BhZ2UoKS4KKyAqLworZG1hX2FkZHJfdCBpcGF0aF9tYXBfc2luZ2xlKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwKKwlpbnQgZGlyZWN0aW9uKQoreworCWRtYV9hZGRyX3QgcGh5czsKKworCXBoeXMgPSBwY2lfbWFwX3NpbmdsZShod2RldiwgcHRyLCBzaXplLCBkaXJlY3Rpb24pOworCisJaWYgKHBoeXMgPT0gMCkgeworCQlwY2lfdW5tYXBfc2luZ2xlKGh3ZGV2LCBwaHlzLCBzaXplLCBkaXJlY3Rpb24pOworCQlwaHlzID0gcGNpX21hcF9zaW5nbGUoaHdkZXYsIHB0ciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJLyoKKwkJICogRklYTUU6IElmIHdlIGdldCAwIGFnYWluLCB3ZSBzaG91bGQga2VlcCB0aGlzIHBhZ2UsCisJCSAqIG1hcCBhbm90aGVyLCB0aGVuIGZyZWUgdGhlIDAgcGFnZS4KKwkJICovCisJfQorCisJcmV0dXJuIHBoeXM7Cit9CisKKy8qKgogICogaXBhdGhfZ2V0X3VzZXJfcGFnZXMgLSBsb2NrIHVzZXIgcGFnZXMgaW50byBtZW1vcnkKICAqIEBzdGFydF9wYWdlOiB0aGUgc3RhcnQgcGFnZQogICogQG51bV9wYWdlczogdGhlIG51bWJlciBvZiBwYWdlcwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3ZlcmJzLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwppbmRleCBiODM4MWM1Li40MmVhZWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuYwpAQCAtODk4LDcgKzg5OCw4IEBACiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJpY3JjY250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJ2Y3JjY250KSArCiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9lcnJscGNyY2NudCkgKwotCQlpcGF0aF9zbmFwX2NudHIoZGQsIGRkLT5pcGF0aF9jcmVncy0+Y3JfYmFkZm9ybWF0Y250KTsKKwkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX2JhZGZvcm1hdGNudCkgKworCQlkZC0+aXBhdGhfcnhmY191bnN1cHZsX2VycnM7CiAJY250cnMtPnBvcnRfcmN2X3JlbXBoeXNfZXJyb3JzID0KIAkJaXBhdGhfc25hcF9jbnRyKGRkLCBkZC0+aXBhdGhfY3JlZ3MtPmNyX3JjdmVicGNudCk7CiAJY250cnMtPnBvcnRfeG1pdF9kaXNjYXJkcyA9CkBAIC05MTEsOCArOTEyLDEwIEBACiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RzZW5kY250KTsKIAljbnRycy0+cG9ydF9yY3ZfcGFja2V0cyA9CiAJCWlwYXRoX3NuYXBfY250cihkZCwgZGQtPmlwYXRoX2NyZWdzLT5jcl9wa3RyY3ZjbnQpOwotCWNudHJzLT5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPSBkZC0+aXBhdGhfbGxpX2Vycm9yczsKLQljbnRycy0+ZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycyA9IDA7IC8qIFhYWCAqLworCWNudHJzLT5sb2NhbF9saW5rX2ludGVncml0eV9lcnJvcnMgPQorCQkoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfR1BJT19FUlJJTlRSUykgPworCQlkZC0+aXBhdGhfbGxpX2VycnMgOiBkZC0+aXBhdGhfbGxpX2Vycm9yczsKKwljbnRycy0+ZXhjZXNzaXZlX2J1ZmZlcl9vdmVycnVuX2Vycm9ycyA9IGRkLT5pcGF0aF9vdmVycnVuX3RocmVzaF9lcnJzOwogCiAJcmV0ID0gMDsKIApAQCAtMTE5OSw2ICsxMjAyLDcgQEAKIAlzdHJ1Y3QgaXBhdGhfYWggKmFoOwogCXN0cnVjdCBpYl9haCAqcmV0OwogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihwZC0+ZGV2aWNlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJLyogQSBtdWx0aWNhc3QgYWRkcmVzcyByZXF1aXJlcyBhIEdSSCAoc2VlIGNoLiA4LjQuMSkuICovCiAJaWYgKGFoX2F0dHItPmRsaWQgPj0gSVBBVEhfTVVMVElDQVNUX0xJRF9CQVNFICYmCkBAIC0xMjI1LDE2ICsxMjI5LDE2IEBACiAJCWdvdG8gYmFpbDsKIAl9CiAKLQlzcGluX2xvY2soJmRldi0+bl9haHNfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+bl9haHNfbG9jaywgZmxhZ3MpOwogCWlmIChkZXYtPm5fYWhzX2FsbG9jYXRlZCA9PSBpYl9pcGF0aF9tYXhfYWhzKSB7Ci0JCXNwaW5fdW5sb2NrKCZkZXYtPm5fYWhzX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPm5fYWhzX2xvY2ssIGZsYWdzKTsKIAkJa2ZyZWUoYWgpOwogCQlyZXQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCQlnb3RvIGJhaWw7CiAJfQogCiAJZGV2LT5uX2Foc19hbGxvY2F0ZWQrKzsKLQlzcGluX3VubG9jaygmZGV2LT5uX2Foc19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPm5fYWhzX2xvY2ssIGZsYWdzKTsKIAogCS8qIGliX2NyZWF0ZV9haCgpIHdpbGwgaW5pdGlhbGl6ZSBhaC0+aWJhaC4gKi8KIAlhaC0+YXR0ciA9ICphaF9hdHRyOwpAQCAtMTI1NSwxMCArMTI1OSwxMSBAQAogewogCXN0cnVjdCBpcGF0aF9pYmRldiAqZGV2ID0gdG9faWRldihpYmFoLT5kZXZpY2UpOwogCXN0cnVjdCBpcGF0aF9haCAqYWggPSB0b19pYWgoaWJhaCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCXNwaW5fbG9jaygmZGV2LT5uX2Foc19sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5uX2Foc19sb2NrLCBmbGFncyk7CiAJZGV2LT5uX2Foc19hbGxvY2F0ZWQtLTsKLQlzcGluX3VubG9jaygmZGV2LT5uX2Foc19sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPm5fYWhzX2xvY2ssIGZsYWdzKTsKIAogCWtmcmVlKGFoKTsKIApAQCAtMTM4MCwxMSArMTM4NSwxMyBAQAogCSAqIHByb2Nlc3NpbmcuCiAJICovCiAJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgeworCQl1NjQgdmFsOwogCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2RlYnVncG9ydHNlbGVjdCwKIAkJCQkgMHgyMDc0MDc2NTQyMzEwVUxMKTsKIAkJLyogRW5hYmxlIEdQSU8gYml0IDIgaW50ZXJydXB0ICovCi0JCWlwYXRoX3dyaXRlX2tyZWcoZGQsIGRkLT5pcGF0aF9rcmVncy0+a3JfZ3Bpb19tYXNrLAotCQkJCSAodTY0KSAoMSA8PCAyKSk7CisJCXZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7CisJCXZhbCB8PSAodTY0KSAoMSA8PCBJUEFUSF9HUElPX1BPUlQwX0JJVCk7CisJCWlwYXRoX3dyaXRlX2tyZWcoIGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywgdmFsKTsKIAl9CiAKIAlpbml0X3RpbWVyKCZkZC0+dmVyYnNfdGltZXIpOwpAQCAtMTM5OSw4ICsxNDA2LDE3IEBACiBzdGF0aWMgaW50IGRpc2FibGVfdGltZXIoc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCS8qIERpc2FibGUgR1BJTyBiaXQgMiBpbnRlcnJ1cHQgKi8KLQlpZiAoZGQtPmlwYXRoX2ZsYWdzICYgSVBBVEhfR1BJT19JTlRSKQotCQlpcGF0aF93cml0ZV9rcmVnKGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzaywgMCk7CisJaWYgKGRkLT5pcGF0aF9mbGFncyAmIElQQVRIX0dQSU9fSU5UUikgeworICAgICAgICAgICAgICAgIHU2NCB2YWw7CisgICAgICAgICAgICAgICAgLyogRGlzYWJsZSBHUElPIGJpdCAyIGludGVycnVwdCAqLworICAgICAgICAgICAgICAgIHZhbCA9IGlwYXRoX3JlYWRfa3JlZzY0KGRkLCBkZC0+aXBhdGhfa3JlZ3MtPmtyX2dwaW9fbWFzayk7CisgICAgICAgICAgICAgICAgdmFsICY9IH4oKHU2NCkgKDEgPDwgSVBBVEhfR1BJT19QT1JUMF9CSVQpKTsKKyAgICAgICAgICAgICAgICBpcGF0aF93cml0ZV9rcmVnKCBkZCwgZGQtPmlwYXRoX2tyZWdzLT5rcl9ncGlvX21hc2ssIHZhbCk7CisJCS8qCisJCSAqIFdlIG1pZ2h0IHdhbnQgdG8gdW5kbyBjaGFuZ2VzIHRvIGRlYnVncG9ydHNlbGVjdCwKKwkJICogYnV0IGhvdz8KKwkJICovCisJfQogCiAJZGVsX3RpbWVyX3N5bmMoJmRkLT52ZXJic190aW1lcik7CiAKQEAgLTE2ODMsNiArMTY5OSw3IEBACiAJCSAgICAgICJSQyBPVEggTkFLcyAlZFxuIgogCQkgICAgICAiUkMgdGltZW91dHMgJWRcbiIKIAkJICAgICAgIlJDIFJETUEgZHVwICVkXG4iCisJCSAgICAgICJSQyBzdGFsbHMgICAlZFxuIgogCQkgICAgICAicGlvYnVmIHdhaXQgJWRcbiIKIAkJICAgICAgIm5vIHBpb2J1ZiAgICVkXG4iCiAJCSAgICAgICJQS1QgZHJvcHMgICAlZFxuIgpAQCAtMTY5MCw3ICsxNzA3LDcgQEAKIAkJICAgICAgZGV2LT5uX3JjX3Jlc2VuZHMsIGRldi0+bl9yY19xYWNrcywgZGV2LT5uX3JjX2Fja3MsCiAJCSAgICAgIGRldi0+bl9zZXFfbmFrcywgZGV2LT5uX3JkbWFfc2VxLCBkZXYtPm5fcm5yX25ha3MsCiAJCSAgICAgIGRldi0+bl9vdGhlcl9uYWtzLCBkZXYtPm5fdGltZW91dHMsCi0JCSAgICAgIGRldi0+bl9yZG1hX2R1cF9idXN5LCBkZXYtPm5fcGlvd2FpdCwKKwkJICAgICAgZGV2LT5uX3JkbWFfZHVwX2J1c3ksIGRldi0+bl9yY19zdGFsbHMsIGRldi0+bl9waW93YWl0LAogCQkgICAgICBkZXYtPm5fbm9fcGlvYnVmLCBkZXYtPm5fcGt0X2Ryb3BzLCBkZXYtPm5fd3FlX2VycnMpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldi0+b3BzdGF0cyk7IGkrKykgewogCQljb25zdCBzdHJ1Y3QgaXBhdGhfb3Bjb2RlX3N0YXRzICpzaSA9ICZkZXYtPm9wc3RhdHNbaV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfdmVyYnMuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCmluZGV4IDA5YmJiM2YuLjgwMzlmNmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF92ZXJicy5oCkBAIC0yMjAsNiArMjIwLDcgQEAKIH07CiAKIHN0cnVjdCBpcGF0aF9tcmVnaW9uIHsKKwlzdHJ1Y3QgaWJfcGQgKnBkOwkvKiBzaGFyZXMgcmVmY250IG9mIGlibXIucGQgKi8KIAl1NjQgdXNlcl9iYXNlOwkJLyogVXNlcidzIGFkZHJlc3MgZm9yIHRoaXMgcmVnaW9uICovCiAJdTY0IGlvdmE7CQkvKiBJQiBzdGFydCBhZGRyZXNzIG9mIHRoaXMgcmVnaW9uICovCiAJc2l6ZV90IGxlbmd0aDsKQEAgLTM2NCwxMiArMzY1LDE0IEBACiAJdTggcl9taW5fcm5yX3RpbWVyOwkvKiByZXRyeSB0aW1lb3V0IHZhbHVlIGZvciBSTlIgTkFLcyAqLwogCXU4IHJfcmV1c2Vfc2dlOwkJLyogZm9yIFVDIHJlY2VpdmUgZXJyb3JzICovCiAJdTggcl9zZ2VfaW54OwkJLyogY3VycmVudCBpbmRleCBpbnRvIHNnX2xpc3QgKi8KKwl1OCByX3dyaWRfdmFsaWQ7CS8qIHJfd3JpZCBzZXQgYnV0IENRIGVudHJ5IG5vdCB5ZXQgbWFkZSAqLwogCXU4IHFwX2FjY2Vzc19mbGFnczsKIAl1OCBzX21heF9zZ2U7CQkvKiBzaXplIG9mIHNfd3EtPnNnX2xpc3QgKi8KIAl1OCBzX3JldHJ5X2NudDsJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSAqLwogCXU4IHNfcm5yX3JldHJ5X2NudDsKIAl1OCBzX3JldHJ5OwkJLyogcmVxdWVzdGVyIHJldHJ5IGNvdW50ZXIgKi8KIAl1OCBzX3Jucl9yZXRyeTsJCS8qIHJlcXVlc3RlciBSTlIgcmV0cnkgY291bnRlciAqLworCXU4IHNfd2FpdF9jcmVkaXQ7CS8qIGxpbWl0IG51bWJlciBvZiB1bmFja2VkIHBhY2tldHMgc2VudCAqLwogCXU4IHNfcGtleV9pbmRleDsJLyogUEtFWSBpbmRleCB0byB1c2UgKi8KIAl1OCB0aW1lb3V0OwkJLyogVGltZW91dCBmb3IgdGhpcyBRUCAqLwogCWVudW0gaWJfbXR1IHBhdGhfbXR1OwpAQCAtMzkzLDYgKzM5Niw4IEBACiAjZGVmaW5lIElQQVRIX1NfQlVTWQkJMAogI2RlZmluZSBJUEFUSF9TX1NJR05BTF9SRVFfV1IJMQogCisjZGVmaW5lIElQQVRIX1BTTl9DUkVESVQJMjA0OAorCiAvKgogICogU2luY2Ugc3RydWN0IGlwYXRoX3N3cWUgaXMgbm90IGEgZml4ZWQgc2l6ZSwgd2UgY2FuJ3Qgc2ltcGx5IGluZGV4IGludG8KICAqIHN0cnVjdCBpcGF0aF9xcC5zX3dxLiAgVGhpcyBmdW5jdGlvbiBkb2VzIHRoZSBhcnJheSBpbmRleCBjb21wdXRhdGlvbi4KQEAgLTUyMSw2ICs1MjYsNyBAQAogCXUzMiBuX3Jucl9uYWtzOwogCXUzMiBuX290aGVyX25ha3M7CiAJdTMyIG5fdGltZW91dHM7CisJdTMyIG5fcmNfc3RhbGxzOwogCXUzMiBuX3BrdF9kcm9wczsKIAl1MzIgbl92bDE1X2Ryb3BwZWQ7CiAJdTMyIG5fd3FlX2VycnM7CkBAIC02MzQsNiArNjQwLDggQEAKIAogaW50IGlwYXRoX2Rlc3Ryb3lfcXAoc3RydWN0IGliX3FwICppYnFwKTsKIAordm9pZCBpcGF0aF9lcnJvcl9xcChzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBlbnVtIGliX3djX3N0YXR1cyBlcnIpOworCiBpbnQgaXBhdGhfbW9kaWZ5X3FwKHN0cnVjdCBpYl9xcCAqaWJxcCwgc3RydWN0IGliX3FwX2F0dHIgKmF0dHIsCiAJCSAgICBpbnQgYXR0cl9tYXNrLCBzdHJ1Y3QgaWJfdWRhdGEgKnVkYXRhKTsKIApAQCAtNjUzLDEyICs2NjEsNiBAQAogCiB2b2lkIGlwYXRoX2NxX2VudGVyKHN0cnVjdCBpcGF0aF9jcSAqY3EsIHN0cnVjdCBpYl93YyAqZW50cnksIGludCBzaWcpOwogCi1pbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCi0JCSAgdTMyIGxlbiwgdTY0IHZhZGRyLCB1MzIgcmtleSwgaW50IGFjYyk7Ci0KLWludCBpcGF0aF9sa2V5X29rKHN0cnVjdCBpcGF0aF9sa2V5X3RhYmxlICpya3QsIHN0cnVjdCBpcGF0aF9zZ2UgKmlzZ2UsCi0JCSAgc3RydWN0IGliX3NnZSAqc2dlLCBpbnQgYWNjKTsKLQogdm9pZCBpcGF0aF9jb3B5X3NnZShzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywgdm9pZCAqZGF0YSwgdTMyIGxlbmd0aCk7CiAKIHZvaWQgaXBhdGhfc2tpcF9zZ2Uoc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsIHUzMiBsZW5ndGgpOwpAQCAtNjgzLDEwICs2ODUsMTAgQEAKIAogdm9pZCBpcGF0aF9mcmVlX2xrZXkoc3RydWN0IGlwYXRoX2xrZXlfdGFibGUgKnJrdCwgdTMyIGxrZXkpOwogCi1pbnQgaXBhdGhfbGtleV9vayhzdHJ1Y3QgaXBhdGhfbGtleV90YWJsZSAqcmt0LCBzdHJ1Y3QgaXBhdGhfc2dlICppc2dlLAoraW50IGlwYXRoX2xrZXlfb2soc3RydWN0IGlwYXRoX3FwICpxcCwgc3RydWN0IGlwYXRoX3NnZSAqaXNnZSwKIAkJICBzdHJ1Y3QgaWJfc2dlICpzZ2UsIGludCBhY2MpOwogCi1pbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfaWJkZXYgKmRldiwgc3RydWN0IGlwYXRoX3NnZV9zdGF0ZSAqc3MsCitpbnQgaXBhdGhfcmtleV9vayhzdHJ1Y3QgaXBhdGhfcXAgKnFwLCBzdHJ1Y3QgaXBhdGhfc2dlX3N0YXRlICpzcywKIAkJICB1MzIgbGVuLCB1NjQgdmFkZHIsIHUzMiBya2V5LCBpbnQgYWNjKTsKIAogaW50IGlwYXRoX3Bvc3Rfc3JxX3JlY2VpdmUoc3RydWN0IGliX3NycSAqaWJzcnEsIHN0cnVjdCBpYl9yZWN2X3dyICp3ciwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y19wcGM2NC5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3BwYzY0LmMKaW5kZXggMDM2ZmRlNi4uMDA5NWJiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3BwYzY0LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3BwYzY0LmMKQEAgLTM4LDEzICszOCwyMyBAQAogI2luY2x1ZGUgImlwYXRoX2tlcm5lbC5oIgogCiAvKioKLSAqIGlwYXRoX3Vub3JkZXJlZF93YyAtIGluZGljYXRlIHdoZXRoZXIgd3JpdGUgY29tYmluaW5nIGlzIG9yZGVyZWQKKyAqIGlwYXRoX2VuYWJsZV93YyAtIGVuYWJsZSB3cml0ZSBjb21iaW5pbmcgZm9yIE1NSU8gd3JpdGVzIHRvIHRoZSBkZXZpY2UKKyAqIEBkZDogaW5maW5pcGF0aCBkZXZpY2UKICAqCi0gKiBQb3dlclBDIHN5c3RlbXMgKGF0IGxlYXN0IHRob3NlIGluIHRoZSA5NzAgcHJvY2Vzc29yIGZhbWlseSkKLSAqIHdyaXRlIHBhcnRpYWxseSBmaWxsZWQgc3RvcmUgYnVmZmVycyBpbiBhZGRyZXNzIG9yZGVyLCBidXQgd2lsbCB3cml0ZQotICogY29tcGxldGVseSBmaWxsZWQgc3RvcmUgYnVmZmVycyBpbiAicmFuZG9tIiBvcmRlciwgYW5kIHRoZXJlZm9yZSBtdXN0Ci0gKiBoYXZlIHNlcmlhbGl6YXRpb24gZm9yIGNvcnJlY3RuZXNzIHdpdGggY3VycmVudCBJbmZpbmlQYXRoIGNoaXBzLgorICogTm90aGluZyB0byBkbyBvbiBQb3dlclBDLCBzbyBqdXN0IHJldHVybiB3aXRob3V0IGVycm9yLgorICovCitpbnQgaXBhdGhfZW5hYmxlX3djKHN0cnVjdCBpcGF0aF9kZXZkYXRhICpkZCkKK3sKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpcGF0aF91bm9yZGVyZWRfd2MgLSBpbmRpY2F0ZSB3aGV0aGVyIHdyaXRlIGNvbWJpbmluZyBpcyB1bm9yZGVyZWQKICAqCisgKiBCZWNhdXNlIG91ciBwZXJmb3JtYW5jZSBkZXBlbmRzIG9uIG91ciBhYmlsaXR5IHRvIGRvIHdyaXRlCisgKiBjb21iaW5pbmcgbW1pbyB3cml0ZXMgaW4gdGhlIG1vc3QgZWZmaWNpZW50IHdheSwgd2UgbmVlZCB0bworICoga25vdyBpZiB3ZSBhcmUgb24gYSBwcm9jZXNzb3IgdGhhdCBtYXkgcmVvcmRlciBzdG9yZXMgd2hlbgorICogd3JpdGUgY29tYmluaW5nLgogICovCiBpbnQgaXBhdGhfdW5vcmRlcmVkX3djKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfd2NfeDg2XzY0LmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvaXBhdGgvaXBhdGhfd2NfeDg2XzY0LmMKaW5kZXggZjhmOWUyZS4uMDQ2OTZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L2lwYXRoL2lwYXRoX3djX3g4Nl82NC5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9pcGF0aC9pcGF0aF93Y194ODZfNjQuYwpAQCAtMTIzLDYgKzEyMyw4IEBACiAJCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJTZXQgbXRyciBmb3IgY2hpcCB0byBXQywgIgogCQkJCSAgICJjb29raWUgaXMgJWRcbiIsIGNvb2tpZSk7CiAJCQlkZC0+aXBhdGhfd2NfY29va2llID0gY29va2llOworCQkJZGQtPmlwYXRoX3djX2Jhc2UgPSAodW5zaWduZWQgbG9uZykgcGlvYWRkcjsKKwkJCWRkLT5pcGF0aF93Y19sZW4gPSAodW5zaWduZWQgbG9uZykgcGlvbGVuOwogCQl9CiAJfQogCkBAIC0xMzYsOSArMTM4LDE2IEBACiB2b2lkIGlwYXRoX2Rpc2FibGVfd2Moc3RydWN0IGlwYXRoX2RldmRhdGEgKmRkKQogewogCWlmIChkZC0+aXBhdGhfd2NfY29va2llKSB7CisJCWludCByOwogCQlpcGF0aF9jZGJnKFZFUkJPU0UsICJ1bmRvaW5nIFdDQ09NQiBvbiBwaW8gYnVmZmVyc1xuIik7Ci0JCW10cnJfZGVsKGRkLT5pcGF0aF93Y19jb29raWUsIDAsIDApOwotCQlkZC0+aXBhdGhfd2NfY29va2llID0gMDsKKwkJciA9IG10cnJfZGVsKGRkLT5pcGF0aF93Y19jb29raWUsIGRkLT5pcGF0aF93Y19iYXNlLAorCQkJICAgICBkZC0+aXBhdGhfd2NfbGVuKTsKKwkJaWYgKHIgPCAwKQorCQkJZGV2X2luZm8oJmRkLT5wY2lkZXYtPmRldiwKKwkJCQkgIm10cnJfZGVsKCVseCwgJWx4LCAlbHgpIGZhaWxlZDogJWRcbiIsCisJCQkJIGRkLT5pcGF0aF93Y19jb29raWUsIGRkLT5pcGF0aF93Y19iYXNlLAorCQkJCSBkZC0+aXBhdGhfd2NfbGVuLCByKTsKKwkJZGQtPmlwYXRoX3djX2Nvb2tpZSA9IDA7IC8qIGV2ZW4gb24gZmFpbHVyZSAqLwogCX0KIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pcG9pYi9pcG9pYl9mcy5jCmluZGV4IDVkZGUzODAuLmYxY2I4MzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXBvaWIvaXBvaWJfZnMuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lwb2liL2lwb2liX2ZzLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogCQlyZXR1cm4gcmV0OwogCiAJc2VxID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXNlcS0+cHJpdmF0ZSA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJc2VxLT5wcml2YXRlID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAogCXJldHVybiAwOwogfQpAQCAtMjQ3LDcgKzI0Nyw3IEBACiAJCXJldHVybiByZXQ7CiAKIAlzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc2VxLT5wcml2YXRlID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzZXEtPnByaXZhdGUgPSBpbm9kZS0+aV9wcml2YXRlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvS2NvbmZpZyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnCmluZGV4IDM2NWExYjUuLmFlY2JiOTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9LY29uZmlnCkBAIC0xLDExICsxLDEyIEBACiBjb25maWcgSU5GSU5JQkFORF9JU0VSCi0JdHJpc3RhdGUgIklTQ1NJIFJETUEgUHJvdG9jb2wiCisJdHJpc3RhdGUgImlTQ1NJIEV4dGVuc2lvbnMgZm9yIFJETUEgKGlTRVIpIgogCWRlcGVuZHMgb24gSU5GSU5JQkFORCAmJiBTQ1NJICYmIElORVQKIAlzZWxlY3QgU0NTSV9JU0NTSV9BVFRSUwogCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBJU0NTSSBSRE1BIFByb3RvY29sIG92ZXIgSW5maW5pQmFuZC4gIFRoaXMKLQkgIGFsbG93cyB5b3UgdG8gYWNjZXNzIHN0b3JhZ2UgZGV2aWNlcyB0aGF0IHNwZWFrIElTRVIvSVNDU0kKLQkgIG92ZXIgSW5maW5pQmFuZC4KKwkgIFN1cHBvcnQgZm9yIHRoZSBpU0NTSSBFeHRlbnNpb25zIGZvciBSRE1BIChpU0VSKSBQcm90b2NvbAorICAgICAgICAgIG92ZXIgSW5maW5pQmFuZC4gVGhpcyBhbGxvd3MgeW91IHRvIGFjY2VzcyBzdG9yYWdlIGRldmljZXMKKyAgICAgICAgICB0aGF0IHNwZWFrIGlTQ1NJIG92ZXIgaVNFUiBvdmVyIEluZmluaUJhbmQuCiAKLQkgIFRoZSBJU0VSIHByb3RvY29sIGlzIGRlZmluZWQgYnkgSUVURi4KLQkgIFNlZSA8aHR0cDovL3d3dy5pZXRmLm9yZy8+LgorCSAgVGhlIGlTRVIgcHJvdG9jb2wgaXMgZGVmaW5lZCBieSBJRVRGLgorCSAgU2VlIDxodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLWlwcy1pc2VyLTA1LnR4dD4KKwkgIGFuZCA8aHR0cDovL3d3dy5pbmZpbmliYW5kdGEub3JnL21lbWJlcnMvc3BlYy9pc2VyX2FubmV4XzA2MDQxOC5wZGY+CmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuYwppbmRleCAyYTE0ZmUyLi5lYjZmOThkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmMKQEAgLTMxNyw2ICszMTcsOCBAQAogCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGNvbm4tPmRkX2RhdGE7CiAKIAlpc2NzaV9jb25uX3RlYXJkb3duKGNsc19jb25uKTsKKwlpZiAoaXNlcl9jb25uLT5pYl9jb25uKQorCQlpc2VyX2Nvbm4tPmliX2Nvbm4tPmlzZXJfY29ubiA9IE5VTEw7CiAJa2ZyZWUoaXNlcl9jb25uKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaCBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2NzaV9pc2VyLmgKaW5kZXggMmNmOWFlMC4uOWM1MzkxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzY3NpX2lzZXIuaAorKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNjc2lfaXNlci5oCkBAIC0xOTIsNyArMTkyLDcgQEAKIAogc3RydWN0IGlzZXJfZHRvIHsKIAlzdHJ1Y3QgaXNjc2lfaXNlcl9jbWRfdGFzayAqY3Rhc2s7Ci0Jc3RydWN0IGlzY3NpX2lzZXJfY29ubiAgICAgKmNvbm47CisJc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubjsKIAlpbnQgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlfZW5hYmxlOwogCiAJLyogdmVjdG9yIG9mIHJlZ2lzdGVyZWQgYnVmZmVycyAqLwpAQCAtMzU1LDQgKzM1NSwxMSBAQAogCiBpbnQgaXNlcl9jb25uX3N0YXRlX2NvbXAoc3RydWN0IGlzZXJfY29ubiAqaWJfY29ubiwKIAkJCSBlbnVtIGlzZXJfaWJfY29ubl9zdGF0ZSBjb21wKTsKKworaW50IGlzZXJfZG1hX21hcF90YXNrX2RhdGEoc3RydWN0IGlzY3NpX2lzZXJfY21kX3Rhc2sgKmlzZXJfY3Rhc2ssCisJCQkgICAgc3RydWN0IGlzZXJfZGF0YV9idWYgICAgICAgKmRhdGEsCisJCQkgICAgZW51bSAgIGlzZXJfZGF0YV9kaXIgICAgICAgaXNlcl9kaXIsCisJCQkgICAgZW51bSAgIGRtYV9kYXRhX2RpcmVjdGlvbiAgZG1hX2Rpcik7CisKK3ZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfaW5pdGlhdG9yLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwppbmRleCBjY2Y1NmY2Li45YjNkNzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYworKysgYi9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl9pbml0aWF0b3IuYwpAQCAtNjYsNDIgKzY2LDYgQEAKIAlkdG8tPnJlZ2RfdmVjdG9yX2xlbisrOwogfQogCi1zdGF0aWMgaW50IGlzZXJfZG1hX21hcF90YXNrX2RhdGEoc3RydWN0IGlzY3NpX2lzZXJfY21kX3Rhc2sgKmlzZXJfY3Rhc2ssCi0JCQkJICBzdHJ1Y3QgaXNlcl9kYXRhX2J1ZiAgICAgICAqZGF0YSwKLQkJCQkgIGVudW0gICBpc2VyX2RhdGFfZGlyICAgICAgIGlzZXJfZGlyLAotCQkJCSAgZW51bSAgIGRtYV9kYXRhX2RpcmVjdGlvbiAgZG1hX2RpcikKLXsKLQlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2aWNlOwotCi0JaXNlcl9jdGFzay0+ZGlyW2lzZXJfZGlyXSA9IDE7Ci0JZG1hX2RldmljZSA9IGlzZXJfY3Rhc2stPmlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UtPmRtYV9kZXZpY2U7Ci0KLQlkYXRhLT5kbWFfbmVudHMgPSBkbWFfbWFwX3NnKGRtYV9kZXZpY2UsIGRhdGEtPmJ1ZiwgZGF0YS0+c2l6ZSwgZG1hX2Rpcik7Ci0JaWYgKGRhdGEtPmRtYV9uZW50cyA9PSAwKSB7Ci0JCWlzZXJfZXJyKCJkbWFfbWFwX3NnIGZhaWxlZCEhIVxuIik7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrKQotewotCXN0cnVjdCBkZXZpY2UgICpkbWFfZGV2aWNlOwotCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhOwotCi0JZG1hX2RldmljZSA9IGlzZXJfY3Rhc2stPmlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UtPmRtYV9kZXZpY2U7Ci0KLQlpZiAoaXNlcl9jdGFzay0+ZGlyW0lTRVJfRElSX0lOXSkgewotCQlkYXRhID0gJmlzZXJfY3Rhc2stPmRhdGFbSVNFUl9ESVJfSU5dOwotCQlkbWFfdW5tYXBfc2coZG1hX2RldmljZSwgZGF0YS0+YnVmLCBkYXRhLT5zaXplLCBETUFfRlJPTV9ERVZJQ0UpOwotCX0KLQotCWlmIChpc2VyX2N0YXNrLT5kaXJbSVNFUl9ESVJfT1VUXSkgewotCQlkYXRhID0gJmlzZXJfY3Rhc2stPmRhdGFbSVNFUl9ESVJfT1VUXTsKLQkJZG1hX3VubWFwX3NnKGRtYV9kZXZpY2UsIGRhdGEtPmJ1ZiwgZGF0YS0+c2l6ZSwgRE1BX1RPX0RFVklDRSk7Ci0JfQotfQotCiAvKiBSZWdpc3RlciB1c2VyIGJ1ZmZlciBtZW1vcnkgYW5kIGluaXRpYWxpemUgcGFzc2l2ZSByZG1hCiAgKiAgZHRvIGRlc2NyaXB0b3IuIFRvdGFsIGRhdGEgc2l6ZSBpcyBzdG9yZWQgaW4KICAqICBpc2VyX2N0YXNrLT5kYXRhW0lTRVJfRElSX0lOXS5kYXRhX2xlbgpAQCAtMjQ5LDcgKzIxMyw3IEBACiAJfQogCiAJcmVjdl9kdG8gPSAmcnhfZGVzYy0+ZHRvOwotCXJlY3ZfZHRvLT5jb25uICAgICAgICAgID0gaXNlcl9jb25uOworCXJlY3ZfZHRvLT5pYl9jb25uID0gaXNlcl9jb25uLT5pYl9jb25uOwogCXJlY3ZfZHRvLT5yZWdkX3ZlY3Rvcl9sZW4gPSAwOwogCiAJcmVnZF9oZHIgPSAmcnhfZGVzYy0+aGRyX3JlZ2RfYnVmOwpAQCAtMjk2LDcgKzI2MCw3IEBACiAJcmVnZF9oZHItPnZpcnRfYWRkciAgPSB0eF9kZXNjOyAvKiA9PSAmdHhfZGVzYy0+aXNlcl9oZWFkZXIgKi8KIAlyZWdkX2hkci0+ZGF0YV9zaXplICA9IElTRVJfVE9UQUxfSEVBREVSU19MRU47CiAKLQlzZW5kX2R0by0+Y29ubiAgICAgICAgICA9IGlzZXJfY29ubjsKKwlzZW5kX2R0by0+aWJfY29ubiAgICAgICAgID0gaXNlcl9jb25uLT5pYl9jb25uOwogCXNlbmRfZHRvLT5ub3RpZnlfZW5hYmxlICAgPSAxOwogCXNlbmRfZHRvLT5yZWdkX3ZlY3Rvcl9sZW4gPSAwOwogCkBAIC01ODgsNyArNTUyLDcgQEAKIAkJCSB1bnNpZ25lZCBsb25nIGR0b194ZmVyX2xlbikKIHsKIAlzdHJ1Y3QgaXNlcl9kdG8gICAgICAgICpkdG8gPSAmcnhfZGVzYy0+ZHRvOwotCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmNvbm4gPSBkdG8tPmNvbm47CisJc3RydWN0IGlzY3NpX2lzZXJfY29ubiAqY29ubiA9IGR0by0+aWJfY29ubi0+aXNlcl9jb25uOwogCXN0cnVjdCBpc2NzaV9zZXNzaW9uICpzZXNzaW9uID0gY29ubi0+aXNjc2lfY29ubi0+c2Vzc2lvbjsKIAlzdHJ1Y3QgaXNjc2lfY21kX3Rhc2sgKmN0YXNrOwogCXN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrOwpAQCAtNjQxLDcgKzYwNSw4IEBACiB2b2lkIGlzZXJfc25kX2NvbXBsZXRpb24oc3RydWN0IGlzZXJfZGVzYyAqdHhfZGVzYykKIHsKIAlzdHJ1Y3QgaXNlcl9kdG8gICAgICAgICpkdG8gPSAmdHhfZGVzYy0+ZHRvOwotCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGR0by0+Y29ubjsKKwlzdHJ1Y3QgaXNlcl9jb25uICAgICAgICppYl9jb25uID0gZHRvLT5pYl9jb25uOworCXN0cnVjdCBpc2NzaV9pc2VyX2Nvbm4gKmlzZXJfY29ubiA9IGliX2Nvbm4tPmlzZXJfY29ubjsKIAlzdHJ1Y3QgaXNjc2lfY29ubiAgICAgICpjb25uID0gaXNlcl9jb25uLT5pc2NzaV9jb25uOwogCXN0cnVjdCBpc2NzaV9tZ210X3Rhc2sgKm10YXNrOwogCkBAIC02NTIsNyArNjE3LDcgQEAKIAlpZiAodHhfZGVzYy0+dHlwZSA9PSBJU0NTSV9UWF9EQVRBT1VUKQogCQlrbWVtX2NhY2hlX2ZyZWUoaWcuZGVzY19jYWNoZSwgdHhfZGVzYyk7CiAKLQlhdG9taWNfZGVjKCZpc2VyX2Nvbm4tPmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOworCWF0b21pY19kZWMoJmliX2Nvbm4tPnBvc3Rfc2VuZF9idWZfY291bnQpOwogCiAJd3JpdGVfbG9jayhjb25uLT5yZWN2X2xvY2spOwogCWlmIChjb25uLT5zdXNwZW5kX3R4KSB7CkBAIC02OTgsMTQgKzY2MywxOSBAQAogdm9pZCBpc2VyX2N0YXNrX3JkbWFfZmluYWxpemUoc3RydWN0IGlzY3NpX2lzZXJfY21kX3Rhc2sgKmlzZXJfY3Rhc2spCiB7CiAJaW50IGRlZmVycmVkOworCWludCBpc19yZG1hX2FsaWduZWQgPSAxOwogCiAJLyogaWYgd2Ugd2VyZSByZWFkaW5nLCBjb3B5IGJhY2sgdG8gdW5hbGlnbmVkIHNnbGlzdCwKIAkgKiBhbnl3YXkgZG1hX3VubWFwIGFuZCBmcmVlIHRoZSBjb3B5CiAJICovCi0JaWYgKGlzZXJfY3Rhc2stPmRhdGFfY29weVtJU0VSX0RJUl9JTl0uY29weV9idWYgIT0gTlVMTCkKKwlpZiAoaXNlcl9jdGFzay0+ZGF0YV9jb3B5W0lTRVJfRElSX0lOXS5jb3B5X2J1ZiAhPSBOVUxMKSB7CisJCWlzX3JkbWFfYWxpZ25lZCA9IDA7CiAJCWlzZXJfZmluYWxpemVfcmRtYV91bmFsaWduZWRfc2coaXNlcl9jdGFzaywgSVNFUl9ESVJfSU4pOwotCWlmIChpc2VyX2N0YXNrLT5kYXRhX2NvcHlbSVNFUl9ESVJfT1VUXS5jb3B5X2J1ZiAhPSBOVUxMKQorCX0KKwlpZiAoaXNlcl9jdGFzay0+ZGF0YV9jb3B5W0lTRVJfRElSX09VVF0uY29weV9idWYgIT0gTlVMTCkgeworCQlpc19yZG1hX2FsaWduZWQgPSAwOwogCQlpc2VyX2ZpbmFsaXplX3JkbWFfdW5hbGlnbmVkX3NnKGlzZXJfY3Rhc2ssIElTRVJfRElSX09VVCk7CisJfQogCiAJaWYgKGlzZXJfY3Rhc2stPmRpcltJU0VSX0RJUl9JTl0pIHsKIAkJZGVmZXJyZWQgPSBpc2VyX3JlZ2RfYnVmZl9yZWxlYXNlCkBAIC03MjUsNyArNjk1LDkgQEAKIAkJfQogCX0KIAotCWlzZXJfZG1hX3VubWFwX3Rhc2tfZGF0YShpc2VyX2N0YXNrKTsKKyAgICAgICAvKiBpZiB0aGUgZGF0YSB3YXMgdW5hbGlnbmVkLCBpdCB3YXMgYWxyZWFkeSB1bm1hcHBlZCBhbmQgdGhlbiBjb3BpZWQgKi8KKyAgICAgICBpZiAoaXNfcmRtYV9hbGlnbmVkKQorCQlpc2VyX2RtYV91bm1hcF90YXNrX2RhdGEoaXNlcl9jdGFzayk7CiB9CiAKIHZvaWQgaXNlcl9kdG9fYnVmZnNfcmVsZWFzZShzdHJ1Y3QgaXNlcl9kdG8gKmR0bykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX21lbW9yeS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKaW5kZXggZDBiMDNmNC4uMDYwNjc0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfbWVtb3J5LmMKQEAgLTM2OSw2ICszNjksNDQgQEAKIAl9CiB9CiAKK2ludCBpc2VyX2RtYV9tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrLAorCQkJICAgIHN0cnVjdCBpc2VyX2RhdGFfYnVmICAgICAgICpkYXRhLAorCQkJICAgIGVudW0gICBpc2VyX2RhdGFfZGlyICAgICAgIGlzZXJfZGlyLAorCQkJICAgIGVudW0gICBkbWFfZGF0YV9kaXJlY3Rpb24gIGRtYV9kaXIpCit7CisJc3RydWN0IGRldmljZSAqZG1hX2RldmljZTsKKworCWlzZXJfY3Rhc2stPmRpcltpc2VyX2Rpcl0gPSAxOworCWRtYV9kZXZpY2UgPQorCQlpc2VyX2N0YXNrLT5pc2VyX2Nvbm4tPmliX2Nvbm4tPmRldmljZS0+aWJfZGV2aWNlLT5kbWFfZGV2aWNlOworCisJZGF0YS0+ZG1hX25lbnRzID0gZG1hX21hcF9zZyhkbWFfZGV2aWNlLCBkYXRhLT5idWYsIGRhdGEtPnNpemUsIGRtYV9kaXIpOworCWlmIChkYXRhLT5kbWFfbmVudHMgPT0gMCkgeworCQlpc2VyX2VycigiZG1hX21hcF9zZyBmYWlsZWQhISFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgaXNlcl9kbWFfdW5tYXBfdGFza19kYXRhKHN0cnVjdCBpc2NzaV9pc2VyX2NtZF90YXNrICppc2VyX2N0YXNrKQoreworCXN0cnVjdCBkZXZpY2UgICpkbWFfZGV2aWNlOworCXN0cnVjdCBpc2VyX2RhdGFfYnVmICpkYXRhOworCisJZG1hX2RldmljZSA9CisJCWlzZXJfY3Rhc2stPmlzZXJfY29ubi0+aWJfY29ubi0+ZGV2aWNlLT5pYl9kZXZpY2UtPmRtYV9kZXZpY2U7CisKKwlpZiAoaXNlcl9jdGFzay0+ZGlyW0lTRVJfRElSX0lOXSkgeworCQlkYXRhID0gJmlzZXJfY3Rhc2stPmRhdGFbSVNFUl9ESVJfSU5dOworCQlkbWFfdW5tYXBfc2coZG1hX2RldmljZSwgZGF0YS0+YnVmLCBkYXRhLT5zaXplLCBETUFfRlJPTV9ERVZJQ0UpOworCX0KKworCWlmIChpc2VyX2N0YXNrLT5kaXJbSVNFUl9ESVJfT1VUXSkgeworCQlkYXRhID0gJmlzZXJfY3Rhc2stPmRhdGFbSVNFUl9ESVJfT1VUXTsKKwkJZG1hX3VubWFwX3NnKGRtYV9kZXZpY2UsIGRhdGEtPmJ1ZiwgZGF0YS0+c2l6ZSwgRE1BX1RPX0RFVklDRSk7CisJfQorfQorCiAvKioKICAqIGlzZXJfcmVnX3JkbWFfbWVtIC0gUmVnaXN0ZXJzIG1lbW9yeSBpbnRlbmRlZCBmb3IgUkRNQSwKICAqIG9idGFpbmluZyBya2V5IGFuZCB2YQpAQCAtMzk0LDYgKzQzMiwxMCBAQAogCQlpc2VyX2VycigicmRtYSBhbGlnbm1lbnQgdmlvbGF0aW9uICVkLyVkIGFsaWduZWRcbiIsCiAJCQkgYWxpZ25lZF9sZW4sIG1lbS0+c2l6ZSk7CiAJCWlzZXJfZGF0YV9idWZfZHVtcChtZW0pOworCisJCS8qIHVubWFwIHRoZSBjb21tYW5kIGRhdGEgYmVmb3JlIGFjY2Vzc2luZyBpdCAqLworCQlpc2VyX2RtYV91bm1hcF90YXNrX2RhdGEoaXNlcl9jdGFzayk7CisKIAkJLyogYWxsb2NhdGUgY29weSBidWYsIGlmIHdlIGFyZSB3cml0aW5nLCBjb3B5IHRoZSAqLwogCQkvKiB1bmFsaWduZWQgc2NhdHRlcmxpc3QsIGRtYSBtYXAgdGhlIGNvcHkgICAgICAgICovCiAJCWlmIChpc2VyX3N0YXJ0X3JkbWFfdW5hbGlnbmVkX3NnKGlzZXJfY3Rhc2ssIGNtZF9kaXIpICE9IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jIGIvZHJpdmVycy9pbmZpbmliYW5kL3VscC9pc2VyL2lzZXJfdmVyYnMuYwppbmRleCBlY2RjYTdmLi4xOGEwMDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvdWxwL2lzZXIvaXNlcl92ZXJicy5jCisrKyBiL2RyaXZlcnMvaW5maW5pYmFuZC91bHAvaXNlci9pc2VyX3ZlcmJzLmMKQEAgLTU3MSw2ICs1NzEsOCBAQAogCS8qIG9uIEVWRU5UX0FERFJfRVJST1IgdGhlcmUncyBubyBkZXZpY2UgeWV0IGZvciB0aGlzIGNvbm4gKi8KIAlpZiAoZGV2aWNlICE9IE5VTEwpCiAJCWlzZXJfZGV2aWNlX3RyeV9yZWxlYXNlKGRldmljZSk7CisJaWYgKGliX2Nvbm4tPmlzZXJfY29ubikKKwkJaWJfY29ubi0+aXNlcl9jb25uLT5pYl9jb25uID0gTlVMTDsKIAlrZnJlZShpYl9jb25uKTsKIH0KIApAQCAtNjk0LDcgKzY5Niw3IEBACiAJc3RydWN0IGlzZXJfZHRvICAgKnJlY3ZfZHRvID0gJnJ4X2Rlc2MtPmR0bzsKIAogCS8qIFJldHJpZXZlIGNvbm4gKi8KLQlpYl9jb25uID0gcmVjdl9kdG8tPmNvbm4tPmliX2Nvbm47CisJaWJfY29ubiA9IHJlY3ZfZHRvLT5pYl9jb25uOwogCiAJaXNlcl9kdG9fdG9faW92KHJlY3ZfZHRvLCBpb3YsIDIpOwogCkBAIC03MjcsNyArNzI5LDcgQEAKIAlzdHJ1Y3QgaXNlcl9jb25uICAqaWJfY29ubjsKIAlzdHJ1Y3QgaXNlcl9kdG8gICAqZHRvID0gJnR4X2Rlc2MtPmR0bzsKIAotCWliX2Nvbm4gPSBkdG8tPmNvbm4tPmliX2Nvbm47CisJaWJfY29ubiA9IGR0by0+aWJfY29ubjsKIAogCWlzZXJfZHRvX3RvX2lvdihkdG8sIGlvdiwgTUFYX1JFR0RfQlVGX1ZFQ1RPUl9MRU4pOwogCkBAIC03NzQsNyArNzc2LDcgQEAKIHN0YXRpYyB2b2lkIGlzZXJfaGFuZGxlX2NvbXBfZXJyb3Ioc3RydWN0IGlzZXJfZGVzYyAqZGVzYykKIHsKIAlzdHJ1Y3QgaXNlcl9kdG8gICpkdG8gICAgID0gJmRlc2MtPmR0bzsKLQlzdHJ1Y3QgaXNlcl9jb25uICppYl9jb25uID0gZHRvLT5jb25uLT5pYl9jb25uOworCXN0cnVjdCBpc2VyX2Nvbm4gKmliX2Nvbm4gPSBkdG8tPmliX2Nvbm47CiAKIAlpc2VyX2R0b19idWZmc19yZWxlYXNlKGR0byk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvS2NvbmZpZwppbmRleCBhOWRkYTU2Li44M2VhYzNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL0tjb25maWcKKysrIGIvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9LY29uZmlnCkBAIC0xODMsNCArMTgzLDEzIEBACiAJICBUaGlzIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIEhJTC1rZXlib2FyZHMgYXR0YWNoZWQKIAkgIHRvIHlvdXIgbWFjaGluZSwgc28gbm9ybWFsbHkgeW91IHNob3VsZCBzYXkgWSBoZXJlLgogCitjb25maWcgS0VZQk9BUkRfT01BUAorCXRyaXN0YXRlICJUSSBPTUFQIGtleXBhZCBzdXBwb3J0IgorCWRlcGVuZHMgb24gKEFSQ0hfT01BUDEgfHwgQVJDSF9PTUFQMikKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0aGUgT01BUCBrZXlwYWQuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG9tYXAta2V5cGFkLgorCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZSBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvTWFrZWZpbGUKaW5kZXggMjcwODE2Ny4uYjI2NTM5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9rZXlib2FyZC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL01ha2VmaWxlCkBAIC0xNSw0ICsxNSw1IEBACiBvYmotJChDT05GSUdfS0VZQk9BUkRfU1BJVFopCQkrPSBzcGl0emtiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMKQkJKz0gaGlsX2tiZC5vCiBvYmotJChDT05GSUdfS0VZQk9BUkRfSElMX09MRCkJCSs9IGhpbGtiZC5vCitvYmotJChDT05GSUdfS0VZQk9BUkRfT01BUCkgICAgICAgICAgICAgKz0gb21hcC1rZXlwYWQubwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMgYi9kcml2ZXJzL2lucHV0L2tleWJvYXJkL29tYXAta2V5cGFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQzNjI4NwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYwpAQCAtMCwwICsxLDQ5MiBAQAorLyoKKyAqIGxpbnV4L2RyaXZlcnMvaW5wdXQva2V5Ym9hcmQvb21hcC1rZXlwYWQuYworICoKKyAqIE9NQVAgS2V5cGFkIERyaXZlcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMyBOb2tpYSBDb3Jwb3JhdGlvbgorICogV3JpdHRlbiBieSBUaW1vIFRlcuRzIDxleHQtdGltby50ZXJhc0Bub2tpYS5jb20+CisgKgorICogQWRkZWQgc3VwcG9ydCBmb3IgSDIgJiBIMyBLZXlwYWQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBUZXhhcyBJbnN0cnVtZW50cworICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5wdXQuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gva2V5cGFkLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvbWVuZWxhdXMuaD4KKyNpbmNsdWRlIDxhc20vaXJxLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9tdXguaD4KKworI3VuZGVmIE5FV19CT0FSRF9MRUFSTklOR19NT0RFCisKK3N0YXRpYyB2b2lkIG9tYXBfa3BfdGFza2xldCh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2b2lkIG9tYXBfa3BfdGltZXIodW5zaWduZWQgbG9uZyk7CisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIGtleXBhZF9zdGF0ZVs4XTsKK3N0YXRpYyBERUZJTkVfTVVURVgoa3BfZW5hYmxlX211dGV4KTsKK3N0YXRpYyBpbnQga3BfZW5hYmxlID0gMTsKK3N0YXRpYyBpbnQga3BfY3VyX2dyb3VwID0gLTE7CisKK3N0cnVjdCBvbWFwX2twIHsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKKwlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKKwlpbnQgaXJxOworCXVuc2lnbmVkIGludCByb3dzOworCXVuc2lnbmVkIGludCBjb2xzOworCXVuc2lnbmVkIGxvbmcgZGVsYXk7CisJdW5zaWduZWQgaW50IGRlYm91bmNlOworfTsKKworREVDTEFSRV9UQVNLTEVUX0RJU0FCTEVEKGtwX3Rhc2tsZXQsIG9tYXBfa3BfdGFza2xldCwgMCk7CisKK3N0YXRpYyBpbnQgKmtleW1hcDsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKnJvd19ncGlvczsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgKmNvbF9ncGlvczsKKworI2lmZGVmIENPTkZJR19BUkNIX09NQVAyCitzdGF0aWMgdm9pZCBzZXRfY29sX2dwaW9fdmFsKHN0cnVjdCBvbWFwX2twICpvbWFwX2twLCB1OCB2YWx1ZSkKK3sKKwlpbnQgY29sOworCWZvciAoY29sID0gMDsgY29sIDwgb21hcF9rcC0+Y29sczsgY29sKyspIHsKKwkJaWYgKHZhbHVlICYgKDEgPDwgY29sKSkKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChjb2xfZ3Bpb3NbY29sXSwgMSk7CisJCWVsc2UKKwkJCW9tYXBfc2V0X2dwaW9fZGF0YW91dChjb2xfZ3Bpb3NbY29sXSwgMCk7CisJfQorfQorCitzdGF0aWMgdTggZ2V0X3Jvd19ncGlvX3ZhbChzdHJ1Y3Qgb21hcF9rcCAqb21hcF9rcCkKK3sKKwlpbnQgcm93OworCXU4IHZhbHVlID0gMDsKKworCWZvciAocm93ID0gMDsgcm93IDwgb21hcF9rcC0+cm93czsgcm93KyspIHsKKwkJaWYgKG9tYXBfZ2V0X2dwaW9fZGF0YWluKHJvd19ncGlvc1tyb3ddKSkKKwkJCXZhbHVlIHw9ICgxIDw8IHJvdyk7CisJfQorCXJldHVybiB2YWx1ZTsKK30KKyNlbHNlCisjZGVmaW5lCQlzZXRfY29sX2dwaW9fdmFsKHgsIHkpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZQkJZ2V0X3Jvd19ncGlvX3ZhbCh4KQkwCisjZW5kaWYKKworc3RhdGljIGlycXJldHVybl90IG9tYXBfa3BfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCwKKwkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBvbWFwX2twICpvbWFwX2twID0gZGV2X2lkOworCisJLyogZGlzYWJsZSBrZXlib2FyZCBpbnRlcnJ1cHQgYW5kIHNjaGVkdWxlIGZvciBoYW5kbGluZyAqLworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQlpbnQgaTsKKwkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3AtPnJvd3M7IGkrKykKKwkJCWRpc2FibGVfaXJxKE9NQVBfR1BJT19JUlEocm93X2dwaW9zW2ldKSk7CisJfSBlbHNlCisJCS8qIGRpc2FibGUga2V5Ym9hcmQgaW50ZXJydXB0IGFuZCBzY2hlZHVsZSBmb3IgaGFuZGxpbmcgKi8KKwkJb21hcF93cml0ZXcoMSwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKKworCXRhc2tsZXRfc2NoZWR1bGUoJmtwX3Rhc2tsZXQpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2twX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwl0YXNrbGV0X3NjaGVkdWxlKCZrcF90YXNrbGV0KTsKK30KKworc3RhdGljIHZvaWQgb21hcF9rcF9zY2FuX2tleXBhZChzdHJ1Y3Qgb21hcF9rcCAqb21hcF9rcCwgdW5zaWduZWQgY2hhciAqc3RhdGUpCit7CisJaW50IGNvbCA9IDA7CisKKwkvKiByZWFkIHRoZSBrZXlwYWQgc3RhdHVzICovCisJaWYgKGNwdV9pc19vbWFwMjR4eCgpKSB7CisJCWludCBpOworCQlmb3IgKGkgPSAwOyBpIDwgb21hcF9rcC0+cm93czsgaSsrKQorCQkJZGlzYWJsZV9pcnEoT01BUF9HUElPX0lSUShyb3dfZ3Bpb3NbaV0pKTsKKworCQkvKiByZWFkIHRoZSBrZXlwYWQgc3RhdHVzICovCisJCWZvciAoY29sID0gMDsgY29sIDwgb21hcF9rcC0+Y29sczsgY29sKyspIHsKKwkJCXNldF9jb2xfZ3Bpb192YWwob21hcF9rcCwgfigxIDw8IGNvbCkpOworCQkJc3RhdGVbY29sXSA9IH4oZ2V0X3Jvd19ncGlvX3ZhbChvbWFwX2twKSkgJiAweDNmOworCQl9CisJCXNldF9jb2xfZ3Bpb192YWwob21hcF9rcCwgMCk7CisKKwl9IGVsc2UgeworCQkvKiBkaXNhYmxlIGtleWJvYXJkIGludGVycnVwdCBhbmQgc2NoZWR1bGUgZm9yIGhhbmRsaW5nICovCisJCW9tYXBfd3JpdGV3KDEsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JEX01BU0tJVCk7CisKKwkJLyogcmVhZCB0aGUga2V5cGFkIHN0YXR1cyAqLworCQlvbWFwX3dyaXRldygweGZmLCBPTUFQX01QVUlPX0JBU0UgKyBPTUFQX01QVUlPX0tCQyk7CisJCWZvciAoY29sID0gMDsgY29sIDwgb21hcF9rcC0+Y29sczsgY29sKyspIHsKKwkJCW9tYXBfd3JpdGV3KH4oMSA8PCBjb2wpICYgMHhmZiwKKwkJCQkgICAgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkMpOworCisJCQl1ZGVsYXkob21hcF9rcC0+ZGVsYXkpOworCisJCQlzdGF0ZVtjb2xdID0gfm9tYXBfcmVhZHcoT01BUF9NUFVJT19CQVNFICsKKwkJCQkJCSBPTUFQX01QVUlPX0tCUl9MQVRDSCkgJiAweGZmOworCQl9CisJCW9tYXBfd3JpdGV3KDB4MDAsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JDKTsKKwkJdWRlbGF5KDIpOworCX0KK30KKworc3RhdGljIGlubGluZSBpbnQgb21hcF9rcF9maW5kX2tleShpbnQgY29sLCBpbnQgcm93KQoreworCWludCBpLCBrZXk7CisKKwlrZXkgPSBLRVkoY29sLCByb3csIDApOworCWZvciAoaSA9IDA7IGtleW1hcFtpXSAhPSAwOyBpKyspCisJCWlmICgoa2V5bWFwW2ldICYgMHhmZjAwMDAwMCkgPT0ga2V5KQorCQkJcmV0dXJuIGtleW1hcFtpXSAmIDB4MDBmZmZmZmY7CisJcmV0dXJuIC0xOworfQorCitzdGF0aWMgdm9pZCBvbWFwX2twX3Rhc2tsZXQodW5zaWduZWQgbG9uZyBkYXRhKQoreworCXN0cnVjdCBvbWFwX2twICpvbWFwX2twX2RhdGEgPSAoc3RydWN0IG9tYXBfa3AgKikgZGF0YTsKKwl1bnNpZ25lZCBjaGFyIG5ld19zdGF0ZVs4XSwgY2hhbmdlZCwga2V5X2Rvd24gPSAwOworCWludCBjb2wsIHJvdzsKKwlpbnQgc3B1cmlvdXMgPSAwOworCisJLyogY2hlY2sgZm9yIGFueSBjaGFuZ2VzICovCisJb21hcF9rcF9zY2FuX2tleXBhZChvbWFwX2twX2RhdGEsIG5ld19zdGF0ZSk7CisKKwkvKiBjaGVjayBmb3IgY2hhbmdlcyBhbmQgcHJpbnQgdGhvc2UgKi8KKwlmb3IgKGNvbCA9IDA7IGNvbCA8IG9tYXBfa3BfZGF0YS0+Y29sczsgY29sKyspIHsKKwkJY2hhbmdlZCA9IG5ld19zdGF0ZVtjb2xdIF4ga2V5cGFkX3N0YXRlW2NvbF07CisJCWtleV9kb3duIHw9IG5ld19zdGF0ZVtjb2xdOworCQlpZiAoY2hhbmdlZCA9PSAwKQorCQkJY29udGludWU7CisKKwkJZm9yIChyb3cgPSAwOyByb3cgPCBvbWFwX2twX2RhdGEtPnJvd3M7IHJvdysrKSB7CisJCQlpbnQga2V5OworCQkJaWYgKCEoY2hhbmdlZCAmICgxIDw8IHJvdykpKQorCQkJCWNvbnRpbnVlOworI2lmZGVmIE5FV19CT0FSRF9MRUFSTklOR19NT0RFCisJCQlwcmludGsoS0VSTl9JTkZPICJvbWFwLWtleXBhZDoga2V5ICVkLSVkICVzXG4iLCBjb2wsCisJCQkgICAgICAgcm93LCAobmV3X3N0YXRlW2NvbF0gJiAoMSA8PCByb3cpKSA/CisJCQkgICAgICAgInByZXNzZWQiIDogInJlbGVhc2VkIik7CisjZWxzZQorCQkJa2V5ID0gb21hcF9rcF9maW5kX2tleShjb2wsIHJvdyk7CisJCQlpZiAoa2V5IDwgMCkgeworCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJCQkgICAgICAib21hcC1rZXlwYWQ6IFNwdXJpb3VzIGtleSBldmVudCAlZC0lZFxuIiwKKwkJCQkgICAgICAgY29sLCByb3cpOworCQkJCS8qIFdlIHNjYW4gYWdhaW4gYWZ0ZXIgYSBjb3VwbGUgb2Ygc2Vjb25kcyAqLworCQkJCXNwdXJpb3VzID0gMTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKCEoa3BfY3VyX2dyb3VwID09IChrZXkgJiBHUk9VUF9NQVNLKSB8fAorCQkJICAgICAga3BfY3VyX2dyb3VwID09IC0xKSkKKwkJCQljb250aW51ZTsKKworCQkJa3BfY3VyX2dyb3VwID0ga2V5ICYgR1JPVVBfTUFTSzsKKwkJCWlucHV0X3JlcG9ydF9rZXkob21hcF9rcF9kYXRhLT5pbnB1dCwga2V5ICYgfkdST1VQX01BU0ssCisJCQkJCSBuZXdfc3RhdGVbY29sXSAmICgxIDw8IHJvdykpOworI2VuZGlmCisJCX0KKwl9CisJbWVtY3B5KGtleXBhZF9zdGF0ZSwgbmV3X3N0YXRlLCBzaXplb2Yoa2V5cGFkX3N0YXRlKSk7CisKKwlpZiAoa2V5X2Rvd24pIHsKKyAgICAgICAgICAgICAgICBpbnQgZGVsYXkgPSBIWiAvIDIwOworCQkvKiBzb21lIGtleSBpcyBwcmVzc2VkIC0ga2VlcCBpcnEgZGlzYWJsZWQgYW5kIHVzZSB0aW1lcgorCQkgKiB0byBwb2xsIHRoZSBrZXlwYWQgKi8KKwkJaWYgKHNwdXJpb3VzKQorCQkJZGVsYXkgPSAyICogSFo7CisJCW1vZF90aW1lcigmb21hcF9rcF9kYXRhLT50aW1lciwgamlmZmllcyArIGRlbGF5KTsKKwl9IGVsc2UgeworCQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLworCQlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3BfZGF0YS0+cm93czsgaSsrKQorCQkJCWVuYWJsZV9pcnEoT01BUF9HUElPX0lSUShyb3dfZ3Bpb3NbaV0pKTsKKwkJfSBlbHNlIHsKKwkJCW9tYXBfd3JpdGV3KDAsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JEX01BU0tJVCk7CisJCQlrcF9jdXJfZ3JvdXAgPSAtMTsKKwkJfQorIAl9Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9tYXBfa3BfZW5hYmxlX3Nob3coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXVcbiIsIGtwX2VuYWJsZSk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IG9tYXBfa3BfZW5hYmxlX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisJCQkJICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCWludCBzdGF0ZTsKKworCWlmIChzc2NhbmYoYnVmLCAiJXUiLCAmc3RhdGUpICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChzdGF0ZSAhPSAxKSAmJiAoc3RhdGUgIT0gMCkpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygma3BfZW5hYmxlX211dGV4KTsKKwlpZiAoc3RhdGUgIT0ga3BfZW5hYmxlKSB7CisJCWlmIChzdGF0ZSkKKwkJCWVuYWJsZV9pcnEoSU5UX0tFWUJPQVJEKTsKKwkJZWxzZQorCQkJZGlzYWJsZV9pcnEoSU5UX0tFWUJPQVJEKTsKKwkJa3BfZW5hYmxlID0gc3RhdGU7CisJfQorCW11dGV4X3VubG9jaygma3BfZW5hYmxlX211dGV4KTsKKworCXJldHVybiBzdHJubGVuKGJ1ZiwgY291bnQpOworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoZW5hYmxlLCBTX0lSVUdPIHwgU19JV1VTUiwgb21hcF9rcF9lbmFibGVfc2hvdywgb21hcF9rcF9lbmFibGVfc3RvcmUpOworCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IG9tYXBfa3Bfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwkvKiBOb3RoaW5nIHlldCAqLworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9rcF9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCS8qIE5vdGhpbmcgeWV0ICovCisKKwlyZXR1cm4gMDsKK30KKyNlbHNlCisjZGVmaW5lIG9tYXBfa3Bfc3VzcGVuZAlOVUxMCisjZGVmaW5lIG9tYXBfa3BfcmVzdW1lCU5VTEwKKyNlbmRpZgorCitzdGF0aWMgaW50IF9faW5pdCBvbWFwX2twX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IG9tYXBfa3AgKm9tYXBfa3A7CisJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OworCXN0cnVjdCBvbWFwX2twX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gIHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWludCBpLCBjb2xfaWR4LCByb3dfaWR4LCBpcnFfaWR4LCByZXQ7CisKKwlpZiAoIXBkYXRhLT5yb3dzIHx8ICFwZGF0YS0+Y29scyB8fCAhcGRhdGEtPmtleW1hcCkgeworCQlwcmludGsoS0VSTl9FUlIgIk5vIHJvd3MsIGNvbHMgb3Iga2V5bWFwIGZyb20gcGRhdGFcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlvbWFwX2twID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG9tYXBfa3ApLCBHRlBfS0VSTkVMKTsKKwlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIW9tYXBfa3AgfHwgIWlucHV0X2RldikgeworCQlrZnJlZShvbWFwX2twKTsKKwkJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgb21hcF9rcCk7CisKKwlvbWFwX2twLT5pbnB1dCA9IGlucHV0X2RldjsKKworCS8qIERpc2FibGUgdGhlIGludGVycnVwdCBmb3IgdGhlIE1QVUlPIGtleWJvYXJkICovCisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkKKwkJb21hcF93cml0ZXcoMSwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKKworCWtleW1hcCA9IHBkYXRhLT5rZXltYXA7CisKKwlpZiAocGRhdGEtPnJlcCkKKwkJc2V0X2JpdChFVl9SRVAsIGlucHV0X2Rldi0+ZXZiaXQpOworCisJaWYgKHBkYXRhLT5kZWxheSkKKwkJb21hcF9rcC0+ZGVsYXkgPSBwZGF0YS0+ZGVsYXk7CisKKwlpZiAocGRhdGEtPnJvd19ncGlvcyAmJiBwZGF0YS0+Y29sX2dwaW9zKSB7CisJCXJvd19ncGlvcyA9IHBkYXRhLT5yb3dfZ3Bpb3M7CisJCWNvbF9ncGlvcyA9IHBkYXRhLT5jb2xfZ3Bpb3M7CisJfQorCisJb21hcF9rcC0+cm93cyA9IHBkYXRhLT5yb3dzOworCW9tYXBfa3AtPmNvbHMgPSBwZGF0YS0+Y29sczsKKworCWlmIChjcHVfaXNfb21hcDI0eHgoKSkgeworCQkvKiBDb2xzOiBvdXRwdXRzICovCisJCWZvciAoY29sX2lkeCA9IDA7IGNvbF9pZHggPCBvbWFwX2twLT5jb2xzOyBjb2xfaWR4KyspIHsKKwkJCWlmIChvbWFwX3JlcXVlc3RfZ3Bpbyhjb2xfZ3Bpb3NbY29sX2lkeF0pIDwgMCkgeworCQkJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QiCisJCQkJICAgICAgICJHUElPJWQgZm9yIGtleXBhZFxuIiwKKwkJCQkgICAgICAgY29sX2dwaW9zW2NvbF9pZHhdKTsKKwkJCQlnb3RvIGVycjE7CisJCQl9CisJCQlvbWFwX3NldF9ncGlvX2RpcmVjdGlvbihjb2xfZ3Bpb3NbY29sX2lkeF0sIDApOworCQl9CisJCS8qIFJvd3M6IGlucHV0cyAqLworCQlmb3IgKHJvd19pZHggPSAwOyByb3dfaWR4IDwgb21hcF9rcC0+cm93czsgcm93X2lkeCsrKSB7CisJCQlpZiAob21hcF9yZXF1ZXN0X2dwaW8ocm93X2dwaW9zW3Jvd19pZHhdKSA8IDApIHsKKwkJCQlwcmludGsoS0VSTl9FUlIgIkZhaWxlZCB0byByZXF1ZXN0IgorCQkJCSAgICAgICAiR1BJTyVkIGZvciBrZXlwYWRcbiIsCisJCQkJICAgICAgIHJvd19ncGlvc1tyb3dfaWR4XSk7CisJCQkJZ290byBlcnIyOworCQkJfQorCQkJb21hcF9zZXRfZ3Bpb19kaXJlY3Rpb24ocm93X2dwaW9zW3Jvd19pZHhdLCAxKTsKKwkJfQorCX0KKworCXNldHVwX3RpbWVyKCZvbWFwX2twLT50aW1lciwgb21hcF9rcF90aW1lciwgKHVuc2lnbmVkIGxvbmcpb21hcF9rcCk7CisKKwkvKiBnZXQgdGhlIGlycSBhbmQgaW5pdCB0aW1lciovCisJdGFza2xldF9lbmFibGUoJmtwX3Rhc2tsZXQpOworCWtwX3Rhc2tsZXQuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBvbWFwX2twOworCisJcmV0ID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZwZGV2LT5kZXYsICZkZXZfYXR0cl9lbmFibGUpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycjI7CisKKwkvKiBzZXR1cCBpbnB1dCBkZXZpY2UgKi8KKwlzZXRfYml0KEVWX0tFWSwgaW5wdXRfZGV2LT5ldmJpdCk7CisJZm9yIChpID0gMDsga2V5bWFwW2ldICE9IDA7IGkrKykKKwkJc2V0X2JpdChrZXltYXBbaV0gJiBLRVlfTUFYLCBpbnB1dF9kZXYtPmtleWJpdCk7CisJaW5wdXRfZGV2LT5uYW1lID0gIm9tYXAta2V5cGFkIjsKKwlpbnB1dF9kZXYtPnBoeXMgPSAib21hcC1rZXlwYWQvaW5wdXQwIjsKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJnBkZXYtPmRldjsKKwlpbnB1dF9kZXYtPnByaXZhdGUgPSBvbWFwX2twOworCisJaW5wdXRfZGV2LT5pZC5idXN0eXBlID0gQlVTX0hPU1Q7CisJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSAweDAwMDE7CisJaW5wdXRfZGV2LT5pZC5wcm9kdWN0ID0gMHgwMDAxOworCWlucHV0X2Rldi0+aWQudmVyc2lvbiA9IDB4MDEwMDsKKworCWlucHV0X2Rldi0+a2V5Y29kZSA9IGtleW1hcDsKKwlpbnB1dF9kZXYtPmtleWNvZGVzaXplID0gc2l6ZW9mKHVuc2lnbmVkIGludCk7CisJaW5wdXRfZGV2LT5rZXljb2RlbWF4ID0gcGRhdGEtPmtleW1hcHNpemU7CisKKwlyZXQgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uob21hcF9rcC0+aW5wdXQpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIHJlZ2lzdGVyIG9tYXAta2V5cGFkIGlucHV0IGRldmljZVxuIik7CisJCWdvdG8gZXJyMzsKKwl9CisKKwlpZiAocGRhdGEtPmRib3VuY2UpCisJCW9tYXBfd3JpdGV3KDB4ZmYsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fR1BJT19ERUJPVU5DSU5HKTsKKworCS8qIHNjYW4gY3VycmVudCBzdGF0dXMgYW5kIGVuYWJsZSBpbnRlcnJ1cHQgKi8KKwlvbWFwX2twX3NjYW5fa2V5cGFkKG9tYXBfa3AsIGtleXBhZF9zdGF0ZSk7CisJaWYgKCFjcHVfaXNfb21hcDI0eHgoKSkgeworCQlvbWFwX2twLT5pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOworCQlpZiAob21hcF9rcC0+aXJxID49IDApIHsKKwkJCWlmIChyZXF1ZXN0X2lycShvbWFwX2twLT5pcnEsIG9tYXBfa3BfaW50ZXJydXB0LCAwLAorCQkJCQkib21hcC1rZXlwYWQiLCBvbWFwX2twKSA8IDApCisJCQkJZ290byBlcnI0OworCQl9CisJCW9tYXBfd3JpdGV3KDAsIE9NQVBfTVBVSU9fQkFTRSArIE9NQVBfTVBVSU9fS0JEX01BU0tJVCk7CisJfSBlbHNlIHsKKwkJZm9yIChpcnFfaWR4ID0gMDsgaXJxX2lkeCA8IG9tYXBfa3AtPnJvd3M7IGlycV9pZHgrKykgeworCQkJaWYgKHJlcXVlc3RfaXJxKE9NQVBfR1BJT19JUlEocm93X2dwaW9zW2lycV9pZHhdKSwKKwkJCQkgICAgICAgCW9tYXBfa3BfaW50ZXJydXB0LAorCQkJCQlJUlFGX1RSSUdHRVJfRkFMTElORywKKwkJCQkgICAgICAgCSJvbWFwLWtleXBhZCIsIG9tYXBfa3ApIDwgMCkKKwkJCQlnb3RvIGVycjU7CisJCX0KKwl9CisJcmV0dXJuIDA7CitlcnI1OgorCWZvciAoaSA9IGlycV9pZHgtMTsgaSA+PTA7IGktLSkKKwkJZnJlZV9pcnEocm93X2dwaW9zW2ldLCAwKTsKK2VycjQ6CisJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uob21hcF9rcC0+aW5wdXQpOworCWlucHV0X2RldiA9IE5VTEw7CitlcnIzOgorCWRldmljZV9yZW1vdmVfZmlsZSgmcGRldi0+ZGV2LCAmZGV2X2F0dHJfZW5hYmxlKTsKK2VycjI6CisJZm9yIChpID0gcm93X2lkeC0xOyBpID49MDsgaS0tKQorCQlvbWFwX2ZyZWVfZ3Bpbyhyb3dfZ3Bpb3NbaV0pOworZXJyMToKKwlmb3IgKGkgPSBjb2xfaWR4LTE7IGkgPj0wOyBpLS0pCisJCW9tYXBfZnJlZV9ncGlvKGNvbF9ncGlvc1tpXSk7CisKKwlrZnJlZShvbWFwX2twKTsKKwlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOworCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgb21hcF9rcF9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3Qgb21hcF9rcCAqb21hcF9rcCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJLyogZGlzYWJsZSBrZXlwYWQgaW50ZXJydXB0IGhhbmRsaW5nICovCisJdGFza2xldF9kaXNhYmxlKCZrcF90YXNrbGV0KTsKKwlpZiAoY3B1X2lzX29tYXAyNHh4KCkpIHsKKwkJaW50IGk7CisJCWZvciAoaSA9IDA7IGkgPCBvbWFwX2twLT5jb2xzOyBpKyspCisJICAgIAkJb21hcF9mcmVlX2dwaW8oY29sX2dwaW9zW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IG9tYXBfa3AtPnJvd3M7IGkrKykgeworCSAgICAJCW9tYXBfZnJlZV9ncGlvKHJvd19ncGlvc1tpXSk7CisJCQlmcmVlX2lycShPTUFQX0dQSU9fSVJRKHJvd19ncGlvc1tpXSksIDApOworCQl9CisJfSBlbHNlIHsKKwkJb21hcF93cml0ZXcoMSwgT01BUF9NUFVJT19CQVNFICsgT01BUF9NUFVJT19LQkRfTUFTS0lUKTsKKwkJZnJlZV9pcnEob21hcF9rcC0+aXJxLCAwKTsKKwl9CisKKwlkZWxfdGltZXJfc3luYygmb21hcF9rcC0+dGltZXIpOworCXRhc2tsZXRfa2lsbCgma3BfdGFza2xldCk7CisKKwkvKiB1bnJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KKwlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShvbWFwX2twLT5pbnB1dCk7CisKKwlrZnJlZShvbWFwX2twKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvbWFwX2twX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gb21hcF9rcF9wcm9iZSwKKwkucmVtb3ZlCQk9IG9tYXBfa3BfcmVtb3ZlLAorCS5zdXNwZW5kCT0gb21hcF9rcF9zdXNwZW5kLAorCS5yZXN1bWUJCT0gb21hcF9rcF9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gIm9tYXAta2V5cGFkIiwKKwl9LAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgb21hcF9rcF9pbml0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fSU5GTyAiT01BUCBLZXlwYWQgRHJpdmVyXG4iKTsKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX2twX2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBvbWFwX2twX2V4aXQodm9pZCkKK3sKKwlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rlcigmb21hcF9rcF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChvbWFwX2twX2luaXQpOworbW9kdWxlX2V4aXQob21hcF9rcF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiVGltbyBUZXLkcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJPTUFQIEtleXBhZCBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaCBiL2RyaXZlcnMvaW5wdXQvc2VyaW8vaTgwNDItaW8uaAppbmRleCBjYzIxOTE0Li4zYjRlMTNiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3NlcmlvL2k4MDQyLWlvLmgKKysrIGIvZHJpdmVycy9pbnB1dC9zZXJpby9pODA0Mi1pby5oCkBAIC02NywyNSArNjcsMjIgQEAKICAqIE9uIHNvbWUgcGxhdGZvcm1zIHRvdWNoaW5nIHRoZSBpODA0MiBkYXRhIHJlZ2lzdGVyIHJlZ2lvbiBjYW4gZG8gcmVhbGx5CiAgKiBiYWQgdGhpbmdzLiBCZWNhdXNlIG9mIHRoaXMgdGhlIHJlZ2lvbiBpcyBhbHdheXMgcmVzZXJ2ZWQgb24gc3VjaCBib3hlcy4KICAqLwotI2lmICFkZWZpbmVkKF9fc2hfXykgJiYgIWRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChfX21pcHNfXykgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19NRVJHRSkKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKEk4MDQyX0RBVEFfUkVHLCAxNiwgImk4MDQyIikpCi0JCXJldHVybiAtRUJVU1k7Ci0jZW5kaWYKLQotICAgICAgICBpODA0Ml9yZXNldCA9IDE7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCiAJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoSTgwNDJfREFUQV9SRUcpKQotCQlyZXR1cm4gLUVCVVNZOworCQlyZXR1cm4gLUVOT0RFVjsKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fc2hfXykgJiYgIWRlZmluZWQoX19hbHBoYV9fKSAmJiAhZGVmaW5lZChfX21pcHNfXykKIAlpZiAoIXJlcXVlc3RfcmVnaW9uKEk4MDQyX0RBVEFfUkVHLCAxNiwgImk4MDQyIikpCiAJCXJldHVybiAtRUJVU1k7CiAjZW5kaWYKKworCWk4MDQyX3Jlc2V0ID0gMTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGk4MDQyX3BsYXRmb3JtX2V4aXQodm9pZCkKIHsKLSNpZiAhZGVmaW5lZChfX3NoX18pICYmICFkZWZpbmVkKF9fYWxwaGFfXykgJiYgIWRlZmluZWQoQ09ORklHX1BQQzY0KQorI2lmICFkZWZpbmVkKF9fc2hfXykgJiYgIWRlZmluZWQoX19hbHBoYV9fKQogCXJlbGVhc2VfcmVnaW9uKEk4MDQyX0RBVEFfUkVHLCAxNik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYyBiL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4vaHA2ODBfdHNfaW5wdXQuYwppbmRleCBmYTk3ZTBmLi5lZTZjMmY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lucHV0L3RvdWNoc2NyZWVuL2hwNjgwX3RzX2lucHV0LmMKKysrIGIvZHJpdmVycy9pbnB1dC90b3VjaHNjcmVlbi9ocDY4MF90c19pbnB1dC5jCkBAIC0xNSw3ICsxNSw2IEBACiAjZGVmaW5lIEhQNjgwX1RTX0FCU19ZX01JTgk4MAogI2RlZmluZSBIUDY4MF9UU19BQlNfWV9NQVgJOTEwCiAKLSNkZWZpbmUJU0NQQ1IJMHhhNDAwMDExNgogI2RlZmluZQlQSERSCTB4YTQwMDAxMmUKICNkZWZpbmUgU0NQRFIJMHhhNDAwMDEzNgogCkBAIC03NywxOSArNzYsNiBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBocDY4MF90c19pbml0KHZvaWQpCiB7Ci0JdTggc2NwZHI7Ci0JdTE2IHNjcGNyOwotCi0Jc2NwZHIgPSBjdHJsX2luYihTQ1BEUik7Ci0Jc2NwZHIgfD0gU0NQRFJfVFNfU0NBTl9YIHwgU0NQRFJfVFNfU0NBTl9ZOwotCXNjcGRyICY9IH5TQ1BEUl9UU19TQ0FOX0VOQUJMRTsKLQljdHJsX291dGIoc2NwZHIsIFNDUERSKTsKLQotCXNjcGNyID0gY3RybF9pbncoU0NQQ1IpOwotCXNjcGNyICY9IH5TQ1BDUl9UU19NQVNLOwotCXNjcGNyIHw9IFNDUENSX1RTX0VOQUJMRTsKLQljdHJsX291dHcoc2NwY3IsIFNDUENSKTsKLQogCWhwNjgwX3RzX2RldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwogCWlmICghaHA2ODBfdHNfZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9jYXBpL2NhcGlmcy5jIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKaW5kZXggOWVhNmJkMC4uMmRkMWI1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKKysrIGIvZHJpdmVycy9pc2RuL2NhcGkvY2FwaWZzLmMKQEAgLTEwNCw3ICsxMDQsNiBAQAogCWlub2RlLT5pX2lubyA9IDE7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IDEwMjQ7CiAJaW5vZGUtPmlfdWlkID0gaW5vZGUtPmlfZ2lkID0gMDsKIAlpbm9kZS0+aV9tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPIHwgU19JV1VTUjsKIAlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xNDksNyArMTQ4LDYgQEAKIAlpZiAoIWlub2RlKQogCQlyZXR1cm47CiAJaW5vZGUtPmlfaW5vID0gbnVtYmVyKzI7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IDEwMjQ7CiAJaW5vZGUtPmlfdWlkID0gY29uZmlnLnNldHVpZCA/IGNvbmZpZy51aWQgOiBjdXJyZW50LT5mc3VpZDsKIAlpbm9kZS0+aV9naWQgPSBjb25maWcuc2V0Z2lkID8gY29uZmlnLmdpZCA6IGN1cnJlbnQtPmZzZ2lkOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMgYi9kcml2ZXJzL2lzZG4vZ2lnYXNldC9iYXMtZ2lnYXNldC5jCmluZGV4IDM4NDVkZWYuLjVjZmJlNmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9naWdhc2V0L2Jhcy1naWdhc2V0LmMKKysrIGIvZHJpdmVycy9pc2RuL2dpZ2FzZXQvYmFzLWdpZ2FzZXQuYwpAQCAtMTkyLDcgKzE5Miw3IEBACiAJCXJldHVybiAiYml0IHN0dWZmaW5nIGVycm9yLCB0aW1lb3V0LCBvciB1bmtub3duIFVTQiBlcnJvciI7CiAJY2FzZSAtRUlMU0VROgogCQlyZXR1cm4gIkNSQyBtaXNtYXRjaCwgdGltZW91dCwgb3IgdW5rbm93biBVU0IgZXJyb3IiOwotCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FVElNRToKIAkJcmV0dXJuICJ0aW1lZCBvdXQiOwogCWNhc2UgLUVQSVBFOgogCQlyZXR1cm4gImVuZHBvaW50IHN0YWxsZWQiOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RzcF9kZWZzLmggYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZHNwX2RlZnMuaAppbmRleCBiNDQ5NTBlLi5mZWMxZTM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZHNwX2RlZnMuaAorKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZHNwX2RlZnMuaApAQCAtMzQsOSArMzQsNiBAQAogICoKICAqIEkvTyBmdW5jdGlvbnMgcmV0dXJucyAtMSBvbiBlcnJvciwgMCBvbiBFT0YKICAqLwotI2RlZmluZSBPU19TRUVLX1NFVCAwCi0jZGVmaW5lIE9TX1NFRUtfQ1VSIDEKLSNkZWZpbmUgT1NfU0VFS19FTkQgMgogc3RydWN0IF9Pc0ZpbGVIYW5kbGVfOwogdHlwZWRlZiBsb25nICggICogT3NGaWxlSW8pICAoc3RydWN0IF9Pc0ZpbGVIYW5kbGVfICAgICpoYW5kbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAqYnVmZmVyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaCBiL2RyaXZlcnMvaXNkbi9oaXNheC9oZmNfdXNiLmgKaW5kZXggZWM1MmMxYS4uNjM0OTM2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2hpc2F4L2hmY191c2IuaAorKysgYi9kcml2ZXJzL2lzZG4vaGlzYXgvaGZjX3VzYi5oCkBAIC0xMzcsMTEgKzEzNywxMSBAQAogCXstRU5YSU8sICJVUkIgYWxyZWFkeSBxdWV1ZWQifSwKIAl7LUVGQklHLCAiVG9vIG11Y2ggSVNPIGZyYW1lcyByZXF1ZXN0ZWQifSwKIAl7LUVOT1NSLCAiQnVmZmVyIGVycm9yIChvdmVycnVuKSJ9LAotCXstRVBJUEUsICJTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSJ9LAorCXstRVBJUEUsICJTcGVjaWZpZWQgZW5kcG9pbnQgaXMgc3RhbGxlZCJ9LAogCXstRU9WRVJGTE9XLCAiQmFiYmxlIChiYWQgY2FibGU/KSJ9LAogCXstRVBST1RPLCAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSJ9LAotCXstRUlMU0VRLCAiQ1JDL1RpbWVvdXQifSwKLQl7LUVUSU1FRE9VVCwgIk5BSyAoZGV2aWNlIGRvZXMgbm90IHJlc3BvbmQpIn0sCisJey1FSUxTRVEsICJDUkMgb3IgbWlzc2luZyB0b2tlbiJ9LAorCXstRVRJTUUsICJEZXZpY2UgZGlkIG5vdCByZXNwb25kIn0sCiAJey1FU0hVVERPV04sICJEZXZpY2UgdW5wbHVnZ2VkIn0sCiAJey0xLCBOVUxMfQogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwppbmRleCA0M2RhOGFlLi4xZjhkNmFlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9pc2RuL2k0bC9pc2RuX25ldC5jCisrKyBiL2RyaXZlcnMvaXNkbi9pNGwvaXNkbl9uZXQuYwpAQCAtMTYxNCw4ICsxNjE0LDggQEAKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gTlVMTDsKLQl1MzIgYWRkciA9IDA7CQkvKiBsb2NhbCBpcHY0IGFkZHJlc3MgKi8KLQl1MzIgbWFzayA9IDA7CQkvKiBsb2NhbCBuZXRtYXNrICovCisJX19iZTMyIGFkZHIgPSAwOwkJLyogbG9jYWwgaXB2NCBhZGRyZXNzICovCisJX19iZTMyIG1hc2sgPSAwOwkJLyogbG9jYWwgbmV0bWFzayAqLwogCiAJaWYgKChpbl9kZXYgPSBscC0+bmV0ZGV2LT5kZXYuaXBfcHRyKSAhPSBOVUxMKSB7CiAJCS8qIHRha2UgcHJpbWFyeShmaXJzdCkgYWRkcmVzcyBvZiBpbnRlcmZhY2UgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYyBiL2RyaXZlcnMvbGVkcy9sZWQtdHJpZ2dlcnMuYwppbmRleCA0N2YwZmYxLi40NTRmYjA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2xlZHMvbGVkLXRyaWdnZXJzLmMKKysrIGIvZHJpdmVycy9sZWRzL2xlZC10cmlnZ2Vycy5jCkBAIC0xMjUsNiArMTI1LDcgQEAKIAkJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJmxlZF9jZGV2LT50cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrLCBmbGFncyk7CiAJCWlmIChsZWRfY2Rldi0+dHJpZ2dlci0+ZGVhY3RpdmF0ZSkKIAkJCWxlZF9jZGV2LT50cmlnZ2VyLT5kZWFjdGl2YXRlKGxlZF9jZGV2KTsKKwkJbGVkX3NldF9icmlnaHRuZXNzKGxlZF9jZGV2LCBMRURfT0ZGKTsKIAl9CiAJaWYgKHRyaWdnZXIpIHsKIAkJd3JpdGVfbG9ja19pcnFzYXZlKCZ0cmlnZ2VyLT5sZWRkZXZfbGlzdF9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvbGVkcy1uZXQ0OHh4LmMgYi9kcml2ZXJzL2xlZHMvbGVkcy1uZXQ0OHh4LmMKaW5kZXggNzEzYzRhOC4uNDViYTNkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9sZWRzL2xlZHMtbmV0NDh4eC5jCisrKyBiL2RyaXZlcnMvbGVkcy9sZWRzLW5ldDQ4eHguYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2xlZHMuaD4KICNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9uc2NfZ3Bpby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjeDIwMF9ncGlvLmg+CiAKICNkZWZpbmUgRFJWTkFNRSAibmV0NDh4eC1sZWQiCkBAIC0yNiwxMCArMjcsNyBAQAogc3RhdGljIHZvaWQgbmV0NDh4eF9lcnJvcl9sZWRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXYgKmxlZF9jZGV2LAogCQllbnVtIGxlZF9icmlnaHRuZXNzIHZhbHVlKQogewotCWlmICh2YWx1ZSkKLQkJc2N4MjAwX2dwaW9fc2V0X2hpZ2goTkVUNDhYWF9FUlJPUl9MRURfR1BJTyk7Ci0JZWxzZQotCQlzY3gyMDBfZ3Bpb19zZXRfbG93KE5FVDQ4WFhfRVJST1JfTEVEX0dQSU8pOworCXNjeDIwMF9ncGlvX29wcy5ncGlvX3NldChORVQ0OFhYX0VSUk9SX0xFRF9HUElPLCB2YWx1ZSA/IDEgOiAwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBsZWRfY2xhc3NkZXYgbmV0NDh4eF9lcnJvcl9sZWQgPSB7CkBAIC04MSw3ICs3OSw4IEBACiB7CiAJaW50IHJldDsKIAotCWlmICghc2N4MjAwX2dwaW9fcHJlc2VudCgpKSB7CisJLyogc21hbGwgaGFjaywgYnV0IHNjeDIwMF9ncGlvIGRvZXNuJ3Qgc2V0IC5kZXYgaWYgdGhlIHByb2JlIGZhaWxzICovCisJaWYgKCFzY3gyMDBfZ3Bpb19vcHMuZGV2KSB7CiAJCXJldCA9IC1FTk9ERVY7CiAJCWdvdG8gb3V0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3NtdS5jIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKaW5kZXggMDkwZTQwZi4uYzBmOWQ4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvc211LmMKQEAgLTg3MCw3ICs4NzAsNyBAQAogCiBzdGF0aWMgaW50IHNtdV9yZWFkX2RhdGFibG9jayh1OCAqZGVzdCwgdW5zaWduZWQgaW50IGFkZHIsIHVuc2lnbmVkIGludCBsZW4pCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGNvbXApOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXApOwogCXVuc2lnbmVkIGludCBjaHVuazsKIAlzdHJ1Y3Qgc211X2NtZCBjbWQ7CiAJaW50IHJjOwpAQCAtOTE3LDcgKzkxNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc211X3NkYnBfaGVhZGVyICpzbXVfY3JlYXRlX3NkYl9wYXJ0aXRpb24oaW50IGlkKQogewotCURFQ0xBUkVfQ09NUExFVElPTihjb21wKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhjb21wKTsKIAlzdHJ1Y3Qgc211X3NpbXBsZV9jbWQgY21kOwogCXVuc2lnbmVkIGludCBhZGRyLCBsZW4sIHRsZW47CiAJc3RydWN0IHNtdV9zZGJwX2hlYWRlciAqaGRyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUtYmFja2xpZ2h0LmMKaW5kZXggYTgyZjMxMy4uNmMyOWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS1iYWNrbGlnaHQuYworKysgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LWJhY2tsaWdodC5jCkBAIC0xNiw3ICsxNiw3IEBACiAjZGVmaW5lIE1BWF9QTVVfTEVWRUwgMHhGRgogCiBzdGF0aWMgc3RydWN0IGJhY2tsaWdodF9wcm9wZXJ0aWVzIHBtdV9iYWNrbGlnaHRfZGF0YTsKLXN0YXRpYyBzcGlubG9ja190IHBtdV9iYWNrbGlnaHRfbG9jazsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0socG11X2JhY2tsaWdodF9sb2NrKTsKIHN0YXRpYyBpbnQgc2xlZXBpbmc7CiBzdGF0aWMgdTggYmxfY3VydmVbRkJfQkFDS0xJR0hUX0xFVkVMU107CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXUuYwppbmRleCBkZGEwMzk4Li44MGI4OTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdS5jCkBAIC0xODI3LDcgKzE4MjcsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZCA9IE5VTEw7CiAKIAlucGNpID0gMDsKLQl3aGlsZSAoKHBkID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkKSkgIT0gTlVMTCkgeworCXdoaWxlICgocGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZCkpICE9IE5VTEwpIHsKIAkJKytucGNpOwogCX0KIAlpZiAobnBjaSA9PSAwKQpAQCAtMTg1Nyw5ICsxODU3LDExIEBACiAJaWYgKHBzID09IE5VTEwpCiAJCXJldHVybjsKIAotCXdoaWxlICgocGQgPSBwY2lfZmluZF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGQpKSAhPSBOVUxMKSB7Ci0JCWlmIChucGNpLS0gPT0gMCkKKwl3aGlsZSAoKHBkID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGQpKSAhPSBOVUxMKSB7CisJCWlmIChucGNpLS0gPT0gMCkgeworCQkJcGNpX2Rldl9wdXQocGQpOwogCQkJcmV0dXJuOworCQl9CiAjaWZuZGVmIEhBQ0tFRF9QQ0lfU0FWRQogCQlwY2lfcmVhZF9jb25maWdfd29yZChwZCwgUENJX0NPTU1BTkQsICZwcy0+Y29tbWFuZCk7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkLCBQQ0lfQ0FDSEVfTElORV9TSVpFLCAmcHMtPmNhY2hlX2xhdCk7CkBAIC0xODg3LDExICsxODg5LDEzIEBACiAJaW50IG5wY2kgPSBwYm9va19ucGNpX3NhdmVzOwogCWludCBqOwogCi0Jd2hpbGUgKChwZCA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZCkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKHBkID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGQpKSAhPSBOVUxMKSB7CiAjaWZkZWYgSEFDS0VEX1BDSV9TQVZFCiAJCWludCBpOwotCQlpZiAobnBjaS0tID09IDApCisJCWlmIChucGNpLS0gPT0gMCkgeworCQkJcGNpX2Rldl9wdXQocGQpOwogCQkJcmV0dXJuOworCQl9CiAJCXBzKys7CiAJCWZvciAoaT0yO2k8MTY7aSsrKQogCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZCwgaTw8NCwgcHMtPmNvbmZpZ1tpXSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11NjhrLmMgYi9kcml2ZXJzL21hY2ludG9zaC92aWEtcG11NjhrLmMKaW5kZXggMzViNzAzMi4uOWY0ZWZmMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvdmlhLXBtdTY4ay5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3ZpYS1wbXU2OGsuYwpAQCAtODQzLDcgKzg0Myw3IEBACiAJc3RydWN0IHBjaV9zYXZlICpwczsKIAogCW5wY2kgPSAwOwotCXdoaWxlICgocGQgPSBwY2lfZmluZF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGQpKSAhPSBOVUxMKQorCXdoaWxlICgocGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZCkpICE9IE5VTEwpCiAJCSsrbnBjaTsKIAluX3Bib29rX3BjaV9zYXZlcyA9IG5wY2k7CiAJaWYgKG5wY2kgPT0gMCkKQEAgLTg1NCw3ICs4NTQsNyBAQAogCQlyZXR1cm47CiAKIAlwZCA9IE5VTEw7Ci0Jd2hpbGUgKChwZCA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZCkpICE9IE5VTEwpIHsKKwl3aGlsZSAoKHBkID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGQpKSAhPSBOVUxMKSB7CiAJCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkLCBQQ0lfQ09NTUFORCwgJnBzLT5jb21tYW5kKTsKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGQsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZwcy0+Y2FjaGVfbGF0KTsKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGQsIFBDSV9JTlRFUlJVUFRfTElORSwgJnBzLT5pbnRyKTsKQEAgLTg3MSw3ICs4NzEsNyBAQAogCXN0cnVjdCBwY2lfZGV2ICpwZCA9IE5VTEw7CiAJaW50IGo7CiAKLQl3aGlsZSAoKHBkID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkKSkgIT0gTlVMTCkgeworCXdoaWxlICgocGQgPSBwY2lfZ2V0X2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZCkpICE9IE5VTEwpIHsKIAkJaWYgKHBzLT5jb21tYW5kID09IDApCiAJCQljb250aW51ZTsKIAkJcGNpX3JlYWRfY29uZmlnX3dvcmQocGQsIFBDSV9DT01NQU5ELCAmY21kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9jb250cm9scy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKaW5kZXggYmZmMWYzNy4uMzFiNzUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X2NvbnRyb2xzLmMKQEAgLTU2LDcgKzU2LDcgQEAKIHsKIAlzdHJ1Y3Qgc211X2NtZCBjbWQ7CiAJdTggYnVmZmVyWzE2XTsKLQlERUNMQVJFX0NPTVBMRVRJT04oY29tcCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcCk7CiAJaW50IHJjOwogCiAJLyogRmlsbCBTTVUgY29tbWFuZCBzdHJ1Y3R1cmUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zYXQuYwppbmRleCBhY2ViNjFkLi44M2Y3OWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2F0LmMKKysrIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NhdC5jCkBAIC0zOTcsMTIgKzM5Nyw3IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNhdF9zZW5zb3JzX2luaXQodm9pZCkKIHsKLQlpbnQgZXJyOwotCi0JZXJyID0gaTJjX2FkZF9kcml2ZXIoJndmX3NhdF9kcml2ZXIpOwotCWlmIChlcnIgPCAwKQotCQlyZXR1cm4gZXJyOwotCXJldHVybiAwOworCXJldHVybiBpMmNfYWRkX2RyaXZlcigmd2Zfc2F0X2RyaXZlcik7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBzYXRfc2Vuc29yc19leGl0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jIGIvZHJpdmVycy9tYWNpbnRvc2gvd2luZGZhcm1fc211X3NlbnNvcnMuYwppbmRleCBkZWZlOTkyLi4wMWI0YzUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21hY2ludG9zaC93aW5kZmFybV9zbXVfc2Vuc29ycy5jCisrKyBiL2RyaXZlcnMvbWFjaW50b3NoL3dpbmRmYXJtX3NtdV9zZW5zb3JzLmMKQEAgLTY3LDcgKzY3LDcgQEAKIHN0YXRpYyBpbnQgc211X3JlYWRfYWRjKHU4IGlkLCBzMzIgKnZhbHVlKQogewogCXN0cnVjdCBzbXVfc2ltcGxlX2NtZAljbWQ7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGNvbXApOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGNvbXApOwogCWludCByYzsKIAogCXJjID0gc211X3F1ZXVlX3NpbXBsZSgmY21kLCBTTVVfQ01EX1JFQURfQURDLCAxLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9LY29uZmlnIGIvZHJpdmVycy9tZC9LY29uZmlnCmluZGV4IGJmODY5ZWQuLjZkZDMxYTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvS2NvbmZpZworKysgYi9kcml2ZXJzL21kL0tjb25maWcKQEAgLTIsNiArMiw4IEBACiAjIEJsb2NrIGRldmljZSBkcml2ZXIgY29uZmlndXJhdGlvbgogIwogCitpZiBCTE9DSworCiBtZW51ICJNdWx0aS1kZXZpY2Ugc3VwcG9ydCAoUkFJRCBhbmQgTFZNKSIKIAogY29uZmlnIE1ECkBAIC0yNTEsMyArMjUzLDQgQEAKIAogZW5kbWVudQogCitlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZC9kbS1lbWMuYyBiL2RyaXZlcnMvbWQvZG0tZW1jLmMKaW5kZXggMmEzNzRjYy4uMmIyZDQ1ZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWQvZG0tZW1jLmMKKysrIGIvZHJpdmVycy9tZC9kbS1lbWMuYwpAQCAtMTI2LDcgKzEyNiw4IEBACiAJbWVtc2V0KCZycS0+Y21kLCAwLCBCTEtfTUFYX0NEQik7CiAKIAlycS0+dGltZW91dCA9IEVNQ19GQUlMT1ZFUl9USU1FT1VUOwotCXJxLT5mbGFncyB8PSAoUkVRX0JMT0NLX1BDIHwgUkVRX0ZBSUxGQVNUIHwgUkVRX05PTUVSR0UpOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOworCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX0ZBSUxGQVNUIHwgUkVRX05PTUVSR0U7CiAKIAlyZXR1cm4gcnE7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9jb21tb24vS2NvbmZpZwppbmRleCAxYTA0ZGI0Li5mMzNlNWQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL0tjb25maWcKQEAgLTQsNyArNCw2IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTQ2X1ZWCiAJdHJpc3RhdGUKLQlzZWxlY3QgVklERU9fVjRMMgogCXNlbGVjdCBWSURFT19CVUYKIAlzZWxlY3QgVklERU9fVklERU9CVUYKIAlzZWxlY3QgVklERU9fU0FBNzE0NgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCmluZGV4IGNhOThkOTQuLmRiNzUzNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKQEAgLTMyLDYgKzMyLDM3IEBACiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2VtcHR5KTsKIAorLyogTWljaGFsIE1hamNocm93aWN6IDxtbWFqY2hyb3dpY3pAZ21haWwuY29tPiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfcHJvdGV1c18yMzA5W0lSX0tFWVRBQl9TSVpFXSA9IHsKKwkvKiBudW1lcmljICovCisJWyAweDAwIF0gPSBLRVlfMCwKKwlbIDB4MDEgXSA9IEtFWV8xLAorCVsgMHgwMiBdID0gS0VZXzIsCisJWyAweDAzIF0gPSBLRVlfMywKKwlbIDB4MDQgXSA9IEtFWV80LAorCVsgMHgwNSBdID0gS0VZXzUsCisJWyAweDA2IF0gPSBLRVlfNiwKKwlbIDB4MDcgXSA9IEtFWV83LAorCVsgMHgwOCBdID0gS0VZXzgsCisJWyAweDA5IF0gPSBLRVlfOSwKKworCVsgMHg1YyBdID0gS0VZX1BPV0VSLCAgICAgLyogcG93ZXIgICAgICAgKi8KKwlbIDB4MjAgXSA9IEtFWV9GLCAgICAgICAgIC8qIGZ1bGwgc2NyZWVuICovCisJWyAweDBmIF0gPSBLRVlfQkFDS1NQQUNFLCAvKiByZWNhbGwgICAgICAqLworCVsgMHgxYiBdID0gS0VZX0VOVEVSLCAgICAgLyogbXV0ZSAgICAgICAgKi8KKwlbIDB4NDEgXSA9IEtFWV9SRUNPUkQsICAgIC8qIHJlY29yZCAgICAgICovCisJWyAweDQzIF0gPSBLRVlfU1RPUCwgICAgICAvKiBzdG9wICAgICAgICAqLworCVsgMHgxNiBdID0gS0VZX1MsCisJWyAweDFhIF0gPSBLRVlfUSwgICAgICAgICAvKiBvZmYgICAgICAgICAqLworCVsgMHgyZSBdID0gS0VZX1JFRCwKKwlbIDB4MWYgXSA9IEtFWV9ET1dOLCAgICAgIC8qIGNoYW5uZWwgLSAgICovCisJWyAweDFjIF0gPSBLRVlfVVAsICAgICAgICAvKiBjaGFubmVsICsgICAqLworCVsgMHgxMCBdID0gS0VZX0xFRlQsICAgICAgLyogdm9sdW1lIC0gICAgKi8KKwlbIDB4MWUgXSA9IEtFWV9SSUdIVCwgICAgIC8qIHZvbHVtZSArICAgICovCisJWyAweDE0IF0gPSBLRVlfRjEsCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19wcm90ZXVzXzIzMDkpOwogLyogTWF0dCBKZXNzb24gPGR2YkBqZXNzb24uZWNsaXBzZS5jby51ayAqLwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2R2YnRbSVJfS0VZVEFCX1NJWkVdID0gewogCVsgMHgyOCBdID0gS0VZXzAsICAgICAgICAgLy8nMCcgLyAnZW50ZXInCkBAIC0xNDczLDMgKzE1MDQsNTEgQEAKIH07CiAKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX25wZ3RlY2gpOworCisvKiBOb3J3b29kIE1pY3JvIChub24tUHJvKSBUViBUdW5lcgorICAgQnkgUGV0ZXIgTmF1bGxzIDxwZXRlckBjaG9ja3kub3JnPgorICAgS2V5IGNvbW1lbnRzIGFyZSB0aGUgZnVuY3Rpb25zIGdpdmVuIGluIHRoZSBtYW51YWwgKi8KK0lSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX25vcndvb2RbSVJfS0VZVEFCX1NJWkVdID0geworCS8qIEtleXMgMCB0byA5ICovCisJWyAweDIwIF0gPSBLRVlfMCwKKwlbIDB4MjEgXSA9IEtFWV8xLAorCVsgMHgyMiBdID0gS0VZXzIsCisJWyAweDIzIF0gPSBLRVlfMywKKwlbIDB4MjQgXSA9IEtFWV80LAorCVsgMHgyNSBdID0gS0VZXzUsCisJWyAweDI2IF0gPSBLRVlfNiwKKwlbIDB4MjcgXSA9IEtFWV83LAorCVsgMHgyOCBdID0gS0VZXzgsCisJWyAweDI5IF0gPSBLRVlfOSwKKworCVsgMHg3OCBdID0gS0VZX1RVTkVSLCAgICAgICAgICAgICAvKiBWaWRlbyBTb3VyY2UgICAgICAgICovCisJWyAweDJjIF0gPSBLRVlfRVhJVCwgICAgICAgICAgICAgIC8qIE9wZW4vQ2xvc2Ugc29mdHdhcmUgKi8KKwlbIDB4MmEgXSA9IEtFWV9TRUxFQ1QsICAgICAgICAgICAgLyogMiBEaWdpdCBTZWxlY3QgICAgICAqLworCVsgMHg2OSBdID0gS0VZX0FHQUlOLCAgICAgICAgICAgICAvKiBSZWNhbGwgICAgICAgICAgICAgICovCisKKwlbIDB4MzIgXSA9IEtFWV9CUklHSFRORVNTVVAsICAgICAgLyogQnJpZ2h0bmVzcyBpbmNyZWFzZSAqLworCVsgMHgzMyBdID0gS0VZX0JSSUdIVE5FU1NET1dOLCAgICAvKiBCcmlnaHRuZXNzIGRlY3JlYXNlICovCisJWyAweDZiIF0gPSBLRVlfS1BQTFVTLCAgICAgICAgICAgIC8qIChub3QgbmFtZWQgPj4+Pj4pICAgKi8KKwlbIDB4NmMgXSA9IEtFWV9LUE1JTlVTLCAgICAgICAgICAgLyogKG5vdCBuYW1lZCA8PDw8PCkgICAqLworCisJWyAweDJkIF0gPSBLRVlfTVVURSwgICAgICAgICAgICAgIC8qIE11dGUgICAgICAgICAgICAgICAgKi8KKwlbIDB4MzAgXSA9IEtFWV9WT0xVTUVVUCwgICAgICAgICAgLyogVm9sdW1lIHVwICAgICAgICAgICAqLworCVsgMHgzMSBdID0gS0VZX1ZPTFVNRURPV04sICAgICAgICAvKiBWb2x1bWUgZG93biAgICAgICAgICovCisJWyAweDYwIF0gPSBLRVlfQ0hBTk5FTFVQLCAgICAgICAgIC8qIENoYW5uZWwgdXAgICAgICAgICAgKi8KKwlbIDB4NjEgXSA9IEtFWV9DSEFOTkVMRE9XTiwgICAgICAgLyogQ2hhbm5lbCBkb3duICAgICAgICAqLworCisJWyAweDNmIF0gPSBLRVlfUkVDT1JELCAgICAgICAgICAgIC8qIFJlY29yZCAgICAgICAgICAgICAgKi8KKwlbIDB4MzcgXSA9IEtFWV9QTEFZLCAgICAgICAgICAgICAgLyogUGxheSAgICAgICAgICAgICAgICAqLworCVsgMHgzNiBdID0gS0VZX1BBVVNFLCAgICAgICAgICAgICAvKiBQYXVzZSAgICAgICAgICAgICAgICovCisJWyAweDJiIF0gPSBLRVlfU1RPUCwgICAgICAgICAgICAgIC8qIFN0b3AgICAgICAgICAgICAgICAgKi8KKwlbIDB4NjcgXSA9IEtFWV9GQVNURk9SV0FSRCwgICAgICAgLyogRm93YXJkICAgICAgICAgICAgICAqLworCVsgMHg2NiBdID0gS0VZX1JFV0lORCwgICAgICAgICAgICAvKiBSZXdpbmQgICAgICAgICAgICAgICovCisJWyAweDNlIF0gPSBLRVlfU0VBUkNILCAgICAgICAgICAgIC8qIEF1dG8gU2NhbiAgICAgICAgICAgKi8KKwlbIDB4MmUgXSA9IEtFWV9DQU1FUkEsICAgICAgICAgICAgLyogQ2FwdHVyZSBWaWRlbyAgICAgICAqLworCVsgMHg2ZCBdID0gS0VZX01FTlUsICAgICAgICAgICAgICAvKiBTaG93L0hpZGUgQ29udHJvbCAgICovCisJWyAweDJmIF0gPSBLRVlfWk9PTSwgICAgICAgICAgICAgIC8qIEZ1bGwgU2NyZWVuICAgICAgICAgKi8KKwlbIDB4MzQgXSA9IEtFWV9SQURJTywgICAgICAgICAgICAgLyogRk0gICAgICAgICAgICAgICAgICAqLworCVsgMHg2NSBdID0gS0VZX1BPV0VSLCAgICAgICAgICAgICAvKiBDb21wdXRlciBwb3dlciAgICAgICovCit9OworCitFWFBPUlRfU1lNQk9MX0dQTChpcl9jb2Rlc19ub3J3b29kKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggMDAyN2FjYy4uZDg2N2E2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTQ1NSw3ICs0NTUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBkZXZpY2VfdGVtcGxhdGUgPQogewotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9TQUE3MTQ2LAogCS5mb3BzCQk9ICZ2aWRlb19mb3BzLAogCS5taW5vcgkJPSAtMSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKaW5kZXggNDlhMDZmYy4uYTBkY2Q1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZwpAQCAtMiwxMyArMiwxMyBAQAogCXRyaXN0YXRlICJUZWNobmlzYXQvQjJDMiBGbGV4Q29wSUkoYikgYW5kIEZsZXhDb3BJSUkgYWRhcHRlcnMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAlzZWxlY3QgRFZCX1BMTAotCXNlbGVjdCBEVkJfU1RWMDI5OQotCXNlbGVjdCBEVkJfTVQzNTIKLQlzZWxlY3QgRFZCX01UMzEyCi0Jc2VsZWN0IERWQl9OWFQyMDBYCi0Jc2VsZWN0IERWQl9TVFYwMjk3Ci0Jc2VsZWN0IERWQl9CQ00zNTEwCi0Jc2VsZWN0IERWQl9MR0RUMzMwWAorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzEyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9OWFQyMDBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFYwMjk3IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9CQ00zNTEwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBkaWdpdGFsIFRWIHJlY2VpdmVyIGNoaXAgbWFkZSBieSBCMkMyIEluYy4gaW5jbHVkZWQgaW4KIAkgIFRlY2huaXNhdHMgUENJIGNhcmRzIGFuZCBVU0IgYm94ZXMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCmluZGV4IDNiZTg3YzcuLmI4YmE4NzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCkBAIC01MDUsNyArNTA1LDcgQEAKIAlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyAqb3BzOwogCiAJLyogdHJ5IHRoZSBza3kgdjIuNiAoc3R2MDI5OS9TYW1zdW5nIHRibXUyNDExMihzbDE5MzUpKSAqLwotCWlmICgoZmMtPmZlID0gc3R2MDI5OV9hdHRhY2goJnNhbXN1bmdfdGJtdTI0MTEyX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGZjLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZzYW1zdW5nX3RibXUyNDExMl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CiAJCW9wcyA9ICZmYy0+ZmUtPm9wczsKIAogCQlvcHMtPnR1bmVyX29wcy5zZXRfcGFyYW1zID0gc2Ftc3VuZ190Ym11MjQxMTJfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTUxOSwzNiArNTE5LDM2IEBACiAJCWluZm8oImZvdW5kIHRoZSBzdHYwMjk5IGF0IGkyYyBhZGRyZXNzOiAweCUwMngiLHNhbXN1bmdfdGJtdTI0MTEyX2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIGFpciBkdmItdCAobXQzNTIvU2Ftc3VuZyB0ZHRjOTI1MWRoMCg/PykpICovCi0JaWYgKChmYy0+ZmUgPSBtdDM1Ml9hdHRhY2goJnNhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCAmZmMtPmkyY19hZGFwKSkgIT0gTlVMTCApIHsKKwlpZiAoKGZjLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmc2Ftc3VuZ190ZHRjOTI1MWRoMF9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMICkgewogCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgPSBGQ19BSVJfRFZCOwogCQlmYy0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gc2Ftc3VuZ190ZHRjOTI1MWRoMF9jYWxjX3JlZ3M7CiAJCWluZm8oImZvdW5kIHRoZSBtdDM1MiBhdCBpMmMgYWRkcmVzczogMHglMDJ4IixzYW1zdW5nX3RkdGM5MjUxZGgwX2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIGFpciBhdHNjIDJuZCBnZW5lcmF0aW9uIChueHQyMDAyKSAqLwotCWlmICgoZmMtPmZlID0gbnh0MjAweF9hdHRhY2goJnNhbXN1bmdfdGJtdl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJaWYgKChmYy0+ZmUgPSBkdmJfYXR0YWNoKG54dDIwMHhfYXR0YWNoLCAmc2Ftc3VuZ190Ym12X2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJZmMtPmRldl90eXBlICAgICAgICAgID0gRkNfQUlSX0FUU0MyOwotCQlkdmJfcGxsX2F0dGFjaChmYy0+ZmUsIDB4NjEsICZmYy0+aTJjX2FkYXAsICZkdmJfcGxsX3NhbXN1bmdfdGJtdik7CisJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGZjLT5mZSwgMHg2MSwgTlVMTCwgJmR2Yl9wbGxfc2Ftc3VuZ190Ym12KTsKIAkJaW5mbygiZm91bmQgdGhlIG54dDIwMDIgYXQgaTJjIGFkZHJlc3M6IDB4JTAyeCIsc2Ftc3VuZ190Ym12X2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIGFpciBhdHNjIDNuZCBnZW5lcmF0aW9uIChsZ2R0MzMwMykgKi8KLQlpZiAoKGZjLT5mZSA9IGxnZHQzMzB4X2F0dGFjaCgmYWlyMnBjX2F0c2NfaGQ1MDAwX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGZjLT5mZSA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLCAmYWlyMnBjX2F0c2NfaGQ1MDAwX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJZmMtPmRldl90eXBlICAgICAgICAgID0gRkNfQUlSX0FUU0MzOwogCQlmYy0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAzX3R1bmVyX3NldF9wYXJhbXM7CiAJCWluZm8oImZvdW5kIHRoZSBsZ2R0MzMwMyBhdCBpMmMgYWRkcmVzczogMHglMDJ4IixhaXIycGNfYXRzY19oZDUwMDBfY29uZmlnLmRlbW9kX2FkZHJlc3MpOwogCX0gZWxzZQogCS8qIHRyeSB0aGUgYWlyIGF0c2MgMW5kIGdlbmVyYXRpb24gKGJjbTM1MTApL3BhbmFzb25pYyBjdDEwcyAqLwotCWlmICgoZmMtPmZlID0gYmNtMzUxMF9hdHRhY2goJmFpcjJwY19hdHNjX2ZpcnN0X2dlbl9jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJaWYgKChmYy0+ZmUgPSBkdmJfYXR0YWNoKGJjbTM1MTBfYXR0YWNoLCAmYWlyMnBjX2F0c2NfZmlyc3RfZ2VuX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJZmMtPmRldl90eXBlICAgICAgICAgID0gRkNfQUlSX0FUU0MxOwogCQlpbmZvKCJmb3VuZCB0aGUgYmNtMzUxMCBhdCBpMmMgYWRkcmVzczogMHglMDJ4IixhaXIycGNfYXRzY19maXJzdF9nZW5fY29uZmlnLmRlbW9kX2FkZHJlc3MpOwogCX0gZWxzZQogCS8qIHRyeSB0aGUgY2FibGUgZHZiIChzdHYwMjk3KSAqLwotCWlmICgoZmMtPmZlID0gc3R2MDI5N19hdHRhY2goJmFscHNfdGRlZTRfc3R2MDI5N19jb25maWcsICZmYy0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CisJaWYgKChmYy0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTdfYXR0YWNoLCAmYWxwc190ZGVlNF9zdHYwMjk3X2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJZmMtPmRldl90eXBlICAgICAgICAgICAgICAgICAgICAgICAgPSBGQ19DQUJMRTsKIAkJZmMtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX3RkZWU0X3N0djAyOTdfdHVuZXJfc2V0X3BhcmFtczsKIAkJaW5mbygiZm91bmQgdGhlIHN0djAyOTcgYXQgaTJjIGFkZHJlc3M6IDB4JTAyeCIsYWxwc190ZGVlNF9zdHYwMjk3X2NvbmZpZy5kZW1vZF9hZGRyZXNzKTsKIAl9IGVsc2UKIAkvKiB0cnkgdGhlIHNreSB2Mi4zICh2cDMxMC9TYW1zdW5nIHRiZHUxODEzMih0c2E1MDU5KSkgKi8KLQlpZiAoKGZjLT5mZSA9IHZwMzEwX210MzEyX2F0dGFjaCgmc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGZjLT5mZSA9IGR2Yl9hdHRhY2godnAzMTBfbXQzMTJfYXR0YWNoLCAmc2t5c3RhcjIzX3NhbXN1bmdfdGJkdTE4MTMyX2NvbmZpZywgJmZjLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKIAkJb3BzID0gJmZjLT5mZS0+b3BzOwogCiAJCW9wcy0+dHVuZXJfb3BzLnNldF9wYXJhbXMgPSBza3lzdGFyMjNfc2Ftc3VuZ190YmR1MTgxMzJfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTU3MSw5ICs1NzEsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmZjLT5kdmJfYWRhcHRlciwgZmMtPmZlKSkgewogCQkJZXJyKCJmcm9udGVuZCByZWdpc3RyYXRpb24gZmFpbGVkISIpOwotCQkJb3BzID0gJmZjLT5mZS0+b3BzOwotCQkJaWYgKG9wcy0+cmVsZWFzZSAhPSBOVUxMKQotCQkJCW9wcy0+cmVsZWFzZShmYy0+ZmUpOworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChmYy0+ZmUpOwogCQkJZmMtPmZlID0gTlVMTDsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CkBAIC01ODQsOCArNTgyLDEwIEBACiAKIHZvaWQgZmxleGNvcF9mcm9udGVuZF9leGl0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7Ci0JaWYgKGZjLT5pbml0X3N0YXRlICYgRkNfU1RBVEVfRkVfSU5JVCkKKwlpZiAoZmMtPmluaXRfc3RhdGUgJiBGQ19TVEFURV9GRV9JTklUKSB7CiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGZjLT5mZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZmMtPmZlKTsKKwl9CiAKIAlmYy0+aW5pdF9zdGF0ZSAmPSB+RkNfU1RBVEVfRkVfSU5JVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCmluZGV4IDdkMGVlMWEuLmFlMmZmNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwpAQCAtMiwxMyArMiwxMyBAQAogCXRyaXN0YXRlICJCVDh4eCBiYXNlZCBQQ0kgY2FyZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBQQ0kgJiYgSTJDICYmIFZJREVPX0JUODQ4CiAJc2VsZWN0IERWQl9QTEwKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9TUDg4N1gKLQlzZWxlY3QgRFZCX05YVDYwMDAKLQlzZWxlY3QgRFZCX0NYMjQxMTAKLQlzZWxlY3QgRFZCX09SNTEyMTEKLQlzZWxlY3QgRFZCX0xHRFQzMzBYCi0Jc2VsZWN0IERWQl9aTDEwMzUzCisJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1A4ODdYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9OWFQ2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9DWDI0MTEwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9PUjUxMjExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBQQ0kgY2FyZHMgYmFzZWQgb24gdGhlIEJ0OHh4IFBDSSBicmlkZ2UuIEV4YW1wbGVzIGFyZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwppbmRleCAwNmFjODk5Li45ZjcyYjcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3QuYwpAQCAtMTcxNSw2ICsxNzE1LDE1IEBACiBzdGF0aWMgdm9pZCBkc3RfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWlmIChzdGF0ZS0+ZHN0X2NhKSB7CisJCWR2Yl91bnJlZ2lzdGVyX2RldmljZShzdGF0ZS0+ZHN0X2NhKTsKKyNpZmRlZiBDT05GSUdfRFZCX0NPUkVfQVRUQUNICisJCXN5bWJvbF9wdXQoZHN0X2NhX2F0dGFjaCk7CisjZW5kaWYKKwl9CisjaWZkZWYgQ09ORklHX0RWQl9DT1JFX0FUVEFDSAorCXN5bWJvbF9wdXQoZHN0X2F0dGFjaCk7CisjZW5kaWYKIAlrZnJlZShzdGF0ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKaW5kZXggZmE5MjNiOS4uMjQwYWQwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NhLmMKQEAgLTY5OSwxMiArNjk5LDE3IEBACiAJLmZvcHMgPSAmZHN0X2NhX2ZvcHMKIH07CiAKLWludCBkc3RfY2FfYXR0YWNoKHN0cnVjdCBkc3Rfc3RhdGUgKmRzdCwgc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcikKK3N0cnVjdCBkdmJfZGV2aWNlICpkc3RfY2FfYXR0YWNoKHN0cnVjdCBkc3Rfc3RhdGUgKmRzdCwgc3RydWN0IGR2Yl9hZGFwdGVyICpkdmJfYWRhcHRlcikKIHsKIAlzdHJ1Y3QgZHZiX2RldmljZSAqZHZiZGV2OworCiAJZHByaW50ayh2ZXJib3NlLCBEU1RfQ0FfRVJST1IsIDEsICJyZWdpc3RlcmluZyBEU1QtQ0EgZGV2aWNlIik7Ci0JZHZiX3JlZ2lzdGVyX2RldmljZShkdmJfYWRhcHRlciwgJmR2YmRldiwgJmR2YmRldl9jYSwgZHN0LCBEVkJfREVWSUNFX0NBKTsKLQlyZXR1cm4gMDsKKwlpZiAoZHZiX3JlZ2lzdGVyX2RldmljZShkdmJfYWRhcHRlciwgJmR2YmRldiwgJmR2YmRldl9jYSwgZHN0LCBEVkJfREVWSUNFX0NBKSA9PSAwKSB7CisJCWRzdC0+ZHN0X2NhID0gZHZiZGV2OworCQlyZXR1cm4gZHN0LT5kc3RfY2E7CisJfQorCisJcmV0dXJuIE5VTEw7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHN0X2NhX2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY29tbW9uLmgKaW5kZXggMDY3N2IwNC4uM2JmMDg0ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHN0X2NvbW1vbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jb21tb24uaApAQCAtMTQwLDYgKzE0MCw3IEBACiAJY2hhciAqdHVuZXJfbmFtZTsKIAlzdHJ1Y3QgbXV0ZXggZHN0X211dGV4OwogCXU4IGZ3X25hbWVbOF07CisJc3RydWN0IGR2Yl9kZXZpY2UgKmRzdF9jYTsKIH07CiAKIHN0cnVjdCB0dW5lcl90eXBlcyB7CkBAIC0xNzgsNyArMTc5LDcgQEAKIGludCByZWFkX2RzdChzdHJ1Y3QgZHN0X3N0YXRlICpzdGF0ZSwgdTggKiByZXQsIHU4IGxlbik7CiB1OCBkc3RfY2hlY2tfc3VtKHU4ICogYnVmLCB1MzIgbGVuKTsKIHN0cnVjdCBkc3Rfc3RhdGUqIGRzdF9hdHRhY2goc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUsIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpOwotaW50IGRzdF9jYV9hdHRhY2goc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpOworc3RydWN0IGR2Yl9kZXZpY2UgKmRzdF9jYV9hdHRhY2goc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkdmJfYWRhcHRlciAqZHZiX2FkYXB0ZXIpOwogaW50IGRzdF9ncGlvX291dGIoc3RydWN0IGRzdF9zdGF0ZSogc3RhdGUsIHUzMiBtYXNrLCB1MzIgZW5iYiwgdTMyIG91dGhpZ2gsIGludCBkZWxheSk7CiAKIGludCBkc3RfY29tbWFuZChzdHJ1Y3QgZHN0X3N0YXRlKiBzdGF0ZSwgdTggKiBkYXRhLCB1OCBsZW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvZHZiLWJ0OHh4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwppbmRleCBiNzE1Yjk3Li5mYjZjNGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYwpAQCAtNjcsNyArNjcsNyBAQAogCiBzdGF0aWMgaW50IGR2Yl9idDh4eF9zdGFydF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKIHsKLQlzdHJ1Y3QgZHZiX2RlbXV4ICpkdmJkbXggPSBkdmJkbXhmZWVkLT5kZW11eDsKKwlzdHJ1Y3QgZHZiX2RlbXV4KmR2YmRteCA9IGR2YmRteGZlZWQtPmRlbXV4OwogCXN0cnVjdCBkdmJfYnQ4eHhfY2FyZCAqY2FyZCA9IGR2YmRteC0+cHJpdjsKIAlpbnQgcmM7CiAKQEAgLTU5NSwxNSArNTk1LDE0IEBACiAKIHN0YXRpYyB2b2lkIGZyb250ZW5kX2luaXQoc3RydWN0IGR2Yl9idDh4eF9jYXJkICpjYXJkLCB1MzIgdHlwZSkKIHsKLQlpbnQgcmV0OwogCXN0cnVjdCBkc3Rfc3RhdGUqIHN0YXRlID0gTlVMTDsKIAogCXN3aXRjaCh0eXBlKSB7CiAJY2FzZSBCVFRWX0JPQVJEX0RWSUNPX0RWQlRfTElURToKLQkJY2FyZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJnRob21zb25fZHR0NzU3OV9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKKwkJY2FyZC0+ZmUgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnRob21zb25fZHR0NzU3OV9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKIAogCQlpZiAoY2FyZC0+ZmUgPT0gTlVMTCkKLQkJCWNhcmQtPmZlID0gemwxMDM1M19hdHRhY2goJnRob21zb25fZHR0NzU3OV96bDEwMzUzX2NvbmZpZywKKwkJCWNhcmQtPmZlID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwgJnRob21zb25fZHR0NzU3OV96bDEwMzUzX2NvbmZpZywKIAkJCQkJCSAgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CkBAIC02MTUsNyArNjE0LDcgQEAKIAogCWNhc2UgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfTElURToKIAkJbGdkdDMzMHhfcmVzZXQoY2FyZCk7Ci0JCWNhcmQtPmZlID0gbGdkdDMzMHhfYXR0YWNoKCZ0ZHZzX3R1YTYwMzRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CisJCWNhcmQtPmZlID0gZHZiX2F0dGFjaChsZ2R0MzMweF9hdHRhY2gsICZ0ZHZzX3R1YTYwMzRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CiAJCQljYXJkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gdGR2c190dWE2MDM0X3R1bmVyX3NldF9wYXJhbXM7CiAJCQlkcHJpbnRrICgiZHZiX2J0OHh4OiBsZ2R0MzMweCBkZXRlY3RlZFxuIik7CkBAIC02MzAsNyArNjI5LDcgQEAKIAogCQkvKiBPbGQgTmVidWxhIChtYXJrZWQgKGMpMjAwMyBvbiBoaWdoIHByb2ZpbGUgcGNpIGNhcmQpIGhhcyBueHQ2MDAwIGRlbW9kICovCiAJCWRpZ2l0dl9hbHBzX3RkZWQ0X3Jlc2V0KGNhcmQpOwotCQljYXJkLT5mZSA9IG54dDYwMDBfYXR0YWNoKCZ2cDMwMjFfYWxwc190ZGVkNF9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKKwkJY2FyZC0+ZmUgPSBkdmJfYXR0YWNoKG54dDYwMDBfYXR0YWNoLCAmdnAzMDIxX2FscHNfdGRlZDRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSAhPSBOVUxMKSB7CiAJCQljYXJkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gdnAzMDIxX2FscHNfdGRlZDRfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWRwcmludGsgKCJkdmJfYnQ4eHg6IGFuIG54dDYwMDAgd2FzIGRldGVjdGVkIG9uIHlvdXIgZGlnaXR2IGNhcmRcbiIpOwpAQCAtNjM5LDcgKzYzOCw3IEBACiAKIAkJLyogTmV3IE5lYnVsYSAobWFya2VkIChjKTIwMDUgb24gbG93IHByb2ZpbGUgcGNpIGNhcmQpIGhhcyBtdDM1MiBkZW1vZCAqLwogCQlkaWdpdHZfYWxwc190ZGVkNF9yZXNldChjYXJkKTsKLQkJY2FyZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJmRpZ2l0dl9hbHBzX3RkZWQ0X2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOworCQljYXJkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmZGlnaXR2X2FscHNfdGRlZDRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAKIAkJaWYgKGNhcmQtPmZlICE9IE5VTEwpIHsKIAkJCWNhcmQtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGRpZ2l0dl9hbHBzX3RkZWQ0X3R1bmVyX2NhbGNfcmVnczsKQEAgLTY0OCwxNCArNjQ3LDE0IEBACiAJCWJyZWFrOwogCiAJY2FzZSBCVFRWX0JPQVJEX0FWRFZCVF83NjE6Ci0JCWNhcmQtPmZlID0gc3A4ODd4X2F0dGFjaCgmbWljcm90dW5lX210NzIwMmR0Zl9jb25maWcsIGNhcmQtPmkyY19hZGFwdGVyKTsKKwkJY2FyZC0+ZmUgPSBkdmJfYXR0YWNoKHNwODg3eF9hdHRhY2gsICZtaWNyb3R1bmVfbXQ3MjAyZHRmX2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUpIHsKIAkJCWNhcmQtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBtaWNyb3R1bmVfbXQ3MjAyZHRmX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAKIAljYXNlIEJUVFZfQk9BUkRfQVZEVkJUXzc3MToKLQkJY2FyZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJmFkdmJ0NzcxX3NhbXN1bmdfdGR0YzkyNTFkaDBfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CisJCWNhcmQtPmZlID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZhZHZidDc3MV9zYW1zdW5nX3RkdGM5MjUxZGgwX2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlpZiAoY2FyZC0+ZmUgIT0gTlVMTCkgewogCQkJY2FyZC0+ZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzID0gYWR2YnQ3NzFfc2Ftc3VuZ190ZHRjOTI1MWRoMF90dW5lcl9jYWxjX3JlZ3M7CiAJCQljYXJkLT5mZS0+b3BzLmluZm8uZnJlcXVlbmN5X21pbiA9IDE3NDAwMDAwMDsKQEAgLTY3MCwyMiArNjY5LDIxIEBACiAJCXN0YXRlLT5jb25maWcgPSAmZHN0X2NvbmZpZzsKIAkJc3RhdGUtPmkyYyA9IGNhcmQtPmkyY19hZGFwdGVyOwogCQlzdGF0ZS0+YnQgPSBjYXJkLT5idDsKLQorCQlzdGF0ZS0+ZHN0X2NhID0gTlVMTDsKIAkJLyoJRFNUIGlzIG5vdCBhIGZyb250ZW5kLCBhdHRhY2hpbmcgdGhlIEFTSUMJKi8KLQkJaWYgKChkc3RfYXR0YWNoKHN0YXRlLCAmY2FyZC0+ZHZiX2FkYXB0ZXIpKSA9PSBOVUxMKSB7CisJCWlmIChkdmJfYXR0YWNoKGRzdF9hdHRhY2gsIHN0YXRlLCAmY2FyZC0+ZHZiX2FkYXB0ZXIpID09IE5VTEwpIHsKIAkJCXByaW50aygiJXM6IENvdWxkIG5vdCBmaW5kIGEgVHdpbmhhbiBEU1QuXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJYnJlYWs7CiAJCX0KLQkJY2FyZC0+ZmUgPSAmc3RhdGUtPmZyb250ZW5kOwotCiAJCS8qCUF0dGFjaCBvdGhlciBEU1QgcGVyaXBoZXJhbHMgaWYgYW55CQkqLwogCQkvKglDb25kaXRpb25hbCBBY2Nlc3MgZGV2aWNlCQkJKi8KKwkJY2FyZC0+ZmUgPSAmc3RhdGUtPmZyb250ZW5kOwogCQlpZiAoc3RhdGUtPmRzdF9od19jYXAgJiBEU1RfVFlQRV9IQVNfQ0EpCi0JCQlyZXQgPSBkc3RfY2FfYXR0YWNoKHN0YXRlLCAmY2FyZC0+ZHZiX2FkYXB0ZXIpOworCQkJZHZiX2F0dGFjaChkc3RfY2FfYXR0YWNoLCBzdGF0ZSwgJmNhcmQtPmR2Yl9hZGFwdGVyKTsKIAkJYnJlYWs7CiAKIAljYXNlIEJUVFZfQk9BUkRfUElOTkFDTEVTQVQ6Ci0JCWNhcmQtPmZlID0gY3gyNDExMF9hdHRhY2goJnBjdHZzYXRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CisJCWNhcmQtPmZlID0gZHZiX2F0dGFjaChjeDI0MTEwX2F0dGFjaCwgJnBjdHZzYXRfY29uZmlnLCBjYXJkLT5pMmNfYWRhcHRlcik7CiAJCWlmIChjYXJkLT5mZSkgewogCQkJY2FyZC0+ZmUtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBpbm5zYXRfdHVuZXJfaW5pdDsKIAkJCWNhcmQtPmZlLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGlubnNhdF90dW5lcl9zbGVlcDsKQEAgLTY5NCw3ICs2OTIsNyBAQAogCQlicmVhazsKIAogCWNhc2UgQlRUVl9CT0FSRF9QQ19IRFRWOgotCQljYXJkLT5mZSA9IG9yNTEyMTFfYXR0YWNoKCZvcjUxMjExX2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOworCQljYXJkLT5mZSA9IGR2Yl9hdHRhY2gob3I1MTIxMV9hdHRhY2gsICZvcjUxMjExX2NvbmZpZywgY2FyZC0+aTJjX2FkYXB0ZXIpOwogCQlicmVhazsKIAl9CiAKQEAgLTcwNyw4ICs3MDUsNyBAQAogCWVsc2UKIAkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmY2FyZC0+ZHZiX2FkYXB0ZXIsIGNhcmQtPmZlKSkgewogCQkJcHJpbnRrKCJkdmItYnQ4eHg6IEZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhXG4iKTsKLQkJCWlmIChjYXJkLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQkJY2FyZC0+ZmUtPm9wcy5yZWxlYXNlKGNhcmQtPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goY2FyZC0+ZmUpOwogCQkJY2FyZC0+ZmUgPSBOVUxMOwogCQl9CiB9CkBAIC05MjUsOCArOTIyLDEwIEBACiAJY2FyZC0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmY2FyZC0+ZGVtdXguZG14LCAmY2FyZC0+ZmVfaHcpOwogCWR2Yl9kbXhkZXZfcmVsZWFzZSgmY2FyZC0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoJmNhcmQtPmRlbXV4KTsKLQlpZiAoY2FyZC0+ZmUpCisJaWYgKGNhcmQtPmZlKSB7CiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGNhcmQtPmZlKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChjYXJkLT5mZSk7CisJfQogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJmNhcmQtPmR2Yl9hZGFwdGVyKTsKIAogCWtmcmVlKGNhcmQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL0tjb25maWcKaW5kZXggMTJlZTkxMi4uZTQ2ZWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9LY29uZmlnCkBAIC05LDMgKzksMTYgQEAKIAkgIGluLWtlcm5lbCBkcml2ZXJzIHdpbGwgc2VsZWN0IHRoaXMgYXV0b21hdGljYWxseSBpZiBuZWVkZWQuCiAJICBJZiB1bnN1cmUgc2F5IE4uCiAKK2NvbmZpZyBEVkJfQ09SRV9BVFRBQ0gKKwlib29sICJMb2FkIGFuZCBhdHRhY2ggZnJvbnRlbmQgbW9kdWxlcyBhcyBuZWVkZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRQorCWRlcGVuZHMgb24gTU9EVUxFUworCWhlbHAKKwkgIFJlbW92ZSB0aGUgc3RhdGljIGRlcGVuZGVuY3kgb2YgRFZCIGNhcmQgZHJpdmVycyBvbiBhbGwKKwkgIGZyb250ZW5kIG1vZHVsZXMgZm9yIGFsbCBwb3NzaWJsZSBjYXJkIHZhcmlhbnRzLiBJbnN0ZWFkLAorCSAgYWxsb3cgdGhlIGNhcmQgZHJpdmVycyB0byBvbmx5IGxvYWQgdGhlIGZyb250ZW5kIG1vZHVsZXMKKwkgIHRoZXkgcmVxdWlyZS4gVGhpcyBzYXZlcyBzZXZlcmFsIEtCeXRlcyBvZiBtZW1vcnkuCisKKwkgIE5vdGU6IFlvdSB3aWxsIG5lZWQgbW91ZHVsZS1pbml0LXRvb2xzIHYzLjIgb3IgbGF0ZXIgZm9yIHRoaXMgZmVhdHVyZS4KKworCSAgSWYgdW5zdXJlIHNheSBZLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYwppbmRleCA1N2IzNGNkLi4zZGQ1ZGJhZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmMKQEAgLTExMDUsMTggKzExMDUsNDIgQEAKIAltdXRleF9sb2NrKCZmcm9udGVuZF9tdXRleCk7CiAJZHZiX3VucmVnaXN0ZXJfZGV2aWNlIChmZXByaXYtPmR2YmRldik7CiAJZHZiX2Zyb250ZW5kX3N0b3AgKGZlKTsKLQlpZiAoZmUtPm9wcy50dW5lcl9vcHMucmVsZWFzZSkgewotCQlmZS0+b3BzLnR1bmVyX29wcy5yZWxlYXNlKGZlKTsKLQkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7Ci0JfQotCWlmIChmZS0+b3BzLnJlbGVhc2UpCi0JCWZlLT5vcHMucmVsZWFzZShmZSk7Ci0JZWxzZQotCQlwcmludGsoImR2Yl9mcm9udGVuZDogRGVtb2R1bGF0b3IgKCVzKSBkb2VzIG5vdCBoYXZlIGEgcmVsZWFzZSBjYWxsYmFjayFcbiIsIGZlLT5vcHMuaW5mby5uYW1lKTsKKwogCS8qIGZlIGlzIGludmFsaWQgbm93ICovCiAJa2ZyZWUoZmVwcml2KTsKIAltdXRleF91bmxvY2soJmZyb250ZW5kX211dGV4KTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQpOworCisjaWZkZWYgQ09ORklHX0RWQl9DT1JFX0FUVEFDSAordm9pZCBkdmJfZnJvbnRlbmRfZGV0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXZvaWQgKnB0cjsKKworCWlmIChmZS0+b3BzLnJlbGVhc2Vfc2VjKSB7CisJCWZlLT5vcHMucmVsZWFzZV9zZWMoZmUpOworCQlzeW1ib2xfcHV0X2FkZHIoZmUtPm9wcy5yZWxlYXNlX3NlYyk7CisJfQorCWlmIChmZS0+b3BzLnR1bmVyX29wcy5yZWxlYXNlKSB7CisJCWZlLT5vcHMudHVuZXJfb3BzLnJlbGVhc2UoZmUpOworCQlzeW1ib2xfcHV0X2FkZHIoZmUtPm9wcy50dW5lcl9vcHMucmVsZWFzZSk7CisJfQorCXB0ciA9ICh2b2lkKilmZS0+b3BzLnJlbGVhc2U7CisJaWYgKHB0cikgeworCQlmZS0+b3BzLnJlbGVhc2UoZmUpOworCQlzeW1ib2xfcHV0X2FkZHIocHRyKTsKKwl9Cit9CisjZWxzZQordm9pZCBkdmJfZnJvbnRlbmRfZGV0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCWlmIChmZS0+b3BzLnJlbGVhc2Vfc2VjKQorCQlmZS0+b3BzLnJlbGVhc2Vfc2VjKGZlKTsKKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMucmVsZWFzZSkKKwkJZmUtPm9wcy50dW5lcl9vcHMucmVsZWFzZShmZSk7CisJaWYgKGZlLT5vcHMucmVsZWFzZSkKKwkJZmUtPm9wcy5yZWxlYXNlKGZlKTsKK30KKyNlbmRpZgorRVhQT1JUX1NZTUJPTChkdmJfZnJvbnRlbmRfZGV0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKaW5kZXggMjg4N2UyYi4uZTVkNTAyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2Zyb250ZW5kLmgKQEAgLTkyLDEwICs5MiwxMyBAQAogCXN0cnVjdCBkdmJfZnJvbnRlbmRfaW5mbyBpbmZvOwogCiAJdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKKwl2b2lkICgqcmVsZWFzZV9zZWMpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAogCWludCAoKmluaXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIAlpbnQgKCpzbGVlcCkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOwogCisJaW50ICgqd3JpdGUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCogYnVmLCBpbnQgbGVuKTsKKwogCS8qIGlmIHRoaXMgaXMgc2V0LCBpdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgc3d6aWd6YWcgKi8KIAlpbnQgKCp0dW5lKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKIAkJICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyogcGFyYW1zLApAQCAtMTQ3LDcgKzE1MCw3IEBACiAJdm9pZCogZGVtb2R1bGF0b3JfcHJpdjsKIAl2b2lkKiB0dW5lcl9wcml2OwogCXZvaWQqIGZyb250ZW5kX3ByaXY7Ci0Jdm9pZCogbWlzY19wcml2OworCXZvaWQqIHNlY19wcml2OwogfTsKIAogZXh0ZXJuIGludCBkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoc3RydWN0IGR2Yl9hZGFwdGVyKiBkdmIsCkBAIC0xNTUsNiArMTU4LDggQEAKIAogZXh0ZXJuIGludCBkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiAKK2V4dGVybiB2b2lkIGR2Yl9mcm9udGVuZF9kZXRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpOworCiBleHRlcm4gdm9pZCBkdmJfZnJvbnRlbmRfcmVpbml0aWFsaXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKIAogZXh0ZXJuIHZvaWQgZHZiX2Zyb250ZW5kX3NsZWVwX3VudGlsKHN0cnVjdCB0aW1ldmFsICp3YWtldGltZSwgdTMyIGFkZF91c2VjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKaW5kZXggN2E3Zjc1Zi4uNjIwZTc4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmgKQEAgLTEwMiw0ICsxMDIsMjYgQEAKIAkJCSAgICBpbnQgKCpmdW5jKShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJCSAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpKTsKIAorLyoqIGdlbmVyaWMgRFZCIGF0dGFjaCBmdW5jdGlvbi4gKi8KKyNpZmRlZiBDT05GSUdfRFZCX0NPUkVfQVRUQUNICisjZGVmaW5lIGR2Yl9hdHRhY2goRlVOQ1RJT04sIEFSR1MuLi4pICh7IFwKKwl2b2lkICpfX3IgPSBOVUxMOyBcCisJdHlwZW9mKCZGVU5DVElPTikgX19hID0gc3ltYm9sX3JlcXVlc3QoRlVOQ1RJT04pOyBcCisJaWYgKF9fYSkgeyBcCisJCV9fciA9ICh2b2lkICopIF9fYShBUkdTKTsgXAorCQlpZiAoX19yID09IE5VTEwpIFwKKwkJCXN5bWJvbF9wdXQoRlVOQ1RJT04pOyBcCisJfSBlbHNlIHsgXAorCQlwcmludGsoS0VSTl9FUlIgIkRWQjogVW5hYmxlIHRvIGZpbmQgc3ltYm9sICIjRlVOQ1RJT04iKClcbiIpOyBcCisJfSBcCisJX19yOyBcCit9KQorCisjZWxzZQorI2RlZmluZSBkdmJfYXR0YWNoKEZVTkNUSU9OLCBBUkdTLi4uKSAoeyBcCisJRlVOQ1RJT04oQVJHUyk7IFwKK30pCisKKyNlbmRpZgorCiAjZW5kaWYgLyogI2lmbmRlZiBfRFZCREVWX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggNzU4MjRiNy4uMGEzYzM1MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMjYsNiArMjYsNyBAQAogCXRyaXN0YXRlICJBVmVyTWVkaWEgQXZlclRWIERWQi1UIFVTQiAyLjAgKEE4MDApIgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCisJc2VsZWN0IERWQl9UVU5FUl9NVDIwNjAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCIDIuMCAoQTgwMCkgcmVjZWl2ZXIuCiAKQEAgLTMzLDYgKzM0LDcgQEAKIAl0cmlzdGF0ZSAiRGlCY29tIFVTQiBEVkItVCBkZXZpY2VzIChiYXNlZCBvbiB0aGUgRGlCMzAwME0tQikgKHNlZSBoZWxwIGZvciBkZXZpY2UgbGlzdCkiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUIKKwlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIFVTQiAxLjEgYW5kIDIuMCBEVkItVCByZWNlaXZlcnMgYmFzZWQgb24gcmVmZXJlbmNlIGRlc2lnbnMgbWFkZSBieQogCSAgRGlCY29tICg8aHR0cDovL3d3dy5kaWJjb20uZnI+KSBlcXVpcHBlZCB3aXRoIGEgRGlCMzAwME0tQiBkZW1vZHVsYXRvci4KQEAgLTY1LDYgKzY3LDcgQEAKIAl0cmlzdGF0ZSAiRGlCY29tIFVTQiBEVkItVCBkZXZpY2VzIChiYXNlZCBvbiB0aGUgRGlCMzAwME0tQy9QKSAoc2VlIGhlbHAgZm9yIGRldmljZSBsaXN0KSIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQworCXNlbGVjdCBEVkJfVFVORVJfTVQyMDYwCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CiAJICBEaUJjb20gKDxodHRwOi8vd3d3LmRpYmNvbS5mcj4pIGVxdWlwcGVkIHdpdGggYSBEaUIzMDAwTS1DL1AgZGVtb2R1bGF0b3IuCkBAIC04MCwxNiArODMsMTcgQEAKIAl0cmlzdGF0ZSAiSGFuZlRlayBVTVQtMDEwIERWQi1UIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCisJc2VsZWN0IERWQl9UVU5FUl9NVDIwNjAKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhbmZUZWsgVU1ULTAxMCBVU0IyLjAgc3RpY2stc2l6ZWQgRFZCLVQgcmVjZWl2ZXIuCiAKIGNvbmZpZyBEVkJfVVNCX0NYVVNCCiAJdHJpc3RhdGUgIkNvbmV4YW50IFVTQjIuMCBoeWJyaWQgcmVmZXJlbmNlIGRlc2lnbiBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgotCXNlbGVjdCBEVkJfQ1gyMjcwMgotCXNlbGVjdCBEVkJfTEdEVDMzMFgKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IERWQl9aTDEwMzUzCisJc2VsZWN0IERWQl9DWDIyNzAyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MR0RUMzMwWCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIENvbmV4YW50IFVTQjIuMCBoeWJyaWQgcmVmZXJlbmNlIGRlc2lnbi4KIAkgIEN1cnJlbnRseSwgb25seSBEVkIgYW5kIEFUU0MgbW9kZXMgYXJlIHN1cHBvcnRlZCwgYW5hbG9nIG1vZGUKQEAgLTEwMSw4ICsxMDUsOCBAQAogY29uZmlnIERWQl9VU0JfRElHSVRWCiAJdHJpc3RhdGUgIk5lYnVsYSBFbGVjdHJvbmljcyB1RGlnaVRWIERWQi1UIFVTQjIuMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgotCXNlbGVjdCBEVkJfTlhUNjAwMAotCXNlbGVjdCBEVkJfTVQzNTIKKwlzZWxlY3QgRFZCX05YVDYwMDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBOZWJ1bGEgRWxlY3Ryb25pY3MgdURpZ2l0ViBVU0IyLjAgRFZCLVQgcmVjZWl2ZXIuCiAKQEAgLTE0NSw2ICsxNDksNyBAQAogCXRyaXN0YXRlICJIYXVwcGF1Z2UgV2luVFYtTk9WQS1UIHVzYjIgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9ESUIzMDAwTUMKKwlzZWxlY3QgRFZCX1RVTkVSX01UMjA2MAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgSGF1cHBhdWdlIFdpblRWLU5PVkEtVCB1c2IyIERWQi1UIFVTQjIuMCByZWNlaXZlci4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hODAwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYwppbmRleCBjZTQ0YWE2Li5kZjBjMzg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2E4MDAuYwpAQCAtMjYsNiArMjYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogYXNzdXJlIHRvIHB1dCBjb2xkIHRvIDAgZm9yIGlNYW51ZmFjdHVyZXIgPT0gMSAqLworc3RhdGljIGludCBhODAwX2lkZW50aWZ5X3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzICpwcm9wcyxzdHJ1Y3QgZHZiX3VzYl9kZXZpY2VfZGVzY3JpcHRpb24gKipkZXNjLCBpbnQgKmNvbGQpCit7CisJKmNvbGQgPSB1ZGV2LT5kZXNjcmlwdG9yLmlNYW51ZmFjdHVyZXIgIT0gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhODAwX3JjX2tleXNbXSA9IHsKIAl7IDB4MDIsIDB4MDEsIEtFWV9QUk9HMSB9LCAgICAgICAvKiBTT1VSQ0UgKi8KIAl7IDB4MDIsIDB4MDAsIEtFWV9QT1dFUiB9LCAgICAgICAvKiBQT1dFUiAqLwpAQCAtMTEzLDYgKzEyMCw3IEBACiAJLnBvd2VyX2N0cmwgICAgICAgPSBhODAwX3Bvd2VyX2N0cmwsCiAJLmZyb250ZW5kX2F0dGFjaCAgPSBkaWJ1c2JfZGliMzAwMG1jX2Zyb250ZW5kX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgICA9IGRpYnVzYl9kaWIzMDAwbWNfdHVuZXJfYXR0YWNoLAorCS5pZGVudGlmeV9zdGF0ZSAgID0gYTgwMF9pZGVudGlmeV9zdGF0ZSwKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGE4MDBfcmNfa2V5cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY3h1c2IuYwppbmRleCBhZTIzYmRkLi5jNzEwYzAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2N4dXNiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jeHVzYi5jCkBAIC0zNDksNiArMzQ5LDcgQEAKIAogc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBjeHVzYl96bDEwMzUzX2RlZTE2MDFfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKKwkucGFyYWxsZWxfdHMgPSAxLAogfTsKIAogc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgY3h1c2JfbXQzNTJfY29uZmlnID0gewpAQCAtNDA5LDcgKzQxMCw3IEBACiAKIAljeHVzYl9jdHJsX21zZyhkLENNRF9ESUdJVEFMLCBOVUxMLCAwLCAmYiwgMSk7CiAKLQlpZiAoKGQtPmZlID0gY3gyMjcwMl9hdHRhY2goJmN4dXNiX2N4MjI3MDJfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoZC0+ZmUgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLCAmY3h1c2JfY3gyMjcwMl9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CkBAIC00MjIsNyArNDIzLDcgQEAKIAogCWN4dXNiX2N0cmxfbXNnKGQsQ01EX0RJR0lUQUwsIE5VTEwsIDAsIE5VTEwsIDApOwogCi0JaWYgKChkLT5mZSA9IGxnZHQzMzB4X2F0dGFjaCgmY3h1c2JfbGdkdDMzMDNfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKQorCWlmICgoZC0+ZmUgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwgJmN4dXNiX2xnZHQzMzAzX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gLUVJTzsKQEAgLTQzNSw3ICs0MzYsNyBAQAogCiAJY3h1c2JfY3RybF9tc2coZCxDTURfRElHSVRBTCwgTlVMTCwgMCwgTlVMTCwgMCk7CiAKLQlpZiAoKGQtPmZlID0gbXQzNTJfYXR0YWNoKCZjeHVzYl9tdDM1Ml9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpCisJaWYgKChkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfbXQzNTJfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKQogCQlyZXR1cm4gMDsKIAogCXJldHVybiAtRUlPOwpAQCAtNDQ4LDggKzQ0OSw4IEBACiAKIAljeHVzYl9jdHJsX21zZyhkLENNRF9ESUdJVEFMLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAotCWlmICgoKGQtPmZlID0gbXQzNTJfYXR0YWNoKCZjeHVzYl9kZWUxNjAxX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkgfHwKLQkgICAgKChkLT5mZSA9IHpsMTAzNTNfYXR0YWNoKCZjeHVzYl96bDEwMzUzX2RlZTE2MDFfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKSkKKwlpZiAoKChkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmY3h1c2JfZGVlMTYwMV9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHx8CisJCSgoZC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmY3h1c2JfemwxMDM1M19kZWUxNjAxX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCmluZGV4IGFiZDc1YjQuLjEyNGUyNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLWNvbW1vbi5jCkBAIC0xMzEsOSArMTMxLDYgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkLT5pMmNfbXV0ZXgpIDwgMCkKIAkJcmV0dXJuIC1FQUdBSU47CiAKLQlpZiAobnVtID4gMikKLQkJd2FybigibW9yZSB0aGFuIDIgaTJjIG1lc3NhZ2VzIGF0IGEgdGltZSBpcyBub3QgaGFuZGxlZCB5ZXQuIFRPRE8uIik7Ci0KIAlmb3IgKGkgPSAwOyBpIDwgbnVtOyBpKyspIHsKIAkJLyogd3JpdGUvcmVhZCByZXF1ZXN0ICovCiAJCWlmIChpKzEgPCBudW0gJiYgKG1zZ1tpKzFdLmZsYWdzICYgSTJDX01fUkQpKSB7CkBAIC0xNjgsMzEgKzE2NSwxMzcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZGlidXNiX3JlYWRfZWVwcm9tX2J5dGUpOwogCisvKiAzMDAwTUMvUCBzdHVmZiAqLworLy8gQ29uZmlnIEFkamFjZW50IGNoYW5uZWxzICBQZXJmIC1jYWwyMgorc3RhdGljIHN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgZGliMzAwMHBfbXQyMDYwX2FnY19jb25maWcgPSB7CisJLmJhbmRfY2FwcyA9IEJBTkRfVkhGIHwgQkFORF9VSEYsCisJLnNldHVwICAgICA9ICgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICgxIDw8IDEzKSB8ICgxIDw8IDEyKSB8ICgyOSA8PCAwKSwKKworCS5hZ2MxX21heCA9IDQ4NDk3LAorCS5hZ2MxX21pbiA9IDIzNTkzLAorCS5hZ2MyX21heCA9IDQ2NTMxLAorCS5hZ2MyX21pbiA9IDI0OTA0LAorCisJLmFnYzFfcHQxID0gMHg2NSwKKwkuYWdjMV9wdDIgPSAweDY5LAorCisJLmFnYzFfc2xvcGUxID0gMHg1MSwKKwkuYWdjMV9zbG9wZTIgPSAweDI3LAorCisJLmFnYzJfcHQxID0gMCwKKwkuYWdjMl9wdDIgPSAweDMzLAorCisJLmFnYzJfc2xvcGUxID0gMHgzNSwKKwkuYWdjMl9zbG9wZTIgPSAweDM3LAorfTsKKworc3RhdGljIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIHN0azMwMDBwX2RpYjMwMDBwX2NvbmZpZyA9IHsKKwkmZGliMzAwMHBfbXQyMDYwX2FnY19jb25maWcsCisKKwkubWF4X3RpbWUgICAgID0gMHgxOTYsCisJLmxuX2FkY19sZXZlbCA9IDB4MWNjNywKKworCS5vdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzID0gMSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIGRpYjMwMDBwX3BhbmFzb25pY19hZ2NfY29uZmlnID0geworCS5zZXR1cCAgICA9ICgwIDw8IDE1KSB8ICgwIDw8IDE0KSB8ICgxIDw8IDEzKSB8ICgxIDw8IDEyKSB8ICgyOSA8PCAwKSwKKworCS5hZ2MxX21heCA9IDU2MzYxLAorCS5hZ2MxX21pbiA9IDIyMjgyLAorCS5hZ2MyX21heCA9IDQ3ODQxLAorCS5hZ2MyX21pbiA9IDM2MDQ1LAorCisJLmFnYzFfcHQxID0gMHgzYiwKKwkuYWdjMV9wdDIgPSAweDZiLAorCisJLmFnYzFfc2xvcGUxID0gMHg1NSwKKwkuYWdjMV9zbG9wZTIgPSAweDFkLAorCisJLmFnYzJfcHQxID0gMCwKKwkuYWdjMl9wdDIgPSAweDBhLAorCisJLmFnYzJfc2xvcGUxID0gMHg5NSwKKwkuYWdjMl9zbG9wZTIgPSAweDFlLAorfTsKKworc3RhdGljIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIG1vZDMwMDBwX2RpYjMwMDBwX2NvbmZpZyA9IHsKKwkmZGliMzAwMHBfcGFuYXNvbmljX2FnY19jb25maWcsCisKKwkubWF4X3RpbWUgICAgID0gMHg1MSwKKwkubG5fYWRjX2xldmVsID0gMHgxY2M3LAorCisJLm91dHB1dF9tcGVnMl9pbl8xODhfYnl0ZXMgPSAxLAorfTsKKwogaW50IGRpYnVzYl9kaWIzMDAwbWNfZnJvbnRlbmRfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlzdHJ1Y3QgZGliMzAwMF9jb25maWcgZGVtb2RfY2ZnOwotCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gZC0+cHJpdjsKLQotCWZvciAoZGVtb2RfY2ZnLmRlbW9kX2FkZHJlc3MgPSAweDg7IGRlbW9kX2NmZy5kZW1vZF9hZGRyZXNzIDwgMHhkOyBkZW1vZF9jZmcuZGVtb2RfYWRkcmVzcysrKQotCQlpZiAoKGQtPmZlID0gZGliMzAwMG1jX2F0dGFjaCgmZGVtb2RfY2ZnLCZkLT5pMmNfYWRhcCwmc3QtPm9wcykpICE9IE5VTEwpIHsKLQkJCWQtPmZlLT5vcHMudHVuZXJfb3BzLmluaXQgPSBkdmJfdXNiX3R1bmVyX2luaXRfaTJjOwotCQkJZC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGR2Yl91c2JfdHVuZXJfc2V0X3BhcmFtc19pMmM7Ci0JCQlkLT50dW5lcl9wYXNzX2N0cmwgPSBzdC0+b3BzLnR1bmVyX3Bhc3NfY3RybDsKLQkJCXJldHVybiAwOworCWlmIChkaWIzMDAwbWNfYXR0YWNoKCZkLT5pMmNfYWRhcCwgMSwgREVGQVVMVF9ESUIzMDAwUF9JMkNfQUREUkVTUywgMCwgJm1vZDMwMDBwX2RpYjMwMDBwX2NvbmZpZywgJmQtPmZlKSA9PSAwIHx8CisJCWRpYjMwMDBtY19hdHRhY2goJmQtPmkyY19hZGFwLCAxLCBERUZBVUxUX0RJQjMwMDBNQ19JMkNfQUREUkVTUywgMCwgJm1vZDMwMDBwX2RpYjMwMDBwX2NvbmZpZywgJmQtPmZlKSA9PSAwKSB7CisJCWlmIChkLT5wcml2ICE9IE5VTEwpIHsKKwkJCXN0cnVjdCBkaWJ1c2Jfc3RhdGUgKnN0ID0gZC0+cHJpdjsKKwkJCXN0LT5vcHMucGlkX3BhcnNlID0gZGliMzAwMG1jX3BpZF9wYXJzZTsKKwkJCXN0LT5vcHMucGlkX2N0cmwgID0gZGliMzAwMG1jX3BpZF9jb250cm9sOwogCQl9Ci0KKwkJcmV0dXJuIDA7CisJfQogCXJldHVybiAtRU5PREVWOwogfQogRVhQT1JUX1NZTUJPTChkaWJ1c2JfZGliMzAwMG1jX2Zyb250ZW5kX2F0dGFjaCk7CiAKK3N0YXRpYyBzdHJ1Y3QgbXQyMDYwX2NvbmZpZyBzdGszMDAwcF9tdDIwNjBfY29uZmlnID0geworCTB4NjAKK307CisKIGludCBkaWJ1c2JfZGliMzAwMG1jX3R1bmVyX2F0dGFjaCAoc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQogewotCWQtPnBsbF9hZGRyID0gMHg2MDsKLQlkLT5wbGxfZGVzYyA9ICZkdmJfcGxsX2VudjU3aDF4ZDU7CisJc3RydWN0IGRpYnVzYl9zdGF0ZSAqc3QgPSBkLT5wcml2OworCWludCByZXQ7CisJdTggYSxiOworCXUxNiBpZjEgPSAxMjIwOworCXN0cnVjdCBpMmNfYWRhcHRlciAqdHVuX2kyYzsKIAotCWQtPmZlLT5vcHMudHVuZXJfb3BzLmluaXQgPSBkdmJfdXNiX3R1bmVyX2luaXRfaTJjOwotCWQtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmJfdXNiX3R1bmVyX3NldF9wYXJhbXNfaTJjOworCS8vIEZpcnN0IElGIGNhbGlicmF0aW9uIGZvciBMaXRlb24gU3RpY2tzCisJaWYgKGQtPnVkZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IgPT0gVVNCX1ZJRF9MSVRFT04gJiYKKwkJZC0+dWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QgPT0gVVNCX1BJRF9MSVRFT05fRFZCX1RfV0FSTSkgewogCisJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGQsMHg3RSwmYSk7CisJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGQsMHg3RiwmYik7CisKKwkJaWYgKGEgPT0gMHgwMCkKKwkJCWlmMSArPSBiOworCQllbHNlIGlmIChhID09IDB4ODApCisJCQlpZjEgLT0gYjsKKwkJZWxzZQorCQkJd2FybigiTElURS1PTiBEVkItVDogU3RyYW5nZSBJRjEgY2FsaWJyYXRpb24gOiUyWCAlMlhcbiIsIGEsIGIpOworCisJfSBlbHNlIGlmIChkLT51ZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yICA9PSBVU0JfVklEX0RJQkNPTSAmJgorCQkgICBkLT51ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCA9PSBVU0JfUElEX0RJQkNPTV9NT0QzMDAxX1dBUk0pIHsKKwkJdTggZGVzYzsKKwkJZGlidXNiX3JlYWRfZWVwcm9tX2J5dGUoZCwgNywgJmRlc2MpOworCQlpZiAoZGVzYyA9PSAyKSB7CisJCQlhID0gMTI3OworCQkJZG8geworCQkJCWRpYnVzYl9yZWFkX2VlcHJvbV9ieXRlKGQsIGEsICZkZXNjKTsKKwkJCQlhLS07CisJCQl9IHdoaWxlIChhID4gNyAmJiAoZGVzYyA9PSAweGZmIHx8IGRlc2MgPT0gMHgwMCkpOworCQkJaWYgKGRlc2MgJiAweDgwKQorCQkJCWlmMSAtPSAoMHhmZiAtIGRlc2MpOworCQkJZWxzZQorCQkJCWlmMSArPSBkZXNjOworCQl9CisJfQorCisJdHVuX2kyYyA9IGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihkLT5mZSwgMSk7CisJaWYgKChyZXQgPSBtdDIwNjBfYXR0YWNoKGQtPmZlLCB0dW5faTJjLCAmc3RrMzAwMHBfbXQyMDYwX2NvbmZpZywgaWYxKSkgIT0gMCkgeworCQkvKiBub3QgZm91bmQgLSB1c2UgcGFuYXNvbmljIHBsbCBwYXJhbWV0ZXJzICovCisJCWlmIChkdmJfcGxsX2F0dGFjaChkLT5mZSwgMHg2MCwgdHVuX2kyYywgJmR2Yl9wbGxfZW52NTdoMXhkNSkgPT0gTlVMTCkKKwkJCXJldHVybiAtRU5PTUVNOworCX0gZWxzZSB7CisJCXN0LT5tdDIwNjBfcHJlc2VudCA9IDE7CisJCS8qIHNldCB0aGUgY29ycmVjdCBwYXJhbWV0ZXJzIGZvciB0aGUgZGliMzAwMHAgKi8KKwkJZGliMzAwMG1jX3NldF9jb25maWcoZC0+ZmUsICZzdGszMDAwcF9kaWIzMDAwcF9jb25maWcpOworCX0KIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woZGlidXNiX2RpYjMwMDBtY190dW5lcl9hdHRhY2gpOwpAQCAtMjY3LDYgKzM3MCw2NyBAQAogCXsgMHg4NiwgMHgxZSwgS0VZX0RPV04gfSwKIAl7IDB4ODYsIDB4MWYsIEtFWV9MRUZUIH0sCiAJeyAweDg2LCAweDFiLCBLRVlfUklHSFQgfSwKKworCS8qIEtleSBjb2RlcyBmb3IgdGhlIERpQmNvbSBNT0QzMDAwIHJlbW90ZS4gKi8KKwl7IDB4ODAsIDB4MDAsIEtFWV9NVVRFIH0sCisJeyAweDgwLCAweDAxLCBLRVlfVEVYVCB9LAorCXsgMHg4MCwgMHgwMiwgS0VZX0hPTUUgfSwKKwl7IDB4ODAsIDB4MDMsIEtFWV9QT1dFUiB9LAorCisJeyAweDgwLCAweDA0LCBLRVlfUkVEIH0sCisJeyAweDgwLCAweDA1LCBLRVlfR1JFRU4gfSwKKwl7IDB4ODAsIDB4MDYsIEtFWV9ZRUxMT1cgfSwKKwl7IDB4ODAsIDB4MDcsIEtFWV9CTFVFIH0sCisKKwl7IDB4ODAsIDB4MDgsIEtFWV9EVkQgfSwKKwl7IDB4ODAsIDB4MDksIEtFWV9BVURJTyB9LAorCXsgMHg4MCwgMHgwYSwgS0VZX01FRElBIH0sICAgICAgLyogUGljdHVyZXMgKi8KKwl7IDB4ODAsIDB4MGIsIEtFWV9WSURFTyB9LAorCisJeyAweDgwLCAweDBjLCBLRVlfQkFDSyB9LAorCXsgMHg4MCwgMHgwZCwgS0VZX1VQIH0sCisJeyAweDgwLCAweDBlLCBLRVlfUkFESU8gfSwKKwl7IDB4ODAsIDB4MGYsIEtFWV9FUEcgfSwKKworCXsgMHg4MCwgMHgxMCwgS0VZX0xFRlQgfSwKKwl7IDB4ODAsIDB4MTEsIEtFWV9PSyB9LAorCXsgMHg4MCwgMHgxMiwgS0VZX1JJR0hUIH0sCisJeyAweDgwLCAweDEzLCBLRVlfVU5LTk9XTiB9LCAgICAvKiBTQVAgKi8KKworCXsgMHg4MCwgMHgxNCwgS0VZX1RWIH0sCisJeyAweDgwLCAweDE1LCBLRVlfRE9XTiB9LAorCXsgMHg4MCwgMHgxNiwgS0VZX01FTlUgfSwgICAgICAgLyogRFZEIE1lbnUgKi8KKwl7IDB4ODAsIDB4MTcsIEtFWV9MQVNUIH0sCisKKwl7IDB4ODAsIDB4MTgsIEtFWV9SRUNPUkQgfSwKKwl7IDB4ODAsIDB4MTksIEtFWV9TVE9QIH0sCisJeyAweDgwLCAweDFhLCBLRVlfUEFVU0UgfSwKKwl7IDB4ODAsIDB4MWIsIEtFWV9QTEFZIH0sCisKKwl7IDB4ODAsIDB4MWMsIEtFWV9QUkVWSU9VUyB9LAorCXsgMHg4MCwgMHgxZCwgS0VZX1JFV0lORCB9LAorCXsgMHg4MCwgMHgxZSwgS0VZX0ZBU1RGT1JXQVJEIH0sCisJeyAweDgwLCAweDFmLCBLRVlfTkVYVH0sCisKKwl7IDB4ODAsIDB4NDAsIEtFWV8xIH0sCisJeyAweDgwLCAweDQxLCBLRVlfMiB9LAorCXsgMHg4MCwgMHg0MiwgS0VZXzMgfSwKKwl7IDB4ODAsIDB4NDMsIEtFWV9DSEFOTkVMVVAgfSwKKworCXsgMHg4MCwgMHg0NCwgS0VZXzQgfSwKKwl7IDB4ODAsIDB4NDUsIEtFWV81IH0sCisJeyAweDgwLCAweDQ2LCBLRVlfNiB9LAorCXsgMHg4MCwgMHg0NywgS0VZX0NIQU5ORUxET1dOIH0sCisKKwl7IDB4ODAsIDB4NDgsIEtFWV83IH0sCisJeyAweDgwLCAweDQ5LCBLRVlfOCB9LAorCXsgMHg4MCwgMHg0YSwgS0VZXzkgfSwKKwl7IDB4ODAsIDB4NGIsIEtFWV9WT0xVTUVVUCB9LAorCisJeyAweDgwLCAweDRjLCBLRVlfQ0xFQVIgfSwKKwl7IDB4ODAsIDB4NGQsIEtFWV8wIH0sCisJeyAweDgwLCAweDRlLCBLRVlfRU5URVIgfSwKKwl7IDB4ODAsIDB4NGYsIEtFWV9WT0xVTUVET1dOIH0sCiB9OwogRVhQT1JUX1NZTUJPTChkaWJ1c2JfcmNfa2V5cyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYi5jCmluZGV4IGY0YzQ1ZjMuLmVmZmQzNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1iLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWIuYwpAQCAtMjEsMTEgKzIxLDExIEBACiAKIAlkZW1vZF9jZmcuZGVtb2RfYWRkcmVzcyA9IDB4ODsKIAotCWlmICgoZC0+ZmUgPSBkaWIzMDAwbWJfYXR0YWNoKCZkZW1vZF9jZmcsJmQtPmkyY19hZGFwLCZzdC0+b3BzKSkgPT0gTlVMTCkgewotCQlkLT5mZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gZHZiX3VzYl90dW5lcl9pbml0X2kyYzsKLQkJZC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGR2Yl91c2JfdHVuZXJfc2V0X3BhcmFtc19pMmM7CisJaWYgKChkLT5mZSA9IGRpYjMwMDBtYl9hdHRhY2goJmRlbW9kX2NmZywmZC0+aTJjX2FkYXAsJnN0LT5vcHMpKSA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CisKKwlkLT5mZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gZHZiX3VzYl90dW5lcl9pbml0X2kyYzsKKwlkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZHZiX3VzYl90dW5lcl9zZXRfcGFyYW1zX2kyYzsKIAogCWQtPnR1bmVyX3Bhc3NfY3RybCA9IHN0LT5vcHMudHVuZXJfcGFzc19jdHJsOwogCkBAIC0xNjksNyArMTY5LDcgQEAKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLAotCS5yY19rZXlfbWFwX3NpemUgID0gNjMsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCkBAIC0yNDcsNyArMjQ3LDcgQEAKIAogCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkucmNfa2V5X21hcCAgICAgICA9IGRpYnVzYl9yY19rZXlzLAotCS5yY19rZXlfbWFwX3NpemUgID0gNjMsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCisJLnJjX2tleV9tYXBfc2l6ZSAgPSAxMTEsIC8qIHdvdywgdGhhdCBpcyB1Z2x5IC4uLiBJIHdhbnQgdG8gbG9hZCBpdCB0byB0aGUgZHJpdmVyIGR5bmFtaWNhbGx5ICovCiAJLnJjX3F1ZXJ5ICAgICAgICAgPSBkaWJ1c2JfcmNfcXVlcnksCiAKIAkuaTJjX2FsZ28gICAgICAgICA9ICZkaWJ1c2JfaTJjX2FsZ28sCkBAIC0yNzIsOCArMjcyLDggQEAKICNlbmRpZgogCS5kZXZpY2VzID0gewogCQl7CSJBcnRlYyBUMSBVU0IxLjEgVFZCT1ggd2l0aCBBTjIyMzUiLAotCQkJeyAmZGlidXNiX2RpYjMwMDBtYl90YWJsZVsyMF0sIE5VTEwgfSwKIAkJCXsgJmRpYnVzYl9kaWIzMDAwbWJfdGFibGVbMjFdLCBOVUxMIH0sCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1iX3RhYmxlWzIyXSwgTlVMTCB9LAogCQl9LAogI2lmZGVmIENPTkZJR19EVkJfVVNCX0RJQlVTQl9NQl9GQVVMVFkKIAkJewkiQXJ0ZWMgVDEgVVNCMS4xIFRWQk9YIHdpdGggQU4yMjM1IChmYXVsdHkgVVNCIElEcykiLApAQCAtMzA0LDcgKzMwNCw3IEBACiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKLQkucmNfa2V5X21hcF9zaXplICA9IDYzLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLworCS5yY19rZXlfbWFwX3NpemUgID0gMTExLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLwogCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmZGlidXNiX2kyY19hbGdvLApAQCAtMzU1LDcgKzM1NSw3IEBACiAKIAkucmNfaW50ZXJ2YWwgICAgICA9IERFRkFVTFRfUkNfSU5URVJWQUwsCiAJLnJjX2tleV9tYXAgICAgICAgPSBkaWJ1c2JfcmNfa2V5cywKLQkucmNfa2V5X21hcF9zaXplICA9IDYzLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLworCS5yY19rZXlfbWFwX3NpemUgID0gMTExLCAvKiB3b3csIHRoYXQgaXMgdWdseSAuLi4gSSB3YW50IHRvIGxvYWQgaXQgdG8gdGhlIGRyaXZlciBkeW5hbWljYWxseSAqLwogCS5yY19xdWVyeSAgICAgICAgID0gZGlidXNiX3JjX3F1ZXJ5LAogCiAJLmkyY19hbGdvICAgICAgICAgPSAmZGlidXNiX2kyY19hbGdvLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLW1jLmMKaW5kZXggNTU4MDJmYi4uZWNhNDA4MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2ItbWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi1tYy5jCkBAIC0yOCw2ICsyOCwxNyBAQAogLyogMDAgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAkJVVNCX1BJRF9ESUJDT01fTU9EMzAwMV9DT0xEKSB9LAogLyogMDEgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfRElCQ09NLAkJVVNCX1BJRF9ESUJDT01fTU9EMzAwMV9XQVJNKSB9LAogLyogMDIgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfVUxUSU1BX0VMRUNUUk9OSUMsCVVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfQ09MRCkgfSwKKy8qIDAzICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLAlVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX1dBUk0pIH0sIC8vICggPyApCisvKiAwNCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9MSVRFT04sCQlVU0JfUElEX0xJVEVPTl9EVkJfVF9DT0xEKSB9LAorLyogMDUgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfTElURU9OLAkJVVNCX1BJRF9MSVRFT05fRFZCX1RfV0FSTSkgfSwKKy8qIDA2ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0VNUElBLAkJVVNCX1BJRF9ESUdJVk9YX01JTklfU0xfQ09MRCkgfSwKKy8qIDA3ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0VNUElBLAkJVVNCX1BJRF9ESUdJVk9YX01JTklfU0xfV0FSTSkgfSwKKy8qIDA4ICovCXsgVVNCX0RFVklDRShVU0JfVklEX0dSQU5EVEVDLCAgICAgICAgICBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCMl9DT0xEKSB9LAorLyogMDkgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfR1JBTkRURUMsICAgICAgICAgIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0IyX1dBUk0pIH0sCisvKiAxMCAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQywJVVNCX1BJRF9BUlRFQ19UMTRfQ09MRCkgfSwKKy8qIDExICovCXsgVVNCX0RFVklDRShVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDLAlVU0JfUElEX0FSVEVDX1QxNF9XQVJNKSB9LAorLyogMTIgKi8JeyBVU0JfREVWSUNFKFVTQl9WSURfTEVBRFRFSywJCVVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX0NPTEQpIH0sCisvKiAxMyAqLwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9MRUFEVEVLLAkJVVNCX1BJRF9XSU5GQVNUX0RUVl9ET05HTEVfV0FSTSkgfSwKIAkJCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGRpYnVzYl9kaWIzMDAwbWNfdGFibGUpOwpAQCAtNTAsNyArNjEsNyBAQAogCiAJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAogCS5yY19rZXlfbWFwICAgICAgID0gZGlidXNiX3JjX2tleXMsCi0JLnJjX2tleV9tYXBfc2l6ZSAgPSA2MywgLyogRklYTUUgKi8KKwkucmNfa2V5X21hcF9zaXplICA9IDExMSwgLyogRklYTUUgKi8KIAkucmNfcXVlcnkgICAgICAgICA9IGRpYnVzYl9yY19xdWVyeSwKIAogCS5pMmNfYWxnbyAgICAgICAgID0gJmRpYnVzYl9pMmNfYWxnbywKQEAgLTY4LDE2ICs3OSwzOCBAQAogCQl9CiAJfSwKIAotCS5udW1fZGV2aWNlX2Rlc2NzID0gMiwKKwkubnVtX2RldmljZV9kZXNjcyA9IDcsCiAJLmRldmljZXMgPSB7CiAJCXsgICAiRGlCY29tIFVTQjIuMCBEVkItVCByZWZlcmVuY2UgZGVzaWduIChNT0QzMDAwUCkiLAogCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVswXSwgTlVMTCB9LAogCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVsxXSwgTlVMTCB9LAogCQl9LAotCQl7ICAgIkFydGVjIFQxIFVTQjIuMCBUVkJPWCAocGxlYXNlIHJlcG9ydCB0aGUgd2FybSBJRCkiLAorCQl7ICAgIkFydGVjIFQxIFVTQjIuMCBUVkJPWCAocGxlYXNlIGNoZWNrIHRoZSB3YXJtIElEKSIsCiAJCQl7ICZkaWJ1c2JfZGliMzAwMG1jX3RhYmxlWzJdLCBOVUxMIH0sCi0JCQl7IE5VTEwgfSwKKwkJCXsgJmRpYnVzYl9kaWIzMDAwbWNfdGFibGVbM10sIE5VTEwgfSwKIAkJfSwKKwkJeyAgICJMSVRFLU9OIFVTQjIuMCBEVkItVCBUdW5lciIsCisJCSAgICAvKiBBbHNvIHJlYnJhbmRlZCBhcyBJbnR1aXggUzgwMCwgVG9zaGliYSAqLworCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs0XSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs1XSwgTlVMTCB9LAorCQl9LAorCQl7ICAgIk1TSSBEaWdpdm94IE1pbmkgU0wiLAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs2XSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs3XSwgTlVMTCB9LAorCQl9LAorCQl7ICAgIkdSQU5EIC0gVVNCMi4wIERWQi1UIGFkYXB0ZXIiLAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs4XSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVs5XSwgTlVMTCB9LAorCQl9LAorCQl7ICAgIkFydGVjIFQxNCAtIFVTQjIuMCBEVkItVCIsCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1jX3RhYmxlWzEwXSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVsxMV0sIE5VTEwgfSwKKwkJfSwKKwkJeyAgICJMZWFkdGVrIC0gVVNCMi4wIFdpbmZhc3QgRFRWIGRvbmdsZSIsCisJCQl7ICZkaWJ1c2JfZGliMzAwMG1jX3RhYmxlWzEyXSwgTlVMTCB9LAorCQkJeyAmZGlidXNiX2RpYjMwMDBtY190YWJsZVsxM10sIE5VTEwgfSwKKwkJfSwKKwkJeyBOVUxMIH0sCiAJfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlidXNiLmgKaW5kZXggMmQ5OWQwNS4uYTQzZjg3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWJ1c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYnVzYi5oCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSAiZHZiLXVzYi5oIgogCiAjaW5jbHVkZSAiZGliMzAwMC5oIgorI2luY2x1ZGUgImRpYjMwMDBtYy5oIgorI2luY2x1ZGUgIm10MjA2MC5oIgogCiAvKgogICogcHJvdG9jb2wgb2YgYWxsIGRpYnVzYiByZWxhdGVkIGRldmljZXMKQEAgLTk2LDYgKzk4LDcgQEAKIAogc3RydWN0IGRpYnVzYl9zdGF0ZSB7CiAJc3RydWN0IGRpYl9mZV94ZmVyX29wcyBvcHM7CisJaW50IG10MjA2MF9wcmVzZW50OwogCiAJLyogZm9yIFJDNSByZW1vdGUgY29udHJvbCAqLwogCWludCBvbGRfdG9nZ2xlOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGlnaXR2LmMKaW5kZXggYzE0ZDllZi4uMDE1ODU0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWdpdHYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpZ2l0di5jCkBAIC0xMjgsMTEgKzEyOCwxMSBAQAogCiBzdGF0aWMgaW50IGRpZ2l0dl9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkKQogewotCWlmICgoZC0+ZmUgPSBtdDM1Ml9hdHRhY2goJmRpZ2l0dl9tdDM1Ml9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGQtPmZlID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkaWdpdHZfbXQzNTJfY29uZmlnLCAmZC0+aTJjX2FkYXApKSAhPSBOVUxMKSB7CiAJCWQtPmZlLT5vcHMudHVuZXJfb3BzLmNhbGNfcmVncyA9IGR2Yl91c2JfdHVuZXJfY2FsY19yZWdzOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKChkLT5mZSA9IG54dDYwMDBfYXR0YWNoKCZkaWdpdHZfbnh0NjAwMF9jb25maWcsICZkLT5pMmNfYWRhcCkpICE9IE5VTEwpIHsKKwlpZiAoKGQtPmZlID0gZHZiX2F0dGFjaChueHQ2MDAwX2F0dGFjaCwgJmRpZ2l0dl9ueHQ2MDAwX2NvbmZpZywgJmQtPmkyY19hZGFwKSkgIT0gTlVMTCkgewogCQlkLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZGlnaXR2X254dDYwMDBfdHVuZXJfc2V0X3BhcmFtczsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTQ3LDIxICsxNDcsOTEgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBkaWdpdHZfcmNfa2V5c1tdID0gewotCXsgMHgwMCwgMHgxNiwgS0VZX1BPV0VSIH0sIC8qIGR1bW15IGtleSAqLworCXsgMHg1ZiwgMHg1NSwgS0VZXzAgfSwKKwl7IDB4NmYsIDB4NTUsIEtFWV8xIH0sCisJeyAweDlmLCAweDU1LCBLRVlfMiB9LAorCXsgMHhhZiwgMHg1NSwgS0VZXzMgfSwKKwl7IDB4NWYsIDB4NTYsIEtFWV80IH0sCisJeyAweDZmLCAweDU2LCBLRVlfNSB9LAorCXsgMHg5ZiwgMHg1NiwgS0VZXzYgfSwKKwl7IDB4YWYsIDB4NTYsIEtFWV83IH0sCisJeyAweDVmLCAweDU5LCBLRVlfOCB9LAorCXsgMHg2ZiwgMHg1OSwgS0VZXzkgfSwKKwl7IDB4OWYsIDB4NTksIEtFWV9UViB9LAorCXsgMHhhZiwgMHg1OSwgS0VZX0FVWCB9LAorCXsgMHg1ZiwgMHg1YSwgS0VZX0RWRCB9LAorCXsgMHg2ZiwgMHg1YSwgS0VZX1BPV0VSIH0sCisJeyAweDlmLCAweDVhLCBLRVlfTUhQIH0sICAgICAvKiBsYWJlbGxlZCAnUGljdHVyZScgKi8KKwl7IDB4YWYsIDB4NWEsIEtFWV9BVURJTyB9LAorCXsgMHg1ZiwgMHg2NSwgS0VZX0lORk8gfSwKKwl7IDB4NmYsIDB4NjUsIEtFWV9GMTMgfSwgICAgIC8qIDE2OjkgKi8KKwl7IDB4OWYsIDB4NjUsIEtFWV9GMTQgfSwgICAgIC8qIDE0OjkgKi8KKwl7IDB4YWYsIDB4NjUsIEtFWV9FUEcgfSwKKwl7IDB4NWYsIDB4NjYsIEtFWV9FWElUIH0sCisJeyAweDZmLCAweDY2LCBLRVlfTUVOVSB9LAorCXsgMHg5ZiwgMHg2NiwgS0VZX1VQIH0sCisJeyAweGFmLCAweDY2LCBLRVlfRE9XTiB9LAorCXsgMHg1ZiwgMHg2OSwgS0VZX0xFRlQgfSwKKwl7IDB4NmYsIDB4NjksIEtFWV9SSUdIVCB9LAorCXsgMHg5ZiwgMHg2OSwgS0VZX0VOVEVSIH0sCisJeyAweGFmLCAweDY5LCBLRVlfQ0hBTk5FTFVQIH0sCisJeyAweDVmLCAweDZhLCBLRVlfQ0hBTk5FTERPV04gfSwKKwl7IDB4NmYsIDB4NmEsIEtFWV9WT0xVTUVVUCB9LAorCXsgMHg5ZiwgMHg2YSwgS0VZX1ZPTFVNRURPV04gfSwKKwl7IDB4YWYsIDB4NmEsIEtFWV9SRUQgfSwKKwl7IDB4NWYsIDB4OTUsIEtFWV9HUkVFTiB9LAorCXsgMHg2ZiwgMHg5NSwgS0VZX1lFTExPVyB9LAorCXsgMHg5ZiwgMHg5NSwgS0VZX0JMVUUgfSwKKwl7IDB4YWYsIDB4OTUsIEtFWV9TVUJUSVRMRSB9LAorCXsgMHg1ZiwgMHg5NiwgS0VZX0YxNSB9LCAgICAgLyogQUQgKi8KKwl7IDB4NmYsIDB4OTYsIEtFWV9URVhUIH0sCisJeyAweDlmLCAweDk2LCBLRVlfTVVURSB9LAorCXsgMHhhZiwgMHg5NiwgS0VZX1JFV0lORCB9LAorCXsgMHg1ZiwgMHg5OSwgS0VZX1NUT1AgfSwKKwl7IDB4NmYsIDB4OTksIEtFWV9QTEFZIH0sCisJeyAweDlmLCAweDk5LCBLRVlfRkFTVEZPUldBUkQgfSwKKwl7IDB4YWYsIDB4OTksIEtFWV9GMTYgfSwgICAgIC8qIGNoYXB0ZXIgKi8KKwl7IDB4NWYsIDB4OWEsIEtFWV9QQVVTRSB9LAorCXsgMHg2ZiwgMHg5YSwgS0VZX1BMQVkgfSwKKwl7IDB4OWYsIDB4OWEsIEtFWV9SRUNPUkQgfSwKKwl7IDB4YWYsIDB4OWEsIEtFWV9GMTcgfSwgICAgIC8qIHBpY3R1cmUgaW4gcGljdHVyZSAqLworCXsgMHg1ZiwgMHhhNSwgS0VZX0tQUExVUyB9LCAgLyogem9vbSBpbiAqLworCXsgMHg2ZiwgMHhhNSwgS0VZX0tQTUlOVVMgfSwgLyogem9vbSBvdXQgKi8KKwl7IDB4OWYsIDB4YTUsIEtFWV9GMTggfSwgICAgIC8qIGNhcHR1cmUgKi8KKwl7IDB4YWYsIDB4YTUsIEtFWV9GMTkgfSwgICAgIC8qIHdlYiAqLworCXsgMHg1ZiwgMHhhNiwgS0VZX0VNQUlMIH0sCisJeyAweDZmLCAweGE2LCBLRVlfUEhPTkUgfSwKKwl7IDB4OWYsIDB4YTYsIEtFWV9QQyB9LAogfTsKIAotLyogVE9ETyBpcyBpdCByZWFsbHkgdGhlIE5FQyBwcm90b2NvbCA/ICovCiBzdGF0aWMgaW50IGRpZ2l0dl9yY19xdWVyeShzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQsIHUzMiAqZXZlbnQsIGludCAqc3RhdGUpCiB7CisJaW50IGk7CiAJdTgga2V5WzVdOworCXU4IGJbNF0gPSB7IDAgfTsKKworCSpldmVudCA9IDA7CisJKnN0YXRlID0gUkVNT1RFX05PX0tFWV9QUkVTU0VEOwogCiAJZGlnaXR2X2N0cmxfbXNnKGQsVVNCX1JFQURfUkVNT1RFLDAsTlVMTCwwLCZrZXlbMV0sNCk7Ci0JLyogVE9ETyBzdGF0ZSwgbWF5YmUgaXQgaXMgVlYgPyAqLwotCWlmIChrZXlbMV0gIT0gMCkKLQkJa2V5WzBdID0gMHgwMTsgLyogaWYgc29tZXRoaW5nIGlzIGluc2lkZSB0aGUgYnVmZmVyLCBzaW11bGF0ZSBrZXkgcHJlc3MgKi8KIAotCS8qIGNhbGwgdGhlIHVuaXZlcnNhbCBORUMgcmVtb3RlIHByb2Nlc3NvciwgdG8gZmluZCBvdXQgdGhlIGtleSdzIHN0YXRlIGFuZCBldmVudCAqLwotCWR2Yl91c2JfbmVjX3JjX2tleV90b19ldmVudChkLGtleSxldmVudCxzdGF0ZSk7CisJLyogVGVsbCB0aGUgZGV2aWNlIHdlJ3ZlIHJlYWQgdGhlIHJlbW90ZS4gTm90IHN1cmUgaG93IG5lY2Vzc2FyeQorCSAgIHRoaXMgaXMsIGJ1dCB0aGUgTmVidWxhIFNESyBkb2VzIGl0LiAqLworCWRpZ2l0dl9jdHJsX21zZyhkLFVTQl9XUklURV9SRU1PVEUsMCxiLDQsTlVMTCwwKTsKKworCS8qIGlmIHNvbWV0aGluZyBpcyBpbnNpZGUgdGhlIGJ1ZmZlciwgc2ltdWxhdGUga2V5IHByZXNzICovCisJaWYgKGtleVsxXSAhPSAwKQorCXsKKwkJICBmb3IgKGkgPSAwOyBpIDwgZC0+cHJvcHMucmNfa2V5X21hcF9zaXplOyBpKyspIHsKKwkJCWlmIChkLT5wcm9wcy5yY19rZXlfbWFwW2ldLmN1c3RvbSA9PSBrZXlbMV0gJiYKKwkJCSAgICBkLT5wcm9wcy5yY19rZXlfbWFwW2ldLmRhdGEgPT0ga2V5WzJdKSB7CisJCQkJKmV2ZW50ID0gZC0+cHJvcHMucmNfa2V5X21hcFtpXS5ldmVudDsKKwkJCQkqc3RhdGUgPSBSRU1PVEVfS0VZX1BSRVNTRUQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCX0KKwl9CisKIAlpZiAoa2V5WzBdICE9IDApCiAJCWRlYl9yYygia2V5OiAleCAleCAleCAleCAleFxuIixrZXlbMF0sa2V5WzFdLGtleVsyXSxrZXlbM10sa2V5WzRdKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdHQyMDB1LmMKaW5kZXggNzBhZmNmZC4uMjdhZjRlNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHR0MjAwdS5jCkBAIC05Myw2ICs5Myw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIGR0dDIwMHVfcHJvcGVydGllczsKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV9mY19wcm9wZXJ0aWVzOwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3Byb3BlcnRpZXMgd3QyMjB1X3Byb3BlcnRpZXM7CiBzdGF0aWMgc3RydWN0IGR2Yl91c2JfcHJvcGVydGllcyB3dDIyMHVfemwwMzUzX3Byb3BlcnRpZXM7CiAKQEAgLTEwMSw2ICsxMDIsNyBAQAogewogCWlmIChkdmJfdXNiX2RldmljZV9pbml0KGludGYsJmR0dDIwMHVfcHJvcGVydGllcyxUSElTX01PRFVMRSxOVUxMKSA9PSAwIHx8CiAJCWR2Yl91c2JfZGV2aWNlX2luaXQoaW50Ziwmd3QyMjB1X3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCB8fAorCQlkdmJfdXNiX2RldmljZV9pbml0KGludGYsJnd0MjIwdV9mY19wcm9wZXJ0aWVzLFRISVNfTU9EVUxFLE5VTEwpID09IDAgfHwKIAkJZHZiX3VzYl9kZXZpY2VfaW5pdChpbnRmLCZ3dDIyMHVfemwwMzUzX3Byb3BlcnRpZXMsVEhJU19NT0RVTEUsTlVMTCkgPT0gMCkKIAkJcmV0dXJuIDA7CiAKQEAgLTExNCw2ICsxMTYsOSBAQAogCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9XQVJNKSAgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9XVDIyMFVfWkwwMzUzX0NPTEQpICB9LAogCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9aTDAzNTNfV0FSTSkgIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfV0lERVZJRVcsIFVTQl9QSURfV1QyMjBVX0ZDX0NPTEQpICB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1dJREVWSUVXLCBVU0JfUElEX1dUMjIwVV9GQ19XQVJNKSAgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9XSURFVklFVywgVVNCX1BJRF9XVDIyMFVfWkFQMjUwX0NPTEQpICB9LAogCXsgMCB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkdHQyMDB1X3VzYl90YWJsZSk7CkBAIC0xOTMsMTMgKzE5OCw1NCBAQAogCS5udW1fZGV2aWNlX2Rlc2NzID0gMSwKIAkuZGV2aWNlcyA9IHsKIAkJeyAubmFtZSA9ICJXaWRlVmlldyBXVC0yMjBVIFBlblR5cGUgUmVjZWl2ZXIgKFR5cGhvb24vRnJlZWNvbSkiLAotCQkgIC5jb2xkX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzJdLCBOVUxMIH0sCisJCSAgLmNvbGRfaWRzID0geyAmZHR0MjAwdV91c2JfdGFibGVbMl0sICZkdHQyMDB1X3VzYl90YWJsZVs4XSwgTlVMTCB9LAogCQkgIC53YXJtX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzNdLCBOVUxMIH0sCiAJCX0sCiAJCXsgTlVMTCB9LAogCX0KIH07CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV9mY19wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9IQVNfUElEX0ZJTFRFUiB8IERWQl9VU0JfTkVFRF9QSURfRklMVEVSSU5HLAorCS5waWRfZmlsdGVyX2NvdW50ID0gMTUsCisKKwkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKKwkuZmlybXdhcmUgPSAiZHZiLXVzYi13dDIyMHUtZmMwMy5mdyIsCisKKwkucG93ZXJfY3RybCAgICAgID0gZHR0MjAwdV9wb3dlcl9jdHJsLAorCS5zdHJlYW1pbmdfY3RybCAgPSBkdHQyMDB1X3N0cmVhbWluZ19jdHJsLAorCS5waWRfZmlsdGVyICAgICAgPSBkdHQyMDB1X3BpZF9maWx0ZXIsCisJLmZyb250ZW5kX2F0dGFjaCA9IGR0dDIwMHVfZnJvbnRlbmRfYXR0YWNoLAorCisJLnJjX2ludGVydmFsICAgICA9IDMwMCwKKwkucmNfa2V5X21hcCAgICAgID0gZHR0MjAwdV9yY19rZXlzLAorCS5yY19rZXlfbWFwX3NpemUgPSBBUlJBWV9TSVpFKGR0dDIwMHVfcmNfa2V5cyksCisJLnJjX3F1ZXJ5ICAgICAgICA9IGR0dDIwMHVfcmNfcXVlcnksCisKKwkuZ2VuZXJpY19idWxrX2N0cmxfZW5kcG9pbnQgPSAweDAxLAorCisJLyogcGFyYW1ldGVyIGZvciB0aGUgTVBFRzItZGF0YSB0cmFuc2ZlciAqLworCS51cmIgPSB7CisJCS50eXBlID0gRFZCX1VTQl9CVUxLLAorCQkuY291bnQgPSA3LAorCQkuZW5kcG9pbnQgPSAweDg2LAorCQkudSA9IHsKKwkJCS5idWxrID0geworCQkJCS5idWZmZXJzaXplID0gNDA5NiwKKwkJCX0KKwkJfQorCX0sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsgLm5hbWUgPSAiV2lkZVZpZXcgV1QtMjIwVSBQZW5UeXBlIFJlY2VpdmVyIChUeXBob29uL0ZyZWVjb20pIiwKKwkJICAuY29sZF9pZHMgPSB7ICZkdHQyMDB1X3VzYl90YWJsZVs2XSwgTlVMTCB9LAorCQkgIC53YXJtX2lkcyA9IHsgJmR0dDIwMHVfdXNiX3RhYmxlWzddLCBOVUxMIH0sCisJCX0sCisJCXsgTlVMTCB9LAorCX0KK307CisKIHN0YXRpYyBzdHJ1Y3QgZHZiX3VzYl9wcm9wZXJ0aWVzIHd0MjIwdV96bDAzNTNfcHJvcGVydGllcyA9IHsKIAkuY2FwcyA9IERWQl9VU0JfSEFTX1BJRF9GSUxURVIgfCBEVkJfVVNCX05FRURfUElEX0ZJTFRFUklORywKIAkucGlkX2ZpbHRlcl9jb3VudCA9IDE1LApAQCAtMjcxLDYgKzMxNyw2IEBACiBtb2R1bGVfZXhpdChkdHQyMDB1X3VzYl9tb2R1bGVfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlPiIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBXaWRlVmlldy9ZYWt1bW8vSGFtYS9UeXBob29uIERWQi1UIFVTQjIuMCBkZXZpY2VzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIFdpZGVWaWV3L1lha3Vtby9IYW1hL1R5cGhvb24vQ2x1YjNEIERWQi1UIFVTQjIuMCBkZXZpY2VzIik7CiBNT0RVTEVfVkVSU0lPTigiMS4wIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItZHZiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItZHZiLmMKaW5kZXggZWM2MzE3MC4uZmU2MjA4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1kdmIuYwpAQCAtMTc1LDM2ICsxNzUsMzYgQEAKIGludCBkdmJfdXNiX2ZlX2luaXQoc3RydWN0IGR2Yl91c2JfZGV2aWNlKiBkKQogewogCWlmIChkLT5wcm9wcy5mcm9udGVuZF9hdHRhY2ggPT0gTlVMTCkgewotCQllcnIoInN0cmFuZ2UgJyVzJyBkb2Vzbid0IHdhbnQgdG8gYXR0YWNoIGEgZnJvbnRlbmQuIixkLT5kZXNjLT5uYW1lKTsKKwkJZXJyKCJzdHJhbmdlOiAnJXMnIGRvZXNuJ3Qgd2FudCB0byBhdHRhY2ggYSBmcm9udGVuZC4iLGQtPmRlc2MtPm5hbWUpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkLT5wcm9wcy5mcm9udGVuZF9hdHRhY2goZCk7Ci0KIAkvKiByZS1hc3NpZ24gc2xlZXAgYW5kIHdha2V1cCBmdW5jdGlvbnMgKi8KLQlpZiAoZC0+ZmUgIT0gTlVMTCkgeworCWlmIChkLT5wcm9wcy5mcm9udGVuZF9hdHRhY2goZCkgPT0gMCAmJiBkLT5mZSAhPSBOVUxMKSB7CiAJCWQtPmZlX2luaXQgPSBkLT5mZS0+b3BzLmluaXQ7ICAgZC0+ZmUtPm9wcy5pbml0ICA9IGR2Yl91c2JfZmVfd2FrZXVwOwogCQlkLT5mZV9zbGVlcCA9IGQtPmZlLT5vcHMuc2xlZXA7IGQtPmZlLT5vcHMuc2xlZXAgPSBkdmJfdXNiX2ZlX3NsZWVwOwogCiAJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJmQtPmR2Yl9hZGFwLCBkLT5mZSkpIHsKIAkJCWVycigiRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZC4iKTsKLQkJCWlmIChkLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQkJZC0+ZmUtPm9wcy5yZWxlYXNlKGQtPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goZC0+ZmUpOwogCQkJZC0+ZmUgPSBOVUxMOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KKworCQkvKiBvbmx5IGF0dGFjaCB0aGUgdHVuZXIgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCisJCWlmIChkLT5wcm9wcy50dW5lcl9hdHRhY2ggIT0gTlVMTCkKKwkJCWQtPnByb3BzLnR1bmVyX2F0dGFjaChkKTsKIAl9IGVsc2UKIAkJZXJyKCJubyBmcm9udGVuZCB3YXMgYXR0YWNoZWQgYnkgJyVzJyIsZC0+ZGVzYy0+bmFtZSk7CiAKLQlpZiAoZC0+cHJvcHMudHVuZXJfYXR0YWNoICE9IE5VTEwpCi0JCWQtPnByb3BzLnR1bmVyX2F0dGFjaChkKTsKLQogCXJldHVybiAwOwogfQogCiBpbnQgZHZiX3VzYl9mZV9leGl0KHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCkKIHsKLQlpZiAoZC0+ZmUgIT0gTlVMTCkKKwlpZiAoZC0+ZmUgIT0gTlVMTCkgewogCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkLT5mZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goZC0+ZmUpOworCX0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaAppbmRleCA5NTY5ODkxLi41N2ExMGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCkBAIC0xMCw1MSArMTAsNTMgQEAKICNkZWZpbmUgX0RWQl9VU0JfSURTX0hfCiAKIC8qIFZlbmRvciBJRHMgKi8KLSNkZWZpbmUgVVNCX1ZJRF9BRFNURUNICQkJCQkJMHgwNmUxCi0jZGVmaW5lIFVTQl9WSURfQU5DSE9SCQkJCQkJMHgwNTQ3Ci0jZGVmaW5lIFVTQl9WSURfV0lERVZJRVcJCQkJCTB4MTRhYQotI2RlZmluZSBVU0JfVklEX0FWRVJNRURJQQkJCQkJMHgwN2NhCi0jZGVmaW5lIFVTQl9WSURfQ09NUFJPCQkJCQkJMHgxODViCi0jZGVmaW5lIFVTQl9WSURfQ09NUFJPX1VOSwkJCQkJMHgxNDVmCi0jZGVmaW5lIFVTQl9WSURfQ1lQUkVTUwkJCQkJCTB4MDRiNAotI2RlZmluZSBVU0JfVklEX0RJQkNPTQkJCQkJCTB4MTBiOAotI2RlZmluZSBVU0JfVklEX0RWSUNPCQkJCQkJMHgwZmU5Ci0jZGVmaW5lIFVTQl9WSURfRU1QSUEJCQkJCQkweGViMWEKLSNkZWZpbmUgVVNCX1ZJRF9HUkFORFRFQwkJCQkJMHg1MDMyCi0jZGVmaW5lIFVTQl9WSURfSEFORlRFSwkJCQkJCTB4MTVmNAotI2RlZmluZSBVU0JfVklEX0hBVVBQQVVHRQkJCQkJMHgyMDQwCi0jZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJCTB4MTAyNQotI2RlZmluZSBVU0JfVklEX0tXT1JMRAkJCQkJCTB4ZWIyYQotI2RlZmluZSBVU0JfVklEX0tZRQkJCQkJCQkweDA0NTgKLSNkZWZpbmUgVVNCX1ZJRF9NRURJT04JCQkJCQkweDE2NjAKLSNkZWZpbmUgVVNCX1ZJRF9QSU5OQUNMRQkJCQkJMHgyMzA0Ci0jZGVmaW5lIFVTQl9WSURfVklTSU9OUExVUwkJCQkJMHgxM2QzCi0jZGVmaW5lIFVTQl9WSURfVFdJTkhBTgkJCQkJCTB4MTgyMgotI2RlZmluZSBVU0JfVklEX1VMVElNQV9FTEVDVFJPTklDCQkJMHgwNWQ4Ci0jZGVmaW5lIFVTQl9WSURfR0VOUElYCQkJCQkweDA5YzAKKyNkZWZpbmUgVVNCX1ZJRF9BRFNURUNICQkJCTB4MDZlMQorI2RlZmluZSBVU0JfVklEX0FOQ0hPUgkJCQkweDA1NDcKKyNkZWZpbmUgVVNCX1ZJRF9BVkVSTUVESUEJCQkweDA3Y2EKKyNkZWZpbmUgVVNCX1ZJRF9DT01QUk8JCQkJMHgxODViCisjZGVmaW5lIFVTQl9WSURfQ09NUFJPX1VOSwkJCTB4MTQ1ZgorI2RlZmluZSBVU0JfVklEX0NZUFJFU1MJCQkJMHgwNGI0CisjZGVmaW5lIFVTQl9WSURfRElCQ09NCQkJCTB4MTBiOAorI2RlZmluZSBVU0JfVklEX0RWSUNPCQkJCTB4MGZlOQorI2RlZmluZSBVU0JfVklEX0VNUElBCQkJCTB4ZWIxYQorI2RlZmluZSBVU0JfVklEX0dFTlBJWAkJCQkweDA5YzAKKyNkZWZpbmUgVVNCX1ZJRF9HUkFORFRFQwkJCTB4NTAzMgorI2RlZmluZSBVU0JfVklEX0hBTkZURUsJCQkJMHgxNWY0CisjZGVmaW5lIFVTQl9WSURfSEFVUFBBVUdFCQkJMHgyMDQwCisjZGVmaW5lIFVTQl9WSURfSFlQRVJfUEFMVEVLCQkJMHgxMDI1CisjZGVmaW5lIFVTQl9WSURfS1dPUkxECQkJCTB4ZWIyYQorI2RlZmluZSBVU0JfVklEX0tZRQkJCQkweDA0NTgKKyNkZWZpbmUgVVNCX1ZJRF9MRUFEVEVLCQkJCTB4MDQxMworI2RlZmluZSBVU0JfVklEX0xJVEVPTgkJCQkweDA0Y2EKKyNkZWZpbmUgVVNCX1ZJRF9NRURJT04JCQkJMHgxNjYwCisjZGVmaW5lIFVTQl9WSURfUElOTkFDTEUJCQkweDIzMDQKKyNkZWZpbmUgVVNCX1ZJRF9WSVNJT05QTFVTCQkJMHgxM2QzCisjZGVmaW5lIFVTQl9WSURfVFdJTkhBTgkJCQkweDE4MjIKKyNkZWZpbmUgVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQwkJMHgwNWQ4CisjZGVmaW5lIFVTQl9WSURfV0lERVZJRVcJCQkweDE0YWEKIAogLyogUHJvZHVjdCBJRHMgKi8KICNkZWZpbmUgVVNCX1BJRF9BRFNURUNIX1VTQjJfQ09MRAkJCTB4YTMzMwogI2RlZmluZSBVU0JfUElEX0FEU1RFQ0hfVVNCMl9XQVJNCQkJMHhhMzM0Ci0jZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCX0NPTEQJCTB4MDAwMQotI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQl9XQVJNCQkweDAwMDIKLSNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0IyX0NPTEQJMHhhODAwCi0jZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCMl9XQVJNCTB4YTgwMQotI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9DT0xECQkweGQwMDAKLSNkZWZpbmUgVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfV0FSTQkJMHhkMDAxCi0jZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1VOS19DT0xECTB4MDEwYwotI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfV0FSTQkweDAxMGQKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0JfQ09MRAkJCTB4MDAwMQorI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9EVkJUX1VTQl9XQVJNCQkJMHgwMDAyCisjZGVmaW5lIFVTQl9QSURfQVZFUk1FRElBX0RWQlRfVVNCMl9DT0xECQkweGE4MDAKKyNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRFZCVF9VU0IyX1dBUk0JCTB4YTgwMQorI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9DT0xECQkJMHhkMDAwCisjZGVmaW5lIFVTQl9QSURfQ09NUFJPX0RWQlUyMDAwX1dBUk0JCQkweGQwMDEKKyNkZWZpbmUgVVNCX1BJRF9DT01QUk9fRFZCVTIwMDBfVU5LX0NPTEQJCTB4MDEwYworI2RlZmluZSBVU0JfUElEX0NPTVBST19EVkJVMjAwMF9VTktfV0FSTQkJMHgwMTBkCiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX0hPT0tfREVGQVVMVAkJCTB4MDA2NAotI2RlZmluZSBVU0JfUElEX0RJQkNPTV9IT09LX0RFRkFVTFRfUkVFTlVNCTB4MDA2NQorI2RlZmluZSBVU0JfUElEX0RJQkNPTV9IT09LX0RFRkFVTFRfUkVFTlVNCQkweDAwNjUKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMF9DT0xECQkJMHgwYmI4CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX01PRDMwMDBfV0FSTQkJCTB4MGJiOQogI2RlZmluZSBVU0JfUElEX0RJQkNPTV9NT0QzMDAxX0NPTEQJCQkweDBiYzYKICNkZWZpbmUgVVNCX1BJRF9ESUJDT01fTU9EMzAwMV9XQVJNCQkJMHgwYmM3CiAjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzc3MDAJCQkJMHgxZTE0Ci0jZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzc3MDBfUkVFTlVNCQkweDFlMTUKLSNkZWZpbmUgVVNCX1BJRF9ESUJDT01fQU5DSE9SXzIxMzVfQ09MRAkJMHgyMTMxCi0jZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfQ09MRAkJMHgwZmEwCi0jZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJMHgwZmExCisjZGVmaW5lIFVTQl9QSURfRElCQ09NX1NUSzc3MDBfUkVFTlVNCQkJMHgxZTE1CisjZGVmaW5lIFVTQl9QSURfRElCQ09NX0FOQ0hPUl8yMTM1X0NPTEQJCQkweDIxMzEKKyNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9DT0xECQkJMHgwZmEwCisjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0JfV0FSTQkJCTB4MGZhMQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX0NPTEQJCQkweDE3ZGUKICNkZWZpbmUgVVNCX1BJRF9LV09STERfVlNUUkVBTV9XQVJNCQkJMHgxN2RmCiAjZGVmaW5lIFVTQl9QSURfVFdJTkhBTl9WUDcwNDFfQ09MRAkJCTB4MzIwMQpAQCAtNjksMjUgKzcxLDMwIEBACiAjZGVmaW5lIFVTQl9QSURfRE5UVl9USU5ZVVNCMl9XQVJNCQkJMHgzMjI0CiAjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0NPTEQJCQkweDgxMDUKICNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfV0FSTQkJCTB4ODEwNgotI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9BTjIyMzVfQ09MRAkweDgxMDcKLSNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X1dBUk0JMHg4MTA4Ci0jZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0FOQ0hPUl9DT0xECTB4MjIzNQotI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0NPTEQJCTB4ODEwOQotI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX1dBUk0JCTB4ODEwYQotI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0ZYX0NPTEQJMHg4NjEzCi0jZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfRlhfV0FSTQkweDEwMDIKLSNkZWZpbmUgVVNCX1BJRF9VTktfSFlQRVJfUEFMVEVLX0NPTEQJCTB4MDA1ZQotI2RlZmluZSBVU0JfUElEX1VOS19IWVBFUl9QQUxURUtfV0FSTQkJMHgwMDVmCi0jZGVmaW5lIFVTQl9QSURfSEFORlRFS19VTVRfMDEwX0NPTEQJCTB4MDAwMQotI2RlZmluZSBVU0JfUElEX0hBTkZURUtfVU1UXzAxMF9XQVJNCQkweDAwMTUKKyNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfQU4yMjM1X0NPTEQJCTB4ODEwNworI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9BTjIyMzVfV0FSTQkJMHg4MTA4CisjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX0FOQ0hPUl9DT0xECQkweDIyMzUKKyNkZWZpbmUgVVNCX1BJRF9VTFRJTUFfVFZCT1hfVVNCMl9DT0xECQkJMHg4MTA5CisjZGVmaW5lIFVTQl9QSURfVUxUSU1BX1RWQk9YX1VTQjJfV0FSTQkJCTB4ODEwYQorI2RlZmluZSBVU0JfUElEX0FSVEVDX1QxNF9DT0xECQkJCTB4ODEwYgorI2RlZmluZSBVU0JfUElEX0FSVEVDX1QxNF9XQVJNCQkJCTB4ODEwYworI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0ZYX0NPTEQJCTB4ODYxMworI2RlZmluZSBVU0JfUElEX1VMVElNQV9UVkJPWF9VU0IyX0ZYX1dBUk0JCTB4MTAwMgorI2RlZmluZSBVU0JfUElEX1VOS19IWVBFUl9QQUxURUtfQ09MRAkJCTB4MDA1ZQorI2RlZmluZSBVU0JfUElEX1VOS19IWVBFUl9QQUxURUtfV0FSTQkJCTB4MDA1ZgorI2RlZmluZSBVU0JfUElEX0hBTkZURUtfVU1UXzAxMF9DT0xECQkJMHgwMDAxCisjZGVmaW5lIFVTQl9QSURfSEFORlRFS19VTVRfMDEwX1dBUk0JCQkweDAwMTUKICNkZWZpbmUgVVNCX1BJRF9EVFQyMDBVX0NPTEQJCQkJMHgwMjAxCiAjZGVmaW5lIFVTQl9QSURfRFRUMjAwVV9XQVJNCQkJCTB4MDMwMQotI2RlZmluZSBVU0JfUElEX1dUMjIwVV9DT0xECQkJCQkweDAyMjIKLSNkZWZpbmUgVVNCX1BJRF9XVDIyMFVfV0FSTQkJCQkJMHgwMjIxCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1pBUDI1MF9DT0xECQkJMHgwMjIwCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX0NPTEQJCQkJMHgwMjIyCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1dBUk0JCQkJMHgwMjIxCisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX0ZDX0NPTEQJCQkJMHgwMjI1CisjZGVmaW5lIFVTQl9QSURfV1QyMjBVX0ZDX1dBUk0JCQkJMHgwMjI2CiAjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1pMMDM1M19DT0xECQkJMHgwMjJhCiAjZGVmaW5lIFVTQl9QSURfV1QyMjBVX1pMMDM1M19XQVJNCQkJMHgwMjJiCi0jZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfQ09MRAkJMHg5MzAwCi0jZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfV0FSTQkJMHg5MzAxCisjZGVmaW5lIFVTQl9QSURfV0lOVFZfTk9WQV9UX1VTQjJfQ09MRAkJCTB4OTMwMAorI2RlZmluZSBVU0JfUElEX1dJTlRWX05PVkFfVF9VU0IyX1dBUk0JCQkweDkzMDEKICNkZWZpbmUgVVNCX1BJRF9ORUJVTEFfRElHSVRWCQkJCTB4MDIwMQogI2RlZmluZSBVU0JfUElEX0RWSUNPX0JMVUVCSVJEX0xHRFQJCQkweGQ4MjAKICNkZWZpbmUgVVNCX1BJRF9EVklDT19CTFVFQklSRF9MRzA2NEZfQ09MRAkJMHhkNTAwCkBAIC0xMDMsOCArMTEwLDE3IEBACiAjZGVmaW5lIFVTQl9QSURfTUVESU9OX01EOTU3MDAJCQkJMHgwOTMyCiAjZGVmaW5lIFVTQl9QSURfS1lFX0RWQl9UX0NPTEQJCQkJMHg3MDFlCiAjZGVmaW5lIFVTQl9QSURfS1lFX0RWQl9UX1dBUk0JCQkJMHg3MDFmCi0jZGVmaW5lIFVTQl9QSURfUENUVl8yMDBFCQkJCQkweDAyMGUKLSNkZWZpbmUgVVNCX1BJRF9QQ1RWXzQwMEUJCQkJCTB4MDIwZgotI2RlZmluZSBVU0JfUElEX0dFTlBJWF84UFNLX0NPTEQJCQkJMHgwMjAwCi0jZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfV0FSTQkJCQkweDAyMDEKKyNkZWZpbmUgVVNCX1BJRF9QQ1RWXzIwMEUJCQkJMHgwMjBlCisjZGVmaW5lIFVTQl9QSURfUENUVl80MDBFCQkJCTB4MDIwZgorI2RlZmluZSBVU0JfUElEX0xJVEVPTl9EVkJfVF9DT0xECQkJMHhmMDAwCisjZGVmaW5lIFVTQl9QSURfTElURU9OX0RWQl9UX1dBUk0JCQkweGYwMDEKKyNkZWZpbmUgVVNCX1BJRF9ESUdJVk9YX01JTklfU0xfQ09MRAkJCTB4ZTM2MAorI2RlZmluZSBVU0JfUElEX0RJR0lWT1hfTUlOSV9TTF9XQVJNCQkJMHhlMzYxCisjZGVmaW5lIFVTQl9QSURfR1JBTkRURUNfRFZCVF9VU0IyX0NPTEQJCQkweDBiYzYKKyNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQjJfV0FSTQkJCTB4MGJjNworI2RlZmluZSBVU0JfUElEX1dJTkZBU1RfRFRWX0RPTkdMRV9DT0xECQkJMHg2MDI1CisjZGVmaW5lIFVTQl9QSURfV0lORkFTVF9EVFZfRE9OR0xFX1dBUk0JCQkweDYwMjYKKyNkZWZpbmUgVVNCX1BJRF9HRU5QSVhfOFBTS19DT0xECQkJMHgwMjAwCisjZGVmaW5lIFVTQl9QSURfR0VOUElYXzhQU0tfV0FSTQkJCTB4MDIwMQorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1yZW1vdGUuYwppbmRleCBlNWM2ZDk4Li4zODBiMmE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItcmVtb3RlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXJlbW90ZS5jCkBAIC02LDYgKzYsNyBAQAogICogVGhpcyBmaWxlIGNvbnRhaW5zIGZ1bmN0aW9ucyBmb3IgaW5pdGlhbGl6aW5nIHRoZSB0aGUgaW5wdXQtZGV2aWNlIGFuZCBmb3IgaGFuZGxpbmcgcmVtb3RlLWNvbnRyb2wtcXVlcmllcy4KICAqLwogI2luY2x1ZGUgImR2Yi11c2ItY29tbW9uLmgiCisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CiAKIC8qIFJlbW90ZS1jb250cm9sIHBvbGwgZnVuY3Rpb24gLSBjYWxsZWQgZXZlcnkgZGliLT5yY19xdWVyeV9pbnRlcnZhbCBtcyB0byBzZWUKICAqIHdoZXRoZXIgdGhlIHJlbW90ZSBjb250cm9sIGhhcyByZWNlaXZlZCBhbnl0aGluZy4KQEAgLTk2LDcgKzk3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAl1c2JfbWFrZV9wYXRoKGQtPnVkZXYsIGQtPnJjX3BoeXMsIHNpemVvZihkLT5yY19waHlzKSk7Ci0Jc3RybGNweShkLT5yY19waHlzLCAiL2lyMCIsIHNpemVvZihkLT5yY19waHlzKSk7CisJc3RybGNhdChkLT5yY19waHlzLCAiL2lyMCIsIHNpemVvZihkLT5yY19waHlzKSk7CiAKIAlkLT5yY19pbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWQtPnJjX2lucHV0X2RldikKQEAgLTEwNyw2ICsxMDgsOCBAQAogCWQtPnJjX2lucHV0X2Rldi0+a2V5Y29kZW1heCA9IEtFWV9NQVg7CiAJZC0+cmNfaW5wdXRfZGV2LT5uYW1lID0gIklSLXJlY2VpdmVyIGluc2lkZSBhbiBVU0IgRFZCIHJlY2VpdmVyIjsKIAlkLT5yY19pbnB1dF9kZXYtPnBoeXMgPSBkLT5yY19waHlzOworCXVzYl90b19pbnB1dF9pZChkLT51ZGV2LCAmZC0+cmNfaW5wdXRfZGV2LT5pZCk7CisJZC0+cmNfaW5wdXRfZGV2LT5jZGV2LmRldiA9ICZkLT51ZGV2LT5kZXY7CiAKIAkvKiBzZXQgdGhlIGJpdHMgZm9yIHRoZSBrZXlzICovCiAJZGViX3JjKCJrZXkgbWFwIHNpemU6ICVkXG4iLCBkLT5wcm9wcy5yY19rZXlfbWFwX3NpemUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLXVyYi5jCmluZGV4IDkwMDJmMzUuLjg4YjI4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi11cmIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItdXJiLmMKQEAgLTgwLDcgKzgwLDYgQEAKIAogCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKIAkJY2FzZSAwOiAgICAgICAgIC8qIHN1Y2Nlc3MgKi8KLQkJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KIAkJCWJyZWFrOwogCQljYXNlIC1FQ09OTlJFU0VUOiAgIC8qIGtpbGwgKi8KIAkJY2FzZSAtRU5PRU5UOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9ub3ZhLXQtdXNiMi5jCmluZGV4IDQxMjAzOWQuLjc5ZjBhMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2Ivbm92YS10LXVzYjIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL25vdmEtdC11c2IyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogCS5waWRfZmlsdGVyX2NvdW50ID0gMzIsCiAKIAkudXNiX2N0cmwgPSBDWVBSRVNTX0ZYMiwKLQkuZmlybXdhcmUgPSAiZHZiLXVzYi1ub3ZhLXQtdXNiMi0wMS5mdyIsCisJLmZpcm13YXJlID0gImR2Yi11c2Itbm92YS10LXVzYjItMDIuZnciLAogCiAJLnNpemVfb2ZfcHJpdiAgICAgPSBzaXplb2Yoc3RydWN0IGRpYnVzYl9zdGF0ZSksCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvdW10LTAxMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKaW5kZXggOTdkNzRkYS4uNDE4YTBiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi91bXQtMDEwLmMKQEAgLTU4LDcgKzU4LDcgQEAKIAl1bXRfY29uZmlnLmRlbW9kX2luaXQgPSB1bXRfbXQzNTJfZGVtb2RfaW5pdDsKIAl1bXRfY29uZmlnLmRlbW9kX2FkZHJlc3MgPSAweGY7CiAKLQlkLT5mZSA9IG10MzUyX2F0dGFjaCgmdW10X2NvbmZpZywgJmQtPmkyY19hZGFwKTsKKwlkLT5mZSA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmdW10X2NvbmZpZywgJmQtPmkyY19hZGFwKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwppbmRleCBkYjk3ODU1Li4wODBmYTI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZwpAQCAtMSw0OCArMSw3MyBAQAogbWVudSAiQ3VzdG9taXNlIERWQiBGcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCitjb25maWcgRFZCX0ZFX0NVU1RPTUlTRQorCWJvb2wgIkN1c3RvbWlzZSB0aGUgZnJvbnRlbmQgbW9kdWxlcyB0byBidWlsZCIKKwlkZWZhdWx0IE4KKwloZWxwCisJICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBkZXNlbGVjdCBmcm9udGVuZCBkcml2ZXJzIHVubmVjZXNzYXJ5CisJICBmb3IgdGhlaXIgaGFyZHdhcmUgZnJvbSB0aGUgYnVpbGQuIFVzZSB0aGlzIG9wdGlvbiB3aXRoIGNhcmUKKwkgIGFzIGRlc2VsZWN0aW5nIGZyb250ZW5kcyB3aGljaCBhcmUgaW4gZmFjdCBuZWNlc3Nhcnkgd2lsbCByZXN1bHQKKwkgIGluIERWQiBkZXZpY2VzIHdoaWNoIGNhbm5vdCBiZSB0dW5lZCBkdWUgdG8gbGFjayBvZiBkcml2ZXIgc3VwcG9ydC4KKworCSAgSWYgdW5zdXJlIHNheSBOLgorCiBjb21tZW50ICJEVkItUyAoc2F0ZWxsaXRlKSBmcm9udGVuZHMiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCiBjb25maWcgRFZCX1NUVjAyOTkKIAl0cmlzdGF0ZSAiU1QgU1RWMDI5OSBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0NYMjQxMTAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyNDExMCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0NYMjQxMjMKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyNDEyMyBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX1REQTgwODMKIAl0cmlzdGF0ZSAiUGhpbGlwcyBUREE4MDgzIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTVQzMTIKIAl0cmlzdGF0ZSAiWmFybGluayBWUDMxMC9NVDMxMiBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX1ZFUzFYOTMKIAl0cmlzdGF0ZSAiVkxTSSBWRVMxODkzIG9yIFZFUzE5OTMgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9TNUgxNDIwCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzVIMTQyMCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCitjb25maWcgRFZCX1REQTEwMDg2CisJdHJpc3RhdGUgIlBoaWxpcHMgVERBMTAwODYgYmFzZWQiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIApAQCAtNTIsNiArNzcsNyBAQAogY29uZmlnIERWQl9TUDg4NzAKIAl0cmlzdGF0ZSAiU3Bhc2Ugc3A4ODcwIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpAQCAtNjQsNiArOTAsNyBAQAogY29uZmlnIERWQl9TUDg4N1gKIAl0cmlzdGF0ZSAiU3Bhc2Ugc3A4ODd4IGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgpAQCAtNzYsMjQgKzEwMywyOCBAQAogY29uZmlnIERWQl9DWDIyNzAwCiAJdHJpc3RhdGUgIkNvbmV4YW50IENYMjI3MDAgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9DWDIyNzAyCiAJdHJpc3RhdGUgIkNvbmV4YW50IGN4MjI3MDIgZGVtb2R1bGF0b3IgKE9GRE0pIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfTDY0NzgxCiAJdHJpc3RhdGUgIkxTSSBMNjQ3ODEiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9UREExMDA0WAogCXRyaXN0YXRlICJQaGlsaXBzIFREQTEwMDQ1SC9UREExMDA0NkggYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBIERWQi1UIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCkBAIC0xMDcsMjQgKzEzOCwyOCBAQAogY29uZmlnIERWQl9OWFQ2MDAwCiAJdHJpc3RhdGUgIk54dFdhdmUgQ29tbXVuaWNhdGlvbnMgTlhUNjAwMCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX01UMzUyCiAJdHJpc3RhdGUgIlphcmxpbmsgTVQzNTIgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAogY29uZmlnIERWQl9aTDEwMzUzCiAJdHJpc3RhdGUgIlphcmxpbmsgWkwxMDM1MyBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX0RJQjMwMDBNQgogCXRyaXN0YXRlICJEaUJjb20gMzAwME0tQiIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIERlc2lnbmVkIGZvciBtb2JpbGUgdXNhZ2UuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KQEAgLTEzMiw2ICsxNjcsNyBAQAogY29uZmlnIERWQl9ESUIzMDAwTUMKIAl0cmlzdGF0ZSAiRGlCY29tIDMwMDBQL00tQyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItVCB0dW5lciBtb2R1bGUuIERlc2lnbmVkIGZvciBtb2JpbGUgdXNhZ2UuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KQEAgLTE0MiwxOCArMTc4LDIxIEBACiBjb25maWcgRFZCX1ZFUzE4MjAKIAl0cmlzdGF0ZSAiVkxTSSBWRVMxODIwIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBIERWQi1DIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKIGNvbmZpZyBEVkJfVERBMTAwMjEKIAl0cmlzdGF0ZSAiUGhpbGlwcyBUREExMDAyMSBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItQyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCiBjb25maWcgRFZCX1NUVjAyOTcKIAl0cmlzdGF0ZSAiU1QgU1RWMDI5NyBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBEVkItQyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCkBAIC0xNjMsNiArMjAyLDcgQEAKIGNvbmZpZyBEVkJfTlhUMjAwWAogCXRyaXN0YXRlICJOeHRXYXZlIENvbW11bmljYXRpb25zIE5YVDIwMDIvTlhUMjAwNCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudApAQCAtMTc3LDYgKzIxNyw3IEBACiBjb25maWcgRFZCX09SNTEyMTEKIAl0cmlzdGF0ZSAiT3JlbiBPUjUxMjExIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRldfTE9BREVSCiAJaGVscAogCSAgQW4gQVRTQyA4VlNCIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCkBAIC0xODksNiArMjMwLDcgQEAKIGNvbmZpZyBEVkJfT1I1MTEzMgogCXRyaXN0YXRlICJPcmVuIE9SNTExMzIgYmFzZWQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKQEAgLTIwNCw2ICsyNDYsNyBAQAogY29uZmlnIERWQl9CQ00zNTEwCiAJdHJpc3RhdGUgIkJyb2FkY29tIEJDTTM1MTAiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBGV19MT0FERVIKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IvMTZWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8KQEAgLTIxMiwyOCArMjU1LDUyIEBACiBjb25maWcgRFZCX0xHRFQzMzBYCiAJdHJpc3RhdGUgIkxHIEVsZWN0cm9uaWNzIExHRFQzMzAyL0xHRFQzMzAzIGJhc2VkIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKIAkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAotCi1jb21tZW50ICJNaXNjZWxsYW5lb3VzIGRldmljZXMiCitjb21tZW50ICJUdW5lcnMvUExMIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRQogCiBjb25maWcgRFZCX1BMTAogCXRyaXN0YXRlCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKIAorY29uZmlnIERWQl9UREE4MjZYCisJdHJpc3RhdGUgIlBoaWxpcHMgVERBODI2WCBzaWxpY29uIHR1bmVyIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1TIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KKworY29uZmlnIERWQl9UVU5FUl9NVDIwNjAKKwl0cmlzdGF0ZSAiTWljcm90dW5lIE1UMjA2MCBzaWxpY29uIElGIHR1bmVyIgorCWhlbHAKKwkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBJRiB0dW5lciBNVDIwNjAgZnJvbSBNaWNyb3R1bmUuCisKK2NvbW1lbnQgIk1pc2NlbGxhbmVvdXMgZGV2aWNlcyIKKwlkZXBlbmRzIG9uIERWQl9DT1JFCisKIGNvbmZpZyBEVkJfTE5CUDIxCiAJdHJpc3RhdGUgIkxOQlAyMSBTRUMgY29udHJvbGxlciIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQW4gU0VDIGNvbnRyb2wgY2hpcC4KIAogY29uZmlnIERWQl9JU0w2NDIxCiAJdHJpc3RhdGUgIklTTDY0MjEgU0VDIGNvbnRyb2xsZXIiCiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIEFuIFNFQyBjb250cm9sIGNoaXAuCiAKK2NvbmZpZyBEVkJfVFVBNjEwMAorCXRyaXN0YXRlICJUVUE2MTAwIFBMTCIKKwlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQworCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJaGVscAorCSAgQSBEVkJTIFBMTCBjaGlwLgorCiBlbmRtZW51CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggMGU0ODgwYi4uZGNlOWNmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtMTEsOCArMTEsOCBAQAogb2JqLSQoQ09ORklHX0RWQl9DWDI0MTEwKSArPSBjeDI0MTEwLm8KIG9iai0kKENPTkZJR19EVkJfVERBODA4MykgKz0gdGRhODA4My5vCiBvYmotJChDT05GSUdfRFZCX0w2NDc4MSkgKz0gbDY0NzgxLm8KLW9iai0kKENPTkZJR19EVkJfRElCMzAwME1CKSArPSBkaWIzMDAwbWIubyBkaWIzMDAwLWNvbW1vbi5vCi1vYmotJChDT05GSUdfRFZCX0RJQjMwMDBNQykgKz0gZGliMzAwMG1jLm8gZGliMzAwMC1jb21tb24ubworb2JqLSQoQ09ORklHX0RWQl9ESUIzMDAwTUIpICs9IGRpYjMwMDBtYi5vCitvYmotJChDT05GSUdfRFZCX0RJQjMwMDBNQykgKz0gZGliMzAwMG1jLm8gZGlieDAwMF9jb21tb24ubwogb2JqLSQoQ09ORklHX0RWQl9NVDMxMikgKz0gbXQzMTIubwogb2JqLSQoQ09ORklHX0RWQl9WRVMxODIwKSArPSB2ZXMxODIwLm8KIG9iai0kKENPTkZJR19EVkJfVkVTMVg5MykgKz0gdmVzMXg5My5vCkBAIC0zMywzICszMyw3IEBACiBvYmotJChDT05GSUdfRFZCX0NYMjQxMjMpICs9IGN4MjQxMjMubwogb2JqLSQoQ09ORklHX0RWQl9MTkJQMjEpICs9IGxuYnAyMS5vCiBvYmotJChDT05GSUdfRFZCX0lTTDY0MjEpICs9IGlzbDY0MjEubworb2JqLSQoQ09ORklHX0RWQl9UREExMDA4NikgKz0gdGRhMTAwODYubworb2JqLSQoQ09ORklHX0RWQl9UREE4MjZYKSArPSB0ZGE4MjZ4Lm8KK29iai0kKENPTkZJR19EVkJfVFVORVJfTVQyMDYwKSArPSBtdDIwNjAubworb2JqLSQoQ09ORklHX0RWQl9UVUE2MTAwKSArPSB0dWE2MTAwLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYmNtMzUxMC5oCmluZGV4IDgwZjVkMDkuLjZkZmE4MzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9iY20zNTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2JjbTM1MTAuaApAQCAtMzQsNyArMzQsMTYgQEAKIAlpbnQgKCpyZXF1ZXN0X2Zpcm13YXJlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9CQ00zNTEwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfQkNNMzUxMF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogYmNtMzUxMF9hdHRhY2goY29uc3Qgc3RydWN0IGJjbTM1MTBfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGJjbTM1MTBfYXR0YWNoKGNvbnN0IHN0cnVjdCBiY20zNTEwX2NvbmZpZyogY29uZmlnLAorCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9CQ00zNTEwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAwLmgKaW5kZXggZGNkODk3OS4uMTAyODZjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMC5oCkBAIC0zMSw3ICszMSwxNiBAQAogCXU4IGRlbW9kX2FkZHJlc3M7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0NYMjI3MDApIHx8IGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAwX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDIyNzAwX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyMjcwMF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMF9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDBfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX0NYMjI3MDAKIAogI2VuZGlmIC8vIENYMjI3MDBfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmMKaW5kZXggNDEwNmQ0Ni4uMzM1MjE5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5jCkBAIC0zOTksNyArMzk5LDkgQEAKIHsKIAlzdHJ1Y3QgY3gyMjcwMl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCSpzaWduYWxfc3RyZW5ndGggPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDIzKTsKKwl1MTYgcnNfYmVyID0gMDsKKwlyc19iZXIgPSBjeDIyNzAyX3JlYWRyZWcgKHN0YXRlLCAweDIzKTsKKwkqc2lnbmFsX3N0cmVuZ3RoID0gKHJzX2JlciA8PCA4KSB8IHJzX2JlcjsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDIyNzAyLmgKaW5kZXggN2YyZjI0MS4uYmMyMTdkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjI3MDIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyMjcwMi5oCkBAIC00MSw3ICs0MSwxNiBAQAogCXU4IG91dHB1dF9tb2RlOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9DWDIyNzAyKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfQ1gyMjcwMl9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogY3gyMjcwMl9hdHRhY2goY29uc3Qgc3RydWN0IGN4MjI3MDJfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjI3MDJfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDIyNzAyX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9DWDIyNzAyCiAKICNlbmRpZiAvLyBDWDIyNzAyX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5jCmluZGV4IGNlM2M3MzkuLmFlOTYzOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuYwpAQCAtMSw0ICsxLDQgQEAKLS8qCisJLyoKICAgICBjeDI0MTEwIC0gU2luZ2xlIENoaXAgU2F0ZWxsaXRlIENoYW5uZWwgUmVjZWl2ZXIgZHJpdmVyIG1vZHVsZQogCiAgICAgQ29weXJpZ2h0IChDKSAyMDAyIFBldGVyIEhldHRrYW1wIDxwZXRlci5oZXR0a2FtcEBodHAtdGVsLmRlPiBiYXNlZCBvbgpAQCAtMzExLDE2ICszMTEsMTcgQEAKIAogfQogCi1pbnQgY3gyNDExMF9wbGxfd3JpdGUgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgZGF0YSkKK3N0YXRpYyBpbnQgX2N4MjQxMTBfcGxsX3dyaXRlIChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTggKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgY3gyNDExMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAorCWlmIChsZW4gIT0gMykKKwkJcmV0dXJuIC1FSU5WQUw7CisKIC8qIHR1bmVyIGRhdGEgaXMgMjEgYml0cyBsb25nLCBtdXN0IGJlIGxlZnQtYWxpZ25lZCBpbiBkYXRhICovCiAvKiB0dW5lciBjeDI0MTA4IGlzIHdyaXR0ZW4gdGhyb3VnaCBhIGRlZGljYXRlZCAzd2lyZSBpbnRlcmZhY2Ugb24gdGhlIGRlbW9kIGNoaXAgKi8KIC8qIEZJWE1FIChsb3cpOiBhZGQgZXJyb3IgaGFuZGxpbmcsIGF2b2lkIGluZmluaXRlIGxvb3BzIGlmIEhXIGZhaWxzLi4uICovCiAKLQlkcHJpbnRrKCJjeDI0MTEwIGRlYnVnOiBjeDI0MTA4X3dyaXRlKCU4Ljh4KVxuIixkYXRhKTsKLQogCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHg2ZCwweDMwKTsgLyogYXV0byBtb2RlIGF0IDYya0h6ICovCiAJY3gyNDExMF93cml0ZXJlZyhzdGF0ZSwweDcwLDB4MTUpOyAvKiBhdXRvIG1vZGUgMjEgYml0cyAqLwogCkBAIC0zMjksMTkgKzMzMCwxOSBAQAogCQljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLDB4NzIsMCk7CiAKIAkvKiB3cml0ZSB0aGUgdG9wbW9zdCA4IGJpdHMgKi8KLQljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLDB4NzIsKGRhdGE+PjI0KSYweGZmKTsKKwljeDI0MTEwX3dyaXRlcmVnKHN0YXRlLDB4NzIsYnVmWzBdKTsKIAogCS8qIHdhaXQgZm9yIHRoZSBzZW5kIHRvIGJlIGNvbXBsZXRlZCAqLwogCXdoaWxlICgoY3gyNDExMF9yZWFkcmVnKHN0YXRlLDB4NmQpJjB4YzApPT0weDgwKQogCQk7CiAKIAkvKiBzZW5kIGFub3RoZXIgOCBieXRlcyAqLwotCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHg3MiwoZGF0YT4+MTYpJjB4ZmYpOworCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHg3MixidWZbMV0pOwogCXdoaWxlICgoY3gyNDExMF9yZWFkcmVnKHN0YXRlLDB4NmQpJjB4YzApPT0weDgwKQogCQk7CiAKIAkvKiBhbmQgdGhlIHRvcG1vc3QgNSBiaXRzIG9mIHRoaXMgYnl0ZSAqLwotCWN4MjQxMTBfd3JpdGVyZWcoc3RhdGUsMHg3MiwoZGF0YT4+OCkmMHhmZik7CisJY3gyNDExMF93cml0ZXJlZyhzdGF0ZSwweDcyLGJ1ZlsyXSk7CiAJd2hpbGUgKChjeDI0MTEwX3JlYWRyZWcoc3RhdGUsMHg2ZCkmMHhjMCk9PTB4ODApCiAJCTsKIApAQCAtNjQyLDYgKzY0Myw3IEBACiAJLnJlbGVhc2UgPSBjeDI0MTEwX3JlbGVhc2UsCiAKIAkuaW5pdCA9IGN4MjQxMTBfaW5pdGZlLAorCS53cml0ZSA9IF9jeDI0MTEwX3BsbF93cml0ZSwKIAkuc2V0X2Zyb250ZW5kID0gY3gyNDExMF9zZXRfZnJvbnRlbmQsCiAJLmdldF9mcm9udGVuZCA9IGN4MjQxMTBfZ2V0X2Zyb250ZW5kLAogCS5yZWFkX3N0YXR1cyA9IGN4MjQxMTBfcmVhZF9zdGF0dXMsCkBAIC02NjQsNCArNjY2LDMgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogRVhQT1JUX1NZTUJPTChjeDI0MTEwX2F0dGFjaCk7Ci1FWFBPUlRfU1lNQk9MKGN4MjQxMTBfcGxsX3dyaXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMC5oCmluZGV4IGIzNTRhNjQuLmM5ZDVhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEwLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTAuaApAQCAtMzMsOSArMzMsMjQgQEAKIAl1OCBkZW1vZF9hZGRyZXNzOwogfTsKIAorc3RhdGljIGlubGluZSBpbnQgY3gyNDExMF9wbGxfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiB2YWwpIHsKKwlpbnQgciA9IDA7CisJdTggYnVmW10gPSB7KHU4KSAodmFsPj4yNCksICh1OCkgKHZhbD4+MTYpLCAodTgpICh2YWw+PjgpfTsKKwlpZiAoZmUtPm9wcy53cml0ZSkKKwkJciA9IGZlLT5vcHMud3JpdGUoZmUsIGJ1ZiwgMyk7CisJcmV0dXJuIHI7Cit9CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDExMCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMTBfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTBfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTEwX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7Ci0KLWV4dGVybiBpbnQgY3gyNDExMF9wbGxfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUzMiBkYXRhKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMTBfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTEwX2NvbmZpZyogY29uZmlnLAorCQkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9DWDI0MTEwCiAKICNlbmRpZiAvLyBDWDI0MTEwX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IDI3NGE4N2IuLjYyZDY5YTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtNDUsOSArNDUsNiBAQAogCiAJc3RydWN0IGR2Yl9mcm9udGVuZCBmcm9udGVuZDsKIAotCXUzMiBsYXN0YmVyOwotCXUxNiBzbnI7Ci0KIAkvKiBTb21lIFBMTCBzcGVjaWZpY3MgZm9yIHR1bmluZyAqLwogCXUzMiBWQ0Fhcmc7CiAJdTMyIFZHQWFyZzsKQEAgLTE5NCw3ICsxOTEsNyBAQAogCXsweDA2LCAweDMxfSwgLyogTVBFRyAoZGVmYXVsdCkgKi8KIAl7MHgwYiwgMHgwMH0sIC8qIEZyZXEgc2VhcmNoIHN0YXJ0IHBvaW50IChkZWZhdWx0KSAqLwogCXsweDBjLCAweDAwfSwgLyogRGVtb2R1bGF0b3Igc2FtcGxlIGdhaW4gKGRlZmF1bHQpICovCi0JezB4MGQsIDB4MDJ9LCAvKiBGcmVxdWVuY3kgc2VhcmNoIHJhbmdlID0gRnN5bWJvbCAvIDQgKGRlZmF1bHQpICovCisJezB4MGQsIDB4N2Z9LCAvKiBGb3JjZSBkcml2ZXIgdG8gc2hpZnQgdW50aWwgdGhlIG1heGltdW0gKCstMTAgTUh6KSAqLwogCXsweDBlLCAweDAzfSwgLyogRGVmYXVsdCBub24taW52ZXJ0ZWQsIEZFQyAzLzQgKGRlZmF1bHQpICovCiAJezB4MGYsIDB4ZmV9LCAvKiBGRUMgc2VhcmNoIG1hc2sgKGFsbCBzdXBwb3J0ZWQgY29kZXMpICovCiAJezB4MTAsIDB4MDF9LCAvKiBEZWZhdWx0IHNlYXJjaCBpbnZlcnNpb24sIG5vIHJlcGVhdCAoZGVmYXVsdCkgKi8KQEAgLTIyMyw4ICsyMjAsOSBAQAogCXsweDQ0LCAweDAwfSwgLyogQ29uc3RlbGxhdGlvbiAoZGVmYXVsdCkgKi8KIAl7MHg0NSwgMHgwMH0sIC8qIFN5bWJvbCBjb3VudCAoZGVmYXVsdCkgKi8KIAl7MHg0NiwgMHgwZH0sIC8qIFN5bWJvbCByYXRlIGVzdGltYXRvciBvbiAoZGVmYXVsdCkgKi8KLQl7MHg1NiwgMHg0MX0sIC8qIFZhcmlvdXMgKGRlZmF1bHQpICovCisJezB4NTYsIDB4YzF9LCAvKiBFcnJvciBDb3VudGVyID0gVml0ZXJiaSBCRVIgKi8KIAl7MHg1NywgMHhmZn0sIC8qIEVycm9yIENvdW50ZXIgV2luZG93IChkZWZhdWx0KSAqLworCXsweDVjLCAweDIwfSwgLyogQWNxdWlzaXRpb24gQUZDIEV4cGlyYXRpb24gd2luZG93IChkZWZhdWx0IGlzIDB4MTApICovCiAJezB4NjcsIDB4ODN9LCAvKiBOb24tRENJSSBzeW1ib2wgY2xvY2sgKi8KIH07CiAKQEAgLTMyMSw2ICszMTksMTIgQEAKIAlpZiAoIChmZWMgPCBGRUNfTk9ORSkgfHwgKGZlYyA+IEZFQ19BVVRPKSApCiAJCWZlYyA9IEZFQ19BVVRPOwogCisJLyogU2V0IHRoZSBzb2Z0IGRlY2lzaW9uIHRocmVzaG9sZCAqLworCWlmKGZlYyA9PSBGRUNfMV8yKQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpIHwgMHgwMSk7CisJZWxzZQorCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCAweDQzLCBjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4NDMpICYgfjB4MDEpOworCiAJc3dpdGNoIChmZWMpIHsKIAljYXNlIEZFQ18xXzI6CiAJCWRwcmludGsoIiVzOiAgc2V0IEZFQyB0byAxLzJcbiIsX19GVU5DVElPTl9fKTsKQEAgLTY1Nyw2ICs2NjEsMTAgQEAKIAlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGN4MjQxMjNfcmVnZGF0YSkgLyBzaXplb2YoY3gyNDEyM19yZWdkYXRhWzBdKTsgaSsrKQogCQljeDI0MTIzX3dyaXRlcmVnKHN0YXRlLCBjeDI0MTIzX3JlZ2RhdGFbaV0ucmVnLCBjeDI0MTIzX3JlZ2RhdGFbaV0uZGF0YSk7CiAKKwkvKiBTZXQgdGhlIExOQiBwb2xhcml0eSAqLworCWlmKHN0YXRlLT5jb25maWctPmxuYl9wb2xhcml0eSkKKwkJY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgzMiwgY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDMyKSB8IDB4MDIpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY3NCw2ICs2ODIsOSBAQAogCWNhc2UgU0VDX1ZPTFRBR0VfMTg6CiAJCWRwcmludGsoIiVzOiBzZXR0aW5nIHZvbHRhZ2UgMThWXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gY3gyNDEyM193cml0ZXJlZyhzdGF0ZSwgMHgyOSwgdmFsIHwgMHg4MCk7CisJY2FzZSBTRUNfVk9MVEFHRV9PRkY6CisJCS8qIGFscmVhZHkgaGFuZGxlZCBpbiBjeDg4LWR2YiAqLworCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9OwpAQCAtNzc2LDEzICs3ODcsMTUgQEAKIAlpZiAobG9jayAmIDB4MDEpCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKIAlpZiAoc3luYyAmIDB4MDIpCi0JCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CS8qIFBoYXNlIGxvY2tlZCAqLwogCWlmIChzeW5jICYgMHgwNCkKIAkJKnN0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKworCS8qIFJlZWQtU29sb21vbiBTdGF0dXMgKi8KIAlpZiAoc3luYyAmIDB4MDgpCiAJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CiAJaWYgKHN5bmMgJiAweDgwKQotCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOwkJLypGdWxsIFN5bmMgKi8KIAogCXJldHVybiAwOwogfQpAQCAtNzk1LDI5ICs4MDgsMTMgQEAKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXN0YXRlLT5sYXN0YmVyID0KLQkJKChjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWMpICYgMHgzZikgPDwgMTYpIHwKKwkvKiBUaGUgdHJ1ZSBiaXQgZXJyb3IgcmF0ZSBpcyB0aGlzIHZhbHVlIGRpdmlkZWQgYnkKKwkgICB0aGUgd2luZG93IHNpemUgKHNldCBhcyAyNTYgKiAyNTUpICovCisJKmJlciA9ICgoY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDFjKSAmIDB4M2YpIDw8IDE2KSB8CiAJCShjeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWQpIDw8IDggfAotCQljeDI0MTIzX3JlYWRyZWcoc3RhdGUsIDB4MWUpKTsKKwkJIGN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxZSkpOwogCi0JLyogRG8gdGhlIHNpZ25hbCBxdWFsaXR5IHByb2Nlc3NpbmcgaGVyZSwgaXQncyBkZXJpdmVkIGZyb20gdGhlIEJFUi4gKi8KLQkvKiBTY2FsZSB0aGUgQkVSIGZyb20gYSAyNGJpdCB0byBhIFNOUiAxNiBiaXQgd2hlcmUgaGlnaGVyID0gYmV0dGVyICovCi0JaWYgKHN0YXRlLT5sYXN0YmVyIDwgNTAwMCkKLQkJc3RhdGUtPnNuciA9IDY1NSoxMDA7Ci0JZWxzZSBpZiAoIChzdGF0ZS0+bGFzdGJlciA+PSAgIDUwMDApICYmIChzdGF0ZS0+bGFzdGJlciA8ICA1NTAwMCkgKQotCQlzdGF0ZS0+c25yID0gNjU1KjkwOwotCWVsc2UgaWYgKCAoc3RhdGUtPmxhc3RiZXIgPj0gIDU1MDAwKSAmJiAoc3RhdGUtPmxhc3RiZXIgPCAxNTAwMDApICkKLQkJc3RhdGUtPnNuciA9IDY1NSo4MDsKLQllbHNlIGlmICggKHN0YXRlLT5sYXN0YmVyID49IDE1MDAwMCkgJiYgKHN0YXRlLT5sYXN0YmVyIDwgMjUwMDAwKSApCi0JCXN0YXRlLT5zbnIgPSA2NTUqNzA7Ci0JZWxzZSBpZiAoIChzdGF0ZS0+bGFzdGJlciA+PSAyNTAwMDApICYmIChzdGF0ZS0+bGFzdGJlciA8IDQ1MDAwMCkgKQotCQlzdGF0ZS0+c25yID0gNjU1KjY1OwotCWVsc2UKLQkJc3RhdGUtPnNuciA9IDA7Ci0KLQlkcHJpbnRrKCIlczogIEJFUiA9ICVkLCBTL04gaW5kZXggPSAlZFxuIixfX0ZVTkNUSU9OX18sc3RhdGUtPmxhc3RiZXIsIHN0YXRlLT5zbnIpOwotCi0JKmJlciA9IHN0YXRlLT5sYXN0YmVyOworCWRwcmludGsoIiVzOiAgQkVSID0gJWRcbiIsX19GVU5DVElPTl9fLCpiZXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC04MjUsNiArODIyLDcgQEAKIHN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzaWduYWxfc3RyZW5ndGgpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKIAkqc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDNiKSA8PCA4OyAvKiBsYXJnZXIgPSBiZXR0ZXIgKi8KIAogCWRwcmludGsoIiVzOiAgU2lnbmFsIHN0cmVuZ3RoID0gJWRcbiIsX19GVU5DVElPTl9fLCpzaWduYWxfc3RyZW5ndGgpOwpAQCAtODM1LDIzICs4MzMsMTcgQEAKIHN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTE2KiBzbnIpCiB7CiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JKnNuciA9IHN0YXRlLT5zbnI7CisKKwkvKiBJbnZlcnRlZCByYXcgRXMvTjAgY291bnQsIHRvdGFsbHkgYm9ndXMgYnV0IGJldHRlciB0aGFuIHRoZQorCSAgIEJFUiB0aHJlc2hvbGQuICovCisJKnNuciA9IDY1NTM1IC0gKCgodTE2KWN4MjQxMjNfcmVhZHJlZyhzdGF0ZSwgMHgxOCkgPDwgOCkgfAorCQkJICh1MTYpY3gyNDEyM19yZWFkcmVnKHN0YXRlLCAweDE5KSk7CiAKIAlkcHJpbnRrKCIlczogIHJlYWQgUy9OIGluZGV4ID0gJWRcbiIsX19GVU5DVElPTl9fLCpzbnIpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgY3gyNDEyM19yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQotewotCXN0cnVjdCBjeDI0MTIzX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCSp1Y2Jsb2NrcyA9IHN0YXRlLT5sYXN0YmVyOwotCi0JZHByaW50aygiJXM6ICB1Y2Jsb2NrcyAoYmVyKSA9ICVkXG4iLF9fRlVOQ1RJT05fXywqdWNibG9ja3MpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTkyMiw2ICs5MTQsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjeDI0MTIzX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcywKKwkJCXVuc2lnbmVkIGludCBtb2RlX2ZsYWdzLAorCQkJaW50ICpkZWxheSwKKwkJCWZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlpZiAocGFyYW1zICE9IE5VTEwpCisJCXJldHZhbCA9IGN4MjQxMjNfc2V0X2Zyb250ZW5kKGZlLCBwYXJhbXMpOworCisJaWYgKCEobW9kZV9mbGFncyAmIEZFX1RVTkVfTU9ERV9PTkVTSE9UKSkKKwkJY3gyNDEyM19yZWFkX3N0YXR1cyhmZSwgc3RhdHVzKTsKKwkqZGVsYXkgPSBIWi8xMDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgY3gyNDEyM19nZXRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gMTsgLy9GRV9BTEdPX0hXCit9CisKIHN0YXRpYyB2b2lkIGN4MjQxMjNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdHJ1Y3QgY3gyNDEyM19zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTk0OSw4ICs5NjQsNiBAQAogCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwogCXN0YXRlLT5jb25maWcgPSBjb25maWc7CiAJc3RhdGUtPmkyYyA9IGkyYzsKLQlzdGF0ZS0+bGFzdGJlciA9IDA7Ci0Jc3RhdGUtPnNuciA9IDA7CiAJc3RhdGUtPlZDQWFyZyA9IDA7CiAJc3RhdGUtPlZHQWFyZyA9IDA7CiAJc3RhdGUtPmJhbmRzZWxlY3RhcmcgPSAwOwpAQCAtMTAwMywxMSArMTAxNiwxMiBAQAogCS5yZWFkX2JlciA9IGN4MjQxMjNfcmVhZF9iZXIsCiAJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gY3gyNDEyM19yZWFkX3NpZ25hbF9zdHJlbmd0aCwKIAkucmVhZF9zbnIgPSBjeDI0MTIzX3JlYWRfc25yLAotCS5yZWFkX3VjYmxvY2tzID0gY3gyNDEyM19yZWFkX3VjYmxvY2tzLAogCS5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gY3gyNDEyM19zZW5kX2Rpc2VxY19tc2csCiAJLmRpc2VxY19zZW5kX2J1cnN0ID0gY3gyNDEyM19kaXNlcWNfc2VuZF9idXJzdCwKIAkuc2V0X3RvbmUgPSBjeDI0MTIzX3NldF90b25lLAogCS5zZXRfdm9sdGFnZSA9IGN4MjQxMjNfc2V0X3ZvbHRhZ2UsCisJLnR1bmUgPSBjeDI0MTIzX3R1bmUsCisJLmdldF9mcm9udGVuZF9hbGdvID0gY3gyNDEyM19nZXRfYWxnbywKIH07CiAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5oCmluZGV4IDk2MDZmODIuLjU3YTFkYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuaApAQCAtMzAsOSArMzAsMjEgQEAKIAogCS8qIE5lZWQgdG8gc2V0IGRldmljZSBwYXJhbSBmb3Igc3RhcnRfZG1hICovCiAJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOworCisJLyogMCA9IExOQiB2b2x0YWdlIG5vcm1hbCwgMSA9IExOQiB2b2x0YWdlIGludmVydGVkICovCisJaW50IGxuYl9wb2xhcml0eTsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfQ1gyNDEyMykgfHwgZGVmaW5lZChDT05GSUdfRFZCX0NYMjQxMjNfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGN4MjQxMjNfYXR0YWNoKGNvbnN0IHN0cnVjdCBjeDI0MTIzX2NvbmZpZyogY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBjeDI0MTIzX2F0dGFjaChjb25zdCBzdHJ1Y3QgY3gyNDEyM19jb25maWcqIGNvbmZpZywKKwkJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfQ1gyNDEyMwogCiAjZW5kaWYgLyogQ1gyNDEyM19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMC1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwLWNvbW1vbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYTRmMWY3Li4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwLWNvbW1vbi5jCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotI2luY2x1ZGUgImRpYjMwMDAtY29tbW9uLmgiCi0KLSNpZmRlZiBDT05GSUdfRFZCX0RJQkNPTV9ERUJVRwotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sMj1pMmMsND1zcmNoICh8LWFibGUpKS4iKTsKLSNlbmRpZgotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSBkcHJpbnRrKDB4MDIsYXJncykKLSNkZWZpbmUgZGViX3NyY2goYXJncy4uLikgZHByaW50aygweDA0LGFyZ3MpCi0KLQotaW50IGRpYjMwMDBfcmVhZF9yZWcoc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnKQotewotCXU4IHdiW10gPSB7ICgocmVnID4+IDgpIHwgMHg4MCkgJiAweGZmLCByZWcgJiAweGZmIH07Ci0JdTggcmJbMl07Ci0Jc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsICAgICAgICAuYnVmID0gd2IsIC5sZW4gPSAyIH0sCi0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gcmIsIC5sZW4gPSAyIH0sCi0JfTsKLQotCWlmIChpMmNfdHJhbnNmZXIoc3RhdGUtPmkyYywgbXNnLCAyKSAhPSAyKQotCQlkZWJfaTJjKCJpMmMgcmVhZCBlcnJvclxuIik7Ci0KLQlkZWJfaTJjKCJyZWFkaW5nIGkyYyBidXMgKHJlZzogJTVkIDB4JTA0eCwgdmFsOiAlNWQgMHglMDR4KVxuIixyZWcscmVnLAotCQkJKHJiWzBdIDw8IDgpIHwgcmJbMV0sKHJiWzBdIDw8IDgpIHwgcmJbMV0pOwotCi0JcmV0dXJuIChyYlswXSA8PCA4KSB8IHJiWzFdOwotfQotCi1pbnQgZGliMzAwMF93cml0ZV9yZWcoc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1MTYgdmFsKQotewotCXU4IGJbXSA9IHsKLQkJKHJlZyA+PiA4KSAmIDB4ZmYsIHJlZyAmIDB4ZmYsCi0JCSh2YWwgPj4gOCkgJiAweGZmLCB2YWwgJiAweGZmLAotCX07Ci0Jc3RydWN0IGkyY19tc2cgbXNnW10gPSB7Ci0JCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gNCB9Ci0JfTsKLQlkZWJfaTJjKCJ3cml0aW5nIGkyYyBidXMgKHJlZzogJTVkIDB4JTA0eCwgdmFsOiAlNWQgMHglMDR4KVxuIixyZWcscmVnLHZhbCx2YWwpOwotCi0JcmV0dXJuIGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLG1zZywgMSkgIT0gMSA/IC1FUkVNT1RFSU8gOiAwOwotfQotCi1pbnQgZGliMzAwMF9zZWFyY2hfc3RhdHVzKHUxNiBpcnEsdTE2IGxvY2spCi17Ci0JaWYgKGlycSAmIDB4MDIpIHsKLQkJaWYgKGxvY2sgJiAweDAxKSB7Ci0JCQlkZWJfc3JjaCgiYXV0byBzZWFyY2ggc3VjY2VlZGVkXG4iKTsKLQkJCXJldHVybiAxOyAvLyBhdXRvIHNlYXJjaCBzdWNjZWVkZWQKLQkJfSBlbHNlIHsKLQkJCWRlYl9zcmNoKCJhdXRvIHNlYXJjaCBub3Qgc3VjY2Vzc2Z1bFxuIik7Ci0JCQlyZXR1cm4gMDsgLy8gYXV0byBzZWFyY2ggZmFpbGVkCi0JCX0KLQl9IGVsc2UgaWYgKGlycSAmIDB4MDEpICB7Ci0JCWRlYl9zcmNoKCJhdXRvIHNlYXJjaCBmYWlsZWRcbiIpOwotCQlyZXR1cm4gMDsgLy8gYXV0byBzZWFyY2ggZmFpbGVkCi0JfQotCXJldHVybiAtMTsgLy8gdHJ5IGFnYWluCi19Ci0KLS8qIGZvciBhdXRvIHNlYXJjaCAqLwotdTE2IGRpYjMwMDBfc2VxWzJdWzJdWzJdID0gICAgIC8qIGZmdCxndWEsICAgaW52ICAgKi8KLQl7IC8qIGZmdCAqLwotCQl7IC8qIGd1YSAqLwotCQkJeyAwLCAxIH0sICAgICAgICAgICAgICAgICAgIC8qICAwICAgMCAgIHsgMCwxIH0gKi8KLQkJCXsgMywgOSB9LCAgICAgICAgICAgICAgICAgICAvKiAgMCAgIDEgICB7IDAsMSB9ICovCi0JCX0sCi0JCXsKLQkJCXsgMiwgNSB9LCAgICAgICAgICAgICAgICAgICAvKiAgMSAgIDAgICB7IDAsMSB9ICovCi0JCQl7IDYsIDExIH0sICAgICAgICAgICAgICAgICAgLyogIDEgICAxICAgeyAwLDEgfSAqLwotCQl9Ci0JfTsKLQotTU9EVUxFX0FVVEhPUigiUGF0cmljayBCb2V0dGNoZXIgPHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIGZ1bmN0aW9ucyBmb3IgdGhlIGRpYjMwMDBtYi9kaWIzMDAwbWMgZHZiIGZyb250ZW5kIGRyaXZlcnMiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotRVhQT1JUX1NZTUJPTChkaWIzMDAwX3NlcSk7Ci0KLUVYUE9SVF9TWU1CT0woZGliMzAwMF9yZWFkX3JlZyk7Ci1FWFBPUlRfU1lNQk9MKGRpYjMwMDBfd3JpdGVfcmVnKTsKLUVYUE9SVF9TWU1CT0woZGliMzAwMF9zZWFyY2hfc3RhdHVzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwLWNvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDAtY29tbW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJlMWMwZDMuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDAtY29tbW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzUgKzAsMCBAQAotLyoKLSAqIC5oLWZpbGVzIGZvciB0aGUgY29tbW9uIHVzZSBvZiB0aGUgZnJvbnRlbmQgZHJpdmVycyBtYWRlIGJ5IERpQmNvbQotICogRGlCY29tIDMwMDBNLUIvQywgMzAwMFAKLSAqCi0gKiBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtNSBQYXRyaWNrIEJvZXR0Y2hlciAocGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZSkKLSAqCi0gKiBiYXNlZCBvbiBHUEwgY29kZSBmcm9tIERpYkNvbSwgd2hpY2ggaGFzCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEFtYXVyeSBEZW1vbCBmb3IgRGlCY29tIChhZGVtb2xAZGliY29tLmZyKQotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqIEFja25vd2xlZGdlbWVudHMKLSAqCi0gKiAgQW1hdXJ5IERlbW9sIChhZGVtb2xAZGliY29tLmZyKSBmcm9tIERpQmNvbSBmb3IgcHJvdmlkaW5nIHNwZWNzIGFuZCBkcml2ZXIKLSAqICBzb3VyY2VzLCBvbiB3aGljaCB0aGlzIGRyaXZlciAoYW5kIHRoZSBkdmItZGlidXNiKSBhcmUgYmFzZWQuCi0gKgotICogc2VlIERvY3VtZW50YXRpb24vZHZiL1JFQURNRS5kaWJ1c2IgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAqCi0gKi8KLQotI2lmbmRlZiBESUIzMDAwX0NPTU1PTl9ICi0jZGVmaW5lIERJQjMwMDBfQ09NTU9OX0gKLQotI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgotI2luY2x1ZGUgImRpYjMwMDAuaCIKLQotLyogaW5mbyBhbmQgZXJyLCB0YWtlbiBmcm9tIHVzYi5oLCBpZiB0aGVyZSBpcyBhbnl0aGluZyBhdmFpbGFibGUgbGlrZSBieSBkZWZhdWx0LiAqLwotI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICAgICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICAgICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQotCi0vKiBmcm9udGVuZCBzdGF0ZSAqLwotc3RydWN0IGRpYjMwMDBfc3RhdGUgewotCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOwotCi0vKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0Jc3RydWN0IGRpYjMwMDBfY29uZmlnIGNvbmZpZzsKLQotCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7Ci0JaW50IHRpbWluZ19vZmZzZXQ7Ci0JaW50IHRpbWluZ19vZmZzZXRfY29tcF9kb25lOwotCi0JZmVfYmFuZHdpZHRoX3QgbGFzdF90dW5lZF9idzsKLQl1MzIgbGFzdF90dW5lZF9mcmVxOwotfTsKLQotLyogY29tbW9ubHkgdXNlZCBtZXRob2RzIGJ5IHRoZSBkaWIzMDAwbWIvbWMvcCBmcm9udGVuZCAqLwotZXh0ZXJuIGludCBkaWIzMDAwX3JlYWRfcmVnKHN0cnVjdCBkaWIzMDAwX3N0YXRlICpzdGF0ZSwgdTE2IHJlZyk7Ci1leHRlcm4gaW50IGRpYjMwMDBfd3JpdGVfcmVnKHN0cnVjdCBkaWIzMDAwX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTE2IHZhbCk7Ci0KLWV4dGVybiBpbnQgZGliMzAwMF9zZWFyY2hfc3RhdHVzKHUxNiBpcnEsdTE2IGxvY2spOwotCi0vKiBoYW5keSBzaG9ydGN1dHMgKi8KLSNkZWZpbmUgcmQocmVnKSBkaWIzMDAwX3JlYWRfcmVnKHN0YXRlLHJlZykKLQotI2RlZmluZSB3cihyZWcsdmFsKSBpZiAoZGliMzAwMF93cml0ZV9yZWcoc3RhdGUscmVnLHZhbCkpIFwKLQl7IGVycigid2hpbGUgc2VuZGluZyAweCUwNHggdG8gMHglMDR4LiIsdmFsLHJlZyk7IHJldHVybiAtRVJFTU9URUlPOyB9Ci0KLSNkZWZpbmUgd3JfZm9yZWFjaChhLHYpIHsgaW50IGk7IFwKLQlpZiAoc2l6ZW9mKGEpICE9IHNpemVvZih2KSkgXAotCQllcnIoInNpemVvZjogJXp1ICV6dSBpcyBkaWZmZXJlbnQiLHNpemVvZihhKSxzaXplb2YodikpO1wKLQlmb3IgKGk9MDsgaSA8IHNpemVvZihhKS9zaXplb2YodTE2KTsgaSsrKSBcCi0JCXdyKGFbaV0sdltpXSk7IFwKLQl9Ci0KLSNkZWZpbmUgc2V0X29yKHJlZyx2YWwpIHdyKHJlZyxyZChyZWcpIHwgdmFsKQotCi0jZGVmaW5lIHNldF9hbmQocmVnLHZhbCkgd3IocmVnLHJkKHJlZykgJiB2YWwpCi0KLQotLyogZGVidWcgKi8KLQotI2lmZGVmIENPTkZJR19EVkJfRElCQ09NX0RFQlVHCi0jZGVmaW5lIGRwcmludGsobGV2ZWwsYXJncy4uLikgXAotICAgIGRvIHsgaWYgKChkZWJ1ZyAmIGxldmVsKSkgeyBwcmludGsoYXJncyk7IH0gfSB3aGlsZSAoMCkKLSNlbHNlCi0jZGVmaW5lIGRwcmludGsoYXJncy4uLikgZG8geyB9IHdoaWxlICgwKQotI2VuZGlmCi0KLS8qIG1hc2sgZm9yIGVuYWJsaW5nIGEgc3BlY2lmaWMgcGlkIGZvciB0aGUgcGlkX2ZpbHRlciAqLwotI2RlZmluZSBESUIzMDAwX0FDVElWQVRFX1BJRF9GSUxURVJJTkcJKDB4MjAwMCkKLQotLyogY29tbW9uIHZhbHVlcyBmb3IgdHVuaW5nICovCi0jZGVmaW5lIERJQjMwMDBfQUxQSEFfMAkJCQkJKCAgICAgMCkKLSNkZWZpbmUgRElCMzAwMF9BTFBIQV8xCQkJCQkoICAgICAxKQotI2RlZmluZSBESUIzMDAwX0FMUEhBXzIJCQkJCSggICAgIDIpCi0jZGVmaW5lIERJQjMwMDBfQUxQSEFfNAkJCQkJKCAgICAgNCkKLQotI2RlZmluZSBESUIzMDAwX0NPTlNURUxMQVRJT05fUVBTSwkJKCAgICAgMCkKLSNkZWZpbmUgRElCMzAwMF9DT05TVEVMTEFUSU9OXzE2UUFNCQkoICAgICAxKQotI2RlZmluZSBESUIzMDAwX0NPTlNURUxMQVRJT05fNjRRQU0JCSggICAgIDIpCi0KLSNkZWZpbmUgRElCMzAwMF9HVUFSRF9USU1FXzFfMzIJCQkoICAgICAwKQotI2RlZmluZSBESUIzMDAwX0dVQVJEX1RJTUVfMV8xNgkJCSggICAgIDEpCi0jZGVmaW5lIERJQjMwMDBfR1VBUkRfVElNRV8xXzgJCQkoICAgICAyKQotI2RlZmluZSBESUIzMDAwX0dVQVJEX1RJTUVfMV80CQkJKCAgICAgMykKLQotI2RlZmluZSBESUIzMDAwX1RSQU5TTUlTU0lPTl9NT0RFXzJLCSggICAgIDApCi0jZGVmaW5lIERJQjMwMDBfVFJBTlNNSVNTSU9OX01PREVfOEsJKCAgICAgMSkKLQotI2RlZmluZSBESUIzMDAwX1NFTEVDVF9MUAkJCQkoICAgICAwKQotI2RlZmluZSBESUIzMDAwX1NFTEVDVF9IUAkJCQkoICAgICAxKQotCi0jZGVmaW5lIERJQjMwMDBfRkVDXzFfMgkJCQkJKCAgICAgMSkKLSNkZWZpbmUgRElCMzAwMF9GRUNfMl8zCQkJCQkoICAgICAyKQotI2RlZmluZSBESUIzMDAwX0ZFQ18zXzQJCQkJCSggICAgIDMpCi0jZGVmaW5lIERJQjMwMDBfRkVDXzVfNgkJCQkJKCAgICAgNSkKLSNkZWZpbmUgRElCMzAwMF9GRUNfN184CQkJCQkoICAgICA3KQotCi0jZGVmaW5lIERJQjMwMDBfSFJDSF9PRkYJCQkJKCAgICAgMCkKLSNkZWZpbmUgRElCMzAwMF9IUkNIX09OCQkJCQkoICAgICAxKQotCi0jZGVmaW5lIERJQjMwMDBfRERTX0lOVkVSU0lPTl9PRkYJCSggICAgIDApCi0jZGVmaW5lIERJQjMwMDBfRERTX0lOVkVSU0lPTl9PTgkJKCAgICAgMSkKLQotI2RlZmluZSBESUIzMDAwX1RVTkVSX1dSSVRFX0VOQUJMRShhKQkoMHhmZmZmICYgKGEgPDwgOCkpCi0jZGVmaW5lIERJQjMwMDBfVFVORVJfV1JJVEVfRElTQUJMRShhKQkoMHhmZmZmICYgKChhIDw8IDgpIHwgKDEgPDwgNykpKQotCi0vKiBmb3IgYXV0byBzZWFyY2ggKi8KLWV4dGVybiB1MTYgZGliMzAwMF9zZXFbMl1bMl1bMl07Ci0KLSNkZWZpbmUgRElCMzAwMF9SRUdfTUFOVUZBQ1RPUl9JRAkJKCAgMTAyNSkKLSNkZWZpbmUgRElCMzAwMF9JMkNfSURfRElCQ09NCQkJKDB4MDFiMykKLQotI2RlZmluZSBESUIzMDAwX1JFR19ERVZJQ0VfSUQJCQkoICAxMDI2KQotI2RlZmluZSBESUIzMDAwTUJfREVWSUNFX0lECQkJCSgweDMwMDApCi0jZGVmaW5lIERJQjMwMDBNQ19ERVZJQ0VfSUQJCQkJKDB4MzAwMSkKLSNkZWZpbmUgRElCMzAwMFBfREVWSUNFX0lECQkJCSgweDMwMDIpCi0KLSNlbmRpZiAvLyBESUIzMDAwX0NPTU1PTl9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDAuaAppbmRleCBlYzkyNzYyLi4wY2FhYzNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwLmgKQEAgLTQxLDkgKzQxLDE2IEBACiAJaW50ICgqdHVuZXJfcGFzc19jdHJsKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmLCB1OCBwbGxfY3RybCk7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQikgfHwgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQl9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogZGliMzAwMG1iX2F0dGFjaChjb25zdCBzdHJ1Y3QgZGliMzAwMF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYywgc3RydWN0IGRpYl9mZV94ZmVyX29wcyAqeGZlcl9vcHMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogZGliMzAwMG1iX2F0dGFjaChjb25zdCBzdHJ1Y3QgZGliMzAwMF9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYywgc3RydWN0IGRpYl9mZV94ZmVyX29wcyAqeGZlcl9vcHMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfRElCMzAwME1CCiAKLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkaWIzMDAwbWNfYXR0YWNoKGNvbnN0IHN0cnVjdCBkaWIzMDAwX2NvbmZpZyogY29uZmlnLAotCQkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCBzdHJ1Y3QgZGliX2ZlX3hmZXJfb3BzICp4ZmVyX29wcyk7CiAjZW5kaWYgLy8gRElCMzAwMF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iLmMKaW5kZXggNTMwMmUxMS4uYWRiYWJmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWIuYwpAQCAtMjksOSArMjksMTAgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlICJkaWIzMDAwLWNvbW1vbi5oIgotI2luY2x1ZGUgImRpYjMwMDBtYl9wcml2LmgiCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKICNpbmNsdWRlICJkaWIzMDAwLmgiCisjaW5jbHVkZSAiZGliMzAwMG1iX3ByaXYuaCIKIAogLyogVmVyc2lvbiBpbmZvcm1hdGlvbiAqLwogI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMC4xIgpAQCAtNDQsMTAgKzQ1LDgxIEBACiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLDI9eGZlciw0PXNldGZlLDg9Z2V0ZmUgKHwtYWJsZSkpLiIpOwogI2VuZGlmCiAjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSxhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDIsYXJncykKKyNkZWZpbmUgZGViX3NyY2goYXJncy4uLikgZHByaW50aygweDA0LGFyZ3MpCisjZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pIGRwcmludGsoMHgwMSxhcmdzKQogI2RlZmluZSBkZWJfeGZlcihhcmdzLi4uKSBkcHJpbnRrKDB4MDIsYXJncykKICNkZWZpbmUgZGViX3NldGYoYXJncy4uLikgZHByaW50aygweDA0LGFyZ3MpCiAjZGVmaW5lIGRlYl9nZXRmKGFyZ3MuLi4pIGRwcmludGsoMHgwOCxhcmdzKQogCisjaWZkZWYgQ09ORklHX0RWQl9ESUJDT01fREVCVUcKK3N0YXRpYyBpbnQgZGVidWc7Cittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnZ2luZyBsZXZlbCAoMT1pbmZvLDI9aTJjLDQ9c3JjaCAofC1hYmxlKSkuIik7CisjZW5kaWYKKworc3RhdGljIGludCBkaWIzMDAwX3JlYWRfcmVnKHN0cnVjdCBkaWIzMDAwX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKK3sKKwl1OCB3YltdID0geyAoKHJlZyA+PiA4KSB8IDB4ODApICYgMHhmZiwgcmVnICYgMHhmZiB9OworCXU4IHJiWzJdOworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLCAgICAgICAgLmJ1ZiA9IHdiLCAubGVuID0gMiB9LAorCQl7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IHJiLCAubGVuID0gMiB9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMikgIT0gMikKKwkJZGViX2kyYygiaTJjIHJlYWQgZXJyb3JcbiIpOworCisJZGViX2kyYygicmVhZGluZyBpMmMgYnVzIChyZWc6ICU1ZCAweCUwNHgsIHZhbDogJTVkIDB4JTA0eClcbiIscmVnLHJlZywKKwkJCShyYlswXSA8PCA4KSB8IHJiWzFdLChyYlswXSA8PCA4KSB8IHJiWzFdKTsKKworCXJldHVybiAocmJbMF0gPDwgOCkgfCByYlsxXTsKK30KKworc3RhdGljIGludCBkaWIzMDAwX3dyaXRlX3JlZyhzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHUxNiB2YWwpCit7CisJdTggYltdID0geworCQkocmVnID4+IDgpICYgMHhmZiwgcmVnICYgMHhmZiwKKwkJKHZhbCA+PiA4KSAmIDB4ZmYsIHZhbCAmIDB4ZmYsCisJfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGIsIC5sZW4gPSA0IH0KKwl9OworCWRlYl9pMmMoIndyaXRpbmcgaTJjIGJ1cyAocmVnOiAlNWQgMHglMDR4LCB2YWw6ICU1ZCAweCUwNHgpXG4iLHJlZyxyZWcsdmFsLHZhbCk7CisKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsbXNnLCAxKSAhPSAxID8gLUVSRU1PVEVJTyA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZGliMzAwMF9zZWFyY2hfc3RhdHVzKHUxNiBpcnEsdTE2IGxvY2spCit7CisJaWYgKGlycSAmIDB4MDIpIHsKKwkJaWYgKGxvY2sgJiAweDAxKSB7CisJCQlkZWJfc3JjaCgiYXV0byBzZWFyY2ggc3VjY2VlZGVkXG4iKTsKKwkJCXJldHVybiAxOyAvLyBhdXRvIHNlYXJjaCBzdWNjZWVkZWQKKwkJfSBlbHNlIHsKKwkJCWRlYl9zcmNoKCJhdXRvIHNlYXJjaCBub3Qgc3VjY2Vzc2Z1bFxuIik7CisJCQlyZXR1cm4gMDsgLy8gYXV0byBzZWFyY2ggZmFpbGVkCisJCX0KKwl9IGVsc2UgaWYgKGlycSAmIDB4MDEpICB7CisJCWRlYl9zcmNoKCJhdXRvIHNlYXJjaCBmYWlsZWRcbiIpOworCQlyZXR1cm4gMDsgLy8gYXV0byBzZWFyY2ggZmFpbGVkCisJfQorCXJldHVybiAtMTsgLy8gdHJ5IGFnYWluCit9CisKKy8qIGZvciBhdXRvIHNlYXJjaCAqLworc3RhdGljIHUxNiBkaWIzMDAwX3NlcVsyXVsyXVsyXSA9ICAgICAvKiBmZnQsZ3VhLCAgIGludiAgICovCisJeyAvKiBmZnQgKi8KKwkJeyAvKiBndWEgKi8KKwkJCXsgMCwgMSB9LCAgICAgICAgICAgICAgICAgICAvKiAgMCAgIDAgICB7IDAsMSB9ICovCisJCQl7IDMsIDkgfSwgICAgICAgICAgICAgICAgICAgLyogIDAgICAxICAgeyAwLDEgfSAqLworCQl9LAorCQl7CisJCQl7IDIsIDUgfSwgICAgICAgICAgICAgICAgICAgLyogIDEgICAwICAgeyAwLDEgfSAqLworCQkJeyA2LCAxMSB9LCAgICAgICAgICAgICAgICAgIC8qICAxICAgMSAgIHsgMCwxIH0gKi8KKwkJfQorCX07CisKIHN0YXRpYyBpbnQgZGliMzAwMG1iX2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwKIAkJCQkgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYl9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iX3ByaXYuaAppbmRleCA5OTliMTkwLi4xYTEyNzQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1iX3ByaXYuaApAQCAtMTMsNiArMTMsOTkgQEAKICNpZm5kZWYgX19ESUIzMDAwTUJfUFJJVl9IX0lOQ0xVREVEX18KICNkZWZpbmUgX19ESUIzMDAwTUJfUFJJVl9IX0lOQ0xVREVEX18KIAorLyogaW5mbyBhbmQgZXJyLCB0YWtlbiBmcm9tIHVzYi5oLCBpZiB0aGVyZSBpcyBhbnl0aGluZyBhdmFpbGFibGUgbGlrZSBieSBkZWZhdWx0LiAqLworI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pICBwcmludGsoS0VSTl9FUlIgICAgICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICAgICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9XQVJOSU5HICJkaWIzMDAwOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorCisvKiBoYW5keSBzaG9ydGN1dHMgKi8KKyNkZWZpbmUgcmQocmVnKSBkaWIzMDAwX3JlYWRfcmVnKHN0YXRlLHJlZykKKworI2RlZmluZSB3cihyZWcsdmFsKSBpZiAoZGliMzAwMF93cml0ZV9yZWcoc3RhdGUscmVnLHZhbCkpIFwKKwl7IGVycigid2hpbGUgc2VuZGluZyAweCUwNHggdG8gMHglMDR4LiIsdmFsLHJlZyk7IHJldHVybiAtRVJFTU9URUlPOyB9CisKKyNkZWZpbmUgd3JfZm9yZWFjaChhLHYpIHsgaW50IGk7IFwKKwlpZiAoc2l6ZW9mKGEpICE9IHNpemVvZih2KSkgXAorCQllcnIoInNpemVvZjogJXp1ICV6dSBpcyBkaWZmZXJlbnQiLHNpemVvZihhKSxzaXplb2YodikpO1wKKwlmb3IgKGk9MDsgaSA8IHNpemVvZihhKS9zaXplb2YodTE2KTsgaSsrKSBcCisJCXdyKGFbaV0sdltpXSk7IFwKKwl9CisKKyNkZWZpbmUgc2V0X29yKHJlZyx2YWwpIHdyKHJlZyxyZChyZWcpIHwgdmFsKQorCisjZGVmaW5lIHNldF9hbmQocmVnLHZhbCkgd3IocmVnLHJkKHJlZykgJiB2YWwpCisKKy8qIGRlYnVnICovCisKKyNpZmRlZiBDT05GSUdfRFZCX0RJQkNPTV9ERUJVRworI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pIFwKKyAgICBkbyB7IGlmICgoZGVidWcgJiBsZXZlbCkpIHsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKiBtYXNrIGZvciBlbmFibGluZyBhIHNwZWNpZmljIHBpZCBmb3IgdGhlIHBpZF9maWx0ZXIgKi8KKyNkZWZpbmUgRElCMzAwMF9BQ1RJVkFURV9QSURfRklMVEVSSU5HCSgweDIwMDApCisKKy8qIGNvbW1vbiB2YWx1ZXMgZm9yIHR1bmluZyAqLworI2RlZmluZSBESUIzMDAwX0FMUEhBXzAJCQkJCSggICAgIDApCisjZGVmaW5lIERJQjMwMDBfQUxQSEFfMQkJCQkJKCAgICAgMSkKKyNkZWZpbmUgRElCMzAwMF9BTFBIQV8yCQkJCQkoICAgICAyKQorI2RlZmluZSBESUIzMDAwX0FMUEhBXzQJCQkJCSggICAgIDQpCisKKyNkZWZpbmUgRElCMzAwMF9DT05TVEVMTEFUSU9OX1FQU0sJCSggICAgIDApCisjZGVmaW5lIERJQjMwMDBfQ09OU1RFTExBVElPTl8xNlFBTQkJKCAgICAgMSkKKyNkZWZpbmUgRElCMzAwMF9DT05TVEVMTEFUSU9OXzY0UUFNCQkoICAgICAyKQorCisjZGVmaW5lIERJQjMwMDBfR1VBUkRfVElNRV8xXzMyCQkJKCAgICAgMCkKKyNkZWZpbmUgRElCMzAwMF9HVUFSRF9USU1FXzFfMTYJCQkoICAgICAxKQorI2RlZmluZSBESUIzMDAwX0dVQVJEX1RJTUVfMV84CQkJKCAgICAgMikKKyNkZWZpbmUgRElCMzAwMF9HVUFSRF9USU1FXzFfNAkJCSggICAgIDMpCisKKyNkZWZpbmUgRElCMzAwMF9UUkFOU01JU1NJT05fTU9ERV8ySwkoICAgICAwKQorI2RlZmluZSBESUIzMDAwX1RSQU5TTUlTU0lPTl9NT0RFXzhLCSggICAgIDEpCisKKyNkZWZpbmUgRElCMzAwMF9TRUxFQ1RfTFAJCQkJKCAgICAgMCkKKyNkZWZpbmUgRElCMzAwMF9TRUxFQ1RfSFAJCQkJKCAgICAgMSkKKworI2RlZmluZSBESUIzMDAwX0ZFQ18xXzIJCQkJCSggICAgIDEpCisjZGVmaW5lIERJQjMwMDBfRkVDXzJfMwkJCQkJKCAgICAgMikKKyNkZWZpbmUgRElCMzAwMF9GRUNfM180CQkJCQkoICAgICAzKQorI2RlZmluZSBESUIzMDAwX0ZFQ181XzYJCQkJCSggICAgIDUpCisjZGVmaW5lIERJQjMwMDBfRkVDXzdfOAkJCQkJKCAgICAgNykKKworI2RlZmluZSBESUIzMDAwX0hSQ0hfT0ZGCQkJCSggICAgIDApCisjZGVmaW5lIERJQjMwMDBfSFJDSF9PTgkJCQkJKCAgICAgMSkKKworI2RlZmluZSBESUIzMDAwX0REU19JTlZFUlNJT05fT0ZGCQkoICAgICAwKQorI2RlZmluZSBESUIzMDAwX0REU19JTlZFUlNJT05fT04JCSggICAgIDEpCisKKyNkZWZpbmUgRElCMzAwMF9UVU5FUl9XUklURV9FTkFCTEUoYSkJKDB4ZmZmZiAmIChhIDw8IDgpKQorI2RlZmluZSBESUIzMDAwX1RVTkVSX1dSSVRFX0RJU0FCTEUoYSkJKDB4ZmZmZiAmICgoYSA8PCA4KSB8ICgxIDw8IDcpKSkKKworI2RlZmluZSBESUIzMDAwX1JFR19NQU5VRkFDVE9SX0lECQkoICAxMDI1KQorI2RlZmluZSBESUIzMDAwX0kyQ19JRF9ESUJDT00JCQkoMHgwMWIzKQorCisjZGVmaW5lIERJQjMwMDBfUkVHX0RFVklDRV9JRAkJCSggIDEwMjYpCisjZGVmaW5lIERJQjMwMDBNQl9ERVZJQ0VfSUQJCQkJKDB4MzAwMCkKKyNkZWZpbmUgRElCMzAwME1DX0RFVklDRV9JRAkJCQkoMHgzMDAxKQorI2RlZmluZSBESUIzMDAwUF9ERVZJQ0VfSUQJCQkJKDB4MzAwMikKKworLyogZnJvbnRlbmQgc3RhdGUgKi8KK3N0cnVjdCBkaWIzMDAwX3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYzsKKworLyogY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqLworCXN0cnVjdCBkaWIzMDAwX2NvbmZpZyBjb25maWc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCWludCB0aW1pbmdfb2Zmc2V0OworCWludCB0aW1pbmdfb2Zmc2V0X2NvbXBfZG9uZTsKKworCWZlX2JhbmR3aWR0aF90IGxhc3RfdHVuZWRfYnc7CisJdTMyIGxhc3RfdHVuZWRfZnJlcTsKK307CisKIC8qIHJlZ2lzdGVyIGFkZHJlc3NlcyBhbmQgc29tZSBvZiB0aGVpciBkZWZhdWx0IHZhbHVlcyAqLwogCiAvKiByZXN0YXJ0IHN1YnN5c3RlbXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwppbmRleCA5ODY3MzQ3NC4uY2MyODQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuYwpAQCAtMSw3MjUgKzEsNzkxIEBACiAvKgotICogRnJvbnRlbmQgZHJpdmVyIGZvciBtb2JpbGUgRFZCLVQgZGVtb2R1bGF0b3IgRGlCY29tIDMwMDBQL00tQwotICogRGlCY29tIChodHRwOi8vd3d3LmRpYmNvbS5mci8pCisgKiBEcml2ZXIgZm9yIERpQmNvbSBEaUIzMDAwTUMvUC1kZW1vZHVsYXRvci4KICAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtNiBEaUJjb20gKGh0dHA6Ly93d3cuZGliY29tLmZyLykKICAqIENvcHlyaWdodCAoQykgMjAwNC01IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQogICoKLSAqIGJhc2VkIG9uIEdQTCBjb2RlIGZyb20gRGlCQ29tLCB3aGljaCBoYXMKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgb24gdGhlIHByZXZpb3VzIGRpYjMwMDBtYy5jIC4KICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgQW1hdXJ5IERlbW9sIGZvciBEaUJjb20gKGFkZW1vbEBkaWJjb20uZnIpCi0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCi0gKgotICogQWNrbm93bGVkZ2VtZW50cwotICoKLSAqICBBbWF1cnkgRGVtb2wgKGFkZW1vbEBkaWJjb20uZnIpIGZyb20gRGlCY29tIGZvciBwcm92aWRpbmcgc3BlY3MgYW5kIGRyaXZlcgotICogIHNvdXJjZXMsIG9uIHdoaWNoIHRoaXMgZHJpdmVyIChhbmQgdGhlIGR2Yi1kaWJ1c2IpIGFyZSBiYXNlZC4KLSAqCi0gKiBzZWUgRG9jdW1lbnRhdGlvbi9kdmIvUkVBRE1FLmRpYnVzYiBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICoKICAqLworCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisvLyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisvLyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorLy8jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisvLyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlICJkaWIzMDAwLWNvbW1vbi5oIgotI2luY2x1ZGUgImRpYjMwMDBtY19wcml2LmgiCi0jaW5jbHVkZSAiZGliMzAwMC5oIgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgogCi0vKiBWZXJzaW9uIGluZm9ybWF0aW9uICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIwLjEiCi0jZGVmaW5lIERSSVZFUl9ERVNDICJEaUJjb20gMzAwME0tQyBEVkItVCBkZW1vZHVsYXRvciIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiUGF0cmljayBCb2V0dGNoZXIsIHBhdHJpY2suYm9ldHRjaGVyQGRlc3kuZGUiCisjaW5jbHVkZSAiZGliMzAwMG1jLmgiCiAKLSNpZmRlZiBDT05GSUdfRFZCX0RJQkNPTV9ERUJVRwogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sMj14ZmVyLDQ9c2V0ZmUsOD1nZXRmZSwxNj1zdGF0ICh8LWFibGUpKS4iKTsKLSNlbmRpZgotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50aygweDAyLGFyZ3MpCi0jZGVmaW5lIGRlYl9zZXRmKGFyZ3MuLi4pIGRwcmludGsoMHgwNCxhcmdzKQotI2RlZmluZSBkZWJfZ2V0ZihhcmdzLi4uKSBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX3N0YXQoYXJncy4uLikgZHByaW50aygweDEwLGFyZ3MpCitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAidHVybiBvbiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6IDApIik7CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3NldF9pbXB1bHNlX25vaXNlKHN0cnVjdCBkaWIzMDAwX3N0YXRlICogc3RhdGUsIGludCBtb2RlLAotCWZlX3RyYW5zbWl0X21vZGVfdCB0cmFuc21pc3Npb25fbW9kZSwgZmVfYmFuZHdpZHRoX3QgYmFuZHdpZHRoKQorI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50ayhLRVJOX0RFQlVHICJEaUIzMDAwTUMvUDoiKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisKK3N0cnVjdCBkaWIzMDAwbWNfc3RhdGUgeworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZGVtb2Q7CisJc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZzsKKworCXU4IGkyY19hZGRyOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXA7CisKKwlzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyIGkyY19tYXN0ZXI7CisKKwlmZV9iYW5kd2lkdGhfdCBjdXJyZW50X2JhbmR3aWR0aDsKKworCXUxNiBkZXZfaWQ7Cit9OworCitzdGF0aWMgdTE2IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUsIHUxNiByZWcpCiB7Ci0Jc3dpdGNoICh0cmFuc21pc3Npb25fbW9kZSkgewotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzJLOgotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2ZmdCxkaWIzMDAwbWNfZmZ0X21vZGVzWzBdKTsKLQkJCWJyZWFrOwotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOgotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2ZmdCxkaWIzMDAwbWNfZmZ0X21vZGVzWzFdKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJdTggd2JbMl0gPSB7IChyZWcgPj4gOCkgfCAweDgwLCByZWcgJiAweGZmIH07CisJdTggcmJbMl07CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7IC5hZGRyID0gc3RhdGUtPmkyY19hZGRyID4+IDEsIC5mbGFncyA9IDAsICAgICAgICAuYnVmID0gd2IsIC5sZW4gPSAyIH0sCisJCXsgLmFkZHIgPSBzdGF0ZS0+aTJjX2FkZHIgPj4gMSwgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSByYiwgLmxlbiA9IDIgfSwKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX2FkYXAsIG1zZywgMikgIT0gMikKKwkJZHByaW50aygiaTJjIHJlYWQgZXJyb3Igb24gJWRcbiIscmVnKTsKKworCXJldHVybiAocmJbMF0gPDwgOCkgfCByYlsxXTsKK30KKworc3RhdGljIGludCBkaWIzMDAwbWNfd3JpdGVfd29yZChzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwl1OCBiWzRdID0geworCQkocmVnID4+IDgpICYgMHhmZiwgcmVnICYgMHhmZiwKKwkJKHZhbCA+PiA4KSAmIDB4ZmYsIHZhbCAmIDB4ZmYsCisJfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gc3RhdGUtPmkyY19hZGRyID4+IDEsIC5mbGFncyA9IDAsIC5idWYgPSBiLCAubGVuID0gNAorCX07CisJcmV0dXJuIGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEgPyAtRVJFTU9URUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IGRpYjMwMDBtY19pZGVudGlmeShzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSkKK3sKKwl1MTYgdmFsdWU7CisJaWYgKCh2YWx1ZSA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDEwMjUpKSAhPSAweDAxYjMpIHsKKwkJZHByaW50aygiLUUtICBEaUIzMDAwTUMvUDogd3JvbmcgVmVuZG9yIElEIChyZWFkPTB4JXgpXG4iLHZhbHVlKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CiAJfQogCi0Jc3dpdGNoIChiYW5kd2lkdGgpIHsKLS8qCQljYXNlIEJBTkRXSURUSF81X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19pbXB1bHNlX25vaXNlLGRpYjMwMDBtY19pbXBsdXNlX25vaXNlWzBdKTsKLQkJCWJyZWFrOyAqLwotCQljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19pbXB1bHNlX25vaXNlLGRpYjMwMDBtY19pbXBsdXNlX25vaXNlWzFdKTsKLQkJCWJyZWFrOwotCQljYXNlIEJBTkRXSURUSF83X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19pbXB1bHNlX25vaXNlLGRpYjMwMDBtY19pbXBsdXNlX25vaXNlWzJdKTsKLQkJCWJyZWFrOwotCQljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19pbXB1bHNlX25vaXNlLGRpYjMwMDBtY19pbXBsdXNlX25vaXNlWzNdKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJdmFsdWUgPSBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCAxMDI2KTsKKwlpZiAodmFsdWUgIT0gMHgzMDAxICYmIHZhbHVlICE9IDB4MzAwMikgeworCQlkcHJpbnRrKCItRS0gIERpQjMwMDBNQy9QOiB3cm9uZyBEZXZpY2UgSUQgKCV4KVxuIix2YWx1ZSk7CisJCXJldHVybiAtRVJFTU9URUlPOwogCX0KKwlzdGF0ZS0+ZGV2X2lkID0gdmFsdWU7CiAKLQlzd2l0Y2ggKG1vZGUpIHsKLQkJY2FzZSAwOiAvKiBubyBpbXB1bHNlICovIC8qIGZhbGwgdGhyb3VnaCAqLwotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2ltcF9ub2lzZV9jdGwsZGliMzAwMG1jX2ltcF9ub2lzZV9jdGxbMF0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgMTogLyogbmV3IGFsZ28gKi8KLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19pbXBfbm9pc2VfY3RsLGRpYjMwMDBtY19pbXBfbm9pc2VfY3RsWzFdKTsKLQkJCXNldF9vcihESUIzMDAwTUNfUkVHX0lNUF9OT0lTRV81NSxESUIzMDAwTUNfSU1QX05FV19BTEdPKDApKTsgLyogZ2l2ZXMgMTw8MTAgKi8KLQkJCWJyZWFrOwotCQlkZWZhdWx0OiAvKiBvbGQgYWxnbyAqLwotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2ltcF9ub2lzZV9jdGwsZGliMzAwMG1jX2ltcF9ub2lzZV9jdGxbM10pOwotCQkJYnJlYWs7Ci0JfQorCWRwcmludGsoIi1JLSAgZm91bmQgRGlCMzAwME1DL1A6ICV4XG4iLHN0YXRlLT5kZXZfaWQpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3NldF90aW1pbmcoc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlLCBpbnQgdXBkX29mZnNldCwKLQkJZmVfdHJhbnNtaXRfbW9kZV90IGZmdCwgZmVfYmFuZHdpZHRoX3QgYncpCitzdGF0aWMgaW50IGRpYjMwMDBtY19zZXRfdGltaW5nKHN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlLCBzMTYgbmZmdCwgdTggYncsIHU4IHVwZGF0ZV9vZmZzZXQpCiB7Ci0JdTE2IHRpbWZfbXNiLHRpbWZfbHNiOwotCXMzMiB0aW1fb2Zmc2V0LHRpbV9zZ247Ci0JdTY0IGNvbXAxLGNvbXAyLGNvbXA9MDsKLQotCXN3aXRjaCAoYncpIHsKLQkJY2FzZSBCQU5EV0lEVEhfOF9NSFo6IGNvbXAgPSBESUIzMDAwTUNfQ0xPQ0tfUkVGKjg7IGJyZWFrOwotCQljYXNlIEJBTkRXSURUSF83X01IWjogY29tcCA9IERJQjMwMDBNQ19DTE9DS19SRUYqNzsgYnJlYWs7Ci0JCWNhc2UgQkFORFdJRFRIXzZfTUhaOiBjb21wID0gRElCMzAwME1DX0NMT0NLX1JFRio2OyBicmVhazsKLQkJZGVmYXVsdDogZXJyKCJ1bmtub3duIGJhbmR3aWR0aCAoJWQpIixidyk7IGJyZWFrOwotCX0KLQl0aW1mX21zYiA9IChjb21wID4+IDE2KSAmIDB4ZmY7Ci0JdGltZl9sc2IgPSAoY29tcCAmIDB4ZmZmZik7CisvKgorCXUzMiB0aW1mX21zYiwgdGltZl9sc2IsIGk7CisJaW50IHRpbV9zZ24gOworCUxVSW50IGNvbXAxLCBjb21wMiwgY29tcCA7CisvLwl1MzIgdGltX29mZnNldCA7CisJY29tcCA9IDI3NzAwICogQldfSU5ERVhfVE9fS0haKGJ3KSAvIDEwMDA7CisJdGltZl9tc2IgPSAoY29tcCA+PiAxNikgJiAweDAwRkY7CisJdGltZl9sc2IgPSAgY29tcCAgICAgICAgJiAweEZGRkY7CiAKIAkvLyBVcGRhdGUgdGhlIHRpbWluZyBvZmZzZXQgOwotCWlmICh1cGRfb2Zmc2V0ID4gMCkgewotCQlpZiAoIXN0YXRlLT50aW1pbmdfb2Zmc2V0X2NvbXBfZG9uZSkgewotCQkJbXNsZWVwKDIwMCk7CisJaWYgKHVwZGF0ZV9vZmZzZXQpIHsKKwkJaWYgKHN0YXRlLT50aW1pbmdfb2Zmc2V0X2NvbXBfZG9uZSA9PSAwKSB7CisJCQl1c2xlZXAoMjAwMDAwKTsKIAkJCXN0YXRlLT50aW1pbmdfb2Zmc2V0X2NvbXBfZG9uZSA9IDE7CiAJCX0KLQkJdGltX29mZnNldCA9IHJkKERJQjMwMDBNQ19SRUdfVElNSU5HX09GRlNfTVNCKTsKKwkJdGltX29mZnNldCA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDQxNik7CiAJCWlmICgodGltX29mZnNldCAmIDB4MjAwMCkgPT0gMHgyMDAwKQotCQkJdGltX29mZnNldCB8PSAweEMwMDA7Ci0JCWlmIChmZnQgPT0gVFJBTlNNSVNTSU9OX01PREVfMkspCi0JCQl0aW1fb2Zmc2V0IDw8PSAyOworCQkJdGltX29mZnNldCB8PSAweEMwMDA7IC8vIFBCOiBUaGlzIG9ubHkgd29ya3MgaWYgdGltX29mZnNldCBpcyBzMTYgLSB3ZWlyZAorCisJCWlmIChuZmZ0ID09IDApCisJCQl0aW1fb2Zmc2V0ID0gdGltX29mZnNldCA8PCAyOyAvLyBQQjogRG8gbm90IHN0b3JlIHRoZSBvZmZzZXQgZm9yIGRpZmZlcmVudCB0aGluZ3MgaW4gb25lIHZhcmlhYmxlCiAJCXN0YXRlLT50aW1pbmdfb2Zmc2V0ICs9IHRpbV9vZmZzZXQ7CiAJfQotCiAJdGltX29mZnNldCA9IHN0YXRlLT50aW1pbmdfb2Zmc2V0OworCiAJaWYgKHRpbV9vZmZzZXQgPCAwKSB7CiAJCXRpbV9zZ24gPSAxOwogCQl0aW1fb2Zmc2V0ID0gLXRpbV9vZmZzZXQ7CiAJfSBlbHNlCiAJCXRpbV9zZ24gPSAwOwogCi0JY29tcDEgPSAgKHUzMil0aW1fb2Zmc2V0ICogKHUzMil0aW1mX2xzYiA7Ci0JY29tcDIgPSAgKHUzMil0aW1fb2Zmc2V0ICogKHUzMil0aW1mX21zYiA7CisJY29tcDEgPSB0aW1fb2Zmc2V0ICogdGltZl9sc2I7CisJY29tcDIgPSB0aW1fb2Zmc2V0ICogdGltZl9tc2I7CiAJY29tcCAgPSAoKGNvbXAxID4+IDE2KSArIGNvbXAyKSA+PiA3OwogCiAJaWYgKHRpbV9zZ24gPT0gMCkKLQkJY29tcCA9ICh1MzIpKHRpbWZfbXNiIDw8IDE2KSArICh1MzIpIHRpbWZfbHNiICsgY29tcDsKKwkJY29tcCA9IHRpbWZfbXNiICogKDE8PDE2KSArIHRpbWZfbHNiICsgY29tcDsKIAllbHNlCi0JCWNvbXAgPSAodTMyKSh0aW1mX21zYiA8PCAxNikgKyAodTMyKSB0aW1mX2xzYiAtIGNvbXAgOworCQljb21wID0gdGltZl9tc2IgKiAoMTw8MTYpICsgdGltZl9sc2IgLSBjb21wOwogCi0JdGltZl9tc2IgPSAoY29tcCA+PiAxNikgJiAweGZmOwotCXRpbWZfbHNiID0gY29tcCAmIDB4ZmZmZjsKKwl0aW1mX21zYiA9IChjb21wPj4xNikmMHhGRiA7CisJdGltZl9sc2IgPSBjb21wJjB4RkZGRjsKKyovCisJdTMyIHRpbWYgPSAxMzg0NDAyICogKEJXX0lOREVYX1RPX0tIWihidykgLyAxMDAwKTsKIAotCXdyKERJQjMwMDBNQ19SRUdfVElNSU5HX0ZSRVFfTVNCLHRpbWZfbXNiKTsKLQl3cihESUIzMDAwTUNfUkVHX1RJTUlOR19GUkVRX0xTQix0aW1mX2xzYik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDIzLCB0aW1mID4+IDE2KTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMjQsIHRpbWYgJiAweGZmZmYpOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX2luaXRfYXV0b19zY2FuKHN0cnVjdCBkaWIzMDAwX3N0YXRlICpzdGF0ZSwgZmVfYmFuZHdpZHRoX3QgYncsIGludCBib29zdCkKK3N0YXRpYyBpbnQgZGliMzAwMG1jX3NldHVwX3B3bTNfc3RhdGUoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUpCiB7Ci0JaWYgKGJvb3N0KSB7Ci0JCXdyKERJQjMwMDBNQ19SRUdfU0NBTl9CT09TVCxESUIzMDAwTUNfU0NBTl9CT09TVF9PTik7CisgICAgaWYgKHN0YXRlLT5jZmctPnB3bTNfaW52ZXJzaW9uKSB7CisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1MSwgKDIgPDwgMTQpIHwgKDAgPDwgMTApIHwgKDcgPDwgNikgfCAoMiA8PCAyKSB8ICgyIDw8IDApKTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUyLCAoMCA8PCA4KSB8ICg1IDw8IDUpIHwgKDEgPDwgNCkgfCAoMSA8PCAzKSB8ICgxIDw8IDIpIHwgKDIgPDwgMCkpOwogCX0gZWxzZSB7Ci0JCXdyKERJQjMwMDBNQ19SRUdfU0NBTl9CT09TVCxESUIzMDAwTUNfU0NBTl9CT09TVF9PRkYpOworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNTEsICgyIDw8IDE0KSB8ICg0IDw8IDEwKSB8ICg3IDw8IDYpIHwgKDIgPDwgMikgfCAoMiA8PCAwKSk7CisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1MiwgKDEgPDwgOCkgfCAoNSA8PCA1KSB8ICgxIDw8IDQpIHwgKDEgPDwgMykgfCAoMCA8PCAyKSB8ICgyIDw8IDApKTsKIAl9CisKKyAgICBpZiAoc3RhdGUtPmNmZy0+dXNlX3B3bTMpCisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAyNDUsICgxIDw8IDMpIHwgKDEgPDwgMCkpOworCWVsc2UKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDI0NSwgMCk7CisKKyAgICBkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTA0MCwgMHgzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWIzMDAwbWNfc2V0X291dHB1dF9tb2RlKHN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlLCBpbnQgbW9kZSkKK3sKKwlpbnQgICAgcmV0ID0gMDsKKwl1MTYgZmlmb190aHJlc2hvbGQgPSAxNzkyOworCXUxNiBvdXRyZWcgPSAwOworCXUxNiBvdXRtb2RlID0gMDsKKwl1MTYgZWxlY291dCA9IDE7CisJdTE2IHNtb19yZWcgPSBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCAyMDYpICYgMHgwMDEwOyAvKiBrZWVwIHRoZSBwaWRfcGFyc2UgYml0ICovCisKKwlkcHJpbnRrKCItSS0gIFNldHRpbmcgb3V0cHV0IG1vZGUgZm9yIGRlbW9kICVwIHRvICVkXG4iLAorCQkJJnN0YXRlLT5kZW1vZCwgbW9kZSk7CisKKwlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSBPVVRNT0RFX0hJR0hfWjogIC8vIGRpc2FibGUKKwkJCWVsZWNvdXQgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgT1VUTU9ERV9NUEVHMl9QQVJfR0FURURfQ0xLOiAgIC8vIFNUQnMgd2l0aCBwYXJhbGxlbCBnYXRlZCBjbG9jaworCQkJb3V0bW9kZSA9IDA7CisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX01QRUcyX1BBUl9DT05UX0NMSzogICAgLy8gU1RCcyB3aXRoIHBhcmFsbGVsIGNvbnRpbnVlcyBjbG9jaworCQkJb3V0bW9kZSA9IDE7CisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX01QRUcyX1NFUklBTDogICAgICAgICAgLy8gU1RCcyB3aXRoIHNlcmlhbCBpbnB1dAorCQkJb3V0bW9kZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX01QRUcyX0ZJRk86ICAgICAgICAgICAgLy8gZS5nLiBVU0IgZmVlZGluZworCQkJZWxlY291dCA9IDM7CisJCQkvKkFERFIgQCAyMDYgOgorCQkJUF9zbW9fZXJyb3JfZGlzY2FyZCAgWzE7Njo2XSA9IDAKKwkJCVBfc21vX3JzX2Rpc2NhcmQgICAgIFsxOzU6NV0gPSAwCisJCQlQX3Ntb19waWRfcGFyc2UgICAgICBbMTs0OjRdID0gMAorCQkJUF9zbW9fZmlmb19mbHVzaCAgICAgWzE7MzozXSA9IDAKKwkJCVBfc21vX21vZGUgICAgICAgICAgIFsyOzI6MV0gPSAxMQorCQkJUF9zbW9fb3ZmX3Byb3QgICAgICAgWzE7MDowXSA9IDAKKwkJCSovCisJCQlzbW9fcmVnIHw9IDMgPDwgMTsKKwkJCWZpZm9fdGhyZXNob2xkID0gNTEyOworCQkJb3V0bW9kZSA9IDU7CisJCQlicmVhazsKKwkJY2FzZSBPVVRNT0RFX0RJVkVSU0lUWToKKwkJCW91dG1vZGUgPSA0OworCQkJZWxlY291dCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWRwcmludGsoIlVuaGFuZGxlZCBvdXRwdXRfbW9kZSBwYXNzZWQgdG8gYmUgc2V0IGZvciBkZW1vZCAlcFxuIiwmc3RhdGUtPmRlbW9kKTsKKwkJCW91dG1vZGUgPSAwOworCQkJYnJlYWs7CisJfQorCisJaWYgKChzdGF0ZS0+Y2ZnLT5vdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzKSkKKwkJc21vX3JlZyB8PSAoMSA8PCA1KTsgLy8gUF9zbW9fcnNfZGlzY2FyZCAgICAgWzE7NTo1XSA9IDEKKworCW91dHJlZyA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDI0NCkgJiAweDA3RkY7CisJb3V0cmVnIHw9IChvdXRtb2RlIDw8IDExKTsKKwlyZXQgfD0gZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsICAyNDQsIG91dHJlZyk7CisJcmV0IHw9IGRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAgMjA2LCBzbW9fcmVnKTsgICAvKnNtb18gbW9kZSovCisJcmV0IHw9IGRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAgMjA3LCBmaWZvX3RocmVzaG9sZCk7IC8qIHN5bmNocm9ub3VzIGZyZWFkICovCisJcmV0IHw9IGRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDQwLCBlbGVjb3V0KTsgICAgICAgICAvKiBQX291dF9jZmcgKi8KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGRpYjMwMDBtY19zZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLCB1OCBidykKK3sKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBid19jZmdbNl0gPSB7IDAgfTsKKwl1MTYgaW1wX2J3X2NmZ1szXSA9IHsgMCB9OworCXUxNiByZWc7CisKKy8qIHNldHRpbmdzIGhlcmUgYXJlIGZvciAyNy43TUh6ICovCiAJc3dpdGNoIChidykgewogCQljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19iYW5kd2lkdGgsZGliMzAwMG1jX2JhbmR3aWR0aF84bWh6KTsKKwkJCWJ3X2NmZ1swXSA9IDB4MDAxOTsgYndfY2ZnWzFdID0gMHg1YzMwOyBid19jZmdbMl0gPSAweDAwNTQ7IGJ3X2NmZ1szXSA9IDB4ODhhMDsgYndfY2ZnWzRdID0gMHgwMWE2OyBid19jZmdbNV0gPSAweGFiMjA7CisJCQlpbXBfYndfY2ZnWzBdID0gMHgwNGRiOyBpbXBfYndfY2ZnWzFdID0gMHgwMGRiOyBpbXBfYndfY2ZnWzJdID0gMHgwMGI3OwogCQkJYnJlYWs7CisKIAkJY2FzZSBCQU5EV0lEVEhfN19NSFo6Ci0JCQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYmFuZHdpZHRoLGRpYjMwMDBtY19iYW5kd2lkdGhfN21oeik7CisJCQlid19jZmdbMF0gPSAweDAwMWM7IGJ3X2NmZ1sxXSA9IDB4ZmJhNTsgYndfY2ZnWzJdID0gMHgwMDYwOyBid19jZmdbM10gPSAweDljMjU7IGJ3X2NmZ1s0XSA9IDB4MDFlMzsgYndfY2ZnWzVdID0gMHgwY2I3OworCQkJaW1wX2J3X2NmZ1swXSA9IDB4MDRjMDsgaW1wX2J3X2NmZ1sxXSA9IDB4MDBjMDsgaW1wX2J3X2NmZ1syXSA9IDB4MDBhMDsKIAkJCWJyZWFrOworCiAJCWNhc2UgQkFORFdJRFRIXzZfTUhaOgotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2JhbmR3aWR0aCxkaWIzMDAwbWNfYmFuZHdpZHRoXzZtaHopOworCQkJYndfY2ZnWzBdID0gMHgwMDIxOyBid19jZmdbMV0gPSAweGQwNDA7IGJ3X2NmZ1syXSA9IDB4MDA3MDsgYndfY2ZnWzNdID0gMHhiNjJiOyBid19jZmdbNF0gPSAweDAyMzM7IGJ3X2NmZ1s1XSA9IDB4OGVkNTsKKwkJCWltcF9id19jZmdbMF0gPSAweDA0YTU7IGltcF9id19jZmdbMV0gPSAweDAwYTU7IGltcF9id19jZmdbMl0gPSAweDAwODk7CiAJCQlicmVhazsKLS8qCQljYXNlIEJBTkRXSURUSF81X01IWjoKLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19iYW5kd2lkdGgsZGliMzAwMG1jX2JhbmR3aWR0aF81bWh6KTsKLQkJCWJyZWFrOyovCi0JCWNhc2UgQkFORFdJRFRIX0FVVE86Ci0JCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIoInVua25vd24gYmFuZHdpZHRoIHZhbHVlICglZCkuIixidyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKworCQljYXNlIDI1NSAvKiBCQU5EV0lEVEhfNV9NSFogKi86CisJCQlid19jZmdbMF0gPSAweDAwMjg7IGJ3X2NmZ1sxXSA9IDB4OTM4MDsgYndfY2ZnWzJdID0gMHgwMDg3OyBid19jZmdbM10gPSAweDQxMDA7IGJ3X2NmZ1s0XSA9IDB4MDJhNDsgYndfY2ZnWzVdID0gMHg0NTAwOworCQkJaW1wX2J3X2NmZ1swXSA9IDB4MDQ4OTsgaW1wX2J3X2NmZ1sxXSA9IDB4MDA4OTsgaW1wX2J3X2NmZ1syXSA9IDB4MDA3MjsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoYm9vc3QpIHsKLQkJdTMyIHRpbWVvdXQgPSAocmQoRElCMzAwME1DX1JFR19CV19USU1PVVRfTVNCKSA8PCAxNikgKwotCQkJcmQoRElCMzAwME1DX1JFR19CV19USU1PVVRfTFNCKTsKLQkJdGltZW91dCAqPSA4NTsgdGltZW91dCA+Pj0gNzsKLQkJd3IoRElCMzAwME1DX1JFR19CV19USU1PVVRfTVNCLCh0aW1lb3V0ID4+IDE2KSAmIDB4ZmZmZik7Ci0JCXdyKERJQjMwMDBNQ19SRUdfQldfVElNT1VUX0xTQix0aW1lb3V0ICYgMHhmZmZmKTsKLQl9CisKKwlmb3IgKHJlZyA9IDY7IHJlZyA8IDEyOyByZWcrKykKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIHJlZywgYndfY2ZnW3JlZyAtIDZdKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTIsIDB4MDAwMCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEzLCAweDAzZTgpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxNCwgMHgwMDAwKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTUsIDB4MDNmMik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE2LCAweDAwMDEpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxNywgMHhiMGQwKTsKKwkvLyBQX3NlY19sZW4KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTgsIDB4MDM5Myk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE5LCAweDg3MDApOworCisJZm9yIChyZWcgPSA1NTsgcmVnIDwgNTg7IHJlZysrKQorCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgcmVnLCBpbXBfYndfY2ZnW3JlZyAtIDU1XSk7CisKKwkvLyBUaW1pbmcgY29uZmlndXJhdGlvbgorCWRpYjMwMDBtY19zZXRfdGltaW5nKHN0YXRlLCAwLCBidywgMCk7CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBkaWIzMDAwbWNfc2V0X2FkcF9jZmcoc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlLCBmZV9tb2R1bGF0aW9uX3QgY29uKQorc3RhdGljIHUxNiBpbXB1bHNlX25vaXNlX3ZhbFsyOV0gPQorCiB7Ci0Jc3dpdGNoIChjb24pIHsKLQkJY2FzZSBRQU1fNjQ6Ci0JCQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYWRwX2NmZyxkaWIzMDAwbWNfYWRwX2NmZ1syXSk7Ci0JCQlicmVhazsKLQkJY2FzZSBRQU1fMTY6Ci0JCQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYWRwX2NmZyxkaWIzMDAwbWNfYWRwX2NmZ1sxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSBRUFNLOgotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2FkcF9jZmcsZGliMzAwMG1jX2FkcF9jZmdbMF0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgUUFNX0FVVE86Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXdhcm4oInVua293biBjb25zdGVsbGF0aW9uLiIpOwotCQkJYnJlYWs7Ci0JfQotCXJldHVybiAwOwotfQorCTB4MzgsIDB4NmQ5LCAweDNmMjgsIDB4N2E3LCAweDNhNzQsIDB4MTk2LCAweDMyYSwgMHg0OGMsIDB4M2ZmZSwgMHg3ZjMsCisJMHgyZDk0LCAweDc2LCAweDUzZCwgMHgzZmY4LCAweDdlMywgMHgzMzIwLCAweDc2LCAweDViMywgMHgzZmViLCAweDdkMiwKKwkweDM2NWUsIDB4NzYsIDB4NDhjLCAweDNmZmUsIDB4NWIzLCAweDNmZWIsIDB4NzYsIDB4MDAwMCwgMHhkCit9OwogCi1zdGF0aWMgaW50IGRpYjMwMDBtY19zZXRfZ2VuZXJhbF9jZmcoc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCwgaW50ICphdXRvX3ZhbCkKK3N0YXRpYyB2b2lkIGRpYjMwMDBtY19zZXRfaW1wdWxzZV9ub2lzZShzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSwgdTggbW9kZSwgczE2IG5mZnQpCiB7Ci0Jc3RydWN0IGR2Yl9vZmRtX3BhcmFtZXRlcnMgKm9mZG0gPSAmZmVwLT51Lm9mZG07Ci0JZmVfY29kZV9yYXRlX3QgZmVfY3IgPSBGRUNfTk9ORTsKLQl1OCBmZnQ9MCwgZ3VhcmQ9MCwgcWFtPTAsIGFscGhhPTAsIHNlbF9ocD0wLCBjcj0wLCBocmNoPTA7Ci0JaW50IHNlcTsKKwl1MTYgaTsKKwlmb3IgKGkgPSA1ODsgaSA8IDg3OyBpKyspCisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCBpLCBpbXB1bHNlX25vaXNlX3ZhbFtpLTU4XSk7CiAKLQlzd2l0Y2ggKG9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlKSB7Ci0JCWNhc2UgVFJBTlNNSVNTSU9OX01PREVfMks6IGZmdCA9IERJQjMwMDBfVFJBTlNNSVNTSU9OX01PREVfMks7IGJyZWFrOwotCQljYXNlIFRSQU5TTUlTU0lPTl9NT0RFXzhLOiBmZnQgPSBESUIzMDAwX1RSQU5TTUlTU0lPTl9NT0RFXzhLOyBicmVhazsKLQkJY2FzZSBUUkFOU01JU1NJT05fTU9ERV9BVVRPOiBicmVhazsKLQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXN3aXRjaCAob2ZkbS0+Z3VhcmRfaW50ZXJ2YWwpIHsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzMyOiBndWFyZCA9IERJQjMwMDBfR1VBUkRfVElNRV8xXzMyOyBicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzE2OiBndWFyZCA9IERJQjMwMDBfR1VBUkRfVElNRV8xXzE2OyBicmVhazsKLQkJY2FzZSBHVUFSRF9JTlRFUlZBTF8xXzg6ICBndWFyZCA9IERJQjMwMDBfR1VBUkRfVElNRV8xXzg7IGJyZWFrOwotCQljYXNlIEdVQVJEX0lOVEVSVkFMXzFfNDogIGd1YXJkID0gRElCMzAwMF9HVUFSRF9USU1FXzFfNDsgYnJlYWs7Ci0JCWNhc2UgR1VBUkRfSU5URVJWQUxfQVVUTzogYnJlYWs7Ci0JCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOwotCX0KLQlzd2l0Y2ggKG9mZG0tPmNvbnN0ZWxsYXRpb24pIHsKLQkJY2FzZSBRUFNLOiAgIHFhbSA9IERJQjMwMDBfQ09OU1RFTExBVElPTl9RUFNLOyBicmVhazsKLQkJY2FzZSBRQU1fMTY6IHFhbSA9IERJQjMwMDBfQ09OU1RFTExBVElPTl8xNlFBTTsgYnJlYWs7Ci0JCWNhc2UgUUFNXzY0OiBxYW0gPSBESUIzMDAwX0NPTlNURUxMQVRJT05fNjRRQU07IGJyZWFrOwotCQljYXNlIFFBTV9BVVRPOiBicmVhazsKLQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXN3aXRjaCAob2ZkbS0+aGllcmFyY2h5X2luZm9ybWF0aW9uKSB7Ci0JCWNhc2UgSElFUkFSQ0hZX05PTkU6IC8qIGZhbGwgdGhyb3VnaCAqLwotCQljYXNlIEhJRVJBUkNIWV8xOiBhbHBoYSA9IERJQjMwMDBfQUxQSEFfMTsgYnJlYWs7Ci0JCWNhc2UgSElFUkFSQ0hZXzI6IGFscGhhID0gRElCMzAwMF9BTFBIQV8yOyBicmVhazsKLQkJY2FzZSBISUVSQVJDSFlfNDogYWxwaGEgPSBESUIzMDAwX0FMUEhBXzQ7IGJyZWFrOwotCQljYXNlIEhJRVJBUkNIWV9BVVRPOiBicmVhazsKLQkJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChvZmRtLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX05PTkUpIHsKLQkJaHJjaCAgID0gRElCMzAwMF9IUkNIX09GRjsKLQkJc2VsX2hwID0gRElCMzAwMF9TRUxFQ1RfSFA7Ci0JCWZlX2NyICA9IG9mZG0tPmNvZGVfcmF0ZV9IUDsKLQl9IGVsc2UgaWYgKG9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiAhPSBISUVSQVJDSFlfQVVUTykgewotCQlocmNoICAgPSBESUIzMDAwX0hSQ0hfT047Ci0JCXNlbF9ocCA9IERJQjMwMDBfU0VMRUNUX0xQOwotCQlmZV9jciAgPSBvZmRtLT5jb2RlX3JhdGVfTFA7Ci0JfQotCXN3aXRjaCAoZmVfY3IpIHsKLQkJY2FzZSBGRUNfMV8yOiBjciA9IERJQjMwMDBfRkVDXzFfMjsgYnJlYWs7Ci0JCWNhc2UgRkVDXzJfMzogY3IgPSBESUIzMDAwX0ZFQ18yXzM7IGJyZWFrOwotCQljYXNlIEZFQ18zXzQ6IGNyID0gRElCMzAwMF9GRUNfM180OyBicmVhazsKLQkJY2FzZSBGRUNfNV82OiBjciA9IERJQjMwMDBfRkVDXzVfNjsgYnJlYWs7Ci0JCWNhc2UgRkVDXzdfODogY3IgPSBESUIzMDAwX0ZFQ183Xzg7IGJyZWFrOwotCQljYXNlIEZFQ19OT05FOiBicmVhazsKLQkJY2FzZSBGRUNfQVVUTzogYnJlYWs7Ci0JCWRlZmF1bHQ6IHJldHVybiAtRUlOVkFMOworCWlmIChuZmZ0ID09IDEpIHsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDU4LCAweDNiKTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDg0LCAweDAwKTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDg1LCAweDgyMDApOwogCX0KIAotCXdyKERJQjMwMDBNQ19SRUdfREVNT0RfUEFSTSxESUIzMDAwTUNfREVNT0RfUEFSTShhbHBoYSxxYW0sZ3VhcmQsZmZ0KSk7Ci0Jd3IoRElCMzAwME1DX1JFR19IUkNIX1BBUk0sRElCMzAwME1DX0hSQ0hfUEFSTShzZWxfaHAsY3IsaHJjaCkpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAzNCwgMHgxMjk0KTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMzUsIDB4MWZmOCk7CisJaWYgKG1vZGUgPT0gMSkKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDU1LCBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCA1NSkgfCAoMSA8PCAxMCkpOworfQogCi0Jc3dpdGNoIChmZXAtPmludmVyc2lvbikgewotCQljYXNlIElOVkVSU0lPTl9PRkY6Ci0JCQl3cihESUIzMDAwTUNfUkVHX1NFVF9ERFNfRlJFUV9NU0IsRElCMzAwME1DX0REU19GUkVRX01TQl9JTlZfT0ZGKTsKLQkJCWJyZWFrOwotCQljYXNlIElOVkVSU0lPTl9BVVRPOiAvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBJTlZFUlNJT05fT046Ci0JCQl3cihESUIzMDAwTUNfUkVHX1NFVF9ERFNfRlJFUV9NU0IsRElCMzAwME1DX0REU19GUkVRX01TQl9JTlZfT04pOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgZGliMzAwMG1jX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QpCit7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnICphZ2MgPSBzdGF0ZS0+Y2ZnLT5hZ2M7CisKKwkvLyBSZXN0YXJ0IENvbmZpZ3VyYXRpb24KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAyNywgMHg4MDAwKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAyNywgMHgwMDAwKTsKKworCS8vIHBvd2VyIHVwIHRoZSBkZW1vZCArIG1vYmlsaXR5IGNvbmZpZ3VyYXRpb24KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTQwLCAweDAwMDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDMxLCAwKTsKKworCWlmIChzdGF0ZS0+Y2ZnLT5tb2JpbGVfbW9kZSkgeworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTM5LCAgMHgwMDAwKTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE0MSwgIDB4MDAwMCk7CisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxNzUsICAweDAwMDIpOworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzMiwgMHgwMDAwKTsKKwl9IGVsc2UgeworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTM5LCAgMHgwMDAxKTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE0MSwgIDB4MDAwMCk7CisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxNzUsICAweDAwMDApOworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAzMiwgMHgwMTJDKTsKIAl9CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEwMzMsIDApOwogCi0Jc2VxID0gZGliMzAwMF9zZXEKLQkJW29mZG0tPnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE9dCi0JCVtvZmRtLT5ndWFyZF9pbnRlcnZhbCA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPXQotCQlbZmVwLT5pbnZlcnNpb24gPT0gSU5WRVJTSU9OX0FVVE9dOworCS8vIFBfY2xrX2NmZworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDM3LCAxMjU5Mik7CiAKLQlkZWJfc2V0Zigic2VxPyAlZFxuIiwgc2VxKTsKLQl3cihESUIzMDAwTUNfUkVHX1NFUV9UUFMsRElCMzAwME1DX1NFUV9UUFMoc2VxLDEpKTsKLQkqYXV0b192YWwgPSBvZmRtLT5jb25zdGVsbGF0aW9uID09IFFBTV9BVVRPIHx8Ci0JCQlvZmRtLT5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPT0gSElFUkFSQ0hZX0FVVE8gfHwKLQkJCW9mZG0tPmd1YXJkX2ludGVydmFsID09IEdVQVJEX0lOVEVSVkFMX0FVVE8gfHwKLQkJCW9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlID09IFRSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfHwKLQkJCWZlX2NyID09IEZFQ19BVVRPIHx8Ci0JCQlmZXAtPmludmVyc2lvbiA9PSBJTlZFUlNJT05fQVVUTzsKKwkvLyBvdGhlciBjb25maWd1cmF0aW9ucworCisJLy8gUF9jdHJsX3NmcmVxCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDMzLCAoNSA8PCAwKSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDg4LCAoMSA8PCAxMCkgfCAoMHgxMCA8PCAwKSk7CisKKwkvLyBQaGFzZSBub2lzZSBjb250cm9sCisJLy8gUF9mZnRfcGhhY29yX2luaCwgUF9mZnRfcGhhY29yX2NwZSwgUF9mZnRfcG93cmFuZ2UKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgOTksICgxIDw8IDkpIHwgKDB4MjAgPDwgMCkpOworCisJaWYgKHN0YXRlLT5jZmctPnBoYXNlX25vaXNlX21vZGUgPT0gMCkKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDExMSwgMHgwMCk7CisJZWxzZQorCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTExLCAweDAyKTsKKworCS8vIFBfYWdjX2dsb2JhbAorCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1MCwgMHg4MDAwKTsKKworCS8vIGFnYyBzZXR1cCBtaXNjCisJZGliMzAwMG1jX3NldHVwX3B3bTNfc3RhdGUoc3RhdGUpOworCisJLy8gUF9hZ2NfY291bnRlcl9sb2NrCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUzLCAweDg3KTsKKwkvLyBQX2FnY19jb3VudGVyX3VubG9jaworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA1NCwgMHg4Nyk7CisKKwkvKiBhZ2MgKi8KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMzYsIHN0YXRlLT5jZmctPm1heF90aW1lKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMzcsIGFnYy0+c2V0dXApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAzOCwgc3RhdGUtPmNmZy0+cHdtM192YWx1ZSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDM5LCBzdGF0ZS0+Y2ZnLT5sbl9hZGNfbGV2ZWwpOworCisJLy8gc2V0X2FnY19sb29wX0J3CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDQwLCAweDAxNzkpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA0MSwgMHgwM2YwKTsKKworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA0MiwgYWdjLT5hZ2MxX21heCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDQzLCBhZ2MtPmFnYzFfbWluKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNDQsIGFnYy0+YWdjMl9tYXgpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA0NSwgYWdjLT5hZ2MyX21pbik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDQ2LCAoYWdjLT5hZ2MxX3B0MSA8PCA4KSB8IGFnYy0+YWdjMV9wdDIpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA0NywgKGFnYy0+YWdjMV9zbG9wZTEgPDwgOCkgfCBhZ2MtPmFnYzFfc2xvcGUyKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNDgsIChhZ2MtPmFnYzJfcHQxIDw8IDgpIHwgYWdjLT5hZ2MyX3B0Mik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDQ5LCAoYWdjLT5hZ2MyX3Nsb3BlMSA8PCA4KSB8IGFnYy0+YWdjMl9zbG9wZTIpOworCisvLyBCZWdpbjogVGltZU91dCByZWdpc3RlcnMKKwkvLyBQX3BoYTNfdGhyZXMKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTEwLCAzMjc3KTsKKwkvLyBQX3RpbWZfYWxwaGEgPSA2LCBQX2Nvcm1fYWxwaGEgPSA2LCBQX2Nvcm1fdGhyZXMgPSAweDgwCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsICAyNiwgMHg2NjgwKTsKKwkvLyBsb2NrX21hc2swCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEsIDQpOworCS8vIGxvY2tfbWFzazEKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMiwgNCk7CisJLy8gbG9ja19tYXNrMgorCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAzLCAweDEwMDApOworCS8vIFBfc2VhcmNoX21heHRyaWFsPTEKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgNSwgMSk7CisKKwlkaWIzMDAwbWNfc2V0X2JhbmR3aWR0aCgmc3RhdGUtPmRlbW9kLCBCQU5EV0lEVEhfOF9NSFopOworCisJLy8gZGl2X2xvY2tfbWFzaworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAgNCwgMHg4MTQpOworCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDIxLCAoMSA8PCA5KSB8IDB4MTY0KTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMjIsIDB4NDYzZCk7CisKKwkvLyBTcHVyaW91cyBybSBjZmcKKwkvLyBQX2NzcHVfcmVndWwsIFBfY3NwdV93aW5fY3V0CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEyMCwgMHgyMDBmKTsKKwkvLyBQX2FkcF9zZWxlY19tb25pdAorCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMzQsIDApOworCisJLy8gRmVjIGNmZworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxOTUsIDB4MTApOworCisJLy8gZGl2ZXJzaXR5IHJlZ2lzdGVyOiBQX2R2c3lfc3luY193YWl0Li4KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCAweDJGRjApOworCisJLy8gSW1wdWxzZSBub2lzZSBjb25maWd1cmF0aW9uCisJZGliMzAwMG1jX3NldF9pbXB1bHNlX25vaXNlKHN0YXRlLCAwLCAxKTsKKworCS8vIG91dHB1dCBtb2RlIHNldC11cAorCWRpYjMwMDBtY19zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfSElHSF9aKTsKKworCS8qIGNsb3NlIHRoZSBpMmMtZ2F0ZSAqLworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA3NjksICgxIDw8IDcpICk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBkaWIzMDAwbWNfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QpCit7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDM3LCBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCAxMDM3KSB8IDB4MDAwMyk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEwMzEsIDB4RkZGRik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEwMzIsIDB4RkZGRik7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEwMzMsIDB4RkZGNCk7ICAgLy8gKioqKiAgQmluMgorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjMwMDBtY19zZXRfYWRwX2NmZyhzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSwgczE2IHFhbSkKK3sKKwl1MTYgY2ZnWzRdID0geyAwIH0scmVnOworCXN3aXRjaCAocWFtKSB7CisJCWNhc2UgMDoKKwkJCWNmZ1swXSA9IDB4MDk5YTsgY2ZnWzFdID0gMHg3ZmFlOyBjZmdbMl0gPSAweDAzMzM7IGNmZ1szXSA9IDB4N2ZmMDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQljZmdbMF0gPSAweDAyM2Q7IGNmZ1sxXSA9IDB4N2ZkZjsgY2ZnWzJdID0gMHgwMGE0OyBjZmdbM10gPSAweDdmZjA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJY2ZnWzBdID0gMHgwMTQ4OyBjZmdbMV0gPSAweDdmZjA7IGNmZ1syXSA9IDB4MDBhNDsgY2ZnWzNdID0gMHg3ZmY4OworCQkJYnJlYWs7CisJfQorCWZvciAocmVnID0gMTI5OyByZWcgPCAxMzM7IHJlZysrKQorCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgcmVnLCBjZmdbcmVnIC0gMTI5XSk7Cit9CisKK3N0YXRpYyB2b2lkIGRpYjMwMDBtY19zZXRfY2hhbm5lbF9jZmcoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUsIHN0cnVjdCBkaWJ4MDAwX29mZG1fY2hhbm5lbCAqY2hhbiwgdTE2IHNlcSkKK3sKKwl1MTYgdG1wOworCisJZGliMzAwMG1jX3NldF90aW1pbmcoc3RhdGUsIGNoYW4tPm5mZnQsIGNoYW4tPkJ3LCAwKTsKKworLy8JaWYgKGJvb3N0KQorLy8JCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDAsICgxMSA8PCA2KSArIDYpOworLy8JZWxzZQorCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTAwLCAoMTYgPDwgNikgKyA5KTsKKworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDI3LCAweDA4MDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMDI3LCAweDAwMDApOworCisJLy9EZWZhdWx0IGNmZyBpc2kgb2Zmc2V0IGFkcAorCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAyNiwgIDB4NjY4MCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDI5LCAgMHgxMjczKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMzMsICAgICAgIDUpOworCWRpYjMwMDBtY19zZXRfYWRwX2NmZyhzdGF0ZSwgMSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEzMywgIDE1NTY0KTsKKworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxMiAsIDB4MCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDEzICwgMHgzZTgpOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxNCAsIDB4MCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDE1ICwgMHgzZjIpOworCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDkzLDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA5NCwwKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgOTUsMCk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDk2LDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCA5NywwKTsKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgOTgsMCk7CisKKwlkaWIzMDAwbWNfc2V0X2ltcHVsc2Vfbm9pc2Uoc3RhdGUsIDAsIGNoYW4tPm5mZnQpOworCisJdG1wID0gKChjaGFuLT5uZmZ0ICYgMHgxKSA8PCA3KSB8IChjaGFuLT5ndWFyZCA8PCA1KSB8IChjaGFuLT5ucWFtIDw8IDMpIHwgY2hhbi0+dml0X2FscGhhOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAwLCB0bXApOworCisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDUsIHNlcSk7CisKKwl0bXAgPSAoY2hhbi0+dml0X2hyY2ggPDwgNCkgfCAoY2hhbi0+dml0X3NlbGVjdF9ocCk7CisJaWYgKCFjaGFuLT52aXRfaHJjaCB8fCAoY2hhbi0+dml0X2hyY2ggJiYgY2hhbi0+dml0X3NlbGVjdF9ocCkpCisJCXRtcCB8PSBjaGFuLT52aXRfY29kZV9yYXRlX2hwIDw8IDE7CisJZWxzZQorCQl0bXAgfD0gY2hhbi0+dml0X2NvZGVfcmF0ZV9scCA8PCAxOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAxODEsIHRtcCk7CisKKwkvLyBkaXZlcnNpdHkgc3luY2hybyBkZWxheQorCXRtcCA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDE4MCkgJiAweDAwMGY7CisJdG1wIHw9ICgoY2hhbi0+bmZmdCA9PSAwKSA/IDY0IDogMjU2KSAqICgoMSA8PCAoY2hhbi0+Z3VhcmQpKSAqIDMgLyAyKSA8PCA0OyAvLyBhZGQgNTAlIFNGTiBtYXJnaW4KKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMTgwLCB0bXApOworCisJLy8gcmVzdGFydCBkZW1vZAorCXRtcCA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAwLCB0bXAgfCAoMSA8PCA5KSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDAsIHRtcCk7CisKKwltc2xlZXAoMzApOworCisJZGliMzAwMG1jX3NldF9pbXB1bHNlX25vaXNlKHN0YXRlLCBzdGF0ZS0+Y2ZnLT5pbXB1bHNlX25vaXNlX21vZGUsIGNoYW4tPm5mZnQpOworfQorCitzdGF0aWMgaW50IGRpYjMwMDBtY19hdXRvc2VhcmNoX3N0YXJ0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLCBzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgKmNoYW4pCit7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgcmVnOworLy8JdTMyIHZhbDsKKwlzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgZmNoYW47CisKKwlJTklUX09GRE1fQ0hBTk5FTCgmZmNoYW4pOworCWZjaGFuID0gKmNoYW47CisKKworCS8qIGEgY2hhbm5lbCBmb3IgYXV0b3NlYXJjaCAqLworCXJlZyA9IDA7CisJaWYgKGNoYW4tPm5mZnQgPT0gLTEgJiYgY2hhbi0+Z3VhcmQgPT0gLTEpIHJlZyA9IDc7CisJaWYgKGNoYW4tPm5mZnQgPT0gLTEgJiYgY2hhbi0+Z3VhcmQgIT0gLTEpIHJlZyA9IDI7CisJaWYgKGNoYW4tPm5mZnQgIT0gLTEgJiYgY2hhbi0+Z3VhcmQgPT0gLTEpIHJlZyA9IDM7CisKKwlmY2hhbi5uZmZ0ID0gMTsgZmNoYW4uZ3VhcmQgPSAwOyBmY2hhbi5ucWFtID0gMjsKKwlmY2hhbi52aXRfYWxwaGEgPSAxOyBmY2hhbi52aXRfY29kZV9yYXRlX2hwID0gMjsgZmNoYW4udml0X2NvZGVfcmF0ZV9scCA9IDI7CisJZmNoYW4udml0X2hyY2ggPSAwOyBmY2hhbi52aXRfc2VsZWN0X2hwID0gMTsKKworCWRpYjMwMDBtY19zZXRfY2hhbm5lbF9jZmcoc3RhdGUsICZmY2hhbiwgcmVnKTsKKworCXJlZyA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDApOworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAwLCByZWcgfCAoMSA8PCA4KSk7CisJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDAsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWIzMDAwbWNfYXV0b3NlYXJjaF9pc19pcnEoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QpCit7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgaXJxX3BlbmRpbmcgPSBkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCA1MTEpOworCisJaWYgKGlycV9wZW5kaW5nICYgMHgxKSAvLyBmYWlsZWQKKwkJcmV0dXJuIDE7CisKKwlpZiAoaXJxX3BlbmRpbmcgJiAweDIpIC8vIHN1Y2NlZWRlZAorCQlyZXR1cm4gMjsKKworCXJldHVybiAwOyAvLyBzdGlsbCBwZW5kaW5nCit9CisKK3N0YXRpYyBpbnQgZGliMzAwMG1jX3R1bmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIHN0cnVjdCBkaWJ4MDAwX29mZG1fY2hhbm5lbCAqY2gpCit7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBkZW1vZC0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCS8vICoqIGNvbmZpZ3VyZSBkZW1vZCAqKgorCWRpYjMwMDBtY19zZXRfY2hhbm5lbF9jZmcoc3RhdGUsIGNoLCAwKTsKKworCS8vIGFjdGl2YXRlcyBpc2kKKwlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMjksIDB4MTA3Myk7CisKKwlkaWIzMDAwbWNfc2V0X2FkcF9jZmcoc3RhdGUsICh1OCljaC0+bnFhbSk7CisKKwlpZiAoY2gtPm5mZnQgPT0gMSkgeworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMjYsIDM4NTI4KTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDMzLCA4KTsKKwl9IGVsc2UgeworCQlkaWIzMDAwbWNfd3JpdGVfd29yZChzdGF0ZSwgMjYsIDMwMzM2KTsKKwkJZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDMzLCA2KTsKKwl9CisKKwkvLyBpZiAobG9jaykKKwkvLwlkaWIzMDAwbWNfc2V0X3RpbWluZyhzdGF0ZSwgY2gtPm5mZnQsIGNoLT5CdywgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWIzMDAwbWNfZGVtb2Rfb3V0cHV0X21vZGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIGludCBtb2RlKQoreworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlID0gZGVtb2QtPmRlbW9kdWxhdG9yX3ByaXY7CisJcmV0dXJuIGRpYjMwMDBtY19zZXRfb3V0cHV0X21vZGUoc3RhdGUsIG1vZGUpOworfQorCitzdGF0aWMgaW50IGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2RbXSwgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyKQoreworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0OworCWludCBrLHJldD0wOworCXU4IG5ld19hZGRyOworCisJc3RhdGljIHU4IERJQjMwMDBNQ19JMkNfQUREUkVTU1tdID0gezIwLDIyLDI0LDI2fTsKKworCWZvciAoayA9IG5vX29mX2RlbW9kcy0xOyBrID49IDA7IGstLSkgeworCQlzdCA9IGRlbW9kW2tdLT5kZW1vZHVsYXRvcl9wcml2OworCisJCS8qIGRlc2lnbmF0ZWQgaTJjIGFkZHJlc3MgKi8KKwkJbmV3X2FkZHIgICAgICAgICAgPSBESUIzMDAwTUNfSTJDX0FERFJFU1Nba107CisKKwkJc3QtPmkyY19hZGRyID0gbmV3X2FkZHI7CisJCWlmIChkaWIzMDAwbWNfaWRlbnRpZnkoc3QpICE9IDApIHsKKwkJCXN0LT5pMmNfYWRkciA9IGRlZmF1bHRfYWRkcjsKKwkJCWlmIChkaWIzMDAwbWNfaWRlbnRpZnkoc3QpICE9IDApIHsKKwkJCQlkcHJpbnRrKCItRS0gIERpQjMwMDBQL01DICMlZDogbm90IGlkZW50aWZpZWRcbiIsIGspOworCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCQl9CisKKwkJLyogdHVybiBvbiBkaXZfb3V0ICovCisJCWRpYjMwMDBtY19kZW1vZF9vdXRwdXRfbW9kZShkZW1vZFtrXSwgT1VUTU9ERV9NUEVHMl9QQVJfQ09OVF9DTEspOworCisJCS8vIHNldCBuZXcgaTJjIGFkZHJlc3MgYW5kIGZvcmNlIGRpdnN0ciAoQml0IDEpIHRvIHZhbHVlIDAgKEJpdCAwKQorCQlyZXQgfD0gZGliMzAwMG1jX3dyaXRlX3dvcmQoc3QsIDEwMjQsIChuZXdfYWRkciA8PCAzKSB8IDB4MSk7CisJCXN0LT5pMmNfYWRkciA9IG5ld19hZGRyOworCX0KKworCWZvciAoayA9IDA7IGsgPCBub19vZl9kZW1vZHM7IGsrKykgeworCQlzdCA9IGRlbW9kW2tdLT5kZW1vZHVsYXRvcl9wcml2OworCisJCXJldCB8PSBkaWIzMDAwbWNfd3JpdGVfd29yZChzdCwgMTAyNCwgc3QtPmkyY19hZGRyIDw8IDMpOworCisJCS8qIHR1cm4gb2ZmIGRhdGEgb3V0cHV0ICovCisJCWRpYjMwMDBtY19kZW1vZF9vdXRwdXRfbW9kZShkZW1vZFtrXSxPVVRNT0RFX0hJR0hfWik7CisJCWRpYjMwMDBtY193cml0ZV93b3JkKHN0LCA3NjksICgxIDw8IDcpICk7CisKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgaW50IGdhdGluZykKK3sKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdCA9IGRlbW9kLT5kZW1vZHVsYXRvcl9wcml2OworCXJldHVybiBkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcigmc3QtPmkyY19tYXN0ZXIsIERJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiwgZ2F0aW5nKTsKK30KKworRVhQT1JUX1NZTUJPTChkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIpOworCiBzdGF0aWMgaW50IGRpYjMwMDBtY19nZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKKwkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCkKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlzdHJ1Y3QgZHZiX29mZG1fcGFyYW1ldGVycyAqb2ZkbSA9ICZmZXAtPnUub2ZkbTsKLQlmZV9jb2RlX3JhdGVfdCAqY3I7Ci0JdTE2IHRwc192YWwsY3JfdmFsOwotCWludCBpbnZfdGVzdDEsaW52X3Rlc3QyOwotCXUzMiBkZHNfdmFsLCB0aHJlc2hvbGQgPSAweDEwMDAwMDA7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgdHBzID0gZGliMzAwMG1jX3JlYWRfd29yZChzdGF0ZSw0NTgpOwogCi0JaWYgKCEocmQoRElCMzAwME1DX1JFR19MT0NLXzUwNykgJiBESUIzMDAwTUNfTE9DS181MDcpKQotCQlyZXR1cm4gMDsKKwlmZXAtPmludmVyc2lvbiA9IElOVkVSU0lPTl9BVVRPOwogCi0JZGRzX3ZhbCA9IChyZChESUIzMDAwTUNfUkVHX0REU19GUkVRX01TQikgPDwgMTYpICsgcmQoRElCMzAwME1DX1JFR19ERFNfRlJFUV9MU0IpOwotCWRlYl9nZXRmKCJERFNfRlJFUTogJTZ4XG4iLGRkc192YWwpOwotCWlmIChkZHNfdmFsIDwgdGhyZXNob2xkKQotCQlpbnZfdGVzdDEgPSAwOwotCWVsc2UgaWYgKGRkc192YWwgPT0gdGhyZXNob2xkKQotCQlpbnZfdGVzdDEgPSAxOwotCWVsc2UKLQkJaW52X3Rlc3QxID0gMjsKKwlmZXAtPnUub2ZkbS5iYW5kd2lkdGggPSBzdGF0ZS0+Y3VycmVudF9iYW5kd2lkdGg7CiAKLQlkZHNfdmFsID0gKHJkKERJQjMwMDBNQ19SRUdfU0VUX0REU19GUkVRX01TQikgPDwgMTYpICsgcmQoRElCMzAwME1DX1JFR19TRVRfRERTX0ZSRVFfTFNCKTsKLQlkZWJfZ2V0ZigiRERTX1NFVF9GUkVROiAlNnhcbiIsZGRzX3ZhbCk7Ci0JaWYgKGRkc192YWwgPCB0aHJlc2hvbGQpCi0JCWludl90ZXN0MiA9IDA7Ci0JZWxzZSBpZiAoZGRzX3ZhbCA9PSB0aHJlc2hvbGQpCi0JCWludl90ZXN0MiA9IDE7Ci0JZWxzZQotCQlpbnZfdGVzdDIgPSAyOwotCi0JZmVwLT5pbnZlcnNpb24gPQotCQkoKGludl90ZXN0MiA9PSAyKSAmJiAoaW52X3Rlc3QxPT0xIHx8IGludl90ZXN0MT09MCkpIHx8Ci0JCSgoaW52X3Rlc3QyID09IDApICYmIChpbnZfdGVzdDE9PTEgfHwgaW52X3Rlc3QxPT0yKSkgPwotCQlJTlZFUlNJT05fT04gOiBJTlZFUlNJT05fT0ZGOwotCi0JZGViX2dldGYoImludmVyc2lvbiAlZCAlZCwgJWRcbiIsIGludl90ZXN0MiwgaW52X3Rlc3QxLCBmZXAtPmludmVyc2lvbik7Ci0KLQlmZXAtPmZyZXF1ZW5jeSA9IHN0YXRlLT5sYXN0X3R1bmVkX2ZyZXE7Ci0JZmVwLT51Lm9mZG0uYmFuZHdpZHRoPSBzdGF0ZS0+bGFzdF90dW5lZF9idzsKLQotCXRwc192YWwgPSByZChESUIzMDAwTUNfUkVHX1RVTklOR19QQVJNKTsKLQotCXN3aXRjaCAoRElCMzAwME1DX1RQX1FBTSh0cHNfdmFsKSkgewotCQljYXNlIERJQjMwMDBfQ09OU1RFTExBVElPTl9RUFNLOgotCQkJZGViX2dldGYoIlFQU0sgIik7Ci0JCQlvZmRtLT5jb25zdGVsbGF0aW9uID0gUVBTSzsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfQ09OU1RFTExBVElPTl8xNlFBTToKLQkJCWRlYl9nZXRmKCJRQU0xNiAiKTsKLQkJCW9mZG0tPmNvbnN0ZWxsYXRpb24gPSBRQU1fMTY7Ci0JCQlicmVhazsKLQkJY2FzZSBESUIzMDAwX0NPTlNURUxMQVRJT05fNjRRQU06Ci0JCQlkZWJfZ2V0ZigiUUFNNjQgIik7Ci0JCQlvZmRtLT5jb25zdGVsbGF0aW9uID0gUUFNXzY0OwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQllcnIoIlVuZXhwZWN0ZWQgY29uc3RlbGxhdGlvbiByZXR1cm5lZCBieSBUUFMgKCVkKSIsIHRwc192YWwpOwotCQkJYnJlYWs7CisJc3dpdGNoICgodHBzID4+IDgpICYgMHgxKSB7CisJCWNhc2UgMDogZmVwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV8ySzsgYnJlYWs7CisJCWNhc2UgMTogZmVwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPSBUUkFOU01JU1NJT05fTU9ERV84SzsgYnJlYWs7CiAJfQogCi0JaWYgKERJQjMwMDBNQ19UUF9IUkNIKHRwc192YWwpKSB7Ci0JCWRlYl9nZXRmKCJIUkNIIE9OICIpOwotCQljciA9ICZvZmRtLT5jb2RlX3JhdGVfTFA7Ci0JCW9mZG0tPmNvZGVfcmF0ZV9IUCA9IEZFQ19OT05FOwotCQlzd2l0Y2ggKERJQjMwMDBNQ19UUF9BTFBIQSh0cHNfdmFsKSkgewotCQkJY2FzZSBESUIzMDAwX0FMUEhBXzA6Ci0JCQkJZGViX2dldGYoIkhJRVJBUkNIWV9OT05FICIpOwotCQkJCW9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV9OT05FOwotCQkJCWJyZWFrOwotCQkJY2FzZSBESUIzMDAwX0FMUEhBXzE6Ci0JCQkJZGViX2dldGYoIkhJRVJBUkNIWV8xICIpOwotCQkJCW9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8xOwotCQkJCWJyZWFrOwotCQkJY2FzZSBESUIzMDAwX0FMUEhBXzI6Ci0JCQkJZGViX2dldGYoIkhJRVJBUkNIWV8yICIpOwotCQkJCW9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV8yOwotCQkJCWJyZWFrOwotCQkJY2FzZSBESUIzMDAwX0FMUEhBXzQ6Ci0JCQkJZGViX2dldGYoIkhJRVJBUkNIWV80ICIpOwotCQkJCW9mZG0tPmhpZXJhcmNoeV9pbmZvcm1hdGlvbiA9IEhJRVJBUkNIWV80OwotCQkJCWJyZWFrOwotCQkJZGVmYXVsdDoKLQkJCQllcnIoIlVuZXhwZWN0ZWQgQUxQSEEgdmFsdWUgcmV0dXJuZWQgYnkgVFBTICglZCkiLCB0cHNfdmFsKTsKLQkJCQlicmVhazsKLQkJfQotCQljcl92YWwgPSBESUIzMDAwTUNfVFBfRkVDX0NSX0xQKHRwc192YWwpOwotCX0gZWxzZSB7Ci0JCWRlYl9nZXRmKCJIUkNIIE9GRiAiKTsKLQkJY3IgPSAmb2ZkbS0+Y29kZV9yYXRlX0hQOwotCQlvZmRtLT5jb2RlX3JhdGVfTFAgPSBGRUNfTk9ORTsKLQkJb2ZkbS0+aGllcmFyY2h5X2luZm9ybWF0aW9uID0gSElFUkFSQ0hZX05PTkU7Ci0JCWNyX3ZhbCA9IERJQjMwMDBNQ19UUF9GRUNfQ1JfSFAodHBzX3ZhbCk7CisJc3dpdGNoICh0cHMgJiAweDMpIHsKKwkJY2FzZSAwOiBmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7IGJyZWFrOworCQljYXNlIDE6IGZlcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV8xNjsgYnJlYWs7CisJCWNhc2UgMjogZmVwLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzg7IGJyZWFrOworCQljYXNlIDM6IGZlcC0+dS5vZmRtLmd1YXJkX2ludGVydmFsID0gR1VBUkRfSU5URVJWQUxfMV80OyBicmVhazsKIAl9CiAKLQlzd2l0Y2ggKGNyX3ZhbCkgewotCQljYXNlIERJQjMwMDBfRkVDXzFfMjoKLQkJCWRlYl9nZXRmKCJGRUNfMV8yICIpOwotCQkJKmNyID0gRkVDXzFfMjsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfRkVDXzJfMzoKLQkJCWRlYl9nZXRmKCJGRUNfMl8zICIpOwotCQkJKmNyID0gRkVDXzJfMzsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfRkVDXzNfNDoKLQkJCWRlYl9nZXRmKCJGRUNfM180ICIpOwotCQkJKmNyID0gRkVDXzNfNDsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfRkVDXzVfNjoKLQkJCWRlYl9nZXRmKCJGRUNfNV82ICIpOwotCQkJKmNyID0gRkVDXzRfNTsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfRkVDXzdfODoKLQkJCWRlYl9nZXRmKCJGRUNfN184ICIpOwotCQkJKmNyID0gRkVDXzdfODsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyKCJVbmV4cGVjdGVkIEZFQyByZXR1cm5lZCBieSBUUFMgKCVkKSIsIHRwc192YWwpOwotCQkJYnJlYWs7CisJc3dpdGNoICgodHBzID4+IDEzKSAmIDB4MykgeworCQljYXNlIDA6IGZlcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPSBRUFNLOyBicmVhazsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUUFNXzE2OyBicmVhazsKKwkJY2FzZSAyOgorCQlkZWZhdWx0OiBmZXAtPnUub2ZkbS5jb25zdGVsbGF0aW9uID0gUUFNXzY0OyBicmVhazsKIAl9CiAKLQlzd2l0Y2ggKERJQjMwMDBNQ19UUF9HVUFSRCh0cHNfdmFsKSkgewotCQljYXNlIERJQjMwMDBfR1VBUkRfVElNRV8xXzMyOgotCQkJZGViX2dldGYoIkdVQVJEX0lOVEVSVkFMXzFfMzIgIik7Ci0JCQlvZmRtLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfMzI7Ci0JCQlicmVhazsKLQkJY2FzZSBESUIzMDAwX0dVQVJEX1RJTUVfMV8xNjoKLQkJCWRlYl9nZXRmKCJHVUFSRF9JTlRFUlZBTF8xXzE2ICIpOwotCQkJb2ZkbS0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzE2OwotCQkJYnJlYWs7Ci0JCWNhc2UgRElCMzAwMF9HVUFSRF9USU1FXzFfODoKLQkJCWRlYl9nZXRmKCJHVUFSRF9JTlRFUlZBTF8xXzggIik7Ci0JCQlvZmRtLT5ndWFyZF9pbnRlcnZhbCA9IEdVQVJEX0lOVEVSVkFMXzFfODsKLQkJCWJyZWFrOwotCQljYXNlIERJQjMwMDBfR1VBUkRfVElNRV8xXzQ6Ci0JCQlkZWJfZ2V0ZigiR1VBUkRfSU5URVJWQUxfMV80ICIpOwotCQkJb2ZkbS0+Z3VhcmRfaW50ZXJ2YWwgPSBHVUFSRF9JTlRFUlZBTF8xXzQ7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycigiVW5leHBlY3RlZCBHdWFyZCBUaW1lIHJldHVybmVkIGJ5IFRQUyAoJWQpIiwgdHBzX3ZhbCk7Ci0JCQlicmVhazsKKwkvKiBhcyBsb25nIGFzIHRoZSBmcm9udGVuZF9wYXJhbSBzdHJ1Y3R1cmUgaXMgZml4ZWQgZm9yIGhpZXJhcmNoaWNhbCB0cmFuc21pc3Npb24gSSByZWZ1c2UgdG8gdXNlIGl0ICovCisJLyogKHRwcyA+PiAxMikgJiAweDEgPT0gaHJjaCBpcyB1c2VkLCAodHBzID4+IDkpICYgMHg3ID09IGFscGhhICovCisKKwlmZXAtPnUub2ZkbS5oaWVyYXJjaHlfaW5mb3JtYXRpb24gPSBISUVSQVJDSFlfTk9ORTsKKwlzd2l0Y2ggKCh0cHMgPj4gNSkgJiAweDcpIHsKKwkJY2FzZSAxOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfMV8yOyBicmVhazsKKwkJY2FzZSAyOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfMl8zOyBicmVhazsKKwkJY2FzZSAzOiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfM180OyBicmVhazsKKwkJY2FzZSA1OiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfNV82OyBicmVhazsKKwkJY2FzZSA3OgorCQlkZWZhdWx0OiBmZXAtPnUub2ZkbS5jb2RlX3JhdGVfSFAgPSBGRUNfN184OyBicmVhazsKKwogCX0KIAotCXN3aXRjaCAoRElCMzAwME1DX1RQX0ZGVCh0cHNfdmFsKSkgewotCQljYXNlIERJQjMwMDBfVFJBTlNNSVNTSU9OX01PREVfMks6Ci0JCQlkZWJfZ2V0ZigiVFJBTlNNSVNTSU9OX01PREVfMksgIik7Ci0JCQlvZmRtLT50cmFuc21pc3Npb25fbW9kZSA9IFRSQU5TTUlTU0lPTl9NT0RFXzJLOwotCQkJYnJlYWs7Ci0JCWNhc2UgRElCMzAwMF9UUkFOU01JU1NJT05fTU9ERV84SzoKLQkJCWRlYl9nZXRmKCJUUkFOU01JU1NJT05fTU9ERV84SyAiKTsKLQkJCW9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlID0gVFJBTlNNSVNTSU9OX01PREVfOEs7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWVycigidW5leHBlY3RlZCB0cmFuc21pc3Npb24gbW9kZSByZXR1cm4gYnkgVFBTICglZCkiLCB0cHNfdmFsKTsKLQkJCWJyZWFrOworCXN3aXRjaCAoKHRwcyA+PiAyKSAmIDB4NykgeworCQljYXNlIDE6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ18xXzI7IGJyZWFrOworCQljYXNlIDI6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ18yXzM7IGJyZWFrOworCQljYXNlIDM6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ18zXzQ7IGJyZWFrOworCQljYXNlIDU6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ181XzY7IGJyZWFrOworCQljYXNlIDc6CisJCWRlZmF1bHQ6IGZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9IEZFQ183Xzg7IGJyZWFrOwogCX0KLQlkZWJfZ2V0ZigiXG4iKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGRpYjMwMDBtY19zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCi0JCQkJICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlcCwgaW50IHR1bmVyKQorCQkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQogewotCXN0cnVjdCBkaWIzMDAwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXN0cnVjdCBkdmJfb2ZkbV9wYXJhbWV0ZXJzICpvZmRtID0gJmZlcC0+dS5vZmRtOwotCWludCBzZWFyY2hfc3RhdGUsYXV0b192YWw7Ci0JdTE2IHZhbDsKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBkaWJ4MDAwX29mZG1fY2hhbm5lbCBjaDsKIAotCWlmICh0dW5lciAmJiBmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7IC8qIGluaXRpYWwgY2FsbCBmcm9tIGR2YiAqLworCUlOSVRfT0ZETV9DSEFOTkVMKCZjaCk7CisJRkVQMkRJQihmZXAsJmNoKTsKKworCXN0YXRlLT5jdXJyZW50X2JhbmR3aWR0aCA9IGZlcC0+dS5vZmRtLmJhbmR3aWR0aDsKKwlkaWIzMDAwbWNfc2V0X2JhbmR3aWR0aChmZSwgZmVwLT51Lm9mZG0uYmFuZHdpZHRoKTsKKworCWlmIChmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKSB7CiAJCWZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMoZmUsIGZlcCk7Ci0JCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7Ci0KLQkJc3RhdGUtPmxhc3RfdHVuZWRfZnJlcSA9IGZlcC0+ZnJlcXVlbmN5OwotCS8vCWlmICghc2NhbmJvb3N0KSB7Ci0JCQlkaWIzMDAwbWNfc2V0X3RpbWluZyhzdGF0ZSwwLG9mZG0tPnRyYW5zbWlzc2lvbl9tb2RlLG9mZG0tPmJhbmR3aWR0aCk7Ci0JCQlkaWIzMDAwbWNfaW5pdF9hdXRvX3NjYW4oc3RhdGUsIG9mZG0tPmJhbmR3aWR0aCwgMCk7Ci0JCQlzdGF0ZS0+bGFzdF90dW5lZF9idyA9IG9mZG0tPmJhbmR3aWR0aDsKLQotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2FnY19iYW5kd2lkdGgsZGliMzAwMG1jX2FnY19iYW5kd2lkdGgpOwotCQkJd3IoRElCMzAwME1DX1JFR19SRVNUQVJULERJQjMwMDBNQ19SRVNUQVJUX0FHQyk7Ci0JCQl3cihESUIzMDAwTUNfUkVHX1JFU1RBUlQsRElCMzAwME1DX1JFU1RBUlRfT0ZGKTsKLQotCQkJLyogRGVmYXVsdCBjZmcgaXNpIG9mZnNldCBhZHAgKi8KLQkJCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19vZmZzZXQsZGliMzAwMG1jX29mZnNldFswXSk7Ci0KLQkJCXdyKERJQjMwMDBNQ19SRUdfSVNJLERJQjMwMDBNQ19JU0lfREVGQVVMVCB8IERJQjMwMDBNQ19JU0lfSU5ISUJJVCk7Ci0JCQlkaWIzMDAwbWNfc2V0X2FkcF9jZmcoc3RhdGUsb2ZkbS0+Y29uc3RlbGxhdGlvbik7Ci0JCQl3cihESUIzMDAwTUNfUkVHX1VOS18xMzMsRElCMzAwME1DX1VOS18xMzMpOwotCi0JCQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYmFuZHdpZHRoX2dlbmVyYWwsZGliMzAwMG1jX2JhbmR3aWR0aF9nZW5lcmFsKTsKLQkJCS8qIHBvd2VyIHNtb290aGluZyAqLwotCQkJaWYgKG9mZG0tPmJhbmR3aWR0aCAhPSBCQU5EV0lEVEhfOF9NSFopIHsKLQkJCQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYncsZGliMzAwMG1jX2J3WzBdKTsKLQkJCX0gZWxzZSB7Ci0JCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2J3LGRpYjMwMDBtY19id1szXSk7Ci0JCQl9Ci0JCQlhdXRvX3ZhbCA9IDA7Ci0JCQlkaWIzMDAwbWNfc2V0X2dlbmVyYWxfY2ZnKHN0YXRlLGZlcCwmYXV0b192YWwpOwotCQkJZGliMzAwMG1jX3NldF9pbXB1bHNlX25vaXNlKHN0YXRlLDAsb2ZkbS0+Y29uc3RlbGxhdGlvbixvZmRtLT5iYW5kd2lkdGgpOwotCi0JCQl2YWwgPSByZChESUIzMDAwTUNfUkVHX0RFTU9EX1BBUk0pOwotCQkJd3IoRElCMzAwME1DX1JFR19ERU1PRF9QQVJNLHZhbHxESUIzMDAwTUNfREVNT0RfUlNUX0RFTU9EX09OKTsKLQkJCXdyKERJQjMwMDBNQ19SRUdfREVNT0RfUEFSTSx2YWwpOwotCS8vCX0KLQkJbXNsZWVwKDcwKTsKLQotCQkvKiBzb21ldGhpbmcgaGFzIHRvIGJlIGF1dG8gc2VhcmNoZWQgKi8KLQkJaWYgKGF1dG9fdmFsKSB7Ci0JCQlpbnQgYXNfY291bnQ9MDsKLQotCQkJZGViX3NldGYoImF1dG9zZWFyY2ggZW5hYmxlZC5cbiIpOwotCi0JCQl2YWwgPSByZChESUIzMDAwTUNfUkVHX0RFTU9EX1BBUk0pOwotCQkJd3IoRElCMzAwME1DX1JFR19ERU1PRF9QQVJNLHZhbCB8IERJQjMwMDBNQ19ERU1PRF9SU1RfQVVUT19TUkNIX09OKTsKLQkJCXdyKERJQjMwMDBNQ19SRUdfREVNT0RfUEFSTSx2YWwpOwotCi0JCQl3aGlsZSAoKHNlYXJjaF9zdGF0ZSA9IGRpYjMwMDBfc2VhcmNoX3N0YXR1cygKLQkJCQkJCXJkKERJQjMwMDBNQ19SRUdfQVNfSVJRKSwxKSkgPCAwICYmIGFzX2NvdW50KysgPCAxMDApCi0JCQkJbXNsZWVwKDEwKTsKLQotCQkJZGViX2luZm8oInNlYXJjaF9zdGF0ZSBhZnRlciBhdXRvc2VhcmNoICVkIGFmdGVyICVkIGNoZWNrc1xuIixzZWFyY2hfc3RhdGUsYXNfY291bnQpOwotCi0JCQlpZiAoc2VhcmNoX3N0YXRlID09IDEpIHsKLQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgZmVwczsKLQkJCQlpZiAoZGliMzAwMG1jX2dldF9mcm9udGVuZChmZSwgJmZlcHMpID09IDApIHsKLQkJCQkJZGViX3NldGYoInJlYWRpbmcgdHVuaW5nIGRhdGEgZnJvbSBmcm9udGVuZCBzdWNjZWVkZWQuXG4iKTsKLQkJCQkJcmV0dXJuIGRpYjMwMDBtY19zZXRfZnJvbnRlbmQoZmUsICZmZXBzLCAwKTsKLQkJCQl9Ci0JCQl9Ci0JCX0gZWxzZSB7Ci0JCQlkaWIzMDAwbWNfc2V0X2ltcHVsc2Vfbm9pc2Uoc3RhdGUsMCxvZmRtLT50cmFuc21pc3Npb25fbW9kZSxvZmRtLT5iYW5kd2lkdGgpOwotCQkJd3IoRElCMzAwME1DX1JFR19JU0ksRElCMzAwME1DX0lTSV9ERUZBVUxUfERJQjMwMDBNQ19JU0lfQUNUSVZBVEUpOwotCQkJZGliMzAwMG1jX3NldF9hZHBfY2ZnKHN0YXRlLG9mZG0tPmNvbnN0ZWxsYXRpb24pOwotCi0JCQkvKiBzZXRfb2Zmc2V0X2NmZyAqLwotCQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX29mZnNldCwKLQkJCQkJZGliMzAwMG1jX29mZnNldFsob2ZkbS0+dHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfOEspKzFdKTsKLQkJfQotCX0gZWxzZSB7IC8qIHNlY29uZCBjYWxsLCBhZnRlciBhdXRvc2VhcmNoIChma2E6IHNldF9XaXRoS25vd25QYXJhbXMpICovCi0vLwkJZGliMzAwMG1jX3NldF90aW1pbmcoc3RhdGUsMSxvZmRtLT50cmFuc21pc3Npb25fbW9kZSxvZmRtLT5iYW5kd2lkdGgpOwotCi0JCWF1dG9fdmFsID0gMDsKLQkJZGliMzAwMG1jX3NldF9nZW5lcmFsX2NmZyhzdGF0ZSxmZXAsJmF1dG9fdmFsKTsKLQkJaWYgKGF1dG9fdmFsKQotCQkJZGViX2luZm8oImF1dG9fdmFsIGlzIHRydWUsIGV2ZW4gdGhvdWdoIGFuIGF1dG8gc2VhcmNoIHdhcyBhbHJlYWR5IHBlcmZvcm1lZC5cbiIpOwotCi0JCWRpYjMwMDBtY19zZXRfaW1wdWxzZV9ub2lzZShzdGF0ZSwwLG9mZG0tPmNvbnN0ZWxsYXRpb24sb2ZkbS0+YmFuZHdpZHRoKTsKLQotCQl2YWwgPSByZChESUIzMDAwTUNfUkVHX0RFTU9EX1BBUk0pOwotCQl3cihESUIzMDAwTUNfUkVHX0RFTU9EX1BBUk0sdmFsIHwgRElCMzAwME1DX0RFTU9EX1JTVF9BVVRPX1NSQ0hfT04pOwotCQl3cihESUIzMDAwTUNfUkVHX0RFTU9EX1BBUk0sdmFsKTsKLQotCQltc2xlZXAoMzApOwotCi0JCXdyKERJQjMwMDBNQ19SRUdfSVNJLERJQjMwMDBNQ19JU0lfREVGQVVMVHxESUIzMDAwTUNfSVNJX0FDVElWQVRFKTsKLQkJCWRpYjMwMDBtY19zZXRfYWRwX2NmZyhzdGF0ZSxvZmRtLT5jb25zdGVsbGF0aW9uKTsKLQkJd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX29mZnNldCwKLQkJCQlkaWIzMDAwbWNfb2Zmc2V0WyhvZmRtLT50cmFuc21pc3Npb25fbW9kZSA9PSBUUkFOU01JU1NJT05fTU9ERV84SykrMV0pOworCQltc2xlZXAoMTAwKTsKIAl9Ci0JcmV0dXJuIDA7CisKKwlpZiAoZmVwLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8fAorCQlmZXAtPnUub2ZkbS5ndWFyZF9pbnRlcnZhbCAgICA9PSBHVUFSRF9JTlRFUlZBTF9BVVRPIHx8CisJCWZlcC0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gICAgID09IFFBTV9BVVRPIHx8CisJCWZlcC0+dS5vZmRtLmNvZGVfcmF0ZV9IUCAgICAgID09IEZFQ19BVVRPKSB7CisJCWludCBpID0gMTAwLCBmb3VuZDsKKworCQlkaWIzMDAwbWNfYXV0b3NlYXJjaF9zdGFydChmZSwgJmNoKTsKKwkJZG8geworCQkJbXNsZWVwKDEpOworCQkJZm91bmQgPSBkaWIzMDAwbWNfYXV0b3NlYXJjaF9pc19pcnEoZmUpOworCQl9IHdoaWxlIChmb3VuZCA9PSAwICYmIGktLSk7CisKKwkJZHByaW50aygiYXV0b3NlYXJjaCByZXR1cm5zOiAlZFxuIixmb3VuZCk7CisJCWlmIChmb3VuZCA9PSAwIHx8IGZvdW5kID09IDEpCisJCQlyZXR1cm4gMDsgLy8gbm8gY2hhbm5lbCBmb3VuZAorCisJCWRpYjMwMDBtY19nZXRfZnJvbnRlbmQoZmUsIGZlcCk7CisJCUZFUDJESUIoZmVwLCZjaCk7CisJfQorCisJLyogbWFrZSB0aGlzIGEgY29uZmlnIHBhcmFtZXRlciAqLworCWRpYjMwMDBtY19zZXRfb3V0cHV0X21vZGUoc3RhdGUsIE9VVE1PREVfTVBFRzJfRklGTyk7CisKKwlyZXR1cm4gZGliMzAwMG1jX3R1bmUoZmUsICZjaCk7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX2ZlX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBtb2JpbGVfbW9kZSkKK3N0YXRpYyBpbnQgZGliMzAwMG1jX3JlYWRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zdGF0dXNfdCAqc3RhdCkKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlkZWJfaW5mbygiaW5pdCBzdGFydFxuIik7Ci0KLQlzdGF0ZS0+dGltaW5nX29mZnNldCA9IDA7Ci0Jc3RhdGUtPnRpbWluZ19vZmZzZXRfY29tcF9kb25lID0gMDsKLQotCXdyKERJQjMwMDBNQ19SRUdfUkVTVEFSVCxESUIzMDAwTUNfUkVTVEFSVF9DT05GSUcpOwotCXdyKERJQjMwMDBNQ19SRUdfUkVTVEFSVCxESUIzMDAwTUNfUkVTVEFSVF9PRkYpOwotCXdyKERJQjMwMDBNQ19SRUdfQ0xLX0NGR18xLERJQjMwMDBNQ19DTEtfQ0ZHXzFfUE9XRVJfVVApOwotCXdyKERJQjMwMDBNQ19SRUdfQ0xLX0NGR18yLERJQjMwMDBNQ19DTEtfQ0ZHXzJfUFVQX01PQklMRSk7Ci0Jd3IoRElCMzAwME1DX1JFR19DTEtfQ0ZHXzMsRElCMzAwME1DX0NMS19DRkdfM19QT1dFUl9VUCk7Ci0Jd3IoRElCMzAwME1DX1JFR19DTEtfQ0ZHXzcsRElCMzAwME1DX0NMS19DRkdfN19JTklUKTsKLQotCXdyKERJQjMwMDBNQ19SRUdfUlNUX1VOQyxESUIzMDAwTUNfUlNUX1VOQ19PRkYpOwotCXdyKERJQjMwMDBNQ19SRUdfVU5LXzE5LERJQjMwMDBNQ19VTktfMTkpOwotCi0Jd3IoMzMsNSk7Ci0Jd3IoMzYsODEpOwotCXdyKERJQjMwMDBNQ19SRUdfVU5LXzg4LERJQjMwMDBNQ19VTktfODgpOwotCi0Jd3IoRElCMzAwME1DX1JFR19VTktfOTksRElCMzAwME1DX1VOS185OSk7Ci0Jd3IoRElCMzAwME1DX1JFR19VTktfMTExLERJQjMwMDBNQ19VTktfMTExX1BIX05fTU9ERV8wKTsgLyogcGhhc2Ugbm9pc2UgYWxnbyBvZmYgKi8KLQotCS8qIG1vYmlsZSBtb2RlIC0gcG9ydGFibGUgcmVjZXB0aW9uICovCi0Jd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX21vYmlsZV9tb2RlLGRpYjMwMDBtY19tb2JpbGVfbW9kZVsxXSk7Ci0KLS8qIFRVTkVSX1BBTkFTT05JQ19FTlY1N0gxMkQ1OiAqLwotCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19hZ2NfYmFuZHdpZHRoLGRpYjMwMDBtY19hZ2NfYmFuZHdpZHRoKTsKLQl3cl9mb3JlYWNoKGRpYjMwMDBtY19yZWdfYWdjX2JhbmR3aWR0aF9nZW5lcmFsLGRpYjMwMDBtY19hZ2NfYmFuZHdpZHRoX2dlbmVyYWwpOwotCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19hZ2MsZGliMzAwMG1jX2FnY190dW5lclsxXSk7Ci0KLQl3cihESUIzMDAwTUNfUkVHX1VOS18xMTAsRElCMzAwME1DX1VOS18xMTApOwotCXdyKDI2LDB4NjY4MCk7Ci0Jd3IoRElCMzAwME1DX1JFR19VTktfMSxESUIzMDAwTUNfVU5LXzEpOwotCXdyKERJQjMwMDBNQ19SRUdfVU5LXzIsRElCMzAwME1DX1VOS18yKTsKLQl3cihESUIzMDAwTUNfUkVHX1VOS18zLERJQjMwMDBNQ19VTktfMyk7Ci0Jd3IoRElCMzAwME1DX1JFR19TRVFfVFBTLERJQjMwMDBNQ19TRVFfVFBTX0RFRkFVTFQpOwotCi0Jd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX2JhbmR3aWR0aCxkaWIzMDAwbWNfYmFuZHdpZHRoXzhtaHopOwotCXdyX2ZvcmVhY2goZGliMzAwMG1jX3JlZ19iYW5kd2lkdGhfZ2VuZXJhbCxkaWIzMDAwbWNfYmFuZHdpZHRoX2dlbmVyYWwpOwotCi0Jd3IoRElCMzAwME1DX1JFR19VTktfNCxESUIzMDAwTUNfVU5LXzQpOwotCi0Jd3IoRElCMzAwME1DX1JFR19TRVRfRERTX0ZSRVFfTVNCLERJQjMwMDBNQ19ERFNfRlJFUV9NU0JfSU5WX09GRik7Ci0Jd3IoRElCMzAwME1DX1JFR19TRVRfRERTX0ZSRVFfTFNCLERJQjMwMDBNQ19ERFNfRlJFUV9MU0IpOwotCi0JZGliMzAwMG1jX3NldF90aW1pbmcoc3RhdGUsMCxUUkFOU01JU1NJT05fTU9ERV84SyxCQU5EV0lEVEhfOF9NSFopOwotLy8Jd3JfZm9yZWFjaChkaWIzMDAwbWNfcmVnX3RpbWluZ19mcmVxLGRpYjMwMDBtY190aW1pbmdfZnJlcVszXSk7Ci0KLQl3cihESUIzMDAwTUNfUkVHX1VOS18xMjAsRElCMzAwME1DX1VOS18xMjApOwotCXdyKERJQjMwMDBNQ19SRUdfVU5LXzEzNCxESUIzMDAwTUNfVU5LXzEzNCk7Ci0Jd3IoRElCMzAwME1DX1JFR19GRUNfQ0ZHLERJQjMwMDBNQ19GRUNfQ0ZHKTsKLQotCXdyKERJQjMwMDBNQ19SRUdfRElWRVJTSVRZMyxESUIzMDAwTUNfRElWRVJTSVRZM19JTl9PRkYpOwotCi0JZGliMzAwMG1jX3NldF9pbXB1bHNlX25vaXNlKHN0YXRlLDAsVFJBTlNNSVNTSU9OX01PREVfOEssQkFORFdJRFRIXzhfTUhaKTsKLQotLyogb3V0cHV0IG1vZGUgY29udHJvbCwganVzdCB0aGUgTVBFRzJfU0xBVkUgKi8KLS8vCXNldF9vcihESUIzMDAwTUNfUkVHX09VVE1PREUsRElCMzAwME1DX09NX1NMQVZFKTsKLQl3cihESUIzMDAwTUNfUkVHX09VVE1PREUsRElCMzAwME1DX09NX1NMQVZFKTsKLQl3cihESUIzMDAwTUNfUkVHX1NNT19NT0RFLERJQjMwMDBNQ19TTU9fTU9ERV9TTEFWRSk7Ci0Jd3IoRElCMzAwME1DX1JFR19GSUZPX1RIUkVTSE9MRCxESUIzMDAwTUNfRklGT19USFJFU0hPTERfU0xBVkUpOwotCXdyKERJQjMwMDBNQ19SRUdfRUxFQ19PVVQsRElCMzAwME1DX0VMRUNfT1VUX1NMQVZFKTsKLQotLyogTVBFRzJfUEFSQUxMRUxfQ09OVElOVU9VU19DTE9DSwotCXdyKERJQjMwMDBNQ19SRUdfT1VUTU9ERSwKLQkJRElCMzAwME1DX1NFVF9PVVRNT0RFKERJQjMwMDBNQ19PTV9QQVJfQ09OVF9DTEssCi0JCQlyZChESUIzMDAwTUNfUkVHX09VVE1PREUpKSk7Ci0KLQl3cihESUIzMDAwTUNfUkVHX1NNT19NT0RFLAotCQkJRElCMzAwME1DX1NNT19NT0RFX0RFRkFVTFQgfAotCQkJRElCMzAwME1DX1NNT19NT0RFXzE4OCk7Ci0KLQl3cihESUIzMDAwTUNfUkVHX0ZJRk9fVEhSRVNIT0xELERJQjMwMDBNQ19GSUZPX1RIUkVTSE9MRF9ERUZBVUxUKTsKLQl3cihESUIzMDAwTUNfUkVHX0VMRUNfT1VULERJQjMwMDBNQ19FTEVDX09VVF9ESVZfT1VUX09OKTsKLSovCi0KLS8qIGRpdmVyc2l0eSAqLwotCXdyKERJQjMwMDBNQ19SRUdfRElWRVJTSVRZMSxESUIzMDAwTUNfRElWRVJTSVRZMV9ERUZBVUxUKTsKLQl3cihESUIzMDAwTUNfUkVHX0RJVkVSU0lUWTIsRElCMzAwME1DX0RJVkVSU0lUWTJfREVGQVVMVCk7Ci0KLQlzZXRfYW5kKERJQjMwMDBNQ19SRUdfRElWRVJTSVRZMyxESUIzMDAwTUNfRElWRVJTSVRZM19JTl9PRkYpOwotCi0Jc2V0X29yKERJQjMwMDBNQ19SRUdfQ0xLX0NGR183LERJQjMwMDBNQ19DTEtfQ0ZHXzdfRElWX0lOX09GRik7Ci0KLQlkZWJfaW5mbygiaW5pdCBlbmRcbiIpOwotCXJldHVybiAwOwotfQotc3RhdGljIGludCBkaWIzMDAwbWNfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190ICpzdGF0KQotewotCXN0cnVjdCBkaWIzMDAwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCXUxNiBsb2NrID0gcmQoRElCMzAwME1DX1JFR19MT0NLSU5HKTsKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXUxNiBsb2NrID0gZGliMzAwMG1jX3JlYWRfd29yZChzdGF0ZSwgNTA5KTsKIAogCSpzdGF0ID0gMDsKLQlpZiAoRElCMzAwME1DX0FHQ19MT0NLKGxvY2spKQorCisJaWYgKGxvY2sgJiAweDgwMDApCiAJCSpzdGF0IHw9IEZFX0hBU19TSUdOQUw7Ci0JaWYgKERJQjMwMDBNQ19DQVJSSUVSX0xPQ0sobG9jaykpCisJaWYgKGxvY2sgJiAweDMwMDApCiAJCSpzdGF0IHw9IEZFX0hBU19DQVJSSUVSOwotCWlmIChESUIzMDAwTUNfVFBTX0xPQ0sobG9jaykpCisJaWYgKGxvY2sgJiAweDAxMDApCiAJCSpzdGF0IHw9IEZFX0hBU19WSVRFUkJJOwotCWlmIChESUIzMDAwTUNfTVBFR19TWU5DX0xPQ0sobG9jaykpCi0JCSpzdGF0IHw9IChGRV9IQVNfU1lOQyB8IEZFX0hBU19MT0NLKTsKLQotCWRlYl9zdGF0KCJhY3R1YWwgc3RhdHVzIGlzICUyeCBmaWZvX2xldmVsOiAleCwyNDQ6ICV4LCAyMDY6ICV4LCAyMDc6ICV4LCAxMDQwOiAleFxuIiwqc3RhdCxyZCg1MTApLHJkKDI0NCkscmQoMjA2KSxyZCgyMDcpLHJkKDEwNDApKTsKKwlpZiAobG9jayAmIDB4MDAxMCkKKwkJKnN0YXQgfD0gRkVfSEFTX1NZTkM7CisJaWYgKGxvY2sgJiAweDAwMDgpCisJCSpzdGF0IHw9IEZFX0hBU19MT0NLOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgKmJlcikKK3N0YXRpYyBpbnQgZGliMzAwMG1jX3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJlcikKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQkqYmVyID0gKChyZChESUIzMDAwTUNfUkVHX0JFUl9NU0IpIDw8IDE2KSB8IHJkKERJQjMwMDBNQ19SRUdfQkVSX0xTQikpOworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJKmJlciA9IChkaWIzMDAwbWNfcmVhZF93b3JkKHN0YXRlLCA1MDApIDw8IDE2KSB8IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDUwMSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3JlYWRfdW5jX2Jsb2NrcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTMyICp1bmMpCitzdGF0aWMgaW50IGRpYjMwMDBtY19yZWFkX3VuY19ibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdW5jKQogewotCXN0cnVjdCBkaWIzMDAwX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCi0JKnVuYyA9IHJkKERJQjMwMDBNQ19SRUdfUEFDS0VUX0VSUk9SUyk7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwkqdW5jID0gZGliMzAwMG1jX3JlYWRfd29yZChzdGF0ZSwgNTA4KTsKIAlyZXR1cm4gMDsKIH0KIAotLyogc2VlIGRpYjMwMDBtYi5jIGZvciBjYWxjdWxhdGlvbiBjb21tZW50cyAqLwotc3RhdGljIGludCBkaWIzMDAwbWNfcmVhZF9zaWduYWxfc3RyZW5ndGgoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiAqc3RyZW5ndGgpCitzdGF0aWMgaW50IGRpYjMwMDBtY19yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzdHJlbmd0aCkKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1MTYgdmFsID0gcmQoRElCMzAwME1DX1JFR19TSUdOQUxfTk9JU0VfTFNCKTsKLQkqc3RyZW5ndGggPSAoKCh2YWwgPj4gNikgJiAweGZmKSA8PCA4KSArICh2YWwgJiAweDNmKTsKLQotCWRlYl9zdGF0KCJzaWduYWw6IG1hbnRpc3NlID0gJWQsIGV4cG9uZW50ID0gJWRcbiIsKCpzdHJlbmd0aCA+PiA4KSAmIDB4ZmYsICpzdHJlbmd0aCAmIDB4ZmYpOworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHZhbCA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDM5Mik7CisJKnN0cmVuZ3RoID0gNjU1MzUgLSB2YWw7CiAJcmV0dXJuIDA7CiB9CiAKLS8qIHNlZSBkaWIzMDAwbWIuYyBmb3IgY2FsY3VsYXRpb24gY29tbWVudHMgKi8KIHN0YXRpYyBpbnQgZGliMzAwMG1jX3JlYWRfc25yKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYgKnNucikKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1MTYgdmFsID0gcmQoRElCMzAwME1DX1JFR19TSUdOQUxfTk9JU0VfTFNCKSwKLQkJdmFsMiA9IHJkKERJQjMwMDBNQ19SRUdfU0lHTkFMX05PSVNFX01TQik7Ci0JdTE2IHNpZyxub2lzZTsKLQotCXNpZyA9ICAgKCgodmFsID4+IDYpICYgMHhmZikgPDwgOCkgKyAodmFsICYgMHgzZik7Ci0Jbm9pc2UgPSAoKCh2YWwgPj4gNCkgJiAweGZmKSA8PCA4KSArICgodmFsICYgMHhmKSA8PCAyKSArICgodmFsMiA+PiAxNCkgJiAweDMpOwotCWlmIChub2lzZSA9PSAwKQotCQkqc25yID0gMHhmZmZmOwotCWVsc2UKLQkJKnNuciA9ICh1MTYpIHNpZy9ub2lzZTsKLQotCWRlYl9zdGF0KCJzaWduYWw6IG1hbnRpc3NlID0gJWQsIGV4cG9uZW50ID0gJWRcbiIsKHNpZyA+PiA4KSAmIDB4ZmYsIHNpZyAmIDB4ZmYpOwotCWRlYl9zdGF0KCJub2lzZTogIG1hbnRpc3NlID0gJWQsIGV4cG9uZW50ID0gJWRcbiIsKG5vaXNlID4+IDgpICYgMHhmZiwgbm9pc2UgJiAweGZmKTsKLQlkZWJfc3RhdCgic25yOiAlZFxuIiwqc25yKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkaWIzMDAwbWNfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCi17Ci0Jc3RydWN0IGRpYjMwMDBfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0KLQlzZXRfb3IoRElCMzAwME1DX1JFR19DTEtfQ0ZHXzcsRElCMzAwME1DX0NMS19DRkdfN19QV1JfRE9XTik7Ci0Jd3IoRElCMzAwME1DX1JFR19DTEtfQ0ZHXzEsRElCMzAwME1DX0NMS19DRkdfMV9QT1dFUl9ET1dOKTsKLQl3cihESUIzMDAwTUNfUkVHX0NMS19DRkdfMixESUIzMDAwTUNfQ0xLX0NGR18yX1BPV0VSX0RPV04pOwotCXdyKERJQjMwMDBNQ19SRUdfQ0xLX0NGR18zLERJQjMwMDBNQ19DTEtfQ0ZHXzNfUE9XRVJfRE9XTik7CisJKnNuciA9IDB4MDAwMDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzI5LDE4NSArNzk1LDEyNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGRpYjMwMDBtY19mZV9pbml0X25vbm1vYmlsZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3N0YXRpYyB2b2lkIGRpYjMwMDBtY19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXJldHVybiBkaWIzMDAwbWNfZmVfaW5pdChmZSwgMCk7Ci19Ci0KLXN0YXRpYyBpbnQgZGliMzAwMG1jX3NldF9mcm9udGVuZF9hbmRfdHVuZXIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVwKQotewotCXJldHVybiBkaWIzMDAwbWNfc2V0X2Zyb250ZW5kKGZlLCBmZXAsIDEpOwotfQotCi1zdGF0aWMgdm9pZCBkaWIzMDAwbWNfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKLXsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKCZzdGF0ZS0+aTJjX21hc3Rlcik7CiAJa2ZyZWUoc3RhdGUpOwogfQogCi0vKiBwaWQgZmlsdGVyIGFuZCB0cmFuc2ZlciBzdHVmZiAqLwotc3RhdGljIGludCBkaWIzMDAwbWNfcGlkX2NvbnRyb2woc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsaW50IGluZGV4LCBpbnQgcGlkLGludCBvbm9mZikKK2ludCBkaWIzMDAwbWNfcGlkX2NvbnRyb2woc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBpbmRleCwgaW50IHBpZCxpbnQgb25vZmYpCiB7Ci0Jc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JcGlkID0gKG9ub2ZmID8gcGlkIHwgRElCMzAwMF9BQ1RJVkFURV9QSURfRklMVEVSSU5HIDogMCk7Ci0Jd3IoaW5kZXgrRElCMzAwME1DX1JFR19GSVJTVF9QSUQscGlkKTsKKwlzdHJ1Y3QgZGliMzAwMG1jX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWRpYjMwMDBtY193cml0ZV93b3JkKHN0YXRlLCAyMTIgKyBpbmRleCwgIG9ub2ZmID8gKDEgPDwgMTMpIHwgcGlkIDogMCk7CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MKGRpYjMwMDBtY19waWRfY29udHJvbCk7CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX2ZpZm9fY29udHJvbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQoraW50IGRpYjMwMDBtY19waWRfcGFyc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZikKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1MTYgdG1wID0gcmQoRElCMzAwME1DX1JFR19TTU9fTU9ERSk7Ci0KLQlkZWJfeGZlcigiJXMgZmlmb1xuIixvbm9mZiA/ICJlbmFibGluZyIgOiAiZGlzYWJsaW5nIik7Ci0KLQlpZiAob25vZmYpIHsKLQkJZGViX3hmZXIoIiVkICV4XG4iLHRtcCAmIERJQjMwMDBNQ19TTU9fTU9ERV9GSUZPX1VORkxVU0gsdG1wICYgRElCMzAwME1DX1NNT19NT0RFX0ZJRk9fVU5GTFVTSCk7Ci0JCXdyKERJQjMwMDBNQ19SRUdfU01PX01PREUsdG1wICYgRElCMzAwME1DX1NNT19NT0RFX0ZJRk9fVU5GTFVTSCk7Ci0JfSBlbHNlIHsKLQkJZGViX3hmZXIoIiVkICV4XG4iLHRtcCB8IERJQjMwMDBNQ19TTU9fTU9ERV9GSUZPX0ZMVVNILHRtcCB8IERJQjMwMDBNQ19TTU9fTU9ERV9GSUZPX0ZMVVNIKTsKLQkJd3IoRElCMzAwME1DX1JFR19TTU9fTU9ERSx0bXAgfCBESUIzMDAwTUNfU01PX01PREVfRklGT19GTFVTSCk7Ci0JfQotCXJldHVybiAwOworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTE2IHRtcCA9IGRpYjMwMDBtY19yZWFkX3dvcmQoc3RhdGUsIDIwNikgJiB+KDEgPDwgNCk7CisJdG1wIHw9IChvbm9mZiA8PCA0KTsKKwlyZXR1cm4gZGliMzAwMG1jX3dyaXRlX3dvcmQoc3RhdGUsIDIwNiwgdG1wKTsKIH0KK0VYUE9SVF9TWU1CT0woZGliMzAwMG1jX3BpZF9wYXJzZSk7CiAKLXN0YXRpYyBpbnQgZGliMzAwMG1jX3BpZF9wYXJzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKQordm9pZCBkaWIzMDAwbWNfc2V0X2NvbmZpZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZykKIHsKLQlzdHJ1Y3QgZGliMzAwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQl1MTYgdG1wID0gcmQoRElCMzAwME1DX1JFR19TTU9fTU9ERSk7Ci0KLQlkZWJfeGZlcigiJXMgcGlkIHBhcnNpbmdcbiIsb25vZmYgPyAiZW5hYmxpbmciIDogImRpc2FibGluZyIpOwotCi0JaWYgKG9ub2ZmKSB7Ci0JCXdyKERJQjMwMDBNQ19SRUdfU01PX01PREUsdG1wIHwgRElCMzAwME1DX1NNT19NT0RFX1BJRF9QQVJTRSk7Ci0JfSBlbHNlIHsKLQkJd3IoRElCMzAwME1DX1JFR19TTU9fTU9ERSx0bXAgJiBESUIzMDAwTUNfU01PX01PREVfTk9fUElEX1BBUlNFKTsKLQl9Ci0JcmV0dXJuIDA7CisJc3RydWN0IGRpYjMwMDBtY19zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdGF0ZS0+Y2ZnID0gY2ZnOwogfQotCi1zdGF0aWMgaW50IGRpYjMwMDBtY190dW5lcl9wYXNzX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZiwgdTggcGxsX2FkZHIpCi17Ci0Jc3RydWN0IGRpYjMwMDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0JaWYgKG9ub2ZmKSB7Ci0JCXdyKERJQjMwMDBNQ19SRUdfVFVORVIsIERJQjMwMDBfVFVORVJfV1JJVEVfRU5BQkxFKHBsbF9hZGRyKSk7Ci0JfSBlbHNlIHsKLQkJd3IoRElCMzAwME1DX1JFR19UVU5FUiwgRElCMzAwMF9UVU5FUl9XUklURV9ESVNBQkxFKHBsbF9hZGRyKSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRpYjMwMDBtY19kZW1vZF9pbml0KHN0cnVjdCBkaWIzMDAwX3N0YXRlICpzdGF0ZSkKLXsKLQl1MTYgZGVmYXVsdF9hZGRyID0gMHgwYTsKLQkvKiBmaXJzdCBpbml0ICovCi0JaWYgKHN0YXRlLT5jb25maWcuZGVtb2RfYWRkcmVzcyAhPSBkZWZhdWx0X2FkZHIpIHsKLQkJZGViX2luZm8oImluaXRpYWxpemluZyB0aGUgZGVtb2QgdGhlIGZpcnN0IHRpbWUuIFNldHRpbmcgZGVtb2QgYWRkciB0byAweCV4XG4iLGRlZmF1bHRfYWRkcik7Ci0JCXdyKERJQjMwMDBNQ19SRUdfRUxFQ19PVVQsRElCMzAwME1DX0VMRUNfT1VUX0RJVl9PVVRfT04pOwotCQl3cihESUIzMDAwTUNfUkVHX09VVE1PREUsRElCMzAwME1DX09NX1BBUl9DT05UX0NMSyk7Ci0KLQkJd3IoRElCMzAwME1DX1JFR19SU1RfSTJDX0FERFIsCi0JCQlESUIzMDAwTUNfREVNT0RfQUREUihkZWZhdWx0X2FkZHIpIHwKLQkJCURJQjMwMDBNQ19ERU1PRF9BRERSX09OKTsKLQotCQlzdGF0ZS0+Y29uZmlnLmRlbW9kX2FkZHJlc3MgPSBkZWZhdWx0X2FkZHI7Ci0KLQkJd3IoRElCMzAwME1DX1JFR19SU1RfSTJDX0FERFIsCi0JCQlESUIzMDAwTUNfREVNT0RfQUREUihkZWZhdWx0X2FkZHIpKTsKLQl9IGVsc2UKLQkJZGViX2luZm8oImRlbW9kIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQuIERlbW9kIGFkZHI6IDB4JXhcbiIsc3RhdGUtPmNvbmZpZy5kZW1vZF9hZGRyZXNzKTsKLQlyZXR1cm4gMDsKLX0KLQorRVhQT1JUX1NZTUJPTChkaWIzMDAwbWNfc2V0X2NvbmZpZyk7CiAKIHN0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBkaWIzMDAwbWNfb3BzOwogCi1zdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkaWIzMDAwbWNfYXR0YWNoKGNvbnN0IHN0cnVjdCBkaWIzMDAwX2NvbmZpZyogY29uZmlnLAotCQkJCSAgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCBzdHJ1Y3QgZGliX2ZlX3hmZXJfb3BzICp4ZmVyX29wcykKK2ludCBkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIGludCBub19vZl9kZW1vZHMsIHU4CWRlZmF1bHRfYWRkciwJCQkJdTggZG9faTJjX2VudW0sIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnIGNmZ1tdLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZFtdKQogewotCXN0cnVjdCBkaWIzMDAwX3N0YXRlKiBzdGF0ZSA9IE5VTEw7Ci0JdTE2IGRldmlkOworCXN0cnVjdCBkaWIzMDAwbWNfc3RhdGUgKnN0OworCWludCBrLCBudW09MDsKIAotCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCi0Jc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZGliMzAwMF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzdGF0ZSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOworCWlmIChub19vZl9kZW1vZHMgPCAxKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwotCXN0YXRlLT5pMmMgPSBpMmM7Ci0JbWVtY3B5KCZzdGF0ZS0+Y29uZmlnLGNvbmZpZyxzaXplb2Yoc3RydWN0IGRpYjMwMDBfY29uZmlnKSk7CisJZm9yIChrID0gMDsgayA8IG5vX29mX2RlbW9kczsgaysrKSB7CisJCXN0ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGRpYjMwMDBtY19zdGF0ZSksIEdGUF9LRVJORUwpOworCQlpZiAoc3QgPT0gTlVMTCkKKwkJCWdvdG8gZXJyb3I7CiAKLQkvKiBjaGVjayBmb3IgdGhlIGNvcnJlY3QgZGVtb2QgKi8KLQlpZiAocmQoRElCMzAwMF9SRUdfTUFOVUZBQ1RPUl9JRCkgIT0gRElCMzAwMF9JMkNfSURfRElCQ09NKQotCQlnb3RvIGVycm9yOworCQludW0rKzsKIAotCWRldmlkID0gcmQoRElCMzAwMF9SRUdfREVWSUNFX0lEKTsKLQlpZiAoZGV2aWQgIT0gRElCMzAwME1DX0RFVklDRV9JRCAmJiBkZXZpZCAhPSBESUIzMDAwUF9ERVZJQ0VfSUQpCi0JCWdvdG8gZXJyb3I7CisJCXN0LT5jZmcgPSAmY2ZnW2tdOworCS8vCXN0LT5ncGlvX3ZhbCA9IGNmZ1trXS5ncGlvX3ZhbDsKKwkvLwlzdC0+Z3Bpb19kaXIgPSBjZmdba10uZ3Bpb19kaXI7CisJCXN0LT5pMmNfYWRhcCA9IGkyY19hZGFwOwogCi0Jc3dpdGNoIChkZXZpZCkgewotCQljYXNlIERJQjMwMDBNQ19ERVZJQ0VfSUQ6Ci0JCQlpbmZvKCJGb3VuZCBhIERpQmNvbSAzMDAwTS1DLCBpbnRlcmVzdGluZy4uLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRElCMzAwMFBfREVWSUNFX0lEOgotCQkJaW5mbygiRm91bmQgYSBEaUJjb20gMzAwMFAuIik7Ci0JCQlicmVhazsKKwkJZGVtb2Rba10gICAgICAgICAgID0gJnN0LT5kZW1vZDsKKwkJZGVtb2Rba10tPmRlbW9kdWxhdG9yX3ByaXYgICAgID0gc3Q7CisJCW1lbWNweSgmc3QtPmRlbW9kLm9wcywgJmRpYjMwMDBtY19vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCisvLwkJSU5JVF9DT01QT05FTlRfUkVHSVNURVJfQUNDRVNTKCZzdC0+cmVnaXN0ZXJfYWNjZXNzLCAxMiwgMTYsIGRpYjcwMDBwX3JlZ2lzdGVyX3JlYWQsIGRpYjcwMDBwX3JlZ2lzdGVyX3dyaXRlLCBzdCk7CisvLwkJZGVtb2Rba10tPnJlZ2lzdGVyX2FjY2VzcyA9ICZzdC0+cmVnaXN0ZXJfYWNjZXNzOwogCX0KIAotCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KLQltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZkaWIzMDAwbWNfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKLQlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCWlmIChkb19pMmNfZW51bSkgeworCQlpZiAoZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihkZW1vZCxub19vZl9kZW1vZHMsZGVmYXVsdF9hZGRyKSAhPSAwKQorCQkJZ290byBlcnJvcjsKKwl9IGVsc2UgeworCQlzdCA9IGRlbW9kWzBdLT5kZW1vZHVsYXRvcl9wcml2OworCQlzdC0+aTJjX2FkZHIgPSBkZWZhdWx0X2FkZHI7CisJCWlmIChkaWIzMDAwbWNfaWRlbnRpZnkoc3QpICE9IDApCisJCQlnb3RvIGVycm9yOworCX0KIAotCS8qIHNldCB0aGUgeGZlciBvcGVyYXRpb25zICovCi0JeGZlcl9vcHMtPnBpZF9wYXJzZSA9IGRpYjMwMDBtY19waWRfcGFyc2U7Ci0JeGZlcl9vcHMtPmZpZm9fY3RybCA9IGRpYjMwMDBtY19maWZvX2NvbnRyb2w7Ci0JeGZlcl9vcHMtPnBpZF9jdHJsID0gZGliMzAwMG1jX3BpZF9jb250cm9sOwotCXhmZXJfb3BzLT50dW5lcl9wYXNzX2N0cmwgPSBkaWIzMDAwbWNfdHVuZXJfcGFzc19jdHJsOworCWZvciAoayA9IDA7IGsgPCBudW07IGsrKykgeworCQlzdCA9IGRlbW9kW2tdLT5kZW1vZHVsYXRvcl9wcml2OworCQlkaWJ4MDAwX2luaXRfaTJjX21hc3Rlcigmc3QtPmkyY19tYXN0ZXIsIERJQjMwMDBNQywgc3QtPmkyY19hZGFwLCBzdC0+aTJjX2FkZHIpOworCX0KIAotCWRpYjMwMDBtY19kZW1vZF9pbml0KHN0YXRlKTsKLQotCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCXJldHVybiAwOwogCiBlcnJvcjoKLQlrZnJlZShzdGF0ZSk7Ci0JcmV0dXJuIE5VTEw7CisJZm9yIChrID0gMDsgayA8IG51bTsgaysrKSB7CisJCWtmcmVlKGRlbW9kW2tdLT5kZW1vZHVsYXRvcl9wcml2KTsKKwkJZGVtb2Rba10gPSBOVUxMOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKIH0KKwogRVhQT1JUX1NZTUJPTChkaWIzMDAwbWNfYXR0YWNoKTsKIAogc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGRpYjMwMDBtY19vcHMgPSB7Ci0KIAkuaW5mbyA9IHsKLQkJLm5hbWUJCQk9ICJEaUJjb20gMzAwMFAvTS1DIERWQi1UIiwKLQkJLnR5cGUJCQk9IEZFX09GRE0sCi0JCS5mcmVxdWVuY3lfbWluCQk9IDQ0MjUwMDAwLAotCQkuZnJlcXVlbmN5X21heAkJPSA4NjcyNTAwMDAsCi0JCS5mcmVxdWVuY3lfc3RlcHNpemUJPSA2MjUwMCwKKwkJLm5hbWUgPSAiRGlCY29tIDMwMDBNQy9QIiwKKwkJLnR5cGUgPSBGRV9PRkRNLAorCQkuZnJlcXVlbmN5X21pbiAgICAgID0gNDQyNTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICAgICAgPSA4NjcyNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSA2MjUwMCwKIAkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAotCQkJCUZFX0NBTl9GRUNfMV8yIHwgRkVfQ0FOX0ZFQ18yXzMgfCBGRV9DQU5fRkVDXzNfNCB8Ci0JCQkJRkVfQ0FOX0ZFQ181XzYgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8Ci0JCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8Ci0JCQkJRkVfQ0FOX1RSQU5TTUlTU0lPTl9NT0RFX0FVVE8gfAotCQkJCUZFX0NBTl9HVUFSRF9JTlRFUlZBTF9BVVRPIHwKLQkJCQlGRV9DQU5fUkVDT1ZFUiB8Ci0JCQkJRkVfQ0FOX0hJRVJBUkNIWV9BVVRPLAorCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ183XzggfCBGRV9DQU5fRkVDX0FVVE8gfAorCQkJRkVfQ0FOX1FQU0sgfCBGRV9DQU5fUUFNXzE2IHwgRkVfQ0FOX1FBTV82NCB8IEZFX0NBTl9RQU1fQVVUTyB8CisJCQlGRV9DQU5fVFJBTlNNSVNTSU9OX01PREVfQVVUTyB8CisJCQlGRV9DQU5fR1VBUkRfSU5URVJWQUxfQVVUTyB8CisJCQlGRV9DQU5fUkVDT1ZFUiB8CisJCQlGRV9DQU5fSElFUkFSQ0hZX0FVVE8sCiAJfSwKIAotCS5yZWxlYXNlID0gZGliMzAwMG1jX3JlbGVhc2UsCisJLnJlbGVhc2UgICAgICAgICAgICAgID0gZGliMzAwMG1jX3JlbGVhc2UsCiAKLQkuaW5pdCA9IGRpYjMwMDBtY19mZV9pbml0X25vbm1vYmlsZSwKLQkuc2xlZXAgPSBkaWIzMDAwbWNfc2xlZXAsCisJLmluaXQgICAgICAgICAgICAgICAgID0gZGliMzAwMG1jX2luaXQsCisJLnNsZWVwICAgICAgICAgICAgICAgID0gZGliMzAwMG1jX3NsZWVwLAogCi0JLnNldF9mcm9udGVuZCA9IGRpYjMwMDBtY19zZXRfZnJvbnRlbmRfYW5kX3R1bmVyLAotCS5nZXRfZnJvbnRlbmQgPSBkaWIzMDAwbWNfZ2V0X2Zyb250ZW5kLAotCS5nZXRfdHVuZV9zZXR0aW5ncyA9IGRpYjMwMDBtY19mZV9nZXRfdHVuZV9zZXR0aW5ncywKKwkuc2V0X2Zyb250ZW5kICAgICAgICAgPSBkaWIzMDAwbWNfc2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyAgICA9IGRpYjMwMDBtY19mZV9nZXRfdHVuZV9zZXR0aW5ncywKKwkuZ2V0X2Zyb250ZW5kICAgICAgICAgPSBkaWIzMDAwbWNfZ2V0X2Zyb250ZW5kLAogCi0JLnJlYWRfc3RhdHVzID0gZGliMzAwMG1jX3JlYWRfc3RhdHVzLAotCS5yZWFkX2JlciA9IGRpYjMwMDBtY19yZWFkX2JlciwKKwkucmVhZF9zdGF0dXMgICAgICAgICAgPSBkaWIzMDAwbWNfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyICAgICAgICAgICAgID0gZGliMzAwMG1jX3JlYWRfYmVyLAogCS5yZWFkX3NpZ25hbF9zdHJlbmd0aCA9IGRpYjMwMDBtY19yZWFkX3NpZ25hbF9zdHJlbmd0aCwKLQkucmVhZF9zbnIgPSBkaWIzMDAwbWNfcmVhZF9zbnIsCi0JLnJlYWRfdWNibG9ja3MgPSBkaWIzMDAwbWNfcmVhZF91bmNfYmxvY2tzLAorCS5yZWFkX3NuciAgICAgICAgICAgICA9IGRpYjMwMDBtY19yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyAgICAgICAgPSBkaWIzMDAwbWNfcmVhZF91bmNfYmxvY2tzLAogfTsKIAotTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKLU1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIEJvZXR0Y2hlciA8cGJvZXR0Y2hlckBkaWJjb20uZnI+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgdGhlIERpQmNvbSAzMDAwTUMvUCBDT0ZETSBkZW1vZHVsYXRvciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkMGIyZTcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIERyaXZlciBmb3IgRGlCY29tIERpQjMwMDBNQy9QLWRlbW9kdWxhdG9yLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNC02IERpQmNvbSAoaHR0cDovL3d3dy5kaWJjb20uZnIvKQorICogQ29weXJpZ2h0IChDKSAyMDA0LTUgUGF0cmljayBCb2V0dGNoZXIgKHBhdHJpY2suYm9ldHRjaGVyXEBkZXN5LmRlKQorICoKKyAqIFRoaXMgY29kZSBpcyBwYXJ0aWFsbHkgYmFzZWQgb24gdGhlIHByZXZpb3VzIGRpYjMwMDBtYy5jIC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqLworI2lmbmRlZiBESUIzMDAwTUNfSAorI2RlZmluZSBESUIzMDAwTUNfSAorCisjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKKworc3RydWN0IGRpYjMwMDBtY19jb25maWcgeworCXN0cnVjdCBkaWJ4MDAwX2FnY19jb25maWcgKmFnYzsKKworCXU4IHBoYXNlX25vaXNlX21vZGU7CisJdTggaW1wdWxzZV9ub2lzZV9tb2RlOworCisJdTggIHB3bTNfaW52ZXJzaW9uOworCXU4ICB1c2VfcHdtMzsKKwl1MTYgcHdtM192YWx1ZTsKKworCXUxNiBtYXhfdGltZTsKKwl1MTYgbG5fYWRjX2xldmVsOworCisJdTggbW9iaWxlX21vZGU7CisKKwl1OCBvdXRwdXRfbXBlZzJfaW5fMTg4X2J5dGVzOworfTsKKworI2RlZmluZSBERUZBVUxUX0RJQjMwMDBNQ19JMkNfQUREUkVTUyAxNgorI2RlZmluZSBERUZBVUxUX0RJQjMwMDBQX0kyQ19BRERSRVNTICAyNAorCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQykgfHwgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQ19NT0RVTEUpCitleHRlcm4gaW50IGRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLAorICAgIHU4IGRvX2kyY19lbnVtLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyBjZmdbXSwgc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2RbXSk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkaWIzMDAwbWNfYXR0YWNoKGNvbnN0IHN0cnVjdCBkaWIzMDAwX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCBzdHJ1Y3QgZGliX2ZlX3hmZXJfb3BzICp4ZmVyX29wcykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9ESUIzMDAwTUMKKworZXh0ZXJuIHN0cnVjdCBpMmNfYWRhcHRlciAqIGRpYjMwMDBtY19nZXRfdHVuZXJfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkZW1vZCwgaW50IGdhdGluZyk7CisKK2V4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9jb250cm9sKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgaW5kZXgsIGludCBwaWQsaW50IG9ub2ZmKTsKK2V4dGVybiBpbnQgZGliMzAwMG1jX3BpZF9wYXJzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IG9ub2ZmKTsKKworZXh0ZXJuIHZvaWQgZGliMzAwMG1jX3NldF9jb25maWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWNfcHJpdi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyOTMwYWFjLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWNfcHJpdi5oCisrKyAvZGV2L251bGwKQEAgLTEsNDI4ICswLDAgQEAKLS8qCi0gKiBkaWIzMDAwbWNfcHJpdi5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDA0IFBhdHJpY2sgQm9ldHRjaGVyIChwYXRyaWNrLmJvZXR0Y2hlckBkZXN5LmRlKQotICoKLSAqCVRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqCW1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi0gKglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgdmVyc2lvbiAyLgotICoKLSAqIGZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSBkaWIzMDAwbWMuYyAuCi0gKi8KLQotI2lmbmRlZiBfX0RJQjMwMDBNQ19QUklWX0hfXwotI2RlZmluZSBfX0RJQjMwMDBNQ19QUklWX0hfXwotCi0vKgotICogRGVtb2R1bGF0b3IgcGFyYW1ldGVycwotICogcmVnOiAwICAxIDEgIDEgMTEgMTEgMTExCi0gKiAgICAgICAgIHwgfCAgfCAgfCAgfCAgfAotICogICAgICAgICB8IHwgIHwgIHwgIHwgICstLSBhbHBoYSAoMDAwPTAsIDAwMT0xLCAwMTA9MiwgMTAwPTQpCi0gKiAgICAgICAgIHwgfCAgfCAgfCAgKy0tLS0tIGNvbnN0ZWxsYXRpb24gKDAwPVFQU0ssIDAxPTE2UUFNLCAxMD02NFFBTSkKLSAqICAgICAgICAgfCB8ICB8ICArLS0tLS0tLS0gZ3VhcmQgKDAwPTEvMzIsIDAxPTEvMTYsIDEwPTEvOCwgMTE9MS80KQotICogICAgICAgICB8IHwgICstLS0tLS0tLS0tLSB0cmFuc21pc3Npb24gbW9kZSAoMD0yaywgMT04aykKLSAqICAgICAgICAgfCB8Ci0gKiAgICAgICAgIHwgKy0tLS0tLS0tLS0tLS0tIHJlc3RhcnQgYXV0b3NlYXJjaCBmb3IgcGFyYW1ldGVycwotICogICAgICAgICArLS0tLS0tLS0tLS0tLS0tLSByZXN0YXJ0IHRoZSBkZW1vZHVsYXRvcgotICogcmVnOiAxODEgICAgICAxIDExMSAxCi0gKiAgICAgICAgICAgICAgIHwgIHwgIHwKLSAqICAgICAgICAgICAgICAgfCAgfCAgKy0gRkVDIGFwcGxpZXMgZm9yIEhQIG9yIExQICgwPUxQLCAxPUhQKQotICogICAgICAgICAgICAgICB8ICArLS0tLSBGRUMgcmF0ZSAoMDAxPTEvMiwgMDEwPTIvMywgMDExPTMvNCwgMTAxPTUvNiwgMTExPTcvOCkKLSAqICAgICAgICAgICAgICAgKy0tLS0tLS0gaGllcmFyY2h5IG9uICgwPW5vLCAxPXllcykKLSAqLwotCi0vKiBkZW1vZHVsYXRvciB0dW5pbmcgcGFyYW1ldGVyIGFuZCByZXN0YXJ0IG9wdGlvbnMgKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19ERU1PRF9QQVJNCQkoICAgICAwKQotI2RlZmluZSBESUIzMDAwTUNfREVNT0RfUEFSTShhLGMsZyx0KQkoIFwKLQkJICgweDcgJiBhKSB8IFwKLQkJKCgweDMgJiBjKSA8PCAzKSB8IFwKLQkJKCgweDMgJiBnKSA8PCA1KSB8IFwKLQkJKCgweDEgJiB0KSA8PCA3KSApCi0jZGVmaW5lIERJQjMwMDBNQ19ERU1PRF9SU1RfQVVUT19TUkNIX09OCSgxIDw8IDgpCi0jZGVmaW5lIERJQjMwMDBNQ19ERU1PRF9SU1RfQVVUT19TUkNIX09GRgkoMCA8PCA4KQotI2RlZmluZSBESUIzMDAwTUNfREVNT0RfUlNUX0RFTU9EX09OCQkoMSA8PCA5KQotI2RlZmluZSBESUIzMDAwTUNfREVNT0RfUlNUX0RFTU9EX09GRgkJKDAgPDwgOSkKLQotLyogcmVnaXN0ZXIgZm9yIGhpZXJhcmNoeSBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfSFJDSF9QQVJNCQkJKCAgIDE4MSkKLSNkZWZpbmUgRElCMzAwME1DX0hSQ0hfUEFSTShzLGYsaCkJCSggXAotCQkgKDB4MSAmIHMpIHwgXAotCQkoKDB4NyAmIGYpIDw8IDEpIHwgXAotCQkoKDB4MSAmIGgpIDw8IDQpICkKLQotLyogdGltZW91dCA/Pz8gKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19VTktfMQkJCQkoICAgICAxKQotI2RlZmluZSBESUIzMDAwTUNfVU5LXzEJCQkJCSggIDB4MDQpCi0KLS8qIHRpbWVvdXQgPz8/ICovCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVU5LXzIJCQkJKCAgICAgMikKLSNkZWZpbmUgRElCMzAwME1DX1VOS18yCQkJCQkoICAweDA0KQotCi0vKiB0aW1lb3V0ID8/PyAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX1VOS18zCQkJCSggICAgIDMpCi0jZGVmaW5lIERJQjMwMDBNQ19VTktfMwkJCQkJKDB4MTAwMCkKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1VOS180CQkJCSggICAgIDQpCi0jZGVmaW5lIERJQjMwMDBNQ19VTktfNAkJCQkJKDB4MDgxNCkKLQotLyogdGltZW91dCA/Pz8gKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19TRVFfVFBTCQkJKCAgICAgNSkKLSNkZWZpbmUgRElCMzAwME1DX1NFUV9UUFNfREVGQVVMVAkJKCAgICAgMSkKLSNkZWZpbmUgRElCMzAwME1DX1NFUV9UUFMocyx0KQkJCSggXAotCQkoKHMgJiAweDBmKSA8PCA0KSB8IFwKLQkJKCh0ICYgMHgwMSkgPDwgOCkgKQotI2RlZmluZSBESUIzMDAwTUNfSVNfVFBTKHYpCQkJCSgodiA8PCA4KSAmIDB4MSkKLSNkZWZpbmUgRElCMzAwME1DX0lTX0FTKHYpCQkJCSgodiA+PiA0KSAmIDB4ZikKLQotLyogcGFyYW1ldGVycyBmb3IgdGhlIGJhbmR3aWR0aCAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX0JXX1RJTU9VVF9NU0IJCSggICAgIDYpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfQldfVElNT1VUX0xTQgkJKCAgICAgNykKLQotc3RhdGljIHUxNiBkaWIzMDAwbWNfcmVnX2JhbmR3aWR0aFtdID0geyA2LDcsOCw5LDEwLDExLDE2LDE3IH07Ci0KLS8qc3RhdGljIHUxNiBkaWIzMDAwbWNfYmFuZHdpZHRoXzVtaHpbXSA9Ci0JeyAweDI4LCAweDkzODAsIDB4ODcsIDB4NDEwMCwgMHgyYTQsIDB4NDUwMCwgMHgxLCAweGIwZDAgfTsqLwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19iYW5kd2lkdGhfNm1oeltdID0KLQl7IDB4MjEsIDB4ZDA0MCwgMHg3MCwgMHhiNjJiLCAweDIzMywgMHg4ZWQ1LCAweDEsIDB4YjBkMCB9OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19iYW5kd2lkdGhfN21oeltdID0KLQl7IDB4MWMsIDB4ZmJhNSwgMHg2MCwgMHg5YzI1LCAweDFlMywgMHgwY2I3LCAweDEsIDB4YjBkMCB9OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19iYW5kd2lkdGhfOG1oeltdID0KLQl7IDB4MTksIDB4NWMzMCwgMHg1NCwgMHg4OGEwLCAweDFhNiwgMHhhYjIwLCAweDEsIDB4YjBkMCB9OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfYmFuZHdpZHRoX2dlbmVyYWxbXSA9IHsgMTIsMTMsMTQsMTUgfTsKLXN0YXRpYyB1MTYgZGliMzAwMG1jX2JhbmR3aWR0aF9nZW5lcmFsW10gPSB7IDB4MDAwMCwgMHgwM2U4LCAweDAwMDAsIDB4MDNmMiB9OwotCi0vKiBsb2NrIG1hc2sgKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19MT0NLX01BU0sJCQkoICAgIDE1KQotI2RlZmluZSBESUIzMDAwTUNfQUNUSVZBVEVfTE9DS19NQVNLCSgweDA4MDApCi0KLS8qIHJlc2V0IHRoZSB1bmNvcnJlY3RlZCBwYWNrZXQgY291bnQgKD8/PyBkbyBpdCA1IHRpbWVzKSAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX1JTVF9VTkMJCQkoICAgIDE4KQotI2RlZmluZSBESUIzMDAwTUNfUlNUX1VOQ19PTgkJCSggICAgIDEpCi0jZGVmaW5lIERJQjMwMDBNQ19SU1RfVU5DX09GRgkJCSggICAgIDApCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19VTktfMTkJCQkoICAgIDE5KQotI2RlZmluZSBESUIzMDAwTUNfVU5LXzE5CQkJCSggICAgIDApCi0KLS8qIEREUyBmcmVxdWVuY3kgdmFsdWUgKElGIHBvc2l0aW9uKSBhbmQgaW52ZXJzaW9uIGJpdCAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX0lOVkVSU0lPTgkJCSggICAgMjEpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfU0VUX0REU19GUkVRX01TQgkoICAgIDIxKQotI2RlZmluZSBESUIzMDAwTUNfRERTX0ZSRVFfTVNCX0lOVl9PRkYJKDB4MDE2NCkKLSNkZWZpbmUgRElCMzAwME1DX0REU19GUkVRX01TQl9JTlZfT04JKDB4MDM2NCkKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1NFVF9ERFNfRlJFUV9MU0IJKCAgICAyMikKLSNkZWZpbmUgRElCMzAwME1DX0REU19GUkVRX0xTQgkJCSgweDQ2M2QpCi0KLS8qIHRpbWluZyBmcmVxdWVuY2llcyBzZXR0aW5nICovCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVElNSU5HX0ZSRVFfTVNCCSggICAgMjMpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVElNSU5HX0ZSRVFfTFNCCSggICAgMjQpCi0jZGVmaW5lIERJQjMwMDBNQ19DTE9DS19SRUYJCQkJKDB4MTUxZmQxKQotCi0vL3N0YXRpYyB1MTYgZGliMzAwMG1jX3JlZ190aW1pbmdfZnJlcVtdID0geyAyMywyNCB9OwotCi0vL3N0YXRpYyB1MTYgZGliMzAwMG1jX3RpbWluZ19mcmVxW11bMl0gPSB7Ci0vLwl7IDB4NjksIDB4OWYxOCB9LCAvKiA1IE1IeiAqLwotLy8JeyAweDdlICwweGJlZTkgfSwgLyogNiBNSHogKi8KLS8vCXsgMHg5MyAsMHhkZWJiIH0sIC8qIDcgTUh6ICovCi0vLwl7IDB4YTggLDB4ZmU4YyB9LCAvKiA4IE1IeiAqLwotLy99OwotCi0vKiB0aW1lb3V0ID8/PyAqLwotc3RhdGljIHUxNiBkaWIzMDAwbWNfcmVnX29mZnNldFtdID0geyAyNiwzMyB9OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19vZmZzZXRbXVsyXSA9IHsKLQl7IDI2MjQwLCA1IH0sIC8qIGRlZmF1bHQgKi8KLQl7IDMwMzM2LCA2IH0sIC8qIDhLICovCi0JeyAzODUyOCwgOCB9LCAvKiAySyAqLwotfTsKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0lTSQkJCQkoICAgIDI5KQotI2RlZmluZSBESUIzMDAwTUNfSVNJX0RFRkFVTFQJCQkoMHgxMDczKQotI2RlZmluZSBESUIzMDAwTUNfSVNJX0FDVElWQVRFCQkJKDB4MDAwMCkKLSNkZWZpbmUgRElCMzAwME1DX0lTSV9JTkhJQklUCQkJKDB4MDIwMCkKLQotLyogaW1wdWxzZSBub2lzZSBjb250cm9sICovCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfaW1wX25vaXNlX2N0bFtdID0geyAzNCwzNSB9OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19pbXBfbm9pc2VfY3RsW11bMl0gPSB7Ci0JeyAweDEyOTQsIDB4MWZmOCB9LCAvKiBtb2RlIDAgKi8KLQl7IDB4MTI5NCwgMHgxZmY4IH0sIC8qIG1vZGUgMSAqLwotCXsgMHgxMjk0LCAweDFmZjggfSwgLyogbW9kZSAyICovCi0JeyAweDEyOTQsIDB4MWZmOCB9LCAvKiBtb2RlIDMgKi8KLQl7IDB4MTI5NCwgMHgxZmY4IH0sIC8qIG1vZGUgNCAqLwotfTsKLQotLyogQUdDIHJlZ2lzdGVycyAqLwotc3RhdGljIHUxNiBkaWIzMDAwbWNfcmVnX2FnY1tdID0gewotCTM2LDM3LDM4LDM5LDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5Ci19OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19hZ2NfdHVuZXJbXVsxMl0gPSB7Ci0JewkweDAwNTEsIDB4MzAxZCwgMHgwMDAwLCAweDFjYzcsIDB4Y2Y1YywgMHg2NjY2LAotCQkweGJhZTEsIDB4YTE0OCwgMHgzYjVlLCAweDNjMWMsIDB4MDAxYSwgMHgyMDE5Ci0JfSwgLyogVFVORVJfUEFOQVNPTklDX0VOVjc3SDA0RDUsICovCi0KLQl7CTB4MDA1MSwgMHgzMDFkLCAweDAwMDAsIDB4MWNjNywgMHhkYzI5LCAweDU3MGEsCi0JCTB4YmFlMSwgMHg4Y2NkLCAweDNiNmQsIDB4NTUxZCwgMHgwMDBhLCAweDk1MWUKLQl9LCAvKiBUVU5FUl9QQU5BU09OSUNfRU5WNTdIMTNENSwgVFVORVJfUEFOQVNPTklDX0VOVjU3SDEyRDUgKi8KLQotCXsJMHgwMDUxLCAweDMwMWQsIDB4MDAwMCwgMHgxY2M3LCAweGZmZmYsIDB4ZmZmZiwKLQkJMHhmZmZmLCAweDAwMDAsIDB4ZmRmZCwgMHg0MDQwLCAweDAwZmQsIDB4NDA0MAotCX0sIC8qIFRVTkVSX1NBTVNVTkdfRFRPUzMzM0lIMTAyLCBUVU5FUl9SRkFHQ0lOX1VOS05PV04gKi8KLQotCXsJMHgwMTk2LCAweDMwMWQsIDB4MDAwMCwgMHgxY2M3LCAweGJkNzEsIDB4NWMyOSwKLQkJMHhiNWMzLCAweDYxNDgsIDB4NjU2OSwgMHg1MTI3LCAweDAwMzMsIDB4MzUzNwotCX0sIC8qIFRVTkVSX1BST1ZJREVSX1ggKi8KLQkvKiBUT0RPIFRVTkVSX1BBTkFTT05JQ19FTlY1N0gxMEQ4LCBUVU5FUl9QQU5BU09OSUNfRU5WNTdIMTFEOCAqLwotfTsKLQotLyogQUdDIGxvb3AgYmFuZHdpZHRoICovCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfYWdjX2JhbmR3aWR0aFtdID0geyA0MCw0MSB9Owotc3RhdGljIHUxNiBkaWIzMDAwbWNfYWdjX2JhbmR3aWR0aFtdICA9IHsgMHgxMTksMHgzMzAgfTsKLQotc3RhdGljIHUxNiBkaWIzMDAwbWNfcmVnX2FnY19iYW5kd2lkdGhfZ2VuZXJhbFtdID0geyA1MCw1MSw1Miw1Myw1NCB9Owotc3RhdGljIHUxNiBkaWIzMDAwbWNfYWdjX2JhbmR3aWR0aF9nZW5lcmFsW10gPQotCXsgMHg4MDAwLCAweDkxY2EsIDB4MDFiYSwgMHgwMDg3LCAweDAwODcgfTsKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0lNUF9OT0lTRV81NQkJKCAgICA1NSkKLSNkZWZpbmUgRElCMzAwME1DX0lNUF9ORVdfQUxHTyh3KQkJKHcgfCAoMTw8MTApKQotCi0vKiBJbXB1bHNlIG5vaXNlIHBhcmFtcyAqLwotc3RhdGljIHUxNiBkaWIzMDAwbWNfcmVnX2ltcHVsc2Vfbm9pc2VbXSA9IHsgNTUsNTYsNTcgfTsKLXN0YXRpYyB1MTYgZGliMzAwMG1jX2ltcGx1c2Vfbm9pc2VbXVszXSA9IHsKLQl7IDB4NDg5LCAweDg5LCAweDcyIH0sIC8qIDUgTUh6ICovCi0JeyAweDRhNSwgMHhhNSwgMHg4OSB9LCAvKiA2IE1IeiAqLwotCXsgMHg0YzAsIDB4YzAsIDB4YTAgfSwgLyogNyBNSHogKi8KLQl7IDB4NGRiLCAweGRiLCAweGI3IH0sIC8qIDggTWh6ICovCi19OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfZmZ0W10gPSB7Ci0JNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksCi0JNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsCi0JODIsODMsODQsODUsODYKLX07Ci0KLXN0YXRpYyB1MTYgZGliMzAwMG1jX2ZmdF9tb2Rlc1tdWzI5XSA9IHsKLQl7CTB4MzgsIDB4NmQ5LCAweDNmMjgsIDB4N2E3LCAweDNhNzQsIDB4MTk2LCAweDMyYSwgMHg0OGMsCi0JCTB4M2ZmZSwgMHg3ZjMsIDB4MmQ5NCwgMHg3NiwgMHg1M2QsCi0JCTB4M2ZmOCwgMHg3ZTMsIDB4MzMyMCwgMHg3NiwgMHg1YjMsCi0JCTB4M2ZlYiwgMHg3ZDIsIDB4MzY1ZSwgMHg3NiwgMHg0OGMsCi0JCTB4M2ZmZSwgMHg1YjMsIDB4M2ZlYiwgMHg3NiwgICAweDAsIDB4ZAotCX0sIC8qIGZmdCBtb2RlIDAgKi8KLQl7CTB4M2IsIDB4NmQ5LCAweDNmMjgsIDB4N2E3LCAweDNhNzQsIDB4MTk2LCAweDMyYSwgMHg0OGMsCi0JCTB4M2ZmZSwgMHg3ZjMsIDB4MmQ5NCwgMHg3NiwgMHg1M2QsCi0JCTB4M2ZmOCwgMHg3ZTMsIDB4MzMyMCwgMHg3NiwgMHg1YjMsCi0JCTB4M2ZlYiwgMHg3ZDIsIDB4MzY1ZSwgMHg3NiwgMHg0OGMsCi0JCTB4M2ZmZSwgMHg1YjMsIDB4M2ZlYiwgMHgwLCAgMHg4MjAwLCAweGQKLQl9LCAvKiBmZnQgbW9kZSAxICovCi19OwotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVU5LXzg4CQkJKCAgICA4OCkKLSNkZWZpbmUgRElCMzAwME1DX1VOS184OAkJCQkoMHgwNDEwKQotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfYndbXSA9IHsgOTMsOTQsOTUsOTYsOTcsOTggfTsKLXN0YXRpYyB1MTYgZGliMzAwMG1jX2J3W11bNl0gPSB7Ci0JeyAwLDAsMCwwLDAsMCB9LCAvKiA1IE1IeiAqLwotCXsgMCwwLDAsMCwwLDAgfSwgLyogNiBNSHogKi8KLQl7IDAsMCwwLDAsMCwwIH0sIC8qIDcgTUh6ICovCi0JeyAweDIwLCAweDIxLCAweDIwLCAweDIzLCAweDIwLCAweDI3IH0sIC8qIDggTUh6ICovCi19OwotCi0KLS8qIHBoYXNlIG5vaXNlIGNvbnRyb2wgKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19VTktfOTkJCQkoICAgIDk5KQotI2RlZmluZSBESUIzMDAwTUNfVU5LXzk5CQkJCSgweDAyMjApCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19TQ0FOX0JPT1NUCQkoICAgMTAwKQotI2RlZmluZSBESUIzMDAwTUNfU0NBTl9CT09TVF9PTgkJCSgoMTEgPDwgNikgKyA2KQotI2RlZmluZSBESUIzMDAwTUNfU0NBTl9CT09TVF9PRkYJCSgoMTYgPDwgNikgKyA5KQotCi0vKiB0aW1lb3V0ID8/PyAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX1VOS18xMTAJCQkoICAgMTEwKQotI2RlZmluZSBESUIzMDAwTUNfVU5LXzExMAkJCQkoICAzMjc3KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVU5LXzExMQkJCSggICAxMTEpCi0jZGVmaW5lIERJQjMwMDBNQ19VTktfMTExX1BIX05fTU9ERV8wCSggICAgIDApCi0jZGVmaW5lIERJQjMwMDBNQ19VTktfMTExX1BIX05fTU9ERV8xCSgxIDw8IDEpCi0KLS8qIHN1cGVyaW91cyBybSBjb25maWcgKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19VTktfMTIwCQkJKCAgIDEyMCkKLSNkZWZpbmUgRElCMzAwME1DX1VOS18xMjAJCQkJKCAgODIwNykKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1VOS18xMzMJCQkoICAgMTMzKQotI2RlZmluZSBESUIzMDAwTUNfVU5LXzEzMwkJCQkoIDE1NTY0KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVU5LXzEzNAkJCSggICAxMzQpCi0jZGVmaW5lIERJQjMwMDBNQ19VTktfMTM0CQkJCSggICAgIDApCi0KLS8qIGFkYXB0ZXIgY29uZmlnIGZvciBjb25zdGVsbGF0aW9uICovCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfYWRwX2NmZ1tdID0geyAxMjksIDEzMCwgMTMxLCAxMzIgfTsKLQotc3RhdGljIHUxNiBkaWIzMDAwbWNfYWRwX2NmZ1tdWzRdID0gewotCXsgMHg5OWEsIDB4N2ZhZSwgMHgzMzMsIDB4N2ZmMCB9LCAvKiBRUFNLICAqLwotCXsgMHgyM2QsIDB4N2ZkZiwgMHgwYTQsIDB4N2ZmMCB9LCAvKiAxNi1RQU0gKi8KLQl7IDB4MTQ4LCAweDdmZjAsIDB4MGE0LCAweDdmZjggfSwgLyogNjQtUUFNICovCi19OwotCi1zdGF0aWMgdTE2IGRpYjMwMDBtY19yZWdfbW9iaWxlX21vZGVbXSA9IHsgMTM5LCAxNDAsIDE0MSwgMTc1LCAxMDMyIH07Ci0KLXN0YXRpYyB1MTYgZGliMzAwMG1jX21vYmlsZV9tb2RlW11bNV0gPSB7Ci0JeyAweDAxLCAweDAsIDB4MCwgMHgwMCwgMHgxMmMgfSwgLyogZml4ZWQgKi8KLQl7IDB4MDEsIDB4MCwgMHgwLCAweDAwLCAweDEyYyB9LCAvKiBwb3J0YWJsZSAqLwotCXsgMHgwMCwgMHgwLCAweDAsIDB4MDIsIDB4MDAwIH0sIC8qIG1vYmlsZSAqLwotCXsgMHgwMCwgMHgwLCAweDAsIDB4MDIsIDB4MDAwIH0sIC8qIGF1dG8gKi8KLX07Ci0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19ESVZFUlNJVFkxCQkoICAgMTc3KQotI2RlZmluZSBESUIzMDAwTUNfRElWRVJTSVRZMV9ERUZBVUxUCSggICAgIDEpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19ESVZFUlNJVFkyCQkoICAgMTc4KQotI2RlZmluZSBESUIzMDAwTUNfRElWRVJTSVRZMl9ERUZBVUxUCSggICAgIDEpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19ESVZFUlNJVFkzCQkoICAgMTgwKQotI2RlZmluZSBESUIzMDAwTUNfRElWRVJTSVRZM19JTl9PRkYJCSgweGZmZjApCi0jZGVmaW5lIERJQjMwMDBNQ19ESVZFUlNJVFkzX0lOX09OCQkoMHhmZmY2KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfRkVDX0NGRwkJCSggICAxOTUpCi0jZGVmaW5lIERJQjMwMDBNQ19GRUNfQ0ZHCQkJCSggIDB4MTApCi0KLS8qCi0gKiByZWcgMjA2LCBvdXRwdXQgbW9kZQotICogICAgICAgICAgICAgIDExMTEgMTExMQotICogICAgICAgICAgICAgIHx8fHwgfHx8fAotICogICAgICAgICAgICAgIHx8fHwgfHx8Ky0gdW5rCi0gKiAgICAgICAgICAgICAgfHx8fCB8fCstLSB1bmsKLSAqICAgICAgICAgICAgICB8fHx8IHwrLS0tIHVuayAob24gYnkgZGVmYXVsdCkKLSAqICAgICAgICAgICAgICB8fHx8ICstLS0tIGZpZm9fY3RybCAoMSA9IGluaGliaXQgKGZsdXNoZWQpLCAwID0gYWN0aXZlICh1bmZsdXNoZWQpKQotICogICAgICAgICAgICAgIHx8fCstLS0tLS0gcGlkX3BhcnNlICgxID0gZW5hYmxlZCwgMCA9IGRpc2FibGVkKQotICogICAgICAgICAgICAgIHx8Ky0tLS0tLS0gb3V0cF8xODggICgxID0gVFMgcGFja2V0IHNpemUgMTg4LCAwID0gcGFja2V0IHNpemUgMjA0KQotICogICAgICAgICAgICAgIHwrLS0tLS0tLS0gdW5rCi0gKiAgICAgICAgICAgICAgKy0tLS0tLS0tLSB1bmsKLSAqLwotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfU01PX01PREUJCQkoICAgMjA2KQotI2RlZmluZSBESUIzMDAwTUNfU01PX01PREVfREVGQVVMVAkJKDEgPDwgMikKLSNkZWZpbmUgRElCMzAwME1DX1NNT19NT0RFX0ZJRk9fRkxVU0gJKDEgPDwgMykKLSNkZWZpbmUgRElCMzAwME1DX1NNT19NT0RFX0ZJRk9fVU5GTFVTSAkoMHhmZmY3KQotI2RlZmluZSBESUIzMDAwTUNfU01PX01PREVfUElEX1BBUlNFCSgxIDw8IDQpCi0jZGVmaW5lIERJQjMwMDBNQ19TTU9fTU9ERV9OT19QSURfUEFSU0UJKDB4ZmZlZikKLSNkZWZpbmUgRElCMzAwME1DX1NNT19NT0RFXzE4OAkJCSgxIDw8IDUpCi0jZGVmaW5lIERJQjMwMDBNQ19TTU9fTU9ERV9TTEFWRQkJKERJQjMwMDBNQ19TTU9fTU9ERV9ERUZBVUxUIHwgXAotCQkJRElCMzAwME1DX1NNT19NT0RFXzE4OCB8IERJQjMwMDBNQ19TTU9fTU9ERV9QSURfUEFSU0UgfCAoMTw8MSkpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19GSUZPX1RIUkVTSE9MRAkoICAgMjA3KQotI2RlZmluZSBESUIzMDAwTUNfRklGT19USFJFU0hPTERfREVGQVVMVAkoICAxNzkyKQotI2RlZmluZSBESUIzMDAwTUNfRklGT19USFJFU0hPTERfU0xBVkUJKCAgIDUxMikKLS8qCi0gKiBwaWRmaWx0ZXIKLSAqIGl0IGlzIG5vdCBhIGhhcmR3YXJlIHBpZGZpbHRlciBidXQgYSBmaWx0ZXIgd2hpY2ggZHJvcHMgYWxsIHBpZHMKLSAqIGV4Y2VwdCB0aGUgb25lcyBzZXQuIFdoZW4gY29ubmVjdGVkIHRvIFVTQjEuMSBiYW5kd2lkdGggdGhpcyBpcyBpbXBvcnRhbnQuCi0gKiBEaUIzMDAwUC9NLUMgY2FuIGZpbHRlciB1cCB0byAzMiBQSURzCi0gKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19GSVJTVF9QSUQJCQkoICAgMjEyKQotI2RlZmluZSBESUIzMDAwTUNfTlVNX1BJRFMJCQkJKCAgICAzMikKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX09VVE1PREUJCQkoICAgMjQ0KQotI2RlZmluZSBESUIzMDAwTUNfT01fUEFSQUxMRUxfR0FURURfQ0xLCSggICAgIDApCi0jZGVmaW5lIERJQjMwMDBNQ19PTV9QQVJfQ09OVF9DTEsJCSgxIDw8IDExKQotI2RlZmluZSBESUIzMDAwTUNfT01fU0VSSUFMCQkJCSgyIDw8IDExKQotI2RlZmluZSBESUIzMDAwTUNfT01fRElWT1VUX09OCQkJKDQgPDwgMTEpCi0jZGVmaW5lIERJQjMwMDBNQ19PTV9TTEFWRQkJCQkoRElCMzAwME1DX09NX0RJVk9VVF9PTiB8IERJQjMwMDBNQ19PTV9QQVJfQ09OVF9DTEspCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19SRl9QT1dFUgkJCSggICAzOTIpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19GRlRfUE9TSVRJT04JCSggICA0MDcpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19ERFNfRlJFUV9NU0IJCSggICA0MTQpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfRERTX0ZSRVFfTFNCCQkoICAgNDE1KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVElNSU5HX09GRlNfTVNCCSggICA0MTYpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVElNSU5HX09GRlNfTFNCCSggICA0MTcpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19UVU5JTkdfUEFSTQkJKCAgIDQ1OCkKLSNkZWZpbmUgRElCMzAwME1DX1RQX1FBTSh2KQkJCQkoKHYgPj4gMTMpICYgMHgwMykKLSNkZWZpbmUgRElCMzAwME1DX1RQX0hSQ0godikJCQkoKHYgPj4gMTIpICYgMHgwMSkKLSNkZWZpbmUgRElCMzAwME1DX1RQX0FMUEhBKHYpCQkJKCh2ID4+IDkpICYgMHgwNykKLSNkZWZpbmUgRElCMzAwME1DX1RQX0ZGVCh2KQkJCQkoKHYgPj4gOCkgJiAweDAxKQotI2RlZmluZSBESUIzMDAwTUNfVFBfRkVDX0NSX0hQKHYpCQkoKHYgPj4gNSkgJiAweDA3KQotI2RlZmluZSBESUIzMDAwTUNfVFBfRkVDX0NSX0xQKHYpCQkoKHYgPj4gMikgJiAweDA3KQotI2RlZmluZSBESUIzMDAwTUNfVFBfR1VBUkQodikJCQkodiAmIDB4MDMpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19TSUdOQUxfTk9JU0VfTVNCCSggICA0ODMpCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfU0lHTkFMX05PSVNFX0xTQgkoICAgNDg0KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfTUVSCQkJCSggICA0ODUpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19CRVJfTVNCCQkJKCAgIDUwMCkKLSNkZWZpbmUgRElCMzAwME1DX1JFR19CRVJfTFNCCQkJKCAgIDUwMSkKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1BBQ0tFVF9FUlJPUlMJCSggICA1MDMpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19QQUNLRVRfRVJST1JfQ09VTlQJKCAgIDUwNikKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0xPQ0tfNTA3CQkJKCAgIDUwNykKLSNkZWZpbmUgRElCMzAwME1DX0xPQ0tfNTA3CQkJCSgweDAwMDIpIC8vID8gbmFtZSBjb3JyZWN0ID8KLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0xPQ0tJTkcJCQkoICAgNTA5KQotI2RlZmluZSBESUIzMDAwTUNfQUdDX0xPQ0sodikJCQkodiAmIDB4ODAwMCkKLSNkZWZpbmUgRElCMzAwME1DX0NBUlJJRVJfTE9DSyh2KQkJKHYgJiAweDIwMDApCi0jZGVmaW5lIERJQjMwMDBNQ19NUEVHX1NZTkNfTE9DSyh2KQkJKHYgJiAweDAwODApCi0jZGVmaW5lIERJQjMwMDBNQ19NUEVHX0RBVEFfTE9DSyh2KQkJKHYgJiAweDAwNDApCi0jZGVmaW5lIERJQjMwMDBNQ19UUFNfTE9DSyh2KQkJCSh2ICYgMHgwMDA0KQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfQVNfSVJRCQkJKCAgIDUxMSkKLSNkZWZpbmUgRElCMzAwME1DX0FTX0lSUV9TVUNDRVNTCQkoMSA8PCAxKQotI2RlZmluZSBESUIzMDAwTUNfQVNfSVJRX0ZBSUwJCQkoICAgICAxKQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfVFVORVIJCQkJKCAgIDc2OSkKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1JTVF9JMkNfQUREUgkJKCAgMTAyNCkKLSNkZWZpbmUgRElCMzAwME1DX0RFTU9EX0FERFJfT04JCQkoICAgICAxKQotI2RlZmluZSBESUIzMDAwTUNfREVNT0RfQUREUihhKQkJCSgoYSA8PCA0KSAmIDB4MDNGMCkKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX1JFU1RBUlQJCQkoICAxMDI3KQotI2RlZmluZSBESUIzMDAwTUNfUkVTVEFSVF9PRkYJCQkoMHgwMDAwKQotI2RlZmluZSBESUIzMDAwTUNfUkVTVEFSVF9BR0MJCQkoMHgwODAwKQotI2RlZmluZSBESUIzMDAwTUNfUkVTVEFSVF9DT05GSUcJCSgweDgwMDApCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19SRVNUQVJUX1ZJVAkJKCAgMTAyOCkKLSNkZWZpbmUgRElCMzAwME1DX1JFU1RBUlRfVklUX09GRgkJKCAgICAgMCkKLSNkZWZpbmUgRElCMzAwME1DX1JFU1RBUlRfVklUX09OCQkoICAgICAxKQotCi0jZGVmaW5lIERJQjMwMDBNQ19SRUdfQ0xLX0NGR18xCQkJKCAgMTAzMSkKLSNkZWZpbmUgRElCMzAwME1DX0NMS19DRkdfMV9QT1dFUl9VUAkoICAgICAwKQotI2RlZmluZSBESUIzMDAwTUNfQ0xLX0NGR18xX1BPV0VSX0RPV04JKDB4ZmZmZikKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0NMS19DRkdfMgkJCSggIDEwMzIpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzJfUFVQX0ZJWEVECSgweDAxMmMpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzJfUFVQX1BPUlQJKDB4MDEwNCkKLSNkZWZpbmUgRElCMzAwME1DX0NMS19DRkdfMl9QVVBfTU9CSUxFICAoMHgwMDAwKQotI2RlZmluZSBESUIzMDAwTUNfQ0xLX0NGR18yX1BPV0VSX0RPV04JKDB4ZmZmZikKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0NMS19DRkdfMwkJCSggIDEwMzMpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzNfUE9XRVJfVVAJKCAgICAgMCkKLSNkZWZpbmUgRElCMzAwME1DX0NMS19DRkdfM19QT1dFUl9ET1dOCSgweGZmZjUpCi0KLSNkZWZpbmUgRElCMzAwME1DX1JFR19DTEtfQ0ZHXzcJCQkoICAxMDM3KQotI2RlZmluZSBESUIzMDAwTUNfQ0xLX0NGR183X0lOSVQJCSggMTI1OTIpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzdfUE9XRVJfVVAJKH4weDAwMDMpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzdfUFdSX0RPV04JKDB4MDAwMykKLSNkZWZpbmUgRElCMzAwME1DX0NMS19DRkdfN19ESVZfSU5fT0ZGCSgxIDw8IDgpCi0KLS8qIHdhcyBjb21tZW50ZWQgb3V0ID8/PyAqLwotI2RlZmluZSBESUIzMDAwTUNfUkVHX0NMS19DRkdfOAkJCSggIDEwMzgpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzhfUE9XRVJfVVAJKDB4MTYwYykKLQotI2RlZmluZSBESUIzMDAwTUNfUkVHX0NMS19DRkdfOQkJCSggIDEwMzkpCi0jZGVmaW5lIERJQjMwMDBNQ19DTEtfQ0ZHXzlfUE9XRVJfVVAJKCAgICAgMCkKLQotLyogYWxzbyBjbG9jayA/Pz8gKi8KLSNkZWZpbmUgRElCMzAwME1DX1JFR19FTEVDX09VVAkJCSggIDEwNDApCi0jZGVmaW5lIERJQjMwMDBNQ19FTEVDX09VVF9ISUdIX1oJCSggICAgIDApCi0jZGVmaW5lIERJQjMwMDBNQ19FTEVDX09VVF9ESVZfT1VUX09OCSggICAgIDEpCi0jZGVmaW5lIERJQjMwMDBNQ19FTEVDX09VVF9TTEFWRQkJKCAgICAgMykKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExOGM4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uYwpAQCAtMCwwICsxLDE1MiBAQAorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKKworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJ0dXJuIG9uIGRlYnVnZ2luZyAoZGVmYXVsdDogMCkiKTsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7IHByaW50ayhLRVJOX0RFQlVHICJEaUJYMDAwOiAiKTsgcHJpbnRrKGFyZ3MpOyB9IH0gd2hpbGUgKDApCisKK3N0YXRpYyBpbnQgZGlieDAwMF93cml0ZV93b3JkKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTE2IHJlZywgdTE2IHZhbCkKK3sKKwl1OCBiWzRdID0geworCQkocmVnID4+IDgpICYgMHhmZiwgcmVnICYgMHhmZiwKKwkJKHZhbCA+PiA4KSAmIDB4ZmYsIHZhbCAmIDB4ZmYsCisJfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gbXN0LT5pMmNfYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGIsIC5sZW4gPSA0CisJfTsKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKG1zdC0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEgPyAtRVJFTU9URUlPIDogMDsKK30KKworCitzdGF0aWMgaW50IGRpYngwMDBfaTJjX3NlbGVjdF9pbnRlcmZhY2Uoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LCBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpbnRmKQoreworCWlmIChtc3QtPmRldmljZV9yZXYgPiBESUIzMDAwTUMgJiYgbXN0LT5zZWxlY3RlZF9pbnRlcmZhY2UgIT0gaW50ZikgeworCQlkcHJpbnRrKCJzZWxlY3RpbmcgaW50ZXJmYWNlOiAlZFxuIixpbnRmKTsKKwkJbXN0LT5zZWxlY3RlZF9pbnRlcmZhY2UgPSBpbnRmOworCQlyZXR1cm4gZGlieDAwMF93cml0ZV93b3JkKG1zdCwgbXN0LT5iYXNlX3JlZyArIDQsIGludGYpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkaWJ4MDAwX2kyY19nYXRlX2N0cmwoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LCB1OCB0eFs0XSwgdTggYWRkciwgaW50IG9ub2ZmKQoreworCXUxNiB2YWw7CisKKworCWlmIChvbm9mZikKKwkJdmFsID0gYWRkciA8PCA4OyAvLyBiaXQgNyA9IHVzZSBtYXN0ZXIgb3Igbm90LCBpZiAwLCB0aGUgZ2F0ZSBpcyBvcGVuCisJZWxzZQorCQl2YWwgPSAxIDw8IDc7CisKKwlpZiAobXN0LT5kZXZpY2VfcmV2ID4gRElCNzAwMCkKKwkJdmFsIDw8PSAxOworCisJdHhbMF0gPSAoKChtc3QtPmJhc2VfcmVnICsgMSkgPj4gOCkgJiAweGZmKTsKKwl0eFsxXSA9ICggKG1zdC0+YmFzZV9yZWcgKyAxKSAgICAgICAmIDB4ZmYpOworCXR4WzJdID0gdmFsID4+IDg7CisJdHhbM10gPSB2YWwgJiAweGZmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1MzIgZGlieDAwMF9pMmNfZnVuYyhzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQzsKK30KKworc3RhdGljIGludCBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLCBpbnQgbnVtKQoreworCXN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCBpMmNfbXNnIG1bMiArIG51bV07CisJdTggdHhfb3Blbls0XSwgdHhfY2xvc2VbNF07CisKKwltZW1zZXQobSwwLCBzaXplb2Yoc3RydWN0IGkyY19tc2cpICogKDIgKyBudW0pKTsKKworCWRpYngwMDBfaTJjX3NlbGVjdF9pbnRlcmZhY2UobXN0LCBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVIpOworCisJZGlieDAwMF9pMmNfZ2F0ZV9jdHJsKG1zdCwgdHhfb3BlbiwgIG1zZ1swXS5hZGRyLCAxKTsKKwltWzBdLmFkZHIgPSBtc3QtPmkyY19hZGRyOworCW1bMF0uYnVmICA9IHR4X29wZW47CisJbVswXS5sZW4gID0gNDsKKworCW1lbWNweSgmbVsxXSwgbXNnLCBzaXplb2Yoc3RydWN0IGkyY19tc2cpICogbnVtKTsKKworCWRpYngwMDBfaTJjX2dhdGVfY3RybChtc3QsIHR4X2Nsb3NlLCAwLCAwKTsKKwltW251bSsxXS5hZGRyID0gbXN0LT5pMmNfYWRkcjsKKwltW251bSsxXS5idWYgID0gdHhfY2xvc2U7CisJbVtudW0rMV0ubGVuICA9IDQ7CisKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKG1zdC0+aTJjX2FkYXAsIG0sIDIrbnVtKSA9PSAyICsgbnVtID8gbnVtIDogLUVJTzsKK30KKworc3RhdGljIHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRpYngwMDBfaTJjX2dhdGVkX3R1bmVyX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl94ZmVyLAorCS5mdW5jdGlvbmFsaXR5ID0gZGlieDAwMF9pMmNfZnVuYywKK307CisKK3N0cnVjdCBpMmNfYWRhcHRlciAqIGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaW50ZiwgaW50IGdhdGluZykKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyA9IE5VTEw7CisKKwlzd2l0Y2ggKGludGYpIHsKKwkJY2FzZSBESUJYMDAwX0kyQ19JTlRFUkZBQ0VfVFVORVI6CisJCQlpZiAoZ2F0aW5nKQorCQkJCWkyYyA9ICZtc3QtPmdhdGVkX3R1bmVyX2kyY19hZGFwOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9FUlIgIkRpQlgwMDA6IGluY29ycmVjdCBJMkMgaW50ZXJmYWNlIHNlbGVjdGVkXG4iKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBpMmM7Cit9CitFWFBPUlRfU1lNQk9MKGRpYngwMDBfZ2V0X2kyY19hZGFwdGVyKTsKKworc3RhdGljIGludCBpMmNfYWRhcHRlcl9pbml0KHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHN0cnVjdCBpMmNfYWxnb3JpdGhtICphbGdvLCBjb25zdCBjaGFyIG5hbWVbSTJDX05BTUVfU0laRV0sIHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCkKK3sKKwlzdHJuY3B5KGkyY19hZGFwLT5uYW1lLCBuYW1lLCBJMkNfTkFNRV9TSVpFKTsKKwlpMmNfYWRhcC0+Y2xhc3MgICAgID0gSTJDX0NMQVNTX1RWX0RJR0lUQUwsCisJaTJjX2FkYXAtPmFsZ28gICAgICA9IGFsZ287CisJaTJjX2FkYXAtPmFsZ29fZGF0YSA9IE5VTEw7CisJaTJjX3NldF9hZGFwZGF0YShpMmNfYWRhcCwgbXN0KTsKKwlpZiAoaTJjX2FkZF9hZGFwdGVyKGkyY19hZGFwKSA8IDApCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCitpbnQgZGlieDAwMF9pbml0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0LCB1MTYgZGV2aWNlX3Jldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIpCit7CisJdTggdHhbNF07CisJc3RydWN0IGkyY19tc2cgbSA9IHsgLmFkZHIgPSBpMmNfYWRkciA+PiAxLCAuYnVmID0gdHgsIC5sZW4gPSA0IH07CisKKwltc3QtPmRldmljZV9yZXYgPSBkZXZpY2VfcmV2OworCW1zdC0+aTJjX2FkYXAgICA9IGkyY19hZGFwOworCW1zdC0+aTJjX2FkZHIgICA9IGkyY19hZGRyID4+IDE7CisKKwlpZiAoZGV2aWNlX3JldiA9PSBESUI3MDAwUCkKKwkJbXN0LT5iYXNlX3JlZyA9IDEwMjQ7CisJZWxzZQorCQltc3QtPmJhc2VfcmVnID0gNzY4OworCisgICAgaWYgKGkyY19hZGFwdGVyX2luaXQoJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXAsICZkaWJ4MDAwX2kyY19nYXRlZF90dW5lcl9hbGdvLCAiRGlCWDAwMCB0dW5lciBJMkMgYnVzIiwgbXN0KSAhPSAwKQorCQlwcmludGsoS0VSTl9FUlIgIkRpQlgwMDA6IGNvdWxkIG5vdCBpbml0aWFsaXplIHRoZSB0dW5lciBpMmNfYWRhcHRlclxuIik7CisKKwkvKiBpbml0aWFsaXplIHRoZSBpMmMtbWFzdGVyIGJ5IGNsb3NpbmcgdGhlIGdhdGUgKi8KKwlkaWJ4MDAwX2kyY19nYXRlX2N0cmwobXN0LCB0eCwgMCwgMCk7CisKKwlyZXR1cm4gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCAmbSwgMSkgPT0gMTsKK30KK0VYUE9SVF9TWU1CT0woZGlieDAwMF9pbml0X2kyY19tYXN0ZXIpOworCit2b2lkIGRpYngwMDBfZXhpdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCkKK3sKKwlpMmNfZGVsX2FkYXB0ZXIoJm1zdC0+Z2F0ZWRfdHVuZXJfaTJjX2FkYXApOworfQorRVhQT1JUX1NZTUJPTChkaWJ4MDAwX2V4aXRfaTJjX21hc3Rlcik7CisKK01PRFVMRV9BVVRIT1IoIlBhdHJpY2sgQm9ldHRjaGVyIDxwYm9ldHRjaGVyQGRpYmNvbS5mcj4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29tbW9uIGZ1bmN0aW9uIHRoZSBEaUJjb20gZGVtb2R1bGF0b3IgZmFtaWx5Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWJ4MDAwX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJiMGM2NWYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGlieDAwMF9jb21tb24uaApAQCAtMCwwICsxLDE2NiBAQAorI2lmbmRlZiBESUJYMDAwX0NPTU1PTl9ICisjZGVmaW5lIERJQlgwMDBfQ09NTU9OX0gKKworZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgeworCURJQlgwMDBfSTJDX0lOVEVSRkFDRV9UVU5FUiAgICA9IDAsCisJRElCWDAwMF9JMkNfSU5URVJGQUNFX0dQSU9fMV8yID0gMSwKKwlESUJYMDAwX0kyQ19JTlRFUkZBQ0VfR1BJT18zXzQgPSAyCit9OworCitzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyIHsKKyNkZWZpbmUgRElCMzAwME1DIDEKKyNkZWZpbmUgRElCNzAwMCAgIDIKKyNkZWZpbmUgRElCNzAwMFAgIDExCisjZGVmaW5lIERJQjcwMDBNQyAxMgorCXUxNiBkZXZpY2VfcmV2OworCisJZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2Ugc2VsZWN0ZWRfaW50ZXJmYWNlOworCisvLwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgIHR1bmVyX2kyY19hZGFwOworCXN0cnVjdCBpMmNfYWRhcHRlciAgZ2F0ZWRfdHVuZXJfaTJjX2FkYXA7CisKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCXU4ICAgICAgICAgICAgICAgICAgaTJjX2FkZHI7CisKKwl1MTYgYmFzZV9yZWc7Cit9OworCitleHRlcm4gaW50IGRpYngwMDBfaW5pdF9pMmNfbWFzdGVyKHN0cnVjdCBkaWJ4MDAwX2kyY19tYXN0ZXIgKm1zdCwgdTE2IGRldmljZV9yZXYsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsIHU4IGkyY19hZGRyKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWJ4MDAwX2dldF9pMmNfYWRhcHRlcihzdHJ1Y3QgZGlieDAwMF9pMmNfbWFzdGVyICptc3QsIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGludGYsIGludCBnYXRpbmcpOworZXh0ZXJuIHZvaWQgZGlieDAwMF9leGl0X2kyY19tYXN0ZXIoc3RydWN0IGRpYngwMDBfaTJjX21hc3RlciAqbXN0KTsKKworI2RlZmluZSBCQU5EX0xCQU5EIDB4MDEKKyNkZWZpbmUgQkFORF9VSEYgICAweDAyCisjZGVmaW5lIEJBTkRfVkhGICAgMHgwNAorCitzdHJ1Y3QgZGlieDAwMF9hZ2NfY29uZmlnIHsKKwkvKiBkZWZpbmVzIHRoZSBjYXBhYmlsaXRpZXMgb2YgdGhpcyBBR0Mtc2V0dGluZyAtIHVzaW5nIHRoZSBCQU5EXy1kZWZpbmVzKi8KKwl1OCAgYmFuZF9jYXBzOworCisJdTE2IHNldHVwOworCisJdTE2IGludl9nYWluOworCXUxNiB0aW1lX3N0YWJpbGl6OworCisJdTggIGFscGhhX2xldmVsOworCXUxNiB0aGxvY2s7CisKKwl1OCAgd2JkX2ludjsKKwl1MTYgd2JkX3JlZjsKKwl1OCB3YmRfc2VsOworCXU4IHdiZF9hbHBoYTsKKworCXUxNiBhZ2MxX21heDsKKwl1MTYgYWdjMV9taW47CisJdTE2IGFnYzJfbWF4OworCXUxNiBhZ2MyX21pbjsKKworCXU4IGFnYzFfcHQxOworCXU4IGFnYzFfcHQyOworCXU4IGFnYzFfcHQzOworCisJdTggYWdjMV9zbG9wZTE7CisJdTggYWdjMV9zbG9wZTI7CisKKwl1OCBhZ2MyX3B0MTsKKwl1OCBhZ2MyX3B0MjsKKworCXU4IGFnYzJfc2xvcGUxOworCXU4IGFnYzJfc2xvcGUyOworCisJdTggYWxwaGFfbWFudDsKKwl1OCBhbHBoYV9leHA7CisKKwl1OCBiZXRhX21hbnQ7CisJdTggYmV0YV9leHA7CisKKwl1OCBwZXJmb3JtX2FnY19zb2Z0c3BsaXQ7CisKKwlzdHJ1Y3QgeworCQl1MTYgbWluOworCQl1MTYgbWF4OworCQl1MTYgbWluX3RocmVzOworCQl1MTYgbWF4X3RocmVzOworCX0gc3BsaXQ7Cit9OworCitzdHJ1Y3QgZGlieDAwMF9iYW5kd2lkdGhfY29uZmlnIHsKKwl1MzIgICBpbnRlcm5hbDsKKwl1MzIgICBzYW1wbGluZzsKKworCXU4IHBsbF9wcmVkaXY7CisJdTggcGxsX3JhdGlvOworCXU4IHBsbF9yYW5nZTsKKwl1OCBwbGxfcmVzZXQ7CisJdTggcGxsX2J5cGFzczsKKworCXU4IGVuYWJsZV9yZWZkaXY7CisJdTggYnlwY2xrX2RpdjsKKwl1OCBJT19DTEtfZW5fY29yZTsKKwl1OCBBRENsa1NyYzsKKwl1OCBtb2R1bG87CisKKwl1MTYgc2FkX2NmZzsKKworCXUzMiBpZnJlcTsKKwl1MzIgdGltZjsKK307CisKK2VudW0gZGlieDAwMF9hZGNfc3RhdGVzIHsKKwlESUJYMDAwX1NMT1dfQURDX09OID0gMCwKKwlESUJYMDAwX1NMT1dfQURDX09GRiwKKwlESUJYMDAwX0FEQ19PTiwKKwlESUJYMDAwX0FEQ19PRkYsCisJRElCWDAwMF9WQkdfRU5BQkxFLAorCURJQlgwMDBfVkJHX0RJU0FCTEUsCit9OworCisjZGVmaW5lIEJXX0lOREVYX1RPX0tIWih2KSAoICh2KSA9PSBCQU5EV0lEVEhfOF9NSFogID8gODAwMCA6IFwKKwkJCSAgICAgKHYpID09IEJBTkRXSURUSF83X01IWiAgPyA3MDAwIDogXAorCQkJICAgICAodikgPT0gQkFORFdJRFRIXzZfTUhaICA/IDYwMDAgOiA4MDAwICkKKworLyogQ2hpcCBvdXRwdXQgbW9kZS4gKi8KKyNkZWZpbmUgT1VUTU9ERV9ISUdIX1ogICAgICAgICAgICAgICAgICAgICAgMAorI2RlZmluZSBPVVRNT0RFX01QRUcyX1BBUl9HQVRFRF9DTEsgICAgICAgICAxCisjZGVmaW5lIE9VVE1PREVfTVBFRzJfUEFSX0NPTlRfQ0xLICAgICAgICAgIDIKKyNkZWZpbmUgT1VUTU9ERV9NUEVHMl9TRVJJQUwgICAgICAgICAgICAgICAgNworI2RlZmluZSBPVVRNT0RFX0RJVkVSU0lUWSAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIE9VVE1PREVfTVBFRzJfRklGTyAgICAgICAgICAgICAgICAgIDUKKworLyogSSBob3BlIEkgY2FuIGdldCByaWQgb2YgdGhlIGZvbGxvd2luZyBrbHVkZ2UgaW4gdGhlIG5lYXIgZnV0dXJlICovCitzdHJ1Y3QgZGlieDAwMF9vZmRtX2NoYW5uZWwgeworCXU4ICBCdzsKKwlzMTYgbmZmdDsKKwlzMTYgZ3VhcmQ7CisJczE2IG5xYW07CisJczE2IHZpdF9ocmNoOworCXMxNiB2aXRfc2VsZWN0X2hwOworCXMxNiB2aXRfYWxwaGE7CisJczE2IHZpdF9jb2RlX3JhdGVfaHA7CisJczE2IHZpdF9jb2RlX3JhdGVfbHA7Cit9OworCisjZGVmaW5lIEZFUDJESUIoZmVwLGNoKSBcCisJKGNoKS0+QncgICAgICAgICAgICAgICA9IChmZXApLT51Lm9mZG0uYmFuZHdpZHRoOyBcCisJKGNoKS0+bmZmdCAgICAgICAgICAgICA9IChmZXApLT51Lm9mZG0udHJhbnNtaXNzaW9uX21vZGUgPT0gVFJBTlNNSVNTSU9OX01PREVfQVVUTyA/IC0xIDogKGZlcCktPnUub2ZkbS50cmFuc21pc3Npb25fbW9kZTsgXAorCShjaCktPmd1YXJkICAgICAgICAgICAgPSAoZmVwKS0+dS5vZmRtLmd1YXJkX2ludGVydmFsID09IEdVQVJEX0lOVEVSVkFMX0FVVE8gPyAtMSA6IChmZXApLT51Lm9mZG0uZ3VhcmRfaW50ZXJ2YWw7IFwKKwkoY2gpLT5ucWFtICAgICAgICAgICAgID0gKGZlcCktPnUub2ZkbS5jb25zdGVsbGF0aW9uID09IFFBTV9BVVRPID8gLTEgOiAoZmVwKS0+dS5vZmRtLmNvbnN0ZWxsYXRpb24gPT0gUUFNXzY0ID8gMiA6IChmZXApLT51Lm9mZG0uY29uc3RlbGxhdGlvbjsgXAorCShjaCktPnZpdF9ocmNoICAgICAgICAgPSAwOyAvKiBsaW51eC1kdmIgaXMgbm90IHByZXBhcmVkIGZvciBISUVSQVJDSElDQUwgVFJBTlNNSVNTSU9OICovIFwKKwkoY2gpLT52aXRfc2VsZWN0X2hwICAgID0gMTsgXAorCShjaCktPnZpdF9hbHBoYSAgICAgICAgPSAxOyBcCisJKGNoKS0+dml0X2NvZGVfcmF0ZV9ocCA9IChmZXApLT51Lm9mZG0uY29kZV9yYXRlX0hQID09IEZFQ19BVVRPID8gLTEgOiAoZmVwKS0+dS5vZmRtLmNvZGVfcmF0ZV9IUDsgXAorCShjaCktPnZpdF9jb2RlX3JhdGVfbHAgPSAoZmVwKS0+dS5vZmRtLmNvZGVfcmF0ZV9MUCA9PSBGRUNfQVVUTyA/IC0xIDogKGZlcCktPnUub2ZkbS5jb2RlX3JhdGVfTFA7CisKKyNkZWZpbmUgSU5JVF9PRkRNX0NIQU5ORUwoY2gpIGRvIHtcCisJKGNoKS0+QncgICAgICAgICAgICAgICA9IDA7ICBcCisJKGNoKS0+bmZmdCAgICAgICAgICAgICA9IC0xOyBcCisJKGNoKS0+Z3VhcmQgICAgICAgICAgICA9IC0xOyBcCisJKGNoKS0+bnFhbSAgICAgICAgICAgICA9IC0xOyBcCisJKGNoKS0+dml0X2hyY2ggICAgICAgICA9IC0xOyBcCisJKGNoKS0+dml0X3NlbGVjdF9ocCAgICA9IC0xOyBcCisJKGNoKS0+dml0X2FscGhhICAgICAgICA9IC0xOyBcCisJKGNoKS0+dml0X2NvZGVfcmF0ZV9ocCA9IC0xOyBcCisJKGNoKS0+dml0X2NvZGVfcmF0ZV9scCA9IC0xOyBcCit9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5jCmluZGV4IDJiZTMzZjIuLmI3ZTcxMDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuYwpAQCAtNDkzLDYgKzQ5Myw5IEBACiAJaW50IGk7CiAJaW50IHJlc3VsdDsKIAorCWlmIChwcml2LT5pMmMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKIAlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+cGxsX2Rlc2MtPmNvdW50OyBpKyspIHsKIAkJaWYgKHByaXYtPnBsbF9kZXNjLT5lbnRyaWVzW2ldLmxpbWl0ID09IDApCiAJCQlicmVhazsKQEAgLTYxMSw3ICs2MTQsNyBAQAogCS5nZXRfYmFuZHdpZHRoID0gZHZiX3BsbF9nZXRfYmFuZHdpZHRoLAogfTsKIAotaW50IGR2Yl9wbGxfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgcGxsX2FkZHIsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX3BsbF9kZXNjICpkZXNjKQorc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX3BsbF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBwbGxfYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBkdmJfcGxsX2Rlc2MgKmRlc2MpCiB7CiAJdTggYjEgW10gPSB7IDAgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcGxsX2FkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjEsIC5sZW4gPSAxIH07CkBAIC02MjQsMTQgKzYyNywxNCBAQAogCiAJCXJldCA9IGkyY190cmFuc2ZlciAoaTJjLCAmbXNnLCAxKTsKIAkJaWYgKHJldCAhPSAxKQotCQkJcmV0dXJuIC0xOworCQkJcmV0dXJuIE5VTEw7CiAJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCQkgICAgIGZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CiAJfQogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkdmJfcGxsX3ByaXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAocHJpdiA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmV0dXJuIE5VTEw7CiAKIAlwcml2LT5wbGxfaTJjX2FkZHJlc3MgPSBwbGxfYWRkcjsKIAlwcml2LT5pMmMgPSBpMmM7CkBAIC02NDMsNyArNjQ2LDcgQEAKIAlmZS0+b3BzLnR1bmVyX29wcy5pbmZvLmZyZXF1ZW5jeV9taW4gPSBkZXNjLT5tYXg7CiAKIAlmZS0+dHVuZXJfcHJpdiA9IHByaXY7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGZlOwogfQogRVhQT1JUX1NZTUJPTChkdmJfcGxsX2F0dGFjaCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiLXBsbC5oCmluZGV4IDY2MzYxY2QuLmVkNWFjNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmItcGxsLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yi1wbGwuaApAQCAtNTcsOCArNTcsOCBAQAogICogQHBhcmFtIHBsbF9hZGRyIGkyYyBhZGRyZXNzIG9mIHRoZSBQTEwgKGlmIHVzZWQpLgogICogQHBhcmFtIGkyYyBpMmMgYWRhcHRlciB0byB1c2UgKHNldCB0byBOVUxMIGlmIG5vdCB1c2VkKS4KICAqIEBwYXJhbSBkZXNjIGR2Yl9wbGxfZGVzYyB0byB1c2UuCi0gKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywgbm9uemVybyBvbiBmYWlsdXJlLgorICogQHJldHVybiBGcm9udGVuZCBwb2ludGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZQogICovCi1leHRlcm4gaW50IGR2Yl9wbGxfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgcGxsX2FkZHIsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgZHZiX3BsbF9kZXNjICpkZXNjKTsKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfcGxsX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IHBsbF9hZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IGR2Yl9wbGxfZGVzYyAqZGVzYyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pc2w2NDIxLmMKaW5kZXggNThjMzRkYi4uZWYzMTkzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXNsNjQyMS5jCkBAIC00MiwxMiArNDIsMTEgQEAKIAl1OAkJCW92ZXJyaWRlX2FuZDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyYzsKIAl1OAkJCWkyY19hZGRyOwotCXZvaWQJCQkoKnJlbGVhc2VfY2hhaW4pKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIH07CiAKIHN0YXRpYyBpbnQgaXNsNjQyMV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewotCXN0cnVjdCBpc2w2NDIxICppc2w2NDIxID0gKHN0cnVjdCBpc2w2NDIxICopIGZlLT5taXNjX3ByaXY7CisJc3RydWN0IGlzbDY0MjEgKmlzbDY0MjEgPSAoc3RydWN0IGlzbDY0MjEgKikgZmUtPnNlY19wcml2OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSBpc2w2NDIxLT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCQkuYnVmID0gJmlzbDY0MjEtPmNvbmZpZywKIAkJCQkubGVuID0gc2l6ZW9mKGlzbDY0MjEtPmNvbmZpZykgfTsKQEAgLTc1LDcgKzc0LDcgQEAKIAogc3RhdGljIGludCBpc2w2NDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZykKIHsKLQlzdHJ1Y3QgaXNsNjQyMSAqaXNsNjQyMSA9IChzdHJ1Y3QgaXNsNjQyMSAqKSBmZS0+bWlzY19wcml2OworCXN0cnVjdCBpc2w2NDIxICppc2w2NDIxID0gKHN0cnVjdCBpc2w2NDIxICopIGZlLT5zZWNfcHJpdjsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gaXNsNjQyMS0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkJLmJ1ZiA9ICZpc2w2NDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihpc2w2NDIxLT5jb25maWcpIH07CkBAIC05MywzMSArOTIsMjYgQEAKIAogc3RhdGljIHZvaWQgaXNsNjQyMV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQogewotCXN0cnVjdCBpc2w2NDIxICppc2w2NDIxID0gKHN0cnVjdCBpc2w2NDIxICopIGZlLT5taXNjX3ByaXY7Ci0KIAkvKiBwb3dlciBvZmYgKi8KIAlpc2w2NDIxX3NldF92b2x0YWdlKGZlLCBTRUNfVk9MVEFHRV9PRkYpOwogCi0JLyogZnJlZSBkYXRhICYgY2FsbCBuZXh0IHJlbGVhc2Ugcm91dGluZSAqLwotCWZlLT5vcHMucmVsZWFzZSA9IGlzbDY0MjEtPnJlbGVhc2VfY2hhaW47Ci0Ja2ZyZWUoZmUtPm1pc2NfcHJpdik7Ci0JZmUtPm1pc2NfcHJpdiA9IE5VTEw7Ci0JaWYgKGZlLT5vcHMucmVsZWFzZSkKLQkJZmUtPm9wcy5yZWxlYXNlKGZlKTsKKwkvKiBmcmVlICovCisJa2ZyZWUoZmUtPnNlY19wcml2KTsKKwlmZS0+c2VjX3ByaXYgPSBOVUxMOwogfQogCi1pbnQgaXNsNjQyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBpMmNfYWRkciwKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmlzbDY0MjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggaTJjX2FkZHIsCiAJCSAgIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpCiB7CiAJc3RydWN0IGlzbDY0MjEgKmlzbDY0MjEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaXNsNjQyMSksIEdGUF9LRVJORUwpOwogCWlmICghaXNsNjQyMSkKLQkJcmV0dXJuIC1FTk9NRU07CisJCXJldHVybiBOVUxMOwogCiAJLyogZGVmYXVsdCBjb25maWd1cmF0aW9uICovCiAJaXNsNjQyMS0+Y29uZmlnID0gSVNMNjQyMV9JU0VMMTsKIAlpc2w2NDIxLT5pMmMgPSBpMmM7CiAJaXNsNjQyMS0+aTJjX2FkZHIgPSBpMmNfYWRkcjsKLQlmZS0+bWlzY19wcml2ID0gaXNsNjQyMTsKKwlmZS0+c2VjX3ByaXYgPSBpc2w2NDIxOwogCiAJLyogYml0cyB3aGljaCBzaG91bGQgYmUgZm9yY2VkIHRvICcxJyAqLwogCWlzbDY0MjEtPm92ZXJyaWRlX29yID0gb3ZlcnJpZGVfc2V0OwpAQCAtMTI4LDE5ICsxMjIsMTcgQEAKIAkvKiBkZXRlY3QgaWYgaXQgaXMgcHJlc2VudCBvciBub3QgKi8KIAlpZiAoaXNsNjQyMV9zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfT0ZGKSkgewogCQlrZnJlZShpc2w2NDIxKTsKLQkJZmUtPm1pc2NfcHJpdiA9IE5VTEw7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gTlVMTDsKIAl9CiAKIAkvKiBpbnN0YWxsIHJlbGVhc2UgY2FsbGJhY2sgKi8KLQlpc2w2NDIxLT5yZWxlYXNlX2NoYWluID0gZmUtPm9wcy5yZWxlYXNlOwotCWZlLT5vcHMucmVsZWFzZSA9IGlzbDY0MjFfcmVsZWFzZTsKKwlmZS0+b3BzLnJlbGVhc2Vfc2VjID0gaXNsNjQyMV9yZWxlYXNlOwogCiAJLyogb3ZlcnJpZGUgZnJvbnRlbmQgb3BzICovCiAJZmUtPm9wcy5zZXRfdm9sdGFnZSA9IGlzbDY0MjFfc2V0X3ZvbHRhZ2U7CiAJZmUtPm9wcy5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGlzbDY0MjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmU7CiB9CiBFWFBPUlRfU1lNQk9MKGlzbDY0MjFfYXR0YWNoKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pc2w2NDIxLmgKaW5kZXggNjc1ZjgwYS4uMTkxNmUzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2lzbDY0MjEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXNsNjQyMS5oCkBAIC0zOSw4ICszOSwxNyBAQAogI2RlZmluZSBJU0w2NDIxX0lTRUwxCTB4MjAKICNkZWZpbmUgSVNMNjQyMV9EQ0wJMHg0MAogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0lTTDY0MjEpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9JU0w2NDIxX01PRFVMRSkKIC8qIG92ZXJyaWRlX3NldCBhbmQgb3ZlcnJpZGVfY2xlYXIgY29udHJvbCB3aGljaCBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAoYWJvdmUpIHRvIGFsd2F5cyBzZXQgJiBjbGVhciAqLwotZXh0ZXJuIGludCBpc2w2NDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IGkyY19hZGRyLAorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmlzbDY0MjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggaTJjX2FkZHIsCiAJCQkgIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqaXNsNjQyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBpMmNfYWRkciwKKwkJCQkJCSAgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9JU0w2NDIxCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2w2NDc4MS5oCmluZGV4IDgzYjhiYzIuLjIxYmE0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sNjQ3ODEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbDY0NzgxLmgKQEAgLTMxLDggKzMxLDE2IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIH07CiAKLQorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MNjQ3ODEpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9MNjQ3ODFfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGw2NDc4MV9hdHRhY2goY29uc3Qgc3RydWN0IGw2NDc4MV9jb25maWcqIGNvbmZpZywKIAkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBsNjQ3ODFfYXR0YWNoKGNvbnN0IHN0cnVjdCBsNjQ3ODFfY29uZmlnKiBjb25maWcsCisJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfTDY0NzgxCiAKICNlbmRpZiAvLyBMNjQ3ODFfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzB4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaAppbmRleCBiYWQ5MDNjLi4zZjk2YjQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbGdkdDMzMHguaApAQCAtNTIsOCArNTIsMTcgQEAKIAlpbnQgY2xvY2tfcG9sYXJpdHlfZmxpcDsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTEdEVDMzMFgpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9MR0RUMzMwWF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbGdkdDMzMHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBsZ2R0MzMweF9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGxnZHQzMzB4X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnKiBjb25maWcsCisJCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9MR0RUMzMwWAogCiAjZW5kaWYgLyogTEdEVDMzMFhfSCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKaW5kZXggZTkzM2VkYy4uMmQyZjU4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwpAQCAtNDAsMTIgKzQwLDExIEBACiAJdTgJCQlvdmVycmlkZV9vcjsKIAl1OAkJCW92ZXJyaWRlX2FuZDsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyYzsKLQl2b2lkCQkJKCpyZWxlYXNlX2NoYWluKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSk7CiB9OwogCiBzdGF0aWMgaW50IGxuYnAyMV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewotCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5taXNjX3ByaXY7CisJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPnNlY19wcml2OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAogCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKQEAgLTczLDcgKzcyLDcgQEAKIAogc3RhdGljIGludCBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGxvbmcgYXJnKQogewotCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5taXNjX3ByaXY7CisJc3RydWN0IGxuYnAyMSAqbG5icDIxID0gKHN0cnVjdCBsbmJwMjEgKikgZmUtPnNlY19wcml2OwogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsJLmFkZHIgPSAweDA4LCAuZmxhZ3MgPSAwLAogCQkJCS5idWYgPSAmbG5icDIxLT5jb25maWcsCiAJCQkJLmxlbiA9IHNpemVvZihsbmJwMjEtPmNvbmZpZykgfTsKQEAgLTkxLDI5ICs5MCwyNCBAQAogCiBzdGF0aWMgdm9pZCBsbmJwMjFfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKLQlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSAoc3RydWN0IGxuYnAyMSAqKSBmZS0+bWlzY19wcml2OwotCiAJLyogTE5CUCBwb3dlciBvZmYgKi8KIAlsbmJwMjFfc2V0X3ZvbHRhZ2UoZmUsIFNFQ19WT0xUQUdFX09GRik7CiAKLQkvKiBmcmVlIGRhdGEgJiBjYWxsIG5leHQgcmVsZWFzZSByb3V0aW5lICovCi0JZmUtPm9wcy5yZWxlYXNlID0gbG5icDIxLT5yZWxlYXNlX2NoYWluOwotCWtmcmVlKGZlLT5taXNjX3ByaXYpOwotCWZlLT5taXNjX3ByaXYgPSBOVUxMOwotCWlmIChmZS0+b3BzLnJlbGVhc2UpCi0JCWZlLT5vcHMucmVsZWFzZShmZSk7CisJLyogZnJlZSBkYXRhICovCisJa2ZyZWUoZmUtPnNlY19wcml2KTsKKwlmZS0+c2VjX3ByaXYgPSBOVUxMOwogfQogCi1pbnQgbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcikKIHsKIAlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbG5icDIxKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFsbmJwMjEpCi0JCXJldHVybiAtRU5PTUVNOworCQlyZXR1cm4gTlVMTDsKIAogCS8qIGRlZmF1bHQgY29uZmlndXJhdGlvbiAqLwogCWxuYnAyMS0+Y29uZmlnID0gTE5CUDIxX0lTRUw7CiAJbG5icDIxLT5pMmMgPSBpMmM7Ci0JZmUtPm1pc2NfcHJpdiA9IGxuYnAyMTsKKwlmZS0+c2VjX3ByaXYgPSBsbmJwMjE7CiAKIAkvKiBiaXRzIHdoaWNoIHNob3VsZCBiZSBmb3JjZWQgdG8gJzEnICovCiAJbG5icDIxLT5vdmVycmlkZV9vciA9IG92ZXJyaWRlX3NldDsKQEAgLTEyNCwxOSArMTE4LDE3IEBACiAJLyogZGV0ZWN0IGlmIGl0IGlzIHByZXNlbnQgb3Igbm90ICovCiAJaWYgKGxuYnAyMV9zZXRfdm9sdGFnZShmZSwgU0VDX1ZPTFRBR0VfT0ZGKSkgewogCQlrZnJlZShsbmJwMjEpOwotCQlmZS0+bWlzY19wcml2ID0gTlVMTDsKLQkJcmV0dXJuIC1FSU87CisJCXJldHVybiBOVUxMOwogCX0KIAogCS8qIGluc3RhbGwgcmVsZWFzZSBjYWxsYmFjayAqLwotCWxuYnAyMS0+cmVsZWFzZV9jaGFpbiA9IGZlLT5vcHMucmVsZWFzZTsKLQlmZS0+b3BzLnJlbGVhc2UgPSBsbmJwMjFfcmVsZWFzZTsKKwlmZS0+b3BzLnJlbGVhc2Vfc2VjID0gbG5icDIxX3JlbGVhc2U7CiAKIAkvKiBvdmVycmlkZSBmcm9udGVuZCBvcHMgKi8KIAlmZS0+b3BzLnNldF92b2x0YWdlID0gbG5icDIxX3NldF92b2x0YWdlOwogCWZlLT5vcHMuZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2UgPSBsbmJwMjFfZW5hYmxlX2hpZ2hfbG5iX3ZvbHRhZ2U7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gZmU7CiB9CiBFWFBPUlRfU1lNQk9MKGxuYnAyMV9hdHRhY2gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKaW5kZXggMDQ3YTRhYi4uMWZlMWRkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaApAQCAtMzksNyArMzksMTUgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMV9NT0RVTEUpCiAvKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2ggc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KLWV4dGVybiBpbnQgbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpOworZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsIHU4IG92ZXJyaWRlX2NsZWFyKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX0xOQlAyMQogCi0jZW5kaWYKKyNlbmRpZiAvLyBfTE5CUDIxX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MDhlYzFiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5jCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogIERyaXZlciBmb3IgTWljcm90dW5lIE1UMjA2MCAiU2luZ2xlIGNoaXAgZHVhbCBjb252ZXJzaW9uIGJyb2FkYmFuZCB0dW5lciIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2IE9saXZpZXIgREFORVQgPG9kYW5ldEBjYXJhbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKy8qIEluIHRoYXQgZmlsZSwgZnJlcXVlbmNpZXMgYXJlIGV4cHJlc3NlZCBpbiBraWxvSGVydHogdG8gYXZvaWQgMzIgYml0cyBvdmVyZmxvd3MgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAibXQyMDYwLmgiCisjaW5jbHVkZSAibXQyMDYwX3ByaXYuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIGRvIHsgaWYgKGRlYnVnKSB7cHJpbnRrKEtFUk5fREVCVUcgIk1UMjA2MDogIiBhcmdzKTsgcHJpbnRrKCJcbiIpOyB9fSB3aGlsZSAoMCkKKworLy8gUmVhZHMgYSBzaW5nbGUgcmVnaXN0ZXIKK3N0YXRpYyBpbnQgbXQyMDYwX3JlYWRyZWcoc3RydWN0IG10MjA2MF9wcml2ICpwcml2LCB1OCByZWcsIHU4ICp2YWwpCit7CisJc3RydWN0IGkyY19tc2cgbXNnWzJdID0geworCQl7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgICAgICAgIC5idWYgPSAmcmVnLCAubGVuID0gMSB9LAorCQl7IC5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gSTJDX01fUkQsIC5idWYgPSB2YWwsICAubGVuID0gMSB9LAorCX07CisKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgbXNnLCAyKSAhPSAyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10MjA2MCBJMkMgcmVhZCBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8vIFdyaXRlcyBhIHNpbmdsZSByZWdpc3Rlcgorc3RhdGljIGludCBtdDIwNjBfd3JpdGVyZWcoc3RydWN0IG10MjA2MF9wcml2ICpwcml2LCB1OCByZWcsIHU4IHZhbCkKK3sKKwl1OCBidWZbMl0gPSB7IHJlZywgdmFsIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHByaXYtPmNmZy0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyCisJfTsKKworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKSAhPSAxKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIm10MjA2MCBJMkMgd3JpdGUgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCisvLyBXcml0ZXMgYSBzZXQgb2YgY29uc2VjdXRpdmUgcmVnaXN0ZXJzCitzdGF0aWMgaW50IG10MjA2MF93cml0ZXJlZ3Moc3RydWN0IG10MjA2MF9wcml2ICpwcml2LHU4ICpidWYsIHU4IGxlbikKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyID0gcHJpdi0+Y2ZnLT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IGxlbgorCX07CisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAibXQyMDYwIEkyQyB3cml0ZSBmYWlsZWQgKGxlbj0laSlcbiIsKGludClsZW4pOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8vIEluaXRpYWxpc2F0aW9uIHNlcXVlbmNlcworLy8gTE5BQkFORD0zLCBOVU0xPTB4M0MsIERJVjE9MHg3NCwgTlVNMj0weDEwODAsIERJVjI9MHg0OQorc3RhdGljIHU4IG10MjA2MF9jb25maWcxW10gPSB7CisJUkVHX0xPMUMxLAorCTB4M0YsCTB4NzQsCTB4MDAsCTB4MDgsCTB4OTMKK307CisKKy8vIEZNQ0c9MiwgR1AyPTAsIEdQMT0wCitzdGF0aWMgdTggbXQyMDYwX2NvbmZpZzJbXSA9IHsKKwlSRUdfTUlTQ19DVFJMLAorCTB4MjAsCTB4MUUsCTB4MzAsCTB4ZmYsCTB4ODAsCTB4ZmYsCTB4MDAsCTB4MmMsCTB4NDIKK307CisKKy8vICBWR0FHPTMsIFYxQ1NFPTEKKworI2lmZGVmICBNVDIwNjBfU1BVUkNIRUNLCisvKiBUaGUgZnVuY3Rpb24gYmVsb3cgY2FsY3VsYXRlcyB0aGUgZnJlcXVlbmN5IG9mZnNldCBiZXR3ZWVuIHRoZSBvdXRwdXQgZnJlcXVlbmN5IGlmMgorIGFuZCB0aGUgY2xvc2VyIGNyb3NzIG1vZHVsYXRpb24gc3ViY2FycmllciBiZXR3ZWVuIGxvMSBhbmQgbG8yIHVwIHRvIHRoZSB0ZW50aCBoYXJtb25pYyAqLworc3RhdGljIGludCBtdDIwNjBfc3B1cmNhbGModTMyIGxvMSx1MzIgbG8yLHUzMiBpZjIpCit7CisJaW50IEksSjsKKwlpbnQgZGlhLGRpYW1pbixkaWZmOworCWRpYW1pbj0xMDAwMDAwOworCWZvciAoSSA9IDE7IEkgPCAxMDsgSSsrKSB7CisJCUogPSAoKDIqSSpsbzEpL2xvMisxKS8yOworCQlkaWZmID0gSSooaW50KWxvMS1KKihpbnQpbG8yOworCQlpZiAoZGlmZiA8IDApIGRpZmY9LWRpZmY7CisJCWRpYSA9IChkaWZmLShpbnQpaWYyKTsKKwkJaWYgKGRpYSA8IDApIGRpYT0tZGlhOworCQlpZiAoZGlhbWluID4gZGlhKSBkaWFtaW49ZGlhOworCX0KKwlyZXR1cm4gZGlhbWluOworfQorCisjZGVmaW5lIEJBTkRXSURUSCA0MDAwIC8vIGtIegorCisvKiBDYWxjdWxhdGVzIHRoZSBmcmVxdWVuY3kgb2Zmc2V0IHRvIGFkZCB0byBhdm9pZCBzcHVycy4gUmV0dXJucyAwIGlmIG5vIG9mZnNldCBpcyBuZWVkZWQgKi8KK3N0YXRpYyBpbnQgbXQyMDYwX3NwdXJjaGVjayh1MzIgbG8xLHUzMiBsbzIsdTMyIGlmMikKK3sKKwl1MzIgU3B1cixTcDEsU3AyOworCWludCBJLEo7CisJST0wOworCUo9MTAwMDsKKworCVNwdXI9bXQyMDYwX3NwdXJjYWxjKGxvMSxsbzIsaWYyKTsKKwlpZiAoU3B1ciA8IEJBTkRXSURUSCkgeworCQkvKiBQb3RlbnRpYWwgc3B1cnMgZGV0ZWN0ZWQgKi8KKwkJZHByaW50aygiU3B1cnMgYmVmb3JlIDogZl9sbzE6ICVkICBmX2xvMjogJWQgIChrSHopIiwKKwkJCShpbnQpbG8xLChpbnQpbG8yKTsKKwkJST0xMDAwOworCQlTcDEgPSBtdDIwNjBfc3B1cmNhbGMobG8xK0ksbG8yK0ksaWYyKTsKKwkJU3AyID0gbXQyMDYwX3NwdXJjYWxjKGxvMS1JLGxvMi1JLGlmMik7CisKKwkJaWYgKFNwMSA8IFNwMikgeworCQkJSj0tSjsgST0tSTsgU3B1cj1TcDI7CisJCX0gZWxzZQorCQkJU3B1cj1TcDE7CisKKwkJd2hpbGUgKFNwdXIgPCBCQU5EV0lEVEgpIHsKKwkJCUkgKz0gSjsKKwkJCVNwdXIgPSBtdDIwNjBfc3B1cmNhbGMobG8xK0ksbG8yK0ksaWYyKTsKKwkJfQorCQlkcHJpbnRrKCJTcHVycyBhZnRlciAgOiBmX2xvMTogJWQgIGZfbG8yOiAlZCAgKGtIeikiLAorCQkJKGludCkobG8xK0kpLChpbnQpKGxvMitJKSk7CisJfQorCXJldHVybiBJOworfQorI2VuZGlmCisKKyNkZWZpbmUgSUYyICAzNjE1MCAgICAgICAvLyBJRjIgZnJlcXVlbmN5ID0gMzYuMTUwIE1IegorI2RlZmluZSBGUkVGIDE2MDAwICAgICAgIC8vIFF1YXJ0eiBvc2NpbGxhdG9yIDE2IE1IegorCitzdGF0aWMgaW50IG10MjA2MF9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgbXQyMDYwX3ByaXYgKnByaXY7CisJaW50IHJldD0wOworCWludCBpPTA7CisJdTMyIGZyZXE7CisJdTggIGxuYWJhbmQ7CisJdTMyIGZfbG8xLGZfbG8yOworCXUzMiBkaXYxLG51bTEsZGl2MixudW0yOworCXU4ICBiWzhdOworCXUzMiBpZjE7CisKKwlwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwlpZjEgPSBwcml2LT5pZjFfZnJlcTsKKwliWzBdID0gUkVHX0xPMUIxOworCWJbMV0gPSAweEZGOworCisJbXQyMDYwX3dyaXRlcmVncyhwcml2LGIsMik7CisKKwlmcmVxID0gcGFyYW1zLT5mcmVxdWVuY3kgLyAxMDAwOyAvLyBIeiAtPiBrSHoKKwlwcml2LT5iYW5kd2lkdGggPSAoZmUtPm9wcy5pbmZvLnR5cGUgPT0gRkVfT0ZETSkgPyBwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGggOiAwOworCisJZl9sbzEgPSBmcmVxICsgaWYxICogMTAwMDsKKwlmX2xvMSA9IChmX2xvMSAvIDI1MCkgKiAyNTA7CisJZl9sbzIgPSBmX2xvMSAtIGZyZXEgLSBJRjI7CisJLy8gRnJvbSB0aGUgQ29tdGVjaCBkYXRhc2hlZXQsIHRoZSBzdGVwIHVzZWQgaXMgNTBrSHouIFRoZSB0dW5lciBjaGlwIGNvdWxkIGJlIG1vcmUgcHJlY2lzZQorCWZfbG8yID0gKChmX2xvMiArIDI1KSAvIDUwKSAqIDUwOworCXByaXYtPmZyZXF1ZW5jeSA9ICAoZl9sbzEgLSBmX2xvMiAtIElGMikgKiAxMDAwLAorCisjaWZkZWYgTVQyMDYwX1NQVVJDSEVDSworCS8vIExPLXJlbGF0ZWQgc3B1cnMgZGV0ZWN0aW9uIGFuZCBjb3JyZWN0aW9uCisJbnVtMSAgID0gbXQyMDYwX3NwdXJjaGVjayhmX2xvMSxmX2xvMixJRjIpOworCWZfbG8xICs9IG51bTE7CisJZl9sbzIgKz0gbnVtMTsKKyNlbmRpZgorCS8vRnJlcXVlbmN5IExPMSA9IDE2TUh6ICogKERJVjEgKyBOVU0xLzY0ICkKKwludW0xID0gZl9sbzEgLyAoRlJFRiAvIDY0KTsKKwlkaXYxID0gbnVtMSAvIDY0OworCW51bTEgJj0gMHgzZjsKKworCS8vIEZyZXF1ZW5jeSBMTzIgPSAxNk1IeiAqIChESVYyICsgTlVNMi84MTkyICkKKwludW0yID0gZl9sbzIgKiA2NCAvIChGUkVGIC8gMTI4KTsKKwlkaXYyID0gbnVtMiAvIDgxOTI7CisJbnVtMiAmPSAweDFmZmY7CisKKwlpZiAoZnJlcSA8PSAgOTUwMDApIGxuYWJhbmQgPSAweEIwOyBlbHNlCisJaWYgKGZyZXEgPD0gMTgwMDAwKSBsbmFiYW5kID0gMHhBMDsgZWxzZQorCWlmIChmcmVxIDw9IDI2MDAwMCkgbG5hYmFuZCA9IDB4OTA7IGVsc2UKKwlpZiAoZnJlcSA8PSAzMzUwMDApIGxuYWJhbmQgPSAweDgwOyBlbHNlCisJaWYgKGZyZXEgPD0gNDI1MDAwKSBsbmFiYW5kID0gMHg3MDsgZWxzZQorCWlmIChmcmVxIDw9IDQ4MDAwMCkgbG5hYmFuZCA9IDB4NjA7IGVsc2UKKwlpZiAoZnJlcSA8PSA1NzAwMDApIGxuYWJhbmQgPSAweDUwOyBlbHNlCisJaWYgKGZyZXEgPD0gNjQ1MDAwKSBsbmFiYW5kID0gMHg0MDsgZWxzZQorCWlmIChmcmVxIDw9IDczMDAwMCkgbG5hYmFuZCA9IDB4MzA7IGVsc2UKKwlpZiAoZnJlcSA8PSA4MTAwMDApIGxuYWJhbmQgPSAweDIwOyBlbHNlIGxuYWJhbmQgPSAweDEwOworCisJYlswXSA9IFJFR19MTzFDMTsKKwliWzFdID0gbG5hYmFuZCB8ICgobnVtMSA+PjIpICYgMHgwRik7CisJYlsyXSA9IGRpdjE7CisJYlszXSA9IChudW0yICYgMHgwRikgIHwgKChudW0xICYgMykgPDwgNCk7CisJYls0XSA9IG51bTIgPj4gNDsKKwliWzVdID0gKChudW0yID4+MTIpICYgMSkgfCAoZGl2MiA8PCAxKTsKKworCWRwcmludGsoIklGMTogJWRNSHoiLChpbnQpaWYxKTsKKwlkcHJpbnRrKCJQTEwgZnJlcT0lZGtIeiAgZl9sbzE9JWRrSHogIGZfbG8yPSVka0h6IiwoaW50KWZyZXEsKGludClmX2xvMSwoaW50KWZfbG8yKTsKKwlkcHJpbnRrKCJQTEwgZGl2MT0lZCAgbnVtMT0lZCAgZGl2Mj0lZCAgbnVtMj0lZCIsKGludClkaXYxLChpbnQpbnVtMSwoaW50KWRpdjIsKGludCludW0yKTsKKwlkcHJpbnRrKCJQTEwgWzEuLjVdOiAlMnggJTJ4ICUyeCAlMnggJTJ4IiwoaW50KWJbMV0sKGludCliWzJdLChpbnQpYlszXSwoaW50KWJbNF0sKGludCliWzVdKTsKKworCW10MjA2MF93cml0ZXJlZ3MocHJpdixiLDYpOworCisJLy9XYWl0cyBmb3IgcGxsIGxvY2sgb3IgdGltZW91dAorCWkgPSAwOworCWRvIHsKKwkJbXQyMDYwX3JlYWRyZWcocHJpdixSRUdfTE9fU1RBVFVTLGIpOworCQlpZiAoKGJbMF0gJiAweDg4KT09MHg4OCkKKwkJCWJyZWFrOworCQltc2xlZXAoNCk7CisJCWkrKzsKKwl9IHdoaWxlIChpPDEwKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIG10MjA2MF9jYWxpYnJhdGUoc3RydWN0IG10MjA2MF9wcml2ICpwcml2KQoreworCXU4IGIgPSAwOworCWludCBpID0gMDsKKworCWlmIChtdDIwNjBfd3JpdGVyZWdzKHByaXYsbXQyMDYwX2NvbmZpZzEsc2l6ZW9mKG10MjA2MF9jb25maWcxKSkpCisJCXJldHVybjsKKwlpZiAobXQyMDYwX3dyaXRlcmVncyhwcml2LG10MjA2MF9jb25maWcyLHNpemVvZihtdDIwNjBfY29uZmlnMikpKQorCQlyZXR1cm47CisKKwlkbyB7CisJCWIgfD0gKDEgPDwgNik7IC8vIEZNMVNTOworCQltdDIwNjBfd3JpdGVyZWcocHJpdiwgUkVHX0xPMkMxLGIpOworCQltc2xlZXAoMjApOworCisJCWlmIChpID09IDApIHsKKwkJCWIgfD0gKDEgPDwgNyk7IC8vIEZNMUNBOworCQkJbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19MTzJDMSxiKTsKKwkJCWIgJj0gfigxIDw8IDcpOyAvLyBGTTFDQTsKKwkJCW1zbGVlcCgyMCk7CisJCX0KKworCQliICY9IH4oMSA8PCA2KTsgLy8gRk0xU1MKKwkJbXQyMDYwX3dyaXRlcmVnKHByaXYsIFJFR19MTzJDMSxiKTsKKworCQltc2xlZXAoMjApOworCQlpKys7CisJfSB3aGlsZSAoaSA8IDkpOworCisJaSA9IDA7CisJd2hpbGUgKGkrKyA8IDEwICYmIG10MjA2MF9yZWFkcmVnKHByaXYsIFJFR19NSVNDX1NUQVQsICZiKSA9PSAwICYmIChiICYgKDEgPDwgNikpID09IDApCisJCW1zbGVlcCgyMCk7CisKKwlpZiAoaSA8IDEwKSB7CisJCW10MjA2MF9yZWFkcmVnKHByaXYsIFJFR19GTV9GUkVRLCAmcHJpdi0+Zm1mcmVxKTsgLy8gbm93IGZpbmQgb3V0LCB3aGF0IGlzIGZtcmVxIHVzZWQgZm9yIDopCisJCWRwcmludGsoImNhbGlicmF0aW9uIHdhcyBzdWNjZXNzZnVsOiAlZCIsIChpbnQpcHJpdi0+Zm1mcmVxKTsKKwl9IGVsc2UKKwkJZHByaW50aygiRk1DQUwgdGltZWQgb3V0Iik7Cit9CisKK3N0YXRpYyBpbnQgbXQyMDYwX2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCBtdDIwNjBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQyMDYwX2dldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmFuZHdpZHRoKQoreworCXN0cnVjdCBtdDIwNjBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpiYW5kd2lkdGggPSBwcml2LT5iYW5kd2lkdGg7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXQyMDYwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG10MjA2MF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJcmV0dXJuIG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywweDMzKTsKK30KKworc3RhdGljIGludCBtdDIwNjBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IG10MjA2MF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJcmV0dXJuIG10MjA2MF93cml0ZXJlZyhwcml2LCBSRUdfVkdBRywweDMwKTsKK30KKworc3RhdGljIGludCBtdDIwNjBfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlrZnJlZShmZS0+dHVuZXJfcHJpdik7CisJZmUtPnR1bmVyX3ByaXYgPSBOVUxMOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGR2Yl90dW5lcl9vcHMgbXQyMDYwX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIk1pY3JvdHVuZSBNVDIwNjAiLAorCQkuZnJlcXVlbmN5X21pbiAgPSAgNDgwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDg2MDAwMDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gICAgIDUwMDAwLAorCX0sCisKKwkucmVsZWFzZSAgICAgICA9IG10MjA2MF9yZWxlYXNlLAorCisJLmluaXQgICAgICAgICAgPSBtdDIwNjBfaW5pdCwKKwkuc2xlZXAgICAgICAgICA9IG10MjA2MF9zbGVlcCwKKworCS5zZXRfcGFyYW1zICAgID0gbXQyMDYwX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBtdDIwNjBfZ2V0X2ZyZXF1ZW5jeSwKKwkuZ2V0X2JhbmR3aWR0aCA9IG10MjA2MF9nZXRfYmFuZHdpZHRoCit9OworCisvKiBUaGlzIGZ1bmN0aW9ucyB0cmllcyB0byBpZGVudGlmeSBhIE1UMjA2MCB0dW5lciBieSByZWFkaW5nIHRoZSBQQVJUL1JFViByZWdpc3Rlci4gVGhpcyBpcyBoYXN0eS4gKi8KK2ludCBtdDIwNjBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG10MjA2MF9jb25maWcgKmNmZywgdTE2IGlmMSkKK3sKKwlzdHJ1Y3QgbXQyMDYwX3ByaXYgKnByaXYgPSBOVUxMOworCXU4IGlkID0gMDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXQyMDYwX3ByaXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmNmZyAgICAgID0gY2ZnOworCXByaXYtPmkyYyAgICAgID0gaTJjOworCXByaXYtPmlmMV9mcmVxID0gaWYxOworCisJaWYgKG10MjA2MF9yZWFkcmVnKHByaXYsUkVHX1BBUlRfUkVWLCZpZCkgIT0gMCkgeworCQlrZnJlZShwcml2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJaWYgKGlkICE9IFBBUlRfUkVWKSB7CisJCWtmcmVlKHByaXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJcHJpbnRrKEtFUk5fSU5GTyAiTVQyMDYwOiBzdWNjZXNzZnVsbHkgaWRlbnRpZmllZCAoSUYxID0gJWQpXG4iLCBpZjEpOworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZtdDIwNjBfdHVuZXJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKworCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKKworCW10MjA2MF9jYWxpYnJhdGUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0wobXQyMDYwX2F0dGFjaCk7CisKK01PRFVMRV9BVVRIT1IoIk9saXZpZXIgREFORVQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiTWljcm90dW5lIE1UMjA2MCBzaWxpY29uIHR1bmVyIGRyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1OGIwM2UKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQyMDYwLmgKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqICBEcml2ZXIgZm9yIE1pY3JvdHVuZSBNVDIwNjAgIlNpbmdsZSBjaGlwIGR1YWwgY29udmVyc2lvbiBicm9hZGJhbmQgdHVuZXIiCisgKgorICogIENvcHlyaWdodCAoYykgMjAwNiBPbGl2aWVyIERBTkVUIDxvZGFuZXRAY2FyYW1haWwuY29tPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaWZuZGVmIE1UMjA2MF9ICisjZGVmaW5lIE1UMjA2MF9ICisKK3N0cnVjdCBkdmJfZnJvbnRlbmQ7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3N0cnVjdCBtdDIwNjBfY29uZmlnIHsKKwl1OCBpMmNfYWRkcmVzczsKKwkvKiBTaGFsbCB3ZSBhZGQgc2V0dGluZ3MgZm9yIHRoZSBkaXNjcmV0ZSBvdXRwdXRzID8gKi8KK307CisKK2V4dGVybiBpbnQgbXQyMDYwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtdDIwNjBfY29uZmlnICpjZmcsIHUxNiBpZjEpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjBfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MjA2MF9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVhY2NkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDIwNjBfcHJpdi5oCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogIERyaXZlciBmb3IgTWljcm90dW5lIE1UMjA2MCAiU2luZ2xlIGNoaXAgZHVhbCBjb252ZXJzaW9uIGJyb2FkYmFuZCB0dW5lciIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA2IE9saXZpZXIgREFORVQgPG9kYW5ldEBjYXJhbWFpbC5jb20+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpZm5kZWYgTVQyMDYwX1BSSVZfSAorI2RlZmluZSBNVDIwNjBfUFJJVl9ICisKKy8vIFVuY29tbWVudCB0aGUgI2RlZmluZSBiZWxvdyB0byBlbmFibGUgc3B1cnMgY2hlY2tpbmcuIFRoZSByZXN1bHRzIHdoZXJlIHF1aXRlIHVuY29udmluY2luZy4KKy8vICNkZWZpbmUgTVQyMDYwX1NQVVJDSEVDSworCisvKiBUaGlzIGRyaXZlciBpcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBkYXRhc2hlZXQgb2YgdGhlCisgICAiQ29tdGVjaCBTRFZCVC0zSzZNIiB0dW5lciAoIEsxMDAwNzM3ODQzLnBkZiApIHdoaWNoIGZlYXR1cmVzIHRoZSBNVDIwNjAgcmVnaXN0ZXIgbWFwIDoKKworICAgSTJDIEFkZHJlc3MgOiAweDYwCisKKyAgIFJlZy5ObyB8ICAgQjcgICB8ICAgQjYgICB8ICAgQjUgICB8ICAgQjQgICB8ICAgQjMgICB8ICAgQjIgICB8ICAgQjEgICB8ICAgQjAgICB8ICggZGVmYXVsdHMgKQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAwMCB8IFsgICAgICAgICAgICAgIFBBUlQgICAgICAgICAgICAgXSB8IFsgICAgICAgICAgICAgIFJFViAgICAgICAgICAgICAgXSB8IFIgID0gMHg2MworICAgICAgIDAxIHwgWyAgICAgICAgICAgICBMTkFCQU5EICAgICAgICAgICBdIHwgWyAgICAgICAgICAgICAgTlVNMSg1OjIpICAgICAgICBdIHwgUlcgPSAweDNGCisgICAgICAgMDIgfCBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJVjEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gfCBSVyA9IDB4NzQKKyAgICAgICAwMyB8IEZNMUNBICB8IEZNMVNTICB8IFsgIE5VTTEoMTowKSAgXSB8IFsgICAgICAgICAgICAgIE5VTTIoMzowKSAgICAgICAgXSB8IFJXID0gMHgwMAorICAgICAgIDA0IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVU0yKDExOjQpICAgICAgICAgICAgICAgICAgICAgICAgICBdIHwgUlcgPSAweDA4CisgICAgICAgMDUgfCBbICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERJVjIgICAgICAgICAgICAgICAgICAgICAgIF0gfE5VTTIoMTIpfCBSVyA9IDB4OTMKKyAgICAgICAwNiB8IEwxTEsgICB8IFsgICAgICAgIFRBRDEgICAgICAgICAgXSB8IEwyTEsgICB8IFsgICAgICAgICBUQUQyICAgICAgICAgXSB8IFIKKyAgICAgICAwNyB8IFsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRk1GICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSB8IFIKKyAgICAgICAwOCB8ICAgPyAgICB8IEZNQ0FMICB8ICAgPyAgICB8ICAgPyAgICB8ICAgPyAgICB8ICAgPyAgICB8ICAgPyAgICB8IFRFTVAgICB8IFIKKyAgICAgICAwOSB8ICAgMCAgICB8ICAgMCAgICB8IFsgICAgRk1HQyAgICAgXSB8ICAgMCAgICB8IEdQMDIgICB8IEdQMDEgICB8ICAgMCAgICB8IFJXID0gMHgyMAorICAgICAgIDBBIHwgPz8KKyAgICAgICAwQiB8ICAgMCAgICB8ICAgMCAgICB8ICAgMSAgICB8ICAgMSAgICB8ICAgMCAgICB8ICAgMCAgICB8IFsgICBWR0FHICAgICAgXSB8IFJXID0gMHgzMAorICAgICAgIDBDIHwgVjFDU0UgIHwgICAxICAgIHwgICAxICAgIHwgICAxICAgIHwgICAxICAgIHwgICAxICAgIHwgICAxICAgIHwgICAxICAgIHwgUlcgPSAweEZGCisgICAgICAgMEQgfCAgIDEgICAgfCAgIDAgICAgfCBbICAgICAgICAgICAgICAgICAgICAgIFYxQ1MgICAgICAgICAgICAgICAgICAgICAgIF0gfCBSVyA9IDB4QjAKKyAgICAgICAwRSB8ID8/CisgICAgICAgMEYgfCA/PworICAgICAgIDEwIHwgPz8KKyAgICAgICAxMSB8IFsgICAgICAgICAgICAgTE9UTyAgICAgICAgICAgICAgXSB8ICAgMCAgICB8ICAgMCAgICB8ICAgMSAgICB8ICAgMCAgICB8IFJXID0gMHg0MgorCisgICAgICAgUEFSVCAgICA6IFBhcnQgY29kZSAgICAgIDogNiBmb3IgTVQyMDYwCisgICAgICAgUkVWICAgICA6IFJldmlzaW9uIGNvZGUgIDogMyBmb3IgY3VycmVudCByZXZpc2lvbgorICAgICAgIExOQUJBTkQgOiBJbnB1dCBmcmVxdWVuY3kgcmFuZ2UgOiAoIFNlZSBjb2RlIGZvciBkZXRhaWxzICkKKyAgICAgICBOVU0xIC8gRElWMSAvIE5VTTIgLyBESVYyIDogRnJlcXVlbmNpZXMgcHJvZ3JhbW1pbmcgKCBTZWUgY29kZSBmb3IgZGV0YWlscyApCisgICAgICAgRk0xQ0EgIDogQ2FsaWJyYXRpb24gU3RhcnQgQml0CisgICAgICAgRk0xU1MgIDogQ2FsaWJyYXRpb24gU2luZ2xlIFN0ZXAgYml0CisgICAgICAgTDFMSyAgIDogTE8xIExvY2sgRGV0ZWN0CisgICAgICAgVEFEMSAgIDogVHVuZSBMaW5lIEFEQyAoID8gKQorICAgICAgIEwyTEsgICA6IExPMiBMb2NrIERldGVjdAorICAgICAgIFRBRDIgICA6IFR1bmUgTGluZSBBREMgKCA/ICkKKyAgICAgICBGTUYgICAgOiBFc3RpbWF0ZWQgZmlyc3QgSUYgQ2VudGVyIGZyZXF1ZW5jeSBPZmZzZXQgKCA/ICkKKyAgICAgICBGTTFDQUwgOiBDYWxpYnJhdGlvbiBkb25lIGJpdAorICAgICAgIFRFTVAgICA6IE9uIGNoaXAgdGVtcGVyYXR1cmUgc2Vuc29yCisgICAgICAgRk1DRyAgIDogTWl4ZXIgMSBDYXAgR2FpbiAoID8gKQorICAgICAgIEdQMDEgLyBHUDAyIDogUHJvZ3JhbW1hYmxlIGRpZ2l0YWwgb3V0cHV0cy4gVW5jb25uZWN0ZWQgcGlucyA/CisgICAgICAgVjFDU0UgIDogTE8xIFZDTyBBdXRvbWF0aWMgQ2FwYWNpdG9yIFNlbGVjdCBFbmFibGUgKCA/ICkKKyAgICAgICBWMUNTICAgOiBMTzEgQ2FwYWNpdG9yIFNlbGVjdGlvbiBWYWx1ZSAoID8gKQorICAgICAgIExPVE8gICA6IExPIFRpbWVvdXQgKCA/ICkKKyAgICAgICBWR0FHICAgOiBUdW5lciBPdXRwdXQgZ2FpbgorKi8KKworI2RlZmluZSBJMkNfQUREUkVTUyAweDYwCisKKyNkZWZpbmUgUkVHX1BBUlRfUkVWICAgMAorI2RlZmluZSBSRUdfTE8xQzEgICAgICAxCisjZGVmaW5lIFJFR19MTzFDMiAgICAgIDIKKyNkZWZpbmUgUkVHX0xPMkMxICAgICAgMworI2RlZmluZSBSRUdfTE8yQzIgICAgICA0CisjZGVmaW5lIFJFR19MTzJDMyAgICAgIDUKKyNkZWZpbmUgUkVHX0xPX1NUQVRVUyAgNgorI2RlZmluZSBSRUdfRk1fRlJFUSAgICA3CisjZGVmaW5lIFJFR19NSVNDX1NUQVQgIDgKKyNkZWZpbmUgUkVHX01JU0NfQ1RSTCAgOQorI2RlZmluZSBSRUdfUkVTRVJWRURfQSAweDBBCisjZGVmaW5lIFJFR19WR0FHICAgICAgIDB4MEIKKyNkZWZpbmUgUkVHX0xPMUIxICAgICAgMHgwQworI2RlZmluZSBSRUdfTE8xQjIgICAgICAweDBECisjZGVmaW5lIFJFR19MT1RPICAgICAgIDB4MTEKKworI2RlZmluZSBQQVJUX1JFViAweDYzIC8vIFRoZSBjdXJyZW50IGRyaXZlciB3b3JrcyBvbmx5IHdpdGggUEFSVD02IGFuZCBSRVY9MyBjaGlwcworCitzdHJ1Y3QgbXQyMDYwX3ByaXYgeworCXN0cnVjdCBtdDIwNjBfY29uZmlnICpjZmc7CisJc3RydWN0IGkyY19hZGFwdGVyICAgKmkyYzsKKworCXUzMiBmcmVxdWVuY3k7CisJdTMyIGJhbmR3aWR0aDsKKwl1MTYgaWYxX2ZyZXE7CisJdTggIGZtZnJlcTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzEyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuaAppbmRleCA2NjZhMWJkLi43MTEyZmI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzMTIuaApAQCAtMzQsOCArMzQsMTYgQEAKIAl1OCBkZW1vZF9hZGRyZXNzOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9NVDMxMikgfHwgZGVmaW5lZChDT05GSUdfRFZCX01UMzEyX01PRFVMRSkKIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHZwMzEwX210MzEyX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzMTJfY29uZmlnKiBjb25maWcsCiAJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKLQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdnAzMTBfbXQzMTJfYXR0YWNoKGNvbnN0IHN0cnVjdCBtdDMxMl9jb25maWcqIGNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfTVQzMTIKIAogI2VuZGlmIC8vIE1UMzEyX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDM1Mi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmMKaW5kZXggNWRlNzM3Ni4uODdlMzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL210MzUyLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotaW50IG10MzUyX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCogaWJ1ZiwgaW50IGlsZW4pCitzdGF0aWMgaW50IF9tdDM1Ml93cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgdTgqIGlidWYsIGludCBpbGVuKQogewogCWludCBlcnIsaTsKIAlmb3IgKGk9MDsgaSA8IGlsZW4tMTsgaSsrKQpAQCAtMTA3LDcgKzEwNyw3IEBACiB7CiAJc3RhdGljIHU4IG10MzUyX3NvZnRkb3duW10gPSB7IENMT0NLX0NUTCwgMHgyMCwgMHgwOCB9OwogCi0JbXQzNTJfd3JpdGUoZmUsIG10MzUyX3NvZnRkb3duLCBzaXplb2YobXQzNTJfc29mdGRvd24pKTsKKwlfbXQzNTJfd3JpdGUoZmUsIG10MzUyX3NvZnRkb3duLCBzaXplb2YobXQzNTJfc29mdGRvd24pKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjkzLDE0ICsyOTMsMTQgQEAKIAkJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCQl9CiAKLQkJbXQzNTJfd3JpdGUoZmUsIGJ1ZiwgOCk7Ci0JCW10MzUyX3dyaXRlKGZlLCBmc21fZ28sIDIpOworCQlfbXQzNTJfd3JpdGUoZmUsIGJ1ZiwgOCk7CisJCV9tdDM1Ml93cml0ZShmZSwgZnNtX2dvLCAyKTsKIAl9IGVsc2UgewogCQlpZiAoZmUtPm9wcy50dW5lcl9vcHMuY2FsY19yZWdzKSB7CiAJCQlmZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MoZmUsIHBhcmFtLCBidWYrOCwgNSk7CiAJCQlidWZbOF0gPDw9IDE7Ci0JCQltdDM1Ml93cml0ZShmZSwgYnVmLCBzaXplb2YoYnVmKSk7Ci0JCQltdDM1Ml93cml0ZShmZSwgdHVuZXJfZ28sIDIpOworCQkJX210MzUyX3dyaXRlKGZlLCBidWYsIHNpemVvZihidWYpKTsKKwkJCV9tdDM1Ml93cml0ZShmZSwgdHVuZXJfZ28sIDIpOwogCQl9CiAJfQogCkBAIC01MjIsNyArNTIyLDcgQEAKIAkgICAgKG10MzUyX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIENPTkZJRykgJiAweDIwKSA9PSAwKSB7CiAKIAkJLyogRG8gYSAiaGFyZCIgcmVzZXQgKi8KLQkJbXQzNTJfd3JpdGUoZmUsIG10MzUyX3Jlc2V0X2F0dGFjaCwgc2l6ZW9mKG10MzUyX3Jlc2V0X2F0dGFjaCkpOworCQlfbXQzNTJfd3JpdGUoZmUsIG10MzUyX3Jlc2V0X2F0dGFjaCwgc2l6ZW9mKG10MzUyX3Jlc2V0X2F0dGFjaCkpOwogCQlyZXR1cm4gc3RhdGUtPmNvbmZpZy5kZW1vZF9pbml0KGZlKTsKIAl9CiAKQEAgLTU4NSw2ICs1ODUsNyBAQAogCiAJLmluaXQgPSBtdDM1Ml9pbml0LAogCS5zbGVlcCA9IG10MzUyX3NsZWVwLAorCS53cml0ZSA9IF9tdDM1Ml93cml0ZSwKIAogCS5zZXRfZnJvbnRlbmQgPSBtdDM1Ml9zZXRfcGFyYW1ldGVycywKIAkuZ2V0X2Zyb250ZW5kID0gbXQzNTJfZ2V0X3BhcmFtZXRlcnMsCkBAIC02MDUsNCArNjA2LDMgQEAKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogRVhQT1JUX1NZTUJPTChtdDM1Ml9hdHRhY2gpOwotRVhQT1JUX1NZTUJPTChtdDM1Ml93cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbXQzNTIuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDM1Mi5oCmluZGV4IDllN2ZmNGIuLjAwMzVjMmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDM1Mi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9tdDM1Mi5oCkBAIC01MSw5ICs1MSwyMyBAQAogCWludCAoKmRlbW9kX2luaXQpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKTsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTVQzNTIpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9NVDM1Ml9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbXQzNTJfYXR0YWNoKGNvbnN0IHN0cnVjdCBtdDM1Ml9jb25maWcqIGNvbmZpZywKIAkJCQkJIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG10MzUyX2F0dGFjaChjb25zdCBzdHJ1Y3QgbXQzNTJfY29uZmlnKiBjb25maWcsCisJCQkJCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9NVDM1MgogCi1leHRlcm4gaW50IG10MzUyX3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCogaWJ1ZiwgaW50IGlsZW4pOworc3RhdGljIGlubGluZSBpbnQgbXQzNTJfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4ICpidWYsIGludCBsZW4pIHsKKwlpbnQgciA9IDA7CisJaWYgKGZlLT5vcHMud3JpdGUpCisJCXIgPSBmZS0+b3BzLndyaXRlKGZlLCBidWYsIGxlbik7CisJcmV0dXJuIHI7Cit9CiAKICNlbmRpZiAvLyBNVDM1Ml9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDIwMHguaAppbmRleCAzNGQ2MTczLi4yZWIyMjBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0MjAweC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQyMDB4LmgKQEAgLTQ1LDggKzQ1LDE3IEBACiAJaW50ICgqc2V0X3RzX3BhcmFtcykoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCBpc19wdW5jdHVyZWQpOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9OWFQyMDBYKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfTlhUMjAwWF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0MjAweF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDIwMHhfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG54dDIwMHhfYXR0YWNoKGNvbnN0IHN0cnVjdCBueHQyMDB4X2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9OWFQyMDBYCiAKICNlbmRpZiAvKiBOWFQyMDBYX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDYwMDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9ueHQ2MDAwLmgKaW5kZXggMTE3MDMxZC4uOTM5NzM5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL254dDYwMDAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbnh0NjAwMC5oCkBAIC0zMyw3ICszMywxNiBAQAogCXU4IGNsb2NrX2ludmVyc2lvbjoxOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9OWFQ2MDAwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfTlhUNjAwMF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogbnh0NjAwMF9hdHRhY2goY29uc3Qgc3RydWN0IG54dDYwMDBfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG54dDYwMDBfYXR0YWNoKGNvbnN0IHN0cnVjdCBueHQ2MDAwX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9OWFQ2MDAwCiAKICNlbmRpZiAvLyBOWFQ2MDAwX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTEzMi5oCmluZGV4IDg5NjU4ODguLjk3MThiZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMTMyLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTExMzIuaApAQCAtMzQsOCArMzQsMTcgQEAKIAlpbnQgKCpzZXRfdHNfcGFyYW1zKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IGlzX3B1bmN0dXJlZCk7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX09SNTExMzIpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9PUjUxMTMyX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBvcjUxMTMyX2F0dGFjaChjb25zdCBzdHJ1Y3Qgb3I1MTEzMl9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogb3I1MTEzMl9hdHRhY2goY29uc3Qgc3RydWN0IG9yNTExMzJfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX09SNTExMzIKIAogI2VuZGlmIC8vIE9SNTExMzJfSAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL29yNTEyMTEuaAppbmRleCAxM2E1YTNhLi4xMGE1NDE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvb3I1MTIxMS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9vcjUxMjExLmgKQEAgLTM3LDggKzM3LDE3IEBACiAJdm9pZCAoKnNsZWVwKShzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZmUpOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9PUjUxMjExKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfT1I1MTIxMV9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogb3I1MTIxMV9hdHRhY2goY29uc3Qgc3RydWN0IG9yNTEyMTFfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIG9yNTEyMTFfYXR0YWNoKGNvbnN0IHN0cnVjdCBvcjUxMjExX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9PUjUxMjExCiAKICNlbmRpZiAvLyBPUjUxMjExX0gKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zNWgxNDIwLmgKaW5kZXggNGUzOTAxNS4uZWZjNTRkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M1aDE0MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczVoMTQyMC5oCkBAIC0zNCw3ICszNCwxNiBAQAogCXU4IGludmVydDoxOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TNUgxNDIwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfUzVIMTQyMF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogczVoMTQyMF9hdHRhY2goY29uc3Qgc3RydWN0IHM1aDE0MjBfY29uZmlnKiBjb25maWcsCiAJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzNWgxNDIwX2F0dGFjaChjb25zdCBzdHJ1Y3QgczVoMTQyMF9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfUzVIMTQyMAogCiAjZW5kaWYgLy8gUzVIMTQyMF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODcwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODcwLmgKaW5kZXggOTNhZmJiOS4uNGNmMjdkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4NzAuaApAQCAtMzUsNyArMzUsMTYgQEAKIAlpbnQgKCpyZXF1ZXN0X2Zpcm13YXJlKShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9TUDg4NzApIHx8IGRlZmluZWQoQ09ORklHX0RWQl9TUDg4NzBfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHNwODg3MF9hdHRhY2goY29uc3Qgc3RydWN0IHNwODg3MF9jb25maWcqIGNvbmZpZywKIAkJCQkJICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzcDg4NzBfYXR0YWNoKGNvbnN0IHN0cnVjdCBzcDg4NzBfY29uZmlnKiBjb25maWcsCisJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfU1A4ODcwCiAKICNlbmRpZiAvLyBTUDg4NzBfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3NwODg3eC5oCmluZGV4IGM0NGIwZWIuLmNhYjdlYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zcDg4N3guaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3A4ODd4LmgKQEAgLTE3LDcgKzE3LDE2IEBACiAJaW50ICgqcmVxdWVzdF9maXJtd2FyZSkoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqKmZ3LCBjaGFyKiBuYW1lKTsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfU1A4ODdYKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfU1A4ODdYX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzcDg4N3hfYXR0YWNoKGNvbnN0IHN0cnVjdCBzcDg4N3hfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogc3A4ODd4X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3A4ODd4X2NvbmZpZyogY29uZmlnLAorCQkJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1NQODg3WAogCiAjZW5kaWYgLy8gU1A4ODdYX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5Ny5oCmluZGV4IDFkYTUzODQuLjc2MGI4MGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk3LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTcuaApAQCAtNDIsNyArNDIsMTYgQEAKIAl1OCBzdG9wX2R1cmluZ19yZWFkOjE7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTcpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk3X01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzdHYwMjk3X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5N19jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5N19hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTdfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1NUVjAyOTcKIAogI2VuZGlmIC8vIFNUVjAyOTdfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmMKaW5kZXggOTY2NDhhNy4uOTM0ODM3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5jCkBAIC05MiwxMSArOTIsMTQgQEAKIAlyZXR1cm4gKHJldCAhPSAxKSA/IC1FUkVNT1RFSU8gOiAwOwogfQogCi1pbnQgc3R2MDI5OV93cml0ZXJlZyAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4IHJlZywgdTggZGF0YSkKK2ludCBzdHYwMjk5X3dyaXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCAqYnVmLCBpbnQgbGVuKQogewogCXN0cnVjdCBzdHYwMjk5X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JcmV0dXJuIHN0djAyOTlfd3JpdGVyZWdJKHN0YXRlLCByZWcsIGRhdGEpOworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gc3R2MDI5OV93cml0ZXJlZ0koc3RhdGUsIGJ1ZlswXSwgYnVmWzFdKTsKIH0KIAogc3RhdGljIHU4IHN0djAyOTlfcmVhZHJlZyAoc3RydWN0IHN0djAyOTlfc3RhdGUqIHN0YXRlLCB1OCByZWcpCkBAIC02OTQsNiArNjk3LDcgQEAKIAogCS5pbml0ID0gc3R2MDI5OV9pbml0LAogCS5zbGVlcCA9IHN0djAyOTlfc2xlZXAsCisJLndyaXRlID0gc3R2MDI5OV93cml0ZSwKIAkuaTJjX2dhdGVfY3RybCA9IHN0djAyOTlfaTJjX2dhdGVfY3RybCwKIAogCS5zZXRfZnJvbnRlbmQgPSBzdHYwMjk5X3NldF9mcm9udGVuZCwKQEAgLTcyNCw1ICs3MjgsNCBAQAogCSAgICAgICJBbmRyZWFzIE9iZXJyaXR0ZXIsIEFuZHJldyBkZSBRdWluY2V5LCBLZW5uZXRoIEFhZmx5Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLUVYUE9SVF9TWU1CT0woc3R2MDI5OV93cml0ZXJlZyk7CiBFWFBPUlRfU1lNQk9MKHN0djAyOTlfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDI5OS5oCmluZGV4IDE1MDQ4MjguLjdlZjI1MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwMjk5LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djAyOTkuaApAQCAtODksOSArODksMjQgQEAKIAlpbnQgKCpzZXRfc3ltYm9sX3JhdGUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIgc3JhdGUsIHUzMiByYXRpbyk7CiB9OwogCi1leHRlcm4gaW50IHN0djAyOTlfd3JpdGVyZWcgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1OCByZWcsIHU4IGRhdGEpOwotCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjAyOTkpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9TVFYwMjk5X01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBzdHYwMjk5X2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDI5OV9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogc3R2MDI5OV9hdHRhY2goY29uc3Qgc3RydWN0IHN0djAyOTlfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1NUVjAyOTkKKworc3RhdGljIGlubGluZSBpbnQgc3R2MDI5OV93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggcmVnLCB1OCB2YWwpIHsKKwlpbnQgciA9IDA7CisJdTggYnVmW10gPSB7cmVnLCB2YWx9OworCWlmIChmZS0+b3BzLndyaXRlKQorCQlyID0gZmUtPm9wcy53cml0ZShmZSwgYnVmLCAyKTsKKwlyZXR1cm4gcjsKK30KIAogI2VuZGlmIC8vIFNUVjAyOTlfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwppbmRleCA5Y2JkMTY0Li5kY2E4OTE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwMjEuYwpAQCAtNzIsNyArNzIsNyBAQAogCTB4MDQsIDB4MmQsIDB4MmYsIDB4ZmYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCiB9OwogCi1zdGF0aWMgaW50IHRkYTEwMDIxX3dyaXRlcmVnIChzdHJ1Y3QgdGRhMTAwMjFfc3RhdGUqIHN0YXRlLCB1OCByZWcsIHU4IGRhdGEpCitzdGF0aWMgaW50IF90ZGExMDAyMV93cml0ZXJlZyAoc3RydWN0IHRkYTEwMDIxX3N0YXRlKiBzdGF0ZSwgdTggcmVnLCB1OCBkYXRhKQogewogCXU4IGJ1ZltdID0geyByZWcsIGRhdGEgfTsKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDIgfTsKQEAgLTg4LDE0ICs4OCw2IEBACiAJcmV0dXJuIChyZXQgIT0gMSkgPyAtRVJFTU9URUlPIDogMDsKIH0KIAotaW50IHRkYTEwMDIxX3dyaXRlX2J5dGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGludCByZWcsIGludCBkYXRhKQotewotCXN0cnVjdCB0ZGExMDAyMV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQotCXJldHVybiB0ZGExMDAyMV93cml0ZXJlZyhzdGF0ZSwgcmVnLCBkYXRhKTsKLX0KLUVYUE9SVF9TWU1CT0wodGRhMTAwMjFfd3JpdGVfYnl0ZSk7Ci0KIHN0YXRpYyB1OCB0ZGExMDAyMV9yZWFkcmVnIChzdHJ1Y3QgdGRhMTAwMjFfc3RhdGUqIHN0YXRlLCB1OCByZWcpCiB7CiAJdTggYjAgW10gPSB7IHJlZyB9OwpAQCAtMTQ5LDggKzE0MSw4IEBACiAJZWxzZSBpZiAoSU5WRVJTSU9OX09GRiA9PSBpbnZlcnNpb24pCiAJCURJU0FCTEVfSU5WRVJTSU9OKHJlZzApOwogCi0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDAwLCByZWcwICYgMHhmZSk7Ci0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDAwLCByZWcwIHwgMHgwMSk7CisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwMCwgcmVnMCAmIDB4ZmUpOworCV90ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MDAsIHJlZzAgfCAweDAxKTsKIAogCXN0YXRlLT5yZWcwID0gcmVnMDsKIAlyZXR1cm4gMDsKQEAgLTE5OCwxNyArMTkwLDI3IEBACiAKIAlOREVDID0gKE5ERUMgPDwgNikgfCB0ZGExMDAyMV9pbml0dGFiWzB4MDNdOwogCi0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDAzLCBOREVDKTsKLQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MGEsIEJEUiYweGZmKTsKLQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MGIsIChCRFI+PiA4KSYweGZmKTsKLQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MGMsIChCRFI+PjE2KSYweDNmKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDAzLCBOREVDKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDBhLCBCRFImMHhmZik7CisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwYiwgKEJEUj4+IDgpJjB4ZmYpOworCV90ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MGMsIChCRFI+PjE2KSYweDNmKTsKIAotCXRkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwZCwgQkRSSSk7Ci0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDBlLCBTRklMKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDBkLCBCRFJJKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDBlLCBTRklMKTsKIAogCXJldHVybiAwOwogfQogCitpbnQgdGRhMTAwMjFfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCit7CisJc3RydWN0IHRkYTEwMDIxX3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKGxlbiAhPSAyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBfdGRhMTAwMjFfd3JpdGVyZWcoc3RhdGUsIGJ1ZlswXSwgYnVmWzFdKTsKK30KKwogc3RhdGljIGludCB0ZGExMDAyMV9pbml0IChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgdGRhMTAwMjFfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CkBAIC0yMTYsMTIgKzIxOCwxMiBAQAogCiAJZHByaW50aygiRFZCOiBUREExMDAyMSglZCk6IGluaXQgY2hpcFxuIiwgZmUtPmFkYXB0ZXItPm51bSk7CiAKLQkvL3RkYTEwMDIxX3dyaXRlcmVnIChmZSwgMCwgMCk7CisJLy9fdGRhMTAwMjFfd3JpdGVyZWcgKGZlLCAwLCAwKTsKIAogCWZvciAoaT0wOyBpPHRkYTEwMDIxX2luaXR0YWJfc2l6ZTsgaSsrKQotCQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIGksIHRkYTEwMDIxX2luaXR0YWJbaV0pOworCQlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCBpLCB0ZGExMDAyMV9pbml0dGFiW2ldKTsKIAotCXRkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgzNCwgc3RhdGUtPnB3bSk7CisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgzNCwgc3RhdGUtPnB3bSk7CiAKIAkvL0NvbW1lbnQgYnkgbWFya3VzCiAJLy8weDJBWzMtMF0gPT0gUERJViAtPiBQIG11bHRpcGxheWluZyBmYWN0b3IgKFA9UERJVisxKShkZWZhdWx0IDApCkBAIC0yMzAsNyArMjMyLDcgQEAKIAkvLzB4MkFbNl0gPT0gUE9MQVhJTiAtPiBQb2xhcml0eSBvZiB0aGUgaW5wdXQgcmVmZXJlbmNlIGNsb2NrIChkZWZhdWx0IDApCiAKIAkvL0FjdGl2YXRlIFBMTAotCXRkYTEwMDIxX3dyaXRlcmVnKHN0YXRlLCAweDJhLCB0ZGExMDAyMV9pbml0dGFiWzB4MmFdICYgMHhlZik7CisJX3RkYTEwMDIxX3dyaXRlcmVnKHN0YXRlLCAweDJhLCB0ZGExMDAyMV9pbml0dGFiWzB4MmFdICYgMHhlZik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI2NCwxMiArMjY2LDEyIEBACiAJfQogCiAJdGRhMTAwMjFfc2V0X3N5bWJvbHJhdGUgKHN0YXRlLCBwLT51LnFhbS5zeW1ib2xfcmF0ZSk7Ci0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDM0LCBzdGF0ZS0+cHdtKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDM0LCBzdGF0ZS0+cHdtKTsKIAotCXRkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwMSwgcmVnMHgwMVtxYW1dKTsKLQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MDUsIHJlZzB4MDVbcWFtXSk7Ci0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDA4LCByZWcweDA4W3FhbV0pOwotCXRkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwOSwgcmVnMHgwOVtxYW1dKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDAxLCByZWcweDAxW3FhbV0pOworCV90ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MDUsIHJlZzB4MDVbcWFtXSk7CisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwOCwgcmVnMHgwOFtxYW1dKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDA5LCByZWcweDA5W3FhbV0pOwogCiAJdGRhMTAwMjFfc2V0dXBfcmVnMCAoc3RhdGUsIHJlZzB4MDBbcWFtXSwgcC0+aW52ZXJzaW9uKTsKIApAQCAtMzQyLDggKzM0NCw4IEBACiAJCSp1Y2Jsb2NrcyA9IDB4ZmZmZmZmZmY7CiAKIAkvKiByZXNldCB1bmNvcnJlY3RlZCBibG9jayBjb3VudGVyICovCi0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDEwLCB0ZGExMDAyMV9pbml0dGFiWzB4MTBdICYgMHhkZik7Ci0JdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDEwLCB0ZGExMDAyMV9pbml0dGFiWzB4MTBdKTsKKwlfdGRhMTAwMjFfd3JpdGVyZWcgKHN0YXRlLCAweDEwLCB0ZGExMDAyMV9pbml0dGFiWzB4MTBdICYgMHhkZik7CisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgxMCwgdGRhMTAwMjFfaW5pdHRhYlsweDEwXSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTM5Miw4ICszOTQsOCBAQAogewogCXN0cnVjdCB0ZGExMDAyMV9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAotCXRkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgxYiwgMHgwMik7ICAvKiBwZG93biBBREMgKi8KLQl0ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MDAsIDB4ODApOyAgLyogc3RhbmRieSAqLworCV90ZGExMDAyMV93cml0ZXJlZyAoc3RhdGUsIDB4MWIsIDB4MDIpOyAgLyogcGRvd24gQURDICovCisJX3RkYTEwMDIxX3dyaXRlcmVnIChzdGF0ZSwgMHgwMCwgMHg4MCk7ICAvKiBzdGFuZGJ5ICovCiAKIAlyZXR1cm4gMDsKIH0KQEAgLTQ1OSw2ICs0NjEsNyBAQAogCiAJLmluaXQgPSB0ZGExMDAyMV9pbml0LAogCS5zbGVlcCA9IHRkYTEwMDIxX3NsZWVwLAorCS53cml0ZSA9IHRkYTEwMDIxX3dyaXRlLAogCS5pMmNfZ2F0ZV9jdHJsID0gdGRhMTAwMjFfaTJjX2dhdGVfY3RybCwKIAogCS5zZXRfZnJvbnRlbmQgPSB0ZGExMDAyMV9zZXRfcGFyYW1ldGVycywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDAyMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKaW5kZXggYjFkZjQyNS4uZDY4YWUyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDIxLmgKQEAgLTMyLDkgKzMyLDI0IEBACiAJdTggZGVtb2RfYWRkcmVzczsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwMjEpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9UREExMDAyMV9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwMjFfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDAyMV9jb25maWcqIGNvbmZpZywKIAkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwMjFfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDAyMV9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfVERBMTAwMjEKIAotZXh0ZXJuIGludCB0ZGExMDAyMV93cml0ZV9ieXRlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgcmVnLCBpbnQgZGF0YSk7CitzdGF0aWMgaW5saW5lIGludCB0ZGExMDAyMV93cml0ZXJlZyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggcmVnLCB1OCB2YWwpIHsKKwlpbnQgciA9IDA7CisJdTggYnVmW10gPSB7cmVnLCB2YWx9OworCWlmIChmZS0+b3BzLndyaXRlKQorCQlyID0gZmUtPm9wcy53cml0ZShmZSwgYnVmLCAyKTsKKwlyZXR1cm4gcjsKK30KIAogI2VuZGlmIC8vIFREQTEwMDIxX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKaW5kZXggNTlhMmVkNi4uMTFlMGRjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMKQEAgLTU3OSwxMSArNTc5LDE0IEBACiAJcmV0dXJuIC0xOwogfQogCi1pbnQgdGRhMTAwNHhfd3JpdGVfYnl0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IHJlZywgaW50IGRhdGEpCitpbnQgdGRhMTAwNHhfd3JpdGUoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHU4ICpidWYsIGludCBsZW4pCiB7CiAJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCi0JcmV0dXJuIHRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCByZWcsIGRhdGEpOworCWlmIChsZW4gIT0gMikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIGJ1ZlswXSwgYnVmWzFdKTsKIH0KIAogc3RhdGljIGludCB0ZGExMDA0NV9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQpAQCAtMTIxNiw2ICsxMjE5LDcgQEAKIAogCS5pbml0ID0gdGRhMTAwNDVfaW5pdCwKIAkuc2xlZXAgPSB0ZGExMDA0eF9zbGVlcCwKKwkud3JpdGUgPSB0ZGExMDA0eF93cml0ZSwKIAkuaTJjX2dhdGVfY3RybCA9IHRkYTEwMDR4X2kyY19nYXRlX2N0cmwsCiAKIAkuc2V0X2Zyb250ZW5kID0gdGRhMTAwNHhfc2V0X2ZlLApAQCAtMTI3NCw2ICsxMjc4LDcgQEAKIAogCS5pbml0ID0gdGRhMTAwNDZfaW5pdCwKIAkuc2xlZXAgPSB0ZGExMDA0eF9zbGVlcCwKKwkud3JpdGUgPSB0ZGExMDA0eF93cml0ZSwKIAkuaTJjX2dhdGVfY3RybCA9IHRkYTEwMDR4X2kyY19nYXRlX2N0cmwsCiAKIAkuc2V0X2Zyb250ZW5kID0gdGRhMTAwNHhfc2V0X2ZlLApAQCAtMTMyMyw0ICsxMzI4LDMgQEAKIAogRVhQT1JUX1NZTUJPTCh0ZGExMDA0NV9hdHRhY2gpOwogRVhQT1JUX1NZTUJPTCh0ZGExMDA0Nl9hdHRhY2gpOwotRVhQT1JUX1NZTUJPTCh0ZGExMDA0eF93cml0ZV9ieXRlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA0eC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKaW5kZXggYjg3N2IyMy4uZTI4ZmNhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmgKQEAgLTcxLDEyICs3MSwzMyBAQAogCWludCAoKnJlcXVlc3RfZmlybXdhcmUpKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKipmdywgY2hhciogbmFtZSk7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTEwMDRYKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVERBMTAwNFhfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHRkYTEwMDQ1X2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhMTAwNHhfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYyk7CiAKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGExMDA0Nl9hdHRhY2goY29uc3Qgc3RydWN0IHRkYTEwMDR4X2NvbmZpZyogY29uZmlnLAogCQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwNDVfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDA0eF9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhMTAwNDZfYXR0YWNoKGNvbnN0IHN0cnVjdCB0ZGExMDA0eF9jb25maWcqIGNvbmZpZywKKwkJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1REQTEwMDRYCiAKLWV4dGVybiBpbnQgdGRhMTAwNHhfd3JpdGVfYnl0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgaW50IHJlZywgaW50IGRhdGEpOworc3RhdGljIGlubGluZSBpbnQgdGRhMTAwNHhfd3JpdGVyZWcoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IHJlZywgdTggdmFsKSB7CisJaW50IHIgPSAwOworCXU4IGJ1ZltdID0ge3JlZywgdmFsfTsKKwlpZiAoZmUtPm9wcy53cml0ZSkKKwkJciA9IGZlLT5vcHMud3JpdGUoZmUsIGJ1ZiwgMik7CisJcmV0dXJuIHI7Cit9CiAKICNlbmRpZiAvLyBUREExMDA0WF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA4Ni5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NTZiMGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuYwpAQCAtMCwwICsxLDc0MCBAQAorICAvKgorICAgICBEcml2ZXIgZm9yIFBoaWxpcHMgdGRhMTAwODYgRFZCUyBEZW1vZHVsYXRvcgorCisgICAgIChjKSAyMDA2IEFuZHJldyBkZSBRdWluY2V5CisKKyAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorCisgICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKKyAgICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAidGRhMTAwODYuaCIKKworI2RlZmluZSBTQUNMSyA5NjAwMDAwMAorCitzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgeworCXN0cnVjdCBpMmNfYWRhcHRlciogaTJjOworCWNvbnN0IHN0cnVjdCB0ZGExMDA4Nl9jb25maWcqIGNvbmZpZzsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJLyogcHJpdmF0ZSBkZW1vZCBkYXRhICovCisJdTMyIGZyZXF1ZW5jeTsKKwl1MzIgc3ltYm9sX3JhdGU7Cit9OworCitzdGF0aWMgaW50IGRlYnVnID0gMDsKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChkZWJ1ZykgcHJpbnRrKEtFUk5fREVCVUcgInRkYTEwMDg2OiAiIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIGludCB0ZGExMDA4Nl93cml0ZV9ieXRlKHN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSAqc3RhdGUsIGludCByZWcsIGludCBkYXRhKQoreworCWludCByZXQ7CisJdTggYjBbXSA9IHsgcmVnLCBkYXRhIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAyIH07CisKKwltc2cuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKCIlczogZXJyb3IgcmVnPTB4JXgsIGRhdGE9MHgleCwgcmV0PSVpXG4iLAorCQkJX19GVU5DVElPTl9fLCByZWcsIGRhdGEsIHJldCk7CisKKwlyZXR1cm4gKHJldCAhPSAxKSA/IHJldCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfcmVhZF9ieXRlKHN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSAqc3RhdGUsIGludCByZWcpCit7CisJaW50IHJldDsKKwl1OCBiMFtdID0geyByZWcgfTsKKwl1OCBiMVtdID0geyAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7eyAuZmxhZ3MgPSAwLCAuYnVmID0gYjAsIC5sZW4gPSAxIH0sCisJCQkJeyAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9fTsKKworCW1zZ1swXS5hZGRyID0gc3RhdGUtPmNvbmZpZy0+ZGVtb2RfYWRkcmVzczsKKwltc2dbMV0uYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmMsIG1zZywgMik7CisKKwlpZiAocmV0ICE9IDIpIHsKKwkJZHByaW50aygiJXM6IGVycm9yIHJlZz0weCV4LCByZXQ9JWlcbiIsIF9fRlVOQ1RJT05fXywgcmVnLAorCQkJcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gYjFbMF07Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfd3JpdGVfbWFzayhzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgKnN0YXRlLCBpbnQgcmVnLCBpbnQgbWFzaywgaW50IGRhdGEpCit7CisJaW50IHZhbDsKKworCS8vIHJlYWQgYSBieXRlIGFuZCBjaGVjaworCXZhbCA9IHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgcmVnKTsKKwlpZiAodmFsIDwgMCkKKwkJcmV0dXJuIHZhbDsKKworCS8vIG1hc2sgaWYgb2ZmCisJdmFsID0gdmFsICYgfm1hc2s7CisJdmFsIHw9IGRhdGEgJiAweGZmOworCisJLy8gd3JpdGUgaXQgb3V0IGFnYWluCisJcmV0dXJuIHRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIHJlZywgdmFsKTsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQoreworCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIHJlc2V0CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwMCwgMHgwMCk7CisJbXNsZWVwKDEwKTsKKworCS8vIG1pc2Mgc2V0dXAKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDAxLCAweDk0KTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDAyLCAweDM1KTsgLy8gTk9URTogVFQgZHJpdmVycyBhcHBlYXIgdG8gZGlzYWJsZSBDU1dQCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwMywgMHg2NCk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwNCwgMHg0Myk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwYywgMHgwYyk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgxYiwgMHhiMCk7IC8vIG5vaXNlIHRocmVzaG9sZAorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MjAsIDB4ODkpOyAvLyBtaXNjCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzMCwgMHgwNCk7IC8vIGFjcXVpc2l0aW9uIHBlcmlvZCBsZW5ndGgKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDMyLCAweDAwKTsgLy8gaXJxIG9mZgorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzEsIDB4NTYpOyAvLyBzZXR1cCBBRkMKKworCS8vIHNldHVwIFBMTCAoYXNzdW1lcyAxNk1oeiBYSU4pCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHg1NSwgMHgyYyk7IC8vIG1pc2MgUExMIHNldHVwCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzYSwgMHgwYik7IC8vIE09MTIKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDNiLCAweDAxKTsgLy8gUD0yCisJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHg1NSwgMHgyMCwgMHgwMCk7IC8vIHBvd2VydXAgUExMCisKKwkvLyBzZXR1cCBUUyBpbnRlcmZhY2UKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDExLCAweDgxKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDEyLCAweDgxKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDE5LCAweDQwKTsgLy8gcGFyYWxsZWwgbW9kZSBBICsgTVNCRklSU1QKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDU2LCAweDgwKTsgLy8gcG93ZXJkb3duIFdQTEwgLSB1bnVzZWQgaW4gdGhlIG1vZGUgd2UgdXNlCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHg1NywgMHgwOCk7IC8vIGJ5cGFzcyBXUExMIC0gdW51c2VkIGluIHRoZSBtb2RlIHdlIHVzZQorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MTAsIDB4MmEpOworCisJLy8gc2V0dXAgQURDCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHg1OCwgMHg2MSk7IC8vIEFEQyBzZXR1cAorCXRkYTEwMDg2X3dyaXRlX21hc2soc3RhdGUsIDB4NTgsIDB4MDEsIDB4MDApOyAvLyBwb3dlcnVwIEFEQworCisJLy8gc2V0dXAgQUdDCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwNSwgMHgwQik7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNywgMHg2Myk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzZiwgMHgwMyk7IC8vIE5PVEU6IGZseWR2YiB1c2VzIDB4MGEgYW5kIHZhcmllcyBpdAorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4NDAsIDB4NjQpOworCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4NDEsIDB4NGYpOworCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4NDIsIDB4NDMpOworCisJLy8gc2V0dXAgdml0ZXJiaQorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MWEsIDB4MTEpOyAvLyBWQkVSIDEwXjYsIERWQiwgUVBTSworCisJLy8gc2V0dXAgY2FycmllciByZWNvdmVyeQorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4M2QsIDB4ODApOworCisJLy8gc2V0dXAgU0VDCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNiwgMHgwMCk7IC8vIGFsbCBTRUMgb2ZmCisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgzNCwgKCgoMTw8MTkpICogKDIyMDAwLzEwMDApKSAvIChTQUNMSy8xMDAwKSkpOyAgICAgIC8vIH0gdG9uZSBmcmVxdWVuY3kKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM1LCAoKCgxPDwxOSkgKiAoMjIwMDAvMTAwMCkpIC8gKFNBQ0xLLzEwMDApKSA+PiA4KTsgLy8gfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHRkYTEwMDg2X2Rpc2VxY193YWl0KHN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSAqc3RhdGUpCit7CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMjAwKTsKKwl3aGlsZSAoISh0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4NTApICYgMHgwMSkpIHsKKwkJaWYodGltZV9hZnRlcihqaWZmaWVzLCB0aW1lb3V0KSkgeworCQkJcHJpbnRrKCIlczogZGlzZXFjIHF1ZXVlIG5vdCByZWFkeSwgY29tbWFuZCBtYXkgYmUgbG9zdC5cbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlicmVhazsKKwkJfQorCQltc2xlZXAoMTApOworCX0KK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9zZXRfdG9uZSAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQoreworCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaCh0b25lKSB7CisJY2FzZSBTRUNfVE9ORV9PRkY6CisJCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4MDApOworCQlicmVhazsKKworCWNhc2UgU0VDX1RPTkVfT046CisJCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4MDEpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9zZW5kX21hc3Rlcl9jbWQgKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCSAgICBzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kKiBjbWQpCit7CisJc3RydWN0IHRkYTEwMDg2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCBpOworCXU4IG9sZHZhbDsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChjbWQtPm1zZ19sZW4gPiA2KQorCQlyZXR1cm4gLUVJTlZBTDsKKwlvbGR2YWwgPSB0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4MzYpOworCisJZm9yKGk9MDsgaTwgY21kLT5tc2dfbGVuOyBpKyspIHsKKwkJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHg0OCtpLCBjbWQtPm1zZ1tpXSk7CisJfQorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4MDggfCAoKGNtZC0+bXNnX2xlbiArIDEpIDw8IDQpKTsKKworCXRkYTEwMDg2X2Rpc2VxY193YWl0KHN0YXRlKTsKKworCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIG9sZHZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9zZW5kX2J1cnN0IChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgZmVfc2VjX21pbmlfY21kX3QgbWluaWNtZCkKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggb2xkdmFsID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDM2KTsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXN3aXRjaChtaW5pY21kKSB7CisJY2FzZSBTRUNfTUlOSV9BOgorCQl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCAweDA0KTsKKwkJYnJlYWs7CisKKwljYXNlIFNFQ19NSU5JX0I6CisJCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MzYsIDB4MDYpOworCQlicmVhazsKKwl9CisKKwl0ZGExMDA4Nl9kaXNlcWNfd2FpdChzdGF0ZSk7CisKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM2LCBvbGR2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfc2V0X2ludmVyc2lvbihzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgKnN0YXRlLAorCQkJCSAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpmZV9wYXJhbXMpCit7CisJdTggaW52dmFsID0gMHg4MDsKKworCWRwcmludGsgKCIlcyAlaSAlaVxuIiwgX19GVU5DVElPTl9fLCBmZV9wYXJhbXMtPmludmVyc2lvbiwgc3RhdGUtPmNvbmZpZy0+aW52ZXJ0KTsKKworCXN3aXRjaChmZV9wYXJhbXMtPmludmVyc2lvbikgeworCWNhc2UgSU5WRVJTSU9OX09GRjoKKwkJaWYgKHN0YXRlLT5jb25maWctPmludmVydCkKKwkJCWludnZhbCA9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgSU5WRVJTSU9OX09OOgorCQlpZiAoIXN0YXRlLT5jb25maWctPmludmVydCkKKwkJCWludnZhbCA9IDB4NDA7CisJCWJyZWFrOworCWNhc2UgSU5WRVJTSU9OX0FVVE86CisJCWludnZhbCA9IDB4MDA7CisJCWJyZWFrOworCX0KKwl0ZGExMDA4Nl93cml0ZV9tYXNrKHN0YXRlLCAweDBjLCAweGMwLCBpbnZ2YWwpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfc2V0X3N5bWJvbF9yYXRlKHN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSAqc3RhdGUsCisJCQkJICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVfcGFyYW1zKQoreworCXU4IGRmbiA9IDA7CisJdTggYWZzID0gMDsKKwl1OCBieXAgPSAwOworCXU4IHJlZzM3ID0gMHg0MzsKKwl1OCByZWc0MiA9IDB4NDM7CisJdTY0IGJpZzsKKwl1MzIgdG1wOworCXUzMiBiZHI7CisJdTMyIGJkcmk7CisJdTMyIHN5bWJvbF9yYXRlID0gZmVfcGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGU7CisKKwlkcHJpbnRrICgiJXMgJWlcbiIsIF9fRlVOQ1RJT05fXywgc3ltYm9sX3JhdGUpOworCisJLy8gc2V0dXAgdGhlIGRlY2ltYXRpb24gYW5kIGFudGktYWxpYXNpbmcgZmlsdGVycy4uCisJaWYgKHN5bWJvbF9yYXRlIDwgKHUzMikgKFNBQ0xLICogMC4wMTM3KSkgeworCQlkZm49NDsKKwkJYWZzPTE7CisJfSBlbHNlIGlmIChzeW1ib2xfcmF0ZSA8ICh1MzIpIChTQUNMSyAqIDAuMDIwOCkpIHsKKwkJZGZuPTQ7CisJCWFmcz0wOworCX0gZWxzZSBpZiAoc3ltYm9sX3JhdGUgPCAodTMyKSAoU0FDTEsgKiAwLjAyNzApKSB7CisJCWRmbj0zOworCQlhZnM9MTsKKwl9IGVsc2UgaWYgKHN5bWJvbF9yYXRlIDwgKHUzMikgKFNBQ0xLICogMC4wNDE2KSkgeworCQlkZm49MzsKKwkJYWZzPTA7CisJfSBlbHNlIGlmIChzeW1ib2xfcmF0ZSA8ICh1MzIpIChTQUNMSyAqIDAuMDU1MCkpIHsKKwkJZGZuPTI7CisJCWFmcz0xOworCX0gZWxzZSBpZiAoc3ltYm9sX3JhdGUgPCAodTMyKSAoU0FDTEsgKiAwLjA4MzMpKSB7CisJCWRmbj0yOworCQlhZnM9MDsKKwl9IGVsc2UgaWYgKHN5bWJvbF9yYXRlIDwgKHUzMikgKFNBQ0xLICogMC4xMTAwKSkgeworCQlkZm49MTsKKwkJYWZzPTE7CisJfSBlbHNlIGlmIChzeW1ib2xfcmF0ZSA8ICh1MzIpIChTQUNMSyAqIDAuMTY2NikpIHsKKwkJZGZuPTE7CisJCWFmcz0wOworCX0gZWxzZSBpZiAoc3ltYm9sX3JhdGUgPCAodTMyKSAoU0FDTEsgKiAwLjIyMDApKSB7CisJCWRmbj0wOworCQlhZnM9MTsKKwl9IGVsc2UgaWYgKHN5bWJvbF9yYXRlIDwgKHUzMikgKFNBQ0xLICogMC4zMzMzKSkgeworCQlkZm49MDsKKwkJYWZzPTA7CisJfSBlbHNlIHsKKwkJcmVnMzcgPSAweDYzOworCQlyZWc0MiA9IDB4NGY7CisJCWJ5cD0xOworCX0KKworCS8vIGNhbGN1bGF0ZSBCRFIKKwliaWcgPSAoMVVMTDw8MjEpICogKCh1NjQpIHN5bWJvbF9yYXRlLzEwMDBVTEwpICogKDFVTEw8PGRmbik7CisJYmlnICs9ICgoU0FDTEsvMTAwMFVMTCktMVVMTCk7CisJZG9fZGl2KGJpZywgKFNBQ0xLLzEwMDBVTEwpKTsKKwliZHIgPSBiaWcgJiAweGZmZmZmOworCisJLy8gY2FsY3VsYXRlIEJEUkkKKwl0bXAgPSAoMTw8ZGZuKSooc3ltYm9sX3JhdGUvMTAwMCk7CisJYmRyaSA9ICgoMzIgKiAoU0FDTEsvMTAwMCkpICsgKHRtcC0xKSkgLyB0bXA7CisKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDIxLCAoYWZzIDw8IDcpIHwgZGZuKTsKKwl0ZGExMDA4Nl93cml0ZV9tYXNrKHN0YXRlLCAweDIwLCAweDA4LCBieXAgPDwgMyk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwNiwgYmRyKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDA3LCBiZHIgPj4gOCk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHgwOCwgYmRyID4+IDE2KTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDA5LCBiZHJpKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDM3LCByZWczNyk7CisJdGRhMTAwODZfd3JpdGVfYnl0ZShzdGF0ZSwgMHg0MiwgcmVnNDIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfc2V0X2ZlYyhzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgKnN0YXRlLAorCQkJICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVfcGFyYW1zKQoreworCXU4IGZlY3ZhbDsKKworCWRwcmludGsgKCIlcyAlaVxuIiwgX19GVU5DVElPTl9fLCBmZV9wYXJhbXMtPnUucXBzay5mZWNfaW5uZXIpOworCisJc3dpdGNoKGZlX3BhcmFtcy0+dS5xcHNrLmZlY19pbm5lcikgeworCWNhc2UgRkVDXzFfMjoKKwkJZmVjdmFsID0gMHgwMDsKKwkJYnJlYWs7CisJY2FzZSBGRUNfMl8zOgorCQlmZWN2YWwgPSAweDAxOworCQlicmVhazsKKwljYXNlIEZFQ18zXzQ6CisJCWZlY3ZhbCA9IDB4MDI7CisJCWJyZWFrOworCWNhc2UgRkVDXzRfNToKKwkJZmVjdmFsID0gMHgwMzsKKwkJYnJlYWs7CisJY2FzZSBGRUNfNV82OgorCQlmZWN2YWwgPSAweDA0OworCQlicmVhazsKKwljYXNlIEZFQ182Xzc6CisJCWZlY3ZhbCA9IDB4MDU7CisJCWJyZWFrOworCWNhc2UgRkVDXzdfODoKKwkJZmVjdmFsID0gMHgwNjsKKwkJYnJlYWs7CisJY2FzZSBGRUNfOF85OgorCQlmZWN2YWwgPSAweDA3OworCQlicmVhazsKKwljYXNlIEZFQ19BVVRPOgorCQlmZWN2YWwgPSAweDA4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLTE7CisJfQorCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4MGQsIGZlY3ZhbCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9zZXRfZnJvbnRlbmQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCisJCQkJIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqZmVfcGFyYW1zKQoreworCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlpbnQgcmV0OworCXUzMiBmcmVxID0gMDsKKwlpbnQgZnJlcW9mZjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIHNldCBwYXJhbXMKKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgeworCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBmZV9wYXJhbXMpOworCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCQlpZiAoZmUtPm9wcy50dW5lcl9vcHMuZ2V0X2ZyZXF1ZW5jeSkKKwkJCWZlLT5vcHMudHVuZXJfb3BzLmdldF9mcmVxdWVuY3koZmUsICZmcmVxKTsKKwkJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJfQorCisJLy8gY2FsY2x1YXRlIHRoZSBmcmVxdWVuY3kgb2Zmc2V0IChpbiAqSHoqIG5vdCBrSHopCisJZnJlcW9mZiA9IGZlX3BhcmFtcy0+ZnJlcXVlbmN5IC0gZnJlcTsKKwlmcmVxb2ZmID0gKCgxPDwxNikgKiBmcmVxb2ZmKSAvIChTQUNMSy8xMDAwKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDNkLCAweDgwIHwgKChmcmVxb2ZmID4+IDgpICYgMHg3ZikpOworCXRkYTEwMDg2X3dyaXRlX2J5dGUoc3RhdGUsIDB4M2UsIGZyZXFvZmYpOworCisJaWYgKChyZXQgPSB0ZGExMDA4Nl9zZXRfaW52ZXJzaW9uKHN0YXRlLCBmZV9wYXJhbXMpKSA8IDApCisJCXJldHVybiByZXQ7CisJaWYgKChyZXQgPSB0ZGExMDA4Nl9zZXRfc3ltYm9sX3JhdGUoc3RhdGUsIGZlX3BhcmFtcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKwlpZiAoKHJldCA9IHRkYTEwMDg2X3NldF9mZWMoc3RhdGUsIGZlX3BhcmFtcykpIDwgMCkKKwkJcmV0dXJuIHJldDsKKworCS8vIHNvZnQgcmVzZXQgKyBkaXNhYmxlIFRTIG91dHB1dCB1bnRpbCBsb2NrCisJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHgxMCwgMHg0MCwgMHg0MCk7CisJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHgwMCwgMHgwMSwgMHgwMCk7CisKKwlzdGF0ZS0+c3ltYm9sX3JhdGUgPSBmZV9wYXJhbXMtPnUucXBzay5zeW1ib2xfcmF0ZTsKKwlzdGF0ZS0+ZnJlcXVlbmN5ID0gZmVfcGFyYW1zLT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfZ2V0X2Zyb250ZW5kKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKmZlX3BhcmFtcykKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggdmFsOworCWludCB0bXA7CisJdTY0IHRtcDY0OworCisJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLy8gY2FsY3VsYXRlIHRoZSB1cGRhdGVkIGZyZXF1ZW5jeSAobm90ZTogd2UgY29udmVydCBmcm9tIEh6LT5rSHopCisJdG1wNjQgPSB0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4NTIpOworCXRtcDY0IHw9ICh0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4NTEpIDw8IDgpOworCWlmICh0bXA2NCAmIDB4ODAwMCkKKwkJdG1wNjQgfD0gMHhmZmZmZmZmZmZmZmYwMDAwVUxMOworCXRtcDY0ID0gKHRtcDY0ICogKFNBQ0xLLzEwMDBVTEwpKTsKKwlkb19kaXYodG1wNjQsICgxVUxMPDwxNSkgKiAoMVVMTDw8MSkpOworCWZlX3BhcmFtcy0+ZnJlcXVlbmN5ID0gKGludCkgc3RhdGUtPmZyZXF1ZW5jeSArIChpbnQpIHRtcDY0OworCisJLy8gdGhlIGludmVyc2lvbgorCXZhbCA9IHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgMHgwYyk7CisJaWYgKHZhbCAmIDB4ODApIHsKKwkJc3dpdGNoKHZhbCAmIDB4NDApIHsKKwkJY2FzZSAweDAwOgorCQkJZmVfcGFyYW1zLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOworCQkJaWYgKHN0YXRlLT5jb25maWctPmludmVydCkKKwkJCQlmZV9wYXJhbXMtPmludmVyc2lvbiA9IElOVkVSU0lPTl9PTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmVfcGFyYW1zLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT047CisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+aW52ZXJ0KQorCQkJCWZlX3BhcmFtcy0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIHsKKwkJdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDBmKTsKKwkJc3dpdGNoKHZhbCAmIDB4MDIpIHsKKwkJY2FzZSAweDAwOgorCQkJZmVfcGFyYW1zLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT0ZGOworCQkJaWYgKHN0YXRlLT5jb25maWctPmludmVydCkKKwkJCQlmZV9wYXJhbXMtPmludmVyc2lvbiA9IElOVkVSU0lPTl9PTjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZmVfcGFyYW1zLT5pbnZlcnNpb24gPSBJTlZFUlNJT05fT047CisJCQlpZiAoc3RhdGUtPmNvbmZpZy0+aW52ZXJ0KQorCQkJCWZlX3BhcmFtcy0+aW52ZXJzaW9uID0gSU5WRVJTSU9OX09GRjsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLy8gY2FsY3VsYXRlIHRoZSB1cGRhdGVkIHN5bWJvbCByYXRlCisJdG1wID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDFkKTsKKwlpZiAodG1wICYgMHg4MCkKKwkJdG1wIHw9IDB4ZmZmZmZmMDA7CisJdG1wID0gKHRtcCAqIDQ4MCAqICgxPDwxKSkgLyAxMjg7CisJdG1wID0gKChzdGF0ZS0+c3ltYm9sX3JhdGUvMTAwMCkgKiB0bXApIC8gKDEwMDAwMDAvMTAwMCk7CisJZmVfcGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUgPSBzdGF0ZS0+c3ltYm9sX3JhdGUgKyB0bXA7CisKKwkvLyB0aGUgRkVDCisJdmFsID0gKHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgMHgwZCkgJiAweDcwKSA+PiA0OworCXN3aXRjaCh2YWwpIHsKKwljYXNlIDB4MDA6CisJCWZlX3BhcmFtcy0+dS5xcHNrLmZlY19pbm5lciA9IEZFQ18xXzI7CisJCWJyZWFrOworCWNhc2UgMHgwMToKKwkJZmVfcGFyYW1zLT51LnFwc2suZmVjX2lubmVyID0gRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAweDAyOgorCQlmZV9wYXJhbXMtPnUucXBzay5mZWNfaW5uZXIgPSBGRUNfM180OworCQlicmVhazsKKwljYXNlIDB4MDM6CisJCWZlX3BhcmFtcy0+dS5xcHNrLmZlY19pbm5lciA9IEZFQ180XzU7CisJCWJyZWFrOworCWNhc2UgMHgwNDoKKwkJZmVfcGFyYW1zLT51LnFwc2suZmVjX2lubmVyID0gRkVDXzVfNjsKKwkJYnJlYWs7CisJY2FzZSAweDA1OgorCQlmZV9wYXJhbXMtPnUucXBzay5mZWNfaW5uZXIgPSBGRUNfNl83OworCQlicmVhazsKKwljYXNlIDB4MDY6CisJCWZlX3BhcmFtcy0+dS5xcHNrLmZlY19pbm5lciA9IEZFQ183Xzg7CisJCWJyZWFrOworCWNhc2UgMHgwNzoKKwkJZmVfcGFyYW1zLT51LnFwc2suZmVjX2lubmVyID0gRkVDXzhfOTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3N0YXR1c190ICpmZV9zdGF0dXMpCit7CisJc3RydWN0IHRkYTEwMDg2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCXZhbCA9IHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgMHgwZSk7CisJKmZlX3N0YXR1cyA9IDA7CisJaWYgKHZhbCAmIDB4MDEpCisJCSpmZV9zdGF0dXMgfD0gRkVfSEFTX1NJR05BTDsKKwlpZiAodmFsICYgMHgwMikKKwkJKmZlX3N0YXR1cyB8PSBGRV9IQVNfQ0FSUklFUjsKKwlpZiAodmFsICYgMHgwNCkKKwkJKmZlX3N0YXR1cyB8PSBGRV9IQVNfVklURVJCSTsKKwlpZiAodmFsICYgMHgwOCkKKwkJKmZlX3N0YXR1cyB8PSBGRV9IQVNfU1lOQzsKKwlpZiAodmFsICYgMHgxMCkKKwkJKmZlX3N0YXR1cyB8PSBGRV9IQVNfTE9DSzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTEwMDg2X3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MTYgKiBzaWduYWwpCit7CisJc3RydWN0IHRkYTEwMDg2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IF9zdHI7CisKKwlkcHJpbnRrICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlfc3RyID0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDQzKTsKKwkqc2lnbmFsID0gKF9zdHIgPDwgOCkgfCBfc3RyOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHUxNiAqIHNucikKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdTggX3NucjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCV9zbnIgPSB0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4MWMpOworCSpzbnIgPSAoX3NuciA8PCA4KSB8IF9zbnI7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9yZWFkX3VjYmxvY2tzKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIHVjYmxvY2tzKQoreworCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCS8vIHJlYWQgaXQKKwkqdWNibG9ja3MgPSB0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4MTgpICYgMHg3ZjsKKworCS8vIHJlc2V0IGNvdW50ZXIKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDE4LCAweDAwKTsKKwl0ZGExMDA4Nl93cml0ZV9ieXRlKHN0YXRlLCAweDE4LCAweDgwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTEwMDg2X3JlYWRfYmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCB1MzIqIGJlcikKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUqIHN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlkcHJpbnRrICgiJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwkvLyByZWFkIGl0CisJKmJlciA9IDA7CisJKmJlciB8PSB0ZGExMDA4Nl9yZWFkX2J5dGUoc3RhdGUsIDB4MTUpOworCSpiZXIgfD0gdGRhMTAwODZfcmVhZF9ieXRlKHN0YXRlLCAweDE2KSA8PCA4OworCSpiZXIgfD0gKHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgMHgxNykgJiAweGYpIDw8IDE2OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCit7CisJc3RydWN0IHRkYTEwMDg2X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHgwMCwgMHgwOCwgMHgwOCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0ZGExMDA4Nl9pMmNfZ2F0ZV9jdHJsKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSogc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsgKCIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChlbmFibGUpIHsKKwkJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHgwMCwgMHgxMCwgMHgxMCk7CisJfSBlbHNlIHsKKwkJdGRhMTAwODZfd3JpdGVfbWFzayhzdGF0ZSwgMHgwMCwgMHgxMCwgMHgwMCk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhMTAwODZfZ2V0X3R1bmVfc2V0dGluZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncyogZmVzZXR0aW5ncykKK3sKKwlpZiAoZmVzZXR0aW5ncy0+cGFyYW1ldGVycy51LnFwc2suc3ltYm9sX3JhdGUgPiAyMDAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA1MDsKKwkJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMjAwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gODAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gMTIwMDAwMDApIHsKKwkJZmVzZXR0aW5ncy0+bWluX2RlbGF5X21zID0gMTAwOworCQlmZXNldHRpbmdzLT5zdGVwX3NpemUgPSAxNTAwOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSA5MDAwOworCX0gZWxzZSBpZiAoZmVzZXR0aW5ncy0+cGFyYW1ldGVycy51LnFwc2suc3ltYm9sX3JhdGUgPiA4MDAwMDAwKSB7CisJCWZlc2V0dGluZ3MtPm1pbl9kZWxheV9tcyA9IDEwMDsKKwkJZmVzZXR0aW5ncy0+c3RlcF9zaXplID0gMTAwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gODAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gNDAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAxMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IDUwMDsKKwkJZmVzZXR0aW5ncy0+bWF4X2RyaWZ0ID0gNzAwMDsKKwl9IGVsc2UgaWYgKGZlc2V0dGluZ3MtPnBhcmFtZXRlcnMudS5xcHNrLnN5bWJvbF9yYXRlID4gMjAwMDAwMCkgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAyMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IChmZXNldHRpbmdzLT5wYXJhbWV0ZXJzLnUucXBzay5zeW1ib2xfcmF0ZSAvIDgwMDApOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAxNCAqIGZlc2V0dGluZ3MtPnN0ZXBfc2l6ZTsKKwl9IGVsc2UgeworCQlmZXNldHRpbmdzLT5taW5fZGVsYXlfbXMgPSAyMDA7CisJCWZlc2V0dGluZ3MtPnN0ZXBfc2l6ZSA9IChmZXNldHRpbmdzLT5wYXJhbWV0ZXJzLnUucXBzay5zeW1ib2xfcmF0ZSAvIDgwMDApOworCQlmZXNldHRpbmdzLT5tYXhfZHJpZnQgPSAxOCAqIGZlc2V0dGluZ3MtPnN0ZXBfc2l6ZTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdGRhMTAwODZfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJdGRhMTAwODZfc2xlZXAoZmUpOworCWtmcmVlKHN0YXRlKTsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIHRkYTEwMDg2X29wcyA9IHsKKworCS5pbmZvID0geworCQkubmFtZSAgICAgPSAiUGhpbGlwcyBUREExMDA4NiBEVkItUyIsCisJCS50eXBlICAgICA9IEZFX1FQU0ssCisJCS5mcmVxdWVuY3lfbWluICAgID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCAgICA9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSAxMjUsICAgICAvKiBrSHogZm9yIFFQU0sgZnJvbnRlbmRzICovCisJCS5zeW1ib2xfcmF0ZV9taW4gID0gMTAwMDAwMCwKKwkJLnN5bWJvbF9yYXRlX21heCAgPSA0NTAwMDAwMCwKKwkJLmNhcHMgPSBGRV9DQU5fSU5WRVJTSU9OX0FVVE8gfAorCQkJRkVfQ0FOX0ZFQ18xXzIgfCBGRV9DQU5fRkVDXzJfMyB8IEZFX0NBTl9GRUNfM180IHwKKwkJCUZFX0NBTl9GRUNfNV82IHwgRkVfQ0FOX0ZFQ182XzcgfCBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9GRUNfQVVUTyB8CisJCQlGRV9DQU5fUVBTSworCX0sCisKKwkucmVsZWFzZSA9IHRkYTEwMDg2X3JlbGVhc2UsCisKKwkuaW5pdCA9IHRkYTEwMDg2X2luaXQsCisJLnNsZWVwID0gdGRhMTAwODZfc2xlZXAsCisJLmkyY19nYXRlX2N0cmwgPSB0ZGExMDA4Nl9pMmNfZ2F0ZV9jdHJsLAorCisJLnNldF9mcm9udGVuZCA9IHRkYTEwMDg2X3NldF9mcm9udGVuZCwKKwkuZ2V0X2Zyb250ZW5kID0gdGRhMTAwODZfZ2V0X2Zyb250ZW5kLAorCS5nZXRfdHVuZV9zZXR0aW5ncyA9IHRkYTEwMDg2X2dldF90dW5lX3NldHRpbmdzLAorCisJLnJlYWRfc3RhdHVzID0gdGRhMTAwODZfcmVhZF9zdGF0dXMsCisJLnJlYWRfYmVyID0gdGRhMTAwODZfcmVhZF9iZXIsCisJLnJlYWRfc2lnbmFsX3N0cmVuZ3RoID0gdGRhMTAwODZfcmVhZF9zaWduYWxfc3RyZW5ndGgsCisJLnJlYWRfc25yID0gdGRhMTAwODZfcmVhZF9zbnIsCisJLnJlYWRfdWNibG9ja3MgPSB0ZGExMDA4Nl9yZWFkX3VjYmxvY2tzLAorCisJLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSB0ZGExMDA4Nl9zZW5kX21hc3Rlcl9jbWQsCisJLmRpc2VxY19zZW5kX2J1cnN0ID0gdGRhMTAwODZfc2VuZF9idXJzdCwKKwkuc2V0X3RvbmUgPSB0ZGExMDA4Nl9zZXRfdG9uZSwKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQqIHRkYTEwMDg2X2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhMTAwODZfY29uZmlnKiBjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlzdHJ1Y3QgdGRhMTAwODZfc3RhdGUgKnN0YXRlOworCisJZHByaW50ayAoIiVzXG4iLCBfX0ZVTkNUSU9OX18pOworCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB0ZGExMDA4Nl9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJLyogc2V0dXAgdGhlIHN0YXRlICovCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCisJLyogY2hlY2sgaWYgdGhlIGRlbW9kIGlzIHRoZXJlICovCisJaWYgKHRkYTEwMDg2X3JlYWRfYnl0ZShzdGF0ZSwgMHgxZSkgIT0gMHhlMSkgeworCQlrZnJlZShzdGF0ZSk7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIGNyZWF0ZSBkdmJfZnJvbnRlbmQgKi8KKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZ0ZGExMDA4Nl9vcHMsIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7Cit9CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJUdXJuIG9uL29mZiBmcm9udGVuZCBkZWJ1Z2dpbmcgKGRlZmF1bHQ6b2ZmKS4iKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFREQTEwMDg2IERWQi1TIERlbW9kdWxhdG9yIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgZGUgUXVpbmNleSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitFWFBPUlRfU1lNQk9MKHRkYTEwMDg2X2F0dGFjaCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGExMDA4Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MDYxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwODYuaApAQCAtMCwwICsxLDQxIEBACisgIC8qCisgICAgIERyaXZlciBmb3IgUGhpbGlwcyB0ZGExMDA4NiBEVkJTIEZyb250ZW5kCisKKyAgICAgKGMpIDIwMDYgQW5kcmV3IGRlIFF1aW5jZXkKKworICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisKKyAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAgKi8KKworI2lmbmRlZiBUREExMDA4Nl9ICisjZGVmaW5lIFREQTEwMDg2X0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CisKK3N0cnVjdCB0ZGExMDA4Nl9jb25maWcKK3sKKwkvKiB0aGUgZGVtb2R1bGF0b3IncyBpMmMgYWRkcmVzcyAqLworCXU4IGRlbW9kX2FkZHJlc3M7CisKKwkvKiBkb2VzIHRoZSAiaW52ZXJzaW9uIiBuZWVkIGludmVydGVkPyAqLworCXU4IGludmVydDsKK307CisKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGExMDA4Nl9hdHRhY2goY29uc3Qgc3RydWN0IHRkYTEwMDg2X2NvbmZpZyogY29uZmlnLAorCQkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworCisjZW5kaWYgLy8gVERBMTAwODZfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgwODMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MDgzLmgKaW5kZXggZTdhNDhmNi4uYWFlMTViZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgwODMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODA4My5oCkBAIC0zNSw3ICszNSwxNiBAQAogCXU4IGRlbW9kX2FkZHJlc3M7CiB9OwogCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1REQTgwODMpIHx8IGRlZmluZWQoQ09ORklHX0RWQl9UREE4MDgzX01PRFVMRSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiB0ZGE4MDgzX2F0dGFjaChjb25zdCBzdHJ1Y3QgdGRhODA4M19jb25maWcqIGNvbmZpZywKIAkJCQkJICAgc3RydWN0IGkyY19hZGFwdGVyKiBpMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdGRhODA4M19hdHRhY2goY29uc3Qgc3RydWN0IHRkYTgwODNfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19GVU5DVElPTl9fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvLyBDT05GSUdfRFZCX1REQTgwODMKIAogI2VuZGlmIC8vIFREQTgwODNfSApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTgyNnguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhYjI2YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmMKQEAgLTAsMCArMSwxNzMgQEAKKyAgLyoKKyAgICAgRHJpdmVyIGZvciBQaGlsaXBzIHRkYTgyNjIvdGRhODI2MyBEVkJTIFNpbGljb24gdHVuZXJzCisKKyAgICAgKGMpIDIwMDYgQW5kcmV3IGRlIFF1aW5jZXkKKworICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisKKyAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZHZiL2Zyb250ZW5kLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNpbmNsdWRlICJ0ZGE4MjZ4LmgiCisKK3N0YXRpYyBpbnQgZGVidWcgPSAwOworI2RlZmluZSBkcHJpbnRrKGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKGRlYnVnKSBwcmludGsoS0VSTl9ERUJVRyAidGRhODI2eDogIiBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisKK3N0cnVjdCB0ZGE4MjZ4X3ByaXYgeworCS8qIGkyYyBkZXRhaWxzICovCisJaW50IGkyY19hZGRyZXNzOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXU4IGhhc19sb29wdGhyb3VnaDoxOworCXUzMiBmcmVxdWVuY3k7Cit9OworCitzdGF0aWMgaW50IHRkYTgyNnhfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlpZiAoZmUtPnR1bmVyX3ByaXYpCisJCWtmcmVlKGZlLT50dW5lcl9wcml2KTsKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdGRhODI2eF9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgdGRhODI2eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldDsKKwl1OCBidWYgW10gPSB7IDB4MDAsIDB4OGQgfTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSBidWYsIC5sZW4gPSAyIH07CisKKwlkcHJpbnRrKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoIXByaXYtPmhhc19sb29wdGhyb3VnaCkKKwkJYnVmWzFdID0gMHhhZDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIgKHByaXYtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAocmV0ID09IDEpID8gMCA6IHJldDsKK30KKworc3RhdGljIGludCB0ZGE4MjZ4X3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCB0ZGE4MjZ4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0OworCXUzMiBkaXY7CisJdTggYnVmIFsxMV07CisJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMTEgfTsKKworCWRwcmludGsoIiVzOlxuIiwgX19GVU5DVElPTl9fKTsKKworCWRpdiA9IChwYXJhbXMtPmZyZXF1ZW5jeSArICgxMDAwLTEpKSAvIDEwMDA7CisKKwlidWZbMF0gPSAweDAwOyAvLyBzdWJhZGRyZXNzCisJYnVmWzFdID0gMHgwOTsgLy8gcG93ZXJkb3duIFJTU0kgKyB0aGUgbWFnaWMgdmFsdWUgMQorCWlmICghcHJpdi0+aGFzX2xvb3B0aHJvdWdoKQorCQlidWZbMV0gfD0gMHgyMDsgLy8gcG93ZXIgZG93biBsb29wdGhyb3VnaCBpZiBub3QgbmVlZGVkCisJYnVmWzJdID0gKDE8PDUpIHwgMHgwYjsgLy8gMU1oeiArIDAuNDUgVkNPCisJYnVmWzNdID0gZGl2ID4+IDc7CisJYnVmWzRdID0gZGl2IDw8IDE7CisJYnVmWzVdID0gMHhmZjsgLy8gYmFzZWRiYW5kIGZpbHRlciB0byBtYXgKKwlidWZbNl0gPSAweGZlOyAvLyBnYWlucyBhdCBtYXggKyBubyBSRiBhdHRlbnVhdGlvbgorCWJ1Zls3XSA9IDB4ODM7IC8vIGNoYXJnZSBwdW1wcyBhdCBoaWdoLCB0ZXN0cyBvZmYKKwlidWZbOF0gPSAweDgwOyAvLyByZWNvbW1lbmRlZCB2YWx1ZSA0IGZvciBBTVBWQ08gKyBkaXNhYmxlIHBvcnRzLgorCWJ1Zls5XSA9IDB4MWE7IC8vIG5vcm1hbCBjYWx0aW1lICsgcmVjb21tZW5kZWQgdmFsdWVzIGZvciBTRUxUSCArIFNFTFZUTAorCWJ1ZlsxMF0gPSAweGQ0OyAvLyByZWNvbW1lbmRlZCB2YWx1ZSAxMyBmb3IgQkJJQVMgKyB1bmtub3duIGJpdCBzZXQgb24KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisJaWYgKChyZXQgPSBpMmNfdHJhbnNmZXIgKHByaXYtPmkyYywgJm1zZywgMSkpICE9IDEpIHsKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXByaXYtPmZyZXF1ZW5jeSA9IGRpdiAqIDEwMDA7CisKKwlyZXR1cm4gKHJldCA9PSAxKSA/IDAgOiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgdGRhODI2eF9nZXRfZnJlcXVlbmN5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3QgdGRhODI2eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJKmZyZXF1ZW5jeSA9IHByaXYtPmZyZXF1ZW5jeTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHRkYTgyNnhfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJQaGlsaXBzIFREQTgyNlgiLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9taW4gPSAyMTc1MDAwCisJfSwKKwkucmVsZWFzZSA9IHRkYTgyNnhfcmVsZWFzZSwKKwkuc2xlZXAgPSB0ZGE4MjZ4X3NsZWVwLAorCS5zZXRfcGFyYW1zID0gdGRhODI2eF9zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gdGRhODI2eF9nZXRfZnJlcXVlbmN5LAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqdGRhODI2eF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IGhhc19sb29wdGhyb3VnaCkKK3sKKwlzdHJ1Y3QgdGRhODI2eF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCBiMSBbXSA9IHsgMCwgMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBhZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9IGIxLCAubGVuID0gMiB9OworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlczpcbiIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCXJldCA9IGkyY190cmFuc2ZlciAoaTJjLCAmbXNnLCAxKTsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJaWYgKHJldCAhPSAxKQorCQlyZXR1cm4gTlVMTDsKKwlpZiAoIShiMVsxXSAmIDB4ODApKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdGRhODI2eF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5pMmNfYWRkcmVzcyA9IGFkZHI7CisJcHJpdi0+aTJjID0gaTJjOworCXByaXYtPmhhc19sb29wdGhyb3VnaCA9IGhhc19sb29wdGhyb3VnaDsKKworCW1lbWNweSgmZmUtPm9wcy50dW5lcl9vcHMsICZ0ZGE4MjZ4X3R1bmVyX29wcywgc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisKKwlyZXR1cm4gZmU7Cit9CitFWFBPUlRfU1lNQk9MKHRkYTgyNnhfYXR0YWNoKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIlR1cm4gb24vb2ZmIGZyb250ZW5kIGRlYnVnZ2luZyAoZGVmYXVsdDpvZmYpLiIpOworCitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBUREE4MjZ4IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiQW5kcmV3IGRlIFF1aW5jZXkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90ZGE4MjZ4LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMDc2MDcKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhODI2eC5oCkBAIC0wLDAgKzEsNDAgQEAKKyAgLyoKKyAgICAgRHJpdmVyIGZvciBQaGlsaXBzIHRkYTgyNjIvdGRhODI2MyBEVkJTIFNpbGljb24gdHVuZXJzCisKKyAgICAgKGMpIDIwMDYgQW5kcmV3IGRlIFF1aW5jZXkKKworICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisKKyAgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworICAqLworCisjaWZuZGVmIF9fRFZCX1REQTgyNlhfSF9fCisjZGVmaW5lIF9fRFZCX1REQTgyNlhfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworLyoqCisgKiBBdHRhY2ggYSB0ZGE4MjZ4IHR1bmVyIHRvIHRoZSBzdXBwbGllZCBmcm9udGVuZCBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIGZlIEZyb250ZW5kIHRvIGF0dGFjaCB0by4KKyAqIEBwYXJhbSBhZGRyIGkyYyBhZGRyZXNzIG9mIHRoZSB0dW5lci4KKyAqIEBwYXJhbSBpMmMgaTJjIGFkYXB0ZXIgdG8gdXNlLgorICogQHBhcmFtIGhhc19sb29wdGhyb3VnaCBTZXQgdG8gMSBpZiB0aGUgY2FyZCBoYXMgYSBsb29wdGhyb3VnaCBSRiBjb25uZWN0b3IuCisgKiBAcmV0dXJuIEZFIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqdGRhODI2eF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IGhhc19sb29wdGhyb3VnaCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3R1YTYxMDAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODg1NTQzOQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qKgorICogRHJpdmVyIGZvciBJbmZpbmVvbiB0dWE2MTAwIHBsbC4KKyAqCisgKiAoYykgMjAwNiBBbmRyZXcgZGUgUXVpbmNleQorICoKKyAqIEJhc2VkIG9uIGNvZGUgZm91bmQgaW4gYnVkZ2V0LWF2LmMsIHdoaWNoIGhhcyB0aGUgZm9sbG93aW5nOgorICogQ29tcGlsZWQgZnJvbSB2YXJpb3VzIHNvdXJjZXMgYnkgTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4KKyAqCisgKiBDSSBpbnRlcmZhY2Ugc3VwcG9ydCAoYykgMjAwNCBPbGl2aWVyIEdvdXJuZXQgPG9nb3VybmV0QGFuZXZpYS5jb20+ICYKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFuZHJldyBkZSBRdWluY2V5IDxhZHFfZHZiQGxpZHNraWFsZi5uZXQ+CisgKgorICogQ29weXJpZ2h0IChDKSAyMDAyIFJhbHBoIE1ldHpsZXIgPHJqa21AbWV0emxlcmJyb3MuZGU+CisgKgorICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDIgUmFscGggIE1ldHpsZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAmIE1hcmN1cyBNZXR6bGVyIGZvciBjb252ZXJnZW5jZSBpbnRlZ3JhdGVkIG1lZGlhIEdtYkgKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2luY2x1ZGUgInR1YTYxMDAuaCIKKworc3RydWN0IHR1YTYxMDBfcHJpdiB7CisJLyogaTJjIGRldGFpbHMgKi8KKwlpbnQgaTJjX2FkZHJlc3M7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmM7CisJdTMyIGZyZXF1ZW5jeTsKK307CisKK3N0YXRpYyBpbnQgdHVhNjEwMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCWlmIChmZS0+dHVuZXJfcHJpdikKKwkJa2ZyZWUoZmUtPnR1bmVyX3ByaXYpOworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB0dWE2MTAwX3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB0dWE2MTAwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0OworCXU4IHJlZzBbXSA9IHsgMHgwMCwgMHgwMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkcmVzcywgLmZsYWdzID0gMCwgLmJ1ZiA9IHJlZzAsIC5sZW4gPSAyIH07CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCWlmICgocmV0ID0gaTJjX3RyYW5zZmVyIChwcml2LT5pMmMsICZtc2csIDEpKSAhPSAxKSB7CisJCXByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19GVU5DVElPTl9fKTsKKwl9CisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAocmV0ID09IDEpID8gMCA6IHJldDsKK30KKworc3RhdGljIGludCB0dWE2MTAwX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgdHVhNjEwMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTMyIGRpdjsKKwl1MzIgcHJlZGl2OworCXU4IHJlZzBbXSA9IHsgMHgwMCwgMHgwMCB9OworCXU4IHJlZzFbXSA9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCB9OworCXU4IHJlZzJbXSA9IHsgMHgwMiwgMHgwMCwgMHgwMCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZzAgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSByZWcwLCAubGVuID0gMiB9OworCXN0cnVjdCBpMmNfbXNnIG1zZzEgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSByZWcxLCAubGVuID0gNCB9OworCXN0cnVjdCBpMmNfbXNnIG1zZzIgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHJlc3MsIC5mbGFncyA9IDAsIC5idWYgPSByZWcyLCAubGVuID0gMyB9OworCisjZGVmaW5lIF9SIDQKKyNkZWZpbmUgX1AgMzIKKyNkZWZpbmUgX3JpIDQwMDAwMDAKKworCS8vIHNldHVwIHJlZ2lzdGVyIDAKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAyMDAwMDAwKSB7CisJCXJlZzBbMV0gPSAweDAzOworCX0gZWxzZSB7CisJCXJlZzBbMV0gPSAweDA3OworCX0KKworCS8vIHNldHVwIHJlZ2lzdGVyIDEKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNjMwMDAwKSB7CisJCXJlZzFbMV0gPSAweDJjOworCX0gZWxzZSB7CisJCXJlZzFbMV0gPSAweDBjOworCX0KKwlpZiAoX1AgPT0gNjQpCisJCXJlZzFbMV0gfD0gMHg0MDsKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPj0gMTUyNTAwMCkKKwkJcmVnMVsxXSB8PSAweDgwOworCisJLy8gcmVnaXN0ZXIgMgorCXJlZzJbMV0gPSAoX1IgPj4gOCkgJiAweDAzOworCXJlZzJbMl0gPSBfUjsKKwlpZiAocGFyYW1zLT5mcmVxdWVuY3kgPCAxNDU1MDAwKSB7CisJCXJlZzJbMV0gfD0gMHgxYzsKKwl9IGVsc2UgaWYgKHBhcmFtcy0+ZnJlcXVlbmN5IDwgMTYzMDAwMCkgeworCQlyZWcyWzFdIHw9IDB4MGM7CisJfSBlbHNlIHsKKwkJcmVnMlsxXSB8PSAweDFjOworCX0KKworCS8vIFRoZSBOIGRpdmlzb3IgcmF0aW8gKG5vdGU6IHBhcmFtcy0+ZnJlcXVlbmN5IGlzIGluIGtIeiwgYnV0IHdlIG5lZWQgaXQgaW4gSHopCisJcHJlZGl2ID0gKHBhcmFtcy0+ZnJlcXVlbmN5ICogX1IpIC8gKF9yaSAvIDEwMDApOworCWRpdiA9IHByZWRpdiAvIF9QOworCXJlZzFbMV0gfD0gKGRpdiA+PiA5KSAmIDB4MDM7CisJcmVnMVsyXSA9IGRpdiA+PiAxOworCXJlZzFbM10gPSAoZGl2IDw8IDcpOworCXByaXYtPmZyZXF1ZW5jeSA9ICgoZGl2ICogX1ApICogKF9yaSAvIDEwMDApKSAvIF9SOworCisJLy8gRmluYWxseSwgY2FsY3VsYXRlIGFuZCBzdG9yZSB0aGUgdmFsdWUgZm9yIEEKKwlyZWcxWzNdIHw9IChwcmVkaXYgLSAoZGl2Kl9QKSkgJiAweDdmOworCisjdW5kZWYgX1IKKyN1bmRlZiBfUAorI3VuZGVmIF9yaQorCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZzAsIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZzIsIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZzEsIDEpICE9IDEpCisJCXJldHVybiAtRUlPOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHR1YTYxMDBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IHR1YTYxMDBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCSpmcmVxdWVuY3kgPSBwcml2LT5mcmVxdWVuY3k7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX3R1bmVyX29wcyB0dWE2MTAwX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiSW5maW5lb24gVFVBNjEwMCIsCisJCS5mcmVxdWVuY3lfbWluID0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heCA9IDIxNTAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcCA9IDEwMDAsCisJfSwKKwkucmVsZWFzZSA9IHR1YTYxMDBfcmVsZWFzZSwKKwkuc2xlZXAgPSB0dWE2MTAwX3NsZWVwLAorCS5zZXRfcGFyYW1zID0gdHVhNjEwMF9zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gdHVhNjEwMF9nZXRfZnJlcXVlbmN5LAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqdHVhNjEwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3QgdHVhNjEwMF9wcml2ICpwcml2ID0gTlVMTDsKKwl1OCBiMSBbXSA9IHsgMHg4MCB9OworCXU4IGIyIFtdID0geyAweDAwIH07CisJc3RydWN0IGkyY19tc2cgbXNnIFtdID0geyB7IC5hZGRyID0gYWRkciwgLmZsYWdzID0gMCwgLmJ1ZiA9IGIxLCAubGVuID0gMSB9LAorCQkJCSAgeyAuYWRkciA9IGFkZHIsIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gYjIsIC5sZW4gPSAxIH0gfTsKKwlpbnQgcmV0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlyZXQgPSBpMmNfdHJhbnNmZXIgKGkyYywgbXNnLCAyKTsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJaWYgKHJldCAhPSAyKQorCQlyZXR1cm4gTlVMTDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdHVhNjEwMF9wcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2LT5pMmNfYWRkcmVzcyA9IGFkZHI7CisJcHJpdi0+aTJjID0gaTJjOworCisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnR1YTYxMDBfdHVuZXJfb3BzLCBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwlmZS0+dHVuZXJfcHJpdiA9IHByaXY7CisJcmV0dXJuIGZlOworfQorRVhQT1JUX1NZTUJPTCh0dWE2MTAwX2F0dGFjaCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRFZCIHR1YTYxMDAgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJBbmRyZXcgZGUgUXVpbmNleSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3R1YTYxMDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY5ODAzMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy90dWE2MTAwLmgKQEAgLTAsMCArMSw0NyBAQAorLyoqCisgKiBEcml2ZXIgZm9yIEluZmluZW9uIHR1YTYxMDAgUExMLgorICoKKyAqIChjKSAyMDA2IEFuZHJldyBkZSBRdWluY2V5CisgKgorICogQmFzZWQgb24gY29kZSBmb3VuZCBpbiBidWRnZXQtYXYuYywgd2hpY2ggaGFzIHRoZSBmb2xsb3dpbmc6CisgKiBDb21waWxlZCBmcm9tIHZhcmlvdXMgc291cmNlcyBieSBNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPgorICoKKyAqIENJIGludGVyZmFjZSBzdXBwb3J0IChjKSAyMDA0IE9saXZpZXIgR291cm5ldCA8b2dvdXJuZXRAYW5ldmlhLmNvbT4gJgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQW5kcmV3IGRlIFF1aW5jZXkgPGFkcV9kdmJAbGlkc2tpYWxmLm5ldD4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUmFscGggTWV0emxlciA8cmprbUBtZXR6bGVyYnJvcy5kZT4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMiBSYWxwaCAgTWV0emxlcgorICogICAgICAgICAgICAgICAgICAgICAgICYgTWFyY3VzIE1ldHpsZXIgZm9yIGNvbnZlcmdlbmNlIGludGVncmF0ZWQgbWVkaWEgR21iSAorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBfX0RWQl9UVUE2MTAwX0hfXworI2RlZmluZSBfX0RWQl9UVUE2MTAwX0hfXworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfVFVBNjEwMCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1RVQTYxMDBfTU9EVUxFKQorZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnR1YTYxMDBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgYWRkciwgc3RydWN0IGkyY19hZGFwdGVyICppMmMpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdHVhNjEwMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBhZGRyLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9UVUE2MTAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczE4MjAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxODIwLmgKaW5kZXggNTIwZjA5NS4uZjBjOWRkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczE4MjAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMTgyMC5oCkBAIC00MSw3ICs0MSwxNiBAQAogCXU4IHNlbGFnYzoxOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9WRVMxODIwKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVkVTMTgyMF9NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdmVzMTgyMF9hdHRhY2goY29uc3Qgc3RydWN0IHZlczE4MjBfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCogdmVzMTgyMF9hdHRhY2goY29uc3Qgc3RydWN0IHZlczE4MjBfY29uZmlnKiBjb25maWcsCisJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjLCB1OCBwd20pCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8vIENPTkZJR19EVkJfVkVTMTgyMAogCiAjZW5kaWYgLy8gVkVTMTgyMF9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMXg5My5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3ZlczF4OTMuaAppbmRleCBiYTg4YWUwLi4zOTVmZWQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdmVzMXg5My5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy92ZXMxeDkzLmgKQEAgLTQwLDcgKzQwLDE2IEBACiAJdTggaW52ZXJ0X3B3bToxOwogfTsKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9WRVMxWDkzKSB8fCBkZWZpbmVkKENPTkZJR19EVkJfVkVTMVg5M19NT0RVTEUpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogdmVzMXg5M19hdHRhY2goY29uc3Qgc3RydWN0IHZlczF4OTNfY29uZmlnKiBjb25maWcsCiAJCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciogaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHZlczF4OTNfYXR0YWNoKGNvbnN0IHN0cnVjdCB2ZXMxeDkzX2NvbmZpZyogY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIqIGkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9WRVMxWDkzCiAKICNlbmRpZiAvLyBWRVMxWDkzX0gKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCmluZGV4IDJiOTVlOGIuLjBlOWI1OWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYwpAQCAtMTQwLDYgKzE0MCw4IEBACiAJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NUUsIDB4MDApOwogCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDY1LCAweDVBKTsKIAl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2NiwgMHhFOSk7CisJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NkMsIDB4Q0QpOworCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweDZELCAweDdFKTsKIAl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg2MiwgMHgwQSk7CiAKIAkvLyBpZiB0aGVyZSBpcyBubyBhdHRhY2hlZCBzZWNvbmRhcnkgdHVuZXIsIHdlIGNhbGwgc2V0X3BhcmFtcyB0byBwcm9ncmFtCkBAIC0xNjgsNiArMTcwLDcgQEAKIAkvLyBldmVuIGlmIHRoZXJlIGlzbid0IGEgUExMIGF0dGFjaGVkIHRvIHRoZSBzZWNvbmRhcnkgYnVzCiAJemwxMDM1M193cml0ZShmZSwgcGxsYnVmLCBzaXplb2YocGxsYnVmKSk7CiAKKwl6bDEwMzUzX3NpbmdsZV93cml0ZShmZSwgMHg1RiwgMHgxMyk7CiAJemwxMDM1M19zaW5nbGVfd3JpdGUoZmUsIDB4NzAsIDB4MDEpOwogCXVkZWxheSgyNTApOwogCXpsMTAzNTNfc2luZ2xlX3dyaXRlKGZlLCAweEU0LCAweDAwKTsKQEAgLTI0Myw5ICsyNDYsMTIgQEAKIAogCWlmIChkZWJ1Z19yZWdzKQogCQl6bDEwMzUzX2R1bXBfcmVncyhmZSk7CisJaWYgKHN0YXRlLT5jb25maWcucGFyYWxsZWxfdHMpCisJCXpsMTAzNTNfcmVzZXRfYXR0YWNoWzJdICY9IH4weDIwOwogCiAJLyogRG8gYSAiaGFyZCIgcmVzZXQgaWYgbm90IGFscmVhZHkgZG9uZSAqLwotCWlmICh6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIDB4NTApICE9IDB4MDMpIHsKKwlpZiAoemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCAweDUwKSAhPSB6bDEwMzUzX3Jlc2V0X2F0dGFjaFsxXSB8fAorCSAgICB6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIDB4NTEpICE9IHpsMTAzNTNfcmVzZXRfYXR0YWNoWzJdKSB7CiAJCXJjID0gemwxMDM1M193cml0ZShmZSwgemwxMDM1M19yZXNldF9hdHRhY2gsCiAJCQkJICAgc2l6ZW9mKHpsMTAzNTNfcmVzZXRfYXR0YWNoKSk7CiAJCWlmIChkZWJ1Z19yZWdzKQpAQCAtMjU4LDcgKzI2NCw2IEBACiBzdGF0aWMgdm9pZCB6bDEwMzUzX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7Ci0KIAlrZnJlZShzdGF0ZSk7CiB9CiAKQEAgLTMxNCw2ICszMTksNyBAQAogCiAJLmluaXQgPSB6bDEwMzUzX2luaXQsCiAJLnNsZWVwID0gemwxMDM1M19zbGVlcCwKKwkud3JpdGUgPSB6bDEwMzUzX3dyaXRlLAogCiAJLnNldF9mcm9udGVuZCA9IHpsMTAzNTNfc2V0X3BhcmFtZXRlcnMsCiAJLmdldF90dW5lX3NldHRpbmdzID0gemwxMDM1M19nZXRfdHVuZV9zZXR0aW5ncywKQEAgLTMzMCw0ICszMzYsMyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiBFWFBPUlRfU1lNQk9MKHpsMTAzNTNfYXR0YWNoKTsKLUVYUE9SVF9TWU1CT0woemwxMDM1M193cml0ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaAppbmRleCA5NzcwY2I4Li43OWE5NDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKQEAgLTMxLDExICszMSwyMSBAQAogCiAJLyogc2V0IGlmIG5vIHBsbCBpcyBjb25uZWN0ZWQgdG8gdGhlIHNlY29uZGFyeSBpMmMgYnVzICovCiAJaW50IG5vX3R1bmVyOworCisJLyogc2V0IGlmIHBhcmFsbGVsIHRzIG91dHB1dCBpcyByZXF1aXJlZCAqLworCWludCBwYXJhbGxlbF90czsKIH07CiAKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1MykgfHwgZGVmaW5lZChDT05GSUdfRFZCX1pMMTAzNTNfTU9EVUxFKQogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHpsMTAzNTNfYXR0YWNoKGNvbnN0IHN0cnVjdCB6bDEwMzUzX2NvbmZpZyAqY29uZmlnLAogCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7Ci0KLWV4dGVybiBpbnQgemwxMDM1M193cml0ZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTggKmlidWYsIGludCBpbGVuKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQqIHpsMTAzNTNfYXR0YWNoKGNvbnN0IHN0cnVjdCB6bDEwMzUzX2NvbmZpZyAqY29uZmlnLAorCQkJCQkgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fRlVOQ1RJT05fXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYgLy8gQ09ORklHX0RWQl9aTDEwMzUzCiAKICNlbmRpZiAvKiBaTDEwMzUzX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCmluZGV4IDVmYjA5NzUuLjk1NTMxYTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwpAQCAtMSwxNyArMSwxNyBAQAogY29uZmlnIERWQl9BVjcxMTAKIAl0cmlzdGF0ZSAiQVY3MTEwIGNhcmRzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCi0Jc2VsZWN0IEZXX0xPQURFUgorCXNlbGVjdCBGV19MT0FERVIgaWYgIURWQl9BVjcxMTBfRklSTVdBUkUKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBEVkJfUExMCi0Jc2VsZWN0IERWQl9WRVMxODIwCi0Jc2VsZWN0IERWQl9WRVMxWDkzCi0Jc2VsZWN0IERWQl9TVFYwMjk5Ci0Jc2VsZWN0IERWQl9UREE4MDgzCi0Jc2VsZWN0IERWQl9TUDg4NzAKLQlzZWxlY3QgRFZCX1NUVjAyOTcKLQlzZWxlY3QgRFZCX0w2NDc4MQotCXNlbGVjdCBEVkJfTE5CUDIxCisJc2VsZWN0IERWQl9WRVMxODIwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9WRVMxWDkzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREE4MDgzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9TUDg4NzAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjAyOTcgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0w2NDc4MSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgU0FBNzE0NiBhbmQgQVY3MTEwIGJhc2VkIERWQiBjYXJkcyBhcyBwcm9kdWNlZAogCSAgYnkgRnVqaXRzdS1TaWVtZW5zLCBUZWNobm90cmVuZCwgSGF1cHBhdWdlIGFuZCBvdGhlcnMuCkBAIC02MywxNCArNjMsMTYgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2CiAJc2VsZWN0IERWQl9QTEwKLQlzZWxlY3QgRFZCX1NUVjAyOTkKLQlzZWxlY3QgRFZCX1ZFUzFYOTMKLQlzZWxlY3QgRFZCX1ZFUzE4MjAKLQlzZWxlY3QgRFZCX0w2NDc4MQotCXNlbGVjdCBEVkJfVERBODA4MwotCXNlbGVjdCBEVkJfVERBMTAwMjEKLQlzZWxlY3QgRFZCX1M1SDE0MjAKLQlzZWxlY3QgRFZCX0xOQlAyMQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVkVTMVg5MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVkVTMTgyMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTDY0NzgxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREE4MDgzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfUzVIMTQyMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTAwODYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTgyNlggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcwogCSAgKHNvIGNhbGxlZCBCdWRnZXQtIG9yIE5vdmEtUENJIGNhcmRzKSB3aXRob3V0IG9uYm9hcmQKQEAgLTg2LDEwICs4OCwxMCBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgUENJICYmIEkyQyAmJiBWSURFT19WNEwxCiAJc2VsZWN0IFZJREVPX1NBQTcxNDYKIAlzZWxlY3QgRFZCX1BMTAotCXNlbGVjdCBEVkJfU1RWMDI5NwotCXNlbGVjdCBEVkJfU1RWMDI5OQotCXNlbGVjdCBEVkJfVERBMTAwNFgKLQlzZWxlY3QgRFZCX0xOQlAyMQorCXNlbGVjdCBEVkJfU1RWMDI5NyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTAwNFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xOQlAyMSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcwogCSAgKHNvIGNhbGxlZCBCdWRnZXQtIG9yIE5vdmEtUENJIGNhcmRzKSB3aXRob3V0IG9uYm9hcmQKQEAgLTEwOCw5ICsxMTAsMTAgQEAKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIFBDSSAmJiBJMkMgJiYgVklERU9fVjRMMQogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCiAJc2VsZWN0IERWQl9QTEwKLQlzZWxlY3QgRFZCX1NUVjAyOTkKLQlzZWxlY3QgRFZCX1REQTEwMDRYCi0Jc2VsZWN0IERWQl9UREExMDAyMQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTAwNFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTEwMDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UVUE2MTAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IEZXX0xPQURFUgogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHNpbXBsZSBTQUE3MTQ2IGJhc2VkIERWQiBjYXJkcwpAQCAtMTI3LDkgKzEzMCw5IEBACiAJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBEVkJfQlVER0VUICYmIFZJREVPX1Y0TDEKIAlzZWxlY3QgRFZCX0FWNzExMAogCXNlbGVjdCBEVkJfUExMCi0Jc2VsZWN0IERWQl9TVFYwMjk5Ci0Jc2VsZWN0IERWQl9WRVMxWDkzCi0Jc2VsZWN0IERWQl9UREE4MDgzCisJc2VsZWN0IERWQl9TVFYwMjk5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9WRVMxWDkzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREE4MDgzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgQnVkZ2V0IFBhdGNoIChmdWxsIFRTKSBtb2RpZmljYXRpb24gb24KIAkgIFNBQTcxNDYrQVY3MTEwIGJhc2VkIGNhcmRzIChEVkItUyBjYXJkcykuIFRoaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKaW5kZXggNDUwNjE2NS4uYmJhMjNiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwLmMKQEAgLTEzODMsOCArMTM4MywxMCBAQAogCWR2Yl9kbXhkZXZfcmVsZWFzZSgmYXY3MTEwLT5kbXhkZXYpOwogCWR2Yl9kbXhfcmVsZWFzZSgmYXY3MTEwLT5kZW11eCk7CiAKLQlpZiAoYXY3MTEwLT5mZSAhPSBOVUxMKQorCWlmIChhdjcxMTAtPmZlICE9IE5VTEwpIHsKIAkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoYXY3MTEwLT5mZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goYXY3MTEwLT5mZSk7CisJfQogCWR2Yl91bnJlZ2lzdGVyX2RldmljZShhdjcxMTAtPm9zZF9kZXYpOwogCWF2NzExMF9hdl91bnJlZ2lzdGVyKGF2NzExMCk7CiAJYXY3MTEwX2NhX3VucmVnaXN0ZXIoYXY3MTEwKTsKQEAgLTE2OTksOSArMTcwMSwxMyBAQAogCiBzdGF0aWMgaW50IGFscHNfdGRsYjdfcmVxdWVzdF9maXJtd2FyZShzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSwgY29uc3Qgc3RydWN0IGZpcm13YXJlICoqZncsIGNoYXIqIG5hbWUpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MCkgfHwgZGVmaW5lZChDT05GSUdfRFZCX1NQODg3MF9NT0RVTEUpCiAJc3RydWN0IGF2NzExMCogYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBmZS0+ZHZiLT5wcml2OwogCiAJcmV0dXJuIHJlcXVlc3RfZmlybXdhcmUoZncsIG5hbWUsICZhdjcxMTAtPmRldi0+cGNpLT5kZXYpOworI2Vsc2UKKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZgogfQogCiBzdGF0aWMgc3RydWN0IHNwODg3MF9jb25maWcgYWxwc190ZGxiN19jb25maWcgPSB7CkBAIC0yMDc3LDcgKzIwODMsNyBAQAogCWlmIChhdjcxMTAtPmRldi0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTEwYSkgewogCQlzd2l0Y2goYXY3MTEwLT5kZXYtPnBjaS0+c3Vic3lzdGVtX2RldmljZSkgewogCQljYXNlIDB4MDAwMDogLy8gRnVqaXRzdS9TaWVtZW5zIERWQi1DYWJsZSAodmVzMTgyMC9QaGlsaXBzIENEMTUxNig/PykpCi0JCQlhdjcxMTAtPmZlID0gdmVzMTgyMF9hdHRhY2goJnBoaWxpcHNfY2QxNTE2X2NvbmZpZywKKwkJCWF2NzExMC0+ZmUgPSBkdmJfYXR0YWNoKHZlczE4MjBfYXR0YWNoLCAmcGhpbGlwc19jZDE1MTZfY29uZmlnLAogCQkJCQkJICAgICZhdjcxMTAtPmkyY19hZGFwLCByZWFkX3B3bShhdjcxMTApKTsKIAkJCWlmIChhdjcxMTAtPmZlKSB7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19jZDE1MTZfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTIwOTIsNyArMjA5OCw3IEBACiAJCWNhc2UgMHgxMDAyOiAvLyBIYXVwcGF1Z2UvVFQgV2luVFYgRFZCLVMgcmV2MS4zU0UKIAogCQkJLy8gdHJ5IHRoZSBBTFBTIEJTUlYyIGZpcnN0IG9mIGFsbAotCQkJYXY3MTEwLT5mZSA9IHZlczF4OTNfYXR0YWNoKCZhbHBzX2JzcnYyX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXApOworCQkJYXY3MTEwLT5mZSA9IGR2Yl9hdHRhY2godmVzMXg5M19hdHRhY2gsICZhbHBzX2JzcnYyX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXApOwogCQkJaWYgKGF2NzExMC0+ZmUpIHsKIAkJCQlhdjcxMTAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnYyX3R1bmVyX3NldF9wYXJhbXM7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBhdjcxMTBfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKQEAgLTIxMDMsNyArMjEwOSw3IEBACiAJCQl9CiAKIAkJCS8vIHRyeSB0aGUgQUxQUyBCU1JVNiBub3cKLQkJCWF2NzExMC0+ZmUgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic3J1Nl9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKKwkJCWF2NzExMC0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmYWxwc19ic3J1Nl9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKIAkJCWlmIChhdjcxMTAtPmZlKSB7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc19ic3J1Nl90dW5lcl9zZXRfcGFyYW1zOwogCQkJCWF2NzExMC0+ZmUtPnR1bmVyX3ByaXYgPSAmYXY3MTEwLT5pMmNfYWRhcDsKQEAgLTIxMTYsNyArMjEyMiw3IEBACiAJCQl9CiAKIAkJCS8vIFRyeSB0aGUgZ3J1bmRpZyAyOTUwNC00NTEKLQkJCWF2NzExMC0+ZmUgPSB0ZGE4MDgzX2F0dGFjaCgmZ3J1bmRpZ18yOTUwNF80NTFfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CisJCQlhdjcxMTAtPmZlID0gZHZiX2F0dGFjaCh0ZGE4MDgzX2F0dGFjaCwgJmdydW5kaWdfMjk1MDRfNDUxX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXApOwogCQkJaWYgKGF2NzExMC0+ZmUpIHsKIAkJCQlhdjcxMTAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBncnVuZGlnXzI5NTA0XzQ1MV90dW5lcl9zZXRfcGFyYW1zOwogCQkJCWF2NzExMC0+ZmUtPm9wcy5kaXNlcWNfc2VuZF9tYXN0ZXJfY21kID0gYXY3MTEwX2Rpc2VxY19zZW5kX21hc3Rlcl9jbWQ7CkBAIC0yMTMwLDcgKzIxMzYsNyBAQAogCQkJc3dpdGNoKGF2NzExMC0+ZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKIAkJCWNhc2UgMHgwMDAwOgogCQkJCS8qIFNpZW1lbnMgRFZCLUMgKGZ1bGwtbGVuZ3RoIGNhcmQpIFZFUzE4MjAvUGhpbGlwcyBDRDE1MTYgKi8KLQkJCQlhdjcxMTAtPmZlID0gdmVzMTgyMF9hdHRhY2goJnBoaWxpcHNfY2QxNTE2X2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXAsCisJCQkJYXY3MTEwLT5mZSA9IGR2Yl9hdHRhY2godmVzMTgyMF9hdHRhY2gsICZwaGlsaXBzX2NkMTUxNl9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwLAogCQkJCQkJCXJlYWRfcHdtKGF2NzExMCkpOwogCQkJCWlmIChhdjcxMTAtPmZlKSB7CiAJCQkJCWF2NzExMC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfY2QxNTE2X3R1bmVyX3NldF9wYXJhbXM7CkBAIC0yMTM4LDcgKzIxNDQsNyBAQAogCQkJCWJyZWFrOwogCQkJY2FzZSAweDAwMDM6CiAJCQkJLyogSGF1cHBhdWdlIERWQi1DIDIuMSBWRVMxODIwL0FMUFMgVERCRTIgKi8KLQkJCQlhdjcxMTAtPmZlID0gdmVzMTgyMF9hdHRhY2goJmFscHNfdGRiZTJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCwKKwkJCQlhdjcxMTAtPmZlID0gZHZiX2F0dGFjaCh2ZXMxODIwX2F0dGFjaCwgJmFscHNfdGRiZTJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCwKIAkJCQkJCQlyZWFkX3B3bShhdjcxMTApKTsKIAkJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCQlhdjcxMTAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX3RkYmUyX3R1bmVyX3NldF9wYXJhbXM7CkBAIC0yMTQ4LDE3ICsyMTU0LDI0IEBACiAJCQlicmVhazsKIAogCQljYXNlIDB4MDAwMTogLy8gSGF1cHBhdWdlL1RUIE5leHVzLVQgcHJlbWl1bSByZXYxLlgKLQotCQkJLy8gQUxQUyBURExCNwotCQkJYXY3MTEwLT5mZSA9IHNwODg3MF9hdHRhY2goJmFscHNfdGRsYjdfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CisJCQkvLyB0cnkgQUxQUyBURExCNyBmaXJzdCwgdGhlbiBHcnVuZGlnIDI5NTA0LTQwMQorCQkJYXY3MTEwLT5mZSA9IGR2Yl9hdHRhY2goc3A4ODcwX2F0dGFjaCwgJmFscHNfdGRsYjdfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CiAJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCWF2NzExMC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfdGRsYjdfdHVuZXJfc2V0X3BhcmFtczsKKwkJCQlicmVhazsKIAkJCX0KKwkJCS8qIGZhbGwtdGhydSAqLworCisJCWNhc2UgMHgwMDA4OiAvLyBIYXVwcGF1Z2UvVFQgRFZCLVQKKwkJCS8vIEdydW5kaWcgMjk1MDQtNDAxCisJCQlhdjcxMTAtPmZlID0gZHZiX2F0dGFjaChsNjQ3ODFfYXR0YWNoLCAmZ3J1bmRpZ18yOTUwNF80MDFfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CisJCQlpZiAoYXY3MTEwLT5mZSkKKwkJCQlhdjcxMTAtPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBncnVuZGlnXzI5NTA0XzQwMV90dW5lcl9zZXRfcGFyYW1zOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAweDAwMDI6IC8vIEhhdXBwYXVnZS9UVCBEVkItQyBwcmVtaXVtIHJldjIuWAogCi0JCQlhdjcxMTAtPmZlID0gdmVzMTgyMF9hdHRhY2goJmFscHNfdGRiZTJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCwgcmVhZF9wd20oYXY3MTEwKSk7CisJCQlhdjcxMTAtPmZlID0gZHZiX2F0dGFjaCh2ZXMxODIwX2F0dGFjaCwgJmFscHNfdGRiZTJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCwgcmVhZF9wd20oYXY3MTEwKSk7CiAJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCWF2NzExMC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfdGRiZTJfdHVuZXJfc2V0X3BhcmFtczsKIAkJCX0KQEAgLTIxNjYsNyArMjE3OSw3IEBACiAKIAkJY2FzZSAweDAwMDQ6IC8vIEdhbGF4aXMgRFZCLVMgcmV2MS4zCiAJCQkvKiBBTFBTIEJTUlYyICovCi0JCQlhdjcxMTAtPmZlID0gdmVzMXg5M19hdHRhY2goJmFscHNfYnNydjJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CisJCQlhdjcxMTAtPmZlID0gZHZiX2F0dGFjaCh2ZXMxeDkzX2F0dGFjaCwgJmFscHNfYnNydjJfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CiAJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCWF2NzExMC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfYnNydjJfdHVuZXJfc2V0X3BhcmFtczsKIAkJCQlhdjcxMTAtPmZlLT5vcHMuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGF2NzExMF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwpAQCAtMjE3OCw3ICsyMTkxLDcgQEAKIAogCQljYXNlIDB4MDAwNjogLyogRnVqaXRzdS1TaWVtZW5zIERWQi1TIHJldiAxLjYgKi8KIAkJCS8qIEdydW5kaWcgMjk1MDQtNDUxICovCi0JCQlhdjcxMTAtPmZlID0gdGRhODA4M19hdHRhY2goJmdydW5kaWdfMjk1MDRfNDUxX2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXApOworCQkJYXY3MTEwLT5mZSA9IGR2Yl9hdHRhY2godGRhODA4M19hdHRhY2gsICZncnVuZGlnXzI5NTA0XzQ1MV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKIAkJCWlmIChhdjcxMTAtPmZlKSB7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZ3J1bmRpZ18yOTUwNF80NTFfdHVuZXJfc2V0X3BhcmFtczsKIAkJCQlhdjcxMTAtPmZlLT5vcHMuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGF2NzExMF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwpAQCAtMjE4OCwxNyArMjIwMSw5IEBACiAJCQl9CiAJCQlicmVhazsKIAotCQljYXNlIDB4MDAwODogLy8gSGF1cHBhdWdlL1RUIERWQi1UCi0KLQkJCWF2NzExMC0+ZmUgPSBsNjQ3ODFfYXR0YWNoKCZncnVuZGlnXzI5NTA0XzQwMV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKLQkJCWlmIChhdjcxMTAtPmZlKSB7Ci0JCQkJYXY3MTEwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZ3J1bmRpZ18yOTUwNF80MDFfdHVuZXJfc2V0X3BhcmFtczsKLQkJCX0KLQkJCWJyZWFrOwotCiAJCWNhc2UgMHgwMDBBOiAvLyBIYXVwcGF1Z2UvVFQgTmV4dXMtQ0EgcmV2MS5YCiAKLQkJCWF2NzExMC0+ZmUgPSBzdHYwMjk3X2F0dGFjaCgmbmV4dXNjYV9zdHYwMjk3X2NvbmZpZywgJmF2NzExMC0+aTJjX2FkYXApOworCQkJYXY3MTEwLT5mZSA9IGR2Yl9hdHRhY2goc3R2MDI5N19hdHRhY2gsICZuZXh1c2NhX3N0djAyOTdfY29uZmlnLCAmYXY3MTEwLT5pMmNfYWRhcCk7CiAJCQlpZiAoYXY3MTEwLT5mZSkgewogCQkJCWF2NzExMC0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG5leHVzY2Ffc3R2MDI5N190dW5lcl9zZXRfcGFyYW1zOwogCkBAIC0yMjE0LDEyICsyMjE5LDEyIEBACiAKIAkJY2FzZSAweDAwMEU6IC8qIEhhdXBwYXVnZS9UVCBOZXh1cy1TIHJldiAyLjMgKi8KIAkJCS8qIEFMUFMgQlNCRTEgKi8KLQkJCWF2NzExMC0+ZmUgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKKwkJCWF2NzExMC0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmYWxwc19ic2JlMV9jb25maWcsICZhdjcxMTAtPmkyY19hZGFwKTsKIAkJCWlmIChhdjcxMTAtPmZlKSB7CiAJCQkJYXY3MTEwLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc19ic2JlMV90dW5lcl9zZXRfcGFyYW1zOwogCQkJCWF2NzExMC0+ZmUtPnR1bmVyX3ByaXYgPSAmYXY3MTEwLT5pMmNfYWRhcDsKIAotCQkJCWlmIChsbmJwMjFfYXR0YWNoKGF2NzExMC0+ZmUsICZhdjcxMTAtPmkyY19hZGFwLCAwLCAwKSkgeworCQkJCWlmIChkdmJfYXR0YWNoKGxuYnAyMV9hdHRhY2gsIGF2NzExMC0+ZmUsICZhdjcxMTAtPmkyY19hZGFwLCAwLCAwKSA9PSBOVUxMKSB7CiAJCQkJCXByaW50aygiZHZiLXR0cGNpOiBMTkJQMjEgbm90IGZvdW5kIVxuIik7CiAJCQkJCWlmIChhdjcxMTAtPmZlLT5vcHMucmVsZWFzZSkKIAkJCQkJCWF2NzExMC0+ZmUtPm9wcy5yZWxlYXNlKGF2NzExMC0+ZmUpOwpAQCAtMjI1NSw4ICsyMjYwLDcgQEAKIAkJcmV0ID0gZHZiX3JlZ2lzdGVyX2Zyb250ZW5kKCZhdjcxMTAtPmR2Yl9hZGFwdGVyLCBhdjcxMTAtPmZlKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCXByaW50aygiYXY3MTEwOiBGcm9udGVuZCByZWdpc3RyYXRpb24gZmFpbGVkIVxuIik7Ci0JCQlpZiAoYXY3MTEwLT5mZS0+b3BzLnJlbGVhc2UpCi0JCQkJYXY3MTEwLT5mZS0+b3BzLnJlbGVhc2UoYXY3MTEwLT5mZSk7CisJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGF2NzExMC0+ZmUpOwogCQkJYXY3MTEwLT5mZSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0yODIzLDcgKzI4MjcsNyBAQAogCiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gYXY3MTEwX2V4dGVuc2lvbiA9IHsKLQkubmFtZQkJPSAiZHZiXDAiLAorCS5uYW1lCQk9ICJkdmIiLAogCS5mbGFncwkJPSBTQUE3MTQ2X0kyQ19TSE9SVF9ERUxBWSwKIAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCmluZGV4IDBmM2EwNDQuLjhjNTc3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9hdi5jCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiYi5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvZnMuaD4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2NhLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwppbmRleCA2MDc5ZTg4Li5kZDlhZWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYwpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9wb2xsLmg+Ci0jaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWJiLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgImF2NzExMC5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2h3LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwppbmRleCA3NTczNmYyLi4zN2RlMmU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfaHcuYwpAQCAtMzQsNyArMzQsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwppbmRleCA2ZmZlNTNmLi4xMGNmZTMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KLSNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvc3dhYmIuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogCiAjaW5jbHVkZSAiYXY3MTEwLmgiCkBAIC05MjIsNyArOTIxLDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgYXY3MTEwX3Z2X2RhdGFfYyA9IHsKIAkuaW5wdXRzCQk9IDEsCiAJLmF1ZGlvcwkJPSAxLAotCS5jYXBhYmlsaXRpZXMJPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1ZCSV9DQVBUVVJFIHwgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQsCisJLmNhcGFiaWxpdGllcwk9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9PVVRQVVQsCiAJLmZsYWdzCQk9IFNBQTcxNDZfVVNFX1BPUlRfQl9GT1JfVkJJLAogCiAJLnN0ZHMJCT0gJnN0YW5kYXJkWzBdLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWF2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwppbmRleCAyZDIxZmVjLi4yMjM1ZmY4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYwpAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgInN0djAyOTkuaCIKICNpbmNsdWRlICJ0ZGExMDAyMS5oIgogI2luY2x1ZGUgInRkYTEwMDR4LmgiCisjaW5jbHVkZSAidHVhNjEwMC5oIgogI2luY2x1ZGUgImR2Yi1wbGwuaCIKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTQ2X3Z2Lmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CkBAIC0yMzUsNyArMjM2LDcgQEAKIAogCS8qIHNldCB0ZGExMDAyMSBiYWNrIHRvIG9yaWdpbmFsIGNsb2NrIGNvbmZpZ3VyYXRpb24gb24gcmVzZXQgKi8KIAlpZiAoYnVkZ2V0X2F2LT50ZGExMDAyMV9wb2Nsa3ApIHsKLQkJdGRhMTAwMjFfd3JpdGVfYnl0ZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOworCQl0ZGExMDAyMV93cml0ZXJlZyhidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOwogCQlidWRnZXRfYXYtPnRkYTEwMDIxX3RzX2VuYWJsZWQgPSAwOwogCX0KIApAQCAtMjU3LDcgKzI1OCw3IEBACiAKIAkvKiBzZXQgdGRhMTAwMjEgYmFjayB0byBvcmlnaW5hbCBjbG9jayBjb25maWd1cmF0aW9uIHdoZW4gY2FtIHJlbW92ZWQgKi8KIAlpZiAoYnVkZ2V0X2F2LT50ZGExMDAyMV9wb2Nsa3ApIHsKLQkJdGRhMTAwMjFfd3JpdGVfYnl0ZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOworCQl0ZGExMDAyMV93cml0ZXJlZyhidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOwogCQlidWRnZXRfYXYtPnRkYTEwMDIxX3RzX2VuYWJsZWQgPSAwOwogCX0KIAlyZXR1cm4gMDsKQEAgLTI3Nyw3ICsyNzgsNyBAQAogCiAJLyogdGRhMTAwMjEgc2VlbXMgdG8gbmVlZCBhIGRpZmZlcmVudCBUUyBjbG9jayBjb25maWcgd2hlbiBkYXRhIGlzIHJvdXRlZCB0byB0aGUgQ0FNICovCiAJaWYgKGJ1ZGdldF9hdi0+dGRhMTAwMjFfcG9jbGtwKSB7Ci0JCXRkYTEwMDIxX3dyaXRlX2J5dGUoYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2Zyb250ZW5kLCAweDEyLCAweGExKTsKKwkJdGRhMTAwMjFfd3JpdGVyZWcoYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2Zyb250ZW5kLCAweDEyLCAweGExKTsKIAkJYnVkZ2V0X2F2LT50ZGExMDAyMV90c19lbmFibGVkID0gMTsKIAl9CiAKQEAgLTU0OCwxNDQgKzU0OSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTUlOMihhLGIpICgoYSkgPCAoYikgPyAoYSkgOiAoYikpCi0jZGVmaW5lIE1JTjMoYSxiLGMpIE1JTjIoTUlOMihhLGIpLGMpCi0KLXN0YXRpYyBpbnQgcGhpbGlwc19zdTEyNzhzaDJfdHVhNjEwMF90dW5lcl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCi17Ci0JdTggcmVnMCBbMl0gPSB7IDB4MDAsIDB4MDAgfTsKLQl1OCByZWcxIFs0XSA9IHsgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCB9OwotCXU4IHJlZzIgWzNdID0geyAweDAyLCAweDAwLCAweDAwIH07Ci0JaW50IF9mYmFuZDsKLQlpbnQgZmlyc3RfWkY7Ci0JaW50IFIsIEEsIE4sIFAsIE07Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gMHg2MCwuZmxhZ3MgPSAwLC5idWYgPSBOVUxMLC5sZW4gPSAwIH07Ci0JaW50IGZyZXEgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKLQlzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCAqKSBmZS0+ZHZiLT5wcml2OwotCi0JZmlyc3RfWkYgPSAoZnJlcSkgLyAxMDAwOwotCi0JaWYgKGFicyhNSU4yKGFicyhmaXJzdF9aRi0xMTkwKSxhYnMoZmlyc3RfWkYtMTc5MCkpKSA8Ci0JCSAgIGFicyhNSU4zKGFicyhmaXJzdF9aRi0xMjAyKSxhYnMoZmlyc3RfWkYtMTU0MiksYWJzKGZpcnN0X1pGLTE4OTApKSkpCi0JCV9mYmFuZCA9IDI7Ci0JZWxzZQotCQlfZmJhbmQgPSAzOwotCi0JaWYgKF9mYmFuZCA9PSAyKSB7Ci0JCWlmICgoKGZpcnN0X1pGID49IDk1MCkgJiYgKGZpcnN0X1pGIDwgMTM1MCkpIHx8Ci0JCQkJICAgICgoZmlyc3RfWkYgPj0gMTQzMCkgJiYgKGZpcnN0X1pGIDwgMTk1MCkpKQotCQkJcmVnMFsxXSA9IDB4MDc7Ci0JCWVsc2UgaWYgKCgoZmlyc3RfWkYgPj0gMTM1MCkgJiYgKGZpcnN0X1pGIDwgMTQzMCkpIHx8Ci0JCQkJCSAoKGZpcnN0X1pGID49IDE5NTApICYmIChmaXJzdF9aRiA8IDIxNTApKSkKLQkJCXJlZzBbMV0gPSAweDBCOwotCX0KLQotCWlmKF9mYmFuZCA9PSAzKSB7Ci0JCWlmICgoKGZpcnN0X1pGID49IDk1MCkgJiYgKGZpcnN0X1pGIDwgMTM1MCkpIHx8Ci0JCQkJICAgICgoZmlyc3RfWkYgPj0gMTQ1NSkgJiYgKGZpcnN0X1pGIDwgMTk1MCkpKQotCQkJcmVnMFsxXSA9IDB4MDc7Ci0JCWVsc2UgaWYgKCgoZmlyc3RfWkYgPj0gMTM1MCkgJiYgKGZpcnN0X1pGIDwgMTQyMCkpIHx8Ci0JCQkJCSAoKGZpcnN0X1pGID49IDE5NTApICYmIChmaXJzdF9aRiA8IDIxNTApKSkKLQkJCXJlZzBbMV0gPSAweDBCOwotCQllbHNlIGlmICgoZmlyc3RfWkYgPj0gMTQyMCkgJiYgKGZpcnN0X1pGIDwgMTQ1NSkpCi0JCQlyZWcwWzFdID0gMHgwRjsKLQl9Ci0KLQlpZiAoZmlyc3RfWkYgPiAxNTI1KQotCQlyZWcxWzFdIHw9IDB4ODA7Ci0JZWxzZQotCQlyZWcxWzFdICY9IDB4N0Y7Ci0KLQlpZiAoX2ZiYW5kID09IDIpIHsKLQkJaWYgKGZpcnN0X1pGID4gMTQzMCkgeyAvKiAxNDMwTUhaICovCi0JCQlyZWcxWzFdICY9IDB4Q0Y7IC8qIE4yICovCi0JCQlyZWcyWzFdICY9IDB4Q0Y7IC8qIFIyICovCi0JCQlyZWcyWzFdIHw9IDB4MTA7Ci0JCX0gZWxzZSB7Ci0JCQlyZWcxWzFdICY9IDB4Q0Y7IC8qIE4yICovCi0JCQlyZWcxWzFdIHw9IDB4MjA7Ci0JCQlyZWcyWzFdICY9IDB4Q0Y7IC8qIFIyICovCi0JCQlyZWcyWzFdIHw9IDB4MTA7Ci0JCX0KLQl9Ci0KLQlpZiAoX2ZiYW5kID09IDMpIHsKLQkJaWYgKChmaXJzdF9aRiA+PSAxNDU1KSAmJgotCQkJCSAgIChmaXJzdF9aRiA8IDE2MzApKSB7Ci0JCQlyZWcxWzFdICY9IDB4Q0Y7IC8qIE4yICovCi0JCQlyZWcxWzFdIHw9IDB4MjA7Ci0JCQlyZWcyWzFdICY9IDB4Q0Y7IC8qIFIyICovCi0JCQkJICAgfSBlbHNlIHsKLQkJCQkJICAgaWYgKGZpcnN0X1pGIDwgMTQ1NSkgewotCQkJCQkJICAgcmVnMVsxXSAmPSAweENGOyAvKiBOMiAqLwotCQkJCQkJICAgcmVnMVsxXSB8PSAweDIwOwotCQkJCQkJICAgcmVnMlsxXSAmPSAweENGOyAvKiBSMiAqLwotCQkJCQkJICAgcmVnMlsxXSB8PSAweDEwOwotCQkJCQkgICB9IGVsc2UgewotCQkJCQkJICAgaWYgKGZpcnN0X1pGID49IDE2MzApIHsKLQkJCQkJCQkgICByZWcxWzFdICY9IDB4Q0Y7IC8qIE4yICovCi0JCQkJCQkJICAgcmVnMlsxXSAmPSAweENGOyAvKiBSMiAqLwotCQkJCQkJCSAgIHJlZzJbMV0gfD0gMHgxMDsKLQkJCQkJCSAgIH0KLQkJCQkJICAgfQotCQkJCSAgIH0KLQl9Ci0KLQkvKiBzZXQgcG9ydHMsIGVuYWJsZSBQMCBmb3Igc3ltYm9sIHJhdGVzID4gNE1zL3MgKi8KLQlpZiAocGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUgPj0gNDAwMDAwMCkKLQkJcmVnMVsxXSB8PSAweDBjOwotCWVsc2UKLQkJcmVnMVsxXSB8PSAweDA0OwotCi0JcmVnMlsxXSB8PSAweDBjOwotCi0JUiA9IDY0OwotCUEgPSA2NDsKLQlQID0gNjQ7CSAvLzMyCi0KLQlNID0gKGZyZXEgKiBSKSAvIDQ7CQkvKiBpbiBNaHogKi8KLQlOID0gKE0gLSBBICogMTAwMCkgLyAoUCAqIDEwMDApOwotCi0JcmVnMVsxXSB8PSAoTiA+PiA5KSAmIDB4MDM7Ci0JcmVnMVsyXQkgPSAoTiA+PiAxKSAmIDB4ZmY7Ci0JcmVnMVszXQkgPSAoTiA8PCA3KSAmIDB4ODA7Ci0KLQlyZWcyWzFdIHw9IChSID4+IDgpICYgMHgwMzsKLQlyZWcyWzJdCSA9IFIgJiAweEZGOwkvKiBSICovCi0KLQlyZWcxWzNdIHw9IEEgJiAweDdmOwkvKiBBICovCi0KLQlpZiAoUCA9PSA2NCkKLQkJcmVnMVsxXSB8PSAweDQwOyAvKiBQcmVzY2FsZXIgNjQvNjUgKi8KLQotCXJlZzBbMV0gfD0gMHgwMzsKLQotCS8qIGFscmVhZHkgZW5hYmxlZCAtIGRvIG5vdCByZWVuYWJsZSBpMmMgcmVwZWF0ZXIgb3IgVFggZmFpbHMgKi8KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCW1zZy5idWYgPSByZWcwOwotCW1zZy5sZW4gPSBzaXplb2YocmVnMCk7Ci0JaWYgKGkyY190cmFuc2ZlcigmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCW1zZy5idWYgPSByZWcxOwotCW1zZy5sZW4gPSBzaXplb2YocmVnMSk7Ci0JaWYgKGkyY190cmFuc2ZlcigmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCW1zZy5idWYgPSByZWcyOwotCW1zZy5sZW4gPSBzaXplb2YocmVnMik7Ci0JaWYgKGkyY190cmFuc2ZlcigmYnVkZ2V0LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHU4IHR5cGhvb25fY2luZXJneTEyMDBzX2luaXR0YWJbXSA9IHsKIAkweDAxLCAweDE1LAogCTB4MDIsIDB4MzAsCkBAIC0xMDY4LDkgKzkzMSw5IEBACiAKIAlyZXN1bHQgPSBidWRnZXRfYXYtPnRkYTEwMDIxX3NldF9mcm9udGVuZChmZSwgcCk7CiAJaWYgKGJ1ZGdldF9hdi0+dGRhMTAwMjFfdHNfZW5hYmxlZCkgewotCQl0ZGExMDAyMV93cml0ZV9ieXRlKGJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgMHgxMiwgMHhhMSk7CisJCXRkYTEwMDIxX3dyaXRlcmVnKGJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9mcm9udGVuZCwgMHgxMiwgMHhhMSk7CiAJfSBlbHNlIHsKLQkJdGRhMTAwMjFfd3JpdGVfYnl0ZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOworCQl0ZGExMDAyMV93cml0ZXJlZyhidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4MTIsIDB4YTApOwogCX0KIAogCXJldHVybiByZXN1bHQ7CkBAIC0xMDk2LDE1ICs5NTksMTYgQEAKIAlzd2l0Y2ggKHNhYS0+cGNpLT5zdWJzeXN0ZW1fZGV2aWNlKSB7CiAKIAljYXNlIFNVQklEX0RWQlNfS05DMToKKwljYXNlIFNVQklEX0RWQlNfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCU19FQVNZV0FUQ0hfMToKIAkJaWYgKHNhYS0+cGNpLT5zdWJzeXN0ZW1fdmVuZG9yID09IDB4MTg5NCkgewotCQkJZmUgPSBzdHYwMjk5X2F0dGFjaCgmY2luZXJneV8xMjAwc18xODk0XzAwMTBfY29uZmlnLAorCQkJZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmY2luZXJneV8xMjAwc18xODk0XzAwMTBfY29uZmlnLAogCQkJCQkgICAgICZidWRnZXRfYXYtPmJ1ZGdldC5pMmNfYWRhcCk7CiAJCQlpZiAoZmUpIHsKLQkJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19zdTEyNzhzaDJfdHVhNjEwMF90dW5lcl9zZXRfcGFyYW1zOworCQkJCWR2Yl9hdHRhY2godHVhNjEwMF9hdHRhY2gsIGZlLCAweDYwLCAmYnVkZ2V0X2F2LT5idWRnZXQuaTJjX2FkYXApOwogCQkJfQogCQl9IGVsc2UgewotCQkJZmUgPSBzdHYwMjk5X2F0dGFjaCgmdHlwaG9vbl9jb25maWcsCisJCQlmZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZ0eXBob29uX2NvbmZpZywKIAkJCQkJICAgICAmYnVkZ2V0X2F2LT5idWRnZXQuaTJjX2FkYXApOwogCQkJaWYgKGZlKSB7CiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfc3UxMjc4X3R5X2NpX3R1bmVyX3NldF9wYXJhbXM7CkBAIC0xMTE2LDE2ICs5ODAsMTUgQEAKIAljYXNlIFNVQklEX0RWQlNfVFZfU1RBUl9DSToKIAljYXNlIFNVQklEX0RWQlNfQ1lORVJHWTEyMDBOOgogCWNhc2UgU1VCSURfRFZCU19FQVNZV0FUQ0g6Ci0JCWZlID0gc3R2MDI5OV9hdHRhY2goJnBoaWxpcHNfc2QxODc4X2NvbmZpZywKKwkJZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmcGhpbGlwc19zZDE4NzhfY29uZmlnLAogCQkJCSZidWRnZXRfYXYtPmJ1ZGdldC5pMmNfYWRhcCk7CiAJCWlmIChmZSkgewogCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfc2QxODc4X3RkYTgyNjFfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAotCWNhc2UgU1VCSURfRFZCU19LTkMxX1BMVVM6CiAJY2FzZSBTVUJJRF9EVkJTX1RZUEhPT046Ci0JCWZlID0gc3R2MDI5OV9hdHRhY2goJnR5cGhvb25fY29uZmlnLAorCQlmZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZ0eXBob29uX2NvbmZpZywKIAkJCQkgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJaWYgKGZlKSB7CiAJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19zdTEyNzhfdHlfY2lfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTExMzMsNyArOTk2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNVQklEX0RWQlNfQ0lORVJHWTEyMDA6Ci0JCWZlID0gc3R2MDI5OV9hdHRhY2goJmNpbmVyZ3lfMTIwMHNfY29uZmlnLAorCQlmZSA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZjaW5lcmd5XzEyMDBzX2NvbmZpZywKIAkJCQkgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJaWYgKGZlKSB7CiAJCQlmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19zdTEyNzhfdHlfY2lfdHVuZXJfc2V0X3BhcmFtczsKQEAgLTExNDEsMTkgKzEwMDQsMTAgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFNVQklEX0RWQkNfS05DMToKLQkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOwotCQlmZSA9IHRkYTEwMDIxX2F0dGFjaCgmcGhpbGlwc19jdTEyMTZfY29uZmlnLAotCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAotCQkJCSAgICAgcmVhZF9wd20oYnVkZ2V0X2F2KSk7Ci0JCWlmIChmZSkgewotCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHBoaWxpcHNfY3UxMjE2X3R1bmVyX3NldF9wYXJhbXM7Ci0JCX0KLQkJYnJlYWs7Ci0KIAljYXNlIFNVQklEX0RWQkNfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCQ19DSU5FUkdZMTIwMDoKIAkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOwotCQlmZSA9IHRkYTEwMDIxX2F0dGFjaCgmcGhpbGlwc19jdTEyMTZfY29uZmlnLAorCQlmZSA9IGR2Yl9hdHRhY2godGRhMTAwMjFfYXR0YWNoLCAmcGhpbGlwc19jdTEyMTZfY29uZmlnLAogCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwLAogCQkJCSAgICAgcmVhZF9wd20oYnVkZ2V0X2F2KSk7CiAJCWlmIChmZSkgewpAQCAtMTE2OCw3ICsxMDIyLDcgQEAKIAljYXNlIFNVQklEX0RWQlRfS05DMV9QTFVTOgogCWNhc2UgU1VCSURfRFZCVF9DSU5FUkdZMTIwMDoKIAkJYnVkZ2V0X2F2LT5yZWluaXRpYWxpc2VfZGVtb2QgPSAxOwotCQlmZSA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190dTEyMTZfY29uZmlnLAorCQlmZSA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCAmcGhpbGlwc190dTEyMTZfY29uZmlnLAogCQkJCSAgICAgJmJ1ZGdldF9hdi0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJaWYgKGZlKSB7CiAJCQlmZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfdHVuZXJfaW5pdDsKQEAgLTExOTIsOCArMTA0Niw3IEBACiAJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2FkYXB0ZXIsCiAJCQkJICBidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiYnVkZ2V0LWF2OiBGcm9udGVuZCByZWdpc3RyYXRpb24gZmFpbGVkIVxuIik7Ci0JCWlmIChidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy5yZWxlYXNlKQotCQkJYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2Zyb250ZW5kLT5vcHMucmVsZWFzZShidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9mcm9udGVuZCk7CiAJCWJ1ZGdldF9hdi0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IE5VTEw7CiAJfQogfQpAQCAtMTIyNyw4ICsxMDgwLDEwIEBACiAJaWYgKGJ1ZGdldF9hdi0+YnVkZ2V0LmNpX3ByZXNlbnQpCiAJCWNpaW50Zl9kZWluaXQoYnVkZ2V0X2F2KTsKIAotCWlmIChidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQgIT0gTlVMTCkKKwlpZiAoYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2Zyb250ZW5kICE9IE5VTEwpIHsKIAkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoYnVkZ2V0X2F2LT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwkJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXRfYXYtPmJ1ZGdldC5kdmJfZnJvbnRlbmQpOworCX0KIAllcnIgPSB0dHBjaV9idWRnZXRfZGVpbml0KCZidWRnZXRfYXYtPmJ1ZGdldCk7CiAKIAlrZnJlZShidWRnZXRfYXYpOwpAQCAtMTQwMCw2ICsxMjU1LDcgQEAKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMsIDB4MTEzMSwgMHgwMDEwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXMsIDB4MTg5NCwgMHgwMDEwKSwKIAlNQUtFX0VYVEVOU0lPTl9QQ0koa25jMXNwLCAweDExMzEsIDB4MDAxMSksCisJTUFLRV9FWFRFTlNJT05fUENJKGtuYzFzcCwgMHgxODk0LCAweDAwMTEpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTQpLAogCU1BS0VfRVhURU5TSU9OX1BDSShrbmN4cywgMHgxODk0LCAweDAwMTYpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRld3BscywgMHgxODk0LCAweDAwMWUpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCBmZmJiYjNlLi4yYTJlOWI0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtNzQ5LDE3ICs3NDksMTcgQEAKIAkvLyBzZXR1cCBQTEwgZmlsdGVyIGFuZCBUREE5ODg5CiAJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKIAljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMHgxNCk7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAweDE0KTsKIAkJZmlsdGVyID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEJBTkRXSURUSF83X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMHg4MCk7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAweDgwKTsKIAkJZmlsdGVyID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMHgxNCk7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAweDE0KTsKIAkJZmlsdGVyID0gMTsKIAkJYnJlYWs7CiAKQEAgLTk4OCw3ICs5ODgsNyBAQAogCXN3aXRjaCAoYnVkZ2V0X2NpLT5idWRnZXQuZGV2LT5wY2ktPnN1YnN5c3RlbV9kZXZpY2UpIHsKIAljYXNlIDB4MTAwYzoJCS8vIEhhdXBwYXVnZS9UVCBOb3ZhLUNJIGJ1ZGdldCAoc3R2MDI5OS9BTFBTIEJTUlU2KHRzYTUwNTkpKQogCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPQotCQkJc3R2MDI5OV9hdHRhY2goJmFscHNfYnNydTZfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOworCQkJZHZiX2F0dGFjaChzdHYwMjk5X2F0dGFjaCwgJmFscHNfYnNydTZfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfYnNydTZfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+dHVuZXJfcHJpdiA9ICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcDsKQEAgLTk5OCw3ICs5OTgsNyBAQAogCiAJY2FzZSAweDEwMGY6CQkvLyBIYXVwcGF1Z2UvVFQgTm92YS1DSSBidWRnZXQgKHN0djAyOTliL1BoaWxpcHMgc3UxMjc4KHRzYTUwNTkpKQogCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPQotCQkJc3R2MDI5OV9hdHRhY2goJnBoaWxpcHNfc3UxMjc4X3R0X2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKKwkJCWR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZwaGlsaXBzX3N1MTI3OF90dF9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CiAJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc19zdTEyNzhfdHRfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJyZWFrOwpAQCAtMTAwOCw3ICsxMDA4LDcgQEAKIAljYXNlIDB4MTAxMDoJCS8vIFRUIERWQi1DIENJIGJ1ZGdldCAoc3R2MDI5Ny9QaGlsaXBzIHRkbTEzMTZsKHRkYTY2NTF0dCkpCiAJCWJ1ZGdldF9jaS0+dHVuZXJfcGxsX2FkZHJlc3MgPSAweDYxOwogCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPQotCQkJc3R2MDI5N19hdHRhY2goJmR2YmNfcGhpbGlwc190ZG0xMzE2bF9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CisJCQlkdmJfYXR0YWNoKHN0djAyOTdfYXR0YWNoLCAmZHZiY19waGlsaXBzX3RkbTEzMTZsX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkgewogCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmJjX3BoaWxpcHNfdGRtMTMxNmxfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJyZWFrOwpAQCAtMTAxOCw3ICsxMDE4LDcgQEAKIAljYXNlIDB4MTAxMToJCS8vIEhhdXBwYXVnZS9UVCBOb3ZhLVQgYnVkZ2V0ICh0ZGExMDA0NS9QaGlsaXBzIHRkbTEzMTZsKHRkYTY2NTF0dCkgKyBUREE5ODg5KQogCQlidWRnZXRfY2ktPnR1bmVyX3BsbF9hZGRyZXNzID0gMHg2MzsKIAkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0KLQkJCXRkYTEwMDQ1X2F0dGFjaCgmcGhpbGlwc190ZG0xMzE2bF9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CisJCQlkdmJfYXR0YWNoKHRkYTEwMDQ1X2F0dGFjaCwgJnBoaWxpcHNfdGRtMTMxNmxfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGRtMTMxNmxfdHVuZXJfaW5pdDsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZG0xMzE2bF90dW5lcl9zZXRfcGFyYW1zOwpAQCAtMTAyOSw3ICsxMDI5LDcgQEAKIAljYXNlIDB4MTAxMjoJCS8vIFRUIERWQi1UIENJIGJ1ZGdldCAodGRhMTAwNDYvUGhpbGlwcyB0ZG0xMzE2bCh0ZGE2NjUxdHQpKQogCQlidWRnZXRfY2ktPnR1bmVyX3BsbF9hZGRyZXNzID0gMHg2MDsKIAkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0KLQkJCXRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190ZG0xMzE2bF9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CisJCQlkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwgJnBoaWxpcHNfdGRtMTMxNmxfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGRtMTMxNmxfdHVuZXJfaW5pdDsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190ZG0xMzE2bF90dW5lcl9zZXRfcGFyYW1zOwpAQCAtMTAzOCwxNiArMTAzOCwxNSBAQAogCQlicmVhazsKIAogCWNhc2UgMHgxMDE3OgkJLy8gVFQgUy0xNTAwIFBDSQotCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic2JlMV9jb25maWcsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCk7CisJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZhbHBzX2JzYmUxX2NvbmZpZywgJmJ1ZGdldF9jaS0+YnVkZ2V0LmkyY19hZGFwKTsKIAkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkgewogCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzYmUxX3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPnR1bmVyX3ByaXYgPSAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXA7CiAKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLmRpc2huZXR3b3JrX3NlbmRfbGVnYWN5X2NvbW1hbmQgPSBOVUxMOwotCQkJaWYgKGxuYnAyMV9hdHRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXAsIExOQlAyMV9MTEMsIDApKSB7CisJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgTE5CUDIxX0xMQywgMCkgPT0gTlVMTCkgewogCQkJCXByaW50aygiJXM6IE5vIExOQlAyMSBmb3VuZCFcbiIsIF9fRlVOQ1RJT05fXyk7Ci0JCQkJaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnJlbGVhc2UpCi0JCQkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnJlbGVhc2UoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwkJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCk7CiAJCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gTlVMTDsKIAkJCX0KIAkJfQpAQCAtMTA2NSw4ICsxMDY0LDcgQEAKIAkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZAogCQkgICAgKCZidWRnZXRfY2ktPmJ1ZGdldC5kdmJfYWRhcHRlciwgYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSkgewogCQkJcHJpbnRrKCJidWRnZXQtY2k6IEZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhXG4iKTsKLQkJCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQtPm9wcy5yZWxlYXNlKQotCQkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZC0+b3BzLnJlbGVhc2UoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKIAkJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IE5VTEw7CiAJCX0KIAl9CkBAIC0xMTE0LDggKzExMTIsMTAgQEAKIAogCWlmIChidWRnZXRfY2ktPmJ1ZGdldC5jaV9wcmVzZW50KQogCQljaWludGZfZGVpbml0KGJ1ZGdldF9jaSk7Ci0JaWYgKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCkKKwlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7CiAJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKTsKKwl9CiAJZXJyID0gdHRwY2lfYnVkZ2V0X2RlaW5pdCgmYnVkZ2V0X2NpLT5idWRnZXQpOwogCiAJdGFza2xldF9raWxsKCZidWRnZXRfY2ktPm1zcDQzMF9pcnFfdGFza2xldCk7CkBAIC0xMTUzLDcgKzExNTMsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb24gPSB7Ci0JLm5hbWUgPSAiYnVkZ2V0X2NpIGR2YlwwIiwKKwkubmFtZSA9ICJidWRnZXRfY2kgZHZiIiwKIAkuZmxhZ3MgPSBTQUE3MTQ2X0kyQ19TSE9SVF9ERUxBWSwKIAogCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1wYXRjaC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKaW5kZXggNTcyMjc0NC4uZmMxMjY3YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LXBhdGNoLmMKQEAgLTMyNSw3ICszMjUsNyBAQAogCWNhc2UgMHgxMDEzOiAvLyBTQVRFTENPIE11bHRpbWVkaWEgUENJCiAKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlYyIGZpcnN0IG9mIGFsbAotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHZlczF4OTNfYXR0YWNoKCZhbHBzX2JzcnYyX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godmVzMXg5M19hdHRhY2gsICZhbHBzX2JzcnYyX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnYyX3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBidWRnZXRfcGF0Y2hfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKQEAgLTMzNSw3ICszMzUsNyBAQAogCQl9CiAKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlU2IG5vdwotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHN0djAyOTlfYXR0YWNoKCZhbHBzX2JzcnU2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZhbHBzX2JzcnU2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnU2X3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+dHVuZXJfcHJpdiA9ICZidWRnZXQtPmkyY19hZGFwOwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJCX0KIAogCQkvLyBUcnkgdGhlIGdydW5kaWcgMjk1MDQtNDUxCi0JCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gdGRhODA4M19hdHRhY2goJmdydW5kaWdfMjk1MDRfNDUxX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhODA4M19hdHRhY2gsICZncnVuZGlnXzI5NTA0XzQ1MV9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKIAkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZ3J1bmRpZ18yOTUwNF80NTFfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZCA9IGJ1ZGdldF9kaXNlcWNfc2VuZF9tYXN0ZXJfY21kOwpAQCAtMzY3LDggKzM2Nyw3IEBACiAJfSBlbHNlIHsKIAkJaWYgKGR2Yl9yZWdpc3Rlcl9mcm9udGVuZCgmYnVkZ2V0LT5kdmJfYWRhcHRlciwgYnVkZ2V0LT5kdmJfZnJvbnRlbmQpKSB7CiAJCQlwcmludGsoImJ1ZGdldC1hdjogRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZCFcbiIpOwotCQkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMucmVsZWFzZSkKLQkJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnJlbGVhc2UoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOworCQkJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXQtPmR2Yl9mcm9udGVuZCk7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IE5VTEw7CiAJCX0KIAl9CkBAIC02MjcsOCArNjI2LDEwIEBACiAJc3RydWN0IGJ1ZGdldF9wYXRjaCAqYnVkZ2V0ID0gKHN0cnVjdCBidWRnZXRfcGF0Y2gqKSBkZXYtPmV4dF9wcml2OwogCWludCBlcnI7CiAKLQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIGR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKTsKLQorCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgeworCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChidWRnZXQtPmR2Yl9mcm9udGVuZCk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOworCX0KIAllcnIgPSB0dHBjaV9idWRnZXRfZGVpbml0IChidWRnZXQpOwogCiAJa2ZyZWUgKGJ1ZGdldCk7CkBAIC02NDcsNyArNjQ4LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBidWRnZXRfZXh0ZW5zaW9uID0gewotCS5uYW1lICAgICAgICAgICA9ICJidWRnZXRfcGF0Y2ggZHZiXDAiLAorCS5uYW1lICAgICAgICAgICA9ICJidWRnZXRfcGF0Y2ggZHZiIiwKIAkuZmxhZ3MgICAgICAgICAgPSAwLAogCiAJLm1vZHVsZSAgICAgICAgID0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCmluZGV4IDg2M2RmZmIuLmU1OGYwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC5jCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAibDY0NzgxLmgiCiAjaW5jbHVkZSAidGRhODA4My5oIgogI2luY2x1ZGUgInM1aDE0MjAuaCIKKyNpbmNsdWRlICJ0ZGExMDA4Ni5oIgorI2luY2x1ZGUgInRkYTgyNnguaCIKICNpbmNsdWRlICJsbmJwMjEuaCIKICNpbmNsdWRlICJic3J1Ni5oIgogCkBAIC0zNDIsNiArMzQ0LDExIEBACiAJLmludmVydCA9IDEsCiB9OwogCitzdGF0aWMgc3RydWN0IHRkYTEwMDg2X2NvbmZpZyB0ZGExMDA4Nl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAorCS5pbnZlcnQgPSAwLAorfTsKKwogc3RhdGljIHU4IHJlYWRfcHdtKHN0cnVjdCBidWRnZXQqIGJ1ZGdldCkKIHsKIAl1OCBiID0gMHhmZjsKQEAgLTM2MSw3ICszNjgsNyBAQAogCWNhc2UgMHgxMDAzOiAvLyBIYXVwcGF1Z2UvVFQgTm92YSBidWRnZXQgKHN0djAyOTkvQUxQUyBCU1JVNih0c2E1MDU5KSBPUiB2ZXMxODkzL0FMUFMgQlNSVjIoc3A1NjU5KSkKIAljYXNlIDB4MTAxMzoKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlYyIGZpcnN0IG9mIGFsbAotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHZlczF4OTNfYXR0YWNoKCZhbHBzX2JzcnYyX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godmVzMXg5M19hdHRhY2gsICZhbHBzX2JzcnYyX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnYyX3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLmRpc2VxY19zZW5kX21hc3Rlcl9jbWQgPSBidWRnZXRfZGlzZXFjX3NlbmRfbWFzdGVyX2NtZDsKQEAgLTM3MSw3ICszNzgsNyBAQAogCQl9CiAKIAkJLy8gdHJ5IHRoZSBBTFBTIEJTUlU2IG5vdwotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHN0djAyOTlfYXR0YWNoKCZhbHBzX2JzcnU2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDI5OV9hdHRhY2gsICZhbHBzX2JzcnU2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBhbHBzX2JzcnU2X3R1bmVyX3NldF9wYXJhbXM7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+dHVuZXJfcHJpdiA9ICZidWRnZXQtPmkyY19hZGFwOwpAQCAtMzgxLDcgKzM4OCw3IEBACiAKIAljYXNlIDB4MTAwNDogLy8gSGF1cHBhdWdlL1RUIERWQi1DIGJ1ZGdldCAodmVzMTgyMC9BTFBTIFREQkUyKHNwNTY1OSkpCiAKLQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSB2ZXMxODIwX2F0dGFjaCgmYWxwc190ZGJlMl9jb25maWcsICZidWRnZXQtPmkyY19hZGFwLCByZWFkX3B3bShidWRnZXQpKTsKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHZlczE4MjBfYXR0YWNoLCAmYWxwc190ZGJlMl9jb25maWcsICZidWRnZXQtPmkyY19hZGFwLCByZWFkX3B3bShidWRnZXQpKTsKIAkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc190ZGJlMl90dW5lcl9zZXRfcGFyYW1zOwogCQkJYnJlYWs7CkBAIC0zOTAsNyArMzk3LDcgQEAKIAogCWNhc2UgMHgxMDA1OiAvLyBIYXVwcGF1Z2UvVFQgTm92YS1UIGJ1ZGdldCAoTDY0NzgxL0dydW5kaWcgMjk1MDQtNDAxKHRzYTUwNjApKQogCi0JCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gbDY0NzgxX2F0dGFjaCgmZ3J1bmRpZ18yOTUwNF80MDFfY29uZmlnLCAmYnVkZ2V0LT5pMmNfYWRhcCk7CisJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gZHZiX2F0dGFjaChsNjQ3ODFfYXR0YWNoLCAmZ3J1bmRpZ18yOTUwNF80MDFfY29uZmlnLCAmYnVkZ2V0LT5pMmNfYWRhcCk7CiAJCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgewogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGdydW5kaWdfMjk1MDRfNDAxX3R1bmVyX3NldF9wYXJhbXM7CiAJCQlicmVhazsKQEAgLTM5OCw3ICs0MDUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgMHg0ZjYwOiAvLyBGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1TIFBDSSByZXYgQUwgKHN0djAyOTkvQUxQUyBCU1JVNih0c2E1MDU5KSkKLQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBzdHYwMjk5X2F0dGFjaCgmYWxwc19ic3J1Nl9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmYWxwc19ic3J1Nl9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKIAkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gYWxwc19ic3J1Nl90dW5lcl9zZXRfcGFyYW1zOwogCQkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQtPnR1bmVyX3ByaXYgPSAmYnVkZ2V0LT5pMmNfYWRhcDsKQEAgLTQwOCw3ICs0MTUsNyBAQAogCQlicmVhazsKIAogCWNhc2UgMHg0ZjYxOiAvLyBGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1TIFBDSSByZXYgR1IgKHRkYTgwODMvR3J1bmRpZyAyOTUwNC00NTEodHNhNTUyMikpCi0JCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kID0gdGRhODA4M19hdHRhY2goJmdydW5kaWdfMjk1MDRfNDUxX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhODA4M19hdHRhY2gsICZncnVuZGlnXzI5NTA0XzQ1MV9jb25maWcsICZidWRnZXQtPmkyY19hZGFwKTsKIAkJaWYgKGJ1ZGdldC0+ZHZiX2Zyb250ZW5kKSB7CiAJCQlidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gZ3J1bmRpZ18yOTUwNF80NTFfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSBzaWVtZW5zX2J1ZGdldF9zZXRfdm9sdGFnZTsKQEAgLTQxNywxMCArNDI0LDI4IEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDEwMTY6IC8vIEhhdXBwYXVnZS9UVCBOb3ZhLVMgU0UgKHNhbXN1bmcgczVoMTQyMC8/Pz8/KHRkYTgyNjApKQotCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IHM1aDE0MjBfYXR0YWNoKCZzNWgxNDIwX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlidWRnZXQtPmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2goczVoMTQyMF9hdHRhY2gsICZzNWgxNDIwX2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOwogCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKIAkJCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBzNWgxNDIwX3R1bmVyX3NldF9wYXJhbXM7Ci0JCQlpZiAobG5icDIxX2F0dGFjaChidWRnZXQtPmR2Yl9mcm9udGVuZCwgJmJ1ZGdldC0+aTJjX2FkYXAsIDAsIDApKSB7CisJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBidWRnZXQtPmR2Yl9mcm9udGVuZCwgJmJ1ZGdldC0+aTJjX2FkYXAsIDAsIDApID09IE5VTEwpIHsKKwkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOworCQkJCWdvdG8gZXJyb3Jfb3V0OworCQkJfQorCQkJYnJlYWs7CisJCX0KKworCWNhc2UgMHgxMDE4OiAvLyBUVCBCdWRnZXQtUy0xNDAxIChwaGlsaXBzIHRkYTEwMDg2L3BoaWxpcHMgdGRhODI2MikKKwkJLy8gZ3BpbzIgaXMgY29ubmVjdGVkIHRvIENMQiAtIHJlc2V0IGl0ICsgbGVhdmUgaXQgaGlnaAorCQlzYWE3MTQ2X3NldGdwaW8oYnVkZ2V0LT5kZXYsIDIsIFNBQTcxNDZfR1BJT19PVVRMTyk7CisJCW1zbGVlcCgxKTsKKwkJc2FhNzE0Nl9zZXRncGlvKGJ1ZGdldC0+ZGV2LCAyLCBTQUE3MTQ2X0dQSU9fT1VUSEkpOworCQltc2xlZXAoMSk7CisKKwkJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDg2X2F0dGFjaCwgJnRkYTEwMDg2X2NvbmZpZywgJmJ1ZGdldC0+aTJjX2FkYXApOworCQlpZiAoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBidWRnZXQtPmR2Yl9mcm9udGVuZCwgMHg2MCwgJmJ1ZGdldC0+aTJjX2FkYXAsIDApID09IE5VTEwpCisJCQkJcHJpbnRrKCIlczogTm8gdGRhODI2eCBmb3VuZCFcbiIsIF9fRlVOQ1RJT05fXyk7CisJCQlpZiAoZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCBidWRnZXQtPmR2Yl9mcm9udGVuZCwgJmJ1ZGdldC0+aTJjX2FkYXAsIDAsIDApID09IE5VTEwpIHsKIAkJCQlwcmludGsoIiVzOiBObyBMTkJQMjEgZm91bmQhXG4iLCBfX0ZVTkNUSU9OX18pOwogCQkJCWdvdG8gZXJyb3Jfb3V0OwogCQkJfQpAQCAtNDQyLDggKzQ2Nyw3IEBACiAKIGVycm9yX291dDoKIAlwcmludGsoImJ1ZGdldDogRnJvbnRlbmQgcmVnaXN0cmF0aW9uIGZhaWxlZCFcbiIpOwotCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZC0+b3BzLnJlbGVhc2UpCi0JCWJ1ZGdldC0+ZHZiX2Zyb250ZW5kLT5vcHMucmVsZWFzZShidWRnZXQtPmR2Yl9mcm9udGVuZCk7CisJZHZiX2Zyb250ZW5kX2RldGFjaChidWRnZXQtPmR2Yl9mcm9udGVuZCk7CiAJYnVkZ2V0LT5kdmJfZnJvbnRlbmQgPSBOVUxMOwogCXJldHVybjsKIH0KQEAgLTQ4MSw3ICs1MDUsMTAgQEAKIAlzdHJ1Y3QgYnVkZ2V0ICpidWRnZXQgPSAoc3RydWN0IGJ1ZGdldCopIGRldi0+ZXh0X3ByaXY7CiAJaW50IGVycjsKIAotCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOworCWlmIChidWRnZXQtPmR2Yl9mcm9udGVuZCkgeworCQlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChidWRnZXQtPmR2Yl9mcm9udGVuZCk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2goYnVkZ2V0LT5kdmJfZnJvbnRlbmQpOworCX0KIAogCWVyciA9IHR0cGNpX2J1ZGdldF9kZWluaXQgKGJ1ZGdldCk7CiAKQEAgLTQ5Nyw2ICs1MjQsNyBAQAogTUFLRV9CVURHRVRfSU5GTyh0dGJjLAkiVFQtQnVkZ2V0L1dpblRWLU5PVkEtQyAgUENJIiwJQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8odHRidCwJIlRULUJ1ZGdldC9XaW5UVi1OT1ZBLVQgIFBDSSIsCUJVREdFVF9UVCk7CiBNQUtFX0JVREdFVF9JTkZPKHNhdGVsLAkiU0FURUxDTyBNdWx0aW1lZGlhIFBDSSIsCUJVREdFVF9UVF9IV19ESVNFUUMpOworTUFLRV9CVURHRVRfSU5GTyh0dGJzMTQwMSwgIlRULUJ1ZGdldC1TLTE0MDEgUENJIiwgQlVER0VUX1RUKTsKIE1BS0VfQlVER0VUX0lORk8oZnNhY3MwLCAiRnVqaXRzdSBTaWVtZW5zIEFjdGl2eSBCdWRnZXQtUyBQQ0kgKHJldiBHUi9ncnVuZGlnIGZyb250ZW5kKSIsIEJVREdFVF9GU19BQ1RJVlkpOwogTUFLRV9CVURHRVRfSU5GTyhmc2FjczEsICJGdWppdHN1IFNpZW1lbnMgQWN0aXZ5IEJ1ZGdldC1TIFBDSSAocmV2IEFML2FscHMgZnJvbnRlbmQpIiwgQlVER0VUX0ZTX0FDVElWWSk7CiAKQEAgLTUwNiw2ICs1MzQsNyBAQAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJ0LCAgMHgxM2MyLCAweDEwMDUpLAogCU1BS0VfRVhURU5TSU9OX1BDSShzYXRlbCwgMHgxM2MyLCAweDEwMTMpLAogCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzLCAgMHgxM2MyLCAweDEwMTYpLAorCU1BS0VfRVhURU5TSU9OX1BDSSh0dGJzMTQwMSwgMHgxM2MyLCAweDEwMTgpLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczEsMHgxMTMxLCAweDRmNjApLAogCU1BS0VfRVhURU5TSU9OX1BDSShmc2FjczAsMHgxMTMxLCAweDRmNjEpLAogCXsKQEAgLTUxNiw3ICs1NDUsNyBAQAogTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIHBjaV90YmwpOwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGJ1ZGdldF9leHRlbnNpb24gPSB7Ci0JLm5hbWUJCT0gImJ1ZGdldCBkdmJcMCIsCisJLm5hbWUJCT0gImJ1ZGdldCBkdmIiLAogCS5mbGFncwkJPSBTQUE3MTQ2X0kyQ19TSE9SVF9ERUxBWSwKIAogCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCmluZGV4IDQ2YTZhNjAuLmU3OGVhOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9LY29uZmlnCkBAIC0yLDEzICsyLDEzIEBACiAJdHJpc3RhdGUgIlRlY2hub3RyZW5kL0hhdXBwYXVnZSBOb3ZhLVVTQiBkZXZpY2VzIgogCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgVVNCICYmIEkyQwogCXNlbGVjdCBEVkJfUExMCi0Jc2VsZWN0IERWQl9DWDIyNzAwCi0Jc2VsZWN0IERWQl9UREExMDA0WAotCXNlbGVjdCBEVkJfVkVTMTgyMAotCXNlbGVjdCBEVkJfVERBODA4MwotCXNlbGVjdCBEVkJfU1RWMDI5OQotCXNlbGVjdCBEVkJfU1RWMDI5NwotCXNlbGVjdCBEVkJfTE5CUDIxCisJc2VsZWN0IERWQl9DWDIyNzAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREExMDA0WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVkVTMTgyMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBODA4MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfU1RWMDI5NyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgZXh0ZXJuYWwgVVNCIGFkYXB0ZXJzIGRlc2lnbmVkIGJ5IFRlY2hub3RyZW5kIGFuZAogCSAgcHJvZHVjZWQgYnkgSGF1cHBhdWdlLCBzaGlwcGVkIHVuZGVyIHRoZSBicmFuZCBuYW1lICdOb3ZhLVVTQicuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItYnVkZ2V0L2R2Yi10dHVzYi1idWRnZXQuYwppbmRleCAwNGNlZjMwLi4yMzQxOTk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1idWRnZXQvZHZiLXR0dXNiLWJ1ZGdldC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWJ1ZGdldC9kdmItdHR1c2ItYnVkZ2V0LmMKQEAgLTExMDcsMTcgKzExMDcsMTcgQEAKIAkvLyBzZXR1cCBQTEwgZmlsdGVyCiAJc3dpdGNoIChwYXJhbXMtPnUub2ZkbS5iYW5kd2lkdGgpIHsKIAljYXNlIEJBTkRXSURUSF82X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMCk7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAwKTsKIAkJZmlsdGVyID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEJBTkRXSURUSF83X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMCk7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAwKTsKIAkJZmlsdGVyID0gMDsKIAkJYnJlYWs7CiAKIAljYXNlIEJBTkRXSURUSF84X01IWjoKLQkJdGRhMTAwNHhfd3JpdGVfYnl0ZShmZSwgMHgwQywgMHhGRik7CisJCXRkYTEwMDR4X3dyaXRlcmVnKGZlLCAweDBDLCAweEZGKTsKIAkJZmlsdGVyID0gMTsKIAkJYnJlYWs7CiAKQEAgLTE1NjQsMTMgKzE1NjQsMTMgQEAKIAlzd2l0Y2gobGUxNl90b19jcHUodHR1c2ItPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpKSB7CiAJY2FzZSAweDEwMDM6IC8vIEhhdXBwYXVnZS9UVCBOb3ZhLVVTQi1TIGJ1ZGdldCAoc3R2MDI5OS9BTFBTIEJTUlU2fEJTQkUxKHRzYTUwNTkpKQogCQkvLyB0cnkgdGhlIHN0djAyOTkgYmFzZWQgZmlyc3QKLQkJdHR1c2ItPmZlID0gc3R2MDI5OV9hdHRhY2goJmFscHNfc3R2MDI5OV9jb25maWcsICZ0dHVzYi0+aTJjX2FkYXApOworCQl0dHVzYi0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTlfYXR0YWNoLCAmYWxwc19zdHYwMjk5X2NvbmZpZywgJnR0dXNiLT5pMmNfYWRhcCk7CiAJCWlmICh0dHVzYi0+ZmUgIT0gTlVMTCkgewogCQkJdHR1c2ItPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RzYTUwNTlfdHVuZXJfc2V0X3BhcmFtczsKIAogCQkJaWYodHR1c2ItPnJldmlzaW9uID09IFRUVVNCX1JFVl8yXzIpIHsgLy8gQUxQUyBCU0JFMQogCQkJCWFscHNfc3R2MDI5OV9jb25maWcuaW5pdHRhYiA9IGFscHNfYnNiZTFfaW5pdHRhYjsKLQkJCQlsbmJwMjFfYXR0YWNoKHR0dXNiLT5mZSwgJnR0dXNiLT5pMmNfYWRhcCwgMCwgMCk7CisJCQkJZHZiX2F0dGFjaChsbmJwMjFfYXR0YWNoLCB0dHVzYi0+ZmUsICZ0dHVzYi0+aTJjX2FkYXAsIDAsIDApOwogCQkJfSBlbHNlIHsgLy8gQUxQUyBCU1JVNgogCQkJCXR0dXNiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gdHR1c2Jfc2V0X3ZvbHRhZ2U7CiAJCQl9CkBAIC0xNTc4LDcgKzE1NzgsNyBAQAogCQl9CiAKIAkJLy8gR3J1bmRpZyAyOTUwNC00OTEKLQkJdHR1c2ItPmZlID0gdGRhODA4M19hdHRhY2goJnR0dXNiX25vdmFzX2dydW5kaWdfMjk1MDRfNDkxX2NvbmZpZywgJnR0dXNiLT5pMmNfYWRhcCk7CisJCXR0dXNiLT5mZSA9IGR2Yl9hdHRhY2godGRhODA4M19hdHRhY2gsICZ0dHVzYl9ub3Zhc19ncnVuZGlnXzI5NTA0XzQ5MV9jb25maWcsICZ0dHVzYi0+aTJjX2FkYXApOwogCQlpZiAodHR1c2ItPmZlICE9IE5VTEwpIHsKIAkJCXR0dXNiLT5mZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gdHR1c2Jfbm92YXNfZ3J1bmRpZ18yOTUwNF80OTFfdHVuZXJfc2V0X3BhcmFtczsKIAkJCXR0dXNiLT5mZS0+b3BzLnNldF92b2x0YWdlID0gdHR1c2Jfc2V0X3ZvbHRhZ2U7CkBAIC0xNTg3LDEzICsxNTg3LDEzIEBACiAJCWJyZWFrOwogCiAJY2FzZSAweDEwMDQ6IC8vIEhhdXBwYXVnZS9UVCBEVkItQyBidWRnZXQgKHZlczE4MjAvQUxQUyBUREJFMihzcDU2NTkpKQotCQl0dHVzYi0+ZmUgPSB2ZXMxODIwX2F0dGFjaCgmYWxwc190ZGJlMl9jb25maWcsICZ0dHVzYi0+aTJjX2FkYXAsIHJlYWRfcHdtKHR0dXNiKSk7CisJCXR0dXNiLT5mZSA9IGR2Yl9hdHRhY2godmVzMTgyMF9hdHRhY2gsICZhbHBzX3RkYmUyX2NvbmZpZywgJnR0dXNiLT5pMmNfYWRhcCwgcmVhZF9wd20odHR1c2IpKTsKIAkJaWYgKHR0dXNiLT5mZSAhPSBOVUxMKSB7CiAJCQl0dHVzYi0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfdGRiZTJfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJyZWFrOwogCQl9CiAKLQkJdHR1c2ItPmZlID0gc3R2MDI5N19hdHRhY2goJmR2YmNfcGhpbGlwc190ZG0xMzE2bF9jb25maWcsICZ0dHVzYi0+aTJjX2FkYXApOworCQl0dHVzYi0+ZmUgPSBkdmJfYXR0YWNoKHN0djAyOTdfYXR0YWNoLCAmZHZiY19waGlsaXBzX3RkbTEzMTZsX2NvbmZpZywgJnR0dXNiLT5pMmNfYWRhcCk7CiAJCWlmICh0dHVzYi0+ZmUgIT0gTlVMTCkgewogCQkJdHR1c2ItPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmJjX3BoaWxpcHNfdGRtMTMxNmxfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJyZWFrOwpAQCAtMTYwMiwxNCArMTYwMiwxNCBAQAogCiAJY2FzZSAweDEwMDU6IC8vIEhhdXBwYXVnZS9UVCBOb3ZhLVVTQi10IGJ1ZGdldCAodGRhMTAwNDYvUGhpbGlwcyB0ZDEzMTYodGRhNjY1MXR0KSBPUiBjeDIyNzAwL0FMUFMgVERNQjcoPz8pKQogCQkvLyB0cnkgdGhlIEFMUFMgVERNQjcgZmlyc3QKLQkJdHR1c2ItPmZlID0gY3gyMjcwMF9hdHRhY2goJmFscHNfdGRtYjdfY29uZmlnLCAmdHR1c2ItPmkyY19hZGFwKTsKKwkJdHR1c2ItPmZlID0gZHZiX2F0dGFjaChjeDIyNzAwX2F0dGFjaCwgJmFscHNfdGRtYjdfY29uZmlnLCAmdHR1c2ItPmkyY19hZGFwKTsKIAkJaWYgKHR0dXNiLT5mZSAhPSBOVUxMKSB7CiAJCQl0dHVzYi0+ZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFscHNfdGRtYjdfdHVuZXJfc2V0X3BhcmFtczsKIAkJCWJyZWFrOwogCQl9CiAKIAkJLy8gUGhpbGlwcyB0ZDEzMTYKLQkJdHR1c2ItPmZlID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3RkbTEzMTZsX2NvbmZpZywgJnR0dXNiLT5pMmNfYWRhcCk7CisJCXR0dXNiLT5mZSA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLCAmcGhpbGlwc190ZG0xMzE2bF9jb25maWcsICZ0dHVzYi0+aTJjX2FkYXApOwogCQlpZiAodHR1c2ItPmZlICE9IE5VTEwpIHsKIAkJCXR0dXNiLT5mZS0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190ZG0xMzE2bF90dW5lcl9pbml0OwogCQkJdHR1c2ItPmZlLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3RkbTEzMTZsX3R1bmVyX3NldF9wYXJhbXM7CkBAIC0xNjI1LDggKzE2MjUsNyBAQAogCX0gZWxzZSB7CiAJCWlmIChkdmJfcmVnaXN0ZXJfZnJvbnRlbmQoJnR0dXNiLT5hZGFwdGVyLCB0dHVzYi0+ZmUpKSB7CiAJCQlwcmludGsoImR2Yi10dHVzYi1idWRnZXQ6IEZyb250ZW5kIHJlZ2lzdHJhdGlvbiBmYWlsZWQhXG4iKTsKLQkJCWlmICh0dHVzYi0+ZmUtPm9wcy5yZWxlYXNlKQotCQkJCXR0dXNiLT5mZS0+b3BzLnJlbGVhc2UodHR1c2ItPmZlKTsKKwkJCWR2Yl9mcm9udGVuZF9kZXRhY2godHR1c2ItPmZlKTsKIAkJCXR0dXNiLT5mZSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0xNzYzLDcgKzE3NjIsMTAgQEAKIAlkdmJfbmV0X3JlbGVhc2UoJnR0dXNiLT5kdmJuZXQpOwogCWR2Yl9kbXhkZXZfcmVsZWFzZSgmdHR1c2ItPmRteGRldik7CiAJZHZiX2RteF9yZWxlYXNlKCZ0dHVzYi0+ZHZiX2RlbXV4KTsKLQlpZiAodHR1c2ItPmZlICE9IE5VTEwpIGR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKHR0dXNiLT5mZSk7CisJaWYgKHR0dXNiLT5mZSAhPSBOVUxMKSB7CisJCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKHR0dXNiLT5mZSk7CisJCWR2Yl9mcm9udGVuZF9kZXRhY2godHR1c2ItPmZlKTsKKwl9CiAJaTJjX2RlbF9hZGFwdGVyKCZ0dHVzYi0+aTJjX2FkYXApOwogCWR2Yl91bnJlZ2lzdGVyX2FkYXB0ZXIoJnR0dXNiLT5hZGFwdGVyKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvdHR1c2ItZGVjL3R0dXNiX2RlYy5jCmluZGV4IDZjMWNiNzcuLmRlMDc3YTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0dXNiLWRlYy90dHVzYl9kZWMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHVzYi1kZWMvdHR1c2JfZGVjLmMKQEAgLTIxNSw3ICsyMTUsNyBAQAogCQljYXNlIC1FQ09OTlJFU0VUOgogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVTSFVURE9XTjoKLQkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FVElNRToKIAkJCS8qIHRoaXMgdXJiIGlzIGRlYWQsIGNsZWFudXAgKi8KIAkJCWRwcmludGsoIiVzOnVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZFxuIiwKIAkJCQkJX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CkBAIC0xNTEyLDcgKzE1MTIsMTEgQEAKIAlkZWMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmRlYy0+ZGVtdXguZG14LCAmZGVjLT5mcm9udGVuZCk7CiAJZHZiX2RteGRldl9yZWxlYXNlKCZkZWMtPmRteGRldik7CiAJZHZiX2RteF9yZWxlYXNlKCZkZWMtPmRlbXV4KTsKLQlpZiAoZGVjLT5mZSkgZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZGVjLT5mZSk7CisJaWYgKGRlYy0+ZmUpIHsKKwkJZHZiX3VucmVnaXN0ZXJfZnJvbnRlbmQoZGVjLT5mZSk7CisJCWlmIChkZWMtPmZlLT5vcHMucmVsZWFzZSkKKwkJCWRlYy0+ZmUtPm9wcy5yZWxlYXNlKGRlYy0+ZmUpOworCX0KIAlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkZWMtPmFkYXB0ZXIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3JhZGlvL0tjb25maWcKaW5kZXggMjIwMDc2Yi4uNzAxNTUxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vS2NvbmZpZwpAQCAtNyw3ICs3LDcgQEAKIAogY29uZmlnIFJBRElPX0NBREVUCiAJdHJpc3RhdGUgIkFEUyBDYWRldCBBTS9GTSBUdW5lciIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEFNL0ZNIHJhZGlvIGNhcmRzLCBhbmQgdGhlbgogCSAgZmlsbCBpbiB0aGUgcG9ydCBhZGRyZXNzIGJlbG93LgpAQCAtMjUsNyArMjUsNyBAQAogCiBjb25maWcgUkFESU9fUlRSQUNLCiAJdHJpc3RhdGUgIkFJTVNsYWIgUmFkaW9UcmFjayAoYWthIFJhZGlvUmV2ZWFsKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwyCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMsIGFuZCB0aGVuIGZpbGwKIAkgIGluIHRoZSBwb3J0IGFkZHJlc3MgYmVsb3cuCkBAIC01OSw3ICs1OSw3IEBACiAKIGNvbmZpZyBSQURJT19SVFJBQ0syCiAJdHJpc3RhdGUgIkFJTVNsYWIgUmFkaW9UcmFjayBJSSBzdXBwb3J0IgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwyCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIEZNIHJhZGlvIGNhcmQsIGFuZCB0aGVuIGZpbGwgaW4gdGhlCiAJICBwb3J0IGFkZHJlc3MgYmVsb3cuCkBAIC04Miw3ICs4Miw3IEBACiAKIGNvbmZpZyBSQURJT19BWlRFQ0gKIAl0cmlzdGF0ZSAiQXp0ZWNoL1BhY2thcmQgQmVsbCBSYWRpbyIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgb25lIG9mIHRoZXNlIEZNIHJhZGlvIGNhcmRzLCBhbmQgdGhlbiBmaWxsCiAJICBpbiB0aGUgcG9ydCBhZGRyZXNzIGJlbG93LgpAQCAtMTA2LDcgKzEwNiw3IEBACiAKIGNvbmZpZyBSQURJT19HRU1URUsKIAl0cmlzdGF0ZSAiR2VtVGVrIFJhZGlvIENhcmQgc3VwcG9ydCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LgpAQCAtMTMxLDcgKzEzMSw3IEBACiAKIGNvbmZpZyBSQURJT19HRU1URUtfUENJCiAJdHJpc3RhdGUgIkdlbVRlayBQQ0kgUmFkaW8gQ2FyZCBzdXBwb3J0IgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgUENJCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIFBDSSBGTSByYWRpbyBjYXJkLgogCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAogY29uZmlnIFJBRElPX01BWElSQURJTwogCXRyaXN0YXRlICJHdWlsbGVtb3QgTUFYSSBSYWRpbyBGTSAyMDAwIHJhZGlvIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBQQ0kKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgUENJCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSB0aGlzIHJhZGlvIGNhcmQuICBUaGlzIGNhcmQgbWF5IGFsc28gYmUKIAkgIGZvdW5kIGFzIEdlbXRlayBQQ0kgRk0uCkBAIC0xNjAsNyArMTYwLDcgQEAKIAogY29uZmlnIFJBRElPX01BRVNUUk8KIAl0cmlzdGF0ZSAiTWFlc3RybyBvbiBib2FyZCByYWRpbyIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgUENJCiAJLS0taGVscC0tLQogCSAgU2F5IFkgaGVyZSB0byBkaXJlY3RseSBzdXBwb3J0IHRoZSBvbi1ib2FyZCByYWRpbyB0dW5lciBvbiB0aGUKIAkgIE1hZXN0cm8gMiBvciAyRSBzb3VuZCBjYXJkLgpAQCAtMjA4LDcgKzIwOCw3IEBACiAKIGNvbmZpZyBSQURJT19TRjE2Rk1JCiAJdHJpc3RhdGUgIlNGMTZGTUkgUmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcy4gIElmIHlvdQogCSAgY29tcGlsZSB0aGUgZHJpdmVyIGludG8gdGhlIGtlcm5lbCBhbmQgeW91ciBjYXJkIGlzIG5vdCBQblAgb25lLCB5b3UKQEAgLTIyNSw3ICsyMjUsNyBAQAogCiBjb25maWcgUkFESU9fU0YxNkZNUjIKIAl0cmlzdGF0ZSAiU0YxNkZNUjIgUmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcy4KIApAQCAtMjM5LDcgKzIzOSw3IEBACiAKIGNvbmZpZyBSQURJT19URVJSQVRFQwogCXRyaXN0YXRlICJUZXJyYVRlYyBBY3RpdmVSYWRpbyBJU0EgU3RhbmRhbG9uZSIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgogCS0tLWhlbHAtLS0KIAkgIENob29zZSBZIGhlcmUgaWYgeW91IGhhdmUgdGhpcyBGTSByYWRpbyBjYXJkLCBhbmQgdGhlbiBmaWxsIGluIHRoZQogCSAgcG9ydCBhZGRyZXNzIGJlbG93LiAoVE9ETykKQEAgLTI2OCw3ICsyNjgsNyBAQAogCiBjb25maWcgUkFESU9fVFJVU1QKIAl0cmlzdGF0ZSAiVHJ1c3QgRk0gcmFkaW8gY2FyZCIKLQlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMgogCWhlbHAKIAkgIFRoaXMgaXMgYSBkcml2ZXIgZm9yIHRoZSBUcnVzdCBGTSByYWRpbyBjYXJkcy4gU2F5IFkgaWYgeW91IGhhdmUKIAkgIHN1Y2ggYSBjYXJkIGFuZCB3YW50IHRvIHVzZSBpdCB1bmRlciBMaW51eC4KQEAgLTI4Niw3ICsyODYsNyBAQAogCiBjb25maWcgUkFESU9fVFlQSE9PTgogCXRyaXN0YXRlICJUeXBob29uIFJhZGlvIChhLmsuYS4gRWNvUmFkaW8pIgotCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIElTQSAmJiBWSURFT19WNEwyCiAJLS0taGVscC0tLQogCSAgQ2hvb3NlIFkgaGVyZSBpZiB5b3UgaGF2ZSBvbmUgb2YgdGhlc2UgRk0gcmFkaW8gY2FyZHMsIGFuZCB0aGVuIGZpbGwKIAkgIGluIHRoZSBwb3J0IGFkZHJlc3MgYW5kIHRoZSBmcmVxdWVuY3kgdXNlZCBmb3IgbXV0aW5nIGJlbG93LgpAQCAtMzMwLDcgKzMzMCw3IEBACiAKIGNvbmZpZyBSQURJT19aT0xUUklYCiAJdHJpc3RhdGUgIlpvbHRyaXggUmFkaW8iCi0JZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQorCWRlcGVuZHMgb24gSVNBICYmIFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBDaG9vc2UgWSBoZXJlIGlmIHlvdSBoYXZlIG9uZSBvZiB0aGVzZSBGTSByYWRpbyBjYXJkcywgYW5kIHRoZW4gZmlsbAogCSAgaW4gdGhlIHBvcnQgYWRkcmVzcyBiZWxvdy4KQEAgLTM1Miw3ICszNTIsNyBAQAogCiBjb25maWcgVVNCX0RTQlIKIAl0cmlzdGF0ZSAiRC1MaW5rIFVTQiBGTSByYWRpbyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gVVNCICYmIFZJREVPX1Y0TDEgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgdGhpcyB0eXBlIG9mIHJhZGlvIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIE5vdGUgdGhhdCB0aGUgYXVkaW8gaXMgbm90IGRpZ2l0YWwsIGFuZApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwppbmRleCBmN2UzM2Y5Li5kYjg2NWEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL2RzYnIxMDAuYwpAQCAtMzMsOCArMzMsMTQgQEAKIAogIEhpc3Rvcnk6CiAKKyBWZXJzaW9uIDAuNDEtYWMxOgorCUFsYW4gQ294OiBTb21lIGNsZWFudXBzIGFuZCBmaXhlcworCisgVmVyc2lvbiAwLjQxOgorCUNvbnZlcnRlZCB0byBWNEwyIEFQSSBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKwogIFZlcnNpb24gMC40MDoKLSAgTWFya3VzOiBVcGRhdGVzIGZvciAyLjYueCBrZXJuZWxzLCBjb2RlIGxheW91dCBjaGFuZ2VzLCBuYW1lIHNhbml0aXppbmcKKwlNYXJrdXM6IFVwZGF0ZXMgZm9yIDIuNi54IGtlcm5lbHMsIGNvZGUgbGF5b3V0IGNoYW5nZXMsIG5hbWUgc2FuaXRpemluZwogCiAgVmVyc2lvbiAwLjMwOgogCU1hcmt1czogVXBkYXRlcyBmb3IgMi41Lngga2VybmVsIGFuZCBtb3JlIElTTyBjb21wbGlhbnQgc291cmNlCkBAIC02NSwxMyArNzEsMTIgQEAKIAogKi8KIAotCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgpAQCAtNzksNyArODQsMjIgQEAKIC8qCiAgKiBWZXJzaW9uIEluZm9ybWF0aW9uCiAgKi8KLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjQwIgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCisKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjQxIgorI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsNCwxKQorCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfQorfTsKKwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJNYXJrdXMgRGVtbGVpdG5lciA8bXNkZW1sZWlAdHVjYW5hLmhhcnZhcmQuZWR1PiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkQtTGluayBEU0ItUjEwMCBVU0IgRk0gcmFkaW8gZHJpdmVyIgogCkBAIC0xMTEsNyArMTMxLDcgQEAKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKIAogLyogRGF0YSBmb3Igb25lIChwaHlzaWNhbCkgZGV2aWNlICovCi10eXBlZGVmIHN0cnVjdCB7CitzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9kZXY7CiAJdW5zaWduZWQgY2hhciB0cmFuc2Zlcl9idWZmZXJbVEJfTEVOXTsKQEAgLTExOSw3ICsxMzksOCBAQAogCWludCBzdGVyZW87CiAJaW50IHVzZXJzOwogCWludCByZW1vdmVkOwotfSBkc2JyMTAwX2RldmljZTsKKwlpbnQgbXV0ZWQ7Cit9OwogCiAKIC8qIEZpbGUgc3lzdGVtIGludGVyZmFjZSAqLwpAQCAtMTM4LDcgKzE1OSw2IEBACiAJLm93bmVyID0JVEhJU19NT0RVTEUsCiAJLm5hbWUgPQkJIkQtTGluayBEU0ItUiAxMDAiLAogCS50eXBlID0JCVZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZSA9CVZJRF9IQVJEV0FSRV9BWlRFQ0gsCiAJLmZvcHMgPSAgICAgICAgICZ1c2JfZHNicjEwMF9mb3BzLAogCS5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwpAQCAtMTYxLDcgKzE4MSw3IEBACiAvKiBMb3ctbGV2ZWwgZGV2aWNlIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLwogCiAvKiBzd2l0Y2ggb24gcmFkaW8gKi8KLXN0YXRpYyBpbnQgZHNicjEwMF9zdGFydChkc2JyMTAwX2RldmljZSAqcmFkaW8pCitzdGF0aWMgaW50IGRzYnIxMDBfc3RhcnQoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbykKIHsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJCVVTQl9SRVFfR0VUX1NUQVRVUywKQEAgLTE3MiwxMiArMTkyLDEzIEBACiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKIAkJCTB4MDEsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkKIAkJcmV0dXJuIC0xOworCXJhZGlvLT5tdXRlZD0wOwogCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07CiB9CiAKIAogLyogc3dpdGNoIG9mZiByYWRpbyAqLwotc3RhdGljIGludCBkc2JyMTAwX3N0b3AoZHNicjEwMF9kZXZpY2UgKnJhZGlvKQorc3RhdGljIGludCBkc2JyMTAwX3N0b3Aoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbykKIHsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJCVVTQl9SRVFfR0VUX1NUQVRVUywKQEAgLTE4OCwxMSArMjA5LDEyIEBACiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFIHwgVVNCX0RJUl9JTiwKIAkJCTB4MDAsIDB4MDAsIHJhZGlvLT50cmFuc2Zlcl9idWZmZXIsIDgsIDMwMCk8MCkKIAkJcmV0dXJuIC0xOworCXJhZGlvLT5tdXRlZD0xOwogCXJldHVybiAocmFkaW8tPnRyYW5zZmVyX2J1ZmZlcilbMF07CiB9CiAKIC8qIHNldCBhIGZyZXF1ZW5jeSwgZnJlcSBpcyBkZWZpbmVkIGJ5IHY0bCdzIFRVTkVSX0xPVywgaS5lLiAxLzE2dGgga0h6ICovCi1zdGF0aWMgaW50IGRzYnIxMDBfc2V0ZnJlcShkc2JyMTAwX2RldmljZSAqcmFkaW8sIGludCBmcmVxKQorc3RhdGljIGludCBkc2JyMTAwX3NldGZyZXEoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbywgaW50IGZyZXEpCiB7CiAJZnJlcSA9IChmcmVxLzE2KjgwKS8xMDAwKzg1NjsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKQEAgLTIxNyw3ICsyMzksNyBAQAogCiAvKiByZXR1cm4gdGhlIGRldmljZSBzdGF0dXMuICBUaGlzIGlzLCBpbiBlZmZlY3QsIGp1c3Qgd2hldGhlciBpdAogc2VlcyBhIHN0ZXJlbyBzaWduYWwgb3Igbm90LiAgUGl0eS4gKi8KLXN0YXRpYyB2b2lkIGRzYnIxMDBfZ2V0c3RhdChkc2JyMTAwX2RldmljZSAqcmFkaW8pCitzdGF0aWMgdm9pZCBkc2JyMTAwX2dldHN0YXQoc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbykKIHsKIAlpZiAodXNiX2NvbnRyb2xfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9yY3ZjdHJscGlwZShyYWRpby0+dXNiZGV2LCAwKSwKIAkJVVNCX1JFUV9HRVRfU1RBVFVTLApAQCAtMjM2LDkgKzI1OCw5IEBACiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlkc2JyMTAwX2RldmljZSAqcmFkaW87CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbzsKIAotCWlmICghKHJhZGlvID0ga21hbGxvYyhzaXplb2YoZHNicjEwMF9kZXZpY2UpLCBHRlBfS0VSTkVMKSkpCisJaWYgKCEocmFkaW8gPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgZHNicjEwMF9kZXZpY2UpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCWlmICghKHJhZGlvLT52aWRlb2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpKSkgewogCQlrZnJlZShyYWRpbyk7CkBAIC0yNzEsNyArMjkzLDcgQEAKIGxlYWsgaGVyZSBpdCdzIHRpbnkgKH41MCBieXRlcyBwZXIgZGlzY29ubmVjdCkgKi8KIHN0YXRpYyB2b2lkIHVzYl9kc2JyMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0JZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgZHNicjEwMF9kZXZpY2UgKnJhZGlvID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGYsIE5VTEwpOwogCWlmIChyYWRpbykgewpAQCAtMjkxLDg5ICszMTMsMTIxIEBACiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJCXVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKIAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRUlPOwogCiAJc3dpdGNoKGNtZCkgewotCQljYXNlIFZJRElPQ0dDQVA6IHsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKKwkJeworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgImRzYnIxMDAiLCBzaXplb2YgKHYtPmRyaXZlcikpOworCQkJc3RybGNweSh2LT5jYXJkLCAiRC1MaW5rIFItMTAwIFVTQiBGTSBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCi0JCQltZW1zZXQodiwgMCwgc2l6ZW9mKCp2KSk7Ci0JCQl2LT50eXBlID0gVklEX1RZUEVfVFVORVI7Ci0JCQl2LT5jaGFubmVscyA9IDE7Ci0JCQl2LT5hdWRpb3MgPSAxOwotCQkJc3RyY3B5KHYtPm5hbWUsICJELUxpbmsgUi0xMDAgVVNCIEZNIFJhZGlvIik7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dUVU5FUjogewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCQljYXNlIFZJRElPQ19HX1RVTkVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQkJZHNicjEwMF9nZXRzdGF0KHJhZGlvKTsKLQkJCWlmKHYtPnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCiAJCQl2LT5yYW5nZWxvdyA9IEZSRVFfTUlOKkZSRVFfTVVMOwogCQkJdi0+cmFuZ2VoaWdoID0gRlJFUV9NQVgqRlJFUV9NVUw7Ci0JCQl2LT5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKLQkJCXYtPm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0JCQl2LT5zaWduYWwgPSByYWRpby0+c3RlcmVvKjB4NzAwMDsKLQkJCQkvKiBEb24ndCBrbm93IGhvdyB0byBnZXQgc2lnbmFsIHN0cmVuZ3RoICovCi0JCQl2LT5mbGFncyB8PSBWSURFT19UVU5FUl9TVEVSRU9fT04qcmFkaW8tPnN0ZXJlbzsKLQkJCXN0cmNweSh2LT5uYW1lLCAiRFNCIFItMTAwIik7CisJCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOworCQkJaWYocmFkaW8tPnN0ZXJlbykKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCWVsc2UKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl2LT5zaWduYWwgPSAweEZGRkY7ICAgICAvKiBXZSBjYW4ndCBnZXQgdGhlIHNpZ25hbCBzdHJlbmd0aCAqLworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjogewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCQljYXNlIFZJRElPQ19TX1RVTkVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKIAotCQkJaWYodi0+dHVuZXIhPTApCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHRlJFUTogewotCQkJaW50ICpmcmVxID0gYXJnOworCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwogCi0JCQlpZiAocmFkaW8tPmN1cmZyZXE9PS0xKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJKmZyZXEgPSByYWRpby0+Y3VyZnJlcTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0ZSRVE6IHsKLQkJCWludCAqZnJlcSA9IGFyZzsKLQotCQkJcmFkaW8tPmN1cmZyZXEgPSAqZnJlcTsKKwkJCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCQkJaWYgKGRzYnIxMDBfc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpPT0tMSkKIAkJCQl3YXJuKCJTZXQgZnJlcXVlbmN5IGZhaWxlZCIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86IHsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKIAotCQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOwotCQkJdi0+ZmxhZ3MgfD0gVklERU9fQVVESU9fTVVUQUJMRTsKLQkJCXYtPm1vZGUgPSBWSURFT19TT1VORF9TVEVSRU87Ci0JCQl2LT52b2x1bWUgPSAxOwotCQkJdi0+c3RlcCA9IDE7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IHJhZGlvLT5jdXJmcmVxOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NBVURJTzogewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOworCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKIAotCQkJaWYgKHYtPmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYgKHYtPmZsYWdzJlZJREVPX0FVRElPX01VVEUpIHsKLQkJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKT09LTEpCi0JCQkJCXdhcm4oIlJhZGlvIGRpZCBub3QgcmVzcG9uZCBwcm9wZXJseSIpOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAwOworCQkJCX0KIAkJCX0KLQkJCWVsc2UKLQkJCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk9PS0xKQotCQkJCQl3YXJuKCJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHkiKTsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CisKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQljdHJsLT52YWx1ZT1yYWRpby0+bXV0ZWQ7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJCQlpZiAoZHNicjEwMF9zdG9wKHJhZGlvKT09LTEpCisJCQkJCQl3YXJuKCJSYWRpbyBkaWQgbm90IHJlc3BvbmQgcHJvcGVybHkiKTsKKwkJCQl9IGVsc2UgeworCQkJCQlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk9PS0xKQorCQkJCQkJd2FybigiUmFkaW8gZGlkIG5vdCByZXNwb25kIHByb3Blcmx5Iik7CisJCQkJfQorCQkJCXJldHVybiAwOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgdXNiX2RzYnIxMDBfZG9faW9jdGwpOwogCX0KIH0KIApAQCAtMzg1LDkgKzQzOSwxMSBAQAogCiBzdGF0aWMgaW50IHVzYl9kc2JyMTAwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JZHNicjEwMF9kZXZpY2UgKnJhZGlvPXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CiAKIAlyYWRpby0+dXNlcnMgPSAxOworCXJhZGlvLT5tdXRlZCA9IDE7CisKIAlpZiAoZHNicjEwMF9zdGFydChyYWRpbyk8MCkgewogCQl3YXJuKCJSYWRpbyBkaWQgbm90IHN0YXJ0IHVwIHByb3Blcmx5Iik7CiAJCXJhZGlvLT51c2VycyA9IDA7CkBAIC0zOTksNyArNDU1LDcgQEAKIAogc3RhdGljIGludCB1c2JfZHNicjEwMF9jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlkc2JyMTAwX2RldmljZSAqcmFkaW89dmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJc3RydWN0IGRzYnIxMDBfZGV2aWNlICpyYWRpbz12aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKIAogCWlmICghcmFkaW8pCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwppbmRleCBkZjIyYTU4Li4zMzY4YTg5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWFpbXNsYWIuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIHJhZGlvdHJhY2sgKHJhZGlvcmV2ZWFsKSBkcml2ZXIgZm9yIExpbnV4IHJhZGlvIHN1cHBvcnQKICAqIChjKSAxOTk3IE0uIEtpcmt3b29kCisgKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CiAgKiBDb252ZXJ0ZWQgdG8gbmV3IEFQSSBieSBBbGFuIENveCA8QWxhbi5Db3hAbGludXgub3JnPgogICogVmFyaW91cyBidWdmaXhlcyBhbmQgZW5oYW5jZW1lbnRzIGJ5IFJ1c3NlbGwgS3JvbGwgPHJrcm9sbEBleHBsb2l0cy5vcmc+CiAgKgpAQCAtMzMsMTEgKzM0LDEzIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19SQURJT19SVFJBQ0tfUE9SVCAJKi8KICNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CS8qIExvY2sgZm9yIHRoZSBJL08gCQkqLwogCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKwogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1JUUkFDS19QT1JUIC0xCiAjZW5kaWYKQEAgLTIwOSw2ICsyMTIsMjUgQEAKIAlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLwogfQogCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfSx7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMHhmZiwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OworCiBzdGF0aWMgaW50IHJ0X2RvX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewpAQCAtMjE3LDczICsyMzksMTE0IEBACiAKIAlzd2l0Y2goY21kKQogCXsKLQkJY2FzZSBWSURJT0NHQ0FQOgorCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnYgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOwogCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXYtPnR5cGU9VklEX1RZUEVfVFVORVI7Ci0JCQl2LT5jaGFubmVscz0xOwotCQkJdi0+YXVkaW9zPTE7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvVHJhY2siKTsKKwkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYWltc2xhYiIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJSYWRpb1RyYWNrIiwgc2l6ZW9mICh2LT5jYXJkKSk7CisJCQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwkJCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCQkJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ19HX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZih2LT50dW5lcikJLyogT25seSAxIHR1bmVyICovCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCiAJCQl2LT5yYW5nZWxvdz0oODcqMTYwMDApOwogCQkJdi0+cmFuZ2VoaWdoPSgxMDgqMTYwMDApOwotCQkJdi0+ZmxhZ3M9VklERU9fVFVORVJfTE9XOwotCQkJdi0+bW9kZT1WSURFT19NT0RFX0FVVE87Ci0JCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05POworCQkJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CisJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAJCQl2LT5zaWduYWw9MHhGRkZGKnJ0X2dldHNpZ3N0cihydCk7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU1RVTkVSOgorCQljYXNlIFZJRElPQ19TX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZih2LT50dW5lciE9MCkKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQkqZnJlcSA9IHJ0LT5jdXJmcmVxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCXJ0LT5jdXJmcmVxID0gKmZyZXE7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCQkJcnRfc2V0ZnJlcShydCwgcnQtPmN1cmZyZXEpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86CisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQltZW1zZXQodiwwLCBzaXplb2YoKnYpKTsKLQkJCXYtPmZsYWdzfD1WSURFT19BVURJT19NVVRBQkxFfFZJREVPX0FVRElPX1ZPTFVNRTsKLQkJCXYtPnZvbHVtZT1ydC0+Y3Vydm9sICogNjU1NDsKLQkJCXYtPnN0ZXA9NjU1NDsKLQkJCXN0cmNweSh2LT5uYW1lLCAiUmFkaW8iKTsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlmLT5mcmVxdWVuY3kgPSBydC0+Y3VyZnJlcTsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NTQVVESU86CisJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJaWYodi0+YXVkaW8pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlpZih2LT5mbGFncyZWSURFT19BVURJT19NVVRFKQotCQkJCXJ0X211dGUocnQpOwotCQkJZWxzZQotCQkJCXJ0X3NldHZvbChydCx2LT52b2x1bWUvNjU1NCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAoMCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CisKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWN0cmwtPnZhbHVlPXJ0LT5tdXRlZDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJY3RybC0+dmFsdWU9cnQtPmN1cnZvbCAqIDY1NTQ7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQlydF9tdXRlKHJ0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJ0X3NldHZvbChydCxydC0+Y3Vydm9sKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQlydF9zZXR2b2wocnQsY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQkJICBydF9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0zMDksNyArMzcyLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIlJhZGlvVHJhY2sgcmFkaW8iLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9SVFJBQ0ssCisJLmhhcmR3YXJlCT0gMCwKIAkuZm9wcyAgICAgICAgICAgPSAmcnRyYWNrX2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwppbmRleCA5NWU2MzIyLi4zYmE1ZmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKQEAgLTEsNSArMSw2IEBACiAvKiByYWRpby1henRlY2guYyAtIEF6dGVjaCByYWRpbyBjYXJkIGRyaXZlciBmb3IgTGludXggMi4yCiAgKgorICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICogQWRhcHRlZCB0byBzdXBwb3J0IHRoZSBWaWRlbyBmb3IgTGludXggQVBJIGJ5CiAgKiBSdXNzZWxsIEtyb2xsIDxya3JvbGxAZXhwbG9pdHMub3JnPi4gIEJhc2VkIG9uIG9yaWdpbmFsIHR1bmVyIGNvZGUgYnk6CiAgKgpAQCAtMzAsOSArMzEsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwogI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4JLyogQ09ORklHX1JBRElPX0FaVEVDSF9QT1JUIAkqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCisJCS5zdGVwICAgICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfQorfTsKIAogLyogYWNjZXB0YWJsZSBwb3J0czogMHgzNTAgKEpQMyBzaG9ydGVkKSwgMHgzNTggKEpQMyBvcGVuKSAqLwogCkBAIC0xNjYsODEgKzE4OCwxMjEgQEAKIAogCXN3aXRjaChjbWQpCiAJewotCQljYXNlIFZJRElPQ0dDQVA6CisJCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYgPSBhcmc7CiAJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJdi0+dHlwZT1WSURfVFlQRV9UVU5FUjsKLQkJCXYtPmNoYW5uZWxzPTE7Ci0JCQl2LT5hdWRpb3M9MTsKLQkJCXN0cmNweSh2LT5uYW1lLCAiQXp0ZWNoIFJhZGlvIik7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWF6dGVjaCIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJBenRlY2ggUmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKKwkJCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOworCQkJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJCQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6CisJCWNhc2UgVklESU9DX0dfVFVORVI6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQkJCWlmKHYtPnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltZW1zZXQodiwwLHNpemVvZigqdikpOworCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQkJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisKIAkJCXYtPnJhbmdlbG93PSg4NyoxNjAwMCk7CiAJCQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7Ci0JCQl2LT5mbGFncz1WSURFT19UVU5FUl9MT1c7Ci0JCQl2LT5tb2RlPVZJREVPX01PREVfQVVUTzsKLQkJCXYtPnNpZ25hbD0weEZGRkYqYXpfZ2V0c2lnc3RyKGF6KTsKKwkJCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCQkJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CiAJCQlpZihhel9nZXRzdGVyZW8oYXopKQotCQkJCXYtPmZsYWdzfD1WSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQllbHNlCisJCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCQkJdi0+c2lnbmFsPTB4RkZGRiphel9nZXRzaWdzdHIoYXopOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjoKKwkJY2FzZSBWSURJT0NfU19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIhPTApCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQkqZnJlcSA9IGF6LT5jdXJmcmVxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCWF6LT5jdXJmcmVxID0gKmZyZXE7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWF6LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCQkJYXpfc2V0ZnJlcShheiwgYXotPmN1cmZyZXEpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86CisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQltZW1zZXQodiwwLCBzaXplb2YoKnYpKTsKLQkJCXYtPmZsYWdzfD1WSURFT19BVURJT19NVVRBQkxFfFZJREVPX0FVRElPX1ZPTFVNRTsKLQkJCWlmKGF6LT5zdGVyZW8pCi0JCQkJdi0+bW9kZT1WSURFT19TT1VORF9TVEVSRU87Ci0JCQllbHNlCi0JCQkJdi0+bW9kZT1WSURFT19TT1VORF9NT05POwotCQkJdi0+dm9sdW1lPWF6LT5jdXJ2b2w7Ci0JCQl2LT5zdGVwPTE2Mzg0OwotCQkJc3RyY3B5KHYtPm5hbWUsICJSYWRpbyIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTQVVESU86Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCWlmKHYtPmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJYXotPmN1cnZvbD12LT52b2x1bWU7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CiAKLQkJCWF6LT5zdGVyZW89KHYtPm1vZGUmVklERU9fU09VTkRfU1RFUkVPKT8xOjA7Ci0JCQlpZih2LT5mbGFncyZWSURFT19BVURJT19NVVRFKQotCQkJCWF6X3NldHZvbChheiwwKTsKLQkJCWVsc2UKLQkJCQlhel9zZXR2b2woYXosYXotPmN1cnZvbCk7CisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IGF6LT5jdXJmcmVxOworCiAJCQlyZXR1cm4gMDsKIAkJfQorCisJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGF6LT5jdXJ2b2w9PTApCisJCQkJCQljdHJsLT52YWx1ZT0xOworCQkJCQllbHNlCisJCQkJCQljdHJsLT52YWx1ZT0wOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQljdHJsLT52YWx1ZT1hei0+Y3Vydm9sICogNjU1NDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQlpZiAoY3RybC0+dmFsdWUpIHsKKwkJCQkJCWF6X3NldHZvbChheiwwKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWF6X3NldHZvbChheixhei0+Y3Vydm9sKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQlhel9zZXR2b2woYXosY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQkJICBhel9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0yNjYsNyArMzI4LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIkF6dGVjaCByYWRpbyIsCiAJLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX0FaVEVDSCwKKwkuaGFyZHdhcmUJPSAwLAogCS5mb3BzICAgICAgICAgICA9ICZhenRlY2hfZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCA4NjQxYWVjLi42OWQ0Yjc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0yNSwyMCArMjUsMjggQEAKICAqCiAgKiAyMDAzLTAxLTMxCUFsYW4gQ294IDxhbGFuQHJlZGhhdC5jb20+CiAgKgkJQ2xlYW5lZCB1cCBsb2NraW5nLCBkZWxheSBjb2RlLCBnZW5lcmFsIG9kZHMgYW5kIGVuZHMKKyAqCisgKiAyMDA2LTA3LTMwCUhhbnMgSi4gS29jaCA8a29jaEBoamstYXouZGU+CisgKgkJQ2hhbmdlZCBBUEkgdG8gVjRMMgogICovCiAKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBWNEwyIEFQSSBkZWZzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAogI2RlZmluZSBSRFNfQlVGRkVSIDI1NgorI2RlZmluZSBSRFNfUlhfRkxBRyAxCisjZGVmaW5lIE1CU19SWF9GTEFHIDIKKworI2RlZmluZSBDQURFVF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMywzKQogCiBzdGF0aWMgaW50IGlvPS0xOwkJLyogZGVmYXVsdCB0byBpc2FwbnAgYWN0aXZhdGlvbiAqLwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwpAQCAtNjEsNDQgKzY5LDI0IEBACiAgKi8KIHN0YXRpYyBfX3UxNiBzaWd0YWJsZVsyXVs0XT17ezUsMTAsMzAsMTUwfSx7MjgsNDAsNjMsMTAwMH19OwogCi1zdGF0aWMgaW50IGNhZGV0X2dldHJkcyh2b2lkKQorCitzdGF0aWMgaW50CitjYWRldF9nZXRzdGVyZW8odm9pZCkKIHsKLQlpbnQgcmRzc3RhdD0wOwotCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDMsaW8pOyAgICAgICAgICAgICAgICAgLyogU2VsZWN0IERlY29kZXIgQ29udHJvbC9TdGF0dXMgKi8KLQlvdXRiKGluYihpbysxKSYweDdmLGlvKzEpOyAgLyogUmVzZXQgUkRTIGRldGVjdGlvbiAqLwotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKLQotCW1zbGVlcCgxMDApOwotCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlvdXRiKDMsaW8pOyAgICAgICAgICAgICAgICAgLyogU2VsZWN0IERlY29kZXIgQ29udHJvbC9TdGF0dXMgKi8KLQlpZigoaW5iKGlvKzEpJjB4ODApIT0wKSB7Ci0JCXJkc3N0YXR8PVZJREVPX1RVTkVSX1JEU19PTjsKLQl9Ci0JaWYoKGluYihpbysxKSYweDEwKSE9MCkgewotCQlyZHNzdGF0fD1WSURFT19UVU5FUl9NQlNfT047Ci0JfQotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKLQlyZXR1cm4gcmRzc3RhdDsKLX0KLQotc3RhdGljIGludCBjYWRldF9nZXRzdGVyZW8odm9pZCkKLXsKLQlpbnQgcmV0ID0gMDsKKwlpbnQgcmV0ID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAlpZihjdXJ0dW5lciAhPSAwKQkvKiBPbmx5IEZNIGhhcyBzdGVyZW8gY2FwYWJpbGl0eSEgKi8KLQkJcmV0dXJuIDA7CisJCXJldHVybiBWNEwyX1RVTkVSX1NVQl9NT05POwogCiAJc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKIAlvdXRiKDcsaW8pOyAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwogCWlmKCAoaW5iKGlvKzEpICYgMHg0MCkgPT0gMCkKLQkJcmV0ID0gMTsKKwkJcmV0ID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2FkZXRfZ2V0dHVuZSh2b2lkKQorc3RhdGljIHVuc2lnbmVkCitjYWRldF9nZXR0dW5lKHZvaWQpCiB7CiAJaW50IGN1cnZvbCxpOwogCXVuc2lnbmVkIGZpZm89MDsKQEAgLTEzNSw3ICsxMjMsOCBAQAogCXJldHVybiBmaWZvOwogfQogCi1zdGF0aWMgdW5zaWduZWQgY2FkZXRfZ2V0ZnJlcSh2b2lkKQorc3RhdGljIHVuc2lnbmVkCitjYWRldF9nZXRmcmVxKHZvaWQpCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgZnJlcT0wLHRlc3QsZmlmbz0wOwpAQCAtMTY3LDcgKzE1Niw4IEBACiAJcmV0dXJuIGZyZXE7CiB9CiAKLXN0YXRpYyB2b2lkIGNhZGV0X3NldHR1bmUodW5zaWduZWQgZmlmbykKK3N0YXRpYyB2b2lkCitjYWRldF9zZXR0dW5lKHVuc2lnbmVkIGZpZm8pCiB7CiAJaW50IGk7CiAJdW5zaWduZWQgdGVzdDsKQEAgLTE5NSw3ICsxODUsOCBAQAogCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgY2FkZXRfc2V0ZnJlcSh1bnNpZ25lZCBmcmVxKQorc3RhdGljIHZvaWQKK2NhZGV0X3NldGZyZXEodW5zaWduZWQgZnJlcSkKIHsKIAl1bnNpZ25lZCBmaWZvOwogCWludCBpLGosdGVzdDsKQEAgLTI1NSw3ICsyNDYsOCBAQAogfQogCiAKLXN0YXRpYyBpbnQgY2FkZXRfZ2V0dm9sKHZvaWQpCitzdGF0aWMgaW50CitjYWRldF9nZXR2b2wodm9pZCkKIHsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMjcwLDcgKzI2Miw4IEBACiB9CiAKIAotc3RhdGljIHZvaWQgY2FkZXRfc2V0dm9sKGludCB2b2wpCitzdGF0aWMgdm9pZAorY2FkZXRfc2V0dm9sKGludCB2b2wpCiB7CiAJc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKIAlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwpAQCAtMjgxLDcgKzI3NCw4IEBACiAJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBjYWRldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkCitjYWRldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAkvKgogCSAqIFNlcnZpY2UgdGhlIFJEUyBmaWZvCkBAIC0zMjIsOCArMzE2LDggQEAKIAogCiAKLXN0YXRpYyBzc2l6ZV90IGNhZGV0X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpkYXRhLAotCQkJICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3N0YXRpYyBzc2l6ZV90CitjYWRldF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJaW50IGk9MDsKIAl1bnNpZ25lZCBjaGFyIHJlYWRidWZbUkRTX0JVRkZFUl07CkBAIC0zNTksMTI4ICszNTMsMTU2IEBACiB7CiAJc3dpdGNoKGNtZCkKIAl7Ci0JCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOwotCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXYtPnR5cGU9VklEX1RZUEVfVFVORVI7Ci0JCQl2LT5jaGFubmVscz0yOwotCQkJdi0+YXVkaW9zPTE7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIkFEUyBDYWRldCIpOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOworCQkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7CisJCQljYXAtPmNhcGFiaWxpdGllcyA9CisJCQkJVjRMMl9DQVBfVFVORVIgfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURTsKKwkJCWNhcC0+dmVyc2lvbiA9IENBREVUX1ZFUlNJT047CisJCQlzdHJjcHkoY2FwLT5kcml2ZXIsICJBRFMgQ2FkZXQiKTsKKwkJCXN0cmNweShjYXAtPmNhcmQsICJBRFMgQ2FkZXQiKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ19HX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZigodi0+dHVuZXI8MCl8fCh2LT50dW5lcj4xKSkgeworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7CisJCQltZW1zZXQodCwwLHNpemVvZigqdCkpOworCQkJdC0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlzd2l0Y2ggKHQtPmluZGV4KQorCQkJeworCQkJCWNhc2UgMDogc3RyY3B5KHQtPm5hbWUsICJGTSIpOworCQkJCQl0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPOworCQkJCQl0LT5yYW5nZWxvdyA9IDE0MDA7ICAgICAvKiA4Ny41IE1IeiAqLworCQkJCQl0LT5yYW5nZWhpZ2ggPSAxNzI4OyAgICAvKiAxMDguMCBNSHogKi8KKwkJCQkJdC0+cnhzdWJjaGFucz1jYWRldF9nZXRzdGVyZW8oKTsKKwkJCQkJc3dpdGNoICh0LT5yeHN1YmNoYW5zKXsKKwkJCQkJCWNhc2UgVjRMMl9UVU5FUl9TVUJfTU9OTzoKKwkJCQkJCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQkJCQkJYnJlYWs7CisJCQkJCQljYXNlIFY0TDJfVFVORVJfU1VCX1NURVJFTzoKKwkJCQkJCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCQkJCQlicmVhazsKKwkJCQkJCWRlZmF1bHQ6IDsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlIDE6IHN0cmNweSh0LT5uYW1lLCAiQU0iKTsKKwkJCQkJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCQkJdC0+cmFuZ2Vsb3cgPSA4MzIwOyAgICAgIC8qIDUyMCBrSHogKi8KKwkJCQkJdC0+cmFuZ2VoaWdoID0gMjY0MDA7ICAgIC8qIDE2NTAga0h6ICovCisJCQkJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POworCQkJCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQorCisJCQl0LT5zaWduYWwgPSBzaWdzdHJlbmd0aDsgLyogV2UgbWlnaHQgbmVlZCB0byBtb2RpZnkgc2NhbGluZyBvZiB0aGlzICovCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX1RVTkVSOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdCA9IGFyZzsKKwkJCWlmKCh0LT5pbmRleCAhPSAwKSYmKHQtPmluZGV4ICE9IDEpKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQljdXJ0dW5lciA9IHQtPmluZGV4OworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKwkJCW1lbXNldChmLDAsc2l6ZW9mKCpmKSk7CisJCQlmLT50dW5lciA9IGN1cnR1bmVyOworCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlmLT5mcmVxdWVuY3kgPSBjYWRldF9nZXRmcmVxKCk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCQkJaWYgKGYtPnR5cGUgIT0gVjRMMl9UVU5FUl9SQURJTyl7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlzd2l0Y2godi0+dHVuZXIpIHsKLQkJCQljYXNlIDA6Ci0JCQkJc3RyY3B5KHYtPm5hbWUsIkZNIik7Ci0JCQkJdi0+cmFuZ2Vsb3c9MTQwMDsgICAgIC8qIDg3LjUgTUh6ICovCi0JCQkJdi0+cmFuZ2VoaWdoPTE3Mjg7ICAgIC8qIDEwOC4wIE1IeiAqLwotCQkJCXYtPmZsYWdzPTA7Ci0JCQkJdi0+bW9kZT0wOwotCQkJCXYtPm1vZGV8PVZJREVPX01PREVfQVVUTzsKLQkJCQl2LT5zaWduYWw9c2lnc3RyZW5ndGg7Ci0JCQkJaWYoY2FkZXRfZ2V0c3RlcmVvKCk9PTEpIHsKLQkJCQkJdi0+ZmxhZ3N8PVZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQl9Ci0JCQkJdi0+ZmxhZ3N8PWNhZGV0X2dldHJkcygpOwotCQkJCWJyZWFrOwotCQkJCWNhc2UgMToKLQkJCQlzdHJjcHkodi0+bmFtZSwiQU0iKTsKLQkJCQl2LT5yYW5nZWxvdz04MzIwOyAgICAgIC8qIDUyMCBrSHogKi8KLQkJCQl2LT5yYW5nZWhpZ2g9MjY0MDA7ICAgIC8qIDE2NTAga0h6ICovCi0JCQkJdi0+ZmxhZ3M9MDsKLQkJCQl2LT5mbGFnc3w9VklERU9fVFVORVJfTE9XOwotCQkJCXYtPm1vZGU9MDsKLQkJCQl2LT5tb2RlfD1WSURFT19NT0RFX0FVVE87Ci0JCQkJdi0+c2lnbmFsPXNpZ3N0cmVuZ3RoOwotCQkJCWJyZWFrOwotCQkJfQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQkJCWlmKCh2LT50dW5lcjwwKXx8KHYtPnR1bmVyPjEpKSB7CisJCQlpZigoY3VydHVuZXI9PTApJiYoKGYtPmZyZXF1ZW5jeTwxNDAwKXx8KGYtPmZyZXF1ZW5jeT4xNzI4KSkpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWN1cnR1bmVyPXYtPnR1bmVyOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCSpmcmVxID0gY2FkZXRfZ2V0ZnJlcSgpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCWlmKChjdXJ0dW5lcj09MCkmJigoKmZyZXE8MTQwMCl8fCgqZnJlcT4xNzI4KSkpIHsKKwkJCWlmKChjdXJ0dW5lcj09MSkmJigoZi0+ZnJlcXVlbmN5PDgzMjApfHwoZi0+ZnJlcXVlbmN5PjI2NDAwKSkpIHsKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCWlmKChjdXJ0dW5lcj09MSkmJigoKmZyZXE8ODMyMCl8fCgqZnJlcT4yNjQwMCkpKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0JCQljYWRldF9zZXRmcmVxKCpmcmVxKTsKKwkJCWNhZGV0X3NldGZyZXEoZi0+ZnJlcXVlbmN5KTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR0FVRElPOgorCQljYXNlIFZJRElPQ19HX0NUUkw6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LDAsIHNpemVvZigqdikpOwotCQkJdi0+ZmxhZ3M9VklERU9fQVVESU9fTVVUQUJMRXxWSURFT19BVURJT19WT0xVTUU7Ci0JCQlpZihjYWRldF9nZXRzdGVyZW8oKT09MCkgewotCQkJCXYtPm1vZGU9VklERU9fU09VTkRfTU9OTzsKLQkJCX0gZWxzZSB7Ci0JCQkJdi0+bW9kZT1WSURFT19TT1VORF9TVEVSRU87CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjID0gYXJnOworCQkJc3dpdGNoIChjLT5pZCl7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAvKiBUT0RPOiBIYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KKwkJCQkJYy0+dmFsdWUgPSAoY2FkZXRfZ2V0dm9sKCkgPT0gMCk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQljLT52YWx1ZSA9IGNhZGV0X2dldHZvbCgpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlyZXR1cm4gLUVJTlZBTDsKIAkJCX0KLQkJCXYtPnZvbHVtZT1jYWRldF9nZXR2b2woKTsKLQkJCXYtPnN0ZXA9MHhmZmZmOwotCQkJc3RyY3B5KHYtPm5hbWUsICJSYWRpbyIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NTQVVESU86CisJCWNhc2UgVklESU9DX1NfQ1RSTDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJaWYodi0+YXVkaW8pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQljYWRldF9zZXR2b2wodi0+dm9sdW1lKTsKLQkJCWlmKHYtPmZsYWdzJlZJREVPX0FVRElPX01VVEUpCi0JCQkJY2FkZXRfc2V0dm9sKDApOwotCQkJZWxzZQotCQkJCWNhZGV0X3NldHZvbCgweGZmZmYpOworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqYyA9IGFyZzsKKwkJCXN3aXRjaCAoYy0+aWQpeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogLyogVE9ETzogSGFuZGxlIHRoaXMgY29ycmVjdGx5ICovCisJCQkJCWlmIChjLT52YWx1ZSkgY2FkZXRfc2V0dm9sKDApOworCQkJCQkJZWxzZSBjYWRldF9zZXR2b2woMHhmZmZmKTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQkJCWNhZGV0X3NldHZvbChjLT52YWx1ZSk7CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogCQkJcmV0dXJuIDA7CiAJCX0KKwogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKIAl9CiB9CiAKLXN0YXRpYyBpbnQgY2FkZXRfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCitzdGF0aWMgaW50CitjYWRldF9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkJICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiB2aWRlb191c2VyY29weShpbm9kZSwgZmlsZSwgY21kLCBhcmcsIGNhZGV0X2RvX2lvY3RsKTsKIH0KIAotc3RhdGljIGludCBjYWRldF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludAorY2FkZXRfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZih1c2VycykKLQkJcmV0dXJuIC1FQlVTWTsKIAl1c2VycysrOwotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJlYWRfcXVldWUpOworCWlmICgxID09IHVzZXJzKSBpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZWFkX3F1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjYWRldF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludAorY2FkZXRfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlkZWxfdGltZXJfc3luYygmcmVhZHRpbWVyKTsKLQlyZHNzdGF0PTA7CiAJdXNlcnMtLTsKKwlpZiAoMCA9PSB1c2Vycyl7CisJCWRlbF90aW1lcl9zeW5jKCZyZWFkdGltZXIpOworCQlyZHNzdGF0PTA7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50CitjYWRldF9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpCit7CisJcG9sbF93YWl0KGZpbGUsJnJlYWRfcXVldWUsd2FpdCk7CisJaWYocmRzaW4gIT0gcmRzb3V0KQorCQlyZXR1cm4gUE9MTElOIHwgUE9MTFJETk9STTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDkxLDYgKzUxMyw3IEBACiAJLnJlbGVhc2UgICAgICAgCT0gY2FkZXRfcmVsZWFzZSwKIAkucmVhZAkJPSBjYWRldF9yZWFkLAogCS5pb2N0bAkJPSBjYWRldF9pb2N0bCwKKwkucG9sbAkJPSBjYWRldF9wb2xsLAogCS5jb21wYXRfaW9jdGwJPSB2NGxfY29tcGF0X2lvY3RsMzIsCiAJLmxsc2VlayAgICAgICAgID0gbm9fbGxzZWVrLAogfTsKQEAgLTUwMCw3ICs1MjMsNiBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiQ2FkZXQgcmFkaW8iLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9DQURFVCwKIAkuZm9wcyAgICAgICAgICAgPSAmY2FkZXRfZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKaW5kZXggNGM4Mjk1Ni4uY2ZhYjU3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKQEAgLTM0LDYgKzM0LDggQEAKICAqCiAgKiAgICAgVE9ETzogbXVsdGlwbGUgZGV2aWNlIHN1cHBvcnQgYW5kIHBvcnRhYmlsaXR5IHdlcmUgbm90IHRlc3RlZAogICoKKyAqICAgICBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICovCiAKQEAgLTQyLDEwICs0NCwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfQorfTsKKwogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKQEAgLTE4Myw5MSArMjA3LDExNyBAQAogCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSBkZXYtPnByaXY7CiAKIAlzd2l0Y2ggKCBjbWQgKSB7Ci0JCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICpjID0gYXJnOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWdlbXRlay1wY2kiLCBzaXplb2YgKHYtPmRyaXZlcikpOworCQkJc3RybGNweSh2LT5jYXJkLCAiR2VtVGVrIFBDSSBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOwogCi0JCQltZW1zZXQoYywwLHNpemVvZigqYykpOwotCQkJYy0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOwotCQkJYy0+Y2hhbm5lbHMgPSAxOwotCQkJYy0+YXVkaW9zID0gMTsKLQkJCXN0cmNweSggYy0+bmFtZSwgIkdlbXRlayBQQ0kgUmFkaW8iICk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCi0JCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ19HX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnQgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKIAotCQkJaWYgKCB0LT50dW5lciApCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwogCi0JCQl0LT5yYW5nZWxvdyA9IEdFTVRFS19QQ0lfUkFOR0VfTE9XOwotCQkJdC0+cmFuZ2VoaWdoID0gR0VNVEVLX1BDSV9SQU5HRV9ISUdIOwotCQkJdC0+ZmxhZ3MgPSBWSURFT19UVU5FUl9MT1c7Ci0JCQl0LT5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotCQkJdC0+c2lnbmFsID0gMHhGRkZGICogZ2VtdGVrX3BjaV9nZXRzaWduYWwoIGNhcmQgKTsKLQkJCXN0cmNweSggdC0+bmFtZSwgIkZNIiApOworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQl2LT5yYW5nZWxvdyA9IEdFTVRFS19QQ0lfUkFOR0VfTE9XOworCQkJdi0+cmFuZ2VoaWdoID0gR0VNVEVLX1BDSV9SQU5HRV9ISUdIOworCQkJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOworCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCQkJdi0+c2lnbmFsPTB4RkZGRipnZW10ZWtfcGNpX2dldHNpZ25hbCggY2FyZCApOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCi0JCWNhc2UgVklESU9DU1RVTkVSOgorCQljYXNlIFZJRElPQ19TX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnQgPSBhcmc7Ci0JCQlpZiAoIHQtPnR1bmVyICkKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXJldHVybiAwOwotCQl9CisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKIAotCQljYXNlIFZJRElPQ0dGUkVROgotCQl7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkJKmZyZXEgPSBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0ZSRVE6Ci0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0KLQkJCWlmICggKCpmcmVxIDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cpIHx8Ci0JCQkgICAgICgqZnJlcSA+IEdFTVRFS19QQ0lfUkFOR0VfSElHSCkgKQorCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQkJZ2VtdGVrX3BjaV9zZXRmcmVxdWVuY3koIGNhcmQsICpmcmVxICk7Ci0JCQljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9ICpmcmVxOworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQkJaWYgKCAoZi0+ZnJlcXVlbmN5IDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cpIHx8CisJCQkgICAgIChmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpICkKKwkJCQlyZXR1cm4gLUVJTlZBTDsKKworCisJCQlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeSggY2FyZCwgZi0+ZnJlcXVlbmN5ICk7CisJCQljYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IGYtPmZyZXF1ZW5jeTsKIAkJCWNhcmQtPm11dGUgPSBGQUxTRTsKLQogCQkJcmV0dXJuIDA7CiAJCX0KLQotCQljYXNlIFZJRElPQ0dBVURJTzoKKwkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKmEgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJaW50IGk7CiAKLQkJCW1lbXNldCggYSwgMCwgc2l6ZW9mKCAqYSApICk7Ci0JCQlhLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRBQkxFOwotCQkJYS0+dm9sdW1lID0gMTsKLQkJCWEtPnN0ZXAgPSA2NTUzNTsKLQkJCXN0cmNweSggYS0+bmFtZSwgIlJhZGlvIiApOwotCQkJcmV0dXJuIDA7CisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCi0JCWNhc2UgVklESU9DU0FVRElPOgorCQljYXNlIFZJRElPQ19HX0NUUkw6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqYSA9IGFyZzsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKIAotCQkJaWYgKCBhLT5hdWRpbyApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCWlmICggYS0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFICkKLQkJCQlnZW10ZWtfcGNpX211dGUoIGNhcmQgKTsKLQkJCWVsc2UKLQkJCQlnZW10ZWtfcGNpX3VubXV0ZSggY2FyZCApOwotCQkJcmV0dXJuIDA7CisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljdHJsLT52YWx1ZT1jYXJkLT5tdXRlOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQlpZiAoY2FyZC0+bXV0ZSkKKwkJCQkJCWN0cmwtPnZhbHVlPTA7CisJCQkJCWVsc2UKKwkJCQkJCWN0cmwtPnZhbHVlPTY1NTM1OworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KKwkJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CiAKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJCQkJZ2VtdGVrX3BjaV9tdXRlKGNhcmQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZ2VtdGVrX3BjaV91bm11dGUoY2FyZCk7CisJCQkJCX0KKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQlnZW10ZWtfcGNpX3VubXV0ZShjYXJkKTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWdlbXRla19wY2lfbXV0ZShjYXJkKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgZ2VtdGVrX3BjaV9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0zMDksNyArMzU5LDcgQEAKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5uYW1lICAgICAgICAgID0gIkdlbXRlayBQQ0kgUmFkaW8iLAogCS50eXBlICAgICAgICAgID0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlICAgICAgPSBWSURfSEFSRFdBUkVfR0VNVEVLLAorCS5oYXJkd2FyZSAgICAgID0gMCwKIAkuZm9wcyAgICAgICAgICA9ICZnZW10ZWtfcGNpX2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwppbmRleCAxNjJmMzdkLi43MzBmZTE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKQEAgLTEzLDYgKzEzLDcgQEAKICAqCiAgKiBUT0RPOiBBbGxvdyBmb3IgbW9yZSB0aGFuIG9uZSBvZiB0aGVzZSBmb29saXNoIGVudGl0aWVzIDotKQogICoKKyAqIENvbnZlcnRlZCB0byBWNEwyIEFQSSBieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KQEAgLTIxLDExICsyMiwzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfUkFESU9fR0VNVEVLX1BPUlQgCSovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfQorfTsKKwogI2lmbmRlZiBDT05GSUdfUkFESU9fR0VNVEVLX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX0dFTVRFS19QT1JUIC0xCiAjZW5kaWYKQEAgLTE0Nyw3NyArMTY5LDEyMiBAQAogCiAJc3dpdGNoKGNtZCkKIAl7Ci0JCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKIAkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQl2LT50eXBlPVZJRF9UWVBFX1RVTkVSOwotCQkJdi0+Y2hhbm5lbHM9MTsKLQkJCXYtPmF1ZGlvcz0xOwotCQkJc3RyY3B5KHYtPm5hbWUsICJHZW1UZWsiKTsKKwkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tZ2VtdGVrIiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKKwkJCXN0cmxjcHkodi0+Y2FyZCwgIkdlbVRlayIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dUVU5FUjoKKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl2LT5yYW5nZWxvdz04NyoxNjAwMDsKLQkJCXYtPnJhbmdlaGlnaD0xMDgqMTYwMDA7Ci0JCQl2LT5mbGFncz1WSURFT19UVU5FUl9MT1c7Ci0JCQl2LT5tb2RlPVZJREVPX01PREVfQVVUTzsKLQkJCXYtPnNpZ25hbD0weEZGRkYqZ2VtdGVrX2dldHNpZ3N0cihydCk7CisKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CiAJCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJCQl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKworCQkJdi0+cmFuZ2Vsb3c9KDg3KjE2MDAwKTsKKwkJCXYtPnJhbmdlaGlnaD0oMTA4KjE2MDAwKTsKKwkJCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk87CisJCQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkJCXYtPnNpZ25hbD0weEZGRkYqZ2VtdGVrX2dldHNpZ3N0cihydCk7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU1RVTkVSOgorCQljYXNlIFZJRElPQ19TX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZih2LT50dW5lciE9MCkKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQkqZnJlcSA9IHJ0LT5jdXJmcmVxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCXJ0LT5jdXJmcmVxID0gKmZyZXE7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCQkJLyogbmVlZHMgdG8gYmUgY2FsbGVkIHR3aWNlIGluIG9yZGVyIGZvciBnZXRzaWdzdHIgdG8gd29yayAqLwogCQkJZ2VtdGVrX3NldGZyZXEocnQsIHJ0LT5jdXJmcmVxKTsKIAkJCWdlbXRla19zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dBVURJTzoKKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LDAsIHNpemVvZigqdikpOwotCQkJdi0+ZmxhZ3N8PVZJREVPX0FVRElPX01VVEFCTEU7Ci0JCQl2LT52b2x1bWU9MTsKLQkJCXYtPnN0ZXA9NjU1MzU7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU0FVRElPOgorCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCWlmKHYtPmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOworCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJCWludCBpOwogCi0JCQlpZih2LT5mbGFncyZWSURFT19BVURJT19NVVRFKQotCQkJCWdlbXRla19tdXRlKHJ0KTsKLQkJCWVsc2UKLQkJCQlnZW10ZWtfdW5tdXRlKHJ0KTsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOwogCi0JCQlyZXR1cm4gMDsKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWN0cmwtPnZhbHVlPXJ0LT5tdXRlZDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJaWYgKHJ0LT5tdXRlZCkKKwkJCQkJCWN0cmwtPnZhbHVlPTA7CisJCQkJCWVsc2UKKwkJCQkJCWN0cmwtPnZhbHVlPTY1NTM1OworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CisKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWlmIChjdHJsLT52YWx1ZSkgeworCQkJCQkJZ2VtdGVrX211dGUocnQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJZ2VtdGVrX3VubXV0ZShydCk7CisJCQkJCX0KKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQlnZW10ZWtfdW5tdXRlKHJ0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCWdlbXRla19tdXRlKHJ0KTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgZ2VtdGVrX2RvX2lvY3RsKTsKIAl9CiB9CiAKQEAgLTI0Myw3ICszMTAsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiR2VtVGVrIHJhZGlvIiwKIAkudHlwZQkJPSBWSURfVFlQRV9UVU5FUiwKLQkuaGFyZHdhcmUJPSBWSURfSEFSRFdBUkVfR0VNVEVLLAorCS5oYXJkd2FyZQk9IDAsCiAJLmZvcHMgICAgICAgICAgID0gJmdlbXRla19mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwppbmRleCBmY2ZhNmM5Li5lOGNlNWY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1hZXN0cm8uYwpAQCAtMTQsNiArMTQsOCBAQAogICogIHZlcnNpb24gMC4wNAogICogKyBjb2RlIGltcHJvdmVtZW50cwogICogKyBWSURFT19UVU5FUl9MT1cgaXMgcGVybWFuZW50CisgKgorICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTI1LDEwICsyNywyMyBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMDUiCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsNikKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuMDYiCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9Cit9OwogCiAjZGVmaW5lIEdQSU9fREFUQQkweDYwICAgLyogcG9ydCBvZmZzZXQgZnJvbSBFU1NfSU9fQkFTRSAqLwogCkBAIC05Niw3ICsxMTEsNyBAQAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWFlc3Ryb19yYWRpbyA9IHsKIAkubmFtZQkJPSAiTWFlc3RybyByYWRpbyIsCiAJLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1NGMTZNSSwKKwkuaGFyZHdhcmUJPSAwLAogCS5mb3BzCQk9ICZtYWVzdHJvX2ZvcHMsCiB9OwogCkBAIC0xMzAsNyArMTQ1LDcgQEAKIAkJcmRhdGEgPSBpbncoaW8pOwogCQlpZighbCkKIAkJCWRldi0+c3RlcmVvID0gIHJkYXRhICYgU1RSX01PU1QgPwotCQkJMCA6IFZJREVPX1RVTkVSX1NURVJFT19PTjsKKwkJCTAgOiAxOwogCQllbHNlCiAJCQlpZihyZGF0YSAmIFNUUl9EQVRBKQogCQkJCWRhdGErKzsKQEAgLTE4Myw3MiArMTk4LDEyMCBAQAogCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19nZXRfZHJ2ZGF0YShkZXYpOwogCiAJc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ0dDQVA6IHsKLQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnYgPSBhcmc7Ci0JCW1lbXNldCh2LCAwLCBzaXplb2YoKnYpKTsKLQkJc3RyY3B5KHYtPm5hbWUsICJNYWVzdHJvIHJhZGlvIik7Ci0JCXYtPnR5cGUgPSBWSURfVFlQRV9UVU5FUjsKLQkJdi0+Y2hhbm5lbHMgPSB2LT5hdWRpb3MgPSAxOwotCQlyZXR1cm4gMDsKLQl9IGNhc2UgVklESU9DR1RVTkVSOiB7Ci0JCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQkJaWYgKHYtPnR1bmVyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCSh2b2lkKXJhZGlvX2JpdHNfZ2V0KGNhcmQpOwotCQl2LT5mbGFncyA9IFZJREVPX1RVTkVSX0xPVyB8IGNhcmQtPnN0ZXJlbzsKLQkJdi0+c2lnbmFsID0gY2FyZC0+dHVuZWQ7Ci0JCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKLQkJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOwotCQl2LT5yYW5nZWhpZ2ggPSBGUkVRX0hJOwotCQl2LT5tb2RlID0gVklERU9fTU9ERV9BVVRPOwotCQlyZXR1cm4gMDsKLQl9IGNhc2UgVklESU9DU1RVTkVSOiB7Ci0JCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQkJaWYgKHYtPnR1bmVyICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIDA7Ci0JfSBjYXNlIFZJRElPQ0dGUkVROiB7Ci0JCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCSpmcmVxID0gQklUUzJGUkVRKHJhZGlvX2JpdHNfZ2V0KGNhcmQpKTsKLQkJcmV0dXJuIDA7Ci0JfSBjYXNlIFZJRElPQ1NGUkVROiB7Ci0JCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCWlmICgqZnJlcSA8IEZSRVFfTE8gfHwgKmZyZXEgPiBGUkVRX0hJKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJhZGlvX2JpdHNfc2V0KGNhcmQsIEZSRVEyQklUUygqZnJlcSkpOwotCQlyZXR1cm4gMDsKLQl9IGNhc2UgVklESU9DR0FVRElPOiB7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJbWVtc2V0KHYsIDAsIHNpemVvZigqdikpOwotCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7Ci0JCXYtPmZsYWdzID0gVklERU9fQVVESU9fTVVUQUJMRSB8IGNhcmQtPm11dGVkOwotCQl2LT5tb2RlID0gVklERU9fU09VTkRfU1RFUkVPOwotCQlyZXR1cm4gMDsKLQl9IGNhc2UgVklESU9DU0FVRElPOiB7Ci0JCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJaWYgKHYtPmF1ZGlvKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCQl7Ci0JCQlyZWdpc3RlciB1MTYgaW8gPSBjYXJkLT5pbzsKLQkJCXJlZ2lzdGVyIHUxNiBvbWFzayA9IGludyhpbyArIElPX01BU0spOwotCQkJb3V0dyh+U1RSX1dSRU4sIGlvICsgSU9fTUFTSyk7Ci0JCQlvdXR3KChjYXJkLT5tdXRlZCA9IHYtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSkgPwotCQkJCVNUUl9XUkVOIDogMCwgaW8pOwotCQkJdWRlbGF5KDQpOwotCQkJb3V0dyhvbWFzaywgaW8gKyBJT19NQVNLKTsKLQkJCW1zbGVlcCgxMjUpOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1hZXN0cm8iLCBzaXplb2YgKHYtPmRyaXZlcikpOworCQkJc3RybGNweSh2LT5jYXJkLCAiTWFlc3RybyBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiUENJIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCX0gY2FzZSBWSURJT0NHVU5JVDogewotCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdiA9IGFyZzsKLQkJdi0+dmlkZW8gPSBWSURFT19OT19VTklUOwotCQl2LT52YmkgPSBWSURFT19OT19VTklUOwotCQl2LT5yYWRpbyA9IGRldi0+bWlub3I7Ci0JCXYtPmF1ZGlvID0gMDsKLQkJdi0+dGVsZXRleHQgPSBWSURFT19OT19VTklUOwotCQlyZXR1cm4gMDsKLQl9IGRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCWNhc2UgVklESU9DX0dfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQkodm9pZClyYWRpb19iaXRzX2dldChjYXJkKTsKKworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKKwkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQl2LT5yYW5nZWxvdyA9IEZSRVFfTE87CisJCQl2LT5yYW5nZWhpZ2ggPSBGUkVRX0hJOworCQkJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCWlmKGNhcmQtPnN0ZXJlbykKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCWVsc2UKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl2LT5zaWduYWw9Y2FyZC0+dHVuZWQ7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1NfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlpZiAoZi0+ZnJlcXVlbmN5IDwgRlJFUV9MTyB8fCBmLT5mcmVxdWVuY3kgPiBGUkVRX0hJKQorCQkJCXJldHVybiAtRUlOVkFMOworCQkJcmFkaW9fYml0c19zZXQoY2FyZCwgRlJFUTJCSVRTKGYtPmZyZXF1ZW5jeSkpOworCisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IEJJVFMyRlJFUShyYWRpb19iaXRzX2dldChjYXJkKSk7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJY3RybC0+dmFsdWU9Y2FyZC0+bXV0ZWQ7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQl7CisJCQkJCXJlZ2lzdGVyIHUxNiBpbyA9IGNhcmQtPmlvOworCQkJCQlyZWdpc3RlciB1MTYgb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKKwkJCQkJb3V0dyh+U1RSX1dSRU4sIGlvICsgSU9fTUFTSyk7CisJCQkJCW91dHcoKGNhcmQtPm11dGVkID0gY3RybC0+dmFsdWUgKSA/CisJCQkJCQlTVFJfV1JFTiA6IDAsIGlvKTsKKwkJCQkJdWRlbGF5KDQpOworCQkJCQlvdXR3KG9tYXNrLCBpbyArIElPX01BU0spOworCQkJCQltc2xlZXAoMTI1KTsKKworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgcmFkaW9fZnVuY3Rpb24pOwogCX0KIH0KIApAQCAtMjc1LDcgKzMzOCw3IEBACiAJb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKIAlvZGlyID0gKGludyhpbyArIElPX0RJUikgJiB+U1RSX0RBVEEpIHwgKFNUUl9DTEsgfCBTVFJfV1JFTik7CiAJb3V0dyhvZGlyICYgflNUUl9XUkVOLCBpbyArIElPX0RJUik7Ci0JZGV2LT5tdXRlZCA9IGludyhpbykgJiBTVFJfV1JFTiA/IDAgOiBWSURFT19BVURJT19NVVRFOworCWRldi0+bXV0ZWQgPSBpbncoaW8pICYgU1RSX1dSRU4gPyAwIDogMTsKIAlvdXR3KG9kaXIsIGlvICsgSU9fRElSKTsKIAlvdXR3KH4oU1RSX1dSRU4gfCBTVFJfQ0xLKSwgaW8gKyBJT19NQVNLKTsKIAlvdXR3KGRldi0+bXV0ZWQgPyAwIDogU1RSX1dSRU4sIGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCmluZGV4IGY5M2Q3YWYuLmMyZWVhZTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwpAQCAtMjAsMTMgKzIwLDE0IEBACiAgKiAgIDAuNzViCiAgKiAgICAgLSBiZXR0ZXIgcGNpIGludGVyZmFjZSB0aGFua3MgdG8gRnJhbmNvaXMgUm9taWV1IDxyb21pZXVAY29nZW5pdC5mcj4KICAqCi0gKiAgIDAuNzUKKyAqICAgMC43NSAgICAgIFN1biBGZWIgIDQgMjI6NTE6MjcgRUVUIDIwMDEKICAqICAgICAtIHRpZGluZyB1cAogICogICAgIC0gcmVtb3ZlZCBzdXBwb3J0IGZvciBtdWx0aXBsZSBkZXZpY2VzIGFzIGl0IGRpZG4ndCB3b3JrIGFueXdheQogICoKICAqIEJVR1M6CiAgKiAgIC0gY2FyZCB1bm11dGVzIGlmIHlvdSBjaGFuZ2UgZnJlcXVlbmN5CiAgKgorICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKIApAQCAtNDAsMTEgKzQxLDI0IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotLyogdmVyc2lvbiAwLjc1ICAgICAgU3VuIEZlYiAgNCAyMjo1MToyNyBFRVQgMjAwMSAqLwotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC43NSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JIjAuNzYiCisKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsNyw2KQorCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfQorfTsKIAogI2lmbmRlZiBQQ0lfVkVORE9SX0lEX0dVSUxMRU1PVAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0dVSUxMRU1PVCAweDUwNDYKQEAgLTkwLDcgKzEwNCw2IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsCiAJLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1NGMTZNSSwKIAkuZm9wcyAgICAgICAgICAgPSAmbWF4aXJhZGlvX2ZvcHMsCiB9OwogCkBAIC0xNzYsODkgKzE4OSwxMTYgQEAKIAlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkPWRldi0+cHJpdjsKIAogCXN3aXRjaChjbWQpIHsKLQkJY2FzZSBWSURJT0NHQ0FQOiB7Ci0JCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYgPSBhcmc7CisJCQltZW1zZXQodiwwLHNpemVvZigqdikpOworCQkJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYXhpcmFkaW8iLCBzaXplb2YgKHYtPmRyaXZlcikpOworCQkJc3RybGNweSh2LT5jYXJkLCAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKKwkJCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOworCQkJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJCQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKKwkJeworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCisJCQkJcmV0dXJuIC1FSU5WQUw7CiAKIAkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIk1heGkgUmFkaW8gRk0yMDAwIHJhZGlvIik7Ci0JCQl2LT50eXBlPVZJRF9UWVBFX1RVTkVSOwotCQkJdi0+Y2hhbm5lbHM9di0+YXVkaW9zPTE7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ0dUVU5FUjogewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCi0JCQlpZih2LT50dW5lcikKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkJY2FyZC0+c3RlcmVvID0gMHhmZmZmICogZ2V0X3N0ZXJlbyhjYXJkLT5pbyk7Ci0JCQljYXJkLT50dW5lZCA9IDB4ZmZmZiAqIGdldF90dW5lKGNhcmQtPmlvKTsKLQotCQkJdi0+ZmxhZ3MgPSBWSURFT19UVU5FUl9MT1cgfCBjYXJkLT5zdGVyZW87Ci0JCQl2LT5zaWduYWwgPSBjYXJkLT50dW5lZDsKLQogCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQkJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKLQkJCXYtPnJhbmdlbG93ID0gRlJFUV9MTzsKLQkJCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7Ci0JCQl2LT5tb2RlID0gVklERU9fTU9ERV9BVVRPOworCQkJdi0+cmFuZ2Vsb3c9RlJFUV9MTzsKKwkJCXYtPnJhbmdlaGlnaD1GUkVRX0hJOworCQkJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCWlmKGdldF9zdGVyZW8oY2FyZC0+aW8pKQorCQkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQkJZWxzZQorCQkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKKwkJCXYtPnNpZ25hbD0weGZmZmYqZ2V0X3R1bmUoY2FyZC0+aW8pOwogCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjogewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIhPTApCisJCWNhc2UgVklESU9DX1NfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dGUkVROiB7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOworCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwogCi0JCQkqZnJlcSA9IGNhcmQtPmZyZXE7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ1NGUkVROiB7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCi0JCQlpZiAoKmZyZXEgPCBGUkVRX0xPIHx8ICpmcmVxID4gRlJFUV9ISSkKKwkJCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQljYXJkLT5mcmVxID0gKmZyZXE7CisKKwkJCWNhcmQtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJCQlzZXRfZnJlcShjYXJkLT5pbywgRlJFUTJCSVRTKGNhcmQtPmZyZXEpKTsKIAkJCW1zbGVlcCgxMjUpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86IHsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7Ci0JCQl2LT5mbGFncz1WSURFT19BVURJT19NVVRBQkxFIHwgY2FyZC0+bXV0ZWQ7Ci0JCQl2LT5tb2RlPVZJREVPX1NPVU5EX1NURVJFTzsKKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlmLT5mcmVxdWVuY3kgPSBjYXJkLT5mcmVxOworCiAJCQlyZXR1cm4gMDsKIAkJfQorCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKIAotCQljYXNlIFZJRElPQ1NBVURJTzogewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCi0JCQlpZih2LT5hdWRpbykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWNhcmQtPm11dGVkID0gdi0+ZmxhZ3MgJiBWSURFT19BVURJT19NVVRFOwotCQkJaWYoY2FyZC0+bXV0ZWQpCi0JCQkJdHVybl9wb3dlcihjYXJkLT5pbywgMCk7Ci0JCQllbHNlCi0JCQkJc2V0X2ZyZXEoY2FyZC0+aW8sIEZSRVEyQklUUyhjYXJkLT5mcmVxKSk7Ci0JCQlyZXR1cm4gMDsKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWNhc2UgVklESU9DR1VOSVQ6IHsKLQkJCXN0cnVjdCB2aWRlb191bml0ICp2ID0gYXJnOworCQljYXNlIFZJRElPQ19HX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKIAotCQkJdi0+dmlkZW89VklERU9fTk9fVU5JVDsKLQkJCXYtPnZiaT1WSURFT19OT19VTklUOwotCQkJdi0+cmFkaW89ZGV2LT5taW5vcjsKLQkJCXYtPmF1ZGlvPTA7Ci0JCQl2LT50ZWxldGV4dD1WSURFT19OT19VTklUOwotCQkJcmV0dXJuIDA7CisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljdHJsLT52YWx1ZT1jYXJkLT5tdXRlZDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWRlZmF1bHQ6IHJldHVybiAtRU5PSU9DVExDTUQ7CisJCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQkJCQlpZihjYXJkLT5tdXRlZCkKKwkJCQkJCXR1cm5fcG93ZXIoY2FyZC0+aW8sIDApOworCQkJCQllbHNlCisJCQkJCQlzZXRfZnJlcShjYXJkLT5pbywgRlJFUTJCSVRTKGNhcmQtPmZyZXEpKTsKKwkJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgcmFkaW9fZnVuY3Rpb24pOworCiAJfQogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXJ0cmFjazIuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCmluZGV4IDViNjhhYzQuLmI5ZTk4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jCkBAIC02LDYgKzYsNyBAQAogICoKICAqIFRPRE86IEFsbG93IGZvciBtb3JlIHRoYW4gb25lIG9mIHRoZXNlIGZvb2xpc2ggZW50aXRpZXMgOi0pCiAgKgorICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwpAQCAtMTQsMTEgKzE1LDMyIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQgCSovCiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfQorfTsKKwogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLMl9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQgLTEKICNlbmRpZgpAQCAtMTE1LDc1ICsxMzcsMTIwIEBACiAKIAlzd2l0Y2goY21kKQogCXsKLQkJY2FzZSBWSURJT0NHQ0FQOgorCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnYgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOwogCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXYtPnR5cGU9VklEX1RZUEVfVFVORVI7Ci0JCQl2LT5jaGFubmVscz0xOwotCQkJdi0+YXVkaW9zPTE7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvVHJhY2sgSUkiKTsKKwkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tcnRyYWNrMiIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJSYWRpb1RyYWNrIElJIiwgc2l6ZW9mICh2LT5jYXJkKSk7CisJCQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwkJCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCQkJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ19HX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZih2LT50dW5lcikJLyogT25seSAxIHR1bmVyICovCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXYtPnJhbmdlbG93PTg4KjE2MDAwOwotCQkJdi0+cmFuZ2VoaWdoPTEwOCoxNjAwMDsKLQkJCXYtPmZsYWdzPVZJREVPX1RVTkVSX0xPVzsKLQkJCXYtPm1vZGU9VklERU9fTU9ERV9BVVRPOwotCQkJdi0+c2lnbmFsPTB4RkZGRipydF9nZXRzaWdzdHIocnQpOworCisJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwogCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQkJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisKKwkJCXYtPnJhbmdlbG93PSg4OCoxNjAwMCk7CisJCQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7CisJCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05POworCQkJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CisJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl2LT5zaWduYWw9MHhGRkZGKnJ0X2dldHNpZ3N0cihydCk7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU1RVTkVSOgorCQljYXNlIFZJRElPQ19TX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZih2LT50dW5lciE9MCkKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJLyogT25seSAxIHR1bmVyIHNvIG5vIHNldHRpbmcgbmVlZGVkICEgKi8KKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQkqZnJlcSA9IHJ0LT5jdXJmcmVxOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCXJ0LT5jdXJmcmVxID0gKmZyZXE7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCXJ0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwogCQkJcnRfc2V0ZnJlcShydCwgcnQtPmN1cmZyZXEpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86CisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQltZW1zZXQodiwwLCBzaXplb2YoKnYpKTsKLQkJCXYtPmZsYWdzfD1WSURFT19BVURJT19NVVRBQkxFOwotCQkJdi0+dm9sdW1lPTE7Ci0JCQl2LT5zdGVwPTY1NTM1OwotCQkJc3RyY3B5KHYtPm5hbWUsICJSYWRpbyIpOworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NBVURJTzoKKwkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQlpZih2LT5hdWRpbykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKIAotCQkJaWYodi0+ZmxhZ3MmVklERU9fQVVESU9fTVVURSkKLQkJCQlydF9tdXRlKHJ0KTsKLQkJCWVsc2UKLQkJCQlydF91bm11dGUocnQpOworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAoMCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CiAKLQkJCXJldHVybiAwOworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJY3RybC0+dmFsdWU9cnQtPm11dGVkOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQlpZiAocnQtPm11dGVkKQorCQkJCQkJY3RybC0+dmFsdWU9MDsKKwkJCQkJZWxzZQorCQkJCQkJY3RybC0+dmFsdWU9NjU1MzU7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQlydF9tdXRlKHJ0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXJ0X3VubXV0ZShydCk7CisJCQkJCX0KKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQlydF91bm11dGUocnQpOworCQkJCQl9IGVsc2UgeworCQkJCQkJcnRfbXV0ZShydCk7CisJCQkJCX0KKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZywKKwkJCQkJCQkgIHJ0X2RvX2lvY3RsKTsKIAl9CiB9CiAKQEAgLTIwOSw3ICsyNzYsNyBAQAogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKIAkubmFtZQkJPSAiUmFkaW9UcmFjayBJSSByYWRpbyIsCiAJLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1JUUkFDSzIsCisJLmhhcmR3YXJlCT0gMCwKIAkuZm9wcyAgICAgICAgICAgPSAmcnRyYWNrMl9mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1pLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwppbmRleCBlZmVlNmUzLi5lY2M4NTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYwpAQCAtMTMsMjAgKzEzLDM1IEBACiAgKiAgTm8gdm9sdW1lIGNvbnRyb2wgLSBvbmx5IG11dGUvdW5tdXRlIC0geW91IGhhdmUgdG8gdXNlIGxpbmUgdm9sdW1lCiAgKiAgY29udHJvbCBvbiBTQi1wYXJ0IG9mIFNGMTZGTUkKICAqCisgKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4JLyogX19zZXR1cAkJCSovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0KK307CisKIHN0cnVjdCBmbWlfZGV2aWNlCiB7CiAJaW50IHBvcnQ7CkBAIC0xMjMsOTMgKzEzOCwxMjIgQEAKIAogCXN3aXRjaChjbWQpCiAJewotCQljYXNlIFZJRElPQ0dDQVA6CisJCWNhc2UgVklESU9DX1FVRVJZQ0FQOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKnYgPSBhcmc7CiAJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJc3RyY3B5KHYtPm5hbWUsICJTRjE2LUZNeCByYWRpbyIpOwotCQkJdi0+dHlwZT1WSURfVFlQRV9UVU5FUjsKLQkJCXYtPmNoYW5uZWxzPTE7Ci0JCQl2LT5hdWRpb3M9MTsKKwkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tc2YxNmZtaSIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNeCByYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dUVU5FUjoKKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CiAJCQlpbnQgbXVsdDsKIAotCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKKworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKIAkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKLQkJCW11bHQgPSAoZm1pLT5mbGFncyAmIFZJREVPX1RVTkVSX0xPVykgPyAxIDogMTAwMDsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQltdWx0ID0gKGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpID8gMSA6IDEwMDA7CiAJCQl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEvbXVsdDsKIAkJCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEvbXVsdDsKLQkJCXYtPmZsYWdzPWZtaS0+ZmxhZ3M7Ci0JCQl2LT5tb2RlPVZJREVPX01PREVfQVVUTzsKKwkJCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQkJdi0+Y2FwYWJpbGl0eT1mbWktPmZsYWdzJlY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCQkJdi0+c2lnbmFsID0gZm1pX2dldHNpZ3N0cihmbWkpOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjoKKwkJY2FzZSBWSURJT0NfU19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIhPTApCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWZtaS0+ZmxhZ3MgPSB2LT5mbGFncyAmIFZJREVPX1RVTkVSX0xPVzsKLQkJCS8qIE9ubHkgMSB0dW5lciBzbyBubyBzZXR0aW5nIG5lZWRlZCAhICovCisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR0ZSRVE6CisJCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkJKmZyZXEgPSBmbWktPmN1cmZyZXE7Ci0JCQlpZiAoIShmbWktPmZsYWdzICYgVklERU9fVFVORVJfTE9XKSkKLQkJCSAgICAqZnJlcSAvPSAxMDAwOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCWlmICghKGZtaS0+ZmxhZ3MgJiBWSURFT19UVU5FUl9MT1cpKQotCQkJCSpmcmVxICo9IDEwMDA7Ci0JCQlpZiAoKmZyZXEgPCBSU0YxNl9NSU5GUkVRIHx8ICpmcmVxID4gUlNGMTZfTUFYRlJFUSApCisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWlmICghKGZtaS0+ZmxhZ3MgJiBWNEwyX1RVTkVSX0NBUF9MT1cpKQorCQkJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOworCQkJaWYgKGYtPmZyZXF1ZW5jeSA8IFJTRjE2X01JTkZSRVEgfHwKKwkJCQkJZi0+ZnJlcXVlbmN5ID4gUlNGMTZfTUFYRlJFUSApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQkvKnJvdW5kaW5nIGluIHN0ZXBzIG9mIDgwMCB0byBtYXRjaCB0aCBmcmVxCiAJCQkgIHRoYXQgd2lsbCBiZSB1c2VkICovCi0JCQlmbWktPmN1cmZyZXEgPSAoKmZyZXEvODAwKSo4MDA7CisJCQlmbWktPmN1cmZyZXEgPSAoZi0+ZnJlcXVlbmN5LzgwMCkqODAwOwogCQkJZm1pX3NldGZyZXEoZm1pKTsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHQVVESU86CisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJdi0+ZmxhZ3M9KCAoIWZtaS0+Y3Vydm9sKSpWSURFT19BVURJT19NVVRFIHwgVklERU9fQVVESU9fTVVUQUJMRSk7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7Ci0JCQl2LT5tb2RlPVZJREVPX1NPVU5EX1NURVJFTzsKKwkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKKworCQkJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJCQlmLT5mcmVxdWVuY3kgPSBmbWktPmN1cmZyZXE7CisJCQlpZiAoIShmbWktPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSkKKwkJCQlmLT5mcmVxdWVuY3kgLz0gMTAwMDsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NTQVVESU86CisJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJaWYodi0+YXVkaW8pCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQlmbWktPmN1cnZvbD0gdi0+ZmxhZ3MmVklERU9fQVVESU9fTVVURSA/IDAgOiAxOwotCQkJZm1pLT5jdXJ2b2wgPwotCQkJCWZtaV91bm11dGUoZm1pLT5wb3J0KSA6IGZtaV9tdXRlKGZtaS0+cG9ydCk7Ci0JCQlyZXR1cm4gMDsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAoMCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJY2FzZSBWSURJT0NHVU5JVDoKKwkJY2FzZSBWSURJT0NfR19DVFJMOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdiA9IGFyZzsKLQkJCXYtPnZpZGVvPVZJREVPX05PX1VOSVQ7Ci0JCQl2LT52Ymk9VklERU9fTk9fVU5JVDsKLQkJCXYtPnJhZGlvPWRldi0+bWlub3I7Ci0JCQl2LT5hdWRpbz0wOyAvKiBIb3cgZG8gd2UgZmluZCBvdXQgdGhpcz8/PyAqLwotCQkJdi0+dGVsZXRleHQ9VklERU9fTk9fVU5JVDsKLQkJCXJldHVybiAwOworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljdHJsLT52YWx1ZT1mbWktPmN1cnZvbDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNhc2UgVklESU9DX1NfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCXsKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKQorCQkJCQkJZm1pX211dGUoZm1pLT5wb3J0KTsKKwkJCQkJZWxzZQorCQkJCQkJZm1pX3VubXV0ZShmbWktPnBvcnQpOworCisJCQkJCWZtaS0+Y3Vydm9sPWN0cmwtPnZhbHVlOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGlub2RlLGZpbGUsY21kLGFyZywKKwkJCQkJCQkgIGZtaV9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0yMzUsNyArMjc5LDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIlNGMTZGTXggcmFkaW8iLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9TRjE2TUksCisJLmhhcmR3YXJlCT0gMCwKIAkuZm9wcyAgICAgICAgICAgPSAmZm1pX2ZvcHMsCiB9OwogCkBAIC0yOTQsNyArMzM4LDcgQEAKIAlmbWlfdW5pdC5wb3J0ID0gaW87CiAJZm1pX3VuaXQuY3Vydm9sID0gMDsKIAlmbWlfdW5pdC5jdXJmcmVxID0gMDsKLQlmbWlfdW5pdC5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKKwlmbWlfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAlmbWlfcmFkaW8ucHJpdiA9ICZmbWlfdW5pdDsKIAogCW11dGV4X2luaXQoJmxvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCmluZGV4IDM0ODNiMmMuLjQ0NDRkY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKQEAgLTEwLDYgKzEwLDggQEAKICAqICBGb3IgcmVhZCBzdGVyZW8vbW9ubyB5b3UgbXVzdCB3YWl0IDAuMSBzZWMgYWZ0ZXIgc2V0IGZyZXF1ZW5jeSBhbmQKICAqICBjYXJkIHVubXV0ZWQgc28gSSBzZXQgZnJlcXVlbmN5IG9uIHVubXV0ZQogICogIFNpZ25hbCBoYW5kbGluZyBzZWVtIHRvIHdvcmsgb25seSBvbiBhdXRvc2Nhbm5pbmcgKG5vdCBpbXBsZW1lbnRlZCkKKyAqCisgKiAgQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwpAQCAtMTgsMTIgKzIwLDM0IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KIAogc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwogCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDE8PDEyLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OworCiAjdW5kZWYgREVCVUcKIC8vI2RlZmluZSBERUJVRyAxCiAKQEAgLTIxNCw2MyArMjM4LDY1IEBACiAKIAlzd2l0Y2goY21kKQogCXsKLQkJY2FzZSBWSURJT0NHQ0FQOgorCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnYgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOwogCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQkJCXN0cmNweSh2LT5uYW1lLCAiU0YxNi1GTVIyIHJhZGlvIik7Ci0JCQl2LT50eXBlPVZJRF9UWVBFX1RVTkVSOwotCQkJdi0+Y2hhbm5lbHM9MTsKLQkJCXYtPmF1ZGlvcz0xOworCQkJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1zZjE2Zm1yMiIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNUjIgcmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKKwkJCXNwcmludGYodi0+YnVzX2luZm8sIklTQSIpOworCQkJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJCQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6CisJCWNhc2UgVklESU9DX0dfVFVORVI6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOwogCQkJaW50IG11bHQ7CiAKLQkJCWlmKHYtPnR1bmVyKSAgICAgLyogT25seSAxIHR1bmVyICovCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOworCisJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwogCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOwotCQkJbXVsdCA9IChmbXIyLT5mbGFncyAmIFZJREVPX1RVTkVSX0xPVykgPyAxIDogMTAwMDsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQltdWx0ID0gKGZtcjItPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSA/IDEgOiAxMDAwOwogCQkJdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRL211bHQ7CiAJCQl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRL211bHQ7Ci0JCQl2LT5mbGFncyA9IGZtcjItPmZsYWdzIHwgVklERU9fQVVESU9fTVVUQUJMRTsKLQkJCWlmIChmbXIyLT5tdXRlKQotCQkJCXYtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEU7Ci0JCQl2LT5tb2RlPVZJREVPX01PREVfQVVUTzsKKwkJCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk8gfCBWNEwyX1RVTkVSX01PREVfU1RFUkVPOworCQkJdi0+Y2FwYWJpbGl0eT1mbXIyLT5mbGFncyZWNEwyX1RVTkVSX0NBUF9MT1c7CisKKwkJCXYtPmF1ZG1vZGUgPSBmbXIyLT5zdGVyZW8gPyBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgorCQkJCQkJICAgIFY0TDJfVFVORVJfTU9ERV9NT05POwogCQkJbXV0ZXhfbG9jaygmbG9jayk7CiAJCQl2LT5zaWduYWwgPSBmbXIyX2dldHNpZ3N0cihmbXIyKTsKIAkJCW11dGV4X3VubG9jaygmbG9jayk7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU1RVTkVSOgorCQljYXNlIFZJRElPQ19TX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZiAodi0+dHVuZXIhPTApCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWZtcjItPmZsYWdzID0gdi0+ZmxhZ3MgJiBWSURFT19UVU5FUl9MT1c7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR0ZSRVE6CisJCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkJKmZyZXEgPSBmbXIyLT5jdXJmcmVxOwotCQkJaWYgKCEoZm1yMi0+ZmxhZ3MgJiBWSURFT19UVU5FUl9MT1cpKQotCQkJCSpmcmVxIC89IDEwMDA7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ1NGUkVROgotCQl7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkJaWYgKCEoZm1yMi0+ZmxhZ3MgJiBWSURFT19UVU5FUl9MT1cpKQotCQkJCSpmcmVxICo9IDEwMDA7Ci0JCQlpZiAoICpmcmVxIDwgUlNGMTZfTUlORlJFUSB8fCAqZnJlcSA+IFJTRjE2X01BWEZSRVEgKQorCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlpZiAoIShmbXIyLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCisJCQkJZi0+ZnJlcXVlbmN5ICo9IDEwMDA7CisJCQlpZiAoZi0+ZnJlcXVlbmN5IDwgUlNGMTZfTUlORlJFUSB8fAorCQkJCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRICkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCS8qIHJvdW5kaW5nIGluIHN0ZXBzIG9mIDIwMCB0byBtYXRjaCB0aCBmcmVxCi0JCQkgKiB0aGF0IHdpbGwgYmUgdXNlZAotCQkJICovCi0JCQlmbXIyLT5jdXJmcmVxID0gKCpmcmVxLzIwMCkqMjAwOworCQkJLypyb3VuZGluZyBpbiBzdGVwcyBvZiAyMDAgdG8gbWF0Y2ggdGggZnJlcQorCQkJICB0aGF0IHdpbGwgYmUgdXNlZCAqLworCQkJZm1yMi0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kvMjAwKSoyMDA7CiAKIAkJCS8qIHNldCBjYXJkIGZyZXEgKGlmIG5vdCBtdXRlZCkgKi8KIAkJCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpCkBAIC0yNzksNDAgKzMwNSw4MSBAQAogCQkJCWZtcjJfc2V0ZnJlcShmbXIyKTsKIAkJCQltdXRleF91bmxvY2soJmxvY2spOwogCQkJfQorCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dBVURJTzoKKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQkvKiAhISEgZG8gbm90IHJldHVybiBWSURFT19BVURJT19NVVRFICovCi0JCQl2LT5mbGFncyA9IFZJREVPX0FVRElPX01VVEFCTEU7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7Ci0JCQkvKiBnZXQgY3VycmVudCBzdGVyZW8gbW9kZSAqLwotCQkJdi0+bW9kZSA9IGZtcjItPnN0ZXJlbyA/IFZJREVPX1NPVU5EX1NURVJFTzogVklERU9fU09VTkRfTU9OTzsKLQkJCS8qIHZvbHVtZSBzdXBwb3J0ZWQgPyAqLwotCQkJaWYgKGZtcjItPmNhcmRfdHlwZSA9PSAxMSkKLQkJCXsKLQkJCQl2LT5mbGFncyB8PSBWSURFT19BVURJT19WT0xVTUU7Ci0JCQkJdi0+c3RlcCA9IDEgPDwgMTI7Ci0JCQkJdi0+dm9sdW1lID0gZm1yMi0+Y3Vydm9sOworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IGZtcjItPmN1cmZyZXE7CisJCQlpZiAoIShmbXIyLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCisJCQkJZi0+ZnJlcXVlbmN5IC89IDEwMDA7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYyA9IGFyZzsKKwkJCWludCBpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgeworCQkJCWlmICgoZm1yMi0+Y2FyZF90eXBlICE9IDExKQorCQkJCQkJJiYgVjRMMl9DSURfQVVESU9fVk9MVU1FKQorCQkJCQlyYWRpb19xY3RybFtpXS5zdGVwPTY1NTM1OworCQkJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCisJCQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQl9CiAJCQl9Ci0JCQlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiR2V0IGZsYWdzICVkIHZvbCAlZFxuIiwgdi0+ZmxhZ3MsIHYtPnZvbHVtZSkpOwotCQkJcmV0dXJuIDA7CisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQljYXNlIFZJRElPQ1NBVURJTzoKKwkJY2FzZSBWSURJT0NfR19DVFJMOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQlpZih2LT5hdWRpbykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWRlYnVnX3ByaW50KChLRVJOX0RFQlVHICJTZXQgZmxhZ3MgJWQgdm9sICVkXG4iLCB2LT5mbGFncywgdi0+dm9sdW1lKSk7Ci0JCQkvKiBzZXQgdm9sdW1lICovCi0JCQlpZiAodi0+ZmxhZ3MgJiBWSURFT19BVURJT19WT0xVTUUpCi0JCQkJZm1yMi0+Y3Vydm9sID0gdi0+dm9sdW1lOyAvKiAhISEgc2V0IHdpdGggcHJlY2lzaW9uICovCi0JCQlpZiAoZm1yMi0+Y2FyZF90eXBlICE9IDExKSBmbXIyLT5jdXJ2b2wgPSA2NTUzNTsKLQkJCWZtcjItPm11dGUgPSAwOwotCQkJaWYgKHYtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSkKLQkJCQlmbXIyLT5tdXRlID0gMTsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJY3RybC0+dmFsdWU9Zm1yMi0+bXV0ZTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJY3RybC0+dmFsdWU9Zm1yMi0+Y3Vydm9sOworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2FzZSBWSURJT0NfU19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CisKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWZtcjItPm11dGU9Y3RybC0+dmFsdWU7CisJCQkJCWlmIChmbXIyLT5jYXJkX3R5cGUgIT0gMTEpIHsKKwkJCQkJCWlmICghZm1yMi0+bXV0ZSkgeworCQkJCQkJCWZtcjItPmN1cnZvbCA9IDY1NTM1OworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlmbXIyLT5jdXJ2b2wgPSAwOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKKwkJCQkJaWYgKGZtcjItPmNhcmRfdHlwZSAhPSAxMSkgeworCQkJCQkJaWYgKGZtcjItPmN1cnZvbCkgeworCQkJCQkJCWZtcjItPmN1cnZvbCA9IDY1NTM1OworCQkJCQkJCWZtcjItPm11dGUgPSAwOworCQkJCQkJfSBlbHNlIHsKKwkJCQkJCQlmbXIyLT5jdXJ2b2wgPSAwOworCQkJCQkJCWZtcjItPm11dGUgPSAxOworCQkJCQkJfQorCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWRlZmF1bHQ6CisJCQkJCXJldHVybiAtRUlOVkFMOworCQkJfQogI2lmZGVmIERFQlVHCiAJCQlpZiAoZm1yMi0+Y3Vydm9sICYmICFmbXIyLT5tdXRlKQogCQkJCXByaW50ayhLRVJOX0RFQlVHICJ1bm11dGVcbiIpOwpAQCAtMzIwLDI3ICszODcsMTggQEAKIAkJCQlwcmludGsoS0VSTl9ERUJVRyAibXV0ZVxuIik7CiAjZW5kaWYKIAkJCW11dGV4X2xvY2soJmxvY2spOwotCQkJaWYgKGZtcjItPmN1cnZvbCAmJiAhZm1yMi0+bXV0ZSkKLQkJCXsKKwkJCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKIAkJCQlmbXIyX3NldHZvbHVtZShmbXIyKTsKIAkJCQlmbXIyX3NldGZyZXEoZm1yMik7Ci0JCQl9Ci0JCQllbHNlIGZtcjJfbXV0ZShmbXIyLT5wb3J0KTsKKwkJCX0gZWxzZQorCQkJCWZtcjJfbXV0ZShmbXIyLT5wb3J0KTsKIAkJCW11dGV4X3VubG9jaygmbG9jayk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQljYXNlIFZJRElPQ0dVTklUOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdW5pdCAqdiA9IGFyZzsKLQkJCXYtPnZpZGVvPVZJREVPX05PX1VOSVQ7Ci0JCQl2LT52Ymk9VklERU9fTk9fVU5JVDsKLQkJCXYtPnJhZGlvPWRldi0+bWlub3I7Ci0JCQl2LT5hdWRpbz0wOyAvKiBIb3cgZG8gd2UgZmluZCBvdXQgdGhpcz8/PyAqLwotCQkJdi0+dGVsZXRleHQ9VklERU9fTk9fVU5JVDsKLQkJCXJldHVybiAwOworCQkJcmV0dXJuICgwKTsKIAkJfQogCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQkJICBmbXIyX2RvX2lvY3RsKTsKKwogCX0KIH0KIApAQCAtMzY2LDcgKzQyNCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJTRjE2Rk1SMiByYWRpbyIsCiAJLiB0eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9TRjE2Rk1SMiwKKwkuaGFyZHdhcmUJPSAwLAogCS5mb3BzCQk9ICZmbXIyX2ZvcHMsCiB9OwogCkBAIC0zNzcsNyArNDM1LDcgQEAKIAlmbXIyX3VuaXQubXV0ZSA9IDA7CiAJZm1yMl91bml0LmN1cmZyZXEgPSAwOwogCWZtcjJfdW5pdC5zdGVyZW8gPSAxOwotCWZtcjJfdW5pdC5mbGFncyA9IFZJREVPX1RVTkVSX0xPVzsKKwlmbXIyX3VuaXQuZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJZm1yMl91bml0LmNhcmRfdHlwZSA9IDA7CiAJZm1yMl9yYWRpby5wcml2ID0gJmZtcjJfdW5pdDsKIApAQCAtMzk2LDcgKzQ1NCw2IEBACiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU0YxNkZNUjIgcmFkaW8gY2FyZCBkcml2ZXIgYXQgMHgleC5cbiIsIGlvKTsKLQlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiTXV0ZSAlZCBMb3cgJWRcbiIsVklERU9fQVVESU9fTVVURSxWSURFT19UVU5FUl9MT1cpKTsKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCiAJbXV0ZXhfbG9jaygmbG9jayk7CiAJZm1yMl9tdXRlKGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwppbmRleCBkZmJhNGFlLi5mNTM5NDkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCkBAIC0yMSw2ICsyMSw3IEBACiAgKiAgSWYgeW91IGNhbiBoZWxwIG1lIG91dCB3aXRoIHRoYXQsIHBsZWFzZSBjb250YWN0IG1lISEKICAqCiAgKgorICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4JLyogTW9kdWxlcyAJCQkqLwpAQCAtMjksMTEgKzMwLDMyIEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUIAkqLwogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAKKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorCitzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CisJeworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCisJCS5uYW1lICAgICAgICAgID0gIk11dGUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMSwKKwkJLmRlZmF1bHRfdmFsdWUgPSAxLAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJfSx7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAorCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAorCQkubWluaW11bSAgICAgICA9IDAsCisJCS5tYXhpbXVtICAgICAgID0gMHhmZiwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OworCiAjaWZuZGVmIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUIDB4NTkwCiAjZW5kaWYKQEAgLTE5NCw3MyArMjE2LDExNyBAQAogCiAJc3dpdGNoKGNtZCkKIAl7Ci0JCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKIAkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQl2LT50eXBlPVZJRF9UWVBFX1RVTkVSOwotCQkJdi0+Y2hhbm5lbHM9MTsKLQkJCXYtPmF1ZGlvcz0xOwotCQkJc3RyY3B5KHYtPm5hbWUsICJBY3RpdmVSYWRpbyIpOworCQkJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby10ZXJyYXRlYyIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJBY3RpdmVSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ0dUVU5FUjoKKwkJY2FzZSBWSURJT0NfR19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CisKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJCQl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwogCQkJdi0+cmFuZ2Vsb3c9KDg3KjE2MDAwKTsKIAkJCXYtPnJhbmdlaGlnaD0oMTA4KjE2MDAwKTsKLQkJCXYtPmZsYWdzPVZJREVPX1RVTkVSX0xPVzsKLQkJCXYtPm1vZGU9VklERU9fTU9ERV9BVVRPOwotCQkJc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCQkJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OTzsKKwkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOworCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwogCQkJdi0+c2lnbmFsPTB4RkZGRip0dF9nZXRzaWdzdHIodHQpOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjoKKwkJY2FzZSBWSURJT0NfU19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIhPTApCisJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdiA9IGFyZzsKKworCQkJaWYgKHYtPmluZGV4ID4gMCkKIAkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCS8qIE9ubHkgMSB0dW5lciBzbyBubyBzZXR0aW5nIG5lZWRlZCAhICovCisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR0ZSRVE6CisJCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQl7Ci0JCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkJKmZyZXEgPSB0dC0+Y3VyZnJlcTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0ZSRVE6Ci0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQl0dC0+Y3VyZnJlcSA9ICpmcmVxOworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQl0dC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKIAkJCXR0X3NldGZyZXEodHQsIHR0LT5jdXJmcmVxKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DR0FVRElPOgorCQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKIAkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJbWVtc2V0KHYsMCwgc2l6ZW9mKCp2KSk7Ci0JCQl2LT5mbGFnc3w9VklERU9fQVVESU9fTVVUQUJMRXxWSURFT19BVURJT19WT0xVTUU7Ci0JCQl2LT52b2x1bWU9dHQtPmN1cnZvbCAqIDY1NTQ7Ci0JCQl2LT5zdGVwPTY1NTQ7Ci0JCQlzdHJjcHkodi0+bmFtZSwgIlJhZGlvIik7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJZi0+ZnJlcXVlbmN5ID0gdHQtPmN1cmZyZXE7CisKIAkJCXJldHVybiAwOwogCQl9Ci0JCWNhc2UgVklESU9DU0FVRElPOgorCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCWlmKHYtPmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJaWYodi0+ZmxhZ3MmVklERU9fQVVESU9fTVVURSkKLQkJCQl0dF9tdXRlKHR0KTsKLQkJCWVsc2UKLQkJCQl0dF9zZXR2b2wodHQsdi0+dm9sdW1lLzY1NTQpOwotCQkJcmV0dXJuIDA7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CisJCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQlpZiAodHQtPm11dGVkKQorCQkJCQkJY3RybC0+dmFsdWU9MTsKKwkJCQkJZWxzZQorCQkJCQkJY3RybC0+dmFsdWU9MDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJCQkJY3RybC0+dmFsdWU9dHQtPmN1cnZvbCAqIDY1NTQ7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQl0dF9tdXRlKHR0KTsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXR0X3NldHZvbCh0dCx0dC0+Y3Vydm9sKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQl0dF9zZXR2b2wodHQsY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwogCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwkJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQkJICB0dF9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0yODYsNyArMzUyLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIlRlcnJhVGVjIEFjdGl2ZVJhZGlvIiwKIAkudHlwZQkJPSBWSURfVFlQRV9UVU5FUiwKLQkuaGFyZHdhcmUJPSBWSURfSEFSRFdBUkVfVEVSUkFURUMsCisJLmhhcmR3YXJlCT0gMCwKIAkuZm9wcyAgICAgICAgICAgPSAmdGVycmF0ZWNfZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwppbmRleCA4ZGE0YmFkLi5iYjAzYWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCkBAIC0xMiw3ICsxMiw3IEBACiAgKiBTY290dCBNY0dyYXRoICAgIChzbWNncmF0aEB0d2lsaWdodC52dGMudnNjLmVkdSkKICAqIFdpbGxpYW0gTWNHcmF0aCAgKHdtY2dyYXRoQHR3aWxpZ2h0LnZ0Yy52c2MuZWR1KQogICoKLSAqIFRoZSBiYXNpcyBmb3IgdGhpcyBjb2RlIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vYmlnYmFuZy52dGMudnNjLmVkdS9mbXJhZGlvLworICogQ29udmVydGVkIHRvIFY0TDIgQVBJIGJ5IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgogICovCiAKICNpbmNsdWRlIDxzdGRhcmcuaD4KQEAgLTIxLDkgKzIxLDQ2IEBACiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CS8qIENPTkZJR19SQURJT19UUlVTVF9QT1JUIAkqLworCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDIwNDgsCisJCS5kZWZhdWx0X3ZhbHVlID0gNjU1MzUsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19CQVNTLAorCQkubmFtZSAgICAgICAgICA9ICJCYXNzIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDQzNzAsCisJCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19UUkVCTEUsCisJCS5uYW1lICAgICAgICAgID0gIlRyZWJsZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA0MzcwLAorCQkuZGVmYXVsdF92YWx1ZSA9IDMyNzY4LAorCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJfSwKK307CiAKIC8qIGFjY2VwdGFibGUgcG9ydHM6IDB4MzUwIChKUDMgc2hvcnRlZCksIDB4MzU4IChKUDMgb3BlbikgKi8KIApAQCAtMTYwLDg4ICsxOTcsMTI1IEBACiB7CiAJc3dpdGNoKGNtZCkKIAl7Ci0JCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKKwkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRydXN0Iiwgc2l6ZW9mICh2LT5kcml2ZXIpKTsKKwkJCXN0cmxjcHkodi0+Y2FyZCwgIlRydXN0IEZNIFJhZGlvIiwgc2l6ZW9mICh2LT5jYXJkKSk7CisJCQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwkJCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCQkJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0dfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJdi0+dHlwZT1WSURfVFlQRV9UVU5FUjsKLQkJCXYtPmNoYW5uZWxzPTE7Ci0JCQl2LT5hdWRpb3M9MTsKLQkJCXN0cmNweSh2LT5uYW1lLCAiVHJ1c3QgRk0gUmFkaW8iKTsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQotCQkJaWYodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLwotCQkJCXJldHVybiAtRUlOVkFMOwotCi0JCQl2LT5yYW5nZWxvdyA9IDg3NTAwICogMTY7Ci0JCQl2LT5yYW5nZWhpZ2ggPSAxMDgwMDAgKiAxNjsKLQkJCXYtPmZsYWdzID0gVklERU9fVFVORVJfTE9XOwotCQkJdi0+bW9kZSA9IFZJREVPX01PREVfQVVUTzsKLQotCQkJdi0+c2lnbmFsID0gdHJfZ2V0c2lnc3RyKCk7Ci0JCQlpZih0cl9nZXRzdGVyZW8oKSkKLQkJCQl2LT5mbGFncyB8PSBWSURFT19UVU5FUl9TVEVSRU9fT047Ci0KIAkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQl2LT5yYW5nZWxvdz0oODcuNSoxNjAwMCk7CisJCQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7CisJCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwkJCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOworCQkJaWYodHJfZ2V0c3RlcmVvKCkpCisJCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJCQllbHNlCisJCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCQkJdi0+c2lnbmFsPXRyX2dldHNpZ3N0cigpOwogCiAJCQlyZXR1cm4gMDsKIAkJfQotCQljYXNlIFZJRElPQ1NUVU5FUjoKKwkJY2FzZSBWSURJT0NfU19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYodi0+dHVuZXIgIT0gMCkKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQogCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKLQkJewotCQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJCSpmcmVxID0gY3VyZnJlcTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0ZSRVE6Ci0JCXsKLQkJCXVuc2lnbmVkIGxvbmcgKmZyZXEgPSBhcmc7Ci0JCQl0cl9zZXRmcmVxKCpmcmVxKTsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7CiAKLQkJCW1lbXNldCh2LDAsIHNpemVvZigqdikpOwotCQkJdi0+ZmxhZ3MgPSBWSURFT19BVURJT19NVVRBQkxFIHwgVklERU9fQVVESU9fVk9MVU1FIHwKLQkJCQkgIFZJREVPX0FVRElPX0JBU1MgfCBWSURFT19BVURJT19UUkVCTEU7Ci0JCQl2LT5tb2RlID0gY3Vyc3RlcmVvPyBWSURFT19TT1VORF9TVEVSRU8gOiBWSURFT19TT1VORF9NT05POwotCQkJdi0+dm9sdW1lID0gY3Vydm9sICogMjA0ODsKLQkJCXYtPnN0ZXAgPSAyMDQ4OwotCQkJdi0+YmFzcyA9IGN1cmJhc3MgKiA0MzcwOwotCQkJdi0+dHJlYmxlID0gY3VydHJlYmxlICogNDM3MDsKLQotCQkJc3RyY3B5KHYtPm5hbWUsICJUcnVzdCBGTSBSYWRpbyIpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJY2FzZSBWSURJT0NTQVVESU86CisJCWNhc2UgVklESU9DX1NfRlJFUVVFTkNZOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CiAKLQkJCWlmKHYtPmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJdHJfc2V0dm9sKHYtPnZvbHVtZSk7Ci0JCQl0cl9zZXRiYXNzKHYtPmJhc3MpOwotCQkJdHJfc2V0dHJlYmxlKHYtPnRyZWJsZSk7Ci0JCQl0cl9zZXRzdGVyZW8odi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTyk7Ci0JCQl0cl9zZXRtdXRlKHYtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSk7CisJCQljdXJmcmVxID0gZi0+ZnJlcXVlbmN5OworCQkJdHJfc2V0ZnJlcShjdXJmcmVxKTsKIAkJCXJldHVybiAwOwogCQl9CisJCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJZi0+ZnJlcXVlbmN5ID0gY3VyZnJlcTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOworCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljdHJsLT52YWx1ZT1jdXJtdXRlOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQljdHJsLT52YWx1ZT0gY3Vydm9sICogMjA0ODsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCQkJCWN0cmwtPnZhbHVlPSBjdXJiYXNzICogNDM3MDsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJCQkJY3RybC0+dmFsdWU9IGN1cnRyZWJsZSAqIDQzNzA7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJdHJfc2V0bXV0ZShjdHJsLT52YWx1ZSk7CisJCQkJCXJldHVybiAwOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQl0cl9zZXR2b2woY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gMDsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCQkJCXRyX3NldGJhc3MoY3RybC0+dmFsdWUpOworCQkJCQlyZXR1cm4gMDsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJCQkJdHJfc2V0dHJlYmxlKGN0cmwtPnZhbHVlKTsKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKIAkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgdHJfZG9faW9jdGwpOwogCX0KIH0KIApAQCAtMjY1LDcgKzMzOSw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJUcnVzdCBGTSBSYWRpbyIsCiAJLnR5cGUJCT0gVklEX1RZUEVfVFVORVIsCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1RSVVNULAorCS5oYXJkd2FyZQk9IDAsCiAJLmZvcHMgICAgICAgICAgID0gJnRydXN0X2ZvcHMsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCmluZGV4IGVkZDAxMjIuLjRhNzJiNGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHlwaG9vbi5jCkBAIC0yNyw2ICsyNyw4IEBACiAgKiB2YWx1ZSB3aGVyZSBJIGRvIGV4cGVjdCBqdXN0IG5vaXNlIGFuZCB0dXJuIHRoZSBzcGVha2VyIHZvbHVtZSBkb3duLgogICogVGhlIGZyZXF1ZW5jeSBjaGFuZ2UgaXMgbmVjZXNzYXJ5IHNpbmNlIHRoZSBjYXJkIG5ldmVyIHNlZW1zIHRvIGJlCiAgKiBjb21wbGV0ZWx5IHNpbGVudC4KKyAqCisgKiBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgkvKiBNb2R1bGVzICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTM1LDExICszNywzMiBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4JLyogcmFkaW8gY2FyZCBzdGF0dXMgcmVwb3J0CSAgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cyAgICAgICAgICAgKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfUkFESU9fVFlQSE9PTl8qICAgICAgICAgKi8KIAotI2RlZmluZSBCQU5ORVIgIlR5cGhvb24gUmFkaW8gQ2FyZCBkcml2ZXIgdjAuMVxuIgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwxLDEpCisjZGVmaW5lIEJBTk5FUiAiVHlwaG9vbiBSYWRpbyBDYXJkIGRyaXZlciB2MC4xLjFcbiIKKworc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0geworCXsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAorCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDEsCisJCS5kZWZhdWx0X3ZhbHVlID0gMSwKKwkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCX0seworCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKKwkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKKwkJLm1pbmltdW0gICAgICAgPSAwLAorCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAorCQkuc3RlcCAgICAgICAgICA9IDE8PDE0LAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OworCiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUIC0xCkBAIC0xNzEsNzYgKzE5NCwxMTQgQEAKIAlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSBkZXYtPnByaXY7CiAKIAlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DR0NBUDoKKwkJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2ID0gYXJnOworCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdiA9IGFyZzsKIAkJCW1lbXNldCh2LDAsc2l6ZW9mKCp2KSk7Ci0JCQl2LT50eXBlID0gVklEX1RZUEVfVFVORVI7Ci0JCQl2LT5jaGFubmVscyA9IDE7Ci0JCQl2LT5hdWRpb3MgPSAxOwotCQkJc3RyY3B5KHYtPm5hbWUsICJUeXBob29uIFJhZGlvIik7CisJCQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXR5cGhvb24iLCBzaXplb2YgKHYtPmRyaXZlcikpOworCQkJc3RybGNweSh2LT5jYXJkLCAiVHlwaG9vbiBSYWRpbyIsIHNpemVvZiAodi0+Y2FyZCkpOworCQkJc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJCQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKKwkJCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCiAJCQlyZXR1cm4gMDsKIAkJfQotCWNhc2UgVklESU9DR1RVTkVSOgorCQljYXNlIFZJRElPQ19HX1RVTkVSOgogCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZiAodi0+dHVuZXIpCS8qIE9ubHkgMSB0dW5lciAqLworCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl2LT5yYW5nZWxvdyA9IDg3NSAqIDE2MDA7Ci0JCQl2LT5yYW5nZWhpZ2ggPSAxMDgwICogMTYwMDsKLQkJCXYtPmZsYWdzID0gVklERU9fVFVORVJfTE9XOwotCQkJdi0+bW9kZSA9IFZJREVPX01PREVfQVVUTzsKLQkJCXYtPnNpZ25hbCA9IDB4RkZGRjsJLyogV2UgY2FuJ3QgZ2V0IHRoZSBzaWduYWwgc3RyZW5ndGggKi8KKworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKIAkJCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQl2LT5yYW5nZWxvdz0oODcuNSoxNjAwMCk7CisJCQl2LT5yYW5nZWhpZ2g9KDEwOCoxNjAwMCk7CisJCQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05POworCQkJdi0+Y2FwYWJpbGl0eT1WNEwyX1RVTkVSX0NBUF9MT1c7CisJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl2LT5zaWduYWwgPSAweEZGRkY7CS8qIFdlIGNhbid0IGdldCB0aGUgc2lnbmFsIHN0cmVuZ3RoICovCisKIAkJCXJldHVybiAwOwogCQl9Ci0JY2FzZSBWSURJT0NTVFVORVI6CisJCWNhc2UgVklESU9DX1NfVFVORVI6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciAqdiA9IGFyZzsKLQkJCWlmICh2LT50dW5lciAhPSAwKQorCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBPbmx5IDEgdHVuZXIgc28gbm8gc2V0dGluZyBuZWVkZWQgISAqLworCiAJCQlyZXR1cm4gMDsKIAkJfQotCWNhc2UgVklESU9DR0ZSRVE6Ci0JewotCQl1bnNpZ25lZCBsb25nICpmcmVxID0gYXJnOwotCQkqZnJlcSA9IHR5cGhvb24tPmN1cmZyZXE7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ1NGUkVROgotCXsKLQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJdHlwaG9vbi0+Y3VyZnJlcSA9ICpmcmVxOwotCQl0eXBob29uX3NldGZyZXEodHlwaG9vbiwgdHlwaG9vbi0+Y3VyZnJlcSk7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ0dBVURJTzoKKwkJY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCW1lbXNldCh2LCAwLCBzaXplb2YoKnYpKTsKLQkJCXYtPmZsYWdzIHw9IFZJREVPX0FVRElPX01VVEFCTEUgfCBWSURFT19BVURJT19WT0xVTUU7Ci0JCQl2LT5tb2RlIHw9IFZJREVPX1NPVU5EX01PTk87Ci0JCQl2LT52b2x1bWUgPSB0eXBob29uLT5jdXJ2b2w7Ci0JCQl2LT5zdGVwID0gMSA8PCAxNDsKLQkJCXN0cmNweSh2LT5uYW1lLCAiVHlwaG9vbiBSYWRpbyIpOworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQl0eXBob29uLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OworCQkJdHlwaG9vbl9zZXRmcmVxKHR5cGhvb24sIHR5cGhvb24tPmN1cmZyZXEpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQljYXNlIFZJRElPQ1NBVURJTzoKKwkJY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6CiAJCXsKLQkJCXN0cnVjdCB2aWRlb19hdWRpbyAqdiA9IGFyZzsKLQkJCWlmICh2LT5hdWRpbykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCWlmICh2LT5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpCi0JCQkJdHlwaG9vbl9tdXRlKHR5cGhvb24pOwotCQkJZWxzZQotCQkJCXR5cGhvb25fdW5tdXRlKHR5cGhvb24pOwotCQkJaWYgKHYtPmZsYWdzICYgVklERU9fQVVESU9fVk9MVU1FKQotCQkJCXR5cGhvb25fc2V0dm9sKHR5cGhvb24sIHYtPnZvbHVtZSk7CisJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7CisKKwkJCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCQkJZi0+ZnJlcXVlbmN5ID0gdHlwaG9vbi0+Y3VyZnJlcTsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCQljYXNlIFZJRElPQ19RVUVSWUNUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7CisJCQlpbnQgaTsKKworCQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKKwkJCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgeworCQkJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJCQlzaXplb2YoKnFjKSk7CisJCQkJCXJldHVybiAoMCk7CisJCQkJfQorCQkJfQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJY2FzZSBWSURJT0NfR19DVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsPSBhcmc7CisKKwkJCXN3aXRjaCAoY3RybC0+aWQpIHsKKwkJCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCQkJCWN0cmwtPnZhbHVlPXR5cGhvb24tPm11dGVkOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQljdHJsLT52YWx1ZT10eXBob29uLT5jdXJ2b2w7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQl0eXBob29uX211dGUodHlwaG9vbik7CisJCQkJCX0gZWxzZSB7CisJCQkJCQl0eXBob29uX3VubXV0ZSh0eXBob29uKTsKKwkJCQkJfQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQl0eXBob29uX3NldHZvbCh0eXBob29uLCBjdHJsLT52YWx1ZSk7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gdjRsX2NvbXBhdF90cmFuc2xhdGVfaW9jdGwoaW5vZGUsZmlsZSxjbWQsYXJnLAorCQkJCQkJCSAgdHlwaG9vbl9kb19pb2N0bCk7CiAJfQogfQogCkBAIC0yNzEsNyArMzMyLDcgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gIlR5cGhvb24gUmFkaW8iLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9UWVBIT09OLAorCS5oYXJkd2FyZQk9IDAsCiAJLmZvcHMgICAgICAgICAgID0gJnR5cGhvb25fZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggNTliODZhNi4uNjcxZmUxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTI0LDYgKzI0LDkgQEAKICAqCSAgICAgIC0gQWRkZWQgdW5tdXRlIGZ1bmN0aW9uCiAgKgkgICAgICAtIFJld29ya2VkIGlvY3RsIGZ1bmN0aW9ucwogICogMjAwMi0wNy0xNSAtIEZpeCBTdGVyZW8gdHlwbworICoKKyAqIDIwMDYtMDctMjQgLSBDb252ZXJ0ZWQgdG8gVjRMMiBBUEkKKyAqCQlieSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzIsOSArMzUsMzAgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXksIG1zbGVlcCAgICAgICAgICAgICAgICAgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcCAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cyAgICAgICAgICAgKi8KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgkvKiBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUICAgICAgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9LHsKKwkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCisJCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKKwkJLnN0ZXAgICAgICAgICAgPSA0MDk2LAorCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwl9Cit9OwogCiAjaWZuZGVmIENPTkZJR19SQURJT19aT0xUUklYX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1pPTFRSSVhfUE9SVCAtMQpAQCAtMjEzLDc4ICsyMzcsMTE2IEBACiAJc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IGRldi0+cHJpdjsKIAogCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NHQ0FQOgorCQljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgKnYgPSBhcmc7CisJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2ID0gYXJnOworCQkJbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKKwkJCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tem9sdHJpeCIsIHNpemVvZiAodi0+ZHJpdmVyKSk7CisJCQlzdHJsY3B5KHYtPmNhcmQsICJab2x0cml4IFJhZGlvIiwgc2l6ZW9mICh2LT5jYXJkKSk7CisJCQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKKwkJCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOworCQkJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisKKwkJCXJldHVybiAwOworCQl9CisJCWNhc2UgVklESU9DX0dfVFVORVI6CisJCXsKKwkJCXN0cnVjdCB2NGwyX3R1bmVyICp2ID0gYXJnOworCisJCQlpZiAodi0+aW5kZXggPiAwKQorCQkJCXJldHVybiAtRUlOVkFMOwogCiAJCQltZW1zZXQodiwwLHNpemVvZigqdikpOwotCQkJdi0+dHlwZSA9IFZJRF9UWVBFX1RVTkVSOwotCQkJdi0+Y2hhbm5lbHMgPSAxICsgem9sLT5zdGVyZW87Ci0JCQl2LT5hdWRpb3MgPSAxOwotCQkJc3RyY3B5KHYtPm5hbWUsICJab2x0cml4IFJhZGlvIik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnYgPSBhcmc7Ci0JCQlpZiAodi0+dHVuZXIpCi0JCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQlzdHJjcHkodi0+bmFtZSwgIkZNIik7Ci0JCQl2LT5yYW5nZWxvdyA9IChpbnQpICg4OC4wICogMTYwMDApOwotCQkJdi0+cmFuZ2VoaWdoID0gKGludCkgKDEwOC4wICogMTYwMDApOwotCQkJdi0+ZmxhZ3MgPSB6b2xfaXNfc3RlcmVvKHpvbCkKLQkJCQkJPyBWSURFT19UVU5FUl9TVEVSRU9fT04gOiAwOwotCQkJdi0+ZmxhZ3MgfD0gVklERU9fVFVORVJfTE9XOwotCQkJdi0+bW9kZSA9IFZJREVPX01PREVfQVVUTzsKLQkJCXYtPnNpZ25hbCA9IDB4RkZGRiAqIHpvbF9nZXRzaWdzdHIoem9sKTsKKwkJCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCisJCQl2LT5yYW5nZWxvdz0oODgqMTYwMDApOworCQkJdi0+cmFuZ2VoaWdoPSgxMDgqMTYwMDApOworCQkJdi0+cnhzdWJjaGFucyA9VjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJCQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKKwkJCWlmKHpvbF9pc19zdGVyZW8oem9sKSkKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwkJCWVsc2UKKwkJCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CisJCQl2LT5zaWduYWw9MHhGRkZGKnpvbF9nZXRzaWdzdHIoem9sKTsKKwogCQkJcmV0dXJuIDA7CiAJCX0KLQljYXNlIFZJRElPQ1NUVU5FUjoKKwkJY2FzZSBWSURJT0NfU19UVU5FUjoKIAkJewotCQkJc3RydWN0IHZpZGVvX3R1bmVyICp2ID0gYXJnOwotCQkJaWYgKHYtPnR1bmVyICE9IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBPbmx5IDEgdHVuZXIgc28gbm8gc2V0dGluZyBuZWVkZWQgISAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ0dGUkVROgotCXsKLQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJKmZyZXEgPSB6b2wtPmN1cmZyZXE7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ1NGUkVROgotCXsKLQkJdW5zaWduZWQgbG9uZyAqZnJlcSA9IGFyZzsKLQkJem9sLT5jdXJmcmVxID0gKmZyZXE7Ci0JCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnYgPSBhcmc7Ci0JCQltZW1zZXQodiwgMCwgc2l6ZW9mKCp2KSk7Ci0JCQl2LT5mbGFncyB8PSBWSURFT19BVURJT19NVVRBQkxFIHwgVklERU9fQVVESU9fVk9MVU1FOwotCQkJdi0+bW9kZSB8PSB6b2xfaXNfc3RlcmVvKHpvbCkKLQkJCQk/IFZJREVPX1NPVU5EX1NURVJFTyA6IFZJREVPX1NPVU5EX01PTk87Ci0JCQl2LT52b2x1bWUgPSB6b2wtPmN1cnZvbCAqIDQwOTY7Ci0JCQl2LT5zdGVwID0gNDA5NjsKLQkJCXN0cmNweSh2LT5uYW1lLCAiWm9sdHJpeCBSYWRpbyIpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NBVURJTzoKLQkJewotCQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2ID0gYXJnOwotCQkJaWYgKHYtPmF1ZGlvKQorCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYgPSBhcmc7CisKKwkJCWlmICh2LT5pbmRleCA+IDApCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCWlmICh2LT5mbGFncyAmIFZJREVPX0FVRElPX01VVEUpCi0JCQkJem9sX211dGUoem9sKTsKLQkJCWVsc2UgewotCQkJCXpvbF91bm11dGUoem9sKTsKLQkJCQl6b2xfc2V0dm9sKHpvbCwgdi0+dm9sdW1lIC8gNDA5Nik7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQl6b2wtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJCQl6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQljYXNlIFZJRElPQ19HX0ZSRVFVRU5DWToKKwkJeworCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOworCisJCQlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJCWYtPmZyZXF1ZW5jeSA9IHpvbC0+Y3VyZnJlcTsKKworCQkJcmV0dXJuIDA7CisJCX0KKwkJY2FzZSBWSURJT0NfUVVFUllDVFJMOgorCQl7CisJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOworCQkJaW50IGk7CisKKwkJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKKwkJCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKKwkJCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJCQlyZXR1cm4gKDApOworCQkJCX0KIAkJCX0KKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisJCWNhc2UgVklESU9DX0dfQ1RSTDoKKwkJeworCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybD0gYXJnOwogCisJCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQkJCQljdHJsLT52YWx1ZT16b2wtPm11dGVkOworCQkJCQlyZXR1cm4gKDApOworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkJCQljdHJsLT52YWx1ZT16b2wtPmN1cnZvbCAqIDQwOTY7CisJCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCQljYXNlIFZJRElPQ19TX0NUUkw6CisJCXsKKwkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmw9IGFyZzsKKworCQkJc3dpdGNoIChjdHJsLT5pZCkgeworCQkJCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJCQkJaWYgKGN0cmwtPnZhbHVlKSB7CisJCQkJCQl6b2xfbXV0ZSh6b2wpOworCQkJCQl9IGVsc2UgeworCQkJCQkJem9sX3VubXV0ZSh6b2wpOworCQkJCQkJem9sX3NldHZvbCh6b2wsem9sLT5jdXJ2b2wpOworCQkJCQl9CisJCQkJCXJldHVybiAoMCk7CisJCQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCQkJCXpvbF9zZXR2b2woem9sLGN0cmwtPnZhbHVlLzQwOTYpOworCQkJCQlyZXR1cm4gKDApOworCQkJfQorCQkJem9sLT5zdGVyZW8gPSAxOworCQkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworI2lmIDAKKy8qIEZJWE1FOiBJbXBsZW1lbnQgc3RlcmVvL21vbm8gc3dpdGNoIG9uIFY0TDIgKi8KIAkJCWlmICh2LT5tb2RlICYgVklERU9fU09VTkRfU1RFUkVPKSB7CiAJCQkJem9sLT5zdGVyZW8gPSAxOwogCQkJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKQEAgLTI5MywxMCArMzU1LDEzIEBACiAJCQkJem9sLT5zdGVyZW8gPSAwOwogCQkJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKIAkJCX0KLQkJCXJldHVybiAwOworI2VuZGlmCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7CisKKwkJZGVmYXVsdDoKKwkJCXJldHVybiB2NGxfY29tcGF0X3RyYW5zbGF0ZV9pb2N0bChpbm9kZSxmaWxlLGNtZCxhcmcsCisJCQkJCQkJICB6b2xfZG9faW9jdGwpOwogCX0KIH0KIApAQCAtMzIzLDcgKzM4OCw3IEBACiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICJab2x0cml4IFJhZGlvIFBsdXMiLAogCS50eXBlCQk9IFZJRF9UWVBFX1RVTkVSLAotCS5oYXJkd2FyZQk9IFZJRF9IQVJEV0FSRV9aT0xUUklYLAorCS5oYXJkd2FyZQk9IDAsCiAJLmZvcHMgICAgICAgICAgID0gJnpvbHRyaXhfZm9wcywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwppbmRleCA5NGQwNzhiLi5kMTE4M2M5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCkBAIC0xNiw2ICsxNiwzMjAgQEAKIAkgIFY0TCBkZXZpY2VzLgogCSAgSW4gZG91YnQsIHNheSBOLgogCitjb25maWcgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlib29sICJBdXRvc2VsZWN0IHBlcnRpbmVudCBlbmNvZGVycy9kZWNvZGVycyBhbmQgb3RoZXIgaGVscGVyIGNoaXBzIgorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIE1vc3QgdmlkZW8gY2FyZHMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBtb2R1bGVzIHRvIGVuY29kZSBvcgorCSAgZGVjb2RlIGF1ZGlvL3ZpZGVvIHN0YW5kYXJkcy4gVGhpcyBvcHRpb24gd2lsbCBhdXRvc2VsZWN0CisJICBhbGwgcGVydGluZW50IG1vZHVsZXMgdG8gZWFjaCBzZWxlY3RlZCB2aWRlbyBtb2R1bGUuCisKKwkgIFVuc2VsZWN0IHRoaXMgb25seSBpZiB5b3Uga25vdyBleGFjbHR5IHdoYXQgeW91IGFyZSBkb2luZywgc2luY2UKKwkgIGl0IG1heSBicmVhayBzdXBwb3J0IG9uIHNvbWUgYm9hcmRzLgorCisJICBJbiBkb3VidCwgc2F5IFkuCisKKyMKKyMgRW5jb2RlciAvIERlY29kZXIgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyMKKworbWVudSAiRW5jb2RlcnMvZGVjb2RlcnMgYW5kIG90aGVyIGhlbHBlciBjaGlwcyIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiAhVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKworY29tbWVudCAiQXVkaW8gRGVjb2RlcnMiCisKK2NvbmZpZyBWSURFT19UVkFVRElPCisJdHJpc3RhdGUgIlNpbXBsZSBhdWRpbyBkZWNvZGVyIGNoaXBzIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBzZXZlcmFsIGF1ZGlvIGRlY29kZXIgY2hpcHMgZm91bmQgb24gc29tZSBidDh4eCBib2FyZHM6CisJICBQaGlsaXBzOiB0ZGE5ODQwLCB0ZGE5ODczaCwgdGRhOTg3NGgvYSwgdGRhOTg1MCwgdGRhOTg1eCwgdGVhNjMwMCwKKwkJICAgdGVhNjMyMCwgdGVhNjQyMCwgdGRhODQyNSwgdGE4ODc0ei4KKwkgIE1pY3JvY2hpcDogcGljMTZjNTQgYmFzZWQgZGVzaWduIG9uIFByb1ZpZGVvIFBWOTUxIGJvYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0dmF1ZGlvLgorCitjb25maWcgVklERU9fVERBNzQzMgorCXRyaXN0YXRlICJQaGlsaXBzIFREQTc0MzIgYXVkaW8gcHJvY2Vzc29yIGNoaXAiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRkYTc0MzIgYXVkaW8gZGVjb2RlciBjaGlwIGZvdW5kIG9uIHNvbWUgYnQ4eHggYm9hcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0ZGE3NDMyLgorCitjb25maWcgVklERU9fVERBOTg0MAorCXRyaXN0YXRlICJQaGlsaXBzIFREQTk4NDAgYXVkaW8gcHJvY2Vzc29yIGNoaXAiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGRhOTg0MCBhdWRpbyBkZWNvZGVyIGNoaXAgZm91bmQgb24gc29tZSBab3JhbiBib2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkYTk4NDAuCisKK2NvbmZpZyBWSURFT19UREE5ODc1CisJdHJpc3RhdGUgIlBoaWxpcHMgVERBOTg3NSBhdWRpbyBwcm9jZXNzb3IgY2hpcCIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGRhOTg3NSBhdWRpbyBkZWNvZGVyIGNoaXAgZm91bmQgb24gc29tZSBidDh4eCBib2FyZHMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHRkYTk4NzUuCisKK2NvbmZpZyBWSURFT19URUE2NDE1QworCXRyaXN0YXRlICJQaGlsaXBzIFRFQTY0MTVDIGF1ZGlvIHByb2Nlc3NvciBjaGlwIgorCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRlYTY0MTVjIGF1ZGlvIGRlY29kZXIgY2hpcCBmb3VuZCBvbiBzb21lIGJ0OHh4IGJvYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGVhNjQxNWMuCisKK2NvbmZpZyBWSURFT19URUE2NDIwCisJdHJpc3RhdGUgIlBoaWxpcHMgVEVBNjQyMCBhdWRpbyBwcm9jZXNzb3IgY2hpcCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0ZWE2NDIwIGF1ZGlvIGRlY29kZXIgY2hpcCBmb3VuZCBvbiBzb21lIGJ0OHh4IGJvYXJkcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGVhNjQyMC4KKworY29uZmlnIFZJREVPX01TUDM0MDAKKwl0cmlzdGF0ZSAiTWljcm9uYXMgTVNQMzR4eCBhdWRpbyBkZWNvZGVycyIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIE1pY3JvbmFzIE1TUDM0eHggc2VyaWVzIG9mIGF1ZGlvIGRlY29kZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtc3AzNDAwLgorCitjb25maWcgVklERU9fQ1M1M0wzMkEKKwl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIENTNTNMMzJBIGF1ZGlvIEFEQyIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBDaXJydXMgTG9naWMgQ1M1M0wzMkEgbG93IHZvbHRhZ2UKKwkgIHN0ZXJlbyBBL0QgY29udmVydGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjczUzbDMyYS4KKworY29uZmlnIFZJREVPX1RMVjMyMEFJQzIzQgorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUTFYzMjBBSUMyM0IgYXVkaW8gY29kZWMiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgVGV4YXMgSW5zdHJ1bWVudHMgVExWMzIwQUlDMjNCIGF1ZGlvIGNvZGVjLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB0bHYzMjBhaWMyM2IuCisKK2NvbmZpZyBWSURFT19XTTg3NzUKKwl0cmlzdGF0ZSAiV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODc3NSBhdWRpbyBBREMgd2l0aCBpbnB1dCBtaXhlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004Nzc1IGhpZ2gKKwkgIHBlcmZvcm1hbmNlIHN0ZXJlbyBBL0QgQ29udmVydGVyIHdpdGggYSA0IGNoYW5uZWwgaW5wdXQgbWl4ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODc3NS4KKworY29uZmlnIFZJREVPX1dNODczOQorCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NzM5IHN0ZXJlbyBhdWRpbyBBREMiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgV29sZnNvbiBNaWNyb2VsZWN0cm9uaWNzIFdNODczOQorCSAgc3RlcmVvIEEvRCBDb252ZXJ0ZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODczOS4KKworY29tbWVudCAiTVBFRyB2aWRlbyBlbmNvZGVycyIKKworY29uZmlnIFZJREVPX0NYMjM0MVgKKwl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyMzQxeCBNUEVHIGVuY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBFWFBFUklNRU5UQUwKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgQ29uZXhhbnQgQ1gyMzQxNiBNUEVHIGVuY29kZXJzCisJICBhbmQgQ1gyMzQxNSBNUEVHIGVuY29kZXIvZGVjb2RlcnMuCisKKwkgIFRoaXMgbW9kdWxlIGN1cnJlbnRseSBzdXBwb3J0cyB0aGUgZW5jb2RpbmcgZnVuY3Rpb25zIG9ubHkuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4MjM0MXguCisKK3NvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL0tjb25maWciCisKK2NvbW1lbnQgIlZpZGVvIGVuY29kZXJzIgorCitjb25maWcgVklERU9fU0FBNzEyNworCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMjcvOSBkaWdpdGFsIHZpZGVvIGVuY29kZXJzIgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzEyNy85IGRpZ2l0YWwgdmlkZW8gZW5jb2RlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMjcuCisKK2NvbmZpZyBWSURFT19TQUE3MTg1CisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzE4NSB2aWRlbyBlbmNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxODUuCisKK2NvbmZpZyBWSURFT19BRFY3MTcwCisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkdjcxNzAuCisKK2NvbmZpZyBWSURFT19BRFY3MTc1CisJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIgZHJpdmVyCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFkdjcxNzUuCisKK2NvbW1lbnQgIlZpZGVvIGRlY29kZXJzIgorCitjb25maWcgVklERU9fQlQ4MTkKKwl0cmlzdGF0ZSAiQlQ4MTlBIFZpZGVvU3RyZWFtIERlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIEJUODE5QSB2aWRlbyBkZWNvZGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBidDgxOS4KKworY29uZmlnIFZJREVPX0JUODU2CisJdHJpc3RhdGUgIkJUODU2IFZpZGVvU3RyZWFtIERlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIEJUODU2IHZpZGVvIGRlY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGJ0ODU2LgorCitjb25maWcgVklERU9fQlQ4NjYKKwl0cmlzdGF0ZSAiQlQ4NjYgVmlkZW9TdHJlYW0gRGVjb2RlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgQlQ4NjYgdmlkZW8gZGVjb2Rlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYnQ4NjYuCisKK2NvbmZpZyBWSURFT19LUzAxMjcKKwl0cmlzdGF0ZSAiS1MwMTI3IHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIEtTMDEyNyB2aWRlbyBkZWNvZGVyLgorCisJICBUaGlzIGNoaXAgaXMgdXNlZCBvbiBBdmVyTWVkaWEgQVZTNkVZRVMgWm9yYW4tYmFzZWQgTUpQRUcKKwkgIGNhcmRzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBrczAxMjcuCisKK2NvbmZpZyBWSURFT19TQUE3MTEwCisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMQorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlcnMuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTAuCisKK2NvbmZpZyBWSURFT19TQUE3MTExCisJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMSB2aWRlbyBkZWNvZGVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTEgdmlkZW8gZGVjb2Rlci4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExMS4KKworY29uZmlnIFZJREVPX1NBQTcxMTQKKwl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTE0IHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTQgdmlkZW8gZGVjb2Rlci4gVGhpcyBkcml2ZXIKKwkgIGlzIHVzZWQgb25seSBvbiBab3JhbiBkcml2ZXIgYW5kIHNob3VsZCBiZSBtb3ZlZCBzb29uIHRvCisJICBTQUE3MTF4IG1vZHVsZS4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExNC4KKworY29uZmlnIFZJREVPX1NBQTcxMVgKKwl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycyIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE1LgorCitjb25maWcgVklERU9fU0FBNzE5MQorCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxOTEgdmlkZW8gZGVjb2RlciIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJLS0taGVscC0tLQorCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzE5MSB2aWRlbyBkZWNvZGVyLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTkxLgorCitjb25maWcgVklERU9fVFZQNTE1MAorCXRyaXN0YXRlICJUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTUwIHZpZGVvIGRlY29kZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQworCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBUZXhhcyBJbnN0cnVtZW50cyBUVlA1MTUwIHZpZGVvIGRlY29kZXIuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHR2cDUxNTAuCisKK2NvbmZpZyBWSURFT19WUFgzMjIwCisJdHJpc3RhdGUgInZweDMyMjBhLCB2cHgzMjE2YiAmIHZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIgorCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwktLS1oZWxwLS0tCisJICBTdXBwb3J0IGZvciBWUFgzMjJ4IHZpZGVvIGRlY29kZXJzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB2cHgzMjIwLgorCitjb21tZW50ICJWaWRlbyBpbXByb3ZlbWVudCBjaGlwcyIKKworY29uZmlnIFZJREVPX1VQRDY0MDMxQQorCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbgorCSAgdmlkZW8gY2hpcC4gSXQgaXMgbW9zdCBvZnRlbiBmb3VuZCBpbiBOVFNDIFRWIGNhcmRzIG1hZGUgZm9yCisJICBKYXBhbiBhbmQgaXMgdXNlZCB0byByZWR1Y2UgdGhlICdnaG9zdGluZycgZWZmZWN0IHRoYXQgY2FuCisJICBiZSBwcmVzZW50IGluIGFuYWxvZyBUViBicm9hZGNhc3RzLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1cGQ2NDAzMWEuCisKK2NvbmZpZyBWSURFT19VUEQ2NDA4MworCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiIKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAorCS0tLWhlbHAtLS0KKwkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0MKKwkgIHNlcGFyYXRpb24gdmlkZW8gY2hpcC4gSXQgaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mCisJICB0aGUgY29sb3JzIG9mIGEgY29tcG9zaXRlIHNpZ25hbC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXBkNjQwODMuCisKK2VuZG1lbnUgIyBlbmNvZGVyIC8gZGVjb2RlciBjaGlwcworCiBjb25maWcgVklERU9fVklWSQogCXRyaXN0YXRlICJWaXJ0dWFsIFZpZGVvIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgIVNQQVJDMzIgJiYgIVNQQVJDNjQKQEAgLTEzNSw3ICs0NDksNyBAQAogCiBjb25maWcgVklERU9fU0FBNTI0NkEKIAl0cmlzdGF0ZSAiU0FBNTI0NkEsIFNBQTUyODEgVGVsZXRleHQgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gSTJDICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19WNEwyCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgSTJDIGJ1cyBiYXNlZCB0ZWxldGV4dCB1c2luZyB0aGUgU0FBNTI0NkEgb3IgU0FBNTI4MQogCSAgY2hpcC4gVXNlZnVsIG9ubHkgaWYgeW91IGxpdmUgaW4gRXVyb3BlLgpAQCAtMTQ1LDcgKzQ1OSw3IEBACiAKIGNvbmZpZyBWSURFT19TQUE1MjQ5CiAJdHJpc3RhdGUgIlNBQTUyNDkgVGVsZXRleHQgcHJvY2Vzc29yIgotCWRlcGVuZHMgb24gVklERU9fREVWICYmIEkyQyAmJiBWSURFT19WNEwxCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIFZJREVPX1Y0TDIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBJMkMgYnVzIGJhc2VkIHRlbGV0ZXh0IHVzaW5nIHRoZSBTQUE1MjQ5IGNoaXAuIEF0IHRoZQogCSAgbW9tZW50IHRoaXMgaXMgb25seSB1c2VmdWwgb24gc29tZSBFdXJvcGVhbiBXaW5UViBjYXJkcy4KQEAgLTE2Miw4ICs0NzYsOSBAQAogCiBjb25maWcgVklERU9fVklOTwogCXRyaXN0YXRlICJTR0kgVmlubyBWaWRlbyBGb3IgTGludXggKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBJMkMgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIEkyQyAmJiBTR0lfSVAyMiAmJiBFWFBFUklNRU5UQUwgJiYgVklERU9fVjRMMgogCXNlbGVjdCBJMkNfQUxHT19TR0kKKwlzZWxlY3QgVklERU9fU0FBNzE5MSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gYnVpbGQgaW4gc3VwcG9ydCBmb3IgdGhlIFZpbm8gdmlkZW8gaW5wdXQgc3lzdGVtIGZvdW5kCiAJICBvbiBTR0kgSW5keSBtYWNoaW5lcy4KQEAgLTE3Niw2ICs0OTEsOSBAQAogCSAgZHJpdmVyIGZvciBQQ0kuICBUaGVyZSBpcyBhIHByb2R1Y3QgcGFnZSBhdAogCSAgPGh0dHA6Ly93d3cuc3RyYWRpcy5jb20vPi4KIAorY29uZmlnIFZJREVPX1pPUkFOX1pSMzYwNjAKKwl0cmlzdGF0ZQorCiBjb25maWcgVklERU9fWk9SQU4KIAl0cmlzdGF0ZSAiWm9yYW4gWlIzNjA1Ny8zNjA2NyBWaWRlbyBGb3IgTGludXgiCiAJZGVwZW5kcyBvbiBQQ0kgJiYgSTJDX0FMR09CSVQgJiYgVklERU9fVjRMMSAmJiAhUFBDNjQKQEAgLTE5MiwxMiArNTEwLDE4IEBACiBjb25maWcgVklERU9fWk9SQU5fQlVaCiAJdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJc2VsZWN0IFZJREVPX1NBQTcxMTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fU0FBNzE4NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19aT1JBTl9aUjM2MDYwCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIElvbWVnYSBCdXogTUpQRUcgY2FwdHVyZS9wbGF5YmFjayBjYXJkLgogCiBjb25maWcgVklERU9fWk9SQU5fREMxMAogCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMTAoKykgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJc2VsZWN0IFZJREVPX1NBQTcxMTAKKwlzZWxlY3QgVklERU9fQURWNzE3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19aT1JBTl9aUjM2MDYwCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIFBpbm5hY2xlL01pcm8gREMxMCgrKSBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCiAJICBjYXJkLgpAQCAtMjA1LDYgKzUyOSw4IEBACiBjb25maWcgVklERU9fWk9SQU5fREMzMAogCXRyaXN0YXRlICJQaW5uYWNsZS9NaXJvIERDMzAoKykgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJc2VsZWN0IFZJREVPX0FEVjcxNzUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fVlBYMzIyMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIFN1cHBvcnQgZm9yIHRoZSBQaW5uYWNsZS9NaXJvIERDMzAoKykgTUpQRUcgY2FwdHVyZS9wbGF5YmFjawogCSAgY2FyZC4gVGhpcyBhbHNvIHN1cHBvcnRzIHJlYWxseSBvbGQgREMxMCBjYXJkcyBiYXNlZCBvbiB0aGUKQEAgLTIxMyw2ICs1MzksOSBAQAogY29uZmlnIFZJREVPX1pPUkFOX0xNTDMzCiAJdHJpc3RhdGUgIkxpbnV4IE1lZGlhIExhYnMgTE1MMzMgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOCisJc2VsZWN0IFZJREVPX0JUODE5IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1pPUkFOX1pSMzYwNjAKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzMyBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCiAJICBjYXJkLgpAQCAtMjIwLDYgKzU0OSw5IEBACiBjb25maWcgVklERU9fWk9SQU5fTE1MMzNSMTAKIAl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fWk9SQU4KKwlzZWxlY3QgVklERU9fU0FBNzExNCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19BRFY3MTcwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1pPUkFOX1pSMzYwNjAKIAloZWxwCiAJICBzdXBwb3J0IGZvciB0aGUgTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBNSlBFRyBjYXB0dXJlL3BsYXliYWNrCiAJICBjYXJkLgpAQCAtMjI3LDYgKzU1OSw5IEBACiBjb25maWcgVklERU9fWk9SQU5fQVZTNkVZRVMKIAl0cmlzdGF0ZSAiQXZlck1lZGlhIDYgRXllcyBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gVklERU9fWk9SQU4gJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKKwlzZWxlY3QgVklERU9fQlQ4NTYgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fS1MwMTI3IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1pPUkFOX1pSMzYwNjAKIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgQXZlck1lZGlhIDYgRXllcyB2aWRlbyBzdXJ2ZWlsbGFuY2UgY2FyZC4KIApAQCAtMjYzLDYgKzU5OCwxMCBAQAogCWRlcGVuZHMgb24gUENJICYmIFZJREVPX1Y0TDEgJiYgSTJDCiAJc2VsZWN0IFZJREVPX1NBQTcxNDZfVlYKIAlzZWxlY3QgVklERU9fVFVORVIKKwlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19UREE5ODQwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1RFQTY0MTVDIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1RFQTY0MjAgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgJ011bHRpbWVkaWEgZVh0ZW5zaW9uIEJvYXJkJwogCSAgVFYgY2FyZCBieSBTaWVtZW5zLU5peGRvcmYuCkBAIC0yNzQsNyArNjEzLDcgQEAKIAl0cmlzdGF0ZSAiUGhpbGlwcy1TZW1pY29uZHVjdG9ycyAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uIGJvYXJkJyIKIAlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwxICYmIEkyQwogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCi0Jc2VsZWN0IFZJREVPX1Y0TDIKKwlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIHRoZSAnZHBjNzE0NiBkZW1vbnN0cmF0aW9uCiAJICBib2FyZCcgYnkgUGhpbGlwcy1TZW1pY29uZHVjdG9ycy4gSXQncyB0aGUgcmVmZXJlbmNlIGRlc2lnbgpAQCAtMjg3LDkgKzYyNiw4IEBACiAKIGNvbmZpZyBWSURFT19IRVhJVU1fT1JJT04KIAl0cmlzdGF0ZSAiSGV4aXVtIEhWLVBDSTYgYW5kIE9yaW9uIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwyICYmIEkyQwogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCi0Jc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEhWLVBDSTYgYW5kCiAJICBPcmlvbiBmcmFtZSBncmFiYmVyIGNhcmRzIGJ5IEhleGl1bS4KQEAgLTI5OSw5ICs2MzcsOCBAQAogCiBjb25maWcgVklERU9fSEVYSVVNX0dFTUlOSQogCXRyaXN0YXRlICJIZXhpdW0gR2VtaW5pIGZyYW1lIGdyYWJiZXIiCi0JZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFBDSSAmJiBWSURFT19WNEwyICYmIEkyQwogCXNlbGVjdCBWSURFT19TQUE3MTQ2X1ZWCi0Jc2VsZWN0IFZJREVPX1Y0TDIKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgSGV4aXVtIEdlbWluaSBmcmFtZQogCSAgZ3JhYmJlciBjYXJkIGJ5IEhleGl1bS4gUGxlYXNlIG5vdGUgdGhhdCB0aGUgR2VtaW5pIER1YWwKQEAgLTMyMCwxMjMgKzY1NywxNiBAQAogCSAgY2FtZXJhIG1vZHVsZS4KIAogY29uZmlnIFZJREVPX00zMlJfQVJfTTY0Mjc4Ci0JdHJpc3RhdGUgIlVzZSBDb2xvdXIgQVIgbW9kdWxlIE02NDI3OChWR0EpIgotCWRlcGVuZHMgb24gVklERU9fTTMyUl9BUiAmJiBQTEFUX00zMjcwMFVUCisJdHJpc3RhdGUgIkFSIGRldmljZSB3aXRoIGNvbG9yIG1vZHVsZSBNNjQyNzgoVkdBKSIKKwlkZXBlbmRzIG9uIFBMQVRfTTMyNzAwVVQKKwlzZWxlY3QgVklERU9fTTMyUl9BUgogCS0tLWhlbHAtLS0KLQkgIFNheSBZIGhlcmUgdG8gdXNlIHRoZSBSZW5lc2FzIE02NDI3OEUtODAwIGNhbWVyYSBtb2R1bGUsCi0JICB3aGljaCBzdXBwb3J0cyBWR0EoNjQweDQ4MCBwaXhjZWxzKSBzaXplIG9mIGltYWdlcy4KLQotIwotIyBFbmNvZGVyIC8gRGVjb2RlciBtb2R1bGUgY29uZmlndXJhdGlvbgotIwotCi1tZW51ICJFbmNvZGVycyBhbmQgRGVjb2RlcnMiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYKLQotY29uZmlnIFZJREVPX01TUDM0MDAKLQl0cmlzdGF0ZSAiTWljcm9uYXMgTVNQMzR4eCBhdWRpbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgTWljcm9uYXMgTVNQMzR4eCBzZXJpZXMgb2YgYXVkaW8gZGVjb2RlcnMuCisJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgUmVuZXNhcyBBUiAoQXJ0aWZpY2lhbAorCSAgUmV0aW5hKSB3aXRoIE02NDI3OEUtODAwIGNhbWVyYSBtb2R1bGUuCisJICBUaGlzIG1vZHVsZSBzdXBwb3J0cyBWR0EoNjQweDQ4MCBwaXhlbHMpIHJlc29sdXRpb25zLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBtc3AzNDAwLgotCi1jb25maWcgVklERU9fQ1M1M0wzMkEKLQl0cmlzdGF0ZSAiQ2lycnVzIExvZ2ljIENTNTNMMzJBIGF1ZGlvIEFEQyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIENpcnJ1cyBMb2dpYyBDUzUzTDMyQSBsb3cgdm9sdGFnZQotCSAgc3RlcmVvIEEvRCBjb252ZXJ0ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGNzNTNsMzJhLgotCi1jb25maWcgVklERU9fVExWMzIwQUlDMjNCCi0JdHJpc3RhdGUgIlRleGFzIEluc3RydW1lbnRzIFRMVjMyMEFJQzIzQiBhdWRpbyBjb2RlYyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFRleGFzIEluc3RydW1lbnRzIFRMVjMyMEFJQzIzQiBhdWRpbyBjb2RlYy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdGx2MzIwYWljMjNiLgotCi1jb25maWcgVklERU9fV004Nzc1Ci0JdHJpc3RhdGUgIldvbGZzb24gTWljcm9lbGVjdHJvbmljcyBXTTg3NzUgYXVkaW8gQURDIHdpdGggaW5wdXQgbWl4ZXIiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004Nzc1IGhpZ2gKLQkgIHBlcmZvcm1hbmNlIHN0ZXJlbyBBL0QgQ29udmVydGVyIHdpdGggYSA0IGNoYW5uZWwgaW5wdXQgbWl4ZXIuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHdtODc3NS4KLQotY29uZmlnIFZJREVPX1dNODczOQotCXRyaXN0YXRlICJXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NzM5IHN0ZXJlbyBhdWRpbyBBREMiCi0JZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBXb2xmc29uIE1pY3JvZWxlY3Ryb25pY3MgV004NzM5Ci0JICBzdGVyZW8gQS9EIENvbnZlcnRlci4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgd204NzM5LgotCi1jb25maWcgVklERU9fQ1gyMzQxWAotCXRyaXN0YXRlICJDb25leGFudCBDWDIzNDF4IE1QRUcgZW5jb2RlcnMiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBDb25leGFudCBDWDIzNDE2IE1QRUcgZW5jb2RlcnMKLQkgIGFuZCBDWDIzNDE1IE1QRUcgZW5jb2Rlci9kZWNvZGVycy4KLQotCSAgVGhpcyBtb2R1bGUgY3VycmVudGx5IHN1cHBvcnRzIHRoZSBlbmNvZGluZyBmdW5jdGlvbnMgb25seS4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgY3gyMzQxeC4KLQotc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvS2NvbmZpZyIKLQotY29uZmlnIFZJREVPX1NBQTcxMVgKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTEzLzQvNSB2aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMy80LzUgdmlkZW8gZGVjb2RlcnMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTcxMTUuCi0KLWNvbmZpZyBWSURFT19TQUE3MTI3Ci0JdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzEyNy85IGRpZ2l0YWwgdmlkZW8gZW5jb2RlcnMiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKLQktLS1oZWxwLS0tCi0JICBTdXBwb3J0IGZvciB0aGUgUGhpbGlwcyBTQUE3MTI3LzkgZGlnaXRhbCB2aWRlbyBlbmNvZGVycy4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzEyNy4KLQotY29uZmlnIFZJREVPX1VQRDY0MDMxQQotCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbiIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwMzFBIEdob3N0IFJlZHVjdGlvbgotCSAgdmlkZW8gY2hpcC4gSXQgaXMgbW9zdCBvZnRlbiBmb3VuZCBpbiBOVFNDIFRWIGNhcmRzIG1hZGUgZm9yCi0JICBKYXBhbiBhbmQgaXMgdXNlZCB0byByZWR1Y2UgdGhlICdnaG9zdGluZycgZWZmZWN0IHRoYXQgY2FuCi0JICBiZSBwcmVzZW50IGluIGFuYWxvZyBUViBicm9hZGNhc3RzLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1cGQ2NDAzMWEuCi0KLWNvbmZpZyBWSURFT19VUEQ2NDA4MwotCXRyaXN0YXRlICJORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0Mgc2VwYXJhdGlvbiIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDICYmIEVYUEVSSU1FTlRBTAotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBORUMgRWxlY3Ryb25pY3MgdVBENjQwODMgMy1EaW1lbnNpb25hbCBZL0MKLQkgIHNlcGFyYXRpb24gdmlkZW8gY2hpcC4gSXQgaXMgdXNlZCB0byBpbXByb3ZlIHRoZSBxdWFsaXR5IG9mCi0JICB0aGUgY29sb3JzIG9mIGEgY29tcG9zaXRlIHNpZ25hbC4KLQotCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCi0JICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdXBkNjQwODMuCi0KLWVuZG1lbnUgIyBlbmNvZGVyIC8gZGVjb2RlciBjaGlwcworCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFydi4KIAogIwogIyBVU0IgTXVsdGltZWRpYSBkZXZpY2UgY29uZmlndXJhdGlvbgpAQCAtNDQ1LDggKzY3NSw2IEBACiBtZW51ICJWNEwgVVNCIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IgJiYgVklERU9fREVWCiAKLXNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWciCi0KIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQppbmRleCBlODJlNTExLi5hZjU3YWJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKQEAgLTE3LDcgKzE3LDEwIEBACiBlbmRpZgogCiBvYmotJChDT05GSUdfVklERU9fQlQ4NDgpICs9IGJ0OHh4Lwotb2JqLSQoQ09ORklHX1ZJREVPX0JUODQ4KSArPSB0dmF1ZGlvLm8gdGRhNzQzMi5vIHRkYTk4NzUubyBpci1rYmQtaTJjLm8KK29iai0kKENPTkZJR19WSURFT19CVDg0OCkgKz0gaXIta2JkLWkyYy5vCitvYmotJChDT05GSUdfVklERU9fVFZBVURJTykgKz0gdHZhdWRpby5vCitvYmotJChDT05GSUdfVklERU9fVERBNzQzMikgKz0gdGRhNzQzMi5vCitvYmotJChDT05GSUdfVklERU9fVERBOTg3NSkgKz0gdGRhOTg3NS5vCiBvYmotJChDT05GSUdfU09VTkRfVFZNSVhFUikgKz0gdHZtaXhlci5vCiAKIG9iai0kKENPTkZJR19WSURFT19aUjM2MTIwKSArPSB6b3Jhbi5vCkBAIC0yNywxNyArMzAsMzIgQEAKIG9iai0kKENPTkZJR19WSURFT19DUUNBTSkgKz0gYy1xY2FtLm8KIG9iai0kKENPTkZJR19WSURFT19CV1FDQU0pICs9IGJ3LXFjYW0ubwogb2JqLSQoQ09ORklHX1ZJREVPX1c5OTY2KSArPSB3OTk2Ni5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fQlVaKSArPSBzYWE3MTExLm8gc2FhNzE4NS5vIHpyMzYwNjAubwotb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX0RDMTApICs9IHNhYTcxMTAubyBhZHY3MTc1Lm8genIzNjA2MC5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fREMzMCkgKz0gYWR2NzE3NS5vIHZweDMyMjAubyB6cjM2MDUwLm8gXAotCXpyMzYwMTYubwotb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX0xNTDMzKSArPSBidDgxOS5vIGJ0ODU2Lm8genIzNjA2MC5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fTE1MMzNSMTApICs9IHNhYTcxMTQubyBhZHY3MTcwLm8genIzNjA2MC5vCi1vYmotJChDT05GSUdfVklERU9fWk9SQU5fQVZTNkVZRVMpICs9IGJ0ODY2Lm8ga3MwMTI3Lm8genIzNjA2MC5vCisKK29iai0kKENPTkZJR19WSURFT19UREE5ODQwKSArPSB0ZGE5ODQwLm8KK29iai0kKENPTkZJR19WSURFT19URUE2NDE1QykgKz0gdGVhNjQxNWMubworb2JqLSQoQ09ORklHX1ZJREVPX1RFQTY0MjApICs9IHRlYTY0MjAubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTApICs9IHNhYTcxMTAubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTEpICs9IHNhYTcxMTEubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMTQpICs9IHNhYTcxMTQubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMVgpICs9IHNhYTcxMTUubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxMjcpICs9IHNhYTcxMjcubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxODUpICs9IHNhYTcxODUubworb2JqLSQoQ09ORklHX1ZJREVPX1NBQTcxOTEpICs9IHNhYTcxOTEubworb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxNzApICs9IGFkdjcxNzAubworb2JqLSQoQ09ORklHX1ZJREVPX0FEVjcxNzUpICs9IGFkdjcxNzUubworb2JqLSQoQ09ORklHX1ZJREVPX1ZQWDMyMjApICs9IHZweDMyMjAubworb2JqLSQoQ09ORklHX1ZJREVPX0JUODE5KSArPSBidDgxOS5vCitvYmotJChDT05GSUdfVklERU9fQlQ4NTYpICs9IGJ0ODU2Lm8KK29iai0kKENPTkZJR19WSURFT19CVDg2NikgKz0gYnQ4NjYubworb2JqLSQoQ09ORklHX1ZJREVPX0tTMDEyNykgKz0ga3MwMTI3Lm8KKwogb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOKSArPSB6cjM2MDY3Lm8gdmlkZW9jb2RlYy5vCitvYmotJChDT05GSUdfVklERU9fWk9SQU5fREMzMCkgKz0genIzNjA1MC5vIHpyMzYwMTYubworb2JqLSQoQ09ORklHX1ZJREVPX1pPUkFOX1pSMzYwNjApICs9IHpyMzYwNjAubworCiBvYmotJChDT05GSUdfVklERU9fUE1TKSArPSBwbXMubwogb2JqLSQoQ09ORklHX1ZJREVPX1BMQU5CKSArPSBwbGFuYi5vCi1vYmotJChDT05GSUdfVklERU9fVklOTykgKz0gdmluby5vIHNhYTcxOTEubyBpbmR5Y2FtLm8KK29iai0kKENPTkZJR19WSURFT19WSU5PKSArPSB2aW5vLm8gaW5keWNhbS5vCiBvYmotJChDT05GSUdfVklERU9fU1RSQURJUykgKz0gc3RyYWRpcy5vCiBvYmotJChDT05GSUdfVklERU9fQ1BJQSkgKz0gY3BpYS5vCiBvYmotJChDT05GSUdfVklERU9fQ1BJQV9QUCkgKz0gY3BpYV9wcC5vCkBAIC00Niw3ICs2NCw3IEBACiBvYmotJChDT05GSUdfVklERU9fU0FBNzEzNCkgKz0gaXIta2JkLWkyYy5vIHNhYTcxMzQvCiBvYmotJChDT05GSUdfVklERU9fQ1g4OCkgKz0gY3g4OC8KIG9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IGVtMjh4eC8KLW9iai0kKENPTkZJR19WSURFT19FTTI4WFgpICs9IHR2cDUxNTAubworb2JqLSQoQ09ORklHX1ZJREVPX1RWUDUxNTApICs9IHR2cDUxNTAubwogb2JqLSQoQ09ORklHX1ZJREVPX1BWUlVTQjIpICs9IHB2cnVzYjIvCiBvYmotJChDT05GSUdfVklERU9fTVNQMzQwMCkgKz0gbXNwMzQwMC5vCiBvYmotJChDT05GSUdfVklERU9fQ1M1M0wzMkEpICs9IGNzNTNsMzJhLm8KQEAgLTU1LDEwICs3MywxMCBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1dNODczOSkgKz0gd204NzM5Lm8KIG9iai0kKENPTkZJR19WSURFT19PVkNBTUNISVApICs9IG92Y2FtY2hpcC8KIG9iai0kKENPTkZJR19WSURFT19DUElBMikgKz0gY3BpYTIvCi1vYmotJChDT05GSUdfVklERU9fTVhCKSArPSBzYWE3MTExLm8gdGRhOTg0MC5vIHRlYTY0MTVjLm8gdGVhNjQyMC5vIG14Yi5vCitvYmotJChDT05GSUdfVklERU9fTVhCKSArPSBteGIubwogb2JqLSQoQ09ORklHX1ZJREVPX0hFWElVTV9PUklPTikgKz0gaGV4aXVtX29yaW9uLm8KIG9iai0kKENPTkZJR19WSURFT19IRVhJVU1fR0VNSU5JKSArPSBoZXhpdW1fZ2VtaW5pLm8KLW9iai0kKENPTkZJR19WSURFT19EUEMpICs9IHNhYTcxMTEubyBkcGM3MTQ2Lm8KK29iai0kKENPTkZJR19WSURFT19EUEMpICs9IGRwYzcxNDYubwogb2JqLSQoQ09ORklHX1RVTkVSXzMwMzYpICs9IHR1bmVyLTMwMzYubwogCiBvYmotJChDT05GSUdfVklERU9fVFVORVIpICs9IHR1bmVyLm8KQEAgLTcwLDggKzg4LDYgQEAKIG9iai0kKENPTkZJR19WSURFT19NMzJSX0FSX002NDI3OCkgKz0gYXJ2Lm8KIAogb2JqLSQoQ09ORklHX1ZJREVPX0NYMjU4NDApICs9IGN4MjU4NDAvCi1vYmotJChDT05GSUdfVklERU9fU0FBNzExWCkgKz0gc2FhNzExNS5vCi1vYmotJChDT05GSUdfVklERU9fU0FBNzEyNykgKz0gc2FhNzEyNy5vCiBvYmotJChDT05GSUdfVklERU9fVVBENjQwMzFBKSArPSB1cGQ2NDAzMWEubwogb2JqLSQoQ09ORklHX1ZJREVPX1VQRDY0MDgzKSArPSB1cGQ2NDA4My5vCiBvYmotJChDT05GSUdfVklERU9fQ1gyMzQxWCkgKz0gY3gyMzQxeC5vCkBAIC05Niw0ICsxMTIsMyBAQAogCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSArPSAtRENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKaW5kZXggMDVlNDJiYi4uNzcyZmQ1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtNjUsNyArNjUsNyBAQAogc3RydWN0IGJ0ODY2IHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjOwogCWludCBhZGRyOwotCXVuc2lnbmVkIGNoYXIgcmVnWzEyOF07CisJdW5zaWduZWQgY2hhciByZWdbMjU2XTsKIAogCWludCBub3JtOwogCWludCBlbmFibGU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggY2RjZjU1Ni4uNThlYWU4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZwpAQCAtOCw3ICs4LDEwIEBACiAJc2VsZWN0IFZJREVPX0lSCiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCi0Jc2VsZWN0IFZJREVPX01TUDM0MDAKKwlzZWxlY3QgVklERU9fTVNQMzQwMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19UVkFVRElPIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1REQTc0MzIgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fVERBOTg3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODQ4IGJhc2VkIGZyYW1lIGdyYWJiZXIvb3ZlcmxheSBib2FyZHMuIFRoaXMgaW5jbHVkZXMKIAkgIHRoZSBNaXJvLCBIYXVwcGF1Z2UgYW5kIFNUQiBib2FyZHMuIFBsZWFzZSByZWFkIHRoZSBtYXRlcmlhbCBpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwppbmRleCBkZTE0ODE4Li5kMjNhNDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYwpAQCAtNDk5MSw3ICs0OTkxLDcgQEAKIAlpbnQgcGNpcGNpX2ZhaWwgPSAwOwogCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBOVUxMOwogCi0JaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfRkFJTCkKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTCkpIAkvKiBzaG91bGQgY2hlY2sgaWYgdGFyZ2V0IGlzIEFHUCAqLwogCQlwY2lwY2lfZmFpbCA9IDE7CiAJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiAoUENJUENJX1RSSVRPTnxQQ0lQQ0lfTkFUT01BfFBDSVBDSV9WSUFFVEJGKSkKIAkJdHJpdG9uMSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggMjBkZmY3Yy4uNTBkZGU4MjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKQEAgLTI0MzEsNiArMjQzMSwxNCBAQAogCQlmYnVmLT5ieXRlc3BlcmxpbmUgID0gYnR2LT5mYnVmLmZtdC5ieXRlc3BlcmxpbmU7CiAJCWlmIChmaC0+b3ZmbXQpCiAJCQlmYnVmLT5kZXB0aCA9IGZoLT5vdmZtdC0+ZGVwdGg7CisJCWVsc2UgeworCQkJaWYgKGZidWYtPndpZHRoKQorCQkJCWZidWYtPmRlcHRoICAgPSAoKGZidWYtPmJ5dGVzcGVybGluZTw8MykKKwkJCQkJCSAgKyAoZmJ1Zi0+d2lkdGgtMSkgKQorCQkJCQkJICAvZmJ1Zi0+d2lkdGg7CisJCQllbHNlCisJCQkJZmJ1Zi0+ZGVwdGggPSAwOworCQl9CiAJCXJldHVybiAwOwogCX0KIAljYXNlIFZJRElPQ1NGQlVGOgpAQCAtNDE4Niw2ICs0MTk0LDcgQEAKIAlyZXR1cm47CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgYnR0dl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKQEAgLTQyNjYsNiArNDI3NSw3IEBACiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnR2LT5zX2xvY2ssZmxhZ3MpOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBidHR2X3BjaV90YmxbXSA9IHsKIAl7UENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUsIFBDSV9ERVZJQ0VfSURfQlQ4NDgsCkBAIC00Mjg2LDggKzQyOTYsMTAgQEAKIAkuaWRfdGFibGUgPSBidHR2X3BjaV90YmwsCiAJLnByb2JlICAgID0gYnR0dl9wcm9iZSwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChidHR2X3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgID0gYnR0dl9zdXNwZW5kLAogCS5yZXN1bWUgICA9IGJ0dHZfcmVzdW1lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGJ0dHZfaW5pdF9tb2R1bGUodm9pZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwppbmRleCA0YjU2MmIzLi43MGRlNmM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCkBAIC04LDYgKzgsOSBAQAogCQkJICAgJiBNYXJjdXMgTWV0emxlciAobW9jbUB0aHAudW5pLWtvZWxuLmRlKQogICAgIChjKSAxOTk5LTIwMDMgR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPgogCisgICAgKGMpIDIwMDUgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisJLSBNdWx0aXR1bmVyIHN1cHBvcnQgYW5kIGkyYyBhZGRyZXNzIGJpbmRpbmcKKwogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgpAQCAtNDUsMTAgKzQ4LDE4IEBACiBzdGF0aWMgaW50IGkyY19odzsKIHN0YXRpYyBpbnQgaTJjX3NjYW47CiBtb2R1bGVfcGFyYW0oaTJjX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpMmNfaHcsImNvbmZpZ3VyZSBpMmMgZGVidWcgbGV2ZWwiKTsKIG1vZHVsZV9wYXJhbShpMmNfaHcsICAgIGludCwgMDQ0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGkyY19odywiZm9yY2UgdXNlIG9mIGhhcmR3YXJlIGkyYyBzdXBwb3J0LCAiCisJCQkiaW5zdGVhZCBvZiBzb2Z0d2FyZSBiaXRiYW5nIik7CiBtb2R1bGVfcGFyYW0oaTJjX3NjYW4sICBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpMmNfc2Nhbiwic2NhbiBpMmMgYnVzIGF0IGluc21vZCB0aW1lIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX3VkZWxheSA9IDU7Cittb2R1bGVfcGFyYW0oaTJjX3VkZWxheSwgaW50LCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX3VkZWxheSwic29mdCBpMmMgZGVsYXkgYXQgaW5zbW9kIHRpbWUsIGluIHVzZWNzICIKKwkJIihzaG91bGQgYmUgNSBvciBoaWdoZXIpLiBMb3dlciB2YWx1ZSBtZWFucyBoaWdoZXIgYnVzIHNwZWVkLiIpOworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogSTJDIGZ1bmN0aW9ucyAtIGJpdGJhbmdpbmcgYWRhcHRlciAoc29mdHdhcmUgaTJjKSAgICAgICAgICAgICAgICAgICAgICAgKi8KIApAQCAtMTAwLDcgKzExMSw2IEBACiAJLmdldHNkYSAgPSBidHR2X2JpdF9nZXRzZGEsCiAJLmdldHNjbCAgPSBidHR2X2JpdF9nZXRzY2wsCiAJLnVkZWxheSAgPSAxNiwKLQkubWRlbGF5ICA9IDEwLAogCS50aW1lb3V0ID0gMjAwLAogfTsKIApAQCAtNDI2LDYgKzQzNiwxMSBAQAogCQkgICAgICAgc2l6ZW9mKGJ0dHZfaTJjX2FkYXBfaHdfdGVtcGxhdGUpKTsKIAl9IGVsc2UgewogCQkvKiBidDg0OCAqLworCS8qIFByZXZlbnRzIHVzYWdlIG9mIGludmFsaWQgZGVsYXkgdmFsdWVzICovCisJCWlmIChpMmNfdWRlbGF5PDUpCisJCQlpMmNfdWRlbGF5PTU7CisJCWJ0dHZfaTJjX2FsZ29fYml0X3RlbXBsYXRlLnVkZWxheT1pMmNfdWRlbGF5OworCiAJCW1lbWNweSgmYnR2LT5jLmkyY19hZGFwLCAmYnR0dl9pMmNfYWRhcF9zd190ZW1wbGF0ZSwKIAkJICAgICAgIHNpemVvZihidHR2X2kyY19hZGFwX3N3X3RlbXBsYXRlKSk7CiAJCW1lbWNweSgmYnR2LT5pMmNfYWxnbywgJmJ0dHZfaTJjX2FsZ29fYml0X3RlbXBsYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jb21wYXRfaW9jdGwzMi5jCmluZGV4IGI2OWVlMTEuLmQ4MmE0ODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY29tcGF0X2lvY3RsMzIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NvbXBhdF9pb2N0bDMyLmMKQEAgLTU4LDYgKzU4LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAorCiBzdHJ1Y3QgdmlkZW9fYnVmZmVyMzIgewogCWNvbXBhdF9jYWRkcl90IGJhc2U7CiAJY29tcGF0X2ludF90IGhlaWdodCwgd2lkdGgsIGRlcHRoLCBieXRlc3BlcmxpbmU7CkBAIC02MTgsNiArNjE5LDcgQEAKIAkJc3RydWN0IHZpZGVvX2J1ZmZlciB2YjsKIAkJc3RydWN0IHZpZGVvX3dpbmRvdyB2dzsKIAkJc3RydWN0IHZpZGVvX2NvZGUgdmM7CisJCXN0cnVjdCB2aWRlb19hdWRpbyB2YTsKICNlbmRpZgogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgdjJmOwogCQlzdHJ1Y3QgdjRsMl9idWZmZXIgdjJiOwpAQCAtNjM1LDMxICs2MzcsMzEgQEAKIAkvKiBGaXJzdCwgY29udmVydCB0aGUgY29tbWFuZC4gKi8KIAlzd2l0Y2goY21kKSB7CiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NHVFVORVIzMjogY21kID0gVklESU9DR1RVTkVSOyBicmVhazsKLQljYXNlIFZJRElPQ1NUVU5FUjMyOiBjbWQgPSBWSURJT0NTVFVORVI7IGJyZWFrOwotCWNhc2UgVklESU9DR1dJTjMyOiBjbWQgPSBWSURJT0NHV0lOOyBicmVhazsKLQljYXNlIFZJRElPQ0dGQlVGMzI6IGNtZCA9IFZJRElPQ0dGQlVGOyBicmVhazsKLQljYXNlIFZJRElPQ1NGQlVGMzI6IGNtZCA9IFZJRElPQ1NGQlVGOyBicmVhazsKLQljYXNlIFZJRElPQ0dGUkVRMzI6IGNtZCA9IFZJRElPQ0dGUkVROyBicmVhazsKLQljYXNlIFZJRElPQ1NGUkVRMzI6IGNtZCA9IFZJRElPQ1NGUkVROyBicmVhazsKLQljYXNlIFZJRElPQ1NNSUNST0NPREUzMjogY21kID0gVklESU9DU01JQ1JPQ09ERTsgYnJlYWs7CisJY2FzZSBWSURJT0NHVFVORVIzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ0dUVU5FUjsgYnJlYWs7CisJY2FzZSBWSURJT0NTVFVORVIzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ1NUVU5FUjsgYnJlYWs7CisJY2FzZSBWSURJT0NHV0lOMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NHV0lOOyBicmVhazsKKwljYXNlIFZJRElPQ0dGQlVGMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NHRkJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NTRkJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DU0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DR0ZSRVEzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ0dGUkVROyBicmVhazsKKwljYXNlIFZJRElPQ1NGUkVRMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NTRlJFUTsgYnJlYWs7CisJY2FzZSBWSURJT0NTTUlDUk9DT0RFMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NTTUlDUk9DT0RFOyBicmVhazsKICNlbmRpZgotCWNhc2UgVklESU9DX0dfRk1UMzI6IGNtZCA9IFZJRElPQ19HX0ZNVDsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfU19GTVQzMjogY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKLQljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiBjbWQgPSBWSURJT0NfUVVFUllCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DX1FCVUYzMjogY21kID0gVklESU9DX1FCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DX0RRQlVGMzI6IGNtZCA9IFZJRElPQ19EUUJVRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfU1RSRUFNT04zMjogY21kID0gVklESU9DX1NUUkVBTU9OOyBicmVhazsKLQljYXNlIFZJRElPQ19TVFJFQU1PRkYzMjogY21kID0gVklESU9DX1NUUkVBTU9GRjsgYnJlYWs7Ci0JY2FzZSBWSURJT0NfR19GQlVGMzI6IGNtZCA9IFZJRElPQ19HX0ZCVUY7IGJyZWFrOwotCWNhc2UgVklESU9DX1NfRkJVRjMyOiBjbWQgPSBWSURJT0NfU19GQlVGOyBicmVhazsKLQljYXNlIFZJRElPQ19PVkVSTEFZMzI6IGNtZCA9IFZJRElPQ19PVkVSTEFZOyBicmVhazsKKwljYXNlIFZJRElPQ19HX0ZNVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX0dfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19TX0ZNVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX1NfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19RVUVSWUJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DX1FVRVJZQlVGOyBicmVhazsKKwljYXNlIFZJRElPQ19RQlVGMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfUUJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfRFFCVUYzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19EUUJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfU1RSRUFNT04zMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19TVFJFQU1PTjsgYnJlYWs7CisJY2FzZSBWSURJT0NfU1RSRUFNT0ZGMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfU1RSRUFNT0ZGOyBicmVhazsKKwljYXNlIFZJRElPQ19HX0ZCVUYzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19HX0ZCVUY7IGJyZWFrOworCWNhc2UgVklESU9DX1NfRkJVRjMyOiByZWFsY21kID0gY21kID0gVklESU9DX1NfRkJVRjsgYnJlYWs7CisJY2FzZSBWSURJT0NfT1ZFUkxBWTMyOiByZWFsY21kID0gY21kID0gVklESU9DX09WRVJMQVk7IGJyZWFrOwogCWNhc2UgVklESU9DX0VOVU1TVEQzMjogcmVhbGNtZCA9IFZJRElPQ19FTlVNU1REOyBicmVhazsKIAljYXNlIFZJRElPQ19FTlVNSU5QVVQzMjogcmVhbGNtZCA9IFZJRElPQ19FTlVNSU5QVVQ7IGJyZWFrOwotCWNhc2UgVklESU9DX1NfQ1RSTDMyOiBjbWQgPSBWSURJT0NfU19DVFJMOyBicmVhazsKLQljYXNlIFZJRElPQ19HX0lOUFVUMzI6IGNtZCA9IFZJRElPQ19HX0lOUFVUOyBicmVhazsKLQljYXNlIFZJRElPQ19TX0lOUFVUMzI6IGNtZCA9IFZJRElPQ19TX0lOUFVUOyBicmVhazsKLQljYXNlIFZJRElPQ19UUllfRk1UMzI6IGNtZCA9IFZJRElPQ19UUllfRk1UOyBicmVhazsKKwljYXNlIFZJRElPQ19TX0NUUkwzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19TX0NUUkw7IGJyZWFrOworCWNhc2UgVklESU9DX0dfSU5QVVQzMjogcmVhbGNtZCA9IGNtZCA9IFZJRElPQ19HX0lOUFVUOyBicmVhazsKKwljYXNlIFZJRElPQ19TX0lOUFVUMzI6IHJlYWxjbWQgPSBjbWQgPSBWSURJT0NfU19JTlBVVDsgYnJlYWs7CisJY2FzZSBWSURJT0NfVFJZX0ZNVDMyOiByZWFsY21kID0gY21kID0gVklESU9DX1RSWV9GTVQ7IGJyZWFrOwogCX07CiAKIAlzd2l0Y2goY21kKSB7CkBAIC02NzYsNiArNjc4LDcgQEAKIAkJY29tcGF0aWJsZV9hcmcgPSAwOwogCQlicmVhazsKIAorCiAJY2FzZSBWSURJT0NTRlJFUToKICNlbmRpZgogCWNhc2UgVklESU9DX1NfSU5QVVQ6CkBAIC02ODMsNyArNjg2LDcgQEAKIAljYXNlIFZJRElPQ19TVFJFQU1PTjoKIAljYXNlIFZJRElPQ19TVFJFQU1PRkY6CiAJCWVyciA9IGdldF91c2VyKGthcmcudngsICh1MzIgX191c2VyICopdXApOwotCQljb21wYXRpYmxlX2FyZyA9IDA7CisJCWNvbXBhdGlibGVfYXJnID0gMTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19TX0ZCVUY6CkBAIC03MzksNiArNzQyLDcgQEAKIAljYXNlIFZJRElPQ19HX0ZCVUY6CiAJY2FzZSBWSURJT0NfR19JTlBVVDoKIAkJY29tcGF0aWJsZV9hcmcgPSAwOworCQlicmVhazsKICNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKIAljYXNlIFZJRElPQ1NNSUNST0NPREU6CiAJCWVyciA9IG1pY3JvY29kZTMyKCZrYXJnLnZjLCB1cCk7CkBAIC03NTUsNyArNzU5LDcgQEAKIAkJbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwogCiAJCXNldF9mcyhLRVJORUxfRFMpOwotCQllcnIgPSBuYXRpdmVfaW9jdGwoZmlsZSwgcmVhbGNtZCwgKHVuc2lnbmVkIGxvbmcpJmthcmcpOworCQllcnIgPSBuYXRpdmVfaW9jdGwoZmlsZSwgcmVhbGNtZCwgKHVuc2lnbmVkIGxvbmcpICZrYXJnKTsKIAkJc2V0X2ZzKG9sZF9mcyk7CiAJfQogCWlmKGVyciA9PSAwKSB7CkBAIC03NzIsNiArNzc2LDcgQEAKIAkJY2FzZSBWSURJT0NHRkJVRjoKIAkJCWVyciA9IHB1dF92aWRlb19idWZmZXIzMigma2FyZy52YiwgdXApOwogCQkJYnJlYWs7CisKICNlbmRpZgogCQljYXNlIFZJRElPQ19HX0ZCVUY6CiAJCQllcnIgPSBwdXRfdjRsMl9mcmFtZWJ1ZmZlcjMyKCZrYXJnLnYyZmIsIHVwKTsKQEAgLTg0MSwxMCArODQ2LDE0IEBACiAJY2FzZSBWSURJT0NTRkJVRjMyOgogCWNhc2UgVklESU9DR0ZSRVEzMjoKIAljYXNlIFZJRElPQ1NGUkVRMzI6CisJY2FzZSBWSURJT0NHQVVESU86CisJY2FzZSBWSURJT0NTQVVESU86CiAjZW5kaWYKIAljYXNlIFZJRElPQ19RVUVSWUNBUDoKIAljYXNlIFZJRElPQ19FTlVNX0ZNVDoKIAljYXNlIFZJRElPQ19HX0ZNVDMyOgorCWNhc2UgVklESU9DX0NST1BDQVA6CisJY2FzZSBWSURJT0NfU19DUk9QOgogCWNhc2UgVklESU9DX1NfRk1UMzI6CiAJY2FzZSBWSURJT0NfUkVRQlVGUzoKIAljYXNlIFZJRElPQ19RVUVSWUJVRjMyOgpAQCAtODgyLDggKzg5MSw2IEBACiAJY2FzZSBWSURJT0NTUElDVDoKIAljYXNlIFZJRElPQ0NBUFRVUkU6CiAJY2FzZSBWSURJT0NLRVk6Ci0JY2FzZSBWSURJT0NHQVVESU86Ci0JY2FzZSBWSURJT0NTQVVESU86CiAJY2FzZSBWSURJT0NTWU5DOgogCWNhc2UgVklESU9DTUNBUFRVUkU6CiAJY2FzZSBWSURJT0NHTUJVRjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTIuaAppbmRleCBjNWVjYjJiLi44ZDJkZmMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMi5oCkBAIC01MCwxMCArNTAsNiBAQAogLyoqKgogICogSW1hZ2UgZGVmaW5lcwogICoqKi8KLSNpZm5kZWYgdHJ1ZQotI2RlZmluZSB0cnVlIDEKLSNkZWZpbmUgZmFsc2UgMAotI2VuZGlmCiAKIC8qICBNaXNjIGNvbnN0YW50cyAqLwogI2RlZmluZSBBTExPV19DT1JSVVBUIDAJCS8qIENhdXNlcyBjb2xsYXRlciB0byBkaXNjYXJkIGNoZWNrc3VtICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCmluZGV4IDY1ZjAwZmMuLjY1N2UwYjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzQxeC5jCkBAIC02OTEsNyArNjkxLDcgQEAKIAkudmlkZW9fbHVtYV9zcGF0aWFsX2ZpbHRlcl90eXBlID0gVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiwKIAkudmlkZW9fY2hyb21hX3NwYXRpYWxfZmlsdGVyX3R5cGUgPSBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV8xRF9IT1IsCiAJLnZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlID0gVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREVfTUFOVUFMLAotCS52aWRlb190ZW1wb3JhbF9maWx0ZXIgPSAwLAorCS52aWRlb190ZW1wb3JhbF9maWx0ZXIgPSA4LAogCS52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUgPSBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGLAogCS52aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfdG9wID0gMjU1LAogCS52aWRlb19sdW1hX21lZGlhbl9maWx0ZXJfYm90dG9tID0gMCwKQEAgLTczMSw2ICs3MzEsNyBAQAogCX07CiAKIAlpbnQgZXJyID0gMDsKKwl1MTYgdGVtcG9yYWwgPSBuZXctPnZpZGVvX3RlbXBvcmFsX2ZpbHRlcjsKIAogCWN4MjM0MXhfYXBpKHByaXYsIGZ1bmMsIENYMjM0MVhfRU5DX1NFVF9PVVRQVVRfUE9SVCwgMiwgbmV3LT5wb3J0LCAwKTsKIApAQCAtNzQxLDYgKzc0Miw3IEBACiAKIAlpZiAob2xkID09IE5VTEwgfHwgb2xkLT53aWR0aCAhPSBuZXctPndpZHRoIHx8IG9sZC0+aGVpZ2h0ICE9IG5ldy0+aGVpZ2h0IHx8CiAJCQlvbGQtPnZpZGVvX2VuY29kaW5nICE9IG5ldy0+dmlkZW9fZW5jb2RpbmcpIHsKKwkJaW50IGlzX3NjYWxpbmc7CiAJCXUxNiB3ID0gbmV3LT53aWR0aDsKIAkJdTE2IGggPSBuZXctPmhlaWdodDsKIApAQCAtNzUwLDYgKzc1MiwyMCBAQAogCQl9CiAJCWVyciA9IGN4MjM0MXhfYXBpKHByaXYsIGZ1bmMsIENYMjM0MVhfRU5DX1NFVF9GUkFNRV9TSVpFLCAyLCBoLCB3KTsKIAkJaWYgKGVycikgcmV0dXJuIGVycjsKKworCQkvKiBBZGp1c3QgdGVtcG9yYWwgZmlsdGVyIGlmIG5lY2Vzc2FyeS4gVGhlIHByb2JsZW0gd2l0aCB0aGUgdGVtcG9yYWwKKwkJICAgZmlsdGVyIGlzIHRoYXQgaXQgd29ya3Mgd2VsbCB3aXRoIGZ1bGwgcmVzb2x1dGlvbiBjYXB0dXJpbmcsIGJ1dAorCQkgICBub3Qgd2hlbiB0aGUgY2FwdHVyZSB3aW5kb3cgaXMgc2NhbGVkICh0aGUgZmlsdGVyIGludHJvZHVjZXMKKwkJICAgYSBnaG9zdGluZyBlZmZlY3QpLiBTbyBpZiB0aGUgY2FwdHVyZSB3aW5kb3cgY2hhbmdlZCwgYW5kIHRoZXJlIGlzCisJCSAgIG5vIHVwZGF0ZWQgZmlsdGVyIHZhbHVlLCB0aGVuIHRoZSBmaWx0ZXIgaXMgc2V0IGRlcGVuZGluZyBvbiB3aGV0aGVyCisJCSAgIHRoZSBuZXcgd2luZG93IGlzIGZ1bGwgcmVzb2x1dGlvbiBvciBub3QuCisKKwkJICAgRm9yIGZ1bGwgcmVzb2x1dGlvbiBhIHNldHRpbmcgb2YgOCByZWFsbHkgaW1wcm92ZXMgdGhlIHZpZGVvCisJCSAgIHF1YWxpdHksIGVzcGVjaWFsbHkgaWYgdGhlIG9yaWdpbmFsIHZpZGVvIHF1YWxpdHkgaXMgc3Vib3B0aW1hbC4gKi8KKwkJaXNfc2NhbGluZyA9IG5ldy0+d2lkdGggIT0gNzIwIHx8IG5ldy0+aGVpZ2h0ICE9IChuZXctPmlzXzUwaHogPyA1NzYgOiA0ODApOworCQlpZiAob2xkICYmIG9sZC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyID09IHRlbXBvcmFsKSB7CisJCQl0ZW1wb3JhbCA9IGlzX3NjYWxpbmcgPyAwIDogODsKKwkJfQogCX0KIAogCWlmIChvbGQgPT0gTlVMTCB8fCBvbGQtPnN0cmVhbV90eXBlICE9IG5ldy0+c3RyZWFtX3R5cGUpIHsKQEAgLTgxNSw5ICs4MzEsOSBAQAogCX0KIAlpZiAob2xkID09IE5VTEwgfHwKIAkJb2xkLT52aWRlb19zcGF0aWFsX2ZpbHRlciAhPSBuZXctPnZpZGVvX3NwYXRpYWxfZmlsdGVyIHx8Ci0JCW9sZC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyICE9IG5ldy0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyKSB7CisJCW9sZC0+dmlkZW9fdGVtcG9yYWxfZmlsdGVyICE9IHRlbXBvcmFsKSB7CiAJCWVyciA9IGN4MjM0MXhfYXBpKHByaXYsIGZ1bmMsIENYMjM0MVhfRU5DX1NFVF9ETlJfRklMVEVSX1BST1BTLCAyLAotCQkJbmV3LT52aWRlb19zcGF0aWFsX2ZpbHRlciwgbmV3LT52aWRlb190ZW1wb3JhbF9maWx0ZXIpOworCQkJbmV3LT52aWRlb19zcGF0aWFsX2ZpbHRlciwgdGVtcG9yYWwpOwogCQlpZiAoZXJyKSByZXR1cm4gZXJyOwogCX0KIAlpZiAob2xkID09IE5VTEwgfHwgb2xkLT52aWRlb190ZW1wb3JhbF9kZWNpbWF0aW9uICE9IG5ldy0+dmlkZW9fdGVtcG9yYWxfZGVjaW1hdGlvbikgewpAQCAtODU1LDYgKzg3MSw5IEBACiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFN0cmVhbTogJXNcbiIsCiAJCXByZWZpeCwKIAkJY3gyMzQxeF9tZW51X2l0ZW0ocCwgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSkpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBWQkkgRm9ybWF0OiAlc1xuIiwKKwkJcHJlZml4LAorCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UKSk7CiAKIAkvKiBWaWRlbyAqLwogCXByaW50ayhLRVJOX0lORk8gIiVzOiBWaWRlbzogICVkeCVkLCAlZCBmcHNcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnCmluZGV4IDg1NDI2NGUuLjdjZjI5YTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFZJREVPX0NYMjU4NDAKIAl0cmlzdGF0ZSAiQ29uZXhhbnQgQ1gyNTg0eCBhdWRpby92aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX0RFViAmJiBJMkMgJiYgRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgRldfTE9BREVSCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIENvbmV4YW50IENYMjU4NHggYXVkaW8vdmlkZW8gZGVjb2RlcnMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCmluZGV4IDZjYzhiZjIuLjQ4MDE0YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLXZiaS5jCkBAIC0xMTEsNiArMTExLDEwIEBACiAJCQl1dl9scGY9MDsKIAkJCWNvbWI9MDsKIAkJCXNjPTB4MGE0MjVmOworCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTmMpIHsKKwkJCXV2X2xwZj0xOworCQkJY29tYj0weDIwOworCQkJc2M9NTU2NDUzOwogCQl9IGVsc2UgewogCQkJdXZfbHBmPTE7CiAJCQljb21iPTB4MjA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCmluZGV4IDdhOTRlNmEuLjUxZDY4ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9LY29uZmlnCkBAIC0xLDcgKzEsMyBAQAotY29uZmlnIFZJREVPX0NYODhfVlAzMDU0Ci0JdHJpc3RhdGUKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmIERWQl9NVDM1MgotCiBjb25maWcgVklERU9fQ1g4OAogCXRyaXN0YXRlICJDb25leGFudCAyMzg4eCAoYnQ4Nzggc3VjY2Vzc29yKSBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBDSSAmJiBJMkMKQEAgLTUyLDYgKzQ4LDE0IEBACiAJZGVwZW5kcyBvbiBWSURFT19DWDg4ICYmIERWQl9DT1JFCiAJc2VsZWN0IFZJREVPX0JVRl9EVkIKIAlzZWxlY3QgRFZCX1BMTAorCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX09SNTExMzIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0NYMjI3MDIgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9OWFQyMDBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9DWDI0MTIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQi9BVFNDIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29uZXhhbnQgMjM4OHggY2hpcC4KQEAgLTU5LDEwMSArNjMsMTIgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGN4ODgtZHZiLgogCi0JICBZb3UgbXVzdCBhbHNvIHNlbGVjdCBvbmUgb3IgbW9yZSBEVkIvQVRTQyBkZW1vZHVsYXRvcnMuCi0JICBJZiB5b3UgYXJlIHVuc3VyZSB3aGljaCB5b3UgbmVlZCwgY2hvb3NlIGFsbCBvZiB0aGVtLgotCi1jb25maWcgVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUwotCWJvb2wgIkJ1aWxkIGFsbCBzdXBwb3J0ZWQgZnJvbnRlbmRzIGZvciBjeDIzODh4IGJhc2VkIFRWIGNhcmRzIgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIKLQlzZWxlY3QgRFZCX01UMzUyCi0Jc2VsZWN0IFZJREVPX0NYODhfVlAzMDU0Ci0Jc2VsZWN0IERWQl9aTDEwMzUzCi0Jc2VsZWN0IERWQl9PUjUxMTMyCi0Jc2VsZWN0IERWQl9DWDIyNzAyCi0Jc2VsZWN0IERWQl9MR0RUMzMwWAotCXNlbGVjdCBEVkJfTlhUMjAwWAotCXNlbGVjdCBEVkJfQ1gyNDEyMwotCXNlbGVjdCBEVkJfSVNMNjQyMQotCS0tLWhlbHAtLS0KLQkgIFRoaXMgYnVpbGRzIGN4ODgtZHZiIHdpdGggYWxsIGN1cnJlbnRseSBzdXBwb3J0ZWQgZnJvbnRlbmQKLQkgIGRlbW9kdWxhdG9ycy4gIElmIHlvdSB3aXNoIHRvIHR3ZWFrIHlvdXIgY29uZmlndXJhdGlvbiwgYW5kCi0JICBvbmx5IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIGhhcmR3YXJlIHRoYXQgeW91IG5lZWQsIGNob29zZSBOIGhlcmUuCi0KLQkgIElmIHlvdSBhcmUgdW5zdXJlLCBjaG9vc2UgWS4KLQotY29uZmlnIFZJREVPX0NYODhfRFZCX01UMzUyCi0JYm9vbCAiWmFybGluayBNVDM1MiBEVkItVCBTdXBwb3J0IgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKLQlzZWxlY3QgRFZCX01UMzUyCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBNVDM1MiBkZW1vZHVsYXRvci4KLQotY29uZmlnIFZJREVPX0NYODhfRFZCX1ZQMzA1NAotCWJvb2wgIlZQLTMwNTQgU2Vjb25kYXJ5IEkyQyBCdXMgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCX01UMzUyCi0Jc2VsZWN0IFZJREVPX0NYODhfVlAzMDU0Citjb25maWcgVklERU9fQ1g4OF9WUDMwNTQKKwl0cmlzdGF0ZSAiVlAtMzA1NCBTZWNvbmRhcnkgSTJDIEJ1cyBTdXBwb3J0IgorCWRlZmF1bHQgbQorCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgRFZCX01UMzUyCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQogCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBNVDM1MiBkZW1vZHVsYXRvciwKIAkgIHdoaWNoIGFsc28gcmVxdWlyZSBzdXBwb3J0IGZvciB0aGUgVlAtMzA1NAogCSAgU2Vjb25kYXJ5IEkyQyBidXMsIHN1Y2ggYXQgRE5UViBMaXZlISBEVkItVCBQcm8uCi0KLWNvbmZpZyBWSURFT19DWDg4X0RWQl9aTDEwMzUzCi0JYm9vbCAiWmFybGluayBaTDEwMzUzIERWQi1UIFN1cHBvcnQiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBWSURFT19DWDg4X0RWQiAmJiAhVklERU9fQ1g4OF9EVkJfQUxMX0ZST05URU5EUwotCXNlbGVjdCBEVkJfWkwxMDM1MwotCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBEVkItVCBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgWkwxMDM1MyBkZW1vZHVsYXRvciwKLQkgIHN1Y2Nlc3NvciB0byB0aGUgWmFybGluayBNVDM1Mi4KLQotY29uZmlnIFZJREVPX0NYODhfRFZCX09SNTExMzIKLQlib29sICJPUjUxMTMyIEFUU0MgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCi0Jc2VsZWN0IERWQl9PUjUxMTMyCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBPUjUxMTMyIGRlbW9kdWxhdG9yLgotCi1jb25maWcgVklERU9fQ1g4OF9EVkJfQ1gyMjcwMgotCWJvb2wgIkNvbmV4YW50IENYMjI3MDIgRFZCLVQgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCi0Jc2VsZWN0IERWQl9DWDIyNzAyCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIERWQi1UIHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBDWDIyNzAyIGRlbW9kdWxhdG9yLgotCi1jb25maWcgVklERU9fQ1g4OF9EVkJfTEdEVDMzMFgKLQlib29sICJMRyBFbGVjdHJvbmljcyBEVDMzMDIvRFQzMzAzIEFUU0MgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCi0Jc2VsZWN0IERWQl9MR0RUMzMwWAotCS0tLWhlbHAtLS0KLQkgIFRoaXMgYWRkcyBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiBzdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUKLQkgIENvbm5leGFudCAyMzg4eCBjaGlwIGFuZCB0aGUgTEdEVDMzMDIvTEdEVDMzMDMgZGVtb2R1bGF0b3IuCi0KLWNvbmZpZyBWSURFT19DWDg4X0RWQl9OWFQyMDBYCi0JYm9vbCAiTlhUMjAwMi9OWFQyMDA0IEFUU0MgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX0NYODhfRFZCICYmICFWSURFT19DWDg4X0RWQl9BTExfRlJPTlRFTkRTCi0Jc2VsZWN0IERWQl9OWFQyMDBYCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgQ29ubmV4YW50IDIzODh4IGNoaXAgYW5kIHRoZSBOWFQyMDAyL05YVDIwMDQgZGVtb2R1bGF0b3IuCi0KLWNvbmZpZyBWSURFT19DWDg4X0RWQl9DWDI0MTIzCi0JYm9vbCAiQ29uZXhhbnQgQ1gyNDEyMyBEVkItUyBTdXBwb3J0IgotCWRlZmF1bHQgeQotCWRlcGVuZHMgb24gVklERU9fQ1g4OF9EVkIgJiYgIVZJREVPX0NYODhfRFZCX0FMTF9GUk9OVEVORFMKLQlzZWxlY3QgRFZCX0NYMjQxMjMKLQlzZWxlY3QgRFZCX0lTTDY0MjEKLQktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgRFZCLVMgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBDb25uZXhhbnQgMjM4OHggY2hpcCBhbmQgdGhlIENYMjQxMjMgZGVtb2R1bGF0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvTWFrZWZpbGUKaW5kZXggMzUyYjkxOS4uNjM5YzNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9NYWtlZmlsZQpAQCAtMTQsMTMgKzE0LDYgQEAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcwogCiBleHRyYS1jZmxhZ3MtJChDT05GSUdfVklERU9fQlVGX0RWQikgKz0gLURIQVZFX1ZJREVPX0JVRl9EVkI9MQotZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9DWDIyNzAyKSAgICs9IC1ESEFWRV9DWDIyNzAyPTEKLWV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfT1I1MTEzMikgICArPSAtREhBVkVfT1I1MTEzMj0xCi1leHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX0xHRFQzMzBYKSAgKz0gLURIQVZFX0xHRFQzMzBYPTEKLWV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfTVQzNTIpICAgICArPSAtREhBVkVfTVQzNTI9MQotZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9aTDEwMzUzKSAgICs9IC1ESEFWRV9aTDEwMzUzPTEKLWV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfTlhUMjAwWCkgICArPSAtREhBVkVfTlhUMjAwWD0xCi1leHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX0NYMjQxMjMpICAgKz0gLURIQVZFX0NYMjQxMjM9MQogZXh0cmEtY2ZsYWdzLSQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSs9IC1ESEFWRV9WUDMwNTRfSTJDPTEKIAogRVhUUkFfQ0ZMQUdTICs9ICQoZXh0cmEtY2ZsYWdzLXkpICQoZXh0cmEtY2ZsYWdzLW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IGI2MDE3N2YuLmE3OTIxZjlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYwpAQCAtMTE2MCw4ICsxMTYwLDEwIEBACiAJLmlkX3RhYmxlID0gY3g4ODAyX3BjaV90YmwsCiAJLnByb2JlICAgID0gYmxhY2tiaXJkX3Byb2JlLAogCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGJsYWNrYmlyZF9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kICA9IGN4ODgwMl9zdXNwZW5kX2NvbW1vbiwKIAkucmVzdW1lICAgPSBjeDg4MDJfcmVzdW1lX2NvbW1vbiwKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBibGFja2JpcmRfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKaW5kZXggMTRiZDQ4Ni4uNjIxNGViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCkBAIC0xMDQxLDExICsxMDQxLDExIEBACiAJCS5pbnB1dCAgICAgICAgICA9IHt7CiAJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCiAJCQkudm11eCAgID0gMSwKLQkJCS5ncGlvMCAgPSAweDAwMDAyN2RmLAorCQkJLmdwaW8wICA9IDB4MDAwMDY3ZGYsCiAJCSB9LHsKIAkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICA9IDIsCi0JCQkuZ3BpbzAgID0gMHgwMDAwMjdkZiwKKwkJCS5ncGlvMCAgPSAweDAwMDA2N2RmLAogCQl9fSwKIAkJLmR2YiAgICAgICAgICAgID0gMSwKIAl9LApAQCAtMTIwOSw2ICsxMjA5LDEwMCBAQAogCQl9fSwKIAkJLmR2YiAgICAgID0gMSwKIAl9LAorCVtDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwXSA9IHsKKwkJLyogRklYTUU6IEFkZCBkdmIgJiByYWRpbyBzdXBwb3J0ICovCisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMzAwMCBUcmlNb2RlIEFuYWxvZy9EVkItUy9EVkItVCIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0ICAgICAgICAgID0ge3sKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgPSAwLAorCQkJLmdwaW8wICA9IDB4ODRiZiwKKwkJfSx7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX0NPTVBPU0lURTEsCisJCQkudm11eCAgID0gMSwKKwkJCS5ncGlvMCAgPSAweDg0YmYsCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDg0YmYsCisJCX19LAorCX0sCisJW0NYODhfQk9BUkRfTk9SV09PRF9NSUNST10gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJOb3J3b29kIE1pY3JvIFRWIFR1bmVyIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVE5GXzUzMzVNRiwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5pbnB1dCAgICAgICAgICA9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMCAgPSAweDA3MDksCisJCX0seworCQkJLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICA9IDEsCisJCQkuZ3BpbzAgID0gMHgwNzBiLAorCQl9LHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICA9IDIsCisJCQkuZ3BpbzAgID0gMHgwNzBiLAorCQl9fSwKKwl9LAorICAgICAgIFtDWDg4X0JPQVJEX1RFX0RUVl8yNTBfT0VNX1NXQU5OXSA9IHsKKwkgICAgICAgLm5hbWUgICAgICAgICAgID0gIlNoZW56aGVuIFR1bmdzdGVuIEFnZXMgVGVjaCBURS1EVFYtMjUwIC8gU3dhbm4gT0VNIiwKKwkgICAgICAgLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAorCSAgICAgICAucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkgICAgICAgLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkgICAgICAgLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkgICAgICAgLmlucHV0ICAgICAgICAgID0ge3sKKwkJICAgICAgIC50eXBlICAgPSBDWDg4X1ZNVVhfVEVMRVZJU0lPTiwKKwkJICAgICAgIC52bXV4ICAgPSAwLAorCQkgICAgICAgLmdwaW8wICA9IDB4MDAzZmZmZmYsCisJCSAgICAgICAuZ3BpbzEgID0gMHgwMGUwMDAwMCwKKwkJICAgICAgIC5ncGlvMiAgPSAweDAwM2ZmZmZmLAorCQkgICAgICAgLmdwaW8zICA9IDB4MDIwMDAwMDAsCisJICAgICAgIH0seworCQkgICAgICAgLnR5cGUgICA9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkgICAgICAgLnZtdXggICA9IDEsCisJCSAgICAgICAuZ3BpbzAgID0gMHgwMDNmZmZmZiwKKwkJICAgICAgIC5ncGlvMSAgPSAweDAwZTAwMDAwLAorCQkgICAgICAgLmdwaW8yICA9IDB4MDAzZmZmZmYsCisJCSAgICAgICAuZ3BpbzMgID0gMHgwMjAwMDAwMCwKKwkJfSx7CisJCSAgICAgICAudHlwZSAgID0gQ1g4OF9WTVVYX1NWSURFTywKKwkJICAgICAgIC52bXV4ICAgPSAyLAorCQkgICAgICAgLmdwaW8wICA9IDB4MDAzZmZmZmYsCisJCSAgICAgICAuZ3BpbzEgID0gMHgwMGUwMDAwMCwKKwkJICAgICAgIC5ncGlvMiAgPSAweDAwM2ZmZmZmLAorCQkgICAgICAgLmdwaW8zICA9IDB4MDIwMDAwMDAsCisJICAgICAgIH19LAorICAgICAgIH0sCisJW0NYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDBdID0geworCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpblRWLUhWUjEzMDAgRFZCLVQvSHlicmlkIE1QRUcgRW5jb2RlciIsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfRk1EMTIxNk1FX01LMywKKwkJLnJhZGlvX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0CQk9IHt7CisJCQkudHlwZSAgID0gQ1g4OF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgID0gMCwKKwkJCS5ncGlvMAk9IDB4ZTc4MCwKKwkJfSx7CisJCQkudHlwZQk9IENYODhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXgJPSAxLAorCQkJLmdwaW8wCT0gMHhlNzgwLAorCQl9LHsKKwkJCS50eXBlCT0gQ1g4OF9WTVVYX1NWSURFTywKKwkJCS52bXV4CT0gMiwKKwkJCS5ncGlvMAk9IDB4ZTc4MCwKKwkJfX0sCisJCS8qIGZpeG1lOiBBZGQgcmFkaW8gc3VwcG9ydCAqLworCQkuZHZiCQk9IDEsCisJfSwKIH07CiBjb25zdCB1bnNpZ25lZCBpbnQgY3g4OF9iY291bnQgPSBBUlJBWV9TSVpFKGN4ODhfYm9hcmRzKTsKIApAQCAtMTI1NCw3ICsxMzQ4LDcgQEAKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAogCX0sewogCQkuc3VidmVuZG9yID0gMHgxMDdkLAotCQkuc3ViZGV2aWNlID0gMHg2NjNDLAorCQkuc3ViZGV2aWNlID0gMHg2NjNjLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9MRUFEVEVLX1BWUjIwMDAsCiAJfSx7CiAJCS5zdWJ2ZW5kb3IgPSAweDE0NjEsCkBAIC0xNDU4LDYgKzE1NTIsMzUgQEAKIAkJLnN1YnZlbmRvciA9IDB4MTRmMSwKIAkJLnN1YmRldmljZSA9IDB4MDA4NCwKIAkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfR0VOSUFURUNIX0RWQlMsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDE0MDQsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwLAorCX0seworCQkuc3VidmVuZG9yID0gMHgxNDYxLAorCQkuc3ViZGV2aWNlID0gMHhjMTExLCAvKiBBdmVyTWVkaWEgTTE1MC1EICovCisJCS8qIFRoaXMgYm9hcmQgaXMga25vd24gdG8gd29yayB3aXRoIHRoZSBBU1VTIFBWUjQxNiBjb25maWcgKi8KKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfQVNVU19QVlJfNDE2LAorCX0seworCQkuc3VidmVuZG9yID0gMHhjMTgwLAorCQkuc3ViZGV2aWNlID0gMHhjOTgwLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URV9EVFZfMjUwX09FTV9TV0FOTiwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSA9IDB4OTYwMCwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDAsCisJfSx7CisJCS5zdWJ2ZW5kb3IgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgPSAweDk2MDEsCisJCS5jYXJkICAgICAgPSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwLAorCX0seworCQkuc3VidmVuZG9yID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlID0gMHg5NjAyLAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTMwMCwKKwl9LHsKKwkJLnN1YnZlbmRvciA9IDB4MTA3ZCwKKwkJLnN1YmRldmljZSA9IDB4NjYzMiwKKwkJLmNhcmQgICAgICA9IENYODhfQk9BUkRfTEVBRFRFS19QVlIyMDAwLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4ODhfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3g4OF9zdWJpZHMpOwpAQCAtMTUwMSw2ICsxNjI0LDcgQEAKIAkvKiBNYWtlIHN1cmUgd2Ugc3VwcG9ydCB0aGUgYm9hcmQgbW9kZWwgKi8KIAlzd2l0Y2ggKHR2Lm1vZGVsKQogCXsKKwljYXNlIDE0NTY5OiAvKiBXaW5UVi1IVlIzMDAwIChPRU0sIG5vIElSLCBubyBiYWNrIHBhbmVsIHZpZGVvKSAqLwogCWNhc2UgMjg1NTI6IC8qIFdpblRWLVBWUiAnUm9zbHluJyAoTm8gSVIpICovCiAJY2FzZSAzNDUxOTogLyogV2luVFYtUENJLUZNICovCiAJY2FzZSA5MDAwMjogLyogTm92YS1ULVBDSSAoOTAwMikgKi8KQEAgLTE1MTIsNiArMTYzNiwxMSBAQAogCWNhc2UgOTIwMDA6IC8qIE5vdmEtU0UyIChPRU0sIE5vIFZpZGVvIG9yIElSKSAqLwogCWNhc2UgOTQwMDk6IC8qIFdpblRWLUhWUjExMDAgKFZpZGVvIGFuZCBJUiBSZXRhaWwpICovCiAJY2FzZSA5NDUwMTogLyogV2luVFYtSFZSMTEwMCAoVmlkZW8gYW5kIElSIE9FTSkgKi8KKwljYXNlIDk2MDA5OiAvKiBXaW5UVi1IVlIxMzAwIChQQUwgVmlkZW8sIE1QRUcgVmlkZW8gYW5kIElSIFJYKSAqLworCWNhc2UgOTYwMTk6IC8qIFdpblRWLUhWUjEzMDAgKFBBTCBWaWRlbywgTVBFRyBWaWRlbyBhbmQgSVIgUlgvVFgpICovCisJY2FzZSA5NjU1OTogLyogV2luVFYtSFZSMTMwMCAoUEFMIFZpZGVvLCBNUEVHIFZpZGVvIG5vIElSKSAqLworCWNhc2UgOTY1Njk6IC8qIFdpblRWLUhWUjEzMDAgKCkgKi8KKwljYXNlIDk2NjU5OiAvKiBXaW5UVi1IVlIxMzAwICgpICovCiAJY2FzZSA5ODU1OTogLyogV2luVFYtSFZSMTEwMExQIChWaWRlbyBubyBJUiwgUmV0YWlsIC0gTG93IFByb2ZpbGUpICovCiAJCS8qIGtub3duICovCiAJCWJyZWFrOwpAQCAtMTYzOCw2ICsxNzY3LDIyIEBACiAJCSAgICAgICBjb3JlLT5uYW1lLCBpLCBjeDg4X2JvYXJkc1tpXS5uYW1lKTsKIH0KIAordm9pZCBjeDg4X2NhcmRfc2V0dXBfcHJlX2kyYyhzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlKQoreworCXN3aXRjaCAoY29yZS0+Ym9hcmQpIHsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CisJCS8qIEJyaW5nIHRoZSA3MDIgZGVtb2QgdXAgYmVmb3JlIGkyYyBzY2FubmluZy9hdHRhY2ggb3IgZGV2aWNlcyBhcmUgaGlkZGVuICovCisJCS8qIFdlIGxlYXZlIGhlcmUgd2l0aCB0aGUgNzAyIG9uIHRoZSBidXMgKi8KKwkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDBlNzgwKTsKKwkJdWRlbGF5KDEwMDApOworCQljeF9jbGVhcihNT19HUDBfSU8sIDB4MDAwMDAwODApOworCQl1ZGVsYXkoNTApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDAwMDgwKTsgLyogNzAyIG91dCBvZiByZXNldCAqLworCQl1ZGVsYXkoMTAwMCk7CisJCWJyZWFrOworCX0KK30KKwogdm9pZCBjeDg4X2NhcmRfc2V0dXAoc3RydWN0IGN4ODhfY29yZSAqY29yZSkKIHsKIAlzdGF0aWMgdTggZWVwcm9tWzI1Nl07CkBAIC0xNjY2LDYgKzE4MTEsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgogCQlpZiAoMCA9PSBjb3JlLT5pMmNfcmMpCiAJCQloYXVwcGF1Z2VfZWVwcm9tKGNvcmUsZWVwcm9tKTsKIAkJYnJlYWs7CkBAIC0xNjczLDkgKzE4MjAsMTUgQEAKIAkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDAwN2Y4KTsKIAkJY3hfd3JpdGUoTU9fR1AxX0lPLCAweDAwMDAwMDAxKTsKIAkJYnJlYWs7CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfRFVBTDoKKwkJLyogR1BJTzA6NiBpcyBob29rZWQgdG8gRlgyIHJlc2V0IHBpbiAqLworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDA0MDQwKTsKKwkJY3hfY2xlYXIoTU9fR1AwX0lPLCAweDAwMDAwMDQwKTsKKwkJbXNsZWVwKDEwMDApOworCQljeF9zZXQoTU9fR1AwX0lPLCAweDAwMDA0MDQwKTsKKwkJLyogRkFMTFRIUk9VR0ggKi8KIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLQljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMOgogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0hZQlJJRDoKIAkJLyogR1BJTzA6MCBpcyBob29rZWQgdG8gbXQzNTIgcmVzZXQgcGluICovCiAJCWN4X3NldChNT19HUDBfSU8sIDB4MDAwMDAxMDEpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCmluZGV4IDk3M2QzZjMuLmYzNzllZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQkJKihycCsrKT1jcHVfdG9fbGUzMihzZ19kbWFfYWRkcmVzcyhzZykrb2Zmc2V0KTsKIAkJCW9mZnNldCs9YnBsOwogCQl9IGVsc2UgewotCQkJLyogc2NhbmxpbmUgbmVlZHMgdG8gYmUgc3BsaXR0ZWQgKi8KKwkJCS8qIHNjYW5saW5lIG5lZWRzIHRvIGJlIHNwbGl0ICovCiAJCQl0b2RvID0gYnBsOwogCQkJKihycCsrKT1jcHVfdG9fbGUzMihSSVNDX1dSSVRFfFJJU0NfU09MfAogCQkJCQkgICAgKHNnX2RtYV9sZW4oc2cpLW9mZnNldCkpOwpAQCAtNzkyLDYgKzc5MiwxMSBAQAogewogCS8qIGNvbnN0YW50IDEyOCBtYWRlIGJ1enogaW4gYW5hbG9nIE5pY2FtLXN0ZXJlbyBmb3IgYmlnZ2VyIGZpZm9fc2l6ZSAqLwogCWludCBicGwgPSBjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI1XS5maWZvX3NpemUvNDsKKworCS8qIElmIGRvd25zdHJlYW0gUklTQyBpcyBlbmFibGVkLCBiYWlsIG91dDsgQUxTQSBpcyBtYW5hZ2luZyBETUEgKi8KKwlpZiAoY3hfcmVhZChNT19BVURfRE1BQ05UUkwpICYgMHgxMCkKKwkJcmV0dXJuIDA7CisKIAkvKiBzZXR1cCBmaWZvICsgZm9ybWF0ICovCiAJY3g4OF9zcmFtX2NoYW5uZWxfc2V0dXAoY29yZSwgJmN4ODhfc3JhbV9jaGFubmVsc1tTUkFNX0NIMjVdLCBicGwsIDApOwogCWN4ODhfc3JhbV9jaGFubmVsX3NldHVwKGNvcmUsICZjeDg4X3NyYW1fY2hhbm5lbHNbU1JBTV9DSDI2XSwgYnBsLCAwKTsKQEAgLTgwMSwxMSArODA2LDE2IEBACiAKIAkvKiBzdGFydCBkbWEgKi8KIAljeF93cml0ZShNT19BVURfRE1BQ05UUkwsIDB4MDAwMyk7IC8qIFVwIGFuZCBEb3duIGZpZm8gZW5hYmxlICovCisKIAlyZXR1cm4gMDsKIH0KIAogaW50IGN4ODhfc3RvcF9hdWRpb19kbWEoc3RydWN0IGN4ODhfY29yZSAqY29yZSkKIHsKKwkvKiBJZiBkb3duc3RyZWFtIFJJU0MgaXMgZW5hYmxlZCwgYmFpbCBvdXQ7IEFMU0EgaXMgbWFuYWdpbmcgRE1BICovCisJaWYgKGN4X3JlYWQoTU9fQVVEX0RNQUNOVFJMKSAmIDB4MTApCisJCXJldHVybiAwOworCiAJLyogc3RvcCBkbWEgKi8KIAljeF93cml0ZShNT19BVURfRE1BQ05UUkwsIDB4MDAwMCk7CiAKQEAgLTExMjMsNiArMTEzMyw3IEBACiAKIAkvKiBpbml0IGhhcmR3YXJlICovCiAJY3g4OF9yZXNldChjb3JlKTsKKwljeDg4X2NhcmRfc2V0dXBfcHJlX2kyYyhjb3JlKTsKIAljeDg4X2kyY19pbml0KGNvcmUscGNpKTsKIAljeDg4X2NhbGxfaTJjX2NsaWVudHMgKGNvcmUsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCmluZGV4IGFmZGUzNzguLmM4NzA0MWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jCkBAIC0zMywzMiArMzMsMTggQEAKICNpbmNsdWRlICJkdmItcGxsLmgiCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAotI2lmZGVmIEhBVkVfTVQzNTIKLSMgaW5jbHVkZSAibXQzNTIuaCIKLSMgaW5jbHVkZSAibXQzNTJfcHJpdi5oIgotIyBpZmRlZiBIQVZFX1ZQMzA1NF9JMkMKLSMgIGluY2x1ZGUgImN4ODgtdnAzMDU0LWkyYy5oIgotIyBlbmRpZgorI2luY2x1ZGUgIm10MzUyLmgiCisjaW5jbHVkZSAibXQzNTJfcHJpdi5oIgorI2lmZGVmIEhBVkVfVlAzMDU0X0kyQworIyBpbmNsdWRlICJjeDg4LXZwMzA1NC1pMmMuaCIKICNlbmRpZgotI2lmZGVmIEhBVkVfWkwxMDM1MwotIyBpbmNsdWRlICJ6bDEwMzUzLmgiCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0NYMjI3MDIKLSMgaW5jbHVkZSAiY3gyMjcwMi5oIgotI2VuZGlmCi0jaWZkZWYgSEFWRV9PUjUxMTMyCi0jIGluY2x1ZGUgIm9yNTExMzIuaCIKLSNlbmRpZgotI2lmZGVmIEhBVkVfTEdEVDMzMFgKLSMgaW5jbHVkZSAibGdkdDMzMHguaCIKLSMgaW5jbHVkZSAibGdfaDA2eGYuaCIKLSNlbmRpZgotI2lmZGVmIEhBVkVfTlhUMjAwWAotIyBpbmNsdWRlICJueHQyMDB4LmgiCi0jZW5kaWYKLSNpZmRlZiBIQVZFX0NYMjQxMjMKLSMgaW5jbHVkZSAiY3gyNDEyMy5oIgotI2VuZGlmCisjaW5jbHVkZSAiemwxMDM1My5oIgorI2luY2x1ZGUgImN4MjI3MDIuaCIKKyNpbmNsdWRlICJvcjUxMTMyLmgiCisjaW5jbHVkZSAibGdkdDMzMHguaCIKKyNpbmNsdWRlICJsZ19oMDZ4Zi5oIgorI2luY2x1ZGUgIm54dDIwMHguaCIKKyNpbmNsdWRlICJjeDI0MTIzLmgiCiAjaW5jbHVkZSAiaXNsNjQyMS5oIgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgY3gyMzg4eCBiYXNlZCBEVkIgY2FyZHMiKTsKQEAgLTExNCw4ICsxMDAsNiBAQAogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBIQVZFX01UMzUyCiBzdGF0aWMgaW50IGR2aWNvX2Z1c2lvbmhkdHZfZGVtb2RfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBmZSkKIHsKIAlzdGF0aWMgdTggY2xvY2tfY29uZmlnIFtdICA9IHsgQ0xPQ0tfQ1RMLCAgMHgzOCwgMHgzOSB9OwpAQCAtMTgxLDcgKzE2NSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgbXQzNTJfY29uZmlnIGR2aWNvX2Z1c2lvbmhkdHYgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDBGLAorCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKIAkuZGVtb2RfaW5pdCAgICA9IGR2aWNvX2Z1c2lvbmhkdHZfZGVtb2RfaW5pdCwKIH07CiAKQEAgLTE5MSw3ICsxNzUsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBtdDM1Ml9jb25maWcgZHZpY29fZnVzaW9uaGR0dl9kdWFsID0gewotCS5kZW1vZF9hZGRyZXNzID0gMHgwRiwKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGYsCiAJLmRlbW9kX2luaXQgICAgPSBkdmljb19kdWFsX2RlbW9kX2luaXQsCiB9OwogCkBAIC0yNjYsOCArMjUwLDggQEAKIAlpZiAoKGVyciA9IGkyY190cmFuc2ZlcigmZGV2LT5jb3JlLT5pMmNfYWRhcCwgJm1zZywgMSkpICE9IDEpIHsKIAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeDg4LWR2YjogJXMgZXJyb3IgIgotCQkJICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBkZXYtPmNvcmUtPnBsbF9hZGRyLCBidWZbMF0sIGVycik7CisJCSAgICAgICAiKGFkZHIgJTAyeCA8LSAlMDJ4LCBlcnIgPSAlaSlcbiIsCisJCSAgICAgICBfX0ZVTkNUSU9OX18sIGRldi0+Y29yZS0+cGxsX2FkZHIsIGJ1ZlswXSwgZXJyKTsKIAkJaWYgKGVyciA8IDApCiAJCQlyZXR1cm4gZXJyOwogCQllbHNlCkBAIC0yODMsOSArMjY3LDcgQEAKIAkuZGVtb2RfaW5pdCAgICA9IGRudHZfbGl2ZV9kdmJ0X3Byb19kZW1vZF9pbml0LAogfTsKICNlbmRpZgotI2VuZGlmCiAKLSNpZmRlZiBIQVZFX1pMMTAzNTMKIHN0YXRpYyBpbnQgZHZpY29faHlicmlkX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJCQkJCSBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKQEAgLTMwNCw4ICsyODYsOCBAQAogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWlmICgoZXJyID0gaTJjX3RyYW5zZmVyKCZkZXYtPmNvcmUtPmkyY19hZGFwLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeDg4LWR2YjogJXMgZXJyb3IgIgotCQkJICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBwbGxidWZbMF0sIHBsbGJ1ZlsxXSwgZXJyKTsKKwkJICAgICAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgcGxsYnVmWzBdLCBwbGxidWZbMV0sIGVycik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJZWxzZQpAQCAtMzE2LDE2ICsyOTgsMTQgQEAKIH0KIAogc3RhdGljIHN0cnVjdCB6bDEwMzUzX2NvbmZpZyBkdmljb19mdXNpb25oZHR2X2h5YnJpZCA9IHsKLQkuZGVtb2RfYWRkcmVzcyA9IDB4MEYsCisJLmRlbW9kX2FkZHJlc3MgPSAweDBmLAogCS5ub190dW5lciAgICAgID0gMSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgZHZpY29fZnVzaW9uaGR0dl9wbHVzX3YxXzEgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgPSAweDBGLAorCS5kZW1vZF9hZGRyZXNzID0gMHgwZiwKIH07Ci0jZW5kaWYKIAotI2lmZGVmIEhBVkVfQ1gyMjcwMgogc3RhdGljIHN0cnVjdCBjeDIyNzAyX2NvbmZpZyBjb25uZXhhbnRfcmVmYm9hcmRfY29uZmlnID0gewogCS5kZW1vZF9hZGRyZXNzID0gMHg0MywKIAkub3V0cHV0X21vZGUgICA9IENYMjI3MDJfU0VSSUFMX09VVFBVVCwKQEAgLTMzOSw5ICszMTksMTEgQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4NjMsCiAJLm91dHB1dF9tb2RlICAgPSBDWDIyNzAyX1NFUklBTF9PVVRQVVQsCiB9OwotI2VuZGlmCitzdGF0aWMgc3RydWN0IGN4MjI3MDJfY29uZmlnIGhhdXBwYXVnZV9odnIxMzAwX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NjMsCisJLm91dHB1dF9tb2RlICAgPSBDWDIyNzAyX1NFUklBTF9PVVRQVVQsCit9OwogCi0jaWZkZWYgSEFWRV9PUjUxMTMyCiBzdGF0aWMgaW50IG9yNTExMzJfc2V0X3RzX3BhcmFtKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAogCQkJCWludCBpc19wdW5jdHVyZWQpCiB7CkBAIC0zNTEsMTIgKzMzMywxMCBAQAogfQogCiBzdGF0aWMgc3RydWN0IG9yNTExMzJfY29uZmlnIHBjaGR0dl9oZDMwMDAgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgICAgPSAweDE1LAotCS5zZXRfdHNfcGFyYW1zICAgID0gb3I1MTEzMl9zZXRfdHNfcGFyYW0sCisJLmRlbW9kX2FkZHJlc3MgPSAweDE1LAorCS5zZXRfdHNfcGFyYW1zID0gb3I1MTEzMl9zZXRfdHNfcGFyYW0sCiB9OwotI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xHRFQzMzBYCiBzdGF0aWMgaW50IGxnZHQzMzAyX3R1bmVyX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJCQkJICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMqIHBhcmFtcykKIHsKQEAgLTM3MywxNCArMzUzLDE0IEBACiAKIAlkdmJfcGxsX2NvbmZpZ3VyZShjb3JlLT5wbGxfZGVzYywgYnVmLCBwYXJhbXMtPmZyZXF1ZW5jeSwgMCk7CiAJZHByaW50aygxLCAiJXM6IHR1bmVyIGF0IDB4JTAyeCBieXRlczogMHglMDJ4IDB4JTAyeCAweCUwMnggMHglMDJ4XG4iLAotCQkJX19GVU5DVElPTl9fLCBtc2cuYWRkciwgYnVmWzBdLGJ1ZlsxXSxidWZbMl0sYnVmWzNdKTsKKwkJX19GVU5DVElPTl9fLCBtc2cuYWRkciwgYnVmWzBdLGJ1ZlsxXSxidWZbMl0sYnVmWzNdKTsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAJaWYgKChlcnIgPSBpMmNfdHJhbnNmZXIoJmNvcmUtPmkyY19hZGFwLCAmbXNnLCAxKSkgIT0gMSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjeDg4LWR2YjogJXMgZXJyb3IgIgotCQkJICAgIihhZGRyICUwMnggPC0gJTAyeCwgZXJyID0gJWkpXG4iLAotCQkJICAgX19GVU5DVElPTl9fLCBidWZbMF0sIGJ1ZlsxXSwgZXJyKTsKKwkJICAgICAgICIoYWRkciAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgYnVmWzBdLCBidWZbMV0sIGVycik7CiAJCWlmIChlcnIgPCAwKQogCQkJcmV0dXJuIGVycjsKIAkJZWxzZQpAQCAtNDI1LDI4ICs0MDUsMjYgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBsZ2R0MzMweF9jb25maWcgZnVzaW9uaGR0dl8zX2dvbGQgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgICAgPSAweDBlLAotCS5kZW1vZF9jaGlwICAgICAgID0gTEdEVDMzMDIsCi0JLnNlcmlhbF9tcGVnICAgICAgPSAweDA0LCAvKiBUUFNFUklBTCBmb3IgMzMwMiBpbiBUT1BfQ09OVFJPTCAqLwotCS5zZXRfdHNfcGFyYW1zICAgID0gbGdkdDMzMHhfc2V0X3RzX3BhcmFtLAorCS5kZW1vZF9hZGRyZXNzID0gMHgwZSwKKwkuZGVtb2RfY2hpcCAgICA9IExHRFQzMzAyLAorCS5zZXJpYWxfbXBlZyAgID0gMHgwNCwgLyogVFBTRVJJQUwgZm9yIDMzMDIgaW4gVE9QX0NPTlRST0wgKi8KKwkuc2V0X3RzX3BhcmFtcyA9IGxnZHQzMzB4X3NldF90c19wYXJhbSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgbGdkdDMzMHhfY29uZmlnIGZ1c2lvbmhkdHZfNV9nb2xkID0gewotCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwZSwKLQkuZGVtb2RfY2hpcCAgICAgICA9IExHRFQzMzAzLAotCS5zZXJpYWxfbXBlZyAgICAgID0gMHg0MCwgLyogVFBTRVJJQUwgZm9yIDMzMDMgaW4gVE9QX0NPTlRST0wgKi8KLQkuc2V0X3RzX3BhcmFtcyAgICA9IGxnZHQzMzB4X3NldF90c19wYXJhbSwKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCisJLmRlbW9kX2NoaXAgICAgPSBMR0RUMzMwMywKKwkuc2VyaWFsX21wZWcgICA9IDB4NDAsIC8qIFRQU0VSSUFMIGZvciAzMzAzIGluIFRPUF9DT05UUk9MICovCisJLnNldF90c19wYXJhbXMgPSBsZ2R0MzMweF9zZXRfdHNfcGFyYW0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGxnZHQzMzB4X2NvbmZpZyBwY2hkdHZfaGQ1NTAwID0gewotCS5kZW1vZF9hZGRyZXNzICAgID0gMHg1OSwKLQkuZGVtb2RfY2hpcCAgICAgICA9IExHRFQzMzAzLAotCS5zZXJpYWxfbXBlZyAgICAgID0gMHg0MCwgLyogVFBTRVJJQUwgZm9yIDMzMDMgaW4gVE9QX0NPTlRST0wgKi8KLQkuc2V0X3RzX3BhcmFtcyAgICA9IGxnZHQzMzB4X3NldF90c19wYXJhbSwKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTksCisJLmRlbW9kX2NoaXAgICAgPSBMR0RUMzMwMywKKwkuc2VyaWFsX21wZWcgICA9IDB4NDAsIC8qIFRQU0VSSUFMIGZvciAzMzAzIGluIFRPUF9DT05UUk9MICovCisJLnNldF90c19wYXJhbXMgPSBsZ2R0MzMweF9zZXRfdHNfcGFyYW0sCiB9OwotI2VuZGlmCiAKLSNpZmRlZiBIQVZFX05YVDIwMFgKIHN0YXRpYyBpbnQgbnh0MjAweF9zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJCQkJaW50IGlzX3B1bmN0dXJlZCkKIHsKQEAgLTQ2NSwyOCArNDQzLDI3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgbnh0MjAweF9jb25maWcgYXRpX2hkdHZ3b25kZXIgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAotCS5zZXRfcGxsX2lucHV0ICAgID0gbnh0MjAweF9zZXRfcGxsX2lucHV0LAotCS5zZXRfdHNfcGFyYW1zICAgID0gbnh0MjAweF9zZXRfdHNfcGFyYW0sCisJLmRlbW9kX2FkZHJlc3MgPSAweDBhLAorCS5zZXRfcGxsX2lucHV0ID0gbnh0MjAweF9zZXRfcGxsX2lucHV0LAorCS5zZXRfdHNfcGFyYW1zID0gbnh0MjAweF9zZXRfdHNfcGFyYW0sCiB9OwotI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0NYMjQxMjMKIHN0YXRpYyBpbnQgY3gyNDEyM19zZXRfdHNfcGFyYW0oc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsCiAJaW50IGlzX3B1bmN0dXJlZCkKIHsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2PSBmZS0+ZHZiLT5wcml2OwotCWRldi0+dHNfZ2VuX2NudHJsID0gMHgyOworCWRldi0+dHNfZ2VuX2NudHJsID0gMHgwMjsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrd29ybGRfZHZic18xMDBfc2V0X3ZvbHRhZ2Uoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUsIGZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3N0YXRpYyBpbnQga3dvcmxkX2R2YnNfMTAwX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlLAorCQkJCSAgICAgICBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwogCiAJaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfT0ZGKSB7Ci0JCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwMDZmQik7CisJCWN4X3dyaXRlKE1PX0dQMF9JTywgMHgwMDAwMDZmYik7CiAJfSBlbHNlIHsKIAkJY3hfd3JpdGUoTU9fR1AwX0lPLCAweDAwMDAwNmY5KTsKIAl9CkBAIC00OTYsNyArNDczLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQorc3RhdGljIGludCBnZW5pYXRlY2hfZHZic19zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgICAgICBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCiB7CiAJc3RydWN0IGN4ODgwMl9kZXYgKmRldj0gZmUtPmR2Yi0+cHJpdjsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwpAQCAtNTEyLDIwICs0OTAsMjAgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjeDI0MTIzX2NvbmZpZyBnZW5pYXRlY2hfZHZic19jb25maWcgPSB7Ci0JLmRlbW9kX2FkZHJlc3MgID0gMHg1NSwKLQkuc2V0X3RzX3BhcmFtcyAgPSBjeDI0MTIzX3NldF90c19wYXJhbSwKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCisJLnNldF90c19wYXJhbXMgPSBjeDI0MTIzX3NldF90c19wYXJhbSwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgY3gyNDEyM19jb25maWcgaGF1cHBhdWdlX25vdmFzX2NvbmZpZyA9IHsKLQkuZGVtb2RfYWRkcmVzcwkJPSAweDU1LAotCS5zZXRfdHNfcGFyYW1zCQk9IGN4MjQxMjNfc2V0X3RzX3BhcmFtLAorCS5kZW1vZF9hZGRyZXNzID0gMHg1NSwKKwkuc2V0X3RzX3BhcmFtcyA9IGN4MjQxMjNfc2V0X3RzX3BhcmFtLAogfTsKIAogc3RhdGljIHN0cnVjdCBjeDI0MTIzX2NvbmZpZyBrd29ybGRfZHZic18xMDBfY29uZmlnID0gewotCS5kZW1vZF9hZGRyZXNzCQk9IDB4MTUsCi0JLnNldF90c19wYXJhbXMJCT0gY3gyNDEyM19zZXRfdHNfcGFyYW0sCisJLmRlbW9kX2FkZHJlc3MgPSAweDE1LAorCS5zZXRfdHNfcGFyYW1zID0gY3gyNDEyM19zZXRfdHNfcGFyYW0sCisJLmxuYl9wb2xhcml0eSAgPSAxLAogfTsKLSNlbmRpZgogCiBzdGF0aWMgaW50IGR2Yl9yZWdpc3RlcihzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2KQogewpAQCAtNTM1LDExNCArNTEzLDExNCBAQAogCiAJLyogaW5pdCBmcm9udGVuZCAqLwogCXN3aXRjaCAoZGV2LT5jb3JlLT5ib2FyZCkgewotI2lmZGVmIEhBVkVfQ1gyMjcwMgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfRFZCX1QxOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjI3MDJfYXR0YWNoKCZoYXVwcGF1Z2Vfbm92YXRfY29uZmlnLAotCQkJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCQkJCSAgICAgICAmaGF1cHBhdWdlX25vdmF0X2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9wbGxfYXR0YWNoKGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAotCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKLQkJCQkgICAgICAgJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTl4KTsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwLAorCQkJCSAgICZkdmJfcGxsX3Rob21zb25fZHR0NzU5eCk7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMTQwMF9EVkJfVDE6CiAJY2FzZSBDWDg4X0JPQVJEX0NPTkVYQU5UX0RWQl9UMToKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQl9UX0NYMjI3MDI6CiAJY2FzZSBDWDg4X0JPQVJEX1dJTkZBU1RfRFRWMTAwMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBjeDIyNzAyX2F0dGFjaCgmY29ubmV4YW50X3JlZmJvYXJkX2NvbmZpZywKLQkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjI3MDJfYXR0YWNoLAorCQkJCQkgICAgICAgJmNvbm5leGFudF9yZWZib2FyZF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkgICAmZHZiX3BsbF90aG9tc29uX2R0dDc1NzkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9XSU5GQVNUX0RUVjIwMDBIOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDBMUDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBjeDIyNzAyX2F0dGFjaCgmaGF1cHBhdWdlX2h2cjExMDBfY29uZmlnLAotCQkJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyMjcwMl9hdHRhY2gsCisJCQkJCSAgICAgICAmaGF1cHBhdWdlX2h2cjExMDBfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewotCQkJZHZiX3BsbF9hdHRhY2goZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCi0JCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwLAotCQkJCSAgICAgICAmZHZiX3BsbF9mbWQxMjE2bWUpOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCisJCQkJICAgJmR2Yl9wbGxfZm1kMTIxNm1lKTsKIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9NVDM1MikgfHwgZGVmaW5lZChIQVZFX1pMMTAzNTMpCi0JY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1RfUExVUzoKLSNpZmRlZiBIQVZFX01UMzUyCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZkdmljb19mdXNpb25oZHR2LAotCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDIyNzAyX2F0dGFjaCwKKwkJCQkJICAgICAgICZoYXVwcGF1Z2VfaHZyMTMwMF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkgICAmZHZiX3BsbF9mbWQxMjE2bWUpOworCQl9CisJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX1BMVVM6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0diwKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCSAgIE5VTEwsICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CiAJCQlicmVhazsKIAkJfQotI2VuZGlmCi0jaWZkZWYgSEFWRV9aTDEwMzUzCiAJCS8qIFpMMTAzNTMgcmVwbGFjZXMgTVQzNTIgb24gbGF0ZXIgY2FyZHMgKi8KLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSB6bDEwMzUzX2F0dGFjaCgmZHZpY29fZnVzaW9uaGR0dl9wbHVzX3YxXzEsCi0JCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X3BsdXNfdjFfMSwKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9wbGxfYXR0YWNoKGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAotCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKLQkJCQkgICAgICAgJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NTc5KTsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYwLAorCQkJCSAgIE5VTEwsICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CiAJCX0KLSNlbmRpZgogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMOgotI2lmZGVmIEhBVkVfTVQzNTIKIAkJLyogVGhlIHRpbiBib3ggc2F5cyBERUUxNjAxLCBidXQgaXQgc2VlbXMgdG8gYmUgRFRUNzU3OQogCQkgKiBjb21wYXRpYmxlLCB3aXRoIGEgc2xpZ2h0bHkgZGlmZmVyZW50IE1UMzUyIEFHQyBnYWluLiAqLwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG10MzUyX2F0dGFjaCgmZHZpY29fZnVzaW9uaGR0dl9kdWFsLAotCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X2R1YWwsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICBOVUxMLCAmZHZiX3BsbF90aG9tc29uX2R0dDc1NzkpOwogCQkJYnJlYWs7CiAJCX0KLSNlbmRpZgotI2lmZGVmIEhBVkVfWkwxMDM1MwogCQkvKiBaTDEwMzUzIHJlcGxhY2VzIE1UMzUyIG9uIGxhdGVyIGNhcmRzICovCi0JCWRldi0+ZHZiLmZyb250ZW5kID0gemwxMDM1M19hdHRhY2goJmR2aWNvX2Z1c2lvbmhkdHZfcGx1c192MV8xLAotCQkJCQkJICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0dl9wbHVzX3YxXzEsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Rob21zb25fZHR0NzU3OSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICBOVUxMLCAmZHZiX3BsbF90aG9tc29uX2R0dDc1NzkpOwogCQl9Ci0jZW5kaWYKIAkJYnJlYWs7Ci0jZW5kaWYgLyogSEFWRV9NVDM1MiB8fCBIQVZFX1pMMTAzNTMgKi8KLSNpZmRlZiBIQVZFX01UMzUyCiAJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfRFZCX1QxOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG10MzUyX2F0dGFjaCgmZHZpY29fZnVzaW9uaGR0diwKLQkJCQkJCSAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsCisJCQkJCSAgICAgICAmZHZpY29fZnVzaW9uaGR0diwKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKLQkJCWR2Yl9wbGxfYXR0YWNoKGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAotCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKLQkJCQkgICAgICAgJmR2Yl9wbGxfbGdfejIwMSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICBOVUxMLCAmZHZiX3BsbF9sZ196MjAxKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQl9UOgogCWNhc2UgQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1Q6CiAJY2FzZSBDWDg4X0JPQVJEX0FEU1RFQ0hfRFZCX1RfUENJOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG10MzUyX2F0dGFjaCgmZG50dl9saXZlX2R2YnRfY29uZmlnLAotCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwKKwkJCQkJICAgICAgICZkbnR2X2xpdmVfZHZidF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Vua25vd25fMSk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICBOVUxMLCAmZHZiX3BsbF91bmtub3duXzEpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQ1g4OF9CT0FSRF9ETlRWX0xJVkVfRFZCX1RfUFJPOgogI2lmZGVmIEhBVkVfVlAzMDU0X0kyQwogCQlkZXYtPmNvcmUtPnBsbF9hZGRyID0gMHg2MTsKIAkJZGV2LT5jb3JlLT5wbGxfZGVzYyA9ICZkdmJfcGxsX2ZtZDEyMTZtZTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBtdDM1Ml9hdHRhY2goJmRudHZfbGl2ZV9kdmJ0X3Byb19jb25maWcsCisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZkbnR2X2xpdmVfZHZidF9wcm9fY29uZmlnLAogCQkJJigoc3RydWN0IHZwMzA1NF9pMmNfc3RhdGUgKilkZXYtPmNhcmRfcHJpdiktPmFkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGRudHZfbGl2ZV9kdmJ0X3Byb190dW5lcl9zZXRfcGFyYW1zOwpAQCAtNjUxLDMwICs2MjksMjYgQEAKIAkJcHJpbnRrKCIlczogYnVpbHQgd2l0aG91dCB2cDMwNTQgc3VwcG9ydFxuIiwgZGV2LT5jb3JlLT5uYW1lKTsKICNlbmRpZgogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfWkwxMDM1MwogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWX0RWQl9UX0hZQlJJRDoKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CiAJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF90aG9tc29uX2ZlNjYwMDsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSB6bDEwMzUzX2F0dGFjaCgmZHZpY29fZnVzaW9uaGR0dl9oeWJyaWQsCi0JCQkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh6bDEwMzUzX2F0dGFjaCwKKwkJCQkJICAgICAgICZkdmljb19mdXNpb25oZHR2X2h5YnJpZCwKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBkdmljb19oeWJyaWRfdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfT1I1MTEzMgogCWNhc2UgQ1g4OF9CT0FSRF9QQ0hEVFZfSEQzMDAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IG9yNTExMzJfYXR0YWNoKCZwY2hkdHZfaGQzMDAwLAotCQkJCQkJICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG9yNTExMzJfYXR0YWNoLAorCQkJCQkgICAgICAgJnBjaGR0dl9oZDMwMDAsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3Rob21zb25fZHR0NzYxeCk7CisJCQlkdmJfYXR0YWNoKGR2Yl9wbGxfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKKwkJCQkgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCwKKwkJCQkgICAmZHZiX3BsbF90aG9tc29uX2R0dDc2MXgpOwogCQl9CiAJCWJyZWFrOwotI2VuZGlmCi0jaWZkZWYgSEFWRV9MR0RUMzMwWAogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzNfR09MRF9ROgogCQlkZXYtPnRzX2dlbl9jbnRybCA9IDB4MDg7CiAJCXsKQEAgLTY5MCw4ICs2NjQsOSBAQAogCQlmdXNpb25oZHR2XzNfZ29sZC5wbGxfcmZfc2V0ID0gbGdkdDMzMHhfcGxsX3JmX3NldDsKIAkJZGV2LT5jb3JlLT5wbGxfYWRkciA9IDB4NjE7CiAJCWRldi0+Y29yZS0+cGxsX2Rlc2MgPSAmZHZiX3BsbF9taWNyb3R1bmVfNDA0MjsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBsZ2R0MzMweF9hdHRhY2goJmZ1c2lvbmhkdHZfM19nb2xkLAotCQkJCQkJICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJCQkJICAgICAgICZmdXNpb25oZHR2XzNfZ29sZCwKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBsZ2R0MzMwMl90dW5lcl9zZXRfcGFyYW1zOwogCQl9CkBAIC03MDksOCArNjg0LDkgQEAKIAkJbWRlbGF5KDIwMCk7CiAJCWRldi0+Y29yZS0+cGxsX2FkZHIgPSAweDYxOwogCQlkZXYtPmNvcmUtPnBsbF9kZXNjID0gJmR2Yl9wbGxfdGhvbXNvbl9kdHQ3NjF4OwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGxnZHQzMzB4X2F0dGFjaCgmZnVzaW9uaGR0dl8zX2dvbGQsCi0JCQkJCQkgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfM19nb2xkLAorCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAyX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KQEAgLTcyNiw4ICs3MDIsOSBAQAogCQltZGVsYXkoMTAwKTsKIAkJY3hfc2V0KE1PX0dQMF9JTywgMSk7CiAJCW1kZWxheSgyMDApOwotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGxnZHQzMzB4X2F0dGFjaCgmZnVzaW9uaGR0dl81X2dvbGQsCi0JCQkJCQkgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMHhfYXR0YWNoLAorCQkJCQkgICAgICAgJmZ1c2lvbmhkdHZfNV9nb2xkLAorCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAzX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KQEAgLTc0Myw1MiArNzIwLDUxIEBACiAJCW1kZWxheSgxMDApOwogCQljeF9zZXQoTU9fR1AwX0lPLCAxKTsKIAkJbWRlbGF5KDIwMCk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gbGdkdDMzMHhfYXR0YWNoKCZwY2hkdHZfaGQ1NTAwLAotCQkJCQkJICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGxnZHQzMzB4X2F0dGFjaCwKKwkJCQkJICAgICAgICZwY2hkdHZfaGQ1NTAwLAorCQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGxnZHQzMzAzX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTlhUMjAwWAogCWNhc2UgQ1g4OF9CT0FSRF9BVElfSERUVldPTkRFUjoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgmYXRpX2hkdHZ3b25kZXIsCi0JCQkJCQkgJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsCisJCQkJCSAgICAgICAmYXRpX2hkdHZ3b25kZXIsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwKLQkJCQkgICAgICAgJmRldi0+Y29yZS0+aTJjX2FkYXAsCi0JCQkJICAgICAgICZkdmJfcGxsX3R1djEyMzZkKTsKKwkJCWR2Yl9hdHRhY2goZHZiX3BsbF9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLAorCQkJCSAgIE5VTEwsICZkdmJfcGxsX3R1djEyMzZkKTsKIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfQ1gyNDEyMwogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBjeDI0MTIzX2F0dGFjaCgmaGF1cHBhdWdlX25vdmFzX2NvbmZpZywKLQkJCSZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQkJCQkgICAgICAgJmhhdXBwYXVnZV9ub3Zhc19jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5jb3JlLT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewotCQkJaXNsNjQyMV9hdHRhY2goZGV2LT5kdmIuZnJvbnRlbmQsICZkZXYtPmNvcmUtPmkyY19hZGFwLAotCQkJCSAgICAgICAweDA4LCAweDAwLCAweDAwKTsKKwkJCWR2Yl9hdHRhY2goaXNsNjQyMV9hdHRhY2gsIGRldi0+ZHZiLmZyb250ZW5kLAorCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwLCAweDA4LCAweDAwLCAweDAwKTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfS1dPUkxEX0RWQlNfMTAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGN4MjQxMjNfYXR0YWNoKCZrd29ybGRfZHZic18xMDBfY29uZmlnLAotCQkJJmRldi0+Y29yZS0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDEyM19hdHRhY2gsCisJCQkJCSAgICAgICAma3dvcmxkX2R2YnNfMTAwX2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGt3b3JsZF9kdmJzXzEwMF9zZXRfdm9sdGFnZTsKIAkJfQogCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfR0VOSUFURUNIX0RWQlM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gY3gyNDEyM19hdHRhY2goJmdlbmlhdGVjaF9kdmJzX2NvbmZpZywKLQkJCQkJCSAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGN4MjQxMjNfYXR0YWNoLAorCQkJCQkgICAgICAgJmdlbmlhdGVjaF9kdmJzX2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmNvcmUtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmNvcmUtPnByZXZfc2V0X3ZvbHRhZ2UgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IGdlbmlhdGVjaF9kdmJzX3NldF92b2x0YWdlOwogCQl9CiAJCWJyZWFrOwotI2VuZGlmCiAJZGVmYXVsdDoKIAkJcHJpbnRrKCIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgZGV2LT5jb3JlLT5uYW1lKTsKQEAgLTkwOCw4ICs4ODQsMTAgQEAKIAkuaWRfdGFibGUgPSBjeDg4MDJfcGNpX3RibCwKIAkucHJvYmUgICAgPSBkdmJfcHJvYmUsCiAJLnJlbW92ZSAgID0gX19kZXZleGl0X3AoZHZiX3JlbW92ZSksCisjaWZkZWYgQ09ORklHX1BNCiAJLnN1c3BlbmQgID0gY3g4ODAyX3N1c3BlbmRfY29tbW9uLAogCS5yZXN1bWUgICA9IGN4ODgwMl9yZXN1bWVfY29tbW9uLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGR2Yl9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IDcwNjYzODAuLjI3YjVkYmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC03LDYgKzcsOSBAQAogICAgIChjKSAyMDAyIFl1cmlqIFN5c29ldiA8eXVyaWpAbmF0dXJlc29mdC5uZXQ+CiAgICAgKGMpIDE5OTktMjAwMyBHZXJkIEtub3JyIDxrcmF4ZWxAYnl0ZXNleC5vcmc+CiAKKyAgICAoYykgMjAwNSBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKwktIE11bHRpdHVuZXIgc3VwcG9ydCBhbmQgaTJjIGFkZHJlc3MgYmluZGluZworCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCkBAIC00MCw2ICs0MywxMSBAQAogbW9kdWxlX3BhcmFtKGkyY19zY2FuLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpMmNfc2Nhbiwic2NhbiBpMmMgYnVzIGF0IGluc21vZCB0aW1lIik7CiAKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaTJjX3VkZWxheSA9IDU7Cittb2R1bGVfcGFyYW0oaTJjX3VkZWxheSwgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaTJjX3VkZWxheSwiaTJjIGRlbGF5IGF0IGluc21vZCB0aW1lLCBpbiB1c2VjcyAiCisJCSIoc2hvdWxkIGJlIDUgb3IgaGlnaGVyKS4gTG93ZXIgdmFsdWUgbWVhbnMgaGlnaGVyIGJ1cyBzcGVlZC4iKTsKKwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGZtdCwgYXJnLi4uKQlpZiAoaTJjX2RlYnVnID49IGxldmVsKSBcCiAJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiAiIGZtdCwgY29yZS0+bmFtZSAsICMjIGFyZykKIApAQCAtMTU1LDcgKzE2Myw2IEBACiAJLmdldHNkYSAgPSBjeDg4MDBfYml0X2dldHNkYSwKIAkuZ2V0c2NsICA9IGN4ODgwMF9iaXRfZ2V0c2NsLAogCS51ZGVsYXkgID0gMTYsCi0JLm1kZWxheSAgPSAxMCwKIAkudGltZW91dCA9IDIwMCwKIH07CiAKQEAgLTE5OSw2ICsyMDYsMTEgQEAKIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwogaW50IGN4ODhfaTJjX2luaXQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IHBjaV9kZXYgKnBjaSkKIHsKKwkvKiBQcmV2ZW50cyB1c2FnZSBvZiBpbnZhbGlkIGRlbGF5IHZhbHVlcyAqLworCWlmIChpMmNfdWRlbGF5PDUpCisJCWkyY191ZGVsYXk9NTsKKwljeDg4MDBfaTJjX2FsZ29fdGVtcGxhdGUudWRlbGF5PWkyY191ZGVsYXk7CisKIAltZW1jcHkoJmNvcmUtPmkyY19hZGFwLCAmY3g4ODAwX2kyY19hZGFwX3RlbXBsYXRlLAogCSAgICAgICBzaXplb2YoY29yZS0+aTJjX2FkYXApKTsKIAltZW1jcHkoJmNvcmUtPmkyY19hbGdvLCAmY3g4ODAwX2kyY19hbGdvX3RlbXBsYXRlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKaW5kZXggYzI1NTY0Ni4uODNlYmY3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCkBAIC0xMDcsNyArMTA3LDE1IEBACiAJCSAgIChncGlvICYgaXItPm1hc2tfa2V5ZG93bikgPyAiIGRvd24iIDogIiIsCiAJCSAgIChncGlvICYgaXItPm1hc2tfa2V5dXApID8gIiB1cCIgOiAiIik7CiAKLQlpZiAoaXItPm1hc2tfa2V5ZG93bikgeworCWlmIChpci0+Y29yZS0+Ym9hcmQgPT0gQ1g4OF9CT0FSRF9OT1JXT09EX01JQ1JPKSB7CisJCXUzMiBncGlvX2tleSA9IGN4X3JlYWQoTU9fR1AwX0lPKTsKKworCQlkYXRhID0gKGRhdGEgPDwgNCkgfCAoKGdwaW9fa2V5ICYgMHhmMCkgPj4gNCk7CisKKwkJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXQsICZpci0+aXIsIGRhdGEsIGRhdGEpOworCQlpcl9pbnB1dF9ub2tleShpci0+aW5wdXQsICZpci0+aXIpOworCisJfSBlbHNlIGlmIChpci0+bWFza19rZXlkb3duKSB7CiAJCS8qIGJpdCBzZXQgb24ga2V5ZG93biAqLwogCQlpZiAoZ3BpbyAmIGlyLT5tYXNrX2tleWRvd24pIHsKIAkJCWlyX2lucHV0X2tleWRvd24oaXItPmlucHV0LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKQEAgLTE4Nyw2ICsxOTUsNyBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNFMl9TMToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX05PVkFTUExVU19TMToKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjExMDA6CisJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwOgogCQlpcl9jb2RlcyA9IGlyX2NvZGVzX2hhdXBwYXVnZV9uZXc7CiAJCWlyX3R5cGUgPSBJUl9UWVBFX1JDNTsKIAkJaXItPnNhbXBsaW5nID0gMTsKQEAgLTI0OCw2ICsyNTcsMTMgQEAKIAkJaXJfdHlwZSA9IElSX1RZUEVfUEQ7CiAJCWlyLT5zYW1wbGluZyA9IDB4ZmYwMDsgLyogYWRkcmVzcyAqLwogCQlicmVhazsKKwljYXNlIENYODhfQk9BUkRfTk9SV09PRF9NSUNSTzoKKwkJaXJfY29kZXMgICAgICAgICA9IGlyX2NvZGVzX25vcndvb2Q7CisJCWlyLT5ncGlvX2FkZHIgICAgPSBNT19HUDFfSU87CisJCWlyLT5tYXNrX2tleWNvZGUgPSAweDBlOworCQlpci0+bWFza19rZXl1cCAgID0gMHg4MDsKKwkJaXItPnBvbGxpbmcgICAgICA9IDUwOyAvKiBtcyAqLworCQlicmVhazsKIAljYXNlIENYODhfQk9BUkRfTlBHVEVDSF9SRUFMVFZfVE9QMTBGTToKIAkJaXJfY29kZXMgPSBpcl9jb2Rlc19ucGd0ZWNoOwogCQlpci0+Z3Bpb19hZGRyID0gTU9fR1AwX0lPOwpAQCAtNDAyLDYgKzQxOCw3IEBACiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9OT1ZBU0UyX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfTk9WQVNQTFVTX1MxOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEwMDoKKwljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjEzMDA6CiAJCWlyY29kZSA9IGlyX2RlY29kZV9iaXBoYXNlKGlyLT5zYW1wbGVzLCBpci0+c2NvdW50LCA1LCA3KTsKIAkJaXJfZHByaW50aygiYmlwaGFzZSBkZWNvZGVkOiAleFxuIiwgaXJjb2RlKTsKIAkJaWYgKChpcmNvZGUgJiAweGZmZmZmMDAwKSAhPSAweDMwMDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKaW5kZXggNTc4NWMzNC4uNzQxZTdjNWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXR2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC10dmF1ZGlvLmMKQEAgLTUyLDcgKzUyLDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgImN4ODguaCIKQEAgLTEzOCwxNCArMTM3LDEwIEBACiB7CiAJdTMyIHZvbHVtZTsKIAotI2lmbmRlZiBDT05GSUdfVklERU9fQ1g4OF9BTFNBCiAJLyogcmVzdGFydCBkbWE7IFRoaXMgYXZvaWRzIGJ1enogaW4gTklDQU0gYW5kIGlzIGdvb2QgaW4gb3RoZXJzICAqLwogCWN4ODhfc3RvcF9hdWRpb19kbWEoY29yZSk7Ci0jZW5kaWYKIAljeF93cml0ZShBVURfUkFURV9USFJFU19ETUQsIDB4MDAwMDAwQzApOwotI2lmbmRlZiBDT05GSUdfVklERU9fQ1g4OF9BTFNBCiAJY3g4OF9zdGFydF9hdWRpb19kbWEoY29yZSk7Ci0jZW5kaWYKIAogCWlmIChjeDg4X2JvYXJkc1tjb3JlLT5ib2FyZF0uYmxhY2tiaXJkKSB7CiAJCS8qIHNldHMgc291bmQgaW5wdXQgZnJvbSBleHRlcm5hbCBhZGMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDk0YzkyYmEuLmZiYzc5ZTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtNDk3LDYgKzQ5Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgc3RvcF92aWRlb19kbWEoc3RydWN0IGN4ODgwMF9kZXYgICAgKmRldikKIHsKIAlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gZGV2LT5jb3JlOwpAQCAtNTEyLDYgKzUxMyw3IEBACiAJY3hfY2xlYXIoTU9fVklEX0lOVE1TSywgMHgwZjAwMTEpOwogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgcmVzdGFydF92aWRlb19xdWV1ZShzdHJ1Y3QgY3g4ODAwX2RldiAgICAqZGV2LAogCQkJICAgICAgIHN0cnVjdCBjeDg4X2RtYXF1ZXVlICpxKQpAQCAtMjAxNyw2ICsyMDE5LDcgQEAKIAlrZnJlZShkZXYpOwogfQogCisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGN4ODgwMF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGN4ODgwMF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKQEAgLTIwOTIsNiArMjA5NSw3IEBACiAKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yMTEyLDkgKzIxMTYsMTAgQEAKIAkuaWRfdGFibGUgPSBjeDg4MDBfcGNpX3RibCwKIAkucHJvYmUgICAgPSBjeDg4MDBfaW5pdGRldiwKIAkucmVtb3ZlICAgPSBfX2RldmV4aXRfcChjeDg4MDBfZmluaWRldiksCi0KKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCAgPSBjeDg4MDBfc3VzcGVuZCwKIAkucmVzdW1lICAgPSBjeDg4MDBfcmVzdW1lLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgaW50IGN4ODgwMF9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12cDMwNTQtaTJjLmMKaW5kZXggNzUxYTc1NC4uMmI0ZjE5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdnAzMDU0LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZwMzA1NC1pMmMuYwpAQCAtMTAwLDcgKzEwMCw2IEBACiAJLmdldHNkYSAgPSB2cDMwNTRfYml0X2dldHNkYSwKIAkuZ2V0c2NsICA9IHZwMzA1NF9iaXRfZ2V0c2NsLAogCS51ZGVsYXkgID0gMTYsCi0JLm1kZWxheSAgPSAxMCwKIAkudGltZW91dCA9IDIwMCwKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCmluZGV4IGU3ODEwOTUuLjg5ZjEyZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaApAQCAtMTk3LDYgKzE5NywxMCBAQAogI2RlZmluZSBDWDg4X0JPQVJEX05QR1RFQ0hfUkVBTFRWX1RPUDEwRk0gIDUwCiAjZGVmaW5lIENYODhfQk9BUkRfV0lORkFTVF9EVFYyMDAwSCAgICAgICAgNTEKICNkZWZpbmUgQ1g4OF9CT0FSRF9HRU5JQVRFQ0hfRFZCUyAgICAgICAgICA1MgorI2RlZmluZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIzMDAwICAgICAgIDUzCisjZGVmaW5lIENYODhfQk9BUkRfTk9SV09PRF9NSUNSTyAgICAgICAgICAgNTQKKyNkZWZpbmUgQ1g4OF9CT0FSRF9URV9EVFZfMjUwX09FTV9TV0FOTiAgICA1NQorI2RlZmluZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlIxMzAwICAgICAgIDU2CiAKIGVudW0gY3g4OF9pdHlwZSB7CiAJQ1g4OF9WTVVYX0NPTVBPU0lURTEgPSAxLApAQCAtNTQ1LDYgKzU0OSw3IEBACiAKIGV4dGVybiB2b2lkIGN4ODhfY2FyZF9saXN0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBwY2lfZGV2ICpwY2kpOwogZXh0ZXJuIHZvaWQgY3g4OF9jYXJkX3NldHVwKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUpOworZXh0ZXJuIHZvaWQgY3g4OF9jYXJkX3NldHVwX3ByZV9pMmMoc3RydWN0IGN4ODhfY29yZSAqY29yZSk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDg4LXR2YXVkaW8uYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L0tjb25maWcKaW5kZXggZGZiMTViZi4uOTI4NWE1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9LY29uZmlnCkBAIC01LDcgKzUsOCBAQAogCXNlbGVjdCBWSURFT19UVU5FUgogCXNlbGVjdCBWSURFT19UVkVFUFJPTQogCXNlbGVjdCBWSURFT19JUgotCXNlbGVjdCBWSURFT19TQUE3MTFYCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KKwlzZWxlY3QgVklERU9fVFZQNTE1MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIEVtcGlhIDI4eHggYmFzZWQgVFYgY2FyZHMuCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggMmE0NjFkZGU0Li4yMGRmNjU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtdmlkZW8uYwpAQCAtMTc0LDcgKzE3NCw3IEBACiAKIAlyb3V0ZS5pbnB1dCA9IElOUFVUKGRldi0+Y3RsX2lucHV0KS0+dm11eDsKIAlyb3V0ZS5vdXRwdXQgPSAwOwotCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0lOVF9SRVNFVCwgTlVMTCk7CisJZW0yOHh4X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX1JFU0VULCAwKTsKIAllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOwogCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NUUkVBTU9OLCBOVUxMKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKaW5kZXggM2JmN2FjNC4uYzFhMzc3ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCkBAIC04MzIsOCArODMyLDcgQEAKIHN0YXRpYyBpbnQgX19kZXZpbml0IGtzMDEyN19pbml0X21vZHVsZSh2b2lkKQogewogCWluaXRfcmVnX2RlZmF1bHRzKCk7Ci0JaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfa3MwMTI3KTsKIH0KIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGtzMDEyN19jbGVhbnVwX21vZHVsZSh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdjUxMS5jCmluZGV4IDFiMDdhNjEuLjVkOGNkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y1MTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NTExLmMKQEAgLTMwMSwxMCArMzAxLDExIEBACiBzdGF0aWMgc3RydWN0IHN5bWJvbGljX2xpc3QgdXJiX2Vycmxpc3RbXSA9IHsKIAl7IC1FTk9TUiwJIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiIH0sCiAJeyAtRVBJUEUsCSJTdGFsbGVkIChkZXZpY2Ugbm90IHJlc3BvbmRpbmcpIiB9LAotCXsgLUVPVkVSRkxPVywJIkJhYmJsZSAoYmFkIGNhYmxlPykiIH0sCisJeyAtRU9WRVJGTE9XLAkiQmFiYmxlIChkZXZpY2Ugc2VuZHMgdG9vIG11Y2ggZGF0YSkiIH0sCiAJeyAtRVBST1RPLAkiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSIgfSwKLQl7IC1FSUxTRVEsCSJDUkMvVGltZW91dCIgfSwKLQl7IC1FVElNRURPVVQsCSJOQUsgKGRldmljZSBkb2VzIG5vdCByZXNwb25kKSIgfSwKKwl7IC1FSUxTRVEsCSJDUkMvVGltZW91dCAoYmFkIGNhYmxlPykiIH0sCisJeyAtRVRJTUUsCSJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byB0b2tlbiIgfSwKKwl7IC1FVElNRURPVVQsCSJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBjb21tYW5kIiB9LAogCXsgLTEsIE5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwppbmRleCA3ZTcyN2ZlLi5hNTIxNzFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZwpAQCAtNSw4ICs1LDYgQEAKIAlzZWxlY3QgVklERU9fVFVORVIKIAlzZWxlY3QgVklERU9fVFZFRVBST00KIAlzZWxlY3QgVklERU9fQ1gyMzQxWAotCXNlbGVjdCBWSURFT19TQUE3MTFYCi0Jc2VsZWN0IFZJREVPX01TUDM0MDAKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCAyMzQxNiBiYXNlZAogCSAgdXNiMiBwZXJzb25hbCB2aWRlbyByZWNvcmRlciBkZXZpY2VzLgpAQCAtMTQsNiArMTIsMjAgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHB2cnVzYjIKIAorY29uZmlnIFZJREVPX1BWUlVTQjJfMjlYWFgKKwlib29sICJIYXVwcGF1Z2UgV2luVFYtUFZSIFVTQjIgc3VwcG9ydCBmb3IgMjl4eHggbW9kZWwgc2VyaWVzIgorCWRlcGVuZHMgb24gVklERU9fUFZSVVNCMiAmJiBFWFBFUklNRU5UQUwKKwlzZWxlY3QgVklERU9fU0FBNzExWAorCXNlbGVjdCBWSURFT19NU1AzNDAwCisJLS0taGVscC0tLQorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBXaW5UVi1QVlIgVVNCMiBkZXZpY2VzIHdob3NlIAorCSAgbW9kZWwgbnVtYmVyIGlzIG9mIHRoZSBmb3JtICIyOXh4eCIgKGxlYWRpbmcgcHJlZml4IG9mICIyOSIgCisJICBmb2xsb3dlZCBieSAzIGRpZ2l0cykuCisJICBUbyBzZWUgaWYgeW91IG1heSBuZWVkIHRoaXMgb3B0aW9uLCBleGFtaW5lIHRoZSB3aGl0ZQorCSAgc3RpY2tlciBvbiB0aGUgdW5kZXJzaWRlIG9mIHlvdXIgZGV2aWNlLgorCisJICBJZiB5b3UgYXJlIGluIGRvdWJ0LCBzYXkgWS4KKwogY29uZmlnIFZJREVPX1BWUlVTQjJfMjRYWFgKIAlib29sICJIYXVwcGF1Z2UgV2luVFYtUFZSIFVTQjIgc3VwcG9ydCBmb3IgMjR4eHggbW9kZWwgc2VyaWVzIgogCWRlcGVuZHMgb24gVklERU9fUFZSVVNCMiAmJiBFWFBFUklNRU5UQUwKQEAgLTYwLDMgKzcyLDUgQEAKIAkgIFlvdSBkbyBub3QgbmVlZCB0byBzZWxlY3QgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuCiAJICBvbiBkZWJ1Z2dpbmcgdGhlIGRyaXZlciBvciBwZXJmb3JtaW5nIGEgbWFudWFsIGZpcm13YXJlCiAJICBleHRyYWN0aW9uLgorCisJICBJZiB5b3UgYXJlIGluIGRvdWJ0LCBzYXkgTi4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQppbmRleCAwMmU0MTQyLi42OWIzZTQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCkBAIC0xLDEwICsxLDYgQEAKIG9iai1wdnJ1c2IyLXN5c2ZzLSQoQ09ORklHX1ZJREVPX1BWUlVTQjJfU1lTRlMpIDo9IHB2cnVzYjItc3lzZnMubwogb2JqLXB2cnVzYjItZGVidWdpZmMtJChDT05GSUdfVklERU9fUFZSVVNCMl9ERUJVR0lGQykgOj0gcHZydXNiMi1kZWJ1Z2lmYy5vCiAKLW9iai1wdnJ1c2IyLTI0eHh4LSQoQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgpIDo9IFwKLQkJICAgcHZydXNiMi1jeDI1ODR4LXY0bC5vIFwKLQkJICAgcHZydXNiMi13bTg3NzUubwotCiBwdnJ1c2IyLW9ianMJOj0gcHZydXNiMi1pMmMtY29yZS5vIHB2cnVzYjItaTJjLWNtZC12NGwyLm8gXAogCQkgICBwdnJ1c2IyLWF1ZGlvLm8gcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5vIFwKIAkJICAgcHZydXNiMi1lbmNvZGVyLm8gcHZydXNiMi12aWRlby12NGwubyBcCkBAIC0xMiw3ICs4LDcgQEAKIAkJICAgcHZydXNiMi1tYWluLm8gcHZydXNiMi1oZHcubyBwdnJ1c2IyLXY0bDIubyBcCiAJCSAgIHB2cnVzYjItY3RybC5vIHB2cnVzYjItc3RkLm8gXAogCQkgICBwdnJ1c2IyLWNvbnRleHQubyBwdnJ1c2IyLWlvLm8gcHZydXNiMi1pb3JlYWQubyBcCi0JCSAgICQob2JqLXB2cnVzYjItMjR4eHgteSkgXAorCQkgICBwdnJ1c2IyLWN4MjU4NHgtdjRsLm8gcHZydXNiMi13bTg3NzUubyBcCiAJCSAgICQob2JqLXB2cnVzYjItc3lzZnMteSkgJChvYmotcHZydXNiMi1kZWJ1Z2lmYy15KQogCiBvYmotJChDT05GSUdfVklERU9fUFZSVVNCMikgKz0gcHZydXNiMi5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jdHJsLmMKaW5kZXggZmI2MTk4Zi4uYzc3ZGU4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3RybC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN0cmwuYwpAQCAtNDMsMTIgKzQzLDE3IEBACiAJCQlpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9iaXRtYXNrKSB7CiAJCQkJbWFzayAmPSBjcHRyLT5pbmZvLT5kZWYudHlwZV9iaXRtYXNrLnZhbGlkX2JpdHM7CiAJCQl9IGVsc2UgaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfaW50KSB7Ci0JCQkJaWYgKHZhbCA8IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5taW5fdmFsdWUpIHsKLQkJCQkJYnJlYWs7CisJCQkJaW50IGxpbTsKKwkJCQlsaW0gPSBjcHRyLT5pbmZvLT5kZWYudHlwZV9pbnQubWluX3ZhbHVlOworCQkJCWlmIChjcHRyLT5pbmZvLT5nZXRfbWluX3ZhbHVlKSB7CisJCQkJCWNwdHItPmluZm8tPmdldF9taW5fdmFsdWUoY3B0ciwmbGltKTsKIAkJCQl9Ci0JCQkJaWYgKHZhbCA+IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5tYXhfdmFsdWUpIHsKLQkJCQkJYnJlYWs7CisJCQkJaWYgKHZhbCA8IGxpbSkgYnJlYWs7CisJCQkJbGltID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1heF92YWx1ZTsKKwkJCQlpZiAoY3B0ci0+aW5mby0+Z2V0X21heF92YWx1ZSkgeworCQkJCQljcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKGNwdHIsJmxpbSk7CiAJCQkJfQorCQkJCWlmICh2YWwgPiBsaW0pIGJyZWFrOwogCQkJfSBlbHNlIGlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2VudW0pIHsKIAkJCQlpZiAodmFsID49IGNwdHItPmluZm8tPmRlZi50eXBlX2VudW0uY291bnQpIHsKIAkJCQkJYnJlYWs7CkBAIC05MSw3ICs5Niw5IEBACiAJaW50IHJldCA9IDA7CiAJaWYgKCFjcHRyKSByZXR1cm4gMDsKIAlMT0NLX1RBS0UoY3B0ci0+aGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJaWYgKGNwdHItPmluZm8tPnR5cGUgPT0gcHZyMl9jdGxfaW50KSB7CisJCWlmIChjcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKSB7CisJCQljcHRyLT5pbmZvLT5nZXRfbWF4X3ZhbHVlKGNwdHIsJnJldCk7CisJCX0gZWxzZSBpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9pbnQpIHsKIAkJCXJldCA9IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5tYXhfdmFsdWU7CiAJCX0KIAl9IHdoaWxlKDApOyBMT0NLX0dJVkUoY3B0ci0+aGR3LT5iaWdfbG9jayk7CkBAIC0xMDUsNyArMTEyLDkgQEAKIAlpbnQgcmV0ID0gMDsKIAlpZiAoIWNwdHIpIHJldHVybiAwOwogCUxPQ0tfVEFLRShjcHRyLT5oZHctPmJpZ19sb2NrKTsgZG8gewotCQlpZiAoY3B0ci0+aW5mby0+dHlwZSA9PSBwdnIyX2N0bF9pbnQpIHsKKwkJaWYgKGNwdHItPmluZm8tPmdldF9taW5fdmFsdWUpIHsKKwkJCWNwdHItPmluZm8tPmdldF9taW5fdmFsdWUoY3B0ciwmcmV0KTsKKwkJfSBlbHNlIGlmIChjcHRyLT5pbmZvLT50eXBlID09IHB2cjJfY3RsX2ludCkgewogCQkJcmV0ID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1pbl92YWx1ZTsKIAkJfQogCX0gd2hpbGUoMCk7IExPQ0tfR0lWRShjcHRyLT5oZHctPmJpZ19sb2NrKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCmluZGV4IGM4MGMyNmIuLmRmOGZlYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYwpAQCAtMjIxLDcgKzIyMSw3IEBACiBzdGF0aWMgdm9pZCBkZWNvZGVyX3Jlc2V0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQogewogCWludCByZXQ7Ci0JcmV0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9SRVNFVCxOVUxMKTsKKwlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1JFU0VULDApOwogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NDAgZGVjb2Rlcl9yZXNldCAocmV0PSVkKSIscmV0KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCmluZGV4IDE4YTcwNzMuLmM5NGY5N2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKQEAgLTMxNyw3ICszMTcsNyBAQAogCiAJaWYgKHJldCkgewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICJGYWlsZWQgdG8gY29uZmlndXJlIGN4MzI0MTYiKTsKKwkJCSAgICJGYWlsZWQgdG8gY29uZmlndXJlIGN4MjM0MTYiKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKQEAgLTMzNyw3ICszMzcsNyBAQAogCiAJaWYgKHJldCkgewogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBjeDMyNDE2IHZpZGVvIGlucHV0Iik7CisJCQkgICAiRmFpbGVkIHRvIGluaXRpYWxpemUgY3gyMzQxNiB2aWRlbyBpbnB1dCIpOwogCQlyZXR1cm4gcmV0OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LWludGVybmFsLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAppbmRleCAwZDZkYzMzLi4zNGIwOGZiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaApAQCAtMzMsNyArMzMsNiBAQAogCiAqLwogCi0jaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTQxLDMyICs0MCw2IEBACiAjaW5jbHVkZSAicHZydXNiMi1pby5oIgogI2luY2x1ZGUgPG1lZGlhL2N4MjM0MXguaD4KIAotLyogTGVnYWwgdmFsdWVzIGZvciB0aGUgU1JBVEUgc3RhdGUgdmFyaWFibGUgKi8KLSNkZWZpbmUgUFZSMl9DVkFMX1NSQVRFXzQ4IDAKLSNkZWZpbmUgUFZSMl9DVkFMX1NSQVRFXzQ0XzEgMQotCi0vKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSBBVURJT0JJVFJBVEUgc3RhdGUgdmFyaWFibGUgKi8KLSNkZWZpbmUgUFZSMl9DVkFMX0FVRElPQklUUkFURV8zODQgMAotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFXzMyMCAxCi0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0JJVFJBVEVfMjU2IDIKLSNkZWZpbmUgUFZSMl9DVkFMX0FVRElPQklUUkFURV8yMjQgMwotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFXzE5MiA0Ci0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0JJVFJBVEVfMTYwIDUKLSNkZWZpbmUgUFZSMl9DVkFMX0FVRElPQklUUkFURV8xMjggNgotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFXzExMiA3Ci0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0JJVFJBVEVfOTYgOAotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFXzgwIDkKLSNkZWZpbmUgUFZSMl9DVkFMX0FVRElPQklUUkFURV82NCAxMAotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFXzU2IDExCi0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0JJVFJBVEVfNDggMTIKLSNkZWZpbmUgUFZSMl9DVkFMX0FVRElPQklUUkFURV8zMiAxMwotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9CSVRSQVRFX1ZCUiAxNAotCi0vKiBMZWdhbCB2YWx1ZXMgZm9yIHRoZSBBVURJT0VNUEhBU0lTIHN0YXRlIHZhcmlhYmxlICovCi0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0VNUEhBU0lTX05PTkUgMAotI2RlZmluZSBQVlIyX0NWQUxfQVVESU9FTVBIQVNJU181MF8xNSAxCi0jZGVmaW5lIFBWUjJfQ1ZBTF9BVURJT0VNUEhBU0lTX0NDSVRUIDIKLQogLyogTGVnYWwgdmFsdWVzIGZvciBQVlIyX0NJRF9IU00gKi8KICNkZWZpbmUgUFZSMl9DVkFMX0hTTV9GQUlMIDAKICNkZWZpbmUgUFZSMl9DVkFMX0hTTV9GVUxMIDEKQEAgLTEwNyw2ICs4MCw4IEBACiAKIAkvKiBDb250cm9sJ3MgaW1wbGVtZW50YXRpb24gKi8KIAlwdnIyX2N0bGZfZ2V0X3ZhbHVlIGdldF92YWx1ZTsgICAgICAvKiBHZXQgaXRzIHZhbHVlICovCisJcHZyMl9jdGxmX2dldF92YWx1ZSBnZXRfbWluX3ZhbHVlOyAgLyogR2V0IG1pbmltdW0gYWxsb3dlZCB2YWx1ZSAqLworCXB2cjJfY3RsZl9nZXRfdmFsdWUgZ2V0X21heF92YWx1ZTsgIC8qIEdldCBtYXhpbXVtIGFsbG93ZWQgdmFsdWUgKi8KIAlwdnIyX2N0bGZfc2V0X3ZhbHVlIHNldF92YWx1ZTsgICAgICAvKiBTZXQgaXRzIHZhbHVlICovCiAJcHZyMl9jdGxmX3ZhbF90b19zeW0gdmFsX3RvX3N5bTsgICAgLyogQ3VzdG9tIGNvbnZlcnQgdmFsdWUtPnN5bWJvbCAqLwogCXB2cjJfY3RsZl9zeW1fdG9fdmFsIHN5bV90b192YWw7ICAgIC8qIEN1c3RvbSBjb252ZXJ0IHN5bWJvbC0+dmFsdWUgKi8KQEAgLTE5Myw5ICsxNjgsNyBAQAogCiAvKiBLbm93biBtYWpvciBoYXJkd2FyZSB2YXJpYW50cywga2V5ZWQgZnJvbSBkZXZpY2UgSUQgKi8KICNkZWZpbmUgUFZSMl9IRFdfVFlQRV8yOVhYWCAwCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKICNkZWZpbmUgUFZSMl9IRFdfVFlQRV8yNFhYWCAxCi0jZW5kaWYKIAogdHlwZWRlZiBpbnQgKCpwdnIyX2kyY19mdW5jKShzdHJ1Y3QgcHZyMl9oZHcgKix1OCx1OCAqLHUxNix1OCAqLCB1MTYpOwogI2RlZmluZSBQVlIyX0kyQ19GVU5DX0NOVCAxMjgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggYmUxZTVjYy4uODg2MDQzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTM4LDkgKzM4LDcgQEAKIAogc3RydWN0IHVzYl9kZXZpY2VfaWQgcHZyMl9kZXZpY2VfdGFibGVbXSA9IHsKIAlbUFZSMl9IRFdfVFlQRV8yOVhYWF0gPSB7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDI5MDApIH0sCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKIAlbUFZSMl9IRFdfVFlQRV8yNFhYWF0gPSB7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDI0MDApIH0sCi0jZW5kaWYKIAl7IH0KIH07CiAKQEAgLTQ4LDkgKzQ2LDcgQEAKIAogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZGV2aWNlX25hbWVzW10gPSB7CiAJW1BWUjJfSERXX1RZUEVfMjlYWFhdID0gIldpblRWIFBWUiBVU0IyIE1vZGVsIENhdGVnb3J5IDI5eHh4eCIsCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKIAlbUFZSMl9IRFdfVFlQRV8yNFhYWF0gPSAiV2luVFYgUFZSIFVTQjIgTW9kZWwgQ2F0ZWdvcnkgMjR4eHh4IiwKLSNlbmRpZgogfTsKIAogc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIHsKQEAgLTU4LDE0ICs1NCwxMiBAQAogCXVuc2lnbmVkIGludCBjbnQ7CiB9OwogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKIC8vIE5hbWVzIG9mIG90aGVyIGNsaWVudCBtb2R1bGVzIHRvIHJlcXVlc3QgZm9yIDI0eHh4IG1vZGVsIGhhcmR3YXJlCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfMjR4eHhbXSA9IHsKIAkiY3gyNTg0MCIsCiAJInR1bmVyIiwKIAkid204Nzc1IiwKIH07Ci0jZW5kaWYKIAogLy8gTmFtZXMgb2Ygb3RoZXIgY2xpZW50IG1vZHVsZXMgdG8gcmVxdWVzdCBmb3IgMjl4eHggbW9kZWwgaGFyZHdhcmUKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF8yOXh4eFtdID0gewpAQCAtNzksMTIgKzczLDEwIEBACiAJCXB2cjJfY2xpZW50XzI5eHh4LAogCQlzaXplb2YocHZyMl9jbGllbnRfMjl4eHgpL3NpemVvZihwdnIyX2NsaWVudF8yOXh4eFswXSksCiAJfSwKLSNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl8yNFhYWAogCVtQVlIyX0hEV19UWVBFXzI0WFhYXSA9IHsKIAkJcHZyMl9jbGllbnRfMjR4eHgsCiAJCXNpemVvZihwdnIyX2NsaWVudF8yNHh4eCkvc2l6ZW9mKHB2cjJfY2xpZW50XzI0eHh4WzBdKSwKIAl9LAotI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHB2cjJfaGR3ICp1bml0X3BvaW50ZXJzW1BWUl9OVU1dID0ge1sgMCAuLi4gUFZSX05VTS0xIF0gPSBOVUxMfTsKQEAgLTIyMSwxMSArMjEzLDEyIEBACiB9OwogI2RlZmluZSBNUEVHREVGX0NPVU5UIChzaXplb2YobXBlZ19pZHMpL3NpemVvZihtcGVnX2lkc1swXSkpCiAKLXN0YXRpYyBjb25zdCBjaGFyICpjb250cm9sX3ZhbHVlc19zcmF0ZVtdID0gewotCVtQVlIyX0NWQUxfU1JBVEVfNDhdICAgPSAiNDhLSHoiLAotCVtQVlIyX0NWQUxfU1JBVEVfNDRfMV0gPSAiNDQuMUtIeiIsCi19OwogCitzdGF0aWMgY29uc3QgY2hhciAqY29udHJvbF92YWx1ZXNfc3JhdGVbXSA9IHsKKwlbVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDBdICAgPSAiNDQuMSBrSHoiLAorCVtWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMF0gICA9ICI0OCBrSHoiLAorCVtWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMF0gICA9ICIzMiBrSHoiLAorfTsKIAogCiAKQEAgLTM2Miw2ICszNTUsNTAgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBjdHJsX2hyZXNfbWF4X2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCit7CisJLyogSWYgd2UncmUgZGVhbGluZyB3aXRoIGEgMjR4eHggZGV2aWNlLCBmb3JjZSB0aGUgaG9yaXpvbnRhbAorCSAgIG1heGltdW0gdG8gYmUgNzIwIG5vIG1hdHRlciB3aGF0LCBzaW5jZSB3ZSBjYW4ndCBnZXQgdGhlIGRldmljZQorCSAgIHRvIHdvcmsgcHJvcGVybHkgd2l0aCBhbnkgb3RoZXIgdmFsdWUuICBPdGhlcndpc2UganVzdCByZXR1cm4KKwkgICB0aGUgbm9ybWFsIHZhbHVlLiAqLworCSp2cCA9IGNwdHItPmluZm8tPmRlZi50eXBlX2ludC5tYXhfdmFsdWU7CisJaWYgKGNwdHItPmhkdy0+aGR3X3R5cGUgPT0gUFZSMl9IRFdfVFlQRV8yNFhYWCkgKnZwID0gNzIwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGN0cmxfaHJlc19taW5fZ2V0KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIsaW50ICp2cCkKK3sKKwkvKiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSAyNHh4eCBkZXZpY2UsIGZvcmNlIHRoZSBob3Jpem9udGFsCisJICAgbWluaW11bSB0byBiZSA3MjAgbm8gbWF0dGVyIHdoYXQsIHNpbmNlIHdlIGNhbid0IGdldCB0aGUgZGV2aWNlCisJICAgdG8gd29yayBwcm9wZXJseSB3aXRoIGFueSBvdGhlciB2YWx1ZS4gIE90aGVyd2lzZSBqdXN0IHJldHVybgorCSAgIHRoZSBub3JtYWwgdmFsdWUuICovCisJKnZwID0gY3B0ci0+aW5mby0+ZGVmLnR5cGVfaW50Lm1pbl92YWx1ZTsKKwlpZiAoY3B0ci0+aGR3LT5oZHdfdHlwZSA9PSBQVlIyX0hEV19UWVBFXzI0WFhYKSAqdnAgPSA3MjA7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF92cmVzX21heF9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQoreworCS8qIEFjdHVhbCBtYXhpbXVtIGRlcGVuZHMgb24gdGhlIHZpZGVvIHN0YW5kYXJkIGluIGVmZmVjdC4gKi8KKwlpZiAoY3B0ci0+aGR3LT5zdGRfbWFza19jdXIgJiBWNEwyX1NURF81MjVfNjApIHsKKwkJKnZwID0gNDgwOworCX0gZWxzZSB7CisJCSp2cCA9IDU3NjsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3RybF92cmVzX21pbl9nZXQoc3RydWN0IHB2cjJfY3RybCAqY3B0cixpbnQgKnZwKQoreworCS8qIEFjdHVhbCBtaW5pbXVtIGRlcGVuZHMgb24gZGV2aWNlIHR5cGUuICovCisJaWYgKGNwdHItPmhkdy0+aGR3X3R5cGUgPT0gUFZSMl9IRFdfVFlQRV8yNFhYWCkgeworCQkqdnAgPSA3NTsKKwl9IGVsc2UgeworCQkqdnAgPSAxNzsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgY3RybF9jeDIzNDF4X2lzX2RpcnR5KHN0cnVjdCBwdnIyX2N0cmwgKmNwdHIpCiB7CiAJcmV0dXJuIGNwdHItPmhkdy0+ZW5jX3N0YWxlICE9IDA7CkBAIC03MTksMTkgKzc1NiwyNyBAQAogCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9IUkVTLAogCQkuZGVmYXVsdF92YWx1ZSA9IDcyMCwKIAkJREVGUkVGKHJlc19ob3IpLAotCQlERUZJTlQoMzIwLDcyMCksCisJCURFRklOVCgxOSw3MjApLAorCQkvKiBIb29rIGluIGNoZWNrIGZvciBjbGFtcCBvbiBob3Jpem9udGFsIHJlc29sdXRpb24gaW4KKwkJICAgb3JkZXIgdG8gYXZvaWQgdW5zb2x2ZWQgcHJvYmxlbSBpbnZvbHZpbmcgY3gyNTg0MC4gKi8KKwkJLmdldF9tYXhfdmFsdWUgPSBjdHJsX2hyZXNfbWF4X2dldCwKKwkJLmdldF9taW5fdmFsdWUgPSBjdHJsX2hyZXNfbWluX2dldCwKIAl9LHsKIAkJLmRlc2MgPSAiVmVydGljYWwgY2FwdHVyZSByZXNvbHV0aW9uIiwKIAkJLm5hbWUgPSAicmVzb2x1dGlvbl92ZXIiLAogCQkuaW50ZXJuYWxfaWQgPSBQVlIyX0NJRF9WUkVTLAogCQkuZGVmYXVsdF92YWx1ZSA9IDQ4MCwKIAkJREVGUkVGKHJlc192ZXIpLAotCQlERUZJTlQoMjAwLDYyNSksCisJCURFRklOVCgxNyw1NzYpLAorCQkvKiBIb29rIGluIGNoZWNrIGZvciB2aWRlbyBzdGFuZGFyZCBhbmQgYWRqdXN0IG1heGltdW0KKwkJICAgZGVwZW5kaW5nIG9uIHRoZSBzdGFuZGFyZC4gKi8KKwkJLmdldF9tYXhfdmFsdWUgPSBjdHJsX3ZyZXNfbWF4X2dldCwKKwkJLmdldF9taW5fdmFsdWUgPSBjdHJsX3ZyZXNfbWluX2dldCwKIAl9LHsKIAkJLnY0bF9pZCA9IFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSwKLQkJLmRlc2MgPSAiU2FtcGxlIHJhdGUiLAorCQkuZGVmYXVsdF92YWx1ZSA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwLAorCQkuZGVzYyA9ICJBdWRpbyBTYW1wbGluZyBGcmVxdWVuY3kiLAogCQkubmFtZSA9ICJzcmF0ZSIsCi0JCS5kZWZhdWx0X3ZhbHVlID0gUFZSMl9DVkFMX1NSQVRFXzQ4LAogCQlERUZSRUYoc3JhdGUpLAogCQlERUZFTlVNKGNvbnRyb2xfdmFsdWVzX3NyYXRlKSwKIAl9LHsKQEAgLTkzNSwyMiArOTgwLDE4IEBACiAJc3RhdGljIGNvbnN0IGNoYXIgKmZ3X2ZpbGVzXzI5eHh4W10gPSB7CiAJCSJ2NGwtcHZydXNiMi0yOXh4eC0wMS5mdyIsCiAJfTsKLSNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl8yNFhYWAogCXN0YXRpYyBjb25zdCBjaGFyICpmd19maWxlc18yNHh4eFtdID0gewogCQkidjRsLXB2cnVzYjItMjR4eHgtMDEuZnciLAogCX07Ci0jZW5kaWYKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIGZ3X2ZpbGVfZGVmc1tdID0gewogCQlbUFZSMl9IRFdfVFlQRV8yOVhYWF0gPSB7CiAJCQlmd19maWxlc18yOXh4eCwKIAkJCXNpemVvZihmd19maWxlc18yOXh4eCkvc2l6ZW9mKGZ3X2ZpbGVzXzI5eHh4WzBdKSwKIAkJfSwKLSNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl8yNFhYWAogCQlbUFZSMl9IRFdfVFlQRV8yNFhYWF0gPSB7CiAJCQlmd19maWxlc18yNHh4eCwKIAkJCXNpemVvZihmd19maWxlc18yNHh4eCkvc2l6ZW9mKGZ3X2ZpbGVzXzI0eHh4WzBdKSwKIAkJfSwKLSNlbmRpZgogCX07CiAJaGR3LT5mdzFfc3RhdGUgPSBGVzFfU1RBVEVfRkFJTEVEOyAvLyBkZWZhdWx0IHJlc3VsdAogCkBAIC0yMjM3LDExICsyMjc4LDE0IEBACiAJfQogCiAJaWYgKGhkdy0+c3RkX2RpcnR5IHx8CisJICAgIGhkdy0+ZW5jX3N0YWxlIHx8CisJICAgIGhkdy0+c3JhdGVfZGlydHkgfHwKKwkgICAgaGR3LT5yZXNfdmVyX2RpcnR5IHx8CisJICAgIGhkdy0+cmVzX2hvcl9kaXJ0eSB8fAogCSAgICAwKSB7CiAJCS8qIElmIGFueSBvZiB0aGlzIGNoYW5nZXMsIHRoZW4gdGhlIGVuY29kZXIgbmVlZHMgdG8gYmUKIAkJICAgcmVjb25maWd1cmVkLCBhbmQgd2UgbmVlZCB0byByZXNldCB0aGUgc3RyZWFtLiAqLwogCQlzdGFsZV9zdWJzeXNfbWFzayB8PSAoMTw8UFZSMl9TVUJTWVNfQl9FTkNfQ0ZHKTsKLQkJc3RhbGVfc3Vic3lzX21hc2sgfD0gaGR3LT5zdWJzeXNfc3RyZWFtX21hc2s7CiAJfQogCiAJaWYgKGhkdy0+c3JhdGVfZGlydHkpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY2hpcHMtdjRsMi5jCmluZGV4IGZiZTYwMzkuLmVkM2U4MTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYwpAQCAtMjYsMTAgKzI2LDggQEAKICNpbmNsdWRlICJwdnJ1c2IyLWF1ZGlvLmgiCiAjaW5jbHVkZSAicHZydXNiMi10dW5lci5oIgogI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKICNpbmNsdWRlICJwdnJ1c2IyLWN4MjU4NHgtdjRsLmgiCiAjaW5jbHVkZSAicHZydXNiMi13bTg3NzUuaCIKLSNlbmRpZgogCiAjZGVmaW5lIHRyYWNlX2kyYyguLi4pIHB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkMsX19WQV9BUkdTX18pCiAKQEAgLTcxLDcgKzY5LDYgQEAKIAkJCXJldHVybjsKIAkJfQogCX0KLSNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl8yNFhYWAogCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfQ1gyNTg0MCkgewogCQlpZiAocHZyMl9pMmNfY3gyNTg0eF92NGxfc2V0dXAoaGR3LGNwKSkgewogCQkJcmV0dXJuOwpAQCAtODIsNyArNzksNiBAQAogCQkJcmV0dXJuOwogCQl9CiAJfQotI2VuZGlmCiAJaWYgKGlkID09IEkyQ19EUklWRVJJRF9TQUE3MTFYKSB7CiAJCWlmIChwdnIyX2kyY19kZWNvZGVyX3Y0bF9zZXR1cChoZHcsY3ApKSB7CiAJCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCmluZGV4IDhhOTkzM2QuLjA1ZWExN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5jCkBAIC0zMSw3ICszMSw3IEBACiAJdjRsMl9zdGRfaWQgdnM7CiAJdnMgPSBoZHctPnN0ZF9tYXNrX2N1cjsKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCi0JCSAgICJpMmMgdjRsMiBzZXRfc3RhbmRhcmQoMHglbGx4KSIsKF9fdTY0KXZzKTsKKwkJICAgImkyYyB2NGwyIHNldF9zdGFuZGFyZCgweCVsbHgpIiwobG9uZyBsb25nIHVuc2lnbmVkKXZzKTsKIAogCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19TVEQsJnZzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCmluZGV4IDdmY2E0NzkuLjNiOTAxMmY4ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYwpAQCAtMTg1LDggKzE4NSw2IEBACiAJfQogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFgKLQogLyogVGhpcyBpcyBhIHNwZWNpYWwgZW50cnkgcG9pbnQgdGhhdCBpcyBlbnRlcmVkIGlmIGFuIEkyQyBvcGVyYXRpb24gaXMKICAgIGF0dGVtcHRlZCB0byBhIHdtODc3NSBjaGlwIG9uIG1vZGVsIDI0eHh4IGhhcmR3YXJlLiAgQXV0b2RldGVjdCBvZiB0aGlzCiAgICBwYXJ0IGRvZXNuJ3Qgd29yaywgYnV0IHdlIGtub3cgaXQgaXMgcmVhbGx5IHRoZXJlLiAgU28gbGV0J3MgbG9vayBmb3IKQEAgLTI4OSw4ICsyODcsNiBAQAogCXJldHVybiAtRUlPOwogfQogCi0jZW5kaWYgLyogQ09ORklHX1ZJREVPX1BWUlVTQjJfMjRYWFggKi8KLQogLyogVGhpcyBpcyBhIHZlcnksIHZlcnkgbGltaXRlZCBJMkMgYWRhcHRlciBpbXBsZW1lbnRhdGlvbi4gIFdlIGNhbiBvbmx5CiAgICBzdXBwb3J0IHdoYXQgd2UgYWN0dWFsbHkga25vdyB3aWxsIHdvcmsgb24gdGhlIGRldmljZS4uLiAqLwogc3RhdGljIGludCBwdnIyX2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCkBAIC04OTcsMTQgKzg5MywxMiBAQAogCQloZHctPmkyY19mdW5jW2lkeF0gPSBwdnIyX2kyY19iYXNpY19vcDsKIAl9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fUFZSVVNCMl8yNFhYWAogCS8vIElmIGhvd2V2ZXIgd2UncmUgZGVhbGluZyB3aXRoIG5ldyBoYXJkd2FyZSwgaW5zZXJ0IHNvbWUgaGFja3MgaW4KIAkvLyB0aGUgSTJDIHRyYW5zZmVyIHN0YWNrIHRvIGxldCB0aGluZ3Mgd29yayBiZXR0ZXIuCiAJaWYgKGhkdy0+aGR3X3R5cGUgPT0gUFZSMl9IRFdfVFlQRV8yNFhYWCkgewogCQloZHctPmkyY19mdW5jWzB4MWJdID0gaTJjX2hhY2tfd204Nzc1OwogCQloZHctPmkyY19mdW5jWzB4NDRdID0gaTJjX2hhY2tfY3gyNTg0MDsKIAl9Ci0jZW5kaWYKIAogCS8vIENvbmZpZ3VyZSB0aGUgYWRhcHRlciBhbmQgc2V0IHVwIGV2ZXJ5dGhpbmcgZWxzZSByZWxhdGVkIHRvIGl0LgogCW1lbWNweSgmaGR3LT5pMmNfYWRhcCwmcHZyMl9pMmNfYWRhcF90ZW1wbGF0ZSxzaXplb2YoaGR3LT5pMmNfYWRhcCkpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IDhmMWE1YWYuLmU5NzZjNDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKQEAgLTIwLDcgKzIwLDYgQEAKICAqCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggZDFkZGE1Yy4uYzI5NGY0NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC0xOSw3ICsxOSw2IEBACiAgKgogICovCiAKLSNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgpAQCAtNDAsOCArMzksNiBAQAogI2VuZGlmIC8qIENPTkZJR19WSURFT19QVlJVU0IyX0RFQlVHSUZDICovCiAJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKml0ZW1fZmlyc3Q7CiAJc3RydWN0IHB2cjJfc3lzZnNfY3RsX2l0ZW0gKml0ZW1fbGFzdDsKLQlzdHJ1Y3Qgc3lzZnNfb3BzIGtvcHM7Ci0Jc3RydWN0IGtvYmpfdHlwZSBrdHlwZTsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSBhdHRyX3Y0bF9taW5vcl9udW1iZXI7CiAJc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgYXR0cl91bml0X251bWJlcjsKIAlpbnQgdjRsX21pbm9yX251bWJlcl9jcmVhdGVkX29rOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCmluZGV4IDBjYWY3MGIuLjM2MDhjMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKQEAgLTQ1OSwxOCArNDU5LDI2IEBACiAJCXJldCA9IDA7CiAJCXN3aXRjaCh2Zi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogeworCQkJaW50IGxtaW4sbG1heDsKKwkJCXN0cnVjdCBwdnIyX2N0cmwgKmhjcCwqdmNwOwogCQkJaW50IGggPSB2Zi0+Zm10LnBpeC5oZWlnaHQ7CiAJCQlpbnQgdyA9IHZmLT5mbXQucGl4LndpZHRoOworCQkJaGNwID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LFBWUjJfQ0lEX0hSRVMpOworCQkJdmNwID0gcHZyMl9oZHdfZ2V0X2N0cmxfYnlfaWQoaGR3LFBWUjJfQ0lEX1ZSRVMpOwogCi0JCQlpZiAoaCA8IDIwMCkgewotCQkJCWggPSAyMDA7Ci0JCQl9IGVsc2UgaWYgKGggPiA2MjUpIHsKLQkJCQloID0gNjI1OworCQkJbG1pbiA9IHB2cjJfY3RybF9nZXRfbWluKGhjcCk7CisJCQlsbWF4ID0gcHZyMl9jdHJsX2dldF9tYXgoaGNwKTsKKwkJCWlmICh3IDwgbG1pbikgeworCQkJCXcgPSBsbWluOworCQkJfSBlbHNlIGlmICh3ID4gbG1heCkgeworCQkJCXcgPSBsbWF4OwogCQkJfQotCQkJaWYgKHcgPCAzMjApIHsKLQkJCQl3ID0gMzIwOwotCQkJfSBlbHNlIGlmICh3ID4gNzIwKSB7Ci0JCQkJdyA9IDcyMDsKKwkJCWxtaW4gPSBwdnIyX2N0cmxfZ2V0X21pbih2Y3ApOworCQkJbG1heCA9IHB2cjJfY3RybF9nZXRfbWF4KHZjcCk7CisJCQlpZiAoaCA8IGxtaW4pIHsKKwkJCQloID0gbG1pbjsKKwkJCX0gZWxzZSBpZiAoaCA+IGxtYXgpIHsKKwkJCQloID0gbG1heDsKIAkJCX0KIAogCQkJbWVtY3B5KHZmLCAmcHZyX2Zvcm1hdFtQVlJfRk9STUFUX1BJWF0sCkBAIC00NzksMTQgKzQ4Nyw4IEBACiAJCQl2Zi0+Zm10LnBpeC5oZWlnaHQgPSBoOwogCiAJCQlpZiAoY21kID09IFZJRElPQ19TX0ZNVCkgewotCQkJCXB2cjJfY3RybF9zZXRfdmFsdWUoCi0JCQkJCXB2cjJfaGR3X2dldF9jdHJsX2J5X2lkKGhkdywKLQkJCQkJCQkJUFZSMl9DSURfSFJFUyksCi0JCQkJCXZmLT5mbXQucGl4LndpZHRoKTsKLQkJCQlwdnIyX2N0cmxfc2V0X3ZhbHVlKAotCQkJCQlwdnIyX2hkd19nZXRfY3RybF9ieV9pZChoZHcsCi0JCQkJCQkJCVBWUjJfQ0lEX1ZSRVMpLAotCQkJCQl2Zi0+Zm10LnBpeC5oZWlnaHQpOworCQkJCXB2cjJfY3RybF9zZXRfdmFsdWUoaGNwLHZmLT5mbXQucGl4LndpZHRoKTsKKwkJCQlwdnIyX2N0cmxfc2V0X3ZhbHVlKHZjcCx2Zi0+Zm10LnBpeC5oZWlnaHQpOwogCQkJfQogCQl9IGJyZWFrOwogCQljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MtaWYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCmluZGV4IGQ0NzAzOTQuLjUzYzRiNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jCkBAIC03MTEsNyArNzExLDcgQEAKIAkJCWNhc2UgLUVPVkVSRkxPVzoJZXJybXNnID0gIkJhYmJsZSAoYmFkIGNhYmxlPykiOyBicmVhazsKIAkJCWNhc2UgLUVQUk9UTzoJCWVycm1zZyA9ICJCaXQtc3R1ZmYgZXJyb3IgKGJhZCBjYWJsZT8pIjsgYnJlYWs7CiAJCQljYXNlIC1FSUxTRVE6CQllcnJtc2cgPSAiQ1JDL1RpbWVvdXQgKGNvdWxkIGJlIGFueXRoaW5nKSI7IGJyZWFrOwotCQkJY2FzZSAtRVRJTUVET1VUOgllcnJtc2cgPSAiTkFLIChkZXZpY2UgZG9lcyBub3QgcmVzcG9uZCkiOyBicmVhazsKKwkJCWNhc2UgLUVUSU1FOgkJZXJybXNnID0gIkRldmljZSBkb2VzIG5vdCByZXNwb25kIjsgYnJlYWs7CiAJCX0KIAkJUFdDX0RFQlVHX0ZMT1coInB3Y19pc29jX2hhbmRsZXIoKSBjYWxsZWQgd2l0aCBzdGF0dXMgJWQgWyVzXS5cbiIsIHVyYi0+c3RhdHVzLCBlcnJtc2cpOwogCQkvKiBHaXZlIHVwIGFmdGVyIGEgbnVtYmVyIG9mIGNvbnRpZ3VvdXMgZXJyb3JzIG9uIHRoZSBVU0IgYnVzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCmluZGV4IDU5YTE4NzIuLjc3YmI5NDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKQEAgLTgzMCw3ICs4MzAsNiBAQAogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm5hbWUJICA9IElGX05BTUUsCiAJLnR5cGUJICA9IFZJRF9UWVBFX1RFTEVURVhULAotCS5oYXJkd2FyZSA9IFZJRF9IQVJEV0FSRV9TQUE1MjQ5LAogCS5mb3BzCSAgPSAmc2FhX2ZvcHMsCiAJLnJlbGVhc2UgID0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiAJLm1pbm9yICAgID0gLTEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCmluZGV4IDE5YThkNjUuLmJiM2ZiNDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0OS5jCkBAIC03MTMsNyArNzEzLDYgQEAKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLm5hbWUJCT0gSUZfTkFNRSwKIAkudHlwZQkJPSBWSURfVFlQRV9URUxFVEVYVCwJLyp8IFZJRF9UWVBFX1RVTkVSID8/ICovCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1NBQTUyNDksCiAJLmZvcHMgICAgICAgICAgID0gJnNhYV9mb3BzLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCBiNTljMTE3Li45NzQxNzlkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtMSw0ICsxLDYgQEAKLS8qIHNhYTcxMTUgLSBQaGlsaXBzIFNBQTcxMTMvU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyCisvKiBzYWE3MTF4IC0gUGhpbGlwcyBTQUE3MTF4IHZpZGVvIGRlY29kZXIgZHJpdmVyCisgKiBUaGlzIGRyaXZlciBjYW4gd29yayB3aXRoIHNhYTcxMTEsIHNhYTcxMTFhLCBzYWE3MTEzLCBzYWE3MTE0LAorICoJCQkgICAgIHNhYTcxMTUgYW5kIHNhYTcxMTguCiAgKgogICogQmFzZWQgb24gc2FhNzExNCBkcml2ZXIgYnkgTWF4aW0gWWV2dHl1c2hraW4sIHdoaWNoIGlzIGJhc2VkIG9uCiAgKiB0aGUgc2FhNzExMSBkcml2ZXIgYnkgRGF2ZSBQZXJrcy4KQEAgLTE2LDcgKzE4LDkgQEAKICAqICgyLzE3LzIwMDMpCiAgKgogICogVkJJIHN1cHBvcnQgKDIwMDQpIGFuZCBjbGVhbnVwcyAoMjAwNSkgYnkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+Ci0gKiBTQUE3MTEzIHN1cHBvcnQgYnkgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1LTIwMDYgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+CisgKglTQUE3MTExLCBTQUE3MTEzIGFuZCBTQUE3MTE4IHN1cHBvcnQKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQpAQCAtMzMsNiArMzcsNyBAQAogICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgogICovCiAKKyNpbmNsdWRlICJzYWE3MTF4X3JlZ3MuaCIKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNDMsNyArNDgsOSBAQAogI2luY2x1ZGUgPG1lZGlhL3NhYTcxMTUuaD4KICNpbmNsdWRlIDxhc20vZGl2NjQuaD4KIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTMvU0FBNzExNC9TQUE3MTE1IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CisjZGVmaW5lIFZSRVNfNjBIWgkoNDgwKzE2KQorCitNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNzExMS9TQUE3MTEzL1NBQTcxMTQvU0FBNzExNS9TQUE3MTE4IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCAgIk1heGltIFlldnR5dXNoa2luLCBLZXZpbiBUaGF5ZXIsIENocmlzIEtlbm5lZHksICIKIAkJIkhhbnMgVmVya3VpbCwgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC01NCwxNCArNjEsMTQgQEAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCQkweDRhID4+IDEsIDB4NDggPj4gMSwJLyogU0FBNzExMyAqLwotCQkweDQyID4+IDEsIDB4NDAgPj4gMSwJLyogU0FBNzExNCBhbmQgU0FBNzExNSAqLworCQkweDRhID4+IDEsIDB4NDggPj4gMSwJLyogU0FBNzExMSwgU0FBNzExMUEgYW5kIFNBQTcxMTMgKi8KKwkJMHg0MiA+PiAxLCAweDQwID4+IDEsCS8qIFNBQTcxMTQsIFNBQTcxMTUgYW5kIFNBQTcxMTggKi8KIAkJSTJDX0NMSUVOVF9FTkQgfTsKIAogCiBJMkNfQ0xJRU5UX0lOU01PRDsKIAotc3RydWN0IHNhYTcxMTVfc3RhdGUgeworc3RydWN0IHNhYTcxMXhfc3RhdGUgewogCXY0bDJfc3RkX2lkIHN0ZDsKIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKQEAgLTcwLDYgKzc3LDggQEAKIAlpbnQgY29udHJhc3Q7CiAJaW50IGh1ZTsKIAlpbnQgc2F0OworCWludCB3aWR0aDsKKwlpbnQgaGVpZ2h0OwogCWVudW0gdjRsMl9jaGlwX2lkZW50IGlkZW50OwogCXUzMiBhdWRjbGtfZnJlcTsKIAl1MzIgY3J5c3RhbF9mcmVxOwpAQCAtODAsNDIwICs4OSw1MDggQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgc2FhNzExNV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExeF93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQogewogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzExNV93cml0ZXJlZ3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdW5zaWduZWQgY2hhciAqcmVncykKKy8qIFNhbml0eSByb3V0aW5lIHRvIGNoZWNrIGlmIGEgcmVnaXN0ZXIgaXMgcHJlc2VudCAqLworc3RhdGljIGludCBzYWE3MTF4X2hhc19yZWcoY29uc3QgaW50IGlkLCBjb25zdCB1OCByZWcpCiB7CisJaWYgKGlkID09IFY0TDJfSURFTlRfU0FBNzExMSkKKwkJcmV0dXJuIHJlZyA8IDB4MjAgJiYgcmVnICE9IDB4MDEgJiYgcmVnICE9IDB4MGYgJiYKKwkJICAgICAgIChyZWcgPCAweDEzIHx8IHJlZyA+IDB4MTkpICYmIHJlZyAhPSAweDFkICYmIHJlZyAhPSAweDFlOworCisJLyogY29tbW9uIGZvciBzYWE3MTEzLzQvNS84ICovCisJaWYgKHVubGlrZWx5KChyZWcgPj0gMHgzYiAmJiByZWcgPD0gMHgzZikgfHwgcmVnID09IDB4NWMgfHwgcmVnID09IDB4NWYgfHwKKwkgICAgcmVnID09IDB4YTMgfHwgcmVnID09IDB4YTcgfHwgcmVnID09IDB4YWIgfHwgcmVnID09IDB4YWYgfHwgKHJlZyA+PSAweGI1ICYmIHJlZyA8PSAweGI3KSB8fAorCSAgICByZWcgPT0gMHhkMyB8fCByZWcgPT0gMHhkNyB8fCByZWcgPT0gMHhkYiB8fCByZWcgPT0gMHhkZiB8fCAocmVnID49IDB4ZTUgJiYgcmVnIDw9IDB4ZTcpIHx8CisJICAgIHJlZyA9PSAweDgyIHx8IChyZWcgPj0gMHg4OSAmJiByZWcgPD0gMHg4ZSkpKQorCQlyZXR1cm4gMDsKKworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFY0TDJfSURFTlRfU0FBNzExMzoKKwkJcmV0dXJuIHJlZyAhPSAweDE0ICYmIChyZWcgPCAweDE4IHx8IHJlZyA+IDB4MWUpICYmIChyZWcgPCAweDIwIHx8IHJlZyA+IDB4M2YpICYmCisJCSAgICAgICByZWcgIT0gMHg1ZCAmJiByZWcgPCAweDYzOworCWNhc2UgVjRMMl9JREVOVF9TQUE3MTE0OgorCQlyZXR1cm4gKHJlZyA8IDB4MWEgfHwgcmVnID4gMHgxZSkgJiYgKHJlZyA8IDB4MjAgfHwgcmVnID4gMHgyZikgJiYKKwkJICAgICAgIChyZWcgPCAweDYzIHx8IHJlZyA+IDB4N2YpICYmIHJlZyAhPSAweDMzICYmIHJlZyAhPSAweDM3ICYmCisJCSAgICAgICByZWcgIT0gMHg4MSAmJiByZWcgPCAweGYwOworCWNhc2UgVjRMMl9JREVOVF9TQUE3MTE1OgorCQlyZXR1cm4gKHJlZyA8IDB4MjAgfHwgcmVnID4gMHgyZikgJiYgcmVnICE9IDB4NjUgJiYgKHJlZyA8IDB4ZmMgfHwgcmVnID4gMHhmZSk7CisJY2FzZSBWNEwyX0lERU5UX1NBQTcxMTg6CisJCXJldHVybiAocmVnIDwgMHgxYSB8fCByZWcgPiAweDFkKSAmJiAocmVnIDwgMHgyMCB8fCByZWcgPiAweDIyKSAmJgorCQkgICAgICAgKHJlZyA8IDB4MjYgfHwgcmVnID4gMHgyOCkgJiYgcmVnICE9IDB4MzMgJiYgcmVnICE9IDB4MzcgJiYKKwkJICAgICAgIChyZWcgPCAweDYzIHx8IHJlZyA+IDB4N2YpICYmIHJlZyAhPSAweDgxICYmIHJlZyA8IDB4ZjA7CisJfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHNhYTcxMXhfd3JpdGVyZWdzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKnJlZ3MpCit7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdW5zaWduZWQgY2hhciByZWcsIGRhdGE7CiAKIAl3aGlsZSAoKnJlZ3MgIT0gMHgwMCkgewogCQlyZWcgPSAqKHJlZ3MrKyk7CiAJCWRhdGEgPSAqKHJlZ3MrKyk7Ci0JCWlmIChzYWE3MTE1X3dyaXRlKGNsaWVudCwgcmVnLCBkYXRhKSA8IDApCi0JCQlyZXR1cm4gLTE7CisKKwkJLyogQWNjb3JkaW5nIHdpdGggZGF0YXNoZWV0cywgcmVzZXJ2ZWQgcmVncyBzaG91bGQgYmUKKwkJICAgZmlsbGVkIHdpdGggMCAtIHNlZW1zIGJldHRlciBub3QgdG8gdG91Y2ggb24gdGhleSAqLworCQlpZiAoc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCxyZWcpKSB7CisJCQlpZiAoc2FhNzExeF93cml0ZShjbGllbnQsIHJlZywgZGF0YSkgPCAwKQorCQkJCXJldHVybiAtMTsKKwkJfSBlbHNlIHsKKwkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInRyaWVkIHRvIGFjY2VzcyByZXNlcnZlZCByZWcgMHglMDJ4XG4iLCByZWcpOworCQl9CiAJfQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTE1X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgc2FhNzExeF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKIHsKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogU0FBNzExMSBpbml0aWFsaXphdGlvbiB0YWJsZSAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExMV9pbml0W10gPSB7CisJUl8wMV9JTkNfREVMQVksIDB4MDAsCQkvKiByZXNlcnZlZCAqLworCisJLypmcm9udCBlbmQgKi8KKwlSXzAyX0lOUFVUX0NOVExfMSwgMHhkMCwJLyogRlVTRT0zLCBHVURMPTIsIE1PREU9MCAqLworCVJfMDNfSU5QVVRfQ05UTF8yLCAweDIzLAkvKiBITE5SUz0wLCBWQlNMPTEsIFdQT0ZGPTAsIEhPTERHPTAsCisJCQkJCSAqIEdBRklYPTAsIEdBSTE9MjU2LCBHQUkyPTI1NiAqLworCVJfMDRfSU5QVVRfQ05UTF8zLCAweDAwLAkvKiBHQUkxPTI1NiAqLworCVJfMDVfSU5QVVRfQ05UTF80LCAweDAwLAkvKiBHQUkyPTI1NiAqLworCisJLyogZGVjb2RlciAqLworCVJfMDZfSF9TWU5DX1NUQVJULCAweGYzLAkvKiBIU0IgYXQgIDEzKDUwSHopIC8gIDE3KDYwSHopCisJCQkJCSAqIHBpeGVscyBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCisJUl8wN19IX1NZTkNfU1RPUCwgMHhlOCwJCS8qIEhTUyBzZWVtcyB0byBiZSBuZWVkZWQgdG8KKwkJCQkJICogd29yayB3aXRoIE5UU0MsIHRvbyAqLworCVJfMDhfU1lOQ19DTlRMLCAweGM4LAkJLyogQVVGRD0xLCBGU0VMPTEsIEVYRklMPTAsCisJCQkJCSAqIFZUUkM9MSwgSFBMTD0wLCBWTk9JPTAgKi8KKwlSXzA5X0xVTUFfQ05UTCwgMHgwMSwJCS8qIEJZUFM9MCwgUFJFRj0wLCBCUFNTPTAsCisJCQkJCSAqIFZCTEI9MCwgVVBUQ1Y9MCwgQVBFUj0xICovCisJUl8wQV9MVU1BX0JSSUdIVF9DTlRMLCAweDgwLAorCVJfMEJfTFVNQV9DT05UUkFTVF9DTlRMLCAweDQ3LAkvKiAwYiAtIENPTlQ9MS4xMDkgKi8KKwlSXzBDX0NIUk9NQV9TQVRfQ05UTCwgMHg0MCwKKwlSXzBEX0NIUk9NQV9IVUVfQ05UTCwgMHgwMCwKKwlSXzBFX0NIUk9NQV9DTlRMXzEsIDB4MDEsCS8qIDBlIC0gQ0RUTz0wLCBDU1REPTAsIERDQ0Y9MCwKKwkJCQkJICogRkNUQz0wLCBDSEJXPTEgKi8KKwlSXzBGX0NIUk9NQV9HQUlOX0NOVEwsIDB4MDAsCS8qIHJlc2VydmVkICovCisJUl8xMF9DSFJPTUFfQ05UTF8yLCAweDQ4LAkvKiAxMCAtIE9GVFM9MSwgSERFTD0wLCBWUkxOPTEsIFlERUw9MCAqLworCVJfMTFfTU9ERV9ERUxBWV9DTlRMLCAweDFjLAkvKiAxMSAtIEdQU1c9MCwgQ005OT0wLCBGRUNPPTAsIENPTVBPPTEsCisJCQkJCSAqIE9FWUM9MSwgT0VIVj0xLCBWSVBCPTAsIENPTE89MCAqLworCVJfMTJfUlRfU0lHTkFMX0NOVEwsIDB4MDAsCS8qIDEyIC0gb3V0cHV0IGNvbnRyb2wgMiAqLworCVJfMTNfUlRfWF9QT1JUX09VVF9DTlRMLCAweDAwLAkvKiAxMyAtIG91dHB1dCBjb250cm9sIDMgKi8KKwlSXzE0X0FOQUxfQURDX0NPTVBBVF9DTlRMLCAweDAwLAorCVJfMTVfVkdBVEVfU1RBUlRfRklEX0NIRywgMHgwMCwKKwlSXzE2X1ZHQVRFX1NUT1AsIDB4MDAsCisJUl8xN19NSVNDX1ZHQVRFX0NPTkZfQU5EX01TQiwgMHgwMCwKKworCTB4MDAsIDB4MDAKK307CisKKy8qIFNBQTcxMTMgaW5pdCBjb2RlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExM19pbml0W10gPSB7CisJUl8wMV9JTkNfREVMQVksIDB4MDgsCisJUl8wMl9JTlBVVF9DTlRMXzEsIDB4YzIsCisJUl8wM19JTlBVVF9DTlRMXzIsIDB4MzAsCisJUl8wNF9JTlBVVF9DTlRMXzMsIDB4MDAsCisJUl8wNV9JTlBVVF9DTlRMXzQsIDB4MDAsCisJUl8wNl9IX1NZTkNfU1RBUlQsIDB4ODksCisJUl8wN19IX1NZTkNfU1RPUCwgMHgwZCwKKwlSXzA4X1NZTkNfQ05UTCwgMHg4OCwKKwlSXzA5X0xVTUFfQ05UTCwgMHgwMSwKKwlSXzBBX0xVTUFfQlJJR0hUX0NOVEwsIDB4ODAsCisJUl8wQl9MVU1BX0NPTlRSQVNUX0NOVEwsIDB4NDcsCisJUl8wQ19DSFJPTUFfU0FUX0NOVEwsIDB4NDAsCisJUl8wRF9DSFJPTUFfSFVFX0NOVEwsIDB4MDAsCisJUl8wRV9DSFJPTUFfQ05UTF8xLCAweDAxLAorCVJfMEZfQ0hST01BX0dBSU5fQ05UTCwgMHgyYSwKKwlSXzEwX0NIUk9NQV9DTlRMXzIsIDB4MDgsCisJUl8xMV9NT0RFX0RFTEFZX0NOVEwsIDB4MGMsCisJUl8xMl9SVF9TSUdOQUxfQ05UTCwgMHgwNywKKwlSXzEzX1JUX1hfUE9SVF9PVVRfQ05UTCwgMHgwMCwKKwlSXzE0X0FOQUxfQURDX0NPTVBBVF9DTlRMLCAweDAwLAorCVJfMTVfVkdBVEVfU1RBUlRfRklEX0NIRywgMHgwMCwKKwlSXzE2X1ZHQVRFX1NUT1AsIDB4MDAsCisJUl8xN19NSVNDX1ZHQVRFX0NPTkZfQU5EX01TQiwgMHgwMCwKKworCTB4MDAsIDB4MDAKK307CisKIC8qIElmIGEgdmFsdWUgZGlmZmVycyBmcm9tIHRoZSBIYXVwcGF1Z2UgZHJpdmVyIHZhbHVlcywgdGhlbiB0aGUgY29tbWVudCBzdGFydHMgd2l0aAogICAgJ3dhcyAweFhYJyB0byBkZW5vdGUgdGhlIEhhdXBwYXVnZSB2YWx1ZS4gT3RoZXJ3aXNlIHRoZSB2YWx1ZSBpcyBpZGVudGljYWwgdG8gd2hhdCB0aGUKICAgIEhhdXBwYXVnZSBkcml2ZXIgc2V0cy4gKi8KIAorLyogU0FBNzExNCBhbmQgU0FBNzExNSBpbml0aWFsaXphdGlvbiB0YWJsZSAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9pbml0X2F1dG9faW5wdXRbXSA9IHsKIAkJLyogRnJvbnQtRW5kIFBhcnQgKi8KLQkweDAxLCAweDQ4LAkJLyogd2hpdGUgcGVhayBjb250cm9sIGRpc2FibGVkICovCi0JMHgwMywgMHgyMCwJCS8qIHdhcyAweDMwLiAweDIwOiBsb25nIHZlcnRpY2FsIGJsYW5raW5nICovCi0JMHgwNCwgMHg5MCwJCS8qIGFuYWxvZyBnYWluIHNldCB0byAwICovCi0JMHgwNSwgMHg5MCwJCS8qIGFuYWxvZyBnYWluIHNldCB0byAwICovCisJUl8wMV9JTkNfREVMQVksIDB4NDgsCQkJLyogd2hpdGUgcGVhayBjb250cm9sIGRpc2FibGVkICovCisJUl8wM19JTlBVVF9DTlRMXzIsIDB4MjAsCQkvKiB3YXMgMHgzMC4gMHgyMDogbG9uZyB2ZXJ0aWNhbCBibGFua2luZyAqLworCVJfMDRfSU5QVVRfQ05UTF8zLCAweDkwLAkJLyogYW5hbG9nIGdhaW4gc2V0IHRvIDAgKi8KKwlSXzA1X0lOUFVUX0NOVExfNCwgMHg5MCwJCS8qIGFuYWxvZyBnYWluIHNldCB0byAwICovCiAJCS8qIERlY29kZXIgUGFydCAqLwotCTB4MDYsIDB4ZWIsCQkvKiBob3JpeiBzeW5jIGJlZ2luID0gLTIxICovCi0JMHgwNywgMHhlMCwJCS8qIGhvcml6IHN5bmMgc3RvcCA9IC0xNyAqLwotCTB4MGEsIDB4ODAsCQkvKiB3YXMgMHg4OC4gZGVjb2RlciBicmlnaHRuZXNzLCAweDgwIGlzIGl0dSBzdGFuZGFyZCAqLwotCTB4MGIsIDB4NDQsCQkvKiB3YXMgMHg0OC4gZGVjb2RlciBjb250cmFzdCwgMHg0NCBpcyBpdHUgc3RhbmRhcmQgKi8KLQkweDBjLCAweDQwLAkJLyogd2FzIDB4NDcuIGRlY29kZXIgc2F0dXJhdGlvbiwgMHg0MCBpcyBpdHUgc3RhbmRhcmQgKi8KLQkweDBkLCAweDAwLAkJLyogY2hyb21pbmFuY2UgaHVlIGNvbnRyb2wgKi8KLQkweDBmLCAweDAwLAkJLyogY2hyb21pbmFuY2UgZ2FpbiBjb250cm9sOiB1c2UgYXV0b21pY2F0aWMgbW9kZSAqLwotCTB4MTAsIDB4MDYsCQkvKiBjaHJvbWluYW5jZS9sdW1pbmFuY2UgY29udHJvbDogYWN0aXZlIGFkYXB0aXZlIGNvbWJmaWx0ZXIgKi8KLQkweDExLCAweDAwLAkJLyogZGVsYXkgY29udHJvbCAqLwotCTB4MTIsIDB4OWQsCQkvKiBSVFMwIG91dHB1dCBjb250cm9sOiBWR0FURSAqLwotCTB4MTMsIDB4ODAsCQkvKiBYLXBvcnQgb3V0cHV0IGNvbnRyb2w6IElUVTY1NiBzdGFuZGFyZCBtb2RlLCBSVENPIG91dHB1dCBlbmFibGUgUlRDRSAqLwotCTB4MTQsIDB4MDAsCQkvKiBhbmFsb2cvQURDL2F1dG8gY29tcGF0aWJpbGl0eSBjb250cm9sICovCi0JMHgxOCwgMHg0MCwJCS8qIHJhdyBkYXRhIGdhaW4gMHgwMCA9IG5vbWluYWwgKi8KLQkweDE5LCAweDgwLAkJLyogcmF3IGRhdGEgb2Zmc2V0IDB4ODAgPSAwIExTQiAqLwotCTB4MWEsIDB4NzcsCQkvKiBjb2xvciBraWxsZXIgbGV2ZWwgY29udHJvbCAweDc3ID0gcmVjb21tZW5kZWQgKi8KLQkweDFiLCAweDQyLAkJLyogbWlzYyBjaHJvbWEgY29udHJvbCAweDQyID0gcmVjb21tZW5kZWQgKi8KLQkweDFjLCAweGE5LAkJLyogY29tYmZpbHRlciBjb250cm9sIDB4QTkgPSByZWNvbW1lbmRlZCAqLwotCTB4MWQsIDB4MDEsCQkvKiBjb21iZmlsdGVyIGNvbnRyb2wgMHgwMSA9IHJlY29tbWVuZGVkICovCisJUl8wNl9IX1NZTkNfU1RBUlQsIDB4ZWIsCQkvKiBob3JpeiBzeW5jIGJlZ2luID0gLTIxICovCisJUl8wN19IX1NZTkNfU1RPUCwgMHhlMCwJCQkvKiBob3JpeiBzeW5jIHN0b3AgPSAtMTcgKi8KKwlSXzA5X0xVTUFfQ05UTCwgMHg1MywJCQkvKiAweDUzLCB3YXMgMHg1NiBmb3IgNjBoei4gbHVtaW5hbmNlIGNvbnRyb2wgKi8KKwlSXzBBX0xVTUFfQlJJR0hUX0NOVEwsIDB4ODAsCQkvKiB3YXMgMHg4OC4gZGVjb2RlciBicmlnaHRuZXNzLCAweDgwIGlzIGl0dSBzdGFuZGFyZCAqLworCVJfMEJfTFVNQV9DT05UUkFTVF9DTlRMLCAweDQ0LAkJLyogd2FzIDB4NDguIGRlY29kZXIgY29udHJhc3QsIDB4NDQgaXMgaXR1IHN0YW5kYXJkICovCisJUl8wQ19DSFJPTUFfU0FUX0NOVEwsIDB4NDAsCQkvKiB3YXMgMHg0Ny4gZGVjb2RlciBzYXR1cmF0aW9uLCAweDQwIGlzIGl0dSBzdGFuZGFyZCAqLworCVJfMERfQ0hST01BX0hVRV9DTlRMLCAweDAwLAorCVJfMEZfQ0hST01BX0dBSU5fQ05UTCwgMHgwMCwJCS8qIHVzZSBhdXRvbWF0aWMgZ2FpbiAgKi8KKwlSXzEwX0NIUk9NQV9DTlRMXzIsIDB4MDYsCQkvKiBjaHJvbWE6IGFjdGl2ZSBhZGFwdGl2ZSBjb21iZmlsdGVyICovCisJUl8xMV9NT0RFX0RFTEFZX0NOVEwsIDB4MDAsCisJUl8xMl9SVF9TSUdOQUxfQ05UTCwgMHg5ZCwJCS8qIFJUUzAgb3V0cHV0IGNvbnRyb2w6IFZHQVRFICovCisJUl8xM19SVF9YX1BPUlRfT1VUX0NOVEwsIDB4ODAsCQkvKiBJVFU2NTYgc3RhbmRhcmQgbW9kZSwgUlRDTyBvdXRwdXQgZW5hYmxlIFJUQ0UgKi8KKwlSXzE0X0FOQUxfQURDX0NPTVBBVF9DTlRMLCAweDAwLAorCVJfMThfUkFXX0RBVEFfR0FJTl9DTlRMLCAweDQwLAkJLyogZ2FpbiAweDAwID0gbm9taW5hbCAqLworCVJfMTlfUkFXX0RBVEFfT0ZGX0NOVEwsIDB4ODAsCisJUl8xQV9DT0xPUl9LSUxMX0xWTF9DTlRMLCAweDc3LAkJLyogcmVjb21tZW5kZWQgdmFsdWUgKi8KKwlSXzFCX01JU0NfVFZWQ1JERVQsIDB4NDIsCQkvKiByZWNvbW1lbmRlZCB2YWx1ZSAqLworCVJfMUNfRU5IQU5fQ09NQl9DVFJMMSwgMHhhOSwJCS8qIHJlY29tbWVuZGVkIHZhbHVlICovCisJUl8xRF9FTkhBTl9DT01CX0NUUkwyLCAweDAxLAkJLyogcmVjb21tZW5kZWQgdmFsdWUgKi8KKworCisJUl84MF9HTE9CQUxfQ05UTF8xLCAweDAsCQkvKiBObyB0YXNrcyBlbmFibGVkIGF0IGluaXQgKi8KIAogCQkvKiBQb3dlciBEZXZpY2UgQ29udHJvbCAqLwotCTB4ODgsIDB4ZDAsCQkvKiByZXNldCBkZXZpY2UgKi8KLQkweDg4LCAweGYwLAkJLyogc2V0IGRldmljZSBwcm9ncmFtbWVkLCBhbGwgaW4gb3BlcmF0aW9uYWwgbW9kZSAqLworCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGQwLAkvKiByZXNldCBkZXZpY2UgKi8KKwlSXzg4X1BPV0VSX1NBVkVfQURDX1BPUlRfQ05UTCwgMHhmMCwJLyogc2V0IGRldmljZSBwcm9ncmFtbWVkLCBhbGwgaW4gb3BlcmF0aW9uYWwgbW9kZSAqLwogCTB4MDAsIDB4MDAKIH07CiAKKy8qIFVzZWQgdG8gcmVzZXQgc2FhNzExMywgc2FhNzExNCBhbmQgc2FhNzExNSAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyW10gPSB7Ci0JMHg4NywgMHgwMCwJCS8qIGRpc2FibGUgSS1wb3J0IG91dHB1dCAqLwotCTB4ODgsIDB4ZDAsCQkvKiByZXNldCBzY2FsZXIgKi8KLQkweDg4LCAweGYwLAkJLyogYWN0aXZhdGUgc2NhbGVyICovCi0JMHg4NywgMHgwMSwJCS8qIGVuYWJsZSBJLXBvcnQgb3V0cHV0ICovCisJUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwgMHgwMCwJLyogZGlzYWJsZSBJLXBvcnQgb3V0cHV0ICovCisJUl84OF9QT1dFUl9TQVZFX0FEQ19QT1JUX0NOVEwsIDB4ZDAsCQkvKiByZXNldCBzY2FsZXIgKi8KKwlSXzg4X1BPV0VSX1NBVkVfQURDX1BPUlRfQ05UTCwgMHhmMCwJCS8qIGFjdGl2YXRlIHNjYWxlciAqLworCVJfODdfSV9QT1JUX0lfT19FTkFfT1VUX0NMS19BTkRfR0FURUQsIDB4MDEsCS8qIGVuYWJsZSBJLXBvcnQgb3V0cHV0ICovCiAJMHgwMCwgMHgwMAogfTsKIAogLyogPT09PT09PT09PT09PT0gU0FBNzcxNSBWSURFTyB0ZW1wbGF0ZXMgPT09PT09PT09PT09PSAgKi8KIAotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNjBoel9mdWxscmVzX3hbXSA9IHsKLQkweGNjLCAweGQwLAkJLyogaHNpemUgbG93IChvdXRwdXQpLCBob3IuIG91dHB1dCB3aW5kb3cgc2l6ZSA9IDB4MmQwID0gNzIwICovCi0JMHhjZCwgMHgwMiwJCS8qIGhzaXplIGhpIChvdXRwdXQpICovCi0KLQkvKiBXaHkgbm90IGluIDYwaHotTGFuZCwgdG9vPyAqLwotCTB4ZDAsIDB4MDEsCQkvKiBkb3duc2NhbGUgPSAxICovCi0JMHhkOCwgMHgwMCwJCS8qIGhvciBsdW0gc2NhbGluZyAweDA0MDAgPSAxICovCi0JMHhkOSwgMHgwNCwKLQkweGRjLCAweDAwLAkJLyogaG9yIGNocm9tIHNjYWxpbmcgMHgwMjAwLiBtdXN0IGJlIGhvciBsdW0gc2NhbGluZyAvIDIgKi8KLQkweGRkLCAweDAyLAkJLyogSC1zY2FsaW5nIGluY3IgY2hyb21hICovCi0KLQkweDAwLCAweDAwCi19Owotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgc2FhNzExNV9jZmdfNjBoel9mdWxscmVzX3lbXSA9IHsKLQkweGNlLCAweGY4LAkJLyogdnNpemUgbG93IChvdXRwdXQpLCB2ZXIuIG91dHB1dCB3aW5kb3cgc2l6ZSA9IDI0OCAoYnV0IDYwaHogaXMgMjQwPykgKi8KLQkweGNmLCAweDAwLAkJLyogdnNpemUgaGkgKG91dHB1dCkgKi8KLQotCS8qIFdoeSBub3QgaW4gNjBoei1MYW5kLCB0b28/ICovCi0JMHhkNSwgMHg0MCwJCS8qIEx1bSBjb250cmFzdCwgbm9taW5hbCB2YWx1ZSA9IDB4NDAgKi8KLQkweGQ2LCAweDQwLAkJLyogQ2hyb21hIHNhdHVyLiBub21pbmFsIHZhbHVlID0gMHg4MCAqLwotCi0JMHhlMCwgMHgwMCwJCS8qIFYtc2NhbGluZyBpbmNyIGx1bWEgbG93ICovCi0JMHhlMSwgMHgwNCwJCS8qICIgaGkgKi8KLQkweGUyLCAweDAwLAkJLyogVi1zY2FsaW5nIGluY3IgY2hyb21hIGxvdyAqLwotCTB4ZTMsIDB4MDQsCQkvKiAiIGhpICovCi0KLQkweDAwLCAweDAwCi19OwotCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2NmZ182MGh6X3ZpZGVvW10gPSB7Ci0JMHg4MCwgMHgwMCwJCS8qIHJlc2V0IHRhc2tzICovCi0JMHg4OCwgMHhkMCwJCS8qIHJlc2V0IHNjYWxlciAqLworCVJfODBfR0xPQkFMX0NOVExfMSwgMHgwMCwJCQkvKiByZXNldCB0YXNrcyAqLworCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGQwLAkJLyogcmVzZXQgc2NhbGVyICovCiAKLQkweDE1LCAweDAzLAkJLyogVkdBVEUgcHVsc2Ugc3RhcnQgKi8KLQkweDE2LCAweDExLAkJLyogVkdBVEUgcHVsc2Ugc3RvcCAqLwotCTB4MTcsIDB4OWMsCQkvKiBWR0FURSBNU0IgYW5kIG90aGVyIHZhbHVlcyAqLworCVJfMTVfVkdBVEVfU1RBUlRfRklEX0NIRywgMHgwMywKKwlSXzE2X1ZHQVRFX1NUT1AsIDB4MTEsCisJUl8xN19NSVNDX1ZHQVRFX0NPTkZfQU5EX01TQiwgMHg5YywKIAotCTB4MDgsIDB4NjgsCQkvKiAweEJPOiBhdXRvIGRldGVjdGlvbiwgMHg2OCA9IE5UU0MgKi8KLQkweDBlLCAweDA3LAkJLyogbG90cyBvZiBkaWZmZXJlbnQgc3R1ZmYuLi4gdmlkZW8gYXV0b2RldGVjdGlvbiBpcyBvbiAqLworCVJfMDhfU1lOQ19DTlRMLCAweDY4LAkJCS8qIDB4Qk86IGF1dG8gZGV0ZWN0aW9uLCAweDY4ID0gTlRTQyAqLworCVJfMEVfQ0hST01BX0NOVExfMSwgMHgwNywJCS8qIHZpZGVvIGF1dG9kZXRlY3Rpb24gaXMgb24gKi8KIAotCTB4NWEsIDB4MDYsCQkvKiBWZXJ0aWNhbCBvZmZzZXQsIHN0YW5kYXJkIDYwaHogdmFsdWUgZm9yIElUVTY1NiBsaW5lIGNvdW50aW5nICovCisJUl81QV9WX09GRl9GT1JfU0xJQ0VSLCAweDA2LAkJLyogc3RhbmRhcmQgNjBoeiB2YWx1ZSBmb3IgSVRVNjU2IGxpbmUgY291bnRpbmcgKi8KIAogCS8qIFRhc2sgQSAqLwotCTB4OTAsIDB4ODAsCQkvKiBUYXNrIEhhbmRsaW5nIENvbnRyb2wgKi8KLQkweDkxLCAweDQ4LAkJLyogWC1wb3J0IGZvcm1hdHMvY29uZmlnICovCi0JMHg5MiwgMHg0MCwJCS8qIElucHV0IFJlZi4gc2lnbmFsIERlZi4gKi8KLQkweDkzLCAweDg0LAkJLyogSS1wb3J0IGNvbmZpZyAqLwotCTB4OTQsIDB4MDEsCQkvKiBob2Zmc2V0IGxvdyAoaW5wdXQpLCAweDAwMDIgaXMgbWluaW11bSAqLwotCTB4OTUsIDB4MDAsCQkvKiBob2Zmc2V0IGhpIChpbnB1dCkgKi8KLQkweDk2LCAweGQwLAkJLyogaHNpemUgbG93IChpbnB1dCksIDB4MDJkMCA9IDcyMCAqLwotCTB4OTcsIDB4MDIsCQkvKiBoc2l6ZSBoaSAoaW5wdXQpICovCi0JMHg5OCwgMHgwNSwJCS8qIHZvZmZzZXQgbG93IChpbnB1dCkgKi8KLQkweDk5LCAweDAwLAkJLyogdm9mZnNldCBoaSAoaW5wdXQpICovCi0JMHg5YSwgMHgwYywJCS8qIHZzaXplIGxvdyAoaW5wdXQpLCAweDBjID0gMTIgKi8KLQkweDliLCAweDAwLAkJLyogdnNpemUgaGkgKGlucHV0KSAqLwotCTB4OWMsIDB4YTAsCQkvKiBoc2l6ZSBsb3cgKG91dHB1dCksIDB4MDVhMCA9IDE0NDAgKi8KLQkweDlkLCAweDA1LAkJLyogaHNpemUgaGkgKG91dHB1dCkgKi8KLQkweDllLCAweDBjLAkJLyogdnNpemUgbG93IChvdXRwdXQpLCAweDBjID0gMTIgKi8KLQkweDlmLCAweDAwLAkJLyogdnNpemUgaGkgKG91dHB1dCkgKi8KKwlSXzkwX0FfVEFTS19IQU5ETElOR19DTlRMLCAweDgwLAorCVJfOTFfQV9YX1BPUlRfRk9STUFUU19BTkRfQ09ORiwgMHg0OCwKKwlSXzkyX0FfWF9QT1JUX0lOUFVUX1JFRkVSRU5DRV9TSUdOQUwsIDB4NDAsCisJUl85M19BX0lfUE9SVF9PVVRQVVRfRk9STUFUU19BTkRfQ09ORiwgMHg4NCwKKworCS8qIGhvZmZzZXQgbG93IChpbnB1dCksIDB4MDAwMiBpcyBtaW5pbXVtICovCisJUl85NF9BX0hPUklaX0lOUFVUX1dJTkRPV19TVEFSVCwgMHgwMSwKKwlSXzk1X0FfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJUX01TQiwgMHgwMCwKKworCS8qIGhzaXplIGxvdyAoaW5wdXQpLCAweDAyZDAgPSA3MjAgKi8KKwlSXzk2X0FfSE9SSVpfSU5QVVRfV0lORE9XX0xFTkdUSCwgMHhkMCwKKwlSXzk3X0FfSE9SSVpfSU5QVVRfV0lORE9XX0xFTkdUSF9NU0IsIDB4MDIsCisKKwlSXzk4X0FfVkVSVF9JTlBVVF9XSU5ET1dfU1RBUlQsIDB4MDUsCisJUl85OV9BX1ZFUlRfSU5QVVRfV0lORE9XX1NUQVJUX01TQiwgMHgwMCwKKworCVJfOUFfQV9WRVJUX0lOUFVUX1dJTkRPV19MRU5HVEgsIDB4MGMsCisJUl85Ql9BX1ZFUlRfSU5QVVRfV0lORE9XX0xFTkdUSF9NU0IsIDB4MDAsCisKKwlSXzlDX0FfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEgsIDB4YTAsCisJUl85RF9BX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwgMHgwNSwKKworCVJfOUVfQV9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RILCAweDBjLAorCVJfOUZfQV9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwgMHgwMCwKIAogCS8qIFRhc2sgQiAqLwotCTB4YzAsIDB4MDAsCQkvKiBUYXNrIEhhbmRsaW5nIENvbnRyb2wgKi8KLQkweGMxLCAweDA4LAkJLyogWC1wb3J0IGZvcm1hdHMvY29uZmlnICovCi0JMHhjMiwgMHgwMCwJCS8qIElucHV0IFJlZi4gc2lnbmFsIERlZi4gKi8KLQkweGMzLCAweDgwLAkJLyogSS1wb3J0IGNvbmZpZyAqLwotCTB4YzQsIDB4MDIsCQkvKiBob2Zmc2V0IGxvdyAoaW5wdXQpLCAweDAwMDIgaXMgbWluaW11bSAqLwotCTB4YzUsIDB4MDAsCQkvKiBob2Zmc2V0IGhpIChpbnB1dCkgKi8KLQkweGM2LCAweGQwLAkJLyogaHNpemUgbG93IChpbnB1dCksIDB4MDJkMCA9IDcyMCAqLwotCTB4YzcsIDB4MDIsCQkvKiBoc2l6ZSBoaSAoaW5wdXQpICovCi0JMHhjOCwgMHgxMiwJCS8qIHZvZmZzZXQgbG93IChpbnB1dCksIDB4MTIgPSAxOCAqLwotCTB4YzksIDB4MDAsCQkvKiB2b2Zmc2V0IGhpIChpbnB1dCkgKi8KLQkweGNhLCAweGY4LAkJLyogdnNpemUgbG93IChpbnB1dCksIDB4ZjggPSAyNDggKi8KLQkweGNiLCAweDAwLAkJLyogdnNpemUgaGkgKGlucHV0KSAqLwotCTB4Y2MsIDB4ZDAsCQkvKiBoc2l6ZSBsb3cgKG91dHB1dCksIDB4MDJkMCA9IDcyMCAqLwotCTB4Y2QsIDB4MDIsCQkvKiBoc2l6ZSBoaSAob3V0cHV0KSAqLworCVJfQzBfQl9UQVNLX0hBTkRMSU5HX0NOVEwsIDB4MDAsCisJUl9DMV9CX1hfUE9SVF9GT1JNQVRTX0FORF9DT05GLCAweDA4LAorCVJfQzJfQl9JTlBVVF9SRUZFUkVOQ0VfU0lHTkFMX0RFRklOSVRJT04sIDB4MDAsCisJUl9DM19CX0lfUE9SVF9GT1JNQVRTX0FORF9DT05GLCAweDgwLAogCi0JMHhmMCwgMHhhZCwJCS8qIFNldCBQTEwgUmVnaXN0ZXIuIDYwaHogNTI1IGxpbmVzIHBlciBmcmFtZSwgMjcgTUh6ICovCi0JMHhmMSwgMHgwNSwJCS8qIGxvdyBiaXQgd2l0aCAweEYwICovCi0JMHhmNSwgMHhhZCwJCS8qIFNldCBwdWxzZSBnZW5lcmF0b3IgcmVnaXN0ZXIgKi8KLQkweGY2LCAweDAxLAorCS8qIDB4MDAwMiBpcyBtaW5pbXVtICovCisJUl9DNF9CX0hPUklaX0lOUFVUX1dJTkRPV19TVEFSVCwgMHgwMiwKKwlSX0M1X0JfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJUX01TQiwgMHgwMCwKIAotCTB4ODcsIDB4MDAsCQkvKiBEaXNhYmxlIEktcG9ydCBvdXRwdXQgKi8KLQkweDg4LCAweGQwLAkJLyogcmVzZXQgc2NhbGVyICovCi0JMHg4MCwgMHgyMCwJCS8qIEFjdGl2YXRlIG9ubHkgdGFzayAiQiIsIGNvbnRpbnVvdXMgbW9kZSAod2FzIDB4QTApICovCi0JMHg4OCwgMHhmMCwJCS8qIGFjdGl2YXRlIHNjYWxlciAqLwotCTB4ODcsIDB4MDEsCQkvKiBFbmFibGUgSS1wb3J0IG91dHB1dCAqLwotCTB4MDAsIDB4MDAKLX07CisJLyogMHgwMmQwID0gNzIwICovCisJUl9DNl9CX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEgsIDB4ZDAsCisJUl9DN19CX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEhfTVNCLCAweDAyLAogCi1zdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2NmZ181MGh6X2Z1bGxyZXNfeFtdID0gewotCTB4Y2MsIDB4ZDAsCQkvKiBoc2l6ZSBsb3cgKG91dHB1dCksIDcyMCBzYW1lIGFzIDYwaHogKi8KLQkweGNkLCAweDAyLAkJLyogaHNpemUgaGkgKG91dHB1dCkgKi8KKwkvKiB2d2luZG93IHN0YXJ0IDB4MTIgPSAxOCAqLworCVJfQzhfQl9WRVJUX0lOUFVUX1dJTkRPV19TVEFSVCwgMHgxMiwKKwlSX0M5X0JfVkVSVF9JTlBVVF9XSU5ET1dfU1RBUlRfTVNCLCAweDAwLAogCi0JMHhkMCwgMHgwMSwJCS8qIGRvd24gc2NhbGUgPSAxICovCi0JMHhkOCwgMHgwMCwJCS8qIGhvciBsdW0gc2NhbGluZyAweDA0MDAgPSAxICovCi0JMHhkOSwgMHgwNCwKLQkweGRjLCAweDAwLAkJLyogaG9yIGNocm9tIHNjYWxpbmcgMHgwMjAwLiBtdXN0IGJlIGhvciBsdW0gc2NhbGluZyAvIDIgKi8KLQkweGRkLCAweDAyLAkJLyogSC1zY2FsaW5nIGluY3IgY2hyb21hICovCisJLyogdndpbmRvdyBsZW5ndGggMHhmOCA9IDI0OCAqLworCVJfQ0FfQl9WRVJUX0lOUFVUX1dJTkRPV19MRU5HVEgsIFZSRVNfNjBIWj4+MSwKKwlSX0NCX0JfVkVSVF9JTlBVVF9XSU5ET1dfTEVOR1RIX01TQiwgVlJFU182MEhaPj45LAogCi0JMHgwMCwgMHgwMAotfTsKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzUwaHpfZnVsbHJlc195W10gPSB7Ci0JMHhjZSwgMHgyMCwJCS8qIHZzaXplIGxvdyAob3V0cHV0KSwgMHgwMTIwID0gMjg4ICovCi0JMHhjZiwgMHgwMSwJCS8qIHZzaXplIGhpIChvdXRwdXQpICovCisJLyogaHdpbmRvdyAweDAyZDAgPSA3MjAgKi8KKwlSX0NDX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEgsIDB4ZDAsCisJUl9DRF9CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwgMHgwMiwKIAotCTB4ZDUsIDB4NDAsCQkvKiBMdW0gY29udHJhc3QsIG5vbWluYWwgdmFsdWUgPSAweDQwICovCi0JMHhkNiwgMHg0MCwJCS8qIENocm9tYSBzYXR1ci4gbm9taW5hbCB2YWx1ZSA9IDB4ODAgKi8KLQotCTB4ZTAsIDB4MDAsCQkvKiBWLXNjYWxpbmcgaW5jciBsdW1hIGxvdyAqLwotCTB4ZTEsIDB4MDQsCQkvKiAiIGhpICovCi0JMHhlMiwgMHgwMCwJCS8qIFYtc2NhbGluZyBpbmNyIGNocm9tYSBsb3cgKi8KLQkweGUzLCAweDA0LAkJLyogIiBoaSAqLworCVJfRjBfTEZDT19QRVJfTElORSwgMHhhZCwJCS8qIFNldCBQTEwgUmVnaXN0ZXIuIDYwaHogNTI1IGxpbmVzIHBlciBmcmFtZSwgMjcgTUh6ICovCisJUl9GMV9QX0lfUEFSQU1fU0VMRUNULCAweDA1LAkJLyogbG93IGJpdCB3aXRoIDB4RjAgKi8KKwlSX0Y1X1BVTFNHRU5fTElORV9MRU5HVEgsIDB4YWQsCisJUl9GNl9QVUxTRV9BX1BPU19MU0JfQU5EX1BVTFNFR0VOX0NPTkZJRywgMHgwMSwKIAogCTB4MDAsIDB4MDAKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnXzUwaHpfdmlkZW9bXSA9IHsKLQkweDgwLCAweDAwLAkJLyogcmVzZXQgdGFza3MgKi8KLQkweDg4LCAweGQwLAkJLyogcmVzZXQgc2NhbGVyICovCisJUl84MF9HTE9CQUxfQ05UTF8xLCAweDAwLAorCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGQwLAkvKiByZXNldCBzY2FsZXIgKi8KIAotCTB4MTUsIDB4MzcsCQkvKiBWR0FURSBzdGFydCAqLwotCTB4MTYsIDB4MTYsCQkvKiBWR0FURSBzdG9wICovCi0JMHgxNywgMHg5OSwJCS8qIFZHQVRFIE1TQiBhbmQgb3RoZXIgdmFsdWVzICovCisJUl8xNV9WR0FURV9TVEFSVF9GSURfQ0hHLCAweDM3LAkJLyogVkdBVEUgc3RhcnQgKi8KKwlSXzE2X1ZHQVRFX1NUT1AsIDB4MTYsCisJUl8xN19NSVNDX1ZHQVRFX0NPTkZfQU5EX01TQiwgMHg5OSwKIAotCTB4MDgsIDB4MjgsCQkvKiAweDI4ID0gUEFMICovCi0JMHgwZSwgMHgwNywJCS8qIGNocm9taW5hbmNlIGNvbnRyb2wgMSAqLworCVJfMDhfU1lOQ19DTlRMLCAweDI4LAkJCS8qIDB4MjggPSBQQUwgKi8KKwlSXzBFX0NIUk9NQV9DTlRMXzEsIDB4MDcsCiAKLQkweDVhLCAweDAzLAkJLyogVmVydGljYWwgb2Zmc2V0LCBzdGFuZGFyZCA1MGh6IHZhbHVlICovCisJUl81QV9WX09GRl9GT1JfU0xJQ0VSLCAweDAzLAkJLyogc3RhbmRhcmQgNTBoeiB2YWx1ZSAqLwogCiAJLyogVGFzayBBICovCi0JMHg5MCwgMHg4MSwJCS8qIFRhc2sgSGFuZGxpbmcgQ29udHJvbCAqLwotCTB4OTEsIDB4NDgsCQkvKiBYLXBvcnQgZm9ybWF0cy9jb25maWcgKi8KLQkweDkyLCAweDQwLAkJLyogSW5wdXQgUmVmLiBzaWduYWwgRGVmLiAqLwotCTB4OTMsIDB4ODQsCQkvKiBJLXBvcnQgY29uZmlnICovCisJUl85MF9BX1RBU0tfSEFORExJTkdfQ05UTCwgMHg4MSwKKwlSXzkxX0FfWF9QT1JUX0ZPUk1BVFNfQU5EX0NPTkYsIDB4NDgsCisJUl85Ml9BX1hfUE9SVF9JTlBVVF9SRUZFUkVOQ0VfU0lHTkFMLCAweDQwLAorCVJfOTNfQV9JX1BPUlRfT1VUUFVUX0ZPUk1BVFNfQU5EX0NPTkYsIDB4ODQsCisKIAkvKiBUaGlzIGlzIHdlaXJkOiB0aGUgZGF0YXNoZWV0IHNheXMgdGhhdCB5b3Ugc2hvdWxkIHVzZSAyIGFzIHRoZSBtaW5pbXVtIHZhbHVlLCAqLwogCS8qIGJ1dCBIYXVwcGF1Z2UgdXNlcyAwLCBhbmQgY2hhbmdpbmcgdGhhdCB0byAyIGNhdXNlcyBpbmRlZWQgcHJvYmxlbXMgKGZvciA1MGh6KSAqLwotCTB4OTQsIDB4MDAsCQkvKiBob2Zmc2V0IGxvdyAoaW5wdXQpLCAweDAwMDIgaXMgbWluaW11bSAqLwotCTB4OTUsIDB4MDAsCQkvKiBob2Zmc2V0IGhpIChpbnB1dCkgKi8KLQkweDk2LCAweGQwLAkJLyogaHNpemUgbG93IChpbnB1dCksIDB4MDJkMCA9IDcyMCAqLwotCTB4OTcsIDB4MDIsCQkvKiBoc2l6ZSBoaSAoaW5wdXQpICovCi0JMHg5OCwgMHgwMywJCS8qIHZvZmZzZXQgbG93IChpbnB1dCkgKi8KLQkweDk5LCAweDAwLAkJLyogdm9mZnNldCBoaSAoaW5wdXQpICovCi0JMHg5YSwgMHgxMiwJCS8qIHZzaXplIGxvdyAoaW5wdXQpLCAweDEyID0gMTggKi8KLQkweDliLCAweDAwLAkJLyogdnNpemUgaGkgKGlucHV0KSAqLwotCTB4OWMsIDB4YTAsCQkvKiBoc2l6ZSBsb3cgKG91dHB1dCksIDB4MDVhMCA9IDE0NDAgKi8KLQkweDlkLCAweDA1LAkJLyogaHNpemUgaGkgKG91dHB1dCkgKi8KLQkweDllLCAweDEyLAkJLyogdnNpemUgbG93IChvdXRwdXQpLCAweDEyID0gMTggKi8KLQkweDlmLCAweDAwLAkJLyogdnNpemUgaGkgKG91dHB1dCkgKi8KKwkvKiBob2Zmc2V0IGxvdyAoaW5wdXQpLCAweDAwMDIgaXMgbWluaW11bSAqLworCVJfOTRfQV9IT1JJWl9JTlBVVF9XSU5ET1dfU1RBUlQsIDB4MDAsCisJUl85NV9BX0hPUklaX0lOUFVUX1dJTkRPV19TVEFSVF9NU0IsIDB4MDAsCisKKwkvKiBoc2l6ZSBsb3cgKGlucHV0KSwgMHgwMmQwID0gNzIwICovCisJUl85Nl9BX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEgsIDB4ZDAsCisJUl85N19BX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEhfTVNCLCAweDAyLAorCisJUl85OF9BX1ZFUlRfSU5QVVRfV0lORE9XX1NUQVJULCAweDAzLAorCVJfOTlfQV9WRVJUX0lOUFVUX1dJTkRPV19TVEFSVF9NU0IsIDB4MDAsCisKKwkvKiB2c2l6ZSAweDEyID0gMTggKi8KKwlSXzlBX0FfVkVSVF9JTlBVVF9XSU5ET1dfTEVOR1RILCAweDEyLAorCVJfOUJfQV9WRVJUX0lOUFVUX1dJTkRPV19MRU5HVEhfTVNCLCAweDAwLAorCisJLyogaHNpemUgMHgwNWEwID0gMTQ0MCAqLworCVJfOUNfQV9IT1JJWl9PVVRQVVRfV0lORE9XX0xFTkdUSCwgMHhhMCwKKwlSXzlEX0FfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEhfTVNCLCAweDA1LAkvKiBoc2l6ZSBoaSAob3V0cHV0KSAqLworCVJfOUVfQV9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RILCAweDEyLAkJLyogdnNpemUgbG93IChvdXRwdXQpLCAweDEyID0gMTggKi8KKwlSXzlGX0FfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSF9NU0IsIDB4MDAsCS8qIHZzaXplIGhpIChvdXRwdXQpICovCiAKIAkvKiBUYXNrIEIgKi8KLQkweGMwLCAweDAwLAkJLyogVGFzayBIYW5kbGluZyBDb250cm9sICovCi0JMHhjMSwgMHgwOCwJCS8qIFgtcG9ydCBmb3JtYXRzL2NvbmZpZyAqLwotCTB4YzIsIDB4MDAsCQkvKiBJbnB1dCBSZWYuIHNpZ25hbCBEZWYuICovCi0JMHhjMywgMHg4MCwJCS8qIEktcG9ydCBjb25maWcgKi8KLQkweGM0LCAweDAwLAkJLyogaG9mZnNldCBsb3cgKGlucHV0KSwgMHgwMDAyIGlzIG1pbmltdW0uIFNlZSBjb21tZW50IGF0IDB4OTQgYWJvdmUuICovCi0JMHhjNSwgMHgwMCwJCS8qIGhvZmZzZXQgaGkgKGlucHV0KSAqLwotCTB4YzYsIDB4ZDAsCQkvKiBoc2l6ZSBsb3cgKGlucHV0KSwgMHgwMmQwID0gNzIwICovCi0JMHhjNywgMHgwMiwJCS8qIGhzaXplIGhpIChpbnB1dCkgKi8KLQkweGM4LCAweDE2LAkJLyogdm9mZnNldCBsb3cgKGlucHV0KSwgMHgxNiA9IDIyICovCi0JMHhjOSwgMHgwMCwJCS8qIHZvZmZzZXQgaGkgKGlucHV0KSAqLwotCTB4Y2EsIDB4MjAsCQkvKiB2c2l6ZSBsb3cgKGlucHV0KSwgMHgwMTIwID0gMjg4ICovCi0JMHhjYiwgMHgwMSwJCS8qIHZzaXplIGhpIChpbnB1dCkgKi8KLQkweGNjLCAweGQwLAkJLyogaHNpemUgbG93IChvdXRwdXQpLCAweDAyZDAgPSA3MjAgKi8KLQkweGNkLCAweDAyLAkJLyogaHNpemUgaGkgKG91dHB1dCkgKi8KLQkweGNlLCAweDIwLAkJLyogdnNpemUgbG93IChvdXRwdXQpLCAweDAxMjAgPSAyODggKi8KLQkweGNmLCAweDAxLAkJLyogdnNpemUgaGkgKG91dHB1dCkgKi8KKwlSX0MwX0JfVEFTS19IQU5ETElOR19DTlRMLCAweDAwLAorCVJfQzFfQl9YX1BPUlRfRk9STUFUU19BTkRfQ09ORiwgMHgwOCwKKwlSX0MyX0JfSU5QVVRfUkVGRVJFTkNFX1NJR05BTF9ERUZJTklUSU9OLCAweDAwLAorCVJfQzNfQl9JX1BPUlRfRk9STUFUU19BTkRfQ09ORiwgMHg4MCwKIAotCTB4ZjAsIDB4YjAsCQkvKiBTZXQgUExMIFJlZ2lzdGVyLiA1MGh6IDYyNSBsaW5lcyBwZXIgZnJhbWUsIDI3IE1IeiAqLwotCTB4ZjEsIDB4MDUsCQkvKiBsb3cgYml0IHdpdGggMHhGMCwgKHdhcyAweDA1KSAqLwotCTB4ZjUsIDB4YjAsCQkvKiBTZXQgcHVsc2UgZ2VuZXJhdG9yIHJlZ2lzdGVyICovCi0JMHhmNiwgMHgwMSwKKwkvKiBUaGlzIGlzIHdlaXJkOiB0aGUgZGF0YXNoZWV0IHNheXMgdGhhdCB5b3Ugc2hvdWxkIHVzZSAyIGFzIHRoZSBtaW5pbXVtIHZhbHVlLCAqLworCS8qIGJ1dCBIYXVwcGF1Z2UgdXNlcyAwLCBhbmQgY2hhbmdpbmcgdGhhdCB0byAyIGNhdXNlcyBpbmRlZWQgcHJvYmxlbXMgKGZvciA1MGh6KSAqLworCS8qIGhvZmZzZXQgbG93IChpbnB1dCksIDB4MDAwMiBpcyBtaW5pbXVtLiBTZWUgY29tbWVudCBhYm92ZS4gKi8KKwlSX0M0X0JfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJULCAweDAwLAorCVJfQzVfQl9IT1JJWl9JTlBVVF9XSU5ET1dfU1RBUlRfTVNCLCAweDAwLAogCi0JMHg4NywgMHgwMCwJCS8qIERpc2FibGUgSS1wb3J0IG91dHB1dCAqLwotCTB4ODgsIDB4ZDAsCQkvKiByZXNldCBzY2FsZXIgKHdhcyAweEQwKSAqLwotCTB4ODAsIDB4MjAsCQkvKiBBY3RpdmF0ZSBvbmx5IHRhc2sgIkIiICovCi0JMHg4OCwgMHhmMCwJCS8qIGFjdGl2YXRlIHNjYWxlciAqLwotCTB4ODcsIDB4MDEsCQkvKiBFbmFibGUgSS1wb3J0IG91dHB1dCAqLworCS8qIGhzaXplIDB4MDJkMCA9IDcyMCAqLworCVJfQzZfQl9IT1JJWl9JTlBVVF9XSU5ET1dfTEVOR1RILCAweGQwLAorCVJfQzdfQl9IT1JJWl9JTlBVVF9XSU5ET1dfTEVOR1RIX01TQiwgMHgwMiwKKworCS8qIHZvZmZzZXQgMHgxNiA9IDIyICovCisJUl9DOF9CX1ZFUlRfSU5QVVRfV0lORE9XX1NUQVJULCAweDE2LAorCVJfQzlfQl9WRVJUX0lOUFVUX1dJTkRPV19TVEFSVF9NU0IsIDB4MDAsCisKKwkvKiB2c2l6ZSAweDAxMjAgPSAyODggKi8KKwlSX0NBX0JfVkVSVF9JTlBVVF9XSU5ET1dfTEVOR1RILCAweDIwLAorCVJfQ0JfQl9WRVJUX0lOUFVUX1dJTkRPV19MRU5HVEhfTVNCLCAweDAxLAorCisJLyogaHNpemUgMHgwMmQwID0gNzIwICovCisJUl9DQ19CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RILCAweGQwLAorCVJfQ0RfQl9IT1JJWl9PVVRQVVRfV0lORE9XX0xFTkdUSF9NU0IsIDB4MDIsCisKKwlSX0YwX0xGQ09fUEVSX0xJTkUsIDB4YjAsCQkvKiBTZXQgUExMIFJlZ2lzdGVyLiA1MGh6IDYyNSBsaW5lcyBwZXIgZnJhbWUsIDI3IE1IeiAqLworCVJfRjFfUF9JX1BBUkFNX1NFTEVDVCwgMHgwNSwJCS8qIGxvdyBiaXQgd2l0aCAweEYwLCAod2FzIDB4MDUpICovCisJUl9GNV9QVUxTR0VOX0xJTkVfTEVOR1RILCAweGIwLAorCVJfRjZfUFVMU0VfQV9QT1NfTFNCX0FORF9QVUxTRUdFTl9DT05GSUcsIDB4MDEsCisKIAkweDAwLCAweDAwCiB9OwogCiAvKiA9PT09PT09PT09PT09PSBTQUE3NzE1IFZJREVPIHRlbXBsYXRlcyAoZW5kKSA9PT09PT09ICAqLwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2NmZ192Ymlfb25bXSA9IHsKLQkweDgwLCAweDAwLAkJLyogcmVzZXQgdGFza3MgKi8KLQkweDg4LCAweGQwLAkJLyogcmVzZXQgc2NhbGVyICovCi0JMHg4MCwgMHgzMCwJCS8qIEFjdGl2YXRlIGJvdGggdGFza3MgKi8KLQkweDg4LCAweGYwLAkJLyogYWN0aXZhdGUgc2NhbGVyICovCi0JMHg4NywgMHgwMSwJCS8qIEVuYWJsZSBJLXBvcnQgb3V0cHV0ICovCisJUl84MF9HTE9CQUxfQ05UTF8xLCAweDAwLAkJCS8qIHJlc2V0IHRhc2tzICovCisJUl84OF9QT1dFUl9TQVZFX0FEQ19QT1JUX0NOVEwsIDB4ZDAsCQkvKiByZXNldCBzY2FsZXIgKi8KKwlSXzgwX0dMT0JBTF9DTlRMXzEsIDB4MzAsCQkJLyogQWN0aXZhdGUgYm90aCB0YXNrcyAqLworCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGYwLAkJLyogYWN0aXZhdGUgc2NhbGVyICovCisJUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwgMHgwMSwJLyogRW5hYmxlIEktcG9ydCBvdXRwdXQgKi8KKwogCTB4MDAsIDB4MDAKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTVfY2ZnX3ZiaV9vZmZbXSA9IHsKLQkweDgwLCAweDAwLAkJLyogcmVzZXQgdGFza3MgKi8KLQkweDg4LCAweGQwLAkJLyogcmVzZXQgc2NhbGVyICovCi0JMHg4MCwgMHgyMCwJCS8qIEFjdGl2YXRlIG9ubHkgdGFzayAiQiIgKi8KLQkweDg4LCAweGYwLAkJLyogYWN0aXZhdGUgc2NhbGVyICovCi0JMHg4NywgMHgwMSwJCS8qIEVuYWJsZSBJLXBvcnQgb3V0cHV0ICovCisJUl84MF9HTE9CQUxfQ05UTF8xLCAweDAwLAkJCS8qIHJlc2V0IHRhc2tzICovCisJUl84OF9QT1dFUl9TQVZFX0FEQ19QT1JUX0NOVEwsIDB4ZDAsCQkvKiByZXNldCBzY2FsZXIgKi8KKwlSXzgwX0dMT0JBTF9DTlRMXzEsIDB4MjAsCQkJLyogQWN0aXZhdGUgb25seSB0YXNrICJCIiAqLworCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGYwLAkJLyogYWN0aXZhdGUgc2NhbGVyICovCisJUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwgMHgwMSwJLyogRW5hYmxlIEktcG9ydCBvdXRwdXQgKi8KKwogCTB4MDAsIDB4MDAKIH07CiAKLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTNfaW5pdF9hdXRvX2lucHV0W10gPSB7Ci0JMHgwMSwgMHgwOCwJLyogUEg3MTEzX0lOQ1JFTUVOVF9ERUxBWSAtICgxKSAoMSkgKDEpICgxKSBJREVMMyBJREVMMiBJREVMTDEgSURFTDAgKi8KLQkweDAyLCAweGMyLAkvKiBQSDcxMTNfQU5BTE9HX0lOUFVUX0NPTlRSXzEgLSBGVVNFMSBGVVNFMCBHVURMMSBHVURMMCBNT0RFMyBNT0RFMiBNT0RFMSBNT0RFMCAqLwotCTB4MDMsIDB4MzAsCS8qIFBINzExM19BTkFMT0dfSU5QVVRfQ09OVFJfMiAtICgxKSBITE5SUyBWQlNMIFdQT0ZGIEhPTERHIEdBRklYIEdBSTI4IEdBSTE4ICovCi0JMHgwNCwgMHgwMCwJLyogUEg3MTEzX0FOQUxPR19JTlBVVF9DT05UUl8zIC0gR0FJMTcgR0FJMTYgR0FJMTUgR0FJMTQgR0FJMTMgR0FJMTIgR0FJMTEgR0FJMTAgKi8KLQkweDA1LCAweDAwLAkvKiBQSDcxMTNfQU5BTE9HX0lOUFVUX0NPTlRSXzQgLSBHQUkyNyBHQUkyNiBHQUkyNSBHQUkyNCBHQUkyMyBHQUkyMiBHQUkyMSBHQUkyMCAqLwotCTB4MDYsIDB4ODksCS8qIFBINzExM19IT1JJWk9OVEFMX1NZTkNfU1RBUlQgLSBIU0I3IEhTQjYgSFNCNSBIU0I0IEhTQjMgSFNCMiBIU0IxIEhTQjAgKi8KLQkweDA3LCAweDBkLAkvKiBQSDcxMTNfSE9SSVpPTlRBTF9TWU5DX1NUT1AgLSBIU1M3IEhTUzYgSFNTNSBIU1M0IEhTUzMgSFNTMiBIU1MxIEhTUzAgKi8KLQkweDA4LCAweDg4LAkvKiBQSDcxMTNfU1lOQ19DT05UUk9MIC0gQVVGRCBGU0VMIEZPRVQgSFRDMSBIVEMwIEhQTEwgVk5PSTEgVk5PSTAgKi8KLQkweDA5LCAweDAxLAkvKiBQSDcxMTNfTFVNSU5BTkNFX0NPTlRST0wgLSBCWVBTIFBSRUYgQlBTUzEgQlBTUzAgVkJMQiBVUFRDViBBUEVSMSBBUEVSMCAqLwotCTB4MGEsIDB4ODAsCS8qIFBINzExM19MVU1JTkFOQ0VfQlJJR0hUTkVTUyAtIEJSSUc3IEJSSUc2IEJSSUc1IEJSSUc0IEJSSUczIEJSSUcyIEJSSUcxIEJSSUcwICovCi0JMHgwYiwgMHg0NywJLyogUEg3MTEzX0xVTUlOQU5DRV9DT05UUkFTVCAtIENPTlQ3IENPTlQ2IENPTlQ1IENPTlQ0IENPTlQzIENPTlQyIENPTlQxIENPTlQwICovCi0JMHgwYywgMHg0MCwJLyogUEg3MTEzX0NIUk9NQV9TQVRVUkFUSU9OIC0gU0FUTjcgU0FUTjYgU0FUTjUgU0FUTjQgU0FUTjMgU0FUTjIgU0FUTjEgU0FUTjAgKi8KLQkweDBkLCAweDAwLAkvKiBQSDcxMTNfQ0hST01BX0hVRV9DT05UUk9MIC0gSFVFQzcgSFVFQzYgSFVFQzUgSFVFQzQgSFVFQzMgSFVFQzIgSFVFQzEgSFVFQzAgKi8KLQkweDBlLCAweDAxLAkvKiBQSDcxMTNfQ0hST01BX0NPTlRST0wgLSBDRFRPIENTVEQyIENTVEQxIENTVEQwIERDQ0YgRkNUQyBDSEJXMSBDSEJXMCAqLwotCTB4MGYsIDB4MmEsCS8qIFBINzExM19DSFJPTUFfR0FJTl9DT05UUk9MIC0gQUNHQyBDR0FJTjYgQ0dBSU41IENHQUlONCBDR0FJTjMgQ0dBSU4yIENHQUlOMSBDR0FJTjAgKi8KLQkweDEwLCAweDA4LAkvKiBQSDcxMTNfRk9STUFUX0RFTEFZX0NPTlRST0wgLSBPRlRTMSBPRlRTMCBIREVMMSBIREVMMCBWUkxOIFlERUwyIFlERUwxIFlERUwwICovCi0JMHgxMSwgMHgwYywJLyogUEg3MTEzX09VVFBVVF9DT05UUk9MXzEgLSBHUFNXMSBDTTk5IEdQU1cwIEhMU0VMIE9FWUMgT0VSVCBWSVBCIENPTE8gKi8KLQkweDEyLCAweDA3LAkvKiBQSDcxMTNfT1VUUFVUX0NPTlRST0xfMiAtIFJUU0UxMyBSVFNFMTIgUlRTRTExIFJUU0UxMCBSVFNFMDMgUlRTRTAyIFJUU0UwMSBSVFNFMDAgKi8KLQkweDEzLCAweDAwLAkvKiBQSDcxMTNfT1VUUFVUX0NPTlRST0xfMyAtIEFETFNCICgxKSAoMSkgT0xEU0IgRklEUCAoMSkgQU9TTDEgQU9TTDAgKi8KLQkweDE0LCAweDAwLAkvKiBSRVNFUlZFRCAxNCAtICgxKSAoMSkgKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgKi8KLQkweDE1LCAweDAwLAkvKiBQSDcxMTNfVl9HQVRFMV9TVEFSVCAtIFZTVEE3IFZTVEE2IFZTVEE1IFZTVEE0IFZTVEEzIFZTVEEyIFZTVEExIFZTVEEwICovCi0JMHgxNiwgMHgwMCwJLyogUEg3MTEzX1ZfR0FURTFfU1RPUCAtIFZTVE83IFZTVE82IFZTVE81IFZTVE80IFZTVE8zIFZTVE8yIFZTVE8xIFZTVE8wICovCi0JMHgxNywgMHgwMCwJLyogUEg3MTEzX1ZfR0FURTFfTVNCIC0gKDEpICgxKSAoMSkgKDEpICgxKSAoMSkgVlNUTzggVlNUQTggKi8KLQkweDAwLCAweDAwCi19OwogCiBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBzYWE3MTE1X2luaXRfbWlzY1tdID0gewotCTB4ODEsIDB4MDEsCQkvKiByZWcgMHgxNSwweDE2IGRlZmluZSBibGFua2luZyB3aW5kb3cgKi8KLQkweDgyLCAweDAwLAotCTB4ODMsIDB4MDEsCQkvKiBJIHBvcnQgc2V0dGluZ3MgKi8KLQkweDg0LCAweDIwLAotCTB4ODUsIDB4MjEsCi0JMHg4NiwgMHhjNSwKLQkweDg3LCAweDAxLAorCVJfODFfVl9TWU5DX0ZMRF9JRF9TUkNfU0VMX0FORF9SRVRJTUVEX1ZfRiwgMHgwMSwKKwlSXzgzX1hfUE9SVF9JX09fRU5BX0FORF9PVVRfQ0xLLCAweDAxLAorCVJfODRfSV9QT1JUX1NJR05BTF9ERUYsIDB4MjAsCisJUl84NV9JX1BPUlRfU0lHTkFMX1BPTEFSLCAweDIxLAorCVJfODZfSV9QT1JUX0ZJRk9fRkxBR19DTlRMX0FORF9BUkJJVCwgMHhjNSwKKwlSXzg3X0lfUE9SVF9JX09fRU5BX09VVF9DTEtfQU5EX0dBVEVELCAweDAxLAogCiAJLyogVGFzayBBICovCi0JMHhhMCwgMHgwMSwJCS8qIGRvd24gc2NhbGUgPSAxICovCi0JMHhhMSwgMHgwMCwJCS8qIHByZXNjYWxlIGFjY3VtdWxhdGlvbiBsZW5ndGggPSAxICovCi0JMHhhMiwgMHgwMCwJCS8qIGRjIGdhaW4gYW5kIGZpciBwcmVmaWx0ZXIgY29udHJvbCAqLwotCTB4YTQsIDB4ODAsCQkvKiBMdW0gQnJpZ2h0bmVzcywgbm9taW5hbCB2YWx1ZSA9IDB4ODAgKi8KLQkweGE1LCAweDQwLAkJLyogTHVtIGNvbnRyYXN0LCBub21pbmFsIHZhbHVlID0gMHg0MCAqLwotCTB4YTYsIDB4NDAsCQkvKiBDaHJvbWEgc2F0dXIuIG5vbWluYWwgdmFsdWUgPSAweDgwICovCi0JMHhhOCwgMHgwMCwJCS8qIGhvciBsdW0gc2NhbGluZyAweDAyMDAgPSAyIHpvb20gKi8KLQkweGE5LCAweDAyLAkJLyogbm90ZTogMiB4IHpvb20gZW5zdXJlcyB0aGF0IFZCSSBsaW5lcyBoYXZlIHNhbWUgbGVuZ3RoIGFzIHZpZGVvIGxpbmVzLiAqLwotCTB4YWEsIDB4MDAsCQkvKiBILXBoYXNlIG9mZnNldCBMdW1hID0gMCAqLwotCTB4YWMsIDB4MDAsCQkvKiBob3IgY2hyb20gc2NhbGluZyAweDAyMDAuIG11c3QgYmUgaG9yIGx1bSBzY2FsaW5nIC8gMiAqLwotCTB4YWQsIDB4MDEsCQkvKiBILXNjYWxpbmcgaW5jciBjaHJvbWEgKi8KLQkweGFlLCAweDAwLAkJLyogSC1waGFzZSBvZmZzZXQgY2hyb21hLiBtdXN0IGJlIG9mZnNldCBsdW1hIC8gMiAqLworCVJfQTBfQV9IT1JJWl9QUkVTQ0FMSU5HLCAweDAxLAorCVJfQTFfQV9BQ0NVTVVMQVRJT05fTEVOR1RILCAweDAwLAorCVJfQTJfQV9QUkVTQ0FMRVJfRENfR0FJTl9BTkRfRklSX1BSRUZJTFRFUiwgMHgwMCwKIAotCTB4YjAsIDB4MDAsCQkvKiBWLXNjYWxpbmcgaW5jciBsdW1hIGxvdyAqLwotCTB4YjEsIDB4MDQsCQkvKiAiIGhpICovCi0JMHhiMiwgMHgwMCwJCS8qIFYtc2NhbGluZyBpbmNyIGNocm9tYSBsb3cgKi8KLQkweGIzLCAweDA0LAkJLyogIiBoaSAqLwotCTB4YjQsIDB4MDEsCQkvKiBWLXNjYWxpbmcgbW9kZSBjb250cm9sICovCi0JMHhiOCwgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGNocm9tYSAwMCAqLwotCTB4YjksIDB4MDAsCQkvKiBWLXBoYXNlIG9mZnNldCBjaHJvbWEgMDEgKi8KLQkweGJhLCAweDAwLAkJLyogVi1waGFzZSBvZmZzZXQgY2hyb21hIDEwICovCi0JMHhiYiwgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGNocm9tYSAxMSAqLwotCTB4YmMsIDB4MDAsCQkvKiBWLXBoYXNlIG9mZnNldCBsdW1hIDAwICovCi0JMHhiZCwgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGx1bWEgMDEgKi8KLQkweGJlLCAweDAwLAkJLyogVi1waGFzZSBvZmZzZXQgbHVtYSAxMCAqLwotCTB4YmYsIDB4MDAsCQkvKiBWLXBoYXNlIG9mZnNldCBsdW1hIDExICovCisJLyogQ29uZmlndXJlIGNvbnRyb2xzIGF0IG5vbWluYWwgdmFsdWUqLworCVJfQTRfQV9MVU1BX0JSSUdIVE5FU1NfQ05UTCwgMHg4MCwKKwlSX0E1X0FfTFVNQV9DT05UUkFTVF9DTlRMLCAweDQwLAorCVJfQTZfQV9DSFJPTUFfU0FUVVJBVElPTl9DTlRMLCAweDQwLAorCisJLyogbm90ZTogMiB4IHpvb20gZW5zdXJlcyB0aGF0IFZCSSBsaW5lcyBoYXZlIHNhbWUgbGVuZ3RoIGFzIHZpZGVvIGxpbmVzLiAqLworCVJfQThfQV9IT1JJWl9MVU1BX1NDQUxJTkdfSU5DLCAweDAwLAorCVJfQTlfQV9IT1JJWl9MVU1BX1NDQUxJTkdfSU5DX01TQiwgMHgwMiwKKworCVJfQUFfQV9IT1JJWl9MVU1BX1BIQVNFX09GRiwgMHgwMCwKKworCS8qIG11c3QgYmUgaG9yaXogbHVtIHNjYWxpbmcgLyAyICovCisJUl9BQ19BX0hPUklaX0NIUk9NQV9TQ0FMSU5HX0lOQywgMHgwMCwKKwlSX0FEX0FfSE9SSVpfQ0hST01BX1NDQUxJTkdfSU5DX01TQiwgMHgwMSwKKworCS8qIG11c3QgYmUgb2Zmc2V0IGx1bWEgLyAyICovCisJUl9BRV9BX0hPUklaX0NIUk9NQV9QSEFTRV9PRkYsIDB4MDAsCisKKwlSX0IwX0FfVkVSVF9MVU1BX1NDQUxJTkdfSU5DLCAweDAwLAorCVJfQjFfQV9WRVJUX0xVTUFfU0NBTElOR19JTkNfTVNCLCAweDA0LAorCisJUl9CMl9BX1ZFUlRfQ0hST01BX1NDQUxJTkdfSU5DLCAweDAwLAorCVJfQjNfQV9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQ19NU0IsIDB4MDQsCisKKwlSX0I0X0FfVkVSVF9TQ0FMSU5HX01PREVfQ05UTCwgMHgwMSwKKworCVJfQjhfQV9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMDAsIDB4MDAsCisJUl9COV9BX1ZFUlRfQ0hST01BX1BIQVNFX09GRl8wMSwgMHgwMCwKKwlSX0JBX0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzEwLCAweDAwLAorCVJfQkJfQV9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMTEsIDB4MDAsCisKKwlSX0JDX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8wMCwgMHgwMCwKKwlSX0JEX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8wMSwgMHgwMCwKKwlSX0JFX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8xMCwgMHgwMCwKKwlSX0JGX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8xMSwgMHgwMCwKIAogCS8qIFRhc2sgQiAqLwotCTB4ZDAsIDB4MDEsCQkvKiBkb3duIHNjYWxlID0gMSAqLwotCTB4ZDEsIDB4MDAsCQkvKiBwcmVzY2FsZSBhY2N1bXVsYXRpb24gbGVuZ3RoID0gMSAqLwotCTB4ZDIsIDB4MDAsCQkvKiBkYyBnYWluIGFuZCBmaXIgcHJlZmlsdGVyIGNvbnRyb2wgKi8KLQkweGQ0LCAweDgwLAkJLyogTHVtIEJyaWdodG5lc3MsIG5vbWluYWwgdmFsdWUgPSAweDgwICovCi0JMHhkNSwgMHg0MCwJCS8qIEx1bSBjb250cmFzdCwgbm9taW5hbCB2YWx1ZSA9IDB4NDAgKi8KLQkweGQ2LCAweDQwLAkJLyogQ2hyb21hIHNhdHVyLiBub21pbmFsIHZhbHVlID0gMHg4MCAqLwotCTB4ZDgsIDB4MDAsCQkvKiBob3IgbHVtIHNjYWxpbmcgMHgwNDAwID0gMSAqLwotCTB4ZDksIDB4MDQsCi0JMHhkYSwgMHgwMCwJCS8qIEgtcGhhc2Ugb2Zmc2V0IEx1bWEgPSAwICovCi0JMHhkYywgMHgwMCwJCS8qIGhvciBjaHJvbSBzY2FsaW5nIDB4MDIwMC4gbXVzdCBiZSBob3IgbHVtIHNjYWxpbmcgLyAyICovCi0JMHhkZCwgMHgwMiwJCS8qIEgtc2NhbGluZyBpbmNyIGNocm9tYSAqLwotCTB4ZGUsIDB4MDAsCQkvKiBILXBoYXNlIG9mZnNldCBjaHJvbWEuIG11c3QgYmUgb2Zmc2V0IGx1bWEgLyAyICovCisJUl9EMF9CX0hPUklaX1BSRVNDQUxJTkcsIDB4MDEsCisJUl9EMV9CX0FDQ1VNVUxBVElPTl9MRU5HVEgsIDB4MDAsCisJUl9EMl9CX1BSRVNDQUxFUl9EQ19HQUlOX0FORF9GSVJfUFJFRklMVEVSLCAweDAwLAogCi0JMHhlMCwgMHgwMCwJCS8qIFYtc2NhbGluZyBpbmNyIGx1bWEgbG93ICovCi0JMHhlMSwgMHgwNCwJCS8qICIgaGkgKi8KLQkweGUyLCAweDAwLAkJLyogVi1zY2FsaW5nIGluY3IgY2hyb21hIGxvdyAqLwotCTB4ZTMsIDB4MDQsCQkvKiAiIGhpICovCi0JMHhlNCwgMHgwMSwJCS8qIFYtc2NhbGluZyBtb2RlIGNvbnRyb2wgKi8KLQkweGU4LCAweDAwLAkJLyogVi1waGFzZSBvZmZzZXQgY2hyb21hIDAwICovCi0JMHhlOSwgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGNocm9tYSAwMSAqLwotCTB4ZWEsIDB4MDAsCQkvKiBWLXBoYXNlIG9mZnNldCBjaHJvbWEgMTAgKi8KLQkweGViLCAweDAwLAkJLyogVi1waGFzZSBvZmZzZXQgY2hyb21hIDExICovCi0JMHhlYywgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGx1bWEgMDAgKi8KLQkweGVkLCAweDAwLAkJLyogVi1waGFzZSBvZmZzZXQgbHVtYSAwMSAqLwotCTB4ZWUsIDB4MDAsCQkvKiBWLXBoYXNlIG9mZnNldCBsdW1hIDEwICovCi0JMHhlZiwgMHgwMCwJCS8qIFYtcGhhc2Ugb2Zmc2V0IGx1bWEgMTEgKi8KKwkvKiBDb25maWd1cmUgY29udHJvbHMgYXQgbm9taW5hbCB2YWx1ZSovCisJUl9ENF9CX0xVTUFfQlJJR0hUTkVTU19DTlRMLCAweDgwLAorCVJfRDVfQl9MVU1BX0NPTlRSQVNUX0NOVEwsIDB4NDAsCisJUl9ENl9CX0NIUk9NQV9TQVRVUkFUSU9OX0NOVEwsIDB4NDAsCiAKLQkweGYyLCAweDUwLAkJLyogY3J5c3RhbCBjbG9jayA9IDI0LjU3NiBNSHosIHRhcmdldCA9IDI3TUh6ICovCi0JMHhmMywgMHg0NiwKLQkweGY0LCAweDAwLAotCTB4ZjcsIDB4NGIsCQkvKiBub3QgdGhlIHJlY29tbWVuZGVkIHNldHRpbmdzISAqLwotCTB4ZjgsIDB4MDAsCi0JMHhmOSwgMHg0YiwKLQkweGZhLCAweDAwLAotCTB4ZmIsIDB4NGIsCi0JMHhmZiwgMHg4OCwJCS8qIFBMTDIgbG9jayBkZXRlY3Rpb24gc2V0dGluZ3M6IDcxIGxpbmVzIDUwJSBwaGFzZSBlcnJvciAqLworCS8qIGhvciBsdW0gc2NhbGluZyAweDA0MDAgPSAxICovCisJUl9EOF9CX0hPUklaX0xVTUFfU0NBTElOR19JTkMsIDB4MDAsCisJUl9EOV9CX0hPUklaX0xVTUFfU0NBTElOR19JTkNfTVNCLCAweDA0LAorCisJUl9EQV9CX0hPUklaX0xVTUFfUEhBU0VfT0ZGLCAweDAwLAorCisJLyogbXVzdCBiZSBob3IgbHVtIHNjYWxpbmcgLyAyICovCisJUl9EQ19CX0hPUklaX0NIUk9NQV9TQ0FMSU5HLCAweDAwLAorCVJfRERfQl9IT1JJWl9DSFJPTUFfU0NBTElOR19NU0IsIDB4MDIsCisKKwkvKiBtdXN0IGJlIG9mZnNldCBsdW1hIC8gMiAqLworCVJfREVfQl9IT1JJWl9QSEFTRV9PRkZTRVRfQ1JIT01BLCAweDAwLAorCisJUl9FMF9CX1ZFUlRfTFVNQV9TQ0FMSU5HX0lOQywgMHgwMCwKKwlSX0UxX0JfVkVSVF9MVU1BX1NDQUxJTkdfSU5DX01TQiwgMHgwNCwKKworCVJfRTJfQl9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQywgMHgwMCwKKwlSX0UzX0JfVkVSVF9DSFJPTUFfU0NBTElOR19JTkNfTVNCLCAweDA0LAorCisJUl9FNF9CX1ZFUlRfU0NBTElOR19NT0RFX0NOVEwsIDB4MDEsCisKKwlSX0U4X0JfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzAwLCAweDAwLAorCVJfRTlfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMDEsIDB4MDAsCisJUl9FQV9CX1ZFUlRfQ0hST01BX1BIQVNFX09GRl8xMCwgMHgwMCwKKwlSX0VCX0JfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzExLCAweDAwLAorCisJUl9FQ19CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMDAsIDB4MDAsCisJUl9FRF9CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMDEsIDB4MDAsCisJUl9FRV9CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMTAsIDB4MDAsCisJUl9FRl9CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMTEsIDB4MDAsCisKKwlSX0YyX05PTUlOQUxfUExMMl9EVE8sIDB4NTAsCQkvKiBjcnlzdGFsIGNsb2NrID0gMjQuNTc2IE1IeiwgdGFyZ2V0ID0gMjdNSHogKi8KKwlSX0YzX1BMTF9JTkNSRU1FTlQsIDB4NDYsCisJUl9GNF9QTEwyX1NUQVRVUywgMHgwMCwKKwlSX0Y3X1BVTFNFX0FfUE9TX01TQiwgMHg0YiwJCS8qIG5vdCB0aGUgcmVjb21tZW5kZWQgc2V0dGluZ3MhICovCisJUl9GOF9QVUxTRV9CX1BPUywgMHgwMCwKKwlSX0Y5X1BVTFNFX0JfUE9TX01TQiwgMHg0YiwKKwlSX0ZBX1BVTFNFX0NfUE9TLCAweDAwLAorCVJfRkJfUFVMU0VfQ19QT1NfTVNCLCAweDRiLAorCisJLyogUExMMiBsb2NrIGRldGVjdGlvbiBzZXR0aW5nczogNzEgbGluZXMgNTAlIHBoYXNlIGVycm9yICovCisJUl9GRl9TX1BMTF9NQVhfUEhBU0VfRVJSX1RIUkVTSF9OVU1fTElORVMsIDB4ODgsCiAKIAkvKiBUdXJuIG9mZiBWQkkgKi8KLQkweDQwLCAweDIwLCAgICAgICAgICAgICAvKiBObyBmcmFtaW5nIGNvZGUgZXJyb3JzIGFsbG93ZWQuICovCi0JMHg0MSwgMHhmZiwKLQkweDQyLCAweGZmLAotCTB4NDMsIDB4ZmYsCi0JMHg0NCwgMHhmZiwKLQkweDQ1LCAweGZmLAotCTB4NDYsIDB4ZmYsCi0JMHg0NywgMHhmZiwKLQkweDQ4LCAweGZmLAotCTB4NDksIDB4ZmYsCi0JMHg0YSwgMHhmZiwKLQkweDRiLCAweGZmLAotCTB4NGMsIDB4ZmYsCi0JMHg0ZCwgMHhmZiwKLQkweDRlLCAweGZmLAotCTB4NGYsIDB4ZmYsCi0JMHg1MCwgMHhmZiwKLQkweDUxLCAweGZmLAotCTB4NTIsIDB4ZmYsCi0JMHg1MywgMHhmZiwKLQkweDU0LCAweGZmLAotCTB4NTUsIDB4ZmYsCi0JMHg1NiwgMHhmZiwKLQkweDU3LCAweGZmLAotCTB4NTgsIDB4NDAsCi0JMHg1OSwgMHg0NywKLQkweDViLCAweDgzLAotCTB4NWQsIDB4YmQsCi0JMHg1ZSwgMHgzNSwKKwlSXzQwX1NMSUNFUl9DTlRMXzEsIDB4MjAsICAgICAgICAgICAgIC8qIE5vIGZyYW1pbmcgY29kZSBlcnJvcnMgYWxsb3dlZC4gKi8KKwlSXzQxX0xDUl9CQVNFLCAweGZmLAorCVJfNDFfTENSX0JBU0UrMSwgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzIsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSszLCAweGZmLAorCVJfNDFfTENSX0JBU0UrNCwgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzUsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSs2LCAweGZmLAorCVJfNDFfTENSX0JBU0UrNywgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzgsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSs5LCAweGZmLAorCVJfNDFfTENSX0JBU0UrMTAsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSsxMSwgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzEyLCAweGZmLAorCVJfNDFfTENSX0JBU0UrMTMsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSsxNCwgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzE1LCAweGZmLAorCVJfNDFfTENSX0JBU0UrMTYsIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSsxNywgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzE4LCAweGZmLAorCVJfNDFfTENSX0JBU0UrMTksIDB4ZmYsCisJUl80MV9MQ1JfQkFTRSsyMCwgMHhmZiwKKwlSXzQxX0xDUl9CQVNFKzIxLCAweGZmLAorCVJfNDFfTENSX0JBU0UrMjIsIDB4ZmYsCisJUl81OF9QUk9HUkFNX0ZSQU1JTkdfQ09ERSwgMHg0MCwKKwlSXzU5X0hfT0ZGX0ZPUl9TTElDRVIsIDB4NDcsCisJUl81Ql9GTERfT0ZGX0FORF9NU0JfRk9SX0hfQU5EX1ZfT0ZGLCAweDgzLAorCVJfNURfRElELCAweGJkLAorCVJfNUVfU0RJRCwgMHgzNSwKIAotCTB4MDIsIDB4ODQsCQkvKiBpbnB1dCB0dW5lciAtPiBpbnB1dCA0LCBhbXBsaWZpZXIgYWN0aXZlICovCi0JMHgwOSwgMHg1MywJCS8qIDB4NTMsIHdhcyAweDU2IGZvciA2MGh6LiBsdW1pbmFuY2UgY29udHJvbCAqLworCVJfMDJfSU5QVVRfQ05UTF8xLCAweDg0LAkJLyogaW5wdXQgdHVuZXIgLT4gaW5wdXQgNCwgYW1wbGlmaWVyIGFjdGl2ZSAqLwogCi0JMHg4MCwgMHgyMCwJCS8qIGVuYWJsZSB0YXNrIEIgKi8KLQkweDg4LCAweGQwLAotCTB4ODgsIDB4ZjAsCisJUl84MF9HTE9CQUxfQ05UTF8xLCAweDIwLAkJLyogZW5hYmxlIHRhc2sgQiAqLworCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGQwLAorCVJfODhfUE9XRVJfU0FWRV9BRENfUE9SVF9DTlRMLCAweGYwLAogCTB4MDAsIDB4MDAKIH07CiAKLXN0YXRpYyBpbnQgc2FhNzExNV9vZGRfcGFyaXR5KHU4IGMpCitzdGF0aWMgaW50IHNhYTcxMXhfb2RkX3Bhcml0eSh1OCBjKQogewogCWMgXj0gKGMgPj4gNCk7CiAJYyBePSAoYyA+PiAyKTsKQEAgLTUwMiw3ICs1OTksNyBAQAogCXJldHVybiBjICYgMTsKIH0KIAotc3RhdGljIGludCBzYWE3MTE1X2RlY29kZV92cHModTggKiBkc3QsIHU4ICogcCkKK3N0YXRpYyBpbnQgc2FhNzExeF9kZWNvZGVfdnBzKHU4ICogZHN0LCB1OCAqIHApCiB7CiAJc3RhdGljIGNvbnN0IHU4IGJpcGhhc2VfdGJsW10gPSB7CiAJCTB4ZjAsIDB4NzgsIDB4NzAsIDB4ZjAsIDB4YjQsIDB4M2MsIDB4MzQsIDB4YjQsCkBAIC01NDksNyArNjQ2LDcgQEAKIAlyZXR1cm4gZXJyICYgMHhmMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTE1X2RlY29kZV93c3ModTggKiBwKQorc3RhdGljIGludCBzYWE3MTF4X2RlY29kZV93c3ModTggKiBwKQogewogCXN0YXRpYyBjb25zdCBpbnQgd3NzX2JpdHNbOF0gPSB7CiAJCTAsIDAsIDAsIDEsIDAsIDEsIDEsIDEKQEAgLTU3NiwyNiArNjczLDI1IEBACiAJcmV0dXJuIHdzczsKIH0KIAotCi1zdGF0aWMgaW50IHNhYTcxMTVfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCitzdGF0aWMgaW50IHNhYTcxMXhfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTMyIGZyZXEpCiB7Ci0Jc3RydWN0IHNhYTcxMTVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTMyIGFjcGY7CiAJdTMyIGFjbmk7CiAJdTMyIGh6OwogCXU2NCBmOwogCXU4IGFjYyA9IDA7IAkvKiByZWcgMHgzYSwgYXVkaW8gY2xvY2sgY29udHJvbCAqLwogCisJLyogQ2hlY2tzIGZvciBjaGlwcyB0aGF0IGRvbid0IGhhdmUgYXVkaW8gY2xvY2sgKHNhYTcxMTEsIHNhYTcxMTMpICovCisJaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LFJfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQpKQorCQlyZXR1cm4gMDsKKwogCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBhdWRpbyBjbG9jayBmcmVxOiAlZFxuIiwgZnJlcSk7CiAKIAkvKiBzYW5pdHkgY2hlY2sgKi8KIAlpZiAoZnJlcSA8IDMyMDAwIHx8IGZyZXEgPiA0ODAwMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkvKiBUaGUgc2FhNzExMyBoYXMgbm8gYXVkaW8gY2xvY2sgKi8KLQlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExMykKLQkJcmV0dXJuIDA7Ci0KIAkvKiBoeiBpcyB0aGUgcmVmcmVzaCByYXRlIHRpbWVzIDEwMCAqLwogCWh6ID0gKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApID8gNTk5NCA6IDUwMDA7CiAJLyogYWNwZiA9ICgyNTYgKiBmcmVxKSAvIGZpZWxkX2ZyZXF1ZW5jeSA9PSAoMjU2ICogMTAwICogZnJlcSkgLyBoeiAqLwpAQCAtNjE3LDIyICs3MTMsMjYgQEAKIAlpZiAoc3RhdGUtPmFwbGwpCiAJCWFjYyB8PSAweDA4OwogCi0Jc2FhNzExNV93cml0ZShjbGllbnQsIDB4MzgsIDB4MDMpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDM5LCAweDEwKTsKLQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgzYSwgYWNjKTsKLQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgzMCwgYWNwZiAmIDB4ZmYpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDMxLCAoYWNwZiA+PiA4KSAmIDB4ZmYpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDMyLCAoYWNwZiA+PiAxNikgJiAweDAzKTsKLQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHgzNCwgYWNuaSAmIDB4ZmYpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDM1LCAoYWNuaSA+PiA4KSAmIDB4ZmYpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDM2LCAoYWNuaSA+PiAxNikgJiAweDNmKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zOF9DTEtfUkFUSU9fQU1YQ0xLX1RPX0FTQ0xLLCAweDAzKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zOV9DTEtfUkFUSU9fQVNDTEtfVE9fQUxSQ0xLLCAweDEwKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zQV9BVURfQ0xLX0dFTl9CQVNJQ19TRVRVUCwgYWNjKTsKKworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzMwX0FVRF9NQVNUX0NMS19DWUNMRVNfUEVSX0ZJRUxELCBhY3BmICYgMHhmZik7CisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQrMSwKKwkJCQkJCQkoYWNwZiA+PiA4KSAmIDB4ZmYpOworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzMwX0FVRF9NQVNUX0NMS19DWUNMRVNfUEVSX0ZJRUxEKzIsCisJCQkJCQkJKGFjcGYgPj4gMTYpICYgMHgwMyk7CisKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zNF9BVURfTUFTVF9DTEtfTk9NSU5BTF9JTkMsIGFjbmkgJiAweGZmKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zNF9BVURfTUFTVF9DTEtfTk9NSU5BTF9JTkMrMSwgKGFjbmkgPj4gOCkgJiAweGZmKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8zNF9BVURfTUFTVF9DTEtfTk9NSU5BTF9JTkMrMiwgKGFjbmkgPj4gMTYpICYgMHgzZik7CiAJc3RhdGUtPmF1ZGNsa19mcmVxID0gZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTE1X3NldF92NGxjdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxMXhfc2V0X3Y0bGN0cmwoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgc2FhNzExNV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC02NDIsNyArNzQyLDcgQEAKIAkJfQogCiAJCXN0YXRlLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MGEsIHN0YXRlLT5icmlnaHQpOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wQV9MVU1BX0JSSUdIVF9DTlRMLCBzdGF0ZS0+YnJpZ2h0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgpAQCAtNjUyLDcgKzc1Miw3IEBACiAJCX0KIAogCQlzdGF0ZS0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MGIsIHN0YXRlLT5jb250cmFzdCk7CisJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzBCX0xVTUFfQ09OVFJBU1RfQ05UTCwgc3RhdGUtPmNvbnRyYXN0KTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CkBAIC02NjIsNyArNzYyLDcgQEAKIAkJfQogCiAJCXN0YXRlLT5zYXQgPSBjdHJsLT52YWx1ZTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MGMsIHN0YXRlLT5zYXQpOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wQ19DSFJPTUFfU0FUX0NOVEwsIHN0YXRlLT5zYXQpOwogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgpAQCAtNjcyLDcgKzc3Miw3IEBACiAJCX0KIAogCQlzdGF0ZS0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDBkLCBzdGF0ZS0+aHVlKTsKKwkJc2FhNzExeF93cml0ZShjbGllbnQsIFJfMERfQ0hST01BX0hVRV9DTlRMLCBzdGF0ZS0+aHVlKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgpAQCAtNjgyLDkgKzc4Miw5IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzExNV9nZXRfdjRsY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBzYWE3MTF4X2dldF92NGxjdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHNhYTcxMTVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgpAQCAtNzA2LDEwICs4MDYsMTE1IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTcxMTVfc2V0X3Y0bHN0ZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB2NGwyX3N0ZF9pZCBzdGQpCitzdGF0aWMgaW50IHNhYTcxMXhfc2V0X3NpemUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0KQogewotCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB0YXNrYiA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4ODApICYgMHgxMDsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlpbnQgSFBTQywgSEZTQzsKKwlpbnQgVlNDWTsKKwlpbnQgcmVzOworCWludCBpc181MGh6ID0gc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzYyNV81MDsKKwlpbnQgVnNyYyA9IGlzXzUwaHogPyA1NzYgOiA0ODA7CisKKwl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJkZWNvZGVyIHNldCBzaXplIHRvICVpeCVpXG4iLHdpZHRoLGhlaWdodCk7CisKKwkvKiBGSVhNRSBuZWVkIGJldHRlciBib3VuZHMgY2hlY2tpbmcgaGVyZSAqLworCWlmICgod2lkdGggPCAxKSB8fCAod2lkdGggPiAxNDQwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKChoZWlnaHQgPCAxKSB8fCAoaGVpZ2h0ID4gVnNyYykpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LFJfRDBfQl9IT1JJWl9QUkVTQ0FMSU5HKSkgeworCQkvKiBEZWNvZGVyIG9ubHkgc3VwcG9ydHMgNzIwIGNvbHVtbnMgYW5kIDQ4MCBvciA1NzYgbGluZXMgKi8KKwkJaWYgKHdpZHRoICE9IDcyMCkKKwkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoaGVpZ2h0ICE9IFZzcmMpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzdGF0ZS0+d2lkdGggPSB3aWR0aDsKKwlzdGF0ZS0+aGVpZ2h0ID0gaGVpZ2h0OworCisJaWYgKCFzYWE3MTF4X2hhc19yZWcoc3RhdGUtPmlkZW50LCBSX0NDX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEgpKQorCQlyZXR1cm4gMDsKKworCS8qIHByb2JhYmx5IGhhdmUgYSB2YWxpZCBzaXplLCBsZXQncyBzZXQgaXQgKi8KKwkvKiBTZXQgb3V0cHV0IHdpZHRoL2hlaWdodCAqLworCS8qIHdpZHRoICovCisKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9DQ19CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RILAorCQkJCQkodTgpICh3aWR0aCAmIDB4ZmYpKTsKKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9DRF9CX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiwKKwkJCQkJKHU4KSAoKHdpZHRoID4+IDgpICYgMHhmZikpOworCisJLyogVmVydGljYWwgU2NhbGluZyB1c2VzIGhlaWdodC8yICovCisJcmVzPWhlaWdodC8yOworCisJLyogT24gNjBIeiwgaXQgaXMgdXNpbmcgYSBoaWdoZXIgVmVydGljYWwgT3V0cHV0IFNpemUgKi8KKwlpZiAoIWlzXzUwaHopCisJCXJlcys9KFZSRVNfNjBIWi00ODApPj4xOworCisJCS8qIGhlaWdodCAqLworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0NFX0JfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSCwKKwkJCQkJKHU4KSAocmVzICYgMHhmZikpOworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0NGX0JfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSF9NU0IsCisJCQkJCSh1OCkgKChyZXMgPj4gOCkgJiAweGZmKSk7CisKKwkvKiBTY2FsaW5nIHNldHRpbmdzICovCisJLyogSHByZXNjYWxlciBpcyBmbG9vcihpbnJlcy9vdXRyZXMpICovCisJSFBTQyA9IChpbnQpKDcyMCAvIHdpZHRoKTsKKwkvKiAwIGlzIG5vdCBhbGxvd2VkIChkaXYuIGJ5IHplcm8pICovCisJSFBTQyA9IEhQU0MgPyBIUFNDIDogMTsKKwlIRlNDID0gKGludCkoKDEwMjQgKiA3MjApIC8gKEhQU0MgKiB3aWR0aCkpOworCS8qIEZJWE1FIGhhcmRjb2RlcyB0byAiVGFzayBCIgorCSAqIHdyaXRlIEggcHJlc2NhbGVyIGludGVnZXIgKi8KKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9EMF9CX0hPUklaX1BSRVNDQUxJTkcsCisJCQkJKHU4KSAoSFBTQyAmIDB4M2YpKTsKKworCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkhwc2M6IDB4JTA1eCwgSGZzYzogMHglMDV4XG4iLCBIUFNDLCBIRlNDKTsKKwkvKiB3cml0ZSBIIGZpbmUtc2NhbGluZyAobHVtaW5hbmNlKSAqLworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0Q4X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQywKKwkJCQkodTgpIChIRlNDICYgMHhmZikpOworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0Q5X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQ19NU0IsCisJCQkJKHU4KSAoKEhGU0MgPj4gOCkgJiAweGZmKSk7CisJLyogd3JpdGUgSCBmaW5lLXNjYWxpbmcgKGNocm9taW5hbmNlKQorCSAqIG11c3QgYmUgbHVtLzIsIHNvIGknbGwganVzdCBiaXRzaGlmdCA6KSAqLworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0RDX0JfSE9SSVpfQ0hST01BX1NDQUxJTkcsCisJCQkJKHU4KSAoKEhGU0MgPj4gMSkgJiAweGZmKSk7CisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfRERfQl9IT1JJWl9DSFJPTUFfU0NBTElOR19NU0IsCisJCQkJKHU4KSAoKEhGU0MgPj4gOSkgJiAweGZmKSk7CisKKwlWU0NZID0gKGludCkoKDEwMjQgKiBWc3JjKSAvIGhlaWdodCk7CisJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVnNyYzogJWQsIFZzY3k6IDB4JTA1eFxuIiwgVnNyYywgVlNDWSk7CisKKwkvKiBDb3JyZWN0IENvbnRyYXN0IGFuZCBMdW1pbmFuY2UgKi8KKwlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl9ENV9CX0xVTUFfQ09OVFJBU1RfQ05UTCwKKwkJCQkJKHU4KSAoNjQgKiAxMDI0IC8gVlNDWSkpOworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0Q2X0JfQ0hST01BX1NBVFVSQVRJT05fQ05UTCwKKwkJCQkJKHU4KSAoNjQgKiAxMDI0IC8gVlNDWSkpOworCisJCS8qIHdyaXRlIFYgZmluZS1zY2FsaW5nIChsdW1pbmFuY2UpICovCisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfRTBfQl9WRVJUX0xVTUFfU0NBTElOR19JTkMsCisJCQkJCSh1OCkgKFZTQ1kgJiAweGZmKSk7CisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfRTFfQl9WRVJUX0xVTUFfU0NBTElOR19JTkNfTVNCLAorCQkJCQkodTgpICgoVlNDWSA+PiA4KSAmIDB4ZmYpKTsKKwkJLyogd3JpdGUgViBmaW5lLXNjYWxpbmcgKGNocm9taW5hbmNlKSAqLworCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSX0UyX0JfVkVSVF9DSFJPTUFfU0NBTElOR19JTkMsCisJCQkJCSh1OCkgKFZTQ1kgJiAweGZmKSk7CisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfRTNfQl9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQ19NU0IsCisJCQkJCSh1OCkgKChWU0NZID4+IDgpICYgMHhmZikpOworCisJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ19yZXNldF9zY2FsZXIpOworCisJLyogQWN0aXZhdGVzIHRhc2sgIkIiICovCisJc2FhNzExeF93cml0ZShjbGllbnQsIFJfODBfR0xPQkFMX0NOVExfMSwKKwkJCQlzYWE3MTF4X3JlYWQoY2xpZW50LFJfODBfR0xPQkFMX0NOVExfMSl8MHgyMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc2FhNzExeF9zZXRfdjRsc3RkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIFByZXZlbnQgdW5uZWNlc3Nhcnkgc3RhbmRhcmQgY2hhbmdlcy4gRHVyaW5nIGEgc3RhbmRhcmQKIAkgICBjaGFuZ2UgdGhlIEktUG9ydCBpcyB0ZW1wb3JhcmlseSBkaXNhYmxlZC4gQW55IGRldmljZXMKQEAgLTcyMSwxNyArOTI2LDIxIEBACiAJaWYgKHN0ZCA9PSBzdGF0ZS0+c3RkKQogCQlyZXR1cm47CiAKKwlzdGF0ZS0+c3RkID0gc3RkOworCiAJLy8gVGhpcyB3b3JrcyBmb3IgTlRTQy1NLCBTRUNBTS1MIGFuZCB0aGUgNTBIeiBQQUwgdmFyaWFudHMuCiAJaWYgKHN0ZCAmIFY0TDJfU1REXzUyNV82MCkgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJkZWNvZGVyIHNldCBzdGFuZGFyZCA2MCBIelxuIik7Ci0JCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel92aWRlbyk7CisJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNjBoel92aWRlbyk7CisJCXNhYTcxMXhfc2V0X3NpemUoY2xpZW50LDcyMCw0ODApOwogCX0gZWxzZSB7CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHN0YW5kYXJkIDUwIEh6XG4iKTsKLQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ181MGh6X3ZpZGVvKTsKKwkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ181MGh6X3ZpZGVvKTsKKwkJc2FhNzExeF9zZXRfc2l6ZShjbGllbnQsNzIwLDU3Nik7CiAJfQogCiAJLyogUmVnaXN0ZXIgMEUgLSBCaXRzIEQ2LUQ0IG9uIE5PLUFVVE8gbW9kZQotCQkoU0FBNzExMyBkb2Vzbid0IGhhdmUgYXV0byBtb2RlKQorCQkoU0FBNzExMSBhbmQgU0FBNzExMyBkb2Vzbid0IGhhdmUgYXV0byBtb2RlKQogCSAgICA1MCBIeiAvIDYyNSBsaW5lcyAgICAgICAgICAgNjAgSHogLyA1MjUgbGluZXMKIAkwMDAgUEFMIEJHREhJICg0LjQzTWh6KSAgICAgICAgIE5UU0MgTSAoMy41OE1IeikKIAkwMDEgTlRTQyA0LjQzICg1MCBIeikgICAgICAgICAgIFBBTCA0LjQzICg2MCBIeikKQEAgLTczOSw4ICs5NDgsOSBAQAogCTAxMSBOVFNDIE4gKDMuNThNSHopICAgICAgICAgICAgUEFMIE0gKDMuNThNSHopCiAJMTAwIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICBOVFNDLUphcGFuICgzLjU4TUh6KQogCSovCi0JaWYgKHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKLQkJdTggcmVnID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwZSkgJiAweDhmOworCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTExIHx8CisJICAgIHN0YXRlLT5pZGVudCA9PSBWNEwyX0lERU5UX1NBQTcxMTMpIHsKKwkJdTggcmVnID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8wRV9DSFJPTUFfQ05UTF8xKSAmIDB4OGY7CiAKIAkJaWYgKHN0ZCA9PSBWNEwyX1NURF9QQUxfTSkgewogCQkJcmVnIHw9IDB4MzA7CkBAIC03NTEsMzEgKzk2MSwzMCBAQAogCQl9IGVsc2UgaWYgKHN0ZCA9PSBWNEwyX1NURF9OVFNDX01fSlApIHsKIAkJCXJlZyB8PSAweDQwOwogCQl9Ci0JCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDBlLCByZWcpOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wRV9DSFJPTUFfQ05UTF8xLCByZWcpOworCX0gZWxzZSB7CisJCS8qIHJlc3RhcnQgdGFzayBCIGlmIG5lZWRlZCAqLworCQlpbnQgdGFza2IgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzgwX0dMT0JBTF9DTlRMXzEpICYgMHgxMDsKKworCQlpZiAodGFza2IgJiYgc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNCkgeworCQkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ192Ymlfb24pOworCQl9CisKKwkJLyogc3dpdGNoIGF1ZGlvIG1vZGUgdG9vISAqLworCQlzYWE3MTF4X3NldF9hdWRpb19jbG9ja19mcmVxKGNsaWVudCwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKIAl9Ci0KLQotCXN0YXRlLT5zdGQgPSBzdGQ7Ci0KLQkvKiByZXN0YXJ0IHRhc2sgQiBpZiBuZWVkZWQgKi8KLQlpZiAodGFza2IgJiYgc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkgewotCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnX3ZiaV9vbik7Ci0JfQotCi0JLyogc3dpdGNoIGF1ZGlvIG1vZGUgdG9vISAqLwotCXNhYTcxMTVfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogfQogCi1zdGF0aWMgdjRsMl9zdGRfaWQgc2FhNzExNV9nZXRfdjRsc3RkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdjRsMl9zdGRfaWQgc2FhNzExeF9nZXRfdjRsc3RkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Jc3RydWN0IHNhYTcxMTVfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTcxMXhfc3RhdGUgKnN0YXRlID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKIAlyZXR1cm4gc3RhdGUtPnN0ZDsKIH0KIAotc3RhdGljIHZvaWQgc2FhNzExNV9sb2dfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBzYWE3MTF4X2xvZ19zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc2FhNzExNV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgcmVnMWUsIHJlZzFmOwogCWludCBzaWduYWxPazsKIAlpbnQgdmNyOwpAQCAtNzgzLDcgKzk5Miw3IEBACiAJdjRsX2luZm8oY2xpZW50LCAiQXVkaW8gZnJlcXVlbmN5OiAlZCBIelxuIiwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKIAlpZiAoc3RhdGUtPmlkZW50ICE9IFY0TDJfSURFTlRfU0FBNzExNSkgewogCQkvKiBzdGF0dXMgZm9yIHRoZSBzYWE3MTE0ICovCi0JCXJlZzFmID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHgxZik7CisJCXJlZzFmID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRl9TVEFUVVNfQllURV8yX1ZEX0RFQyk7CiAJCXNpZ25hbE9rID0gKHJlZzFmICYgMHhjMSkgPT0gMHg4MTsKIAkJdjRsX2luZm8oY2xpZW50LCAiVmlkZW8gc2lnbmFsOiAgICAlc1xuIiwgc2lnbmFsT2sgPyAib2siIDogImJhZCIpOwogCQl2NGxfaW5mbyhjbGllbnQsICJGcmVxdWVuY3k6ICAgICAgICVzXG4iLCAocmVnMWYgJiAweDIwKSA/ICI2MCBIeiIgOiAiNTAgSHoiKTsKQEAgLTc5MSw4ICsxMDAwLDggQEAKIAl9CiAKIAkvKiBzdGF0dXMgZm9yIHRoZSBzYWE3MTE1ICovCi0JcmVnMWUgPSBzYWE3MTE1X3JlYWQoY2xpZW50LCAweDFlKTsKLQlyZWcxZiA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MWYpOworCXJlZzFlID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisJcmVnMWYgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzFGX1NUQVRVU19CWVRFXzJfVkRfREVDKTsKIAogCXNpZ25hbE9rID0gKHJlZzFmICYgMHhjMSkgPT0gMHg4MSAmJiAocmVnMWUgJiAweGMwKSA9PSAweDgwOwogCXZjciA9ICEocmVnMWYgJiAweDEwKTsKQEAgLTgxOSwxOSArMTAyOCwyNyBAQAogCQkJdjRsX2luZm8oY2xpZW50LCAiRGV0ZWN0ZWQgZm9ybWF0OiBCVy9ObyBjb2xvclxuIik7CiAJCQlicmVhazsKIAl9CisJdjRsX2luZm8oY2xpZW50LCAiV2lkdGgsIEhlaWdodDogICAlZCwgJWRcbiIsIHN0YXRlLT53aWR0aCwgc3RhdGUtPmhlaWdodCk7CiB9CiAKIC8qIHNldHVwIHRoZSBzbGljZWQgVkJJIGxjciByZWdpc3RlcnMgYWNjb3JkaW5nIHRvIHRoZSBzbGljZWQgVkJJIGZvcm1hdCAqLwotc3RhdGljIHZvaWQgc2FhNzExNV9zZXRfbGNyKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQpCitzdGF0aWMgdm9pZCBzYWE3MTF4X3NldF9sY3Ioc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3Qgc2FhNzExNV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgaXNfNTBoeiA9IChzdGF0ZS0+c3RkICYgVjRMMl9TVERfNjI1XzUwKTsKIAl1OCBsY3JbMjRdOwogCWludCBpLCB4OwogCi0JLyogc2FhNzExMy83MTE0IGRvZXNuJ3QgeWV0IHN1cHBvcnQgVkJJICovCisjaWYgMQorCS8qIHNhYTcxMTMvNzExNC83MTE4IFZCSSBzdXBwb3J0IGFyZSBleHBlcmltZW50YWwgKi8KKwlpZiAoIXNhYTcxMXhfaGFzX3JlZyhzdGF0ZS0+aWRlbnQsUl80MV9MQ1JfQkFTRSkpCisJCXJldHVybjsKKworI2Vsc2UKKwkvKiBTQUE3MTEzIGFuZCBTQUE3MTE4IGFsc28gc2hvdWxkIHN1cHBvcnQgVkJJIC0gTmVlZCB0ZXN0aW5nICovCiAJaWYgKHN0YXRlLT5pZGVudCAhPSBWNEwyX0lERU5UX1NBQTcxMTUpCiAJCXJldHVybjsKKyNlbmRpZgogCiAJZm9yIChpID0gMDsgaSA8PSAyMzsgaSsrKQogCQlsY3JbaV0gPSAweGZmOwpAQCAtODg4LDE0ICsxMTA1LDE2IEBACiAKIAkvKiB3cml0ZSB0aGUgbGNyIHJlZ2lzdGVycyAqLwogCWZvciAoaSA9IDI7IGkgPD0gMjM7IGkrKykgewotCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgaSAtIDIgKyAweDQxLCBsY3JbaV0pOworCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgaSAtIDIgKyBSXzQxX0xDUl9CQVNFLCBsY3JbaV0pOwogCX0KIAogCS8qIGVuYWJsZS9kaXNhYmxlIHJhdyBWQkkgY2FwdHVyaW5nICovCi0Jc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBmbXQtPnNlcnZpY2Vfc2V0ID09IDAgPyBzYWE3MTE1X2NmZ192Ymlfb24gOiBzYWE3MTE1X2NmZ192Ymlfb2ZmKTsKKwlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIGZtdC0+c2VydmljZV9zZXQgPT0gMCA/CisJCQkJc2FhNzExNV9jZmdfdmJpX29uIDoKKwkJCQlzYWE3MTE1X2NmZ192Ymlfb2ZmKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTE1X2dldF92NGxmbXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCitzdGF0aWMgaW50IHNhYTcxMXhfZ2V0X3Y0bGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlzdGF0aWMgdTE2IGxjcjJ2YmlbXSA9IHsKIAkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwpAQCAtOTExLDEwICsxMTMwLDEwIEBACiAJCXJldHVybiAtRUlOVkFMOwogCW1lbXNldChzbGljZWQsIDAsIHNpemVvZigqc2xpY2VkKSk7CiAJLyogZG9uZSBpZiB1c2luZyByYXcgVkJJICovCi0JaWYgKHNhYTcxMTVfcmVhZChjbGllbnQsIDB4ODApICYgMHgxMCkKKwlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl84MF9HTE9CQUxfQ05UTF8xKSAmIDB4MTApCiAJCXJldHVybiAwOwogCWZvciAoaSA9IDI7IGkgPD0gMjM7IGkrKykgewotCQl1OCB2ID0gc2FhNzExNV9yZWFkKGNsaWVudCwgaSAtIDIgKyAweDQxKTsKKwkJdTggdiA9IHNhYTcxMXhfcmVhZChjbGllbnQsIGkgLSAyICsgUl80MV9MQ1JfQkFTRSk7CiAKIAkJc2xpY2VkLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOwogCQlzbGljZWQtPnNlcnZpY2VfbGluZXNbMV1baV0gPSBsY3IydmJpW3YgJiAweGZdOwpAQCAtOTI0LDExNCArMTE0MywzMSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMTVfc2V0X3Y0bGZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgc2FhNzExeF9zZXRfdjRsZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKLQlpbnQgSFBTQywgSEZTQzsKLQlpbnQgVlNDWSwgVnNyYzsKLQlpbnQgaXNfNTBoeiA9IHN0YXRlLT5zdGQgJiBWNEwyX1NURF82MjVfNTA7Ci0KIAlpZiAoZm10LT50eXBlID09IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKSB7Ci0JCXNhYTcxMTVfc2V0X2xjcihjbGllbnQsICZmbXQtPmZtdC5zbGljZWQpOworCQlzYWE3MTF4X3NldF9sY3IoY2xpZW50LCAmZm10LT5mbXQuc2xpY2VkKTsKIAkJcmV0dXJuIDA7CiAJfQogCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXBpeCA9ICYoZm10LT5mbXQucGl4KTsKLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgc2V0IHNpemVcbiIpOwotCi0JLyogRklYTUUgbmVlZCBiZXR0ZXIgYm91bmRzIGNoZWNraW5nIGhlcmUgKi8KLQlpZiAoKHBpeC0+d2lkdGggPCAxKSB8fCAocGl4LT53aWR0aCA+IDE0NDApKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHBpeC0+aGVpZ2h0IDwgMSkgfHwgKHBpeC0+aGVpZ2h0ID4gOTYwKSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBwcm9iYWJseSBoYXZlIGEgdmFsaWQgc2l6ZSwgbGV0J3Mgc2V0IGl0ICovCi0JLyogU2V0IG91dHB1dCB3aWR0aC9oZWlnaHQgKi8KLQkvKiB3aWR0aCAqLwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweGNjLCAodTgpIChwaXgtPndpZHRoICYgMHhmZikpOwotCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweGNkLCAodTgpICgocGl4LT53aWR0aCA+PiA4KSAmIDB4ZmYpKTsKLQkvKiBoZWlnaHQgKi8KLQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHhjZSwgKHU4KSAocGl4LT5oZWlnaHQgJiAweGZmKSk7Ci0Jc2FhNzExNV93cml0ZShjbGllbnQsIDB4Y2YsICh1OCkgKChwaXgtPmhlaWdodCA+PiA4KSAmIDB4ZmYpKTsKLQotCS8qIFNjYWxpbmcgc2V0dGluZ3MgKi8KLQkvKiBIcHJlc2NhbGVyIGlzIGZsb29yKGlucmVzL291dHJlcykgKi8KLQkvKiBGSVhNRSBoYXJkY29kaW5nIGlucHV0IHJlcyAqLwotCWlmIChwaXgtPndpZHRoICE9IDcyMCkgewotCQlIUFNDID0gKGludCkoNzIwIC8gcGl4LT53aWR0aCk7Ci0JCS8qIDAgaXMgbm90IGFsbG93ZWQgKGRpdi4gYnkgemVybykgKi8KLQkJSFBTQyA9IEhQU0MgPyBIUFNDIDogMTsKLQkJSEZTQyA9IChpbnQpKCgxMDI0ICogNzIwKSAvIChIUFNDICogcGl4LT53aWR0aCkpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkhwc2M6IDB4JTA1eCwgSGZzYzogMHglMDV4XG4iLCBIUFNDLCBIRlNDKTsKLQkJLyogRklYTUUgaGFyZGNvZGVzIHRvICJUYXNrIEIiCi0JCSAqIHdyaXRlIEggcHJlc2NhbGVyIGludGVnZXIgKi8KLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZDAsICh1OCkgKEhQU0MgJiAweDNmKSk7Ci0KLQkJLyogd3JpdGUgSCBmaW5lLXNjYWxpbmcgKGx1bWluYW5jZSkgKi8KLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZDgsICh1OCkgKEhGU0MgJiAweGZmKSk7Ci0JCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweGQ5LCAodTgpICgoSEZTQyA+PiA4KSAmIDB4ZmYpKTsKLQkJLyogd3JpdGUgSCBmaW5lLXNjYWxpbmcgKGNocm9taW5hbmNlKQotCQkgKiBtdXN0IGJlIGx1bS8yLCBzbyBpJ2xsIGp1c3QgYml0c2hpZnQgOikgKi8KLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4REMsICh1OCkgKChIRlNDID4+IDEpICYgMHhmZikpOwotCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHhERCwgKHU4KSAoKEhGU0MgPj4gOSkgJiAweGZmKSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGlzXzUwaHopIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNldHRpbmcgZnVsbCA1MGh6IHdpZHRoXG4iKTsKLQkJCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfNTBoel9mdWxscmVzX3gpOwotCQl9IGVsc2UgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiU2V0dGluZyBmdWxsIDYwaHogd2lkdGhcbiIpOwotCQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2NmZ182MGh6X2Z1bGxyZXNfeCk7Ci0JCX0KLQl9Ci0KLQlWc3JjID0gaXNfNTBoeiA/IDU3NiA6IDQ4MDsKLQotCWlmIChwaXgtPmhlaWdodCAhPSBWc3JjKSB7Ci0JCVZTQ1kgPSAoaW50KSgoMTAyNCAqIFZzcmMpIC8gcGl4LT5oZWlnaHQpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJWc3JjOiAlZCwgVnNjeTogMHglMDV4XG4iLCBWc3JjLCBWU0NZKTsKLQotCQkvKiBDb3JyZWN0IENvbnRyYXN0IGFuZCBMdW1pbmFuY2UgKi8KLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZDUsICh1OCkgKDY0ICogMTAyNCAvIFZTQ1kpKTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZDYsICh1OCkgKDY0ICogMTAyNCAvIFZTQ1kpKTsKLQotCQkvKiB3cml0ZSBWIGZpbmUtc2NhbGluZyAobHVtaW5hbmNlKSAqLwotCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHhlMCwgKHU4KSAoVlNDWSAmIDB4ZmYpKTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ZTEsICh1OCkgKChWU0NZID4+IDgpICYgMHhmZikpOwotCQkvKiB3cml0ZSBWIGZpbmUtc2NhbGluZyAoY2hyb21pbmFuY2UpICovCi0JCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweGUyLCAodTgpIChWU0NZICYgMHhmZikpOwotCQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMHhlMywgKHU4KSAoKFZTQ1kgPj4gOCkgJiAweGZmKSk7Ci0JfSBlbHNlIHsKLQkJaWYgKGlzXzUwaHopIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNldHRpbmcgZnVsbCA1MEh6IGhlaWdodFxuIik7Ci0JCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzUwaHpfZnVsbHJlc195KTsKLQkJfSBlbHNlIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlNldHRpbmcgZnVsbCA2MGh6IGhlaWdodFxuIik7Ci0JCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc195KTsKLQkJfQotCX0KLQotCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gc2FhNzExeF9zZXRfc2l6ZShjbGllbnQsZm10LT5mbXQucGl4LndpZHRoLGZtdC0+Zm10LnBpeC5oZWlnaHQpOwogfQogCiAvKiBEZWNvZGUgdGhlIHNsaWNlZCBWQkkgZGF0YSBzdHJlYW0gYXMgY3JlYXRlZCBieSB0aGUgc2FhNzExNS4KICAgIFRoZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluIHRoZSBzYWE3MTE1IGRhdGFzaGVldCBpbiBUYWJsZXMgMjUgYW5kIDI2CiAgICBhbmQgaW4gRmlndXJlIDMzLgogICAgVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gdXNlcyBTQVYvRUFWIGNvZGVzIGFuZCBub3QgdGhlIGFuY2lsbGFyeSBkYXRhCi0gICBoZWFkZXJzLiBUaGUgdmJpLT5wIHBvaW50ZXIgcG9pbnRzIHRvIHRoZSBTRElEIGJ5dGUgcmlnaHQgYWZ0ZXIgdGhlIFNBVgorICAgaGVhZGVycy4gVGhlIHZiaS0+cCBwb2ludGVyIHBvaW50cyB0byB0aGUgUl81RV9TRElEIGJ5dGUgcmlnaHQgYWZ0ZXIgdGhlIFNBVgogICAgY29kZS4gKi8KLXN0YXRpYyB2b2lkIHNhYTcxMTVfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgdm9pZCBzYWE3MTF4X2RlY29kZV92YmlfbGluZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJCSAgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKIHsKIAlzdGF0aWMgY29uc3QgY2hhciB2Ymlfbm9fZGF0YV9wYXR0ZXJuW10gPSB7CiAJCTB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAsIDB4YTAKIAl9OwotCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCXU4ICpwID0gdmJpLT5wOwogCXUzMiB3c3M7CiAJaW50IGlkMSwgaWQyOyAgIC8qIHRoZSBJRDEgYW5kIElEMiBieXRlcyBmcm9tIHRoZSBpbnRlcm5hbCBoZWFkZXIgKi8KQEAgLTEwNjYsMTIgKzEyMDIsMTIgQEAKIAkJdmJpLT50eXBlID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKIAkJYnJlYWs7CiAJY2FzZSA0OgotCQlpZiAoIXNhYTcxMTVfb2RkX3Bhcml0eShwWzBdKSB8fCAhc2FhNzExNV9vZGRfcGFyaXR5KHBbMV0pKQorCQlpZiAoIXNhYTcxMXhfb2RkX3Bhcml0eShwWzBdKSB8fCAhc2FhNzExeF9vZGRfcGFyaXR5KHBbMV0pKQogCQkJcmV0dXJuOwogCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKIAkJYnJlYWs7CiAJY2FzZSA1OgotCQl3c3MgPSBzYWE3MTE1X2RlY29kZV93c3MocCk7CisJCXdzcyA9IHNhYTcxMXhfZGVjb2RlX3dzcyhwKTsKIAkJaWYgKHdzcyA9PSAtMSkKIAkJCXJldHVybjsKIAkJcFswXSA9IHdzcyAmIDB4ZmY7CkBAIC0xMDc5LDcgKzEyMTUsNyBAQAogCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwogCQlicmVhazsKIAljYXNlIDc6Ci0JCWlmIChzYWE3MTE1X2RlY29kZV92cHMocCwgcCkgIT0gMCkKKwkJaWYgKHNhYTcxMXhfZGVjb2RlX3ZwcyhwLCBwKSAhPSAwKQogCQkJcmV0dXJuOwogCQl2YmktPnR5cGUgPSBWNEwyX1NMSUNFRF9WUFM7CiAJCWJyZWFrOwpAQCAtMTA5MCwyMSArMTIyNiwyMSBAQAogCiAvKiA9PT09PT09PT09PT0gU0FBNzExNSBBVURJTyBzZXR0aW5ncyAoZW5kKSA9PT09PT09PT09PT09ICovCiAKLXN0YXRpYyBpbnQgc2FhNzExNV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgc2FhNzExeF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKIHsKLQlzdHJ1Y3Qgc2FhNzExNV9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGUgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAlpbnQgKmlhcmcgPSBhcmc7CiAKIAkvKiBpb2N0bHMgdG8gYWxsb3cgZGlyZWN0IGFjY2VzcyB0byB0aGUgc2FhNzExNSByZWdpc3RlcnMgZm9yIHRlc3RpbmcgKi8KIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgVklESU9DX1NfRk1UOgotCQlyZXR1cm4gc2FhNzExNV9zZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CisJCXJldHVybiBzYWE3MTF4X3NldF92NGxmbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKIAogCWNhc2UgVklESU9DX0dfRk1UOgotCQlyZXR1cm4gc2FhNzExNV9nZXRfdjRsZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7CisJCXJldHVybiBzYWE3MTF4X2dldF92NGxmbXQoY2xpZW50LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKIAogCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlyZXR1cm4gc2FhNzExNV9zZXRfYXVkaW9fY2xvY2tfZnJlcShjbGllbnQsICoodTMyICopYXJnKTsKKwkJcmV0dXJuIHNhYTcxMXhfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCAqKHUzMiAqKWFyZyk7CiAKIAljYXNlIFZJRElPQ19HX1RVTkVSOgogCXsKQEAgLTExMTMsNyArMTI0OSw3IEBACiAKIAkJaWYgKHN0YXRlLT5yYWRpbykKIAkJCWJyZWFrOwotCQlzdGF0dXMgPSBzYWE3MTE1X3JlYWQoY2xpZW50LCAweDFmKTsKKwkJc3RhdHVzID0gc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRl9TVEFUVVNfQllURV8yX1ZEX0RFQyk7CiAKIAkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7CiAJCXZ0LT5zaWduYWwgPSAoKHN0YXR1cyAmICgxIDw8IDYpKSA9PSAwKSA/IDB4ZmZmZiA6IDB4MDsKQEAgLTExMjEsMTQgKzEyNTcsMTQgQEAKIAl9CiAKIAljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQlzYWE3MTE1X2xvZ19zdGF0dXMoY2xpZW50KTsKKwkJc2FhNzExeF9sb2dfc3RhdHVzKGNsaWVudCk7CiAJCWJyZWFrOwogCiAJY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gc2FhNzExNV9nZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKKwkJcmV0dXJuIHNhYTcxMXhfZ2V0X3Y0bGN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7CiAKIAljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXJldHVybiBzYWE3MTE1X3NldF92NGxjdHJsKGNsaWVudCwgKHN0cnVjdCB2NGwyX2NvbnRyb2wgKilhcmcpOworCQlyZXR1cm4gc2FhNzExeF9zZXRfdjRsY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKIAogCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKIAl7CkBAIC0xMTQ2LDEyICsxMjgyLDEyIEBACiAJfQogCiAJY2FzZSBWSURJT0NfR19TVEQ6Ci0JCSoodjRsMl9zdGRfaWQgKilhcmcgPSBzYWE3MTE1X2dldF92NGxzdGQoY2xpZW50KTsKKwkJKih2NGwyX3N0ZF9pZCAqKWFyZyA9IHNhYTcxMXhfZ2V0X3Y0bHN0ZChjbGllbnQpOwogCQlicmVhazsKIAogCWNhc2UgVklESU9DX1NfU1REOgogCQlzdGF0ZS0+cmFkaW8gPSAwOwotCQlzYWE3MTE1X3NldF92NGxzdGQoY2xpZW50LCAqKHY0bDJfc3RkX2lkICopYXJnKTsKKwkJc2FhNzExeF9zZXRfdjRsc3RkKGNsaWVudCwgKih2NGwyX3N0ZF9pZCAqKWFyZyk7CiAJCWJyZWFrOwogCiAJY2FzZSBBVURDX1NFVF9SQURJTzoKQEAgLTExODcsMTMgKzEzMjMsMTMgQEAKIAkJc3RhdGUtPmlucHV0ID0gcm91dGUtPmlucHV0OwogCiAJCS8qIHNlbGVjdCBtb2RlICovCi0JCXNhYTcxMTVfd3JpdGUoY2xpZW50LCAweDAyLAotCQkJICAgICAgKHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MDIpICYgMHhmMCkgfAorCQlzYWE3MTF4X3dyaXRlKGNsaWVudCwgUl8wMl9JTlBVVF9DTlRMXzEsCisJCQkgICAgICAoc2FhNzExeF9yZWFkKGNsaWVudCwgUl8wMl9JTlBVVF9DTlRMXzEpICYgMHhmMCkgfAogCQkJICAgICAgIHN0YXRlLT5pbnB1dCk7CiAKIAkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIFMtVmlkZW8gbW9kZXMgKi8KLQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4MDksCi0JCQkgICAgICAoc2FhNzExNV9yZWFkKGNsaWVudCwgMHgwOSkgJiAweDdmKSB8CisJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCBSXzA5X0xVTUFfQ05UTCwKKwkJCSAgICAgIChzYWE3MTF4X3JlYWQoY2xpZW50LCBSXzA5X0xVTUFfQ05UTCkgJiAweDdmKSB8CiAJCQkgICAgICAgKHN0YXRlLT5pbnB1dCA+PSBTQUE3MTE1X1NWSURFTzAgPyAweDgwIDogMHgwKSk7CiAJCWJyZWFrOwogCX0KQEAgLTEyMDUsNyArMTM0MSw5IEBACiAKIAkJaWYgKHN0YXRlLT5lbmFibGUgIT0gKGNtZCA9PSBWSURJT0NfU1RSRUFNT04pKSB7CiAJCQlzdGF0ZS0+ZW5hYmxlID0gKGNtZCA9PSBWSURJT0NfU1RSRUFNT04pOwotCQkJc2FhNzExNV93cml0ZShjbGllbnQsIDB4ODcsIHN0YXRlLT5lbmFibGUpOworCQkJc2FhNzExeF93cml0ZShjbGllbnQsCisJCQkJUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwKKwkJCQlzdGF0ZS0+ZW5hYmxlKTsKIAkJfQogCQlicmVhazsKIApAQCAtMTIyMCwxNyArMTM1OCwxNyBAQAogCQlzdGF0ZS0+Y2djZGl2ID0gKGZyZXEtPmZsYWdzICYgU0FBNzExNV9GUkVRX0ZMX0NHQ0RJVikgPyAzIDogNDsKIAkJc3RhdGUtPnVjZ2MgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfVUNHQykgPyAxIDogMDsKIAkJc3RhdGUtPmFwbGwgPSAoZnJlcS0+ZmxhZ3MgJiBTQUE3MTE1X0ZSRVFfRkxfQVBMTCkgPyAxIDogMDsKLQkJc2FhNzExNV9zZXRfYXVkaW9fY2xvY2tfZnJlcShjbGllbnQsIHN0YXRlLT5hdWRjbGtfZnJlcSk7CisJCXNhYTcxMXhfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwogCQlicmVhazsKIAl9CiAKIAljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCQlzYWE3MTE1X2RlY29kZV92YmlfbGluZShjbGllbnQsIGFyZyk7CisJCXNhYTcxMXhfZGVjb2RlX3ZiaV9saW5lKGNsaWVudCwgYXJnKTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19JTlRfUkVTRVQ6CiAJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRlY29kZXIgUkVTRVRcbiIpOwotCQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnX3Jlc2V0X3NjYWxlcik7CisJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKIAkJYnJlYWs7CiAKIAljYXNlIFZJRElPQ19JTlRfR19WQklfREFUQToKQEAgLTEyMzksMjUgKzEzNzcsMjUgQEAKIAogCQlzd2l0Y2ggKGRhdGEtPmlkKSB7CiAJCWNhc2UgVjRMMl9TTElDRURfV1NTXzYyNToKLQkJCWlmIChzYWE3MTE1X3JlYWQoY2xpZW50LCAweDZiKSAmIDB4YzApCisJCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2YikgJiAweGMwKQogCQkJCXJldHVybiAtRUlPOwotCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NmMpOwotCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NmQpOworCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NmMpOworCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NmQpOwogCQkJcmV0dXJuIDA7CiAJCWNhc2UgVjRMMl9TTElDRURfQ0FQVElPTl81MjU6CiAJCQlpZiAoZGF0YS0+ZmllbGQgPT0gMCkgewogCQkJCS8qIENDICovCi0JCQkJaWYgKHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NjYpICYgMHhjMCkKKwkJCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2NikgJiAweGMwKQogCQkJCQlyZXR1cm4gLUVJTzsKLQkJCQlkYXRhLT5kYXRhWzBdID0gc2FhNzExNV9yZWFkKGNsaWVudCwgMHg2Nyk7Ci0JCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NjgpOworCQkJCWRhdGEtPmRhdGFbMF0gPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAweDY3KTsKKwkJCQlkYXRhLT5kYXRhWzFdID0gc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2OCk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQkvKiBYRFMgKi8KLQkJCWlmIChzYWE3MTE1X3JlYWQoY2xpZW50LCAweDY2KSAmIDB4MzApCisJCQlpZiAoc2FhNzExeF9yZWFkKGNsaWVudCwgMHg2NikgJiAweDMwKQogCQkJCXJldHVybiAtRUlPOwotCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NjkpOwotCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDB4NmEpOworCQkJZGF0YS0+ZGF0YVswXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NjkpOworCQkJZGF0YS0+ZGF0YVsxXSA9IHNhYTcxMXhfcmVhZChjbGllbnQsIDB4NmEpOwogCQkJcmV0dXJuIDA7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTEyNzIsNyArMTQxMCw3IEBACiAKIAkJaWYgKHJlZy0+aTJjX2lkICE9IEkyQ19EUklWRVJJRF9TQUE3MTFYKQogCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXJlZy0+dmFsID0gc2FhNzExNV9yZWFkKGNsaWVudCwgcmVnLT5yZWcgJiAweGZmKTsKKwkJcmVnLT52YWwgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCByZWctPnJlZyAmIDB4ZmYpOwogCQlicmVhazsKIAl9CiAKQEAgLTEyODQsNyArMTQyMiw3IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJc2FhNzExNV93cml0ZShjbGllbnQsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKKwkJc2FhNzExeF93cml0ZShjbGllbnQsIHJlZy0+cmVnICYgMHhmZiwgcmVnLT52YWwgJiAweGZmKTsKIAkJYnJlYWs7CiAJfQogI2VuZGlmCkBAIC0xMzAyLDEyICsxNDQwLDE0IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX3NhYTcxMTU7CitzdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTF4OwogCi1zdGF0aWMgaW50IHNhYTcxMTVfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwgaW50IGFkZHJlc3MsIGludCBraW5kKQorc3RhdGljIGludCBzYWE3MTF4X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsIGludCBhZGRyZXNzLCBpbnQga2luZCkKIHsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZTsKKwlzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSAqc3RhdGU7CisJaW50CWk7CisJY2hhcgluYW1lWzE3XTsKIAl1OCBjaGlwX2lkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwpAQCAtMTMxOSwyOCArMTQ1OSwzMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAljbGllbnQtPmFkZHIgPSBhZGRyZXNzOwogCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTE1OworCWNsaWVudC0+ZHJpdmVyID0gJmkyY19kcml2ZXJfc2FhNzExeDsKIAlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInNhYTcxMTUiKTsKIAogCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImRldGVjdGluZyBzYWE3MTE1IGNsaWVudCBvbiBhZGRyZXNzIDB4JXhcbiIsIGFkZHJlc3MgPDwgMSk7CiAKLQlzYWE3MTE1X3dyaXRlKGNsaWVudCwgMCwgNSk7Ci0JY2hpcF9pZCA9IHNhYTcxMTVfcmVhZChjbGllbnQsIDApICYgMHgwZjsKLQlpZiAoY2hpcF9pZCA8IDMgJiYgY2hpcF9pZCA+IDUpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2FhNzExNSBub3QgZm91bmRcbiIpOwotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gMDsKKwlmb3IgKGk9MDtpPDB4MGY7aSsrKSB7CisJCXNhYTcxMXhfd3JpdGUoY2xpZW50LCAwLCBpKTsKKwkJbmFtZVtpXSA9IChzYWE3MTF4X3JlYWQoY2xpZW50LCAwKSAmMHgwZikgKycwJzsKKwkJaWYgKG5hbWVbaV0+JzknKQorCQkJbmFtZVtpXSs9J2EnLSc5Jy0xOwogCX0KLQlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInNhYTcxMSVkIixjaGlwX2lkKTsKLQl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTElZCBmb3VuZCBAIDB4JXggKCVzKVxuIiwgY2hpcF9pZCwgYWRkcmVzcyA8PCAxLCBhZGFwdGVyLT5uYW1lKTsKKwluYW1lW2ldPSdcMCc7CiAKLQlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTE1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc2FhNzExeF93cml0ZShjbGllbnQsIDAsIDUpOworCWNoaXBfaWQgPSBzYWE3MTF4X3JlYWQoY2xpZW50LCAwKSAmIDB4MGY7CisKKwlzbnByaW50ZihjbGllbnQtPm5hbWUsIHNpemVvZihjbGllbnQtPm5hbWUpIC0gMSwgInNhYTcxMSVkIixjaGlwX2lkKTsKKwl2NGxfaW5mbyhjbGllbnQsICJzYWE3MTElZCBmb3VuZCAoJXMpIEAgMHgleCAoJXMpXG4iLCBjaGlwX2lkLCBuYW1lLCBhZGRyZXNzIDw8IDEsIGFkYXB0ZXItPm5hbWUpOworCisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExeF9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIHN0YXRlKTsKIAlpZiAoc3RhdGUgPT0gTlVMTCkgewogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0Jc3RhdGUtPnN0ZCA9IFY0TDJfU1REX05UU0M7CiAJc3RhdGUtPmlucHV0ID0gLTE7CiAJc3RhdGUtPmVuYWJsZSA9IDE7CiAJc3RhdGUtPnJhZGlvID0gMDsKQEAgLTEzNDksMTUgKzE0OTIsMjUgQEAKIAlzdGF0ZS0+aHVlID0gMDsKIAlzdGF0ZS0+c2F0ID0gNjQ7CiAJc3dpdGNoIChjaGlwX2lkKSB7CisJY2FzZSAxOgorCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTE7CisJCWJyZWFrOwogCWNhc2UgMzoKIAkJc3RhdGUtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTEzOwogCQlicmVhazsKIAljYXNlIDQ6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExNDsKIAkJYnJlYWs7Ci0JZGVmYXVsdDoKKwljYXNlIDU6CiAJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExNTsKIAkJYnJlYWs7CisJY2FzZSA4OgorCQlzdGF0ZS0+aWRlbnQgPSBWNEwyX0lERU5UX1NBQTcxMTg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN0YXRlLT5pZGVudCA9IFY0TDJfSURFTlRfU0FBNzExMTsKKwkJdjRsX2luZm8oY2xpZW50LCAiV0FSTklORzogQ2hpcCBpcyBub3Qga25vd24gLSBGYWxsaW5nIGJhY2sgdG8gc2FhNzExMVxuIik7CisKIAl9CiAKIAlzdGF0ZS0+YXVkY2xrX2ZyZXEgPSA0ODAwMDsKQEAgLTEzNjUsMzggKzE1MTgsMzkgQEAKIAl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ3cml0aW5nIGluaXQgdmFsdWVzXG4iKTsKIAogCS8qIGluaXQgdG8gNjBoei80OGtoeiAqLwotCWlmIChzdGF0ZS0+aWRlbnQgPT0gVjRMMl9JREVOVF9TQUE3MTEzKSB7Ci0JCXN0YXRlLT5jcnlzdGFsX2ZyZXEgPSBTQUE3MTE1X0ZSRVFfMjRfNTc2X01IWjsKLQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTEzX2luaXRfYXV0b19pbnB1dCk7Ci0JfSBlbHNlIHsKKwlzdGF0ZS0+Y3J5c3RhbF9mcmVxID0gU0FBNzExNV9GUkVRXzI0XzU3Nl9NSFo7CisJc3dpdGNoIChzdGF0ZS0+aWRlbnQpIHsKKwljYXNlIFY0TDJfSURFTlRfU0FBNzExMToKKwkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTExX2luaXQpOworCQlicmVhazsKKwljYXNlIFY0TDJfSURFTlRfU0FBNzExMzoKKwkJc2FhNzExeF93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTEzX2luaXQpOworCQlicmVhazsKKwlkZWZhdWx0OgogCQlzdGF0ZS0+Y3J5c3RhbF9mcmVxID0gU0FBNzExNV9GUkVRXzMyXzExX01IWjsKLQkJc2FhNzExNV93cml0ZXJlZ3MoY2xpZW50LCBzYWE3MTE1X2luaXRfYXV0b19pbnB1dCk7CisJCXNhYTcxMXhfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9pbml0X2F1dG9faW5wdXQpOwogCX0KLQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9taXNjKTsKLQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc194KTsKLQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfZnVsbHJlc195KTsKLQlzYWE3MTE1X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfY2ZnXzYwaHpfdmlkZW8pOwotCXNhYTcxMTVfc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY2xpZW50LCBzdGF0ZS0+YXVkY2xrX2ZyZXEpOwotCXNhYTcxMTVfd3JpdGVyZWdzKGNsaWVudCwgc2FhNzExNV9jZmdfcmVzZXRfc2NhbGVyKTsKKwlzYWE3MTF4X3dyaXRlcmVncyhjbGllbnQsIHNhYTcxMTVfaW5pdF9taXNjKTsKKwlzYWE3MTF4X3NldF92NGxzdGQoY2xpZW50LCBWNEwyX1NURF9OVFNDKTsKIAogCWkyY19hdHRhY2hfY2xpZW50KGNsaWVudCk7CiAKIAl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM6ICgxRSkgMHglMDJ4LCAoMUYpIDB4JTAyeFxuIiwKLQkJc2FhNzExNV9yZWFkKGNsaWVudCwgMHgxZSksIHNhYTcxMTVfcmVhZChjbGllbnQsIDB4MWYpKTsKKwkJc2FhNzExeF9yZWFkKGNsaWVudCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyksIHNhYTcxMXhfcmVhZChjbGllbnQsIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMpKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxMTVfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorc3RhdGljIGludCBzYWE3MTF4X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKIAlpZiAoYWRhcHRlci0+Y2xhc3MgJiBJMkNfQ0xBU1NfVFZfQU5BTE9HKQotCQlyZXR1cm4gaTJjX3Byb2JlKGFkYXB0ZXIsICZhZGRyX2RhdGEsICZzYWE3MTE1X2F0dGFjaCk7CisJCXJldHVybiBpMmNfcHJvYmUoYWRhcHRlciwgJmFkZHJfZGF0YSwgJnNhYTcxMXhfYXR0YWNoKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTE1X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTF4X2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCBzYWE3MTE1X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCWludCBlcnI7CiAKIAllcnIgPSBpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwpAQCAtMTQxMiwyNiArMTU2NiwyNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogLyogaTJjIGltcGxlbWVudGF0aW9uICovCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTE1ID0geworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzExeCA9IHsKIAkuZHJpdmVyID0gewogCQkubmFtZSA9ICJzYWE3MTE1IiwKIAl9LAogCS5pZCA9IEkyQ19EUklWRVJJRF9TQUE3MTFYLAotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTcxMTVfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE3MTE1X2RldGFjaCwKLQkuY29tbWFuZCA9IHNhYTcxMTVfY29tbWFuZCwKKwkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTF4X3Byb2JlLAorCS5kZXRhY2hfY2xpZW50ID0gc2FhNzExeF9kZXRhY2gsCisJLmNvbW1hbmQgPSBzYWE3MTF4X2NvbW1hbmQsCiB9OwogCiAKLXN0YXRpYyBpbnQgX19pbml0IHNhYTcxMTVfaW5pdF9tb2R1bGUodm9pZCkKK3N0YXRpYyBpbnQgX19pbml0IHNhYTcxMXhfaW5pdF9tb2R1bGUodm9pZCkKIHsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzExNSk7CisJcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZpMmNfZHJpdmVyX3NhYTcxMXgpOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2FhNzExNV9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHNhYTcxMXhfY2xlYW51cF9tb2R1bGUodm9pZCkKIHsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTE1KTsKKwlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTF4KTsKIH0KIAotbW9kdWxlX2luaXQoc2FhNzExNV9pbml0X21vZHVsZSk7Ci1tb2R1bGVfZXhpdChzYWE3MTE1X2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9pbml0KHNhYTcxMXhfaW5pdF9tb2R1bGUpOworbW9kdWxlX2V4aXQoc2FhNzExeF9jbGVhbnVwX21vZHVsZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMXhfcmVncy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4X3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTVmMmViCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTF4X3JlZ3MuaApAQCAtMCwwICsxLDU0OSBAQAorLyogc2FhNzExeCAtIFBoaWxpcHMgU0FBNzExeCB2aWRlbyBkZWNvZGVyIHJlZ2lzdGVyIHNwZWNpZmljYXRpb25zCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA2IE1hdXJvIENhcnZhbGhvIENoZWhhYiA8bWNoZWhhYkBpbmZyYWRlYWQub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorICogb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqLworCisjZGVmaW5lIFJfMDBfQ0hJUF9WRVJTSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwCisvKiBWaWRlbyBEZWNvZGVyICovCisJLyogVmlkZW8gRGVjb2RlciAtIEZyb250ZW5kIHBhcnQgKi8KKyNkZWZpbmUgUl8wMV9JTkNfREVMQVkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDEKKyNkZWZpbmUgUl8wMl9JTlBVVF9DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgUl8wM19JTlBVVF9DTlRMXzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDMKKyNkZWZpbmUgUl8wNF9JTlBVVF9DTlRMXzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDQKKyNkZWZpbmUgUl8wNV9JTlBVVF9DTlRMXzQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDUKKwkvKiBWaWRlbyBEZWNvZGVyIC0gRGVjb2RlciBwYXJ0ICovCisjZGVmaW5lIFJfMDZfSF9TWU5DX1NUQVJUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA2CisjZGVmaW5lIFJfMDdfSF9TWU5DX1NUT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA3CisjZGVmaW5lIFJfMDhfU1lOQ19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA4CisjZGVmaW5lIFJfMDlfTFVNQV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDA5CisjZGVmaW5lIFJfMEFfTFVNQV9CUklHSFRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBhCisjZGVmaW5lIFJfMEJfTFVNQV9DT05UUkFTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDBiCisjZGVmaW5lIFJfMENfQ0hST01BX1NBVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBjCisjZGVmaW5lIFJfMERfQ0hST01BX0hVRV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDBkCisjZGVmaW5lIFJfMEVfQ0hST01BX0NOVExfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDBlCisjZGVmaW5lIFJfMEZfQ0hST01BX0dBSU5fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDBmCisjZGVmaW5lIFJfMTBfQ0hST01BX0NOVExfMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEwCisjZGVmaW5lIFJfMTFfTU9ERV9ERUxBWV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAweDExCisjZGVmaW5lIFJfMTJfUlRfU0lHTkFMX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEyCisjZGVmaW5lIFJfMTNfUlRfWF9QT1JUX09VVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDEzCisjZGVmaW5lIFJfMTRfQU5BTF9BRENfQ09NUEFUX0NOVEwgICAgICAgICAgICAgICAgICAgICAweDE0CisjZGVmaW5lIFJfMTVfVkdBVEVfU1RBUlRfRklEX0NIRyAgICAgICAgICAgICAgICAgICAgICAweDE1CisjZGVmaW5lIFJfMTZfVkdBVEVfU1RPUCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE2CisjZGVmaW5lIFJfMTdfTUlTQ19WR0FURV9DT05GX0FORF9NU0IgICAgICAgICAgICAgICAgICAweDE3CisjZGVmaW5lIFJfMThfUkFXX0RBVEFfR0FJTl9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDE4CisjZGVmaW5lIFJfMTlfUkFXX0RBVEFfT0ZGX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAweDE5CisjZGVmaW5lIFJfMUFfQ09MT1JfS0lMTF9MVkxfQ05UTCAgICAgICAgICAgICAgICAgICAgICAweDFhCisjZGVmaW5lIFJfMUJfTUlTQ19UVlZDUkRFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDFiCisjZGVmaW5lIFJfMUNfRU5IQU5fQ09NQl9DVFJMMSAgICAgICAgICAgICAgICAgICAgICAgICAweDFjCisjZGVmaW5lIFJfMURfRU5IQU5fQ09NQl9DVFJMMiAgICAgICAgICAgICAgICAgICAgICAgICAweDFkCisjZGVmaW5lIFJfMUVfU1RBVFVTX0JZVEVfMV9WRF9ERUMgICAgICAgICAgICAgICAgICAgICAweDFlCisjZGVmaW5lIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMgICAgICAgICAgICAgICAgICAgICAweDFmCisKKy8qIENvbXBvbmVudCBwcm9jZXNzaW5nIGFuZCBpbnRlcnJ1cHQgbWFza2luZyBwYXJ0ICovCisjZGVmaW5lIFJfMjNfSU5QVVRfQ05UTF81ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIzCisjZGVmaW5lIFJfMjRfSU5QVVRfQ05UTF82ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0CisjZGVmaW5lIFJfMjVfSU5QVVRfQ05UTF83ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI1CisjZGVmaW5lIFJfMjlfQ09NUF9ERUxBWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI5CisjZGVmaW5lIFJfMkFfQ09NUF9CUklHSFRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAweDJhCisjZGVmaW5lIFJfMkJfQ09NUF9DT05UUkFTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAweDJiCisjZGVmaW5lIFJfMkNfQ09NUF9TQVRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJjCisjZGVmaW5lIFJfMkRfSU5URVJSVVBUX01BU0tfMSAgICAgICAgICAgICAgICAgICAgICAgICAweDJkCisjZGVmaW5lIFJfMkVfSU5URVJSVVBUX01BU0tfMiAgICAgICAgICAgICAgICAgICAgICAgICAweDJlCisjZGVmaW5lIFJfMkZfSU5URVJSVVBUX01BU0tfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDJmCisKKy8qIEF1ZGlvIGNsb2NrIGdlbmVyYXRvciBwYXJ0ICovCisjZGVmaW5lIFJfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQgICAgICAgICAgICAweDMwCisjZGVmaW5lIFJfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DICAgICAgICAgICAgICAgICAweDM0CisjZGVmaW5lIFJfMzhfQ0xLX1JBVElPX0FNWENMS19UT19BU0NMSyAgICAgICAgICAgICAgICAweDM4CisjZGVmaW5lIFJfMzlfQ0xLX1JBVElPX0FTQ0xLX1RPX0FMUkNMSyAgICAgICAgICAgICAgICAweDM5CisjZGVmaW5lIFJfM0FfQVVEX0NMS19HRU5fQkFTSUNfU0VUVVAgICAgICAgICAgICAgICAgICAweDNhCisKKy8qIEdlbmVyYWwgcHVycG9zZSBWQkkgZGF0YSBzbGljZXIgcGFydCAqLworI2RlZmluZSBSXzQwX1NMSUNFUl9DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MAorI2RlZmluZSBSXzQxX0xDUl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg0MQorI2RlZmluZSBSXzU4X1BST0dSQU1fRlJBTUlOR19DT0RFICAgICAgICAgICAgICAgICAgICAgMHg1OAorI2RlZmluZSBSXzU5X0hfT0ZGX0ZPUl9TTElDRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg1OQorI2RlZmluZSBSXzVBX1ZfT0ZGX0ZPUl9TTElDRVIgICAgICAgICAgICAgICAgICAgICAgICAgMHg1YQorI2RlZmluZSBSXzVCX0ZMRF9PRkZfQU5EX01TQl9GT1JfSF9BTkRfVl9PRkYgICAgICAgICAgMHg1YgorI2RlZmluZSBSXzVEX0RJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1ZAorI2RlZmluZSBSXzVFX1NESUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg1ZQorI2RlZmluZSBSXzYwX1NMSUNFUl9TVEFUVVNfQllURV8wICAgICAgICAgICAgICAgICAgICAgMHg2MAorI2RlZmluZSBSXzYxX1NMSUNFUl9TVEFUVVNfQllURV8xICAgICAgICAgICAgICAgICAgICAgMHg2MQorI2RlZmluZSBSXzYyX1NMSUNFUl9TVEFUVVNfQllURV8yICAgICAgICAgICAgICAgICAgICAgMHg2MgorCisvKiBYIHBvcnQsIEkgcG9ydCBhbmQgdGhlIHNjYWxlciBwYXJ0ICovCisJLyogVGFzayBpbmRlcGVuZGVudCBnbG9iYWwgc2V0dGluZ3MgKi8KKyNkZWZpbmUgUl84MF9HTE9CQUxfQ05UTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAKKyNkZWZpbmUgUl84MV9WX1NZTkNfRkxEX0lEX1NSQ19TRUxfQU5EX1JFVElNRURfVl9GICAgIDB4ODEKKyNkZWZpbmUgUl84M19YX1BPUlRfSV9PX0VOQV9BTkRfT1VUX0NMSyAgICAgICAgICAgICAgIDB4ODMKKyNkZWZpbmUgUl84NF9JX1BPUlRfU0lHTkFMX0RFRiAgICAgICAgICAgICAgICAgICAgICAgIDB4ODQKKyNkZWZpbmUgUl84NV9JX1BPUlRfU0lHTkFMX1BPTEFSICAgICAgICAgICAgICAgICAgICAgIDB4ODUKKyNkZWZpbmUgUl84Nl9JX1BPUlRfRklGT19GTEFHX0NOVExfQU5EX0FSQklUICAgICAgICAgIDB4ODYKKyNkZWZpbmUgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCAgICAgICAgIDB4ODcKKyNkZWZpbmUgUl84OF9QT1dFUl9TQVZFX0FEQ19QT1JUX0NOVEwgICAgICAgICAgICAgICAgIDB4ODgKKyNkZWZpbmUgUl84Rl9TVEFUVVNfSU5GT19TQ0FMRVIgICAgICAgICAgICAgICAgICAgICAgIDB4OGYKKwkvKiBUYXNrIEEgZGVmaW5pdGlvbiAqLworCQkvKiBCYXNpYyBzZXR0aW5ncyBhbmQgYWNxdWlzaXRpb24gd2luZG93IGRlZmluaXRpb24gKi8KKyNkZWZpbmUgUl85MF9BX1RBU0tfSEFORExJTkdfQ05UTCAgICAgICAgICAgICAgICAgICAgIDB4OTAKKyNkZWZpbmUgUl85MV9BX1hfUE9SVF9GT1JNQVRTX0FORF9DT05GICAgICAgICAgICAgICAgIDB4OTEKKyNkZWZpbmUgUl85Ml9BX1hfUE9SVF9JTlBVVF9SRUZFUkVOQ0VfU0lHTkFMICAgICAgICAgIDB4OTIKKyNkZWZpbmUgUl85M19BX0lfUE9SVF9PVVRQVVRfRk9STUFUU19BTkRfQ09ORiAgICAgICAgIDB4OTMKKyNkZWZpbmUgUl85NF9BX0hPUklaX0lOUFVUX1dJTkRPV19TVEFSVCAgICAgICAgICAgICAgIDB4OTQKKyNkZWZpbmUgUl85NV9BX0hPUklaX0lOUFVUX1dJTkRPV19TVEFSVF9NU0IgICAgICAgICAgIDB4OTUKKyNkZWZpbmUgUl85Nl9BX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEggICAgICAgICAgICAgIDB4OTYKKyNkZWZpbmUgUl85N19BX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEhfTVNCICAgICAgICAgIDB4OTcKKyNkZWZpbmUgUl85OF9BX1ZFUlRfSU5QVVRfV0lORE9XX1NUQVJUICAgICAgICAgICAgICAgIDB4OTgKKyNkZWZpbmUgUl85OV9BX1ZFUlRfSU5QVVRfV0lORE9XX1NUQVJUX01TQiAgICAgICAgICAgIDB4OTkKKyNkZWZpbmUgUl85QV9BX1ZFUlRfSU5QVVRfV0lORE9XX0xFTkdUSCAgICAgICAgICAgICAgIDB4OWEKKyNkZWZpbmUgUl85Ql9BX1ZFUlRfSU5QVVRfV0lORE9XX0xFTkdUSF9NU0IgICAgICAgICAgIDB4OWIKKyNkZWZpbmUgUl85Q19BX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIICAgICAgICAgICAgIDB4OWMKKyNkZWZpbmUgUl85RF9BX0hPUklaX09VVFBVVF9XSU5ET1dfTEVOR1RIX01TQiAgICAgICAgIDB4OWQKKyNkZWZpbmUgUl85RV9BX1ZFUlRfT1VUUFVUX1dJTkRPV19MRU5HVEggICAgICAgICAgICAgIDB4OWUKKyNkZWZpbmUgUl85Rl9BX1ZFUlRfT1VUUFVUX1dJTkRPV19MRU5HVEhfTVNCICAgICAgICAgIDB4OWYKKwkJLyogRklSIGZpbHRlcmluZyBhbmQgcHJlc2NhbGluZyAqLworI2RlZmluZSBSX0EwX0FfSE9SSVpfUFJFU0NBTElORyAgICAgICAgICAgICAgICAgICAgICAgMHhhMAorI2RlZmluZSBSX0ExX0FfQUNDVU1VTEFUSU9OX0xFTkdUSCAgICAgICAgICAgICAgICAgICAgMHhhMQorI2RlZmluZSBSX0EyX0FfUFJFU0NBTEVSX0RDX0dBSU5fQU5EX0ZJUl9QUkVGSUxURVIgICAgMHhhMgorI2RlZmluZSBSX0E0X0FfTFVNQV9CUklHSFRORVNTX0NOVEwgICAgICAgICAgICAgICAgICAgMHhhNAorI2RlZmluZSBSX0E1X0FfTFVNQV9DT05UUkFTVF9DTlRMICAgICAgICAgICAgICAgICAgICAgMHhhNQorI2RlZmluZSBSX0E2X0FfQ0hST01BX1NBVFVSQVRJT05fQ05UTCAgICAgICAgICAgICAgICAgMHhhNgorCQkvKiBIb3Jpem9udGFsIHBoYXNlIHNjYWxpbmcgKi8KKyNkZWZpbmUgUl9BOF9BX0hPUklaX0xVTUFfU0NBTElOR19JTkMgICAgICAgICAgICAgICAgIDB4YTgKKyNkZWZpbmUgUl9BOV9BX0hPUklaX0xVTUFfU0NBTElOR19JTkNfTVNCICAgICAgICAgICAgIDB4YTkKKyNkZWZpbmUgUl9BQV9BX0hPUklaX0xVTUFfUEhBU0VfT0ZGICAgICAgICAgICAgICAgICAgIDB4YWEKKyNkZWZpbmUgUl9BQ19BX0hPUklaX0NIUk9NQV9TQ0FMSU5HX0lOQyAgICAgICAgICAgICAgIDB4YWMKKyNkZWZpbmUgUl9BRF9BX0hPUklaX0NIUk9NQV9TQ0FMSU5HX0lOQ19NU0IgICAgICAgICAgIDB4YWQKKyNkZWZpbmUgUl9BRV9BX0hPUklaX0NIUk9NQV9QSEFTRV9PRkYgICAgICAgICAgICAgICAgIDB4YWUKKyNkZWZpbmUgUl9BRl9BX0hPUklaX0NIUk9NQV9QSEFTRV9PRkZfTVNCICAgICAgICAgICAgIDB4YWYKKwkJLyogVmVydGljYWwgc2NhbGluZyAqLworI2RlZmluZSBSX0IwX0FfVkVSVF9MVU1BX1NDQUxJTkdfSU5DICAgICAgICAgICAgICAgICAgMHhiMAorI2RlZmluZSBSX0IxX0FfVkVSVF9MVU1BX1NDQUxJTkdfSU5DX01TQiAgICAgICAgICAgICAgMHhiMQorI2RlZmluZSBSX0IyX0FfVkVSVF9DSFJPTUFfU0NBTElOR19JTkMgICAgICAgICAgICAgICAgMHhiMgorI2RlZmluZSBSX0IzX0FfVkVSVF9DSFJPTUFfU0NBTElOR19JTkNfTVNCICAgICAgICAgICAgMHhiMworI2RlZmluZSBSX0I0X0FfVkVSVF9TQ0FMSU5HX01PREVfQ05UTCAgICAgICAgICAgICAgICAgMHhiNAorI2RlZmluZSBSX0I4X0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzAwICAgICAgICAgICAgICAgMHhiOAorI2RlZmluZSBSX0I5X0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzAxICAgICAgICAgICAgICAgMHhiOQorI2RlZmluZSBSX0JBX0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzEwICAgICAgICAgICAgICAgMHhiYQorI2RlZmluZSBSX0JCX0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzExICAgICAgICAgICAgICAgMHhiYgorI2RlZmluZSBSX0JDX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8wMCAgICAgICAgICAgICAgICAgMHhiYworI2RlZmluZSBSX0JEX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8wMSAgICAgICAgICAgICAgICAgMHhiZAorI2RlZmluZSBSX0JFX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8xMCAgICAgICAgICAgICAgICAgMHhiZQorI2RlZmluZSBSX0JGX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8xMSAgICAgICAgICAgICAgICAgMHhiZgorCS8qIFRhc2sgQiBkZWZpbml0aW9uICovCisJCS8qIEJhc2ljIHNldHRpbmdzIGFuZCBhY3F1aXNpdGlvbiB3aW5kb3cgZGVmaW5pdGlvbiAqLworI2RlZmluZSBSX0MwX0JfVEFTS19IQU5ETElOR19DTlRMICAgICAgICAgICAgICAgICAgICAgMHhjMAorI2RlZmluZSBSX0MxX0JfWF9QT1JUX0ZPUk1BVFNfQU5EX0NPTkYgICAgICAgICAgICAgICAgMHhjMQorI2RlZmluZSBSX0MyX0JfSU5QVVRfUkVGRVJFTkNFX1NJR05BTF9ERUZJTklUSU9OICAgICAgMHhjMgorI2RlZmluZSBSX0MzX0JfSV9QT1JUX0ZPUk1BVFNfQU5EX0NPTkYgICAgICAgICAgICAgICAgMHhjMworI2RlZmluZSBSX0M0X0JfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJUICAgICAgICAgICAgICAgMHhjNAorI2RlZmluZSBSX0M1X0JfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJUX01TQiAgICAgICAgICAgMHhjNQorI2RlZmluZSBSX0M2X0JfSE9SSVpfSU5QVVRfV0lORE9XX0xFTkdUSCAgICAgICAgICAgICAgMHhjNgorI2RlZmluZSBSX0M3X0JfSE9SSVpfSU5QVVRfV0lORE9XX0xFTkdUSF9NU0IgICAgICAgICAgMHhjNworI2RlZmluZSBSX0M4X0JfVkVSVF9JTlBVVF9XSU5ET1dfU1RBUlQgICAgICAgICAgICAgICAgMHhjOAorI2RlZmluZSBSX0M5X0JfVkVSVF9JTlBVVF9XSU5ET1dfU1RBUlRfTVNCICAgICAgICAgICAgMHhjOQorI2RlZmluZSBSX0NBX0JfVkVSVF9JTlBVVF9XSU5ET1dfTEVOR1RIICAgICAgICAgICAgICAgMHhjYQorI2RlZmluZSBSX0NCX0JfVkVSVF9JTlBVVF9XSU5ET1dfTEVOR1RIX01TQiAgICAgICAgICAgMHhjYgorI2RlZmluZSBSX0NDX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEggICAgICAgICAgICAgMHhjYworI2RlZmluZSBSX0NEX0JfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEhfTVNCICAgICAgICAgMHhjZAorI2RlZmluZSBSX0NFX0JfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSCAgICAgICAgICAgICAgMHhjZQorI2RlZmluZSBSX0NGX0JfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSF9NU0IgICAgICAgICAgMHhjZgorCQkvKiBGSVIgZmlsdGVyaW5nIGFuZCBwcmVzY2FsaW5nICovCisjZGVmaW5lIFJfRDBfQl9IT1JJWl9QUkVTQ0FMSU5HICAgICAgICAgICAgICAgICAgICAgICAweGQwCisjZGVmaW5lIFJfRDFfQl9BQ0NVTVVMQVRJT05fTEVOR1RIICAgICAgICAgICAgICAgICAgICAweGQxCisjZGVmaW5lIFJfRDJfQl9QUkVTQ0FMRVJfRENfR0FJTl9BTkRfRklSX1BSRUZJTFRFUiAgICAweGQyCisjZGVmaW5lIFJfRDRfQl9MVU1BX0JSSUdIVE5FU1NfQ05UTCAgICAgICAgICAgICAgICAgICAweGQ0CisjZGVmaW5lIFJfRDVfQl9MVU1BX0NPTlRSQVNUX0NOVEwgICAgICAgICAgICAgICAgICAgICAweGQ1CisjZGVmaW5lIFJfRDZfQl9DSFJPTUFfU0FUVVJBVElPTl9DTlRMICAgICAgICAgICAgICAgICAweGQ2CisJCS8qIEhvcml6b250YWwgcGhhc2Ugc2NhbGluZyAqLworI2RlZmluZSBSX0Q4X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQyAgICAgICAgICAgICAgICAgMHhkOAorI2RlZmluZSBSX0Q5X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQ19NU0IgICAgICAgICAgICAgMHhkOQorI2RlZmluZSBSX0RBX0JfSE9SSVpfTFVNQV9QSEFTRV9PRkYgICAgICAgICAgICAgICAgICAgMHhkYQorI2RlZmluZSBSX0RDX0JfSE9SSVpfQ0hST01BX1NDQUxJTkcgICAgICAgICAgICAgICAgICAgMHhkYworI2RlZmluZSBSX0REX0JfSE9SSVpfQ0hST01BX1NDQUxJTkdfTVNCICAgICAgICAgICAgICAgMHhkZAorI2RlZmluZSBSX0RFX0JfSE9SSVpfUEhBU0VfT0ZGU0VUX0NSSE9NQSAgICAgICAgICAgICAgMHhkZQorCQkvKiBWZXJ0aWNhbCBzY2FsaW5nICovCisjZGVmaW5lIFJfRTBfQl9WRVJUX0xVTUFfU0NBTElOR19JTkMgICAgICAgICAgICAgICAgICAweGUwCisjZGVmaW5lIFJfRTFfQl9WRVJUX0xVTUFfU0NBTElOR19JTkNfTVNCICAgICAgICAgICAgICAweGUxCisjZGVmaW5lIFJfRTJfQl9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQyAgICAgICAgICAgICAgICAweGUyCisjZGVmaW5lIFJfRTNfQl9WRVJUX0NIUk9NQV9TQ0FMSU5HX0lOQ19NU0IgICAgICAgICAgICAweGUzCisjZGVmaW5lIFJfRTRfQl9WRVJUX1NDQUxJTkdfTU9ERV9DTlRMICAgICAgICAgICAgICAgICAweGU0CisjZGVmaW5lIFJfRThfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMDAgICAgICAgICAgICAgICAweGU4CisjZGVmaW5lIFJfRTlfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMDEgICAgICAgICAgICAgICAweGU5CisjZGVmaW5lIFJfRUFfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMTAgICAgICAgICAgICAgICAweGVhCisjZGVmaW5lIFJfRUJfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMTEgICAgICAgICAgICAgICAweGViCisjZGVmaW5lIFJfRUNfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzAwICAgICAgICAgICAgICAgICAweGVjCisjZGVmaW5lIFJfRURfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzAxICAgICAgICAgICAgICAgICAweGVkCisjZGVmaW5lIFJfRUVfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzEwICAgICAgICAgICAgICAgICAweGVlCisjZGVmaW5lIFJfRUZfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzExICAgICAgICAgICAgICAgICAweGVmCisKKy8qIHNlY29uZCBQTEwgKFBMTDIpIGFuZCBQdWxzZWdlbmVyYXRvciBQcm9ncmFtbWluZyAqLworI2RlZmluZSBSX0YwX0xGQ09fUEVSX0xJTkUgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMAorI2RlZmluZSBSX0YxX1BfSV9QQVJBTV9TRUxFQ1QgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMQorI2RlZmluZSBSX0YyX05PTUlOQUxfUExMMl9EVE8gICAgICAgICAgICAgICAgICAgICAgICAgMHhmMgorI2RlZmluZSBSX0YzX1BMTF9JTkNSRU1FTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmMworI2RlZmluZSBSX0Y0X1BMTDJfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNAorI2RlZmluZSBSX0Y1X1BVTFNHRU5fTElORV9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgMHhmNQorI2RlZmluZSBSX0Y2X1BVTFNFX0FfUE9TX0xTQl9BTkRfUFVMU0VHRU5fQ09ORklHICAgICAgMHhmNgorI2RlZmluZSBSX0Y3X1BVTFNFX0FfUE9TX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmNworI2RlZmluZSBSX0Y4X1BVTFNFX0JfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmOAorI2RlZmluZSBSX0Y5X1BVTFNFX0JfUE9TX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmOQorI2RlZmluZSBSX0ZBX1BVTFNFX0NfUE9TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYQorI2RlZmluZSBSX0ZCX1BVTFNFX0NfUE9TX01TQiAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmYgorI2RlZmluZSBSX0ZGX1NfUExMX01BWF9QSEFTRV9FUlJfVEhSRVNIX05VTV9MSU5FUyAgICAgMHhmZgorCisjaWYgMAorLyogVGhvc2Ugc3RydWN0cyB3aWxsIGJlIHVzZWQgaW4gdGhlIGZ1dHVyZSBmb3IgZGVidWcgcHVycG9zZXMgKi8KK3N0cnVjdCBzYWE3MTF4X3JlZ19kZXNjciB7CisJdTggcmVnOworCWludCBjb3VudDsKKwljaGFyICpuYW1lOworfTsKKworc3RydWN0IHNhYTcxMXhfcmVnX2Rlc2NyIHNhYTcxMXhfcmVnc1tdID0geworCS8qIFJFRyBDT1VOVCBOQU1FICovCisJe1JfMDBfQ0hJUF9WRVJTSU9OLDEsCisJICJDaGlwIHZlcnNpb24ifSwKKworCS8qIFZpZGVvIERlY29kZXI6IFJfMDFfSU5DX0RFTEFZIHRvIFJfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMgKi8KKworCS8qIFZpZGVvIERlY29kZXIgLSBGcm9udGVuZCBwYXJ0OiBSXzAxX0lOQ19ERUxBWSB0byBSXzA1X0lOUFVUX0NOVExfNCAqLworCXtSXzAxX0lOQ19ERUxBWSwxLAorCSAiSW5jcmVtZW50IGRlbGF5In0sCisJe1JfMDJfSU5QVVRfQ05UTF8xLDEsCisJICJBbmFsb2cgaW5wdXQgY29udHJvbCAxIn0sCisJe1JfMDNfSU5QVVRfQ05UTF8yLDEsCisJICJBbmFsb2cgaW5wdXQgY29udHJvbCAyIn0sCisJe1JfMDRfSU5QVVRfQ05UTF8zLDEsCisJICJBbmFsb2cgaW5wdXQgY29udHJvbCAzIn0sCisJe1JfMDVfSU5QVVRfQ05UTF80LDEsCisJICJBbmFsb2cgaW5wdXQgY29udHJvbCA0In0sCisKKwkvKiBWaWRlbyBEZWNvZGVyIC0gRGVjb2RlciBwYXJ0OiBSXzA2X0hfU1lOQ19TVEFSVCB0byBSXzFGX1NUQVRVU19CWVRFXzJfVkRfREVDICovCisJe1JfMDZfSF9TWU5DX1NUQVJULDEsCisJICJIb3Jpem9udGFsIHN5bmMgc3RhcnQifSwKKwl7Ul8wN19IX1NZTkNfU1RPUCwxLAorCSAiSG9yaXpvbnRhbCBzeW5jIHN0b3AifSwKKwl7Ul8wOF9TWU5DX0NOVEwsMSwKKwkgIlN5bmMgY29udHJvbCJ9LAorCXtSXzA5X0xVTUFfQ05UTCwxLAorCSAiTHVtaW5hbmNlIGNvbnRyb2wifSwKKwl7Ul8wQV9MVU1BX0JSSUdIVF9DTlRMLDEsCisJICJMdW1pbmFuY2UgYnJpZ2h0bmVzcyBjb250cm9sIn0sCisJe1JfMEJfTFVNQV9DT05UUkFTVF9DTlRMLDEsCisJICJMdW1pbmFuY2UgY29udHJhc3QgY29udHJvbCJ9LAorCXtSXzBDX0NIUk9NQV9TQVRfQ05UTCwxLAorCSAiQ2hyb21pbmFuY2Ugc2F0dXJhdGlvbiBjb250cm9sIn0sCisJe1JfMERfQ0hST01BX0hVRV9DTlRMLDEsCisJICJDaHJvbWluYW5jZSBodWUgY29udHJvbCJ9LAorCXtSXzBFX0NIUk9NQV9DTlRMXzEsMSwKKwkgIkNocm9taW5hbmNlIGNvbnRyb2wgMSJ9LAorCXtSXzBGX0NIUk9NQV9HQUlOX0NOVEwsMSwKKwkgIkNocm9taW5hbmNlIGdhaW4gY29udHJvbCJ9LAorCXtSXzEwX0NIUk9NQV9DTlRMXzIsMSwKKwkgIkNocm9taW5hbmNlIGNvbnRyb2wgMiJ9LAorCXtSXzExX01PREVfREVMQVlfQ05UTCwxLAorCSAiTW9kZS9kZWxheSBjb250cm9sIn0sCisJe1JfMTJfUlRfU0lHTkFMX0NOVEwsMSwKKwkgIlJUIHNpZ25hbCBjb250cm9sIn0sCisJe1JfMTNfUlRfWF9QT1JUX09VVF9DTlRMLDEsCisJICJSVC9YIHBvcnQgb3V0cHV0IGNvbnRyb2wifSwKKwl7Ul8xNF9BTkFMX0FEQ19DT01QQVRfQ05UTCwxLAorCSAiQW5hbG9nL0FEQy9jb21wYXRpYmlsaXR5IGNvbnRyb2wifSwKKwl7Ul8xNV9WR0FURV9TVEFSVF9GSURfQ0hHLCAgMSwKKwkgIlZHQVRFIHN0YXJ0IEZJRCBjaGFuZ2UifSwKKwl7Ul8xNl9WR0FURV9TVE9QLDEsCisJICJWR0FURSBzdG9wIn0sCisJe1JfMTdfTUlTQ19WR0FURV9DT05GX0FORF9NU0IsICAxLAorCSAiTWlzY2VsbGFuZW91cyBWR0FURSBjb25maWd1cmF0aW9uIGFuZCBNU0JzIn0sCisJe1JfMThfUkFXX0RBVEFfR0FJTl9DTlRMLDEsCisJICJSYXcgZGF0YSBnYWluIGNvbnRyb2wiLH0sCisJe1JfMTlfUkFXX0RBVEFfT0ZGX0NOVEwsMSwKKwkgIlJhdyBkYXRhIG9mZnNldCBjb250cm9sIix9LAorCXtSXzFBX0NPTE9SX0tJTExfTFZMX0NOVEwsMSwKKwkgIkNvbG9yIEtpbGxlciBMZXZlbCBDb250cm9sIn0sCisJeyBSXzFCX01JU0NfVFZWQ1JERVQsIDEsCisJICAiTUlTQyAvVFZWQ1JERVQifSwKKwl7IFJfMUNfRU5IQU5fQ09NQl9DVFJMMSwgMSwKKwkgIkVuaGFuY2VkIGNvbWIgY3RybDEifSwKKwl7IFJfMURfRU5IQU5fQ09NQl9DVFJMMiwgMSwKKwkgIkVuaGFuY2VkIGNvbWIgY3RybDEifSwKKwl7Ul8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQywxLAorCSAiU3RhdHVzIGJ5dGUgMSB2aWRlbyBkZWNvZGVyIn0sCisJe1JfMUZfU1RBVFVTX0JZVEVfMl9WRF9ERUMsMSwKKwkgIlN0YXR1cyBieXRlIDIgdmlkZW8gZGVjb2RlciJ9LAorCisJLyogQ29tcG9uZW50IHByb2Nlc3NpbmcgYW5kIGludGVycnVwdCBtYXNraW5nIHBhcnQ6ICAweDIwaCB0byBSXzJGX0lOVEVSUlVQVF9NQVNLXzMgKi8KKwkvKiAweDIwIHRvIDB4MjIgLSBSZXNlcnZlZCAqLworCXtSXzIzX0lOUFVUX0NOVExfNSwxLAorCSAiQW5hbG9nIGlucHV0IGNvbnRyb2wgNSJ9LAorCXtSXzI0X0lOUFVUX0NOVExfNiwxLAorCSAiQW5hbG9nIGlucHV0IGNvbnRyb2wgNiJ9LAorCXtSXzI1X0lOUFVUX0NOVExfNywxLAorCSAiQW5hbG9nIGlucHV0IGNvbnRyb2wgNyJ9LAorCS8qIDB4MjYgdG8gMHgyOCAtIFJlc2VydmVkICovCisJe1JfMjlfQ09NUF9ERUxBWSwxLAorCSAiQ29tcG9uZW50IGRlbGF5In0sCisJe1JfMkFfQ09NUF9CUklHSFRfQ05UTCwxLAorCSAiQ29tcG9uZW50IGJyaWdodG5lc3MgY29udHJvbCJ9LAorCXtSXzJCX0NPTVBfQ09OVFJBU1RfQ05UTCwxLAorCSAiQ29tcG9uZW50IGNvbnRyYXN0IGNvbnRyb2wifSwKKwl7Ul8yQ19DT01QX1NBVF9DTlRMLDEsCisJICJDb21wb25lbnQgc2F0dXJhdGlvbiBjb250cm9sIn0sCisJe1JfMkRfSU5URVJSVVBUX01BU0tfMSwxLAorCSAiSW50ZXJydXB0IG1hc2sgMSJ9LAorCXtSXzJFX0lOVEVSUlVQVF9NQVNLXzIsMSwKKwkgIkludGVycnVwdCBtYXNrIDIifSwKKwl7Ul8yRl9JTlRFUlJVUFRfTUFTS18zLDEsCisJICJJbnRlcnJ1cHQgbWFzayAzIn0sCisKKwkvKiBBdWRpbyBjbG9jayBnZW5lcmF0b3IgcGFydDogUl8zMF9BVURfTUFTVF9DTEtfQ1lDTEVTX1BFUl9GSUVMRCB0byAweDNmICovCisJe1JfMzBfQVVEX01BU1RfQ0xLX0NZQ0xFU19QRVJfRklFTEQsMywKKwkgIkF1ZGlvIG1hc3RlciBjbG9jayBjeWNsZXMgcGVyIGZpZWxkIn0sCisJLyogMHgzMyAtIFJlc2VydmVkICovCisJe1JfMzRfQVVEX01BU1RfQ0xLX05PTUlOQUxfSU5DLDMsCisJICJBdWRpbyBtYXN0ZXIgY2xvY2sgbm9taW5hbCBpbmNyZW1lbnQifSwKKwkvKiAweDM3IC0gUmVzZXJ2ZWQgKi8KKwl7Ul8zOF9DTEtfUkFUSU9fQU1YQ0xLX1RPX0FTQ0xLLDEsCisJICJDbG9jayByYXRpbyBBTVhDTEsgdG8gQVNDTEsifSwKKwl7Ul8zOV9DTEtfUkFUSU9fQVNDTEtfVE9fQUxSQ0xLLDEsCisJICJDbG9jayByYXRpbyBBU0NMSyB0byBBTFJDTEsifSwKKwl7Ul8zQV9BVURfQ0xLX0dFTl9CQVNJQ19TRVRVUCwxLAorCSAiQXVkaW8gY2xvY2sgZ2VuZXJhdG9yIGJhc2ljIHNldHVwIn0sCisJLyogMHgzYi0weDNmIC0gUmVzZXJ2ZWQgKi8KKworCS8qIEdlbmVyYWwgcHVycG9zZSBWQkkgZGF0YSBzbGljZXIgcGFydDogUl80MF9TTElDRVJfQ05UTF8xIHRvIDB4N2YgKi8KKwl7Ul80MF9TTElDRVJfQ05UTF8xLDEsCisJICJTbGljZXIgY29udHJvbCAxIn0sCisJe1JfNDFfTENSLDIzLAorCSAiUl80MV9MQ1IifSwKKwl7Ul81OF9QUk9HUkFNX0ZSQU1JTkdfQ09ERSwxLAorCSAiUHJvZ3JhbW1hYmxlIGZyYW1pbmcgY29kZSJ9LAorCXtSXzU5X0hfT0ZGX0ZPUl9TTElDRVIsMSwKKwkgIkhvcml6b250YWwgb2Zmc2V0IGZvciBzbGljZXIifSwKKwl7Ul81QV9WX09GRl9GT1JfU0xJQ0VSLDEsCisJICJWZXJ0aWNhbCBvZmZzZXQgZm9yIHNsaWNlciJ9LAorCXtSXzVCX0ZMRF9PRkZfQU5EX01TQl9GT1JfSF9BTkRfVl9PRkYsMSwKKwkgIkZpZWxkIG9mZnNldCBhbmQgTVNCcyBmb3IgaG9yaXpvbnRhbCBhbmQgdmVydGljYWwgb2Zmc2V0In0sCisJe1JfNURfRElELDEsCisJICJIZWFkZXIgYW5kIGRhdGEgaWRlbnRpZmljYXRpb24gKFJfNURfRElEKSJ9LAorCXtSXzVFX1NESUQsMSwKKwkgIlNsaWNlZCBkYXRhIGlkZW50aWZpY2F0aW9uIChSXzVFX1NESUQpIGNvZGUifSwKKwl7Ul82MF9TTElDRVJfU1RBVFVTX0JZVEVfMCwxLAorCSAiU2xpY2VyIHN0YXR1cyBieXRlIDAifSwKKwl7Ul82MV9TTElDRVJfU1RBVFVTX0JZVEVfMSwxLAorCSAiU2xpY2VyIHN0YXR1cyBieXRlIDEifSwKKwl7Ul82Ml9TTElDRVJfU1RBVFVTX0JZVEVfMiwxLAorCSAiU2xpY2VyIHN0YXR1cyBieXRlIDIifSwKKwkvKiAweDYzLTB4N2YgLSBSZXNlcnZlZCAqLworCisJLyogWCBwb3J0LCBJIHBvcnQgYW5kIHRoZSBzY2FsZXIgcGFydDogUl84MF9HTE9CQUxfQ05UTF8xIHRvIFJfRUZfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzExICovCisJLyogVGFzayBpbmRlcGVuZGVudCBnbG9iYWwgc2V0dGluZ3M6IFJfODBfR0xPQkFMX0NOVExfMSB0byBSXzhGX1NUQVRVU19JTkZPX1NDQUxFUiAqLworCXtSXzgwX0dMT0JBTF9DTlRMXzEsMSwKKwkgIkdsb2JhbCBjb250cm9sIDEifSwKKwl7Ul84MV9WX1NZTkNfRkxEX0lEX1NSQ19TRUxfQU5EX1JFVElNRURfVl9GLDEsCisJICJWZXJ0aWNhbCBzeW5jIGFuZCBGaWVsZCBJRCBzb3VyY2Ugc2VsZWN0aW9uLCByZXRpbWVkIFYgYW5kIEYgc2lnbmFscyJ9LAorCS8qIDB4ODIgLSBSZXNlcnZlZCAqLworCXtSXzgzX1hfUE9SVF9JX09fRU5BX0FORF9PVVRfQ0xLLDEsCisJICJYIHBvcnQgSS9PIGVuYWJsZSBhbmQgb3V0cHV0IGNsb2NrIn0sCisJe1JfODRfSV9QT1JUX1NJR05BTF9ERUYsMSwKKwkgIkkgcG9ydCBzaWduYWwgZGVmaW5pdGlvbnMifSwKKwl7Ul84NV9JX1BPUlRfU0lHTkFMX1BPTEFSLDEsCisJICJJIHBvcnQgc2lnbmFsIHBvbGFyaXRpZXMifSwKKwl7Ul84Nl9JX1BPUlRfRklGT19GTEFHX0NOVExfQU5EX0FSQklULDEsCisJICJJIHBvcnQgRklGTyBmbGFnIGNvbnRyb2wgYW5kIGFyYml0cmF0aW9uIn0sCisJe1JfODdfSV9QT1JUX0lfT19FTkFfT1VUX0NMS19BTkRfR0FURUQsICAxLAorCSAiSSBwb3J0IEkvTyBlbmFibGUgb3V0cHV0IGNsb2NrIGFuZCBnYXRlZCJ9LAorCXtSXzg4X1BPV0VSX1NBVkVfQURDX1BPUlRfQ05UTCwxLAorCSAiUG93ZXIgc2F2ZS9BREMgcG9ydCBjb250cm9sIn0sCisJLyogMDg5LTB4OGUgLSBSZXNlcnZlZCAqLworCXtSXzhGX1NUQVRVU19JTkZPX1NDQUxFUiwxLAorCSAiU3RhdHVzIGluZm9ybWF0aW9uIHNjYWxlciBwYXJ0In0sCisKKwkvKiBUYXNrIEEgZGVmaW5pdGlvbjogUl85MF9BX1RBU0tfSEFORExJTkdfQ05UTCB0byBSX0JGX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8xMSAqLworCS8qIFRhc2sgQTogQmFzaWMgc2V0dGluZ3MgYW5kIGFjcXVpc2l0aW9uIHdpbmRvdyBkZWZpbml0aW9uICovCisJe1JfOTBfQV9UQVNLX0hBTkRMSU5HX0NOVEwsMSwKKwkgIlRhc2sgQTogVGFzayBoYW5kbGluZyBjb250cm9sIn0sCisJe1JfOTFfQV9YX1BPUlRfRk9STUFUU19BTkRfQ09ORiwxLAorCSAiVGFzayBBOiBYIHBvcnQgZm9ybWF0cyBhbmQgY29uZmlndXJhdGlvbiJ9LAorCXtSXzkyX0FfWF9QT1JUX0lOUFVUX1JFRkVSRU5DRV9TSUdOQUwsMSwKKwkgIlRhc2sgQTogWCBwb3J0IGlucHV0IHJlZmVyZW5jZSBzaWduYWwgZGVmaW5pdGlvbiJ9LAorCXtSXzkzX0FfSV9QT1JUX09VVFBVVF9GT1JNQVRTX0FORF9DT05GLDEsCisJICJUYXNrIEE6IEkgcG9ydCBvdXRwdXQgZm9ybWF0cyBhbmQgY29uZmlndXJhdGlvbiJ9LAorCXtSXzk0X0FfSE9SSVpfSU5QVVRfV0lORE9XX1NUQVJULDIsCisJICJUYXNrIEE6IEhvcml6b250YWwgaW5wdXQgd2luZG93IHN0YXJ0In0sCisJe1JfOTZfQV9IT1JJWl9JTlBVVF9XSU5ET1dfTEVOR1RILDIsCisJICJUYXNrIEE6IEhvcml6b250YWwgaW5wdXQgd2luZG93IGxlbmd0aCJ9LAorCXtSXzk4X0FfVkVSVF9JTlBVVF9XSU5ET1dfU1RBUlQsMiwKKwkgIlRhc2sgQTogVmVydGljYWwgaW5wdXQgd2luZG93IHN0YXJ0In0sCisJe1JfOUFfQV9WRVJUX0lOUFVUX1dJTkRPV19MRU5HVEgsMiwKKwkgIlRhc2sgQTogVmVydGljYWwgaW5wdXQgd2luZG93IGxlbmd0aCJ9LAorCXtSXzlDX0FfSE9SSVpfT1VUUFVUX1dJTkRPV19MRU5HVEgsMiwKKwkgIlRhc2sgQTogSG9yaXpvbnRhbCBvdXRwdXQgd2luZG93IGxlbmd0aCJ9LAorCXtSXzlFX0FfVkVSVF9PVVRQVVRfV0lORE9XX0xFTkdUSCwyLAorCSAiVGFzayBBOiBWZXJ0aWNhbCBvdXRwdXQgd2luZG93IGxlbmd0aCJ9LAorCisJLyogVGFzayBBOiBGSVIgZmlsdGVyaW5nIGFuZCBwcmVzY2FsaW5nICovCisJe1JfQTBfQV9IT1JJWl9QUkVTQ0FMSU5HLDEsCisJICJUYXNrIEE6IEhvcml6b250YWwgcHJlc2NhbGluZyJ9LAorCXtSX0ExX0FfQUNDVU1VTEFUSU9OX0xFTkdUSCwxLAorCSAiVGFzayBBOiBBY2N1bXVsYXRpb24gbGVuZ3RoIn0sCisJe1JfQTJfQV9QUkVTQ0FMRVJfRENfR0FJTl9BTkRfRklSX1BSRUZJTFRFUiwxLAorCSAiVGFzayBBOiBQcmVzY2FsZXIgREMgZ2FpbiBhbmQgRklSIHByZWZpbHRlciJ9LAorCS8qIDB4YTMgLSBSZXNlcnZlZCAqLworCXtSX0E0X0FfTFVNQV9CUklHSFRORVNTX0NOVEwsMSwKKwkgIlRhc2sgQTogTHVtaW5hbmNlIGJyaWdodG5lc3MgY29udHJvbCJ9LAorCXtSX0E1X0FfTFVNQV9DT05UUkFTVF9DTlRMLDEsCisJICJUYXNrIEE6IEx1bWluYW5jZSBjb250cmFzdCBjb250cm9sIn0sCisJe1JfQTZfQV9DSFJPTUFfU0FUVVJBVElPTl9DTlRMLDEsCisJICJUYXNrIEE6IENocm9taW5hbmNlIHNhdHVyYXRpb24gY29udHJvbCJ9LAorCS8qIDB4YTcgLSBSZXNlcnZlZCAqLworCisJLyogVGFzayBBOiBIb3Jpem9udGFsIHBoYXNlIHNjYWxpbmcgKi8KKwl7Ul9BOF9BX0hPUklaX0xVTUFfU0NBTElOR19JTkMsMiwKKwkgIlRhc2sgQTogSG9yaXpvbnRhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQifSwKKwl7Ul9BQV9BX0hPUklaX0xVTUFfUEhBU0VfT0ZGLDEsCisJICJUYXNrIEE6IEhvcml6b250YWwgbHVtaW5hbmNlIHBoYXNlIG9mZnNldCJ9LAorCS8qIDB4YWIgLSBSZXNlcnZlZCAqLworCXtSX0FDX0FfSE9SSVpfQ0hST01BX1NDQUxJTkdfSU5DLDIsCisJICJUYXNrIEE6IEhvcml6b250YWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQifSwKKwl7Ul9BRV9BX0hPUklaX0NIUk9NQV9QSEFTRV9PRkYsMSwKKwkgIlRhc2sgQTogSG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQifSwKKwkvKiAweGFmIC0gUmVzZXJ2ZWQgKi8KKworCS8qIFRhc2sgQTogVmVydGljYWwgc2NhbGluZyAqLworCXtSX0IwX0FfVkVSVF9MVU1BX1NDQUxJTkdfSU5DLDIsCisJICJUYXNrIEE6IFZlcnRpY2FsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudCJ9LAorCXtSX0IyX0FfVkVSVF9DSFJPTUFfU0NBTElOR19JTkMsMiwKKwkgIlRhc2sgQTogVmVydGljYWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQifSwKKwl7Ul9CNF9BX1ZFUlRfU0NBTElOR19NT0RFX0NOVEwsMSwKKwkgIlRhc2sgQTogVmVydGljYWwgc2NhbGluZyBtb2RlIGNvbnRyb2wifSwKKwkvKiAweGI1LTB4YjcgLSBSZXNlcnZlZCAqLworCXtSX0I4X0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzAwLDEsCisJICJUYXNrIEE6IFZlcnRpY2FsIGNocm9taW5hbmNlIHBoYXNlIG9mZnNldCAnMDAnIn0sCisJe1JfQjlfQV9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMDEsMSwKKwkgIlRhc2sgQTogVmVydGljYWwgY2hyb21pbmFuY2UgcGhhc2Ugb2Zmc2V0ICcwMScifSwKKwl7Ul9CQV9BX1ZFUlRfQ0hST01BX1BIQVNFX09GRl8xMCwxLAorCSAiVGFzayBBOiBWZXJ0aWNhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQgJzEwJyJ9LAorCXtSX0JCX0FfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzExLDEsCisJICJUYXNrIEE6IFZlcnRpY2FsIGNocm9taW5hbmNlIHBoYXNlIG9mZnNldCAnMTEnIn0sCisJe1JfQkNfQV9WRVJUX0xVTUFfUEhBU0VfT0ZGXzAwLDEsCisJICJUYXNrIEE6IFZlcnRpY2FsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQgJzAwJyJ9LAorCXtSX0JEX0FfVkVSVF9MVU1BX1BIQVNFX09GRl8wMSwxLAorCSAiVGFzayBBOiBWZXJ0aWNhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0ICcwMScifSwKKwl7Ul9CRV9BX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMTAsMSwKKwkgIlRhc2sgQTogVmVydGljYWwgbHVtaW5hbmNlIHBoYXNlIG9mZnNldCAnMTAnIn0sCisJe1JfQkZfQV9WRVJUX0xVTUFfUEhBU0VfT0ZGXzExLDEsCisJICJUYXNrIEE6IFZlcnRpY2FsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQgJzExJyJ9LAorCisJLyogVGFzayBCIGRlZmluaXRpb246IFJfQzBfQl9UQVNLX0hBTkRMSU5HX0NOVEwgdG8gUl9FRl9CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMTEgKi8KKwkvKiBUYXNrIEI6IEJhc2ljIHNldHRpbmdzIGFuZCBhY3F1aXNpdGlvbiB3aW5kb3cgZGVmaW5pdGlvbiAqLworCXtSX0MwX0JfVEFTS19IQU5ETElOR19DTlRMLDEsCisJICJUYXNrIEI6IFRhc2sgaGFuZGxpbmcgY29udHJvbCJ9LAorCXtSX0MxX0JfWF9QT1JUX0ZPUk1BVFNfQU5EX0NPTkYsMSwKKwkgIlRhc2sgQjogWCBwb3J0IGZvcm1hdHMgYW5kIGNvbmZpZ3VyYXRpb24ifSwKKwl7Ul9DMl9CX0lOUFVUX1JFRkVSRU5DRV9TSUdOQUxfREVGSU5JVElPTiwxLAorCSAiVGFzayBCOiBJbnB1dCByZWZlcmVuY2Ugc2lnbmFsIGRlZmluaXRpb24ifSwKKwl7Ul9DM19CX0lfUE9SVF9GT1JNQVRTX0FORF9DT05GLDEsCisJICJUYXNrIEI6IEkgcG9ydCBmb3JtYXRzIGFuZCBjb25maWd1cmF0aW9uIn0sCisJe1JfQzRfQl9IT1JJWl9JTlBVVF9XSU5ET1dfU1RBUlQsMiwKKwkgIlRhc2sgQjogSG9yaXpvbnRhbCBpbnB1dCB3aW5kb3cgc3RhcnQifSwKKwl7Ul9DNl9CX0hPUklaX0lOUFVUX1dJTkRPV19MRU5HVEgsMiwKKwkgIlRhc2sgQjogSG9yaXpvbnRhbCBpbnB1dCB3aW5kb3cgbGVuZ3RoIn0sCisJe1JfQzhfQl9WRVJUX0lOUFVUX1dJTkRPV19TVEFSVCwyLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBpbnB1dCB3aW5kb3cgc3RhcnQifSwKKwl7Ul9DQV9CX1ZFUlRfSU5QVVRfV0lORE9XX0xFTkdUSCwyLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBpbnB1dCB3aW5kb3cgbGVuZ3RoIn0sCisJe1JfQ0NfQl9IT1JJWl9PVVRQVVRfV0lORE9XX0xFTkdUSCwyLAorCSAiVGFzayBCOiBIb3Jpem9udGFsIG91dHB1dCB3aW5kb3cgbGVuZ3RoIn0sCisJe1JfQ0VfQl9WRVJUX09VVFBVVF9XSU5ET1dfTEVOR1RILDIsCisJICJUYXNrIEI6IFZlcnRpY2FsIG91dHB1dCB3aW5kb3cgbGVuZ3RoIn0sCisKKwkvKiBUYXNrIEI6IEZJUiBmaWx0ZXJpbmcgYW5kIHByZXNjYWxpbmcgKi8KKwl7Ul9EMF9CX0hPUklaX1BSRVNDQUxJTkcsMSwKKwkgIlRhc2sgQjogSG9yaXpvbnRhbCBwcmVzY2FsaW5nIn0sCisJe1JfRDFfQl9BQ0NVTVVMQVRJT05fTEVOR1RILDEsCisJICJUYXNrIEI6IEFjY3VtdWxhdGlvbiBsZW5ndGgifSwKKwl7Ul9EMl9CX1BSRVNDQUxFUl9EQ19HQUlOX0FORF9GSVJfUFJFRklMVEVSLDEsCisJICJUYXNrIEI6IFByZXNjYWxlciBEQyBnYWluIGFuZCBGSVIgcHJlZmlsdGVyIn0sCisJLyogMHhkMyAtIFJlc2VydmVkICovCisJe1JfRDRfQl9MVU1BX0JSSUdIVE5FU1NfQ05UTCwxLAorCSAiVGFzayBCOiBMdW1pbmFuY2UgYnJpZ2h0bmVzcyBjb250cm9sIn0sCisJe1JfRDVfQl9MVU1BX0NPTlRSQVNUX0NOVEwsMSwKKwkgIlRhc2sgQjogTHVtaW5hbmNlIGNvbnRyYXN0IGNvbnRyb2wifSwKKwl7Ul9ENl9CX0NIUk9NQV9TQVRVUkFUSU9OX0NOVEwsMSwKKwkgIlRhc2sgQjogQ2hyb21pbmFuY2Ugc2F0dXJhdGlvbiBjb250cm9sIn0sCisJLyogMHhkNyAtIFJlc2VydmVkICovCisKKwkvKiBUYXNrIEI6IEhvcml6b250YWwgcGhhc2Ugc2NhbGluZyAqLworCXtSX0Q4X0JfSE9SSVpfTFVNQV9TQ0FMSU5HX0lOQywyLAorCSAiVGFzayBCOiBIb3Jpem9udGFsIGx1bWluYW5jZSBzY2FsaW5nIGluY3JlbWVudCJ9LAorCXtSX0RBX0JfSE9SSVpfTFVNQV9QSEFTRV9PRkYsMSwKKwkgIlRhc2sgQjogSG9yaXpvbnRhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0In0sCisJLyogMHhkYiAtIFJlc2VydmVkICovCisJe1JfRENfQl9IT1JJWl9DSFJPTUFfU0NBTElORywyLAorCSAiVGFzayBCOiBIb3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcifSwKKwl7Ul9ERV9CX0hPUklaX1BIQVNFX09GRlNFVF9DUkhPTUEsMSwKKwkgIlRhc2sgQjogSG9yaXpvbnRhbCBQaGFzZSBPZmZzZXQgQ2hyb21hIn0sCisJLyogMHhkZiAtIFJlc2VydmVkICovCisKKwkvKiBUYXNrIEI6IFZlcnRpY2FsIHNjYWxpbmcgKi8KKwl7Ul9FMF9CX1ZFUlRfTFVNQV9TQ0FMSU5HX0lOQywyLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQifSwKKwl7Ul9FMl9CX1ZFUlRfQ0hST01BX1NDQUxJTkdfSU5DLDIsCisJICJUYXNrIEI6IFZlcnRpY2FsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50In0sCisJe1JfRTRfQl9WRVJUX1NDQUxJTkdfTU9ERV9DTlRMLDEsCisJICJUYXNrIEI6IFZlcnRpY2FsIHNjYWxpbmcgbW9kZSBjb250cm9sIn0sCisJLyogMHhlNS0weGU3IC0gUmVzZXJ2ZWQgKi8KKwl7Ul9FOF9CX1ZFUlRfQ0hST01BX1BIQVNFX09GRl8wMCwxLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQgJzAwJyJ9LAorCXtSX0U5X0JfVkVSVF9DSFJPTUFfUEhBU0VfT0ZGXzAxLDEsCisJICJUYXNrIEI6IFZlcnRpY2FsIGNocm9taW5hbmNlIHBoYXNlIG9mZnNldCAnMDEnIn0sCisJe1JfRUFfQl9WRVJUX0NIUk9NQV9QSEFTRV9PRkZfMTAsMSwKKwkgIlRhc2sgQjogVmVydGljYWwgY2hyb21pbmFuY2UgcGhhc2Ugb2Zmc2V0ICcxMCcifSwKKwl7Ul9FQl9CX1ZFUlRfQ0hST01BX1BIQVNFX09GRl8xMSwxLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQgJzExJyJ9LAorCXtSX0VDX0JfVkVSVF9MVU1BX1BIQVNFX09GRl8wMCwxLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0ICcwMCcifSwKKwl7Ul9FRF9CX1ZFUlRfTFVNQV9QSEFTRV9PRkZfMDEsMSwKKwkgIlRhc2sgQjogVmVydGljYWwgbHVtaW5hbmNlIHBoYXNlIG9mZnNldCAnMDEnIn0sCisJe1JfRUVfQl9WRVJUX0xVTUFfUEhBU0VfT0ZGXzEwLDEsCisJICJUYXNrIEI6IFZlcnRpY2FsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQgJzEwJyJ9LAorCXtSX0VGX0JfVkVSVF9MVU1BX1BIQVNFX09GRl8xMSwxLAorCSAiVGFzayBCOiBWZXJ0aWNhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0ICcxMScifSwKKworCS8qIHNlY29uZCBQTEwgKFBMTDIpIGFuZCBQdWxzZWdlbmVyYXRvciBQcm9ncmFtbWluZyAqLworCXsgUl9GMF9MRkNPX1BFUl9MSU5FLCAxLAorCSAgIkxGQ08ncyBwZXIgbGluZSJ9LAorCXsgUl9GMV9QX0lfUEFSQU1fU0VMRUNULDEsCisJICAiUC0vSS0gUGFyYW0uIFNlbGVjdC4sIFBMTCBNb2RlLCBQTEwgSC1TcmMuLCBMRkNPJ3MgcGVyIGxpbmUifSwKKwl7IFJfRjJfTk9NSU5BTF9QTEwyX0RUTywxLAorCSAiTm9taW5hbCBQTEwyIERUTyJ9LAorCXtSX0YzX1BMTF9JTkNSRU1FTlQsMSwKKwkgIlBMTDIgSW5jcmVtZW50In0sCisJe1JfRjRfUExMMl9TVEFUVVMsMSwKKwkgIlBMTDIgU3RhdHVzIn0sCisJe1JfRjVfUFVMU0dFTl9MSU5FX0xFTkdUSCwxLAorCSAiUHVsc2dlbi4gbGluZSBsZW5ndGgifSwKKwl7Ul9GNl9QVUxTRV9BX1BPU19MU0JfQU5EX1BVTFNFR0VOX0NPTkZJRywxLAorCSAiUHVsc2UgQSBQb3NpdGlvbiwgUHVsc2dlbiBSZXN5bmMuLCBQdWxzZ2VuLiBILVNyYy4sIFB1bHNnZW4uIGxpbmUgbGVuZ3RoIn0sCisJe1JfRjdfUFVMU0VfQV9QT1NfTVNCLDEsCisJICJQdWxzZSBBIFBvc2l0aW9uIn0sCisJe1JfRjhfUFVMU0VfQl9QT1MsMiwKKwkgIlB1bHNlIEIgUG9zaXRpb24ifSwKKwl7Ul9GQV9QVUxTRV9DX1BPUywyLAorCSAiUHVsc2UgQyBQb3NpdGlvbiJ9LAorCS8qIDB4ZmMgdG8gMHhmZSAtIFJlc2VydmVkICovCisJe1JfRkZfU19QTExfTUFYX1BIQVNFX0VSUl9USFJFU0hfTlVNX0xJTkVTLDEsCisJICJTX1BMTCBtYXguIHBoYXNlLCBlcnJvciB0aHJlc2hvbGQsIFBMTDIgbm8uIG9mIGxpbmVzLCB0aHJlc2hvbGQifSwKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKaW5kZXggZjU1NDMxNi4uNTlkYTc5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKQEAgLTQxLDUzICs0MSwxNSBAQAogCXNlbGVjdCBWSURFT19CVUZfRFZCCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBEVkJfUExMCisJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVERBMTAwNFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX05YVDIwMFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1REQTEwMDg2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9UREE4MjZYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgogCiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTM0LWR2Yi4KLQotCSAgWW91IG11c3QgYWxzbyBzZWxlY3Qgb25lIG9yIG1vcmUgRFZCIGRlbW9kdWxhdG9ycy4KLQkgIElmIHlvdSBhcmUgdW5zdXJlIHdoaWNoIHlvdSBuZWVkLCBjaG9vc2UgYWxsIG9mIHRoZW0uCi0KLWNvbmZpZyBWSURFT19TQUE3MTM0X0RWQl9BTExfRlJPTlRFTkRTCi0JYm9vbCAiQnVpbGQgYWxsIHN1cHBvcnRlZCBmcm9udGVuZHMgZm9yIHNhYTcxMzQgYmFzZWQgVFYgY2FyZHMiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0X0RWQgotCXNlbGVjdCBEVkJfTVQzNTIKLQlzZWxlY3QgRFZCX1REQTEwMDRYCi0Jc2VsZWN0IERWQl9OWFQyMDBYCi0JLS0taGVscC0tLQotCSAgVGhpcyBidWlsZHMgc2FhNzEzNC1kdmIgd2l0aCBhbGwgY3VycmVudGx5IHN1cHBvcnRlZCBmcm9udGVuZAotCSAgZGVtb2R1bGF0b3JzLiAgSWYgeW91IHdpc2ggdG8gdHdlYWsgeW91ciBjb25maWd1cmF0aW9uLCBhbmQKLQkgIG9ubHkgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUgdGhhdCB5b3UgbmVlZCwgY2hvb3NlIE4gaGVyZS4KLQotCSAgSWYgeW91IGFyZSB1bnN1cmUsIGNob29zZSBZLgotCi1jb25maWcgVklERU9fU0FBNzEzNF9EVkJfTVQzNTIKLQlib29sICJaYXJsaW5rIE1UMzUyIERWQi1UIFN1cHBvcnQiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0X0RWQiAmJiAhVklERU9fU0FBNzEzNF9EVkJfQUxMX0ZST05URU5EUwotCXNlbGVjdCBEVkJfTVQzNTIKLQktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgRFZCLVQgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBQaGlsaXBzIHNhYTcxMzQgY2hpcCBhbmQgdGhlIE1UMzUyIGRlbW9kdWxhdG9yLgotCi1jb25maWcgVklERU9fU0FBNzEzNF9EVkJfVERBMTAwNFgKLQlib29sICJQaGlsbGlwcyBUREExMDA0NUgvVERBMTAwNDZIIERWQi1UIFN1cHBvcnQiCi0JZGVmYXVsdCB5Ci0JZGVwZW5kcyBvbiBWSURFT19TQUE3MTM0X0RWQiAmJiAhVklERU9fU0FBNzEzNF9EVkJfQUxMX0ZST05URU5EUwotCXNlbGVjdCBEVkJfVERBMTAwNFgKLQktLS1oZWxwLS0tCi0JICBUaGlzIGFkZHMgRFZCLVQgc3VwcG9ydCBmb3IgY2FyZHMgYmFzZWQgb24gdGhlCi0JICBQaGlsaXBzIHNhYTcxMzQgY2hpcCBhbmQgdGhlIFREQTEwMDQ1SC9UREExMDA0NkggZGVtb2R1bGF0b3IuCi0KLWNvbmZpZyBWSURFT19TQUE3MTM0X0RWQl9OWFQyMDBYCi0JYm9vbCAiTlhUMjAwMi9OWFQyMDA0IEFUU0MgU3VwcG9ydCIKLQlkZWZhdWx0IHkKLQlkZXBlbmRzIG9uIFZJREVPX1NBQTcxMzRfRFZCICYmICFWSURFT19TQUE3MTM0X0RWQl9BTExfRlJPTlRFTkRTCi0Jc2VsZWN0IERWQl9OWFQyMDBYCi0JLS0taGVscC0tLQotCSAgVGhpcyBhZGRzIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHN1cHBvcnQgZm9yIGNhcmRzIGJhc2VkIG9uIHRoZQotCSAgUGhpbGlwcyBzYWE3MTM0IGNoaXAgYW5kIHRoZSBOWFQyMDAyL05YVDIwMDQgZGVtb2R1bGF0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvTWFrZWZpbGUKaW5kZXggYmU3YjllZS4uODlhMTU2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9NYWtlZmlsZQpAQCAtMTYsOCArMTYsNSBAQAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzCiAKIGV4dHJhLWNmbGFncy0kKENPTkZJR19WSURFT19CVUZfRFZCKSArPSAtREhBVkVfVklERU9fQlVGX0RWQj0xCi1leHRyYS1jZmxhZ3MtJChDT05GSUdfRFZCX01UMzUyKSAgICAgKz0gLURIQVZFX01UMzUyPTEKLWV4dHJhLWNmbGFncy0kKENPTkZJR19EVkJfVERBMTAwNFgpICArPSAtREhBVkVfVERBMTAwNFg9MQotZXh0cmEtY2ZsYWdzLSQoQ09ORklHX0RWQl9OWFQyMDBYKSAgICs9IC1ESEFWRV9OWFQyMDBYPTEKIAogRVhUUkFfQ0ZMQUdTICs9ICQoZXh0cmEtY2ZsYWdzLXkpICQoZXh0cmEtY2ZsYWdzLW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1hbHNhLmMKaW5kZXggZDczY2ZmMS4uYTM5ZTAxMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtYWxzYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWFsc2EuYwpAQCAtNTkwLDYgKzU5MCwxMSBAQAogCiBzdGF0aWMgaW50IHNuZF9jYXJkX3NhYTcxMzRfY2FwdHVyZV9jbG9zZShzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKiBzdWJzdHJlYW0pCiB7CisJc25kX2NhcmRfc2FhNzEzNF90ICpzYWE3MTM0ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gc2FhNzEzNC0+ZGV2OworCisJZGV2LT5jdGxfbXV0ZSA9IDE7CisJc2FhNzEzNF90dmF1ZGlvX3NldG11dGUoZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjMxLDYgKzYzNiw5IEBACiAJcnVudGltZS0+cHJpdmF0ZV9mcmVlID0gc25kX2NhcmRfc2FhNzEzNF9ydW50aW1lX2ZyZWU7CiAJcnVudGltZS0+aHcgPSBzbmRfY2FyZF9zYWE3MTM0X2NhcHR1cmU7CiAKKwlkZXYtPmN0bF9tdXRlID0gMDsKKwlzYWE3MTM0X3R2YXVkaW9fc2V0bXV0ZShkZXYpOworCiAJaWYgKChlcnIgPSBzbmRfcGNtX2h3X2NvbnN0cmFpbnRfaW50ZWdlcihydW50aW1lLCBTTkRSVl9QQ01fSFdfUEFSQU1fUEVSSU9EUykpIDwgMCkKIAkJcmV0dXJuIGVycjsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKaW5kZXggOTI3NDEzYS4uYWExZGI1MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCkBAIC0xOTExLDcgKzE5MTEsNyBAQAogCQl9LAogCX0sCiAJW1NBQTcxMzRfQk9BUkRfRkxZRFZCVF9EVU9fQ0FSREJVU10gPSB7Ci0JCS5uYW1lCQk9ICJMaWZlVmlldy9UeXBob29uIEZseURWQi1UIER1byBDYXJkYnVzIiwKKwkJLm5hbWUJCT0gIkxpZmVWaWV3L1R5cGhvb24vR2VuaXVzIEZseURWQi1UIER1byBDYXJkYnVzIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDIwMDAwMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKQEAgLTI4OTEsNiArMjg5MSw4MCBAQAogCQkJLmdwaW8gPSAweDgwMDAsCiAJCX0sCiAJfSwKKwlbU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURST10gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJNZWRpb24gTWQ4ODAwIFF1YWRybyIsCisJCS5hdWRpb19jbG9jayAgICA9IDB4MDAxODdkZTcsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfVERBODI5MCwKKwkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5tcGVnICAgICAgICAgICA9IFNBQTcxMzRfTVBFR19EVkIsCisJCS5pbnB1dHMgPSB7eworCQkJLm5hbWUgICA9IG5hbWVfdHYsCisJCQkudm11eCAgID0gMSwKKwkJCS5hbXV4ICAgPSBUViwKKwkJCS50diAgICAgPSAxLAorCQl9LHsKKwkJCS5uYW1lICAgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggICA9IDAsCisJCQkuYW11eCAgID0gTElORTIsCisJCX0seworCQkJLm5hbWUgICA9IG5hbWVfc3ZpZGVvLAorCQkJLnZtdXggICA9IDgsCisJCQkuYW11eCAgID0gTElORTIsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMF0gPSB7CisJCS8qIExpZmVWaWV3IEZseURWQi1zICovCisJCS8qIElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AdHV0LmJ5PiAqLworCQkubmFtZSAgICAgICAgICAgPSAiTGlmZVZpZXcgRmx5RFZCLVMgL0Fjb3JwIFRWMTM0RFMiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMjAwMDAwLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCisJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwJLyogQ29tcG9zaXRlIGlucHV0ICovCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUxLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCS8qIFMtVmlkZW8gc2lnbmFsIG9uIFMtVmlkZW8gaW5wdXQgKi8KKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX19LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfUFJPVEVVU18yMzA5XSA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIlByb3RldXMgUHJvIDIzMDkiLAorCQkuYXVkaW9fY2xvY2sgICAgPSAweDAwMTg3ZGU3LAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfRk0xMjE2TUVfTUszLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAorCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gTElORTIsCisJCQkudHYgICA9IDEsCisJCX0seworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAwLAorCQkJLmFtdXggPSBMSU5FMiwKKwkJfSx7CisJCQkubmFtZSA9IG5hbWVfY29tcDIsCisJCQkudm11eCA9IDMsCisJCQkuYW11eCA9IExJTkUyLAorCQl9LHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUyLAorCQl9fSwKKwkJLm11dGUgPSB7CisJCQkubmFtZSA9IG5hbWVfbXV0ZSwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sCisJfSwKIH07CiAKIGNvbnN0IHVuc2lnbmVkIGludCBzYWE3MTM0X2Jjb3VudCA9IEFSUkFZX1NJWkUoc2FhNzEzNF9ib2FyZHMpOwpAQCAtMzM3NSw3ICszNDQ5LDcgQEAKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCX1RSSU8sCiAJfSx7CiAJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCi0JCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwJLyogU0FBIDcxMzFFICovCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKIAkJLnN1YnZlbmRvciAgICA9IDB4MTQ2MSwKIAkJLnN1YmRldmljZSAgICA9IDB4MmMwNSwKIAkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NywKQEAgLTM0MjIsNiArMzQ5NiwxOCBAQAogCQkuc3ViZGV2aWNlICAgID0gMHgwMDA1LAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9NRDcxMzRfQlJJREdFXzIsCiAJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKKwkJLnN1YnZlbmRvciAgICA9IDB4NTE2OCwKKwkJLnN1YmRldmljZSAgICA9IDB4MDMwMCwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfRkxZRFZCU19MUjMwMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LAorCQkuc3VidmVuZG9yICAgID0gMHg0ZTQyLAorCQkuc3ViZGV2aWNlICAgID0gMHgwMzAwLC8qIExSMzAwICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDAsCisJfSx7CiAJCS52ZW5kb3IgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCiAJCS5kZXZpY2UgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzNCwKIAkJLnN1YnZlbmRvciA9IDB4MTQ4OSwKQEAgLTM0NDYsNiArMzUzMiwzNiBAQAogCQkuc3ViZGV2aWNlICAgID0gMHgzNTAyLCAgLyogd2hhdHMgdGhlIGRpZmZlcmVuY2UgdG8gMHgzMzA2ID8qLwogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTLAogCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE2YmUsCisJCS5zdWJkZXZpY2UgICAgPSAweDAwMDcsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01FRElPTl9NRDg4MDBfUVVBRFJPLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE2YmUsCisJCS5zdWJkZXZpY2UgICAgPSAweDAwMDgsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX01FRElPTl9NRDg4MDBfUVVBRFJPLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDE0NjEsCisJCS5zdWJkZXZpY2UgICAgPSAweDJjMDUsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV83NzcsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MTQ4OSwKKwkJLnN1YmRldmljZSAgICA9IDB4MDUwMiwgICAgICAgICAgICAgICAgLyogQ2FyZGJ1cyB2ZXJzaW9uICovCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfRFVPX0NBUkRCVVMsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCwKKwkJLnN1YnZlbmRvciAgICA9IDB4MDkxOSwgLyogUGhpbGlwcyBQcm90ZXVzIFBSTyAyMzA5ICovCisJCS5zdWJkZXZpY2UgICAgPSAweDIwMDMsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOSwKKwl9LHsKIAkJLyogLS0tIGJvYXJkcyB3aXRob3V0IGVlcHJvbSArIHN1YnN5c3RlbSBJRCAtLS0gKi8KIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTM0LApAQCAtMzU0OCw2ICszNjY0LDEyIEBACiAJY2FzZSBTQUE3MTM0X0JPQVJEX1NFRE5BX1BDX1RWX0NBUkRCVVM6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlREVU86CisJY2FzZSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOToKKwkJZGV2LT5oYXNfcmVtb3RlID0gU0FBNzEzNF9SRU1PVEVfR1BJTzsKKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDA6CisJCXNhYV93cml0ZWIoU0FBNzEzNF9HUElPX0dQTU9ERTMsIDB4ODApOworCQlzYWFfd3JpdGViKFNBQTcxMzRfR1BJT19HUFNUQVRVUzIsIDB4NDApOwogCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9HUElPOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ1MDQ0OgpAQCAtMzczMiw2ICszODU0LDcgQEAKIAljYXNlIFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUjoKIAljYXNlIFNBQTcxMzRfQk9BUkRfVEVWSU9OX0RWQlRfMjIwUkY6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfRFVBTDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfTUVESU9OX01EODgwMF9RVUFEUk86CiAJCS8qIHRoaXMgaXMgYSBoeWJyaWQgYm9hcmQsIGluaXRpYWxpemUgdG8gYW5hbG9nIG1vZGUKIAkJICogYW5kIGNvbmZpZ3VyZSBmaXJtd2FyZSBlZXByb20gYWRkcmVzcwogCQkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCBiZTNhODFmLi4wOWFhNjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC04NDMsNyArODQzLDcgQEAKIAkJCWxhdGVuY3kgPSAweDBBOwogCQl9CiAjZW5kaWYKLQkJaWYgKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfRkFJTCkgeworCQlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTCkpIHsKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBxdWlyazogdGhpcyBkcml2ZXIgYW5kIHlvdXIgIgogCQkJCQkiY2hpcHNldCBtYXkgbm90IHdvcmsgdG9nZXRoZXIiCiAJCQkJCSIgaW4gb3ZlcmxheSBtb2RlLlxuIixkZXYtPm5hbWUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwppbmRleCAyNzk4MjhiLi5iNjg4MTU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1kdmIuYwpAQCAtMzQsMTcgKzM0LDE0IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlICJkdmItcGxsLmgiCiAKLSNpZmRlZiBIQVZFX01UMzUyCi0jIGluY2x1ZGUgIm10MzUyLmgiCi0jIGluY2x1ZGUgIm10MzUyX3ByaXYuaCIgLyogRklYTUUgKi8KLSNlbmRpZgotI2lmZGVmIEhBVkVfVERBMTAwNFgKLSMgaW5jbHVkZSAidGRhMTAwNHguaCIKLSNlbmRpZgotI2lmZGVmIEhBVkVfTlhUMjAwWAotIyBpbmNsdWRlICJueHQyMDB4LmgiCi0jZW5kaWYKKyNpbmNsdWRlICJtdDM1Mi5oIgorI2luY2x1ZGUgIm10MzUyX3ByaXYuaCIgLyogRklYTUUgKi8KKyNpbmNsdWRlICJ0ZGExMDA0eC5oIgorI2luY2x1ZGUgIm54dDIwMHguaCIKIAorI2luY2x1ZGUgInRkYTEwMDg2LmgiCisjaW5jbHVkZSAidGRhODI2eC5oIgorI2luY2x1ZGUgImlzbDY0MjEuaCIKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIApAQCAtNTQsOCArNTEsNiBAQAogTU9EVUxFX1BBUk1fREVTQyhhbnRlbm5hX3B3ciwiZW5hYmxlIGFudGVubmEgcG93ZXIgKFBpbm5hY2xlIDMwMGkpIik7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jaWZkZWYgSEFWRV9NVDM1Mgogc3RhdGljIGludCBwaW5uYWNsZV9hbnRlbm5hX3B3cihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IG9uKQogewogCXUzMiBvazsKQEAgLTE4NSwxMiArMTgwLDggQEAKIAkuZGVtb2RfYWRkcmVzcyA9IDB4ZiwKIAkuZGVtb2RfaW5pdCAgICA9IG10MzUyX2F2ZXI3NzdfaW5pdCwKIH07Ci0jZW5kaWYKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLSNpZmRlZiBIQVZFX1REQTEwMDRYCi0KIHN0YXRpYyBpbnQgcGhpbGlwc190ZGE2NjUxX3BsbF9zZXQodTggYWRkciwgc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmUtPmR2Yi0+cHJpdjsKQEAgLTk2OSwxMSArOTYwLDU4IEBACiAJLnJlcXVlc3RfZmlybXdhcmUgPSBOVUxMLAogfTsKIAotI2VuZGlmCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBtZDg4MDBfZHZidF9hbmFsb2dfbW9kZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IGRhdGFbXSA9IHsgMHgzYywgMHgzMywgMHg2OH07CisJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyPTB4MDgsIC5mbGFncz0wLCAuYnVmPWRhdGEsIC5sZW4gPSBzaXplb2YoZGF0YSl9OworCisJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlwaGlsaXBzX3RkYTgyN3hhX3R1bmVyX3NsZWVwKCAweDYxLCBmZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbWQ4ODAwX2R2YnRfcGxsX3NldChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbXMpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZlLT5kdmItPnByaXY7CisJc3RhdGljIHU4IHRkYTgyOTBfY2xvc2VbXSA9IHsgMHgyMSwgMHhjMH07CisJc3RhdGljIHU4IHRkYTgyOTBfb3BlbltdICA9IHsgMHgyMSwgMHg4MH07CisJc3RydWN0IGkyY19tc2cgdGRhODI5MF9tc2cgPSB7LmFkZHIgPSAweDRiLC5mbGFncyA9IDAsIC5sZW4gPSAyfTsKKwkvKiBjbG9zZSB0ZGE4MjkwIGkyYyBicmlkZ2UgKi8KKwl0ZGE4MjkwX21zZy5idWYgPSB0ZGE4MjkwX2Nsb3NlOworCXJldCA9IGkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJnRkYTgyOTBfbXNnLCAxKTsKKwlpZiAocmV0ICE9IDEpCisJCXJldHVybiAtRUlPOworCW1zbGVlcCgyMCk7CisJcmV0ID0gcGhpbGlwc190ZGE4Mjd4YV9wbGxfc2V0KDB4NjAsIGZlLCBwYXJhbXMpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKwkvKiBvcGVuIHRkYTgyOTAgaTJjIGJyaWRnZSAqLworCXRkYTgyOTBfbXNnLmJ1ZiA9IHRkYTgyOTBfb3BlbjsKKwlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZ0ZGE4MjkwX21zZywgMSk7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB0ZGExMDA0eF9jb25maWcgbWQ4ODAwX2R2YnRfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwOCwKKwkuaW52ZXJ0ICAgICAgICA9IDEsCisJLmludmVydF9vY2xrICAgPSAwLAorCS54dGFsX2ZyZXEgICAgID0gVERBMTAwNDZfWFRBTF8xNk0sCisJLmFnY19jb25maWcgICAgPSBUREExMDA0Nl9BR0NfVERBODI3WCwKKwkuaWZfZnJlcSAgICAgICA9IFREQTEwMDQ2X0ZSRVFfMDQ1LAorCS5yZXF1ZXN0X2Zpcm13YXJlID0gTlVMTCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdGRhMTAwODZfY29uZmlnIGZseWR2YnMgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDBlLAorCS5pbnZlcnQgPSAwLAorfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNpZmRlZiBIQVZFX05YVDIwMFgKIHN0YXRpYyBzdHJ1Y3Qgbnh0MjAweF9jb25maWcgYXZlcnR2aGRhMTgwID0gewogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKIH07CkBAIC05OTEsNyArMTAyOSw2IEBACiAJLmRlbW9kX2FkZHJlc3MgICAgPSAweDBhLAogCS5zZXRfcGxsX2lucHV0ICAgID0gbnh0MjAweF9zZXRfcGxsX2lucHV0LAogfTsKLSNlbmRpZgogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTAwOSwyOSArMTA0NiwyNiBAQAogCQkJICAgIGRldik7CiAKIAlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKLSNpZmRlZiBIQVZFX01UMzUyCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFXzMwMElfRFZCVF9QQUw6CiAJCXByaW50aygiJXM6IHBpbm5hY2xlIDMwMGkgZHZiIHNldHVwXG4iLGRldi0+bmFtZSk7Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gbXQzNTJfYXR0YWNoKCZwaW5uYWNsZV8zMDBpLAotCQkJCQkJICZkZXYtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKG10MzUyX2F0dGFjaCwgJnBpbm5hY2xlXzMwMGksCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG10MzUyX3Bpbm5hY2xlX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7Ci0KIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBXzc3NzoKIAkJcHJpbnRrKCIlczogYXZlcnR2IDc3NyBkdmIgc2V0dXBcbiIsZGV2LT5uYW1lKTsKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBtdDM1Ml9hdHRhY2goJmF2ZXJtZWRpYV83NzcsCi0JCQkJCQkgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobXQzNTJfYXR0YWNoLCAmYXZlcm1lZGlhXzc3NywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBtdDM1Ml9hdmVyNzc3X3R1bmVyX2NhbGNfcmVnczsKIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfVERBMTAwNFgKIAljYXNlIFNBQTcxMzRfQk9BUkRfTUQ3MTM0OgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmbWVkaW9uX2NhcmRidXMsCi0JCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJm1lZGlvbl9jYXJkYnVzLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX2ZtZDEyMTZfdHVuZXJfaW5pdDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc19mbWQxMjE2X3R1bmVyX3NsZWVwOwpAQCAtMTAzOSwxNiArMTA3MywxOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RPVUdIOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190dTEyMTZfNjBfY29uZmlnLAotCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJICAgICAgICZwaGlsaXBzX3R1MTIxNl82MF9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdHUxMjE2X3R1bmVyXzYwX2luaXQ7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zID0gcGhpbGlwc190dTEyMTZfdHVuZXJfNjBfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfRkxZRFZCVERVTzoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnRkYTgyN3hfbGlmZXZpZXdfY29uZmlnLAotCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJICAgICAgICZ0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190ZGE4Mjd4X3R1bmVyX2luaXQ7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9zbGVlcDsKQEAgLTEwNTYsOCArMTA5Miw5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfRFVPX0NBUkRCVVM6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZ0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmdGRhODI3eF9saWZldmlld19jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9pbml0OwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXA7CkBAIC0xMDY1LDggKzExMDIsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX0VVUk9QQToKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSB0ZGExMDA0Nl9hdHRhY2goJnBoaWxpcHNfZXVyb3BhX2NvbmZpZywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmcGhpbGlwc19ldXJvcGFfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+b3JpZ2luYWxfZGVtb2Rfc2xlZXAgPSBkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnNsZWVwOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX2RlbW9kX3NsZWVwOwpAQCAtMTA3Niw4ICsxMTE0LDkgQEAKIAkJfQogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc19ldXJvcGFfY29uZmlnLAotCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJICAgICAgICZwaGlsaXBzX2V1cm9wYV9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX2luaXQ7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfZXVyb3BhX3R1bmVyX3NsZWVwOwpAQCAtMTA4NSwxNiArMTEyNCwxOCBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3R1MTIxNl82MV9jb25maWcsCi0JCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJnBoaWxpcHNfdHUxMjE2XzYxX2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gcGhpbGlwc190dTEyMTZfdHVuZXJfNjFfaW5pdDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBwaGlsaXBzX3R1MTIxNl90dW5lcl82MV9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9QSElMSVBTX1RJR0VSOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmcGhpbGlwc190aWdlcl9jb25maWcsCi0JCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJnBoaWxpcHNfdGlnZXJfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RpZ2VyX3R1bmVyX2luaXQ7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfc2xlZXA7CkBAIC0xMTAyLDggKzExNDMsOSBAQAogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1A3MTMxX0RVQUw6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZwaGlsaXBzX3RpZ2VyX2NvbmZpZywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmcGhpbGlwc190aWdlcl9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGlnZXJfdHVuZXJfaW5pdDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gcGhpbGlwc190aWdlcl90dW5lcl9zbGVlcDsKQEAgLTExMTEsOCArMTE1Myw5IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlRfTFIzMDE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZ0ZGE4Mjd4X2xpZmV2aWV3X2NvbmZpZywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmdGRhODI3eF9saWZldmlld19jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CiAJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgewogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuaW5pdCA9IHBoaWxpcHNfdGRhODI3eF90dW5lcl9pbml0OwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBwaGlsaXBzX3RkYTgyN3hfdHVuZXJfc2xlZXA7CkBAIC0xMTIwLDE2ICsxMTYzLDE4IEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQl9UUklPOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmbGlmZXZpZXdfdHJpb19jb25maWcsCi0JCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJmxpZmV2aWV3X3RyaW9fY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gbGlmZXZpZXdfdHJpb190dW5lcl9zbGVlcDsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNldF9wYXJhbXMgPSBsaWZldmlld190cmlvX3R1bmVyX3NldF9wYXJhbXM7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19EVU9fQ0FSREJVU19QVFYzMzE6Ci0JCWRldi0+ZHZiLmZyb250ZW5kID0gdGRhMTAwNDZfYXR0YWNoKCZhZHNfdGVjaF9kdW9fY29uZmlnLAotCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKKwkJZGV2LT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHRkYTEwMDQ2X2F0dGFjaCwKKwkJCQkJICAgICAgICZhZHNfdGVjaF9kdW9fY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBhZHNfZHVvX3R1bmVyX2luaXQ7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IGFkc19kdW9fdHVuZXJfc2xlZXA7CkBAIC0xMTM3LDM3ICsxMTgyLDYzIEBACiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX1RFVklPTl9EVkJUXzIyMFJGOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmdGV2aW9uX2R2YnQyMjByZl9jb25maWcsCi0JCQkJCQkgICAgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwNDZfYXR0YWNoLAorCQkJCQkgICAgICAgJnRldmlvbl9kdmJ0MjIwcmZfY29uZmlnLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKIAkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLnNsZWVwID0gdGV2aW9uX2R2YjIyMHJmX3R1bmVyX3NsZWVwOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IHRldmlvbl9kdmIyMjByZl90dW5lcl9zZXRfcGFyYW1zOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTOgotCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmYWRzX3RlY2hfZHVvX2NvbmZpZywKLQkJCQkJCSAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA0Nl9hdHRhY2gsCisJCQkJCSAgICAgICAmYWRzX3RlY2hfZHVvX2NvbmZpZywKKwkJCQkJICAgICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7CiAJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5pbml0ID0gYWRzX2R1b190dW5lcl9pbml0OwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2xlZXAgPSBhZHNfZHVvX3R1bmVyX3NsZWVwOwogCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IGFkc19kdW9fdHVuZXJfc2V0X3BhcmFtczsKIAkJfQogCQlicmVhazsKLSNlbmRpZgotI2lmZGVmIEhBVkVfTlhUMjAwWAotCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQVZFUlRWSERfQTE4MDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgmYXZlcnR2aGRhMTgwLCAmZGV2LT5pMmNfYWRhcCk7CisJY2FzZSBTQUE3MTM0X0JPQVJEX01FRElPTl9NRDg4MDBfUVVBRFJPOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IHRkYTEwMDQ2X2F0dGFjaCgmbWQ4ODAwX2R2YnRfY29uZmlnLAorCQkJCQkJICAgICZkZXYtPmkyY19hZGFwKTsKIAkJaWYgKGRldi0+ZHZiLmZyb250ZW5kKSB7Ci0JCQlkdmJfcGxsX2F0dGFjaChkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MSwgJmRldi0+aTJjX2FkYXAsICZkdmJfcGxsX3RkaHUyKTsKKwkJCWRldi0+ZHZiLmZyb250ZW5kLT5vcHMudHVuZXJfb3BzLmluaXQgPSBwaGlsaXBzX3RpZ2VyX3R1bmVyX2luaXQ7CisJCQlkZXYtPmR2Yi5mcm9udGVuZC0+b3BzLnR1bmVyX29wcy5zbGVlcCA9IG1kODgwMF9kdmJ0X2FuYWxvZ19tb2RlOworCQkJZGV2LT5kdmIuZnJvbnRlbmQtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcyA9IG1kODgwMF9kdmJ0X3BsbF9zZXQ7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BVkVSVFZIRF9BMTgwOgorCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZhdmVydHZoZGExODAsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChkZXYtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJICAgTlVMTCwgJmR2Yl9wbGxfdGRodTIpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKLQkJZGV2LT5kdmIuZnJvbnRlbmQgPSBueHQyMDB4X2F0dGFjaCgma3dvcmxkYXRzYzExMCwgJmRldi0+aTJjX2FkYXApOworCQlkZXYtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobnh0MjAweF9hdHRhY2gsICZrd29ybGRhdHNjMTEwLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOwogCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKLQkJCWR2Yl9wbGxfYXR0YWNoKGRldi0+ZHZiLmZyb250ZW5kLCAweDYxLCAmZGV2LT5pMmNfYWRhcCwgJmR2Yl9wbGxfdHV2MTIzNmQpOworCQkJZHZiX2F0dGFjaChkdmJfcGxsX2F0dGFjaCwgZGV2LT5kdmIuZnJvbnRlbmQsIDB4NjEsCisJCQkJICAgTlVMTCwgJmR2Yl9wbGxfdHV2MTIzNmQpOwogCQl9CiAJCWJyZWFrOwotI2VuZGlmCisJY2FzZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDA6CisJCWRldi0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaCh0ZGExMDA4Nl9hdHRhY2gsICZmbHlkdmJzLAorCQkJCQkgICAgICAgJmRldi0+aTJjX2FkYXApOworCQlpZiAoZGV2LT5kdmIuZnJvbnRlbmQpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyNnhfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwgMHg2MCwKKwkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDApID09IE5VTEwpIHsKKwkJCQlwcmludGsoIiVzOiBObyB0ZGE4MjZ4IGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJCWlmIChkdmJfYXR0YWNoKGlzbDY0MjFfYXR0YWNoLCBkZXYtPmR2Yi5mcm9udGVuZCwKKwkJCQkgICAgICAgJmRldi0+aTJjX2FkYXAsIDB4MDgsIDAsIDApID09IE5VTEwpIHsKKwkJCQlwcmludGsoIiVzOiBObyBJU0w2NDIxIGZvdW5kIVxuIiwgX19GVU5DVElPTl9fKTsKKwkJCX0KKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoIiVzOiBIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iLGRldi0+bmFtZSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWlucHV0LmMKaW5kZXggN2M1OTU0OS4uZjdlYTg1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaW5wdXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1pbnB1dC5jCkBAIC0yMjgsNiArMjI4LDEyIEBACiAJCW1hc2tfa2V5dXAgICA9IDB4NDAwMDAwOwogCQlwb2xsaW5nICAgICAgPSA1MDsgLy8gbXMKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX1BST1RFVVNfMjMwOToKKwkJaXJfY29kZXMgICAgID0gaXJfY29kZXNfcHJvdGV1c18yMzA5OworCQltYXNrX2tleWNvZGUgPSAweDAwMDA3RjsKKwkJbWFza19rZXl1cCAgID0gMHgwMDAwODA7CisJCXBvbGxpbmcgICAgICA9IDUwOyAvLyBtcworCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMzAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDA6CiAJCWlyX2NvZGVzICAgICA9IGlyX2NvZGVzX3ZpZGVvbWF0ZV90dl9wdnI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10dmF1ZGlvLmMKaW5kZXggMGRiNTNkMS4uZDMxMjIwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHZhdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXR2YXVkaW8uYwpAQCAtMTA0Niw2ICsxMDQ2LDcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChzYWFfZHNwX3dyaXRlbCk7CitFWFBPUlRfU1lNQk9MKHNhYTcxMzRfdHZhdWRpb19zZXRtdXRlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaAppbmRleCBjMDRjZTYxLi43ZGI3Yjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKQEAgLTIyMyw2ICsyMjMsOSBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX01ENzEzNF9CUklER0VfMiAgICAgOTMKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9GTFlEVkJUX0hZQlJJRF9DQVJEQlVTIDk0CiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfRkxZVklERU8zMDAwX05UU0MgOTUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9NRURJT05fTUQ4ODAwX1FVQURSTyA5NgorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0ZMWURWQlNfTFIzMDAgOTcKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9QUk9URVVTXzIzMDkgOTgKIAogI2RlZmluZSBTQUE3MTM0X01BWEJPQVJEUyA4CiAjZGVmaW5lIFNBQTcxMzRfSU5QVVRfTUFYIDgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg4Ny5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKaW5kZXggOGRhYjQ4MS4uODdmZmIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODg3LmMKQEAgLTQ4MCw2ICs0ODAsOCBAQAogCX0KIAlpZiAoKHQtPnRkYTk4ODdfY29uZmlnICYgVERBOTg4N19JTlRFUkNBUlJJRVJfTlRTQykgJiYgKHQtPnN0ZCAmIFY0TDJfU1REX05UU0MpKQogCQlidWZbMV0gJj0gfmNRU1M7CisJaWYgKHQtPnRkYTk4ODdfY29uZmlnICYgVERBOTg4N19HQVRJTkdfMTgpCisJCWJ1ZlszXSAmPSB+Y0dhdGluZ18zNjsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItc2ltcGxlLmMKaW5kZXggYWJlMzdjZi4uNjNkYjRlOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci1zaW1wbGUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXNpbXBsZS5jCkBAIC0xMCw3ICsxMCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KIAogc3RhdGljIGludCBvZmZzZXQgPSAwOwotbW9kdWxlX3BhcmFtKG9mZnNldCwgaW50LCAwNjY2KTsKK21vZHVsZV9wYXJhbShvZmZzZXQsIGludCwgMDY2NCk7CiBNT0RVTEVfUEFSTV9ERVNDKG9mZnNldCwiQWxsb3dzIHRvIHNwZWNpZnkgYW4gb2Zmc2V0IGZvciB0dW5lciIpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMzEsNiArMzMxLDggQEAKIAkJCWVsc2UgaWYgKHBhcmFtcy0+ZGVmYXVsdF90b3BfaGlnaCkKIAkJCQljb25maWcgfD0gVERBOTg4N19UT1AocGFyYW1zLT5kZWZhdWx0X3RvcF9oaWdoKTsKIAkJfQorCQlpZiAocGFyYW1zLT5kZWZhdWx0X3BsbF9nYXRpbmdfMTgpCisJCQljb25maWcgfD0gVERBOTg4N19HQVRJTkdfMTg7CiAJCWkyY19jbGllbnRzX2NvbW1hbmQoYy0+YWRhcHRlciwgVERBOTg4N19TRVRfQ09ORklHLCAmY29uZmlnKTsKIAl9CiAJdHVuZXJfZGJnKCJ0diAweCUwMnggMHglMDJ4IDB4JTAyeCAweCUwMnhcbiIsCkBAIC00MzksOCArNDQxLDYgQEAKIAkJYnVmZmVyWzNdID0gMHhhNDsKIAkJYnJlYWs7CiAJfQotCWJ1ZmZlclswXSA9IChkaXY+PjgpICYgMHg3ZjsKLQlidWZmZXJbMV0gPSBkaXYgICAgICAmIDB4ZmY7CiAJaWYgKHBhcmFtcy0+Y2JfZmlyc3RfaWZfbG93ZXJfZnJlcSAmJiBkaXYgPCB0LT5sYXN0X2RpdikgewogCQlidWZmZXJbMF0gPSBidWZmZXJbMl07CiAJCWJ1ZmZlclsxXSA9IGJ1ZmZlclszXTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItdHlwZXMuYwppbmRleCA4YjU0MjU5Li44ZmZmNjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLXR5cGVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dW5lci10eXBlcy5jCkBAIC02NTAsNiArNjUwLDcgQEAKIAkJLmNvdW50ICA9IEFSUkFZX1NJWkUodHVuZXJfdGVtaWNfNDAwOWZfNV9wYWxfcmFuZ2VzKSwKIAkJLmhhc190ZGE5ODg3ID0gMSwKIAkJLnBvcnQxX2ludmVydF9mb3Jfc2VjYW1fbGMgPSAxLAorCQkuZGVmYXVsdF9wbGxfZ2F0aW5nXzE4ID0gMSwKIAl9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwppbmRleCA5MzZlM2Y3Li5mY2FlZjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2YXVkaW8uYwpAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogI2luY2x1ZGUgPG1lZGlhL3R2YXVkaW8uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgpAQCAtMTI0LDExICsxMjUsOCBAQAogCWludCBpbnB1dDsKIAogCS8qIHRocmVhZCAqLwotCXBpZF90ICAgICAgICAgICAgICAgIHRwaWQ7Ci0Jc3RydWN0IGNvbXBsZXRpb24gICAgdGV4aXQ7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgd3E7CisJc3RydWN0IHRhc2tfc3RydWN0ICAgKnRocmVhZDsKIAlzdHJ1Y3QgdGltZXJfbGlzdCAgICB3dDsKLQlpbnQgICAgICAgICAgICAgICAgICBkb25lOwogCWludCAgICAgICAgICAgICAgICAgIHdhdGNoX3N0ZXJlbzsKIAlpbnQgCQkgICAgIGF1ZG1vZGU7CiB9OwpAQCAtMjY0LDI4ICsyNjIsMjMgQEAKIHN0YXRpYyB2b2lkIGNoaXBfdGhyZWFkX3dha2UodW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSAoc3RydWN0IENISVBTVEFURSopZGF0YTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoaXAtPndxKTsKKwl3YWtlX3VwX3Byb2Nlc3MoY2hpcC0+dGhyZWFkKTsKIH0KIAogc3RhdGljIGludCBjaGlwX3RocmVhZCh2b2lkICpkYXRhKQogewotCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSBkYXRhOwogCXN0cnVjdCBDSElQREVTQyAgKmRlc2MgPSBjaGlwbGlzdCArIGNoaXAtPnR5cGU7CiAKLQlkYWVtb25pemUoIiVzIiwgY2hpcC0+Yy5uYW1lKTsKLQlhbGxvd19zaWduYWwoU0lHVEVSTSk7CiAJdjRsX2RiZygxLCBkZWJ1ZywgJmNoaXAtPmMsICIlczogdGhyZWFkIHN0YXJ0ZWRcbiIsIGNoaXAtPmMubmFtZSk7CiAKIAlmb3IgKDs7KSB7Ci0JCWFkZF93YWl0X3F1ZXVlKCZjaGlwLT53cSwgJndhaXQpOwotCQlpZiAoIWNoaXAtPmRvbmUpIHsKLQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CisJCWlmICgha3RocmVhZF9zaG91bGRfc3RvcCgpKQogCQkJc2NoZWR1bGUoKTsKLQkJfQotCQlyZW1vdmVfd2FpdF9xdWV1ZSgmY2hpcC0+d3EsICZ3YWl0KTsKKwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTsKIAkJdHJ5X3RvX2ZyZWV6ZSgpOwotCQlpZiAoY2hpcC0+ZG9uZSB8fCBzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKwkJaWYgKGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkKIAkJCWJyZWFrOwogCQl2NGxfZGJnKDEsIGRlYnVnLCAmY2hpcC0+YywgIiVzOiB0aHJlYWQgd2FrZXVwXG4iLCBjaGlwLT5jLm5hbWUpOwogCkBAIC0zMDEsNyArMjk0LDYgQEAKIAl9CiAKIAl2NGxfZGJnKDEsIGRlYnVnLCAmY2hpcC0+YywgIiVzOiB0aHJlYWQgZXhpdGluZ1xuIiwgY2hpcC0+Yy5uYW1lKTsKLQljb21wbGV0ZV9hbmRfZXhpdCgmY2hpcC0+dGV4aXQsIDApOwogCXJldHVybiAwOwogfQogCkBAIC0xNTM2LDE5ICsxNTI4LDE4IEBACiAJCWNoaXBfd3JpdGUoY2hpcCxkZXNjLT50cmVibGVyZWcsZGVzYy0+dHJlYmxlZnVuYyhjaGlwLT50cmVibGUpKTsKIAl9CiAKLQljaGlwLT50cGlkID0gLTE7CisJY2hpcC0+dGhyZWFkID0gTlVMTDsKIAlpZiAoZGVzYy0+Y2hlY2ttb2RlKSB7CiAJCS8qIHN0YXJ0IGFzeW5jIHRocmVhZCAqLwogCQlpbml0X3RpbWVyKCZjaGlwLT53dCk7CiAJCWNoaXAtPnd0LmZ1bmN0aW9uID0gY2hpcF90aHJlYWRfd2FrZTsKIAkJY2hpcC0+d3QuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyljaGlwOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjaGlwLT53cSk7Ci0JCWluaXRfY29tcGxldGlvbigmY2hpcC0+dGV4aXQpOwotCQljaGlwLT50cGlkID0ga2VybmVsX3RocmVhZChjaGlwX3RocmVhZCwodm9pZCAqKWNoaXAsMCk7Ci0JCWlmIChjaGlwLT50cGlkIDwgMCkKLQkJCXY0bF93YXJuKCZjaGlwLT5jLCAiJXM6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIsCisJCWNoaXAtPnRocmVhZCA9IGt0aHJlYWRfcnVuKGNoaXBfdGhyZWFkLCBjaGlwLCBjaGlwLT5jLm5hbWUpOworCQlpZiAoSVNfRVJSKGNoaXAtPnRocmVhZCkpIHsKKwkJCXY0bF93YXJuKCZjaGlwLT5jLCAiJXM6IGZhaWxlZCB0byBjcmVhdGUga3RocmVhZFxuIiwKIAkJCSAgICAgICBjaGlwLT5jLm5hbWUpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmNoaXAtPndxKTsKKwkJCWNoaXAtPnRocmVhZCA9IE5VTEw7CisJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTY5LDExICsxNTYwLDEwIEBACiAJc3RydWN0IENISVBTVEFURSAqY2hpcCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJZGVsX3RpbWVyX3N5bmMoJmNoaXAtPnd0KTsKLQlpZiAoY2hpcC0+dHBpZCA+PSAwKSB7CisJaWYgKGNoaXAtPnRocmVhZCkgewogCQkvKiBzaHV0ZG93biBhc3luYyB0aHJlYWQgKi8KLQkJY2hpcC0+ZG9uZSA9IDE7Ci0JCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmY2hpcC0+d3EpOwotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZjaGlwLT50ZXhpdCk7CisJCWt0aHJlYWRfc3RvcChjaGlwLT50aHJlYWQpOworCQljaGlwLT50aHJlYWQgPSBOVUxMOwogCX0KIAogCWkyY19kZXRhY2hfY2xpZW50KCZjaGlwLT5jKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCBkOTU1MjllLi5jZDE1MDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC02MDUsNiArNjA1LDggQEAKIAkJCXR2ZWUtPnR1bmVyX2Zvcm1hdHMgfD0gaGF1cHBhdWdlX3R1bmVyX2ZtdFtpXS5pZDsKIAkJCXRfZm10X25hbWUxW2orK10gPSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLm5hbWU7CiAJCX0KKwl9CisJZm9yIChpID0gaiA9IDA7IGkgPCA4OyBpKyspIHsKIAkJaWYgKHRfZm9ybWF0MiAmICgxIDw8IGkpKSB7CiAJCQl0dmVlLT50dW5lcjJfZm9ybWF0cyB8PSBoYXVwcGF1Z2VfdHVuZXJfZm10W2ldLmlkOwogCQkJdF9mbXRfbmFtZTJbaisrXSA9IGhhdXBwYXVnZV90dW5lcl9mbXRbaV0ubmFtZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKaW5kZXggYjE2N2ZmYS4uYmMwYTRmYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTUwLmMKQEAgLTI5NCw3ICsyOTQsNyBAQAogCWlmICgoZGVjb2Rlci0+cm91dGUub3V0cHV0ICYgVFZQNTE1MF9CTEFDS19TQ1JFRU4pIHx8ICFkZWNvZGVyLT5lbmFibGUpCiAJCWlucHV0ID0gODsKIAotCXN3aXRjaCAoaW5wdXQpIHsKKwlzd2l0Y2ggKGRlY29kZXItPnJvdXRlLmlucHV0KSB7CiAJY2FzZSBUVlA1MTUwX0NPTVBPU0lURTE6CiAJCWlucHV0IHw9IDI7CiAJCS8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtMzA4LDYgKzMwOCwxMSBAQAogCQlicmVhazsKIAl9CiAKKwl0dnA1MTUwX2RiZyggMSwgIlNlbGVjdGluZyB2aWRlbyByb3V0ZTogcm91dGUgaW5wdXQ9JWksIG91dHB1dD0laSAiCisJCQkiPT4gdHZwNTE1MCBpbnB1dD0laSwgb3Btb2RlPSVpXG4iLAorCQkJZGVjb2Rlci0+cm91dGUuaW5wdXQsZGVjb2Rlci0+cm91dGUub3V0cHV0LAorCQkJaW5wdXQsIG9wbW9kZSApOworCiAJdHZwNTE1MF93cml0ZShjLCBUVlA1MTUwX09QX01PREVfQ1RMLCBvcG1vZGUpOwogCXR2cDUxNTBfd3JpdGUoYywgVFZQNTE1MF9WRF9JTl9TUkNfU0VMXzEsIGlucHV0KTsKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL2tvbmljYXdjLmMKaW5kZXggNmYzMWVjYy4uNGVlZThiZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby9rb25pY2F3Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8va29uaWNhd2MuYwpAQCAtMjIyLDYgKzIyMiw3IEBACiBzdGF0aWMgdm9pZCBrb25pY2F3Y19yZWdpc3Rlcl9pbnB1dChzdHJ1Y3Qga29uaWNhd2MgKmNhbSwgc3RydWN0IHVzYl9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJaW50IGVycm9yOwogCiAJdXNiX21ha2VfcGF0aChkZXYsIGNhbS0+aW5wdXRfcGh5c25hbWUsIHNpemVvZihjYW0tPmlucHV0X3BoeXNuYW1lKSk7CiAJc3RybmNhdChjYW0tPmlucHV0X3BoeXNuYW1lLCAiL2lucHV0MCIsIHNpemVvZihjYW0tPmlucHV0X3BoeXNuYW1lKSk7CkBAIC0yNDIsNyArMjQzLDEzIEBACiAKIAlpbnB1dF9kZXYtPnByaXZhdGUgPSBjYW07CiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoY2FtLT5pbnB1dCk7CisJaWYgKGVycm9yKSB7CisJCXdhcm4oIkZhaWxlZCB0byByZWdpc3RlciBjYW1lcmEncyBpbnB1dCBkZXZpY2UsIGVycjogJWRcbiIsCisJCSAgICAgZXJyb3IpOworCQlpbnB1dF9mcmVlX2RldmljZShjYW0tPmlucHV0KTsKKwkJY2FtLT5pbnB1dCA9IE5VTEw7CisJfQogfQogCiBzdGF0aWMgdm9pZCBrb25pY2F3Y191bnJlZ2lzdGVyX2lucHV0KHN0cnVjdCBrb25pY2F3YyAqY2FtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDkwZDQ4ZTguLjA4Zjk1NTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTcsNiArNyw3IEBACiAgKiAgICAgICAgICAgICAgICAgICAgTW9ucm9lIFdpbGxpYW1zIChtb25yb2VAcG9ib3guY29tKQogICoKICAqIFN1cHBvcnRzIDNDT00gSG9tZUNvbm5lY3QgUEMgRGlnaXRhbCBXZWJDYW0KKyAqIFN1cHBvcnRzIENvbXBybyBQUzM5VSBXZWJDYW0KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTYwLDYgKzYxLDggQEAKIC8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2UgKi8KICNkZWZpbmUgVVNCX1ZJQ0FNX1ZFTkRPUl9JRAkweDA0YzEKICNkZWZpbmUgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQJMHgwMDlkCisjZGVmaW5lIFVTQl9DT01QUk9fVkVORE9SX0lECTB4MDYwMgorI2RlZmluZSBVU0JfQ09NUFJPX1BST0RVQ1RfSUQJMHgxMDAxCiAKICNkZWZpbmUgVklDQU1fQllURVNfUEVSX1BJWEVMICAgMwogI2RlZmluZSBWSUNBTV9NQVhfUkVBRF9TSVpFICAgICAoNTEyKjI0MisxMjgpCkBAIC0xMjU0LDYgKzEyNTcsNyBAQAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwogc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIHZpY2FtX3RhYmxlW10gPSB7CiAJe1VTQl9ERVZJQ0UoVVNCX1ZJQ0FNX1ZFTkRPUl9JRCwgVVNCX1ZJQ0FNX1BST0RVQ1RfSUQpfSwKKwl7VVNCX0RFVklDRShVU0JfQ09NUFJPX1ZFTkRPUl9JRCwgVVNCX0NPTVBST19QUk9EVUNUX0lEKX0sCiAJe30JCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwxLWNvbXBhdC5jCmluZGV4IGQ3YzNmY2IuLjFkODk5ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMS1jb21wYXQuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDEtY29tcGF0LmMKQEAgLTM0OSw2ICszNDksOCBAQAogCXsKIAkJc3RydWN0IHZpZGVvX2J1ZmZlcgkqYnVmZmVyID0gYXJnOwogCisJCW1lbXNldChidWZmZXIsIDAsIHNpemVvZigqYnVmZmVyKSk7CisKIAkJZXJyID0gZHJ2KGlub2RlLCBmaWxlLCBWSURJT0NfR19GQlVGLCAmZmJ1ZjIpOwogCQlpZiAoZXJyIDwgMCkgewogCQkJZHByaW50aygiVklESU9DR0ZCVUYgLyBWSURJT0NfR19GQlVGOiAlZFxuIixlcnIpOwpAQCAtMzYxLDcgKzM2Myw3IEBACiAJCXN3aXRjaCAoZmJ1ZjIuZm10LnBpeGVsZm9ybWF0KSB7CiAJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjMzMjoKIAkJCWJ1ZmZlci0+ZGVwdGggPSA4OwotCQkJCWJyZWFrOworCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU1NToKIAkJCWJ1ZmZlci0+ZGVwdGggPSAxNTsKIAkJCWJyZWFrOwpAQCAtMzc3LDkgKzM3OSwxMyBAQAogCQlkZWZhdWx0OgogCQkJYnVmZmVyLT5kZXB0aCA9IDA7CiAJCX0KLQkJaWYgKDAgIT0gZmJ1ZjIuZm10LmJ5dGVzcGVybGluZSkKKwkJaWYgKGZidWYyLmZtdC5ieXRlc3BlcmxpbmUpIHsKIAkJCWJ1ZmZlci0+Ynl0ZXNwZXJsaW5lID0gZmJ1ZjIuZm10LmJ5dGVzcGVybGluZTsKLQkJZWxzZSB7CisJCQlpZiAoIWJ1ZmZlci0+ZGVwdGggJiYgYnVmZmVyLT53aWR0aCkKKwkJCQlidWZmZXItPmRlcHRoICAgPSAoKGZidWYyLmZtdC5ieXRlc3BlcmxpbmU8PDMpCisJCQkJCQkgICsgKGJ1ZmZlci0+d2lkdGgtMSkgKQorCQkJCQkJICAvYnVmZmVyLT53aWR0aDsKKwkJfSBlbHNlIHsKIAkJCWJ1ZmZlci0+Ynl0ZXNwZXJsaW5lID0KIAkJCQkoYnVmZmVyLT53aWR0aCAqIGJ1ZmZlci0+ZGVwdGggKyA3KSAmIDc7CiAJCQlidWZmZXItPmJ5dGVzcGVybGluZSA+Pj0gMzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwppbmRleCA4ZDk3MmZmZC4uNzhkMjhiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtOTM4LDYgKzkzOCw3IEBACiAJY2FzZSBWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVE6CiAJY2FzZSBWSURJT0NfSU5UX0kyU19DTE9DS19GUkVROgogCWNhc2UgVklESU9DX0lOVF9TX1NUQU5EQlk6CisJY2FzZSBWSURJT0NfSU5UX1JFU0VUOgogCXsKIAkJdTMyICpwPWFyZzsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlby1idWYtZHZiLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi1kdmIuYwppbmRleCA3ZWU4YTUzLi5mNTNlZGYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvLWJ1Zi1kdmIuYwpAQCAtMjIzLDYgKzIyMyw3IEBACiBmYWlsX2RteDoKIAlkdmJfdW5yZWdpc3Rlcl9mcm9udGVuZChkdmItPmZyb250ZW5kKTsKIGZhaWxfZnJvbnRlbmQ6CisJZHZiX2Zyb250ZW5kX2RldGFjaChkdmItPmZyb250ZW5kKTsKIAlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZkdmItPmFkYXB0ZXIpOwogZmFpbF9hZGFwdGVyOgogCXJldHVybiByZXN1bHQ7CkBAIC0yMzYsNiArMjM3LDcgQEAKIAlkdmJfZG14ZGV2X3JlbGVhc2UoJmR2Yi0+ZG14ZGV2KTsKIAlkdmJfZG14X3JlbGVhc2UoJmR2Yi0+ZGVtdXgpOwogCWR2Yl91bnJlZ2lzdGVyX2Zyb250ZW5kKGR2Yi0+ZnJvbnRlbmQpOworCWR2Yl9mcm9udGVuZF9kZXRhY2goZHZiLT5mcm9udGVuZCk7CiAJZHZiX3VucmVnaXN0ZXJfYWRhcHRlcigmZHZiLT5hZGFwdGVyKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2Rldi5jCmluZGV4IGVkZDdiODMuLjQ3OWEwNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvZGV2LmMKQEAgLTczOSwxMyArNzM5LDEzIEBACiAJY2FzZSBWSURJT0NfRFFCVUY6CiAJewogCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKnA9YXJnOwotCQlpZiAoIXZmZC0+dmlkaW9jX3FidWYpCisJCWlmICghdmZkLT52aWRpb2NfZHFidWYpCiAJCQlicmVhazsKIAkJcmV0ID0gY2hlY2tfZm10ICh2ZmQsIHAtPnR5cGUpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJcmV0PXZmZC0+dmlkaW9jX3FidWYoZmlsZSwgZmgsIHApOworCQlyZXQ9dmZkLT52aWRpb2NfZHFidWYoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2J1ZihjbWQsdmZkLHApOwogCQlicmVhazsKQEAgLTgzNiw3ICs4MzYsNyBAQAogCQkJYnJlYWs7CiAJCX0KIAotCQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IHZmZC0+dHZub3Jtc2l6ZSkgeworCQlpZiAoaW5kZXg8MCB8fCBpbmRleCA+PSB2ZmQtPnR2bm9ybXNpemUpIHsKIAkJCXJldD0tRUlOVkFMOwogCQkJYnJlYWs7CiAJCX0KQEAgLTEyODMsOSArMTI4MywyOSBAQAogCWNhc2UgVklESU9DX0dfUEFSTToKIAl7CiAJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnA9YXJnOwotCQlpZiAoIXZmZC0+dmlkaW9jX2dfcGFybSkKLQkJCWJyZWFrOwotCQlyZXQ9dmZkLT52aWRpb2NfZ19wYXJtKGZpbGUsIGZoLCBwKTsKKwkJaWYgKHZmZC0+dmlkaW9jX2dfcGFybSkgeworCQkJcmV0PXZmZC0+dmlkaW9jX2dfcGFybShmaWxlLCBmaCwgcCk7CisJCX0gZWxzZSB7CisJCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzOworCisJCQlpZiAoIXZmZC0+dHZub3Jtc2l6ZSkgeworCQkJCXByaW50ayAoS0VSTl9XQVJOSU5HICIlczogbm8gVFYgbm9ybXMgZGVmaW5lZCFcbiIsCisJCQkJCQkJdmZkLT5uYW1lKTsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJaWYgKHAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQkJCXJldHVybiAtRUlOVkFMOworCisJCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QoJnMsIHZmZC0+dHZub3Jtc1t2ZmQtPmN1cnJlbnRfbm9ybV0uaWQsCisJCQkJCQkgdmZkLT50dm5vcm1zW3ZmZC0+Y3VycmVudF9ub3JtXS5uYW1lKTsKKworCQkJbWVtc2V0KHAsMCxzaXplb2YoKnApKTsKKworCQkJcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSA9IHMuZnJhbWVwZXJpb2Q7CisJCQlyZXQ9MDsKKwkJfQorCiAJCWRiZ2FyZyAoY21kLCAidHlwZT0lZFxuIiwgcC0+dHlwZSk7CiAJCWJyZWFrOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKaW5kZXggMjY4ZTY5Zi4uZDFlMDRmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aW5vLmMKQEAgLTQ0MDQsNyArNDQwNCw2IEBACiAJLm5hbWUJCT0gIk5PVCBTRVQiLAogCS8vLnR5cGUJCT0gVklEX1RZUEVfQ0FQVFVSRSB8IFZJRF9UWVBFX1NVQkNBUFRVUkUgfAogCS8vCVZJRF9UWVBFX0NMSVBQSU5HIHwgVklEX1RZUEVfU0NBTEVTLCBWSURfVFlQRV9PVkVSTEFZCi0JLmhhcmR3YXJlCT0gVklEX0hBUkRXQVJFX1ZJTk8sCiAJLmZvcHMJCT0gJnZpbm9fZm9wcywKIAkubWlub3IJCT0gLTEsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aXZpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwppbmRleCA4NDE4ODRhLi5lN2MwMWQ1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYwpAQCAtOTkyLDcgKzk5Miw4IEBACiAJc3RydWN0IHZpdmlfZmggICpmaD1wcml2OwogCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcT0mZmgtPnZiX3ZpZHE7CiAJc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgcmVxOwotCXVuc2lnbmVkIGludCBpLCByZXQ7CisJdW5zaWduZWQgaW50IGk7CisJaW50IHJldDsKIAogCXJlcS50eXBlICAgPSBxLT50eXBlOwogCXJlcS5jb3VudCAgPSA4OwpAQCAtMTM1OSw2ICsxMzYwLDggQEAKIAlkZXYtPnZpZHEudGltZW91dC5kYXRhICAgICA9ICh1bnNpZ25lZCBsb25nKWRldjsKIAlpbml0X3RpbWVyKCZkZXYtPnZpZHEudGltZW91dCk7CiAKKwl2aXZpLmN1cnJlbnRfbm9ybSAgICAgICAgID0gdHZub3Jtc1swXS5pZDsKKwogCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdml2aSwgVkZMX1RZUEVfR1JBQkJFUiwgdmlkZW9fbnIpOwogCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyBDYXB0dXJlIEJvYXJkIChMb2FkIHN0YXR1czogJWQpXG4iLCByZXQpOwogCXJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZweDMyMjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCmluZGV4IDFlY2E3ZTYuLjhlZjMxZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jCkBAIC03NDQsNiArNzQ0LDYgQEAKIG1vZHVsZV9pbml0KHZweDMyMjBfaW5pdCk7CiBtb2R1bGVfZXhpdCh2cHgzMjIwX2NsZWFudXApOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCmluZGV4IDIwZjIxMWIuLjI5MTIzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5jCkBAIC01ODYsMTUgKzU4NiwxNCBAQAogCXsgLUVGQklHLCAgICAgIlRvbyBtdWNoIElTTyBmcmFtZXMgcmVxdWVzdGVkIiB9LAogCXsgLUVOT1NSLCAgICAgIkJ1ZmZlciBlcnJvciAob3ZlcnJ1bikiIH0sCiAJeyAtRVBJUEUsICAgICAiU3BlY2lmaWVkIGVuZHBvaW50IGlzIHN0YWxsZWQgKGRldmljZSBub3QgcmVzcG9uZGluZykifSwKLQl7IC1FT1ZFUkZMT1csICJCYWJibGUgKGJhZCBjYWJsZT8pIiB9LAorCXsgLUVPVkVSRkxPVywgIkJhYmJsZSAodG9vIG11Y2ggZGF0YSkiIH0sCiAJeyAtRVBST1RPLCAgICAiQml0LXN0dWZmIGVycm9yIChiYWQgY2FibGU/KSIgfSwKIAl7IC1FSUxTRVEsICAgICJDUkMvVGltZW91dCIgfSwKLQl7IC1FVElNRURPVVQsICJOQUsgKGRldmljZSBkb2VzIG5vdCByZXNwb25kKSIgfSwKKwl7IC1FVElNRSwgICAgICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byB0b2tlbiIgfSwKKwl7IC1FVElNRURPVVQsICJEZXZpY2UgZG9lcyBub3QgcmVzcG9uZCB0byBjb21tYW5kIiB9LAogCXsgLTEsIE5VTEwgfQogfTsKIAotCi0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBNZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2NhcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCmluZGV4IGYyMjQ5ZWQuLjlmMjFkMGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fY2FyZC5jCkBAIC04MjAsNyArODIwLDYgQEAKIAkuZ2V0c2RhID0gem9yYW5faTJjX2dldHNkYSwKIAkuZ2V0c2NsID0gem9yYW5faTJjX2dldHNjbCwKIAkudWRlbGF5ID0gMTAsCi0JLm1kZWxheSA9IDAsCiAJLnRpbWVvdXQgPSAxMDAsCiB9OwogCkBAIC0xNjIxLDEwICsxNjIwLDEwIEBACiAJZHByaW50ayg1LCBLRVJOX0RFQlVHICJKb3R0aSBpcyBlZW4gaGVsZCFcbiIpOwogCiAJLyogc29tZSBtYWluYm9hcmRzIG1pZ2h0IG5vdCBkbyBQQ0ktUENJIGRhdGEgdHJhbnNmZXIgd2VsbCAqLwotCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX0ZBSUwpIHsKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTHxQQ0lQQ0lfQUxJTUFHSUspKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fV0FSTklORwotCQkJIiVzOiBjaGlwc2V0IG1heSBub3Qgc3VwcG9ydCByZWxpYWJsZSBQQ0ktUENJIERNQVxuIiwKKwkJCSIlczogY2hpcHNldCBkb2VzIG5vdCBzdXBwb3J0IHJlbGlhYmxlIFBDSS1QQ0kgRE1BXG4iLAogCQkJWk9SQU5fTkFNRSk7CiAJfQogCkBAIC0xNjMyLDcgKzE2MzEsNyBAQAogCWZvciAoaSA9IDA7IGkgPCB6b3Jhbl9udW07IGkrKykgewogCQlzdHJ1Y3Qgem9yYW4gKnpyID0gJnpvcmFuW2ldOwogCi0JCWlmIChwY2lfcGNpX3Byb2JsZW1zICYgUENJUENJX05BVE9NQSAmJiB6ci0+cmV2aXNpb24gPD0gMSkgeworCQlpZiAoKHBjaV9wY2lfcHJvYmxlbXMgJiBQQ0lQQ0lfTkFUT01BKSAmJiB6ci0+cmV2aXNpb24gPD0gMSkgewogCQkJenItPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IDE7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9JTkZPCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbl9kcml2ZXIuYwppbmRleCA1ZjkwZGIyLi44NjJhOTg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuX2RyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW5fZHJpdmVyLmMKQEAgLTE1MTIsNiArMTUxMiwxMyBAQAogCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSAmJiAhY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAorCS8qIERvbid0IGFsbG93IGZyYW1lIGJ1ZmZlciBvdmVybGF5IGlmIFBDSSBvciBBR1AgaXMgYnVnZ3ksIG9yIG9uCisJICAgQUxpIE1hZ2lrICh0aGF0IG5lZWRzIHZlcnkgbG93IGxhdGVuY3kgd2hpbGUgdGhlIGNhcmQgbmVlZHMgYQorCSAgIGhpZ2hlciB2YWx1ZSBhbHdheXMpICovCisKKwlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTCB8IFBDSUFHUF9GQUlMIHwgUENJUENJX0FMSU1BR0lLKSkKKwkJcmV0dXJuIC1FTlhJTzsKKwogCS8qIHdlIG5lZWQgYSBieXRlc3BlcmxpbmUgdmFsdWUsIGV2ZW4gaWYgbm90IGdpdmVuICovCiAJaWYgKCFieXRlc3BlcmxpbmUpCiAJCWJ5dGVzcGVybGluZSA9IHdpZHRoICogKChmbXQtPmRlcHRoICsgNykgJiB+NykgLyA4OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2MTIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwppbmRleCA1MDQzNzM4Li45MjQwNjM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pyMzYxMjAuYwpAQCAtOTg3LDYgKzk4Nyw4IEBACiAJCQkgVklEX1RZUEVfU0NBTEVTOwogCQlpZiAoenR2LT5oYXZlX3R1bmVyKQogCQkJYy50eXBlIHw9IFZJRF9UWVBFX1RVTkVSOworCQlpZiAocGNpX3Byb2JsZW1zICYgKFBDSVBDSV9GQUlMfFBDSUFHUF9GQUlMKSkKKwkJCWMudHlwZSAmPSB+VklEX1RZUEVfT1ZFUkxBWTsKIAkJaWYgKHp0di0+aGF2ZV9kZWNvZGVyKSB7CiAJCQljLmNoYW5uZWxzID0genR2LT5jYXJkLT52aWRlb19pbnB1dHM7CiAJCQljLmF1ZGlvcyA9IHp0di0+Y2FyZC0+YXVkaW9faW5wdXRzOwpAQCAtMTI4NCw2ICsxMjg2LDggQEAKIAkJc3RydWN0IHZpZGVvX2J1ZmZlciB2OwogCQlpZighY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRVBFUk07CisJCWlmIChwY2lwY2lfcHJvYmxlbXMgJiAoUENJUENJX0ZBSUx8UENJQUdQX0ZBSUwpKQorCQkJcmV0dXJuIC1FTlhJTzsKIAkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlERUJVRyhwcmludGsoQ0FSRF9ERUJVRyAiVklESU9DU0ZCVUYoJXAsJWQsJWQsJWQsJWQpXG4iLENBUkQsdi5iYXNlLCB2LndpZHRoLHYuaGVpZ2h0LHYuZGVwdGgsdi5ieXRlc3BlcmxpbmUpKTsKQEAgLTIwMzAsNyArMjAzNCw3IEBACiAJCS8qIGZyZWUgaXQgKi8KIAkJZnJlZV9pcnEoenR2LT5kZXYtPmlycSx6dHYpOwogCi0gICAgCQkvKiB1bnJlZ2lzdGVyIGkyY19idXMgKi8KKwkJLyogdW5yZWdpc3RlciBpMmNfYnVzICovCiAJCWkyY191bnJlZ2lzdGVyX2J1cygoJnp0di0+aTJjKSk7CiAKIAkJLyogdW5tYXAgYW5kIGZyZWUgbWVtb3J5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL0tjb25maWcgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL0tjb25maWcKaW5kZXggZmVmNjc3MS4uNjQ0MzM5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vS2NvbmZpZwpAQCAtODgsNyArODgsNyBAQAogCiBjb25maWcgSTJPX0JMT0NLCiAJdHJpc3RhdGUgIkkyTyBCbG9jayBPU00iCi0JZGVwZW5kcyBvbiBJMk8KKwlkZXBlbmRzIG9uIEkyTyAmJiBCTE9DSwogCS0tLWhlbHAtLS0KIAkgIEluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIEkyTyBCbG9jayBPU00uIFRoZSBCbG9jayBPU00gcHJlc2VudHMgZGlzawogCSAgYW5kIG90aGVyIHN0cnVjdHVyZWQgYmxvY2sgZGV2aWNlcyB0byB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gSWYgeW91CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fYmxvY2suYwppbmRleCAxZGRjMmZiLi5lYWJhODFiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19ibG9jay5jCisrKyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX2Jsb2NrLmMKQEAgLTM5MCw5ICszOTAsOSBAQAogCX0KIAogCS8qIHJlcXVlc3QgaXMgYWxyZWFkeSBwcm9jZXNzZWQgYnkgdXMsIHNvIHJldHVybiAqLwotCWlmIChyZXEtPmZsYWdzICYgUkVRX1NQRUNJQUwpIHsKKwlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChyZXEpKSB7CiAJCW9zbV9kZWJ1ZygiUkVRX1NQRUNJQUwgYWxyZWFkeSBzZXQhXG4iKTsKLQkJcmVxLT5mbGFncyB8PSBSRVFfRE9OVFBSRVA7CisJCXJlcS0+Y21kX2ZsYWdzIHw9IFJFUV9ET05UUFJFUDsKIAkJcmV0dXJuIEJMS1BSRVBfT0s7CiAJfQogCkBAIC00MTEsNyArNDExLDggQEAKIAkJaXJlcSA9IHJlcS0+c3BlY2lhbDsKIAogCS8qIGRvIG5vdCBjb21lIGJhY2sgaGVyZSAqLwotCXJlcS0+ZmxhZ3MgfD0gUkVRX0RPTlRQUkVQIHwgUkVRX1NQRUNJQUw7CisJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RPTlRQUkVQOwogCiAJcmV0dXJuIEJMS1BSRVBfT0s7CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYyBiL2RyaXZlcnMvbWVzc2FnZS9pMm8vcGNpLmMKaW5kZXggMWI1ODQ0NC4uZGVjNDFjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZXNzYWdlL2kyby9wY2kuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL3BjaS5jCkBAIC0zNzIsMTIgKzM3MiwxMyBAQAogCQkgKiBFeHBvc2UgdGhlIHNoaXAgYmVoaW5kIGk5NjAgZm9yIGluaXRpYWxpemF0aW9uLCBvciBpdCB3aWxsCiAJCSAqIGZhaWxlZAogCQkgKi8KLQkJaTk2MCA9Ci0JCSAgICBwY2lfZmluZF9zbG90KGMtPnBkZXYtPmJ1cy0+bnVtYmVyLAorCQlpOTYwID0gcGNpX2dldF9zbG90KGMtPnBkZXYtPmJ1cywKIAkJCQkgIFBDSV9ERVZGTihQQ0lfU0xPVChjLT5wZGV2LT5kZXZmbiksIDApKTsKIAotCQlpZiAoaTk2MCkKKwkJaWYgKGk5NjApIHsKIAkJCXBjaV93cml0ZV9jb25maWdfd29yZChpOTYwLCAweDQyLCAwKTsKKwkJCXBjaV9kZXZfcHV0KGk5NjApOworCQl9CiAKIAkJYy0+cHJvbWlzZSA9IDE7CiAJCWMtPmxpbWl0X3NlY3RvcnMgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jIGIvZHJpdmVycy9tZmQvdWNiMXgwMC10cy5jCmluZGV4IDAyNzc2ODEuLjgyOTM4YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWZkL3VjYjF4MDAtdHMuYworKysgYi9kcml2ZXJzL21mZC91Y2IxeDAwLXRzLmMKQEAgLTU4LDYgKzU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCB1Y2IxeDAwX3RzX2V2dF9hZGQoc3RydWN0IHVjYjF4MDBfdHMgKnRzLCB1MTYgcHJlc3N1cmUsIHUxNiB4LCB1MTYgeSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2ID0gdHMtPmlkZXY7CisKIAlpbnB1dF9yZXBvcnRfYWJzKGlkZXYsIEFCU19YLCB4KTsKIAlpbnB1dF9yZXBvcnRfYWJzKGlkZXYsIEFCU19ZLCB5KTsKIAlpbnB1dF9yZXBvcnRfYWJzKGlkZXYsIEFCU19QUkVTU1VSRSwgcHJlc3N1cmUpOwpAQCAtNjcsNiArNjgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIHVjYjF4MDBfdHNfZXZlbnRfcmVsZWFzZShzdHJ1Y3QgdWNiMXgwMF90cyAqdHMpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaWRldiA9IHRzLT5pZGV2OworCiAJaW5wdXRfcmVwb3J0X2FicyhpZGV2LCBBQlNfUFJFU1NVUkUsIDApOwogCWlucHV0X3N5bmMoaWRldik7CiB9CkBAIC0xODksNiArMTkxLDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHVjYjF4MDBfdHNfcGVuX2Rvd24oc3RydWN0IHVjYjF4MDBfdHMgKnRzKQogewogCXVuc2lnbmVkIGludCB2YWwgPSB1Y2IxeDAwX3JlZ19yZWFkKHRzLT51Y2IsIFVDQl9UU19DUik7CisKIAlpZiAobWFjaGluZV9pc19jb2xsaWUoKSkKIAkJcmV0dXJuICghKHZhbCAmIChVQ0JfVFNfQ1JfVFNQWF9MT1cpKSk7CiAJZWxzZQpAQCAtMjkxLDYgKzI5NCw3IEBACiBzdGF0aWMgdm9pZCB1Y2IxeDAwX3RzX2lycShpbnQgaWR4LCB2b2lkICppZCkKIHsKIAlzdHJ1Y3QgdWNiMXgwMF90cyAqdHMgPSBpZDsKKwogCXVjYjF4MDBfZGlzYWJsZV9pcnEodHMtPnVjYiwgVUNCX0lSUV9UU1BYLCBVQ0JfRkFMTElORyk7CiAJd2FrZV91cCgmdHMtPmlycV93YWl0KTsKIH0KQEAgLTM3MiwzNiArMzc2LDQzIEBACiBzdGF0aWMgaW50IHVjYjF4MDBfdHNfYWRkKHN0cnVjdCB1Y2IxeDAwX2RldiAqZGV2KQogewogCXN0cnVjdCB1Y2IxeDAwX3RzICp0czsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppZGV2OworCWludCBlcnI7CiAKIAl0cyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB1Y2IxeDAwX3RzKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCF0cykKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQl0cy0+aWRldiA9IGlucHV0X2FsbG9jYXRlX2RldmljZSgpOwotCWlmICghdHMtPmlkZXYpIHsKLQkJa2ZyZWUodHMpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF0cyB8fCAhaWRldikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CiAJfQogCiAJdHMtPnVjYiA9IGRldi0+dWNiOworCXRzLT5pZGV2ID0gaWRldjsKIAl0cy0+YWRjc3luYyA9IGFkY3N5bmMgPyBVQ0JfU1lOQyA6IFVDQl9OT1NZTkM7CiAKLQl0cy0+aWRldi0+cHJpdmF0ZSA9IHRzOwotCXRzLT5pZGV2LT5uYW1lICAgICAgID0gIlRvdWNoc2NyZWVuIHBhbmVsIjsKLQl0cy0+aWRldi0+aWQucHJvZHVjdCA9IHRzLT51Y2ItPmlkOwotCXRzLT5pZGV2LT5vcGVuICAgICAgID0gdWNiMXgwMF90c19vcGVuOwotCXRzLT5pZGV2LT5jbG9zZSAgICAgID0gdWNiMXgwMF90c19jbG9zZTsKKwlpZGV2LT5wcml2YXRlICAgID0gdHM7CisJaWRldi0+bmFtZSAgICAgICA9ICJUb3VjaHNjcmVlbiBwYW5lbCI7CisJaWRldi0+aWQucHJvZHVjdCA9IHRzLT51Y2ItPmlkOworCWlkZXYtPm9wZW4gICAgICAgPSB1Y2IxeDAwX3RzX29wZW47CisJaWRldi0+Y2xvc2UgICAgICA9IHVjYjF4MDBfdHNfY2xvc2U7CiAKLQlfX3NldF9iaXQoRVZfQUJTLCB0cy0+aWRldi0+ZXZiaXQpOwotCV9fc2V0X2JpdChBQlNfWCwgdHMtPmlkZXYtPmFic2JpdCk7Ci0JX19zZXRfYml0KEFCU19ZLCB0cy0+aWRldi0+YWJzYml0KTsKLQlfX3NldF9iaXQoQUJTX1BSRVNTVVJFLCB0cy0+aWRldi0+YWJzYml0KTsKKwlfX3NldF9iaXQoRVZfQUJTLCBpZGV2LT5ldmJpdCk7CisJX19zZXRfYml0KEFCU19YLCBpZGV2LT5hYnNiaXQpOworCV9fc2V0X2JpdChBQlNfWSwgaWRldi0+YWJzYml0KTsKKwlfX3NldF9iaXQoQUJTX1BSRVNTVVJFLCBpZGV2LT5hYnNiaXQpOwogCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHRzLT5pZGV2KTsKKwllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaWRldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsOwogCiAJZGV2LT5wcml2ID0gdHM7CiAKIAlyZXR1cm4gMDsKKworIGZhaWw6CisJaW5wdXRfZnJlZV9kZXZpY2UoaWRldik7CisJa2ZyZWUodHMpOworCXJldHVybiBlcnI7CiB9CiAKIHN0YXRpYyB2b2lkIHVjYjF4MDBfdHNfcmVtb3ZlKHN0cnVjdCB1Y2IxeDAwX2RldiAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jIGIvZHJpdmVycy9taXNjL2libWFzbS9pYm1hc21mcy5jCmluZGV4IDRhMzVjYWYuLmI5OWRjNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWlzYy9pYm1hc20vaWJtYXNtZnMuYworKysgYi9kcml2ZXJzL21pc2MvaWJtYXNtL2libWFzbWZzLmMKQEAgLTE0Nyw3ICsxNDcsNiBAQAogCWlmIChyZXQpIHsKIAkJcmV0LT5pX21vZGUgPSBtb2RlOwogCQlyZXQtPmlfdWlkID0gcmV0LT5pX2dpZCA9IDA7Ci0JCXJldC0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCQlyZXQtPmlfYmxvY2tzID0gMDsKIAkJcmV0LT5pX2F0aW1lID0gcmV0LT5pX210aW1lID0gcmV0LT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCX0KQEAgLTE3NSw3ICsxNzQsNyBAQAogCX0KIAogCWlub2RlLT5pX2ZvcCA9IGZvcHM7Ci0JaW5vZGUtPnUuZ2VuZXJpY19pcCA9IGRhdGE7CisJaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7CiAKIAlkX2FkZChkZW50cnksIGlub2RlKTsKIAlyZXR1cm4gZGVudHJ5OwpAQCAtMjQ0LDcgKzI0Myw3IEBACiB7CiAJc3RydWN0IGlibWFzbWZzX2NvbW1hbmRfZGF0YSAqY29tbWFuZF9kYXRhOwogCi0JaWYgKCFpbm9kZS0+dS5nZW5lcmljX2lwKQorCWlmICghaW5vZGUtPmlfcHJpdmF0ZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAljb21tYW5kX2RhdGEgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWJtYXNtZnNfY29tbWFuZF9kYXRhKSwgR0ZQX0tFUk5FTCk7CkBAIC0yNTIsNyArMjUxLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAljb21tYW5kX2RhdGEtPmNvbW1hbmQgPSBOVUxMOwotCWNvbW1hbmRfZGF0YS0+c3AgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWNvbW1hbmRfZGF0YS0+c3AgPSBpbm9kZS0+aV9wcml2YXRlOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGNvbW1hbmRfZGF0YTsKIAlyZXR1cm4gMDsKIH0KQEAgLTM1MSwxMCArMzUwLDEwIEBACiAJc3RydWN0IGlibWFzbWZzX2V2ZW50X2RhdGEgKmV2ZW50X2RhdGE7CiAJc3RydWN0IHNlcnZpY2VfcHJvY2Vzc29yICpzcDsgCiAKLQlpZiAoIWlub2RlLT51LmdlbmVyaWNfaXApCisJaWYgKCFpbm9kZS0+aV9wcml2YXRlKQogCQlyZXR1cm4gLUVOT0RFVjsKIAotCXNwID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzcCA9IGlub2RlLT5pX3ByaXZhdGU7CiAKIAlldmVudF9kYXRhID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGlibWFzbWZzX2V2ZW50X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWV2ZW50X2RhdGEpCkBAIC00MzksMTQgKzQzOCwxNCBAQAogewogCXN0cnVjdCBpYm1hc21mc19oZWFydGJlYXRfZGF0YSAqcmhiZWF0OwogCi0JaWYgKCFpbm9kZS0+dS5nZW5lcmljX2lwKQorCWlmICghaW5vZGUtPmlfcHJpdmF0ZSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKIAlyaGJlYXQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWJtYXNtZnNfaGVhcnRiZWF0X2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXJoYmVhdCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyaGJlYXQtPnNwID0gKHN0cnVjdCBzZXJ2aWNlX3Byb2Nlc3NvciAqKWlub2RlLT51LmdlbmVyaWNfaXA7CisJcmhiZWF0LT5zcCA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmhiZWF0LT5hY3RpdmUgPSAwOwogCWlibWFzbV9pbml0X3JldmVyc2VfaGVhcnRiZWF0KHJoYmVhdC0+c3AsICZyaGJlYXQtPmhlYXJ0YmVhdCk7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gcmhiZWF0OwpAQCAtNTA4LDcgKzUwNyw3IEBACiAKIHN0YXRpYyBpbnQgcmVtb3RlX3NldHRpbmdzX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL0tjb25maWcgYi9kcml2ZXJzL21tYy9LY29uZmlnCmluZGV4IDQ1YmNmMDkuLmY1NDBiZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL0tjb25maWcKKysrIGIvZHJpdmVycy9tbWMvS2NvbmZpZwpAQCAtMjEsNyArMjEsNyBAQAogCiBjb25maWcgTU1DX0JMT0NLCiAJdHJpc3RhdGUgIk1NQyBibG9jayBkZXZpY2UgZHJpdmVyIgotCWRlcGVuZHMgb24gTU1DCisJZGVwZW5kcyBvbiBNTUMgJiYgQkxPQ0sKIAlkZWZhdWx0IHkKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgTU1DIGJsb2NrIGRldmljZSBkcml2ZXIgc3VwcG9ydC4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL01ha2VmaWxlIGIvZHJpdmVycy9tbWMvTWFrZWZpbGUKaW5kZXggZDI5NTdlMy4uYjFmNmUwMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9tbWMvTWFrZWZpbGUKQEAgLTI0LDcgKzI0LDggQEAKIG9iai0kKENPTkZJR19NTUNfT01BUCkJCSs9IG9tYXAubwogb2JqLSQoQ09ORklHX01NQ19BVDkxUk05MjAwKQkrPSBhdDkxX21jaS5vCiAKLW1tY19jb3JlLXkgOj0gbW1jLm8gbW1jX3F1ZXVlLm8gbW1jX3N5c2ZzLm8KK21tY19jb3JlLXkgOj0gbW1jLm8gbW1jX3N5c2ZzLm8KK21tY19jb3JlLSQoQ09ORklHX0JMT0NLKSArPSBtbWNfcXVldWUubwogCiBpZmVxICgkKENPTkZJR19NTUNfREVCVUcpLHkpCiBFWFRSQV9DRkxBR1MgKz0gLURERUJVRwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYyBiL2RyaXZlcnMvbW1jL2F0OTFfbWNpLmMKaW5kZXggNmI3NjM4Yi4uY2IxNDJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvYXQ5MV9tY2kuYworKysgYi9kcml2ZXJzL21tYy9hdDkxX21jaS5jCkBAIC04MjIsNiArODIyLDcgQEAKIAltbWMtPmZfbWluID0gMzc1MDAwOwogCW1tYy0+Zl9tYXggPSAyNTAwMDAwMDsKIAltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzMgfCBNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfQllURUJMT0NLOwogCiAJaG9zdCA9IG1tY19wcml2KG1tYyk7CiAJaG9zdC0+bW1jID0gbW1jOwpAQCAtODUwLDcgKzg1MSw3IEBACiAJLyoKIAkgKiBBbGxvY2F0ZSB0aGUgTUNJIGludGVycnVwdAogCSAqLwotCXJldCA9IHJlcXVlc3RfaXJxKEFUOTFfSURfTUNJLCBhdDkxX21jaV9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgaG9zdCk7CisJcmV0ID0gcmVxdWVzdF9pcnEoQVQ5MVJNOTIwMF9JRF9NQ0ksIGF0OTFfbWNpX2lycSwgSVJRRl9TSEFSRUQsIERSSVZFUl9OQU1FLCBob3N0KTsKIAlpZiAocmV0KSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRmFpbGVkIHRvIHJlcXVlc3QgTUNJIGludGVycnVwdFxuIik7CiAJCWNsa19kaXNhYmxlKG1jaV9jbGspOwpAQCAtOTA2LDcgKzkwNyw3IEBACiAKIAltbWNfcmVtb3ZlX2hvc3QobW1jKTsKIAlhdDkxX21jaV9kaXNhYmxlKCk7Ci0JZnJlZV9pcnEoQVQ5MV9JRF9NQ0ksIGhvc3QpOworCWZyZWVfaXJxKEFUOTFSTTkyMDBfSURfTUNJLCBob3N0KTsKIAltbWNfZnJlZV9ob3N0KG1tYyk7CiAKIAljbGtfZGlzYWJsZShtY2lfY2xrKTsJCQkJLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9jayAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvaW14bW1jLmMgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwppbmRleCBmYjY1NjViLi4xYjc5ZGQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9pbXhtbWMuYworKysgYi9kcml2ZXJzL21tYy9pbXhtbWMuYwpAQCAtOTU2LDcgKzk1Niw3IEBACiAJbW1jLT5mX21pbiA9IDE1MDAwMDsKIAltbWMtPmZfbWF4ID0gQ0xLX1JBVEUvMjsKIAltbWMtPm9jcl9hdmFpbCA9IE1NQ19WRERfMzJfMzM7Ci0JbW1jLT5jYXBzIHw9IE1NQ19DQVBfNF9CSVRfREFUQTsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEEgfCBNTUNfQ0FQX0JZVEVCTE9DSzsKIAogCS8qIE1NQyBjb3JlIHRyYW5zZmVyIHNpemVzIHR1bmFibGUgcGFyYW1ldGVycyAqLwogCW1tYy0+bWF4X2h3X3NlZ3MgPSA2NDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tYy5jIGIvZHJpdmVycy9tbWMvbW1jLmMKaW5kZXggNzRlYWFlZS4uNWI5Y2FhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvbW1jLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jLmMKQEAgLTk5Niw3ICs5OTYsNiBAQAogCiAJCW1tY19zZXRfZGF0YV90aW1lb3V0KCZkYXRhLCBjYXJkLCAwKTsKIAotCQlkYXRhLmJsa3N6X2JpdHMgPSAzOwogCQlkYXRhLmJsa3N6ID0gMSA8PCAzOwogCQlkYXRhLmJsb2NrcyA9IDE7CiAJCWRhdGEuZmxhZ3MgPSBNTUNfREFUQV9SRUFEOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jX2Jsb2NrLmMgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwppbmRleCBhMGUwZGFkLi5kYjBlOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNfYmxvY2suYworKysgYi9kcml2ZXJzL21tYy9tbWNfYmxvY2suYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21tYy9jYXJkLmg+CiAjaW5jbHVkZSA8bGludXgvbW1jL2hvc3QuaD4KICNpbmNsdWRlIDxsaW51eC9tbWMvcHJvdG9jb2wuaD4KKyNpbmNsdWRlIDxsaW51eC9tbWMvaG9zdC5oPgogCiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CkBAIC0xNjUsNiArMTY2LDcgQEAKIAlkbyB7CiAJCXN0cnVjdCBtbWNfYmxrX3JlcXVlc3QgYnJxOwogCQlzdHJ1Y3QgbW1jX2NvbW1hbmQgY21kOworCQl1MzIgcmVhZGNtZCwgd3JpdGVjbWQ7CiAKIAkJbWVtc2V0KCZicnEsIDAsIHNpemVvZihzdHJ1Y3QgbW1jX2Jsa19yZXF1ZXN0KSk7CiAJCWJycS5tcnEuY21kID0gJmJycS5jbWQ7CkBAIC0xNzIsNyArMTc0LDYgQEAKIAogCQlicnEuY21kLmFyZyA9IHJlcS0+c2VjdG9yIDw8IDk7CiAJCWJycS5jbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BRFRDOwotCQlicnEuZGF0YS5ibGtzel9iaXRzID0gbWQtPmJsb2NrX2JpdHM7CiAJCWJycS5kYXRhLmJsa3N6ID0gMSA8PCBtZC0+YmxvY2tfYml0czsKIAkJYnJxLmRhdGEuYmxvY2tzID0gcmVxLT5ucl9zZWN0b3JzID4+IChtZC0+YmxvY2tfYml0cyAtIDkpOwogCQlicnEuc3RvcC5vcGNvZGUgPSBNTUNfU1RPUF9UUkFOU01JU1NJT047CkBAIC0xODEsMjAgKzE4MiwzMSBAQAogCiAJCW1tY19zZXRfZGF0YV90aW1lb3V0KCZicnEuZGF0YSwgY2FyZCwgcnFfZGF0YV9kaXIocmVxKSAhPSBSRUFEKTsKIAotCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7Ci0JCQlicnEuY21kLm9wY29kZSA9IGJycS5kYXRhLmJsb2NrcyA+IDEgPyBNTUNfUkVBRF9NVUxUSVBMRV9CTE9DSyA6IE1NQ19SRUFEX1NJTkdMRV9CTE9DSzsKLQkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1JFQUQ7Ci0JCX0gZWxzZSB7Ci0JCQlicnEuY21kLm9wY29kZSA9IE1NQ19XUklURV9CTE9DSzsKLQkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOworCQkvKgorCQkgKiBJZiB0aGUgaG9zdCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgYmxvY2sgd3JpdGVzLCBmb3JjZQorCQkgKiBibG9jayB3cml0ZXMgdG8gc2luZ2xlIGJsb2NrLgorCQkgKi8KKwkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgIT0gUkVBRCAmJgorCQkgICAgIShjYXJkLT5ob3N0LT5jYXBzICYgTU1DX0NBUF9NVUxUSVdSSVRFKSkKIAkJCWJycS5kYXRhLmJsb2NrcyA9IDE7Ci0JCX0KIAogCQlpZiAoYnJxLmRhdGEuYmxvY2tzID4gMSkgewogCQkJYnJxLmRhdGEuZmxhZ3MgfD0gTU1DX0RBVEFfTVVMVEk7CiAJCQlicnEubXJxLnN0b3AgPSAmYnJxLnN0b3A7CisJCQlyZWFkY21kID0gTU1DX1JFQURfTVVMVElQTEVfQkxPQ0s7CisJCQl3cml0ZWNtZCA9IE1NQ19XUklURV9NVUxUSVBMRV9CTE9DSzsKIAkJfSBlbHNlIHsKIAkJCWJycS5tcnEuc3RvcCA9IE5VTEw7CisJCQlyZWFkY21kID0gTU1DX1JFQURfU0lOR0xFX0JMT0NLOworCQkJd3JpdGVjbWQgPSBNTUNfV1JJVEVfQkxPQ0s7CisJCX0KKworCQlpZiAocnFfZGF0YV9kaXIocmVxKSA9PSBSRUFEKSB7CisJCQlicnEuY21kLm9wY29kZSA9IHJlYWRjbWQ7CisJCQlicnEuZGF0YS5mbGFncyB8PSBNTUNfREFUQV9SRUFEOworCQl9IGVsc2UgeworCQkJYnJxLmNtZC5vcGNvZGUgPSB3cml0ZWNtZDsKKwkJCWJycS5kYXRhLmZsYWdzIHw9IE1NQ19EQVRBX1dSSVRFOwogCQl9CiAKIAkJYnJxLmRhdGEuc2cgPSBtcS0+c2c7CkBAIC0yMTksMjcgKzIzMSwyOSBAQAogCQkJZ290byBjbWRfZXJyOwogCQl9CiAKLQkJZG8gewotCQkJaW50IGVycjsKKwkJaWYgKHJxX2RhdGFfZGlyKHJlcSkgIT0gUkVBRCkgeworCQkJZG8geworCQkJCWludCBlcnI7CiAKLQkJCWNtZC5vcGNvZGUgPSBNTUNfU0VORF9TVEFUVVM7Ci0JCQljbWQuYXJnID0gY2FyZC0+cmNhIDw8IDE2OwotCQkJY21kLmZsYWdzID0gTU1DX1JTUF9SMSB8IE1NQ19DTURfQUM7Ci0JCQllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGNhcmQtPmhvc3QsICZjbWQsIDUpOwotCQkJaWYgKGVycikgewotCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlcXVlc3Rpbmcgc3RhdHVzXG4iLAotCQkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgZXJyKTsKLQkJCQlnb3RvIGNtZF9lcnI7Ci0JCQl9Ci0JCX0gd2hpbGUgKCEoY21kLnJlc3BbMF0gJiBSMV9SRUFEWV9GT1JfREFUQSkpOworCQkJCWNtZC5vcGNvZGUgPSBNTUNfU0VORF9TVEFUVVM7CisJCQkJY21kLmFyZyA9IGNhcmQtPnJjYSA8PCAxNjsKKwkJCQljbWQuZmxhZ3MgPSBNTUNfUlNQX1IxIHwgTU1DX0NNRF9BQzsKKwkJCQllcnIgPSBtbWNfd2FpdF9mb3JfY21kKGNhcmQtPmhvc3QsICZjbWQsIDUpOworCQkJCWlmIChlcnIpIHsKKwkJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVxdWVzdGluZyBzdGF0dXNcbiIsCisJCQkJCSAgICAgICByZXEtPnJxX2Rpc2stPmRpc2tfbmFtZSwgZXJyKTsKKwkJCQkJZ290byBjbWRfZXJyOworCQkJCX0KKwkJCX0gd2hpbGUgKCEoY21kLnJlc3BbMF0gJiBSMV9SRUFEWV9GT1JfREFUQSkpOwogCiAjaWYgMAotCQlpZiAoY21kLnJlc3BbMF0gJiB+MHgwMDAwMDkwMCkKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YXR1cyA9ICUwOHhcbiIsCi0JCQkgICAgICAgcmVxLT5ycV9kaXNrLT5kaXNrX25hbWUsIGNtZC5yZXNwWzBdKTsKLQkJaWYgKG1tY19kZWNvZGVfc3RhdHVzKGNtZC5yZXNwKSkKLQkJCWdvdG8gY21kX2VycjsKKwkJCWlmIChjbWQucmVzcFswXSAmIH4weDAwMDAwOTAwKQorCQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IHN0YXR1cyA9ICUwOHhcbiIsCisJCQkJICAgICAgIHJlcS0+cnFfZGlzay0+ZGlza19uYW1lLCBjbWQucmVzcFswXSk7CisJCQlpZiAobW1jX2RlY29kZV9zdGF0dXMoY21kLnJlc3ApKQorCQkJCWdvdG8gY21kX2VycjsKICNlbmRpZgorCQl9CiAKIAkJLyoKIAkJICogQSBibG9jayB3YXMgc3VjY2Vzc2Z1bGx5IHRyYW5zZmVycmVkLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tbWMvbW1jX3F1ZXVlLmMgYi9kcml2ZXJzL21tYy9tbWNfcXVldWUuYwppbmRleCA3NGY4Y2RlLi40Y2NkZDgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNfcXVldWUuYworKysgYi9kcml2ZXJzL21tYy9tbWNfcXVldWUuYwpAQCAtMjgsNyArMjgsNyBAQAogCXN0cnVjdCBtbWNfcXVldWUgKm1xID0gcS0+cXVldWVkYXRhOwogCWludCByZXQgPSBCTEtQUkVQX0tJTEw7CiAKLQlpZiAocmVxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSB7CisJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocmVxKSkgewogCQkvKgogCQkgKiBTcGVjaWFsIGNvbW1hbmRzIGFscmVhZHkgaGF2ZSB0aGUgY29tbWFuZAogCQkgKiBibG9ja3MgYWxyZWFkeSBzZXR1cCBpbiByZXEtPnNwZWNpYWwuCkBAIC0zNiw3ICszNiw3IEBACiAJCUJVR19PTighcmVxLT5zcGVjaWFsKTsKIAogCQlyZXQgPSBCTEtQUkVQX09LOwotCX0gZWxzZSBpZiAocmVxLT5mbGFncyAmIChSRVFfQ01EIHwgUkVRX0JMT0NLX1BDKSkgeworCX0gZWxzZSBpZiAoYmxrX2ZzX3JlcXVlc3QocmVxKSB8fCBibGtfcGNfcmVxdWVzdChyZXEpKSB7CiAJCS8qCiAJCSAqIEJsb2NrIEkvTyByZXF1ZXN0cyBuZWVkIHRyYW5zbGF0aW5nIGFjY29yZGluZwogCQkgKiB0byB0aGUgcHJvdG9jb2wuCkBAIC01MCw3ICs1MCw3IEBACiAJfQogCiAJaWYgKHJldCA9PSBCTEtQUkVQX09LKQotCQlyZXEtPmZsYWdzIHw9IFJFUV9ET05UUFJFUDsKKwkJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RPTlRQUkVQOwogCiAJcmV0dXJuIHJldDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL21tY2kuYyBiL2RyaXZlcnMvbW1jL21tY2kuYwppbmRleCAxODg2NTYyLi4yYjVhMGNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21tYy9tbWNpLmMKKysrIGIvZHJpdmVycy9tbWMvbW1jaS5jCkBAIC02OSwxMiArNjksMTMgQEAKIAl1bnNpZ25lZCBpbnQgZGF0YWN0cmwsIHRpbWVvdXQsIGlycW1hc2s7CiAJdW5zaWduZWQgbG9uZyBsb25nIGNsa3M7CiAJdm9pZCBfX2lvbWVtICpiYXNlOworCWludCBibGtzel9iaXRzOwogCiAJREJHKGhvc3QsICJibGtzeiAlMDR4IGJsa3MgJTA0eCBmbGFncyAlMDh4XG4iLAotCSAgICAxIDw8IGRhdGEtPmJsa3N6X2JpdHMsIGRhdGEtPmJsb2NrcywgZGF0YS0+ZmxhZ3MpOworCSAgICBkYXRhLT5ibGtzeiwgZGF0YS0+YmxvY2tzLCBkYXRhLT5mbGFncyk7CiAKIAlob3N0LT5kYXRhID0gZGF0YTsKLQlob3N0LT5zaXplID0gZGF0YS0+YmxvY2tzIDw8IGRhdGEtPmJsa3N6X2JpdHM7CisJaG9zdC0+c2l6ZSA9IGRhdGEtPmJsa3N6OwogCWhvc3QtPmRhdGFfeGZlcmVkID0gMDsKIAogCW1tY2lfaW5pdF9zZyhob3N0LCBkYXRhKTsKQEAgLTg4LDcgKzg5LDEwIEBACiAJd3JpdGVsKHRpbWVvdXQsIGJhc2UgKyBNTUNJREFUQVRJTUVSKTsKIAl3cml0ZWwoaG9zdC0+c2l6ZSwgYmFzZSArIE1NQ0lEQVRBTEVOR1RIKTsKIAotCWRhdGFjdHJsID0gTUNJX0RQU01fRU5BQkxFIHwgZGF0YS0+Ymxrc3pfYml0cyA8PCA0OworCWJsa3N6X2JpdHMgPSBmZnMoZGF0YS0+Ymxrc3opIC0gMTsKKwlCVUdfT04oMSA8PCBibGtzel9iaXRzICE9IGRhdGEtPmJsa3N6KTsKKworCWRhdGFjdHJsID0gTUNJX0RQU01fRU5BQkxFIHwgYmxrc3pfYml0cyA8PCA0OwogCWlmIChkYXRhLT5mbGFncyAmIE1NQ19EQVRBX1JFQUQpIHsKIAkJZGF0YWN0cmwgfD0gTUNJX0RQU01fRElSRUNUSU9OOwogCQlpcnFtYXNrID0gTUNJX1JYRklGT0hBTEZGVUxMTUFTSzsKQEAgLTE0NSw3ICsxNDksNyBAQAogCSAgICAgIHVuc2lnbmVkIGludCBzdGF0dXMpCiB7CiAJaWYgKHN0YXR1cyAmIE1DSV9EQVRBQkxPQ0tFTkQpIHsKLQkJaG9zdC0+ZGF0YV94ZmVyZWQgKz0gMSA8PCBkYXRhLT5ibGtzel9iaXRzOworCQlob3N0LT5kYXRhX3hmZXJlZCArPSBkYXRhLT5ibGtzejsKIAl9CiAJaWYgKHN0YXR1cyAmIChNQ0lfREFUQUNSQ0ZBSUx8TUNJX0RBVEFUSU1FT1VUfE1DSV9UWFVOREVSUlVOfE1DSV9SWE9WRVJSVU4pKSB7CiAJCWlmIChzdGF0dXMgJiBNQ0lfREFUQUNSQ0ZBSUwpCkBAIC01MDUsNiArNTA5LDcgQEAKIAltbWMtPmZfbWluID0gKGhvc3QtPm1jbGsgKyA1MTEpIC8gNTEyOwogCW1tYy0+Zl9tYXggPSBtaW4oaG9zdC0+bWNsaywgZm1heCk7CiAJbW1jLT5vY3JfYXZhaWwgPSBwbGF0LT5vY3JfbWFzazsKKwltbWMtPmNhcHMgPSBNTUNfQ0FQX01VTFRJV1JJVEU7CiAKIAkvKgogCSAqIFdlIGNhbiBkbyBTR0lPCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy9vbWFwLmMgYi9kcml2ZXJzL21tYy9vbWFwLmMKaW5kZXggZGRmMDZiMy4uNTJjOWU1MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvb21hcC5jCisrKyBiL2RyaXZlcnMvbW1jL29tYXAuYwpAQCAtMTAzNCwxMyArMTAzNCwxNCBAQAogCWhvc3QtPmlycSA9IHBkZXYtPnJlc291cmNlWzFdLnN0YXJ0OwogCWhvc3QtPmJhc2UgPSAodm9pZCBfX2lvbWVtKilJT19BRERSRVNTKHItPnN0YXJ0KTsKIAotCWlmIChtaW5mby0+d2lyZTQpCi0JCSBtbWMtPmNhcHMgfD0gTU1DX0NBUF80X0JJVF9EQVRBOwotCiAJbW1jLT5vcHMgPSAmbW1jX29tYXBfb3BzOwogCW1tYy0+Zl9taW4gPSA0MDAwMDA7CiAJbW1jLT5mX21heCA9IDI0MDAwMDAwOwogCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zM3xNTUNfVkREXzMzXzM0OworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfQllURUJMT0NLOworCisJaWYgKG1pbmZvLT53aXJlNCkKKwkJIG1tYy0+Y2FwcyB8PSBNTUNfQ0FQXzRfQklUX0RBVEE7CiAKIAkvKiBVc2Ugc2NhdHRlcmxpc3QgRE1BIHRvIHJlZHVjZSBwZXItdHJhbnNmZXIgY29zdHMuCiAJICogTk9URSBtYXhfc2VnX3NpemUgYXNzdW1wdGlvbiB0aGF0IHNtYWxsIGJsb2NrcyBhcmVuJ3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3NkaGNpLmMgYi9kcml2ZXJzL21tYy9zZGhjaS5jCmluZGV4IDRlMjFiM2IuLjRkYWI1ZWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3NkaGNpLmMKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuYwpAQCAtNCw4ICs0LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwNiBQaWVycmUgT3NzbWFuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CkBAIC0xMjYyLDcgKzEyNjMsNyBAQAogCW1tYy0+b3BzID0gJnNkaGNpX29wczsKIAltbWMtPmZfbWluID0gaG9zdC0+bWF4X2NsayAvIDI1NjsKIAltbWMtPmZfbWF4ID0gaG9zdC0+bWF4X2NsazsKLQltbWMtPmNhcHMgPSBNTUNfQ0FQXzRfQklUX0RBVEE7CisJbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBIHwgTU1DX0NBUF9NVUxUSVdSSVRFIHwgTU1DX0NBUF9CWVRFQkxPQ0s7CiAKIAltbWMtPm9jcl9hdmFpbCA9IDA7CiAJaWYgKGNhcHMgJiBTREhDSV9DQU5fVkREXzMzMCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbW1jL3NkaGNpLmggYi9kcml2ZXJzL21tYy9zZGhjaS5oCmluZGV4IGYyNDUzMzQuLjcyYTY3OTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbW1jL3NkaGNpLmgKKysrIGIvZHJpdmVycy9tbWMvc2RoY2kuaApAQCAtNCw4ICs0LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDUgUGllcnJlIE9zc21hbiwgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdAorICogeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogICovCiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmMgYi9kcml2ZXJzL21tYy93YnNkLmMKaW5kZXggYzM1MWM2ZC4uODhjNmYwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5jCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuYwpAQCAtNCw4ICs0LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBQaWVycmUgT3NzbWFuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKgogICoKICAqIFdhcm5pbmchCkBAIC0xMzIzLDcgKzEzMjQsNyBAQAogCW1tYy0+Zl9taW4gPSAzNzUwMDA7CiAJbW1jLT5mX21heCA9IDI0MDAwMDAwOwogCW1tYy0+b2NyX2F2YWlsID0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7Ci0JbW1jLT5jYXBzID0gTU1DX0NBUF80X0JJVF9EQVRBOworCW1tYy0+Y2FwcyA9IE1NQ19DQVBfNF9CSVRfREFUQSB8IE1NQ19DQVBfTVVMVElXUklURSB8IE1NQ19DQVBfQllURUJMT0NLOwogCiAJc3Bpbl9sb2NrX2luaXQoJmhvc3QtPmxvY2spOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21tYy93YnNkLmggYi9kcml2ZXJzL21tYy93YnNkLmgKaW5kZXggMjQ5YmFhNy4uNjA3Mjk5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tbWMvd2JzZC5oCisrKyBiL2RyaXZlcnMvbW1jL3dic2QuaApAQCAtNCw4ICs0LDkgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNSBQaWVycmUgT3NzbWFuLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0CisgKiB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAgKi8KIAogI2RlZmluZSBMT0NLX0NPREUJCTB4QUEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbXRkL0tjb25maWcgYi9kcml2ZXJzL210ZC9LY29uZmlnCmluZGV4IGEwM2U4NjIuLmEzMDRiMzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL0tjb25maWcKKysrIGIvZHJpdmVycy9tdGQvS2NvbmZpZwpAQCAtMTY2LDcgKzE2Niw3IEBACiAKIGNvbmZpZyBNVERfQkxPQ0sKIAl0cmlzdGF0ZSAiQ2FjaGluZyBibG9jayBkZXZpY2UgYWNjZXNzIHRvIE1URCBkZXZpY2VzIgotCWRlcGVuZHMgb24gTVRECisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sKIAktLS1oZWxwLS0tCiAJICBBbHRob3VnaCBtb3N0IGZsYXNoIGNoaXBzIGhhdmUgYW4gZXJhc2Ugc2l6ZSB0b28gbGFyZ2UgdG8gYmUgdXNlZnVsCiAJICBhcyBibG9jayBkZXZpY2VzLCBpdCBpcyBwb3NzaWJsZSB0byB1c2UgTVREIGRldmljZXMgd2hpY2ggYXJlIGJhc2VkCkBAIC0xODgsNyArMTg4LDcgQEAKIAogY29uZmlnIE1URF9CTE9DS19STwogCXRyaXN0YXRlICJSZWFkb25seSBibG9jayBkZXZpY2UgYWNjZXNzIHRvIE1URCBkZXZpY2VzIgotCWRlcGVuZHMgb24gTVREX0JMT0NLIT15ICYmIE1URAorCWRlcGVuZHMgb24gTVREX0JMT0NLIT15ICYmIE1URCAmJiBCTE9DSwogCWhlbHAKIAkgIFRoaXMgYWxsb3dzIHlvdSB0byBtb3VudCByZWFkLW9ubHkgZmlsZSBzeXN0ZW1zIChzdWNoIGFzIGNyYW1mcykKIAkgIGZyb20gYW4gTVREIGRldmljZSwgd2l0aG91dCB0aGUgb3ZlcmhlYWQgKGFuZCBkYW5nZXIpIG9mIHRoZSBjYWNoaW5nCkBAIC0xOTksNyArMTk5LDcgQEAKIAogY29uZmlnIEZUTAogCXRyaXN0YXRlICJGVEwgKEZsYXNoIFRyYW5zbGF0aW9uIExheWVyKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVRECisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sKIAktLS1oZWxwLS0tCiAJICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBvcmlnaW5hbCBGbGFzaCBUcmFuc2xhdGlvbiBMYXllciB3aGljaAogCSAgaXMgcGFydCBvZiB0aGUgUENNQ0lBIHNwZWNpZmljYXRpb24uIEl0IHVzZXMgYSBraW5kIG9mIHBzZXVkby0KQEAgLTIxNSw3ICsyMTUsNyBAQAogCiBjb25maWcgTkZUTAogCXRyaXN0YXRlICJORlRMIChOQU5EIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVRECisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sKIAktLS1oZWxwLS0tCiAJICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIHRoZSBOQU5EIEZsYXNoIFRyYW5zbGF0aW9uIExheWVyIHdoaWNoIGlzCiAJICB1c2VkIG9uIE0tU3lzdGVtcycgRGlza09uQ2hpcCBkZXZpY2VzLiBJdCB1c2VzIGEga2luZCBvZiBwc2V1ZG8tCkBAIC0yMzgsNyArMjM4LDcgQEAKIAogY29uZmlnIElORlRMCiAJdHJpc3RhdGUgIklORlRMIChJbnZlcnNlIE5BTkQgRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNVEQKKwlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIEludmVyc2UgTkFORCBGbGFzaCBUcmFuc2xhdGlvbgogCSAgTGF5ZXIgd2hpY2ggaXMgdXNlZCBvbiBNLVN5c3RlbXMnIG5ld2VyIERpc2tPbkNoaXAgZGV2aWNlcy4gSXQKQEAgLTI1NSw3ICsyNTUsNyBAQAogCiBjb25maWcgUkZEX0ZUTAogICAgICAgICB0cmlzdGF0ZSAiUmVzaWRlbnQgRmxhc2ggRGlzayAoRmxhc2ggVHJhbnNsYXRpb24gTGF5ZXIpIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBNVEQKKwlkZXBlbmRzIG9uIE1URCAmJiBCTE9DSwogCS0tLWhlbHAtLS0KIAkgIFRoaXMgcHJvdmlkZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoIHRyYW5zbGF0aW9uIGxheWVyIGtub3duCiAJICBhcyB0aGUgUmVzaWRlbnQgRmxhc2ggRGlzayAoUkZEKSwgYXMgdXNlZCBieSB0aGUgRW1iZWRkZWQgQklPUwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnIGIvZHJpdmVycy9tdGQvZGV2aWNlcy9LY29uZmlnCmluZGV4IDE2YzAyYjUuLjQ0MGY2ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbXRkL2RldmljZXMvS2NvbmZpZworKysgYi9kcml2ZXJzL210ZC9kZXZpY2VzL0tjb25maWcKQEAgLTEzNiw3ICsxMzYsNyBAQAogCiBjb25maWcgTVREX0JMT0NLMk1URAogCXRyaXN0YXRlICJNVEQgdXNpbmcgYmxvY2sgZGV2aWNlIgotCWRlcGVuZHMgb24gTVRECisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sKIAloZWxwCiAJICBUaGlzIGRyaXZlciBhbGxvd3MgYSBibG9jayBkZXZpY2UgdG8gYXBwZWFyIGFzIGFuIE1URC4gSXQgd291bGQKIAkgIGdlbmVyYWxseSBiZSB1c2VkIGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jIGIvZHJpdmVycy9tdGQvbXRkX2Jsa2RldnMuYwppbmRleCA0NThkM2M4Li42YmFmNWZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL210ZC9tdGRfYmxrZGV2cy5jCisrKyBiL2RyaXZlcnMvbXRkL210ZF9ibGtkZXZzLmMKQEAgLTQ2LDcgKzQ2LDcgQEAKIAluc2VjdCA9IHJlcS0+Y3VycmVudF9ucl9zZWN0b3JzOwogCWJ1ZiA9IHJlcS0+YnVmZmVyOwogCi0JaWYgKCEocmVxLT5mbGFncyAmIFJFUV9DTUQpKQorCWlmICghYmxrX2ZzX3JlcXVlc3QocmVxKSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoYmxvY2sgKyBuc2VjdCA+IGdldF9jYXBhY2l0eShyZXEtPnJxX2Rpc2spKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvM2M1MDkuYyBiL2RyaXZlcnMvbmV0LzNjNTA5LmMKaW5kZXggNTljMzM5Mi4uYjkzNjM3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvM2M1MDkuYworKysgYi9kcml2ZXJzL25ldC8zYzUwOS5jCkBAIC0yMjUsNiArMjI1LDcgQEAKIAkJeyAiVENNNTA5NSIgfSwKIAkJeyAiIiB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShlaXNhLCBlbDNfZWlzYV9pZHMpOwogCiBzdGF0aWMgaW50IGVsM19laXNhX3Byb2JlIChzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC8zYzU5eC5jIGIvZHJpdmVycy9uZXQvM2M1OXguYwppbmRleCBhZjMwMWYwLi5kZjQyZTI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC8zYzU5eC5jCisrKyBiL2RyaXZlcnMvbmV0LzNjNTl4LmMKQEAgLTg1MSw2ICs4NTEsNyBAQAogCXsgIlRDTTU5NzAiLCBDSF8zQzU5NyB9LAogCXsgIiIgfQogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoZWlzYSwgdm9ydGV4X2Vpc2FfaWRzKTsKIAogc3RhdGljIGludCB2b3J0ZXhfZWlzYV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpOwogc3RhdGljIGludCB2b3J0ZXhfZWlzYV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0LzgzOTAuYyBiL2RyaXZlcnMvbmV0LzgzOTAuYwppbmRleCA1YjZiMDVlLi45ZDM0MDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC84MzkwLmMKKysrIGIvZHJpdmVycy9uZXQvODM5MC5jCkBAIC0yOTksNyArMjk5LDcgQEAKIAkgKglTbG93IHBoYXNlIHdpdGggbG9jayBoZWxkLgogCSAqLwogCi0JZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXAoZGV2LT5pcnEpOworCWRpc2FibGVfaXJxX25vc3luY19sb2NrZGVwX2lycXNhdmUoZGV2LT5pcnEsICZmbGFncyk7CiAKIAlzcGluX2xvY2soJmVpX2xvY2FsLT5wYWdlX2xvY2spOwogCkBAIC0zMzgsNyArMzM4LDcgQEAKIAkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCQlvdXRiX3AoRU5JU1JfQUxMLCBlODM5MF9iYXNlICsgRU4wX0lNUik7CiAJCXNwaW5fdW5sb2NrKCZlaV9sb2NhbC0+cGFnZV9sb2NrKTsKLQkJZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwkJZW5hYmxlX2lycV9sb2NrZGVwX2lycXJlc3RvcmUoZGV2LT5pcnEsICZmbGFncyk7CiAJCWVpX2xvY2FsLT5zdGF0LnR4X2Vycm9ycysrOwogCQlyZXR1cm4gMTsKIAl9CkBAIC0zNzksNyArMzc5LDcgQEAKIAlvdXRiX3AoRU5JU1JfQUxMLCBlODM5MF9iYXNlICsgRU4wX0lNUik7CiAKIAlzcGluX3VubG9jaygmZWlfbG9jYWwtPnBhZ2VfbG9jayk7Ci0JZW5hYmxlX2lycV9sb2NrZGVwKGRldi0+aXJxKTsKKwllbmFibGVfaXJxX2xvY2tkZXBfaXJxcmVzdG9yZShkZXYtPmlycSwgJmZsYWdzKTsKIAogCWRldl9rZnJlZV9za2IgKHNrYik7CiAJZWlfbG9jYWwtPnN0YXQudHhfYnl0ZXMgKz0gc2VuZF9sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9LY29uZmlnIGIvZHJpdmVycy9uZXQvS2NvbmZpZwppbmRleCA2MzE1NDc3Li5mZjhhOGMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L0tjb25maWcKQEAgLTI0LDYgKzI0LDkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgWS4KIAorIyBBbGwgdGhlIGZvbGxvd2luZyBzeW1ib2xzIGFyZSBkZXBlbmRlbnQgb24gTkVUREVWSUNFUyAtIGRvIG5vdCByZXBlYXQKKyMgdGhhdCBmb3IgZWFjaCBvZiB0aGUgc3ltYm9scy4KK2lmIE5FVERFVklDRVMKIAogY29uZmlnIElGQgogCXRyaXN0YXRlICJJbnRlcm1lZGlhdGUgRnVuY3Rpb25hbCBCbG9jayBzdXBwb3J0IgpAQCAtMjg1Miw2ICsyODU1LDggQEAKIAlJZiB5b3Ugd2FudCB0byBsb2cga2VybmVsIG1lc3NhZ2VzIG92ZXIgdGhlIG5ldHdvcmssIGVuYWJsZSB0aGlzLgogCVNlZSA8ZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvbmV0Y29uc29sZS50eHQ+IGZvciBkZXRhaWxzLgogCitlbmRpZiAjTkVUREVWSUNFUworCiBjb25maWcgTkVUUE9MTAogCWRlZl9ib29sIE5FVENPTlNPTEUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvYWNlbmljLmMgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwppbmRleCBhMDc1MjQ2Li43MWE0ZjYwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hY2VuaWMuYworKysgYi9kcml2ZXJzL25ldC9hY2VuaWMuYwpAQCAtMTYzLDExICsxNjMsNyBAQAogI2RlZmluZSBTRVRfTkVUREVWX0RFVihuZXQsIHBkZXYpCWRve30gd2hpbGUoMCkKICNlbmRpZgogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFID49IDB4MjA1MWMKICNkZWZpbmUgYWNlX3N5bmNfaXJxKGlycSkJc3luY2hyb25pemVfaXJxKGlycSkKLSNlbHNlCi0jZGVmaW5lIGFjZV9zeW5jX2lycShpcnEpCXN5bmNocm9uaXplX2lycSgpCi0jZW5kaWYKIAogI2lmbmRlZiBvZmZzZXRfaW5fcGFnZQogI2RlZmluZSBvZmZzZXRfaW5fcGFnZShwdHIpCSgodW5zaWduZWQgbG9uZykocHRyKSAmIH5QQUdFX01BU0spCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcHBsZXRhbGsvaXBkZHAuYyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCmluZGV4IDdmN2RkNDUuLmI5ODU5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCisrKyBiL2RyaXZlcnMvbmV0L2FwcGxldGFsay9pcGRkcC5jCkBAIC0xNDUsOSArMTQ1LDcgQEAKIAogCS8qIENyZWF0ZSB0aGUgRXh0ZW5kZWQgRERQIGhlYWRlciAqLwogCWRkcCA9IChzdHJ1Y3QgZGRwZWhkciAqKXNrYi0+ZGF0YTsKLSAgICAgICAgZGRwLT5kZWhfbGVuID0gc2tiLT5sZW47Ci0gICAgICAgIGRkcC0+ZGVoX2hvcHMgPSAxOwotICAgICAgICBkZHAtPmRlaF9wYWQgPSAwOworICAgICAgICBkZHAtPmRlaF9sZW5faG9wcyA9IGh0b25zKHNrYi0+bGVuICsgKDE8PDEwKSk7CiAgICAgICAgIGRkcC0+ZGVoX3N1bSA9IDA7CiAKIAkvKgpAQCAtMTcwLDcgKzE2OCw2IEBACiAgICAgICAgIGRkcC0+ZGVoX3Nwb3J0ID0gNzI7CiAKICAgICAgICAgKigoX191OCAqKShkZHArMSkpID0gMjI7ICAgICAgICAJLyogZGRwIHR5cGUgPSBJUCAqLwotICAgICAgICAqKChfX3UxNiAqKWRkcCk9bnRvaHMoKigoX191MTYgKilkZHApKTsJLyogZml4IHVwIGxlbmd0aCBmaWVsZCAqLwogCiAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBodG9ucyhFVEhfUF9BVEFMSyk7ICAgICAvKiBQcm90b2NvbCBoYXMgY2hhbmdlZCAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jIGIvZHJpdmVycy9uZXQvYXJtL2F0OTFfZXRoZXIuYwppbmRleCA5NWIyOGFhLi4zZWNmMmNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9hcm0vYXQ5MV9ldGhlci5jCisrKyBiL2RyaXZlcnMvbmV0L2FybS9hdDkxX2V0aGVyLmMKQEAgLTk0Nyw3ICs5NDcsNyBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRldi0+YmFzZV9hZGRyID0gQVQ5MV9WQV9CQVNFX0VNQUM7Ci0JZGV2LT5pcnEgPSBBVDkxX0lEX0VNQUM7CisJZGV2LT5pcnEgPSBBVDkxUk05MjAwX0lEX0VNQUM7CiAJU0VUX01PRFVMRV9PV05FUihkZXYpOwogCiAJLyogSW5zdGFsbCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JueDIuYyBiL2RyaXZlcnMvbmV0L2JueDIuYwppbmRleCA3ZmNmMDE1Li42YjRlZGI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ibngyLmMKKysrIGIvZHJpdmVycy9uZXQvYm54Mi5jCkBAIC01Niw4ICs1Niw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkiYm54MiIKICNkZWZpbmUgUEZYIERSVl9NT0RVTEVfTkFNRQkiOiAiCi0jZGVmaW5lIERSVl9NT0RVTEVfVkVSU0lPTgkiMS40LjQ0IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkF1Z3VzdCAxMCwgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIxLjQuNDUiCisjZGVmaW5lIERSVl9NT0RVTEVfUkVMREFURQkiU2VwdGVtYmVyIDI5LCAyMDA2IgogCiAjZGVmaW5lIFJVTl9BVCh4KSAoamlmZmllcyArICh4KSkKIApAQCAtNTgwNSw2ICs1ODA1LDM0IEBACiAJCWJwLT5jbWRfdGlja3NfaW50ID0gYnAtPmNtZF90aWNrczsKIAl9CiAKKwkvKiBEaXNhYmxlIE1TSSBvbiA1NzA2IGlmIEFNRCA4MTMyIGJyaWRnZSBpcyBmb3VuZC4KKwkgKgorCSAqIE1TSSBpcyBkZWZpbmVkIHRvIGJlIDMyLWJpdCB3cml0ZS4gIFRoZSA1NzA2IGRvZXMgNjQtYml0IE1TSSB3cml0ZXMKKwkgKiB3aXRoIGJ5dGUgZW5hYmxlcyBkaXNhYmxlZCBvbiB0aGUgdW51c2VkIDMyLWJpdCB3b3JkLiAgVGhpcyBpcyBsZWdhbAorCSAqIGJ1dCBjYXVzZXMgcHJvYmxlbXMgb24gdGhlIEFNRCA4MTMyIHdoaWNoIHdpbGwgZXZlbnR1YWxseSBzdG9wCisJICogcmVzcG9uZGluZyBhZnRlciBhIHdoaWxlLgorCSAqCisJICogQU1EIGJlbGlldmVzIHRoaXMgaW5jb21wYXRpYmlsaXR5IGlzIHVuaXF1ZSB0byB0aGUgNTcwNiwgYW5kCisJICogcHJlZmVycyB0byBsb2NhbGx5IGRpc2FibGUgTVNJIHJhdGhlciB0aGFuIGdsb2JhbGx5IGRpc2FibGluZyBpdAorCSAqIHVzaW5nIHBjaV9tc2lfcXVpcmsuCisJICovCisJaWYgKENISVBfTlVNKGJwKSA9PSBDSElQX05VTV81NzA2ICYmIGRpc2FibGVfbXNpID09IDApIHsKKwkJc3RydWN0IHBjaV9kZXYgKmFtZF84MTMyID0gTlVMTDsKKworCQl3aGlsZSAoKGFtZF84MTMyID0gcGNpX2dldF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTUQsCisJCQkJCQkgIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzJfQlJJREdFLAorCQkJCQkJICBhbWRfODEzMikpKSB7CisJCQl1OCByZXY7CisKKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGFtZF84MTMyLCBQQ0lfUkVWSVNJT05fSUQsICZyZXYpOworCQkJaWYgKHJldiA+PSAweDEwICYmIHJldiA8PSAweDEzKSB7CisJCQkJZGlzYWJsZV9tc2kgPSAxOworCQkJCXBjaV9kZXZfcHV0KGFtZF84MTMyKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwogCWJwLT5hdXRvbmVnID0gQVVUT05FR19TUEVFRCB8IEFVVE9ORUdfRkxPV19DVFJMOwogCWJwLT5yZXFfbGluZV9zcGVlZCA9IDA7CiAJaWYgKGJwLT5waHlfZmxhZ3MgJiBQSFlfU0VSREVTX0ZMQUcpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF8zYWQuYwppbmRleCA2YTQwNzA3Li4zZmIzNTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfM2FkLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kXzNhZC5jCkBAIC04NSw2ICs4NSw3IEBACiAjZGVmaW5lICAgICBBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTBNQlBTICAgICAgMHgyCiAjZGVmaW5lICAgICBBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTAwTUJQUyAgICAgMHg0CiAjZGVmaW5lICAgICBBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTAwME1CUFMgICAgMHg4CisjZGVmaW5lICAgICBBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTAwMDBNQlBTICAgMHgxMAogLy9lbmRhbGxvdW4KIAogLy8gY29tcGFyZSBNQUMgYWRkcmVzc2VzCkBAIC05OSw3ICsxMDAsNyBAQAogc3RhdGljIHU4IF9fZ2V0X2R1cGxleChzdHJ1Y3QgcG9ydCAqcG9ydCk7CiBzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0aWFsaXplX3BvcnRfbG9ja3Moc3RydWN0IHBvcnQgKnBvcnQpOwogLy9jb252ZXJzaW9ucwotc3RhdGljIHZvaWQgX19udG9oc19sYWNwZHUoc3RydWN0IGxhY3BkdSAqbGFjcGR1KTsKK3N0YXRpYyB2b2lkIF9faHRvbnNfbGFjcGR1KHN0cnVjdCBsYWNwZHUgKmxhY3BkdSk7CiBzdGF0aWMgdTE2IF9fYWRfdGltZXJfdG9fdGlja3ModTE2IHRpbWVyX3R5cGUsIHUxNiBQYXIpOwogCiAKQEAgLTMzMCw3ICszMzEsOCBAQAogICogICAgIDAsCiAgKiAgICAgJUFEX0xJTktfU1BFRURfQklUTUFTS18xME1CUFMsCiAgKiAgICAgJUFEX0xJTktfU1BFRURfQklUTUFTS18xMDBNQlBTLAotICogICAgICVBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTAwME1CUFMKKyAqICAgICAlQURfTElOS19TUEVFRF9CSVRNQVNLXzEwMDBNQlBTLAorICogICAgICVBRF9MSU5LX1NQRUVEX0JJVE1BU0tfMTAwMDBNQlBTCiAgKi8KIHN0YXRpYyB1MTYgX19nZXRfbGlua19zcGVlZChzdHJ1Y3QgcG9ydCAqcG9ydCkKIHsKQEAgLTM1Nyw2ICszNTksMTAgQEAKIAkJCXNwZWVkID0gQURfTElOS19TUEVFRF9CSVRNQVNLXzEwMDBNQlBTOwogCQkJYnJlYWs7CiAKKwkJY2FzZSBTUEVFRF8xMDAwMDoKKwkJCXNwZWVkID0gQURfTElOS19TUEVFRF9CSVRNQVNLXzEwMDAwTUJQUzsKKwkJCWJyZWFrOworCiAJCWRlZmF1bHQ6CiAJCQlzcGVlZCA9IDA7IC8vIHVua25vd24gc3BlZWQgdmFsdWUgZnJvbSBldGh0b29sLiBzaG91bGRuJ3QgaGFwcGVuCiAJCQlicmVhazsKQEAgLTQxNCwyMyArNDIwLDIzIEBACiAKIC8vY29udmVyc2lvbnMKIC8qKgotICogX19udG9oc19sYWNwZHUgLSBjb252ZXJ0IHRoZSBjb250ZW50cyBvZiBhIExBQ1BEVSB0byBob3N0IGJ5dGUgb3JkZXIKKyAqIF9faHRvbnNfbGFjcGR1IC0gY29udmVydCB0aGUgY29udGVudHMgb2YgYSBMQUNQRFUgdG8gbmV0d29yayBieXRlIG9yZGVyCiAgKiBAbGFjcGR1OiB0aGUgc3BlaWNpZmVkIGxhY3BkdQogICoKICAqIEZvciBlYWNoIG11bHRpLWJ5dGUgZmllbGQgaW4gdGhlIGxhY3BkdSwgY29udmVydCBpdHMgY29udGVudAogICovCi1zdGF0aWMgdm9pZCBfX250b2hzX2xhY3BkdShzdHJ1Y3QgbGFjcGR1ICpsYWNwZHUpCitzdGF0aWMgdm9pZCBfX2h0b25zX2xhY3BkdShzdHJ1Y3QgbGFjcGR1ICpsYWNwZHUpCiB7CiAJaWYgKGxhY3BkdSkgewotCQlsYWNwZHUtPmFjdG9yX3N5c3RlbV9wcmlvcml0eSA9ICAgbnRvaHMobGFjcGR1LT5hY3Rvcl9zeXN0ZW1fcHJpb3JpdHkpOwotCQlsYWNwZHUtPmFjdG9yX2tleSA9ICAgICAgICAgICAgICAgbnRvaHMobGFjcGR1LT5hY3Rvcl9rZXkpOwotCQlsYWNwZHUtPmFjdG9yX3BvcnRfcHJpb3JpdHkgPSAgICAgbnRvaHMobGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5KTsKLQkJbGFjcGR1LT5hY3Rvcl9wb3J0ID0gICAgICAgICAgICAgIG50b2hzKGxhY3BkdS0+YWN0b3JfcG9ydCk7Ci0JCWxhY3BkdS0+cGFydG5lcl9zeXN0ZW1fcHJpb3JpdHkgPSBudG9ocyhsYWNwZHUtPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5KTsKLQkJbGFjcGR1LT5wYXJ0bmVyX2tleSA9ICAgICAgICAgICAgIG50b2hzKGxhY3BkdS0+cGFydG5lcl9rZXkpOwotCQlsYWNwZHUtPnBhcnRuZXJfcG9ydF9wcmlvcml0eSA9ICAgbnRvaHMobGFjcGR1LT5wYXJ0bmVyX3BvcnRfcHJpb3JpdHkpOwotCQlsYWNwZHUtPnBhcnRuZXJfcG9ydCA9ICAgICAgICAgICAgbnRvaHMobGFjcGR1LT5wYXJ0bmVyX3BvcnQpOwotCQlsYWNwZHUtPmNvbGxlY3Rvcl9tYXhfZGVsYXkgPSAgICAgbnRvaHMobGFjcGR1LT5jb2xsZWN0b3JfbWF4X2RlbGF5KTsKKwkJbGFjcGR1LT5hY3Rvcl9zeXN0ZW1fcHJpb3JpdHkgPSAgIGh0b25zKGxhY3BkdS0+YWN0b3Jfc3lzdGVtX3ByaW9yaXR5KTsKKwkJbGFjcGR1LT5hY3Rvcl9rZXkgPSAgICAgICAgICAgICAgIGh0b25zKGxhY3BkdS0+YWN0b3Jfa2V5KTsKKwkJbGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5ID0gICAgIGh0b25zKGxhY3BkdS0+YWN0b3JfcG9ydF9wcmlvcml0eSk7CisJCWxhY3BkdS0+YWN0b3JfcG9ydCA9ICAgICAgICAgICAgICBodG9ucyhsYWNwZHUtPmFjdG9yX3BvcnQpOworCQlsYWNwZHUtPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5ID0gaHRvbnMobGFjcGR1LT5wYXJ0bmVyX3N5c3RlbV9wcmlvcml0eSk7CisJCWxhY3BkdS0+cGFydG5lcl9rZXkgPSAgICAgICAgICAgICBodG9ucyhsYWNwZHUtPnBhcnRuZXJfa2V5KTsKKwkJbGFjcGR1LT5wYXJ0bmVyX3BvcnRfcHJpb3JpdHkgPSAgIGh0b25zKGxhY3BkdS0+cGFydG5lcl9wb3J0X3ByaW9yaXR5KTsKKwkJbGFjcGR1LT5wYXJ0bmVyX3BvcnQgPSAgICAgICAgICAgIGh0b25zKGxhY3BkdS0+cGFydG5lcl9wb3J0KTsKKwkJbGFjcGR1LT5jb2xsZWN0b3JfbWF4X2RlbGF5ID0gICAgIGh0b25zKGxhY3BkdS0+Y29sbGVjdG9yX21heF9kZWxheSk7CiAJfQogfQogCkBAIC00OTAsMTEgKzQ5NiwxMSBAQAogCS8vIHZhbGlkYXRlIGxhY3BkdSBhbmQgcG9ydAogCWlmIChsYWNwZHUgJiYgcG9ydCkgewogCQkvLyByZWNvcmQgdGhlIG5ldyBwYXJhbWV0ZXIgdmFsdWVzIGZvciB0aGUgcGFydG5lciBvcGVyYXRpb25hbAotCQlwb3J0LT5wYXJ0bmVyX29wZXJfcG9ydF9udW1iZXIgPSBsYWNwZHUtPmFjdG9yX3BvcnQ7Ci0JCXBvcnQtPnBhcnRuZXJfb3Blcl9wb3J0X3ByaW9yaXR5ID0gbGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5OworCQlwb3J0LT5wYXJ0bmVyX29wZXJfcG9ydF9udW1iZXIgPSBudG9ocyhsYWNwZHUtPmFjdG9yX3BvcnQpOworCQlwb3J0LT5wYXJ0bmVyX29wZXJfcG9ydF9wcmlvcml0eSA9IG50b2hzKGxhY3BkdS0+YWN0b3JfcG9ydF9wcmlvcml0eSk7CiAJCXBvcnQtPnBhcnRuZXJfb3Blcl9zeXN0ZW0gPSBsYWNwZHUtPmFjdG9yX3N5c3RlbTsKLQkJcG9ydC0+cGFydG5lcl9vcGVyX3N5c3RlbV9wcmlvcml0eSA9IGxhY3BkdS0+YWN0b3Jfc3lzdGVtX3ByaW9yaXR5OwotCQlwb3J0LT5wYXJ0bmVyX29wZXJfa2V5ID0gbGFjcGR1LT5hY3Rvcl9rZXk7CisJCXBvcnQtPnBhcnRuZXJfb3Blcl9zeXN0ZW1fcHJpb3JpdHkgPSBudG9ocyhsYWNwZHUtPmFjdG9yX3N5c3RlbV9wcmlvcml0eSk7CisJCXBvcnQtPnBhcnRuZXJfb3Blcl9rZXkgPSBudG9ocyhsYWNwZHUtPmFjdG9yX2tleSk7CiAJCS8vIHplcm8gcGFydGVuZXIncyBsYXNlIHN0YXRlcwogCQlwb3J0LT5wYXJ0bmVyX29wZXJfcG9ydF9zdGF0ZSA9IDA7CiAJCXBvcnQtPnBhcnRuZXJfb3Blcl9wb3J0X3N0YXRlIHw9IChsYWNwZHUtPmFjdG9yX3N0YXRlICYgQURfU1RBVEVfTEFDUF9BQ1RJVklUWSk7CkBAIC01NjEsMTEgKzU2NywxMSBAQAogCS8vIHZhbGlkYXRlIGxhY3BkdSBhbmQgcG9ydAogCWlmIChsYWNwZHUgJiYgcG9ydCkgewogCQkvLyBjaGVjayBpZiBhbnkgcGFyYW1ldGVyIGlzIGRpZmZlcmVudAotCQlpZiAoKGxhY3BkdS0+YWN0b3JfcG9ydCAhPSBwb3J0LT5wYXJ0bmVyX29wZXJfcG9ydF9udW1iZXIpIHx8Ci0JCSAgICAobGFjcGR1LT5hY3Rvcl9wb3J0X3ByaW9yaXR5ICE9IHBvcnQtPnBhcnRuZXJfb3Blcl9wb3J0X3ByaW9yaXR5KSB8fAorCQlpZiAoKG50b2hzKGxhY3BkdS0+YWN0b3JfcG9ydCkgIT0gcG9ydC0+cGFydG5lcl9vcGVyX3BvcnRfbnVtYmVyKSB8fAorCQkgICAgKG50b2hzKGxhY3BkdS0+YWN0b3JfcG9ydF9wcmlvcml0eSkgIT0gcG9ydC0+cGFydG5lcl9vcGVyX3BvcnRfcHJpb3JpdHkpIHx8CiAJCSAgICBNQUNfQUREUkVTU19DT01QQVJFKCYobGFjcGR1LT5hY3Rvcl9zeXN0ZW0pLCAmKHBvcnQtPnBhcnRuZXJfb3Blcl9zeXN0ZW0pKSB8fAotCQkgICAgKGxhY3BkdS0+YWN0b3Jfc3lzdGVtX3ByaW9yaXR5ICE9IHBvcnQtPnBhcnRuZXJfb3Blcl9zeXN0ZW1fcHJpb3JpdHkpIHx8Ci0JCSAgICAobGFjcGR1LT5hY3Rvcl9rZXkgIT0gcG9ydC0+cGFydG5lcl9vcGVyX2tleSkgfHwKKwkJICAgIChudG9ocyhsYWNwZHUtPmFjdG9yX3N5c3RlbV9wcmlvcml0eSkgIT0gcG9ydC0+cGFydG5lcl9vcGVyX3N5c3RlbV9wcmlvcml0eSkgfHwKKwkJICAgIChudG9ocyhsYWNwZHUtPmFjdG9yX2tleSkgIT0gcG9ydC0+cGFydG5lcl9vcGVyX2tleSkgfHwKIAkJICAgICgobGFjcGR1LT5hY3Rvcl9zdGF0ZSAmIEFEX1NUQVRFX0FHR1JFR0FUSU9OKSAhPSAocG9ydC0+cGFydG5lcl9vcGVyX3BvcnRfc3RhdGUgJiBBRF9TVEFURV9BR0dSRUdBVElPTikpCiAJCSAgICkgewogCQkJLy8gdXBkYXRlIHRoZSBzdGF0ZSBtYWNoaW5lIFNlbGVjdGVkIHZhcmlhYmxlCkBAIC02MjgsMTEgKzYzNCwxMSBAQAogCS8vIHZhbGlkYXRlIGxhY3BkdSBhbmQgcG9ydAogCWlmIChsYWNwZHUgJiYgcG9ydCkgewogCQkvLyBjaGVjayBpZiBhbGwgcGFyYW1ldGVycyBhcmUgYWxpa2UKLQkJaWYgKCgobGFjcGR1LT5wYXJ0bmVyX3BvcnQgPT0gcG9ydC0+YWN0b3JfcG9ydF9udW1iZXIpICYmCi0JCSAgICAgKGxhY3BkdS0+cGFydG5lcl9wb3J0X3ByaW9yaXR5ID09IHBvcnQtPmFjdG9yX3BvcnRfcHJpb3JpdHkpICYmCisJCWlmICgoKG50b2hzKGxhY3BkdS0+cGFydG5lcl9wb3J0KSA9PSBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcikgJiYKKwkJICAgICAobnRvaHMobGFjcGR1LT5wYXJ0bmVyX3BvcnRfcHJpb3JpdHkpID09IHBvcnQtPmFjdG9yX3BvcnRfcHJpb3JpdHkpICYmCiAJCSAgICAgIU1BQ19BRERSRVNTX0NPTVBBUkUoJihsYWNwZHUtPnBhcnRuZXJfc3lzdGVtKSwgJihwb3J0LT5hY3Rvcl9zeXN0ZW0pKSAmJgotCQkgICAgIChsYWNwZHUtPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5ID09IHBvcnQtPmFjdG9yX3N5c3RlbV9wcmlvcml0eSkgJiYKLQkJICAgICAobGFjcGR1LT5wYXJ0bmVyX2tleSA9PSBwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfa2V5KSAmJgorCQkgICAgIChudG9ocyhsYWNwZHUtPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5KSA9PSBwb3J0LT5hY3Rvcl9zeXN0ZW1fcHJpb3JpdHkpICYmCisJCSAgICAgKG50b2hzKGxhY3BkdS0+cGFydG5lcl9rZXkpID09IHBvcnQtPmFjdG9yX29wZXJfcG9ydF9rZXkpICYmCiAJCSAgICAgKChsYWNwZHUtPnBhcnRuZXJfc3RhdGUgJiBBRF9TVEFURV9BR0dSRUdBVElPTikgPT0gKHBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSAmIEFEX1NUQVRFX0FHR1JFR0FUSU9OKSkpIHx8CiAJCSAgICAvLyBvciB0aGlzIGlzIGluZGl2aWR1YWwgbGluayhhZ2dyZWdhdGlvbiA9PSBGQUxTRSkKIAkJICAgICgobGFjcGR1LT5hY3Rvcl9zdGF0ZSAmIEFEX1NUQVRFX0FHR1JFR0FUSU9OKSA9PSAwKQpAQCAtNjYyLDExICs2NjgsMTEgQEAKIAkvLyB2YWxpZGF0ZSBsYWNwZHUgYW5kIHBvcnQKIAlpZiAobGFjcGR1ICYmIHBvcnQpIHsKIAkJLy8gY2hlY2sgaWYgYW55IHBhcmFtZXRlciBpcyBkaWZmZXJlbnQKLQkJaWYgKChsYWNwZHUtPnBhcnRuZXJfcG9ydCAhPSBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcikgfHwKLQkJICAgIChsYWNwZHUtPnBhcnRuZXJfcG9ydF9wcmlvcml0eSAhPSBwb3J0LT5hY3Rvcl9wb3J0X3ByaW9yaXR5KSB8fAorCQlpZiAoKG50b2hzKGxhY3BkdS0+cGFydG5lcl9wb3J0KSAhPSBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcikgfHwKKwkJICAgIChudG9ocyhsYWNwZHUtPnBhcnRuZXJfcG9ydF9wcmlvcml0eSkgIT0gcG9ydC0+YWN0b3JfcG9ydF9wcmlvcml0eSkgfHwKIAkJICAgIE1BQ19BRERSRVNTX0NPTVBBUkUoJihsYWNwZHUtPnBhcnRuZXJfc3lzdGVtKSwgJihwb3J0LT5hY3Rvcl9zeXN0ZW0pKSB8fAotCQkgICAgKGxhY3BkdS0+cGFydG5lcl9zeXN0ZW1fcHJpb3JpdHkgIT0gcG9ydC0+YWN0b3Jfc3lzdGVtX3ByaW9yaXR5KSB8fAotCQkgICAgKGxhY3BkdS0+cGFydG5lcl9rZXkgIT0gcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X2tleSkgfHwKKwkJICAgIChudG9ocyhsYWNwZHUtPnBhcnRuZXJfc3lzdGVtX3ByaW9yaXR5KSAhPSBwb3J0LT5hY3Rvcl9zeXN0ZW1fcHJpb3JpdHkpIHx8CisJCSAgICAobnRvaHMobGFjcGR1LT5wYXJ0bmVyX2tleSkgIT0gcG9ydC0+YWN0b3Jfb3Blcl9wb3J0X2tleSkgfHwKIAkJICAgICgobGFjcGR1LT5wYXJ0bmVyX3N0YXRlICYgQURfU1RBVEVfTEFDUF9BQ1RJVklUWSkgIT0gKHBvcnQtPmFjdG9yX29wZXJfcG9ydF9zdGF0ZSAmIEFEX1NUQVRFX0xBQ1BfQUNUSVZJVFkpKSB8fAogCQkgICAgKChsYWNwZHUtPnBhcnRuZXJfc3RhdGUgJiBBRF9TVEFURV9MQUNQX1RJTUVPVVQpICE9IChwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgJiBBRF9TVEFURV9MQUNQX1RJTUVPVVQpKSB8fAogCQkgICAgKChsYWNwZHUtPnBhcnRuZXJfc3RhdGUgJiBBRF9TVEFURV9TWU5DSFJPTklaQVRJT04pICE9IChwb3J0LT5hY3Rvcl9vcGVyX3BvcnRfc3RhdGUgJiBBRF9TVEFURV9TWU5DSFJPTklaQVRJT04pKSB8fApAQCAtNzc1LDYgKzc4MSw5IEBACiAJCWNhc2UgQURfTElOS19TUEVFRF9CSVRNQVNLXzEwMDBNQlBTOgogCQkJYmFuZHdpZHRoID0gYWdncmVnYXRvci0+bnVtX29mX3BvcnRzICogMTAwMDsKIAkJCWJyZWFrOworCQljYXNlIEFEX0xJTktfU1BFRURfQklUTUFTS18xMDAwME1CUFM6CisJCQliYW5kd2lkdGggPSBhZ2dyZWdhdG9yLT5udW1fb2ZfcG9ydHMgKiAxMDAwMDsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJYmFuZHdpZHRoPTA7IC8vIHRvIHNpbGVudCB0aGUgY29tcGlsb3IgLi4uLgogCQl9CkBAIC04NDcsNyArODU2LDcgQEAKIAkgKi8KIAogCS8qIENvbnZlcnQgYWxsIG5vbiB1OCBwYXJhbWV0ZXJzIHRvIEJpZyBFbmRpYW4gZm9yIHRyYW5zbWl0ICovCi0JX19udG9oc19sYWNwZHUobGFjcGR1KTsKKwlfX2h0b25zX2xhY3BkdShsYWNwZHUpOwogfQogCiAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMjE3MSw3ICsyMTgwLDYgQEAKIAogCQlzd2l0Y2ggKGxhY3BkdS0+c3VidHlwZSkgewogCQljYXNlIEFEX1RZUEVfTEFDUERVOgotCQkJX19udG9oc19sYWNwZHUobGFjcGR1KTsKIAkJCWRwcmludGsoIlJlY2VpdmVkIExBQ1BEVSBvbiBwb3J0ICVkXG4iLCBwb3J0LT5hY3Rvcl9wb3J0X251bWJlcik7CiAJCQlhZF9yeF9tYWNoaW5lKGxhY3BkdSwgcG9ydCk7CiAJCQlicmVhazsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMgYi9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCmluZGV4IDg1MGFhZTIuLmMwYmJkZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwpAQCAtOTYsNiArOTYsNyBAQAogc3RhdGljIGNoYXIgKnhtaXRfaGFzaF9wb2xpY3kgPSBOVUxMOwogc3RhdGljIGludCBhcnBfaW50ZXJ2YWwgPSBCT05EX0xJTktfQVJQX0lOVEVSVjsKIHN0YXRpYyBjaGFyICphcnBfaXBfdGFyZ2V0W0JPTkRfTUFYX0FSUF9UQVJHRVRTXSA9IHsgTlVMTCwgfTsKK3N0YXRpYyBjaGFyICphcnBfdmFsaWRhdGUgPSBOVUxMOwogc3RydWN0IGJvbmRfcGFyYW1zIGJvbmRpbmdfZGVmYXVsdHM7CiAKIG1vZHVsZV9wYXJhbShtYXhfYm9uZHMsIGludCwgMCk7CkBAIC0xMjcsNiArMTI4LDggQEAKIE1PRFVMRV9QQVJNX0RFU0MoYXJwX2ludGVydmFsLCAiYXJwIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyIpOwogbW9kdWxlX3BhcmFtX2FycmF5KGFycF9pcF90YXJnZXQsIGNoYXJwLCBOVUxMLCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoYXJwX2lwX3RhcmdldCwgImFycCB0YXJnZXRzIGluIG4ubi5uLm4gZm9ybSIpOworbW9kdWxlX3BhcmFtKGFycF92YWxpZGF0ZSwgY2hhcnAsIDApOworTU9EVUxFX1BBUk1fREVTQyhhcnBfdmFsaWRhdGUsICJ2YWxpZGF0ZSBzcmMvZHN0IG9mIEFSUCBwcm9iZXM6IG5vbmUgKGRlZmF1bHQpLCBhY3RpdmUsIGJhY2t1cCBvciBhbGwiKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBHbG9iYWwgdmFyaWFibGVzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC0xNzAsNiArMTczLDE0IEBACiB7CU5VTEwsCQkJLTF9LAogfTsKIAorc3RydWN0IGJvbmRfcGFybV90YmwgYXJwX3ZhbGlkYXRlX3RibFtdID0geworewkibm9uZSIsCQkJQk9ORF9BUlBfVkFMSURBVEVfTk9ORX0sCit7CSJhY3RpdmUiLAkJQk9ORF9BUlBfVkFMSURBVEVfQUNUSVZFfSwKK3sJImJhY2t1cCIsCQlCT05EX0FSUF9WQUxJREFURV9CQUNLVVB9LAorewkiYWxsIiwJCQlCT05EX0FSUF9WQUxJREFURV9BTEx9LAorewlOVUxMLAkJCS0xfSwKK307CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRm9yd2FyZCBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQgYm9uZF9zZW5kX2dyYXR1aXRvdXNfYXJwKHN0cnVjdCBib25kaW5nICpib25kKTsKQEAgLTYzOCw2ICs2NDksNyBAQAogCWNhc2UgU1BFRURfMTA6CiAJY2FzZSBTUEVFRF8xMDA6CiAJY2FzZSBTUEVFRF8xMDAwOgorCWNhc2UgU1BFRURfMTAwMDA6CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtMTsKQEAgLTEyMTAsMTAgKzEyMjIsMTQgQEAKIAl1bnNpZ25lZCBsb25nIGZlYXR1cmVzID0gQk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVM7CiAJc3RydWN0IHNsYXZlICpzbGF2ZTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqYm9uZF9kZXYgPSBib25kLT5kZXY7CisJdW5zaWduZWQgc2hvcnQgbWF4X2hhcmRfaGVhZGVyX2xlbiA9IEVUSF9ITEVOOwogCWludCBpOwogCi0JYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkKKwlib25kX2Zvcl9lYWNoX3NsYXZlKGJvbmQsIHNsYXZlLCBpKSB7CiAJCWZlYXR1cmVzICY9IChzbGF2ZS0+ZGV2LT5mZWF0dXJlcyAmIEJPTkRfSU5URVJTRUNUX0ZFQVRVUkVTKTsKKwkJaWYgKHNsYXZlLT5kZXYtPmhhcmRfaGVhZGVyX2xlbiA+IG1heF9oYXJkX2hlYWRlcl9sZW4pCisJCQltYXhfaGFyZF9oZWFkZXJfbGVuID0gc2xhdmUtPmRldi0+aGFyZF9oZWFkZXJfbGVuOworCX0KIAogCWlmICgoZmVhdHVyZXMgJiBORVRJRl9GX1NHKSAmJiAKIAkgICAgIShmZWF0dXJlcyAmIE5FVElGX0ZfQUxMX0NTVU0pKQpAQCAtMTIzMSw2ICsxMjQ3LDcgQEAKIAogCWZlYXR1cmVzIHw9IChib25kX2Rldi0+ZmVhdHVyZXMgJiB+Qk9ORF9JTlRFUlNFQ1RfRkVBVFVSRVMpOwogCWJvbmRfZGV2LT5mZWF0dXJlcyA9IGZlYXR1cmVzOworCWJvbmRfZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSBtYXhfaGFyZF9oZWFkZXJfbGVuOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzY1LDYgKzEzODIsNyBAQAogCX0KIAogCW5ld19zbGF2ZS0+ZGV2ID0gc2xhdmVfZGV2OworCXNsYXZlX2Rldi0+cHJpdl9mbGFncyB8PSBJRkZfQk9ORElORzsKIAogCWlmICgoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFX1RMQikgfHwKIAkgICAgKGJvbmQtPnBhcmFtcy5tb2RlID09IEJPTkRfTU9ERV9BTEIpKSB7CkBAIC0xNDE3LDYgKzE0MzUsOCBAQAogCiAJYm9uZF9jb21wdXRlX2ZlYXR1cmVzKGJvbmQpOwogCisJbmV3X3NsYXZlLT5sYXN0X2FycF9yeCA9IGppZmZpZXM7CisKIAlpZiAoYm9uZC0+cGFyYW1zLm1paW1vbiAmJiAhYm9uZC0+cGFyYW1zLnVzZV9jYXJyaWVyKSB7CiAJCWxpbmtfcmVwb3J0aW5nID0gYm9uZF9jaGVja19kZXZfbGluayhib25kLCBzbGF2ZV9kZXYsIDEpOwogCkBAIC0xNDkzLDI5ICsxNTEzLDggQEAKIAogCXN3aXRjaCAoYm9uZC0+cGFyYW1zLm1vZGUpIHsKIAljYXNlIEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVA6Ci0JCS8qIGlmIHdlJ3JlIGluIGFjdGl2ZS1iYWNrdXAgbW9kZSwgd2UgbmVlZCBvbmUgYW5kCi0JCSAqIG9ubHkgb25lIGFjdGl2ZSBpbnRlcmZhY2UuIFRoZSBiYWNrdXAgaW50ZXJmYWNlcwotCQkgKiB3aWxsIGhhdmUgdGhlaXIgU0xBVkVfSU5BQ1RJVkUgZmxhZyBzZXQgYmVjYXVzZSB3ZQotCQkgKiBuZWVkIHRoZW0gdG8gYmUgZHJvcCBhbGwgcGFja2V0cy4gVGh1cywgc2luY2Ugd2UKLQkJICogZ3VhcmFudGVlIHRoYXQgY3Vycl9hY3RpdmVfc2xhdmUgYWx3YXlzIHBvaW50IHRvCi0JCSAqIHRoZSBsYXN0IHVzYWJsZSBpbnRlcmZhY2UsIHdlIGp1c3QgaGF2ZSB0byB2ZXJpZnkKLQkJICogdGhpcyBpbnRlcmZhY2UncyBmbGFnLgotCQkgKi8KLQkJaWYgKCgoIWJvbmQtPmN1cnJfYWN0aXZlX3NsYXZlKSB8fAotCQkgICAgIChib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZS0+ZGV2LT5wcml2X2ZsYWdzICYgSUZGX1NMQVZFX0lOQUNUSVZFKSkgJiYKLQkJICAgIChuZXdfc2xhdmUtPmxpbmsgIT0gQk9ORF9MSU5LX0RPV04pKSB7Ci0JCQkvKiBmaXJzdCBzbGF2ZSBvciBubyBhY3RpdmUgc2xhdmUgeWV0LCBhbmQgdGhpcyBsaW5rCi0JCQkgICBpcyBPSywgc28gbWFrZSB0aGlzIGludGVyZmFjZSB0aGUgYWN0aXZlIG9uZSAqLwotCQkJYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKGJvbmQsIG5ld19zbGF2ZSk7Ci0JCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCQkgICAgICAgIjogJXM6IGZpcnN0IGFjdGl2ZSBpbnRlcmZhY2UgdXAhXG4iLAotCQkJICAgICAgIGJvbmQtPmRldi0+bmFtZSk7Ci0JCQluZXRpZl9jYXJyaWVyX29uKGJvbmQtPmRldik7Ci0KLQkJfSBlbHNlIHsKLQkJCWRwcmludGsoIlRoaXMgaXMganVzdCBhIGJhY2t1cCBzbGF2ZVxuIik7Ci0JCQlib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhuZXdfc2xhdmUpOwotCQl9CisJCWJvbmRfc2V0X3NsYXZlX2luYWN0aXZlX2ZsYWdzKG5ld19zbGF2ZSk7CisJCWJvbmRfc2VsZWN0X2FjdGl2ZV9zbGF2ZShib25kKTsKIAkJYnJlYWs7CiAJY2FzZSBCT05EX01PREVfODAyM0FEOgogCQkvKiBpbiA4MDIuM2FkIG1vZGUsIHRoZSBpbnRlcm5hbCBtZWNoYW5pc20KQEAgLTE3NzgsNyArMTc3Nyw4IEBACiAJZGV2X3NldF9tYWNfYWRkcmVzcyhzbGF2ZV9kZXYsICZhZGRyKTsKIAogCXNsYXZlX2Rldi0+cHJpdl9mbGFncyAmPSB+KElGRl9NQVNURVJfODAyM0FEIHwgSUZGX01BU1RFUl9BTEIgfAotCQkJCSAgIElGRl9TTEFWRV9JTkFDVElWRSk7CisJCQkJICAgSUZGX1NMQVZFX0lOQUNUSVZFIHwgSUZGX0JPTkRJTkcgfAorCQkJCSAgIElGRl9TTEFWRV9ORUVEQVJQKTsKIAogCWtmcmVlKHNsYXZlKTsKIApAQCAtMjI1Miw3ICsyMjUyLDcgQEAKIHsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppZGV2OwogCXN0cnVjdCBpbl9pZmFkZHIgKmlmYTsKLQl1MzIgYWRkciA9IDA7CisJX19iZTMyIGFkZHIgPSAwOwogCiAJaWYgKCFkZXYpCiAJCXJldHVybiAwOwpAQCAtMjI5MSw2ICsyMjkxLDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYm9uZF9oYXNfdGhpc19pcChzdHJ1Y3QgYm9uZGluZyAqYm9uZCwgdTMyIGlwKQoreworCXN0cnVjdCB2bGFuX2VudHJ5ICp2bGFuLCAqdmxhbl9uZXh0OworCisJaWYgKGlwID09IGJvbmQtPm1hc3Rlcl9pcCkKKwkJcmV0dXJuIDE7CisKKwlpZiAobGlzdF9lbXB0eSgmYm9uZC0+dmxhbl9saXN0KSkKKwkJcmV0dXJuIDA7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUodmxhbiwgdmxhbl9uZXh0LCAmYm9uZC0+dmxhbl9saXN0LAorCQkJCSB2bGFuX2xpc3QpIHsKKwkJaWYgKGlwID09IHZsYW4tPnZsYW5faXApCisJCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFdlIGdvIHRvIHRoZSAobGFyZ2UpIHRyb3VibGUgb2YgVkxBTiB0YWdnaW5nIEFSUCBmcmFtZXMgYmVjYXVzZQogICogc3dpdGNoZXMgaW4gVkxBTiBtb2RlIChlc3BlY2lhbGx5IGlmIHBvcnRzIGFyZSBjb25maWd1cmVkIGFzCkBAIC0yNDI5LDYgKzI0NDgsOTMgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIGJvbmRfdmFsaWRhdGVfYXJwKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlLCB1MzIgc2lwLCB1MzIgdGlwKQoreworCWludCBpOworCXUzMiAqdGFyZ2V0cyA9IGJvbmQtPnBhcmFtcy5hcnBfdGFyZ2V0czsKKworCXRhcmdldHMgPSBib25kLT5wYXJhbXMuYXJwX3RhcmdldHM7CisJZm9yIChpID0gMDsgKGkgPCBCT05EX01BWF9BUlBfVEFSR0VUUykgJiYgdGFyZ2V0c1tpXTsgaSsrKSB7CisJCWRwcmludGsoImJ2YTogc2lwICV1LiV1LiV1LiV1IHRpcCAldS4ldS4ldS4ldSB0WyVkXSAiCisJCQkiJXUuJXUuJXUuJXUgYmh0aSh0aXApICVkXG4iLAorCQkgICAgICAgTklQUVVBRChzaXApLCBOSVBRVUFEKHRpcCksIGksIE5JUFFVQUQodGFyZ2V0c1tpXSksCisJCSAgICAgICBib25kX2hhc190aGlzX2lwKGJvbmQsIHRpcCkpOworCQlpZiAoc2lwID09IHRhcmdldHNbaV0pIHsKKwkJCWlmIChib25kX2hhc190aGlzX2lwKGJvbmQsIHRpcCkpCisJCQkJc2xhdmUtPmxhc3RfYXJwX3J4ID0gamlmZmllczsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBib25kX2FycF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHBhY2tldF90eXBlICpwdCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KQoreworCXN0cnVjdCBhcnBoZHIgKmFycDsKKwlzdHJ1Y3Qgc2xhdmUgKnNsYXZlOworCXN0cnVjdCBib25kaW5nICpib25kOworCXVuc2lnbmVkIGNoYXIgKmFycF9wdHI7CisJdTMyIHNpcCwgdGlwOworCisJaWYgKCEoZGV2LT5wcml2X2ZsYWdzICYgSUZGX0JPTkRJTkcpIHx8ICEoZGV2LT5mbGFncyAmIElGRl9NQVNURVIpKQorCQlnb3RvIG91dDsKKworCWJvbmQgPSBkZXYtPnByaXY7CisJcmVhZF9sb2NrKCZib25kLT5sb2NrKTsKKworCWRwcmludGsoImJvbmRfYXJwX3JjdjogYm9uZCAlcyBza2ItPmRldiAlcyBvcmlnX2RldiAlc1xuIiwKKwkJYm9uZC0+ZGV2LT5uYW1lLCBza2ItPmRldiA/IHNrYi0+ZGV2LT5uYW1lIDogIk5VTEwiLAorCQlvcmlnX2RldiA/IG9yaWdfZGV2LT5uYW1lIDogIk5VTEwiKTsKKworCXNsYXZlID0gYm9uZF9nZXRfc2xhdmVfYnlfZGV2KGJvbmQsIG9yaWdfZGV2KTsKKwlpZiAoIXNsYXZlIHx8ICFzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwkvKiBBUlAgaGVhZGVyLCBwbHVzIDIgZGV2aWNlIGFkZHJlc3NlcywgcGx1cyAyIElQIGFkZHJlc3Nlcy4gICovCisJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgKHNpemVvZihzdHJ1Y3QgYXJwaGRyKSArCisJCQkJICgyICogZGV2LT5hZGRyX2xlbikgKworCQkJCSAoMiAqIHNpemVvZih1MzIpKSkpKQorCQlnb3RvIG91dF91bmxvY2s7CisKKwlhcnAgPSBza2ItPm5oLmFycGg7CisJaWYgKGFycC0+YXJfaGxuICE9IGRldi0+YWRkcl9sZW4gfHwKKwkgICAgc2tiLT5wa3RfdHlwZSA9PSBQQUNLRVRfT1RIRVJIT1NUIHx8CisJICAgIHNrYi0+cGt0X3R5cGUgPT0gUEFDS0VUX0xPT1BCQUNLIHx8CisJICAgIGFycC0+YXJfaHJkICE9IGh0b25zKEFSUEhSRF9FVEhFUikgfHwKKwkgICAgYXJwLT5hcl9wcm8gIT0gaHRvbnMoRVRIX1BfSVApIHx8CisJICAgIGFycC0+YXJfcGxuICE9IDQpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWFycF9wdHIgPSAodW5zaWduZWQgY2hhciAqKShhcnAgKyAxKTsKKwlhcnBfcHRyICs9IGRldi0+YWRkcl9sZW47CisJbWVtY3B5KCZzaXAsIGFycF9wdHIsIDQpOworCWFycF9wdHIgKz0gNCArIGRldi0+YWRkcl9sZW47CisJbWVtY3B5KCZ0aXAsIGFycF9wdHIsIDQpOworCisJZHByaW50aygiYm9uZF9hcnBfcmN2OiAlcyAlcy8lZCBhdiAlZCBzdiAlZCBzaXAgJXUuJXUuJXUuJXUiCisJCSIgdGlwICV1LiV1LiV1LiV1XG4iLCBib25kLT5kZXYtPm5hbWUsIHNsYXZlLT5kZXYtPm5hbWUsCisJCXNsYXZlLT5zdGF0ZSwgYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSwKKwkJc2xhdmVfZG9fYXJwX3ZhbGlkYXRlKGJvbmQsIHNsYXZlKSwgTklQUVVBRChzaXApLCBOSVBRVUFEKHRpcCkpOworCisJLyoKKwkgKiBCYWNrdXAgc2xhdmVzIHdvbid0IHNlZSB0aGUgQVJQIHJlcGx5LCBidXQgZG8gY29tZSB0aHJvdWdoCisJICogaGVyZSBmb3IgZWFjaCBBUlAgcHJvYmUgKHNvIHdlIHN3YXAgdGhlIHNpcC90aXAgdG8gdmFsaWRhdGUKKwkgKiB0aGUgcHJvYmUpLiAgSW4gYSAicmVkdW5kYW50IHN3aXRjaCwgY29tbW9uIHJvdXRlciIgdHlwZSBvZgorCSAqIGNvbmZpZ3VyYXRpb24sIHRoZSBBUlAgcHJvYmUgd2lsbCAoaG9wZWZ1bGx5KSB0cmF2ZWwgZnJvbQorCSAqIHRoZSBhY3RpdmUsIHRocm91Z2ggb25lIHN3aXRjaCwgdGhlIHJvdXRlciwgdGhlbiB0aGUgb3RoZXIKKwkgKiBzd2l0Y2ggYmVmb3JlIHJlYWNoaW5nIHRoZSBiYWNrdXAuCisJICovCisJaWYgKHNsYXZlLT5zdGF0ZSA9PSBCT05EX1NUQVRFX0FDVElWRSkKKwkJYm9uZF92YWxpZGF0ZV9hcnAoYm9uZCwgc2xhdmUsIHNpcCwgdGlwKTsKKwllbHNlCisJCWJvbmRfdmFsaWRhdGVfYXJwKGJvbmQsIHNsYXZlLCB0aXAsIHNpcCk7CisKK291dF91bmxvY2s6CisJcmVhZF91bmxvY2soJmJvbmQtPmxvY2spOworb3V0OgorCWRldl9rZnJlZV9za2Ioc2tiKTsKKwlyZXR1cm4gTkVUX1JYX1NVQ0NFU1M7Cit9CisKIC8qCiAgKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCByZWd1bGFybHkgdG8gbW9uaXRvciBlYWNoIHNsYXZlJ3MgbGluawogICogZW5zdXJpbmcgdGhhdCB0cmFmZmljIGlzIGJlaW5nIHNlbnQgYW5kIHJlY2VpdmVkIHdoZW4gYXJwIG1vbml0b3JpbmcKQEAgLTI1OTMsNyArMjY5OSw4IEBACiAJICovCiAJYm9uZF9mb3JfZWFjaF9zbGF2ZShib25kLCBzbGF2ZSwgaSkgewogCQlpZiAoc2xhdmUtPmxpbmsgIT0gQk9ORF9MSU5LX1VQKSB7Ci0JCQlpZiAoKGppZmZpZXMgLSBzbGF2ZS0+ZGV2LT5sYXN0X3J4KSA8PSBkZWx0YV9pbl90aWNrcykgeworCQkJaWYgKChqaWZmaWVzIC0gc2xhdmVfbGFzdF9yeChib25kLCBzbGF2ZSkpIDw9CisJCQkgICAgIGRlbHRhX2luX3RpY2tzKSB7CiAKIAkJCQlzbGF2ZS0+bGluayA9IEJPTkRfTElOS19VUDsKIApAQCAtMjYzOCw3ICsyNzQ1LDcgQEAKIAogCQkJaWYgKChzbGF2ZSAhPSBib25kLT5jdXJyX2FjdGl2ZV9zbGF2ZSkgJiYKIAkJCSAgICAoIWJvbmQtPmN1cnJlbnRfYXJwX3NsYXZlKSAmJgotCQkJICAgICgoKGppZmZpZXMgLSBzbGF2ZS0+ZGV2LT5sYXN0X3J4KSA+PSAzKmRlbHRhX2luX3RpY2tzKSAmJgorCQkJICAgICgoKGppZmZpZXMgLSBzbGF2ZV9sYXN0X3J4KGJvbmQsIHNsYXZlKSkgPj0gMypkZWx0YV9pbl90aWNrcykgJiYKIAkJCSAgICAgYm9uZF9oYXNfaXAoYm9uZCkpKSB7CiAJCQkJLyogYSBiYWNrdXAgc2xhdmUgaGFzIGdvbmUgZG93bjsgdGhyZWUgdGltZXMKIAkJCQkgKiB0aGUgZGVsdGEgYWxsb3dzIHRoZSBjdXJyZW50IHNsYXZlIHRvIGJlCkBAIC0yNjg1LDcgKzI3OTIsNyBAQAogCQkgKiBpZiBpdCBpcyB1cCBhbmQgbmVlZHMgdG8gdGFrZSBvdmVyIGFzIHRoZSBjdXJyX2FjdGl2ZV9zbGF2ZQogCQkgKi8KIAkJaWYgKCgoKGppZmZpZXMgLSBzbGF2ZS0+ZGV2LT50cmFuc19zdGFydCkgPj0gKDIqZGVsdGFfaW5fdGlja3MpKSB8fAotCSAgICAoKChqaWZmaWVzIC0gc2xhdmUtPmRldi0+bGFzdF9yeCkgPj0gKDIqZGVsdGFfaW5fdGlja3MpKSAmJgorCSAgICAoKChqaWZmaWVzIC0gc2xhdmVfbGFzdF9yeChib25kLCBzbGF2ZSkpID49ICgyKmRlbHRhX2luX3RpY2tzKSkgJiYKIAkgICAgIGJvbmRfaGFzX2lwKGJvbmQpKSkgJiYKIAkJICAgICgoamlmZmllcyAtIHNsYXZlLT5qaWZmaWVzKSA+PSAyKmRlbHRhX2luX3RpY2tzKSkgewogCkBAIC0yOTUwLDcgKzMwNTcsNyBAQAogCXNlcV9wcmludGYoc2VxLCAiXG5TbGF2ZSBJbnRlcmZhY2U6ICVzXG4iLCBzbGF2ZS0+ZGV2LT5uYW1lKTsKIAlzZXFfcHJpbnRmKHNlcSwgIk1JSSBTdGF0dXM6ICVzXG4iLAogCQkgICAoc2xhdmUtPmxpbmsgPT0gQk9ORF9MSU5LX1VQKSA/ICAidXAiIDogImRvd24iKTsKLQlzZXFfcHJpbnRmKHNlcSwgIkxpbmsgRmFpbHVyZSBDb3VudDogJWRcbiIsCisJc2VxX3ByaW50ZihzZXEsICJMaW5rIEZhaWx1cmUgQ291bnQ6ICV1XG4iLAogCQkgICBzbGF2ZS0+bGlua19mYWlsdXJlX2NvdW50KTsKIAogCXNlcV9wcmludGYoc2VxLApAQCAtMzIxMCw2ICszMzE3LDkgQEAKIAkJKGV2ZW50X2RldiA/IGV2ZW50X2Rldi0+bmFtZSA6ICJOb25lIiksCiAJCWV2ZW50KTsKIAorCWlmICghKGV2ZW50X2Rldi0+cHJpdl9mbGFncyAmIElGRl9CT05ESU5HKSkKKwkJcmV0dXJuIE5PVElGWV9ET05FOworCiAJaWYgKGV2ZW50X2Rldi0+ZmxhZ3MgJiBJRkZfTUFTVEVSKSB7CiAJCWRwcmludGsoIklGRl9NQVNURVJcbiIpOwogCQlyZXR1cm4gYm9uZF9tYXN0ZXJfbmV0ZGV2X2V2ZW50KGV2ZW50LCBldmVudF9kZXYpOwpAQCAtMzMwNSw2ICszNDE1LDIxIEBACiAJZGV2X3JlbW92ZV9wYWNrKCYoQk9ORF9BRF9JTkZPKGJvbmQpLmFkX3BrdF90eXBlKSk7CiB9CiAKK3ZvaWQgYm9uZF9yZWdpc3Rlcl9hcnAoc3RydWN0IGJvbmRpbmcgKmJvbmQpCit7CisJc3RydWN0IHBhY2tldF90eXBlICpwdCA9ICZib25kLT5hcnBfbW9uX3B0OworCisJcHQtPnR5cGUgPSBodG9ucyhFVEhfUF9BUlApOworCXB0LT5kZXYgPSBOVUxMOyAvKmJvbmQtPmRldjtYWFgqLworCXB0LT5mdW5jID0gYm9uZF9hcnBfcmN2OworCWRldl9hZGRfcGFjayhwdCk7Cit9CisKK3ZvaWQgYm9uZF91bnJlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqYm9uZCkKK3sKKwlkZXZfcmVtb3ZlX3BhY2soJmJvbmQtPmFycF9tb25fcHQpOworfQorCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGFzaGluZyBQb2xpY2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qCkBAIC0zMzkxLDYgKzM1MTYsOSBAQAogCQl9IGVsc2UgewogCQkJYXJwX3RpbWVyLT5mdW5jdGlvbiA9ICh2b2lkICopJmJvbmRfbG9hZGJhbGFuY2VfYXJwX21vbjsKIAkJfQorCQlpZiAoYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSkKKwkJCWJvbmRfcmVnaXN0ZXJfYXJwKGJvbmQpOworCiAJCWFkZF90aW1lcihhcnBfdGltZXIpOwogCX0KIApAQCAtMzQxOCw5ICszNTQ2LDExIEBACiAJCWJvbmRfdW5yZWdpc3Rlcl9sYWNwZHUoYm9uZCk7CiAJfQogCisJaWYgKGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUpCisJCWJvbmRfdW5yZWdpc3Rlcl9hcnAoYm9uZCk7CisKIAl3cml0ZV9sb2NrX2JoKCZib25kLT5sb2NrKTsKIAotCWJvbmRfbWNfbGlzdF9kZXN0cm95KGJvbmQpOwogCiAJLyogc2lnbmFsIHRpbWVycyBub3QgdG8gcmUtYXJtICovCiAJYm9uZC0+a2lsbF90aW1lcnMgPSAxOwpAQCAtMzQ1MSw4ICszNTgxLDYgQEAKIAkJYnJlYWs7CiAJfQogCi0JLyogUmVsZWFzZSB0aGUgYm9uZGVkIHNsYXZlcyAqLwotCWJvbmRfcmVsZWFzZV9hbGwoYm9uZF9kZXYpOwogCiAJaWYgKChib25kLT5wYXJhbXMubW9kZSA9PSBCT05EX01PREVfVExCKSB8fAogCSAgICAoYm9uZC0+cGFyYW1zLm1vZGUgPT0gQk9ORF9NT0RFX0FMQikpIHsKQEAgLTQxNzksNiArNDMwNyw3IEBACiAJLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIG9wdGlvbnMgKi8KIAlib25kX2Rldi0+dHhfcXVldWVfbGVuID0gMDsKIAlib25kX2Rldi0+ZmxhZ3MgfD0gSUZGX01BU1RFUnxJRkZfTVVMVElDQVNUOworCWJvbmRfZGV2LT5wcml2X2ZsYWdzIHw9IElGRl9CT05ESU5HOwogCiAJLyogQXQgZmlyc3QsIHdlIGJsb2NrIGFkZGluZyBWTEFOcy4gVGhhdCdzIHRoZSBvbmx5IHdheSB0bwogCSAqIHByZXZlbnQgcHJvYmxlbXMgdGhhdCBvY2N1ciB3aGVuIGFkZGluZyBWTEFOcyBvdmVyIGFuCkBAIC00MjM3LDYgKzQzNjYsOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShib25kLCBueHQsICZib25kX2Rldl9saXN0LCBib25kX2xpc3QpIHsKIAkJc3RydWN0IG5ldF9kZXZpY2UgKmJvbmRfZGV2ID0gYm9uZC0+ZGV2OwogCisJCWJvbmRfbWNfbGlzdF9kZXN0cm95KGJvbmQpOworCQkvKiBSZWxlYXNlIHRoZSBib25kZWQgc2xhdmVzICovCisJCWJvbmRfcmVsZWFzZV9hbGwoYm9uZF9kZXYpOwogCQl1bnJlZ2lzdGVyX25ldGRldmljZShib25kX2Rldik7CiAJCWJvbmRfZGVpbml0KGJvbmRfZGV2KTsKIAl9CkBAIC00MjcwLDYgKzQ0MDIsOCBAQAogCiBzdGF0aWMgaW50IGJvbmRfY2hlY2tfcGFyYW1zKHN0cnVjdCBib25kX3BhcmFtcyAqcGFyYW1zKQogeworCWludCBhcnBfdmFsaWRhdGVfdmFsdWU7CisKIAkvKgogCSAqIENvbnZlcnQgc3RyaW5nIHBhcmFtZXRlcnMuCiAJICovCkBAIC00NDczLDYgKzQ2MDcsMjkgQEAKIAkJYXJwX2ludGVydmFsID0gMDsKIAl9CiAKKwlpZiAoYXJwX3ZhbGlkYXRlKSB7CisJCWlmIChib25kX21vZGUgIT0gQk9ORF9NT0RFX0FDVElWRUJBQ0tVUCkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJICAgICAgICI6IGFycF92YWxpZGF0ZSBvbmx5IHN1cHBvcnRlZCBpbiBhY3RpdmUtYmFja3VwIG1vZGVcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJaWYgKCFhcnBfaW50ZXJ2YWwpIHsKKwkJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkJICAgICAgICI6IGFycF92YWxpZGF0ZSByZXF1aXJlcyBhcnBfaW50ZXJ2YWxcbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlhcnBfdmFsaWRhdGVfdmFsdWUgPSBib25kX3BhcnNlX3Bhcm0oYXJwX3ZhbGlkYXRlLAorCQkJCQkJICAgICBhcnBfdmFsaWRhdGVfdGJsKTsKKwkJaWYgKGFycF92YWxpZGF0ZV92YWx1ZSA9PSAtMSkgeworCQkJcHJpbnRrKEtFUk5fRVJSIERSVl9OQU1FCisJCQkgICAgICAgIjogRXJyb3I6IGludmFsaWQgYXJwX3ZhbGlkYXRlIFwiJXNcIlxuIiwKKwkJCSAgICAgICBhcnBfdmFsaWRhdGUgPT0gTlVMTCA/ICJOVUxMIiA6IGFycF92YWxpZGF0ZSk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZQorCQlhcnBfdmFsaWRhdGVfdmFsdWUgPSAwOworCiAJaWYgKG1paW1vbikgewogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCiAJCSAgICAgICAiOiBNSUkgbGluayBtb25pdG9yaW5nIHNldCB0byAlZCBtc1xuIiwKQEAgLTQ0ODEsOCArNDYzOCwxMCBAQAogCQlpbnQgaTsKIAogCQlwcmludGsoS0VSTl9JTkZPIERSVl9OQU1FCi0JCSAgICAgICAiOiBBUlAgbW9uaXRvcmluZyBzZXQgdG8gJWQgbXMgd2l0aCAlZCB0YXJnZXQocyk6IiwKLQkJICAgICAgIGFycF9pbnRlcnZhbCwgYXJwX2lwX2NvdW50KTsKKwkJICAgICAgICI6IEFSUCBtb25pdG9yaW5nIHNldCB0byAlZCBtcywgdmFsaWRhdGUgJXMsIHdpdGggJWQgdGFyZ2V0KHMpOiIsCisJCSAgICAgICBhcnBfaW50ZXJ2YWwsCisJCSAgICAgICBhcnBfdmFsaWRhdGVfdGJsW2FycF92YWxpZGF0ZV92YWx1ZV0ubW9kZW5hbWUsCisJCSAgICAgICBhcnBfaXBfY291bnQpOwogCiAJCWZvciAoaSA9IDA7IGkgPCBhcnBfaXBfY291bnQ7IGkrKykKIAkJCXByaW50ayAoIiAlcyIsIGFycF9pcF90YXJnZXRbaV0pOwpAQCAtNDUxNiw2ICs0Njc1LDcgQEAKIAlwYXJhbXMtPnhtaXRfcG9saWN5ID0geG1pdF9oYXNodHlwZTsKIAlwYXJhbXMtPm1paW1vbiA9IG1paW1vbjsKIAlwYXJhbXMtPmFycF9pbnRlcnZhbCA9IGFycF9pbnRlcnZhbDsKKwlwYXJhbXMtPmFycF92YWxpZGF0ZSA9IGFycF92YWxpZGF0ZV92YWx1ZTsKIAlwYXJhbXMtPnVwZGVsYXkgPSB1cGRlbGF5OwogCXBhcmFtcy0+ZG93bmRlbGF5ID0gZG93bmRlbGF5OwogCXBhcmFtcy0+dXNlX2NhcnJpZXIgPSB1c2VfY2FycmllcjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9zeXNmcy5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKaW5kZXggY2ZlNGRjMy4uY2VkOWVkOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKKysrIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX3N5c2ZzLmMKQEAgLTUxLDYgKzUxLDcgQEAKIGV4dGVybiBzdHJ1Y3QgYm9uZF9wYXJtX3RibCBib25kX21vZGVfdGJsW107CiBleHRlcm4gc3RydWN0IGJvbmRfcGFybV90YmwgYm9uZF9sYWNwX3RibFtdOwogZXh0ZXJuIHN0cnVjdCBib25kX3Bhcm1fdGJsIHhtaXRfaGFzaHR5cGVfdGJsW107CitleHRlcm4gc3RydWN0IGJvbmRfcGFybV90YmwgYXJwX3ZhbGlkYXRlX3RibFtdOwogCiBzdGF0aWMgaW50IGV4cGVjdGVkX3JlZmNvdW50ID0gLTE7CiBzdGF0aWMgc3RydWN0IGNsYXNzICpuZXRkZXZfY2xhc3M7CkBAIC01MDMsNiArNTA0LDUzIEBACiBzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoeG1pdF9oYXNoX3BvbGljeSwgU19JUlVHTyB8IFNfSVdVU1IsIGJvbmRpbmdfc2hvd194bWl0X2hhc2gsIGJvbmRpbmdfc3RvcmVfeG1pdF9oYXNoKTsKIAogLyoKKyAqIFNob3cgYW5kIHNldCBhcnBfdmFsaWRhdGUuCisgKi8KK3N0YXRpYyBzc2l6ZV90IGJvbmRpbmdfc2hvd19hcnBfdmFsaWRhdGUoc3RydWN0IGNsYXNzX2RldmljZSAqY2QsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXMgJWRcbiIsCisJCSAgICAgICBhcnBfdmFsaWRhdGVfdGJsW2JvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGVdLm1vZGVuYW1lLAorCQkgICAgICAgYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSkgKyAxOworfQorCitzdGF0aWMgc3NpemVfdCBib25kaW5nX3N0b3JlX2FycF92YWxpZGF0ZShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjZCwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCit7CisJaW50IG5ld192YWx1ZTsKKwlzdHJ1Y3QgYm9uZGluZyAqYm9uZCA9IHRvX2JvbmQoY2QpOworCisJbmV3X3ZhbHVlID0gYm9uZF9wYXJzZV9wYXJtKChjaGFyICopYnVmLCBhcnBfdmFsaWRhdGVfdGJsKTsKKwlpZiAobmV3X3ZhbHVlIDwgMCkgeworCQlwcmludGsoS0VSTl9FUlIgRFJWX05BTUUKKwkJICAgICAgICI6ICVzOiBJZ25vcmluZyBpbnZhbGlkIGFycF92YWxpZGF0ZSB2YWx1ZSAlc1xuIiwKKwkJICAgICAgIGJvbmQtPmRldi0+bmFtZSwgYnVmKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChuZXdfdmFsdWUgJiYgKGJvbmQtPnBhcmFtcy5tb2RlICE9IEJPTkRfTU9ERV9BQ1RJVkVCQUNLVVApKSB7CisJCXByaW50ayhLRVJOX0VSUiBEUlZfTkFNRQorCQkgICAgICAgIjogJXM6IGFycF92YWxpZGF0ZSBvbmx5IHN1cHBvcnRlZCBpbiBhY3RpdmUtYmFja3VwIG1vZGUuXG4iLAorCQkgICAgICAgYm9uZC0+ZGV2LT5uYW1lKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6IHNldHRpbmcgYXJwX3ZhbGlkYXRlIHRvICVzICglZCkuXG4iLAorCSAgICAgICBib25kLT5kZXYtPm5hbWUsIGFycF92YWxpZGF0ZV90YmxbbmV3X3ZhbHVlXS5tb2RlbmFtZSwKKwkgICAgICAgbmV3X3ZhbHVlKTsKKworCWlmICghYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSAmJiBuZXdfdmFsdWUpIHsKKwkJYm9uZF9yZWdpc3Rlcl9hcnAoYm9uZCk7CisJfSBlbHNlIGlmIChib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlICYmICFuZXdfdmFsdWUpIHsKKwkJYm9uZF91bnJlZ2lzdGVyX2FycChib25kKTsKKwl9CisKKwlib25kLT5wYXJhbXMuYXJwX3ZhbGlkYXRlID0gbmV3X3ZhbHVlOworCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgQ0xBU1NfREVWSUNFX0FUVFIoYXJwX3ZhbGlkYXRlLCBTX0lSVUdPIHwgU19JV1VTUiwgYm9uZGluZ19zaG93X2FycF92YWxpZGF0ZSwgYm9uZGluZ19zdG9yZV9hcnBfdmFsaWRhdGUpOworCisvKgogICogU2hvdyBhbmQgc2V0IHRoZSBhcnAgdGltZXIgaW50ZXJ2YWwuICBUaGVyZSBhcmUgdHdvIHRyaWNreSBiaXRzCiAgKiBoZXJlLiAgRmlyc3QsIGlmIEFSUCBtb25pdG9yaW5nIGlzIGFjdGl2YXRlZCwgdGhlbiB3ZSBtdXN0IGRpc2FibGUKICAqIE1JSSBtb25pdG9yaW5nLiAgU2Vjb25kLCBpZiB0aGUgQVJQIHRpbWVyIGlzbid0IHJ1bm5pbmcsIHdlIG11c3QKQEAgLTkxNCw2ICs5NjIsMTEgQEAKIAkJCSAgICAgICAiQVJQIG1vbml0b3JpbmcuIERpc2FibGluZyBBUlAgbW9uaXRvcmluZy4uLlxuIiwKIAkJCSAgICAgICBib25kLT5kZXYtPm5hbWUpOwogCQkJYm9uZC0+cGFyYW1zLmFycF9pbnRlcnZhbCA9IDA7CisJCQlpZiAoYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSkgeworCQkJCWJvbmRfdW5yZWdpc3Rlcl9hcnAoYm9uZCk7CisJCQkJYm9uZC0+cGFyYW1zLmFycF92YWxpZGF0ZSA9CisJCQkJCUJPTkRfQVJQX1ZBTElEQVRFX05PTkU7CisJCQl9CiAJCQkvKiBLaWxsIEFSUCB0aW1lciwgZWxzZSBpdCBicmluZ3MgYm9uZCdzIGxpbmsgZG93biAqLwogCQkJaWYgKGJvbmQtPm1paV90aW1lci5mdW5jdGlvbikgewogCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKQEAgLTEwOTMsNyArMTE0Niw3IEBACiAJCQkgICAgIHN0cmxlbihzbGF2ZS0+ZGV2LT5uYW1lKSkgPT0gMCkgewogICAgICAgICAJCQlvbGRfYWN0aXZlID0gYm9uZC0+Y3Vycl9hY3RpdmVfc2xhdmU7CiAgICAgICAgIAkJCW5ld19hY3RpdmUgPSBzbGF2ZTsKLSAgICAgICAgCQkJaWYgKG5ld19hY3RpdmUgJiYgKG5ld19hY3RpdmUgPT0gb2xkX2FjdGl2ZSkpIHsKKyAgICAgICAgCQkJaWYgKG5ld19hY3RpdmUgPT0gb2xkX2FjdGl2ZSkgewogCQkJCQkvKiBkbyBub3RoaW5nICovCiAJCQkJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUKIAkJCQkgICAgICAgCSAgICAgICAiOiAlczogJXMgaXMgYWxyZWFkeSB0aGUgY3VycmVudCBhY3RpdmUgc2xhdmUuXG4iLApAQCAtMTI3Myw2ICsxMzI2LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwZXJfYm9uZF9hdHRyc1tdID0gewogCSZjbGFzc19kZXZpY2VfYXR0cl9zbGF2ZXMuYXR0ciwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfbW9kZS5hdHRyLAorCSZjbGFzc19kZXZpY2VfYXR0cl9hcnBfdmFsaWRhdGUuYXR0ciwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfYXJwX2ludGVydmFsLmF0dHIsCiAJJmNsYXNzX2RldmljZV9hdHRyX2FycF9pcF90YXJnZXQuYXR0ciwKIAkmY2xhc3NfZGV2aWNlX2F0dHJfZG93bmRlbGF5LmF0dHIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRpbmcuaCBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCmluZGV4IDBiZGZlMmMuLmRjNDM0ZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZGluZy5oCkBAIC0yMiw4ICsyMiw4IEBACiAjaW5jbHVkZSAiYm9uZF8zYWQuaCIKICNpbmNsdWRlICJib25kX2FsYi5oIgogCi0jZGVmaW5lIERSVl9WRVJTSU9OCSIzLjAuMyIKLSNkZWZpbmUgRFJWX1JFTERBVEUJIk1hcmNoIDIzLCAyMDA2IgorI2RlZmluZSBEUlZfVkVSU0lPTgkiMy4xLjEiCisjZGVmaW5lIERSVl9SRUxEQVRFCSJTZXB0ZW1iZXIgMjYsIDIwMDYiCiAjZGVmaW5lIERSVl9OQU1FCSJib25kaW5nIgogI2RlZmluZSBEUlZfREVTQ1JJUFRJT04JIkV0aGVybmV0IENoYW5uZWwgQm9uZGluZyBEcml2ZXIiCiAKQEAgLTEyNiw2ICsxMjYsNyBAQAogCWludCB4bWl0X3BvbGljeTsKIAlpbnQgbWlpbW9uOwogCWludCBhcnBfaW50ZXJ2YWw7CisJaW50IGFycF92YWxpZGF0ZTsKIAlpbnQgdXNlX2NhcnJpZXI7CiAJaW50IHVwZGVsYXk7CiAJaW50IGRvd25kZWxheTsKQEAgLTE0OSw4ICsxNTAsOSBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7IC8qIGZpcnN0IC0gdXNlZnVsIGZvciBwYW5pYyBkZWJ1ZyAqLwogCXN0cnVjdCBzbGF2ZSAqbmV4dDsKIAlzdHJ1Y3Qgc2xhdmUgKnByZXY7Ci0JczE2ICAgIGRlbGF5OworCWludCAgICBkZWxheTsKIAl1MzIgICAgamlmZmllczsKKwl1MzIgICAgbGFzdF9hcnBfcng7CiAJczggICAgIGxpbms7ICAgIC8qIG9uZSBvZiBCT05EX0xJTktfWFhYWCAqLwogCXM4ICAgICBzdGF0ZTsgICAvKiBvbmUgb2YgQk9ORF9TVEFURV9YWFhYICovCiAJdTMyICAgIG9yaWdpbmFsX2ZsYWdzOwpAQCAtMTk4LDYgKzIwMCw3IEBACiAJc3RydWN0ICAgYm9uZF9wYXJhbXMgcGFyYW1zOwogCXN0cnVjdCAgIGxpc3RfaGVhZCB2bGFuX2xpc3Q7CiAJc3RydWN0ICAgdmxhbl9ncm91cCAqdmxncnA7CisJc3RydWN0ICAgcGFja2V0X3R5cGUgYXJwX21vbl9wdDsKIH07CiAKIC8qKgpAQCAtMjI4LDYgKzIzMSwyNSBAQAogCXJldHVybiAoc3RydWN0IGJvbmRpbmcgKilzbGF2ZS0+ZGV2LT5tYXN0ZXItPnByaXY7CiB9CiAKKyNkZWZpbmUgQk9ORF9BUlBfVkFMSURBVEVfTk9ORQkJMAorI2RlZmluZSBCT05EX0FSUF9WQUxJREFURV9BQ1RJVkUJKDEgPDwgQk9ORF9TVEFURV9BQ1RJVkUpCisjZGVmaW5lIEJPTkRfQVJQX1ZBTElEQVRFX0JBQ0tVUAkoMSA8PCBCT05EX1NUQVRFX0JBQ0tVUCkKKyNkZWZpbmUgQk9ORF9BUlBfVkFMSURBVEVfQUxMCQkoQk9ORF9BUlBfVkFMSURBVEVfQUNUSVZFIHwgXAorCQkJCQkgQk9ORF9BUlBfVkFMSURBVEVfQkFDS1VQKQorCitleHRlcm4gaW5saW5lIGludCBzbGF2ZV9kb19hcnBfdmFsaWRhdGUoc3RydWN0IGJvbmRpbmcgKmJvbmQsIHN0cnVjdCBzbGF2ZSAqc2xhdmUpCit7CisJcmV0dXJuIGJvbmQtPnBhcmFtcy5hcnBfdmFsaWRhdGUgJiAoMSA8PCBzbGF2ZS0+c3RhdGUpOworfQorCitleHRlcm4gaW5saW5lIHUzMiBzbGF2ZV9sYXN0X3J4KHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQoreworCWlmIChzbGF2ZV9kb19hcnBfdmFsaWRhdGUoYm9uZCwgc2xhdmUpKQorCQlyZXR1cm4gc2xhdmUtPmxhc3RfYXJwX3J4OworCisJcmV0dXJuIHNsYXZlLT5kZXYtPmxhc3Rfcng7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3NldF9zbGF2ZV9pbmFjdGl2ZV9mbGFncyhzdHJ1Y3Qgc2xhdmUgKnNsYXZlKQogewogCXN0cnVjdCBib25kaW5nICpib25kID0gc2xhdmUtPmRldi0+bWFzdGVyLT5wcml2OwpAQCAtMjM1LDEyICsyNTcsMTQgQEAKIAkgICAgYm9uZC0+cGFyYW1zLm1vZGUgIT0gQk9ORF9NT0RFX0FMQikKIAkJc2xhdmUtPnN0YXRlID0gQk9ORF9TVEFURV9CQUNLVVA7CiAJc2xhdmUtPmRldi0+cHJpdl9mbGFncyB8PSBJRkZfU0xBVkVfSU5BQ1RJVkU7CisJaWYgKHNsYXZlX2RvX2FycF92YWxpZGF0ZShib25kLCBzbGF2ZSkpCisJCXNsYXZlLT5kZXYtPnByaXZfZmxhZ3MgfD0gSUZGX1NMQVZFX05FRURBUlA7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBib25kX3NldF9zbGF2ZV9hY3RpdmVfZmxhZ3Moc3RydWN0IHNsYXZlICpzbGF2ZSkKIHsKIAlzbGF2ZS0+c3RhdGUgPSBCT05EX1NUQVRFX0FDVElWRTsKLQlzbGF2ZS0+ZGV2LT5wcml2X2ZsYWdzICY9IH5JRkZfU0xBVkVfSU5BQ1RJVkU7CisJc2xhdmUtPmRldi0+cHJpdl9mbGFncyAmPSB+KElGRl9TTEFWRV9JTkFDVElWRSB8IElGRl9TTEFWRV9ORUVEQVJQKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGJvbmRfc2V0X21hc3Rlcl8zYWRfZmxhZ3Moc3RydWN0IGJvbmRpbmcgKmJvbmQpCkBAIC0yODQsNiArMzA4LDggQEAKIGNvbnN0IGNoYXIgKmJvbmRfbW9kZV9uYW1lKGludCBtb2RlKTsKIHZvaWQgYm9uZF9zZWxlY3RfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kKTsKIHZvaWQgYm9uZF9jaGFuZ2VfYWN0aXZlX3NsYXZlKHN0cnVjdCBib25kaW5nICpib25kLCBzdHJ1Y3Qgc2xhdmUgKm5ld19hY3RpdmUpOwordm9pZCBib25kX3JlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqKTsKK3ZvaWQgYm9uZF91bnJlZ2lzdGVyX2FycChzdHJ1Y3QgYm9uZGluZyAqKTsKIAogI2VuZGlmIC8qIF9MSU5VWF9CT05ESU5HX0ggKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZGdycy5jIGIvZHJpdmVycy9uZXQvZGdycy5jCmluZGV4IGU5MzYxY2IuLmQwODQyNTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kZ3JzLmMKKysrIGIvZHJpdmVycy9uZXQvZGdycy5jCkBAIC0xMTAsNyArMTEwLDYgQEAKICAqCURHUlMgaW5jbHVkZSBmaWxlcwogICovCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWNoYXI7Ci10eXBlZGVmIHVuc2lnbmVkIGludCBib29sOwogI2RlZmluZSB2b2wgdm9sYXRpbGUKIAogI2luY2x1ZGUgImRncnMuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmggYi9kcml2ZXJzL25ldC9lMTAwMC9lMTAwMF9ody5oCmluZGV4IGExNzBlOTYuLjQwMjBhY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2UxMDAwL2UxMDAwX2h3LmgKKysrIGIvZHJpdmVycy9uZXQvZTEwMDAvZTEwMDBfaHcuaApAQCAtMTM2Nyw4ICsxMzY3LDggQEAKIAogLyogU3RydWN0dXJlIGNvbnRhaW5pbmcgdmFyaWFibGVzIHVzZWQgYnkgdGhlIHNoYXJlZCBjb2RlIChlMTAwMF9ody5jKSAqLwogc3RydWN0IGUxMDAwX2h3IHsKLSAgICB1aW50OF90ICpod19hZGRyOwotICAgIHVpbnQ4X3QgKmZsYXNoX2FkZHJlc3M7CisgICAgdWludDhfdCBfX2lvbWVtICpod19hZGRyOworICAgIHVpbnQ4X3QgX19pb21lbSAqZmxhc2hfYWRkcmVzczsKICAgICBlMTAwMF9tYWNfdHlwZSBtYWNfdHlwZTsKICAgICBlMTAwMF9waHlfdHlwZSBwaHlfdHlwZTsKICAgICB1aW50MzJfdCBwaHlfaW5pdF9zY3JpcHQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMgYi9kcml2ZXJzL25ldC9mZWNfOHh4L2ZlY19tYWluLmMKaW5kZXggMjJhYzJkZi4uZTE3YTE0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZmVjXzh4eC9mZWNfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY184eHgvZmVjX21haW4uYwpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21paS5oPgogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogCiAjaW5jbHVkZSA8YXNtLzh4eF9pbW1hcC5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CkBAIC0zNyw3ICszOCw2IEBACiAjaW5jbHVkZSA8YXNtL2lycS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+Ci0jaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlICJmZWNfOHh4LmgiCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZvcmNlZGV0aC5jIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKaW5kZXggOTdkYjkxMC4uZWVhMWQ2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvZm9yY2VkZXRoLmMKQEAgLTM3ODksNiArMzc4OSwxMiBAQAogCS8qIHNldHVwIHBhY2tldCBmb3IgdHggKi8KIAlwa3RfbGVuID0gRVRIX0RBVEFfTEVOOwogCXR4X3NrYiA9IGRldl9hbGxvY19za2IocGt0X2xlbik7CisJaWYgKCF0eF9za2IpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJkZXZfYWxsb2Nfc2tiKCkgZmFpbGVkIGR1cmluZyBsb29wYmFjayB0ZXN0IgorCQkJICIgb2YgJXNcbiIsIGRldi0+bmFtZSk7CisJCXJldCA9IDA7CisJCWdvdG8gb3V0OworCX0KIAlwa3RfZGF0YSA9IHNrYl9wdXQodHhfc2tiLCBwa3RfbGVuKTsKIAlmb3IgKGkgPSAwOyBpIDwgcGt0X2xlbjsgaSsrKQogCQlwa3RfZGF0YVtpXSA9ICh1OCkoaSAmIDB4ZmYpOwpAQCAtMzg1Myw3ICszODU5LDcgQEAKIAkJICAgICAgIHR4X3NrYi0+ZW5kLXR4X3NrYi0+ZGF0YSwKIAkJICAgICAgIFBDSV9ETUFfVE9ERVZJQ0UpOwogCWRldl9rZnJlZV9za2JfYW55KHR4X3NrYik7Ci0KKyBvdXQ6CiAJLyogc3RvcCBlbmdpbmVzICovCiAJbnZfc3RvcF9yeChkZXYpOwogCW52X3N0b3BfdHgoZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2ZzX2VuZXQvZnNfZW5ldC5oIGIvZHJpdmVycy9uZXQvZnNfZW5ldC9mc19lbmV0LmgKaW5kZXggOTUwMjJjMDA1Li45MjU5MGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaAorKysgYi9kcml2ZXJzL25ldC9mc19lbmV0L2ZzX2VuZXQuaApAQCAtNiwxMSArNiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3BoeS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxsaW51eC9mc19lbmV0X3BkLmg+CiAKLSNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KLQogI2lmZGVmIENPTkZJR19DUE0xCiAjaW5jbHVkZSA8YXNtL2NvbW1wcm9jLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2d0NjQyNDBldGguaCBiL2RyaXZlcnMvbmV0L2d0NjQyNDBldGguaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGQ2ZjQ4Ni4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL25ldC9ndDY0MjQwZXRoLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MDIgKzAsMCBAQAotLyoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBQYXR0b24gRWxlY3Ryb25pY3MgQ29tcGFueQotICogQ29weXJpZ2h0IChDKSAyMDAyIE1vbWVudHVtIENvbXB1dGVyCi0gKgotICogQ29weXJpZ2h0IDIwMDAgTW9udGFWaXN0YSBTb2Z0d2FyZSBJbmMuCi0gKiBBdXRob3I6IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqICAgICAgICAgCXN0ZXZlbEBtdmlzdGEuY29tIG9yIHN1cHBvcnRAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIEV0aGVybmV0IGRyaXZlciBkZWZpbml0aW9ucyBmb3IgdGhlIE1JUFMgR1Q5NjEwMCBBZHZhbmNlZAotICogQ29tbXVuaWNhdGlvbiBDb250cm9sbGVyLgotICoKLSAqIE1vZGlmaWVkIGZvciB0aGUgTWFydmVsbG91cyBHVDY0MjQwIFJldGFyZGVkIENvbW11bmljYXRpb24gQ29udHJvbGxlci4KLSAqLwotI2lmbmRlZiBfR1Q2NDI0MEVUSF9ICi0jZGVmaW5lIF9HVDY0MjQwRVRIX0gKLQotI2luY2x1ZGUgPGFzbS9ndDY0MjQwLmg+Ci0KLSNkZWZpbmUgRVRIRVJORVRfUE9SVFNfRElGRkVSRU5DRV9PRkZTRVRTCTB4NDAwCi0KLS8qIFRyYW5zbGF0ZSB0aG9zZSB3ZWFuaWUgbmFtZXMgZnJvbSBHYWxpbGVvL1Z4V29ya3MgaGVhZGVyIGZpbGVzOiAqLwotCi0jZGVmaW5lIEdUNjQyNDBfTVJSICAgICAgICAgICAgICAgICAgICBNQUlOX1JPVVRJTkdfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9DSVVfQVJCSVRFUl9DT05GSUcgICAgIENPTU1fVU5JVF9BUkJJVEVSX0NPTkZJR1VSQVRJT05fUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9DSVVfQVJCSVRFUl9DT05UUk9MICAgIENPTU1fVU5JVF9BUkJJVEVSX0NPTlRST0wKLSNkZWZpbmUgR1Q2NDI0MF9NQUlOX0xPV19DQVVTRSAgICAgICAgIExPV19JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9NQUlOX0hJR0hfQ0FVU0UgICAgICAgIEhJR0hfSU5URVJSVVBUX0NBVVNFX1JFR0lTVEVSCi0jZGVmaW5lIEdUNjQyNDBfQ1BVX0xPV19NQVNLICAgICAgICAgICBDUFVfSU5URVJSVVBUX01BU0tfUkVHSVNURVJfTE9XCi0jZGVmaW5lIEdUNjQyNDBfQ1BVX0hJR0hfTUFTSyAgICAgICAgICBDUFVfSU5URVJSVVBUX01BU0tfUkVHSVNURVJfSElHSAotI2RlZmluZSBHVDY0MjQwX0NQVV9TRUxFQ1RfQ0FVU0UgICAgICAgQ1BVX1NFTEVDVF9DQVVTRV9SRUdJU1RFUgotCi0jZGVmaW5lIEdUNjQyNDBfRVRIX1BIWV9BRERSX1JFRyAgICAgICBFVEhFUk5FVF9QSFlfQUREUkVTU19SRUdJU1RFUgotI2RlZmluZSBHVDY0MjQwX0VUSF9QT1JUX0NPTkZJRyAgICAgICAgRVRIRVJORVQwX1BPUlRfQ09ORklHVVJBVElPTl9SRUdJU1RFUgotI2RlZmluZSBHVDY0MjQwX0VUSF9QT1JUX0NPTkZJR19FWFQgICAgRVRIRVJORVQwX1BPUlRfQ09ORklHVVJBVElPTl9FWFRFTkRfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfUE9SVF9DT01NQU5EICAgICAgIEVUSEVSTkVUMF9QT1JUX0NPTU1BTkRfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfUE9SVF9TVEFUVVMgICAgICAgIEVUSEVSTkVUMF9QT1JUX1NUQVRVU19SRUdJU1RFUgotI2RlZmluZSBHVDY0MjQwX0VUSF9JT19TSVpFICAgICAgICAgICAgRVRIRVJORVRfUE9SVFNfRElGRkVSRU5DRV9PRkZTRVRTCi0jZGVmaW5lIEdUNjQyNDBfRVRIX1NNSV9SRUcgICAgICAgICAgICBFVEhFUk5FVF9TTUlfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfTUlCX0NPVU5UX0JBU0UgICAgIEVUSEVSTkVUMF9NSUJfQ09VTlRFUl9CQVNFCi0jZGVmaW5lIEdUNjQyNDBfRVRIX1NETUFfQ09ORklHICAgICAgICBFVEhFUk5FVDBfU0RNQV9DT05GSUdVUkFUSU9OX1JFR0lTVEVSCi0jZGVmaW5lIEdUNjQyNDBfRVRIX1NETUFfQ09NTSAgICAgICAgICBFVEhFUk5FVDBfU0RNQV9DT01NQU5EX1JFR0lTVEVSCi0jZGVmaW5lIEdUNjQyNDBfRVRIX0lOVF9NQVNLICAgICAgICAgICBFVEhFUk5FVDBfSU5URVJSVVBUX01BU0tfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfSU5UX0NBVVNFICAgICAgICAgIEVUSEVSTkVUMF9JTlRFUlJVUFRfQ0FVU0VfUkVHSVNURVIKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfQ1VSUl9UWF9ERVNDX1BUUjAgIEVUSEVSTkVUMF9DVVJSRU5UX1RYX0RFU0NSSVBUT1JfUE9JTlRFUjAKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfQ1VSUl9UWF9ERVNDX1BUUjEgIEVUSEVSTkVUMF9DVVJSRU5UX1RYX0RFU0NSSVBUT1JfUE9JTlRFUjEKLSNkZWZpbmUgR1Q2NDI0MF9FVEhfMVNUX1JYX0RFU0NfUFRSMCAgIEVUSEVSTkVUMF9GSVJTVF9SWF9ERVNDUklQVE9SX1BPSU5URVIwCi0jZGVmaW5lIEdUNjQyNDBfRVRIX0NVUlJfUlhfREVTQ19QVFIwICBFVEhFUk5FVDBfQ1VSUkVOVF9SWF9ERVNDUklQVE9SX1BPSU5URVIwCi0jZGVmaW5lIEdUNjQyNDBfRVRIX0hBU0hfVEJMX1BUUiAgICAgICBFVEhFUk5FVDBfSEFTSF9UQUJMRV9QT0lOVEVSX1JFR0lTVEVSCi0KLS8qIFR1cm4gb24gTkFQSSBieSBkZWZhdWx0ICovCi0KLSNkZWZpbmUJR1Q2NDI0MF9OQVBJCQkJMQotCi0vKiBTb21lIDY0MjQwIHNldHRpbmdzIHRoYXQgU0hPVUxEIGV2ZW50dWFsbHkgYmUgc2V0dXAgaW4gUFJPTSBtb25pdG9yOiAqLwotLyogKEJvYXJkLXNwZWNpZmljIHRvIHRoZSBEU0wzMjI0IFJldiBBIGJvYXJkIE9OTFkhKSAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRDMyMjRfTVBQX0NUUkwwX1NFVFRJTkcJCTB4NjY2Njk5MDAKLSNkZWZpbmUgRDMyMjRfTVBQX0NUUkwxX1NFVFRJTkcJCTB4MDAwMDAwMDAKLSNkZWZpbmUgRDMyMjRfTVBQX0NUUkwyX1NFVFRJTkcJCTB4MDA4ODc3MDAKLSNkZWZpbmUgRDMyMjRfTVBQX0NUUkwzX1NFVFRJTkcJCTB4MDAwMDAwNDQKLSNkZWZpbmUgRDMyMjRfR1BQX0lPX0NUUkxfU0VUVElORwkweDAwMDBlODAwCi0jZGVmaW5lIEQzMjI0X0dQUF9MRVZFTF9DVFJMX1NFVFRJTkcJMHhmMDAxZjcwMwotI2RlZmluZSBEMzIyNF9HUFBfVkFMVUVfU0VUVElORwkJMHgwMDAwMDAwMAotCi0vKiBLZWVwIHRoZSByaW5nIHNpemVzIGEgcG93ZXIgb2YgdHdvIGZvciBlZmZpY2llbmN5LiAqLwotLy8tI2RlZmluZSBUWF9SSU5HX1NJWkUgMTYKLSNkZWZpbmUgVFhfUklOR19TSVpFCTY0CS8qIFRFU1RJTkcgISEhICovCi0jZGVmaW5lIFJYX1JJTkdfU0laRQkzMgotI2RlZmluZSBQS1RfQlVGX1NaCTE1MzYJLyogU2l6ZSBvZiBlYWNoIHRlbXBvcmFyeSBSeCBidWZmZXIuICovCi0KLSNkZWZpbmUgUlhfSEFTSF9UQUJMRV9TSVpFIDE2Mzg0Ci0jZGVmaW5lIEhBU0hfSE9QX05VTUJFUiAxMgotCi0jZGVmaW5lIE5VTV9JTlRFUkZBQ0VTIDMKLQotI2RlZmluZSBHVDY0MjQwRVRIX1RYX1RJTUVPVVQgSFovNAotCi0jZGVmaW5lIE1JUFNfR1Q2NDI0MF9CQVNFIDB4ZjQwMDAwMDAKLSNkZWZpbmUgR1Q2NDI0MF9FVEgwX0JBU0UgKE1JUFNfR1Q2NDI0MF9CQVNFICsgR1Q2NDI0MF9FVEhfUE9SVF9DT05GSUcpCi0jZGVmaW5lIEdUNjQyNDBfRVRIMV9CQVNFIChHVDY0MjQwX0VUSDBfQkFTRSArIEdUNjQyNDBfRVRIX0lPX1NJWkUpCi0jZGVmaW5lIEdUNjQyNDBfRVRIMl9CQVNFIChHVDY0MjQwX0VUSDFfQkFTRSArIEdUNjQyNDBfRVRIX0lPX1NJWkUpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19NSVBTX0RTTDMyMjQpCi0jZGVmaW5lIEdUNjQyNDBfRVRIRVIwX0lSUSA0Ci0jZGVmaW5lIEdUNjQyNDBfRVRIRVIxX0lSUSA0Ci0jZWxzZQotI2RlZmluZSBHVDY0MjQwX0VUSEVSMF9JUlEgLTEKLSNkZWZpbmUgR1Q2NDI0MF9FVEhFUjFfSVJRIC0xCi0jZW5kaWYKLQotI2RlZmluZSBSRVZfR1Q2NDI0MCAgMHgxCi0jZGVmaW5lIFJFVl9HVDY0MjQwQSAweDEwCi0KLSNkZWZpbmUgR1Q2NDI0MEVUSF9SRUFEKGdwLCBvZmZzZXQpCQkJCQlcCi0JR1RfUkVBRCgoZ3ApLT5wb3J0X29mZnNldCArIChvZmZzZXQpKQotCi0jZGVmaW5lIEdUNjQyNDBFVEhfV1JJVEUoZ3AsIG9mZnNldCwgZGF0YSkJCQkJXAotCUdUX1dSSVRFKChncCktPnBvcnRfb2Zmc2V0ICsgKG9mZnNldCksIChkYXRhKSkKLQotI2RlZmluZSBHVDY0MjQwRVRIX1NFVEJJVChncCwgb2Zmc2V0LCBiaXRzKQkJCQlcCi0JR1Q2NDI0MEVUSF9XUklURSgoZ3ApLCAob2Zmc2V0KSwJCQkJXAotCSAgICAgICAgICAgICAgICAgR1Q2NDI0MEVUSF9SRUFEKChncCksIChvZmZzZXQpKSB8IChiaXRzKSkKLQotI2RlZmluZSBHVDY0MjQwRVRIX0NMUkJJVChncCwgb2Zmc2V0LCBiaXRzKQkJCQlcCi0JR1Q2NDI0MEVUSF9XUklURSgoZ3ApLCAob2Zmc2V0KSwJCQkJXAotCSAgICAgICAgICAgICAgICAgR1Q2NDI0MEVUSF9SRUFEKChncCksIChvZmZzZXQpKSAmIH4oYml0cykpCi0KLSNkZWZpbmUgR1Q2NDI0MF9SRUFEKG9mcykJCUdUX1JFQUQob2ZzKQotI2RlZmluZSBHVDY0MjQwX1dSSVRFKG9mcywgZGF0YSkJR1RfV1JJVEUoKG9mcyksIChkYXRhKSkKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBTTUkgUmVnICovCi1lbnVtIHsKLQlzbWlyRGF0YU1hc2sgPSAweGZmZmYsCi0Jc21pclBoeUFkTWFzayA9IDB4MWYgPDwgMTYsCi0Jc21pclBoeUFkQml0ID0gMTYsCi0Jc21pclJlZ0FkTWFzayA9IDB4MWYgPDwgMjEsCi0Jc21pclJlZ0FkQml0ID0gMjEsCi0Jc21pck9wQ29kZSA9IDEgPDwgMjYsCi0Jc21pclJlYWRWYWxpZCA9IDEgPDwgMjcsCi0Jc21pckJ1c3kgPSAxIDw8IDI4Ci19OwotCi0vKiBCaXQgZGVmaW5pdGlvbnMgb2YgdGhlIFBvcnQgQ29uZmlnIFJlZyAqLwotZW51bSBwY3JfYml0cyB7Ci0JcGNyUE0gPSAxIDw8IDAsCi0JcGNyUkJNID0gMSA8PCAxLAotCXBjclBCRiA9IDEgPDwgMiwKLQlwY3JFTiA9IDEgPDwgNywKLQlwY3JMUEJLTWFzayA9IDB4MyA8PCA4LAotCXBjckxQQktCaXQgPSAxIDw8IDgsCi0JcGNyRkMgPSAxIDw8IDEwLAotCXBjckhTID0gMSA8PCAxMiwKLQlwY3JITSA9IDEgPDwgMTMsCi0JcGNySERNID0gMSA8PCAxNCwKLQlwY3JIRCA9IDEgPDwgMTUsCi0JcGNySVNMTWFzayA9IDB4NyA8PCAyOCwKLQlwY3JJU0xCaXQgPSAyOCwKLQlwY3JBQ0NTID0gMSA8PCAzMQotfTsKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBQb3J0IENvbmZpZyBFeHRlbmQgUmVnICovCi1lbnVtIHBjeHJfYml0cyB7Ci0JcGN4cklHTVAgPSAxLAotCXBjeHJTUEFOID0gMiwKLQlwY3hyUEFSID0gNCwKLQlwY3hyUFJJT3R4TWFzayA9IDB4NyA8PCAzLAotCXBjeHJQUklPdHhCaXQgPSAzLAotCXBjeHJQUklPcnhNYXNrID0gMHgzIDw8IDYsCi0JcGN4clBSSU9yeEJpdCA9IDYsCi0JcGN4clBSSU9yeE92ZXJyaWRlID0gMSA8PCA4LAotCXBjeHJEUExYZW4gPSAxIDw8IDksCi0JcGN4ckZDVExlbiA9IDEgPDwgMTAsCi0JcGN4ckZMUCA9IDEgPDwgMTEsCi0JcGN4ckZDVEwgPSAxIDw8IDEyLAotCXBjeHJNRkxNYXNrID0gMHgzIDw8IDE0LAotCXBjeHJNRkxCaXQgPSAxNCwKLQlwY3hyTUlCY2xyTW9kZSA9IDEgPDwgMTYsCi0JcGN4clNwZWVkID0gMSA8PCAxOCwKLQlwY3hyU3BlZWRlbiA9IDEgPDwgMTksCi0JcGN4clJNSUllbiA9IDEgPDwgMjAsCi0JcGN4ckRTQ1BlbiA9IDEgPDwgMjEKLX07Ci0KLS8qIEJpdCBkZWZpbml0aW9ucyBvZiB0aGUgUG9ydCBDb21tYW5kIFJlZyAqLwotZW51bSBwY21yX2JpdHMgewotCXBjbXJGSiA9IDEgPDwgMTUKLX07Ci0KLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBQb3J0IFN0YXR1cyBSZWcgKi8KLWVudW0gcHNyX2JpdHMgewotCXBzclNwZWVkID0gMSwKLQlwc3JEdXBsZXggPSAyLAotCXBzckZjdGwgPSA0LAotCXBzckxpbmsgPSA4LAotCXBzclBhdXNlID0gMSA8PCA0LAotCXBzclR4TG93ID0gMSA8PCA1LAotCXBzclR4SGlnaCA9IDEgPDwgNiwKLQlwc3JUeEluUHJvZyA9IDEgPDwgNwotfTsKLQotLyogQml0IGRlZmluaXRpb25zIG9mIHRoZSBTRE1BIENvbmZpZyBSZWcgKi8KLWVudW0gc2Rjcl9iaXRzIHsKLQlzZGNyUkNNYXNrID0gMHhmIDw8IDIsCi0Jc2RjclJDQml0ID0gMiwKLQlzZGNyQkxNUiA9IDEgPDwgNiwKLQlzZGNyQkxNVCA9IDEgPDwgNywKLQlzZGNyUE9WUiA9IDEgPDwgOCwKLQlzZGNyUklGQiA9IDEgPDwgOSwKLQlzZGNyQlNaTWFzayA9IDB4MyA8PCAxMiwKLQlzZGNyQlNaQml0ID0gMTIKLX07Ci0KLS8qIEJpdCBkZWZpbml0aW9ucyBvZiB0aGUgU0RNQSBDb21tYW5kIFJlZyAqLwotZW51bSBzZGNtcl9iaXRzIHsKLQlzZGNtckVSRCA9IDEgPDwgNywKLQlzZGNtckFSID0gMSA8PCAxNSwKLQlzZGNtclNUREggPSAxIDw8IDE2LAotCXNkY21yU1RETCA9IDEgPDwgMTcsCi0Jc2RjbXJUWERIID0gMSA8PCAyMywKLQlzZGNtclRYREwgPSAxIDw8IDI0LAotCXNkY21yQVQgPSAxIDw8IDMxCi19OwotCi0vKiBCaXQgZGVmaW5pdGlvbnMgb2YgdGhlIEludGVycnVwdCBDYXVzZSBSZWcgKi8KLWVudW0gaWNyX2JpdHMgewotCWljclJ4QnVmZmVyID0gMSwKLQlpY3JUeEJ1ZmZlckhpZ2ggPSAxIDw8IDIsCi0JaWNyVHhCdWZmZXJMb3cgPSAxIDw8IDMsCi0JaWNyVHhFbmRIaWdoID0gMSA8PCA2LAotCWljclR4RW5kTG93ID0gMSA8PCA3LAotCWljclJ4RXJyb3IgPSAxIDw8IDgsCi0JaWNyVHhFcnJvckhpZ2ggPSAxIDw8IDEwLAotCWljclR4RXJyb3JMb3cgPSAxIDw8IDExLAotCWljclJ4T1ZSID0gMSA8PCAxMiwKLQlpY3JUeFVkciA9IDEgPDwgMTMsCi0JaWNyUnhCdWZmZXJRMCA9IDEgPDwgMTYsCi0JaWNyUnhCdWZmZXJRMSA9IDEgPDwgMTcsCi0JaWNyUnhCdWZmZXJRMiA9IDEgPDwgMTgsCi0JaWNyUnhCdWZmZXJRMyA9IDEgPDwgMTksCi0JaWNyUnhFcnJvclEwID0gMSA8PCAyMCwKLQlpY3JSeEVycm9yUTEgPSAxIDw8IDIxLAotCWljclJ4RXJyb3JRMiA9IDEgPDwgMjIsCi0JaWNyUnhFcnJvclEzID0gMSA8PCAyMywKLQlpY3JNSUlQaHlTVEMgPSAxIDw8IDI4LAotCWljclNNSWRvbmUgPSAxIDw8IDI5LAotCWljckV0aGVySW50U3VtID0gMSA8PCAzMQotfTsKLQotCi0vKiBUaGUgUnggYW5kIFR4IGRlc2NyaXB0b3IgbGlzdHMuICovCi0jaWZkZWYgX19MSVRUTEVfRU5ESUFOCi10eXBlZGVmIHN0cnVjdCB7Ci0JdTMyIGNtZHN0YXQ7Ci0JdTE2IHJlc2VydmVkOwkJLy8tcHJrMjFhdWcwMSAgICB1MzIgcmVzZXJ2ZWQ6MTY7Ci0JdTE2IGJ5dGVfY250OwkJLy8tcHJrMjFhdWcwMSAgICB1MzIgYnl0ZV9jbnQ6MTY7Ci0JdTMyIGJ1ZmZfcHRyOwotCXUzMiBuZXh0OwotfSBndDY0MjQwX3RkX3Q7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgY21kc3RhdDsKLQl1MTYgYnl0ZV9jbnQ7CQkvLy1wcmsyMWF1ZzAxICAgIHUzMiBieXRlX2NudDoxNjsKLQl1MTYgYnVmZl9zejsJCS8vLXByazIxYXVnMDEgICAgdTMyIGJ1ZmZfc3o6MTY7Ci0JdTMyIGJ1ZmZfcHRyOwotCXUzMiBuZXh0OwotfSBndDY0MjQwX3JkX3Q7Ci0jZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLXR5cGVkZWYgc3RydWN0IHsKLQl1MTYgYnl0ZV9jbnQ7CQkvLy1wcmsyMWF1ZzAxICAgIHUzMiBieXRlX2NudDoxNjsKLQl1MTYgcmVzZXJ2ZWQ7CQkvLy1wcmsyMWF1ZzAxICAgIHUzMiByZXNlcnZlZDoxNjsKLQl1MzIgY21kc3RhdDsKLQl1MzIgbmV4dDsKLQl1MzIgYnVmZl9wdHI7Ci19IGd0NjQyNDBfdGRfdDsKLQotdHlwZWRlZiBzdHJ1Y3QgewotCXUxNiBidWZmX3N6OwkJLy8tcHJrMjFhdWcwMSAgICB1MzIgYnVmZl9zejoxNjsKLQl1MTYgYnl0ZV9jbnQ7CQkvLy1wcmsyMWF1ZzAxICAgIHUzMiBieXRlX2NudDoxNjsKLQl1MzIgY21kc3RhdDsKLQl1MzIgbmV4dDsKLQl1MzIgYnVmZl9wdHI7Ci19IGd0NjQyNDBfcmRfdDsKLSNlbHNlCi0jZXJyb3IgRWl0aGVyIF9fQklHX0VORElBTiBvciBfX0xJVFRMRV9FTkRJQU4gbXVzdCBiZSBkZWZpbmVkIQotI2VuZGlmCi0KLQotLyogVmFsdWVzIGZvciB0aGUgVHggY29tbWFuZC1zdGF0dXMgZGVzY3JpcHRvciBlbnRyeS4gKi8KLWVudW0gdGRfY21kc3RhdCB7Ci0JdHhPd24gPSAxIDw8IDMxLAotCXR4QXV0b01vZGUgPSAxIDw8IDMwLAotCXR4RUkgPSAxIDw8IDIzLAotCXR4R2VuQ1JDID0gMSA8PCAyMiwKLQl0eFBhZCA9IDEgPDwgMTgsCi0JdHhGaXJzdCA9IDEgPDwgMTcsCi0JdHhMYXN0ID0gMSA8PCAxNiwKLQl0eEVycm9yU3VtbWFyeSA9IDEgPDwgMTUsCi0JdHhSZVR4Q250TWFzayA9IDB4MGYgPDwgMTAsCi0JdHhSZVR4Q250Qml0ID0gMTAsCi0JdHhDb2xsaXNpb24gPSAxIDw8IDksCi0JdHhSZVR4TGltaXQgPSAxIDw8IDgsCi0JdHhVbmRlcnJ1biA9IDEgPDwgNiwKLQl0eExhdGVDb2xsaXNpb24gPSAxIDw8IDUKLX07Ci0KLQotLyogVmFsdWVzIGZvciB0aGUgUnggY29tbWFuZC1zdGF0dXMgZGVzY3JpcHRvciBlbnRyeS4gKi8KLWVudW0gcmRfY21kc3RhdCB7Ci0JcnhPd24gPSAxIDw8IDMxLAotCXJ4QXV0b01vZGUgPSAxIDw8IDMwLAotCXJ4RUkgPSAxIDw8IDIzLAotCXJ4Rmlyc3QgPSAxIDw8IDE3LAotCXJ4TGFzdCA9IDEgPDwgMTYsCi0JcnhFcnJvclN1bW1hcnkgPSAxIDw8IDE1LAotCXJ4SUdNUCA9IDEgPDwgMTQsCi0JcnhIYXNoRXhwaXJlZCA9IDEgPDwgMTMsCi0JcnhNaXNzZWRGcmFtZSA9IDEgPDwgMTIsCi0JcnhGcmFtZVR5cGUgPSAxIDw8IDExLAotCXJ4U2hvcnRGcmFtZSA9IDEgPDwgOCwKLQlyeE1heEZyYW1lTGVuID0gMSA8PCA3LAotCXJ4T3ZlcnJ1biA9IDEgPDwgNiwKLQlyeENvbGxpc2lvbiA9IDEgPDwgNCwKLQlyeENSQ0Vycm9yID0gMQotfTsKLQotLyogQml0IGZpZWxkcyBvZiBhIEhhc2ggVGFibGUgRW50cnkgKi8KLWVudW0gaGFzaF90YWJsZV9lbnRyeSB7Ci0JaHRlVmFsaWQgPSAxLAotCWh0ZVNraXAgPSAyLAotCWh0ZVJEID0gNAotfTsKLQotLy8gVGhlIE1JQiBjb3VudGVycwotdHlwZWRlZiBzdHJ1Y3QgewotCXUzMiBieXRlUmVjZWl2ZWQ7Ci0JdTMyIGJ5dGVTZW50OwotCXUzMiBmcmFtZXNSZWNlaXZlZDsKLQl1MzIgZnJhbWVzU2VudDsKLQl1MzIgdG90YWxCeXRlUmVjZWl2ZWQ7Ci0JdTMyIHRvdGFsRnJhbWVzUmVjZWl2ZWQ7Ci0JdTMyIGJyb2FkY2FzdEZyYW1lc1JlY2VpdmVkOwotCXUzMiBtdWx0aWNhc3RGcmFtZXNSZWNlaXZlZDsKLQl1MzIgY1JDRXJyb3I7Ci0JdTMyIG92ZXJzaXplRnJhbWVzOwotCXUzMiBmcmFnbWVudHM7Ci0JdTMyIGphYmJlcjsKLQl1MzIgY29sbGlzaW9uOwotCXUzMiBsYXRlQ29sbGlzaW9uOwotCXUzMiBmcmFtZXM2NDsKLQl1MzIgZnJhbWVzNjVfMTI3OwotCXUzMiBmcmFtZXMxMjhfMjU1OwotCXUzMiBmcmFtZXMyNTZfNTExOwotCXUzMiBmcmFtZXM1MTJfMTAyMzsKLQl1MzIgZnJhbWVzMTAyNF9NYXhTaXplOwotCXUzMiBtYWNSeEVycm9yOwotCXUzMiBkcm9wcGVkRnJhbWVzOwotCXUzMiBvdXRNdWx0aWNhc3RGcmFtZXM7Ci0JdTMyIG91dEJyb2FkY2FzdEZyYW1lczsKLQl1MzIgdW5kZXJzaXplRnJhbWVzOwotfSBtaWJfY291bnRlcnNfdDsKLQotCi1zdHJ1Y3QgZ3Q2NDI0MF9wcml2YXRlIHsKLQlndDY0MjQwX3JkX3QgKnJ4X3Jpbmc7Ci0JZ3Q2NDI0MF90ZF90ICp0eF9yaW5nOwotCS8vIFRoZSBSeCBhbmQgVHggcmluZ3MgbXVzdCBiZSAxNi1ieXRlIGFsaWduZWQKLQlkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOwotCWRtYV9hZGRyX3QgdHhfcmluZ19kbWE7Ci0JY2hhciAqaGFzaF90YWJsZTsKLQkvLyBUaGUgSGFzaCBUYWJsZSBtdXN0IGJlIDgtYnl0ZSBhbGlnbmVkCi0JZG1hX2FkZHJfdCBoYXNoX3RhYmxlX2RtYTsKLQlpbnQgaGFzaF9tb2RlOwotCi0JLy8gVGhlIFJ4IGJ1ZmZlcnMgbXVzdCBiZSA4LWJ5dGUgYWxpZ25lZAotCWNoYXIgKnJ4X2J1ZmY7Ci0JZG1hX2FkZHJfdCByeF9idWZmX2RtYTsKLQkvLyBUeCBidWZmZXJzICh0eF9za2J1ZmZbaV0tPmRhdGEpIHdpdGggbGVzcyB0aGFuIDggYnl0ZXMKLQkvLyBvZiBwYXlsb2FkIG11c3QgYmUgOC1ieXRlIGFsaWduZWQKLQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tidWZmW1RYX1JJTkdfU0laRV07Ci0JaW50IHJ4X25leHRfb3V0OwkvKiBUaGUgbmV4dCBmcmVlIHJpbmcgZW50cnkgdG8gcmVjZWl2ZSAqLwotCWludCB0eF9uZXh0X2luOwkJLyogVGhlIG5leHQgZnJlZSByaW5nIGVudHJ5IHRvIHNlbmQgKi8KLQlpbnQgdHhfbmV4dF9vdXQ7CS8qIFRoZSBsYXN0IHJpbmcgZW50cnkgdGhlIElTUiBwcm9jZXNzZWQgKi8KLQlpbnQgdHhfY291bnQ7CQkvKiBjdXJyZW50ICMgb2YgcGt0cyB3YWl0aW5nIHRvIGJlIHNlbnQgaW4gVHggcmluZyAqLwotCWludCBpbnRyX3dvcmtfZG9uZTsJLyogbnVtYmVyIG9mIFJ4IGFuZCBUeCBwa3RzIHByb2Nlc3NlZCBpbiB0aGUgaXNyICovCi0JaW50IHR4X2Z1bGw7CQkvKiBUeCByaW5nIGlzIGZ1bGwgKi8KLQotCW1pYl9jb3VudGVyc190IG1pYjsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKLQotCWludCBpb19zaXplOwotCWludCBwb3J0X251bTsJCS8vIDAgb3IgMQotCXUzMiBwb3J0X29mZnNldDsKLQotCWludCBwaHlfYWRkcjsJCS8vIFBIWSBhZGRyZXNzCi0JdTMyIGxhc3RfcHNyOwkJLy8gbGFzdCB2YWx1ZSBvZiB0aGUgcG9ydCBzdGF0dXMgcmVnaXN0ZXIKLQotCWludCBvcHRpb25zOwkJLyogVXNlci1zZXR0YWJsZSBtaXNjLiBkcml2ZXIgb3B0aW9ucy4gKi8KLQlpbnQgZHJ2X2ZsYWdzOwotCXNwaW5sb2NrX3QgbG9jazsJLyogU2VyaWFsaXNlIGFjY2VzcyB0byBkZXZpY2UgKi8KLQlzdHJ1Y3QgbWlpX2lmX2luZm8gbWlpX2lmOwotCi0JdTMyIG1zZ19lbmFibGU7Ci19OwotCi0jZW5kaWYgLyogX0dUNjQyNDBFVEhfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnIGIvZHJpdmVycy9uZXQvaXJkYS9LY29uZmlnCmluZGV4IGU5ZTZkOTkuLjdjOGNjYzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvS2NvbmZpZworKysgYi9kcml2ZXJzL25ldC9pcmRhL0tjb25maWcKQEAgLTI4Nyw2ICsyODcsNyBAQAogY29uZmlnIFVTQl9JUkRBCiAJdHJpc3RhdGUgIklyREEgVVNCIGRvbmdsZXMiCiAJZGVwZW5kcyBvbiBJUkRBICYmIFVTQgorCXNlbGVjdCBGV19MT0FERVIKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHN1cHBvcnQgZm9yIHRoZSBVU0IgSXJEQSBGSVIgRG9uZ2xlCiAJICBkZXZpY2UgZHJpdmVyLiAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlIG1vZHVsZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jIGIvZHJpdmVycy9uZXQvaXJkYS9pcmRhLXVzYi5jCmluZGV4IDJhMGQ1MzguLjM4M2NlZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvaXJkYS11c2IuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL2lyZGEtdXNiLmMKQEAgLTY3MSwxMCArNjcxLDggQEAKIAkJCSAqIEplYW4gSUkgKi8KIAkJCWRvbmUgPSAxOwogCQkJYnJlYWs7Ci0JCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIC0xMDMgKi8KLQkJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIC0xMDQgKi8KLQkJY2FzZSAtRVRJTUVET1VUOgkJLyogLTExMCAqLwotCQljYXNlIC1FTk9FTlQ6CQkJLyogLTIgKHVyYiB1bmxpbmtlZCBieSB1cykgICovCisJCWNhc2UgLUVDT05OUkVTRVQ6CisJCWNhc2UgLUVOT0VOVDoJCQkvKiB1cmIgdW5saW5rZWQgYnkgdXMgKi8KIAkJZGVmYXVsdDoJCQkvKiA/Pz8gLSBQbGF5IHNhZmUgKi8KIAkJCXVyYi0+c3RhdHVzID0gMDsKIAkJCW5ldGlmX3dha2VfcXVldWUoc2VsZi0+bmV0ZGV2KTsKQEAgLTcxMiwxMCArNzEwLDggQEAKIAkJCSAqIEplYW4gSUkgKi8KIAkJCWRvbmUgPSAxOwogCQkJYnJlYWs7Ci0JCWNhc2UgLUVDT05OQUJPUlRFRDoJCS8qIC0xMDMgKi8KLQkJY2FzZSAtRUNPTk5SRVNFVDoJCS8qIC0xMDQgKi8KLQkJY2FzZSAtRVRJTUVET1VUOgkJLyogLTExMCAqLwotCQljYXNlIC1FTk9FTlQ6CQkJLyogLTIgKHVyYiB1bmxpbmtlZCBieSB1cykgICovCisJCWNhc2UgLUVDT05OUkVTRVQ6CisJCWNhc2UgLUVOT0VOVDoJCQkvKiB1cmIgdW5saW5rZWQgYnkgdXMgKi8KIAkJZGVmYXVsdDoJCQkvKiA/Pz8gLSBQbGF5IHNhZmUgKi8KIAkJCWlmKHNrYiAhPSBOVUxMKSB7CiAJCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKQEAgLTg0NSwxNCArODQxLDE0IEBACiAJCQlzZWxmLT5zdGF0cy5yeF9jcmNfZXJyb3JzKys7CQogCQkJLyogQWxzbyBwcmVjdXJzb3IgdG8gYSBob3QtdW5wbHVnIG9uIFVIQ0kuICovCiAJCQkvKiBGYWxsdGhyb3VnaC4uLiAqLwotCQljYXNlIC1FQ09OTlJFU0VUOgkJLyogLTEwNCAqLworCQljYXNlIC1FQ09OTlJFU0VUOgogCQkJLyogUmFuZG9tIGVycm9yLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSAqLwogCQkJLyogdWhjaV9jbGVhbnVwX3VubGluaygpIGlzIGdvaW5nIHRvIGtpbGwgdGhlIFJ4CiAJCQkgKiBVUkIganVzdCBhZnRlciB3ZSByZXR1cm4uIE5vIHByb2JsZW0sIGF0IHRoaXMKIAkJCSAqIHBvaW50IHRoZSBVUkIgd2lsbCBiZSBpZGxlIDstKSAtIEplYW4gSUkgKi8KLQkJY2FzZSAtRVNIVVRET1dOOgkJLyogLTEwOCAqLworCQljYXNlIC1FU0hVVERPV046CiAJCQkvKiBUaGF0J3MgdXN1YWxseSBhIGhvdC11bnBsdWcuIFN1Ym1pdCB3aWxsIGZhaWwuLi4gKi8KLQkJY2FzZSAtRVRJTUVET1VUOgkJLyogLTExMCAqLworCQljYXNlIC1FVElNRToKIAkJCS8qIFVzdWFsbHkgcHJlY3Vyc29yIHRvIGEgaG90LXVucGx1ZyBvbiBPSENJLiAqLwogCQlkZWZhdWx0OgogCQkJc2VsZi0+c3RhdHMucnhfZXJyb3JzKys7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMgYi9kcml2ZXJzL25ldC9pcmRhL25zYy1pcmNjLmMKaW5kZXggY2I2MmYyYS4uNzE4NWE0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9uc2MtaXJjYy5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvbnNjLWlyY2MuYwpAQCAtMTEwLDcgKzExMCw3IEBACiAJeyAiUEM4NzMzOCIsIHsgMHgzOTgsIDB4MTVjLCAweDJlIH0sIDB4MDgsIDB4YjAsIDB4ZjgsIAogCSAgbnNjX2lyY2NfcHJvYmVfMzM4LCBuc2NfaXJjY19pbml0XzMzOCB9LAogCS8qIENvbnRyaWJ1dGVkIGJ5IFN0ZWZmZW4gUGluZ2VsIC0gSUJNIFg0MCAqLwotCXsgIlBDODczOHgiLCB7IDB4MTY0ZSwgMHg0ZSwgMHgwIH0sIDB4MjAsIDB4ZjQsIDB4ZmYsCisJeyAiUEM4NzM4eCIsIHsgMHgxNjRlLCAweDRlLCAweDJlIH0sIDB4MjAsIDB4ZjQsIDB4ZmYsCiAJICBuc2NfaXJjY19wcm9iZV8zOXgsIG5zY19pcmNjX2luaXRfMzl4IH0sCiAJLyogQ29udHJpYnV0ZWQgYnkgSmFuIEZyZXkgLSBJQk0gQTMwL0EzMSAqLwogCXsgIlBDODczOXgiLCB7IDB4MmUsIDB4NGUsIDB4MCB9LCAweDIwLCAweGVhLCAweGZmLCAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvc21zYy1pcmNjMi5jIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKaW5kZXggMmVmZjQ1Yi4uMjIzNThmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS9zbXNjLWlyY2MyLmMKQEAgLTIzNTQsNiArMjM1NCwyNiBAQAogI2RlZmluZSBQQ0lJRF9WRU5ET1JfSU5URUwgMHg4MDg2CiAjZGVmaW5lIFBDSUlEX1ZFTkRPUl9BTEkgMHgxMGI5CiBzdGF0aWMgc3RydWN0IHNtc2NfaXJjY19zdWJzeXN0ZW1fY29uZmlndXJhdGlvbiBzdWJzeXN0ZW1fY29uZmlndXJhdGlvbnNbXSBfX2luaXRkYXRhID0geworCS8qCisJICogU3Vic3lzdGVtcyBuZWVkaW5nIGVudHJpZXM6CisJICogMHgxMGI5OjB4MTUzMyAweDEwM2M6MHgwODUwIEhQIG54OTAxMCBmYW1pbHkKKwkgKiAweDEwYjk6MHgxNTMzIDB4MGUxMToweDAwNWEgQ29tcGFxIG5jNDAwMCBmYW1pbHkKKwkgKiAweDgwODY6MHgyNGNjIDB4MGUxMToweDAwMmEgSFAgbng5MDAwIGZhbWlseQorCSAqLworCXsKKwkJLyogR3Vlc3NlZCBlbnRyeSAqLworCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCisJCS5kZXZpY2UgPSAweDI0Y2MsCisJCS5zdWJ2ZW5kb3IgPSAweDEwM2MsCisJCS5zdWJkZXZpY2UgPSAweDA4YmMsCisJCS5zaXJfaW8gPSAweDAyZjgsCisJCS5maXJfaW8gPSAweDAxMzAsCisJCS5maXJfaXJxID0gMHgwNSwKKwkJLmZpcl9kbWEgPSAweDAzLAorCQkuY2ZnX2Jhc2UgPSAweDAwNGUsCisJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKKwkJLm5hbWUgPSAiSFAgbng1MDAwIGZhbWlseSIsCisJfSwKIAl7CiAJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KIAkJLmRldmljZSA9IDB4MjRjYywKQEAgLTIzNjYsNyArMjM4Niw3IEBACiAJCS5maXJfZG1hID0gMHgwMywKIAkJLmNmZ19iYXNlID0gMHgwMDRlLAogCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCi0JCS5uYW1lID0gIkhQIG5jODAwMCIsCisJCS5uYW1lID0gIkhQIG5jODAwMCBmYW1pbHkiLAogCX0sCiAJewogCQkudmVuZG9yID0gUENJSURfVkVORE9SX0lOVEVMLCAvKiBJbnRlbCA4MjgwMURCTSBMUEMgYnJpZGdlICovCkBAIC0yMzc5LDcgKzIzOTksMjEgQEAKIAkJLmZpcl9kbWEgPSAweDAzLAogCQkuY2ZnX2Jhc2UgPSAweDAwNGUsCiAJCS5wcmVjb25maWd1cmUgPSBwcmVjb25maWd1cmVfdGhyb3VnaF84MjgwMSwKLQkJLm5hbWUgPSAiSFAgbmM2MDAwIiwKKwkJLm5hbWUgPSAiSFAgbmM2MDAwIGZhbWlseSIsCisJfSwKKwl7CisJCS52ZW5kb3IgPSBQQ0lJRF9WRU5ET1JfSU5URUwsIC8qIEludGVsIDgyODAxREJNIExQQyBicmlkZ2UgKi8KKwkJLmRldmljZSA9IDB4MjRjYywKKwkJLnN1YnZlbmRvciA9IDB4MGUxMSwKKwkJLnN1YmRldmljZSA9IDB4MDg2MCwKKwkJLyogSSBhc3N1bWUgdGhlc2UgYXJlIHRoZSBzYW1lIGZvciB4MTAwMCBhcyBmb3IgdGhlIG90aGVycyAqLworCQkuc2lyX2lvID0gMHgwMmU4LAorCQkuZmlyX2lvID0gMHgwMmY4LAorCQkuZmlyX2lycSA9IDB4MDcsCisJCS5maXJfZG1hID0gMHgwMywKKwkJLmNmZ19iYXNlID0gMHgwMDJlLAorCQkucHJlY29uZmlndXJlID0gcHJlY29uZmlndXJlX3Rocm91Z2hfODI4MDEsCisJCS5uYW1lID0gIkNvbXBhcSB4MTAwMCBmYW1pbHkiLAogCX0sCiAJewogCQkvKiBJbnRlbCA4MjgwMURCL0RCTCAoSUNINC9JQ0g0LUwpIExQQyBJbnRlcmZhY2UgQnJpZGdlICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMgYi9kcml2ZXJzL25ldC9pcmRhL3N0aXI0MjAwLmMKaW5kZXggZDYxYjIwOC4uMTIxMDNjOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS9zdGlyNDIwMC5jCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvc3RpcjQyMDAuYwpAQCAtMTQ5LDggKzE0OSw2IEBACiAJRklGT0NUTF9ESVIgPSAweDEwLAogCUZJRk9DVExfQ0xSID0gMHgwOCwKIAlGSUZPQ1RMX0VNUFRZID0gMHgwNCwKLQlGSUZPQ1RMX1JYRVJSID0gMHgwMiwKLQlGSUZPQ1RMX1RYRVJSID0gMHgwMSwKIH07CiAKIGVudW0gU3RpckRpYWdNYXNrIHsKQEAgLTYxNSwxOSArNjEzLDYgQEAKIAogCQlwcl9kZWJ1ZygiZmlmbyBzdGF0dXMgMHglbHggY291bnQgJWx1XG4iLCBzdGF0dXMsIGNvdW50KTsKIAotCQkvKiBlcnJvciB3aGVuIHJlY2VpdmUvdHJhbnNtaXQgZmlmbyBnZXRzIGNvbmZ1c2VkICovCi0JCWlmIChzdGF0dXMgJiBGSUZPQ1RMX1JYRVJSKSB7Ci0JCQlzdGlyLT5zdGF0cy5yeF9maWZvX2Vycm9ycysrOwotCQkJc3Rpci0+c3RhdHMucnhfZXJyb3JzKys7Ci0JCQlicmVhazsKLQkJfQotCi0JCWlmIChzdGF0dXMgJiBGSUZPQ1RMX1RYRVJSKSB7Ci0JCQlzdGlyLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOwotCQkJc3Rpci0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQlicmVhazsKLQkJfQotCiAJCS8qIGlzIGZpZm8gcmVjZWl2aW5nIGFscmVhZHksIG9yIGVtcHR5ICovCiAJCWlmICghKHN0YXR1cyAmIEZJRk9DVExfRElSKQogCQkgICAgfHwgKHN0YXR1cyAmIEZJRk9DVExfRU1QVFkpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jIGIvZHJpdmVycy9uZXQvaXJkYS92aWEtaXJjYy5jCmluZGV4IDc5Yjg1ZjMuLmQ5MTZlMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmlhLWlyY2MuYworKysgYi9kcml2ZXJzL25ldC9pcmRhL3ZpYS1pcmNjLmMKQEAgLTEyMjMsOCArMTIyMywxMyBAQAogCiAJSVJEQV9ERUJVRygyLCAiJXMoKTogbGVuPSV4XG4iLCBfX0ZVTkNUSU9OX18sIGxlbik7CiAKKwlpZiAoKGxlbiAtIDQpIDwgMikgeworCQlzZWxmLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCXJldHVybiBGQUxTRTsKKwl9CisKIAlza2IgPSBkZXZfYWxsb2Nfc2tiKGxlbiArIDEpOwotCWlmICgoc2tiID09IE5VTEwpIHx8ICgobGVuIC0gNCkgPCAyKSkgeworCWlmIChza2IgPT0gTlVMTCkgewogCQlzZWxmLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiBGQUxTRTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9pcmRhL3Zsc2lfaXIuaCBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oCmluZGV4IGE4MmE0YmEuLmMzN2YwYmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oCisrKyBiL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5oCkBAIC01OCw3ICs1OCw3IEBACiAKIC8qIFBERSgpIGludHJvZHVjZWQgaW4gMi41LjQgKi8KICNpZmRlZiBDT05GSUdfUFJPQ19GUwotI2RlZmluZSBQREUoaW5vZGUpICgoaW5vZGUpLT51LmdlbmVyaWNfaXApCisjZGVmaW5lIFBERShpbm9kZSkgKChpbm9kZSktPmlfcHJpdmF0ZSkKICNlbmRpZgogCiAvKiBpcmRhIGNyYzE2IGNhbGN1bGF0aW9uIGV4cG9ydGVkIGluIDIuNS40MiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvbG9vcGJhY2suYyBiL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKaW5kZXggZjQyOWIxOS4uNDE3OGI0YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2xvb3BiYWNrLmMKKysrIGIvZHJpdmVycy9uZXQvbG9vcGJhY2suYwpAQCAtMTYxLDE1ICsxNjEsMTMgQEAKIAlyZXR1cm4oMCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBsb29wYmFja19zdGF0czsKKwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpnZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqc3RhdHMgPSBkZXYtPnByaXY7CisJc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnN0YXRzID0gJmxvb3BiYWNrX3N0YXRzOwogCWludCBpOwogCi0JaWYgKCFzdGF0cykgewotCQlyZXR1cm4gTlVMTDsKLQl9Ci0KIAltZW1zZXQoc3RhdHMsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCiAJZm9yX2VhY2hfcG9zc2libGVfY3B1KGkpIHsKQEAgLTE4NSwxOSArMTgzLDI4IEBACiAJcmV0dXJuIHN0YXRzOwogfQogCi1zdGF0aWMgdTMyIGxvb3BiYWNrX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdTMyIGFsd2F5c19vbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiAxOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGxvb3BiYWNrX2V0aHRvb2xfb3BzID0gewotCS5nZXRfbGluawkJPSBsb29wYmFja19nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gYWx3YXlzX29uLAogCS5nZXRfdHNvCQk9IGV0aHRvb2xfb3BfZ2V0X3RzbywKIAkuc2V0X3RzbwkJPSBldGh0b29sX29wX3NldF90c28sCisJLmdldF90eF9jc3VtCQk9IGFsd2F5c19vbiwKKwkuZ2V0X3NnCQkJPSBhbHdheXNfb24sCisJLmdldF9yeF9jc3VtCQk9IGFsd2F5c19vbiwKIH07CiAKKy8qCisgKiBUaGUgbG9vcGJhY2sgZGV2aWNlIGlzIHNwZWNpYWwuIFRoZXJlIGlzIG9ubHkgb25lIGluc3RhbmNlIGFuZAorICogaXQgaXMgc3RhdGljYWxseSBhbGxvY2F0ZWQuIERvbid0IGRvIHRoaXMgZm9yIG90aGVyIGRldmljZXMuCisgKi8KIHN0cnVjdCBuZXRfZGV2aWNlIGxvb3BiYWNrX2RldiA9IHsKIAkubmFtZQkgCQk9ICJsbyIsCisJLmdldF9zdGF0cwkJPSAmZ2V0X3N0YXRzLAorCS5wcml2CQkJPSAmbG9vcGJhY2tfc3RhdHMsCiAJLm10dQkJCT0gKDE2ICogMTAyNCkgKyAyMCArIDIwICsgMTIsCiAJLmhhcmRfc3RhcnRfeG1pdAk9IGxvb3BiYWNrX3htaXQsCiAJLmhhcmRfaGVhZGVyCQk9IGV0aF9oZWFkZXIsCkBAIC0yMjEsMTYgKzIyOCw2IEBACiAvKiBTZXR1cCBhbmQgcmVnaXN0ZXIgdGhlIGxvb3BiYWNrIGRldmljZS4gKi8KIGludCBfX2luaXQgbG9vcGJhY2tfaW5pdCh2b2lkKQogewotCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzdGF0czsKLQotCS8qIENhbiBzdXJ2aXZlIHdpdGhvdXQgc3RhdGlzdGljcyAqLwotCXN0YXRzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc3RhdHMpIHsKLQkJbWVtc2V0KHN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKLQkJbG9vcGJhY2tfZGV2LnByaXYgPSBzdGF0czsKLQkJbG9vcGJhY2tfZGV2LmdldF9zdGF0cyA9ICZnZXRfc3RhdHM7Ci0JfQotCiAJcmV0dXJuIHJlZ2lzdGVyX25ldGRldigmbG9vcGJhY2tfZGV2KTsKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L25lMzIxMC5jIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKaW5kZXggMGZhOGU0ZC4uZDY2MzI4OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvbmUzMjEwLmMKKysrIGIvZHJpdmVycy9uZXQvbmUzMjEwLmMKQEAgLTM0Myw2ICszNDMsNyBAQAogCXsgIk5WTDE4MDEiIH0sCiAJeyAiIiB9LAogfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUoZWlzYSwgbmUzMjEwX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgZWlzYV9kcml2ZXIgbmUzMjEwX2Vpc2FfZHJpdmVyID0gewogCS5pZF90YWJsZSA9IG5lMzIxMF9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwppbmRleCAyZDFlY2ZkLi5lY2QzZGExIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMKQEAgLTUyMiw3ICs1MjIsNyBAQAogCiBzdGF0aWMgaW50IGdlbnBoeV9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogewotCXUzMiB2YWw7CisJaW50IHZhbDsKIAl1MzIgZmVhdHVyZXM7CiAKIAkvKiBGb3Igbm93LCBJJ2xsIGNsYWltIHRoYXQgdGhlIGdlbmVyaWMgZHJpdmVyIHN1cHBvcnRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9wcHBvZS5jIGIvZHJpdmVycy9uZXQvcHBwb2UuYwppbmRleCA1NjY2ZWQ5Li4wYWRlZTczIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9wcHBvZS5jCisrKyBiL2RyaXZlcnMvbmV0L3BwcG9lLmMKQEAgLTYwMCw2ICs2MDAsNyBAQAogCQlwby0+Y2hhbi5oZHJsZW4gPSAoc2l6ZW9mKHN0cnVjdCBwcHBvZV9oZHIpICsKIAkJCQkgICBkZXYtPmhhcmRfaGVhZGVyX2xlbik7CiAKKwkJcG8tPmNoYW4ubXR1ID0gZGV2LT5tdHUgLSBzaXplb2Yoc3RydWN0IHBwcG9lX2hkcik7CiAJCXBvLT5jaGFuLnByaXZhdGUgPSBzazsKIAkJcG8tPmNoYW4ub3BzID0gJnBwcG9lX2NoYW5fb3BzOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9zMmlvLmMgYi9kcml2ZXJzL25ldC9zMmlvLmMKaW5kZXggZjVkYmViMi4uMWJmMjNlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvczJpby5jCisrKyBiL2RyaXZlcnMvbmV0L3MyaW8uYwpAQCAtMjkwNCw3ICsyOTA0LDcgQEAKIHsKIAl1NjQgdmFsNjQgPSAweDA7CiAJbmljX3QgKnNwID0gZGV2LT5wcml2OwotCVhFTkFfZGV2X2NvbmZpZ190ICpiYXIwID0gKFhFTkFfZGV2X2NvbmZpZ190ICopc3AtPmJhcjA7CisJWEVOQV9kZXZfY29uZmlnX3QgX19pb21lbSAqYmFyMCA9IHNwLT5iYXIwOwogCiAJLy9hZGRyZXNzIHRyYW5zYWN0aW9uCiAJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQpAQCAtMjk1Myw3ICsyOTUzLDcgQEAKIAl1NjQgdmFsNjQgPSAweDA7CiAJdTY0IHJ2YWw2NCA9IDB4MDsKIAluaWNfdCAqc3AgPSBkZXYtPnByaXY7Ci0JWEVOQV9kZXZfY29uZmlnX3QgKmJhcjAgPSAoWEVOQV9kZXZfY29uZmlnX3QgKilzcC0+YmFyMDsKKwlYRU5BX2Rldl9jb25maWdfdCBfX2lvbWVtICpiYXIwID0gc3AtPmJhcjA7CiAKIAkvKiBhZGRyZXNzIHRyYW5zYWN0aW9uICovCiAJdmFsNjQgPSB2YWw2NCB8IE1ESU9fTU1EX0lORFhfQUREUihhZGRyKQpAQCAtMzI3Niw3ICszMjc2LDcgQEAKICAqICAgU1VDQ0VTUyBvbiBzdWNjZXNzIGFuZCBGQUlMVVJFIG9uIGZhaWx1cmUuCiAgKi8KIAotc3RhdGljIGludCB3YWl0X2Zvcl9jbWRfY29tcGxldGUodm9pZCAqYWRkciwgdTY0IGJ1c3lfYml0KQorc3RhdGljIGludCB3YWl0X2Zvcl9jbWRfY29tcGxldGUodm9pZCBfX2lvbWVtICphZGRyLCB1NjQgYnVzeV9iaXQpCiB7CiAJaW50IHJldCA9IEZBSUxVUkUsIGNudCA9IDA7CiAJdTY0IHZhbDY0OwpAQCAtNDMwMywxMSArNDMwMywxMSBAQAogCXNwLT5zdGF0cy50eF9lcnJvcnMgPQogCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+dG1hY19hbnlfZXJyX2ZybXMpOwogCXNwLT5zdGF0cy5yeF9lcnJvcnMgPQotCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19kcm9wX2ZybXMpOworCQlsZTY0X3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY19kcm9wX2ZybXMpOwogCXNwLT5zdGF0cy5tdWx0aWNhc3QgPQogCQlsZTMyX3RvX2NwdShtYWNfY29udHJvbC0+c3RhdHNfaW5mby0+cm1hY192bGRfbWNzdF9mcm1zKTsKIAlzcC0+c3RhdHMucnhfbGVuZ3RoX2Vycm9ycyA9Ci0JCWxlMzJfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX2xvbmdfZnJtcyk7CisJCWxlNjRfdG9fY3B1KG1hY19jb250cm9sLT5zdGF0c19pbmZvLT5ybWFjX2xvbmdfZnJtcyk7CiAKIAlyZXR1cm4gKCZzcC0+c3RhdHMpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc2tnZS5jIGIvZHJpdmVycy9uZXQvc2tnZS5jCmluZGV4IDkxNDJkOTEuLjcwNWU5YTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3NrZ2UuYworKysgYi9kcml2ZXJzL25ldC9za2dlLmMKQEAgLTU4LDYgKzU4LDcgQEAKICNkZWZpbmUgVFhfV0FUQ0hET0cJCSg1ICogSFopCiAjZGVmaW5lIE5BUElfV0VJR0hUCQk2NAogI2RlZmluZSBCTElOS19NUwkJMjUwCisjZGVmaW5lIExJTktfSFoJCQkoSFovMikKIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJTeXNLb25uZWN0IEdpZ2FiaXQgRXRoZXJuZXQgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTdGVwaGVuIEhlbW1pbmdlciA8c2hlbW1pbmdlckBvc2RsLm9yZz4iKTsKQEAgLTYwNSw3ICs2MDYsMTIgQEAKIAlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTKSB7CiAJCXN3aXRjaCAobW9kZSkgewogCQljYXNlIExFRF9NT0RFX09GRjoKLQkJCXhtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX0JDT01fUF9FWFRfQ1RSTCwgUEhZX0JfUEVDX0xFRF9PRkYpOworCQkJaWYgKGh3LT5waHlfdHlwZSA9PSBTS19QSFlfQkNPTSkKKwkJCQl4bV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9CQ09NX1BfRVhUX0NUUkwsIFBIWV9CX1BFQ19MRURfT0ZGKTsKKwkJCWVsc2UgeworCQkJCXNrZ2Vfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFRYX0xFRF9WQUwpLCAwKTsKKwkJCQlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0xFRF9DVFJMKSwgTEVEX1RfT0ZGKTsKKwkJCX0KIAkJCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgTE5LX0xFRF9SRUcpLCBMSU5LTEVEX09GRik7CiAJCQlza2dlX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBSWF9MRURfVkFMKSwgMCk7CiAJCQlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFJYX0xFRF9DVFJMKSwgTEVEX1RfT0ZGKTsKQEAgLTYyNSw4ICs2MzEsMTQgQEAKIAkJCXNrZ2Vfd3JpdGUzMihodywgU0tfUkVHKHBvcnQsIFJYX0xFRF9WQUwpLCAxMDApOwogCQkJc2tnZV93cml0ZTgoaHcsIFNLX1JFRyhwb3J0LCBSWF9MRURfQ1RSTCksIExFRF9TVEFSVCk7CiAKLQkJCXhtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX0JDT01fUF9FWFRfQ1RSTCwgUEhZX0JfUEVDX0xFRF9PTik7Ci0JCQlicmVhazsKKwkJCWlmIChody0+cGh5X3R5cGUgPT0gU0tfUEhZX0JDT00pCisJCQkJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9QX0VYVF9DVFJMLCBQSFlfQl9QRUNfTEVEX09OKTsKKwkJCWVsc2UgeworCQkJCXNrZ2Vfd3JpdGU4KGh3LCBTS19SRUcocG9ydCwgVFhfTEVEX1RTVCksIExFRF9UX09OKTsKKwkJCQlza2dlX3dyaXRlMzIoaHcsIFNLX1JFRyhwb3J0LCBUWF9MRURfVkFMKSwgMTAwKTsKKwkJCQlza2dlX3dyaXRlOChodywgU0tfUkVHKHBvcnQsIFRYX0xFRF9DVFJMKSwgTEVEX1NUQVJUKTsKKwkJCX0KKwogCQl9CiAJfSBlbHNlIHsKIAkJc3dpdGNoIChtb2RlKSB7CkBAIC04NzksNiArODkxLDkgQEAKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9QSFlfQUREUiwgcmVnIHwgaHctPnBoeV9hZGRyKTsKIAkqdmFsID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9QSFlfREFUQSk7CiAKKwlpZiAoaHctPnBoeV90eXBlID09IFNLX1BIWV9YTUFDKQorCQlnb3RvIHJlYWR5OworCiAJZm9yIChpID0gMDsgaSA8IFBIWV9SRVRSSUVTOyBpKyspIHsKIAkJaWYgKHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCkgJiBYTV9NTVVfUEhZX1JEWSkKIAkJCWdvdG8gcmVhZHk7CkBAIC05NjUsNyArOTgwLDggQEAKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9SWF9DTUQsIDApOwkvKiByZXNldCBSWCBDTUQgUmVnICovCiAKIAkvKiBkaXNhYmxlIEJyb2FkY29tIFBIWSBJUlEgKi8KLQl4bV93cml0ZTE2KGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgMHhmZmZmKTsKKwlpZiAoaHctPnBoeV90eXBlID09IFNLX1BIWV9CQ09NKQorCQl4bV93cml0ZTE2KGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgMHhmZmZmKTsKIAogCXhtX291dGhhc2goaHcsIHBvcnQsIFhNX0hTTSwgemVybyk7CiB9CkBAIC0xMDAwLDYwICsxMDE2LDY0IEBACiAKIAkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKIAkJCXNrZ2VfbGlua19kb3duKHNrZ2UpOwotCX0gZWxzZSB7Ci0JCWlmIChza2dlLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFICYmCi0JCSAgICAoc3RhdHVzICYgUEhZX1NUX0FOX09WRVIpKSB7Ci0JCQl1MTYgbHBhID0geG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9CQ09NX0FVTkVfTFApOwotCQkJdTE2IGF1eCA9IHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfQkNPTV9BVVhfU1RBVCk7CisJCXJldHVybjsKKwl9CiAKLQkJCWlmIChscGEgJiBQSFlfQl9BTl9SRikgewotCQkJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiByZW1vdGUgZmF1bHRcbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSk7Ci0JCQkJcmV0dXJuOwotCQkJfQorCWlmIChza2dlLT5hdXRvbmVnID09IEFVVE9ORUdfRU5BQkxFKSB7CisJCXUxNiBscGEsIGF1eDsKIAotCQkJLyogQ2hlY2sgRHVwbGV4IG1pc21hdGNoICovCi0JCQlzd2l0Y2ggKGF1eCAmIFBIWV9CX0FTX0FOX1JFU19NU0spIHsKLQkJCWNhc2UgUEhZX0JfUkVTXzEwMDBGRDoKLQkJCQlza2dlLT5kdXBsZXggPSBEVVBMRVhfRlVMTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgUEhZX0JfUkVTXzEwMDBIRDoKLQkJCQlza2dlLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IGR1cGxleCBtaXNtYXRjaFxuIiwKLQkJCQkgICAgICAgZGV2LT5uYW1lKTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCWlmICghKHN0YXR1cyAmIFBIWV9TVF9BTl9PVkVSKSkKKwkJCXJldHVybjsKIAotCi0JCQkvKiBXZSBhcmUgdXNpbmcgSUVFRSA4MDIuM3ovRDUuMCBUYWJsZSAzNy00ICovCi0JCQlzd2l0Y2ggKGF1eCAmIFBIWV9CX0FTX1BBVVNFX01TSykgewotCQkJY2FzZSBQSFlfQl9BU19QQVVTRV9NU0s6Ci0JCQkJc2tnZS0+Zmxvd19jb250cm9sID0gRkxPV19NT0RFX1NZTU1FVFJJQzsKLQkJCQlicmVhazsKLQkJCWNhc2UgUEhZX0JfQVNfUFJSOgotCQkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9SRU1fU0VORDsKLQkJCQlicmVhazsKLQkJCWNhc2UgUEhZX0JfQVNfUFJUOgotCQkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9MT0NfU0VORDsKLQkJCQlicmVhazsKLQkJCWRlZmF1bHQ6Ci0JCQkJc2tnZS0+Zmxvd19jb250cm9sID0gRkxPV19NT0RFX05PTkU7Ci0JCQl9Ci0KLQkJCXNrZ2UtPnNwZWVkID0gU1BFRURfMTAwMDsKKwkJbHBhID0geG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9YTUFDX0FVTkVfTFApOworCQlpZiAobHBhICYgUEhZX0JfQU5fUkYpIHsKKwkJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiByZW1vdGUgZmF1bHRcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXJldHVybjsKIAkJfQogCi0JCWlmICghbmV0aWZfY2Fycmllcl9vayhkZXYpKQotCQkJZ2VuZXNpc19saW5rX3VwKHNrZ2UpOworCQlhdXggPSB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX0JDT01fQVVYX1NUQVQpOworCisJCS8qIENoZWNrIER1cGxleCBtaXNtYXRjaCAqLworCQlzd2l0Y2ggKGF1eCAmIFBIWV9CX0FTX0FOX1JFU19NU0spIHsKKwkJY2FzZSBQSFlfQl9SRVNfMTAwMEZEOgorCQkJc2tnZS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfQl9SRVNfMTAwMEhEOgorCQkJc2tnZS0+ZHVwbGV4ID0gRFVQTEVYX0hBTEY7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXByaW50ayhLRVJOX05PVElDRSBQRlggIiVzOiBkdXBsZXggbWlzbWF0Y2hcbiIsCisJCQkgICAgICAgZGV2LT5uYW1lKTsKKwkJCXJldHVybjsKKwkJfQorCisKKwkJLyogV2UgYXJlIHVzaW5nIElFRUUgODAyLjN6L0Q1LjAgVGFibGUgMzctNCAqLworCQlzd2l0Y2ggKGF1eCAmIFBIWV9CX0FTX1BBVVNFX01TSykgeworCQljYXNlIFBIWV9CX0FTX1BBVVNFX01TSzoKKwkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9TWU1NRVRSSUM7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfQl9BU19QUlI6CisJCQlza2dlLT5mbG93X2NvbnRyb2wgPSBGTE9XX01PREVfUkVNX1NFTkQ7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfQl9BU19QUlQ6CisJCQlza2dlLT5mbG93X2NvbnRyb2wgPSBGTE9XX01PREVfTE9DX1NFTkQ7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9OT05FOworCQl9CisJCXNrZ2UtPnNwZWVkID0gU1BFRURfMTAwMDsKIAl9CisKKwlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJZ2VuZXNpc19saW5rX3VwKHNrZ2UpOwogfQogCiAvKiBCcm9hZGNvbSA1NDAwIG9ubHkgc3VwcG9ydHMgZ2lhZ2FiaXQhIFN5c0tvbm5lY3QgZGlkIG5vdCBwdXQgYW4gYWRkaXRpb25hbAogICogUGh5IG9uIGZvciAxMDAgb3IgMTBNYml0IG9wZXJhdGlvbgogICovCi1zdGF0aWMgdm9pZCBiY29tX3BoeV9pbml0KHN0cnVjdCBza2dlX3BvcnQgKnNrZ2UsIGludCBqdW1ibykKK3N0YXRpYyB2b2lkIGJjb21fcGh5X2luaXQoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKIHsKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CkBAIC0xMTQ0LDcgKzExNjQsNyBAQAogCQkgICAgIHBoeV9wYXVzZV9tYXBbc2tnZS0+Zmxvd19jb250cm9sXSB8IFBIWV9BTl9DU01BKTsKIAogCS8qIEhhbmRsZSBKdW1ibyBmcmFtZXMgKi8KLQlpZiAoanVtYm8pIHsKKwlpZiAoaHctPmRldltwb3J0XS0+bXR1ID4gRVRIX0RBVEFfTEVOKSB7CiAJCXhtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX0JDT01fQVVYX0NUUkwsCiAJCQkgICAgIFBIWV9CX0FDX1RYX1RTVCB8IFBIWV9CX0FDX0xPTkdfUEFDSyk7CiAKQEAgLTExNTcsOCArMTE3NywxNTQgQEAKIAogCS8qIFVzZSBsaW5rIHN0YXR1cyBjaGFuZ2UgaW50ZXJydXB0ICovCiAJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgUEhZX0JfREVGX01TSyk7Cit9CiAKLQliY29tX2NoZWNrX2xpbmsoaHcsIHBvcnQpOworc3RhdGljIHZvaWQgeG1fcGh5X2luaXQoc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSkKK3sKKwlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKKwlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CisJdTE2IGN0cmwgPSAwOworCisJaWYgKHNrZ2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJaWYgKHNrZ2UtPmFkdmVydGlzaW5nICYgQURWRVJUSVNFRF8xMDAwYmFzZVRfSGFsZikKKwkJCWN0cmwgfD0gUEhZX1hfQU5fSEQ7CisJCWlmIChza2dlLT5hZHZlcnRpc2luZyAmIEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1bGwpCisJCQljdHJsIHw9IFBIWV9YX0FOX0ZEOworCisJCXN3aXRjaChza2dlLT5mbG93X2NvbnRyb2wpIHsKKwkJY2FzZSBGTE9XX01PREVfTk9ORToKKwkJCWN0cmwgfD0gUEhZX1hfUF9OT19QQVVTRTsKKwkJCWJyZWFrOworCQljYXNlIEZMT1dfTU9ERV9MT0NfU0VORDoKKwkJCWN0cmwgfD0gUEhZX1hfUF9BU1lNX01EOworCQkJYnJlYWs7CisJCWNhc2UgRkxPV19NT0RFX1NZTU1FVFJJQzoKKwkJCWN0cmwgfD0gUEhZX1hfUF9CT1RIX01EOworCQkJYnJlYWs7CisJCX0KKworCQl4bV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9YTUFDX0FVTkVfQURWLCBjdHJsKTsKKworCQkvKiBSZXN0YXJ0IEF1dG8tbmVnb3RpYXRpb24gKi8KKwkJY3RybCA9IFBIWV9DVF9BTkUgfCBQSFlfQ1RfUkVfQ0ZHOworCX0gZWxzZSB7CisJCS8qIFNldCBEdXBsZXhNb2RlIGluIENvbmZpZyByZWdpc3RlciAqLworCQlpZiAoc2tnZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQkJY3RybCB8PSBQSFlfQ1RfRFVQX01EOworCQkvKgorCQkgKiBEbyBOT1QgZW5hYmxlIEF1dG8tbmVnb3RpYXRpb24gaGVyZS4gVGhpcyB3b3VsZCBob2xkCisJCSAqIHRoZSBsaW5rIGRvd24gYmVjYXVzZSBubyBJRExFcyBhcmUgdHJhbnNtaXR0ZWQKKwkJICovCisJfQorCisJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfWE1BQ19DVFJMLCBjdHJsKTsKKworCS8qIFBvbGwgUEhZIGZvciBzdGF0dXMgY2hhbmdlcyAqLworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmc2tnZS0+bGlua190aHJlYWQsIExJTktfSFopOworfQorCitzdGF0aWMgdm9pZCB4bV9jaGVja19saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGRldik7CisJc3RydWN0IHNrZ2VfaHcgKmh3ID0gc2tnZS0+aHc7CisJaW50IHBvcnQgPSBza2dlLT5wb3J0OworCXUxNiBzdGF0dXM7CisKKwkvKiByZWFkIHR3aWNlIGJlY2F1c2Ugb2YgbGF0Y2ggKi8KKwkodm9pZCkgeG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9YTUFDX1NUQVQpOworCXN0YXR1cyA9IHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfWE1BQ19TVEFUKTsKKworCWlmICgoc3RhdHVzICYgUEhZX1NUX0xTWU5DKSA9PSAwKSB7CisJCXUxNiBjbWQgPSB4bV9yZWFkMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQpOworCQljbWQgJj0gfihYTV9NTVVfRU5BX1JYIHwgWE1fTU1VX0VOQV9UWCk7CisJCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX01NVV9DTUQsIGNtZCk7CisJCS8qIGR1bW15IHJlYWQgdG8gZW5zdXJlIHdyaXRpbmcgKi8KKwkJKHZvaWQpIHhtX3JlYWQxNihodywgcG9ydCwgWE1fTU1VX0NNRCk7CisKKwkJaWYgKG5ldGlmX2NhcnJpZXJfb2soZGV2KSkKKwkJCXNrZ2VfbGlua19kb3duKHNrZ2UpOworCQlyZXR1cm47CisJfQorCisJaWYgKHNrZ2UtPmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUpIHsKKwkJdTE2IGxwYSwgcmVzOworCisJCWlmICghKHN0YXR1cyAmIFBIWV9TVF9BTl9PVkVSKSkKKwkJCXJldHVybjsKKworCQlscGEgPSB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX1hNQUNfQVVORV9MUCk7CisJCWlmIChscGEgJiBQSFlfQl9BTl9SRikgeworCQkJcHJpbnRrKEtFUk5fTk9USUNFIFBGWCAiJXM6IHJlbW90ZSBmYXVsdFxuIiwKKwkJCSAgICAgICBkZXYtPm5hbWUpOworCQkJcmV0dXJuOworCQl9CisKKwkJcmVzID0geG1fcGh5X3JlYWQoaHcsIHBvcnQsIFBIWV9YTUFDX1JFU19BQkkpOworCisJCS8qIENoZWNrIER1cGxleCBtaXNtYXRjaCAqLworCQlzd2l0Y2ggKHJlcyAmIChQSFlfWF9SU19IRCB8IFBIWV9YX1JTX0ZEKSkgeworCQljYXNlIFBIWV9YX1JTX0ZEOgorCQkJc2tnZS0+ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7CisJCQlicmVhazsKKwkJY2FzZSBQSFlfWF9SU19IRDoKKwkJCXNrZ2UtPmR1cGxleCA9IERVUExFWF9IQUxGOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgUEZYICIlczogZHVwbGV4IG1pc21hdGNoXG4iLAorCQkJICAgICAgIGRldi0+bmFtZSk7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBXZSBhcmUgdXNpbmcgSUVFRSA4MDIuM3ovRDUuMCBUYWJsZSAzNy00ICovCisJCWlmIChscGEgJiBQSFlfWF9QX1NZTV9NRCkKKwkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9TWU1NRVRSSUM7CisJCWVsc2UgaWYgKChscGEgJiBQSFlfWF9SU19QQVVTRSkgPT0gUEhZX1hfUF9BU1lNX01EKQorCQkJc2tnZS0+Zmxvd19jb250cm9sID0gRkxPV19NT0RFX1JFTV9TRU5EOworCQllbHNlIGlmICgobHBhICYgUEhZX1hfUlNfUEFVU0UpID09IFBIWV9YX1BfQk9USF9NRCkKKwkJCXNrZ2UtPmZsb3dfY29udHJvbCA9IEZMT1dfTU9ERV9MT0NfU0VORDsKKwkJZWxzZQorCQkJc2tnZS0+Zmxvd19jb250cm9sID0gRkxPV19NT0RFX05PTkU7CisKKworCQlza2dlLT5zcGVlZCA9IFNQRUVEXzEwMDA7CisJfQorCisJaWYgKCFuZXRpZl9jYXJyaWVyX29rKGRldikpCisJCWdlbmVzaXNfbGlua191cChza2dlKTsKK30KKworLyogUG9sbCB0byBjaGVjayBmb3IgbGluayBjb21pbmcgdXAuCisgKiBTaW5jZSBpbnRlcm5hbCBQSFkgaXMgd2lyZWQgdG8gYSBsZXZlbCB0cmlnZ2VyZWQgcGluLCBjYW4ndAorICogZ2V0IGFuIGludGVycnVwdCB3aGVuIGNhcnJpZXIgaXMgZGV0ZWN0ZWQuCisgKi8KK3N0YXRpYyB2b2lkIHhtX2xpbmtfdGltZXIodm9pZCAqYXJnKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBhcmc7CisJc3RydWN0IHNrZ2VfcG9ydCAqc2tnZSA9IG5ldGRldl9wcml2KGFyZyk7CisgCXN0cnVjdCBza2dlX2h3ICpodyA9IHNrZ2UtPmh3OworCWludCBwb3J0ID0gc2tnZS0+cG9ydDsKKworCWlmICghbmV0aWZfcnVubmluZyhkZXYpKQorCQlyZXR1cm47CisKKwlpZiAobmV0aWZfY2Fycmllcl9vayhkZXYpKSB7CisJCXhtX3JlYWQxNihodywgcG9ydCwgWE1fSVNSQyk7CisJCWlmICghKHhtX3JlYWQxNihodywgcG9ydCwgWE1fSVNSQykgJiBYTV9JU19JTlBfQVNTKSkKKwkJCWdvdG8gbm9jaGFuZ2U7CisJfSBlbHNlIHsKKwkJaWYgKHhtX3JlYWQzMihodywgcG9ydCwgWE1fR1BfUE9SVCkgJiBYTV9HUF9JTlBfQVNTKQorCQkJZ290byBub2NoYW5nZTsKKwkJeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9JU1JDKTsKKwkJaWYgKHhtX3JlYWQxNihodywgcG9ydCwgWE1fSVNSQykgJiBYTV9JU19JTlBfQVNTKQorCQkJZ290byBub2NoYW5nZTsKKwl9CisKKwltdXRleF9sb2NrKCZody0+cGh5X211dGV4KTsKKwl4bV9jaGVja19saW5rKGRldik7CisJbXV0ZXhfdW5sb2NrKCZody0+cGh5X211dGV4KTsKKworbm9jaGFuZ2U6CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZza2dlLT5saW5rX3RocmVhZCwgTElOS19IWik7CiB9CiAKIHN0YXRpYyB2b2lkIGdlbmVzaXNfbWFjX2luaXQoc3RydWN0IHNrZ2VfaHcgKmh3LCBpbnQgcG9ydCkKQEAgLTExODksMjAgKzEzNTUsMjkgQEAKIAkgKiBuYW1lbHkgZm9yIHRoZSAxMDAwYmFzZVRYIGNhcmRzIHRoYXQgdXNlIHRoZSBYTUFDJ3MKIAkgKiBHTUlJIG1vZGUuCiAJICovCi0JLyogVGFrZSBleHRlcm5hbCBQaHkgb3V0IG9mIHJlc2V0ICovCi0JciA9IHNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7Ci0JaWYgKHBvcnQgPT0gMCkKLQkJciB8PSBHUF9ESVJfMHxHUF9JT18wOwotCWVsc2UKLQkJciB8PSBHUF9ESVJfMnxHUF9JT18yOworCWlmIChody0+cGh5X3R5cGUgIT0gU0tfUEhZX1hNQUMpIHsKKwkJLyogVGFrZSBleHRlcm5hbCBQaHkgb3V0IG9mIHJlc2V0ICovCisJCXIgPSBza2dlX3JlYWQzMihodywgQjJfR1BfSU8pOworCQlpZiAocG9ydCA9PSAwKQorCQkJciB8PSBHUF9ESVJfMHxHUF9JT18wOworCQllbHNlCisJCQlyIHw9IEdQX0RJUl8yfEdQX0lPXzI7CiAKLQlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLCByKTsKKwkJc2tnZV93cml0ZTMyKGh3LCBCMl9HUF9JTywgcik7CisKKwkJLyogRW5hYmxlIEdNSUkgaW50ZXJmYWNlICovCisJCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX0hXX0NGRywgWE1fSFdfR01JSV9NRCk7CisJfQogCiAKLQkvKiBFbmFibGUgR01JSSBpbnRlcmZhY2UgKi8KLQl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9IV19DRkcsIFhNX0hXX0dNSUlfTUQpOwotCi0JYmNvbV9waHlfaW5pdChza2dlLCBqdW1ibyk7CisJc3dpdGNoKGh3LT5waHlfdHlwZSkgeworCWNhc2UgU0tfUEhZX1hNQUM6CisJCXhtX3BoeV9pbml0KHNrZ2UpOworCQlicmVhazsKKwljYXNlIFNLX1BIWV9CQ09NOgorCQliY29tX3BoeV9pbml0KHNrZ2UpOworCQliY29tX2NoZWNrX2xpbmsoaHcsIHBvcnQpOworCX0KIAogCS8qIFNldCBTdGF0aW9uIEFkZHJlc3MgKi8KIAl4bV9vdXRhZGRyKGh3LCBwb3J0LCBYTV9TQSwgZGV2LT5kZXZfYWRkcik7CkBAIC0xMzM1LDE2ICsxNTEwLDE4IEBACiAJc2tnZV93cml0ZTE2KGh3LCBTS19SRUcocG9ydCwgVFhfTUZGX0NUUkwxKSwgTUZGX1NFVF9NQUNfUlNUKTsKIAogCS8qIEZvciBleHRlcm5hbCBQSFlzIHRoZXJlIG11c3QgYmUgc3BlY2lhbCBoYW5kbGluZyAqLwotCXJlZyA9IHNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7Ci0JaWYgKHBvcnQgPT0gMCkgewotCQlyZWcgfD0gR1BfRElSXzA7Ci0JCXJlZyAmPSB+R1BfSU9fMDsKLQl9IGVsc2UgewotCQlyZWcgfD0gR1BfRElSXzI7Ci0JCXJlZyAmPSB+R1BfSU9fMjsKKwlpZiAoaHctPnBoeV90eXBlICE9IFNLX1BIWV9YTUFDKSB7CisJCXJlZyA9IHNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7CisJCWlmIChwb3J0ID09IDApIHsKKwkJCXJlZyB8PSBHUF9ESVJfMDsKKwkJCXJlZyAmPSB+R1BfSU9fMDsKKwkJfSBlbHNlIHsKKwkJCXJlZyB8PSBHUF9ESVJfMjsKKwkJCXJlZyAmPSB+R1BfSU9fMjsKKwkJfQorCQlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLCByZWcpOworCQlza2dlX3JlYWQzMihodywgQjJfR1BfSU8pOwogCX0KLQlza2dlX3dyaXRlMzIoaHcsIEIyX0dQX0lPLCByZWcpOwotCXNrZ2VfcmVhZDMyKGh3LCBCMl9HUF9JTyk7CiAKIAl4bV93cml0ZTE2KGh3LCBwb3J0LCBYTV9NTVVfQ01ELAogCQkJeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKQpAQCAtMTQwNiw3ICsxNTgzLDcgQEAKIAlzdHJ1Y3Qgc2tnZV9odyAqaHcgPSBza2dlLT5odzsKIAlpbnQgcG9ydCA9IHNrZ2UtPnBvcnQ7CiAJdTE2IGNtZDsKLQl1MzIgbW9kZSwgbXNrOworCXUzMiBtb2RlOwogCiAJY21kID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKTsKIApAQCAtMTQ1NCwyNyArMTYzMSwyNCBAQAogCX0KIAogCXhtX3dyaXRlMzIoaHcsIHBvcnQsIFhNX01PREUsIG1vZGUpOwotCi0JbXNrID0gWE1fREVGX01TSzsKLQkvKiBkaXNhYmxlIEdQMCBpbnRlcnJ1cHQgYml0IGZvciBleHRlcm5hbCBQaHkgKi8KLQltc2sgfD0gWE1fSVNfSU5QX0FTUzsKLQotCXhtX3dyaXRlMTYoaHcsIHBvcnQsIFhNX0lNU0ssIG1zayk7CisJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fSU1TSywgWE1fREVGX01TSyk7CiAJeG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9JU1JDKTsKIAogCS8qIGdldCBNTVUgQ29tbWFuZCBSZWcuICovCiAJY21kID0geG1fcmVhZDE2KGh3LCBwb3J0LCBYTV9NTVVfQ01EKTsKLQlpZiAoc2tnZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQorCWlmIChody0+cGh5X3R5cGUgIT0gU0tfUEhZX1hNQUMgJiYgc2tnZS0+ZHVwbGV4ID09IERVUExFWF9GVUxMKQogCQljbWQgfD0gWE1fTU1VX0dNSUlfRkQ7CiAKIAkvKgogCSAqIFdvcmthcm91bmQgQkNPTSBFcnJhdGEgKCMxMDUyMykgZm9yIGFsbCBCQ29tIFBoeXMKIAkgKiBFbmFibGUgUG93ZXIgTWFuYWdlbWVudCBhZnRlciBsaW5rIHVwCiAJICovCi0JeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9BVVhfQ1RSTCwKLQkJICAgICB4bV9waHlfcmVhZChodywgcG9ydCwgUEhZX0JDT01fQVVYX0NUUkwpCi0JCSAgICAgJiB+UEhZX0JfQUNfRElTX1BNKTsKLQl4bV9waHlfd3JpdGUoaHcsIHBvcnQsIFBIWV9CQ09NX0lOVF9NQVNLLCBQSFlfQl9ERUZfTVNLKTsKKwlpZiAoaHctPnBoeV90eXBlID09IFNLX1BIWV9CQ09NKSB7CisJCXhtX3BoeV93cml0ZShodywgcG9ydCwgUEhZX0JDT01fQVVYX0NUUkwsCisJCQkgICAgIHhtX3BoeV9yZWFkKGh3LCBwb3J0LCBQSFlfQkNPTV9BVVhfQ1RSTCkKKwkJCSAgICAgJiB+UEhZX0JfQUNfRElTX1BNKTsKKwkJeG1fcGh5X3dyaXRlKGh3LCBwb3J0LCBQSFlfQkNPTV9JTlRfTUFTSywgUEhZX0JfREVGX01TSyk7CisJfQogCiAJLyogZW5hYmxlIFJ4L1R4ICovCiAJeG1fd3JpdGUxNihodywgcG9ydCwgWE1fTU1VX0NNRCwKQEAgLTIyNDAsNiArMjQxNCw4IEBACiAJCXByaW50ayhLRVJOX0lORk8gUEZYICIlczogZGlzYWJsaW5nIGludGVyZmFjZVxuIiwgZGV2LT5uYW1lKTsKIAogCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlpZiAoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGh3LT5waHlfdHlwZSA9PSBTS19QSFlfWE1BQykKKwkJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmc2tnZS0+bGlua190aHJlYWQpOwogCiAJc2tnZV93cml0ZTgoc2tnZS0+aHcsIFNLX1JFRyhza2dlLT5wb3J0LCBMTktfTEVEX1JFRyksIExFRF9PRkYpOwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCkBAIC0yODYyLDcgKzMwMzgsNyBAQAogCQlpZiAobmV0aWZfcnVubmluZyhkZXYpKSB7CiAJCQlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9HRU5FU0lTKQogCQkJCXl1a29uX3BoeV9pbnRyKHNrZ2UpOwotCQkJZWxzZQorCQkJZWxzZSBpZiAoaHctPnBoeV90eXBlID09IFNLX1BIWV9CQ09NKQogCQkJCWJjb21fcGh5X2ludHIoc2tnZSk7CiAJCX0KIAl9CkBAIC0zMDE0LDcgKzMxOTAsNyBAQAogewogCXUzMiByZWc7CiAJdTE2IGN0c3QsIHBjaV9zdGF0dXM7Ci0JdTggdDgsIG1hY19jZmcsIHBtZF90eXBlLCBwaHlfdHlwZTsKKwl1OCB0OCwgbWFjX2NmZywgcG1kX3R5cGU7CiAJaW50IGk7CiAKIAljdHN0ID0gc2tnZV9yZWFkMTYoaHcsIEIwX0NUU1QpOwpAQCAtMzAzOCwxOSArMzIxNCwyMiBAQAogCQkgICAgIGN0c3QgJiAoQ1NfQ0xLX1JVTl9IT1R8Q1NfQ0xLX1JVTl9SU1R8Q1NfQ0xLX1JVTl9FTkEpKTsKIAogCWh3LT5jaGlwX2lkID0gc2tnZV9yZWFkOChodywgQjJfQ0hJUF9JRCk7Ci0JcGh5X3R5cGUgPSBza2dlX3JlYWQ4KGh3LCBCMl9FXzEpICYgMHhmOworCWh3LT5waHlfdHlwZSA9IHNrZ2VfcmVhZDgoaHcsIEIyX0VfMSkgJiAweGY7CiAJcG1kX3R5cGUgPSBza2dlX3JlYWQ4KGh3LCBCMl9QTURfVFlQKTsKIAlody0+Y29wcGVyID0gKHBtZF90eXBlID09ICdUJyB8fCBwbWRfdHlwZSA9PSAnMScpOwogCiAJc3dpdGNoIChody0+Y2hpcF9pZCkgewogCWNhc2UgQ0hJUF9JRF9HRU5FU0lTOgotCQlzd2l0Y2ggKHBoeV90eXBlKSB7CisJCXN3aXRjaCAoaHctPnBoeV90eXBlKSB7CisJCWNhc2UgU0tfUEhZX1hNQUM6CisJCQlody0+cGh5X2FkZHIgPSBQSFlfQUREUl9YTUFDOworCQkJYnJlYWs7CiAJCWNhc2UgU0tfUEhZX0JDT006CiAJCQlody0+cGh5X2FkZHIgPSBQSFlfQUREUl9CQ09NOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5zdXBwb3J0ZWQgcGh5IHR5cGUgMHgleFxuIiwKLQkJCSAgICAgICBwY2lfbmFtZShody0+cGRldiksIHBoeV90eXBlKTsKKwkJCSAgICAgICBwY2lfbmFtZShody0+cGRldiksIGh3LT5waHlfdHlwZSk7CiAJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJCX0KIAkJYnJlYWs7CkBAIC0zMDU4LDcgKzMyMzcsNyBAQAogCWNhc2UgQ0hJUF9JRF9ZVUtPTjoKIAljYXNlIENISVBfSURfWVVLT05fTElURToKIAljYXNlIENISVBfSURfWVVLT05fTFA6Ci0JCWlmIChwaHlfdHlwZSA8IFNLX1BIWV9NQVJWX0NPUFBFUiAmJiBwbWRfdHlwZSAhPSAnUycpCisJCWlmIChody0+cGh5X3R5cGUgPCBTS19QSFlfTUFSVl9DT1BQRVIgJiYgcG1kX3R5cGUgIT0gJ1MnKQogCQkJaHctPmNvcHBlciA9IDE7CiAKIAkJaHctPnBoeV9hZGRyID0gUEhZX0FERFJfTUFSVjsKQEAgLTMwODksMTAgKzMyNjgsMTMgQEAKIAllbHNlCiAJCWh3LT5yYW1fc2l6ZSA9IHQ4ICogNDA5NjsKIAotCWh3LT5pbnRyX21hc2sgPSBJU19IV19FUlIgfCBJU19FWFRfUkVHIHwgSVNfUE9SVF8xOworCWh3LT5pbnRyX21hc2sgPSBJU19IV19FUlIgfCBJU19QT1JUXzE7CiAJaWYgKGh3LT5wb3J0cyA+IDEpCiAJCWh3LT5pbnRyX21hc2sgfD0gSVNfUE9SVF8yOwogCisJaWYgKCEoaHctPmNoaXBfaWQgPT0gQ0hJUF9JRF9HRU5FU0lTICYmIGh3LT5waHlfdHlwZSA9PSBTS19QSFlfWE1BQykpCisJCWh3LT5pbnRyX21hc2sgfD0gSVNfRVhUX1JFRzsKKwogCWlmIChody0+Y2hpcF9pZCA9PSBDSElQX0lEX0dFTkVTSVMpCiAJCWdlbmVzaXNfaW5pdChodyk7CiAJZWxzZSB7CkBAIC0zMjI2LDYgKzM0MDgsOSBAQAogCiAJc2tnZS0+cG9ydCA9IHBvcnQ7CiAKKwkvKiBPbmx5IHVzZWQgZm9yIEdlbmVzaXMgWE1BQyAqLworCUlOSVRfV09SSygmc2tnZS0+bGlua190aHJlYWQsIHhtX2xpbmtfdGltZXIsIGRldik7CisKIAlpZiAoaHctPmNoaXBfaWQgIT0gQ0hJUF9JRF9HRU5FU0lTKSB7CiAJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9JUF9DU1VNIHwgTkVUSUZfRl9TRzsKIAkJc2tnZS0+cnhfY3N1bSA9IDE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9za2dlLmggYi9kcml2ZXJzL25ldC9za2dlLmgKaW5kZXggNzllMDkyNy4uZDBiNDdkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc2tnZS5oCisrKyBiL2RyaXZlcnMvbmV0L3NrZ2UuaApAQCAtOTM0LDcgKzkzNCw3IEBACiAJUEhZX1hNQUNfQVVORV9BRFYJPSAweDA0LC8qIDE2IGJpdCByL3cJQXV0by1OZWcuIEFkdmVydGlzZW1lbnQgKi8KIAlQSFlfWE1BQ19BVU5FX0xQCT0gMHgwNSwvKiAxNiBiaXQgci9vCUxpbmsgUGFydG5lciBBYmkgUmVnICovCiAJUEhZX1hNQUNfQVVORV9FWFAJPSAweDA2LC8qIDE2IGJpdCByL28JQXV0by1OZWcuIEV4cGFuc2lvbiBSZWcgKi8KLQlQSFlfWE1BQ19ORVBHCT0gMHgwNywvKiAxNiBiaXQgci93CU5leHQgUGFnZSBSZWdpc3RlciAqLworCVBIWV9YTUFDX05FUEcJCT0gMHgwNywvKiAxNiBiaXQgci93CU5leHQgUGFnZSBSZWdpc3RlciAqLwogCVBIWV9YTUFDX05FUEdfTFAJPSAweDA4LC8qIDE2IGJpdCByL28JTmV4dCBQYWdlIExpbmsgUGFydG5lciAqLwogCiAJUEhZX1hNQUNfRVhUX1NUQVQJPSAweDBmLC8qIDE2IGJpdCByL28JRXh0IFN0YXR1cyBSZWdpc3RlciAqLwpAQCAtMTA5NywxMyArMTA5NywzNiBAQAogCiAvKiBQYXVzZSBCaXRzIChQSFlfWF9BTl9QQVVTRSBhbmQgUEhZX1hfUlNfUEFVU0UpIGVuY29kaW5nICovCiBlbnVtIHsKLQlQSFlfWF9QX05PX1BBVVNFCT0gMDw8NywvKiBCaXQgIDguLjc6CW5vIFBhdXNlIE1vZGUgKi8KKwlQSFlfWF9QX05PX1BBVVNFPSAwPDw3LC8qIEJpdCAgOC4uNzoJbm8gUGF1c2UgTW9kZSAqLwogCVBIWV9YX1BfU1lNX01ECT0gMTw8NywgLyogQml0ICA4Li43OglzeW1tZXRyaWMgUGF1c2UgTW9kZSAqLwogCVBIWV9YX1BfQVNZTV9NRAk9IDI8PDcsLyogQml0ICA4Li43Oglhc3ltbWV0cmljIFBhdXNlIE1vZGUgKi8KIAlQSFlfWF9QX0JPVEhfTUQJPSAzPDw3LC8qIEJpdCAgOC4uNzoJYm90aCBQYXVzZSBNb2RlICovCiB9OwogCiAKKy8qKioqKiAgUEhZX1hNQUNfRVhUX1NUQVQJMTYgYml0IHIvdwlFeHRlbmRlZCBTdGF0dXMgUmVnaXN0ZXIgKioqKiovCitlbnVtIHsKKwlQSFlfWF9FWF9GRAk9IDE8PDE1LCAvKiBCaXQgMTU6CURldmljZSBTdXBwb3J0cyBGdWxsIER1cGxleCAqLworCVBIWV9YX0VYX0hECT0gMTw8MTQsIC8qIEJpdCAxNDoJRGV2aWNlIFN1cHBvcnRzIEhhbGYgRHVwbGV4ICovCit9OworCisvKioqKiogIFBIWV9YTUFDX1JFU19BQkkJMTYgYml0IHIvbwlQSFkgUmVzb2x2ZWQgQWJpbGl0eSAqKioqKi8KK2VudW0geworCVBIWV9YX1JTX1BBVVNFCT0gMzw8NywJLyogQml0ICA4Li43OglzZWxlY3RlZCBQYXVzZSBNb2RlICovCisJUEhZX1hfUlNfSEQJPSAxPDw2LAkvKiBCaXQgIDY6CUhhbGYgRHVwbGV4IE1vZGUgc2VsZWN0ZWQgKi8KKwlQSFlfWF9SU19GRAk9IDE8PDUsCS8qIEJpdCAgNToJRnVsbCBEdXBsZXggTW9kZSBzZWxlY3RlZCAqLworCVBIWV9YX1JTX0FCTE1JUyA9IDE8PDQsCS8qIEJpdCAgNDoJZHVwbGV4IG9yIHBhdXNlIGNhcCBtaXNtYXRjaCAqLworCVBIWV9YX1JTX1BBVU1JUyA9IDE8PDMsCS8qIEJpdCAgMzoJcGF1c2UgY2FwYWJpbGl0eSBtaXNtYXRjaCAqLworfTsKKworLyogUmVtb3RlIEZhdWx0IEJpdHMgKFBIWV9YX0FOX1JGQikgZW5jb2RpbmcgKi8KK2VudW0geworCVhfUkZCX09LCT0gMDw8MTIsLyogQml0IDEzLi4xMglObyBlcnJvcnMsIExpbmsgT0sgKi8KKwlYX1JGQl9MRgk9IDE8PDEyLC8qIEJpdCAxMy4uMTIJTGluayBGYWlsdXJlICovCisJWF9SRkJfT0ZGCT0gMjw8MTIsLyogQml0IDEzLi4xMglPZmZsaW5lICovCisJWF9SRkJfQU5fRVJSCT0gMzw8MTIsLyogQml0IDEzLi4xMglBdXRvLU5lZ290aWF0aW9uIEVycm9yICovCit9OworCiAvKiBCcm9hZGNvbS1TcGVjaWZpYyAqLwogLyoqKioqICBQSFlfQkNPTV8xMDAwVF9DVFJMCTE2IGJpdCByL3cJMTAwMEJhc2UtVCBDb250cm9sIFJlZyAqKioqKi8KIGVudW0gewpAQCAtMjE1OCw4ICsyMTgxLDggQEAKIAlYTV9JU19MTktfQUUJPSAxPDwxNCwgLyogQml0IDE0OglMaW5rIEFzeW5jaHJvbm91cyBFdmVudCAqLwogCVhNX0lTX1RYX0FCT1JUCT0gMTw8MTMsIC8qIEJpdCAxMzoJVHJhbnNtaXQgQWJvcnQsIGxhdGUgQ29sLiBldGMgKi8KIAlYTV9JU19GUkNfSU5UCT0gMTw8MTIsIC8qIEJpdCAxMjoJRm9yY2UgSU5UIGJpdCBzZXQgaW4gR1AgKi8KLQlYTV9JU19JTlBfQVNTCT0gMTw8MTEsCS8qIEJpdCAxMToJSW5wdXQgQXNzZXJ0ZWQsIEdQIGJpdCAwIHNldCAqLwotCVhNX0lTX0xJUEFfUkMJPSAxPDwxMCwJLyogQml0IDEwOglMaW5rIFBhcnRuZXIgcmVxdWVzdHMgY29uZmlnICovCisJWE1fSVNfSU5QX0FTUwk9IDE8PDExLCAvKiBCaXQgMTE6CUlucHV0IEFzc2VydGVkLCBHUCBiaXQgMCBzZXQgKi8KKwlYTV9JU19MSVBBX1JDCT0gMTw8MTAsIC8qIEJpdCAxMDoJTGluayBQYXJ0bmVyIHJlcXVlc3RzIGNvbmZpZyAqLwogCVhNX0lTX1JYX1BBR0UJPSAxPDw5LAkvKiBCaXQgIDk6CVBhZ2UgUmVjZWl2ZWQgKi8KIAlYTV9JU19UWF9QQUdFCT0gMTw8OCwJLyogQml0ICA4OglOZXh0IFBhZ2UgTG9hZGVkIGZvciBUcmFuc21pdCAqLwogCVhNX0lTX0FORAk9IDE8PDcsCS8qIEJpdCAgNzoJQXV0by1OZWdvdGlhdGlvbiBEb25lICovCkBAIC0yMTcyLDkgKzIxOTUsNyBAQAogCVhNX0lTX1JYX0NPTVAJPSAxPDwwLAkvKiBCaXQgIDA6CUZyYW1lIFJ4IENvbXBsZXRlICovCiB9OwogCi0jZGVmaW5lIFhNX0RFRl9NU0sJKH4oWE1fSVNfSU5QX0FTUyB8IFhNX0lTX0xJUEFfUkMgfCBYTV9JU19SWF9QQUdFIHwgXAotCQkJICAgWE1fSVNfQU5EIHwgWE1fSVNfUlhDX09WIHwgWE1fSVNfVFhDX09WIHwgXAotCQkJICAgWE1fSVNfUlhGX09WIHwgWE1fSVNfVFhGX1VSKSkKKyNkZWZpbmUgWE1fREVGX01TSwkofihYTV9JU19SWENfT1YgfCBYTV9JU19UWENfT1YgfCBYTV9JU19SWEZfT1YgfCBYTV9JU19UWEZfVVIpKQogCiAKIC8qCVhNX0hXX0NGRwkxNiBiaXQgci93CUhhcmR3YXJlIENvbmZpZyBSZWdpc3RlciAqLwpAQCAtMjM5Niw2ICsyNDE3LDcgQEAKIAl1OAkJICAgICBjaGlwX3JldjsKIAl1OAkJICAgICBjb3BwZXI7CiAJdTgJCSAgICAgcG9ydHM7CisJdTgJCSAgICAgcGh5X3R5cGU7CiAKIAl1MzIJICAgICAJICAgICByYW1fc2l6ZTsKIAl1MzIJICAgICAJICAgICByYW1fb2Zmc2V0OwpAQCAtMjQyMiw2ICsyNDQ0LDcgQEAKIAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKIAorCXN0cnVjdCB3b3JrX3N0cnVjdCAgIGxpbmtfdGhyZWFkOwogCXU4CQkgICAgIHJ4X2NzdW07CiAJdTgJCSAgICAgYmxpbmtfb247CiAJdTgJCSAgICAgZmxvd19jb250cm9sOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCA3YWE3ZmJhLi5mZWRkMWEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMTk1LDYgKzE5NSw3IEBACiAjZGVmaW5lCVNNQ19JUlFfRkxBR1MgKCggXAogCQkgICBtYWNoaW5lX2lzX29tYXBfaDIoKSBcCiAJCXx8IG1hY2hpbmVfaXNfb21hcF9oMygpIFwKKwkJfHwgbWFjaGluZV9pc19vbWFwX2g0KCkgXAogCQl8fCAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpICYmICFjcHVfaXNfb21hcDE1MTAoKSkgXAogCSkgPyBJUlFGX1RSSUdHRVJfRkFMTElORyA6IElSUUZfVFJJR0dFUl9SSVNJTkcpCiAKQEAgLTM3OSw2ICszODAsMjQgQEAKIAogI2RlZmluZSBTTUNfSVJRX0ZMQUdTCQkoMCkKIAorI2VsaWYJZGVmaW5lZChDT05GSUdfQVJDSF9WRVJTQVRJTEUpCisKKyNkZWZpbmUgU01DX0NBTl9VU0VfOEJJVAkxCisjZGVmaW5lIFNNQ19DQU5fVVNFXzE2QklUCTEKKyNkZWZpbmUgU01DX0NBTl9VU0VfMzJCSVQJMQorI2RlZmluZSBTTUNfTk9XQUlUCQkxCisKKyNkZWZpbmUgU01DX2luYihhLCByKQkJcmVhZGIoKGEpICsgKHIpKQorI2RlZmluZSBTTUNfaW53KGEsIHIpCQlyZWFkdygoYSkgKyAocikpCisjZGVmaW5lIFNNQ19pbmwoYSwgcikJCXJlYWRsKChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGIodiwgYSwgcikJd3JpdGViKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dHcodiwgYSwgcikJd3JpdGV3KHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX291dGwodiwgYSwgcikJd3JpdGVsKHYsIChhKSArIChyKSkKKyNkZWZpbmUgU01DX2luc2woYSwgciwgcCwgbCkJcmVhZHNsKChhKSArIChyKSwgcCwgbCkKKyNkZWZpbmUgU01DX291dHNsKGEsIHIsIHAsIGwpCXdyaXRlc2woKGEpICsgKHIpLCBwLCBsKQorCisjZGVmaW5lIFNNQ19JUlFfRkxBR1MJCSgwKQorCiAjZWxzZQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc3RuaWMuYyBiL2RyaXZlcnMvbmV0L3N0bmljLmMKaW5kZXggM2ZkN2E0Zi4uZTZmOTA0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvc3RuaWMuYworKysgYi9kcml2ZXJzL25ldC9zdG5pYy5jCkBAIC0xOSw3ICsxOSw3IEBACiAKICNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0jaW5jbHVkZSA8YXNtL3NlL3NlLmg+CisjaW5jbHVkZSA8YXNtL3NlLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWMuaD4KICNpZmRlZiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUwogI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90ZzMuYyBiL2RyaXZlcnMvbmV0L3RnMy5jCmluZGV4IGFhZjQ1YjkuLmMyNWJhMjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3RnMy5jCisrKyBiL2RyaXZlcnMvbmV0L3RnMy5jCkBAIC02OCw4ICs2OCw4IEBACiAKICNkZWZpbmUgRFJWX01PRFVMRV9OQU1FCQkidGczIgogI2RlZmluZSBQRlggRFJWX01PRFVMRV9OQU1FCSI6ICIKLSNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjY1IgotI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIkF1Z3VzdCAwNywgMjAwNiIKKyNkZWZpbmUgRFJWX01PRFVMRV9WRVJTSU9OCSIzLjY2IgorI2RlZmluZSBEUlZfTU9EVUxFX1JFTERBVEUJIlNlcHRlbWJlciAyMywgMjAwNiIKIAogI2RlZmluZSBURzNfREVGX01BQ19NT0RFCTAKICNkZWZpbmUgVEczX0RFRl9SWF9NT0RFCQkwCkBAIC0xNzMsNiArMTczLDcgQEAKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1Ril9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MjApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTcyMil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUxKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1ME0pfSwKQEAgLTE4Nyw2ICsxODgsNyBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTRNKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NSl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTVNKX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1Nil9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODYpfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3KX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4N00pfSwKQEAgLTE5Nyw2ICsxOTksOCBAQAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODApfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181NzgwUyl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQlJPQURDT00sIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3ODEpfSwKKwl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX0JST0FEQ09NLCBQQ0lfREVWSUNFX0lEX1RJR09OM181OTA2KX0sCisJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9CUk9BRENPTSwgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwNk0pfSwKIAl7UENJX0RFVklDRShQQ0lfVkVORE9SX0lEX1NZU0tPTk5FQ1QsIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF85RFhYKX0sCiAJe1BDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNULCBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOU1YWCl9LAogCXtQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfQUxUSU1BLCBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzEwMDApfSwKQEAgLTQyNCw2ICs0MjgsMTYgQEAKIAkJcmVhZGwobWJveCk7CiB9CiAKK3N0YXRpYyB1MzIgdGczX3JlYWQzMl9tYm94XzU5MDYoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmYpCit7CisJcmV0dXJuIChyZWFkbCh0cC0+cmVncyArIG9mZiArIEdSQ01CT1hfQkFTRSkpOworfQorCitzdGF0aWMgdm9pZCB0ZzNfd3JpdGUzMl9tYm94XzU5MDYoc3RydWN0IHRnMyAqdHAsIHUzMiBvZmYsIHUzMiB2YWwpCit7CisJd3JpdGVsKHZhbCwgdHAtPnJlZ3MgKyBvZmYgKyBHUkNNQk9YX0JBU0UpOworfQorCiAjZGVmaW5lIHR3MzJfbWFpbGJveChyZWcsIHZhbCkJdHAtPndyaXRlMzJfbWJveCh0cCwgcmVnLCB2YWwpCiAjZGVmaW5lIHR3MzJfbWFpbGJveF9mKHJlZywgdmFsKQl0dzMyX21haWxib3hfZmx1c2godHAsIChyZWcpLCAodmFsKSkKICNkZWZpbmUgdHczMl9yeF9tYm94KHJlZywgdmFsKQl0cC0+d3JpdGUzMl9yeF9tYm94KHRwLCByZWcsIHZhbCkKQEAgLTQzOSw2ICs0NTMsMTAgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgJiYKKwkgICAgKG9mZiA+PSBOSUNfU1JBTV9TVEFUU19CTEspICYmIChvZmYgPCBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQykpCisJCXJldHVybjsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZ0cC0+aW5kaXJlY3RfbG9jaywgZmxhZ3MpOwogCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfU1JBTV9VU0VfQ09ORklHKSB7CiAJCXBjaV93cml0ZV9jb25maWdfZHdvcmQodHAtPnBkZXYsIFRHM1BDSV9NRU1fV0lOX0JBU0VfQUREUiwgb2ZmKTsKQEAgLTQ2MCw2ICs0NzgsMTIgQEAKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWYgKChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgJiYKKwkgICAgKG9mZiA+PSBOSUNfU1JBTV9TVEFUU19CTEspICYmIChvZmYgPCBOSUNfU1JBTV9UWF9CVUZGRVJfREVTQykpIHsKKwkJKnZhbCA9IDA7CisJCXJldHVybjsKKwl9CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdHAtPmluZGlyZWN0X2xvY2ssIGZsYWdzKTsKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NSQU1fVVNFX0NPTkZJRykgewogCQlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHRwLT5wZGV2LCBURzNQQ0lfTUVNX1dJTl9CQVNFX0FERFIsIG9mZik7CkBAIC00ODksNiArNTEzLDkgQEAKIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfVEFHR0VEX1NUQVRVUykgJiYKIAkgICAgKHRwLT5od19zdGF0dXMtPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSkKIAkJdHczMihHUkNfTE9DQUxfQ1RSTCwgdHAtPmdyY19sb2NhbF9jdHJsIHwgR1JDX0xDTENUUkxfU0VUSU5UKTsKKwllbHNlCisJCXR3MzIoSE9TVENDX01PREUsIHRwLT5jb2FsZXNjZV9tb2RlIHwKKwkJICAgICAoSE9TVENDX01PREVfRU5BQkxFIHwgSE9TVENDX01PREVfTk9XKSk7CiB9CiAKIHN0YXRpYyB2b2lkIHRnM19lbmFibGVfaW50cyhzdHJ1Y3QgdGczICp0cCkKQEAgLTY1NCw2ICs2ODEsMTAgQEAKIAl1bnNpZ25lZCBpbnQgbG9vcHM7CiAJaW50IHJldDsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiAmJgorCSAgICAocmVnID09IE1JSV9URzNfQ1RSTCB8fCByZWcgPT0gTUlJX1RHM19BVVhfQ1RSTCkpCisJCXJldHVybiAwOworCiAJaWYgKCh0cC0+bWlfbW9kZSAmIE1BQ19NSV9NT0RFX0FVVE9fUE9MTCkgIT0gMCkgewogCQl0dzMyX2YoTUFDX01JX01PREUsCiAJCSAgICAgKHRwLT5taV9tb2RlICYgfk1BQ19NSV9NT0RFX0FVVE9fUE9MTCkpOwpAQCAtMTAwNCw2ICsxMDM1LDI0IEBACiAJCQkJIHBoeV9yZWcgfCBNSUlfVEczX0VYVF9DVFJMX0ZJRk9fRUxBU1RJQyk7CiAJfQogCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCXUzMiBwaHlfcmVnOworCisJCS8qIGFkanVzdCBvdXRwdXQgdm9sdGFnZSAqLworCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9QVEVTVCwgMHgxMik7CisKKwkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsICZwaHlfcmVnKSkgeworCQkJdTMyIHBoeV9yZWcyOworCisJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULAorCQkJCSAgICAgcGh5X3JlZyB8IE1JSV9URzNfRVBIWV9TSEFET1dfRU4pOworCQkJLyogRW5hYmxlIGF1dG8tTURJWCAqLworCQkJaWYgKCF0ZzNfcmVhZHBoeSh0cCwgMHgxMCwgJnBoeV9yZWcyKSkKKwkJCQl0ZzNfd3JpdGVwaHkodHAsIDB4MTAsIHBoeV9yZWcyIHwgMHg0MDAwKTsKKwkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsIHBoeV9yZWcpOworCQl9CisJfQorCiAJdGczX3BoeV9zZXRfd2lyZXNwZWVkKHRwKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTExMTcsNiArMTE2NiwxNSBAQAogCiBzdGF0aWMgdm9pZCB0ZzNfcG93ZXJfZG93bl9waHkoc3RydWN0IHRnMyAqdHApCiB7CisJaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykKKwkJcmV0dXJuOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KSB7CisJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwKKwkJCSAgICAgTUlJX1RHM19FWFRfQ1RSTF9GT1JDRV9MRURfT0ZGKTsKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDAxYjIpOworCX0KKwogCS8qIFRoZSBQSFkgc2hvdWxkIG5vdCBiZSBwb3dlcmVkIGRvd24gb24gc29tZSBjaGlwcyBiZWNhdXNlCiAJICogb2YgYnVncy4KIAkgKi8KQEAgLTExOTksNyArMTI1NywxMiBAQAogCQl0ZzNfc2V0dXBfcGh5KHRwLCAwKTsKIAl9CiAKLQlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKKwlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKKwkJdTMyIHZhbDsKKworCQl2YWwgPSB0cjMyKEdSQ19WQ1BVX0VYVF9DVFJMKTsKKwkJdHczMihHUkNfVkNQVV9FWFRfQ1RSTCwgdmFsIHwgR1JDX1ZDUFVfRVhUX0NUUkxfRElTQUJMRV9XT0wpOworCX0gZWxzZSBpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKIAkJaW50IGk7CiAJCXUzMiB2YWw7CiAKQEAgLTEyMjMsNyArMTI4NiwxMCBAQAogCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDVhKTsKIAkJCXVkZWxheSg0MCk7CiAKLQkJCW1hY19tb2RlID0gTUFDX01PREVfUE9SVF9NT0RFX01JSTsKKwkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpCisJCQkJbWFjX21vZGUgPSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKKwkJCWVsc2UKKwkJCQltYWNfbW9kZSA9IE1BQ19NT0RFX1BPUlRfTU9ERV9NSUk7CiAKIAkJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTcwMCB8fAogCQkJICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1dPTF9TUEVFRF8xMDBNQikpCkBAIC0xMzAxLDE1ICsxMzY3LDggQEAKIAl9CiAKIAlpZiAoISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfV09MX0VOQUJMRSkgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpIHsKLQkJLyogVHVybiBvZmYgdGhlIFBIWSAqLwotCQlpZiAoISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMpKSB7Ci0JCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVhUX0NUUkwsCi0JCQkJICAgICBNSUlfVEczX0VYVF9DVFJMX0ZPUkNFX0xFRF9PRkYpOwotCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0FVWF9DVFJMLCAweDAxYjIpOwotCQkJdGczX3Bvd2VyX2Rvd25fcGh5KHRwKTsKLQkJfQotCX0KKwkgICAgISh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfRU5BQkxFX0FTRikpCisJCXRnM19wb3dlcl9kb3duX3BoeSh0cCk7CiAKIAl0ZzNfZnJvYl9hdXhfcG93ZXIodHApOwogCkBAIC0xNDY3LDYgKzE1MjYsMTMgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgorCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKKwkJCSpzcGVlZCA9ICh2YWwgJiBNSUlfVEczX0FVWF9TVEFUXzEwMCkgPyBTUEVFRF8xMDAgOgorCQkJCSBTUEVFRF8xMDsKKwkJCSpkdXBsZXggPSAodmFsICYgTUlJX1RHM19BVVhfU1RBVF9GVUxMKSA/IERVUExFWF9GVUxMIDoKKwkJCQkgIERVUExFWF9IQUxGOworCQkJYnJlYWs7CisJCX0KIAkJKnNwZWVkID0gU1BFRURfSU5WQUxJRDsKIAkJKmR1cGxleCA9IERVUExFWF9JTlZBTElEOwogCQlicmVhazsKQEAgLTE3NDksNyArMTgxNSw3IEBACiAKIAlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1VTRV9NSV9JTlRFUlJVUFQpCiAJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19JTUFTSywgfk1JSV9URzNfSU5UX0xJTktDSEcpOwotCWVsc2UKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgIT0gQVNJQ19SRVZfNTkwNikKIAkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0lNQVNLLCB+MCk7CiAKIAlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3MDAgfHwKQEAgLTI0MDYsMjQgKzI0NzIsMjcgQEAKIAlleHBlY3RlZF9zZ19kaWdfY3RybCB8PSAoMSA8PCAxMik7CiAKIAlpZiAoc2dfZGlnX2N0cmwgIT0gZXhwZWN0ZWRfc2dfZGlnX2N0cmwpIHsKKwkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVCkgJiYKKwkJICAgIHRwLT5zZXJkZXNfY291bnRlciAmJgorCQkgICAgKChtYWNfc3RhdHVzICYgKE1BQ19TVEFUVVNfUENTX1NZTkNFRCB8CisJCQkJICAgIE1BQ19TVEFUVVNfUkNWRF9DRkcpKSA9PQorCQkgICAgIE1BQ19TVEFUVVNfUENTX1NZTkNFRCkpIHsKKwkJCXRwLT5zZXJkZXNfY291bnRlci0tOworCQkJY3VycmVudF9saW5rX3VwID0gMTsKKwkJCWdvdG8gb3V0OworCQl9CityZXN0YXJ0X2F1dG9uZWc6CiAJCWlmICh3b3JrYXJvdW5kKQogCQkJdHczMl9mKE1BQ19TRVJERVNfQ0ZHLCBzZXJkZXNfY2ZnIHwgMHhjMDExMDAwKTsKIAkJdHczMl9mKFNHX0RJR19DVFJMLCBleHBlY3RlZF9zZ19kaWdfY3RybCB8ICgxIDw8IDMwKSk7CiAJCXVkZWxheSg1KTsKIAkJdHczMl9mKFNHX0RJR19DVFJMLCBleHBlY3RlZF9zZ19kaWdfY3RybCk7CiAKLQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0pVU1RfSU5JVFRFRDsKKwkJdHAtPnNlcmRlc19jb3VudGVyID0gU0VSREVTX0FOX1RJTUVPVVRfNTcwNFM7CisJCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9QQVJBTExFTF9ERVRFQ1Q7CiAJfSBlbHNlIGlmIChtYWNfc3RhdHVzICYgKE1BQ19TVEFUVVNfUENTX1NZTkNFRCB8CiAJCQkJIE1BQ19TVEFUVVNfU0lHTkFMX0RFVCkpIHsKLQkJaW50IGk7Ci0KLQkJLyogR2l2ZXIgdGltZSB0byBuZWdvdGlhdGUgKH4yMDBtcykgKi8KLQkJZm9yIChpID0gMDsgaSA8IDQwMDAwOyBpKyspIHsKLQkJCXNnX2RpZ19zdGF0dXMgPSB0cjMyKFNHX0RJR19TVEFUVVMpOwotCQkJaWYgKHNnX2RpZ19zdGF0dXMgJiAoMHgzKSkKLQkJCQlicmVhazsKLQkJCXVkZWxheSg1KTsKLQkJfQorCQlzZ19kaWdfc3RhdHVzID0gdHIzMihTR19ESUdfU1RBVFVTKTsKIAkJbWFjX3N0YXR1cyA9IHRyMzIoTUFDX1NUQVRVUyk7CiAKIAkJaWYgKChzZ19kaWdfc3RhdHVzICYgKDEgPDwgMSkpICYmCkBAIC0yNDM5LDEwICsyNTA4LDExIEBACiAKIAkJCXRnM19zZXR1cF9mbG93X2NvbnRyb2wodHAsIGxvY2FsX2FkdiwgcmVtb3RlX2Fkdik7CiAJCQljdXJyZW50X2xpbmtfdXAgPSAxOwotCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BIWV9KVVNUX0lOSVRURUQ7CisJCQl0cC0+c2VyZGVzX2NvdW50ZXIgPSAwOworCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BBUkFMTEVMX0RFVEVDVDsKIAkJfSBlbHNlIGlmICghKHNnX2RpZ19zdGF0dXMgJiAoMSA8PCAxKSkpIHsKLQkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9KVVNUX0lOSVRURUQpCi0JCQkJdHAtPnRnM19mbGFnczIgJj0gflRHM19GTEcyX1BIWV9KVVNUX0lOSVRURUQ7CisJCQlpZiAodHAtPnNlcmRlc19jb3VudGVyKQorCQkJCXRwLT5zZXJkZXNfY291bnRlci0tOwogCQkJZWxzZSB7CiAJCQkJaWYgKHdvcmthcm91bmQpIHsKIAkJCQkJdTMyIHZhbCA9IHNlcmRlc19jZmc7CkBAIC0yNDY2LDkgKzI1MzYsMTcgQEAKIAkJCQkgICAgIShtYWNfc3RhdHVzICYgTUFDX1NUQVRVU19SQ1ZEX0NGRykpIHsKIAkJCQkJdGczX3NldHVwX2Zsb3dfY29udHJvbCh0cCwgMCwgMCk7CiAJCQkJCWN1cnJlbnRfbGlua191cCA9IDE7Ci0JCQkJfQorCQkJCQl0cC0+dGczX2ZsYWdzMiB8PQorCQkJCQkJVEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOworCQkJCQl0cC0+c2VyZGVzX2NvdW50ZXIgPQorCQkJCQkJU0VSREVTX1BBUkFMTEVMX0RFVF9USU1FT1VUOworCQkJCX0gZWxzZQorCQkJCQlnb3RvIHJlc3RhcnRfYXV0b25lZzsKIAkJCX0KIAkJfQorCX0gZWxzZSB7CisJCXRwLT5zZXJkZXNfY291bnRlciA9IFNFUkRFU19BTl9USU1FT1VUXzU3MDRTOworCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOwogCX0KIAogb3V0OgpAQCAtMjU5OSwxNCArMjY3NywxNiBAQAogCQkJCSAgICBNQUNfU1RBVFVTX0NGR19DSEFOR0VEKSk7CiAJCXVkZWxheSg1KTsKIAkJaWYgKCh0cjMyKE1BQ19TVEFUVVMpICYgKE1BQ19TVEFUVVNfU1lOQ19DSEFOR0VEIHwKLQkJCQkJIE1BQ19TVEFUVVNfQ0ZHX0NIQU5HRUQpKSA9PSAwKQorCQkJCQkgTUFDX1NUQVRVU19DRkdfQ0hBTkdFRCB8CisJCQkJCSBNQUNfU1RBVFVTX0xOS1NUQVRFX0NIQU5HRUQpKSA9PSAwKQogCQkJYnJlYWs7CiAJfQogCiAJbWFjX3N0YXR1cyA9IHRyMzIoTUFDX1NUQVRVUyk7CiAJaWYgKChtYWNfc3RhdHVzICYgTUFDX1NUQVRVU19QQ1NfU1lOQ0VEKSA9PSAwKSB7CiAJCWN1cnJlbnRfbGlua191cCA9IDA7Ci0JCWlmICh0cC0+bGlua19jb25maWcuYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlpZiAodHAtPmxpbmtfY29uZmlnLmF1dG9uZWcgPT0gQVVUT05FR19FTkFCTEUgJiYKKwkJICAgIHRwLT5zZXJkZXNfY291bnRlciA9PSAwKSB7CiAJCQl0dzMyX2YoTUFDX01PREUsICh0cC0+bWFjX21vZGUgfAogCQkJCQkgIE1BQ19NT0RFX1NFTkRfQ09ORklHUykpOwogCQkJdWRlbGF5KDEpOwpAQCAtMjcxMSw3ICsyNzkxLDcgQEAKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX0JNQ1IsIGJtY3IpOwogCiAJCQl0dzMyX2YoTUFDX0VWRU5ULCBNQUNfRVZFTlRfTE5LU1RBVEVfQ0hBTkdFRCk7Ci0JCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9QSFlfSlVTVF9JTklUVEVEOworCQkJdHAtPnNlcmRlc19jb3VudGVyID0gU0VSREVTX0FOX1RJTUVPVVRfNTcxNFM7CiAJCQl0cC0+dGczX2ZsYWdzMiAmPSB+VEczX0ZMRzJfUEFSQUxMRUxfREVURUNUOwogCiAJCQlyZXR1cm4gZXJyOwpAQCAtMjgxNiw5ICsyODk2LDkgQEAKIAogc3RhdGljIHZvaWQgdGczX3NlcmRlc19wYXJhbGxlbF9kZXRlY3Qoc3RydWN0IHRnMyAqdHApCiB7Ci0JaWYgKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX0pVU1RfSU5JVFRFRCkgeworCWlmICh0cC0+c2VyZGVzX2NvdW50ZXIpIHsKIAkJLyogR2l2ZSBhdXRvbmVnIHRpbWUgdG8gY29tcGxldGUuICovCi0JCXRwLT50ZzNfZmxhZ3MyICY9IH5URzNfRkxHMl9QSFlfSlVTVF9JTklUVEVEOworCQl0cC0+c2VyZGVzX2NvdW50ZXItLTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2sodHAtPmRldikgJiYKQEAgLTM1MzUsOCArMzYxNSw3IEBACiAKIAlpZiAoKHNibGstPnN0YXR1cyAmIFNEX1NUQVRVU19VUERBVEVEKSB8fAogCSAgICAhKHRyMzIoVEczUENJX1BDSVNUQVRFKSAmIFBDSVNUQVRFX0lOVF9OT1RfQUNUSVZFKSkgewotCQl0dzMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArIFRHM182NEJJVF9SRUdfTE9XLAotCQkJICAgICAweDAwMDAwMDAxKTsKKwkJdGczX2Rpc2FibGVfaW50cyh0cCk7CiAJCXJldHVybiBJUlFfUkVUVkFMKDEpOwogCX0KIAlyZXR1cm4gSVJRX1JFVFZBTCgwKTsKQEAgLTQ2NDQsNiArNDcyMyw0NCBAQAogCX0KIH0KIAorc3RhdGljIGludCB0ZzNfcG9sbF9mdyhzdHJ1Y3QgdGczICp0cCkKK3sKKwlpbnQgaTsKKwl1MzIgdmFsOworCisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCWZvciAoaSA9IDA7IGkgPCA0MDA7IGkrKykgeworCQkJaWYgKHRyMzIoVkNQVV9TVEFUVVMpICYgVkNQVV9TVEFUVVNfSU5JVF9ET05FKQorCQkJCXJldHVybiAwOworCQkJdWRlbGF5KDEwKTsKKwkJfQorCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwkvKiBXYWl0IGZvciBmaXJtd2FyZSBpbml0aWFsaXphdGlvbiB0byBjb21wbGV0ZS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgMTAwMDAwOyBpKyspIHsKKwkJdGczX3JlYWRfbWVtKHRwLCBOSUNfU1JBTV9GSVJNV0FSRV9NQk9YLCAmdmFsKTsKKwkJaWYgKHZhbCA9PSB+TklDX1NSQU1fRklSTVdBUkVfTUJPWF9NQUdJQzEpCisJCQlicmVhazsKKwkJdWRlbGF5KDEwKTsKKwl9CisKKwkvKiBDaGlwIG1pZ2h0IG5vdCBiZSBmaXR0ZWQgd2l0aCBmaXJtd2FyZS4gIFNvbWUgU3VuIG9uYm9hcmQKKwkgKiBwYXJ0cyBhcmUgY29uZmlndXJlZCBsaWtlIHRoYXQuICBTbyBkb24ndCBzaWduYWwgdGhlIHRpbWVvdXQKKwkgKiBvZiB0aGUgYWJvdmUgbG9vcCBhcyBhbiBlcnJvciwgYnV0IGRvIHJlcG9ydCB0aGUgbGFjayBvZgorCSAqIHJ1bm5pbmcgZmlybXdhcmUgb25jZS4KKwkgKi8KKwlpZiAoaSA+PSAxMDAwMDAgJiYKKwkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEKSkgeworCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRDsKKworCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE5vIGZpcm13YXJlIHJ1bm5pbmcuXG4iLAorCQkgICAgICAgdHAtPmRldi0+bmFtZSk7CisJfQorCisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyB2b2lkIHRnM19zdG9wX2Z3KHN0cnVjdCB0ZzMgKik7CiAKIC8qIHRwLT5sb2NrIGlzIGhlbGQuICovCkBAIC00NjUxLDcgKzQ3NjgsNyBAQAogewogCXUzMiB2YWw7CiAJdm9pZCAoKndyaXRlX29wKShzdHJ1Y3QgdGczICosIHUzMiwgdTMyKTsKLQlpbnQgaTsKKwlpbnQgZXJyOwogCiAJdGczX252cmFtX2xvY2sodHApOwogCkBAIC00Njg4LDYgKzQ4MDUsMTIgQEAKIAkJfQogCX0KIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQl0dzMyKFZDUFVfU1RBVFVTLCB0cjMyKFZDUFVfU1RBVFVTKSB8IFZDUFVfU1RBVFVTX0RSVl9SRVNFVCk7CisJCXR3MzIoR1JDX1ZDUFVfRVhUX0NUUkwsCisJCSAgICAgdHIzMihHUkNfVkNQVV9FWFRfQ1RSTCkgJiB+R1JDX1ZDUFVfRVhUX0NUUkxfSEFMVF9DUFUpOworCX0KKwogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykKIAkJdmFsIHw9IEdSQ19NSVNDX0NGR19LRUVQX0dQSFlfUE9XRVI7CiAJdHczMihHUkNfTUlTQ19DRkcsIHZhbCk7CkBAIC00ODExLDI2ICs0OTM0LDkgQEAKIAkJdHczMl9mKE1BQ19NT0RFLCAwKTsKIAl1ZGVsYXkoNDApOwogCi0JLyogV2FpdCBmb3IgZmlybXdhcmUgaW5pdGlhbGl6YXRpb24gdG8gY29tcGxldGUuICovCi0JZm9yIChpID0gMDsgaSA8IDEwMDAwMDsgaSsrKSB7Ci0JCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fRklSTVdBUkVfTUJPWCwgJnZhbCk7Ci0JCWlmICh2YWwgPT0gfk5JQ19TUkFNX0ZJUk1XQVJFX01CT1hfTUFHSUMxKQotCQkJYnJlYWs7Ci0JCXVkZWxheSgxMCk7Ci0JfQotCi0JLyogQ2hpcCBtaWdodCBub3QgYmUgZml0dGVkIHdpdGggZmlybWFyZS4gIFNvbWUgU3VuIG9uYm9hcmQKLQkgKiBwYXJ0cyBhcmUgY29uZmlndXJlZCBsaWtlIHRoYXQuICBTbyBkb24ndCBzaWduYWwgdGhlIHRpbWVvdXQKLQkgKiBvZiB0aGUgYWJvdmUgbG9vcCBhcyBhbiBlcnJvciwgYnV0IGRvIHJlcG9ydCB0aGUgbGFjayBvZgotCSAqIHJ1bm5pbmcgZmlybXdhcmUgb25jZS4KLQkgKi8KLQlpZiAoaSA+PSAxMDAwMDAgJiYKLQkgICAgISh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX05PX0ZXQVJFX1JFUE9SVEVEKSkgewotCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9OT19GV0FSRV9SRVBPUlRFRDsKLQotCQlwcmludGsoS0VSTl9JTkZPIFBGWCAiJXM6IE5vIGZpcm13YXJlIHJ1bm5pbmcuXG4iLAotCQkgICAgICAgdHAtPmRldi0+bmFtZSk7Ci0JfQorCWVyciA9IHRnM19wb2xsX2Z3KHRwKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOwogCiAJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BDSV9FWFBSRVNTKSAmJgogCSAgICB0cC0+cGNpX2NoaXBfcmV2X2lkICE9IENISVBSRVZfSURfNTc1MF9BMCkgewpAQCAtNTAzNiw2ICs1MTQyLDEyIEBACiAJQlVHX09OKG9mZnNldCA9PSBUWF9DUFVfQkFTRSAmJgogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpKTsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQl1MzIgdmFsID0gdHIzMihHUkNfVkNQVV9FWFRfQ1RSTCk7CisKKwkJdHczMihHUkNfVkNQVV9FWFRfQ1RSTCwgdmFsIHwgR1JDX1ZDUFVfRVhUX0NUUkxfSEFMVF9DUFUpOworCQlyZXR1cm4gMDsKKwl9CiAJaWYgKG9mZnNldCA9PSBSWF9DUFVfQkFTRSkgewogCQlmb3IgKGkgPSAwOyBpIDwgMTAwMDA7IGkrKykgewogCQkJdHczMihvZmZzZXQgKyBDUFVfU1RBVEUsIDB4ZmZmZmZmZmYpOwpAQCAtNjA0MCw2ICs2MTUyLDEzIEBACiAJCXZhbCA9IDE7CiAJZWxzZSBpZiAodmFsID4gdHAtPnJ4X3N0ZF9tYXhfcG9zdCkKIAkJdmFsID0gdHAtPnJ4X3N0ZF9tYXhfcG9zdDsKKwllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQlpZiAodHAtPnBjaV9jaGlwX3Jldl9pZCA9PSBDSElQUkVWX0lEXzU5MDZfQTEpCisJCQl0dzMyKElTT19QS1RfVFgsICh0cjMyKElTT19QS1RfVFgpICYgfjB4MykgfCAweDIpOworCisJCWlmICh2YWwgPiAoVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNiAvIDIpKQorCQkJdmFsID0gVEczX1JYX0lOVEVSTkFMX1JJTkdfU1pfNTkwNiAvIDI7CisJfQogCiAJdHczMihSQ1ZCRElfU1REX1RIUkVTSCwgdmFsKTsKIApAQCAtNjQ2MCw3ICs2NTc5LDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKCEodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9QSFlfU0VSREVTKSkgeworCWlmICghKHRwLT50ZzNfZmxhZ3MyICYgVEczX0ZMRzJfUEhZX1NFUkRFUykgJiYKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpIHsKIAkJdTMyIHRtcDsKIAogCQkvKiBDbGVhciBDUkMgc3RhdHMuICovCkBAIC02NjYwLDEyICs2NzgwLDE0IEBACiAJCQkJbmVlZF9zZXR1cCA9IDE7CiAJCQl9CiAJCQlpZiAobmVlZF9zZXR1cCkgewotCQkJCXR3MzJfZihNQUNfTU9ERSwKLQkJCQkgICAgICh0cC0+bWFjX21vZGUgJgotCQkJCSAgICAgIH5NQUNfTU9ERV9QT1JUX01PREVfTUFTSykpOwotCQkJCXVkZWxheSg0MCk7Ci0JCQkJdHczMl9mKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOwotCQkJCXVkZWxheSg0MCk7CisJCQkJaWYgKCF0cC0+c2VyZGVzX2NvdW50ZXIpIHsKKwkJCQkJdHczMl9mKE1BQ19NT0RFLAorCQkJCQkgICAgICh0cC0+bWFjX21vZGUgJgorCQkJCQkgICAgICB+TUFDX01PREVfUE9SVF9NT0RFX01BU0spKTsKKwkJCQkJdWRlbGF5KDQwKTsKKwkJCQkJdHczMl9mKE1BQ19NT0RFLCB0cC0+bWFjX21vZGUpOworCQkJCQl1ZGVsYXkoNDApOworCQkJCX0KIAkJCQl0ZzNfc2V0dXBfcGh5KHRwLCAwKTsKIAkJCX0KIAkJfSBlbHNlIGlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX01JSV9TRVJERVMpCkBAIC02Njc0LDEzICs2Nzk2LDI5IEBACiAJCXRwLT50aW1lcl9jb3VudGVyID0gdHAtPnRpbWVyX211bHRpcGxpZXI7CiAJfQogCi0JLyogSGVhcnRiZWF0IGlzIG9ubHkgc2VudCBvbmNlIGV2ZXJ5IDIgc2Vjb25kcy4gICovCisJLyogSGVhcnRiZWF0IGlzIG9ubHkgc2VudCBvbmNlIGV2ZXJ5IDIgc2Vjb25kcy4KKwkgKgorCSAqIFRoZSBoZWFydGJlYXQgaXMgdG8gdGVsbCB0aGUgQVNGIGZpcm13YXJlIHRoYXQgdGhlIGhvc3QKKwkgKiBkcml2ZXIgaXMgc3RpbGwgYWxpdmUuICBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgT1MgY3Jhc2hlcywKKwkgKiBBU0YgbmVlZHMgdG8gcmVzZXQgdGhlIGhhcmR3YXJlIHRvIGZyZWUgdXAgdGhlIEZJRk8gc3BhY2UKKwkgKiB0aGF0IG1heSBiZSBmaWxsZWQgd2l0aCByeCBwYWNrZXRzIGRlc3RpbmVkIGZvciB0aGUgaG9zdC4KKwkgKiBJZiB0aGUgRklGTyBpcyBmdWxsLCBBU0Ygd2lsbCBubyBsb25nZXIgZnVuY3Rpb24gcHJvcGVybHkuCisJICoKKwkgKiBVbmludGVuZGVkIHJlc2V0cyBoYXZlIGJlZW4gcmVwb3J0ZWQgb24gcmVhbCB0aW1lIGtlcm5lbHMKKwkgKiB3aGVyZSB0aGUgdGltZXIgZG9lc24ndCBydW4gb24gdGltZS4gIE5ldHBvbGwgd2lsbCBhbHNvIGhhdmUKKwkgKiBzYW1lIHByb2JsZW0uCisJICoKKwkgKiBUaGUgbmV3IEZXQ01EX05JQ0RSVl9BTElWRTMgY29tbWFuZCB0ZWxscyB0aGUgQVNGIGZpcm13YXJlCisJICogdG8gY2hlY2sgdGhlIHJpbmcgY29uZGl0aW9uIHdoZW4gdGhlIGhlYXJ0YmVhdCBpcyBleHBpcmluZworCSAqIGJlZm9yZSBkb2luZyB0aGUgcmVzZXQuICBUaGlzIHdpbGwgcHJldmVudCBtb3N0IHVuaW50ZW5kZWQKKwkgKiByZXNldHMuCisJICovCiAJaWYgKCEtLXRwLT5hc2ZfY291bnRlcikgewogCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX0VOQUJMRV9BU0YpIHsKIAkJCXUzMiB2YWw7CiAKIAkJCXRnM193cml0ZV9tZW0odHAsIE5JQ19TUkFNX0ZXX0NNRF9NQk9YLAotCQkJCSAgICAgIEZXQ01EX05JQ0RSVl9BTElWRTIpOworCQkJCSAgICAgIEZXQ01EX05JQ0RSVl9BTElWRTMpOwogCQkJdGczX3dyaXRlX21lbSh0cCwgTklDX1NSQU1fRldfQ01EX0xFTl9NQk9YLCA0KTsKIAkJCS8qIDUgc2Vjb25kcyB0aW1lb3V0ICovCiAJCQl0ZzNfd3JpdGVfbWVtKHRwLCBOSUNfU1JBTV9GV19DTURfREFUQV9NQk9YLCA1KTsKQEAgLTY3MjEsOCArNjg1OSw3IEBACiBzdGF0aWMgaW50IHRnM190ZXN0X2ludGVycnVwdChzdHJ1Y3QgdGczICp0cCkKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gdHAtPmRldjsKLQlpbnQgZXJyLCBpOwotCXUzMiBpbnRfbWJveCA9IDA7CisJaW50IGVyciwgaSwgaW50cl9vayA9IDA7CiAKIAlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC02NzQzLDEwICs2ODgwLDE4IEBACiAJICAgICAgIEhPU1RDQ19NT0RFX05PVyk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgNTsgaSsrKSB7CisJCXUzMiBpbnRfbWJveCwgbWlzY19ob3N0X2N0cmw7CisKIAkJaW50X21ib3ggPSB0cjMyX21haWxib3goTUFJTEJPWF9JTlRFUlJVUFRfMCArCiAJCQkJCVRHM182NEJJVF9SRUdfTE9XKTsKLQkJaWYgKGludF9tYm94ICE9IDApCisJCW1pc2NfaG9zdF9jdHJsID0gdHIzMihURzNQQ0lfTUlTQ19IT1NUX0NUUkwpOworCisJCWlmICgoaW50X21ib3ggIT0gMCkgfHwKKwkJICAgIChtaXNjX2hvc3RfY3RybCAmIE1JU0NfSE9TVF9DVFJMX01BU0tfUENJX0lOVCkpIHsKKwkJCWludHJfb2sgPSAxOwogCQkJYnJlYWs7CisJCX0KKwogCQltc2xlZXAoMTApOwogCX0KIApAQCAtNjc1OSw3ICs2OTA0LDcgQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JaWYgKGludF9tYm94ICE9IDApCisJaWYgKGludHJfb2spCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIC1FSU87CkBAIC02OTM2LDkgKzcwODEsMTAgQEAKIAogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9VU0lOR19NU0kpIHsKIAkJCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzFTSE9UX01TSSkgewotCQkJCXUzMiB2YWwgPSB0cjMyKDB4N2MwNCk7CisJCQkJdTMyIHZhbCA9IHRyMzIoUENJRV9UUkFOU0FDVElPTl9DRkcpOwogCi0JCQkJdHczMigweDdjMDQsIHZhbCB8ICgxIDw8IDI5KSk7CisJCQkJdHczMihQQ0lFX1RSQU5TQUNUSU9OX0NGRywKKwkJCQkgICAgIHZhbCB8IFBDSUVfVFJBTlNfQ0ZHXzFTSE9UX01TSSk7CiAJCQl9CiAJCX0KIAl9CkBAIC03ODU3LDcgKzgwMDMsNyBAQAogCWlmICh3b2wtPndvbG9wdHMgJiB+V0FLRV9NQUdJQykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCh3b2wtPndvbG9wdHMgJiBXQUtFX01BR0lDKSAmJgotCSAgICB0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX1BIWV9TRVJERVMgJiYKKwkgICAgdHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTICYmCiAJICAgICEodHAtPnRnM19mbGFncyAmIFRHM19GTEFHX1NFUkRFU19XT0xfQ0FQKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKQEAgLTc4OTMsNyArODAzOSw4IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJcmV0dXJuIDA7CiAJfQotCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSB7CisJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSAmJgorCSAgICAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU5MDYpKSB7CiAJCWlmICh2YWx1ZSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCQllbHNlCkBAIC04MTQ3LDYgKzgyOTQsOCBAQAogCiAjZGVmaW5lIE5WUkFNX1RFU1RfU0laRSAweDEwMAogI2RlZmluZSBOVlJBTV9TRUxGQk9PVF9GT1JNQVQxX1NJWkUgMHgxNAorI2RlZmluZSBOVlJBTV9TRUxGQk9PVF9IV19TSVpFIDB4MjAKKyNkZWZpbmUgTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFIDB4MWMKIAogc3RhdGljIGludCB0ZzNfdGVzdF9udnJhbShzdHJ1Y3QgdGczICp0cCkKIHsKQEAgLTgxNTgsMTIgKzgzMDcsMTQgQEAKIAogCWlmIChtYWdpYyA9PSBURzNfRUVQUk9NX01BR0lDKQogCQlzaXplID0gTlZSQU1fVEVTVF9TSVpFOwotCWVsc2UgaWYgKChtYWdpYyAmIDB4ZmYwMDAwMDApID09IDB4YTUwMDAwMDApIHsKKwllbHNlIGlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19GVykgewogCQlpZiAoKG1hZ2ljICYgMHhlMDAwMDApID09IDB4MjAwMDAwKQogCQkJc2l6ZSA9IE5WUkFNX1NFTEZCT09UX0ZPUk1BVDFfU0laRTsKIAkJZWxzZQogCQkJcmV0dXJuIDA7Ci0JfSBlbHNlCisJfSBlbHNlIGlmICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0hXX01TSykgPT0gVEczX0VFUFJPTV9NQUdJQ19IVykKKwkJc2l6ZSA9IE5WUkFNX1NFTEZCT09UX0hXX1NJWkU7CisJZWxzZQogCQlyZXR1cm4gLUVJTzsKIAogCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CkBAIC04MTgyLDcgKzgzMzMsOCBAQAogCQlnb3RvIG91dDsKIAogCS8qIFNlbGZib290IGZvcm1hdCAqLwotCWlmIChjcHVfdG9fYmUzMihidWZbMF0pICE9IFRHM19FRVBST01fTUFHSUMpIHsKKwlpZiAoKGNwdV90b19iZTMyKGJ1ZlswXSkgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgPT0KKwkgICAgVEczX0VFUFJPTV9NQUdJQ19GVykgewogCQl1OCAqYnVmOCA9ICh1OCAqKSBidWYsIGNzdW04ID0gMDsKIAogCQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQpAQCAtODE5Nyw2ICs4MzQ5LDUxIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCWlmICgoY3B1X3RvX2JlMzIoYnVmWzBdKSAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSA9PQorCSAgICBURzNfRUVQUk9NX01BR0lDX0hXKSB7CisJCXU4IGRhdGFbTlZSQU1fU0VMRkJPT1RfREFUQV9TSVpFXTsKKwkgICAgICAgCXU4IHBhcml0eVtOVlJBTV9TRUxGQk9PVF9EQVRBX1NJWkVdOworCQl1OCAqYnVmOCA9ICh1OCAqKSBidWY7CisJCWludCBqLCBrOworCisJCS8qIFNlcGFyYXRlIHRoZSBwYXJpdHkgYml0cyBhbmQgdGhlIGRhdGEgYnl0ZXMuICAqLworCQlmb3IgKGkgPSAwLCBqID0gMCwgayA9IDA7IGkgPCBOVlJBTV9TRUxGQk9PVF9IV19TSVpFOyBpKyspIHsKKwkJCWlmICgoaSA9PSAwKSB8fCAoaSA9PSA4KSkgeworCQkJCWludCBsOworCQkJCXU4IG1zazsKKworCQkJCWZvciAobCA9IDAsIG1zayA9IDB4ODA7IGwgPCA3OyBsKyssIG1zayA+Pj0gMSkKKwkJCQkJcGFyaXR5W2srK10gPSBidWY4W2ldICYgbXNrOworCQkJCWkrKzsKKwkJCX0KKwkJCWVsc2UgaWYgKGkgPT0gMTYpIHsKKwkJCQlpbnQgbDsKKwkJCQl1OCBtc2s7CisKKwkJCQlmb3IgKGwgPSAwLCBtc2sgPSAweDIwOyBsIDwgNjsgbCsrLCBtc2sgPj49IDEpCisJCQkJCXBhcml0eVtrKytdID0gYnVmOFtpXSAmIG1zazsKKwkJCQlpKys7CisKKwkJCQlmb3IgKGwgPSAwLCBtc2sgPSAweDgwOyBsIDwgODsgbCsrLCBtc2sgPj49IDEpCisJCQkJCXBhcml0eVtrKytdID0gYnVmOFtpXSAmIG1zazsKKwkJCQlpKys7CisJCQl9CisJCQlkYXRhW2orK10gPSBidWY4W2ldOworCQl9CisKKwkJZXJyID0gLUVJTzsKKwkJZm9yIChpID0gMDsgaSA8IE5WUkFNX1NFTEZCT09UX0RBVEFfU0laRTsgaSsrKSB7CisJCQl1OCBodzggPSBod2VpZ2h0OChkYXRhW2ldKTsKKworCQkJaWYgKChodzggJiAweDEpICYmIHBhcml0eVtpXSkKKwkJCQlnb3RvIG91dDsKKwkJCWVsc2UgaWYgKCEoaHc4ICYgMHgxKSAmJiAhcGFyaXR5W2ldKQorCQkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IDA7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIEJvb3RzdHJhcCBjaGVja3N1bSBhdCBvZmZzZXQgMHgxMCAqLwogCWNzdW0gPSBjYWxjX2NyYygodW5zaWduZWQgY2hhciAqKSBidWYsIDB4MTApOwogCWlmKGNzdW0gIT0gY3B1X3RvX2xlMzIoYnVmWzB4MTAvNF0pKQpAQCAtODI0Myw3ICs4NDQwLDcgQEAKIC8qIE9ubHkgdGVzdCB0aGUgY29tbW9ubHkgdXNlZCByZWdpc3RlcnMgKi8KIHN0YXRpYyBpbnQgdGczX3Rlc3RfcmVnaXN0ZXJzKHN0cnVjdCB0ZzMgKnRwKQogewotCWludCBpLCBpc181NzA1OworCWludCBpLCBpc181NzA1LCBpc181NzUwOwogCXUzMiBvZmZzZXQsIHJlYWRfbWFzaywgd3JpdGVfbWFzaywgdmFsLCBzYXZlX3ZhbCwgcmVhZF92YWw7CiAJc3RhdGljIHN0cnVjdCB7CiAJCXUxNiBvZmZzZXQ7CkBAIC04MjUxLDYgKzg0NDgsNyBAQAogI2RlZmluZSBURzNfRkxfNTcwNQkweDEKICNkZWZpbmUgVEczX0ZMX05PVF81NzA1CTB4MgogI2RlZmluZSBURzNfRkxfTk9UXzU3ODgJMHg0CisjZGVmaW5lIFRHM19GTF9OT1RfNTc1MAkweDgKIAkJdTMyIHJlYWRfbWFzazsKIAkJdTMyIHdyaXRlX21hc2s7CiAJfSByZWdfdGJsW10gPSB7CkBAIC04MzYxLDkgKzg1NTksOSBAQAogCQkJMHhmZmZmZmZmZiwgMHgwMDAwMDAwMCB9LAogCiAJCS8qIEJ1ZmZlciBNYW5hZ2VyIENvbnRyb2wgUmVnaXN0ZXJzLiAqLwotCQl7IEJVRk1HUl9NQl9QT09MX0FERFIsIDB4MDAwMCwKKwkJeyBCVUZNR1JfTUJfUE9PTF9BRERSLCBURzNfRkxfTk9UXzU3NTAsCiAJCQkweDAwMDAwMDAwLCAweDAwN2ZmZjgwIH0sCi0JCXsgQlVGTUdSX01CX1BPT0xfU0laRSwgMHgwMDAwLAorCQl7IEJVRk1HUl9NQl9QT09MX1NJWkUsIFRHM19GTF9OT1RfNTc1MCwKIAkJCTB4MDAwMDAwMDAsIDB4MDA3ZmZmZmYgfSwKIAkJeyBCVUZNR1JfTUJfUkRNQV9MT1dfV0FURVIsIDB4MDAwMCwKIAkJCTB4MDAwMDAwMDAsIDB4MDAwMDAwM2YgfSwKQEAgLTgzODksMTAgKzg1ODcsMTIgQEAKIAkJeyAweGZmZmYsIDB4MDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCB9LAogCX07CiAKLQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzA1X1BMVVMpCisJaXNfNTcwNSA9IGlzXzU3NTAgPSAwOworCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyXzU3MDVfUExVUykgewogCQlpc181NzA1ID0gMTsKLQllbHNlCi0JCWlzXzU3MDUgPSAwOworCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpCisJCQlpc181NzUwID0gMTsKKwl9CiAKIAlmb3IgKGkgPSAwOyByZWdfdGJsW2ldLm9mZnNldCAhPSAweGZmZmY7IGkrKykgewogCQlpZiAoaXNfNTcwNSAmJiAocmVnX3RibFtpXS5mbGFncyAmIFRHM19GTF9OT1RfNTcwNSkpCkBAIC04NDA1LDYgKzg2MDUsOSBAQAogCQkgICAgKHJlZ190YmxbaV0uZmxhZ3MgJiBURzNfRkxfTk9UXzU3ODgpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGlzXzU3NTAgJiYgKHJlZ190YmxbaV0uZmxhZ3MgJiBURzNfRkxfTk9UXzU3NTApKQorCQkJY29udGludWU7CisKIAkJb2Zmc2V0ID0gKHUzMikgcmVnX3RibFtpXS5vZmZzZXQ7CiAJCXJlYWRfbWFzayA9IHJlZ190YmxbaV0ucmVhZF9tYXNrOwogCQl3cml0ZV9tYXNrID0gcmVnX3RibFtpXS53cml0ZV9tYXNrOwpAQCAtODQ5Niw2ICs4Njk5LDEzIEBACiAJCXsgMHgwMDAwODAwMCwgMHgwMjAwMH0sCiAJCXsgMHgwMDAxMDAwMCwgMHgwYzAwMH0sCiAJCXsgMHhmZmZmZmZmZiwgMHgwMDAwMH0KKwl9LCBtZW1fdGJsXzU5MDZbXSA9IHsKKwkJeyAweDAwMDAwMjAwLCAweDAwMDA4fSwKKwkJeyAweDAwMDA0MDAwLCAweDAwNDAwfSwKKwkJeyAweDAwMDA2MDAwLCAweDAwNDAwfSwKKwkJeyAweDAwMDA4MDAwLCAweDAxMDAwfSwKKwkJeyAweDAwMDEwMDAwLCAweDAxMDAwfSwKKwkJeyAweGZmZmZmZmZmLCAweDAwMDAwfQogCX07CiAJc3RydWN0IG1lbV9lbnRyeSAqbWVtX3RibDsKIAlpbnQgZXJyID0gMDsKQEAgLTg1MDUsNiArODcxNSw4IEBACiAJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpCiAJCQltZW1fdGJsID0gbWVtX3RibF81NzU1OworCQllbHNlIGlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwkJCW1lbV90YmwgPSBtZW1fdGJsXzU5MDY7CiAJCWVsc2UKIAkJCW1lbV90YmwgPSBtZW1fdGJsXzU3MDU7CiAJfSBlbHNlCkBAIC04NTQxLDEzICs4NzUzLDQxIEBACiAJCQlyZXR1cm4gMDsKIAogCQltYWNfbW9kZSA9ICh0cC0+bWFjX21vZGUgJiB+TUFDX01PREVfUE9SVF9NT0RFX01BU0spIHwKLQkJCSAgIE1BQ19NT0RFX1BPUlRfSU5UX0xQQkFDSyB8IE1BQ19NT0RFX0xJTktfUE9MQVJJVFkgfAotCQkJICAgTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CisJCQkgICBNQUNfTU9ERV9QT1JUX0lOVF9MUEJBQ0sgfCBNQUNfTU9ERV9MSU5LX1BPTEFSSVRZOworCQlpZiAodHAtPnRnM19mbGFncyAmIFRHM19GTEFHXzEwXzEwMF9PTkxZKQorCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX01JSTsKKwkJZWxzZQorCQkJbWFjX21vZGUgfD0gTUFDX01PREVfUE9SVF9NT0RFX0dNSUk7CiAJCXR3MzIoTUFDX01PREUsIG1hY19tb2RlKTsKIAl9IGVsc2UgaWYgKGxvb3BiYWNrX21vZGUgPT0gVEczX1BIWV9MT09QQkFDSykgewotCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9CTUNSLCBCTUNSX0xPT1BCQUNLIHwgQk1DUl9GVUxMRFBMWCB8Ci0JCQkJCSAgIEJNQ1JfU1BFRUQxMDAwKTsKKwkJdTMyIHZhbDsKKworCQlpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpIHsKKwkJCXUzMiBwaHl0ZXN0OworCisJCQlpZiAoIXRnM19yZWFkcGh5KHRwLCBNSUlfVEczX0VQSFlfVEVTVCwgJnBoeXRlc3QpKSB7CisJCQkJdTMyIHBoeTsKKworCQkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FUEhZX1RFU1QsCisJCQkJCSAgICAgcGh5dGVzdCB8IE1JSV9URzNfRVBIWV9TSEFET1dfRU4pOworCQkJCWlmICghdGczX3JlYWRwaHkodHAsIDB4MWIsICZwaHkpKQorCQkJCQl0ZzNfd3JpdGVwaHkodHAsIDB4MWIsIHBoeSAmIH4weDIwKTsKKwkJCQlpZiAoIXRnM19yZWFkcGh5KHRwLCAweDEwLCAmcGh5KSkKKwkJCQkJdGczX3dyaXRlcGh5KHRwLCAweDEwLCBwaHkgJiB+MHg0MDAwKTsKKwkJCQl0ZzNfd3JpdGVwaHkodHAsIE1JSV9URzNfRVBIWV9URVNULCBwaHl0ZXN0KTsKKwkJCX0KKwkJfQorCQl2YWwgPSBCTUNSX0xPT1BCQUNLIHwgQk1DUl9GVUxMRFBMWDsKKwkJaWYgKHRwLT50ZzNfZmxhZ3MgJiBURzNfRkxBR18xMF8xMDBfT05MWSkKKwkJCXZhbCB8PSBCTUNSX1NQRUVEMTAwOworCQllbHNlCisJCQl2YWwgfD0gQk1DUl9TUEVFRDEwMDA7CisKKwkJdGczX3dyaXRlcGh5KHRwLCBNSUlfQk1DUiwgdmFsKTsKIAkJdWRlbGF5KDQwKTsKKwkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCQkJdGczX3dyaXRlcGh5KHRwLCBNSUlfVEczX0VQSFlfUFRFU1QsIDB4MTgwMCk7CisKIAkJLyogcmVzZXQgdG8gcHJldmVudCBsb3NpbmcgMXN0IHJ4IHBhY2tldCBpbnRlcm1pdHRlbnRseSAqLwogCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9NSUlfU0VSREVTKSB7CiAJCQl0dzMyX2YoTUFDX1JYX01PREUsIFJYX01PREVfUkVTRVQpOwpAQCAtODU1NSw3ICs4Nzk1LDExIEBACiAJCQl0dzMyX2YoTUFDX1JYX01PREUsIHRwLT5yeF9tb2RlKTsKIAkJfQogCQltYWNfbW9kZSA9ICh0cC0+bWFjX21vZGUgJiB+TUFDX01PREVfUE9SVF9NT0RFX01BU0spIHwKLQkJCSAgIE1BQ19NT0RFX0xJTktfUE9MQVJJVFkgfCBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKKwkJCSAgIE1BQ19NT0RFX0xJTktfUE9MQVJJVFk7CisJCWlmICh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfMTBfMTAwX09OTFkpCisJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfTUlJOworCQllbHNlCisJCQltYWNfbW9kZSB8PSBNQUNfTU9ERV9QT1JUX01PREVfR01JSTsKIAkJaWYgKCh0cC0+cGh5X2lkICYgUEhZX0lEX01BU0spID09IFBIWV9JRF9CQ001NDAxKSB7CiAJCQltYWNfbW9kZSAmPSB+TUFDX01PREVfTElOS19QT0xBUklUWTsKIAkJCXRnM193cml0ZXBoeSh0cCwgTUlJX1RHM19FWFRfQ1RSTCwKQEAgLTg2MDQsNyArODg0OCw4IEBACiAKIAl1ZGVsYXkoMTApOwogCi0JZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkvKiAyNTAgdXNlYyB0byBhbGxvdyBlbm91Z2ggdGltZSBvbiBzb21lIDEwLzEwMCBNYnBzIGRldmljZXMuICAqLworCWZvciAoaSA9IDA7IGkgPCAyNTsgaSsrKSB7CiAJCXR3MzJfZihIT1NUQ0NfTU9ERSwgdHAtPmNvYWxlc2NlX21vZGUgfCBIT1NUQ0NfTU9ERV9FTkFCTEUgfAogCQkgICAgICAgSE9TVENDX01PREVfTk9XKTsKIApAQCAtODk1Niw3ICs5MjAxLDkgQEAKIAlpZiAodGczX252cmFtX3JlYWRfc3dhYih0cCwgMCwgJm1hZ2ljKSAhPSAwKQogCQlyZXR1cm47CiAKLQlpZiAoKG1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpICYmICgobWFnaWMgJiAweGZmMDAwMDAwKSAhPSAweGE1MDAwMDAwKSkKKwlpZiAoKG1hZ2ljICE9IFRHM19FRVBST01fTUFHSUMpICYmCisJICAgICgobWFnaWMgJiBURzNfRUVQUk9NX01BR0lDX0ZXX01TSykgIT0gVEczX0VFUFJPTV9NQUdJQ19GVykgJiYKKwkgICAgKChtYWdpYyAmIFRHM19FRVBST01fTUFHSUNfSFdfTVNLKSAhPSBURzNfRUVQUk9NX01BR0lDX0hXKSkKIAkJcmV0dXJuOwogCiAJLyoKQEAgLTkxOTQsNiArOTQ0MSwxMyBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19nZXRfNTkwNl9udnJhbV9pbmZvKHN0cnVjdCB0ZzMgKnRwKQoreworCXRwLT5udnJhbV9qZWRlY251bSA9IEpFREVDX0FUTUVMOworCXRwLT50ZzNfZmxhZ3MgfD0gVEczX0ZMQUdfTlZSQU1fQlVGRkVSRUQ7CisJdHAtPm52cmFtX3BhZ2VzaXplID0gQVRNRUxfQVQyNEM1MTJfQ0hJUF9TSVpFOworfQorCiAvKiBDaGlwcyBvdGhlciB0aGFuIDU3MDAvNTcwMSB1c2UgdGhlIE5WUkFNIGZvciBmZXRjaGluZyBpbmZvLiAqLwogc3RhdGljIHZvaWQgX19kZXZpbml0IHRnM19udnJhbV9pbml0KHN0cnVjdCB0ZzMgKnRwKQogewpAQCAtOTIzMCw2ICs5NDg0LDggQEAKIAkJCXRnM19nZXRfNTc1NV9udnJhbV9pbmZvKHRwKTsKIAkJZWxzZSBpZiAoR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcpCiAJCQl0ZzNfZ2V0XzU3ODdfbnZyYW1faW5mbyh0cCk7CisJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KQorCQkJdGczX2dldF81OTA2X252cmFtX2luZm8odHApOwogCQllbHNlCiAJCQl0ZzNfZ2V0X252cmFtX2luZm8odHApOwogCkBAIC05NzAzLDYgKzk5NTksMTIgQEAKIAkvKiBBc3N1bWUgYW4gb25ib2FyZCBkZXZpY2UgYnkgZGVmYXVsdC4gICovCiAJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKIAorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQlpZiAoISh0cjMyKFBDSUVfVFJBTlNBQ1RJT05fQ0ZHKSAmIFBDSUVfVFJBTlNfQ0ZHX0xPTSkpCisJCQl0cC0+dGczX2ZsYWdzICY9IH5URzNfRkxBR19FRVBST01fV1JJVEVfUFJPVDsKKwkJcmV0dXJuOworCX0KKwogCXRnM19yZWFkX21lbSh0cCwgTklDX1NSQU1fREFUQV9TSUcsICZ2YWwpOwogCWlmICh2YWwgPT0gTklDX1NSQU1fREFUQV9TSUdfTUFHSUMpIHsKIAkJdTMyIG5pY19jZmcsIGxlZF9jZmc7CkBAIC0xMDAzNCw3ICsxMDI5NiwxMCBAQAogCX0KIAogb3V0X25vdF9mb3VuZDoKLQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAibm9uZSIpOworCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwkJc3RyY3B5KHRwLT5ib2FyZF9wYXJ0X251bWJlciwgIkJDTTk1OTA2Iik7CisJZWxzZQorCQlzdHJjcHkodHAtPmJvYXJkX3BhcnRfbnVtYmVyLCAibm9uZSIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgdGczX3JlYWRfZndfdmVyKHN0cnVjdCB0ZzMgKnRwKQpAQCAtMTAyMzYsNiArMTA1MDEsNyBAQAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1MiB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAogCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NyB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNiB8fAogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzgwX0NMQVNTKSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfNTc1MF9QTFVTOwogCkBAIC0xMDI0NSw3ICsxMDUxMSw4IEBACiAKIAlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl81NzUwX1BMVVMpIHsKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8Ci0JCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykgeworCQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKKwkJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CiAJCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9IV19UU09fMjsKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyXzFTSE9UX01TSTsKIAkJfSBlbHNlIHsKQEAgLTEwMjYyLDcgKzEwNTI5LDggQEAKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTAgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTIgJiYKIAkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3NTUgJiYKLQkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpICE9IEFTSUNfUkVWXzU3ODcpCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81Nzg3ICYmCisJICAgIEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KQogCQl0cC0+dGczX2ZsYWdzMiB8PSBURzNfRkxHMl9KVU1CT19DQVBBQkxFOwogCiAJaWYgKHBjaV9maW5kX2NhcGFiaWxpdHkodHAtPnBkZXYsIFBDSV9DQVBfSURfRVhQKSAhPSAwKQpAQCAtMTAzOTIsNiArMTA2NjAsMTIgQEAKIAkJcGNpX2NtZCAmPSB+UENJX0NPTU1BTkRfTUVNT1JZOwogCQlwY2lfd3JpdGVfY29uZmlnX3dvcmQodHAtPnBkZXYsIFBDSV9DT01NQU5ELCBwY2lfY21kKTsKIAl9CisJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB7CisJCXRwLT5yZWFkMzJfbWJveCA9IHRnM19yZWFkMzJfbWJveF81OTA2OworCQl0cC0+d3JpdGUzMl9tYm94ID0gdGczX3dyaXRlMzJfbWJveF81OTA2OworCQl0cC0+d3JpdGUzMl90eF9tYm94ID0gdGczX3dyaXRlMzJfbWJveF81OTA2OworCQl0cC0+d3JpdGUzMl9yeF9tYm94ID0gdGczX3dyaXRlMzJfbWJveF81OTA2OworCX0KIAogCWlmICh0cC0+d3JpdGUzMiA9PSB0ZzNfd3JpdGVfaW5kaXJlY3RfcmVnMzIgfHwKIAkgICAgKCh0cC0+dGczX2ZsYWdzICYgVEczX0ZMQUdfUENJWF9NT0RFKSAmJgpAQCAtMTA0NjMsNiArMTA3MzcsNyBAQAogCSAgICAoKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzA1KSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0EwKSAmJgogCSAgICAgKHRwLT5wY2lfY2hpcF9yZXZfaWQgIT0gQ0hJUFJFVl9JRF81NzA1X0ExKSkgfHwKKwkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81OTA2KSB8fAogCSAgICAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9BTllfU0VSREVTKSkKIAkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfTk9fRVRIX1dJUkVfU1BFRUQ7CiAKQEAgLTEwNDc2LDcgKzEwNzUxLDcgQEAKIAkJaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSA9PSBBU0lDX1JFVl81NzU1IHx8CiAJCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKIAkJCXRwLT50ZzNfZmxhZ3MyIHw9IFRHM19GTEcyX1BIWV9KSVRURVJfQlVHOwotCQllbHNlCisJCWVsc2UgaWYgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KQogCQkJdHAtPnRnM19mbGFnczIgfD0gVEczX0ZMRzJfUEhZX0JFUl9CVUc7CiAJfQogCkBAIC0xMDU2Niw3ICsxMDg0MSw4IEBACiAJICAgICAgdHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1RikpIHx8CiAJICAgICh0cC0+cGRldi0+dmVuZG9yID09IFBDSV9WRU5ET1JfSURfQlJPQURDT00gJiYKIAkgICAgICh0cC0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFGIHx8Ci0JICAgICAgdHAtPnBkZXYtPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUzRikpKQorCSAgICAgIHRwLT5wZGV2LT5kZXZpY2UgPT0gUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M0YpKSB8fAorCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKIAkJdHAtPnRnM19mbGFncyB8PSBURzNfRkxBR18xMF8xMDBfT05MWTsKIAogCWVyciA9IHRnM19waHlfcHJvYmUodHApOwpAQCAtMTA2MTcsNyArMTA4OTMsOCBAQAogCSAqIHN0cmFkZGxlIHRoZSA0R0IgYWRkcmVzcyBib3VuZGFyeSBpbiBzb21lIGNhc2VzLgogCSAqLwogCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc1NSB8fAotCSAgICBHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTc4NykKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU3ODcgfHwKKwkgICAgR0VUX0FTSUNfUkVWKHRwLT5wY2lfY2hpcF9yZXZfaWQpID09IEFTSUNfUkVWXzU5MDYpCiAJCXRwLT5kZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHRnM19zdGFydF94bWl0OwogCWVsc2UKIAkJdHAtPmRldi0+aGFyZF9zdGFydF94bWl0ID0gdGczX3N0YXJ0X3htaXRfZG1hX2J1ZzsKQEAgLTEwNjk4LDYgKzEwOTc1LDggQEAKIAkJZWxzZQogCQkJdGczX252cmFtX3VubG9jayh0cCk7CiAJfQorCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikKKwkJbWFjX29mZnNldCA9IDB4MTA7CiAKIAkvKiBGaXJzdCB0cnkgdG8gZ2V0IGl0IGZyb20gTUFDIGFkZHJlc3MgbWFpbGJveC4gKi8KIAl0ZzNfcmVhZF9tZW0odHAsIE5JQ19TUkFNX01BQ19BRERSX0hJR0hfTUJPWCwgJmhpKTsKQEAgLTExMTgxLDYgKzExNDYwLDEyIEBACiAJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81NzA1OwogCQl0cC0+YnVmbWdyX2NvbmZpZy5tYnVmX2hpZ2hfd2F0ZXIgPQogCQkJREVGQVVMVF9NQl9ISUdIX1dBVEVSXzU3MDU7CisJCWlmIChHRVRfQVNJQ19SRVYodHAtPnBjaV9jaGlwX3Jldl9pZCkgPT0gQVNJQ19SRVZfNTkwNikgeworCQkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9tYWNfcnhfbG93X3dhdGVyID0KKwkJCQlERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81OTA2OworCQkJdHAtPmJ1Zm1ncl9jb25maWcubWJ1Zl9oaWdoX3dhdGVyID0KKwkJCQlERUZBVUxUX01CX0hJR0hfV0FURVJfNTkwNjsKKwkJfQogCiAJCXRwLT5idWZtZ3JfY29uZmlnLm1idWZfcmVhZF9kbWFfbG93X3dhdGVyX2p1bWJvID0KIAkJCURFRkFVTFRfTUJfUkRNQV9MT1dfV0FURVJfSlVNQk9fNTc4MDsKQEAgLTExMjI0LDYgKzExNTA5LDggQEAKIAljYXNlIFBIWV9JRF9CQ001NzgwOglyZXR1cm4gIjU3ODAiOwogCWNhc2UgUEhZX0lEX0JDTTU3NTU6CXJldHVybiAiNTc1NSI7CiAJY2FzZSBQSFlfSURfQkNNNTc4NzoJcmV0dXJuICI1Nzg3IjsKKwljYXNlIFBIWV9JRF9CQ001NzU2OglyZXR1cm4gIjU3MjIvNTc1NiI7CisJY2FzZSBQSFlfSURfQkNNNTkwNjoJcmV0dXJuICI1OTA2IjsKIAljYXNlIFBIWV9JRF9CQ004MDAyOglyZXR1cm4gIjgwMDIvc2VyZGVzIjsKIAljYXNlIDA6CQkJcmV0dXJuICJzZXJkZXMiOwogCWRlZmF1bHQ6CQlyZXR1cm4gInVua25vd24iOwpAQCAtMTE1MjYsNyArMTE4MTMsOCBAQAogCSAqLwogCWlmICh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTTykgewogCQlkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOwotCQlpZiAodHAtPnRnM19mbGFnczIgJiBURzNfRkxHMl9IV19UU09fMikKKwkJaWYgKCh0cC0+dGczX2ZsYWdzMiAmIFRHM19GTEcyX0hXX1RTT18yKSAmJgorCQkgICAgKEdFVF9BU0lDX1JFVih0cC0+cGNpX2NoaXBfcmV2X2lkKSAhPSBBU0lDX1JFVl81OTA2KSkKIAkJCWRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9UU082OwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdGczLmggYi9kcml2ZXJzL25ldC90ZzMuaAppbmRleCAzZWNmMzU2Li45MmY1MzAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90ZzMuaAorKysgYi9kcml2ZXJzL25ldC90ZzMuaApAQCAtMjQsNiArMjQsOCBAQAogCiAjZGVmaW5lIFJYX0NPUFlfVEhSRVNIT0xEICAJCTI1NgogCisjZGVmaW5lIFRHM19SWF9JTlRFUk5BTF9SSU5HX1NaXzU5MDYJMzIKKwogI2RlZmluZSBSWF9TVERfTUFYX1NJWkUJCQkxNTM2CiAjZGVmaW5lIFJYX1NURF9NQVhfU0laRV81NzA1CQk1MTIKICNkZWZpbmUgUlhfSlVNQk9fTUFYX1NJWkUJCTB4ZGVhZGJlZWYgLyogWFhYICovCkBAIC0xMjksNiArMTMxLDcgQEAKICNkZWZpbmUgIENISVBSRVZfSURfNTc1Ml9BMF9IVwkJIDB4NTAwMAogI2RlZmluZSAgQ0hJUFJFVl9JRF81NzUyX0EwCQkgMHg2MDAwCiAjZGVmaW5lICBDSElQUkVWX0lEXzU3NTJfQTEJCSAweDYwMDEKKyNkZWZpbmUgIENISVBSRVZfSURfNTkwNl9BMQkJIDB4YzAwMQogI2RlZmluZSAgR0VUX0FTSUNfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSA+PiAxMikKICNkZWZpbmUgICBBU0lDX1JFVl81NzAwCQkJIDB4MDcKICNkZWZpbmUgICBBU0lDX1JFVl81NzAxCQkJIDB4MDAKQEAgLTE0MSw2ICsxNDQsNyBAQAogI2RlZmluZSAgIEFTSUNfUkVWXzU3MTQJCQkgMHgwOQogI2RlZmluZSAgIEFTSUNfUkVWXzU3NTUJCQkgMHgwYQogI2RlZmluZSAgIEFTSUNfUkVWXzU3ODcJCQkgMHgwYgorI2RlZmluZSAgIEFTSUNfUkVWXzU5MDYJCQkgMHgwYwogI2RlZmluZSAgR0VUX0NISVBfUkVWKENISVBfUkVWX0lEKQkoKENISVBfUkVWX0lEKSA+PiA4KQogI2RlZmluZSAgIENISVBSRVZfNTcwMF9BWAkJIDB4NzAKICNkZWZpbmUgICBDSElQUkVWXzU3MDBfQlgJCSAweDcxCkBAIC02NDYsNyArNjUwLDggQEAKICNkZWZpbmUgIFNORERBVEFJX1NDVFJMX0ZPUkNFX1pFUk8JIDB4MDAwMDAwMTAKICNkZWZpbmUgU05EREFUQUlfU1RBVFNFTkFCCQkweDAwMDAwYzBjCiAjZGVmaW5lIFNORERBVEFJX1NUQVRTSU5DTUFTSwkJMHgwMDAwMGMxMAotLyogMHhjMTQgLS0+IDB4YzgwIHVudXNlZCAqLworI2RlZmluZSBJU09fUEtUX1RYCQkJMHgwMDAwMGMyMAorLyogMHhjMjQgLS0+IDB4YzgwIHVudXNlZCAqLwogI2RlZmluZSBTTkREQVRBSV9DT1NfQ05UXzAJCTB4MDAwMDBjODAKICNkZWZpbmUgU05EREFUQUlfQ09TX0NOVF8xCQkweDAwMDAwYzg0CiAjZGVmaW5lIFNORERBVEFJX0NPU19DTlRfMgkJMHgwMDAwMGM4OApAQCAtOTk3LDExICsxMDAyLDEzIEBACiAjZGVmaW5lIEJVRk1HUl9NQl9NQUNSWF9MT1dfV0FURVIJMHgwMDAwNDQxNAogI2RlZmluZSAgREVGQVVMVF9NQl9NQUNSWF9MT1dfV0FURVIJICAweDAwMDAwMDIwCiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81NzA1ICAweDAwMDAwMDEwCisjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl81OTA2ICAweDAwMDAwMDA0CiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CTyAweDAwMDAwMDk4CiAjZGVmaW5lICBERUZBVUxUX01CX01BQ1JYX0xPV19XQVRFUl9KVU1CT181NzgwIDB4MDAwMDAwNGIKICNkZWZpbmUgQlVGTUdSX01CX0hJR0hfV0FURVIJCTB4MDAwMDQ0MTgKICNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUgkJIDB4MDAwMDAwNjAKICNkZWZpbmUgIERFRkFVTFRfTUJfSElHSF9XQVRFUl81NzA1CSAweDAwMDAwMDYwCisjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfNTkwNgkgMHgwMDAwMDAxMAogI2RlZmluZSAgREVGQVVMVF9NQl9ISUdIX1dBVEVSX0pVTUJPCSAweDAwMDAwMTdjCiAjZGVmaW5lICBERUZBVUxUX01CX0hJR0hfV0FURVJfSlVNQk9fNTc4MCAweDAwMDAwMDk2CiAjZGVmaW5lIEJVRk1HUl9SWF9NQl9BTExPQ19SRVEJCTB4MDAwMDQ0MWMKQEAgLTExMzgsNyArMTE0NSwxMiBAQAogI2RlZmluZSBUWF9DUFVfU1RBVEUJCQkweDAwMDA1NDA0CiAjZGVmaW5lIFRYX0NQVV9QR01DVFIJCQkweDAwMDA1NDFjCiAKKyNkZWZpbmUgVkNQVV9TVEFUVVMJCQkweDAwMDA1MTAwCisjZGVmaW5lICBWQ1BVX1NUQVRVU19JTklUX0RPTkUJCSAweDA0MDAwMDAwCisjZGVmaW5lICBWQ1BVX1NUQVRVU19EUlZfUkVTRVQJCSAweDA4MDAwMDAwCisKIC8qIE1haWxib3hlcyAqLworI2RlZmluZSBHUkNNQk9YX0JBU0UJCQkweDAwMDA1NjAwCiAjZGVmaW5lIEdSQ01CT1hfSU5URVJSVVBUXzAJCTB4MDAwMDU4MDAgLyogNjQtYml0ICovCiAjZGVmaW5lIEdSQ01CT1hfSU5URVJSVVBUXzEJCTB4MDAwMDU4MDggLyogNjQtYml0ICovCiAjZGVmaW5lIEdSQ01CT1hfSU5URVJSVVBUXzIJCTB4MDAwMDU4MTAgLyogNjQtYml0ICovCkBAIC0xMzk4LDcgKzE0MTAsMTAgQEAKICNkZWZpbmUgR1JDX0VFUFJPTV9DVFJMCQkJMHgwMDAwNjg0MAogI2RlZmluZSBHUkNfTURJX0NUUkwJCQkweDAwMDA2ODQ0CiAjZGVmaW5lIEdSQ19TRUVQUk9NX0RFTEFZCQkweDAwMDA2ODQ4Ci0vKiAweDY4NGMgLS0+IDB4NmMwMCB1bnVzZWQgKi8KKy8qIDB4Njg0YyAtLT4gMHg2ODkwIHVudXNlZCAqLworI2RlZmluZSBHUkNfVkNQVV9FWFRfQ1RSTAkJMHgwMDAwNjg5MAorI2RlZmluZSBHUkNfVkNQVV9FWFRfQ1RSTF9IQUxUX0NQVQkgMHgwMDQwMDAwMAorI2RlZmluZSBHUkNfVkNQVV9FWFRfQ1RSTF9ESVNBQkxFX1dPTAkgMHgyMDAwMDAwMAogI2RlZmluZSBHUkNfRkFTVEJPT1RfUEMJCQkweDAwMDA2ODk0CS8qIDU3NTIsIDU3NTUsIDU3ODcgKi8KIAogLyogMHg2YzAwIC0tPiAweDcwMDAgdW51c2VkICovCkBAIC0xNDg1LDkgKzE1MDAsMTcgQEAKICNkZWZpbmUgTlZSQU1fV1JJVEUxCQkJMHgwMDAwNzAyOAogLyogMHg3MDJjIC0tPiAweDc0MDAgdW51c2VkICovCiAKLS8qIDB4NzQwMCAtLT4gMHg4MDAwIHVudXNlZCAqLworLyogMHg3NDAwIC0tPiAweDdjMDAgdW51c2VkICovCisjZGVmaW5lIFBDSUVfVFJBTlNBQ1RJT05fQ0ZHCQkweDAwMDA3YzA0CisjZGVmaW5lIFBDSUVfVFJBTlNfQ0ZHXzFTSE9UX01TSQkgMHgyMDAwMDAwMAorI2RlZmluZSBQQ0lFX1RSQU5TX0NGR19MT00JCSAweDAwMDAwMDIwCisKIAogI2RlZmluZSBURzNfRUVQUk9NX01BR0lDCQkweDY2OTk1NWFhCisjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfRlcJCTB4YTUwMDAwMDAKKyNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19GV19NU0sJCTB4ZmYwMDAwMDAKKyNkZWZpbmUgVEczX0VFUFJPTV9NQUdJQ19IVwkJMHhhYmNkCisjZGVmaW5lIFRHM19FRVBST01fTUFHSUNfSFdfTVNLCQkweGZmZmYKIAogLyogMzJLIFdpbmRvdyBpbnRvIE5JQyBpbnRlcm5hbCBtZW1vcnkgKi8KICNkZWZpbmUgTklDX1NSQU1fV0lOX0JBU0UJCTB4MDAwMDgwMDAKQEAgLTE1MzcsNiArMTU2MCw3IEBACiAjZGVmaW5lICBGV0NNRF9OSUNEUlZfRklYX0RNQVIJCSAweDAwMDAwMDA1CiAjZGVmaW5lICBGV0NNRF9OSUNEUlZfRklYX0RNQVcJCSAweDAwMDAwMDA2CiAjZGVmaW5lICBGV0NNRF9OSUNEUlZfQUxJVkUyCQkgMHgwMDAwMDAwZAorI2RlZmluZSAgRldDTURfTklDRFJWX0FMSVZFMwkJIDB4MDAwMDAwMGUKICNkZWZpbmUgTklDX1NSQU1fRldfQ01EX0xFTl9NQk9YCTB4MDAwMDBiN2MKICNkZWZpbmUgTklDX1NSQU1fRldfQ01EX0RBVEFfTUJPWAkweDAwMDAwYjgwCiAjZGVmaW5lIE5JQ19TUkFNX0ZXX0FTRl9TVEFUVVNfTUJPWAkweDAwMDAwYzAwCkBAIC0xNjA0LDYgKzE2MjgsNyBAQAogI2RlZmluZSBNSUlfVEczX0RTUF9SV19QT1JUCQkweDE1IC8qIERTUCBjb2VmZmljaWVudCByZWFkL3dyaXRlIHBvcnQgKi8KIAogI2RlZmluZSBNSUlfVEczX0RTUF9BRERSRVNTCQkweDE3IC8qIERTUCBhZGRyZXNzIHJlZ2lzdGVyICovCisjZGVmaW5lIE1JSV9URzNfRVBIWV9QVEVTVAkJMHgxNyAvKiA1OTA2IFBIWSByZWdpc3RlciAqLwogCiAjZGVmaW5lIE1JSV9URzNfQVVYX0NUUkwJCTB4MTggLyogYXV4aWxsaWFyeSBjb250cm9sIHJlZ2lzdGVyICovCiAKQEAgLTE2MTcsNiArMTY0Miw4IEBACiAjZGVmaW5lIE1JSV9URzNfQVVYX1NUQVRfMTAwRlVMTAkweDA1MDAKICNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVF8xMDAwSEFMRgkweDA2MDAKICNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVF8xMDAwRlVMTAkweDA3MDAKKyNkZWZpbmUgTUlJX1RHM19BVVhfU1RBVF8xMDAJCTB4MDAwOAorI2RlZmluZSBNSUlfVEczX0FVWF9TVEFUX0ZVTEwJCTB4MDAwMQogCiAjZGVmaW5lIE1JSV9URzNfSVNUQVQJCQkweDFhIC8qIElSUSBzdGF0dXMgcmVnaXN0ZXIgKi8KICNkZWZpbmUgTUlJX1RHM19JTUFTSwkJCTB4MWIgLyogSVJRIG1hc2sgcmVnaXN0ZXIgKi8KQEAgLTE2MjcsNiArMTY1NCw5IEBACiAjZGVmaW5lIE1JSV9URzNfSU5UX0RVUExFWENIRwkJMHgwMDA4CiAjZGVmaW5lIE1JSV9URzNfSU5UX0FORUdfUEFHRV9SWAkweDA0MDAKIAorI2RlZmluZSBNSUlfVEczX0VQSFlfVEVTVAkJMHgxZiAvKiA1OTA2IFBIWSByZWdpc3RlciAqLworI2RlZmluZSBNSUlfVEczX0VQSFlfU0hBRE9XX0VOCQkweDgwCisKIC8qIFRoZXJlIGFyZSB0d28gd2F5cyB0byBtYW5hZ2UgdGhlIFRYIGRlc2NyaXB0b3JzIG9uIHRoZSB0aWdvbjMuCiAgKiBFaXRoZXIgdGhlIGRlc2NyaXB0b3JzIGFyZSBpbiBob3N0IERNQSdhYmxlIG1lbW9yeSwgb3IgdGhleQogICogZXhpc3Qgb25seSBpbiB0aGUgY2FyZHMgb24tY2hpcCBTUkFNLiAgQWxsIDE2IHNlbmQgYmRzIGFyZSB1bmRlcgpAQCAtMjIwMyw3ICsyMjMzLDYgQEAKICNkZWZpbmUgVEczX0ZMRzJfUENJX0VYUFJFU1MJCTB4MDAwMDAyMDAKICNkZWZpbmUgVEczX0ZMRzJfQVNGX05FV19IQU5EU0hBS0UJMHgwMDAwMDQwMAogI2RlZmluZSBURzNfRkxHMl9IV19BVVRPTkVHCQkweDAwMDAwODAwCi0jZGVmaW5lIFRHM19GTEcyX1BIWV9KVVNUX0lOSVRURUQJMHgwMDAwMTAwMAogI2RlZmluZSBURzNfRkxHMl9QSFlfU0VSREVTCQkweDAwMDAyMDAwCiAjZGVmaW5lIFRHM19GTEcyX0NBUEFDSVRJVkVfQ09VUExJTkcJMHgwMDAwNDAwMAogI2RlZmluZSBURzNfRkxHMl9GTEFTSAkJCTB4MDAwMDgwMDAKQEAgLTIyMzYsNiArMjI2NSwxMiBAQAogCXUxNgkJCQlhc2ZfY291bnRlcjsKIAl1MTYJCQkJYXNmX211bHRpcGxpZXI7CiAKKwkvKiAxIHNlY29uZCBjb3VudGVyIGZvciB0cmFuc2llbnQgc2VyZGVzIGxpbmsgZXZlbnRzICovCisJdTMyCQkJCXNlcmRlc19jb3VudGVyOworI2RlZmluZSBTRVJERVNfQU5fVElNRU9VVF81NzA0UwkJMgorI2RlZmluZSBTRVJERVNfUEFSQUxMRUxfREVUX1RJTUVPVVQJMQorI2RlZmluZSBTRVJERVNfQU5fVElNRU9VVF81NzE0UwkJMQorCiAJc3RydWN0IHRnM19saW5rX2NvbmZpZwkJbGlua19jb25maWc7CiAJc3RydWN0IHRnM19idWZtZ3JfY29uZmlnCWJ1Zm1ncl9jb25maWc7CiAKQEAgLTIyNzYsNiArMjMxMSw4IEBACiAjZGVmaW5lIFBIWV9JRF9CQ001NzgwCQkJMHg2MDAwODM1MAogI2RlZmluZSBQSFlfSURfQkNNNTc1NQkJCTB4YmMwNTBjYzAKICNkZWZpbmUgUEhZX0lEX0JDTTU3ODcJCQkweGJjMDUwY2UwCisjZGVmaW5lIFBIWV9JRF9CQ001NzU2CQkJMHhiYzA1MGVkMAorI2RlZmluZSBQSFlfSURfQkNNNTkwNgkJCTB4ZGMwMGFjNDAKICNkZWZpbmUgUEhZX0lEX0JDTTgwMDIJCQkweDYwMDEwMTQwCiAjZGVmaW5lIFBIWV9JRF9JTlZBTElECQkJMHhmZmZmZmZmZgogI2RlZmluZSBQSFlfSURfUkVWX01BU0sJCQkweDAwMDAwMDBmCkBAIC0yMzAyLDcgKzIzMzksOCBAQAogCSAoWCkgPT0gUEhZX0lEX0JDTTU3MDUgfHwgKFgpID09IFBIWV9JRF9CQ001NzUwIHx8IFwKIAkgKFgpID09IFBIWV9JRF9CQ001NzUyIHx8IChYKSA9PSBQSFlfSURfQkNNNTcxNCB8fCBcCiAJIChYKSA9PSBQSFlfSURfQkNNNTc4MCB8fCAoWCkgPT0gUEhZX0lEX0JDTTU3ODcgfHwgXAotCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTUgfHwgKFgpID09IFBIWV9JRF9CQ004MDAyKQorCSAoWCkgPT0gUEhZX0lEX0JDTTU3NTUgfHwgKFgpID09IFBIWV9JRF9CQ001NzU2IHx8IFwKKwkgKFgpID09IFBIWV9JRF9CQ001OTA2IHx8IChYKSA9PSBQSFlfSURfQkNNODAwMikKIAogCXN0cnVjdCB0ZzNfaHdfc3RhdHMJCSpod19zdGF0czsKIAlkbWFfYWRkcl90CQkJc3RhdHNfbWFwcGluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5jIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKaW5kZXggMGQ2NjcwMC4uYmZjOGMzZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKKysrIGIvZHJpdmVycy9uZXQvdG9rZW5yaW5nL2xhbnN0cmVhbWVyLmMKQEAgLTE4NzYsNyArMTg3Niw2IEBACiAJCWRhdGFwW3NpemUrMV09aW9fd29yZCAmIDB4ZmY7CiAJfQogCi0KIAlzaXplID0gc3ByaW50ZihidWZmZXIsICJcbiU2czogQWRhcHRlciBBZGRyZXNzICAgOiBOb2RlIEFkZHJlc3MgICAgICA6IEZ1bmN0aW9uYWwgQWRkclxuIiwgZGV2LT5uYW1lKTsKIAogCXNpemUgKz0gc3ByaW50ZihidWZmZXIgKyBzaXplLApAQCAtMTkzMiw2NCArMTkzMSw2IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgU1RSRUFNRVJfSU9DVEwgJiYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLXN0YXRpYyBpbnQgc3RyZWFtZXJfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCi17Ci0gICAgICAgIGludCBpOwotCXN0cnVjdCBzdHJlYW1lcl9wcml2YXRlICpzdHJlYW1lcl9wcml2ID0gKHN0cnVjdCBzdHJlYW1lcl9wcml2YXRlICopIGRldi0+cHJpdjsKLQl1OCBfX2lvbWVtICpzdHJlYW1lcl9tbWlvID0gc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfbW1pbzsKLQotCXN3aXRjaChjbWQpIHsKLQljYXNlIElPQ1RMX1NJU1JfTUFTSzoKLQkJd3JpdGV3KFNJU1JfTUksIHN0cmVhbWVyX21taW8gKyBTSVNSX01BU0tfU1VNKTsKLQkJYnJlYWs7Ci0JY2FzZSBJT0NUTF9TUElOX0xPQ0tfVEVTVDoKLQkgICAgICAgIHByaW50ayhLRVJOX0lORk8gInNwaW5fbG9jaygpIGNhbGxlZC5cbiIpOwotCQlzcGluX2xvY2soJnN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX2xvY2spOwotCQlzcGluX3VubG9jaygmc3RyZWFtZXJfcHJpdi0+c3RyZWFtZXJfbG9jayk7Ci0JCXByaW50ayhLRVJOX0lORk8gInNwaW5fdW5sb2NrKCkgZmluaXNoZWQuXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBJT0NUTF9QUklOVF9CREFTOgotCSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiYmRhczogUlhCREE6ICV4IFJYTEJEQTogJXggVFgyRkRBOiAleCBUWDJMRkRBOiAleFxuIiwKLQkJICAgICAgIHJlYWR3KHN0cmVhbWVyX21taW8gKyBSWEJEQSksCi0JCSAgICAgICByZWFkdyhzdHJlYW1lcl9tbWlvICsgUlhMQkRBKSwKLQkJICAgICAgIHJlYWR3KHN0cmVhbWVyX21taW8gKyBUWDJGREEpLAotCQkgICAgICAgcmVhZHcoc3RyZWFtZXJfbW1pbyArIFRYMkxGREEpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJT0NUTF9QUklOVF9SRUdJU1RFUlM6Ci0JICAgICAgICBwcmludGsoS0VSTl9JTkZPICJyZWdpc3RlcnM6XG4iKTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU0lTUjogJTA0eCBNSVNSOiAlMDR4IExJU1I6ICUwNHggQkNUTDogJTA0eCBCTUNUTDogJTA0eFxubWFzayAgJTA0eCBtYXNrICAlMDR4XG4iLCAKLQkJICAgICAgIHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSKSwKLQkJICAgICAgIHJlYWR3KHN0cmVhbWVyX21taW8gKyBNSVNSX1JVTSksCi0JCSAgICAgICByZWFkdyhzdHJlYW1lcl9tbWlvICsgTElTUiksCi0JCSAgICAgICByZWFkdyhzdHJlYW1lcl9tbWlvICsgQkNUTCksCi0JCSAgICAgICByZWFkdyhzdHJlYW1lcl9tbWlvICsgQk1DVExfU1VNKSwKLQkJICAgICAgIHJlYWR3KHN0cmVhbWVyX21taW8gKyBTSVNSX01BU0spLAotCQkgICAgICAgcmVhZHcoc3RyZWFtZXJfbW1pbyArIE1JU1JfTUFTSykpOwotCQlicmVhazsKLQljYXNlIElPQ1RMX1BSSU5UX1JYX0JVRlM6Ci0JICAgICAgICBwcmludGsoS0VSTl9JTkZPICJQcmludCByeCBidWZzOlxuIik7Ci0JCWZvcihpPTA7IGk8U1RSRUFNRVJfUlhfUklOR19TSVpFOyBpKyspCi0JCSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicnhfcmluZyAlZCBzdGF0dXM6IDB4JXhcbiIsIGksIAotCQkJICAgICAgIHN0cmVhbWVyX3ByaXYtPnN0cmVhbWVyX3J4X3JpbmdbaV0uc3RhdHVzKTsKLQkJYnJlYWs7Ci0JY2FzZSBJT0NUTF9QUklOVF9UWF9CVUZTOgotCSAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiUHJpbnQgdHggYnVmczpcbiIpOwotCQlmb3IoaT0wOyBpPFNUUkVBTUVSX1RYX1JJTkdfU0laRTsgaSsrKQotCQkgICAgICAgIHByaW50ayhLRVJOX0lORk8gInR4X3JpbmcgJWQgc3RhdHVzOiAweCV4XG4iLCBpLCAKLQkJCSAgICAgICBzdHJlYW1lcl9wcml2LT5zdHJlYW1lcl90eF9yaW5nW2ldLnN0YXR1cyk7Ci0JCWJyZWFrOwotCWNhc2UgSU9DVExfUlhfQ01EOgotCSAgICAgICAgc3RyZWFtZXJfcngoZGV2KTsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiU2VudCByeCBjb21tYW5kLlxuIik7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JICAgICAgICBwcmludGsoS0VSTl9JTkZPICJCYWQgaW9jdGwhXG4iKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0jZW5kaWYKLQogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHN0cmVhbWVyX3BjaV9kcml2ZXIgPSB7CiAgIC5uYW1lICAgICA9ICJsYW5zdHJlYW1lciIsCiAgIC5pZF90YWJsZSA9IHN0cmVhbWVyX3BjaV90YmwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC90b2tlbnJpbmcvbGFuc3RyZWFtZXIuaCBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCmluZGV4IDU1NTdkOGUuLmU3YmIzNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCisrKyBiL2RyaXZlcnMvbmV0L3Rva2VucmluZy9sYW5zdHJlYW1lci5oCkBAIC02MiwxOCArNjIsNiBAQAogCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgogCi0jaWYgU1RSRUFNRVJfSU9DVEwgJiYgKExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsNSwwKSkKLSNpbmNsdWRlIDxhc20vaW9jdGwuaD4KLSNkZWZpbmUgSU9DVExfUFJJTlRfUlhfQlVGUyAgIFNJT0NERVZQUklWQVRFCi0jZGVmaW5lIElPQ1RMX1BSSU5UX1RYX0JVRlMgICBTSU9DREVWUFJJVkFURSsxCi0jZGVmaW5lIElPQ1RMX1JYX0NNRCAgICAgICAgICBTSU9DREVWUFJJVkFURSsyCi0jZGVmaW5lIElPQ1RMX1RYX0NNRCAgICAgICAgICBTSU9DREVWUFJJVkFURSszCi0jZGVmaW5lIElPQ1RMX1BSSU5UX1JFR0lTVEVSUyBTSU9DREVWUFJJVkFURSs0Ci0jZGVmaW5lIElPQ1RMX1BSSU5UX0JEQVMgICAgICBTSU9DREVWUFJJVkFURSs1Ci0jZGVmaW5lIElPQ1RMX1NQSU5fTE9DS19URVNUICBTSU9DREVWUFJJVkFURSs2Ci0jZGVmaW5lIElPQ1RMX1NJU1JfTUFTSyAgICAgICBTSU9DREVWUFJJVkFURSs3Ci0jZW5kaWYKLQogLyogTUFYX0lOVFIgLSB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGltZXMgd2UgY2FuIGxvb3AKICAqIGluc2lkZSB0aGUgaW50ZXJydXB0IGZ1bmN0aW9uIGJlZm9yZSByZXR1cm5pbmcKICAqIGNvbnRyb2wgdG8gdGhlIE9TIChtYXhpbXVtIHZhbHVlIGlzIDI1NikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMgYi9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCmluZGV4IGU2NjFkMGE5Li5mYjVmYTdkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dWxpcC9kZTR4NS5jCisrKyBiL2RyaXZlcnMvbmV0L3R1bGlwL2RlNHg1LmMKQEAgLTIxMTQsNiArMjExNCw3IEBACiAgICAgICAgIHsgIkRFQzQyNTAiLCAwIH0sCS8qIDAgaXMgdGhlIGJvYXJkIG5hbWUgaW5kZXguLi4gKi8KICAgICAgICAgeyAiIiB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShlaXNhLCBkZTR4NV9laXNhX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgZWlzYV9kcml2ZXIgZGU0eDVfZWlzYV9kcml2ZXIgPSB7CiAgICAgICAgIC5pZF90YWJsZSA9IGRlNHg1X2Vpc2FfaWRzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdHVuLmMgYi9kcml2ZXJzL25ldC90dW4uYwppbmRleCBkZThkYTZkLi5iYzBmYWNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90dW4uYworKysgYi9kcml2ZXJzL25ldC90dW4uYwpAQCAtMjg4LDExICsyODgsMTAgQEAKIAlyZXR1cm4gbGVuOwogfQogCi0vKiBXcml0ZXYgKi8KLXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGV2KHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppdiwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCAqcG9zKQorc3RhdGljIHNzaXplX3QgdHVuX2Nocl9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CiAKIAlpZiAoIXR1bikKIAkJcmV0dXJuIC1FQkFERkQ7CkBAIC0zMDIsMTQgKzMwMSw2IEBACiAJcmV0dXJuIHR1bl9nZXRfdXNlcih0dW4sIChzdHJ1Y3QgaW92ZWMgKikgaXYsIGlvdl90b3RhbChpdiwgY291bnQpKTsKIH0KIAotLyogV3JpdGUgKi8KLXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqIGJ1ZiwKLQkJCSAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgaW92ZWMgaXYgPSB7ICh2b2lkIF9fdXNlciAqKSBidWYsIGNvdW50IH07Ci0JcmV0dXJuIHR1bl9jaHJfd3JpdGV2KGZpbGUsICZpdiwgMSwgcG9zKTsKLX0KLQogLyogUHV0IHBhY2tldCB0byB0aGUgdXNlciBzcGFjZSBidWZmZXIgKi8KIHN0YXRpYyBfX2lubGluZV9fIHNzaXplX3QgdHVuX3B1dF91c2VyKHN0cnVjdCB0dW5fc3RydWN0ICp0dW4sCiAJCQkJICAgICAgIHN0cnVjdCBza19idWZmICpza2IsCkBAIC0zNDMsMTAgKzMzNCwxMCBAQAogCXJldHVybiB0b3RhbDsKIH0KIAotLyogUmVhZHYgKi8KLXN0YXRpYyBzc2l6ZV90IHR1bl9jaHJfcmVhZHYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaXYsCi0JCQkgICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90ICpwb3MpCitzdGF0aWMgc3NpemVfdCB0dW5fY2hyX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppdiwKKwkJCSAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgcG9zKQogeworCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgdHVuX3N0cnVjdCAqdHVuID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCURFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC00MjYsMTQgKzQxNyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogUmVhZCAqLwotc3RhdGljIHNzaXplX3QgdHVuX2Nocl9yZWFkKHN0cnVjdCBmaWxlICogZmlsZSwgY2hhciBfX3VzZXIgKiBidWYsCi0JCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKLXsKLQlzdHJ1Y3QgaW92ZWMgaXYgPSB7IGJ1ZiwgY291bnQgfTsKLQlyZXR1cm4gdHVuX2Nocl9yZWFkdihmaWxlLCAmaXYsIDEsIHBvcyk7Ci19Ci0KIHN0YXRpYyB2b2lkIHR1bl9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCB0dW5fc3RydWN0ICp0dW4gPSBuZXRkZXZfcHJpdihkZXYpOwpAQCAtNzY0LDEwICs3NDcsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHR1bl9mb3BzID0gewogCS5vd25lcgk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsgPSBub19sbHNlZWssCi0JLnJlYWQJPSB0dW5fY2hyX3JlYWQsCi0JLnJlYWR2CT0gdHVuX2Nocl9yZWFkdiwKLQkud3JpdGUJPSB0dW5fY2hyX3dyaXRlLAotCS53cml0ZXYgPSB0dW5fY2hyX3dyaXRldiwKKwkucmVhZCAgPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkICA9IHR1bl9jaHJfYWlvX3JlYWQsCisJLndyaXRlID0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlID0gdHVuX2Nocl9haW9fd3JpdGUsCiAJLnBvbGwJPSB0dW5fY2hyX3BvbGwsCiAJLmlvY3RsCT0gdHVuX2Nocl9pb2N0bCwKIAkub3Blbgk9IHR1bl9jaHJfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3R5cGhvb24uYyBiL2RyaXZlcnMvbmV0L3R5cGhvb24uYwppbmRleCA4ZjZmNmZkLi5kNWMzMmU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC90eXBob29uLmMKKysrIGIvZHJpdmVycy9uZXQvdHlwaG9vbi5jCkBAIC0zMzMsMTEgKzMzMyw3IEBACiAjZGVmaW5lIFRZUEhPT05fUkVTRVRfVElNRU9VVF9OT1NMRUVQCSgoNiAqIDEwMDAwMDApIC8gVFlQSE9PTl9VREVMQVkpCiAjZGVmaW5lIFRZUEhPT05fV0FJVF9USU1FT1VUCQkoKDEwMDAwMDAgLyAyKSAvIFRZUEhPT05fVURFTEFZKQogCi0jaWYgTElOVVhfVkVSU0lPTl9DT0RFIDwgS0VSTkVMX1ZFUlNJT04oMiwgNSwgMjgpCi0jZGVmaW5lIHR5cGhvb25fc3luY2hyb25pemVfaXJxKHgpIHN5bmNocm9uaXplX2lycSgpCi0jZWxzZQogI2RlZmluZSB0eXBob29uX3N5bmNocm9uaXplX2lycSh4KSBzeW5jaHJvbml6ZV9pcnEoeCkKLSNlbmRpZgogCiAjaWYgZGVmaW5lZChORVRJRl9GX1RTTykKICNkZWZpbmUgc2tiX3Rzb19zaXplKHgpCQkoc2tiX3NoaW5mbyh4KS0+Z3NvX3NpemUpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vS2NvbmZpZyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCmluZGV4IDU0YjhlNDkuLjU4YjdlZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnCkBAIC0xNTQsNyArMTU0LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBIRExDX1JBVwotCWJvb2wgIlJhdyBIRExDIHN1cHBvcnQiCisJdHJpc3RhdGUgIlJhdyBIRExDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIRExDCiAJaGVscAogCSAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIG92ZXIgV0FOIGNvbm5lY3Rpb25zLgpAQCAtMTYyLDcgKzE2Miw3IEBACiAJICBJZiB1bnN1cmUsIHNheSBOLgogCiBjb25maWcgSERMQ19SQVdfRVRICi0JYm9vbCAiUmF3IEhETEMgRXRoZXJuZXQgZGV2aWNlIHN1cHBvcnQiCisJdHJpc3RhdGUgIlJhdyBIRExDIEV0aGVybmV0IGRldmljZSBzdXBwb3J0IgogCWRlcGVuZHMgb24gSERMQwogCWhlbHAKIAkgIEdlbmVyaWMgSERMQyBkcml2ZXIgc3VwcG9ydGluZyByYXcgSERMQyBFdGhlcm5ldCBkZXZpY2UgZW11bGF0aW9uCkBAIC0xNzMsNyArMTczLDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBIRExDX0NJU0NPCi0JYm9vbCAiQ2lzY28gSERMQyBzdXBwb3J0IgorCXRyaXN0YXRlICJDaXNjbyBIRExDIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIRExDCiAJaGVscAogCSAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIENpc2NvIEhETEMgb3ZlciBXQU4gY29ubmVjdGlvbnMuCkBAIC0xODEsNyArMTgxLDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBIRExDX0ZSCi0JYm9vbCAiRnJhbWUgUmVsYXkgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiRnJhbWUgUmVsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIEhETEMKIAloZWxwCiAJICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgRnJhbWUgUmVsYXkgb3ZlciBXQU4gY29ubmVjdGlvbnMuCkBAIC0xODksNyArMTg5LDcgQEAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKIGNvbmZpZyBIRExDX1BQUAotCWJvb2wgIlN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCisJdHJpc3RhdGUgIlN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIRExDCiAJaGVscAogCSAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIFBQUCBvdmVyIFdBTiBjb25uZWN0aW9ucy4KQEAgLTE5Nyw3ICsxOTcsNyBAQAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAogY29uZmlnIEhETENfWDI1Ci0JYm9vbCAiWC4yNSBwcm90b2NvbCBzdXBwb3J0IgorCXRyaXN0YXRlICJYLjI1IHByb3RvY29sIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBIRExDICYmIChMQVBCPW0gJiYgSERMQz1tIHx8IExBUEI9eSkKIAloZWxwCiAJICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgWC4yNSBvdmVyIFdBTiBjb25uZWN0aW9ucy4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L3dhbi9NYWtlZmlsZQppbmRleCAzMTZjYTY4Li44M2VjMmM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vTWFrZWZpbGUKKysrIGIvZHJpdmVycy9uZXQvd2FuL01ha2VmaWxlCkBAIC05LDE0ICs5LDEzIEBACiBjeWNsb214LSQoQ09ORklHX0NZQ0xPTVhfWDI1KQkrPSBjeWN4X3gyNS5vCiBjeWNsb214LW9ianMJCQk6PSAkKGN5Y2xvbXgteSkgIAogCi1oZGxjLXkJCQkJOj0gaGRsY19nZW5lcmljLm8KLWhkbGMtJChDT05GSUdfSERMQ19SQVcpCQkrPSBoZGxjX3Jhdy5vCi1oZGxjLSQoQ09ORklHX0hETENfUkFXX0VUSCkJKz0gaGRsY19yYXdfZXRoLm8KLWhkbGMtJChDT05GSUdfSERMQ19DSVNDTykJKz0gaGRsY19jaXNjby5vCi1oZGxjLSQoQ09ORklHX0hETENfRlIpCQkrPSBoZGxjX2ZyLm8KLWhkbGMtJChDT05GSUdfSERMQ19QUFApCQkrPSBoZGxjX3BwcC5vCi1oZGxjLSQoQ09ORklHX0hETENfWDI1KQkJKz0gaGRsY194MjUubwotaGRsYy1vYmpzCQkJOj0gJChoZGxjLXkpCitvYmotJChDT05GSUdfSERMQykJCSs9IGhkbGMubworb2JqLSQoQ09ORklHX0hETENfUkFXKQkJKz0gaGRsY19yYXcubworb2JqLSQoQ09ORklHX0hETENfUkFXX0VUSCkJKz0gaGRsY19yYXdfZXRoLm8KK29iai0kKENPTkZJR19IRExDX0NJU0NPKQkrPSBoZGxjX2Npc2NvLm8KK29iai0kKENPTkZJR19IRExDX0ZSKQkJKz0gaGRsY19mci5vCitvYmotJChDT05GSUdfSERMQ19QUFApCQkrPSBoZGxjX3BwcC5vCXN5bmNwcHAubworb2JqLSQoQ09ORklHX0hETENfWDI1KQkJKz0gaGRsY194MjUubwogCiBwYzMwMC15CQkJCTo9IHBjMzAwX2Rydi5vCiBwYzMwMC0kKENPTkZJR19QQzMwMF9NTFBQUCkJKz0gcGMzMDBfdHR5Lm8KQEAgLTM4LDEwICszNyw2IEBACiBvYmotJChDT05GSUdfTEFQQkVUSEVSKQkJKz0gbGFwYmV0aGVyLm8KIG9iai0kKENPTkZJR19TQk5JKQkJKz0gc2JuaS5vCiBvYmotJChDT05GSUdfUEMzMDApCQkrPSBwYzMwMC5vCi1vYmotJChDT05GSUdfSERMQykJCSs9IGhkbGMubwotaWZlcSAoJChDT05GSUdfSERMQ19QUFApLHkpCi0gIG9iai0kKENPTkZJR19IRExDKQkJKz0gc3luY3BwcC5vCi1lbmRpZgogb2JqLSQoQ09ORklHX04yKQkJKz0gbjIubwogb2JqLSQoQ09ORklHX0MxMDEpCQkrPSBjMTAxLm8KIG9iai0kKENPTkZJR19XQU5YTCkJCSs9IHdhbnhsLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2dlbmVyaWMuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKc2ltaWxhcml0eSBpbmRleCA2NyUKcmVuYW1lIGZyb20gZHJpdmVycy9uZXQvd2FuL2hkbGNfZ2VuZXJpYy5jCnJlbmFtZSB0byBkcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IDA0Y2ExZjcuLmRiMzU0ZTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2dlbmVyaWMuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEdlbmVyaWMgSERMQyBzdXBwb3J0IHJvdXRpbmVzIGZvciBMaW51eAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDUgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDYgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTE3LDkgKzE3LDkgQEAKICAqIFVzZSBzZXRoZGxjIHV0aWxpdHkgdG8gc2V0IGxpbmUgcGFyYW1ldGVycywgcHJvdG9jb2wgYW5kIFBWQ3MKICAqCiAgKiBIb3cgZG9lcyBpdCB3b3JrOgotICogLSBwcm90by5vcGVuKCksIGNsb3NlKCksIHN0YXJ0KCksIHN0b3AoKSBjYWxscyBhcmUgc2VyaWFsaXplZC4KKyAqIC0gcHJvdG8tPm9wZW4oKSwgY2xvc2UoKSwgc3RhcnQoKSwgc3RvcCgpIGNhbGxzIGFyZSBzZXJpYWxpemVkLgogICogICBUaGUgb3JkZXIgaXM6IG9wZW4sIFsgc3RhcnQsIHN0b3AgLi4uIF0gY2xvc2UgLi4uCi0gKiAtIHByb3RvLnN0YXJ0KCkgYW5kIHN0b3AoKSBhcmUgY2FsbGVkIHdpdGggc3Bpbl9sb2NrX2lycSBoZWxkLgorICogLSBwcm90by0+c3RhcnQoKSBhbmQgc3RvcCgpIGFyZSBjYWxsZWQgd2l0aCBzcGluX2xvY2tfaXJxIGhlbGQuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtMzgsMTAgKzM4LDEyIEBACiAjaW5jbHVkZSA8bGludXgvaGRsYy5oPgogCiAKLXN0YXRpYyBjb25zdCBjaGFyKiB2ZXJzaW9uID0gIkhETEMgc3VwcG9ydCBtb2R1bGUgcmV2aXNpb24gMS4xOSI7CitzdGF0aWMgY29uc3QgY2hhciogdmVyc2lvbiA9ICJIRExDIHN1cHBvcnQgbW9kdWxlIHJldmlzaW9uIDEuMjAiOwogCiAjdW5kZWYgREVCVUdfTElOSwogCitzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gKmZpcnN0X3Byb3RvID0gTlVMTDsKKwogCiBzdGF0aWMgaW50IGhkbGNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKQEAgLTYzLDExICs2NSwxMSBAQAogc3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgc3RydWN0IHBhY2tldF90eXBlICpwLCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpCiB7Ci0JaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwotCWlmIChoZGxjLT5wcm90by5uZXRpZl9yeCkKLQkJcmV0dXJuIGhkbGMtPnByb3RvLm5ldGlmX3J4KHNrYik7CisJc3RydWN0IGhkbGNfZGV2aWNlX2Rlc2MgKmRlc2MgPSBkZXZfdG9fZGVzYyhkZXYpOworCWlmIChkZXNjLT5uZXRpZl9yeCkKKwkJcmV0dXJuIGRlc2MtPm5ldGlmX3J4KHNrYik7CiAKLQloZGxjLT5zdGF0cy5yeF9kcm9wcGVkKys7IC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKwlkZXNjLT5zdGF0cy5yeF9kcm9wcGVkKys7IC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KIAlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQpAQCAtNzcsOCArNzksOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RhcnQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7Ci0JaWYgKGhkbGMtPnByb3RvLnN0YXJ0KQotCQlyZXR1cm4gaGRsYy0+cHJvdG8uc3RhcnQoZGV2KTsKKwlpZiAoaGRsYy0+cHJvdG8tPnN0YXJ0KQorCQlyZXR1cm4gaGRsYy0+cHJvdG8tPnN0YXJ0KGRldik7CiB9CiAKIApAQCAtODYsOCArODgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlpZiAoaGRsYy0+cHJvdG8uc3RvcCkKLQkJcmV0dXJuIGhkbGMtPnByb3RvLnN0b3AoZGV2KTsKKwlpZiAoaGRsYy0+cHJvdG8tPnN0b3ApCisJCXJldHVybiBoZGxjLT5wcm90by0+c3RvcChkZXYpOwogfQogCiAKQEAgLTE0NCwxNSArMTQ2LDE1IEBACiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogI2lmZGVmIERFQlVHX0xJTksKLQlwcmludGsoS0VSTl9ERUJVRyAiaGRsY19vcGVuKCkgY2FycmllciAlaSBvcGVuICVpXG4iLAorCXByaW50ayhLRVJOX0RFQlVHICIlczogaGRsY19vcGVuKCkgY2FycmllciAlaSBvcGVuICVpXG4iLCBkZXYtPm5hbWUsCiAJICAgICAgIGhkbGMtPmNhcnJpZXIsIGhkbGMtPm9wZW4pOwogI2VuZGlmCiAKLQlpZiAoaGRsYy0+cHJvdG8uaWQgPT0gLTEpCisJaWYgKGhkbGMtPnByb3RvID09IE5VTEwpCiAJCXJldHVybiAtRU5PU1lTOwkvKiBubyBwcm90b2NvbCBhdHRhY2hlZCAqLwogCi0JaWYgKGhkbGMtPnByb3RvLm9wZW4pIHsKLQkJaW50IHJlc3VsdCA9IGhkbGMtPnByb3RvLm9wZW4oZGV2KTsKKwlpZiAoaGRsYy0+cHJvdG8tPm9wZW4pIHsKKwkJaW50IHJlc3VsdCA9IGhkbGMtPnByb3RvLT5vcGVuKGRldik7CiAJCWlmIChyZXN1bHQpCiAJCQlyZXR1cm4gcmVzdWx0OwogCX0KQEAgLTE3OCw3ICsxODAsNyBAQAogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKICNpZmRlZiBERUJVR19MSU5LCi0JcHJpbnRrKEtFUk5fREVCVUcgImhkbGNfY2xvc2UoKSBjYXJyaWVyICVpIG9wZW4gJWlcbiIsCisJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBoZGxjX2Nsb3NlKCkgY2FycmllciAlaSBvcGVuICVpXG4iLCBkZXYtPm5hbWUsCiAJICAgICAgIGhkbGMtPmNhcnJpZXIsIGhkbGMtPm9wZW4pOwogI2VuZGlmCiAKQEAgLTE5MCw2OCArMTkyLDM0IEBACiAKIAlzcGluX3VubG9ja19pcnEoJmhkbGMtPnN0YXRlX2xvY2spOwogCi0JaWYgKGhkbGMtPnByb3RvLmNsb3NlKQotCQloZGxjLT5wcm90by5jbG9zZShkZXYpOworCWlmIChoZGxjLT5wcm90by0+Y2xvc2UpCisJCWhkbGMtPnByb3RvLT5jbG9zZShkZXYpOwogfQogCiAKIAotI2lmbmRlZiBDT05GSUdfSERMQ19SQVcKLSNkZWZpbmUgaGRsY19yYXdfaW9jdGwoZGV2LCBpZnIpCS1FTk9TWVMKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19IRExDX1JBV19FVEgKLSNkZWZpbmUgaGRsY19yYXdfZXRoX2lvY3RsKGRldiwgaWZyKQktRU5PU1lTCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSERMQ19QUFAKLSNkZWZpbmUgaGRsY19wcHBfaW9jdGwoZGV2LCBpZnIpCS1FTk9TWVMKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19IRExDX0NJU0NPCi0jZGVmaW5lIGhkbGNfY2lzY29faW9jdGwoZGV2LCBpZnIpCS1FTk9TWVMKLSNlbmRpZgotCi0jaWZuZGVmIENPTkZJR19IRExDX0ZSCi0jZGVmaW5lIGhkbGNfZnJfaW9jdGwoZGV2LCBpZnIpCQktRU5PU1lTCi0jZW5kaWYKLQotI2lmbmRlZiBDT05GSUdfSERMQ19YMjUKLSNkZWZpbmUgaGRsY194MjVfaW9jdGwoZGV2LCBpZnIpCS1FTk9TWVMKLSNlbmRpZgotCi0KIGludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQogewotCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQl1bnNpZ25lZCBpbnQgcHJvdG87CisJc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvID0gZmlyc3RfcHJvdG87CisJaW50IHJlc3VsdDsKIAogCWlmIChjbWQgIT0gU0lPQ1dBTkRFVikKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzd2l0Y2goaWZyLT5pZnJfc2V0dGluZ3MudHlwZSkgewotCWNhc2UgSUZfUFJPVE9fSERMQzoKLQljYXNlIElGX1BST1RPX0hETENfRVRIOgotCWNhc2UgSUZfUFJPVE9fUFBQOgotCWNhc2UgSUZfUFJPVE9fQ0lTQ086Ci0JY2FzZSBJRl9QUk9UT19GUjoKLQljYXNlIElGX1BST1RPX1gyNToKLQkJcHJvdG8gPSBpZnItPmlmcl9zZXR0aW5ncy50eXBlOwotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXByb3RvID0gaGRsYy0+cHJvdG8uaWQ7CisJaWYgKGRldl90b19oZGxjKGRldiktPnByb3RvKSB7CisJCXJlc3VsdCA9IGRldl90b19oZGxjKGRldiktPnByb3RvLT5pb2N0bChkZXYsIGlmcik7CisJCWlmIChyZXN1bHQgIT0gLUVJTlZBTCkKKwkJCXJldHVybiByZXN1bHQ7CiAJfQogCi0Jc3dpdGNoKHByb3RvKSB7Ci0JY2FzZSBJRl9QUk9UT19IRExDOglyZXR1cm4gaGRsY19yYXdfaW9jdGwoZGV2LCBpZnIpOwotCWNhc2UgSUZfUFJPVE9fSERMQ19FVEg6CXJldHVybiBoZGxjX3Jhd19ldGhfaW9jdGwoZGV2LCBpZnIpOwotCWNhc2UgSUZfUFJPVE9fUFBQOglyZXR1cm4gaGRsY19wcHBfaW9jdGwoZGV2LCBpZnIpOwotCWNhc2UgSUZfUFJPVE9fQ0lTQ086CXJldHVybiBoZGxjX2Npc2NvX2lvY3RsKGRldiwgaWZyKTsKLQljYXNlIElGX1BST1RPX0ZSOglyZXR1cm4gaGRsY19mcl9pb2N0bChkZXYsIGlmcik7Ci0JY2FzZSBJRl9QUk9UT19YMjU6CXJldHVybiBoZGxjX3gyNV9pb2N0bChkZXYsIGlmcik7Ci0JZGVmYXVsdDoJCXJldHVybiAtRUlOVkFMOworCS8qIE5vdCBoYW5kbGVkIGJ5IGN1cnJlbnRseSBhdHRhY2hlZCBwcm90b2NvbCAoaWYgYW55KSAqLworCisJd2hpbGUgKHByb3RvKSB7CisJCWlmICgocmVzdWx0ID0gcHJvdG8tPmlvY3RsKGRldiwgaWZyKSkgIT0gLUVJTlZBTCkKKwkJCXJldHVybiByZXN1bHQ7CisJCXByb3RvID0gcHJvdG8tPm5leHQ7CiAJfQorCXJldHVybiAtRUlOVkFMOwogfQogCiB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKQEAgLTI2Nyw4ICsyMzUsNiBAQAogCiAJZGV2LT5mbGFncyA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDsKIAotCWhkbGMtPnByb3RvLmlkID0gLTE7Ci0JaGRsYy0+cHJvdG8uZGV0YWNoID0gTlVMTDsKIAloZGxjLT5jYXJyaWVyID0gMTsKIAloZGxjLT5vcGVuID0gMDsKIAlzcGluX2xvY2tfaW5pdCgmaGRsYy0+c3RhdGVfbG9jayk7CkBAIC0yNzcsNyArMjQzLDggQEAKIHN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oZGxjZGV2KHZvaWQgKnByaXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKLQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKGhkbGNfZGV2aWNlKSwgImhkbGMlZCIsIGhkbGNfc2V0dXApOworCWRldiA9IGFsbG9jX25ldGRldihzaXplb2Yoc3RydWN0IGhkbGNfZGV2aWNlX2Rlc2MpICsKKwkJCSAgIHNpemVvZihoZGxjX2RldmljZSksICJoZGxjJWQiLCBoZGxjX3NldHVwKTsKIAlpZiAoZGV2KQogCQlkZXZfdG9faGRsYyhkZXYpLT5wcml2ID0gcHJpdjsKIAlyZXR1cm4gZGV2OwpAQCAtMjg2LDEzICsyNTMsNzEgQEAKIHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJ0bmxfbG9jaygpOwotCWhkbGNfcHJvdG9fZGV0YWNoKGRldl90b19oZGxjKGRldikpOwogCXVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7CisJZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTsKIAlydG5sX3VubG9jaygpOwogfQogCiAKIAoraW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bywKKwkJCSBpbnQgKCpyeCkoc3RydWN0IHNrX2J1ZmYgKnNrYiksIHNpemVfdCBzaXplKQoreworCWRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7CisKKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KHByb3RvLT5tb2R1bGUpKQorCQlyZXR1cm4gLUVOT1NZUzsKKworCWlmIChzaXplKQorCQlpZiAoKGRldl90b19oZGxjKGRldiktPnN0YXRlID0ga21hbGxvYyhzaXplLAorCQkJCQkJICAgICAgIEdGUF9LRVJORUwpKSA9PSBOVUxMKSB7CisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJNZW1vcnkgc3F1ZWV6ZSBvbiIKKwkJCSAgICAgICAiIGhkbGNfcHJvdG9fYXR0YWNoKClcbiIpOworCQkJbW9kdWxlX3B1dChwcm90by0+bW9kdWxlKTsKKwkJCXJldHVybiAtRU5PQlVGUzsKKwkJfQorCWRldl90b19oZGxjKGRldiktPnByb3RvID0gcHJvdG87CisJZGV2X3RvX2Rlc2MoZGV2KS0+bmV0aWZfcnggPSByeDsKKwlyZXR1cm4gMDsKK30KKworCit2b2lkIGRldGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCit7CisJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOworCisJaWYgKGhkbGMtPnByb3RvKSB7CisJCWlmIChoZGxjLT5wcm90by0+ZGV0YWNoKQorCQkJaGRsYy0+cHJvdG8tPmRldGFjaChkZXYpOworCQltb2R1bGVfcHV0KGhkbGMtPnByb3RvLT5tb2R1bGUpOworCQloZGxjLT5wcm90byA9IE5VTEw7CisJfQorCWtmcmVlKGhkbGMtPnN0YXRlKTsKKwloZGxjLT5zdGF0ZSA9IE5VTEw7Cit9CisKKwordm9pZCByZWdpc3Rlcl9oZGxjX3Byb3RvY29sKHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bykKK3sKKwlwcm90by0+bmV4dCA9IGZpcnN0X3Byb3RvOworCWZpcnN0X3Byb3RvID0gcHJvdG87Cit9CisKKwordm9pZCB1bnJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvKQoreworCXN0cnVjdCBoZGxjX3Byb3RvICoqcCA9ICZmaXJzdF9wcm90bzsKKwl3aGlsZSAoKnApIHsKKwkJaWYgKCpwID09IHByb3RvKSB7CisJCQkqcCA9IHByb3RvLT5uZXh0OworCQkJcmV0dXJuOworCQl9CisJCXAgPSAmKCgqcCktPm5leHQpOworCX0KK30KKworCisKIE1PRFVMRV9BVVRIT1IoIktyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkhETEMgc3VwcG9ydCBtb2R1bGUiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKQEAgLTMwMyw2ICszMjgsMTAgQEAKIEVYUE9SVF9TWU1CT0woaGRsY19zZXR1cCk7CiBFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpOwogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKTsKK0VYUE9SVF9TWU1CT0wocmVnaXN0ZXJfaGRsY19wcm90b2NvbCk7CitFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaGRsY19wcm90b2NvbCk7CitFWFBPUlRfU1lNQk9MKGF0dGFjaF9oZGxjX3Byb3RvY29sKTsKK0VYUE9SVF9TWU1CT0woZGV0YWNoX2hkbGNfcHJvdG9jb2wpOwogCiBzdGF0aWMgc3RydWN0IHBhY2tldF90eXBlIGhkbGNfcGFja2V0X3R5cGUgPSB7CiAJLnR5cGUgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2Npc2NvLmMKaW5kZXggZjI4OWRhYi4uYjBiYzVkZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfY2lzY28uYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19jaXNjby5jCkBAIC0yLDcgKzIsNyBAQAogICogR2VuZXJpYyBIRExDIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4CiAgKiBDaXNjbyBIRExDIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDAzIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgLSAyMDA2IEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0zNCwxNyArMzQsNTYgQEAKICNkZWZpbmUgQ0lTQ09fS0VFUEFMSVZFX1JFUQkyCS8qIENpc2NvIGtlZXBhbGl2ZSByZXF1ZXN0ICovCiAKIAorc3RydWN0IGhkbGNfaGVhZGVyIHsKKwl1OCBhZGRyZXNzOworCXU4IGNvbnRyb2w7CisJdTE2IHByb3RvY29sOworfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworCitzdHJ1Y3QgY2lzY29fcGFja2V0IHsKKwl1MzIgdHlwZTsJCS8qIGNvZGUgKi8KKwl1MzIgcGFyMTsKKwl1MzIgcGFyMjsKKwl1MTYgcmVsOwkJLyogcmVsaWFiaWxpdHkgKi8KKwl1MzIgdGltZTsKK31fX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisjZGVmaW5lCUNJU0NPX1BBQ0tFVF9MRU4JMTgKKyNkZWZpbmUJQ0lTQ09fQklHX1BBQ0tFVF9MRU4JMjAKKworCitzdHJ1Y3QgY2lzY29fc3RhdGUgeworCWNpc2NvX3Byb3RvIHNldHRpbmdzOworCisJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CisJdW5zaWduZWQgbG9uZyBsYXN0X3BvbGw7CisJaW50IHVwOworCWludCByZXF1ZXN0X3NlbnQ7CisJdTMyIHR4c2VxOyAvKiBUWCBzZXF1ZW5jZSBudW1iZXIgKi8KKwl1MzIgcnhzZXE7IC8qIFJYIHNlcXVlbmNlIG51bWJlciAqLworfTsKKworCitzdGF0aWMgaW50IGNpc2NvX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjaXNjb19zdGF0ZSAqIHN0YXRlKGhkbGNfZGV2aWNlICpoZGxjKQoreworCXJldHVybihzdHJ1Y3QgY2lzY29fc3RhdGUgKikoaGRsYy0+c3RhdGUpOworfQorCisKIHN0YXRpYyBpbnQgY2lzY29faGFyZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgdTE2IHR5cGUsIHZvaWQgKmRhZGRyLCB2b2lkICpzYWRkciwKIAkJCSAgICAgdW5zaWduZWQgaW50IGxlbikKIHsKLQloZGxjX2hlYWRlciAqZGF0YTsKKwlzdHJ1Y3QgaGRsY19oZWFkZXIgKmRhdGE7CiAjaWZkZWYgREVCVUdfSEFSRF9IRUFERVIKIAlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGNpc2NvX2hhcmRfaGVhZGVyIGNhbGxlZFxuIiwgZGV2LT5uYW1lKTsKICNlbmRpZgogCi0Jc2tiX3B1c2goc2tiLCBzaXplb2YoaGRsY19oZWFkZXIpKTsKLQlkYXRhID0gKGhkbGNfaGVhZGVyKilza2ItPmRhdGE7CisJc2tiX3B1c2goc2tiLCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSk7CisJZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKIAlpZiAodHlwZSA9PSBDSVNDT19LRUVQQUxJVkUpCiAJCWRhdGEtPmFkZHJlc3MgPSBDSVNDT19NVUxUSUNBU1Q7CiAJZWxzZQpAQCAtNTIsNyArOTEsNyBAQAogCWRhdGEtPmNvbnRyb2wgPSAwOwogCWRhdGEtPnByb3RvY29sID0gaHRvbnModHlwZSk7CiAKLQlyZXR1cm4gc2l6ZW9mKGhkbGNfaGVhZGVyKTsKKwlyZXR1cm4gc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcik7CiB9CiAKIApAQCAtNjEsOSArMTAwLDEwIEBACiAJCQkJIHUzMiBwYXIxLCB1MzIgcGFyMikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotCWNpc2NvX3BhY2tldCAqZGF0YTsKKwlzdHJ1Y3QgY2lzY29fcGFja2V0ICpkYXRhOwogCi0Jc2tiID0gZGV2X2FsbG9jX3NrYihzaXplb2YoaGRsY19oZWFkZXIpICsgc2l6ZW9mKGNpc2NvX3BhY2tldCkpOworCXNrYiA9IGRldl9hbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikgKworCQkJICAgIHNpemVvZihzdHJ1Y3QgY2lzY29fcGFja2V0KSk7CiAJaWYgKCFza2IpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORwogCQkgICAgICAgIiVzOiBNZW1vcnkgc3F1ZWV6ZSBvbiBjaXNjb19rZWVwYWxpdmVfc2VuZCgpXG4iLApAQCAtNzIsNyArMTEyLDcgQEAKIAl9CiAJc2tiX3Jlc2VydmUoc2tiLCA0KTsKIAljaXNjb19oYXJkX2hlYWRlcihza2IsIGRldiwgQ0lTQ09fS0VFUEFMSVZFLCBOVUxMLCBOVUxMLCAwKTsKLQlkYXRhID0gKGNpc2NvX3BhY2tldCopKHNrYi0+ZGF0YSArIDQpOworCWRhdGEgPSAoc3RydWN0IGNpc2NvX3BhY2tldCopKHNrYi0+ZGF0YSArIDQpOwogCiAJZGF0YS0+dHlwZSA9IGh0b25sKHR5cGUpOwogCWRhdGEtPnBhcjEgPSBodG9ubChwYXIxKTsKQEAgLTgxLDcgKzEyMSw3IEBACiAJLyogd2Ugd2lsbCBuZWVkIGRvX2RpdiBoZXJlIGlmIDEwMDAgJSBIWiAhPSAwICovCiAJZGF0YS0+dGltZSA9IGh0b25sKChqaWZmaWVzIC0gSU5JVElBTF9KSUZGSUVTKSAqICgxMDAwIC8gSFopKTsKIAotCXNrYl9wdXQoc2tiLCBzaXplb2YoY2lzY29fcGFja2V0KSk7CisJc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgY2lzY29fcGFja2V0KSk7CiAJc2tiLT5wcmlvcml0eSA9IFRDX1BSSU9fQ09OVFJPTDsKIAlza2ItPmRldiA9IGRldjsKIAlza2ItPm5oLnJhdyA9IHNrYi0+ZGF0YTsKQEAgLTkzLDkgKzEzMyw5IEBACiAKIHN0YXRpYyBfX2JlMTYgY2lzY29fdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWhkbGNfaGVhZGVyICpkYXRhID0gKGhkbGNfaGVhZGVyKilza2ItPmRhdGE7CisJc3RydWN0IGhkbGNfaGVhZGVyICpkYXRhID0gKHN0cnVjdCBoZGxjX2hlYWRlciopc2tiLT5kYXRhOwogCi0JaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKGhkbGNfaGVhZGVyKSkKKwlpZiAoc2tiLT5sZW4gPCBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSkKIAkJcmV0dXJuIF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSERMQyk7CiAKIAlpZiAoZGF0YS0+YWRkcmVzcyAhPSBDSVNDT19NVUxUSUNBU1QgJiYKQEAgLTEwNiw3ICsxNDYsNyBAQAogCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CiAJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQWCk6CiAJY2FzZSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOgotCQlza2JfcHVsbChza2IsIHNpemVvZihoZGxjX2hlYWRlcikpOworCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaGRsY19oZWFkZXIpKTsKIAkJcmV0dXJuIGRhdGEtPnByb3RvY29sOwogCWRlZmF1bHQ6CiAJCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0hETEMpOwpAQCAtMTE4LDEyICsxNTgsMTIgQEAKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwotCWhkbGNfaGVhZGVyICpkYXRhID0gKGhkbGNfaGVhZGVyKilza2ItPmRhdGE7Ci0JY2lzY29fcGFja2V0ICpjaXNjb19kYXRhOworCXN0cnVjdCBoZGxjX2hlYWRlciAqZGF0YSA9IChzdHJ1Y3QgaGRsY19oZWFkZXIqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgY2lzY29fcGFja2V0ICpjaXNjb19kYXRhOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKLQl1MzIgYWRkciwgbWFzazsKKwlfX2JlMzIgYWRkciwgbWFzazsKIAotCWlmIChza2ItPmxlbiA8IHNpemVvZihoZGxjX2hlYWRlcikpCisJaWYgKHNrYi0+bGVuIDwgc2l6ZW9mKHN0cnVjdCBoZGxjX2hlYWRlcikpCiAJCWdvdG8gcnhfZXJyb3I7CiAKIAlpZiAoZGF0YS0+YWRkcmVzcyAhPSBDSVNDT19NVUxUSUNBU1QgJiYKQEAgLTEzNywxNSArMTc3LDE3IEBACiAJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKIAogCWNhc2UgQ0lTQ09fS0VFUEFMSVZFOgotCQlpZiAoc2tiLT5sZW4gIT0gc2l6ZW9mKGhkbGNfaGVhZGVyKSArIENJU0NPX1BBQ0tFVF9MRU4gJiYKLQkJICAgIHNrYi0+bGVuICE9IHNpemVvZihoZGxjX2hlYWRlcikgKyBDSVNDT19CSUdfUEFDS0VUX0xFTikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IEludmFsaWQgbGVuZ3RoIG9mIENpc2NvICIKLQkJCSAgICAgICAiY29udHJvbCBwYWNrZXQgKCVkIGJ5dGVzKVxuIiwKLQkJCSAgICAgICBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKKwkJaWYgKChza2ItPmxlbiAhPSBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSArCisJCSAgICAgQ0lTQ09fUEFDS0VUX0xFTikgJiYKKwkJICAgIChza2ItPmxlbiAhPSBzaXplb2Yoc3RydWN0IGhkbGNfaGVhZGVyKSArCisJCSAgICAgQ0lTQ09fQklHX1BBQ0tFVF9MRU4pKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogSW52YWxpZCBsZW5ndGggb2YgQ2lzY28gY29udHJvbCIKKwkJCSAgICAgICAiIHBhY2tldCAoJWQgYnl0ZXMpXG4iLCBkZXYtPm5hbWUsIHNrYi0+bGVuKTsKIAkJCWdvdG8gcnhfZXJyb3I7CiAJCX0KIAotCQljaXNjb19kYXRhID0gKGNpc2NvX3BhY2tldCopKHNrYi0+ZGF0YSArIHNpemVvZihoZGxjX2hlYWRlcikpOworCQljaXNjb19kYXRhID0gKHN0cnVjdCBjaXNjb19wYWNrZXQqKShza2ItPmRhdGEgKyBzaXplb2YKKwkJCQkJCSAgICAoc3RydWN0IGhkbGNfaGVhZGVyKSk7CiAKIAkJc3dpdGNoKG50b2hsIChjaXNjb19kYXRhLT50eXBlKSkgewogCQljYXNlIENJU0NPX0FERFJfUkVROiAvKiBTdG9sZW4gZnJvbSBzeW5jcHBwLmMgOi0pICovCkBAIC0xNzgsMTEgKzIyMCwxMSBAQAogCQkJZ290byByeF9lcnJvcjsKIAogCQljYXNlIENJU0NPX0tFRVBBTElWRV9SRVE6Ci0JCQloZGxjLT5zdGF0ZS5jaXNjby5yeHNlcSA9IG50b2hsKGNpc2NvX2RhdGEtPnBhcjEpOwotCQkJaWYgKGhkbGMtPnN0YXRlLmNpc2NvLnJlcXVlc3Rfc2VudCAmJgotCQkJICAgIG50b2hsKGNpc2NvX2RhdGEtPnBhcjIpPT1oZGxjLT5zdGF0ZS5jaXNjby50eHNlcSkgewotCQkJCWhkbGMtPnN0YXRlLmNpc2NvLmxhc3RfcG9sbCA9IGppZmZpZXM7Ci0JCQkJaWYgKCFoZGxjLT5zdGF0ZS5jaXNjby51cCkgeworCQkJc3RhdGUoaGRsYyktPnJ4c2VxID0gbnRvaGwoY2lzY29fZGF0YS0+cGFyMSk7CisJCQlpZiAoc3RhdGUoaGRsYyktPnJlcXVlc3Rfc2VudCAmJgorCQkJICAgIG50b2hsKGNpc2NvX2RhdGEtPnBhcjIpID09IHN0YXRlKGhkbGMpLT50eHNlcSkgeworCQkJCXN0YXRlKGhkbGMpLT5sYXN0X3BvbGwgPSBqaWZmaWVzOworCQkJCWlmICghc3RhdGUoaGRsYyktPnVwKSB7CiAJCQkJCXUzMiBzZWMsIG1pbiwgaHJzLCBkYXlzOwogCQkJCQlzZWMgPSBudG9obChjaXNjb19kYXRhLT50aW1lKSAvIDEwMDA7CiAJCQkJCW1pbiA9IHNlYyAvIDYwOyBzZWMgLT0gbWluICogNjA7CkBAIC0xOTMsNyArMjM1LDcgQEAKIAkJCQkJICAgICAgIGRldi0+bmFtZSwgZGF5cywgaHJzLAogCQkJCQkgICAgICAgbWluLCBzZWMpOwogCQkJCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwotCQkJCQloZGxjLT5zdGF0ZS5jaXNjby51cCA9IDE7CisJCQkJCXN0YXRlKGhkbGMpLT51cCA9IDE7CiAJCQkJfQogCQkJfQogCkBAIC0yMDgsNyArMjUwLDcgQEAKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiAKICByeF9lcnJvcjoKLQloZGxjLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogTWFyayBlcnJvciAqLworCWRldl90b19kZXNjKGRldiktPnN0YXRzLnJ4X2Vycm9ycysrOyAvKiBNYXJrIGVycm9yICovCiAJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAlyZXR1cm4gTkVUX1JYX0RST1A7CiB9CkBAIC0yMjAsMjMgKzI2MiwyMiBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhcmc7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCi0JaWYgKGhkbGMtPnN0YXRlLmNpc2NvLnVwICYmCi0JICAgIHRpbWVfYWZ0ZXIoamlmZmllcywgaGRsYy0+c3RhdGUuY2lzY28ubGFzdF9wb2xsICsKLQkJICAgICAgIGhkbGMtPnN0YXRlLmNpc2NvLnNldHRpbmdzLnRpbWVvdXQgKiBIWikpIHsKLQkJaGRsYy0+c3RhdGUuY2lzY28udXAgPSAwOworCWlmIChzdGF0ZShoZGxjKS0+dXAgJiYKKwkgICAgdGltZV9hZnRlcihqaWZmaWVzLCBzdGF0ZShoZGxjKS0+bGFzdF9wb2xsICsKKwkJICAgICAgIHN0YXRlKGhkbGMpLT5zZXR0aW5ncy50aW1lb3V0ICogSFopKSB7CisJCXN0YXRlKGhkbGMpLT51cCA9IDA7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBMaW5rIGRvd25cbiIsIGRldi0+bmFtZSk7CiAJCW5ldGlmX2Rvcm1hbnRfb24oZGV2KTsKIAl9CiAKLQljaXNjb19rZWVwYWxpdmVfc2VuZChkZXYsIENJU0NPX0tFRVBBTElWRV9SRVEsCi0JCQkgICAgICsraGRsYy0+c3RhdGUuY2lzY28udHhzZXEsCi0JCQkgICAgIGhkbGMtPnN0YXRlLmNpc2NvLnJ4c2VxKTsKLQloZGxjLT5zdGF0ZS5jaXNjby5yZXF1ZXN0X3NlbnQgPSAxOwotCWhkbGMtPnN0YXRlLmNpc2NvLnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKLQkJaGRsYy0+c3RhdGUuY2lzY28uc2V0dGluZ3MuaW50ZXJ2YWwgKiBIWjsKLQloZGxjLT5zdGF0ZS5jaXNjby50aW1lci5mdW5jdGlvbiA9IGNpc2NvX3RpbWVyOwotCWhkbGMtPnN0YXRlLmNpc2NvLnRpbWVyLmRhdGEgPSBhcmc7Ci0JYWRkX3RpbWVyKCZoZGxjLT5zdGF0ZS5jaXNjby50aW1lcik7CisJY2lzY29fa2VlcGFsaXZlX3NlbmQoZGV2LCBDSVNDT19LRUVQQUxJVkVfUkVRLCArK3N0YXRlKGhkbGMpLT50eHNlcSwKKwkJCSAgICAgc3RhdGUoaGRsYyktPnJ4c2VxKTsKKwlzdGF0ZShoZGxjKS0+cmVxdWVzdF9zZW50ID0gMTsKKwlzdGF0ZShoZGxjKS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCQlzdGF0ZShoZGxjKS0+c2V0dGluZ3MuaW50ZXJ2YWwgKiBIWjsKKwlzdGF0ZShoZGxjKS0+dGltZXIuZnVuY3Rpb24gPSBjaXNjb190aW1lcjsKKwlzdGF0ZShoZGxjKS0+dGltZXIuZGF0YSA9IGFyZzsKKwlhZGRfdGltZXIoJnN0YXRlKGhkbGMpLT50aW1lcik7CiB9CiAKIApAQCAtMjQ0LDE1ICsyODUsMTUgQEAKIHN0YXRpYyB2b2lkIGNpc2NvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwotCWhkbGMtPnN0YXRlLmNpc2NvLnVwID0gMDsKLQloZGxjLT5zdGF0ZS5jaXNjby5yZXF1ZXN0X3NlbnQgPSAwOwotCWhkbGMtPnN0YXRlLmNpc2NvLnR4c2VxID0gaGRsYy0+c3RhdGUuY2lzY28ucnhzZXEgPSAwOworCXN0YXRlKGhkbGMpLT51cCA9IDA7CisJc3RhdGUoaGRsYyktPnJlcXVlc3Rfc2VudCA9IDA7CisJc3RhdGUoaGRsYyktPnR4c2VxID0gc3RhdGUoaGRsYyktPnJ4c2VxID0gMDsKIAotCWluaXRfdGltZXIoJmhkbGMtPnN0YXRlLmNpc2NvLnRpbWVyKTsKLQloZGxjLT5zdGF0ZS5jaXNjby50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOyAvKkZpcnN0IHBvbGwgYWZ0ZXIgMXMqLwotCWhkbGMtPnN0YXRlLmNpc2NvLnRpbWVyLmZ1bmN0aW9uID0gY2lzY29fdGltZXI7Ci0JaGRsYy0+c3RhdGUuY2lzY28udGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQlhZGRfdGltZXIoJmhkbGMtPnN0YXRlLmNpc2NvLnRpbWVyKTsKKwlpbml0X3RpbWVyKCZzdGF0ZShoZGxjKS0+dGltZXIpOworCXN0YXRlKGhkbGMpLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOyAvKkZpcnN0IHBvbGwgYWZ0ZXIgMXMqLworCXN0YXRlKGhkbGMpLT50aW1lci5mdW5jdGlvbiA9IGNpc2NvX3RpbWVyOworCXN0YXRlKGhkbGMpLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCWFkZF90aW1lcigmc3RhdGUoaGRsYyktPnRpbWVyKTsKIH0KIAogCkBAIC0yNjAsMTUgKzMwMSwyNCBAQAogc3RhdGljIHZvaWQgY2lzY29fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlkZWxfdGltZXJfc3luYygmaGRsYy0+c3RhdGUuY2lzY28udGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZzdGF0ZShoZGxjKS0+dGltZXIpOwogCW5ldGlmX2Rvcm1hbnRfb24oZGV2KTsKLQloZGxjLT5zdGF0ZS5jaXNjby51cCA9IDA7Ci0JaGRsYy0+c3RhdGUuY2lzY28ucmVxdWVzdF9zZW50ID0gMDsKKwlzdGF0ZShoZGxjKS0+dXAgPSAwOworCXN0YXRlKGhkbGMpLT5yZXF1ZXN0X3NlbnQgPSAwOwogfQogCiAKIAotaW50IGhkbGNfY2lzY29faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCitzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gcHJvdG8gPSB7CisJLnN0YXJ0CQk9IGNpc2NvX3N0YXJ0LAorCS5zdG9wCQk9IGNpc2NvX3N0b3AsCisJLnR5cGVfdHJhbnMJPSBjaXNjb190eXBlX3RyYW5zLAorCS5pb2N0bAkJPSBjaXNjb19pb2N0bCwKKwkubW9kdWxlCQk9IFRISVNfTU9EVUxFLAorfTsKKyAKKyAKK3N0YXRpYyBpbnQgY2lzY29faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCiB7CiAJY2lzY29fcHJvdG8gX191c2VyICpjaXNjb19zID0gaWZyLT5pZnJfc2V0dGluZ3MuaWZzX2lmc3UuY2lzY287CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoY2lzY29fcHJvdG8pOwpAQCAtMjc4LDEyICszMjgsMTQgQEAKIAogCXN3aXRjaCAoaWZyLT5pZnJfc2V0dGluZ3MudHlwZSkgewogCWNhc2UgSUZfR0VUX1BST1RPOgorCQlpZiAoZGV2X3RvX2hkbGMoZGV2KS0+cHJvdG8gIT0gJnByb3RvKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmci0+aWZyX3NldHRpbmdzLnR5cGUgPSBJRl9QUk9UT19DSVNDTzsKIAkJaWYgKGlmci0+aWZyX3NldHRpbmdzLnNpemUgPCBzaXplKSB7CiAJCQlpZnItPmlmcl9zZXR0aW5ncy5zaXplID0gc2l6ZTsgLyogZGF0YSBzaXplIHdhbnRlZCAqLwogCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9Ci0JCWlmIChjb3B5X3RvX3VzZXIoY2lzY29fcywgJmhkbGMtPnN0YXRlLmNpc2NvLnNldHRpbmdzLCBzaXplKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihjaXNjb19zLCAmc3RhdGUoaGRsYyktPnNldHRpbmdzLCBzaXplKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCQlyZXR1cm4gMDsKIApAQCAtMzAyLDE5ICszNTQsMTUgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJCXJlc3VsdD1oZGxjLT5hdHRhY2goZGV2LCBFTkNPRElOR19OUlosUEFSSVRZX0NSQzE2X1BSMV9DQ0lUVCk7Ci0KIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAKLQkJaGRsY19wcm90b19kZXRhY2goaGRsYyk7Ci0JCW1lbWNweSgmaGRsYy0+c3RhdGUuY2lzY28uc2V0dGluZ3MsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQltZW1zZXQoJmhkbGMtPnByb3RvLCAwLCBzaXplb2YoaGRsYy0+cHJvdG8pKTsKKwkJcmVzdWx0ID0gYXR0YWNoX2hkbGNfcHJvdG9jb2woZGV2LCAmcHJvdG8sIGNpc2NvX3J4LAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IGNpc2NvX3N0YXRlKSk7CisJCWlmIChyZXN1bHQpCisJCQlyZXR1cm4gcmVzdWx0OwogCi0JCWhkbGMtPnByb3RvLnN0YXJ0ID0gY2lzY29fc3RhcnQ7Ci0JCWhkbGMtPnByb3RvLnN0b3AgPSBjaXNjb19zdG9wOwotCQloZGxjLT5wcm90by5uZXRpZl9yeCA9IGNpc2NvX3J4OwotCQloZGxjLT5wcm90by50eXBlX3RyYW5zID0gY2lzY29fdHlwZV90cmFuczsKLQkJaGRsYy0+cHJvdG8uaWQgPSBJRl9QUk9UT19DSVNDTzsKKwkJbWVtY3B5KCZzdGF0ZShoZGxjKS0+c2V0dGluZ3MsICZuZXdfc2V0dGluZ3MsIHNpemUpOwogCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IGhkbGMtPnhtaXQ7CiAJCWRldi0+aGFyZF9oZWFkZXIgPSBjaXNjb19oYXJkX2hlYWRlcjsKIAkJZGV2LT5oYXJkX2hlYWRlcl9jYWNoZSA9IE5VTEw7CkBAIC0zMjcsMyArMzc1LDI1IEBACiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworCitzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woJnByb3RvKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtb2RfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfaGRsY19wcm90b2NvbCgmcHJvdG8pOworfQorCisKK21vZHVsZV9pbml0KG1vZF9pbml0KTsKK21vZHVsZV9leGl0KG1vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ2lzY28gSERMQyBwcm90b2NvbCBzdXBwb3J0IGZvciBnZW5lcmljIEhETEMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19mci5jCmluZGV4IDdiYjczN2IuLmI0NWFiNjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX2ZyLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfZnIuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEdlbmVyaWMgSERMQyBzdXBwb3J0IHJvdXRpbmVzIGZvciBMaW51eAogICogRnJhbWUgUmVsYXkgc3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDUgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDYgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTUyLDYgKzUyLDggQEAKICN1bmRlZiBERUJVR19QS1QKICN1bmRlZiBERUJVR19FQ04KICN1bmRlZiBERUJVR19MSU5LCisjdW5kZWYgREVCVUdfUFJPVE8KKyN1bmRlZiBERUJVR19QVkMKIAogI2RlZmluZSBGUl9VSQkJCTB4MDMKICNkZWZpbmUgRlJfUEFECQkJMHgwMApAQCAtMTE1LDEzICsxMTcsNTMgQEAKIH1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgZnJfaGRyOwogCiAKK3R5cGVkZWYgc3RydWN0IHB2Y19kZXZpY2Vfc3RydWN0IHsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZnJhZDsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbWFpbjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZXI7CS8qIGJyaWRnZWQgRXRoZXJuZXQgaW50ZXJmYWNlCSovCisJc3RydWN0IHB2Y19kZXZpY2Vfc3RydWN0ICpuZXh0OwkvKiBTb3J0ZWQgaW4gYXNjZW5kaW5nIERMQ0kgb3JkZXIgKi8KKwlpbnQgZGxjaTsKKwlpbnQgb3Blbl9jb3VudDsKKworCXN0cnVjdCB7CisJCXVuc2lnbmVkIGludCBuZXc6IDE7CisJCXVuc2lnbmVkIGludCBhY3RpdmU6IDE7CisJCXVuc2lnbmVkIGludCBleGlzdDogMTsKKwkJdW5zaWduZWQgaW50IGRlbGV0ZWQ6IDE7CisJCXVuc2lnbmVkIGludCBmZWNuOiAxOworCQl1bnNpZ25lZCBpbnQgYmVjbjogMTsKKwkJdW5zaWduZWQgaW50IGJhbmR3aWR0aDsJLyogQ2lzY28gTE1JIHJlcG9ydGluZyBvbmx5ICovCisJfXN0YXRlOworfXB2Y19kZXZpY2U7CisKKworc3RydWN0IGZyYWRfc3RhdGUgeworCWZyX3Byb3RvIHNldHRpbmdzOworCXB2Y19kZXZpY2UgKmZpcnN0X3B2YzsKKwlpbnQgZGNlX3B2Y19jb3VudDsKKworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOworCWludCByZWxpYWJsZTsKKwlpbnQgZGNlX2NoYW5nZWQ7CisJaW50IHJlcXVlc3Q7CisJaW50IGZ1bGxyZXBfc2VudDsKKwl1MzIgbGFzdF9lcnJvcnM7IC8qIGxhc3QgZXJyb3JzIGJpdCBsaXN0ICovCisJdTggbjM5MWNudDsKKwl1OCB0eHNlcTsgLyogVFggc2VxdWVuY2UgbnVtYmVyICovCisJdTggcnhzZXE7IC8qIFJYIHNlcXVlbmNlIG51bWJlciAqLworfTsKKworCitzdGF0aWMgaW50IGZyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKworCiBzdGF0aWMgaW5saW5lIHUxNiBxOTIyX3RvX2RsY2kodTggKmhkcikKIHsKIAlyZXR1cm4gKChoZHJbMF0gJiAweEZDKSA8PCAyKSB8ICgoaGRyWzFdICYgMHhGMCkgPj4gNCk7CiB9CiAKIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgZGxjaV90b19xOTIyKHU4ICpoZHIsIHUxNiBkbGNpKQogewogCWhkclswXSA9IChkbGNpID4+IDIpICYgMHhGQzsKQEAgLTEyOSwxMCArMTcxLDIxIEBACiB9CiAKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZnJhZF9zdGF0ZSAqIHN0YXRlKGhkbGNfZGV2aWNlICpoZGxjKQoreworCXJldHVybihzdHJ1Y3QgZnJhZF9zdGF0ZSAqKShoZGxjLT5zdGF0ZSk7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gcHZjX2RldmljZSogZGV2X3RvX3B2YyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoreworCXJldHVybiBkZXYtPnByaXY7Cit9CisKIAogc3RhdGljIGlubGluZSBwdmNfZGV2aWNlKiBmaW5kX3B2YyhoZGxjX2RldmljZSAqaGRsYywgdTE2IGRsY2kpCiB7Ci0JcHZjX2RldmljZSAqcHZjID0gaGRsYy0+c3RhdGUuZnIuZmlyc3RfcHZjOworCXB2Y19kZXZpY2UgKnB2YyA9IHN0YXRlKGhkbGMpLT5maXJzdF9wdmM7CiAKIAl3aGlsZSAocHZjKSB7CiAJCWlmIChwdmMtPmRsY2kgPT0gZGxjaSkKQEAgLTE0NiwxMCArMTk5LDEwIEBACiB9CiAKIAotc3RhdGljIGlubGluZSBwdmNfZGV2aWNlKiBhZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBkbGNpKQorc3RhdGljIHB2Y19kZXZpY2UqIGFkZF9wdmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IGRsY2kpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwotCXB2Y19kZXZpY2UgKnB2YywgKipwdmNfcCA9ICZoZGxjLT5zdGF0ZS5mci5maXJzdF9wdmM7CisJcHZjX2RldmljZSAqcHZjLCAqKnB2Y19wID0gJnN0YXRlKGhkbGMpLT5maXJzdF9wdmM7CiAKIAl3aGlsZSAoKnB2Y19wKSB7CiAJCWlmICgoKnB2Y19wKS0+ZGxjaSA9PSBkbGNpKQpAQCAtMTYwLDEyICsyMTMsMTUgQEAKIAl9CiAKIAlwdmMgPSBrbWFsbG9jKHNpemVvZihwdmNfZGV2aWNlKSwgR0ZQX0FUT01JQyk7CisjaWZkZWYgREVCVUdfUFZDCisJcHJpbnRrKEtFUk5fREVCVUcgImFkZF9wdmM6IGFsbG9jYXRlZCBwdmMgJXAsIGZyYWQgJXBcbiIsIHB2YywgZGV2KTsKKyNlbmRpZgogCWlmICghcHZjKQogCQlyZXR1cm4gTlVMTDsKIAogCW1lbXNldChwdmMsIDAsIHNpemVvZihwdmNfZGV2aWNlKSk7CiAJcHZjLT5kbGNpID0gZGxjaTsKLQlwdmMtPm1hc3RlciA9IGRldjsKKwlwdmMtPmZyYWQgPSBkZXY7CiAJcHZjLT5uZXh0ID0gKnB2Y19wOwkvKiBQdXQgaXQgaW4gdGhlIGNoYWluICovCiAJKnB2Y19wID0gcHZjOwogCXJldHVybiBwdmM7CkBAIC0xNzQsNyArMjMwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQgcHZjX2lzX3VzZWQocHZjX2RldmljZSAqcHZjKQogewotCXJldHVybiBwdmMtPm1haW4gIT0gTlVMTCB8fCBwdmMtPmV0aGVyICE9IE5VTEw7CisJcmV0dXJuIHB2Yy0+bWFpbiB8fCBwdmMtPmV0aGVyOwogfQogCiAKQEAgLTIwMCwxMSArMjU2LDE0IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWxldGVfdW51c2VkX3B2Y3MoaGRsY19kZXZpY2UgKmhkbGMpCiB7Ci0JcHZjX2RldmljZSAqKnB2Y19wID0gJmhkbGMtPnN0YXRlLmZyLmZpcnN0X3B2YzsKKwlwdmNfZGV2aWNlICoqcHZjX3AgPSAmc3RhdGUoaGRsYyktPmZpcnN0X3B2YzsKIAogCXdoaWxlICgqcHZjX3ApIHsKIAkJaWYgKCFwdmNfaXNfdXNlZCgqcHZjX3ApKSB7CiAJCQlwdmNfZGV2aWNlICpwdmMgPSAqcHZjX3A7CisjaWZkZWYgREVCVUdfUFZDCisJCQlwcmludGsoS0VSTl9ERUJVRyAiZnJlZWluZyB1bnVzZWQgcHZjOiAlcFxuIiwgcHZjKTsKKyNlbmRpZgogCQkJKnB2Y19wID0gcHZjLT5uZXh0OwogCQkJa2ZyZWUocHZjKTsKIAkJCWNvbnRpbnVlOwpAQCAtMjk1LDE2ICszNTQsMTYgQEAKIHsKIAlwdmNfZGV2aWNlICpwdmMgPSBkZXZfdG9fcHZjKGRldik7CiAKLQlpZiAoKHB2Yy0+bWFzdGVyLT5mbGFncyAmIElGRl9VUCkgPT0gMCkKLQkJcmV0dXJuIC1FSU87ICAvKiBNYXN0ZXIgbXVzdCBiZSBVUCBpbiBvcmRlciB0byBhY3RpdmF0ZSBQVkMgKi8KKwlpZiAoKHB2Yy0+ZnJhZC0+ZmxhZ3MgJiBJRkZfVVApID09IDApCisJCXJldHVybiAtRUlPOyAgLyogRnJhZCBtdXN0IGJlIFVQIGluIG9yZGVyIHRvIGFjdGl2YXRlIFBWQyAqLwogCiAJaWYgKHB2Yy0+b3Blbl9jb3VudCsrID09IDApIHsKLQkJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhwdmMtPm1hc3Rlcik7Ci0JCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5sbWkgPT0gTE1JX05PTkUpCi0JCQlwdmMtPnN0YXRlLmFjdGl2ZSA9IG5ldGlmX2NhcnJpZXJfb2socHZjLT5tYXN0ZXIpOworCQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKHB2Yy0+ZnJhZCk7CisJCWlmIChzdGF0ZShoZGxjKS0+c2V0dGluZ3MubG1pID09IExNSV9OT05FKQorCQkJcHZjLT5zdGF0ZS5hY3RpdmUgPSBuZXRpZl9jYXJyaWVyX29rKHB2Yy0+ZnJhZCk7CiAKIAkJcHZjX2NhcnJpZXIocHZjLT5zdGF0ZS5hY3RpdmUsIHB2Yyk7Ci0JCWhkbGMtPnN0YXRlLmZyLmRjZV9jaGFuZ2VkID0gMTsKKwkJc3RhdGUoaGRsYyktPmRjZV9jaGFuZ2VkID0gMTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0zMTYsMTIgKzM3NSwxMiBAQAogCXB2Y19kZXZpY2UgKnB2YyA9IGRldl90b19wdmMoZGV2KTsKIAogCWlmICgtLXB2Yy0+b3Blbl9jb3VudCA9PSAwKSB7Ci0JCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMocHZjLT5tYXN0ZXIpOwotCQlpZiAoaGRsYy0+c3RhdGUuZnIuc2V0dGluZ3MubG1pID09IExNSV9OT05FKQorCQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKHB2Yy0+ZnJhZCk7CisJCWlmIChzdGF0ZShoZGxjKS0+c2V0dGluZ3MubG1pID09IExNSV9OT05FKQogCQkJcHZjLT5zdGF0ZS5hY3RpdmUgPSAwOwogCi0JCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5kY2UpIHsKLQkJCWhkbGMtPnN0YXRlLmZyLmRjZV9jaGFuZ2VkID0gMTsKKwkJaWYgKHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5kY2UpIHsKKwkJCXN0YXRlKGhkbGMpLT5kY2VfY2hhbmdlZCA9IDE7CiAJCQlwdmMtPnN0YXRlLmFjdGl2ZSA9IDA7CiAJCX0KIAl9CkBAIC0zNDgsNyArNDA3LDcgQEAKIAkJfQogCiAJCWluZm8uZGxjaSA9IHB2Yy0+ZGxjaTsKLQkJbWVtY3B5KGluZm8ubWFzdGVyLCBwdmMtPm1hc3Rlci0+bmFtZSwgSUZOQU1TSVopOworCQltZW1jcHkoaW5mby5tYXN0ZXIsIHB2Yy0+ZnJhZC0+bmFtZSwgSUZOQU1TSVopOwogCQlpZiAoY29weV90b191c2VyKGlmci0+aWZyX3NldHRpbmdzLmlmc19pZnN1LmZyX3B2Y19pbmZvLAogCQkJCSAmaW5mbywgc2l6ZW9mKGluZm8pKSkKIAkJCXJldHVybiAtRUZBVUxUOwpAQCAtMzYxLDcgKzQyMCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnB2Y19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKKwlyZXR1cm4gJmRldl90b19kZXNjKGRldiktPnN0YXRzOwogfQogCiAKQEAgLTM5Myw3ICs0NTIsNyBAQAogCQkJc3RhdHMtPnR4X3BhY2tldHMrKzsKIAkJCWlmIChwdmMtPnN0YXRlLmZlY24pIC8qIFRYIENvbmdlc3Rpb24gY291bnRlciAqLwogCQkJCXN0YXRzLT50eF9jb21wcmVzc2VkKys7Ci0JCQlza2ItPmRldiA9IHB2Yy0+bWFzdGVyOworCQkJc2tiLT5kZXYgPSBwdmMtPmZyYWQ7CiAJCQlkZXZfcXVldWVfeG1pdChza2IpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTQxOSw3ICs0NzgsNyBAQAogc3RhdGljIGlubGluZSB2b2lkIGZyX2xvZ19kbGNpX2FjdGl2ZShwdmNfZGV2aWNlICpwdmMpCiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERMQ0kgJWQgWyVzJXMlc10lcyAlc1xuIiwKLQkgICAgICAgcHZjLT5tYXN0ZXItPm5hbWUsCisJICAgICAgIHB2Yy0+ZnJhZC0+bmFtZSwKIAkgICAgICAgcHZjLT5kbGNpLAogCSAgICAgICBwdmMtPm1haW4gPyBwdmMtPm1haW4tPm5hbWUgOiAiIiwKIAkgICAgICAgcHZjLT5tYWluICYmIHB2Yy0+ZXRoZXIgPyAiICIgOiAiIiwKQEAgLTQzOCwyMSArNDk3LDIwIEBACiB9CiAKIAotCiBzdGF0aWMgdm9pZCBmcl9sbWlfc2VuZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZnVsbHJlcCkKIHsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKLQlwdmNfZGV2aWNlICpwdmMgPSBoZGxjLT5zdGF0ZS5mci5maXJzdF9wdmM7Ci0JaW50IGxtaSA9IGhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLmxtaTsKLQlpbnQgZGNlID0gaGRsYy0+c3RhdGUuZnIuc2V0dGluZ3MuZGNlOworCXB2Y19kZXZpY2UgKnB2YyA9IHN0YXRlKGhkbGMpLT5maXJzdF9wdmM7CisJaW50IGxtaSA9IHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWk7CisJaW50IGRjZSA9IHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5kY2U7CiAJaW50IGxlbiA9IGxtaSA9PSBMTUlfQU5TSSA/IExNSV9BTlNJX0xFTkdUSCA6IExNSV9DQ0lUVF9DSVNDT19MRU5HVEg7CiAJaW50IHN0YXRfbGVuID0gKGxtaSA9PSBMTUlfQ0lTQ08pID8gNiA6IDM7CiAJdTggKmRhdGE7CiAJaW50IGkgPSAwOwogCiAJaWYgKGRjZSAmJiBmdWxscmVwKSB7Ci0JCWxlbiArPSBoZGxjLT5zdGF0ZS5mci5kY2VfcHZjX2NvdW50ICogKDIgKyBzdGF0X2xlbik7CisJCWxlbiArPSBzdGF0ZShoZGxjKS0+ZGNlX3B2Y19jb3VudCAqICgyICsgc3RhdF9sZW4pOwogCQlpZiAobGVuID4gSERMQ19NQVhfTVJVKSB7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogVG9vIG1hbnkgUFZDcyB3aGlsZSBzZW5kaW5nICIKIAkJCSAgICAgICAiTE1JIGZ1bGwgcmVwb3J0XG4iLCBkZXYtPm5hbWUpOwpAQCAtNDg2LDggKzU0NCw5IEBACiAJZGF0YVtpKytdID0gZnVsbHJlcCA/IExNSV9GVUxMUkVQIDogTE1JX0lOVEVHUklUWTsKIAlkYXRhW2krK10gPSBsbWkgPT0gTE1JX0NDSVRUID8gTE1JX0NDSVRUX0FMSVZFIDogTE1JX0FOU0lfQ0lTQ09fQUxJVkU7CiAJZGF0YVtpKytdID0gTE1JX0lOVEVHX0xFTjsKLQlkYXRhW2krK10gPSBoZGxjLT5zdGF0ZS5mci50eHNlcSA9ZnJfbG1pX25leHRzZXEoaGRsYy0+c3RhdGUuZnIudHhzZXEpOwotCWRhdGFbaSsrXSA9IGhkbGMtPnN0YXRlLmZyLnJ4c2VxOworCWRhdGFbaSsrXSA9IHN0YXRlKGhkbGMpLT50eHNlcSA9CisJCWZyX2xtaV9uZXh0c2VxKHN0YXRlKGhkbGMpLT50eHNlcSk7CisJZGF0YVtpKytdID0gc3RhdGUoaGRsYyktPnJ4c2VxOwogCiAJaWYgKGRjZSAmJiBmdWxscmVwKSB7CiAJCXdoaWxlIChwdmMpIHsKQEAgLTQ5Niw3ICs1NTUsNyBAQAogCQkJZGF0YVtpKytdID0gc3RhdF9sZW47CiAKIAkJCS8qIExNSSBzdGFydC9yZXN0YXJ0ICovCi0JCQlpZiAoaGRsYy0+c3RhdGUuZnIucmVsaWFibGUgJiYgIXB2Yy0+c3RhdGUuZXhpc3QpIHsKKwkJCWlmIChzdGF0ZShoZGxjKS0+cmVsaWFibGUgJiYgIXB2Yy0+c3RhdGUuZXhpc3QpIHsKIAkJCQlwdmMtPnN0YXRlLmV4aXN0ID0gcHZjLT5zdGF0ZS5uZXcgPSAxOwogCQkJCWZyX2xvZ19kbGNpX2FjdGl2ZShwdmMpOwogCQkJfQpAQCAtNTQxLDE1ICs2MDAsMTUgQEAKIHN0YXRpYyB2b2lkIGZyX3NldF9saW5rX3N0YXRlKGludCByZWxpYWJsZSwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7Ci0JcHZjX2RldmljZSAqcHZjID0gaGRsYy0+c3RhdGUuZnIuZmlyc3RfcHZjOworCXB2Y19kZXZpY2UgKnB2YyA9IHN0YXRlKGhkbGMpLT5maXJzdF9wdmM7CiAKLQloZGxjLT5zdGF0ZS5mci5yZWxpYWJsZSA9IHJlbGlhYmxlOworCXN0YXRlKGhkbGMpLT5yZWxpYWJsZSA9IHJlbGlhYmxlOwogCWlmIChyZWxpYWJsZSkgewogCQluZXRpZl9kb3JtYW50X29mZihkZXYpOwotCQloZGxjLT5zdGF0ZS5mci5uMzkxY250ID0gMDsgLyogUmVxdWVzdCBmdWxsIHN0YXR1cyAqLwotCQloZGxjLT5zdGF0ZS5mci5kY2VfY2hhbmdlZCA9IDE7CisJCXN0YXRlKGhkbGMpLT5uMzkxY250ID0gMDsgLyogUmVxdWVzdCBmdWxsIHN0YXR1cyAqLworCQlzdGF0ZShoZGxjKS0+ZGNlX2NoYW5nZWQgPSAxOwogCi0JCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5sbWkgPT0gTE1JX05PTkUpIHsKKwkJaWYgKHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWkgPT0gTE1JX05PTkUpIHsKIAkJCXdoaWxlIChwdmMpIHsJLyogQWN0aXZhdGUgYWxsIFBWQ3MgKi8KIAkJCQlwdmNfY2FycmllcigxLCBwdmMpOwogCQkJCXB2Yy0+c3RhdGUuZXhpc3QgPSBwdmMtPnN0YXRlLmFjdGl2ZSA9IDE7CkBAIC01NjMsNyArNjIyLDcgQEAKIAkJCXB2Y19jYXJyaWVyKDAsIHB2Yyk7CiAJCQlwdmMtPnN0YXRlLmV4aXN0ID0gcHZjLT5zdGF0ZS5hY3RpdmUgPSAwOwogCQkJcHZjLT5zdGF0ZS5uZXcgPSAwOwotCQkJaWYgKCFoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5kY2UpCisJCQlpZiAoIXN0YXRlKGhkbGMpLT5zZXR0aW5ncy5kY2UpCiAJCQkJcHZjLT5zdGF0ZS5iYW5kd2lkdGggPSAwOwogCQkJcHZjID0gcHZjLT5uZXh0OwogCQl9CkBAIC01NzEsNyArNjMwLDYgQEAKIH0KIAogCi0KIHN0YXRpYyB2b2lkIGZyX3RpbWVyKHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKilhcmc7CkBAIC01NzksNjIgKzYzNyw2MSBAQAogCWludCBpLCBjbnQgPSAwLCByZWxpYWJsZTsKIAl1MzIgbGlzdDsKIAotCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5kY2UpIHsKLQkJcmVsaWFibGUgPSBoZGxjLT5zdGF0ZS5mci5yZXF1ZXN0ICYmCi0JCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBoZGxjLT5zdGF0ZS5mci5sYXN0X3BvbGwgKwotCQkJCSAgICBoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy50MzkyICogSFopOwotCQloZGxjLT5zdGF0ZS5mci5yZXF1ZXN0ID0gMDsKKwlpZiAoc3RhdGUoaGRsYyktPnNldHRpbmdzLmRjZSkgeworCQlyZWxpYWJsZSA9IHN0YXRlKGhkbGMpLT5yZXF1ZXN0ICYmCisJCQl0aW1lX2JlZm9yZShqaWZmaWVzLCBzdGF0ZShoZGxjKS0+bGFzdF9wb2xsICsKKwkJCQkgICAgc3RhdGUoaGRsYyktPnNldHRpbmdzLnQzOTIgKiBIWik7CisJCXN0YXRlKGhkbGMpLT5yZXF1ZXN0ID0gMDsKIAl9IGVsc2UgewotCQloZGxjLT5zdGF0ZS5mci5sYXN0X2Vycm9ycyA8PD0gMTsgLyogU2hpZnQgdGhlIGxpc3QgKi8KLQkJaWYgKGhkbGMtPnN0YXRlLmZyLnJlcXVlc3QpIHsKLQkJCWlmIChoZGxjLT5zdGF0ZS5mci5yZWxpYWJsZSkKKwkJc3RhdGUoaGRsYyktPmxhc3RfZXJyb3JzIDw8PSAxOyAvKiBTaGlmdCB0aGUgbGlzdCAqLworCQlpZiAoc3RhdGUoaGRsYyktPnJlcXVlc3QpIHsKKwkJCWlmIChzdGF0ZShoZGxjKS0+cmVsaWFibGUpCiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE5vIExNSSBzdGF0dXMgcmVwbHkgIgogCQkJCSAgICAgICAicmVjZWl2ZWRcbiIsIGRldi0+bmFtZSk7Ci0JCQloZGxjLT5zdGF0ZS5mci5sYXN0X2Vycm9ycyB8PSAxOworCQkJc3RhdGUoaGRsYyktPmxhc3RfZXJyb3JzIHw9IDE7CiAJCX0KIAotCQlsaXN0ID0gaGRsYy0+c3RhdGUuZnIubGFzdF9lcnJvcnM7Ci0JCWZvciAoaSA9IDA7IGkgPCBoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5uMzkzOyBpKyssIGxpc3QgPj49IDEpCisJCWxpc3QgPSBzdGF0ZShoZGxjKS0+bGFzdF9lcnJvcnM7CisJCWZvciAoaSA9IDA7IGkgPCBzdGF0ZShoZGxjKS0+c2V0dGluZ3MubjM5MzsgaSsrLCBsaXN0ID4+PSAxKQogCQkJY250ICs9IChsaXN0ICYgMSk7CS8qIGVycm9ycyBjb3VudCAqLwogCi0JCXJlbGlhYmxlID0gKGNudCA8IGhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLm4zOTIpOworCQlyZWxpYWJsZSA9IChjbnQgPCBzdGF0ZShoZGxjKS0+c2V0dGluZ3MubjM5Mik7CiAJfQogCi0JaWYgKGhkbGMtPnN0YXRlLmZyLnJlbGlhYmxlICE9IHJlbGlhYmxlKSB7CisJaWYgKHN0YXRlKGhkbGMpLT5yZWxpYWJsZSAhPSByZWxpYWJsZSkgewogCQlwcmludGsoS0VSTl9JTkZPICIlczogTGluayAlc3JlbGlhYmxlXG4iLCBkZXYtPm5hbWUsCiAJCSAgICAgICByZWxpYWJsZSA/ICIiIDogInVuIik7CiAJCWZyX3NldF9saW5rX3N0YXRlKHJlbGlhYmxlLCBkZXYpOwogCX0KIAotCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5kY2UpCi0JCWhkbGMtPnN0YXRlLmZyLnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKLQkJCWhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLnQzOTIgKiBIWjsKKwlpZiAoc3RhdGUoaGRsYyktPnNldHRpbmdzLmRjZSkKKwkJc3RhdGUoaGRsYyktPnRpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsKKwkJCXN0YXRlKGhkbGMpLT5zZXR0aW5ncy50MzkyICogSFo7CiAJZWxzZSB7Ci0JCWlmIChoZGxjLT5zdGF0ZS5mci5uMzkxY250KQotCQkJaGRsYy0+c3RhdGUuZnIubjM5MWNudC0tOworCQlpZiAoc3RhdGUoaGRsYyktPm4zOTFjbnQpCisJCQlzdGF0ZShoZGxjKS0+bjM5MWNudC0tOwogCi0JCWZyX2xtaV9zZW5kKGRldiwgaGRsYy0+c3RhdGUuZnIubjM5MWNudCA9PSAwKTsKKwkJZnJfbG1pX3NlbmQoZGV2LCBzdGF0ZShoZGxjKS0+bjM5MWNudCA9PSAwKTsKIAotCQloZGxjLT5zdGF0ZS5mci5sYXN0X3BvbGwgPSBqaWZmaWVzOwotCQloZGxjLT5zdGF0ZS5mci5yZXF1ZXN0ID0gMTsKLQkJaGRsYy0+c3RhdGUuZnIudGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKwotCQkJaGRsYy0+c3RhdGUuZnIuc2V0dGluZ3MudDM5MSAqIEhaOworCQlzdGF0ZShoZGxjKS0+bGFzdF9wb2xsID0gamlmZmllczsKKwkJc3RhdGUoaGRsYyktPnJlcXVlc3QgPSAxOworCQlzdGF0ZShoZGxjKS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKworCQkJc3RhdGUoaGRsYyktPnNldHRpbmdzLnQzOTEgKiBIWjsKIAl9CiAKLQloZGxjLT5zdGF0ZS5mci50aW1lci5mdW5jdGlvbiA9IGZyX3RpbWVyOwotCWhkbGMtPnN0YXRlLmZyLnRpbWVyLmRhdGEgPSBhcmc7Ci0JYWRkX3RpbWVyKCZoZGxjLT5zdGF0ZS5mci50aW1lcik7CisJc3RhdGUoaGRsYyktPnRpbWVyLmZ1bmN0aW9uID0gZnJfdGltZXI7CisJc3RhdGUoaGRsYyktPnRpbWVyLmRhdGEgPSBhcmc7CisJYWRkX3RpbWVyKCZzdGF0ZShoZGxjKS0+dGltZXIpOwogfQogCiAKLQogc3RhdGljIGludCBmcl9sbWlfcmVjdihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAlwdmNfZGV2aWNlICpwdmM7CiAJdTggcnhzZXEsIHR4c2VxOwotCWludCBsbWkgPSBoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5sbWk7Ci0JaW50IGRjZSA9IGhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLmRjZTsKKwlpbnQgbG1pID0gc3RhdGUoaGRsYyktPnNldHRpbmdzLmxtaTsKKwlpbnQgZGNlID0gc3RhdGUoaGRsYyktPnNldHRpbmdzLmRjZTsKIAlpbnQgc3RhdF9sZW4gPSAobG1pID09IExNSV9DSVNDTykgPyA2IDogMywgcmVwdHlwZSwgZXJyb3IsIG5vX3JhbSwgaTsKIAogCWlmIChza2ItPmxlbiA8IChsbWkgPT0gTE1JX0FOU0kgPyBMTUlfQU5TSV9MRU5HVEggOgpAQCAtNjQ1LDggKzcwMiw4IEBACiAKIAlpZiAoc2tiLT5kYXRhWzNdICE9IChsbWkgPT0gTE1JX0NJU0NPID8gTkxQSURfQ0lTQ09fTE1JIDoKIAkJCSAgICAgTkxQSURfQ0NJVFRfQU5TSV9MTUkpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOiBSZWNlaXZlZCBub24tTE1JIGZyYW1lIHdpdGggTE1JIgotCQkgICAgICAgIiBETENJXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogUmVjZWl2ZWQgbm9uLUxNSSBmcmFtZSB3aXRoIExNSSBETENJXG4iLAorCQkgICAgICAgZGV2LT5uYW1lKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC03MDYsNTMgKzc2Myw1MyBAQAogCX0KIAlpKys7CiAKLQloZGxjLT5zdGF0ZS5mci5yeHNlcSA9IHNrYi0+ZGF0YVtpKytdOyAvKiBUWCBzZXF1ZW5jZSBmcm9tIHBlZXIgKi8KKwlzdGF0ZShoZGxjKS0+cnhzZXEgPSBza2ItPmRhdGFbaSsrXTsgLyogVFggc2VxdWVuY2UgZnJvbSBwZWVyICovCiAJcnhzZXEgPSBza2ItPmRhdGFbaSsrXTsJLyogU2hvdWxkIGNvbmZpcm0gb3VyIHNlcXVlbmNlICovCiAKLQl0eHNlcSA9IGhkbGMtPnN0YXRlLmZyLnR4c2VxOworCXR4c2VxID0gc3RhdGUoaGRsYyktPnR4c2VxOwogCiAJaWYgKGRjZSkKLQkJaGRsYy0+c3RhdGUuZnIubGFzdF9wb2xsID0gamlmZmllczsKKwkJc3RhdGUoaGRsYyktPmxhc3RfcG9sbCA9IGppZmZpZXM7CiAKIAllcnJvciA9IDA7Ci0JaWYgKCFoZGxjLT5zdGF0ZS5mci5yZWxpYWJsZSkKKwlpZiAoIXN0YXRlKGhkbGMpLT5yZWxpYWJsZSkKIAkJZXJyb3IgPSAxOwogCi0JaWYgKHJ4c2VxID09IDAgfHwgcnhzZXEgIT0gdHhzZXEpIHsKLQkJaGRsYy0+c3RhdGUuZnIubjM5MWNudCA9IDA7IC8qIEFzayBmb3IgZnVsbCByZXBvcnQgbmV4dCB0aW1lICovCisJaWYgKHJ4c2VxID09IDAgfHwgcnhzZXEgIT0gdHhzZXEpIHsgLyogQXNrIGZvciBmdWxsIHJlcG9ydCBuZXh0IHRpbWUgKi8KKwkJc3RhdGUoaGRsYyktPm4zOTFjbnQgPSAwOwogCQllcnJvciA9IDE7CiAJfQogCiAJaWYgKGRjZSkgewotCQlpZiAoaGRsYy0+c3RhdGUuZnIuZnVsbHJlcF9zZW50ICYmICFlcnJvcikgeworCQlpZiAoc3RhdGUoaGRsYyktPmZ1bGxyZXBfc2VudCAmJiAhZXJyb3IpIHsKIC8qIFN0b3Agc2VuZGluZyBmdWxsIHJlcG9ydCAtIHRoZSBsYXN0IG9uZSBoYXMgYmVlbiBjb25maXJtZWQgYnkgRFRFICovCi0JCQloZGxjLT5zdGF0ZS5mci5mdWxscmVwX3NlbnQgPSAwOwotCQkJcHZjID0gaGRsYy0+c3RhdGUuZnIuZmlyc3RfcHZjOworCQkJc3RhdGUoaGRsYyktPmZ1bGxyZXBfc2VudCA9IDA7CisJCQlwdmMgPSBzdGF0ZShoZGxjKS0+Zmlyc3RfcHZjOwogCQkJd2hpbGUgKHB2YykgewogCQkJCWlmIChwdmMtPnN0YXRlLm5ldykgewogCQkJCQlwdmMtPnN0YXRlLm5ldyA9IDA7CiAKIC8qIFRlbGwgRFRFIHRoYXQgbmV3IFBWQyBpcyBub3cgYWN0aXZlICovCi0JCQkJCWhkbGMtPnN0YXRlLmZyLmRjZV9jaGFuZ2VkID0gMTsKKwkJCQkJc3RhdGUoaGRsYyktPmRjZV9jaGFuZ2VkID0gMTsKIAkJCQl9CiAJCQkJcHZjID0gcHZjLT5uZXh0OwogCQkJfQogCQl9CiAKLQkJaWYgKGhkbGMtPnN0YXRlLmZyLmRjZV9jaGFuZ2VkKSB7CisJCWlmIChzdGF0ZShoZGxjKS0+ZGNlX2NoYW5nZWQpIHsKIAkJCXJlcHR5cGUgPSBMTUlfRlVMTFJFUDsKLQkJCWhkbGMtPnN0YXRlLmZyLmZ1bGxyZXBfc2VudCA9IDE7Ci0JCQloZGxjLT5zdGF0ZS5mci5kY2VfY2hhbmdlZCA9IDA7CisJCQlzdGF0ZShoZGxjKS0+ZnVsbHJlcF9zZW50ID0gMTsKKwkJCXN0YXRlKGhkbGMpLT5kY2VfY2hhbmdlZCA9IDA7CiAJCX0KIAotCQloZGxjLT5zdGF0ZS5mci5yZXF1ZXN0ID0gMTsgLyogZ290IHJlcXVlc3QgKi8KKwkJc3RhdGUoaGRsYyktPnJlcXVlc3QgPSAxOyAvKiBnb3QgcmVxdWVzdCAqLwogCQlmcl9sbWlfc2VuZChkZXYsIHJlcHR5cGUgPT0gTE1JX0ZVTExSRVAgPyAxIDogMCk7CiAJCXJldHVybiAwOwogCX0KIAogCS8qIERURSAqLwogCi0JaGRsYy0+c3RhdGUuZnIucmVxdWVzdCA9IDA7IC8qIGdvdCByZXNwb25zZSwgbm8gcmVxdWVzdCBwZW5kaW5nICovCisJc3RhdGUoaGRsYyktPnJlcXVlc3QgPSAwOyAvKiBnb3QgcmVzcG9uc2UsIG5vIHJlcXVlc3QgcGVuZGluZyAqLwogCiAJaWYgKGVycm9yKQogCQlyZXR1cm4gMDsKQEAgLTc2MCw3ICs4MTcsNyBAQAogCWlmIChyZXB0eXBlICE9IExNSV9GVUxMUkVQKQogCQlyZXR1cm4gMDsKIAotCXB2YyA9IGhkbGMtPnN0YXRlLmZyLmZpcnN0X3B2YzsKKwlwdmMgPSBzdGF0ZShoZGxjKS0+Zmlyc3RfcHZjOwogCiAJd2hpbGUgKHB2YykgewogCQlwdmMtPnN0YXRlLmRlbGV0ZWQgPSAxOwpAQCAtODI3LDcgKzg4NCw3IEBACiAJCWkgKz0gc3RhdF9sZW47CiAJfQogCi0JcHZjID0gaGRsYy0+c3RhdGUuZnIuZmlyc3RfcHZjOworCXB2YyA9IHN0YXRlKGhkbGMpLT5maXJzdF9wdmM7CiAKIAl3aGlsZSAocHZjKSB7CiAJCWlmIChwdmMtPnN0YXRlLmRlbGV0ZWQgJiYgcHZjLT5zdGF0ZS5leGlzdCkgewpAQCAtODQxLDE3ICs4OTgsMTYgQEAKIAl9CiAKIAkvKiBOZXh0IGZ1bGwgcmVwb3J0IGFmdGVyIE4zOTEgcG9sbHMgKi8KLQloZGxjLT5zdGF0ZS5mci5uMzkxY250ID0gaGRsYy0+c3RhdGUuZnIuc2V0dGluZ3MubjM5MTsKKwlzdGF0ZShoZGxjKS0+bjM5MWNudCA9IHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5uMzkxOwogCiAJcmV0dXJuIDA7CiB9CiAKIAotCiBzdGF0aWMgaW50IGZyX3J4KHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBza2ItPmRldjsKLQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKG5kZXYpOworCXN0cnVjdCBuZXRfZGV2aWNlICpmcmFkID0gc2tiLT5kZXY7CisJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhmcmFkKTsKIAlmcl9oZHIgKmZoID0gKGZyX2hkciopc2tiLT5kYXRhOwogCXU4ICpkYXRhID0gc2tiLT5kYXRhOwogCXUxNiBkbGNpOwpAQCAtODY0LDExICs5MjAsMTEgQEAKIAlkbGNpID0gcTkyMl90b19kbGNpKHNrYi0+ZGF0YSk7CiAKIAlpZiAoKGRsY2kgPT0gTE1JX0NDSVRUX0FOU0lfRExDSSAmJgotCSAgICAgKGhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLmxtaSA9PSBMTUlfQU5TSSB8fAotCSAgICAgIGhkbGMtPnN0YXRlLmZyLnNldHRpbmdzLmxtaSA9PSBMTUlfQ0NJVFQpKSB8fAorCSAgICAgKHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWkgPT0gTE1JX0FOU0kgfHwKKwkgICAgICBzdGF0ZShoZGxjKS0+c2V0dGluZ3MubG1pID09IExNSV9DQ0lUVCkpIHx8CiAJICAgIChkbGNpID09IExNSV9DSVNDT19ETENJICYmCi0JICAgICBoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5sbWkgPT0gTE1JX0NJU0NPKSkgewotCQlpZiAoZnJfbG1pX3JlY3YobmRldiwgc2tiKSkKKwkgICAgIHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWkgPT0gTE1JX0NJU0NPKSkgeworCQlpZiAoZnJfbG1pX3JlY3YoZnJhZCwgc2tiKSkKIAkJCWdvdG8gcnhfZXJyb3I7CiAJCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKQEAgLTg3OCw3ICs5MzQsNyBAQAogCWlmICghcHZjKSB7CiAjaWZkZWYgREVCVUdfUEtUCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBObyBQVkMgZm9yIHJlY2VpdmVkIGZyYW1lJ3MgRExDSSAlZFxuIiwKLQkJICAgICAgIG5kZXYtPm5hbWUsIGRsY2kpOworCQkgICAgICAgZnJhZC0+bmFtZSwgZGxjaSk7CiAjZW5kaWYKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwpAQCAtODg2LDcgKzk0Miw3IEBACiAKIAlpZiAocHZjLT5zdGF0ZS5mZWNuICE9IGZoLT5mZWNuKSB7CiAjaWZkZWYgREVCVUdfRUNOCi0JCXByaW50ayhLRVJOX0RFQlVHICIlczogRExDSSAlZCBGRUNOIE8lc1xuIiwgbmRldi0+bmFtZSwKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBETENJICVkIEZFQ04gTyVzXG4iLCBmcmFkLT5uYW1lLAogCQkgICAgICAgZGxjaSwgZmgtPmZlY24gPyAiTiIgOiAiRkYiKTsKICNlbmRpZgogCQlwdmMtPnN0YXRlLmZlY24gXj0gMTsKQEAgLTg5NCw3ICs5NTAsNyBAQAogCiAJaWYgKHB2Yy0+c3RhdGUuYmVjbiAhPSBmaC0+YmVjbikgewogI2lmZGVmIERFQlVHX0VDTgotCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IERMQ0kgJWQgQkVDTiBPJXNcbiIsIG5kZXYtPm5hbWUsCisJCXByaW50ayhLRVJOX0RFQlVHICIlczogRExDSSAlZCBCRUNOIE8lc1xuIiwgZnJhZC0+bmFtZSwKIAkJICAgICAgIGRsY2ksIGZoLT5iZWNuID8gIk4iIDogIkZGIik7CiAjZW5kaWYKIAkJcHZjLT5zdGF0ZS5iZWNuIF49IDE7CkBAIC05MDIsNyArOTU4LDcgQEAKIAogCiAJaWYgKChza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewotCQloZGxjLT5zdGF0cy5yeF9kcm9wcGVkKys7CisJCWRldl90b19kZXNjKGZyYWQpLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKQEAgLTkzOCwxMyArOTk0LDEzIEBACiAKIAkJZGVmYXVsdDoKIAkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbnN1cHBvcnRlZCBwcm90b2NvbCwgT1VJPSV4ICIKLQkJCSAgICAgICAiUElEPSV4XG4iLCBuZGV2LT5uYW1lLCBvdWksIHBpZCk7CisJCQkgICAgICAgIlBJRD0leFxuIiwgZnJhZC0+bmFtZSwgb3VpLCBwaWQpOwogCQkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJCXJldHVybiBORVRfUlhfRFJPUDsKIAkJfQogCX0gZWxzZSB7CiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBVbnN1cHBvcnRlZCBwcm90b2NvbCwgTkxQSUQ9JXggIgotCQkgICAgICAgImxlbmd0aCA9ICVpXG4iLCBuZGV2LT5uYW1lLCBkYXRhWzNdLCBza2ItPmxlbik7CisJCSAgICAgICAibGVuZ3RoID0gJWlcbiIsIGZyYWQtPm5hbWUsIGRhdGFbM10sIHNrYi0+bGVuKTsKIAkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKIAkJcmV0dXJuIE5FVF9SWF9EUk9QOwogCX0KQEAgLTk2NCw3ICsxMDIwLDcgQEAKIAl9CiAKICByeF9lcnJvcjoKLQloZGxjLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogTWFyayBlcnJvciAqLworCWRldl90b19kZXNjKGZyYWQpLT5zdGF0cy5yeF9lcnJvcnMrKzsgLyogTWFyayBlcnJvciAqLwogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQpAQCAtOTc3LDQ0ICsxMDMzLDQyIEBACiAjaWZkZWYgREVCVUdfTElOSwogCXByaW50ayhLRVJOX0RFQlVHICJmcl9zdGFydFxuIik7CiAjZW5kaWYKLQlpZiAoaGRsYy0+c3RhdGUuZnIuc2V0dGluZ3MubG1pICE9IExNSV9OT05FKSB7Ci0JCWhkbGMtPnN0YXRlLmZyLnJlbGlhYmxlID0gMDsKLQkJaGRsYy0+c3RhdGUuZnIuZGNlX2NoYW5nZWQgPSAxOwotCQloZGxjLT5zdGF0ZS5mci5yZXF1ZXN0ID0gMDsKLQkJaGRsYy0+c3RhdGUuZnIuZnVsbHJlcF9zZW50ID0gMDsKLQkJaGRsYy0+c3RhdGUuZnIubGFzdF9lcnJvcnMgPSAweEZGRkZGRkZGOwotCQloZGxjLT5zdGF0ZS5mci5uMzkxY250ID0gMDsKLQkJaGRsYy0+c3RhdGUuZnIudHhzZXEgPSBoZGxjLT5zdGF0ZS5mci5yeHNlcSA9IDA7CisJaWYgKHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWkgIT0gTE1JX05PTkUpIHsKKwkJc3RhdGUoaGRsYyktPnJlbGlhYmxlID0gMDsKKwkJc3RhdGUoaGRsYyktPmRjZV9jaGFuZ2VkID0gMTsKKwkJc3RhdGUoaGRsYyktPnJlcXVlc3QgPSAwOworCQlzdGF0ZShoZGxjKS0+ZnVsbHJlcF9zZW50ID0gMDsKKwkJc3RhdGUoaGRsYyktPmxhc3RfZXJyb3JzID0gMHhGRkZGRkZGRjsKKwkJc3RhdGUoaGRsYyktPm4zOTFjbnQgPSAwOworCQlzdGF0ZShoZGxjKS0+dHhzZXEgPSBzdGF0ZShoZGxjKS0+cnhzZXEgPSAwOwogCi0JCWluaXRfdGltZXIoJmhkbGMtPnN0YXRlLmZyLnRpbWVyKTsKKwkJaW5pdF90aW1lcigmc3RhdGUoaGRsYyktPnRpbWVyKTsKIAkJLyogRmlyc3QgcG9sbCBhZnRlciAxIHMgKi8KLQkJaGRsYy0+c3RhdGUuZnIudGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBIWjsKLQkJaGRsYy0+c3RhdGUuZnIudGltZXIuZnVuY3Rpb24gPSBmcl90aW1lcjsKLQkJaGRsYy0+c3RhdGUuZnIudGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldjsKLQkJYWRkX3RpbWVyKCZoZGxjLT5zdGF0ZS5mci50aW1lcik7CisJCXN0YXRlKGhkbGMpLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIEhaOworCQlzdGF0ZShoZGxjKS0+dGltZXIuZnVuY3Rpb24gPSBmcl90aW1lcjsKKwkJc3RhdGUoaGRsYyktPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXY7CisJCWFkZF90aW1lcigmc3RhdGUoaGRsYyktPnRpbWVyKTsKIAl9IGVsc2UKIAkJZnJfc2V0X2xpbmtfc3RhdGUoMSwgZGV2KTsKIH0KIAogCi0KIHN0YXRpYyB2b2lkIGZyX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAjaWZkZWYgREVCVUdfTElOSwogCXByaW50ayhLRVJOX0RFQlVHICJmcl9zdG9wXG4iKTsKICNlbmRpZgotCWlmIChoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncy5sbWkgIT0gTE1JX05PTkUpCi0JCWRlbF90aW1lcl9zeW5jKCZoZGxjLT5zdGF0ZS5mci50aW1lcik7CisJaWYgKHN0YXRlKGhkbGMpLT5zZXR0aW5ncy5sbWkgIT0gTE1JX05PTkUpCisJCWRlbF90aW1lcl9zeW5jKCZzdGF0ZShoZGxjKS0+dGltZXIpOwogCWZyX3NldF9saW5rX3N0YXRlKDAsIGRldik7CiB9CiAKIAotCiBzdGF0aWMgdm9pZCBmcl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKLQlwdmNfZGV2aWNlICpwdmMgPSBoZGxjLT5zdGF0ZS5mci5maXJzdF9wdmM7CisJcHZjX2RldmljZSAqcHZjID0gc3RhdGUoaGRsYyktPmZpcnN0X3B2YzsKIAogCXdoaWxlIChwdmMpIHsJCS8qIFNodXRkb3duIGFsbCBQVkNzIGZvciB0aGlzIEZSQUQgKi8KIAkJaWYgKHB2Yy0+bWFpbikKQEAgLTEwMjUsNyArMTA3OSw4IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBkbGNpX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCisKK3N0YXRpYyB2b2lkIHB2Y19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCWRldi0+dHlwZSA9IEFSUEhSRF9ETENJOwogCWRldi0+ZmxhZ3MgPSBJRkZfUE9JTlRPUE9JTlQ7CkBAIC0xMDMzLDkgKzEwODgsOSBAQAogCWRldi0+YWRkcl9sZW4gPSAyOwogfQogCi1zdGF0aWMgaW50IGZyX2FkZF9wdmMoc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlciwgdW5zaWduZWQgaW50IGRsY2ksIGludCB0eXBlKQorc3RhdGljIGludCBmcl9hZGRfcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpmcmFkLCB1bnNpZ25lZCBpbnQgZGxjaSwgaW50IHR5cGUpCiB7Ci0JaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhtYXN0ZXIpOworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZnJhZCk7CiAJcHZjX2RldmljZSAqcHZjID0gTlVMTDsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCWludCByZXN1bHQsIHVzZWQ7CkBAIC0xMDQ0LDkgKzEwOTksOSBAQAogCWlmICh0eXBlID09IEFSUEhSRF9FVEhFUikKIAkJcHJlZml4ID0gInB2Y2V0aCVkIjsKIAotCWlmICgocHZjID0gYWRkX3B2YyhtYXN0ZXIsIGRsY2kpKSA9PSBOVUxMKSB7CisJaWYgKChwdmMgPSBhZGRfcHZjKGZyYWQsIGRsY2kpKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBNZW1vcnkgc3F1ZWV6ZSBvbiBmcl9hZGRfcHZjKClcbiIsCi0JCSAgICAgICBtYXN0ZXItPm5hbWUpOworCQkgICAgICAgZnJhZC0+bmFtZSk7CiAJCXJldHVybiAtRU5PQlVGUzsKIAl9CiAKQEAgLTEwNjAsMTEgKzExMTUsMTEgQEAKIAkJCQkgICAicHZjZXRoJWQiLCBldGhlcl9zZXR1cCk7CiAJZWxzZQogCQlkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSwKLQkJCQkgICAicHZjJWQiLCBkbGNpX3NldHVwKTsKKwkJCQkgICAicHZjJWQiLCBwdmNfc2V0dXApOwogCiAJaWYgKCFkZXYpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IE1lbW9yeSBzcXVlZXplIG9uIGZyX3B2YygpXG4iLAotCQkgICAgICAgbWFzdGVyLT5uYW1lKTsKKwkJICAgICAgIGZyYWQtPm5hbWUpOwogCQlkZWxldGVfdW51c2VkX3B2Y3MoaGRsYyk7CiAJCXJldHVybiAtRU5PQlVGUzsKIAl9CkBAIC0xMTAyLDggKzExNTcsOCBAQAogCWRldi0+ZGVzdHJ1Y3RvciA9IGZyZWVfbmV0ZGV2OwogCSpnZXRfZGV2X3AocHZjLCB0eXBlKSA9IGRldjsKIAlpZiAoIXVzZWQpIHsKLQkJaGRsYy0+c3RhdGUuZnIuZGNlX2NoYW5nZWQgPSAxOwotCQloZGxjLT5zdGF0ZS5mci5kY2VfcHZjX2NvdW50Kys7CisJCXN0YXRlKGhkbGMpLT5kY2VfY2hhbmdlZCA9IDE7CisJCXN0YXRlKGhkbGMpLT5kY2VfcHZjX2NvdW50Kys7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTEyOCw4ICsxMTgzLDggQEAKIAkqZ2V0X2Rldl9wKHB2YywgdHlwZSkgPSBOVUxMOwogCiAJaWYgKCFwdmNfaXNfdXNlZChwdmMpKSB7Ci0JCWhkbGMtPnN0YXRlLmZyLmRjZV9wdmNfY291bnQtLTsKLQkJaGRsYy0+c3RhdGUuZnIuZGNlX2NoYW5nZWQgPSAxOworCQlzdGF0ZShoZGxjKS0+ZGNlX3B2Y19jb3VudC0tOworCQlzdGF0ZShoZGxjKS0+ZGNlX2NoYW5nZWQgPSAxOwogCX0KIAlkZWxldGVfdW51c2VkX3B2Y3MoaGRsYyk7CiAJcmV0dXJuIDA7CkBAIC0xMTM3LDE0ICsxMTkyLDEzIEBACiAKIAogCi1zdGF0aWMgdm9pZCBmcl9kZXN0cm95KGhkbGNfZGV2aWNlICpoZGxjKQorc3RhdGljIHZvaWQgZnJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqZnJhZCkKIHsKLQlwdmNfZGV2aWNlICpwdmM7Ci0KLQlwdmMgPSBoZGxjLT5zdGF0ZS5mci5maXJzdF9wdmM7Ci0JaGRsYy0+c3RhdGUuZnIuZmlyc3RfcHZjID0gTlVMTDsgLyogQWxsIFBWQ3MgZGVzdHJveWVkICovCi0JaGRsYy0+c3RhdGUuZnIuZGNlX3B2Y19jb3VudCA9IDA7Ci0JaGRsYy0+c3RhdGUuZnIuZGNlX2NoYW5nZWQgPSAxOworCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZnJhZCk7CisJcHZjX2RldmljZSAqcHZjID0gc3RhdGUoaGRsYyktPmZpcnN0X3B2YzsKKwlzdGF0ZShoZGxjKS0+Zmlyc3RfcHZjID0gTlVMTDsgLyogQWxsIFBWQ3MgZGVzdHJveWVkICovCisJc3RhdGUoaGRsYyktPmRjZV9wdmNfY291bnQgPSAwOworCXN0YXRlKGhkbGMpLT5kY2VfY2hhbmdlZCA9IDE7CiAKIAl3aGlsZSAocHZjKSB7CiAJCXB2Y19kZXZpY2UgKm5leHQgPSBwdmMtPm5leHQ7CkBAIC0xMTYxLDggKzEyMTUsMTcgQEAKIH0KIAogCitzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gcHJvdG8gPSB7CisJLmNsb3NlCQk9IGZyX2Nsb3NlLAorCS5zdGFydAkJPSBmcl9zdGFydCwKKwkuc3RvcAkJPSBmcl9zdG9wLAorCS5kZXRhY2gJCT0gZnJfZGVzdHJveSwKKwkuaW9jdGwJCT0gZnJfaW9jdGwsCisJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKK307CiAKLWludCBoZGxjX2ZyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQorCitzdGF0aWMgaW50IGZyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCWZyX3Byb3RvIF9fdXNlciAqZnJfcyA9IGlmci0+aWZyX3NldHRpbmdzLmlmc19pZnN1LmZyOwogCWNvbnN0IHNpemVfdCBzaXplID0gc2l6ZW9mKGZyX3Byb3RvKTsKQEAgLTExNzMsMTIgKzEyMzYsMTQgQEAKIAogCXN3aXRjaCAoaWZyLT5pZnJfc2V0dGluZ3MudHlwZSkgewogCWNhc2UgSUZfR0VUX1BST1RPOgorCQlpZiAoZGV2X3RvX2hkbGMoZGV2KS0+cHJvdG8gIT0gJnByb3RvKSAvKiBEaWZmZXJlbnQgcHJvdG8gKi8KKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZnItPmlmcl9zZXR0aW5ncy50eXBlID0gSUZfUFJPVE9fRlI7CiAJCWlmIChpZnItPmlmcl9zZXR0aW5ncy5zaXplIDwgc2l6ZSkgewogCQkJaWZyLT5pZnJfc2V0dGluZ3Muc2l6ZSA9IHNpemU7IC8qIGRhdGEgc2l6ZSB3YW50ZWQgKi8KIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJfQotCQlpZiAoY29weV90b191c2VyKGZyX3MsICZoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncywgc2l6ZSkpCisJCWlmIChjb3B5X3RvX3VzZXIoZnJfcywgJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgc2l6ZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAKQEAgLTEyMTMsMjAgKzEyNzgsMTYgQEAKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAKLQkJaWYgKGhkbGMtPnByb3RvLmlkICE9IElGX1BST1RPX0ZSKSB7Ci0JCQloZGxjX3Byb3RvX2RldGFjaChoZGxjKTsKLQkJCWhkbGMtPnN0YXRlLmZyLmZpcnN0X3B2YyA9IE5VTEw7Ci0JCQloZGxjLT5zdGF0ZS5mci5kY2VfcHZjX2NvdW50ID0gMDsKKwkJaWYgKGRldl90b19oZGxjKGRldiktPnByb3RvICE9ICZwcm90bykgeyAvKiBEaWZmZXJlbnQgcHJvdG8gKi8KKwkJCXJlc3VsdCA9IGF0dGFjaF9oZGxjX3Byb3RvY29sKGRldiwgJnByb3RvLCBmcl9yeCwKKwkJCQkJCSAgICAgIHNpemVvZihzdHJ1Y3QgZnJhZF9zdGF0ZSkpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlyZXR1cm4gcmVzdWx0OworCQkJc3RhdGUoaGRsYyktPmZpcnN0X3B2YyA9IE5VTEw7CisJCQlzdGF0ZShoZGxjKS0+ZGNlX3B2Y19jb3VudCA9IDA7CiAJCX0KLQkJbWVtY3B5KCZoZGxjLT5zdGF0ZS5mci5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7Ci0JCW1lbXNldCgmaGRsYy0+cHJvdG8sIDAsIHNpemVvZihoZGxjLT5wcm90bykpOworCQltZW1jcHkoJnN0YXRlKGhkbGMpLT5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7CiAKLQkJaGRsYy0+cHJvdG8uY2xvc2UgPSBmcl9jbG9zZTsKLQkJaGRsYy0+cHJvdG8uc3RhcnQgPSBmcl9zdGFydDsKLQkJaGRsYy0+cHJvdG8uc3RvcCA9IGZyX3N0b3A7Ci0JCWhkbGMtPnByb3RvLmRldGFjaCA9IGZyX2Rlc3Ryb3k7Ci0JCWhkbGMtPnByb3RvLm5ldGlmX3J4ID0gZnJfcng7Ci0JCWhkbGMtPnByb3RvLmlkID0gSUZfUFJPVE9fRlI7CiAJCWRldi0+aGFyZF9zdGFydF94bWl0ID0gaGRsYy0+eG1pdDsKIAkJZGV2LT5oYXJkX2hlYWRlciA9IE5VTEw7CiAJCWRldi0+dHlwZSA9IEFSUEhSRF9GUkFEOwpAQCAtMTIzOCw2ICsxMjk5LDkgQEAKIAljYXNlIElGX1BST1RPX0ZSX0RFTF9QVkM6CiAJY2FzZSBJRl9QUk9UT19GUl9BRERfRVRIX1BWQzoKIAljYXNlIElGX1BST1RPX0ZSX0RFTF9FVEhfUFZDOgorCQlpZiAoZGV2X3RvX2hkbGMoZGV2KS0+cHJvdG8gIT0gJnByb3RvKSAvKiBEaWZmZXJlbnQgcHJvdG8gKi8KKwkJCXJldHVybiAtRUlOVkFMOworCiAJCWlmKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIApAQCAtMTI2MywzICsxMzI3LDI0IEBACiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworCitzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woJnByb3RvKTsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woJnByb3RvKTsKK30KKworCittb2R1bGVfaW5pdChtb2RfaW5pdCk7Cittb2R1bGVfZXhpdChtb2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIktyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZyYW1lLVJlbGF5IHByb3RvY29sIHN1cHBvcnQgZm9yIGdlbmVyaWMgSERMQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwppbmRleCBmYmFhYjViLi5lOWY3MTcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19wcHAuYwpAQCAtMiw3ICsyLDcgQEAKICAqIEdlbmVyaWMgSERMQyBzdXBwb3J0IHJvdXRpbmVzIGZvciBMaW51eAogICogUG9pbnQtdG8tcG9pbnQgcHJvdG9jb2wgc3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDMgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDYgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTIyLDYgKzIyLDIxIEBACiAjaW5jbHVkZSA8bGludXgvbGFwYi5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2hkbGMuaD4KKyNpbmNsdWRlIDxuZXQvc3luY3BwcC5oPgorCitzdHJ1Y3QgcHBwX3N0YXRlIHsKKwlzdHJ1Y3QgcHBwX2RldmljZSBwcHBkZXY7CisJc3RydWN0IHBwcF9kZXZpY2UgKnN5bmNwcHBfcHRyOworCWludCAoKm9sZF9jaGFuZ2VfbXR1KShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7Cit9OworCitzdGF0aWMgaW50IHBwcF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7CisKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgcHBwX3N0YXRlKiBzdGF0ZShoZGxjX2RldmljZSAqaGRsYykKK3sKKwlyZXR1cm4oc3RydWN0IHBwcF9zdGF0ZSAqKShoZGxjLT5zdGF0ZSk7Cit9CiAKIAogc3RhdGljIGludCBwcHBfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQpAQCAtMzAsMTYgKzQ1LDE2IEBACiAJdm9pZCAqb2xkX2lvY3RsOwogCWludCByZXN1bHQ7CiAKLQlkZXYtPnByaXYgPSAmaGRsYy0+c3RhdGUucHBwLnN5bmNwcHBfcHRyOwotCWhkbGMtPnN0YXRlLnBwcC5zeW5jcHBwX3B0ciA9ICZoZGxjLT5zdGF0ZS5wcHAucHBwZGV2OwotCWhkbGMtPnN0YXRlLnBwcC5wcHBkZXYuZGV2ID0gZGV2OworCWRldi0+cHJpdiA9ICZzdGF0ZShoZGxjKS0+c3luY3BwcF9wdHI7CisJc3RhdGUoaGRsYyktPnN5bmNwcHBfcHRyID0gJnN0YXRlKGhkbGMpLT5wcHBkZXY7CisJc3RhdGUoaGRsYyktPnBwcGRldi5kZXYgPSBkZXY7CiAKIAlvbGRfaW9jdGwgPSBkZXYtPmRvX2lvY3RsOwotCWhkbGMtPnN0YXRlLnBwcC5vbGRfY2hhbmdlX210dSA9IGRldi0+Y2hhbmdlX210dTsKLQlzcHBwX2F0dGFjaCgmaGRsYy0+c3RhdGUucHBwLnBwcGRldik7CisJc3RhdGUoaGRsYyktPm9sZF9jaGFuZ2VfbXR1ID0gZGV2LT5jaGFuZ2VfbXR1OworCXNwcHBfYXR0YWNoKCZzdGF0ZShoZGxjKS0+cHBwZGV2KTsKIAkvKiBzcHBwX2F0dGFjaCBudWtlcyB0aGVtLiBXZSBkb24ndCBuZWVkIHN5bmNwcHAncyBpb2N0bCAqLwogCWRldi0+ZG9faW9jdGwgPSBvbGRfaW9jdGw7Ci0JaGRsYy0+c3RhdGUucHBwLnBwcGRldi5zcHBwLnBwX2ZsYWdzICY9IH5QUF9DSVNDTzsKKwlzdGF0ZShoZGxjKS0+cHBwZGV2LnNwcHAucHBfZmxhZ3MgJj0gflBQX0NJU0NPOwogCWRldi0+dHlwZSA9IEFSUEhSRF9QUFA7CiAJcmVzdWx0ID0gc3BwcF9vcGVuKGRldik7CiAJaWYgKHJlc3VsdCkgewpAQCAtNTksNyArNzQsNyBAQAogCXNwcHBfY2xvc2UoZGV2KTsKIAlzcHBwX2RldGFjaChkZXYpOwogCWRldi0+cmVidWlsZF9oZWFkZXIgPSBOVUxMOwotCWRldi0+Y2hhbmdlX210dSA9IGhkbGMtPnN0YXRlLnBwcC5vbGRfY2hhbmdlX210dTsKKwlkZXYtPmNoYW5nZV9tdHUgPSBzdGF0ZShoZGxjKS0+b2xkX2NoYW5nZV9tdHU7CiAJZGV2LT5tdHUgPSBIRExDX01BWF9NVFU7CiAJZGV2LT5oYXJkX2hlYWRlcl9sZW4gPSAxNjsKIH0KQEAgLTczLDEzICs4OCwyNCBAQAogCiAKIAotaW50IGhkbGNfcHBwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQorc3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvIHByb3RvID0geworCS5vcGVuCQk9IHBwcF9vcGVuLAorCS5jbG9zZQkJPSBwcHBfY2xvc2UsCisJLnR5cGVfdHJhbnMJPSBwcHBfdHlwZV90cmFucywKKwkuaW9jdGwJCT0gcHBwX2lvY3RsLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCit9OworCisKK3N0YXRpYyBpbnQgcHBwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAlpbnQgcmVzdWx0OwogCiAJc3dpdGNoIChpZnItPmlmcl9zZXR0aW5ncy50eXBlKSB7CiAJY2FzZSBJRl9HRVRfUFJPVE86CisJCWlmIChkZXZfdG9faGRsYyhkZXYpLT5wcm90byAhPSAmcHJvdG8pCisJCQlyZXR1cm4gLUVJTlZBTDsKIAkJaWZyLT5pZnJfc2V0dGluZ3MudHlwZSA9IElGX1BST1RPX1BQUDsKIAkJcmV0dXJuIDA7IC8qIHJldHVybiBwcm90b2NvbCBvbmx5LCBubyBzZXR0YWJsZSBwYXJhbWV0ZXJzICovCiAKQEAgLTk2LDEzICsxMjIsMTAgQEAKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAKLQkJaGRsY19wcm90b19kZXRhY2goaGRsYyk7Ci0JCW1lbXNldCgmaGRsYy0+cHJvdG8sIDAsIHNpemVvZihoZGxjLT5wcm90bykpOwotCi0JCWhkbGMtPnByb3RvLm9wZW4gPSBwcHBfb3BlbjsKLQkJaGRsYy0+cHJvdG8uY2xvc2UgPSBwcHBfY2xvc2U7Ci0JCWhkbGMtPnByb3RvLnR5cGVfdHJhbnMgPSBwcHBfdHlwZV90cmFuczsKLQkJaGRsYy0+cHJvdG8uaWQgPSBJRl9QUk9UT19QUFA7CisJCXJlc3VsdCA9IGF0dGFjaF9oZGxjX3Byb3RvY29sKGRldiwgJnByb3RvLCBOVUxMLAorCQkJCQkgICAgICBzaXplb2Yoc3RydWN0IHBwcF9zdGF0ZSkpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKIAkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPmhhcmRfaGVhZGVyID0gTlVMTDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1BQUDsKQEAgLTExMywzICsxMzYsMjUgQEAKIAogCXJldHVybiAtRUlOVkFMOwogfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfaGRsY19wcm90b2NvbCgmcHJvdG8pOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKCZwcm90byk7Cit9CisKKworbW9kdWxlX2luaXQobW9kX2luaXQpOworbW9kdWxlX2V4aXQobW9kX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJQUFAgcHJvdG9jb2wgc3VwcG9ydCBmb3IgZ2VuZXJpYyBIRExDIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsY19yYXcuYyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCmluZGV4IGYxNWFhNmIuLmZlM2NhZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhdy5jCkBAIC0yLDcgKzIsNyBAQAogICogR2VuZXJpYyBIRExDIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4CiAgKiBIRExDIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDAzIEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA2IEtyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB2ZXJzaW9uIDIgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCkBAIC0yNCw2ICsyNCw4IEBACiAjaW5jbHVkZSA8bGludXgvaGRsYy5oPgogCiAKK3N0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKwogc3RhdGljIF9fYmUxNiByYXdfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQKTsKQEAgLTMxLDcgKzMzLDE0IEBACiAKIAogCi1pbnQgaGRsY19yYXdfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCitzdGF0aWMgc3RydWN0IGhkbGNfcHJvdG8gcHJvdG8gPSB7CisJLnR5cGVfdHJhbnMJPSByYXdfdHlwZV90cmFucywKKwkuaW9jdGwJCT0gcmF3X2lvY3RsLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCit9OworCisKK3N0YXRpYyBpbnQgcmF3X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKQogewogCXJhd19oZGxjX3Byb3RvIF9fdXNlciAqcmF3X3MgPSBpZnItPmlmcl9zZXR0aW5ncy5pZnNfaWZzdS5yYXdfaGRsYzsKIAljb25zdCBzaXplX3Qgc2l6ZSA9IHNpemVvZihyYXdfaGRsY19wcm90byk7CkBAIC00MSwxMiArNTAsMTQgQEAKIAogCXN3aXRjaCAoaWZyLT5pZnJfc2V0dGluZ3MudHlwZSkgewogCWNhc2UgSUZfR0VUX1BST1RPOgorCQlpZiAoZGV2X3RvX2hkbGMoZGV2KS0+cHJvdG8gIT0gJnByb3RvKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmci0+aWZyX3NldHRpbmdzLnR5cGUgPSBJRl9QUk9UT19IRExDOwogCQlpZiAoaWZyLT5pZnJfc2V0dGluZ3Muc2l6ZSA8IHNpemUpIHsKIAkJCWlmci0+aWZyX3NldHRpbmdzLnNpemUgPSBzaXplOyAvKiBkYXRhIHNpemUgd2FudGVkICovCiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KLQkJaWYgKGNvcHlfdG9fdXNlcihyYXdfcywgJmhkbGMtPnN0YXRlLnJhd19oZGxjLnNldHRpbmdzLCBzaXplKSkKKwkJaWYgKGNvcHlfdG9fdXNlcihyYXdfcywgaGRsYy0+c3RhdGUsIHNpemUpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybiAwOwogCkBAIC03MSwxMiArODIsMTEgQEAKIAkJaWYgKHJlc3VsdCkKIAkJCXJldHVybiByZXN1bHQ7CiAKLQkJaGRsY19wcm90b19kZXRhY2goaGRsYyk7Ci0JCW1lbWNweSgmaGRsYy0+c3RhdGUucmF3X2hkbGMuc2V0dGluZ3MsICZuZXdfc2V0dGluZ3MsIHNpemUpOwotCQltZW1zZXQoJmhkbGMtPnByb3RvLCAwLCBzaXplb2YoaGRsYy0+cHJvdG8pKTsKLQotCQloZGxjLT5wcm90by50eXBlX3RyYW5zID0gcmF3X3R5cGVfdHJhbnM7Ci0JCWhkbGMtPnByb3RvLmlkID0gSUZfUFJPVE9fSERMQzsKKwkJcmVzdWx0ID0gYXR0YWNoX2hkbGNfcHJvdG9jb2woZGV2LCAmcHJvdG8sIE5VTEwsCisJCQkJCSAgICAgIHNpemVvZihyYXdfaGRsY19wcm90bykpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKIAkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBoZGxjLT54bWl0OwogCQlkZXYtPmhhcmRfaGVhZGVyID0gTlVMTDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1JBV0hETEM7CkBAIC04OCwzICs5OCwyNSBAQAogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CisKKworc3RhdGljIGludCBfX2luaXQgbW9kX2luaXQodm9pZCkKK3sKKwlyZWdpc3Rlcl9oZGxjX3Byb3RvY29sKCZwcm90byk7CisJcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgdm9pZCBfX2V4aXQgbW9kX2V4aXQodm9pZCkKK3sKKwl1bnJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woJnByb3RvKTsKK30KKworCittb2R1bGVfaW5pdChtb2RfaW5pdCk7Cittb2R1bGVfZXhpdChtb2RfZXhpdCk7CisKK01PRFVMRV9BVVRIT1IoIktyenlzenRvZiBIYWxhc2EgPGtoY0BwbS53YXcucGw+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlJhdyBIRExDIHByb3RvY29sIHN1cHBvcnQgZm9yIGdlbmVyaWMgSERMQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfcmF3X2V0aC5jCmluZGV4IGQxODg0OTguLjFhNjlhOWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3Jhd19ldGguYworKysgYi9kcml2ZXJzL25ldC93YW4vaGRsY19yYXdfZXRoLmMKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmljIEhETEMgc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXgKICAqIEhETEMgRXRoZXJuZXQgZW11bGF0aW9uIHN1cHBvcnQKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDItMjAwMyBLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPgorICogQ29weXJpZ2h0IChDKSAyMDAyLTIwMDYgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hkbGMuaD4KIAorc3RhdGljIGludCByYXdfZXRoX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKIAogc3RhdGljIGludCBldGhfdHgoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKQEAgLTQ0LDcgKzQ1LDE0IEBACiB9CiAKIAotaW50IGhkbGNfcmF3X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcikKK3N0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKKwkudHlwZV90cmFucwk9IGV0aF90eXBlX3RyYW5zLAorCS5pb2N0bAkJPSByYXdfZXRoX2lvY3RsLAorCS5tb2R1bGUJCT0gVEhJU19NT0RVTEUsCit9OworCisKK3N0YXRpYyBpbnQgcmF3X2V0aF9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcikKIHsKIAlyYXdfaGRsY19wcm90byBfX3VzZXIgKnJhd19zID0gaWZyLT5pZnJfc2V0dGluZ3MuaWZzX2lmc3UucmF3X2hkbGM7CiAJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YocmF3X2hkbGNfcHJvdG8pOwpAQCAtNTYsMTIgKzY0LDE0IEBACiAKIAlzd2l0Y2ggKGlmci0+aWZyX3NldHRpbmdzLnR5cGUpIHsKIAljYXNlIElGX0dFVF9QUk9UTzoKKwkJaWYgKGRldl90b19oZGxjKGRldiktPnByb3RvICE9ICZwcm90bykKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZnItPmlmcl9zZXR0aW5ncy50eXBlID0gSUZfUFJPVE9fSERMQ19FVEg7CiAJCWlmIChpZnItPmlmcl9zZXR0aW5ncy5zaXplIDwgc2l6ZSkgewogCQkJaWZyLT5pZnJfc2V0dGluZ3Muc2l6ZSA9IHNpemU7IC8qIGRhdGEgc2l6ZSB3YW50ZWQgKi8KIAkJCXJldHVybiAtRU5PQlVGUzsKIAkJfQotCQlpZiAoY29weV90b191c2VyKHJhd19zLCAmaGRsYy0+c3RhdGUucmF3X2hkbGMuc2V0dGluZ3MsIHNpemUpKQorCQlpZiAoY29weV90b191c2VyKHJhd19zLCBoZGxjLT5zdGF0ZSwgc2l6ZSkpCiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJcmV0dXJuIDA7CiAKQEAgLTg2LDEyICs5NiwxMSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAotCQloZGxjX3Byb3RvX2RldGFjaChoZGxjKTsKLQkJbWVtY3B5KCZoZGxjLT5zdGF0ZS5yYXdfaGRsYy5zZXR0aW5ncywgJm5ld19zZXR0aW5ncywgc2l6ZSk7Ci0JCW1lbXNldCgmaGRsYy0+cHJvdG8sIDAsIHNpemVvZihoZGxjLT5wcm90bykpOwotCi0JCWhkbGMtPnByb3RvLnR5cGVfdHJhbnMgPSBldGhfdHlwZV90cmFuczsKLQkJaGRsYy0+cHJvdG8uaWQgPSBJRl9QUk9UT19IRExDX0VUSDsKKwkJcmVzdWx0ID0gYXR0YWNoX2hkbGNfcHJvdG9jb2woZGV2LCAmcHJvdG8sIE5VTEwsCisJCQkJCSAgICAgIHNpemVvZihyYXdfaGRsY19wcm90bykpOworCQlpZiAocmVzdWx0KQorCQkJcmV0dXJuIHJlc3VsdDsKKwkJbWVtY3B5KGhkbGMtPnN0YXRlLCAmbmV3X3NldHRpbmdzLCBzaXplKTsKIAkJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBldGhfdHg7CiAJCW9sZF9jaF9tdHUgPSBkZXYtPmNoYW5nZV9tdHU7CiAJCW9sZF9xbGVuID0gZGV2LT50eF9xdWV1ZV9sZW47CkBAIC0xMDYsMyArMTE1LDI1IEBACiAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KKworCitzdGF0aWMgaW50IF9faW5pdCBtb2RfaW5pdCh2b2lkKQoreworCXJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woJnByb3RvKTsKKwlyZXR1cm4gMDsKK30KKworCisKK3N0YXRpYyB2b2lkIF9fZXhpdCBtb2RfZXhpdCh2b2lkKQoreworCXVucmVnaXN0ZXJfaGRsY19wcm90b2NvbCgmcHJvdG8pOworfQorCisKK21vZHVsZV9pbml0KG1vZF9pbml0KTsKK21vZHVsZV9leGl0KG1vZF9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiRXRoZXJuZXQgZW5jYXBzdWxhdGlvbiBzdXBwb3J0IGZvciBnZW5lcmljIEhETEMiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjX3gyNS5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKaW5kZXggYTg2N2ZiNC4uZTRiYjlmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL2hkbGNfeDI1LmMKQEAgLTIsNyArMiw3IEBACiAgKiBHZW5lcmljIEhETEMgc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXgKICAqIFguMjUgc3VwcG9ydAogICoKLSAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDMgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KKyAqIENvcHlyaWdodCAoQykgMTk5OSAtIDIwMDYgS3J6eXN6dG9mIEhhbGFzYSA8a2hjQHBtLndhdy5wbD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI1LDYgKzI1LDggQEAKIAogI2luY2x1ZGUgPG5ldC94MjVkZXZpY2UuaD4KIAorc3RhdGljIGludCB4MjVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOworCiAvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNhbGxiYWNrcyBjYWxsZWQgYnkgTEFQQiBsYXllciAqLwogCiBzdGF0aWMgdm9pZCB4MjVfY29ubmVjdF9kaXNjb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCByZWFzb24sIGludCBjb2RlKQpAQCAtMTYyLDMwICsxNjQsMzkgQEAKIAogc3RhdGljIGludCB4MjVfcngoc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKHNrYi0+ZGV2KTsKKwlzdHJ1Y3QgaGRsY19kZXZpY2VfZGVzYyAqZGVzYyA9IGRldl90b19kZXNjKHNrYi0+ZGV2KTsKIAogCWlmICgoc2tiID0gc2tiX3NoYXJlX2NoZWNrKHNrYiwgR0ZQX0FUT01JQykpID09IE5VTEwpIHsKLQkJaGRsYy0+c3RhdHMucnhfZHJvcHBlZCsrOworCQlkZXNjLT5zdGF0cy5yeF9kcm9wcGVkKys7CiAJCXJldHVybiBORVRfUlhfRFJPUDsKIAl9CiAKIAlpZiAobGFwYl9kYXRhX3JlY2VpdmVkKHNrYi0+ZGV2LCBza2IpID09IExBUEJfT0spCiAJCXJldHVybiBORVRfUlhfU1VDQ0VTUzsKIAotCWhkbGMtPnN0YXRzLnJ4X2Vycm9ycysrOworCWRlc2MtPnN0YXRzLnJ4X2Vycm9ycysrOwogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJcmV0dXJuIE5FVF9SWF9EUk9QOwogfQogCiAKK3N0YXRpYyBzdHJ1Y3QgaGRsY19wcm90byBwcm90byA9IHsKKwkub3BlbgkJPSB4MjVfb3BlbiwKKwkuY2xvc2UJCT0geDI1X2Nsb3NlLAorCS5pb2N0bAkJPSB4MjVfaW9jdGwsCisJLm1vZHVsZQkJPSBUSElTX01PRFVMRSwKK307CiAKLWludCBoZGxjX3gyNV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcikKKworc3RhdGljIGludCB4MjVfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpCiB7CiAJaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCWludCByZXN1bHQ7CiAKIAlzd2l0Y2ggKGlmci0+aWZyX3NldHRpbmdzLnR5cGUpIHsKIAljYXNlIElGX0dFVF9QUk9UTzoKKwkJaWYgKGRldl90b19oZGxjKGRldiktPnByb3RvICE9ICZwcm90bykKKwkJCXJldHVybiAtRUlOVkFMOwogCQlpZnItPmlmcl9zZXR0aW5ncy50eXBlID0gSUZfUFJPVE9fWDI1OwogCQlyZXR1cm4gMDsgLyogcmV0dXJuIHByb3RvY29sIG9ubHksIG5vIHNldHRhYmxlIHBhcmFtZXRlcnMgKi8KIApAQCAtMjAwLDE0ICsyMTEsOSBAQAogCQlpZiAocmVzdWx0KQogCQkJcmV0dXJuIHJlc3VsdDsKIAotCQloZGxjX3Byb3RvX2RldGFjaChoZGxjKTsKLQkJbWVtc2V0KCZoZGxjLT5wcm90bywgMCwgc2l6ZW9mKGhkbGMtPnByb3RvKSk7Ci0KLQkJaGRsYy0+cHJvdG8ub3BlbiA9IHgyNV9vcGVuOwotCQloZGxjLT5wcm90by5jbG9zZSA9IHgyNV9jbG9zZTsKLQkJaGRsYy0+cHJvdG8ubmV0aWZfcnggPSB4MjVfcng7Ci0JCWhkbGMtPnByb3RvLnR5cGVfdHJhbnMgPSBOVUxMOwotCQloZGxjLT5wcm90by5pZCA9IElGX1BST1RPX1gyNTsKKwkJaWYgKChyZXN1bHQgPSBhdHRhY2hfaGRsY19wcm90b2NvbChkZXYsICZwcm90bywKKwkJCQkJCSAgIHgyNV9yeCwgMCkpICE9IDApCisJCQlyZXR1cm4gcmVzdWx0OwogCQlkZXYtPmhhcmRfc3RhcnRfeG1pdCA9IHgyNV94bWl0OwogCQlkZXYtPmhhcmRfaGVhZGVyID0gTlVMTDsKIAkJZGV2LT50eXBlID0gQVJQSFJEX1gyNTsKQEAgLTIxOCwzICsyMjQsMjUgQEAKIAogCXJldHVybiAtRUlOVkFMOwogfQorCisKK3N0YXRpYyBpbnQgX19pbml0IG1vZF9pbml0KHZvaWQpCit7CisJcmVnaXN0ZXJfaGRsY19wcm90b2NvbCgmcHJvdG8pOworCXJldHVybiAwOworfQorCisKKworc3RhdGljIHZvaWQgX19leGl0IG1vZF9leGl0KHZvaWQpCit7CisJdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKCZwcm90byk7Cit9CisKKworbW9kdWxlX2luaXQobW9kX2luaXQpOworbW9kdWxlX2V4aXQobW9kX2V4aXQpOworCitNT0RVTEVfQVVUSE9SKCJLcnp5c3p0b2YgSGFsYXNhIDxraGNAcG0ud2F3LnBsPiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJYLjI1IHByb3RvY29sIHN1cHBvcnQgZm9yIGdlbmVyaWMgSERMQyIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwLmggYi9kcml2ZXJzL25ldC93YW4vcGMzMDAuaAppbmRleCAyMDI0YjI2Li42M2U5ZmNmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vcGMzMDAuaAorKysgYi9kcml2ZXJzL25ldC93YW4vcGMzMDAuaApAQCAtMTAwLDYgKzEwMCw3IEBACiAjZGVmaW5lCV9QQzMwMF9ICiAKICNpbmNsdWRlIDxsaW51eC9oZGxjLmg+CisjaW5jbHVkZSA8bmV0L3N5bmNwcHAuaD4KICNpbmNsdWRlICJoZDY0NTcyLmgiCiAjaW5jbHVkZSAicGMzMDAtZmFsYy1saC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMgYi9kcml2ZXJzL25ldC93YW4vcGMzMDBfZHJ2LmMKaW5kZXggNTZlNjk0MC4uOGQ5Yjk1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2FuL3BjMzAwX2Rydi5jCisrKyBiL2RyaXZlcnMvbmV0L3dhbi9wYzMwMF9kcnYuYwpAQCAtMjAxNiw3ICsyMDE2LDYgQEAKIAkJCXBjMzAwY2hfdCAqY2hhbiA9ICZjYXJkLT5jaGFuW2NoXTsKIAkJCXBjMzAwZGV2X3QgKmQgPSAmY2hhbi0+ZDsKIAkJCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkLT5kZXY7Ci0JCQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAKIAkJCXNwaW5fbG9jaygmY2FyZC0+Y2FyZF9sb2NrKTsKIApAQCAtMjA0OSw4ICsyMDQ4LDggQEAKIAkJCQkJCQl9CiAJCQkJCQkJY3BjX25ldF9yeChkZXYpOwogCQkJCQkJCS8qIERpc2NhcmQgaW52YWxpZCBmcmFtZXMgKi8KLQkJCQkJCQloZGxjLT5zdGF0cy5yeF9lcnJvcnMrKzsKLQkJCQkJCQloZGxjLT5zdGF0cy5yeF9vdmVyX2Vycm9ycysrOworCQkJCQkJCWhkbGNfc3RhdHMoZGV2KS0+cnhfZXJyb3JzKys7CisJCQkJCQkJaGRsY19zdGF0cyhkZXYpLT5yeF9vdmVyX2Vycm9ycysrOwogCQkJCQkJCWNoYW4tPnJ4X2ZpcnN0X2JkID0gMDsKIAkJCQkJCQljaGFuLT5yeF9sYXN0X2JkID0gTl9ETUFfUlhfQlVGIC0gMTsKIAkJCQkJCQlyeF9kbWFfc3RhcnQoY2FyZCwgY2gpOwpAQCAtMjExNiw4ICsyMTE1LDggQEAKIAkJCQkJCQkJCQkgICBjYXJkLT5ody5jcGxkX3JlZzIpICYKIAkJCQkJCQkJICAgfiAoQ1BMRF9SRUcyX0ZBTENfTEVEMSA8PCAoMiAqIGNoKSkpOwogCQkJCQkJfQotCQkJCQkJaGRsYy0+c3RhdHMudHhfZXJyb3JzKys7Ci0JCQkJCQloZGxjLT5zdGF0cy50eF9maWZvX2Vycm9ycysrOworCQkJCQkJaGRsY19zdGF0cyhkZXYpLT50eF9lcnJvcnMrKzsKKwkJCQkJCWhkbGNfc3RhdHMoZGV2KS0+dHhfZmlmb19lcnJvcnMrKzsKIAkJCQkJCXNjYV90eF9pbnRyKGQpOwogCQkJCQl9CiAJCQkJfQpAQCAtMjUzNCw3ICsyNTMzLDYgQEAKIAogc3RhdGljIGludCBjcGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiB7Ci0JaGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpOwogCXBjMzAwZGV2X3QgKmQgPSAocGMzMDBkZXZfdCAqKSBkZXYtPnByaXY7CiAJcGMzMDBjaF90ICpjaGFuID0gKHBjMzAwY2hfdCAqKSBkLT5jaGFuOwogCXBjMzAwX3QgKmNhcmQgPSAocGMzMDBfdCAqKSBjaGFuLT5jYXJkOwpAQCAtMjU1MiwxMCArMjU1MCwxMCBAQAogCQljYXNlIFNJT0NHUEMzMDBDT05GOgogI2lmZGVmIENPTkZJR19QQzMwMF9NTFBQUAogCQkJaWYgKGNvbmYtPnByb3RvICE9IFBDMzAwX1BST1RPX01MUFBQKSB7Ci0JCQkJY29uZi0+cHJvdG8gPSBoZGxjLT5wcm90by5pZDsKKwkJCQljb25mLT5wcm90byA9IC8qIEZJWE1FIGhkbGMtPnByb3RvLmlkICovIDA7CiAJCQl9CiAjZWxzZQotCQkJY29uZi0+cHJvdG8gPSBoZGxjLT5wcm90by5pZDsKKwkJCWNvbmYtPnByb3RvID0gLyogRklYTUUgaGRsYy0+cHJvdG8uaWQgKi8gMDsKICNlbmRpZgogCQkJbWVtY3B5KCZjb25mX2F1eC5jb25mLCBjb25mLCBzaXplb2YocGMzMDBjaGNvbmZfdCkpOwogCQkJbWVtY3B5KCZjb25mX2F1eC5odywgJmNhcmQtPmh3LCBzaXplb2YocGMzMDBod190KSk7CkBAIC0yNTg4LDEyICsyNTg2LDEyIEBACiAJCQkJCX0KIAkJCQl9IGVsc2UgewogCQkJCQltZW1jcHkoY29uZiwgJmNvbmZfYXV4LmNvbmYsIHNpemVvZihwYzMwMGNoY29uZl90KSk7Ci0JCQkJCWhkbGMtPnByb3RvLmlkID0gY29uZi0+cHJvdG87CisJCQkJCS8qIEZJWE1FIGhkbGMtPnByb3RvLmlkID0gY29uZi0+cHJvdG87ICovCiAJCQkJfQogCQkJfQogI2Vsc2UKIAkJCW1lbWNweShjb25mLCAmY29uZl9hdXguY29uZiwgc2l6ZW9mKHBjMzAwY2hjb25mX3QpKTsKLQkJCWhkbGMtPnByb3RvLmlkID0gY29uZi0+cHJvdG87CisJCQkvKiBGSVhNRSBoZGxjLT5wcm90by5pZCA9IGNvbmYtPnByb3RvOyAqLwogI2VuZGlmCiAJCQlyZXR1cm4gMDsKIAkJY2FzZSBTSU9DR1BDMzAwU1RBVFVTOgpAQCAtMjYwNiw3ICsyNjA0LDcgQEAKIAkJY2FzZSBTSU9DR1BDMzAwVVRJTFNUQVRTOgogCQkJewogCQkJCWlmICghYXJnKSB7CS8qIGNsZWFyIHN0YXRpc3RpY3MgKi8KLQkJCQkJbWVtc2V0KCZoZGxjLT5zdGF0cywgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CisJCQkJCW1lbXNldChoZGxjX3N0YXRzKGRldiksIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cykpOwogCQkJCQlpZiAoY2FyZC0+aHcudHlwZSA9PSBQQzMwMF9URSkgewogCQkJCQkJbWVtc2V0KCZjaGFuLT5mYWxjLCAwLCBzaXplb2YoZmFsY190KSk7CiAJCQkJCX0KQEAgLTI2MTcsNyArMjYxNSw3IEBACiAJCQkJCXBjMzAwc3RhdHMuaHdfdHlwZSA9IGNhcmQtPmh3LnR5cGU7CiAJCQkJCXBjMzAwc3RhdHMubGluZV9vbiA9IGNhcmQtPmNoYW5bY2hdLmQubGluZV9vbjsKIAkJCQkJcGMzMDBzdGF0cy5saW5lX29mZiA9IGNhcmQtPmNoYW5bY2hdLmQubGluZV9vZmY7Ci0JCQkJCW1lbWNweSgmcGMzMDBzdGF0cy5nZW5fc3RhdHMsICZoZGxjLT5zdGF0cywKKwkJCQkJbWVtY3B5KCZwYzMwMHN0YXRzLmdlbl9zdGF0cywgaGRsY19zdGF0cyhkZXYpLAogCQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7CiAJCQkJCWlmIChjYXJkLT5ody50eXBlID09IFBDMzAwX1RFKQogCQkJCQkJbWVtY3B5KCZwYzMwMHN0YXRzLnRlX3N0YXRzLCZjaGFuLT5mYWxjLHNpemVvZihmYWxjX3QpKTsKQEAgLTMxNDcsNyArMzE0NSw2IEBACiAKIGludCBjcGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCWhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTsKIAlwYzMwMGRldl90ICpkID0gKHBjMzAwZGV2X3QgKikgZGV2LT5wcml2OwogCXN0cnVjdCBpZnJlcSBpZnI7CiAJaW50IHJlc3VsdDsKQEAgLTMxNTYsMTIgKzMxNTMsMTQgQEAKIAlwcmludGsoInBjMzAwOiBjcGNfb3BlbiIpOwogI2VuZGlmCiAKKyNpZmRlZiBGSVhNRQogCWlmIChoZGxjLT5wcm90by5pZCA9PSBJRl9QUk9UT19QUFApIHsKIAkJZC0+aWZfcHRyID0gJmhkbGMtPnN0YXRlLnBwcC5wcHBkZXY7CiAJfQorI2VuZGlmCiAKIAlyZXN1bHQgPSBoZGxjX29wZW4oZGV2KTsKLQlpZiAoaGRsYy0+cHJvdG8uaWQgPT0gSUZfUFJPVE9fUFBQKSB7CisJaWYgKC8qIEZJWE1FIGhkbGMtPnByb3RvLmlkID09IElGX1BST1RPX1BQUCovIDApIHsKIAkJZGV2LT5wcml2ID0gZDsKIAl9CiAJaWYgKHJlc3VsdCkgewpAQCAtMzE3Niw3ICszMTc1LDYgQEAKIAogc3RhdGljIGludCBjcGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJcGMzMDBkZXZfdCAqZCA9IChwYzMwMGRldl90ICopIGRldi0+cHJpdjsKIAlwYzMwMGNoX3QgKmNoYW4gPSAocGMzMDBjaF90ICopIGQtPmNoYW47CiAJcGMzMDBfdCAqY2FyZCA9IChwYzMwMF90ICopIGNoYW4tPmNhcmQ7CkBAIC0zMTkzLDcgKzMxOTEsNyBAQAogCUNQQ19VTkxPQ0soY2FyZCwgZmxhZ3MpOwogCiAJaGRsY19jbG9zZShkZXYpOwotCWlmIChoZGxjLT5wcm90by5pZCA9PSBJRl9QUk9UT19QUFApIHsKKwlpZiAoLyogRklYTUUgaGRsYy0+cHJvdG8uaWQgPT0gSUZfUFJPVE9fUFBQKi8gMCkgewogCQlkLT5pZl9wdHIgPSBOVUxMOwogCX0KICNpZmRlZiBDT05GSUdfUEMzMDBfTUxQUFAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMgYi9kcml2ZXJzL25ldC93YW4vc3luY3BwcC5jCmluZGV4IGMxM2I0NTkuLjIxOGY3YjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9zeW5jcHBwLmMKKysrIGIvZHJpdmVycy9uZXQvd2FuL3N5bmNwcHAuYwpAQCAtNDY5LDcgKzQ2OSw3IEBACiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNwLT5wcF9pZjsKIAlpbnQgbGVuID0gc2tiLT5sZW47CiAJdTggKnAsIG9wdFs2XTsKLQl1MzIgcm1hZ2ljOworCXUzMiBybWFnaWMgPSAwOwogCiAJaWYgKCFwc2tiX21heV9wdWxsKHNrYiwgc2l6ZW9mKHN0cnVjdCBsY3BfaGVhZGVyKSkpIHsKIAkJaWYgKHNwLT5wcF9mbGFncyAmIFBQX0RFQlVHKQpAQCAtNzYzLDcgKzc2Myw3IEBACiAJCXsKIAkJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCQlzdHJ1Y3QgaW5faWZhZGRyICppZmE7Ci0JCXUzMiBhZGRyID0gMCwgbWFzayA9IH4wOyAvKiBGSVhNRTogaXMgdGhlIG1hc2sgY29ycmVjdD8gKi8KKwkJX19iZTMyIGFkZHIgPSAwLCBtYXNrID0gfjA7IC8qIEZJWE1FOiBpcyB0aGUgbWFzayBjb3JyZWN0PyAqLwogI2lmZGVmIENPTkZJR19JTkVUCiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaWYgKChpbl9kZXYgPSBfX2luX2Rldl9nZXRfcmN1KGRldikpICE9IE5VTEwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKaW5kZXggYmZmMDRjYi4uYmE3MzdjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYwpAQCAtNTg2OCw3ICs1ODY4LDcgQEAKIAkJaW50CWluZGV4ID0gKGR3cnEtPmZsYWdzICYgSVdfRU5DT0RFX0lOREVYKSAtIDE7CiAKIAkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCQlpZihkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSsxKSB7CisJCWlmKGR3cnEtPmxlbmd0aCA+IElXX0VTU0lEX01BWF9TSVpFKSB7CiAJCQlyZXR1cm4gLUUyQklHIDsKIAkJfQogCQkvKiBDaGVjayBpZiBpbmRleCBpcyB2YWxpZCAqLwpAQCAtNTg4MCw3ICs1ODgwLDcgQEAKIAkJbWVtc2V0KFNTSURfcmlkLnNzaWRzW2luZGV4XS5zc2lkLCAwLAogCQkgICAgICAgc2l6ZW9mKFNTSURfcmlkLnNzaWRzW2luZGV4XS5zc2lkKSk7CiAJCW1lbWNweShTU0lEX3JpZC5zc2lkc1tpbmRleF0uc3NpZCwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7Ci0JCVNTSURfcmlkLnNzaWRzW2luZGV4XS5sZW4gPSBkd3JxLT5sZW5ndGggLSAxOworCQlTU0lEX3JpZC5zc2lkc1tpbmRleF0ubGVuID0gZHdycS0+bGVuZ3RoOwogCX0KIAlTU0lEX3JpZC5sZW4gPSBzaXplb2YoU1NJRF9yaWQpOwogCS8qIFdyaXRlIGl0IHRvIHRoZSBjYXJkICovCkBAIC01OTkwLDcgKzU5OTAsNyBAQAogCXN0cnVjdCBhaXJvX2luZm8gKmxvY2FsID0gZGV2LT5wcml2OwogCiAJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCWlmKGR3cnEtPmxlbmd0aCA+IDE2ICsgMSkgeworCWlmKGR3cnEtPmxlbmd0aCA+IDE2KSB7CiAJCXJldHVybiAtRTJCSUc7CiAJfQogCXJlYWRDb25maWdSaWQobG9jYWwsIDEpOwpAQCAtNjAxNSw3ICs2MDE1LDcgQEAKIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAlzdHJuY3B5KGV4dHJhLCBsb2NhbC0+Y29uZmlnLm5vZGVOYW1lLCAxNik7CiAJZXh0cmFbMTZdID0gJ1wwJzsKLQlkd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsKKwlkd3JxLT5sZW5ndGggPSBzdHJsZW4oZXh0cmEpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02NzY3LDkgKzY3NjcsOSBAQAogCX0KIAlyZWFkQ29uZmlnUmlkKGxvY2FsLCAxKTsKIAlpZih2d3JxLT5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSB7Ci0JCWlmKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQorCQlpZih2d3JxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpCiAJCQlsb2NhbC0+Y29uZmlnLmxvbmdSZXRyeUxpbWl0ID0gdndycS0+dmFsdWU7Ci0JCWVsc2UgaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUlOKQorCQllbHNlIGlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX1NIT1JUKQogCQkJbG9jYWwtPmNvbmZpZy5zaG9ydFJldHJ5TGltaXQgPSB2d3JxLT52YWx1ZTsKIAkJZWxzZSB7CiAJCQkvKiBObyBtb2RpZmllciA6IHNldCBib3RoICovCkBAIC02ODA1LDE0ICs2ODA1LDE0IEBACiAJaWYoKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfVFlQRSkgPT0gSVdfUkVUUllfTElGRVRJTUUpIHsKIAkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSUZFVElNRTsKIAkJdndycS0+dmFsdWUgPSAoaW50KWxvY2FsLT5jb25maWcudHhMaWZldGltZSAqIDEwMjQ7Ci0JfSBlbHNlIGlmKCh2d3JxLT5mbGFncyAmIElXX1JFVFJZX01BWCkpIHsKLQkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwl9IGVsc2UgaWYoKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykpIHsKKwkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7CiAJCXZ3cnEtPnZhbHVlID0gKGludClsb2NhbC0+Y29uZmlnLmxvbmdSZXRyeUxpbWl0OwogCX0gZWxzZSB7CiAJCXZ3cnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CiAJCXZ3cnEtPnZhbHVlID0gKGludClsb2NhbC0+Y29uZmlnLnNob3J0UmV0cnlMaW1pdDsKIAkJaWYoKGludClsb2NhbC0+Y29uZmlnLnNob3J0UmV0cnlMaW1pdCAhPSAoaW50KWxvY2FsLT5jb25maWcubG9uZ1JldHJ5TGltaXQpCi0JCQl2d3JxLT5mbGFncyB8PSBJV19SRVRSWV9NSU47CisJCQl2d3JxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKIAl9CiAKIAlyZXR1cm4gMDsKQEAgLTY5OTAsNiArNjk5MCw3IEBACiAJCQlsb2NhbC0+Y29uZmlnLnJtb2RlIHw9IFJYTU9ERV9CQ19NQ19BRERSOwogCQkJc2V0X2JpdCAoRkxBR19DT01NSVQsICZsb2NhbC0+ZmxhZ3MpOwogCQljYXNlIElXX1BPV0VSX09OOgorCQkJLyogVGhpcyBpcyBicm9rZW4sIGZpeG1lIDstKSAqLwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9hdG1lbC5jCmluZGV4IDk5NWM3YmUuLjBmYzI2N2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0bWVsLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYXRtZWwuYwpAQCAtMTY1NiwxMyArMTY1NiwxMyBAQAogCQlwcml2LT5jb25uZWN0X3RvX2FueV9CU1MgPSAwOwogCiAJCS8qIENoZWNrIHRoZSBzaXplIG9mIHRoZSBzdHJpbmcgKi8KLQkJaWYgKGR3cnEtPmxlbmd0aCA+IE1BWF9TU0lEX0xFTkdUSCArIDEpCisJCWlmIChkd3JxLT5sZW5ndGggPiBNQVhfU1NJRF9MRU5HVEgpCiAJCQkgcmV0dXJuIC1FMkJJRzsKIAkJaWYgKGluZGV4ICE9IDApCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAotCQltZW1jcHkocHJpdi0+bmV3X1NTSUQsIGV4dHJhLCBkd3JxLT5sZW5ndGggLSAxKTsKLQkJcHJpdi0+bmV3X1NTSURfc2l6ZSA9IGR3cnEtPmxlbmd0aCAtIDE7CisJCW1lbWNweShwcml2LT5uZXdfU1NJRCwgZXh0cmEsIGR3cnEtPmxlbmd0aCk7CisJCXByaXYtPm5ld19TU0lEX3NpemUgPSBkd3JxLT5sZW5ndGg7CiAJfQogCiAJcmV0dXJuIC1FSU5QUk9HUkVTUzsKQEAgLTIxMjAsOSArMjEyMCw5IEBACiAJc3RydWN0IGF0bWVsX3ByaXZhdGUgKnByaXYgPSBuZXRkZXZfcHJpdihkZXYpOwogCiAJaWYgKCF2d3JxLT5kaXNhYmxlZCAmJiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkpIHsKLQkJaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQorCQlpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKQogCQkJcHJpdi0+bG9uZ19yZXRyeSA9IHZ3cnEtPnZhbHVlOwotCQllbHNlIGlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX01JTikKKwkJZWxzZSBpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9TSE9SVCkKIAkJCXByaXYtPnNob3J0X3JldHJ5ID0gdndycS0+dmFsdWU7CiAJCWVsc2UgewogCQkJLyogTm8gbW9kaWZpZXIgOiBzZXQgYm90aCAqLwpAQCAtMjE0NCwxNSArMjE0NCwxNSBAQAogCiAJdndycS0+ZGlzYWJsZWQgPSAwOyAgICAgIC8qIENhbid0IGJlIGRpc2FibGVkICovCiAKLQkvKiBOb3RlIDogYnkgZGVmYXVsdCwgZGlzcGxheSB0aGUgbWluIHJldHJ5IG51bWJlciAqLwotCWlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX01BWCkgewotCQl2d3JxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUFYOworCS8qIE5vdGUgOiBieSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBzaG9ydCByZXRyeSBudW1iZXIgKi8KKwlpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CisJCXZ3cnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwogCQl2d3JxLT52YWx1ZSA9IHByaXYtPmxvbmdfcmV0cnk7CiAJfSBlbHNlIHsKIAkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKIAkJdndycS0+dmFsdWUgPSBwcml2LT5zaG9ydF9yZXRyeTsKIAkJaWYgKHByaXYtPmxvbmdfcmV0cnkgIT0gcHJpdi0+c2hvcnRfcmV0cnkpCi0JCQl2d3JxLT5mbGFncyB8PSBJV19SRVRSWV9NSU47CisJCQl2d3JxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKIAl9CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eC5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKaW5kZXggNmQ0ZWEzNi4uZDZhOGJmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4LmgKQEAgLTY2Niw3ICs2NjYsNiBAQAogfTsKIAogc3RydWN0IGJjbTQzeHhfc3RhdHMgewotCXU4IGxpbmtfcXVhbGl0eTsKIAl1OCBub2lzZTsKIAlzdHJ1Y3QgaXdfc3RhdGlzdGljcyB3c3RhdHM7CiAJLyogU3RvcmUgdGhlIGxhc3QgVFgvUlggdGltZXMgaGVyZSBmb3IgdXBkYXRpbmcgdGhlIGxlZHMuICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X2RlYnVnZnMuYwppbmRleCA5MjMyNzVlLi5iOWRmMDZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfZGVidWdmcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9kZWJ1Z2ZzLmMKQEAgLTU0LDcgKzU0LDcgQEAKIAogc3RhdGljIGludCBvcGVuX2ZpbGVfZ2VuZXJpYyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfbWFpbi5jCmluZGV4IGNiOWEzYWUuLmViNjVkYjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9tYWluLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X21haW4uYwpAQCAtMjQwNSw5ICsyNDA1LDEwIEBACiAJCQkJICAgQkNNNDN4eF9VQ09ERV9USU1FKSAmIDB4MWYpOwogCiAJaWYgKCB2YWx1ZTE2ID4gMHgxMjggKSB7Ci0JCWRwcmludGsoS0VSTl9FUlIgUEZYCi0JCQkiRmlybXdhcmU6IG5vIHN1cHBvcnQgZm9yIG1pY3JvY29kZSByZXYgPiAweDEyOFxuIik7Ci0JCWVyciA9IC0xOworCQlwcmludGsoS0VSTl9FUlIgUEZYCisJCQkiRmlybXdhcmU6IG5vIHN1cHBvcnQgZm9yIG1pY3JvY29kZSBleHRyYWN0ZWQgIgorCQkJImZyb20gdmVyc2lvbiA0LnggYmluYXJ5IGRyaXZlcnMuXG4iKTsKKwkJZXJyID0gLUVPUE5PVFNVUFA7CiAJCWdvdG8gZXJyX3JlbGVhc2VfZnc7CiAJfQogCkBAIC0zMTY5LDggKzMxNzAsNyBAQAogCQkgKiBiZSBwcmVlbXRpYmxlLgogCQkgKi8KIAkJbXV0ZXhfbG9jaygmYmNtLT5tdXRleCk7Ci0JCW5ldGlmX3N0b3BfcXVldWUoYmNtLT5uZXRfZGV2KTsKLQkJc3luY2hyb25pemVfbmV0KCk7CisJCW5ldGlmX3R4X2Rpc2FibGUoYmNtLT5uZXRfZGV2KTsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmJjbS0+aXJxX2xvY2ssIGZsYWdzKTsKIAkJYmNtNDN4eF9tYWNfc3VzcGVuZChiY20pOwogCQlpZiAoYmNtNDN4eF91c2luZ19waW8oYmNtKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF9waHkuYwppbmRleCBlYWZkMGY2Li41MmNlMmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfcGh5LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3BoeS5jCkBAIC0zNjEsNyArMzYxLDcgQEAKIAlpZiAocGh5LT5yZXYgPD0gMikKIAkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkU7IGkrKykKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxNDAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VzY2FsZWcxW2ldKTsKLQllbHNlIGlmICgocGh5LT5yZXYgPT0gNykgJiYgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0NDkpICYgMHgwMjAwKSkKKwllbHNlIGlmICgocGh5LT5yZXYgPj0gNykgJiYgKGJjbTQzeHhfcGh5X3JlYWQoYmNtLCAweDA0NDkpICYgMHgwMjAwKSkKIAkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX05PSVNFU0NBTEVHX1NJWkU7IGkrKykKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHgxNDAwICsgaSwgYmNtNDN4eF9pbHRfbm9pc2VzY2FsZWczW2ldKTsKIAllbHNlCkBAIC0zNzEsNyArMzcxLDcgQEAKIAlpZiAocGh5LT5yZXYgPT0gMikKIAkJZm9yIChpID0gMDsgaSA8IEJDTTQzeHhfSUxUX1NJR01BU1FSX1NJWkU7IGkrKykKIAkJCWJjbTQzeHhfaWx0X3dyaXRlKGJjbSwgMHg1MDAwICsgaSwgYmNtNDN4eF9pbHRfc2lnbWFzcXIxW2ldKTsKLQllbHNlIGlmICgocGh5LT5yZXYgPiAyKSAmJiAocGh5LT5yZXYgPD0gNykpCisJZWxzZSBpZiAoKHBoeS0+cmV2ID4gMikgJiYgKHBoeS0+cmV2IDw9IDgpKQogCQlmb3IgKGkgPSAwOyBpIDwgQkNNNDN4eF9JTFRfU0lHTUFTUVJfU0laRTsgaSsrKQogCQkJYmNtNDN4eF9pbHRfd3JpdGUoYmNtLCAweDUwMDAgKyBpLCBiY200M3h4X2lsdF9zaWdtYXNxcjJbaV0pOwogCQpAQCAtMTE5Nyw3ICsxMTk3LDcgQEAKIAogCWlmIChwaHktPnJldiA9PSAxKQogCQliY200M3h4X3BoeV9pbml0YjUoYmNtKTsKLQllbHNlIGlmIChwaHktPnJldiA+PSAyICYmIHBoeS0+cmV2IDw9IDcpCisJZWxzZQogCQliY200M3h4X3BoeV9pbml0YjYoYmNtKTsKIAlpZiAocGh5LT5yZXYgPj0gMiB8fCBwaHktPmNvbm5lY3RlZCkKIAkJYmNtNDN4eF9waHlfaW5pdGEoYmNtKTsKQEAgLTEyNDEsMjMgKzEyNDEsMjIgQEAKIAkJYmNtNDN4eF9waHlfbG9fZ19tZWFzdXJlKGJjbSk7CiAJfSBlbHNlIHsKIAkJaWYgKHJhZGlvLT52ZXJzaW9uID09IDB4MjA1MCAmJiByYWRpby0+cmV2aXNpb24gPT0gOCkgewotCQkJLy9GSVhNRQorCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLAorCQkJCQkgICAgICAocmFkaW8tPnR4Y3RsMSA8PCA0KSB8IHJhZGlvLT50eGN0bDIpOwogCQl9IGVsc2UgewogCQkJYmNtNDN4eF9yYWRpb193cml0ZTE2KGJjbSwgMHgwMDUyLAogCQkJCQkgICAgICAoYmNtNDN4eF9yYWRpb19yZWFkMTYoYmNtLCAweDAwNTIpCiAJCQkJCSAgICAgICAmIDB4RkZGMCkgfCByYWRpby0+dHhjdGwxKTsKIAkJfQogCQlpZiAocGh5LT5yZXYgPj0gNikgewotCQkJLyoKIAkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDM2LAogCQkJCQkgIChiY200M3h4X3BoeV9yZWFkKGJjbSwgMHgwMDM2KQotCQkJCQkgICAmIDB4RjAwMCkgfCAoRklYTUUgPDwgMTIpKTsKLQkJCSovCisJCQkJCSAgICYgMHhGMDAwKSB8IChyYWRpby0+dHhjdGwyIDw8IDEyKSk7CiAJCX0KIAkJaWYgKGJjbS0+c3Byb20uYm9hcmRmbGFncyAmIEJDTTQzeHhfQkZMX1BBQ1RSTCkKIAkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJFLCAweDgwNzUpOwogCQllbHNlCi0JCQliY200M3h4X3BoeV93cml0ZShiY20sIDB4MDAzRSwgMHg4MDdGKTsKKwkJCWJjbTQzeHhfcGh5X3dyaXRlKGJjbSwgMHgwMDJFLCAweDgwN0YpOwogCQlpZiAocGh5LT5yZXYgPCAyKQogCQkJYmNtNDN4eF9waHlfd3JpdGUoYmNtLCAweDAwMkYsIDB4MDEwMSk7CiAJCWVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF93eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKaW5kZXggODg4MDc3Zi4uOWI3YjE1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3d4LmMKQEAgLTMzNCw3ICszMzQsNyBAQAogCXNpemVfdCBsZW47CiAKIAltdXRleF9sb2NrKCZiY20tPm11dGV4KTsKLQlsZW4gPSBzdHJsZW4oYmNtLT5uaWNrKSArIDE7CisJbGVuID0gc3RybGVuKGJjbS0+bmljayk7CiAJbWVtY3B5KGV4dHJhLCBiY20tPm5pY2ssIGxlbik7CiAJZGF0YS0+ZGF0YS5sZW5ndGggPSAoX191MTYpbGVuOwogCWRhdGEtPmRhdGEuZmxhZ3MgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2JjbTQzeHgvYmNtNDN4eF94bWl0LmMKaW5kZXggYzBlZmJmZS4uMDE1OWU0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYmNtNDN4eC9iY200M3h4X3htaXQuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9iY200M3h4L2JjbTQzeHhfeG1pdC5jCkBAIC00OTYsMTUgKzQ5NiwxNCBAQAogCXN0YXRzLnNpZ25hbCA9IGJjbTQzeHhfcnNzaV9wb3N0cHJvY2VzcyhiY20sIHJ4aGRyLT5yc3NpLCBpc19vZmRtLAogCQkJCQkgICAgICAhIShyeGZsYWdzMSAmIEJDTTQzeHhfUlhIRFJfRkxBR1MxXzIwNTNSU1NJQURKKSwKIAkJCQkJICAgICAgISEocnhmbGFnczMgJiBCQ000M3h4X1JYSERSX0ZMQUdTM18yMDUwUlNTSUFESikpOwotLy9UT0RPCXN0YXRzLm5vaXNlID0gCisJc3RhdHMubm9pc2UgPSBiY20tPnN0YXRzLm5vaXNlOwogCWlmIChpc19vZmRtKQogCQlzdGF0cy5yYXRlID0gYmNtNDN4eF9wbGNwX2dldF9iaXRyYXRlX29mZG0ocGxjcCk7CiAJZWxzZQogCQlzdGF0cy5yYXRlID0gYmNtNDN4eF9wbGNwX2dldF9iaXRyYXRlX2NjayhwbGNwKTsKIAlzdGF0cy5yZWNlaXZlZF9jaGFubmVsID0gcmFkaW8tPmNoYW5uZWw7Ci0vL1RPRE8Jc3RhdHMuY29udHJvbCA9IAogCXN0YXRzLm1hc2sgPSBJRUVFODAyMTFfU1RBVE1BU0tfU0lHTkFMIHwKLS8vVE9ETwkJICAgICBJRUVFODAyMTFfU1RBVE1BU0tfTk9JU0UgfAorCQkgICAgIElFRUU4MDIxMV9TVEFUTUFTS19OT0lTRSB8CiAJCSAgICAgSUVFRTgwMjExX1NUQVRNQVNLX1JBVEUgfAogCQkgICAgIElFRUU4MDIxMV9TVEFUTUFTS19SU1NJOwogCWlmIChwaHktPnR5cGUgPT0gQkNNNDN4eF9QSFlUWVBFX0EpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9ob3N0YXAvaG9zdGFwX2lvY3RsLmMKaW5kZXggN2E0OTc4NS4uZDA2MWZiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaG9zdGFwL2hvc3RhcF9pb2N0bC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2hvc3RhcC9ob3N0YXBfaW9jdGwuYwpAQCAtMTQxMiw5ICsxNDEyLDkgQEAKIAkvKiB3aGF0IGNvdWxkIGJlIGRvbmUsIGlmIGZpcm13YXJlIHdvdWxkIHN1cHBvcnQgdGhpcy4uICovCiAKIAlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xJTUlUKSB7Ci0JCWlmIChycnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQorCQlpZiAocnJxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpCiAJCQlIRkEzODRYX1JJRF9MT05HUkVUUllMSU1JVCA9IHJycS0+dmFsdWU7Ci0JCWVsc2UgaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9NSU4pCisJCWVsc2UgaWYgKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9TSE9SVCkKIAkJCUhGQTM4NFhfUklEX1NIT1JUUkVUUllMSU1JVCA9IHJycS0+dmFsdWU7CiAJCWVsc2UgewogCQkJSEZBMzg0WF9SSURfTE9OR1JFVFJZTElNSVQgPSBycnEtPnZhbHVlOwpAQCAtMTQ2OCwxNCArMTQ2OCwxNCBAQAogCQkJCXJycS0+dmFsdWUgPSBsZTE2X3RvX2NwdShhbHRyZXRyeSk7CiAJCQllbHNlCiAJCQkJcnJxLT52YWx1ZSA9IGxvY2FsLT5tYW51YWxfcmV0cnlfY291bnQ7Ci0JCX0gZWxzZSBpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9NQVgpKSB7Ci0JCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NQVg7CisJCX0gZWxzZSBpZiAoKHJycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgeworCQkJcnJxLT5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKIAkJCXJycS0+dmFsdWUgPSBsb25ncmV0cnk7CiAJCX0gZWxzZSB7CiAJCQlycnEtPmZsYWdzID0gSVdfUkVUUllfTElNSVQ7CiAJCQlycnEtPnZhbHVlID0gc2hvcnRyZXRyeTsKIAkJCWlmIChzaG9ydHJldHJ5ICE9IGxvbmdyZXRyeSkKLQkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX01JTjsKKwkJCQlycnEtPmZsYWdzIHw9IElXX1JFVFJZX1NIT1JUOwogCQl9CiAJfQogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjEwMC5jCmluZGV4IGI0ZDgxYTAuLjk3OTM3ODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIxMDAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMTAwLmMKQEAgLTE2Myw2ICsxNjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+CisjaW5jbHVkZSA8bGludXgvbGF0ZW5jeS5oPgogCiAjaW5jbHVkZSAiaXB3MjEwMC5oIgogCkBAIC0xNjk3LDYgKzE2OTgsMTEgQEAKIAkJcmV0dXJuIDA7CiAJfQogCisJLyogdGhlIGlwdzIxMDAgaGFyZHdhcmUgcmVhbGx5IGRvZXNuJ3Qgd2FudCBwb3dlciBtYW5hZ2VtZW50IGRlbGF5cworCSAqIGxvbmdlciB0aGFuIDE3NXVzZWMKKwkgKi8KKwltb2RpZnlfYWNjZXB0YWJsZV9sYXRlbmN5KCJpcHcyMTAwIiwgMTc1KTsKKwogCS8qIElmIHRoZSBpbnRlcnJ1cHQgaXMgZW5hYmxlZCwgdHVybiBpdCBvZmYuLi4gKi8KIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAlpcHcyMTAwX2Rpc2FibGVfaW50ZXJydXB0cyhwcml2KTsKQEAgLTE4NDksNiArMTg1NSw4IEBACiAJaXB3MjEwMF9kaXNhYmxlX2ludGVycnVwdHMocHJpdik7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG93X2xvY2ssIGZsYWdzKTsKIAorCW1vZGlmeV9hY2NlcHRhYmxlX2xhdGVuY3koImlwdzIxMDAiLCBJTkZJTklURV9MQVRFTkNZKTsKKwogI2lmZGVmIEFDUElfQ1NUQVRFX0xJTUlUX0RFRklORUQKIAlpZiAocHJpdi0+Y29uZmlnICYgQ0ZHX0MzX0RJU0FCTEVEKSB7CiAJCUlQV19ERUJVR19JTkZPKCI6IFJlc2V0dGluZyBDMyB0cmFuc2l0aW9ucy5cbiIpOwpAQCAtNjUzNCw2ICs2NTQyLDcgQEAKIAogCXJldCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmlwdzIxMDBfcGNpX2RyaXZlcik7CiAKKwlzZXRfYWNjZXB0YWJsZV9sYXRlbmN5KCJpcHcyMTAwIiwgSU5GSU5JVEVfTEFURU5DWSk7CiAjaWZkZWYgQ09ORklHX0lQVzIxMDBfREVCVUcKIAlpcHcyMTAwX2RlYnVnX2xldmVsID0gZGVidWc7CiAJZHJpdmVyX2NyZWF0ZV9maWxlKCZpcHcyMTAwX3BjaV9kcml2ZXIuZHJpdmVyLApAQCAtNjU1NCw2ICs2NTYzLDcgQEAKIAkJCSAgICZkcml2ZXJfYXR0cl9kZWJ1Z19sZXZlbCk7CiAjZW5kaWYKIAlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmlwdzIxMDBfcGNpX2RyaXZlcik7CisJcmVtb3ZlX2FjY2VwdGFibGVfbGF0ZW5jeSgiaXB3MjEwMCIpOwogfQogCiBtb2R1bGVfaW5pdChpcHcyMTAwX2luaXQpOwpAQCAtNjk1OCw3ICs2OTY4LDcgQEAKIAl9CiAKIAlpZiAod3JxdS0+ZXNzaWQuZmxhZ3MgJiYgd3JxdS0+ZXNzaWQubGVuZ3RoKSB7Ci0JCWxlbmd0aCA9IHdycXUtPmVzc2lkLmxlbmd0aCAtIDE7CisJCWxlbmd0aCA9IHdycXUtPmVzc2lkLmxlbmd0aDsKIAkJZXNzaWQgPSBleHRyYTsKIAl9CiAKQEAgLTcwNTEsNyArNzA2MSw3IEBACiAKIAlzdHJ1Y3QgaXB3MjEwMF9wcml2ICpwcml2ID0gaWVlZTgwMjExX3ByaXYoZGV2KTsKIAotCXdycXUtPmRhdGEubGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2spICsgMTsKKwl3cnF1LT5kYXRhLmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKTsKIAltZW1jcHkoZXh0cmEsIHByaXYtPm5pY2ssIHdycXUtPmRhdGEubGVuZ3RoKTsKIAl3cnF1LT5kYXRhLmZsYWdzID0gMTsJLyogYWN0aXZlICovCiAKQEAgLTczNDMsMTQgKzczNTMsMTQgQEAKIAkJZ290byBkb25lOwogCX0KIAotCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01JTikgeworCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX1NIT1JUKSB7CiAJCWVyciA9IGlwdzIxMDBfc2V0X3Nob3J0X3JldHJ5KHByaXYsIHdycXUtPnJldHJ5LnZhbHVlKTsKIAkJSVBXX0RFQlVHX1dYKCJTRVQgU2hvcnQgUmV0cnkgTGltaXQgLT4gJWQgXG4iLAogCQkJICAgICB3cnF1LT5yZXRyeS52YWx1ZSk7CiAJCWdvdG8gZG9uZTsKIAl9CiAKLQlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKKwlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CiAJCWVyciA9IGlwdzIxMDBfc2V0X2xvbmdfcmV0cnkocHJpdiwgd3JxdS0+cmV0cnkudmFsdWUpOwogCQlJUFdfREVCVUdfV1goIlNFVCBMb25nIFJldHJ5IExpbWl0IC0+ICVkIFxuIiwKIAkJCSAgICAgd3JxdS0+cmV0cnkudmFsdWUpOwpAQCAtNzM4MywxNCArNzM5MywxNCBAQAogCWlmICgod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9UWVBFKSA9PSBJV19SRVRSWV9MSUZFVElNRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKLQkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CisJCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwogCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPmxvbmdfcmV0cnlfbGltaXQ7CiAJfSBlbHNlIHsKIAkJd3JxdS0+cmV0cnkuZmxhZ3MgPQogCQkgICAgKHByaXYtPnNob3J0X3JldHJ5X2xpbWl0ICE9CiAJCSAgICAgcHJpdi0+bG9uZ19yZXRyeV9saW1pdCkgPwotCQkgICAgSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NSU4gOiBJV19SRVRSWV9MSU1JVDsKKwkJICAgIElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfU0hPUlQgOiBJV19SRVRSWV9MSU1JVDsKIAogCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPnNob3J0X3JldHJ5X2xpbWl0OwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2lwdzIyMDAuYwppbmRleCA3MzU4NjY0Li41Njg1ZDdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pcHcyMjAwLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaXB3MjIwMC5jCkBAIC04ODc1LDggKzg4NzUsNiBAQAogICAgICAgICB9CiAKIAlsZW5ndGggPSBtaW4oKGludCl3cnF1LT5lc3NpZC5sZW5ndGgsIElXX0VTU0lEX01BWF9TSVpFKTsKLQlpZiAoIWV4dHJhW2xlbmd0aCAtIDFdKQotCQlsZW5ndGgtLTsKIAogCXByaXYtPmNvbmZpZyB8PSBDRkdfU1RBVElDX0VTU0lEOwogCkBAIC04OTUzLDcgKzg5NTEsNyBAQAogCXN0cnVjdCBpcHdfcHJpdiAqcHJpdiA9IGllZWU4MDIxMV9wcml2KGRldik7CiAJSVBXX0RFQlVHX1dYKCJHZXR0aW5nIG5pY2tcbiIpOwogCW11dGV4X2xvY2soJnByaXYtPm11dGV4KTsKLQl3cnF1LT5kYXRhLmxlbmd0aCA9IHN0cmxlbihwcml2LT5uaWNrKSArIDE7CisJd3JxdS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4ocHJpdi0+bmljayk7CiAJbWVtY3B5KGV4dHJhLCBwcml2LT5uaWNrLCB3cnF1LT5kYXRhLmxlbmd0aCk7CiAJd3JxdS0+ZGF0YS5mbGFncyA9IDE7CS8qIGFjdGl2ZSAqLwogCW11dGV4X3VubG9jaygmcHJpdi0+bXV0ZXgpOwpAQCAtOTI3Niw5ICs5Mjc0LDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZwcml2LT5tdXRleCk7Ci0JaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUlOKQorCWlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX1NIT1JUKQogCQlwcml2LT5zaG9ydF9yZXRyeV9saW1pdCA9ICh1OCkgd3JxdS0+cmV0cnkudmFsdWU7Ci0JZWxzZSBpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpCisJZWxzZSBpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MT05HKQogCQlwcml2LT5sb25nX3JldHJ5X2xpbWl0ID0gKHU4KSB3cnF1LT5yZXRyeS52YWx1ZTsKIAllbHNlIHsKIAkJcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQgPSAodTgpIHdycXUtPnJldHJ5LnZhbHVlOwpAQCAtOTMwNywxMSArOTMwNSwxMSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9NQVgpIHsKLQkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwlpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9MT05HKSB7CisJCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9MT05HOwogCQl3cnF1LT5yZXRyeS52YWx1ZSA9IHByaXYtPmxvbmdfcmV0cnlfbGltaXQ7Ci0JfSBlbHNlIGlmICh3cnF1LT5yZXRyeS5mbGFncyAmIElXX1JFVFJZX01JTikgewotCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTUlOOworCX0gZWxzZSBpZiAod3JxdS0+cmV0cnkuZmxhZ3MgJiBJV19SRVRSWV9TSE9SVCkgeworCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfU0hPUlQ7CiAJCXdycXUtPnJldHJ5LnZhbHVlID0gcHJpdi0+c2hvcnRfcmV0cnlfbGltaXQ7CiAJfSBlbHNlIHsKIAkJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL29yaW5vY28uYwppbmRleCAxODQwYjY5Li45ZTE5YTk2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9vcmlub2NvLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvb3Jpbm9jby5jCkBAIC0zMDM3LDcgKzMwMzcsNyBAQAogCX0KIAogCWVycS0+ZmxhZ3MgPSAxOwotCWVycS0+bGVuZ3RoID0gc3RybGVuKGVzc2lkYnVmKSArIDE7CisJZXJxLT5sZW5ndGggPSBzdHJsZW4oZXNzaWRidWYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMDc4LDcgKzMwNzgsNyBAQAogCW1lbWNweShuaWNrYnVmLCBwcml2LT5uaWNrLCBJV19FU1NJRF9NQVhfU0laRSsxKTsKIAlvcmlub2NvX3VubG9jayhwcml2LCAmZmxhZ3MpOwogCi0JbnJxLT5sZW5ndGggPSBzdHJsZW4obmlja2J1ZikrMTsKKwlucnEtPmxlbmd0aCA9IHN0cmxlbihuaWNrYnVmKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzU3NSwxNCArMzU3NSwxNCBAQAogCQlycnEtPnZhbHVlID0gbGlmZXRpbWUgKiAxMDAwOwkvKiA/Pz8gKi8KIAl9IGVsc2UgewogCQkvKiBCeSBkZWZhdWx0LCBkaXNwbGF5IHRoZSBtaW4gbnVtYmVyICovCi0JCWlmICgocnJxLT5mbGFncyAmIElXX1JFVFJZX01BWCkpIHsKLQkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwkJaWYgKChycnEtPmZsYWdzICYgSVdfUkVUUllfTE9ORykpIHsKKwkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7CiAJCQlycnEtPnZhbHVlID0gbG9uZ19saW1pdDsKIAkJfSBlbHNlIHsKIAkJCXJycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVDsKIAkJCXJycS0+dmFsdWUgPSBzaG9ydF9saW1pdDsKIAkJCWlmKHNob3J0X2xpbWl0ICE9IGxvbmdfbGltaXQpCi0JCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9NSU47CisJCQkJcnJxLT5mbGFncyB8PSBJV19SRVRSWV9TSE9SVDsKIAkJfQogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3ByaXNtNTQvaXNsX2lvY3RsLmMKaW5kZXggYzA5ZmJmNy4uMjg2MzI1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcHJpc201NC9pc2xfaW9jdGwuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9wcmlzbTU0L2lzbF9pb2N0bC5jCkBAIC03NDIsOSArNzQyLDkgQEAKIAogCS8qIENoZWNrIGlmIHdlIHdlcmUgYXNrZWQgZm9yIGBhbnknICovCiAJaWYgKGR3cnEtPmZsYWdzICYmIGR3cnEtPmxlbmd0aCkgewotCQlpZiAoZHdycS0+bGVuZ3RoID4gbWluKDMzLCBJV19FU1NJRF9NQVhfU0laRSArIDEpKQorCQlpZiAoZHdycS0+bGVuZ3RoID4gMzIpCiAJCQlyZXR1cm4gLUUyQklHOwotCQllc3NpZC5sZW5ndGggPSBkd3JxLT5sZW5ndGggLSAxOworCQllc3NpZC5sZW5ndGggPSBkd3JxLT5sZW5ndGg7CiAJCW1lbWNweShlc3NpZC5vY3RldHMsIGV4dHJhLCBkd3JxLT5sZW5ndGgpOwogCX0gZWxzZQogCQllc3NpZC5sZW5ndGggPSAwOwpAQCAtODE0LDcgKzgxNCw3IEBACiAJZHdycS0+bGVuZ3RoID0gMDsKIAogCWRvd25fcmVhZCgmcHJpdi0+bWliX3NlbSk7Ci0JZHdycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2tuYW1lKSArIDE7CisJZHdycS0+bGVuZ3RoID0gc3RybGVuKHByaXYtPm5pY2tuYW1lKTsKIAltZW1jcHkoZXh0cmEsIHByaXYtPm5pY2tuYW1lLCBkd3JxLT5sZW5ndGgpOwogCXVwX3JlYWQoJnByaXYtPm1pYl9zZW0pOwogCkBAIC05OTIsOSArOTkyLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MSU1JVCkgewotCQlpZiAodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9NSU4pCisJCWlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX1NIT1JUKQogCQkJc2xpbWl0ID0gdndycS0+dmFsdWU7Ci0JCWVsc2UgaWYgKHZ3cnEtPmZsYWdzICYgSVdfUkVUUllfTUFYKQorCQllbHNlIGlmICh2d3JxLT5mbGFncyAmIElXX1JFVFJZX0xPTkcpCiAJCQlsbGltaXQgPSB2d3JxLT52YWx1ZTsKIAkJZWxzZSB7CiAJCQkvKiB3ZSBhcmUgYXNrZWQgdG8gc2V0IGJvdGggKi8KQEAgLTEwMzUsMTggKzEwMzUsMTggQEAKIAkJICAgIG1ndF9nZXRfcmVxdWVzdChwcml2LCBET1QxMV9PSURfTUFYVFhMSUZFVElNRSwgMCwgTlVMTCwgJnIpOwogCQl2d3JxLT52YWx1ZSA9IHIudSAqIDEwMjQ7CiAJCXZ3cnEtPmZsYWdzID0gSVdfUkVUUllfTElGRVRJTUU7Ci0JfSBlbHNlIGlmICgodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9NQVgpKSB7CisJfSBlbHNlIGlmICgodndycS0+ZmxhZ3MgJiBJV19SRVRSWV9MT05HKSkgewogCQkvKiB3ZSBhcmUgYXNrZWQgZm9yIHRoZSBsb25nIHJldHJ5IGxpbWl0ICovCiAJCXJ2YWx1ZSB8PQogCQkgICAgbWd0X2dldF9yZXF1ZXN0KHByaXYsIERPVDExX09JRF9MT05HUkVUUklFUywgMCwgTlVMTCwgJnIpOwogCQl2d3JxLT52YWx1ZSA9IHIudTsKLQkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01BWDsKKwkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX0xPTkc7CiAJfSBlbHNlIHsKIAkJLyogZGVmYXVsdC4gZ2V0IHRoZSAgc2hvcnQgcmV0cnkgbGltaXQgKi8KIAkJcnZhbHVlIHw9CiAJCSAgICBtZ3RfZ2V0X3JlcXVlc3QocHJpdiwgRE9UMTFfT0lEX1NIT1JUUkVUUklFUywgMCwgTlVMTCwgJnIpOwogCQl2d3JxLT52YWx1ZSA9IHIudTsKLQkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX01JTjsKKwkJdndycS0+ZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX1NIT1JUOwogCX0KIAogCXJldHVybiBydmFsdWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yYXlfY3MuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCmluZGV4IDQ1NzQyOTAuLmU4MjU0OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JheV9jcy5jCkBAIC0xMTczLDcgKzExNzMsNyBAQAogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJfSBlbHNlIHsKIAkJLyogQ2hlY2sgdGhlIHNpemUgb2YgdGhlIHN0cmluZyAqLwotCQlpZihkd3JxLT5sZW5ndGggPiBJV19FU1NJRF9NQVhfU0laRSArIDEpIHsKKwkJaWYoZHdycS0+bGVuZ3RoID4gSVdfRVNTSURfTUFYX1NJWkUpIHsKIAkJCXJldHVybiAtRTJCSUc7CiAJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3N0cmlwLmMKaW5kZXggY2NhZjI4ZS4uMzM3YzY5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3RyaXAuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zdHJpcC5jCkBAIC0xMzQyLDcgKzEzNDIsNyBAQAogCSAqICdicm9hZGNhc3QgaHViJyByYWRpbyAoRmlyc3QgYnl0ZSBvZiBhZGRyZXNzIGJlaW5nIDB4RkYgbWVhbnMgYnJvYWRjYXN0KQogCSAqLwogCWlmIChoYWRkci5jWzBdID09IDB4RkYpIHsKLQkJdTMyIGJyZCA9IDA7CisJCV9fYmUzMiBicmQgPSAwOwogCQlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXY7CiAKIAkJcmN1X3JlYWRfbG9jaygpOwpAQCAtMTQwNiw3ICsxNDA2LDcgQEAKIAlpbnQgZG9yZXNldCA9IChsb25nKSBqaWZmaWVzIC0gc3RyaXBfaW5mby0+d2F0Y2hkb2dfZG9yZXNldCA+PSAwOwogCWludCBkb3Byb2JlID0gKGxvbmcpIGppZmZpZXMgLSBzdHJpcF9pbmZvLT53YXRjaGRvZ19kb3Byb2JlID49IDAKIAkgICAgJiYgIWRvcmVzZXQ7Ci0JdTMyIGFkZHIsIGJyZDsKKwlfX2JlMzIgYWRkciwgYnJkOwogCiAJLyoKIAkgKiAxLiBJZiB3ZSBoYXZlIGEgcGFja2V0LCBlbmNhcHN1bGF0ZSBpdCBhbmQgcHV0IGl0IGluIHRoZSBidWZmZXIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3dsMzUwMV9jcy5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKaW5kZXggZTBkMjk0Yy4uZTNhZTVmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvd2wzNTAxX2NzLmMKQEAgLTE4MDIsMTUgKzE4MDIsMTUgQEAKIAkJCQkgICAgICAmcmV0cnksIHNpemVvZihyZXRyeSkpOwogCWlmIChyYykKIAkJZ290byBvdXQ7Ci0JaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTUFYKSB7Ci0JCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NQVg7CisJaWYgKHdycXUtPnJldHJ5LmZsYWdzICYgSVdfUkVUUllfTE9ORykgeworCQl3cnF1LT5yZXRyeS5mbGFncyA9IElXX1JFVFJZX0xJTUlUIHwgSVdfUkVUUllfTE9ORzsKIAkJZ290byBzZXRfdmFsdWU7CiAJfQogCXJjID0gd2wzNTAxX2dldF9taWJfdmFsdWUodGhpcywgV0wzNTAxX01JQl9BVFRSX1NIT1JUX1JFVFJZX0xJTUlULAogCQkJCSAgJnJldHJ5LCBzaXplb2YocmV0cnkpKTsKIAlpZiAocmMpCiAJCWdvdG8gb3V0OwotCXdycXUtPnJldHJ5LmZsYWdzID0gSVdfUkVUUllfTElNSVQgfCBJV19SRVRSWV9NSU47CisJd3JxdS0+cmV0cnkuZmxhZ3MgPSBJV19SRVRSWV9MSU1JVCB8IElXX1JFVFJZX1NIT1JUOwogc2V0X3ZhbHVlOgogCXdycXUtPnJldHJ5LnZhbHVlID0gcmV0cnk7CiAJd3JxdS0+cmV0cnkuZGlzYWJsZWQgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMDEuYwppbmRleCBjNTJlOWJjZi4uODBhZjlhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjAxLmMKQEAgLTExOSw3ICsxMTksNyBAQAogCXN3aXRjaCh1cmItPnN0YXR1cykgewogCQljYXNlIC1FSUxTRVE6CiAJCWNhc2UgLUVOT0RFVjoKLQkJY2FzZSAtRVRJTUVET1VUOgorCQljYXNlIC1FVElNRToKIAkJY2FzZSAtRU5PRU5UOgogCQljYXNlIC1FUElQRToKIAkJY2FzZSAtRU9WRVJGTE9XOgpAQCAtMjAxLDcgKzIwMSw3IEBACiAJc3dpdGNoKHVyYi0+c3RhdHVzKSB7CiAJCWNhc2UgLUVJTFNFUToKIAkJY2FzZSAtRU5PREVWOgotCQljYXNlIC1FVElNRURPVVQ6CisJCWNhc2UgLUVUSU1FOgogCQljYXNlIC1FTk9FTlQ6CiAJCWNhc2UgLUVQSVBFOgogCQljYXNlIC1FT1ZFUkZMT1c6CkBAIC0xMjE4LDcgKzEyMTgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZGF0YS0+bGVuZ3RoIDwgMSkKIAkJZGF0YS0+bGVuZ3RoID0gMTsKLQl6ZC0+ZXNzaWRsZW4gPSBkYXRhLT5sZW5ndGgtMTsKKwl6ZC0+ZXNzaWRsZW4gPSBkYXRhLT5sZW5ndGg7CiAJbWVtc2V0KHpkLT5lc3NpZCwgMCwgSVdfRVNTSURfTUFYX1NJWkUrMSk7CiAJbWVtY3B5KHpkLT5lc3NpZCwgZXNzaWQsIGRhdGEtPmxlbmd0aCk7CiAJcmV0dXJuIHpkMTIwMV9qb2luKHpkLCB6ZC0+ZXNzaWQsIHpkLT5lc3NpZGxlbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmMKaW5kZXggN2M0ZTMyYy4uYWE2NjFiMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuYwpAQCAtMjQ5LDcgKzI0OSw2IEBACiB7CiAJaW50IHI7CiAKLQlaRF9BU1NFUlQoIW11dGV4X2lzX2xvY2tlZCgmY2hpcC0+bXV0ZXgpKTsKIAltdXRleF9sb2NrKCZjaGlwLT5tdXRleCk7CiAJciA9IHpkX2lvcmVhZDE2X2xvY2tlZChjaGlwLCB2YWx1ZSwgYWRkcik7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CkBAIC0yNjAsNyArMjU5LDYgQEAKIHsKIAlpbnQgcjsKIAotCVpEX0FTU0VSVCghbXV0ZXhfaXNfbG9ja2VkKCZjaGlwLT5tdXRleCkpOwogCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKIAlyID0gemRfaW9yZWFkMzJfbG9ja2VkKGNoaXAsIHZhbHVlLCBhZGRyKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKQEAgLTI3MSw3ICsyNjksNiBAQAogewogCWludCByOwogCi0JWkRfQVNTRVJUKCFtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CiAJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwogCXIgPSB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBhZGRyKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKQEAgLTI4Miw3ICsyNzksNiBAQAogewogCWludCByOwogCi0JWkRfQVNTRVJUKCFtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CiAJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwogCXIgPSB6ZF9pb3dyaXRlMzJfbG9ja2VkKGNoaXAsIHZhbHVlLCBhZGRyKTsKIAltdXRleF91bmxvY2soJmNoaXAtPm11dGV4KTsKQEAgLTI5NCw3ICsyOTAsNiBAQAogewogCWludCByOwogCi0JWkRfQVNTRVJUKCFtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7CiAJbXV0ZXhfbG9jaygmY2hpcC0+bXV0ZXgpOwogCXIgPSB6ZF9pb3JlYWQzMnZfbG9ja2VkKGNoaXAsIHZhbHVlcywgYWRkcmVzc2VzLCBjb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CkBAIC0zMDYsNyArMzAxLDYgQEAKIHsKIAlpbnQgcjsKIAotCVpEX0FTU0VSVCghbXV0ZXhfaXNfbG9ja2VkKCZjaGlwLT5tdXRleCkpOwogCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKIAlyID0gemRfaW93cml0ZTMyYV9sb2NrZWQoY2hpcCwgaW9yZXFzLCBjb3VudCk7CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CkBAIC0zMzEsMTMgKzMyNSwyMiBAQAogCWNoaXAtPnBhdGNoX2NyMTU3ID0gKHZhbHVlID4+IDEzKSAmIDB4MTsKIAljaGlwLT5wYXRjaF82bV9iYW5kX2VkZ2UgPSAodmFsdWUgPj4gMjEpICYgMHgxOwogCWNoaXAtPm5ld19waHlfbGF5b3V0ID0gKHZhbHVlID4+IDMxKSAmIDB4MTsKKwljaGlwLT5saW5rX2xlZCA9ICgodmFsdWUgPj4gNCkgJiAxKSA/IExFRDEgOiBMRUQyOworCWNoaXAtPnN1cHBvcnRzX3R4X2xlZCA9IDE7CisJaWYgKHZhbHVlICYgKDEgPDwgMjQpKSB7IC8qIExFRCBzY2VuYXJpbyAqLworCQlpZiAodmFsdWUgJiAoMSA8PCAyOSkpCisJCQljaGlwLT5zdXBwb3J0c190eF9sZWQgPSAwOworCX0KIAogCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwKIAkJIlJGICVzICUjMDF4IFBBIHR5cGUgJSMwMXggcGF0Y2ggQ0NLICVkIHBhdGNoIENSMTU3ICVkICIKLQkJInBhdGNoIDZNICVkIG5ldyBQSFkgJWRcbiIsCisJCSJwYXRjaCA2TSAlZCBuZXcgUEhZICVkIGxpbmsgTEVEJWQgdHggbGVkICVkXG4iLAogCQl6ZF9yZl9uYW1lKCpyZl90eXBlKSwgKnJmX3R5cGUsCiAJCWNoaXAtPnBhX3R5cGUsIGNoaXAtPnBhdGNoX2Nja19nYWluLAotCQljaGlwLT5wYXRjaF9jcjE1NywgY2hpcC0+cGF0Y2hfNm1fYmFuZF9lZGdlLCBjaGlwLT5uZXdfcGh5X2xheW91dCk7CisJCWNoaXAtPnBhdGNoX2NyMTU3LCBjaGlwLT5wYXRjaF82bV9iYW5kX2VkZ2UsCisJCWNoaXAtPm5ld19waHlfbGF5b3V0LAorCQljaGlwLT5saW5rX2xlZCA9PSBMRUQxID8gMSA6IDIsCisJCWNoaXAtPnN1cHBvcnRzX3R4X2xlZCk7CiAJcmV0dXJuIDA7CiBlcnJvcjoKIAkqcmZfdHlwZSA9IDA7CkBAIC0xMTgxLDcgKzExODQsNyBAQAogCXU4IHZhbHVlID0gY2hpcC0+cHdyX2ludF92YWx1ZXNbY2hhbm5lbCAtIDFdOwogCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwgImNoYW5uZWwgJWQgcHdyX2ludCAlIzA0eFxuIiwKIAkJIGNoYW5uZWwsIHZhbHVlKTsKLQlyZXR1cm4gemRfaW93cml0ZTMyX2xvY2tlZChjaGlwLCB2YWx1ZSwgQ1IzMSk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgdmFsdWUsIENSMzEpOwogfQogCiBzdGF0aWMgaW50IHVwZGF0ZV9wd3JfY2FsKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1OCBjaGFubmVsKQpAQCAtMTE4OSwxMiArMTE5MiwxMiBAQAogCXU4IHZhbHVlID0gY2hpcC0+cHdyX2NhbF92YWx1ZXNbY2hhbm5lbC0xXTsKIAlkZXZfZGJnX2YoemRfY2hpcF9kZXYoY2hpcCksICJjaGFubmVsICVkIHB3cl9jYWwgJSMwNHhcbiIsCiAJCSBjaGFubmVsLCB2YWx1ZSk7Ci0JcmV0dXJuIHpkX2lvd3JpdGUzMl9sb2NrZWQoY2hpcCwgdmFsdWUsIENSNjgpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlLCBDUjY4KTsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfb2ZkbV9jYWwoc3RydWN0IHpkX2NoaXAgKmNoaXAsIHU4IGNoYW5uZWwpCiB7Ci0Jc3RydWN0IHpkX2lvcmVxMzIgaW9yZXFzWzNdOworCXN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1szXTsKIAogCWlvcmVxc1swXS5hZGRyID0gQ1I2NzsKIAlpb3JlcXNbMF0udmFsdWUgPSBjaGlwLT5vZmRtX2NhbF92YWx1ZXNbT0ZETV8zNk1fSU5ERVhdW2NoYW5uZWwtMV07CkBAIC0xMjA2LDcgKzEyMDksNyBAQAogCWRldl9kYmdfZih6ZF9jaGlwX2RldihjaGlwKSwKIAkJImNoYW5uZWwgJWQgb2ZkbV9jYWwgMzZNICUjMDR4IDQ4TSAlIzA0eCA1NE0gJSMwNHhcbiIsCiAJCWNoYW5uZWwsIGlvcmVxc1swXS52YWx1ZSwgaW9yZXFzWzFdLnZhbHVlLCBpb3JlcXNbMl0udmFsdWUpOwotCXJldHVybiB6ZF9pb3dyaXRlMzJhX2xvY2tlZChjaGlwLCBpb3JlcXMsIEFSUkFZX1NJWkUoaW9yZXFzKSk7CisJcmV0dXJuIHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKIH0KIAogc3RhdGljIGludCB1cGRhdGVfY2hhbm5lbF9pbnRlZ3JhdGlvbl9hbmRfY2FsaWJyYXRpb24oc3RydWN0IHpkX2NoaXAgKmNoaXAsCkBAIC0xMjE4LDcgKzEyMjEsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAlpZiAoY2hpcC0+aXNfemQxMjExYikgewotCQlzdGF0aWMgY29uc3Qgc3RydWN0IHpkX2lvcmVxMzIgaW9yZXFzW10gPSB7CisJCXN0YXRpYyBjb25zdCBzdHJ1Y3QgemRfaW9yZXExNiBpb3JlcXNbXSA9IHsKIAkJCXsgQ1I2OSwgMHgyOCB9LAogCQkJe30sCiAJCQl7IENSNjksIDB4MmEgfSwKQEAgLTEyMzAsNyArMTIzMyw3IEBACiAJCXIgPSB1cGRhdGVfcHdyX2NhbChjaGlwLCBjaGFubmVsKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKLQkJciA9IHpkX2lvd3JpdGUzMmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKKwkJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKIAkJaWYgKHIpCiAJCQlyZXR1cm4gcjsKIAl9CkBAIC0xMjUyLDcgKzEyNTUsNyBAQAogCWlmIChyKQogCQlyZXR1cm4gcjsKIAlkZXZfZGJnX2YoemRfY2hpcF9kZXYoY2hpcCksICJwYXRjaGluZyB2YWx1ZSAleFxuIiwgdmFsdWUgJiAweGZmKTsKLQlyZXR1cm4gemRfaW93cml0ZTMyX2xvY2tlZChjaGlwLCB2YWx1ZSAmIDB4ZmYsIENSNDcpOworCXJldHVybiB6ZF9pb3dyaXRlMTZfbG9ja2VkKGNoaXAsIHZhbHVlICYgMHhmZiwgQ1I0Nyk7CiB9CiAKIGludCB6ZF9jaGlwX3NldF9jaGFubmVsKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1OCBjaGFubmVsKQpAQCAtMTI5NSw5MiArMTI5OCw2MyBAQAogCXJldHVybiBjaGFubmVsOwogfQogCi1zdGF0aWMgdTE2IGxlZF9tYXNrKGludCBsZWQpCitpbnQgemRfY2hpcF9jb250cm9sX2xlZHMoc3RydWN0IHpkX2NoaXAgKmNoaXAsIGVudW0gbGVkX3N0YXR1cyBzdGF0dXMpCiB7Ci0Jc3dpdGNoIChsZWQpIHsKLQljYXNlIDE6Ci0JCXJldHVybiBMRUQxOwotCWNhc2UgMjoKLQkJcmV0dXJuIExFRDI7Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIDA7Ci0JfQotfQorCXN0YXRpYyBjb25zdCB6ZF9hZGRyX3QgYVtdID0geworCQlGV19MSU5LX1NUQVRVUywKKwkJQ1JfTEVELAorCX07CiAKLXN0YXRpYyBpbnQgcmVhZF9sZWRfcmVnKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MTYgKnN0YXR1cykKLXsKLQlaRF9BU1NFUlQobXV0ZXhfaXNfbG9ja2VkKCZjaGlwLT5tdXRleCkpOwotCXJldHVybiB6ZF9pb3JlYWQxNl9sb2NrZWQoY2hpcCwgc3RhdHVzLCBDUl9MRUQpOwotfQorCWludCByOworCXUxNiB2W0FSUkFZX1NJWkUoYSldOworCXN0cnVjdCB6ZF9pb3JlcTE2IGlvcmVxc1tBUlJBWV9TSVpFKGEpXSA9IHsKKwkJWzBdID0geyBGV19MSU5LX1NUQVRVUyB9LAorCQlbMV0gPSB7IENSX0xFRCB9LAorCX07CisJdTE2IG90aGVyX2xlZDsKIAotc3RhdGljIGludCB3cml0ZV9sZWRfcmVnKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MTYgc3RhdHVzKQotewotCVpEX0FTU0VSVChtdXRleF9pc19sb2NrZWQoJmNoaXAtPm11dGV4KSk7Ci0JcmV0dXJuIHpkX2lvd3JpdGUxNl9sb2NrZWQoY2hpcCwgc3RhdHVzLCBDUl9MRUQpOwotfQotCi1pbnQgemRfY2hpcF9sZWRfc3RhdHVzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgbGVkLCBlbnVtIGxlZF9zdGF0dXMgc3RhdHVzKQotewotCWludCByLCByZXQ7Ci0JdTE2IG1hc2sgPSBsZWRfbWFzayhsZWQpOwotCXUxNiByZWc7Ci0KLQlpZiAoIW1hc2spCi0JCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmNoaXAtPm11dGV4KTsKLQlyID0gcmVhZF9sZWRfcmVnKGNoaXAsICZyZWcpOworCXIgPSB6ZF9pb3JlYWQxNnZfbG9ja2VkKGNoaXAsIHYsIChjb25zdCB6ZF9hZGRyX3QgKilhLCBBUlJBWV9TSVpFKGEpKTsKIAlpZiAocikKLQkJcmV0dXJuIHI7CisJCWdvdG8gb3V0OworCisJb3RoZXJfbGVkID0gY2hpcC0+bGlua19sZWQgPT0gTEVEMSA/IExFRDIgOiBMRUQxOworCiAJc3dpdGNoIChzdGF0dXMpIHsKLQljYXNlIExFRF9TVEFUVVM6Ci0JCXJldHVybiAocmVnICYgbWFzaykgPyBMRURfT04gOiBMRURfT0ZGOwogCWNhc2UgTEVEX09GRjoKLQkJcmVnICY9IH5tYXNrOwotCQlyZXQgPSBMRURfT0ZGOworCQlpb3JlcXNbMF0udmFsdWUgPSBGV19MSU5LX09GRjsKKwkJaW9yZXFzWzFdLnZhbHVlID0gdlsxXSAmIH4oTEVEMXxMRUQyKTsKIAkJYnJlYWs7Ci0JY2FzZSBMRURfRkxJUDoKLQkJcmVnIF49IG1hc2s7Ci0JCXJldCA9IChyZWcmbWFzaykgPyBMRURfT04gOiBMRURfT0ZGOworCWNhc2UgTEVEX1NDQU5OSU5HOgorCQlpb3JlcXNbMF0udmFsdWUgPSBGV19MSU5LX09GRjsKKwkJaW9yZXFzWzFdLnZhbHVlID0gdlsxXSAmIH5vdGhlcl9sZWQ7CisJCWlmIChnZXRfc2Vjb25kcygpICUgMyA9PSAwKSB7CisJCQlpb3JlcXNbMV0udmFsdWUgJj0gfmNoaXAtPmxpbmtfbGVkOworCQl9IGVsc2UgeworCQkJaW9yZXFzWzFdLnZhbHVlIHw9IGNoaXAtPmxpbmtfbGVkOworCQl9CiAJCWJyZWFrOwotCWNhc2UgTEVEX09OOgotCQlyZWcgfD0gbWFzazsKLQkJcmV0ID0gTEVEX09OOworCWNhc2UgTEVEX0FTU09DSUFURUQ6CisJCWlvcmVxc1swXS52YWx1ZSA9IEZXX0xJTktfVFg7CisJCWlvcmVxc1sxXS52YWx1ZSA9IHZbMV0gJiB+b3RoZXJfbGVkOworCQlpb3JlcXNbMV0udmFsdWUgfD0gY2hpcC0+bGlua19sZWQ7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlyID0gd3JpdGVfbGVkX3JlZyhjaGlwLCByZWcpOwotCWlmIChyKSB7Ci0JCXJldCA9IHI7CisJCXIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CisKKwlpZiAodlswXSAhPSBpb3JlcXNbMF0udmFsdWUgfHwgdlsxXSAhPSBpb3JlcXNbMV0udmFsdWUpIHsKKwkJciA9IHpkX2lvd3JpdGUxNmFfbG9ja2VkKGNoaXAsIGlvcmVxcywgQVJSQVlfU0laRShpb3JlcXMpKTsKKwkJaWYgKHIpCisJCQlnb3RvIG91dDsKKwl9CisJciA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZjaGlwLT5tdXRleCk7CiAJcmV0dXJuIHI7CiB9CiAKLWludCB6ZF9jaGlwX2xlZF9mbGlwKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgbGVkLAotCWNvbnN0IHVuc2lnbmVkIGludCAqcGhhc2VzX21zZWNzLCB1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0JaW50IGksIHI7Ci0JZW51bSBsZWRfc3RhdHVzIHN0YXR1czsKLQotCXIgPSB6ZF9jaGlwX2xlZF9zdGF0dXMoY2hpcCwgbGVkLCBMRURfU1RBVFVTKTsKLQlpZiAocikKLQkJcmV0dXJuIHI7Ci0Jc3RhdHVzID0gcjsKLQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewotCQlyID0gemRfY2hpcF9sZWRfc3RhdHVzKGNoaXAsIGxlZCwgTEVEX0ZMSVApOwotCQlpZiAociA8IDApCi0JCQlnb3RvIG91dDsKLQkJbXNsZWVwKHBoYXNlc19tc2Vjc1tpXSk7Ci0JfQotCi1vdXQ6Ci0JemRfY2hpcF9sZWRfc3RhdHVzKGNoaXAsIGxlZCwgc3RhdHVzKTsKLQlyZXR1cm4gcjsKLX0KLQogaW50IHpkX2NoaXBfc2V0X2Jhc2ljX3JhdGVzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MTYgY3JfcmF0ZXMpCiB7CiAJaW50IHI7CkBAIC0xNjc5LDQgKzE2NTMsMyBAQAogCiAJcmV0dXJuIDA7CiB9Ci0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX2NoaXAuaAppbmRleCA0YjEyNTA4Li5hZTU5NTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9jaGlwLmgKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfY2hpcC5oCkBAIC00MjgsNiArNDI4LDcgQEAKIC8qIG1hc2tzIGZvciBjb250cm9sbGluZyBMRURzICovCiAjZGVmaW5lIExFRDEJCQkJMHgwMTAwCiAjZGVmaW5lIExFRDIJCQkJMHgwMjAwCisjZGVmaW5lIExFRF9TVwkJCQkweDA0MDAKIAogLyogU2VlbXMgdG8gaW5kaWNhdGUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBpcyBvdmVyLgogICovCkBAIC02MjksNiArNjMwLDEwIEBACiAjZGVmaW5lIEZXX1NPRlRfUkVTRVQgICAgICAgICAgIEZXX1JFRyg0KQogI2RlZmluZSBGV19GTEFTSF9DSEsgICAgICAgICAgICBGV19SRUcoNSkKIAorI2RlZmluZSBGV19MSU5LX09GRgkJMHgwCisjZGVmaW5lIEZXX0xJTktfVFgJCTB4MQorLyogMHgyIC0gbGluayBsZWQgb24/ICovCisKIGVudW0gewogCUNSX0JBU0VfT0ZGU0VUCQkJPSAweDkwMDAsCiAJRldfU1RBUlRfT0ZGU0VUCQkJPSAweGVlMDAsCkBAIC02NjMsOCArNjY4LDExIEBACiAJdTggcHdyX2ludF92YWx1ZXNbRTJQX0NIQU5ORUxfQ09VTlRdOwogCS8qIFNldFBvaW50T0ZETSBpbiB0aGUgdmVuZG9yIGRyaXZlciAqLwogCXU4IG9mZG1fY2FsX3ZhbHVlc1szXVtFMlBfQ0hBTk5FTF9DT1VOVF07Ci0JdTggcGFfdHlwZTo0LCBwYXRjaF9jY2tfZ2FpbjoxLCBwYXRjaF9jcjE1NzoxLCBwYXRjaF82bV9iYW5kX2VkZ2U6MSwKLQkgICBuZXdfcGh5X2xheW91dDoxLCBpc196ZDEyMTFiOjE7CisJdTE2IGxpbmtfbGVkOworCXVuc2lnbmVkIGludCBwYV90eXBlOjQsCisJCXBhdGNoX2Nja19nYWluOjEsIHBhdGNoX2NyMTU3OjEsIHBhdGNoXzZtX2JhbmRfZWRnZToxLAorCQluZXdfcGh5X2xheW91dDoxLAorCQlpc196ZDEyMTFiOjEsIHN1cHBvcnRzX3R4X2xlZDoxOwogfTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgemRfY2hpcCAqemRfdXNiX3RvX2NoaXAoc3RydWN0IHpkX3VzYiAqdXNiKQpAQCAtODEyLDE1ICs4MjAsMTIgQEAKIGludCB6ZF9jaGlwX3VubG9ja19waHlfcmVncyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCk7CiAKIGVudW0gbGVkX3N0YXR1cyB7Ci0JTEVEX09GRgkgICA9IDAsCi0JTEVEX09OICAgICA9IDEsCi0JTEVEX0ZMSVAgICA9IDIsCi0JTEVEX1NUQVRVUyA9IDMsCisJTEVEX09GRiA9IDAsCisJTEVEX1NDQU5OSU5HID0gMSwKKwlMRURfQVNTT0NJQVRFRCA9IDIsCiB9OwogCi1pbnQgemRfY2hpcF9sZWRfc3RhdHVzKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgbGVkLCBlbnVtIGxlZF9zdGF0dXMgc3RhdHVzKTsKLWludCB6ZF9jaGlwX2xlZF9mbGlwKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCBpbnQgbGVkLAotCSAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgKnBoYXNlc19tc2VjcywgdW5zaWduZWQgaW50IGNvdW50KTsKK2ludCB6ZF9jaGlwX2NvbnRyb2xfbGVkcyhzdHJ1Y3QgemRfY2hpcCAqY2hpcCwgZW51bSBsZWRfc3RhdHVzIHN0YXR1cyk7CiAKIGludCB6ZF9zZXRfYmVhY29uX2ludGVydmFsKHN0cnVjdCB6ZF9jaGlwICpjaGlwLCB1MzIgaW50ZXJ2YWwpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCmluZGV4IDE5ODlmMWMuLjJkMTI4MzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5jCkBAIC0zMyw2ICszMywxMCBAQAogc3RhdGljIHZvaWQgaWVlZV9pbml0KHN0cnVjdCBpZWVlODAyMTFfZGV2aWNlICppZWVlKTsKIHN0YXRpYyB2b2lkIHNvZnRtYWNfaW5pdChzdHJ1Y3QgaWVlZTgwMjExc29mdG1hY19kZXZpY2UgKnNtKTsKIAorc3RhdGljIHZvaWQgaG91c2VrZWVwaW5nX2luaXQoc3RydWN0IHpkX21hYyAqbWFjKTsKK3N0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19lbmFibGUoc3RydWN0IHpkX21hYyAqbWFjKTsKK3N0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19kaXNhYmxlKHN0cnVjdCB6ZF9tYWMgKm1hYyk7CisKIGludCB6ZF9tYWNfaW5pdChzdHJ1Y3QgemRfbWFjICptYWMsCiAJICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCSAgICAgICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC00Niw2ICs1MCw3IEBACiAJaWVlZV9pbml0KGllZWUpOwogCXNvZnRtYWNfaW5pdChpZWVlODAyMTFfcHJpdihuZXRkZXYpKTsKIAl6ZF9jaGlwX2luaXQoJm1hYy0+Y2hpcCwgbmV0ZGV2LCBpbnRmKTsKKwlob3VzZWtlZXBpbmdfaW5pdChtYWMpOwogCXJldHVybiAwOwogfQogCkBAIC0xNzgsNiArMTgzLDcgQEAKIAlpZiAociA8IDApCiAJCWdvdG8gZGlzYWJsZV9yeDsKIAorCWhvdXNla2VlcGluZ19lbmFibGUobWFjKTsKIAlpZWVlODAyMTFzb2Z0bWFjX3N0YXJ0KG5ldGRldik7CiAJcmV0dXJuIDA7CiBkaXNhYmxlX3J4OgpAQCAtMjA0LDYgKzIxMCw3IEBACiAJICovCiAKIAl6ZF9jaGlwX2Rpc2FibGVfcngoY2hpcCk7CisJaG91c2VrZWVwaW5nX2Rpc2FibGUobWFjKTsKIAlpZWVlODAyMTFzb2Z0bWFjX3N0b3AobmV0ZGV2KTsKIAogCXpkX2NoaXBfZGlzYWJsZV9od2ludChjaGlwKTsKQEAgLTEwODAsMyArMTA4Nyw0NiBAQAogCX0KIH0KICNlbmRpZiAvKiBERUJVRyAqLworCisjZGVmaW5lIExJTktfTEVEX1dPUktfREVMQVkgSFoKKworc3RhdGljIHZvaWQgbGlua19sZWRfaGFuZGxlcih2b2lkICpwKQoreworCXN0cnVjdCB6ZF9tYWMgKm1hYyA9IHA7CisJc3RydWN0IHpkX2NoaXAgKmNoaXAgPSAmbWFjLT5jaGlwOworCXN0cnVjdCBpZWVlODAyMTFzb2Z0bWFjX2RldmljZSAqc20gPSBpZWVlODAyMTFfcHJpdihtYWMtPm5ldGRldik7CisJaW50IGlzX2Fzc29jaWF0ZWQ7CisJaW50IHI7CisKKwlzcGluX2xvY2tfaXJxKCZtYWMtPmxvY2spOworCWlzX2Fzc29jaWF0ZWQgPSBzbS0+YXNzb2NpYXRlZCAhPSAwOworCXNwaW5fdW5sb2NrX2lycSgmbWFjLT5sb2NrKTsKKworCXIgPSB6ZF9jaGlwX2NvbnRyb2xfbGVkcyhjaGlwLAorCQkgICAgICAgICAgICAgICAgIGlzX2Fzc29jaWF0ZWQgPyBMRURfQVNTT0NJQVRFRCA6IExFRF9TQ0FOTklORyk7CisJaWYgKHIpCisJCWRldl9lcnIoemRfbWFjX2RldihtYWMpLCAiemRfY2hpcF9jb250cm9sX2xlZHMgZXJyb3IgJWRcbiIsIHIpOworCisJcXVldWVfZGVsYXllZF93b3JrKHpkX3dvcmtxdWV1ZSwgJm1hYy0+aG91c2VrZWVwaW5nLmxpbmtfbGVkX3dvcmssCisJCSAgICAgICAgICAgTElOS19MRURfV09SS19ERUxBWSk7Cit9CisKK3N0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19pbml0KHN0cnVjdCB6ZF9tYWMgKm1hYykKK3sKKwlJTklUX1dPUksoJm1hYy0+aG91c2VrZWVwaW5nLmxpbmtfbGVkX3dvcmssIGxpbmtfbGVkX2hhbmRsZXIsIG1hYyk7Cit9CisKK3N0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19lbmFibGUoc3RydWN0IHpkX21hYyAqbWFjKQoreworCWRldl9kYmdfZih6ZF9tYWNfZGV2KG1hYyksICJcbiIpOworCXF1ZXVlX2RlbGF5ZWRfd29yayh6ZF93b3JrcXVldWUsICZtYWMtPmhvdXNla2VlcGluZy5saW5rX2xlZF93b3JrLAorCQkJICAgMCk7Cit9CisKK3N0YXRpYyB2b2lkIGhvdXNla2VlcGluZ19kaXNhYmxlKHN0cnVjdCB6ZF9tYWMgKm1hYykKK3sKKwlkZXZfZGJnX2YoemRfbWFjX2RldihtYWMpLCAiXG4iKTsKKwljYW5jZWxfcmVhcm1pbmdfZGVsYXllZF93b3JrcXVldWUoemRfd29ya3F1ZXVlLAorCQkmbWFjLT5ob3VzZWtlZXBpbmcubGlua19sZWRfd29yayk7CisJemRfY2hpcF9jb250cm9sX2xlZHMoJm1hYy0+Y2hpcCwgTEVEX09GRik7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9tYWMuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCmluZGV4IDI5YjUxZmQuLmI4ZWEzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX21hYy5oCkBAIC0xMjAsNiArMTIwLDEwIEBACiAJTUFDX0ZJWEVEX0NIQU5ORUwgPSAweDAxLAogfTsKIAorc3RydWN0IGhvdXNla2VlcGluZyB7CisJc3RydWN0IHdvcmtfc3RydWN0IGxpbmtfbGVkX3dvcms7Cit9OworCiAjZGVmaW5lIFpEX01BQ19TVEFUU19CVUZGRVJfU0laRSAxNgogCiBzdHJ1Y3QgemRfbWFjIHsKQEAgLTEyOCw2ICsxMzIsNyBAQAogCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7CiAJLyogVW5sb2NrZWQgcmVhZGluZyBwb3NzaWJsZSAqLwogCXN0cnVjdCBpd19zdGF0aXN0aWNzIGl3X3N0YXRzOworCXN0cnVjdCBob3VzZWtlZXBpbmcgaG91c2VrZWVwaW5nOwogCXVuc2lnbmVkIGludCBzdGF0c19jb3VudDsKIAl1OCBxdWFsX2J1ZmZlcltaRF9NQUNfU1RBVFNfQlVGRkVSX1NJWkVdOwogCXU4IHJzc2lfYnVmZmVyW1pEX01BQ19TVEFUU19CVUZGRVJfU0laRV07CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF9uZXRkZXYuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCmluZGV4IDQ0MGVmMjQuLmFmM2E3YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3pkMTIxMXJ3L3pkX25ldGRldi5jCkBAIC04Miw3ICs4Miw3IEBACiAJCSAgICAgICB1bmlvbiBpd3JlcV9kYXRhICpyZXEsIGNoYXIgKmV4dHJhKQogewogCXN0cmNweShleHRyYSwgInpkMTIxMSIpOwotCXJlcS0+ZGF0YS5sZW5ndGggPSBzdHJsZW4oZXh0cmEpICsgMTsKKwlyZXEtPmRhdGEubGVuZ3RoID0gc3RybGVuKGV4dHJhKTsKIAlyZXEtPmRhdGEuZmxhZ3MgPSAxOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwppbmRleCAzMTAyN2U1Li41YzI2NWFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAjaW5jbHVkZSA8bmV0L2llZWU4MDIxMS5oPgogCiAjaW5jbHVkZSAiemRfZGVmLmgiCkBAIC0xMTEyLDEyICsxMTEzLDIwIEBACiAJLmRpc2Nvbm5lY3QJPSBkaXNjb25uZWN0LAogfTsKIAorc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnpkX3dvcmtxdWV1ZTsKKwogc3RhdGljIGludCBfX2luaXQgdXNiX2luaXQodm9pZCkKIHsKIAlpbnQgcjsKIAogCXByX2RlYnVnKCJ1c2JfaW5pdCgpXG4iKTsKIAorCXpkX3dvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGRyaXZlci5uYW1lKTsKKwlpZiAoemRfd29ya3F1ZXVlID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogY291bGRuJ3QgY3JlYXRlIHdvcmtxdWV1ZVxuIiwgZHJpdmVyLm5hbWUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKIAlyID0gdXNiX3JlZ2lzdGVyKCZkcml2ZXIpOwogCWlmIChyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAidXNiX3JlZ2lzdGVyKCkgZmFpbGVkLiBFcnJvciBudW1iZXIgJWRcbiIsIHIpOwpAQCAtMTEzMiw2ICsxMTQxLDcgQEAKIHsKIAlwcl9kZWJ1ZygidXNiX2V4aXQoKVxuIik7CiAJdXNiX2RlcmVnaXN0ZXIoJmRyaXZlcik7CisJZGVzdHJveV93b3JrcXVldWUoemRfd29ya3F1ZXVlKTsKIH0KIAogbW9kdWxlX2luaXQodXNiX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvemQxMjExcncvemRfdXNiLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAppbmRleCBkZWQzOWRlLi5lODFhMmQzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy96ZDEyMTFydy96ZF91c2IuaApAQCAtMjM4LDQgKzIzOCw2IEBACiAKIGludCB6ZF91c2JfcmZ3cml0ZShzdHJ1Y3QgemRfdXNiICp1c2IsIHUzMiB2YWx1ZSwgdTggYml0cyk7CiAKK2V4dGVybiBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqemRfd29ya3F1ZXVlOworCiAjZW5kaWYgLyogX1pEX1VTQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL29wcm9maWxlL29wcm9maWxlZnMuYyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jCmluZGV4IDcxYzJkYTIuLjU3NTY0MDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jCisrKyBiL2RyaXZlcnMvb3Byb2ZpbGUvb3Byb2ZpbGVmcy5jCkBAIC0zMSw3ICszMSw2IEBACiAJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpbm9kZS0+aV91aWQgPSAwOwogCQlpbm9kZS0+aV9naWQgPSAwOwotCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCQlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJfQpAQCAtMTEwLDggKzEwOSw4IEBACiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9vcGVuKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1Y3QgZmlsZSAqIGZpbHApCiB7Ci0JaWYgKGlub2RlLT51LmdlbmVyaWNfaXApCi0JCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJaWYgKGlub2RlLT5pX3ByaXZhdGUpCisJCWZpbHAtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE1OCw3ICsxNTcsNyBAQAogCWlmICghZCkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKLQlkLT5kX2lub2RlLT51LmdlbmVyaWNfaXAgPSB2YWw7CisJZC0+ZF9pbm9kZS0+aV9wcml2YXRlID0gdmFsOwogCXJldHVybiAwOwogfQogCkBAIC0xNzEsNyArMTcwLDcgQEAKIAlpZiAoIWQpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JZC0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwID0gdmFsOworCWQtPmRfaW5vZGUtPmlfcHJpdmF0ZSA9IHZhbDsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTk3LDcgKzE5Niw3IEBACiAJaWYgKCFkKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCWQtPmRfaW5vZGUtPnUuZ2VuZXJpY19pcCA9IHZhbDsKKwlkLT5kX2lub2RlLT5pX3ByaXZhdGUgPSB2YWw7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMgYi9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCmluZGV4IGZlODAwZGMuLjQzODk0ZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9wYy5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3BjLmMKQEAgLTMzNzQsNiArMzM3NCwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwYXJwb3J0X3BjX2luaXQodm9pZCkKIHsKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoUEFSQUxMRUxfQkFTRSkpCisJCXJldHVybiAtRU5PREVWOworI2VuZGlmCiAJaWYgKHBhcnNlX3BhcnBvcnRfcGFyYW1zKCkpCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BhcnBvcnQvcGFycG9ydF9zZXJpYWwuYyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCmluZGV4IDk4YjgzYTguLjc4YzBhMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvcGFycG9ydC9wYXJwb3J0X3NlcmlhbC5jCkBAIC0zNzQsNiArMzc0LDcgQEAKIAlyZXR1cm47CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KIHN0YXRpYyBpbnQgcGFycG9ydF9zZXJpYWxfcGNpX3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBwYXJwb3J0X3NlcmlhbF9wcml2YXRlICpwcml2ID0gcGNpX2dldF9kcnZkYXRhKGRldik7CkBAIC00MDcsMTQgKzQwOCwxNyBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHBhcnBvcnRfc2VyaWFsX3BjaV9kcml2ZXIgPSB7CiAJLm5hbWUJCT0gInBhcnBvcnRfc2VyaWFsIiwKIAkuaWRfdGFibGUJPSBwYXJwb3J0X3NlcmlhbF9wY2lfdGJsLAogCS5wcm9iZQkJPSBwYXJwb3J0X3NlcmlhbF9wY2lfcHJvYmUsCiAJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChwYXJwb3J0X3NlcmlhbF9wY2lfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZAk9IHBhcnBvcnRfc2VyaWFsX3BjaV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcGFycG9ydF9zZXJpYWxfcGNpX3Jlc3VtZSwKKyNlbmRpZgogfTsKIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9idXMuYyBiL2RyaXZlcnMvcGNpL2J1cy5jCmluZGV4IDVmN2RiOWQuLmFhZGFhM2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL2J1cy5jCkBAIC03Nyw5ICs3NywxMiBAQAogICogVGhpcyBhZGRzIGEgc2luZ2xlIHBjaSBkZXZpY2UgdG8gdGhlIGdsb2JhbAogICogZGV2aWNlIGxpc3QgYW5kIGFkZHMgc3lzZnMgYW5kIHByb2NmcyBlbnRyaWVzCiAgKi8KLXZvaWQgX19kZXZpbml0IHBjaV9idXNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoraW50IF9fZGV2aW5pdCBwY2lfYnVzX2FkZF9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldikKIHsKLQlkZXZpY2VfYWRkKCZkZXYtPmRldik7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSBkZXZpY2VfYWRkKCZkZXYtPmRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAogCWRvd25fd3JpdGUoJnBjaV9idXNfc2VtKTsKIAlsaXN0X2FkZF90YWlsKCZkZXYtPmdsb2JhbF9saXN0LCAmcGNpX2RldmljZXMpOwpAQCAtODcsNiArOTAsNyBAQAogCiAJcGNpX3Byb2NfYXR0YWNoX2RldmljZShkZXYpOwogCXBjaV9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKGRldik7CisJcmV0dXJuIDA7CiB9CiAKIC8qKgpAQCAtMTA0LDYgKzEwOCw3IEBACiB2b2lkIF9fZGV2aW5pdCBwY2lfYnVzX2FkZF9kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKKwlpbnQgcmV0dmFsOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CiAJCS8qCkBAIC0xMTIsNyArMTE3LDkgQEAKIAkJICovCiAJCWlmICghbGlzdF9lbXB0eSgmZGV2LT5nbG9iYWxfbGlzdCkpCiAJCQljb250aW51ZTsKLQkJcGNpX2J1c19hZGRfZGV2aWNlKGRldik7CisJCXJldHZhbCA9IHBjaV9idXNfYWRkX2RldmljZShkZXYpOworCQlpZiAocmV0dmFsKQorCQkJZGV2X2VycigmZGV2LT5kZXYsICJFcnJvciBhZGRpbmcgZGV2aWNlLCBjb250aW51aW5nXG4iKTsKIAl9CiAKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJmJ1cy0+ZGV2aWNlcywgYnVzX2xpc3QpIHsKQEAgLTEyOSwxMCArMTM2LDEzIEBACiAJCQkgICAgICAgbGlzdF9hZGRfdGFpbCgmZGV2LT5zdWJvcmRpbmF0ZS0+bm9kZSwKIAkJCQkJICAgICAgICZkZXYtPmJ1cy0+Y2hpbGRyZW4pOwogCQkJICAgICAgIHVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7Ci0JCSAgICAgICB9CisJCQl9CiAJCQlwY2lfYnVzX2FkZF9kZXZpY2VzKGRldi0+c3Vib3JkaW5hdGUpOwotCi0JCQlzeXNmc19jcmVhdGVfbGluaygmZGV2LT5zdWJvcmRpbmF0ZS0+Y2xhc3NfZGV2LmtvYmosICZkZXYtPmRldi5rb2JqLCAiYnJpZGdlIik7CisJCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfbGluaygmZGV2LT5zdWJvcmRpbmF0ZS0+Y2xhc3NfZGV2LmtvYmosCisJCQkJCQkgICAmZGV2LT5kZXYua29iaiwgImJyaWRnZSIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlkZXZfZXJyKCZkZXYtPmRldiwgIkVycm9yIGNyZWF0aW5nIHN5c2ZzICIKKwkJCQkJImJyaWRnZSBzeW1saW5rLCBjb250aW51aW5nLi4uXG4iKTsKIAkJfQogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocC5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKaW5kZXggYmUxMDRlYy4uN2ZmZjA3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwLmgKQEAgLTE1MCw2ICsxNTAsMTEgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIH07CiAKK3N0cnVjdCBhY3BpcGhwX2lvYXBpYyB7CisJc3RydWN0IHBjaV9kZXYgKmRldjsKKwl1MzIgZ3NpX2Jhc2U7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworfTsKIAogLyogUENJIGJ1cyBicmlkZ2UgSElEICovCiAjZGVmaW5lIEFDUElfUENJX0hPU1RfSElECQkiUE5QMEEwMyIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2FjcGlwaHBfZ2x1ZS5jCmluZGV4IGFlNjdhOGYuLjgzZThlNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvYWNwaXBocF9nbHVlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9hY3BpcGhwX2dsdWUuYwpAQCAtNTMsNiArNTMsOCBAQAogI2luY2x1ZGUgImFjcGlwaHAuaCIKIAogc3RhdGljIExJU1RfSEVBRChicmlkZ2VfbGlzdCk7CitzdGF0aWMgTElTVF9IRUFEKGlvYXBpY19saXN0KTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soaW9hcGljX2xpc3RfbG9jayk7CiAKICNkZWZpbmUgTVlfTkFNRSAiYWNwaXBocF9nbHVlIgogCkBAIC03OTcsNiArNzk5LDcgQEAKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAl1MzIgZ3NpX2Jhc2U7CiAJdTY0IHBoeXNfYWRkcjsKKwlzdHJ1Y3QgYWNwaXBocF9pb2FwaWMgKmlvYXBpYzsKIAogCS8qIEV2YWx1YXRlIF9TVEEgaWYgcHJlc2VudCAqLwogCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgJnN0YSk7CkBAIC04MTEsNDEgKzgxNCwxMDcgQEAKIAlpZiAoZ2V0X2dzaV9iYXNlKGhhbmRsZSwgJmdzaV9iYXNlKSkKIAkJcmV0dXJuIEFFX09LOwogCisJaW9hcGljID0ga21hbGxvYyhzaXplb2YoKmlvYXBpYyksIEdGUF9LRVJORUwpOworCWlmICghaW9hcGljKQorCQlyZXR1cm4gQUVfTk9fTUVNT1JZOworCiAJcGRldiA9IGdldF9hcGljX3BjaV9pbmZvKGhhbmRsZSk7CiAJaWYgKCFwZGV2KQotCQlyZXR1cm4gQUVfT0s7CisJCWdvdG8gZXhpdF9rZnJlZTsKIAotCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkgewotCQlwY2lfZGV2X3B1dChwZGV2KTsKLQkJcmV0dXJuIEFFX09LOwotCX0KKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCisJCWdvdG8gZXhpdF9wY2lfZGV2X3B1dDsKIAogCXBjaV9zZXRfbWFzdGVyKHBkZXYpOwogCi0JaWYgKHBjaV9yZXF1ZXN0X3JlZ2lvbihwZGV2LCAwLCAiSS9PIEFQSUMoYWNwaXBocCkiKSkgewotCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JCXBjaV9kZXZfcHV0KHBkZXYpOwotCQlyZXR1cm4gQUVfT0s7Ci0JfQorCWlmIChwY2lfcmVxdWVzdF9yZWdpb24ocGRldiwgMCwgIkkvTyBBUElDKGFjcGlwaHApIikpCisJCWdvdG8gZXhpdF9wY2lfZGlzYWJsZV9kZXZpY2U7CiAKIAlwaHlzX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7Ci0JaWYgKGFjcGlfcmVnaXN0ZXJfaW9hcGljKGhhbmRsZSwgcGh5c19hZGRyLCBnc2lfYmFzZSkpIHsKLQkJcGNpX3JlbGVhc2VfcmVnaW9uKHBkZXYsIDApOwotCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Ci0JCXBjaV9kZXZfcHV0KHBkZXYpOworCWlmIChhY3BpX3JlZ2lzdGVyX2lvYXBpYyhoYW5kbGUsIHBoeXNfYWRkciwgZ3NpX2Jhc2UpKQorCQlnb3RvIGV4aXRfcGNpX3JlbGVhc2VfcmVnaW9uOworCisJaW9hcGljLT5nc2lfYmFzZSA9IGdzaV9iYXNlOworCWlvYXBpYy0+ZGV2ID0gcGRldjsKKwlzcGluX2xvY2soJmlvYXBpY19saXN0X2xvY2spOworCWxpc3RfYWRkX3RhaWwoJmlvYXBpYy0+bGlzdCwgJmlvYXBpY19saXN0KTsKKwlzcGluX3VubG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisKKwlyZXR1cm4gQUVfT0s7CisKKyBleGl0X3BjaV9yZWxlYXNlX3JlZ2lvbjoKKwlwY2lfcmVsZWFzZV9yZWdpb24ocGRldiwgMCk7CisgZXhpdF9wY2lfZGlzYWJsZV9kZXZpY2U6CisJcGNpX2Rpc2FibGVfZGV2aWNlKHBkZXYpOworIGV4aXRfcGNpX2Rldl9wdXQ6CisJcGNpX2Rldl9wdXQocGRldik7CisgZXhpdF9rZnJlZToKKwlrZnJlZShpb2FwaWMpOworCisJcmV0dXJuIEFFX09LOworfQorCitzdGF0aWMgYWNwaV9zdGF0dXMKK2lvYXBpY19yZW1vdmUoYWNwaV9oYW5kbGUgaGFuZGxlLCB1MzIgbHZsLCB2b2lkICpjb250ZXh0LCB2b2lkICoqcnYpCit7CisJYWNwaV9zdGF0dXMgc3RhdHVzOworCXVuc2lnbmVkIGxvbmcgc3RhOworCWFjcGlfaGFuZGxlIHRtcDsKKwl1MzIgZ3NpX2Jhc2U7CisJc3RydWN0IGFjcGlwaHBfaW9hcGljICpwb3MsICpuLCAqaW9hcGljID0gTlVMTDsKKworCS8qIEV2YWx1YXRlIF9TVEEgaWYgcHJlc2VudCAqLworCXN0YXR1cyA9IGFjcGlfZXZhbHVhdGVfaW50ZWdlcihoYW5kbGUsICJfU1RBIiwgTlVMTCwgJnN0YSk7CisJaWYgKEFDUElfU1VDQ0VTUyhzdGF0dXMpICYmIHN0YSAhPSBBQ1BJX1NUQV9BTEwpCisJCXJldHVybiBBRV9DVFJMX0RFUFRIOworCisJLyogU2NhbiBvbmx5IFBDSSBidXMgc2NvcGUgKi8KKwlzdGF0dXMgPSBhY3BpX2dldF9oYW5kbGUoaGFuZGxlLCAiX0hJRCIsICZ0bXApOworCWlmIChBQ1BJX1NVQ0NFU1Moc3RhdHVzKSkKKwkJcmV0dXJuIEFFX0NUUkxfREVQVEg7CisKKwlpZiAoZ2V0X2dzaV9iYXNlKGhhbmRsZSwgJmdzaV9iYXNlKSkKIAkJcmV0dXJuIEFFX09LOworCisJYWNwaV91bnJlZ2lzdGVyX2lvYXBpYyhoYW5kbGUsIGdzaV9iYXNlKTsKKworCXNwaW5fbG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHBvcywgbiwgJmlvYXBpY19saXN0LCBsaXN0KSB7CisJCWlmIChwb3MtPmdzaV9iYXNlICE9IGdzaV9iYXNlKQorCQkJY29udGludWU7CisJCWlvYXBpYyA9IHBvczsKKwkJbGlzdF9kZWwoJmlvYXBpYy0+bGlzdCk7CisJCWJyZWFrOwogCX0KKwlzcGluX3VubG9jaygmaW9hcGljX2xpc3RfbG9jayk7CisKKwlpZiAoIWlvYXBpYykKKwkJcmV0dXJuIEFFX09LOworCisJcGNpX3JlbGVhc2VfcmVnaW9uKGlvYXBpYy0+ZGV2LCAwKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoaW9hcGljLT5kZXYpOworCXBjaV9kZXZfcHV0KGlvYXBpYy0+ZGV2KTsKKwlrZnJlZShpb2FwaWMpOwogCiAJcmV0dXJuIEFFX09LOwogfQogCiBzdGF0aWMgaW50IGFjcGlwaHBfY29uZmlndXJlX2lvYXBpY3MoYWNwaV9oYW5kbGUgaGFuZGxlKQogeworCWlvYXBpY19hZGQoaGFuZGxlLCAwLCBOVUxMLCBOVUxMKTsKIAlhY3BpX3dhbGtfbmFtZXNwYWNlKEFDUElfVFlQRV9ERVZJQ0UsIGhhbmRsZSwKIAkJCSAgICBBQ1BJX1VJTlQzMl9NQVgsIGlvYXBpY19hZGQsIE5VTEwsIE5VTEwpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGFjcGlwaHBfdW5jb25maWd1cmVfaW9hcGljcyhhY3BpX2hhbmRsZSBoYW5kbGUpCit7CisJaW9hcGljX3JlbW92ZShoYW5kbGUsIDAsIE5VTEwsIE5VTEwpOworCWFjcGlfd2Fsa19uYW1lc3BhY2UoQUNQSV9UWVBFX0RFVklDRSwgaGFuZGxlLAorCQkJICAgIEFDUElfVUlOVDMyX01BWCwgaW9hcGljX3JlbW92ZSwgTlVMTCwgTlVMTCk7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgcG93ZXJfb25fc2xvdChzdHJ1Y3QgYWNwaXBocF9zbG90ICpzbG90KQogewogCWFjcGlfc3RhdHVzIHN0YXR1czsKQEAgLTk5Nyw3ICsxMDY2LDcgQEAKICAqIEBoYW5kbGU6IGhhbmRsZSB0byBhY3BpIG5hbWVzcGFjZQogICoKICAqLwotaW50IGFjcGlwaHBfYnVzX3RyaW0oYWNwaV9oYW5kbGUgaGFuZGxlKQorc3RhdGljIGludCBhY3BpcGhwX2J1c190cmltKGFjcGlfaGFuZGxlIGhhbmRsZSkKIHsKIAlzdHJ1Y3QgYWNwaV9kZXZpY2UgKmRldmljZTsKIAlpbnQgcmV0dmFsOwpAQCAtMTA3NCwxMCArMTE0MywxMSBAQAogCiAJcGNpX2J1c19hc3NpZ25fcmVzb3VyY2VzKGJ1cyk7CiAJYWNwaXBocF9zYW5pdGl6ZV9idXMoYnVzKTsKKwlhY3BpcGhwX3NldF9ocHBfdmFsdWVzKHNsb3QtPmJyaWRnZS0+aGFuZGxlLCBidXMpOworCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVuYywgJnNsb3QtPmZ1bmNzLCBzaWJsaW5nKQorCQlhY3BpcGhwX2NvbmZpZ3VyZV9pb2FwaWNzKGZ1bmMtPmhhbmRsZSk7CiAJcGNpX2VuYWJsZV9icmlkZ2VzKGJ1cyk7CiAJcGNpX2J1c19hZGRfZGV2aWNlcyhidXMpOwotCWFjcGlwaHBfc2V0X2hwcF92YWx1ZXMoc2xvdC0+YnJpZGdlLT5oYW5kbGUsIGJ1cyk7Ci0JYWNwaXBocF9jb25maWd1cmVfaW9hcGljcyhzbG90LT5icmlkZ2UtPmhhbmRsZSk7CiAKIAkvKiBhc3NvY2lhdGUgcGNpX2RldiB0byBvdXIgcmVwcmVzZW50YXRpb24gKi8KIAlsaXN0X2Zvcl9lYWNoIChsLCAmc2xvdC0+ZnVuY3MpIHsKQEAgLTExMDMsNiArMTE3MywxNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKK3N0YXRpYyB2b2lkIGRpc2FibGVfYnJpZGdlcyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXY7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZidXMtPmRldmljZXMsIGJ1c19saXN0KSB7CisJCWlmIChkZXYtPnN1Ym9yZGluYXRlKSB7CisJCQlkaXNhYmxlX2JyaWRnZXMoZGV2LT5zdWJvcmRpbmF0ZSk7CisJCQlwY2lfZGlzYWJsZV9kZXZpY2UoZGV2KTsKKwkJfQorCX0KK30KIAogLyoqCiAgKiBkaXNhYmxlX2RldmljZSAtIGRpc2FibGUgYSBzbG90CkBAIC0xMTI3LDYgKzEyMDcsMTkgQEAKIAkJCWZ1bmMtPmJyaWRnZSA9IE5VTEw7CiAJCX0KIAorCQlpZiAoZnVuYy0+cGNpX2RldikgeworCQkJcGNpX3N0b3BfYnVzX2RldmljZShmdW5jLT5wY2lfZGV2KTsKKwkJCWlmIChmdW5jLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSkgeworCQkJCWRpc2FibGVfYnJpZGdlcyhmdW5jLT5wY2lfZGV2LT5zdWJvcmRpbmF0ZSk7CisJCQkJcGNpX2Rpc2FibGVfZGV2aWNlKGZ1bmMtPnBjaV9kZXYpOworCQkJfQorCQl9CisJfQorCisJbGlzdF9mb3JfZWFjaCAobCwgJnNsb3QtPmZ1bmNzKSB7CisJCWZ1bmMgPSBsaXN0X2VudHJ5KGwsIHN0cnVjdCBhY3BpcGhwX2Z1bmMsIHNpYmxpbmcpOworCisJCWFjcGlwaHBfdW5jb25maWd1cmVfaW9hcGljcyhmdW5jLT5oYW5kbGUpOwogCQlhY3BpcGhwX2J1c190cmltKGZ1bmMtPmhhbmRsZSk7CiAJCS8qIHRyeSB0byByZW1vdmUgYW55d2F5LgogCQkgKiBhY3BpcGhwX2J1c19hZGQgbWlnaHQgaGF2ZSBiZWVuIGZhaWxlZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvY3BxcGhwX3N5c2ZzLmMKaW5kZXggOGIzZGEwMC4uNWJhYjY2NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9jcHFwaHBfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL2NwcXBocF9zeXNmcy5jCkBAIC0xNDAsNyArMTQwLDcgQEAKIAogc3RhdGljIGludCBvcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCXN0cnVjdCBjb250cm9sbGVyICpjdHJsID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzdHJ1Y3QgY29udHJvbGxlciAqY3RybCA9IGlub2RlLT5pX3ByaXZhdGU7CiAJc3RydWN0IGN0cmxfZGJnICpkYmc7CiAJaW50IHJldHZhbCA9IC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvZmFrZXBocC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKaW5kZXggZGQyYjc2Mi4uMDVhNGYwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9mYWtlcGhwLmMKQEAgLTE3Niw3ICsxNzYsOSBAQAogCXN0cnVjdCBwY2lfYnVzICpidXMgPSB0ZW1wLT5idXM7CiAJc3RydWN0IHBjaV9kZXYgKmRldjsKIAlpbnQgZnVuYzsKKwlpbnQgcmV0dmFsOwogCXU4IGhkcl90eXBlOworCiAJaWYgKCFwY2lfcmVhZF9jb25maWdfYnl0ZSh0ZW1wLCBQQ0lfSEVBREVSX1RZUEUsICZoZHJfdHlwZSkpIHsKIAkJdGVtcC0+aGRyX3R5cGUgPSBoZHJfdHlwZSAmIDB4N2Y7CiAJCWlmICghcGNpX2ZpbmRfc2xvdChidXMtPm51bWJlciwgdGVtcC0+ZGV2Zm4pKSB7CkBAIC0xODUsOCArMTg3LDEyIEBACiAJCQkJZGJnKCJOZXcgZGV2aWNlIG9uICVzIGZ1bmN0aW9uICV4OiV4XG4iLAogCQkJCQlidXMtPm5hbWUsIHRlbXAtPmRldmZuID4+IDMsCiAJCQkJCXRlbXAtPmRldmZuICYgNyk7Ci0JCQkJcGNpX2J1c19hZGRfZGV2aWNlKGRldik7Ci0JCQkJYWRkX3Nsb3QoZGV2KTsKKwkJCQlyZXR2YWwgPSBwY2lfYnVzX2FkZF9kZXZpY2UoZGV2KTsKKwkJCQlpZiAocmV0dmFsKQorCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgImVycm9yIGFkZGluZyAiCisJCQkJCQkiZGV2aWNlLCBjb250aW51aW5nLlxuIik7CisJCQkJZWxzZQorCQkJCQlhZGRfc2xvdChkZXYpOwogCQkJfQogCQl9CiAJCS8qIG11bHRpZnVuY3Rpb24gZGV2aWNlPyAqLwpAQCAtMjA1LDggKzIxMSwxMiBAQAogCQkJCQlkYmcoIk5ldyBkZXZpY2Ugb24gJXMgZnVuY3Rpb24gJXg6JXhcbiIsCiAJCQkJCQlidXMtPm5hbWUsIHRlbXAtPmRldmZuID4+IDMsCiAJCQkJCQl0ZW1wLT5kZXZmbiAmIDcpOwotCQkJCQlwY2lfYnVzX2FkZF9kZXZpY2UoZGV2KTsKLQkJCQkJYWRkX3Nsb3QoZGV2KTsKKwkJCQkJcmV0dmFsID0gcGNpX2J1c19hZGRfZGV2aWNlKGRldik7CisJCQkJCWlmIChyZXR2YWwpCisJCQkJCQlkZXZfZXJyKCZkZXYtPmRldiwgImVycm9yIGFkZGluZyAiCisJCQkJCQkJImRldmljZSwgY29udGludWluZy5cbiIpOworCQkJCQllbHNlCisJCQkJCQlhZGRfc2xvdChkZXYpOwogCQkJCX0KIAkJCX0KIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Zy5oIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Zy5oCmluZGV4IGU5MjliN2MuLjc3MjUyM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWcuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaV9ob3RwbHVnLmgKQEAgLTE3Miw4ICsxNzIsOCBAQAogCiBleHRlcm4gaW50IHBjaV9ocF9yZWdpc3RlcgkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpOwogZXh0ZXJuIGludCBwY2lfaHBfZGVyZWdpc3RlcgkJKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpOwotZXh0ZXJuIGludCBwY2lfaHBfY2hhbmdlX3Nsb3RfaW5mbwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwKLQkJCQkJIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbyk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBwY2lfaHBfY2hhbmdlX3Nsb3RfaW5mbwkoc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwKKwkJCQkJCSBzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8gKmluZm8pOwogZXh0ZXJuIHN0cnVjdCBzdWJzeXN0ZW0gcGNpX2hvdHBsdWdfc2xvdHNfc3Vic3lzOwogCiAvKiBQQ0kgU2V0dGluZyBSZWNvcmQgKFR5cGUgMCkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpX2hvdHBsdWdfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKaW5kZXggYjdiMzc4ZC4uZTI4MjNlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKKysrIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2lfaG90cGx1Z19jb3JlLmMKQEAgLTQ4MiwzMSArNDgyLDk1IEBACiAKIHN0YXRpYyBpbnQgZnNfYWRkX3Nsb3QgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpCiB7Ci0JaWYgKGhhc19wb3dlcl9maWxlKHNsb3QpID09IDApCi0JCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfcG93ZXIuYXR0cik7CisJaW50IHJldHZhbCA9IDA7CiAKLQlpZiAoaGFzX2F0dGVudGlvbl9maWxlKHNsb3QpID09IDApCi0JCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfYXR0ZW50aW9uLmF0dHIpOworCWlmIChoYXNfcG93ZXJfZmlsZShzbG90KSA9PSAwKSB7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfcG93ZXIuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXRfcG93ZXI7CisJfQogCi0JaWYgKGhhc19sYXRjaF9maWxlKHNsb3QpID09IDApCi0JCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfbGF0Y2guYXR0cik7CisJaWYgKGhhc19hdHRlbnRpb25fZmlsZShzbG90KSA9PSAwKSB7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfYXR0ZW50aW9uLmF0dHIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBleGl0X2F0dGVudGlvbjsKKwl9CiAKLQlpZiAoaGFzX2FkYXB0ZXJfZmlsZShzbG90KSA9PSAwKQotCQlzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX3ByZXNlbmNlLmF0dHIpOworCWlmIChoYXNfbGF0Y2hfZmlsZShzbG90KSA9PSAwKSB7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfbGF0Y2guYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXRfbGF0Y2g7CisJfQogCi0JaWYgKGhhc19hZGRyZXNzX2ZpbGUoc2xvdCkgPT0gMCkKLQkJc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9hZGRyZXNzLmF0dHIpOworCWlmIChoYXNfYWRhcHRlcl9maWxlKHNsb3QpID09IDApIHsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCisJCQkJCSAgICZob3RwbHVnX3Nsb3RfYXR0cl9wcmVzZW5jZS5hdHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXhpdF9hZGFwdGVyOworCX0KIAotCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpID09IDApCi0JCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKKwlpZiAoaGFzX2FkZHJlc3NfZmlsZShzbG90KSA9PSAwKSB7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfYWRkcmVzcy5hdHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXhpdF9hZGRyZXNzOworCX0KIAorCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpID09IDApIHsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnNsb3QtPmtvYmosCisJCQkJCSAgICZob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkLmF0dHIpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBleGl0X21heF9zcGVlZDsKKwl9CisKKwlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSA9PSAwKSB7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKKwkJaWYgKHJldHZhbCkKKwkJCWdvdG8gZXhpdF9jdXJfc3BlZWQ7CisJfQorCisJaWYgKGhhc190ZXN0X2ZpbGUoc2xvdCkgPT0gMCkgeworCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwKKwkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX3Rlc3QuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGV4aXRfdGVzdDsKKwl9CisKKwlnb3RvIGV4aXQ7CisKK2V4aXRfdGVzdDoKIAlpZiAoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSA9PSAwKQotCQlzeXNmc19jcmVhdGVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7CisJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfY3VyX2J1c19zcGVlZC5hdHRyKTsKIAotCWlmIChoYXNfdGVzdF9maWxlKHNsb3QpID09IDApCi0JCXN5c2ZzX2NyZWF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfdGVzdC5hdHRyKTsKK2V4aXRfY3VyX3NwZWVkOgorCWlmIChoYXNfbWF4X2J1c19zcGVlZF9maWxlKHNsb3QpID09IDApCisJCXN5c2ZzX3JlbW92ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfbWF4X2J1c19zcGVlZC5hdHRyKTsKIAotCXJldHVybiAwOworZXhpdF9tYXhfc3BlZWQ6CisJaWYgKGhhc19hZGRyZXNzX2ZpbGUoc2xvdCkgPT0gMCkKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9hZGRyZXNzLmF0dHIpOworCitleGl0X2FkZHJlc3M6CisJaWYgKGhhc19hZGFwdGVyX2ZpbGUoc2xvdCkgPT0gMCkKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9wcmVzZW5jZS5hdHRyKTsKKworZXhpdF9hZGFwdGVyOgorCWlmIChoYXNfbGF0Y2hfZmlsZShzbG90KSA9PSAwKQorCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX2xhdGNoLmF0dHIpOworCitleGl0X2xhdGNoOgorCWlmIChoYXNfYXR0ZW50aW9uX2ZpbGUoc2xvdCkgPT0gMCkKKwkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9hdHRlbnRpb24uYXR0cik7CisKK2V4aXRfYXR0ZW50aW9uOgorCWlmIChoYXNfcG93ZXJfZmlsZShzbG90KSA9PSAwKQorCQlzeXNmc19yZW1vdmVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX3Bvd2VyLmF0dHIpOworZXhpdF9wb3dlcjoKK2V4aXQ6CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgZnNfcmVtb3ZlX3Nsb3QgKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QpCkBAIC02MjYsOCArNjkwLDExIEBACiAgKgogICogUmV0dXJucyAwIGlmIHN1Y2Nlc3NmdWwsIGFueXRoaW5nIGVsc2UgZm9yIGFuIGVycm9yLgogICovCi1pbnQgcGNpX2hwX2NoYW5nZV9zbG90X2luZm8gKHN0cnVjdCBob3RwbHVnX3Nsb3QgKnNsb3QsIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbykKK2ludCBfX211c3RfY2hlY2sgcGNpX2hwX2NoYW5nZV9zbG90X2luZm8oc3RydWN0IGhvdHBsdWdfc2xvdCAqc2xvdCwKKwkJCQkJIHN0cnVjdCBob3RwbHVnX3Nsb3RfaW5mbyAqaW5mbykKIHsKKwlpbnQgcmV0dmFsOworCiAJaWYgKChzbG90ID09IE5VTEwpIHx8IChpbmZvID09IE5VTEwpKQogCQlyZXR1cm4gLUVOT0RFVjsKIApAQCAtNjM2LDMyICs3MDMsNjAgQEAKIAkqIGZvciB0aGUgZmlsZXMgcmVmZXJyaW5nIHRvIHRoZSBmaWVsZHMgdGhhdCBoYXZlIG5vdyBjaGFuZ2VkLgogCSovCiAJaWYgKChoYXNfcG93ZXJfZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+cG93ZXJfc3RhdHVzICE9IGluZm8tPnBvd2VyX3N0YXR1cykpCi0JCXN5c2ZzX3VwZGF0ZV9maWxlKCZzbG90LT5rb2JqLCAmaG90cGx1Z19zbG90X2F0dHJfcG93ZXIuYXR0cik7CisJICAgIChzbG90LT5pbmZvLT5wb3dlcl9zdGF0dXMgIT0gaW5mby0+cG93ZXJfc3RhdHVzKSkgeworCQlyZXR2YWwgPSBzeXNmc191cGRhdGVfZmlsZSgmc2xvdC0+a29iaiwKKwkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX3Bvd2VyLmF0dHIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlpZiAoKGhhc19hdHRlbnRpb25fZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+YXR0ZW50aW9uX3N0YXR1cyAhPSBpbmZvLT5hdHRlbnRpb25fc3RhdHVzKSkKLQkJc3lzZnNfdXBkYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9hdHRlbnRpb24uYXR0cik7CisJICAgIChzbG90LT5pbmZvLT5hdHRlbnRpb25fc3RhdHVzICE9IGluZm8tPmF0dGVudGlvbl9zdGF0dXMpKSB7CisJCXJldHZhbCA9IHN5c2ZzX3VwZGF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfYXR0ZW50aW9uLmF0dHIpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKwl9CiAKIAlpZiAoKGhhc19sYXRjaF9maWxlKHNsb3QpID09IDApICYmCi0JICAgIChzbG90LT5pbmZvLT5sYXRjaF9zdGF0dXMgIT0gaW5mby0+bGF0Y2hfc3RhdHVzKSkKLQkJc3lzZnNfdXBkYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9sYXRjaC5hdHRyKTsKKwkgICAgKHNsb3QtPmluZm8tPmxhdGNoX3N0YXR1cyAhPSBpbmZvLT5sYXRjaF9zdGF0dXMpKSB7CisJCXJldHZhbCA9IHN5c2ZzX3VwZGF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfbGF0Y2guYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWlmICgoaGFzX2FkYXB0ZXJfZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+YWRhcHRlcl9zdGF0dXMgIT0gaW5mby0+YWRhcHRlcl9zdGF0dXMpKQotCQlzeXNmc191cGRhdGVfZmlsZSgmc2xvdC0+a29iaiwgJmhvdHBsdWdfc2xvdF9hdHRyX3ByZXNlbmNlLmF0dHIpOworCSAgICAoc2xvdC0+aW5mby0+YWRhcHRlcl9zdGF0dXMgIT0gaW5mby0+YWRhcHRlcl9zdGF0dXMpKSB7CisJCXJldHZhbCA9IHN5c2ZzX3VwZGF0ZV9maWxlKCZzbG90LT5rb2JqLAorCQkJCQkgICAmaG90cGx1Z19zbG90X2F0dHJfcHJlc2VuY2UuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWlmICgoaGFzX2FkZHJlc3NfZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+YWRkcmVzcyAhPSBpbmZvLT5hZGRyZXNzKSkKLQkJc3lzZnNfdXBkYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9hZGRyZXNzLmF0dHIpOworCSAgICAoc2xvdC0+aW5mby0+YWRkcmVzcyAhPSBpbmZvLT5hZGRyZXNzKSkgeworCQlyZXR2YWwgPSBzeXNmc191cGRhdGVfZmlsZSgmc2xvdC0+a29iaiwKKwkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX2FkZHJlc3MuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWlmICgoaGFzX21heF9idXNfc3BlZWRfZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCAhPSBpbmZvLT5tYXhfYnVzX3NwZWVkKSkKLQkJc3lzZnNfdXBkYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9tYXhfYnVzX3NwZWVkLmF0dHIpOworCSAgICAoc2xvdC0+aW5mby0+bWF4X2J1c19zcGVlZCAhPSBpbmZvLT5tYXhfYnVzX3NwZWVkKSkgeworCQlyZXR2YWwgPSBzeXNmc191cGRhdGVfZmlsZSgmc2xvdC0+a29iaiwKKwkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX21heF9idXNfc3BlZWQuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCWlmICgoaGFzX2N1cl9idXNfc3BlZWRfZmlsZShzbG90KSA9PSAwKSAmJgotCSAgICAoc2xvdC0+aW5mby0+Y3VyX2J1c19zcGVlZCAhPSBpbmZvLT5jdXJfYnVzX3NwZWVkKSkKLQkJc3lzZnNfdXBkYXRlX2ZpbGUoJnNsb3QtPmtvYmosICZob3RwbHVnX3Nsb3RfYXR0cl9jdXJfYnVzX3NwZWVkLmF0dHIpOworCSAgICAoc2xvdC0+aW5mby0+Y3VyX2J1c19zcGVlZCAhPSBpbmZvLT5jdXJfYnVzX3NwZWVkKSkgeworCQlyZXR2YWwgPSBzeXNmc191cGRhdGVfZmlsZSgmc2xvdC0+a29iaiwKKwkJCQkJICAgJmhvdHBsdWdfc2xvdF9hdHRyX2N1cl9idXNfc3BlZWQuYXR0cik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCW1lbWNweSAoc2xvdC0+aW5mbywgaW5mbywgc2l6ZW9mIChzdHJ1Y3QgaG90cGx1Z19zbG90X2luZm8pKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2llaHBfY3RybC5jCmluZGV4IDMzZDE5ODcuLjQxMjkwYTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpZWhwX2N0cmwuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWVocF9jdHJsLmMKQEAgLTc2MiwxNCArNzYyLDE0IEBACiAJaWYgKHJjIHx8ICFnZXRzdGF0dXMpIHsKIAkJaW5mbygiJXM6IG5vIGFkYXB0ZXIgb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwogCQltdXRleF91bmxvY2soJnBfc2xvdC0+Y3RybC0+Y3JpdF9zZWN0KTsKLQkJcmV0dXJuIDE7CisJCXJldHVybiAtRU5PREVWOwogCX0KIAlpZiAoTVJMX1NFTlMocF9zbG90LT5jdHJsLT5jdHJsY2FwKSkgewkKIAkJcmMgPSBwX3Nsb3QtPmhwY19vcHMtPmdldF9sYXRjaF9zdGF0dXMocF9zbG90LCAmZ2V0c3RhdHVzKTsKIAkJaWYgKHJjIHx8IGdldHN0YXR1cykgewogCQkJaW5mbygiJXM6IGxhdGNoIG9wZW4gb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCQpAQCAtNzc4LDcgKzc3OCw3IEBACiAJCWlmIChyYyB8fCBnZXRzdGF0dXMpIHsKIAkJCWluZm8oIiVzOiBhbHJlYWR5IGVuYWJsZWQgb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwpAQCAtODEzLDcgKzgxMyw3IEBACiAJCWlmIChyZXQgfHwgIWdldHN0YXR1cykgewogCQkJaW5mbygiJXM6IG5vIGFkYXB0ZXIgb24gc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiAtRU5PREVWOwogCQl9CiAJfQogCkBAIC04MjIsNyArODIyLDcgQEAKIAkJaWYgKHJldCB8fCBnZXRzdGF0dXMpIHsKIAkJCWluZm8oIiVzOiBsYXRjaCBvcGVuIG9uIHNsb3QoJXgpXG4iLCBfX0ZVTkNUSU9OX18sIHBfc2xvdC0+bnVtYmVyKTsKIAkJCW11dGV4X3VubG9jaygmcF9zbG90LT5jdHJsLT5jcml0X3NlY3QpOwotCQkJcmV0dXJuIDE7CisJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KIApAQCAtODMxLDcgKzgzMSw3IEBACiAJCWlmIChyZXQgfHwgIWdldHN0YXR1cykgewogCQkJaW5mbygiJXM6IGFscmVhZHkgZGlzYWJsZWQgc2xvdCgleClcbiIsIF9fRlVOQ1RJT05fXywgcF9zbG90LT5udW1iZXIpOwogCQkJbXV0ZXhfdW5sb2NrKCZwX3Nsb3QtPmN0cmwtPmNyaXRfc2VjdCk7Ci0JCQlyZXR1cm4gMTsKKwkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3NrZWxldG9uLmMgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3BjaWhwX3NrZWxldG9uLmMKaW5kZXggOGFkNDQ2Ni4uMmI5ZTEwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9wY2locF9za2VsZXRvbi5jCisrKyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvcGNpaHBfc2tlbGV0b24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBQQ0kgSG90IFBsdWcgQ29udHJvbGxlciBTa2VsZXRvbiBEcml2ZXIgLSAwLjIKKyAqIFBDSSBIb3QgUGx1ZyBDb250cm9sbGVyIFNrZWxldG9uIERyaXZlciAtIDAuMwogICoKICAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAzIEdyZWcgS3JvYWgtSGFydG1hbiAoZ3JlZ0Brcm9haC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEsMjAwMyBJQk0gQ29ycC4KQEAgLTIxLDcgKzIxLDcgQEAKICAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KICAqCi0gKiBUaGlzIGRyaXZlciBpcyB0byBiZSB1c2VkIGFzIGEgc2tlbGV0b24gZHJpdmVyIHRvIGJlIHNob3cgaG93IHRvIGludGVyZmFjZQorICogVGhpcyBkcml2ZXIgaXMgdG8gYmUgdXNlZCBhcyBhIHNrZWxldG9uIGRyaXZlciB0byBzaG93IGhvdyB0byBpbnRlcmZhY2UKICAqIHdpdGggdGhlIHBjaSBob3RwbHVnIGNvcmUgZWFzaWx5LgogICoKICAqIFNlbmQgZmVlZGJhY2sgdG8gPGdyZWdAa3JvYWguY29tPgpAQCAtNTgsOCArNTgsNiBAQAogI2RlZmluZSBpbmZvKGZvcm1hdCwgYXJnLi4uKSBwcmludGsoS0VSTl9JTkZPICIlczogIiBmb3JtYXQgIlxuIiwgTVlfTkFNRSAsICMjIGFyZykKICNkZWZpbmUgd2Fybihmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6ICIgZm9ybWF0ICJcbiIsIE1ZX05BTUUgLCAjIyBhcmcpCiAKLQotCiAvKiBsb2NhbCB2YXJpYWJsZXMgKi8KIHN0YXRpYyBpbnQgZGVidWc7CiBzdGF0aWMgaW50IG51bV9zbG90czsKQEAgLTEwOSw3ICsxMDcsNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLQogc3RhdGljIGludCBkaXNhYmxlX3Nsb3Qoc3RydWN0IGhvdHBsdWdfc2xvdCAqaG90cGx1Z19zbG90KQogewogCXN0cnVjdCBzbG90ICpzbG90ID0gaG90cGx1Z19zbG90LT5wcml2YXRlOwpAQCAtMzQyLDcgKzMzOSw3IEBACiAJaW5mbyhEUklWRVJfREVTQyAiIHZlcnNpb246ICIgRFJJVkVSX1ZFUlNJT04gIlxuIik7CiAJLyoKIAkgKiBEbyBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdHVmZiBmb3IgeW91ciBkcml2ZXIgaGVyZQotCSAqIExpa2UgaW5pdGlhbGl6aW5nIHlvdXIgY29udHJvbGxlciBoYXJkd2FyZSAoaWYgYW55KSBhbmQKKwkgKiBsaWtlIGluaXRpYWxpemluZyB5b3VyIGNvbnRyb2xsZXIgaGFyZHdhcmUgKGlmIGFueSkgYW5kCiAJICogZGV0ZXJtaW5pbmcgdGhlIG51bWJlciBvZiBzbG90cyB5b3UgaGF2ZSBpbiB0aGUgc3lzdGVtCiAJICogcmlnaHQgbm93LgogCSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaCBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwLmgKaW5kZXggNzIwOGI5NS4uYzcxMDNhYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHAuaAorKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocC5oCkBAIC0xNzMsNyArMTczLDcgQEAKICNkZWZpbmUgbXNnX2J1dHRvbl9jYW5jZWwJIlBDSSBzbG90ICMlcyAtIGFjdGlvbiBjYW5jZWxlZCBkdWUgdG8gYnV0dG9uIHByZXNzLlxuIgogCiAvKiBzeXNmcyBmdW5jdGlvbnMgZm9yIHRoZSBob3RwbHVnIGNvbnRyb2xsZXIgaW5mbyAqLwotZXh0ZXJuIHZvaWQgc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzCShzdHJ1Y3QgY29udHJvbGxlciAqY3RybCk7CitleHRlcm4gaW50IF9fbXVzdF9jaGVjayBzaHBjaHBfY3JlYXRlX2N0cmxfZmlsZXMoc3RydWN0IGNvbnRyb2xsZXIgKmN0cmwpOwogCiBleHRlcm4gaW50CXNocGNocF9zeXNmc19lbmFibGVfc2xvdChzdHJ1Y3Qgc2xvdCAqc2xvdCk7CiBleHRlcm4gaW50CXNocGNocF9zeXNmc19kaXNhYmxlX3Nsb3Qoc3RydWN0IHNsb3QgKnNsb3QpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jIGIvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfY29yZS5jCmluZGV4IGExNGU3ZGUuLjIzNWMxOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX2NvcmUuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9jb3JlLmMKQEAgLTQ0OSwxMCArNDQ5LDE0IEBACiAJCWN0cmwtPnNwZWVkID0gUENJX1NQRUVEXzMzTUh6OwogCX0KIAotCXNocGNocF9jcmVhdGVfY3RybF9maWxlcyhjdHJsKTsKKwlyYyA9IHNocGNocF9jcmVhdGVfY3RybF9maWxlcyhjdHJsKTsKKwlpZiAocmMpCisJCWdvdG8gZXJyX2NsZWFudXBfc2xvdHM7CiAKIAlyZXR1cm4gMDsKIAorZXJyX2NsZWFudXBfc2xvdHM6CisJY2xlYW51cF9zbG90cyhjdHJsKTsKIGVycl9vdXRfcmVsZWFzZV9jdGxyOgogCWN0cmwtPmhwY19vcHMtPnJlbGVhc2VfY3RscihjdHJsKTsKIGVycl9vdXRfZnJlZV9jdHJsOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYyBiL2RyaXZlcnMvcGNpL2hvdHBsdWcvc2hwY2hwX3N5c2ZzLmMKaW5kZXggNjIwZTExMy4uMjlmYTlkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaG90cGx1Zy9zaHBjaHBfc3lzZnMuYworKysgYi9kcml2ZXJzL3BjaS9ob3RwbHVnL3NocGNocF9zeXNmcy5jCkBAIC05MSw5ICs5MSw5IEBACiB9CiBzdGF0aWMgREVWSUNFX0FUVFIgKGN0cmwsIFNfSVJVR08sIHNob3dfY3RybCwgTlVMTCk7CiAKLXZvaWQgc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzIChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKK2ludCBfX211c3RfY2hlY2sgc2hwY2hwX2NyZWF0ZV9jdHJsX2ZpbGVzIChzdHJ1Y3QgY29udHJvbGxlciAqY3RybCkKIHsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZjdHJsLT5wY2lfZGV2LT5kZXYsICZkZXZfYXR0cl9jdHJsKTsKKwlyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlICgmY3RybC0+cGNpX2Rldi0+ZGV2LCAmZGV2X2F0dHJfY3RybCk7CiB9CiAKIHZvaWQgc2hwY2hwX3JlbW92ZV9jdHJsX2ZpbGVzKHN0cnVjdCBjb250cm9sbGVyICpjdHJsKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvbXNpLmMgYi9kcml2ZXJzL3BjaS9tc2kuYwppbmRleCBhODNjMWY1Li4yN2EwNTc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9tc2kuYworKysgYi9kcml2ZXJzL3BjaS9tc2kuYwpAQCAtNDUsMTYgKzQ1LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIG1zaV9jYWNoZV9jdG9yKHZvaWQgKnAsIGttZW1fY2FjaGVfdCAqY2FjaGUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCi17Ci0JbWVtc2V0KHAsIDAsIHNpemVvZihzdHJ1Y3QgbXNpX2Rlc2MpKTsKLX0KLQogc3RhdGljIGludCBtc2lfY2FjaGVfaW5pdCh2b2lkKQogewotCW1zaV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibXNpX2NhY2hlIiwKLQkJCXNpemVvZihzdHJ1Y3QgbXNpX2Rlc2MpLAotCQkgICAgICAgCTAsIFNMQUJfSFdDQUNIRV9BTElHTiwgbXNpX2NhY2hlX2N0b3IsIE5VTEwpOworCW1zaV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgibXNpX2NhY2hlIiwgc2l6ZW9mKHN0cnVjdCBtc2lfZGVzYyksCisJCQkJCTAsIFNMQUJfSFdDQUNIRV9BTElHTiwgTlVMTCwgTlVMTCk7CiAJaWYgKCFtc2lfY2FjaGVwKQogCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtNDAyLDExICszOTYsMTAgQEAKIHsKIAlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5OwogCi0JZW50cnkgPSBrbWVtX2NhY2hlX2FsbG9jKG1zaV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKKwllbnRyeSA9IGttZW1fY2FjaGVfemFsbG9jKG1zaV9jYWNoZXAsIEdGUF9LRVJORUwpOwogCWlmICghZW50cnkpCiAJCXJldHVybiBOVUxMOwogCi0JbWVtc2V0KGVudHJ5LCAwLCBzaXplb2Yoc3RydWN0IG1zaV9kZXNjKSk7CiAJZW50cnktPmxpbmsudGFpbCA9IGVudHJ5LT5saW5rLmhlYWQgPSAwOwkvKiBzaW5nbGUgbWVzc2FnZSAqLwogCWVudHJ5LT5kZXYgPSBOVUxMOwogCkBAIC05MDEsNiArODk0LDMzIEBACiB9CiAKIC8qKgorICogcGNpX21zaV9zdXBwb3J0ZWQgLSBjaGVjayB3aGV0aGVyIE1TSSBtYXkgYmUgZW5hYmxlZCBvbiBkZXZpY2UKKyAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgorICoKKyAqIE1TSSBtdXN0IGJlIGdsb2JhbGx5IGVuYWJsZWQgYW5kIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlIGFuZCBpdHMgcm9vdAorICogYnVzLiBCdXQsIHRoZSByb290IGJ1cyBpcyBub3QgZWFzeSB0byBmaW5kIHNpbmNlIHNvbWUgYXJjaGl0ZWN0dXJlcworICogaGF2ZSB2aXJ0dWFsIGJ1c3NlcyBvbiB0b3Agb2YgdGhlIFBDSSBoaWVyYXJjaHkgKGZvciBpbnN0YW5jZSB0aGUKKyAqIGh5cGVydHJhbnNwb3J0IGJ1cyksIHdoaWxlIHRoZSBhY3R1YWwgYnVzIHdoZXJlIE1TSSBtdXN0IGJlIHN1cHBvcnRlZAorICogaXMgYmVsb3cuIFNvIHdlIHRlc3QgdGhlIE1TSSBmbGFnIG9uIGFsbCBwYXJlbnQgYnVzc2VzIGFuZCBhc3N1bWUKKyAqIHRoYXQgbm8gcXVpcmsgd2lsbCBldmVyIHNldCB0aGUgTk9fTVNJIGZsYWcgb24gYSBub24tcm9vdCBidXMuCisgKiovCitzdGF0aWMKK2ludCBwY2lfbXNpX3N1cHBvcnRlZChzdHJ1Y3QgcGNpX2RldiAqIGRldikKK3sKKwlzdHJ1Y3QgcGNpX2J1cyAqYnVzOworCisJaWYgKCFwY2lfbXNpX2VuYWJsZSB8fCAhZGV2IHx8IGRldi0+bm9fbXNpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGNoZWNrIE1TSSBmbGFncyBvZiBhbGwgcGFyZW50IGJ1c3NlcyAqLworCWZvciAoYnVzID0gZGV2LT5idXM7IGJ1czsgYnVzID0gYnVzLT5wYXJlbnQpCisJCWlmIChidXMtPmJ1c19mbGFncyAmIFBDSV9CVVNfRkxBR1NfTk9fTVNJKQorCQkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCiAgKiBwY2lfZW5hYmxlX21zaSAtIGNvbmZpZ3VyZSBkZXZpY2UncyBNU0kgY2FwYWJpbGl0eSBzdHJ1Y3R1cmUKICAqIEBkZXY6IHBvaW50ZXIgdG8gdGhlIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgTVNJIGRldmljZSBmdW5jdGlvbgogICoKQEAgLTkxMiwxOSArOTMyLDExIEBACiAgKiovCiBpbnQgcGNpX2VuYWJsZV9tc2koc3RydWN0IHBjaV9kZXYqIGRldikKIHsKLQlzdHJ1Y3QgcGNpX2J1cyAqYnVzOwotCWludCBwb3MsIHRlbXAsIHN0YXR1cyA9IC1FSU5WQUw7CisJaW50IHBvcywgdGVtcCwgc3RhdHVzOwogCXUxNiBjb250cm9sOwogCi0JaWYgKCFwY2lfbXNpX2VuYWJsZSB8fCAhZGV2KQotIAkJcmV0dXJuIHN0YXR1czsKLQotCWlmIChkZXYtPm5vX21zaSkKLQkJcmV0dXJuIHN0YXR1czsKLQotCWZvciAoYnVzID0gZGV2LT5idXM7IGJ1czsgYnVzID0gYnVzLT5wYXJlbnQpCi0JCWlmIChidXMtPmJ1c19mbGFncyAmIFBDSV9CVVNfRkxBR1NfTk9fTVNJKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKHBjaV9tc2lfc3VwcG9ydGVkKGRldikgPCAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAogCXRlbXAgPSBkZXYtPmlycTsKIApAQCAtMTEzNCwyMiArMTE0NiwxNCBAQAogICoqLwogaW50IHBjaV9lbmFibGVfbXNpeChzdHJ1Y3QgcGNpX2RldiogZGV2LCBzdHJ1Y3QgbXNpeF9lbnRyeSAqZW50cmllcywgaW50IG52ZWMpCiB7Ci0Jc3RydWN0IHBjaV9idXMgKmJ1czsKIAlpbnQgc3RhdHVzLCBwb3MsIG5yX2VudHJpZXMsIGZyZWVfdmVjdG9yczsKIAlpbnQgaSwgaiwgdGVtcDsKIAl1MTYgY29udHJvbDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCFwY2lfbXNpX2VuYWJsZSB8fCAhZGV2IHx8ICFlbnRyaWVzKQorCWlmICghZW50cmllcyB8fCBwY2lfbXNpX3N1cHBvcnRlZChkZXYpIDwgMCkKICAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGRldi0+bm9fbXNpKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWZvciAoYnVzID0gZGV2LT5idXM7IGJ1czsgYnVzID0gYnVzLT5wYXJlbnQpCi0JCWlmIChidXMtPmJ1c19mbGFncyAmIFBDSV9CVVNfRkxBR1NfTk9fTVNJKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlzdGF0dXMgPSBtc2lfaW5pdCgpOwogCWlmIChzdGF0dXMgPCAwKQogCQlyZXR1cm4gc3RhdHVzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jIGIvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCmluZGV4IGQ4YWNlMWYuLmIxYzBjNzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYworKysgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKQEAgLTU2LDYgKzU2LDcgQEAKIAkJc3ViZGV2aWNlPVBDSV9BTllfSUQsIGNsYXNzPTAsIGNsYXNzX21hc2s9MDsKIAl1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhPTA7CiAJaW50IGZpZWxkcz0wOworCWludCByZXR2YWwgPSAwOwogCiAJZmllbGRzID0gc3NjYW5mKGJ1ZiwgIiV4ICV4ICV4ICV4ICV4ICV4ICVsdXgiLAogCQkJJnZlbmRvciwgJmRldmljZSwgJnN1YnZlbmRvciwgJnN1YmRldmljZSwKQEAgLTgyLDEwICs4MywxMiBAQAogCXNwaW5fdW5sb2NrKCZwZHJ2LT5keW5pZHMubG9jayk7CiAKIAlpZiAoZ2V0X2RyaXZlcigmcGRydi0+ZHJpdmVyKSkgewotCQlkcml2ZXJfYXR0YWNoKCZwZHJ2LT5kcml2ZXIpOworCQlyZXR2YWwgPSBkcml2ZXJfYXR0YWNoKCZwZHJ2LT5kcml2ZXIpOwogCQlwdXRfZHJpdmVyKCZwZHJ2LT5kcml2ZXIpOwogCX0KIAorCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAJcmV0dXJuIGNvdW50OwogfQogc3RhdGljIERSSVZFUl9BVFRSKG5ld19pZCwgU19JV1VTUiwgTlVMTCwgc3RvcmVfbmV3X2lkKTsKQEAgLTQxOCw3ICs0MjEsMTEgQEAKIAlkcnYtPmRyaXZlci5idXMgPSAmcGNpX2J1c190eXBlOwogCWRydi0+ZHJpdmVyLm93bmVyID0gb3duZXI7CiAJZHJ2LT5kcml2ZXIua29iai5rdHlwZSA9ICZwY2lfZHJpdmVyX2tvYmpfdHlwZTsKLQlkcnYtPmRyaXZlci5tdWx0aXRocmVhZF9wcm9iZSA9IHBjaV9tdWx0aXRocmVhZF9wcm9iZTsKKworCWlmIChwY2lfbXVsdGl0aHJlYWRfcHJvYmUpCisJCWRydi0+ZHJpdmVyLm11bHRpdGhyZWFkX3Byb2JlID0gcGNpX211bHRpdGhyZWFkX3Byb2JlOworCWVsc2UKKwkJZHJ2LT5kcml2ZXIubXVsdGl0aHJlYWRfcHJvYmUgPSBkcnYtPm11bHRpdGhyZWFkX3Byb2JlOwogCiAJc3Bpbl9sb2NrX2luaXQoJmRydi0+ZHluaWRzLmxvY2spOwogCUlOSVRfTElTVF9IRUFEKCZkcnYtPmR5bmlkcy5saXN0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS1zeXNmcy5jIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKaW5kZXggZmRlZmE3ZC4uYTFkMmU5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9wY2kvcGNpLXN5c2ZzLmMKQEAgLTExNyw2ICsxMTcsNyBAQAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlpbnQgcmV0dmFsID0gMDsKIAogCS8qIHRoaXMgY2FuIGNyYXNoIHRoZSBtYWNoaW5lIHdoZW4gZG9uZSBvbiB0aGUgIndyb25nIiBkZXZpY2UgKi8KIAlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpCkBAIC0xMjYsMTEgKzEyNyw1MyBAQAogCQlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CiAKIAlpZiAoKmJ1ZiA9PSAnMScpCi0JCXBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCQlyZXR2YWwgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAorCWlmIChyZXR2YWwpCisJCXJldHVybiByZXR2YWw7CiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgc3NpemVfdAorbXNpX2J1c19zaG93KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCWlmICghcGRldi0+c3Vib3JkaW5hdGUpCisJCXJldHVybiAwOworCisJcmV0dXJuIHNwcmludGYgKGJ1ZiwgIiV1XG4iLAorCQkJIShwZGV2LT5zdWJvcmRpbmF0ZS0+YnVzX2ZsYWdzICYgUENJX0JVU19GTEFHU19OT19NU0kpKTsKK30KKworc3RhdGljIHNzaXplX3QKK21zaV9idXNfc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkgICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKKworCS8qIGJhZCB0aGluZ3MgbWF5IGhhcHBlbiBpZiB0aGUgbm9fbXNpIGZsYWcgaXMgY2hhbmdlZAorCSAqIHdoaWxlIHNvbWUgZHJpdmVycyBhcmUgbG9hZGVkICovCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAoIXBkZXYtPnN1Ym9yZGluYXRlKQorCQlyZXR1cm4gY291bnQ7CisKKwlpZiAoKmJ1ZiA9PSAnMCcpIHsKKwkJcGRldi0+c3Vib3JkaW5hdGUtPmJ1c19mbGFncyB8PSBQQ0lfQlVTX0ZMQUdTX05PX01TSTsKKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgImZvcmNlZCBzdWJvcmRpbmF0ZSBidXMgdG8gbm90IHN1cHBvcnQgTVNJLCIKKwkJCSAiIGJhZCB0aGluZ3MgY291bGQgaGFwcGVuLlxuIik7CisJfQorCisJaWYgKCpidWYgPT0gJzEnKSB7CisJCXBkZXYtPnN1Ym9yZGluYXRlLT5idXNfZmxhZ3MgJj0gflBDSV9CVVNfRkxBR1NfTk9fTVNJOworCQlkZXZfd2FybigmcGRldi0+ZGV2LCAiZm9yY2VkIHN1Ym9yZGluYXRlIGJ1cyB0byBzdXBwb3J0IE1TSSwiCisJCQkgIiBiYWQgdGhpbmdzIGNvdWxkIGhhcHBlbi5cbiIpOworCX0KKworCXJldHVybiBjb3VudDsKK30KIAogc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgcGNpX2Rldl9hdHRyc1tdID0gewogCV9fQVRUUl9STyhyZXNvdXJjZSksCkBAIC0xNDUsNiArMTg4LDcgQEAKIAlfX0FUVFIoZW5hYmxlLCAwNjAwLCBpc19lbmFibGVkX3Nob3csIGlzX2VuYWJsZWRfc3RvcmUpLAogCV9fQVRUUihicm9rZW5fcGFyaXR5X3N0YXR1cywoU19JUlVHT3xTX0lXVVNSKSwKIAkJYnJva2VuX3Bhcml0eV9zdGF0dXNfc2hvdyxicm9rZW5fcGFyaXR5X3N0YXR1c19zdG9yZSksCisJX19BVFRSKG1zaV9idXMsIDA2NDQsIG1zaV9idXNfc2hvdywgbXNpX2J1c19zdG9yZSksCiAJX19BVFRSX05VTEwsCiB9OwogCkBAIC0zODUsMTUgKzQyOSwzOCBAQAogfQogCiAvKioKKyAqIHBjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMgLSBjbGVhbnVwIHJlc291cmNlIGZpbGVzCisgKiBAZGV2OiBkZXYgdG8gY2xlYW51cAorICoKKyAqIElmIHdlIGNyZWF0ZWQgcmVzb3VyY2UgZmlsZXMgZm9yIEBkZXYsIHJlbW92ZSB0aGVtIGZyb20gc3lzZnMgYW5kCisgKiBmcmVlIHRoZWlyIHJlc291cmNlcy4KKyAqLworc3RhdGljIHZvaWQKK3BjaV9yZW1vdmVfcmVzb3VyY2VfZmlsZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgUENJX1JPTV9SRVNPVVJDRTsgaSsrKSB7CisJCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyZXNfYXR0cjsKKworCQlyZXNfYXR0ciA9IHBkZXYtPnJlc19hdHRyW2ldOworCQlpZiAocmVzX2F0dHIpIHsKKwkJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosIHJlc19hdHRyKTsKKwkJCWtmcmVlKHJlc19hdHRyKTsKKwkJfQorCX0KK30KKworLyoqCiAgKiBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzIC0gY3JlYXRlIHJlc291cmNlIGZpbGVzIGluIHN5c2ZzIGZvciBAZGV2CiAgKiBAZGV2OiBkZXYgaW4gcXVlc3Rpb24KICAqCiAgKiBXYWxrIHRoZSByZXNvdXJjZXMgaW4gQGRldiBjcmVhdGluZyBmaWxlcyBmb3IgZWFjaCByZXNvdXJjZSBhdmFpbGFibGUuCiAgKi8KLXN0YXRpYyB2b2lkCi1wY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQorc3RhdGljIGludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWludCBpOworCWludCByZXR2YWw7CiAKIAkvKiBFeHBvc2UgdGhlIFBDSSByZXNvdXJjZXMgZnJvbSB0aGlzIGRldmljZSBhcyBmaWxlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspIHsKQEAgLTQxNiwzNSArNDgzLDE5IEBACiAJCQlyZXNfYXR0ci0+c2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgaSk7CiAJCQlyZXNfYXR0ci0+bW1hcCA9IHBjaV9tbWFwX3Jlc291cmNlOwogCQkJcmVzX2F0dHItPnByaXZhdGUgPSAmcGRldi0+cmVzb3VyY2VbaV07Ci0JCQlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCByZXNfYXR0cik7CisJCQlyZXR2YWwgPSBzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCByZXNfYXR0cik7CisJCQlpZiAocmV0dmFsKSB7CisJCQkJcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKKwkJCQlyZXR1cm4gcmV0dmFsOworCQkJfQorCQl9IGVsc2UgeworCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAl9Ci19Ci0KLS8qKgotICogcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyAtIGNsZWFudXAgcmVzb3VyY2UgZmlsZXMKLSAqIEBkZXY6IGRldiB0byBjbGVhbnVwCi0gKgotICogSWYgd2UgY3JlYXRlZCByZXNvdXJjZSBmaWxlcyBmb3IgQGRldiwgcmVtb3ZlIHRoZW0gZnJvbSBzeXNmcyBhbmQKLSAqIGZyZWUgdGhlaXIgcmVzb3VyY2VzLgotICovCi1zdGF0aWMgdm9pZAotcGNpX3JlbW92ZV9yZXNvdXJjZV9maWxlcyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBQQ0lfUk9NX1JFU09VUkNFOyBpKyspIHsKLQkJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKnJlc19hdHRyOwotCi0JCXJlc19hdHRyID0gcGRldi0+cmVzX2F0dHJbaV07Ci0JCWlmIChyZXNfYXR0cikgewotCQkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcmVzX2F0dHIpOwotCQkJa2ZyZWUocmVzX2F0dHIpOwotCQl9Ci0JfQorCXJldHVybiAwOwogfQogI2Vsc2UgLyogIUhBVkVfUENJX01NQVAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuOyB9CitzdGF0aWMgaW5saW5lIGludCBwY2lfY3JlYXRlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfcmVtb3ZlX3Jlc291cmNlX2ZpbGVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpIHsgcmV0dXJuOyB9CiAjZW5kaWYgLyogSEFWRV9QQ0lfTU1BUCAqLwogCkBAIC01MjksMjIgKzU4MCwyNyBAQAogCS53cml0ZSA9IHBjaV93cml0ZV9jb25maWcsCiB9OwogCi1pbnQgcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoraW50IF9fbXVzdF9jaGVjayBwY2lfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7CisJc3RydWN0IGJpbl9hdHRyaWJ1dGUgKnJvbV9hdHRyID0gTlVMTDsKKwlpbnQgcmV0dmFsOworCiAJaWYgKCFzeXNmc19pbml0aWFsaXplZCkKIAkJcmV0dXJuIC1FQUNDRVM7CiAKIAlpZiAocGRldi0+Y2ZnX3NpemUgPCA0MDk2KQotCQlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGNpX2NvbmZpZ19hdHRyKTsKKwkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaV9jb25maWdfYXR0cik7CiAJZWxzZQotCQlzeXNmc19jcmVhdGVfYmluX2ZpbGUoJnBkZXYtPmRldi5rb2JqLCAmcGNpZV9jb25maWdfYXR0cik7CisJCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2llX2NvbmZpZ19hdHRyKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycjsKIAotCXBjaV9jcmVhdGVfcmVzb3VyY2VfZmlsZXMocGRldik7CisJcmV0dmFsID0gcGNpX2NyZWF0ZV9yZXNvdXJjZV9maWxlcyhwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycl9iaW5fZmlsZTsKIAogCS8qIElmIHRoZSBkZXZpY2UgaGFzIGEgUk9NLCB0cnkgdG8gZXhwb3NlIGl0IGluIHN5c2ZzLiAqLwogCWlmIChwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIFBDSV9ST01fUkVTT1VSQ0UpKSB7Ci0JCXN0cnVjdCBiaW5fYXR0cmlidXRlICpyb21fYXR0cjsKLQkJCiAJCXJvbV9hdHRyID0ga3phbGxvYyhzaXplb2YoKnJvbV9hdHRyKSwgR0ZQX0FUT01JQyk7CiAJCWlmIChyb21fYXR0cikgewogCQkJcGRldi0+cm9tX2F0dHIgPSByb21fYXR0cjsKQEAgLTU1NCwxMyArNjEwLDI4IEBACiAJCQlyb21fYXR0ci0+YXR0ci5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJcm9tX2F0dHItPnJlYWQgPSBwY2lfcmVhZF9yb207CiAJCQlyb21fYXR0ci0+d3JpdGUgPSBwY2lfd3JpdGVfcm9tOwotCQkJc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcm9tX2F0dHIpOworCQkJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgcm9tX2F0dHIpOworCQkJaWYgKHJldHZhbCkKKwkJCQlnb3RvIGVycl9yb207CisJCX0gZWxzZSB7CisJCQlyZXR2YWwgPSAtRU5PTUVNOworCQkJZ290byBlcnJfYmluX2ZpbGU7CiAJCX0KIAl9CiAJLyogYWRkIHBsYXRmb3JtLXNwZWNpZmljIGF0dHJpYnV0ZXMgKi8KIAlwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHBkZXYpOwotCQorCiAJcmV0dXJuIDA7CisKK2Vycl9yb206CisJa2ZyZWUocm9tX2F0dHIpOworZXJyX2Jpbl9maWxlOgorCWlmIChwZGV2LT5jZmdfc2l6ZSA8IDQwOTYpCisJCXN5c2ZzX3JlbW92ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZwY2lfY29uZmlnX2F0dHIpOworCWVsc2UKKwkJc3lzZnNfcmVtb3ZlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJnBjaWVfY29uZmlnX2F0dHIpOworZXJyOgorCXJldHVybiByZXR2YWw7CiB9CiAKIC8qKgpAQCAtNTg5LDEwICs2NjAsMTQgQEAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9zeXNmc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBOVUxMOwotCQorCWludCByZXR2YWw7CisKIAlzeXNmc19pbml0aWFsaXplZCA9IDE7Ci0JZm9yX2VhY2hfcGNpX2RldihwZGV2KQotCQlwY2lfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyhwZGV2KTsKKwlmb3JfZWFjaF9wY2lfZGV2KHBkZXYpIHsKKwkJcmV0dmFsID0gcGNpX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMocGRldik7CisJCWlmIChyZXR2YWwpCisJCQlyZXR1cm4gcmV0dmFsOworCX0KIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA1OTBmNGU2Li5hNTQ0OTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNDQ1LDYgKzQ0NSw1MSBAQAogCiBFWFBPUlRfU1lNQk9MKHBjaV9jaG9vc2Vfc3RhdGUpOwogCitzdGF0aWMgaW50IHBjaV9zYXZlX3BjaWVfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zLCBpID0gMDsKKwlzdHJ1Y3QgcGNpX2NhcF9zYXZlZF9zdGF0ZSAqc2F2ZV9zdGF0ZTsKKwl1MTYgKmNhcDsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKHBvcyA8PSAwKQorCQlyZXR1cm4gMDsKKworCXNhdmVfc3RhdGUgPSBremFsbG9jKHNpemVvZigqc2F2ZV9zdGF0ZSkgKyBzaXplb2YodTE2KSAqIDQsIEdGUF9LRVJORUwpOworCWlmICghc2F2ZV9zdGF0ZSkgeworCQlkZXZfZXJyKCZkZXYtPmRldiwgIk91dCBvZiBtZW1vcnkgaW4gcGNpX3NhdmVfcGNpZV9zdGF0ZVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwljYXAgPSAodTE2ICopJnNhdmVfc3RhdGUtPmRhdGFbMF07CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWQ1RMLCAmY2FwW2krK10pOworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsICZjYXBbaSsrXSk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX1NMVENUTCwgJmNhcFtpKytdKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfUlRDVEwsICZjYXBbaSsrXSk7CisJcGNpX2FkZF9zYXZlZF9jYXAoZGV2LCBzYXZlX3N0YXRlKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpX3Jlc3RvcmVfcGNpZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCBpID0gMCwgcG9zOworCXN0cnVjdCBwY2lfY2FwX3NhdmVkX3N0YXRlICpzYXZlX3N0YXRlOworCXUxNiAqY2FwOworCisJc2F2ZV9zdGF0ZSA9IHBjaV9maW5kX3NhdmVkX2NhcChkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOworCWlmICghc2F2ZV9zdGF0ZSB8fCBwb3MgPD0gMCkKKwkJcmV0dXJuOworCWNhcCA9ICh1MTYgKikmc2F2ZV9zdGF0ZS0+ZGF0YVswXTsKKworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfREVWQ1RMLCBjYXBbaSsrXSk7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgcG9zICsgUENJX0VYUF9MTktDVEwsIGNhcFtpKytdKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX1NMVENUTCwgY2FwW2krK10pOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcyArIFBDSV9FWFBfUlRDVEwsIGNhcFtpKytdKTsKKwlwY2lfcmVtb3ZlX3NhdmVkX2NhcChzYXZlX3N0YXRlKTsKKwlrZnJlZShzYXZlX3N0YXRlKTsKK30KKwogLyoqCiAgKiBwY2lfc2F2ZV9zdGF0ZSAtIHNhdmUgdGhlIFBDSSBjb25maWd1cmF0aW9uIHNwYWNlIG9mIGEgZGV2aWNlIGJlZm9yZSBzdXNwZW5kaW5nCiAgKiBAZGV2OiAtIFBDSSBkZXZpY2UgdGhhdCB3ZSdyZSBkZWFsaW5nIHdpdGgKQEAgLTQ2MCw2ICs1MDUsOCBAQAogCQlyZXR1cm4gaTsKIAlpZiAoKGkgPSBwY2lfc2F2ZV9tc2l4X3N0YXRlKGRldikpICE9IDApCiAJCXJldHVybiBpOworCWlmICgoaSA9IHBjaV9zYXZlX3BjaWVfc3RhdGUoZGV2KSkgIT0gMCkKKwkJcmV0dXJuIGk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ3Myw2ICs1MjAsOSBAQAogCWludCBpOwogCWludCB2YWw7CiAKKwkvKiBQQ0kgRXhwcmVzcyByZWdpc3RlciBtdXN0IGJlIHJlc3RvcmVkIGZpcnN0ICovCisJcGNpX3Jlc3RvcmVfcGNpZV9zdGF0ZShkZXYpOworCiAJLyoKIAkgKiBUaGUgQmFzZSBBZGRyZXNzIHJlZ2lzdGVyIHNob3VsZCBiZSBwcm9ncmFtbWVkIGJlZm9yZSB0aGUgY29tbWFuZAogCSAqIHJlZ2lzdGVyKHMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5oCmluZGV4IDA4ZDU4ZmMuLjZiZjMyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaS5oCisrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCkBAIC00Miw3ICs0Miw3IEBACiAvKiBMb2NrIGZvciByZWFkL3dyaXRlIGFjY2VzcyB0byBwY2kgZGV2aWNlIGFuZCBidXMgbGlzdHMgKi8KIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIHBjaV9idXNfc2VtOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKIGV4dGVybiBpbnQgcGNpX21zaV9xdWlyazsKICNlbHNlCiAjZGVmaW5lIHBjaV9tc2lfcXVpcmsgMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnIGIvZHJpdmVycy9wY2kvcGNpZS9LY29uZmlnCmluZGV4IDEwMTJkYjguLjBhZDkyYTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvS2NvbmZpZworKysgYi9kcml2ZXJzL3BjaS9wY2llL0tjb25maWcKQEAgLTM0LDMgKzM0LDQgQEAKIAkgICAKIAkgIFdoZW4gaW4gZG91YnQsIHNheSBOLgogCitzb3VyY2UgImRyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWciCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9NYWtlZmlsZQppbmRleCA5ODRmYTg3Li5lMDBmYjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvTWFrZWZpbGUKQEAgLTUsMyArNSw2IEBACiBwY2llcG9ydGRydi15CQkJOj0gcG9ydGRydl9jb3JlLm8gcG9ydGRydl9wY2kubyBwb3J0ZHJ2X2J1cy5vCiAKIG9iai0kKENPTkZJR19QQ0lFUE9SVEJVUykJKz0gcGNpZXBvcnRkcnYubworCisjIEJ1aWxkIFBDSSBFeHByZXNzIEFFUiBpZiBuZWVkZWQKK29iai0kKENPTkZJR19QQ0lFQUVSKQkJKz0gYWVyLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YzN2E2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL0tjb25maWcKQEAgLTAsMCArMSwxMiBAQAorIworIyBQQ0kgRXhwcmVzcyBSb290IFBvcnQgRGV2aWNlIEFFUiBDb25maWd1cmF0aW9uCisjCisKK2NvbmZpZyBQQ0lFQUVSCisJYm9vbGVhbiAiUm9vdCBQb3J0IEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBzdXBwb3J0IgorCWRlcGVuZHMgb24gUENJRVBPUlRCVVMgJiYgQUNQSQorCWRlZmF1bHQgeQorCWhlbHAKKwkgIFRoaXMgZW5hYmxlcyBQQ0kgRXhwcmVzcyBSb290IFBvcnQgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nCisJICAoQUVSKSBkcml2ZXIgc3VwcG9ydC4gRXJyb3IgcmVwb3J0aW5nIG1lc3NhZ2VzIHNlbnQgdG8gUm9vdAorCSAgUG9ydCB3aWxsIGJlIGhhbmRsZWQgYnkgUENJIEV4cHJlc3MgQUVSIGRyaXZlci4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL01ha2VmaWxlIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTVhNGY0MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL01ha2VmaWxlCkBAIC0wLDAgKzEsOCBAQAorIworIyBNYWtlZmlsZSBmb3IgUENJLUV4cHJlc3MgUm9vdCBQb3J0IEFkdmFuY2VkIEVycm9yIFJlcG9ydGluZyBEcml2ZXIKKyMKKworb2JqLSQoQ09ORklHX1BDSUVBRVIpICs9IGFlcmRyaXZlci5vCisKK2FlcmRyaXZlci1vYmpzIDo9IGFlcmRydl9lcnJwcmludC5vIGFlcmRydl9jb3JlLm8gYWVyZHJ2Lm8gYWVyZHJ2X2FjcGkubworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkNGFjMDIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuYwpAQCAtMCwwICsxLDM0NiBAQAorLyoKKyAqIGRyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIEFFUiByb290IHBvcnQgc2VydmljZSBkcml2ZXIuIFRoZSBkcml2ZXIgd2lsbAorICogcmVnaXN0ZXIgYW4gaXJxIGhhbmRsZXIuIFdoZW4gcm9vdCBwb3J0IHRyaWdnZXJzIGFuIEFFUiBpbnRlcnJ1cHQsIHRoZSBpcnEKKyAqIGhhbmRsZXIgd2lsbCBjb2xsZWN0IHJvb3QgcG9ydCBzdGF0dXMgYW5kIHNjaGVkdWxlIGEgd29yay4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgSW50ZWwgQ29ycC4KKyAqCVRvbSBMb25nIE5ndXllbiAodG9tLmwubmd1eWVuQGludGVsLmNvbSkKKyAqCVpoYW5nIFlhbm1pbiAoeWFubWluLnpoYW5nQGludGVsLmNvbSkKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorCisjaW5jbHVkZSAiYWVyZHJ2LmgiCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjAiCisjZGVmaW5lIERSSVZFUl9BVVRIT1IgInRvbS5sLm5ndXllbkBpbnRlbC5jb20iCisjZGVmaW5lIERSSVZFUl9ERVNDICJSb290IFBvcnQgQWR2YW5jZWQgRXJyb3IgUmVwb3J0aW5nIERyaXZlciIKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZXJfcHJvYmUgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAorCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQgKTsKK3N0YXRpYyB2b2lkIGFlcl9yZW1vdmUoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpOworc3RhdGljIGludCBhZXJfc3VzcGVuZChzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQore3JldHVybiAwO30KK3N0YXRpYyBpbnQgYWVyX3Jlc3VtZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmRldikge3JldHVybiAwO30KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGFlcl9lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LAorCWVudW0gcGNpX2NoYW5uZWxfc3RhdGUgZXJyb3IpOworc3RhdGljIHZvaWQgYWVyX2Vycm9yX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGFlcl9yb290X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOworCisvKgorICogUENJIEV4cHJlc3MgYnVzJ3MgQUVSIFJvb3Qgc2VydmljZSBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmUKKyAqLworc3RhdGljIHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCBhZXJfaWRbXSA9IHsKKwl7CisJLnZlbmRvciAJPSBQQ0lfQU5ZX0lELAorCS5kZXZpY2UgCT0gUENJX0FOWV9JRCwKKwkucG9ydF90eXBlIAk9IFBDSUVfUkNfUE9SVCwKKwkuc2VydmljZV90eXBlIAk9IFBDSUVfUE9SVF9TRVJWSUNFX0FFUiwKKwl9LAorCXsgLyogZW5kOiBhbGwgemVyb2VzICovIH0KK307CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzIGFlcl9lcnJvcl9oYW5kbGVycyA9IHsKKwkuZXJyb3JfZGV0ZWN0ZWQgPSBhZXJfZXJyb3JfZGV0ZWN0ZWQsCisJLnJlc3VtZSA9IGFlcl9lcnJvcl9yZXN1bWUsCit9OworCitzdGF0aWMgc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciBhZXJkcnYgPSB7CisJLm5hbWUJCT0gImFlciIsCisJLmlkX3RhYmxlCT0gJmFlcl9pZFswXSwKKworCS5wcm9iZQkJPSBhZXJfcHJvYmUsCisJLnJlbW92ZQkJPSBhZXJfcmVtb3ZlLAorCisJLnN1c3BlbmQJPSBhZXJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGFlcl9yZXN1bWUsCisKKwkuZXJyX2hhbmRsZXIJPSAmYWVyX2Vycm9yX2hhbmRsZXJzLAorCisJLnJlc2V0X2xpbmsJPSBhZXJfcm9vdF9yZXNldCwKK307CisKKy8qKgorICogYWVyX2lycSAtIFJvb3QgUG9ydCdzIElTUgorICogQGlycTogSVJRIGFzc2lnbmVkIHRvIFJvb3QgUG9ydAorICogQGNvbnRleHQ6IHBvaW50ZXIgdG8gUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCisgKiBAcjogcG9pbnRlciBzdHJ1Y3QgcHRfcmVncworICoKKyAqIEludm9rZWQgd2hlbiBSb290IFBvcnQgZGV0ZWN0cyBBRVIgbWVzc2FnZXMuCisgKiovCitzdGF0aWMgaXJxcmV0dXJuX3QgYWVyX2lycShpbnQgaXJxLCB2b2lkICpjb250ZXh0LCBzdHJ1Y3QgcHRfcmVncyAqIHIpCit7CisJdW5zaWduZWQgaW50IHN0YXR1cywgaWQ7CisJc3RydWN0IHBjaWVfZGV2aWNlICpwZGV2ID0gKHN0cnVjdCBwY2llX2RldmljZSAqKWNvbnRleHQ7CisJc3RydWN0IGFlcl9ycGMgKnJwYyA9IGdldF9zZXJ2aWNlX2RhdGEocGRldik7CisJaW50IG5leHRfcHJvZF9pZHg7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldi0+cG9ydCk7CisJLyoKKwkgKiBNdXN0IGxvY2sgYWNjZXNzIHRvIFJvb3QgRXJyb3IgU3RhdHVzIFJlZywgUm9vdCBFcnJvciBJRCBSZWcsCisJICogYW5kIFJvb3QgZXJyb3IgcHJvZHVjZXIvY29uc3VtZXIgaW5kZXgKKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcnBjLT5lX2xvY2ssIGZsYWdzKTsKKworCS8qIFJlYWQgZXJyb3Igc3RhdHVzICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYtPnBvcnQsIHBvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsICZzdGF0dXMpOworCWlmICghKHN0YXR1cyAmIFJPT1RfRVJSX1NUQVRVU19NQVNLUykpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBjLT5lX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9OT05FOworCX0KKworCS8qIFJlYWQgZXJyb3Igc291cmNlIGFuZCBjbGVhciBlcnJvciBzdGF0dXMgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldi0+cG9ydCwgcG9zICsgUENJX0VSUl9ST09UX0NPUl9TUkMsICZpZCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LT5wb3J0LCBwb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCBzdGF0dXMpOworCisJLyogU3RvcmUgZXJyb3Igc291cmNlIGZvciBsYXRlciBEUEMgaGFuZGxlciAqLworCW5leHRfcHJvZF9pZHggPSBycGMtPnByb2RfaWR4ICsgMTsKKwlpZiAobmV4dF9wcm9kX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCisJCW5leHRfcHJvZF9pZHggPSAwOworCWlmIChuZXh0X3Byb2RfaWR4ID09IHJwYy0+Y29uc19pZHgpIHsKKwkJLyoKKwkJICogRXJyb3IgU3Rvcm0gQ29uZGl0aW9uIC0gcG9zc2libHkgdGhlIHNhbWUgZXJyb3Igb2NjdXJyZWQuCisJCSAqIERyb3AgdGhlIGVycm9yLgorCQkgKi8KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBjLT5lX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKwlycGMtPmVfc291cmNlc1tycGMtPnByb2RfaWR4XS5zdGF0dXMgPSAgc3RhdHVzOworCXJwYy0+ZV9zb3VyY2VzW3JwYy0+cHJvZF9pZHhdLmlkID0gaWQ7CisJcnBjLT5wcm9kX2lkeCA9IG5leHRfcHJvZF9pZHg7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBjLT5lX2xvY2ssIGZsYWdzKTsKKworCS8qICBJbnZva2UgRFBDIGhhbmRsZXIgKi8KKwlzY2hlZHVsZV93b3JrKCZycGMtPmRwY19oYW5kbGVyKTsKKworCXJldHVybiBJUlFfSEFORExFRDsKK30KKworLyoqCisgKiBhZXJfYWxsb2NfcnBjIC0gYWxsb2NhdGUgUm9vdCBQb3J0IGRhdGEgc3RydWN0dXJlCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2llX2RldiBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEludm9rZWQgd2hlbiBSb290IFBvcnQncyBBRVIgc2VydmljZSBpcyBsb2FkZWQuCisgKiovCitzdGF0aWMgc3RydWN0IGFlcl9ycGMqIGFlcl9hbGxvY19ycGMoc3RydWN0IHBjaWVfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGFlcl9ycGMgKnJwYzsKKworCWlmICghKHJwYyA9IChzdHJ1Y3QgYWVyX3JwYyAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZXJfcnBjKSwKKwkJR0ZQX0tFUk5FTCkpKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbXNldChycGMsIDAsIHNpemVvZihzdHJ1Y3QgYWVyX3JwYykpOworCS8qCisJICogSW5pdGlhbGl6ZSBSb290IGxvY2sgYWNjZXNzLCBlX2xvY2ssIHRvIFJvb3QgRXJyb3IgU3RhdHVzIFJlZywKKwkgKiBSb290IEVycm9yIElEIFJlZywgYW5kIFJvb3QgZXJyb3IgcHJvZHVjZXIvY29uc3VtZXIgaW5kZXguCisJICovCisJcnBjLT5lX2xvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisKKwlycGMtPnJwZCA9IGRldjsKKwlJTklUX1dPUksoJnJwYy0+ZHBjX2hhbmRsZXIsIGFlcl9pc3IsICh2b2lkICopZGV2KTsKKwlycGMtPnByb2RfaWR4ID0gcnBjLT5jb25zX2lkeCA9IDA7CisJbXV0ZXhfaW5pdCgmcnBjLT5ycGNfbXV0ZXgpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnJwYy0+d2FpdF9yZWxlYXNlKTsKKworCS8qIFVzZSBQQ0lFIGJ1cyBmdW5jdGlvbiB0byBzdG9yZSBycGMgaW50byBQQ0lFIGRldmljZSAqLworCXNldF9zZXJ2aWNlX2RhdGEoZGV2LCBycGMpOworCisJcmV0dXJuIHJwYzsKK30KKworLyoqCisgKiBhZXJfcmVtb3ZlIC0gY2xlYW4gdXAgcmVzb3VyY2VzCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2llX2RldiBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEludm9rZWQgd2hlbiBQQ0kgRXhwcmVzcyBidXMgdW5sb2FkcyBvciBBRVIgcHJvYmUgZmFpbHMuCisgKiovCitzdGF0aWMgdm9pZCBhZXJfcmVtb3ZlKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBhZXJfcnBjICpycGMgPSBnZXRfc2VydmljZV9kYXRhKGRldik7CisKKwlpZiAocnBjKSB7CisJCS8qIElmIHJlZ2lzdGVyIGludGVycnVwdCBzZXJ2aWNlLCBpdCBtdXN0IGJlIGZyZWUuICovCisJCWlmIChycGMtPmlzcikKKwkJCWZyZWVfaXJxKGRldi0+aXJxLCBkZXYpOworCisJCXdhaXRfZXZlbnQocnBjLT53YWl0X3JlbGVhc2UsIHJwYy0+cHJvZF9pZHggPT0gcnBjLT5jb25zX2lkeCk7CisKKwkJYWVyX2RlbGV0ZV9yb290cG9ydChycGMpOworCQlzZXRfc2VydmljZV9kYXRhKGRldiwgTlVMTCk7CisJfQorfQorCisvKioKKyAqIGFlcl9wcm9iZSAtIGluaXRpYWxpemUgcmVzb3VyY2VzCisgKiBAZGV2OiBwb2ludGVyIHRvIHRoZSBwY2llX2RldiBkYXRhIHN0cnVjdHVyZQorICogQGlkOiBwb2ludGVyIHRvIHRoZSBzZXJ2aWNlIGlkIGRhdGEgc3RydWN0dXJlCisgKgorICogSW52b2tlZCB3aGVuIFBDSSBFeHByZXNzIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuCisgKiovCitzdGF0aWMgaW50IF9fZGV2aW5pdCBhZXJfcHJvYmUgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LAorCQkJCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWQgKQoreworCWludCBzdGF0dXM7CisJc3RydWN0IGFlcl9ycGMgKnJwYzsKKwlzdHJ1Y3QgZGV2aWNlICpkZXZpY2UgPSAmZGV2LT5kZXZpY2U7CisKKwkvKiBJbml0ICovCisJaWYgKChzdGF0dXMgPSBhZXJfaW5pdChkZXYpKSkKKwkJcmV0dXJuIHN0YXR1czsKKworCS8qIEFsbG9jIHJwYyBkYXRhIHN0cnVjdHVyZSAqLworCWlmICghKHJwYyA9IGFlcl9hbGxvY19ycGMoZGV2KSkpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiVzOiBBbGxvYyBycGMgZmFpbHMgb24gUENJRSBkZXZpY2VbJXNdXG4iLAorCQkJX19GVU5DVElPTl9fLCBkZXZpY2UtPmJ1c19pZCk7CisJCWFlcl9yZW1vdmUoZGV2KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJLyogUmVxdWVzdCBJUlEgSVNSICovCisJaWYgKChzdGF0dXMgPSByZXF1ZXN0X2lycShkZXYtPmlycSwgYWVyX2lycSwgU0FfU0hJUlEsICJhZXJkcnYiLAorCQkJCWRldikpKSB7CisJCXByaW50ayhLRVJOX0RFQlVHICIlczogUmVxdWVzdCBJU1IgZmFpbHMgb24gUENJRSBkZXZpY2VbJXNdXG4iLAorCQkJX19GVU5DVElPTl9fLCBkZXZpY2UtPmJ1c19pZCk7CisJCWFlcl9yZW1vdmUoZGV2KTsKKwkJcmV0dXJuIHN0YXR1czsKKwl9CisKKwlycGMtPmlzciA9IDE7CisKKwlhZXJfZW5hYmxlX3Jvb3Rwb3J0KHJwYyk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGFlcl9yb290X3Jlc2V0IC0gcmVzZXQgbGluayBvbiBSb290IFBvcnQKKyAqIEBkZXY6IHBvaW50ZXIgdG8gUm9vdCBQb3J0J3MgcGNpX2RldiBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEludm9rZWQgYnkgUG9ydCBCdXMgZHJpdmVyIHdoZW4gcGVyZm9ybWluZyBsaW5rIHJlc2V0IGF0IFJvb3QgUG9ydC4KKyAqKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGFlcl9yb290X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTE2IHAycF9jdHJsOworCXUzMiBzdGF0dXM7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisKKwkvKiBEaXNhYmxlIFJvb3QncyBpbnRlcnJ1cHQgaW4gcmVzcG9uc2UgdG8gZXJyb3IgbWVzc2FnZXMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsIDApOworCisJLyogQXNzZXJ0IFNlY29uZGFyeSBCdXMgUmVzZXQgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgJnAycF9jdHJsKTsKKwlwMnBfY3RybCB8PSBQQ0lfQ0JfQlJJREdFX0NUTF9DQl9SRVNFVDsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQlJJREdFX0NPTlRST0wsIHAycF9jdHJsKTsKKworCS8qIERlLWFzc2VydCBTZWNvbmRhcnkgQnVzIFJlc2V0ICovCisJcDJwX2N0cmwgJj0gflBDSV9DQl9CUklER0VfQ1RMX0NCX1JFU0VUOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIFBDSV9CUklER0VfQ09OVFJPTCwgcDJwX2N0cmwpOworCisJLyoKKwkgKiBTeXN0ZW0gc29mdHdhcmUgbXVzdCB3YWl0IGZvciBhdCBsZWFzdCAxMDBtcyBmcm9tIHRoZSBlbmQKKwkgKiBvZiBhIHJlc2V0IG9mIG9uZSBvciBtb3JlIGRldmljZSBiZWZvcmUgaXQgaXMgcGVybWl0dGVkCisJICogdG8gaXNzdWUgQ29uZmlndXJhdGlvbiBSZXF1ZXN0cyB0byB0aG9zZSBkZXZpY2VzLgorCSAqLworCW1zbGVlcCgyMDApOworCXByaW50ayhLRVJOX0RFQlVHICJDb21wbGV0ZSBsaW5rIHJlc2V0IGF0IFJvb3RbJXNdXG4iLCBkZXYtPmRldi5idXNfaWQpOworCisJLyogRW5hYmxlIFJvb3QgUG9ydCdzIGludGVycnVwdCBpbiByZXNwb25zZSB0byBlcnJvciBtZXNzYWdlcyAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsICZzdGF0dXMpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCBzdGF0dXMpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQoZGV2LAorCQlwb3MgKyBQQ0lfRVJSX1JPT1RfQ09NTUFORCwKKwkJUk9PVF9QT1JUX0lOVFJfT05fTUVTR19NQVNLKTsKKworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7Cit9CisKKy8qKgorICogYWVyX2Vycm9yX2RldGVjdGVkIC0gdXBkYXRlIHNldmVyaXR5IHN0YXR1cworICogQGRldjogcG9pbnRlciB0byBSb290IFBvcnQncyBwY2lfZGV2IGRhdGEgc3RydWN0dXJlCisgKiBAZXJyb3I6IGVycm9yIHNldmVyaXR5IGJlaW5nIG5vdGlmaWVkIGJ5IHBvcnQgYnVzCisgKgorICogSW52b2tlZCBieSBQb3J0IEJ1cyBkcml2ZXIgZHVyaW5nIGVycm9yIHJlY292ZXJ5LgorICoqLworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgYWVyX2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQllbnVtIHBjaV9jaGFubmVsX3N0YXRlIGVycm9yKQoreworCS8qIFJvb3QgUG9ydCBoYXMgbm8gaW1wYWN0LiBBbHdheXMgcmVjb3ZlcnMuICovCisJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworfQorCisvKioKKyAqIGFlcl9lcnJvcl9yZXN1bWUgLSBjbGVhbiB1cCBjb3JyZXNwb25kaW5nIGVycm9yIHN0YXR1cyBiaXRzCisgKiBAZGV2OiBwb2ludGVyIHRvIFJvb3QgUG9ydCdzIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUKKyAqCisgKiBJbnZva2VkIGJ5IFBvcnQgQnVzIGRyaXZlciBkdXJpbmcgbm9uZmF0YWwgcmVjb3ZlcnkuCisgKiovCitzdGF0aWMgdm9pZCBhZXJfZXJyb3JfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MzIgc3RhdHVzLCBtYXNrOworCXUxNiByZWcxNjsKKworCS8qIENsZWFuIHVwIFJvb3QgZGV2aWNlIHN0YXR1cyAqLworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgJnJlZzE2KTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MgKyBQQ0lfRVhQX0RFVlNUQSwgcmVnMTYpOworCisJLyogQ2xlYW4gQUVSIFJvb3QgRXJyb3IgU3RhdHVzICovCisJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1VOQ09SX1NUQVRVUywgJnN0YXR1cyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9VTkNPUl9TRVZFUiwgJm1hc2spOworCWlmIChkZXYtPmVycm9yX3N0YXRlID09IHBjaV9jaGFubmVsX2lvX25vcm1hbCkKKwkJc3RhdHVzICY9IH5tYXNrOyAvKiBDbGVhciBjb3JyZXNwb25kaW5nIG5vbmZhdGFsIGJpdHMgKi8KKwllbHNlCisJCXN0YXR1cyAmPSBtYXNrOyAvKiBDbGVhciBjb3JyZXNwb25kaW5nIGZhdGFsIGJpdHMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9VTkNPUl9TVEFUVVMsIHN0YXR1cyk7Cit9CisKKy8qKgorICogYWVyX3NlcnZpY2VfaW5pdCAtIHJlZ2lzdGVyIEFFUiByb290IHNlcnZpY2UgZHJpdmVyCisgKgorICogSW52b2tlZCB3aGVuIEFFUiByb290IHNlcnZpY2UgZHJpdmVyIGlzIGxvYWRlZC4KKyAqKi8KK3N0YXRpYyBpbnQgX19pbml0IGFlcl9zZXJ2aWNlX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGNpZV9wb3J0X3NlcnZpY2VfcmVnaXN0ZXIoJmFlcmRydik7Cit9CisKKy8qKgorICogYWVyX3NlcnZpY2VfZXhpdCAtIHVucmVnaXN0ZXIgQUVSIHJvb3Qgc2VydmljZSBkcml2ZXIKKyAqCisgKiBJbnZva2VkIHdoZW4gQUVSIHJvb3Qgc2VydmljZSBkcml2ZXIgaXMgdW5sb2FkZWQuCisgKiovCitzdGF0aWMgdm9pZCBfX2V4aXQgYWVyX3NlcnZpY2VfZXhpdCh2b2lkKQoreworCXBjaWVfcG9ydF9zZXJ2aWNlX3VucmVnaXN0ZXIoJmFlcmRydik7Cit9CisKK21vZHVsZV9pbml0KGFlcl9zZXJ2aWNlX2luaXQpOworbW9kdWxlX2V4aXQoYWVyX3NlcnZpY2VfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaCBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZjBjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnYuaApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbnRlbCBDb3JwLgorICoJVG9tIExvbmcgTmd1eWVuICh0b20ubC5uZ3V5ZW5AaW50ZWwuY29tKQorICoJWmhhbmcgWWFubWluICh5YW5taW4uemhhbmdAaW50ZWwuY29tKQorICoKKyAqLworCisjaWZuZGVmIF9BRVJEUlZfSF8KKyNkZWZpbmUgX0FFUkRSVl9IXworCisjaW5jbHVkZSA8bGludXgvcGNpZXBvcnRfaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9hZXIuaD4KKworI2RlZmluZSBBRVJfTk9ORkFUQUwJCQkwCisjZGVmaW5lIEFFUl9GQVRBTAkJCTEKKyNkZWZpbmUgQUVSX0NPUlJFQ1RBQkxFCQkJMgorI2RlZmluZSBBRVJfVU5DT1JSRUNUQUJMRQkJNAorI2RlZmluZSBBRVJfRVJST1JfTUFTSwkJCTB4MDAxZmZmZmYKKyNkZWZpbmUgQUVSX0VSUk9SKGQpCQkJKGQgJiBBRVJfRVJST1JfTUFTSykKKworI2RlZmluZSBPU0NfTUVUSE9EX1JVTl9TVUNDRVNTCQkwCisjZGVmaW5lIE9TQ19NRVRIT0RfTk9UX1NVUFBPUlRFRAkxCisjZGVmaW5lIE9TQ19NRVRIT0RfUlVOX0ZBSUxVUkUJCTIKKworLyogUm9vdCBFcnJvciBTdGF0dXMgUmVnaXN0ZXIgQml0cyAqLworI2RlZmluZSBST09UX0VSUl9TVEFUVVNfTUFTS1MJCQkweDBmCisKKyNkZWZpbmUgU1lTVEVNX0VSUk9SX0lOVFJfT05fTUVTR19NQVNLCShQQ0lfRVhQX1JUQ1RMX1NFQ0VFfAlcCisJCQkJCVBDSV9FWFBfUlRDVExfU0VORkVFfAlcCisJCQkJCVBDSV9FWFBfUlRDVExfU0VGRUUpCisjZGVmaW5lIFJPT1RfUE9SVF9JTlRSX09OX01FU0dfTUFTSwkoUENJX0VSUl9ST09UX0NNRF9DT1JfRU58CVwKKwkJCQkJUENJX0VSUl9ST09UX0NNRF9OT05GQVRBTF9FTnwJXAorCQkJCQlQQ0lfRVJSX1JPT1RfQ01EX0ZBVEFMX0VOKQorI2RlZmluZSBFUlJfQ09SX0lEKGQpCQkJKGQgJiAweGZmZmYpCisjZGVmaW5lIEVSUl9VTkNPUl9JRChkKQkJCShkID4+IDE2KQorCisjZGVmaW5lIEFFUl9TVUNDRVNTCQkJMAorI2RlZmluZSBBRVJfVU5TVUNDRVNTCQkJMQorI2RlZmluZSBBRVJfRVJST1JfU09VUkNFU19NQVgJCTEwMAorCisjZGVmaW5lIEFFUl9MT0dfVExQX01BU0tTCQkoUENJX0VSUl9VTkNfUE9JU09OX1RMUHwJXAorCQkJCQlQQ0lfRVJSX1VOQ19FQ1JDfAkJXAorCQkJCQlQQ0lfRVJSX1VOQ19VTlNVUHwJCVwKKwkJCQkJUENJX0VSUl9VTkNfQ09NUF9BQk9SVHwJCVwKKwkJCQkJUENJX0VSUl9VTkNfVU5YX0NPTVB8CQlcCisJCQkJCVBDSV9FUlJfVU5DX01BTEZfVExQKQorCisvKiBBRVIgRXJyb3IgSW5mbyBGbGFncyAqLworI2RlZmluZSBBRVJfVExQX0hFQURFUl9WQUxJRF9GTEFHCTB4MDAwMDAwMDEKKyNkZWZpbmUgQUVSX01VTFRJX0VSUk9SX1ZBTElEX0ZMQUcJMHgwMDAwMDAwMgorCisjZGVmaW5lIEVSUl9DT1JSRUNUQUJMRV9FUlJPUl9NQVNLCTB4MDAwMDMxYzEKKyNkZWZpbmUgRVJSX1VOQ09SUkVDVEFCTEVfRVJST1JfTUFTSwkweDAwMWZmMDEwCisKK3N0cnVjdCBoZWFkZXJfbG9nX3JlZ3MgeworCXVuc2lnbmVkIGludCBkdzA7CisJdW5zaWduZWQgaW50IGR3MTsKKwl1bnNpZ25lZCBpbnQgZHcyOworCXVuc2lnbmVkIGludCBkdzM7Cit9OworCitzdHJ1Y3QgYWVyX2Vycl9pbmZvIHsKKwlpbnQgc2V2ZXJpdHk7CQkJLyogMDpOT05GQVRBTCB8IDE6RkFUQUwgfCAyOkNPUiAqLworCWludCBmbGFnczsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwkJLyogQ09SL1VOQ09SIEVycm9yIFN0YXR1cyAqLworCXN0cnVjdCBoZWFkZXJfbG9nX3JlZ3MgdGxwOyAJLyogVExQIEhlYWRlciAqLworfTsKKworc3RydWN0IGFlcl9lcnJfc291cmNlIHsKKwl1bnNpZ25lZCBpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBpZDsKK307CisKK3N0cnVjdCBhZXJfcnBjIHsKKwlzdHJ1Y3QgcGNpZV9kZXZpY2UgKnJwZDsJLyogUm9vdCBQb3J0IGRldmljZSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCBkcGNfaGFuZGxlcjsKKwlzdHJ1Y3QgYWVyX2Vycl9zb3VyY2UgZV9zb3VyY2VzW0FFUl9FUlJPUl9TT1VSQ0VTX01BWF07CisJdW5zaWduZWQgc2hvcnQgcHJvZF9pZHg7CS8qIEVycm9yIFByb2R1Y2VyIEluZGV4ICovCisJdW5zaWduZWQgc2hvcnQgY29uc19pZHg7CS8qIEVycm9yIENvbnN1bWVyIEluZGV4ICovCisJaW50IGlzcjsKKwlzcGlubG9ja190IGVfbG9jazsJCS8qCisJCQkJCSAqIExvY2sgYWNjZXNzIHRvIEVycm9yIFN0YXR1cy9JRCBSZWdzCisJCQkJCSAqIGFuZCBlcnJvciBwcm9kdWNlci9jb25zdW1lciBpbmRleAorCQkJCQkgKi8KKwlzdHJ1Y3QgbXV0ZXggcnBjX211dGV4OwkJLyoKKwkJCQkJICogb25seSBvbmUgdGhyZWFkIGNvdWxkIGRvCisJCQkJCSAqIHJlY292ZXJ5IG9uIHRoZSBzYW1lCisJCQkJCSAqIHJvb3QgcG9ydCBoaWVyYWNoeQorCQkJCQkgKi8KKwl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0X3JlbGVhc2U7Cit9OworCitzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhIHsKKwllbnVtIHBjaV9jaGFubmVsX3N0YXRlIHN0YXRlOworCWVudW0gcGNpX2Vyc19yZXN1bHQgcmVzdWx0OworfTsKKworc3RhdGljIGlubGluZSBwY2lfZXJzX3Jlc3VsdF90IG1lcmdlX3Jlc3VsdChlbnVtIHBjaV9lcnNfcmVzdWx0IG9yaWcsCisJCWVudW0gcGNpX2Vyc19yZXN1bHQgbmV3KQoreworCXN3aXRjaCAob3JpZykgeworCWNhc2UgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVI6CisJY2FzZSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ6CisJCW9yaWcgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDoKKwkJaWYgKG5ldyA9PSBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JFU0VUKQorCQkJb3JpZyA9IG5ldzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIG9yaWc7Cit9CisKK2V4dGVybiBzdHJ1Y3QgYnVzX3R5cGUgcGNpZV9wb3J0X2J1c190eXBlOworZXh0ZXJuIHZvaWQgYWVyX2VuYWJsZV9yb290cG9ydChzdHJ1Y3QgYWVyX3JwYyAqcnBjKTsKK2V4dGVybiB2b2lkIGFlcl9kZWxldGVfcm9vdHBvcnQoc3RydWN0IGFlcl9ycGMgKnJwYyk7CitleHRlcm4gaW50IGFlcl9pbml0KHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGFlcl9pc3Iodm9pZCAqY29udGV4dCk7CitleHRlcm4gdm9pZCBhZXJfcHJpbnRfZXJyb3Ioc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGFlcl9lcnJfaW5mbyAqaW5mbyk7CitleHRlcm4gaW50IGFlcl9vc2Nfc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldik7CisKKyNlbmRpZiAvL19BRVJEUlZfSF8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9hY3BpLmMgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhNjhlODkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfYWNwaS5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBBY2Nlc3MgQUNQSSBfT1NDIG1ldGhvZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbnRlbCBDb3JwLgorICoJVG9tIExvbmcgTmd1eWVuICh0b20ubC5uZ3V5ZW5AaW50ZWwuY29tKQorICoJWmhhbmcgWWFubWluICh5YW5taW4uemhhbmdAaW50ZWwuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgImFlcmRydi5oIgorCisvKioKKyAqIGFlcl9vc2Nfc2V0dXAgLSBydW4gQUNQSSBfT1NDIG1ldGhvZAorICoKKyAqIFJldHVybjoKKyAqCVplcm8gaWYgc3VjY2Vzcy4gTm9uemVybyBmb3Igb3RoZXJ3aXNlLgorICoKKyAqIEludm9rZWQgd2hlbiBQQ0lFIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuIFRvIGF2b2lkIGNvbmZsaWN0IHdpdGgKKyAqIEJJT1MgQUVSIHN1cHBvcnQgcmVxdWlyZXMgQklPUyB0byB5aWVsZCBBRVIgY29udHJvbCB0byBPUyBuYXRpdmUgZHJpdmVyLgorICoqLworaW50IGFlcl9vc2Nfc2V0dXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcmV0dmFsID0gT1NDX01FVEhPRF9SVU5fU1VDQ0VTUzsKKwlhY3BpX3N0YXR1cyBzdGF0dXM7CisJYWNwaV9oYW5kbGUgaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKCZkZXYtPmRldik7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBkZXY7CisJc3RydWN0IHBjaV9idXMgKnBhcmVudDsKKworCXdoaWxlICghaGFuZGxlKSB7CisJCWlmICghcGRldiB8fCAhcGRldi0+YnVzLT5wYXJlbnQpCisJCQlicmVhazsKKwkJcGFyZW50ID0gcGRldi0+YnVzLT5wYXJlbnQ7CisJCWlmICghcGFyZW50LT5zZWxmKQorCQkJLyogUGFyZW50IG11c3QgYmUgYSBob3N0IGJyaWRnZSAqLworCQkJaGFuZGxlID0gYWNwaV9nZXRfcGNpX3Jvb3RicmlkZ2VfaGFuZGxlKAorCQkJCQlwY2lfZG9tYWluX25yKHBhcmVudCksCisJCQkJCXBhcmVudC0+bnVtYmVyKTsKKwkJZWxzZQorCQkJaGFuZGxlID0gREVWSUNFX0FDUElfSEFORExFKAorCQkJCQkmKHBhcmVudC0+c2VsZi0+ZGV2KSk7CisJCXBkZXYgPSBwYXJlbnQtPnNlbGY7CisJfQorCisJaWYgKCFoYW5kbGUpCisJCXJldHVybiBPU0NfTUVUSE9EX05PVF9TVVBQT1JURUQ7CisKKwlwY2lfb3NjX3N1cHBvcnRfc2V0KE9TQ19FWFRfUENJX0NPTkZJR19TVVBQT1JUKTsKKwlzdGF0dXMgPSBwY2lfb3NjX2NvbnRyb2xfc2V0KGhhbmRsZSwgT1NDX1BDSV9FWFBSRVNTX0FFUl9DT05UUk9MIHwKKwkJT1NDX1BDSV9FWFBSRVNTX0NBUF9TVFJVQ1RVUkVfQ09OVFJPTCk7CisJaWYgKEFDUElfRkFJTFVSRShzdGF0dXMpKSB7CisJCWlmIChzdGF0dXMgPT0gQUVfU1VQUE9SVCkKKwkJCXJldHZhbCA9IE9TQ19NRVRIT0RfTk9UX1NVUFBPUlRFRDsKKwkgCWVsc2UKKwkJCXJldHZhbCA9IE9TQ19NRVRIT0RfUlVOX0ZBSUxVUkU7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2NvcmUuYyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWM3ZTY2MAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9jb3JlLmMKQEAgLTAsMCArMSw3NTggQEAKKy8qCisgKiBkcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfY29yZS5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgdGhlIGNvcmUgcGFydCBvZiBQQ0ktRXhwcmVzcyBBRVIuIFdoZW4gYW4gcGNpLWV4cHJlc3MKKyAqIGVycm9yIGlzIGRlbGl2ZXJlZCwgYW4gZXJyb3IgbWVzc2FnZSB3aWxsIGJlIGNvbGxlY3RlZCBhbmQgcHJpbnRlZCB0bworICogY29uc29sZSwgdGhlbiwgYW4gZXJyb3IgcmVjb3ZlcnkgcHJvY2VkdXJlIHdpbGwgYmUgZXhlY3V0ZWQgYnkgZm9sbG93aW5nCisgKiB0aGUgcGNpIGVycm9yIHJlY292ZXJ5IHJ1bGVzLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBJbnRlbCBDb3JwLgorICoJVG9tIExvbmcgTmd1eWVuICh0b20ubC5uZ3V5ZW5AaW50ZWwuY29tKQorICoJWmhhbmcgWWFubWluICh5YW5taW4uemhhbmdAaW50ZWwuY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9wbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLWFjcGkuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgImFlcmRydi5oIgorCitzdGF0aWMgaW50IGZvcmNlbG9hZDsKK21vZHVsZV9wYXJhbShmb3JjZWxvYWQsIGJvb2wsIDApOworCisjZGVmaW5lIFBDSV9DRkdfU1BBQ0VfU0laRQkoMHgxMDApCitpbnQgcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcG9zOworCXUzMiByZWczMiA9IDA7CisKKwkvKiBDaGVjayBpZiBpdCdzIGEgcGNpLWV4cHJlc3MgZGV2aWNlICovCisJcG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfRVhQKTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIDA7CisKKwkvKiBDaGVjayBpZiBpdCBzdXBwb3J0cyBwY2ktZXhwcmVzcyBBRVIgKi8KKwlwb3MgPSBQQ0lfQ0ZHX1NQQUNFX1NJWkU7CisJd2hpbGUgKHBvcykgeworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmcmVnMzIpKQorCQkJcmV0dXJuIDA7CisKKwkJLyogc29tZSBicm9rZW4gYm9hcmRzIHJldHVybiB+MCAqLworCQlpZiAocmVnMzIgPT0gMHhmZmZmZmZmZikKKwkJCXJldHVybiAwOworCisJCWlmIChQQ0lfRVhUX0NBUF9JRChyZWczMikgPT0gUENJX0VYVF9DQVBfSURfRVJSKQorCQkJYnJlYWs7CisKKwkJcG9zID0gcmVnMzIgPj4gMjA7CisJfQorCisJcmV0dXJuIHBvczsKK30KKworaW50IHBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwl1MTYgcmVnMTYgPSAwOworCWludCBwb3M7CisKKwlwb3MgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGRldiwgUENJX0NBUF9JRF9FWFApOworCWlmICghcG9zKQorCQlyZXR1cm4gLUVJTzsKKworCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldiwgcG9zK1BDSV9FWFBfREVWQ1RMLCAmcmVnMTYpOworCXJlZzE2ID0gcmVnMTYgfAorCQlQQ0lfRVhQX0RFVkNUTF9DRVJFIHwKKwkJUENJX0VYUF9ERVZDVExfTkZFUkUgfAorCQlQQ0lfRVhQX0RFVkNUTF9GRVJFIHwKKwkJUENJX0VYUF9ERVZDVExfVVJSRTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBwb3MrUENJX0VYUF9ERVZDVEwsCisJCQlyZWcxNik7CisJcmV0dXJuIDA7Cit9CisKK2ludCBwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXUxNiByZWcxNiA9IDA7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCk7CisJaWYgKCFwb3MpCisJCXJldHVybiAtRUlPOworCisJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBwb3MrUENJX0VYUF9ERVZDVEwsICZyZWcxNik7CisJcmVnMTYgPSByZWcxNiAmIH4oUENJX0VYUF9ERVZDVExfQ0VSRSB8CisJCQlQQ0lfRVhQX0RFVkNUTF9ORkVSRSB8CisJCQlQQ0lfRVhQX0RFVkNUTF9GRVJFIHwKKwkJCVBDSV9FWFBfREVWQ1RMX1VSUkUpOworCXBjaV93cml0ZV9jb25maWdfd29yZChkZXYsIHBvcytQQ0lfRVhQX0RFVkNUTCwKKwkJCXJlZzE2KTsKKwlyZXR1cm4gMDsKK30KKworaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaW50IHBvczsKKwl1MzIgc3RhdHVzLCBtYXNrOworCisJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkoZGV2KTsKKwlpZiAoIXBvcykKKwkJcmV0dXJuIC1FSU87CisKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LCBwb3MgKyBQQ0lfRVJSX1VOQ09SX1NUQVRVUywgJnN0YXR1cyk7CisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9VTkNPUl9TRVZFUiwgJm1hc2spOworCWlmIChkZXYtPmVycm9yX3N0YXRlID09IHBjaV9jaGFubmVsX2lvX25vcm1hbCkKKwkJc3RhdHVzICY9IH5tYXNrOyAvKiBDbGVhciBjb3JyZXNwb25kaW5nIG5vbmZhdGFsIGJpdHMgKi8KKwllbHNlCisJCXN0YXR1cyAmPSBtYXNrOyAvKiBDbGVhciBjb3JyZXNwb25kaW5nIGZhdGFsIGJpdHMgKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9VTkNPUl9TVEFUVVMsIHN0YXR1cyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaW5kX2RldmljZV9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqZGV2OworCXUxNiBpZCA9ICoodW5zaWduZWQgbG9uZyAqKWRhdGE7CisJdTggc2Vjb25kYXJ5LCBzdWJvcmRpbmF0ZSwgZF9idXMgPSBpZCA+PiA4OworCisJaWYgKGRldmljZS0+YnVzID09ICZwY2lfYnVzX3R5cGUpIHsKKwkJZGV2ID0gdG9fcGNpX2RldihkZXZpY2UpOworCQlpZiAoaWQgPT0gKChkZXYtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2LT5kZXZmbikpIHsKKwkJCS8qCisJCQkgKiBEZXZpY2UgSUQgbWF0Y2gKKwkJCSAqLworCQkJKih1bnNpZ25lZCBsb25nKilkYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2aWNlOworCQkJcmV0dXJuIDE7CisJCX0KKworCQkvKgorCQkgKiBJZiBkZXZpY2UgaXMgUDJQLCBjaGVjayBpZiBpdCBpcyBhbiB1cHN0cmVhbT8KKwkJICovCisJCWlmIChkZXYtPmhkcl90eXBlICYgUENJX0hFQURFUl9UWVBFX0JSSURHRSkgeworCQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfU0VDT05EQVJZX0JVUywKKwkJCQkmc2Vjb25kYXJ5KTsKKwkJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX1NVQk9SRElOQVRFX0JVUywKKwkJCQkmc3Vib3JkaW5hdGUpOworCQkJaWYgKGRfYnVzID49IHNlY29uZGFyeSAmJiBkX2J1cyA8PSBzdWJvcmRpbmF0ZSkgeworCQkJCSoodW5zaWduZWQgbG9uZyopZGF0YSA9ICh1bnNpZ25lZCBsb25nKWRldmljZTsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqIGZpbmRfc291cmNlX2RldmljZSAtIHNlYXJjaCB0aHJvdWdoIGRldmljZSBoaWVyYXJjaHkgZm9yIHNvdXJjZSBkZXZpY2UKKyAqIEBwX2RldjogcG9pbnRlciB0byBSb290IFBvcnQgcGNpX2RldiBkYXRhIHN0cnVjdHVyZQorICogQGlkOiBkZXZpY2UgSUQgb2YgYWdlbnQgd2hvIHNlbmRzIGFuIGVycm9yIG1lc3NhZ2UgdG8gdGhpcyBSb290IFBvcnQKKyAqCisgKiBJbnZva2VkIHdoZW4gZXJyb3IgaXMgZGV0ZWN0ZWQgYXQgdGhlIFJvb3QgUG9ydC4KKyAqKi8KK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlKiBmaW5kX3NvdXJjZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKnBhcmVudCwgdTE2IGlkKQoreworCXN0cnVjdCBwY2lfZGV2ICpkZXYgPSBwYXJlbnQ7CisJc3RydWN0IGRldmljZSAqZGV2aWNlOworCXVuc2lnbmVkIGxvbmcgZGV2aWNlX2FkZHI7CisJaW50IHN0YXR1czsKKworCS8qIElzIFJvb3QgUG9ydCBhbiBhZ2VudCB0aGF0IHNlbmRzIGVycm9yIG1lc3NhZ2U/ICovCisJaWYgKGlkID09ICgoZGV2LT5idXMtPm51bWJlciA8PCA4KSB8IGRldi0+ZGV2Zm4pKQorCQlyZXR1cm4gJmRldi0+ZGV2OworCisJZG8geworCQlkZXZpY2VfYWRkciA9IGlkOworIAkJaWYgKChzdGF0dXMgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LAorCQkJJmRldmljZV9hZGRyLCBmaW5kX2RldmljZV9pdGVyKSkpIHsKKwkJCWRldmljZSA9IChzdHJ1Y3QgZGV2aWNlKilkZXZpY2VfYWRkcjsKKwkJCWRldiA9IHRvX3BjaV9kZXYoZGV2aWNlKTsKKwkJCWlmIChpZCA9PSAoKGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCBkZXYtPmRldmZuKSkKKwkJCQlyZXR1cm4gZGV2aWNlOworCQl9CisgCX13aGlsZSAoc3RhdHVzKTsKKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlwY2lfZXJzX3Jlc3VsdF90IHZvdGU7CisJc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyAqZXJyX2hhbmRsZXI7CisJc3RydWN0IGFlcl9icm9hZGNhc3RfZGF0YSAqcmVzdWx0X2RhdGE7CisJcmVzdWx0X2RhdGEgPSAoc3RydWN0IGFlcl9icm9hZGNhc3RfZGF0YSAqKSBkYXRhOworCisJZGV2LT5lcnJvcl9zdGF0ZSA9IHJlc3VsdF9kYXRhLT5zdGF0ZTsKKworCWlmICghZGV2LT5kcml2ZXIgfHwKKwkJIWRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlciB8fAorCQkhZGV2LT5kcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkgeworCQlpZiAocmVzdWx0X2RhdGEtPnN0YXRlID09IHBjaV9jaGFubmVsX2lvX2Zyb3plbiAmJgorCQkJIShkZXYtPmhkcl90eXBlICYgUENJX0hFQURFUl9UWVBFX0JSSURHRSkpIHsKKwkJCS8qCisJCQkgKiBJbiBjYXNlIG9mIGZhdGFsIHJlY292ZXJ5LCBpZiBvbmUgb2YgZG93bi0KKwkJCSAqIHN0cmVhbSBkZXZpY2UgaGFzIG5vIGRyaXZlci4gV2UgbWlnaHQgYmUKKwkJCSAqIHVuYWJsZSB0byByZWNvdmVyIGJlY2F1c2UgYSBsYXRlciBpbnNtb2QKKwkJCSAqIG9mIGEgZHJpdmVyIGZvciB0aGlzIGRldmljZSBpcyB1bmF3YXJlIG9mCisJCQkgKiBpdHMgaHcgc3RhdGUuCisJCQkgKi8KKwkJCXByaW50ayhLRVJOX0RFQlVHICJEZXZpY2UgSURbJXNdIGhhcyAlc1xuIiwKKwkJCQkJZGV2LT5kZXYuYnVzX2lkLCAoZGV2LT5kcml2ZXIpID8KKwkJCQkJIm5vIEFFUi1hd2FyZSBkcml2ZXIiIDogIm5vIGRyaXZlciIpOworCQl9CisJCXJldHVybjsKKwl9CisKKwllcnJfaGFuZGxlciA9IGRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlcjsKKwl2b3RlID0gZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKGRldiwgcmVzdWx0X2RhdGEtPnN0YXRlKTsKKwlyZXN1bHRfZGF0YS0+cmVzdWx0ID0gbWVyZ2VfcmVzdWx0KHJlc3VsdF9kYXRhLT5yZXN1bHQsIHZvdGUpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgcmVwb3J0X21taW9fZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCXBjaV9lcnNfcmVzdWx0X3Qgdm90ZTsKKwlzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlcjsKKwlzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhICpyZXN1bHRfZGF0YTsKKwlyZXN1bHRfZGF0YSA9IChzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhICopIGRhdGE7CisKKwlpZiAoIWRldi0+ZHJpdmVyIHx8CisJCSFkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkJIWRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlci0+bW1pb19lbmFibGVkKQorCQlyZXR1cm47CisKKwllcnJfaGFuZGxlciA9IGRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlcjsKKwl2b3RlID0gZXJyX2hhbmRsZXItPm1taW9fZW5hYmxlZChkZXYpOworCXJlc3VsdF9kYXRhLT5yZXN1bHQgPSBtZXJnZV9yZXN1bHQocmVzdWx0X2RhdGEtPnJlc3VsdCwgdm90ZSk7CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCByZXBvcnRfc2xvdF9yZXNldChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB2b2lkICpkYXRhKQoreworCXBjaV9lcnNfcmVzdWx0X3Qgdm90ZTsKKwlzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlcjsKKwlzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhICpyZXN1bHRfZGF0YTsKKwlyZXN1bHRfZGF0YSA9IChzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhICopIGRhdGE7CisKKwlpZiAoIWRldi0+ZHJpdmVyIHx8CisJCSFkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkJIWRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlci0+c2xvdF9yZXNldCkKKwkJcmV0dXJuOworCisJZXJyX2hhbmRsZXIgPSBkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXI7CisJdm90ZSA9IGVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KGRldik7CisJcmVzdWx0X2RhdGEtPnJlc3VsdCA9IG1lcmdlX3Jlc3VsdChyZXN1bHRfZGF0YS0+cmVzdWx0LCB2b3RlKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHJlcG9ydF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpX2Vycm9yX2hhbmRsZXJzICplcnJfaGFuZGxlcjsKKworCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisKKwlpZiAoIWRldi0+ZHJpdmVyIHx8CisJCSFkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKKwkJIWRldi0+ZHJpdmVyLT5lcnJfaGFuZGxlci0+c2xvdF9yZXNldCkKKwkJcmV0dXJuOworCisJZXJyX2hhbmRsZXIgPSBkZXYtPmRyaXZlci0+ZXJyX2hhbmRsZXI7CisJZXJyX2hhbmRsZXItPnJlc3VtZShkZXYpOworCXJldHVybjsKK30KKworLyoqCisgKiBicm9hZGNhc3RfZXJyb3JfbWVzc2FnZSAtIGhhbmRsZSBtZXNzYWdlIGJyb2FkY2FzdCB0byBkb3duc3RyZWFtIGRyaXZlcnMKKyAqIEBkZXZpY2U6IHBvaW50ZXIgdG8gZnJvbSB3aGVyZSBpbiBhIGhpZXJhcmNoeSBtZXNzYWdlIGlzIGJyb2FkY2FzdGVkIGRvd24KKyAqIEBhcGk6IGNhbGxiYWNrIHRvIGJlIGJyb2FkY2FzdGVkCisgKiBAc3RhdGU6IGVycm9yIHN0YXRlCisgKgorICogSW52b2tlZCBkdXJpbmcgZXJyb3IgcmVjb3ZlcnkgcHJvY2Vzcy4gT25jZSBiZWluZyBpbnZva2VkLCB0aGUgY29udGVudAorICogb2YgZXJyb3Igc2V2ZXJpdHkgd2lsbCBiZSBicm9hZGNhc3RlZCB0byBhbGwgZG93bnN0cmVhbSBkcml2ZXJzIGluIGEKKyAqIGhpZXJhcmNoeSBpbiBxdWVzdGlvbi4KKyAqKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGJyb2FkY2FzdF9lcnJvcl9tZXNzYWdlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZSwKKwljaGFyICplcnJvcl9tZXNnLAorCXZvaWQgKCpjYikoc3RydWN0IHBjaV9kZXYgKiwgdm9pZCAqKSkKK3sKKwlzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhIHJlc3VsdF9kYXRhOworCisJcHJpbnRrKEtFUk5fREVCVUcgIkJyb2FkY2FzdCAlcyBtZXNzYWdlXG4iLCBlcnJvcl9tZXNnKTsKKwlyZXN1bHRfZGF0YS5zdGF0ZSA9IHN0YXRlOworCWlmIChjYiA9PSByZXBvcnRfZXJyb3JfZGV0ZWN0ZWQpCisJCXJlc3VsdF9kYXRhLnJlc3VsdCA9IFBDSV9FUlNfUkVTVUxUX0NBTl9SRUNPVkVSOworCWVsc2UKKwkJcmVzdWx0X2RhdGEucmVzdWx0ID0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworCisJaWYgKGRldi0+aGRyX3R5cGUgJiBQQ0lfSEVBREVSX1RZUEVfQlJJREdFKSB7CisJCS8qCisJCSAqIElmIHRoZSBlcnJvciBpcyByZXBvcnRlZCBieSBhIGJyaWRnZSwgd2UgdGhpbmsgdGhpcyBlcnJvcgorCQkgKiBpcyByZWxhdGVkIHRvIHRoZSBkb3duc3RyZWFtIGxpbmsgb2YgdGhlIGJyaWRnZSwgc28gd2UKKwkJICogZG8gZXJyb3IgcmVjb3Zlcnkgb24gYWxsIHN1Ym9yZGluYXRlcyBvZiB0aGUgYnJpZGdlIGluc3RlYWQKKwkJICogb2YgdGhlIGJyaWRnZSBhbmQgY2xlYXIgdGhlIGVycm9yIHN0YXR1cyBvZiB0aGUgYnJpZGdlLgorCQkgKi8KKwkJaWYgKGNiID09IHJlcG9ydF9lcnJvcl9kZXRlY3RlZCkKKwkJCWRldi0+ZXJyb3Jfc3RhdGUgPSBzdGF0ZTsKKwkJcGNpX3dhbGtfYnVzKGRldi0+c3Vib3JkaW5hdGUsIGNiLCAmcmVzdWx0X2RhdGEpOworCQlpZiAoY2IgPT0gcmVwb3J0X3Jlc3VtZSkgeworCQkJcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoZGV2KTsKKwkJCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisJCX0KKwl9CisJZWxzZSB7CisJCS8qCisJCSAqIElmIHRoZSBlcnJvciBpcyByZXBvcnRlZCBieSBhbiBlbmQgcG9pbnQsIHdlIHRoaW5rIHRoaXMKKwkJICogZXJyb3IgaXMgcmVsYXRlZCB0byB0aGUgdXBzdHJlYW0gbGluayBvZiB0aGUgZW5kIHBvaW50LgorCQkgKi8KKwkJcGNpX3dhbGtfYnVzKGRldi0+YnVzLCBjYiwgJnJlc3VsdF9kYXRhKTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0X2RhdGEucmVzdWx0OworfQorCitzdHJ1Y3QgZmluZF9hZXJfc2VydmljZV9kYXRhIHsKKwlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICphZXJfZHJpdmVyOworCWludCBpc19kb3duc3RyZWFtOworfTsKKworc3RhdGljIGludCBmaW5kX2Flcl9zZXJ2aWNlX2l0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqc2VydmljZV9kcml2ZXI7CisJc3RydWN0IHBjaWVfZGV2aWNlICpwY2llX2RldjsKKwlzdHJ1Y3QgZmluZF9hZXJfc2VydmljZV9kYXRhICpyZXN1bHQ7CisKKwlyZXN1bHQgPSAoc3RydWN0IGZpbmRfYWVyX3NlcnZpY2VfZGF0YSAqKSBkYXRhOworCisJaWYgKGRldmljZS0+YnVzID09ICZwY2llX3BvcnRfYnVzX3R5cGUpIHsKKwkJcGNpZV9kZXYgPSB0b19wY2llX2RldmljZShkZXZpY2UpOworCQlpZiAocGNpZV9kZXYtPmlkLnBvcnRfdHlwZSA9PSBQQ0lFX1NXX0RPV05TVFJFQU1fUE9SVCkKKwkJCXJlc3VsdC0+aXNfZG93bnN0cmVhbSA9IDE7CisKKwkJZHJpdmVyID0gZGV2aWNlLT5kcml2ZXI7CisJCWlmIChkcml2ZXIpIHsKKwkJCXNlcnZpY2VfZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZHJpdmVyKTsKKwkJCWlmIChzZXJ2aWNlX2RyaXZlci0+aWRfdGFibGUtPnNlcnZpY2VfdHlwZSA9PQorCQkJCQlQQ0lFX1BPUlRfU0VSVklDRV9BRVIpIHsKKwkJCQlyZXN1bHQtPmFlcl9kcml2ZXIgPSBzZXJ2aWNlX2RyaXZlcjsKKwkJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmaW5kX2Flcl9zZXJ2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCXN0cnVjdCBmaW5kX2Flcl9zZXJ2aWNlX2RhdGEgKmRhdGEpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCBkYXRhLCBmaW5kX2Flcl9zZXJ2aWNlX2l0ZXIpOworfQorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCByZXNldF9saW5rKHN0cnVjdCBwY2llX2RldmljZSAqYWVyZGV2LAorCQlzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCBwY2lfZGV2ICp1ZGV2OworCXBjaV9lcnNfcmVzdWx0X3Qgc3RhdHVzOworCXN0cnVjdCBmaW5kX2Flcl9zZXJ2aWNlX2RhdGEgZGF0YTsKKworCWlmIChkZXYtPmhkcl90eXBlICYgUENJX0hFQURFUl9UWVBFX0JSSURHRSkKKwkJdWRldiA9IGRldjsKKwllbHNlCisJCXVkZXY9IGRldi0+YnVzLT5zZWxmOworCisJZGF0YS5pc19kb3duc3RyZWFtID0gMDsKKwlkYXRhLmFlcl9kcml2ZXIgPSBOVUxMOworCWZpbmRfYWVyX3NlcnZpY2UodWRldiwgJmRhdGEpOworCisJLyoKKwkgKiBVc2UgdGhlIGFlciBkcml2ZXIgb2YgdGhlIGVycm9yIGFnZW50IGZpcnN0bHkuCisJICogSWYgaXQgaGFzbid0IHRoZSBhZXIgZHJpdmVyLCB1c2UgdGhlIHJvb3QgcG9ydCdzCisJICovCisJaWYgKCFkYXRhLmFlcl9kcml2ZXIgfHwgIWRhdGEuYWVyX2RyaXZlci0+cmVzZXRfbGluaykgeworCQlpZiAoZGF0YS5pc19kb3duc3RyZWFtICYmCisJCQlhZXJkZXYtPmRldmljZS5kcml2ZXIgJiYKKwkJCXRvX3NlcnZpY2VfZHJpdmVyKGFlcmRldi0+ZGV2aWNlLmRyaXZlciktPnJlc2V0X2xpbmspIHsKKwkJCWRhdGEuYWVyX2RyaXZlciA9CisJCQkJdG9fc2VydmljZV9kcml2ZXIoYWVyZGV2LT5kZXZpY2UuZHJpdmVyKTsKKwkJfSBlbHNlIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJObyBsaW5rLXJlc2V0IHN1cHBvcnQgdG8gRGV2aWNlIElEIgorCQkJCSJbJXNdXG4iLAorCQkJCWRldi0+ZGV2LmJ1c19pZCk7CisJCQlyZXR1cm4gUENJX0VSU19SRVNVTFRfRElTQ09OTkVDVDsKKwkJfQorCX0KKworCXN0YXR1cyA9IGRhdGEuYWVyX2RyaXZlci0+cmVzZXRfbGluayh1ZGV2KTsKKwlpZiAoc3RhdHVzICE9IFBDSV9FUlNfUkVTVUxUX1JFQ09WRVJFRCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiTGluayByZXNldCBhdCB1cHN0cmVhbSBEZXZpY2UgSUQiCisJCQkiWyVzXSBmYWlsZWRcbiIsCisJCQl1ZGV2LT5kZXYuYnVzX2lkKTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiBkb19yZWNvdmVyeSAtIGhhbmRsZSBub25mYXRhbC9mYXRhbCBlcnJvciByZWNvdmVyeSBwcm9jZXNzCisgKiBAYWVyZGV2OiBwb2ludGVyIHRvIGEgcGNpZV9kZXZpY2UgZGF0YSBzdHJ1Y3R1cmUgb2Ygcm9vdCBwb3J0CisgKiBAZGV2OiBwb2ludGVyIHRvIGEgcGNpX2RldiBkYXRhIHN0cnVjdHVyZSBvZiBhZ2VudCBkZXRlY3RpbmcgYW4gZXJyb3IKKyAqIEBzZXZlcml0eTogZXJyb3Igc2V2ZXJpdHkgdHlwZQorICoKKyAqIEludm9rZWQgd2hlbiBhbiBlcnJvciBpcyBub25mYXRhbC9mYXRhbC4gT25jZSBiZWluZyBpbnZva2VkLCBicm9hZGNhc3QKKyAqIGVycm9yIGRldGVjdGVkIG1lc3NhZ2UgdG8gYWxsIGRvd25zdHJlYW0gZHJpdmVycyB3aXRoaW4gYSBoaWVyYXJjaHkgaW4KKyAqIHF1ZXN0aW9uIGFuZCByZXR1cm4gdGhlIHJldHVybmVkIGNvZGUuCisgKiovCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBkb19yZWNvdmVyeShzdHJ1Y3QgcGNpZV9kZXZpY2UgKmFlcmRldiwKKwkJc3RydWN0IHBjaV9kZXYgKmRldiwKKwkJaW50IHNldmVyaXR5KQoreworCXBjaV9lcnNfcmVzdWx0X3Qgc3RhdHVzLCByZXN1bHQgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJZW51bSBwY2lfY2hhbm5lbF9zdGF0ZSBzdGF0ZTsKKworCWlmIChzZXZlcml0eSA9PSBBRVJfRkFUQUwpCisJCXN0YXRlID0gcGNpX2NoYW5uZWxfaW9fZnJvemVuOworCWVsc2UKKwkJc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CisKKwlzdGF0dXMgPSBicm9hZGNhc3RfZXJyb3JfbWVzc2FnZShkZXYsCisJCQlzdGF0ZSwKKwkJCSJlcnJvcl9kZXRlY3RlZCIsCisJCQlyZXBvcnRfZXJyb3JfZGV0ZWN0ZWQpOworCisJaWYgKHNldmVyaXR5ID09IEFFUl9GQVRBTCkgeworCQlyZXN1bHQgPSByZXNldF9saW5rKGFlcmRldiwgZGV2KTsKKwkJaWYgKHJlc3VsdCAhPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQpIHsKKwkJCS8qIFRPRE86IFNob3VsZCBwYW5pYyBoZXJlPyAqLworCQkJcmV0dXJuIHJlc3VsdDsKKwkJfQorCX0KKworCWlmIChzdGF0dXMgPT0gUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVIpCisJCXN0YXR1cyA9IGJyb2FkY2FzdF9lcnJvcl9tZXNzYWdlKGRldiwKKwkJCQlzdGF0ZSwKKwkJCQkibW1pb19lbmFibGVkIiwKKwkJCQlyZXBvcnRfbW1pb19lbmFibGVkKTsKKworCWlmIChzdGF0dXMgPT0gUENJX0VSU19SRVNVTFRfTkVFRF9SRVNFVCkgeworCQkvKgorCQkgKiBUT0RPOiBTaG91bGQgY2FsbCBwbGF0Zm9ybS1zcGVjaWZpYworCQkgKiBmdW5jdGlvbnMgdG8gcmVzZXQgc2xvdCBiZWZvcmUgY2FsbGluZworCQkgKiBkcml2ZXJzJyBzbG90X3Jlc2V0IGNhbGxiYWNrcz8KKwkJICovCisJCXN0YXR1cyA9IGJyb2FkY2FzdF9lcnJvcl9tZXNzYWdlKGRldiwKKwkJCQlzdGF0ZSwKKwkJCQkic2xvdF9yZXNldCIsCisJCQkJcmVwb3J0X3Nsb3RfcmVzZXQpOworCX0KKworCWlmIChzdGF0dXMgPT0gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEKQorCQlicm9hZGNhc3RfZXJyb3JfbWVzc2FnZShkZXYsCisJCQkJc3RhdGUsCisJCQkJInJlc3VtZSIsCisJCQkJcmVwb3J0X3Jlc3VtZSk7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIGhhbmRsZV9lcnJvcl9zb3VyY2UgLSBoYW5kbGUgbG9nZ2luZyBlcnJvciBpbnRvIGFuIGV2ZW50IGxvZworICogQGFlcmRldjogcG9pbnRlciB0byBwY2llX2RldmljZSBkYXRhIHN0cnVjdHVyZSBvZiB0aGUgcm9vdCBwb3J0CisgKiBAZGV2OiBwb2ludGVyIHRvIHBjaV9kZXYgZGF0YSBzdHJ1Y3R1cmUgb2YgZXJyb3Igc291cmNlIGRldmljZQorICogQGluZm86IGNvbXByZWhlbnNpdmUgZXJyb3IgaW5mb3JtYXRpb24KKyAqCisgKiBJbnZva2VkIHdoZW4gYW4gZXJyb3IgYmVpbmcgZGV0ZWN0ZWQgYnkgUm9vdCBQb3J0LgorICoqLworc3RhdGljIHZvaWQgaGFuZGxlX2Vycm9yX3NvdXJjZShzdHJ1Y3QgcGNpZV9kZXZpY2UgKiBhZXJkZXYsCisJc3RydWN0IHBjaV9kZXYgKmRldiwKKwlzdHJ1Y3QgYWVyX2Vycl9pbmZvIGluZm8pCit7CisJcGNpX2Vyc19yZXN1bHRfdCBzdGF0dXMgPSAwOworCWludCBwb3M7CisKKwlpZiAoaW5mby5zZXZlcml0eSA9PSBBRVJfQ09SUkVDVEFCTEUpIHsKKwkJLyoKKwkJICogQ29ycmVjdGFibGUgZXJyb3IgZG9lcyBub3QgbmVlZCBzb2Z0d2FyZSBpbnRldmVudGlvbi4KKwkJICogTm8gbmVlZCB0byBnbyB0aHJvdWdoIGVycm9yIHJlY292ZXJ5IHByb2Nlc3MuCisJCSAqLworCQlwb3MgPSBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShkZXYpOworCQlpZiAocG9zKQorCQkJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfQ09SX1NUQVRVUywKKwkJCQkJaW5mby5zdGF0dXMpOworCX0gZWxzZSB7CisJCXN0YXR1cyA9IGRvX3JlY292ZXJ5KGFlcmRldiwgZGV2LCBpbmZvLnNldmVyaXR5KTsKKwkJaWYgKHN0YXR1cyA9PSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQpIHsKKwkJCXByaW50ayhLRVJOX0RFQlVHICJBRVIgZHJpdmVyIHN1Y2Nlc3NmdWxseSByZWNvdmVyZWRcbiIpOworCQl9IGVsc2UgeworCQkJLyogVE9ETzogU2hvdWxkIGtlcm5lbCBwYW5pYyBoZXJlPyAqLworCQkJcHJpbnRrKEtFUk5fREVCVUcgIkFFUiBkcml2ZXIgZGlkbid0IHJlY292ZXJcbiIpOworCQl9CisJfQorfQorCisvKioKKyAqIGFlcl9lbmFibGVfcm9vdHBvcnQgLSBlbmFibGUgUm9vdCBQb3J0J3MgaW50ZXJydXB0cyB3aGVuIHJlY2VpdmluZyBtZXNzYWdlcworICogQHJwYzogcG9pbnRlciB0byBhIFJvb3QgUG9ydCBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEludm9rZWQgd2hlbiBQQ0lFIGJ1cyBsb2FkcyBBRVIgc2VydmljZSBkcml2ZXIuCisgKiovCit2b2lkIGFlcl9lbmFibGVfcm9vdHBvcnQoc3RydWN0IGFlcl9ycGMgKnJwYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJwYy0+cnBkLT5wb3J0OworCWludCBwb3MsIGFlcl9wb3M7CisJdTE2IHJlZzE2OworCXUzMiByZWczMjsKKworCXBvcyA9IHBjaV9maW5kX2NhcGFiaWxpdHkocGRldiwgUENJX0NBUF9JRF9FWFApOworCS8qIENsZWFyIFBDSUUgQ2FwYWJpbGl0eSdzIERldmljZSBTdGF0dXMgKi8KKwlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBwb3MrUENJX0VYUF9ERVZTVEEsICZyZWcxNik7CisJcGNpX3dyaXRlX2NvbmZpZ193b3JkKHBkZXYsIHBvcytQQ0lfRVhQX0RFVlNUQSwgcmVnMTYpOworCisJLyogRGlzYWJsZSBzeXN0ZW0gZXJyb3IgZ2VuZXJhdGlvbiBpbiByZXNwb25zZSB0byBlcnJvciBtZXNzYWdlcyAqLworCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBkZXYsIHBvcyArIFBDSV9FWFBfUlRDVEwsICZyZWcxNik7CisJcmVnMTYgJj0gfihTWVNURU1fRVJST1JfSU5UUl9PTl9NRVNHX01BU0spOworCXBjaV93cml0ZV9jb25maWdfd29yZChwZGV2LCBwb3MgKyBQQ0lfRVhQX1JUQ1RMLCByZWcxNik7CisKKwlhZXJfcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJLyogQ2xlYXIgZXJyb3Igc3RhdHVzICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIGFlcl9wb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCAmcmVnMzIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfUk9PVF9TVEFUVVMsIHJlZzMyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfQ09SX1NUQVRVUywgJnJlZzMyKTsKKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIGFlcl9wb3MgKyBQQ0lfRVJSX0NPUl9TVEFUVVMsIHJlZzMyKTsKKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfVU5DT1JfU1RBVFVTLCAmcmVnMzIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgYWVyX3BvcyArIFBDSV9FUlJfVU5DT1JfU1RBVFVTLCByZWczMik7CisKKwkvKiBFbmFibGUgUm9vdCBQb3J0IGRldmljZSByZXBvcnRpbmcgZXJyb3IgaXRzZWxmICovCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgcG9zK1BDSV9FWFBfREVWQ1RMLCAmcmVnMTYpOworCXJlZzE2ID0gcmVnMTYgfAorCQlQQ0lfRVhQX0RFVkNUTF9DRVJFIHwKKwkJUENJX0VYUF9ERVZDVExfTkZFUkUgfAorCQlQQ0lfRVhQX0RFVkNUTF9GRVJFIHwKKwkJUENJX0VYUF9ERVZDVExfVVJSRTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGRldiwgcG9zK1BDSV9FWFBfREVWQ1RMLAorCQlyZWcxNik7CisKKwkvKiBFbmFibGUgUm9vdCBQb3J0J3MgaW50ZXJydXB0IGluIHJlc3BvbnNlIHRvIGVycm9yIG1lc3NhZ2VzICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LAorCQlhZXJfcG9zICsgUENJX0VSUl9ST09UX0NPTU1BTkQsCisJCVJPT1RfUE9SVF9JTlRSX09OX01FU0dfTUFTSyk7Cit9CisKKy8qKgorICogZGlzYWJsZV9yb290X2FlciAtIGRpc2FibGUgUm9vdCBQb3J0J3MgaW50ZXJydXB0cyB3aGVuIHJlY2VpdmluZyBtZXNzYWdlcworICogQHJwYzogcG9pbnRlciB0byBhIFJvb3QgUG9ydCBkYXRhIHN0cnVjdHVyZQorICoKKyAqIEludm9rZWQgd2hlbiBQQ0lFIGJ1cyB1bmxvYWRzIEFFUiBzZXJ2aWNlIGRyaXZlci4KKyAqKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfcm9vdF9hZXIoc3RydWN0IGFlcl9ycGMgKnJwYykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHJwYy0+cnBkLT5wb3J0OworCXUzMiByZWczMjsKKwlpbnQgcG9zOworCisJcG9zID0gcGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkocGRldik7CisJLyogRGlzYWJsZSBSb290J3MgaW50ZXJydXB0IGluIHJlc3BvbnNlIHRvIGVycm9yIG1lc3NhZ2VzICovCisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfRVJSX1JPT1RfQ09NTUFORCwgMCk7CisKKwkvKiBDbGVhciBSb290J3MgZXJyb3Igc3RhdHVzIHJlZyAqLworCXBjaV9yZWFkX2NvbmZpZ19kd29yZChwZGV2LCBwb3MgKyBQQ0lfRVJSX1JPT1RfU1RBVFVTLCAmcmVnMzIpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgcG9zICsgUENJX0VSUl9ST09UX1NUQVRVUywgcmVnMzIpOworfQorCisvKioKKyAqIGdldF9lX3NvdXJjZSAtIHJldHJpZXZlIGFuIGVycm9yIHNvdXJjZQorICogQHJwYzogcG9pbnRlciB0byB0aGUgcm9vdCBwb3J0IHdoaWNoIGhvbGRzIGFuIGVycm9yCisgKgorICogSW52b2tlZCBieSBEUEMgaGFuZGxlciB0byBjb25zdW1lIGFuIGVycm9yLgorICoqLworc3RhdGljIHN0cnVjdCBhZXJfZXJyX3NvdXJjZSogZ2V0X2Vfc291cmNlKHN0cnVjdCBhZXJfcnBjICpycGMpCit7CisJc3RydWN0IGFlcl9lcnJfc291cmNlICplX3NvdXJjZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJLyogTG9jayBhY2Nlc3MgdG8gUm9vdCBlcnJvciBwcm9kdWNlci9jb25zdW1lciBpbmRleCAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZycGMtPmVfbG9jaywgZmxhZ3MpOworCWlmIChycGMtPnByb2RfaWR4ID09IHJwYy0+Y29uc19pZHgpIHsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcnBjLT5lX2xvY2ssIGZsYWdzKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCWVfc291cmNlID0gJnJwYy0+ZV9zb3VyY2VzW3JwYy0+Y29uc19pZHhdOworCXJwYy0+Y29uc19pZHgrKzsKKwlpZiAocnBjLT5jb25zX2lkeCA9PSBBRVJfRVJST1JfU09VUkNFU19NQVgpCisJCXJwYy0+Y29uc19pZHggPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnJwYy0+ZV9sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZV9zb3VyY2U7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2RldmljZV9lcnJvcl9pbmZvKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCBhZXJfZXJyX2luZm8gKmluZm8pCit7CisJaW50IHBvczsKKworCXBvcyA9IHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldik7CisKKwkvKiBUaGUgZGV2aWNlIG1pZ2h0IG5vdCBzdXBwb3J0IEFFUiAqLworCWlmICghcG9zKQorCQlyZXR1cm4gQUVSX1NVQ0NFU1M7CisKKwlpZiAoaW5mby0+c2V2ZXJpdHkgPT0gQUVSX0NPUlJFQ1RBQkxFKSB7CisJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsIHBvcyArIFBDSV9FUlJfQ09SX1NUQVRVUywKKwkJCSZpbmZvLT5zdGF0dXMpOworCQlpZiAoIShpbmZvLT5zdGF0dXMgJiBFUlJfQ09SUkVDVEFCTEVfRVJST1JfTUFTSykpCisJCQlyZXR1cm4gQUVSX1VOU1VDQ0VTUzsKKwl9IGVsc2UgaWYgKGRldi0+aGRyX3R5cGUgJiBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIHx8CisJCWluZm8tPnNldmVyaXR5ID09IEFFUl9OT05GQVRBTCkgeworCisJCS8qIExpbmsgaXMgc3RpbGwgaGVhbHRoeSBmb3IgSU8gcmVhZHMgKi8KKwkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zICsgUENJX0VSUl9VTkNPUl9TVEFUVVMsCisJCQkmaW5mby0+c3RhdHVzKTsKKwkJaWYgKCEoaW5mby0+c3RhdHVzICYgRVJSX1VOQ09SUkVDVEFCTEVfRVJST1JfTUFTSykpCisJCQlyZXR1cm4gQUVSX1VOU1VDQ0VTUzsKKworCQlpZiAoaW5mby0+c3RhdHVzICYgQUVSX0xPR19UTFBfTUFTS1MpIHsKKwkJCWluZm8tPmZsYWdzIHw9IEFFUl9UTFBfSEVBREVSX1ZBTElEX0ZMQUc7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LAorCQkJCXBvcyArIFBDSV9FUlJfSEVBREVSX0xPRywgJmluZm8tPnRscC5kdzApOworCQkJcGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwKKwkJCQlwb3MgKyBQQ0lfRVJSX0hFQURFUl9MT0cgKyA0LCAmaW5mby0+dGxwLmR3MSk7CisJCQlwY2lfcmVhZF9jb25maWdfZHdvcmQoZGV2LAorCQkJCXBvcyArIFBDSV9FUlJfSEVBREVSX0xPRyArIDgsICZpbmZvLT50bHAuZHcyKTsKKwkJCXBjaV9yZWFkX2NvbmZpZ19kd29yZChkZXYsCisJCQkJcG9zICsgUENJX0VSUl9IRUFERVJfTE9HICsgMTIsICZpbmZvLT50bHAuZHczKTsKKwkJfQorCX0KKworCXJldHVybiBBRVJfU1VDQ0VTUzsKK30KKworLyoqCisgKiBhZXJfaXNyX29uZV9lcnJvciAtIGNvbnN1bWUgYW4gZXJyb3IgZGV0ZWN0ZWQgYnkgcm9vdCBwb3J0CisgKiBAcF9kZXZpY2U6IHBvaW50ZXIgdG8gZXJyb3Igcm9vdCBwb3J0IHNlcnZpY2UgZGV2aWNlCisgKiBAZV9zcmM6IHBvaW50ZXIgdG8gYW4gZXJyb3Igc291cmNlCisgKiovCitzdGF0aWMgdm9pZCBhZXJfaXNyX29uZV9lcnJvcihzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBfZGV2aWNlLAorCQlzdHJ1Y3QgYWVyX2Vycl9zb3VyY2UgKmVfc3JjKQoreworCXN0cnVjdCBkZXZpY2UgKnNfZGV2aWNlOworCXN0cnVjdCBhZXJfZXJyX2luZm8gZV9pbmZvID0gezAsIDAsIDAsfTsKKwlpbnQgaTsKKwl1MTYgaWQ7CisKKwkvKgorCSAqIFRoZXJlIGlzIGEgcG9zc2liaWxpdHkgdGhhdCBib3RoIGNvcnJlY3RhYmxlIGVycm9yIGFuZAorCSAqIHVuY29ycmVjdGFibGUgZXJyb3IgYmVpbmcgbG9nZ2VkLiBSZXBvcnQgY29ycmVjdGFibGUgZXJyb3IgZmlyc3QuCisJICovCisJZm9yIChpID0gMTsgaSAmIFJPT1RfRVJSX1NUQVRVU19NQVNLUyA7IGkgPDw9IDIpIHsKKwkJaWYgKGkgPiA0KQorCQkJYnJlYWs7CisJCWlmICghKGVfc3JjLT5zdGF0dXMgJiBpKSkKKwkJCWNvbnRpbnVlOworCisJCS8qIEluaXQgY29tcHJlaGVuc2l2ZSBlcnJvciBpbmZvcm1hdGlvbiAqLworCQlpZiAoaSAmIFBDSV9FUlJfUk9PVF9DT1JfUkNWKSB7CisJCQlpZCA9IEVSUl9DT1JfSUQoZV9zcmMtPmlkKTsKKwkJCWVfaW5mby5zZXZlcml0eSA9IEFFUl9DT1JSRUNUQUJMRTsKKwkJfSBlbHNlIHsKKwkJCWlkID0gRVJSX1VOQ09SX0lEKGVfc3JjLT5pZCk7CisJCQllX2luZm8uc2V2ZXJpdHkgPSAoKGVfc3JjLT5zdGF0dXMgPj4gNikgJiAxKTsKKwkJfQorCQlpZiAoZV9zcmMtPnN0YXR1cyAmCisJCQkoUENJX0VSUl9ST09UX01VTFRJX0NPUl9SQ1YgfAorCQkJIFBDSV9FUlJfUk9PVF9NVUxUSV9VTkNPUl9SQ1YpKQorCQkJZV9pbmZvLmZsYWdzIHw9IEFFUl9NVUxUSV9FUlJPUl9WQUxJRF9GTEFHOworCQlpZiAoIShzX2RldmljZSA9IGZpbmRfc291cmNlX2RldmljZShwX2RldmljZS0+cG9ydCwgaWQpKSkgeworCQkJcHJpbnRrKEtFUk5fREVCVUcgIiVzLT5jYW4ndCBmaW5kIGRldmljZSBvZiBJRCUwNHhcbiIsCisJCQkJX19GVU5DVElPTl9fLCBpZCk7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoZ2V0X2RldmljZV9lcnJvcl9pbmZvKHRvX3BjaV9kZXYoc19kZXZpY2UpLCAmZV9pbmZvKSA9PQorCQkJCUFFUl9TVUNDRVNTKSB7CisJCQlhZXJfcHJpbnRfZXJyb3IodG9fcGNpX2RldihzX2RldmljZSksICZlX2luZm8pOworCQkJaGFuZGxlX2Vycm9yX3NvdXJjZShwX2RldmljZSwKKwkJCQl0b19wY2lfZGV2KHNfZGV2aWNlKSwKKwkJCQllX2luZm8pOworCQl9CisJfQorfQorCisvKioKKyAqIGFlcl9pc3IgLSBjb25zdW1lIGVycm9ycyBkZXRlY3RlZCBieSByb290IHBvcnQKKyAqIEBjb250ZXh0OiBwb2ludGVyIHRvIGEgcHJpdmF0ZSBkYXRhIG9mIHBjaWUgZGV2aWNlCisgKgorICogSW52b2tlZCwgYXMgRFBDLCB3aGVuIHJvb3QgcG9ydCByZWNvcmRzIG5ldyBkZXRlY3RlZCBlcnJvcgorICoqLwordm9pZCBhZXJfaXNyKHZvaWQgKmNvbnRleHQpCit7CisJc3RydWN0IHBjaWVfZGV2aWNlICpwX2RldmljZSA9IChzdHJ1Y3QgcGNpZV9kZXZpY2UgKikgY29udGV4dDsKKwlzdHJ1Y3QgYWVyX3JwYyAqcnBjID0gZ2V0X3NlcnZpY2VfZGF0YShwX2RldmljZSk7CisJc3RydWN0IGFlcl9lcnJfc291cmNlICplX3NyYzsKKworCW11dGV4X2xvY2soJnJwYy0+cnBjX211dGV4KTsKKwllX3NyYyA9IGdldF9lX3NvdXJjZShycGMpOworCXdoaWxlIChlX3NyYykgeworCQlhZXJfaXNyX29uZV9lcnJvcihwX2RldmljZSwgZV9zcmMpOworCQllX3NyYyA9IGdldF9lX3NvdXJjZShycGMpOworCX0KKwltdXRleF91bmxvY2soJnJwYy0+cnBjX211dGV4KTsKKworCXdha2VfdXAoJnJwYy0+d2FpdF9yZWxlYXNlKTsKK30KKworLyoqCisgKiBhZXJfZGVsZXRlX3Jvb3Rwb3J0IC0gZGlzYWJsZSByb290IHBvcnQgYWVyIGFuZCBkZWxldGUgc2VydmljZSBkYXRhCisgKiBAcnBjOiBwb2ludGVyIHRvIGEgcm9vdCBwb3J0IGRldmljZSBiZWluZyBkZWxldGVkCisgKgorICogSW52b2tlZCB3aGVuIEFFUiBzZXJ2aWNlIHVubG9hZGVkIG9uIGEgc3BlY2lmaWMgUm9vdCBQb3J0CisgKiovCit2b2lkIGFlcl9kZWxldGVfcm9vdHBvcnQoc3RydWN0IGFlcl9ycGMgKnJwYykKK3sKKwkvKiBEaXNhYmxlIHJvb3QgcG9ydCBBRVIgaXRzZWxmICovCisJZGlzYWJsZV9yb290X2FlcihycGMpOworCisJa2ZyZWUocnBjKTsKK30KKworLyoqCisgKiBhZXJfaW5pdCAtIHByb3ZpZGUgQUVSIGluaXRpYWxpemF0aW9uCisgKiBAZGV2OiBwb2ludGVyIHRvIEFFUiBwY2llIGRldmljZQorICoKKyAqIEludm9rZWQgd2hlbiBBRVIgc2VydmljZSBkcml2ZXIgaXMgbG9hZGVkLgorICoqLworaW50IGFlcl9pbml0KHN0cnVjdCBwY2llX2RldmljZSAqZGV2KQoreworCWludCBzdGF0dXM7CisKKwkvKiBSdW4gX09TQyBNZXRob2QgKi8KKwlzdGF0dXMgPSBhZXJfb3NjX3NldHVwKGRldi0+cG9ydCk7CisKKwlpZihzdGF0dXMgIT0gT1NDX01FVEhPRF9SVU5fU1VDQ0VTUykgeworCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IEFFUiBzZXJ2aWNlIGluaXQgZmFpbHMgLSAlc1xuIiwKKwkJX19GVU5DVElPTl9fLAorCQkoc3RhdHVzID09IE9TQ19NRVRIT0RfTk9UX1NVUFBPUlRFRCkgPworCQkJIk5vIEFDUEkgX09TQyBzdXBwb3J0IiA6ICJSdW4gQUNQSSBfT1NDIGZhaWxzIik7CisKKwkJaWYgKCFmb3JjZWxvYWQpCisJCQlyZXR1cm4gc3RhdHVzOworCX0KKworCXJldHVybiBBRVJfU1VDQ0VTUzsKK30KKworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2ZpbmRfYWVyX2NhcGFiaWxpdHkpOworRVhQT1JUX1NZTUJPTF9HUEwocGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfZGlzYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfY2xlYW51cF9hZXJfdW5jb3JyZWN0X2Vycm9yX3N0YXR1cyk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jIGIvZHJpdmVycy9wY2kvcGNpZS9hZXIvYWVyZHJ2X2VycnByaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzkzM2Q0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BjaS9wY2llL2Flci9hZXJkcnZfZXJycHJpbnQuYwpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIGRyaXZlcnMvcGNpL3BjaWUvYWVyL2FlcmRydl9lcnJwcmludC5jCisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogRm9ybWF0IGVycm9yIG1lc3NhZ2VzIGFuZCBwcmludCB0aGVtIHRvIGNvbnNvbGUuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvcnAuCisgKglUb20gTG9uZyBOZ3V5ZW4gKHRvbS5sLm5ndXllbkBpbnRlbC5jb20pCisgKglaaGFuZyBZYW5taW4gKHlhbm1pbi56aGFuZ0BpbnRlbC5jb20pCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorCisjaW5jbHVkZSAiYWVyZHJ2LmgiCisKKyNkZWZpbmUgQUVSX0FHRU5UX1JFQ0VJVkVSCQkwCisjZGVmaW5lIEFFUl9BR0VOVF9SRVFVRVNURVIJCTEKKyNkZWZpbmUgQUVSX0FHRU5UX0NPTVBMRVRFUgkJMgorI2RlZmluZSBBRVJfQUdFTlRfVFJBTlNNSVRURVIJCTMKKworI2RlZmluZSBBRVJfQUdFTlRfUkVRVUVTVEVSX01BU0sJKFBDSV9FUlJfVU5DX0NPTVBfVElNRXwJXAorCQkJCQlQQ0lfRVJSX1VOQ19VTlNVUCkKKworI2RlZmluZSBBRVJfQUdFTlRfQ09NUExFVEVSX01BU0sJUENJX0VSUl9VTkNfQ09NUF9BQk9SVAorCisjZGVmaW5lIEFFUl9BR0VOVF9UUkFOU01JVFRFUl9NQVNLKHQsIGUpIChlICYgKFBDSV9FUlJfQ09SX1JFUF9ST0xMfCBcCisJKCh0ID09IEFFUl9DT1JSRUNUQUJMRSkgPyBQQ0lfRVJSX0NPUl9SRVBfVElNRVI6IDApKSkKKworI2RlZmluZSBBRVJfR0VUX0FHRU5UKHQsIGUpCQkJCQkJXAorCSgoZSAmIEFFUl9BR0VOVF9DT01QTEVURVJfTUFTSykgPyBBRVJfQUdFTlRfQ09NUExFVEVSIDoJCVwKKwkoZSAmIEFFUl9BR0VOVF9SRVFVRVNURVJfTUFTSykgPyBBRVJfQUdFTlRfUkVRVUVTVEVSIDoJCVwKKwkoQUVSX0FHRU5UX1RSQU5TTUlUVEVSX01BU0sodCwgZSkpID8gQUVSX0FHRU5UX1RSQU5TTUlUVEVSIDoJXAorCUFFUl9BR0VOVF9SRUNFSVZFUikKKworI2RlZmluZSBBRVJfUEhZU0lDQUxfTEFZRVJfRVJST1JfTUFTSwlQQ0lfRVJSX0NPUl9SQ1ZSCisjZGVmaW5lIEFFUl9EQVRBX0xJTktfTEFZRVJfRVJST1JfTUFTSyh0LCBlKQlcCisJCShQQ0lfRVJSX1VOQ19ETFB8CQlcCisJCVBDSV9FUlJfQ09SX0JBRF9UTFB8IAkJXAorCQlQQ0lfRVJSX0NPUl9CQURfRExMUHwJCVwKKwkJUENJX0VSUl9DT1JfUkVQX1JPTEx8IAkJXAorCQkoKHQgPT0gQUVSX0NPUlJFQ1RBQkxFKSA/CVwKKwkJUENJX0VSUl9DT1JfUkVQX1RJTUVSOiAwKSkKKworI2RlZmluZSBBRVJfUEhZU0lDQUxfTEFZRVJfRVJST1IJMAorI2RlZmluZSBBRVJfREFUQV9MSU5LX0xBWUVSX0VSUk9SCTEKKyNkZWZpbmUgQUVSX1RSQU5TQUNUSU9OX0xBWUVSX0VSUk9SCTIKKworI2RlZmluZSBBRVJfR0VUX0xBWUVSX0VSUk9SKHQsIGUpCQkJCVwKKwkoKGUgJiBBRVJfUEhZU0lDQUxfTEFZRVJfRVJST1JfTUFTSykgPwkJCVwKKwlBRVJfUEhZU0lDQUxfTEFZRVJfRVJST1IgOgkJCQlcCisJKGUgJiBBRVJfREFUQV9MSU5LX0xBWUVSX0VSUk9SX01BU0sodCwgZSkpID8JCVwKKwkJQUVSX0RBVEFfTElOS19MQVlFUl9FUlJPUiA6IAkJCVwKKwkJQUVSX1RSQU5TQUNUSU9OX0xBWUVSX0VSUk9SKQorCisvKgorICogQUVSIGVycm9yIHN0cmluZ3MKKyAqLworc3RhdGljIGNoYXIqIGFlcl9lcnJvcl9zZXZlcml0eV9zdHJpbmdbXSA9IHsKKwkiVW5jb3JyZWN0ZWQgKE5vbi1GYXRhbCkiLAorCSJVbmNvcnJlY3RlZCAoRmF0YWwpIiwKKwkiQ29ycmVjdGVkIgorfTsKKworc3RhdGljIGNoYXIqIGFlcl9lcnJvcl9sYXllcltdID0geworCSJQaHlzaWNhbCBMYXllciIsCisJIkRhdGEgTGluayBMYXllciIsCisJIlRyYW5zYWN0aW9uIExheWVyIgorfTsKK3N0YXRpYyBjaGFyKiBhZXJfY29ycmVjdGFibGVfZXJyb3Jfc3RyaW5nW10gPSB7CisJIlJlY2VpdmVyIEVycm9yICAgICAgICAiLAkvKiBCaXQgUG9zaXRpb24gMCAJKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJIkJhZCBUTFAgICAgICAgICAgICAgICAiLAkvKiBCaXQgUG9zaXRpb24gNiAJKi8KKwkiQmFkIERMTFAgICAgICAgICAgICAgICIsCS8qIEJpdCBQb3NpdGlvbiA3IAkqLworCSJSRUxBWV9OVU0gUm9sbG92ZXIgICAgIiwJLyogQml0IFBvc2l0aW9uIDggCSovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJIlJlcGxheSBUaW1lciBUaW1lb3V0ICAiLAkvKiBCaXQgUG9zaXRpb24gMTIgCSovCisJIkFkdmlzb3J5IE5vbi1GYXRhbCAgICAiLCAJLyogQml0IFBvc2l0aW9uIDEzCSovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCit9OworCitzdGF0aWMgY2hhciogYWVyX3VuY29ycmVjdGFibGVfZXJyb3Jfc3RyaW5nW10gPSB7CisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwkiRGF0YSBMaW5rIFByb3RvY29sICAgICIsCS8qIEJpdCBQb3NpdGlvbiA0CSovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwkiUG9pc29uZWQgVExQICAgICAgICAgICIsCS8qIEJpdCBQb3NpdGlvbiAxMiAJKi8KKwkiRmxvdyBDb250cm9sIFByb3RvY29sICIsCS8qIEJpdCBQb3NpdGlvbiAxMwkqLworCSJDb21wbGV0aW9uIFRpbWVvdXQgICAgIiwJLyogQml0IFBvc2l0aW9uIDE0IAkqLworCSJDb21wbGV0ZXIgQWJvcnQgICAgICAgIiwJLyogQml0IFBvc2l0aW9uIDE1IAkqLworCSJVbmV4cGVjdGVkIENvbXBsZXRpb24gIiwJLyogQml0IFBvc2l0aW9uIDE2CSovCisJIlJlY2VpdmVyIE92ZXJmbG93ICAgICAiLAkvKiBCaXQgUG9zaXRpb24gMTcJKi8KKwkiTWFsZm9ybWVkIFRMUCAgICAgICAgICIsCS8qIEJpdCBQb3NpdGlvbiAxOAkqLworCSJFQ1JDICAgICAgICAgICAgICAgICAgIiwJLyogQml0IFBvc2l0aW9uIDE5CSovCisJIlVuc3VwcG9ydGVkIFJlcXVlc3QgICAiLAkvKiBCaXQgUG9zaXRpb24gMjAJKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCit9OworCitzdGF0aWMgY2hhciogYWVyX2FnZW50X3N0cmluZ1tdID0geworCSJSZWNlaXZlciBJRCIsCisJIlJlcXVlc3RlciBJRCIsCisJIkNvbXBsZXRlciBJRCIsCisJIlRyYW5zbWl0dGVyIElEIgorfTsKKworc3RhdGljIGNoYXIgKiBhZXJfZ2V0X2Vycm9yX3NvdXJjZV9uYW1lKGludCBzZXZlcml0eSwKKwkJCXVuc2lnbmVkIGludCBzdGF0dXMsCisJCQljaGFyIGVycm1zZ19idWZmW10pCit7CisJaW50IGk7CisJY2hhciAqIGVycm1zZyA9IE5VTEw7CisKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlpZiAoIShzdGF0dXMgJiAoMSA8PCBpKSkpCisJCQljb250aW51ZTsKKworCQlpZiAoc2V2ZXJpdHkgPT0gQUVSX0NPUlJFQ1RBQkxFKQorCQkJZXJybXNnID0gYWVyX2NvcnJlY3RhYmxlX2Vycm9yX3N0cmluZ1tpXTsKKwkJZWxzZQorCQkJZXJybXNnID0gYWVyX3VuY29ycmVjdGFibGVfZXJyb3Jfc3RyaW5nW2ldOworCisJCWlmICghZXJybXNnKSB7CisJCQlzcHJpbnRmKGVycm1zZ19idWZmLCAiVW5rbm93biBFcnJvciBCaXQgJTJkICAiLCBpKTsKKwkJCWVycm1zZyA9IGVycm1zZ19idWZmOworCQl9CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGVycm1zZzsKK30KKworc3RhdGljIERFRklORV9TUElOTE9DSyhsb2didWZfbG9jayk7CitzdGF0aWMgY2hhciBlcnJtc2dfYnVmZlsxMDBdOwordm9pZCBhZXJfcHJpbnRfZXJyb3Ioc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IGFlcl9lcnJfaW5mbyAqaW5mbykKK3sKKwljaGFyICogZXJybXNnOworCWludCBlcnJfbGF5ZXIsIGFnZW50OworCWNoYXIgKiBsb2dsZXZlbDsKKworCWlmIChpbmZvLT5zZXZlcml0eSA9PSBBRVJfQ09SUkVDVEFCTEUpCisJCWxvZ2xldmVsID0gS0VSTl9XQVJOSU5HOworCWVsc2UKKwkJbG9nbGV2ZWwgPSBLRVJOX0VSUjsKKworCXByaW50aygiJXMrLS0tLS0tIFBDSS1FeHByZXNzIERldmljZSBFcnJvciAtLS0tLS0rXG4iLCBsb2dsZXZlbCk7CisJcHJpbnRrKCIlc0Vycm9yIFNldmVyaXR5XHRcdDogJXNcbiIsIGxvZ2xldmVsLAorCQlhZXJfZXJyb3Jfc2V2ZXJpdHlfc3RyaW5nW2luZm8tPnNldmVyaXR5XSk7CisKKwlpZiAoIGluZm8tPnN0YXR1cyA9PSAwKSB7CisJCXByaW50aygiJXNQQ0lFIEJ1cyBFcnJvciB0eXBlXHQ6IChVbmFjY2Vzc2libGUpXG4iLCBsb2dsZXZlbCk7CisJCXByaW50aygiJXNVbmFjY2Vzc2libGUgUmVjZWl2ZWRcdDogJXNcbiIsIGxvZ2xldmVsLAorCQkJaW5mby0+ZmxhZ3MgJiBBRVJfTVVMVElfRVJST1JfVkFMSURfRkxBRyA/CisJCQkJIk11bHRpcGxlIiA6ICJGaXJzdCIpOworCQlwcmludGsoIiVzVW5yZWdpc3RlcmVkIEFnZW50IElEXHQ6ICUwNHhcbiIsIGxvZ2xldmVsLAorCQkJKGRldi0+YnVzLT5udW1iZXIgPDwgOCkgfCBkZXYtPmRldmZuKTsKKwl9IGVsc2UgeworCQllcnJfbGF5ZXIgPSBBRVJfR0VUX0xBWUVSX0VSUk9SKGluZm8tPnNldmVyaXR5LCBpbmZvLT5zdGF0dXMpOworCQlwcmludGsoIiVzUENJRSBCdXMgRXJyb3IgdHlwZVx0OiAlc1xuIiwgbG9nbGV2ZWwsCisJCQlhZXJfZXJyb3JfbGF5ZXJbZXJyX2xheWVyXSk7CisKKwkJc3Bpbl9sb2NrKCZsb2didWZfbG9jayk7CisJCWVycm1zZyA9IGFlcl9nZXRfZXJyb3Jfc291cmNlX25hbWUoaW5mby0+c2V2ZXJpdHksCisJCQkJaW5mby0+c3RhdHVzLAorCQkJCWVycm1zZ19idWZmKTsKKwkJcHJpbnRrKCIlcyVzXHQ6ICVzXG4iLCBsb2dsZXZlbCwgZXJybXNnLAorCQkJaW5mby0+ZmxhZ3MgJiBBRVJfTVVMVElfRVJST1JfVkFMSURfRkxBRyA/CisJCQkJIk11bHRpcGxlIiA6ICJGaXJzdCIpOworCQlzcGluX3VubG9jaygmbG9nYnVmX2xvY2spOworCisJCWFnZW50ID0gQUVSX0dFVF9BR0VOVChpbmZvLT5zZXZlcml0eSwgaW5mby0+c3RhdHVzKTsKKwkJcHJpbnRrKCIlcyVzXHRcdDogJTA0eFxuIiwgbG9nbGV2ZWwsCisJCQlhZXJfYWdlbnRfc3RyaW5nW2FnZW50XSwKKwkJCShkZXYtPmJ1cy0+bnVtYmVyIDw8IDgpIHwgZGV2LT5kZXZmbik7CisKKwkJcHJpbnRrKCIlc1ZlbmRvcklEPSUwNHhoLCBEZXZpY2VJRD0lMDR4aCwiCisJCQkiIEJ1cz0lMDJ4aCwgRGV2aWNlPSUwMnhoLCBGdW5jdGlvbj0lMDJ4aFxuIiwKKwkJCWxvZ2xldmVsLAorCQkJZGV2LT52ZW5kb3IsCisJCQlkZXYtPmRldmljZSwKKwkJCWRldi0+YnVzLT5udW1iZXIsCisJCQlQQ0lfU0xPVChkZXYtPmRldmZuKSwKKwkJCVBDSV9GVU5DKGRldi0+ZGV2Zm4pKTsKKworCQlpZiAoaW5mby0+ZmxhZ3MgJiBBRVJfVExQX0hFQURFUl9WQUxJRF9GTEFHKSB7CisJCQl1bnNpZ25lZCBjaGFyICp0bHAgPSAodW5zaWduZWQgY2hhciAqKSAmaW5mby0+dGxwOworCQkJcHJpbnRrKCIlc1RMQiBIZWFkZXI6XG4iLCBsb2dsZXZlbCk7CisJCQlwcmludGsoIiVzJTAyeCUwMnglMDJ4JTAyeCAlMDJ4JTAyeCUwMnglMDJ4IgorCQkJCSIgJTAyeCUwMnglMDJ4JTAyeCAlMDJ4JTAyeCUwMnglMDJ4XG4iLAorCQkJCWxvZ2xldmVsLAorCQkJCSoodGxwICsgMyksICoodGxwICsgMiksICoodGxwICsgMSksICp0bHAsCisJCQkJKih0bHAgKyA3KSwgKih0bHAgKyA2KSwgKih0bHAgKyA1KSwgKih0bHAgKyA0KSwKKwkJCQkqKHRscCArIDExKSwgKih0bHAgKyAxMCksICoodGxwICsgOSksCisJCQkJKih0bHAgKyA4KSwgKih0bHAgKyAxNSksICoodGxwICsgMTQpLAorCQkJCSoodGxwICsgMTMpLCAqKHRscCArIDEyKSk7CisJCX0KKwl9Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydi5oIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKaW5kZXggMWQzMTdkMi4uNjdmY2QxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKKysrIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2LmgKQEAgLTM5LDcgKzM5LDcgQEAKIGV4dGVybiBpbnQgcGNpZV9wb3J0X2RldmljZV9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjZW5kaWYKIGV4dGVybiB2b2lkIHBjaWVfcG9ydF9kZXZpY2VfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwotZXh0ZXJuIHZvaWQgcGNpZV9wb3J0X2J1c19yZWdpc3Rlcih2b2lkKTsKK2V4dGVybiBpbnQgcGNpZV9wb3J0X2J1c19yZWdpc3Rlcih2b2lkKTsKIGV4dGVybiB2b2lkIHBjaWVfcG9ydF9idXNfdW5yZWdpc3Rlcih2b2lkKTsKIAogI2VuZGlmIC8qIF9QT1JURFJWX0hfICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfYnVzLmMgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfYnVzLmMKaW5kZXggM2U4NGI1MC4uM2YwOTc2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2J1cy5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9idXMuYwpAQCAtMjQsNiArMjQsNyBAQAogCS5zdXNwZW5kCT0gcGNpZV9wb3J0X2J1c19zdXNwZW5kLAogCS5yZXN1bWUJCT0gcGNpZV9wb3J0X2J1c19yZXN1bWUsIAogfTsKK0VYUE9SVF9TWU1CT0xfR1BMKHBjaWVfcG9ydF9idXNfdHlwZSk7CiAKIHN0YXRpYyBpbnQgcGNpZV9wb3J0X2J1c19tYXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X2NvcmUuYwppbmRleCA1NWM2NjIyLi5iZDY2MTViIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfY29yZS5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9jb3JlLmMKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIFRvbSBMb25nIE5ndXllbiAodG9tLmwubmd1eWVuQGludGVsLmNvbSkKICAqLwogCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMzOSw4ICszNDAsNyBAQAogCiBpbnQgcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKLQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmc3RhdGUsIHN1c3BlbmRfaXRlcik7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZzdGF0ZSwgc3VzcGVuZF9pdGVyKTsKIH0KIAogc3RhdGljIGludCByZXN1bWVfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCkBAIC0zNTgsOCArMzU4LDcgQEAKIAogaW50IHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpCiB7Ci0JZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgTlVMTCwgcmVzdW1lX2l0ZXIpOwotCXJldHVybiAwOworCXJldHVybiBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCBOVUxMLCByZXN1bWVfaXRlcik7CiB9CiAjZW5kaWYKIApAQCAtNDAyLDkgKzQwMSw5IEBACiAJCXBjaV9kaXNhYmxlX21zaShkZXYpOwogfQogCi12b2lkIHBjaWVfcG9ydF9idXNfcmVnaXN0ZXIodm9pZCkKK2ludCBfX211c3RfY2hlY2sgcGNpZV9wb3J0X2J1c19yZWdpc3Rlcih2b2lkKQogewotCWJ1c19yZWdpc3RlcigmcGNpZV9wb3J0X2J1c190eXBlKTsKKwlyZXR1cm4gYnVzX3JlZ2lzdGVyKCZwY2llX3BvcnRfYnVzX3R5cGUpOwogfQogCiB2b2lkIHBjaWVfcG9ydF9idXNfdW5yZWdpc3Rlcih2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jIGIvZHJpdmVycy9wY2kvcGNpZS9wb3J0ZHJ2X3BjaS5jCmluZGV4IDQ3OGQwZDIuLjAzNzY5MGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3BjaWUvcG9ydGRydl9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2llL3BvcnRkcnZfcGNpLmMKQEAgLTE0LDggKzE0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9wY2llcG9ydF9pZi5oPgorI2luY2x1ZGUgPGxpbnV4L2Flci5oPgogCiAjaW5jbHVkZSAicG9ydGRydi5oIgorI2luY2x1ZGUgImFlci9hZXJkcnYuaCIKIAogLyoKICAqIFZlcnNpb24gSW5mb3JtYXRpb24KQEAgLTMwLDYgKzMyLDQzIEBACiAvKiBnbG9iYWwgZGF0YSAqLwogc3RhdGljIGNvbnN0IGNoYXIgZGV2aWNlX25hbWVbXSA9ICJwY2llcG9ydC1kcml2ZXIiOwogCitzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBwY2lfc2F2ZV9zdGF0ZShkZXYpOworfQorCisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWludCByZXR2YWw7CisKKwlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOworCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKKwlwY2lfc2V0X21hc3RlcihkZXYpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBjaWVfcG9ydGRydl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgcmV0ID0gcGNpZV9wb3J0X2RldmljZV9zdXNwZW5kKGRldiwgc3RhdGUpOworCisJaWYgKCFyZXQpCisJCXJldCA9IHBjaWVfcG9ydGRydl9zYXZlX2NvbmZpZyhkZXYpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhkZXYpOworCXJldHVybiBwY2llX3BvcnRfZGV2aWNlX3Jlc3VtZShkZXYpOworfQorI2Vsc2UKKyNkZWZpbmUgcGNpZV9wb3J0ZHJ2X3N1c3BlbmQgTlVMTAorI2RlZmluZSBwY2llX3BvcnRkcnZfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiAvKgogICogcGNpZV9wb3J0ZHJ2X3Byb2JlIC0gUHJvYmUgUENJLUV4cHJlc3MgcG9ydCBkZXZpY2VzCiAgKiBAZGV2OiBQQ0ktRXhwcmVzcyBwb3J0IGRldmljZSBiZWluZyBwcm9iZWQKQEAgLTYxLDYgKzEwMCwxMCBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKKwlwY2llX3BvcnRkcnZfc2F2ZV9jb25maWcoZGV2KTsKKworCXBjaV9lbmFibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC03MCwzOSArMTEzLDE1MSBAQAogCWtmcmVlKHBjaV9nZXRfZHJ2ZGF0YShkZXYpKTsKIH0KIAotI2lmZGVmIENPTkZJR19QTQotc3RhdGljIGludCBwY2llX3BvcnRkcnZfc2F2ZV9jb25maWcoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyBpbnQgZXJyb3JfZGV0ZWN0ZWRfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKmRhdGEpCiB7Ci0JcmV0dXJuIHBjaV9zYXZlX3N0YXRlKGRldik7Ci19CisJc3RydWN0IHBjaWVfZGV2aWNlICpwY2llX2RldmljZTsKKwlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpkcml2ZXI7CisJc3RydWN0IGFlcl9icm9hZGNhc3RfZGF0YSAqcmVzdWx0X2RhdGE7CisJcGNpX2Vyc19yZXN1bHRfdCBzdGF0dXM7CiAKLXN0YXRpYyBpbnQgcGNpZV9wb3J0ZHJ2X3Jlc3RvcmVfY29uZmlnKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JaW50IHJldHZhbDsKKwlyZXN1bHRfZGF0YSA9IChzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhICopIGRhdGE7CiAKLQlwY2lfcmVzdG9yZV9zdGF0ZShkZXYpOwotCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKGRldik7Ci0JaWYgKHJldHZhbCkKLQkJcmV0dXJuIHJldHZhbDsKLQlwY2lfc2V0X21hc3RlcihkZXYpOworCWlmIChkZXZpY2UtPmJ1cyA9PSAmcGNpZV9wb3J0X2J1c190eXBlICYmIGRldmljZS0+ZHJpdmVyKSB7CisJCWRyaXZlciA9IHRvX3NlcnZpY2VfZHJpdmVyKGRldmljZS0+ZHJpdmVyKTsKKwkJaWYgKCFkcml2ZXIgfHwKKwkJCSFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJCQkhZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQpCisJCQlyZXR1cm4gMDsKKworCQlwY2llX2RldmljZSA9IHRvX3BjaWVfZGV2aWNlKGRldmljZSk7CisKKwkJLyogRm9yd2FyZCBlcnJvciBkZXRlY3RlZCBtZXNzYWdlIHRvIHNlcnZpY2UgZHJpdmVycyAqLworCQlzdGF0dXMgPSBkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCgKKwkJCXBjaWVfZGV2aWNlLT5wb3J0LAorCQkJcmVzdWx0X2RhdGEtPnN0YXRlKTsKKwkJcmVzdWx0X2RhdGEtPnJlc3VsdCA9CisJCQltZXJnZV9yZXN1bHQocmVzdWx0X2RhdGEtPnJlc3VsdCwgc3RhdHVzKTsKKwl9CisKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwY2llX3BvcnRkcnZfc3VzcGVuZCAoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQorc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcGNpZV9wb3J0ZHJ2X2Vycm9yX2RldGVjdGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYsCisJCQkJCWVudW0gcGNpX2NoYW5uZWxfc3RhdGUgZXJyb3IpCiB7Ci0JaW50IHJldCA9IHBjaWVfcG9ydF9kZXZpY2Vfc3VzcGVuZChkZXYsIHN0YXRlKTsKKwlzdHJ1Y3QgYWVyX2Jyb2FkY2FzdF9kYXRhIHJlc3VsdF9kYXRhID0KKwkJCXtlcnJvciwgUENJX0VSU19SRVNVTFRfQ0FOX1JFQ09WRVJ9OworCWludCByZXR2YWw7CiAKLQlpZiAoIXJldCkKLQkJcmV0ID0gcGNpZV9wb3J0ZHJ2X3NhdmVfY29uZmlnKGRldik7Ci0JcmV0dXJuIHJldDsKKwkvKiBjYW4gbm90IGZhaWwgKi8KKwlyZXR2YWwgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmcmVzdWx0X2RhdGEsIGVycm9yX2RldGVjdGVkX2l0ZXIpOworCisJcmV0dXJuIHJlc3VsdF9kYXRhLnJlc3VsdDsKIH0KIAotc3RhdGljIGludCBwY2llX3BvcnRkcnZfcmVzdW1lIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQorc3RhdGljIGludCBtbWlvX2VuYWJsZWRfaXRlcihzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHZvaWQgKmRhdGEpCiB7Ci0JcGNpZV9wb3J0ZHJ2X3Jlc3RvcmVfY29uZmlnKGRldik7Ci0JcmV0dXJuIHBjaWVfcG9ydF9kZXZpY2VfcmVzdW1lKGRldik7CisJc3RydWN0IHBjaWVfZGV2aWNlICpwY2llX2RldmljZTsKKwlzdHJ1Y3QgcGNpZV9wb3J0X3NlcnZpY2VfZHJpdmVyICpkcml2ZXI7CisJcGNpX2Vyc19yZXN1bHRfdCBzdGF0dXMsICpyZXN1bHQ7CisKKwlyZXN1bHQgPSAocGNpX2Vyc19yZXN1bHRfdCAqKSBkYXRhOworCisJaWYgKGRldmljZS0+YnVzID09ICZwY2llX3BvcnRfYnVzX3R5cGUgJiYgZGV2aWNlLT5kcml2ZXIpIHsKKwkJZHJpdmVyID0gdG9fc2VydmljZV9kcml2ZXIoZGV2aWNlLT5kcml2ZXIpOworCQlpZiAoZHJpdmVyICYmCisJCQlkcml2ZXItPmVycl9oYW5kbGVyICYmCisJCQlkcml2ZXItPmVycl9oYW5kbGVyLT5tbWlvX2VuYWJsZWQpIHsKKwkJCXBjaWVfZGV2aWNlID0gdG9fcGNpZV9kZXZpY2UoZGV2aWNlKTsKKworCQkJLyogRm9yd2FyZCBlcnJvciBtZXNzYWdlIHRvIHNlcnZpY2UgZHJpdmVycyAqLworCQkJc3RhdHVzID0gZHJpdmVyLT5lcnJfaGFuZGxlci0+bW1pb19lbmFibGVkKAorCQkJCQlwY2llX2RldmljZS0+cG9ydCk7CisJCQkqcmVzdWx0ID0gbWVyZ2VfcmVzdWx0KCpyZXN1bHQsIHN0YXR1cyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKIH0KLSNlbmRpZgorCitzdGF0aWMgcGNpX2Vyc19yZXN1bHRfdCBwY2llX3BvcnRkcnZfbW1pb19lbmFibGVkKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX2Vyc19yZXN1bHRfdCBzdGF0dXMgPSBQQ0lfRVJTX1JFU1VMVF9SRUNPVkVSRUQ7CisJaW50IHJldHZhbDsKKworCS8qIGdldCB0cnVlIHJldHVybiB2YWx1ZSBmcm9tICZzdGF0dXMgKi8KKwlyZXR2YWwgPSBkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJmRldi0+ZGV2LCAmc3RhdHVzLCBtbWlvX2VuYWJsZWRfaXRlcik7CisJcmV0dXJuIHN0YXR1czsKK30KKworc3RhdGljIGludCBzbG90X3Jlc2V0X2l0ZXIoc3RydWN0IGRldmljZSAqZGV2aWNlLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBwY2llX2RldmljZSAqcGNpZV9kZXZpY2U7CisJc3RydWN0IHBjaWVfcG9ydF9zZXJ2aWNlX2RyaXZlciAqZHJpdmVyOworCXBjaV9lcnNfcmVzdWx0X3Qgc3RhdHVzLCAqcmVzdWx0OworCisJcmVzdWx0ID0gKHBjaV9lcnNfcmVzdWx0X3QgKikgZGF0YTsKKworCWlmIChkZXZpY2UtPmJ1cyA9PSAmcGNpZV9wb3J0X2J1c190eXBlICYmIGRldmljZS0+ZHJpdmVyKSB7CisJCWRyaXZlciA9IHRvX3NlcnZpY2VfZHJpdmVyKGRldmljZS0+ZHJpdmVyKTsKKwkJaWYgKGRyaXZlciAmJgorCQkJZHJpdmVyLT5lcnJfaGFuZGxlciAmJgorCQkJZHJpdmVyLT5lcnJfaGFuZGxlci0+c2xvdF9yZXNldCkgeworCQkJcGNpZV9kZXZpY2UgPSB0b19wY2llX2RldmljZShkZXZpY2UpOworCisJCQkvKiBGb3J3YXJkIGVycm9yIG1lc3NhZ2UgdG8gc2VydmljZSBkcml2ZXJzICovCisJCQlzdGF0dXMgPSBkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KAorCQkJCQlwY2llX2RldmljZS0+cG9ydCk7CisJCQkqcmVzdWx0ID0gbWVyZ2VfcmVzdWx0KCpyZXN1bHQsIHN0YXR1cyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHBjaV9lcnNfcmVzdWx0X3QgcGNpZV9wb3J0ZHJ2X3Nsb3RfcmVzZXQoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwY2lfZXJzX3Jlc3VsdF90IHN0YXR1czsKKwlpbnQgcmV0dmFsOworCisJLyogSWYgZmF0YWwsIHJlc3RvcmUgY2ZnIHNwYWNlIGZvciBwb3NzaWJsZSBsaW5rIHJlc2V0IGF0IHVwc3RyZWFtICovCisJaWYgKGRldi0+ZXJyb3Jfc3RhdGUgPT0gcGNpX2NoYW5uZWxfaW9fZnJvemVuKSB7CisJCXBjaWVfcG9ydGRydl9yZXN0b3JlX2NvbmZpZyhkZXYpOworCQlwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKGRldik7CisJfQorCisJLyogZ2V0IHRydWUgcmV0dXJuIHZhbHVlIGZyb20gJnN0YXR1cyAqLworCXJldHZhbCA9IGRldmljZV9mb3JfZWFjaF9jaGlsZCgmZGV2LT5kZXYsICZzdGF0dXMsIHNsb3RfcmVzZXRfaXRlcik7CisKKwlyZXR1cm4gc3RhdHVzOworfQorCitzdGF0aWMgaW50IHJlc3VtZV9pdGVyKHN0cnVjdCBkZXZpY2UgKmRldmljZSwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgcGNpZV9kZXZpY2UgKnBjaWVfZGV2aWNlOworCXN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9kcml2ZXIgKmRyaXZlcjsKKworCWlmIChkZXZpY2UtPmJ1cyA9PSAmcGNpZV9wb3J0X2J1c190eXBlICYmIGRldmljZS0+ZHJpdmVyKSB7CisJCWRyaXZlciA9IHRvX3NlcnZpY2VfZHJpdmVyKGRldmljZS0+ZHJpdmVyKTsKKwkJaWYgKGRyaXZlciAmJgorCQkJZHJpdmVyLT5lcnJfaGFuZGxlciAmJgorCQkJZHJpdmVyLT5lcnJfaGFuZGxlci0+cmVzdW1lKSB7CisJCQlwY2llX2RldmljZSA9IHRvX3BjaWVfZGV2aWNlKGRldmljZSk7CisKKwkJCS8qIEZvcndhcmQgZXJyb3IgbWVzc2FnZSB0byBzZXJ2aWNlIGRyaXZlcnMgKi8KKwkJCWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZShwY2llX2RldmljZS0+cG9ydCk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcGNpZV9wb3J0ZHJ2X2Vycl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlpbnQgcmV0dmFsOworCS8qIG5vdGhpbmcgdG8gZG8gd2l0aCBlcnJvciB2YWx1ZSwgaWYgaXQgZXZlciBoYXBwZW5zICovCisJcmV0dmFsID0gZGV2aWNlX2Zvcl9lYWNoX2NoaWxkKCZkZXYtPmRldiwgTlVMTCwgcmVzdW1lX2l0ZXIpOworfQogCiAvKgogICogTElOVVggRGV2aWNlIERyaXZlciBNb2RlbApAQCAtMTE0LDYgKzI2OSwxMyBAQAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBwb3J0X3BjaV9pZHMpOwogCitzdGF0aWMgc3RydWN0IHBjaV9lcnJvcl9oYW5kbGVycyBwY2llX3BvcnRkcnZfZXJyX2hhbmRsZXIgPSB7CisJCS5lcnJvcl9kZXRlY3RlZCA9IHBjaWVfcG9ydGRydl9lcnJvcl9kZXRlY3RlZCwKKwkJLm1taW9fZW5hYmxlZCA9IHBjaWVfcG9ydGRydl9tbWlvX2VuYWJsZWQsCisJCS5zbG90X3Jlc2V0ID0gcGNpZV9wb3J0ZHJ2X3Nsb3RfcmVzZXQsCisJCS5yZXN1bWUgPSBwY2llX3BvcnRkcnZfZXJyX3Jlc3VtZSwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBwY2llX3BvcnRkcnYgPSB7CiAJLm5hbWUJCT0gKGNoYXIgKilkZXZpY2VfbmFtZSwKIAkuaWRfdGFibGUJPSAmcG9ydF9wY2lfaWRzWzBdLApAQCAtMTIxLDIwICsyODMsMjUgQEAKIAkucHJvYmUJCT0gcGNpZV9wb3J0ZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gcGNpZV9wb3J0ZHJ2X3JlbW92ZSwKIAotI2lmZGVmCUNPTkZJR19QTQogCS5zdXNwZW5kCT0gcGNpZV9wb3J0ZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBwY2llX3BvcnRkcnZfcmVzdW1lLAotI2VuZGlmCS8qIFBNICovCisKKwkuZXJyX2hhbmRsZXIgCT0gJnBjaWVfcG9ydGRydl9lcnJfaGFuZGxlciwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaWVfcG9ydGRydl9pbml0KHZvaWQpCiB7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IHJldHZhbDsKIAotCXBjaWVfcG9ydF9idXNfcmVnaXN0ZXIoKTsKKwlyZXR2YWwgPSBwY2llX3BvcnRfYnVzX3JlZ2lzdGVyKCk7CisJaWYgKHJldHZhbCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0lFOiBidXNfcmVnaXN0ZXIgZXJyb3I6ICVkXG4iLCByZXR2YWwpOworCQlnb3RvIG91dDsKKwl9CiAJcmV0dmFsID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmcGNpZV9wb3J0ZHJ2KTsKIAlpZiAocmV0dmFsKQogCQlwY2llX3BvcnRfYnVzX3VucmVnaXN0ZXIoKTsKKyBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcHJvYmUuYyBiL2RyaXZlcnMvcGNpL3Byb2JlLmMKaW5kZXggYzVhNThkMS4uYTNiMGE1ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcHJvYmUuYworKysgYi9kcml2ZXJzL3BjaS9wcm9iZS5jCkBAIC0zMzksNiArMzM5LDcgQEAKIHsKIAlzdHJ1Y3QgcGNpX2J1cyAqY2hpbGQ7CiAJaW50IGk7CisJaW50IHJldHZhbDsKIAogCS8qCiAJICogQWxsb2NhdGUgYSBuZXcgYnVzLCBhbmQgaW5oZXJpdCBzdHVmZiBmcm9tIHRoZSBwYXJlbnQuLgpAQCAtMzU2LDggKzM1NywxMyBAQAogCiAJY2hpbGQtPmNsYXNzX2Rldi5jbGFzcyA9ICZwY2lidXNfY2xhc3M7CiAJc3ByaW50ZihjaGlsZC0+Y2xhc3NfZGV2LmNsYXNzX2lkLCAiJTA0eDolMDJ4IiwgcGNpX2RvbWFpbl9ucihjaGlsZCksIGJ1c25yKTsKLQljbGFzc19kZXZpY2VfcmVnaXN0ZXIoJmNoaWxkLT5jbGFzc19kZXYpOwotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZSgmY2hpbGQtPmNsYXNzX2RldiwgJmNsYXNzX2RldmljZV9hdHRyX2NwdWFmZmluaXR5KTsKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfcmVnaXN0ZXIoJmNoaWxkLT5jbGFzc19kZXYpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3JfcmVnaXN0ZXI7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKCZjaGlsZC0+Y2xhc3NfZGV2LAorCQkJCQkgICZjbGFzc19kZXZpY2VfYXR0cl9jcHVhZmZpbml0eSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcl9maWxlX2NyZWF0ZTsKIAogCS8qCiAJICogU2V0IHVwIHRoZSBwcmltYXJ5LCBzZWNvbmRhcnkgYW5kIHN1Ym9yZGluYXRlCkBAIC0zNzUsNiArMzgxLDEyIEBACiAJYnJpZGdlLT5zdWJvcmRpbmF0ZSA9IGNoaWxkOwogCiAJcmV0dXJuIGNoaWxkOworCitlcnJvcl9maWxlX2NyZWF0ZToKKwljbGFzc19kZXZpY2VfdW5yZWdpc3RlcigmY2hpbGQtPmNsYXNzX2Rldik7CitlcnJvcl9yZWdpc3RlcjoKKwlrZnJlZShjaGlsZCk7CisJcmV0dXJuIE5VTEw7CiB9CiAKIHN0cnVjdCBwY2lfYnVzICogX19kZXZpbml0IHBjaV9hZGRfbmV3X2J1cyhzdHJ1Y3QgcGNpX2J1cyAqcGFyZW50LCBzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgYnVzbnIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9xdWlya3MuYyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCmluZGV4IGRlZjc4YTIuLjIzYjU5OWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL3F1aXJrcy5jCisrKyBiL2RyaXZlcnMvcGNpL3F1aXJrcy5jCkBAIC05Myw4ICs5MywyMSBAQAogCQlwY2lfcGNpX3Byb2JsZW1zIHw9IFBDSVBDSV9GQUlMOwogCX0KIH0KKworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX25vcGNpYW1kKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJdTggcmV2OworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgMHgwOCwgJnJldik7CisJaWYgKHJldiA9PSAweDEzKSB7CisJCS8qIEVycmF0dW0gMjQgKi8KKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ2hpcHNldCBlcnJhdHVtOiBEaXNhYmxpbmcgZGlyZWN0IFBDSS9BR1AgdHJhbnNmZXJzLlxuIik7CisJCXBjaV9wY2lfcHJvYmxlbXMgfD0gUENJQUdQX0ZBSUw7CisJfQorfQorCiBERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1NJLAlQQ0lfREVWSUNFX0lEX1NJXzU1OTcsCQlxdWlya19ub3BjaXBjaSApOwogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9TSSwJUENJX0RFVklDRV9JRF9TSV80OTYsCQlxdWlya19ub3BjaXBjaSApOworREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9BTUQsCVBDSV9ERVZJQ0VfSURfQU1EXzgxNTFfMCwJcXVpcmtfbm9wY2lhbWQgKTsKIAogLyoKICAqCVRyaXRvbiByZXF1aXJlcyB3b3JrYXJvdW5kcyB0byBiZSB1c2VkIGJ5IHRoZSBkcml2ZXJzCkBAIC01NTUsNyArNTY4LDcgQEAKICAqIGlzIGN1cnJlbnRseSBtYXJrZWQgTm9GaXgKICAqCiAgKiBXZSBoYXZlIG11bHRpcGxlIHJlcG9ydHMgb2YgaGFuZ3Mgd2l0aCB0aGlzIGNoaXBzZXQgdGhhdCB3ZW50IGF3YXkgd2l0aAotICogbm9hcGljIHNwZWNpZmllZC4gRm9yIHRoZSBtb21lbnQgd2UgYXNzdW1lIGl0cyB0aGUgZXJyYXRhLiBXZSBtYXkgYmUgd3JvbmcKKyAqIG5vYXBpYyBzcGVjaWZpZWQuIEZvciB0aGUgbW9tZW50IHdlIGFzc3VtZSBpdCdzIHRoZSBlcnJhdHVtLiBXZSBtYXkgYmUgd3JvbmcKICAqIG9mIGNvdXJzZS4gSG93ZXZlciB0aGUgYWR2aWNlIGlzIGRlbW9uc3RyYWJseSBnb29kIGV2ZW4gaWYgc28uLgogICovCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfYW1kX2lvYXBpYyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQpAQCAtNTY0LDcgKzU3Nyw3IEBACiAKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJnJldik7CiAJaWYgKHJldiA+PSAweDAyKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBBUElDOiBBTUQgRXJyYXRhICMyMiBtYXkgYmUgcHJlc2VudC4gSW4gdGhlIGV2ZW50IG9mIGluc3RhYmlsaXR5IHRyeVxuIik7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkkvTyBBUElDOiBBTUQgRXJyYXR1bSAjMjIgbWF5IGJlIHByZXNlbnQuIEluIHRoZSBldmVudCBvZiBpbnN0YWJpbGl0eSB0cnlcbiIpOwogCQlwcmludGsoS0VSTl9XQVJOSU5HICIgICAgICAgIDogYm9vdGluZyB3aXRoIHRoZSBcIm5vYXBpY1wiIG9wdGlvbi5cbiIpOwogCX0KIH0KQEAgLTU3Nyw4ICs1OTAsNiBAQAogfQogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9TSSwJUENJX0FOWV9JRCwJCQlxdWlya19pb2FwaWNfcm13ICk7CiAKLWludCBwY2lfbXNpX3F1aXJrOwotCiAjZGVmaW5lIEFNRDgxMzFfcmV2QTAgICAgICAgIDB4MDEKICNkZWZpbmUgQU1EODEzMV9yZXZCMCAgICAgICAgMHgxMQogI2RlZmluZSBBTUQ4MTMxX01JU0MgICAgICAgICAweDQwCkBAIC01ODcsMTIgKzU5OCw2IEBACiB7IAogICAgICAgICB1bnNpZ25lZCBjaGFyIHJldmlkLCB0bXA7CiAgICAgICAgIAotCWlmIChkZXYtPnN1Ym9yZGluYXRlKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiAiCi0JCSAgICAgICAiUENJX0JVU19GTEFHU19OT19NU0kgc2V0IGZvciBzdWJvcmRpbmF0ZSBidXMuXG4iKTsKLQkJZGV2LT5zdWJvcmRpbmF0ZS0+YnVzX2ZsYWdzIHw9IFBDSV9CVVNfRkxBR1NfTk9fTVNJOwotCX0KLQogICAgICAgICBpZiAobnJfaW9hcGljcyA9PSAwKSAKICAgICAgICAgICAgICAgICByZXR1cm47CiAKQEAgLTYwNSwxMyArNjEwLDYgQEAKICAgICAgICAgfQogfSAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSwgcXVpcmtfYW1kXzgxMzFfaW9hcGljKTsKLQotc3RhdGljIHZvaWQgX19pbml0IHF1aXJrX3N2d19tc2koc3RydWN0IHBjaV9kZXYgKmRldikKLXsKLQlwY2lfbXNpX3F1aXJrID0gMTsKLQlwcmludGsoS0VSTl9XQVJOSU5HICJQQ0k6IE1TSSBxdWlyayBkZXRlY3RlZC4gcGNpX21zaV9xdWlyayBzZXQuXG4iKTsKLX0KLURFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfU0VSVkVSV09SS1MsIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfR0NOQl9MRSwgcXVpcmtfc3Z3X21zaSApOwogI2VuZGlmIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLwogCiAKQEAgLTE2OTAsNiArMTY4OCw5NSBAQAogREVDTEFSRV9QQ0lfRklYVVBfRklOQUwoUENJX1ZFTkRPUl9JRF9OVklESUEsICBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9QQ0lFLAogCQkJcXVpcmtfbnZpZGlhX2NrODA0X3BjaWVfYWVyX2V4dF9jYXApOwogCisjaWZkZWYgQ09ORklHX1BDSV9NU0kKKy8qIFRvIGRpc2FibGUgTVNJIGdsb2JhbGx5ICovCitpbnQgcGNpX21zaV9xdWlyazsKKworLyogVGhlIFNlcnZlcndvcmtzIFBDSS1YIGNoaXBzZXQgZG9lcyBub3Qgc3VwcG9ydCBNU0kuIFdlIGNhbm5vdCBlYXNpbHkgcmVseQorICogb24gc2V0dGluZyBQQ0lfQlVTX0ZMQUdTX05PX01TSSBpbiBpdHMgYnVzIGZsYWdzIGJlY2F1c2UgdGhlcmUgYXJlIGFjdHVhbGx5CisgKiBzb21lIG90aGVyIGJ1c3NlcyBjb250cm9sbGVkIGJ5IHRoZSBjaGlwc2V0IGV2ZW4gaWYgTGludXggaXMgbm90IGF3YXJlIG9mIGl0LgorICogSW5zdGVhZCBvZiBzZXR0aW5nIHRoZSBmbGFnIG9uIGFsbCBidXNzZXMgaW4gdGhlIG1hY2hpbmUsIHNpbXBseSBkaXNhYmxlIE1TSQorICogZ2xvYmFsbHkuCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBxdWlya19zdndfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJcGNpX21zaV9xdWlyayA9IDE7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBNU0kgcXVpcmsgZGV0ZWN0ZWQuIHBjaV9tc2lfcXVpcmsgc2V0LlxuIik7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0dDTkJfTEUsIHF1aXJrX3N2d19tc2kpOworCisvKiBEaXNhYmxlIE1TSSBvbiBjaGlwc2V0cyB0aGF0IGFyZSBrbm93biB0byBub3Qgc3VwcG9ydCBpdCAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IHF1aXJrX2Rpc2FibGVfbXNpKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+c3Vib3JkaW5hdGUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiUENJOiBNU0kgcXVpcmsgZGV0ZWN0ZWQuICIKKwkJICAgICAgICJQQ0lfQlVTX0ZMQUdTX05PX01TSSBzZXQgZm9yICVzIHN1Ym9yZGluYXRlIGJ1cy5cbiIsCisJCSAgICAgICBwY2lfbmFtZShkZXYpKTsKKwkJZGV2LT5zdWJvcmRpbmF0ZS0+YnVzX2ZsYWdzIHw9IFBDSV9CVVNfRkxBR1NfTk9fTVNJOworCX0KK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9WRU5ET1JfSURfQU1ELCBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSwgcXVpcmtfZGlzYWJsZV9tc2kpOworCisvKiBHbyB0aHJvdWdoIHRoZSBsaXN0IG9mIEh5cGVydHJhbnNwb3J0IGNhcGFiaWxpdGllcyBhbmQKKyAqIHJldHVybiAxIGlmIGEgSFQgTVNJIGNhcGFiaWxpdHkgaXMgZm91bmQgYW5kIGVuYWJsZWQgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IG1zaV9odF9jYXBfZW5hYmxlZChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXU4IHBvczsKKwlpbnQgdHRsOworCWZvciAocG9zID0gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYsIFBDSV9DQVBfSURfSFQpLCB0dGwgPSA0ODsKKwkgICAgIHBvcyAmJiB0dGw7CisJICAgICBwb3MgPSBwY2lfZmluZF9uZXh0X2NhcGFiaWxpdHkoZGV2LCBwb3MsIFBDSV9DQVBfSURfSFQpLCB0dGwtLSkgeworCQl1MzIgY2FwX2hkcjsKKwkJLyogTVNJIG1hcHBpbmcgc2VjdGlvbiBhY2NvcmRpbmcgdG8gSHlwZXJ0cmFuc3BvcnQgc3BlYyAqLworCQlpZiAocGNpX3JlYWRfY29uZmlnX2R3b3JkKGRldiwgcG9zLCAmY2FwX2hkcikgPT0gMAorCQkgICAgJiYgKGNhcF9oZHIgJiAweGY4MDAwMDAwKSA9PSAweGE4MDAwMDAwIC8qIE1TSSBtYXBwaW5nICovKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJQQ0k6IEZvdW5kIEhUIE1TSSBtYXBwaW5nIG9uICVzIHdpdGggY2FwYWJpbGl0eSAlc1xuIiwKKwkJCSAgICAgICBwY2lfbmFtZShkZXYpLCBjYXBfaGRyICYgMHgxMDAwMCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCQkJcmV0dXJuIChjYXBfaGRyICYgMHgxMDAwMCkgIT0gMDsgLyogTVNJIG1hcHBpbmcgY2FwIGVuYWJsZWQgKi8KKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworLyogQ2hlY2sgdGhlIGh5cGVydHJhbnNwb3J0IE1TSSBtYXBwaW5nIHRvIGtub3cgd2hldGhlciBNU0kgaXMgZW5hYmxlZCBvciBub3QgKi8KK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBxdWlya19tc2lfaHRfY2FwKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJaWYgKGRldi0+c3Vib3JkaW5hdGUgJiYgIW1zaV9odF9jYXBfZW5hYmxlZChkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiAiCisJCSAgICAgICAiTVNJIGRpc2FibGVkIG9uIGNoaXBzZXQgJXMuXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CisJCWRldi0+c3Vib3JkaW5hdGUtPmJ1c19mbGFncyB8PSBQQ0lfQlVTX0ZMQUdTX05PX01TSTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTLCBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMjAwMF9QQ0lFLAorCQkJcXVpcmtfbXNpX2h0X2NhcCk7CisKKy8qIFRoZSBuVmlkaWEgQ0s4MDQgY2hpcHNldCBtYXkgaGF2ZSAyIEhUIE1TSSBtYXBwaW5ncy4KKyAqIE1TSSBhcmUgc3VwcG9ydGVkIGlmIHRoZSBNU0kgY2FwYWJpbGl0eSBzZXQgaW4gYW55IG9mIHRoZXNlIG1hcHBpbmdzLgorICovCitzdGF0aWMgdm9pZCBfX2RldmluaXQgcXVpcmtfbnZpZGlhX2NrODA0X21zaV9odF9jYXAoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKworCWlmICghZGV2LT5zdWJvcmRpbmF0ZSkKKwkJcmV0dXJuOworCisJLyogY2hlY2sgSFQgTVNJIGNhcCBvbiB0aGlzIGNoaXBzZXQgYW5kIHRoZSByb290IG9uZS4KKwkgKiBhIHNpbmdsZSBvbmUgaGF2aW5nIE1TSSBpcyBlbm91Z2ggdG8gYmUgc3VyZSB0aGF0IE1TSSBhcmUgc3VwcG9ydGVkLgorCSAqLworCXBkZXYgPSBwY2lfZmluZF9zbG90KGRldi0+YnVzLT5udW1iZXIsIDApOworCWlmIChkZXYtPnN1Ym9yZGluYXRlICYmICFtc2lfaHRfY2FwX2VuYWJsZWQoZGV2KQorCSAgICAmJiAhbXNpX2h0X2NhcF9lbmFibGVkKHBkZXYpKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBDSTogTVNJIHF1aXJrIGRldGVjdGVkLiAiCisJCSAgICAgICAiTVNJIGRpc2FibGVkIG9uIGNoaXBzZXQgJXMuXG4iLAorCQkgICAgICAgcGNpX25hbWUoZGV2KSk7CisJCWRldi0+c3Vib3JkaW5hdGUtPmJ1c19mbGFncyB8PSBQQ0lfQlVTX0ZMQUdTX05PX01TSTsKKwl9Cit9CitERUNMQVJFX1BDSV9GSVhVUF9GSU5BTChQQ0lfVkVORE9SX0lEX05WSURJQSwgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4MDRfUENJRSwKKwkJCXF1aXJrX252aWRpYV9jazgwNF9tc2lfaHRfY2FwKTsKKyNlbmRpZiAvKiBDT05GSUdfUENJX01TSSAqLworCiBFWFBPUlRfU1lNQk9MKHBjaWVfbWNoX3F1aXJrKTsKICNpZmRlZiBDT05GSUdfSE9UUExVRwogRVhQT1JUX1NZTUJPTChwY2lfZml4dXBfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3JlbW92ZS5jIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKaW5kZXggOTlmZmJkNC4uNDMwMjgxYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcmVtb3ZlLmMKKysrIGIvZHJpdmVycy9wY2kvcmVtb3ZlLmMKQEAgLTE2LDggKzE2LDExIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBwY2lfZGVzdHJveV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3N0YXRpYyB2b2lkIHBjaV9zdG9wX2RldihzdHJ1Y3QgcGNpX2RldiAqZGV2KQogeworCWlmICghZGV2LT5nbG9iYWxfbGlzdC5uZXh0KQorCQlyZXR1cm47CisKIAlpZiAoIWxpc3RfZW1wdHkoJmRldi0+Z2xvYmFsX2xpc3QpKSB7CiAJCXBjaV9wcm9jX2RldGFjaF9kZXZpY2UoZGV2KTsKIAkJcGNpX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMoZGV2KTsKQEAgLTI3LDYgKzMwLDExIEBACiAJCWRldi0+Z2xvYmFsX2xpc3QubmV4dCA9IGRldi0+Z2xvYmFsX2xpc3QucHJldiA9IE5VTEw7CiAJCXVwX3dyaXRlKCZwY2lfYnVzX3NlbSk7CiAJfQorfQorCitzdGF0aWMgdm9pZCBwY2lfZGVzdHJveV9kZXYoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlwY2lfc3RvcF9kZXYoZGV2KTsKIAogCS8qIFJlbW92ZSB0aGUgZGV2aWNlIGZyb20gdGhlIGRldmljZSBsaXN0cywgYW5kIHByZXZlbnQgYW55IGZ1cnRoZXIKIAkgKiBsaXN0IGFjY2Vzc2VzIGZyb20gdGhpcyBkZXZpY2UgKi8KQEAgLTExOSw1ICsxMjcsMzIgQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIHBjaV9zdG9wX2J1c19kZXZpY2VzKHN0cnVjdCBwY2lfYnVzICpidXMpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqbCwgKm47CisKKwlsaXN0X2Zvcl9lYWNoX3NhZmUobCwgbiwgJmJ1cy0+ZGV2aWNlcykgeworCQlzdHJ1Y3QgcGNpX2RldiAqZGV2ID0gcGNpX2Rldl9iKGwpOworCQlwY2lfc3RvcF9idXNfZGV2aWNlKGRldik7CisJfQorfQorCisvKioKKyAqIHBjaV9zdG9wX2J1c19kZXZpY2UgLSBzdG9wIGEgUENJIGRldmljZSBhbmQgYW55IGNoaWxkcmVuCisgKiBAZGV2OiB0aGUgZGV2aWNlIHRvIHN0b3AKKyAqCisgKiBTdG9wIGEgUENJIGRldmljZSAoZGV0YWNoIHRoZSBkcml2ZXIsIHJlbW92ZSBmcm9tIHRoZSBnbG9iYWwgbGlzdAorICogYW5kIHNvIG9uKS4gVGhpcyBhbHNvIHN0b3AgYW55IHN1Ym9yZGluYXRlIGJ1c2VzIGFuZCBjaGlsZHJlbiBpbiBhCisgKiBkZXB0aC1maXJzdCBtYW5uZXIuCisgKi8KK3ZvaWQgcGNpX3N0b3BfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCWlmIChkZXYtPnN1Ym9yZGluYXRlKQorCQlwY2lfc3RvcF9idXNfZGV2aWNlcyhkZXYtPnN1Ym9yZGluYXRlKTsKKworCXBjaV9zdG9wX2RldihkZXYpOworfQorCiBFWFBPUlRfU1lNQk9MKHBjaV9yZW1vdmVfYnVzX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKHBjaV9yZW1vdmVfYmVoaW5kX2JyaWRnZSk7CitFWFBPUlRfU1lNQk9MX0dQTChwY2lfc3RvcF9idXNfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3NldHVwLWJ1cy5jIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKaW5kZXggNDdjMTA3MS4uNTQ0MDQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKKysrIGIvZHJpdmVycy9wY2kvc2V0dXAtYnVzLmMKQEAgLTU1LDEyICs1NSwxOSBAQAogCWxpc3RfZm9yX2VhY2hfZW50cnkoZGV2LCAmYnVzLT5kZXZpY2VzLCBidXNfbGlzdCkgewogCQl1MTYgY2xhc3MgPSBkZXYtPmNsYXNzID4+IDg7CiAKLQkJLyogRG9uJ3QgdG91Y2ggY2xhc3NsZXNzIGRldmljZXMgb3IgaG9zdCBicmlkZ2VzIG9yIGlvYXBpY3MuICAqLworCQkvKiBEb24ndCB0b3VjaCBjbGFzc2xlc3MgZGV2aWNlcyBvciBob3N0IGJyaWRnZXMuICovCiAJCWlmIChjbGFzcyA9PSBQQ0lfQ0xBU1NfTk9UX0RFRklORUQgfHwKLQkJICAgIGNsYXNzID09IFBDSV9DTEFTU19CUklER0VfSE9TVCB8fAotCQkgICAgY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpCisJCSAgICBjbGFzcyA9PSBQQ0lfQ0xBU1NfQlJJREdFX0hPU1QpCiAJCQljb250aW51ZTsKIAorCQkvKiBEb24ndCB0b3VjaCBpb2FwaWNzIGlmIGl0IGhhcyB0aGUgYXNzaWduZWQgcmVzb3VyY2VzLiAqLworCQlpZiAoY2xhc3MgPT0gUENJX0NMQVNTX1NZU1RFTV9QSUMpIHsKKwkJCXJlcyA9ICZkZXYtPnJlc291cmNlWzBdOworCQkJaWYgKHJlc1swXS5zdGFydCB8fCByZXNbMV0uc3RhcnQgfHwgcmVzWzJdLnN0YXJ0IHx8CisJCQkgICAgcmVzWzNdLnN0YXJ0IHx8IHJlc1s0XS5zdGFydCB8fCByZXNbNV0uc3RhcnQpCisJCQkJY29udGludWU7CisJCX0KKwogCQlwZGV2X3NvcnRfcmVzb3VyY2VzKGRldiwgJmhlYWQpOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jIGIvZHJpdmVycy9wY21jaWEvY2FyZGJ1cy5jCmluZGV4IDNmNmQ1MWQuLjJkN2VmZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNtY2lhL2NhcmRidXMuYworKysgYi9kcml2ZXJzL3BjbWNpYS9jYXJkYnVzLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAJY3NfZGJnKHMsIDMsICJyZWFkX2NiX21lbSglZCwgJSN4LCAldSlcbiIsIHNwYWNlLCBhZGRyLCBsZW4pOwogCi0JZGV2ID0gcGNpX2ZpbmRfc2xvdChzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLT5udW1iZXIsIDApOworCWRldiA9IHBjaV9nZXRfc2xvdChzLT5jYl9kZXYtPnN1Ym9yZGluYXRlLCAwKTsKIAlpZiAoIWRldikKIAkJZ290byBmYWlsOwogCkBAIC0xNTIsNiArMTUyLDkgQEAKIAl9CiAKIAlyZXMgPSBkZXYtPnJlc291cmNlICsgc3BhY2UgLSAxOworCisJcGNpX2Rldl9wdXQoZGV2KTsKKwogCWlmICghcmVzLT5mbGFncykKIAkJZ290byBmYWlsOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMgYi9kcml2ZXJzL3BjbWNpYS9vbWFwX2NmLmMKaW5kZXggNDIwZTEwYS4uMDFiZTQ3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY21jaWEvb21hcF9jZi5jCisrKyBiL2RyaXZlcnMvcGNtY2lhL29tYXBfY2YuYwpAQCAtNjcsNiArNjcsNyBAQAogCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7CiAJdW5zaWduZWQgbG9uZwkJcGh5c19jZjsKIAl1X2ludAkJCWlycTsKKwlzdHJ1Y3QgcmVzb3VyY2UJCWlvbWVtOwogfTsKIAogI2RlZmluZQlQT0xMX0lOVEVSVkFMCQkoMiAqIEhaKQpAQCAtMTEyLDE2ICsxMTMsMTQgQEAKIAlpZiAoIXNwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIEZJWE1FIHBvd2VyIG1hbmFnZW1lbnQgc2hvdWxkIHByb2JhYmx5IGJlIGJvYXJkLXNwZWNpZmljOgotCSAqICAtIDNWQ0FSRCB2cyBYVkNBUkQgKE9TSyBvbmx5IGhhbmRsZXMgM1ZDQVJEKQotCSAqICAtIFBPV0VST04gKHN3aXRjaGVkIG9uL29mZiBieSBzZXRfc29ja2V0KQotCSAqLworCS8qIE5PVEUgQ0YgaXMgYWx3YXlzIDNWQ0FSRCAqLwogCWlmIChvbWFwX2NmX3ByZXNlbnQoKSkgewogCQlzdHJ1Y3Qgb21hcF9jZl9zb2NrZXQJKmNmOwogCiAJCSpzcCA9IFNTX1JFQURZIHwgU1NfREVURUNUIHwgU1NfUE9XRVJPTiB8IFNTXzNWQ0FSRDsKIAkJY2YgPSBjb250YWluZXJfb2Yocywgc3RydWN0IG9tYXBfY2Zfc29ja2V0LCBzb2NrZXQpOwotCQlzLT5pcnEuQXNzaWduZWRJUlEgPSBjZi0+aXJxOworCQlzLT5pcnEuQXNzaWduZWRJUlEgPSAwOworCQlzLT5wY2lfaXJxID0gY2YtPmlycTsKIAl9IGVsc2UKIAkJKnNwID0gMDsKIAlyZXR1cm4gMDsKQEAgLTEzMiw3ICsxMzEsNyBAQAogewogCXUxNgkJY29udHJvbDsKIAotCS8qIEZJWE1FIHNvbWUgbm9uLU9TSyBib2FyZHMgd2lsbCBzdXBwb3J0IHBvd2VyIHN3aXRjaGluZyAqLworCS8qIFJFVklTSVQgc29tZSBub24tT1NLIGJvYXJkcyBtYXkgc3VwcG9ydCBwb3dlciBzd2l0Y2hpbmcgKi8KIAlzd2l0Y2ggKHMtPlZjYykgewogCWNhc2UgMDoKIAljYXNlIDMzOgpAQCAtMjA0LDcgKzIwMyw3IEBACiAgKiAid2hhdCBjaGlwc2VsZWN0IGlzIHVzZWQiLiAgQm9hcmRzIGNvdWxkIHdhbnQgbW9yZS4KICAqLwogCi1zdGF0aWMgaW50IF9faW5pdCBvbWFwX2NmX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgX19kZXZpbml0IG9tYXBfY2ZfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQogewogCXVuc2lnbmVkCQlzZWc7CiAJc3RydWN0IG9tYXBfY2Zfc29ja2V0CSpjZjsKQEAgLTI1Myw2ICsyNTIsOSBAQAogCWRlZmF1bHQ6CiAJCWdvdG8gIGZhaWwxOwogCX0KKwljZi0+aW9tZW0uc3RhcnQgPSBjZi0+cGh5c19jZjsKKwljZi0+aW9tZW0uZW5kID0gY2YtPmlvbWVtLmVuZCArIFNaXzhLIC0gMTsKKwljZi0+aW9tZW0uZmxhZ3MgPSBJT1JFU09VUkNFX01FTTsKIAogCS8qIHBjbWNpYSBsYXllciBvbmx5IHJlbWFwcyAicmVhbCIgbWVtb3J5ICovCiAJY2YtPnNvY2tldC5pb19vZmZzZXQgPSAodW5zaWduZWQgbG9uZykKQEAgLTI5Niw2ICsyOTgsNyBAQAogCWNmLT5zb2NrZXQuZmVhdHVyZXMgPSBTU19DQVBfUENDQVJEIHwgU1NfQ0FQX1NUQVRJQ19NQVAKIAkJCQl8IFNTX0NBUF9NRU1fQUxJR047CiAJY2YtPnNvY2tldC5tYXBfc2l6ZSA9IFNaXzJLOworCWNmLT5zb2NrZXQuaW9bMF0ucmVzID0gJmNmLT5pb21lbTsKIAogCXN0YXR1cyA9IHBjbWNpYV9yZWdpc3Rlcl9zb2NrZXQoJmNmLT5zb2NrZXQpOwogCWlmIChzdGF0dXMgPCAwKQpAQCAtMzM0LDE1ICszMzcsMTUgQEAKIAkuYnVzCQk9ICZwbGF0Zm9ybV9idXNfdHlwZSwKIAkucHJvYmUJCT0gb21hcF9jZl9wcm9iZSwKIAkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKG9tYXBfY2ZfcmVtb3ZlKSwKLQkuc3VzcGVuZCAJPSBwY21jaWFfc29ja2V0X2Rldl9zdXNwZW5kLAotCS5yZXN1bWUgCT0gcGNtY2lhX3NvY2tldF9kZXZfcmVzdW1lLAorCS5zdXNwZW5kCT0gcGNtY2lhX3NvY2tldF9kZXZfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHBjbWNpYV9zb2NrZXRfZGV2X3Jlc3VtZSwKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IG9tYXBfY2ZfaW5pdCh2b2lkKQogewogCWlmIChjcHVfaXNfb21hcDE2eHgoKSkKLQkJZHJpdmVyX3JlZ2lzdGVyKCZvbWFwX2NmX2RyaXZlcik7Ci0JcmV0dXJuIDA7CisJCXJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJm9tYXBfY2ZfZHJpdmVyKTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IG9tYXBfY2ZfZXhpdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wbnAvcG5wYmlvcy9jb3JlLmMgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwppbmRleCA1NTFmNThlLi44MWE2YzgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYworKysgYi9kcml2ZXJzL3BucC9wbnBiaW9zL2NvcmUuYwpAQCAtNTI2LDYgKzUyNiwxMCBAQAogewogCWludCByZXQ7CiAKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfTUVSR0UpCisJaWYgKGNoZWNrX2xlZ2FjeV9pb3BvcnQoUE5QQklPU19CQVNFKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisjZW5kaWYKIAlpZiAocG5wYmlvc19kaXNhYmxlZCB8fCBkbWlfY2hlY2tfc3lzdGVtKHBucGJpb3NfZG1pX3RhYmxlKSkgewogCQlwcmludGsoS0VSTl9JTkZPICJQblBCSU9TOiBEaXNhYmxlZFxuIik7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtNTc1LDYgKzU3OSwxMCBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBwbnBiaW9zX3RocmVhZF9pbml0KHZvaWQpCiB7CisjaWYgZGVmaW5lZChDT05GSUdfUFBDX01FUkdFKQorCWlmIChjaGVja19sZWdhY3lfaW9wb3J0KFBOUEJJT1NfQkFTRSkpCisJCXJldHVybiAwOworI2VuZGlmCiAJaWYgKHBucGJpb3NfZGlzYWJsZWQpCiAJCXJldHVybiAwOwogI2lmZGVmIENPTkZJR19IT1RQTFVHCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9LY29uZmlnIGIvZHJpdmVycy9ydGMvS2NvbmZpZwppbmRleCA3ZmYxZDg4Li5mYzc2NmE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9LY29uZmlnCisrKyBiL2RyaXZlcnMvcnRjL0tjb25maWcKQEAgLTI3LDcgKzI3LDcgQEAKIAloZWxwCiAJICBJZiB5b3Ugc2F5IHllcyBoZXJlLCB0aGUgc3lzdGVtIHRpbWUgd2lsbCBiZSBzZXQgdXNpbmcKIAkgIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHNwZWNpZmllZCBSVEMgZGV2aWNlLiBUaGlzIGlzIHVzZWZ1bAotCSAgaW4gb3JkZXIgdG8gYXZvaWQgdW5uZWNlc3NhcnkgZnNjaGsgcnVucy4KKwkgIGluIG9yZGVyIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGZzY2sgcnVucy4KIAogY29uZmlnIFJUQ19IQ1RPU1lTX0RFVklDRQogCXN0cmluZyAiVGhlIFJUQyB0byByZWFkIHRoZSB0aW1lIGZyb20iCkBAIC0zNyw2ICszNywxMyBAQAogCSAgVGhlIFJUQyBkZXZpY2UgdGhhdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHNvdXJjZSBmb3IKIAkgIHRoZSBzeXN0ZW0gdGltZSwgdXN1YWxseSBydGMwLgogCitjb25maWcgUlRDX0RFQlVHCisJYm9vbCAiUlRDIGRlYnVnIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBSVENfQ0xBU1MgPSB5CisJaGVscAorCSAgU2F5IHllcyBoZXJlIHRvIGVuYWJsZSBkZWJ1Z2dpbmcgc3VwcG9ydCBpbiB0aGUgUlRDIGZyYW1ld29yaworCSAgYW5kIGluZGl2aWR1YWwgUlRDIGRyaXZlcnMuCisKIGNvbW1lbnQgIlJUQyBpbnRlcmZhY2VzIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTCiAKQEAgLTQ1LDggKzUyLDggQEAKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBTWVNGUwogCWRlZmF1bHQgUlRDX0NMQVNTCiAJaGVscAotCSAgU2F5IHllcyBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIFJUQyB1c2luZyB0aGUgc3lzZnMKLQkgIGludGVyZmFjZSwgL3N5cy9jbGFzcy9ydGMvcnRjWCAuCisJICBTYXkgeWVzIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgUlRDcyB1c2luZyBzeXNmcyBpbnRlcmZhY2VzLAorCSAgL3N5cy9jbGFzcy9ydGMvcnRjMCB0aHJvdWdoIC9zeXMvLi4uL3J0Y04uCiAKIAkgIFRoaXMgZHJpdmVyIGNhbiBhbHNvIGJlIGJ1aWx0IGFzIGEgbW9kdWxlLiBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgcnRjLXN5c2ZzLgpAQCAtNTYsOCArNjMsOSBAQAogCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIFBST0NfRlMKIAlkZWZhdWx0IFJUQ19DTEFTUwogCWhlbHAKLQkgIFNheSB5ZXMgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgeW91ciBSVEMgdXNpbmcgdGhlIHByb2MKLQkgIGludGVyZmFjZSwgL3Byb2MvZHJpdmVyL3J0YyAuCisJICBTYXkgeWVzIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHlvdXIgZmlyc3QgUlRDIHRocm91Z2ggdGhlIHByb2MKKwkgIGludGVyZmFjZSwgL3Byb2MvZHJpdmVyL3J0Yy4gIE90aGVyIFJUQ3Mgd2lsbCBub3QgYmUgYXZhaWxhYmxlCisJICB0aHJvdWdoIHRoYXQgQVBJLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1wcm9jLgpAQCAtNjcsOCArNzUsMTEgQEAKIAlkZXBlbmRzIG9uIFJUQ19DTEFTUwogCWRlZmF1bHQgUlRDX0NMQVNTCiAJaGVscAotCSAgU2F5IHllcyBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB5b3VyIFJUQyB1c2luZyB0aGUgZGV2Ci0JICBpbnRlcmZhY2UsIC9kZXYvcnRjIC4KKwkgIFNheSB5ZXMgaGVyZSBpZiB5b3Ugd2FudCB0byB1c2UgeW91ciBSVENzIHVzaW5nIHRoZSAvZGV2CisJICBpbnRlcmZhY2VzLCB3aGljaCAidWRldiIgc2V0cyB1cCBhcyAvZGV2L3J0YzAgdGhyb3VnaAorCSAgL2Rldi9ydGNOLiAgWW91IG1heSB3YW50IHRvIHNldCB1cCBhIHN5bWJvbGljIGxpbmsgc28gb25lCisJICBvZiB0aGVzZSBjYW4gYmUgYWNjZXNzZWQgYXMgL2Rldi9ydGMsIHdoaWNoIGlzIGEgbmFtZQorCSAgZXhwZWN0ZWQgYnkgImh3Y2xvY2siIGFuZCBzb21lIG90aGVyIHByb2dyYW1zLgogCiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gSWYgc28sIHRoZSBtb2R1bGUKIAkgIHdpbGwgYmUgY2FsbGVkIHJ0Yy1kZXYuCkBAIC03OCw3ICs4OSw4IEBACiAJZGVwZW5kcyBvbiBSVENfSU5URl9ERVYKIAloZWxwCiAJICBQcm92aWRlcyBhbiBlbXVsYXRpb24gZm9yIFJUQ19VSUUgaWYgdGhlIHVuZGVybGF5aW5nIHJ0YyBjaGlwCi0JICBkcml2ZXIgZGlkIG5vdCBwcm92aWRlIFJUQ19VSUUgaW9jdGxzLgorCSAgZHJpdmVyIGRvZXMgbm90IGV4cG9zZSBSVENfVUlFIGlvY3Rscy4gIFRob3NlIHJlcXVlc3RzIGdlbmVyYXRlCisJICBvbmNlLXBlci1zZWNvbmQgdXBkYXRlIGludGVycnVwdHMsIHVzZWQgZm9yIHN5bmNocm9uaXphdGlvbi4KIAogY29tbWVudCAiUlRDIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBSVENfQ0xBU1MKQEAgLTIzOCw2ICsyNTAsMTYgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHJ0Yy1zYTExMDAuCiAKK2NvbmZpZyBSVENfRFJWX1NICisJdHJpc3RhdGUgIlN1cGVySCBPbi1DaGlwIFJUQyIKKwlkZXBlbmRzIG9uIFJUQ19DTEFTUyAmJiBTVVBFUkgKKwloZWxwCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgb24tY2hpcCBSVEMgZm91bmQgaW4KKwkgIG1vc3QgU3VwZXJIIHByb2Nlc3NvcnMuCisKKyAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBydGMtc2guCisKIGNvbmZpZyBSVENfRFJWX1ZSNDFYWAogCXRyaXN0YXRlICJORUMgVlI0MVhYIgogCWRlcGVuZHMgb24gUlRDX0NMQVNTICYmIENQVV9WUjQxWFgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL01ha2VmaWxlIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKaW5kZXggYmJjZmIwOS4uM2JhNWZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9ydGMvTWFrZWZpbGUKQEAgLTIsNiArMiwxMCBAQAogIyBNYWtlZmlsZSBmb3IgUlRDIGNsYXNzL2RyaXZlcnMuCiAjCiAKK2lmZXEgKCQoQ09ORklHX1JUQ19ERUJVRykseSkKKwlFWFRSQV9DRkxBR1MJCSs9IC1EREVCVUcKK2VuZGlmCisKIG9iai0kKENPTkZJR19SVENfTElCKQkJKz0gcnRjLWxpYi5vCiBvYmotJChDT05GSUdfUlRDX0hDVE9TWVMpCSs9IGhjdG9zeXMubwogb2JqLSQoQ09ORklHX1JUQ19DTEFTUykJCSs9IHJ0Yy1jb3JlLm8KQEAgLTMxLDMgKzM1LDQgQEAKIG9iai0kKENPTkZJR19SVENfRFJWX01BWDY5MDIpCSs9IHJ0Yy1tYXg2OTAyLm8KIG9iai0kKENPTkZJR19SVENfRFJWX1YzMDIwKQkrPSBydGMtdjMwMjAubwogb2JqLSQoQ09ORklHX1JUQ19EUlZfQVQ5MSkJKz0gcnRjLWF0OTEubworb2JqLSQoQ09ORklHX1JUQ19EUlZfU0gpCSs9IHJ0Yy1zaC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9jbGFzcy5jIGIvZHJpdmVycy9ydGMvY2xhc3MuYwppbmRleCAxY2I2MWE3Li43YTBkOGVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9jbGFzcy5jCisrKyBiL2RyaXZlcnMvcnRjL2NsYXNzLmMKQEAgLTM5LDcgKzM5LDcgQEAKICAqIFJldHVybnMgdGhlIHBvaW50ZXIgdG8gdGhlIG5ldyBzdHJ1Y3QgY2xhc3MgZGV2aWNlLgogICovCiBzdHJ1Y3QgcnRjX2RldmljZSAqcnRjX2RldmljZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCXN0cnVjdCBydGNfY2xhc3Nfb3BzICpvcHMsCisJCQkJCWNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzICpvcHMsCiAJCQkJCXN0cnVjdCBtb2R1bGUgKm93bmVyKQogewogCXN0cnVjdCBydGNfZGV2aWNlICpydGM7CkBAIC0xNDIsOSArMTQyLDkgQEAKIAljbGFzc19kZXN0cm95KHJ0Y19jbGFzcyk7CiB9CiAKLW1vZHVsZV9pbml0KHJ0Y19pbml0KTsKK3N1YnN5c19pbml0Y2FsbChydGNfaW5pdCk7CiBtb2R1bGVfZXhpdChydGNfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWguaXQ+Iik7CitNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUlRDIGNsYXNzIHN1cHBvcnQiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtYXQ5MS5jCmluZGV4IGRmZDBjZTguLmMwNzE0ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1hdDkxLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWF0OTEuYwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAJcmV0dXJuIElSUV9OT05FOwkJLyogbm90IGhhbmRsZWQgKi8KIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGF0OTFfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBhdDkxX3J0Y19vcHMgPSB7CiAJLmlvY3RsCQk9IGF0OTFfcnRjX2lvY3RsLAogCS5yZWFkX3RpbWUJPSBhdDkxX3J0Y19yZWFkdGltZSwKIAkuc2V0X3RpbWUJPSBhdDkxX3J0Y19zZXR0aW1lLApAQCAtMzA3LDYgKzMwNyw3IEBACiAJCXJldHVybiBQVFJfRVJSKHJ0Yyk7CiAJfQogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHJ0Yyk7CisJZGV2aWNlX2luaXRfd2FrZXVwKCZwZGV2LT5kZXYsIDEpOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiQVQ5MSBSZWFsIFRpbWUgQ2xvY2sgZHJpdmVyLlxuIik7CiAJcmV0dXJuIDA7CkBAIC0zMjcsNiArMzI4LDcgQEAKIAogCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMpOwogCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIE5VTEwpOworCWRldmljZV9pbml0X3dha2V1cCgmcGRldi0+ZGV2LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzM2LDYgKzMzOCw3IEBACiAvKiBBVDkxUk05MjAwIFJUQyBQb3dlciBtYW5hZ2VtZW50IGNvbnRyb2wgKi8KIAogc3RhdGljIHN0cnVjdCB0aW1lc3BlYyBhdDkxX3J0Y19kZWx0YTsKK3N0YXRpYyB1MzIgYXQ5MV9ydGNfaW1yOwogCiBzdGF0aWMgaW50IGF0OTFfcnRjX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewpAQCAtMzQ5LDYgKzM1MiwxOCBAQAogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlzYXZlX3RpbWVfZGVsdGEoJmF0OTFfcnRjX2RlbHRhLCAmdGltZSk7CiAKKwkvKiB0aGlzIElSUSBpcyBzaGFyZWQgd2l0aCBEQkdVIGFuZCBvdGhlciBoYXJkd2FyZSB3aGljaCBpc24ndAorCSAqIG5lY2Vzc2FyaWx5IGRvaW5nIFBNIGxpa2Ugd2UgYXJlLi4uCisJICovCisJYXQ5MV9ydGNfaW1yID0gYXQ5MV9zeXNfcmVhZChBVDkxX1JUQ19JTVIpCisJCQkmIChBVDkxX1JUQ19BTEFSTXxBVDkxX1JUQ19TRUNFVik7CisJaWYgKGF0OTFfcnRjX2ltcikgeworCQlpZiAoZGV2aWNlX21heV93YWtldXAoJnBkZXYtPmRldikpCisJCQllbmFibGVfaXJxX3dha2UoQVQ5MV9JRF9TWVMpOworCQllbHNlCisJCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRFIsIGF0OTFfcnRjX2ltcik7CisJfQorCiAJcHJfZGVidWcoIiVzKCk6ICU0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmRcbiIsIF9fRlVOQ1RJT05fXywKIAkJMTkwMCArIHRtLnRtX3llYXIsIHRtLnRtX21vbiwgdG0udG1fbWRheSwKIAkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOwpAQCAtMzY3LDYgKzM4MiwxMyBAQAogCXJ0Y190bV90b190aW1lKCZ0bSwgJnRpbWUudHZfc2VjKTsKIAlyZXN0b3JlX3RpbWVfZGVsdGEoJmF0OTFfcnRjX2RlbHRhLCAmdGltZSk7CiAKKwlpZiAoYXQ5MV9ydGNfaW1yKSB7CisJCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmcGRldi0+ZGV2KSkKKwkJCWRpc2FibGVfaXJxX3dha2UoQVQ5MV9JRF9TWVMpOworCQllbHNlCisJCQlhdDkxX3N5c193cml0ZShBVDkxX1JUQ19JRVIsIGF0OTFfcnRjX2ltcik7CisJfQorCiAJcHJfZGVidWcoIiVzKCk6ICU0ZC0lMDJkLSUwMmQgJTAyZDolMDJkOiUwMmRcbiIsIF9fRlVOQ1RJT05fXywKIAkJMTkwMCArIHRtLnRtX3llYXIsIHRtLnRtX21vbiwgdG0udG1fbWRheSwKIAkJdG0udG1faG91ciwgdG0udG1fbWluLCB0bS50bV9zZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRldi5jIGIvZHJpdmVycy9ydGMvcnRjLWRldi5jCmluZGV4IDYxYTU4MjUuLjU4Mzc4OWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kZXYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZGV2LmMKQEAgLTI0LDcgKzI0LDcgQEAKIAlpbnQgZXJyOwogCXN0cnVjdCBydGNfZGV2aWNlICpydGMgPSBjb250YWluZXJfb2YoaW5vZGUtPmlfY2RldiwKIAkJCQkJc3RydWN0IHJ0Y19kZXZpY2UsIGNoYXJfZGV2KTsKLQlzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gcnRjLT5vcHM7CisJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcyA9IHJ0Yy0+b3BzOwogCiAJLyogV2Uga2VlcCB0aGUgbG9jayBhcyBsb25nIGFzIHRoZSBkZXZpY2UgaXMgaW4gdXNlCiAJICogYW5kIHJldHVybiBpbW1lZGlhdGVseSBpZiBidXN5CkBAIC0yMDksNyArMjA5LDcgQEAKIAlpbnQgZXJyID0gMDsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHJ0Y19kZXZpY2UgKnJ0YyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KTsKLQlzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gcnRjLT5vcHM7CisJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcyA9IHJ0Yy0+b3BzOwogCXN0cnVjdCBydGNfdGltZSB0bTsKIAlzdHJ1Y3QgcnRjX3drYWxybSBhbGFybTsKIAl2b2lkIF9fdXNlciAqdWFyZyA9ICh2b2lkIF9fdXNlciAqKSBhcmc7CkBAIC00MDYsNyArNDA2LDYgQEAKIAlydGMtPmNoYXJfZGV2Lm93bmVyID0gcnRjLT5vd25lcjsKIAogCWlmIChjZGV2X2FkZCgmcnRjLT5jaGFyX2RldiwgTUtERVYoTUFKT1IocnRjX2RldnQpLCBydGMtPmlkKSwgMSkpIHsKLQkJY2Rldl9kZWwoJnJ0Yy0+Y2hhcl9kZXYpOwogCQlkZXZfZXJyKGNsYXNzX2Rldi0+ZGV2LAogCQkJImZhaWxlZCB0byBhZGQgY2hhciBkZXZpY2UgJWQ6JWRcbiIsCiAJCQlNQUpPUihydGNfZGV2dCksIHJ0Yy0+aWQpOwpAQCAtNDk2LDcgKzQ5NSw3IEBACiAJdW5yZWdpc3Rlcl9jaHJkZXZfcmVnaW9uKHJ0Y19kZXZ0LCBSVENfREVWX01BWCk7CiB9CiAKLW1vZHVsZV9pbml0KHJ0Y19kZXZfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwocnRjX2Rldl9pbml0KTsKIG1vZHVsZV9leGl0KHJ0Y19kZXZfZXhpdCk7CiAKIE1PRFVMRV9BVVRIT1IoIkFsZXNzYW5kcm8gWnVtbW8gPGEuenVtbW9AdG93ZXJ0ZWNoLml0PiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTMwNy5jCmluZGV4IGU4YWZiOTMuLmNjNTAzMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczEzMDcuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxMzA3LmMKQEAgLTE3OCw3ICsxNzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxM3h4X3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgZHMxM3h4X3J0Y19vcHMgPSB7CiAJLnJlYWRfdGltZQk9IGRzMTMwN19nZXRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczEzMDdfc2V0X3RpbWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTU1My5jCmluZGV4IDIwOTAwMTQuLjk2NDcxODggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE1NTMuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNTUzLmMKQEAgLTE4LDcgKzE4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKICNkZWZpbmUgUlRDX1JFR19TSVpFCQkweDIwMDAKICNkZWZpbmUgUlRDX09GRlNFVAkJMHgxZmYwCkBAIC0yNTAsNyArMjUwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTU1M19ydGNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIGRzMTU1M19ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBkczE1NTNfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBkczE1NTNfcnRjX3NldF90aW1lLAogCS5yZWFkX2FsYXJtCT0gZHMxNTUzX3J0Y19yZWFkX2FsYXJtLApAQCAtMzU3LDkgKzM1NywxMyBAQAogCXBkYXRhLT5ydGMgPSBydGM7CiAJcGRhdGEtPmxhc3RfamlmZmllcyA9IGppZmZpZXM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOwotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZkczE1NTNfbnZyYW1fYXR0cik7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTU1M19udnJhbV9hdHRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAlyZXR1cm4gMDsKICBvdXQ6CisJaWYgKHBkYXRhLT5ydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+cnRjKTsKIAlpZiAocGRhdGEtPmlycSA+PSAwKQogCQlmcmVlX2lycShwZGF0YS0+aXJxLCBwZGV2KTsKIAlpZiAoaW9hZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTY3Mi5jCmluZGV4IDliZTgxZmQuLjljNjhlYzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE2NzIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNjcyLmMKQEAgLTE1Niw3ICsxNTYsNyBAQAogfQogc3RhdGljIERFVklDRV9BVFRSKGNvbnRyb2wsIFNfSVJVR08sIHNob3dfY29udHJvbCwgTlVMTCk7CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE2NzJfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxNjcyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxNjcyX3J0Y19zZXRfdGltZSwKIAkuc2V0X21tc3MJPSBkczE2NzJfcnRjX3NldF9tbXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jIGIvZHJpdmVycy9ydGMvcnRjLWRzMTc0Mi5jCmluZGV4IDhlNDdlNWEuLjYyNzNhM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1kczE3NDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtZHMxNzQyLmMKQEAgLTE3LDcgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9pby5oPgogCi0jZGVmaW5lIERSVl9WRVJTSU9OICIwLjEiCisjZGVmaW5lIERSVl9WRVJTSU9OICIwLjIiCiAKICNkZWZpbmUgUlRDX1JFR19TSVpFCQkweDgwMAogI2RlZmluZSBSVENfT0ZGU0VUCQkweDdmOApAQCAtMTE2LDcgKzExNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE3NDJfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBkczE3NDJfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZHMxNzQyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZHMxNzQyX3J0Y19zZXRfdGltZSwKIH07CkBAIC0xOTYsNyArMTk2LDcgQEAKIAkJd3JpdGViKHNlYywgaW9hZGRyICsgUlRDX1NFQ09ORFMpOwogCQl3cml0ZWIoY2VuICYgUlRDX0NFTlRVUllfTUFTSywgaW9hZGRyICsgUlRDX0NPTlRST0wpOwogCX0KLQlpZiAocmVhZGIoaW9hZGRyICsgUlRDX0RBWSkgJiBSVENfQkFUVF9GTEFHKQorCWlmICghKHJlYWRiKGlvYWRkciArIFJUQ19EQVkpICYgUlRDX0JBVFRfRkxBRykpCiAJCWRldl93YXJuKCZwZGV2LT5kZXYsICJ2b2x0YWdlLWxvdyBkZXRlY3RlZC5cbiIpOwogCiAJcnRjID0gcnRjX2RldmljZV9yZWdpc3RlcihwZGV2LT5uYW1lLCAmcGRldi0+ZGV2LApAQCAtMjA4LDkgKzIwOCwxMyBAQAogCXBkYXRhLT5ydGMgPSBydGM7CiAJcGRhdGEtPmxhc3RfamlmZmllcyA9IGppZmZpZXM7CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgcGRhdGEpOwotCXN5c2ZzX2NyZWF0ZV9iaW5fZmlsZSgmcGRldi0+ZGV2LmtvYmosICZkczE3NDJfbnZyYW1fYXR0cik7CisJcmV0ID0gc3lzZnNfY3JlYXRlX2Jpbl9maWxlKCZwZGV2LT5kZXYua29iaiwgJmRzMTc0Ml9udnJhbV9hdHRyKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKIAlyZXR1cm4gMDsKICBvdXQ6CisJaWYgKHBkYXRhLT5ydGMpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihwZGF0YS0+cnRjKTsKIAlpZiAoaW9hZGRyKQogCQlpb3VubWFwKGlvYWRkcik7CiAJaWYgKHBkYXRhLT5iYXNlYWRkcikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYyBiL2RyaXZlcnMvcnRjL3J0Yy1lcDkzeHguYwppbmRleCBlMWExMTY5Li5lZjRmMTQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtZXA5M3h4LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLWVwOTN4eC5jCkBAIC03Myw3ICs3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBlcDkzeHhfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBlcDkzeHhfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gZXA5M3h4X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gZXA5M3h4X3J0Y19zZXRfdGltZSwKIAkuc2V0X21tc3MJPSBlcDkzeHhfcnRjX3NldF9tbXNzLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYyBiL2RyaXZlcnMvcnRjL3J0Yy1pc2wxMjA4LmMKaW5kZXggZjMyNGQwYS4uMWM3NDM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLWlzbDEyMDguYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtaXNsMTIwOC5jCkBAIC0zOTAsNyArMzkwLDcgQEAKIAlyZXR1cm4gaXNsMTIwOF9pMmNfcmVhZF9hbGFybSh0b19pMmNfY2xpZW50KGRldiksIGFsYXJtKTsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIGlzbDEyMDhfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBpc2wxMjA4X3J0Y19vcHMgPSB7CiAJLnByb2MJCT0gaXNsMTIwOF9ydGNfcHJvYywKIAkucmVhZF90aW1lCT0gaXNsMTIwOF9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IGlzbDEyMDhfcnRjX3NldF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLWxpYi5jIGIvZHJpdmVycy9ydGMvcnRjLWxpYi5jCmluZGV4IDk4MTIxMjAuLmJhNzk1YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1saWIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbGliLmMKQEAgLTk0LDEyICs5NCwxMiBAQAogaW50IHJ0Y192YWxpZF90bShzdHJ1Y3QgcnRjX3RpbWUgKnRtKQogewogCWlmICh0bS0+dG1feWVhciA8IDcwCi0JCXx8IHRtLT50bV9tb24gPj0gMTIKKwkJfHwgKCh1bnNpZ25lZCl0bS0+dG1fbW9uKSA+PSAxMgogCQl8fCB0bS0+dG1fbWRheSA8IDEKIAkJfHwgdG0tPnRtX21kYXkgPiBydGNfbW9udGhfZGF5cyh0bS0+dG1fbW9uLCB0bS0+dG1feWVhciArIDE5MDApCi0JCXx8IHRtLT50bV9ob3VyID49IDI0Ci0JCXx8IHRtLT50bV9taW4gPj0gNjAKLQkJfHwgdG0tPnRtX3NlYyA+PSA2MCkKKwkJfHwgKCh1bnNpZ25lZCl0bS0+dG1faG91cikgPj0gMjQKKwkJfHwgKCh1bnNpZ25lZCl0bS0+dG1fbWluKSA+PSA2MAorCQl8fCAoKHVuc2lnbmVkKXRtLT50bV9zZWMpID49IDYwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jIGIvZHJpdmVycy9ydGMvcnRjLW00OHQ4Ni5jCmluZGV4IDhjMGQxYTYuLjhmZjRhMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1tNDh0ODYuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbTQ4dDg2LmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgbTQ4dDg2X3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbTQ4dDg2X3J0Y19vcHMgPSB7CiAJLnJlYWRfdGltZQk9IG00OHQ4Nl9ydGNfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IG00OHQ4Nl9ydGNfc2V0X3RpbWUsCiAJLnByb2MJCT0gbTQ4dDg2X3J0Y19wcm9jLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYyBiL2RyaXZlcnMvcnRjL3J0Yy1tYXg2OTAyLmMKaW5kZXggMmM5NzM5NS4uOWVlZWY5NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLW1heDY5MDIuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtbWF4NjkwMi5jCkBAIC0yMDcsNyArMjA3LDcgQEAKIAlyZXR1cm4gbWF4NjkwMl9zZXRfZGF0ZXRpbWUoZGV2LCB0bSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBtYXg2OTAyX3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgbWF4NjkwMl9ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBtYXg2OTAyX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBtYXg2OTAyX3NldF90aW1lLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGNmODU2My5jCmluZGV4IGJhOWE1ODMuLmE3NjBjZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTYzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1NjMuYwpAQCAtOTUsNyArOTUsNyBAQAogCXRtLT50bV93ZGF5ID0gYnVmW1BDRjg1NjNfUkVHX0RXXSAmIDB4MDc7CiAJdG0tPnRtX21vbiA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX01PXSAmIDB4MUYpIC0gMTsgLyogcnRjIG1uIDEtMTIgKi8KIAl0bS0+dG1feWVhciA9IEJDRDJCSU4oYnVmW1BDRjg1NjNfUkVHX1lSXSkKLQkJKyAoYnVmW1BDRjg1NjNfUkVHX01PXSAmIFBDRjg1NjNfTU9fQyA/IDEwMCA6IDApOworCQkrIChidWZbUENGODU2M19SRUdfTU9dICYgUENGODU2M19NT19DID8gMCA6IDEwMCk7CiAKIAlkZXZfZGJnKCZjbGllbnQtPmRldiwgIiVzOiB0bSBpcyBzZWNzPSVkLCBtaW5zPSVkLCBob3Vycz0lZCwgIgogCQkibWRheT0lZCwgbW9uPSVkLCB5ZWFyPSVkLCB3ZGF5PSVkXG4iLApAQCAtMTM1LDcgKzEzNSw3IEBACiAKIAkvKiB5ZWFyIGFuZCBjZW50dXJ5ICovCiAJYnVmW1BDRjg1NjNfUkVHX1lSXSA9IEJJTjJCQ0QodG0tPnRtX3llYXIgJSAxMDApOwotCWlmICh0bS0+dG1feWVhciAvIDEwMCkKKwlpZiAodG0tPnRtX3llYXIgPCAxMDApCiAJCWJ1ZltQQ0Y4NTYzX1JFR19NT10gfD0gUENGODU2M19NT19DOwogCiAJYnVmW1BDRjg1NjNfUkVHX0RXXSA9IHRtLT50bV93ZGF5ICYgMHgwNzsKQEAgLTIyNyw3ICsyMjcsNyBAQAogCXJldHVybiBwY2Y4NTYzX3NldF9kYXRldGltZSh0b19pMmNfY2xpZW50KGRldiksIHRtKTsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHBjZjg1NjNfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2Y4NTYzX3J0Y19vcHMgPSB7CiAJLnJlYWRfdGltZQk9IHBjZjg1NjNfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSBwY2Y4NTYzX3J0Y19zZXRfdGltZSwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jIGIvZHJpdmVycy9ydGMvcnRjLXBjZjg1ODMuYwppbmRleCBiMjM1YTMwLi41ODc1ZWJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGNmODU4My5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wY2Y4NTgzLmMKQEAgLTI3Myw3ICsyNzMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwY2Y4NTgzX3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGNmODU4M19ydGNfb3BzID0gewogCS5yZWFkX3RpbWUJPSBwY2Y4NTgzX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gcGNmODU4M19ydGNfc2V0X3RpbWUsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXBsMDMxLmMgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwppbmRleCBkNmQxYzU3Li43MzlkMWE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcGwwMzEuYwpAQCAtMTI4LDcgKzEyOCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBwbDAzMV9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgcGwwMzFfb3BzID0gewogCS5vcGVuID0gcGwwMzFfb3BlbiwKIAkucmVsZWFzZSA9IHBsMDMxX3JlbGVhc2UsCiAJLmlvY3RsID0gcGwwMzFfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jIGIvZHJpdmVycy9ydGMvcnRjLXByb2MuYwppbmRleCBjZWY1ZjVhLi5kNTFkOGYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKQEAgLTIzLDcgKzIzLDcgQEAKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBjbGFzc19kZXZpY2UgKmNsYXNzX2RldiA9IHNlcS0+cHJpdmF0ZTsKLQlzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzID0gdG9fcnRjX2RldmljZShjbGFzc19kZXYpLT5vcHM7CisJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcyA9IHRvX3J0Y19kZXZpY2UoY2xhc3NfZGV2KS0+b3BzOwogCXN0cnVjdCBydGNfd2thbHJtIGFscm07CiAJc3RydWN0IHJ0Y190aW1lIHRtOwogCkBAIC02MSw3ICs2MSw3IEBACiAJCQlzZXFfcHJpbnRmKHNlcSwgIiUwMmQtIiwgYWxybS50aW1lLnRtX21vbiArIDEpOwogCQllbHNlCiAJCQlzZXFfcHJpbnRmKHNlcSwgIioqLSIpOwotCQlpZiAoKHVuc2lnbmVkIGludClhbHJtLnRpbWUudG1fbWRheSA8PSAzMSkKKwkJaWYgKGFscm0udGltZS50bV9tZGF5ICYmICh1bnNpZ25lZCBpbnQpYWxybS50aW1lLnRtX21kYXkgPD0gMzEpCiAJCQlzZXFfcHJpbnRmKHNlcSwgIiUwMmRcbiIsIGFscm0udGltZS50bV9tZGF5KTsKIAkJZWxzZQogCQkJc2VxX3ByaW50ZihzZXEsICIqKlxuIik7CkBAIC0xNTYsNyArMTU2LDcgQEAKIAljbGFzc19pbnRlcmZhY2VfdW5yZWdpc3RlcigmcnRjX3Byb2NfaW50ZXJmYWNlKTsKIH0KIAotbW9kdWxlX2luaXQocnRjX3Byb2NfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwocnRjX3Byb2NfaW5pdCk7CiBtb2R1bGVfZXhpdChydGNfcHJvY19leGl0KTsKIAogTU9EVUxFX0FVVEhPUigiQWxlc3NhbmRybyBadW1tbyA8YS56dW1tb0B0b3dlcnRlY2guaXQ+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNDguYwppbmRleCAwOTY0ZDFkLi5mNTBmM2ZjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM0OC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzQ4LmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9zcGkvc3BpLmg+CiAKLSNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMSIKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjAuMiIKIAogI2RlZmluZSBSUzVDMzQ4X1JFR19TRUNTCTAKICNkZWZpbmUgUlM1QzM0OF9SRUdfTUlOUwkxCkBAIC0xNDAsNyArMTQwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHJzNWMzNDhfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyByczVjMzQ4X3J0Y19vcHMgPSB7CiAJLnJlYWRfdGltZQk9IHJzNWMzNDhfcnRjX3JlYWRfdGltZSwKIAkuc2V0X3RpbWUJPSByczVjMzQ4X3J0Y19zZXRfdGltZSwKIH07CkBAIC0xNzUsOCArMTc1LDE1IEBACiAJCWdvdG8ga2ZyZWVfZXhpdDsKIAlpZiAocmV0ICYgKFJTNUMzNDhfQklUX1hTVFAgfCBSUzVDMzQ4X0JJVF9WREVUKSkgewogCQl1OCBidWZbMl07CisJCXN0cnVjdCBydGNfdGltZSB0bTsKIAkJaWYgKHJldCAmIFJTNUMzNDhfQklUX1ZERVQpCiAJCQlkZXZfd2Fybigmc3BpLT5kZXYsICJ2b2x0YWdlLWxvdyBkZXRlY3RlZC5cbiIpOworCQlpZiAocmV0ICYgUlM1QzM0OF9CSVRfWFNUUCkKKwkJCWRldl93YXJuKCZzcGktPmRldiwgIm9zY2lsbGF0b3Itc3RvcCBkZXRlY3RlZC5cbiIpOworCQlydGNfdGltZV90b190bSgwLCAmdG0pOwkvKiAxOTcwLzEvMSAqLworCQlyZXQgPSByczVjMzQ4X3J0Y19zZXRfdGltZSgmc3BpLT5kZXYsICZ0bSk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBrZnJlZV9leGl0OwogCQlidWZbMF0gPSBSUzVDMzQ4X0NNRF9XKFJTNUMzNDhfUkVHX0NUTDIpOwogCQlidWZbMV0gPSAwOwogCQlyZXQgPSBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgYnVmLCBzaXplb2YoYnVmKSwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jIGIvZHJpdmVycy9ydGMvcnRjLXJzNWMzNzIuYwppbmRleCA3NTUzZDc5Li5iYmRhZDA5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtcnM1YzM3Mi5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1yczVjMzcyLmMKQEAgLTE2MCw3ICsxNjAsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgcnM1YzM3Ml9ydGNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHJzNWMzNzJfcnRjX29wcyA9IHsKIAkucHJvYwkJPSByczVjMzcyX3J0Y19wcm9jLAogCS5yZWFkX3RpbWUJPSByczVjMzcyX3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0gcnM1YzM3Ml9ydGNfc2V0X3RpbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtczNjLmMgYi9kcml2ZXJzL3J0Yy9ydGMtczNjLmMKaW5kZXggMmM3ZGU3OS4uNjI1ZGFkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXMzYy5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy1zM2MuYwpAQCAtMzg2LDcgKzM4Niw3IEBACiAJZnJlZV9pcnEoczNjX3J0Y190aWNrbm8sIHJ0Y19kZXYpOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgczNjX3J0Y29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyBzM2NfcnRjb3BzID0gewogCS5vcGVuCQk9IHMzY19ydGNfb3BlbiwKIAkucmVsZWFzZQk9IHMzY19ydGNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gczNjX3J0Y19pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYyBiL2RyaXZlcnMvcnRjL3J0Yy1zYTExMDAuYwppbmRleCBlZTRiNjFlLi40MzljNDFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMtc2ExMTAwLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNhMTEwMC5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHNhMTEwMF9ydGNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHNhMTEwMF9ydGNfb3BzID0gewogCS5vcGVuID0gc2ExMTAwX3J0Y19vcGVuLAogCS5yZWFkX2NhbGxiYWNrID0gc2ExMTAwX3J0Y19yZWFkX2NhbGxiYWNrLAogCS5yZWxlYXNlID0gc2ExMTAwX3J0Y19yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXNoLmMgYi9kcml2ZXJzL3J0Yy9ydGMtc2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmNlMGM4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ydGMvcnRjLXNoLmMKQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiBTdXBlckggT24tQ2hpcCBSVEMgU3VwcG9ydAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiAgUGF1bCBNdW5kdAorICoKKyAqIEJhc2VkIG9uIHRoZSBvbGQgYXJjaC9zaC9rZXJuZWwvY3B1L3J0Yy5jIGJ5OgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDAgIFBoaWxpcHAgUnVtcGYgPHBydW1wZkB0dXgub3JnPgorICogIENvcHlyaWdodCAoQykgMTk5OSAgVGV0c3V5YSBPa2FkYSAmIE5paWJlIFl1dGFrYQorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvYmNkLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmZGVmIENPTkZJR19DUFVfU0gzCisjZGVmaW5lIHJ0Y19yZWdfc2l6ZQkJc2l6ZW9mKHUxNikKKyNkZWZpbmUgUlRDX0JJVF9JTlZFUlRFRAkwCS8qIE5vIGJ1ZyBvbiBTSDc3MDgsIFNINzcwOUEgKi8KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjZGVmaW5lIHJ0Y19yZWdfc2l6ZQkJc2l6ZW9mKHUzMikKKyNkZWZpbmUgUlRDX0JJVF9JTlZFUlRFRAkweDQwCS8qIGJ1ZyBvbiBTSDc3NTAsIFNINzc1MFMgKi8KKyNlbmRpZgorCisjZGVmaW5lIFJUQ19SRUcocikJKChyKSAqIHJ0Y19yZWdfc2l6ZSkKKworI2RlZmluZSBSNjRDTlQgIAlSVENfUkVHKDApCisjZGVmaW5lIFJTRUNDTlQgCVJUQ19SRUcoMSkKKyNkZWZpbmUgUk1JTkNOVCAJUlRDX1JFRygyKQorI2RlZmluZSBSSFJDTlQgIAlSVENfUkVHKDMpCisjZGVmaW5lIFJXS0NOVCAgCVJUQ19SRUcoNCkKKyNkZWZpbmUgUkRBWUNOVCAJUlRDX1JFRyg1KQorI2RlZmluZSBSTU9OQ05UIAlSVENfUkVHKDYpCisjZGVmaW5lIFJZUkNOVCAgCVJUQ19SRUcoNykKKyNkZWZpbmUgUlNFQ0FSICAJUlRDX1JFRyg4KQorI2RlZmluZSBSTUlOQVIgIAlSVENfUkVHKDkpCisjZGVmaW5lIFJIUkFSICAgCVJUQ19SRUcoMTApCisjZGVmaW5lIFJXS0FSICAgCVJUQ19SRUcoMTEpCisjZGVmaW5lIFJEQVlBUiAgCVJUQ19SRUcoMTIpCisjZGVmaW5lIFJNT05BUiAgCVJUQ19SRUcoMTMpCisjZGVmaW5lIFJDUjEgICAgCVJUQ19SRUcoMTQpCisjZGVmaW5lIFJDUjIgICAgCVJUQ19SRUcoMTUpCisKKy8qIFJDUjEgQml0cyAqLworI2RlZmluZSBSQ1IxX0NGCQkweDgwCS8qIENhcnJ5IEZsYWcgICAgICAgICAgICAgKi8KKyNkZWZpbmUgUkNSMV9DSUUJMHgxMAkvKiBDYXJyeSBJbnRlcnJ1cHQgRW5hYmxlICovCisjZGVmaW5lIFJDUjFfQUlFCTB4MDgJLyogQWxhcm0gSW50ZXJydXB0IEVuYWJsZSAqLworI2RlZmluZSBSQ1IxX0FGCQkweDAxCS8qIEFsYXJtIEZsYWcgICAgICAgICAgICAgKi8KKworLyogUkNSMiBCaXRzICovCisjZGVmaW5lIFJDUjJfUEVGCTB4ODAJLyogUEVyaW9kaWMgaW50ZXJydXB0IEZsYWcgKi8KKyNkZWZpbmUgUkNSMl9QRVNNQVNLCTB4NzAJLyogUGVyaW9kaWMgaW50ZXJydXB0IFNldCAgKi8KKyNkZWZpbmUgUkNSMl9SVENFTgkweDA4CS8qIEVOYWJsZSBSVEMgICAgICAgICAgICAgICovCisjZGVmaW5lIFJDUjJfQURKCTB4MDQJLyogQURKdXN0bWVudCAoMzAtc2Vjb25kKSAgKi8KKyNkZWZpbmUgUkNSMl9SRVNFVAkweDAyCS8qIFJlc2V0IGJpdCAgICAgICAgICAgICAgICovCisjZGVmaW5lIFJDUjJfU1RBUlQJMHgwMQkvKiBTdGFydCBiaXQgICAgICAgICAgICAgICAqLworCitzdHJ1Y3Qgc2hfcnRjIHsKKwl2b2lkIF9faW9tZW0gKnJlZ2Jhc2U7CisJdW5zaWduZWQgbG9uZyByZWdzaXplOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCXVuc2lnbmVkIGludCBhbGFybV9pcnEsIHBlcmlvZGljX2lycSwgY2FycnlfaXJxOworCXN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2OworCXNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmlkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gaWQ7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisJdW5zaWduZWQgaW50IHRtcCwgZXZlbnRzID0gMDsKKworCXNwaW5fbG9jaygmcnRjLT5sb2NrKTsKKworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJaWYgKHRtcCAmIFJDUjFfQUYpCisJCWV2ZW50cyB8PSBSVENfQUYgfCBSVENfSVJRRjsKKworCXRtcCAmPSB+KFJDUjFfQ0YgfCBSQ1IxX0FGKTsKKworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJcnRjX3VwZGF0ZV9pcnEoJnJ0Yy0+cnRjX2Rldi0+Y2xhc3NfZGV2LCAxLCBldmVudHMpOworCisJc3Bpbl91bmxvY2soJnJ0Yy0+bG9jayk7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBzaF9ydGNfcGVyaW9kaWMoaW50IGlycSwgdm9pZCAqaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShpZCk7CisKKwlzcGluX2xvY2soJnJ0Yy0+bG9jayk7CisKKwlydGNfdXBkYXRlX2lycSgmcnRjLT5ydGNfZGV2LT5jbGFzc19kZXYsIDEsIFJUQ19QRiB8IFJUQ19JUlFGKTsKKworCXNwaW5fdW5sb2NrKCZydGMtPmxvY2spOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hfcnRjX3NldHBpZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBlbmFibGUpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJdW5zaWduZWQgaW50IHRtcDsKKworCXNwaW5fbG9ja19pcnEoJnJ0Yy0+bG9jayk7CisKKwl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKworCWlmIChlbmFibGUpIHsKKwkJdG1wICY9IH5SQ1IyX1BFU01BU0s7CisJCXRtcCB8PSBSQ1IyX1BFRiB8ICgyIDw8IDQpOworCX0gZWxzZQorCQl0bXAgJj0gfihSQ1IyX1BFU01BU0sgfCBSQ1IyX1BFRik7CisKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNoX3J0Y19zZXRhaWUoc3RydWN0IGRldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgZW5hYmxlKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOworCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlpZiAoZW5hYmxlKQorCQl0bXAgfD0gUkNSMV9BSUU7CisJZWxzZQorCQl0bXAgJj0gflJDUjFfQUlFOworCisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlzcGluX3VubG9ja19pcnEoJnJ0Yy0+bG9jayk7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX29wZW4oc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisJaW50IHJldDsKKworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCXRtcCAmPSB+UkNSMV9DRjsKKwl0bXAgfD0gUkNSMV9DSUU7CisJd3JpdGViKHRtcCwgcnRjLT5yZWdiYXNlICsgUkNSMSk7CisKKwlyZXQgPSByZXF1ZXN0X2lycShydGMtPnBlcmlvZGljX2lycSwgc2hfcnRjX3BlcmlvZGljLCBTQV9JTlRFUlJVUFQsCisJCQkgICJzaC1ydGMgcGVyaW9kIiwgZGV2KTsKKwlpZiAodW5saWtlbHkocmV0KSkgeworCQlkZXZfZXJyKGRldiwgInJlcXVlc3QgcGVyaW9kIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJcmV0LCBydGMtPnBlcmlvZGljX2lycSk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5jYXJyeV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkJCSAgInNoLXJ0YyBjYXJyeSIsIGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJZGV2X2VycihkZXYsICJyZXF1ZXN0IGNhcnJ5IElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJcmV0LCBydGMtPmNhcnJ5X2lycSk7CisJCWZyZWVfaXJxKHJ0Yy0+cGVyaW9kaWNfaXJxLCBkZXYpOworCQlnb3RvIGVycl9iYWRfY2Fycnk7CisJfQorCisJcmV0ID0gcmVxdWVzdF9pcnEocnRjLT5hbGFybV9pcnEsIHNoX3J0Y19pbnRlcnJ1cHQsIFNBX0lOVEVSUlVQVCwKKwkJCSAgInNoLXJ0YyBhbGFybSIsIGRldik7CisJaWYgKHVubGlrZWx5KHJldCkpIHsKKwkJZGV2X2VycihkZXYsICJyZXF1ZXN0IGFsYXJtIElSUSBmYWlsZWQgd2l0aCAlZCwgSVJRICVkXG4iLAorCQkJcmV0LCBydGMtPmFsYXJtX2lycSk7CisJCWdvdG8gZXJyX2JhZF9hbGFybTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX2JhZF9hbGFybToKKwlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgZGV2KTsKK2Vycl9iYWRfY2Fycnk6CisJZnJlZV9pcnEocnRjLT5wZXJpb2RpY19pcnEsIGRldik7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCBzaF9ydGNfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisKKwlzaF9ydGNfc2V0cGllKGRldiwgMCk7CisKKwlmcmVlX2lycShydGMtPnBlcmlvZGljX2lycSwgZGV2KTsKKwlmcmVlX2lycShydGMtPmNhcnJ5X2lycSwgZGV2KTsKKwlmcmVlX2lycShydGMtPmFsYXJtX2lycSwgZGV2KTsKK30KKworc3RhdGljIGludCBzaF9ydGNfcHJvYyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzZXFfZmlsZSAqc2VxKQoreworCXN0cnVjdCBzaF9ydGMgKnJ0YyA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXVuc2lnbmVkIGludCB0bXA7CisKKwl0bXAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKTsKKwlzZXFfcHJpbnRmKHNlcSwgImFsYXJtX0lSUVx0OiAlc1xuIiwKKwkJICAgKHRtcCAmIFJDUjFfQUlFKSA/ICJ5ZXMiIDogIm5vIik7CisJc2VxX3ByaW50ZihzZXEsICJjYXJyeV9JUlFcdDogJXNcbiIsCisJCSAgICh0bXAgJiBSQ1IxX0NJRSkgPyAieWVzIiA6ICJubyIpOworCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CisJc2VxX3ByaW50ZihzZXEsICJwZXJpb2RpY19JUlFcdDogJXNcbiIsCisJCSAgICh0bXAgJiBSQ1IyX1BFRikgPyAieWVzIiA6ICJubyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2hfcnRjX2lvY3RsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJdW5zaWduZWQgaW50IHJldCA9IC1FTk9JT0NUTENNRDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBSVENfUElFX09GRjoKKwljYXNlIFJUQ19QSUVfT046CisJCXNoX3J0Y19zZXRwaWUoZGV2LCBjbWQgPT0gUlRDX1BJRV9PTik7CisJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgUlRDX0FJRV9PRkY6CisJY2FzZSBSVENfQUlFX09OOgorCQlzaF9ydGNfc2V0YWllKGRldiwgY21kID09IFJUQ19BSUVfT04pOworCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNoX3J0Y19yZWFkX3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBpbnQgc2VjMTI4LCBzZWMyLCB5ciwgeXIxMDAsIGNmX2JpdDsKKworCWRvIHsKKwkJdW5zaWduZWQgaW50IHRtcDsKKworCQlzcGluX2xvY2tfaXJxKCZydGMtPmxvY2spOworCisJCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCQl0bXAgJj0gflJDUjFfQ0Y7IC8qIENsZWFyIENGLWJpdCAqLworCQl0bXAgfD0gUkNSMV9DSUU7CisJCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjEpOworCisJCXNlYzEyOCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFI2NENOVCk7CisKKwkJdG0tPnRtX3NlYwk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUlNFQ0NOVCkpOworCQl0bS0+dG1fbWluCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTUlOQ05UKSk7CisJCXRtLT50bV9ob3VyCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSSFJDTlQpKTsKKwkJdG0tPnRtX3dkYXkJPSBCQ0QyQklOKHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCkpOworCQl0bS0+dG1fbWRheQk9IEJDRDJCSU4ocmVhZGIocnRjLT5yZWdiYXNlICsgUkRBWUNOVCkpOworCQl0bS0+dG1fbW9uCT0gQkNEMkJJTihyZWFkYihydGMtPnJlZ2Jhc2UgKyBSTU9OQ05UKSk7CisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQorCQl5ciAgPSByZWFkdyhydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOworCQl5cjEwMCA9IEJDRDJCSU4oeXIgPj4gOCk7CisJCXlyICY9IDB4ZmY7CisjZWxzZQorCQl5ciAgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSWVJDTlQpOworCQl5cjEwMCA9IEJDRDJCSU4oKHlyID09IDB4OTkpID8gMHgxOSA6IDB4MjApOworI2VuZGlmCisKKwkJdG0tPnRtX3llYXIgPSAoeXIxMDAgKiAxMDAgKyBCQ0QyQklOKHlyKSkgLSAxOTAwOworCisJCXNlYzIgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSNjRDTlQpOworCQljZl9iaXQgPSByZWFkYihydGMtPnJlZ2Jhc2UgKyBSQ1IxKSAmIFJDUjFfQ0Y7CisKKwkJc3Bpbl91bmxvY2tfaXJxKCZydGMtPmxvY2spOworCX0gd2hpbGUgKGNmX2JpdCAhPSAwIHx8ICgoc2VjMTI4IF4gc2VjMikgJiBSVENfQklUX0lOVkVSVEVEKSAhPSAwKTsKKworI2lmIFJUQ19CSVRfSU5WRVJURUQgIT0gMAorCWlmICgoc2VjMTI4ICYgUlRDX0JJVF9JTlZFUlRFRCkpCisJCXRtLT50bV9zZWMtLTsKKyNlbmRpZgorCisJZGV2X2RiZygmZGV2LCAiJXM6IHRtIGlzIHNlY3M9JWQsIG1pbnM9JWQsIGhvdXJzPSVkLCAiCisJCSJtZGF5PSVkLCBtb249JWQsIHllYXI9JWQsIHdkYXk9JWRcbiIsCisJCV9fRlVOQ1RJT05fXywKKwkJdG0tPnRtX3NlYywgdG0tPnRtX21pbiwgdG0tPnRtX2hvdXIsCisJCXRtLT50bV9tZGF5LCB0bS0+dG1fbW9uLCB0bS0+dG1feWVhciwgdG0tPnRtX3dkYXkpOworCisJaWYgKHJ0Y192YWxpZF90bSh0bSkgPCAwKQorCQlkZXZfZXJyKGRldiwgImludmFsaWQgZGF0ZVxuIik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzaF9ydGNfc2V0X3RpbWUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcnRjX3RpbWUgKnRtKQoreworCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsKKwlzdHJ1Y3Qgc2hfcnRjICpydGMgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCB5ZWFyOworCisJc3Bpbl9sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCS8qIFJlc2V0IHByZS1zY2FsZXIgJiBzdG9wIFJUQyAqLworCXRtcCA9IHJlYWRiKHJ0Yy0+cmVnYmFzZSArIFJDUjIpOworCXRtcCB8PSBSQ1IyX1JFU0VUOworCXdyaXRlYih0bXAsIHJ0Yy0+cmVnYmFzZSArIFJDUjIpOworCisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX3NlYyksICBydGMtPnJlZ2Jhc2UgKyBSU0VDQ05UKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbWluKSwgIHJ0Yy0+cmVnYmFzZSArIFJNSU5DTlQpOworCXdyaXRlYihCSU4yQkNEKHRtLT50bV9ob3VyKSwgcnRjLT5yZWdiYXNlICsgUkhSQ05UKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fd2RheSksIHJ0Yy0+cmVnYmFzZSArIFJXS0NOVCk7CisJd3JpdGViKEJJTjJCQ0QodG0tPnRtX21kYXkpLCBydGMtPnJlZ2Jhc2UgKyBSREFZQ05UKTsKKwl3cml0ZWIoQklOMkJDRCh0bS0+dG1fbW9uKSwgIHJ0Yy0+cmVnYmFzZSArIFJNT05DTlQpOworCisjaWZkZWYgQ09ORklHX0NQVV9TSDMKKwl5ZWFyID0gdG0tPnRtX3llYXIgJSAxMDA7CisJd3JpdGViKEJJTjJCQ0QoeWVhciksIHJ0Yy0+cmVnYmFzZSArIFJZUkNOVCk7CisjZWxzZQorCXllYXIgPSAoQklOMkJDRCgodG0tPnRtX3llYXIgKyAxOTAwKSAvIDEwMCkgPDwgOCkgfAorCQlCSU4yQkNEKHRtLT50bV95ZWFyICUgMTAwKTsKKwl3cml0ZXcoeWVhciwgcnRjLT5yZWdiYXNlICsgUllSQ05UKTsKKyNlbmRpZgorCisJLyogU3RhcnQgUlRDICovCisJdG1wID0gcmVhZGIocnRjLT5yZWdiYXNlICsgUkNSMik7CisJdG1wICY9IH5SQ1IyX1JFU0VUOworCXRtcCB8PSBSQ1IyX1JUQ0VOIHwgUkNSMl9TVEFSVDsKKwl3cml0ZWIodG1wLCBydGMtPnJlZ2Jhc2UgKyBSQ1IyKTsKKworCXNwaW5fdW5sb2NrX2lycSgmcnRjLT5sb2NrKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgc2hfcnRjX29wcyA9IHsKKwkub3BlbgkJPSBzaF9ydGNfb3BlbiwKKwkucmVsZWFzZQk9IHNoX3J0Y19yZWxlYXNlLAorCS5pb2N0bAkJPSBzaF9ydGNfaW9jdGwsCisJLnJlYWRfdGltZQk9IHNoX3J0Y19yZWFkX3RpbWUsCisJLnNldF90aW1lCT0gc2hfcnRjX3NldF90aW1lLAorCS5wcm9jCQk9IHNoX3J0Y19wcm9jLAorfTsKKworc3RhdGljIGludCBfX2RldmluaXQgc2hfcnRjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjOworCXN0cnVjdCByZXNvdXJjZSAqcmVzOworCWludCByZXQgPSAtRU5PRU5UOworCisJcnRjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNoX3J0YyksIEdGUF9LRVJORUwpOworCWlmICh1bmxpa2VseSghcnRjKSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzcGluX2xvY2tfaW5pdCgmcnRjLT5sb2NrKTsKKworCXJ0Yy0+cGVyaW9kaWNfaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsKKwlpZiAodW5saWtlbHkocnRjLT5wZXJpb2RpY19pcnEgPCAwKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJUlEgZm9yIHBlcmlvZFxuIik7CisJCWdvdG8gZXJyX2JhZHJlczsKKwl9CisKKwlydGMtPmNhcnJ5X2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMSk7CisJaWYgKHVubGlrZWx5KHJ0Yy0+Y2FycnlfaXJxIDwgMCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBjYXJyeVxuIik7CisJCWdvdG8gZXJyX2JhZHJlczsKKwl9CisKKwlydGMtPmFsYXJtX2lycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMik7CisJaWYgKHVubGlrZWx5KHJ0Yy0+YWxhcm1faXJxIDwgMCkpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiTm8gSVJRIGZvciBhbGFybVxuIik7CisJCWdvdG8gZXJyX2JhZHJlczsKKwl9CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9JTywgMCk7CisJaWYgKHVubGlrZWx5KHJlcyA9PSBOVUxMKSkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBJTyByZXNvdXJjZVxuIik7CisJCWdvdG8gZXJyX2JhZHJlczsKKwl9CisKKwlydGMtPnJlZ3NpemUgPSByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxOworCisJcnRjLT5yZXMgPSByZXF1ZXN0X21lbV9yZWdpb24ocmVzLT5zdGFydCwgcnRjLT5yZWdzaXplLCBwZGV2LT5uYW1lKTsKKwlpZiAodW5saWtlbHkoIXJ0Yy0+cmVzKSkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZXJyX2JhZHJlczsKKwl9CisKKwlydGMtPnJlZ2Jhc2UgPSAodm9pZCBfX2lvbWVtICopcnRjLT5yZXMtPnN0YXJ0OworCWlmICh1bmxpa2VseSghcnRjLT5yZWdiYXNlKSkgeworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycl9iYWRtYXA7CisJfQorCisJcnRjLT5ydGNfZGV2ID0gcnRjX2RldmljZV9yZWdpc3Rlcigic2giLCAmcGRldi0+ZGV2LAorCQkJCQkgICAmc2hfcnRjX29wcywgVEhJU19NT0RVTEUpOworCWlmIChJU19FUlIocnRjKSkgeworCQlyZXQgPSBQVFJfRVJSKHJ0Yy0+cnRjX2Rldik7CisJCWdvdG8gZXJyX2JhZG1hcDsKKwl9CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBydGMpOworCisJcmV0dXJuIDA7CisKK2Vycl9iYWRtYXA6CisJcmVsZWFzZV9yZXNvdXJjZShydGMtPnJlcyk7CitlcnJfYmFkcmVzOgorCWtmcmVlKHJ0Yyk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzaF9ydGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHNoX3J0YyAqcnRjID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisKKwlpZiAobGlrZWx5KHJ0Yy0+cnRjX2RldikpCisJCXJ0Y19kZXZpY2VfdW5yZWdpc3RlcihydGMtPnJ0Y19kZXYpOworCisJc2hfcnRjX3NldHBpZSgmcGRldi0+ZGV2LCAwKTsKKwlzaF9ydGNfc2V0YWllKCZwZGV2LT5kZXYsIDApOworCisJcmVsZWFzZV9yZXNvdXJjZShydGMtPnJlcyk7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCWtmcmVlKHJ0Yyk7CisKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIHNoX3J0Y19wbGF0Zm9ybV9kcml2ZXIgPSB7CisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoLXJ0YyIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCisJLnByb2JlCQk9IHNoX3J0Y19wcm9iZSwKKwkucmVtb3ZlCQk9IF9fZGV2ZXhpdF9wKHNoX3J0Y19yZW1vdmUpLAorfTsKKworc3RhdGljIGludCBfX2luaXQgc2hfcnRjX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gcGxhdGZvcm1fZHJpdmVyX3JlZ2lzdGVyKCZzaF9ydGNfcGxhdGZvcm1fZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHNoX3J0Y19leGl0KHZvaWQpCit7CisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNoX3J0Y19wbGF0Zm9ybV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChzaF9ydGNfaW5pdCk7Cittb2R1bGVfZXhpdChzaF9ydGNfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiU3VwZXJIIG9uLWNoaXAgUlRDIGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiUGF1bCBNdW5kdCA8bGV0aGFsQGxpbnV4LXNoLm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy1zeXNmcy5jIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKaW5kZXggN2MxZjNkMi4uNmY4MzcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXN5c2ZzLmMKQEAgLTExNiw3ICsxMTYsNyBAQAogCWNsYXNzX2ludGVyZmFjZV91bnJlZ2lzdGVyKCZydGNfc3lzZnNfaW50ZXJmYWNlKTsKIH0KIAotbW9kdWxlX2luaXQocnRjX3N5c2ZzX2luaXQpOworc3Vic3lzX2luaXQocnRjX3N5c2ZzX2luaXQpOwogbW9kdWxlX2V4aXQocnRjX3N5c2ZzX2V4aXQpOwogCiBNT0RVTEVfQVVUSE9SKCJBbGVzc2FuZHJvIFp1bW1vIDxhLnp1bW1vQHRvd2VydGVjaC5pdD4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdGVzdC5jCmluZGV4IGUxZmE1ZmUuLmJjNGJkMjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy10ZXN0LmMKKysrIGIvZHJpdmVycy9ydGMvcnRjLXRlc3QuYwpAQCAtNzUsNyArNzUsNyBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHRlc3RfcnRjX29wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyB0ZXN0X3J0Y19vcHMgPSB7CiAJLnByb2MgPSB0ZXN0X3J0Y19wcm9jLAogCS5yZWFkX3RpbWUgPSB0ZXN0X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lID0gdGVzdF9ydGNfc2V0X3RpbWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdjMwMjAuYyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCmluZGV4IGE0MGY0MDAuLjA5YjcxNGYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12MzAyMC5jCkBAIC0xNDksNyArMTQ5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydGNfY2xhc3Nfb3BzIHYzMDIwX3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgdjMwMjBfcnRjX29wcyA9IHsKIAkucmVhZF90aW1lCT0gdjMwMjBfcmVhZF90aW1lLAogCS5zZXRfdGltZQk9IHYzMDIwX3NldF90aW1lLAogfTsKQEAgLTE2OSw5ICsxNjksNiBAQAogCWlmIChwZGV2LT5yZXNvdXJjZVswXS5mbGFncyAhPSBJT1JFU09VUkNFX01FTSkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCWlmIChwZGV2ID09IE5VTEwpCi0JCXJldHVybiAtRUJVU1k7Ci0KIAljaGlwID0ga3phbGxvYyhzaXplb2YgKmNoaXAsIEdGUF9LRVJORUwpOwogCWlmICghY2hpcCkKIAkJcmV0dXJuIC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMgYi9kcml2ZXJzL3J0Yy9ydGMtdnI0MXh4LmMKaW5kZXggNTk2NzY0Zi4uNThlNWVkMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXZyNDF4eC5jCisrKyBiL2RyaXZlcnMvcnRjL3J0Yy12cjQxeHguYwpAQCAtMjk2LDcgKzI5Niw3IEBACiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0Y19jbGFzc19vcHMgdnI0MXh4X3J0Y19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgdnI0MXh4X3J0Y19vcHMgPSB7CiAJLnJlbGVhc2UJPSB2cjQxeHhfcnRjX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZyNDF4eF9ydGNfaW9jdGwsCiAJLnJlYWRfdGltZQk9IHZyNDF4eF9ydGNfcmVhZF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXgxMjA1LmMgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwppbmRleCA3ODhiNmQxLi41MjJjNjk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMteDEyMDUuYwpAQCAtNDYwLDcgKzQ2MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcnRjX2NsYXNzX29wcyB4MTIwNV9ydGNfb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBydGNfY2xhc3Nfb3BzIHgxMjA1X3J0Y19vcHMgPSB7CiAJLnByb2MJCT0geDEyMDVfcnRjX3Byb2MsCiAJLnJlYWRfdGltZQk9IHgxMjA1X3J0Y19yZWFkX3RpbWUsCiAJLnNldF90aW1lCT0geDEyMDVfcnRjX3NldF90aW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL0tjb25maWcgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwppbmRleCA5MjlkNmZmLi5iMjUwYzUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svS2NvbmZpZwpAQCAtMSw0ICsxLDQgQEAKLWlmIFMzOTAKK2lmIFMzOTAgJiYgQkxPQ0sKIAogY29tbWVudCAiUy8zOTAgYmxvY2sgZGV2aWNlIGRyaXZlcnMiCiAJZGVwZW5kcyBvbiBTMzkwCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9kaWFnLmMKaW5kZXggMjNmYTBiMi4uMjIyYThhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZGlhZy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2RpYWcuYwpAQCAtNjMsNDQgKzYzLDI2IEBACiAgKiBhbmQgZnVuY3Rpb24gY29kZSBjbWQuCiAgKiBJbiBjYXNlIG9mIGFuIGV4Y2VwdGlvbiByZXR1cm4gMy4gT3RoZXJ3aXNlIHJldHVybiByZXN1bHQgb2YgYml0d2lzZSBPUiBvZgogICogcmVzdWx0aW5nIGNvbmRpdGlvbiBjb2RlIGFuZCBESUFHIHJldHVybiBjb2RlLiAqLwotc3RhdGljIF9faW5saW5lX18gaW50Ci1kaWEyNTAodm9pZCAqaW9iLCBpbnQgY21kKQorc3RhdGljIGlubGluZSBpbnQgZGlhMjUwKHZvaWQgKmlvYiwgaW50IGNtZCkKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gKHVuc2lnbmVkIGxvbmcpIGlvYjsKIAl0eXBlZGVmIHVuaW9uIHsKIAkJc3RydWN0IGRhc2RfZGlhZ19pbml0X2lvIGluaXRfaW87CiAJCXN0cnVjdCBkYXNkX2RpYWdfcndfaW8gcndfaW87CiAJfSBhZGRyX3R5cGU7CiAJaW50IHJjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JCSIJbGdoaQklMCwzXG4iCi0JCSIJbGdyCTAsJTNcbiIKKwlyYyA9IDM7CisJYXNtIHZvbGF0aWxlKAogCQkiCWRpYWcJMCwlMiwweDI1MFxuIgogCQkiMDoJaXBtCSUwXG4iCiAJCSIJc3JsCSUwLDI4XG4iCiAJCSIJb3IJJTAsMVxuIgogCQkiMTpcbiIKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIgkuYWxpZ24gOFxuIgotCQkiCS5xdWFkICAwYiwxYlxuIgotCQkiLnByZXZpb3VzXG4iCi0jZWxzZQotCQkiCWxoaQklMCwzXG4iCi0JCSIJbHIJMCwlM1xuIgotCQkiCWRpYWcJMCwlMiwweDI1MFxuIgotCQkiMDoJaXBtCSUwXG4iCi0JCSIJc3JsCSUwLDI4XG4iCi0JCSIJb3IJJTAsMVxuIgotCQkiMTpcbiIKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIgkuYWxpZ24gNFxuIgotCQkiCS5sb25nIDBiLDFiXG4iCi0JCSIucHJldmlvdXNcbiIKLSNlbmRpZgotCQk6ICI9JmQiIChyYyksICI9bSIgKCooYWRkcl90eXBlICopIGlvYikKLQkJOiAiZCIgKGNtZCksICJkIiAoaW9iKSwgIm0iICgqKGFkZHJfdHlwZSAqKSBpb2IpCi0JCTogIjAiLCAiMSIsICJjYyIpOworCQlFWF9UQUJMRSgwYiwxYikKKwkJOiAiK2QiIChyYyksICI9bSIgKCooYWRkcl90eXBlICopIGlvYikKKwkJOiAiZCIgKGNtZCksICJkIiAocmVnMCksICJtIiAoKihhZGRyX3R5cGUgKikgaW9iKQorCQk6ICIxIiwgImNjIik7CiAJcmV0dXJuIHJjOwogfQogCkBAIC01NDcsNyArNTI5LDcgQEAKIAl9CiAJY3FyLT5yZXRyaWVzID0gRElBR19NQVhfUkVUUklFUzsKIAljcXItPmJ1aWxkY2xrID0gZ2V0X2Nsb2NrKCk7Ci0JaWYgKHJlcS0+ZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisJaWYgKHJlcS0+Y21kX2ZsYWdzICYgUkVRX0ZBSUxGQVNUKQogCQlzZXRfYml0KERBU0RfQ1FSX0ZMQUdTX0ZBSUxGQVNULCAmY3FyLT5mbGFncyk7CiAJY3FyLT5kZXZpY2UgPSBkZXZpY2U7CiAJY3FyLT5leHBpcmVzID0gRElBR19USU1FT1VUOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZWNrZC5jCmluZGV4IGI3YTdmYWMuLjVlY2VhM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2Vja2QuYworKysgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9lY2tkLmMKQEAgLTEyNjYsNyArMTI2Niw3IEBACiAJCQlyZWNpZCsrOwogCQl9CiAJfQotCWlmIChyZXEtPmZsYWdzICYgUkVRX0ZBSUxGQVNUKQorCWlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9GQUlMRkFTVCkKIAkJc2V0X2JpdChEQVNEX0NRUl9GTEFHU19GQUlMRkFTVCwgJmNxci0+ZmxhZ3MpOwogCWNxci0+ZGV2aWNlID0gZGV2aWNlOwogCWNxci0+ZXhwaXJlcyA9IDUgKiA2MCAqIEhaOwkvKiA1IG1pbnV0ZXMgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX2ZiYS5jIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKaW5kZXggZTg1MDE1Yi4uODA5MjZjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKKysrIGIvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfZmJhLmMKQEAgLTM0NCw3ICszNDQsNyBAQAogCQkJcmVjaWQrKzsKIAkJfQogCX0KLQlpZiAocmVxLT5mbGFncyAmIFJFUV9GQUlMRkFTVCkKKwlpZiAocmVxLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCiAJCXNldF9iaXQoREFTRF9DUVJfRkxBR1NfRkFJTEZBU1QsICZjcXItPmZsYWdzKTsKIAljcXItPmRldmljZSA9IGRldmljZTsKIAljcXItPmV4cGlyZXMgPSA1ICogNjAgKiBIWjsJLyogNSBtaW51dGVzICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2sveHByYW0uYyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCmluZGV4IGNhYjJjNzMuLmEwNGQ5MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay94cHJhbS5jCkBAIC04OSwyOCArODksMTUgQEAKICAqLwogc3RhdGljIGludCB4cHJhbV9wYWdlX2luICh1bnNpZ25lZCBsb25nIHBhZ2VfYWRkciwgdW5zaWduZWQgaW50IHhwYWdlX2luZGV4KQogewotCWludCBjYzsKKwlpbnQgY2MgPSAyOwkvKiByZXR1cm4gdW51c2VkIGNjIDIgaWYgcGdpbiB0cmFwcyAqLwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgbGhpICAgJTAsMlxuIiAgLyogcmV0dXJuIHVudXNlZCBjYyAyIGlmIHBnaW4gdHJhcHMgKi8KLQkJIiAgIC5pbnNuIHJyZSwweGIyMmUwMDAwLCUxLCUyXG4iICAvKiBwZ2luICUxLCUyICovCi0gICAgICAgICAgICAgICAgIjA6IGlwbSAgICUwXG4iCi0JCSIgICBzcmwgICAlMCwyOFxuIgorCWFzbSB2b2xhdGlsZSgKKwkJIgkuaW5zbglycmUsMHhiMjJlMDAwMCwlMSwlMlxuIiAgLyogcGdpbiAlMSwlMiAqLworCQkiMDoJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCiAJCSIxOlxuIgotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIiAgIC5hbGlnbiA0XG4iCi0JCSIgICAubG9uZyAgMGIsMWJcbiIKLQkJIi5wcmV2aW91cyIKLSNlbHNlCi0gICAgICAgICAgICAgICAgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLSAgICAgICAgICAgICAgICAiICAgLmFsaWduIDhcbiIKLSAgICAgICAgICAgICAgICAiICAgLnF1YWQgMGIsMWJcbiIKLSAgICAgICAgICAgICAgICAiLnByZXZpb3VzIgotI2VuZGlmCi0JCTogIj0mZCIgKGNjKSAKLQkJOiAiYSIgKF9fcGEocGFnZV9hZGRyKSksICJhIiAoeHBhZ2VfaW5kZXgpIAotCQk6ICJjYyIgKTsKKwkJRVhfVEFCTEUoMGIsMWIpCisJCTogIitkIiAoY2MpIDogImEiIChfX3BhKHBhZ2VfYWRkcikpLCAiZCIgKHhwYWdlX2luZGV4KSA6ICJjYyIpOwogCWlmIChjYyA9PSAzKQogCQlyZXR1cm4gLUVOWElPOwogCWlmIChjYyA9PSAyKSB7CkBAIC0xMzcsMjggKzEyNCwxNSBAQAogICovCiBzdGF0aWMgbG9uZyB4cHJhbV9wYWdlX291dCAodW5zaWduZWQgbG9uZyBwYWdlX2FkZHIsIHVuc2lnbmVkIGludCB4cGFnZV9pbmRleCkKIHsKLQlpbnQgY2M7CisJaW50IGNjID0gMjsJLyogcmV0dXJuIHVudXNlZCBjYyAyIGlmIHBnaW4gdHJhcHMgKi8KIAotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgIGxoaSAgICUwLDJcbiIgIC8qIHJldHVybiB1bnVzZWQgY2MgMiBpZiBwZ291dCB0cmFwcyAqLwotCQkiICAgLmluc24gcnJlLDB4YjIyZjAwMDAsJTEsJTJcbiIgIC8qIHBnb3V0ICUxLCUyICovCi0gICAgICAgICAgICAgICAgIjA6IGlwbSAgICUwXG4iCi0JCSIgICBzcmwgICAlMCwyOFxuIgorCWFzbSB2b2xhdGlsZSgKKwkJIgkuaW5zbglycmUsMHhiMjJmMDAwMCwlMSwlMlxuIiAgLyogcGdvdXQgJTEsJTIgKi8KKwkJIjA6CWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgogCQkiMTpcbiIKLSNpZm5kZWYgQ09ORklHXzY0QklUCi0JCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCSIgICAuYWxpZ24gNFxuIgotCQkiICAgLmxvbmcgIDBiLDFiXG4iCi0JCSIucHJldmlvdXMiCi0jZWxzZQotICAgICAgICAgICAgICAgICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0gICAgICAgICAgICAgICAgIiAgIC5hbGlnbiA4XG4iCi0gICAgICAgICAgICAgICAgIiAgIC5xdWFkIDBiLDFiXG4iCi0gICAgICAgICAgICAgICAgIi5wcmV2aW91cyIKLSNlbmRpZgotCQk6ICI9JmQiIChjYykgCi0JCTogImEiIChfX3BhKHBhZ2VfYWRkcikpLCAiYSIgKHhwYWdlX2luZGV4KSAKLQkJOiAiY2MiICk7CisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICIrZCIgKGNjKSA6ICJhIiAoX19wYShwYWdlX2FkZHIpKSwgImQiICh4cGFnZV9pbmRleCkgOiAiY2MiKTsKIAlpZiAoY2MgPT0gMykKIAkJcmV0dXJuIC1FTlhJTzsKIAlpZiAoY2MgPT0gMikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2NoYXIvZnMzMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYwppbmRleCBlZjAwNGQwLi5iNDU1N2ZhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYworKysgYi9kcml2ZXJzL3MzOTAvY2hhci9mczMyNzAuYwpAQCAtMTcsNyArMTcsNiBAQAogCiAjaW5jbHVkZSA8YXNtL2Njd2Rldi5oPgogI2luY2x1ZGUgPGFzbS9jaW8uaD4KLSNpbmNsdWRlIDxhc20vY3BjbWQuaD4KICNpbmNsdWRlIDxhc20vZWJjZGljLmg+CiAjaW5jbHVkZSA8YXNtL2lkYWxzLmg+CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwppbmRleCA5ODVkMTYxLi4zMWUzMzU3NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvc2NscC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3NjbHAuYwpAQCAtMTAwLDEzICsxMDAsMTIgQEAKIHsKIAlpbnQgY2M7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgIC5pbnNuIHJyZSwweGIyMjAwMDAwLCUxLCUyXG4iICAvKiBzZXJ2YyAlMSwlMiAqLwotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9JmQiIChjYykKLQkJOiAiZCIgKGNvbW1hbmQpLCAiYSIgKF9fcGEoc2NjYikpCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJLmluc24JcnJlLDB4YjIyMDAwMDAsJTEsJTJcbiIgIC8qIHNlcnZjICUxLCUyICovCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4IgorCQk6ICI9JmQiIChjYykgOiAiZCIgKGNvbW1hbmQpLCAiYSIgKF9fcGEoc2NjYikpCisJCTogImNjIiwgIm1lbW9yeSIpOwogCWlmIChjYyA9PSAzKQogCQlyZXR1cm4gLUVJTzsKIAlpZiAoY2MgPT0gMikKQEAgLTM2MCwxNiArMzU5LDYgQEAKIAlzY2xwX3Byb2Nlc3NfcXVldWUoKTsKIH0KIAotLyogUmV0dXJuIGN1cnJlbnQgVGltZS1PZi1EYXkgY2xvY2suICovCi1zdGF0aWMgaW5saW5lIHU2NAotc2NscF9nZXRfY2xvY2sodm9pZCkKLXsKLQl1NjQgcmVzdWx0OwotCi0JYXNtIHZvbGF0aWxlICgiU1RDSyAwKCUxKSIgOiAiPW0iIChyZXN1bHQpIDogImEiICgmKHJlc3VsdCkpIDogImNjIik7Ci0JcmV0dXJuIHJlc3VsdDsKLX0KLQogLyogQ29udmVydCBpbnRlcnZhbCBpbiBqaWZmaWVzIHRvIFRPRCB0aWNrcy4gKi8KIHN0YXRpYyBpbmxpbmUgdTY0CiBzY2xwX3RvZF9mcm9tX2ppZmZpZXModW5zaWduZWQgbG9uZyBqaWZmaWVzKQpAQCAtMzgyLDcgKzM3MSw2IEBACiB2b2lkCiBzY2xwX3N5bmNfd2FpdCh2b2lkKQogewotCXVuc2lnbmVkIGxvbmcgcHN3X21hc2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBsb25nIGNyMCwgY3IwX3N5bmM7CiAJdTY0IHRpbWVvdXQ7CkBAIC0zOTIsNyArMzgwLDcgQEAKIAl0aW1lb3V0ID0gMDsKIAlpZiAodGltZXJfcGVuZGluZygmc2NscF9yZXF1ZXN0X3RpbWVyKSkgewogCQkvKiBHZXQgdGltZW91dCBUT0QgdmFsdWUgKi8KLQkJdGltZW91dCA9IHNjbHBfZ2V0X2Nsb2NrKCkgKworCQl0aW1lb3V0ID0gZ2V0X2Nsb2NrKCkgKwogCQkJICBzY2xwX3RvZF9mcm9tX2ppZmZpZXMoc2NscF9yZXF1ZXN0X3RpbWVyLmV4cGlyZXMgLQogCQkJCQkJamlmZmllcyk7CiAJfQpAQCAtNDA2LDEzICszOTQsMTIgQEAKIAljcjBfc3luYyB8PSAweDAwMDAwMjAwOwogCWNyMF9zeW5jICY9IDB4RkZGRkYzQUM7CiAJX19jdGxfbG9hZChjcjBfc3luYywgMCwgMCk7Ci0JYXNtIHZvbGF0aWxlICgiU1RPU00gMCglMSksMHgwMSIKLQkJICAgICAgOiAiPW0iIChwc3dfbWFzaykgOiAiYSIgKCZwc3dfbWFzaykgOiAibWVtb3J5Iik7CisJX19yYXdfbG9jYWxfaXJxX3N0b3NtKDB4MDEpOwogCS8qIExvb3AgdW50aWwgZHJpdmVyIHN0YXRlIGluZGljYXRlcyBmaW5pc2hlZCByZXF1ZXN0ICovCiAJd2hpbGUgKHNjbHBfcnVubmluZ19zdGF0ZSAhPSBzY2xwX3J1bm5pbmdfc3RhdGVfaWRsZSkgewogCQkvKiBDaGVjayBmb3IgZXhwaXJlZCByZXF1ZXN0IHRpbWVyICovCiAJCWlmICh0aW1lcl9wZW5kaW5nKCZzY2xwX3JlcXVlc3RfdGltZXIpICYmCi0JCSAgICBzY2xwX2dldF9jbG9jaygpID4gdGltZW91dCAmJgorCQkgICAgZ2V0X2Nsb2NrKCkgPiB0aW1lb3V0ICYmCiAJCSAgICBkZWxfdGltZXIoJnNjbHBfcmVxdWVzdF90aW1lcikpCiAJCQlzY2xwX3JlcXVlc3RfdGltZXIuZnVuY3Rpb24oc2NscF9yZXF1ZXN0X3RpbWVyLmRhdGEpOwogCQliYXJyaWVyKCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMgYi9kcml2ZXJzL3MzOTAvY2hhci90dHkzMjcwLmMKaW5kZXggMjk3MTgwNC4uMDZlMmVlZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdHR5MzI3MC5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3R0eTMyNzAuYwpAQCAtNjk4LDcgKzY5OCw2IEBACiAJaWYgKCF0cC0+ZnJlZW1lbV9wYWdlcykKIAkJZ290byBvdXRfdHA7CiAJSU5JVF9MSVNUX0hFQUQoJnRwLT5mcmVlbWVtKTsKLQlpbml0X3RpbWVyKCZ0cC0+dGltZXIpOwogCWZvciAocGFnZXMgPSAwOyBwYWdlcyA8IFRUWTMyNzBfU1RSSU5HX1BBR0VTOyBwYWdlcysrKSB7CiAJCXRwLT5mcmVlbWVtX3BhZ2VzW3BhZ2VzXSA9ICh2b2lkICopCiAJCQlfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUx8R0ZQX0RNQSwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvY2hhci92bXdhdGNoZG9nLmMgYi9kcml2ZXJzL3MzOTAvY2hhci92bXdhdGNoZG9nLmMKaW5kZXggODA3MzIwYS4uNGI4NjhmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2NoYXIvdm13YXRjaGRvZy5jCisrKyBiL2RyaXZlcnMvczM5MC9jaGFyL3Ztd2F0Y2hkb2cuYwpAQCAtNTQsNDggKzU0LDIwIEBACiBzdGF0aWMgaW50IF9fZGlhZzI4OChlbnVtIHZtd2R0X2Z1bmMgZnVuYywgdW5zaWduZWQgaW50IHRpbWVvdXQsCiAJCQkgICAgY2hhciAqY21kLCBzaXplX3QgbGVuKQogewotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19mdW5jIGFzbSgiMiIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX190aW1lb3V0IGFzbSgiMyIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19jbWRwIGFzbSgiNCIpOwotCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19jbWRsIGFzbSgiNSIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX19mdW5jIGFzbSgiMiIpID0gZnVuYzsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdGltZW91dCBhc20oIjMiKSA9IHRpbWVvdXQ7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2NtZHAgYXNtKCI0IikgPSB2aXJ0X3RvX3BoeXMoY21kKTsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fY21kbCBhc20oIjUiKSA9IGxlbjsKIAlpbnQgZXJyOwogCi0JX19mdW5jID0gZnVuYzsKLQlfX3RpbWVvdXQgPSB0aW1lb3V0OwotCV9fY21kcCA9IHZpcnRfdG9fcGh5cyhjbWQpOwotCV9fY21kbCA9IGxlbjsKLQllcnIgPSAwOwotCWFzbSB2b2xhdGlsZSAoCi0jaWZkZWYgQ09ORklHXzY0QklUCi0JCSAgICAgICAiZGlhZyAlMiwlNCwweDI4OFxuIgotCQkiMToJXG4iCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iCi0JCSIyOglsZ2hpICUwLCUxXG4iCi0JCSIJamcgMWJcbiIKLQkJIi5wcmV2aW91c1xuIgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiCS5hbGlnbiA4XG4iCi0JCSIJLnF1YWQgMWIsMmJcbiIKLQkJIi5wcmV2aW91c1xuIgotI2Vsc2UKLQkJICAgICAgICJkaWFnICUyLCU0LDB4Mjg4XG4iCi0JCSIxOglcbiIKLQkJIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIKLQkJIjI6CWxoaSAlMCwlMVxuIgotCQkiCWJyYXMgMSwzZlxuIgotCQkiCS5sb25nIDFiXG4iCi0JCSIzOglsIDEsMCgxKVxuIgotCQkiCWJyIDFcbiIKLQkJIi5wcmV2aW91c1xuIgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiCS5hbGlnbiA0XG4iCi0JCSIJLmxvbmcgMWIsMmJcbiIKLQkJIi5wcmV2aW91c1xuIgotI2VuZGlmCi0JCTogIismZCIoZXJyKQotCQk6ICJpIigtRUlOVkFMKSwgImQiKF9fZnVuYyksICJkIihfX3RpbWVvdXQpLAotCQkgICJkIihfX2NtZHApLCAiZCIoX19jbWRsKQotCQk6ICIxIiwgImNjIik7CisJZXJyID0gLUVJTlZBTDsKKwlhc20gdm9sYXRpbGUoCisJCSIJZGlhZwklMSwlMywweDI4OFxuIgorCQkiMDoJbGEJJTAsMFxuIgorCQkiMTpcbiIKKwkJRVhfVEFCTEUoMGIsMWIpCisJCTogIj1kIiAoZXJyKSA6ICJkIihfX2Z1bmMpLCAiZCIoX190aW1lb3V0KSwKKwkJICAiZCIoX19jbWRwKSwgImQiKF9fY21kbCksICIwIiAoLUVJTlZBTCkgOiAiMSIsICJjYyIpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMgYi9kcml2ZXJzL3MzOTAvY2lvL2RldmljZV9pZC5jCmluZGV4IDQzOGRiNDguLjEzOTgzNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vZGV2aWNlX2lkLmMKKysrIGIvZHJpdmVycy9zMzkwL2Npby9kZXZpY2VfaWQuYwpAQCAtNDIsMTggKzQyLDE1IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRpYWcyMTBfbG9jaywgZmxhZ3MpOwogCWRpYWcyMTBfdG1wID0gKmFkZHI7CiAKLQlhc20gdm9sYXRpbGUgKAotCQkiICAgbGhpCSAgJTAsLTFcbiIKLQkJIiAgIHNhbTMxXG4iCi0JCSIgICBkaWFnICAlMSwwLDB4MjEwXG4iCi0JCSIwOiBpcG0JICAlMFxuIgotCQkiICAgc3JsCSAgJTAsMjhcbiIKLQkJIjE6IHNhbTY0XG4iCi0JCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCi0JCSIgICAgLmFsaWduIDhcbiIKLQkJIiAgICAucXVhZCAwYiwxYlxuIgotCQkiLnByZXZpb3VzIgotCQk6ICI9JmQiIChjY29kZSkgOiAiYSIgKF9fcGEoJmRpYWcyMTBfdG1wKSkgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglsaGkJJTAsLTFcbiIKKwkJIglzYW0zMVxuIgorCQkiCWRpYWcJJTEsMCwweDIxMFxuIgorCQkiMDoJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCisJCSIxOglzYW02NFxuIgorCQlFWF9UQUJMRSgwYiwxYikKKwkJOiAiPSZkIiAoY2NvZGUpIDogImEiIChfX3BhKCZkaWFnMjEwX3RtcCkpIDogImNjIiwgIm1lbW9yeSIpOwogCiAJKmFkZHIgPSBkaWFnMjEwX3RtcDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkaWFnMjEwX2xvY2ssIGZsYWdzKTsKQEAgLTY2LDE3ICs2MywxNCBAQAogewogCWludCBjY29kZTsKIAotCWFzbSB2b2xhdGlsZSAoCi0JCSIgICBsaGkJICAlMCwtMVxuIgotCQkiICAgZGlhZyAgJTEsMCwweDIxMFxuIgotCQkiMDogaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4XG4iCisJYXNtIHZvbGF0aWxlKAorCQkiCWxoaQklMCwtMVxuIgorCQkiCWRpYWcJJTEsMCwweDIxMFxuIgorCQkiMDoJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCiAJCSIxOlxuIgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiICAgIC5hbGlnbiA0XG4iCi0JCSIgICAgLmxvbmcgMGIsMWJcbiIKLQkJIi5wcmV2aW91cyIKLQkJOiAiPSZkIiAoY2NvZGUpIDogImEiIChfX3BhKGFkZHIpKSA6ICJjYyIsICJtZW1vcnkiICk7CisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICI9JmQiIChjY29kZSkgOiAiYSIgKF9fcGEoYWRkcikpIDogImNjIiwgIm1lbW9yeSIpOwogCiAJcmV0dXJuIGNjb2RlOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9pb2FzbS5oIGIvZHJpdmVycy9zMzkwL2Npby9pb2FzbS5oCmluZGV4IDk1YTk0NjIuLmFkNmQ4MjkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9jaW8vaW9hc20uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL2lvYXNtLmgKQEAgLTI1LDEwNiArMjUsNzQgQEAKIHN0YXRpYyBpbmxpbmUgaW50IHN0c2NoKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLAogCQkJICAgIHZvbGF0aWxlIHN0cnVjdCBzY2hpYiAqYWRkcikKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCByZWcxIGFzbSAoIjEiKSA9IHNjaGlkOwogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgbHIJICAxLCUxXG4iCi0JCSIgICBzdHNjaCAwKCUyKVxuIgotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpLCAiYSIgKGFkZHIpLCAibSIgKCphZGRyKQotCQk6ICJjYyIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdHNjaAkwKCUyKVxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOCIKKwkJOiAiPWQiIChjY29kZSkgOiAiZCIgKHJlZzEpLCAiYSIgKGFkZHIpLCAibSIgKCphZGRyKSA6ICJjYyIpOwogCXJldHVybiBjY29kZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgc3RzY2hfZXJyKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLAogCQkJCXZvbGF0aWxlIHN0cnVjdCBzY2hpYiAqYWRkcikKIHsKLQlpbnQgY2NvZGU7CisJcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgcmVnMSBhc20gKCIxIikgPSBzY2hpZDsKKwlpbnQgY2NvZGUgPSAtRUlPOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIgICAgbGhpICAlMCwlM1xuIgotCQkiICAgIGxyCSAgMSwlMVxuIgotCQkiICAgIHN0c2NoIDAoJTIpXG4iCi0JCSIwOiAgaXBtICAlMFxuIgotCQkiICAgIHNybCAgJTAsMjhcbiIKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RzY2gJMCglMilcbiIKKwkJIjA6CWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgogCQkiMTpcbiIKLSNpZmRlZiBDT05GSUdfNjRCSVQKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIiAgIC5hbGlnbiA4XG4iCi0JCSIgICAucXVhZCAwYiwxYlxuIgotCQkiLnByZXZpb3VzIgotI2Vsc2UKLQkJIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIKLQkJIiAgIC5hbGlnbiA0XG4iCi0JCSIgICAubG9uZyAwYiwxYlxuIgotCQkiLnByZXZpb3VzIgotI2VuZGlmCi0JCTogIj0mZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpLCAiYSIgKGFkZHIpLCAiSyIgKC1FSU8pLCAibSIgKCphZGRyKQotCQk6ICJjYyIsICIxIiApOworCQlFWF9UQUJMRSgwYiwxYikKKwkJOiAiK2QiIChjY29kZSkgOiAiZCIgKHJlZzEpLCAiYSIgKGFkZHIpLCAibSIgKCphZGRyKSA6ICJjYyIpOwogCXJldHVybiBjY29kZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgbXNjaChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwKIAkJCSAgIHZvbGF0aWxlIHN0cnVjdCBzY2hpYiAqYWRkcikKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCByZWcxIGFzbSAoIjEiKSA9IHNjaGlkOwogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgbHIJICAxLCUxXG4iCi0JCSIgICBtc2NoICAwKCUyKVxuIgotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpLCAiYSIgKGFkZHIpLCAibSIgKCphZGRyKQotCQk6ICJjYyIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgltc2NoCTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4IgorCQk6ICI9ZCIgKGNjb2RlKSA6ICJkIiAocmVnMSksICJhIiAoYWRkciksICJtIiAoKmFkZHIpIDogImNjIik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBtc2NoX2VycihzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwKIAkJCSAgICAgICB2b2xhdGlsZSBzdHJ1Y3Qgc2NoaWIgKmFkZHIpCiB7Ci0JaW50IGNjb2RlOworCXJlZ2lzdGVyIHN0cnVjdCBzdWJjaGFubmVsX2lkIHJlZzEgYXNtICgiMSIpID0gc2NoaWQ7CisJaW50IGNjb2RlID0gLUVJTzsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgIGxoaSAgJTAsJTNcbiIKLQkJIiAgICBscgkgIDEsJTFcbiIKLQkJIiAgICBtc2NoIDAoJTIpXG4iCi0JCSIwOiAgaXBtICAlMFxuIgotCQkiICAgIHNybCAgJTAsMjhcbiIKKwlhc20gdm9sYXRpbGUoCisJCSIJbXNjaAkwKCUyKVxuIgorCQkiMDoJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4XG4iCiAJCSIxOlxuIgotI2lmZGVmIENPTkZJR182NEJJVAotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiICAgLmFsaWduIDhcbiIKLQkJIiAgIC5xdWFkIDBiLDFiXG4iCi0JCSIucHJldmlvdXMiCi0jZWxzZQotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIgotCQkiICAgLmFsaWduIDRcbiIKLQkJIiAgIC5sb25nIDBiLDFiXG4iCi0JCSIucHJldmlvdXMiCi0jZW5kaWYKLQkJOiAiPSZkIiAoY2NvZGUpCi0JCTogImQiIChzY2hpZCksICJhIiAoYWRkciksICJLIiAoLUVJTyksICJtIiAoKmFkZHIpCi0JCTogImNjIiwgIjEiICk7CisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICIrZCIgKGNjb2RlKSA6ICJkIiAocmVnMSksICJhIiAoYWRkciksICJtIiAoKmFkZHIpIDogImNjIik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiBzdGF0aWMgaW5saW5lIGludCB0c2NoKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLAogCQkJICAgdm9sYXRpbGUgc3RydWN0IGlyYiAqYWRkcikKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCByZWcxIGFzbSAoIjEiKSA9IHNjaGlkOwogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgbHIJICAxLCUxXG4iCi0JCSIgICB0c2NoICAwKCUyKVxuIgotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpLCAiYSIgKGFkZHIpLCAibSIgKCphZGRyKQotCQk6ICJjYyIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgl0c2NoCTAoJTIpXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4IgorCQk6ICI9ZCIgKGNjb2RlKSA6ICJkIiAocmVnMSksICJhIiAoYWRkciksICJtIiAoKmFkZHIpIDogImNjIik7CiAJcmV0dXJuIGNjb2RlOwogfQogCkBAIC0xMzIsODkgKzEwMCw3NyBAQAogewogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgdHBpCSAgMCglMSlcbiIKLQkJIiAgIGlwbQkgICUwXG4iCi0JCSIgICBzcmwJICAlMCwyOCIKLQkJOiAiPWQiIChjY29kZSkKLQkJOiAiYSIgKGFkZHIpLCAibSIgKCphZGRyKQotCQk6ICJjYyIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgl0cGkJMCglMSlcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2NvZGUpIDogImEiIChhZGRyKSwgIm0iICgqYWRkcikgOiAiY2MiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHNzY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQsCiAJCQkgICB2b2xhdGlsZSBzdHJ1Y3Qgb3JiICphZGRyKQogeworCXJlZ2lzdGVyIHN0cnVjdCBzdWJjaGFubmVsX2lkIHJlZzEgYXNtICgiMSIpID0gc2NoaWQ7CiAJaW50IGNjb2RlOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIgICBscgkgIDEsJTFcbiIKLQkJIiAgIHNzY2ggIDAoJTIpXG4iCi0JCSIgICBpcG0JICAlMFxuIgotCQkiICAgc3JsCSAgJTAsMjgiCi0JCTogIj1kIiAoY2NvZGUpCi0JCTogImQiIChzY2hpZCksICJhIiAoYWRkciksICJtIiAoKmFkZHIpCi0JCTogImNjIiwgIjEiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXNzY2gJMCglMilcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2NvZGUpIDogImQiIChyZWcxKSwgImEiIChhZGRyKSwgIm0iICgqYWRkcikgOiAiY2MiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHJzY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpCiB7CisJcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgcmVnMSBhc20gKCIxIikgPSBzY2hpZDsKIAlpbnQgY2NvZGU7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgIGxyCSAgMSwlMVxuIgotCQkiICAgcnNjaFxuIgotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpCi0JCTogImNjIiwgIjEiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXJzY2hcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2NvZGUpIDogImQiIChyZWcxKSA6ICJjYyIpOwogCXJldHVybiBjY29kZTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgY3NjaChzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCkKIHsKKwlyZWdpc3RlciBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCByZWcxIGFzbSAoIjEiKSA9IHNjaGlkOwogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgbHIJICAxLCUxXG4iCi0JCSIgICBjc2NoXG4iCi0JCSIgICBpcG0JICAlMFxuIgotCQkiICAgc3JsCSAgJTAsMjgiCi0JCTogIj1kIiAoY2NvZGUpCi0JCTogImQiIChzY2hpZCkKLQkJOiAiY2MiLCAiMSIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJY3NjaFxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOCIKKwkJOiAiPWQiIChjY29kZSkgOiAiZCIgKHJlZzEpIDogImNjIik7CiAJcmV0dXJuIGNjb2RlOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBoc2NoKHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkKQogeworCXJlZ2lzdGVyIHN0cnVjdCBzdWJjaGFubmVsX2lkIHJlZzEgYXNtICgiMSIpID0gc2NoaWQ7CiAJaW50IGNjb2RlOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIgICBscgkgIDEsJTFcbiIKLQkJIiAgIGhzY2hcbiIKLQkJIiAgIGlwbQkgICUwXG4iCi0JCSIgICBzcmwJICAlMCwyOCIKLQkJOiAiPWQiIChjY29kZSkKLQkJOiAiZCIgKHNjaGlkKQotCQk6ICJjYyIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgloc2NoXG4iCisJCSIJaXBtCSUwXG4iCisJCSIJc3JsCSUwLDI4IgorCQk6ICI9ZCIgKGNjb2RlKSA6ICJkIiAocmVnMSkgOiAiY2MiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IHhzY2goc3RydWN0IHN1YmNoYW5uZWxfaWQgc2NoaWQpCiB7CisJcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgcmVnMSBhc20gKCIxIikgPSBzY2hpZDsKIAlpbnQgY2NvZGU7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgIGxyCSAgMSwlMVxuIgotCQkiICAgLmluc24gcnJlLDB4YjI3NjAwMDAsJTEsMFxuIgotCQkiICAgaXBtCSAgJTBcbiIKLQkJIiAgIHNybAkgICUwLDI4IgotCQk6ICI9ZCIgKGNjb2RlKQotCQk6ICJkIiAoc2NoaWQpCi0JCTogImNjIiwgIjEiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiCS5pbnNuCXJyZSwweGIyNzYwMDAwLCUxLDBcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2NvZGUpIDogImQiIChyZWcxKSA6ICJjYyIpOwogCXJldHVybiBjY29kZTsKIH0KIApAQCAtMjIzLDQxICsxNzksMjcgQEAKIAl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1s0MDk2XTsgfSBhZGRyX3R5cGU7CiAJaW50IGNjOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiLmluc24JcnJlLDB4YjI1ZjAwMDAsJTIsMAlcblx0IgotCQkiaXBtCSUwCVxuXHQiCi0JCSJzcmwJJTAsMjgJXG5cdCIKKwlhc20gdm9sYXRpbGUoCisJCSIJLmluc24JcnJlLDB4YjI1ZjAwMDAsJTIsMFxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjKSwgIj1tIiAoKihhZGRyX3R5cGUgKikgY2hzY19hcmVhKQogCQk6ICJkIiAoY2hzY19hcmVhKSwgIm0iICgqKGFkZHJfdHlwZSAqKSBjaHNjX2FyZWEpCi0JCTogImNjIiApOwotCisJCTogImNjIik7CiAJcmV0dXJuIGNjOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpYWMoIHZvaWQpCi17Ci0JaW50IGNjb2RlOwotCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCi0JCSIgICBpYWMJICAxXG4iCi0JCSIgICBpcG0JICAlMFxuIgotCQkiICAgc3JsCSAgJTAsMjgiCi0JCTogIj1kIiAoY2NvZGUpIDogOiAiY2MiLCAiMSIgKTsKLQlyZXR1cm4gY2NvZGU7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHJjaHAoaW50IGNocGlkKQogeworCXJlZ2lzdGVyIHVuc2lnbmVkIGludCByZWcxIGFzbSAoIjEiKSA9IGNocGlkOwogCWludCBjY29kZTsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgbHIJICAxLCUxXG4iCi0JCSIgICByY2hwXG4iCi0JCSIgICBpcG0JICAlMFxuIgotCQkiICAgc3JsCSAgJTAsMjgiCi0JCTogIj1kIiAoY2NvZGUpCi0JCTogImQiIChjaHBpZCkKLQkJOiAiY2MiLCAiMSIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJbHIJMSwlMVxuIgorCQkiCXJjaHBcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjgiCisJCTogIj1kIiAoY2NvZGUpIDogImQiIChyZWcxKSA6ICJjYyIpOwogCXJldHVybiBjY29kZTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL2Npby9xZGlvLmggYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAppbmRleCAxMjQ1NjkzLi40OWJiOWUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaAorKysgYi9kcml2ZXJzL3MzOTAvY2lvL3FkaW8uaApAQCAtMjc0LDEyICsyNzQsMTEgQEAKICAgICAgICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9zY2ggYXNtICgiMSIpID0gc2NoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgX3F1ZXVlc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpcXVldWUgPDwgMzIpIHwgKnN0YXJ0OwogCi0gICAgICAgYXNtIHZvbGF0aWxlICgKLSAgICAgICAgICAgICAgIiAuaW5zbiByc3ksMHhlYjAwMDAwMDAwOEEsJTEsMCwwKCUyKVxuXHQiCi0gICAgICAgICAgICAgIDogIitkIiAoX2NjcSksICIrZCIgKF9xdWV1ZXN0YXJ0KQotICAgICAgICAgICAgICA6ICJkIiAoKHVuc2lnbmVkIGxvbmcpc3RhdGUpLCAiZCIgKF9zY2gpCi0gICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIKLSAgICAgICApOworICAgICAgIGFzbSB2b2xhdGlsZSgKKwkgICAgICAgIgkuaW5zbglyc3ksMHhlYjAwMDAwMDAwOEEsJTEsMCwwKCUyKSIKKwkgICAgICAgOiAiK2QiIChfY2NxKSwgIitkIiAoX3F1ZXVlc3RhcnQpCisJICAgICAgIDogImQiICgodW5zaWduZWQgbG9uZylzdGF0ZSksICJkIiAoX3NjaCkKKwkgICAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgICAgICAgKmNvdW50ID0gX2NjcSAmIDB4ZmY7CiAgICAgICAgKnN0YXJ0ID0gX3F1ZXVlc3RhcnQgJiAweGZmOwogCkBAIC0yOTksMTIgKzI5OCwxMSBAQAogCXVuc2lnbmVkIGxvbmcgX3F1ZXVlc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpcXVldWUgPDwgMzIpIHwgKnN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgX3N0YXRlID0gMDsKIAotCWFzbSB2b2xhdGlsZSAoCi0JICAgICAgIiAuaW5zbiBycmYsMHhCOTljMDAwMCwlMSwlMiwwLDAgIFxuXHQiCi0JICAgICAgOiAiK2QiIChfY2NxKSwgIitkIiAoX3F1ZXVlc3RhcnQpLCAiK2QiIChfc3RhdGUpCi0JICAgICAgOiAiZCIgKF9zY2gpCi0JICAgICAgOiAibWVtb3J5IiwgImNjIgotCSk7CisJYXNtIHZvbGF0aWxlKAorCQkiCS5pbnNuCXJyZiwweEI5OWMwMDAwLCUxLCUyLDAsMCIKKwkJOiAiK2QiIChfY2NxKSwgIitkIiAoX3F1ZXVlc3RhcnQpLCAiK2QiIChfc3RhdGUpCisJCTogImQiIChfc2NoKQorCQk6ICJtZW1vcnkiLCAiY2MiICk7CiAJKmNvdW50ID0gX2NjcSAmIDB4ZmY7CiAJKnN0YXJ0ID0gX3F1ZXVlc3RhcnQgJiAweGZmOwogCSpzdGF0ZSA9IF9zdGF0ZSAmIDB4ZmY7CkBAIC0zMTksNjkgKzMxNywzNSBAQAogc3RhdGljIGlubGluZSBpbnQKIGRvX3NpZ2Ffc3luYyhzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCBzY2hpZCwgdW5zaWduZWQgaW50IG1hc2sxLCB1bnNpZ25lZCBpbnQgbWFzazIpCiB7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcwIGFzbSAoIjAiKSA9IDI7CisJcmVnaXN0ZXIgc3RydWN0IHN1YmNoYW5uZWxfaWQgcmVnMSBhc20gKCIxIikgPSBzY2hpZDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtICgiMiIpID0gbWFzazE7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWczIGFzbSAoIjMiKSA9IG1hc2syOwogCWludCBjYzsKIAotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQlhc20gdm9sYXRpbGUgKAotCQkibGhpCTAsMglcblx0IgotCQkibHIJMSwlMQlcblx0IgotCQkibHIJMiwlMglcblx0IgotCQkibHIJMywlMwlcblx0IgotCQkic2lnYSAgIDAJXG5cdCIKLQkJImlwbQklMAlcblx0IgotCQkic3JsCSUwLDI4CVxuXHQiCisJYXNtIHZvbGF0aWxlKAorCQkiCXNpZ2EJMFxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjKQotCQk6ICJkIiAoc2NoaWQpLCAiZCIgKG1hc2sxKSwgImQiIChtYXNrMikKLQkJOiAiY2MiLCAiMCIsICIxIiwgIjIiLCAiMyIKLQkJKTsKLSNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotCWFzbSB2b2xhdGlsZSAoCi0JCSJsZ2hpCTAsMglcblx0IgotCQkibGxnZnIJMSwlMQlcblx0IgotCQkibGxnZnIJMiwlMglcblx0IgotCQkibGxnZnIJMywlMwlcblx0IgotCQkic2lnYSAgIDAJXG5cdCIKLQkJImlwbQklMAlcblx0IgotCQkic3JsCSUwLDI4CVxuXHQiCi0JCTogIj1kIiAoY2MpCi0JCTogImQiIChzY2hpZCksICJkIiAobWFzazEpLCAiZCIgKG1hc2syKQotCQk6ICJjYyIsICIwIiwgIjEiLCAiMiIsICIzIgotCQkpOwotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLworCQk6ICJkIiAocmVnMCksICJkIiAocmVnMSksICJkIiAocmVnMiksICJkIiAocmVnMykgOiAiY2MiKTsKIAlyZXR1cm4gY2M7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBkb19zaWdhX2lucHV0KHN0cnVjdCBzdWJjaGFubmVsX2lkIHNjaGlkLCB1bnNpZ25lZCBpbnQgbWFzaykKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpID0gMTsKKwlyZWdpc3RlciBzdHJ1Y3Qgc3ViY2hhbm5lbF9pZCByZWcxIGFzbSAoIjEiKSA9IHNjaGlkOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20gKCIyIikgPSBtYXNrOwogCWludCBjYzsKIAotI2lmbmRlZiBDT05GSUdfNjRCSVQKLQlhc20gdm9sYXRpbGUgKAotCQkibGhpCTAsMQlcblx0IgotCQkibHIJMSwlMQlcblx0IgotCQkibHIJMiwlMglcblx0IgotCQkic2lnYSAgIDAJXG5cdCIKLQkJImlwbQklMAlcblx0IgotCQkic3JsCSUwLDI4CVxuXHQiCisJYXNtIHZvbGF0aWxlKAorCQkiCXNpZ2EJMFxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgogCQk6ICI9ZCIgKGNjKQotCQk6ICJkIiAoc2NoaWQpLCAiZCIgKG1hc2spCi0JCTogImNjIiwgIjAiLCAiMSIsICIyIiwgIm1lbW9yeSIKLQkJKTsKLSNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotCWFzbSB2b2xhdGlsZSAoCi0JCSJsZ2hpCTAsMQlcblx0IgotCQkibGxnZnIJMSwlMQlcblx0IgotCQkibGxnZnIJMiwlMglcblx0IgotCQkic2lnYSAgIDAJXG5cdCIKLQkJImlwbQklMAlcblx0IgotCQkic3JsCSUwLDI4CVxuXHQiCi0JCTogIj1kIiAoY2MpCi0JCTogImQiIChzY2hpZCksICJkIiAobWFzaykKLQkJOiAiY2MiLCAiMCIsICIxIiwgIjIiLCAibWVtb3J5IgotCQkpOwotI2VuZGlmIC8qIENPTkZJR182NEJJVCAqLwotCQorCQk6ICJkIiAocmVnMCksICJkIiAocmVnMSksICJkIiAocmVnMikgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIGNjOwogfQogCkBAIC0zODksOTMgKzM1MywzNSBAQAogZG9fc2lnYV9vdXRwdXQodW5zaWduZWQgbG9uZyBzY2hpZCwgdW5zaWduZWQgbG9uZyBtYXNrLCBfX3UzMiAqYmIsCiAJICAgICAgIHVuc2lnbmVkIGludCBmYykKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZmMgYXNtKCIwIikgPSBmYzsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fc2NoaWQgYXNtKCIxIikgPSBzY2hpZDsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fbWFzayBhc20oIjIiKSA9IG1hc2s7CiAJaW50IGNjOwotCV9fdTMyIGJ1c3lfYml0OwogCi0jaWZuZGVmIENPTkZJR182NEJJVAotCWFzbSB2b2xhdGlsZSAoCi0JCSJsaGkJMCwwCVxuXHQiCi0JCSJscgkxLCUyCVxuXHQiCi0JCSJscgkyLCUzCVxuXHQiCi0JCSJzaWdhCTAJXG5cdCIKLQkJIjA6IgotCQkiaXBtCSUwCVxuXHQiCi0JCSJzcmwJJTAsMjgJXG5cdCIKLQkJInNybAkwLDMxCVxuXHQiCi0JCSJscgklMSwwCVxuXHQiCi0JCSIxOglcblx0IgotCQkiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuXHQiCi0JCSIyOglcblx0IgotCQkibGhpCSUwLCU0CVxuXHQiCi0JCSJicmFzCTEsM2YJXG5cdCIKLQkJIi5sb25nIDFiCVxuXHQiCi0JCSIzOglcblx0IgotCQkibAkxLDAoMSkJXG5cdCIKLQkJImJyCTEJXG5cdCIKLQkJIi5wcmV2aW91cwlcblx0IgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCi0JCSIuYWxpZ24gNAlcblx0IgotCQkiLmxvbmcJMGIsMmIJXG5cdCIKLQkJIi5wcmV2aW91cwlcblx0IgotCQk6ICI9ZCIgKGNjKSwgIj1kIiAoYnVzeV9iaXQpCi0JCTogImQiIChzY2hpZCksICJkIiAobWFzayksCi0JCSJpIiAoUURJT19TSUdBX0VSUk9SX0FDQ0VTU19FWENFUFRJT04pCi0JCTogImNjIiwgIjAiLCAiMSIsICIyIiwgIm1lbW9yeSIKLQkJKTsKLSNlbHNlIC8qIENPTkZJR182NEJJVCAqLwotCWFzbSB2b2xhdGlsZSAoCi0gICAgICAgIAkibGxnZnIgIDAsJTUgICAgXG5cdCIKLSAgICAgICAgICAgICAgICAibGdyICAgIDEsJTIgICAgXG5cdCIKLQkJImxsZ2ZyCTIsJTMJXG5cdCIKLQkJInNpZ2EJMAlcblx0IgotCQkiMDoiCi0JCSJpcG0JJTAJXG5cdCIKLQkJInNybAklMCwyOAlcblx0IgotCQkic3JsCTAsMzEJXG5cdCIKLQkJImxsZ2ZyCSUxLDAJXG5cdCIKLQkJIjE6CVxuXHQiCi0JCSIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG5cdCIKLQkJImxnaGkJJTAsJTQJXG5cdCIKLQkJImpnCTFiCVxuXHQiCi0JCSIucHJldmlvdXNcblx0IgotCQkiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuXHQiCi0JCSIuYWxpZ24gOAlcblx0IgotCQkiLnF1YWQJMGIsMWIJXG5cdCIKLQkJIi5wcmV2aW91cwlcblx0IgotCQk6ICI9ZCIgKGNjKSwgIj1kIiAoYnVzeV9iaXQpCi0JCTogImQiIChzY2hpZCksICJkIiAobWFzayksCi0JCSJpIiAoUURJT19TSUdBX0VSUk9SX0FDQ0VTU19FWENFUFRJT04pLCAiZCIgKGZjKQotCQk6ICJjYyIsICIwIiwgIjEiLCAiMiIsICJtZW1vcnkiCi0JCSk7Ci0jZW5kaWYgLyogQ09ORklHXzY0QklUICovCi0JCi0JKCpiYikgPSBidXN5X2JpdDsKKwlhc20gdm9sYXRpbGUoCisJCSIJc2lnYQkwXG4iCisJCSIwOglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKKwkJIjE6XG4iCisJCUVYX1RBQkxFKDBiLDFiKQorCQk6ICI9ZCIgKGNjKSwgIitkIiAoX19mYyksICIrZCIgKF9fc2NoaWQpLCAiK2QiIChfX21hc2spCisJCTogIjAiIChRRElPX1NJR0FfRVJST1JfQUNDRVNTX0VYQ0VQVElPTikKKwkJOiAiY2MiLCAibWVtb3J5Iik7CisJKCpiYikgPSAoKHVuc2lnbmVkIGludCkgX19mYykgPj4gMzE7CiAJcmV0dXJuIGNjOwogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKIGRvX2NsZWFyX2dsb2JhbF9zdW1tYXJ5KHZvaWQpCiB7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX2ZuIGFzbSgiMSIpID0gMzsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fdG1wIGFzbSgiMiIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgX190aW1lIGFzbSgiMyIpOwogCi0JdW5zaWduZWQgbG9uZyB0aW1lOwotCi0jaWZuZGVmIENPTkZJR182NEJJVAotCWFzbSB2b2xhdGlsZSAoCi0JCSJsaGkJMSwzCVxuXHQiCi0JCSIuaW5zbglycmUsMHhiMjY1MDAwMCwyLDAJXG5cdCIKLQkJImxyCSUwLDMJXG5cdCIKLQkJOiAiPWQiICh0aW1lKSA6IDogImNjIiwgIjEiLCAiMiIsICIzIgotCQkpOwotI2Vsc2UgLyogQ09ORklHXzY0QklUICovCi0JYXNtIHZvbGF0aWxlICgKLQkJImxnaGkJMSwzCVxuXHQiCi0JCSIuaW5zbglycmUsMHhiMjY1MDAwMCwyLDAJXG5cdCIKLQkJImxncgklMCwzCVxuXHQiCi0JCTogIj1kIiAodGltZSkgOiA6ICJjYyIsICIxIiwgIjIiLCAiMyIKLQkJKTsKLSNlbmRpZiAvKiBDT05GSUdfNjRCSVQgKi8KLQkKLQlyZXR1cm4gdGltZTsKKwlhc20gdm9sYXRpbGUoCisJCSIJLmluc24JcnJlLDB4YjI2NTAwMDAsMiwwIgorCQk6ICIrZCIgKF9fZm4pLCAiPWQiIChfX3RtcCksICI9ZCIgKF9fdGltZSkpOworCXJldHVybiBfX3RpbWU7CiB9CiAJCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9pdWN2LmMgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwppbmRleCA4MjFkZGU4Li44MDlkZDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L2l1Y3YuYwpAQCAtNTM0LDE5ICs1MzQsMTUgQEAKICAqCiAgKiBSZXR1cm5zOiByZXR1cm4gY29kZSBmcm9tIENQJ3MgSVVDViBjYWxsCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVsb25nCi1iMmYwKF9fdTMyIGNvZGUsIHZvaWQgKnBhcm0pCitzdGF0aWMgaW5saW5lIHVsb25nIGIyZjAoX191MzIgY29kZSwgdm9pZCAqcGFybSkKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzAgYXNtICgiMCIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIik7CiAJaXVjdl9kdW1waXQoImlwYXJtbCBiZWZvcmUgYjJmMCBjYWxsOiIsIHBhcm0sIHNpemVvZihpdWN2X3BhcmFtKSk7CiAKLQlhc20gdm9sYXRpbGUgKAotCQkiTFJBICAgMSwwKCUxKVxuXHQiCi0JCSJMUiAgICAwLCUwXG5cdCIKLQkJIi5sb25nIDB4YjJmMDEwMDAiCi0JCToKLQkJOiAiZCIgKGNvZGUpLCAiYSIgKHBhcm0pCi0JCTogIjAiLCAiMSIKLQkJKTsKKwlyZWcwID0gY29kZTsKKwlyZWcxID0gdmlydF90b19waHlzKHBhcm0pOworCWFzbSB2b2xhdGlsZSgiLmxvbmcgMHhiMmYwMTAwMCIgOiA6ICJkIiAocmVnMCksICJhIiAocmVnMSkpOwogCiAJaXVjdl9kdW1waXQoImlwYXJtbCBhZnRlciBiMmYwIGNhbGw6IiwgcGFybSwgc2l6ZW9mKGl1Y3ZfcGFyYW0pKTsKIApAQCAtMTI0OCw2ICsxMjQ0LDggQEAKIHN0YXRpYyBpbnQKIGl1Y3ZfcXVlcnlfZ2VuZXJpYyhpbnQgd2FudF9tYXhjb25uKQogeworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMCBhc20gKCIwIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcxIGFzbSAoIjEiKTsKIAlpcGFybWxfcHVyZ2UgKnBhcm0gPSAoaXBhcm1sX3B1cmdlICopZ3JhYl9wYXJhbSgpOwogCWludCBidWZzaXplLCBtYXhjb25uOwogCWludCBjY29kZTsKQEAgLTEyNTYsMTggKzEyNTQsMTUgQEAKIAkgKiBDYWxsIGIyZjAgYW5kIHN0b3JlIFIwIChtYXggYnVmZmVyIHNpemUpLAogCSAqIFIxIChtYXggY29ubmVjdGlvbnMpIGFuZCBDQy4KIAkgKi8KLQlhc20gdm9sYXRpbGUgKAotCQkiTFJBICAgMSwwKCU0KVxuXHQiCi0JCSJMUiAgICAwLCUzXG5cdCIKLQkJIi5sb25nIDB4YjJmMDEwMDBcblx0IgotCQkiSVBNICAgJTBcblx0IgotCQkiU1JMICAgJTAsMjhcblx0IgotCQkiU1QgICAgMCwlMVxuXHQiCi0JCSJTVCAgICAxLCUyXG5cdCIKLQkJOiAiPWQiIChjY29kZSksICI9bSIgKGJ1ZnNpemUpLCAiPW0iIChtYXhjb25uKQotCQk6ICJkIiAoUVVFUlkpLCAiYSIgKHBhcm0pCi0JCTogIjAiLCAiMSIsICJjYyIKLQkJKTsKKwlyZWcwID0gUVVFUlk7CisJcmVnMSA9IHZpcnRfdG9fcGh5cyhwYXJtKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJLmxvbmcJMHhiMmYwMTAwMFxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgorCQk6ICI9ZCIgKGNjb2RlKSwgIitkIiAocmVnMCksICIrZCIgKHJlZzEpIDogOiAiY2MiKTsKKwlidWZzaXplID0gcmVnMDsKKwltYXhjb25uID0gcmVnMTsKIAlyZWxlYXNlX3BhcmFtKHBhcm0pOwogCiAJaWYgKGNjb2RlKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYyBiL2RyaXZlcnMvczM5MC9uZXQvcWV0aF9tYWluLmMKaW5kZXggNTYxM2I0NS4uODM2NGQ1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX21haW4uYworKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfbWFpbi5jCkBAIC04MDY3LDcgKzgwNjcsNyBAQAogCW5laWdoLT5wYXJtcyA9IG5laWdoX3Bhcm1zX2Nsb25lKHBhcm1zKTsKIAlyY3VfcmVhZF91bmxvY2soKTsKIAotCW5laWdoLT50eXBlID0gaW5ldF9hZGRyX3R5cGUoKih1MzIgKikgbmVpZ2gtPnByaW1hcnlfa2V5KTsKKwluZWlnaC0+dHlwZSA9IGluZXRfYWRkcl90eXBlKCooX19iZTMyICopIG5laWdoLT5wcmltYXJ5X2tleSk7CiAJbmVpZ2gtPm51ZF9zdGF0ZSA9IE5VRF9OT0FSUDsKIAluZWlnaC0+b3BzID0gYXJwX2RpcmVjdF9vcHM7CiAJbmVpZ2gtPm91dHB1dCA9IG5laWdoLT5vcHMtPnF1ZXVlX3htaXQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvczM5MG1hY2guYyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCmluZGV4IGE5MTQxMjkuLjQ3OTM2NGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCisrKyBiL2RyaXZlcnMvczM5MC9zMzkwbWFjaC5jCkBAIC0yNTMsMTEgKzI1MywxMiBAQAogCQlraWxsX3Rhc2sgPSAxOwogCiAjaWZuZGVmIENPTkZJR182NEJJVAotCWFzbSB2b2xhdGlsZSgibGQgMCwwKCUwKVxuIgotCQkgICAgICJsZCAyLDgoJTApXG4iCi0JCSAgICAgImxkIDQsMTYoJTApXG4iCi0JCSAgICAgImxkIDYsMjQoJTApIgotCQkgICAgIDogOiAiYSIgKCZTMzkwX2xvd2NvcmUuZmxvYXRpbmdfcHRfc2F2ZV9hcmVhKSk7CisJYXNtIHZvbGF0aWxlKAorCQkiCWxkCTAsMCglMClcbiIKKwkJIglsZAkyLDgoJTApXG4iCisJCSIJbGQJNCwxNiglMClcbiIKKwkJIglsZAk2LDI0KCUwKSIKKwkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5mbG9hdGluZ19wdF9zYXZlX2FyZWEpKTsKICNlbmRpZgogCiAJaWYgKE1BQ0hJTkVfSEFTX0lFRUUpIHsKQEAgLTI3NCwzNyArMjc1LDM2IEBACiAJCQkgKiBGbG9hdGluZyBwb2ludCBjb250cm9sIHJlZ2lzdGVyIGNhbid0IGJlIHJlc3RvcmVkLgogCQkJICogVGFzayB3aWxsIGJlIHRlcm1pbmF0ZWQuCiAJCQkgKi8KLQkJCWFzbSB2b2xhdGlsZSAoImxmcGMgMCglMCkiIDogOiAiYSIgKCZ6ZXJvKSwgIm0iICh6ZXJvKSk7CisJCQlhc20gdm9sYXRpbGUoImxmcGMgMCglMCkiIDogOiAiYSIgKCZ6ZXJvKSwgIm0iICh6ZXJvKSk7CiAJCQlraWxsX3Rhc2sgPSAxOwogCi0JCX0KLQkJZWxzZQotCQkJYXNtIHZvbGF0aWxlICgKLQkJCQkibGZwYyAwKCUwKSIKLQkJCQk6IDogImEiIChmcHRfY3JlZ19zYXZlX2FyZWEpKTsKKwkJfSBlbHNlCisJCQlhc20gdm9sYXRpbGUoImxmcGMgMCglMCkiIDogOiAiYSIgKGZwdF9jcmVnX3NhdmVfYXJlYSkpOwogCi0JCWFzbSB2b2xhdGlsZSgibGQgIDAsMCglMClcbiIKLQkJCSAgICAgImxkICAxLDgoJTApXG4iCi0JCQkgICAgICJsZCAgMiwxNiglMClcbiIKLQkJCSAgICAgImxkICAzLDI0KCUwKVxuIgotCQkJICAgICAibGQgIDQsMzIoJTApXG4iCi0JCQkgICAgICJsZCAgNSw0MCglMClcbiIKLQkJCSAgICAgImxkICA2LDQ4KCUwKVxuIgotCQkJICAgICAibGQgIDcsNTYoJTApXG4iCi0JCQkgICAgICJsZCAgOCw2NCglMClcbiIKLQkJCSAgICAgImxkICA5LDcyKCUwKVxuIgotCQkJICAgICAibGQgMTAsODAoJTApXG4iCi0JCQkgICAgICJsZCAxMSw4OCglMClcbiIKLQkJCSAgICAgImxkIDEyLDk2KCUwKVxuIgotCQkJICAgICAibGQgMTMsMTA0KCUwKVxuIgotCQkJICAgICAibGQgMTQsMTEyKCUwKVxuIgotCQkJICAgICAibGQgMTUsMTIwKCUwKVxuIgotCQkJICAgICA6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGQJMCwwKCUwKVxuIgorCQkJIglsZAkxLDgoJTApXG4iCisJCQkiCWxkCTIsMTYoJTApXG4iCisJCQkiCWxkCTMsMjQoJTApXG4iCisJCQkiCWxkCTQsMzIoJTApXG4iCisJCQkiCWxkCTUsNDAoJTApXG4iCisJCQkiCWxkCTYsNDgoJTApXG4iCisJCQkiCWxkCTcsNTYoJTApXG4iCisJCQkiCWxkCTgsNjQoJTApXG4iCisJCQkiCWxkCTksNzIoJTApXG4iCisJCQkiCWxkCTEwLDgwKCUwKVxuIgorCQkJIglsZAkxMSw4OCglMClcbiIKKwkJCSIJbGQJMTIsOTYoJTApXG4iCisJCQkiCWxkCTEzLDEwNCglMClcbiIKKwkJCSIJbGQJMTQsMTEyKCUwKVxuIgorCQkJIglsZAkxNSwxMjAoJTApXG4iCisJCQk6IDogImEiIChmcHRfc2F2ZV9hcmVhKSk7CiAJfQogCiAJLyogUmV2YWxpZGF0ZSBhY2Nlc3MgcmVnaXN0ZXJzICovCi0JYXNtIHZvbGF0aWxlKCJsYW0gMCwxNSwwKCUwKSIKLQkJICAgICA6IDogImEiICgmUzM5MF9sb3djb3JlLmFjY2Vzc19yZWdzX3NhdmVfYXJlYSkpOworCWFzbSB2b2xhdGlsZSgKKwkJIglsYW0JMCwxNSwwKCUwKSIKKwkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5hY2Nlc3NfcmVnc19zYXZlX2FyZWEpKTsKIAlpZiAoIW1jaS0+YXIpCiAJCS8qCiAJCSAqIEFjY2VzcyByZWdpc3RlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzLgpAQCAtMzIxLDExICszMjEsMTMgQEAKIAkJczM5MF9oYW5kbGVfZGFtYWdlKCJpbnZhbGlkIGNvbnRyb2wgcmVnaXN0ZXJzLiIpOwogCWVsc2UKICNpZmRlZiBDT05GSUdfNjRCSVQKLQkJYXNtIHZvbGF0aWxlKCJsY3RsZyAwLDE1LDAoJTApIgotCQkJICAgICA6IDogImEiICgmUzM5MF9sb3djb3JlLmNyZWdzX3NhdmVfYXJlYSkpOworCQlhc20gdm9sYXRpbGUoCisJCQkiCWxjdGxnCTAsMTUsMCglMCkiCisJCQk6IDogImEiICgmUzM5MF9sb3djb3JlLmNyZWdzX3NhdmVfYXJlYSkpOwogI2Vsc2UKLQkJYXNtIHZvbGF0aWxlKCJsY3RsIDAsMTUsMCglMCkiCi0JCQkgICAgIDogOiAiYSIgKCZTMzkwX2xvd2NvcmUuY3JlZ3Nfc2F2ZV9hcmVhKSk7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGN0bAkwLDE1LDAoJTApIgorCQkJOiA6ICJhIiAoJlMzOTBfbG93Y29yZS5jcmVnc19zYXZlX2FyZWEpKTsKICNlbmRpZgogCiAJLyoKQEAgLTMzOSwyMCArMzQxLDIzIEBACiAJICogb2xkIGNvbnRlbnRzIChzaG91bGQgYmUgemVybykgb3RoZXJ3aXNlIHNldCBpdCB0byB6ZXJvLgogCSAqLwogCWlmICghbWNpLT5wcikKLQkJYXNtIHZvbGF0aWxlKCJzciAwLDBcbiIKLQkJCSAgICAgInNja3BmIgotCQkJICAgICA6IDogOiAiMCIsICJjYyIpOworCQlhc20gdm9sYXRpbGUoCisJCQkiCXNyCTAsMFxuIgorCQkJIglzY2twZiIKKwkJCTogOiA6ICIwIiwgImNjIik7CiAJZWxzZQogCQlhc20gdm9sYXRpbGUoCi0JCQkibCAwLDAoJTApXG4iCi0JCQkic2NrcGYiCi0JCQk6IDogImEiICgmUzM5MF9sb3djb3JlLnRvZF9wcm9ncmVnX3NhdmVfYXJlYSkgOiAiMCIsICJjYyIpOworCQkJIglsCTAsMCglMClcbiIKKwkJCSIJc2NrcGYiCisJCQk6IDogImEiICgmUzM5MF9sb3djb3JlLnRvZF9wcm9ncmVnX3NhdmVfYXJlYSkKKwkJCTogIjAiLCAiY2MiKTsKICNlbmRpZgogCiAJLyogUmV2YWxpZGF0ZSBjbG9jayBjb21wYXJhdG9yIHJlZ2lzdGVyICovCi0JYXNtIHZvbGF0aWxlICgic3RjayAwKCUxKVxuIgotCQkgICAgICAic2NrYyAwKCUxKSIKLQkJICAgICAgOiAiPW0iICh0bXBjbG9jaykgOiAiYSIgKCYodG1wY2xvY2spKSA6ICJjYyIsICJtZW1vcnkiKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjawkwKCUxKVxuIgorCQkiCXNja2MJMCglMSkiCisJCTogIj1tIiAodG1wY2xvY2spIDogImEiICgmKHRtcGNsb2NrKSkgOiAiY2MiLCAibWVtb3J5Iik7CiAKIAkvKiBDaGVjayBpZiBvbGQgUFNXIGlzIHZhbGlkICovCiAJaWYgKCFtY2ktPndwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zMzkwL3Njc2kvemZjcF9zY3NpLmMgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwppbmRleCA3Y2FmYTM0Li40ZDJiYzc5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYworKysgYi9kcml2ZXJzL3MzOTAvc2NzaS96ZmNwX3Njc2kuYwpAQCAtMzAxLDcgKzMwMSw3IEBACiAJCSAgICAgICBpbnQgdXNlX3RpbWVyKQogewogCWludCByZXQ7Ci0JREVDTEFSRV9DT01QTEVUSU9OKHdhaXQpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKHdhaXQpOwogCiAJc2NwbnQtPlNDcC5wdHIgPSAodm9pZCAqKSAmd2FpdDsgIC8qIHNpbGVudCByZS11c2UgKi8KIAlzY3BudC0+c2NzaV9kb25lID0gemZjcF9zY3NpX2NvbW1hbmRfc3luY19oYW5kbGVyOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpLzUzYzcwMC5jIGIvZHJpdmVycy9zY3NpLzUzYzcwMC5jCmluZGV4IDY1N2EzYWIuLjE1Y2U0MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS81M2M3MDAuYworKysgYi9kcml2ZXJzL3Njc2kvNTNjNzAwLmMKQEAgLTE5MzksNyArMTkzOSw3IEBACiBTVEFUSUMgaW50CiBOQ1JfNzAwX2J1c19yZXNldChzdHJ1Y3Qgc2NzaV9jbW5kICogU0NwKQogewotCURFQ0xBUkVfQ09NUExFVElPTihjb21wbGV0ZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0soY29tcGxldGUpOwogCXN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqaG9zdGRhdGEgPSAKIAkJKHN0cnVjdCBOQ1JfNzAwX0hvc3RfUGFyYW1ldGVycyAqKVNDcC0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL0J1c0xvZ2ljLmggYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaAppbmRleCA5NzkyZTVhLi5kNmQxZDU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaAorKysgYi9kcml2ZXJzL3Njc2kvQnVzTG9naWMuaApAQCAtMjM3LDEwICsyMzcsNyBAQAogICBEZWZpbmUgYSBCb29sZWFuIGRhdGEgdHlwZS4KICovCiAKLXR5cGVkZWYgZW51bSB7Ci0JZmFsc2UsCi0JdHJ1ZQotfSBQQUNLRUQgYm9vbGVhbjsKK3R5cGVkZWYgYm9vbCBib29sZWFuOwogCiAvKgogICBEZWZpbmUgYSAxMF4xOCBTdGF0aXN0aWNzIEJ5dGUgQ291bnRlciBkYXRhIHR5cGUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvS2NvbmZpZyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCmluZGV4IGM0ZGZjYzkuLmRhYjA4MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvc2NzaS9LY29uZmlnCkBAIC0zLDExICszLDEzIEBACiBjb25maWcgUkFJRF9BVFRSUwogCXRyaXN0YXRlICJSQUlEIFRyYW5zcG9ydCBDbGFzcyIKIAlkZWZhdWx0IG4KKwlkZXBlbmRzIG9uIEJMT0NLCiAJLS0taGVscC0tLQogCSAgUHJvdmlkZXMgUkFJRAogCiBjb25maWcgU0NTSQogCXRyaXN0YXRlICJTQ1NJIGRldmljZSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkxPQ0sKIAktLS1oZWxwLS0tCiAJICBJZiB5b3Ugd2FudCB0byB1c2UgYSBTQ1NJIGhhcmQgZGlzaywgU0NTSSB0YXBlIGRyaXZlLCBTQ1NJIENELVJPTSBvcgogCSAgYW55IG90aGVyIFNDU0kgZGV2aWNlIHVuZGVyIExpbnV4LCBzYXkgWSBhbmQgbWFrZSBzdXJlIHRoYXQgeW91IGtub3cKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMgYi9kcml2ZXJzL3Njc2kvYWhhMTc0MC5jCmluZGV4IDBlNGE3ZWIuLjZiMzVlZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9haGExNzQwLmMKKysrIGIvZHJpdmVycy9zY3NpL2FoYTE3NDAuYwpAQCAtNjgxLDYgKzY4MSw3IEBACiAJeyAiQURQMDQwMCIgfSwJCS8qIDE3NDQgICovCiAJeyAiIiB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShlaXNhLCBhaGExNzQwX2lkcyk7CiAKIHN0YXRpYyBzdHJ1Y3QgZWlzYV9kcml2ZXIgYWhhMTc0MF9kcml2ZXIgPSB7CiAJLmlkX3RhYmxlID0gYWhhMTc0MF9pZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwX29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzc3MF9vc20uYwppbmRleCA4NjdjYmUyLi4xYWMxMTk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3NzcwX29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc3NzBfb3NtLmMKQEAgLTEzMiw3ICsxMzIsOCBAQAogCXsgIkFEUDc3NzAiLCA1IH0sIC8qIEFJQzc3NzAgZ2VuZXJpYyAqLwogCXsgIiIgfQogfTsKLSAgCitNT0RVTEVfREVWSUNFX1RBQkxFKGVpc2EsIGFpYzc3NzBfaWRzKTsKKwogc3RhdGljIHN0cnVjdCBlaXNhX2RyaXZlciBhaWM3NzcwX2RyaXZlciA9IHsKIAkuaWRfdGFibGUJPSBhaWM3NzcwX2lkcywKIAkuZHJpdmVyID0gewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzc5eHhfb3NtLmMKaW5kZXggYzdlZWFjZS4uMWZhYTAwOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljNzl4eF9vc20uYworKysgYi9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3OXh4X29zbS5jCkBAIC02NDYsNyArNjQ2LDcgQEAKIAlzdHJ1Y3QJYWhkX2luaXRpYXRvcl90aW5mbyAqdGluZm87CiAJc3RydWN0CWFoZF90bW9kZV90c3RhdGUgKnRzdGF0ZTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKIAogCXJlc2V0X3NjYiA9IE5VTEw7CiAJcGF1c2VkID0gRkFMU0U7CkBAIC0yMjUxLDcgKzIyNTEsNyBAQAogCWlmIChwYXVzZWQpCiAJCWFoZF91bnBhdXNlKGFoZCk7CiAJaWYgKHdhaXQpIHsKLQkJREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCQlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhkb25lKTsKIAogCQlhaGQtPnBsYXRmb3JtX2RhdGEtPmVoX2RvbmUgPSAmZG9uZTsKIAkJYWhkX3VubG9jayhhaGQsICZmbGFncyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHgvYWljN3h4eF9vc20uYwppbmRleCA2NGM4Yjg4Li4zMzliODVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvYWljN3h4eC9haWM3eHh4X29zbS5jCisrKyBiL2RyaXZlcnMvc2NzaS9haWM3eHh4L2FpYzd4eHhfb3NtLmMKQEAgLTIzMzUsNyArMjMzNSw3IEBACiAJaWYgKHBhdXNlZCkKIAkJYWhjX3VucGF1c2UoYWhjKTsKIAlpZiAod2FpdCkgewotCQlERUNMQVJFX0NPTVBMRVRJT04oZG9uZSk7CisJCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCiAJCWFoYy0+cGxhdGZvcm1fZGF0YS0+ZWhfZG9uZSA9ICZkb25lOwogCQlhaGNfdW5sb2NrKGFoYywgJmZsYWdzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9haWM3eHh4X29sZC5jIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKaW5kZXggNWRjZWY0OC4uMTAzNTMzNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKKysrIGIvZHJpdmVycy9zY3NpL2FpYzd4eHhfb2xkLmMKQEAgLTI4NjIsNyArMjg2Miw3IEBACiAgICAgICBhaWNfZGV2LT5yX3RvdGFsKys7CiAgICAgICBwdHIgPSBhaWNfZGV2LT5yX2JpbnM7CiAgICAgfQotICAgIGlmKGNtZC0+ZGV2aWNlLT5zaW1wbGVfdGFncyAmJiBjbWQtPnJlcXVlc3QtPmZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKQorICAgIGlmKGNtZC0+ZGV2aWNlLT5zaW1wbGVfdGFncyAmJiBjbWQtPnJlcXVlc3QtPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKICAgICB7CiAgICAgICBhaWNfZGV2LT5iYXJyaWVyX3RvdGFsKys7CiAgICAgICBpZihzY2ItPnRhZ19hY3Rpb24gPT0gTVNHX09SREVSRURfUV9UQUcpCkBAIC0xMDE1OCw3ICsxMDE1OCw3IEBACiAgICAgLyogV2UgYWx3YXlzIGZvcmNlIFRFU1RfVU5JVF9SRUFEWSB0byB1bnRhZ2dlZCAqLwogICAgIGlmIChjbWQtPmNtbmRbMF0gIT0gVEVTVF9VTklUX1JFQURZICYmIHNkcHRyLT5zaW1wbGVfdGFncykKICAgICB7Ci0gICAgICBpZiAocmVxLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKyAgICAgIGlmIChyZXEtPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKICAgICAgIHsKIAlpZihzZHB0ci0+b3JkZXJlZF90YWdzKQogCXsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9nZHRoLmMgYi9kcml2ZXJzL3Njc2kvZ2R0aC5jCmluZGV4IDQzYWZkNDcuLjBmM2ViMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9nZHRoLmMKKysrIGIvZHJpdmVycy9zY3NpL2dkdGguYwpAQCAtNzI0LDcgKzcyNCw3IEBACiAgICAgICAgICAgICAgICAgICAgaW50IHRpbWVvdXQsIHUzMiAqaW5mbykKIHsKICAgICBTY3NpX0NtbmQgKnNjcDsKLSAgICBERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisgICAgREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAgICAgaW50IHJ2YWw7CiAKICAgICBzY3AgPSBrbWFsbG9jKHNpemVvZigqc2NwKSwgR0ZQX0tFUk5FTCk7CkBAIC03NjQsNyArNzY0LDcgQEAKIHsKICAgICBTY3NpX0NtbmQgKnNjcCA9IHNjc2lfYWxsb2NhdGVfZGV2aWNlKHNkZXYsIDEsIEZBTFNFKTsKICAgICB1bnNpZ25lZCBidWZmbGVuID0gZ2R0Y21kID8gc2l6ZW9mKGdkdGhfY21kX3N0cikgOiAwOwotICAgIERFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKyAgICBERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKICAgICBpbnQgcnZhbDsKIAogICAgIGlmICghc2NwKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL2lkZS1zY3NpLmMgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwppbmRleCA5NGQxZGU1Li4xNDI3YTQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYworKysgYi9kcml2ZXJzL3Njc2kvaWRlLXNjc2kuYwpAQCAtMzQ0LDcgKzM0NCw3IEBACiAJcGMtPmJ1ZmZlciA9IGJ1ZjsKIAlwYy0+Y1swXSA9IFJFUVVFU1RfU0VOU0U7CiAJcGMtPmNbNF0gPSBwYy0+cmVxdWVzdF90cmFuc2ZlciA9IHBjLT5idWZmZXJfc2l6ZSA9IFNDU0lfU0VOU0VfQlVGRkVSU0laRTsKLQlycS0+ZmxhZ3MgPSBSRVFfU0VOU0U7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfU0VOU0U7CiAJcGMtPnRpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9SRUFEWTsKIAkvKiBOT1RFISBTYXZlIHRoZSBmYWlsZWQgcGFja2V0IGNvbW1hbmQgaW4gInJxLT5idWZmZXIiICovCiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kLT5zcGVjaWFsOwpAQCAtMzk4LDEyICszOTgsMTIgQEAKIAlpbnQgZXJyb3JzID0gcnEtPmVycm9yczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JaWYgKCEocnEtPmZsYWdzICYgKFJFUV9TUEVDSUFMfFJFUV9TRU5TRSkpKSB7CisJaWYgKCFibGtfc3BlY2lhbF9yZXF1ZXN0KHJxKSAmJiAhYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7CiAJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5yc2Vjcyk7CiAJCXJldHVybiAwOwogCX0KIAlpZGVfZW5kX2RyaXZlX2NtZCAoZHJpdmUsIDAsIDApOwotCWlmIChycS0+ZmxhZ3MgJiBSRVFfU0VOU0UpIHsKKwlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocnEpKSB7CiAJCWlkZXNjc2lfcGNfdCAqb3BjID0gKGlkZXNjc2lfcGNfdCAqKSBycS0+YnVmZmVyOwogCQlpZiAobG9nKSB7CiAJCQlwcmludGsgKCJpZGUtc2NzaTogJXM6IHdyYXAgdXAgY2hlY2sgJWx1LCByc3QgPSAiLCBkcml2ZS0+bmFtZSwgb3BjLT5zY3NpX2NtZC0+c2VyaWFsX251bWJlcik7CkBAIC03MDgsMTEgKzcwOCwxMSBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVzY3NpX2RvX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCBzZWN0b3JfdCBibG9jaykKIHsKICNpZiBJREVTQ1NJX0RFQlVHX0xPRwotCXByaW50ayAoS0VSTl9JTkZPICJycV9zdGF0dXM6ICVkLCBkZXY6ICVzLCBjbWQ6ICV4LCBlcnJvcnM6ICVkXG4iLHJxLT5ycV9zdGF0dXMsIHJxLT5ycV9kaXNrLT5kaXNrX25hbWUscnEtPmNtZFswXSxycS0+ZXJyb3JzKTsKKwlwcmludGsgKEtFUk5fSU5GTyAiZGV2OiAlcywgY21kOiAleCwgZXJyb3JzOiAlZFxuIiwgcnEtPnJxX2Rpc2stPmRpc2tfbmFtZSxycS0+Y21kWzBdLHJxLT5lcnJvcnMpOwogCXByaW50ayAoS0VSTl9JTkZPICJzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCBjdXJyZW50X25yX3NlY3RvcnM6ICVkXG4iLHJxLT5zZWN0b3IscnEtPm5yX3NlY3RvcnMscnEtPmN1cnJlbnRfbnJfc2VjdG9ycyk7CiAjZW5kaWYgLyogSURFU0NTSV9ERUJVR19MT0cgKi8KIAotCWlmIChycS0+ZmxhZ3MgJiAoUkVRX1NQRUNJQUx8UkVRX1NFTlNFKSkgeworCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgfHwgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpIHsKIAkJcmV0dXJuIGlkZXNjc2lfaXNzdWVfcGMgKGRyaXZlLCAoaWRlc2NzaV9wY190ICopIHJxLT5zcGVjaWFsKTsKIAl9CiAJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGUtc2NzaTogdW5zdXAgY29tbWFuZCIpOwpAQCAtOTM4LDcgKzkzOCw3IEBACiAKIAlpZGVfaW5pdF9kcml2ZV9jbWQgKHJxKTsKIAlycS0+c3BlY2lhbCA9IChjaGFyICopIHBjOwotCXJxLT5mbGFncyA9IFJFUV9TUEVDSUFMOworCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1NQRUNJQUw7CiAJc3Bpbl91bmxvY2tfaXJxKGhvc3QtPmhvc3RfbG9jayk7CiAJcnEtPnJxX2Rpc2sgPSBzY3NpLT5kaXNrOwogCSh2b2lkKSBpZGVfZG9fZHJpdmVfY21kIChkcml2ZSwgcnEsIGlkZV9lbmQpOwpAQCAtOTkyLDcgKzk5Miw3IEBACiAJCSAqLwogCQlwcmludGsgKEtFUk5fRVJSICJpZGUtc2NzaTogY21kIGFib3J0ZWQhXG4iKTsKIAotCQlpZiAoc2NzaS0+cGMtPnJxLT5mbGFncyAmIFJFUV9TRU5TRSkKKwkJaWYgKGJsa19zZW5zZV9yZXF1ZXN0KHNjc2ktPnBjLT5ycSkpCiAJCQlrZnJlZShzY3NpLT5wYy0+YnVmZmVyKTsKIAkJa2ZyZWUoc2NzaS0+cGMtPnJxKTsKIAkJa2ZyZWUoc2NzaS0+cGMpOwpAQCAtMTA0Miw3ICsxMDQyLDcgQEAKIAkvKiBraWxsIGN1cnJlbnQgcmVxdWVzdCAqLwogCWJsa2Rldl9kZXF1ZXVlX3JlcXVlc3QocmVxKTsKIAllbmRfdGhhdF9yZXF1ZXN0X2xhc3QocmVxLCAwKTsKLQlpZiAocmVxLT5mbGFncyAmIFJFUV9TRU5TRSkKKwlpZiAoYmxrX3NlbnNlX3JlcXVlc3QocmVxKSkKIAkJa2ZyZWUoc2NzaS0+cGMtPmJ1ZmZlcik7CiAJa2ZyZWUoc2NzaS0+cGMpOwogCXNjc2ktPnBjID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9saWJzYXMvc2FzX3Njc2lfaG9zdC5jIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKaW5kZXggN2Y5ZTg5Yi4uZTQ2ZTc5MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKKysrIGIvZHJpdmVycy9zY3NpL2xpYnNhcy9zYXNfc2NzaV9ob3N0LmMKQEAgLTEyNiw3ICsxMjYsNyBAQAogCWVudW0gdGFza19hdHRyaWJ1dGUgdGEgPSBUQVNLX0FUVFJfU0lNUExFOwogCWlmIChjbWQtPnJlcXVlc3QgJiYgYmxrX3JxX3RhZ2dlZChjbWQtPnJlcXVlc3QpKSB7CiAJCWlmIChjbWQtPmRldmljZS0+b3JkZXJlZF90YWdzICYmCi0JCSAgICAoY21kLT5yZXF1ZXN0LT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikpCisJCSAgICAoY21kLT5yZXF1ZXN0LT5jbWRfZmxhZ3MgJiBSRVFfSEFSREJBUlJJRVIpKQogCQkJdGEgPSBUQVNLX0FUVFJfSE9ROwogCX0KIAlyZXR1cm4gdGE7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3Njc2kvcGx1dG8uYyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCmluZGV4IDBiZDljNjAuLmFhNjBhNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9wbHV0by5jCisrKyBiL2RyaXZlcnMvc2NzaS9wbHV0by5jCkBAIC02Nyw3ICs2Nyw2IEBACiAKIHN0YXRpYyB2b2lkIF9faW5pdCBwbHV0b19kZXRlY3Rfc2NzaV9kb25lKFNjc2lfQ21uZCAqU0NwbnQpCiB7Ci0JU0NwbnQtPnJlcXVlc3QtPnJxX3N0YXR1cyA9IFJRX1NDU0lfRE9ORTsKIAlQTE5EKCgiRGV0ZWN0IGRvbmUgJTA4bHhcbiIsIChsb25nKVNDcG50KSkKIAlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCAoJmZjc3MpKQogCQl1cCgmZmNfc2VtKTsKQEAgLTE2Niw3ICsxNjUsNyBAQAogCQkKIAkJU0NwbnQtPmNtZF9sZW4gPSBDT01NQU5EX1NJWkUoSU5RVUlSWSk7CiAJCi0JCVNDcG50LT5yZXF1ZXN0LT5ycV9zdGF0dXMgPSBSUV9TQ1NJX0JVU1k7CisJCVNDcG50LT5yZXF1ZXN0LT5jbWRfZmxhZ3MgJj0gflJFUV9TVEFSVEVEOwogCQkKIAkJU0NwbnQtPmRvbmUgPSBwbHV0b19kZXRlY3RfZG9uZTsKIAkJU0NwbnQtPnJlcXVlc3RfYnVmZmxlbiA9IDI1NjsKQEAgLTE3OCw3ICsxNzcsOCBAQAogCWZvciAocmV0cnkgPSAwOyByZXRyeSA8IDU7IHJldHJ5KyspIHsKIAkJZm9yIChpID0gMDsgaSA8IGZjc2NvdW50OyBpKyspIHsKIAkJCWlmICghZmNzW2ldLmZjKSBicmVhazsKLQkJCWlmIChmY3NbaV0uY21kLnJlcXVlc3QtPnJxX3N0YXR1cyAhPSBSUV9TQ1NJX0RPTkUpIHsKKwkJCWlmICghKGZjc1tpXS5jbWQucmVxdWVzdC0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpKSB7CisJCQkJZmNzW2ldLmNtZC5yZXF1ZXN0LT5jbWRfZmxhZ3MgfD0gUkVRX1NUQVJURUQ7CiAJCQkJZGlzYWJsZV9pcnEoZmNzW2ldLmZjLT5pcnEpOwogCQkJCVBMTkQoKCJxdWV1ZWNvbW1hbmQgJWQgJWRcbiIsIHJldHJ5LCBpKSkKIAkJCQlmY3Bfc2NzaV9xdWV1ZWNvbW1hbmQgKCYoZmNzW2ldLmNtZCksIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYyBiL2RyaXZlcnMvc2NzaS9xbGExMjgwLmMKaW5kZXggODk1Mzk5MS4uMzMyMTUxZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3FsYTEyODAuYworKysgYi9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCkBAIC04MTMsNyArODEzLDcgQEAKIAl1aW50MTZfdCBkYXRhOwogCXVuc2lnbmVkIGNoYXIgKmhhbmRsZTsKIAlpbnQgcmVzdWx0LCBpOwotCURFQ0xBUkVfQ09NUExFVElPTih3YWl0KTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3YWl0KTsKIAlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKIAogCWhhID0gKHN0cnVjdCBzY3NpX3FsYV9ob3N0ICopKENNRF9IT1NUKGNtZCktPmhvc3RkYXRhKTsKQEAgLTI0MDYsNyArMjQwNiw3IEBACiAJdWludDE2X3QgKm9wdHIsICppcHRyOwogCXVpbnQxNl90IF9faW9tZW0gKm1wdHI7CiAJdWludDE2X3QgZGF0YTsKLQlERUNMQVJFX0NPTVBMRVRJT04od2FpdCk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sod2FpdCk7CiAJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7CiAKIAlFTlRFUigicWxhMTI4MF9tYWlsYm94X2NvbW1hbmQiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpLmMgYi9kcml2ZXJzL3Njc2kvc2NzaS5jCmluZGV4IDdhMDU0ZjkuLmRhOTViY2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2kuYwpAQCAtNTkyLDEyICs1OTIsNiBAQAogCXJldHVybiBydG47CiB9CiAKLQotLyoKLSAqIFBlci1DUFUgSS9PIGNvbXBsZXRpb24gcXVldWUuCi0gKi8KLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGlzdF9oZWFkLCBzY3NpX2RvbmVfcSk7Ci0KIC8qKgogICogc2NzaV9yZXFfYWJvcnRfY21kIC0tIFJlcXVlc3QgY29tbWFuZCByZWNvdmVyeSBmb3IgdGhlIHNwZWNpZmllZCBjb21tYW5kCiAgKiBjbWQ6IHBvaW50ZXIgdG8gdGhlIFNDU0kgY29tbWFuZCBvZiBpbnRlcmVzdApAQCAtMTA2NSw3ICsxMDU5LDcgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZzZGV2LT5saXN0X2xvY2ssIGZsYWdzKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNjbWQsICZzZGV2LT5jbWRfbGlzdCwgbGlzdCkgewotCQlpZiAoc2NtZC0+cmVxdWVzdCAmJiBzY21kLT5yZXF1ZXN0LT5ycV9zdGF0dXMgIT0gUlFfSU5BQ1RJVkUpIHsKKwkJaWYgKHNjbWQtPnJlcXVlc3QpIHsKIAkJCS8qCiAJCQkgKiBJZiB3ZSBhcmUgdW5hYmxlIHRvIHJlbW92ZSB0aGUgdGltZXIsIGl0IG1lYW5zCiAJCQkgKiB0aGF0IHRoZSBjb21tYW5kIGhhcyBhbHJlYWR5IHRpbWVkIG91dCBvcgpAQCAtMTEwMiw3ICsxMDk2LDcgQEAKIAogc3RhdGljIGludCBfX2luaXQgaW5pdF9zY3NpKHZvaWQpCiB7Ci0JaW50IGVycm9yLCBpOworCWludCBlcnJvcjsKIAogCWVycm9yID0gc2NzaV9pbml0X3F1ZXVlKCk7CiAJaWYgKGVycm9yKQpAQCAtMTEyMyw5ICsxMTE3LDYgQEAKIAlpZiAoZXJyb3IpCiAJCWdvdG8gY2xlYW51cF9zeXNjdGw7CiAKLQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoaSkKLQkJSU5JVF9MSVNUX0hFQUQoJnBlcl9jcHUoc2NzaV9kb25lX3EsIGkpKTsKLQogCXNjc2lfbmV0bGlua19pbml0KCk7CiAKIAlwcmludGsoS0VSTl9OT1RJQ0UgIlNDU0kgc3Vic3lzdGVtIGluaXRpYWxpemVkXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zY3NpX2xpYi5jIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKaW5kZXggZDY3NDNiOS4uNzEwODQ3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKKysrIGIvZHJpdmVycy9zY3NpL3Njc2lfbGliLmMKQEAgLTgyLDcgKzgyLDcgQEAKIHsKIAlzdHJ1Y3Qgc2NzaV9jbW5kICpjbWQgPSByZXEtPnNwZWNpYWw7CiAKLQlyZXEtPmZsYWdzICY9IH5SRVFfRE9OVFBSRVA7CisJcmVxLT5jbWRfZmxhZ3MgJj0gflJFUV9ET05UUFJFUDsKIAlyZXEtPnNwZWNpYWwgPSBOVUxMOwogCiAJc2NzaV9wdXRfY29tbWFuZChjbWQpOwpAQCAtMTk2LDcgKzE5Niw4IEBACiAJcmVxLT5zZW5zZV9sZW4gPSAwOwogCXJlcS0+cmV0cmllcyA9IHJldHJpZXM7CiAJcmVxLT50aW1lb3V0ID0gdGltZW91dDsKLQlyZXEtPmZsYWdzIHw9IGZsYWdzIHwgUkVRX0JMT0NLX1BDIHwgUkVRX1NQRUNJQUwgfCBSRVFfUVVJRVQ7CisJcmVxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX0JMT0NLX1BDOworCXJlcS0+Y21kX2ZsYWdzIHw9IGZsYWdzIHwgUkVRX1FVSUVUIHwgUkVRX1BSRUVNUFQ7CiAKIAkvKgogCSAqIGhlYWQgaW5qZWN0aW9uICpyZXF1aXJlZCogaGVyZSBvdGhlcndpc2UgcXVpZXNjZSB3b24ndCB3b3JrCkBAIC0zOTcsNyArMzk4LDggQEAKIAlyZXEgPSBibGtfZ2V0X3JlcXVlc3Qoc2Rldi0+cmVxdWVzdF9xdWV1ZSwgd3JpdGUsIGdmcCk7CiAJaWYgKCFyZXEpCiAJCWdvdG8gZnJlZV9zZW5zZTsKLQlyZXEtPmZsYWdzIHw9IFJFUV9CTE9DS19QQyB8IFJFUV9RVUlFVDsKKwlyZXEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwogCiAJaWYgKHVzZV9zZykKIAkJZXJyID0gc2NzaV9yZXFfbWFwX3NnKHJlcSwgYnVmZmVyLCB1c2Vfc2csIGJ1ZmZsZW4sIGdmcCk7CkBAIC05MzMsNyArOTM1LDcgQEAKIAkJCQkJYnJlYWs7CiAJCQkJfQogCQkJfQotCQkJaWYgKCEocmVxLT5mbGFncyAmIFJFUV9RVUlFVCkpIHsKKwkJCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkgewogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCQkgICAgIkRldmljZSBub3QgcmVhZHk6ICIpOwogCQkJCXNjc2lfcHJpbnRfc2Vuc2VfaGRyKCIiLCAmc3NoZHIpOwpAQCAtOTQxLDcgKzk0Myw3IEBACiAJCQlzY3NpX2VuZF9yZXF1ZXN0KGNtZCwgMCwgdGhpc19jb3VudCwgMSk7CiAJCQlyZXR1cm47CiAJCWNhc2UgVk9MVU1FX09WRVJGTE9XOgotCQkJaWYgKCEocmVxLT5mbGFncyAmIFJFUV9RVUlFVCkpIHsKKwkJCWlmICghKHJlcS0+Y21kX2ZsYWdzICYgUkVRX1FVSUVUKSkgewogCQkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCQkgICAgIlZvbHVtZSBvdmVyZmxvdywgQ0RCOiAiKTsKIAkJCQlfX3Njc2lfcHJpbnRfY29tbWFuZChjbWQtPmNtbmQpOwpAQCAtOTYzLDcgKzk2NSw3IEBACiAJCXJldHVybjsKIAl9CiAJaWYgKHJlc3VsdCkgewotCQlpZiAoIShyZXEtPmZsYWdzICYgUkVRX1FVSUVUKSkgeworCQlpZiAoIShyZXEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpIHsKIAkJCXNjbWRfcHJpbnRrKEtFUk5fSU5GTywgY21kLAogCQkJCSAgICAiU0NTSSBlcnJvcjogcmV0dXJuIGNvZGUgPSAweCUwOHhcbiIsCiAJCQkJICAgIHJlc3VsdCk7CkBAIC05OTUsNyArOTk3LDcgQEAKIAkvKgogCSAqIGlmIHRoaXMgaXMgYSBycS0+ZGF0YSBiYXNlZCBSRVFfQkxPQ0tfUEMsIHNldHVwIGZvciBhIG5vbi1zZyB4ZmVyCiAJICovCi0JaWYgKChyZXEtPmZsYWdzICYgUkVRX0JMT0NLX1BDKSAmJiAhcmVxLT5iaW8pIHsKKwlpZiAoYmxrX3BjX3JlcXVlc3QocmVxKSAmJiAhcmVxLT5iaW8pIHsKIAkJY21kLT5yZXF1ZXN0X2J1ZmZsZW4gPSByZXEtPmRhdGFfbGVuOwogCQljbWQtPnJlcXVlc3RfYnVmZmVyID0gcmVxLT5kYXRhOwogCQlyZXEtPmJ1ZmZlciA9IHJlcS0+ZGF0YTsKQEAgLTExMzksMTMgKzExNDEsMTIgQEAKIAkgKiB0aGVzZSB0d28gY2FzZXMgZGlmZmVyZW50bHkuICBXZSBkaWZmZXJlbnRpYXRlIGJ5IGxvb2tpbmcKIAkgKiBhdCByZXF1ZXN0LT5jbWQsIGFzIHRoaXMgdGVsbHMgdXMgdGhlIHJlYWwgc3RvcnkuCiAJICovCi0JaWYgKHJlcS0+ZmxhZ3MgJiBSRVFfU1BFQ0lBTCAmJiByZXEtPnNwZWNpYWwpIHsKKwlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChyZXEpICYmIHJlcS0+c3BlY2lhbCkKIAkJY21kID0gcmVxLT5zcGVjaWFsOwotCX0gZWxzZSBpZiAocmVxLT5mbGFncyAmIChSRVFfQ01EIHwgUkVRX0JMT0NLX1BDKSkgewotCi0JCWlmKHVubGlrZWx5KHNwZWNpYWxzX29ubHkpICYmICEocmVxLT5mbGFncyAmIFJFUV9TUEVDSUFMKSkgewotCQkJaWYoc3BlY2lhbHNfb25seSA9PSBTREVWX1FVSUVTQ0UgfHwKLQkJCQkJc3BlY2lhbHNfb25seSA9PSBTREVWX0JMT0NLKQorCWVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJlcSkgfHwgYmxrX2ZzX3JlcXVlc3QocmVxKSkgeworCQlpZiAodW5saWtlbHkoc3BlY2lhbHNfb25seSkgJiYgIShyZXEtPmNtZF9mbGFncyAmIFJFUV9QUkVFTVBUKSl7CisJCQlpZiAoc3BlY2lhbHNfb25seSA9PSBTREVWX1FVSUVTQ0UgfHwKKwkJCSAgICBzcGVjaWFsc19vbmx5ID09IFNERVZfQkxPQ0spCiAJCQkJZ290byBkZWZlcjsKIAkJCQogCQkJc2Rldl9wcmludGsoS0VSTl9FUlIsIHNkZXYsCkBAIC0xMTUzLDcgKzExNTQsNiBAQAogCQkJZ290byBraWxsOwogCQl9CiAJCQkKLQkJCQogCQkvKgogCQkgKiBOb3cgdHJ5IGFuZCBmaW5kIGEgY29tbWFuZCBibG9jayB0aGF0IHdlIGNhbiB1c2UuCiAJCSAqLwpAQCAtMTE4NCw3ICsxMTg0LDcgQEAKIAkgKiBsb2NrLiAgV2UgaG9wZSBSRVFfU1RBUlRFRCBwcmV2ZW50cyBhbnl0aGluZyB1bnRvd2FyZCBmcm9tCiAJICogaGFwcGVuaW5nIG5vdy4KIAkgKi8KLQlpZiAocmVxLT5mbGFncyAmIChSRVFfQ01EIHwgUkVRX0JMT0NLX1BDKSkgeworCWlmIChibGtfZnNfcmVxdWVzdChyZXEpIHx8IGJsa19wY19yZXF1ZXN0KHJlcSkpIHsKIAkJaW50IHJldDsKIAogCQkvKgpAQCAtMTIxNiw3ICsxMjE2LDcgQEAKIAkJLyoKIAkJICogSW5pdGlhbGl6ZSB0aGUgYWN0dWFsIFNDU0kgY29tbWFuZCBmb3IgdGhpcyByZXF1ZXN0LgogCQkgKi8KLQkJaWYgKHJlcS0+ZmxhZ3MgJiBSRVFfQkxPQ0tfUEMpIHsKKwkJaWYgKGJsa19wY19yZXF1ZXN0KHJlcSkpIHsKIAkJCXNjc2lfc2V0dXBfYmxrX3BjX2NtbmQoY21kKTsKIAkJfSBlbHNlIGlmIChyZXEtPnJxX2Rpc2spIHsKIAkJCXN0cnVjdCBzY3NpX2RyaXZlciAqZHJ2OwpAQCAtMTIzMyw3ICsxMjMzLDcgQEAKIAkvKgogCSAqIFRoZSByZXF1ZXN0IGlzIG5vdyBwcmVwcGVkLCBubyBuZWVkIHRvIGNvbWUgYmFjayBoZXJlCiAJICovCi0JcmVxLT5mbGFncyB8PSBSRVFfRE9OVFBSRVA7CisJcmVxLT5jbWRfZmxhZ3MgfD0gUkVRX0RPTlRQUkVQOwogCXJldHVybiBCTEtQUkVQX09LOwogCiAgZGVmZXI6CkBAIC0xNDU0LDggKzE0NTQsOSBAQAogCQlpZiAodW5saWtlbHkoY21kID09IE5VTEwpKSB7CiAJCQlwcmludGsoS0VSTl9DUklUICJpbXBvc3NpYmxlIHJlcXVlc3QgaW4gJXMuXG4iCiAJCQkJCSAicGxlYXNlIG1haWwgYSBzdGFjayB0cmFjZSB0byAiCi0JCQkJCSAibGludXgtc2NzaUB2Z2VyLmtlcm5lbC5vcmciLAorCQkJCQkgImxpbnV4LXNjc2lAdmdlci5rZXJuZWwub3JnXG4iLAogCQkJCQkgX19GVU5DVElPTl9fKTsKKwkJCWJsa19kdW1wX3JxX2ZsYWdzKHJlcSwgImZvbyIpOwogCQkJQlVHKCk7CiAJCX0KIAkJc3Bpbl9sb2NrKHNob3N0LT5ob3N0X2xvY2spOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NkLmMgYi9kcml2ZXJzL3Njc2kvc2QuYwppbmRleCA2MzhjZmY0Li4xMGJjOTljOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3NkLmMKKysrIGIvZHJpdmVycy9zY3NpL3NkLmMKQEAgLTQ0Myw4ICs0NDMsNyBAQAogCQlTQ3BudC0+Y21uZFswXSA9IFJFQURfNjsKIAkJU0NwbnQtPnNjX2RhdGFfZGlyZWN0aW9uID0gRE1BX0ZST01fREVWSUNFOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAic2Q6IFVua25vd24gY29tbWFuZCAlbHhcbiIsIHJxLT5mbGFncyk7Ci0vKiBvdmVya2lsbCAJcGFuaWMoIlVua25vd24gc2QgY29tbWFuZCAlbHhcbiIsIHJxLT5mbGFncyk7ICovCisJCXByaW50ayhLRVJOX0VSUiAic2Q6IFVua25vd24gY29tbWFuZCAleFxuIiwgcnEtPmNtZF9mbGFncyk7CiAJCXJldHVybiAwOwogCX0KIApAQCAtODQwLDcgKzgzOSw3IEBACiBzdGF0aWMgdm9pZCBzZF9wcmVwYXJlX2ZsdXNoKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCW1lbXNldChycS0+Y21kLCAwLCBzaXplb2YocnEtPmNtZCkpOwotCXJxLT5mbGFncyB8PSBSRVFfQkxPQ0tfUEM7CisJcnEtPmNtZF90eXBlID0gUkVRX1RZUEVfQkxPQ0tfUEM7CiAJcnEtPnRpbWVvdXQgPSBTRF9USU1FT1VUOwogCXJxLT5jbWRbMF0gPSBTWU5DSFJPTklaRV9DQUNIRTsKIAlycS0+Y21kX2xlbiA9IDEwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3NpbTcxMC5jIGIvZHJpdmVycy9zY3NpL3NpbTcxMC5jCmluZGV4IGIyN2U4NTQuLjU1MWJhY2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zaW03MTAuYworKysgYi9kcml2ZXJzL3Njc2kvc2ltNzEwLmMKQEAgLTI4Miw2ICsyODIsNyBAQAogCXsgIkhXUDBDODAiIH0sCiAJeyAiIiB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShlaXNhLCBzaW03MTBfZWlzYV9pZHMpOwogCiBzdGF0aWMgX19pbml0IGludAogc2ltNzEwX2Vpc2FfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jIGIvZHJpdmVycy9zY3NpL3N1bjNfTkNSNTM4MC5jCmluZGV4IDJmODA3M2IuLjdmOWJjZWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zdW4zX05DUjUzODAuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19OQ1I1MzgwLmMKQEAgLTIwMTcsNyArMjAxNyw3IEBACiAJCWlmKChjb3VudCA+IFNVTjNfRE1BX01JTlNJWkUpICYmIChzdW4zX2RtYV9zZXR1cF9kb25lCiAJCQkJCQkgICE9IGNtZCkpCiAJCXsKLQkJCWlmKGNtZC0+cmVxdWVzdC0+ZmxhZ3MgJiBSRVFfQ01EKSB7CisJCQlpZihibGtfZnNfcmVxdWVzdChjbWQtPnJlcXVlc3QpKSB7CiAJCQkJc3VuM3Njc2lfZG1hX3NldHVwKGQsIGNvdW50LAogCQkJCQkJICAgcnFfZGF0YV9kaXIoY21kLT5yZXF1ZXN0KSk7CiAJCQkJc3VuM19kbWFfc2V0dXBfZG9uZSA9IGNtZDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2kuYwppbmRleCA4MzcxNzM0Li40NGE5OWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3Njc2kvc3VuM19zY3NpLmMKKysrIGIvZHJpdmVycy9zY3NpL3N1bjNfc2NzaS5jCkBAIC01MjQsNyArNTI0LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsIFNjc2lfQ21uZCAqY21kLAogCQkJCSAgICBpbnQgd3JpdGVfZmxhZykKIHsKLQlpZihjbWQtPnJlcXVlc3QtPmZsYWdzICYgUkVRX0NNRCkKKwlpZihibGtfZnNfcmVxdWVzdChjbWQtPnJlcXVlc3QpKQogIAkJcmV0dXJuIHdhbnRlZDsKIAllbHNlCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYyBiL2RyaXZlcnMvc2NzaS9zdW4zX3Njc2lfdm1lLmMKaW5kZXggMDA4YTgyYS4uZjU3NDJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zY3NpL3N1bjNfc2NzaV92bWUuYworKysgYi9kcml2ZXJzL3Njc2kvc3VuM19zY3NpX3ZtZS5jCkBAIC00NTgsNyArNDU4LDcgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzdW4zc2NzaV9kbWFfeGZlcl9sZW4odW5zaWduZWQgbG9uZyB3YW50ZWQsIFNjc2lfQ21uZCAqY21kLAogCQkJCSAgICBpbnQgd3JpdGVfZmxhZykKIHsKLQlpZihjbWQtPnJlcXVlc3QtPmZsYWdzICYgUkVRX0NNRCkKKwlpZihibGtfZnNfcmVxdWVzdChjbWQtPnJlcXVlc3QpKQogIAkJcmV0dXJuIHdhbnRlZDsKIAllbHNlCiAJCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9hY29ybi5jIGIvZHJpdmVycy9zZXJpYWwvODI1MF9hY29ybi5jCmluZGV4IDMyYWYzNjUuLmVmOGNjOGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2VyaWFsLzgyNTBfYWNvcm4uYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2Fjb3JuLmMKQEAgLTM1LDYgKzM1LDcgQEAKIHN0cnVjdCBzZXJpYWxfY2FyZF9pbmZvIHsKIAl1bnNpZ25lZCBpbnQJbnVtX3BvcnRzOwogCWludAkJcG9ydHNbTUFYX1BPUlRTXTsKKwl2b2lkIF9faW9tZW0gKnZhZGRyOwogfTsKIAogc3RhdGljIGludCBfX2RldmluaXQKQEAgLTQ0LDcgKzQ1LDYgQEAKIAlzdHJ1Y3Qgc2VyaWFsX2NhcmRfdHlwZSAqdHlwZSA9IGlkLT5kYXRhOwogCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKIAl1bnNpZ25lZCBsb25nIGJ1c19hZGRyOwotCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqdmlydF9hZGRyOwogCXVuc2lnbmVkIGludCBpOwogCiAJaW5mbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzZXJpYWxfY2FyZF9pbmZvKSwgR0ZQX0tFUk5FTCk7CkBAIC01NSw4ICs1NSw4IEBACiAJaW5mby0+bnVtX3BvcnRzID0gdHlwZS0+bnVtX3BvcnRzOwogCiAJYnVzX2FkZHIgPSBlY2FyZF9yZXNvdXJjZV9zdGFydChlYywgdHlwZS0+dHlwZSk7Ci0JdmlydF9hZGRyID0gaW9yZW1hcChidXNfYWRkciwgZWNhcmRfcmVzb3VyY2VfbGVuKGVjLCB0eXBlLT50eXBlKSk7Ci0JaWYgKCF2aXJ0X2FkZHIpIHsKKwlpbmZvLT52YWRkciA9IGlvcmVtYXAoYnVzX2FkZHIsIGVjYXJkX3Jlc291cmNlX2xlbihlYywgdHlwZS0+dHlwZSkpOworCWlmICghaW5mby0+dmFkZHIpIHsKIAkJa2ZyZWUoaW5mbyk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KQEAgLTcyLDcgKzcyLDcgQEAKIAlwb3J0LmRldgk9ICZlYy0+ZGV2OwogCiAJZm9yIChpID0gMDsgaSA8IGluZm8tPm51bV9wb3J0czsgaSArKykgewotCQlwb3J0Lm1lbWJhc2UgPSB2aXJ0X2FkZHIgKyB0eXBlLT5vZmZzZXRbaV07CisJCXBvcnQubWVtYmFzZSA9IGluZm8tPnZhZGRyICsgdHlwZS0+b2Zmc2V0W2ldOwogCQlwb3J0Lm1hcGJhc2UgPSBidXNfYWRkciArIHR5cGUtPm9mZnNldFtpXTsKIAogCQlpbmZvLT5wb3J0c1tpXSA9IHNlcmlhbDgyNTBfcmVnaXN0ZXJfcG9ydCgmcG9ydCk7CkBAIC05Miw2ICs5Miw3IEBACiAJCWlmIChpbmZvLT5wb3J0c1tpXSA+IDApCiAJCQlzZXJpYWw4MjUwX3VucmVnaXN0ZXJfcG9ydChpbmZvLT5wb3J0c1tpXSk7CiAKKwlpb3VubWFwKGluZm8tPnZhZGRyKTsKIAlrZnJlZShpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYyBiL2RyaXZlcnMvc2VyaWFsLzgyNTBfZ3NjLmMKaW5kZXggOTEzYzcxYy4uMWViZTZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvODI1MF9nc2MuYworKysgYi9kcml2ZXJzL3NlcmlhbC84MjUwX2dzYy5jCkBAIC02NCw2ICs2NCw3IEBACiAJZXJyID0gc2VyaWFsODI1MF9yZWdpc3Rlcl9wb3J0KCZwb3J0KTsKIAlpZiAoZXJyIDwgMCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJzZXJpYWw4MjUwX3JlZ2lzdGVyX3BvcnQgcmV0dXJuZWQgZXJyb3IgJWRcbiIsIGVycik7CisJCWlvdW5tYXAocG9ydC5tZW1iYXNlKTsKIAkJcmV0dXJuIGVycjsKIAl9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZyBiL2RyaXZlcnMvc2VyaWFsL0tjb25maWcKaW5kZXggNWI0OGFjMi4uZDkyNjI3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvS2NvbmZpZworKysgYi9kcml2ZXJzL3NlcmlhbC9LY29uZmlnCkBAIC0yOTUsNyArMjk1LDcgQEAKIAkgIEV2ZW4gaWYgeW91IHNheSBZIGhlcmUsIHRoZSBjdXJyZW50bHkgdmlzaWJsZSBmcmFtZWJ1ZmZlciBjb25zb2xlCiAJICAoL2Rldi90dHkwKSB3aWxsIHN0aWxsIGJlIHVzZWQgYXMgdGhlIHN5c3RlbSBjb25zb2xlIGJ5IGRlZmF1bHQsIGJ1dAogCSAgeW91IGNhbiBhbHRlciB0aGF0IHVzaW5nIGEga2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24gc3VjaCBhcwotCSAgImNvbnNvbGU9dHR5QU0wIi4gKFRyeSAibWFuIGJvb3RwYXJhbSIgb3Igc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCisJICAiY29uc29sZT10dHlBTUEwIi4gKFRyeSAibWFuIGJvb3RwYXJhbSIgb3Igc2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mCiAJICB5b3VyIGJvb3QgbG9hZGVyIChsaWxvIG9yIGxvYWRsaW4pIGFib3V0IGhvdyB0byBwYXNzIG9wdGlvbnMgdG8gdGhlCiAJICBrZXJuZWwgYXQgYm9vdCB0aW1lLikKIApAQCAtNjQyLDEyICs2NDIsMTcgQEAKIAlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQogCiBjb25maWcgU0VSSUFMX1NIX1NDSQotCXRyaXN0YXRlICJTSCBTQ0koRikgc2VyaWFsIHBvcnQgc3VwcG9ydCIKKwl0cmlzdGF0ZSAiU3VwZXJIIFNDSShGKSBzZXJpYWwgcG9ydCBzdXBwb3J0IgogCWRlcGVuZHMgb24gU1VQRVJIIHx8IEg4MzAwCiAJc2VsZWN0IFNFUklBTF9DT1JFCiAKK2NvbmZpZyBTRVJJQUxfU0hfU0NJX05SX1VBUlRTCisJaW50ICJNYXhpbXVtIG51bWJlciBvZiBTQ0koRikgc2VyaWFsIHBvcnRzIgorCWRlcGVuZHMgb24gU0VSSUFMX1NIX1NDSQorCWRlZmF1bHQgIjIiCisKIGNvbmZpZyBTRVJJQUxfU0hfU0NJX0NPTlNPTEUKLQlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIFNIIFNDSShGKSIKKwlib29sICJTdXBwb3J0IGZvciBjb25zb2xlIG9uIFN1cGVySCBTQ0koRikiCiAJZGVwZW5kcyBvbiBTRVJJQUxfU0hfU0NJPXkKIAlzZWxlY3QgU0VSSUFMX0NPUkVfQ09OU09MRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9hdDkxX3NlcmlhbC5jIGIvZHJpdmVycy9zZXJpYWwvYXQ5MV9zZXJpYWwuYwppbmRleCA1NGM2YjJhLi5iZjRiZjEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9hdDkxX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL2F0OTFfc2VyaWFsLmMKQEAgLTEzOSw3ICsxMzksNyBAQAogCQkgKiBBVDkxUk05MjAwIEVycmF0YSAjMzk6IFJUUzAgaXMgbm90IGludGVybmFsbHkgY29ubmVjdGVkIHRvIFBBMjEuCiAJCSAqICBXZSBuZWVkIHRvIGRyaXZlIHRoZSBwaW4gbWFudWFsbHkuCiAJCSAqLwotCQlpZiAocG9ydC0+bWFwYmFzZSA9PSBBVDkxX0JBU0VfVVMwKSB7CisJCWlmIChwb3J0LT5tYXBiYXNlID09IEFUOTFSTTkyMDBfQkFTRV9VUzApIHsKIAkJCWlmIChtY3RybCAmIFRJT0NNX1JUUykKIAkJCQlhdDkxX3NldF9ncGlvX3ZhbHVlKEFUOTFfUElOX1BBMjEsIDApOwogCQkJZWxzZQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYyBiL2RyaXZlcnMvc2VyaWFsL2lvYzRfc2VyaWFsLmMKaW5kZXggNTc2Y2ExZS4uNWVjNDcxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaW9jNF9zZXJpYWwuYworKysgYi9kcml2ZXJzL3NlcmlhbC9pb2M0X3NlcmlhbC5jCkBAIC0yNjg1LDYgKzI2ODUsNyBAQAogCWlmIChzb2Z0KSB7CiAJCWZyZWVfaXJxKGNvbnRyb2wtPmljX2lycSwgc29mdCk7CiAJCWlmIChzb2Z0LT5pc19pb2M0X3NlcmlhbF9hZGRyKSB7CisJCQlpb3VubWFwKHNvZnQtPmlzX2lvYzRfc2VyaWFsX2FkZHIpOwogCQkJcmVsZWFzZV9yZWdpb24oKHVuc2lnbmVkIGxvbmcpCiAJCQkgICAgIHNvZnQtPmlzX2lvYzRfc2VyaWFsX2FkZHIsCiAJCQkJc2l6ZW9mKHN0cnVjdCBpb2M0X3NlcmlhbCkpOwpAQCAtMjg4Nyw2ICsyODg4LDggQEAKIG91dDM6CiAJa2ZyZWUoY29udHJvbCk7CiBvdXQyOgorCWlmIChzZXJpYWwpCisJCWlvdW5tYXAoc2VyaWFsKTsKIAlyZWxlYXNlX3JlZ2lvbih0bXBfYWRkcjEsIHNpemVvZihzdHJ1Y3QgaW9jNF9zZXJpYWwpKTsKIG91dDE6CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2lwMjJ6aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKaW5kZXggNWZmMjY5Zi4uZGJmMTNjMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvaXAyMnppbG9nLmMKQEAgLTEyMjksMTMgKzEyMjksMjcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCBpcDIyemlsb2dfZXhpdCh2b2lkKQogewogCWludCBpOworCXN0cnVjdCB1YXJ0X2lwMjJ6aWxvZ19wb3J0ICp1cDsKIAogCWZvciAoaSA9IDA7IGkgPCBOVU1fQ0hBTk5FTFM7IGkrKykgewotCQlzdHJ1Y3QgdWFydF9pcDIyemlsb2dfcG9ydCAqdXAgPSAmaXAyMnppbG9nX3BvcnRfdGFibGVbaV07CisJCXVwID0gJmlwMjJ6aWxvZ19wb3J0X3RhYmxlW2ldOwogCiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZpcDIyemlsb2dfcmVnLCAmdXAtPnBvcnQpOwogCX0KIAorCS8qIEZyZWUgSU8gbWVtICovCisJdXAgPSAmaXAyMnppbG9nX3BvcnRfdGFibGVbMF07CisJZm9yIChpID0gMDsgaSA8IE5VTV9JUDIyWklMT0c7IGkrKykgeworCQlpZiAodXBbKGkgKiAyKSArIDBdLnBvcnQubWFwYmFzZSkgeworCQkgICBpb3VubWFwKCh2b2lkKil1cFsoaSAqIDIpICsgMF0ucG9ydC5tYXBiYXNlKTsKKwkJICAgdXBbKGkgKiAyKSArIDBdLnBvcnQubWFwYmFzZSA9IDA7CisJCX0KKwkJaWYgKHVwWyhpICogMikgKyAxXS5wb3J0Lm1hcGJhc2UpIHsKKwkJCWlvdW5tYXAoKHZvaWQqKXVwWyhpICogMikgKyAxXS5wb3J0Lm1hcGJhc2UpOworCQkJdXBbKGkgKiAyKSArIDFdLnBvcnQubWFwYmFzZSA9IDA7CisJCX0KKwl9CisKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZpcDIyemlsb2dfcmVnKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCA3NzA4ZTVkLi5kYmFkMGUzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtMzM4LDE0ICszMzgsMjMgQEAKIHN0YXRpYyBpbnQKIG1wYzUyeHhfdWFydF9yZXF1ZXN0X3BvcnQoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKKwlpbnQgZXJyOworCiAJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0lPUkVNQVApIC8qIE5lZWQgdG8gcmVtYXAgPyAqLwogCQlwb3J0LT5tZW1iYXNlID0gaW9yZW1hcChwb3J0LT5tYXBiYXNlLCBNUEM1Mnh4X1BTQ19TSVpFKTsKIAogCWlmICghcG9ydC0+bWVtYmFzZSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlyZXR1cm4gcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIE1QQzUyeHhfUFNDX1NJWkUsCisJZXJyID0gcmVxdWVzdF9tZW1fcmVnaW9uKHBvcnQtPm1hcGJhc2UsIE1QQzUyeHhfUFNDX1NJWkUsCiAJCQkibXBjNTJ4eF9wc2NfdWFydCIpICE9IE5VTEwgPyAwIDogLUVCVVNZOworCisJaWYgKGVyciAmJiAocG9ydC0+ZmxhZ3MgJiBVUEZfSU9SRU1BUCkpIHsKKwkJaW91bm1hcChwb3J0LT5tZW1iYXNlKTsKKwkJcG9ydC0+bWVtYmFzZSA9IE5VTEw7CisJfQorCisJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL21wc2MuYyBiL2RyaXZlcnMvc2VyaWFsL21wc2MuYwppbmRleCA2M2QyYTY2Li43MDQyNDNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcHNjLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXBzYy5jCkBAIC0xODkzLDYgKzE4OTMsMTAgQEAKIAl9CiAJZWxzZSB7CiAJCW1wc2NfcmVzb3VyY2VfZXJyKCJTRE1BIGJhc2UiKTsKKwkJaWYgKHBpLT5tcHNjX2Jhc2UpIHsKKwkJCWlvdW5tYXAocGktPm1wc2NfYmFzZSk7CisJCQlwaS0+bXBzY19iYXNlID0gTlVMTDsKKwkJfQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTE5MDUsNiArMTkwOSwxNCBAQAogCX0KIAllbHNlIHsKIAkJbXBzY19yZXNvdXJjZV9lcnIoIkJSRyBiYXNlIik7CisJCWlmIChwaS0+bXBzY19iYXNlKSB7CisJCQlpb3VubWFwKHBpLT5tcHNjX2Jhc2UpOworCQkJcGktPm1wc2NfYmFzZSA9IE5VTEw7CisJCX0KKwkJaWYgKHBpLT5zZG1hX2Jhc2UpIHsKKwkJCWlvdW5tYXAocGktPnNkbWFfYmFzZSk7CisJCQlwaS0+c2RtYV9iYXNlID0gTlVMTDsKKwkJfQogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL211eC5jIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKaW5kZXggNGExYzk5OC4uYWE4MTlkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvbXV4LmMKKysrIGIvZHJpdmVycy9zZXJpYWwvbXV4LmMKQEAgLTUyMSw2ICs1MjEsOCBAQAogCiAJZm9yIChpID0gMDsgaSA8IHBvcnRfY250OyBpKyspIHsKIAkJdWFydF9yZW1vdmVfb25lX3BvcnQoJm11eF9kcml2ZXIsICZtdXhfcG9ydHNbaV0pOworCQlpZiAobXV4X3BvcnRzW2ldLm1lbWJhc2UpCisJCQlpb3VubWFwKG11eF9wb3J0c1tpXS5tZW1iYXNlKTsKIAl9CiAKIAl1YXJ0X3VucmVnaXN0ZXJfZHJpdmVyKCZtdXhfZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL3NoLXNjaS5jIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKaW5kZXggY2JlZGUwNi4uZjMzNmJhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogU3VwZXJIIG9uLWNoaXAgc2VyaWFsIG1vZHVsZSBzdXBwb3J0LiAgKFNDSSB3aXRoIG5vIEZJRk8gLyB3aXRoIEZJRk8pCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCAgUGF1bCBNdW5kdAorICogIENvcHlyaWdodCAoQykgMjAwMiAtIDIwMDYgIFBhdWwgTXVuZHQKICAqCiAgKiBiYXNlZCBvZmYgb2YgdGhlIG9sZCBkcml2ZXJzL2NoYXIvc2gtc2NpLmMgYnk6CiAgKgpAQCAtMjAsMTAgKzIwLDkgQEAKIAogI3VuZGVmIERFQlVHCiAKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotI2luY2x1ZGUgPGxpbnV4L3NpZ25hbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KQEAgLTMyLDM0ICszMSwyNSBAQAogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzcnEuaD4KLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPgotI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2NvbnNvbGUuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KLSNpbmNsdWRlIDxsaW51eC9nZW5lcmljX3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaWZkZWYgQ09ORklHX0NQVV9GUkVRCiAjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KICNpbmNsdWRlIDxsaW51eC9jcHVmcmVxLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaXJxLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLQogI2lmIGRlZmluZWQoQ09ORklHX1NVUEVSSCkgJiYgIWRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQogI2luY2x1ZGUgPGFzbS9jbG9jay5oPgorI2luY2x1ZGUgPGFzbS9zaF9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL2tnZGIuaD4KICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MKLSNpbmNsdWRlIDxhc20vc2hfYmlvcy5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL3NjaS5oPgogCiAjaWYgZGVmaW5lZChDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFKSAmJiBkZWZpbmVkKENPTkZJR19NQUdJQ19TWVNSUSkKICNkZWZpbmUgU1VQUE9SVF9TWVNSUQpAQCAtNjcsMzYgKzU3LDUxIEBACiAKICNpbmNsdWRlICJzaC1zY2kuaCIKIAotI2lmZGVmIENPTkZJR19TSF9LR0RCCi0jaW5jbHVkZSA8YXNtL2tnZGIuaD4KK3N0cnVjdCBzY2lfcG9ydCB7CisJc3RydWN0IHVhcnRfcG9ydAlwb3J0OwogCi1zdGF0aWMgaW50IGtnZGJfZ2V0X2NoYXIoc3RydWN0IHNjaV9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIGtnZGJfcHV0X2NoYXIoc3RydWN0IHNjaV9wb3J0ICpwb3J0LCBjaGFyIGMpOwotc3RhdGljIHZvaWQga2dkYl9oYW5kbGVfZXJyb3Ioc3RydWN0IHNjaV9wb3J0ICpwb3J0KTsKKwkvKiBQb3J0IHR5cGUgKi8KKwl1bnNpZ25lZCBpbnQJCXR5cGU7CisKKwkvKiBQb3J0IElSUXM6IEVSSSwgUlhJLCBUWEksIEJSSSAob3B0aW9uYWwpICovCisJdW5zaWduZWQgaW50CQlpcnFzW1NDSXhfTlJfSVJRU107IAorCisJLyogUG9ydCBwaW4gY29uZmlndXJhdGlvbiAqLworCXZvaWQJCQkoKmluaXRfcGlucykoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwKKwkJCQkJICAgICB1bnNpZ25lZCBpbnQgY2ZsYWcpOworCisJLyogUG9ydCBlbmFibGUgY2FsbGJhY2sgKi8KKwl2b2lkCQkJKCplbmFibGUpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOworCisJLyogUG9ydCBkaXNhYmxlIGNhbGxiYWNrICovCisJdm9pZAkJCSgqZGlzYWJsZSkoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CisKKwkvKiBCcmVhayB0aW1lciAqLworCXN0cnVjdCB0aW1lcl9saXN0CWJyZWFrX3RpbWVyOworCWludAkJCWJyZWFrX2ZsYWc7Cit9OworCisjaWZkZWYgQ09ORklHX1NIX0tHREIKIHN0YXRpYyBzdHJ1Y3Qgc2NpX3BvcnQgKmtnZGJfc2NpX3BvcnQ7Ci0jZW5kaWYgLyogQ09ORklHX1NIX0tHREIgKi8KKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRQotc3RhdGljIHN0cnVjdCBzY2lfcG9ydCAqc2VyaWFsX2NvbnNvbGVfcG9ydCA9IDA7Ci0jZW5kaWYgLyogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLworc3RhdGljIHN0cnVjdCBzY2lfcG9ydCAqc2VyaWFsX2NvbnNvbGVfcG9ydDsKKyNlbmRpZgogCiAvKiBGdW5jdGlvbiBwcm90b3R5cGVzICovCiBzdGF0aWMgdm9pZCBzY2lfc3RvcF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHNjaV9zdGFydF90eChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHNjaV9zdGFydF9yeChzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgdHR5X3N0YXJ0KTsKLXN0YXRpYyB2b2lkIHNjaV9zdG9wX3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpOwotc3RhdGljIGludCBzY2lfcmVxdWVzdF9pcnEoc3RydWN0IHNjaV9wb3J0ICpwb3J0KTsKLXN0YXRpYyB2b2lkIHNjaV9mcmVlX2lycShzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQpOwogCi1zdGF0aWMgc3RydWN0IHNjaV9wb3J0IHNjaV9wb3J0c1tdOworI2RlZmluZSBTQ0lfTlBPUlRTIENPTkZJR19TRVJJQUxfU0hfU0NJX05SX1VBUlRTCisKK3N0YXRpYyBzdHJ1Y3Qgc2NpX3BvcnQgc2NpX3BvcnRzW1NDSV9OUE9SVFNdOwogc3RhdGljIHN0cnVjdCB1YXJ0X2RyaXZlciBzY2lfdWFydF9kcml2ZXI7CiAKLSNkZWZpbmUgU0NJX05QT1JUUyBzY2lfdWFydF9kcml2ZXIubnIKLQotI2lmIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpIHx8IGRlZmluZWQoQ09ORklHX1NIX0tHREIpCi0KLXN0YXRpYyB2b2lkIGhhbmRsZV9lcnJvcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQotewkJCQkvKiBDbGVhciBlcnJvciBmbGFncyAqLworI2lmIGRlZmluZWQoQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSkgJiYgXAorICAgIGRlZmluZWQoQ09ORklHX1NIX1NUQU5EQVJEX0JJT1MpIHx8IGRlZmluZWQoQ09ORklHX1NIX0tHREIpCitzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2Vycm9yKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJLyogQ2xlYXIgZXJyb3IgZmxhZ3MgKi8KIAlzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9FUlJPUl9DTEVBUihwb3J0KSk7CiB9CiAKQEAgLTEwNiw4ICsxMTEsOCBAQAogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKIAlpbnQgYzsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLSAgICAgICAgZG8geworCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisJZG8gewogCQlzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwogCQlpZiAoc3RhdHVzICYgU0N4U1JfRVJST1JTKHBvcnQpKSB7CiAJCQloYW5kbGVfZXJyb3IocG9ydCk7CkBAIC0xMTcsMzggKzEyMiwxOSBAQAogCWMgPSBzY2lfaW4ocG9ydCwgU0N4UkRSKTsKIAlzY2lfaW4ocG9ydCwgU0N4U1IpOyAgICAgICAgICAgIC8qIER1bW15IHJlYWQgKi8KIAlzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9SRHhGX0NMRUFSKHBvcnQpKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcG9ydC0+bG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIGM7CiB9Ci0KLS8qIFRha2VuIGZyb20gc2gtc3R1Yi5jIG9mIEdEQiA0LjE4ICovCi1zdGF0aWMgY29uc3QgY2hhciBoZXhjaGFyc1tdID0gIjAxMjM0NTY3ODlhYmNkZWYiOwotCi1zdGF0aWMgX19pbmxpbmVfXyBjaGFyIGhpZ2hoZXgoaW50ICB4KQotewotCXJldHVybiBoZXhjaGFyc1soeCA+PiA0KSAmIDB4Zl07Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIGNoYXIgbG93aGV4KGludCAgeCkKLXsKLQlyZXR1cm4gaGV4Y2hhcnNbeCAmIDB4Zl07Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfU0hfU1RBTkRBUkRfQklPUyB8fCBDT05GSUdfU0hfS0dEQiAqLwogCi0vKgotICogU2VuZCB0aGUgcGFja2V0IGluIGJ1ZmZlci4gIFRoZSBob3N0IGdldHMgb25lIGNoYW5jZSB0byByZWFkIGl0LgotICogVGhpcyByb3V0aW5lIGRvZXMgbm90IHdhaXQgZm9yIGEgcG9zaXRpdmUgYWNrbm93bGVkZ2UuCi0gKi8KLQotI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUKKyNpZiBkZWZpbmVkKENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUpIHx8IGRlZmluZWQoQ09ORklHX1NIX0tHREIpCiBzdGF0aWMgdm9pZCBwdXRfY2hhcihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCBjaGFyIGMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKIAogCWRvIHsKIAkJc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKQEAgLTE1OCw5ICsxNDQsMTEgQEAKIAlzY2lfaW4ocG9ydCwgU0N4U1IpOyAgICAgICAgICAgIC8qIER1bW15IHJlYWQgKi8KIAlzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9URHhFX0NMRUFSKHBvcnQpKTsKIAotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwb3J0LT5sb2NrLCBmbGFncyk7CiB9CisjZW5kaWYKIAorI2lmZGVmIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUKIHN0YXRpYyB2b2lkIHB1dF9zdHJpbmcoc3RydWN0IHNjaV9wb3J0ICpzY2lfcG9ydCwgY29uc3QgY2hhciAqYnVmZmVyLCBpbnQgY291bnQpCiB7CiAJc3RydWN0IHVhcnRfcG9ydCAqcG9ydCA9ICZzY2lfcG9ydC0+cG9ydDsKQEAgLTIxMyw5NiArMjAxLDI4IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX1NFUklBTF9TSF9TQ0lfQ09OU09MRSAqLwogCi0KICNpZmRlZiBDT05GSUdfU0hfS0dEQgotCi0vKiBJcyB0aGUgU0NJIHJlYWR5LCBpZSBpcyB0aGVyZSBhIGNoYXIgd2FpdGluZz8gKi8KLXN0YXRpYyBpbnQga2dkYl9pc19jaGFyX3JlYWR5KHN0cnVjdCBzY2lfcG9ydCAqcG9ydCkKLXsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQotICAgICAgICBpZiAoc3RhdHVzICYgKFNDeFNSX0VSUk9SUyhwb3J0KSB8IFNDeFNSX0JSSyhwb3J0KSkpCi0gICAgICAgICAgICAgICAga2dkYl9oYW5kbGVfZXJyb3IocG9ydCk7Ci0KLSAgICAgICAgcmV0dXJuIChzdGF0dXMgJiBTQ3hTUl9SRHhGKHBvcnQpKTsKLX0KLQotLyogV3JpdGUgYSBjaGFyICovCi1zdGF0aWMgdm9pZCBrZ2RiX3B1dF9jaGFyKHN0cnVjdCBzY2lfcG9ydCAqcG9ydCwgY2hhciBjKQotewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7Ci0KLSAgICAgICAgZG8KLSAgICAgICAgICAgICAgICBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwotICAgICAgICB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URHhFKHBvcnQpKSk7Ci0KLSAgICAgICAgc2NpX291dChwb3J0LCBTQ3hURFIsIGMpOwotICAgICAgICBzY2lfaW4ocG9ydCwgU0N4U1IpOyAgICAvKiBEdW1teSByZWFkICovCi0gICAgICAgIHNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX1REeEVfQ0xFQVIocG9ydCkpOwotfQotCi0vKiBHZXQgYSBjaGFyIGlmIHRoZXJlIGlzIG9uZSwgZWxzZSByZXQgLTEgKi8KLXN0YXRpYyBpbnQga2dkYl9nZXRfY2hhcihzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQpCitzdGF0aWMgaW50IGtnZGJfc2NpX2dldGNoYXIodm9pZCkKIHsKICAgICAgICAgaW50IGM7CiAKLSAgICAgICAgaWYgKGtnZGJfaXNfY2hhcl9yZWFkeShwb3J0KSA9PSAwKQotICAgICAgICAgICAgICAgIGMgPSAtMTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgYyA9IHNjaV9pbihwb3J0LCBTQ3hSRFIpOwotICAgICAgICAgICAgICAgIHNjaV9pbihwb3J0LCBTQ3hTUik7ICAgIC8qIER1bW15IHJlYWQgKi8KLSAgICAgICAgICAgICAgICBzY2lfb3V0KHBvcnQsIFNDeFNSLCBTQ3hTUl9SRHhGX0NMRUFSKHBvcnQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBjOwotfQotCi0vKiBDYWxsZWQgZnJvbSBrZ2Ric3R1Yi5jIHRvIGdldCBhIGNoYXJhY3RlciwgaS5lLiBpcyBibG9ja2luZyAqLwotc3RhdGljIGludCBrZ2RiX3NjaV9nZXRjaGFyKHZvaWQpCi17Ci0gICAgICAgIHZvbGF0aWxlIGludCBjOwotCiAgICAgICAgIC8qIEtlZXAgdHJ5aW5nIHRvIHJlYWQgYSBjaGFyYWN0ZXIsIHRoaXMgY291bGQgYmUgbmVhdGVyICovCi0gICAgICAgIHdoaWxlICgoYyA9IGtnZGJfZ2V0X2NoYXIoa2dkYl9zY2lfcG9ydCkpIDwgMCk7CisgICAgICAgIHdoaWxlICgoYyA9IGdldF9jaGFyKGtnZGJfc2NpX3BvcnQpKSA8IDApCisJCWNwdV9yZWxheCgpOwogCiAgICAgICAgIHJldHVybiBjOwogfQogCi0vKiBDYWxsZWQgZnJvbSBrZ2Ric3R1Yi5jIHRvIHB1dCBhIGNoYXJhY3RlciwganVzdCBhIHdyYXBwZXIgKi8KLXN0YXRpYyB2b2lkIGtnZGJfc2NpX3B1dGNoYXIoaW50IGMpCitzdGF0aWMgaW5saW5lIHZvaWQga2dkYl9zY2lfcHV0Y2hhcihpbnQgYykKIHsKLQotICAgICAgICBrZ2RiX3B1dF9jaGFyKGtnZGJfc2NpX3BvcnQsIGMpOworICAgICAgICBwdXRfY2hhcihrZ2RiX3NjaV9wb3J0LCBjKTsKIH0KLQotLyogQ2xlYXIgYW55IGVycm9ycyBvbiB0aGUgU0NJICovCi1zdGF0aWMgdm9pZCBrZ2RiX2hhbmRsZV9lcnJvcihzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQpCi17Ci0gICAgICAgIHNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX0VSUk9SX0NMRUFSKHBvcnQpKTsgIC8qIENsZWFyIGVycm9yIGZsYWdzICovCi19Ci0KLS8qIEJyZWFrcG9pbnQgaWYgdGhlcmUncyBhIGJyZWFrIHNlbnQgb24gdGhlIHNlcmlhbCBwb3J0ICovCi1zdGF0aWMgdm9pZCBrZ2RiX2JyZWFrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwdHIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQotewotICAgICAgICBzdHJ1Y3Qgc2NpX3BvcnQgKnBvcnQgPSBwdHI7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7Ci0KLSAgICAgICAgaWYgKHN0YXR1cyAmIFNDeFNSX0JSSyhwb3J0KSkgewotCi0gICAgICAgICAgICAgICAgLyogQnJlYWsgaW50byB0aGUgZGVidWdnZXIgaWYgYSBicmVhayBpcyBkZXRlY3RlZCAqLwotICAgICAgICAgICAgICAgIEJSRUFLUE9JTlQoKTsKLQotICAgICAgICAgICAgICAgIC8qIENsZWFyICovCi0gICAgICAgICAgICAgICAgc2NpX291dChwb3J0LCBTQ3hTUiwgU0N4U1JfQlJFQUtfQ0xFQVIocG9ydCkpOwotICAgICAgICB9Ci19Ci0KICNlbmRpZiAvKiBDT05GSUdfU0hfS0dEQiAqLwogCiAjaWYgZGVmaW5lZChfX0g4MzAwU19fKQogZW51bSB7IHNjaV9kaXNhYmxlLCBzY2lfZW5hYmxlIH07CiAKLXN0YXRpYyB2b2lkIGg4MzAwX3NjaV9lbmFibGUoc3RydWN0IHVhcnRfcG9ydCogcG9ydCwgdW5zaWduZWQgaW50IGN0cmwpCitzdGF0aWMgdm9pZCBoODMwMF9zY2lfY29uZmlnKHN0cnVjdCB1YXJ0X3BvcnQqIHBvcnQsIHVuc2lnbmVkIGludCBjdHJsKQogewogCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKm1zdHBjcmw9KHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilNU1RQQ1JMOwogCWludCBjaCA9IChwb3J0LT5tYXBiYXNlICAtIFNNUjApID4+IDM7CkBAIC0zMTQsMzIgKzIzNCw2NiBAQAogCQkqbXN0cGNybCAmPSB+bWFzazsKIAl9CiB9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBoODMwMF9zY2lfZW5hYmxlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaDgzMDBfc2NpX2NvbmZpZyhwb3J0LCBzY2lfZW5hYmxlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGg4MzAwX3NjaV9kaXNhYmxlKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaDgzMDBfc2NpX2NvbmZpZyhwb3J0LCBzY2lfZGlzYWJsZSk7Cit9CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoU0NJX09OTFkpIHx8IGRlZmluZWQoU0NJX0FORF9TQ0lGKQotI2lmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQorI2lmIGRlZmluZWQoU0NJX09OTFkpIHx8IGRlZmluZWQoU0NJX0FORF9TQ0lGKSAmJiBcCisgICAgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pCiBzdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zX3NjaShzdHJ1Y3QgdWFydF9wb3J0KiBwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CiAJaW50IGNoID0gKHBvcnQtPm1hcGJhc2UgLSBTTVIwKSA+PiAzOwogCiAJLyogc2V0IEREUiByZWdzICovCi0JSDgzMDBfR1BJT19ERFIoaDgzMDBfc2NpX3BpbnNbY2hdLnBvcnQsaDgzMDBfc2NpX3BpbnNbY2hdLnJ4LEg4MzAwX0dQSU9fSU5QVVQpOwotCUg4MzAwX0dQSU9fRERSKGg4MzAwX3NjaV9waW5zW2NoXS5wb3J0LGg4MzAwX3NjaV9waW5zW2NoXS50eCxIODMwMF9HUElPX09VVFBVVCk7CisJSDgzMDBfR1BJT19ERFIoaDgzMDBfc2NpX3BpbnNbY2hdLnBvcnQsCisJCSAgICAgICBoODMwMF9zY2lfcGluc1tjaF0ucngsCisJCSAgICAgICBIODMwMF9HUElPX0lOUFVUKTsKKwlIODMwMF9HUElPX0REUihoODMwMF9zY2lfcGluc1tjaF0ucG9ydCwKKwkJICAgICAgIGg4MzAwX3NjaV9waW5zW2NoXS50eCwKKwkJICAgICAgIEg4MzAwX0dQSU9fT1VUUFVUKTsKKwogCS8qIHR4IG1hcmsgb3V0cHV0Ki8KIAlIODMwMF9TQ0lfRFIoY2gpIHw9IGg4MzAwX3NjaV9waW5zW2NoXS50eDsKIH0KKyNlbHNlCisjZGVmaW5lIHNjaV9pbml0X3BpbnNfc2NpIE5VTEwKICNlbmRpZgorCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCitzdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zX2lyZGEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQoreworCXVuc2lnbmVkIGludCBmY3JfdmFsID0gMDsKKworCWlmIChjZmxhZyAmIENSVFNDVFMpCisJCWZjcl92YWwgfD0gU0NGQ1JfTUNFOworCisJc2NpX291dChwb3J0LCBTQ0ZDUiwgZmNyX3ZhbCk7Cit9CisjZWxzZQorI2RlZmluZSBzY2lfaW5pdF9waW5zX2lyZGEgTlVMTAorI2VuZGlmCisKKyNpZmRlZiBTQ0lfT05MWQorI2RlZmluZSBzY2lfaW5pdF9waW5zX3NjaWYgTlVMTAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKFNDSUZfT05MWSkgfHwgZGVmaW5lZChTQ0lfQU5EX1NDSUYpCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKQorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQogLyogU0g3MzAwIGRvZXNuJ3QgdXNlIFJUUy9DVFMgKi8KIHN0YXRpYyB2b2lkIHNjaV9pbml0X3BpbnNfc2NpZihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CiAJc2NpX291dChwb3J0LCBTQ0ZDUiwgMCk7CiB9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQotLyogRm9yIFNINzcwNSwgU0g3NzA3LCBTSDc3MDksIFNINzcwOUEsIFNINzcyOSAqLworLyogRm9yIFNINzcwNSwgU0g3NzA2LCBTSDc3MDcsIFNINzcwOSwgU0g3NzA5QSwgU0g3NzI5ICovCiBzdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zX3NjaWYoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQogewogCXVuc2lnbmVkIGludCBmY3JfdmFsID0gMDsKQEAgLTM2NiwyMCArMzIwLDcgQEAKIAogCXNjaV9vdXQocG9ydCwgU0NGQ1IsIGZjcl92YWwpOwogfQotCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi1zdGF0aWMgdm9pZCBzY2lfaW5pdF9waW5zX2lyZGEoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCwgdW5zaWduZWQgaW50IGNmbGFnKQotewotCXVuc2lnbmVkIGludCBmY3JfdmFsID0gMDsKLQotCWlmIChjZmxhZyAmIENSVFNDVFMpCi0JCWZjcl92YWwgfD0gU0NGQ1JfTUNFOwotCi0Jc2NpX291dChwb3J0LCBTQ0ZDUiwgZmNyX3ZhbCk7Ci19Ci0jZW5kaWYKICNlbHNlCi0KIC8qIEZvciBTSDc3NTAgKi8KIHN0YXRpYyB2b2lkIHNjaV9pbml0X3BpbnNfc2NpZihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LCB1bnNpZ25lZCBpbnQgY2ZsYWcpCiB7CkBAIC0zODgsNyArMzI5LDkgQEAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CiAJCWZjcl92YWwgfD0gU0NGQ1JfTUNFOwogCX0gZWxzZSB7Ci0jaWZkZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAorI2lmZGVmIENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMKKwkJLyogTm90aGluZyAqLworI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogCQljdHJsX291dHcoMHgwMDgwLCBTQ1NQVFIwKTsgLyogU2V0IFJUUyA9IDEgKi8KICNlbHNlCiAJCWN0cmxfb3V0dygweDAwODAsIFNDU1BUUjIpOyAvKiBTZXQgUlRTID0gMSAqLwpAQCAtMzk2LDEwICszMzksNDEgQEAKIAl9CiAJc2NpX291dChwb3J0LCBTQ0ZDUiwgZmNyX3ZhbCk7CiB9CisjZW5kaWYKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc2MCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQorc3RhdGljIGlubGluZSBpbnQgc2NpZl90eHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ1RGRFIpICYgMHg3Zik7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHNjaWZfcnhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuIHNjaV9pbihwb3J0LCBTQ1JGRFIpICYgMHg3ZjsKK30KKyNlbHNlCitzdGF0aWMgaW5saW5lIGludCBzY2lmX3R4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiBTQ0lGX1RYUk9PTV9NQVggLSAoc2NpX2luKHBvcnQsIFNDRkRSKSA+PiA4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2NpZl9yeHJvb20oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlyZXR1cm4gc2NpX2luKHBvcnQsIFNDRkRSKSAmIFNDSUZfUkZEQ19NQVNLOworfQogI2VuZGlmCiAjZW5kaWYgLyogU0NJRl9PTkxZIHx8IFNDSV9BTkRfU0NJRiAqLwogCitzdGF0aWMgaW5saW5lIGludCBzY2lfdHhyb29tKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJcmV0dXJuICgoc2NpX2luKHBvcnQsIFNDeFNSKSAmIFNDSV9URFJFKSAhPSAwKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgc2NpX3J4cm9vbShzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCXJldHVybiAoKHNjaV9pbihwb3J0LCBTQ3hTUikgJiBTQ3hTUl9SRHhGKHBvcnQpKSAhPSAwKTsKK30KKwogLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqCiAgKiAgICAgICAgICAgICAgICAgICB0aGUgaW50ZXJydXB0IHJlbGF0ZWQgcm91dGluZXMgICAgICAgICAgICAgICAgICAgICAgICoKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KQEAgLTQwOCwxNCArMzgyLDEyIEBACiB7CiAJc3RydWN0IGNpcmNfYnVmICp4bWl0ID0gJnBvcnQtPmluZm8tPnhtaXQ7CiAJdW5zaWduZWQgaW50IHN0b3BwZWQgPSB1YXJ0X3R4X3N0b3BwZWQocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAJdW5zaWduZWQgc2hvcnQgY3RybDsKLQlpbnQgY291bnQsIHR4cm9vbTsKKwlpbnQgY291bnQ7CiAKIAlzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwogCWlmICghKHN0YXR1cyAmIFNDeFNSX1REeEUocG9ydCkpKSB7Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJY3RybCA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKIAkJCWN0cmwgJj0gflNDSV9DVFJMX0ZMQUdTX1RJRTsKQEAgLTQyMywyNSArMzk1LDE1IEBACiAJCQljdHJsIHw9IFNDSV9DVFJMX0ZMQUdTX1RJRTsKIAkJfQogCQlzY2lfb3V0KHBvcnQsIFNDU0NSLCBjdHJsKTsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCi0jaWYgIWRlZmluZWQoU0NJX09OTFkpCi0JaWYgKHBvcnQtPnR5cGUgPT0gUE9SVF9TQ0lGKSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzYwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JCXR4cm9vbSA9IFNDSUZfVFhST09NX01BWCAtIChzY2lfaW4ocG9ydCwgU0NURkRSKSAmIDB4N2YpOwotI2Vsc2UKLQkJdHhyb29tID0gU0NJRl9UWFJPT01fTUFYIC0gKHNjaV9pbihwb3J0LCBTQ0ZEUik+PjgpOworI2lmbmRlZiBTQ0lfT05MWQorCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikKKwkJY291bnQgPSBzY2lmX3R4cm9vbShwb3J0KTsKKwllbHNlCiAjZW5kaWYKLQl9IGVsc2UgewotCQl0eHJvb20gPSAoc2NpX2luKHBvcnQsIFNDeFNSKSAmIFNDSV9URFJFKT8xOjA7Ci0JfQotI2Vsc2UKLQl0eHJvb20gPSAoc2NpX2luKHBvcnQsIFNDeFNSKSAmIFNDSV9URFJFKT8xOjA7Ci0jZW5kaWYKLQotCWNvdW50ID0gdHhyb29tOworCQljb3VudCA9IHNjaV90eHJvb20ocG9ydCk7CiAKIAlkbyB7CiAJCXVuc2lnbmVkIGNoYXIgYzsKQEAgLTQ2OCw3ICs0MzAsNiBAQAogCWlmICh1YXJ0X2NpcmNfZW1wdHkoeG1pdCkpIHsKIAkJc2NpX3N0b3BfdHgocG9ydCk7CiAJfSBlbHNlIHsKLQkJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCQljdHJsID0gc2NpX2luKHBvcnQsIFNDU0NSKTsKIAogI2lmICFkZWZpbmVkKFNDSV9PTkxZKQpAQCAtNDgwLDcgKzQ0MSw2IEBACiAKIAkJY3RybCB8PSBTQ0lfQ1RSTF9GTEFHU19USUU7CiAJCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJfQogfQogCkBAIC00OTAsNiArNDUwLDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBzY2lfcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0LAogCQkJCSAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJc3RydWN0IHNjaV9wb3J0ICpzY2lfcG9ydCA9IChzdHJ1Y3Qgc2NpX3BvcnQgKilwb3J0OwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CiAJaW50IGksIGNvdW50LCBjb3BpZWQgPSAwOwogCXVuc2lnbmVkIHNob3J0IHN0YXR1czsKQEAgLTUwMSwxOCArNDYyLDExIEBACiAKIAl3aGlsZSAoMSkgewogI2lmICFkZWZpbmVkKFNDSV9PTkxZKQotCQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpIHsKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MCkKLQkJCWNvdW50ID0gc2NpX2luKHBvcnQsIFNDUkZEUikgJiAweDdmOwotI2Vsc2UKLQkJCWNvdW50ID0gc2NpX2luKHBvcnQsIFNDRkRSKSZTQ0lGX1JGRENfTUFTSyA7CisJCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikKKwkJCWNvdW50ID0gc2NpZl9yeHJvb20ocG9ydCk7CisJCWVsc2UKICNlbmRpZgotCQl9IGVsc2UgewotCQkJY291bnQgPSAoc2NpX2luKHBvcnQsIFNDeFNSKSZTQ3hTUl9SRHhGKHBvcnQpKT8xOjA7Ci0JCX0KLSNlbHNlCi0JCWNvdW50ID0gKHNjaV9pbihwb3J0LCBTQ3hTUikmU0N4U1JfUkR4Rihwb3J0KSk/MTowOwotI2VuZGlmCisJCQljb3VudCA9IHNjaV9yeHJvb20ocG9ydCk7CiAKIAkJLyogRG9uJ3QgY29weSBtb3JlIGJ5dGVzIHRoYW4gdGhlcmUgaXMgcm9vbSBmb3IgaW4gdGhlIGJ1ZmZlciAqLwogCQljb3VudCA9IHR0eV9idWZmZXJfcmVxdWVzdF9yb29tKHR0eSwgY291bnQpOwpAQCAtNTIzLDExICs0NzcsMTAgQEAKIAogCQlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSSkgewogCQkJY2hhciBjID0gc2NpX2luKHBvcnQsIFNDeFJEUik7Ci0gICAgICAgICAgICAgICAgICAgICAgIGlmKCgoc3RydWN0IHNjaV9wb3J0ICopcG9ydCktPmJyZWFrX2ZsYWcKLQkJCSAgICB8fCB1YXJ0X2hhbmRsZV9zeXNycV9jaGFyKHBvcnQsIGMsIHJlZ3MpKSB7CisJCQlpZiAodWFydF9oYW5kbGVfc3lzcnFfY2hhcihwb3J0LCBjLCByZWdzKSB8fCBzY2lfcG9ydC0+YnJlYWtfZmxhZykKIAkJCQljb3VudCA9IDA7Ci0JCQl9IGVsc2UgewotCQkJICAgIHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgYywgVFRZX05PUk1BTCk7CisJCQllbHNlIHsKKwkJCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIGMsIFRUWV9OT1JNQUwpOwogCQkJfQogCQl9IGVsc2UgewogCQkJZm9yIChpPTA7IGk8Y291bnQ7IGkrKykgewpAQCAtNTM1LDE1ICs0ODgsMTcgQEAKIAkJCQlzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwogI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCiAJCQkJLyogU2tpcCAiY2hhcnMiIGR1cmluZyBicmVhayAqLwotCQkJCWlmICgoKHN0cnVjdCBzY2lfcG9ydCAqKXBvcnQpLT5icmVha19mbGFnKSB7CisJCQkJaWYgKHNjaV9wb3J0LT5icmVha19mbGFnKSB7CiAJCQkJCWlmICgoYyA9PSAwKSAmJgogCQkJCQkgICAgKHN0YXR1cyAmIFNDeFNSX0ZFUihwb3J0KSkpIHsKIAkJCQkJCWNvdW50LS07IGktLTsKIAkJCQkJCWNvbnRpbnVlOwogCQkJCQl9CisKIAkJCQkJLyogTm9uemVybyA9PiBlbmQtb2YtYnJlYWsgKi8KIAkJCQkJcHJfZGVidWcoInNjaWY6IGRlYm91bmNlPCUwMng+XG4iLCBjKTsKLQkJCQkJKChzdHJ1Y3Qgc2NpX3BvcnQgKilwb3J0KS0+YnJlYWtfZmxhZyA9IDA7CisJCQkJCXNjaV9wb3J0LT5icmVha19mbGFnID0gMDsKKwogCQkJCQlpZiAoU1RFUEZOKGMpKSB7CiAJCQkJCQljb3VudC0tOyBpLS07CiAJCQkJCQljb250aW51ZTsKQEAgLTYwMCwxNSArNTU1LDE3IEBACiAvKiBFbnN1cmUgdGhhdCB0d28gY29uc2VjdXRpdmUgc2FtcGxlcyBmaW5kIHRoZSBicmVhayBvdmVyLiAqLwogc3RhdGljIHZvaWQgc2NpX2JyZWFrX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICBzdHJ1Y3Qgc2NpX3BvcnQgKiBwb3J0ID0gKHN0cnVjdCBzY2lfcG9ydCAqKWRhdGE7Ci0JaWYoc2NpX3J4ZF9pbigmcG9ydC0+cG9ydCkgPT0gMCkgeworCXN0cnVjdCBzY2lfcG9ydCAqcG9ydCA9IChzdHJ1Y3Qgc2NpX3BvcnQgKilkYXRhOworCisJaWYgKHNjaV9yeGRfaW4oJnBvcnQtPnBvcnQpID09IDApIHsKIAkJcG9ydC0+YnJlYWtfZmxhZyA9IDE7Ci0JICAgIHNjaV9zY2hlZHVsZV9icmVha190aW1lcihwb3J0KTsKLQl9IGVsc2UgaWYocG9ydC0+YnJlYWtfZmxhZyA9PSAxKXsKKwkJc2NpX3NjaGVkdWxlX2JyZWFrX3RpbWVyKHBvcnQpOworCX0gZWxzZSBpZiAocG9ydC0+YnJlYWtfZmxhZyA9PSAxKSB7CiAJCS8qIGJyZWFrIGlzIG92ZXIuICovCiAJCXBvcnQtPmJyZWFrX2ZsYWcgPSAyOwotCSAgICBzY2lfc2NoZWR1bGVfYnJlYWtfdGltZXIocG9ydCk7Ci0JfSBlbHNlIHBvcnQtPmJyZWFrX2ZsYWcgPSAwOworCQlzY2lfc2NoZWR1bGVfYnJlYWtfdGltZXIocG9ydCk7CisJfSBlbHNlCisJCXBvcnQtPmJyZWFrX2ZsYWcgPSAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBzY2lfaGFuZGxlX2Vycm9ycyhzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQpAQCAtNjE3LDQwICs1NzQsNDEgQEAKIAl1bnNpZ25lZCBzaG9ydCBzdGF0dXMgPSBzY2lfaW4ocG9ydCwgU0N4U1IpOwogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT5pbmZvLT50dHk7CiAKLQlpZiAoc3RhdHVzJlNDeFNSX09SRVIocG9ydCkpIHsKKwlpZiAoc3RhdHVzICYgU0N4U1JfT1JFUihwb3J0KSkgewogCQkvKiBvdmVycnVuIGVycm9yICovCi0JCWlmKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pKQorCQlpZiAodHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTikpCiAJCQljb3BpZWQrKzsKIAkJcHJfZGVidWcoInNjaTogb3ZlcnJ1biBlcnJvclxuIik7CiAJfQogCi0JaWYgKHN0YXR1cyZTQ3hTUl9GRVIocG9ydCkpIHsKKwlpZiAoc3RhdHVzICYgU0N4U1JfRkVSKHBvcnQpKSB7CiAJCWlmIChzY2lfcnhkX2luKHBvcnQpID09IDApIHsKIAkJCS8qIE5vdGlmeSBvZiBCUkVBSyAqLwotCQkJc3RydWN0IHNjaV9wb3J0ICogc2NpX3BvcnQgPSAoc3RydWN0IHNjaV9wb3J0ICopcG9ydDsKLQkJCWlmKCFzY2lfcG9ydC0+YnJlYWtfZmxhZykgewotCSAgICAgICAgICAgICAgICAJc2NpX3BvcnQtPmJyZWFrX2ZsYWcgPSAxOwotCSAgICAgICAgICAgICAgICAJc2NpX3NjaGVkdWxlX2JyZWFrX3RpbWVyKChzdHJ1Y3Qgc2NpX3BvcnQgKilwb3J0KTsKKwkJCXN0cnVjdCBzY2lfcG9ydCAqc2NpX3BvcnQgPSAoc3RydWN0IHNjaV9wb3J0ICopcG9ydDsKKworCQkJaWYgKCFzY2lfcG9ydC0+YnJlYWtfZmxhZykgeworCQkJCXNjaV9wb3J0LT5icmVha19mbGFnID0gMTsKKwkJCQlzY2lfc2NoZWR1bGVfYnJlYWtfdGltZXIoc2NpX3BvcnQpOworCiAJCQkJLyogRG8gc3lzcnEgaGFuZGxpbmcuICovCi0JCQkJaWYodWFydF9oYW5kbGVfYnJlYWsocG9ydCkpCisJCQkJaWYgKHVhcnRfaGFuZGxlX2JyZWFrKHBvcnQpKQogCQkJCQlyZXR1cm4gMDsKIAkJCSAgICAgICAgcHJfZGVidWcoInNjaTogQlJFQUsgZGV0ZWN0ZWRcbiIpOwotCQkJICAgICAgICBpZih0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSykpCisJCQkJaWYgKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX0JSRUFLKSkKIAkJCQkgICAgICAgIGNvcGllZCsrOwogICAgICAgICAgICAgICAgICAgICAgICB9Ci0JCX0KLQkJZWxzZSB7CisJCX0gZWxzZSB7CiAJCQkvKiBmcmFtZSBlcnJvciAqLwotCQkJaWYodHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfRlJBTUUpKQorCQkJaWYgKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX0ZSQU1FKSkKIAkJCQljb3BpZWQrKzsKIAkJCXByX2RlYnVnKCJzY2k6IGZyYW1lIGVycm9yXG4iKTsKIAkJfQogCX0KIAotCWlmIChzdGF0dXMmU0N4U1JfUEVSKHBvcnQpKSB7Ci0JCWlmKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX1BBUklUWSkpCi0JCQljb3BpZWQrKzsKKwlpZiAoc3RhdHVzICYgU0N4U1JfUEVSKHBvcnQpKSB7CiAJCS8qIHBhcml0eSBlcnJvciAqLworCQlpZiAodHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfUEFSSVRZKSkKKwkJCWNvcGllZCsrOwogCQlwcl9kZWJ1Zygic2NpOiBwYXJpdHkgZXJyb3JcbiIpOwogCX0KIApAQCAtNjczLDcgKzYzMSw3IEBACiAJCXMtPmJyZWFrX2ZsYWcgPSAxOwogI2VuZGlmCiAJCS8qIE5vdGlmeSBvZiBCUkVBSyAqLwotCQlpZih0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSykpCisJCWlmICh0dHlfaW5zZXJ0X2ZsaXBfY2hhcih0dHksIDAsIFRUWV9CUkVBSykpCiAJCQljb3BpZWQrKzsKIAkJcHJfZGVidWcoInNjaTogQlJFQUsgZGV0ZWN0ZWRcbiIpOwogCX0KQEAgLTY4Miw3ICs2NDAsNyBAQAogCS8qIFhYWDogSGFuZGxlIFNDSUYgb3ZlcnJ1biBlcnJvciAqLwogCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRiAmJiAoc2NpX2luKHBvcnQsIFNDTFNSKSAmIFNDSUZfT1JFUikgIT0gMCkgewogCQlzY2lfb3V0KHBvcnQsIFNDTFNSLCAwKTsKLQkJaWYodHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCAwLCBUVFlfT1ZFUlJVTikpIHsKKwkJaWYgKHR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pKSB7CiAJCQljb3BpZWQrKzsKIAkJCXByX2RlYnVnKCJzY2k6IG92ZXJydW4gZXJyb3JcbiIpOwogCQl9CkBAIC02OTEsMTMgKzY0OSwxMiBAQAogCiAJaWYgKGNvcGllZCkKIAkJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKwogCXJldHVybiBjb3BpZWQ7CiB9CiAKLXN0YXRpYyBpcnFyZXR1cm5fdCBzY2lfcnhfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKnB0ciwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgaXJxcmV0dXJuX3Qgc2NpX3J4X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpwb3J0LCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gcHRyOwotCiAJLyogSSB0aGluayBzY2lfcmVjZWl2ZV9jaGFycyBoYXMgdG8gYmUgY2FsbGVkIGlycmVzcGVjdGl2ZQogCSAqIG9mIHdoZXRoZXIgdGhlIElfSVhPRkYgaXMgc2V0LCBvdGhlcndpc2UsIGhvdyBpcyB0aGUgaW50ZXJydXB0CiAJICogdG8gYmUgZGlzYWJsZWQ/CkBAIC03MTEsNyArNjY4LDkgQEAKIHsKIAlzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0ID0gcHRyOwogCisJc3Bpbl9sb2NrX2lycSgmcG9ydC0+bG9jayk7CiAJc2NpX3RyYW5zbWl0X2NoYXJzKHBvcnQpOworCXNwaW5fdW5sb2NrX2lycSgmcG9ydC0+bG9jayk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CkBAIC03NTUsNiArNzE0LDEyIEBACiAKIAkvKiBIYW5kbGUgQlJFQUtzICovCiAJc2NpX2hhbmRsZV9icmVha3MocG9ydCk7CisKKyNpZmRlZiBDT05GSUdfU0hfS0dEQgorCS8qIEJyZWFrIGludG8gdGhlIGRlYnVnZ2VyIGlmIGEgYnJlYWsgaXMgZGV0ZWN0ZWQgKi8KKwlCUkVBS1BPSU5UKCk7CisjZW5kaWYKKwogCXNjaV9vdXQocG9ydCwgU0N4U1IsIFNDeFNSX0JSRUFLX0NMRUFSKHBvcnQpKTsKIAogCXJldHVybiBJUlFfSEFORExFRDsKQEAgLTc2OSwxNiArNzM0LDE2IEBACiAgICAgICAgIHNjcl9zdGF0dXMgPSBzY2lfaW4ocG9ydCxTQ1NDUik7CiAKIAkvKiBUeCBJbnRlcnJ1cHQgKi8KLSAgICAgICAgaWYgKChzc3Jfc3RhdHVzJjB4MDAyMCkgJiYgKHNjcl9zdGF0dXMmMHgwMDgwKSkKKyAgICAgICAgaWYgKChzc3Jfc3RhdHVzICYgMHgwMDIwKSAmJiAoc2NyX3N0YXR1cyAmIDB4MDA4MCkpCiAgICAgICAgICAgICAgICAgc2NpX3R4X2ludGVycnVwdChpcnEsIHB0ciwgcmVncyk7CiAJLyogUnggSW50ZXJydXB0ICovCi0gICAgICAgIGlmICgoc3NyX3N0YXR1cyYweDAwMDIpICYmIChzY3Jfc3RhdHVzJjB4MDA0MCkpCisgICAgICAgIGlmICgoc3NyX3N0YXR1cyAmIDB4MDAwMikgJiYgKHNjcl9zdGF0dXMgJiAweDAwNDApKQogICAgICAgICAgICAgICAgIHNjaV9yeF9pbnRlcnJ1cHQoaXJxLCBwdHIsIHJlZ3MpOwogCS8qIEVycm9yIEludGVycnVwdCAqLwotICAgICAgICBpZiAoKHNzcl9zdGF0dXMmMHgwMDgwKSAmJiAoc2NyX3N0YXR1cyYweDA0MDApKQorICAgICAgICBpZiAoKHNzcl9zdGF0dXMgJiAweDAwODApICYmIChzY3Jfc3RhdHVzICYgMHgwNDAwKSkKICAgICAgICAgICAgICAgICBzY2lfZXJfaW50ZXJydXB0KGlycSwgcHRyLCByZWdzKTsKIAkvKiBCcmVhayBJbnRlcnJ1cHQgKi8KLSAgICAgICAgaWYgKChzc3Jfc3RhdHVzJjB4MDAxMCkgJiYgKHNjcl9zdGF0dXMmMHgwMjAwKSkKKyAgICAgICAgaWYgKChzc3Jfc3RhdHVzICYgMHgwMDEwKSAmJiAoc2NyX3N0YXR1cyAmIDB4MDIwMCkpCiAgICAgICAgICAgICAgICAgc2NpX2JyX2ludGVycnVwdChpcnEsIHB0ciwgcmVncyk7CiAKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CkBAIC03ODksNyArNzU0LDggQEAKICAqIEhlcmUgd2UgZGVmaW5lIGEgdHJhbnNpc3Rpb24gbm90aWZpZXIgc28gdGhhdCB3ZSBjYW4gdXBkYXRlIGFsbCBvZiBvdXIKICAqIHBvcnRzJyBiYXVkIHJhdGUgd2hlbiB0aGUgcGVyaXBoZXJhbCBjbG9jayBjaGFuZ2VzLgogICovCi1zdGF0aWMgaW50IHNjaV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgcGhhc2UsIHZvaWQgKnApCitzdGF0aWMgaW50IHNjaV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsCisJCQl1bnNpZ25lZCBsb25nIHBoYXNlLCB2b2lkICpwKQogewogCXN0cnVjdCBjcHVmcmVxX2ZyZXFzICpmcmVxcyA9IHA7CiAJaW50IGk7CkBAIC04MTYsOCArNzgyLDkgQEAKIAkJCWNsa19wdXQoY2xrKTsKIAkJfQogCi0JCXByaW50aygiJXM6IGdvdCBhIHBvc3RjaGFuZ2Ugbm90aWZpY2F0aW9uIGZvciBjcHUgJWQgKG9sZCAlZCwgbmV3ICVkKVxuIiwKLQkJCQlfX0ZVTkNUSU9OX18sIGZyZXFzLT5jcHUsIGZyZXFzLT5vbGQsIGZyZXFzLT5uZXcpOworCQlwcmludGsoS0VSTl9JTkZPICIlczogZ290IGEgcG9zdGNoYW5nZSBub3RpZmljYXRpb24gIgorCQkgICAgICAgImZvciBjcHUgJWQgKG9sZCAlZCwgbmV3ICVkKVxuIiwKKwkJICAgICAgIF9fRlVOQ1RJT05fXywgZnJlcXMtPmNwdSwgZnJlcXMtPm9sZCwgZnJlcXMtPm5ldyk7CiAJfQogCiAJcmV0dXJuIE5PVElGWV9PSzsKQEAgLTg0MSw4ICs4MDgsOSBAQAogCQkJcHJpbnRrKEtFUk5fRVJSICJzY2k6IENhbm5vdCBhbGxvY2F0ZSBpcnEuKElSUT0wKVxuIik7CiAJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQotCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+aXJxc1swXSwgc2NpX21weGVkX2ludGVycnVwdCwgSVJRRl9ESVNBQkxFRCwKLQkJCQkic2NpIiwgcG9ydCkpIHsKKworCQlpZiAocmVxdWVzdF9pcnEocG9ydC0+aXJxc1swXSwgc2NpX21weGVkX2ludGVycnVwdCwKKwkJCQlTQV9JTlRFUlJVUFQsICJzY2kiLCBwb3J0KSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJzY2k6IENhbm5vdCBhbGxvY2F0ZSBpcnEuXG4iKTsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9CkBAIC04NTAsOCArODE4LDggQEAKIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaGFuZGxlcnMpOyBpKyspIHsKIAkJCWlmICghcG9ydC0+aXJxc1tpXSkKIAkJCQljb250aW51ZTsKLQkJCWlmIChyZXF1ZXN0X2lycShwb3J0LT5pcnFzW2ldLCBoYW5kbGVyc1tpXSwgSVJRRl9ESVNBQkxFRCwKLQkJCQkJZGVzY1tpXSwgcG9ydCkpIHsKKwkJCWlmIChyZXF1ZXN0X2lycShwb3J0LT5pcnFzW2ldLCBoYW5kbGVyc1tpXSwKKwkJCQkJU0FfSU5URVJSVVBULCBkZXNjW2ldLCBwb3J0KSkgewogCQkJCXByaW50ayhLRVJOX0VSUiAic2NpOiBDYW5ub3QgYWxsb2NhdGUgaXJxLlxuIik7CiAJCQkJcmV0dXJuIC1FTk9ERVY7CiAJCQl9CkBAIC05MDMsNTAgKzg3MSw0MiBAQAogCiBzdGF0aWMgdm9pZCBzY2lfc3RhcnRfdHgoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQlzdHJ1Y3Qgc2NpX3BvcnQgKnMgPSAmc2NpX3BvcnRzW3BvcnQtPmxpbmVdOworCXVuc2lnbmVkIHNob3J0IGN0cmw7CiAKLQlkaXNhYmxlX2lycShzLT5pcnFzW1NDSXhfVFhJX0lSUV0pOwotCXNjaV90cmFuc21pdF9jaGFycyhwb3J0KTsKLQllbmFibGVfaXJxKHMtPmlycXNbU0NJeF9UWElfSVJRXSk7CisJLyogU2V0IFRJRSAoVHJhbnNtaXQgSW50ZXJydXB0IEVuYWJsZSkgYml0IGluIFNDU0NSICovCisJY3RybCA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CisJY3RybCB8PSBTQ0lfQ1RSTF9GTEFHU19USUU7CisJc2NpX291dChwb3J0LCBTQ1NDUiwgY3RybCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9zdG9wX3R4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBjdHJsOwogCiAJLyogQ2xlYXIgVElFIChUcmFuc21pdCBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3RybCA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJY3RybCAmPSB+U0NJX0NUUkxfRkxBR1NfVElFOwogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2NpX3N0YXJ0X3J4KHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCB0dHlfc3RhcnQpCiB7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBzaG9ydCBjdHJsOwogCiAJLyogU2V0IFJJRSAoUmVjZWl2ZSBJbnRlcnJ1cHQgRW5hYmxlKSBiaXQgaW4gU0NTQ1IgKi8KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJY3RybCA9IHNjaV9pbihwb3J0LCBTQ1NDUik7CiAJY3RybCB8PSBTQ0lfQ1RSTF9GTEFHU19SSUUgfCBTQ0lfQ1RSTF9GTEFHU19SRUlFOwogCXNjaV9vdXQocG9ydCwgU0NTQ1IsIGN0cmwpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2NpX3N0b3Bfcngoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIHNob3J0IGN0cmw7CiAKIAkvKiBDbGVhciBSSUUgKFJlY2VpdmUgSW50ZXJydXB0IEVuYWJsZSkgYml0IGluIFNDU0NSICovCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWN0cmwgPSBzY2lfaW4ocG9ydCwgU0NTQ1IpOwogCWN0cmwgJj0gfihTQ0lfQ1RSTF9GTEFHU19SSUUgfCBTQ0lfQ1RSTF9GTEFHU19SRUlFKTsKIAlzY2lfb3V0KHBvcnQsIFNDU0NSLCBjdHJsKTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNjaV9lbmFibGVfbXMoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKQEAgLTk2Myw5ICs5MjMsOCBAQAogewogCXN0cnVjdCBzY2lfcG9ydCAqcyA9ICZzY2lfcG9ydHNbcG9ydC0+bGluZV07CiAKLSNpZiBkZWZpbmVkKF9fSDgzMDBTX18pCi0JaDgzMDBfc2NpX2VuYWJsZShwb3J0LCBzY2lfZW5hYmxlKTsKLSNlbmRpZgorCWlmIChzLT5lbmFibGUpCisJCXMtPmVuYWJsZShwb3J0KTsKIAogCXNjaV9yZXF1ZXN0X2lycShzKTsKIAlzY2lfc3RhcnRfdHgocG9ydCk7CkBAIC05ODIsOSArOTQxLDggQEAKIAlzY2lfc3RvcF90eChwb3J0KTsKIAlzY2lfZnJlZV9pcnEocyk7CiAKLSNpZiBkZWZpbmVkKF9fSDgzMDBTX18pCi0JaDgzMDBfc2NpX2VuYWJsZShwb3J0LCBzY2lfZGlzYWJsZSk7Ci0jZW5kaWYKKwlpZiAocy0+ZGlzYWJsZSkKKwkJcy0+ZGlzYWJsZShwb3J0KTsKIH0KIAogc3RhdGljIHZvaWQgc2NpX3NldF90ZXJtaW9zKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLApAQCAtOTk3LDM0ICs5NTUsNiBAQAogCiAJYmF1ZCA9IHVhcnRfZ2V0X2JhdWRfcmF0ZShwb3J0LCB0ZXJtaW9zLCBvbGQsIDAsIHBvcnQtPnVhcnRjbGsvMTYpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnBvcnQtPmxvY2ssIGZsYWdzKTsKLQotCWRvIHsKLQkJc3RhdHVzID0gc2NpX2luKHBvcnQsIFNDeFNSKTsKLQl9IHdoaWxlICghKHN0YXR1cyAmIFNDeFNSX1RFTkQocG9ydCkpKTsKLQotCXNjaV9vdXQocG9ydCwgU0NTQ1IsIDB4MDApOwkvKiBURT0wLCBSRT0wLCBDS0UxPTAgKi8KLQotI2lmICFkZWZpbmVkKFNDSV9PTkxZKQotCWlmIChwb3J0LT50eXBlID09IFBPUlRfU0NJRikgewotCQlzY2lfb3V0KHBvcnQsIFNDRkNSLCBTQ0ZDUl9SRlJTVCB8IFNDRkNSX1RGUlNUKTsKLQl9Ci0jZW5kaWYKLQotCXNtcl92YWwgPSBzY2lfaW4ocG9ydCwgU0NTTVIpICYgMzsKLQlpZiAoKHRlcm1pb3MtPmNfY2ZsYWcgJiBDU0laRSkgPT0gQ1M3KQotCQlzbXJfdmFsIHw9IDB4NDA7Ci0JaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJFTkIpCi0JCXNtcl92YWwgfD0gMHgyMDsKLQlpZiAodGVybWlvcy0+Y19jZmxhZyAmIFBBUk9ERCkKLQkJc21yX3ZhbCB8PSAweDMwOwotCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NUT1BCKQotCQlzbXJfdmFsIHw9IDB4MDg7Ci0KLQl1YXJ0X3VwZGF0ZV90aW1lb3V0KHBvcnQsIHRlcm1pb3MtPmNfY2ZsYWcsIGJhdWQpOwotCi0Jc2NpX291dChwb3J0LCBTQ1NNUiwgc21yX3ZhbCk7Ci0KIAlzd2l0Y2ggKGJhdWQpIHsKIAkJY2FzZSAwOgogCQkJdCA9IC0xOwpAQCAtMTA0Miw2ICs5NzIsMzMgQEAKIAkJCWJyZWFrOwogCX0KIAorCXNwaW5fbG9ja19pcnFzYXZlKCZwb3J0LT5sb2NrLCBmbGFncyk7CisKKwlkbyB7CisJCXN0YXR1cyA9IHNjaV9pbihwb3J0LCBTQ3hTUik7CisJfSB3aGlsZSAoIShzdGF0dXMgJiBTQ3hTUl9URU5EKHBvcnQpKSk7CisKKwlzY2lfb3V0KHBvcnQsIFNDU0NSLCAweDAwKTsJLyogVEU9MCwgUkU9MCwgQ0tFMT0wICovCisKKyNpZiAhZGVmaW5lZChTQ0lfT05MWSkKKwlpZiAocG9ydC0+dHlwZSA9PSBQT1JUX1NDSUYpCisJCXNjaV9vdXQocG9ydCwgU0NGQ1IsIFNDRkNSX1JGUlNUIHwgU0NGQ1JfVEZSU1QpOworI2VuZGlmCisKKwlzbXJfdmFsID0gc2NpX2luKHBvcnQsIFNDU01SKSAmIDM7CisJaWYgKCh0ZXJtaW9zLT5jX2NmbGFnICYgQ1NJWkUpID09IENTNykKKwkJc21yX3ZhbCB8PSAweDQwOworCWlmICh0ZXJtaW9zLT5jX2NmbGFnICYgUEFSRU5CKQorCQlzbXJfdmFsIHw9IDB4MjA7CisJaWYgKHRlcm1pb3MtPmNfY2ZsYWcgJiBQQVJPREQpCisJCXNtcl92YWwgfD0gMHgzMDsKKwlpZiAodGVybWlvcy0+Y19jZmxhZyAmIENTVE9QQikKKwkJc21yX3ZhbCB8PSAweDA4OworCisJdWFydF91cGRhdGVfdGltZW91dChwb3J0LCB0ZXJtaW9zLT5jX2NmbGFnLCBiYXVkKTsKKworCXNjaV9vdXQocG9ydCwgU0NTTVIsIHNtcl92YWwpOworCiAJaWYgKHQgPiAwKSB7CiAJCWlmKHQgPj0gMjU2KSB7CiAJCQlzY2lfb3V0KHBvcnQsIFNDU01SLCAoc2NpX2luKHBvcnQsIFNDU01SKSAmIH4zKSB8IDEpOwpAQCAtMTA5MiwxMSArMTA0OSwyMyBAQAogCiAJcG9ydC0+dHlwZSA9IHMtPnR5cGU7CiAKKwlzd2l0Y2ggKHBvcnQtPnR5cGUpIHsKKwljYXNlIFBPUlRfU0NJOgorCQlzLT5pbml0X3BpbnMgPSBzY2lfaW5pdF9waW5zX3NjaTsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX1NDSUY6CisJCXMtPmluaXRfcGlucyA9IHNjaV9pbml0X3BpbnNfc2NpZjsKKwkJYnJlYWs7CisJY2FzZSBQT1JUX0lSREE6CisJCXMtPmluaXRfcGlucyA9IHNjaV9pbml0X3BpbnNfaXJkYTsKKwkJYnJlYWs7CisJfQorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g1XzEwMykKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAwKQogCQlwb3J0LT5tYXBiYXNlID0gb25jaGlwX3JlbWFwKFNDSUZfQUREUl9TSDUsIDEwMjQsICJTQ0lGIik7CiAKLQlwb3J0LT5tZW1iYXNlID0gKHZvaWQgKilwb3J0LT5tYXBiYXNlOworCXBvcnQtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcG9ydC0+bWFwYmFzZTsKICNlbmRpZgogfQogCkBAIC0xMTMyLDQxMiArMTEwMSw2MSBAQAogCS52ZXJpZnlfcG9ydAk9IHNjaV92ZXJpZnlfcG9ydCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc2NpX3BvcnQgc2NpX3BvcnRzW10gPSB7Ci0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA4KQotCXsKLQkJLnBvcnQJPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhmZmZmZmU4MCwKLQkJCS5tYXBiYXNlCT0gMHhmZmZmZmU4MCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDI1LAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMCwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0ksCi0JCS5pcnFzCQk9IFNDSV9JUlFTLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKilTQ0lGMCwKLQkJCS5tYXBiYXNlCT0gU0NJRjAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA1NSwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU0gzX0lSREFfSVJRUywKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpZiwKLQl9LAotCXsKLQkJLnBvcnQJPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopU0NJRjIsCi0JCQkubWFwYmFzZQk9IFNDSUYyLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNTksCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAxLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNIM19TQ0lGX0lSUVMsCi0JCS5pbml0X3BpbnMJPSBzY2lfaW5pdF9waW5zX3NjaWYsCi0JfQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZmZmZmZTgwLAotCQkJLm1hcGJhc2UJPSAweGZmZmZmZTgwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gMjUsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAwLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0gU0NJX0lSUVMsCi0JfSwKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4YTQwMDAxNTAsCi0JCQkubWFwYmFzZQk9IDB4YTQwMDAxNTAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA1OSwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDEsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU0gzX1NDSUZfSVJRUywKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpZiwKLQl9LAotCXsKLQkJLnBvcnQJPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhhNDAwMDE0MCwKLQkJCS5tYXBiYXNlCT0gMHhhNDAwMDE0MCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDU1LAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMiwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9JUkRBLAotCQkuaXJxcwkJPSBTSDNfSVJEQV9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19pcmRhLAotCX0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMwMCkKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4QTQ0MzAwMDAsCi0JCQkubWFwYmFzZQk9IDB4QTQ0MzAwMDAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSAyNSwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU0g3MzAwX1NDSUYwX0lSUVMsCi0JCS5pbml0X3BpbnMJPSBzY2lfaW5pdF9waW5zX3NjaWYsCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZmZTAwMDAwLAotCQkJLm1hcGJhc2UJPSAweGZmZTAwMDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gMjUsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAwLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINzMxODBfU0NJRl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDRfMjAyKQotCXsKLQkJLnBvcnQJPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhmZmU4MDAwMCwKLQkJCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDQzLAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMCwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSBTSDRfU0NJRl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4ZmZlMDAwMDAsCi0JCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSAyNSwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSBTQ0lfSVJRUywKLQl9LAotCXsKLQkJLnBvcnQJPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhmZmU4MDAwMCwKLQkJCS5tYXBiYXNlCT0gMHhmZmU4MDAwMCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDQzLAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMSwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSBTSDRfU0NJRl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NjApCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZlNjAwMDAwLAotCQkJLm1hcGJhc2UJPSAweGZlNjAwMDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNTUsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAwLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINzc2MF9TQ0lGMF9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZlNjEwMDAwLAotCQkJLm1hcGJhc2UJPSAweGZlNjEwMDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNzUsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAxLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINzc2MF9TQ0lGMV9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZlNjIwMDAwLAotCQkJLm1hcGJhc2UJPSAweGZlNjIwMDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNzksCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAyLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINzc2MF9TQ0lGMl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4ZmZlMDAwMDAsCi0JCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSAyNiwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU1RCMV9TQ0lGMV9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZmZTgwMDAwLAotCQkJLm1hcGJhc2UJPSAweGZmZTgwMDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNDMsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAxLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINF9TQ0lGX0lSUVMsCi0JCS5pbml0X3BpbnMJPSBzY2lfaW5pdF9waW5zX3NjaWYsCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDEpIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINV8xMDMpCi0JewotCQkucG9ydAk9IHsKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDQyLAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMCwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSBTSDVfU0NJRl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19IODMwMDcpIHx8IGRlZmluZWQoQ09ORklHX0g4MzA2OCkKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4MDBmZmZmYjAsCi0JCQkubWFwYmFzZQk9IDB4MDBmZmZmYjAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA1NCwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSBIODMwMEhfU0NJX0lSUVMwLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2ksCi0JfSwKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4MDBmZmZmYjgsCi0JCQkubWFwYmFzZQk9IDB4MDBmZmZmYjgsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA1OCwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDEsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSBIODMwMEhfU0NJX0lSUVMxLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2ksCi0JfSwKLQl7Ci0JCS5wb3J0CT0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4MDBmZmZmYzAsCi0JCQkubWFwYmFzZQk9IDB4MDBmZmZmYzAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA2MiwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDIsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJLAotCQkuaXJxcwkJPSBIODMwMEhfU0NJX0lSUVMyLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2ksCi0JfSwKLSNlbGlmIGRlZmluZWQoQ09ORklHX0g4UzI2NzgpCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweDAwZmZmZjc4LAotCQkJLm1hcGJhc2UJPSAweDAwZmZmZjc4LAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gOTAsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAwLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0gSDhTX1NDSV9JUlFTMCwKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpLAotCX0sCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweDAwZmZmZjgwLAotCQkJLm1hcGJhc2UJPSAweDAwZmZmZjgwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gOTQsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAxLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0gSDhTX1NDSV9JUlFTMSwKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpLAotCX0sCi0JewotCQkucG9ydAk9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweDAwZmZmZjg4LAotCQkJLm1hcGJhc2UJPSAweDAwZmZmZjg4LAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gOTgsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAyLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSSwKLQkJLmlycXMJCT0gSDhTX1NDSV9JUlFTMiwKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NzApCi0JewotCQkucG9ydCAgID0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4ZmY5MjMwMDAsCi0JCQkubWFwYmFzZQk9IDB4ZmY5MjMwMDAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA2MSwKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU0g3NzcwX1NDSUYwX0lSUVMsCi0JCS5pbml0X3BpbnMJPSBzY2lfaW5pdF9waW5zX3NjaWYsCi0JfSwKLQl7Ci0JCS5wb3J0ICAgPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhmZjkyNDAwMCwKLQkJCS5tYXBiYXNlCT0gMHhmZjkyNDAwMCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDYyLAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMSwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSBTSDc3NzBfU0NJRjFfSVJRUywKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpZiwKLQl9LAotCXsKLQkJLnBvcnQgICA9IHsKLQkJCS5tZW1iYXNlCT0gKHZvaWQgKikweGZmOTI1MDAwLAotCQkJLm1hcGJhc2UJPSAweGZmOTI1MDAwLAotCQkJLmlvdHlwZQkJPSBVUElPX01FTSwKLQkJCS5pcnEJCT0gNjMsCi0JCQkub3BzCQk9ICZzY2lfdWFydF9vcHMsCi0JCQkuZmxhZ3MJCT0gVVBGX0JPT1RfQVVUT0NPTkYsCi0JCQkubGluZQkJPSAyLAotCQl9LAotCQkudHlwZQkJPSBQT1JUX1NDSUYsCi0JCS5pcnFzCQk9IFNINzc3MF9TQ0lGMl9JUlFTLAotCQkuaW5pdF9waW5zCT0gc2NpX2luaXRfcGluc19zY2lmLAotCX0sCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCi0JewotCQkucG9ydCAgID0gewotCQkJLm1lbWJhc2UJPSAodm9pZCAqKTB4ZmZlMDAwMDAsCi0JCQkubWFwYmFzZQk9IDB4ZmZlMDAwMDAsCi0JCQkuaW90eXBlCQk9IFVQSU9fTUVNLAotCQkJLmlycQkJPSA0MywKLQkJCS5vcHMJCT0gJnNjaV91YXJ0X29wcywKLQkJCS5mbGFncwkJPSBVUEZfQk9PVF9BVVRPQ09ORiwKLQkJCS5saW5lCQk9IDAsCi0JCX0sCi0JCS50eXBlCQk9IFBPUlRfU0NJRiwKLQkJLmlycXMJCT0gU0g3NzgwX1NDSUYwX0lSUVMsCi0JCS5pbml0X3BpbnMJPSBzY2lfaW5pdF9waW5zX3NjaWYsCi0JfSwKLQl7Ci0JCS5wb3J0ICAgPSB7Ci0JCQkubWVtYmFzZQk9ICh2b2lkICopMHhmZmUxMDAwMCwKLQkJCS5tYXBiYXNlCT0gMHhmZmUxMDAwMCwKLQkJCS5pb3R5cGUJCT0gVVBJT19NRU0sCi0JCQkuaXJxCQk9IDc5LAotCQkJLm9wcwkJPSAmc2NpX3VhcnRfb3BzLAotCQkJLmZsYWdzCQk9IFVQRl9CT09UX0FVVE9DT05GLAotCQkJLmxpbmUJCT0gMSwKLQkJfSwKLQkJLnR5cGUJCT0gUE9SVF9TQ0lGLAotCQkuaXJxcwkJPSBTSDc3ODBfU0NJRjFfSVJRUywKLQkJLmluaXRfcGlucwk9IHNjaV9pbml0X3BpbnNfc2NpZiwKLQl9LAotI2Vsc2UKLSNlcnJvciAiQ1BVIHN1YnR5cGUgbm90IGRlZmluZWQiCitzdGF0aWMgdm9pZCBfX2luaXQgc2NpX2luaXRfcG9ydHModm9pZCkKK3sKKwlzdGF0aWMgaW50IGZpcnN0ID0gMTsKKwlpbnQgaTsKKworCWlmICghZmlyc3QpCisJCXJldHVybjsKKworCWZpcnN0ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBTQ0lfTlBPUlRTOyBpKyspIHsKKwkJc2NpX3BvcnRzW2ldLnBvcnQub3BzCQk9ICZzY2lfdWFydF9vcHM7CisJCXNjaV9wb3J0c1tpXS5wb3J0LmlvdHlwZQk9IFVQSU9fTUVNOworCQlzY2lfcG9ydHNbaV0ucG9ydC5saW5lCQk9IGk7CisJCXNjaV9wb3J0c1tpXS5wb3J0LmZpZm9zaXplCT0gMTsKKworI2lmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQorI2lmZGVmIF9fSDgzMDBTX18KKwkJc2NpX3BvcnRzW2ldLmVuYWJsZQk9IGg4MzAwX3NjaV9lbmFibGU7CisJCXNjaV9wb3J0c1tpXS5kaXNhYmxlCT0gaDgzMDBfc2NpX2Rpc2FibGU7CiAjZW5kaWYKLX07CisJCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBDT05GSUdfQ1BVX0NMT0NLOworI2VsaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCisJCXNjaV9wb3J0c1tpXS5wb3J0LnVhcnRjbGsgPSBjdXJyZW50X2NwdV9kYXRhLm1vZHVsZV9jbG9jayAqIDE2OworI2Vsc2UKKwkJLyoKKwkJICogWFhYOiBXZSBzaG91bGQgdXNlIGEgcHJvcGVyIFNDSS9TQ0lGIGNsb2NrCisJCSAqLworCQl7CisJCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KCJtb2R1bGVfY2xrIik7CisJCQlzY2lfcG9ydHNbaV0ucG9ydC51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgKiAxNjsKKwkJCWNsa19wdXQoY2xrKTsKKwkJfQorI2VuZGlmCisKKwkJc2NpX3BvcnRzW2ldLmJyZWFrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykmc2NpX3BvcnRzW2ldOworCQlzY2lfcG9ydHNbaV0uYnJlYWtfdGltZXIuZnVuY3Rpb24gPSBzY2lfYnJlYWtfdGltZXI7CisKKwkJaW5pdF90aW1lcigmc2NpX3BvcnRzW2ldLmJyZWFrX3RpbWVyKTsKKwl9Cit9CisKK2ludCBfX2luaXQgZWFybHlfc2NpX3NldHVwKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCit7CisJaWYgKHVubGlrZWx5KHBvcnQtPmxpbmUgPiBTQ0lfTlBPUlRTKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlzY2lfaW5pdF9wb3J0cygpOworCisJc2NpX3BvcnRzW3BvcnQtPmxpbmVdLnBvcnQubWVtYmFzZQk9IHBvcnQtPm1lbWJhc2U7CisJc2NpX3BvcnRzW3BvcnQtPmxpbmVdLnBvcnQubWFwYmFzZQk9IHBvcnQtPm1hcGJhc2U7CisJc2NpX3BvcnRzW3BvcnQtPmxpbmVdLnBvcnQudHlwZQkJPSBwb3J0LT50eXBlOworCisJcmV0dXJuIDA7Cit9CiAKICNpZmRlZiBDT05GSUdfU0VSSUFMX1NIX1NDSV9DT05TT0xFCiAvKgpAQCAtMTU1OSwzNCArMTE3NywzOCBAQAogCWludCBmbG93ID0gJ24nOwogCWludCByZXQ7CiAKKwkvKgorCSAqIENoZWNrIHdoZXRoZXIgYW4gaW52YWxpZCB1YXJ0IG51bWJlciBoYXMgYmVlbiBzcGVjaWZpZWQsIGFuZAorCSAqIGlmIHNvLCBzZWFyY2ggZm9yIHRoZSBmaXJzdCBhdmFpbGFibGUgcG9ydCB0aGF0IGRvZXMgaGF2ZQorCSAqIGNvbnNvbGUgc3VwcG9ydC4KKwkgKi8KKwlpZiAoY28tPmluZGV4ID49IFNDSV9OUE9SVFMpCisJCWNvLT5pbmRleCA9IDA7CisKIAlzZXJpYWxfY29uc29sZV9wb3J0ID0gJnNjaV9wb3J0c1tjby0+aW5kZXhdOwogCXBvcnQgPSAmc2VyaWFsX2NvbnNvbGVfcG9ydC0+cG9ydDsKLQlwb3J0LT50eXBlID0gc2VyaWFsX2NvbnNvbGVfcG9ydC0+dHlwZTsKLQotI2lmZGVmIENPTkZJR19TVVBFUkg2NAotCS8qIFRoaXMgaXMgZXNwZWNpYWxseSBuZWVkZWQgb24gc2g2NCB0byByZW1hcCB0aGUgU0NJRiAqLwotCXNjaV9jb25maWdfcG9ydChwb3J0LCAwKTsKLSNlbmRpZgogCiAJLyoKLQkgKiBXZSBuZWVkIHRvIHNldCB0aGUgaW5pdGlhbCB1YXJ0Y2xrIGhlcmUsIHNpbmNlIG90aGVyd2lzZSBpdCB3aWxsCi0JICogb25seSBldmVyIGJlIHNldHVwIGF0IHNjaV9pbml0KCkgdGltZS4KKwkgKiBBbHNvIG5lZWQgdG8gY2hlY2sgcG9ydC0+dHlwZSwgd2UgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhbnkKKwkgKiBVUElPX1BPUlQgcG9ydHMsIGJ1dCB1YXJ0X3JlcG9ydF9wb3J0KCkgaGFuZGlseSBtaXNyZXBvcnRzCisJICogaXQgYW55d2F5cyBpZiB3ZSBkb24ndCBoYXZlIGEgcG9ydCBhdmFpbGFibGUgYnkgdGhlIHRpbWUgdGhpcyBpcworCSAqIGNhbGxlZC4KIAkgKi8KLSNpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKLQlwb3J0LT51YXJ0Y2xrID0gQ09ORklHX0NQVV9DTE9DSzsKKwlpZiAoIXBvcnQtPnR5cGUpCisJCXJldHVybiAtRU5PREVWOworCWlmICghcG9ydC0+bWVtYmFzZSB8fCAhcG9ydC0+bWFwYmFzZSkKKwkJcmV0dXJuIC1FTk9ERVY7CiAKLSNpZiBkZWZpbmVkKF9fSDgzMDBTX18pCi0JaDgzMDBfc2NpX2VuYWJsZShwb3J0LCBzY2lfZW5hYmxlKTsKLSNlbmRpZgotI2VsaWYgZGVmaW5lZChDT05GSUdfU1VQRVJINjQpCi0JcG9ydC0+dWFydGNsayA9IGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrICogMTY7Ci0jZWxzZQotCXsKLQkJc3RydWN0IGNsayAqY2xrID0gY2xrX2dldCgibW9kdWxlX2NsayIpOwotCQlwb3J0LT51YXJ0Y2xrID0gY2xrX2dldF9yYXRlKGNsaykgKiAxNjsKLQkJY2xrX3B1dChjbGspOwotCX0KLSNlbmRpZgorCXNwaW5fbG9ja19pbml0KCZwb3J0LT5sb2NrKTsKKworCXBvcnQtPnR5cGUgPSBzZXJpYWxfY29uc29sZV9wb3J0LT50eXBlOworCisJaWYgKHBvcnQtPmZsYWdzICYgVVBGX0lPUkVNQVApCisJCXNjaV9jb25maWdfcG9ydChwb3J0LCAwKTsKKworCWlmIChzZXJpYWxfY29uc29sZV9wb3J0LT5lbmFibGUpCisJCXNlcmlhbF9jb25zb2xlX3BvcnQtPmVuYWJsZShwb3J0KTsKKwogCWlmIChvcHRpb25zKQogCQl1YXJ0X3BhcnNlX29wdGlvbnMob3B0aW9ucywgJmJhdWQsICZwYXJpdHksICZiaXRzLCAmZmxvdyk7CiAKQEAgLTE2MDQsMTcgKzEyMjYsMTcgQEAKIAkuZGV2aWNlCQk9IHVhcnRfY29uc29sZV9kZXZpY2UsCiAJLndyaXRlCQk9IHNlcmlhbF9jb25zb2xlX3dyaXRlLAogCS5zZXR1cAkJPSBzZXJpYWxfY29uc29sZV9zZXR1cCwKLQkuZmxhZ3MJCT0gQ09OX1BSSU5UQlVGRkVSLAorCS5mbGFncwkJPSBDT05fUFJJTlRCVUZGRVIsIAogCS5pbmRleAkJPSAtMSwKIAkuZGF0YQkJPSAmc2NpX3VhcnRfZHJpdmVyLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgc2NpX2NvbnNvbGVfaW5pdCh2b2lkKQogeworCXNjaV9pbml0X3BvcnRzKCk7CiAJcmVnaXN0ZXJfY29uc29sZSgmc2VyaWFsX2NvbnNvbGUpOwogCXJldHVybiAwOwogfQotCiBjb25zb2xlX2luaXRjYWxsKHNjaV9jb25zb2xlX2luaXQpOwogI2VuZGlmIC8qIENPTkZJR19TRVJJQUxfU0hfU0NJX0NPTlNPTEUgKi8KIApAQCAtMTY0OSw2ICsxMjcxLDggQEAKIAlpbnQgcGFyaXR5ID0gJ24nOwogCWludCBmbG93ID0gJ24nOwogCisJc3Bpbl9sb2NrX2luaXQoJnBvcnQtPmxvY2spOworCiAJaWYgKGNvLT5pbmRleCAhPSBrZ2RiX3BvcnRudW0pCiAJCWNvLT5pbmRleCA9IGtnZGJfcG9ydG51bTsKIApAQCAtMTY3NywxMCArMTMwMSwxMCBAQAogLyogUmVnaXN0ZXIgdGhlIEtHREIgY29uc29sZSBzbyB3ZSBnZXQgbWVzc2FnZXMgKGQnb2ghKSAqLwogc3RhdGljIGludCBfX2luaXQga2dkYl9jb25zb2xlX2luaXQodm9pZCkKIHsKKwlzY2lfaW5pdF9wb3J0cygpOwogCXJlZ2lzdGVyX2NvbnNvbGUoJmtnZGJfY29uc29sZSk7CiAJcmV0dXJuIDA7CiB9Ci0KIGNvbnNvbGVfaW5pdGNhbGwoa2dkYl9jb25zb2xlX2luaXQpOwogI2VuZGlmIC8qIENPTkZJR19TSF9LR0RCX0NPTlNPTEUgKi8KIApAQCAtMTcwMSw2MCArMTMyNSwxMzIgQEAKIAkuZGV2X25hbWUJPSAidHR5U0MiLAogCS5tYWpvcgkJPSBTQ0lfTUFKT1IsCiAJLm1pbm9yCQk9IFNDSV9NSU5PUl9TVEFSVCwKKwkubnIJCT0gU0NJX05QT1JUUywKIAkuY29ucwkJPSBTQ0lfQ09OU09MRSwKIH07CiAKLXN0YXRpYyBpbnQgX19pbml0IHNjaV9pbml0KHZvaWQpCisvKgorICogUmVnaXN0ZXIgYSBzZXQgb2Ygc2VyaWFsIGRldmljZXMgYXR0YWNoZWQgdG8gYSBwbGF0Zm9ybSBkZXZpY2UuICBUaGUKKyAqIGxpc3QgaXMgdGVybWluYXRlZCB3aXRoIGEgemVybyBmbGFncyBlbnRyeSwgd2hpY2ggbWVhbnMgd2UgZXhwZWN0CisgKiBhbGwgZW50cmllcyB0byBoYXZlIGF0IGxlYXN0IFVQRl9CT09UX0FVVE9DT05GIHNldC4gUGxhdGZvcm1zIHRoYXQgbmVlZAorICogcmVtYXBwaW5nIChzdWNoIGFzIHNoNjQpIHNob3VsZCBhbHNvIHNldCBVUEZfSU9SRU1BUC4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgc2NpX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKIHsKLQlpbnQgY2hhbiwgcmV0OworCXN0cnVjdCBwbGF0X3NjaV9wb3J0ICpwID0gZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlpbnQgaTsKIAotCXByaW50aygiJXMiLCBiYW5uZXIpOworCWZvciAoaSA9IDA7IHAgJiYgcC0+ZmxhZ3MgIT0gMCAmJiBpIDwgU0NJX05QT1JUUzsgcCsrLCBpKyspIHsKKwkJc3RydWN0IHNjaV9wb3J0ICpzY2lwb3J0ID0gJnNjaV9wb3J0c1tpXTsKIAotCXNjaV91YXJ0X2RyaXZlci5uciA9IEFSUkFZX1NJWkUoc2NpX3BvcnRzKTsKKwkJc2NpcG9ydC0+cG9ydC5tYXBiYXNlCT0gcC0+bWFwYmFzZTsKIAotCXJldCA9IHVhcnRfcmVnaXN0ZXJfZHJpdmVyKCZzY2lfdWFydF9kcml2ZXIpOwotCWlmIChyZXQgPT0gMCkgewotCQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgU0NJX05QT1JUUzsgY2hhbisrKSB7Ci0JCQlzdHJ1Y3Qgc2NpX3BvcnQgKnNjaXBvcnQgPSAmc2NpX3BvcnRzW2NoYW5dOworCQkvKgorCQkgKiBGb3IgdGhlIHNpbXBsZSAoYW5kIG1ham9yaXR5IG9mKSBjYXNlcyB3aGVyZSB3ZSBkb24ndCBuZWVkCisJCSAqIHRvIGRvIGFueSByZW1hcHBpbmcsIGp1c3QgY2FzdCB0aGUgY29va2llIGRpcmVjdGx5LgorCQkgKi8KKwkJaWYgKHAtPm1hcGJhc2UgJiYgIXAtPm1lbWJhc2UgJiYgIShwLT5mbGFncyAmIFVQRl9JT1JFTUFQKSkKKwkJCXAtPm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtICopcC0+bWFwYmFzZTsKIAotI2lmIGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKQotCQkJc2NpcG9ydC0+cG9ydC51YXJ0Y2xrID0gQ09ORklHX0NQVV9DTE9DSzsKLSNlbGlmIGRlZmluZWQoQ09ORklHX1NVUEVSSDY0KQotCQkJc2NpcG9ydC0+cG9ydC51YXJ0Y2xrID0gY3VycmVudF9jcHVfZGF0YS5tb2R1bGVfY2xvY2sgKiAxNjsKLSNlbHNlCi0JCQlzdHJ1Y3QgY2xrICpjbGsgPSBjbGtfZ2V0KCJtb2R1bGVfY2xrIik7Ci0JCQlzY2lwb3J0LT5wb3J0LnVhcnRjbGsgPSBjbGtfZ2V0X3JhdGUoY2xrKSAqIDE2OwotCQkJY2xrX3B1dChjbGspOwotI2VuZGlmCi0JCQl1YXJ0X2FkZF9vbmVfcG9ydCgmc2NpX3VhcnRfZHJpdmVyLCAmc2NpcG9ydC0+cG9ydCk7Ci0JCQlzY2lwb3J0LT5icmVha190aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpc2NpcG9ydDsKLQkJCXNjaXBvcnQtPmJyZWFrX3RpbWVyLmZ1bmN0aW9uID0gc2NpX2JyZWFrX3RpbWVyOwotCQkJaW5pdF90aW1lcigmc2NpcG9ydC0+YnJlYWtfdGltZXIpOwotCQl9CisJCXNjaXBvcnQtPnBvcnQubWVtYmFzZQk9IHAtPm1lbWJhc2U7CisKKwkJc2NpcG9ydC0+cG9ydC5pcnEJPSBwLT5pcnFzW1NDSXhfVFhJX0lSUV07CisJCXNjaXBvcnQtPnBvcnQuZmxhZ3MJPSBwLT5mbGFnczsKKwkJc2NpcG9ydC0+cG9ydC5kZXYJPSAmZGV2LT5kZXY7CisKKwkJc2NpcG9ydC0+dHlwZQkJPSBzY2lwb3J0LT5wb3J0LnR5cGUgPSBwLT50eXBlOworCisJCW1lbWNweSgmc2NpcG9ydC0+aXJxcywgJnAtPmlycXMsIHNpemVvZihwLT5pcnFzKSk7CisKKwkJdWFydF9hZGRfb25lX3BvcnQoJnNjaV91YXJ0X2RyaXZlciwgJnNjaXBvcnQtPnBvcnQpOwogCX0KIAogI2lmZGVmIENPTkZJR19DUFVfRlJFUQogCWNwdWZyZXFfcmVnaXN0ZXJfbm90aWZpZXIoJnNjaV9uYiwgQ1BVRlJFUV9UUkFOU0lUSU9OX05PVElGSUVSKTsKLQlwcmludGsoInNjaTogQ1BVIGZyZXF1ZW5jeSBub3RpZmllciByZWdpc3RlcmVkXG4iKTsKKwlkZXZfaW5mbygmZGV2LT5kZXYsICJzY2k6IENQVSBmcmVxdWVuY3kgbm90aWZpZXIgcmVnaXN0ZXJlZFxuIik7CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19TSF9TVEFOREFSRF9CSU9TCiAJc2hfYmlvc19nZGJfZGV0YWNoKCk7CiAjZW5kaWYKIAorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBzY2lfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTQ0lfTlBPUlRTOyBpKyspCisJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzY2lfdWFydF9kcml2ZXIsICZzY2lfcG9ydHNbaV0ucG9ydCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzY2lfc3VzcGVuZChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBTQ0lfTlBPUlRTOyBpKyspIHsKKwkJc3RydWN0IHNjaV9wb3J0ICpwID0gJnNjaV9wb3J0c1tpXTsKKworCQlpZiAocC0+dHlwZSAhPSBQT1JUX1VOS05PV04gJiYgcC0+cG9ydC5kZXYgPT0gJmRldi0+ZGV2KQorCQkJdWFydF9zdXNwZW5kX3BvcnQoJnNjaV91YXJ0X2RyaXZlciwgJnAtPnBvcnQpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNjaV9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFNDSV9OUE9SVFM7IGkrKykgeworCQlzdHJ1Y3Qgc2NpX3BvcnQgKnAgPSAmc2NpX3BvcnRzW2ldOworCisJCWlmIChwLT50eXBlICE9IFBPUlRfVU5LTk9XTiAmJiBwLT5wb3J0LmRldiA9PSAmZGV2LT5kZXYpCisJCQl1YXJ0X3Jlc3VtZV9wb3J0KCZzY2lfdWFydF9kcml2ZXIsICZwLT5wb3J0KTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2NpX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gc2NpX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3Aoc2NpX3JlbW92ZSksCisJLnN1c3BlbmQJPSBzY2lfc3VzcGVuZCwKKwkucmVzdW1lCQk9IHNjaV9yZXN1bWUsCisJLmRyaXZlcgkJPSB7CisJCS5uYW1lCT0gInNoLXNjaSIsCisJCS5vd25lcgk9IFRISVNfTU9EVUxFLAorCX0sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBzY2lfaW5pdCh2b2lkKQoreworCWludCByZXQ7CisKKwlwcmludGsoYmFubmVyKTsKKworCXNjaV9pbml0X3BvcnRzKCk7CisKKwlyZXQgPSB1YXJ0X3JlZ2lzdGVyX2RyaXZlcigmc2NpX3VhcnRfZHJpdmVyKTsKKwlpZiAobGlrZWx5KHJldCA9PSAwKSkgeworCQlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnNjaV9kcml2ZXIpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjaV91YXJ0X2RyaXZlcik7CisJfQorCiAJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0IHNjaV9leGl0KHZvaWQpCiB7Ci0JaW50IGNoYW47Ci0KLQlmb3IgKGNoYW4gPSAwOyBjaGFuIDwgU0NJX05QT1JUUzsgY2hhbisrKQotCQl1YXJ0X3JlbW92ZV9vbmVfcG9ydCgmc2NpX3VhcnRfZHJpdmVyLCAmc2NpX3BvcnRzW2NoYW5dLnBvcnQpOwotCisJcGxhdGZvcm1fZHJpdmVyX3VucmVnaXN0ZXIoJnNjaV9kcml2ZXIpOwogCXVhcnRfdW5yZWdpc3Rlcl9kcml2ZXIoJnNjaV91YXJ0X2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KHNjaV9pbml0KTsKIG1vZHVsZV9leGl0KHNjaV9leGl0KTsKIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvc2gtc2NpLmggYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAppbmRleCBhYjMyMGZhLi4yODY0M2M0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaAorKysgYi9kcml2ZXJzL3NlcmlhbC9zaC1zY2kuaApAQCAtMTAsNyArMTAsOSBAQAogICogIE1vZGlmaWVkIHRvIHN1cHBvcnQgU0g3MzAwKFNILU1vYmlsZSkgU0NJRi4gVGFrYXNoaSBLdXN1ZGEgKEp1biAyMDAzKS4KICAqICBNb2RpZmllZCB0byBzdXBwb3J0IEg4LzMwMCBTZXJpZXMgWW9zaGlub3JpIFNhdG8gKEZlYiAyMDA0KS4KICAqLworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9jb3JlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CiAKICNpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykKICNpbmNsdWRlIDxhc20vZ3Bpby5oPgpAQCAtMjIsNDAgKzI0LDEzIEBACiAjZW5kaWYKICNlbmRpZgogCi0vKiBPZmZzZXRzIGludG8gdGhlIHNjaV9wb3J0LT5pcnFzIGFycmF5ICovCi0jZGVmaW5lIFNDSXhfRVJJX0lSUSAwCi0jZGVmaW5lIFNDSXhfUlhJX0lSUSAxCi0jZGVmaW5lIFNDSXhfVFhJX0lSUSAyCi0KLS8qICAgICAgICAgICAgICAgICAgICAgRVJJLCBSWEksIFRYSSwgQlJJICovCi0jZGVmaW5lIFNDSV9JUlFTICAgICAgeyAyMywgIDI0LCAgMjUsICAgMCB9Ci0jZGVmaW5lIFNIM19TQ0lGX0lSUVMgeyA1NiwgIDU3LCAgNTksICA1OCB9Ci0jZGVmaW5lIFNIM19JUkRBX0lSUVMgeyA1MiwgIDUzLCAgNTUsICA1NCB9Ci0jZGVmaW5lIFNINF9TQ0lGX0lSUVMgeyA0MCwgIDQxLCAgNDMsICA0MiB9Ci0jZGVmaW5lIFNUQjFfU0NJRjFfSVJRUyB7MjMsIDI0LCAgMjYsICAyNSB9Ci0jZGVmaW5lIFNINzc2MF9TQ0lGMF9JUlFTIHsgNTIsIDUzLCA1NSwgNTQgfQotI2RlZmluZSBTSDc3NjBfU0NJRjFfSVJRUyB7IDcyLCA3MywgNzUsIDc0IH0KLSNkZWZpbmUgU0g3NzYwX1NDSUYyX0lSUVMgeyA3NiwgNzcsIDc5LCA3OCB9Ci0jZGVmaW5lIFNINzMwMF9TQ0lGMF9JUlFTIHs4MCwgIDgwLCAgODAsICA4MCB9Ci0jZGVmaW5lIFNINzMxODBfU0NJRl9JUlFTIHs4MCwgIDgxLCAgODMsICA4MiB9Ci0jZGVmaW5lIEg4MzAwSF9TQ0lfSVJRUzAgezUyLCA1MywgNTQsICAgMCB9Ci0jZGVmaW5lIEg4MzAwSF9TQ0lfSVJRUzEgezU2LCA1NywgNTgsICAgMCB9Ci0jZGVmaW5lIEg4MzAwSF9TQ0lfSVJRUzIgezYwLCA2MSwgNjIsICAgMCB9Ci0jZGVmaW5lIEg4U19TQ0lfSVJRUzAgezg4LCA4OSwgOTAsICAgMCB9Ci0jZGVmaW5lIEg4U19TQ0lfSVJRUzEgezkyLCA5MywgOTQsICAgMCB9Ci0jZGVmaW5lIEg4U19TQ0lfSVJRUzIgezk2LCA5NywgOTgsICAgMCB9Ci0jZGVmaW5lIFNINV9TQ0lGX0lSUVMgezM5LCA0MCwgNDIsICAgMCB9Ci0jZGVmaW5lCVNINzc3MF9TQ0lGMF9JUlFTIHs2MSwgNjEsIDYxLCA2MSB9Ci0jZGVmaW5lCVNINzc3MF9TQ0lGMV9JUlFTIHs2MiwgNjIsIDYyLCA2MiB9Ci0jZGVmaW5lCVNINzc3MF9TQ0lGMl9JUlFTIHs2MywgNjMsIDYzLCA2MyB9Ci0jZGVmaW5lCVNINzc4MF9TQ0lGMF9JUlFTIHs0MCwgNDEsIDQzLCA0MiB9Ci0jZGVmaW5lCVNINzc4MF9TQ0lGMV9JUlFTIHs3NiwgNzcsIDc5LCA3OCB9Ci0KICNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDgpCiAjIGRlZmluZSBTQ1NQVFIgMHhmZmZmZmY3YyAvKiA4IGJpdCAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KSAgICAgICAgICAweDMwIC8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSAqLwogIyBkZWZpbmUgU0NJX09OTFkKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikKICMgZGVmaW5lIFNDUENSICAweEE0MDAwMTE2IC8qIDE2IGJpdCBTQ0kgYW5kIFNDSUYgKi8KICMgZGVmaW5lIFNDUERSICAweEE0MDAwMTM2IC8qIDggIGJpdCBTQ0kgYW5kIFNDSUYgKi8KICMgZGVmaW5lIFNDU0NSX0lOSVQocG9ydCkgICAgICAgICAgMHgzMCAvKiBUSUU9MCxSSUU9MCxURT0xLFJFPTEgKi8KQEAgLTk5LDEyICs3NCwyMyBAQAogIyBkZWZpbmUgU0NQRFIgIDB4QTQwNTAxMzYgICAgICAgIC8qIDE2IGJpdCBTQ0lGICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpICAweDAwMzAgLyogVElFPTAsUklFPTAsVEU9MSxSRT0xICovCiAjIGRlZmluZSBTQ0lGX09OTFkKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKyMgZGVmaW5lIFNDU1BUUjAgMHhBNDQwMDAwMAkgIC8qIDE2IGJpdCBTQ0lGICovCisjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpICAweDAwMzAgLyogVElFPTAsUklFPTAsVEU9MSxSRT0xICovCisjIGRlZmluZSBTQ0lGX09OTFkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzMxODApCiAjIGRlZmluZSBTQ1BEUiAgMHhBNDA1MDEzOCAgICAgICAgLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjIgU0NQRFIKICMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEgICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwogIyBkZWZpbmUgU0NTQ1JfSU5JVChwb3J0KSAgMHgwMDM4IC8qIFRJRT0wLFJJRT0wLFRFPTEsUkU9MSAqLwogIyBkZWZpbmUgU0NJRl9PTkxZCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczNDMpCisjIGRlZmluZSBTQ1NQVFIwIDB4ZmZlMDAwMTAJLyogMTYgYml0IFNDSUYgKi8KKyMgZGVmaW5lIFNDU1BUUjEgMHhmZmUxMDAxMAkvKiAxNiBiaXQgU0NJRiAqLworIyBkZWZpbmUgU0NTUFRSMiAweGZmZTIwMDEwCS8qIDE2IGJpdCBTQ0lGICovCisjIGRlZmluZSBTQ1NQVFIzIDB4ZmZlMzAwMTAJLyogMTYgYml0IFNDSUYgKi8KKyMgZGVmaW5lIFNDU0NSX0lOSVQocG9ydCkgMHgzMgkvKiBUSUU9MCxSSUU9MCxURT0xLFJFPTEsUkVJRT0wLENLRT0xICovCisjIGRlZmluZSBTQ0lGX09OTFkKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINF8yMDIpCiAjIGRlZmluZSBTQ1NQVFIyIDB4ZmZlODAwMjAgLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDSUZfT1JFUiAweDAwMDEgICAvKiBvdmVycnVuIGVycm9yIGJpdCAqLwpAQCAtMTQ1LDcgKzEzMSw3IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAjIGRlZmluZSBTQ1NQVFIwCTB4ZmZlMDAwMjQJLyogMTYgYml0IFNDSUYgKi8KICMgZGVmaW5lIFNDU1BUUjEJMHhmZmUxMDAyNAkvKiAxNiBiaXQgU0NJRiAqLwotIyBkZWZpbmUgU0NJRl9PUEVSCTB4MDAwMQkJLyogT3ZlcnJ1biBlcnJvciBiaXQgKi8KKyMgZGVmaW5lIFNDSUZfT1JFUgkweDAwMDEJCS8qIE92ZXJydW4gZXJyb3IgYml0ICovCiAjIGRlZmluZSBTQ1NDUl9JTklUKHBvcnQpCTB4M2EJLyogVElFPTAsUklFPTAsVEU9MSxSRT0xLFJFSUU9MSAqLwogIyBkZWZpbmUgU0NJRl9PTkxZCiAjZWxzZQpAQCAtMjczLDE1ICsyNTksNiBAQAogICovCiAjZGVmaW5lIFNDSV9FVkVOVF9XUklURV9XQUtFVVAJMAogCi1zdHJ1Y3Qgc2NpX3BvcnQgewotCXN0cnVjdCB1YXJ0X3BvcnQgcG9ydDsKLQlpbnQgdHlwZTsKLQl1bnNpZ25lZCBjaGFyIGlycXNbNF07IC8qIEVSSSwgUlhJLCBUWEksIEJSSSAqLwotCXZvaWQgKCppbml0X3BpbnMpKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQsIHVuc2lnbmVkIGludCBjZmxhZyk7Ci0JaW50IGJyZWFrX2ZsYWc7Ci0Jc3RydWN0IHRpbWVyX2xpc3QgYnJlYWtfdGltZXI7Ci19OwotCiAjZGVmaW5lIFNDSV9JTihzaXplLCBvZmZzZXQpCQkJCQlcCiAgIHVuc2lnbmVkIGludCBhZGRyID0gcG9ydC0+bWFwYmFzZSArIChvZmZzZXQpOwkJCVwKICAgaWYgKChzaXplKSA9PSA4KSB7CQkJCQkJXApAQCAtMzM2LDcgKzMxMyw5IEBACiAgIH0KIAogI2lmZGVmIENPTkZJR19DUFVfU0gzCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQogI2RlZmluZSBTQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKSBcCiAgIENQVV9TQ0lGX0ZOUyhuYW1lLCBzY2lmX29mZnNldCwgc2NpZl9zaXplKQogI2Vsc2UKQEAgLTM2Miw3ICszNDEsOSBAQAogICBDUFVfU0NJRl9GTlMobmFtZSwgc2g0X3NjaWZfb2Zmc2V0LCBzaDRfc2NpZl9zaXplKQogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiBTQ0lGX0ZOUyhTQ1NNUiwgIDB4MDAsIDE2KQogU0NJRl9GTlMoU0NCUlIsICAweDA0LCAgOCkKIFNDSUZfRk5TKFNDU0NSLCAgMHgwOCwgMTYpCkBAIC00NDcsNyArNDI4LDkgQEAKIAkJcmV0dXJuIGN0cmxfaW5iKFNDU1BUUikmMHgwMSA/IDEgOiAwOyAvKiBTQ0kgKi8KIAlyZXR1cm4gMTsKIH0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNikKIHN0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKIHsKIAlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZmZmZTgwKQpAQCAtNDY3LDYgKzQ1MCwxMyBAQAogCQlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MTAgPyAxIDogMDsgLyogU0NJRiAqLwogCXJldHVybiAxOwogfQorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQorc3RhdGljIGlubGluZSBpbnQgc2NpX3J4ZF9pbihzdHJ1Y3QgdWFydF9wb3J0ICpwb3J0KQoreworCWlmIChwb3J0LT5tYXBiYXNlID09IFNDU1BUUjApCisJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIwICsgMHgxMCkgJiAweDAxID8gMSA6IDA7CisJcmV0dXJuIDE7Cit9CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzc1MSkgfHwgXAogICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g0XzIwMikKQEAgLTUwNCw2ICs0OTQsMTkgQEAKIHsKIAlyZXR1cm4gY3RybF9pbmIoU0NQRFIpJjB4MDEgPyAxIDogMDsgLyogU0NJRjAgKi8KIH0KKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzM0MykKK3N0YXRpYyBpbmxpbmUgaW50IHNjaV9yeGRfaW4oc3RydWN0IHVhcnRfcG9ydCAqcG9ydCkKK3sKKwlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTAwMDAwKQorCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMCkgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCWlmIChwb3J0LT5tYXBiYXNlID09IDB4ZmZlMTAwMDApCisJCXJldHVybiBjdHJsX2ludyhTQ1NQVFIxKSAmIDB4MDAwMSA/IDEgOiAwOyAvKiBTQ0lGICovCisJaWYgKHBvcnQtPm1hcGJhc2UgPT0gMHhmZmUyMDAwMCkKKwkJcmV0dXJuIGN0cmxfaW53KFNDU1BUUjIpICYgMHgwMDAxID8gMSA6IDA7IC8qIFNDSUYgKi8KKwlpZiAocG9ydC0+bWFwYmFzZSA9PSAweGZmZTMwMDAwKQorCQlyZXR1cm4gY3RybF9pbncoU0NTUFRSMykgJiAweDAwMDEgPyAxIDogMDsgLyogU0NJRiAqLworCXJldHVybiAxOworfQogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU1Q0MFNUQjEpCiBzdGF0aWMgaW5saW5lIGludCBzY2lfcnhkX2luKHN0cnVjdCB1YXJ0X3BvcnQgKnBvcnQpCiB7CkBAIC01ODcsNCArNTkwLDMgQEAKICNlbHNlIC8qIEdlbmVyaWMgU0ggKi8KICNkZWZpbmUgU0NCUlJfVkFMVUUoYnBzLCBjbGspICgoY2xrKzE2KmJwcykvKDMyKmJwcyktMSkKICNlbmRpZgotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuc3UuYwppbmRleCBkM2E1YWVlLi45YjNiOWFhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW5zdS5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnN1LmMKQEAgLTE0OTksNiArMTQ5OSw5IEBACiAJCXVhcnRfcmVtb3ZlX29uZV9wb3J0KCZzdW5zdV9yZWcsICZ1cC0+cG9ydCk7CiAJfQogCisJaWYgKHVwLT5wb3J0Lm1lbWJhc2UpCisJCW9mX2lvdW5tYXAodXAtPnBvcnQubWVtYmFzZSwgdXAtPnJlZ19zaXplKTsKKwogCWRldl9zZXRfZHJ2ZGF0YSgmZGV2LT5kZXYsIE5VTEwpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jIGIvZHJpdmVycy9zZXJpYWwvc3Vuemlsb2cuYwppbmRleCBkMzRmMzM2Li4wZGEzZWJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9zdW56aWxvZy5jCisrKyBiL2RyaXZlcnMvc2VyaWFsL3N1bnppbG9nLmMKQEAgLTEyNzAsNyArMTI3MCw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHZvaWQgX19pbml0IHN1bnppbG9nX2luaXRfaHcoc3RydWN0IHVhcnRfc3Vuemlsb2dfcG9ydCAqdXApCitzdGF0aWMgdm9pZCBfX2RldmluaXQgc3Vuemlsb2dfaW5pdF9odyhzdHJ1Y3QgdWFydF9zdW56aWxvZ19wb3J0ICp1cCkKIHsKIAlzdHJ1Y3Qgemlsb2dfY2hhbm5lbCBfX2lvbWVtICpjaGFubmVsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9LY29uZmlnIGIvZHJpdmVycy91c2IvS2NvbmZpZwppbmRleCAwMDUwNDMxLi5mOWIxNzE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL0tjb25maWcKQEAgLTI1LDYgKzI1LDcgQEAKIAlkZWZhdWx0IHkgaWYgUFhBMjd4CiAJZGVmYXVsdCB5IGlmIEFSQ0hfRVA5M1hYCiAJZGVmYXVsdCB5IGlmIChBUkNIX0FUOTFSTTkyMDAgfHwgQVJDSF9BVDkxU0FNOTI2MSkKKwlkZWZhdWx0IHkgaWYgQVJDSF9QTlg0MDA4CiAJIyBQUEM6CiAJZGVmYXVsdCB5IGlmIFNUQjAzeHh4CiAJZGVmYXVsdCB5IGlmIFBQQ19NUEM1Mnh4CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCmluZGV4IDQ3MTBlYjAuLjk3ZDU3Y2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL01ha2VmaWxlCkBAIC0xNCw2ICsxNCw3IEBACiBvYmotJChDT05GSUdfVVNCX09IQ0lfSENEKQkrPSBob3N0Lwogb2JqLSQoQ09ORklHX1VTQl9VSENJX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfU0w4MTFfSENEKQkrPSBob3N0Lworb2JqLSQoQ09ORklHX1VTQl9VMTMyX0hDRCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19FVFJBWF9VU0JfSE9TVCkJKz0gaG9zdC8KIG9iai0kKENPTkZJR19VU0JfT0hDSV9BVDkxKQkrPSBob3N0LwogCkBAIC0yMyw2ICsyNCw3IEBACiBvYmotJChDT05GSUdfVVNCX1NUT1JBR0UpCSs9IHN0b3JhZ2UvCiBvYmotJChDT05GSUdfVVNCKQkJKz0gc3RvcmFnZS8KIAorb2JqLSQoQ09ORklHX1VTQl9BQ0VDQUQpCSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX1VTQl9BSVBURUspCSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX1VTQl9BVElfUkVNT1RFKQkrPSBpbnB1dC8KIG9iai0kKENPTkZJR19VU0JfSElEKQkJKz0gaW5wdXQvCkBAIC0zMSw4ICszMyw4IEBACiBvYmotJChDT05GSUdfVVNCX01PVVNFKQkJKz0gaW5wdXQvCiBvYmotJChDT05GSUdfVVNCX01UT1VDSCkJKz0gaW5wdXQvCiBvYmotJChDT05GSUdfVVNCX1BPV0VSTUFURSkJKz0gaW5wdXQvCitvYmotJChDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SKSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX1VTQl9XQUNPTSkJCSs9IGlucHV0Lwotb2JqLSQoQ09ORklHX1VTQl9BQ0VDQUQpCSs9IGlucHV0Lwogb2JqLSQoQ09ORklHX1VTQl9YUEFEKQkJKz0gaW5wdXQvCiAKIG9iai0kKENPTkZJR19VU0JfQ0FUQykJCSs9IG5ldC8KQEAgLTQ3LDIyICs0OSwyNCBAQAogCiBvYmotJChDT05GSUdfVVNCX1NFUklBTCkJKz0gc2VyaWFsLwogCitvYmotJChDT05GSUdfVVNCX0FEVVRVWCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfQVBQTEVESVNQTEFZKQkrPSBtaXNjLwogb2JqLSQoQ09ORklHX1VTQl9BVUVSU1dBTEQpCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0NZUFJFU1NfQ1k3QzYzKSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0VNSTI2KQkJKz0gbWlzYy8KIG9iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9GVERJX0VMQU4pCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0lETU9VU0UpCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0xDRCkJCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX0xEKQkJKz0gbWlzYy8KIG9iai0kKENPTkZJR19VU0JfTEVEKQkJKz0gbWlzYy8KIG9iai0kKENPTkZJR19VU0JfTEVHT1RPV0VSKQkrPSBtaXNjLworb2JqLSQoQ09ORklHX1VTQl9QSElER0VUU0VSVk8pCSs9IG1pc2MvCiBvYmotJChDT05GSUdfVVNCX1JJTzUwMCkJKz0gbWlzYy8KK29iai0kKENPTkZJR19VU0JfU0lTVVNCVkdBKQkrPSBtaXNjLwogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gbWlzYy8KIG9iai0kKENPTkZJR19VU0JfVVNTNzIwKQkrPSBtaXNjLwotb2JqLSQoQ09ORklHX1VTQl9QSElER0VUU0VSVk8pCSs9IG1pc2MvCi1vYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkJKz0gbWlzYy8KLW9iai0kKENPTkZJR19VU0JfQVBQTEVESVNQTEFZKQkrPSBtaXNjLwogCiBvYmotJChDT05GSUdfVVNCX0FUTSkJCSs9IGF0bS8KIG9iai0kKENPTkZJR19VU0JfU1BFRURUT1VDSCkJKz0gYXRtLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvYXRtL3VlYWdsZS1hdG0uYyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKaW5kZXggYjM4OTkwYS4uNDY1OTYxYTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9hdG0vdWVhZ2xlLWF0bS5jCisrKyBiL2RyaXZlcnMvdXNiL2F0bS91ZWFnbGUtYXRtLmMKQEAgLTE2MjEsMjYgKzE2MjEsMzIgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBjcmVhdGVfZnNfZW50cmllcyhzdHJ1Y3QgdWVhX3NvZnRjICpzYywgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqYXR0cnNbXSA9IHsKKwkmZGV2X2F0dHJfc3RhdF9zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdF9tZmxhZ3MuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdF9odW1hbl9zdGF0dXMuYXR0ciwKKwkmZGV2X2F0dHJfc3RhdF9kZWxpbi5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3ZpZGNwZS5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3VzcmF0ZS5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X2RzcmF0ZS5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3VzYXR0ZW51YXRpb24uYXR0ciwKKwkmZGV2X2F0dHJfc3RhdF9kc2F0dGVudWF0aW9uLmF0dHIsCisJJmRldl9hdHRyX3N0YXRfdXNtYXJnaW4uYXR0ciwKKwkmZGV2X2F0dHJfc3RhdF9kc21hcmdpbi5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3R4Zmxvdy5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3J4Zmxvdy5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3VzY29yci5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X2RzY29yci5hdHRyLAorCSZkZXZfYXR0cl9zdGF0X3VzdW5jLmF0dHIsCisJJmRldl9hdHRyX3N0YXRfZHN1bmMuYXR0ciwKK307CitzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBhdHRyX2dycCA9IHsKKwkuYXR0cnMgPSBhdHRycywKK307CisKK3N0YXRpYyBpbnQgY3JlYXRlX2ZzX2VudHJpZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7Ci0JLyogc3lzZnMgaW50ZXJmYWNlICovCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3N0YXR1cyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X21mbGFncyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2h1bWFuX3N0YXR1cyk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RlbGluKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdmlkY3BlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNyYXRlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNyYXRlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNhdHRlbnVhdGlvbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzYXR0ZW51YXRpb24pOwotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c21hcmdpbik7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzbWFyZ2luKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdHhmbG93KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfcnhmbG93KTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXNjb3JyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNjb3JyKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfdXN1bmMpOwotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc3VuYyk7CisJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZhdHRyX2dycCk7CiB9CiAKIHN0YXRpYyBpbnQgdWVhX2JpbmQoc3RydWN0IHVzYmF0bV9kYXRhICp1c2JhdG0sIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApAQCAtMTcwOCwzNyArMTcxNCwyNSBAQAogCQlyZXR1cm4gcmV0OwogCX0KIAotCWNyZWF0ZV9mc19lbnRyaWVzKHNjLCBpbnRmKTsKKwlyZXQgPSBjcmVhdGVfZnNfZW50cmllcyhpbnRmKTsKKwlpZiAocmV0KSB7CisJCXVlYV9zdG9wKHNjKTsKKwkJa2ZyZWUoc2MpOworCQlyZXR1cm4gcmV0OworCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgZGVzdHJveV9mc19lbnRyaWVzKHN0cnVjdCB1ZWFfc29mdGMgKnNjLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK3N0YXRpYyB2b2lkIGRlc3Ryb3lfZnNfZW50cmllcyhzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKLQkvKiBzeXNmcyBpbnRlcmZhY2UgKi8KLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfc3RhdHVzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfbWZsYWdzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfaHVtYW5fc3RhdHVzKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZGVsaW4pOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF92aWRjcGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c3JhdGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc3JhdGUpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c2F0dGVudWF0aW9uKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNhdHRlbnVhdGlvbik7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X3VzbWFyZ2luKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3N0YXRfZHNtYXJnaW4pOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF90eGZsb3cpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9yeGZsb3cpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c2NvcnIpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF9kc2NvcnIpOwotCWRldmljZV9yZW1vdmVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc3RhdF91c3VuYyk7Ci0JZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zdGF0X2RzdW5jKTsKKwlzeXNmc19yZW1vdmVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmYXR0cl9ncnApOwogfQogCiBzdGF0aWMgdm9pZCB1ZWFfdW5iaW5kKHN0cnVjdCB1c2JhdG1fZGF0YSAqdXNiYXRtLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlzdHJ1Y3QgdWVhX3NvZnRjICpzYyA9IHVzYmF0bS0+ZHJpdmVyX2RhdGE7CiAKLQlkZXN0cm95X2ZzX2VudHJpZXMoc2MsIGludGYpOworCWRlc3Ryb3lfZnNfZW50cmllcyhpbnRmKTsKIAl1ZWFfc3RvcChzYyk7CiAJa2ZyZWUoc2MpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYyBiL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKaW5kZXggNDhkZWU0YjguLjljYWMxMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NsYXNzL3VzYmxwLmMKKysrIGIvZHJpdmVycy91c2IvY2xhc3MvdXNibHAuYwpAQCAtODEzLDcgKzgxMyw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmxwX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JscF9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkID0JCXVzYmxwX3JlYWQsCiAJLndyaXRlID0JdXNibHBfd3JpdGUsCkBAIC05MjcsNyArOTI3LDkgQEAKIAogCS8qIFJldHJpZXZlIGFuZCBzdG9yZSB0aGUgZGV2aWNlIElEIHN0cmluZy4gKi8KIAl1c2JscF9jYWNoZV9kZXZpY2VfaWRfc3RyaW5nKHVzYmxwKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2llZWUxMjg0X2lkKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGFib3J0X2ludGZkYXRhOwogCiAjaWZkZWYgREVCVUcKIAl1c2JscF9jaGVja19zdGF0dXModXNibHAsIDApOwpAQCAtMTAyMSwxOCArMTAyMywxMyBAQAogCQlmb3IgKGUgPSAwOyBlIDwgaWZkLT5kZXNjLmJOdW1FbmRwb2ludHM7IGUrKykgewogCQkJZXBkID0gJmlmZC0+ZW5kcG9pbnRbZV0uZGVzYzsKIAotCQkJaWYgKChlcGQtPmJtQXR0cmlidXRlcyZVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykhPQotCQkJICAgIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspCi0JCQkJY29udGludWU7Ci0KLQkJCWlmICghKGVwZC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykpIHsKKwkJCWlmICh1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZXBkKSkKIAkJCQlpZiAoIWVwd3JpdGUpCiAJCQkJCWVwd3JpdGUgPSBlcGQ7CiAKLQkJCX0gZWxzZSB7CisJCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZXBkKSkKIAkJCQlpZiAoIWVwcmVhZCkKIAkJCQkJZXByZWFkID0gZXBkOwotCQkJfQogCQl9CiAKIAkJLyogSWdub3JlIGJ1Z2d5IGhhcmR3YXJlIHdpdGhvdXQgdGhlIHJpZ2h0IGVuZHBvaW50cy4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCmluZGV4IGVjNTEwOTIuLjM0ZTliYWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2IvY29yZS9NYWtlZmlsZQpAQCAtNCw3ICs0LDcgQEAKIAogdXNiY29yZS1vYmpzCTo9IHVzYi5vIGh1Yi5vIGhjZC5vIHVyYi5vIG1lc3NhZ2UubyBkcml2ZXIubyBcCiAJCQljb25maWcubyBmaWxlLm8gYnVmZmVyLm8gc3lzZnMubyBlbmRwb2ludC5vIFwKLQkJCWRldmlvLm8gbm90aWZ5Lm8KKwkJCWRldmlvLm8gbm90aWZ5Lm8gZ2VuZXJpYy5vCiAKIGlmZXEgKCQoQ09ORklHX1BDSSkseSkKIAl1c2Jjb3JlLW9ianMJKz0gaGNkLXBjaS5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jIGIvZHJpdmVycy91c2IvY29yZS9idWZmZXIuYwppbmRleCBmNGY0ZWYwLi44NDA0NDJhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2J1ZmZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvYnVmZmVyLmMKQEAgLTEwNCw3ICsxMDQsNyBAQAogCWRtYV9hZGRyX3QJCSpkbWEKICkKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gYnVzX3RvX2hjZChidXMpOwogCWludCAJCQlpOwogCiAJLyogc29tZSBVU0IgaG9zdHMganVzdCB1c2UgUElPICovCkBAIC0xMjcsNyArMTI3LDcgQEAKIAlkbWFfYWRkcl90CQlkbWEKICkKIHsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1cy0+aGNwcml2OworCXN0cnVjdCB1c2JfaGNkCQkqaGNkID0gYnVzX3RvX2hjZChidXMpOwogCWludCAJCQlpOwogCiAJaWYgKCFhZGRyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYyBiL2RyaXZlcnMvdXNiL2NvcmUvY29uZmlnLmMKaW5kZXggNGM5ZTYzZS4uYmZiMzczMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9jb25maWcuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2NvbmZpZy5jCkBAIC00NzUsNyArNDc1LDkgQEAKIAkJaWYgKHJlc3VsdCA8IDApIHsKIAkJCWRldl9lcnIoZGRldiwgInVuYWJsZSB0byByZWFkIGNvbmZpZyBpbmRleCAlZCAiCiAJCQkgICAgImRlc2NyaXB0b3IvJXNcbiIsIGNmZ25vLCAic3RhcnQiKTsKLQkJCWdvdG8gZXJyOworCQkJZGV2X2VycihkZGV2LCAiY2hvcHBpbmcgdG8gJWQgY29uZmlnKHMpXG4iLCBjZmdubyk7CisJCQlkZXYtPmRlc2NyaXB0b3IuYk51bUNvbmZpZ3VyYXRpb25zID0gY2Znbm87CisJCQlicmVhazsKIAkJfSBlbHNlIGlmIChyZXN1bHQgPCA0KSB7CiAJCQlkZXZfZXJyKGRkZXYsICJjb25maWcgaW5kZXggJWQgZGVzY3JpcHRvciB0b28gc2hvcnQgIgogCQkJICAgICIoZXhwZWN0ZWQgJWksIGdvdCAlaSlcbiIsIGNmZ25vLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9kZXZpY2VzLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwppbmRleCBjMGYzNzM0Li4zNTM4YzJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmljZXMuYwpAQCAtNTkzLDcgKzU5Myw3IEBACiAvKiBLZXJuZWwgbG9jayBmb3IgImxhc3RldiIgcHJvdGVjdGlvbiAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JfZGV2aWNlX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgKnN0ID0gKHN0cnVjdCB1c2JfZGV2aWNlX3N0YXR1cyAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgdXNiX2RldmljZV9zdGF0dXMgKnN0ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGludCBtYXNrID0gMDsKIAogCWxvY2tfa2VybmVsKCk7CkBAIC02MDMsNyArNjAzLDcgQEAKIAkJCXVubG9ja19rZXJuZWwoKTsKIAkJCXJldHVybiBQT0xMSU47CiAJCX0KLQkJCisKIAkJLyogd2UgbWF5IGhhdmUgZHJvcHBlZCBCS0wgLSBuZWVkIHRvIGNoZWNrIGZvciBoYXZpbmcgbG9zdCB0aGUgcmFjZSAqLwogCQlpZiAoZmlsZS0+cHJpdmF0ZV9kYXRhKSB7CiAJCQlrZnJlZShzdCk7CkBAIC02NjcsNyArNjY3LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wcyA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzID0gewogCS5sbHNlZWsgPQl1c2JfZGV2aWNlX2xzZWVrLAogCS5yZWFkID0JCXVzYl9kZXZpY2VfcmVhZCwKIAkucG9sbCA9CQl1c2JfZGV2aWNlX3BvbGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2RldmlvLmMKaW5kZXggMjE4NjIxYi4uYTk0YzYzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9kZXZpby5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZGV2aW8uYwpAQCAtNTksNiArNTksOSBAQAogI2RlZmluZSBVU0JfREVWSUNFX01BWAkJCVVTQl9NQVhCVVMgKiAxMjgKIHN0YXRpYyBzdHJ1Y3QgY2xhc3MgKnVzYl9kZXZpY2VfY2xhc3M7CiAKKy8qIE11dHVhbCBleGNsdXNpb24gZm9yIHJlbW92YWwsIG9wZW4sIGFuZCByZWxlYXNlICovCitERUZJTkVfTVVURVgodXNiZnNfbXV0ZXgpOworCiBzdHJ1Y3QgYXN5bmMgewogCXN0cnVjdCBsaXN0X2hlYWQgYXN5bmNsaXN0OwogCXN0cnVjdCBkZXZfc3RhdGUgKnBzOwpAQCAtODcsOSArOTAsMTAgQEAKIAogI2RlZmluZQlNQVhfVVNCRlNfQlVGRkVSX1NJWkUJMTYzODQKIAotc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgY29ubmVjdGVkIChzdHJ1Y3QgZGV2X3N0YXRlICpwcykKIHsKLQlyZXR1cm4gZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQ7CisJcmV0dXJuICghbGlzdF9lbXB0eSgmcHMtPmxpc3QpICYmCisJCQlwcy0+ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpOwogfQogCiBzdGF0aWMgbG9mZl90IHVzYmRldl9sc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWcpCkBAIC0xMTgsNyArMTIyLDcgQEAKIAogc3RhdGljIHNzaXplX3QgdXNiZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqcHBvcykKIHsKLQlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OwogCXNzaXplX3QgcmV0ID0gMDsKIAl1bnNpZ25lZCBsZW47CkBAIC0xMjcsNyArMTMxLDcgQEAKIAogCXBvcyA9ICpwcG9zOwogCXVzYl9sb2NrX2RldmljZShkZXYpOwotCWlmICghY29ubmVjdGVkKGRldikpIHsKKwlpZiAoIWNvbm5lY3RlZChwcykpIHsKIAkJcmV0ID0gLUVOT0RFVjsKIAkJZ290byBlcnI7CiAJfSBlbHNlIGlmIChwb3MgPCAwKSB7CkBAIC0zMDEsNyArMzA1LDcgQEAKIAogc3RhdGljIHZvaWQgYXN5bmNfY29tcGxldGVkKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0gICAgICAgIHN0cnVjdCBhc3luYyAqYXMgPSAoc3RydWN0IGFzeW5jICopdXJiLT5jb250ZXh0OworICAgICAgICBzdHJ1Y3QgYXN5bmMgKmFzID0gdXJiLT5jb250ZXh0OwogICAgICAgICBzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGFzLT5wczsKIAlzdHJ1Y3Qgc2lnaW5mbyBzaW5mbzsKIApAQCAtNTQxLDI1ICs1NDUsMjUgQEAKIAlzdHJ1Y3QgZGV2X3N0YXRlICpwczsKIAlpbnQgcmV0OwogCi0JLyogCi0JICogbm8gbG9ja2luZyBuZWNlc3NhcnkgaGVyZSwgYXMgY2hyZGV2X29wZW4gaGFzIHRoZSBrZXJuZWwgbG9jawotCSAqIChzdGlsbCBhY3F1aXJlIHRoZSBrZXJuZWwgbG9jayBmb3Igc2FmZXR5KQotCSAqLworCS8qIFByb3RlY3QgYWdhaW5zdCBzaW11bHRhbmVvdXMgcmVtb3ZhbCBvciByZWxlYXNlICovCisJbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOworCiAJcmV0ID0gLUVOT01FTTsKIAlpZiAoIShwcyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBkZXZfc3RhdGUpLCBHRlBfS0VSTkVMKSkpCi0JCWdvdG8gb3V0X25vbG9jazsKKwkJZ290byBvdXQ7CiAKLQlsb2NrX2tlcm5lbCgpOwogCXJldCA9IC1FTk9FTlQ7CiAJLyogY2hlY2sgaWYgd2UgYXJlIGNhbGxlZCBmcm9tIGEgcmVhbCBub2RlIG9yIHVzYmZzICovCiAJaWYgKGltYWpvcihpbm9kZSkgPT0gVVNCX0RFVklDRV9NQUpPUikKIAkJZGV2ID0gdXNiZGV2X2xvb2t1cF9taW5vcihpbWlub3IoaW5vZGUpKTsKIAlpZiAoIWRldikKLQkJZGV2ID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKLQlpZiAoIWRldikgewotCQlrZnJlZShwcyk7CisJCWRldiA9IGlub2RlLT5pX3ByaXZhdGU7CisJaWYgKCFkZXYpCiAJCWdvdG8gb3V0OwotCX0KKwlyZXQgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UoZGV2LCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIG91dDsKKwogCXVzYl9nZXRfZGV2KGRldik7CiAJcmV0ID0gMDsKIAlwcy0+ZGV2ID0gZGV2OwpAQCAtNTc5LDMwICs1ODMsMzYgQEAKIAlsaXN0X2FkZF90YWlsKCZwcy0+bGlzdCwgJmRldi0+ZmlsZWxpc3QpOwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IHBzOwogIG91dDoKLQl1bmxvY2tfa2VybmVsKCk7Ci0gb3V0X25vbG9jazoKLSAgICAgICAgcmV0dXJuIHJldDsKKwlpZiAocmV0KQorCQlrZnJlZShwcyk7CisJbXV0ZXhfdW5sb2NrKCZ1c2Jmc19tdXRleCk7CisJcmV0dXJuIHJldDsKIH0KIAogc3RhdGljIGludCB1c2JkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IChzdHJ1Y3QgZGV2X3N0YXRlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwcy0+ZGV2OwogCXVuc2lnbmVkIGludCBpZm51bTsKIAogCXVzYl9sb2NrX2RldmljZShkZXYpOworCisJLyogUHJvdGVjdCBhZ2FpbnN0IHNpbXVsdGFuZW91cyBvcGVuICovCisJbXV0ZXhfbG9jaygmdXNiZnNfbXV0ZXgpOwogCWxpc3RfZGVsX2luaXQoJnBzLT5saXN0KTsKKwltdXRleF91bmxvY2soJnVzYmZzX211dGV4KTsKKwogCWZvciAoaWZudW0gPSAwOyBwcy0+aWZjbGFpbWVkICYmIGlmbnVtIDwgOCpzaXplb2YocHMtPmlmY2xhaW1lZCk7CiAJCQlpZm51bSsrKSB7CiAJCWlmICh0ZXN0X2JpdChpZm51bSwgJnBzLT5pZmNsYWltZWQpKQogCQkJcmVsZWFzZWludGYocHMsIGlmbnVtKTsKIAl9CiAJZGVzdHJveV9hbGxfYXN5bmMocHMpOworCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UoZGV2LCAxKTsKIAl1c2JfdW5sb2NrX2RldmljZShkZXYpOwogCXVzYl9wdXRfZGV2KGRldik7Ci0JcHMtPmRldiA9IE5VTEw7CiAJa2ZyZWUocHMpOwotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBwcm9jX2NvbnRyb2woc3RydWN0IGRldl9zdGF0ZSAqcHMsIHZvaWQgX191c2VyICphcmcpCkBAIC0xMzIyLDcgKzEzMzIsNyBAQAogCQl9CiAJfQogCi0JaWYgKCFjb25uZWN0ZWQocHMtPmRldikpIHsKKwlpZiAoIWNvbm5lY3RlZChwcykpIHsKIAkJa2ZyZWUoYnVmKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQpAQCAtMTM0OSw3ICsxMzU5LDcgQEAKIAkvKiBsZXQga2VybmVsIGRyaXZlcnMgdHJ5IHRvIChyZSliaW5kIHRvIHRoZSBpbnRlcmZhY2UgKi8KIAljYXNlIFVTQkRFVkZTX0NPTk5FQ1Q6CiAJCXVzYl91bmxvY2tfZGV2aWNlKHBzLT5kZXYpOwotCQlidXNfcmVzY2FuX2RldmljZXMoaW50Zi0+ZGV2LmJ1cyk7CisJCXJldHZhbCA9IGJ1c19yZXNjYW5fZGV2aWNlcyhpbnRmLT5kZXYuYnVzKTsKIAkJdXNiX2xvY2tfZGV2aWNlKHBzLT5kZXYpOwogCQlicmVhazsKIApAQCAtMTQxMyw3ICsxNDIzLDcgQEAKICAqLwogc3RhdGljIGludCB1c2JkZXZfaW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGRldl9zdGF0ZSAqcHMgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBzLT5kZXY7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IHJldCA9IC1FTk9UVFk7CkBAIC0xNDIxLDcgKzE0MzEsNyBAQAogCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAl1c2JfbG9ja19kZXZpY2UoZGV2KTsKLQlpZiAoIWNvbm5lY3RlZChkZXYpKSB7CisJaWYgKCFjb25uZWN0ZWQocHMpKSB7CiAJCXVzYl91bmxvY2tfZGV2aWNlKGRldik7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTE1NTYsMTggKzE1NjYsMTggQEAKIC8qIE5vIGtlcm5lbCBsb2NrIC0gZmluZSAqLwogc3RhdGljIHVuc2lnbmVkIGludCB1c2JkZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQogewotCXN0cnVjdCBkZXZfc3RhdGUgKnBzID0gKHN0cnVjdCBkZXZfc3RhdGUgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0gICAgICAgIHVuc2lnbmVkIGludCBtYXNrID0gMDsKKwlzdHJ1Y3QgZGV2X3N0YXRlICpwcyA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CiAKIAlwb2xsX3dhaXQoZmlsZSwgJnBzLT53YWl0LCB3YWl0KTsKIAlpZiAoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUgJiYgIWxpc3RfZW1wdHkoJnBzLT5hc3luY19jb21wbGV0ZWQpKQogCQltYXNrIHw9IFBPTExPVVQgfCBQT0xMV1JOT1JNOwotCWlmICghY29ubmVjdGVkKHBzLT5kZXYpKQorCWlmICghY29ubmVjdGVkKHBzKSkKIAkJbWFzayB8PSBQT0xMRVJSIHwgUE9MTEhVUDsKIAlyZXR1cm4gbWFzazsKIH0KIAotc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zID0geworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2Jmc19kZXZpY2VfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgPQl1c2JkZXZfbHNlZWssCiAJLnJlYWQgPQkJdXNiZGV2X3JlYWQsCiAJLnBvbGwgPQkJdXNiZGV2X3BvbGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jIGIvZHJpdmVycy91c2IvY29yZS9kcml2ZXIuYwppbmRleCBlYzg5MDY1Li4xMTNlNDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2RyaXZlci5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZHJpdmVyLmMKQEAgLTE3LDEyICsxNywxNCBAQAogICoKICAqIE5PVEUhIFRoaXMgaXMgbm90IGFjdHVhbGx5IGEgZHJpdmVyIGF0IGFsbCwgcmF0aGVyIHRoaXMgaXMKICAqIGp1c3QgYSBjb2xsZWN0aW9uIG9mIGhlbHBlciByb3V0aW5lcyB0aGF0IGltcGxlbWVudCB0aGUKLSAqIGdlbmVyaWMgVVNCIHRoaW5ncyB0aGF0IHRoZSByZWFsIGRyaXZlcnMgY2FuIHVzZS4uCisgKiBtYXRjaGluZywgcHJvYmluZywgcmVsZWFzaW5nLCBzdXNwZW5kaW5nIGFuZCByZXN1bWluZyBmb3IKKyAqIHJlYWwgZHJpdmVycy4KICAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgogI2luY2x1ZGUgImhjZC5oIgogI2luY2x1ZGUgInVzYi5oIgogCkBAIC0zNCwzOCArMzYsNiBAQAogCXN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkOwogfTsKIAotCi1zdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KQotewotCXJldHVybiAwOwotfQotc3RhdGljIGludCBnZW5lcmljX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0KLQkvKiBpZiB0aGlzIGlzIG9ubHkgYW4gdW5iaW5kLCBub3QgYSBwaHlzaWNhbCBkaXNjb25uZWN0LCB0aGVuCi0JICogdW5jb25maWd1cmUgdGhlIGRldmljZSAqLwotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKLQkJdXNiX3NldF9jb25maWd1cmF0aW9uKHVkZXYsIDApOwotCi0JLyogaW4gY2FzZSB0aGUgY2FsbCBmYWlsZWQgb3IgdGhlIGRldmljZSB3YXMgc3VzcGVuZGVkICovCi0JaWYgKHVkZXYtPnN0YXRlID49IFVTQl9TVEFURV9DT05GSUdVUkVEKQotCQl1c2JfZGlzYWJsZV9kZXZpY2UodWRldiwgMCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlciA9IHsKLQkub3duZXIgPSBUSElTX01PRFVMRSwKLQkubmFtZSA9CSJ1c2IiLAotCS5idXMgPSAmdXNiX2J1c190eXBlLAotCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCi0JLnJlbW92ZSA9IGdlbmVyaWNfcmVtb3ZlLAotfTsKLQotLyogRnVuIGhhY2sgdG8gZGV0ZXJtaW5lIGlmIHRoZSBzdHJ1Y3QgZGV2aWNlIGlzIGEKLSAqIHVzYiBkZXZpY2Ugb3IgYSB1c2IgaW50ZXJmYWNlLiAqLwotaW50IHVzYl9nZW5lcmljX2RyaXZlcl9kYXRhOwotCiAjaWZkZWYgQ09ORklHX0hPVFBMVUcKIAogLyoKQEAgLTgwLDYgKzUwLDcgQEAKIAl1MzIgaWRWZW5kb3IgPSAwOwogCXUzMiBpZFByb2R1Y3QgPSAwOwogCWludCBmaWVsZHMgPSAwOworCWludCByZXR2YWwgPSAwOwogCiAJZmllbGRzID0gc3NjYW5mKGJ1ZiwgIiV4ICV4IiwgJmlkVmVuZG9yLCAmaWRQcm9kdWN0KTsKIAlpZiAoZmllbGRzIDwgMikKQEAgLTk5LDEwICs3MCwxMiBAQAogCXNwaW5fdW5sb2NrKCZ1c2JfZHJ2LT5keW5pZHMubG9jayk7CiAKIAlpZiAoZ2V0X2RyaXZlcihkcml2ZXIpKSB7Ci0JCWRyaXZlcl9hdHRhY2goZHJpdmVyKTsKKwkJcmV0dmFsID0gZHJpdmVyX2F0dGFjaChkcml2ZXIpOwogCQlwdXRfZHJpdmVyKGRyaXZlcik7CiAJfQogCisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAlyZXR1cm4gY291bnQ7CiB9CiBzdGF0aWMgRFJJVkVSX0FUVFIobmV3X2lkLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9uZXdfaWQpOwpAQCAtMTE1LDcgKzg4LDcgQEAKIAkJZ290byBleGl0OwogCiAJaWYgKHVzYl9kcnYtPnByb2JlICE9IE5VTEwpCi0JCWVycm9yID0gc3lzZnNfY3JlYXRlX2ZpbGUoJnVzYl9kcnYtPmRyaXZlci5rb2JqLAorCQllcnJvciA9IHN5c2ZzX2NyZWF0ZV9maWxlKCZ1c2JfZHJ2LT5kcnZ3cmFwLmRyaXZlci5rb2JqLAogCQkJCQkgICZkcml2ZXJfYXR0cl9uZXdfaWQuYXR0cik7CiBleGl0OgogCXJldHVybiBlcnJvcjsKQEAgLTEyNyw3ICsxMDAsNyBAQAogCQlyZXR1cm47CiAKIAlpZiAodXNiX2Rydi0+cHJvYmUgIT0gTlVMTCkKLQkJc3lzZnNfcmVtb3ZlX2ZpbGUoJnVzYl9kcnYtPmRyaXZlci5rb2JqLAorCQlzeXNmc19yZW1vdmVfZmlsZSgmdXNiX2Rydi0+ZHJ2d3JhcC5kcml2ZXIua29iaiwKIAkJCQkgICZkcml2ZXJfYXR0cl9uZXdfaWQuYXR0cik7CiB9CiAKQEAgLTE3NCwyMSArMTQ3LDU3IEBACiB9CiAKIAotLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCB1c2JfYnVzX3R5cGUuc3Vic3lzIHdyaXRlbG9jayAqLworLyogY2FsbGVkIGZyb20gZHJpdmVyIGNvcmUgd2l0aCBkZXYgbG9ja2VkICovCitzdGF0aWMgaW50IHVzYl9wcm9iZV9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqdWRyaXZlciA9IHRvX3VzYl9kZXZpY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKKwlpbnQgZXJyb3IgPSAtRU5PREVWOworCisJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKKworCWlmICghaXNfdXNiX2RldmljZShkZXYpKQkvKiBTYW5pdHkgY2hlY2sgKi8KKwkJcmV0dXJuIGVycm9yOworCisJdWRldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKworCS8qIFRPRE86IEFkZCByZWFsIG1hdGNoaW5nIGNvZGUgKi8KKworCS8qIFRoZSBkZXZpY2Ugc2hvdWxkIGFsd2F5cyBhcHBlYXIgdG8gYmUgaW4gdXNlCisJICogdW5sZXNzIHRoZSBkcml2ZXIgc3Vwb3J0cyBhdXRvc3VzcGVuZC4KKwkgKi8KKwl1ZGV2LT5wbV91c2FnZV9jbnQgPSAhKHVkcml2ZXItPnN1cHBvcnRzX2F1dG9zdXNwZW5kKTsKKworCWVycm9yID0gdWRyaXZlci0+cHJvYmUodWRldik7CisJcmV0dXJuIGVycm9yOworfQorCisvKiBjYWxsZWQgZnJvbSBkcml2ZXIgY29yZSB3aXRoIGRldiBsb2NrZWQgKi8KK3N0YXRpYyBpbnQgdXNiX3VuYmluZF9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2KQoreworCXN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqdWRyaXZlciA9IHRvX3VzYl9kZXZpY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKKworCXVkcml2ZXItPmRpc2Nvbm5lY3QodG9fdXNiX2RldmljZShkZXYpKTsKKwlyZXR1cm4gMDsKK30KKworCisvKiBjYWxsZWQgZnJvbSBkcml2ZXIgY29yZSB3aXRoIGRldiBsb2NrZWQgKi8KIHN0YXRpYyBpbnQgdXNiX3Byb2JlX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKiBpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JfZHJpdmVyICogZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKIAlpbnQgZXJyb3IgPSAtRU5PREVWOwogCiAJZGV2X2RiZyhkZXYsICIlc1xuIiwgX19GVU5DVElPTl9fKTsKIAotCWlmICghZHJpdmVyLT5wcm9iZSkKKwlpZiAoaXNfdXNiX2RldmljZShkZXYpKQkJLyogU2FuaXR5IGNoZWNrICovCiAJCXJldHVybiBlcnJvcjsKLQkvKiBGSVhNRSB3ZSdkIG11Y2ggcHJlZmVyIHRvIGp1c3QgcmVzdW1lIGl0IC4uLiAqLwotCWlmIChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQotCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKKworCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CiAKIAlpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCBkcml2ZXItPmlkX3RhYmxlKTsKIAlpZiAoIWlkKQpAQCAtMTk2LDQ4ICsyMDUsMTY1IEBACiAJaWYgKGlkKSB7CiAJCWRldl9kYmcoZGV2LCAiJXMgLSBnb3QgaWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAKKwkJZXJyb3IgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldiwgMSk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwogCQkvKiBJbnRlcmZhY2UgInBvd2VyIHN0YXRlIiBkb2Vzbid0IGNvcnJlc3BvbmQgdG8gYW55IGhhcmR3YXJlCiAJCSAqIHN0YXRlIHdoYXRzb2V2ZXIuICBXZSB1c2UgaXQgdG8gcmVjb3JkIHdoZW4gaXQncyBib3VuZCB0bwogCQkgKiBhIGRyaXZlciB0aGF0IG1heSBzdGFydCBJLzA6ICBpdCdzIG5vdCBmcm96ZW4vcXVpZXNjZWQuCiAJCSAqLwogCQltYXJrX2FjdGl2ZShpbnRmKTsKIAkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CSU5ESU5HOworCisJCS8qIFRoZSBpbnRlcmZhY2Ugc2hvdWxkIGFsd2F5cyBhcHBlYXIgdG8gYmUgaW4gdXNlCisJCSAqIHVubGVzcyB0aGUgZHJpdmVyIHN1cG9ydHMgYXV0b3N1c3BlbmQuCisJCSAqLworCQlpbnRmLT5wbV91c2FnZV9jbnQgPSAhKGRyaXZlci0+c3VwcG9ydHNfYXV0b3N1c3BlbmQpOworCiAJCWVycm9yID0gZHJpdmVyLT5wcm9iZShpbnRmLCBpZCk7CiAJCWlmIChlcnJvcikgewogCQkJbWFya19xdWllc2NlZChpbnRmKTsKKwkJCWludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOwogCQkJaW50Zi0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOwogCQl9IGVsc2UKIAkJCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfQk9VTkQ7CisKKwkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2LCAxKTsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLS8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggdXNiX2J1c190eXBlLnN1YnN5cyB3cml0ZWxvY2sgKi8KKy8qIGNhbGxlZCBmcm9tIGRyaXZlciBjb3JlIHdpdGggZGV2IGxvY2tlZCAqLwogc3RhdGljIGludCB1c2JfdW5iaW5kX2ludGVyZmFjZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7CisJc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCBlcnJvcjsKIAogCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CSU5ESU5HOwogCisJLyogQXV0b3Jlc3VtZSBmb3Igc2V0X2ludGVyZmFjZSBjYWxsIGJlbG93ICovCisJdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJZXJyb3IgPSB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldiwgMSk7CisKIAkvKiByZWxlYXNlIGFsbCB1cmJzIGZvciB0aGlzIGludGVyZmFjZSAqLwogCXVzYl9kaXNhYmxlX2ludGVyZmFjZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCBpbnRmKTsKIAotCWlmIChkcml2ZXIgJiYgZHJpdmVyLT5kaXNjb25uZWN0KQotCQlkcml2ZXItPmRpc2Nvbm5lY3QoaW50Zik7CisJZHJpdmVyLT5kaXNjb25uZWN0KGludGYpOwogCiAJLyogcmVzZXQgb3RoZXIgaW50ZXJmYWNlIHN0YXRlICovCiAJdXNiX3NldF9pbnRlcmZhY2UoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKIAkJCWludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAogCQkJMCk7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwogCWludGYtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CT1VORDsKIAltYXJrX3F1aWVzY2VkKGludGYpOworCWludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgPSAwOworCisJaWYgKCFlcnJvcikKKwkJdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2LCAxKTsKIAogCXJldHVybiAwOwogfQogCisvKioKKyAqIHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlIC0gYmluZCBhIGRyaXZlciB0byBhbiBpbnRlcmZhY2UKKyAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgdG8gYmUgYm91bmQKKyAqIEBpZmFjZTogdGhlIGludGVyZmFjZSB0byB3aGljaCBpdCB3aWxsIGJlIGJvdW5kOyBtdXN0IGJlIGluIHRoZQorICoJdXNiIGRldmljZSdzIGFjdGl2ZSBjb25maWd1cmF0aW9uCisgKiBAcHJpdjogZHJpdmVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaW50ZXJmYWNlCisgKgorICogVGhpcyBpcyB1c2VkIGJ5IHVzYiBkZXZpY2UgZHJpdmVycyB0aGF0IG5lZWQgdG8gY2xhaW0gbW9yZSB0aGFuIG9uZQorICogaW50ZXJmYWNlIG9uIGEgZGV2aWNlIHdoZW4gcHJvYmluZyAoYXVkaW8gYW5kIGFjbSBhcmUgY3VycmVudCBleGFtcGxlcykuCisgKiBObyBkZXZpY2UgZHJpdmVyIHNob3VsZCBkaXJlY3RseSBtb2RpZnkgaW50ZXJuYWwgdXNiX2ludGVyZmFjZSBvcgorICogdXNiX2RldmljZSBzdHJ1Y3R1cmUgbWVtYmVycy4KKyAqCisgKiBGZXcgZHJpdmVycyBzaG91bGQgbmVlZCB0byB1c2UgdGhpcyByb3V0aW5lLCBzaW5jZSB0aGUgbW9zdCBuYXR1cmFsCisgKiB3YXkgdG8gYmluZCB0byBhbiBpbnRlcmZhY2UgaXMgdG8gcmV0dXJuIHRoZSBwcml2YXRlIGRhdGEgZnJvbQorICogdGhlIGRyaXZlcidzIHByb2JlKCkgbWV0aG9kLgorICoKKyAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cworICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIHByb2JlKCkgZW50cmllcyBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcsCisgKiBidXQgb3RoZXIgY2FsbCBjb250ZXh0cyBtYXkgbmVlZCB0byBleHBsaWNpdGx5IGNsYWltIHRob3NlIGxvY2tzLgorICovCitpbnQgdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciwKKwkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHZvaWQqIHByaXYpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKKwlpbnQgcmV0dmFsID0gMDsKKworCWlmIChkZXYtPmRyaXZlcikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldi0+ZHJpdmVyID0gJmRyaXZlci0+ZHJ2d3JhcC5kcml2ZXI7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgcHJpdik7CisKKwl1c2JfcG1fbG9jayh1ZGV2KTsKKwlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKKwltYXJrX2FjdGl2ZShpZmFjZSk7CisJaWZhY2UtPnBtX3VzYWdlX2NudCA9ICEoZHJpdmVyLT5zdXBwb3J0c19hdXRvc3VzcGVuZCk7CisJdXNiX3BtX3VubG9jayh1ZGV2KTsKKworCS8qIGlmIGludGVyZmFjZSB3YXMgYWxyZWFkeSBhZGRlZCwgYmluZCBub3c7IGVsc2UgbGV0CisJICogdGhlIGZ1dHVyZSBkZXZpY2VfYWRkKCkgYmluZCBpdCwgYnlwYXNzaW5nIHByb2JlKCkKKwkgKi8KKwlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkKKwkJcmV0dmFsID0gZGV2aWNlX2JpbmRfZHJpdmVyKGRldik7CisKKwlyZXR1cm4gcmV0dmFsOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSk7CisKKy8qKgorICogdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAtIHVuYmluZCBhIGRyaXZlciBmcm9tIGFuIGludGVyZmFjZQorICogQGRyaXZlcjogdGhlIGRyaXZlciB0byBiZSB1bmJvdW5kCisgKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgZnJvbSB3aGljaCBpdCB3aWxsIGJlIHVuYm91bmQKKyAqCisgKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGRyaXZlcnMgdG8gcmVsZWFzZSBhbiBpbnRlcmZhY2Ugd2l0aG91dCB3YWl0aW5nCisgKiBmb3IgdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMgdG8gYmUgY2FsbGVkLiAgSW4gdHlwaWNhbCBjYXNlcyB0aGlzCisgKiBhbHNvIGNhdXNlcyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3QoKSBtZXRob2QgdG8gYmUgY2FsbGVkLgorICoKKyAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KKyAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cworICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIGRpc2Nvbm5lY3QoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywKKyAqIGJ1dCBvdGhlciBjYWxsIGNvbnRleHRzIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhvc2UgbG9ja3MuCisgKi8KK3ZvaWQgdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyLAorCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGlmYWNlKTsKKworCS8qIHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiwgZG9uJ3QgcmVsZWFzZSBzb21ldGhpbmcgdGhhdCdzIG5vdCBvdXJzICovCisJaWYgKCFkZXYtPmRyaXZlciB8fCBkZXYtPmRyaXZlciAhPSAmZHJpdmVyLT5kcnZ3cmFwLmRyaXZlcikKKwkJcmV0dXJuOworCisJLyogZG9uJ3QgcmVsZWFzZSBmcm9tIHdpdGhpbiBkaXNjb25uZWN0KCkgKi8KKwlpZiAoaWZhY2UtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JPVU5EKQorCQlyZXR1cm47CisKKwkvKiBkb24ndCByZWxlYXNlIGlmIHRoZSBpbnRlcmZhY2UgaGFzbid0IGJlZW4gYWRkZWQgeWV0ICovCisJaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikpIHsKKwkJaWZhY2UtPmNvbmRpdGlvbiA9IFVTQl9JTlRFUkZBQ0VfVU5CSU5ESU5HOworCQlkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZGV2KTsKKwl9CisKKwlkZXYtPmRyaXZlciA9IE5VTEw7CisJdXNiX3NldF9pbnRmZGF0YShpZmFjZSwgTlVMTCk7CisKKwl1c2JfcG1fbG9jayh1ZGV2KTsKKwlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOworCW1hcmtfcXVpZXNjZWQoaWZhY2UpOworCWlmYWNlLT5uZWVkc19yZW1vdGVfd2FrZXVwID0gMDsKKwl1c2JfcG1fdW5sb2NrKHVkZXYpOworfQorRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX3JlbGVhc2VfaW50ZXJmYWNlKTsKKwogLyogcmV0dXJucyAwIGlmIG5vIG1hdGNoLCAxIGlmIG1hdGNoICovCiBzdGF0aWMgaW50IHVzYl9tYXRjaF9vbmVfaWQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKIAkJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCkBAIC0zODEsMzUgKzUwNywyMjMgQEAKIAogaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQogewotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwotCXN0cnVjdCB1c2JfZHJpdmVyICp1c2JfZHJ2OwotCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZDsKKwkvKiBkZXZpY2VzIGFuZCBpbnRlcmZhY2VzIGFyZSBoYW5kbGVkIHNlcGFyYXRlbHkgKi8KKwlpZiAoaXNfdXNiX2RldmljZShkZXYpKSB7CiAKLQkvKiBjaGVjayBmb3IgZ2VuZXJpYyBkcml2ZXIsIHdoaWNoIHdlIGRvbid0IG1hdGNoIGFueSBkZXZpY2Ugd2l0aCAqLwotCWlmIChkcnYgPT0gJnVzYl9nZW5lcmljX2RyaXZlcikKLQkJcmV0dXJuIDA7CisJCS8qIGludGVyZmFjZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGRldmljZXMgKi8KKwkJaWYgKCFpc191c2JfZGV2aWNlX2RyaXZlcihkcnYpKQorCQkJcmV0dXJuIDA7CiAKLQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXVzYl9kcnYgPSB0b191c2JfZHJpdmVyKGRydik7Ci0KLQlpZCA9IHVzYl9tYXRjaF9pZChpbnRmLCB1c2JfZHJ2LT5pZF90YWJsZSk7Ci0JaWYgKGlkKQorCQkvKiBUT0RPOiBBZGQgcmVhbCBtYXRjaGluZyBjb2RlICovCiAJCXJldHVybiAxOwogCi0JaWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2KTsKLQlpZiAoaWQpCi0JCXJldHVybiAxOworCX0gZWxzZSB7CisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCQlzdHJ1Y3QgdXNiX2RyaXZlciAqdXNiX2RydjsKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkOworCisJCS8qIGRldmljZSBkcml2ZXJzIG5ldmVyIG1hdGNoIGludGVyZmFjZXMgKi8KKwkJaWYgKGlzX3VzYl9kZXZpY2VfZHJpdmVyKGRydikpCisJCQlyZXR1cm4gMDsKKworCQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCQl1c2JfZHJ2ID0gdG9fdXNiX2RyaXZlcihkcnYpOworCisJCWlkID0gdXNiX21hdGNoX2lkKGludGYsIHVzYl9kcnYtPmlkX3RhYmxlKTsKKwkJaWYgKGlkKQorCQkJcmV0dXJuIDE7CisKKwkJaWQgPSB1c2JfbWF0Y2hfZHluYW1pY19pZChpbnRmLCB1c2JfZHJ2KTsKKwkJaWYgKGlkKQorCQkJcmV0dXJuIDE7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZglDT05GSUdfSE9UUExVRworCisvKgorICogVGhpcyBzZW5kcyBhbiB1ZXZlbnQgdG8gdXNlcnNwYWNlLCB0eXBpY2FsbHkgaGVscGluZyB0byBsb2FkIGRyaXZlcgorICogb3Igb3RoZXIgbW9kdWxlcywgY29uZmlndXJlIHRoZSBkZXZpY2UsIGFuZCBtb3JlLiAgRHJpdmVycyBjYW4gcHJvdmlkZQorICogYSBNT0RVTEVfREVWSUNFX1RBQkxFIHRvIGhlbHAgd2l0aCBtb2R1bGUgbG9hZGluZyBzdWJ0YXNrcy4KKyAqCisgKiBXZSdyZSBjYWxsZWQgZWl0aGVyIGZyb20ga2h1YmQgKHRoZSB0eXBpY2FsIGNhc2UpIG9yIGZyb20gcm9vdCBodWIKKyAqIChpbml0LCBrYXBtZCwgbW9kcHJvYmUsIHJtbW9kLCBldGMpLCBidXQgdGhlIGFnZW50cyBuZWVkIHRvIGhhbmRsZQorICogZGVsYXlzIGluIGV2ZW50IGRlbGl2ZXJ5LiAgVXNlIHN5c2ZzIChhbmQgREVWUEFUSCkgdG8gbWFrZSBzdXJlIHRoZQorICogZGV2aWNlIChhbmQgdGhpcyBjb25maWd1cmF0aW9uISkgYXJlIHN0aWxsIHByZXNlbnQuCisgKi8KK3N0YXRpYyBpbnQgdXNiX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLCBpbnQgbnVtX2VudnAsCisJCSAgICAgIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdDsKKwlpbnQgaSA9IDA7CisJaW50IGxlbmd0aCA9IDA7CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBkcml2ZXIgaXMgb2Z0ZW4gbnVsbCBoZXJlOyBkZXZfZGJnKCkgd291bGQgb29wcyAqLworCXByX2RlYnVnICgidXNiICVzOiB1ZXZlbnRcbiIsIGRldi0+YnVzX2lkKTsKKworCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKKwkJdXNiX2RldiA9IHRvX3VzYl9kZXZpY2UoZGV2KTsKKwkJYWx0ID0gTlVMTDsKKwl9IGVsc2UgeworCQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCQl1c2JfZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwkJYWx0ID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CisJfQorCisJaWYgKHVzYl9kZXYtPmRldm51bSA8IDApIHsKKwkJcHJfZGVidWcgKCJ1c2IgJXM6IGFscmVhZHkgZGVsZXRlZD9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCWlmICghdXNiX2Rldi0+YnVzKSB7CisJCXByX2RlYnVnICgidXNiICVzOiBidXMgcmVtb3ZlZD9cbiIsIGRldi0+YnVzX2lkKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisjaWZkZWYJQ09ORklHX1VTQl9ERVZJQ0VGUworCS8qIElmIHRoaXMgaXMgYXZhaWxhYmxlLCB1c2Vyc3BhY2UgcHJvZ3JhbXMgY2FuIGRpcmVjdGx5IHJlYWQKKwkgKiBhbGwgdGhlIGRldmljZSBkZXNjcmlwdG9ycyB3ZSBkb24ndCB0ZWxsIHRoZW0gYWJvdXQuICBPcgorCSAqIGV2ZW4gYWN0IGFzIHVzZXJtb2RlIGRyaXZlcnMuCisJICoKKwkgKiBGSVhNRSByZWR1Y2UgaGFyZHdpcmVkIGludGVsbGlnZW5jZSBoZXJlCisJICovCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCSAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkgICAiREVWSUNFPS9wcm9jL2J1cy91c2IvJTAzZC8lMDNkIiwKKwkJCSAgIHVzYl9kZXYtPmJ1cy0+YnVzbnVtLCB1c2JfZGV2LT5kZXZudW0pKQorCQlyZXR1cm4gLUVOT01FTTsKKyNlbmRpZgorCisJLyogcGVyLWRldmljZSBjb25maWd1cmF0aW9ucyBhcmUgY29tbW9uICovCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCSAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkgICAiUFJPRFVDVD0leC8leC8leCIsCisJCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSwKKwkJCSAgIGxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSwKKwkJCSAgIGxlMTZfdG9fY3B1KHVzYl9kZXYtPmRlc2NyaXB0b3IuYmNkRGV2aWNlKSkpCisJCXJldHVybiAtRU5PTUVNOworCisJLyogY2xhc3MtYmFzZWQgZHJpdmVyIGJpbmRpbmcgbW9kZWxzICovCisJaWYgKGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCSAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkgICAiVFlQRT0lZC8lZC8lZCIsCisJCQkgICB1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCSAgIHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAorCQkJICAgdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wpKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmICghaXNfdXNiX2RldmljZShkZXYpKSB7CisKKwkJaWYgKGFkZF91ZXZlbnRfdmFyKGVudnAsIG51bV9lbnZwLCAmaSwKKwkJCSAgIGJ1ZmZlciwgYnVmZmVyX3NpemUsICZsZW5ndGgsCisJCQkgICAiSU5URVJGQUNFPSVkLyVkLyVkIiwKKwkJCSAgIGFsdC0+ZGVzYy5iSW50ZXJmYWNlQ2xhc3MsCisJCQkgICBhbHQtPmRlc2MuYkludGVyZmFjZVN1YkNsYXNzLAorCQkJICAgYWx0LT5kZXNjLmJJbnRlcmZhY2VQcm90b2NvbCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKworCQlpZiAoYWRkX3VldmVudF92YXIoZW52cCwgbnVtX2VudnAsICZpLAorCQkJICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKKwkJCSAgICJNT0RBTElBUz11c2I6diUwNFhwJTA0WGQlMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljJTAyWGlzYyUwMlhpcCUwMlgiLAorCQkJICAgbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCisJCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCisJCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCisJCQkgICB1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKKwkJCSAgIHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAorCQkJICAgdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wsCisJCQkgICBhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzLAorCQkJICAgYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKKwkJCSAgIGFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQorCQkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZW52cFtpXSA9IE5VTEw7CisKKwlyZXR1cm4gMDsKK30KKworI2Vsc2UKKworc3RhdGljIGludCB1c2JfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsCisJCQlpbnQgbnVtX2VudnAsIGNoYXIgKmJ1ZmZlciwgaW50IGJ1ZmZlcl9zaXplKQoreworCXJldHVybiAtRU5PREVWOworfQorCisjZW5kaWYJLyogQ09ORklHX0hPVFBMVUcgKi8KKwogLyoqCi0gKiB1c2JfcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBVU0IgZHJpdmVyCi0gKiBAbmV3X2RyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBkcml2ZXIKKyAqIHVzYl9yZWdpc3Rlcl9kZXZpY2VfZHJpdmVyIC0gcmVnaXN0ZXIgYSBVU0IgZGV2aWNlIChub3QgaW50ZXJmYWNlKSBkcml2ZXIKKyAqIEBuZXdfdWRyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBkZXZpY2UgZHJpdmVyCiAgKiBAb3duZXI6IG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KICAqCi0gKiBSZWdpc3RlcnMgYSBVU0IgZHJpdmVyIHdpdGggdGhlIFVTQiBjb3JlLiAgVGhlIGxpc3Qgb2YgdW5hdHRhY2hlZAotICogaW50ZXJmYWNlcyB3aWxsIGJlIHJlc2Nhbm5lZCB3aGVuZXZlciBhIG5ldyBkcml2ZXIgaXMgYWRkZWQsIGFsbG93aW5nCi0gKiB0aGUgbmV3IGRyaXZlciB0byBhdHRhY2ggdG8gYW55IHJlY29nbml6ZWQgZGV2aWNlcy4KKyAqIFJlZ2lzdGVycyBhIFVTQiBkZXZpY2UgZHJpdmVyIHdpdGggdGhlIFVTQiBjb3JlLiAgVGhlIGxpc3Qgb2YKKyAqIHVuYXR0YWNoZWQgZGV2aWNlcyB3aWxsIGJlIHJlc2Nhbm5lZCB3aGVuZXZlciBhIG5ldyBkcml2ZXIgaXMKKyAqIGFkZGVkLCBhbGxvd2luZyB0aGUgbmV3IGRyaXZlciB0byBhdHRhY2ggdG8gYW55IHJlY29nbml6ZWQgZGV2aWNlcy4KKyAqIFJldHVybnMgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgYW5kIDAgb24gc3VjY2Vzcy4KKyAqLworaW50IHVzYl9yZWdpc3Rlcl9kZXZpY2VfZHJpdmVyKHN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqbmV3X3Vkcml2ZXIsCisJCXN0cnVjdCBtb2R1bGUgKm93bmVyKQoreworCWludCByZXR2YWwgPSAwOworCisJaWYgKHVzYl9kaXNhYmxlZCgpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW5ld191ZHJpdmVyLT5kcnZ3cmFwLmZvcl9kZXZpY2VzID0gMTsKKwluZXdfdWRyaXZlci0+ZHJ2d3JhcC5kcml2ZXIubmFtZSA9IChjaGFyICopIG5ld191ZHJpdmVyLT5uYW1lOworCW5ld191ZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5idXMgPSAmdXNiX2J1c190eXBlOworCW5ld191ZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5wcm9iZSA9IHVzYl9wcm9iZV9kZXZpY2U7CisJbmV3X3Vkcml2ZXItPmRydndyYXAuZHJpdmVyLnJlbW92ZSA9IHVzYl91bmJpbmRfZGV2aWNlOworCW5ld191ZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5vd25lciA9IG93bmVyOworCisJcmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyKCZuZXdfdWRyaXZlci0+ZHJ2d3JhcC5kcml2ZXIpOworCisJaWYgKCFyZXR2YWwpIHsKKwkJcHJfaW5mbygiJXM6IHJlZ2lzdGVyZWQgbmV3IGRldmljZSBkcml2ZXIgJXNcbiIsCisJCQl1c2Jjb3JlX25hbWUsIG5ld191ZHJpdmVyLT5uYW1lKTsKKwkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKKwl9IGVsc2UgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBlcnJvciAlZCByZWdpc3RlcmluZyBkZXZpY2UgIgorCQkJIglkcml2ZXIgJXNcbiIsCisJCQl1c2Jjb3JlX25hbWUsIHJldHZhbCwgbmV3X3Vkcml2ZXItPm5hbWUpOworCX0KKworCXJldHVybiByZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfcmVnaXN0ZXJfZGV2aWNlX2RyaXZlcik7CisKKy8qKgorICogdXNiX2RlcmVnaXN0ZXJfZGV2aWNlX2RyaXZlciAtIHVucmVnaXN0ZXIgYSBVU0IgZGV2aWNlIChub3QgaW50ZXJmYWNlKSBkcml2ZXIKKyAqIEB1ZHJpdmVyOiBVU0Igb3BlcmF0aW9ucyBvZiB0aGUgZGV2aWNlIGRyaXZlciB0byB1bnJlZ2lzdGVyCisgKiBDb250ZXh0OiBtdXN0IGJlIGFibGUgdG8gc2xlZXAKKyAqCisgKiBVbmxpbmtzIHRoZSBzcGVjaWZpZWQgZHJpdmVyIGZyb20gdGhlIGludGVybmFsIFVTQiBkcml2ZXIgbGlzdC4KKyAqLwordm9pZCB1c2JfZGVyZWdpc3Rlcl9kZXZpY2VfZHJpdmVyKHN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqdWRyaXZlcikKK3sKKwlwcl9pbmZvKCIlczogZGVyZWdpc3RlcmluZyBkZXZpY2UgZHJpdmVyICVzXG4iLAorCQkJdXNiY29yZV9uYW1lLCB1ZHJpdmVyLT5uYW1lKTsKKworCWRyaXZlcl91bnJlZ2lzdGVyKCZ1ZHJpdmVyLT5kcnZ3cmFwLmRyaXZlcik7CisJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9kZXJlZ2lzdGVyX2RldmljZV9kcml2ZXIpOworCisvKioKKyAqIHVzYl9yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIFVTQiBpbnRlcmZhY2UgZHJpdmVyCisgKiBAbmV3X2RyaXZlcjogVVNCIG9wZXJhdGlvbnMgZm9yIHRoZSBpbnRlcmZhY2UgZHJpdmVyCisgKiBAb3duZXI6IG1vZHVsZSBvd25lciBvZiB0aGlzIGRyaXZlci4KKyAqCisgKiBSZWdpc3RlcnMgYSBVU0IgaW50ZXJmYWNlIGRyaXZlciB3aXRoIHRoZSBVU0IgY29yZS4gIFRoZSBsaXN0IG9mCisgKiB1bmF0dGFjaGVkIGludGVyZmFjZXMgd2lsbCBiZSByZXNjYW5uZWQgd2hlbmV2ZXIgYSBuZXcgZHJpdmVyIGlzCisgKiBhZGRlZCwgYWxsb3dpbmcgdGhlIG5ldyBkcml2ZXIgdG8gYXR0YWNoIHRvIGFueSByZWNvZ25pemVkIGludGVyZmFjZXMuCiAgKiBSZXR1cm5zIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIGFuZCAwIG9uIHN1Y2Nlc3MuCiAgKgogICogTk9URTogaWYgeW91IHdhbnQgeW91ciBkcml2ZXIgdG8gdXNlIHRoZSBVU0IgbWFqb3IgbnVtYmVyLCB5b3UgbXVzdCBjYWxsCkBAIC00MjMsMjMgKzczNywyNSBAQAogCWlmICh1c2JfZGlzYWJsZWQoKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQluZXdfZHJpdmVyLT5kcml2ZXIubmFtZSA9IChjaGFyICopbmV3X2RyaXZlci0+bmFtZTsKLQluZXdfZHJpdmVyLT5kcml2ZXIuYnVzID0gJnVzYl9idXNfdHlwZTsKLQluZXdfZHJpdmVyLT5kcml2ZXIucHJvYmUgPSB1c2JfcHJvYmVfaW50ZXJmYWNlOwotCW5ld19kcml2ZXItPmRyaXZlci5yZW1vdmUgPSB1c2JfdW5iaW5kX2ludGVyZmFjZTsKLQluZXdfZHJpdmVyLT5kcml2ZXIub3duZXIgPSBvd25lcjsKKwluZXdfZHJpdmVyLT5kcnZ3cmFwLmZvcl9kZXZpY2VzID0gMDsKKwluZXdfZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5uYW1lID0gKGNoYXIgKikgbmV3X2RyaXZlci0+bmFtZTsKKwluZXdfZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5idXMgPSAmdXNiX2J1c190eXBlOworCW5ld19kcml2ZXItPmRydndyYXAuZHJpdmVyLnByb2JlID0gdXNiX3Byb2JlX2ludGVyZmFjZTsKKwluZXdfZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5yZW1vdmUgPSB1c2JfdW5iaW5kX2ludGVyZmFjZTsKKwluZXdfZHJpdmVyLT5kcnZ3cmFwLmRyaXZlci5vd25lciA9IG93bmVyOwogCXNwaW5fbG9ja19pbml0KCZuZXdfZHJpdmVyLT5keW5pZHMubG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJm5ld19kcml2ZXItPmR5bmlkcy5saXN0KTsKIAotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmbmV3X2RyaXZlci0+ZHJpdmVyKTsKKwlyZXR2YWwgPSBkcml2ZXJfcmVnaXN0ZXIoJm5ld19kcml2ZXItPmRydndyYXAuZHJpdmVyKTsKIAogCWlmICghcmV0dmFsKSB7Ci0JCXByX2luZm8oIiVzOiByZWdpc3RlcmVkIG5ldyBkcml2ZXIgJXNcbiIsCisJCXByX2luZm8oIiVzOiByZWdpc3RlcmVkIG5ldyBpbnRlcmZhY2UgZHJpdmVyICVzXG4iLAogCQkJdXNiY29yZV9uYW1lLCBuZXdfZHJpdmVyLT5uYW1lKTsKIAkJdXNiZnNfdXBkYXRlX3NwZWNpYWwoKTsKIAkJdXNiX2NyZWF0ZV9uZXdpZF9maWxlKG5ld19kcml2ZXIpOwogCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiJXM6IGVycm9yICVkIHJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogZXJyb3IgJWQgcmVnaXN0ZXJpbmcgaW50ZXJmYWNlICIKKwkJCSIJZHJpdmVyICVzXG4iLAogCQkJdXNiY29yZV9uYW1lLCByZXR2YWwsIG5ld19kcml2ZXItPm5hbWUpOwogCX0KIApAQCAtNDQ4LDggKzc2NCw4IEBACiBFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUodXNiX3JlZ2lzdGVyX2RyaXZlcik7CiAKIC8qKgotICogdXNiX2RlcmVnaXN0ZXIgLSB1bnJlZ2lzdGVyIGEgVVNCIGRyaXZlcgotICogQGRyaXZlcjogVVNCIG9wZXJhdGlvbnMgb2YgdGhlIGRyaXZlciB0byB1bnJlZ2lzdGVyCisgKiB1c2JfZGVyZWdpc3RlciAtIHVucmVnaXN0ZXIgYSBVU0IgaW50ZXJmYWNlIGRyaXZlcgorICogQGRyaXZlcjogVVNCIG9wZXJhdGlvbnMgb2YgdGhlIGludGVyZmFjZSBkcml2ZXIgdG8gdW5yZWdpc3RlcgogICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwCiAgKgogICogVW5saW5rcyB0aGUgc3BlY2lmaWVkIGRyaXZlciBmcm9tIHRoZSBpbnRlcm5hbCBVU0IgZHJpdmVyIGxpc3QuCkBAIC00NjAsMTIgKzc3Niw1NTQgQEAKICAqLwogdm9pZCB1c2JfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyKQogewotCXByX2luZm8oIiVzOiBkZXJlZ2lzdGVyaW5nIGRyaXZlciAlc1xuIiwgdXNiY29yZV9uYW1lLCBkcml2ZXItPm5hbWUpOworCXByX2luZm8oIiVzOiBkZXJlZ2lzdGVyaW5nIGludGVyZmFjZSBkcml2ZXIgJXNcbiIsCisJCQl1c2Jjb3JlX25hbWUsIGRyaXZlci0+bmFtZSk7CiAKIAl1c2JfcmVtb3ZlX25ld2lkX2ZpbGUoZHJpdmVyKTsKIAl1c2JfZnJlZV9keW5pZHMoZHJpdmVyKTsKLQlkcml2ZXJfdW5yZWdpc3RlcigmZHJpdmVyLT5kcml2ZXIpOworCWRyaXZlcl91bnJlZ2lzdGVyKCZkcml2ZXItPmRydndyYXAuZHJpdmVyKTsKIAogCXVzYmZzX3VwZGF0ZV9zcGVjaWFsKCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTF9GVVRVUkUodXNiX2RlcmVnaXN0ZXIpOworCisjaWZkZWYgQ09ORklHX1BNCisKKy8qIENhbGxlciBoYXMgbG9ja2VkIHVkZXYncyBwbV9tdXRleCAqLworc3RhdGljIGludCBzdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIJKnVkcml2ZXI7CisJaW50CQkJCXN0YXR1cyA9IDA7CisKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEIHx8CisJCQl1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQlnb3RvIGRvbmU7CisKKwkvKiBGb3IgZGV2aWNlcyB0aGF0IGRvbid0IGhhdmUgYSBkcml2ZXIsIHdlIGRvIGEgc3RhbmRhcmQgc3VzcGVuZC4gKi8KKwlpZiAodWRldi0+ZGV2LmRyaXZlciA9PSBOVUxMKSB7CisJCXVkZXYtPmRvX3JlbW90ZV93YWtldXAgPSAwOworCQlzdGF0dXMgPSB1c2JfcG9ydF9zdXNwZW5kKHVkZXYpOworCQlnb3RvIGRvbmU7CisJfQorCisJdWRyaXZlciA9IHRvX3VzYl9kZXZpY2VfZHJpdmVyKHVkZXYtPmRldi5kcml2ZXIpOworCXN0YXR1cyA9IHVkcml2ZXItPnN1c3BlbmQodWRldiwgbXNnKTsKKworZG9uZToKKwkvLyBkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlczogc3RhdHVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPSBtc2cuZXZlbnQ7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogQ2FsbGVyIGhhcyBsb2NrZWQgdWRldidzIHBtX211dGV4ICovCitzdGF0aWMgaW50IHJlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyCSp1ZHJpdmVyOworCWludAkJCQlzdGF0dXMgPSAwOworCisJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCB8fAorCQkJdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJZ290byBkb25lOworCisJLyogQ2FuJ3QgcmVzdW1lIGl0IGlmIGl0IGRvZXNuJ3QgaGF2ZSBhIGRyaXZlci4gKi8KKwlpZiAodWRldi0+ZGV2LmRyaXZlciA9PSBOVUxMKSB7CisJCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwkJZ290byBkb25lOworCX0KKworCXVkcml2ZXIgPSB0b191c2JfZGV2aWNlX2RyaXZlcih1ZGV2LT5kZXYuZHJpdmVyKTsKKwlzdGF0dXMgPSB1ZHJpdmVyLT5yZXN1bWUodWRldik7CisKK2RvbmU6CisJLy8gZGV2X2RiZygmdWRldi0+ZGV2LCAiJXM6IHN0YXR1cyAlZFxuIiwgX19GVU5DVElPTl9fLCBzdGF0dXMpOworCWlmIChzdGF0dXMgPT0gMCkKKwkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfT047CisJcmV0dXJuIHN0YXR1czsKK30KKworLyogQ2FsbGVyIGhhcyBsb2NrZWQgaW50ZidzIHVzYl9kZXZpY2UncyBwbSBtdXRleCAqLworc3RhdGljIGludCBzdXNwZW5kX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwlzdHJ1Y3QgdXNiX2RyaXZlcgkqZHJpdmVyOworCWludAkJCXN0YXR1cyA9IDA7CisKKwkvKiB3aXRoIG5vIGhhcmR3YXJlLCBVU0IgaW50ZXJmYWNlcyBvbmx5IHVzZSBGUkVFWkUgYW5kIE9OIHN0YXRlcyAqLworCWlmIChpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQgfHwKKwkJCSFpc19hY3RpdmUoaW50ZikpCisJCWdvdG8gZG9uZTsKKworCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKQkvKiBUaGlzIGNhbid0IGhhcHBlbiAqLworCQlnb3RvIGRvbmU7CisJZHJpdmVyID0gdG9fdXNiX2RyaXZlcihpbnRmLT5kZXYuZHJpdmVyKTsKKworCWlmIChkcml2ZXItPnN1c3BlbmQgJiYgZHJpdmVyLT5yZXN1bWUpIHsKKwkJc3RhdHVzID0gZHJpdmVyLT5zdXNwZW5kKGludGYsIG1zZyk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCW1hcmtfcXVpZXNjZWQoaW50Zik7CisJCWVsc2UgaWYgKCFpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLT5hdXRvX3BtKQorCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgZXJyb3IgJWRcbiIsCisJCQkJCSJzdXNwZW5kIiwgc3RhdHVzKTsKKwl9IGVsc2UgeworCQkvLyBGSVhNRSBlbHNlIGlmIHRoZXJlJ3Mgbm8gc3VzcGVuZCBtZXRob2QsIGRpc2Nvbm5lY3QuLi4KKwkJLy8gTm90IHBvc3NpYmxlIGlmIGF1dG9fcG0gaXMgc2V0Li4uCisJCWRldl93YXJuKCZpbnRmLT5kZXYsICJubyBzdXNwZW5kIGZvciBkcml2ZXIgJXM/XG4iLAorCQkJCWRyaXZlci0+bmFtZSk7CisJCW1hcmtfcXVpZXNjZWQoaW50Zik7CisJfQorCitkb25lOgorCS8vIGRldl9kYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlpZiAoc3RhdHVzID09IDApCisJCWludGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9IG1zZy5ldmVudDsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKiBDYWxsZXIgaGFzIGxvY2tlZCBpbnRmJ3MgdXNiX2RldmljZSdzIHBtX211dGV4ICovCitzdGF0aWMgaW50IHJlc3VtZV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kcml2ZXIJKmRyaXZlcjsKKwlpbnQJCQlzdGF0dXMgPSAwOworCisJaWYgKGludGVyZmFjZV90b191c2JkZXYoaW50ZiktPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCB8fAorCQkJaXNfYWN0aXZlKGludGYpKQorCQlnb3RvIGRvbmU7CisKKwkvKiBEb24ndCBsZXQgYXV0b3Jlc3VtZSBpbnRlcmZlcmUgd2l0aCB1bmJpbmRpbmcgKi8KKwlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CSU5ESU5HKQorCQlnb3RvIGRvbmU7CisKKwkvKiBDYW4ndCByZXN1bWUgaXQgaWYgaXQgZG9lc24ndCBoYXZlIGEgZHJpdmVyLiAqLworCWlmIChpbnRmLT5jb25kaXRpb24gPT0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EKSB7CisJCXN0YXR1cyA9IC1FTk9UQ09OTjsKKwkJZ290byBkb25lOworCX0KKwlkcml2ZXIgPSB0b191c2JfZHJpdmVyKGludGYtPmRldi5kcml2ZXIpOworCisJaWYgKGRyaXZlci0+cmVzdW1lKSB7CisJCXN0YXR1cyA9IGRyaXZlci0+cmVzdW1lKGludGYpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXMgZXJyb3IgJWRcbiIsCisJCQkJCSJyZXN1bWUiLCBzdGF0dXMpOworCQllbHNlCisJCQltYXJrX2FjdGl2ZShpbnRmKTsKKwl9IGVsc2UgeworCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAibm8gcmVzdW1lIGZvciBkcml2ZXIgJXM/XG4iLAorCQkJCWRyaXZlci0+bmFtZSk7CisJCW1hcmtfYWN0aXZlKGludGYpOworCX0KKworZG9uZToKKwkvLyBkZXZfZGJnKCZpbnRmLT5kZXYsICIlczogc3RhdHVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJaWYgKHN0YXR1cyA9PSAwKQorCQlpbnRmLT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPSBQTV9FVkVOVF9PTjsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9zdXNwZW5kX2JvdGggLSBzdXNwZW5kIGEgVVNCIGRldmljZSBhbmQgaXRzIGludGVyZmFjZXMKKyAqIEB1ZGV2OiB0aGUgdXNiX2RldmljZSB0byBzdXNwZW5kCisgKiBAbXNnOiBQb3dlciBNYW5hZ2VtZW50IG1lc3NhZ2UgZGVzY3JpYmluZyB0aGlzIHN0YXRlIHRyYW5zaXRpb24KKyAqCisgKiBUaGlzIGlzIHRoZSBjZW50cmFsIHJvdXRpbmUgZm9yIHN1c3BlbmRpbmcgVVNCIGRldmljZXMuICBJdCBjYWxscyB0aGUKKyAqIHN1c3BlbmQgbWV0aG9kcyBmb3IgYWxsIHRoZSBpbnRlcmZhY2UgZHJpdmVycyBpbiBAdWRldiBhbmQgdGhlbiBjYWxscworICogdGhlIHN1c3BlbmQgbWV0aG9kIGZvciBAdWRldiBpdHNlbGYuICBJZiBhbiBlcnJvciBvY2N1cnMgYXQgYW55IHN0YWdlLAorICogYWxsIHRoZSBpbnRlcmZhY2VzIHdoaWNoIHdlcmUgc3VzcGVuZGVkIGFyZSByZXN1bWVkIHNvIHRoYXQgdGhleSByZW1haW4KKyAqIGluIHRoZSBzYW1lIHN0YXRlIGFzIHRoZSBkZXZpY2UuCisgKgorICogSWYgYW4gYXV0b3N1c3BlbmQgaXMgaW4gcHJvZ3Jlc3MgKEB1ZGV2LT5hdXRvX3BtIGlzIHNldCksIHRoZSByb3V0aW5lCisgKiBjaGVja3MgZmlyc3QgdG8gbWFrZSBzdXJlIHRoYXQgbmVpdGhlciB0aGUgZGV2aWNlIGl0c2VsZiBvciBhbnkgb2YgaXRzCisgKiBhY3RpdmUgaW50ZXJmYWNlcyBpcyBpbiB1c2UgKHBtX3VzYWdlX2NudCBpcyBncmVhdGVyIHRoYW4gMCkuICBJZiB0aGV5CisgKiBhcmUsIHRoZSBhdXRvc3VzcGVuZCBmYWlscy4KKyAqCisgKiBJZiB0aGUgc3VzcGVuZCBzdWNjZWVkcywgdGhlIHJvdXRpbmUgcmVjdXJzaXZlbHkgcXVldWVzIGFuIGF1dG9zdXNwZW5kCisgKiByZXF1ZXN0IGZvciBAdWRldidzIHBhcmVudCBkZXZpY2UsIHRoZXJlYnkgcHJvcGFnYXRpbmcgdGhlIGNoYW5nZSB1cAorICogdGhlIGRldmljZSB0cmVlLiAgSWYgYWxsIG9mIHRoZSBwYXJlbnQncyBjaGlsZHJlbiBhcmUgbm93IHN1c3BlbmRlZCwKKyAqIHRoZSBwYXJlbnQgd2lsbCBhdXRvc3VzcGVuZCBpbiB0dXJuLgorICoKKyAqIFRoZSBzdXNwZW5kIG1ldGhvZCBjYWxscyBhcmUgc3ViamVjdCB0byBtdXR1YWwgZXhjbHVzaW9uIHVuZGVyIGNvbnRyb2wKKyAqIG9mIEB1ZGV2J3MgcG1fbXV0ZXguICBNYW55IG9mIHRoZXNlIGNhbGxzIGFyZSBhbHNvIHVuZGVyIHRoZSBwcm90ZWN0aW9uCisgKiBvZiBAdWRldidzIGRldmljZSBsb2NrIChpbmNsdWRpbmcgYWxsIHJlcXVlc3RzIG9yaWdpbmF0aW5nIG91dHNpZGUgdGhlCisgKiBVU0Igc3Vic3lzdGVtKSwgYnV0IGF1dG9zdXNwZW5kIHJlcXVlc3RzIGdlbmVyYXRlZCBieSBhIGNoaWxkIGRldmljZSBvcgorICogaW50ZXJmYWNlIGRyaXZlciBtYXkgbm90IGJlLiAgVXNiY29yZSB3aWxsIGluc3VyZSB0aGF0IHRoZSBtZXRob2QgY2FsbHMKKyAqIGRvIG5vdCBhcnJpdmUgZHVyaW5nIGJpbmQsIHVuYmluZCwgb3IgcmVzZXQgb3BlcmF0aW9ucy4gIEhvd2V2ZXIsIGRyaXZlcnMKKyAqIG11c3QgYmUgcHJlcGFyZWQgdG8gaGFuZGxlIHN1c3BlbmQgY2FsbHMgYXJyaXZpbmcgYXQgdW5wcmVkaWN0YWJsZSB0aW1lcy4KKyAqIFRoZSBvbmx5IHdheSB0byBibG9jayBzdWNoIGNhbGxzIGlzIHRvIGRvIGFuIGF1dG9yZXN1bWUgKHByZXZlbnRpbmcKKyAqIGF1dG9zdXNwZW5kcykgd2hpbGUgaG9sZGluZyBAdWRldidzIGRldmljZSBsb2NrIChwcmV2ZW50aW5nIG91dHNpZGUKKyAqIHN1c3BlbmRzKS4KKyAqCisgKiBUaGUgY2FsbGVyIG11c3QgaG9sZCBAdWRldi0+cG1fbXV0ZXguCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCisgKi8KK2ludCB1c2Jfc3VzcGVuZF9ib3RoKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQoreworCWludAkJCXN0YXR1cyA9IDA7CisJaW50CQkJaSA9IDA7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IHVkZXYtPnBhcmVudDsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVkZXYtPmF1dG9zdXNwZW5kKTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlyZXR1cm4gMDsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKKwkJcmV0dXJuIDA7CisKKwl1ZGV2LT5kb19yZW1vdGVfd2FrZXVwID0gZGV2aWNlX21heV93YWtldXAoJnVkZXYtPmRldik7CisKKwkvKiBGb3IgYXV0b3N1c3BlbmQsIGZhaWwgZmFzdCBpZiBhbnl0aGluZyBpcyBpbiB1c2UuCisJICogQWxzbyBmYWlsIGlmIGFueSBpbnRlcmZhY2VzIHJlcXVpcmUgcmVtb3RlIHdha2V1cCBidXQgaXQKKwkgKiBpc24ndCBhdmFpbGFibGUuICovCisJaWYgKHVkZXYtPmF1dG9fcG0pIHsKKwkJaWYgKHVkZXYtPnBtX3VzYWdlX2NudCA+IDApCisJCQlyZXR1cm4gLUVCVVNZOworCQlpZiAodWRldi0+YWN0Y29uZmlnKSB7CisJCQlmb3IgKDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7CisJCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJCWlmICghaXNfYWN0aXZlKGludGYpKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoaW50Zi0+cG1fdXNhZ2VfY250ID4gMCkKKwkJCQkJcmV0dXJuIC1FQlVTWTsKKwkJCQlpZiAoaW50Zi0+bmVlZHNfcmVtb3RlX3dha2V1cCAmJgorCQkJCQkJIXVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKKwkJCQkJZGV2X2RiZygmdWRldi0+ZGV2LAorCSJyZW1vdGUgd2FrZXVwIG5lZWRlZCBmb3IgYXV0b3N1c3BlbmRcbiIpOworCQkJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJCQkJfQorCQkJfQorCQkJaSA9IDA7CisJCX0KKwl9CisKKwkvKiBTdXNwZW5kIGFsbCB0aGUgaW50ZXJmYWNlcyBhbmQgdGhlbiB1ZGV2IGl0c2VsZiAqLworCWlmICh1ZGV2LT5hY3Rjb25maWcpIHsKKwkJZm9yICg7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJc3RhdHVzID0gc3VzcGVuZF9pbnRlcmZhY2UoaW50ZiwgbXNnKTsKKwkJCWlmIChzdGF0dXMgIT0gMCkKKwkJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoc3RhdHVzID09IDApCisJCXN0YXR1cyA9IHN1c3BlbmRfZGV2aWNlKHVkZXYsIG1zZyk7CisKKwkvKiBJZiB0aGUgc3VzcGVuZCBmYWlsZWQsIHJlc3VtZSBpbnRlcmZhY2VzIHRoYXQgZGlkIGdldCBzdXNwZW5kZWQgKi8KKwlpZiAoc3RhdHVzICE9IDApIHsKKwkJd2hpbGUgKC0taSA+PSAwKSB7CisJCQlpbnRmID0gdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV07CisJCQlyZXN1bWVfaW50ZXJmYWNlKGludGYpOworCQl9CisKKwkvKiBJZiB0aGUgc3VzcGVuZCBzdWNjZWVkZWQsIHByb3BhZ2F0ZSBpdCB1cCB0aGUgdHJlZSAqLworCX0gZWxzZSBpZiAocGFyZW50KQorCQl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKHBhcmVudCwgMCk7CisKKwkvLyBkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlczogc3RhdHVzICVkXG4iLCBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJcmV0dXJuIHN0YXR1czsKK30KKworLyoqCisgKiB1c2JfcmVzdW1lX2JvdGggLSByZXN1bWUgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcworICogQHVkZXY6IHRoZSB1c2JfZGV2aWNlIHRvIHJlc3VtZQorICoKKyAqIFRoaXMgaXMgdGhlIGNlbnRyYWwgcm91dGluZSBmb3IgcmVzdW1pbmcgVVNCIGRldmljZXMuICBJdCBjYWxscyB0aGUKKyAqIHRoZSByZXN1bWUgbWV0aG9kIGZvciBAdWRldiBhbmQgdGhlbiBjYWxscyB0aGUgcmVzdW1lIG1ldGhvZHMgZm9yIGFsbAorICogdGhlIGludGVyZmFjZSBkcml2ZXJzIGluIEB1ZGV2LgorICoKKyAqIEJlZm9yZSBzdGFydGluZyB0aGUgcmVzdW1lLCB0aGUgcm91dGluZSBjYWxscyBpdHNlbGYgcmVjdXJzaXZlbHkgZm9yCisgKiB0aGUgcGFyZW50IGRldmljZSBvZiBAdWRldiwgdGhlcmVieSBwcm9wYWdhdGluZyB0aGUgY2hhbmdlIHVwIHRoZSBkZXZpY2UKKyAqIHRyZWUgYW5kIGFzc3VyaW5nIHRoYXQgQHVkZXYgd2lsbCBiZSBhYmxlIHRvIHJlc3VtZS4gIElmIHRoZSBwYXJlbnQgaXMKKyAqIHVuYWJsZSB0byByZXN1bWUgc3VjY2Vzc2Z1bGx5LCB0aGUgcm91dGluZSBmYWlscy4KKyAqCisgKiBUaGUgcmVzdW1lIG1ldGhvZCBjYWxscyBhcmUgc3ViamVjdCB0byBtdXR1YWwgZXhjbHVzaW9uIHVuZGVyIGNvbnRyb2wKKyAqIG9mIEB1ZGV2J3MgcG1fbXV0ZXguICBNYW55IG9mIHRoZXNlIGNhbGxzIGFyZSBhbHNvIHVuZGVyIHRoZSBwcm90ZWN0aW9uCisgKiBvZiBAdWRldidzIGRldmljZSBsb2NrIChpbmNsdWRpbmcgYWxsIHJlcXVlc3RzIG9yaWdpbmF0aW5nIG91dHNpZGUgdGhlCisgKiBVU0Igc3Vic3lzdGVtKSwgYnV0IGF1dG9yZXN1bWUgcmVxdWVzdHMgZ2VuZXJhdGVkIGJ5IGEgY2hpbGQgZGV2aWNlIG9yCisgKiBpbnRlcmZhY2UgZHJpdmVyIG1heSBub3QgYmUuICBVc2Jjb3JlIHdpbGwgaW5zdXJlIHRoYXQgdGhlIG1ldGhvZCBjYWxscworICogZG8gbm90IGFycml2ZSBkdXJpbmcgYmluZCwgdW5iaW5kLCBvciByZXNldCBvcGVyYXRpb25zLiAgSG93ZXZlciwgZHJpdmVycworICogbXVzdCBiZSBwcmVwYXJlZCB0byBoYW5kbGUgcmVzdW1lIGNhbGxzIGFycml2aW5nIGF0IHVucHJlZGljdGFibGUgdGltZXMuCisgKiBUaGUgb25seSB3YXkgdG8gYmxvY2sgc3VjaCBjYWxscyBpcyB0byBkbyBhbiBhdXRvcmVzdW1lIChwcmV2ZW50aW5nCisgKiBvdGhlciBhdXRvcmVzdW1lcykgd2hpbGUgaG9sZGluZyBAdWRldidzIGRldmljZSBsb2NrIChwcmV2ZW50aW5nIG91dHNpZGUKKyAqIHJlc3VtZXMpLgorICoKKyAqIFRoZSBjYWxsZXIgbXVzdCBob2xkIEB1ZGV2LT5wbV9tdXRleC4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KKyAqLworaW50IHVzYl9yZXN1bWVfYm90aChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQJCQlzdGF0dXMgPSAwOworCWludAkJCWk7CisJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7CisJc3RydWN0IHVzYl9kZXZpY2UJKnBhcmVudCA9IHVkZXYtPnBhcmVudDsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJnVkZXYtPmF1dG9zdXNwZW5kKTsKKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIFByb3BhZ2F0ZSB0aGUgcmVzdW1lIHVwIHRoZSB0cmVlLCBpZiBuZWNlc3NhcnkgKi8KKwlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgeworCQlpZiAocGFyZW50KSB7CisJCQl1c2JfcG1fbG9jayhwYXJlbnQpOworCQkJcGFyZW50LT5hdXRvX3BtID0gMTsKKwkJCXN0YXR1cyA9IHVzYl9yZXN1bWVfYm90aChwYXJlbnQpOworCQl9IGVsc2UgeworCisJCQkvKiBXZSBjYW4ndCBwcm9nYWdhdGUgYmV5b25kIHRoZSBVU0Igc3Vic3lzdGVtLAorCQkJICogc28gaWYgYSByb290IGh1YidzIGNvbnRyb2xsZXIgaXMgc3VzcGVuZGVkCisJCQkgKiB0aGVuIHdlJ3JlIHN0dWNrLiAqLworCQkJaWYgKHVkZXYtPmRldi5wYXJlbnQtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ICE9CisJCQkJCVBNX0VWRU5UX09OKQorCQkJCXN0YXR1cyA9IC1FSE9TVFVOUkVBQ0g7CisJCX0KKwkJaWYgKHN0YXR1cyA9PSAwKQorCQkJc3RhdHVzID0gcmVzdW1lX2RldmljZSh1ZGV2KTsKKwkJaWYgKHBhcmVudCkKKwkJCXVzYl9wbV91bmxvY2socGFyZW50KTsKKwl9IGVsc2UgeworCisJCS8qIE5lZWRlZCBvbmx5IGZvciBzZXR0aW5nIHVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudAorCQkgKiBhbmQgZm9yIHBvc3NpYmxlIGRlYnVnZ2luZyBtZXNzYWdlLiAqLworCQlzdGF0dXMgPSByZXN1bWVfZGV2aWNlKHVkZXYpOworCX0KKworCS8qIE5vdyB0aGUgcGFyZW50IHdvbid0IHN1c3BlbmQgdW50aWwgd2UgYXJlIGZpbmlzaGVkICovCisKKwlpZiAoc3RhdHVzID09IDAgJiYgdWRldi0+YWN0Y29uZmlnKSB7CisJCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgeworCQkJaW50ZiA9IHVkZXYtPmFjdGNvbmZpZy0+aW50ZXJmYWNlW2ldOworCQkJcmVzdW1lX2ludGVyZmFjZShpbnRmKTsKKwkJfQorCX0KKworCS8vIGRldl9kYmcoJnVkZXYtPmRldiwgIiVzOiBzdGF0dXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECisKKy8qKgorICogdXNiX2F1dG9zdXNwZW5kX2RldmljZSAtIGRlbGF5ZWQgYXV0b3N1c3BlbmQgb2YgYSBVU0IgZGV2aWNlIGFuZCBpdHMgaW50ZXJmYWNlcworICogQHVkZXY6IHRoZSB1c2JfZGV2aWNlIHRvIGF1dG9zdXNwZW5kCisgKiBAZGVjX3VzYWdlX2NudDogZmxhZyB0byBkZWNyZW1lbnQgQHVkZXYncyBQTS11c2FnZSBjb3VudGVyCisgKgorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgd2hlbiBhIGNvcmUgc3Vic3lzdGVtIGlzIGZpbmlzaGVkIHVzaW5nCisgKiBAdWRldiBhbmQgd2FudHMgdG8gYWxsb3cgaXQgdG8gYXV0b3N1c3BlbmQuICBFeGFtcGxlcyB3b3VsZCBiZSB3aGVuCisgKiBAdWRldidzIGRldmljZSBmaWxlIGluIHVzYmZzIGlzIGNsb3NlZCBvciBhZnRlciBhIGNvbmZpZ3VyYXRpb24gY2hhbmdlLgorICoKKyAqIEBkZWNfdXNhZ2VfY250IHNob3VsZCBiZSAxIGlmIHRoZSBzdWJzeXN0ZW0gcHJldmlvdXNseSBpbmNyZW1lbnRlZAorICogQHVkZXYncyB1c2FnZSBjb3VudGVyIChzdWNoIGFzIGJ5IHBhc3NpbmcgMSB0byB1c2JfYXV0b3Jlc3VtZV9kZXZpY2UpOworICogb3RoZXJ3aXNlIGl0IHNob3VsZCBiZSAwLgorICoKKyAqIElmIHRoZSB1c2FnZSBjb3VudGVyIGZvciBAdWRldiBvciBhbnkgb2YgaXRzIGFjdGl2ZSBpbnRlcmZhY2VzIGlzIGdyZWF0ZXIKKyAqIHRoYW4gMCwgdGhlIGF1dG9zdXNwZW5kIHJlcXVlc3Qgd2lsbCBub3QgYmUgcXVldWVkLiAgKElmIGFuIGludGVyZmFjZQorICogZHJpdmVyIGRvZXMgbm90IHN1cHBvcnQgYXV0b3N1c3BlbmQgdGhlbiBpdHMgdXNhZ2UgY291bnRlciBpcyBwZXJtYW5lbnRseQorICogcG9zaXRpdmUuKSAgTGlrZXdpc2UsIGlmIGFuIGludGVyZmFjZSBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlLXdha2V1cAorICogY2FwYWJpbGl0eSBkdXJpbmcgYXV0b3N1c3BlbmQgYnV0IHJlbW90ZSB3YWtldXAgaXMgZGlzYWJsZWQsIHRoZQorICogYXV0b3N1c3BlbmQgd2lsbCBmYWlsLgorICoKKyAqIE9mdGVuIHRoZSBjYWxsZXIgd2lsbCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2ssIGJ1dCB0aGlzIGlzIG5vdAorICogbmVjZXNzYXJ5LgorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgorICovCit2b2lkIHVzYl9hdXRvc3VzcGVuZF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBkZWNfdXNhZ2VfY250KQoreworCXVzYl9wbV9sb2NrKHVkZXYpOworCXVkZXYtPnBtX3VzYWdlX2NudCAtPSBkZWNfdXNhZ2VfY250OworCWlmICh1ZGV2LT5wbV91c2FnZV9jbnQgPD0gMCkKKwkJcXVldWVfZGVsYXllZF93b3JrKGtzdXNwZW5kX3VzYl93cSwgJnVkZXYtPmF1dG9zdXNwZW5kLAorCQkJCVVTQl9BVVRPU1VTUEVORF9ERUxBWSk7CisJdXNiX3BtX3VubG9jayh1ZGV2KTsKKwkvLyBkZXZfZGJnKCZ1ZGV2LT5kZXYsICIlczogY250ICVkXG4iLAorCS8vCQlfX0ZVTkNUSU9OX18sIHVkZXYtPnBtX3VzYWdlX2NudCk7Cit9CisKKy8qKgorICogdXNiX2F1dG9yZXN1bWVfZGV2aWNlIC0gaW1tZWRpYXRlbHkgYXV0b3Jlc3VtZSBhIFVTQiBkZXZpY2UgYW5kIGl0cyBpbnRlcmZhY2VzCisgKiBAdWRldjogdGhlIHVzYl9kZXZpY2UgdG8gYXV0b3Jlc3VtZQorICogQGluY191c2FnZV9jbnQ6IGZsYWcgdG8gaW5jcmVtZW50IEB1ZGV2J3MgUE0tdXNhZ2UgY291bnRlcgorICoKKyAqIFRoaXMgcm91dGluZSBzaG91bGQgYmUgY2FsbGVkIHdoZW4gYSBjb3JlIHN1YnN5c3RlbSB3YW50cyB0byB1c2UgQHVkZXYKKyAqIGFuZCBuZWVkcyB0byBndWFyYW50ZWUgdGhhdCBpdCBpcyBub3Qgc3VzcGVuZGVkLiAgSW4gYWRkaXRpb24sIHRoZQorICogY2FsbGVyIGNhbiBwcmV2ZW50IEB1ZGV2IGZyb20gYmVpbmcgYXV0b3N1c3BlbmRlZCBzdWJzZXF1ZW50bHkuICAoTm90ZQorICogdGhhdCB0aGlzIHdpbGwgbm90IHByZXZlbnQgc3VzcGVuZCBldmVudHMgb3JpZ2luYXRpbmcgaW4gdGhlIFBNIGNvcmUuKQorICogRXhhbXBsZXMgd291bGQgYmUgd2hlbiBAdWRldidzIGRldmljZSBmaWxlIGluIHVzYmZzIGlzIG9wZW5lZCAoYXV0b3N1c3BlbmQKKyAqIHNob3VsZCBiZSBwcmV2ZW50ZWQgdW50aWwgdGhlIGZpbGUgaXMgY2xvc2VkKSBvciB3aGVuIGEgcmVtb3RlLXdha2V1cAorICogcmVxdWVzdCBpcyByZWNlaXZlZCAobGF0ZXIgYXV0b3N1c3BlbmRzIHNob3VsZCBub3QgYmUgcHJldmVudGVkKS4KKyAqCisgKiBAaW5jX3VzYWdlX2NudCBzaG91bGQgYmUgMSB0byBpbmNyZW1lbnQgQHVkZXYncyB1c2FnZSBjb3VudGVyIGFuZCBwcmV2ZW50CisgKiBhdXRvc3VzcGVuZHMuICBUaGlzIHByZXZlbnRpb24gd2lsbCBwZXJzaXN0IHVudGlsIHRoZSB1c2FnZSBjb3VudGVyIGlzCisgKiBkZWNyZW1lbnRlZCBhZ2FpbiAoc3VjaCBhcyBieSBwYXNzaW5nIDEgdG8gdXNiX2F1dG9zdXNwZW5kX2RldmljZSkuCisgKiBPdGhlcndpc2UgQGluY191c2FnZV9jbnQgc2hvdWxkIGJlIDAgdG8gbGVhdmUgdGhlIHVzYWdlIGNvdW50ZXIgdW5jaGFuZ2VkLgorICogUmVnYXJkbGVzcywgaWYgdGhlIGF1dG9yZXN1bWUgZmFpbHMgdGhlbiB0aGUgdXNhZ2UgY291bnRlciBpcyBub3QKKyAqIGluY3JlbWVudGVkLgorICoKKyAqIE9mdGVuIHRoZSBjYWxsZXIgd2lsbCBob2xkIEB1ZGV2J3MgZGV2aWNlIGxvY2ssIGJ1dCB0aGlzIGlzIG5vdAorICogbmVjZXNzYXJ5IChhbmQgYXR0ZW1wdGluZyBpdCBtaWdodCBjYXVzZSBkZWFkbG9jaykuCisgKgorICogVGhpcyByb3V0aW5lIGNhbiBydW4gb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCisgKi8KK2ludCB1c2JfYXV0b3Jlc3VtZV9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIGludCBpbmNfdXNhZ2VfY250KQoreworCWludAlzdGF0dXM7CisKKwl1c2JfcG1fbG9jayh1ZGV2KTsKKwl1ZGV2LT5wbV91c2FnZV9jbnQgKz0gaW5jX3VzYWdlX2NudDsKKwl1ZGV2LT5hdXRvX3BtID0gMTsKKwlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldik7CisJaWYgKHN0YXR1cyAhPSAwKQorCQl1ZGV2LT5wbV91c2FnZV9jbnQgLT0gaW5jX3VzYWdlX2NudDsKKwl1c2JfcG1fdW5sb2NrKHVkZXYpOworCS8vIGRldl9kYmcoJnVkZXYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAorCS8vCQlfX0ZVTkNUSU9OX18sIHN0YXR1cywgdWRldi0+cG1fdXNhZ2VfY250KTsKKwlyZXR1cm4gc3RhdHVzOworfQorCisvKioKKyAqIHVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZSAtIGRlY3JlbWVudCBhIFVTQiBpbnRlcmZhY2UncyBQTS11c2FnZSBjb3VudGVyCisgKiBAaW50ZjogdGhlIHVzYl9pbnRlcmZhY2Ugd2hvc2UgY291bnRlciBzaG91bGQgYmUgZGVjcmVtZW50ZWQKKyAqCisgKiBUaGlzIHJvdXRpbmUgc2hvdWxkIGJlIGNhbGxlZCBieSBhbiBpbnRlcmZhY2UgZHJpdmVyIHdoZW4gaXQgaXMKKyAqIGZpbmlzaGVkIHVzaW5nIEBpbnRmIGFuZCB3YW50cyB0byBhbGxvdyBpdCB0byBhdXRvc3VzcGVuZC4gIEEgdHlwaWNhbAorICogZXhhbXBsZSB3b3VsZCBiZSBhIGNoYXJhY3Rlci1kZXZpY2UgZHJpdmVyIHdoZW4gaXRzIGRldmljZSBmaWxlIGlzCisgKiBjbG9zZWQuCisgKgorICogVGhlIHJvdXRpbmUgZGVjcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIuICBXaGVuIHRoZSBjb3VudGVyIHJlYWNoZXMKKyAqIDAsIGEgZGVsYXllZCBhdXRvc3VzcGVuZCByZXF1ZXN0IGZvciBAaW50ZidzIGRldmljZSBpcyBxdWV1ZWQuICBXaGVuCisgKiB0aGUgZGVsYXkgZXhwaXJlcywgaWYgQGludGYtPnBtX3VzYWdlX2NudCBpcyBzdGlsbCA8PSAwIGFsb25nIHdpdGggYWxsCisgKiB0aGUgb3RoZXIgdXNhZ2UgY291bnRlcnMgZm9yIHRoZSBzaWJsaW5nIGludGVyZmFjZXMgYW5kIEBpbnRmJ3MKKyAqIHVzYl9kZXZpY2UsIHRoZSBkZXZpY2UgYW5kIGFsbCBpdHMgaW50ZXJmYWNlcyB3aWxsIGJlIGF1dG9zdXNwZW5kZWQuCisgKgorICogTm90ZSB0aGF0IEBpbnRmLT5wbV91c2FnZV9jbnQgaXMgb3duZWQgYnkgdGhlIGludGVyZmFjZSBkcml2ZXIuICBUaGUKKyAqIGNvcmUgd2lsbCBub3QgY2hhbmdlIGl0cyB2YWx1ZSBvdGhlciB0aGFuIHRoZSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudAorICogaW4gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlIGFuZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UuICBUaGUgZHJpdmVyCisgKiBtYXkgdXNlIHRoaXMgc2ltcGxlIGNvdW50ZXItb3JpZW50ZWQgZGlzY2lwbGluZSBvciBtYXkgc2V0IHRoZSB2YWx1ZQorICogYW55IHdheSBpdCBsaWtlcy4KKyAqCisgKiBJZiB0aGUgZHJpdmVyIGhhcyBzZXQgQGludGYtPm5lZWRzX3JlbW90ZV93YWtldXAgdGhlbiBhdXRvc3VzcGVuZCB3aWxsCisgKiB0YWtlIHBsYWNlIG9ubHkgaWYgdGhlIGRldmljZSdzIHJlbW90ZS13YWtldXAgZmFjaWxpdHkgaXMgZW5hYmxlZC4KKyAqCisgKiBTdXNwZW5kIG1ldGhvZCBjYWxscyBxdWV1ZWQgYnkgdGhpcyByb3V0aW5lIGNhbiBhcnJpdmUgYXQgYW55IHRpbWUKKyAqIHdoaWxlIEBpbnRmIGlzIHJlc3VtZWQgYW5kIGl0cyB1c2FnZSBjb3VudGVyIGlzIGVxdWFsIHRvIDAuICBUaGV5IGFyZQorICogbm90IHByb3RlY3RlZCBieSB0aGUgdXNiX2RldmljZSdzIGxvY2sgYnV0IG9ubHkgYnkgaXRzIHBtX211dGV4LgorICogRHJpdmVycyBtdXN0IHByb3ZpZGUgdGhlaXIgb3duIHN5bmNocm9uaXphdGlvbi4KKyAqCisgKiBUaGlzIHJvdXRpbmUgY2FuIHJ1biBvbmx5IGluIHByb2Nlc3MgY29udGV4dC4KKyAqLwordm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCisJdXNiX3BtX2xvY2sodWRldik7CisJaWYgKGludGYtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX1VOQk9VTkQgJiYKKwkJCS0taW50Zi0+cG1fdXNhZ2VfY250IDw9IDApIHsKKwkJcXVldWVfZGVsYXllZF93b3JrKGtzdXNwZW5kX3VzYl93cSwgJnVkZXYtPmF1dG9zdXNwZW5kLAorCQkJCVVTQl9BVVRPU1VTUEVORF9ERUxBWSk7CisJfQorCXVzYl9wbV91bmxvY2sodWRldik7CisJLy8gZGV2X2RiZygmaW50Zi0+ZGV2LCAiJXM6IGNudCAlZFxuIiwKKwkvLwkJX19GVU5DVElPTl9fLCBpbnRmLT5wbV91c2FnZV9jbnQpOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKTsKKworLyoqCisgKiB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UgLSBpbmNyZW1lbnQgYSBVU0IgaW50ZXJmYWNlJ3MgUE0tdXNhZ2UgY291bnRlcgorICogQGludGY6IHRoZSB1c2JfaW50ZXJmYWNlIHdob3NlIGNvdW50ZXIgc2hvdWxkIGJlIGluY3JlbWVudGVkCisgKgorICogVGhpcyByb3V0aW5lIHNob3VsZCBiZSBjYWxsZWQgYnkgYW4gaW50ZXJmYWNlIGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvCisgKiB1c2UgQGludGYgYW5kIG5lZWRzIHRvIGd1YXJhbnRlZSB0aGF0IGl0IGlzIG5vdCBzdXNwZW5kZWQuICBJbiBhZGRpdGlvbiwKKyAqIHRoZSByb3V0aW5lIHByZXZlbnRzIEBpbnRmIGZyb20gYmVpbmcgYXV0b3N1c3BlbmRlZCBzdWJzZXF1ZW50bHkuICAoTm90ZQorICogdGhhdCB0aGlzIHdpbGwgbm90IHByZXZlbnQgc3VzcGVuZCBldmVudHMgb3JpZ2luYXRpbmcgaW4gdGhlIFBNIGNvcmUuKQorICogVGhpcyBwcmV2ZW50aW9uIHdpbGwgcGVyc2lzdCB1bnRpbCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSBpcyBjYWxsZWQKKyAqIG9yIEBpbnRmIGlzIHVuYm91bmQuICBBIHR5cGljYWwgZXhhbXBsZSB3b3VsZCBiZSBhIGNoYXJhY3Rlci1kZXZpY2UKKyAqIGRyaXZlciB3aGVuIGl0cyBkZXZpY2UgZmlsZSBpcyBvcGVuZWQuCisgKgorICogVGhlIHJvdXRpbmUgaW5jcmVtZW50cyBAaW50ZidzIHVzYWdlIGNvdW50ZXIuICBTbyBsb25nIGFzIHRoZSBjb3VudGVyCisgKiBpcyBncmVhdGVyIHRoYW4gMCwgYXV0b3N1c3BlbmQgd2lsbCBub3QgYmUgYWxsb3dlZCBmb3IgQGludGYgb3IgaXRzCisgKiB1c2JfZGV2aWNlLiAgV2hlbiB0aGUgZHJpdmVyIGlzIGZpbmlzaGVkIHVzaW5nIEBpbnRmIGl0IHNob3VsZCBjYWxsCisgKiB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UoKSB0byBkZWNyZW1lbnQgdGhlIHVzYWdlIGNvdW50ZXIgYW5kIHF1ZXVlCisgKiBhIGRlbGF5ZWQgYXV0b3N1c3BlbmQgcmVxdWVzdCAoaWYgdGhlIGNvdW50ZXIgaXMgPD0gMCkuCisgKgorICogTm90ZSB0aGF0IEBpbnRmLT5wbV91c2FnZV9jbnQgaXMgb3duZWQgYnkgdGhlIGludGVyZmFjZSBkcml2ZXIuICBUaGUKKyAqIGNvcmUgd2lsbCBub3QgY2hhbmdlIGl0cyB2YWx1ZSBvdGhlciB0aGFuIHRoZSBpbmNyZW1lbnQgYW5kIGRlY3JlbWVudAorICogaW4gdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlIGFuZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2UuICBUaGUgZHJpdmVyCisgKiBtYXkgdXNlIHRoaXMgc2ltcGxlIGNvdW50ZXItb3JpZW50ZWQgZGlzY2lwbGluZSBvciBtYXkgc2V0IHRoZSB2YWx1ZQorICogYW55IHdheSBpdCBsaWtlcy4KKyAqCisgKiBSZXN1bWUgbWV0aG9kIGNhbGxzIGdlbmVyYXRlZCBieSB0aGlzIHJvdXRpbmUgY2FuIGFycml2ZSBhdCBhbnkgdGltZQorICogd2hpbGUgQGludGYgaXMgc3VzcGVuZGVkLiAgVGhleSBhcmUgbm90IHByb3RlY3RlZCBieSB0aGUgdXNiX2RldmljZSdzCisgKiBsb2NrIGJ1dCBvbmx5IGJ5IGl0cyBwbV9tdXRleC4gIERyaXZlcnMgbXVzdCBwcm92aWRlIHRoZWlyIG93bgorICogc3luY2hyb25pemF0aW9uLgorICoKKyAqIFRoaXMgcm91dGluZSBjYW4gcnVuIG9ubHkgaW4gcHJvY2VzcyBjb250ZXh0LgorICovCitpbnQgdXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQoreworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKKwlpbnQJCQlzdGF0dXM7CisKKwl1c2JfcG1fbG9jayh1ZGV2KTsKKwlpZiAoaW50Zi0+Y29uZGl0aW9uID09IFVTQl9JTlRFUkZBQ0VfVU5CT1VORCkKKwkJc3RhdHVzID0gLUVOT0RFVjsKKwllbHNlIHsKKwkJKytpbnRmLT5wbV91c2FnZV9jbnQ7CisJCXVkZXYtPmF1dG9fcG0gPSAxOworCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldik7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCS0taW50Zi0+cG1fdXNhZ2VfY250OworCX0KKwl1c2JfcG1fdW5sb2NrKHVkZXYpOworCS8vIGRldl9kYmcoJmludGYtPmRldiwgIiVzOiBzdGF0dXMgJWQgY250ICVkXG4iLAorCS8vCQlfX0ZVTkNUSU9OX18sIHN0YXR1cywgaW50Zi0+cG1fdXNhZ2VfY250KTsKKwlyZXR1cm4gc3RhdHVzOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2F1dG9wbV9nZXRfaW50ZXJmYWNlKTsKKworI2VuZGlmIC8qIENPTkZJR19VU0JfU1VTUEVORCAqLworCitzdGF0aWMgaW50IHVzYl9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCit7CisJaW50CXN0YXR1czsKKworCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisKKwkJdXNiX3BtX2xvY2sodWRldik7CisJCXVkZXYtPmF1dG9fcG0gPSAwOworCQlzdGF0dXMgPSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIG1lc3NhZ2UpOworCQl1c2JfcG1fdW5sb2NrKHVkZXYpOworCX0gZWxzZQorCQlzdGF0dXMgPSAwOworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50CXN0YXR1czsKKworCWlmIChpc191c2JfZGV2aWNlKGRldikpIHsKKwkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7CisKKwkJdXNiX3BtX2xvY2sodWRldik7CisJCXVkZXYtPmF1dG9fcG0gPSAwOworCQlzdGF0dXMgPSB1c2JfcmVzdW1lX2JvdGgodWRldik7CisJCXVzYl9wbV91bmxvY2sodWRldik7CisKKwkJLyogUmViaW5kIGRyaXZlcnMgdGhhdCBoYWQgbm8gc3VzcGVuZCBtZXRob2Q/ICovCisJfSBlbHNlCisJCXN0YXR1cyA9IDA7CisJcmV0dXJuIHN0YXR1czsKK30KKworI2VuZGlmIC8qIENPTkZJR19QTSAqLworCitzdHJ1Y3QgYnVzX3R5cGUgdXNiX2J1c190eXBlID0geworCS5uYW1lID0JCSJ1c2IiLAorCS5tYXRjaCA9CXVzYl9kZXZpY2VfbWF0Y2gsCisJLnVldmVudCA9CXVzYl91ZXZlbnQsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQgPQl1c2Jfc3VzcGVuZCwKKwkucmVzdW1lID0JdXNiX3Jlc3VtZSwKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYyBiL2RyaXZlcnMvdXNiL2NvcmUvZW5kcG9pbnQuYwppbmRleCAyNDdiNWE0Li4zZWJiOTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2VuZHBvaW50LmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9lbmRwb2ludC5jCkBAIC0yMDcsOSArMjA3LDkgQEAKIAlrZnJlZShlcF9kZXYpOwogfQogCi12b2lkIHVzYl9jcmVhdGVfZXBfZmlsZXMoc3RydWN0IGRldmljZSAqcGFyZW50LAotCQkJIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQsCi0JCQkgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCitpbnQgdXNiX2NyZWF0ZV9lcF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50LAorCQkJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJY2hhciBuYW1lWzhdOwogCXN0cnVjdCBlcF9kZXZpY2UgKmVwX2RldjsKQEAgLTI0MiwxOSArMjQyLDMzIEBACiAJcmV0dmFsID0gZGV2aWNlX3JlZ2lzdGVyKCZlcF9kZXYtPmRldik7CiAJaWYgKHJldHZhbCkKIAkJZ290byBlcnJvcjsKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJmVwX2Rldi0+ZGV2LmtvYmosICZlcF9kZXZfYXR0cl9ncnApOworCXJldHZhbCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmZXBfZGV2LT5kZXYua29iaiwgJmVwX2Rldl9hdHRyX2dycCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcl9ncm91cDsKIAogCWVuZHBvaW50LT5lcF9kZXYgPSBlcF9kZXY7CiAKIAkvKiBjcmVhdGUgdGhlIHN5bWxpbmsgdG8gdGhlIG9sZC1zdHlsZSAiZXBfWFgiIGRpcmVjdG9yeSAqLwogCXNwcmludGYobmFtZSwgImVwXyUwMngiLCBlbmRwb2ludC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKLQlzeXNmc19jcmVhdGVfbGluaygmcGFyZW50LT5rb2JqLCAmZW5kcG9pbnQtPmVwX2Rldi0+ZGV2LmtvYmosIG5hbWUpOwotCisJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2xpbmsoJnBhcmVudC0+a29iaiwKKwkJCQkgICAmZW5kcG9pbnQtPmVwX2Rldi0+ZGV2LmtvYmosIG5hbWUpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3JfbGluazsKIGV4aXQ6Ci0JcmV0dXJuOworCXJldHVybiByZXR2YWw7CisKK2Vycm9yX2xpbms6CisJc3lzZnNfcmVtb3ZlX2dyb3VwKCZlcF9kZXYtPmRldi5rb2JqLCAmZXBfZGV2X2F0dHJfZ3JwKTsKKworZXJyb3JfZ3JvdXA6CisJZGV2aWNlX3VucmVnaXN0ZXIoJmVwX2Rldi0+ZGV2KTsKKwllbmRwb2ludC0+ZXBfZGV2ID0gTlVMTDsKKwlkZXN0cm95X2VuZHBvaW50X2NsYXNzKCk7CisJcmV0dXJuIHJldHZhbDsKIGVycm9yOgogCWtmcmVlKGVwX2Rldik7Ci0JcmV0dXJuOworCWRlc3Ryb3lfZW5kcG9pbnRfY2xhc3MoKTsKKwlyZXR1cm4gcmV0dmFsOwogfQogCiB2b2lkIHVzYl9yZW1vdmVfZXBfZmlsZXMoc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplbmRwb2ludCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZmlsZS5jIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKaW5kZXggOGRlNGY4Yy4uYzM3NmM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9maWxlLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9maWxlLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1c2JfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0JCXVzYl9vcGVuLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jIGIvZHJpdmVycy91c2IvY29yZS9nZW5lcmljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzMzJjYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvZ2VuZXJpYy5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgorICogZHJpdmVycy91c2IvZ2VuZXJpYy5jIC0gZ2VuZXJpYyBkcml2ZXIgZm9yIFVTQiBkZXZpY2VzIChub3QgaW50ZXJmYWNlcykKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDUgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KKyAqCisgKiBiYXNlZCBvbiBkcml2ZXJzL3VzYi91c2IuYyB3aGljaCBoYWQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHRzOgorICoJKEMpIENvcHlyaWdodCBMaW51cyBUb3J2YWxkcyAxOTk5CisgKgkoQykgQ29weXJpZ2h0IEpvaGFubmVzIEVyZGZlbHQgMTk5OS0yMDAxCisgKgkoQykgQ29weXJpZ2h0IEFuZHJlYXMgR2FsIDE5OTkKKyAqCShDKSBDb3B5cmlnaHQgR3JlZ29yeSBQLiBTbWl0aCAxOTk5CisgKgkoQykgQ29weXJpZ2h0IERldGkgRmxpZWdsIDE5OTkgKG5ldyBVU0IgYXJjaGl0ZWN0dXJlKQorICoJKEMpIENvcHlyaWdodCBSYW5keSBEdW5sYXAgMjAwMAorICoJKEMpIENvcHlyaWdodCBEYXZpZCBCcm93bmVsbCAyMDAwLTIwMDQKKyAqCShDKSBDb3B5cmlnaHQgWWdnZHJhc2lsIENvbXB1dGluZywgSW5jLiAyMDAwCisgKgkJKHVzYl9kZXZpY2VfaWQgbWF0Y2hpbmcgY2hhbmdlcyBieSBBZGFtIEouIFJpY2h0ZXIpCisgKgkoQykgQ29weXJpZ2h0IEdyZWcgS3JvYWgtSGFydG1hbiAyMDAyLTIwMDMKKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgInVzYi5oIgorCitzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBsdXJhbChpbnQgbikKK3sKKwlyZXR1cm4gKG4gPT0gMSA/ICIiIDogInMiKTsKK30KKworc3RhdGljIGludCBjaG9vc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwlpbnQgaTsKKwlpbnQgbnVtX2NvbmZpZ3M7CisJaW50IGluc3VmZmljaWVudF9wb3dlciA9IDA7CisJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYywgKmJlc3Q7CisKKwliZXN0ID0gTlVMTDsKKwljID0gdWRldi0+Y29uZmlnOworCW51bV9jb25maWdzID0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7CisJZm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyAoaSsrLCBjKyspKSB7CisJCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2MgPSBOVUxMOworCisJCS8qIEl0J3MgcG9zc2libGUgdGhhdCBhIGNvbmZpZyBoYXMgbm8gaW50ZXJmYWNlcyEgKi8KKwkJaWYgKGMtPmRlc2MuYk51bUludGVyZmFjZXMgPiAwKQorCQkJZGVzYyA9ICZjLT5pbnRmX2NhY2hlWzBdLT5hbHRzZXR0aW5nLT5kZXNjOworCisJCS8qCisJCSAqIEhQJ3MgVVNCIGJ1cy1wb3dlcmVkIGtleWJvYXJkIGhhcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uCisJCSAqIGFuZCBpdCBjbGFpbXMgdG8gYmUgc2VsZi1wb3dlcmVkOyBvdGhlciBkZXZpY2VzIG1heSBoYXZlCisJCSAqIHNpbWlsYXIgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3JzLiAgSWYgdGhlIG5leHQgdGVzdAorCQkgKiB3ZXJlIGFsbG93ZWQgdG8gZXhlY3V0ZSwgc3VjaCBjb25maWd1cmF0aW9ucyB3b3VsZCBhbHdheXMKKwkJICogYmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZpY2VzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgorCQkgKiBJbiB0aGUgbWVhbnRpbWUsIHdlIHJ1biB0aGUgcmlzayBvZiBzZWxlY3RpbmcgYSBjb25maWcKKwkJICogdGhhdCByZXF1aXJlcyBleHRlcm5hbCBwb3dlciBhdCBhIHRpbWUgd2hlbiB0aGF0IHBvd2VyCisJCSAqIGlzbid0IGF2YWlsYWJsZS4gIEl0IHNlZW1zIHRvIGJlIHRoZSBsZXNzZXIgb2YgdHdvIGV2aWxzLgorCQkgKgorCQkgKiBCdWd6aWxsYSAjNjQ0OCByZXBvcnRzIGEgZGV2aWNlIHRoYXQgYXBwZWFycyB0byBjcmFzaAorCQkgKiB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUX0RFVklDRV9TVEFUVVMgcmVxdWVzdCEgIFdlIGRvbid0CisJCSAqIGhhdmUgYW55IG90aGVyIHdheSB0byB0ZWxsIHdoZXRoZXIgYSBkZXZpY2UgaXMgc2VsZi1wb3dlcmVkLAorCQkgKiBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoYXQgaW5mb3JtYXRpb24gYW55d2hlcmUgYnV0IGhlcmUsCisJCSAqIHRoZSBjYWxsIGhhcyBiZWVuIHJlbW92ZWQuCisJCSAqCisJCSAqIE1heWJlIHRoZSBHRVRfREVWSUNFX1NUQVRVUyBjYWxsIGFuZCB0aGUgdGVzdCBiZWxvdyBjYW4KKwkJICogYmUgcmVpbnN0YXRlZCB3aGVuIGRldmljZSBmaXJtd2FyZXMgYmVjb21lIG1vcmUgcmVsaWFibGUuCisJCSAqIERvbid0IGhvbGQgeW91ciBicmVhdGguCisJCSAqLworI2lmIDAKKwkJLyogUnVsZSBvdXQgc2VsZi1wb3dlcmVkIGNvbmZpZ3MgZm9yIGEgYnVzLXBvd2VyZWQgZGV2aWNlICovCisJCWlmIChidXNfcG93ZXJlZCAmJiAoYy0+ZGVzYy5ibUF0dHJpYnV0ZXMgJgorCQkJCQlVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIpKQorCQkJY29udGludWU7CisjZW5kaWYKKworCQkvKgorCQkgKiBUaGUgbmV4dCB0ZXN0IG1heSBub3QgYmUgYXMgZWZmZWN0aXZlIGFzIGl0IHNob3VsZCBiZS4KKwkJICogU29tZSBodWJzIGhhdmUgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3IsIGNsYWltaW5nCisJCSAqIHRvIGJlIHNlbGYtcG93ZXJlZCB3aGVuIHRoZXkgYXJlIHJlYWxseSBidXMtcG93ZXJlZC4KKwkJICogV2Ugd2lsbCBvdmVyZXN0aW1hdGUgdGhlIGFtb3VudCBvZiBjdXJyZW50IHN1Y2ggaHVicworCQkgKiBtYWtlIGF2YWlsYWJsZSBmb3IgZWFjaCBwb3J0LgorCQkgKgorCQkgKiBUaGlzIGlzIGEgZmFpcmx5IGJlbmlnbiBzb3J0IG9mIGZhaWx1cmUuICBJdCB3b24ndAorCQkgKiBjYXVzZSB1cyB0byByZWplY3QgY29uZmlndXJhdGlvbnMgdGhhdCB3ZSBzaG91bGQgaGF2ZQorCQkgKiBhY2NlcHRlZC4KKwkJICovCisKKwkJLyogUnVsZSBvdXQgY29uZmlncyB0aGF0IGRyYXcgdG9vIG11Y2ggYnVzIGN1cnJlbnQgKi8KKwkJaWYgKGMtPmRlc2MuYk1heFBvd2VyICogMiA+IHVkZXYtPmJ1c19tQSkgeworCQkJaW5zdWZmaWNpZW50X3Bvd2VyKys7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIElmIHRoZSBmaXJzdCBjb25maWcncyBmaXJzdCBpbnRlcmZhY2UgaXMgQ09NTS8yLzB4ZmYKKwkJICogKE1TRlQgUk5ESVMpLCBydWxlIGl0IG91dCB1bmxlc3MgTGludXggaGFzIGhvc3Qtc2lkZQorCQkgKiBSTkRJUyBzdXBwb3J0LiAqLworCQlpZiAoaSA9PSAwICYmIGRlc2MKKwkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0NPTU0KKwkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMgorCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAweGZmKSB7CisjaWZuZGVmIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QKKwkJCWNvbnRpbnVlOworI2Vsc2UKKwkJCWJlc3QgPSBjOworI2VuZGlmCisJCX0KKworCQkvKiBGcm9tIHRoZSByZW1haW5pbmcgY29uZmlncywgY2hvb3NlIHRoZSBmaXJzdCBvbmUgd2hvc2UKKwkJICogZmlyc3QgaW50ZXJmYWNlIGlzIGZvciBhIG5vbi12ZW5kb3Itc3BlY2lmaWMgY2xhc3MuCisJCSAqIFJlYXNvbjogTGludXggaXMgbW9yZSBsaWtlbHkgdG8gaGF2ZSBhIGNsYXNzIGRyaXZlcgorCQkgKiB0aGFuIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlci4gKi8KKwkJZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgIT0KKwkJCQkJCVVTQl9DTEFTU19WRU5ET1JfU1BFQyAmJgorCQkJCSghZGVzYyB8fCBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgIT0KKwkJCQkJCVVTQl9DTEFTU19WRU5ET1JfU1BFQykpIHsKKwkJCWJlc3QgPSBjOworCQkJYnJlYWs7CisJCX0KKworCQkvKiBJZiBhbGwgdGhlIHJlbWFpbmluZyBjb25maWdzIGFyZSB2ZW5kb3Itc3BlY2lmaWMsCisJCSAqIGNob29zZSB0aGUgZmlyc3Qgb25lLiAqLworCQllbHNlIGlmICghYmVzdCkKKwkJCWJlc3QgPSBjOworCX0KKworCWlmIChpbnN1ZmZpY2llbnRfcG93ZXIgPiAwKQorCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAicmVqZWN0ZWQgJWQgY29uZmlndXJhdGlvbiVzICIKKwkJCSJkdWUgdG8gaW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidXMgcG93ZXJcbiIsCisJCQlpbnN1ZmZpY2llbnRfcG93ZXIsIHBsdXJhbChpbnN1ZmZpY2llbnRfcG93ZXIpKTsKKworCWlmIChiZXN0KSB7CisJCWkgPSBiZXN0LT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7CisJCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCisJCQkiY29uZmlndXJhdGlvbiAjJWQgY2hvc2VuIGZyb20gJWQgY2hvaWNlJXNcbiIsCisJCQlpLCBudW1fY29uZmlncywgcGx1cmFsKG51bV9jb25maWdzKSk7CisJfSBlbHNlIHsKKwkJaSA9IC0xOworCQlkZXZfd2FybigmdWRldi0+ZGV2LAorCQkJIm5vIGNvbmZpZ3VyYXRpb24gY2hvc2VuIGZyb20gJWQgY2hvaWNlJXNcbiIsCisJCQludW1fY29uZmlncywgcGx1cmFsKG51bV9jb25maWdzKSk7CisJfQorCXJldHVybiBpOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfcHJvYmUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJaW50IGVyciwgYzsKKworCS8qIHB1dCBkZXZpY2Utc3BlY2lmaWMgZmlsZXMgaW50byBzeXNmcyAqLworCXVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHVkZXYpOworCisJLyogQ2hvb3NlIGFuZCBzZXQgdGhlIGNvbmZpZ3VyYXRpb24uICBUaGlzIHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcworCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlIGFuZCBsZXRzIGludGVyZmFjZSBkcml2ZXJzIGJpbmQgdG8gdGhlbS4KKwkgKi8KKwljID0gY2hvb3NlX2NvbmZpZ3VyYXRpb24odWRldik7CisJaWYgKGMgPj0gMCkgeworCQllcnIgPSB1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgYyk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IHNldCBjb25maWcgIyVkLCBlcnJvciAlZFxuIiwKKwkJCQkJYywgZXJyKTsKKwkJCS8qIFRoaXMgbmVlZCBub3QgYmUgZmF0YWwuICBUaGUgdXNlciBjYW4gdHJ5IHRvCisJCQkgKiBzZXQgb3RoZXIgY29uZmlndXJhdGlvbnMuICovCisJCX0KKwl9CisKKwkvKiBVU0IgZGV2aWNlIHN0YXRlID09IGNvbmZpZ3VyZWQgLi4uIHVzYWJsZSAqLworCXVzYl9ub3RpZnlfYWRkX2RldmljZSh1ZGV2KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBnZW5lcmljX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJdXNiX25vdGlmeV9yZW1vdmVfZGV2aWNlKHVkZXYpOworCisJLyogaWYgdGhpcyBpcyBvbmx5IGFuIHVuYmluZCwgbm90IGEgcGh5c2ljYWwgZGlzY29ubmVjdCwgdGhlbgorCSAqIHVuY29uZmlndXJlIHRoZSBkZXZpY2UgKi8KKwlpZiAodWRldi0+YWN0Y29uZmlnKQorCQl1c2Jfc2V0X2NvbmZpZ3VyYXRpb24odWRldiwgMCk7CisKKwl1c2JfcmVtb3ZlX3N5c2ZzX2Rldl9maWxlcyh1ZGV2KTsKK30KKworI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50IGdlbmVyaWNfc3VzcGVuZChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IG1zZykKK3sKKwkvKiBVU0IgZGV2aWNlcyBlbnRlciBTVVNQRU5EIHN0YXRlIHRocm91Z2ggdGhlaXIgaHVicywgYnV0IGNhbiBiZQorCSAqIG1hcmtlZCBmb3IgRlJFRVpFIGFzIHNvb24gYXMgdGhlaXIgY2hpbGRyZW4gYXJlIGFscmVhZHkgaWRsZWQuCisJICogQnV0IHRob3NlIHNlbWFudGljcyBhcmUgdXNlbGVzcywgc28gd2UgZXF1YXRlIHRoZSB0d28gKHNpZ2gpLgorCSAqLworCXJldHVybiB1c2JfcG9ydF9zdXNwZW5kKHVkZXYpOworfQorCitzdGF0aWMgaW50IGdlbmVyaWNfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiB1c2JfcG9ydF9yZXN1bWUodWRldik7Cit9CisKKyNlbmRpZgkvKiBDT05GSUdfUE0gKi8KKworc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlciA9IHsKKwkubmFtZSA9CSJ1c2IiLAorCS5wcm9iZSA9IGdlbmVyaWNfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnZW5lcmljX2Rpc2Nvbm5lY3QsCisjaWZkZWYJQ09ORklHX1BNCisJLnN1c3BlbmQgPSBnZW5lcmljX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdlbmVyaWNfcmVzdW1lLAorI2VuZGlmCisJLnN1cHBvcnRzX2F1dG9zdXNwZW5kID0gMSwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC1wY2kuYyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCmluZGV4IGZhMzYzOTEuLmVkZjQzMDAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLXBjaS5jCkBAIC00MTMsNCArNDEzLDIwIEBACiAKICNlbmRpZgkvKiBDT05GSUdfUE0gKi8KIAorLyoqCisgKiB1c2JfaGNkX3BjaV9zaHV0ZG93biAtIHNodXRkb3duIGhvc3QgY29udHJvbGxlcgorICogQGRldjogVVNCIEhvc3QgQ29udHJvbGxlciBiZWluZyBzaHV0ZG93bgorICovCit2b2lkIHVzYl9oY2RfcGNpX3NodXRkb3duIChzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXN0cnVjdCB1c2JfaGNkCQkqaGNkOworCisJaGNkID0gcGNpX2dldF9kcnZkYXRhKGRldik7CisJaWYgKCFoY2QpCisJCXJldHVybjsKKworCWlmIChoY2QtPmRyaXZlci0+c2h1dGRvd24pCisJCWhjZC0+ZHJpdmVyLT5zaHV0ZG93bihoY2QpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wY2lfc2h1dGRvd24pOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwppbmRleCBmYjRkMDU4Li4zN2Y5ZjVlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKQEAgLTM0NCw3ICszNDUsOCBAQAogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmNtZDsKICAJdTE2CQl0eXBlUmVxLCB3VmFsdWUsIHdJbmRleCwgd0xlbmd0aDsKIAl1OAkJKnVidWYgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKLQl1OAkJdGJ1ZiBbc2l6ZW9mIChzdHJ1Y3QgdXNiX2h1Yl9kZXNjcmlwdG9yKV07CisJdTgJCXRidWYgW3NpemVvZiAoc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvcildCisJCV9fYXR0cmlidXRlX18oKGFsaWduZWQoNCkpKTsKIAljb25zdCB1OAkqYnVmcCA9IHRidWY7CiAJaW50CQlsZW4gPSAwOwogCWludAkJcGF0Y2hfd2FrZXVwID0gMDsKQEAgLTYzMiwzMSArNjM0LDIwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIEFzeW5jaHJvbm91cyB1bmxpbmtzIG9mIHJvb3QtaHViIGNvbnRyb2wgVVJCcyBhcmUgbGVnYWwsIGJ1dCB0aGV5Ci0gKiBkb24ndCBkbyBhbnl0aGluZy4gIFN0YXR1cyBVUkIgdW5saW5rcyBtdXN0IGJlIG1hZGUgaW4gcHJvY2VzcyBjb250ZXh0Ci0gKiB3aXRoIGludGVycnVwdHMgZW5hYmxlZC4KKy8qIFVubGlua3Mgb2Ygcm9vdC1odWIgY29udHJvbCBVUkJzIGFyZSBsZWdhbCwgYnV0IHRoZXkgZG9uJ3QgZG8gYW55dGhpbmcKKyAqIHNpbmNlIHRoZXNlIFVSQnMgYWx3YXlzIGV4ZWN1dGUgc3luY2hyb25vdXNseS4KICAqLwogc3RhdGljIGludCB1c2JfcmhfdXJiX2RlcXVldWUgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKIHsKKwl1bnNpZ25lZCBsb25nCWZsYWdzOworCiAJaWYgKHVzYl9waXBlZW5kcG9pbnQodXJiLT5waXBlKSA9PSAwKSB7CS8qIENvbnRyb2wgVVJCICovCi0JCWlmIChpbl9pbnRlcnJ1cHQoKSkKLQkJCXJldHVybiAwOwkJLyogbm90aGluZyB0byBkbyAqLwotCi0JCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CS8qIGZyb20gdXNiX2tpbGxfdXJiICovCi0JCSsrdXJiLT5yZWplY3Q7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKLQotCQl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwKLQkJCQlhdG9taWNfcmVhZCgmdXJiLT51c2VfY291bnQpID09IDApOwotCi0JCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7Ci0JCS0tdXJiLT5yZWplY3Q7Ci0JCXNwaW5fdW5sb2NrX2lycSgmdXJiLT5sb2NrKTsKKwkJOwkvKiBEbyBub3RoaW5nICovCiAKIAl9IGVsc2UgewkJCQkvKiBTdGF0dXMgVVJCICovCiAJCWlmICghaGNkLT51c2VzX25ld19wb2xsaW5nKQotCQkJZGVsX3RpbWVyX3N5bmMgKCZoY2QtPnJoX3RpbWVyKTsKLQkJbG9jYWxfaXJxX2Rpc2FibGUgKCk7CisJCQlkZWxfdGltZXIgKCZoY2QtPnJoX3RpbWVyKTsKKwkJbG9jYWxfaXJxX3NhdmUgKGZsYWdzKTsKIAkJc3Bpbl9sb2NrICgmaGNkX3Jvb3RfaHViX2xvY2spOwogCQlpZiAodXJiID09IGhjZC0+c3RhdHVzX3VyYikgewogCQkJaGNkLT5zdGF0dXNfdXJiID0gTlVMTDsKQEAgLTY2Niw3ICs2NTcsNyBAQAogCQlzcGluX3VubG9jayAoJmhjZF9yb290X2h1Yl9sb2NrKTsKIAkJaWYgKHVyYikKIAkJCXVzYl9oY2RfZ2l2ZWJhY2tfdXJiIChoY2QsIHVyYiwgTlVMTCk7Ci0JCWxvY2FsX2lycV9lbmFibGUgKCk7CisJCWxvY2FsX2lycV9yZXN0b3JlIChmbGFncyk7CiAJfQogCiAJcmV0dXJuIDA7CkBAIC02NzQsMzEgKzY2NSw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIGV4cG9ydGVkIG9ubHkgd2l0aGluIHVzYmNvcmUgKi8KLXN0cnVjdCB1c2JfYnVzICp1c2JfYnVzX2dldChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQotewotCWlmIChidXMpCi0JCWtyZWZfZ2V0KCZidXMtPmtyZWYpOwotCXJldHVybiBidXM7Ci19Ci0KLXN0YXRpYyB2b2lkIHVzYl9ob3N0X3JlbGVhc2Uoc3RydWN0IGtyZWYgKmtyZWYpCi17Ci0Jc3RydWN0IHVzYl9idXMgKmJ1cyA9IGNvbnRhaW5lcl9vZihrcmVmLCBzdHJ1Y3QgdXNiX2J1cywga3JlZik7Ci0KLQlpZiAoYnVzLT5yZWxlYXNlKQotCQlidXMtPnJlbGVhc2UoYnVzKTsKLX0KLQotLyogZXhwb3J0ZWQgb25seSB3aXRoaW4gdXNiY29yZSAqLwotdm9pZCB1c2JfYnVzX3B1dChzdHJ1Y3QgdXNiX2J1cyAqYnVzKQotewotCWlmIChidXMpCi0JCWtyZWZfcHV0KCZidXMtPmtyZWYsIHVzYl9ob3N0X3JlbGVhc2UpOwotfQotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiBzdGF0aWMgc3RydWN0IGNsYXNzICp1c2JfaG9zdF9jbGFzczsKIAogaW50IHVzYl9ob3N0X2luaXQodm9pZCkKQEAgLTczMCwzOSArNjk2LDEyIEBACiAJYnVzLT5kZXZudW1fbmV4dCA9IDE7CiAKIAlidXMtPnJvb3RfaHViID0gTlVMTDsKLQlidXMtPmhjcHJpdiA9IE5VTEw7CiAJYnVzLT5idXNudW0gPSAtMTsKIAlidXMtPmJhbmR3aWR0aF9hbGxvY2F0ZWQgPSAwOwogCWJ1cy0+YmFuZHdpZHRoX2ludF9yZXFzICA9IDA7CiAJYnVzLT5iYW5kd2lkdGhfaXNvY19yZXFzID0gMDsKIAogCUlOSVRfTElTVF9IRUFEICgmYnVzLT5idXNfbGlzdCk7Ci0KLQlrcmVmX2luaXQoJmJ1cy0+a3JlZik7Ci19Ci0KLS8qKgotICogdXNiX2FsbG9jX2J1cyAtIGNyZWF0ZXMgYSBuZXcgVVNCIGhvc3QgY29udHJvbGxlciBzdHJ1Y3R1cmUKLSAqIEBvcDogcG9pbnRlciB0byBhIHN0cnVjdCB1c2Jfb3BlcmF0aW9ucyB0aGF0IHRoaXMgYnVzIHN0cnVjdHVyZSBzaG91bGQgdXNlCi0gKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKLSAqCi0gKiBDcmVhdGVzIGEgVVNCIGhvc3QgY29udHJvbGxlciBidXMgc3RydWN0dXJlIHdpdGggdGhlIHNwZWNpZmllZCAKLSAqIHVzYl9vcGVyYXRpb25zIGFuZCBpbml0aWFsaXplcyBhbGwgdGhlIG5lY2Vzc2FyeSBpbnRlcm5hbCBvYmplY3RzLgotICoKLSAqIElmIG5vIG1lbW9yeSBpcyBhdmFpbGFibGUsIE5VTEwgaXMgcmV0dXJuZWQuCi0gKgotICogVGhlIGNhbGxlciBzaG91bGQgY2FsbCB1c2JfcHV0X2J1cygpIHdoZW4gaXQgaXMgZmluaXNoZWQgd2l0aCB0aGUgc3RydWN0dXJlLgotICovCi1zdHJ1Y3QgdXNiX2J1cyAqdXNiX2FsbG9jX2J1cyAoc3RydWN0IHVzYl9vcGVyYXRpb25zICpvcCkKLXsKLQlzdHJ1Y3QgdXNiX2J1cyAqYnVzOwotCi0JYnVzID0ga3phbGxvYyAoc2l6ZW9mICpidXMsIEdGUF9LRVJORUwpOwotCWlmICghYnVzKQotCQlyZXR1cm4gTlVMTDsKLQl1c2JfYnVzX2luaXQgKGJ1cyk7Ci0JYnVzLT5vcCA9IG9wOwotCXJldHVybiBidXM7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC04OTcsOCArODM2LDcgQEAKIAlzdHJ1Y3QgdXNiX2hjZCAqaGNkOwogCiAJaGNkID0gY29udGFpbmVyX29mIChidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKLQlpZiAoaGNkLT5kcml2ZXItPmh1Yl9pcnFfZW5hYmxlICYmICFoY2QtPnBvbGxfcmggJiYKLQkJCWhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCkKKwlpZiAoaGNkLT5kcml2ZXItPmh1Yl9pcnFfZW5hYmxlICYmIGhjZC0+c3RhdGUgIT0gSENfU1RBVEVfSEFMVCkKIAkJaGNkLT5kcml2ZXItPmh1Yl9pcnFfZW5hYmxlIChoY2QpOwogfQogCkBAIC0xMTEyLDEwICsxMDUwLDEwIEBACiAgKiBleHBlY3RzIHVzYl9zdWJtaXRfdXJiKCkgdG8gaGF2ZSBzYW5pdHkgY2hlY2tlZCBhbmQgY29uZGl0aW9uZWQgYWxsCiAgKiBpbnB1dHMgaW4gdGhlIHVyYgogICovCi1zdGF0aWMgaW50IGhjZF9zdWJtaXRfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGdmcF90IG1lbV9mbGFncykKK2ludCB1c2JfaGNkX3N1Ym1pdF91cmIgKHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQogewogCWludAkJCXN0YXR1czsKLQlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IHVyYi0+ZGV2LT5idXMtPmhjcHJpdjsKKwlzdHJ1Y3QgdXNiX2hjZAkJKmhjZCA9IGJ1c190b19oY2QodXJiLT5kZXYtPmJ1cyk7CiAJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsKIApAQCAtMTE4Niw3ICsxMTI0LDcgQEAKIAkvKiBsb3dlciBsZXZlbCBoY2QgY29kZSBzaG91bGQgdXNlICpfZG1hIGV4Y2x1c2l2ZWx5LAogCSAqIHVubGVzcyBpdCB1c2VzIHBpbyBvciB0YWxrcyB0byBhbm90aGVyIHRyYW5zcG9ydC4KIAkgKi8KLQlpZiAoaGNkLT5zZWxmLmNvbnRyb2xsZXItPmRtYV9tYXNrKSB7CisJaWYgKGhjZC0+c2VsZi51c2VzX2RtYSkgewogCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpCiAJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fU0VUVVBfRE1BX01BUCkpCiAJCQl1cmItPnNldHVwX2RtYSA9IGRtYV9tYXBfc2luZ2xlICgKQEAgLTEyMjEsOSArMTE1OSwxMCBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogY2FsbGVkIGluIGFueSBjb250ZXh0ICovCi1zdGF0aWMgaW50IGhjZF9nZXRfZnJhbWVfbnVtYmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK2ludCB1c2JfaGNkX2dldF9mcmFtZV9udW1iZXIgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotCXN0cnVjdCB1c2JfaGNkCSpoY2QgPSAoc3RydWN0IHVzYl9oY2QgKil1ZGV2LT5idXMtPmhjcHJpdjsKKwlzdHJ1Y3QgdXNiX2hjZAkqaGNkID0gYnVzX3RvX2hjZCh1ZGV2LT5idXMpOworCiAJaWYgKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSkKIAkJcmV0dXJuIC1FU0hVVERPV047CiAJcmV0dXJuIGhjZC0+ZHJpdmVyLT5nZXRfZnJhbWVfbnVtYmVyIChoY2QpOwpAQCAtMTI2Myw3ICsxMjAyLDcgQEAKICAqIGNhbGxlciBndWFyYW50ZWVzIHVyYiB3b24ndCBiZSByZWN5Y2xlZCB0aWxsIGJvdGggdW5saW5rKCkKICAqIGFuZCB0aGUgdXJiJ3MgY29tcGxldGlvbiBmdW5jdGlvbiByZXR1cm4KICAqLwotc3RhdGljIGludCBoY2RfdW5saW5rX3VyYiAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQoraW50IHVzYl9oY2RfdW5saW5rX3VyYiAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKQogewogCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludAkqZXA7CiAJc3RydWN0IHVzYl9oY2QJCQkqaGNkID0gTlVMTDsKQEAgLTEyOTYsNyArMTIzNSw3IEBACiAJc3Bpbl9sb2NrICgmaGNkX2RhdGFfbG9jayk7CiAKIAlzeXMgPSAmdXJiLT5kZXYtPmRldjsKLQloY2QgPSB1cmItPmRldi0+YnVzLT5oY3ByaXY7CisJaGNkID0gYnVzX3RvX2hjZCh1cmItPmRldi0+YnVzKTsKIAlpZiAoaGNkID09IE5VTEwpIHsKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAkJZ290byBkb25lOwpAQCAtMTM1NCw0MSArMTI5MywzMyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyogZGlzYWJsZXMgdGhlIGVuZHBvaW50OiBjYW5jZWxzIGFueSBwZW5kaW5nIHVyYnMsIHRoZW4gc3luY2hyb25pemVzIHdpdGgKLSAqIHRoZSBoY2QgdG8gbWFrZSBzdXJlIGFsbCBlbmRwb2ludCBzdGF0ZSBpcyBnb25lIGZyb20gaGFyZHdhcmUuIHVzZSBmb3IKKyAqIHRoZSBoY2QgdG8gbWFrZSBzdXJlIGFsbCBlbmRwb2ludCBzdGF0ZSBpcyBnb25lIGZyb20gaGFyZHdhcmUsIGFuZCB0aGVuCisgKiB3YWl0cyB1bnRpbCB0aGUgZW5kcG9pbnQncyBxdWV1ZSBpcyBjb21wbGV0ZWx5IGRyYWluZWQuIHVzZSBmb3IKICAqIHNldF9jb25maWd1cmF0aW9uLCBzZXRfaW50ZXJmYWNlLCBkcml2ZXIgcmVtb3ZhbCwgcGh5c2ljYWwgZGlzY29ubmVjdC4KICAqCiAgKiBleGFtcGxlOiAgYSBxaCBzdG9yZWQgaW4gZXAtPmhjcHJpdiwgaG9sZGluZyBzdGF0ZSByZWxhdGVkIHRvIGVuZHBvaW50CiAgKiB0eXBlLCBtYXhwYWNrZXQgc2l6ZSwgdG9nZ2xlLCBoYWx0IHN0YXR1cywgYW5kIHNjaGVkdWxpbmcuCiAgKi8KLXN0YXRpYyB2b2lkCi1oY2RfZW5kcG9pbnRfZGlzYWJsZSAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCit2b2lkIHVzYl9oY2RfZW5kcG9pbnRfZGlzYWJsZSAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCisJCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXApCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2Q7CiAJc3RydWN0IHVyYgkJKnVyYjsKIAotCWhjZCA9IHVkZXYtPmJ1cy0+aGNwcml2OworCWhjZCA9IGJ1c190b19oY2QodWRldi0+YnVzKTsKIAogCVdBUk5fT04gKCFIQ19JU19SVU5OSU5HIChoY2QtPnN0YXRlKSAmJiBoY2QtPnN0YXRlICE9IEhDX1NUQVRFX0hBTFQgJiYKIAkJCXVkZXYtPnN0YXRlICE9IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCk7CiAKIAlsb2NhbF9pcnFfZGlzYWJsZSAoKTsKIAotCS8qIEZJWE1FIG1vdmUgbW9zdCBvZiB0aGlzIGludG8gbWVzc2FnZS5jIGFzIHBhcnQgb2YgaXRzCi0JICogZW5kcG9pbnQgZGlzYWJsZSBsb2dpYwotCSAqLwotCiAJLyogZXAgaXMgYWxyZWFkeSBnb25lIGZyb20gdWRldi0+ZXBfe2luLG91dH1bXTsgbm8gbW9yZSBzdWJtaXRzICovCiByZXNjYW46CiAJc3Bpbl9sb2NrICgmaGNkX2RhdGFfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeSAodXJiLCAmZXAtPnVyYl9saXN0LCB1cmJfbGlzdCkgewogCQlpbnQJdG1wOwogCi0JCS8qIGFub3RoZXIgY3B1IG1heSBiZSBpbiBoY2QsIHNwaW5uaW5nIG9uIGhjZF9kYXRhX2xvY2sKLQkJICogdG8gZ2l2ZWJhY2soKSB0aGlzIHVyYi4gIHRoZSByYWNlcyBoZXJlIHNob3VsZCBiZQotCQkgKiBzbWFsbCwgYnV0IGEgZnVsbCBmaXggbmVlZHMgYSBuZXcgImNhbid0IHN1Ym1pdCIKLQkJICogdXJiIHN0YXRlLgotCQkgKiBGSVhNRSB1cmItPnJlamVjdCBzaG91bGQgYWxsb3cgdGhhdC4uLgotCQkgKi8KKwkJLyogdGhlIHVyYiBtYXkgYWxyZWFkeSBoYXZlIGJlZW4gdW5saW5rZWQgKi8KIAkJaWYgKHVyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykKIAkJCWNvbnRpbnVlOwogCQl1c2JfZ2V0X3VyYiAodXJiKTsKQEAgLTE0MzAsNiArMTM2MSwzMCBAQAogCW1pZ2h0X3NsZWVwICgpOwogCWlmIChoY2QtPmRyaXZlci0+ZW5kcG9pbnRfZGlzYWJsZSkKIAkJaGNkLT5kcml2ZXItPmVuZHBvaW50X2Rpc2FibGUgKGhjZCwgZXApOworCisJLyogV2FpdCB1bnRpbCB0aGUgZW5kcG9pbnQgcXVldWUgaXMgY29tcGxldGVseSBlbXB0eS4gIE1vc3QgSENEcworCSAqIHdpbGwgaGF2ZSBkb25lIHRoaXMgYWxyZWFkeSBpbiB0aGVpciBlbmRwb2ludF9kaXNhYmxlIG1ldGhvZCwKKwkgKiBidXQgc29tZSBtaWdodCBub3QuICBBbmQgdGhlcmUgY291bGQgYmUgcm9vdC1odWIgY29udHJvbCBVUkJzCisJICogc3RpbGwgcGVuZGluZyBzaW5jZSB0aGV5IGFyZW4ndCBhZmZlY3RlZCBieSB0aGUgSENEcycKKwkgKiBlbmRwb2ludF9kaXNhYmxlIG1ldGhvZHMuCisJICovCisJd2hpbGUgKCFsaXN0X2VtcHR5ICgmZXAtPnVyYl9saXN0KSkgeworCQlzcGluX2xvY2tfaXJxICgmaGNkX2RhdGFfbG9jayk7CisKKwkJLyogVGhlIGxpc3QgbWF5IGhhdmUgY2hhbmdlZCB3aGlsZSB3ZSBhY3F1aXJlZCB0aGUgc3BpbmxvY2sgKi8KKwkJdXJiID0gTlVMTDsKKwkJaWYgKCFsaXN0X2VtcHR5ICgmZXAtPnVyYl9saXN0KSkgeworCQkJdXJiID0gbGlzdF9lbnRyeSAoZXAtPnVyYl9saXN0LnByZXYsIHN0cnVjdCB1cmIsCisJCQkJCXVyYl9saXN0KTsKKwkJCXVzYl9nZXRfdXJiICh1cmIpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSAoJmhjZF9kYXRhX2xvY2spOworCisJCWlmICh1cmIpIHsKKwkJCXVzYl9raWxsX3VyYiAodXJiKTsKKwkJCXVzYl9wdXRfdXJiICh1cmIpOworCQl9CisJfQogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtMTQ3Niw1MCArMTQzMSw2IEBACiAJcmV0dXJuIHN0YXR1czsKIH0KIAotLyoKLSAqIHVzYl9oY2Rfc3VzcGVuZF9yb290X2h1YiAtIEhDRCBhdXRvc3VzcGVuZHMgZG93bnN0cmVhbSBwb3J0cwotICogQGhjZDogaG9zdCBjb250cm9sbGVyIGZvciB0aGlzIHJvb3QgaHViCi0gKgotICogVGhpcyBjYWxsIGFycmFuZ2VzIHRoYXQgdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoKSBpcyBzYWZlIHRvIGNhbGwgbGF0ZXI7Ci0gKiB0aGF0IHRoZSBIQ0QncyByb290IGh1YiBwb2xsaW5nIGlzIGRlYWN0aXZhdGVkOyBhbmQgdGhhdCB0aGUgcm9vdCdzIGh1YgotICogZHJpdmVyIGlzIHN1c3BlbmRlZC4gIEhDRHMgbWF5IGNhbGwgdGhpcyB0byBhdXRvc3VzcGVuZCB3aGVuIHRoZWlyIHJvb3QKLSAqIGh1YidzIGRvd25zdHJlYW0gcG9ydHMgYXJlIGFsbCBpbmFjdGl2ZTogIHVucG93ZXJlZCwgZGlzY29ubmVjdGVkLAotICogZGlzYWJsZWQsIG9yIHN1c3BlbmRlZC4KLSAqCi0gKiBUaGUgSENEIHdpbGwgYXV0b3Jlc3VtZSBvbiBkZXZpY2UgY29ubmVjdCBjaGFuZ2UgZGV0ZWN0aW9uICh1c2luZyBTUlAKLSAqIG9yIGEgRCsvRC0gcHVsbHVwKS4gIFRoZSBIQ0QgYWxzbyBhdXRvcmVzdW1lcyBvbiByZW1vdGUgd2FrZXVwIHNpZ25hbGluZwotICogZnJvbSBhbnkgcG9ydHMgdGhhdCBhcmUgc3VzcGVuZGVkIChpZiB0aGF0IGlzIGVuYWJsZWQpLiAgSW4gbW9zdCBjYXNlcywKLSAqIG92ZXJjdXJyZW50IHNpZ25hbGluZyAob24gcG93ZXJlZCBwb3J0cykgd2lsbCBhbHNvIHN0YXJ0IGF1dG9yZXN1bWUuCi0gKgotICogQWx3YXlzIGNhbGxlZCB3aXRoIElSUXMgYmxvY2tlZC4KLSAqLwotdm9pZCB1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIgKHN0cnVjdCB1c2JfaGNkICpoY2QpCi17Ci0Jc3RydWN0IHVyYgkqdXJiOwotCi0Jc3Bpbl9sb2NrICgmaGNkX3Jvb3RfaHViX2xvY2spOwotCXVzYl9zdXNwZW5kX3Jvb3RfaHViIChoY2QtPnNlbGYucm9vdF9odWIpOwotCi0JLyogZm9yY2Ugc3RhdHVzIHVyYiB0byBjb21wbGV0ZS91bmxpbmsgd2hpbGUgc3VzcGVuZGVkICovCi0JaWYgKGhjZC0+c3RhdHVzX3VyYikgewotCQl1cmIgPSBoY2QtPnN0YXR1c191cmI7Ci0JCXVyYi0+c3RhdHVzID0gLUVDT05OUkVTRVQ7Ci0JCXVyYi0+aGNwcml2ID0gTlVMTDsKLQkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKLQotCQlkZWxfdGltZXIgKCZoY2QtPnJoX3RpbWVyKTsKLQkJaGNkLT5wb2xsX3BlbmRpbmcgPSAwOwotCQloY2QtPnN0YXR1c191cmIgPSBOVUxMOwotCX0gZWxzZQotCQl1cmIgPSBOVUxMOwotCXNwaW5fdW5sb2NrICgmaGNkX3Jvb3RfaHViX2xvY2spOwotCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7Ci0KLQlpZiAodXJiKQotCQl1c2JfaGNkX2dpdmViYWNrX3VyYiAoaGNkLCB1cmIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodXNiX2hjZF9zdXNwZW5kX3Jvb3RfaHViKTsKLQogLyoqCiAgKiB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAtIGNhbGxlZCBieSBIQ0QgdG8gcmVzdW1lIGl0cyByb290IGh1YiAKICAqIEBoY2Q6IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1YgpAQCAtMTU4MywyMCArMTQ5NCw2IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qCi0gKiB1c2JfaGNkX29wZXJhdGlvbnMgLSBhZGFwdHMgdXNiX2J1cyBmcmFtZXdvcmsgdG8gSENEIGZyYW1ld29yayAoYnVzIGdsdWUpCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgdXNiX2hjZF9vcGVyYXRpb25zID0gewotCS5nZXRfZnJhbWVfbnVtYmVyID0JaGNkX2dldF9mcmFtZV9udW1iZXIsCi0JLnN1Ym1pdF91cmIgPQkJaGNkX3N1Ym1pdF91cmIsCi0JLnVubGlua191cmIgPQkJaGNkX3VubGlua191cmIsCi0JLmJ1ZmZlcl9hbGxvYyA9CQloY2RfYnVmZmVyX2FsbG9jLAotCS5idWZmZXJfZnJlZSA9CQloY2RfYnVmZmVyX2ZyZWUsCi0JLmRpc2FibGUgPQkJaGNkX2VuZHBvaW50X2Rpc2FibGUsCi19OwotCi0vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCiAvKioKICAqIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiIC0gcmV0dXJuIFVSQiBmcm9tIEhDRCB0byBkZXZpY2UgZHJpdmVyCiAgKiBAaGNkOiBob3N0IGNvbnRyb2xsZXIgcmV0dXJuaW5nIHRoZSBVUkIKQEAgLTE2MTcsOCArMTUxNCw5IEBACiAJYXRfcm9vdF9odWIgPSAodXJiLT5kZXYgPT0gaGNkLT5zZWxmLnJvb3RfaHViKTsKIAl1cmJfdW5saW5rICh1cmIpOwogCi0JLyogbG93ZXIgbGV2ZWwgaGNkIGNvZGUgc2hvdWxkIHVzZSAqX2RtYSBleGNsdXNpdmVseSAqLwotCWlmIChoY2QtPnNlbGYuY29udHJvbGxlci0+ZG1hX21hc2sgJiYgIWF0X3Jvb3RfaHViKSB7CisJLyogbG93ZXIgbGV2ZWwgaGNkIGNvZGUgc2hvdWxkIHVzZSAqX2RtYSBleGNsdXNpdmVseSBpZiB0aGUKKwkgKiBob3N0IGNvbnRyb2xsZXIgZG9lcyBETUEgKi8KKwlpZiAoaGNkLT5zZWxmLnVzZXNfZG1hICYmICFhdF9yb290X2h1YikgewogCQlpZiAodXNiX3BpcGVjb250cm9sICh1cmItPnBpcGUpCiAJCQkmJiAhKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fU0VUVVBfRE1BX01BUCkpCiAJCQlkbWFfdW5tYXBfc2luZ2xlIChoY2QtPnNlbGYuY29udHJvbGxlciwgdXJiLT5zZXR1cF9kbWEsCkBAIC0xNzA0LDE0ICsxNjAyLDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHZvaWQgaGNkX3JlbGVhc2UgKHN0cnVjdCB1c2JfYnVzICpidXMpCi17Ci0Jc3RydWN0IHVzYl9oY2QgKmhjZDsKLQotCWhjZCA9IGNvbnRhaW5lcl9vZihidXMsIHN0cnVjdCB1c2JfaGNkLCBzZWxmKTsKLQlrZnJlZShoY2QpOwotfQotCiAvKioKICAqIHVzYl9jcmVhdGVfaGNkIC0gY3JlYXRlIGFuZCBpbml0aWFsaXplIGFuIEhDRCBzdHJ1Y3R1cmUKICAqIEBkcml2ZXI6IEhDIGRyaXZlciB0aGF0IHdpbGwgdXNlIHRoaXMgaGNkCkBAIC0xNzM2LDEzICsxNjI2LDEyIEBACiAJCXJldHVybiBOVUxMOwogCX0KIAlkZXZfc2V0X2RydmRhdGEoZGV2LCBoY2QpOworCWtyZWZfaW5pdCgmaGNkLT5rcmVmKTsKIAogCXVzYl9idXNfaW5pdCgmaGNkLT5zZWxmKTsKLQloY2QtPnNlbGYub3AgPSAmdXNiX2hjZF9vcGVyYXRpb25zOwotCWhjZC0+c2VsZi5oY3ByaXYgPSBoY2Q7Ci0JaGNkLT5zZWxmLnJlbGVhc2UgPSAmaGNkX3JlbGVhc2U7CiAJaGNkLT5zZWxmLmNvbnRyb2xsZXIgPSBkZXY7CiAJaGNkLT5zZWxmLmJ1c19uYW1lID0gYnVzX25hbWU7CisJaGNkLT5zZWxmLnVzZXNfZG1hID0gKGRldi0+ZG1hX21hc2sgIT0gTlVMTCk7CiAKIAlpbml0X3RpbWVyKCZoY2QtPnJoX3RpbWVyKTsKIAloY2QtPnJoX3RpbWVyLmZ1bmN0aW9uID0gcmhfdGltZXJfZnVuYzsKQEAgLTE3NTYsMTAgKzE2NDUsMjUgQEAKIH0KIEVYUE9SVF9TWU1CT0wgKHVzYl9jcmVhdGVfaGNkKTsKIAorc3RhdGljIHZvaWQgaGNkX3JlbGVhc2UgKHN0cnVjdCBrcmVmICprcmVmKQoreworCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBjb250YWluZXJfb2YgKGtyZWYsIHN0cnVjdCB1c2JfaGNkLCBrcmVmKTsKKworCWtmcmVlKGhjZCk7Cit9CisKK3N0cnVjdCB1c2JfaGNkICp1c2JfZ2V0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlpZiAoaGNkKQorCQlrcmVmX2dldCAoJmhjZC0+a3JlZik7CisJcmV0dXJuIGhjZDsKK30KK0VYUE9SVF9TWU1CT0wgKHVzYl9nZXRfaGNkKTsKKwogdm9pZCB1c2JfcHV0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKLQlkZXZfc2V0X2RydmRhdGEoaGNkLT5zZWxmLmNvbnRyb2xsZXIsIE5VTEwpOwotCXVzYl9idXNfcHV0KCZoY2QtPnNlbGYpOworCWlmIChoY2QpCisJCWtyZWZfcHV0ICgmaGNkLT5rcmVmLCBoY2RfcmVsZWFzZSk7CiB9CiBFWFBPUlRfU1lNQk9MICh1c2JfcHV0X2hjZCk7CiAKQEAgLTE5MTUsNiArMTgxOSwxNiBAQAogfQogRVhQT1JUX1NZTUJPTCAodXNiX3JlbW92ZV9oY2QpOwogCit2b2lkCit1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KTsKKworCWlmIChoY2QtPmRyaXZlci0+c2h1dGRvd24pCisJCWhjZC0+ZHJpdmVyLT5zaHV0ZG93bihoY2QpOworfQorRVhQT1JUX1NZTUJPTCAodXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93bik7CisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTU9OKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmgKaW5kZXggNzAyMmFhZi4uNjc2ODc3YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5oCkBAIC01NSwxMiArNTUsMTMgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RydWN0IHVzYl9oY2QgewkvKiB1c2JfYnVzLmhjcHJpdiBwb2ludHMgdG8gdGhpcyAqLworc3RydWN0IHVzYl9oY2QgewogCiAJLyoKIAkgKiBob3VzZWtlZXBpbmcKIAkgKi8KIAlzdHJ1Y3QgdXNiX2J1cwkJc2VsZjsJCS8qIGhjZCBpcy1hIGJ1cyAqLworCXN0cnVjdCBrcmVmCQlrcmVmOwkJLyogcmVmZXJlbmNlIGNvdW50ZXIgKi8KIAogCWNvbnN0IGNoYXIJCSpwcm9kdWN0X2Rlc2M7CS8qIHByb2R1Y3QvdmVuZG9yIHN0cmluZyAqLwogCWNoYXIJCQlpcnFfZGVzY3JbMjRdOwkvKiBkcml2ZXIgKyBidXMgIyAqLwpAQCAtODUsNiArODYsNyBAQAogCXVuc2lnbmVkCQl1c2VzX25ld19wb2xsaW5nOjE7CiAJdW5zaWduZWQJCXBvbGxfcmg6MTsJLyogcG9sbCBmb3Igcmggc3RhdHVzPyAqLwogCXVuc2lnbmVkCQlwb2xsX3BlbmRpbmc6MTsJLyogc3RhdHVzIGhhcyBjaGFuZ2VkPyAqLworCXVuc2lnbmVkCQl3aXJlbGVzczoxOwkvKiBXaXJlbGVzcyBVU0IgSENEICovCiAKIAlpbnQJCQlpcnE7CQkvKiBpcnEgYWxsb2NhdGVkICovCiAJdm9pZCBfX2lvbWVtCQkqcmVnczsJCS8qIGRldmljZSBtZW1vcnkvaW8gKi8KQEAgLTEyOCw4ICsxMzAsMTAgQEAKIAlyZXR1cm4gJmhjZC0+c2VsZjsKIH0KIAotCi0vLyB1cmIuaGNwcml2IGlzIHJlYWxseSBoYXJkd2FyZS1zcGVjaWZpYworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqYnVzX3RvX2hjZCAoc3RydWN0IHVzYl9idXMgKmJ1cykKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKGJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOworfQogCiBzdHJ1Y3QgaGNkX3RpbWVvdXQgewkvKiB0aW1lb3V0cyB3ZSBhbGxvY2F0ZSAqLwogCXN0cnVjdCBsaXN0X2hlYWQJdGltZW91dF9saXN0OwpAQCAtMTM4LDI4ICsxNDIsNiBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCi0vKgotICogRklYTUUgdXNiX29wZXJhdGlvbnMgc2hvdWxkIHZhbmlzaCBvciBiZWNvbWUgaGNfZHJpdmVyLAotICogd2hlbiB1c2JfYnVzIGFuZCB1c2JfaGNkIGJlY29tZSB0aGUgc2FtZSB0aGluZy4KLSAqLwotCi1zdHJ1Y3QgdXNiX29wZXJhdGlvbnMgewotCWludCAoKmdldF9mcmFtZV9udW1iZXIpIChzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2Rldik7Ci0JaW50ICgqc3VibWl0X3VyYikgKHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKTsKLQlpbnQgKCp1bmxpbmtfdXJiKSAoc3RydWN0IHVyYiAqdXJiLCBpbnQgc3RhdHVzKTsKLQotCS8qIGFsbG9jYXRlIGRtYS1jb25zaXN0ZW50IGJ1ZmZlciBmb3IgVVJCX0RNQV9OT01BUFBJTkcgKi8KLQl2b2lkICooKmJ1ZmZlcl9hbGxvYykoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCi0JCQlnZnBfdCBtZW1fZmxhZ3MsCi0JCQlkbWFfYWRkcl90ICpkbWEpOwotCXZvaWQgKCpidWZmZXJfZnJlZSkoc3RydWN0IHVzYl9idXMgKmJ1cywgc2l6ZV90IHNpemUsCi0JCQl2b2lkICphZGRyLCBkbWFfYWRkcl90IGRtYSk7Ci0KLQl2b2lkICgqZGlzYWJsZSkoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCi0JCQlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwKTsKLX07Ci0KLS8qIGVhY2ggZHJpdmVyIHByb3ZpZGVzIG9uZSBvZiB0aGVzZSwgYW5kIGhhcmR3YXJlIGluaXQgc3VwcG9ydCAqLwogCiBzdHJ1Y3QgcHRfcmVnczsKIApAQCAtMTkyLDYgKzE3NCw5IEBACiAJLyogY2xlYW5seSBtYWtlIEhDRCBzdG9wIHdyaXRpbmcgbWVtb3J5IGFuZCBkb2luZyBJL08gKi8KIAl2b2lkCSgqc3RvcCkgKHN0cnVjdCB1c2JfaGNkICpoY2QpOwogCisJLyogc2h1dGRvd24gSENEICovCisJdm9pZAkoKnNodXRkb3duKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CisKIAkvKiByZXR1cm4gY3VycmVudCBmcmFtZSBudW1iZXIgKi8KIAlpbnQJKCpnZXRfZnJhbWVfbnVtYmVyKSAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiAKQEAgLTIxOCwxNSArMjAzLDI1IEBACiAJCS8qIE5lZWRlZCBvbmx5IGlmIHBvcnQtY2hhbmdlIElSUXMgYXJlIGxldmVsLXRyaWdnZXJlZCAqLwogfTsKIAotZXh0ZXJuIHZvaWQgdXNiX2hjZF9naXZlYmFja191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIGludCB1c2JfaGNkX3N1Ym1pdF91cmIgKHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKTsKK2V4dGVybiBpbnQgdXNiX2hjZF91bmxpbmtfdXJiIChzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpOworZXh0ZXJuIHZvaWQgdXNiX2hjZF9naXZlYmFja191cmIgKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYiwKKwkJc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOworZXh0ZXJuIHZvaWQgdXNiX2hjZF9lbmRwb2ludF9kaXNhYmxlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwKKwkJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcCk7CitleHRlcm4gaW50IHVzYl9oY2RfZ2V0X2ZyYW1lX251bWJlciAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpOwogCiBleHRlcm4gc3RydWN0IHVzYl9oY2QgKnVzYl9jcmVhdGVfaGNkIChjb25zdCBzdHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCiAJCXN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqYnVzX25hbWUpOworZXh0ZXJuIHN0cnVjdCB1c2JfaGNkICp1c2JfZ2V0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gdm9pZCB1c2JfcHV0X2hjZCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gaW50IHVzYl9hZGRfaGNkKHN0cnVjdCB1c2JfaGNkICpoY2QsCiAJCXVuc2lnbmVkIGludCBpcnFudW0sIHVuc2lnbmVkIGxvbmcgaXJxZmxhZ3MpOwogZXh0ZXJuIHZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiAKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2U7CitleHRlcm4gdm9pZCB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIGRldik7CisKICNpZmRlZiBDT05GSUdfUENJCiBzdHJ1Y3QgcGNpX2RldjsKIHN0cnVjdCBwY2lfZGV2aWNlX2lkOwpAQCAtMjM5LDYgKzIzNCw4IEBACiBleHRlcm4gaW50IHVzYl9oY2RfcGNpX3Jlc3VtZSAoc3RydWN0IHBjaV9kZXYgKmRldik7CiAjZW5kaWYgLyogQ09ORklHX1BNICovCiAKK2V4dGVybiB2b2lkIHVzYl9oY2RfcGNpX3NodXRkb3duIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwogI2VuZGlmIC8qIENPTkZJR19QQ0kgKi8KIAogLyogcGNpLWlzaCAocGRldiBudWxsIGlzIG9rKSBidWZmZXIgYWxsb2MvbWFwcGluZyBzdXBwb3J0ICovCkBAIC0zNTIsOCArMzQ5LDYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotZXh0ZXJuIHN0cnVjdCB1c2JfYnVzICp1c2JfYWxsb2NfYnVzIChzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgKik7Ci0KIGV4dGVybiB2b2lkIHVzYl9zZXRfZGV2aWNlX3N0YXRlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAogCQllbnVtIHVzYl9kZXZpY2Vfc3RhdGUgbmV3X3N0YXRlKTsKIApAQCAtMzY1LDkgKzM2MCw2IEBACiBleHRlcm4gc3RydWN0IG11dGV4IHVzYl9idXNfbGlzdF9sb2NrOwogZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90IHVzYl9raWxsX3VyYl9xdWV1ZTsKIAotZXh0ZXJuIHN0cnVjdCB1c2JfYnVzICp1c2JfYnVzX2dldCAoc3RydWN0IHVzYl9idXMgKmJ1cyk7Ci1leHRlcm4gdm9pZCB1c2JfYnVzX3B1dCAoc3RydWN0IHVzYl9idXMgKmJ1cyk7Ci0KIGV4dGVybiB2b2lkIHVzYl9lbmFibGVfcm9vdF9odWJfaXJxIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKIAogZXh0ZXJuIGludCB1c2JfZmluZF9pbnRlcmZhY2VfZHJpdmVyIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LApAQCAtMzc2LDE3ICszNjgsMTEgQEAKICNkZWZpbmUgdXNiX2VuZHBvaW50X291dChlcF9kaXIpCSghKChlcF9kaXIpICYgVVNCX0RJUl9JTikpCiAKICNpZmRlZiBDT05GSUdfUE0KLWV4dGVybiB2b2lkIHVzYl9oY2Rfc3VzcGVuZF9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YiAoc3RydWN0IHVzYl9oY2QgKmhjZCk7CiBleHRlcm4gdm9pZCB1c2Jfcm9vdF9odWJfbG9zdF9wb3dlciAoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2KTsKIGV4dGVybiBpbnQgaGNkX2J1c19zdXNwZW5kIChzdHJ1Y3QgdXNiX2J1cyAqYnVzKTsKIGV4dGVybiBpbnQgaGNkX2J1c19yZXN1bWUgKHN0cnVjdCB1c2JfYnVzICpidXMpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIoc3RydWN0IHVzYl9oY2QgKmhjZCkKLXsKLQlyZXR1cm47Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCB1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewogCXJldHVybjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCmluZGV4IDI2YzhjYjUuLjc2NzY2OTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwpAQCAtMjkzLDcgKzI5Myw3IEBACiAvKiBjb21wbGV0aW9uIGZ1bmN0aW9uLCBmaXJlcyBvbiBwb3J0IHN0YXR1cyBjaGFuZ2VzIGFuZCB2YXJpb3VzIGZhdWx0cyAqLwogc3RhdGljIHZvaWQgaHViX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN0cnVjdCB1c2JfaHViICpodWIgPSAoc3RydWN0IHVzYl9odWIgKil1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9odWIgKmh1YiA9IHVyYi0+Y29udGV4dDsKIAlpbnQgc3RhdHVzOwogCWludCBpOwogCXVuc2lnbmVkIGxvbmcgYml0czsKQEAgLTMxMSw3ICszMTEsNyBAQAogCQkJZ290byByZXN1Ym1pdDsKIAkJaHViLT5lcnJvciA9IHVyYi0+c3RhdHVzOwogCQkvKiBGQUxMIFRIUk9VR0ggKi8KLQkKKwogCS8qIGxldCBraHViZCBoYW5kbGUgdGhpbmdzICovCiAJY2FzZSAwOgkJCS8qIHdlIGdvdCBkYXRhOiAgcG9ydCBzdGF0dXMgY2hhbmdlZCAqLwogCQliaXRzID0gMDsKQEAgLTQ1MiwxOCArNDUyLDE0IEBACiAJbXNsZWVwKG1heChwZ29vZF9kZWxheSwgKHVuc2lnbmVkKSAxMDApKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIF9faHViX3F1aWVzY2Uoc3RydWN0IHVzYl9odWIgKmh1YikKK3N0YXRpYyB2b2lkIGh1Yl9xdWllc2NlKHN0cnVjdCB1c2JfaHViICpodWIpCiB7CiAJLyogKG5vbmJsb2NraW5nKSBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSB3b24ndCByZS10cmlnZ2VyICovCiAJaHViLT5xdWllc2NpbmcgPSAxOwogCWh1Yi0+YWN0aXZhdGluZyA9IDA7CiAJaHViLT5yZXN1bWVfcm9vdF9odWIgPSAwOwotfQogCi1zdGF0aWMgdm9pZCBodWJfcXVpZXNjZShzdHJ1Y3QgdXNiX2h1YiAqaHViKQotewogCS8qIChibG9ja2luZykgc3RvcCBraHViZCBhbmQgcmVsYXRlZCBhY3Rpdml0eSAqLwotCV9faHViX3F1aWVzY2UoaHViKTsKIAl1c2Jfa2lsbF91cmIoaHViLT51cmIpOwogCWlmIChodWItPmhhc19pbmRpY2F0b3JzKQogCQljYW5jZWxfZGVsYXllZF93b3JrKCZodWItPmxlZHMpOwpAQCAtODY4LDEzICs4NjQsOCBAQAogCiAJZW5kcG9pbnQgPSAmZGVzYy0+ZW5kcG9pbnRbMF0uZGVzYzsKIAotCS8qIE91dHB1dCBlbmRwb2ludD8gQ3VyaW91c2VyIGFuZCBjdXJpb3VzZXIuLiAqLwotCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpCi0JCWdvdG8gZGVzY3JpcHRvcl9lcnJvcjsKLQotCS8qIElmIGl0J3Mgbm90IGFuIGludGVycnVwdCBlbmRwb2ludCwgd2UnZCBiZXR0ZXIgcHVudCEgKi8KLQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCSE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkKKwkvKiBJZiBpdCdzIG5vdCBhbiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQsIHdlJ2QgYmV0dGVyIHB1bnQhICovCisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkKIAkJZ290byBkZXNjcmlwdG9yX2Vycm9yOwogCiAJLyogV2UgZm91bmQgYSBodWIgKi8KQEAgLTEwMjIsMjYgKzEwMTMsMjkgQEAKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKQogCQk7CS8qIGRvIG5vdGhpbmcgKi8KIAllbHNlIGlmIChuZXdfc3RhdGUgIT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7Ci0JCXVkZXYtPnN0YXRlID0gbmV3X3N0YXRlOwogCiAJCS8qIHJvb3QgaHViIHdha2V1cCBjYXBhYmlsaXRpZXMgYXJlIG1hbmFnZWQgb3V0LW9mLWJhbmQKIAkJICogYW5kIG1heSBpbnZvbHZlIHNpbGljb24gZXJyYXRhIC4uLiBpZ25vcmUgdGhlbSBoZXJlLgogCQkgKi8KIAkJaWYgKHVkZXYtPnBhcmVudCkgewotCQkJaWYgKG5ld19zdGF0ZSA9PSBVU0JfU1RBVEVfQ09ORklHVVJFRCkKKwkJCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVECisJCQkJCXx8IG5ld19zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJCTsJLyogTm8gY2hhbmdlIHRvIHdha2V1cCBzZXR0aW5ncyAqLworCQkJZWxzZSBpZiAobmV3X3N0YXRlID09IFVTQl9TVEFURV9DT05GSUdVUkVEKQogCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LAogCQkJCQkodWRldi0+YWN0Y29uZmlnLT5kZXNjLmJtQXR0cmlidXRlcwogCQkJCQkgJiBVU0JfQ09ORklHX0FUVF9XQUtFVVApKTsKLQkJCWVsc2UgaWYgKG5ld19zdGF0ZSAhPSBVU0JfU1RBVEVfU1VTUEVOREVEKQorCQkJZWxzZQogCQkJCWRldmljZV9pbml0X3dha2V1cCgmdWRldi0+ZGV2LCAwKTsKIAkJfQorCQl1ZGV2LT5zdGF0ZSA9IG5ld19zdGF0ZTsKIAl9IGVsc2UKIAkJcmVjdXJzaXZlbHlfbWFya19OT1RBVFRBQ0hFRCh1ZGV2KTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXZpY2Vfc3RhdGVfbG9jaywgZmxhZ3MpOwogfQogCiAKLSNpZmRlZiBDT05GSUdfUE0KKyNpZmRlZglDT05GSUdfUE0KIAogLyoqCiAgKiB1c2Jfcm9vdF9odWJfbG9zdF9wb3dlciAtIGNhbGxlZCBieSBIQ0QgaWYgdGhlIHJvb3QgaHViIGxvc3QgVmJ1cyBwb3dlcgpAQCAtMTA1OSw2ICsxMDUzLDEyIEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWRldl93YXJuKCZyaGRldi0+ZGV2LCAicm9vdCBodWIgbG9zdCBwb3dlciBvciB3YXMgcmVzZXRcbiIpOworCisJLyogTWFrZSBzdXJlIG5vIHBvdGVudGlhbCB3YWtldXAgZXZlbnRzIGdldCBsb3N0LAorCSAqIGJ5IGZvcmNpbmcgdGhlIHJvb3QgaHViIHRvIGJlIHJlc3VtZWQuCisJICovCisJcmhkZXYtPmRldi5wb3dlci5wcmV2X3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfT047CisKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2aWNlX3N0YXRlX2xvY2ssIGZsYWdzKTsKIAlodWIgPSBoZGV2X3RvX2h1YihyaGRldik7CiAJZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IHJoZGV2LT5tYXhjaGlsZDsgKytwb3J0MSkgewpAQCAtMTA3Miw3ICsxMDcyLDcgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHVzYl9yb290X2h1Yl9sb3N0X3Bvd2VyKTsKIAotI2VuZGlmCisjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIHN0YXRpYyB2b2lkIGNob29zZV9hZGRyZXNzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewpAQCAtMTE0OCwxNDQgKzExNDgsMjggQEAKIAkgKiBjbGVhbmluZyB1cCBhbGwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24KIAkgKiBzbyB0aGF0IHRoZSBoYXJkd2FyZSBpcyBub3cgZnVsbHkgcXVpZXNjZWQuCiAJICovCisJZGV2X2RiZyAoJnVkZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAl1c2JfZGlzYWJsZV9kZXZpY2UodWRldiwgMCk7CiAKLQl1c2Jfbm90aWZ5X3JlbW92ZV9kZXZpY2UodWRldik7CisJdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAKLQkvKiBGcmVlIHRoZSBkZXZpY2UgbnVtYmVyLCByZW1vdmUgdGhlIC9wcm9jL2J1cy91c2IgZW50cnkgYW5kCi0JICogdGhlIHN5c2ZzIGF0dHJpYnV0ZXMsIGFuZCBkZWxldGUgdGhlIHBhcmVudCdzIGNoaWxkcmVuW10KKwkvKiBVbnJlZ2lzdGVyIHRoZSBkZXZpY2UuICBUaGUgZGV2aWNlIGRyaXZlciBpcyByZXNwb25zaWJsZQorCSAqIGZvciByZW1vdmluZyB0aGUgZGV2aWNlIGZpbGVzIGZyb20gdXNiZnMgYW5kIHN5c2ZzIGFuZCBmb3IKKwkgKiBkZS1jb25maWd1cmluZyB0aGUgZGV2aWNlLgorCSAqLworCWRldmljZV9kZWwoJnVkZXYtPmRldik7CisKKwkvKiBGcmVlIHRoZSBkZXZpY2UgbnVtYmVyIGFuZCBkZWxldGUgdGhlIHBhcmVudCdzIGNoaWxkcmVuW10KIAkgKiAob3Igcm9vdF9odWIpIHBvaW50ZXIuCiAJICovCi0JZGV2X2RiZyAoJnVkZXYtPmRldiwgInVucmVnaXN0ZXJpbmcgZGV2aWNlXG4iKTsKIAlyZWxlYXNlX2FkZHJlc3ModWRldik7Ci0JdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXModWRldik7CiAKIAkvKiBBdm9pZCByYWNlcyB3aXRoIHJlY3Vyc2l2ZWx5X21hcmtfTk9UQVRUQUNIRUQoKSAqLwogCXNwaW5fbG9ja19pcnEoJmRldmljZV9zdGF0ZV9sb2NrKTsKIAkqcGRldiA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxKCZkZXZpY2Vfc3RhdGVfbG9jayk7CiAKLQl1c2JfdW5sb2NrX2RldmljZSh1ZGV2KTsKLQotCWRldmljZV91bnJlZ2lzdGVyKCZ1ZGV2LT5kZXYpOwotfQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnBsdXJhbChpbnQgbikKLXsKLQlyZXR1cm4gKG4gPT0gMSA/ICIiIDogInMiKTsKLX0KLQotc3RhdGljIGludCBjaG9vc2VfY29uZmlndXJhdGlvbihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKLXsKLQlpbnQgaTsKLQlpbnQgbnVtX2NvbmZpZ3M7Ci0JaW50IGluc3VmZmljaWVudF9wb3dlciA9IDA7Ci0Jc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqYywgKmJlc3Q7Ci0KLQliZXN0ID0gTlVMTDsKLQljID0gdWRldi0+Y29uZmlnOwotCW51bV9jb25maWdzID0gdWRldi0+ZGVzY3JpcHRvci5iTnVtQ29uZmlndXJhdGlvbnM7Ci0JZm9yIChpID0gMDsgaSA8IG51bV9jb25maWdzOyAoaSsrLCBjKyspKSB7Ci0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IJKmRlc2MgPSBOVUxMOwotCi0JCS8qIEl0J3MgcG9zc2libGUgdGhhdCBhIGNvbmZpZyBoYXMgbm8gaW50ZXJmYWNlcyEgKi8KLQkJaWYgKGMtPmRlc2MuYk51bUludGVyZmFjZXMgPiAwKQotCQkJZGVzYyA9ICZjLT5pbnRmX2NhY2hlWzBdLT5hbHRzZXR0aW5nLT5kZXNjOwotCi0JCS8qCi0JCSAqIEhQJ3MgVVNCIGJ1cy1wb3dlcmVkIGtleWJvYXJkIGhhcyBvbmx5IG9uZSBjb25maWd1cmF0aW9uCi0JCSAqIGFuZCBpdCBjbGFpbXMgdG8gYmUgc2VsZi1wb3dlcmVkOyBvdGhlciBkZXZpY2VzIG1heSBoYXZlCi0JCSAqIHNpbWlsYXIgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3JzLiAgSWYgdGhlIG5leHQgdGVzdAotCQkgKiB3ZXJlIGFsbG93ZWQgdG8gZXhlY3V0ZSwgc3VjaCBjb25maWd1cmF0aW9ucyB3b3VsZCBhbHdheXMKLQkJICogYmUgcmVqZWN0ZWQgYW5kIHRoZSBkZXZpY2VzIHdvdWxkIG5vdCB3b3JrIGFzIGV4cGVjdGVkLgotCQkgKiBJbiB0aGUgbWVhbnRpbWUsIHdlIHJ1biB0aGUgcmlzayBvZiBzZWxlY3RpbmcgYSBjb25maWcKLQkJICogdGhhdCByZXF1aXJlcyBleHRlcm5hbCBwb3dlciBhdCBhIHRpbWUgd2hlbiB0aGF0IHBvd2VyCi0JCSAqIGlzbid0IGF2YWlsYWJsZS4gIEl0IHNlZW1zIHRvIGJlIHRoZSBsZXNzZXIgb2YgdHdvIGV2aWxzLgotCQkgKgotCQkgKiBCdWd6aWxsYSAjNjQ0OCByZXBvcnRzIGEgZGV2aWNlIHRoYXQgYXBwZWFycyB0byBjcmFzaAotCQkgKiB3aGVuIGl0IHJlY2VpdmVzIGEgR0VUX0RFVklDRV9TVEFUVVMgcmVxdWVzdCEgIFdlIGRvbid0Ci0JCSAqIGhhdmUgYW55IG90aGVyIHdheSB0byB0ZWxsIHdoZXRoZXIgYSBkZXZpY2UgaXMgc2VsZi1wb3dlcmVkLAotCQkgKiBidXQgc2luY2Ugd2UgZG9uJ3QgdXNlIHRoYXQgaW5mb3JtYXRpb24gYW55d2hlcmUgYnV0IGhlcmUsCi0JCSAqIHRoZSBjYWxsIGhhcyBiZWVuIHJlbW92ZWQuCi0JCSAqCi0JCSAqIE1heWJlIHRoZSBHRVRfREVWSUNFX1NUQVRVUyBjYWxsIGFuZCB0aGUgdGVzdCBiZWxvdyBjYW4KLQkJICogYmUgcmVpbnN0YXRlZCB3aGVuIGRldmljZSBmaXJtd2FyZXMgYmVjb21lIG1vcmUgcmVsaWFibGUuCi0JCSAqIERvbid0IGhvbGQgeW91ciBicmVhdGguCi0JCSAqLwotI2lmIDAKLQkJLyogUnVsZSBvdXQgc2VsZi1wb3dlcmVkIGNvbmZpZ3MgZm9yIGEgYnVzLXBvd2VyZWQgZGV2aWNlICovCi0JCWlmIChidXNfcG93ZXJlZCAmJiAoYy0+ZGVzYy5ibUF0dHJpYnV0ZXMgJgotCQkJCQlVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIpKQotCQkJY29udGludWU7Ci0jZW5kaWYKLQotCQkvKgotCQkgKiBUaGUgbmV4dCB0ZXN0IG1heSBub3QgYmUgYXMgZWZmZWN0aXZlIGFzIGl0IHNob3VsZCBiZS4KLQkJICogU29tZSBodWJzIGhhdmUgZXJyb3JzIGluIHRoZWlyIGRlc2NyaXB0b3IsIGNsYWltaW5nCi0JCSAqIHRvIGJlIHNlbGYtcG93ZXJlZCB3aGVuIHRoZXkgYXJlIHJlYWxseSBidXMtcG93ZXJlZC4KLQkJICogV2Ugd2lsbCBvdmVyZXN0aW1hdGUgdGhlIGFtb3VudCBvZiBjdXJyZW50IHN1Y2ggaHVicwotCQkgKiBtYWtlIGF2YWlsYWJsZSBmb3IgZWFjaCBwb3J0LgotCQkgKgotCQkgKiBUaGlzIGlzIGEgZmFpcmx5IGJlbmlnbiBzb3J0IG9mIGZhaWx1cmUuICBJdCB3b24ndAotCQkgKiBjYXVzZSB1cyB0byByZWplY3QgY29uZmlndXJhdGlvbnMgdGhhdCB3ZSBzaG91bGQgaGF2ZQotCQkgKiBhY2NlcHRlZC4KLQkJICovCi0KLQkJLyogUnVsZSBvdXQgY29uZmlncyB0aGF0IGRyYXcgdG9vIG11Y2ggYnVzIGN1cnJlbnQgKi8KLQkJaWYgKGMtPmRlc2MuYk1heFBvd2VyICogMiA+IHVkZXYtPmJ1c19tQSkgewotCQkJaW5zdWZmaWNpZW50X3Bvd2VyKys7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIElmIHRoZSBmaXJzdCBjb25maWcncyBmaXJzdCBpbnRlcmZhY2UgaXMgQ09NTS8yLzB4ZmYKLQkJICogKE1TRlQgUk5ESVMpLCBydWxlIGl0IG91dCB1bmxlc3MgTGludXggaGFzIGhvc3Qtc2lkZQotCQkgKiBSTkRJUyBzdXBwb3J0LiAqLwotCQlpZiAoaSA9PSAwICYmIGRlc2MKLQkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgPT0gVVNCX0NMQVNTX0NPTU0KLQkJCQkmJiBkZXNjLT5iSW50ZXJmYWNlU3ViQ2xhc3MgPT0gMgotCQkJCSYmIGRlc2MtPmJJbnRlcmZhY2VQcm90b2NvbCA9PSAweGZmKSB7Ci0jaWZuZGVmIENPTkZJR19VU0JfTkVUX1JORElTX0hPU1QKLQkJCWNvbnRpbnVlOwotI2Vsc2UKLQkJCWJlc3QgPSBjOwotI2VuZGlmCi0JCX0KLQotCQkvKiBGcm9tIHRoZSByZW1haW5pbmcgY29uZmlncywgY2hvb3NlIHRoZSBmaXJzdCBvbmUgd2hvc2UKLQkJICogZmlyc3QgaW50ZXJmYWNlIGlzIGZvciBhIG5vbi12ZW5kb3Itc3BlY2lmaWMgY2xhc3MuCi0JCSAqIFJlYXNvbjogTGludXggaXMgbW9yZSBsaWtlbHkgdG8gaGF2ZSBhIGNsYXNzIGRyaXZlcgotCQkgKiB0aGFuIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlci4gKi8KLQkJZWxzZSBpZiAodWRldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MgIT0KLQkJCQkJCVVTQl9DTEFTU19WRU5ET1JfU1BFQyAmJgotCQkJCSghZGVzYyB8fCBkZXNjLT5iSW50ZXJmYWNlQ2xhc3MgIT0KLQkJCQkJCVVTQl9DTEFTU19WRU5ET1JfU1BFQykpIHsKLQkJCWJlc3QgPSBjOwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBJZiBhbGwgdGhlIHJlbWFpbmluZyBjb25maWdzIGFyZSB2ZW5kb3Itc3BlY2lmaWMsCi0JCSAqIGNob29zZSB0aGUgZmlyc3Qgb25lLiAqLwotCQllbHNlIGlmICghYmVzdCkKLQkJCWJlc3QgPSBjOwotCX0KLQotCWlmIChpbnN1ZmZpY2llbnRfcG93ZXIgPiAwKQotCQlkZXZfaW5mbygmdWRldi0+ZGV2LCAicmVqZWN0ZWQgJWQgY29uZmlndXJhdGlvbiVzICIKLQkJCSJkdWUgdG8gaW5zdWZmaWNpZW50IGF2YWlsYWJsZSBidXMgcG93ZXJcbiIsCi0JCQlpbnN1ZmZpY2llbnRfcG93ZXIsIHBsdXJhbChpbnN1ZmZpY2llbnRfcG93ZXIpKTsKLQotCWlmIChiZXN0KSB7Ci0JCWkgPSBiZXN0LT5kZXNjLmJDb25maWd1cmF0aW9uVmFsdWU7Ci0JCWRldl9pbmZvKCZ1ZGV2LT5kZXYsCi0JCQkiY29uZmlndXJhdGlvbiAjJWQgY2hvc2VuIGZyb20gJWQgY2hvaWNlJXNcbiIsCi0JCQlpLCBudW1fY29uZmlncywgcGx1cmFsKG51bV9jb25maWdzKSk7Ci0JfSBlbHNlIHsKLQkJaSA9IC0xOwotCQlkZXZfd2FybigmdWRldi0+ZGV2LAotCQkJIm5vIGNvbmZpZ3VyYXRpb24gY2hvc2VuIGZyb20gJWQgY2hvaWNlJXNcbiIsCi0JCQludW1fY29uZmlncywgcGx1cmFsKG51bV9jb25maWdzKSk7Ci0JfQotCXJldHVybiBpOworCXB1dF9kZXZpY2UoJnVkZXYtPmRldik7CiB9CiAKICNpZmRlZiBERUJVRwpAQCAtMTMyOCw3ICsxMjEyLDYgQEAKIGludCB1c2JfbmV3X2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQgZXJyOwotCWludCBjOwogCiAJZXJyID0gdXNiX2dldF9jb25maWd1cmF0aW9uKHVkZXYpOwogCWlmIChlcnIgPCAwKSB7CkBAIC0xMzcxLDggKzEyNTQsNyBAQAogCQkJCQlVU0JfRFRfT1RHLCAodm9pZCAqKikgJmRlc2MpID09IDApIHsKIAkJCWlmIChkZXNjLT5ibUF0dHJpYnV0ZXMgJiBVU0JfT1RHX0hOUCkgewogCQkJCXVuc2lnbmVkCQlwb3J0MSA9IHVkZXYtPnBvcnRudW07Ci0JCQkJc3RydWN0IHVzYl9kZXZpY2UJKnJvb3QgPSB1ZGV2LT5wYXJlbnQ7Ci0JCQkJCisKIAkJCQlkZXZfaW5mbygmdWRldi0+ZGV2LAogCQkJCQkiRHVhbC1Sb2xlIE9URyBkZXZpY2Ugb24gJXNITlAgcG9ydFxuIiwKIAkJCQkJKHBvcnQxID09IGJ1cy0+b3RnX3BvcnQpCkBAIC0xNDA3LDkgKzEyODksOSBAQAogCQkgKiAoSW5jbHVkZXMgSE5QIHRlc3QgZGV2aWNlLikKIAkJICovCiAJCWlmICh1ZGV2LT5idXMtPmJfaG5wX2VuYWJsZSB8fCB1ZGV2LT5idXMtPmlzX2JfaG9zdCkgewotCQkJc3RhdGljIGludCBfX3VzYl9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqLAorCQkJc3RhdGljIGludCBfX3VzYl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKiwKIAkJCQkJCWludCBwb3J0MSk7Ci0JCQllcnIgPSBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCB1ZGV2LT5idXMtPm90Z19wb3J0KTsKKwkJCWVyciA9IF9fdXNiX3BvcnRfc3VzcGVuZCh1ZGV2LCB1ZGV2LT5idXMtPm90Z19wb3J0KTsKIAkJCWlmIChlcnIgPCAwKQogCQkJCWRldl9kYmcoJnVkZXYtPmRldiwgIkhOUCBmYWlsLCAlZFxuIiwgZXJyKTsKIAkJfQpAQCAtMTQxOCwzNCArMTMwMCwxNSBAQAogCX0KICNlbmRpZgogCi0JLyogcHV0IGRldmljZS1zcGVjaWZpYyBmaWxlcyBpbnRvIHN5c2ZzICovCisJLyogUmVnaXN0ZXIgdGhlIGRldmljZS4gIFRoZSBkZXZpY2UgZHJpdmVyIGlzIHJlc3BvbnNpYmxlCisJICogZm9yIGFkZGluZyB0aGUgZGV2aWNlIGZpbGVzIHRvIHVzYmZzIGFuZCBzeXNmcyBhbmQgZm9yCisJICogY29uZmlndXJpbmcgdGhlIGRldmljZS4KKwkgKi8KIAllcnIgPSBkZXZpY2VfYWRkICgmdWRldi0+ZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoJnVkZXYtPmRldiwgImNhbid0IGRldmljZV9hZGQsIGVycm9yICVkXG4iLCBlcnIpOwogCQlnb3RvIGZhaWw7CiAJfQotCXVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzICh1ZGV2KTsKLQotCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKLQotCS8qIGNob29zZSBhbmQgc2V0IHRoZSBjb25maWd1cmF0aW9uLiB0aGF0IHJlZ2lzdGVycyB0aGUgaW50ZXJmYWNlcwotCSAqIHdpdGggdGhlIGRyaXZlciBjb3JlLCBhbmQgbGV0cyB1c2IgZGV2aWNlIGRyaXZlcnMgYmluZCB0byB0aGVtLgotCSAqLwotCWMgPSBjaG9vc2VfY29uZmlndXJhdGlvbih1ZGV2KTsKLQlpZiAoYyA+PSAwKSB7Ci0JCWVyciA9IHVzYl9zZXRfY29uZmlndXJhdGlvbih1ZGV2LCBjKTsKLQkJaWYgKGVycikgewotCQkJZGV2X2VycigmdWRldi0+ZGV2LCAiY2FuJ3Qgc2V0IGNvbmZpZyAjJWQsIGVycm9yICVkXG4iLAotCQkJCQljLCBlcnIpOwotCQkJLyogVGhpcyBuZWVkIG5vdCBiZSBmYXRhbC4gIFRoZSB1c2VyIGNhbiB0cnkgdG8KLQkJCSAqIHNldCBvdGhlciBjb25maWd1cmF0aW9ucy4gKi8KLQkJfQotCX0KLQotCS8qIFVTQiBkZXZpY2Ugc3RhdGUgPT0gY29uZmlndXJlZCAuLi4gdXNhYmxlICovCi0JdXNiX25vdGlmeV9hZGRfZGV2aWNlKHVkZXYpOwotCi0JdXNiX3VubG9ja19kZXZpY2UodWRldik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTQ3Miw2ICsxMzM1LDE4IEBACiAJcmV0dXJuIHJldDsKIH0KIAorCisvKiBSZXR1cm5zIDEgaWYgQGh1YiBpcyBhIFdVU0Igcm9vdCBodWIsIDAgb3RoZXJ3aXNlICovCitzdGF0aWMgdW5zaWduZWQgaHViX2lzX3d1c2Ioc3RydWN0IHVzYl9odWIgKmh1YikKK3sKKwlzdHJ1Y3QgdXNiX2hjZCAqaGNkOworCWlmIChodWItPmhkZXYtPnBhcmVudCAhPSBOVUxMKSAgLyogbm90IGEgcm9vdCBodWI/ICovCisJCXJldHVybiAwOworCWhjZCA9IGNvbnRhaW5lcl9vZihodWItPmhkZXYtPmJ1cywgc3RydWN0IHVzYl9oY2QsIHNlbGYpOworCXJldHVybiBoY2QtPndpcmVsZXNzOworfQorCisKICNkZWZpbmUgUE9SVF9SRVNFVF9UUklFUwk1CiAjZGVmaW5lIFNFVF9BRERSRVNTX1RSSUVTCTIKICNkZWZpbmUgR0VUX0RFU0NSSVBUT1JfVFJJRVMJMgpAQCAtMTUxMiw3ICsxMzg3LDkgQEAKIAkJLyogaWYgd2VgdmUgZmluaXNoZWQgcmVzZXR0aW5nLCB0aGVuIGJyZWFrIG91dCBvZiB0aGUgbG9vcCAqLwogCQlpZiAoIShwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9SRVNFVCkgJiYKIAkJICAgIChwb3J0c3RhdHVzICYgVVNCX1BPUlRfU1RBVF9FTkFCTEUpKSB7Ci0JCQlpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCkKKwkJCWlmIChodWJfaXNfd3VzYihodWIpKQorCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX1ZBUklBQkxFOworCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfSElHSF9TUEVFRCkKIAkJCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9ISUdIOwogCQkJZWxzZSBpZiAocG9ydHN0YXR1cyAmIFVTQl9QT1JUX1NUQVRfTE9XX1NQRUVEKQogCQkJCXVkZXYtPnNwZWVkID0gVVNCX1NQRUVEX0xPVzsKQEAgLTE2MDcsNiArMTQ4NCw3IEBACiAgCWtpY2tfa2h1YmQoaHViKTsKIH0KIAorI2lmZGVmCUNPTkZJR19QTQogCiAjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECiAKQEAgLTE2MzMsNyArMTUxMSw3IEBACiAJICogTk9URTogIE9URyBkZXZpY2VzIG1heSBpc3N1ZSByZW1vdGUgd2FrZXVwIChvciBTUlApIGV2ZW4gd2hlbgogCSAqIHdlIGRvbid0IGV4cGxpY2l0bHkgZW5hYmxlIGl0IGhlcmUuCiAJICovCi0JaWYgKGRldmljZV9tYXlfd2FrZXVwKCZ1ZGV2LT5kZXYpKSB7CisJaWYgKHVkZXYtPmRvX3JlbW90ZV93YWtldXApIHsKIAkJc3RhdHVzID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKIAkJCQlVU0JfUkVRX1NFVF9GRUFUVVJFLCBVU0JfUkVDSVBfREVWSUNFLAogCQkJCVVTQl9ERVZJQ0VfUkVNT1RFX1dBS0VVUCwgMCwKQEAgLTE2NTksNyArMTUzNyw4IEBACiAJCQkJVVNCX0NUUkxfU0VUX1RJTUVPVVQpOwogCX0gZWxzZSB7CiAJCS8qIGRldmljZSBoYXMgdXAgdG8gMTAgbXNlYyB0byBmdWxseSBzdXNwZW5kICovCi0JCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiBzdXNwZW5kXG4iKTsKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiICVzc3VzcGVuZFxuIiwKKwkJCQl1ZGV2LT5hdXRvX3BtID8gImF1dG8tIiA6ICIiKTsKIAkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX1NVU1BFTkRFRCk7CiAJCW1zbGVlcCgxMCk7CiAJfQpAQCAtMTY4NCw3ICsxNTYzLDcgQEAKICAqIHRoZSByb290IGh1YiBmb3IgdGhlaXIgYnVzIGdvZXMgaW50byBnbG9iYWwgc3VzcGVuZCAuLi4gc28gd2UgZG9uJ3QKICAqIChmYWxzZWx5KSB1cGRhdGUgdGhlIGRldmljZSBwb3dlciBzdGF0ZSB0byBzYXkgaXQgc3VzcGVuZGVkLgogICovCi1zdGF0aWMgaW50IF9fdXNiX3N1c3BlbmRfZGV2aWNlIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IHBvcnQxKQorc3RhdGljIGludCBfX3VzYl9wb3J0X3N1c3BlbmQgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgcG9ydDEpCiB7CiAJaW50CXN0YXR1cyA9IDA7CiAKQEAgLTE2OTIsNDkgKzE1NzEsMjkgQEAKIAlpZiAocG9ydDEgPCAwKQogCQlyZXR1cm4gcG9ydDE7CiAKLQlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRAotCQkJfHwgdWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX05PVEFUVEFDSEVEKSB7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIGFsbCBpbnRlcmZhY2VzIG11c3QgYWxyZWFkeSBiZSBzdXNwZW5kZWQgKi8KLQlpZiAodWRldi0+YWN0Y29uZmlnKSB7Ci0JCWludAlpOwotCi0JCWZvciAoaSA9IDA7IGkgPCB1ZGV2LT5hY3Rjb25maWctPmRlc2MuYk51bUludGVyZmFjZXM7IGkrKykgewotCQkJc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0KLQkJCWludGYgPSB1ZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVtpXTsKLQkJCWlmIChpc19hY3RpdmUoaW50ZikpIHsKLQkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJueWV0IHN1c3BlbmRlZFxuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0KLQkJfQotCX0KLQotCS8qIHdlIG9ubHkgY2hhbmdlIGEgZGV2aWNlJ3MgdXBzdHJlYW0gVVNCIGxpbmsuCi0JICogcm9vdCBodWJzIGhhdmUgbm8gdXBzdHJlYW0gVVNCIGxpbmsuCisJLyogd2UgY2hhbmdlIHRoZSBkZXZpY2UncyB1cHN0cmVhbSBVU0IgbGluaywKKwkgKiBidXQgcm9vdCBodWJzIGhhdmUgbm8gdXBzdHJlYW0gVVNCIGxpbmsuCiAJICovCiAJaWYgKHVkZXYtPnBhcmVudCkKIAkJc3RhdHVzID0gaHViX3BvcnRfc3VzcGVuZChoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLCBwb3J0MSwKIAkJCQl1ZGV2KTsKLQotCWlmIChzdGF0dXMgPT0gMCkKLQkJdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOworCWVsc2UgeworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2IgJXNzdXNwZW5kXG4iLAorCQkJCXVkZXYtPmF1dG9fcG0gPyAiYXV0by0iIDogIiIpOworCQl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCBVU0JfU1RBVEVfU1VTUEVOREVEKTsKKwl9CiAJcmV0dXJuIHN0YXR1czsKIH0KIAotI2VuZGlmCi0KIC8qCi0gKiB1c2Jfc3VzcGVuZF9kZXZpY2UgLSBzdXNwZW5kIGEgdXNiIGRldmljZQorICogdXNiX3BvcnRfc3VzcGVuZCAtIHN1c3BlbmQgYSB1c2IgZGV2aWNlJ3MgdXBzdHJlYW0gcG9ydAogICogQHVkZXY6IGRldmljZSB0aGF0J3Mgbm8gbG9uZ2VyIGluIGFjdGl2ZSB1c2UKICAqIENvbnRleHQ6IG11c3QgYmUgYWJsZSB0byBzbGVlcDsgZGV2aWNlIG5vdCBsb2NrZWQ7IHBtIGxvY2tzIGhlbGQKICAqCiAgKiBTdXNwZW5kcyBhIFVTQiBkZXZpY2UgdGhhdCBpc24ndCBpbiBhY3RpdmUgdXNlLCBjb25zZXJ2aW5nIHBvd2VyLgogICogRGV2aWNlcyBtYXkgd2FrZSBvdXQgb2YgYSBzdXNwZW5kLCBpZiBhbnl0aGluZyBpbXBvcnRhbnQgaGFwcGVucywKICAqIHVzaW5nIHRoZSByZW1vdGUgd2FrZXVwIG1lY2hhbmlzbS4gIFRoZXkgbWF5IGFsc28gYmUgdGFrZW4gb3V0IG9mCi0gKiBzdXNwZW5kIGJ5IHRoZSBob3N0LCB1c2luZyB1c2JfcmVzdW1lX2RldmljZSgpLiAgSXQncyBhbHNvIHJvdXRpbmUKKyAqIHN1c3BlbmQgYnkgdGhlIGhvc3QsIHVzaW5nIHVzYl9wb3J0X3Jlc3VtZSgpLiAgSXQncyBhbHNvIHJvdXRpbmUKICAqIHRvIGRpc2Nvbm5lY3QgZGV2aWNlcyB3aGlsZSB0aGV5IGFyZSBzdXNwZW5kZWQuCiAgKgogICogVGhpcyBvbmx5IGFmZmVjdHMgdGhlIFVTQiBoYXJkd2FyZSBmb3IgYSBkZXZpY2U7IGl0cyBpbnRlcmZhY2VzCkBAIC0xNzQ2LDE3ICsxNjA1LDkgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KICAqLwotaW50IHVzYl9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK2ludCB1c2JfcG9ydF9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewotI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAotCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCi0JCXJldHVybiAtRU5PREVWOwotCXJldHVybiBfX3VzYl9zdXNwZW5kX2RldmljZSh1ZGV2LCB1ZGV2LT5wb3J0bnVtKTsKLSNlbHNlCi0JLyogTk9URTogIHVkZXYtPnN0YXRlIHVuY2hhbmdlZCwgaXQncyBub3QgbHlpbmcgLi4uICovCi0JdWRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19TVVNQRU5EOwotCXJldHVybiAwOwotI2VuZGlmCisJcmV0dXJuIF9fdXNiX3BvcnRfc3VzcGVuZCh1ZGV2LCB1ZGV2LT5wb3J0bnVtKTsKIH0KIAogLyoKQEAgLTE3NjcsNyArMTYxOCw3IEBACiAgKiByZXN1bWUgKGJ5IGhvc3QpIG9yIHJlbW90ZSB3YWtldXAgKGJ5IGRldmljZSkgLi4uIG5vdyBzZWUgd2hhdCBjaGFuZ2VkCiAgKiBpbiB0aGUgdHJlZSB0aGF0J3Mgcm9vdGVkIGF0IHRoaXMgZGV2aWNlLgogICovCi1zdGF0aWMgaW50IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQorc3RhdGljIGludCBmaW5pc2hfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CiAJaW50CXN0YXR1czsKIAl1MTYJZGV2c3RhdHVzOwpAQCAtMTc4Myw3ICsxNjM0LDYgQEAKIAl1c2Jfc2V0X2RldmljZV9zdGF0ZSh1ZGV2LCB1ZGV2LT5hY3Rjb25maWcKIAkJCT8gVVNCX1NUQVRFX0NPTkZJR1VSRUQKIAkJCTogVVNCX1NUQVRFX0FERFJFU1MpOwotCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CiAKICAJLyogMTAuNS40LjUgc2F5cyBiZSBzdXJlIGRldmljZXMgaW4gdGhlIHRyZWUgYXJlIHN0aWxsIHRoZXJlLgogIAkgKiBGb3Igbm93IGxldCdzIGFzc3VtZSB0aGUgZGV2aWNlIGRpZG4ndCBnbyBjcmF6eSBvbiByZXN1bWUsCkBAIC0xNzk4LDkgKzE2NDgsNiBAQAogCQkJImdvbmUgYWZ0ZXIgdXNiIHJlc3VtZT8gc3RhdHVzICVkXG4iLAogCQkJc3RhdHVzKTsKIAllbHNlIGlmICh1ZGV2LT5hY3Rjb25maWcpIHsKLQkJdW5zaWduZWQJaTsKLQkJaW50CQkoKnJlc3VtZSkoc3RydWN0IGRldmljZSAqKTsKLQogCQlsZTE2X3RvX2NwdXMoJmRldnN0YXR1cyk7CiAJCWlmICgoZGV2c3RhdHVzICYgKDEgPDwgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQKSkKIAkJCQkmJiB1ZGV2LT5wYXJlbnQpIHsKQEAgLTE4MTEsMjQgKzE2NTgsOSBAQAogCQkJCQlVU0JfREVWSUNFX1JFTU9URV9XQUtFVVAsIDAsCiAJCQkJCU5VTEwsIDAsCiAJCQkJCVVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQkJCWlmIChzdGF0dXMpIHsKKwkJCWlmIChzdGF0dXMpCiAJCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAiZGlzYWJsZSByZW1vdGUgIgogCQkJCQkid2FrZXVwLCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7Ci0JCQkJc3RhdHVzID0gMDsKLQkJCX0KLQkJfQotCi0JCS8qIHJlc3VtZSBpbnRlcmZhY2UgZHJpdmVyczsgaWYgdGhpcyBpcyBhIGh1YiwgaXQKLQkJICogbWF5IGhhdmUgYSBjaGlsZCByZXN1bWUgZXZlbnQgdG8gZGVhbCB3aXRoIHNvb24KLQkJICovCi0JCXJlc3VtZSA9IHVkZXYtPmRldi5idXMtPnJlc3VtZTsKLQkJZm9yIChpID0gMDsgaSA8IHVkZXYtPmFjdGNvbmZpZy0+ZGVzYy5iTnVtSW50ZXJmYWNlczsgaSsrKSB7Ci0JCQlzdHJ1Y3QgZGV2aWNlICpkZXYgPQotCQkJCQkmdWRldi0+YWN0Y29uZmlnLT5pbnRlcmZhY2VbaV0tPmRldjsKLQotCQkJZG93bigmZGV2LT5zZW0pOwotCQkJKHZvaWQpIHJlc3VtZShkZXYpOwotCQkJdXAoJmRldi0+c2VtKTsKIAkJfQogCQlzdGF0dXMgPSAwOwogCkBAIC0xODM5LDggKzE2NzEsNiBAQAogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQogc3RhdGljIGludAogaHViX3BvcnRfcmVzdW1lKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCiB7CkBAIC0xODQ4LDYgKzE2NzgsOCBAQAogCiAJLy8gZGV2X2RiZyhodWItPmludGZkZXYsICJyZXN1bWUgcG9ydCAlZFxuIiwgcG9ydDEpOwogCisJc2V0X2JpdChwb3J0MSwgaHViLT5idXN5X2JpdHMpOworCiAJLyogc2VlIDcuMS43Ljc7IGFmZmVjdHMgcG93ZXIgdXNhZ2UsIGJ1dCBub3QgYnVkZ2V0aW5nICovCiAJc3RhdHVzID0gY2xlYXJfcG9ydF9mZWF0dXJlKGh1Yi0+aGRldiwKIAkJCXBvcnQxLCBVU0JfUE9SVF9GRUFUX1NVU1BFTkQpOwpAQCAtMTg2MSw3ICsxNjkzLDggQEAKIAogCQkvKiBkcml2ZSByZXN1bWUgZm9yIGF0IGxlYXN0IDIwIG1zZWMgKi8KIAkJaWYgKHVkZXYpCi0JCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUVcbiIpOworCQkJZGV2X2RiZygmdWRldi0+ZGV2LCAidXNiICVzcmVzdW1lXG4iLAorCQkJCQl1ZGV2LT5hdXRvX3BtID8gImF1dG8tIiA6ICIiKTsKIAkJbXNsZWVwKDI1KTsKIAogI2RlZmluZSBMSVZFX0ZMQUdTCSggVVNCX1BPUlRfU1RBVF9QT1dFUiBcCkBAIC0xODkxLDE5ICsxNzI0LDIxIEBACiAJCQkvKiBUUlNNUkNZID0gMTAgbXNlYyAqLwogCQkJbXNsZWVwKDEwKTsKIAkJCWlmICh1ZGV2KQotCQkJCXN0YXR1cyA9IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHVkZXYpOworCQkJCXN0YXR1cyA9IGZpbmlzaF9wb3J0X3Jlc3VtZSh1ZGV2KTsKIAkJfQogCX0KIAlpZiAoc3RhdHVzIDwgMCkKIAkJaHViX3BvcnRfbG9naWNhbF9kaXNjb25uZWN0KGh1YiwgcG9ydDEpOwogCisJY2xlYXJfYml0KHBvcnQxLCBodWItPmJ1c3lfYml0cyk7CisJaWYgKCFodWItPmhkZXYtPnBhcmVudCAmJiAhaHViLT5idXN5X2JpdHNbMF0pCisJCXVzYl9lbmFibGVfcm9vdF9odWJfaXJxKGh1Yi0+aGRldi0+YnVzKTsKKwogCXJldHVybiBzdGF0dXM7CiB9CiAKLSNlbmRpZgotCiAvKgotICogdXNiX3Jlc3VtZV9kZXZpY2UgLSByZS1hY3RpdmF0ZSBhIHN1c3BlbmRlZCB1c2IgZGV2aWNlCisgKiB1c2JfcG9ydF9yZXN1bWUgLSByZS1hY3RpdmF0ZSBhIHN1c3BlbmRlZCB1c2IgZGV2aWNlJ3MgdXBzdHJlYW0gcG9ydAogICogQHVkZXY6IGRldmljZSB0byByZS1hY3RpdmF0ZQogICogQ29udGV4dDogbXVzdCBiZSBhYmxlIHRvIHNsZWVwOyBkZXZpY2Ugbm90IGxvY2tlZDsgcG0gbG9ja3MgaGVsZAogICoKQEAgLTE5MTUsMzYgKzE3NTAsMjQgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgZWxzZSBuZWdhdGl2ZSBlcnJuby4KICAqLwotaW50IHVzYl9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoraW50IHVzYl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKIAlpbnQJc3RhdHVzOwogCi0JaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQkvKiBzZWxlY3RpdmUgcmVzdW1lIG9mIG9uZSBkb3duc3RyZWFtIGh1Yi10by1kZXZpY2UgcG9ydCAqLworCS8qIHdlIGNoYW5nZSB0aGUgZGV2aWNlJ3MgdXBzdHJlYW0gVVNCIGxpbmssCisJICogYnV0IHJvb3QgaHVicyBoYXZlIG5vIHVwc3RyZWFtIFVTQiBsaW5rLgorCSAqLwogCWlmICh1ZGV2LT5wYXJlbnQpIHsKLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkJaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9TVVNQRU5ERUQpIHsKLQkJCS8vIE5PVEUgc3dzdXNwIG1heSBib3JrIHVzLCBkZXZpY2Ugc3RhdGUgYmVpbmcgd3JvbmcuLi4KLQkJCS8vIE5PVEUgdGhpcyBmYWlscyBpZiBwYXJlbnQgaXMgYWxzbyBzdXNwZW5kZWQuLi4KLQkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLAotCQkJCQl1ZGV2LT5wb3J0bnVtLCB1ZGV2KTsKLQkJfSBlbHNlCi0jZW5kaWYKLQkJCXN0YXR1cyA9IDA7Ci0JfSBlbHNlCi0JCXN0YXR1cyA9IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHVkZXYpOwotCWlmIChzdGF0dXMgPCAwKQotCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJjYW4ndCByZXN1bWUsIHN0YXR1cyAlZFxuIiwKLQkJCXN0YXR1cyk7Ci0KLQkvKiByZWJpbmQgZHJpdmVycyB0aGF0IGhhZCBubyBzdXNwZW5kKCkgKi8KLQlpZiAoc3RhdHVzID09IDApIHsKLQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0JCWJ1c19yZXNjYW5fZGV2aWNlcygmdXNiX2J1c190eXBlKTsKLQkJdXNiX2xvY2tfZGV2aWNlKHVkZXYpOworCQkvLyBOT1RFIHRoaXMgZmFpbHMgaWYgcGFyZW50IGlzIGFsc28gc3VzcGVuZGVkLi4uCisJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShoZGV2X3RvX2h1Yih1ZGV2LT5wYXJlbnQpLAorCQkJCXVkZXYtPnBvcnRudW0sIHVkZXYpOworCX0gZWxzZSB7CisJCWRldl9kYmcoJnVkZXYtPmRldiwgInVzYiAlc3Jlc3VtZVxuIiwKKwkJCQl1ZGV2LT5hdXRvX3BtID8gImF1dG8tIiA6ICIiKTsKKwkJc3RhdHVzID0gZmluaXNoX3BvcnRfcmVzdW1lKHVkZXYpOwogCX0KKwlpZiAoc3RhdHVzIDwgMCkKKwkJZGV2X2RiZygmdWRldi0+ZGV2LCAiY2FuJ3QgcmVzdW1lLCBzdGF0dXMgJWRcbiIsIHN0YXR1cyk7CiAJcmV0dXJuIHN0YXR1czsKIH0KIApAQCAtMTk1MiwyMyArMTc3NSw2MCBAQAogewogCWludAlzdGF0dXMgPSAwOwogCi0jaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJLyogQWxsIHRoaXMganVzdCB0byBhdm9pZCBzZW5kaW5nIGEgcG9ydC1yZXN1bWUgbWVzc2FnZQorCSAqIHRvIHRoZSBwYXJlbnQgaHViISAqLwogCi0JLyogZG9uJ3QgcmVwZWF0IFJFU1VNRSBzZXF1ZW5jZSBpZiB0aGlzIGRldmljZQotCSAqIHdhcyBhbHJlYWR5IHdva2VuIHVwIGJ5IHNvbWUgb3RoZXIgdGFzawotCSAqLwogCXVzYl9sb2NrX2RldmljZSh1ZGV2KTsKKwl1c2JfcG1fbG9jayh1ZGV2KTsKIAlpZiAodWRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkgewotCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJSRVNVTUUgKHdha2V1cClcbiIpOworCQlkZXZfZGJnKCZ1ZGV2LT5kZXYsICJ1c2IgJXNyZXN1bWVcbiIsICJ3YWtldXAtIik7CiAJCS8qIFRSU01SQ1kgPSAxMCBtc2VjICovCiAJCW1zbGVlcCgxMCk7Ci0JCXN0YXR1cyA9IGZpbmlzaF9kZXZpY2VfcmVzdW1lKHVkZXYpOworCQlzdGF0dXMgPSBmaW5pc2hfcG9ydF9yZXN1bWUodWRldik7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXVkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9IFBNX0VWRU5UX09OOwogCX0KKwl1c2JfcG1fdW5sb2NrKHVkZXYpOworCisJaWYgKHN0YXR1cyA9PSAwKQorCQl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldiwgMCk7CiAJdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0jZW5kaWYKIAlyZXR1cm4gc3RhdHVzOwogfQogCisjZWxzZQkvKiBDT05GSUdfVVNCX1NVU1BFTkQgKi8KKworLyogV2hlbiBDT05GSUdfVVNCX1NVU1BFTkQgaXNuJ3Qgc2V0LCB3ZSBuZXZlciBzdXNwZW5kIG9yIHJlc3VtZSBhbnkgcG9ydHMuICovCisKK2ludCB1c2JfcG9ydF9zdXNwZW5kKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAorZmluaXNoX3BvcnRfcmVzdW1lKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludAoraHViX3BvcnRfcmVzdW1lKHN0cnVjdCB1c2JfaHViICpodWIsIGludCBwb3J0MSwgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK2ludCB1c2JfcG9ydF9yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHJlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCiBzdGF0aWMgaW50IGh1Yl9zdXNwZW5kKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBwbV9tZXNzYWdlX3QgbXNnKQogewogCXN0cnVjdCB1c2JfaHViCQkqaHViID0gdXNiX2dldF9pbnRmZGF0YSAoaW50Zik7CkBAIC0xOTgwLDEzICsxODQwLDE3IEBACiAJCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwogCiAJCXVkZXYgPSBoZGV2LT5jaGlsZHJlbiBbcG9ydDEtMV07Ci0JCWlmICh1ZGV2ICYmICh1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKLQkJCQkJPT0gUE1fRVZFTlRfT04KKwkJaWYgKHVkZXYgJiYgbXNnLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQgJiYKICNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQkJCQl8fCB1ZGV2LT5zdGF0ZSAhPSBVU0JfU1RBVEVfU1VTUEVOREVECisJCQkJdWRldi0+c3RhdGUgIT0gVVNCX1NUQVRFX1NVU1BFTkRFRAorI2Vsc2UKKwkJCQl1ZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUuZXZlbnQKKwkJCQkJPT0gUE1fRVZFTlRfT04KICNlbmRpZgotCQkJCSkpIHsKLQkJCWRldl9kYmcoJmludGYtPmRldiwgInBvcnQgJWQgbnlldCBzdXNwZW5kZWRcbiIsIHBvcnQxKTsKKwkJCQkpIHsKKwkJCWlmICghaGRldi0+YXV0b19wbSkKKwkJCQlkZXZfZGJnKCZpbnRmLT5kZXYsICJwb3J0ICVkIG55ZXQgc3VzcGVuZGVkXG4iLAorCQkJCQkJcG9ydDEpOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCX0KQEAgLTIwMzUsNjYgKzE4OTksMjIgQEAKIAkJfQogCX0KIAorCS8qIHRlbGwga2h1YmQgdG8gbG9vayBmb3IgY2hhbmdlcyBvbiB0aGlzIGh1YiAqLwogCWh1Yl9hY3RpdmF0ZShodWIpOwotCi0JLyogUkVWSVNJVDogIHRoaXMgcmVjdXJzaW9uIHByb2JhYmx5IHNob3VsZG4ndCBleGlzdC4gIFJlbW92ZQotCSAqIHRoaXMgY29kZSBzb21ldGltZSwgYWZ0ZXIgcmV0ZXN0aW5nIHdpdGggZGlmZmVyZW50IHJvb3QgYW5kCi0JICogZXh0ZXJuYWwgaHVicy4KLQkgKi8KLSNpZmRlZglDT05GSUdfVVNCX1NVU1BFTkQKLQl7Ci0JdW5zaWduZWQJCXBvcnQxOwotCi0JZm9yIChwb3J0MSA9IDE7IHBvcnQxIDw9IGhkZXYtPm1heGNoaWxkOyBwb3J0MSsrKSB7Ci0JCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OwotCQl1MTYJCQlwb3J0c3RhdCwgcG9ydGNoYW5nZTsKLQotCQl1ZGV2ID0gaGRldi0+Y2hpbGRyZW4gW3BvcnQxLTFdOwotCQlzdGF0dXMgPSBodWJfcG9ydF9zdGF0dXMoaHViLCBwb3J0MSwgJnBvcnRzdGF0LCAmcG9ydGNoYW5nZSk7Ci0JCWlmIChzdGF0dXMgPT0gMCkgewotCQkJaWYgKHBvcnRjaGFuZ2UgJiBVU0JfUE9SVF9TVEFUX0NfU1VTUEVORCkgewotCQkJCWNsZWFyX3BvcnRfZmVhdHVyZShoZGV2LCBwb3J0MSwKLQkJCQkJVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQpOwotCQkJCXBvcnRjaGFuZ2UgJj0gflVTQl9QT1JUX1NUQVRfQ19TVVNQRU5EOwotCQkJfQotCi0JCQkvKiBsZXQga2h1YmQgaGFuZGxlIGRpc2Nvbm5lY3RzIGV0YyAqLwotCQkJaWYgKHBvcnRjaGFuZ2UpCi0JCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoIXVkZXYgfHwgc3RhdHVzIDwgMCkKLQkJCWNvbnRpbnVlOwotCQl1c2JfbG9ja19kZXZpY2UodWRldik7Ci0JCWlmIChwb3J0c3RhdCAmIFVTQl9QT1JUX1NUQVRfU1VTUEVORCkKLQkJCXN0YXR1cyA9IGh1Yl9wb3J0X3Jlc3VtZShodWIsIHBvcnQxLCB1ZGV2KTsKLQkJZWxzZSB7Ci0JCQlzdGF0dXMgPSBmaW5pc2hfZGV2aWNlX3Jlc3VtZSh1ZGV2KTsKLQkJCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkJZGV2X2RiZygmaW50Zi0+ZGV2LCAicmVzdW1lIHBvcnQgJWQgLS0+ICVkXG4iLAotCQkJCQlwb3J0MSwgc3RhdHVzKTsKLQkJCQlodWJfcG9ydF9sb2dpY2FsX2Rpc2Nvbm5lY3QoaHViLCBwb3J0MSk7Ci0JCQl9Ci0JCX0KLQkJdXNiX3VubG9ja19kZXZpY2UodWRldik7Ci0JfQotCX0KLSNlbmRpZgogCXJldHVybiAwOwogfQogCi12b2lkIHVzYl9zdXNwZW5kX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpoZGV2KQotewotCXN0cnVjdCB1c2JfaHViICpodWIgPSBoZGV2X3RvX2h1YihoZGV2KTsKKyNlbHNlCS8qIENPTkZJR19QTSAqLwogCi0JLyogVGhpcyBhbHNvIG1ha2VzIGFueSBsZWQgYmxpbmtlciBzdG9wIHJldHJpZ2dlcmluZy4gIFdlJ3JlIGNhbGxlZAotCSAqIGZyb20gaXJxLCBzbyB0aGUgYmxpbmtlciBtaWdodCBzdGlsbCBiZSBzY2hlZHVsZWQuICBDYWxsZXIgcHJvbWlzZXMKLQkgKiB0aGF0IHRoZSByb290IGh1YiBzdGF0dXMgVVJCIHdpbGwgYmUgY2FuY2VsZWQuCi0JICovCi0JX19odWJfcXVpZXNjZShodWIpOwotCW1hcmtfcXVpZXNjZWQodG9fdXNiX2ludGVyZmFjZShodWItPmludGZkZXYpKTsKK3N0YXRpYyBpbmxpbmUgaW50IHJlbW90ZV93YWtldXAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYpCit7CisJcmV0dXJuIDA7CiB9CiAKKyNkZWZpbmUgaHViX3N1c3BlbmQgTlVMTAorI2RlZmluZSBodWJfcmVzdW1lIE5VTEwKKyNlbmRpZgorCiB2b2lkIHVzYl9yZXN1bWVfcm9vdF9odWIoc3RydWN0IHVzYl9kZXZpY2UgKmhkZXYpCiB7CiAJc3RydWN0IHVzYl9odWIgKmh1YiA9IGhkZXZfdG9faHViKGhkZXYpOwpAQCAtMjIxNCw2ICsyMDM0LDcgQEAKIAlpbnQJCQlpLCBqLCByZXR2YWw7CiAJdW5zaWduZWQJCWRlbGF5ID0gSFVCX1NIT1JUX1JFU0VUX1RJTUU7CiAJZW51bSB1c2JfZGV2aWNlX3NwZWVkCW9sZHNwZWVkID0gdWRldi0+c3BlZWQ7CisJY2hhciAJCQkqc3BlZWQsICp0eXBlOwogCiAJLyogcm9vdCBodWIgcG9ydHMgaGF2ZSBhIHNsaWdodGx5IGxvbmdlciByZXNldCBwZXJpb2QKIAkgKiAoZnJvbSBVU0IgMi4wIHNwZWMsIHNlY3Rpb24gNy4xLjcuNSkKQEAgLTIyNDYsOCArMjA2NywxMyBAQAogICAKIAkvKiBVU0IgMi4wIHNlY3Rpb24gNS41LjMgdGFsa3MgYWJvdXQgZXAwIG1heHBhY2tldCAuLi4KIAkgKiBpdCdzIGZpeGVkIHNpemUgZXhjZXB0IGZvciBmdWxsIHNwZWVkIGRldmljZXMuCisJICogRm9yIFdpcmVsZXNzIFVTQiBkZXZpY2VzLCBlcDAgbWF4IHBhY2tldCBpcyBhbHdheXMgNTEyICh0aG8KKwkgKiByZXBvcnRlZCBhcyAweGZmIGluIHRoZSBkZXZpY2UgZGVzY3JpcHRvcikuIFdVU0IxLjBbNC44LjFdLgogCSAqLwogCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9WQVJJQUJMRToJLyogZml4ZWQgYXQgNTEyICovCisJCXVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplID0gX19jb25zdGFudF9jcHVfdG9fbGUxNig1MTIpOworCQlicmVhazsKIAljYXNlIFVTQl9TUEVFRF9ISUdIOgkJLyogZml4ZWQgYXQgNjQgKi8KIAkJdWRldi0+ZXAwLmRlc2Mud01heFBhY2tldFNpemUgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDY0KTsKIAkJYnJlYWs7CkBAIC0yMjY1LDE3ICsyMDkxLDIxIEBACiAJCWdvdG8gZmFpbDsKIAl9CiAgCisJdHlwZSA9ICIiOworCXN3aXRjaCAodWRldi0+c3BlZWQpIHsKKwljYXNlIFVTQl9TUEVFRF9MT1c6CXNwZWVkID0gImxvdyI7CWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CXNwZWVkID0gImZ1bGwiOwlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfVkFSSUFCTEU6CisJCQkJc3BlZWQgPSAidmFyaWFibGUiOworCQkJCXR5cGUgPSAiV2lyZWxlc3MgIjsKKwkJCQlicmVhazsKKwlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOwlicmVhazsKKwl9CiAJZGV2X2luZm8gKCZ1ZGV2LT5kZXYsCi0JCQkiJXMgJXMgc3BlZWQgVVNCIGRldmljZSB1c2luZyAlcyBhbmQgYWRkcmVzcyAlZFxuIiwKLQkJCSh1ZGV2LT5jb25maWcpID8gInJlc2V0IiA6ICJuZXciLAotCQkJKHsgY2hhciAqc3BlZWQ7IHN3aXRjaCAodWRldi0+c3BlZWQpIHsKLQkJCWNhc2UgVVNCX1NQRUVEX0xPVzoJc3BlZWQgPSAibG93IjsJYnJlYWs7Ci0JCQljYXNlIFVTQl9TUEVFRF9GVUxMOglzcGVlZCA9ICJmdWxsIjsJYnJlYWs7Ci0JCQljYXNlIFVTQl9TUEVFRF9ISUdIOglzcGVlZCA9ICJoaWdoIjsJYnJlYWs7Ci0JCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOwlicmVhazsKLQkJCX07IHNwZWVkO30pLAotCQkJdWRldi0+YnVzLT5jb250cm9sbGVyLT5kcml2ZXItPm5hbWUsCi0JCQl1ZGV2LT5kZXZudW0pOworCQkgICIlcyAlcyBzcGVlZCAlc1VTQiBkZXZpY2UgdXNpbmcgJXMgYW5kIGFkZHJlc3MgJWRcbiIsCisJCSAgKHVkZXYtPmNvbmZpZykgPyAicmVzZXQiIDogIm5ldyIsIHNwZWVkLCB0eXBlLAorCQkgIHVkZXYtPmJ1cy0+Y29udHJvbGxlci0+ZHJpdmVyLT5uYW1lLCB1ZGV2LT5kZXZudW0pOwogCiAJLyogU2V0IHVwIFRUIHJlY29yZHMsIGlmIG5lZWRlZCAgKi8KIAlpZiAoaGRldi0+dHQpIHsKQEAgLTIzMTcsNiArMjE0Nyw4IEBACiAJCQkgKiBkb3duIHRyZW1lbmRvdXNseSBieSBOQUtpbmcgdGhlIHVuZXhwZWN0ZWRseQogCQkJICogZWFybHkgc3RhdHVzIHN0YWdlLiAgQWxzbywgcmV0cnkgb24gYWxsIGVycm9yczsKIAkJCSAqIHNvbWUgZGV2aWNlcyBhcmUgZmxha2V5LgorCQkJICogMjU1IGlzIGZvciBXVVNCIGRldmljZXMsIHdlIGFjdHVhbGx5IG5lZWQgdG8gdXNlIDUxMi4KKwkJCSAqIFdVU0IxLjBbNC44LjFdLgogCQkJICovCiAJCQlmb3IgKGogPSAwOyBqIDwgMzsgKytqKSB7CiAJCQkJYnVmLT5iTWF4UGFja2V0U2l6ZTAgPSAwOwpAQCAtMjMyNiw3ICsyMTU4LDcgQEAKIAkJCQkJYnVmLCBHRVRfREVTQ1JJUFRPUl9CVUZTSVpFLAogCQkJCQkoaSA/IFVTQl9DVFJMX0dFVF9USU1FT1VUIDogMTAwMCkpOwogCQkJCXN3aXRjaCAoYnVmLT5iTWF4UGFja2V0U2l6ZTApIHsKLQkJCQljYXNlIDg6IGNhc2UgMTY6IGNhc2UgMzI6IGNhc2UgNjQ6CisJCQkJY2FzZSA4OiBjYXNlIDE2OiBjYXNlIDMyOiBjYXNlIDY0OiBjYXNlIDI1NToKIAkJCQkJaWYgKGJ1Zi0+YkRlc2NyaXB0b3JUeXBlID09CiAJCQkJCQkJVVNCX0RUX0RFVklDRSkgewogCQkJCQkJciA9IDA7CkBAIC0yNDAwLDcgKzIyMzIsOCBAQAogCWlmIChyZXR2YWwpCiAJCWdvdG8gZmFpbDsKIAotCWkgPSB1ZGV2LT5kZXNjcmlwdG9yLmJNYXhQYWNrZXRTaXplMDsKKwlpID0gdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTAgPT0gMHhmZj8KKwkgICAgNTEyIDogdWRldi0+ZGVzY3JpcHRvci5iTWF4UGFja2V0U2l6ZTA7CiAJaWYgKGxlMTZfdG9fY3B1KHVkZXYtPmVwMC5kZXNjLndNYXhQYWNrZXRTaXplKSAhPSBpKSB7CiAJCWlmICh1ZGV2LT5zcGVlZCAhPSBVU0JfU1BFRURfRlVMTCB8fAogCQkJCSEoaSA9PSA4IHx8IGkgPT0gMTYgfHwgaSA9PSAzMiB8fCBpID09IDY0KSkgewpAQCAtMjU4NSw2ICsyNDE4LDcgQEAKIAkJdXNiX3NldF9kZXZpY2Vfc3RhdGUodWRldiwgVVNCX1NUQVRFX1BPV0VSRUQpOwogCQl1ZGV2LT5zcGVlZCA9IFVTQl9TUEVFRF9VTktOT1dOOwogIAkJdWRldi0+YnVzX21BID0gaHViLT5tQV9wZXJfcG9ydDsKKwkJdWRldi0+bGV2ZWwgPSBoZGV2LT5sZXZlbCArIDE7CiAKIAkJLyogc2V0IHRoZSBhZGRyZXNzICovCiAJCWNob29zZV9hZGRyZXNzKHVkZXYpOwpAQCAtMjczNiwxNyArMjU3MCw2IEBACiAJCXVzYl9nZXRfaW50ZihpbnRmKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZodWJfZXZlbnRfbG9jayk7CiAKLQkJLyogSXMgdGhpcyBpcyBhIHJvb3QgaHViIHdhbnRpbmcgdG8gcmVhY3RpdmF0ZSB0aGUgZG93bnN0cmVhbQotCQkgKiBwb3J0cz8gIElmIHNvLCBiZSBzdXJlIHRoZSBpbnRlcmZhY2UgcmVzdW1lcyBldmVuIGlmIGl0cwotCQkgKiBzdHViICJkZXZpY2UiIG5vZGUgd2FzIG5ldmVyIHN1c3BlbmRlZC4KLQkJICovCi0JCWlmIChpKSB7Ci0JCQlkcG1fcnVudGltZV9yZXN1bWUoJmhkZXYtPmRldik7Ci0JCQlkcG1fcnVudGltZV9yZXN1bWUoJmludGYtPmRldik7Ci0JCQl1c2JfcHV0X2ludGYoaW50Zik7Ci0JCQljb250aW51ZTsKLQkJfQotCiAJCS8qIExvY2sgdGhlIGRldmljZSwgdGhlbiBjaGVjayB0byBzZWUgaWYgd2Ugd2VyZQogCQkgKiBkaXNjb25uZWN0ZWQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIGxvY2sgdG8gc3VjY2VlZC4gKi8KIAkJaWYgKGxvY2t0cmVlKGhkZXYpIDwgMCkgewpAQCAtMjc2Myw2ICsyNTg2LDEzIEBACiAJCQlnb3RvIGxvb3A7CiAJCX0KIAorCQkvKiBJcyB0aGlzIGlzIGEgcm9vdCBodWIgd2FudGluZyB0byByZWFjdGl2YXRlIHRoZSBkb3duc3RyZWFtCisJCSAqIHBvcnRzPyAgSWYgc28sIGJlIHN1cmUgdGhlIGludGVyZmFjZSByZXN1bWVzIGV2ZW4gaWYgaXRzCisJCSAqIHN0dWIgImRldmljZSIgbm9kZSB3YXMgbmV2ZXIgc3VzcGVuZGVkLgorCQkgKi8KKwkJaWYgKGkpCisJCQl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UoaGRldiwgMCk7CisKIAkJLyogSWYgdGhpcyBpcyBhbiBpbmFjdGl2ZSBvciBzdXNwZW5kZWQgaHViLCBkbyBub3RoaW5nICovCiAJCWlmIChodWItPnF1aWVzY2luZykKIAkJCWdvdG8gbG9vcDsKQEAgLTI5MDAsNyArMjczMCw3IEBACiAKIAkJLyogSWYgdGhpcyBpcyBhIHJvb3QgaHViLCB0ZWxsIHRoZSBIQ0QgaXQncyBva2F5IHRvCiAJCSAqIHJlLWVuYWJsZSBwb3J0LWNoYW5nZSBpbnRlcnJ1cHRzIG5vdy4gKi8KLQkJaWYgKCFoZGV2LT5wYXJlbnQpCisJCWlmICghaGRldi0+cGFyZW50ICYmICFodWItPmJ1c3lfYml0c1swXSkKIAkJCXVzYl9lbmFibGVfcm9vdF9odWJfaXJxKGhkZXYtPmJ1cyk7CiAKIGxvb3A6CkBAIC0zMDc1LDYgKzI5MDUsOSBAQAogCQkJYnJlYWs7CiAJfQogCWNsZWFyX2JpdChwb3J0MSwgcGFyZW50X2h1Yi0+YnVzeV9iaXRzKTsKKwlpZiAoIXBhcmVudF9oZGV2LT5wYXJlbnQgJiYgIXBhcmVudF9odWItPmJ1c3lfYml0c1swXSkKKwkJdXNiX2VuYWJsZV9yb290X2h1Yl9pcnEocGFyZW50X2hkZXYtPmJ1cyk7CisKIAlpZiAocmV0IDwgMCkKIAkJZ290byByZV9lbnVtZXJhdGU7CiAgCkBAIC0zMTI4LDYgKzI5NjEsNyBAQAogCWh1Yl9wb3J0X2xvZ2ljYWxfZGlzY29ubmVjdChwYXJlbnRfaHViLCBwb3J0MSk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CitFWFBPUlRfU1lNQk9MKHVzYl9yZXNldF9kZXZpY2UpOwogCiAvKioKICAqIHVzYl9yZXNldF9jb21wb3NpdGVfZGV2aWNlIC0gd2FybiBpbnRlcmZhY2UgZHJpdmVycyBhbmQgcGVyZm9ybSBhIFVTQiBwb3J0IHJlc2V0CkBAIC0zMTYzLDYgKzI5OTcsOSBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwkvKiBQcmV2ZW50IGF1dG9zdXNwZW5kIGR1cmluZyB0aGUgcmVzZXQgKi8KKwl1c2JfYXV0b3Jlc3VtZV9kZXZpY2UodWRldiwgMSk7CisKIAlpZiAoaWZhY2UgJiYgaWZhY2UtPmNvbmRpdGlvbiAhPSBVU0JfSU5URVJGQUNFX0JJTkRJTkcpCiAJCWlmYWNlID0gTlVMTDsKIApAQCAtMzIwNCw1ICszMDQxLDcgQEAKIAkJfQogCX0KIAorCXVzYl9hdXRvc3VzcGVuZF9kZXZpY2UodWRldiwgMSk7CiAJcmV0dXJuIHJldDsKIH0KK0VYUE9SVF9TWU1CT0wodXNiX3Jlc2V0X2NvbXBvc2l0ZV9kZXZpY2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuaCBiL2RyaXZlcnMvdXNiL2NvcmUvaHViLmgKaW5kZXggMjlkNWY0NS4uMGY4ZTgyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9odWIuaAorKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCkBAIC0yMTIsNyArMjEyLDggQEAKIAl1bnNpZ25lZCBsb25nCQlldmVudF9iaXRzWzFdOwkvKiBzdGF0dXMgY2hhbmdlIGJpdG1hc2sgKi8KIAl1bnNpZ25lZCBsb25nCQljaGFuZ2VfYml0c1sxXTsJLyogcG9ydHMgd2l0aCBsb2dpY2FsIGNvbm5lY3QKIAkJCQkJCQlzdGF0dXMgY2hhbmdlICovCi0JdW5zaWduZWQgbG9uZwkJYnVzeV9iaXRzWzFdOwkvKiBwb3J0cyBiZWluZyByZXNldCAqLworCXVuc2lnbmVkIGxvbmcJCWJ1c3lfYml0c1sxXTsJLyogcG9ydHMgYmVpbmcgcmVzZXQgb3IKKwkJCQkJCQlyZXN1bWVkICovCiAjaWYgVVNCX01BWENISUxEUkVOID4gMzEgLyogOCpzaXplb2YodW5zaWduZWQgbG9uZykgLSAxICovCiAjZXJyb3IgZXZlbnRfYml0c1tdIGlzIHRvbyBzaG9ydCEKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jIGIvZHJpdmVycy91c2IvY29yZS9pbm9kZS5jCmluZGV4IDMxODJjMjIuLjdjNzdjMmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaW5vZGUuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL2lub2RlLmMKQEAgLTQ0LDcgKzQ0LDcgQEAKICNpbmNsdWRlICJoY2QuaCIKIAogc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIHVzYmZzX29wczsKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zOworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmYXVsdF9maWxlX29wZXJhdGlvbnM7CiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICp1c2Jmc19tb3VudDsKIHN0YXRpYyBpbnQgdXNiZnNfbW91bnRfY291bnQ7CS8qID0gMCAqLwogc3RhdGljIGludCBpZ25vcmVfbW91bnQgPSAwOwpAQCAtMjQ5LDcgKzI0OSw2IEBACiAJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5mc3VpZDsKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CkBAIC0yNjQsNyArMjYzLDcgQEAKIAkJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAKIAkJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLwotCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhpbm9kZSk7CiAJCQlicmVhazsKIAkJfQogCX0KQEAgLTI5Niw3ICsyOTUsNyBAQAogCW1vZGUgPSAobW9kZSAmIChTX0lSV1hVR08gfCBTX0lTVlRYKSkgfCBTX0lGRElSOwogCXJlcyA9IHVzYmZzX21rbm9kIChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CiAJaWYgKCFyZXMpCi0JCWRpci0+aV9ubGluaysrOworCQlpbmNfbmxpbmsoZGlyKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0zMzMsNyArMzMyLDcgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwlkcm9wX25saW5rKGRlbnRyeS0+ZF9pbm9kZSk7CiAJZHB1dChkZW50cnkpOwogCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwogCWRfZGVsZXRlKGRlbnRyeSk7CkBAIC0zNDgsMTAgKzM0NywxMSBAQAogCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKIAlkZW50cnlfdW5oYXNoKGRlbnRyeSk7CiAJaWYgKHVzYmZzX2VtcHR5KGRlbnRyeSkpIHsKLQkJZGVudHJ5LT5kX2lub2RlLT5pX25saW5rIC09IDI7CisJCWRyb3BfbmxpbmsoZGVudHJ5LT5kX2lub2RlKTsKKwkJZHJvcF9ubGluayhkZW50cnktPmRfaW5vZGUpOwogCQlkcHV0KGRlbnRyeSk7CiAJCWlub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKLQkJZGlyLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsoZGlyKTsKIAkJZXJyb3IgPSAwOwogCX0KIAltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKQEAgLTQwMiwxMyArNDAyLDEzIEBACiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpZiAoaW5vZGUtPnUuZ2VuZXJpY19pcCkKLQkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlpZiAoaW5vZGUtPmlfcHJpdmF0ZSkKKwkJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZhdWx0X2ZpbGVfb3BlcmF0aW9ucyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZmF1bHRfZmlsZV9vcGVyYXRpb25zID0gewogCS5yZWFkID0JCWRlZmF1bHRfcmVhZF9maWxlLAogCS53cml0ZSA9CWRlZmF1bHRfd3JpdGVfZmlsZSwKIAkub3BlbiA9CQlkZWZhdWx0X29wZW4sCkBAIC00OTUsNyArNDk1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBkZW50cnkgKmZzX2NyZWF0ZV9maWxlIChjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKIAkJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsIHZvaWQgKmRhdGEsCi0JCQkJICAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wcywKKwkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzLAogCQkJCSAgICAgIHVpZF90IHVpZCwgZ2lkX3QgZ2lkKQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKQEAgLTUwOSw3ICs1MDksNyBAQAogCX0gZWxzZSB7CiAJCWlmIChkZW50cnktPmRfaW5vZGUpIHsKIAkJCWlmIChkYXRhKQotCQkJCWRlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwkJCQlkZW50cnktPmRfaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7CiAJCQlpZiAoZm9wcykKIAkJCQlkZW50cnktPmRfaW5vZGUtPmlfZm9wID0gZm9wczsKIAkJCWRlbnRyeS0+ZF9pbm9kZS0+aV91aWQgPSB1aWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL21lc3NhZ2UuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCmluZGV4IDRjYzhkM2UuLjg1YjFjZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvbWVzc2FnZS5jCkBAIC0yMyw1OSArMjMsNDQgQEAKIH0KIAogCi1zdGF0aWMgdm9pZCB0aW1lb3V0X2tpbGwodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCB1cmIJKnVyYiA9IChzdHJ1Y3QgdXJiICopIGRhdGE7Ci0KLQl1c2JfdW5saW5rX3VyYih1cmIpOwotfQotCi0vLyBTdGFydHMgdXJiIGFuZCB3YWl0cyBmb3IgY29tcGxldGlvbiBvciB0aW1lb3V0Ci0vLyBub3RlIHRoYXQgdGhpcyBjYWxsIGlzIE5PVCBpbnRlcnJ1cHRpYmxlLCB3aGlsZQotLy8gbWFueSBkZXZpY2UgZHJpdmVyIGkvbyByZXF1ZXN0cyBzaG91bGQgYmUgaW50ZXJydXB0aWJsZQotc3RhdGljIGludCB1c2Jfc3RhcnRfd2FpdF91cmIoc3RydWN0IHVyYiAqdXJiLCBpbnQgdGltZW91dCwgaW50KiBhY3R1YWxfbGVuZ3RoKQorLyoKKyAqIFN0YXJ0cyB1cmIgYW5kIHdhaXRzIGZvciBjb21wbGV0aW9uIG9yIHRpbWVvdXQuIE5vdGUgdGhhdCB0aGlzIGNhbGwKKyAqIGlzIE5PVCBpbnRlcnJ1cHRpYmxlLiBNYW55IGRldmljZSBkcml2ZXIgaS9vIHJlcXVlc3RzIHNob3VsZCBiZQorICogaW50ZXJydXB0aWJsZSBhbmQgdGhlcmVmb3JlIHRoZXNlIGRyaXZlcnMgc2hvdWxkIGltcGxlbWVudCB0aGVpcgorICogb3duIGludGVycnVwdGlibGUgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQgdXNiX3N0YXJ0X3dhaXRfdXJiKHN0cnVjdCB1cmIgKnVyYiwgaW50IHRpbWVvdXQsIGludCAqYWN0dWFsX2xlbmd0aCkKIHsgCi0Jc3RydWN0IGNvbXBsZXRpb24JZG9uZTsKLQlzdHJ1Y3QgdGltZXJfbGlzdAl0aW1lcjsKLQlpbnQJCQlzdGF0dXM7CisJc3RydWN0IGNvbXBsZXRpb24gZG9uZTsKKwl1bnNpZ25lZCBsb25nIGV4cGlyZTsKKwlpbnQgc3RhdHVzOwogCiAJaW5pdF9jb21wbGV0aW9uKCZkb25lKTsgCQogCXVyYi0+Y29udGV4dCA9ICZkb25lOwogCXVyYi0+YWN0dWFsX2xlbmd0aCA9IDA7CiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfTk9JTyk7CisJaWYgKHVubGlrZWx5KHN0YXR1cykpCisJCWdvdG8gb3V0OwogCi0JaWYgKHN0YXR1cyA9PSAwKSB7Ci0JCWlmICh0aW1lb3V0ID4gMCkgewotCQkJaW5pdF90aW1lcigmdGltZXIpOwotCQkJdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXQpOwotCQkJdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXVyYjsKLQkJCXRpbWVyLmZ1bmN0aW9uID0gdGltZW91dF9raWxsOwotCQkJLyogZ3JyLiAgdGltZW91dCBfc2hvdWxkXyBpbmNsdWRlIHN1Ym1pdCBkZWxheXMuICovCi0JCQlhZGRfdGltZXIoJnRpbWVyKTsKLQkJfQotCQl3YWl0X2Zvcl9jb21wbGV0aW9uKCZkb25lKTsKKwlleHBpcmUgPSB0aW1lb3V0ID8gbXNlY3NfdG9famlmZmllcyh0aW1lb3V0KSA6IE1BWF9TQ0hFRFVMRV9USU1FT1VUOworCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZkb25lLCBleHBpcmUpKSB7CisKKwkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKKwkJCSIlcyB0aW1lZCBvdXQgb24gZXAlZCVzIGxlbj0lZC8lZFxuIiwKKwkJCWN1cnJlbnQtPmNvbW0sCisJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCisJCQl1c2JfcGlwZWluKHVyYi0+cGlwZSkgPyAiaW4iIDogIm91dCIsCisJCQl1cmItPmFjdHVhbF9sZW5ndGgsCisJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCisJCXVzYl9raWxsX3VyYih1cmIpOworCQlzdGF0dXMgPSB1cmItPnN0YXR1cyA9PSAtRU5PRU5UID8gLUVUSU1FRE9VVCA6IHVyYi0+c3RhdHVzOworCX0gZWxzZQogCQlzdGF0dXMgPSB1cmItPnN0YXR1czsKLQkJLyogbm90ZTogIEhDRHMgcmV0dXJuIEVUSU1FRE9VVCBmb3Igb3RoZXIgcmVhc29ucyB0b28gKi8KLQkJaWYgKHN0YXR1cyA9PSAtRUNPTk5SRVNFVCkgewotCQkJZGV2X2RiZygmdXJiLT5kZXYtPmRldiwKLQkJCQkiJXMgdGltZWQgb3V0IG9uIGVwJWQlcyBsZW49JWQvJWRcbiIsCi0JCQkJY3VycmVudC0+Y29tbSwKLQkJCQl1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSksCi0JCQkJdXNiX3BpcGVpbih1cmItPnBpcGUpID8gImluIiA6ICJvdXQiLAotCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCwKLQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgKLQkJCQkpOwotCQkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA+IDApCi0JCQkJc3RhdHVzID0gMDsKLQkJCWVsc2UKLQkJCQlzdGF0dXMgPSAtRVRJTUVET1VUOwotCQl9Ci0JCWlmICh0aW1lb3V0ID4gMCkKLQkJCWRlbF90aW1lcl9zeW5jKCZ0aW1lcik7Ci0JfQotCitvdXQ6CiAJaWYgKGFjdHVhbF9sZW5ndGgpCiAJCSphY3R1YWxfbGVuZ3RoID0gdXJiLT5hY3R1YWxfbGVuZ3RoOworCiAJdXNiX2ZyZWVfdXJiKHVyYik7CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTI2Myw3ICsyNDgsNyBAQAogCiBzdGF0aWMgdm9pZCBzZ19jb21wbGV0ZSAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdHJ1Y3QgdXNiX3NnX3JlcXVlc3QJKmlvID0gKHN0cnVjdCB1c2Jfc2dfcmVxdWVzdCAqKSB1cmItPmNvbnRleHQ7CisJc3RydWN0IHVzYl9zZ19yZXF1ZXN0CSppbyA9IHVyYi0+Y29udGV4dDsKIAogCXNwaW5fbG9jayAoJmlvLT5sb2NrKTsKIApAQCAtOTk5LDggKzk4NCw4IEBACiAJCWVwID0gZGV2LT5lcF9pbltlcG51bV07CiAJCWRldi0+ZXBfaW5bZXBudW1dID0gTlVMTDsKIAl9Ci0JaWYgKGVwICYmIGRldi0+YnVzICYmIGRldi0+YnVzLT5vcCAmJiBkZXYtPmJ1cy0+b3AtPmRpc2FibGUpCi0JCWRldi0+YnVzLT5vcC0+ZGlzYWJsZShkZXYsIGVwKTsKKwlpZiAoZXAgJiYgZGV2LT5idXMpCisJCXVzYl9oY2RfZW5kcG9pbnRfZGlzYWJsZShkZXYsIGVwKTsKIH0KIAogLyoqCkBAIC0xMzgxLDkgKzEzNjYsNiBAQAogCWlmIChjcCAmJiBjb25maWd1cmF0aW9uID09IDApCiAJCWRldl93YXJuKCZkZXYtPmRldiwgImNvbmZpZyAwIGRlc2NyaXB0b3I/P1xuIik7CiAKLQlpZiAoZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfU1VTUEVOREVEKQotCQlyZXR1cm4gLUVIT1NUVU5SRUFDSDsKLQogCS8qIEFsbG9jYXRlIG1lbW9yeSBmb3IgbmV3IGludGVyZmFjZXMgYmVmb3JlIGRvaW5nIGFueXRoaW5nIGVsc2UsCiAJICogc28gdGhhdCBpZiB3ZSBydW4gb3V0IHRoZW4gbm90aGluZyB3aWxsIGhhdmUgY2hhbmdlZC4gKi8KIAluID0gbmludGYgPSAwOwpAQCAtMTQxOCw2ICsxNDAwLDExIEBACiAJCQkJCWNvbmZpZ3VyYXRpb24sIC1pKTsKIAl9CiAKKwkvKiBXYWtlIHVwIHRoZSBkZXZpY2Ugc28gd2UgY2FuIHNlbmQgaXQgdGhlIFNldC1Db25maWcgcmVxdWVzdCAqLworCXJldCA9IHVzYl9hdXRvcmVzdW1lX2RldmljZShkZXYsIDEpOworCWlmIChyZXQpCisJCWdvdG8gZnJlZV9pbnRlcmZhY2VzOworCiAJLyogaWYgaXQncyBhbHJlYWR5IGNvbmZpZ3VyZWQsIGNsZWFyIG91dCBvbGQgc3RhdGUgZmlyc3QuCiAJICogZ2V0dGluZyByaWQgb2Ygb2xkIGludGVyZmFjZXMgbWVhbnMgdW5iaW5kaW5nIHRoZWlyIGRyaXZlcnMuCiAJICovCkBAIC0xNDM3LDYgKzE0MjQsNyBAQAogCWRldi0+YWN0Y29uZmlnID0gY3A7CiAJaWYgKCFjcCkgewogCQl1c2Jfc2V0X2RldmljZV9zdGF0ZShkZXYsIFVTQl9TVEFURV9BRERSRVNTKTsKKwkJdXNiX2F1dG9zdXNwZW5kX2RldmljZShkZXYsIDEpOwogCQlnb3RvIGZyZWVfaW50ZXJmYWNlczsKIAl9CiAJdXNiX3NldF9kZXZpY2Vfc3RhdGUoZGV2LCBVU0JfU1RBVEVfQ09ORklHVVJFRCk7CkBAIC0xNTA1LDkgKzE0OTMsNjkgQEAKIAkJdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChpbnRmKTsKIAl9CiAKKwl1c2JfYXV0b3N1c3BlbmRfZGV2aWNlKGRldiwgMSk7CiAJcmV0dXJuIDA7CiB9CiAKK3N0cnVjdCBzZXRfY29uZmlnX3JlcXVlc3QgeworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCWludAkJCWNvbmZpZzsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKK307CisKKy8qIFdvcmtlciByb3V0aW5lIGZvciB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKCkgKi8KK3N0YXRpYyB2b2lkIGRyaXZlcl9zZXRfY29uZmlnX3dvcmsodm9pZCAqX3JlcSkKK3sKKwlzdHJ1Y3Qgc2V0X2NvbmZpZ19yZXF1ZXN0ICpyZXEgPSBfcmVxOworCisJdXNiX2xvY2tfZGV2aWNlKHJlcS0+dWRldik7CisJdXNiX3NldF9jb25maWd1cmF0aW9uKHJlcS0+dWRldiwgcmVxLT5jb25maWcpOworCXVzYl91bmxvY2tfZGV2aWNlKHJlcS0+dWRldik7CisJdXNiX3B1dF9kZXYocmVxLT51ZGV2KTsKKwlrZnJlZShyZXEpOworfQorCisvKioKKyAqIHVzYl9kcml2ZXJfc2V0X2NvbmZpZ3VyYXRpb24gLSBQcm92aWRlIGEgd2F5IGZvciBkcml2ZXJzIHRvIGNoYW5nZSBkZXZpY2UgY29uZmlndXJhdGlvbnMKKyAqIEB1ZGV2OiB0aGUgZGV2aWNlIHdob3NlIGNvbmZpZ3VyYXRpb24gaXMgYmVpbmcgdXBkYXRlZAorICogQGNvbmZpZzogdGhlIGNvbmZpZ3VyYXRpb24gYmVpbmcgY2hvc2VuLgorICogQ29udGV4dDogSW4gcHJvY2VzcyBjb250ZXh0LCBtdXN0IGJlIGFibGUgdG8gc2xlZXAKKyAqCisgKiBEZXZpY2UgaW50ZXJmYWNlIGRyaXZlcnMgYXJlIG5vdCBhbGxvd2VkIHRvIGNoYW5nZSBkZXZpY2UgY29uZmlndXJhdGlvbnMuCisgKiBUaGlzIGlzIGJlY2F1c2UgY2hhbmdpbmcgY29uZmlndXJhdGlvbnMgd2lsbCBkZXN0cm95IHRoZSBpbnRlcmZhY2UgdGhlCisgKiBkcml2ZXIgaXMgYm91bmQgdG8gYW5kIGNyZWF0ZSBuZXcgb25lczsgaXQgd291bGQgYmUgbGlrZSBhIGZsb3BweS1kaXNrCisgKiBkcml2ZXIgdGVsbGluZyB0aGUgY29tcHV0ZXIgdG8gcmVwbGFjZSB0aGUgZmxvcHB5LWRpc2sgZHJpdmUgd2l0aCBhCisgKiB0YXBlIGRyaXZlIQorICoKKyAqIFN0aWxsLCBpbiBjZXJ0YWluIHNwZWNpYWxpemVkIGNpcmN1bXN0YW5jZXMgdGhlIG5lZWQgbWF5IGFyaXNlLiAgVGhpcworICogcm91dGluZSBnZXRzIGFyb3VuZCB0aGUgbm9ybWFsIHJlc3RyaWN0aW9ucyBieSB1c2luZyBhIHdvcmsgdGhyZWFkIHRvCisgKiBzdWJtaXQgdGhlIGNoYW5nZS1jb25maWcgcmVxdWVzdC4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHJlcXVlc3Qgd2FzIHN1Y2Nlc2Z1bGx5IHF1ZXVlZCwgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKiBUaGUgY2FsbGVyIGhhcyBubyB3YXkgdG8ga25vdyB3aGV0aGVyIHRoZSBxdWV1ZWQgcmVxdWVzdCB3aWxsIGV2ZW50dWFsbHkKKyAqIHN1Y2NlZWQuCisgKi8KK2ludCB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgY29uZmlnKQoreworCXN0cnVjdCBzZXRfY29uZmlnX3JlcXVlc3QgKnJlcTsKKworCXJlcSA9IGttYWxsb2Moc2l6ZW9mKCpyZXEpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXJlcSkKKwkJcmV0dXJuIC1FTk9NRU07CisJcmVxLT51ZGV2ID0gdWRldjsKKwlyZXEtPmNvbmZpZyA9IGNvbmZpZzsKKwlJTklUX1dPUksoJnJlcS0+d29yaywgZHJpdmVyX3NldF9jb25maWdfd29yaywgcmVxKTsKKworCXVzYl9nZXRfZGV2KHVkZXYpOworCWlmICghc2NoZWR1bGVfd29yaygmcmVxLT53b3JrKSkgeworCQl1c2JfcHV0X2Rldih1ZGV2KTsKKwkJa2ZyZWUocmVxKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorRVhQT1JUX1NZTUJPTF9HUEwodXNiX2RyaXZlcl9zZXRfY29uZmlndXJhdGlvbik7CisKIC8vIHN5bmNocm9ub3VzIHJlcXVlc3QgY29tcGxldGlvbiBtb2RlbAogRVhQT1JUX1NZTUJPTCh1c2JfY29udHJvbF9tc2cpOwogRVhQT1JUX1NZTUJPTCh1c2JfYnVsa19tc2cpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvbm90aWZ5LmMKaW5kZXggYjA0MjY3Ni4uNmIzNjg5NyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvY29yZS9ub3RpZnkuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL25vdGlmeS5jCkBAIC01MCw4ICs1MCwxMSBAQAogCiB2b2lkIHVzYl9ub3RpZnlfcmVtb3ZlX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKIHsKKwkvKiBQcm90ZWN0IGFnYWluc3Qgc2ltdWx0YW5lb3VzIHVzYmZzIG9wZW4gKi8KKwltdXRleF9sb2NrKCZ1c2Jmc19tdXRleCk7CiAJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmdXNiX25vdGlmaWVyX2xpc3QsCiAJCQlVU0JfREVWSUNFX1JFTU9WRSwgdWRldik7CisJbXV0ZXhfdW5sb2NrKCZ1c2Jmc19tdXRleCk7CiB9CiAKIHZvaWQgdXNiX25vdGlmeV9hZGRfYnVzKHN0cnVjdCB1c2JfYnVzICp1YnVzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jIGIvZHJpdmVycy91c2IvY29yZS9zeXNmcy5jCmluZGV4IGRlYzk3M2EuLjU1ZDhmNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvc3lzZnMuYworKysgYi9kcml2ZXJzL3VzYi9jb3JlL3N5c2ZzLmMKQEAgLTYwLDcgKzYwLDcgQEAKIHNldF9iQ29uZmlndXJhdGlvblZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAogCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IHVkZXYgPSB0b191c2JfZGV2aWNlIChkZXYpOworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2ID0gdG9fdXNiX2RldmljZSAoZGV2KTsKIAlpbnQJCQljb25maWcsIHZhbHVlOwogCiAJaWYgKHNzY2FuZiAoYnVmLCAiJXUiLCAmY29uZmlnKSAhPSAxIHx8IGNvbmZpZyA+IDI1NSkKQEAgLTE4Niw2ICsxODYsNyBAQAogCiBzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGV2X2F0dHJzW10gPSB7CiAJLyogY3VycmVudCBjb25maWd1cmF0aW9uJ3MgYXR0cmlidXRlcyAqLworCSZkZXZfYXR0cl9jb25maWd1cmF0aW9uLmF0dHIsCiAJJmRldl9hdHRyX2JOdW1JbnRlcmZhY2VzLmF0dHIsCiAJJmRldl9hdHRyX2JDb25maWd1cmF0aW9uVmFsdWUuYXR0ciwKIAkmZGV2X2F0dHJfYm1BdHRyaWJ1dGVzLmF0dHIsCkBAIC0yMDksMjAgKzIxMCw0MCBAQAogCS5hdHRycyA9IGRldl9hdHRycywKIH07CiAKLXZvaWQgdXNiX2NyZWF0ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoraW50IHVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQogewogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZ1ZGV2LT5kZXY7CisJaW50IHJldHZhbDsKIAotCXN5c2ZzX2NyZWF0ZV9ncm91cCgmZGV2LT5rb2JqLCAmZGV2X2F0dHJfZ3JwKTsKKwlyZXR2YWwgPSBzeXNmc19jcmVhdGVfZ3JvdXAoJmRldi0+a29iaiwgJmRldl9hdHRyX2dycCk7CisJaWYgKHJldHZhbCkKKwkJcmV0dXJuIHJldHZhbDsKIAotCWlmICh1ZGV2LT5tYW51ZmFjdHVyZXIpCi0JCWRldmljZV9jcmVhdGVfZmlsZSAoZGV2LCAmZGV2X2F0dHJfbWFudWZhY3R1cmVyKTsKLQlpZiAodWRldi0+cHJvZHVjdCkKLQkJZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9wcm9kdWN0KTsKLQlpZiAodWRldi0+c2VyaWFsKQotCQlkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7Ci0JZGV2aWNlX2NyZWF0ZV9maWxlIChkZXYsICZkZXZfYXR0cl9jb25maWd1cmF0aW9uKTsKLQl1c2JfY3JlYXRlX2VwX2ZpbGVzKGRldiwgJnVkZXYtPmVwMCwgdWRldik7CisJaWYgKHVkZXYtPm1hbnVmYWN0dXJlcikgeworCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX21hbnVmYWN0dXJlcik7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm9yOworCX0KKwlpZiAodWRldi0+cHJvZHVjdCkgeworCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOworCQlpZiAocmV0dmFsKQorCQkJZ290byBlcnJvcjsKKwl9CisJaWYgKHVkZXYtPnNlcmlhbCkgeworCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKGRldiwgJmRldl9hdHRyX3NlcmlhbCk7CisJCWlmIChyZXR2YWwpCisJCQlnb3RvIGVycm9yOworCX0KKwlyZXR2YWwgPSB1c2JfY3JlYXRlX2VwX2ZpbGVzKGRldiwgJnVkZXYtPmVwMCwgdWRldik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXVzYl9yZW1vdmVfZXBfZmlsZXMoJnVkZXYtPmVwMCk7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX21hbnVmYWN0dXJlcik7CisJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX3Byb2R1Y3QpOworCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9zZXJpYWwpOworCXJldHVybiByZXR2YWw7CiB9CiAKIHZvaWQgdXNiX3JlbW92ZV9zeXNmc19kZXZfZmlsZXMgKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQpAQCAtMjM4LDcgKzI1OSw2IEBACiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZkZXZfYXR0cl9wcm9kdWN0KTsKIAlpZiAodWRldi0+c2VyaWFsKQogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfc2VyaWFsKTsKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUgKGRldiwgJmRldl9hdHRyX2NvbmZpZ3VyYXRpb24pOwogfQogCiAvKiBJbnRlcmZhY2UgZmllbGRzICovCkBAIC0zNDAsMTggKzM2MCwyOCBAQAogCQl1c2JfcmVtb3ZlX2VwX2ZpbGVzKCZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXSk7CiB9CiAKLXZvaWQgdXNiX2NyZWF0ZV9zeXNmc19pbnRmX2ZpbGVzIChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKK2ludCB1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmFsdCA9IGludGYtPmN1cl9hbHRzZXR0aW5nOworCWludCByZXR2YWw7CiAKLQlzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmaW50Zl9hdHRyX2dycCk7CisJcmV0dmFsID0gc3lzZnNfY3JlYXRlX2dyb3VwKCZpbnRmLT5kZXYua29iaiwgJmludGZfYXR0cl9ncnApOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CiAKIAlpZiAoYWx0LT5zdHJpbmcgPT0gTlVMTCkKIAkJYWx0LT5zdHJpbmcgPSB1c2JfY2FjaGVfc3RyaW5nKHVkZXYsIGFsdC0+ZGVzYy5pSW50ZXJmYWNlKTsKIAlpZiAoYWx0LT5zdHJpbmcpCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW50ZXJmYWNlKTsKKwkJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOwogCXVzYl9jcmVhdGVfaW50Zl9lcF9maWxlcyhpbnRmLCB1ZGV2KTsKKwlyZXR1cm4gMDsKK2Vycm9yOgorCWlmIChhbHQtPnN0cmluZykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnRlcmZhY2UpOworCXN5c2ZzX3JlbW92ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZpbnRmX2F0dHJfZ3JwKTsKKwl1c2JfcmVtb3ZlX2ludGZfZXBfZmlsZXMoaW50Zik7CisJcmV0dXJuIHJldHZhbDsKIH0KIAogdm9pZCB1c2JfcmVtb3ZlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS91cmIuYyBiL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKaW5kZXggOTg2NDk4OC4uOTgwMWQwOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvdXJiLmMKKysrIGIvZHJpdmVycy91c2IvY29yZS91cmIuYwpAQCAtNTcsNyArNTcsNyBAQAogewogCXN0cnVjdCB1cmIgKnVyYjsKIAotCXVyYiA9IChzdHJ1Y3QgdXJiICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHVyYikgKyAKKwl1cmIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdXJiKSArCiAJCWlzb19wYWNrZXRzICogc2l6ZW9mKHN0cnVjdCB1c2JfaXNvX3BhY2tldF9kZXNjcmlwdG9yKSwKIAkJbWVtX2ZsYWdzKTsKIAlpZiAoIXVyYikgewpAQCAtMjIxLDcgKzIyMSw2IEBACiB7CiAJaW50CQkJcGlwZSwgdGVtcCwgbWF4OwogCXN0cnVjdCB1c2JfZGV2aWNlCSpkZXY7Ci0Jc3RydWN0IHVzYl9vcGVyYXRpb25zCSpvcDsKIAlpbnQJCQlpc19vdXQ7CiAKIAlpZiAoIXVyYiB8fCB1cmItPmhjcHJpdiB8fCAhdXJiLT5jb21wbGV0ZSkKQEAgLTIzMyw4ICsyMzIsNiBAQAogCWlmIChkZXYtPmJ1cy0+Y29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgIT0gUE1fRVZFTlRfT04KIAkJCXx8IGRldi0+c3RhdGUgPT0gVVNCX1NUQVRFX1NVU1BFTkRFRCkKIAkJcmV0dXJuIC1FSE9TVFVOUkVBQ0g7Ci0JaWYgKCEob3AgPSBkZXYtPmJ1cy0+b3ApIHx8ICFvcC0+c3VibWl0X3VyYikKLQkJcmV0dXJuIC1FTk9ERVY7CiAKIAl1cmItPnN0YXR1cyA9IC1FSU5QUk9HUkVTUzsKIAl1cmItPmFjdHVhbF9sZW5ndGggPSAwOwpAQCAtMzc2LDcgKzM3Myw3IEBACiAJCXVyYi0+aW50ZXJ2YWwgPSB0ZW1wOwogCX0KIAotCXJldHVybiBvcC0+c3VibWl0X3VyYiAodXJiLCBtZW1fZmxhZ3MpOworCXJldHVybiB1c2JfaGNkX3N1Ym1pdF91cmIgKHVyYiwgbWVtX2ZsYWdzKTsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KQEAgLTQ0MCw5ICs0MzcsOSBAQAogewogCWlmICghdXJiKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoISh1cmItPmRldiAmJiB1cmItPmRldi0+YnVzICYmIHVyYi0+ZGV2LT5idXMtPm9wKSkKKwlpZiAoISh1cmItPmRldiAmJiB1cmItPmRldi0+YnVzKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0dXJuIHVyYi0+ZGV2LT5idXMtPm9wLT51bmxpbmtfdXJiKHVyYiwgLUVDT05OUkVTRVQpOworCXJldHVybiB1c2JfaGNkX3VubGlua191cmIodXJiLCAtRUNPTk5SRVNFVCk7CiB9CiAKIC8qKgpAQCAtNDY4LDEzICs0NjUsMTMgQEAKIHZvaWQgdXNiX2tpbGxfdXJiKHN0cnVjdCB1cmIgKnVyYikKIHsKIAltaWdodF9zbGVlcCgpOwotCWlmICghKHVyYiAmJiB1cmItPmRldiAmJiB1cmItPmRldi0+YnVzICYmIHVyYi0+ZGV2LT5idXMtPm9wKSkKKwlpZiAoISh1cmIgJiYgdXJiLT5kZXYgJiYgdXJiLT5kZXYtPmJ1cykpCiAJCXJldHVybjsKIAlzcGluX2xvY2tfaXJxKCZ1cmItPmxvY2spOwogCSsrdXJiLT5yZWplY3Q7CiAJc3Bpbl91bmxvY2tfaXJxKCZ1cmItPmxvY2spOwogCi0JdXJiLT5kZXYtPmJ1cy0+b3AtPnVubGlua191cmIodXJiLCAtRU5PRU5UKTsKKwl1c2JfaGNkX3VubGlua191cmIodXJiLCAtRU5PRU5UKTsKIAl3YWl0X2V2ZW50KHVzYl9raWxsX3VyYl9xdWV1ZSwgYXRvbWljX3JlYWQoJnVyYi0+dXNlX2NvdW50KSA9PSAwKTsKIAogCXNwaW5fbG9ja19pcnEoJnVyYi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jIGIvZHJpdmVycy91c2IvY29yZS91c2IuYwppbmRleCAxODRjMjQ2Li5lNGRmOWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CiAKICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KQEAgLTQ3LDYgKzQ4LDggQEAKIAogc3RhdGljIGludCBub3VzYjsJLyogRGlzYWJsZSBVU0Igd2hlbiBidWlsdCBpbnRvIGtlcm5lbCBpbWFnZSAqLwogCitzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqa3N1c3BlbmRfdXNiX3dxOwkvKiBGb3IgYXV0b3N1c3BlbmQgKi8KKwogCiAvKioKICAqIHVzYl9pZm51bV90b19pZiAtIGdldCB0aGUgaW50ZXJmYWNlIG9iamVjdCB3aXRoIGEgZ2l2ZW4gaW50ZXJmYWNlIG51bWJlcgpAQCAtNjcsNyArNzAsOCBAQAogICogRG9uJ3QgY2FsbCB0aGlzIGZ1bmN0aW9uIHVubGVzcyB5b3UgYXJlIGJvdW5kIHRvIG9uZSBvZiB0aGUgaW50ZXJmYWNlcwogICogb24gdGhpcyBkZXZpY2Ugb3IgeW91IGhhdmUgbG9ja2VkIHRoZSBkZXZpY2UhCiAgKi8KLXN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZudW1fdG9faWYoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgaWZudW0pCitzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2lmbnVtX3RvX2lmKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsCisJCQkJICAgICAgdW5zaWduZWQgaWZudW0pCiB7CiAJc3RydWN0IHVzYl9ob3N0X2NvbmZpZyAqY29uZmlnID0gZGV2LT5hY3Rjb25maWc7CiAJaW50IGk7CkBAIC0xMDAsOCArMTA0LDggQEAKICAqIERvbid0IGNhbGwgdGhpcyBmdW5jdGlvbiB1bmxlc3MgeW91IGFyZSBib3VuZCB0byB0aGUgaW50ZiBpbnRlcmZhY2UKICAqIG9yIHlvdSBoYXZlIGxvY2tlZCB0aGUgZGV2aWNlIQogICovCi1zdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICp1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCi0JCXVuc2lnbmVkIGludCBhbHRudW0pCitzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICp1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcoY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCQkJCQkgICAgdW5zaWduZWQgaW50IGFsdG51bSkKIHsKIAlpbnQgaTsKIApAQCAtMTEyLDg3ICsxMTYsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi0vKioKLSAqIHVzYl9kcml2ZXJfY2xhaW1faW50ZXJmYWNlIC0gYmluZCBhIGRyaXZlciB0byBhbiBpbnRlcmZhY2UKLSAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgdG8gYmUgYm91bmQKLSAqIEBpZmFjZTogdGhlIGludGVyZmFjZSB0byB3aGljaCBpdCB3aWxsIGJlIGJvdW5kOyBtdXN0IGJlIGluIHRoZQotICoJdXNiIGRldmljZSdzIGFjdGl2ZSBjb25maWd1cmF0aW9uCi0gKiBAcHJpdjogZHJpdmVyIGRhdGEgYXNzb2NpYXRlZCB3aXRoIHRoYXQgaW50ZXJmYWNlCi0gKgotICogVGhpcyBpcyB1c2VkIGJ5IHVzYiBkZXZpY2UgZHJpdmVycyB0aGF0IG5lZWQgdG8gY2xhaW0gbW9yZSB0aGFuIG9uZQotICogaW50ZXJmYWNlIG9uIGEgZGV2aWNlIHdoZW4gcHJvYmluZyAoYXVkaW8gYW5kIGFjbSBhcmUgY3VycmVudCBleGFtcGxlcykuCi0gKiBObyBkZXZpY2UgZHJpdmVyIHNob3VsZCBkaXJlY3RseSBtb2RpZnkgaW50ZXJuYWwgdXNiX2ludGVyZmFjZSBvcgotICogdXNiX2RldmljZSBzdHJ1Y3R1cmUgbWVtYmVycy4KLSAqCi0gKiBGZXcgZHJpdmVycyBzaG91bGQgbmVlZCB0byB1c2UgdGhpcyByb3V0aW5lLCBzaW5jZSB0aGUgbW9zdCBuYXR1cmFsCi0gKiB3YXkgdG8gYmluZCB0byBhbiBpbnRlcmZhY2UgaXMgdG8gcmV0dXJuIHRoZSBwcml2YXRlIGRhdGEgZnJvbQotICogdGhlIGRyaXZlcidzIHByb2JlKCkgbWV0aG9kLgotICoKLSAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cwotICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIHByb2JlKCkgZW50cmllcyBkb24ndCBuZWVkIGV4dHJhIGxvY2tpbmcsCi0gKiBidXQgb3RoZXIgY2FsbCBjb250ZXh0cyBtYXkgbmVlZCB0byBleHBsaWNpdGx5IGNsYWltIHRob3NlIGxvY2tzLgotICovCi1pbnQgdXNiX2RyaXZlcl9jbGFpbV9pbnRlcmZhY2Uoc3RydWN0IHVzYl9kcml2ZXIgKmRyaXZlciwKLQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UsIHZvaWQqIHByaXYpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7Ci0KLQlpZiAoZGV2LT5kcml2ZXIpCi0JCXJldHVybiAtRUJVU1k7Ci0KLQlkZXYtPmRyaXZlciA9ICZkcml2ZXItPmRyaXZlcjsKLQl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBwcml2KTsKLQlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9CT1VORDsKLQltYXJrX2FjdGl2ZShpZmFjZSk7Ci0KLQkvKiBpZiBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgYWRkZWQsIGJpbmQgbm93OyBlbHNlIGxldAotCSAqIHRoZSBmdXR1cmUgZGV2aWNlX2FkZCgpIGJpbmQgaXQsIGJ5cGFzc2luZyBwcm9iZSgpCi0JICovCi0JaWYgKGRldmljZV9pc19yZWdpc3RlcmVkKGRldikpCi0JCWRldmljZV9iaW5kX2RyaXZlcihkZXYpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZSAtIHVuYmluZCBhIGRyaXZlciBmcm9tIGFuIGludGVyZmFjZQotICogQGRyaXZlcjogdGhlIGRyaXZlciB0byBiZSB1bmJvdW5kCi0gKiBAaWZhY2U6IHRoZSBpbnRlcmZhY2UgZnJvbSB3aGljaCBpdCB3aWxsIGJlIHVuYm91bmQKLSAqCi0gKiBUaGlzIGNhbiBiZSB1c2VkIGJ5IGRyaXZlcnMgdG8gcmVsZWFzZSBhbiBpbnRlcmZhY2Ugd2l0aG91dCB3YWl0aW5nCi0gKiBmb3IgdGhlaXIgZGlzY29ubmVjdCgpIG1ldGhvZHMgdG8gYmUgY2FsbGVkLiAgSW4gdHlwaWNhbCBjYXNlcyB0aGlzCi0gKiBhbHNvIGNhdXNlcyB0aGUgZHJpdmVyIGRpc2Nvbm5lY3QoKSBtZXRob2QgdG8gYmUgY2FsbGVkLgotICoKLSAqIFRoaXMgY2FsbCBpcyBzeW5jaHJvbm91cywgYW5kIG1heSBub3QgYmUgdXNlZCBpbiBhbiBpbnRlcnJ1cHQgY29udGV4dC4KLSAqIENhbGxlcnMgbXVzdCBvd24gdGhlIGRldmljZSBsb2NrIGFuZCB0aGUgZHJpdmVyIG1vZGVsJ3MgdXNiX2J1c190eXBlLnN1YnN5cwotICogd3JpdGVsb2NrLiAgU28gZHJpdmVyIGRpc2Nvbm5lY3QoKSBlbnRyaWVzIGRvbid0IG5lZWQgZXh0cmEgbG9ja2luZywKLSAqIGJ1dCBvdGhlciBjYWxsIGNvbnRleHRzIG1heSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xhaW0gdGhvc2UgbG9ja3MuCi0gKi8KLXZvaWQgdXNiX2RyaXZlcl9yZWxlYXNlX2ludGVyZmFjZShzdHJ1Y3QgdXNiX2RyaXZlciAqZHJpdmVyLAotCQkJCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpCi17Ci0Jc3RydWN0IGRldmljZSAqZGV2ID0gJmlmYWNlLT5kZXY7Ci0KLQkvKiB0aGlzIHNob3VsZCBuZXZlciBoYXBwZW4sIGRvbid0IHJlbGVhc2Ugc29tZXRoaW5nIHRoYXQncyBub3Qgb3VycyAqLwotCWlmICghZGV2LT5kcml2ZXIgfHwgZGV2LT5kcml2ZXIgIT0gJmRyaXZlci0+ZHJpdmVyKQotCQlyZXR1cm47Ci0KLQkvKiBkb24ndCByZWxlYXNlIGZyb20gd2l0aGluIGRpc2Nvbm5lY3QoKSAqLwotCWlmIChpZmFjZS0+Y29uZGl0aW9uICE9IFVTQl9JTlRFUkZBQ0VfQk9VTkQpCi0JCXJldHVybjsKLQotCS8qIGRvbid0IHJlbGVhc2UgaWYgdGhlIGludGVyZmFjZSBoYXNuJ3QgYmVlbiBhZGRlZCB5ZXQgKi8KLQlpZiAoZGV2aWNlX2lzX3JlZ2lzdGVyZWQoZGV2KSkgewotCQlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJJTkRJTkc7Ci0JCWRldmljZV9yZWxlYXNlX2RyaXZlcihkZXYpOwotCX0KLQotCWRldi0+ZHJpdmVyID0gTlVMTDsKLQl1c2Jfc2V0X2ludGZkYXRhKGlmYWNlLCBOVUxMKTsKLQlpZmFjZS0+Y29uZGl0aW9uID0gVVNCX0lOVEVSRkFDRV9VTkJPVU5EOwotCW1hcmtfcXVpZXNjZWQoaWZhY2UpOwotfQotCiBzdHJ1Y3QgZmluZF9pbnRlcmZhY2VfYXJnIHsKIAlpbnQgbWlub3I7CiAJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZTsKQEAgLTIwNCw3ICsxMjcsNyBAQAogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCiAJLyogY2FuJ3QgbG9vayBhdCB1c2IgZGV2aWNlcywgb25seSBpbnRlcmZhY2VzICovCi0JaWYgKGRldi0+ZHJpdmVyID09ICZ1c2JfZ2VuZXJpY19kcml2ZXIpCisJaWYgKGlzX3VzYl9kZXZpY2UoZGV2KSkKIAkJcmV0dXJuIDA7CiAKIAlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwpAQCAtMjI3LDEyNyArMTUwLDE2IEBACiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ZpbmRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsIGludCBtaW5vcikKIHsKIAlzdHJ1Y3QgZmluZF9pbnRlcmZhY2VfYXJnIGFyZ2I7CisJaW50IHJldHZhbDsKIAogCWFyZ2IubWlub3IgPSBtaW5vcjsKIAlhcmdiLmludGVyZmFjZSA9IE5VTEw7Ci0JZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmZHJ2LT5kcml2ZXIsIE5VTEwsICZhcmdiLCBfX2ZpbmRfaW50ZXJmYWNlKTsKKwkvKiBlYXQgdGhlIGVycm9yLCBpdCB3aWxsIGJlIGluIGFyZ2IuaW50ZXJmYWNlICovCisJcmV0dmFsID0gZHJpdmVyX2Zvcl9lYWNoX2RldmljZSgmZHJ2LT5kcnZ3cmFwLmRyaXZlciwgTlVMTCwgJmFyZ2IsCisJCQkJCV9fZmluZF9pbnRlcmZhY2UpOwogCXJldHVybiBhcmdiLmludGVyZmFjZTsKIH0KIAotI2lmZGVmCUNPTkZJR19IT1RQTFVHCi0KLS8qCi0gKiBUaGlzIHNlbmRzIGFuIHVldmVudCB0byB1c2Vyc3BhY2UsIHR5cGljYWxseSBoZWxwaW5nIHRvIGxvYWQgZHJpdmVyCi0gKiBvciBvdGhlciBtb2R1bGVzLCBjb25maWd1cmUgdGhlIGRldmljZSwgYW5kIG1vcmUuICBEcml2ZXJzIGNhbiBwcm92aWRlCi0gKiBhIE1PRFVMRV9ERVZJQ0VfVEFCTEUgdG8gaGVscCB3aXRoIG1vZHVsZSBsb2FkaW5nIHN1YnRhc2tzLgotICoKLSAqIFdlJ3JlIGNhbGxlZCBlaXRoZXIgZnJvbSBraHViZCAodGhlIHR5cGljYWwgY2FzZSkgb3IgZnJvbSByb290IGh1YgotICogKGluaXQsIGthcG1kLCBtb2Rwcm9iZSwgcm1tb2QsIGV0YyksIGJ1dCB0aGUgYWdlbnRzIG5lZWQgdG8gaGFuZGxlCi0gKiBkZWxheXMgaW4gZXZlbnQgZGVsaXZlcnkuICBVc2Ugc3lzZnMgKGFuZCBERVZQQVRIKSB0byBtYWtlIHN1cmUgdGhlCi0gKiBkZXZpY2UgKGFuZCB0aGlzIGNvbmZpZ3VyYXRpb24hKSBhcmUgc3RpbGwgcHJlc2VudC4KLSAqLwotc3RhdGljIGludCB1c2JfdWV2ZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgY2hhciAqKmVudnAsIGludCBudW1fZW52cCwKLQkJICAgICAgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGY7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXY7Ci0Jc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0OwotCWludCBpID0gMDsKLQlpbnQgbGVuZ3RoID0gMDsKLQotCWlmICghZGV2KQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCS8qIGRyaXZlciBpcyBvZnRlbiBudWxsIGhlcmU7IGRldl9kYmcoKSB3b3VsZCBvb3BzICovCi0JcHJfZGVidWcgKCJ1c2IgJXM6IHVldmVudFxuIiwgZGV2LT5idXNfaWQpOwotCi0JLyogTXVzdCBjaGVjayBkcml2ZXJfZGF0YSBoZXJlLCBhcyBvbiByZW1vdmUgZHJpdmVyIGlzIGFsd2F5cyBOVUxMICovCi0JaWYgKChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKSB8fCAKLQkgICAgKGRldi0+ZHJpdmVyX2RhdGEgPT0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhKSkKLQkJcmV0dXJuIDA7Ci0KLQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCXVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2IChpbnRmKTsKLQlhbHQgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKLQotCWlmICh1c2JfZGV2LT5kZXZudW0gPCAwKSB7Ci0JCXByX2RlYnVnICgidXNiICVzOiBhbHJlYWR5IGRlbGV0ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlpZiAoIXVzYl9kZXYtPmJ1cykgewotCQlwcl9kZWJ1ZyAoInVzYiAlczogYnVzIHJlbW92ZWQ/XG4iLCBkZXYtPmJ1c19pZCk7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQotI2lmZGVmCUNPTkZJR19VU0JfREVWSUNFRlMKLQkvKiBJZiB0aGlzIGlzIGF2YWlsYWJsZSwgdXNlcnNwYWNlIHByb2dyYW1zIGNhbiBkaXJlY3RseSByZWFkCi0JICogYWxsIHRoZSBkZXZpY2UgZGVzY3JpcHRvcnMgd2UgZG9uJ3QgdGVsbCB0aGVtIGFib3V0LiAgT3IKLQkgKiBldmVuIGFjdCBhcyB1c2VybW9kZSBkcml2ZXJzLgotCSAqCi0JICogRklYTUUgcmVkdWNlIGhhcmR3aXJlZCBpbnRlbGxpZ2VuY2UgaGVyZQotCSAqLwotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCi0JCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAotCQkJICAgIkRFVklDRT0vcHJvYy9idXMvdXNiLyUwM2QvJTAzZCIsCi0JCQkgICB1c2JfZGV2LT5idXMtPmJ1c251bSwgdXNiX2Rldi0+ZGV2bnVtKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0jZW5kaWYKLQotCS8qIHBlci1kZXZpY2UgY29uZmlndXJhdGlvbnMgYXJlIGNvbW1vbiAqLwotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCi0JCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAotCQkJICAgIlBST0RVQ1Q9JXgvJXgvJXgiLAotCQkJICAgbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCi0JCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSkpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCS8qIGNsYXNzLWJhc2VkIGRyaXZlciBiaW5kaW5nIG1vZGVscyAqLwotCWlmIChhZGRfdWV2ZW50X3ZhcihlbnZwLCBudW1fZW52cCwgJmksCi0JCQkgICBidWZmZXIsIGJ1ZmZlcl9zaXplLCAmbGVuZ3RoLAotCQkJICAgIlRZUEU9JWQvJWQvJWQiLAotCQkJICAgdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlQ2xhc3MsCi0JCQkgICB1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VTdWJDbGFzcywKLQkJCSAgIHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVByb3RvY29sKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52cCwgbnVtX2VudnAsICZpLAotCQkJICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKLQkJCSAgICJJTlRFUkZBQ0U9JWQvJWQvJWQiLAotCQkJICAgYWx0LT5kZXNjLmJJbnRlcmZhY2VDbGFzcywKLQkJCSAgIGFsdC0+ZGVzYy5iSW50ZXJmYWNlU3ViQ2xhc3MsCi0JCQkgICBhbHQtPmRlc2MuYkludGVyZmFjZVByb3RvY29sKSkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQlpZiAoYWRkX3VldmVudF92YXIoZW52cCwgbnVtX2VudnAsICZpLAotCQkJICAgYnVmZmVyLCBidWZmZXJfc2l6ZSwgJmxlbmd0aCwKLQkJCSAgICJNT0RBTElBUz11c2I6diUwNFhwJTA0WGQlMDRYZGMlMDJYZHNjJTAyWGRwJTAyWGljJTAyWGlzYyUwMlhpcCUwMlgiLAotCQkJICAgbGUxNl90b19jcHUodXNiX2Rldi0+ZGVzY3JpcHRvci5pZFZlbmRvciksCi0JCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCksCi0JCQkgICBsZTE2X3RvX2NwdSh1c2JfZGV2LT5kZXNjcmlwdG9yLmJjZERldmljZSksCi0JCQkgICB1c2JfZGV2LT5kZXNjcmlwdG9yLmJEZXZpY2VDbGFzcywKLQkJCSAgIHVzYl9kZXYtPmRlc2NyaXB0b3IuYkRldmljZVN1YkNsYXNzLAotCQkJICAgdXNiX2Rldi0+ZGVzY3JpcHRvci5iRGV2aWNlUHJvdG9jb2wsCi0JCQkgICBhbHQtPmRlc2MuYkludGVyZmFjZUNsYXNzLAotCQkJICAgYWx0LT5kZXNjLmJJbnRlcmZhY2VTdWJDbGFzcywKLQkJCSAgIGFsdC0+ZGVzYy5iSW50ZXJmYWNlUHJvdG9jb2wpKQotCQlyZXR1cm4gLUVOT01FTTsKLQotCWVudnBbaV0gPSBOVUxMOwotCi0JcmV0dXJuIDA7Ci19Ci0KLSNlbHNlCi0KLXN0YXRpYyBpbnQgdXNiX3VldmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAotCQkJaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSkKLXsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotI2VuZGlmCS8qIENPTkZJR19IT1RQTFVHICovCi0KIC8qKgogICogdXNiX3JlbGVhc2VfZGV2IC0gZnJlZSBhIHVzYiBkZXZpY2Ugc3RydWN0dXJlIHdoZW4gYWxsIHVzZXJzIG9mIGl0IGFyZSBmaW5pc2hlZC4KICAqIEBkZXY6IGRldmljZSB0aGF0J3MgYmVlbiBkaXNjb25uZWN0ZWQKQEAgLTM2MSwxNCArMTczLDYwIEBACiAKIAl1ZGV2ID0gdG9fdXNiX2RldmljZShkZXYpOwogCisjaWZkZWYJQ09ORklHX1VTQl9TVVNQRU5ECisJY2FuY2VsX2RlbGF5ZWRfd29yaygmdWRldi0+YXV0b3N1c3BlbmQpOworCWZsdXNoX3dvcmtxdWV1ZShrc3VzcGVuZF91c2Jfd3EpOworI2VuZGlmCiAJdXNiX2Rlc3Ryb3lfY29uZmlndXJhdGlvbih1ZGV2KTsKLQl1c2JfYnVzX3B1dCh1ZGV2LT5idXMpOworCXVzYl9wdXRfaGNkKGJ1c190b19oY2QodWRldi0+YnVzKSk7CiAJa2ZyZWUodWRldi0+cHJvZHVjdCk7CiAJa2ZyZWUodWRldi0+bWFudWZhY3R1cmVyKTsKIAlrZnJlZSh1ZGV2LT5zZXJpYWwpOwogCWtmcmVlKHVkZXYpOwogfQogCisjaWZkZWYJQ09ORklHX1BNCisKK3N0YXRpYyBpbnQga3N1c3BlbmRfdXNiX2luaXQodm9pZCkKK3sKKwlrc3VzcGVuZF91c2Jfd3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgia3N1c3BlbmRfdXNiZCIpOworCWlmICgha3N1c3BlbmRfdXNiX3dxKQorCQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQga3N1c3BlbmRfdXNiX2NsZWFudXAodm9pZCkKK3sKKwlkZXN0cm95X3dvcmtxdWV1ZShrc3VzcGVuZF91c2Jfd3EpOworfQorCisjZWxzZQorCisjZGVmaW5lIGtzdXNwZW5kX3VzYl9pbml0KCkJMAorI2RlZmluZSBrc3VzcGVuZF91c2JfY2xlYW51cCgpCWRvIHt9IHdoaWxlICgwKQorCisjZW5kaWYKKworI2lmZGVmCUNPTkZJR19VU0JfU1VTUEVORAorCisvKiB1c2JfYXV0b3N1c3BlbmRfd29yayAtIGNhbGxiYWNrIHJvdXRpbmUgdG8gYXV0b3N1c3BlbmQgYSBVU0IgZGV2aWNlICovCitzdGF0aWMgdm9pZCB1c2JfYXV0b3N1c3BlbmRfd29yayh2b2lkICpfdWRldikKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldiA9IF91ZGV2OworCisJdXNiX3BtX2xvY2sodWRldik7CisJdWRldi0+YXV0b19wbSA9IDE7CisJdXNiX3N1c3BlbmRfYm90aCh1ZGV2LCBQTVNHX1NVU1BFTkQpOworCXVzYl9wbV91bmxvY2sodWRldik7Cit9CisKKyNlbHNlCisKK3N0YXRpYyB2b2lkIHVzYl9hdXRvc3VzcGVuZF93b3JrKHZvaWQgKl91ZGV2KQore30KKworI2VuZGlmCisKIC8qKgogICogdXNiX2FsbG9jX2RldiAtIHVzYiBkZXZpY2UgY29uc3RydWN0b3IgKHVzYmNvcmUtaW50ZXJuYWwpCiAgKiBAcGFyZW50OiBodWIgdG8gd2hpY2ggZGV2aWNlIGlzIGNvbm5lY3RlZDsgbnVsbCB0byBhbGxvY2F0ZSBhIHJvb3QgaHViCkBAIC0zOTAsOCArMjQ4LDcgQEAKIAlpZiAoIWRldikKIAkJcmV0dXJuIE5VTEw7CiAKLQlidXMgPSB1c2JfYnVzX2dldChidXMpOwotCWlmICghYnVzKSB7CisJaWYgKCF1c2JfZ2V0X2hjZChidXNfdG9faGNkKGJ1cykpKSB7CiAJCWtmcmVlKGRldik7CiAJCXJldHVybiBOVUxMOwogCX0KQEAgLTM5OSwxMSArMjU2LDEyIEBACiAJZGV2aWNlX2luaXRpYWxpemUoJmRldi0+ZGV2KTsKIAlkZXYtPmRldi5idXMgPSAmdXNiX2J1c190eXBlOwogCWRldi0+ZGV2LmRtYV9tYXNrID0gYnVzLT5jb250cm9sbGVyLT5kbWFfbWFzazsKLQlkZXYtPmRldi5kcml2ZXJfZGF0YSA9ICZ1c2JfZ2VuZXJpY19kcml2ZXJfZGF0YTsKLQlkZXYtPmRldi5kcml2ZXIgPSAmdXNiX2dlbmVyaWNfZHJpdmVyOwogCWRldi0+ZGV2LnJlbGVhc2UgPSB1c2JfcmVsZWFzZV9kZXY7CiAJZGV2LT5zdGF0ZSA9IFVTQl9TVEFURV9BVFRBQ0hFRDsKIAorCS8qIFRoaXMgbWFnaWMgYXNzaWdubWVudCBkaXN0aW5ndWlzaGVzIGRldmljZXMgZnJvbSBpbnRlcmZhY2VzICovCisJZGV2LT5kZXYucGxhdGZvcm1fZGF0YSA9ICZ1c2JfZ2VuZXJpY19kcml2ZXI7CisKIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5lcDAudXJiX2xpc3QpOwogCWRldi0+ZXAwLmRlc2MuYkxlbmd0aCA9IFVTQl9EVF9FTkRQT0lOVF9TSVpFOwogCWRldi0+ZXAwLmRlc2MuYkRlc2NyaXB0b3JUeXBlID0gVVNCX0RUX0VORFBPSU5UOwpAQCAtNDQ0LDYgKzMwMiwxMCBAQAogCWRldi0+cGFyZW50ID0gcGFyZW50OwogCUlOSVRfTElTVF9IRUFEKCZkZXYtPmZpbGVsaXN0KTsKIAorI2lmZGVmCUNPTkZJR19QTQorCW11dGV4X2luaXQoJmRldi0+cG1fbXV0ZXgpOworCUlOSVRfV09SSygmZGV2LT5hdXRvc3VzcGVuZCwgdXNiX2F1dG9zdXNwZW5kX3dvcmssIGRldik7CisjZW5kaWYKIAlyZXR1cm4gZGV2OwogfQogCkBAIC01NDksNyArNDExLDcgQEAKICAqIGNhc2UgdGhlIGRyaXZlciBhbHJlYWR5IG93bnMgdGhlIGRldmljZSBsb2NrLikKICAqLwogaW50IHVzYl9sb2NrX2RldmljZV9mb3JfcmVzZXQoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsCi0JCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCB1c2JfaW50ZXJmYWNlICppZmFjZSkKIHsKIAl1bnNpZ25lZCBsb25nIGppZmZpZXNfZXhwaXJlID0gamlmZmllcyArIEhaOwogCkBAIC02NzIsNyArNTM0LDEzOSBAQAogICovCiBpbnQgdXNiX2dldF9jdXJyZW50X2ZyYW1lX251bWJlcihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KQogewotCXJldHVybiBkZXYtPmJ1cy0+b3AtPmdldF9mcmFtZV9udW1iZXIgKGRldik7CisJcmV0dXJuIHVzYl9oY2RfZ2V0X2ZyYW1lX251bWJlciAoZGV2KTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfZGlyX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBJTiBkaXJlY3Rpb24KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgSU4sIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9kaXJfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBPVVQgZGlyZWN0aW9uCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIE9VVCwgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK2ludCB1c2JfZW5kcG9pbnRfZGlyX291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKChlcGQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9idWxrIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgYnVsaywgb3RoZXJ3aXNlIGl0IHJldHVybnMgZmFsc2UuCisgKi8KK2ludCB1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEspOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF94ZmVyX2ludCAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBoYXMgaW50ZXJydXB0IHRyYW5zZmVyIHR5cGUKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGlzIG9mIHR5cGUgaW50ZXJydXB0LCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK2ludCB1c2JfZW5kcG9pbnRfeGZlcl9pbnQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICgoZXBkLT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0KKwkJVVNCX0VORFBPSU5UX1hGRVJfSU5UKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfeGZlcl9pc29jIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGhhcyBpc29jaHJvbm91cyB0cmFuc2ZlciB0eXBlCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBpcyBvZiB0eXBlIGlzb2Nocm9ub3VzLCBvdGhlcndpc2UgaXQgcmV0dXJucworICogZmFsc2UuCisgKi8KK2ludCB1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAoKGVwZC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09CisJCVVTQl9FTkRQT0lOVF9YRkVSX0lTT0MpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19idWxrX2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGJ1bGsgSU4KKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitpbnQgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9idWxrKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgYnVsayBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBidWxrIHRyYW5zZmVyIHR5cGUgYW5kIE9VVCBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCkKK3sKKwlyZXR1cm4gKHVzYl9lbmRwb2ludF94ZmVyX2J1bGsoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaW50X2luIC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGludGVycnVwdCB0cmFuc2ZlciB0eXBlIGFuZCBJTiBkaXJlY3Rpb24sCisgKiBvdGhlcndpc2UgaXQgcmV0dXJucyBmYWxzZS4KKyAqLworaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX2luKGVwZCkpOworfQorCisvKioKKyAqIHVzYl9lbmRwb2ludF9pc19pbnRfb3V0IC0gY2hlY2sgaWYgdGhlIGVuZHBvaW50IGlzIGludGVycnVwdCBPVVQKKyAqIEBlcGQ6IGVuZHBvaW50IHRvIGJlIGNoZWNrZWQKKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIGVuZHBvaW50IGhhcyBpbnRlcnJ1cHQgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitpbnQgdXNiX2VuZHBvaW50X2lzX2ludF9vdXQoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pbnQoZXBkKSAmJiB1c2JfZW5kcG9pbnRfZGlyX291dChlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19pbiAtIGNoZWNrIGlmIHRoZSBlbmRwb2ludCBpcyBpc29jaHJvbm91cyBJTgorICogQGVwZDogZW5kcG9pbnQgdG8gYmUgY2hlY2tlZAorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgZW5kcG9pbnQgaGFzIGlzb2Nocm9ub3VzIHRyYW5zZmVyIHR5cGUgYW5kIElOIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2NfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpCit7CisJcmV0dXJuICh1c2JfZW5kcG9pbnRfeGZlcl9pc29jKGVwZCkgJiYgdXNiX2VuZHBvaW50X2Rpcl9pbihlcGQpKTsKK30KKworLyoqCisgKiB1c2JfZW5kcG9pbnRfaXNfaXNvY19vdXQgLSBjaGVjayBpZiB0aGUgZW5kcG9pbnQgaXMgaXNvY2hyb25vdXMgT1VUCisgKiBAZXBkOiBlbmRwb2ludCB0byBiZSBjaGVja2VkCisgKgorICogUmV0dXJucyB0cnVlIGlmIHRoZSBlbmRwb2ludCBoYXMgaXNvY2hyb25vdXMgdHJhbnNmZXIgdHlwZSBhbmQgT1VUIGRpcmVjdGlvbiwKKyAqIG90aGVyd2lzZSBpdCByZXR1cm5zIGZhbHNlLgorICovCitpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKQoreworCXJldHVybiAodXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlcGQpICYmIHVzYl9lbmRwb2ludF9kaXJfb3V0KGVwZCkpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpAQCAtNzM3LDkgKzczMSw5IEBACiAJZG1hX2FkZHJfdCAqZG1hCiApCiB7Ci0JaWYgKCFkZXYgfHwgIWRldi0+YnVzIHx8ICFkZXYtPmJ1cy0+b3AgfHwgIWRldi0+YnVzLT5vcC0+YnVmZmVyX2FsbG9jKQorCWlmICghZGV2IHx8ICFkZXYtPmJ1cykKIAkJcmV0dXJuIE5VTEw7Ci0JcmV0dXJuIGRldi0+YnVzLT5vcC0+YnVmZmVyX2FsbG9jIChkZXYtPmJ1cywgc2l6ZSwgbWVtX2ZsYWdzLCBkbWEpOworCXJldHVybiBoY2RfYnVmZmVyX2FsbG9jIChkZXYtPmJ1cywgc2l6ZSwgbWVtX2ZsYWdzLCBkbWEpOwogfQogCiAvKioKQEAgLTc2MCw5ICs3NTQsMTEgQEAKIAlkbWFfYWRkcl90IGRtYQogKQogewotCWlmICghZGV2IHx8ICFkZXYtPmJ1cyB8fCAhZGV2LT5idXMtPm9wIHx8ICFkZXYtPmJ1cy0+b3AtPmJ1ZmZlcl9mcmVlKQotCSAgICAJcmV0dXJuOwotCWRldi0+YnVzLT5vcC0+YnVmZmVyX2ZyZWUgKGRldi0+YnVzLCBzaXplLCBhZGRyLCBkbWEpOworCWlmICghZGV2IHx8ICFkZXYtPmJ1cykKKwkJcmV0dXJuOworCWlmICghYWRkcikKKwkJcmV0dXJuOworCWhjZF9idWZmZXJfZnJlZSAoZGV2LT5idXMsIHNpemUsIGFkZHIsIGRtYSk7CiB9CiAKIC8qKgpAQCAtOTExLDggKzkwNyw4IEBACiAgKgogICogUmV2ZXJzZSB0aGUgZWZmZWN0IG9mIHRoaXMgY2FsbCB3aXRoIHVzYl9idWZmZXJfdW5tYXBfc2coKS4KICAqLwotaW50IHVzYl9idWZmZXJfbWFwX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMpCitpbnQgdXNiX2J1ZmZlcl9tYXBfc2coY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzKQogewogCXN0cnVjdCB1c2JfYnVzCQkqYnVzOwogCXN0cnVjdCBkZXZpY2UJCSpjb250cm9sbGVyOwpAQCAtOTQ2LDggKzk0Miw4IEBACiAgKiBVc2UgdGhpcyB3aGVuIHlvdSBhcmUgcmUtdXNpbmcgYSBzY2F0dGVybGlzdCdzIGRhdGEgYnVmZmVycyBmb3IKICAqIGFub3RoZXIgVVNCIHJlcXVlc3QuCiAgKi8KLXZvaWQgdXNiX2J1ZmZlcl9kbWFzeW5jX3NnIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAotCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKQordm9pZCB1c2JfYnVmZmVyX2RtYXN5bmNfc2coY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJCSAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuX2h3X2VudHMpCiB7CiAJc3RydWN0IHVzYl9idXMJCSpidXM7CiAJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CkBAIC05NzIsOCArOTY4LDggQEAKICAqCiAgKiBSZXZlcnNlcyB0aGUgZWZmZWN0IG9mIHVzYl9idWZmZXJfbWFwX3NnKCkuCiAgKi8KLXZvaWQgdXNiX2J1ZmZlcl91bm1hcF9zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cykKK3ZvaWQgdXNiX2J1ZmZlcl91bm1hcF9zZyhjb25zdCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQkJIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuX2h3X2VudHMpCiB7CiAJc3RydWN0IHVzYl9idXMJCSpidXM7CiAJc3RydWN0IGRldmljZQkJKmNvbnRyb2xsZXI7CkBAIC05ODgsMTE2ICs5ODQsNiBAQAogCQkJdXNiX3BpcGVpbiAocGlwZSkgPyBETUFfRlJPTV9ERVZJQ0UgOiBETUFfVE9fREVWSUNFKTsKIH0KIAotc3RhdGljIGludCB2ZXJpZnlfc3VzcGVuZGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqdW51c2VkKQotewotCWlmIChkZXYtPmRyaXZlciA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gKGRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPT0gUE1fRVZFTlRfT04pID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCB1c2JfZ2VuZXJpY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0Jc3RydWN0IHVzYl9kcml2ZXIJKmRyaXZlcjsKLQlpbnQJCQlzdGF0dXM7Ci0KLQkvKiBVU0IgZGV2aWNlcyBlbnRlciBTVVNQRU5EIHN0YXRlIHRocm91Z2ggdGhlaXIgaHVicywgYnV0IGNhbiBiZQotCSAqIG1hcmtlZCBmb3IgRlJFRVpFIGFzIHNvb24gYXMgdGhlaXIgY2hpbGRyZW4gYXJlIGFscmVhZHkgaWRsZWQuCi0JICogQnV0IHRob3NlIHNlbWFudGljcyBhcmUgdXNlbGVzcywgc28gd2UgZXF1YXRlIHRoZSB0d28gKHNpZ2gpLgotCSAqLwotCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKSB7Ci0JCWlmIChkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IG1lc3NhZ2UuZXZlbnQpCi0JCQlyZXR1cm4gMDsKLQkJLyogd2UgbmVlZCB0byBydWxlIG91dCBib2d1cyByZXF1ZXN0cyB0aHJvdWdoIHN5c2ZzICovCi0JCXN0YXR1cyA9IGRldmljZV9mb3JfZWFjaF9jaGlsZChkZXYsIE5VTEwsIHZlcmlmeV9zdXNwZW5kZWQpOwotCQlpZiAoc3RhdHVzKQotCQkJcmV0dXJuIHN0YXR1czsKLSAJCXJldHVybiB1c2Jfc3VzcGVuZF9kZXZpY2UgKHRvX3VzYl9kZXZpY2UoZGV2KSk7Ci0JfQotCi0JaWYgKChkZXYtPmRyaXZlciA9PSBOVUxMKSB8fAotCSAgICAoZGV2LT5kcml2ZXJfZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGEpKQotCQlyZXR1cm4gMDsKLQotCWludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0JZHJpdmVyID0gdG9fdXNiX2RyaXZlcihkZXYtPmRyaXZlcik7Ci0KLQkvKiB3aXRoIG5vIGhhcmR3YXJlLCBVU0IgaW50ZXJmYWNlcyBvbmx5IHVzZSBGUkVFWkUgYW5kIE9OIHN0YXRlcyAqLwotCWlmICghaXNfYWN0aXZlKGludGYpKQotCQlyZXR1cm4gMDsKLQotCWlmIChkcml2ZXItPnN1c3BlbmQgJiYgZHJpdmVyLT5yZXN1bWUpIHsKLQkJc3RhdHVzID0gZHJpdmVyLT5zdXNwZW5kKGludGYsIG1lc3NhZ2UpOwotCQlpZiAoc3RhdHVzKQotCQkJZGV2X2VycihkZXYsICIlcyBlcnJvciAlZFxuIiwgInN1c3BlbmQiLCBzdGF0dXMpOwotCQllbHNlCi0JCQltYXJrX3F1aWVzY2VkKGludGYpOwotCX0gZWxzZSB7Ci0JCS8vIEZJWE1FIGVsc2UgaWYgdGhlcmUncyBubyBzdXNwZW5kIG1ldGhvZCwgZGlzY29ubmVjdC4uLgotCQlkZXZfd2FybihkZXYsICJubyBzdXNwZW5kIGZvciBkcml2ZXIgJXM/XG4iLCBkcml2ZXItPm5hbWUpOwotCQltYXJrX3F1aWVzY2VkKGludGYpOwotCQlzdGF0dXMgPSAwOwotCX0KLQlyZXR1cm4gc3RhdHVzOwotfQotCi1zdGF0aWMgaW50IHVzYl9nZW5lcmljX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UJKmludGY7Ci0Jc3RydWN0IHVzYl9kcml2ZXIJKmRyaXZlcjsKLQlzdHJ1Y3QgdXNiX2RldmljZQkqdWRldjsKLQlpbnQJCQlzdGF0dXM7Ci0KLQlpZiAoZGV2LT5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTikKLQkJcmV0dXJuIDA7Ci0KLQkvKiBtYXJrIHRoaW5ncyBhcyAib24iIGltbWVkaWF0ZWx5LCBubyBtYXR0ZXIgd2hhdCBlcnJvcnMgY3JvcCB1cCAqLwotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUuZXZlbnQgPSBQTV9FVkVOVF9PTjsKLQotCS8qIGRldmljZXMgcmVzdW1lIHRocm91Z2ggdGhlaXIgaHVicyAqLwotCWlmIChkZXYtPmRyaXZlciA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyKSB7Ci0JCXVkZXYgPSB0b191c2JfZGV2aWNlKGRldik7Ci0JCWlmICh1ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpCi0JCQlyZXR1cm4gMDsKLQkJcmV0dXJuIHVzYl9yZXN1bWVfZGV2aWNlICh0b191c2JfZGV2aWNlKGRldikpOwotCX0KLQotCWlmICgoZGV2LT5kcml2ZXIgPT0gTlVMTCkgfHwKLQkgICAgKGRldi0+ZHJpdmVyX2RhdGEgPT0gJnVzYl9nZW5lcmljX2RyaXZlcl9kYXRhKSkgewotCQlkZXYtPnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID0gUE1fRVZFTlRfRlJFRVpFOwotCQlyZXR1cm4gMDsKLQl9Ci0KLQlpbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwotCWRyaXZlciA9IHRvX3VzYl9kcml2ZXIoZGV2LT5kcml2ZXIpOwotCi0JdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7Ci0JaWYgKHVkZXYtPnN0YXRlID09IFVTQl9TVEFURV9OT1RBVFRBQ0hFRCkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBpZiBkcml2ZXIgd2FzIHN1c3BlbmRlZCwgaXQgaGFzIGEgcmVzdW1lIG1ldGhvZDsKLQkgKiBob3dldmVyLCBzeXNmcyBjYW4gd3JvbmdseSBtYXJrIHRoaW5ncyBhcyBzdXNwZW5kZWQKLQkgKiAob24gdGhlICJubyBzdXNwZW5kIG1ldGhvZCIgRklYTUUgcGF0aCBhYm92ZSkKLQkgKi8KLQlpZiAoZHJpdmVyLT5yZXN1bWUpIHsKLQkJc3RhdHVzID0gZHJpdmVyLT5yZXN1bWUoaW50Zik7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoZGV2LCAiJXMgZXJyb3IgJWRcbiIsICJyZXN1bWUiLCBzdGF0dXMpOwotCQkJbWFya19xdWllc2NlZChpbnRmKTsKLQkJfQotCX0gZWxzZQotCQlkZXZfd2FybihkZXYsICJubyByZXN1bWUgZm9yIGRyaXZlciAlcz9cbiIsIGRyaXZlci0+bmFtZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0cnVjdCBidXNfdHlwZSB1c2JfYnVzX3R5cGUgPSB7Ci0JLm5hbWUgPQkJInVzYiIsCi0JLm1hdGNoID0JdXNiX2RldmljZV9tYXRjaCwKLQkudWV2ZW50ID0JdXNiX3VldmVudCwKLQkuc3VzcGVuZCA9CXVzYl9nZW5lcmljX3N1c3BlbmQsCi0JLnJlc3VtZSA9CXVzYl9nZW5lcmljX3Jlc3VtZSwKLX07Ci0KIC8qIGZvcm1hdCB0byBkaXNhYmxlIFVTQiBvbiBrZXJuZWwgY29tbWFuZCBsaW5lIGlzOiBub3VzYiAqLwogX19tb2R1bGVfcGFyYW1fY2FsbCgiIiwgbm91c2IsIHBhcmFtX3NldF9ib29sLCBwYXJhbV9nZXRfYm9vbCwgJm5vdXNiLCAwNDQ0KTsKIApAQCAtMTEyMCw5ICsxMDA2LDEyIEBACiAJCXJldHVybiAwOwogCX0KIAorCXJldHZhbCA9IGtzdXNwZW5kX3VzYl9pbml0KCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBvdXQ7CiAJcmV0dmFsID0gYnVzX3JlZ2lzdGVyKCZ1c2JfYnVzX3R5cGUpOwogCWlmIChyZXR2YWwpIAotCQlnb3RvIG91dDsKKwkJZ290byBidXNfcmVnaXN0ZXJfZmFpbGVkOwogCXJldHZhbCA9IHVzYl9ob3N0X2luaXQoKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIGhvc3RfaW5pdF9mYWlsZWQ7CkBAIC0xMTQxLDcgKzEwMzAsNyBAQAogCXJldHZhbCA9IHVzYl9odWJfaW5pdCgpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gaHViX2luaXRfZmFpbGVkOwotCXJldHZhbCA9IGRyaXZlcl9yZWdpc3RlcigmdXNiX2dlbmVyaWNfZHJpdmVyKTsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2aWNlX2RyaXZlcigmdXNiX2dlbmVyaWNfZHJpdmVyLCBUSElTX01PRFVMRSk7CiAJaWYgKCFyZXR2YWwpCiAJCWdvdG8gb3V0OwogCkBAIC0xMTU4LDYgKzEwNDcsOCBAQAogCXVzYl9ob3N0X2NsZWFudXAoKTsKIGhvc3RfaW5pdF9mYWlsZWQ6CiAJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CitidXNfcmVnaXN0ZXJfZmFpbGVkOgorCWtzdXNwZW5kX3VzYl9jbGVhbnVwKCk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTExNzEsNyArMTA2Miw3IEBACiAJaWYgKG5vdXNiKQogCQlyZXR1cm47CiAKLQlkcml2ZXJfdW5yZWdpc3RlcigmdXNiX2dlbmVyaWNfZHJpdmVyKTsKKwl1c2JfZGVyZWdpc3Rlcl9kZXZpY2VfZHJpdmVyKCZ1c2JfZ2VuZXJpY19kcml2ZXIpOwogCXVzYl9tYWpvcl9jbGVhbnVwKCk7CiAJdXNiZnNfY2xlYW51cCgpOwogCXVzYl9kZXJlZ2lzdGVyKCZ1c2Jmc19kcml2ZXIpOwpAQCAtMTE3OSw2ICsxMDcwLDcgQEAKIAl1c2JfaHViX2NsZWFudXAoKTsKIAl1c2JfaG9zdF9jbGVhbnVwKCk7CiAJYnVzX3VucmVnaXN0ZXIoJnVzYl9idXNfdHlwZSk7CisJa3N1c3BlbmRfdXNiX2NsZWFudXAoKTsKIH0KIAogc3Vic3lzX2luaXRjYWxsKHVzYl9pbml0KTsKQEAgLTEyMDEsMjAgKzEwOTMsMjcgQEAKIAogRVhQT1JUX1NZTUJPTCh1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KTsKIAotRVhQT1JUX1NZTUJPTCh1c2JfZHJpdmVyX2NsYWltX2ludGVyZmFjZSk7Ci1FWFBPUlRfU1lNQk9MKHVzYl9kcml2ZXJfcmVsZWFzZV9pbnRlcmZhY2UpOwogRVhQT1JUX1NZTUJPTCh1c2JfZmluZF9pbnRlcmZhY2UpOwogRVhQT1JUX1NZTUJPTCh1c2JfaWZudW1fdG9faWYpOwogRVhQT1JUX1NZTUJPTCh1c2JfYWx0bnVtX3RvX2FsdHNldHRpbmcpOwogCi1FWFBPUlRfU1lNQk9MKHVzYl9yZXNldF9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTCh1c2JfcmVzZXRfY29tcG9zaXRlX2RldmljZSk7Ci0KIEVYUE9SVF9TWU1CT0woX191c2JfZ2V0X2V4dHJhX2Rlc2NyaXB0b3IpOwogCiBFWFBPUlRfU1lNQk9MKHVzYl9maW5kX2RldmljZSk7CiBFWFBPUlRfU1lNQk9MKHVzYl9nZXRfY3VycmVudF9mcmFtZV9udW1iZXIpOwogCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZW5kcG9pbnRfZGlyX2luKTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lbmRwb2ludF9kaXJfb3V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lbmRwb2ludF94ZmVyX2J1bGspOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X3hmZXJfaW50KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lbmRwb2ludF94ZmVyX2lzb2MpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4pOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KTsKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9lbmRwb2ludF9pc19pbnRfaW4pOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X2lzX2ludF9vdXQpOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X2lzX2lzb2NfaW4pOworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KTsKKwogRVhQT1JUX1NZTUJPTCAodXNiX2J1ZmZlcl9hbGxvYyk7CiBFWFBPUlRfU1lNQk9MICh1c2JfYnVmZmVyX2ZyZWUpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oIGIvZHJpdmVycy91c2IvY29yZS91c2IuaAppbmRleCA0OWY2OTIzLi5mNjlkZjEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9jb3JlL3VzYi5oCisrKyBiL2RyaXZlcnMvdXNiL2NvcmUvdXNiLmgKQEAgLTEsMTAgKzEsMTAgQEAKIC8qIEZ1bmN0aW9ucyBsb2NhbCB0byBkcml2ZXJzL3VzYi9jb3JlLyAqLwogCi1leHRlcm4gdm9pZCB1c2JfY3JlYXRlX3N5c2ZzX2Rldl9maWxlcyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYl9jcmVhdGVfc3lzZnNfZGV2X2ZpbGVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKIGV4dGVybiB2b2lkIHVzYl9yZW1vdmVfc3lzZnNfZGV2X2ZpbGVzIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIHVzYl9jcmVhdGVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworZXh0ZXJuIGludCB1c2JfY3JlYXRlX3N5c2ZzX2ludGZfZmlsZXMgKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKTsKIGV4dGVybiB2b2lkIHVzYl9yZW1vdmVfc3lzZnNfaW50Zl9maWxlcyAoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOwotZXh0ZXJuIHZvaWQgdXNiX2NyZWF0ZV9lcF9maWxlcyhzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZW5kcG9pbnQsCitleHRlcm4gaW50IHVzYl9jcmVhdGVfZXBfZmlsZXMoc3RydWN0IGRldmljZSAqcGFyZW50LCBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVuZHBvaW50LAogCQkJCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KTsKIGV4dGVybiB2b2lkIHVzYl9yZW1vdmVfZXBfZmlsZXMoc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplbmRwb2ludCk7CiAKQEAgLTIwLDcgKzIwLDYgQEAKIGV4dGVybiBpbnQgdXNiX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBjb25maWd1cmF0aW9uKTsKIAogZXh0ZXJuIHZvaWQgdXNiX2tpY2tfa2h1YmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCB1c2Jfc3VzcGVuZF9yb290X2h1YihzdHJ1Y3QgdXNiX2RldmljZSAqaGRldik7CiBleHRlcm4gdm9pZCB1c2JfcmVzdW1lX3Jvb3RfaHViKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwogCiBleHRlcm4gaW50ICB1c2JfaHViX2luaXQodm9pZCk7CkBAIC0zMCwyOCArMjksOTEgQEAKIGV4dGVybiBpbnQgdXNiX2hvc3RfaW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHVzYl9ob3N0X2NsZWFudXAodm9pZCk7CiAKLWV4dGVybiBpbnQgdXNiX3N1c3BlbmRfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYpOwotZXh0ZXJuIGludCB1c2JfcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKyNpZmRlZglDT05GSUdfUE0KIAotZXh0ZXJuIHN0cnVjdCBkZXZpY2VfZHJpdmVyIHVzYl9nZW5lcmljX2RyaXZlcjsKLWV4dGVybiBpbnQgdXNiX2dlbmVyaWNfZHJpdmVyX2RhdGE7Ci1leHRlcm4gaW50IHVzYl9kZXZpY2VfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KTsKK2V4dGVybiBpbnQgdXNiX3N1c3BlbmRfYm90aChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgcG1fbWVzc2FnZV90IG1zZyk7CitleHRlcm4gaW50IHVzYl9yZXN1bWVfYm90aChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CitleHRlcm4gaW50IHVzYl9wb3J0X3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHVzYl9wb3J0X3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2KTsKKworc3RhdGljIGlubGluZSB2b2lkIHVzYl9wbV9sb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCW11dGV4X2xvY2tfbmVzdGVkKCZ1ZGV2LT5wbV9tdXRleCwgdWRldi0+bGV2ZWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdXNiX3BtX3VubG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikKK3sKKwltdXRleF91bmxvY2soJnVkZXYtPnBtX211dGV4KTsKK30KKworI2Vsc2UKKworI2RlZmluZSB1c2Jfc3VzcGVuZF9ib3RoKHVkZXYsIG1zZykJMAorc3RhdGljIGlubGluZSBpbnQgdXNiX3Jlc3VtZV9ib3RoKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KQoreworCXJldHVybiAwOworfQorI2RlZmluZSB1c2JfcG9ydF9zdXNwZW5kKGRldikJCTAKKyNkZWZpbmUgdXNiX3BvcnRfcmVzdW1lKGRldikJCTAKK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcG1fbG9jayhzdHJ1Y3QgdXNiX2RldmljZSAqdWRldikge30KK3N0YXRpYyBpbmxpbmUgdm9pZCB1c2JfcG1fdW5sb2NrKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2KSB7fQorCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfU1VTUEVORAorCisjZGVmaW5lIFVTQl9BVVRPU1VTUEVORF9ERUxBWQkoSFoqMikKKworZXh0ZXJuIHZvaWQgdXNiX2F1dG9zdXNwZW5kX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGRlY19idXN5X2NudCk7CitleHRlcm4gaW50IHVzYl9hdXRvcmVzdW1lX2RldmljZShzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgaW50IGluY19idXN5X2NudCk7CisKKyNlbHNlCisKKyNkZWZpbmUgdXNiX2F1dG9zdXNwZW5kX2RldmljZSh1ZGV2LCBkZWNfYnVzeV9jbnQpCWRvIHt9IHdoaWxlICgwKQorc3RhdGljIGlubGluZSBpbnQgdXNiX2F1dG9yZXN1bWVfZGV2aWNlKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAorCQlpbnQgaW5jX2J1c3lfY250KQoreworCXJldHVybiAwOworfQorCisjZW5kaWYKKworZXh0ZXJuIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICprc3VzcGVuZF91c2Jfd3E7CitleHRlcm4gc3RydWN0IGJ1c190eXBlIHVzYl9idXNfdHlwZTsKK2V4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIgdXNiX2dlbmVyaWNfZHJpdmVyOworCisvKiBIZXJlJ3MgaG93IHdlIHRlbGwgYXBhcnQgZGV2aWNlcyBhbmQgaW50ZXJmYWNlcy4gIEx1Y2tpbHkgdGhlcmUncworICogbm8gc3VjaCB0aGluZyBhcyBhIHBsYXRmb3JtIFVTQiBkZXZpY2UsIHNvIHdlIGNhbiBzdGVhbCB0aGUgdXNlCisgKiBvZiB0aGUgcGxhdGZvcm1fZGF0YSBmaWVsZC4gKi8KKworc3RhdGljIGlubGluZSBpbnQgaXNfdXNiX2RldmljZShjb25zdCBzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJcmV0dXJuIGRldi0+cGxhdGZvcm1fZGF0YSA9PSAmdXNiX2dlbmVyaWNfZHJpdmVyOworfQorCisvKiBEbyB0aGUgc2FtZSBmb3IgZGV2aWNlIGRyaXZlcnMgYW5kIGludGVyZmFjZSBkcml2ZXJzLiAqLworCitzdGF0aWMgaW5saW5lIGludCBpc191c2JfZGV2aWNlX2RyaXZlcihzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZHJ2LCBzdHJ1Y3QgdXNiZHJ2X3dyYXAsIGRyaXZlciktPgorCQkJZm9yX2RldmljZXM7Cit9CiAKIC8qIEludGVyZmFjZXMgYW5kIHRoZWlyICJwb3dlciBzdGF0ZSIgYXJlIG93bmVkIGJ5IHVzYmNvcmUgKi8KIAogc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYWN0aXZlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpmKQogewotCWYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9IFBNX0VWRU5UX09OOworCWYtPmlzX2FjdGl2ZSA9IDE7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX3F1aWVzY2VkKHN0cnVjdCB1c2JfaW50ZXJmYWNlICpmKQogewotCWYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9IFBNX0VWRU5UX0ZSRUVaRTsKKwlmLT5pc19hY3RpdmUgPSAwOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCitzdGF0aWMgaW5saW5lIGludCBpc19hY3RpdmUoY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmYpCiB7Ci0JcmV0dXJuIGYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9PTjsKKwlyZXR1cm4gZi0+aXNfYWN0aXZlOwogfQogCiAKQEAgLTU5LDkgKzEyMSwxMCBAQAogZXh0ZXJuIGNvbnN0IGNoYXIgKnVzYmNvcmVfbmFtZTsKIAogLyogdXNiZnMgc3R1ZmYgKi8KK2V4dGVybiBzdHJ1Y3QgbXV0ZXggdXNiZnNfbXV0ZXg7CiBleHRlcm4gc3RydWN0IHVzYl9kcml2ZXIgdXNiZnNfZHJpdmVyOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlc19mb3BzOwotZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXNiZnNfZGV2aWNlX2ZpbGVfb3BlcmF0aW9uczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZXNfZm9wczsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYmZzX2RldmljZV9maWxlX29wZXJhdGlvbnM7CiBleHRlcm4gdm9pZCB1c2Jmc19jb25uX2Rpc2NfZXZlbnQodm9pZCk7CiAKIGV4dGVybiBpbnQgdXNiZGV2X2luaXQodm9pZCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCmluZGV4IDFhMzJkOTYuLjhlNWRkNmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9LY29uZmlnCkBAIC0yNiw3ICsyNiw3IEBACiAJICAgeW91IG5lZWQgYSBsb3cgbGV2ZWwgYnVzIGNvbnRyb2xsZXIgZHJpdmVyLCBhbmQgc29tZSBzb2Z0d2FyZQogCSAgIHRhbGtpbmcgdG8gaXQuICBQZXJpcGhlcmFsIGNvbnRyb2xsZXJzIGFyZSBvZnRlbiBkaXNjcmV0ZSBzaWxpY29uLAogCSAgIG9yIGFyZSBpbnRlZ3JhdGVkIHdpdGggdGhlIENQVSBpbiBhIG1pY3JvY29udHJvbGxlci4gIFRoZSBtb3JlCi0JICAgZmFtaWxpYXIgaG9zdCBzaWRlIGNvbnRyb2xsZXJzIGhhdmUgbmFtZXMgbGlrZSBsaWtlICJFSENJIiwgIk9IQ0kiLAorCSAgIGZhbWlsaWFyIGhvc3Qgc2lkZSBjb250cm9sbGVycyBoYXZlIG5hbWVzIGxpa2UgIkVIQ0kiLCAiT0hDSSIsCiAJICAgb3IgIlVIQ0kiLCBhbmQgYXJlIHVzdWFsbHkgaW50ZWdyYXRlZCBpbnRvIHNvdXRoYnJpZGdlcyBvbiBQQwogCSAgIG1vdGhlcmJvYXJkcy4KIApAQCAtNDA0LDYgKzQwNCwyMCBAQAogCSAgd2hpY2ggaW5jbHVkZXMgaW5zdHJ1Y3Rpb25zIGFuZCBhICJkcml2ZXIgaW5mbyBmaWxlIiBuZWVkZWQgdG8KIAkgIG1ha2UgTVMtV2luZG93cyB3b3JrIHdpdGggdGhpcyBkcml2ZXIuCiAKK2NvbmZpZyBVU0JfTUlESV9HQURHRVQKKwl0cmlzdGF0ZSAiTUlESSBHYWRnZXQgKEVYUEVSSU1FTlRBTCkiCisJZGVwZW5kcyBvbiBTTkQgJiYgRVhQRVJJTUVOVEFMCisJc2VsZWN0IFNORF9SQVdNSURJCisJaGVscAorCSAgVGhlIE1JREkgR2FkZ2V0IGFjdHMgYXMgYSBVU0IgQXVkaW8gZGV2aWNlLCB3aXRoIG9uZSBNSURJCisJICBpbnB1dCBhbmQgb25lIE1JREkgb3V0cHV0LiBUaGVzZSBNSURJIGphY2tzIGFwcGVhciBhcworCSAgYSBzb3VuZCAiY2FyZCIgaW4gdGhlIEFMU0Egc291bmQgc3lzdGVtLiBPdGhlciBNSURJCisJICBjb25uZWN0aW9ucyBjYW4gdGhlbiBiZSBtYWRlIG9uIHRoZSBnYWRnZXQgc3lzdGVtLCB1c2luZworCSAgQUxTQSdzIGFjb25uZWN0IHV0aWxpdHkgZXRjLgorCisJICBTYXkgInkiIHRvIGxpbmsgdGhlIGRyaXZlciBzdGF0aWNhbGx5LCBvciAibSIgdG8gYnVpbGQgYQorCSAgZHluYW1pY2FsbHkgbGlua2VkIG1vZHVsZSBjYWxsZWQgImdfbWlkaSIuCisKIAogIyBwdXQgZHJpdmVycyB0aGF0IG5lZWQgaXNvY2hyb25vdXMgdHJhbnNmZXIgc3VwcG9ydCAoZm9yIGF1ZGlvCiAjIG9yIHZpZGVvIGNsYXNzIGdhZGdldCBkcml2ZXJzKSwgb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGhlcmUuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKaW5kZXggNWEyOGU2MTMuLmU3MWUwODYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvTWFrZWZpbGUKQEAgLTE1LDYgKzE1LDcgQEAKIGdfemVyby1vYmpzCQkJOj0gemVyby5vIHVzYnN0cmluZy5vIGNvbmZpZy5vIGVwYXV0b2NvbmYubwogZ19ldGhlci1vYmpzCQkJOj0gZXRoZXIubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KIGdfc2VyaWFsLW9ianMJCQk6PSBzZXJpYWwubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KK2dfbWlkaS1vYmpzCQkJOj0gZ21pZGkubyB1c2JzdHJpbmcubyBjb25maWcubyBlcGF1dG9jb25mLm8KIGdhZGdldGZzLW9ianMJCQk6PSBpbm9kZS5vCiBnX2ZpbGVfc3RvcmFnZS1vYmpzCQk6PSBmaWxlX3N0b3JhZ2UubyB1c2JzdHJpbmcubyBjb25maWcubyBcCiAJCQkJCWVwYXV0b2NvbmYubwpAQCAtMjgsNCArMjksNSBAQAogb2JqLSQoQ09ORklHX1VTQl9HQURHRVRGUykJKz0gZ2FkZ2V0ZnMubwogb2JqLSQoQ09ORklHX1VTQl9GSUxFX1NUT1JBR0UpCSs9IGdfZmlsZV9zdG9yYWdlLm8KIG9iai0kKENPTkZJR19VU0JfR19TRVJJQUwpCSs9IGdfc2VyaWFsLm8KK29iai0kKENPTkZJR19VU0JfTUlESV9HQURHRVQpCSs9IGdfbWlkaS5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9hdDkxX3VkYy5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKaW5kZXggY2ZlYmNhMC4uNzdiZWJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2F0OTFfdWRjLmMKQEAgLTI0Nyw3ICsyNDcsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3VkY19zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKIAkub3BlbgkJPSBwcm9jX3VkY19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApAQCAtMTY1OCw3ICsxNjU4LDcgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oQVQ5MV9CQVNFX1VEUCwgU1pfMTZLLCBkcml2ZXJfbmFtZSkpIHsKKwlpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbihBVDkxUk05MjAwX0JBU0VfVURQLCBTWl8xNkssIGRyaXZlcl9uYW1lKSkgewogCQlEQkcoInNvbWVvbmUncyB1c2luZyBVREMgbWVtb3J5XG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CkBAIC0xNzIwLDcgKzE3MjAsNyBAQAogZmFpbDE6CiAJZGV2aWNlX3VucmVnaXN0ZXIoJnVkYy0+Z2FkZ2V0LmRldik7CiBmYWlsMDoKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MV9CQVNFX1VEUCwgU1pfMTZLKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1VEUCwgU1pfMTZLKTsKIAlEQkcoIiVzIHByb2JlIGZhaWxlZCwgJWRcbiIsIGRyaXZlcl9uYW1lLCByZXR2YWwpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0xNzQyLDcgKzE3NDIsNyBAQAogCQlmcmVlX2lycSh1ZGMtPmJvYXJkLnZidXNfcGluLCB1ZGMpOwogCWZyZWVfaXJxKHVkYy0+dWRwX2lycSwgdWRjKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmdWRjLT5nYWRnZXQuZGV2KTsKLQlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MV9CQVNFX1VEUCwgU1pfMTZLKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oQVQ5MVJNOTIwMF9CQVNFX1VEUCwgU1pfMTZLKTsKIAogCWNsa19wdXQodWRjLT5pY2xrKTsKIAljbGtfcHV0KHVkYy0+ZmNsayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZHVtbXlfaGNkLmMKaW5kZXggN2QxYzIyYy4uNGQyOTQ2ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2R1bW15X2hjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9kdW1teV9oY2QuYwpAQCAtODE2LDE1ICs4MTYsMTQgQEAKIAlkdW0tPmdhZGdldC5kZXYuZHJpdmVyID0gJmRyaXZlci0+ZHJpdmVyOwogCWRldl9kYmcgKHVkY19kZXYoZHVtKSwgImJpbmRpbmcgZ2FkZ2V0IGRyaXZlciAnJXMnXG4iLAogCQkJZHJpdmVyLT5kcml2ZXIubmFtZSk7Ci0JaWYgKChyZXR2YWwgPSBkcml2ZXItPmJpbmQgKCZkdW0tPmdhZGdldCkpICE9IDApIHsKLQkJZHVtLT5kcml2ZXIgPSBOVUxMOwotCQlkdW0tPmdhZGdldC5kZXYuZHJpdmVyID0gTlVMTDsKLQkJcmV0dXJuIHJldHZhbDsKLQl9CisJaWYgKChyZXR2YWwgPSBkcml2ZXItPmJpbmQgKCZkdW0tPmdhZGdldCkpICE9IDApCisJCWdvdG8gZXJyX2JpbmRfZ2FkZ2V0OwogCiAJZHJpdmVyLT5kcml2ZXIuYnVzID0gZHVtLT5nYWRnZXQuZGV2LnBhcmVudC0+YnVzOwotCWRyaXZlcl9yZWdpc3RlciAoJmRyaXZlci0+ZHJpdmVyKTsKLQlkZXZpY2VfYmluZF9kcml2ZXIgKCZkdW0tPmdhZGdldC5kZXYpOworCWlmICgocmV0dmFsID0gZHJpdmVyX3JlZ2lzdGVyICgmZHJpdmVyLT5kcml2ZXIpKSAhPSAwKQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKwlpZiAoKHJldHZhbCA9IGRldmljZV9iaW5kX2RyaXZlciAoJmR1bS0+Z2FkZ2V0LmRldikpICE9IDApCisJCWdvdG8gZXJyX2JpbmRfZHJpdmVyOwogCiAJLyoga2h1YmQgd2lsbCBlbnVtZXJhdGUgdGhpcyBpbiBhIHdoaWxlICovCiAJc3Bpbl9sb2NrX2lycSAoJmR1bS0+bG9jayk7CkBAIC04MzQsNiArODMzLDE5IEBACiAKIAl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzIChkdW1teV90b19oY2QgKGR1bSkpOwogCXJldHVybiAwOworCitlcnJfYmluZF9kcml2ZXI6CisJZHJpdmVyX3VucmVnaXN0ZXIgKCZkcml2ZXItPmRyaXZlcik7CitlcnJfcmVnaXN0ZXI6CisJZHJpdmVyLT51bmJpbmQgKCZkdW0tPmdhZGdldCk7CisJc3Bpbl9sb2NrX2lycSAoJmR1bS0+bG9jayk7CisJZHVtLT5wdWxsdXAgPSAwOworCXNldF9saW5rX3N0YXRlIChkdW0pOworCXNwaW5fdW5sb2NrX2lycSAoJmR1bS0+bG9jayk7CitlcnJfYmluZF9nYWRnZXQ6CisJZHVtLT5kcml2ZXIgPSBOVUxMOworCWR1bS0+Z2FkZ2V0LmRldi5kcml2ZXIgPSBOVUxMOworCXJldHVybiByZXR2YWw7CiB9CiBFWFBPUlRfU1lNQk9MICh1c2JfZ2FkZ2V0X3JlZ2lzdGVyX2RyaXZlcik7CiAKQEAgLTg4OSwxMSArOTAxLDkgQEAKIHN0YXRpYyB2b2lkCiBkdW1teV9nYWRnZXRfcmVsZWFzZSAoc3RydWN0IGRldmljZSAqZGV2KQogewotI2lmIDAJCS8qIHVzYl9idXNfcHV0IGlzbid0IEVYUE9SVGVkISAqLwogCXN0cnVjdCBkdW1teQkqZHVtID0gZ2FkZ2V0X2Rldl90b19kdW1teSAoZGV2KTsKIAotCXVzYl9idXNfcHV0ICgmZHVtbXlfdG9faGNkIChkdW0pLT5zZWxmKTsKLSNlbmRpZgorCXVzYl9wdXRfaGNkIChkdW1teV90b19oY2QgKGR1bSkpOwogfQogCiBzdGF0aWMgaW50IGR1bW15X3VkY19wcm9iZSAoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKQEAgLTkxNSwxMiArOTI1LDEyIEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0jaWYgMAkJLyogdXNiX2J1c19nZXQgaXNuJ3QgRVhQT1JUZWQhICovCi0JdXNiX2J1c19nZXQgKCZkdW1teV90b19oY2QgKGR1bSktPnNlbGYpOwotI2VuZGlmCisJdXNiX2dldF9oY2QgKGR1bW15X3RvX2hjZCAoZHVtKSk7CiAKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YSAocGRldiwgZHVtKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUgKCZkdW0tPmdhZGdldC5kZXYsICZkZXZfYXR0cl9mdW5jdGlvbik7CisJaWYgKHJjIDwgMCkKKwkJZGV2aWNlX3VucmVnaXN0ZXIgKCZkdW0tPmdhZGdldC5kZXYpOwogCXJldHVybiByYzsKIH0KIApAQCAtMTg2OCw4ICsxODc4LDcgQEAKICNlbmRpZgogCiAJLyogRklYTUUgJ3VyYnMnIHNob3VsZCBiZSBhIHBlci1kZXZpY2UgdGhpbmcsIG1heWJlIGluIHVzYmNvcmUgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGUgKGR1bW15X2RldihkdW0pLCAmZGV2X2F0dHJfdXJicyk7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGRldmljZV9jcmVhdGVfZmlsZSAoZHVtbXlfZGV2KGR1bSksICZkZXZfYXR0cl91cmJzKTsKIH0KIAogc3RhdGljIHZvaWQgZHVtbXlfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9ldGhlci5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKaW5kZXggMzAyOTljNi4uMzY2ZGMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2V0aGVyLmMKQEAgLTI2Miw3ICsyNjIsNyBAQAogI2RlZmluZSBERVZfQ09ORklHX0NEQwogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfVVNCX0dBREdFVF9NVVNCSERSQworI2lmZGVmIENPTkZJR19VU0JfR0FER0VUX01VU0JfSERSQwogI2RlZmluZSBERVZfQ09ORklHX0NEQwogI2VuZGlmCiAKQEAgLTIwMTQsNyArMjAxNCw3IEBACiBzdGF0aWMgaW50IHJuZGlzX2NvbnRyb2xfYWNrIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQogewogCXN0cnVjdCBldGhfZGV2ICAgICAgICAgICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOwotCXUzMiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBsZW5ndGg7CiAJc3RydWN0IHVzYl9yZXF1ZXN0ICAgICAgKnJlc3AgPSBkZXYtPnN0YXRfcmVxOwogCiAJLyogaW4gY2FzZSBSTkRJUyBjYWxscyB0aGlzIGFmdGVyIGRpc2Nvbm5lY3QgKi8KQEAgLTIyMzAsNiArMjIzMCw5IEBACiAJaWYgKGdhZGdldF9pc19weGEgKGdhZGdldCkpIHsKIAkJLyogcHhhIGRvZXNuJ3Qgc3VwcG9ydCBhbHRzZXR0aW5ncyAqLwogCQljZGMgPSAwOworCX0gZWxzZSBpZiAoZ2FkZ2V0X2lzX211c2JoZHJjKGdhZGdldCkpIHsKKwkJLyogcmVkdWNlIHR4IGRtYSBvdmVyaGVhZCBieSBhdm9pZGluZyBzcGVjaWFsIGNhc2VzICovCisJCXpscCA9IDA7CiAJfSBlbHNlIGlmIChnYWRnZXRfaXNfc2goZ2FkZ2V0KSkgewogCQkvKiBzaCBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUgaW50ZXJmYWNlcyBvciBjb25maWdzICovCiAJCWNkYyA9IDA7CkBAIC0yNTY0LDcgKzI1NjcsNyBAQAogCiAJLmZ1bmN0aW9uCT0gKGNoYXIgKikgZHJpdmVyX2Rlc2MsCiAJLmJpbmQJCT0gZXRoX2JpbmQsCi0JLnVuYmluZAkJPSBfX2V4aXRfcChldGhfdW5iaW5kKSwKKwkudW5iaW5kCQk9IGV0aF91bmJpbmQsCiAKIAkuc2V0dXAJCT0gZXRoX3NldHVwLAogCS5kaXNjb25uZWN0CT0gZXRoX2Rpc2Nvbm5lY3QsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZmlsZV9zdG9yYWdlLmMKaW5kZXggOGQ3ZjFlOC4uYzgzZDNiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2ZpbGVfc3RvcmFnZS5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9maWxlX3N0b3JhZ2UuYwpAQCAtNTY3LDYgKzU2Nyw3IEBACiAJdW5zaWduZWQgaW50CXJvIDogMTsKIAl1bnNpZ25lZCBpbnQJcHJldmVudF9tZWRpdW1fcmVtb3ZhbCA6IDE7CiAJdW5zaWduZWQgaW50CXJlZ2lzdGVyZWQgOiAxOworCXVuc2lnbmVkIGludAlpbmZvX3ZhbGlkIDogMTsKIAogCXUzMgkJc2Vuc2VfZGF0YTsKIAl1MzIJCXNlbnNlX2RhdGFfaW5mbzsKQEAgLTE2NTYsNiArMTY1Nyw3IEBACiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQogCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwogCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMTsKIAkJCWJoLT5pbnJlcS0+bGVuZ3RoID0gMDsKIAkJCWJoLT5zdGF0ZSA9IEJVRl9TVEFURV9GVUxMOwogCQkJYnJlYWs7CkBAIC0xNjkxLDYgKzE2OTMsNyBAQAogCQlpZiAobnJlYWQgPCBhbW91bnQpIHsKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX1VOUkVDT1ZFUkVEX1JFQURfRVJST1I7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IGZpbGVfb2Zmc2V0ID4+IDk7CisJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtMTc4NSw2ICsxNzg4LDcgQEAKIAkJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQogCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwogCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gdXNiX29mZnNldCA+PiA5OworCQkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDE7CiAJCQkJY29udGludWU7CiAJCQl9CiAJCQlhbW91bnQgLT0gKGFtb3VudCAmIDUxMSk7CkBAIC0xODI3LDYgKzE4MzEsNyBAQAogCQkJaWYgKGJoLT5vdXRyZXEtPnN0YXR1cyAhPSAwKSB7CiAJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfQ09NTVVOSUNBVElPTl9GQUlMVVJFOwogCQkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gZmlsZV9vZmZzZXQgPj4gOTsKKwkJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAxOwogCQkJCWJyZWFrOwogCQkJfQogCkBAIC0xODY4LDYgKzE4NzMsNyBAQAogCQkJaWYgKG53cml0dGVuIDwgYW1vdW50KSB7CiAJCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gU1NfV1JJVEVfRVJST1I7CiAJCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDE7CiAJCQkJYnJlYWs7CiAJCQl9CiAKQEAgLTIwMTAsNiArMjAxNiw3IEBACiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPQogCQkJCQlTU19MT0dJQ0FMX0JMT0NLX0FERFJFU1NfT1VUX09GX1JBTkdFOwogCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMTsKIAkJCWJyZWFrOwogCQl9CiAKQEAgLTIwMzYsNiArMjA0Myw3IEBACiAJCWlmIChucmVhZCA9PSAwKSB7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19VTlJFQ09WRVJFRF9SRUFEX0VSUk9SOwogCQkJY3VybHVuLT5zZW5zZV9kYXRhX2luZm8gPSBmaWxlX29mZnNldCA+PiA5OworCQkJY3VybHVuLT5pbmZvX3ZhbGlkID0gMTsKIAkJCWJyZWFrOwogCQl9CiAJCWZpbGVfb2Zmc2V0ICs9IG5yZWFkOwpAQCAtMjA3OSw2ICsyMDg3LDcgQEAKIAlzdHJ1Y3QgbHVuCSpjdXJsdW4gPSBmc2ctPmN1cmx1bjsKIAl1OAkJKmJ1ZiA9ICh1OCAqKSBiaC0+YnVmOwogCXUzMgkJc2QsIHNkaW5mbzsKKwlpbnQJCXZhbGlkOwogCiAJLyoKIAkgKiBGcm9tIHRoZSBTQ1NJLTIgc3BlYy4sIHNlY3Rpb24gNy45IChVbml0IGF0dGVudGlvbiBjb25kaXRpb24pOgpAQCAtMjEwNiwxNSArMjExNSwxOCBAQAogCQlmc2ctPmJhZF9sdW5fb2theSA9IDE7CiAJCXNkID0gU1NfTE9HSUNBTF9VTklUX05PVF9TVVBQT1JURUQ7CiAJCXNkaW5mbyA9IDA7CisJCXZhbGlkID0gMDsKIAl9IGVsc2UgewogCQlzZCA9IGN1cmx1bi0+c2Vuc2VfZGF0YTsKIAkJc2RpbmZvID0gY3VybHVuLT5zZW5zZV9kYXRhX2luZm87CisJCXZhbGlkID0gY3VybHVuLT5pbmZvX3ZhbGlkIDw8IDc7CiAJCWN1cmx1bi0+c2Vuc2VfZGF0YSA9IFNTX05PX1NFTlNFOwogCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IDA7CisJCWN1cmx1bi0+aW5mb192YWxpZCA9IDA7CiAJfQogCiAJbWVtc2V0KGJ1ZiwgMCwgMTgpOwotCWJ1ZlswXSA9IDB4ODAgfCAweDcwOwkJCS8vIFZhbGlkLCBjdXJyZW50IGVycm9yCisJYnVmWzBdID0gdmFsaWQgfCAweDcwOwkJCS8vIFZhbGlkLCBjdXJyZW50IGVycm9yCiAJYnVmWzJdID0gU0soc2QpOwogCXB1dF9iZTMyKCZidWZbM10sIHNkaW5mbyk7CQkvLyBTZW5zZSBpbmZvcm1hdGlvbgogCWJ1Zls3XSA9IDE4IC0gODsJCQkvLyBBZGRpdGlvbmFsIHNlbnNlIGxlbmd0aApAQCAtMjcwMyw2ICsyNzE1LDcgQEAKIAkJaWYgKGZzZy0+Y21uZFswXSAhPSBTQ19SRVFVRVNUX1NFTlNFKSB7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGEgPSBTU19OT19TRU5TRTsKIAkJCWN1cmx1bi0+c2Vuc2VfZGF0YV9pbmZvID0gMDsKKwkJCWN1cmx1bi0+aW5mb192YWxpZCA9IDA7CiAJCX0KIAl9IGVsc2UgewogCQlmc2ctPmN1cmx1biA9IGN1cmx1biA9IE5VTEw7CkBAIC0zMzMyLDYgKzMzNDUsNyBAQAogCQkJY3VybHVuLT5zZW5zZV9kYXRhID0gY3VybHVuLT51bml0X2F0dGVudGlvbl9kYXRhID0KIAkJCQkJU1NfTk9fU0VOU0U7CiAJCQljdXJsdW4tPnNlbnNlX2RhdGFfaW5mbyA9IDA7CisJCQljdXJsdW4tPmluZm9fdmFsaWQgPSAwOwogCQl9CiAJCWZzZy0+c3RhdGUgPSBGU0dfU1RBVEVfSURMRTsKIAl9CkBAIC0zODczLDIxICszODg3LDI2IEBACiAJZm9yIChpID0gMDsgaSA8IGZzZy0+bmx1bnM7ICsraSkgewogCQljdXJsdW4gPSAmZnNnLT5sdW5zW2ldOwogCQljdXJsdW4tPnJvID0gbW9kX2RhdGEucm9baV07CisJCWN1cmx1bi0+ZGV2LnJlbGVhc2UgPSBsdW5fcmVsZWFzZTsKIAkJY3VybHVuLT5kZXYucGFyZW50ID0gJmdhZGdldC0+ZGV2OwogCQljdXJsdW4tPmRldi5kcml2ZXIgPSAmZnNnX2RyaXZlci5kcml2ZXI7CiAJCWRldl9zZXRfZHJ2ZGF0YSgmY3VybHVuLT5kZXYsIGZzZyk7CiAJCXNucHJpbnRmKGN1cmx1bi0+ZGV2LmJ1c19pZCwgQlVTX0lEX1NJWkUsCiAJCQkJIiVzLWx1biVkIiwgZ2FkZ2V0LT5kZXYuYnVzX2lkLCBpKTsKIAotCQlpZiAoKHJjID0gZGV2aWNlX3JlZ2lzdGVyKCZjdXJsdW4tPmRldikpICE9IDApCisJCWlmICgocmMgPSBkZXZpY2VfcmVnaXN0ZXIoJmN1cmx1bi0+ZGV2KSkgIT0gMCkgewogCQkJSU5GTyhmc2csICJmYWlsZWQgdG8gcmVnaXN0ZXIgTFVOJWQ6ICVkXG4iLCBpLCByYyk7Ci0JCWVsc2UgewotCQkJY3VybHVuLT5yZWdpc3RlcmVkID0gMTsKLQkJCWN1cmx1bi0+ZGV2LnJlbGVhc2UgPSBsdW5fcmVsZWFzZTsKLQkJCWRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsICZkZXZfYXR0cl9ybyk7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LCAmZGV2X2F0dHJfZmlsZSk7Ci0JCQlrcmVmX2dldCgmZnNnLT5yZWYpOworCQkJZ290byBvdXQ7CiAJCX0KKwkJaWYgKChyYyA9IGRldmljZV9jcmVhdGVfZmlsZSgmY3VybHVuLT5kZXYsCisJCQkJCSZkZXZfYXR0cl9ybykpICE9IDAgfHwKKwkJCQkocmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmN1cmx1bi0+ZGV2LAorCQkJCQkmZGV2X2F0dHJfZmlsZSkpICE9IDApIHsKKwkJCWRldmljZV91bnJlZ2lzdGVyKCZjdXJsdW4tPmRldik7CisJCQlnb3RvIG91dDsKKwkJfQorCQljdXJsdW4tPnJlZ2lzdGVyZWQgPSAxOworCQlrcmVmX2dldCgmZnNnLT5yZWYpOwogCiAJCWlmIChtb2RfZGF0YS5maWxlW2ldICYmICptb2RfZGF0YS5maWxlW2ldKSB7CiAJCQlpZiAoKHJjID0gb3Blbl9iYWNraW5nX2ZpbGUoY3VybHVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvZ21pZGkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNjhjZWNkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2dtaWRpLmMKQEAgLTAsMCArMSwxMzM3IEBACisvKgorICogZ21pZGkuYyAtLSBVU0IgTUlESSBHYWRnZXQgRHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRodW10cm9uaWNzIFB0eSBMdGQuCisgKiBEZXZlbG9wZWQgZm9yIFRodW10cm9uaWNzIGJ5IEdyZXkgSW5ub3ZhdGlvbgorICogQmVuIFdpbGxpYW1zb24gPGJlbi53aWxsaWFtc29uQGdyZXlpbm5vdmF0aW9uLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGNvZGUgaXMgYmFzZWQgaW4gcGFydCBvbjoKKyAqCisgKiBHYWRnZXQgWmVybyBkcml2ZXIsIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IERhdmlkIEJyb3duZWxsLgorICogVVNCIEF1ZGlvIGRyaXZlciwgQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFRha2FzaGkgSXdhaS4KKyAqIFVTQiBNSURJIGRyaXZlciwgQ29weXJpZ2h0IChDKSAyMDAyLTIwMDUgQ2xlbWVucyBMYWRpc2NoLgorICoKKyAqIFJlZmVyIHRvIHRoZSBVU0IgRGV2aWNlIENsYXNzIERlZmluaXRpb24gZm9yIE1JREkgRGV2aWNlczoKKyAqIGh0dHA6Ly93d3cudXNiLm9yZy9kZXZlbG9wZXJzL2RldmNsYXNzX2RvY3MvbWlkaTEwLnBkZgorICovCisKKyNkZWZpbmUgREVCVUcgMQorLy8gI2RlZmluZSBWRVJCT1NFCisKKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorCisjaW5jbHVkZSA8c291bmQvZHJpdmVyLmg+CisjaW5jbHVkZSA8c291bmQvY29yZS5oPgorI2luY2x1ZGUgPHNvdW5kL2luaXR2YWwuaD4KKyNpbmNsdWRlIDxzb3VuZC9yYXdtaWRpLmg+CisKKyNpbmNsdWRlIDxsaW51eC91c2JfY2g5Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2dhZGdldC5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9hdWRpby5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi9taWRpLmg+CisKKyNpbmNsdWRlICJnYWRnZXRfY2hpcHMuaCIKKworTU9EVUxFX0FVVEhPUigiQmVuIFdpbGxpYW1zb24iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsKKworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjUgSnVsIDIwMDYiCisKK3N0YXRpYyBjb25zdCBjaGFyIHNob3J0bmFtZVtdID0gImdfbWlkaSI7CitzdGF0aWMgY29uc3QgY2hhciBsb25nbmFtZVtdID0gIk1JREkgR2FkZ2V0IjsKKworc3RhdGljIGludCBpbmRleCA9IFNORFJWX0RFRkFVTFRfSURYMTsKK3N0YXRpYyBjaGFyICppZCA9IFNORFJWX0RFRkFVTFRfU1RSMTsKKworbW9kdWxlX3BhcmFtKGluZGV4LCBpbnQsIDA0NDQpOworTU9EVUxFX1BBUk1fREVTQyhpbmRleCwgIkluZGV4IHZhbHVlIGZvciB0aGUgVVNCIE1JREkgR2FkZ2V0IGFkYXB0ZXIuIik7Cittb2R1bGVfcGFyYW0oaWQsIGNoYXJwLCAwNDQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoaWQsICJJRCBzdHJpbmcgZm9yIHRoZSBVU0IgTUlESSBHYWRnZXQgYWRhcHRlci4iKTsKKworLyogU29tZSBzeXN0ZW1zIHdpbGwgd2FudCBkaWZmZXJlbnQgcHJvZHVjdCBpZGVudGlmZXJzIHB1Ymxpc2hlZCBpbiB0aGUKKyAqIGRldmljZSBkZXNjcmlwdG9yLCBlaXRoZXIgbnVtYmVycyBvciBzdHJpbmdzIG9yIGJvdGguICBUaGVzZSBzdHJpbmcKKyAqIHBhcmFtZXRlcnMgYXJlIGluIFVURi04IChzdXBlcnNldCBvZiBBU0NJSSdzIDcgYml0IGNoYXJhY3RlcnMpLgorICovCisKK3N0YXRpYyB1c2hvcnQgaWRWZW5kb3I7Cittb2R1bGVfcGFyYW0oaWRWZW5kb3IsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkVmVuZG9yLCAiVVNCIFZlbmRvciBJRCIpOworCitzdGF0aWMgdXNob3J0IGlkUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpZFByb2R1Y3QsIHVzaG9ydCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlkUHJvZHVjdCwgIlVTQiBQcm9kdWN0IElEIik7CisKK3N0YXRpYyB1c2hvcnQgYmNkRGV2aWNlOworbW9kdWxlX3BhcmFtKGJjZERldmljZSwgdXNob3J0LCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoYmNkRGV2aWNlLCAiVVNCIERldmljZSB2ZXJzaW9uIChCQ0QpIik7CisKK3N0YXRpYyBjaGFyICppTWFudWZhY3R1cmVyOworbW9kdWxlX3BhcmFtKGlNYW51ZmFjdHVyZXIsIGNoYXJwLCBTX0lSVUdPKTsKK01PRFVMRV9QQVJNX0RFU0MoaU1hbnVmYWN0dXJlciwgIlVTQiBNYW51ZmFjdHVyZXIgc3RyaW5nIik7CisKK3N0YXRpYyBjaGFyICppUHJvZHVjdDsKK21vZHVsZV9wYXJhbShpUHJvZHVjdCwgY2hhcnAsIFNfSVJVR08pOworTU9EVUxFX1BBUk1fREVTQyhpUHJvZHVjdCwgIlVTQiBQcm9kdWN0IHN0cmluZyIpOworCitzdGF0aWMgY2hhciAqaVNlcmlhbE51bWJlcjsKK21vZHVsZV9wYXJhbShpU2VyaWFsTnVtYmVyLCBjaGFycCwgU19JUlVHTyk7CitNT0RVTEVfUEFSTV9ERVNDKGlTZXJpYWxOdW1iZXIsICJTZXJpYWxOdW1iZXIiKTsKKworLyoKKyAqIHRoaXMgdmVyc2lvbiBhdXRvY29uZmlndXJlcyBhcyBtdWNoIGFzIHBvc3NpYmxlLAorICogd2hpY2ggaXMgcmVhc29uYWJsZSBmb3IgbW9zdCAiYnVsay1vbmx5IiBkcml2ZXJzLgorICovCitzdGF0aWMgY29uc3QgY2hhciAqRVBfSU5fTkFNRTsKK3N0YXRpYyBjb25zdCBjaGFyICpFUF9PVVRfTkFNRTsKKworCisvKiBiaWcgZW5vdWdoIHRvIGhvbGQgb3VyIGJpZ2dlc3QgZGVzY3JpcHRvciAqLworI2RlZmluZSBVU0JfQlVGU0laIDI1NgorCisKKy8qIFRoaXMgaXMgYSBnYWRnZXQsIGFuZCB0aGUgSU4vT1VUIG5hbWluZyBpcyBmcm9tIHRoZSBob3N0J3MgcGVyc3BlY3RpdmUuCisgICBVU0IgLT4gT1VUIGVuZHBvaW50IC0+IHJhd21pZGkKKyAgIFVTQiA8LSBJTiBlbmRwb2ludCAgPC0gcmF3bWlkaSAqLworc3RydWN0IGdtaWRpX2luX3BvcnQgeworCXN0cnVjdCBnbWlkaV9kZXZpY2UqIGRldjsKKwlpbnQgYWN0aXZlOworCXVpbnQ4X3QgY2FibGU7CQkvKiBjYWJsZSBudW1iZXIgPDwgNCAqLworCXVpbnQ4X3Qgc3RhdGU7CisjZGVmaW5lIFNUQVRFX1VOS05PV04JMAorI2RlZmluZSBTVEFURV8xUEFSQU0JMQorI2RlZmluZSBTVEFURV8yUEFSQU1fMQkyCisjZGVmaW5lIFNUQVRFXzJQQVJBTV8yCTMKKyNkZWZpbmUgU1RBVEVfU1lTRVhfMAk0CisjZGVmaW5lIFNUQVRFX1NZU0VYXzEJNQorI2RlZmluZSBTVEFURV9TWVNFWF8yCTYKKwl1aW50OF90IGRhdGFbMl07Cit9OworCitzdHJ1Y3QgZ21pZGlfZGV2aWNlIHsKKwlzcGlubG9ja190CQlsb2NrOworCXN0cnVjdCB1c2JfZ2FkZ2V0CSpnYWRnZXQ7CisJc3RydWN0IHVzYl9yZXF1ZXN0CSpyZXE7CQkvKiBmb3IgY29udHJvbCByZXNwb25zZXMgKi8KKwl1OAkJCWNvbmZpZzsKKwlzdHJ1Y3QgdXNiX2VwCQkqaW5fZXAsICpvdXRfZXA7CisJc3RydWN0IHNuZF9jYXJkIAkqY2FyZDsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGkJKnJtaWRpOworCXN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKmluX3N1YnN0cmVhbTsKKwlzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpvdXRfc3Vic3RyZWFtOworCisJLyogRm9yIHRoZSBtb21lbnQgd2Ugb25seSBzdXBwb3J0IG9uZSBwb3J0IGluCisJICAgZWFjaCBkaXJlY3Rpb24sIGJ1dCBpbl9wb3J0IGlzIGtlcHQgYXMgYQorCSAgIHNlcGFyYXRlIHN0cnVjdCBzbyB3ZSBjYW4gaGF2ZSBtb3JlIGxhdGVyLiAqLworCXN0cnVjdCBnbWlkaV9pbl9wb3J0CWluX3BvcnQ7CisJdW5zaWduZWQgbG9uZwkJb3V0X3RyaWdnZXJlZDsKKwlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJdGFza2xldDsKK307CisKK3N0YXRpYyB2b2lkIGdtaWRpX3RyYW5zbWl0KHN0cnVjdCBnbWlkaV9kZXZpY2UqIGRldiwgc3RydWN0IHVzYl9yZXF1ZXN0KiByZXEpOworCisKKyNkZWZpbmUgeHByaW50ayhkLGxldmVsLGZtdCxhcmdzLi4uKSBcCisJZGV2X3ByaW50ayhsZXZlbCAsICYoZCktPmdhZGdldC0+ZGV2ICwgZm10ICwgIyMgYXJncykKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fREVCVUcgLCBmbXQgLCAjIyBhcmdzKQorI2Vsc2UKKyNkZWZpbmUgREJHKGRldixmbXQsYXJncy4uLikgXAorCWRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZiAvKiBERUJVRyAqLworCisjaWZkZWYgVkVSQk9TRQorI2RlZmluZSBWREJHCURCRworI2Vsc2UKKyNkZWZpbmUgVkRCRyhkZXYsZm10LGFyZ3MuLi4pIFwKKwlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYgLyogVkVSQk9TRSAqLworCisjZGVmaW5lIEVSUk9SKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9FUlIgLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBXQVJOKGRldixmbXQsYXJncy4uLikgXAorCXhwcmludGsoZGV2ICwgS0VSTl9XQVJOSU5HICwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSU5GTyhkZXYsZm10LGFyZ3MuLi4pIFwKKwl4cHJpbnRrKGRldiAsIEtFUk5fSU5GTyAsIGZtdCAsICMjIGFyZ3MpCisKKworc3RhdGljIHVuc2lnbmVkIGJ1ZmxlbiA9IDI1NjsKK3N0YXRpYyB1bnNpZ25lZCBxbGVuID0gMzI7CisKK21vZHVsZV9wYXJhbShidWZsZW4sIHVpbnQsIFNfSVJVR08pOworbW9kdWxlX3BhcmFtKHFsZW4sIHVpbnQsIFNfSVJVR08pOworCisKKy8qIFRoYW5rcyB0byBHcmV5IElubm92YXRpb24gZm9yIGRvbmF0aW5nIHRoaXMgcHJvZHVjdCBJRC4KKyAqCisgKiBETyBOT1QgUkVVU0UgVEhFU0UgSURzIHdpdGggYSBwcm90b2NvbC1pbmNvbXBhdGlibGUgZHJpdmVyISEgIEV2ZXIhIQorICogSW5zdGVhZDogIGFsbG9jYXRlIHlvdXIgb3duLCB1c2luZyBub3JtYWwgVVNCLUlGIHByb2NlZHVyZXMuCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFTkRPUl9OVU0JMHgxN2IzCQkvKiBHcmV5IElubm92YXRpb24gKi8KKyNkZWZpbmUgRFJJVkVSX1BST0RVQ1RfTlVNCTB4MDAwNAkJLyogTGludXgtVVNCICJNSURJIEdhZGdldCIgKi8KKworCisvKgorICogREVTQ1JJUFRPUlMgLi4uIG1vc3QgYXJlIHN0YXRpYywgYnV0IHN0cmluZ3MgYW5kIChmdWxsKQorICogY29uZmlndXJhdGlvbiBkZXNjcmlwdG9ycyBhcmUgYnVpbHQgb24gZGVtYW5kLgorICovCisKKyNkZWZpbmUgU1RSSU5HX01BTlVGQUNUVVJFUgkyNQorI2RlZmluZSBTVFJJTkdfUFJPRFVDVAkJNDIKKyNkZWZpbmUgU1RSSU5HX1NFUklBTAkJMTAxCisjZGVmaW5lIFNUUklOR19NSURJX0dBREdFVAkyNTAKKworLyogV2Ugb25seSBoYXZlIHRoZSBvbmUgY29uZmlndXJhdGlvbiwgaXQncyBudW1iZXIgMS4gKi8KKyNkZWZpbmUJR01JRElfQ09ORklHCQkxCisKKy8qIFdlIGhhdmUgdHdvIGludGVyZmFjZXMtIEF1ZGlvQ29udHJvbCBhbmQgTUlESVN0cmVhbWluZyAqLworI2RlZmluZSBHTUlESV9BQ19JTlRFUkZBQ0UJMAorI2RlZmluZSBHTUlESV9NU19JTlRFUkZBQ0UJMQorI2RlZmluZSBHTUlESV9OVU1fSU5URVJGQUNFUwkyCisKK0RFQ0xBUkVfVVNCX0FDX0hFQURFUl9ERVNDUklQVE9SKDEpOworREVDTEFSRV9VU0JfTUlESV9PVVRfSkFDS19ERVNDUklQVE9SKDEpOworREVDTEFSRV9VU0JfTVNfRU5EUE9JTlRfREVTQ1JJUFRPUigxKTsKKworLyogQi4xICBEZXZpY2UgRGVzY3JpcHRvciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2Rlc2NyaXB0b3IgZGV2aWNlX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0RFVklDRV9TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfREVWSUNFLAorCS5iY2RVU0IgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAyMDApLAorCS5iRGV2aWNlQ2xhc3MgPQkJVVNCX0NMQVNTX1BFUl9JTlRFUkZBQ0UsCisJLmlkVmVuZG9yID0JCV9fY29uc3RhbnRfY3B1X3RvX2xlMTYoRFJJVkVSX1ZFTkRPUl9OVU0pLAorCS5pZFByb2R1Y3QgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNihEUklWRVJfUFJPRFVDVF9OVU0pLAorCS5pTWFudWZhY3R1cmVyID0JU1RSSU5HX01BTlVGQUNUVVJFUiwKKwkuaVByb2R1Y3QgPQkJU1RSSU5HX1BST0RVQ1QsCisJLmJOdW1Db25maWd1cmF0aW9ucyA9CTEsCit9OworCisvKiBCLjIgIENvbmZpZ3VyYXRpb24gRGVzY3JpcHRvciAqLworc3RhdGljIHN0cnVjdCB1c2JfY29uZmlnX2Rlc2NyaXB0b3IgY29uZmlnX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0NPTkZJR19TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ09ORklHLAorCS8qIGNvbXB1dGUgd1RvdGFsTGVuZ3RoIG9uIHRoZSBmbHkgKi8KKwkuYk51bUludGVyZmFjZXMgPQlHTUlESV9OVU1fSU5URVJGQUNFUywKKwkuYkNvbmZpZ3VyYXRpb25WYWx1ZSA9CUdNSURJX0NPTkZJRywKKwkuaUNvbmZpZ3VyYXRpb24gPQlTVFJJTkdfTUlESV9HQURHRVQsCisJLyoKKwkgKiBGSVhNRTogV2hlbiBlbWJlZGRpbmcgdGhpcyBkcml2ZXIgaW4gYSBkZXZpY2UsCisJICogdGhlc2UgbmVlZCB0byBiZSBzZXQgdG8gcmVmbGVjdCB0aGUgYWN0dWFsCisJICogcG93ZXIgcHJvcGVydGllcyBvZiB0aGUgZGV2aWNlLiBJcyBpdCBzZWxmcG93ZXJlZD8KKwkgKi8KKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9DT05GSUdfQVRUX09ORSwKKwkuYk1heFBvd2VyID0JCTEsCit9OworCisvKiBCLjMuMSAgU3RhbmRhcmQgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIGFjX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdNSURJX0FDX0lOVEVSRkFDRSwKKwkuYk51bUVuZHBvaW50cyA9CTAsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JVVNCX1NVQkNMQVNTX0FVRElPQ09OVFJPTCwKKwkuaUludGVyZmFjZSA9CQlTVFJJTkdfTUlESV9HQURHRVQsCit9OworCisvKiBCLjMuMiAgQ2xhc3MtU3BlY2lmaWMgQUMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjX2hlYWRlcl9kZXNjcmlwdG9yXzEgYWNfaGVhZGVyX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfSU5URVJGQUNFLAorCS5iRGVzY3JpcHRvclN1YnR5cGUgPQlVU0JfTVNfSEVBREVSLAorCS5iY2RBREMgPQkJX19jb25zdGFudF9jcHVfdG9fbGUxNigweDAxMDApLAorCS53VG90YWxMZW5ndGggPQkJVVNCX0RUX0FDX0hFQURFUl9TSVpFKDEpLAorCS5iSW5Db2xsZWN0aW9uID0JMSwKKwkuYmFJbnRlcmZhY2VOciA9IHsKKwkJWzBdID0JCUdNSURJX01TX0lOVEVSRkFDRSwKKwl9Cit9OworCisvKiBCLjQuMSAgU3RhbmRhcmQgTVMgSW50ZXJmYWNlIERlc2NyaXB0b3IgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZV9kZXNjcmlwdG9yIG1zX2ludGVyZmFjZV9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9JTlRFUkZBQ0VfU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0lOVEVSRkFDRSwKKwkuYkludGVyZmFjZU51bWJlciA9CUdNSURJX01TX0lOVEVSRkFDRSwKKwkuYk51bUVuZHBvaW50cyA9CTIsCisJLmJJbnRlcmZhY2VDbGFzcyA9CVVTQl9DTEFTU19BVURJTywKKwkuYkludGVyZmFjZVN1YkNsYXNzID0JVVNCX1NVQkNMQVNTX01JRElTVFJFQU1JTkcsCisJLmlJbnRlcmZhY2UgPQkJU1RSSU5HX01JRElfR0FER0VULAorfTsKKworLyogQi40LjIgIENsYXNzLVNwZWNpZmljIE1TIEludGVyZmFjZSBEZXNjcmlwdG9yICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9tc19oZWFkZXJfZGVzY3JpcHRvciBtc19oZWFkZXJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfTVNfSEVBREVSX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19JTlRFUkZBQ0UsCisJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19IRUFERVIsCisJLmJjZE1TQyA9CQlfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4MDEwMCksCisJLndUb3RhbExlbmd0aCA9CQlVU0JfRFRfTVNfSEVBREVSX1NJWkUKKwkJCQkrIDIqVVNCX0RUX01JRElfSU5fU0laRQorCQkJCSsgMipVU0JfRFRfTUlESV9PVVRfU0laRSgxKSwKK307CisKKyNkZWZpbmUgSkFDS19JTl9FTUIJMQorI2RlZmluZSBKQUNLX0lOX0VYVAkyCisjZGVmaW5lIEpBQ0tfT1VUX0VNQgkzCisjZGVmaW5lIEpBQ0tfT1VUX0VYVAk0CisKKy8qIEIuNC4zICBNSURJIElOIEphY2sgRGVzY3JpcHRvcnMgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX21pZGlfaW5famFja19kZXNjcmlwdG9yIGphY2tfaW5fZW1iX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX01JRElfSU5fU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX01JRElfSU5fSkFDSywKKwkuYkphY2tUeXBlID0JCVVTQl9NU19FTUJFRERFRCwKKwkuYkphY2tJRCA9CQlKQUNLX0lOX0VNQiwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX21pZGlfaW5famFja19kZXNjcmlwdG9yIGphY2tfaW5fZXh0X2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX01JRElfSU5fU0laRSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX01JRElfSU5fSkFDSywKKwkuYkphY2tUeXBlID0JCVVTQl9NU19FWFRFUk5BTCwKKwkuYkphY2tJRCA9CQlKQUNLX0lOX0VYVCwKK307CisKKy8qIEIuNC40ICBNSURJIE9VVCBKYWNrIERlc2NyaXB0b3JzICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9taWRpX291dF9qYWNrX2Rlc2NyaXB0b3JfMSBqYWNrX291dF9lbWJfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfTUlESV9PVVRfU0laRSgxKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX01JRElfT1VUX0pBQ0ssCisJLmJKYWNrVHlwZSA9CQlVU0JfTVNfRU1CRURERUQsCisJLmJKYWNrSUQgPQkJSkFDS19PVVRfRU1CLAorCS5iTnJJbnB1dFBpbnMgPQkJMSwKKwkucGlucyA9IHsKKwkJWzBdID0geworCQkJLmJhU291cmNlSUQgPQlKQUNLX0lOX0VYVCwKKwkJCS5iYVNvdXJjZVBpbiA9CTEsCisJCX0KKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9taWRpX291dF9qYWNrX2Rlc2NyaXB0b3JfMSBqYWNrX291dF9leHRfZGVzYyA9IHsKKwkuYkxlbmd0aCA9CQlVU0JfRFRfTUlESV9PVVRfU0laRSgxKSwKKwkuYkRlc2NyaXB0b3JUeXBlID0JVVNCX0RUX0NTX0lOVEVSRkFDRSwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX01JRElfT1VUX0pBQ0ssCisJLmJKYWNrVHlwZSA9CQlVU0JfTVNfRVhURVJOQUwsCisJLmJKYWNrSUQgPQkJSkFDS19PVVRfRVhULAorCS5iTnJJbnB1dFBpbnMgPQkJMSwKKwkucGlucyA9IHsKKwkJWzBdID0geworCQkJLmJhU291cmNlSUQgPQlKQUNLX0lOX0VNQiwKKwkJCS5iYVNvdXJjZVBpbiA9CTEsCisJCX0KKwl9Cit9OworCisvKiBCLjUuMSAgU3RhbmRhcmQgQnVsayBPVVQgRW5kcG9pbnQgRGVzY3JpcHRvciAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBidWxrX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9FTkRQT0lOVF9BVURJT19TSVpFLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfRU5EUE9JTlQsCisJLmJFbmRwb2ludEFkZHJlc3MgPQlVU0JfRElSX09VVCwKKwkuYm1BdHRyaWJ1dGVzID0JCVVTQl9FTkRQT0lOVF9YRkVSX0JVTEssCit9OworCisvKiBCLjUuMiAgQ2xhc3Mtc3BlY2lmaWMgTVMgQnVsayBPVVQgRW5kcG9pbnQgRGVzY3JpcHRvciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfbXNfZW5kcG9pbnRfZGVzY3JpcHRvcl8xIG1zX291dF9kZXNjID0geworCS5iTGVuZ3RoID0JCVVTQl9EVF9NU19FTkRQT0lOVF9TSVpFKDEpLAorCS5iRGVzY3JpcHRvclR5cGUgPQlVU0JfRFRfQ1NfRU5EUE9JTlQsCisJLmJEZXNjcmlwdG9yU3VidHlwZSA9CVVTQl9NU19HRU5FUkFMLAorCS5iTnVtRW1iTUlESUphY2sgPQkxLAorCS5iYUFzc29jSmFja0lEID0geworCQlbMF0gPQkJSkFDS19JTl9FTUIsCisJfQorfTsKKworLyogQi42LjEgIFN0YW5kYXJkIEJ1bGsgSU4gRW5kcG9pbnQgRGVzY3JpcHRvciAqLworc3RhdGljIHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciBidWxrX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUsCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9FTkRQT0lOVCwKKwkuYkVuZHBvaW50QWRkcmVzcyA9CVVTQl9ESVJfSU4sCisJLmJtQXR0cmlidXRlcyA9CQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLLAorfTsKKworLyogQi42LjIgIENsYXNzLXNwZWNpZmljIE1TIEJ1bGsgSU4gRW5kcG9pbnQgRGVzY3JpcHRvciAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfbXNfZW5kcG9pbnRfZGVzY3JpcHRvcl8xIG1zX2luX2Rlc2MgPSB7CisJLmJMZW5ndGggPQkJVVNCX0RUX01TX0VORFBPSU5UX1NJWkUoMSksCisJLmJEZXNjcmlwdG9yVHlwZSA9CVVTQl9EVF9DU19FTkRQT0lOVCwKKwkuYkRlc2NyaXB0b3JTdWJ0eXBlID0JVVNCX01TX0dFTkVSQUwsCisJLmJOdW1FbWJNSURJSmFjayA9CTEsCisJLmJhQXNzb2NKYWNrSUQgPSB7CisJCVswXSA9CQlKQUNLX09VVF9FTUIsCisJfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKmdtaWRpX2Z1bmN0aW9uIFtdID0geworCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJmFjX2ludGVyZmFjZV9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJmFjX2hlYWRlcl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJm1zX2ludGVyZmFjZV9kZXNjLAorCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmbXNfaGVhZGVyX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmamFja19pbl9lbWJfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSZqYWNrX2luX2V4dF9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJmphY2tfb3V0X2VtYl9kZXNjLAorCShzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyICopJmphY2tfb3V0X2V4dF9kZXNjLAorCS8qIElmIHlvdSBhZGQgbW9yZSBqYWNrcywgdXBkYXRlIG1zX2hlYWRlcl9kZXNjLndUb3RhbExlbmd0aCAqLworCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmYnVsa19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSZtc19vdXRfZGVzYywKKwkoc3RydWN0IHVzYl9kZXNjcmlwdG9yX2hlYWRlciAqKSZidWxrX2luX2Rlc2MsCisJKHN0cnVjdCB1c2JfZGVzY3JpcHRvcl9oZWFkZXIgKikmbXNfaW5fZGVzYywKKwlOVUxMLAorfTsKKworc3RhdGljIGNoYXIgbWFudWZhY3R1cmVyWzUwXTsKK3N0YXRpYyBjaGFyIHByb2R1Y3RfZGVzY1s0MF0gPSAiTUlESSBHYWRnZXQiOworc3RhdGljIGNoYXIgc2VyaWFsX251bWJlclsyMF07CisKKy8qIHN0YXRpYyBzdHJpbmdzLCBpbiBVVEYtOCAqLworc3RhdGljIHN0cnVjdCB1c2Jfc3RyaW5nIHN0cmluZ3MgW10gPSB7CisJeyBTVFJJTkdfTUFOVUZBQ1RVUkVSLCBtYW51ZmFjdHVyZXIsIH0sCisJeyBTVFJJTkdfUFJPRFVDVCwgcHJvZHVjdF9kZXNjLCB9LAorCXsgU1RSSU5HX1NFUklBTCwgc2VyaWFsX251bWJlciwgfSwKKwl7IFNUUklOR19NSURJX0dBREdFVCwgbG9uZ25hbWUsIH0sCisJeyAgfQkJCS8qIGVuZCBvZiBsaXN0ICovCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9nYWRnZXRfc3RyaW5ncyBzdHJpbmd0YWIgPSB7CisJLmxhbmd1YWdlCT0gMHgwNDA5LAkvKiBlbi11cyAqLworCS5zdHJpbmdzCT0gc3RyaW5ncywKK307CisKK3N0YXRpYyBpbnQgY29uZmlnX2J1ZihzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQl1OCAqYnVmLCB1OCB0eXBlLCB1bnNpZ25lZCBpbmRleCkKK3sKKwlpbnQgbGVuOworCisJLyogb25seSBvbmUgY29uZmlndXJhdGlvbiAqLworCWlmIChpbmRleCAhPSAwKSB7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlsZW4gPSB1c2JfZ2FkZ2V0X2NvbmZpZ19idWYoJmNvbmZpZ19kZXNjLAorCQkJYnVmLCBVU0JfQlVGU0laLCBnbWlkaV9mdW5jdGlvbik7CisJaWYgKGxlbiA8IDApIHsKKwkJcmV0dXJuIGxlbjsKKwl9CisJKChzdHJ1Y3QgdXNiX2NvbmZpZ19kZXNjcmlwdG9yICopYnVmKS0+YkRlc2NyaXB0b3JUeXBlID0gdHlwZTsKKwlyZXR1cm4gbGVuOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9yZXF1ZXN0KiBhbGxvY19lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QJKnJlcTsKKworCXJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGVwLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVxKSB7CisJCXJlcS0+bGVuZ3RoID0gbGVuZ3RoOworCQlyZXEtPmJ1ZiA9IGttYWxsb2MobGVuZ3RoLCBHRlBfQVRPTUlDKTsKKwkJaWYgKCFyZXEtPmJ1ZikgeworCQkJdXNiX2VwX2ZyZWVfcmVxdWVzdChlcCwgcmVxKTsKKwkJCXJlcSA9IE5VTEw7CisJCX0KKwl9CisJcmV0dXJuIHJlcTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9lcF9yZXEoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWtmcmVlKHJlcS0+YnVmKTsKKwl1c2JfZXBfZnJlZV9yZXF1ZXN0KGVwLCByZXEpOworfQorCitzdGF0aWMgY29uc3QgdWludDhfdCBnbWlkaV9jaW5fbGVuZ3RoW10gPSB7CisJMCwgMCwgMiwgMywgMywgMSwgMiwgMywgMywgMywgMywgMywgMiwgMiwgMywgMQorfTsKKworLyoKKyAqIFJlY2VpdmVzIGEgY2h1bmsgb2YgTUlESSBkYXRhLgorICovCitzdGF0aWMgdm9pZCBnbWlkaV9yZWFkX2RhdGEoc3RydWN0IHVzYl9lcCAqZXAsIGludCBjYWJsZSwKKwkJCQkgICB1aW50OF90KiBkYXRhLCBpbnQgbGVuZ3RoKQoreworCXN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwkvKiBjYWJsZSBpcyBpZ25vcmVkLCBiZWNhdXNlIGZvciBub3cgd2Ugb25seSBoYXZlIG9uZS4gKi8KKworCWlmICghZGV2LT5vdXRfc3Vic3RyZWFtKSB7CisJCS8qIE5vYm9keSBpcyBsaXN0ZW5pbmcgLSB0aHJvdyBpdCBvbiB0aGUgZmxvb3IuICovCisJCXJldHVybjsKKwl9CisJaWYgKCF0ZXN0X2JpdChkZXYtPm91dF9zdWJzdHJlYW0tPm51bWJlciwgJmRldi0+b3V0X3RyaWdnZXJlZCkpIHsKKwkJcmV0dXJuOworCX0KKwlzbmRfcmF3bWlkaV9yZWNlaXZlKGRldi0+b3V0X3N1YnN0cmVhbSwgZGF0YSwgbGVuZ3RoKTsKK30KKworc3RhdGljIHZvaWQgZ21pZGlfaGFuZGxlX291dF9kYXRhKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKK3sKKwl1bnNpZ25lZCBpOworCXU4ICpidWYgPSByZXEtPmJ1ZjsKKworCWZvciAoaSA9IDA7IGkgKyAzIDwgcmVxLT5hY3R1YWw7IGkgKz0gNCkgeworCQlpZiAoYnVmW2ldICE9IDApIHsKKwkJCWludCBjYWJsZSA9IGJ1ZltpXSA+PiA0OworCQkJaW50IGxlbmd0aCA9IGdtaWRpX2Npbl9sZW5ndGhbYnVmW2ldICYgMHgwZl07CisJCQlnbWlkaV9yZWFkX2RhdGEoZXAsIGNhYmxlLCAmYnVmW2kgKyAxXSwgbGVuZ3RoKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQgZ21pZGlfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCXN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldiA9IGVwLT5kcml2ZXJfZGF0YTsKKwlpbnQgc3RhdHVzID0gcmVxLT5zdGF0dXM7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgMDogCQkJLyogbm9ybWFsIGNvbXBsZXRpb24gKi8KKwkJaWYgKGVwID09IGRldi0+b3V0X2VwKSB7CisJCQkvKiB3ZSByZWNlaXZlZCBzdHVmZi4KKwkJCSAgIHJlcSBpcyBxdWV1ZWQgYWdhaW4sIGJlbG93ICovCisJCQlnbWlkaV9oYW5kbGVfb3V0X2RhdGEoZXAsIHJlcSk7CisJCX0gZWxzZSBpZiAoZXAgPT0gZGV2LT5pbl9lcCkgeworCQkJLyogb3VyIHRyYW5zbWl0IGNvbXBsZXRlZC4KKwkJCSAgIHNlZSBpZiB0aGVyZSdzIG1vcmUgdG8gZ28uCisJCQkgICBnbWlkaV90cmFuc21pdCBlYXRzIHJlcSwgZG9uJ3QgcXVldWUgaXQgYWdhaW4uICovCisJCQlnbWlkaV90cmFuc21pdChkZXYsIHJlcSk7CisJCQlyZXR1cm47CisJCX0KKwkJYnJlYWs7CisKKwkvKiB0aGlzIGVuZHBvaW50IGlzIG5vcm1hbGx5IGFjdGl2ZSB3aGlsZSB3ZSdyZSBjb25maWd1cmVkICovCisJY2FzZSAtRUNPTk5BQk9SVEVEOiAJCS8qIGhhcmR3YXJlIGZvcmNlZCBlcCByZXNldCAqLworCWNhc2UgLUVDT05OUkVTRVQ6CQkvKiByZXF1ZXN0IGRlcXVldWVkICovCisJY2FzZSAtRVNIVVRET1dOOgkJLyogZGlzY29ubmVjdCBmcm9tIGhvc3QgKi8KKwkJVkRCRyhkZXYsICIlcyBnb25lICglZCksICVkLyVkXG4iLCBlcC0+bmFtZSwgc3RhdHVzLAorCQkJCXJlcS0+YWN0dWFsLCByZXEtPmxlbmd0aCk7CisJCWlmIChlcCA9PSBkZXYtPm91dF9lcCkgeworCQkJZ21pZGlfaGFuZGxlX291dF9kYXRhKGVwLCByZXEpOworCQl9CisJCWZyZWVfZXBfcmVxKGVwLCByZXEpOworCQlyZXR1cm47CisKKwljYXNlIC1FT1ZFUkZMT1c6CQkvKiBidWZmZXIgb3ZlcnJ1biBvbiByZWFkIG1lYW5zIHRoYXQKKwkJCQkJICogd2UgZGlkbid0IHByb3ZpZGUgYSBiaWcgZW5vdWdoCisJCQkJCSAqIGJ1ZmZlci4KKwkJCQkJICovCisJZGVmYXVsdDoKKwkJREJHKGRldiwgIiVzIGNvbXBsZXRlIC0tPiAlZCwgJWQvJWRcbiIsIGVwLT5uYW1lLAorCQkJCXN0YXR1cywgcmVxLT5hY3R1YWwsIHJlcS0+bGVuZ3RoKTsKKwkJYnJlYWs7CisJY2FzZSAtRVJFTU9URUlPOgkJLyogc2hvcnQgcmVhZCAqLworCQlicmVhazsKKwl9CisKKwlzdGF0dXMgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlFUlJPUihkZXYsICJraWxsICVzOiAgcmVzdWJtaXQgJWQgYnl0ZXMgLS0+ICVkXG4iLAorCQkJCWVwLT5uYW1lLCByZXEtPmxlbmd0aCwgc3RhdHVzKTsKKwkJdXNiX2VwX3NldF9oYWx0KGVwKTsKKwkJLyogRklYTUUgcmVjb3ZlciBsYXRlciAuLi4gc29tZWhvdyAqLworCX0KK30KKworc3RhdGljIGludCBzZXRfZ21pZGlfY29uZmlnKHN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldiwgZ2ZwX3QgZ2ZwX2ZsYWdzKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxOworCXN0cnVjdCB1c2JfZXAqIGVwOworCXVuc2lnbmVkIGk7CisKKwllcnIgPSB1c2JfZXBfZW5hYmxlKGRldi0+aW5fZXAsICZidWxrX2luX2Rlc2MpOworCWlmIChlcnIpIHsKKwkJRVJST1IoZGV2LCAiY2FuJ3Qgc3RhcnQgJXM6ICVkXG4iLCBkZXYtPmluX2VwLT5uYW1lLCBlcnIpOworCQlnb3RvIGZhaWw7CisJfQorCWRldi0+aW5fZXAtPmRyaXZlcl9kYXRhID0gZGV2OworCisJZXJyID0gdXNiX2VwX2VuYWJsZShkZXYtPm91dF9lcCwgJmJ1bGtfb3V0X2Rlc2MpOworCWlmIChlcnIpIHsKKwkJRVJST1IoZGV2LCAiY2FuJ3Qgc3RhcnQgJXM6ICVkXG4iLCBkZXYtPm91dF9lcC0+bmFtZSwgZXJyKTsKKwkJZ290byBmYWlsOworCX0KKwlkZXYtPm91dF9lcC0+ZHJpdmVyX2RhdGEgPSBkZXY7CisKKwkvKiBhbGxvY2F0ZSBhIGJ1bmNoIG9mIHJlYWQgYnVmZmVycyBhbmQgcXVldWUgdGhlbSBhbGwgYXQgb25jZS4gKi8KKwllcCA9IGRldi0+b3V0X2VwOworCWZvciAoaSA9IDA7IGkgPCBxbGVuICYmIGVyciA9PSAwOyBpKyspIHsKKwkJcmVxID0gYWxsb2NfZXBfcmVxKGVwLCBidWZsZW4pOworCQlpZiAocmVxKSB7CisJCQlyZXEtPmNvbXBsZXRlID0gZ21pZGlfY29tcGxldGU7CisJCQllcnIgPSB1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCQlpZiAoZXJyKSB7CisJCQkJREJHKGRldiwgIiVzIHF1ZXVlIHJlcTogJWRcbiIsIGVwLT5uYW1lLCBlcnIpOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyID0gLUVOT01FTTsKKwkJfQorCX0KK2ZhaWw6CisJLyogY2FsbGVyIGlzIHJlc3BvbnNpYmxlIGZvciBjbGVhbnVwIG9uIGVycm9yICovCisJcmV0dXJuIGVycjsKK30KKworCitzdGF0aWMgdm9pZCBnbWlkaV9yZXNldF9jb25maWcoc3RydWN0IGdtaWRpX2RldmljZSAqZGV2KQoreworCWlmIChkZXYtPmNvbmZpZyA9PSAwKSB7CisJCXJldHVybjsKKwl9CisKKwlEQkcoZGV2LCAicmVzZXQgY29uZmlnXG4iKTsKKworCS8qIGp1c3QgZGlzYWJsZSBlbmRwb2ludHMsIGZvcmNpbmcgY29tcGxldGlvbiBvZiBwZW5kaW5nIGkvby4KKwkgKiBhbGwgb3VyIGNvbXBsZXRpb24gaGFuZGxlcnMgZnJlZSB0aGVpciByZXF1ZXN0cyBpbiB0aGlzIGNhc2UuCisJICovCisJdXNiX2VwX2Rpc2FibGUoZGV2LT5pbl9lcCk7CisJdXNiX2VwX2Rpc2FibGUoZGV2LT5vdXRfZXApOworCWRldi0+Y29uZmlnID0gMDsKK30KKworLyogY2hhbmdlIG91ciBvcGVyYXRpb25hbCBjb25maWcuICB0aGlzIGNvZGUgbXVzdCBhZ3JlZSB3aXRoIHRoZSBjb2RlCisgKiB0aGF0IHJldHVybnMgY29uZmlnIGRlc2NyaXB0b3JzLCBhbmQgYWx0c2V0dGluZyBjb2RlLgorICoKKyAqIGl0J3MgYWxzbyByZXNwb25zaWJsZSBmb3IgcG93ZXIgbWFuYWdlbWVudCBpbnRlcmFjdGlvbnMuIHNvbWUKKyAqIGNvbmZpZ3VyYXRpb25zIG1pZ2h0IG5vdCB3b3JrIHdpdGggb3VyIGN1cnJlbnQgcG93ZXIgc291cmNlcy4KKyAqCisgKiBub3RlIHRoYXQgc29tZSBkZXZpY2UgY29udHJvbGxlciBoYXJkd2FyZSB3aWxsIGNvbnN0cmFpbiB3aGF0IHRoaXMKKyAqIGNvZGUgY2FuIGRvLCBwZXJoYXBzIGJ5IGRpc2FsbG93aW5nIG1vcmUgdGhhbiBvbmUgY29uZmlndXJhdGlvbiBvcgorICogYnkgbGltaXRpbmcgY29uZmlndXJhdGlvbiBjaG9pY2VzIChsaWtlIHRoZSBweGEyeHgpLgorICovCitzdGF0aWMgaW50CitnbWlkaV9zZXRfY29uZmlnKHN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbnVtYmVyLCBnZnBfdCBnZnBfZmxhZ3MpCit7CisJaW50IHJlc3VsdCA9IDA7CisJc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCA9IGRldi0+Z2FkZ2V0OworCisjaWYgMAorCS8qIEZJWE1FICovCisJLyogSGFja2luZyB0aGlzIGJpdCBvdXQgZml4ZXMgYSBidWcgd2hlcmUgb24gcmVjZWlwdCBvZiB0d28KKwkgICBVU0JfUkVRX1NFVF9DT05GSUdVUkFUSU9OIG1lc3NhZ2VzLCB3ZSBlbmQgdXAgd2l0aCBubworCSAgIGJ1ZmZlcmVkIE9VVCByZXF1ZXN0cyB3YWl0aW5nIGZvciBkYXRhLiBUaGlzIGlzIGNsZWFybHkKKwkgICBoaWRpbmcgYSBidWcgZWxzZXdoZXJlLCBiZWNhdXNlIGlmIHRoZSBjb25maWcgZGlkbid0CisJICAgY2hhbmdlIHRoZW4gd2UgcmVhbGx5IHNob3VsZG4ndCBkbyBhbnl0aGluZy4gKi8KKwkvKiBIYXZpbmcgc2FpZCB0aGF0LCB3aGVuIHdlIGRvICJjaGFuZ2UiIGZyb20gY29uZmlnIDEKKwkgICB0byBjb25maWcgMSwgd2UgYXQgbGVhc3QgZ21pZGlfcmVzZXRfY29uZmlnKCkgd2hpY2gKKwkgICBjbGVhcnMgb3V0IGFueSByZXF1ZXN0cyBvbiBlbmRwb2ludHMsIHNvIGl0J3Mgbm90IGxpa2UKKwkgICB3ZSBsZWFrIG9yIGFueXRoaW5nLiAqLworCWlmIChudW1iZXIgPT0gZGV2LT5jb25maWcpIHsKKwkJcmV0dXJuIDA7CisJfQorI2VuZGlmCisKKwlpZiAoZ2FkZ2V0X2lzX3NhMTEwMChnYWRnZXQpICYmIGRldi0+Y29uZmlnKSB7CisJCS8qIHR4IGZpZm8gaXMgZnVsbCwgYnV0IHdlIGNhbid0IGNsZWFyIGl0Li4uKi8KKwkJSU5GTyhkZXYsICJjYW4ndCBjaGFuZ2UgY29uZmlndXJhdGlvbnNcbiIpOworCQlyZXR1cm4gLUVTUElQRTsKKwl9CisJZ21pZGlfcmVzZXRfY29uZmlnKGRldik7CisKKwlzd2l0Y2ggKG51bWJlcikgeworCWNhc2UgR01JRElfQ09ORklHOgorCQlyZXN1bHQgPSBzZXRfZ21pZGlfY29uZmlnKGRldiwgZ2ZwX2ZsYWdzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmVzdWx0ID0gLUVJTlZBTDsKKwkJLyogRkFMTCBUSFJPVUdIICovCisJY2FzZSAwOgorCQlyZXR1cm4gcmVzdWx0OworCX0KKworCWlmICghcmVzdWx0ICYmICghZGV2LT5pbl9lcCB8fCAhZGV2LT5vdXRfZXApKSB7CisJCXJlc3VsdCA9IC1FTk9ERVY7CisJfQorCWlmIChyZXN1bHQpIHsKKwkJZ21pZGlfcmVzZXRfY29uZmlnKGRldik7CisJfSBlbHNlIHsKKwkJY2hhciAqc3BlZWQ7CisKKwkJc3dpdGNoIChnYWRnZXQtPnNwZWVkKSB7CisJCWNhc2UgVVNCX1NQRUVEX0xPVzoJc3BlZWQgPSAibG93IjsgYnJlYWs7CisJCWNhc2UgVVNCX1NQRUVEX0ZVTEw6CXNwZWVkID0gImZ1bGwiOyBicmVhazsKKwkJY2FzZSBVU0JfU1BFRURfSElHSDoJc3BlZWQgPSAiaGlnaCI7IGJyZWFrOworCQlkZWZhdWx0OiAJCXNwZWVkID0gIj8iOyBicmVhazsKKwkJfQorCisJCWRldi0+Y29uZmlnID0gbnVtYmVyOworCQlJTkZPKGRldiwgIiVzIHNwZWVkXG4iLCBzcGVlZCk7CisJfQorCXJldHVybiByZXN1bHQ7Cit9CisKKworc3RhdGljIHZvaWQgZ21pZGlfc2V0dXBfY29tcGxldGUoc3RydWN0IHVzYl9lcCAqZXAsIHN0cnVjdCB1c2JfcmVxdWVzdCAqcmVxKQoreworCWlmIChyZXEtPnN0YXR1cyB8fCByZXEtPmFjdHVhbCAhPSByZXEtPmxlbmd0aCkgeworCQlEQkcoKHN0cnVjdCBnbWlkaV9kZXZpY2UgKikgZXAtPmRyaXZlcl9kYXRhLAorCQkJCSJzZXR1cCBjb21wbGV0ZSAtLT4gJWQsICVkLyVkXG4iLAorCQkJCXJlcS0+c3RhdHVzLCByZXEtPmFjdHVhbCwgcmVxLT5sZW5ndGgpOworCX0KK30KKworLyoKKyAqIFRoZSBzZXR1cCgpIGNhbGxiYWNrIGltcGxlbWVudHMgYWxsIHRoZSBlcDAgZnVuY3Rpb25hbGl0eSB0aGF0J3MKKyAqIG5vdCBoYW5kbGVkIGxvd2VyIGRvd24sIGluIGhhcmR3YXJlIG9yIHRoZSBoYXJkd2FyZSBkcml2ZXIgKGxpa2UKKyAqIGRldmljZSBhbmQgZW5kcG9pbnQgZmVhdHVyZSBmbGFncywgYW5kIHRoZWlyIHN0YXR1cykuICBJdCdzIGFsbAorICogaG91c2VrZWVwaW5nIGZvciB0aGUgZ2FkZ2V0IGZ1bmN0aW9uIHdlJ3JlIGltcGxlbWVudGluZy4gIE1vc3Qgb2YKKyAqIHRoZSB3b3JrIGlzIGluIGNvbmZpZy1zcGVjaWZpYyBzZXR1cC4KKyAqLworc3RhdGljIGludCBnbWlkaV9zZXR1cChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0LAorCQkJY29uc3Qgc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqY3RybCkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSA9IGRldi0+cmVxOworCWludCB2YWx1ZSA9IC1FT1BOT1RTVVBQOworCXUxNiB3X2luZGV4ID0gbGUxNl90b19jcHUoY3RybC0+d0luZGV4KTsKKwl1MTYgd192YWx1ZSA9IGxlMTZfdG9fY3B1KGN0cmwtPndWYWx1ZSk7CisJdTE2IHdfbGVuZ3RoID0gbGUxNl90b19jcHUoY3RybC0+d0xlbmd0aCk7CisKKwkvKiB1c3VhbGx5IHRoaXMgc3RvcmVzIHJlcGx5IGRhdGEgaW4gdGhlIHByZS1hbGxvY2F0ZWQgZXAwIGJ1ZmZlciwKKwkgKiBidXQgY29uZmlnIGNoYW5nZSBldmVudHMgd2lsbCByZWNvbmZpZ3VyZSBoYXJkd2FyZS4KKwkgKi8KKwlyZXEtPnplcm8gPSAwOworCXN3aXRjaCAoY3RybC0+YlJlcXVlc3QpIHsKKworCWNhc2UgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKSB7CisJCQlnb3RvIHVua25vd247CisJCX0KKwkJc3dpdGNoICh3X3ZhbHVlID4+IDgpIHsKKworCQljYXNlIFVTQl9EVF9ERVZJQ0U6CisJCQl2YWx1ZSA9IG1pbih3X2xlbmd0aCwgKHUxNikgc2l6ZW9mKGRldmljZV9kZXNjKSk7CisJCQltZW1jcHkocmVxLT5idWYsICZkZXZpY2VfZGVzYywgdmFsdWUpOworCQkJYnJlYWs7CisJCWNhc2UgVVNCX0RUX0NPTkZJRzoKKwkJCXZhbHVlID0gY29uZmlnX2J1ZihnYWRnZXQsIHJlcS0+YnVmLAorCQkJCQl3X3ZhbHVlID4+IDgsCisJCQkJCXdfdmFsdWUgJiAweGZmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKSB7CisJCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpdmFsdWUpOworCQkJfQorCQkJYnJlYWs7CisKKwkJY2FzZSBVU0JfRFRfU1RSSU5HOgorCQkJLyogd0luZGV4ID09IGxhbmd1YWdlIGNvZGUuCisJCQkgKiB0aGlzIGRyaXZlciBvbmx5IGhhbmRsZXMgb25lIGxhbmd1YWdlLCB5b3UgY2FuCisJCQkgKiBhZGQgc3RyaW5nIHRhYmxlcyBmb3Igb3RoZXIgbGFuZ3VhZ2VzLCB1c2luZworCQkJICogYW55IFVURi04IGNoYXJhY3RlcnMKKwkJCSAqLworCQkJdmFsdWUgPSB1c2JfZ2FkZ2V0X2dldF9zdHJpbmcoJnN0cmluZ3RhYiwKKwkJCQkJd192YWx1ZSAmIDB4ZmYsIHJlcS0+YnVmKTsKKwkJCWlmICh2YWx1ZSA+PSAwKSB7CisJCQkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpdmFsdWUpOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisKKwkvKiBjdXJyZW50bHkgdHdvIGNvbmZpZ3MsIHR3byBzcGVlZHMgKi8KKwljYXNlIFVTQl9SRVFfU0VUX0NPTkZJR1VSQVRJT046CisJCWlmIChjdHJsLT5iUmVxdWVzdFR5cGUgIT0gMCkgeworCQkJZ290byB1bmtub3duOworCQl9CisJCWlmIChnYWRnZXQtPmFfaG5wX3N1cHBvcnQpIHsKKwkJCURCRyhkZXYsICJITlAgYXZhaWxhYmxlXG4iKTsKKwkJfSBlbHNlIGlmIChnYWRnZXQtPmFfYWx0X2hucF9zdXBwb3J0KSB7CisJCQlEQkcoZGV2LCAiSE5QIG5lZWRzIGEgZGlmZmVyZW50IHJvb3QgcG9ydFxuIik7CisJCX0gZWxzZSB7CisJCQlWREJHKGRldiwgIkhOUCBpbmFjdGl2ZVxuIik7CisJCX0KKwkJc3Bpbl9sb2NrKCZkZXYtPmxvY2spOworCQl2YWx1ZSA9IGdtaWRpX3NldF9jb25maWcoZGV2LCB3X3ZhbHVlLCBHRlBfQVRPTUlDKTsKKwkJc3Bpbl91bmxvY2soJmRldi0+bG9jayk7CisJCWJyZWFrOworCWNhc2UgVVNCX1JFUV9HRVRfQ09ORklHVVJBVElPTjoKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSBVU0JfRElSX0lOKSB7CisJCQlnb3RvIHVua25vd247CisJCX0KKwkJKih1OCAqKXJlcS0+YnVmID0gZGV2LT5jb25maWc7CisJCXZhbHVlID0gbWluKHdfbGVuZ3RoLCAodTE2KTEpOworCQlicmVhazsKKworCS8qIHVudGlsIHdlIGFkZCBhbHRzZXR0aW5nIHN1cHBvcnQsIG9yIG90aGVyIGludGVyZmFjZXMsCisJICogb25seSAwLzAgYXJlIHBvc3NpYmxlLiAgcHhhMnh4IG9ubHkgc3VwcG9ydHMgMC8wIChwb29ybHkpCisJICogYW5kIGFscmVhZHkga2lsbGVkIHBlbmRpbmcgZW5kcG9pbnQgSS9PLgorCSAqLworCWNhc2UgVVNCX1JFUV9TRVRfSU5URVJGQUNFOgorCQlpZiAoY3RybC0+YlJlcXVlc3RUeXBlICE9IFVTQl9SRUNJUF9JTlRFUkZBQ0UpIHsKKwkJCWdvdG8gdW5rbm93bjsKKwkJfQorCQlzcGluX2xvY2soJmRldi0+bG9jayk7CisJCWlmIChkZXYtPmNvbmZpZyAmJiB3X2luZGV4IDwgR01JRElfTlVNX0lOVEVSRkFDRVMKKwkJCSYmIHdfdmFsdWUgPT0gMCkKKwkJeworCQkJdTggY29uZmlnID0gZGV2LT5jb25maWc7CisKKwkJCS8qIHJlc2V0cyBpbnRlcmZhY2UgY29uZmlndXJhdGlvbiwgZm9yZ2V0cyBhYm91dAorCQkJICogcHJldmlvdXMgdHJhbnNhY3Rpb24gc3RhdGUgKHF1ZXVlZCBidWZzLCBldGMpCisJCQkgKiBhbmQgcmUtaW5pdHMgZW5kcG9pbnQgc3RhdGUgKHRvZ2dsZSBldGMpCisJCQkgKiBubyByZXNwb25zZSBxdWV1ZWQsIGp1c3QgemVybyBzdGF0dXMgPT0gc3VjY2Vzcy4KKwkJCSAqIGlmIHdlIGhhZCBtb3JlIHRoYW4gb25lIGludGVyZmFjZSB3ZSBjb3VsZG4ndAorCQkJICogdXNlIHRoaXMgInJlc2V0IHRoZSBjb25maWciIHNob3J0Y3V0LgorCQkJICovCisJCQlnbWlkaV9yZXNldF9jb25maWcoZGV2KTsKKwkJCWdtaWRpX3NldF9jb25maWcoZGV2LCBjb25maWcsIEdGUF9BVE9NSUMpOworCQkJdmFsdWUgPSAwOworCQl9CisJCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCQlicmVhazsKKwljYXNlIFVTQl9SRVFfR0VUX0lOVEVSRkFDRToKKwkJaWYgKGN0cmwtPmJSZXF1ZXN0VHlwZSAhPSAoVVNCX0RJUl9JTnxVU0JfUkVDSVBfSU5URVJGQUNFKSkgeworCQkJZ290byB1bmtub3duOworCQl9CisJCWlmICghZGV2LT5jb25maWcpIHsKKwkJCWJyZWFrOworCQl9CisJCWlmICh3X2luZGV4ID49IEdNSURJX05VTV9JTlRFUkZBQ0VTKSB7CisJCQl2YWx1ZSA9IC1FRE9NOworCQkJYnJlYWs7CisJCX0KKwkJKih1OCAqKXJlcS0+YnVmID0gMDsKKwkJdmFsdWUgPSBtaW4od19sZW5ndGgsICh1MTYpMSk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKK3Vua25vd246CisJCVZEQkcoZGV2LCAidW5rbm93biBjb250cm9sIHJlcSUwMnguJTAyeCB2JTA0eCBpJTA0eCBsJWRcbiIsCisJCQljdHJsLT5iUmVxdWVzdFR5cGUsIGN0cmwtPmJSZXF1ZXN0LAorCQkJd192YWx1ZSwgd19pbmRleCwgd19sZW5ndGgpOworCX0KKworCS8qIHJlc3BvbmQgd2l0aCBkYXRhIHRyYW5zZmVyIGJlZm9yZSBzdGF0dXMgcGhhc2U/ICovCisJaWYgKHZhbHVlID49IDApIHsKKwkJcmVxLT5sZW5ndGggPSB2YWx1ZTsKKwkJcmVxLT56ZXJvID0gdmFsdWUgPCB3X2xlbmd0aDsKKwkJdmFsdWUgPSB1c2JfZXBfcXVldWUoZ2FkZ2V0LT5lcDAsIHJlcSwgR0ZQX0FUT01JQyk7CisJCWlmICh2YWx1ZSA8IDApIHsKKwkJCURCRyhkZXYsICJlcF9xdWV1ZSAtLT4gJWRcbiIsIHZhbHVlKTsKKwkJCXJlcS0+c3RhdHVzID0gMDsKKwkJCWdtaWRpX3NldHVwX2NvbXBsZXRlKGdhZGdldC0+ZXAwLCByZXEpOworCQl9CisJfQorCisJLyogZGV2aWNlIGVpdGhlciBzdGFsbHMgKHZhbHVlIDwgMCkgb3IgcmVwb3J0cyBzdWNjZXNzICovCisJcmV0dXJuIHZhbHVlOworfQorCitzdGF0aWMgdm9pZCBnbWlkaV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfZ2FkZ2V0ICpnYWRnZXQpCit7CisJc3RydWN0IGdtaWRpX2RldmljZSAqZGV2ID0gZ2V0X2dhZGdldF9kYXRhKGdhZGdldCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmxvY2ssIGZsYWdzKTsKKwlnbWlkaV9yZXNldF9jb25maWcoZGV2KTsKKworCS8qIGEgbW9yZSBzaWduaWZpY2FudCBhcHBsaWNhdGlvbiBtaWdodCBoYXZlIHNvbWUgbm9uLXVzYgorCSAqIGFjdGl2aXRpZXMgdG8gcXVpZXNjZSBoZXJlLCBzYXZpbmcgcmVzb3VyY2VzIGxpa2UgcG93ZXIKKwkgKiBvciBwdXNoaW5nIHRoZSBub3RpZmljYXRpb24gdXAgYSBuZXR3b3JrIHN0YWNrLgorCSAqLworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+bG9jaywgZmxhZ3MpOworCisJLyogbmV4dCB3ZSBtYXkgZ2V0IHNldHVwKCkgY2FsbHMgdG8gZW51bWVyYXRlIG5ldyBjb25uZWN0aW9uczsKKwkgKiBvciBhbiB1bmJpbmQoKSBkdXJpbmcgc2h1dGRvd24gKGluY2x1ZGluZyByZW1vdmluZyBtb2R1bGUpLgorCSAqLworfQorCitzdGF0aWMgdm9pZCAvKiBfX2luaXRfb3JfZXhpdCAqLyBnbWlkaV91bmJpbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKwlzdHJ1Y3Qgc25kX2NhcmQqIGNhcmQ7CisKKwlEQkcoZGV2LCAidW5iaW5kXG4iKTsKKworCWNhcmQgPSBkZXYtPmNhcmQ7CisJZGV2LT5jYXJkID0gTlVMTDsKKwlpZiAoY2FyZCkgeworCQlzbmRfY2FyZF9mcmVlKGNhcmQpOworCX0KKworCS8qIHdlJ3ZlIGFscmVhZHkgYmVlbiBkaXNjb25uZWN0ZWQgLi4uIG5vIGkvbyBpcyBhY3RpdmUgKi8KKwlpZiAoZGV2LT5yZXEpIHsKKwkJZGV2LT5yZXEtPmxlbmd0aCA9IFVTQl9CVUZTSVo7CisJCWZyZWVfZXBfcmVxKGdhZGdldC0+ZXAwLCBkZXYtPnJlcSk7CisJfQorCWtmcmVlKGRldik7CisJc2V0X2dhZGdldF9kYXRhKGdhZGdldCwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZ21pZGlfc25kX2ZyZWUoc3RydWN0IHNuZF9kZXZpY2UgKmRldmljZSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ21pZGlfdHJhbnNtaXRfcGFja2V0KHN0cnVjdCB1c2JfcmVxdWVzdCogcmVxLCB1aW50OF90IHAwLAorCQkJCQl1aW50OF90IHAxLCB1aW50OF90IHAyLCB1aW50OF90IHAzKQoreworCXVuc2lnbmVkIGxlbmd0aCA9IHJlcS0+bGVuZ3RoOworCisJdWludDhfdCogYnVmID0gKHVpbnQ4X3QqKXJlcS0+YnVmICsgbGVuZ3RoOworCWJ1ZlswXSA9IHAwOworCWJ1ZlsxXSA9IHAxOworCWJ1ZlsyXSA9IHAyOworCWJ1ZlszXSA9IHAzOworCXJlcS0+bGVuZ3RoID0gbGVuZ3RoICsgNDsKK30KKworLyoKKyAqIENvbnZlcnRzIE1JREkgY29tbWFuZHMgdG8gVVNCIE1JREkgcGFja2V0cy4KKyAqLworc3RhdGljIHZvaWQgZ21pZGlfdHJhbnNtaXRfYnl0ZShzdHJ1Y3QgdXNiX3JlcXVlc3QqIHJlcSwKKwkJCQlzdHJ1Y3QgZ21pZGlfaW5fcG9ydCogcG9ydCwgdWludDhfdCBiKQoreworCXVpbnQ4X3QgcDAgPSBwb3J0LT5jYWJsZTsKKworCWlmIChiID49IDB4ZjgpIHsKKwkJZ21pZGlfdHJhbnNtaXRfcGFja2V0KHJlcSwgcDAgfCAweDBmLCBiLCAwLCAwKTsKKwl9IGVsc2UgaWYgKGIgPj0gMHhmMCkgeworCQlzd2l0Y2ggKGIpIHsKKwkJY2FzZSAweGYwOgorCQkJcG9ydC0+ZGF0YVswXSA9IGI7CisJCQlwb3J0LT5zdGF0ZSA9IFNUQVRFX1NZU0VYXzE7CisJCQlicmVhazsKKwkJY2FzZSAweGYxOgorCQljYXNlIDB4ZjM6CisJCQlwb3J0LT5kYXRhWzBdID0gYjsKKwkJCXBvcnQtPnN0YXRlID0gU1RBVEVfMVBBUkFNOworCQkJYnJlYWs7CisJCWNhc2UgMHhmMjoKKwkJCXBvcnQtPmRhdGFbMF0gPSBiOworCQkJcG9ydC0+c3RhdGUgPSBTVEFURV8yUEFSQU1fMTsKKwkJCWJyZWFrOworCQljYXNlIDB4ZjQ6CisJCWNhc2UgMHhmNToKKwkJCXBvcnQtPnN0YXRlID0gU1RBVEVfVU5LTk9XTjsKKwkJCWJyZWFrOworCQljYXNlIDB4ZjY6CisJCQlnbWlkaV90cmFuc21pdF9wYWNrZXQocmVxLCBwMCB8IDB4MDUsIDB4ZjYsIDAsIDApOworCQkJcG9ydC0+c3RhdGUgPSBTVEFURV9VTktOT1dOOworCQkJYnJlYWs7CisJCWNhc2UgMHhmNzoKKwkJCXN3aXRjaCAocG9ydC0+c3RhdGUpIHsKKwkJCWNhc2UgU1RBVEVfU1lTRVhfMDoKKwkJCQlnbWlkaV90cmFuc21pdF9wYWNrZXQocmVxLAorCQkJCQlwMCB8IDB4MDUsIDB4ZjcsIDAsIDApOworCQkJCWJyZWFrOworCQkJY2FzZSBTVEFURV9TWVNFWF8xOgorCQkJCWdtaWRpX3RyYW5zbWl0X3BhY2tldChyZXEsCisJCQkJCXAwIHwgMHgwNiwgcG9ydC0+ZGF0YVswXSwgMHhmNywgMCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUQVRFX1NZU0VYXzI6CisJCQkJZ21pZGlfdHJhbnNtaXRfcGFja2V0KHJlcSwKKwkJCQkJcDAgfCAweDA3LCBwb3J0LT5kYXRhWzBdLAorCQkJCQlwb3J0LT5kYXRhWzFdLCAweGY3KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCXBvcnQtPnN0YXRlID0gU1RBVEVfVU5LTk9XTjsKKwkJCWJyZWFrOworCQl9CisJfSBlbHNlIGlmIChiID49IDB4ODApIHsKKwkJcG9ydC0+ZGF0YVswXSA9IGI7CisJCWlmIChiID49IDB4YzAgJiYgYiA8PSAweGRmKQorCQkJcG9ydC0+c3RhdGUgPSBTVEFURV8xUEFSQU07CisJCWVsc2UKKwkJCXBvcnQtPnN0YXRlID0gU1RBVEVfMlBBUkFNXzE7CisJfSBlbHNlIHsgLyogYiA8IDB4ODAgKi8KKwkJc3dpdGNoIChwb3J0LT5zdGF0ZSkgeworCQljYXNlIFNUQVRFXzFQQVJBTToKKwkJCWlmIChwb3J0LT5kYXRhWzBdIDwgMHhmMCkgeworCQkJCXAwIHw9IHBvcnQtPmRhdGFbMF0gPj4gNDsKKwkJCX0gZWxzZSB7CisJCQkJcDAgfD0gMHgwMjsKKwkJCQlwb3J0LT5zdGF0ZSA9IFNUQVRFX1VOS05PV047CisJCQl9CisJCQlnbWlkaV90cmFuc21pdF9wYWNrZXQocmVxLCBwMCwgcG9ydC0+ZGF0YVswXSwgYiwgMCk7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV8yUEFSQU1fMToKKwkJCXBvcnQtPmRhdGFbMV0gPSBiOworCQkJcG9ydC0+c3RhdGUgPSBTVEFURV8yUEFSQU1fMjsKKwkJCWJyZWFrOworCQljYXNlIFNUQVRFXzJQQVJBTV8yOgorCQkJaWYgKHBvcnQtPmRhdGFbMF0gPCAweGYwKSB7CisJCQkJcDAgfD0gcG9ydC0+ZGF0YVswXSA+PiA0OworCQkJCXBvcnQtPnN0YXRlID0gU1RBVEVfMlBBUkFNXzE7CisJCQl9IGVsc2UgeworCQkJCXAwIHw9IDB4MDM7CisJCQkJcG9ydC0+c3RhdGUgPSBTVEFURV9VTktOT1dOOworCQkJfQorCQkJZ21pZGlfdHJhbnNtaXRfcGFja2V0KHJlcSwKKwkJCQlwMCwgcG9ydC0+ZGF0YVswXSwgcG9ydC0+ZGF0YVsxXSwgYik7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9TWVNFWF8wOgorCQkJcG9ydC0+ZGF0YVswXSA9IGI7CisJCQlwb3J0LT5zdGF0ZSA9IFNUQVRFX1NZU0VYXzE7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9TWVNFWF8xOgorCQkJcG9ydC0+ZGF0YVsxXSA9IGI7CisJCQlwb3J0LT5zdGF0ZSA9IFNUQVRFX1NZU0VYXzI7CisJCQlicmVhazsKKwkJY2FzZSBTVEFURV9TWVNFWF8yOgorCQkJZ21pZGlfdHJhbnNtaXRfcGFja2V0KHJlcSwKKwkJCQlwMCB8IDB4MDQsIHBvcnQtPmRhdGFbMF0sIHBvcnQtPmRhdGFbMV0sIGIpOworCQkJcG9ydC0+c3RhdGUgPSBTVEFURV9TWVNFWF8wOworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkIGdtaWRpX3RyYW5zbWl0KHN0cnVjdCBnbWlkaV9kZXZpY2UqIGRldiwgc3RydWN0IHVzYl9yZXF1ZXN0KiByZXEpCit7CisJc3RydWN0IHVzYl9lcCogZXAgPSBkZXYtPmluX2VwOworCXN0cnVjdCBnbWlkaV9pbl9wb3J0KiBwb3J0ID0gJmRldi0+aW5fcG9ydDsKKworCWlmICghZXApIHsKKwkJcmV0dXJuOworCX0KKwlpZiAoIXJlcSkgeworCQlyZXEgPSBhbGxvY19lcF9yZXEoZXAsIGJ1Zmxlbik7CisJfQorCWlmICghcmVxKSB7CisJCUVSUk9SKGRldiwgImdtaWRpX3RyYW5zbWl0OiBhbGxvY19lcF9yZXF1ZXN0IGZhaWxlZFxuIik7CisJCXJldHVybjsKKwl9CisJcmVxLT5sZW5ndGggPSAwOworCXJlcS0+Y29tcGxldGUgPSBnbWlkaV9jb21wbGV0ZTsKKworCWlmIChwb3J0LT5hY3RpdmUpIHsKKwkJd2hpbGUgKHJlcS0+bGVuZ3RoICsgMyA8IGJ1ZmxlbikgeworCQkJdWludDhfdCBiOworCQkJaWYgKHNuZF9yYXdtaWRpX3RyYW5zbWl0KGRldi0+aW5fc3Vic3RyZWFtLCAmYiwgMSkKKwkJCQkhPSAxKQorCQkJeworCQkJCXBvcnQtPmFjdGl2ZSA9IDA7CisJCQkJYnJlYWs7CisJCQl9CisJCQlnbWlkaV90cmFuc21pdF9ieXRlKHJlcSwgcG9ydCwgYik7CisJCX0KKwl9CisJaWYgKHJlcS0+bGVuZ3RoID4gMCkgeworCQl1c2JfZXBfcXVldWUoZXAsIHJlcSwgR0ZQX0FUT01JQyk7CisJfSBlbHNlIHsKKwkJZnJlZV9lcF9yZXEoZXAsIHJlcSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBnbWlkaV9pbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlKiBkZXYgPSAoc3RydWN0IGdtaWRpX2RldmljZSopZGF0YTsKKworCWdtaWRpX3RyYW5zbWl0KGRldiwgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQgZ21pZGlfaW5fb3BlbihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0pCit7CisJc3RydWN0IGdtaWRpX2RldmljZSogZGV2ID0gc3Vic3RyZWFtLT5ybWlkaS0+cHJpdmF0ZV9kYXRhOworCisJVkRCRyhkZXYsICJnbWlkaV9pbl9vcGVuXG4iKTsKKwlkZXYtPmluX3N1YnN0cmVhbSA9IHN1YnN0cmVhbTsKKwlkZXYtPmluX3BvcnQuc3RhdGUgPSBTVEFURV9VTktOT1dOOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdtaWRpX2luX2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlWREJHKGRldiwgImdtaWRpX2luX2Nsb3NlXG4iKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgZ21pZGlfaW5fdHJpZ2dlcihzdHJ1Y3Qgc25kX3Jhd21pZGlfc3Vic3RyZWFtICpzdWJzdHJlYW0sIGludCB1cCkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlKiBkZXYgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwlWREJHKGRldiwgImdtaWRpX2luX3RyaWdnZXIgJWRcbiIsIHVwKTsKKwlkZXYtPmluX3BvcnQuYWN0aXZlID0gdXA7CisJaWYgKHVwKSB7CisJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmRldi0+dGFza2xldCk7CisJfQorfQorCitzdGF0aWMgaW50IGdtaWRpX291dF9vcGVuKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlKiBkZXYgPSBzdWJzdHJlYW0tPnJtaWRpLT5wcml2YXRlX2RhdGE7CisKKwlWREJHKGRldiwgImdtaWRpX291dF9vcGVuXG4iKTsKKwlkZXYtPm91dF9zdWJzdHJlYW0gPSBzdWJzdHJlYW07CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZ21pZGlfb3V0X2Nsb3NlKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSkKK3sKKwlWREJHKGRldiwgImdtaWRpX291dF9jbG9zZVxuIik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGdtaWRpX291dF90cmlnZ2VyKHN0cnVjdCBzbmRfcmF3bWlkaV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwgaW50IHVwKQoreworCXN0cnVjdCBnbWlkaV9kZXZpY2UqIGRldiA9IHN1YnN0cmVhbS0+cm1pZGktPnByaXZhdGVfZGF0YTsKKworCVZEQkcoZGV2LCAiZ21pZGlfb3V0X3RyaWdnZXIgJWRcbiIsIHVwKTsKKwlpZiAodXApIHsKKwkJc2V0X2JpdChzdWJzdHJlYW0tPm51bWJlciwgJmRldi0+b3V0X3RyaWdnZXJlZCk7CisJfSBlbHNlIHsKKwkJY2xlYXJfYml0KHN1YnN0cmVhbS0+bnVtYmVyLCAmZGV2LT5vdXRfdHJpZ2dlcmVkKTsKKwl9Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc25kX3Jhd21pZGlfb3BzIGdtaWRpX2luX29wcyA9IHsKKwkub3BlbiA9IGdtaWRpX2luX29wZW4sCisJLmNsb3NlID0gZ21pZGlfaW5fY2xvc2UsCisJLnRyaWdnZXIgPSBnbWlkaV9pbl90cmlnZ2VyLAorfTsKKworc3RhdGljIHN0cnVjdCBzbmRfcmF3bWlkaV9vcHMgZ21pZGlfb3V0X29wcyA9IHsKKwkub3BlbiA9IGdtaWRpX291dF9vcGVuLAorCS5jbG9zZSA9IGdtaWRpX291dF9jbG9zZSwKKwkudHJpZ2dlciA9IGdtaWRpX291dF90cmlnZ2VyCit9OworCisvKiByZWdpc3RlciBhcyBhIHNvdW5kICJjYXJkIiAqLworc3RhdGljIGludCBnbWlkaV9yZWdpc3Rlcl9jYXJkKHN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7CisJc3RydWN0IHNuZF9yYXdtaWRpICpybWlkaTsKKwlpbnQgZXJyOworCWludCBvdXRfcG9ydHMgPSAxOworCWludCBpbl9wb3J0cyA9IDE7CisJc3RhdGljIHN0cnVjdCBzbmRfZGV2aWNlX29wcyBvcHMgPSB7CisJCS5kZXZfZnJlZSA9IGdtaWRpX3NuZF9mcmVlLAorCX07CisKKwljYXJkID0gc25kX2NhcmRfbmV3KGluZGV4LCBpZCwgVEhJU19NT0RVTEUsIDApOworCWlmICghY2FyZCkgeworCQlFUlJPUihkZXYsICJzbmRfY2FyZF9uZXcgZmFpbGVkXG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBmYWlsOworCX0KKwlkZXYtPmNhcmQgPSBjYXJkOworCisJZXJyID0gc25kX2RldmljZV9uZXcoY2FyZCwgU05EUlZfREVWX0xPV0xFVkVMLCBkZXYsICZvcHMpOworCWlmIChlcnIgPCAwKSB7CisJCUVSUk9SKGRldiwgInNuZF9kZXZpY2VfbmV3IGZhaWxlZDogZXJyb3IgJWRcbiIsIGVycik7CisJCWdvdG8gZmFpbDsKKwl9CisKKwlzdHJjcHkoY2FyZC0+ZHJpdmVyLCBsb25nbmFtZSk7CisJc3RyY3B5KGNhcmQtPmxvbmduYW1lLCBsb25nbmFtZSk7CisJc3RyY3B5KGNhcmQtPnNob3J0bmFtZSwgc2hvcnRuYW1lKTsKKworCS8qIFNldCB1cCByYXdtaWRpICovCisJZGV2LT5pbl9wb3J0LmRldiA9IGRldjsKKwlkZXYtPmluX3BvcnQuYWN0aXZlID0gMDsKKwlzbmRfY29tcG9uZW50X2FkZChjYXJkLCAiTUlESSIpOworCWVyciA9IHNuZF9yYXdtaWRpX25ldyhjYXJkLCAiVVNCIE1JREkgR2FkZ2V0IiwgMCwKKwkJCSAgICAgIG91dF9wb3J0cywgaW5fcG9ydHMsICZybWlkaSk7CisJaWYgKGVyciA8IDApIHsKKwkJRVJST1IoZGV2LCAic25kX3Jhd21pZGlfbmV3IGZhaWxlZDogZXJyb3IgJWRcbiIsIGVycik7CisJCWdvdG8gZmFpbDsKKwl9CisJZGV2LT5ybWlkaSA9IHJtaWRpOworCXN0cmNweShybWlkaS0+bmFtZSwgY2FyZC0+c2hvcnRuYW1lKTsKKwlybWlkaS0+aW5mb19mbGFncyA9IFNORFJWX1JBV01JRElfSU5GT19PVVRQVVQgfAorCQkJICAgIFNORFJWX1JBV01JRElfSU5GT19JTlBVVCB8CisJCQkgICAgU05EUlZfUkFXTUlESV9JTkZPX0RVUExFWDsKKwlybWlkaS0+cHJpdmF0ZV9kYXRhID0gZGV2OworCisJLyogWWVzLCByYXdtaWRpIE9VVFBVVCA9IFVTQiBJTiwgYW5kIHJhd21pZGkgSU5QVVQgPSBVU0IgT1VULgorCSAgIEl0J3MgYW4gdXBzaWRlLWRvd24gd29ybGQgYmVpbmcgYSBnYWRnZXQuICovCisJc25kX3Jhd21pZGlfc2V0X29wcyhybWlkaSwgU05EUlZfUkFXTUlESV9TVFJFQU1fT1VUUFVULCAmZ21pZGlfaW5fb3BzKTsKKwlzbmRfcmF3bWlkaV9zZXRfb3BzKHJtaWRpLCBTTkRSVl9SQVdNSURJX1NUUkVBTV9JTlBVVCwgJmdtaWRpX291dF9vcHMpOworCisJc25kX2NhcmRfc2V0X2RldihjYXJkLCAmZGV2LT5nYWRnZXQtPmRldik7CisKKwkvKiByZWdpc3RlciBpdCAtIHdlJ3JlIHJlYWR5IHRvIGdvICovCisJZXJyID0gc25kX2NhcmRfcmVnaXN0ZXIoY2FyZCk7CisJaWYgKGVyciA8IDApIHsKKwkJRVJST1IoZGV2LCAic25kX2NhcmRfcmVnaXN0ZXIgZmFpbGVkXG4iKTsKKwkJZ290byBmYWlsOworCX0KKworCVZEQkcoZGV2LCAiZ21pZGlfcmVnaXN0ZXJfY2FyZCBmaW5pc2hlZCBva1xuIik7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJaWYgKGRldi0+Y2FyZCkgeworCQlzbmRfY2FyZF9mcmVlKGRldi0+Y2FyZCk7CisJCWRldi0+Y2FyZCA9IE5VTEw7CisJfQorCXJldHVybiBlcnI7Cit9CisKKy8qCisgKiBDcmVhdGVzIGFuIG91dHB1dCBlbmRwb2ludCwgYW5kIGluaXRpYWxpemVzIG91dHB1dCBwb3J0cy4KKyAqLworc3RhdGljIGludCBfX2RldmluaXQgZ21pZGlfYmluZChzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldjsKKwlzdHJ1Y3QgdXNiX2VwICppbl9lcCwgKm91dF9lcDsKKwlpbnQgZ2NudW0sIGVyciA9IDA7CisKKwkvKiBzdXBwb3J0IG9wdGlvbmFsIHZlbmRvci9kaXN0cm8gY3VzdG9taXphdGlvbiAqLworCWlmIChpZFZlbmRvcikgeworCQlpZiAoIWlkUHJvZHVjdCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJpZFZlbmRvciBuZWVkcyBpZFByb2R1Y3QhXG4iKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CisJCWRldmljZV9kZXNjLmlkVmVuZG9yID0gY3B1X3RvX2xlMTYoaWRWZW5kb3IpOworCQlkZXZpY2VfZGVzYy5pZFByb2R1Y3QgPSBjcHVfdG9fbGUxNihpZFByb2R1Y3QpOworCQlpZiAoYmNkRGV2aWNlKSB7CisJCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBjcHVfdG9fbGUxNihiY2REZXZpY2UpOworCQl9CisJfQorCWlmIChpTWFudWZhY3R1cmVyKSB7CisJCXN0cmxjcHkobWFudWZhY3R1cmVyLCBpTWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSk7CisJfSBlbHNlIHsKKwkJc25wcmludGYobWFudWZhY3R1cmVyLCBzaXplb2YobWFudWZhY3R1cmVyKSwgIiVzICVzIHdpdGggJXMiLAorCQkJc3lzdGVtX3V0c25hbWUuc3lzbmFtZSwgc3lzdGVtX3V0c25hbWUucmVsZWFzZSwKKwkJCWdhZGdldC0+bmFtZSk7CisJfQorCWlmIChpUHJvZHVjdCkgeworCQlzdHJsY3B5KHByb2R1Y3RfZGVzYywgaVByb2R1Y3QsIHNpemVvZihwcm9kdWN0X2Rlc2MpKTsKKwl9CisJaWYgKGlTZXJpYWxOdW1iZXIpIHsKKwkJZGV2aWNlX2Rlc2MuaVNlcmlhbE51bWJlciA9IFNUUklOR19TRVJJQUwsCisJCXN0cmxjcHkoc2VyaWFsX251bWJlciwgaVNlcmlhbE51bWJlciwgc2l6ZW9mKHNlcmlhbF9udW1iZXIpKTsKKwl9CisKKwkvKiBCdWxrLW9ubHkgZHJpdmVycyBsaWtlIHRoaXMgb25lIFNIT1VMRCBiZSBhYmxlIHRvCisJICogYXV0b2NvbmZpZ3VyZSBvbiBhbnkgc2FuZSB1c2IgY29udHJvbGxlciBkcml2ZXIsCisJICogYnV0IHRoZXJlIG1heSBhbHNvIGJlIGltcG9ydGFudCBxdWlya3MgdG8gYWRkcmVzcy4KKwkgKi8KKwl1c2JfZXBfYXV0b2NvbmZpZ19yZXNldChnYWRnZXQpOworCWluX2VwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmYnVsa19pbl9kZXNjKTsKKwlpZiAoIWluX2VwKSB7CithdXRvY29uZl9mYWlsOgorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBjYW4ndCBhdXRvY29uZmlndXJlIG9uICVzXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisJRVBfSU5fTkFNRSA9IGluX2VwLT5uYW1lOworCWluX2VwLT5kcml2ZXJfZGF0YSA9IGluX2VwOwkvKiBjbGFpbSAqLworCisJb3V0X2VwID0gdXNiX2VwX2F1dG9jb25maWcoZ2FkZ2V0LCAmYnVsa19vdXRfZGVzYyk7CisJaWYgKCFvdXRfZXApIHsKKwkJZ290byBhdXRvY29uZl9mYWlsOworCX0KKwlFUF9PVVRfTkFNRSA9IG91dF9lcC0+bmFtZTsKKwlvdXRfZXAtPmRyaXZlcl9kYXRhID0gb3V0X2VwOwkvKiBjbGFpbSAqLworCisJZ2NudW0gPSB1c2JfZ2FkZ2V0X2NvbnRyb2xsZXJfbnVtYmVyKGdhZGdldCk7CisJaWYgKGdjbnVtID49IDApIHsKKwkJZGV2aWNlX2Rlc2MuYmNkRGV2aWNlID0gY3B1X3RvX2xlMTYoMHgwMjAwICsgZ2NudW0pOworCX0gZWxzZSB7CisJCS8qIGdtaWRpIGlzIHNvIHNpbXBsZSAobm8gYWx0c2V0dGluZ3MpIHRoYXQKKwkJICogaXQgU0hPVUxEIE5PVCBoYXZlIHByb2JsZW1zIHdpdGggYnVsay1jYXBhYmxlIGhhcmR3YXJlLgorCQkgKiBzbyB3YXJuIGFib3V0IHVucmVjb2duaXplZCBjb250cm9sbGVycywgZG9uJ3QgcGFuaWMuCisJCSAqLworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY29udHJvbGxlciAnJXMnIG5vdCByZWNvZ25pemVkXG4iLAorCQkJc2hvcnRuYW1lLCBnYWRnZXQtPm5hbWUpOworCQlkZXZpY2VfZGVzYy5iY2REZXZpY2UgPSBfX2NvbnN0YW50X2NwdV90b19sZTE2KDB4OTk5OSk7CisJfQorCisKKwkvKiBvaywgd2UgbWFkZSBzZW5zZSBvZiB0aGUgaGFyZHdhcmUgLi4uICovCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIFNMQUJfS0VSTkVMKTsKKwlpZiAoIWRldikgeworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+bG9jayk7CisJZGV2LT5nYWRnZXQgPSBnYWRnZXQ7CisJZGV2LT5pbl9lcCA9IGluX2VwOworCWRldi0+b3V0X2VwID0gb3V0X2VwOworCXNldF9nYWRnZXRfZGF0YShnYWRnZXQsIGRldik7CisJdGFza2xldF9pbml0KCZkZXYtPnRhc2tsZXQsIGdtaWRpX2luX3Rhc2tsZXQsICh1bnNpZ25lZCBsb25nKWRldik7CisKKwkvKiBwcmVhbGxvY2F0ZSBjb250cm9sIHJlc3BvbnNlIGFuZCBidWZmZXIgKi8KKwlkZXYtPnJlcSA9IHVzYl9lcF9hbGxvY19yZXF1ZXN0KGdhZGdldC0+ZXAwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+cmVxKSB7CisJCWVyciA9IC1FTk9NRU07CisJCWdvdG8gZmFpbDsKKwl9CisJZGV2LT5yZXEtPmJ1ZiA9IHVzYl9lcF9hbGxvY19idWZmZXIoZ2FkZ2V0LT5lcDAsIFVTQl9CVUZTSVosCisJCQkJJmRldi0+cmVxLT5kbWEsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZXEtPmJ1ZikgeworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIGZhaWw7CisJfQorCisJZGV2LT5yZXEtPmNvbXBsZXRlID0gZ21pZGlfc2V0dXBfY29tcGxldGU7CisKKwlkZXZpY2VfZGVzYy5iTWF4UGFja2V0U2l6ZTAgPSBnYWRnZXQtPmVwMC0+bWF4cGFja2V0OworCisJZ2FkZ2V0LT5lcDAtPmRyaXZlcl9kYXRhID0gZGV2OworCisJSU5GTyhkZXYsICIlcywgdmVyc2lvbjogIiBEUklWRVJfVkVSU0lPTiAiXG4iLCBsb25nbmFtZSk7CisJSU5GTyhkZXYsICJ1c2luZyAlcywgT1VUICVzIElOICVzXG4iLCBnYWRnZXQtPm5hbWUsCisJCUVQX09VVF9OQU1FLCBFUF9JTl9OQU1FKTsKKworCS8qIHJlZ2lzdGVyIGFzIGFuIEFMU0Egc291bmQgY2FyZCAqLworCWVyciA9IGdtaWRpX3JlZ2lzdGVyX2NhcmQoZGV2KTsKKwlpZiAoZXJyIDwgMCkgeworCQlnb3RvIGZhaWw7CisJfQorCisJVkRCRyhkZXYsICJnbWlkaV9iaW5kIGZpbmlzaGVkIG9rXG4iKTsKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlnbWlkaV91bmJpbmQoZ2FkZ2V0KTsKKwlyZXR1cm4gZXJyOworfQorCisKK3N0YXRpYyB2b2lkIGdtaWRpX3N1c3BlbmQoc3RydWN0IHVzYl9nYWRnZXQgKmdhZGdldCkKK3sKKwlzdHJ1Y3QgZ21pZGlfZGV2aWNlICpkZXYgPSBnZXRfZ2FkZ2V0X2RhdGEoZ2FkZ2V0KTsKKworCWlmIChnYWRnZXQtPnNwZWVkID09IFVTQl9TUEVFRF9VTktOT1dOKSB7CisJCXJldHVybjsKKwl9CisKKwlEQkcoZGV2LCAic3VzcGVuZFxuIik7Cit9CisKK3N0YXRpYyB2b2lkIGdtaWRpX3Jlc3VtZShzdHJ1Y3QgdXNiX2dhZGdldCAqZ2FkZ2V0KQoreworCXN0cnVjdCBnbWlkaV9kZXZpY2UgKmRldiA9IGdldF9nYWRnZXRfZGF0YShnYWRnZXQpOworCisJREJHKGRldiwgInJlc3VtZVxuIik7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZ2FkZ2V0X2RyaXZlciBnbWlkaV9kcml2ZXIgPSB7CisJLnNwZWVkCQk9IFVTQl9TUEVFRF9GVUxMLAorCS5mdW5jdGlvbgk9IChjaGFyICopbG9uZ25hbWUsCisJLmJpbmQJCT0gZ21pZGlfYmluZCwKKwkudW5iaW5kCQk9IF9fZXhpdF9wKGdtaWRpX3VuYmluZCksCisKKwkuc2V0dXAJCT0gZ21pZGlfc2V0dXAsCisJLmRpc2Nvbm5lY3QJPSBnbWlkaV9kaXNjb25uZWN0LAorCisJLnN1c3BlbmQJPSBnbWlkaV9zdXNwZW5kLAorCS5yZXN1bWUJCT0gZ21pZGlfcmVzdW1lLAorCisJLmRyaXZlciAJPSB7CisJCS5uYW1lCQk9IChjaGFyICopc2hvcnRuYW1lLAorCQkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJfSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGdtaWRpX2luaXQodm9pZCkKK3sKKwlyZXR1cm4gdXNiX2dhZGdldF9yZWdpc3Rlcl9kcml2ZXIoJmdtaWRpX2RyaXZlcik7Cit9Cittb2R1bGVfaW5pdChnbWlkaV9pbml0KTsKKworc3RhdGljIHZvaWQgX19leGl0IGdtaWRpX2NsZWFudXAodm9pZCkKK3sKKwl1c2JfZ2FkZ2V0X3VucmVnaXN0ZXJfZHJpdmVyKCZnbWlkaV9kcml2ZXIpOworfQorbW9kdWxlX2V4aXQoZ21pZGlfY2xlYW51cCk7CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9pbm9kZS5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKaW5kZXggM2JkYzVlMy4uODY5MjRmOSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L2lub2RlLmMKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZXBhcmFtLmg+CkBAIC0yMjIsNyArMjIzLDYgQEAKIAkvKiBuZWVkcyBubyBtb3JlIGNsZWFudXAgKi8KIAlCVUdfT04gKCFsaXN0X2VtcHR5ICgmZGF0YS0+ZXBmaWxlcykpOwogCUJVR19PTiAod2FpdHF1ZXVlX2FjdGl2ZSAoJmRhdGEtPndhaXQpKTsKLQlCVUdfT04gKGRvd25fdHJ5bG9jayAoJmRhdGEtPmxvY2spICE9IDApOwogCWtmcmVlIChkYXRhKTsKIH0KIApAQCAtMzQyLDcgKzM0Miw3IEBACiBzdGF0aWMgc3NpemVfdAogZXBfaW8gKHN0cnVjdCBlcF9kYXRhICplcGRhdGEsIHZvaWQgKmJ1ZiwgdW5zaWduZWQgbGVuKQogewotCURFQ0xBUkVfQ09NUExFVElPTiAoZG9uZSk7CisJREVDTEFSRV9DT01QTEVUSU9OX09OU1RBQ0sgKGRvbmUpOwogCWludCB2YWx1ZTsKIAogCXNwaW5fbG9ja19pcnEgKCZlcGRhdGEtPmRldi0+bG9jayk7CkBAIC00NzcsNiArNDc3LDEwIEBACiBlcF9yZWxlYXNlIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpCiB7CiAJc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gZmQtPnByaXZhdGVfZGF0YTsKKwlpbnQgdmFsdWU7CisKKwlpZiAoKHZhbHVlID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZkYXRhLT5sb2NrKSkgPCAwKQorCQlyZXR1cm4gdmFsdWU7CiAKIAkvKiBjbGVhbiB1cCBpZiB0aGlzIGNhbiBiZSByZW9wZW5lZCAqLwogCWlmIChkYXRhLT5zdGF0ZSAhPSBTVEFURV9FUF9VTkJPVU5EKSB7CkBAIC00ODUsNiArNDg5LDcgQEAKIAkJZGF0YS0+aHNfZGVzYy5iRGVzY3JpcHRvclR5cGUgPSAwOwogCQl1c2JfZXBfZGlzYWJsZShkYXRhLT5lcCk7CiAJfQorCXVwICgmZGF0YS0+bG9jayk7CiAJcHV0X2VwIChkYXRhKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUyOCw3ICs1MzMsOCBAQAogCXN0cnVjdCB1c2JfcmVxdWVzdAkqcmVxOwogCXN0cnVjdCBlcF9kYXRhCQkqZXBkYXRhOwogCXZvaWQJCQkqYnVmOwotCWNoYXIgX191c2VyCQkqdWJ1ZjsJCS8qIE5VTEwgZm9yIHdyaXRlcyAqLworCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaXY7CisJdW5zaWduZWQgbG9uZwkJbnJfc2VnczsKIAl1bnNpZ25lZAkJYWN0dWFsOwogfTsKIApAQCAtNTU2LDE3ICs1NjIsMzIgQEAKIHN0YXRpYyBzc2l6ZV90IGVwX2Fpb19yZWFkX3JldHJ5KHN0cnVjdCBraW9jYiAqaW9jYikKIHsKIAlzdHJ1Y3Qga2lvY2JfcHJpdgkqcHJpdiA9IGlvY2ItPnByaXZhdGU7Ci0Jc3NpemVfdAkJCXN0YXR1cyA9IHByaXYtPmFjdHVhbDsKKwlzc2l6ZV90CQkJbGVuLCB0b3RhbDsKKwlpbnQJCQlpOwogCi0JLyogd2UgInJldHJ5IiB0byBnZXQgdGhlIHJpZ2h0IG1tIGNvbnRleHQgZm9yIHRoaXM6ICovCi0Jc3RhdHVzID0gY29weV90b191c2VyKHByaXYtPnVidWYsIHByaXYtPmJ1ZiwgcHJpdi0+YWN0dWFsKTsKLQlpZiAodW5saWtlbHkoMCAhPSBzdGF0dXMpKQotCQlzdGF0dXMgPSAtRUZBVUxUOwotCWVsc2UKLQkJc3RhdHVzID0gcHJpdi0+YWN0dWFsOwotCWtmcmVlKHByaXYtPmJ1Zik7Ci0Ja2ZyZWUocHJpdik7Ci0JcmV0dXJuIHN0YXR1czsKKyAgCS8qIHdlICJyZXRyeSIgdG8gZ2V0IHRoZSByaWdodCBtbSBjb250ZXh0IGZvciB0aGlzOiAqLworCisgCS8qIGNvcHkgc3R1ZmYgaW50byB1c2VyIGJ1ZmZlcnMgKi8KKyAJdG90YWwgPSBwcml2LT5hY3R1YWw7CisgCWxlbiA9IDA7CisgCWZvciAoaT0wOyBpIDwgcHJpdi0+bnJfc2VnczsgaSsrKSB7CisgCQlzc2l6ZV90IHRoaXMgPSBtaW4oKHNzaXplX3QpKHByaXYtPml2W2ldLmlvdl9sZW4pLCB0b3RhbCk7CisKKyAJCWlmIChjb3B5X3RvX3VzZXIocHJpdi0+aXZbaV0uaW92X2Jhc2UsIHByaXYtPmJ1ZiwgdGhpcykpIHsKKyAJCQlpZiAobGVuID09IDApCisgCQkJCWxlbiA9IC1FRkFVTFQ7CisgCQkJYnJlYWs7CisgCQl9CisKKyAJCXRvdGFsIC09IHRoaXM7CisgCQlsZW4gKz0gdGhpczsKKyAJCWlmICh0b3RhbCA9PSAwKQorIAkJCWJyZWFrOworIAl9CisgIAlrZnJlZShwcml2LT5idWYpOworICAJa2ZyZWUocHJpdik7CisgIAlhaW9fcHV0X3JlcShpb2NiKTsKKyAJcmV0dXJuIGxlbjsKIH0KIAogc3RhdGljIHZvaWQgZXBfYWlvX2NvbXBsZXRlKHN0cnVjdCB1c2JfZXAgKmVwLCBzdHJ1Y3QgdXNiX3JlcXVlc3QgKnJlcSkKQEAgLTU3OSw3ICs2MDAsNyBAQAogCXNwaW5fbG9jaygmZXBkYXRhLT5kZXYtPmxvY2spOwogCXByaXYtPnJlcSA9IE5VTEw7CiAJcHJpdi0+ZXBkYXRhID0gTlVMTDsKLQlpZiAocHJpdi0+dWJ1ZiA9PSBOVUxMCisJaWYgKHByaXYtPml2ID09IE5VTEwKIAkJCXx8IHVubGlrZWx5KHJlcS0+YWN0dWFsID09IDApCiAJCQl8fCB1bmxpa2VseShraW9jYklzQ2FuY2VsbGVkKGlvY2IpKSkgewogCQlrZnJlZShyZXEtPmJ1Zik7CkBAIC02MTQsNyArNjM1LDggQEAKIAljaGFyCQkqYnVmLAogCXNpemVfdAkJbGVuLAogCXN0cnVjdCBlcF9kYXRhCSplcGRhdGEsCi0JY2hhciBfX3VzZXIJKnVidWYKKwljb25zdCBzdHJ1Y3QgaW92ZWMgKml2LAorCXVuc2lnbmVkIGxvbmcgCW5yX3NlZ3MKICkKIHsKIAlzdHJ1Y3Qga2lvY2JfcHJpdgkqcHJpdjsKQEAgLTYyOSw3ICs2NTEsOCBAQAogCQlyZXR1cm4gdmFsdWU7CiAJfQogCWlvY2ItPnByaXZhdGUgPSBwcml2OwotCXByaXYtPnVidWYgPSB1YnVmOworCXByaXYtPml2ID0gaXY7CisJcHJpdi0+bnJfc2VncyA9IG5yX3NlZ3M7CiAKIAl2YWx1ZSA9IGdldF9yZWFkeV9lcChpb2NiLT5raV9maWxwLT5mX2ZsYWdzLCBlcGRhdGEpOwogCWlmICh1bmxpa2VseSh2YWx1ZSA8IDApKSB7CkBAIC02NjksNDcgKzY5Miw1OSBAQAogCQlrZnJlZShwcml2KTsKIAkJcHV0X2VwKGVwZGF0YSk7CiAJfSBlbHNlCi0JCXZhbHVlID0gKHVidWYgPyAtRUlPQ0JSRVRSWSA6IC1FSU9DQlFVRVVFRCk7CisJCXZhbHVlID0gKGl2ID8gLUVJT0NCUkVUUlkgOiAtRUlPQ0JRVUVVRUQpOwogCXJldHVybiB2YWx1ZTsKIH0KIAogc3RhdGljIHNzaXplX3QKLWVwX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sIGxvZmZfdCBvKQorZXBfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgbykKIHsKIAlzdHJ1Y3QgZXBfZGF0YQkJKmVwZGF0YSA9IGlvY2ItPmtpX2ZpbHAtPnByaXZhdGVfZGF0YTsKIAljaGFyCQkJKmJ1ZjsKIAogCWlmICh1bmxpa2VseShlcGRhdGEtPmRlc2MuYkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlidWYgPSBrbWFsbG9jKGlvY2ItPmtpX2xlZnQsIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghYnVmKSkKIAkJcmV0dXJuIC1FTk9NRU07CisKIAlpb2NiLT5raV9yZXRyeSA9IGVwX2Fpb19yZWFkX3JldHJ5OwotCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgbGVuLCBlcGRhdGEsIHVidWYpOworCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgaW9jYi0+a2lfbGVmdCwgZXBkYXRhLCBpb3YsIG5yX3NlZ3MpOwogfQogCiBzdGF0aWMgc3NpemVfdAotZXBfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsIHNpemVfdCBsZW4sIGxvZmZfdCBvKQorZXBfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IG8pCiB7CiAJc3RydWN0IGVwX2RhdGEJCSplcGRhdGEgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CiAJY2hhcgkJCSpidWY7CisJc2l6ZV90CQkJbGVuID0gMDsKKwlpbnQJCQlpID0gMDsKIAogCWlmICh1bmxpa2VseSghKGVwZGF0YS0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0RJUl9JTikpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisKKwlidWYgPSBrbWFsbG9jKGlvY2ItPmtpX2xlZnQsIEdGUF9LRVJORUwpOwogCWlmICh1bmxpa2VseSghYnVmKSkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JaWYgKHVubGlrZWx5KGNvcHlfZnJvbV91c2VyKGJ1ZiwgdWJ1ZiwgbGVuKSAhPSAwKSkgewotCQlrZnJlZShidWYpOwotCQlyZXR1cm4gLUVGQVVMVDsKKworCWZvciAoaT0wOyBpIDwgbnJfc2VnczsgaSsrKSB7CisJCWlmICh1bmxpa2VseShjb3B5X2Zyb21fdXNlcigmYnVmW2xlbl0sIGlvdltpXS5pb3ZfYmFzZSwKKwkJCQlpb3ZbaV0uaW92X2xlbikgIT0gMCkpIHsKKwkJCWtmcmVlKGJ1Zik7CisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfQorCQlsZW4gKz0gaW92W2ldLmlvdl9sZW47CiAJfQotCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgbGVuLCBlcGRhdGEsIE5VTEwpOworCXJldHVybiBlcF9haW9fcnd0YWlsKGlvY2IsIGJ1ZiwgbGVuLCBlcGRhdGEsIE5VTEwsIDApOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAvKiB1c2VkIGFmdGVyIGVuZHBvaW50IGNvbmZpZ3VyYXRpb24gKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGVwX2lvX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9pb19vcGVyYXRpb25zID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5sbHNlZWsgPQlub19sbHNlZWssCiAKQEAgLTc0MSw3ICs3NzYsNyBAQAogCXN0cnVjdCBlcF9kYXRhCQkqZGF0YSA9IGZkLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHVzYl9lcAkJKmVwOwogCXUzMgkJCXRhZzsKLQlpbnQJCQl2YWx1ZTsKKwlpbnQJCQl2YWx1ZSwgbGVuZ3RoID0gbGVuOwogCiAJaWYgKCh2YWx1ZSA9IGRvd25faW50ZXJydXB0aWJsZSAoJmRhdGEtPmxvY2spKSA8IDApCiAJCXJldHVybiB2YWx1ZTsKQEAgLTc5Miw3ICs4MjcsNiBAQAogCQkJZ290byBmYWlsMDsKIAkJfQogCX0KLQl2YWx1ZSA9IGxlbjsKIAogCXNwaW5fbG9ja19pcnEgKCZkYXRhLT5kZXYtPmxvY2spOwogCWlmIChkYXRhLT5kZXYtPnN0YXRlID09IFNUQVRFX0RFVl9VTkJPVU5EKSB7CkBAIC04MjIsOCArODU2LDEwIEBACiAJCQkJZGF0YS0+bmFtZSk7CiAJCWRhdGEtPnN0YXRlID0gU1RBVEVfRVBfREVGRVJfRU5BQkxFOwogCX0KLQlpZiAodmFsdWUgPT0gMCkKKwlpZiAodmFsdWUgPT0gMCkgewogCQlmZC0+Zl9vcCA9ICZlcF9pb19vcGVyYXRpb25zOworCQl2YWx1ZSA9IGxlbmd0aDsKKwl9CiBnb25lOgogCXNwaW5fdW5sb2NrX2lycSAoJmRhdGEtPmRldi0+bG9jayk7CiAJaWYgKHZhbHVlIDwgMCkgewpAQCAtODQ0LDcgKzg4MCw3IEBACiBzdGF0aWMgaW50CiBlcF9vcGVuIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmQpCiB7Ci0Jc3RydWN0IGVwX2RhdGEJCSpkYXRhID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzdHJ1Y3QgZXBfZGF0YQkJKmRhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwogCWludAkJCXZhbHVlID0gLUVCVVNZOwogCiAJaWYgKGRvd25faW50ZXJydXB0aWJsZSAoJmRhdGEtPmxvY2spICE9IDApCkBAIC04NjcsNyArOTAzLDcgQEAKIH0KIAogLyogdXNlZCBiZWZvcmUgZW5kcG9pbnQgY29uZmlndXJhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXBfY29uZmlnX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcF9jb25maWdfb3BlcmF0aW9ucyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCkBAIC0xMDA5LDcgKzEwNDUsNyBAQAogCQkJZWxzZSB7CiAJCQkJbGVuID0gbWluIChsZW4sIChzaXplX3QpZGV2LT5yZXEtPmFjdHVhbCk7CiAvLyBGSVhNRSBkb24ndCBjYWxsIHRoaXMgd2l0aCB0aGUgc3BpbmxvY2sgaGVsZCAuLi4KLQkJCQlpZiAoY29weV90b191c2VyIChidWYsICZkZXYtPnJlcS0+YnVmLCBsZW4pKQorCQkJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgZGV2LT5yZXEtPmJ1ZiwgbGVuKSkKIAkJCQkJcmV0dmFsID0gLUVGQVVMVDsKIAkJCQljbGVhbl9yZXEgKGRldi0+Z2FkZ2V0LT5lcDAsIGRldi0+cmVxKTsKIAkJCQkvKiBOT1RFIHVzZXJzcGFjZSBjYW4ndCB5ZXQgY2hvb3NlIHRvIHN0YWxsICovCkBAIC0xMjI5LDYgKzEyNjUsMzUgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGludAorZXAwX3BvbGwgKHN0cnVjdCBmaWxlICpmZCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKyAgICAgICBzdHJ1Y3QgZGV2X2RhdGEgICAgICAgICAqZGV2ID0gZmQtPnByaXZhdGVfZGF0YTsKKyAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICBtYXNrID0gMDsKKworICAgICAgIHBvbGxfd2FpdChmZCwgJmRldi0+d2FpdCwgd2FpdCk7CisKKyAgICAgICBzcGluX2xvY2tfaXJxICgmZGV2LT5sb2NrKTsKKworICAgICAgIC8qIHJlcG9ydCBmZCBtb2RlIGNoYW5nZSBiZWZvcmUgYWN0aW5nIG9uIGl0ICovCisgICAgICAgaWYgKGRldi0+c2V0dXBfYWJvcnQpIHsKKyAgICAgICAgICAgICAgIGRldi0+c2V0dXBfYWJvcnQgPSAwOworICAgICAgICAgICAgICAgbWFzayA9IFBPTExIVVA7CisgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICB9CisKKyAgICAgICBpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9TRVRVUCkgeworICAgICAgICAgICAgICAgaWYgKGRldi0+c2V0dXBfaW4gfHwgZGV2LT5zZXR1cF9jYW5fc3RhbGwpCisgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBQT0xMT1VUOworICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICBpZiAoZGV2LT5ldl9uZXh0ICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgPSBQT0xMSU47CisgICAgICAgfQorb3V0OgorICAgICAgIHNwaW5fdW5sb2NrX2lycSgmZGV2LT5sb2NrKTsKKyAgICAgICByZXR1cm4gbWFzazsKK30KKwogc3RhdGljIGludCBkZXZfaW9jdGwgKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCwKIAkJdW5zaWduZWQgY29kZSwgdW5zaWduZWQgbG9uZyB2YWx1ZSkKIHsKQEAgLTEyNDEsMTQgKzEzMDYsMTQgQEAKIH0KIAogLyogdXNlZCBhZnRlciBkZXZpY2UgY29uZmlndXJhdGlvbiAqLwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZXAwX2lvX29wZXJhdGlvbnMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBlcDBfaW9fb3BlcmF0aW9ucyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCiAJLnJlYWQgPQkJZXAwX3JlYWQsCiAJLndyaXRlID0JZXAwX3dyaXRlLAogCS5mYXN5bmMgPQllcDBfZmFzeW5jLAotCS8vIC5wb2xsID0JZXAwX3BvbGwsCisJLnBvbGwgPQkJZXAwX3BvbGwsCiAJLmlvY3RsID0JZGV2X2lvY3RsLAogCS5yZWxlYXNlID0JZGV2X3JlbGVhc2UsCiB9OwpAQCAtMTY5NiwxNiArMTc2MSwxNyBAQAogewogCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGdldF9nYWRnZXRfZGF0YSAoZ2FkZ2V0KTsKIAorCXNwaW5fbG9jayAoJmRldi0+bG9jayk7CiAJaWYgKGRldi0+c3RhdGUgPT0gU1RBVEVfVU5DT05ORUNURUQpIHsKIAkJREJHIChkZXYsICJhbHJlYWR5IHVuY29ubmVjdGVkXG4iKTsKLQkJcmV0dXJuOworCQlnb3RvIGV4aXQ7CiAJfQogCWRldi0+c3RhdGUgPSBTVEFURV9VTkNPTk5FQ1RFRDsKIAogCUlORk8gKGRldiwgImRpc2Nvbm5lY3RlZFxuIik7Ci0Jc3Bpbl9sb2NrICgmZGV2LT5sb2NrKTsKIAluZXh0X2V2ZW50IChkZXYsIEdBREdFVEZTX0RJU0NPTk5FQ1QpOwogCWVwMF9yZWFkYWJsZSAoZGV2KTsKK2V4aXQ6CiAJc3Bpbl91bmxvY2sgKCZkZXYtPmxvY2spOwogfQogCkBAIC0xOTA5LDcgKzE5NzUsNyBAQAogc3RhdGljIGludAogZGV2X29wZW4gKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmZCkKIHsKLQlzdHJ1Y3QgZGV2X2RhdGEJCSpkZXYgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCXN0cnVjdCBkZXZfZGF0YQkJKmRldiA9IGlub2RlLT5pX3ByaXZhdGU7CiAJaW50CQkJdmFsdWUgPSAtRUJVU1k7CiAKIAlpZiAoZGV2LT5zdGF0ZSA9PSBTVEFURV9ERVZfRElTQUJMRUQpIHsKQEAgLTE5MjIsNyArMTk4OCw3IEBACiAJcmV0dXJuIHZhbHVlOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZXZfaW5pdF9vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGV2X2luaXRfb3BlcmF0aW9ucyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLAogCkBAIC0xOTY2LDExICsyMDMyLDEwIEBACiAJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpbm9kZS0+aV91aWQgPSBkZWZhdWx0X3VpZDsKIAkJaW5vZGUtPmlfZ2lkID0gZGVmYXVsdF9naWQ7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZQogCQkJCT0gQ1VSUkVOVF9USU1FOwotCQlpbm9kZS0+dS5nZW5lcmljX2lwID0gZGF0YTsKKwkJaW5vZGUtPmlfcHJpdmF0ZSA9IGRhdGE7CiAJCWlub2RlLT5pX2ZvcCA9IGZvcHM7CiAJfQogCXJldHVybiBpbm9kZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMgYi9kcml2ZXJzL3VzYi9nYWRnZXQvbmV0MjI4MC5jCmluZGV4IDA5MjQzMjMuLjNiZGEzN2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9uZXQyMjgwLmMKKysrIGIvZHJpdmVycy91c2IvZ2FkZ2V0L25ldDIyODAuYwpAQCAtMiw3ICsyLDcgQEAKICAqIERyaXZlciBmb3IgdGhlIFBMWCBORVQyMjgwIFVTQiBkZXZpY2UgY29udHJvbGxlci4KICAqIFNwZWNzIGFuZCBlcnJhdGEgYXJlIGF2YWlsYWJsZSBmcm9tIDxodHRwOi8vd3d3LnBseHRlY2guY29tPi4KICAqCi0gKiBQTFggVGVjaG5vbG9neSBJbmMuIChmb3JtZXJseSBOZXRDaGlwIFRlY2hub2xvZ3kpIHN1cHBvcnRlZCB0aGUgCisgKiBQTFggVGVjaG5vbG9neSBJbmMuIChmb3JtZXJseSBOZXRDaGlwIFRlY2hub2xvZ3kpIHN1cHBvcnRlZCB0aGUKICAqIGRldmVsb3BtZW50IG9mIHRoaXMgZHJpdmVyLgogICoKICAqCkBAIC0yNiw3ICsyNiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgRGF2aWQgQnJvd25lbGwKICAqIENvcHlyaWdodCAoQykgMjAwMy0yMDA1IFBMWCBUZWNobm9sb2d5LCBJbmMuCiAgKgotICogTW9kaWZpZWQgU2V0aCBMZXZ5IDIwMDUgUExYIFRlY2hub2xvZ3ksIEluYy4gdG8gcHJvdmlkZSBjb21wYXRpYmlsaXR5IHdpdGggMjI4MiBjaGlwCisgKiBNb2RpZmllZCBTZXRoIExldnkgMjAwNSBQTFggVGVjaG5vbG9neSwgSW5jLiB0byBwcm92aWRlIGNvbXBhdGliaWxpdHkKKyAqCXdpdGggMjI4MiBjaGlwCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC04NSw3ICs4Niw3IEBACiBzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfZGVzYyBbXSA9IERSSVZFUl9ERVNDOwogCiBzdGF0aWMgY29uc3QgY2hhciBlcDBuYW1lIFtdID0gImVwMCI7Ci1zdGF0aWMgY29uc3QgY2hhciAqZXBfbmFtZSBbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICpjb25zdCBlcF9uYW1lIFtdID0gewogCWVwMG5hbWUsCiAJImVwLWEiLCAiZXAtYiIsICJlcC1jIiwgImVwLWQiLAogCSJlcC1lIiwgImVwLWYiLApAQCAtMjI1LDcgKzIyNiw5IEBACiAJaWYgKCFlcC0+aXNfaW4pCiAJCXdyaXRlbCAoKDEgPDwgU0VUX05BS19PVVRfUEFDS0VUUyksICZlcC0+cmVncy0+ZXBfcnNwKTsKIAllbHNlIGlmIChkZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApIHsKLQkJLyogQWRkZWQgZm9yIDIyODIsIERvbid0IHVzZSBuYWsgcGFja2V0cyBvbiBhbiBpbiBlbmRwb2ludCwgdGhpcyB3YXMgaWdub3JlZCBvbiAyMjgwICovCisJCS8qIEFkZGVkIGZvciAyMjgyLCBEb24ndCB1c2UgbmFrIHBhY2tldHMgb24gYW4gaW4gZW5kcG9pbnQsCisJCSAqIHRoaXMgd2FzIGlnbm9yZWQgb24gMjI4MAorCQkgKi8KIAkJd3JpdGVsICgoMSA8PCBDTEVBUl9OQUtfT1VUX1BBQ0tFVFMpCiAJCQl8ICgxIDw8IENMRUFSX05BS19PVVRfUEFDS0VUU19NT0RFKSwgJmVwLT5yZWdzLT5lcF9yc3ApOwogCX0KQEAgLTI4OCw3ICsyOTEsNyBAQAogCXJldHVybiAtRVRJTUVET1VUOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHM7CiAKIHN0YXRpYyB2b2lkIGVwX3Jlc2V0IChzdHJ1Y3QgbmV0MjI4MF9yZWdzIF9faW9tZW0gKnJlZ3MsIHN0cnVjdCBuZXQyMjgwX2VwICplcCkKIHsKQEAgLTQ0OSwzNCArNDUyLDE1IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLSN1bmRlZiBVU0VfS01BTExPQwotCi0vKiBtYW55IGNvbW1vbiBwbGF0Zm9ybXMgaGF2ZSBkbWEtY29oZXJlbnQgY2FjaGVzLCB3aGljaCBtZWFucyB0aGF0IGl0J3MKLSAqIHNhZmUgdG8gdXNlIGttYWxsb2MoKSBtZW1vcnkgZm9yIGFsbCBpL28gYnVmZmVycyB3aXRob3V0IHVzaW5nIGFueQotICogY2FjaGUgZmx1c2hpbmcgY2FsbHMuICAodW5sZXNzIHlvdSdyZSB0cnlpbmcgdG8gc2hhcmUgY2FjaGUgbGluZXMKLSAqIGJldHdlZW4gZG1hIGFuZCBub24tZG1hIGFjdGl2aXRpZXMsIHdoaWNoIGlzIGEgc2xvdyBpZGVhIGluIGFueSBjYXNlLikKKy8qCisgKiBkbWEtY29oZXJlbnQgbWVtb3J5IGFsbG9jYXRpb24gKGZvciBkbWEtY2FwYWJsZSBlbmRwb2ludHMpCiAgKgotICogb3RoZXIgcGxhdGZvcm1zIG5lZWQgbW9yZSBjYXJlLCB3aXRoIDIuNSBoYXZpbmcgYSBtb2RlcmF0ZWx5IGdlbmVyYWwKLSAqIHNvbHV0aW9uICh3aGljaCBmYWxscyBkb3duIGZvciBhbGxvY2F0aW9ucyBzbWFsbGVyIHRoYW4gb25lIHBhZ2UpCi0gKiB0aGF0IGltcHJvdmVzIHNpZ25pZmljYW50bHkgb24gdGhlIDIuNCBQQ0kgYWxsb2NhdG9ycyBieSByZW1vdmluZwotICogdGhlIHJlc3RyaWN0aW9uIHRoYXQgbWVtb3J5IG5ldmVyIGJlIGZyZWVkIGluX2ludGVycnVwdCgpLgorICogTk9URTogdGhlIGRtYV8qX2NvaGVyZW50KCkgQVBJIGNhbGxzIHN1Y2suICBNb3N0IGltcGxlbWVudGF0aW9ucyBhcmUKKyAqIChhKSBwYWdlLW9yaWVudGVkLCBzbyBzbWFsbCBidWZmZXJzIGxvc2UgYmlnOyBhbmQgKGIpIGFzeW1tZXRyaWMgd2l0aAorICogcmVzcGVjdCB0byBjYWxscyB3aXRoIGlycXMgZGlzYWJsZWQ6ICBhbGxvYyBpcyBzYWZlLCBmcmVlIGlzIG5vdC4KKyAqIFdlIGN1cnJlbnRseSB3b3JrIGFyb3VuZCAoYiksIGJ1dCBub3QgKGEpLgogICovCi0jaWYJZGVmaW5lZChDT05GSUdfWDg2KQotI2RlZmluZSBVU0VfS01BTExPQwogCi0jZWxpZglkZWZpbmVkKENPTkZJR19QUEMpICYmICFkZWZpbmVkKENPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEUpCi0jZGVmaW5lIFVTRV9LTUFMTE9DCi0KLSNlbGlmCWRlZmluZWQoQ09ORklHX01JUFMpICYmICFkZWZpbmVkKENPTkZJR19ETUFfTk9OQ09IRVJFTlQpCi0jZGVmaW5lIFVTRV9LTUFMTE9DCi0KLS8qIEZJWE1FIHRoZXJlIGFyZSBvdGhlciBjYXNlcywgaW5jbHVkaW5nIGFuIHg4Ni02NCBvbmUgLi4uICAqLwotI2VuZGlmCi0KLS8qIGFsbG9jYXRpbmcgYnVmZmVycyB0aGlzIHdheSBlbGltaW5hdGVzIGRtYSBtYXBwaW5nIG92ZXJoZWFkLCB3aGljaAotICogb24gc29tZSBwbGF0Zm9ybXMgd2lsbCBtZWFuIGVsaW1pbmF0aW5nIGEgcGVyLWlvIGJ1ZmZlciBjb3B5LiAgd2l0aAotICogc29tZSBraW5kcyBvZiBzeXN0ZW0gY2FjaGVzLCBmdXJ0aGVyIHR3ZWFrcyBtYXkgc3RpbGwgYmUgbmVlZGVkLgotICovCiBzdGF0aWMgdm9pZCAqCiBuZXQyMjgwX2FsbG9jX2J1ZmZlciAoCiAJc3RydWN0IHVzYl9lcAkJKl9lcCwKQEAgLTQ5Myw0MyArNDc3LDcxIEBACiAJCXJldHVybiBOVUxMOwogCSpkbWEgPSBETUFfQUREUl9JTlZBTElEOwogCi0jaWYJZGVmaW5lZChVU0VfS01BTExPQykKLQlyZXR2YWwgPSBrbWFsbG9jKGJ5dGVzLCBnZnBfZmxhZ3MpOwotCWlmIChyZXR2YWwpCi0JCSpkbWEgPSB2aXJ0X3RvX3BoeXMocmV0dmFsKTsKLSNlbHNlCi0JaWYgKGVwLT5kbWEpIHsKLQkJLyogdGhlIG1haW4gcHJvYmxlbSB3aXRoIHRoaXMgY2FsbCBpcyB0aGF0IGl0IHdhc3RlcyBtZW1vcnkKLQkJICogb24gdHlwaWNhbCAxL04gcGFnZSBhbGxvY2F0aW9uczogaXQgYWxsb2NhdGVzIDEtTiBwYWdlcy4KLQkJICovCi0jd2FybmluZyBVc2luZyBkbWFfYWxsb2NfY29oZXJlbnQgZXZlbiB3aXRoIGJ1ZmZlcnMgc21hbGxlciB0aGFuIGEgcGFnZS4KKwlpZiAoZXAtPmRtYSkKIAkJcmV0dmFsID0gZG1hX2FsbG9jX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsCiAJCQkJYnl0ZXMsIGRtYSwgZ2ZwX2ZsYWdzKTsKLQl9IGVsc2UKKwllbHNlCiAJCXJldHZhbCA9IGttYWxsb2MoYnl0ZXMsIGdmcF9mbGFncyk7Ci0jZW5kaWYKIAlyZXR1cm4gcmV0dmFsOwogfQogCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGJ1ZmxvY2spOworc3RhdGljIExJU1RfSEVBRChidWZmZXJzKTsKKworc3RydWN0IGZyZWVfcmVjb3JkIHsKKwlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwl1bnNpZ25lZAkJYnl0ZXM7CisJZG1hX2FkZHJfdAkJZG1hOworfTsKKworc3RhdGljIHZvaWQgZG9fZnJlZSh1bnNpZ25lZCBsb25nIGlnbm9yZWQpCit7CisJc3Bpbl9sb2NrX2lycSgmYnVmbG9jayk7CisJd2hpbGUgKCFsaXN0X2VtcHR5KCZidWZmZXJzKSkgeworCQlzdHJ1Y3QgZnJlZV9yZWNvcmQJKmJ1ZjsKKworCQlidWYgPSBsaXN0X2VudHJ5KGJ1ZmZlcnMubmV4dCwgc3RydWN0IGZyZWVfcmVjb3JkLCBsaXN0KTsKKwkJbGlzdF9kZWwoJmJ1Zi0+bGlzdCk7CisJCXNwaW5fdW5sb2NrX2lycSgmYnVmbG9jayk7CisKKwkJZG1hX2ZyZWVfY29oZXJlbnQoYnVmLT5kZXYsIGJ1Zi0+Ynl0ZXMsIGJ1ZiwgYnVmLT5kbWEpOworCisJCXNwaW5fbG9ja19pcnEoJmJ1ZmxvY2spOworCX0KKwlzcGluX3VubG9ja19pcnEoJmJ1ZmxvY2spOworfQorCitzdGF0aWMgREVDTEFSRV9UQVNLTEVUKGRlZmVycmVkX2ZyZWUsIGRvX2ZyZWUsIDApOworCiBzdGF0aWMgdm9pZAogbmV0MjI4MF9mcmVlX2J1ZmZlciAoCiAJc3RydWN0IHVzYl9lcCAqX2VwLAotCXZvaWQgKmJ1ZiwKKwl2b2lkICphZGRyZXNzLAogCWRtYV9hZGRyX3QgZG1hLAogCXVuc2lnbmVkIGJ5dGVzCiApIHsKIAkvKiBmcmVlIG1lbW9yeSBpbnRvIHRoZSByaWdodCBhbGxvY2F0b3IgKi8KLSNpZm5kZWYJVVNFX0tNQUxMT0MKIAlpZiAoZG1hICE9IERNQV9BRERSX0lOVkFMSUQpIHsKIAkJc3RydWN0IG5ldDIyODBfZXAJKmVwOworCQlzdHJ1Y3QgZnJlZV9yZWNvcmQJKmJ1ZiA9IGFkZHJlc3M7CisJCXVuc2lnbmVkIGxvbmcJCWZsYWdzOwogCiAJCWVwID0gY29udGFpbmVyX29mKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKIAkJaWYgKCFfZXApCiAJCQlyZXR1cm47Ci0JCWRtYV9mcmVlX2NvaGVyZW50KCZlcC0+ZGV2LT5wZGV2LT5kZXYsIGJ5dGVzLCBidWYsIGRtYSk7CisKKwkJZXAgPSBjb250YWluZXJfb2YgKF9lcCwgc3RydWN0IG5ldDIyODBfZXAsIGVwKTsKKwkJYnVmLT5kZXYgPSAmZXAtPmRldi0+cGRldi0+ZGV2OworCQlidWYtPmJ5dGVzID0gYnl0ZXM7CisJCWJ1Zi0+ZG1hID0gZG1hOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZidWZsb2NrLCBmbGFncyk7CisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmJ1ZmZlcnMpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZWZlcnJlZF9mcmVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVmbG9jaywgZmxhZ3MpOwogCX0gZWxzZQotI2VuZGlmCi0JCWtmcmVlIChidWYpOworCQlrZnJlZSAoYWRkcmVzcyk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC03MzcsNyArNzQ5LDggQEAKIAkgKi8KIAlpZiAoZXAtPmlzX2luKQogCQlkbWFjb3VudCB8PSAoMSA8PCBETUFfRElSRUNUSU9OKTsKLQlpZiAoKCFlcC0+aXNfaW4gJiYgKGRtYWNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkgfHwgZXAtPmRldi0+cGRldi0+ZGV2aWNlICE9IDB4MjI4MCkKKwlpZiAoKCFlcC0+aXNfaW4gJiYgKGRtYWNvdW50ICUgZXAtPmVwLm1heHBhY2tldCkgIT0gMCkKKwkJCXx8IGVwLT5kZXYtPnBkZXYtPmRldmljZSAhPSAweDIyODApCiAJCWRtYWNvdW50IHw9ICgxIDw8IEVORF9PRl9DSEFJTik7CiAKIAlyZXEtPnZhbGlkID0gdmFsaWQ7CkBAIC04MTIsNyArODI1LDcgQEAKIAogCS8qIHByZXZpb3VzIE9VVCBwYWNrZXQgbWlnaHQgaGF2ZSBiZWVuIHNob3J0ICovCiAJaWYgKCFlcC0+aXNfaW4gJiYgKCh0bXAgPSByZWFkbCAoJmVwLT5yZWdzLT5lcF9zdGF0KSkKLQkJIAkJJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSAhPSAwKSB7CisJCQkJJiAoMSA8PCBOQUtfT1VUX1BBQ0tFVFMpKSAhPSAwKSB7CiAJCXdyaXRlbCAoKDEgPDwgU0hPUlRfUEFDS0VUX1RSQU5TRkVSUkVEX0lOVEVSUlVQVCksCiAJCQkmZXAtPnJlZ3MtPmVwX3N0YXQpOwogCkBAIC0xMzczLDcgKzEzODYsNyBAQAogCSh2b2lkKSByZWFkbCAoJmVwLT5yZWdzLT5lcF9yc3ApOwogfQogCi1zdGF0aWMgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9lcF9vcHMgbmV0MjI4MF9lcF9vcHMgPSB7CiAJLmVuYWJsZQkJPSBuZXQyMjgwX2VuYWJsZSwKIAkuZGlzYWJsZQk9IG5ldDIyODBfZGlzYWJsZSwKIApAQCAtMTYzMSw3ICsxNjQ0LDcgQEAKIAl9CiAKIAkvKiBJbmRleGVkIFJlZ2lzdGVycyAqLwotCQkvLyBub25lIHlldCAKKwkJLy8gbm9uZSB5ZXQKIAogCS8qIFN0YXRpc3RpY3MgKi8KIAl0ID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiXG5pcnFzOiAgIik7CkBAIC0xNjkxLDExICsxNzA0LDExIEBACiAJCQkJKHsgY2hhciAqdmFsOwogCQkJCSBzd2l0Y2ggKGQtPmJtQXR0cmlidXRlcyAmIDB4MDMpIHsKIAkJCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLOgotCQkJCSAJdmFsID0gImJ1bGsiOyBicmVhazsKKwkJCQkJdmFsID0gImJ1bGsiOyBicmVhazsKIAkJCQkgY2FzZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQ6Ci0JCQkJIAl2YWwgPSAiaW50ciI7IGJyZWFrOworCQkJCQl2YWwgPSAiaW50ciI7IGJyZWFrOwogCQkJCSBkZWZhdWx0OgotCQkJCSAJdmFsID0gImlzbyI7IGJyZWFrOworCQkJCQl2YWwgPSAiaXNvIjsgYnJlYWs7CiAJCQkJIH07IHZhbDsgfSksCiAJCQkJbGUxNl90b19jcHUgKGQtPndNYXhQYWNrZXRTaXplKSAmIDB4MWZmZiwKIAkJCQllcC0+ZG1hID8gImRtYSIgOiAicGlvIiwgZXAtPmZpZm9fc2l6ZQpAQCAtMTgwOCw4ICsxODIxLDggQEAKICAqIG5ldDIyODBfc2V0X2ZpZm9fbW9kZSAtIGNoYW5nZSBhbGxvY2F0aW9uIG9mIGZpZm8gYnVmZmVycwogICogQGdhZGdldDogYWNjZXNzIHRvIHRoZSBuZXQyMjgwIGRldmljZSB0aGF0IHdpbGwgYmUgdXBkYXRlZAogICogQG1vZGU6IDAgZm9yIGRlZmF1bHQsIGZvdXIgMWtCIGJ1ZmZlcnMgKGVwLWEgdGhyb3VnaCBlcC1kKTsKLSAqIAkxIGZvciB0d28gMmtCIGJ1ZmZlcnMgKGVwLWEgYW5kIGVwLWIgb25seSk7Ci0gKiAJMiBmb3Igb25lIDJrQiBidWZmZXIgKGVwLWEpIGFuZCB0d28gMWtCIG9uZXMgKGVwLWIsIGVwLWMpLgorICoJMSBmb3IgdHdvIDJrQiBidWZmZXJzIChlcC1hIGFuZCBlcC1iIG9ubHkpOworICoJMiBmb3Igb25lIDJrQiBidWZmZXIgKGVwLWEpIGFuZCB0d28gMWtCIG9uZXMgKGVwLWIsIGVwLWMpLgogICoKICAqIHJldHVybnMgemVybyBvbiBzdWNjZXNzLCBlbHNlIG5lZ2F0aXZlIGVycm5vLiAgd2hlbiB0aGlzIHN1Y2NlZWRzLAogICogdGhlIGNvbnRlbnRzIG9mIGdhZGdldC0+ZXBfbGlzdCBtYXkgaGF2ZSBjaGFuZ2VkLgpAQCAtMjI0MSw3ICsyMjU0LDggQEAKIAkJCQlyZXEtPnRkLT5kbWFjb3VudCA9IDA7CiAJCQkJdCA9IHJlYWRsICgmZXAtPnJlZ3MtPmVwX2F2YWlsKTsKIAkJCQlkbWFfZG9uZSAoZXAsIHJlcSwgY291bnQsCi0JCQkJCShlcC0+b3V0X292ZXJmbG93IHx8IHQpID8gLUVPVkVSRkxPVyA6IDApOworCQkJCQkoZXAtPm91dF9vdmVyZmxvdyB8fCB0KQorCQkJCQkJPyAtRU9WRVJGTE9XIDogMCk7CiAJCQl9CiAKIAkJCS8qIGFsc28gZmx1c2ggdG8gcHJldmVudCBlcnJhdHVtIDAxMDYgdHJvdWJsZSAqLwpAQCAtMjQxMSw3ICsyNDI1LDcgQEAKIAkJCSwgJmVwLT5yZWdzLT5lcF9zdGF0KTsKIAkJdS5yYXcgWzBdID0gcmVhZGwgKCZkZXYtPnVzYi0+c2V0dXAwMTIzKTsKIAkJdS5yYXcgWzFdID0gcmVhZGwgKCZkZXYtPnVzYi0+c2V0dXA0NTY3KTsKLQkJCisKIAkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzBdKTsKIAkJY3B1X3RvX2xlMzJzICgmdS5yYXcgWzFdKTsKIApAQCAtMjU3OCwxNCArMjU5MiwxNiBAQAogCiAJLyogVkJVUyBkaXNjb25uZWN0IGlzIGluZGljYXRlZCBieSBWQlVTX1BJTiBhbmQgVkJVU19JTlRFUlJVUFQgc2V0LgogCSAqIFJvb3QgUG9ydCBSZXNldCBpcyBpbmRpY2F0ZWQgYnkgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlJVUFQgc2V0IGFuZAotCSAqIGJvdGggSElHSF9TUEVFRCBhbmQgRlVMTF9TUEVFRCBjbGVhciAoYXMgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCAKKwkgKiBib3RoIEhJR0hfU1BFRUQgYW5kIEZVTExfU1BFRUQgY2xlYXIgKGFzIFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQKIAkgKiBvbmx5IGluZGljYXRlcyBhIGNoYW5nZSBpbiB0aGUgcmVzZXQgc3RhdGUpLgogCSAqLwogCWlmIChzdGF0ICYgdG1wKSB7CiAJCXdyaXRlbCAodG1wLCAmZGV2LT5yZWdzLT5pcnFzdGF0MSk7Ci0JCWlmICgoKChzdGF0ICYgKDEgPDwgUk9PVF9QT1JUX1JFU0VUX0lOVEVSUlVQVCkpICYmIAotCQkJCSgocmVhZGwgKCZkZXYtPnVzYi0+dXNic3RhdCkgJiBtYXNrKSA9PSAwKSkKLQkJCQl8fCAoKHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCkgJiAoMSA8PCBWQlVTX1BJTikpID09IDApIAorCQlpZiAoKCgoc3RhdCAmICgxIDw8IFJPT1RfUE9SVF9SRVNFVF9JTlRFUlJVUFQpKQorCQkJCQkmJiAoKHJlYWRsICgmZGV2LT51c2ItPnVzYnN0YXQpICYgbWFzaykKKwkJCQkJCQk9PSAwKSkKKwkJCQl8fCAoKHJlYWRsICgmZGV2LT51c2ItPnVzYmN0bCkKKwkJCQkJJiAoMSA8PCBWQlVTX1BJTikpID09IDApCiAJCQkgICAgKSAmJiAoIGRldi0+Z2FkZ2V0LnNwZWVkICE9IFVTQl9TUEVFRF9VTktOT1dOKSkgewogCQkJREVCVUcgKGRldiwgImRpc2Nvbm5lY3QgJXNcbiIsCiAJCQkJCWRldi0+ZHJpdmVyLT5kcml2ZXIubmFtZSk7CkBAIC0yODUyLDcgKzI4NjgsNyBAQAogCiAJLyogbm93IGFsbCB0aGUgcGNpIGdvb2RpZXMgLi4uICovCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlIChwZGV2KSA8IDApIHsKLSAgIAkgICAgICAgIHJldHZhbCA9IC1FTk9ERVY7CisJICAgICAgICByZXR2YWwgPSAtRU5PREVWOwogCQlnb3RvIGRvbmU7CiAJfQogCWRldi0+ZW5hYmxlZCA9IDE7CkBAIC0yODcwLDYgKzI4ODYsMTAgQEAKIAl9CiAJZGV2LT5yZWdpb24gPSAxOwogCisJLyogRklYTUUgcHJvdmlkZSBmaXJtd2FyZSBkb3dubG9hZCBpbnRlcmZhY2UgdG8gcHV0CisJICogODA1MSBjb2RlIGludG8gdGhlIGNoaXAsIGUuZy4gdG8gdHVybiBvbiBQQ0kgUE0uCisJICovCisKIAliYXNlID0gaW9yZW1hcF9ub2NhY2hlIChyZXNvdXJjZSwgbGVuKTsKIAlpZiAoYmFzZSA9PSBOVUxMKSB7CiAJCURFQlVHIChkZXYsICJjYW4ndCBtYXAgbWVtb3J5XG4iKTsKQEAgLTI5ODQsMTYgKzMwMDQsMTYgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKLQkuY2xhc3MgPSAJKChQQ0lfQ0xBU1NfU0VSSUFMX1VTQiA8PCA4KSB8IDB4ZmUpLAotCS5jbGFzc19tYXNrID0gCX4wLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaV9pZHMgW10gPSB7IHsKKwkuY2xhc3MgPQkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPQl+MCwKIAkudmVuZG9yID0JMHgxN2NjLAogCS5kZXZpY2UgPQkweDIyODAsCiAJLnN1YnZlbmRvciA9CVBDSV9BTllfSUQsCiAJLnN1YmRldmljZSA9CVBDSV9BTllfSUQsCiB9LCB7Ci0JLmNsYXNzID0gCSgoUENJX0NMQVNTX1NFUklBTF9VU0IgPDwgOCkgfCAweGZlKSwKLQkuY2xhc3NfbWFzayA9IAl+MCwKKwkuY2xhc3MgPQkoKFBDSV9DTEFTU19TRVJJQUxfVVNCIDw8IDgpIHwgMHhmZSksCisJLmNsYXNzX21hc2sgPQl+MCwKIAkudmVuZG9yID0JMHgxN2NjLAogCS5kZXZpY2UgPQkweDIyODIsCiAJLnN1YnZlbmRvciA9CVBDSV9BTllfSUQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvb21hcF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCmluZGV4IDJkZTk3NDguLjhjMThkZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9vbWFwX3VkYy5jCkBAIC00MCw3ICs0MCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYl9nYWRnZXQuaD4KLSNpbmNsdWRlIDxsaW51eC91c2Jfb3RnLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL290Zy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CkBAIC0yNDM3LDcgKzI0MzcsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3VkY19zaG93LCBOVUxMKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKIAkub3BlbgkJPSBwcm9jX3VkY19vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApAQCAtMjg2OSw3ICsyODY5LDcgQEAKIAogc3RhdGljIGludCBfX2V4aXQgb21hcF91ZGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7Ci0JREVDTEFSRV9DT01QTEVUSU9OKGRvbmUpOworCURFQ0xBUkVfQ09NUExFVElPTl9PTlNUQUNLKGRvbmUpOwogCiAJaWYgKCF1ZGMpCiAJCXJldHVybiAtRU5PREVWOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmMKaW5kZXggZmZmMDI3ZC4uZjFhZGNmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5jCkBAIC0xNTAsNiArMTUwLDM5IEBACiBzdGF0aWMgdm9pZCBweGEyeHhfZXBfZmlmb19mbHVzaCAoc3RydWN0IHVzYl9lcCAqZXApOwogc3RhdGljIHZvaWQgbnVrZSAoc3RydWN0IHB4YTJ4eF9lcCAqLCBpbnQgc3RhdHVzKTsKIAorLyogb25lIEdQSU8gc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZWN0IFZCVVMgZnJvbSB0aGUgaG9zdCAqLworc3RhdGljIGludCBpc192YnVzX3ByZXNlbnQodm9pZCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8JCSptYWNoID0gdGhlX2NvbnRyb2xsZXItPm1hY2g7CisKKwlpZiAobWFjaC0+Z3Bpb192YnVzKQorCQlyZXR1cm4gcHhhX2dwaW9fZ2V0KG1hY2gtPmdwaW9fdmJ1cyk7CisJaWYgKG1hY2gtPnVkY19pc19jb25uZWN0ZWQpCisJCXJldHVybiBtYWNoLT51ZGNfaXNfY29ubmVjdGVkKCk7CisJcmV0dXJuIDE7Cit9CisKKy8qIG9uZSBHUElPIHNob3VsZCBjb250cm9sIGEgRCsgcHVsbHVwLCBzbyBob3N0IHNlZXMgdGhpcyBkZXZpY2UgKG9yIG5vdCkgKi8KK3N0YXRpYyB2b2lkIHB1bGx1cF9vZmYodm9pZCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8JCSptYWNoID0gdGhlX2NvbnRyb2xsZXItPm1hY2g7CisKKwlpZiAobWFjaC0+Z3Bpb19wdWxsdXApCisJCXB4YV9ncGlvX3NldChtYWNoLT5ncGlvX3B1bGx1cCwgMCk7CisJZWxzZSBpZiAobWFjaC0+dWRjX2NvbW1hbmQpCisJCW1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QpOworfQorCitzdGF0aWMgdm9pZCBwdWxsdXBfb24odm9pZCkKK3sKKwlzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8JCSptYWNoID0gdGhlX2NvbnRyb2xsZXItPm1hY2g7CisKKwlpZiAobWFjaC0+Z3Bpb19wdWxsdXApCisJCXB4YV9ncGlvX3NldChtYWNoLT5ncGlvX3B1bGx1cCwgMSk7CisJZWxzZSBpZiAobWFjaC0+dWRjX2NvbW1hbmQpCisJCW1hY2gtPnVkY19jb21tYW5kKFBYQTJYWF9VRENfQ01EX0NPTk5FQ1QpOworfQorCiBzdGF0aWMgdm9pZCBwaW9faXJxX2VuYWJsZShpbnQgYkVuZHBvaW50QWRkcmVzcykKIHsKICAgICAgICAgYkVuZHBvaW50QWRkcmVzcyAmPSAweGY7CkBAIC0xNzIxLDYgKzE3NTQsMTYgQEAKIAogI2VuZGlmCiAKK3N0YXRpYyBpcnFyZXR1cm5fdAordWRjX3ZidXNfaXJxKGludCBpcnEsIHZvaWQgKl9kZXYsIHN0cnVjdCBwdF9yZWdzICpyKQoreworCXN0cnVjdCBweGEyeHhfdWRjCSpkZXYgPSBfZGV2OworCWludAkJCXZidXMgPSBweGFfZ3Bpb19nZXQoZGV2LT5tYWNoLT5ncGlvX3ZidXMpOworCisJcHhhMnh4X3VkY192YnVzX3Nlc3Npb24oJmRldi0+Z2FkZ2V0LCB2YnVzKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApAQCAtMjQzOCw3ICsyNDgxLDcgQEAKIHN0YXRpYyBpbnQgX19pbml0IHB4YTJ4eF91ZGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlzdHJ1Y3QgcHhhMnh4X3VkYyAqZGV2ID0gJm1lbW9yeTsKLQlpbnQgcmV0dmFsLCBvdXRfZG1hID0gMTsKKwlpbnQgcmV0dmFsLCBvdXRfZG1hID0gMSwgdmJ1c19pcnE7CiAJdTMyIGNoaXByZXY7CiAKIAkvKiBpbnNpc3Qgb24gSW50ZWwvQVJNL1hTY2FsZSAqLwpAQCAtMjUwMiw2ICsyNTQ1LDE2IEBACiAJLyogb3RoZXIgbm9uLXN0YXRpYyBwYXJ0cyBvZiBpbml0ICovCiAJZGV2LT5kZXYgPSAmcGRldi0+ZGV2OwogCWRldi0+bWFjaCA9IHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhOworCWlmIChkZXYtPm1hY2gtPmdwaW9fdmJ1cykgeworCQl2YnVzX2lycSA9IElSUV9HUElPKGRldi0+bWFjaC0+Z3Bpb192YnVzICYgR1BJT19NRF9NQVNLX05SKTsKKwkJcHhhX2dwaW9fbW9kZSgoZGV2LT5tYWNoLT5ncGlvX3ZidXMgJiBHUElPX01EX01BU0tfTlIpCisJCQkJfCBHUElPX0lOKTsKKwkJc2V0X2lycV90eXBlKHZidXNfaXJxLCBJUlFUX0JPVEhFREdFKTsKKwl9IGVsc2UKKwkJdmJ1c19pcnEgPSAwOworCWlmIChkZXYtPm1hY2gtPmdwaW9fcHVsbHVwKQorCQlweGFfZ3Bpb19tb2RlKChkZXYtPm1hY2gtPmdwaW9fcHVsbHVwICYgR1BJT19NRF9NQVNLX05SKQorCQkJCXwgR1BJT19PVVQgfCBHUElPX0RGTFRfTE9XKTsKIAogCWluaXRfdGltZXIoJmRldi0+dGltZXIpOwogCWRldi0+dGltZXIuZnVuY3Rpb24gPSB1ZGNfd2F0Y2hkb2c7CkBAIC0yNTU3LDggKzI2MTAsMTkgQEAKIAkJSEVYX0RJU1BMQVkoZGV2LT5zdGF0cy5pcnFzKTsKIAkJTFVCX0RJU0NfQkxOS19MRUQgJj0gMHhmZjsKICNlbmRpZgotCX0KKwl9IGVsc2UKICNlbmRpZgorCWlmICh2YnVzX2lycSkgeworCQlyZXR2YWwgPSByZXF1ZXN0X2lycSh2YnVzX2lycSwgdWRjX3ZidXNfaXJxLAorCQkJCVNBX0lOVEVSUlVQVCB8IFNBX1NBTVBMRV9SQU5ET00sCisJCQkJZHJpdmVyX25hbWUsIGRldik7CisJCWlmIChyZXR2YWwgIT0gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogY2FuJ3QgZ2V0IGlycSAlaSwgZXJyICVkXG4iLAorCQkJCWRyaXZlcl9uYW1lLCB2YnVzX2lycSwgcmV0dmFsKTsKKwkJCWZyZWVfaXJxKElSUV9VU0IsIGRldik7CisJCQlyZXR1cm4gLUVCVVNZOworCQl9CisJfQogCWNyZWF0ZV9wcm9jX2ZpbGVzKCk7CiAKIAlyZXR1cm4gMDsKQEAgLTI1ODcsNiArMjY1MSw4IEBACiAJCWZyZWVfaXJxKExVQkJPQ0tfVVNCX0lSUSwgZGV2KTsKIAl9CiAjZW5kaWYKKwlpZiAoZGV2LT5tYWNoLT5ncGlvX3ZidXMpCisJCWZyZWVfaXJxKElSUV9HUElPKGRldi0+bWFjaC0+Z3Bpb192YnVzKSwgZGV2KTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKIAl0aGVfY29udHJvbGxlciA9IE5VTEw7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3B4YTJ4eF91ZGMuaAppbmRleCAxOWE4ODNmLi44ZTU5OGM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9nYWRnZXQvcHhhMnh4X3VkYy5oCisrKyBiL2RyaXZlcnMvdXNiL2dhZGdldC9weGEyeHhfdWRjLmgKQEAgLTE3NywyNyArMTc3LDE5IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcHhhMnh4X3VkYyAqdGhlX2NvbnRyb2xsZXI7CiAKLS8qIG9uZSBHUElPIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBWQlVTIGZyb20gdGhlIGhvc3QgKi8KLXN0YXRpYyBpbmxpbmUgaW50IGlzX3ZidXNfcHJlc2VudCh2b2lkKQorc3RhdGljIGlubGluZSBpbnQgcHhhX2dwaW9fZ2V0KHVuc2lnbmVkIGdwaW8pCiB7Ci0JaWYgKCF0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2lzX2Nvbm5lY3RlZCkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIHRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfaXNfY29ubmVjdGVkKCk7CisJcmV0dXJuIChHUExSKGdwaW8pICYgR1BJT19iaXQoZ3BpbykpICE9IDA7CiB9CiAKLS8qIG9uZSBHUElPIHNob3VsZCBjb250cm9sIGEgRCsgcHVsbHVwLCBzbyBob3N0IHNlZXMgdGhpcyBkZXZpY2UgKG9yIG5vdCkgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdWxsdXBfb2ZmKHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgcHhhX2dwaW9fc2V0KHVuc2lnbmVkIGdwaW8sIGludCBpc19vbikKIHsKLQlpZiAoIXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZCkKLQkJcmV0dXJuOwotCXRoZV9jb250cm9sbGVyLT5tYWNoLT51ZGNfY29tbWFuZChQWEEyWFhfVURDX0NNRF9ESVNDT05ORUNUKTsKLX0KKwlpbnQgbWFzayA9IEdQSU9fYml0KGdwaW8pOwogCi1zdGF0aWMgaW5saW5lIHZvaWQgcHVsbHVwX29uKHZvaWQpCi17Ci0JaWYgKCF0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2NvbW1hbmQpCi0JCXJldHVybjsKLQl0aGVfY29udHJvbGxlci0+bWFjaC0+dWRjX2NvbW1hbmQoUFhBMlhYX1VEQ19DTURfQ09OTkVDVCk7CisJaWYgKGlzX29uKQorCQlHUFNSKGdwaW8pID0gbWFzazsKKwllbHNlCisJCUdQQ1IoZ3BpbykgPSBtYXNrOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jIGIvZHJpdmVycy91c2IvZ2FkZ2V0L3NlcmlhbC5jCmluZGV4IGU3NjJhYTEuLmI4OTNlMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2dhZGdldC9zZXJpYWwuYworKysgYi9kcml2ZXJzL3VzYi9nYWRnZXQvc2VyaWFsLmMKQEAgLTExMjAsMTIgKzExMjAsMTUgQEAKIGdzX2RlYnVnX2xldmVsKDMsICJnc19zZW5kOiBsZW49JWQsIDB4JTIuMnggMHglMi4yeCAweCUyLjJ4IC4uLlxuIiwgbGVuLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYpLCAqKCh1bnNpZ25lZCBjaGFyICopcmVxLT5idWYrMSksICooKHVuc2lnbmVkIGNoYXIgKilyZXEtPmJ1ZisyKSk7CiAJCQlsaXN0X2RlbCgmcmVxX2VudHJ5LT5yZV9lbnRyeSk7CiAJCQlyZXEtPmxlbmd0aCA9IGxlbjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ZGV2X2xvY2ssIGZsYWdzKTsKIAkJCWlmICgocmV0PXVzYl9lcF9xdWV1ZShlcCwgcmVxLCBHRlBfQVRPTUlDKSkpIHsKIAkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkiZ3Nfc2VuZDogY2Fubm90IHF1ZXVlIHJlYWQgcmVxdWVzdCwgcmV0PSVkXG4iLAogCQkJCQlyZXQpOworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmRldl9sb2NrLCBmbGFncyk7CiAJCQkJYnJlYWs7CiAJCQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5kZXZfbG9jaywgZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJYnJlYWs7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL2hvc3QvS2NvbmZpZwppbmRleCBiOTNkNzFkLi5jZjEwY2JjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvaG9zdC9LY29uZmlnCkBAIC04Myw2ICs4Myw3IEBACiAJdHJpc3RhdGUgIk9IQ0kgSENEIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0FSQ0hfSEFTX09IQ0kKIAlzZWxlY3QgSVNQMTMwMV9PTUFQIGlmIE1BQ0hfT01BUF9IMiB8fCBNQUNIX09NQVBfSDMKKwlzZWxlY3QgSTJDIGlmIEFSQ0hfUE5YNDAwOAogCS0tLWhlbHAtLS0KIAkgIFRoZSBPcGVuIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UgKE9IQ0kpIGlzIGEgc3RhbmRhcmQgZm9yIGFjY2Vzc2luZwogCSAgVVNCIDEuMSBob3N0IGNvbnRyb2xsZXIgaGFyZHdhcmUuICBJdCBkb2VzIG1vcmUgaW4gaGFyZHdhcmUgdGhhbiBJbnRlbCdzCkBAIC0xNDEsNiArMTQyLDM0IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCB1aGNpLWhjZC4KIAorY29uZmlnIFVTQl9VMTMyX0hDRAorCXRyaXN0YXRlICJFbGFuIFUxMzIgQWRhcHRlciBIb3N0IENvbnRyb2xsZXIiCisJZGVwZW5kcyBvbiBVU0IgJiYgVVNCX0ZURElfRUxBTgorCWRlZmF1bHQgTQorCWhlbHAKKwkgIFRoZSBVMTMyIGFkYXB0ZXIgaXMgYSBVU0IgdG8gQ2FyZEJ1cyBhZGFwdGVyIHNwZWNpZmljYWxseSBkZXNpZ25lZAorCSAgZm9yIFBDIGNhcmRzIHRoYXQgY29udGFpbiBhbiBPSENJIGhvc3QgY29udHJvbGxlci4gVHlwaWNhbCBQQyBjYXJkcworCSAgYXJlIHRoZSBPcmFuZ2UgTW9iaWxlIDNHIE9wdGlvbiBHbG9iZVRyb3R0ZXIgRnVzaW9uIGNhcmQuIFRoZSBVMTMyCisJICBhZGFwdGVyIHdpbGwgKk5PVCogd29yayB3aXRoIFBDIGNhcmRzIHRoYXQgZG8gbm90IGNvbnRhaW4gYW4gT0hDSQorCSAgY29udHJvbGxlci4KKworCSAgRm9yIHRob3NlIFBDIGNhcmRzIHRoYXQgY29udGFpbiBtdWx0aXBsZSBPSENJIGNvbnRyb2xsZXJzIG9ubHkgdGhlcgorCSAgZmlyc3Qgb25lIGlzIHVzZWQuCisKKwkgIFRoZSBkcml2ZXIgY29uc2lzdHMgb2YgdHdvIG1vZHVsZXMsIHRoZSAiZnRkaS1lbGFuIiBtb2R1bGUgaXMgYQorCSAgVVNCIGNsaWVudCBkcml2ZXIgdGhhdCBpbnRlcmZhY2VzIHRvIHRoZSBGVERJIGNoaXAgd2l0aGluIEVMQU4ncworCSAgVVNCLXRvLVBDTUNJQSBhZGFwdGVyLCBhbmQgdGhpcyAidTEzMi1oY2QiIG1vZHVsZSBpcyBhIFVTQiBob3N0CisJICBjb250cm9sbGVyIGRyaXZlciB0aGF0IHRhbGtzIHRvIHRoZSBPSENJIGNvbnRyb2xsZXIgd2l0aGluIHRoZQorCSAgQ2FyZEJ1cyBjYXJkcyB0aGF0IGFyZSBpbnNlcnRlZCBpbiB0aGUgVTEzMiBhZGFwdGVyLgorCisJICBUaGlzIGRyaXZlciBoYXMgYmVlbiB0ZXN0ZWQgd2l0aCBhIENhcmRCdXMgT0hDSSBVU0IgYWRhcHRlciwgYW5kCisJICB3b3JrZWQgd2l0aCBhIFVTQiBQRU4gRHJpdmUgaW5zZXJ0ZWQgaW50byB0aGUgZmlyc3QgVVNCIHBvcnQgb2YKKwkgIHRoZSBQQ0NBUkQuIEEgcmF0aGVyIHBvaW50bGVzcyB0aGluZyB0byBkbywgYnV0IHVzZWZ1bCBmb3IgdGVzdGluZy4KKworCSAgSXQgaXMgc2FmZSB0byBzYXkgTSBoZXJlLgorCisJICBTZWUgYWxzbyA8aHR0cDovL3d3dy5lbGFuZGlnaXRhbHN5c3RlbXMuY29tL3N1cHBvcnQvdWZhcS91MTMybGludXgucGhwPgorCiBjb25maWcgVVNCX1NMODExX0hDRAogCXRyaXN0YXRlICJTTDgxMUhTIEhDRCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVVNCCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlIGIvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQppbmRleCBlMzAyMGY0Yi4uYTJlNThjOCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9ob3N0L01ha2VmaWxlCkBAIC0xNCw0ICsxNCw1IEBACiBvYmotJChDT05GSUdfVVNCX1VIQ0lfSENEKQkrPSB1aGNpLWhjZC5vCiBvYmotJChDT05GSUdfVVNCX1NMODExX0hDRCkJKz0gc2w4MTEtaGNkLm8KIG9iai0kKENPTkZJR19VU0JfU0w4MTFfQ1MpCSs9IHNsODExX2NzLm8KK29iai0kKENPTkZJR19VU0JfVTEzMl9IQ0QpCSs9IHUxMzItaGNkLm8KIG9iai0kKENPTkZJR19FVFJBWF9BUkNIX1YxMCkJKz0gaGNfY3Jpc3YxMC5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktYXUxeHh4LmMKaW5kZXggMjZlZDc1Ny4uNWQxYjEyYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1hdTF4eHguYwpAQCAtMjAwLDYgKzIwMCw3IEBACiAJLnJlc2V0ID0gZWhjaV9pbml0LAogCS5zdGFydCA9IGVoY2lfcnVuLAogCS5zdG9wID0gZWhjaV9zdG9wLAorCS5zaHV0ZG93biA9IGVoY2lfc2h1dGRvd24sCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC0yNjgsNiArMjY5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGVoY2lfaGNkX2F1MXh4eF9kcml2ZXIgPSB7CiAJLnByb2JlID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9yZW1vdmUsCisJLnNodXRkb3duID0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKIAkvKi5zdXNwZW5kICAgICAgPSBlaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lICAgICAgID0gZWhjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCiAJLmRyaXZlciA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1kYmcuYwppbmRleCA2NWFjOWZlLi4yM2I5NWIyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZGJnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWRiZy5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC02NSw3ICs2NSw3IEBACiAJCWZvciAoaSA9IDA7IGkgPCBIQ1NfTl9QT1JUUyAocGFyYW1zKTsgaSsrKSB7CiAJCQkvLyBGSVhNRSBNSVBTIHdvbid0IHJlYWRiKCkgLi4uCiAJCQlieXRlID0gcmVhZGIgKCZlaGNpLT5jYXBzLT5wb3J0cm91dGVbKGk+PjEpXSk7Ci0JCQlzcHJpbnRmKHRtcCwgIiVkICIsIAorCQkJc3ByaW50Zih0bXAsICIlZCAiLAogCQkJCSgoaSAmIDB4MSkgPyAoKGJ5dGUpJjB4ZikgOiAoKGJ5dGU+PjQpJjB4ZikpKTsKIAkJCXN0cmNhdChidWYsIHRtcCk7CiAJCX0KQEAgLTE0MSwxMiArMTQxLDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotZGJnX2l0ZCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXRkICppdGQpIAorZGJnX2l0ZCAoY29uc3QgY2hhciAqbGFiZWwsIHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IGVoY2lfaXRkICppdGQpCiB7CiAJZWhjaV9kYmcgKGVoY2ksICIlcyBbJWRdIGl0ZCAlcCwgbmV4dCAlMDh4LCB1cmIgJXBcbiIsCiAJCWxhYmVsLCBpdGQtPmZyYW1lLCBpdGQsIGxlMzJfdG9fY3B1KGl0ZC0+aHdfbmV4dCksIGl0ZC0+dXJiKTsKIAllaGNpX2RiZyAoZWhjaSwKLQkJIiAgdHJhbnM6ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwgCisJCSIgIHRyYW5zOiAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsCiAJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bMF0pLAogCQlsZTMyX3RvX2NwdShpdGQtPmh3X3RyYW5zYWN0aW9uWzFdKSwKIAkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvblsyXSksCkBAIC0xNTYsNyArMTU2LDcgQEAKIAkJbGUzMl90b19jcHUoaXRkLT5od190cmFuc2FjdGlvbls2XSksCiAJCWxlMzJfdG9fY3B1KGl0ZC0+aHdfdHJhbnNhY3Rpb25bN10pKTsKIAllaGNpX2RiZyAoZWhjaSwKLQkJIiAgYnVmOiAgICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHhcbiIsIAorCQkiICBidWY6ICAgJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eFxuIiwKIAkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzBdKSwKIAkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzFdKSwKIAkJbGUzMl90b19jcHUoaXRkLT5od19idWZwWzJdKSwKQEAgLTE3MSwxMiArMTcxLDEyIEBACiB9CiAKIHN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQotZGJnX3NpdGQgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3NpdGQgKnNpdGQpIAorZGJnX3NpdGQgKGNvbnN0IGNoYXIgKmxhYmVsLCBzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3NpdGQgKnNpdGQpCiB7CiAJZWhjaV9kYmcgKGVoY2ksICIlcyBbJWRdIHNpdGQgJXAsIG5leHQgJTA4eCwgdXJiICVwXG4iLAogCQlsYWJlbCwgc2l0ZC0+ZnJhbWUsIHNpdGQsIGxlMzJfdG9fY3B1KHNpdGQtPmh3X25leHQpLCBzaXRkLT51cmIpOwogCWVoY2lfZGJnIChlaGNpLAotCQkiICBhZGRyICUwOHggc2NoZWQgJTA0eCByZXN1bHQgJTA4eCBidWYgJTA4eCAlMDh4XG4iLCAKKwkJIiAgYWRkciAlMDh4IHNjaGVkICUwNHggcmVzdWx0ICUwOHggYnVmICUwOHggJTA4eFxuIiwKIAkJbGUzMl90b19jcHUoc2l0ZC0+aHdfZnVsbHNwZWVkX2VwKSwKIAkJbGUzMl90b19jcHUoc2l0ZC0+aHdfdWZyYW1lKSwKIAkJbGUzMl90b19jcHUoc2l0ZC0+aHdfcmVzdWx0cyksCkBAIC00NTEsNyArNDUxLDcgQEAKIAkqYnVmID0gMDsKIAogCWJ1cyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7Ci0JaGNkID0gYnVzLT5oY3ByaXY7CisJaGNkID0gYnVzX3RvX2hjZChidXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKIAluZXh0ID0gYnVmOwogCXNpemUgPSBQQUdFX1NJWkU7CkBAIC00OTcsNyArNDk3LDcgQEAKIAlzZWVuX2NvdW50ID0gMDsKIAogCWJ1cyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7Ci0JaGNkID0gYnVzLT5oY3ByaXY7CisJaGNkID0gYnVzX3RvX2hjZChidXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKIAluZXh0ID0gYnVmOwogCXNpemUgPSBQQUdFX1NJWkU7CkBAIC02MzQsNyArNjM0LDcgQEAKIAlzdGF0aWMgY2hhcgkJbGFiZWwgW10gPSAiIjsKIAogCWJ1cyA9IGNsYXNzX2dldF9kZXZkYXRhKGNsYXNzX2Rldik7Ci0JaGNkID0gYnVzLT5oY3ByaXY7CisJaGNkID0gYnVzX3RvX2hjZChidXMpOwogCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKIAluZXh0ID0gYnVmOwogCXNpemUgPSBQQUdFX1NJWkU7CkBAIC03NTQsOSArNzU0LDcgQEAKIAl9CiAKIAlpZiAoZWhjaS0+cmVjbGFpbSkgewotCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAicmVjbGFpbSBxaCAlcCVzXG4iLAotCQkJCWVoY2ktPnJlY2xhaW0sCi0JCQkJZWhjaS0+cmVjbGFpbV9yZWFkeSA/ICIgcmVhZHkiIDogIiIpOworCQl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAicmVjbGFpbSBxaCAlcFxuIiwgZWhjaS0+cmVjbGFpbSk7CiAJCXNpemUgLT0gdGVtcDsKIAkJbmV4dCArPSB0ZW1wOwogCX0KQEAgLTc4NSwxMCArNzgzLDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY3JlYXRlX2RlYnVnX2ZpbGVzIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2kpCiB7CiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xkZXYgPSBlaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jbGFzc19kZXY7CisJaW50IHJldHZhbDsKIAotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7Ci0JY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9hc3luYyk7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcGVyaW9kaWMpOworCXJldHZhbCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3JlZ2lzdGVycyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZW1vdmVfZGVidWdfZmlsZXMgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1mc2wuYwppbmRleCBkMDMwNTE2Li4xYTkxNWU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktZnNsLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWZzbC5jCkBAIC0yODUsNiArMjg1LDcgQEAKIAkucmVzdW1lID0gZWhjaV9idXNfcmVzdW1lLAogI2VuZGlmCiAJLnN0b3AgPSBlaGNpX3N0b3AsCisJLnNodXRkb3duID0gZWhjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTMyOSw2ICszMzAsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgZWhjaV9mc2xfZHJpdmVyID0gewogCS5wcm9iZSA9IGVoY2lfZnNsX2Rydl9wcm9iZSwKIAkucmVtb3ZlID0gZWhjaV9mc2xfZHJ2X3JlbW92ZSwKKwkuc2h1dGRvd24gPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogCS5kcml2ZXIgPSB7CiAJCSAgIC5uYW1lID0gImZzbC1laGNpIiwKIAkJICAgfSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1oY2QuYwppbmRleCBkNjMxNzdhLi41YWM5MTg1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLWhjZC5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IGJ5IERhdmlkIEJyb3duZWxsCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC03MCw3ICs3MCw3IEBACiAgKiAyMDAyLTA4LTA2CUhhbmRsaW5nIGZvciBidWxrIGFuZCBpbnRlcnJ1cHQgdHJhbnNmZXJzIGlzIG1vc3RseSBzaGFyZWQ7CiAgKglvbmx5IHNjaGVkdWxpbmcgaXMgZGlmZmVyZW50LCBubyBhcmJpdHJhcnkgbGltaXRhdGlvbnMuCiAgKiAyMDAyLTA3LTI1CVNhbml0eSBjaGVjayBQQ0kgcmVhZHMsIG1vc3RseSBmb3IgYmV0dGVyIGNhcmRidXMgc3VwcG9ydCwKLSAqIAljbGVhbiB1cCBIQyBydW4gc3RhdGUgaGFuZHNoYWtpbmcuCisgKgljbGVhbiB1cCBIQyBydW4gc3RhdGUgaGFuZHNoYWtpbmcuCiAgKiAyMDAyLTA1LTI0CVByZWxpbWluYXJ5IEZTL0xTIGludGVycnVwdHMsIHVzaW5nIHNjaGVkdWxpbmcgc2hvcnRjdXRzCiAgKiAyMDAyLTA1LTExCUNsZWFyIFRUIGVycm9ycyBmb3IgRlMvTFMgY3RybC9idWxrLiAgRmlsbCBpbiBzb21lIG90aGVyCiAgKgltaXNzaW5nIHBpZWNlczogIGVuYWJsaW5nIDY0Yml0IGRtYSwgaGFuZG9mZiBmcm9tIEJJT1MvU01NLgpAQCAtMTExLDcgKzExMSw3IEBACiAjZGVmaW5lCUVIQ0lfVFVORV9NVUxUX1RUCTEKICNkZWZpbmUJRUhDSV9UVU5FX0ZMUwkJMgkvKiAoc21hbGwpIDI1NiBmcmFtZSBzY2hlZHVsZSAqLwogCi0jZGVmaW5lIEVIQ0lfSUFBX0pJRkZJRVMJKEhaLzEwMCkJLyogYXJiaXRyYXJ5OyB+MTAgbXNlYyAqLworI2RlZmluZSBFSENJX0lBQV9NU0VDUwkJMTAJCS8qIGFyYml0cmFyeSAqLwogI2RlZmluZSBFSENJX0lPX0pJRkZJRVMJCShIWi8xMCkJCS8qIGlvIHdhdGNoZG9nID4gaXJxX3RocmVzaCAqLwogI2RlZmluZSBFSENJX0FTWU5DX0pJRkZJRVMJKEhaLzIwKQkJLyogYXN5bmMgaWRsZSB0aW1lb3V0ICovCiAjZGVmaW5lIEVIQ0lfU0hSSU5LX0pJRkZJRVMJKEhaLzIwMCkJLyogYXN5bmMgcWggdW5saW5rIGRlbGF5ICovCkBAIC0yNTQsNiArMjU0LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAorc3RhdGljIHZvaWQgZW5kX3VubGlua19hc3luYyAoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiBzdGF0aWMgdm9pZCBlaGNpX3dvcmsoc3RydWN0IGVoY2lfaGNkICplaGNpLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CiAKICNpbmNsdWRlICJlaGNpLWh1Yi5jIgpAQCAtMjYzLDYgKzI2NCwyOSBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCitzdGF0aWMgdm9pZCBlaGNpX2lhYV93YXRjaGRvZyAodW5zaWduZWQgbG9uZyBwYXJhbSkKK3sKKwlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gKHN0cnVjdCBlaGNpX2hjZCAqKSBwYXJhbTsKKwl1bnNpZ25lZCBsb25nCQlmbGFnczsKKwl1MzIJCQlzdGF0dXM7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKKwlXQVJOX09OKCFlaGNpLT5yZWNsYWltKTsKKworCS8qIGxvc3QgSUFBIGlycXMgd2VkZ2UgdGhpbmdzIGJhZGx5OyBzZWVuIGZpcnN0IHdpdGggYSB2dDgyMzUgKi8KKwlpZiAoZWhjaS0+cmVjbGFpbSkgeworCQlzdGF0dXMgPSByZWFkbCAoJmVoY2ktPnJlZ3MtPnN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBTVFNfSUFBKSB7CisJCQllaGNpX3ZkYmcgKGVoY2ksICJsb3N0IElBQVxuIik7CisJCQlDT1VOVCAoZWhjaS0+c3RhdHMubG9zdF9pYWEpOworCQkJd3JpdGVsIChTVFNfSUFBLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKKwkJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOworCQl9CisJfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKK30KKwogc3RhdGljIHZvaWQgZWhjaV93YXRjaGRvZyAodW5zaWduZWQgbG9uZyBwYXJhbSkKIHsKIAlzdHJ1Y3QgZWhjaV9oY2QJCSplaGNpID0gKHN0cnVjdCBlaGNpX2hjZCAqKSBwYXJhbTsKQEAgLTI3MCwyMSArMjk0LDkgQEAKIAogCXNwaW5fbG9ja19pcnFzYXZlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogCi0JLyogbG9zdCBJQUEgaXJxcyB3ZWRnZSB0aGluZ3MgYmFkbHk7IHNlZW4gd2l0aCBhIHZ0ODIzNSAqLwotCWlmIChlaGNpLT5yZWNsYWltKSB7Ci0JCXUzMgkJc3RhdHVzID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5zdGF0dXMpOwotCi0JCWlmIChzdGF0dXMgJiBTVFNfSUFBKSB7Ci0JCQllaGNpX3ZkYmcgKGVoY2ksICJsb3N0IElBQVxuIik7Ci0JCQlDT1VOVCAoZWhjaS0+c3RhdHMubG9zdF9pYWEpOwotCQkJd3JpdGVsIChTVFNfSUFBLCAmZWhjaS0+cmVncy0+c3RhdHVzKTsKLQkJCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOwotCQl9Ci0JfQotCi0gCS8qIHN0b3AgYXN5bmMgcHJvY2Vzc2luZyBhZnRlciBpdCdzIGlkbGVkIGEgYml0ICovCisJLyogc3RvcCBhc3luYyBwcm9jZXNzaW5nIGFmdGVyIGl0J3MgaWRsZWQgYSBiaXQgKi8KIAlpZiAodGVzdF9iaXQgKFRJTUVSX0FTWU5DX09GRiwgJmVoY2ktPmFjdGlvbnMpKQotIAkJc3RhcnRfdW5saW5rX2FzeW5jIChlaGNpLCBlaGNpLT5hc3luYyk7CisJCXN0YXJ0X3VubGlua19hc3luYyAoZWhjaSwgZWhjaS0+YXN5bmMpOwogCiAJLyogZWhjaSBjb3VsZCBydW4gYnkgdGltZXIsIHdpdGhvdXQgSVJRcyAuLi4gKi8KIAllaGNpX3dvcmsgKGVoY2ksIE5VTEwpOwpAQCAtMjkyLDIxICszMDQsMjAgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZWhjaS0+bG9jaywgZmxhZ3MpOwogfQogCi0vKiBSZWJvb3Qgbm90aWZpZXJzIGtpY2sgaW4gZm9yIHNpbGljb24gb24gYW55IGJ1cyAobm90IGp1c3QgcGNpLCBldGMpLgorLyogZWhjaV9zaHV0ZG93biBraWNrIGluIGZvciBzaWxpY29uIG9uIGFueSBidXMgKG5vdCBqdXN0IHBjaSwgZXRjKS4KICAqIFRoaXMgZm9yY2libHkgZGlzYWJsZXMgZG1hIGFuZCBJUlFzLCBoZWxwaW5nIGtleGVjIGFuZCBvdGhlciBjYXNlcwogICogd2hlcmUgdGhlIG5leHQgc3lzdGVtIHNvZnR3YXJlIG1heSBleHBlY3QgY2xlYW4gc3RhdGUuCiAgKi8KLXN0YXRpYyBpbnQKLWVoY2lfcmVib290IChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgY29kZSwgdm9pZCAqbnVsbCkKK3N0YXRpYyB2b2lkCitlaGNpX3NodXRkb3duIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQogewotCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2k7CisJc3RydWN0IGVoY2lfaGNkCSplaGNpOwogCi0JZWhjaSA9IGNvbnRhaW5lcl9vZiAoc2VsZiwgc3RydWN0IGVoY2lfaGNkLCByZWJvb3Rfbm90aWZpZXIpOworCWVoY2kgPSBoY2RfdG9fZWhjaSAoaGNkKTsKIAkodm9pZCkgZWhjaV9oYWx0IChlaGNpKTsKIAogCS8qIG1ha2UgQklPUy9ldGMgdXNlIGNvbXBhbmlvbiBjb250cm9sbGVyIGR1cmluZyByZWJvb3QgKi8KIAl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOwotCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlaGNpX3BvcnRfcG93ZXIgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgaW50IGlzX29uKQpAQCAtMzM0LDggKzM0NSw2IEBACiBzdGF0aWMgdm9pZCBlaGNpX3dvcmsgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdGltZXJfYWN0aW9uX2RvbmUgKGVoY2ksIFRJTUVSX0lPX1dBVENIRE9HKTsKLQlpZiAoZWhjaS0+cmVjbGFpbV9yZWFkeSkKLQkJZW5kX3VubGlua19hc3luYyAoZWhjaSwgcmVncyk7CiAKIAkvKiBhbm90aGVyIENQVSBtYXkgZHJvcCBlaGNpLT5sb2NrIGR1cmluZyBhIHNjaGVkdWxlIHNjYW4gd2hpbGUKIAkgKiBpdCByZXBvcnRzIHVyYiBjb21wbGV0aW9ucy4gIHRoaXMgZmxhZyBndWFyZHMgYWdhaW5zdCBib2d1cwpAQCAtMzcwLDYgKzM3OSw3IEBACiAKIAkvKiBubyBtb3JlIGludGVycnVwdHMgLi4uICovCiAJZGVsX3RpbWVyX3N5bmMgKCZlaGNpLT53YXRjaGRvZyk7CisJZGVsX3RpbWVyX3N5bmMgKCZlaGNpLT5pYWFfd2F0Y2hkb2cpOwogCiAJc3Bpbl9sb2NrX2lycSgmZWhjaS0+bG9jayk7CiAJaWYgKEhDX0lTX1JVTk5JTkcgKGhjZC0+c3RhdGUpKQpAQCAtMzgxLDcgKzM5MSw2IEBACiAKIAkvKiBsZXQgY29tcGFuaW9uIGNvbnRyb2xsZXJzIHdvcmsgd2hlbiB3ZSBhcmVuJ3QgKi8KIAl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5jb25maWd1cmVkX2ZsYWcpOwotCXVucmVnaXN0ZXJfcmVib290X25vdGlmaWVyICgmZWhjaS0+cmVib290X25vdGlmaWVyKTsKIAogCXJlbW92ZV9kZWJ1Z19maWxlcyAoZWhjaSk7CiAKQEAgLTQxNyw2ICs0MjYsMTAgQEAKIAllaGNpLT53YXRjaGRvZy5mdW5jdGlvbiA9IGVoY2lfd2F0Y2hkb2c7CiAJZWhjaS0+d2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOwogCisJaW5pdF90aW1lcigmZWhjaS0+aWFhX3dhdGNoZG9nKTsKKwllaGNpLT5pYWFfd2F0Y2hkb2cuZnVuY3Rpb24gPSBlaGNpX2lhYV93YXRjaGRvZzsKKwllaGNpLT5pYWFfd2F0Y2hkb2cuZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBlaGNpOworCiAJLyoKIAkgKiBodyBkZWZhdWx0OiAxSyBwZXJpb2RpYyBsaXN0IGhlYWRzLCBvbmUgcGVyIGZyYW1lLgogCSAqIHBlcmlvZGljX3NpemUgY2FuIHNocmluayBieSBVU0JDTUQgdXBkYXRlIGlmIGhjY19wYXJhbXMgYWxsb3dzLgpAQCAtNDI3LDEzICs0NDAsMTIgQEAKIAogCS8qIGNvbnRyb2xsZXJzIG1heSBjYWNoZSBzb21lIG9mIHRoZSBwZXJpb2RpYyBzY2hlZHVsZSAuLi4gKi8KIAloY2NfcGFyYW1zID0gcmVhZGwoJmVoY2ktPmNhcHMtPmhjY19wYXJhbXMpOwotCWlmIChIQ0NfSVNPQ19DQUNIRShoY2NfcGFyYW1zKSkgCS8vIGZ1bGwgZnJhbWUgY2FjaGUKKwlpZiAoSENDX0lTT0NfQ0FDSEUoaGNjX3BhcmFtcykpCQkvLyBmdWxsIGZyYW1lIGNhY2hlCiAJCWVoY2ktPmlfdGhyZXNoID0gODsKIAllbHNlCQkJCQkvLyBOIG1pY3JvZnJhbWVzIGNhY2hlZAogCQllaGNpLT5pX3RocmVzaCA9IDIgKyBIQ0NfSVNPQ19USFJFUyhoY2NfcGFyYW1zKTsKIAogCWVoY2ktPnJlY2xhaW0gPSBOVUxMOwotCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAwOwogCWVoY2ktPm5leHRfdWZyYW1lID0gLTE7CiAKIAkvKgpAQCAtNDgzLDkgKzQ5NSw2IEBACiAJfQogCWVoY2ktPmNvbW1hbmQgPSB0ZW1wOwogCi0JZWhjaS0+cmVib290X25vdGlmaWVyLm5vdGlmaWVyX2NhbGwgPSBlaGNpX3JlYm9vdDsKLQlyZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7Ci0KIAlyZXR1cm4gMDsKIH0KIApAQCAtNDk5LDcgKzUwOCw2IEBACiAKIAkvKiBFSENJIHNwZWMgc2VjdGlvbiA0LjEgKi8KIAlpZiAoKHJldHZhbCA9IGVoY2lfcmVzZXQoZWhjaSkpICE9IDApIHsKLQkJdW5yZWdpc3Rlcl9yZWJvb3Rfbm90aWZpZXIoJmVoY2ktPnJlYm9vdF9ub3RpZmllcik7CiAJCWVoY2lfbWVtX2NsZWFudXAoZWhjaSk7CiAJCXJldHVybiByZXR2YWw7CiAJfQpAQCAtNjExLDcgKzYxOSw3IEBACiAJLyogY29tcGxldGUgdGhlIHVubGlua2luZyBvZiBzb21lIHFoIFs0LjE1LjIuM10gKi8KIAlpZiAoc3RhdHVzICYgU1RTX0lBQSkgewogCQlDT1VOVCAoZWhjaS0+c3RhdHMucmVjbGFpbSk7Ci0JCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCByZWdzKTsKIAkJYmggPSAxOwogCX0KIApAQCAtNzE1LDEwICs3MjMsMTQgQEAKIAogc3RhdGljIHZvaWQgdW5saW5rX2FzeW5jIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKIHsKLQkvKiBpZiB3ZSBuZWVkIHRvIHVzZSBJQUEgYW5kIGl0J3MgYnVzeSwgZGVmZXIgKi8KLQlpZiAocWgtPnFoX3N0YXRlID09IFFIX1NUQVRFX0xJTktFRAotCQkJJiYgZWhjaS0+cmVjbGFpbQotCQkJJiYgSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSkgeworCS8vIEJVR19PTihxaC0+cWhfc3RhdGUgIT0gUUhfU1RBVEVfTElOS0VEKTsKKworCS8qIGZhaWxmYXN0ICovCisJaWYgKCFIQ19JU19SVU5OSU5HIChlaGNpX3RvX2hjZChlaGNpKS0+c3RhdGUpKQorCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCBOVUxMKTsKKworCS8qIGRlZmVyIHRpbGwgbGF0ZXIgaWYgYnVzeSAqLworCWVsc2UgaWYgKGVoY2ktPnJlY2xhaW0pIHsKIAkJc3RydWN0IGVoY2lfcWgJCSpsYXN0OwogCiAJCWZvciAobGFzdCA9IGVoY2ktPnJlY2xhaW07CkBAIC03MjgsMTIgKzc0MCw4IEBACiAJCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOS19XQUlUOwogCQlsYXN0LT5yZWNsYWltID0gcWg7CiAKLQkvKiBieXBhc3MgSUFBIGlmIHRoZSBoYyBjYW4ndCBjYXJlICovCi0JfSBlbHNlIGlmICghSENfSVNfUlVOTklORyAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlKSAmJiBlaGNpLT5yZWNsYWltKQotCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCBOVUxMKTsKLQotCS8qIHNvbWV0aGluZyBlbHNlIG1pZ2h0IGhhdmUgdW5saW5rZWQgdGhlIHFoIGJ5IG5vdyAqLwotCWlmIChxaC0+cWhfc3RhdGUgPT0gUUhfU1RBVEVfTElOS0VEKQorCS8qIHN0YXJ0IElBQSBjeWNsZSAqLworCX0gZWxzZQogCQlzdGFydF91bmxpbmtfYXN5bmMgKGVoY2ksIHFoKTsKIH0KIApAQCAtNzU1LDcgKzc2MywxOSBAQAogCQlxaCA9IChzdHJ1Y3QgZWhjaV9xaCAqKSB1cmItPmhjcHJpdjsKIAkJaWYgKCFxaCkKIAkJCWJyZWFrOwotCQl1bmxpbmtfYXN5bmMgKGVoY2ksIHFoKTsKKwkJc3dpdGNoIChxaC0+cWhfc3RhdGUpIHsKKwkJY2FzZSBRSF9TVEFURV9MSU5LRUQ6CisJCWNhc2UgUUhfU1RBVEVfQ09NUExFVElORzoKKwkJCXVubGlua19hc3luYyAoZWhjaSwgcWgpOworCQkJYnJlYWs7CisJCWNhc2UgUUhfU1RBVEVfVU5MSU5LOgorCQljYXNlIFFIX1NUQVRFX1VOTElOS19XQUlUOgorCQkJLyogYWxyZWFkeSBzdGFydGVkICovCisJCQlicmVhazsKKwkJY2FzZSBRSF9TVEFURV9JRExFOgorCQkJV0FSTl9PTigxKTsKKwkJCWJyZWFrOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBQSVBFX0lOVEVSUlVQVDoKQEAgLTg0Nyw2ICs4NjcsNyBAQAogCQl1bmxpbmtfYXN5bmMgKGVoY2ksIHFoKTsKIAkJLyogRkFMTCBUSFJPVUdIICovCiAJY2FzZSBRSF9TVEFURV9VTkxJTks6CQkvKiB3YWl0IGZvciBodyB0byBmaW5pc2g/ICovCisJY2FzZSBRSF9TVEFURV9VTkxJTktfV0FJVDoKIGlkbGVfdGltZW91dDoKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIAkJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUoMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktaHViLmMKaW5kZXggZDAzZTNjYS4uYjJlZTEzYyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1odWIuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBieSBEYXZpZCBCcm93bmVsbAotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgpAQCAtNDgsNyArNDgsNyBAQAogCX0KIAllaGNpLT5jb21tYW5kID0gcmVhZGwgKCZlaGNpLT5yZWdzLT5jb21tYW5kKTsKIAlpZiAoZWhjaS0+cmVjbGFpbSkKLQkJZWhjaS0+cmVjbGFpbV9yZWFkeSA9IDE7CisJCWVuZF91bmxpbmtfYXN5bmMgKGVoY2ksIE5VTEwpOwogCWVoY2lfd29yayhlaGNpLCBOVUxMKTsKIAogCS8qIHN1c3BlbmQgYW55IGFjdGl2ZS91bnN1c3BlbmRlZCBwb3J0cywgbWF5YmUgYWxsb3cgd2FrZXVwICovCkBAIC0xMDMsMTAgKzEwMywxMCBAQAogCiAJLyogcmUtaW5pdCBvcGVyYXRpb25hbCByZWdpc3RlcnMgaW4gY2FzZSB3ZSBsb3N0IHBvd2VyICovCiAJaWYgKHJlYWRsICgmZWhjaS0+cmVncy0+aW50cl9lbmFibGUpID09IDApIHsKLSAJCS8qIGF0IGxlYXN0IHNvbWUgQVBNIGltcGxlbWVudGF0aW9ucyB3aWxsIHRyeSB0byBkZWxpdmVyCisJCS8qIGF0IGxlYXN0IHNvbWUgQVBNIGltcGxlbWVudGF0aW9ucyB3aWxsIHRyeSB0byBkZWxpdmVyCiAJCSAqIElSUXMgcmlnaHQgYXdheSwgc28gZGVsYXkgdGhlbSB1bnRpbCB3ZSdyZSByZWFkeS4KLSAJCSAqLwotIAkJaW50cl9lbmFibGUgPSAxOworCQkgKi8KKwkJaW50cl9lbmFibGUgPSAxOwogCQl3cml0ZWwgKDAsICZlaGNpLT5yZWdzLT5zZWdtZW50KTsKIAkJd3JpdGVsIChlaGNpLT5wZXJpb2RpY19kbWEsICZlaGNpLT5yZWdzLT5mcmFtZV9saXN0KTsKIAkJd3JpdGVsICgodTMyKWVoY2ktPmFzeW5jLT5xaF9kbWEsICZlaGNpLT5yZWdzLT5hc3luY19uZXh0KTsKQEAgLTIzMiw3ICsyMzIsNyBAQAogCQlidWYgWzFdID0gMDsKIAkJcmV0dmFsKys7CiAJfQotCQorCiAJLyogbm8gaHViIGNoYW5nZSByZXBvcnRzIChiaXQgMCkgZm9yIG5vdyAocG93ZXIsIC4uLikgKi8KIAogCS8qIHBvcnQgTiBjaGFuZ2VzIChiaXQgTik/ICovCkBAIC0zMDQsNyArMzA0LDcgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2RlZmluZQlQT1JUX1dBS0VfQklUUyAJKFBPUlRfV0tPQ19FfFBPUlRfV0tESVNDX0V8UE9SVF9XS0NPTk5fRSkKKyNkZWZpbmUJUE9SVF9XQUtFX0JJVFMJKFBPUlRfV0tPQ19FfFBPUlRfV0tESVNDX0V8UE9SVF9XS0NPTk5fRSkKIAogc3RhdGljIGludCBlaGNpX2h1Yl9jb250cm9sICgKIAlzdHJ1Y3QgdXNiX2hjZAkqaGNkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLW1lbS5jCmluZGV4IDc2NjA2MWUuLmE4YmEyZTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1tZW0uYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktbWVtLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChjKSAyMDAxIGJ5IERhdmlkIEJyb3duZWxsCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0yNSw3ICsyNSw3IEBACiAgKgktIGRhdGEgdXNlZCBvbmx5IGJ5IHRoZSBIQ0QgLi4uIGttYWxsb2MgaXMgZmluZQogICoJLSBhc3luYyBhbmQgcGVyaW9kaWMgc2NoZWR1bGVzLCBzaGFyZWQgYnkgSEMgYW5kIEhDRCAuLi4gdGhlc2UKICAqCSAgbmVlZCB0byB1c2UgZG1hX3Bvb2wgb3IgZG1hX2FsbG9jX2NvaGVyZW50Ci0gKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHNpbmdsZSBzaG90IERNQSBtYXBwZWQgCisgKgktIGRyaXZlciBidWZmZXJzLCByZWFkL3dyaXR0ZW4gYnkgSEMgLi4uIHNpbmdsZSBzaG90IERNQSBtYXBwZWQKICAqCiAgKiBUaGVyZSdzIGFsc28gUENJICJyZWdpc3RlciIgZGF0YSwgd2hpY2ggaXMgbWVtb3J5IG1hcHBlZC4KICAqIE5vIG1lbW9yeSBzZWVuIGJ5IHRoaXMgZHJpdmVyIGlzIHBhZ2VhYmxlLgpAQCAtMTE5LDcgKzExOSw3IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLS8qIFRoZSBxdWV1ZSBoZWFkcyBhbmQgdHJhbnNmZXIgZGVzY3JpcHRvcnMgYXJlIG1hbmFnZWQgZnJvbSBwb29scyB0aWVkIAorLyogVGhlIHF1ZXVlIGhlYWRzIGFuZCB0cmFuc2ZlciBkZXNjcmlwdG9ycyBhcmUgbWFuYWdlZCBmcm9tIHBvb2xzIHRpZWQKICAqIHRvIGVhY2ggb2YgdGhlICJwZXIgZGV2aWNlIiBzdHJ1Y3R1cmVzLgogICogVGhpcyBpcyB0aGUgaW5pdGlhbGlzYXRpb24gYW5kIGNsZWFudXAgY29kZS4KICAqLwpAQCAtMTY1LDcgKzE2NSw3IEBACiAJaW50IGk7CiAKIAkvKiBRVERzIGZvciBjb250cm9sL2J1bGsvaW50ciB0cmFuc2ZlcnMgKi8KLQllaGNpLT5xdGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfcXRkIiwgCisJZWhjaS0+cXRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3F0ZCIsCiAJCQllaGNpX3RvX2hjZChlaGNpKS0+c2VsZi5jb250cm9sbGVyLAogCQkJc2l6ZW9mIChzdHJ1Y3QgZWhjaV9xdGQpLAogCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCkBAIC0xNzUsNyArMTc1LDcgQEAKIAl9CiAKIAkvKiBRSHMgZm9yIGNvbnRyb2wvYnVsay9pbnRyIHRyYW5zZmVycyAqLwotCWVoY2ktPnFoX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3FoIiwgCisJZWhjaS0+cWhfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfcWgiLAogCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKIAkJCXNpemVvZiAoc3RydWN0IGVoY2lfcWgpLAogCQkJMzIgLyogYnl0ZSBhbGlnbm1lbnQgKGZvciBodyBwYXJ0cykgKi8sCkBAIC0xODksNyArMTg5LDcgQEAKIAl9CiAKIAkvKiBJVEQgZm9yIGhpZ2ggc3BlZWQgSVNPIHRyYW5zZmVycyAqLwotCWVoY2ktPml0ZF9wb29sID0gZG1hX3Bvb2xfY3JlYXRlICgiZWhjaV9pdGQiLCAKKwllaGNpLT5pdGRfcG9vbCA9IGRtYV9wb29sX2NyZWF0ZSAoImVoY2lfaXRkIiwKIAkJCWVoY2lfdG9faGNkKGVoY2kpLT5zZWxmLmNvbnRyb2xsZXIsCiAJCQlzaXplb2YgKHN0cnVjdCBlaGNpX2l0ZCksCiAJCQkzMiAvKiBieXRlIGFsaWdubWVudCAoZm9yIGh3IHBhcnRzKSAqLywKQEAgLTE5OSw3ICsxOTksNyBAQAogCX0KIAogCS8qIFNJVEQgZm9yIGZ1bGwvbG93IHNwZWVkIHNwbGl0IElTTyB0cmFuc2ZlcnMgKi8KLQllaGNpLT5zaXRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3NpdGQiLCAKKwllaGNpLT5zaXRkX3Bvb2wgPSBkbWFfcG9vbF9jcmVhdGUgKCJlaGNpX3NpdGQiLAogCQkJZWhjaV90b19oY2QoZWhjaSktPnNlbGYuY29udHJvbGxlciwKIAkJCXNpemVvZiAoc3RydWN0IGVoY2lfc2l0ZCksCiAJCQkzMiAvKiBieXRlIGFsaWdubWVudCAoZm9yIGh3IHBhcnRzKSAqLywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1wY2kuYwppbmRleCA2OTY3YWI3Li4wOGQwNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcGNpLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9laGNpLXBjaS5jCkBAIC0zMDMsNyArMzAzLDcgQEAKIAkvKiBlbXB0eWluZyB0aGUgc2NoZWR1bGUgYWJvcnRzIGFueSB1cmJzICovCiAJc3Bpbl9sb2NrX2lycSgmZWhjaS0+bG9jayk7CiAJaWYgKGVoY2ktPnJlY2xhaW0pCi0JCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAxOworCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCBOVUxMKTsKIAllaGNpX3dvcmsoZWhjaSwgTlVMTCk7CiAJc3Bpbl91bmxvY2tfaXJxKCZlaGNpLT5sb2NrKTsKIApAQCAtMzM4LDYgKzMzOCw3IEBACiAJLnJlc3VtZSA9CQllaGNpX3BjaV9yZXN1bWUsCiAjZW5kaWYKIAkuc3RvcCA9CQkJZWhjaV9zdG9wLAorCS5zaHV0ZG93biA9CQllaGNpX3NodXRkb3duLAogCiAJLyoKIAkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwpAQCAtMzg0LDQgKzM4NSw1IEBACiAJLnN1c3BlbmQgPQl1c2JfaGNkX3BjaV9zdXNwZW5kLAogCS5yZXN1bWUgPQl1c2JfaGNkX3BjaV9yZXN1bWUsCiAjZW5kaWYKKwkuc2h1dGRvd24gPSAJdXNiX2hjZF9wY2lfc2h1dGRvd24sCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS1xLmMKaW5kZXggZTQ2OTIyMS4uN2ZjMjViNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktcS5jCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwMS0yMDA0IGJ5IERhdmlkIEJyb3duZWxsCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0zMSw3ICszMSw3IEBACiAgKiBJU08gdHJhZmZpYyB1c2VzICJJU08gVEQiIChpdGQsIGFuZCBzaXRkKSByZWNvcmRzLCBhbmQgKGFsb25nIHdpdGgKICAqIGludGVycnVwdHMpIG5lZWRzIGNhcmVmdWwgc2NoZWR1bGluZy4gIFBlcmZvcm1hbmNlIGltcHJvdmVtZW50cyBjYW4gYmUKICAqIGFuIG9uZ29pbmcgY2hhbGxlbmdlLiAgVGhhdCdzIGluICJlaGNpLXNjaGVkLmMiLgotICogCisgKgogICogVVNCIDEuMSBkZXZpY2VzIGFyZSBoYW5kbGVkIChhKSBieSAiY29tcGFuaW9uIiBPSENJIG9yIFVIQ0kgcm9vdCBodWJzLAogICogb3Igb3RoZXJ3aXNlIHRocm91Z2ggdHJhbnNhY3Rpb24gdHJhbnNsYXRvcnMgKFRUcykgaW4gVVNCIDIuMCBodWJzIHVzaW5nCiAgKiAoYikgc3BlY2lhbCBmaWVsZHMgaW4gcWggZW50cmllcyBvciAoYykgc3BsaXQgaXNvIGVudHJpZXMuICBUVHMgd2lsbApAQCAtMTk5LDcgKzE5OSw3IEBACiAJCQkJJiYgKCh0b2tlbiAmIFFURF9TVFNfTU1GKSAhPSAwCiAJCQkJCXx8IFFURF9DRVJSKHRva2VuKSA9PSAwKQogCQkJCSYmICghZWhjaV9pc19UREkoZWhjaSkKLSAgICAgICAgICAgICAgICAJICAgICAgICAgICAgICAgIHx8IHVyYi0+ZGV2LT50dC0+aHViICE9CisJCQkgICAgICAgICAgICAgICAgfHwgdXJiLT5kZXYtPnR0LT5odWIgIT0KIAkJCQkJICAgZWhjaV90b19oY2QoZWhjaSktPnNlbGYucm9vdF9odWIpKSB7CiAjaWZkZWYgREVCVUcKIAkJCXN0cnVjdCB1c2JfZGV2aWNlICp0dCA9IHVyYi0+ZGV2LT50dC0+aHViOwpAQCAtMzY0LDcgKzM2NCw3IEBACiAJCQkgKi8KIAkJCWlmIChsaWtlbHkgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykpCiAJCQkJY29udGludWU7Ci0JCQkKKwogCQkJLyogaXNzdWUgc3RhdHVzIGFmdGVyIHNob3J0IGNvbnRyb2wgcmVhZHMgKi8KIAkJCWlmICh1bmxpa2VseSAoZG9fc3RhdHVzICE9IDApCiAJCQkJCSYmIFFURF9QSUQgKHRva2VuKSA9PSAwIC8qIE9VVCAqLykgewpAQCAtMzg4LDcgKzM4OCw3IEBACiAJCQkJd21iICgpOwogCQkJfQogCQl9Ci0gCisKIAkJLyogcmVtb3ZlIGl0IGZyb20gdGhlIHF1ZXVlICovCiAJCXNwaW5fbG9jayAoJnVyYi0+bG9jayk7CiAJCXF0ZF9jb3B5X3N0YXR1cyAoZWhjaSwgdXJiLCBxdGQtPmxlbmd0aCwgdG9rZW4pOwpAQCAtNTE4LDcgKzUxOCw3IEBACiAJCS8qIGZvciB6ZXJvIGxlbmd0aCBEQVRBIHN0YWdlcywgU1RBVFVTIGlzIGFsd2F5cyBJTiAqLwogCQlpZiAobGVuID09IDApCiAJCQl0b2tlbiB8PSAoMSAvKiAiaW4iICovIDw8IDgpOwotCX0gCisJfQogCiAJLyoKIAkgKiBkYXRhIHRyYW5zZmVyIHN0YWdlOiAgYnVmZmVyIHNldHVwCkBAIC03NTksNyArNzU5LDcgQEAKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotIAkJZGJnICgiYm9ndXMgZGV2ICVwIHNwZWVkICVkIiwgdXJiLT5kZXYsIHVyYi0+ZGV2LT5zcGVlZCk7CisJCWRiZyAoImJvZ3VzIGRldiAlcCBzcGVlZCAlZCIsIHVyYi0+ZGV2LCB1cmItPmRldi0+c3BlZWQpOwogZG9uZToKIAkJcWhfcHV0IChxaCk7CiAJCXJldHVybiBOVUxMOwpAQCAtOTY3LDE3ICs5NjcsMTYgQEAKIAlzdHJ1Y3QgZWhjaV9xaAkJKnFoID0gZWhjaS0+cmVjbGFpbTsKIAlzdHJ1Y3QgZWhjaV9xaAkJKm5leHQ7CiAKLQl0aW1lcl9hY3Rpb25fZG9uZSAoZWhjaSwgVElNRVJfSUFBX1dBVENIRE9HKTsKKwlpYWFfd2F0Y2hkb2dfZG9uZSAoZWhjaSk7CiAKIAkvLyBxaC0+aHdfbmV4dCA9IGNwdV90b19sZTMyIChxaC0+cWhfZG1hKTsKIAlxaC0+cWhfc3RhdGUgPSBRSF9TVEFURV9JRExFOwogCXFoLT5xaF9uZXh0LnFoID0gTlVMTDsKLQlxaF9wdXQgKHFoKTsJCQkvLyByZWZjb3VudCBmcm9tIHJlY2xhaW0gCisJcWhfcHV0IChxaCk7CQkJLy8gcmVmY291bnQgZnJvbSByZWNsYWltCiAKIAkvKiBvdGhlciB1bmxpbmsocykgbWF5IGJlIHBlbmRpbmcgKGluIFFIX1NUQVRFX1VOTElOS19XQUlUKSAqLwogCW5leHQgPSBxaC0+cmVjbGFpbTsKIAllaGNpLT5yZWNsYWltID0gbmV4dDsKLQllaGNpLT5yZWNsYWltX3JlYWR5ID0gMDsKIAlxaC0+cmVjbGFpbSA9IE5VTEw7CiAKIAlxaF9jb21wbGV0aW9ucyAoZWhjaSwgcWgsIHJlZ3MpOwpAQCAtMTAzMSw3ICsxMDMwLDcgQEAKIAkJCXRpbWVyX2FjdGlvbl9kb25lIChlaGNpLCBUSU1FUl9BU1lOQ19PRkYpOwogCQl9CiAJCXJldHVybjsKLQl9IAorCX0KIAogCXFoLT5xaF9zdGF0ZSA9IFFIX1NUQVRFX1VOTElOSzsKIAllaGNpLT5yZWNsYWltID0gcWggPSBxaF9nZXQgKHFoKTsKQEAgLTEwNDYsMTcgKzEwNDUsMTYgQEAKIAogCWlmICh1bmxpa2VseSAoZWhjaV90b19oY2QoZWhjaSktPnN0YXRlID09IEhDX1NUQVRFX0hBTFQpKSB7CiAJCS8qIGlmICh1bmxpa2VseSAocWgtPnJlY2xhaW0gIT0gMCkpCi0JCSAqIAl0aGlzIHdpbGwgcmVjdXJzZSwgcHJvYmFibHkgbm90IG11Y2gKKwkJICoJdGhpcyB3aWxsIHJlY3Vyc2UsIHByb2JhYmx5IG5vdCBtdWNoCiAJCSAqLwogCQllbmRfdW5saW5rX2FzeW5jIChlaGNpLCBOVUxMKTsKIAkJcmV0dXJuOwogCX0KIAotCWVoY2ktPnJlY2xhaW1fcmVhZHkgPSAwOwogCWNtZCB8PSBDTURfSUFBRDsKIAl3cml0ZWwgKGNtZCwgJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwogCSh2b2lkKSByZWFkbCAoJmVoY2ktPnJlZ3MtPmNvbW1hbmQpOwotCXRpbWVyX2FjdGlvbiAoZWhjaSwgVElNRVJfSUFBX1dBVENIRE9HKTsKKwlpYWFfd2F0Y2hkb2dfc3RhcnQgKGVoY2kpOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9laGNpLXNjaGVkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwppbmRleCA0ODU5OTAwLi5lNWU5YzY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L2VoY2ktc2NoZWQuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNCBieSBEYXZpZCBCcm93bmVsbAogICogQ29weXJpZ2h0IChjKSAyMDAzIE1pY2hhbCBTb2prYSwgZm9yIGhpZ2gtc3BlZWQgaXNvIHRyYW5zZmVycwotICogCisgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQogICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91cgpAQCAtNjEzLDcgKzYxMyw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiBzdGF0aWMgaW50IGNoZWNrX3BlcmlvZCAoCi0Jc3RydWN0IGVoY2lfaGNkICplaGNpLCAKKwlzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksCiAJdW5zaWduZWQJZnJhbWUsCiAJdW5zaWduZWQJdWZyYW1lLAogCXVuc2lnbmVkCXBlcmlvZCwKQEAgLTYyOSw3ICs2MjksNyBAQAogCiAJLyoKIAkgKiA4MCUgcGVyaW9kaWMgPT0gMTAwIHVzZWMvdWZyYW1lIGF2YWlsYWJsZQotCSAqIGNvbnZlcnQgInVzZWNzIHdlIG5lZWQiIHRvICJtYXggYWxyZWFkeSBjbGFpbWVkIiAKKwkgKiBjb252ZXJ0ICJ1c2VjcyB3ZSBuZWVkIiB0byAibWF4IGFscmVhZHkgY2xhaW1lZCIKIAkgKi8KIAl1c2VjcyA9IDEwMCAtIHVzZWNzOwogCkBAIC02NTksMTQgKzY1OSwxNCBAQAogfQogCiBzdGF0aWMgaW50IGNoZWNrX2ludHJfc2NoZWR1bGUgKAotCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksIAorCXN0cnVjdCBlaGNpX2hjZAkJKmVoY2ksCiAJdW5zaWduZWQJCWZyYW1lLAogCXVuc2lnbmVkCQl1ZnJhbWUsCiAJY29uc3Qgc3RydWN0IGVoY2lfcWgJKnFoLAogCV9fbGUzMgkJCSpjX21hc2twCiApCiB7Ci0gICAgCWludAkJcmV0dmFsID0gLUVOT1NQQzsKKwlpbnQJCXJldHZhbCA9IC1FTk9TUEM7CiAJdTgJCW1hc2sgPSAwOwogCiAJaWYgKHFoLT5jX3VzZWNzICYmIHVmcmFtZSA+PSA2KQkJLyogRlNUTiB0ZXJyaXRvcnk/ICovCkBAIC03MDEsNyArNzAxLDcgQEAKIAkvKiBNYWtlIHN1cmUgdGhpcyB0dCdzIGJ1ZmZlciBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgQ1NQTElUcy4KIAkgKiBXZSBwZXNzaW1pemUgYSBiaXQ7IHByb2JhYmx5IHRoZSB0eXBpY2FsIGZ1bGwgc3BlZWQgY2FzZQogCSAqIGRvZXNuJ3QgbmVlZCB0aGUgc2Vjb25kIENTUExJVC4KLQkgKiAKKwkgKgogCSAqIE5PVEU6ICBib3RoIFNQTElUIGFuZCBDU1BMSVQgY291bGQgYmUgY2hlY2tlZCBpbiBqdXN0CiAJICogb25lIHNtYXJ0IHBhc3MuLi4KIAkgKi8KQEAgLTcyOCw3ICs3MjgsNyBAQAogICovCiBzdGF0aWMgaW50IHFoX3NjaGVkdWxlIChzdHJ1Y3QgZWhjaV9oY2QgKmVoY2ksIHN0cnVjdCBlaGNpX3FoICpxaCkKIHsKLQlpbnQgCQlzdGF0dXM7CisJaW50CQlzdGF0dXM7CiAJdW5zaWduZWQJdWZyYW1lOwogCV9fbGUzMgkJY19tYXNrOwogCXVuc2lnbmVkCWZyYW1lOwkJLyogMC4uKHFoLT5wZXJpb2QgLSAxKSwgb3IgTk9fRlJBTUUgKi8KQEAgLTc4NCw3ICs3ODQsNyBAQAogCQllaGNpX2RiZyAoZWhjaSwgInJldXNlZCBxaCAlcCBzY2hlZHVsZVxuIiwgcWgpOwogCiAJLyogc3R1ZmYgaW50byB0aGUgcGVyaW9kaWMgc2NoZWR1bGUgKi8KLSAJc3RhdHVzID0gcWhfbGlua19wZXJpb2RpYyAoZWhjaSwgcWgpOworCXN0YXR1cyA9IHFoX2xpbmtfcGVyaW9kaWMgKGVoY2ksIHFoKTsKIGRvbmU6CiAJcmV0dXJuIHN0YXR1czsKIH0KQEAgLTE2ODEsNyArMTY4MSw3IEBACiAJCXN0YXR1cyA9IC1FU0hVVERPV047CiAJZWxzZQogCQlzdGF0dXMgPSBpc29fc3RyZWFtX3NjaGVkdWxlIChlaGNpLCB1cmIsIHN0cmVhbSk7Ci0gCWlmIChsaWtlbHkgKHN0YXR1cyA9PSAwKSkKKwlpZiAobGlrZWx5IChzdGF0dXMgPT0gMCkpCiAJCWl0ZF9saW5rX3VyYiAoZWhjaSwgdXJiLCBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMsIHN0cmVhbSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIApAQCAtMTczOCw3ICsxNzM4LDcgQEAKIAkJaWYgKHBhY2tldC0+YnVmMSAhPSAoYnVmICYgfih1NjQpMHgwZmZmKSkKIAkJCXBhY2tldC0+Y3Jvc3MgPSAxOwogCi0JCS8qIE9VVCB1c2VzIG11bHRpcGxlIHN0YXJ0LXNwbGl0cyAqLyAKKwkJLyogT1VUIHVzZXMgbXVsdGlwbGUgc3RhcnQtc3BsaXRzICovCiAJCWlmIChzdHJlYW0tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKQogCQkJY29udGludWU7CiAJCWxlbmd0aCA9IChsZW5ndGggKyAxODcpIC8gMTg4OwpAQCAtMTkyNSw3ICsxOTI1LDcgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKICNkZWZpbmUJU0lURF9FUlJTIChTSVREX1NUU19FUlIgfCBTSVREX1NUU19EQkUgfCBTSVREX1NUU19CQUJCTEUgXAotCSAgICAgICAJCQl8IFNJVERfU1RTX1hBQ1QgfCBTSVREX1NUU19NTUYpCisJCQkJfCBTSVREX1NUU19YQUNUIHwgU0lURF9TVFNfTU1GKQogCiBzdGF0aWMgdW5zaWduZWQKIHNpdGRfY29tcGxldGUgKApAQCAtMjA0Myw3ICsyMDQzLDcgQEAKIAkJc3RhdHVzID0gLUVTSFVURE9XTjsKIAllbHNlCiAJCXN0YXR1cyA9IGlzb19zdHJlYW1fc2NoZWR1bGUgKGVoY2ksIHVyYiwgc3RyZWFtKTsKLSAJaWYgKHN0YXR1cyA9PSAwKQorCWlmIChzdGF0dXMgPT0gMCkKIAkJc2l0ZF9saW5rX3VyYiAoZWhjaSwgdXJiLCBlaGNpLT5wZXJpb2RpY19zaXplIDw8IDMsIHN0cmVhbSk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmVoY2ktPmxvY2ssIGZsYWdzKTsKIApAQCAtMjIyNiw1ICsyMjI2LDUgQEAKIAkJCW5vd191ZnJhbWUrKzsKIAkJCW5vd191ZnJhbWUgJT0gbW9kOwogCQl9Ci0JfSAKKwl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L2VoY2kuaCBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCmluZGV4IDY3OWMxY2QuLjZhYWMzOWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvZWhjaS5oCkBAIC0xLDYgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoYykgMjAwMS0yMDAyIGJ5IERhdmlkIEJyb3duZWxsCi0gKiAKKyAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC01OCw3ICs1OCw2IEBACiAJLyogYXN5bmMgc2NoZWR1bGUgc3VwcG9ydCAqLwogCXN0cnVjdCBlaGNpX3FoCQkqYXN5bmM7CiAJc3RydWN0IGVoY2lfcWgJCSpyZWNsYWltOwotCXVuc2lnbmVkCQlyZWNsYWltX3JlYWR5IDogMTsKIAl1bnNpZ25lZAkJc2Nhbm5pbmcgOiAxOwogCiAJLyogcGVyaW9kaWMgc2NoZWR1bGUgc3VwcG9ydCAqLwpAQCAtODEsOCArODAsOCBAQAogCXN0cnVjdCBkbWFfcG9vbAkJKml0ZF9wb29sOwkvKiBpdGQgcGVyIGlzbyB1cmIgKi8KIAlzdHJ1Y3QgZG1hX3Bvb2wJCSpzaXRkX3Bvb2w7CS8qIHNpdGQgcGVyIHNwbGl0IGlzbyB1cmIgKi8KIAorCXN0cnVjdCB0aW1lcl9saXN0CWlhYV93YXRjaGRvZzsKIAlzdHJ1Y3QgdGltZXJfbGlzdAl3YXRjaGRvZzsKLQlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sJcmVib290X25vdGlmaWVyOwogCXVuc2lnbmVkIGxvbmcJCWFjdGlvbnM7CiAJdW5zaWduZWQJCXN0YW1wOwogCXVuc2lnbmVkIGxvbmcJCW5leHRfc3RhdGVjaGFuZ2U7CkBAIC0xMDQsNyArMTAzLDcgQEAKICNlbmRpZgogfTsKIAotLyogY29udmVydCBiZXR3ZWVuIGFuIEhDRCBwb2ludGVyIGFuZCB0aGUgY29ycmVzcG9uZGluZyBFSENJX0hDRCAqLyAKKy8qIGNvbnZlcnQgYmV0d2VlbiBhbiBIQ0QgcG9pbnRlciBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgRUhDSV9IQ0QgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVoY2lfaGNkICpoY2RfdG9fZWhjaSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKIHsKIAlyZXR1cm4gKHN0cnVjdCBlaGNpX2hjZCAqKSAoaGNkLT5oY2RfcHJpdik7CkBAIC0xMTUsOSArMTE0LDIxIEBACiB9CiAKIAorc3RhdGljIGlubGluZSB2b2lkCitpYWFfd2F0Y2hkb2dfc3RhcnQgKHN0cnVjdCBlaGNpX2hjZCAqZWhjaSkKK3sKKwlXQVJOX09OKHRpbWVyX3BlbmRpbmcoJmVoY2ktPmlhYV93YXRjaGRvZykpOworCW1vZF90aW1lciAoJmVoY2ktPmlhYV93YXRjaGRvZywKKwkJCWppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKEVIQ0lfSUFBX01TRUNTKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpYWFfd2F0Y2hkb2dfZG9uZSAoc3RydWN0IGVoY2lfaGNkICplaGNpKQoreworCWRlbF90aW1lciAoJmVoY2ktPmlhYV93YXRjaGRvZyk7Cit9CisKIGVudW0gZWhjaV90aW1lcl9hY3Rpb24gewogCVRJTUVSX0lPX1dBVENIRE9HLAotCVRJTUVSX0lBQV9XQVRDSERPRywKIAlUSU1FUl9BU1lOQ19TSFJJTkssCiAJVElNRVJfQVNZTkNfT0ZGLAogfTsKQEAgLTEzNSw5ICsxNDYsNiBAQAogCQl1bnNpZ25lZCBsb25nIHQ7CiAKIAkJc3dpdGNoIChhY3Rpb24pIHsKLQkJY2FzZSBUSU1FUl9JQUFfV0FUQ0hET0c6Ci0JCQl0ID0gRUhDSV9JQUFfSklGRklFUzsKLQkJCWJyZWFrOwogCQljYXNlIFRJTUVSX0lPX1dBVENIRE9HOgogCQkJdCA9IEVIQ0lfSU9fSklGRklFUzsKIAkJCWJyZWFrOwpAQCAtMTU0LDggKzE2Miw3IEBACiAJCS8vIGFzeW5jIHF1ZXVlIFNIUklOSyBvZnRlbiBwcmVjZWRlcyBJQUEuICB3aGlsZSBpdCdzIHJlYWR5CiAJCS8vIHRvIGdvIE9GRiBuZWl0aGVyIGNhbiBtYXR0ZXIsIGFuZCBhZnRlcndhcmRzIHRoZSBJTwogCQkvLyB3YXRjaGRvZyBzdG9wcyB1bmxlc3MgdGhlcmUncyBzdGlsbCBwZXJpb2RpYyB0cmFmZmljLgotCQlpZiAoYWN0aW9uICE9IFRJTUVSX0lBQV9XQVRDSERPRwotCQkJCSYmIHQgPiBlaGNpLT53YXRjaGRvZy5leHBpcmVzCisJCWlmICh0aW1lX2JlZm9yZV9lcSh0LCBlaGNpLT53YXRjaGRvZy5leHBpcmVzKQogCQkJCSYmIHRpbWVyX3BlbmRpbmcgKCZlaGNpLT53YXRjaGRvZykpCiAJCQlyZXR1cm47CiAJCW1vZF90aW1lciAoJmVoY2ktPndhdGNoZG9nLCB0KTsKQEAgLTE3OSw4ICsxODYsOCBAQAogI2RlZmluZSBIQ1NfSU5ESUNBVE9SKHApCSgocCkmKDEgPDwgMTYpKQkvKiB0cnVlOiBoYXMgcG9ydCBpbmRpY2F0b3JzICovCiAjZGVmaW5lIEhDU19OX0NDKHApCQkoKChwKT4+MTIpJjB4ZikJLyogYml0cyAxNToxMiwgI2NvbXBhbmlvbiBIQ3MgKi8KICNkZWZpbmUgSENTX05fUENDKHApCQkoKChwKT4+OCkmMHhmKQkvKiBiaXRzIDExOjgsIHBvcnRzIHBlciBDQyAqLwotI2RlZmluZSBIQ1NfUE9SVFJPVVRFRChwKQkoKHApJigxIDw8IDcpKQkvKiB0cnVlOiBwb3J0IHJvdXRpbmcgKi8gCi0jZGVmaW5lIEhDU19QUEMocCkJCSgocCkmKDEgPDwgNCkpCS8qIHRydWU6IHBvcnQgcG93ZXIgY29udHJvbCAqLyAKKyNkZWZpbmUgSENTX1BPUlRST1VURUQocCkJKChwKSYoMSA8PCA3KSkJLyogdHJ1ZTogcG9ydCByb3V0aW5nICovCisjZGVmaW5lIEhDU19QUEMocCkJCSgocCkmKDEgPDwgNCkpCS8qIHRydWU6IHBvcnQgcG93ZXIgY29udHJvbCAqLwogI2RlZmluZSBIQ1NfTl9QT1JUUyhwKQkJKCgocCk+PjApJjB4ZikJLyogYml0cyAzOjAsIHBvcnRzIG9uIEhDICovCiAKIAl1MzIJCWhjY19wYXJhbXM7ICAgICAgLyogSENDUEFSQU1TIC0gb2Zmc2V0IDB4OCAqLwpAQCAtMjA1LDcgKzIxMiw3IEBACiAjZGVmaW5lIENNRF9MUkVTRVQJKDE8PDcpCQkvKiBwYXJ0aWFsIHJlc2V0IChubyBwb3J0cywgZXRjKSAqLwogI2RlZmluZSBDTURfSUFBRAkoMTw8NikJCS8qICJkb29yYmVsbCIgaW50ZXJydXB0IGFzeW5jIGFkdmFuY2UgKi8KICNkZWZpbmUgQ01EX0FTRQkJKDE8PDUpCQkvKiBhc3luYyBzY2hlZHVsZSBlbmFibGUgKi8KLSNkZWZpbmUgQ01EX1BTRSAgCSgxPDw0KQkJLyogcGVyaW9kaWMgc2NoZWR1bGUgZW5hYmxlICovCisjZGVmaW5lIENNRF9QU0UJCSgxPDw0KQkJLyogcGVyaW9kaWMgc2NoZWR1bGUgZW5hYmxlICovCiAvKiAzOjIgaXMgcGVyaW9kaWMgZnJhbWUgbGlzdCBzaXplICovCiAjZGVmaW5lIENNRF9SRVNFVAkoMTw8MSkJCS8qIHJlc2V0IEhDIG5vdCBidXMgKi8KICNkZWZpbmUgQ01EX1JVTgkJKDE8PDApCQkvKiBzdGFydC9zdG9wIEhDICovCkBAIC0yMzEsOSArMjM4LDkgQEAKIAkvKiBGUklOREVYOiBvZmZzZXQgMHgwQyAqLwogCXUzMgkJZnJhbWVfaW5kZXg7CS8qIGN1cnJlbnQgbWljcm9mcmFtZSBudW1iZXIgKi8KIAkvKiBDVFJMRFNTRUdNRU5UOiBvZmZzZXQgMHgxMCAqLwotCXUzMgkJc2VnbWVudDsgCS8qIGFkZHJlc3MgYml0cyA2MzozMiBpZiBuZWVkZWQgKi8KKwl1MzIJCXNlZ21lbnQ7CS8qIGFkZHJlc3MgYml0cyA2MzozMiBpZiBuZWVkZWQgKi8KIAkvKiBQRVJJT0RJQ0xJU1RCQVNFOiBvZmZzZXQgMHgxNCAqLwotCXUzMgkJZnJhbWVfbGlzdDsgCS8qIHBvaW50cyB0byBwZXJpb2RpYyBsaXN0ICovCisJdTMyCQlmcmFtZV9saXN0OwkvKiBwb2ludHMgdG8gcGVyaW9kaWMgbGlzdCAqLwogCS8qIEFTWU5DTElTVEFERFI6IG9mZnNldCAweDE4ICovCiAJdTMyCQlhc3luY19uZXh0OwkvKiBhZGRyZXNzIG9mIG5leHQgYXN5bmMgcXVldWUgaGVhZCAqLwogCkBAIC0zMDIsNyArMzA5LDcgQEAKIAogLyoKICAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy41Ci0gKiBRVEQ6IGRlc2NyaWJlIGRhdGEgdHJhbnNmZXIgY29tcG9uZW50cyAoYnVmZmVyLCBkaXJlY3Rpb24sIC4uLikgCisgKiBRVEQ6IGRlc2NyaWJlIGRhdGEgdHJhbnNmZXIgY29tcG9uZW50cyAoYnVmZmVyLCBkaXJlY3Rpb24sIC4uLikKICAqIFNlZSBGaWcgMy02ICJRdWV1ZSBFbGVtZW50IFRyYW5zZmVyIERlc2NyaXB0b3IgQmxvY2sgRGlhZ3JhbSIuCiAgKgogICogVGhlc2UgYXJlIGFzc29jaWF0ZWQgb25seSB3aXRoICJRSCIgKFF1ZXVlIEhlYWQpIHN0cnVjdHVyZXMsCkBAIC0zMTIsNyArMzE5LDcgQEAKIAkvKiBmaXJzdCBwYXJ0IGRlZmluZWQgYnkgRUhDSSBzcGVjICovCiAJX19sZTMyCQkJaHdfbmV4dDsJICAvKiBzZWUgRUhDSSAzLjUuMSAqLwogCV9fbGUzMgkJCWh3X2FsdF9uZXh0OyAgICAgIC8qIHNlZSBFSENJIDMuNS4yICovCi0JX19sZTMyCQkJaHdfdG9rZW47ICAgICAgICAgLyogc2VlIEVIQ0kgMy41LjMgKi8gICAgICAgCisJX19sZTMyCQkJaHdfdG9rZW47ICAgICAgICAgLyogc2VlIEVIQ0kgMy41LjMgKi8KICNkZWZpbmUJUVREX1RPR0dMRQkoMSA8PCAzMSkJLyogZGF0YSB0b2dnbGUgKi8KICNkZWZpbmUJUVREX0xFTkdUSCh0b2spCSgoKHRvayk+PjE2KSAmIDB4N2ZmZikKICNkZWZpbmUJUVREX0lPQwkJKDEgPDwgMTUpCS8qIGludGVycnVwdCBvbiBjb21wbGV0ZSAqLwpAQCAtMzQ5LDggKzM1Niw4IEBACiAvKiB2YWx1ZXMgZm9yIHRoYXQgdHlwZSB0YWcgKi8KICNkZWZpbmUgUV9UWVBFX0lURAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgwIDw8IDEpCiAjZGVmaW5lIFFfVFlQRV9RSAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgxIDw8IDEpCi0jZGVmaW5lIFFfVFlQRV9TSVREIAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgyIDw8IDEpCi0jZGVmaW5lIFFfVFlQRV9GU1ROIAlfX2NvbnN0YW50X2NwdV90b19sZTMyICgzIDw8IDEpCisjZGVmaW5lIFFfVFlQRV9TSVRECV9fY29uc3RhbnRfY3B1X3RvX2xlMzIgKDIgPDwgMSkKKyNkZWZpbmUgUV9UWVBFX0ZTVE4JX19jb25zdGFudF9jcHVfdG9fbGUzMiAoMyA8PCAxKQogCiAvKiBuZXh0IGFzeW5jIHF1ZXVlIGVudHJ5LCBvciBwb2ludGVyIHRvIGludGVycnVwdC9wZXJpb2RpYyBRSCAqLwogI2RlZmluZQlRSF9ORVhUKGRtYSkJKGNwdV90b19sZTMyKCgodTMyKWRtYSkmfjB4MDFmKXxRX1RZUEVfUUgpCkBAIC0zNjcsNyArMzc0LDcgQEAKICAqIEZvciBlbnRyaWVzIGluIHRoZSBhc3luYyBzY2hlZHVsZSwgdGhlIHR5cGUgdGFnIGFsd2F5cyBzYXlzICJxaCIuCiAgKi8KIHVuaW9uIGVoY2lfc2hhZG93IHsKLQlzdHJ1Y3QgZWhjaV9xaCAJCSpxaDsJCS8qIFFfVFlQRV9RSCAqLworCXN0cnVjdCBlaGNpX3FoCQkqcWg7CQkvKiBRX1RZUEVfUUggKi8KIAlzdHJ1Y3QgZWhjaV9pdGQJCSppdGQ7CQkvKiBRX1RZUEVfSVREICovCiAJc3RydWN0IGVoY2lfc2l0ZAkqc2l0ZDsJCS8qIFFfVFlQRV9TSVREICovCiAJc3RydWN0IGVoY2lfZnN0bgkqZnN0bjsJCS8qIFFfVFlQRV9GU1ROICovCkBAIC0zOTcsNyArNDA0LDcgQEAKICNkZWZpbmUJUUhfSFVCUE9SVAkweDNmODAwMDAwCiAjZGVmaW5lCVFIX01VTFQJCTB4YzAwMDAwMDAKIAlfX2xlMzIJCQlod19jdXJyZW50OwkgLyogcXRkIGxpc3QgLSBzZWUgRUhDSSAzLjYuNCAqLwotCQorCiAJLyogcXRkIG92ZXJsYXkgKGhhcmR3YXJlIHBhcnRzIG9mIGEgc3RydWN0IGVoY2lfcXRkKSAqLwogCV9fbGUzMgkJCWh3X3F0ZF9uZXh0OwogCV9fbGUzMgkJCWh3X2FsdF9uZXh0OwpAQCAtNDcyLDcgKzQ3OSw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAl0ZF9saXN0OwkvKiBxdWV1ZWQgaXRkcy9zaXRkcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJZnJlZV9saXN0OwkvKiBsaXN0IG9mIHVudXNlZCBpdGRzL3NpdGRzICovCiAJc3RydWN0IHVzYl9kZXZpY2UJKnVkZXY7Ci0gCXN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqZXA7CisJc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICplcDsKIAogCS8qIG91dHB1dCBvZiAocmUpc2NoZWR1bGluZyAqLwogCXVuc2lnbmVkIGxvbmcJCXN0YXJ0OwkJLyogamlmZmllcyAqLwpAQCAtNDkyLDggKzQ5OSw4IEBACiAJdW5zaWduZWQJCWJhbmR3aWR0aDsKIAogCS8qIFRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIGlURCdzIGh3X2J1ZnAgZmllbGRzICovCi0JX19sZTMyCQkJYnVmMDsJCQotCV9fbGUzMgkJCWJ1ZjE7CQkKKwlfX2xlMzIJCQlidWYwOworCV9fbGUzMgkJCWJ1ZjE7CiAJX19sZTMyCQkJYnVmMjsKIAogCS8qIHRoaXMgaXMgdXNlZCB0byBpbml0aWFsaXplIHNJVEQncyB0dCBpbmZvICovCkBAIC01MjEsNyArNTI4LDcgQEAKIAogI2RlZmluZSBJVERfQUNUSVZFCV9fY29uc3RhbnRfY3B1X3RvX2xlMzIoRUhDSV9JU09DX0FDVElWRSkKIAotCV9fbGUzMgkJCWh3X2J1ZnAgWzddOwkvKiBzZWUgRUhDSSAzLjMuMyAqLyAKKwlfX2xlMzIJCQlod19idWZwIFs3XTsJLyogc2VlIEVIQ0kgMy4zLjMgKi8KIAlfX2xlMzIJCQlod19idWZwX2hpIFs3XTsJLyogQXBwZW5kaXggQiAqLwogCiAJLyogdGhlIHJlc3QgaXMgSENELXByaXZhdGUgKi8KQEAgLTU0Miw3ICs1NDksNyBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogLyoKLSAqIEVIQ0kgU3BlY2lmaWNhdGlvbiAwLjk1IFNlY3Rpb24gMy40IAorICogRUhDSSBTcGVjaWZpY2F0aW9uIDAuOTUgU2VjdGlvbiAzLjQKICAqIHNpVEQsIGFrYSBzcGxpdC10cmFuc2FjdGlvbiBpc29jaHJvbm91cyBUcmFuc2ZlciBEZXNjcmlwdG9yCiAgKiAgICAgICAuLi4gZGVzY3JpYmUgZnVsbCBzcGVlZCBpc28geGZlcnMgdGhyb3VnaCBUVCBpbiBodWJzCiAgKiBzZWUgRmlndXJlIDMtNSAiU3BsaXQtdHJhbnNhY3Rpb24gSXNvY2hyb25vdXMgVHJhbnNhY3Rpb24gRGVzY3JpcHRvciAoc2lURCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC1oY2QuYwppbmRleCA1MTQ3ZWQ0Li5hNzJlMDQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L2lzcDExNngtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LWhjZC5jCkBAIC0xMjA0LDEwICsxMjA0LDEwIEBACiAKIHN0YXRpYyBpbnQgaXNwMTE2eF9vcGVuX3NlcShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgaXNwMTE2eF9zaG93X2RiZywgaW5vZGUtPnUuZ2VuZXJpY19pcCk7CisJcmV0dXJuIHNpbmdsZV9vcGVuKGZpbGUsIGlzcDExNnhfc2hvd19kYmcsIGlub2RlLT5pX3ByaXZhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpc3AxMTZ4X2RlYnVnX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpc3AxMTZ4X2RlYnVnX2ZvcHMgPSB7CiAJLm9wZW4gPSBpc3AxMTZ4X29wZW5fc2VxLAogCS5yZWFkID0gc2VxX3JlYWQsCiAJLmxsc2VlayA9IHNlcV9sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvaXNwMTE2eC5oIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKaW5kZXggYTFiN2MzOC4uYjkxZTJlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9pc3AxMTZ4LmgKQEAgLTIzMyw3ICsyMzMsNyBAQAogCS8qIEJpdCBTdHVmZiAgKi8gLUVQUk9UTywKIAkvKiBEYXRhIFRvZ2cgICovIC1FSUxTRVEsCiAJLyogU3RhbGwgICAgICAqLyAtRVBJUEUsCi0JLyogRGV2Tm90UmVzcCAqLyAtRVRJTUVET1VULAorCS8qIERldk5vdFJlc3AgKi8gLUVUSU1FLAogCS8qIFBJRENoZWNrICAgKi8gLUVQUk9UTywKIAkvKiBVbkV4cFBJRCAgICovIC1FUFJPVE8sCiAJLyogRGF0YU92ZXIgICAqLyAtRU9WRVJGTE9XLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdDkxLmMKaW5kZXggODVjYzA1OS4uYjQ2NjU4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF0OTEuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXQ5MS5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQogCQlyZXR1cm4gcmV0OwogCi0Jcm9vdC0+bWF4Y2hpbGQgPSBib2FyZC0+cG9ydHM7CisJb2hjaS0+bnVtX3BvcnRzID0gYm9hcmQtPnBvcnRzOwogCiAJaWYgKChyZXQgPSBvaGNpX3J1bihvaGNpKSkgPCAwKSB7CiAJCWVycigiY2FuJ3Qgc3RhcnQgJXMiLCBoY2QtPnNlbGYuYnVzX25hbWUpOwpAQCAtMjIxLDYgKzIyMSw3IEBACiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfYXQ5MV9zdGFydCwKIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTIzOSw3ICsyNDAsNyBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKLQorCS5odWJfaXJxX2VuYWJsZSA9CW9oY2lfcmhzY19lbmFibGUsCiAjaWZkZWYgQ09ORklHX1BNCiAJLmJ1c19zdXNwZW5kID0JCW9oY2lfYnVzX3N1c3BlbmQsCiAJLmJ1c19yZXN1bWUgPQkJb2hjaV9idXNfcmVzdW1lLApAQCAtMjk2LDYgKzI5Nyw3IEBACiAJaWYgKCFjbG9ja2VkKSB7CiAJCWNsa19lbmFibGUoaWNsayk7CiAJCWNsa19lbmFibGUoZmNsayk7CisJCWNsb2NrZWQgPSAxOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzEwLDYgKzMxMiw3IEBACiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBvaGNpX2hjZF9hdDkxX2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXQ5MV9kcnZfcHJvYmUsCiAJLnJlbW92ZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9yZW1vdmUsCisJLnNodXRkb3duCT0gdXNiX2hjZF9wbGF0Zm9ybV9zaHV0ZG93biwKIAkuc3VzcGVuZAk9IG9oY2lfaGNkX2F0OTFfZHJ2X3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX2hjZF9hdDkxX2Rydl9yZXN1bWUsCiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktYXUxeHh4LmMKaW5kZXggZjdhOTc1ZC4uMjRlMjNjNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWF1MXh4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1hdTF4eHguYwpAQCAtMjY4LDExICsyNjgsOCBAQAogCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfYXUxeHh4X3N0YXJ0LAotI2lmZGVmCUNPTkZJR19QTQotCS8qIHN1c3BlbmQ6CQlvaGNpX2F1MXh4eF9zdXNwZW5kLCAgLS0gdGJkICovCi0JLyogcmVzdW1lOgkJb2hjaV9hdTF4eHhfcmVzdW1lLCAgIC0tIHRiZCAqLwotI2VuZGlmIC8qQ09ORklHX1BNKi8KIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTI5MSw2ICsyODgsNyBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKwkuaHViX2lycV9lbmFibGUgPQlvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmCUNPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKQEAgLTMzOCw2ICszMzYsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfYXUxeHh4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2F1MXh4eF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9hdTF4eHhfZHJ2X3N1c3BlbmQsICovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfYXUxeHh4X2Rydl9yZXN1bWUsICovCiAJLmRyaXZlcgkJPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZGJnLmMKaW5kZXggN2JmZmZjYi4uODI5M2MxZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWRiZy5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1kYmcuYwpAQCAtNDc3LDcgKzQ3Nyw3IEBACiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CiAKIAlidXMgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOwotCWhjZCA9IGJ1cy0+aGNwcml2OworCWhjZCA9IGJ1c190b19oY2QoYnVzKTsKIAlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKIAogCS8qIGRpc3BsYXkgY29udHJvbCBhbmQgYnVsayBsaXN0cyB0b2dldGhlciwgZm9yIHNpbXBsaWNpdHkgKi8KQEAgLTUxMCw3ICs1MTAsNyBAQAogCXNlZW5fY291bnQgPSAwOwogCiAJYnVzID0gY2xhc3NfZ2V0X2RldmRhdGEoY2xhc3NfZGV2KTsKLQloY2QgPSBidXMtPmhjcHJpdjsKKwloY2QgPSBidXNfdG9faGNkKGJ1cyk7CiAJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CiAJbmV4dCA9IGJ1ZjsKIAlzaXplID0gUEFHRV9TSVpFOwpAQCAtNjA3LDcgKzYwNyw3IEBACiAJdTMyCQkJcmRhdGE7CiAKIAlidXMgPSBjbGFzc19nZXRfZGV2ZGF0YShjbGFzc19kZXYpOwotCWhjZCA9IGJ1cy0+aGNwcml2OworCWhjZCA9IGJ1c190b19oY2QoYnVzKTsKIAlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKIAlyZWdzID0gb2hjaS0+cmVnczsKIAluZXh0ID0gYnVmOwpAQCAtNjY3LDYgKzY2NywxMSBAQAogCXNpemUgLT0gdGVtcDsKIAluZXh0ICs9IHRlbXA7CiAKKwl0ZW1wID0gc2NucHJpbnRmIChuZXh0LCBzaXplLCAiaHViIHBvbGwgdGltZXIgJXNcbiIsCisJCQlvaGNpX3RvX2hjZChvaGNpKS0+cG9sbF9yaCA/ICJPTiIgOiAib2ZmIik7CisJc2l6ZSAtPSB0ZW1wOworCW5leHQgKz0gdGVtcDsKKwogCS8qIHJvb3RodWIgKi8KIAlvaGNpX2R1bXBfcm9vdGh1YiAob2hjaSwgMSwgJm5leHQsICZzaXplKTsKIApAQCAtNjgwLDEwICs2ODUsMTEgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVfZGVidWdfZmlsZXMgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKIHsKIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGRldiA9IG9oY2lfdG9faGNkKG9oY2kpLT5zZWxmLmNsYXNzX2RldjsKKwlpbnQgcmV0dmFsOwogCi0JY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfYXN5bmMpOwotCWNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX3BlcmlvZGljKTsKLQljbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9yZWdpc3RlcnMpOworCXJldHZhbCA9IGNsYXNzX2RldmljZV9jcmVhdGVfZmlsZShjbGRldiwgJmNsYXNzX2RldmljZV9hdHRyX2FzeW5jKTsKKwlyZXR2YWwgPSBjbGFzc19kZXZpY2VfY3JlYXRlX2ZpbGUoY2xkZXYsICZjbGFzc19kZXZpY2VfYXR0cl9wZXJpb2RpYyk7CisJcmV0dmFsID0gY2xhc3NfZGV2aWNlX2NyZWF0ZV9maWxlKGNsZGV2LCAmY2xhc3NfZGV2aWNlX2F0dHJfcmVnaXN0ZXJzKTsKIAlvaGNpX2RiZyAob2hjaSwgImNyZWF0ZWQgZGVidWcgZmlsZXNcbiIpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktZXA5M3h4LmMKaW5kZXggNjUzMWM0ZC4uMWJmNWU3YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWVwOTN4eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1lcDkzeHguYwpAQCAtMTI4LDEyICsxMjgsMTQgQEAKIAkuZmxhZ3MJCQk9IEhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCiAJLnN0YXJ0CQkJPSBvaGNpX2VwOTN4eF9zdGFydCwKIAkuc3RvcAkJCT0gb2hjaV9zdG9wLAorCS5zaHV0ZG93bgkJPSBvaGNpX3NodXRkb3duLAogCS51cmJfZW5xdWV1ZQkJPSBvaGNpX3VyYl9lbnF1ZXVlLAogCS51cmJfZGVxdWV1ZQkJPSBvaGNpX3VyYl9kZXF1ZXVlLAogCS5lbmRwb2ludF9kaXNhYmxlCT0gb2hjaV9lbmRwb2ludF9kaXNhYmxlLAogCS5nZXRfZnJhbWVfbnVtYmVyCT0gb2hjaV9nZXRfZnJhbWUsCiAJLmh1Yl9zdGF0dXNfZGF0YQk9IG9oY2lfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbAkJPSBvaGNpX2h1Yl9jb250cm9sLAorCS5odWJfaXJxX2VuYWJsZQkJPSBvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmIENPTkZJR19QTQogCS5idXNfc3VzcGVuZAkJPSBvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lCQk9IG9oY2lfYnVzX3Jlc3VtZSwKQEAgLTIwMiw2ICsyMDQsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfZXA5M3h4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfZXA5M3h4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX2VwOTN4eF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9oY2RfZXA5M3h4X2Rydl9zdXNwZW5kLAogCS5yZXN1bWUJCT0gb2hjaV9oY2RfZXA5M3h4X2Rydl9yZXN1bWUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaGNkLmMKaW5kZXggOTRkOGNmNC4uZDFkNjhjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLWhjZC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1oY2QuYwpAQCAtODgsNyArODgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgotI2luY2x1ZGUgPGxpbnV4L3VzYl9vdGcuaD4KKyNpbmNsdWRlIDxsaW51eC91c2Ivb3RnLmg+CiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4gCiAjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgpAQCAtMTAxLDcgKzEwMSw3IEBACiAKICNpbmNsdWRlICIuLi9jb3JlL2hjZC5oIgogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICIyMDA1IEFwcmlsIDIyIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMjAwNiBBdWd1c3QgMDQiCiAjZGVmaW5lIERSSVZFUl9BVVRIT1IgIlJvbWFuIFdlaXNzZ2FlcmJlciwgRGF2aWQgQnJvd25lbGwiCiAjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgMS4xICdPcGVuJyBIb3N0IENvbnRyb2xsZXIgKE9IQ0kpIERyaXZlciIKIApAQCAtMTEwLDkgKzExMCwxMCBAQAogI3VuZGVmIE9IQ0lfVkVSQk9TRV9ERUJVRwkvKiBub3QgYWx3YXlzIGhlbHBmdWwgKi8KIAogLyogRm9yIGluaXRpYWxpemluZyBjb250cm9sbGVyIChtYXNrIGluIGFuIEhDRlMgbW9kZSB0b28pICovCi0jZGVmaW5lCU9IQ0lfQ09OVFJPTF9JTklUIAlPSENJX0NUUkxfQ0JTUgorI2RlZmluZQlPSENJX0NPTlRST0xfSU5JVAlPSENJX0NUUkxfQ0JTUgogI2RlZmluZQlPSENJX0lOVFJfSU5JVCBcCi0JKE9IQ0lfSU5UUl9NSUUgfCBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfV0RIKQorCQkoT0hDSV9JTlRSX01JRSB8IE9IQ0lfSU5UUl9SSFNDIHwgT0hDSV9JTlRSX1VFIFwKKwkJfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfV0RIKQogCiAjaWZkZWYgX19ocHBhX18KIC8qIE9uIFBBLVJJU0MsIFBEQyBjYW4gbGVhdmUgSVIgc2V0IGluY29ycmVjdGx5OyBpZ25vcmUgaXQgdGhlcmUuICovCkBAIC0xMjgsMTIgKzEyOSwxMyBAQAogCiBzdGF0aWMgY29uc3QgY2hhcgloY2RfbmFtZSBbXSA9ICJvaGNpX2hjZCI7CiAKKyNkZWZpbmUJU1RBVEVDSEFOR0VfREVMQVkJbXNlY3NfdG9famlmZmllcygzMDApCisKICNpbmNsdWRlICJvaGNpLmgiCiAKIHN0YXRpYyB2b2lkIG9oY2lfZHVtcCAoc3RydWN0IG9oY2lfaGNkICpvaGNpLCBpbnQgdmVyYm9zZSk7CiBzdGF0aWMgaW50IG9oY2lfaW5pdCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKIHN0YXRpYyB2b2lkIG9oY2lfc3RvcCAoc3RydWN0IHVzYl9oY2QgKmhjZCk7Ci1zdGF0aWMgaW50IG9oY2lfcmVib290IChzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZyAsIHZvaWQgKik7CiAKICNpbmNsdWRlICJvaGNpLWh1Yi5jIgogI2luY2x1ZGUgIm9oY2ktZGJnLmMiCkBAIC00MTYsMjEgKzQxOCwyMCBAQAogCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiB9CiAKLS8qIHJlYm9vdCBub3RpZmllciBmb3JjaWJseSBkaXNhYmxlcyBJUlFzIGFuZCBETUEsIGhlbHBpbmcga2V4ZWMgYW5kCisvKiBvaGNpX3NodXRkb3duIGZvcmNpYmx5IGRpc2FibGVzIElSUXMgYW5kIERNQSwgaGVscGluZyBrZXhlYyBhbmQKICAqIG90aGVyIGNhc2VzIHdoZXJlIHRoZSBuZXh0IHNvZnR3YXJlIG1heSBleHBlY3QgY2xlYW4gc3RhdGUgZnJvbSB0aGUKICAqICJmaXJtd2FyZSIuICB0aGlzIGlzIGJ1cy1uZXV0cmFsLCB1bmxpa2Ugc2h1dGRvd24oKSBtZXRob2RzLgogICovCi1zdGF0aWMgaW50Ci1vaGNpX3JlYm9vdCAoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpibG9jaywgdW5zaWduZWQgbG9uZyBjb2RlLCB2b2lkICpudWxsKQorc3RhdGljIHZvaWQKK29oY2lfc2h1dGRvd24gKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IG9oY2lfaGNkICpvaGNpOwogCi0Jb2hjaSA9IGNvbnRhaW5lcl9vZiAoYmxvY2ssIHN0cnVjdCBvaGNpX2hjZCwgcmVib290X25vdGlmaWVyKTsKKwlvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAJb2hjaV93cml0ZWwgKG9oY2ksIE9IQ0lfSU5UUl9NSUUsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CiAJb2hjaV91c2JfcmVzZXQgKG9oY2kpOwogCS8qIGZsdXNoIHRoZSB3cml0ZXMgKi8KIAkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwotCXJldHVybiAwOwogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qCkBAIC00NDYsNyArNDQ3LDYgQEAKIAogCWRpc2FibGUgKG9oY2kpOwogCW9oY2ktPnJlZ3MgPSBoY2QtPnJlZ3M7Ci0Jb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CiAKIAkvKiBSRVZJU0lUIHRoaXMgQklPUyBoYW5kc2hha2UgaXMgbm93IG1vdmVkIGludG8gUENJICJxdWlya3MiLCBhbmQKIAkgKiB3YXMgbmV2ZXIgbmVlZGVkIGZvciBtb3N0IG5vbi1QQ0kgc3lzdGVtcyAuLi4gcmVtb3ZlIHRoZSBjb2RlPwpAQCAtNTAyLDcgKzUwMiw2IEBACiAJaWYgKChyZXQgPSBvaGNpX21lbV9pbml0IChvaGNpKSkgPCAwKQogCQlvaGNpX3N0b3AgKGhjZCk7CiAJZWxzZSB7Ci0JCXJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJm9oY2ktPnJlYm9vdF9ub3RpZmllcik7CiAJCWNyZWF0ZV9kZWJ1Z19maWxlcyAob2hjaSk7CiAJfQogCkBAIC02MzcsMTAgKzYzNiwxNCBAQAogCQlyZXR1cm4gLUVPVkVSRkxPVzsKIAl9CiAKLSAJLyogc3RhcnQgY29udHJvbGxlciBvcGVyYXRpb25zICovCisJLyogdXNlIHJoc2MgaXJxcyBhZnRlciBraHViZCBpcyBmdWxseSBpbml0aWFsaXplZCAqLworCWhjZC0+cG9sbF9yaCA9IDE7CisJaGNkLT51c2VzX25ld19wb2xsaW5nID0gMTsKKworCS8qIHN0YXJ0IGNvbnRyb2xsZXIgb3BlcmF0aW9ucyAqLwogCW9oY2ktPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKLSAJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NPTlRST0xfSU5JVCB8IE9IQ0lfVVNCX09QRVI7Ci0gCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX0NPTlRST0xfSU5JVCB8IE9IQ0lfVVNCX09QRVI7CisJb2hjaV93cml0ZWwgKG9oY2ksIG9oY2ktPmhjX2NvbnRyb2wsICZvaGNpLT5yZWdzLT5jb250cm9sKTsKIAloY2QtPnN0YXRlID0gSENfU1RBVEVfUlVOTklORzsKIAogCS8qIHdha2Ugb24gQ29ubmVjdFN0YXR1c0NoYW5nZSwgbWF0Y2hpbmcgZXh0ZXJuYWwgaHVicyAqLwpAQCAtNjQ4LDcgKzY1MSw3IEBACiAKIAkvKiBDaG9vc2UgdGhlIGludGVycnVwdHMgd2UgY2FyZSBhYm91dCBub3csIG90aGVycyBsYXRlciBvbiBkZW1hbmQgKi8KIAltYXNrID0gT0hDSV9JTlRSX0lOSVQ7Ci0Jb2hjaV93cml0ZWwgKG9oY2ksIG1hc2ssICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKKwlvaGNpX3dyaXRlbCAob2hjaSwgfjAsICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKIAlvaGNpX3dyaXRlbCAob2hjaSwgbWFzaywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCiAJLyogaGFuZGxlIHJvb3QgaHViIGluaXQgcXVpcmtzIC4uLiAqLwpAQCAtNjcyLDYgKzY3NSw3IEBACiAJLy8gZmx1c2ggdGhvc2Ugd3JpdGVzCiAJKHZvaWQpIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5jb250cm9sKTsKIAorCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgU1RBVEVDSEFOR0VfREVMQVk7CiAJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CiAKIAkvLyBQT1RQR1QgZGVsYXkgaXMgYml0cyAyNC0zMSwgaW4gMiBtcyB1bml0cy4KQEAgLTcwOSw3ICs3MTMsMTQgQEAKIAkvKiBpbnRlcnJ1cHQgZm9yIHNvbWUgb3RoZXIgZGV2aWNlPyAqLwogCX0gZWxzZSBpZiAoKGludHMgJj0gb2hjaV9yZWFkbCAob2hjaSwgJnJlZ3MtPmludHJlbmFibGUpKSA9PSAwKSB7CiAJCXJldHVybiBJUlFfTk9UTUlORTsKLQl9IAorCX0KKworCWlmIChpbnRzICYgT0hDSV9JTlRSX1JIU0MpIHsKKwkJb2hjaV92ZGJnIChvaGNpLCAicmhzY1xuIik7CisJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzICsgU1RBVEVDSEFOR0VfREVMQVk7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfUkhTQywgJnJlZ3MtPmludHJzdGF0dXMpOworCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CisJfQogCiAJaWYgKGludHMgJiBPSENJX0lOVFJfVUUpIHsKIAkJZGlzYWJsZSAob2hjaSk7CkBAIC03MjMsMTMgKzczNCwxOCBAQAogCWlmIChpbnRzICYgT0hDSV9JTlRSX1JEKSB7CiAJCW9oY2lfdmRiZyAob2hjaSwgInJlc3VtZSBkZXRlY3RcbiIpOwogCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1JELCAmcmVncy0+aW50cnN0YXR1cyk7Ci0JCWlmIChoY2QtPnN0YXRlICE9IEhDX1NUQVRFX1FVSUVTQ0lORykKKwkJaGNkLT5wb2xsX3JoID0gMTsKKwkJaWYgKG9oY2ktPmF1dG9zdG9wKSB7CisJCQlzcGluX2xvY2sgKCZvaGNpLT5sb2NrKTsKKwkJCW9oY2lfcmhfcmVzdW1lIChvaGNpKTsKKwkJCXNwaW5fdW5sb2NrICgmb2hjaS0+bG9jayk7CisJCX0gZWxzZQogCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIoaGNkKTsKIAl9CiAKIAlpZiAoaW50cyAmIE9IQ0lfSU5UUl9XREgpIHsKIAkJaWYgKEhDX0lTX1JVTk5JTkcoaGNkLT5zdGF0ZSkpCi0JCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJkaXNhYmxlKTsJCisJCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1dESCwgJnJlZ3MtPmludHJkaXNhYmxlKTsKIAkJc3Bpbl9sb2NrICgmb2hjaS0+bG9jayk7CiAJCWRsX2RvbmVfbGlzdCAob2hjaSwgcHRyZWdzKTsKIAkJc3Bpbl91bmxvY2sgKCZvaGNpLT5sb2NrKTsKQEAgLTc3NSw5ICs3OTEsMTAgQEAKIAogCW9oY2lfdXNiX3Jlc2V0IChvaGNpKTsKIAlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX01JRSwgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKLQkKKwlmcmVlX2lycShoY2QtPmlycSwgaGNkKTsKKwloY2QtPmlycSA9IC0xOworCiAJcmVtb3ZlX2RlYnVnX2ZpbGVzIChvaGNpKTsKLQl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllciAoJm9oY2ktPnJlYm9vdF9ub3RpZmllcik7CiAJb2hjaV9tZW1fY2xlYW51cCAob2hjaSk7CiAJaWYgKG9oY2ktPmhjY2EpIHsKIAkJZG1hX2ZyZWVfY29oZXJlbnQgKGhjZC0+c2VsZi5jb250cm9sbGVyLCAKQEAgLTkxNyw2ICs5MzQsMTAgQEAKICNpbmNsdWRlICJvaGNpLWF0OTEuYyIKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX0FSQ0hfUE5YNDAwOAorI2luY2x1ZGUgIm9oY2ktcG54NDAwOC5jIgorI2VuZGlmCisKICNpZiAhKGRlZmluZWQoQ09ORklHX1BDSSkgXAogICAgICAgfHwgZGVmaW5lZChDT05GSUdfU0ExMTExKSBcCiAgICAgICB8fCBkZWZpbmVkKENPTkZJR19BUkNIX1MzQzI0MTApIFwKQEAgLTkyOCw2ICs5NDksNyBAQAogICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX1VTQl9PSENJX0hDRF9QUENfU09DKSBcCiAgICAgICB8fCBkZWZpbmVkIChDT05GSUdfQVJDSF9BVDkxUk05MjAwKSBcCiAgICAgICB8fCBkZWZpbmVkIChDT05GSUdfQVJDSF9BVDkxU0FNOTI2MSkgXAorICAgICAgfHwgZGVmaW5lZCAoQ09ORklHX0FSQ0hfUE5YNDAwOCkgXAogCSkKICNlcnJvciAibWlzc2luZyBidXMgZ2x1ZSBmb3Igb2hjaS1oY2QiCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1odWIuYwppbmRleCA1YjBhMjNmLi5lYzc1Nzc0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktaHViLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWh1Yi5jCkBAIC0zNiwyNyArMzYsMjUgQEAKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAotI2lmZGVmCUNPTkZJR19QTQorLyogaGNkLT5odWJfaXJxX2VuYWJsZSgpICovCitzdGF0aWMgdm9pZCBvaGNpX3Joc2NfZW5hYmxlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKworCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOworfQogCiAjZGVmaW5lIE9IQ0lfU0NIRURfRU5BQkxFUyBcCiAJKE9IQ0lfQ1RSTF9DTEV8T0hDSV9DVFJMX0JMRXxPSENJX0NUUkxfUExFfE9IQ0lfQ1RSTF9JRSkKIAogc3RhdGljIHZvaWQgZGxfZG9uZV9saXN0IChzdHJ1Y3Qgb2hjaV9oY2QgKiwgc3RydWN0IHB0X3JlZ3MgKik7CiBzdGF0aWMgdm9pZCBmaW5pc2hfdW5saW5rcyAoc3RydWN0IG9oY2lfaGNkICosIHUxNiAsIHN0cnVjdCBwdF9yZWdzICopOwotc3RhdGljIGludCBvaGNpX3Jlc3RhcnQgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSk7CiAKLXN0YXRpYyBpbnQgb2hjaV9idXNfc3VzcGVuZCAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3N0YXRpYyBpbnQgb2hjaV9yaF9zdXNwZW5kIChzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIGludCBhdXRvc3RvcCkKK19fcmVsZWFzZXMob2hjaS0+bG9jaykKK19fYWNxdWlyZXMob2hjaS0+bG9jaykKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CiAJaW50CQkJc3RhdHVzID0gMDsKLQl1bnNpZ25lZCBsb25nCQlmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRVNIVVRET1dOOwotCX0KIAogCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAJc3dpdGNoIChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpIHsKQEAgLTcyLDE1ICs3MCwxNiBAQAogCQlvaGNpX2RiZyAob2hjaSwgIm5lZWRzIHJlaW5pdCFcbiIpOwogCQlnb3RvIGRvbmU7CiAJY2FzZSBPSENJX1VTQl9TVVNQRU5EOgotCQlvaGNpX2RiZyAob2hjaSwgImFscmVhZHkgc3VzcGVuZGVkXG4iKTsKLQkJZ290byBkb25lOworCQlpZiAoIW9oY2ktPmF1dG9zdG9wKSB7CisJCQlvaGNpX2RiZyAob2hjaSwgImFscmVhZHkgc3VzcGVuZGVkXG4iKTsKKwkJCWdvdG8gZG9uZTsKKwkJfQogCX0KLQlvaGNpX2RiZyAob2hjaSwgInN1c3BlbmQgcm9vdCBodWJcbiIpOworCW9oY2lfZGJnIChvaGNpLCAiJXMgcm9vdCBodWJcbiIsCisJCQlhdXRvc3RvcCA/ICJhdXRvLXN0b3AiIDogInN1c3BlbmQiKTsKIAogCS8qIEZpcnN0IHN0b3AgYW55IHByb2Nlc3NpbmcgKi8KLQlpZiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfU0NIRURfRU5BQkxFUykgewotCQlpbnQJCWxpbWl0OwotCisJaWYgKCFhdXRvc3RvcCAmJiAob2hjaS0+aGNfY29udHJvbCAmIE9IQ0lfU0NIRURfRU5BQkxFUykpIHsKIAkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9TQ0hFRF9FTkFCTEVTOwogCQlvaGNpX3dyaXRlbCAob2hjaSwgb2hjaS0+aGNfY29udHJvbCwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCQlvaGNpLT5oY19jb250cm9sID0gb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwpAQCAtOTAsMjcgKzg5LDIyIEBACiAJCSAqIHRoZW4gdGhlIGxhc3QgV0RIIGNvdWxkIHRha2UgNisgbXNlYwogCQkgKi8KIAkJb2hjaV9kYmcgKG9oY2ksICJzdG9wcGluZyBzY2hlZHVsZXMgLi4uXG4iKTsKLQkJbGltaXQgPSAyMDAwOwotCQl3aGlsZSAobGltaXQgPiAwKSB7Ci0JCQl1ZGVsYXkgKDI1MCk7Ci0JCQlsaW1pdCA9LSAyNTA7Ci0JCQlpZiAob2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmludHJzdGF0dXMpCi0JCQkJCSYgT0hDSV9JTlRSX1NGKQotCQkJCWJyZWFrOwotCQl9Ci0JCWRsX2RvbmVfbGlzdCAob2hjaSwgTlVMTCk7Ci0JCW1kZWxheSAoNyk7CisJCW9oY2ktPmF1dG9zdG9wID0gMDsKKwkJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJCW1zbGVlcCAoOCk7CisJCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKIAl9CiAJZGxfZG9uZV9saXN0IChvaGNpLCBOVUxMKTsKIAlmaW5pc2hfdW5saW5rcyAob2hjaSwgb2hjaV9mcmFtZV9ubyhvaGNpKSwgTlVMTCk7Ci0Jb2hjaV93cml0ZWwgKG9oY2ksIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKSwKLQkJCSZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKIAogCS8qIG1heWJlIHJlc3VtZSBjYW4gd2FrZSByb290IGh1YiAqLwotCWlmIChkZXZpY2VfbWF5X3dha2V1cCgmb2hjaV90b19oY2Qob2hjaSktPnNlbGYucm9vdF9odWItPmRldikpCisJaWYgKGRldmljZV9tYXlfd2FrZXVwKCZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5yb290X2h1Yi0+ZGV2KSB8fAorCQkJYXV0b3N0b3ApCiAJCW9oY2ktPmhjX2NvbnRyb2wgfD0gT0hDSV9DVFJMX1JXRTsKLQllbHNlCisJZWxzZSB7CisJCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfUkhTQywgJm9oY2ktPnJlZ3MtPmludHJkaXNhYmxlKTsKIAkJb2hjaS0+aGNfY29udHJvbCAmPSB+T0hDSV9DVFJMX1JXRTsKKwl9CiAKIAkvKiBTdXNwZW5kIGh1YiAuLi4gdGhpcyBpcyB0aGUgImdsb2JhbCAodG8gdGhpcyBidXMpIHN1c3BlbmQiIG1vZGUsCiAJICogd2hpY2ggZG9lc24ndCBpbXBseSBwb3J0cyB3aWxsIGZpcnN0IGJlIGluZGl2aWR1YWxseSBzdXNwZW5kZWQuCkBAIC0xMjEsMTMgKzExNSwxMiBAQAogCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAKIAkvKiBubyByZXN1bWVzIHVudGlsIGRldmljZXMgZmluaXNoIHN1c3BlbmRpbmcgKi8KLQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDUpOworCWlmICghYXV0b3N0b3ApIHsKKwkJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzICg1KTsKKwkJb2hjaS0+YXV0b3N0b3AgPSAwOworCX0KIAogZG9uZToKLQkvKiBleHRlcm5hbCBzdXNwZW5kIHZzIHNlbGYgYXV0b3N1c3BlbmQgLi4uIHNhbWUgZWZmZWN0ICovCi0JaWYgKHN0YXR1cyA9PSAwKQotCQl1c2JfaGNkX3N1c3BlbmRfcm9vdF9odWIoaGNkKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwogCXJldHVybiBzdGF0dXM7CiB9CiAKQEAgLTEzOSwyNSArMTMyLDE5IEBACiAJcmV0dXJuIGVkOwogfQogCitzdGF0aWMgaW50IG9oY2lfcmVzdGFydCAoc3RydWN0IG9oY2lfaGNkICpvaGNpKTsKKwogLyogY2FsbGVyIGhhcyBsb2NrZWQgdGhlIHJvb3QgaHViICovCi1zdGF0aWMgaW50IG9oY2lfYnVzX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3N0YXRpYyBpbnQgb2hjaV9yaF9yZXN1bWUgKHN0cnVjdCBvaGNpX2hjZCAqb2hjaSkKK19fcmVsZWFzZXMob2hjaS0+bG9jaykKK19fYWNxdWlyZXMob2hjaS0+bG9jaykKIHsKLQlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBvaGNpX3RvX2hjZCAob2hjaSk7CiAJdTMyCQkJdGVtcCwgZW5hYmxlczsKIAlpbnQJCQlzdGF0dXMgPSAtRUlOUFJPR1JFU1M7Ci0JdW5zaWduZWQgbG9uZwkJZmxhZ3M7CisJaW50CQkJYXV0b3N0b3BwZWQgPSBvaGNpLT5hdXRvc3RvcDsKIAotCWlmICh0aW1lX2JlZm9yZSAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkpCi0JCW1zbGVlcCg1KTsKLQotCXNwaW5fbG9ja19pcnFzYXZlICgmb2hjaS0+bG9jaywgZmxhZ3MpOwotCi0JaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpKSB7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7Ci0JCXJldHVybiAtRVNIVVRET1dOOwotCX0KLQotCisJb2hjaS0+YXV0b3N0b3AgPSAwOwogCW9oY2ktPmhjX2NvbnRyb2wgPSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAKIAlpZiAob2hjaS0+aGNfY29udHJvbCAmIChPSENJX0NUUkxfSVIgfCBPSENJX1NDSEVEX0VOQUJMRVMpKSB7CkBAIC0xNzcsNyArMTY0LDggQEAKIAkJb2hjaS0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CiAJCW9oY2lfd3JpdGVsIChvaGNpLCBvaGNpLT5oY19jb250cm9sLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CiAJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7Ci0JCW9oY2lfZGJnIChvaGNpLCAicmVzdW1lIHJvb3QgaHViXG4iKTsKKwkJb2hjaV9kYmcgKG9oY2ksICIlcyByb290IGh1YlxuIiwKKwkJCQlhdXRvc3RvcHBlZCA/ICJhdXRvLXN0YXJ0IiA6ICJyZXN1bWUiKTsKIAkJYnJlYWs7CiAJY2FzZSBPSENJX1VTQl9SRVNVTUU6CiAJCS8qIEhDRlMgY2hhbmdlcyBzb21ldGltZSBhZnRlciBJTlRSX1JEICovCkBAIC0xOTIsMTYgKzE4MCwyNCBAQAogCQlvaGNpX2RiZyAob2hjaSwgImxvc3QgcG93ZXJcbiIpOwogCQlzdGF0dXMgPSAtRUJVU1k7CiAJfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CisjaWZkZWYJQ09ORklHX1BNCiAJaWYgKHN0YXR1cyA9PSAtRUJVU1kpIHsKLQkJKHZvaWQpIG9oY2lfaW5pdCAob2hjaSk7Ci0JCXJldHVybiBvaGNpX3Jlc3RhcnQgKG9oY2kpOworCQlpZiAoIWF1dG9zdG9wcGVkKSB7CisJCQlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwkJCSh2b2lkKSBvaGNpX2luaXQgKG9oY2kpOworCQkJc3RhdHVzID0gb2hjaV9yZXN0YXJ0IChvaGNpKTsKKwkJCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwkJfQorCQlyZXR1cm4gc3RhdHVzOwogCX0KKyNlbmRpZgogCWlmIChzdGF0dXMgIT0gLUVJTlBST0dSRVNTKQogCQlyZXR1cm4gc3RhdHVzOworCWlmIChhdXRvc3RvcHBlZCkKKwkJZ290byBza2lwX3Jlc3VtZTsKKwlzcGluX3VubG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKIAogCXRlbXAgPSBvaGNpLT5udW1fcG9ydHM7Ci0JZW5hYmxlcyA9IDA7CiAJd2hpbGUgKHRlbXAtLSkgewogCQl1MzIgc3RhdCA9IG9oY2lfcmVhZGwgKG9oY2ksCiAJCQkJICAgICAgICZvaGNpLT5yZWdzLT5yb290aHViLnBvcnRzdGF0dXMgW3RlbXBdKTsKQEAgLTIzNCwxNyArMjMwLDIxIEBACiAJLyogU29tZXRpbWVzIFBDSSBEMyBzdXNwZW5kIHRyYXNoZXMgZnJhbWUgdGltaW5ncyAuLi4gKi8KIAlwZXJpb2RpY19yZWluaXQgKG9oY2kpOwogCisJLyogdGhlIGZvbGxvd2luZyBjb2RlIGlzIGV4ZWN1dGVkIHdpdGggb2hjaS0+bG9jayBoZWxkIGFuZAorCSAqIGlycXMgZGlzYWJsZWQgaWYgYW5kIG9ubHkgaWYgYXV0b3N0b3BwZWQgaXMgdHJ1ZQorCSAqLworCitza2lwX3Jlc3VtZToKIAkvKiBpbnRlcnJ1cHRzIG1pZ2h0IGhhdmUgYmVlbiBkaXNhYmxlZCAqLwogCW9oY2lfd3JpdGVsIChvaGNpLCBPSENJX0lOVFJfSU5JVCwgJm9oY2ktPnJlZ3MtPmludHJlbmFibGUpOwogCWlmIChvaGNpLT5lZF9ybV9saXN0KQogCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1NGLCAmb2hjaS0+cmVncy0+aW50cmVuYWJsZSk7Ci0Jb2hjaV93cml0ZWwgKG9oY2ksIG9oY2lfcmVhZGwgKG9oY2ksICZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKSwKLQkJCSZvaGNpLT5yZWdzLT5pbnRyc3RhdHVzKTsKIAogCS8qIFRoZW4gcmUtZW5hYmxlIG9wZXJhdGlvbnMgKi8KIAlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9VU0JfT1BFUiwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7Ci0JbXNsZWVwICgzKTsKKwlpZiAoIWF1dG9zdG9wcGVkKQorCQltc2xlZXAgKDMpOwogCiAJdGVtcCA9IG9oY2ktPmhjX2NvbnRyb2w7CiAJdGVtcCAmPSBPSENJX0NUUkxfUldDOwpAQCAtMjU0LDEwICsyNTQsMTQgQEAKIAkodm9pZCkgb2hjaV9yZWFkbCAob2hjaSwgJm9oY2ktPnJlZ3MtPmNvbnRyb2wpOwogCiAJLyogVFJTTVJDWSAqLwotCW1zbGVlcCAoMTApOworCWlmICghYXV0b3N0b3BwZWQpIHsKKwkJbXNsZWVwICgxMCk7CisJCXNwaW5fbG9ja19pcnEgKCZvaGNpLT5sb2NrKTsKKwl9CisJLyogbm93IG9oY2ktPmxvY2sgaXMgYWx3YXlzIGhlbGQgYW5kIGlycXMgYXJlIGFsd2F5cyBkaXNhYmxlZCAqLwogCi0JLyoga2VlcCBpdCBhbGl2ZSBmb3IgfjV4IHN1c3BlbmQgKyByZXN1bWUgY29zdHMgKi8KLQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMgKDI1MCk7CisJLyoga2VlcCBpdCBhbGl2ZSBmb3IgbW9yZSB0aGFuIH41eCBzdXNwZW5kICsgcmVzdW1lIGNvc3RzICovCisJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXMgKyBTVEFURUNIQU5HRV9ERUxBWTsKIAogCS8qIG1heWJlIHR1cm4gc2NoZWR1bGVzIGJhY2sgb24gKi8KIAllbmFibGVzID0gMDsKQEAgLTI5MSw2ICsyOTUsNDUgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmCUNPTkZJR19QTQorCitzdGF0aWMgaW50IG9oY2lfYnVzX3N1c3BlbmQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOworCWludAkJCXJjOworCisJc3Bpbl9sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCisJaWYgKHVubGlrZWx5KCF0ZXN0X2JpdChIQ0RfRkxBR19IV19BQ0NFU1NJQkxFLCAmaGNkLT5mbGFncykpKQorCQlyYyA9IC1FU0hVVERPV047CisJZWxzZQorCQlyYyA9IG9oY2lfcmhfc3VzcGVuZCAob2hjaSwgMCk7CisJc3Bpbl91bmxvY2tfaXJxICgmb2hjaS0+bG9jayk7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IG9oY2lfYnVzX3Jlc3VtZSAoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QJCSpvaGNpID0gaGNkX3RvX29oY2kgKGhjZCk7CisJaW50CQkJcmM7CisKKwlpZiAodGltZV9iZWZvcmUgKGppZmZpZXMsIG9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpKQorCQltc2xlZXAoNSk7CisKKwlzcGluX2xvY2tfaXJxICgmb2hjaS0+bG9jayk7CisKKwlpZiAodW5saWtlbHkoIXRlc3RfYml0KEhDRF9GTEFHX0hXX0FDQ0VTU0lCTEUsICZoY2QtPmZsYWdzKSkpCisJCXJjID0gLUVTSFVURE9XTjsKKwllbHNlCisJCXJjID0gb2hjaV9yaF9yZXN1bWUgKG9oY2kpOworCXNwaW5fdW5sb2NrX2lycSAoJm9oY2ktPmxvY2spOworCisJLyogcG9sbCB1bnRpbCB3ZSBrbm93IGEgZGV2aWNlIGlzIGNvbm5lY3RlZCBvciB3ZSBhdXRvc3RvcCAqLworCWlmIChyYyA9PSAwKQorCQl1c2JfaGNkX3BvbGxfcmhfc3RhdHVzKGhjZCk7CisJcmV0dXJuIHJjOworfQorCiAjZW5kaWYJLyogQ09ORklHX1BNICovCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkBAIC0zMDIsMjAgKzM0NSwxMSBAQAogewogCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwogCWludAkJaSwgY2hhbmdlZCA9IDAsIGxlbmd0aCA9IDE7Ci0JaW50CQljYW5fc3VzcGVuZCA9IGRldmljZV9tYXlfd2FrZXVwKCZoY2QtPnNlbGYucm9vdF9odWItPmRldik7CisJaW50CQlhbnlfY29ubmVjdGVkID0gMCwgcmhzY19lbmFibGVkID0gMTsKIAl1bnNpZ25lZCBsb25nCWZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLQkvKiBoYW5kbGUgYXV0b3N1c3BlbmRlZCByb290OiAgZmluaXNoIHJlc3VtaW5nIGJlZm9yZQotCSAqIGxldHRpbmcga2h1YmQgb3Igcm9vdCBodWIgdGltZXIgc2VlIHN0YXRlIGNoYW5nZXMuCi0JICovCi0JaWYgKHVubGlrZWx5KChvaGNpLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpICE9IE9IQ0lfVVNCX09QRVIKLQkJICAgICB8fCAhSENfSVNfUlVOTklORyhoY2QtPnN0YXRlKSkpIHsKLQkJY2FuX3N1c3BlbmQgPSAwOwotCQlnb3RvIGRvbmU7Ci0JfQotCiAJLyogdW5kb2N1bWVudGVkIGVycmF0dW0gc2VlbiBvbiBhdCBsZWFzdCByZXYgRCAqLwogCWlmICgob2hjaS0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRDc1NikKIAkJCSYmIChyb290aHViX2EgKG9oY2kpICYgUkhfQV9ORFApID4gTUFYX1JPT1RfUE9SVFMpIHsKQEAgLTMzOSw2ICszNzMsOSBAQAogCWZvciAoaSA9IDA7IGkgPCBvaGNpLT5udW1fcG9ydHM7IGkrKykgewogCQl1MzIJc3RhdHVzID0gcm9vdGh1Yl9wb3J0c3RhdHVzIChvaGNpLCBpKTsKIAorCQkvKiBjYW4ndCBhdXRvc3RvcCBpZiBwb3J0cyBhcmUgY29ubmVjdGVkICovCisJCWFueV9jb25uZWN0ZWQgfD0gKHN0YXR1cyAmIFJIX1BTX0NDUyk7CisKIAkJaWYgKHN0YXR1cyAmIChSSF9QU19DU0MgfCBSSF9QU19QRVNDIHwgUkhfUFNfUFNTQwogCQkJCXwgUkhfUFNfT0NJQyB8IFJIX1BTX1BSU0MpKSB7CiAJCQljaGFuZ2VkID0gMTsKQEAgLTM0Niw0MCArMzgzLDczIEBACiAJCQkgICAgYnVmIFswXSB8PSAxIDw8IChpICsgMSk7CiAJCQllbHNlCiAJCQkgICAgYnVmIFsxXSB8PSAxIDw8IChpIC0gNyk7Ci0JCQljb250aW51ZTsKIAkJfQotCi0JCS8qIGNhbiBzdXNwZW5kIGlmIG5vIHBvcnRzIGFyZSBlbmFibGVkOyBvciBpZiBhbGwgYWxsCi0JCSAqIGVuYWJsZWQgcG9ydHMgYXJlIHN1c3BlbmRlZCBBTkQgcmVtb3RlIHdha2V1cCBpcyBvbi4KLQkJICovCi0JCWlmICghKHN0YXR1cyAmIFJIX1BTX0NDUykpCi0JCQljb250aW51ZTsKLQkJaWYgKChzdGF0dXMgJiBSSF9QU19QU1MpICYmIGNhbl9zdXNwZW5kKQotCQkJY29udGludWU7Ci0JCWNhbl9zdXNwZW5kID0gMDsKIAl9CisKKwkvKiBOT1RFOiAgdmVuZG9ycyBkaWRuJ3QgYWx3YXlzIG1ha2UgdGhlIHNhbWUgaW1wbGVtZW50YXRpb24KKwkgKiBjaG9pY2VzIGZvciBSSFNDLiAgU29tZXRpbWVzIGl0IHRyaWdnZXJzIG9uIGFuIGVkZ2UgKGxpa2UKKwkgKiBzZXR0aW5nIGFuZCBtYXliZSBjbGVhcmluZyBhIHBvcnQgc3RhdHVzIGNoYW5nZSBiaXQpOyBhbmQKKwkgKiBpdCdzIGxldmVsLXRyaWdnZXJlZCBvbiBvdGhlciBzaWxpY29uLCBhY3RpdmUgdW50aWwga2h1YmQKKwkgKiBjbGVhcnMgYWxsIGFjdGl2ZSBwb3J0IHN0YXR1cyBjaGFuZ2UgYml0cy4gIElmIGl0J3Mgc3RpbGwKKwkgKiBzZXQgKGxldmVsLXRyaWdnZXJlZCkgd2UgbXVzdCBkaXNhYmxlIGl0IGFuZCByZWx5IG9uCisJICogcG9sbGluZyB1bnRpbCBraHViZCByZS1lbmFibGVzIGl0LgorCSAqLworCWlmIChvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+aW50cnN0YXR1cykgJiBPSENJX0lOVFJfUkhTQykgeworCQlvaGNpX3dyaXRlbCAob2hjaSwgT0hDSV9JTlRSX1JIU0MsICZvaGNpLT5yZWdzLT5pbnRyZGlzYWJsZSk7CisJCSh2b2lkKSBvaGNpX3JlYWRsIChvaGNpLCAmb2hjaS0+cmVncy0+aW50cmRpc2FibGUpOworCQlyaHNjX2VuYWJsZWQgPSAwOworCX0KKwloY2QtPnBvbGxfcmggPSAxOworCisJLyogY2Fycnkgb3V0IGFwcHJvcHJpYXRlIHN0YXRlIGNoYW5nZXMgKi8KKwlzd2l0Y2ggKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykgeworCisJY2FzZSBPSENJX1VTQl9PUEVSOgorCQkvKiBrZWVwIG9uIHBvbGxpbmcgdW50aWwgd2Uga25vdyBhIGRldmljZSBpcyBjb25uZWN0ZWQKKwkJICogYW5kIFJIU0MgaXMgZW5hYmxlZCAqLworCQlpZiAoIW9oY2ktPmF1dG9zdG9wKSB7CisJCQlpZiAoYW55X2Nvbm5lY3RlZCkgeworCQkJCWlmIChyaHNjX2VuYWJsZWQpCisJCQkJCWhjZC0+cG9sbF9yaCA9IDA7CisJCQl9IGVsc2UgeworCQkJCW9oY2ktPmF1dG9zdG9wID0gMTsKKwkJCQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArIEhaOworCQkJfQorCisJCS8qIGlmIG5vIGRldmljZXMgaGF2ZSBiZWVuIGF0dGFjaGVkIGZvciBvbmUgc2Vjb25kLCBhdXRvc3RvcCAqLworCQl9IGVsc2UgeworCQkJaWYgKGNoYW5nZWQgfHwgYW55X2Nvbm5lY3RlZCkgeworCQkJCW9oY2ktPmF1dG9zdG9wID0gMDsKKwkJCQlvaGNpLT5uZXh0X3N0YXRlY2hhbmdlID0gamlmZmllcyArCisJCQkJCQlTVEFURUNIQU5HRV9ERUxBWTsKKwkJCX0gZWxzZSBpZiAodGltZV9hZnRlcl9lcSAoamlmZmllcywKKwkJCQkJCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UpCisJCQkJCSYmICFvaGNpLT5lZF9ybV9saXN0CisJCQkJCSYmICEob2hjaS0+aGNfY29udHJvbCAmCisJCQkJCQlPSENJX1NDSEVEX0VOQUJMRVMpKSB7CisJCQkJb2hjaV9yaF9zdXNwZW5kIChvaGNpLCAxKTsKKwkJCX0KKwkJfQorCQlicmVhazsKKworCS8qIGlmIHRoZXJlIGlzIGEgcG9ydCBjaGFuZ2UsIGF1dG9zdGFydCBvciBhc2sgdG8gYmUgcmVzdW1lZCAqLworCWNhc2UgT0hDSV9VU0JfU1VTUEVORDoKKwljYXNlIE9IQ0lfVVNCX1JFU1VNRToKKwkJaWYgKGNoYW5nZWQpIHsKKwkJCWlmIChvaGNpLT5hdXRvc3RvcCkKKwkJCQlvaGNpX3JoX3Jlc3VtZSAob2hjaSk7CisJCQllbHNlCisJCQkJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIgKGhjZCk7CisJCX0gZWxzZSB7CisJCQkvKiBldmVyeXRoaW5nIGlzIGlkbGUsIG5vIG5lZWQgZm9yIHBvbGxpbmcgKi8KKwkJCWhjZC0+cG9sbF9yaCA9IDA7CisJCX0KKwkJYnJlYWs7CisJfQorCiBkb25lOgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZvaGNpLT5sb2NrLCBmbGFncyk7CiAKLSNpZmRlZiBDT05GSUdfUE0KLQkvKiBzYXZlIHBvd2VyIGJ5IHN1c3BlbmRpbmcgaWRsZSByb290IGh1YnM7Ci0JICogSU5UUl9SRCB3YWtlcyB1cyB3aGVuIHRoZXJlJ3Mgd29yawotCSAqLwotCWlmIChjYW5fc3VzcGVuZAotCQkJJiYgIWNoYW5nZWQKLQkJCSYmICFvaGNpLT5lZF9ybV9saXN0Ci0JCQkmJiAoKE9IQ0lfQ1RSTF9IQ0ZTIHwgT0hDSV9TQ0hFRF9FTkFCTEVTKQotCQkJCQkmIG9oY2ktPmhjX2NvbnRyb2wpCi0JCQkJPT0gT0hDSV9VU0JfT1BFUgotCQkJJiYgdGltZV9hZnRlciAoamlmZmllcywgb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSkKLQkJCSYmIHVzYl90cnlsb2NrX2RldmljZSAoaGNkLT5zZWxmLnJvb3RfaHViKSA9PSAwCi0JCQkpIHsKLQkJb2hjaV92ZGJnIChvaGNpLCAiYXV0b3N1c3BlbmRcbiIpOwotCQkodm9pZCkgb2hjaV9idXNfc3VzcGVuZCAoaGNkKTsKLQkJdXNiX3VubG9ja19kZXZpY2UgKGhjZC0+c2VsZi5yb290X2h1Yik7Ci0JfQotI2VuZGlmCi0KIAlyZXR1cm4gY2hhbmdlZCA/IGxlbmd0aCA6IDA7CiB9CiAKQEAgLTU1MCw5ICs2MjAsNiBAQAogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgogCQkJdGVtcCA9IFJIX1BTX1BPQ0k7Ci0JCQlpZiAoKG9oY2ktPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUykKLQkJCQkJIT0gT0hDSV9VU0JfT1BFUikKLQkJCQl1c2JfaGNkX3Jlc3VtZV9yb290X2h1YihoY2QpOwogCQkJYnJlYWs7CiAJCWNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CiAJCQl0ZW1wID0gUkhfUFNfUFNTQzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbGg3YTQwNC5jCmluZGV4IDU2MDJkYTkuLmUxMjFkOTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1saDdhNDA0LmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLWxoN2E0MDQuYwpAQCAtMTczLDExICsxNzMsOCBAQAogCSAqIGJhc2ljIGxpZmVjeWNsZSBvcGVyYXRpb25zCiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfbGg3YTQwNF9zdGFydCwKLSNpZmRlZglDT05GSUdfUE0KLQkvKiBzdXNwZW5kOgkJb2hjaV9saDdhNDA0X3N1c3BlbmQsICAtLSB0YmQgKi8KLQkvKiByZXN1bWU6CQlvaGNpX2xoN2E0MDRfcmVzdW1lLCAgIC0tIHRiZCAqLwotI2VuZGlmIC8qQ09ORklHX1BNKi8KIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTE5Niw2ICsxOTMsNyBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKwkuaHViX2lycV9lbmFibGUgPQlvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmCUNPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKQEAgLTI0NCw2ICsyNDIsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfbGg3YTQwNF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfbGg3YTQwNF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9saDdhNDA0X2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX2xoN2E0MDRfZHJ2X3Jlc3VtZSwgKi8KIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1tZW0uYwppbmRleCBiZmJlMzI4Li5kOTc2NjE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktbWVtLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW1lbS5jCkBAIC0yOCw3ICsyOCw2IEBACiAJb2hjaS0+bmV4dF9zdGF0ZWNoYW5nZSA9IGppZmZpZXM7CiAJc3Bpbl9sb2NrX2luaXQgKCZvaGNpLT5sb2NrKTsKIAlJTklUX0xJU1RfSEVBRCAoJm9oY2ktPnBlbmRpbmcpOwotCW9oY2ktPnJlYm9vdF9ub3RpZmllci5ub3RpZmllcl9jYWxsID0gb2hjaV9yZWJvb3Q7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLW9tYXAuYwppbmRleCBjNGM0YmFiLi45YzAyMTc3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktb21hcC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1vbWFwLmMKQEAgLTQsNyArNCw3IEBACiAgKiAoQykgQ29weXJpZ2h0IDE5OTkgUm9tYW4gV2Vpc3NnYWVyYmVyIDx3ZWlzc2dAdmllbm5hLmF0PgogICogKEMpIENvcHlyaWdodCAyMDAwLTIwMDUgRGF2aWQgQnJvd25lbGwKICAqIChDKSBDb3B5cmlnaHQgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQotICogCisgKgogICogT01BUCBCdXMgR2x1ZQogICoKICAqIE1vZGlmaWVkIGZvciBPTUFQIGJ5IFRvbnkgTGluZGdyZW4gPHRvbnlAYXRvbWlkZS5jb20+CkBAIC02NiwxNSArNjYsMjAgQEAKIGV4dGVybiBpbnQgb2NwaV9lbmFibGUodm9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY2xrICp1c2JfaG9zdF9jazsKK3N0YXRpYyBzdHJ1Y3QgY2xrICp1c2JfZGNfY2s7CitzdGF0aWMgaW50IGhvc3RfZW5hYmxlZDsKK3N0YXRpYyBpbnQgaG9zdF9pbml0aWFsaXplZDsKIAogc3RhdGljIHZvaWQgb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKGludCBvbikKIHsKIAlpZiAob24pIHsKKwkJY2xrX2VuYWJsZSh1c2JfZGNfY2spOwogCQljbGtfZW5hYmxlKHVzYl9ob3N0X2NrKTsKIAkJLyogZ3Vlc3N0aW1hdGUgZm9yIFQ1ID09IDF4IDMySyBjbG9jayArIEFQTEwgbG9jayB0aW1lICovCiAJCXVkZWxheSgxMDApOwogCX0gZWxzZSB7CiAJCWNsa19kaXNhYmxlKHVzYl9ob3N0X2NrKTsKKwkJY2xrX2Rpc2FibGUodXNiX2RjX2NrKTsKIAl9CiB9CiAKQEAgLTg3LDE0ICs5MiwxNCBAQAogCWlmIChvbikgewogCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpICYmIGNwdV9pc19vbWFwMTUxMCgpKQogCQkJZnBnYV93cml0ZShmcGdhX3JlYWQoSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKQotCQkJCXwgKCgxIDw8IDUvKnVzYjEqLykgfCAoMSA8PCAzLyp1c2IyKi8pKSwgCisJCQkJfCAoKDEgPDwgNS8qdXNiMSovKSB8ICgxIDw8IDMvKnVzYjIqLykpLAogCQkJICAgICAgIElOTk9WQVRPUl9GUEdBX0NBTV9VU0JfQ09OVFJPTCk7CiAJCWVsc2UgaWYgKG1hY2hpbmVfaXNfb21hcF9vc2soKSkKIAkJCXRwczY1MDEwX3NldF9ncGlvX291dF92YWx1ZShHUElPMSwgTE9XKTsKIAl9IGVsc2UgewogCQlpZiAobWFjaGluZV9pc19vbWFwX2lubm92YXRvcigpICYmIGNwdV9pc19vbWFwMTUxMCgpKQogCQkJZnBnYV93cml0ZShmcGdhX3JlYWQoSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKQotCQkJCSYgfigoMSA8PCA1Lyp1c2IxKi8pIHwgKDEgPDwgMy8qdXNiMiovKSksIAorCQkJCSYgfigoMSA8PCA1Lyp1c2IxKi8pIHwgKDEgPDwgMy8qdXNiMiovKSksCiAJCQkgICAgICAgSU5OT1ZBVE9SX0ZQR0FfQ0FNX1VTQl9DT05UUk9MKTsKIAkJZWxzZSBpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQkJdHBzNjUwMTBfc2V0X2dwaW9fb3V0X3ZhbHVlKEdQSU8xLCBISUdIKTsKQEAgLTEwMyw2ICsxMDgsNyBAQAogCXJldHVybiAwOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfT01BUDE1WFgKIC8qCiAgKiBPTUFQLTE1MTAgc3BlY2lmaWMgTG9jYWwgQnVzIGNsb2NrIG9uL29mZgogICovCkBAIC0xMjEsOCArMTI3LDggQEAKIC8qCiAgKiBPTUFQLTE1MTAgc3BlY2lmaWMgTG9jYWwgQnVzIGluaXRpYWxpemF0aW9uCiAgKiBOT1RFOiBUaGlzIGFzc3VtZXMgMzJNQiBtZW1vcnkgc2l6ZSBpbiBPTUFQMTUxMExCX01FTVNJWkUuCi0gKiAgICAgICBTZWUgYWxzbyBhcmNoL21hY2gtb21hcC9tZW1vcnkuaCBmb3IgX192aXJ0X3RvX2RtYSgpIGFuZCAKLSAqICAgICAgIF9fZG1hX3RvX3ZpcnQoKSB3aGljaCBuZWVkIHRvIG1hdGNoIHdpdGggdGhlIHBoeXNpY2FsIAorICogICAgICAgU2VlIGFsc28gYXJjaC9tYWNoLW9tYXAvbWVtb3J5LmggZm9yIF9fdmlydF90b19kbWEoKSBhbmQKKyAqICAgICAgIF9fZG1hX3RvX3ZpcnQoKSB3aGljaCBuZWVkIHRvIG1hdGNoIHdpdGggdGhlIHBoeXNpY2FsCiAgKiAgICAgICBMb2NhbCBCdXMgYWRkcmVzcyBiZWxvdy4KICAqLwogc3RhdGljIGludCBvbWFwXzE1MTBfbG9jYWxfYnVzX2luaXQodm9pZCkKQEAgLTEzMCw3ICsxMzYsNyBAQAogCXVuc2lnbmVkIGludCB0bGI7CiAJdW5zaWduZWQgbG9uZyBsYmFkZHIsIHBoeXNhZGRyOwogCi0Jb21hcF93cml0ZWwoKG9tYXBfcmVhZGwoT01BUDE1MTBfTEJfQ0xPQ0tfRElWKSAmIDB4ZmZmZmZmZjgpIHwgMHg0LCAKKwlvbWFwX3dyaXRlbCgob21hcF9yZWFkbChPTUFQMTUxMF9MQl9DTE9DS19ESVYpICYgMHhmZmZmZmZmOCkgfCAweDQsCiAJICAgICAgIE9NQVAxNTEwX0xCX0NMT0NLX0RJVik7CiAKIAkvKiBDb25maWd1cmUgdGhlIExvY2FsIEJ1cyBNTVUgdGFibGUgKi8KQEAgLTEzOCw3ICsxNDQsNyBAQAogCQlsYmFkZHIgPSB0bGIgKiAweDAwMTAwMDAwICsgT01BUDE1MTBfTEJfT0ZGU0VUOwogCQlwaHlzYWRkciA9IHRsYiAqIDB4MDAxMDAwMDAgKyBQSFlTX09GRlNFVDsKIAkJb21hcF93cml0ZWwoKGxiYWRkciAmIDB4MGZmZmZmZmYpID4+IDIyLCBPTUFQMTUxMF9MQl9NTVVfQ0FNX0gpOwotCQlvbWFwX3dyaXRlbCgoKGxiYWRkciAmIDB4MDAzZmZjMDApID4+IDYpIHwgMHhjLCAKKwkJb21hcF93cml0ZWwoKChsYmFkZHIgJiAweDAwM2ZmYzAwKSA+PiA2KSB8IDB4YywKIAkJICAgICAgIE9NQVAxNTEwX0xCX01NVV9DQU1fTCk7CiAJCW9tYXBfd3JpdGVsKHBoeXNhZGRyID4+IDE2LCBPTUFQMTUxMF9MQl9NTVVfUkFNX0gpOwogCQlvbWFwX3dyaXRlbCgocGh5c2FkZHIgJiAweDAwMDBmYzAwKSB8IDB4MzAwLCBPTUFQMTUxMF9MQl9NTVVfUkFNX0wpOwpAQCAtMTUyLDYgKzE1OCwxMCBAQAogCiAJcmV0dXJuIDA7CiB9CisjZWxzZQorI2RlZmluZSBvbWFwXzE1MTBfbG9jYWxfYnVzX3Bvd2VyKHgpCXt9CisjZGVmaW5lIG9tYXBfMTUxMF9sb2NhbF9idXNfaW5pdCgpCXt9CisjZW5kaWYKIAogI2lmZGVmCUNPTkZJR19VU0JfT1RHCiAKQEAgLTE3MywxMyArMTgzLDE0IEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgb21hcF9zdGFydF9oYyhzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2ksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCitzdGF0aWMgaW50IG9oY2lfb21hcF9pbml0KHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7Ci0Jc3RydWN0IG9tYXBfdXNiX2NvbmZpZwkqY29uZmlnID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJc3RydWN0IG9oY2lfaGNkCQkqb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJc3RydWN0IG9tYXBfdXNiX2NvbmZpZwkqY29uZmlnID0gaGNkLT5zZWxmLmNvbnRyb2xsZXItPnBsYXRmb3JtX2RhdGE7CiAJaW50CQkJbmVlZF90cmFuc2NlaXZlciA9IChjb25maWctPm90ZyAhPSAwKTsKIAlpbnQJCQlyZXQ7CiAKLQlkZXZfZGJnKCZwZGV2LT5kZXYsICJzdGFydGluZyBVU0IgQ29udHJvbGxlclxuIik7CisJZGV2X2RiZyhoY2QtPnNlbGYuY29udHJvbGxlciwgInN0YXJ0aW5nIFVTQiBDb250cm9sbGVyXG4iKTsKIAogCWlmIChjb25maWctPm90ZykgewogCQlvaGNpX3RvX2hjZChvaGNpKS0+c2VsZi5vdGdfcG9ydCA9IGNvbmZpZy0+b3RnOwpAQCAtMjAwLDcgKzIxMSw3IEBACiAJCWlmIChvaGNpLT50cmFuc2NlaXZlcikgewogCQkJaW50CXN0YXR1cyA9IG90Z19zZXRfaG9zdChvaGNpLT50cmFuc2NlaXZlciwKIAkJCQkJCSZvaGNpX3RvX2hjZChvaGNpKS0+c2VsZik7Ci0JCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJpbml0ICVzIHRyYW5zY2VpdmVyLCBzdGF0dXMgJWRcbiIsCisJCQlkZXZfZGJnKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiaW5pdCAlcyB0cmFuc2NlaXZlciwgc3RhdHVzICVkXG4iLAogCQkJCQlvaGNpLT50cmFuc2NlaXZlci0+bGFiZWwsIHN0YXR1cyk7CiAJCQlpZiAoc3RhdHVzKSB7CiAJCQkJaWYgKG9oY2ktPnRyYW5zY2VpdmVyKQpAQCAtMjA4LDcgKzIxOSw3IEBACiAJCQkJcmV0dXJuIHN0YXR1czsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWRldl9lcnIoJnBkZXYtPmRldiwgImNhbid0IGZpbmQgdHJhbnNjZWl2ZXJcbiIpOworCQkJZGV2X2VycihoY2QtPnNlbGYuY29udHJvbGxlciwgImNhbid0IGZpbmQgdHJhbnNjZWl2ZXJcbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CiAJCX0KIAl9CkBAIC0yNDcsNiArMjU4LDEwIEBACiAJCX0KIAkJb2hjaV93cml0ZWwob2hjaSwgcmgsICZvaGNpLT5yZWdzLT5yb290aHViLmEpOwogCQlkaXN0cnVzdF9maXJtd2FyZSA9IDA7CisJfSBlbHNlIGlmIChtYWNoaW5lX2lzX25va2lhNzcwKCkpIHsKKwkJLyogV2UgcmVxdWlyZSBhIHNlbGYtcG93ZXJlZCBodWIsIHdoaWNoIHNob3VsZCBoYXZlCisJCSAqIHBsZW50eSBvZiBwb3dlci4gKi8KKwkJb2hjaV90b19oY2Qob2hjaSktPnBvd2VyX2J1ZGdldCA9IDA7CiAJfQogCiAJLyogRklYTUUga2h1YmQgaHViIHJlcXVlc3RzIHNob3VsZCBtYW5hZ2UgcG93ZXIgc3dpdGNoaW5nICovCkBAIC0yNjAsMjEgKzI3NSwxNSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBvbWFwX3N0b3BfaGMoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3N0YXRpYyB2b2lkIG9oY2lfb21hcF9zdG9wKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7Ci0JZGV2X2RiZygmcGRldi0+ZGV2LCAic3RvcHBpbmcgVVNCIENvbnRyb2xsZXJcbiIpOworCWRldl9kYmcoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJzdG9wcGluZyBVU0IgQ29udHJvbGxlclxuIik7CiAJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDApOwogfQogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXZvaWQgdXNiX2hjZF9vbWFwX3JlbW92ZSAoc3RydWN0IHVzYl9oY2QgKiwgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKLQotLyogY29uZmlndXJlIHNvIGFuIEhDIGRldmljZSBhbmQgaWQgYXJlIGFsd2F5cyBwcm92aWRlZCAqLwotLyogYWx3YXlzIGNhbGxlZCB3aXRoIHByb2Nlc3MgY29udGV4dDsgc2xlZXBpbmcgaXMgT0sgKi8KLQotCiAvKioKICAqIHVzYl9oY2Rfb21hcF9wcm9iZSAtIGluaXRpYWxpemUgT01BUC1iYXNlZCBIQ0RzCiAgKiBDb250ZXh0OiAhaW5faW50ZXJydXB0KCkKQEAgLTI4Myw3ICsyOTIsNyBAQAogICogdGhlbiBpbnZva2VzIHRoZSBzdGFydCgpIG1ldGhvZCBmb3IgdGhlIEhDRCBhc3NvY2lhdGVkIHdpdGggaXQKICAqIHRocm91Z2ggdGhlIGhvdHBsdWcgZW50cnkncyBkcml2ZXJfZGF0YS4KICAqLwotaW50IHVzYl9oY2Rfb21hcF9wcm9iZSAoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAorc3RhdGljIGludCB1c2JfaGNkX29tYXBfcHJvYmUgKGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciwKIAkJCSAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIHsKIAlpbnQgcmV0dmFsLCBpcnE7CkBAIC0yOTEsMTIgKzMwMCwxMiBAQAogCXN0cnVjdCBvaGNpX2hjZCAqb2hjaTsKIAogCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJoY2QgcHJvYmU6IGludmFsaWQgbnVtX3Jlc291cmNlczogJWlcbiIsIAorCQlwcmludGsoS0VSTl9FUlIgImhjZCBwcm9iZTogaW52YWxpZCBudW1fcmVzb3VyY2VzOiAlaVxuIiwKIAkJICAgICAgIHBkZXYtPm51bV9yZXNvdXJjZXMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAocGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0gCisJaWYgKHBkZXYtPnJlc291cmNlWzBdLmZsYWdzICE9IElPUkVTT1VSQ0VfTUVNCiAJCQl8fCBwZGV2LT5yZXNvdXJjZVsxXS5mbGFncyAhPSBJT1JFU09VUkNFX0lSUSkgewogCQlwcmludGsoS0VSTl9FUlIgImhjZCBwcm9iZTogaW52YWxpZCByZXNvdXJjZSB0eXBlXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CkBAIC0zMDYsNiArMzE1LDE3IEBACiAJaWYgKElTX0VSUih1c2JfaG9zdF9jaykpCiAJCXJldHVybiBQVFJfRVJSKHVzYl9ob3N0X2NrKTsKIAorCWlmICghY3B1X2lzX29tYXAxNTEwKCkpCisJCXVzYl9kY19jayA9IGNsa19nZXQoMCwgInVzYl9kY19jayIpOworCWVsc2UKKwkJdXNiX2RjX2NrID0gY2xrX2dldCgwLCAibGJfY2siKTsKKworCWlmIChJU19FUlIodXNiX2RjX2NrKSkgeworCQljbGtfcHV0KHVzYl9ob3N0X2NrKTsKKwkJcmV0dXJuIFBUUl9FUlIodXNiX2RjX2NrKTsKKwl9CisKKwogCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOwogCWlmICghaGNkKSB7CiAJCXJldHZhbCA9IC1FTk9NRU07CkBAIC0zMjUsOSArMzQ1LDggQEAKIAlvaGNpID0gaGNkX3RvX29oY2koaGNkKTsKIAlvaGNpX2hjZF9pbml0KG9oY2kpOwogCi0JcmV0dmFsID0gb21hcF9zdGFydF9oYyhvaGNpLCBwZGV2KTsKLQlpZiAocmV0dmFsIDwgMCkKLQkJZ290byBlcnIyOworCWhvc3RfaW5pdGlhbGl6ZWQgPSAwOworCWhvc3RfZW5hYmxlZCA9IDE7CiAKIAlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOwogCWlmIChpcnEgPCAwKSB7CkBAIC0zMzUsMTUgKzM1NCwyMSBAQAogCQlnb3RvIGVycjI7CiAJfQogCXJldHZhbCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBJUlFGX0RJU0FCTEVEKTsKLQlpZiAocmV0dmFsID09IDApCi0JCXJldHVybiByZXR2YWw7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnIyOwogCi0Jb21hcF9zdG9wX2hjKHBkZXYpOworCWhvc3RfaW5pdGlhbGl6ZWQgPSAxOworCisJaWYgKCFob3N0X2VuYWJsZWQpCisJCW9tYXBfb2hjaV9jbG9ja19wb3dlcigwKTsKKworCXJldHVybiAwOwogZXJyMjoKIAlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKIGVycjE6CiAJdXNiX3B1dF9oY2QoaGNkKTsKIGVycjA6CisJY2xrX3B1dCh1c2JfZGNfY2spOwogCWNsa19wdXQodXNiX2hvc3RfY2spOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC0zNTksMzEgKzM4NCw0MSBAQAogICogUmV2ZXJzZXMgdGhlIGVmZmVjdCBvZiB1c2JfaGNkX29tYXBfcHJvYmUoKSwgZmlyc3QgaW52b2tpbmcKICAqIHRoZSBIQ0QncyBzdG9wKCkgbWV0aG9kLiAgSXQgaXMgYWx3YXlzIGNhbGxlZCBmcm9tIGEgdGhyZWFkCiAgKiBjb250ZXh0LCBub3JtYWxseSAicm1tb2QiLCAiYXBtZCIsIG9yIHNvbWV0aGluZyBzaW1pbGFyLgotICoKICAqLwotdm9pZCB1c2JfaGNkX29tYXBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQorc3RhdGljIGlubGluZSB2b2lkCit1c2JfaGNkX29tYXBfcmVtb3ZlIChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogeworCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKKwogCXVzYl9yZW1vdmVfaGNkKGhjZCk7CisJaWYgKG9oY2ktPnRyYW5zY2VpdmVyKSB7CisJCSh2b2lkKSBvdGdfc2V0X2hvc3Qob2hjaS0+dHJhbnNjZWl2ZXIsIDApOworCQlwdXRfZGV2aWNlKG9oY2ktPnRyYW5zY2VpdmVyLT5kZXYpOworCX0KIAlpZiAobWFjaGluZV9pc19vbWFwX29zaygpKQogCQlvbWFwX2ZyZWVfZ3Bpbyg5KTsKLQlvbWFwX3N0b3BfaGMocGRldik7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKGhjZC0+cnNyY19zdGFydCwgaGNkLT5yc3JjX2xlbik7CiAJdXNiX3B1dF9oY2QoaGNkKTsKKwljbGtfcHV0KHVzYl9kY19jayk7CiAJY2xrX3B1dCh1c2JfaG9zdF9jayk7CiB9CiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKLXN0YXRpYyBpbnQgX19kZXZpbml0CitzdGF0aWMgaW50CiBvaGNpX29tYXBfc3RhcnQgKHN0cnVjdCB1c2JfaGNkICpoY2QpCiB7CiAJc3RydWN0IG9tYXBfdXNiX2NvbmZpZyAqY29uZmlnOwogCXN0cnVjdCBvaGNpX2hjZAkqb2hjaSA9IGhjZF90b19vaGNpIChoY2QpOwogCWludAkJcmV0OwogCisJaWYgKCFob3N0X2VuYWJsZWQpCisJCXJldHVybiAwOwogCWNvbmZpZyA9IGhjZC0+c2VsZi5jb250cm9sbGVyLT5wbGF0Zm9ybV9kYXRhOwotCWlmIChjb25maWctPm90ZyB8fCBjb25maWctPnJ3YykKKwlpZiAoY29uZmlnLT5vdGcgfHwgY29uZmlnLT5yd2MpIHsKKwkJb2hjaS0+aGNfY29udHJvbCA9IE9IQ0lfQ1RSTF9SV0M7CiAJCXdyaXRlbChPSENJX0NUUkxfUldDLCAmb2hjaS0+cmVncy0+Y29udHJvbCk7CisJfQogCiAJaWYgKChyZXQgPSBvaGNpX3J1biAob2hjaSkpIDwgMCkgewogCQlkZXZfZXJyKGhjZC0+c2VsZi5jb250cm9sbGVyLCAiY2FuJ3Qgc3RhcnRcbiIpOwpAQCAtNDA5LDggKzQ0NCwxMCBAQAogCS8qCiAJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKIAkgKi8KKwkucmVzZXQgPQkJb2hjaV9vbWFwX2luaXQsCiAJLnN0YXJ0ID0JCW9oY2lfb21hcF9zdGFydCwKLQkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zdG9wID0JCQlvaGNpX29tYXBfc3RvcCwKKwkuc2h1dGRvd24gPSAJCW9oY2lfc2h1dGRvd24sCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC00MjksNiArNDY2LDcgQEAKIAkgKi8KIAkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisJLmh1Yl9pcnFfZW5hYmxlID0Jb2hjaV9yaHNjX2VuYWJsZSwKICNpZmRlZglDT05GSUdfUE0KIAkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKIAkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCkBAIC00NDYsMTMgKzQ4NCw4IEBACiBzdGF0aWMgaW50IG9oY2lfaGNkX29tYXBfZHJ2X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IHVzYl9oY2QJCSpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBvaGNpX2hjZAkJKm9oY2kgPSBoY2RfdG9fb2hjaSAoaGNkKTsKIAogCXVzYl9oY2Rfb21hcF9yZW1vdmUoaGNkLCBkZXYpOwotCWlmIChvaGNpLT50cmFuc2NlaXZlcikgewotCQkodm9pZCkgb3RnX3NldF9ob3N0KG9oY2ktPnRyYW5zY2VpdmVyLCAwKTsKLQkJcHV0X2RldmljZShvaGNpLT50cmFuc2NlaXZlci0+ZGV2KTsKLQl9CiAJcGxhdGZvcm1fc2V0X2RydmRhdGEoZGV2LCBOVUxMKTsKIAogCXJldHVybiAwOwpAQCAtNDcyLDcgKzUwNSw3IEBACiAKIAlvbWFwX29oY2lfY2xvY2tfcG93ZXIoMCk7CiAJb2hjaV90b19oY2Qob2hjaSktPnN0YXRlID0gSENfU1RBVEVfU1VTUEVOREVEOwotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CisJZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NSw4ICs1MTgsOCBAQAogCW9oY2ktPm5leHRfc3RhdGVjaGFuZ2UgPSBqaWZmaWVzOwogCiAJb21hcF9vaGNpX2Nsb2NrX3Bvd2VyKDEpOwotCWRldi0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOwotCXVzYl9oY2RfcmVzdW1lX3Jvb3RfaHViKGRldl9nZXRfZHJ2ZGF0YShkZXYpKTsKKwlkZXYtPmRldi5wb3dlci5wb3dlcl9zdGF0ZSA9IFBNU0dfT047CisJdXNiX2hjZF9yZXN1bWVfcm9vdF9odWIocGxhdGZvcm1fZ2V0X2RydmRhdGEoZGV2KSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTUwMCw2ICs1MzMsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2Rfb21hcF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX29tYXBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2Rfb21hcF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmCUNPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9vbWFwX3N1c3BlbmQsCiAJLnJlc3VtZQkJPSBvaGNpX29tYXBfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBjaS5jCmluZGV4IDM3ZTEyMjguLjg3NDQxODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wY2kuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcGNpLmMKQEAgLTczLDEzICs3MywxNCBAQAogCQllbHNlIGlmIChwZGV2LT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OUykgewogCQkJc3RydWN0IHBjaV9kZXYJKmI7CiAKLQkJCWIgID0gcGNpX2ZpbmRfc2xvdCAocGRldi0+YnVzLT5udW1iZXIsCisJCQliICA9IHBjaV9nZXRfc2xvdCAocGRldi0+YnVzLAogCQkJCQlQQ0lfREVWRk4gKFBDSV9TTE9UIChwZGV2LT5kZXZmbiksIDEpKTsKIAkJCWlmIChiICYmIGItPmRldmljZSA9PSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTwogCQkJCQkmJiBiLT52ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9OUykgewogCQkJCW9oY2ktPmZsYWdzIHw9IE9IQ0lfUVVJUktfU1VQRVJJTzsKIAkJCQlvaGNpX2RiZyAob2hjaSwgIlVzaW5nIE5TQyBTdXBlcklPIHNldHVwXG4iKTsKIAkJCX0KKwkJCXBjaV9kZXZfcHV0KGIpOwogCQl9CiAKIAkJLyogQ2hlY2sgZm9yIENvbXBhcSdzIFpGTWljcm8gY2hpcHNldCwgd2hpY2ggbmVlZHMgc2hvcnQgCkBAIC0xNzYsMTEgKzE3NywxNCBAQAogCSAqLwogCS5yZXNldCA9CQlvaGNpX3BjaV9yZXNldCwKIAkuc3RhcnQgPQkJb2hjaV9wY2lfc3RhcnQsCisJLnN0b3AgPQkJCW9oY2lfc3RvcCwKKwkuc2h1dGRvd24gPQkJb2hjaV9zaHV0ZG93biwKKwogI2lmZGVmCUNPTkZJR19QTQorCS8qIHRoZXNlIHN1c3BlbmQvcmVzdW1lIGVudHJpZXMgYXJlIGZvciB1cHN0cmVhbSBQQ0kgZ2x1ZSBPTkxZICovCiAJLnN1c3BlbmQgPQkJb2hjaV9wY2lfc3VzcGVuZCwKIAkucmVzdW1lID0JCW9oY2lfcGNpX3Jlc3VtZSwKICNlbmRpZgotCS5zdG9wID0JCQlvaGNpX3N0b3AsCiAKIAkvKgogCSAqIG1hbmFnaW5nIGkvbyByZXF1ZXN0cyBhbmQgYXNzb2NpYXRlZCBkZXZpY2UgcmVzb3VyY2VzCkBAIC0xOTksNiArMjAzLDcgQEAKIAkgKi8KIAkuaHViX3N0YXR1c19kYXRhID0Jb2hjaV9odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCW9oY2lfaHViX2NvbnRyb2wsCisJLmh1Yl9pcnFfZW5hYmxlID0Jb2hjaV9yaHNjX2VuYWJsZSwKICNpZmRlZglDT05GSUdfUE0KIAkuYnVzX3N1c3BlbmQgPQkJb2hjaV9idXNfc3VzcGVuZCwKIAkuYnVzX3Jlc3VtZSA9CQlvaGNpX2J1c19yZXN1bWUsCkBAIC0yMjksNiArMjM0LDggQEAKIAkuc3VzcGVuZCA9CXVzYl9oY2RfcGNpX3N1c3BlbmQsCiAJLnJlc3VtZSA9CXVzYl9oY2RfcGNpX3Jlc3VtZSwKICNlbmRpZgorCisJLnNodXRkb3duID0JdXNiX2hjZF9wY2lfc2h1dGRvd24sCiB9OwogCiAgCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcG54NDAwOC5jIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmNiMjJmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBueDQwMDguYwpAQCAtMCwwICsxLDQ3NiBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wbng0MDA4LmMKKyAqCisgKiBkcml2ZXIgZm9yIFBoaWxpcHMgUE5YNDAwOCBVU0IgSG9zdAorICoKKyAqIEF1dGhvcnM6IERtaXRyeSBDaGlnaXJldiA8c291cmNlQG12aXN0YS5jb20+CisgKiAJICAgIFZpdGFseSBXb29sIDx2aXRhbHl3b29sQGdtYWlsLmNvbT4KKyAqCisgKiByZWdpc3RlciBpbml0aWFsaXphdGlvbiBpcyBiYXNlZCBvbiBjb2RlIGV4YW1wbGVzIHByb3ZpZGVkIGJ5IFBoaWxpcHMKKyAqIENvcHlyaWdodCAoYykgMjAwNSBLb25pbmtsaWprZSBQaGlsaXBzIEVsZWN0cm9uaWNzIE4uVi4KKyAqCisgKiBOT1RFOiBUaGlzIGRyaXZlciBkb2VzIG5vdCBoYXZlIHN1c3BlbmQvcmVzdW1lIGZ1bmN0aW9uYWxpdHkKKyAqIFRoaXMgZHJpdmVyIGlzIGludGVuZGVkIGZvciBlbmdpbmVlcmluZyBkZXZlbG9wbWVudCBwdXJwb3NlcyBvbmx5CisgKgorICogMjAwNS0yMDA2IChjKSBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlcgorICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbQorICogaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueSB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzCisgKiBvciBpbXBsaWVkLgorICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2FyY2gvcGxhdGZvcm0uaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9pcnFzLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvZ3Bpby5oPgorCisjZGVmaW5lIFVTQl9DVFJMIAlJT19BRERSRVNTKFBOWDQwMDhfUFdSTUFOX0JBU0UgKyAweDY0KQorCisvKiBVU0JfQ1RSTCBiaXQgZGVmaW5lcyAqLworI2RlZmluZSBVU0JfU0xBVkVfSENMS19FTgkoMSA8PCAyNCkKKyNkZWZpbmUgVVNCX0hPU1RfTkVFRF9DTEtfRU4JKDEgPDwgMjEpCisKKyNkZWZpbmUgVVNCX09UR19DTEtfQ1RSTAlJT19BRERSRVNTKFBOWDQwMDhfVVNCX0NPTkZJR19CQVNFICsgMHhGRjQpCisjZGVmaW5lIFVTQl9PVEdfQ0xLX1NUQVQJSU9fQUREUkVTUyhQTlg0MDA4X1VTQl9DT05GSUdfQkFTRSArIDB4RkY4KQorCisvKiBVU0JfT1RHX0NMS19DVFJMIGJpdCBkZWZpbmVzICovCisjZGVmaW5lIEFIQl9NX0NMT0NLX09OCQkoMSA8PCA0KQorI2RlZmluZSBPVEdfQ0xPQ0tfT04JCSgxIDw8IDMpCisjZGVmaW5lIEkyQ19DTE9DS19PTgkJKDEgPDwgMikKKyNkZWZpbmUgREVWX0NMT0NLX09OCQkoMSA8PCAxKQorI2RlZmluZSBIT1NUX0NMT0NLX09OCQkoMSA8PCAwKQorCisjZGVmaW5lIFVTQl9PVEdfU1RBVF9DT05UUk9MCUlPX0FERFJFU1MoUE5YNDAwOF9VU0JfQ09ORklHX0JBU0UgKyAweDExMCkKKworLyogVVNCX09UR19TVEFUX0NPTlRST0wgYml0IGRlZmluZXMgKi8KKyNkZWZpbmUgVFJBTlNQQVJFTlRfSTJDX0VOCSgxIDw8IDcpCisjZGVmaW5lIEhPU1RfRU4JCQkoMSA8PCAwKQorCisvKiBJU1AxMzAxIFVTQiB0cmFuc2NlaXZlciBJMkMgcmVnaXN0ZXJzICovCisjZGVmaW5lCUlTUDEzMDFfTU9ERV9DT05UUk9MXzEJCTB4MDQJLyogdTggcmVhZCwgc2V0LCArMSBjbGVhciAqLworCisjZGVmaW5lCU1DMV9TUEVFRF9SRUcJCSgxIDw8IDApCisjZGVmaW5lCU1DMV9TVVNQRU5EX1JFRwkJKDEgPDwgMSkKKyNkZWZpbmUJTUMxX0RBVF9TRTAJCSgxIDw8IDIpCisjZGVmaW5lCU1DMV9UUkFOU1BBUkVOVAkJKDEgPDwgMykKKyNkZWZpbmUJTUMxX0JESVNfQUNPTl9FTgkoMSA8PCA0KQorI2RlZmluZQlNQzFfT0VfSU5UX0VOCQkoMSA8PCA1KQorI2RlZmluZQlNQzFfVUFSVF9FTgkJKDEgPDwgNikKKyNkZWZpbmUJTUMxX01BU0sJCTB4N2YKKworI2RlZmluZQlJU1AxMzAxX01PREVfQ09OVFJPTF8yCQkweDEyCS8qIHU4IHJlYWQsIHNldCwgKzEgY2xlYXIgKi8KKworI2RlZmluZQlNQzJfR0xPQkFMX1BXUl9ETgkoMSA8PCAwKQorI2RlZmluZQlNQzJfU1BEX1NVU1BfQ1RSTAkoMSA8PCAxKQorI2RlZmluZQlNQzJfQklfREkJCSgxIDw8IDIpCisjZGVmaW5lCU1DMl9UUkFOU1BfQkRJUjAJKDEgPDwgMykKKyNkZWZpbmUJTUMyX1RSQU5TUF9CRElSMQkoMSA8PCA0KQorI2RlZmluZQlNQzJfQVVESU9fRU4JCSgxIDw8IDUpCisjZGVmaW5lCU1DMl9QU1dfRU4JCSgxIDw8IDYpCisjZGVmaW5lCU1DMl9FTjJWNwkJKDEgPDwgNykKKworI2RlZmluZQlJU1AxMzAxX09UR19DT05UUk9MXzEJCTB4MDYJLyogdTggcmVhZCwgc2V0LCArMSBjbGVhciAqLworIwlkZWZpbmUJT1RHMV9EUF9QVUxMVVAJCSgxIDw8IDApCisjCWRlZmluZQlPVEcxX0RNX1BVTExVUAkJKDEgPDwgMSkKKyMJZGVmaW5lCU9URzFfRFBfUFVMTERPV04JKDEgPDwgMikKKyMJZGVmaW5lCU9URzFfRE1fUFVMTERPV04JKDEgPDwgMykKKyMJZGVmaW5lCU9URzFfSURfUFVMTERPV04JKDEgPDwgNCkKKyMJZGVmaW5lCU9URzFfVkJVU19EUlYJCSgxIDw8IDUpCisjCWRlZmluZQlPVEcxX1ZCVVNfRElTQ0hSRwkoMSA8PCA2KQorIwlkZWZpbmUJT1RHMV9WQlVTX0NIUkcJCSgxIDw8IDcpCisjZGVmaW5lCUlTUDEzMDFfT1RHX1NUQVRVUwkJMHgxMAkvKiB1OCByZWFkb25seSAqLworIwlkZWZpbmUJT1RHX0JfU0VTU19FTkQJCSgxIDw8IDYpCisjCWRlZmluZQlPVEdfQl9TRVNTX1ZMRAkJKDEgPDwgNykKKworI2RlZmluZSBJU1AxMzAxX0kyQ19BRERSIDB4MkMKKworI2RlZmluZSBJU1AxMzAxX0kyQ19NT0RFX0NPTlRST0xfMSAweDQKKyNkZWZpbmUgSVNQMTMwMV9JMkNfTU9ERV9DT05UUk9MXzIgMHgxMgorI2RlZmluZSBJU1AxMzAxX0kyQ19PVEdfQ09OVFJPTF8xIDB4NgorI2RlZmluZSBJU1AxMzAxX0kyQ19PVEdfQ09OVFJPTF8yIDB4MTAKKyNkZWZpbmUgSVNQMTMwMV9JMkNfSU5URVJSVVBUX1NPVVJDRSAweDgKKyNkZWZpbmUgSVNQMTMwMV9JMkNfSU5URVJSVVBUX0xBVENIIDB4QQorI2RlZmluZSBJU1AxMzAxX0kyQ19JTlRFUlJVUFRfRkFMTElORyAweEMKKyNkZWZpbmUgSVNQMTMwMV9JMkNfSU5URVJSVVBUX1JJU0lORyAweEUKKyNkZWZpbmUgSVNQMTMwMV9JMkNfUkVHX0NMRUFSX0FERFIgMQorCitzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlcjsKK3N0cnVjdCBpMmNfY2xpZW50ICppc3AxMzAxX2kyY19jbGllbnQ7CisKK2V4dGVybiBpbnQgdXNiX2Rpc2FibGVkKHZvaWQpOworZXh0ZXJuIGludCBvY3BpX2VuYWJsZSh2b2lkKTsKKworc3RhdGljIHN0cnVjdCBjbGsgKnVzYl9jbGs7CisKK3N0YXRpYyBpbnQgaXNwMTMwMV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApOworc3RhdGljIGludCBpc3AxMzAxX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgaXNwMTMwMV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCisJCQkgICB2b2lkICphcmcpOworCitzdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0KKyAgICB7IElTUDEzMDFfSTJDX0FERFIsIElTUDEzMDFfSTJDX0FERFIgKyAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIHVuc2lnbmVkIHNob3J0IGR1bW15X2kyY19hZGRybGlzdFtdID0geyBJMkNfQ0xJRU5UX0VORCB9OworCitzdGF0aWMgc3RydWN0IGkyY19jbGllbnRfYWRkcmVzc19kYXRhIGFkZHJfZGF0YSA9IHsKKwkubm9ybWFsX2kyYyA9IG5vcm1hbF9pMmMsCisJLnByb2JlID0gZHVtbXlfaTJjX2FkZHJsaXN0LAorCS5pZ25vcmUgPSBkdW1teV9pMmNfYWRkcmxpc3QsCit9OworCitzdHJ1Y3QgaTJjX2RyaXZlciBpc3AxMzAxX2RyaXZlciA9IHsKKwkuaWQgPSBJMkNfRFJJVkVSSURfSTJDREVWLAkvKiBGYWtlIElkICovCisJLmNsYXNzID0gSTJDX0NMQVNTX0hXTU9OLAorCS5hdHRhY2hfYWRhcHRlciA9IGlzcDEzMDFfcHJvYmUsCisJLmRldGFjaF9jbGllbnQgPSBpc3AxMzAxX2RldGFjaCwKKwkuY29tbWFuZCA9IGlzcDEzMDFfY29tbWFuZAorfTsKKworc3RhdGljIGludCBpc3AxMzAxX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKKworCWMgPSAoc3RydWN0IGkyY19jbGllbnQgKilremFsbG9jKHNpemVvZigqYyksIFNMQUJfS0VSTkVMKTsKKworCWlmICghYykKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzdHJjcHkoYy0+bmFtZSwgImlzcDEzMDEiKTsKKwljLT5mbGFncyA9IDA7CisJYy0+YWRkciA9IGFkZHI7CisJYy0+YWRhcHRlciA9IGFkYXA7CisJYy0+ZHJpdmVyID0gJmlzcDEzMDFfZHJpdmVyOworCisJaXNwMTMwMV9pMmNfY2xpZW50ID0gYzsKKworCXJldHVybiBpMmNfYXR0YWNoX2NsaWVudChjKTsKK30KKworc3RhdGljIGludCBpc3AxMzAxX3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gaTJjX3Byb2JlKGFkYXAsICZhZGRyX2RhdGEsIGlzcDEzMDFfYXR0YWNoKTsKK30KKworc3RhdGljIGludCBpc3AxMzAxX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQoreworCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7CisJa2ZyZWUoaXNwMTMwMV9pMmNfY2xpZW50KTsKKwlyZXR1cm4gMDsKK30KKworLyogTm8gY29tbWFuZHMgZGVmaW5lZCAqLworc3RhdGljIGludCBpc3AxMzAxX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgIHZvaWQgKmFyZykKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgaTJjX3dyaXRlKHU4IGJ1ZiwgdTggc3ViYWRkcikKK3sKKwljaGFyIHRtcGJ1ZlsyXTsKKworCXRtcGJ1ZlswXSA9IHN1YmFkZHI7CS8qcmVnaXN0ZXIgbnVtYmVyICovCisJdG1wYnVmWzFdID0gYnVmOwkvKnJlZ2lzdGVyIGRhdGEgKi8KKwlpMmNfbWFzdGVyX3NlbmQoaXNwMTMwMV9pMmNfY2xpZW50LCAmdG1wYnVmWzBdLCAyKTsKK30KKworc3RhdGljIHZvaWQgaXNwMTMwMV9jb25maWd1cmUodm9pZCkKK3sKKwkvKiBQTlg0MDA4IG9ubHkgc3VwcG9ydHMgREFUX1NFMCBVU0IgbW9kZSAqLworCS8qIFBOWDQwMDggUjJBIHJlcXVpcmVzIHNldHRpbmcgdGhlIE1BWDYwMyB0byBvdXRwdXQgMy42ViAqLworCS8qIFBvd2VyIHVwIGV4dGVybmVsIGNoYXJnZS1wdW1wICovCisKKwlpMmNfd3JpdGUoTUMxX0RBVF9TRTAgfCBNQzFfU1BFRURfUkVHLCBJU1AxMzAxX0kyQ19NT0RFX0NPTlRST0xfMSk7CisJaTJjX3dyaXRlKH4oTUMxX0RBVF9TRTAgfCBNQzFfU1BFRURfUkVHKSwKKwkJICBJU1AxMzAxX0kyQ19NT0RFX0NPTlRST0xfMSB8IElTUDEzMDFfSTJDX1JFR19DTEVBUl9BRERSKTsKKwlpMmNfd3JpdGUoTUMyX0JJX0RJIHwgTUMyX1BTV19FTiB8IE1DMl9TUERfU1VTUF9DVFJMLAorCQkgIElTUDEzMDFfSTJDX01PREVfQ09OVFJPTF8yKTsKKwlpMmNfd3JpdGUofihNQzJfQklfREkgfCBNQzJfUFNXX0VOIHwgTUMyX1NQRF9TVVNQX0NUUkwpLAorCQkgIElTUDEzMDFfSTJDX01PREVfQ09OVFJPTF8yIHwgSVNQMTMwMV9JMkNfUkVHX0NMRUFSX0FERFIpOworCWkyY193cml0ZShPVEcxX0RNX1BVTExET1dOIHwgT1RHMV9EUF9QVUxMRE9XTiwKKwkJICBJU1AxMzAxX0kyQ19PVEdfQ09OVFJPTF8xKTsKKwlpMmNfd3JpdGUofihPVEcxX0RNX1BVTExET1dOIHwgT1RHMV9EUF9QVUxMRE9XTiksCisJCSAgSVNQMTMwMV9JMkNfT1RHX0NPTlRST0xfMSB8IElTUDEzMDFfSTJDX1JFR19DTEVBUl9BRERSKTsKKwlpMmNfd3JpdGUoMHhGRiwKKwkJICBJU1AxMzAxX0kyQ19JTlRFUlJVUFRfTEFUQ0ggfCBJU1AxMzAxX0kyQ19SRUdfQ0xFQVJfQUREUik7CisJaTJjX3dyaXRlKDB4RkYsCisJCSAgSVNQMTMwMV9JMkNfSU5URVJSVVBUX0ZBTExJTkcgfCBJU1AxMzAxX0kyQ19SRUdfQ0xFQVJfQUREUik7CisJaTJjX3dyaXRlKDB4RkYsCisJCSAgSVNQMTMwMV9JMkNfSU5URVJSVVBUX1JJU0lORyB8IElTUDEzMDFfSTJDX1JFR19DTEVBUl9BRERSKTsKKworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXNwMTMwMV92YnVzX29uKHZvaWQpCit7CisJaTJjX3dyaXRlKE9URzFfVkJVU19EUlYsIElTUDEzMDFfSTJDX09UR19DT05UUk9MXzEpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaXNwMTMwMV92YnVzX29mZih2b2lkKQoreworCWkyY193cml0ZShPVEcxX1ZCVVNfRFJWLAorCQkgIElTUDEzMDFfSTJDX09UR19DT05UUk9MXzEgfCBJU1AxMzAxX0kyQ19SRUdfQ0xFQVJfQUREUik7Cit9CisKK3N0YXRpYyB2b2lkIHBueDQwMDhfc3RhcnRfaGModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcCA9IF9fcmF3X3JlYWRsKFVTQl9PVEdfU1RBVF9DT05UUk9MKSB8IEhPU1RfRU47CisJX19yYXdfd3JpdGVsKHRtcCwgVVNCX09UR19TVEFUX0NPTlRST0wpOworCWlzcDEzMDFfdmJ1c19vbigpOworfQorCitzdGF0aWMgdm9pZCBwbng0MDA4X3N0b3BfaGModm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHRtcDsKKwlpc3AxMzAxX3ZidXNfb2ZmKCk7CisJdG1wID0gX19yYXdfcmVhZGwoVVNCX09UR19TVEFUX0NPTlRST0wpICYgfkhPU1RfRU47CisJX19yYXdfd3JpdGVsKHRtcCwgVVNCX09UR19TVEFUX0NPTlRST0wpOworfQorCitzdGF0aWMgaW50IF9fZGV2aW5pdCBvaGNpX3BueDQwMDhfc3RhcnQoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKwlzdHJ1Y3Qgb2hjaV9oY2QgKm9oY2kgPSBoY2RfdG9fb2hjaShoY2QpOworCWludCByZXQ7CisKKwlpZiAoKHJldCA9IG9oY2lfaW5pdChvaGNpKSkgPCAwKQorCQlyZXR1cm4gcmV0OworCisJaWYgKChyZXQgPSBvaGNpX3J1bihvaGNpKSkgPCAwKSB7CisJCWRldl9lcnIoaGNkLT5zZWxmLmNvbnRyb2xsZXIsICJjYW4ndCBzdGFydFxuIik7CisJCW9oY2lfc3RvcChoY2QpOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBoY19kcml2ZXIgb2hjaV9wbng0MDA4X2hjX2RyaXZlciA9IHsKKwkuZGVzY3JpcHRpb24gPSBoY2RfbmFtZSwKKwkucHJvZHVjdF9kZXNjID0JCSJwbng0MDA4IE9IQ0kiLAorCisJLyoKKwkgKiBnZW5lcmljIGhhcmR3YXJlIGxpbmthZ2UKKwkgKi8KKwkuaXJxID0gb2hjaV9pcnEsCisJLmZsYWdzID0gSENEX1VTQjExIHwgSENEX01FTU9SWSwKKworCS5oY2RfcHJpdl9zaXplID0Jc2l6ZW9mKHN0cnVjdCBvaGNpX2hjZCksCisJLyoKKwkgKiBiYXNpYyBsaWZlY3ljbGUgb3BlcmF0aW9ucworCSAqLworCS5zdGFydCA9IG9oY2lfcG54NDAwOF9zdGFydCwKKwkuc3RvcCA9IG9oY2lfc3RvcCwKKworCS8qCisJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKKwkgKi8KKwkudXJiX2VucXVldWUgPSBvaGNpX3VyYl9lbnF1ZXVlLAorCS51cmJfZGVxdWV1ZSA9IG9oY2lfdXJiX2RlcXVldWUsCisJLmVuZHBvaW50X2Rpc2FibGUgPSBvaGNpX2VuZHBvaW50X2Rpc2FibGUsCisKKwkvKgorCSAqIHNjaGVkdWxpbmcgc3VwcG9ydAorCSAqLworCS5nZXRfZnJhbWVfbnVtYmVyID0gb2hjaV9nZXRfZnJhbWUsCisKKwkvKgorCSAqIHJvb3QgaHViIHN1cHBvcnQKKwkgKi8KKwkuaHViX3N0YXR1c19kYXRhID0gb2hjaV9odWJfc3RhdHVzX2RhdGEsCisJLmh1Yl9jb250cm9sID0gb2hjaV9odWJfY29udHJvbCwKKworCS5zdGFydF9wb3J0X3Jlc2V0ID0gb2hjaV9zdGFydF9wb3J0X3Jlc2V0LAorfTsKKworI2RlZmluZSBVU0JfQ0xPQ0tfTUFTSyAoQUhCX01fQ0xPQ0tfT058IE9UR19DTE9DS19PTiB8IEhPU1RfQ0xPQ0tfT04gfCBJMkNfQ0xPQ0tfT04pCisKK3N0YXRpYyB2b2lkIHBueDQwMDhfc2V0X3VzYl9iaXRzKHZvaWQpCit7CisJc3RhcnRfaW50X3NldF9mYWxsaW5nX2VkZ2UoU0VfVVNCX09UR19BVFhfSU5UX04pOworCXN0YXJ0X2ludF9hY2soU0VfVVNCX09UR19BVFhfSU5UX04pOworCXN0YXJ0X2ludF91bWFzayhTRV9VU0JfT1RHX0FUWF9JTlRfTik7CisKKwlzdGFydF9pbnRfc2V0X3Jpc2luZ19lZGdlKFNFX1VTQl9PVEdfVElNRVJfSU5UKTsKKwlzdGFydF9pbnRfYWNrKFNFX1VTQl9PVEdfVElNRVJfSU5UKTsKKwlzdGFydF9pbnRfdW1hc2soU0VfVVNCX09UR19USU1FUl9JTlQpOworCisJc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZShTRV9VU0JfSTJDX0lOVCk7CisJc3RhcnRfaW50X2FjayhTRV9VU0JfSTJDX0lOVCk7CisJc3RhcnRfaW50X3VtYXNrKFNFX1VTQl9JMkNfSU5UKTsKKworCXN0YXJ0X2ludF9zZXRfcmlzaW5nX2VkZ2UoU0VfVVNCX0lOVCk7CisJc3RhcnRfaW50X2FjayhTRV9VU0JfSU5UKTsKKwlzdGFydF9pbnRfdW1hc2soU0VfVVNCX0lOVCk7CisKKwlzdGFydF9pbnRfc2V0X3Jpc2luZ19lZGdlKFNFX1VTQl9ORUVEX0NMS19JTlQpOworCXN0YXJ0X2ludF9hY2soU0VfVVNCX05FRURfQ0xLX0lOVCk7CisJc3RhcnRfaW50X3VtYXNrKFNFX1VTQl9ORUVEX0NMS19JTlQpOworCisJc3RhcnRfaW50X3NldF9yaXNpbmdfZWRnZShTRV9VU0JfQUhCX05FRURfQ0xLX0lOVCk7CisJc3RhcnRfaW50X2FjayhTRV9VU0JfQUhCX05FRURfQ0xLX0lOVCk7CisJc3RhcnRfaW50X3VtYXNrKFNFX1VTQl9BSEJfTkVFRF9DTEtfSU5UKTsKK30KKworc3RhdGljIHZvaWQgcG54NDAwOF91bnNldF91c2JfYml0cyh2b2lkKQoreworCXN0YXJ0X2ludF9tYXNrKFNFX1VTQl9PVEdfQVRYX0lOVF9OKTsKKwlzdGFydF9pbnRfbWFzayhTRV9VU0JfT1RHX1RJTUVSX0lOVCk7CisJc3RhcnRfaW50X21hc2soU0VfVVNCX0kyQ19JTlQpOworCXN0YXJ0X2ludF9tYXNrKFNFX1VTQl9JTlQpOworCXN0YXJ0X2ludF9tYXNrKFNFX1VTQl9ORUVEX0NMS19JTlQpOworCXN0YXJ0X2ludF9tYXNrKFNFX1VTQl9BSEJfTkVFRF9DTEtfSU5UKTsKK30KKworc3RhdGljIGludCBfX2RldmluaXQgdXNiX2hjZF9wbng0MDA4X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IDA7CisJc3RydWN0IG9oY2lfaGNkICpvaGNpOworCWNvbnN0IHN0cnVjdCBoY19kcml2ZXIgKmRyaXZlciA9ICZvaGNpX3BueDQwMDhfaGNfZHJpdmVyOworCisJaW50IHJldCA9IDAsIGlycTsKKworCWRldl9kYmcoJnBkZXYtPmRldiwgIiVzOiAiIERSSVZFUl9JTkZPICIgKHBueDQwMDgpXG4iLCBoY2RfbmFtZSk7CisJaWYgKHVzYl9kaXNhYmxlZCgpKSB7CisJCWVycigiVVNCIGlzIGRpc2FibGVkIik7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChwZGV2LT5udW1fcmVzb3VyY2VzICE9IDIKKwkgICAgfHwgcGRldi0+cmVzb3VyY2VbMF0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9NRU0KKwkgICAgfHwgcGRldi0+cmVzb3VyY2VbMV0uZmxhZ3MgIT0gSU9SRVNPVVJDRV9JUlEpIHsKKwkJZXJyKCJJbnZhbGlkIHJlc291cmNlIGNvbmZpZ3VyYXRpb24iKTsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQorCisJLyogRW5hYmxlIEFIQiBzbGF2ZSBVU0IgY2xvY2ssIG5lZWRlZCBmb3IgZnVydGhlciBVU0IgY2xvY2sgY29udHJvbCAqLworCV9fcmF3X3dyaXRlbChVU0JfU0xBVkVfSENMS19FTiB8ICgxIDw8IDE5KSwgVVNCX0NUUkwpOworCisJcmV0ID0gaTJjX2FkZF9kcml2ZXIoJmlzcDEzMDFfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkgeworCQllcnIoImZhaWxlZCB0byBjb25uZWN0IEkyQyB0byBJU1AxMzAxIFVTQiBUcmFuc2NlaXZlciIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpc3AxMzAxX2NvbmZpZ3VyZSgpOworCisJLyogRW5hYmxlIFVTQiBQTEwgKi8KKwl1c2JfY2xrID0gY2xrX2dldCgmcGRldi0+ZGV2LCAiY2tfcGxsNSIpOworCWlmIChJU19FUlIodXNiX2NsaykpIHsKKwkJZXJyKCJmYWlsZWQgdG8gYWNxdWlyZSBVU0IgUExMIik7CisJCXJldCA9IFBUUl9FUlIodXNiX2Nsayk7CisJCWdvdG8gb3V0MTsKKwl9CisKKwlyZXQgPSBjbGtfZW5hYmxlKHVzYl9jbGspOworCWlmIChyZXQgPCAwKSB7CisJCWVycigiZmFpbGVkIHRvIHN0YXJ0IFVTQiBQTEwiKTsKKwkJZ290byBvdXQyOworCX0KKworCXJldCA9IGNsa19zZXRfcmF0ZSh1c2JfY2xrLCA0ODAwMCk7CisJaWYgKHJldCA8IDApIHsKKwkJZXJyKCJmYWlsZWQgdG8gc2V0IFVTQiBjbG9jayByYXRlIik7CisJCWdvdG8gb3V0MzsKKwl9CisKKwlfX3Jhd193cml0ZWwoX19yYXdfcmVhZGwoVVNCX0NUUkwpIHwgVVNCX0hPU1RfTkVFRF9DTEtfRU4sIFVTQl9DVFJMKTsKKworCS8qIFNldCB0byBlbmFibGUgYWxsIG5lZWRlZCBVU0IgY2xvY2tzICovCisJX19yYXdfd3JpdGVsKFVTQl9DTE9DS19NQVNLLCBVU0JfT1RHX0NMS19DVFJMKTsKKworCXdoaWxlICgoX19yYXdfcmVhZGwoVVNCX09UR19DTEtfU1RBVCkgJiBVU0JfQ0xPQ0tfTUFTSykgIT0KKwkgICAgICAgVVNCX0NMT0NLX01BU0spIDsKKworCWhjZCA9IHVzYl9jcmVhdGVfaGNkIChkcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworCWlmICghaGNkKSB7CisJCWVycigiRmFpbGVkIHRvIGFsbG9jYXRlIEhDIGJ1ZmZlciIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDM7CisJfQorCisJLyogU2V0IGFsbCBVU0IgYml0cyBpbiB0aGUgU3RhcnQgRW5hYmxlIHJlZ2lzdGVyICovCisJcG54NDAwOF9zZXRfdXNiX2JpdHMoKTsKKworCWhjZC0+cnNyY19zdGFydCA9IHBkZXYtPnJlc291cmNlWzBdLnN0YXJ0OworCWhjZC0+cnNyY19sZW4gPSBwZGV2LT5yZXNvdXJjZVswXS5lbmQgLSBwZGV2LT5yZXNvdXJjZVswXS5zdGFydCArIDE7CisJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuLCBoY2RfbmFtZSkpIHsKKwkJZGV2X2RiZygmcGRldi0+ZGV2LCAicmVxdWVzdF9tZW1fcmVnaW9uIGZhaWxlZFxuIik7CisJCXJldCA9ICAtRU5PTUVNOworCQlnb3RvIG91dDQ7CisJfQorCWhjZC0+cmVncyA9ICh2b2lkIF9faW9tZW0gKilwZGV2LT5yZXNvdXJjZVswXS5zdGFydDsKKworCWlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7CisJaWYgKGlycSA8IDApIHsKKwkJcmV0ID0gLUVOWElPOworCQlnb3RvIG91dDQ7CisJfQorCisJaGNkLT5zZWxmLmhjcHJpdiA9ICh2b2lkICopaGNkOworCisJcG54NDAwOF9zdGFydF9oYygpOworCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIGhjZCk7CisJb2hjaSA9IGhjZF90b19vaGNpKGhjZCk7CisJb2hjaV9oY2RfaW5pdChvaGNpKTsKKworCWRldl9pbmZvKCZwZGV2LT5kZXYsICJhdCAweCVwLCBpcnEgJWRcbiIsIGhjZC0+cmVncywgaGNkLT5pcnEpOworCXJldCA9IHVzYl9hZGRfaGNkKGhjZCwgaXJxLCBTQV9JTlRFUlJVUFQpOworCWlmIChyZXQgPT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXBueDQwMDhfc3RvcF9oYygpOworb3V0NDoKKwlwbng0MDA4X3Vuc2V0X3VzYl9iaXRzKCk7CisJdXNiX3B1dF9oY2QoaGNkKTsKK291dDM6CisJY2xrX2Rpc2FibGUodXNiX2Nsayk7CitvdXQyOgorCWNsa19wdXQodXNiX2Nsayk7CitvdXQxOgorCWkyY19kZWxfZHJpdmVyKCZpc3AxMzAxX2RyaXZlcik7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB1c2JfaGNkX3BueDQwMDhfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisJc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworCisJdXNiX3JlbW92ZV9oY2QoaGNkKTsKKwlwbng0MDA4X3N0b3BfaGMoKTsKKwlyZWxlYXNlX21lbV9yZWdpb24oaGNkLT5yc3JjX3N0YXJ0LCBoY2QtPnJzcmNfbGVuKTsKKwl1c2JfcHV0X2hjZChoY2QpOworCXBueDQwMDhfdW5zZXRfdXNiX2JpdHMoKTsKKwljbGtfZGlzYWJsZSh1c2JfY2xrKTsKKwljbGtfcHV0KHVzYl9jbGspOworCWkyY19kZWxfZHJpdmVyKCZpc3AxMzAxX2RyaXZlcik7CisKKwlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1c2JfaGNkX3BueDQwMDhfZHJpdmVyID0geworCS5kcml2ZXIgPSB7CisJCS5uYW1lID0gInVzYi1vaGNpIiwKKwl9LAorCS5wcm9iZSA9IHVzYl9oY2RfcG54NDAwOF9wcm9iZSwKKwkucmVtb3ZlID0gdXNiX2hjZF9wbng0MDA4X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHVzYl9oY2RfcG54NDAwOF9pbml0KHZvaWQpCit7CisJcmV0dXJuIHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdXNiX2hjZF9wbng0MDA4X2RyaXZlcik7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCB1c2JfaGNkX3BueDQwMDhfY2xlYW51cCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmdXNiX2hjZF9wbng0MDA4X2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KHVzYl9oY2RfcG54NDAwOF9pbml0KTsKK21vZHVsZV9leGl0KHVzYl9oY2RfcG54NDAwOF9jbGVhbnVwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHBjLXNvYy5jCmluZGV4IDlmZTU2ZmYuLmQ5ZDFhZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1wcGMtc29jLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXBwYy1zb2MuYwpAQCAtMTQ4LDYgKzE0OCw3IEBACiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfcHBjX3NvY19zdGFydCwKIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAorCS5zaHV0ZG93biA9IAkJb2hjaV9zaHV0ZG93biwKIAogCS8qCiAJICogbWFuYWdpbmcgaS9vIHJlcXVlc3RzIGFuZCBhc3NvY2lhdGVkIGRldmljZSByZXNvdXJjZXMKQEAgLTE2Niw2ICsxNjcsNyBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKwkuaHViX2lycV9lbmFibGUgPQlvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmCUNPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKQEAgLTE5NSw2ICsxOTcsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHBjX3NvY19kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3BwY19zb2NfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmCUNPTkZJR19QTQogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9wcGNfc29jX2Rydl9zdXNwZW5kLCovCiAJLyoucmVzdW1lCT0gb2hjaV9oY2RfcHBjX3NvY19kcnZfcmVzdW1lLCovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktcHhhMjd4LmMKaW5kZXggNmY1NTllMS4uZTE3NmIwNCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXB4YTI3eC5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1weGEyN3guYwpAQCAtMjcwLDYgKzI3MCw3IEBACiAJICovCiAJLnN0YXJ0ID0JCW9oY2lfcHhhMjd4X3N0YXJ0LAogCS5zdG9wID0JCQlvaGNpX3N0b3AsCisJLnNodXRkb3duID0gCQlvaGNpX3NodXRkb3duLAogCiAJLyoKIAkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwpAQCAtMjg4LDYgKzI4OSw3IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfaHViX3N0YXR1c19kYXRhLAogCS5odWJfY29udHJvbCA9CQlvaGNpX2h1Yl9jb250cm9sLAorCS5odWJfaXJxX2VuYWJsZSA9CW9oY2lfcmhzY19lbmFibGUsCiAjaWZkZWYgIENPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKQEAgLTM1Nyw2ICszNTksNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfcHhhMjd4X2RyaXZlciA9IHsKIAkucHJvYmUJCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9wcm9iZSwKIAkucmVtb3ZlCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kCT0gb2hjaV9oY2RfcHhhMjd4X2Rydl9zdXNwZW5kLCAKIAkucmVzdW1lCQk9IG9oY2lfaGNkX3B4YTI3eF9kcnZfcmVzdW1lLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zM2MyNDEwLmMKaW5kZXggZDJmYzY5Ni4uNTllNDM2NCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLXMzYzI0MTAuYworKysgYi9kcml2ZXJzL3VzYi9ob3N0L29oY2ktczNjMjQxMC5jCkBAIC0zNzAsNyArMzcwLDcgQEAKIAkJZ290byBlcnJfbWVtOwogCX0KIAotCXVzYl9jbGsgPSBjbGtfZ2V0KCZkZXYtPmRldiwgInVwbGwiKTsKKwl1c2JfY2xrID0gY2xrX2dldCgmZGV2LT5kZXYsICJ1c2ItYnVzLWhvc3QiKTsKIAlpZiAoSVNfRVJSKHVzYl9jbGspKSB7CiAJCWRldl9lcnIoJmRldi0+ZGV2LCAiY2Fubm90IGdldCB1c2ItaG9zdCBjbG9ja1xuIik7CiAJCXJldHZhbCA9IC1FTk9FTlQ7CkBAIC00NDcsNiArNDQ3LDcgQEAKIAkgKi8KIAkuc3RhcnQgPQkJb2hjaV9zM2MyNDEwX3N0YXJ0LAogCS5zdG9wID0JCQlvaGNpX3N0b3AsCisJLnNodXRkb3duID0gCQlvaGNpX3NodXRkb3duLAogCiAJLyoKIAkgKiBtYW5hZ2luZyBpL28gcmVxdWVzdHMgYW5kIGFzc29jaWF0ZWQgZGV2aWNlIHJlc291cmNlcwpAQCAtNDY1LDYgKzQ2Niw3IEBACiAJICovCiAJLmh1Yl9zdGF0dXNfZGF0YSA9CW9oY2lfczNjMjQxMF9odWJfc3RhdHVzX2RhdGEsCiAJLmh1Yl9jb250cm9sID0JCW9oY2lfczNjMjQxMF9odWJfY29udHJvbCwKKwkuaHViX2lycV9lbmFibGUgPQlvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmCUNPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKQEAgLTQ5MCw2ICs0OTIsNyBAQAogc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgb2hjaV9oY2RfczNjMjQxMF9kcml2ZXIgPSB7CiAJLnByb2JlCQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Byb2JlLAogCS5yZW1vdmUJCT0gb2hjaV9oY2RfczNjMjQxMF9kcnZfcmVtb3ZlLAorCS5zaHV0ZG93biAJPSB1c2JfaGNkX3BsYXRmb3JtX3NodXRkb3duLAogCS8qLnN1c3BlbmQJPSBvaGNpX2hjZF9zM2MyNDEwX2Rydl9zdXNwZW5kLCAqLwogCS8qLnJlc3VtZQk9IG9oY2lfaGNkX3MzYzI0MTBfZHJ2X3Jlc3VtZSwgKi8KIAkuZHJpdmVyCQk9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS1zYTExMTEuYwppbmRleCBjZTNkZTEwLi43MTM3MWRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L29oY2ktc2ExMTExLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLXNhMTExMS5jCkBAIC0yMTIsMTAgKzIxMiw2IEBACiAJICogYmFzaWMgbGlmZWN5Y2xlIG9wZXJhdGlvbnMKIAkgKi8KIAkuc3RhcnQgPQkJb2hjaV9zYTExMTFfc3RhcnQsCi0jaWZkZWYJQ09ORklHX1BNCi0JLyogc3VzcGVuZDoJCW9oY2lfc2ExMTExX3N1c3BlbmQsICAtLSB0YmQgKi8KLQkvKiByZXN1bWU6CQlvaGNpX3NhMTExMV9yZXN1bWUsICAgLS0gdGJkICovCi0jZW5kaWYKIAkuc3RvcCA9CQkJb2hjaV9zdG9wLAogCiAJLyoKQEAgLTIzNSw2ICsyMzEsNyBAQAogCSAqLwogCS5odWJfc3RhdHVzX2RhdGEgPQlvaGNpX2h1Yl9zdGF0dXNfZGF0YSwKIAkuaHViX2NvbnRyb2wgPQkJb2hjaV9odWJfY29udHJvbCwKKwkuaHViX2lycV9lbmFibGUgPQlvaGNpX3Joc2NfZW5hYmxlLAogI2lmZGVmCUNPTkZJR19QTQogCS5idXNfc3VzcGVuZCA9CQlvaGNpX2J1c19zdXNwZW5kLAogCS5idXNfcmVzdW1lID0JCW9oY2lfYnVzX3Jlc3VtZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3Qvb2hjaS5oIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKaW5kZXggY2FhY2YxNC4uYTJmNDJhMiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKKysrIGIvZHJpdmVycy91c2IvaG9zdC9vaGNpLmgKQEAgLTE1OSw3ICsxNTksNyBAQAogCS8qIEJpdCBTdHVmZiAgKi8gICAgICAgICAgICAgICAtRVBST1RPLAogCS8qIERhdGEgVG9nZyAgKi8gICAgICAgICAgICAgICAtRUlMU0VRLAogCS8qIFN0YWxsICAgICAgKi8gICAgICAgICAgICAgICAtRVBJUEUsCi0JLyogRGV2Tm90UmVzcCAqLyAgICAgICAgICAgICAgIC1FVElNRURPVVQsCisJLyogRGV2Tm90UmVzcCAqLyAgICAgICAgICAgICAgIC1FVElNRSwKIAkvKiBQSURDaGVjayAgICovICAgICAgICAgICAgICAgLUVQUk9UTywKIAkvKiBVbkV4cFBJRCAgICovICAgICAgICAgICAgICAgLUVQUk9UTywKIAkvKiBEYXRhT3ZlciAgICovICAgICAgICAgICAgICAgLUVPVkVSRkxPVywKQEAgLTM4OCw4ICszODgsNyBAQAogCXUzMiAJCQloY19jb250cm9sOwkvKiBjb3B5IG9mIGhjIGNvbnRyb2wgcmVnICovCiAJdW5zaWduZWQgbG9uZwkJbmV4dF9zdGF0ZWNoYW5nZTsJLyogc3VzcGVuZC9yZXN1bWUgKi8KIAl1MzIJCQlmbWludGVydmFsOwkJLyogc2F2ZWQgcmVnaXN0ZXIgKi8KLQotCXN0cnVjdCBub3RpZmllcl9ibG9jawlyZWJvb3Rfbm90aWZpZXI7CisJdW5zaWduZWQJCWF1dG9zdG9wOjE7CS8qIHJoIGF1dG8gc3RvcHBpbmcvc3RvcHBlZCAqLwogCiAJdW5zaWduZWQgbG9uZwkJZmxhZ3M7CQkvKiBmb3IgSEMgYnVncyAqLwogI2RlZmluZQlPSENJX1FVSVJLX0FNRDc1NgkweDAxCQkJLyogZXJyYXR1bSAjNCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKaW5kZXggOWRlMTE1ZDkuLjNhNTg2YWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2hvc3Qvc2w4MTEtaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC9zbDgxMS1oY2QuYwpAQCAtNTk3LDcgKzU5Nyw3IEBACiAJLyogZXJyb3I/IHJldHJ5LCB1bnRpbCAiMyBzdHJpa2VzIiAqLwogCX0gZWxzZSBpZiAoKytlcC0+ZXJyb3JfY291bnQgPj0gMykgewogCQlpZiAoc3RhdHVzICYgU0wxMUhfU1RBVE1BU0tfVE1PVVQpCi0JCQl1cmJzdGF0ID0gLUVUSU1FRE9VVDsKKwkJCXVyYnN0YXQgPSAtRVRJTUU7CiAJCWVsc2UgaWYgKHN0YXR1cyAmIFNMMTFIX1NUQVRNQVNLX09WRikKIAkJCXVyYnN0YXQgPSAtRU9WRVJGTE9XOwogCQllbHNlCkBAIC0xNTE3LDcgKzE1MTcsNyBAQAogCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCBwcm9jX3NsODExaF9zaG93LCBQREUoaW5vZGUpLT5kYXRhKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19vcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX29wcyA9IHsKIAkub3BlbgkJPSBwcm9jX3NsODExaF9vcGVuLAogCS5yZWFkCQk9IHNlcV9yZWFkLAogCS5sbHNlZWsJCT0gc2VxX2xzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jIGIvZHJpdmVycy91c2IvaG9zdC91MTMyLWhjZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMmUyYTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9ob3N0L3UxMzItaGNkLmMKQEAgLTAsMCArMSwzMjk1IEBACisvKgorKiBIb3N0IENvbnRyb2xsZXIgRHJpdmVyIGZvciB0aGUgRWxhbiBEaWdpdGFsIFN5c3RlbXMgVTEzMiBhZGFwdGVyCisqCisqIENvcHlyaWdodChDKSAyMDA2IEVsYW4gRGlnaXRhbCBTeXN0ZW1zIExpbWl0ZWQKKyogaHR0cDovL3d3dy5lbGFuZGlnaXRhbHN5c3RlbXMuY29tCisqCisqIEF1dGhvciBhbmQgTWFpbnRhaW5lciAtIFRvbnkgT2xlY2ggLSBFbGFuIERpZ2l0YWwgU3lzdGVtcworKiB0b255Lm9sZWNoQGVsYW5kaWdpdGFsc3lzdGVtcy5jb20KKyoKKyogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisqCisqCisqIFRoaXMgZHJpdmVyIHdhcyB3cml0dGVuIGJ5IFRvbnkgT2xlY2godG9ueS5vbGVjaEBlbGFuZGlnaXRhbHN5c3RlbXMuY29tKQorKiBiYXNlZCBvbiB2YXJpb3VzIFVTQiBob3N0IGRyaXZlcnMgaW4gdGhlIDIuNi4xNSBsaW51eCBrZXJuZWwKKyogd2l0aCBjb25zdGFudCByZWZlcmVuY2UgdG8gdGhlIDNyZCBFZGl0aW9uIG9mIExpbnV4IERldmljZSBEcml2ZXJzCisqIHB1Ymxpc2hlZCBieSBPJ1JlaWxseQorKgorKiBUaGUgVTEzMiBhZGFwdGVyIGlzIGEgVVNCIHRvIENhcmRCdXMgYWRhcHRlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQKKyogZm9yIFBDIGNhcmRzIHRoYXQgY29udGFpbiBhbiBPSENJIGhvc3QgY29udHJvbGxlci4gVHlwaWNhbCBQQyBjYXJkcworKiBhcmUgdGhlIE9yYW5nZSBNb2JpbGUgM0cgT3B0aW9uIEdsb2JlVHJvdHRlciBGdXNpb24gY2FyZC4KKyoKKyogVGhlIFUxMzIgYWRhcHRlciB3aWxsICpOT1QgKndvcmsgd2l0aCBQQyBjYXJkcyB0aGF0IGRvIG5vdCBjb250YWluCisqIGFuIE9IQ0kgY29udHJvbGxlci4gQSBzaW1wbGUgd2F5IHRvIHRlc3Qgd2hldGhlciBhIFBDIGNhcmQgaGFzIGFuCisqIE9IQ0kgY29udHJvbGxlciBhcyBhbiBpbnRlcmZhY2UgaXMgdG8gaW5zZXJ0IHRoZSBQQyBjYXJkIGRpcmVjdGx5CisqIGludG8gYSBsYXB0b3Aob3IgZGVza3RvcCkgd2l0aCBhIENhcmRCdXMgc2xvdCBhbmQgaWYgImxzcGNpIiBzaG93cworKiBhIG5ldyBVU0IgY29udHJvbGxlciBhbmQgImxzdXNiIC12IiBzaG93cyBhIG5ldyBPSENJIEhvc3QgQ29udHJvbGxlcgorKiB0aGVuIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgVTEzMiBhZGFwdGVyIHdpbGwgc3VwcG9ydCB0aGUKKyogUEMgY2FyZC4oeW91IGFsc28gbmVlZCB0aGUgc3BlY2lmaWMgY2xpZW50IGRyaXZlciBmb3IgdGhlIFBDIGNhcmQpCisqCisqIFBsZWFzZSBpbmZvcm0gdGhlIEF1dGhvciBhbmQgTWFpbnRhaW5lciBhYm91dCBhbnkgUEMgY2FyZHMgdGhhdAorKiBjb250YWluIE9IQ0kgSG9zdCBDb250cm9sbGVyIGFuZCB3b3JrIHdoZW4gZGlyZWN0bHkgY29ubmVjdGVkIHRvCisqIGFuIGVtYmVkZGVkIENhcmRCdXMgc2xvdCBidXQgZG8gbm90IHdvcmsgd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQKKyogdmlhIGFuIEVMQU4gVTEzMiBhZGFwdGVyLgorKgorKi8KKyNpbmNsdWRlIDxsaW51eC9jb25maWcuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2lfaWRzLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisjaW5jbHVkZSAiLi4vY29yZS9oY2QuaCIKKyNpbmNsdWRlICJvaGNpLmgiCisjZGVmaW5lIE9IQ0lfQ09OVFJPTF9JTklUIE9IQ0lfQ1RSTF9DQlNSCisjZGVmaW5lIE9IQ0lfSU5UUl9JTklUIChPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX1VFIHwgT0hDSV9JTlRSX1JEIHwgXAorICAgICAgICBPSENJX0lOVFJfV0RIKQorTU9EVUxFX0FVVEhPUigiVG9ueSBPbGVjaCAtIEVsYW4gRGlnaXRhbCBTeXN0ZW1zIExpbWl0ZWQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiVTEzMiBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlciIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworI2RlZmluZSBJTlRfTU9EVUxFX1BBUk0obiwgdikgc3RhdGljIGludCBuID0gdjttb2R1bGVfcGFyYW0obiwgaW50LCAwNDQ0KQorSU5UX01PRFVMRV9QQVJNKHRlc3RpbmcsIDApOworLyogU29tZSBib2FyZHMgbWlzcmVwb3J0IHBvd2VyIHN3aXRjaGluZy9vdmVyY3VycmVudCovCitzdGF0aWMgaW50IGRpc3RydXN0X2Zpcm13YXJlID0gMTsKK21vZHVsZV9wYXJhbShkaXN0cnVzdF9maXJtd2FyZSwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGRpc3RydXN0X2Zpcm13YXJlLCAidHJ1ZSB0byBkaXN0cnVzdCBmaXJtd2FyZSBwb3dlci9vdmVyY3VycmVuIgorICAgICAgICAidCBzZXR1cCIpOworREVDTEFSRV9XQUlUX1FVRVVFX0hFQUQodTEzMl9oY2Rfd2FpdCk7CisvKgorKiB1MTMyX21vZHVsZV9sb2NrIGV4aXN0cyB0byBwcm90ZWN0IGFjY2VzcyB0byBnbG9iYWwgdmFyaWFibGVzCisqCisqLworc3RhdGljIHN0cnVjdCBzZW1hcGhvcmUgdTEzMl9tb2R1bGVfbG9jazsKK3N0YXRpYyBpbnQgdTEzMl9leGl0aW5nID0gMDsKK3N0YXRpYyBpbnQgdTEzMl9pbnN0YW5jZXMgPSAwOworc3RhdGljIHN0cnVjdCBsaXN0X2hlYWQgdTEzMl9zdGF0aWNfbGlzdDsKKy8qCisqIGVuZCBvZiB0aGUgZ2xvYmFsIHZhcmlhYmxlcyBwcm90ZWN0ZWQgYnkgdTEzMl9tb2R1bGVfbG9jaworKi8KK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya3F1ZXVlOworI2RlZmluZSBNQVhfVTEzMl9QT1JUUyA3CisjZGVmaW5lIE1BWF9VMTMyX0FERFJTIDEyOAorI2RlZmluZSBNQVhfVTEzMl9VREVWUyA0CisjZGVmaW5lIE1BWF9VMTMyX0VORFBTIDEwMAorI2RlZmluZSBNQVhfVTEzMl9SSU5HUyA0CitzdGF0aWMgY29uc3QgY2hhciAqY2NfdG9fdGV4dFsxNl0gPSB7CisgICAgICAgICJObyBFcnJvciAiLAorICAgICAgICAiQ1JDIEVycm9yICIsCisgICAgICAgICJCaXQgU3R1ZmYgIiwKKyAgICAgICAgIkRhdGEgVG9nZyAiLAorICAgICAgICAiU3RhbGwgIiwKKyAgICAgICAgIkRldk5vdFJlc3AgIiwKKyAgICAgICAgIlBJRENoZWNrICIsCisgICAgICAgICJVbkV4cFBJRCAiLAorICAgICAgICAiRGF0YU92ZXIgIiwKKyAgICAgICAgIkRhdGFVbmRlciAiLAorICAgICAgICAiKGZvciBodykgIiwKKyAgICAgICAgIihmb3IgaHcpICIsCisgICAgICAgICJCdWZmZXJPdmVyICIsCisgICAgICAgICJCdWZmVW5kZXIgIiwKKyAgICAgICAgIihmb3IgSENEKSAiLAorICAgICAgICAiKGZvciBIQ0QpICIKK307CitzdHJ1Y3QgdTEzMl9wb3J0IHsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzI7CisgICAgICAgIGludCByZXNldDsKKyAgICAgICAgaW50IGVuYWJsZTsKKyAgICAgICAgaW50IHBvd2VyOworICAgICAgICBpbnQgU3RhdHVzOworfTsKK3N0cnVjdCB1MTMyX2FkZHIgeworICAgICAgICB1OCBhZGRyZXNzOworfTsKK3N0cnVjdCB1MTMyX3VkZXYgeworICAgICAgICBzdHJ1Y3Qga3JlZiBrcmVmOworICAgICAgICBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldmljZTsKKyAgICAgICAgdTggZW51bWVyYXRpb247CisgICAgICAgIHU4IHVkZXZfbnVtYmVyOworICAgICAgICB1OCB1c2JfYWRkcjsKKyAgICAgICAgdTggcG9ydG51bWJlcjsKKyAgICAgICAgdTggZW5kcF9udW1iZXJfaW5bMTZdOworICAgICAgICB1OCBlbmRwX251bWJlcl9vdXRbMTZdOworfTsKKyNkZWZpbmUgRU5EUF9RVUVVRV9TSElGVCAzCisjZGVmaW5lIEVORFBfUVVFVUVfU0laRSAoMTw8RU5EUF9RVUVVRV9TSElGVCkKKyNkZWZpbmUgRU5EUF9RVUVVRV9NQVNLIChFTkRQX1FVRVVFX1NJWkUtMSkKK3N0cnVjdCB1MTMyX3VyYnEgeworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHVyYl9tb3JlOworICAgICAgICBzdHJ1Y3QgdXJiICp1cmI7Cit9Oworc3RydWN0IHUxMzJfc3BpbiB7CisgICAgICAgIHNwaW5sb2NrX3Qgc2xvY2s7Cit9Oworc3RydWN0IHUxMzJfZW5kcCB7CisgICAgICAgIHN0cnVjdCBrcmVmIGtyZWY7CisgICAgICAgIHU4IHVkZXZfbnVtYmVyOworICAgICAgICB1OCBlbmRwX251bWJlcjsKKyAgICAgICAgdTggdXNiX2FkZHI7CisgICAgICAgIHU4IHVzYl9lbmRwOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMjsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlbmRwX3Jpbmc7CisgICAgICAgIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmc7CisgICAgICAgIHVuc2lnbmVkIHRvZ2dsZV9iaXRzOjI7CisgICAgICAgIHVuc2lnbmVkIGFjdGl2ZToxOworICAgICAgICB1bnNpZ25lZCBkZWxheWVkOjE7CisgICAgICAgIHVuc2lnbmVkIGlucHV0OjE7CisgICAgICAgIHVuc2lnbmVkIG91dHB1dDoxOworICAgICAgICB1bnNpZ25lZCBwaXBldHlwZToyOworICAgICAgICB1bnNpZ25lZCBkZXF1ZXVlaW5nOjE7CisgICAgICAgIHVuc2lnbmVkIGVkc2V0X2ZsdXNoOjE7CisgICAgICAgIHVuc2lnbmVkIHNwYXJlX2JpdHM6MTQ7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgamlmZmllczsKKyAgICAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXA7CisgICAgICAgIHN0cnVjdCB1MTMyX3NwaW4gcXVldWVfbG9jazsKKyAgICAgICAgdTE2IHF1ZXVlX3NpemU7CisgICAgICAgIHUxNiBxdWV1ZV9sYXN0OworICAgICAgICB1MTYgcXVldWVfbmV4dDsKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiX2xpc3RbRU5EUF9RVUVVRV9TSVpFXTsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB1cmJfbW9yZTsKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHNjaGVkdWxlcjsKK307CitzdHJ1Y3QgdTEzMl9yaW5nIHsKKyAgICAgICAgdW5zaWduZWQgaW5fdXNlOjE7CisgICAgICAgIHVuc2lnbmVkIGxlbmd0aDo3OworICAgICAgICB1OCBudW1iZXI7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyOworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICpjdXJyX2VuZHA7CisgICAgICAgIHN0cnVjdCB3b3JrX3N0cnVjdCBzY2hlZHVsZXI7Cit9OworI2RlZmluZSBPSENJX1FVSVJLX0FNRDc1NiAweDAxCisjZGVmaW5lIE9IQ0lfUVVJUktfU1VQRVJJTyAweDAyCisjZGVmaW5lIE9IQ0lfUVVJUktfSU5JVFJFU0VUIDB4MDQKKyNkZWZpbmUgT0hDSV9CSUdfRU5ESUFOIDB4MDgKKyNkZWZpbmUgT0hDSV9RVUlSS19aRk1JQ1JPIDB4MTAKK3N0cnVjdCB1MTMyIHsKKyAgICAgICAgc3RydWN0IGtyZWYga3JlZjsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB1MTMyX2xpc3Q7CisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc3dfbG9jazsKKyAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBzY2hlZHVsZXJfbG9jazsKKyAgICAgICAgc3RydWN0IHUxMzJfcGxhdGZvcm1fZGF0YSAqYm9hcmQ7CisgICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBsYXRmb3JtX2RldjsKKyAgICAgICAgc3RydWN0IHUxMzJfcmluZyByaW5nW01BWF9VMTMyX1JJTkdTXTsKKyAgICAgICAgaW50IHNlcXVlbmNlX251bTsKKyAgICAgICAgaW50IGdvaW5nOworICAgICAgICBpbnQgcG93ZXI7CisgICAgICAgIGludCByZXNldDsKKyAgICAgICAgaW50IG51bV9wb3J0czsKKyAgICAgICAgdTMyIGhjX2NvbnRyb2w7CisgICAgICAgIHUzMiBoY19mbWludGVydmFsOworICAgICAgICB1MzIgaGNfcm9vdGh1Yl9zdGF0dXM7CisgICAgICAgIHUzMiBoY19yb290aHViX2E7CisgICAgICAgIHUzMiBoY19yb290aHViX3BvcnRzdGF0dXNbTUFYX1JPT1RfUE9SVFNdOworICAgICAgICBpbnQgZmxhZ3M7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dF9zdGF0ZWNoYW5nZTsKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IG1vbml0b3I7CisgICAgICAgIGludCBudW1fZW5kcG9pbnRzOworICAgICAgICBzdHJ1Y3QgdTEzMl9hZGRyIGFkZHJbTUFYX1UxMzJfQUREUlNdOworICAgICAgICBzdHJ1Y3QgdTEzMl91ZGV2IHVkZXZbTUFYX1UxMzJfVURFVlNdOworICAgICAgICBzdHJ1Y3QgdTEzMl9wb3J0IHBvcnRbTUFYX1UxMzJfUE9SVFNdOworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwW01BWF9VMTMyX0VORFBTXTsKK307CitpbnQgdXNiX2Z0ZGlfZWxhbl9yZWFkX3JlZyhzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1MzIgKmRhdGEpOworaW50IHVzYl9mdGRpX2VsYW5fcmVhZF9wY2ltZW0oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggYWRkcmVzc29mcywKKyAgICAgICAgdTggd2lkdGgsIHUzMiAqZGF0YSk7CitpbnQgdXNiX2Z0ZGlfZWxhbl93cml0ZV9wY2ltZW0oc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggYWRkcmVzc29mcywKKyAgICAgICAgdTggd2lkdGgsIHUzMiBkYXRhKTsKKy8qCisqIHRoZXNlIGNhbiBub3QgYmUgaW5saW5lcyBiZWNhdXNlIHdlIG5lZWQgdGhlIHN0cnVjdHVyZSBvZmZzZXQhIQorKiBEb2VzIGFueW9uZSBoYXZlIGEgYmV0dGVyIHdheT8/Pz8/CisqLworI2RlZmluZSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIG1lbWJlciwgZGF0YSkgXAorICAgICAgICB1c2JfZnRkaV9lbGFuX3JlYWRfcGNpbWVtKHUxMzItPnBsYXRmb3JtX2Rldiwgb2Zmc2V0b2Yoc3RydWN0IFwKKyAgICAgICAgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKKyNkZWZpbmUgdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgbWVtYmVyLCBkYXRhKSBcCisgICAgICAgIHVzYl9mdGRpX2VsYW5fd3JpdGVfcGNpbWVtKHUxMzItPnBsYXRmb3JtX2Rldiwgb2Zmc2V0b2Yoc3RydWN0IFwKKyAgICAgICAgb2hjaV9yZWdzLCBtZW1iZXIpLCAwLCBkYXRhKTsKKyNkZWZpbmUgdTEzMl93cml0ZV9wY2ltZW1fYnl0ZSh1MTMyLCBtZW1iZXIsIGRhdGEpIFwKKyAgICAgICAgdXNiX2Z0ZGlfZWxhbl93cml0ZV9wY2ltZW0odTEzMi0+cGxhdGZvcm1fZGV2LCBvZmZzZXRvZihzdHJ1Y3QgXAorICAgICAgICBvaGNpX3JlZ3MsIG1lbWJlciksIDB4MGUsIGRhdGEpOworc3RhdGljIGlubGluZSBzdHJ1Y3QgdTEzMiAqdWRldl90b191MTMyKHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYpCit7CisgICAgICAgIHU4IHVkZXZfbnVtYmVyID0gdWRldi0+dWRldl9udW1iZXI7CisgICAgICAgIHJldHVybiBjb250YWluZXJfb2YodWRldiwgc3RydWN0IHUxMzIsIHVkZXZbdWRldl9udW1iZXJdKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdTEzMiAqaGNkX3RvX3UxMzIoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKyAgICAgICAgcmV0dXJuIChzdHJ1Y3QgdTEzMiAqKShoY2QtPmhjZF9wcml2KTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgdXNiX2hjZCAqdTEzMl90b19oY2Qoc3RydWN0IHUxMzIgKnUxMzIpCit7CisgICAgICAgIHJldHVybiBjb250YWluZXJfb2YoKHZvaWQgKil1MTMyLCBzdHJ1Y3QgdXNiX2hjZCwgaGNkX3ByaXYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdTEzMl9kaXNhYmxlKHN0cnVjdCB1MTMyICp1MTMyKQoreworICAgICAgICB1MTMyX3RvX2hjZCh1MTMyKS0+c3RhdGUgPSBIQ19TVEFURV9IQUxUOworfQorCisKKyNkZWZpbmUga3JlZl90b191MTMyKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdTEzMiwga3JlZikKKyNkZWZpbmUga3JlZl90b191MTMyX2VuZHAoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1MTMyX2VuZHAsIGtyZWYpCisjZGVmaW5lIGtyZWZfdG9fdTEzMl91ZGV2KGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdTEzMl91ZGV2LCBrcmVmKQorI2luY2x1ZGUgIi4uL21pc2MvdXNiX3UxMzIuaCIKK3N0YXRpYyBjb25zdCBjaGFyIGhjZF9uYW1lW10gPSAidTEzMl9oY2QiOworI2RlZmluZSBQT1JUX0NfTUFTSyAoKFVTQl9QT1JUX1NUQVRfQ19DT05ORUNUSU9OIHwgVVNCX1BPUlRfU1RBVF9DX0VOQUJMRSB8IFwKKyAgICAgICAgVVNCX1BPUlRfU1RBVF9DX1NVU1BFTkQgfCBVU0JfUE9SVF9TVEFUX0NfT1ZFUkNVUlJFTlQgfCBcCisgICAgICAgIFVTQl9QT1JUX1NUQVRfQ19SRVNFVCkgPDwgMTYpCitzdGF0aWMgdm9pZCB1MTMyX2hjZF9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0ga3JlZl90b191MTMyKGtyZWYpOworICAgICAgICBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdTEzMi0+cGxhdGZvcm1fZGV2OworICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdTEzMl90b19oY2QodTEzMik7CisgICAgICAgIHUxMzItPmdvaW5nICs9IDE7CisgICAgICAgIGRvd24oJnUxMzJfbW9kdWxlX2xvY2spOworICAgICAgICBsaXN0X2RlbF9pbml0KCZ1MTMyLT51MTMyX2xpc3QpOworICAgICAgICB1MTMyX2luc3RhbmNlcyAtPSAxOworICAgICAgICB1cCgmdTEzMl9tb2R1bGVfbG9jayk7CisgICAgICAgIGRldl93YXJuKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkZSRUVJTkcgdGhlIGhjZD0lcCBhbmQgdGh1cyB0aGUgdTEzIgorICAgICAgICAgICAgICAgICIyPSVwIGdvaW5nPSVkIHBkZXY9JXBcbiIsIGhjZCwgdTEzMiwgdTEzMi0+Z29pbmcsIHBkZXYpOworICAgICAgICB1c2JfcHV0X2hjZChoY2QpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdTEzMl91MTMyX3B1dF9rcmVmKHN0cnVjdCB1MTMyICp1MTMyKQoreworICAgICAgICBrcmVmX3B1dCgmdTEzMi0+a3JlZiwgdTEzMl9oY2RfZGVsZXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHUxMzJfdTEzMl9pbml0X2tyZWYoc3RydWN0IHUxMzIgKnUxMzIpCit7CisgICAgICAgIGtyZWZfaW5pdCgmdTEzMi0+a3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfdWRldl9kZWxldGUoc3RydWN0IGtyZWYgKmtyZWYpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYgPSBrcmVmX3RvX3UxMzJfdWRldihrcmVmKTsKKyAgICAgICAgdWRldi0+dWRldl9udW1iZXIgPSAwOworICAgICAgICB1ZGV2LT51c2JfZGV2aWNlID0gTlVMTDsKKyAgICAgICAgdWRldi0+dXNiX2FkZHIgPSAwOworICAgICAgICB1ZGV2LT5lbnVtZXJhdGlvbiA9IDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1MTMyX3VkZXZfcHV0X2tyZWYoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYpCit7CisgICAgICAgIGtyZWZfcHV0KCZ1ZGV2LT5rcmVmLCB1MTMyX3VkZXZfZGVsZXRlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHUxMzJfdWRldl9nZXRfa3JlZihzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfdWRldiAqdWRldikKK3sKKyAgICAgICAga3JlZl9nZXQoJnVkZXYtPmtyZWYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdTEzMl91ZGV2X2luaXRfa3JlZihzdHJ1Y3QgdTEzMiAqdTEzMiwKKyAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldikKK3sKKyAgICAgICAga3JlZl9pbml0KCZ1ZGV2LT5rcmVmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHUxMzJfcmluZ19wdXRfa3JlZihzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfcmluZyAqcmluZykKK3sKKyAgICAgICAga3JlZl9wdXQoJnUxMzItPmtyZWYsIHUxMzJfaGNkX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfcmluZ19yZXF1ZXVlX3dvcmsoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcsCisgICAgICAgIHVuc2lnbmVkIGludCBkZWx0YSkKK3sKKyAgICAgICAgaWYgKGRlbHRhID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChxdWV1ZV9kZWxheWVkX3dvcmsod29ya3F1ZXVlLCAmcmluZy0+c2NoZWR1bGVyLCBkZWx0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayh3b3JrcXVldWUsICZyaW5nLT5zY2hlZHVsZXIpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAga3JlZl9wdXQoJnUxMzItPmtyZWYsIHUxMzJfaGNkX2RlbGV0ZSk7CisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgdTEzMl9yaW5nX3F1ZXVlX3dvcmsoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcsCisgICAgICAgIHVuc2lnbmVkIGludCBkZWx0YSkKK3sKKyAgICAgICAga3JlZl9nZXQoJnUxMzItPmtyZWYpOworICAgICAgICB1MTMyX3JpbmdfcmVxdWV1ZV93b3JrKHUxMzIsIHJpbmcsIGRlbHRhKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB1MTMyX3JpbmdfY2FuY2VsX3dvcmsoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcpCit7CisgICAgICAgIGlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZyaW5nLT5zY2hlZHVsZXIpKSB7CisgICAgICAgICAgICAgICAga3JlZl9wdXQoJnUxMzItPmtyZWYsIHUxMzJfaGNkX2RlbGV0ZSk7CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdTEzMl9lbmRwX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGtyZWZfdG9fdTEzMl9lbmRwKGtyZWYpOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IHVzYl9hZGRyID0gZW5kcC0+dXNiX2FkZHI7CisgICAgICAgIHU4IHVzYl9lbmRwID0gZW5kcC0+dXNiX2VuZHA7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW3VzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBzdHJ1Y3QgdTEzMl91ZGV2ICp1ZGV2ID0gJnUxMzItPnVkZXZbYWRkcmVzc107CisgICAgICAgIHU4IGVuZHBfbnVtYmVyID0gZW5kcC0+ZW5kcF9udW1iZXI7CisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwID0gZW5kcC0+aGVwOworICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZW5kcC0+cmluZzsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZlbmRwLT5lbmRwX3Jpbmc7CisgICAgICAgIHJpbmctPmxlbmd0aCAtPSAxOworICAgICAgICBpZiAoZW5kcCA9PSByaW5nLT5jdXJyX2VuZHApIHsKKyAgICAgICAgICAgICAgICBpZiAobGlzdF9lbXB0eShoZWFkKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsKGhlYWQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICpuZXh0X2VuZHAgPSBsaXN0X2VudHJ5KGhlYWQtPm5leHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAsIGVuZHBfcmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5jdXJyX2VuZHAgPSBuZXh0X2VuZHA7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2RlbChoZWFkKTsKKyAgICAgICAgfX0gZWxzZQorICAgICAgICAgICAgICAgIGxpc3RfZGVsKGhlYWQpOworICAgICAgICBpZiAoZW5kcC0+aW5wdXQpIHsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9pblt1c2JfZW5kcF0gPSAwOworICAgICAgICAgICAgICAgIHUxMzJfdWRldl9wdXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZW5kcC0+b3V0cHV0KSB7CisgICAgICAgICAgICAgICAgdWRldi0+ZW5kcF9udW1iZXJfb3V0W3VzYl9lbmRwXSA9IDA7CisgICAgICAgICAgICAgICAgdTEzMl91ZGV2X3B1dF9rcmVmKHUxMzIsIHVkZXYpOworICAgICAgICB9CisgICAgICAgIHUxMzItPmVuZHBbZW5kcF9udW1iZXIgLSAxXSA9IE5VTEw7CisgICAgICAgIGhlcC0+aGNwcml2ID0gTlVMTDsKKyAgICAgICAga2ZyZWUoZW5kcCk7CisgICAgICAgIHUxMzJfdTEzMl9wdXRfa3JlZih1MTMyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHUxMzJfZW5kcF9wdXRfa3JlZihzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCkKK3sKKyAgICAgICAga3JlZl9wdXQoJmVuZHAtPmtyZWYsIHUxMzJfZW5kcF9kZWxldGUpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdTEzMl9lbmRwX2dldF9rcmVmKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwKQoreworICAgICAgICBrcmVmX2dldCgmZW5kcC0+a3JlZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1MTMyX2VuZHBfaW5pdF9rcmVmKHN0cnVjdCB1MTMyICp1MTMyLAorICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwKQoreworICAgICAgICBrcmVmX2luaXQoJmVuZHAtPmtyZWYpOworICAgICAgICBrcmVmX2dldCgmdTEzMi0+a3JlZik7Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLAorICAgICAgICB1bnNpZ25lZCBpbnQgZGVsdGEpCit7CisgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocXVldWVfZGVsYXllZF93b3JrKHdvcmtxdWV1ZSwgJmVuZHAtPnNjaGVkdWxlciwgZGVsdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAga3JlZl9nZXQoJmVuZHAtPmtyZWYpOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlX3dvcmsod29ya3F1ZXVlLCAmZW5kcC0+c2NoZWR1bGVyKSkKKyAgICAgICAgICAgICAgICBrcmVmX2dldCgmZW5kcC0+a3JlZik7CisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgdTEzMl9lbmRwX2NhbmNlbF93b3JrKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwKQoreworICAgICAgICBpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmZW5kcC0+c2NoZWR1bGVyKSkKKyAgICAgICAgICAgICAgICBrcmVmX3B1dCgmZW5kcC0+a3JlZiwgdTEzMl9lbmRwX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB1MTMyX21vbml0b3JfcHV0X2tyZWYoc3RydWN0IHUxMzIgKnUxMzIpCit7CisgICAgICAgIGtyZWZfcHV0KCZ1MTMyLT5rcmVmLCB1MTMyX2hjZF9kZWxldGUpOworfQorCitzdGF0aWMgdm9pZCB1MTMyX21vbml0b3JfcXVldWVfd29yayhzdHJ1Y3QgdTEzMiAqdTEzMiwgdW5zaWduZWQgaW50IGRlbHRhKQoreworICAgICAgICBpZiAoZGVsdGEgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayh3b3JrcXVldWUsICZ1MTMyLT5tb25pdG9yLCBkZWx0YSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtyZWZfZ2V0KCZ1MTMyLT5rcmVmKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayh3b3JrcXVldWUsICZ1MTMyLT5tb25pdG9yKSkKKyAgICAgICAgICAgICAgICBrcmVmX2dldCgmdTEzMi0+a3JlZik7CisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgdTEzMl9tb25pdG9yX3JlcXVldWVfd29yayhzdHJ1Y3QgdTEzMiAqdTEzMiwgdW5zaWduZWQgaW50IGRlbHRhKQoreworICAgICAgICBpZiAoZGVsdGEgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayh3b3JrcXVldWUsICZ1MTMyLT5tb25pdG9yLCBkZWx0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayh3b3JrcXVldWUsICZ1MTMyLT5tb25pdG9yKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGtyZWZfcHV0KCZ1MTMyLT5rcmVmLCB1MTMyX2hjZF9kZWxldGUpOworICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfbW9uaXRvcl9jYW5jZWxfd29yayhzdHJ1Y3QgdTEzMiAqdTEzMikKK3sKKyAgICAgICAgaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJnUxMzItPm1vbml0b3IpKQorICAgICAgICAgICAgICAgIGtyZWZfcHV0KCZ1MTMyLT5rcmVmLCB1MTMyX2hjZF9kZWxldGUpOworfQorCitzdGF0aWMgaW50IHJlYWRfcm9vdGh1Yl9pbmZvKHN0cnVjdCB1MTMyICp1MTMyKQoreworICAgICAgICB1MzIgcmV2aXNpb247CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgcmV2aXNpb24sICZyZXZpc2lvbik7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImVycm9yICVkIGFjY2Vzc2luZyBkZXZpY2UgY28iCisgICAgICAgICAgICAgICAgICAgICAgICAibnRyb2xcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfSBlbHNlIGlmICgocmV2aXNpb24gJiAweEZGKSA9PSAweDEwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoKHJldmlzaW9uICYgMHhGRikgPT0gMHgxMSkgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIHJldmlzaW9uIGlzIG5vdCB2YWxpZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgJTA4WFxuIiwgcmV2aXNpb24pOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY29udHJvbCwgJnUxMzItPmhjX2NvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJlcnJvciAlZCBhY2Nlc3NpbmcgZGV2aWNlIGNvIgorICAgICAgICAgICAgICAgICAgICAgICAgIm50cm9sXG4iLCByZXR2YWwpOworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCByb290aHViLnN0YXR1cywKKyAgICAgICAgICAgICAgICAmdTEzMi0+aGNfcm9vdGh1Yl9zdGF0dXMpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJlcnJvciAlZCBhY2Nlc3NpbmcgZGV2aWNlIHJlIgorICAgICAgICAgICAgICAgICAgICAgICAgImcgcm9vdGh1Yi5zdGF0dXNcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIHJvb3RodWIuYSwgJnUxMzItPmhjX3Jvb3RodWJfYSk7CisgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImVycm9yICVkIGFjY2Vzc2luZyBkZXZpY2UgcmUiCisgICAgICAgICAgICAgICAgICAgICAgICAiZyByb290aHViLmFcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IEkgPSB1MTMyLT5udW1fcG9ydHM7CisgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChJLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIHJvb3RodWIucG9ydHN0YXR1c1tpXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnUxMzItPmhjX3Jvb3RodWJfcG9ydHN0YXR1c1tpXSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZXJyb3IgJWQgYWNjIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlc3NpbmcgZGV2aWNlIHJvb3RodWIucG9ydHN0YXR1c1slZF1cbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAsIHJldHZhbCwgaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSArPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfbW9uaXRvcl93b3JrKHZvaWQgKmRhdGEpCit7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gZGF0YTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHUxMzJfbW9uaXRvcl9wdXRfa3JlZih1MTMyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZFxuIik7CisgICAgICAgICAgICAgICAgdTEzMl9tb25pdG9yX3B1dF9rcmVmKHUxMzIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgIGRvd24oJnUxMzItPnN3X2xvY2spOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlYWRfcm9vdGh1Yl9pbmZvKHUxMzIpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfaGNkICpoY2QgPSB1MTMyX3RvX2hjZCh1MTMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZGlzYWJsZSh1MTMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzItPmdvaW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9oY19kaWVkKGhjZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZ29uZV9hd2F5KHUxMzItPnBsYXRmb3JtX2Rldik7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX21vbml0b3JfcHV0X2tyZWYodTEzMik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfbW9uaXRvcl9yZXF1ZXVlX3dvcmsodTEzMiwgNTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLAorICAgICAgICBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxczsKKyAgICAgICAgc3RydWN0IHVzYl9oY2QgKmhjZCA9IHUxMzJfdG9faGNkKHUxMzIpOworICAgICAgICB1cmItPmVycm9yX2NvdW50ID0gMDsKKyAgICAgICAgdXJiLT5zdGF0dXMgPSBzdGF0dXM7CisgICAgICAgIHVyYi0+aGNwcml2ID0gTlVMTDsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0ICs9IDE7CisgICAgICAgIGlmIChFTkRQX1FVRVVFX1NJWkUgPiAtLWVuZHAtPnF1ZXVlX3NpemUpIHsKKyAgICAgICAgICAgICAgICBlbmRwLT5hY3RpdmUgPSAwOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQgPSBlbmRwLT51cmJfbW9yZS5uZXh0OworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3VyYnEgKnVyYnEgPSBsaXN0X2VudHJ5KG5leHQsIHN0cnVjdCB1MTMyX3VyYnEsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmJfbW9yZSk7CisgICAgICAgICAgICAgICAgbGlzdF9kZWwobmV4dCk7CisgICAgICAgICAgICAgICAgZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYgZW5kcC0+cXVldWVfbGFzdCsrXSA9CisgICAgICAgICAgICAgICAgICAgICAgICB1cmJxLT51cmI7CisgICAgICAgICAgICAgICAgZW5kcC0+YWN0aXZlID0gMDsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLCBpcnFzKTsKKyAgICAgICAgICAgICAgICBrZnJlZSh1cmJxKTsKKyAgICAgICAgfSBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIHJpbmcgPSBlbmRwLT5yaW5nOworICAgICAgICByaW5nLT5pbl91c2UgPSAwOworICAgICAgICB1MTMyX3JpbmdfY2FuY2VsX3dvcmsodTEzMiwgcmluZyk7CisgICAgICAgIHUxMzJfcmluZ19xdWV1ZV93b3JrKHUxMzIsIHJpbmcsIDApOworICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICB1MTMyX2VuZHBfcHV0X2tyZWYodTEzMiwgZW5kcCk7CisgICAgICAgIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCB1MTMyX2hjZF9mb3JnZXRfdXJiKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLAorICAgICAgICBzdHJ1Y3QgdXJiICp1cmIsIGludCBzdGF0dXMpCit7CisgICAgICAgIHUxMzJfZW5kcF9wdXRfa3JlZih1MTMyLCBlbmRwKTsKK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfYWJhbmRvbl91cmIoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAsCisgICAgICAgIHN0cnVjdCB1cmIgKnVyYiwgaW50IHN0YXR1cykKK3sKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpcnFzOworICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdTEzMl90b19oY2QodTEzMik7CisgICAgICAgIHVyYi0+ZXJyb3JfY291bnQgPSAwOworICAgICAgICB1cmItPnN0YXR1cyA9IHN0YXR1czsKKyAgICAgICAgdXJiLT5oY3ByaXYgPSBOVUxMOworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgIGVuZHAtPnF1ZXVlX25leHQgKz0gMTsKKyAgICAgICAgaWYgKEVORFBfUVVFVUVfU0laRSA+IC0tZW5kcC0+cXVldWVfc2l6ZSkgeworICAgICAgICAgICAgICAgIGVuZHAtPmFjdGl2ZSA9IDA7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCA9IGVuZHAtPnVyYl9tb3JlLm5leHQ7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdXJicSAqdXJicSA9IGxpc3RfZW50cnkobmV4dCwgc3RydWN0IHUxMzJfdXJicSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYl9tb3JlKTsKKyAgICAgICAgICAgICAgICBsaXN0X2RlbChuZXh0KTsKKyAgICAgICAgICAgICAgICBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJiBlbmRwLT5xdWV1ZV9sYXN0KytdID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYnEtPnVyYjsKKyAgICAgICAgICAgICAgICBlbmRwLT5hY3RpdmUgPSAwOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgIGtmcmVlKHVyYnEpOworICAgICAgICB9IHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCBOVUxMKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW5saW5lIGludCBlZHNldF9pbnB1dChzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfcmluZyAqcmluZywKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQoreworICAgICAgICByZXR1cm4gdXNiX2Z0ZGlfZWxhbl9lZHNldF9pbnB1dCh1MTMyLT5wbGF0Zm9ybV9kZXYsIHJpbmctPm51bWJlciwgZW5kcCwKKyAgICAgICAgICAgICAgICAgdXJiLCBhZGRyZXNzLCBlbmRwLT51c2JfZW5kcCwgdG9nZ2xlX2JpdHMsIGNhbGxiYWNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWRzZXRfc2V0dXAoc3RydWN0IHUxMzIgKnUxMzIsIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcsCisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggdG9nZ2xlX2JpdHMsCisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisgICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKK3sKKyAgICAgICAgcmV0dXJuIHVzYl9mdGRpX2VsYW5fZWRzZXRfc2V0dXAodTEzMi0+cGxhdGZvcm1fZGV2LCByaW5nLT5udW1iZXIsIGVuZHAsCisgICAgICAgICAgICAgICAgIHVyYiwgYWRkcmVzcywgZW5kcC0+dXNiX2VuZHAsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGVkc2V0X3NpbmdsZShzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfcmluZyAqcmluZywKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQoreworICAgICAgICByZXR1cm4gdXNiX2Z0ZGlfZWxhbl9lZHNldF9zaW5nbGUodTEzMi0+cGxhdGZvcm1fZGV2LCByaW5nLT5udW1iZXIsCisgICAgICAgICAgICAgICAgZW5kcCwgdXJiLCBhZGRyZXNzLCBlbmRwLT51c2JfZW5kcCwgdG9nZ2xlX2JpdHMsIGNhbGxiYWNrKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgZWRzZXRfb3V0cHV0KHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nLAorICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHJldHVybiB1c2JfZnRkaV9lbGFuX2Vkc2V0X291dHB1dCh1MTMyLT5wbGF0Zm9ybV9kZXYsIHJpbmctPm51bWJlciwKKyAgICAgICAgICAgICAgICBlbmRwLCB1cmIsIGFkZHJlc3MsIGVuZHAtPnVzYl9lbmRwLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworfQorCisKKy8qCisqIG11c3Qgbm90IExPQ0sgc3dfbG9jaworKgorKi8KK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2ludGVycnVwdF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBzdHJ1Y3QgdTEzMl91ZGV2ICp1ZGV2ID0gJnUxMzItPnVkZXZbYWRkcmVzc107CisgICAgICAgIGRvd24oJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZm9yZ2V0X3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRwLT5kZXF1ZXVlaW5nKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+ZGVxdWV1ZWluZyA9IDA7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRUlOVFIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkIHVyYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXAgc3RhdHVzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZW5kcC0+cmluZzsKKyAgICAgICAgICAgICAgICB1OCAqdSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICAgICAgICAgIHU4ICpiID0gYnVmOworICAgICAgICAgICAgICAgIGludCBMID0gbGVuOworICAgICAgICAgICAgICAgIHdoaWxlIChMLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAqdSsrID0gKmIrKzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKKyAgICAgICAgICAgICAgICBpZiAoKGNvbmRpdGlvbl9jb2RlID09IFREX0NDX05PRVJST1IpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAodXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID4gdXJiLT5hY3R1YWxfbGVuZ3RoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMgPSB0b2dnbGVfYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgJiB0b2dnbGVfYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBlZHNldF9zaW5nbGUodTEzMiwgcmluZywgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIGVuZHAtPnRvZ2dsZV9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ludGVycnVwdF9yZWN2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+aW5fdXNlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+YWN0aXZlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+amlmZmllcyA9IGppZmZpZXMgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZWNzX3RvX2ppZmZpZXModXJiLT5pbnRlcnZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfcmluZ19jYW5jZWxfd29yayh1MTMyLCByaW5nKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9yaW5nX3F1ZXVlX3dvcmsodTEzMiwgcmluZywgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9wdXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjb25kaXRpb25fY29kZSA9PSBURF9EQVRBVU5ERVJSVU4pICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfU0hPUlRfTk9UX09LKSA9PSAwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMgPSB0b2dnbGVfYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgJiB0b2dnbGVfYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25kaXRpb25fY29kZSA9PSBURF9DQ19OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnRvZ2dsZV9iaXRzID0gdG9nZ2xlX2JpdHM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMSAmIHRvZ2dsZV9iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29uZGl0aW9uX2NvZGUgPT0gVERfQ0NfU1RBTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMgPSAweDI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IDB4MjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCBlbmRwLT51c2JfZW5kcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJ1cmI9JXAgZ2l2aW4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImcgYmFjayBJTlRFUlJVUFQgJXNcbiIsIHVyYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY190b190ZXh0W2NvbmRpdGlvbl9jb2RlXSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2NfdG9fZXJyb3JbY29uZGl0aW9uX2NvZGVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJDQUxMQkFDSyBjYWxsZWQgdXJiPSVwIHN0YXR1IgorICAgICAgICAgICAgICAgICAgICAgICAgInM9JWRcbiIsIHVyYiwgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCB1MTMyX2hjZF9idWxrX291dHB1dF9zZW50KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZyA9IGVuZHAtPnJpbmc7CisgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoICs9IGxlbjsKKyAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IHRvZ2dsZV9iaXRzOworICAgICAgICAgICAgICAgIGlmICh1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZWRzZXRfb3V0cHV0KHUxMzIsIHJpbmcsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMsIHUxMzJfaGNkX2J1bGtfb3V0cHV0X3NlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2J1bGtfaW5wdXRfcmVjdih2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsCisgICAgICAgIGludCBsZW4sIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsCisgICAgICAgIGludCByZXBlYXRfbnVtYmVyLCBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKQoreworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gZGF0YTsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBlbmRwLT51MTMyOworICAgICAgICB1OCBhZGRyZXNzID0gdTEzMi0+YWRkcltlbmRwLT51c2JfYWRkcl0uYWRkcmVzczsKKyAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiA9ICZ1MTMyLT51ZGV2W2FkZHJlc3NdOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZyA9IGVuZHAtPnJpbmc7CisgICAgICAgICAgICAgICAgdTggKnUgPSB1cmItPnRyYW5zZmVyX2J1ZmZlciArIHVyYi0+YWN0dWFsX2xlbmd0aDsKKyAgICAgICAgICAgICAgICB1OCAqYiA9IGJ1ZjsKKyAgICAgICAgICAgICAgICBpbnQgTCA9IGxlbjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoTC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnUrKyA9ICpiKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCArPSBsZW47CisgICAgICAgICAgICAgICAgaWYgKChjb25kaXRpb25fY29kZSA9PSBURF9DQ19OT0VSUk9SKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA+IHVyYi0+YWN0dWFsX2xlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IHRvZ2dsZV9iaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCBlbmRwLT51c2JfZW5kcCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAmIHRvZ2dsZV9iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1c2JfZnRkaV9lbGFuX2Vkc2V0X2lucHV0KHUxMzItPnBsYXRmb3JtX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnVzYl9lbmRwLCBlbmRwLT50b2dnbGVfYml0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfYnVsa19pbnB1dF9yZWN2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25fY29kZSA9PSBURF9DQ19OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IHRvZ2dsZV9iaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCBlbmRwLT51c2JfZW5kcCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAmIHRvZ2dsZV9iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY190b19lcnJvcltjb25kaXRpb25fY29kZV0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvbmRpdGlvbl9jb2RlID09IFREX0RBVEFVTkRFUlJVTikgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICgodXJiLT50cmFuc2Zlcl9mbGFncyAmIFVSQl9TSE9SVF9OT1RfT0spID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IHRvZ2dsZV9iaXRzOworICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCBlbmRwLT51c2JfZW5kcCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSAmIHRvZ2dsZV9iaXRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbl9jb2RlID09IFREX0RBVEFVTkRFUlJVTikgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMgPSB0b2dnbGVfYml0czsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgJiB0b2dnbGVfYml0cyk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfd2FybigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJ1cmI9JXAoU0hPUlQgTk9UIE9LIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSBnaXZpbmcgYmFjayBCVUxLIElOICVzXG4iLCB1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjX3RvX3RleHRbY29uZGl0aW9uX2NvZGVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbmRpdGlvbl9jb2RlID09IFREX0NDX1NUQUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IDB4MjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgZW5kcC0+dXNiX2VuZHAsIDAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjX3RvX2Vycm9yW2NvbmRpdGlvbl9jb2RlXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnRvZ2dsZV9iaXRzID0gMHgyOworICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCBlbmRwLT51c2JfZW5kcCwgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInVyYj0lcCBnaXZpbmcgYmFjayBCIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVUxLIElOIGNvZGU9JWQgJXNcbiIsIHVyYiwgY29uZGl0aW9uX2NvZGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjX3RvX3RleHRbY29uZGl0aW9uX2NvZGVdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY190b19lcnJvcltjb25kaXRpb25fY29kZV0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2NvbmZpZ3VyZV9lbXB0eV9zZW50KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIGRvd24oJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZm9yZ2V0X3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRwLT5kZXF1ZXVlaW5nKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+ZGVxdWV1ZWluZyA9IDA7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRUlOVFIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkIHVyYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXAgc3RhdHVzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2NvbmZpZ3VyZV9pbnB1dF9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZyA9IGVuZHAtPnJpbmc7CisgICAgICAgICAgICAgICAgdTggKnUgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICB1OCAqYiA9IGJ1ZjsKKyAgICAgICAgICAgICAgICBpbnQgTCA9IGxlbjsKKyAgICAgICAgICAgICAgICB3aGlsZSAoTC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgKnUrKyA9ICpiKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVyYi0+YWN0dWFsX2xlbmd0aCA9IGxlbjsKKyAgICAgICAgICAgICAgICBpZiAoKGNvbmRpdGlvbl9jb2RlID09IFREX0NDX05PRVJST1IpIHx8ICgoY29uZGl0aW9uX2NvZGUgPT0KKyAgICAgICAgICAgICAgICAgICAgICAgIFREX0RBVEFVTkRFUlJVTikgJiYgKCh1cmItPnRyYW5zZmVyX2ZsYWdzICYKKyAgICAgICAgICAgICAgICAgICAgICAgIFVSQl9TSE9SVF9OT1RfT0spID09IDApKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1c2JfZnRkaV9lbGFuX2Vkc2V0X2VtcHR5KHUxMzItPnBsYXRmb3JtX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnVzYl9lbmRwLCAweDMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2NvbmZpZ3VyZV9lbXB0eV9zZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb25kaXRpb25fY29kZSA9PSBURF9DQ19TVEFMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl93YXJuKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImdpdmluZyBiYWNrIFNFVFVQIEkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOUFVUIFNUQUxMIHVyYiAlcFxuIiwgdXJiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNjX3RvX2Vycm9yW2NvbmRpdGlvbl9jb2RlXSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImdpdmluZyBiYWNrIFNFVFVQIElOIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUFVUICVzIHVyYiAlcFxuIiwgY2NfdG9fdGV4dFtjb25kaXRpb25fY29kZV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYik7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY190b19lcnJvcltjb25kaXRpb25fY29kZV0pOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2NvbmZpZ3VyZV9lbXB0eV9yZWN2KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIGRvd24oJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZm9yZ2V0X3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRwLT5kZXF1ZXVlaW5nKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+ZGVxdWV1ZWluZyA9IDA7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRUlOVFIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkIHVyYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXAgc3RhdHVzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2NvbmZpZ3VyZV9zZXR1cF9zZW50KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcgPSBlbmRwLT5yaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9mdGRpX2VsYW5fZWRzZXRfaW5wdXQodTEzMi0+cGxhdGZvcm1fZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dXNiX2VuZHAsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2NvbmZpZ3VyZV9pbnB1dF9yZWN2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZW5kcC0+cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1c2JfZnRkaV9lbGFuX2Vkc2V0X2lucHV0KHUxMzItPnBsYXRmb3JtX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnVzYl9lbmRwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9jb25maWd1cmVfZW1wdHlfcmVjdik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2VudW1lcmF0aW9uX2VtcHR5X3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiLAorICAgICAgICB1OCAqYnVmLCBpbnQgbGVuLCBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLAorICAgICAgICBpbnQgcmVwZWF0X251bWJlciwgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGRhdGE7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gZW5kcC0+dTEzMjsKKyAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbZW5kcC0+dXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYgPSAmdTEzMi0+dWRldlthZGRyZXNzXTsKKyAgICAgICAgZG93bigmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAxKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9mb3JnZXRfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVOT0RFVik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKGVuZHAtPmRlcXVldWVpbmcpIHsKKyAgICAgICAgICAgICAgICBlbmRwLT5kZXF1ZXVlaW5nID0gMDsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FSU5UUik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHUxMzItPmdvaW5nID4gMCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWQgdXJiPSIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcCBzdGF0dXM9JWRcbiIsIHVyYiwgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVOT0RFVik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHVyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworICAgICAgICAgICAgICAgIHUxMzItPmFkZHJbMF0uYWRkcmVzcyA9IDA7CisgICAgICAgICAgICAgICAgZW5kcC0+dXNiX2FkZHIgPSB1ZGV2LT51c2JfYWRkcjsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIDApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2VudW1lcmF0aW9uX2FkZHJlc3Nfc2VudCh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgICAgIHU4ICpidWYsIGludCBsZW4sIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsCisgICAgICAgIGludCByZXBlYXRfbnVtYmVyLCBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKQoreworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gZGF0YTsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBlbmRwLT51MTMyOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZW5kcC0+cmluZzsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9mdGRpX2VsYW5fZWRzZXRfaW5wdXQodTEzMi0+cGxhdGZvcm1fZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwLCB1cmIsIDAsIGVuZHAtPnVzYl9lbmRwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfZW51bWVyYXRpb25fZW1wdHlfcmVjdik7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCByZXR2YWwpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIkNBTExCQUNLIGNhbGxlZCB1cmI9JXAgc3RhdHUiCisgICAgICAgICAgICAgICAgICAgICAgICAicz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2luaXRpYWxfZW1wdHlfc2VudCh2b2lkICpkYXRhLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsCisgICAgICAgIGludCBsZW4sIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsCisgICAgICAgIGludCByZXBlYXRfbnVtYmVyLCBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKQoreworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gZGF0YTsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBlbmRwLT51MTMyOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJDQUxMQkFDSyBjYWxsZWQgdXJiPSVwIHN0YXR1IgorICAgICAgICAgICAgICAgICAgICAgICAgInM9JWRcbiIsIHVyYiwgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgdXJiLT5zdGF0dXMpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCB1MTMyX2hjZF9pbml0aWFsX2lucHV0X3JlY3Yodm9pZCAqZGF0YSwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLAorICAgICAgICBpbnQgbGVuLCBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLAorICAgICAgICBpbnQgcmVwZWF0X251bWJlciwgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGRhdGE7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gZW5kcC0+dTEzMjsKKyAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbZW5kcC0+dXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgIGRvd24oJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZm9yZ2V0X3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRwLT5kZXF1ZXVlaW5nKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+ZGVxdWV1ZWluZyA9IDA7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRUlOVFIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkIHVyYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXAgc3RhdHVzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIC1FTk9ERVYpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmICh1cmItPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmcgPSBlbmRwLT5yaW5nOworICAgICAgICAgICAgICAgIHU4ICp1ID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisgICAgICAgICAgICAgICAgdTggKmIgPSBidWY7CisgICAgICAgICAgICAgICAgaW50IEwgPSBsZW47CisgICAgICAgICAgICAgICAgd2hpbGUgKEwtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICp1KysgPSAqYisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGggPSBsZW47CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1c2JfZnRkaV9lbGFuX2Vkc2V0X2VtcHR5KHUxMzItPnBsYXRmb3JtX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPm51bWJlciwgZW5kcCwgdXJiLCBhZGRyZXNzLCBlbmRwLT51c2JfZW5kcCwgMHgzLAorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfaW5pdGlhbF9lbXB0eV9zZW50KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiQ0FMTEJBQ0sgY2FsbGVkIHVyYj0lcCBzdGF0dSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfaW5pdGlhbF9zZXR1cF9zZW50KHZvaWQgKmRhdGEsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwKKyAgICAgICAgaW50IGxlbiwgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpCit7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBkYXRhOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGVuZHAtPnUxMzI7CisgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2ZvcmdldF91cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+ZGVxdWV1ZWluZykgeworICAgICAgICAgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgLUVJTlRSKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZCB1cmI9IgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwIHN0YXR1cz0lZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCAtRU5PREVWKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAodXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZW5kcC0+cmluZzsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9mdGRpX2VsYW5fZWRzZXRfaW5wdXQodTEzMi0+cGxhdGZvcm1fZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsIGVuZHAtPnVzYl9lbmRwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfaW5pdGlhbF9pbnB1dF9yZWN2KTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiQ0FMTEJBQ0sgY2FsbGVkIHVyYj0lcCBzdGF0dSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfcmluZ193b3JrX3NjaGVkdWxlcih2b2lkICpkYXRhKTsKK3N0YXRpYyB2b2lkIHUxMzJfaGNkX2VuZHBfd29ya19zY2hlZHVsZXIodm9pZCAqZGF0YSk7CisvKgorKiB0aGlzIHdvcmsgZnVuY3Rpb24gaXMgb25seSBleGVjdXRlZCBmcm9tIHRoZSB3b3JrIHF1ZXVlCisqCisqLworc3RhdGljIHZvaWQgdTEzMl9oY2RfcmluZ193b3JrX3NjaGVkdWxlcih2b2lkICpkYXRhKQoreworICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gZGF0YTsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSByaW5nLT51MTMyOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIGlmIChyaW5nLT5pbl91c2UpIHsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfcmluZ19wdXRfa3JlZih1MTMyLCByaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAocmluZy0+Y3Vycl9lbmRwKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqbGFzdF9lbmRwID0gcmluZy0+Y3Vycl9lbmRwOworICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnNjYW47CisgICAgICAgICAgICAgICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9ICZsYXN0X2VuZHAtPmVuZHBfcmluZzsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHdha2V1cCA9IDA7CisgICAgICAgICAgICAgICAgbGlzdF9mb3JfZWFjaChzY2FuLCBoZWFkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gbGlzdF9lbnRyeShzY2FuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwLCBlbmRwX3JpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZHAtPnF1ZXVlX25leHQgPT0gZW5kcC0+cXVldWVfbGFzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgoZW5kcC0+ZGVsYXllZCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsIGVuZHAtPmppZmZpZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPmN1cnJfZW5kcCA9IGVuZHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9jYW5jZWxfd29yayh1MTMyLCBsYXN0X2VuZHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfcXVldWVfd29yayh1MTMyLCBsYXN0X2VuZHAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX3JpbmdfcHV0X2tyZWYodTEzMiwgcmluZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZGVsdGEgPSBlbmRwLT5qaWZmaWVzIC0gamlmZmllczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRlbHRhID4gd2FrZXVwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdha2V1cCA9IGRlbHRhOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGFzdF9lbmRwLT5xdWV1ZV9uZXh0ID09IGxhc3RfZW5kcC0+cXVldWVfbGFzdCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGxhc3RfZW5kcC0+ZGVsYXllZCA9PSAwKSB8fCB0aW1lX2FmdGVyX2VxKGppZmZpZXMsCisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X2VuZHAtPmppZmZpZXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfY2FuY2VsX3dvcmsodTEzMiwgbGFzdF9lbmRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHUxMzIsIGxhc3RfZW5kcCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9yaW5nX3B1dF9rcmVmKHUxMzIsIHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGRlbHRhID0gbGFzdF9lbmRwLT5qaWZmaWVzIC0gamlmZmllczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkZWx0YSA+IHdha2V1cCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FrZXVwID0gZGVsdGE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3YWtldXAgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX3JpbmdfcmVxdWV1ZV93b3JrKHUxMzIsIHJpbmcsIHdha2V1cCk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9yaW5nX3B1dF9rcmVmKHUxMzIsIHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfcmluZ19wdXRfa3JlZih1MTMyLCByaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2RfZW5kcF93b3JrX3NjaGVkdWxlcih2b2lkICpkYXRhKQoreworICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nOworICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gZGF0YTsKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBlbmRwLT51MTMyOworICAgICAgICBkb3duKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgIHJpbmcgPSBlbmRwLT5yaW5nOworICAgICAgICBpZiAoZW5kcC0+ZWRzZXRfZmx1c2gpIHsKKyAgICAgICAgICAgICAgICBlbmRwLT5lZHNldF9mbHVzaCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGVuZHAtPmRlcXVldWVpbmcpCisgICAgICAgICAgICAgICAgICAgICAgICB1c2JfZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKHUxMzItPnBsYXRmb3JtX2RldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+bnVtYmVyLCBlbmRwKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9wdXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+YWN0aXZlKSB7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX2VuZHBfcHV0X2tyZWYodTEzMiwgZW5kcCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHJpbmctPmluX3VzZSkgeworICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgdTEzMl9lbmRwX3B1dF9rcmVmKHUxMzIsIGVuZHApOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChlbmRwLT5xdWV1ZV9uZXh0ID09IGVuZHAtPnF1ZXVlX2xhc3QpIHsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9wdXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAoZW5kcC0+cGlwZXR5cGUgPT0gUElQRV9JTlRFUlJVUFQpIHsKKyAgICAgICAgICAgICAgICB1OCBhZGRyZXNzID0gdTEzMi0+YWRkcltlbmRwLT51c2JfYWRkcl0uYWRkcmVzczsKKyAgICAgICAgICAgICAgICBpZiAocmluZy0+aW5fdXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9lbmRwX3B1dF9rcmVmKHUxMzIsIGVuZHApOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVyYiAqdXJiID0gZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+cXVldWVfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5hY3RpdmUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gZW5kcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPmluX3VzZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZWRzZXRfc2luZ2xlKHUxMzIsIHJpbmcsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMsIHUxMzJfaGNkX2ludGVycnVwdF9yZWN2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKGVuZHAtPnBpcGV0eXBlID09IFBJUEVfQ09OVFJPTCkgeworICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW2VuZHAtPnVzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICAgICAgICAgIGlmIChyaW5nLT5pbl91c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfcHV0X2tyZWYodTEzMiwgZW5kcCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChhZGRyZXNzID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXJiICp1cmIgPSBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5jdXJyX2VuZHAgPSBlbmRwOworICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+aW5fdXNlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBlZHNldF9zZXR1cCh1MTMyLCByaW5nLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MiwgdTEzMl9oY2RfaW5pdGlhbF9zZXR1cF9zZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2dpdmViYWNrX3VyYih1MTMyLCBlbmRwLCB1cmIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChlbmRwLT51c2JfYWRkciA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVyYiAqdXJiID0gZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+cXVldWVfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5hY3RpdmUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gZW5kcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPmluX3VzZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZWRzZXRfc2V0dXAodTEzMiwgcmluZywgZW5kcCwgdXJiLCAwLCAweDIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2VudW1lcmF0aW9uX2FkZHJlc3Nfc2VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLCByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbZW5kcC0+dXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXJiICp1cmIgPSBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICByaW5nLT5jdXJyX2VuZHAgPSBlbmRwOworICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+aW5fdXNlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBlZHNldF9zZXR1cCh1MTMyLCByaW5nLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MiwgdTEzMl9oY2RfY29uZmlndXJlX3NldHVwX3NlbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfZ2l2ZWJhY2tfdXJiKHUxMzIsIGVuZHAsIHVyYiwgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKGVuZHAtPmlucHV0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OCBhZGRyZXNzID0gdTEzMi0+YWRkcltlbmRwLT51c2JfYWRkcl0uYWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyaW5nLT5pbl91c2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9lbmRwX3B1dF9rcmVmKHUxMzIsIGVuZHApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXJiICp1cmIgPSBlbmRwLT51cmJfbGlzdFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTkRQX1FVRVVFX01BU0sgJiBlbmRwLT5xdWV1ZV9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+YWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gZW5kcDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmluZy0+aW5fdXNlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAoJnUxMzItPnNjaGVkdWxlcl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gZWRzZXRfaW5wdXQodTEzMiwgcmluZywgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsIGVuZHAtPnRvZ2dsZV9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfaGNkX2J1bGtfaW5wdXRfcmVjdik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAvKiBvdXRwdXQgcGlwZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbZW5kcC0+dXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmluZy0+aW5fdXNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9wdXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVyYiAqdXJiID0gZW5kcC0+dXJiX2xpc3RbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EUF9RVUVVRV9NQVNLICYgZW5kcC0+cXVldWVfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPmN1cnJfZW5kcCA9IGVuZHA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJpbmctPmluX3VzZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zY2hlZHVsZXJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IGVkc2V0X291dHB1dCh1MTMyLCByaW5nLCBlbmRwLCB1cmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgZW5kcC0+dG9nZ2xlX2JpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9oY2RfYnVsa19vdXRwdXRfc2VudCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9naXZlYmFja191cmIodTEzMiwgZW5kcCwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitzdGF0aWMgdm9pZCBwb3J0X3Bvd2VyKHN0cnVjdCB1MTMyICp1MTMyLCBpbnQgcG4sIGludCBpc19vbikKK3sKKyAgICAgICAgdTEzMi0+cG9ydFtwbl0ucG93ZXIgPSBpc19vbjsKK30KKworc3RhdGljIHZvaWQgdTEzMl9wb3dlcihzdHJ1Y3QgdTEzMiAqdTEzMiwgaW50IGlzX29uKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdTEzMl90b19oY2QodTEzMikKKyAgICAgICAgICAgICAgICA7ICAgICAgICAvKiBodWIgaXMgaW5hY3RpdmUgdW5sZXNzIHRoZSBwb3J0IGlzIHBvd2VyZWQgKi8KKyAgICAgICAgaWYgKGlzX29uKSB7CisgICAgICAgICAgICAgICAgaWYgKHUxMzItPnBvd2VyKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIHUxMzItPnBvd2VyID0gMTsKKyAgICAgICAgICAgICAgICBoY2QtPnNlbGYuY29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX09OOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHUxMzItPnBvd2VyID0gMDsKKyAgICAgICAgICAgICAgICBoY2QtPnN0YXRlID0gSENfU1RBVEVfSEFMVDsKKyAgICAgICAgICAgICAgICBoY2QtPnNlbGYuY29udHJvbGxlci0+cG93ZXIucG93ZXJfc3RhdGUgPSBQTVNHX1NVU1BFTkQ7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX3BlcmlvZGljX3JlaW5pdChzdHJ1Y3QgdTEzMiAqdTEzMikKK3sKKyAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgdTMyIGZpID0gdTEzMi0+aGNfZm1pbnRlcnZhbCAmIDB4MDNmZmY7CisgICAgICAgIHUzMiBmaXQ7CisgICAgICAgIHUzMiBmbWludGVydmFsOworICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGZtaW50ZXJ2YWwsICZmbWludGVydmFsKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBmaXQgPSBmbWludGVydmFsICYgRklUOworICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBmbWludGVydmFsLAorICAgICAgICAgICAgICAgIChmaXQgXiBGSVQpIHwgdTEzMi0+aGNfZm1pbnRlcnZhbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgcGVyaW9kaWNzdGFydCwKKyAgICAgICAgICAgICAgICAoKDkgKmZpKSAvIDEwKSAmIDB4M2ZmZik7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjaGFyICpoY2ZzMnN0cmluZyhpbnQgc3RhdGUpCit7CisgICAgICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICAgICAgY2FzZSBPSENJX1VTQl9SRVNFVDoKKyAgICAgICAgICAgICAgICByZXR1cm4gInJlc2V0IjsKKyAgICAgICAgY2FzZSBPSENJX1VTQl9SRVNVTUU6CisgICAgICAgICAgICAgICAgcmV0dXJuICJyZXN1bWUiOworICAgICAgICBjYXNlIE9IQ0lfVVNCX09QRVI6CisgICAgICAgICAgICAgICAgcmV0dXJuICJvcGVyYXRpb25hbCI7CisgICAgICAgIGNhc2UgT0hDSV9VU0JfU1VTUEVORDoKKyAgICAgICAgICAgICAgICByZXR1cm4gInN1c3BlbmQiOworICAgICAgICB9CisgICAgICAgIHJldHVybiAiPyI7Cit9CisKK3N0YXRpYyBpbnQgdTEzMl91c2JfcmVzZXQoc3RydWN0IHUxMzIgKnUxMzIpCit7CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY29udHJvbCwgJnUxMzItPmhjX2NvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHUxMzItPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKyAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgY29udHJvbCwgdTEzMi0+aGNfY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9pbml0KHN0cnVjdCB1MTMyICp1MTMyKQoreworICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICB1MzIgY29udHJvbDsKKyAgICAgICAgdTEzMl9kaXNhYmxlKHUxMzIpOworICAgICAgICB1MTMyLT5uZXh0X3N0YXRlY2hhbmdlID0KKyAgICAgICAgICAgICAgICBqaWZmaWVzOyAvKiBTTU0gb3ducyB0aGUgSEM/IG5vdCBmb3IgbG9uZyEgKi8gIHsKKyAgICAgICAgICAgICAgICB1MzIgY29udHJvbDsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsICZjb250cm9sKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAmIE9IQ0lfQ1RSTF9JUikgeworICAgICAgICAgICAgICAgICAgICAgICAgdTMyIHRlbXAgPSA1MDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIGludHJlbmFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9IQ0lfSU5UUl9PQyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW1fYnl0ZSh1MTMyLCBjbWRzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9IQ0lfT0NSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgY2hlY2s6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRyb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29udHJvbCAmIE9IQ0lfQ1RSTF9JUikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLS10ZW1wID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIlVTQiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSEMgdGFrZW92ZXIgZmFpbGVkIShCSU9TL1NNTSBiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVnKSBjb250cm9sPSUwOFhcbiIsIGNvbnRyb2wpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjaGVjazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfdXNiX3Jlc2V0KHUxMzIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBpbnRyZGlzYWJsZSwgT0hDSV9JTlRSX01JRSk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgaWYgKHUxMzItPm51bV9wb3J0cyA9PSAwKSB7CisgICAgICAgICAgICAgICAgdTMyIHJoX2EgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIHJvb3RodWIuYSwgJnJoX2EpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIHUxMzItPm51bV9wb3J0cyA9IHJoX2EgJiBSSF9BX05EUDsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSByZWFkX3Jvb3RodWJfaW5mbyh1MTMyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgICAgICBpZiAodTEzMi0+bnVtX3BvcnRzID4gTUFYX1UxMzJfUE9SVFMpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKK30KKworCisvKiBTdGFydCBhbiBPSENJIGNvbnRyb2xsZXIsIHNldCB0aGUgQlVTIG9wZXJhdGlvbmFsCisqIHJlc2V0cyBVU0IgYW5kIGNvbnRyb2xsZXIKKyogZW5hYmxlIGludGVycnVwdHMKKyovCitzdGF0aWMgaW50IHUxMzJfcnVuKHN0cnVjdCB1MTMyICp1MTMyKQoreworICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICB1MzIgY29udHJvbDsKKyAgICAgICAgdTMyIHN0YXR1czsKKyAgICAgICAgdTMyIGZtaW50ZXJ2YWw7CisgICAgICAgIHUzMiBwZXJpb2RpY3N0YXJ0OworICAgICAgICB1MzIgY21kc3RhdHVzOworICAgICAgICB1MzIgcm9vdGh1Yl9hOworICAgICAgICBpbnQgbWFzayA9IE9IQ0lfSU5UUl9JTklUOworICAgICAgICBpbnQgZmlyc3QgPSB1MTMyLT5oY19mbWludGVydmFsID09IDA7CisgICAgICAgIGludCBzbGVlcF90aW1lID0gMDsKKyAgICAgICAgaW50IHJlc2V0X3RpbWVvdXQgPSAzMDsgICAgICAgIC8qIC4uLiBhbGxvdyBleHRyYSB0aW1lICovCisgICAgICAgIHUxMzJfZGlzYWJsZSh1MTMyKTsKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICAgICAgdTMyIHRlbXA7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBmbWludGVydmFsLCAmdGVtcCk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgdTEzMi0+aGNfZm1pbnRlcnZhbCA9IHRlbXAgJiAweDNmZmY7CisgICAgICAgICAgICAgICAgaWYgKHUxMzItPmhjX2ZtaW50ZXJ2YWwgIT0gRkkpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdTEzMi0+aGNfZm1pbnRlcnZhbCB8PSBGU01QKHUxMzItPmhjX2ZtaW50ZXJ2YWwpIDw8IDE2OworICAgICAgICB9CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY29udHJvbCwgJnUxMzItPmhjX2NvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGRldl9pbmZvKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInJlc2V0dGluZyBmcm9tIHN0YXRlICclcycsIGNvbnRyb2wgIgorICAgICAgICAgICAgICAgICI9ICUwOFhcbiIsIGhjZnMyc3RyaW5nKHUxMzItPmhjX2NvbnRyb2wgJiBPSENJX0NUUkxfSENGUyksCisgICAgICAgICAgICAgICAgdTEzMi0+aGNfY29udHJvbCk7CisgICAgICAgIHN3aXRjaCAodTEzMi0+aGNfY29udHJvbCAmIE9IQ0lfQ1RSTF9IQ0ZTKSB7CisgICAgICAgIGNhc2UgT0hDSV9VU0JfT1BFUjoKKyAgICAgICAgICAgICAgICBzbGVlcF90aW1lID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBPSENJX1VTQl9TVVNQRU5EOgorICAgICAgICBjYXNlIE9IQ0lfVVNCX1JFU1VNRToKKyAgICAgICAgICAgICAgICB1MTMyLT5oY19jb250cm9sICY9IE9IQ0lfQ1RSTF9SV0M7CisgICAgICAgICAgICAgICAgdTEzMi0+aGNfY29udHJvbCB8PSBPSENJX1VTQl9SRVNVTUU7CisgICAgICAgICAgICAgICAgc2xlZXBfdGltZSA9IDEwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHUxMzItPmhjX2NvbnRyb2wgJj0gT0hDSV9DVFJMX1JXQzsKKyAgICAgICAgICAgICAgICB1MTMyLT5oY19jb250cm9sIHw9IE9IQ0lfVVNCX1JFU0VUOworICAgICAgICAgICAgICAgIHNsZWVwX3RpbWUgPSA1MDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBjb250cm9sLCB1MTMyLT5oY19jb250cm9sKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsICZjb250cm9sKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBtc2xlZXAoc2xlZXBfdGltZSk7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgcm9vdGh1Yi5hLCAmcm9vdGh1Yl9hKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBpZiAoIShyb290aHViX2EgJiBSSF9BX05QUykpIHsKKyAgICAgICAgICAgICAgICBpbnQgdGVtcDsgICAgICAgIC8qIHBvd2VyIGRvd24gZWFjaCBwb3J0ICovCisgICAgICAgICAgICAgICAgZm9yICh0ZW1wID0gMDsgdGVtcCA8IHUxMzItPm51bV9wb3J0czsgdGVtcCsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290aHViLnBvcnRzdGF0dXNbdGVtcF0sIFJIX1BTX0xTREEpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgIHJldHJ5OnJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY21kc3RhdHVzLCAmc3RhdHVzKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbV9ieXRlKHUxMzIsIGNtZHN0YXR1cywgT0hDSV9IQ1IpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICBleHRyYTp7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjbWRzdGF0dXMsICZzdGF0dXMpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIGlmICgwICE9IChzdGF0dXMgJiBPSENJX0hDUikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtLXJlc2V0X3RpbWVvdXQgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIlVTQiBIQyByZXNldCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHRpbWVkIG91dCFcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBleHRyYTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHUxMzItPmZsYWdzICYgT0hDSV9RVUlSS19JTklUUkVTRVQpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBjb250cm9sLCB1MTMyLT5oY19jb250cm9sKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGNvbnRyb2wsICZjb250cm9sKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBlZF9jb250cm9saGVhZCwgMHgwMDAwMDAwMCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgZWRfYnVsa2hlYWQsIDB4MTEwMDAwMDApOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIGhjY2EsIDB4MDAwMDAwMDApOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcGVyaW9kaWNfcmVpbml0KHUxMzIpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgZm1pbnRlcnZhbCwgJmZtaW50ZXJ2YWwpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgcGVyaW9kaWNzdGFydCwgJnBlcmlvZGljc3RhcnQpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIGlmICgwID09IChmbWludGVydmFsICYgMHgzZmZmMDAwMCkgfHwgMCA9PSBwZXJpb2RpY3N0YXJ0KSB7CisgICAgICAgICAgICAgICAgaWYgKCEodTEzMi0+ZmxhZ3MgJiBPSENJX1FVSVJLX0lOSVRSRVNFVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzItPmZsYWdzIHw9IE9IQ0lfUVVJUktfSU5JVFJFU0VUOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXRyeTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiaW5pdCBlcnIoJTA4eCAlMDR4KSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuIiwgZm1pbnRlcnZhbCwgcGVyaW9kaWNzdGFydCk7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAvKiBzdGFydCBjb250cm9sbGVyIG9wZXJhdGlvbnMgKi8KKyAgICAgICAgdTEzMi0+aGNfY29udHJvbCAmPSBPSENJX0NUUkxfUldDOworICAgICAgICB1MTMyLT5oY19jb250cm9sIHw9IE9IQ0lfQ09OVFJPTF9JTklUIHwgT0hDSV9DVFJMX0JMRSB8IE9IQ0lfVVNCX09QRVI7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIGNvbnRyb2wsIHUxMzItPmhjX2NvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtX2J5dGUodTEzMiwgY21kc3RhdHVzLCBPSENJX0JMRik7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjbWRzdGF0dXMsICZjbWRzdGF0dXMpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgY29udHJvbCwgJmNvbnRyb2wpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHUxMzJfdG9faGNkKHUxMzIpLT5zdGF0ZSA9IEhDX1NUQVRFX1JVTk5JTkc7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIHJvb3RodWIuc3RhdHVzLCBSSF9IU19EUldFKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBpbnRyc3RhdHVzLCBtYXNrKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCBpbnRyZGlzYWJsZSwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfTUlFIHwgT0hDSV9JTlRSX09DIHwgT0hDSV9JTlRSX1JIU0MgfCBPSENJX0lOVFJfRk5PIHwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfVUUgfCBPSENJX0lOVFJfUkQgfCBPSENJX0lOVFJfU0YgfCBPSENJX0lOVFJfV0RIIHwKKyAgICAgICAgICAgICAgICBPSENJX0lOVFJfU08pOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7ICAgICAgICAvKiBoYW5kbGUgcm9vdCBodWIgaW5pdCBxdWlya3MgLi4uICovCisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgcm9vdGh1Yi5hLCAmcm9vdGh1Yl9hKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICByb290aHViX2EgJj0gfihSSF9BX1BTTSB8IFJIX0FfT0NQTSk7CisgICAgICAgIGlmICh1MTMyLT5mbGFncyAmIE9IQ0lfUVVJUktfU1VQRVJJTykgeworICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05PQ1A7CisgICAgICAgICAgICAgICAgcm9vdGh1Yl9hICY9IH4oUkhfQV9QT1RQR1QgfCBSSF9BX05QUyk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgcm9vdGh1Yi5hLCByb290aHViX2EpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9IGVsc2UgaWYgKCh1MTMyLT5mbGFncyAmIE9IQ0lfUVVJUktfQU1ENzU2KSB8fCBkaXN0cnVzdF9maXJtd2FyZSkgeworICAgICAgICAgICAgICAgIHJvb3RodWJfYSB8PSBSSF9BX05QUzsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCByb290aHViLmEsIHJvb3RodWJfYSk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgcm9vdGh1Yi5zdGF0dXMsIFJIX0hTX0xQU0MpOworICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsIHJvb3RodWIuYiwKKyAgICAgICAgICAgICAgICAocm9vdGh1Yl9hICYgUkhfQV9OUFMpID8gMCA6IFJIX0JfUFBDTSk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCBjb250cm9sLCAmY29udHJvbCk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgbWRlbGF5KChyb290aHViX2EgPj4gMjMpICYgMHgxZmUpOworICAgICAgICB1MTMyX3RvX2hjZCh1MTMyKS0+c3RhdGUgPSBIQ19TVEFURV9SVU5OSU5HOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdTEzMl9oY2Rfc3RvcChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoY2Q9JXAgaXMgYmVpbmcgcmVtb3YiCisgICAgICAgICAgICAgICAgICAgICAgICAiZWRcbiIsIGhjZCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZG93bigmdTEzMi0+c3dfbG9jayk7CisgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgdTEzMl9wb3dlcih1MTMyLCAwKTsKKyAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c3dfbG9jayk7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX2hjZF9zdGFydChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlIGlmIChoY2QtPnNlbGYuY29udHJvbGxlcikgeworICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0b19wbGF0Zm9ybV9kZXZpY2UoaGNkLT5zZWxmLmNvbnRyb2xsZXIpOworICAgICAgICAgICAgICAgIHUxNiB2ZW5kb3IgPSAoKHN0cnVjdCB1MTMyX3BsYXRmb3JtX2RhdGEgKikKKyAgICAgICAgICAgICAgICAgICAgICAgIChwZGV2LT5kZXYucGxhdGZvcm1fZGF0YSkpLT52ZW5kb3I7CisgICAgICAgICAgICAgICAgdTE2IGRldmljZSA9ICgoc3RydWN0IHUxMzJfcGxhdGZvcm1fZGF0YSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgKHBkZXYtPmRldi5wbGF0Zm9ybV9kYXRhKSktPmRldmljZTsKKyAgICAgICAgICAgICAgICBkb3duKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICBtc2xlZXAoMTApOworICAgICAgICAgICAgICAgIGlmICh2ZW5kb3IgPT0gUENJX1ZFTkRPUl9JRF9BTUQgJiYgZGV2aWNlID09IDB4NzQwYykgeworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMi0+ZmxhZ3MgPSBPSENJX1FVSVJLX0FNRDc1NjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX09QVEkgJiYgZGV2aWNlID09IDB4Yzg2MSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJXQVJOSU5HOiBPUFRpIHdvcmthciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm91bmRzIHVuYXZhaWxhYmxlXG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHZlbmRvciA9PSBQQ0lfVkVORE9SX0lEX0NPTVBBUSAmJiBkZXZpY2UgPT0gMHhhMGY4KQorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMi0+ZmxhZ3MgfD0gT0hDSV9RVUlSS19aRk1JQ1JPOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfcnVuKHUxMzIpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZGlzYWJsZSh1MTMyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzItPmdvaW5nID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgdXAoJnUxMzItPnN3X2xvY2spOworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJwbGF0Zm9ybV9kZXZpY2UgbWlzc2luZ1xuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX2hjZF9yZXNldChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgIGRvd24oJnUxMzItPnN3X2xvY2spOworICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfaW5pdCh1MTMyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2Rpc2FibGUodTEzMik7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyLT5nb2luZyA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX2VuZHBvaW50X2FuZF9xdWV1ZV9pbnQoc3RydWN0IHUxMzIgKnUxMzIsCisgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYsIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1OCB1c2JfYWRkciwgdTggdXNiX2VuZHAsIHU4IGFkZHJlc3MsCisgICAgICAgIGdmcF90IG1lbV9mbGFncykKK3sKKyAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZzsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpcnFzOworICAgICAgICB1OCBlbmRwX251bWJlciA9ICsrdTEzMi0+bnVtX2VuZHBvaW50czsKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGhlcC0+aGNwcml2ID0gdTEzMi0+ZW5kcFtlbmRwX251bWJlciAtIDFdID0KKyAgICAgICAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdTEzMl9lbmRwKSwgbWVtX2ZsYWdzKTsKKyAgICAgICAgaWYgKCFlbmRwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgSU5JVF9XT1JLKCZlbmRwLT5zY2hlZHVsZXIsIHUxMzJfaGNkX2VuZHBfd29ya19zY2hlZHVsZXIsICh2b2lkICopZW5kcCk7CisgICAgICAgIHNwaW5fbG9ja19pbml0KCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrKTsKKyAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmVuZHAtPnVyYl9tb3JlKTsKKyAgICAgICAgcmluZyA9IGVuZHAtPnJpbmcgPSAmdTEzMi0+cmluZ1swXTsKKyAgICAgICAgaWYgKHJpbmctPmN1cnJfZW5kcCkgeworICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJmVuZHAtPmVuZHBfcmluZywgJnJpbmctPmN1cnJfZW5kcC0+ZW5kcF9yaW5nKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBJTklUX0xJU1RfSEVBRCgmZW5kcC0+ZW5kcF9yaW5nKTsKKyAgICAgICAgICAgICAgICByaW5nLT5jdXJyX2VuZHAgPSBlbmRwOworICAgICAgICB9CisgICAgICAgIHJpbmctPmxlbmd0aCArPSAxOworICAgICAgICBlbmRwLT5kZXF1ZXVlaW5nID0gMDsKKyAgICAgICAgZW5kcC0+ZWRzZXRfZmx1c2ggPSAwOworICAgICAgICBlbmRwLT5hY3RpdmUgPSAwOworICAgICAgICBlbmRwLT5kZWxheWVkID0gMDsKKyAgICAgICAgZW5kcC0+ZW5kcF9udW1iZXIgPSBlbmRwX251bWJlcjsKKyAgICAgICAgZW5kcC0+dTEzMiA9IHUxMzI7CisgICAgICAgIGVuZHAtPmhlcCA9IGhlcDsKKyAgICAgICAgZW5kcC0+cGlwZXR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKKyAgICAgICAgdTEzMl9lbmRwX2luaXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworICAgICAgICAgICAgICAgIGVuZHAtPnRvZ2dsZV9iaXRzID0gMHgyOworICAgICAgICAgICAgICAgIHVzYl9zZXR0b2dnbGUodWRldi0+dXNiX2RldmljZSwgdXNiX2VuZHAsIDAsIDApOworICAgICAgICAgICAgICAgIGVuZHAtPmlucHV0ID0gMTsKKyAgICAgICAgICAgICAgICBlbmRwLT5vdXRwdXQgPSAwOworICAgICAgICAgICAgICAgIHVkZXYtPmVuZHBfbnVtYmVyX2luW3VzYl9lbmRwXSA9IGVuZHBfbnVtYmVyOworICAgICAgICAgICAgICAgIHUxMzJfdWRldl9nZXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IDB4MjsKKyAgICAgICAgICAgICAgICB1c2Jfc2V0dG9nZ2xlKHVkZXYtPnVzYl9kZXZpY2UsIHVzYl9lbmRwLCAxLCAwKTsKKyAgICAgICAgICAgICAgICBlbmRwLT5pbnB1dCA9IDA7CisgICAgICAgICAgICAgICAgZW5kcC0+b3V0cHV0ID0gMTsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9vdXRbdXNiX2VuZHBdID0gZW5kcF9udW1iZXI7CisgICAgICAgICAgICAgICAgdTEzMl91ZGV2X2dldF9rcmVmKHUxMzIsIHVkZXYpOworICAgICAgICB9CisgICAgICAgIHVyYi0+aGNwcml2ID0gdTEzMjsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICBlbmRwLT5kZWxheWVkID0gMTsKKyAgICAgICAgZW5kcC0+amlmZmllcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHVyYi0+aW50ZXJ2YWwpOworICAgICAgICBlbmRwLT51ZGV2X251bWJlciA9IGFkZHJlc3M7CisgICAgICAgIGVuZHAtPnVzYl9hZGRyID0gdXNiX2FkZHI7CisgICAgICAgIGVuZHAtPnVzYl9lbmRwID0gdXNiX2VuZHA7CisgICAgICAgIGVuZHAtPnF1ZXVlX3NpemUgPSAxOworICAgICAgICBlbmRwLT5xdWV1ZV9sYXN0ID0gMDsKKyAgICAgICAgZW5kcC0+cXVldWVfbmV4dCA9IDA7CisgICAgICAgIGVuZHAtPnVyYl9saXN0W0VORFBfUVVFVUVfTUFTSyAmIGVuZHAtPnF1ZXVlX2xhc3QrK10gPSB1cmI7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICB1MTMyX2VuZHBfcXVldWVfd29yayh1MTMyLCBlbmRwLCBtc2Vjc190b19qaWZmaWVzKHVyYi0+aW50ZXJ2YWwpKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfaW50X29uX29sZF9lbmRwb2ludChzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfdWRldiAqdWRldiwKKyAgICAgICAgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXAsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAsIHU4IHVzYl9hZGRyLAorICAgICAgICB1OCB1c2JfZW5kcCwgdTggYWRkcmVzcykKK3sKKyAgICAgICAgdXJiLT5oY3ByaXYgPSB1MTMyOworICAgICAgICBlbmRwLT5kZWxheWVkID0gMTsKKyAgICAgICAgZW5kcC0+amlmZmllcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHVyYi0+aW50ZXJ2YWwpOworICAgICAgICBpZiAoZW5kcC0+cXVldWVfc2l6ZSsrIDwgRU5EUF9RVUVVRV9TSVpFKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYgZW5kcC0+cXVldWVfbGFzdCsrXSA9IHVyYjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl91cmJxICp1cmJxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHUxMzJfdXJicSksCisgICAgICAgICAgICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICBpZiAodXJicSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9zaXplIC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmdXJicS0+dXJiX21vcmUsICZlbmRwLT51cmJfbW9yZSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmJxLT51cmIgPSB1cmI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNyZWF0ZV9lbmRwb2ludF9hbmRfcXVldWVfYnVsayhzdHJ1Y3QgdTEzMiAqdTEzMiwKKyAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXAsIHN0cnVjdCB1cmIgKnVyYiwKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYsIHU4IHVzYl9hZGRyLCB1OCB1c2JfZW5kcCwgdTggYWRkcmVzcywKKyAgICAgICAgZ2ZwX3QgbWVtX2ZsYWdzKQoreworICAgICAgICBpbnQgcmluZ19udW1iZXI7CisgICAgICAgIHN0cnVjdCB1MTMyX3JpbmcgKnJpbmc7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxczsKKyAgICAgICAgdTggZW5kcF9udW1iZXIgPSArK3UxMzItPm51bV9lbmRwb2ludHM7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBoZXAtPmhjcHJpdiA9IHUxMzItPmVuZHBbZW5kcF9udW1iZXIgLSAxXSA9CisgICAgICAgICAgICAgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IHUxMzJfZW5kcCksIG1lbV9mbGFncyk7CisgICAgICAgIGlmICghZW5kcCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIElOSVRfV09SSygmZW5kcC0+c2NoZWR1bGVyLCB1MTMyX2hjZF9lbmRwX3dvcmtfc2NoZWR1bGVyLCAodm9pZCAqKWVuZHApOworICAgICAgICBzcGluX2xvY2tfaW5pdCgmZW5kcC0+cXVldWVfbG9jay5zbG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEKCZlbmRwLT51cmJfbW9yZSk7CisgICAgICAgIGVuZHAtPmRlcXVldWVpbmcgPSAwOworICAgICAgICBlbmRwLT5lZHNldF9mbHVzaCA9IDA7CisgICAgICAgIGVuZHAtPmFjdGl2ZSA9IDA7CisgICAgICAgIGVuZHAtPmRlbGF5ZWQgPSAwOworICAgICAgICBlbmRwLT5lbmRwX251bWJlciA9IGVuZHBfbnVtYmVyOworICAgICAgICBlbmRwLT51MTMyID0gdTEzMjsKKyAgICAgICAgZW5kcC0+aGVwID0gaGVwOworICAgICAgICBlbmRwLT5waXBldHlwZSA9IHVzYl9waXBldHlwZSh1cmItPnBpcGUpOworICAgICAgICB1MTMyX2VuZHBfaW5pdF9rcmVmKHUxMzIsIGVuZHApOworICAgICAgICBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisgICAgICAgICAgICAgICAgZW5kcC0+dG9nZ2xlX2JpdHMgPSAweDI7CisgICAgICAgICAgICAgICAgdXNiX3NldHRvZ2dsZSh1ZGV2LT51c2JfZGV2aWNlLCB1c2JfZW5kcCwgMCwgMCk7CisgICAgICAgICAgICAgICAgcmluZ19udW1iZXIgPSAzOworICAgICAgICAgICAgICAgIGVuZHAtPmlucHV0ID0gMTsKKyAgICAgICAgICAgICAgICBlbmRwLT5vdXRwdXQgPSAwOworICAgICAgICAgICAgICAgIHVkZXYtPmVuZHBfbnVtYmVyX2luW3VzYl9lbmRwXSA9IGVuZHBfbnVtYmVyOworICAgICAgICAgICAgICAgIHUxMzJfdWRldl9nZXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbmRwLT50b2dnbGVfYml0cyA9IDB4MjsKKyAgICAgICAgICAgICAgICB1c2Jfc2V0dG9nZ2xlKHVkZXYtPnVzYl9kZXZpY2UsIHVzYl9lbmRwLCAxLCAwKTsKKyAgICAgICAgICAgICAgICByaW5nX251bWJlciA9IDI7CisgICAgICAgICAgICAgICAgZW5kcC0+aW5wdXQgPSAwOworICAgICAgICAgICAgICAgIGVuZHAtPm91dHB1dCA9IDE7CisgICAgICAgICAgICAgICAgdWRldi0+ZW5kcF9udW1iZXJfb3V0W3VzYl9lbmRwXSA9IGVuZHBfbnVtYmVyOworICAgICAgICAgICAgICAgIHUxMzJfdWRldl9nZXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgfQorICAgICAgICByaW5nID0gZW5kcC0+cmluZyA9ICZ1MTMyLT5yaW5nW3JpbmdfbnVtYmVyIC0gMV07CisgICAgICAgIGlmIChyaW5nLT5jdXJyX2VuZHApIHsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZlbmRwLT5lbmRwX3JpbmcsICZyaW5nLT5jdXJyX2VuZHAtPmVuZHBfcmluZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmVuZHAtPmVuZHBfcmluZyk7CisgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gZW5kcDsKKyAgICAgICAgfQorICAgICAgICByaW5nLT5sZW5ndGggKz0gMTsKKyAgICAgICAgdXJiLT5oY3ByaXYgPSB1MTMyOworICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgIGVuZHAtPnVkZXZfbnVtYmVyID0gYWRkcmVzczsKKyAgICAgICAgZW5kcC0+dXNiX2FkZHIgPSB1c2JfYWRkcjsKKyAgICAgICAgZW5kcC0+dXNiX2VuZHAgPSB1c2JfZW5kcDsKKyAgICAgICAgZW5kcC0+cXVldWVfc2l6ZSA9IDE7CisgICAgICAgIGVuZHAtPnF1ZXVlX2xhc3QgPSAwOworICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0ID0gMDsKKyAgICAgICAgZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYgZW5kcC0+cXVldWVfbGFzdCsrXSA9IHVyYjsKKyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHUxMzIsIGVuZHAsIDApOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBxdWV1ZV9idWxrX29uX29sZF9lbmRwb2ludChzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfdWRldiAqdWRldiwKKyAgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLCB1OCB1c2JfYWRkciwKKyAgICAgICAgdTggdXNiX2VuZHAsIHU4IGFkZHJlc3MpCit7CisgICAgICAgIHVyYi0+aGNwcml2ID0gdTEzMjsKKyAgICAgICAgaWYgKGVuZHAtPnF1ZXVlX3NpemUrKyA8IEVORFBfUVVFVUVfU0laRSkgeworICAgICAgICAgICAgICAgIGVuZHAtPnVyYl9saXN0W0VORFBfUVVFVUVfTUFTSyAmIGVuZHAtPnF1ZXVlX2xhc3QrK10gPSB1cmI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdXJicSAqdXJicSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1MTMyX3VyYnEpLAorICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgaWYgKHVyYnEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+cXVldWVfc2l6ZSAtPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJnVyYnEtPnVyYl9tb3JlLCAmZW5kcC0+dXJiX21vcmUpOworICAgICAgICAgICAgICAgICAgICAgICAgdXJicS0+dXJiID0gdXJiOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcmVhdGVfZW5kcG9pbnRfYW5kX3F1ZXVlX2NvbnRyb2woc3RydWN0IHUxMzIgKnUxMzIsCisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCB1OCB1c2JfYWRkciwgdTggdXNiX2VuZHAsCisgICAgICAgIGdmcF90IG1lbV9mbGFncykKK3sKKyAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZzsKKyAgICAgICAgdTggZW5kcF9udW1iZXIgPSArK3UxMzItPm51bV9lbmRwb2ludHM7CisgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBoZXAtPmhjcHJpdiA9IHUxMzItPmVuZHBbZW5kcF9udW1iZXIgLSAxXSA9CisgICAgICAgICAgICAgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IHUxMzJfZW5kcCksIG1lbV9mbGFncyk7CisgICAgICAgIGlmICghZW5kcCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIElOSVRfV09SSygmZW5kcC0+c2NoZWR1bGVyLCB1MTMyX2hjZF9lbmRwX3dvcmtfc2NoZWR1bGVyLCAodm9pZCAqKWVuZHApOworICAgICAgICBzcGluX2xvY2tfaW5pdCgmZW5kcC0+cXVldWVfbG9jay5zbG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEKCZlbmRwLT51cmJfbW9yZSk7CisgICAgICAgIHJpbmcgPSBlbmRwLT5yaW5nID0gJnUxMzItPnJpbmdbMF07CisgICAgICAgIGlmIChyaW5nLT5jdXJyX2VuZHApIHsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZlbmRwLT5lbmRwX3JpbmcsICZyaW5nLT5jdXJyX2VuZHAtPmVuZHBfcmluZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgSU5JVF9MSVNUX0hFQUQoJmVuZHAtPmVuZHBfcmluZyk7CisgICAgICAgICAgICAgICAgcmluZy0+Y3Vycl9lbmRwID0gZW5kcDsKKyAgICAgICAgfQorICAgICAgICByaW5nLT5sZW5ndGggKz0gMTsKKyAgICAgICAgZW5kcC0+ZGVxdWV1ZWluZyA9IDA7CisgICAgICAgIGVuZHAtPmVkc2V0X2ZsdXNoID0gMDsKKyAgICAgICAgZW5kcC0+YWN0aXZlID0gMDsKKyAgICAgICAgZW5kcC0+ZGVsYXllZCA9IDA7CisgICAgICAgIGVuZHAtPmVuZHBfbnVtYmVyID0gZW5kcF9udW1iZXI7CisgICAgICAgIGVuZHAtPnUxMzIgPSB1MTMyOworICAgICAgICBlbmRwLT5oZXAgPSBoZXA7CisgICAgICAgIHUxMzJfZW5kcF9pbml0X2tyZWYodTEzMiwgZW5kcCk7CisgICAgICAgIHUxMzJfZW5kcF9nZXRfa3JlZih1MTMyLCBlbmRwKTsKKyAgICAgICAgaWYgKHVzYl9hZGRyID09IDApIHsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlycXM7CisgICAgICAgICAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbdXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiA9ICZ1MTMyLT51ZGV2W2FkZHJlc3NdOworICAgICAgICAgICAgICAgIGVuZHAtPnVkZXZfbnVtYmVyID0gYWRkcmVzczsKKyAgICAgICAgICAgICAgICBlbmRwLT51c2JfYWRkciA9IHVzYl9hZGRyOworICAgICAgICAgICAgICAgIGVuZHAtPnVzYl9lbmRwID0gdXNiX2VuZHA7CisgICAgICAgICAgICAgICAgZW5kcC0+aW5wdXQgPSAxOworICAgICAgICAgICAgICAgIGVuZHAtPm91dHB1dCA9IDE7CisgICAgICAgICAgICAgICAgZW5kcC0+cGlwZXR5cGUgPSB1c2JfcGlwZXR5cGUodXJiLT5waXBlKTsKKyAgICAgICAgICAgICAgICB1MTMyX3VkZXZfaW5pdF9rcmVmKHUxMzIsIHVkZXYpOworICAgICAgICAgICAgICAgIHUxMzJfdWRldl9nZXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9pblt1c2JfZW5kcF0gPSBlbmRwX251bWJlcjsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9vdXRbdXNiX2VuZHBdID0gZW5kcF9udW1iZXI7CisgICAgICAgICAgICAgICAgdXJiLT5oY3ByaXYgPSB1MTMyOworICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLCBpcnFzKTsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9zaXplID0gMTsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9sYXN0ID0gMDsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJiBlbmRwLT5xdWV1ZV9sYXN0KytdID0gdXJiOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHUxMzIsIGVuZHAsIDApOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKih1c2JfYWRkciA+IDApICovCisgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpcnFzOworICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW3VzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYgPSAmdTEzMi0+dWRldlthZGRyZXNzXTsKKyAgICAgICAgICAgICAgICBlbmRwLT51ZGV2X251bWJlciA9IGFkZHJlc3M7CisgICAgICAgICAgICAgICAgZW5kcC0+dXNiX2FkZHIgPSB1c2JfYWRkcjsKKyAgICAgICAgICAgICAgICBlbmRwLT51c2JfZW5kcCA9IHVzYl9lbmRwOworICAgICAgICAgICAgICAgIGVuZHAtPmlucHV0ID0gMTsKKyAgICAgICAgICAgICAgICBlbmRwLT5vdXRwdXQgPSAxOworICAgICAgICAgICAgICAgIGVuZHAtPnBpcGV0eXBlID0gdXNiX3BpcGV0eXBlKHVyYi0+cGlwZSk7CisgICAgICAgICAgICAgICAgdTEzMl91ZGV2X2dldF9rcmVmKHUxMzIsIHVkZXYpOworICAgICAgICAgICAgICAgIHVkZXYtPmVudW1lcmF0aW9uID0gMjsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9pblt1c2JfZW5kcF0gPSBlbmRwX251bWJlcjsKKyAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9vdXRbdXNiX2VuZHBdID0gZW5kcF9udW1iZXI7CisgICAgICAgICAgICAgICAgdXJiLT5oY3ByaXYgPSB1MTMyOworICAgICAgICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLCBpcnFzKTsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9zaXplID0gMTsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9sYXN0ID0gMDsKKyAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0ID0gMDsKKyAgICAgICAgICAgICAgICBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJiBlbmRwLT5xdWV1ZV9sYXN0KytdID0gdXJiOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHUxMzIsIGVuZHAsIDApOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgcXVldWVfY29udHJvbF9vbl9vbGRfZW5kcG9pbnQoc3RydWN0IHUxMzIgKnUxMzIsCisgICAgICAgIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqaGVwLCBzdHJ1Y3QgdXJiICp1cmIsCisgICAgICAgIHN0cnVjdCB1c2JfZGV2aWNlICp1c2JfZGV2LCBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwLCB1OCB1c2JfYWRkciwKKyAgICAgICAgdTggdXNiX2VuZHApCit7CisgICAgICAgIGlmICh1c2JfYWRkciA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHVzYl9waXBlaW4odXJiLT5waXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5oY3ByaXYgPSB1MTMyOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZHAtPnF1ZXVlX3NpemUrKyA8IEVORFBfUVVFVUVfU0laRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnF1ZXVlX2xhc3QrK10gPSB1cmI7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl91cmJxICp1cmJxID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdTEzMl91cmJxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyYnEgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnF1ZXVlX3NpemUgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZ1cmJxLT51cmJfbW9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZlbmRwLT51cmJfbW9yZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJicS0+dXJiID0gdXJiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgLyogdXNiX3BpcGVvdXQodXJiLT5waXBlKSAqLworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfYWRkciAqYWRkciA9ICZ1MTMyLT5hZGRyW3VzYl9kZXYtPmRldm51bV07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgSSA9IE1BWF9VMTMyX1VERVZTOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKC0tSSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiA9ICZ1MTMyLT51ZGV2WysraV07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1ZGV2LT51c2JfZGV2aWNlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRldi0+ZW51bWVyYXRpb24gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzItPmFkZHJbMF0uYWRkcmVzcyA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dWRldl9udW1iZXIgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkZXYtPnVkZXZfbnVtYmVyID0gaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGV2LT51c2JfYWRkciA9IHVzYl9kZXYtPmRldm51bTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX3VkZXZfaW5pdF9rcmVmKHUxMzIsIHVkZXYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkZXYtPmVuZHBfbnVtYmVyX2luW3VzYl9lbmRwXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5lbmRwX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX3VkZXZfZ2V0X2tyZWYodTEzMiwgdWRldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRldi0+ZW5kcF9udW1iZXJfb3V0W3VzYl9lbmRwXSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5lbmRwX251bWJlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGV2LT51c2JfZGV2aWNlID0gdXNiX2RldjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHU4ICopICh1cmItPnNldHVwX3BhY2tldCkpWzJdID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPmFkZHJlc3MgPSBpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfdWRldl9nZXRfa3JlZih1MTMyLCB1ZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInJ1biBvdXQgb2YgZCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXZpY2Ugc3BhY2VcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+aGNwcml2ID0gdTEzMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRwLT5xdWV1ZV9zaXplKysgPCBFTkRQX1FVRVVFX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9sYXN0KytdID0gdXJiOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdXJicSAqdXJicSA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga21hbGxvYyhzaXplb2Yoc3RydWN0IHUxMzJfdXJicSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1cmJxID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9zaXplIC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdF9hZGRfdGFpbCgmdXJicS0+dXJiX21vcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW5kcC0+dXJiX21vcmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYnEtPnVyYiA9IHVyYjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKih1c2JfYWRkciA+IDApICovCisgICAgICAgICAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbdXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiA9ICZ1MTMyLT51ZGV2W2FkZHJlc3NdOworICAgICAgICAgICAgICAgIHVyYi0+aGNwcml2ID0gdTEzMjsKKyAgICAgICAgICAgICAgICBpZiAodWRldi0+ZW51bWVyYXRpb24gPT0gMikgeworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdWRldi0+ZW51bWVyYXRpb24gPSAyOworICAgICAgICAgICAgICAgIGlmIChlbmRwLT5xdWV1ZV9zaXplKysgPCBFTkRQX1FVRVVFX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnVyYl9saXN0W0VORFBfUVVFVUVfTUFTSyAmIGVuZHAtPnF1ZXVlX2xhc3QrK10gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmI7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3VyYnEgKnVyYnEgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdTEzMl91cmJxKSwgR0ZQX0FUT01JQyk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodXJicSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnF1ZXVlX3NpemUgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZ1cmJxLT51cmJfbW9yZSwgJmVuZHAtPnVyYl9tb3JlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJicS0+dXJiID0gdXJiOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50IHUxMzJfdXJiX2VucXVldWUoc3RydWN0IHVzYl9oY2QgKmhjZCwgc3RydWN0IHVzYl9ob3N0X2VuZHBvaW50ICpoZXAsCisgICAgICAgIHN0cnVjdCB1cmIgKnVyYiwgZ2ZwX3QgbWVtX2ZsYWdzKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmIChpcnFzX2Rpc2FibGVkKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoX19HRlBfV0FJVCAmIG1lbV9mbGFncykgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJpbnZhbGlkIGNvbnRleHQgZm9yIGZ1bmN0aW9uIHRoYXQgbWlnaCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInQgc2xlZXBcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkIHVyYj0iCisgICAgICAgICAgICAgICAgICAgICAgICAiJXAgc3RhdHVzPSVkXG4iLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1OCB1c2JfYWRkciA9IHVzYl9waXBlZGV2aWNlKHVyYi0+cGlwZSk7CisgICAgICAgICAgICAgICAgdTggdXNiX2VuZHAgPSB1c2JfcGlwZWVuZHBvaW50KHVyYi0+cGlwZSk7CisgICAgICAgICAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVzYl9kZXYgPSB1cmItPmRldjsKKyAgICAgICAgICAgICAgICBpZiAodXNiX3BpcGV0eXBlKHVyYi0+cGlwZSkgPT0gUElQRV9JTlRFUlJVUFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW3VzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdWRldiAqdWRldiA9ICZ1MTMyLT51ZGV2W2FkZHJlc3NdOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGhlcC0+aGNwcml2OworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHF1ZXVlX2ludF9vbl9vbGRfZW5kcG9pbnQodTEzMiwgdWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXAsIHVyYiwgdXNiX2RldiwgZW5kcCwgdXNiX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2VuZHAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfcXVldWVfd29yayh1MTMyLCBlbmRwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcyh1cmItPmludGVydmFsKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5udW1fZW5kcG9pbnRzID09IE1BWF9VMTMyX0VORFBTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgIC8qKGVuZHAgPT0gTlVMTCkgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZV9lbmRwb2ludF9hbmRfcXVldWVfaW50KHUxMzIsIHVkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlcCwgdXJiLCB1c2JfZGV2LCB1c2JfYWRkciwgdXNiX2VuZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcywgbWVtX2ZsYWdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfSVNPQ0hST05PVVMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAidGhlIGhhcmR3YXJlIGRvZXMgbm8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IHN1cHBvcnQgUElQRV9JU09DSFJPTk9VU1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzYl9waXBldHlwZSh1cmItPnBpcGUpID09IFBJUEVfQlVMSykgeworICAgICAgICAgICAgICAgICAgICAgICAgdTggYWRkcmVzcyA9IHUxMzItPmFkZHJbdXNiX2FkZHJdLmFkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl91ZGV2ICp1ZGV2ID0gJnUxMzItPnVkZXZbYWRkcmVzc107CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9lbmRwICplbmRwID0gaGVwLT5oY3ByaXY7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGggPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZHApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpcnFzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gcXVldWVfYnVsa19vbl9vbGRfZW5kcG9pbnQodTEzMiwgdWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXAsIHVyYiwgdXNiX2RldiwgZW5kcCwgdXNiX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2VuZHAsIGFkZHJlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlycXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfcXVldWVfd29yayh1MTMyLCBlbmRwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5udW1fZW5kcG9pbnRzID09IE1BWF9VMTMyX0VORFBTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVfZW5kcG9pbnRfYW5kX3F1ZXVlX2J1bGsodTEzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZGV2LCBoZXAsIHVyYiwgdXNiX2RldiwgdXNiX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2VuZHAsIGFkZHJlc3MsIG1lbV9mbGFncyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSBoZXAtPmhjcHJpdjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxNiB1cmJfc2l6ZSA9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICB1OCAqYiA9IHVyYi0+c2V0dXBfcGFja2V0OworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhWzMwICozICsgNF07CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtID0gKHNpemVvZihkYXRhKSAtIDEpIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHVyYl9zaXplLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpID4gbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGkrKyA8IG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdyA9IHNwcmludGYoZCwgIiAlMDJYIiwgKmIrKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSB3OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwgKz0gdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaXJxczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHF1ZXVlX2NvbnRyb2xfb25fb2xkX2VuZHBvaW50KHUxMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVwLCB1cmIsIHVzYl9kZXYsIGVuZHAsIHVzYl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9lbmRwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcnFzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9lbmRwX3F1ZXVlX3dvcmsodTEzMiwgZW5kcCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+bnVtX2VuZHBvaW50cyA9PSBNQVhfVTEzMl9FTkRQUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlX2VuZHBvaW50X2FuZF9xdWV1ZV9jb250cm9sKHUxMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVwLCB1cmIsIHVzYl9kZXYsIHVzYl9hZGRyLCB1c2JfZW5kcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1fZmxhZ3MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50IGRlcXVldWVfZnJvbV9vdmVyZmxvd19jaGFpbihzdHJ1Y3QgdTEzMiAqdTEzMiwKKyAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiKQoreworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpzY2FuOworICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkID0gJmVuZHAtPnVyYl9tb3JlOworICAgICAgICBsaXN0X2Zvcl9lYWNoKHNjYW4sIGhlYWQpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl91cmJxICp1cmJxID0gbGlzdF9lbnRyeShzY2FuLCBzdHJ1Y3QgdTEzMl91cmJxLAorICAgICAgICAgICAgICAgICAgICAgICAgdXJiX21vcmUpOworICAgICAgICAgICAgICAgIGlmICh1cmJxLT51cmIgPT0gdXJiKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdTEzMl90b19oY2QodTEzMik7CisgICAgICAgICAgICAgICAgICAgICAgICBsaXN0X2RlbChzY2FuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnF1ZXVlX3NpemUgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+ZXJyb3JfY291bnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5oY3ByaXYgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgdXNiX2hjZF9naXZlYmFja191cmIoaGNkLCB1cmIsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInVyYj0lcCBub3QgZm91bmQgaW4gZW5kcFslZF09JXAgcmluZyIKKyAgICAgICAgICAgICAgICAiWyVkXSAlYyVjIHVzYl9lbmRwPSVkIHVzYl9hZGRyPSVkIHNpemU9JWQgbmV4dD0lMDRYIGxhc3Q9JTA0WCIKKyAgICAgICAgICAgICAgICAiXG4iLCB1cmIsIGVuZHAtPmVuZHBfbnVtYmVyLCBlbmRwLCBlbmRwLT5yaW5nLT5udW1iZXIsCisgICAgICAgICAgICAgICAgZW5kcC0+aW5wdXQgPyAnSScgOiAnICcsIGVuZHAtPm91dHB1dCA/ICdPJyA6ICcgJywKKyAgICAgICAgICAgICAgICBlbmRwLT51c2JfZW5kcCwgZW5kcC0+dXNiX2FkZHIsIGVuZHAtPnF1ZXVlX3NpemUsCisgICAgICAgICAgICAgICAgZW5kcC0+cXVldWVfbmV4dCwgZW5kcC0+cXVldWVfbGFzdCk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHUxMzJfZW5kcF91cmJfZGVxdWV1ZShzdHJ1Y3QgdTEzMiAqdTEzMiwgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCwKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIGlycXM7CisgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZlbmRwLT5xdWV1ZV9sb2NrLnNsb2NrLCBpcnFzKTsKKyAgICAgICAgaWYgKGVuZHAtPnF1ZXVlX3NpemUgPT0gMCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAidXJiPSVwIG5vdCBmb3VuZCBpbiBlbmRwWyVkXSIKKyAgICAgICAgICAgICAgICAgICAgICAgICI9JXAgcmluZ1slZF0gJWMlYyB1c2JfZW5kcD0lZCB1c2JfYWRkcj0lZFxuIiwgdXJiLAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+ZW5kcF9udW1iZXIsIGVuZHAsIGVuZHAtPnJpbmctPm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPmlucHV0ID8gJ0knIDogJyAnLCBlbmRwLT5vdXRwdXQgPyAnTycgOiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT51c2JfZW5kcCwgZW5kcC0+dXNiX2FkZHIpOworICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisgICAgICAgIGlmICh1cmIgPT0gZW5kcC0+dXJiX2xpc3RbRU5EUF9RVUVVRV9NQVNLICYgZW5kcC0+cXVldWVfbmV4dF0pIHsKKyAgICAgICAgICAgICAgICBpZiAoZW5kcC0+YWN0aXZlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5kZXF1ZXVlaW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPmVkc2V0X2ZsdXNoID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUxMzJfZW5kcF9xdWV1ZV93b3JrKHUxMzIsIGVuZHAsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmhjcHJpdiA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5kcC0+cXVldWVfbG9jay5zbG9jaywgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2hjZF9hYmFuZG9uX3VyYih1MTMyLCBlbmRwLCB1cmIsIHVyYi0+c3RhdHVzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB1MTYgcXVldWVfbGlzdCA9IDA7CisgICAgICAgICAgICAgICAgdTE2IHF1ZXVlX3NpemUgPSBlbmRwLT5xdWV1ZV9zaXplOworICAgICAgICAgICAgICAgIHUxNiBxdWV1ZV9zY2FuID0gZW5kcC0+cXVldWVfbmV4dDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdXJiICoqdXJiX3Nsb3QgPSBOVUxMOworICAgICAgICAgICAgICAgIHdoaWxlICgrK3F1ZXVlX2xpc3QgPCBFTkRQX1FVRVVFX1NJWkUgJiYgLS1xdWV1ZV9zaXplID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHVyYiA9PSBlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK3F1ZXVlX3NjYW5dKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVyYl9zbG90ID0gJmVuZHAtPnVyYl9saXN0W0VORFBfUVVFVUVfTUFTSyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVldWVfc2Nhbl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAoKytxdWV1ZV9saXN0IDwgRU5EUF9RVUVVRV9TSVpFICYmIC0tcXVldWVfc2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICp1cmJfc2xvdCA9IGVuZHAtPnVyYl9saXN0W0VORFBfUVVFVUVfTUFTSyAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrcXVldWVfc2Nhbl07CisgICAgICAgICAgICAgICAgICAgICAgICB1cmJfc2xvdCA9ICZlbmRwLT51cmJfbGlzdFtFTkRQX1FVRVVFX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWV1ZV9zY2FuXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHVyYl9zbG90KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gdTEzMl90b19oY2QodTEzMik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9zaXplIC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdF9lbXB0eSgmZW5kcC0+dXJiX21vcmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0ID0gZW5kcC0+dXJiX21vcmUubmV4dDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdXJicSAqdXJicSA9IGxpc3RfZW50cnkobmV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl91cmJxLCB1cmJfbW9yZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfZGVsKG5leHQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXJiX3Nsb3QgPSB1cmJxLT51cmI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXJxcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKHVyYnEpOworICAgICAgICAgICAgICAgICAgICAgICAgfSB1cmItPmVycm9yX2NvdW50ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVyYi0+aGNwcml2ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9oY2RfZ2l2ZWJhY2tfdXJiKGhjZCwgdXJiLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdF9lbXB0eSgmZW5kcC0+dXJiX21vcmUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgInVyYj0lcCBub3QgZm91bmQgaW4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZW5kcFslZF09JXAgcmluZ1slZF0gJWMlYyB1c2JfZW5kcD0lZCB1c2JfYWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIj0lZCBzaXplPSVkIG5leHQ9JTA0WCBsYXN0PSUwNFhcbiIsIHVyYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+ZW5kcF9udW1iZXIsIGVuZHAsIGVuZHAtPnJpbmctPm51bWJlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kcC0+aW5wdXQgPyAnSScgOiAnICcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPm91dHB1dCA/ICdPJyA6ICcgJywgZW5kcC0+dXNiX2VuZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHAtPnVzYl9hZGRyLCBlbmRwLT5xdWV1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRwLT5xdWV1ZV9uZXh0LCBlbmRwLT5xdWV1ZV9sYXN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSBkZXF1ZXVlX2Zyb21fb3ZlcmZsb3dfY2hhaW4odTEzMiwgZW5kcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZHAtPnF1ZXVlX2xvY2suc2xvY2ssIGlycXMpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX3VyYl9kZXF1ZXVlKHN0cnVjdCB1c2JfaGNkICpoY2QsIHN0cnVjdCB1cmIgKnVyYikKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAyKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdTggdXNiX2FkZHIgPSB1c2JfcGlwZWRldmljZSh1cmItPnBpcGUpOworICAgICAgICAgICAgICAgIHU4IHVzYl9lbmRwID0gdXNiX3BpcGVlbmRwb2ludCh1cmItPnBpcGUpOworICAgICAgICAgICAgICAgIHU4IGFkZHJlc3MgPSB1MTMyLT5hZGRyW3VzYl9hZGRyXS5hZGRyZXNzOworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYgPSAmdTEzMi0+dWRldlthZGRyZXNzXTsKKyAgICAgICAgICAgICAgICBpZiAodXNiX3BpcGVpbih1cmItPnBpcGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1OCBlbmRwX251bWJlciA9IHVkZXYtPmVuZHBfbnVtYmVyX2luW3VzYl9lbmRwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSB1MTMyLT5lbmRwW2VuZHBfbnVtYmVyIC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdTEzMl9lbmRwX3VyYl9kZXF1ZXVlKHUxMzIsIGVuZHAsIHVyYik7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4IGVuZHBfbnVtYmVyID0gdWRldi0+ZW5kcF9udW1iZXJfb3V0W3VzYl9lbmRwXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2VuZHAgKmVuZHAgPSB1MTMyLT5lbmRwW2VuZHBfbnVtYmVyIC0gMV07CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdTEzMl9lbmRwX3VyYl9kZXF1ZXVlKHUxMzIsIGVuZHAsIHVyYik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfZW5kcG9pbnRfZGlzYWJsZShzdHJ1Y3QgdXNiX2hjZCAqaGNkLAorICAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmhlcCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAyKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IGhlcC0+aGNwcml2OworICAgICAgICAgICAgICAgIGlmIChlbmRwKQorICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9lbmRwX3B1dF9rcmVmKHUxMzIsIGVuZHApOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9nZXRfZnJhbWUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAxKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FU0hVVERPV047CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGZyYW1lID0gMDsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgIlRPRE86IHUxMzJfZ2V0X2ZyYW1lXG4iKTsKKyAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnJhbWU7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX3Jvb3RodWJfZGVzY3JpcHRvcihzdHJ1Y3QgdTEzMiAqdTEzMiwKKyAgICAgICAgc3RydWN0IHVzYl9odWJfZGVzY3JpcHRvciAqZGVzYykKK3sKKyAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgdTE2IHRlbXA7CisgICAgICAgIHUzMiByaF9hID0gLTE7CisgICAgICAgIHUzMiByaF9iID0gLTE7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgcm9vdGh1Yi5hLCAmcmhfYSk7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgZGVzYy0+YkRlc2NyaXB0b3JUeXBlID0gMHgyOTsKKyAgICAgICAgZGVzYy0+YlB3ck9uMlB3ckdvb2QgPSAocmhfYSAmIFJIX0FfUE9UUEdUKSA+PiAyNDsKKyAgICAgICAgZGVzYy0+Ykh1YkNvbnRyQ3VycmVudCA9IDA7CisgICAgICAgIGRlc2MtPmJOYnJQb3J0cyA9IHUxMzItPm51bV9wb3J0czsKKyAgICAgICAgdGVtcCA9IDEgKyAodTEzMi0+bnVtX3BvcnRzIC8gOCk7CisgICAgICAgIGRlc2MtPmJEZXNjTGVuZ3RoID0gNyArIDIgKnRlbXA7CisgICAgICAgIHRlbXAgPSAwOworICAgICAgICBpZiAocmhfYSAmIFJIX0FfTlBTKQorICAgICAgICAgICAgICAgIHRlbXAgfD0gMHgwMDAyOworICAgICAgICBpZiAocmhfYSAmIFJIX0FfUFNNKQorICAgICAgICAgICAgICAgIHRlbXAgfD0gMHgwMDAxOworICAgICAgICBpZiAocmhfYSAmIFJIX0FfTk9DUCkgeworICAgICAgICAgICAgICAgIHRlbXAgfD0gMHgwMDEwOworICAgICAgICB9IGVsc2UgaWYgKHJoX2EgJiBSSF9BX09DUE0pCisgICAgICAgICAgICAgICAgdGVtcCB8PSAweDAwMDg7CisgICAgICAgIGRlc2MtPndIdWJDaGFyYWN0ZXJpc3RpY3MgPSBjcHVfdG9fbGUxNih0ZW1wKTsKKyAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLCByb290aHViLmIsICZyaF9iKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBtZW1zZXQoZGVzYy0+Yml0bWFwLCAweGZmLCBzaXplb2YoZGVzYy0+Yml0bWFwKSk7CisgICAgICAgIGRlc2MtPmJpdG1hcFswXSA9IHJoX2IgJiBSSF9CX0RSOworICAgICAgICBpZiAodTEzMi0+bnVtX3BvcnRzID4gNykgeworICAgICAgICAgICAgICAgIGRlc2MtPmJpdG1hcFsxXSA9IChyaF9iICYgUkhfQl9EUikgPj4gODsKKyAgICAgICAgICAgICAgICBkZXNjLT5iaXRtYXBbMl0gPSAweGZmOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBkZXNjLT5iaXRtYXBbMV0gPSAweGZmOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1MTMyX3Jvb3RodWJfc3RhdHVzKHN0cnVjdCB1MTMyICp1MTMyLCBfX2xlMzIgKmRlc2MpCit7CisgICAgICAgIHUzMiByaF9zdGF0dXMgPSAtMTsKKyAgICAgICAgaW50IHJldF9zdGF0dXMgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIHJvb3RodWIuc3RhdHVzLCAmcmhfc3RhdHVzKTsKKyAgICAgICAgKmRlc2MgPSBjcHVfdG9fbGUzMihyaF9zdGF0dXMpOworICAgICAgICByZXR1cm4gcmV0X3N0YXR1czsKK30KKworc3RhdGljIGludCB1MTMyX3Jvb3RodWJfcG9ydHN0YXR1cyhzdHJ1Y3QgdTEzMiAqdTEzMiwgX19sZTMyICpkZXNjLCB1MTYgd0luZGV4KQoreworICAgICAgICBpZiAod0luZGV4ID09IDAgfHwgd0luZGV4ID4gdTEzMi0+bnVtX3BvcnRzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHBvcnQgPSB3SW5kZXggLSAxOworICAgICAgICAgICAgICAgIHUzMiByaF9wb3J0c3RhdHVzID0gLTE7CisgICAgICAgICAgICAgICAgaW50IHJldF9wb3J0c3RhdHVzID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGh1Yi5wb3J0c3RhdHVzW3BvcnRdLCAmcmhfcG9ydHN0YXR1cyk7CisgICAgICAgICAgICAgICAgKmRlc2MgPSBjcHVfdG9fbGUzMihyaF9wb3J0c3RhdHVzKTsKKyAgICAgICAgICAgICAgICBpZiAoKih1MTYgKikgKGRlc2MgKyAyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2luZm8oJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiUG9ydCAlZCBTdGF0dXMgQ2hhbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImdlID0gJTA4WFxuIiwgcG9ydCwgKmRlc2MpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0X3BvcnRzdGF0dXM7CisgICAgICAgIH0KK30KKworCisvKiB0aGlzIHRpbWVyIHZhbHVlIG1pZ2h0IGJlIHZlbmRvci1zcGVjaWZpYyAuLi4gKi8KKyNkZWZpbmUgUE9SVF9SRVNFVF9IV19NU0VDIDEwCisjZGVmaW5lIFBPUlRfUkVTRVRfTVNFQyAxMAorLyogd3JhcC1hd2FyZSBsb2dpYyBtb3JwaGVkIGZyb20gPGxpbnV4L2ppZmZpZXMuaD4gKi8KKyNkZWZpbmUgdGlja19iZWZvcmUodDEsIHQyKSAoKHMxNikoKChzMTYpKHQxKSktKChzMTYpKHQyKSkpIDwgMCkKK3N0YXRpYyBpbnQgdTEzMl9yb290aHViX3BvcnRyZXNldChzdHJ1Y3QgdTEzMiAqdTEzMiwgaW50IHBvcnRfaW5kZXgpCit7CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIHUzMiBmbW51bWJlcjsKKyAgICAgICAgdTE2IG5vdzsKKyAgICAgICAgdTE2IHJlc2V0X2RvbmU7CisgICAgICAgIHJldHZhbCA9IHUxMzJfcmVhZF9wY2ltZW0odTEzMiwgZm1udW1iZXIsICZmbW51bWJlcik7CisgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgbm93ID0gZm1udW1iZXI7CisgICAgICAgIHJlc2V0X2RvbmUgPSBub3cgKyBQT1JUX1JFU0VUX01TRUM7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICB1MzIgcG9ydHN0YXQ7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl9yZWFkX3BjaW1lbSh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290aHViLnBvcnRzdGF0dXNbcG9ydF9pbmRleF0sICZwb3J0c3RhdCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJIX1BTX1BSUyAmIHBvcnRzdGF0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHRpY2tfYmVmb3JlKG5vdywgcmVzZXRfZG9uZSkpOworICAgICAgICAgICAgICAgIGlmIChSSF9QU19QUlMgJiBwb3J0c3RhdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgICAgICAgIGlmIChSSF9QU19DQ1MgJiBwb3J0c3RhdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFJIX1BTX1BSU0MgJiBwb3J0c3RhdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RodWIucG9ydHN0YXR1c1twb3J0X2luZGV4XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSF9QU19QUlNDKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAvKiBzdGFydCB0aGUgbmV4dCByZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xlZXAgdGlsbCBpdCdzIHByb2JhYmx5IGRvbmUgKi8KKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3dyaXRlX3BjaW1lbSh1MTMyLCByb290aHViLnBvcnRzdGF0dXNbcG9ydF9pbmRleF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgUkhfUFNfUFJTKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICBtc2xlZXAoUE9SVF9SRVNFVF9IV19NU0VDKTsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3JlYWRfcGNpbWVtKHUxMzIsIGZtbnVtYmVyLCAmZm1udW1iZXIpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIG5vdyA9IGZtbnVtYmVyOworICAgICAgICB9IHdoaWxlICh0aWNrX2JlZm9yZShub3csIHJlc2V0X2RvbmUpKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9yb290aHViX3NldHBvcnRmZWF0dXJlKHN0cnVjdCB1MTMyICp1MTMyLCB1MTYgd1ZhbHVlLAorICAgICAgICB1MTYgd0luZGV4KQoreworICAgICAgICBpZiAod0luZGV4ID09IDAgfHwgd0luZGV4ID4gdTEzMi0+bnVtX3BvcnRzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgICAgICAgICBpbnQgcG9ydF9pbmRleCA9IHdJbmRleCAtIDE7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcG9ydCAqcG9ydCA9ICZ1MTMyLT5wb3J0W3BvcnRfaW5kZXhdOworICAgICAgICAgICAgICAgIHBvcnQtPlN0YXR1cyAmPSB+KDEgPDwgd1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9TVVNQRU5EOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm9vdGh1Yi5wb3J0c3RhdHVzW3BvcnRfaW5kZXhdLCBSSF9QU19QU1MpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfd3JpdGVfcGNpbWVtKHUxMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvb3RodWIucG9ydHN0YXR1c1twb3J0X2luZGV4XSwgUkhfUFNfUFBTKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICBjYXNlIFVTQl9QT1JUX0ZFQVRfUkVTRVQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3Jvb3RodWJfcG9ydHJlc2V0KHUxMzIsIHBvcnRfaW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVQSVBFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50IHUxMzJfcm9vdGh1Yl9jbGVhcnBvcnRmZWF0dXJlKHN0cnVjdCB1MTMyICp1MTMyLCB1MTYgd1ZhbHVlLAorICAgICAgICB1MTYgd0luZGV4KQoreworICAgICAgICBpZiAod0luZGV4ID09IDAgfHwgd0luZGV4ID4gdTEzMi0+bnVtX3BvcnRzKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IHBvcnRfaW5kZXggPSB3SW5kZXggLSAxOworICAgICAgICAgICAgICAgIHUzMiB0ZW1wOworICAgICAgICAgICAgICAgIGludCByZXR2YWw7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcG9ydCAqcG9ydCA9ICZ1MTMyLT5wb3J0W3BvcnRfaW5kZXhdOworICAgICAgICAgICAgICAgIHBvcnQtPlN0YXR1cyAmPSB+KDEgPDwgd1ZhbHVlKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHdWYWx1ZSkgeworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9FTkFCTEU6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUkhfUFNfQ0NTOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVU0JfUE9SVF9GRUFUX0NfRU5BQkxFOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFJIX1BTX1BFU0M7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFVTQl9QT1JUX0ZFQVRfU1VTUEVORDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBSSF9QU19QT0NJOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1MTMyLT5oY19jb250cm9sICYgT0hDSV9DVFJMX0hDRlMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICE9IE9IQ0lfVVNCX09QRVIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJUT0RPIHJlc3VtZV8iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvb3RfaHViXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9DX1NVU1BFTkQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUkhfUFNfUFNTQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9QT1dFUjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBSSF9QU19MU0RBOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBVU0JfUE9SVF9GRUFUX0NfQ09OTkVDVElPTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBSSF9QU19DU0M7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFVTQl9QT1JUX0ZFQVRfQ19PVkVSX0NVUlJFTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICB0ZW1wID0gUkhfUFNfT0NJQzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgVVNCX1BPUlRfRkVBVF9DX1JFU0VUOgorICAgICAgICAgICAgICAgICAgICAgICAgdGVtcCA9IFJIX1BTX1BSU0M7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FUElQRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl93cml0ZV9wY2ltZW0odTEzMiwgcm9vdGh1Yi5wb3J0c3RhdHVzW3BvcnRfaW5kZXhdLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXApOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9Cit9CisKKworLyogdGhlIHZpcnR1YWwgcm9vdCBodWIgdGltZXIgSVJRIGNoZWNrcyBmb3IgaHViIHN0YXR1cyovCitzdGF0aWMgaW50IHUxMzJfaHViX3N0YXR1c19kYXRhKHN0cnVjdCB1c2JfaGNkICpoY2QsIGNoYXIgKmJ1ZikKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAxKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGNkPSVwIGhhcyBiZWVuIHJlbW92IgorICAgICAgICAgICAgICAgICAgICAgICAgImVkICVkXG4iLCBoY2QsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoY2Q9JXAgaXMgYmVpbmcgcmVtb3YiCisgICAgICAgICAgICAgICAgICAgICAgICAiZWRcbiIsIGhjZCk7CisgICAgICAgICAgICAgICAgZHVtcF9zdGFjaygpOworICAgICAgICAgICAgICAgIHJldHVybiAtRVNIVVRET1dOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBpLCBjaGFuZ2VkID0gMCwgbGVuZ3RoID0gMTsKKyAgICAgICAgICAgICAgICBpZiAodTEzMi0+ZmxhZ3MgJiBPSENJX1FVSVJLX0FNRDc1NikgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1MTMyLT5oY19yb290aHViX2EgJiBSSF9BX05EUCkgPiBNQVhfUk9PVF9QT1JUUykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImJvZ3VzIE5EUCwgciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJlYWRzIGFzIE5EUD0lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyLT5oY19yb290aHViX2EgJiBSSF9BX05EUCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHUxMzItPmhjX3Jvb3RodWJfc3RhdHVzICYgKFJIX0hTX0xQU0MgfCBSSF9IU19PQ0lDKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzBdID0gY2hhbmdlZCA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBidWZbMF0gPSAwOworICAgICAgICAgICAgICAgIGlmICh1MTMyLT5udW1fcG9ydHMgPiA3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBidWZbMV0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCB1MTMyLT5udW1fcG9ydHM7IGkrKykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHUxMzItPmhjX3Jvb3RodWJfcG9ydHN0YXR1c1tpXSAmIChSSF9QU19DU0MgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSF9QU19QRVNDIHwgUkhfUFNfUFNTQyB8IFJIX1BTX09DSUMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSSF9QU19QUlNDKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgPCA3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzBdIHw9IDEgPDwgKGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmWzFdIHw9IDEgPDwgKGkgLSA3KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh1MTMyLT5oY19yb290aHViX3BvcnRzdGF0dXNbaV0gJiBSSF9QU19DQ1MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1MTMyLT5oY19yb290aHViX3BvcnRzdGF0dXNbaV0gJiBSSF9QU19QU1MpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZG9uZTpyZXR1cm4gY2hhbmdlZCA/IGxlbmd0aCA6IDA7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCB1MTMyX2h1Yl9jb250cm9sKHN0cnVjdCB1c2JfaGNkICpoY2QsIHUxNiB0eXBlUmVxLCB1MTYgd1ZhbHVlLAorICAgICAgICB1MTYgd0luZGV4LCBjaGFyICpidWYsIHUxNiB3TGVuZ3RoKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICBkb3duKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVSZXEpIHsKKyAgICAgICAgICAgICAgICBjYXNlIENsZWFySHViRmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAod1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU2V0SHViRmVhdHVyZToKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAod1ZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENfSFVCX09WRVJfQ1VSUkVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ19IVUJfTE9DQUxfUE9XRVI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBzdGFsbDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQ2xlYXJQb3J0RmVhdHVyZTp7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfcm9vdGh1Yl9jbGVhcnBvcnRmZWF0dXJlKHUxMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd1ZhbHVlLCB3SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2V0SHViRGVzY3JpcHRvcjp7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfcm9vdGh1Yl9kZXNjcmlwdG9yKHUxMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB1c2JfaHViX2Rlc2NyaXB0b3IgKilidWYpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgR2V0SHViU3RhdHVzOnsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gdTEzMl9yb290aHViX3N0YXR1cyh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2xlMzIgKikgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjYXNlIEdldFBvcnRTdGF0dXM6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3Jvb3RodWJfcG9ydHN0YXR1cyh1MTMyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX2xlMzIgKikgYnVmLCB3SW5kZXgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0dmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGNhc2UgU2V0UG9ydEZlYXR1cmU6eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSB1MTMyX3Jvb3RodWJfc2V0cG9ydGZlYXR1cmUodTEzMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3VmFsdWUsIHdJbmRleCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gc3RhbGw7CisgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6dTEzMl9kaXNhYmxlKHUxMzIpOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMi0+Z29pbmcgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgc3RhbGw6cmV0dmFsID0gLUVQSVBFOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVwKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9zdGFydF9wb3J0X3Jlc2V0KHN0cnVjdCB1c2JfaGNkICpoY2QsIHVuc2lnbmVkIHBvcnRfbnVtKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHUxMzJfaHViX2lycV9lbmFibGUoc3RydWN0IHVzYl9oY2QgKmhjZCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAxKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKQorICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWRcbiIpOworfQorCisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgdTEzMl9oY2Rfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkLCBwbV9tZXNzYWdlX3QgbWVzc2FnZSkKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzIgPSBoY2RfdG9fdTEzMihoY2QpOworICAgICAgICBpZiAodTEzMi0+Z29pbmcgPiAxKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaGFzIGJlZW4gcmVtb3ZlZCAlZFxuIgorICAgICAgICAgICAgICAgICAgICAgICAgLCB1MTMyLT5nb2luZyk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSBpZiAodTEzMi0+Z29pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJkZXZpY2UgaXMgYmVpbmcgcmVtb3ZlZFxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FU0hVVERPV047CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHUxMzJfaGNkX3Jlc3VtZShzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9idXNfc3VzcGVuZChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQoreworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9idXNfcmVzdW1lKHN0cnVjdCB1c2JfaGNkICpoY2QpCit7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gaGNkX3RvX3UxMzIoaGNkKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgaWYgKHUxMzItPmdvaW5nID4gMCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRVNIVVRET1dOOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKK30KKworI2Vsc2UKKyNkZWZpbmUgdTEzMl9oY2Rfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHUxMzJfaGNkX3Jlc3VtZSBOVUxMCisjZGVmaW5lIHUxMzJfYnVzX3N1c3BlbmQgTlVMTAorI2RlZmluZSB1MTMyX2J1c19yZXN1bWUgTlVMTAorI2VuZGlmCitzdGF0aWMgc3RydWN0IGhjX2RyaXZlciB1MTMyX2hjX2RyaXZlciA9IHsKKyAgICAgICAgLmRlc2NyaXB0aW9uID0gaGNkX25hbWUsCisgICAgICAgIC5oY2RfcHJpdl9zaXplID0gc2l6ZW9mKHN0cnVjdCB1MTMyKSwKKyAgICAgICAgLmlycSA9IE5VTEwsCisgICAgICAgIC5mbGFncyA9IEhDRF9VU0IxMSB8IEhDRF9NRU1PUlksCisgICAgICAgIC5yZXNldCA9IHUxMzJfaGNkX3Jlc2V0LAorICAgICAgICAuc3RhcnQgPSB1MTMyX2hjZF9zdGFydCwKKyAgICAgICAgLnN1c3BlbmQgPSB1MTMyX2hjZF9zdXNwZW5kLAorICAgICAgICAucmVzdW1lID0gdTEzMl9oY2RfcmVzdW1lLAorICAgICAgICAuc3RvcCA9IHUxMzJfaGNkX3N0b3AsCisgICAgICAgIC51cmJfZW5xdWV1ZSA9IHUxMzJfdXJiX2VucXVldWUsCisgICAgICAgIC51cmJfZGVxdWV1ZSA9IHUxMzJfdXJiX2RlcXVldWUsCisgICAgICAgIC5lbmRwb2ludF9kaXNhYmxlID0gdTEzMl9lbmRwb2ludF9kaXNhYmxlLAorICAgICAgICAuZ2V0X2ZyYW1lX251bWJlciA9IHUxMzJfZ2V0X2ZyYW1lLAorICAgICAgICAuaHViX3N0YXR1c19kYXRhID0gdTEzMl9odWJfc3RhdHVzX2RhdGEsCisgICAgICAgIC5odWJfY29udHJvbCA9IHUxMzJfaHViX2NvbnRyb2wsCisgICAgICAgIC5idXNfc3VzcGVuZCA9IHUxMzJfYnVzX3N1c3BlbmQsCisgICAgICAgIC5idXNfcmVzdW1lID0gdTEzMl9idXNfcmVzdW1lLAorICAgICAgICAuc3RhcnRfcG9ydF9yZXNldCA9IHUxMzJfc3RhcnRfcG9ydF9yZXNldCwKKyAgICAgICAgLmh1Yl9pcnFfZW5hYmxlID0gdTEzMl9odWJfaXJxX2VuYWJsZSwKK307CisKKy8qCisqIFRoaXMgZnVuY3Rpb24gbWF5IGJlIGNhbGxlZCBieSB0aGUgVVNCIGNvcmUgd2hpbHN0IHRoZSAidXNiX2FsbF9kZXZpY2VzX3J3c2VtIgorKiBpcyBoZWxkIGZvciB3cml0aW5nLCB0aHVzIHRoaXMgbW9kdWxlIG11c3Qgbm90IGNhbGwgdXNiX3JlbW92ZV9oY2QoKQorKiBzeW5jaHJvbm91c2x5IC0gYnV0IGluc3RlYWQgc2hvdWxkIGltbWVkaWF0ZWx5IHN0b3AgYWN0aXZpdHkgdG8gdGhlCisqIGRldmljZSBhbmQgYW5zeW5jaHJvbm91c2x5IGNhbGwgdXNiX3JlbW92ZV9oY2QoKQorKi8KK3N0YXRpYyBpbnQgX19kZXZleGl0IHUxMzJfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisgICAgICAgIHN0cnVjdCB1c2JfaGNkICpoY2QgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKyAgICAgICAgaWYgKGhjZCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gaGNkX3RvX3UxMzIoaGNkKTsKKyAgICAgICAgICAgICAgICBkdW1wX3N0YWNrKCk7CisgICAgICAgICAgICAgICAgaWYgKHUxMzItPmdvaW5nKysgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJpbmdzID0gTUFYX1UxMzJfUklOR1M7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW5kcHMgPSBNQVhfVTEzMl9FTkRQUzsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmdTEzMi0+c3dfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX21vbml0b3JfY2FuY2VsX3dvcmsodTEzMik7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocmluZ3MtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmluZyAqcmluZyA9ICZ1MTMyLT5yaW5nW3JpbmdzXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9yaW5nX2NhbmNlbF93b3JrKHUxMzIsIHJpbmcpOworICAgICAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAoZW5kcHMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfZW5kcCAqZW5kcCA9IHUxMzItPmVuZHBbZW5kcHNdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW5kcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTMyX2VuZHBfY2FuY2VsX3dvcmsodTEzMiwgZW5kcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB1MTMyLT5nb2luZyArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAicmVtb3ZpbmcgZGV2aWNlIHUxMzIuJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUxMzItPnNlcXVlbmNlX251bSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmdTEzMi0+c3dfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmVtb3ZlX2hjZChoY2QpOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl91MTMyX3B1dF9rcmVmKHUxMzIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgdTEzMl9pbml0aWFsaXNlKHN0cnVjdCB1MTMyICp1MTMyLCBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworICAgICAgICBpbnQgcmluZ3MgPSBNQVhfVTEzMl9SSU5HUzsKKyAgICAgICAgaW50IHBvcnRzID0gTUFYX1UxMzJfUE9SVFM7CisgICAgICAgIGludCBhZGRycyA9IE1BWF9VMTMyX0FERFJTOworICAgICAgICBpbnQgdWRldnMgPSBNQVhfVTEzMl9VREVWUzsKKyAgICAgICAgaW50IGVuZHBzID0gTUFYX1UxMzJfRU5EUFM7CisgICAgICAgIHUxMzItPmJvYXJkID0gcGRldi0+ZGV2LnBsYXRmb3JtX2RhdGE7CisgICAgICAgIHUxMzItPnBsYXRmb3JtX2RldiA9IHBkZXY7CisgICAgICAgIHUxMzItPnBvd2VyID0gMDsKKyAgICAgICAgdTEzMi0+cmVzZXQgPSAwOworICAgICAgICBpbml0X01VVEVYKCZ1MTMyLT5zd19sb2NrKTsKKyAgICAgICAgaW5pdF9NVVRFWCgmdTEzMi0+c2NoZWR1bGVyX2xvY2spOworICAgICAgICB3aGlsZSAocmluZ3MtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yaW5nICpyaW5nID0gJnUxMzItPnJpbmdbcmluZ3NdOworICAgICAgICAgICAgICAgIHJpbmctPnUxMzIgPSB1MTMyOworICAgICAgICAgICAgICAgIHJpbmctPm51bWJlciA9IHJpbmdzICsgMTsKKyAgICAgICAgICAgICAgICByaW5nLT5sZW5ndGggPSAwOworICAgICAgICAgICAgICAgIHJpbmctPmN1cnJfZW5kcCA9IE5VTEw7CisgICAgICAgICAgICAgICAgSU5JVF9XT1JLKCZyaW5nLT5zY2hlZHVsZXIsIHUxMzJfaGNkX3Jpbmdfd29ya19zY2hlZHVsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKXJpbmcpOworICAgICAgICB9IGRvd24oJnUxMzItPnN3X2xvY2spOworICAgICAgICBJTklUX1dPUksoJnUxMzItPm1vbml0b3IsIHUxMzJfaGNkX21vbml0b3Jfd29yaywgKHZvaWQgKil1MTMyKTsKKyAgICAgICAgd2hpbGUgKHBvcnRzLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcG9ydCAqcG9ydCA9ICZ1MTMyLT5wb3J0W3BvcnRzXTsKKyAgICAgICAgICAgICAgICBwb3J0LT51MTMyID0gdTEzMjsKKyAgICAgICAgICAgICAgICBwb3J0LT5yZXNldCA9IDA7CisgICAgICAgICAgICAgICAgcG9ydC0+ZW5hYmxlID0gMDsKKyAgICAgICAgICAgICAgICBwb3J0LT5wb3dlciA9IDA7CisgICAgICAgICAgICAgICAgcG9ydC0+U3RhdHVzID0gMDsKKyAgICAgICAgfSB3aGlsZSAoYWRkcnMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9hZGRyICphZGRyID0gJnUxMzItPmFkZHJbYWRkcnNdOworICAgICAgICAgICAgICAgIGFkZHItPmFkZHJlc3MgPSAwOworICAgICAgICB9IHdoaWxlICh1ZGV2cy0tID4gMCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3VkZXYgKnVkZXYgPSAmdTEzMi0+dWRldlt1ZGV2c107CisgICAgICAgICAgICAgICAgaW50IGkgPSBBUlJBWV9TSVpFKHVkZXYtPmVuZHBfbnVtYmVyX2luKTsKKyAgICAgICAgICAgICAgICBpbnQgbyA9IEFSUkFZX1NJWkUodWRldi0+ZW5kcF9udW1iZXJfb3V0KTsKKyAgICAgICAgICAgICAgICB1ZGV2LT51c2JfZGV2aWNlID0gTlVMTDsKKyAgICAgICAgICAgICAgICB1ZGV2LT51ZGV2X251bWJlciA9IDA7CisgICAgICAgICAgICAgICAgdWRldi0+dXNiX2FkZHIgPSAwOworICAgICAgICAgICAgICAgIHVkZXYtPnBvcnRudW1iZXIgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChpLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9pbltpXSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChvLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1ZGV2LT5lbmRwX251bWJlcl9vdXRbb10gPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZW5kcHMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICB1MTMyLT5lbmRwW2VuZHBzXSA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdXAoJnUxMzItPnN3X2xvY2spOworICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgX19kZXZpbml0IHUxMzJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyAgICAgICAgc3RydWN0IHVzYl9oY2QgKmhjZDsKKyAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgIGlmICh1MTMyX2V4aXRpbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAvKiByZWZ1c2UgdG8gY29uZnVzZSB1c2Jjb3JlICovCisgICAgICAgIGlmIChwZGV2LT5kZXYuZG1hX21hc2spIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorICAgICAgICBoY2QgPSB1c2JfY3JlYXRlX2hjZCgmdTEzMl9oY19kcml2ZXIsICZwZGV2LT5kZXYsIHBkZXYtPmRldi5idXNfaWQpOworICAgICAgICBpZiAoIWhjZCkgeworICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgdXNiIGhjZCBzdHJ1Y3QgZm9yIFUxMzJcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2dvbmVfYXdheShwZGV2KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgICAgICAgICAgaGNkLT5yc3JjX3N0YXJ0ID0gMDsKKyAgICAgICAgICAgICAgICBkb3duKCZ1MTMyX21vZHVsZV9sb2NrKTsKKyAgICAgICAgICAgICAgICBsaXN0X2FkZF90YWlsKCZ1MTMyLT51MTMyX2xpc3QsICZ1MTMyX3N0YXRpY19saXN0KTsKKyAgICAgICAgICAgICAgICB1MTMyLT5zZXF1ZW5jZV9udW0gPSArK3UxMzJfaW5zdGFuY2VzOworICAgICAgICAgICAgICAgIHVwKCZ1MTMyX21vZHVsZV9sb2NrKTsKKyAgICAgICAgICAgICAgICB1MTMyX3UxMzJfaW5pdF9rcmVmKHUxMzIpOworICAgICAgICAgICAgICAgIHUxMzJfaW5pdGlhbGlzZSh1MTMyLCBwZGV2KTsKKyAgICAgICAgICAgICAgICBoY2QtPnByb2R1Y3RfZGVzYyA9ICJFTEFOIFUxMzIgSG9zdCBDb250cm9sbGVyIjsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSB1c2JfYWRkX2hjZChoY2QsIDAsIDApOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmdTEzMi0+cGxhdGZvcm1fZGV2LT5kZXYsICJpbml0IGVycm9yICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl91MTMyX3B1dF9rcmVmKHUxMzIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdTEzMl9tb25pdG9yX3F1ZXVlX3dvcmsodTEzMiwgMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCisKKyNpZmRlZiBDT05GSUdfUE0KKy8qIGZvciB0aGlzIGRldmljZSB0aGVyZSdzIG5vIHVzZWZ1bCBkaXN0aW5jdGlvbiBiZXR3ZWVuIHRoZSBjb250cm9sbGVyCisqIGFuZCBpdHMgcm9vdCBodWIsIGV4Y2VwdCB0aGF0IHRoZSByb290IGh1YiBvbmx5IGdldHMgZGlyZWN0IFBNIGNhbGxzCisqIHdoZW4gQ09ORklHX1VTQl9TVVNQRU5EIGlzIGVuYWJsZWQuCisqLworc3RhdGljIGludCB1MTMyX3N1c3BlbmQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2hjZCAqaGNkID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CisgICAgICAgIHN0cnVjdCB1MTMyICp1MTMyID0gaGNkX3RvX3UxMzIoaGNkKTsKKyAgICAgICAgaWYgKHUxMzItPmdvaW5nID4gMSkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGhhcyBiZWVuIHJlbW92ZWQgJWRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgICwgdTEzMi0+Z29pbmcpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgaWYgKHUxMzItPmdvaW5nID4gMCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJnUxMzItPnBsYXRmb3JtX2Rldi0+ZGV2LCAiZGV2aWNlIGlzIGJlaW5nIHJlbW92ZWRcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRVNIVVRET1dOOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSAwOworICAgICAgICAgICAgICAgIGlmIChzdGF0ZS5ldmVudCA9PSBQTV9FVkVOVF9GUkVFWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfYnVzX3N1c3BlbmQoaGNkKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0cyA9IE1BWF9VMTMyX1BPUlRTOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcnRzLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfcG93ZXIodTEzMiwgcG9ydHMsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocmV0dmFsID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICBwZGV2LT5kZXYucG93ZXIucG93ZXJfc3RhdGUgPSBzdGF0ZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgdTEzMl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKyAgICAgICAgc3RydWN0IHVzYl9oY2QgKmhjZCA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOworICAgICAgICBzdHJ1Y3QgdTEzMiAqdTEzMiA9IGhjZF90b191MTMyKGhjZCk7CisgICAgICAgIGlmICh1MTMyLT5nb2luZyA+IDEpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBoYXMgYmVlbiByZW1vdmVkICVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAsIHUxMzItPmdvaW5nKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmICh1MTMyLT5nb2luZyA+IDApIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZ1MTMyLT5wbGF0Zm9ybV9kZXYtPmRldiwgImRldmljZSBpcyBiZWluZyByZW1vdmVkXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVTSFVURE9XTjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICBpZiAocGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlLmV2ZW50ID09IFBNX0VWRU5UX1NVU1BFTkQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwb3J0cyA9IE1BWF9VMTMyX1BPUlRTOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBvcnRzLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRfcG93ZXIodTEzMiwgcG9ydHMsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgcGRldi0+ZGV2LnBvd2VyLnBvd2VyX3N0YXRlID0gUE1TR19PTjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHUxMzJfYnVzX3Jlc3VtZShoY2QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICB9Cit9CisKKyNlbHNlCisjZGVmaW5lIHUxMzJfc3VzcGVuZCBOVUxMCisjZGVmaW5lIHUxMzJfcmVzdW1lIE5VTEwKKyNlbmRpZgorLyoKKyogdGhpcyBkcml2ZXIgaXMgbG9hZGVkIGV4cGxpY2l0ZWx5IGJ5IGZ0ZGlfdTEzMgorKgorKiB0aGUgcGxhdGZvcm1fZHJpdmVyIHN0cnVjdCBpcyBzdGF0aWMgYmVjYXVzZSBpdCBpcyBwZXIgdHlwZSBvZiBtb2R1bGUKKyovCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1MTMyX3BsYXRmb3JtX2RyaXZlciA9IHsKKyAgICAgICAgLnByb2JlID0gdTEzMl9wcm9iZSwKKyAgICAgICAgLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHUxMzJfcmVtb3ZlKSwKKyAgICAgICAgLnN1c3BlbmQgPSB1MTMyX3N1c3BlbmQsCisgICAgICAgIC5yZXN1bWUgPSB1MTMyX3Jlc3VtZSwKKyAgICAgICAgLmRyaXZlciA9IHsKKyAgICAgICAgICAgICAgICAgICAubmFtZSA9IChjaGFyICopaGNkX25hbWUsCisgICAgICAgICAgICAgICAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisgICAgICAgICAgICAgICAgICAgfSwKK307CitzdGF0aWMgaW50IF9faW5pdCB1MTMyX2hjZF9pbml0KHZvaWQpCit7CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIElOSVRfTElTVF9IRUFEKCZ1MTMyX3N0YXRpY19saXN0KTsKKyAgICAgICAgdTEzMl9pbnN0YW5jZXMgPSAwOworICAgICAgICB1MTMyX2V4aXRpbmcgPSAwOworICAgICAgICBpbml0X01VVEVYKCZ1MTMyX21vZHVsZV9sb2NrKTsKKyAgICAgICAgaWYgKHVzYl9kaXNhYmxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJkcml2ZXIgJXMgYnVpbHQgYXQgJXMgb24gJXNcbiIsIGhjZF9uYW1lLCBfX1RJTUVfXywKKyAgICAgICAgICAgICAgICBfX0RBVEVfXyk7CisgICAgICAgIHdvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJ1MTMyIik7CisgICAgICAgIHJldHZhbCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmdTEzMl9wbGF0Zm9ybV9kcml2ZXIpOworICAgICAgICByZXR1cm4gcmV0dmFsOworfQorCisKK21vZHVsZV9pbml0KHUxMzJfaGNkX2luaXQpOworc3RhdGljIHZvaWQgX19leGl0IHUxMzJfaGNkX2V4aXQodm9pZCkKK3sKKyAgICAgICAgc3RydWN0IHUxMzIgKnUxMzI7CisgICAgICAgIHN0cnVjdCB1MTMyICp0ZW1wOworICAgICAgICBkb3duKCZ1MTMyX21vZHVsZV9sb2NrKTsKKyAgICAgICAgdTEzMl9leGl0aW5nICs9IDE7CisgICAgICAgIHVwKCZ1MTMyX21vZHVsZV9sb2NrKTsKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHUxMzIsIHRlbXAsICZ1MTMyX3N0YXRpY19saXN0LCB1MTMyX2xpc3QpIHsKKyAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3Rlcih1MTMyLT5wbGF0Zm9ybV9kZXYpOworICAgICAgICB9IHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZ1MTMyX3BsYXRmb3JtX2RyaXZlcik7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gInUxMzItaGNkIGRyaXZlciBkZXJlZ2lzdGVyZWRcbiIpOworICAgICAgICB3YWl0X2V2ZW50KHUxMzJfaGNkX3dhaXQsIHUxMzJfaW5zdGFuY2VzID09IDApOworICAgICAgICBmbHVzaF93b3JrcXVldWUod29ya3F1ZXVlKTsKKyAgICAgICAgZGVzdHJveV93b3JrcXVldWUod29ya3F1ZXVlKTsKK30KKworCittb2R1bGVfZXhpdCh1MTMyX2hjZF9leGl0KTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1kZWJ1Zy5jIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKaW5kZXggZGMyODZhNC4uZTM0NWYxNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWRlYnVnLmMKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1ZGUgInVoY2ktaGNkLmgiCiAKLSNkZWZpbmUgdWhjaV9kZWJ1Z19vcGVyYXRpb25zICgqIChzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICopIE5VTEwpCisjZGVmaW5lIHVoY2lfZGVidWdfb3BlcmF0aW9ucyAoKiAoY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqKSBOVUxMKQogc3RhdGljIHN0cnVjdCBkZW50cnkgKnVoY2lfZGVidWdmc19yb290OwogCiAjaWZkZWYgREVCVUcKQEAgLTQyOCw3ICs0MjgsNyBAQAogCiBzdGF0aWMgaW50IHVoY2lfZGVidWdfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlzdHJ1Y3QgdWhjaV9oY2QgKnVoY2kgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCXN0cnVjdCB1aGNpX2hjZCAqdWhjaSA9IGlub2RlLT5pX3ByaXZhdGU7CiAJc3RydWN0IHVoY2lfZGVidWcgKnVwOwogCWludCByZXQgPSAtRU5PTUVNOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC01MDAsNyArNTAwLDcgQEAKIH0KIAogI3VuZGVmIHVoY2lfZGVidWdfb3BlcmF0aW9ucwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWhjaV9kZWJ1Z19vcGVyYXRpb25zID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWhjaV9kZWJ1Z19vcGVyYXRpb25zID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5vcGVuID0JCXVoY2lfZGVidWdfb3BlbiwKIAkubGxzZWVrID0JdWhjaV9kZWJ1Z19sc2VlaywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1oY2QuYwppbmRleCBiNzQwMmNlLi5lYjRlYWI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaGNkLmMKKysrIGIvZHJpdmVycy91c2IvaG9zdC91aGNpLWhjZC5jCkBAIC05MTMsOCArOTEzLDcgQEAKIAlyZXR1cm4gMDsKIAogaW5pdF9mYWlsZWQ6Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCkpCi0JCXdhcm4oIm5vdCBhbGwgdXJiX3ByaXZzIHdlcmUgZnJlZWQhIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKTsKIAogdXBfZmFpbGVkOgogCWRlYnVnZnNfcmVtb3ZlKHVoY2lfZGVidWdmc19yb290KTsKQEAgLTkzMCwxMCArOTI5LDcgQEAKIHN0YXRpYyB2b2lkIF9fZXhpdCB1aGNpX2hjZF9jbGVhbnVwKHZvaWQpIAogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmdWhjaV9wY2lfZHJpdmVyKTsKLQkKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHVoY2lfdXBfY2FjaGVwKSkKLQkJd2Fybigibm90IGFsbCB1cmJfcHJpdnMgd2VyZSBmcmVlZCEiKTsKLQorCWttZW1fY2FjaGVfZGVzdHJveSh1aGNpX3VwX2NhY2hlcCk7CiAJZGVidWdmc19yZW1vdmUodWhjaV9kZWJ1Z2ZzX3Jvb3QpOwogCWtmcmVlKGVycmJ1Zik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMgYi9kcml2ZXJzL3VzYi9ob3N0L3VoY2ktaHViLmMKaW5kZXggYzU0NWVmOS4uMTZmYjcyZSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaG9zdC91aGNpLWh1Yi5jCisrKyBiL2RyaXZlcnMvdXNiL2hvc3QvdWhjaS1odWIuYwpAQCAtODQsNiArODQsNyBAQAogCQl1bnNpZ25lZCBsb25nIHBvcnRfYWRkcikKIHsKIAlpbnQgc3RhdHVzOworCWludCBpOwogCiAJaWYgKGludyhwb3J0X2FkZHIpICYgKFVTQlBPUlRTQ19TVVNQIHwgVVNCUE9SVFNDX1JEKSkgewogCQlDTFJfUkhfUE9SVFNUQVQoVVNCUE9SVFNDX1NVU1AgfCBVU0JQT1JUU0NfUkQpOwpAQCAtOTIsOSArOTMsMTQgQEAKIAogCQkvKiBUaGUgY29udHJvbGxlciB3b24ndCBhY3R1YWxseSB0dXJuIG9mZiB0aGUgUkQgYml0IHVudGlsCiAJCSAqIGl0IGhhcyBoYWQgYSBjaGFuY2UgdG8gc2VuZCBhIGxvdy1zcGVlZCBFT1Agc2VxdWVuY2UsCi0JCSAqIHdoaWNoIHRha2VzIDMgYml0IHRpbWVzICg9IDIgbWljcm9zZWNvbmRzKS4gIFdlJ2xsIGRlbGF5Ci0JCSAqIHNsaWdodGx5IGxvbmdlciBmb3IgZ29vZCBsdWNrLiAqLwotCQl1ZGVsYXkoNCk7CisJCSAqIHdoaWNoIGlzIHN1cHBvc2VkIHRvIHRha2UgMyBiaXQgdGltZXMgKD0gMiBtaWNyb3NlY29uZHMpLgorCQkgKiBFeHBlcmltZW50cyBzaG93IHRoYXQgc29tZSBjb250cm9sbGVycyB0YWtlIGxvbmdlciwgc28KKwkJICogd2UnbGwgcG9sbCBmb3IgY29tcGxldGlvbi4gKi8KKwkJZm9yIChpID0gMDsgaSA8IDEwOyArK2kpIHsKKwkJCWlmICghKGludyhwb3J0X2FkZHIpICYgVVNCUE9SVFNDX1JEKSkKKwkJCQlicmVhazsKKwkJCXVkZWxheSgxKTsKKwkJfQogCX0KIAljbGVhcl9iaXQocG9ydCwgJnVoY2ktPnJlc3VtaW5nX3BvcnRzKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2ltYWdlL21kYzgwMC5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKaW5kZXggMDhkYWY0MC4uY2E2MzA1YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKKysrIGIvZHJpdmVycy91c2IvaW1hZ2UvbWRjODAwLmMKQEAgLTQyNCw3ICs0MjQsNyBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIG1kYzgwMF91c2JfZHJpdmVyOwotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbWRjODAwX2RldmljZV9vcHM7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtZGM4MDBfZGV2aWNlX29wczsKIHN0YXRpYyBzdHJ1Y3QgdXNiX2NsYXNzX2RyaXZlciBtZGM4MDBfY2xhc3MgPSB7CiAJLm5hbWUgPQkJIm1kYzgwMCVkIiwKIAkuZm9wcyA9CQkmbWRjODAwX2RldmljZV9vcHMsCkBAIC05NDEsNyArOTQxLDcgQEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKIC8qIEZpbGUgT3BlcmF0aW9ucyBvZiB0aGlzIGRyaXZlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1kYzgwMF9kZXZpY2Vfb3BzID0KIHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQltZGM4MDBfZGV2aWNlX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuYwppbmRleCBiMmJhZmMzLi41Zjg2MTMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5jCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmMKQEAgLTIyNSw3ICsyMjUsNyBAQAogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBtdHNfc2hvd19jb21tYW5kKFNjc2lfQ21uZCAqc3JiKQorc3RhdGljIGlubGluZSB2b2lkIG10c19zaG93X2NvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewogCWNoYXIgKndoYXQgPSBOVUxMOwogCkBAIC0zMDksNyArMzA5LDcgQEAKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSB2b2lkIG10c19zaG93X2NvbW1hbmQoU2NzaV9DbW5kICogZHVtbXkpCitzdGF0aWMgaW5saW5lIHZvaWQgbXRzX3Nob3dfY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICogZHVtbXkpCiB7CiB9CiAKQEAgLTMzOCw3ICszMzgsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG10c19zY3NpX2Fib3J0IChTY3NpX0NtbmQgKnNyYikKK3N0YXRpYyBpbnQgbXRzX3Njc2lfYWJvcnQoc3RydWN0IHNjc2lfY21uZCAqc3JiKQogewogCXN0cnVjdCBtdHNfZGVzYyogZGVzYyA9IChzdHJ1Y3QgbXRzX2Rlc2MqKShzcmItPmRldmljZS0+aG9zdC0+aG9zdGRhdGFbMF0pOwogCkBAIC0zNDksNyArMzQ5LDcgQEAKIAlyZXR1cm4gRkFJTEVEOwogfQogCi1zdGF0aWMgaW50IG10c19zY3NpX2hvc3RfcmVzZXQgKFNjc2lfQ21uZCAqc3JiKQorc3RhdGljIGludCBtdHNfc2NzaV9ob3N0X3Jlc2V0KHN0cnVjdCBzY3NpX2NtbmQgKnNyYikKIHsKIAlzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MgPSAoc3RydWN0IG10c19kZXNjKikoc3JiLT5kZXZpY2UtPmhvc3QtPmhvc3RkYXRhWzBdKTsKIAlpbnQgcmVzdWx0LCByYzsKQEAgLTM2Niw4ICszNjYsOCBAQAogCXJldHVybiByZXN1bHQgPyBGQUlMRUQgOiBTVUNDRVNTOwogfQogCi1zdGF0aWMKLWludCBtdHNfc2NzaV9xdWV1ZWNvbW1hbmQgKFNjc2lfQ21uZCAqc3JiLCBtdHNfc2NzaV9jbW5kX2NhbGxiYWNrIGNhbGxiYWNrICk7CitzdGF0aWMgaW50CittdHNfc2NzaV9xdWV1ZWNvbW1hbmQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBtdHNfc2NzaV9jbW5kX2NhbGxiYWNrIGNhbGxiYWNrKTsKIAogc3RhdGljIHZvaWQgbXRzX3RyYW5zZmVyX2NsZWFudXAoIHN0cnVjdCB1cmIgKnRyYW5zZmVyICk7CiBzdGF0aWMgdm9pZCBtdHNfZG9fc2coc3RydWN0IHVyYiAqIHRyYW5zZmVyLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7CkBAIC01MzcsNyArNTM3LDcgQEAKICNkZWZpbmUgTVRTX0RJUkVDVElPTl9JU19JTih4KSAoKG10c19kaXJlY3Rpb25beD4+M10gPj4gKHggJiA3KSkgJiAxKQogCiBzdGF0aWMgdm9pZAotbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoIFNjc2lfQ21uZCAqc3JiLCBzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MgKQorbXRzX2J1aWxkX3RyYW5zZmVyX2NvbnRleHQoc3RydWN0IHNjc2lfY21uZCAqc3JiLCBzdHJ1Y3QgbXRzX2Rlc2MqIGRlc2MpCiB7CiAJaW50IHBpcGU7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICogc2c7CkBAIC01ODgsOCArNTg4LDggQEAKIH0KIAogCi1zdGF0aWMKLWludCBtdHNfc2NzaV9xdWV1ZWNvbW1hbmQoIFNjc2lfQ21uZCAqc3JiLCBtdHNfc2NzaV9jbW5kX2NhbGxiYWNrIGNhbGxiYWNrICkKK3N0YXRpYyBpbnQKK210c19zY3NpX3F1ZXVlY29tbWFuZChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIG10c19zY3NpX2NtbmRfY2FsbGJhY2sgY2FsbGJhY2spCiB7CiAJc3RydWN0IG10c19kZXNjKiBkZXNjID0gKHN0cnVjdCBtdHNfZGVzYyopKHNyYi0+ZGV2aWNlLT5ob3N0LT5ob3N0ZGF0YVswXSk7CiAJaW50IGVyciA9IDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oIGIvZHJpdmVycy91c2IvaW1hZ2UvbWljcm90ZWsuaAppbmRleCA5MjZkNGJkLi5kNWQ2MmE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbWFnZS9taWNyb3Rlay5oCisrKyBiL2RyaXZlcnMvdXNiL2ltYWdlL21pY3JvdGVrLmgKQEAgLTgsMTQgKzgsMTQgQEAKICAqCiAgKi8KIAotdHlwZWRlZiB2b2lkICgqbXRzX3Njc2lfY21uZF9jYWxsYmFjaykoU2NzaV9DbW5kICopOwordHlwZWRlZiB2b2lkICgqbXRzX3Njc2lfY21uZF9jYWxsYmFjaykoc3RydWN0IHNjc2lfY21uZCAqKTsKIAogCiBzdHJ1Y3QgbXRzX3RyYW5zZmVyX2NvbnRleHQKIHsKIAlzdHJ1Y3QgbXRzX2Rlc2MqIGluc3RhbmNlOwogCW10c19zY3NpX2NtbmRfY2FsbGJhY2sgZmluYWxfY2FsbGJhY2s7Ci0JU2NzaV9DbW5kICpzcmI7CisJc3RydWN0IHNjc2lfY21uZCAqc3JiOwogCQogCXZvaWQqIGRhdGE7CiAJdW5zaWduZWQgZGF0YV9sZW5ndGg7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnIGIvZHJpdmVycy91c2IvaW5wdXQvS2NvbmZpZwppbmRleCA2NTAxMDNiLi5hMTAyYTU4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9LY29uZmlnCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L0tjb25maWcKQEAgLTIwNSwxMCArMjA1LDEyIEBACiAJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQKIAktLS1oZWxwLS0tCiAJICBVU0IgVG91Y2hzY3JlZW4gZHJpdmVyIGZvcjoKLQkgIC0gZUdhbGF4IFRvdWNoa2l0IFVTQgorCSAgLSBlR2FsYXggVG91Y2hraXQgVVNCIChhbHNvIGluY2x1ZGVzIGVUdXJib1RvdWNoIENULTQxMC81MTAvNzAwKQogCSAgLSBQYW5KaXQgVG91Y2hTZXQgVVNCCi0JICAtIDNNIE1pY3JvVG91Y2ggVVNCCisJICAtIDNNIE1pY3JvVG91Y2ggVVNCIChFWCBJSSBzZXJpZXMpCiAJICAtIElUTQorCSAgLSBzb21lIG90aGVyIGVUdXJib1RvdWNoCisJICAtIEd1bnplIEFITDYxCiAKIAkgIEhhdmUgYSBsb29rIGF0IDxodHRwOi8vbGludXguY2hhcHRlcjcuY2gvdG91Y2hraXQvPiBmb3IKIAkgIGEgdXNhZ2UgZGVzY3JpcHRpb24gYW5kIHRoZSByZXF1aXJlZCB1c2VyLXNwYWNlIHN0dWZmLgpAQCAtMjE4LDcgKzIyMCw3IEBACiAKIGNvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCiAJZGVmYXVsdCB5Ci0JYm9vbCAiZUdhbGF4IGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWJvb2wgImVHYWxheCwgZVR1cmJvVG91Y2ggQ1QtNDEwLzUxMC83MDAgZGV2aWNlIHN1cHBvcnQiIGlmIEVNQkVEREVECiAJZGVwZW5kcyBvbiBVU0JfVE9VQ0hTQ1JFRU4KIAogY29uZmlnIFVTQl9UT1VDSFNDUkVFTl9QQU5KSVQKQEAgLTIyOCw3ICsyMzAsNyBAQAogCiBjb25maWcgVVNCX1RPVUNIU0NSRUVOXzNNCiAJZGVmYXVsdCB5Ci0JYm9vbCAiM00vTWljcm90b3VjaCBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlib29sICIzTS9NaWNyb3RvdWNoIEVYIElJIHNlcmllcyBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgogCiBjb25maWcgVVNCX1RPVUNIU0NSRUVOX0lUTQpAQCAtMjM2LDYgKzIzOCwxNiBAQAogCWJvb2wgIklUTSBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgogCitjb25maWcgVVNCX1RPVUNIU0NSRUVOX0VUVVJCTworCWRlZmF1bHQgeQorCWJvb2wgImVUdXJib1RvdWNoIChub24tZUdhbGF4IGNvbXBhdGlibGUpIGRldmljZSBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlcGVuZHMgb24gVVNCX1RPVUNIU0NSRUVOCisKK2NvbmZpZyBVU0JfVE9VQ0hTQ1JFRU5fR1VOWkUKKwlkZWZhdWx0IHkKKwlib29sICJHdW56ZSBBSEw2MSBkZXZpY2Ugc3VwcG9ydCIgaWYgRU1CRURERUQKKwlkZXBlbmRzIG9uIFVTQl9UT1VDSFNDUkVFTgorCiBjb25maWcgVVNCX1lFQUxJTksKIAl0cmlzdGF0ZSAiWWVhbGluayB1c2ItcDFrIHZvaXAgcGhvbmUiCiAJZGVwZW5kcyBvbiBVU0IgJiYgSU5QVVQgJiYgRVhQRVJJTUVOVEFMCkBAIC0zMjYsMyArMzM4LDEzIEBACiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFwcGxldG91Y2guCisKK2NvbmZpZyBVU0JfVFJBTkNFVklCUkFUT1IKKwl0cmlzdGF0ZSAiUGxheVN0YXRpb24gMiBUcmFuY2UgVmlicmF0b3IgZHJpdmVyIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0IKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQbGF5U3RhdGlvbiAyIFRyYW5jZSBWaWJyYXRvcgorCSAgZGV2aWNlIHRvIHlvdXIgY29tcHV0ZXIncyBVU0IgcG9ydC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdHJhbmNldmlicmF0b3IuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCmluZGV4IDc2NDExNDUuLjQ4NTUxYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L01ha2VmaWxlCkBAIC0zLDYgKzMsNyBAQAogIwogCiAjIE11bHRpcGFydCBvYmplY3RzLgord2Fjb20tb2Jqcwk6PSB3YWNvbV9zeXMubyB3YWNvbV93YWMubwogdXNiaGlkLW9ianMJOj0gaGlkLWNvcmUubwogCiAjIE9wdGlvbmFsIHBhcnRzIG9mIG11bHRpcGFydCBvYmplY3RzLgpAQCAtNDQsNiArNDUsNyBAQAogb2JqLSQoQ09ORklHX1VTQl9ZRUFMSU5LKQkrPSB5ZWFsaW5rLm8KIG9iai0kKENPTkZJR19VU0JfWFBBRCkJCSs9IHhwYWQubwogb2JqLSQoQ09ORklHX1VTQl9BUFBMRVRPVUNIKQkrPSBhcHBsZXRvdWNoLm8KK29iai0kKENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IpCSs9IHRyYW5jZXZpYnJhdG9yLm8KIAogaWZlcSAoJChDT05GSUdfVVNCX0RFQlVHKSx5KQogRVhUUkFfQ0ZMQUdTICs9IC1EREVCVUcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2FjZWNhZC5jIGIvZHJpdmVycy91c2IvaW5wdXQvYWNlY2FkLmMKaW5kZXggMThjMTBlMS4uZDgzNjAzYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvYWNlY2FkLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYWNlY2FkLmMKQEAgLTE0MSwxMCArMTQxLDcgQEAKIAogCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKIAotCWlmICghKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgMHg4MCkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JaWYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgIT0gMykKKwlpZiAoIXVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYyBiL2RyaXZlcnMvdXNiL2lucHV0L2FwcGxldG91Y2guYwppbmRleCAwNDRmYWEwLi4wYWE5Y2MyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9hcHBsZXRvdWNoLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvYXBwbGV0b3VjaC5jCkBAIC00MzYsMTAgKzQzNiw3IEBACiAJaWZhY2VfZGVzYyA9IGlmYWNlLT5jdXJfYWx0c2V0dGluZzsKIAlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKIAkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKLQkJaWYgKCFpbnRfaW5fZW5kcG9pbnRBZGRyICYmCi0JCSAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJaWYgKCFpbnRfaW5fZW5kcG9pbnRBZGRyICYmIHVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBhbiBpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgKi8KIAkJCWludF9pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jIGIvZHJpdmVycy91c2IvaW5wdXQvYXRpX3JlbW90ZS5jCmluZGV4IDM3MTlmY2IuLjM1NThkN2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2F0aV9yZW1vdGUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9hdGlfcmVtb3RlLmMKQEAgLTczMiwxMiArNzMyLDggQEAKIAllbmRwb2ludF9pbiA9ICZpZmFjZV9ob3N0LT5lbmRwb2ludFswXS5kZXNjOwogCWVuZHBvaW50X291dCA9ICZpZmFjZV9ob3N0LT5lbmRwb2ludFsxXS5kZXNjOwogCi0JaWYgKCEoZW5kcG9pbnRfaW4tPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSkgewotCQllcnIoIiVzOiBVbmV4cGVjdGVkIGVuZHBvaW50X2luLT5iRW5kcG9pbnRBZGRyZXNzXG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JaWYgKChlbmRwb2ludF9pbi0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spICE9IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkgewotCQllcnIoIiVzOiBVbmV4cGVjdGVkIGVuZHBvaW50X2luLT5ibUF0dHJpYnV0ZXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJaWYgKCF1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50X2luKSkgeworCQllcnIoIiVzOiBVbmV4cGVjdGVkIGVuZHBvaW50X2luXG4iLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKGxlMTZfdG9fY3B1KGVuZHBvaW50X2luLT53TWF4UGFja2V0U2l6ZSkgPT0gMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZC1jb3JlLmMKaW5kZXggMzMwNWZiNi4uODFiMWVhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvaGlkLWNvcmUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9oaWQtY29yZS5jCkBAIC0xMDIzLDcgKzEwMjMsOCBAQAogCQkJcmV0dXJuOwogCQljYXNlIC1FSUxTRVE6CQkvKiBwcm90b2NvbCBlcnJvciBvciB1bnBsdWcgKi8KIAkJY2FzZSAtRVBST1RPOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCi0JCWNhc2UgLUVUSU1FRE9VVDoJLyogTkFLICovCisJCWNhc2UgLUVUSU1FOgkJLyogcHJvdG9jb2wgZXJyb3Igb3IgdW5wbHVnICovCisJCWNhc2UgLUVUSU1FRE9VVDoJLyogU2hvdWxkIG5ldmVyIGhhcHBlbiwgYnV0Li4uICovCiAJCQljbGVhcl9iaXQoSElEX0lOX1JVTk5JTkcsICZoaWQtPmlvZmwpOwogCQkJaGlkX2lvX2Vycm9yKGhpZCk7CiAJCQlyZXR1cm47CkBAIC0xNTM1LDEzICsxNTM2LDE3IEBACiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfR0xBQgkJMHgwNmMyCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMzAJMHgwMDM4CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMzAJMHgwMDM5Ci0jZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzhfSUZfS0lUCTB4MDA0NQogI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfMF80X0lGX0tJVAkweDAwNDAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF8wXzE2XzE2X0lGX0tJVAkweDAwNDQKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQJMHgwMDQ1CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMF84XzdfSUZfS0lUCTB4MDA1MQogI2RlZmluZSBVU0JfREVWSUNFX0lEXzBfOF84X0lGX0tJVAkweDAwNTMKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTAkweDAwNTgKIAogI2RlZmluZSBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUAkJMHgwOTI1CiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfMV9QSElER0VUU0VSVk9fMjAJMHg4MTAxCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAJMHg4MTA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfOF84XzRfSUZfS0lUCTB4ODIwMQogI2RlZmluZSBVU0JfREVWSUNFX0lEX0RVQUxfVVNCX0pPWVBBRCAgIDB4ODg2NgogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0lTRUdST1VQX0xURAkweDY2NzcKQEAgLTE1OTEsNiArMTU5NiwxMyBAQAogCiAjZGVmaW5lIFVTQl9WRU5ET1JfSURfWUVBTElOSwkJMHg2OTkzCiAjZGVmaW5lIFVTQl9ERVZJQ0VfSURfWUVBTElOS19QMUtfUDRLX0IySwkweGIwMDEKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX0FMQ09SCQkweDA1OGYKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9BTENPUl9VU0JSUzIzMgkweDk3MjAKKworI2RlZmluZSBVU0JfVkVORE9SX0lEX1NVTgkJMHgwNDMwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfUkFSSVRBTl9LVk1fRE9OR0xFCTB4Y2RhYgorCiAvKgogICogQWxwaGFiZXRpY2FsbHkgc29ydGVkIGJsYWNrbGlzdCBieSBxdWlyayB0eXBlLgogICovCkBAIC0xNjA4LDYgKzE2MjAsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9BSVBURUssIFVTQl9ERVZJQ0VfSURfQUlQVEVLXzIyLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0FJUFRFSywgVVNCX0RFVklDRV9JRF9BSVBURUtfMjMsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfQUlQVEVLLCBVU0JfREVWSUNFX0lEX0FJUFRFS18yNCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9BTENPUiwgVVNCX0RFVklDRV9JRF9BTENPUl9VU0JSUzIzMiwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9CRVJLU0hJUkUsIFVTQl9ERVZJQ0VfSURfQkVSS1NISVJFX1BDV0QsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfQ09ERU1FUkNTLCBVU0JfREVWSUNFX0lEX0NPREVNRVJDU19JT1c0MCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9DT0RFTUVSQ1MsIFVTQl9ERVZJQ0VfSURfQ09ERU1FUkNTX0lPVzI0LCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xNjIwLDkgKzE2MzMsMTIgQEAKIAl7IFVTQl9WRU5ET1JfSURfRVNTRU5USUFMX1JFQUxJVFksIFVTQl9ERVZJQ0VfSURfRVNTRU5USUFMX1JFQUxJVFlfUDUsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF80X1BISURHRVRTRVJWT18zMCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzMwLCBISURfUVVJUktfSUdOT1JFIH0sCi0JeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfOF84XzhfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8wXzRfSUZfS0lULCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfMF8xNl8xNl9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF84XzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfN19JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF8wXzhfOF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9QSElER0VUX01PVE9SQ09OVFJPTCwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HUklGRklOLCBVU0JfREVWSUNFX0lEX1BPV0VSTUFURSwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HUklGRklOLCBVU0JfREVWSUNFX0lEX1NPVU5ES05PQiwgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9HVENPLCBVU0JfREVWSUNFX0lEX0dUQ09fOTAsIEhJRF9RVUlSS19JR05PUkUgfSwKQEAgLTE2OTAsNyArMTcwNiwxMSBAQAogCXsgVVNCX1ZFTkRPUl9JRF9NR0UsIFVTQl9ERVZJQ0VfSURfTUdFX1VQUywgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9NR0UsIFVTQl9ERVZJQ0VfSURfTUdFX1VQUzEsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAsIEhJRF9RVUlSS19JR05PUkUgfSwKKwl7IFVTQl9WRU5ET1JfSURfT05UUkFLLCBVU0JfREVWSUNFX0lEX09OVFJBS19BRFUxMDAgKyAyMCwgSElEX1FVSVJLX0lHTk9SRSB9LAorCXsgVVNCX1ZFTkRPUl9JRF9PTlRSQUssIFVTQl9ERVZJQ0VfSURfT05UUkFLX0FEVTEwMCArIDMwLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTAwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTA4LCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMTE4LCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMjAwLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgMzAwLCBISURfUVVJUktfSUdOT1JFIH0sCiAJeyBVU0JfVkVORE9SX0lEX09OVFJBSywgVVNCX0RFVklDRV9JRF9PTlRSQUtfQURVMTAwICsgNDAwLCBISURfUVVJUktfSUdOT1JFIH0sCkBAIC0xNzAxLDYgKzE3MjEsNyBAQAogCXsgVVNCX1ZFTkRPUl9JRF9WRVJOSUVSLCBVU0JfREVWSUNFX0lEX1ZFUk5JRVJfQ1lDTE9QUywgSElEX1FVSVJLX0lHTk9SRSB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfNF9QSElER0VUU0VSVk9fMjAsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQLCBVU0JfREVWSUNFX0lEXzFfUEhJREdFVFNFUlZPXzIwLCBISURfUVVJUktfSUdOT1JFIH0sCisJeyBVU0JfVkVORE9SX0lEX1dJU0VHUk9VUCwgVVNCX0RFVklDRV9JRF84XzhfNF9JRl9LSVQsIEhJRF9RVUlSS19JR05PUkUgfSwKIAl7IFVTQl9WRU5ET1JfSURfWUVBTElOSywgVVNCX0RFVklDRV9JRF9ZRUFMSU5LX1AxS19QNEtfQjJLLCBISURfUVVJUktfSUdOT1JFIH0sCiAKIAl7IFVTQl9WRU5ET1JfSURfQUNFQ0FELCBVU0JfREVWSUNFX0lEX0FDRUNBRF9GTEFJUiwgSElEX1FVSVJLX0lHTk9SRSB9LApAQCAtMTcxMSw2ICsxNzMyLDcgQEAKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzJQT1JUS1ZNLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNLCBISURfUVVJUktfTk9HRVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfQVRFTiwgVVNCX0RFVklDRV9JRF9BVEVOXzRQT1JUS1ZNQywgSElEX1FVSVJLX05PR0VUIH0sCisJeyBVU0JfVkVORE9SX0lEX1NVTiwgVVNCX0RFVklDRV9JRF9SQVJJVEFOX0tWTV9ET05HTEUsIEhJRF9RVUlSS19OT0dFVCB9LAogCXsgVVNCX1ZFTkRPUl9JRF9XSVNFR1JPVVAsIFVTQl9ERVZJQ0VfSURfRFVBTF9VU0JfSk9ZUEFELCBISURfUVVJUktfTk9HRVQgfCBISURfUVVJUktfTVVMVElfSU5QVVQgfSwKIAl7IFVTQl9WRU5ET1JfSURfV0lTRUdST1VQX0xURCwgVVNCX0RFVklDRV9JRF9TTUFSVEpPWV9EVUFMX1BMVVMsIEhJRF9RVUlSS19OT0dFVCB8IEhJRF9RVUlSS19NVUxUSV9JTlBVVCB9LAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9oaWRkZXYuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCmluZGV4IGY2YjgzOWMuLmEyYjQxOWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2hpZGRldi5jCkBAIC03MjIsNyArNzIyLDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaGlkZGV2X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoaWRkZXZfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQloaWRkZXZfcmVhZCwKIAkud3JpdGUgPQloaWRkZXZfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jIGIvZHJpdmVycy91c2IvaW5wdXQvaXRtdG91Y2guYwppbmRleCA4NmFjYjVmLi42MTk2NmQ3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9pbnB1dC9pdG10b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L2l0bXRvdWNoLmMKQEAgLTg3LDcgKzg3LDcgQEAKIAljYXNlIDA6CiAJCS8qIHN1Y2Nlc3MgKi8KIAkJYnJlYWs7Ci0JY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVUSU1FOgogCQkvKiB0aGlzIHVyYiBpcyB0aW1pbmcgb3V0ICovCiAJCWRiZygiJXMgLSB1cmIgdGltZWQgb3V0IC0gd2FzIHRoZSBkZXZpY2UgdW5wbHVnZ2VkPyIsCiAJCSAgICBfX0ZVTkNUSU9OX18pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L2tleXNwYW5fcmVtb3RlLmMKaW5kZXggNDcyM2IzMS4uYTkwMzU5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQva2V5c3Bhbl9yZW1vdGUuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC9rZXlzcGFuX3JlbW90ZS5jCkBAIC00MjAsOCArNDIwLDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgaWZhY2UtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CiAJCWVuZHBvaW50ID0gJmlmYWNlLT5lbmRwb2ludFtpXS5kZXNjOwogCi0JCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19pbnRfaW4oZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBvdXIgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCiAJCQlyZXR1cm4gZW5kcG9pbnQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L210b3VjaHVzYi5jIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKaW5kZXggYTljY2RhOC4uNWRjZTk1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvbXRvdWNodXNiLmMKQEAgLTEwNyw3ICsxMDcsNyBAQAogCWNhc2UgMDoKIAkJLyogc3VjY2VzcyAqLwogCQlicmVhazsKLQljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRVRJTUU6CiAJCS8qIHRoaXMgdXJiIGlzIHRpbWluZyBvdXQgKi8KIAkJZGJnKCIlcyAtIHVyYiB0aW1lZCBvdXQgLSB3YXMgdGhlIGRldmljZSB1bnBsdWdnZWQ/IiwKIAkJICAgIF9fRlVOQ1RJT05fXyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC9wb3dlcm1hdGUuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3Bvd2VybWF0ZS5jCmluZGV4IGIzYzBkMGMuLmYwZjhkYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3Bvd2VybWF0ZS5jCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3Bvd2VybWF0ZS5jCkBAIC0zMTMsOSArMzEzLDcgQEAKIAogCWludGVyZmFjZSA9IGludGYtPmN1cl9hbHRzZXR0aW5nOwogCWVuZHBvaW50ID0gJmludGVyZmFjZS0+ZW5kcG9pbnRbMF0uZGVzYzsKLQlpZiAoIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApKQotCQlyZXR1cm4gLUVJTzsKLQlpZiAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSAhPSAzKQorCWlmICghdXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCiAJCXJldHVybiAtRUlPOwogCiAJdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHVzYl9zbmRjdHJscGlwZSh1ZGV2LCAwKSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC90b3VjaGtpdHVzYi5jCmluZGV4IDAxNDkwNDMuLjMwYjlmODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3RvdWNoa2l0dXNiLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdG91Y2hraXR1c2IuYwpAQCAtMjAxLDcgKzIwMSw3IEBACiAJY2FzZSAwOgogCQkvKiBzdWNjZXNzICovCiAJCWJyZWFrOwotCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FVElNRToKIAkJLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLwogCQlkYmcoIiVzIC0gdXJiIHRpbWVkIG91dCAtIHdhcyB0aGUgZGV2aWNlIHVucGx1Z2dlZD8iLAogCQkgICAgX19GVU5DVElPTl9fKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3RyYW5jZXZpYnJhdG9yLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC90cmFuY2V2aWJyYXRvci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzY2Q5MWQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC90cmFuY2V2aWJyYXRvci5jCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogUGxheVN0YXRpb24gMiBUcmFuY2UgVmlicmF0b3IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbSBIb2NldmFyIDxzYW1Aem95Lm9yZz4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qIFN0YW5kYXJkIGluY2x1ZGUgZmlsZXMgKi8KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKworLyogVmVyc2lvbiBJbmZvcm1hdGlvbiAqLworI2RlZmluZSBEUklWRVJfVkVSU0lPTiAidjEuMSIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2FtIEhvY2V2YXIsIHNhbUB6b3kub3JnIgorI2RlZmluZSBEUklWRVJfREVTQyAiUGxheVN0YXRpb24gMiBUcmFuY2UgVmlicmF0b3IgZHJpdmVyIgorCisjZGVmaW5lIFRSQU5DRVZJQlJBVE9SX1ZFTkRPUl9JRAkweDBiNDkJLyogQVNDSUkgQ29ycG9yYXRpb24gKi8KKyNkZWZpbmUgVFJBTkNFVklCUkFUT1JfUFJPRFVDVF9JRAkweDA2NGYJLyogVHJhbmNlIFZpYnJhdG9yICovCisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoVFJBTkNFVklCUkFUT1JfVkVORE9SX0lELCBUUkFOQ0VWSUJSQVRPUl9QUk9EVUNUX0lEKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKKworLyogRHJpdmVyLWxvY2FsIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3QgdHJhbmNldmlicmF0b3IgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXVuc2lnbmVkIGludCBzcGVlZDsKK307CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3BlZWQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwKKwkJCSAgY2hhciAqYnVmKQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB0cmFuY2V2aWJyYXRvciAqdHYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHR2LT5zcGVlZCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNldF9zcGVlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAorCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQoreworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOworCXN0cnVjdCB0cmFuY2V2aWJyYXRvciAqdHYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCWludCB0ZW1wLCByZXR2YWw7CisKKwl0ZW1wID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CisJaWYgKHRlbXAgPiAyNTUpCisJCXRlbXAgPSAyNTU7CisJZWxzZSBpZiAodGVtcCA8IDApCisJCXRlbXAgPSAwOworCXR2LT5zcGVlZCA9IHRlbXA7CisKKwlkZXZfZGJnKCZ0di0+dWRldi0+ZGV2LCAic3BlZWQgPSAlZFxuIiwgdHYtPnNwZWVkKTsKKworCS8qIFNldCBzcGVlZCAqLworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyh0di0+dWRldiwgdXNiX3NuZGN0cmxwaXBlKHR2LT51ZGV2LCAwKSwKKwkJCQkgMHgwMSwgLyogdmVuZG9yIHJlcXVlc3Q6IHNldCBzcGVlZCAqLworCQkJCSBVU0JfRElSX0lOIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX09USEVSLAorCQkJCSB0di0+c3BlZWQsIC8qIHNwZWVkIHZhbHVlICovCisJCQkJIDAsIE5VTEwsIDAsIFVTQl9DVFJMX0dFVF9USU1FT1VUKTsKKwlpZiAocmV0dmFsKSB7CisJCWRldl9kYmcoJnR2LT51ZGV2LT5kZXYsICJyZXR2YWwgPSAlZFxuIiwgcmV0dmFsKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgREVWSUNFX0FUVFIoc3BlZWQsIFNfSVdVR08gfCBTX0lSVUdPLCBzaG93X3NwZWVkLCBzZXRfc3BlZWQpOworCitzdGF0aWMgaW50IHR2X3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CisJc3RydWN0IHRyYW5jZXZpYnJhdG9yICpkZXY7CisJaW50IHJldHZhbDsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB0cmFuY2V2aWJyYXRvciksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KHVkZXYpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zcGVlZCk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcl9jcmVhdGVfZmlsZTsKKworCXJldHVybiAwOworCitlcnJvcl9jcmVhdGVfZmlsZToKKwl1c2JfcHV0X2Rldih1ZGV2KTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CitlcnJvcjoKKwlrZnJlZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIHR2X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgdHJhbmNldmlicmF0b3IgKmRldjsKKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zcGVlZCk7CisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKKwlrZnJlZShkZXYpOworfQorCisvKiBVU0Igc3Vic3lzdGVtIG9iamVjdCAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHR2X2RyaXZlciA9IHsKKwkubmFtZSA9CQkidHJhbmNldmlicmF0b3IiLAorCS5wcm9iZSA9CXR2X3Byb2JlLAorCS5kaXNjb25uZWN0ID0JdHZfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHR2X2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZ0dl9kcml2ZXIpOworCWlmIChyZXR2YWwpIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkLiBFcnJvciBudW1iZXIgJWQiLCByZXR2YWwpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IHR2X2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmdHZfZHJpdmVyKTsKK30KKworbW9kdWxlX2luaXQgKHR2X2luaXQpOworbW9kdWxlX2V4aXQgKHR2X2V4aXQpOworCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2Jtb3VzZS5jCmluZGV4IDQ0NjkzNWIuLjBmYjc5MmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3VzYm1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvdXNibW91c2UuYwpAQCAtMjE4LDcgKzIxOCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2JfbW91c2VfaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfSU5URVJGQUNFX0lORk8oMywgMSwgMikgfSwKLSAgICB7IH0JCQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworCXsgfQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKIAogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCB1c2JfbW91c2VfaWRfdGFibGUpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3VzYnRvdWNoc2NyZWVuLmMKaW5kZXggYTMzOGJmNC4uNDY0MGQxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvdXNidG91Y2hzY3JlZW4uYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC91c2J0b3VjaHNjcmVlbi5jCkBAIC0yLDkgKzIsMTIgQEAKICAqIHVzYnRvdWNoc2NyZWVuLmMKICAqIERyaXZlciBmb3IgVVNCIFRvdWNoc2NyZWVucywgc3VwcG9ydGluZyB0aG9zZSBkZXZpY2VzOgogICogIC0gZUdhbGF4IFRvdWNoa2l0Ci0gKiAgLSAzTS9NaWNyb3RvdWNoCisgKiAgICBpbmNsdWRlcyBlVHVyYm9Ub3VjaCBDVC00MTAvNTEwLzcwMAorICogIC0gM00vTWljcm90b3VjaCAgRVggSUkgc2VyaWVzCiAgKiAgLSBJVE0KICAqICAtIFBhbkppdCBUb3VjaFNldAorICogIC0gZVR1cmJvVG91Y2gKKyAqICAtIEd1bnplIEFITDYxCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDYgYnkgRGFuaWVsIFJpdHogPGRhbmllbC5yaXR6QGdteC5jaD4KICAqIENvcHlyaWdodCAoQykgYnkgVG9kZCBFLiBKb2huc29uIChtdG91Y2h1c2IuYykKQEAgLTQyLDcgKzQ1LDcgQEAKICNpbmNsdWRlIDxsaW51eC91c2IvaW5wdXQuaD4KIAogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OCQkidjAuMyIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04JCSJ2MC40IgogI2RlZmluZSBEUklWRVJfQVVUSE9SCQkiRGFuaWVsIFJpdHogPGRhbmllbC5yaXR6QGdteC5jaD4iCiAjZGVmaW5lIERSSVZFUl9ERVNDCQkiVVNCIFRvdWNoc2NyZWVuIERyaXZlciIKIApAQCAtNjAsNiArNjMsNyBAQAogCWludCBmbGFnczsKIAogCXZvaWQgKCpwcm9jZXNzX3BrdCkgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoLCBzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgY2hhciAqcGt0LCBpbnQgbGVuKTsKKwlpbnQgICgqZ2V0X3BrdF9sZW4pICh1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pOwogCWludCAgKCpyZWFkX2RhdGEpICAgKHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50ICp4LCBpbnQgKnksIGludCAqdG91Y2gsIGludCAqcHJlc3MpOwogCWludCAgKCppbml0KSAgICAgICAgKHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKTsKIH07CkBAIC04MSw4ICs4NSwxNiBAQAogCWNoYXIgcGh5c1s2NF07CiB9OwogCi1zdGF0aWMgdm9pZCB1c2J0b3VjaF9wcm9jZXNzX3BrdChzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pOworCisjaWYgZGVmaW5lZChDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VHQUxBWCkgfHwgZGVmaW5lZChDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VUVVJCTykKKyNkZWZpbmUgTVVMVElfUEFDS0VUCisjZW5kaWYKKworI2lmZGVmIE1VTFRJX1BBQ0tFVAorc3RhdGljIHZvaWQgdXNidG91Y2hfcHJvY2Vzc19tdWx0aShzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKnBrdCwgaW50IGxlbik7CisjZW5kaWYKIAogLyogZGV2aWNlIHR5cGVzICovCiBlbnVtIHsKQEAgLTkxLDE0ICsxMDMsMTkgQEAKIAlERVZUWVBFX1BBTkpJVCwKIAlERVZUWVBFXzNNLAogCURFVlRZUEVfSVRNLAorCURFVlRZUEVfRVRVUkJPLAorCURFVlRZUEVfR1VOWkUsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgdXNidG91Y2hfZGV2aWNlc1tdID0gewogI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRUdBTEFYCiAJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgzODIzLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCiAJe1VTQl9ERVZJQ0UoMHgwMTIzLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCiAJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCiAJe1VTQl9ERVZJQ0UoMHgwZWVmLCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgxMjM0LCAweDAwMDEpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCisJe1VTQl9ERVZJQ0UoMHgxMjM0LCAweDAwMDIpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VHQUxBWH0sCiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fUEFOSklUCkBAIC0xMTYsNiArMTMzLDE0IEBACiAJe1VTQl9ERVZJQ0UoMHgwNDAzLCAweGY5ZTkpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0lUTX0sCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fRVRVUkJPCisJe1VTQl9ERVZJQ0UoMHgxMjM0LCAweDU2NzgpLCAuZHJpdmVyX2luZm8gPSBERVZUWVBFX0VUVVJCT30sCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19VU0JfVE9VQ0hTQ1JFRU5fR1VOWkUKKwl7VVNCX0RFVklDRSgweDA2MzcsIDB4MDAwMSksIC5kcml2ZXJfaW5mbyA9IERFVlRZUEVfR1VOWkV9LAorI2VuZGlmCisKIAl7fQogfTsKIApAQCAtMTQwLDgyICsxNjUsMjMgQEAKIAkqdG91Y2ggPSBwa3RbMF0gJiAweDAxOwogCiAJcmV0dXJuIDE7Ci0KIH0KIAotc3RhdGljIGludCBlZ2FsYXhfZ2V0X3BrdF9sZW4odW5zaWduZWQgY2hhciAqYnVmKQorc3RhdGljIGludCBlZ2FsYXhfZ2V0X3BrdF9sZW4odW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogewogCXN3aXRjaCAoYnVmWzBdICYgRUdBTEFYX1BLVF9UWVBFX01BU0spIHsKIAljYXNlIEVHQUxBWF9QS1RfVFlQRV9SRVBUOgogCQlyZXR1cm4gNTsKIAogCWNhc2UgRUdBTEFYX1BLVF9UWVBFX0RJQUc6CisJCWlmIChsZW4gPCAyKQorCQkJcmV0dXJuIC0xOworCiAJCXJldHVybiBidWZbMV0gKyAyOwogCX0KIAogCXJldHVybiAwOwogfQotCi1zdGF0aWMgdm9pZCBlZ2FsYXhfcHJvY2VzcyhzdHJ1Y3QgdXNidG91Y2hfdXNiICp1c2J0b3VjaCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pCi17Ci0JdW5zaWduZWQgY2hhciAqYnVmZmVyOwotCWludCBwa3RfbGVuLCBidWZfbGVuLCBwb3M7Ci0KLQkvKiBpZiB0aGUgYnVmZmVyIGNvbnRhaW5zIGRhdGEsIGFwcGVuZCAqLwotCWlmICh1bmxpa2VseSh1c2J0b3VjaC0+YnVmX2xlbikpIHsKLQkJaW50IHRtcDsKLQotCQkvKiBpZiBvbmx5IDEgYnl0ZSBpbiBidWZmZXIsIGFkZCBhbm90aGVyIG9uZSB0byBnZXQgbGVuZ3RoICovCi0JCWlmICh1c2J0b3VjaC0+YnVmX2xlbiA9PSAxKQotCQkJdXNidG91Y2gtPmJ1ZmZlclsxXSA9IHBrdFswXTsKLQotCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKHVzYnRvdWNoLT5idWZmZXIpOwotCi0JCS8qIHVua25vd24gcGFja2V0OiBkcm9wIGV2ZXJ5dGhpbmcgKi8KLQkJaWYgKCFwa3RfbGVuKQotCQkJcmV0dXJuOwotCi0JCS8qIGFwcGVuZCwgcHJvY2VzcyAqLwotCQl0bXAgPSBwa3RfbGVuIC0gdXNidG91Y2gtPmJ1Zl9sZW47Ci0JCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyICsgdXNidG91Y2gtPmJ1Zl9sZW4sIHBrdCwgdG1wKTsKLQkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIHVzYnRvdWNoLT5idWZmZXIsIHBrdF9sZW4pOwotCi0JCWJ1ZmZlciA9IHBrdCArIHRtcDsKLQkJYnVmX2xlbiA9IGxlbiAtIHRtcDsKLQl9IGVsc2UgewotCQlidWZmZXIgPSBwa3Q7Ci0JCWJ1Zl9sZW4gPSBsZW47Ci0JfQotCi0JLyogb25seSBvbmUgYnl0ZSBsZWZ0IGluIGJ1ZmZlciAqLwotCWlmICh1bmxpa2VseShidWZfbGVuID09IDEpKSB7Ci0JCXVzYnRvdWNoLT5idWZmZXJbMF0gPSBidWZmZXJbMF07Ci0JCXVzYnRvdWNoLT5idWZfbGVuID0gMTsKLQkJcmV0dXJuOwotCX0KLQotCS8qIGxvb3Agb3ZlciB0aGUgYnVmZmVyICovCi0JcG9zID0gMDsKLQl3aGlsZSAocG9zIDwgYnVmX2xlbikgewotCQkvKiBnZXQgcGFja2V0IGxlbiAqLwotCQlwa3RfbGVuID0gZWdhbGF4X2dldF9wa3RfbGVuKGJ1ZmZlciArIHBvcyk7Ci0KLQkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLwotCQlpZiAodW5saWtlbHkoIXBrdF9sZW4pKQotCQkJcmV0dXJuOwotCi0JCS8qIGZ1bGwgcGFja2V0OiBwcm9jZXNzICovCi0JCWlmIChsaWtlbHkocGt0X2xlbiA8PSBidWZfbGVuKSkgewotCQkJdXNidG91Y2hfcHJvY2Vzc19wa3QodXNidG91Y2gsIHJlZ3MsIGJ1ZmZlciArIHBvcywgcGt0X2xlbik7Ci0JCX0gZWxzZSB7Ci0JCQkvKiBpbmNvbXBsZXRlIHBhY2tldDogc2F2ZSBpbiBidWZmZXIgKi8KLQkJCW1lbWNweSh1c2J0b3VjaC0+YnVmZmVyLCBidWZmZXIgKyBwb3MsIGJ1Zl9sZW4gLSBwb3MpOwotCQkJdXNidG91Y2gtPmJ1Zl9sZW4gPSBidWZfbGVuIC0gcG9zOwotCQl9Ci0JCXBvcyArPSBwa3RfbGVuOwotCX0KLX0KICNlbmRpZgogCiAKQEAgLTI1NCw3ICsyMjAsNyBAQAogCiBzdGF0aWMgaW50IG10b3VjaF9pbml0KHN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoKQogewotCWludCByZXQ7CisJaW50IHJldCwgaTsKIAogCXJldCA9IHVzYl9jb250cm9sX21zZyh1c2J0b3VjaC0+dWRldiwgdXNiX3JjdmN0cmxwaXBlKHVzYnRvdWNoLT51ZGV2LCAwKSwKIAkgICAgICAgICAgICAgICAgICAgICAgTVRPVUNIVVNCX1JFU0VULApAQCAtMjY0LDE1ICsyMzAsMjAgQEAKIAkgICAgX19GVU5DVElPTl9fLCByZXQpOwogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gcmV0OworCW1zbGVlcCgxNTApOwogCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVzYnRvdWNoLT51ZGV2LCB1c2JfcmN2Y3RybHBpcGUodXNidG91Y2gtPnVkZXYsIDApLAotCSAgICAgICAgICAgICAgICAgICAgICBNVE9VQ0hVU0JfQVNZTkNfUkVQT1JULAotCSAgICAgICAgICAgICAgICAgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JICAgICAgICAgICAgICAgICAgICAgIDEsIDEsIE5VTEwsIDAsIFVTQl9DVFJMX1NFVF9USU1FT1VUKTsKLQlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAtIGJ5dGVzfGVycjogJWQiLAotCSAgICBfX0ZVTkNUSU9OX18sIHJldCk7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7CisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlyZXQgPSB1c2JfY29udHJvbF9tc2codXNidG91Y2gtPnVkZXYsIHVzYl9yY3ZjdHJscGlwZSh1c2J0b3VjaC0+dWRldiwgMCksCisJCQkJICAgICAgTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCwKKwkJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkJICAgICAgMSwgMSwgTlVMTCwgMCwgVVNCX0NUUkxfU0VUX1RJTUVPVVQpOworCQlkYmcoIiVzIC0gdXNiX2NvbnRyb2xfbXNnIC0gTVRPVUNIVVNCX0FTWU5DX1JFUE9SVCAtIGJ5dGVzfGVycjogJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCByZXQpOworCQlpZiAocmV0ID49IDApCisJCQlicmVhazsKKwkJaWYgKHJldCAhPSAtRVBJUEUpCisJCQlyZXR1cm4gcmV0OworCX0KIAogCXJldHVybiAwOwogfQpAQCAtMjk2LDYgKzI2Nyw1NCBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogZVR1cmJvVG91Y2ggcGFydAorICovCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9FVFVSQk8KK3N0YXRpYyBpbnQgZXR1cmJvX3JlYWRfZGF0YSh1bnNpZ25lZCBjaGFyICpwa3QsIGludCAqeCwgaW50ICp5LCBpbnQgKnRvdWNoLCBpbnQgKnByZXNzKQoreworCXVuc2lnbmVkIGludCBzaGlmdDsKKworCS8qIHBhY2tldHMgc2hvdWxkIHN0YXJ0IHdpdGggc3luYyAqLworCWlmICghKHBrdFswXSAmIDB4ODApKQorCQlyZXR1cm4gMDsKKworCXNoaWZ0ID0gKDYgLSAocGt0WzBdICYgMHgwMykpOworCSp4ID0gKChwa3RbM10gPDwgNykgfCBwa3RbNF0pID4+IHNoaWZ0OworCSp5ID0gKChwa3RbMV0gPDwgNykgfCBwa3RbMl0pID4+IHNoaWZ0OworCSp0b3VjaCA9IChwa3RbMF0gJiAweDEwKSA/IDEgOiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgZXR1cmJvX2dldF9wa3RfbGVuKHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKwlpZiAoYnVmWzBdICYgMHg4MCkKKwkJcmV0dXJuIDU7CisJaWYgKGJ1ZlswXSA9PSAweDAxKQorCQlyZXR1cm4gMzsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR3VuemUgcGFydAorICovCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9HVU5aRQorc3RhdGljIGludCBndW56ZV9yZWFkX2RhdGEodW5zaWduZWQgY2hhciAqcGt0LCBpbnQgKngsIGludCAqeSwgaW50ICp0b3VjaCwgaW50ICpwcmVzcykKK3sKKwlpZiAoIShwa3RbMF0gJiAweDgwKSB8fCAoKHBrdFsxXSB8IHBrdFsyXSB8IHBrdFszXSkgJiAweDgwKSkKKwkJcmV0dXJuIDA7CisKKwkqeCA9ICgocGt0WzBdICYgMHgxRikgPDwgNykgfCAocGt0WzJdICYgMHg3Rik7CisJKnkgPSAoKHBrdFsxXSAmIDB4MUYpIDw8IDcpIHwgKHBrdFszXSAmIDB4N0YpOworCSp0b3VjaCA9IHBrdFswXSAmIDB4MjA7CisKKwlyZXR1cm4gMTsKK30KKyNlbmRpZgorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIHRoZSBkaWZmZXJlbnQgZGV2aWNlIGRlc2NyaXB0b3JzCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNidG91Y2hfZGV2aWNlX2luZm8gdXNidG91Y2hfZGV2X2luZm9bXSA9IHsKQEAgLTMwNyw3ICszMjYsOCBAQAogCQkubWF4X3ljCQk9IDB4MDdmZiwKIAkJLnJlcHRfc2l6ZQk9IDE2LAogCQkuZmxhZ3MJCT0gVVNCVE9VQ0hfRkxHX0JVRkZFUiwKLQkJLnByb2Nlc3NfcGt0CT0gZWdhbGF4X3Byb2Nlc3MsCisJCS5wcm9jZXNzX3BrdAk9IHVzYnRvdWNoX3Byb2Nlc3NfbXVsdGksCisJCS5nZXRfcGt0X2xlbgk9IGVnYWxheF9nZXRfcGt0X2xlbiwKIAkJLnJlYWRfZGF0YQk9IGVnYWxheF9yZWFkX2RhdGEsCiAJfSwKICNlbmRpZgpAQCAtMzQ2LDYgKzM2NiwzMSBAQAogCQkucmVhZF9kYXRhCT0gaXRtX3JlYWRfZGF0YSwKIAl9LAogI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVVNCX1RPVUNIU0NSRUVOX0VUVVJCTworCVtERVZUWVBFX0VUVVJCT10gPSB7CisJCS5taW5feGMJCT0gMHgwLAorCQkubWF4X3hjCQk9IDB4MDdmZiwKKwkJLm1pbl95YwkJPSAweDAsCisJCS5tYXhfeWMJCT0gMHgwN2ZmLAorCQkucmVwdF9zaXplCT0gOCwKKwkJLmZsYWdzCQk9IFVTQlRPVUNIX0ZMR19CVUZGRVIsCisJCS5wcm9jZXNzX3BrdAk9IHVzYnRvdWNoX3Byb2Nlc3NfbXVsdGksCisJCS5nZXRfcGt0X2xlbgk9IGV0dXJib19nZXRfcGt0X2xlbiwKKwkJLnJlYWRfZGF0YQk9IGV0dXJib19yZWFkX2RhdGEsCisJfSwKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1VTQl9UT1VDSFNDUkVFTl9HVU5aRQorCVtERVZUWVBFX0dVTlpFXSA9IHsKKwkJLm1pbl94YwkJPSAweDAsCisJCS5tYXhfeGMJCT0gMHgwZmZmLAorCQkubWluX3ljCQk9IDB4MCwKKwkJLm1heF95YwkJPSAweDBmZmYsCisJCS5yZXB0X3NpemUJPSA0LAorCQkucmVhZF9kYXRhCT0gZ3VuemVfcmVhZF9kYXRhLAorCX0sCisjZW5kaWYKIH07CiAKIApAQCAtMzc3LDYgKzQyMiw4MyBAQAogfQogCiAKKyNpZmRlZiBNVUxUSV9QQUNLRVQKK3N0YXRpYyB2b2lkIHVzYnRvdWNoX3Byb2Nlc3NfbXVsdGkoc3RydWN0IHVzYnRvdWNoX3VzYiAqdXNidG91Y2gsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpwa3QsIGludCBsZW4pCit7CisJdW5zaWduZWQgY2hhciAqYnVmZmVyOworCWludCBwa3RfbGVuLCBwb3MsIGJ1Zl9sZW4sIHRtcDsKKworCS8qIHByb2Nlc3MgYnVmZmVyICovCisJaWYgKHVubGlrZWx5KHVzYnRvdWNoLT5idWZfbGVuKSkgeworCQkvKiB0cnkgdG8gZ2V0IHNpemUgKi8KKwkJcGt0X2xlbiA9IHVzYnRvdWNoLT50eXBlLT5nZXRfcGt0X2xlbigKKwkJCQl1c2J0b3VjaC0+YnVmZmVyLCB1c2J0b3VjaC0+YnVmX2xlbik7CisKKwkJLyogZHJvcD8gKi8KKwkJaWYgKHVubGlrZWx5KCFwa3RfbGVuKSkKKwkJCWdvdG8gb3V0X2ZsdXNoX2J1ZjsKKworCQkvKiBuZWVkIHRvIGFwcGVuZCAtcGt0X2xlbiBieXRlcyBiZWZvcmUgYWJsZSB0byBnZXQgc2l6ZSAqLworCQlpZiAodW5saWtlbHkocGt0X2xlbiA8IDApKSB7CisJCQlpbnQgYXBwZW5kID0gLXBrdF9sZW47CisJCQlpZiAodW5saWtlbHkoYXBwZW5kID4gbGVuKSkKKwkJCSAgICAgICBhcHBlbmQgPSBsZW47CisJCQlpZiAodXNidG91Y2gtPmJ1Zl9sZW4gKyBhcHBlbmQgPj0gdXNidG91Y2gtPnR5cGUtPnJlcHRfc2l6ZSkKKwkJCQlnb3RvIG91dF9mbHVzaF9idWY7CisJCQltZW1jcHkodXNidG91Y2gtPmJ1ZmZlciArIHVzYnRvdWNoLT5idWZfbGVuLCBwa3QsIGFwcGVuZCk7CisJCQl1c2J0b3VjaC0+YnVmX2xlbiArPSBhcHBlbmQ7CisKKwkJCXBrdF9sZW4gPSB1c2J0b3VjaC0+dHlwZS0+Z2V0X3BrdF9sZW4oCisJCQkJCXVzYnRvdWNoLT5idWZmZXIsIHVzYnRvdWNoLT5idWZfbGVuKTsKKwkJCWlmIChwa3RfbGVuIDwgMCkKKwkJCQlyZXR1cm47CisJCX0KKworCQkvKiBhcHBlbmQgKi8KKwkJdG1wID0gcGt0X2xlbiAtIHVzYnRvdWNoLT5idWZfbGVuOworCQlpZiAodXNidG91Y2gtPmJ1Zl9sZW4gKyB0bXAgPj0gdXNidG91Y2gtPnR5cGUtPnJlcHRfc2l6ZSkKKwkJCWdvdG8gb3V0X2ZsdXNoX2J1ZjsKKwkJbWVtY3B5KHVzYnRvdWNoLT5idWZmZXIgKyB1c2J0b3VjaC0+YnVmX2xlbiwgcGt0LCB0bXApOworCQl1c2J0b3VjaF9wcm9jZXNzX3BrdCh1c2J0b3VjaCwgcmVncywgdXNidG91Y2gtPmJ1ZmZlciwgcGt0X2xlbik7CisKKwkJYnVmZmVyID0gcGt0ICsgdG1wOworCQlidWZfbGVuID0gbGVuIC0gdG1wOworCX0gZWxzZSB7CisJCWJ1ZmZlciA9IHBrdDsKKwkJYnVmX2xlbiA9IGxlbjsKKwl9CisKKwkvKiBsb29wIG92ZXIgdGhlIHJlY2VpdmVkIHBhY2tldCwgcHJvY2VzcyAqLworCXBvcyA9IDA7CisJd2hpbGUgKHBvcyA8IGJ1Zl9sZW4pIHsKKwkJLyogZ2V0IHBhY2tldCBsZW4gKi8KKwkJcGt0X2xlbiA9IHVzYnRvdWNoLT50eXBlLT5nZXRfcGt0X2xlbihidWZmZXIgKyBwb3MsIGxlbik7CisKKwkJLyogdW5rbm93biBwYWNrZXQ6IGRyb3AgZXZlcnl0aGluZyAqLworCQlpZiAodW5saWtlbHkoIXBrdF9sZW4pKQorCQkJZ290byBvdXRfZmx1c2hfYnVmOworCisJCS8qIGZ1bGwgcGFja2V0OiBwcm9jZXNzICovCisJCWlmIChsaWtlbHkoKHBrdF9sZW4gPiAwKSAmJiAocGt0X2xlbiA8PSBidWZfbGVuIC0gcG9zKSkpIHsKKwkJCXVzYnRvdWNoX3Byb2Nlc3NfcGt0KHVzYnRvdWNoLCByZWdzLCBidWZmZXIgKyBwb3MsIHBrdF9sZW4pOworCQl9IGVsc2UgeworCQkJLyogaW5jb21wbGV0ZSBwYWNrZXQ6IHNhdmUgaW4gYnVmZmVyICovCisJCQltZW1jcHkodXNidG91Y2gtPmJ1ZmZlciwgYnVmZmVyICsgcG9zLCBidWZfbGVuIC0gcG9zKTsKKwkJCXVzYnRvdWNoLT5idWZfbGVuID0gYnVmX2xlbiAtIHBvczsKKwkJCXJldHVybjsKKwkJfQorCQlwb3MgKz0gcGt0X2xlbjsKKwl9CisKK291dF9mbHVzaF9idWY6CisJdXNidG91Y2gtPmJ1Zl9sZW4gPSAwOworCXJldHVybjsKK30KKyNlbmRpZgorCisKIHN0YXRpYyB2b2lkIHVzYnRvdWNoX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB1c2J0b3VjaF91c2IgKnVzYnRvdWNoID0gdXJiLT5jb250ZXh0OwpAQCAtMzg2LDcgKzUwOCw3IEBACiAJY2FzZSAwOgogCQkvKiBzdWNjZXNzICovCiAJCWJyZWFrOwotCWNhc2UgLUVUSU1FRE9VVDoKKwljYXNlIC1FVElNRToKIAkJLyogdGhpcyB1cmIgaXMgdGltaW5nIG91dCAqLwogCQlkYmcoIiVzIC0gdXJiIHRpbWVkIG91dCAtIHdhcyB0aGUgZGV2aWNlIHVucGx1Z2dlZD8iLAogCQkgICAgX19GVU5DVElPTl9fKTsKQEAgLTQ1Miw3ICs1NzQsNyBAQAogCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXN0cnVjdCB1c2J0b3VjaF9kZXZpY2VfaW5mbyAqdHlwZTsKLQlpbnQgZXJyOworCWludCBlcnIgPSAtRU5PTUVNOwogCiAJaW50ZXJmYWNlID0gaW50Zi0+Y3VyX2FsdHNldHRpbmc7CiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFswXS5kZXNjOwpAQCAtNTI2LDYgKzY0OCw3IEBACiAJCQkgdXNidG91Y2gtPmRhdGEsIHR5cGUtPnJlcHRfc2l6ZSwKIAkJCSB1c2J0b3VjaF9pcnEsIHVzYnRvdWNoLCBlbmRwb2ludC0+YkludGVydmFsKTsKIAorCXVzYnRvdWNoLT5pcnEtPmRldiA9IHVzYnRvdWNoLT51ZGV2OwogCXVzYnRvdWNoLT5pcnEtPnRyYW5zZmVyX2RtYSA9IHVzYnRvdWNoLT5kYXRhX2RtYTsKIAl1c2J0b3VjaC0+aXJxLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIApAQCAtNTUzLDcgKzY3Niw3IEBACiBvdXRfZnJlZToKIAlpbnB1dF9mcmVlX2RldmljZShpbnB1dF9kZXYpOwogCWtmcmVlKHVzYnRvdWNoKTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCB1c2J0b3VjaF9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDM2OTQ2MWEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uYworKysgL2Rldi9udWxsCkBAIC0xLDEwMDMgKzAsMCBAQAotLyoKLSAqICBVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgc3VwcG9ydAotICoKLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAtMjAwNCBWb2p0ZWNoIFBhdmxpawk8dm9qdGVjaEB1Y3cuY3o+Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDAwIEFuZHJlYXMgQmFjaCBBYWVuCTxhYmFjaEBzdG9mYW5ldC5kaz4KLSAqICBDb3B5cmlnaHQgKGMpIDIwMDAgQ2xpZmZvcmQgV29sZgkJPGNsaWZmb3JkQGNsaWZmb3JkLmF0PgotICogIENvcHlyaWdodCAoYykgMjAwMCBTYW0gTW9zZWwJCTxzYW0ubW9zZWxAY29tcHV0ZXIub3JnPgotICogIENvcHlyaWdodCAoYykgMjAwMCBKYW1lcyBFLiBCbGFpcgkJPGNvcnZ1c0BnbnUub3JnPgotICogIENvcHlyaWdodCAoYykgMjAwMCBEYW5pZWwgRWdnZXIJCTxlZ2dlckBzdXNlLmRlPgotICogIENvcHlyaWdodCAoYykgMjAwMSBGcmVkZXJpYyBMZXBpZWQJCTxmbGVwaWVkQG1hbmRyYWtlc29mdC5jb20+Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDA0IFBhbmFnaW90aXMgSXNzYXJpcwk8cGFuYWdpb3Rpcy5pc3NhcmlzQG1lY2gua3VsZXV2ZW4uYWMuYmU+Ci0gKiAgQ29weXJpZ2h0IChjKSAyMDAyLTIwMDYgUGluZyBDaGVuZwkJPHBpbmdjQHdhY29tLmNvbT4KLSAqCi0gKiAgQ2hhbmdlTG9nOgotICogICAgICB2MC4xICh2cCkgIC0gSW5pdGlhbCByZWxlYXNlCi0gKiAgICAgIHYwLjIgKGFiYSkgLSBTdXBwb3J0IGZvciBhbGwgYnV0dG9ucyAvIGNvbWJpbmF0aW9ucwotICogICAgICB2MC4zICh2cCkgIC0gU3VwcG9ydCBmb3IgSW50dW9zIGFkZGVkCi0gKgl2MC40IChzbSkgIC0gU3VwcG9ydCBmb3IgbW9yZSBJbnR1b3MgbW9kZWxzLCBtZW51c3RyaXAKLSAqCQkJcmVsYXRpdmUgbW9kZSwgcHJveGltaXR5LgotICoJdjAuNSAodnApICAtIEJpZyBjbGVhbnVwLCBuaWZ0eSBmZWF0dXJlcyByZW1vdmVkLAotICoJCQl0aGV5IGJlbG9uZyBpbiB1c2Vyc3BhY2UKLSAqCXYxLjggKHZwKSAgLSBTdWJtaXQgVVJCIG9ubHkgd2hlbiBvcGVyYXRpbmcsIG1vdmVkIHRvIENWUywKLSAqCQkJdXNlIGlucHV0X3JlcG9ydF9rZXkgaW5zdGVhZCBvZiByZXBvcnRfYnRuIGFuZAotICoJCQlvdGhlciBjbGVhbnVwcwotICoJdjEuMTEgKHZwKSAtIEFkZCBVUkIgLT5kZXYgc2V0dGluZyBmb3IgbmV3IGtlcm5lbHMKLSAqCXYxLjExIChqYikgLSBBZGQgc3VwcG9ydCBmb3IgdGhlIDREIE1vdXNlICYgTGVucwotICoJdjEuMTIgKGRlKSAtIEFkZCBzdXBwb3J0IGZvciB0d28gbW9yZSBpbmtpbmcgcGVuIElEcwotICoJdjEuMTQgKHZwKSAtIFVzZSBuZXcgVVNCIGRldmljZSBpZCBwcm9iaW5nIHNjaGVtZS4KLSAqCQkgICAgIEZpeCBXYWNvbSBHcmFwaGlyZSBtb3VzZSB3aGVlbAotICoJdjEuMTggKHZwKSAtIEZpeCBtb3VzZSB3aGVlbCBkaXJlY3Rpb24KLSAqCQkgICAgIE1ha2UgbW91c2UgcmVsYXRpdmUKLSAqICAgICAgdjEuMjAgKGZsKSAtIFJlcG9ydCB0b29sIGlkIGZvciBJbnR1b3MgZGV2aWNlcwotICogICAgICAgICAgICAgICAgIC0gTXVsdGkgdG9vbHMgc3VwcG9ydAotICogICAgICAgICAgICAgICAgIC0gQ29ycmVjdGVkIEludHVvcyBwcm90b2NvbCBkZWNvZGluZyAoYWlyYnJ1c2gsIDREIG1vdXNlLCBsZW5zIGN1cnNvci4uLikKLSAqICAgICAgICAgICAgICAgICAtIEFkZCBQTCBtb2RlbHMgc3VwcG9ydAotICoJCSAgIC0gRml4IFdhY29tIEdyYXBoaXJlIG1vdXNlIHdoZWVsIGFnYWluCi0gKgl2MS4yMSAodnApIC0gUmVtb3ZlZCBwcm90b2NvbCBkZXNjcmlwdGlvbnMKLSAqCQkgICAtIEFkZGVkIE1JU0NfU0VSSUFMIGZvciB0b29sIHNlcmlhbCBudW1iZXJzCi0gKgkgICAgICAoZ2IpIC0gSWRlbnRpZnkgdmVyc2lvbiBvbiBtb2R1bGUgbG9hZC4KLSAqICAgIHYxLjIxLjEgKGZsKSAtIGFkZGVkIEdyYXBoaXJlMiBzdXBwb3J0Ci0gKiAgICB2MS4yMS4yIChmbCkgLSBhZGRlZCBJbnR1b3MyIHN1cHBvcnQKLSAqICAgICAgICAgICAgICAgICAtIGFkZGVkIGFsbCB0aGUgUEwgaWRzCi0gKiAgICB2MS4yMS4zIChmbCkgLSBhZGRlZCBhbm90aGVyIGVyYXNlciBpZCBmcm9tIE5laWwgT2thbW90bwotICogICAgICAgICAgICAgICAgIC0gYWRkZWQgc21vb3RoIGZpbHRlciBmb3IgR3JhcGhpcmUgZnJvbSBQZXJpIEhhbmtleQotICogICAgICAgICAgICAgICAgIC0gYWRkZWQgUGVuUGFydG5lciBzdXBwb3J0IGZyb20gT2xhZiB2YW4gRXMKLSAqICAgICAgICAgICAgICAgICAtIG5ldyB0b29sIGlkcyBmcm9tIE9sZSBNYXJ0aW4gQmpvZXJuZGFsZW4KLSAqCXYxLjI5IChwYykgLSBBZGQgc3VwcG9ydCBmb3IgbW9yZSB0YWJsZXRzCi0gKgkJICAgLSBGaXggcHJlc3N1cmUgcmVwb3J0aW5nCi0gKgl2MS4zMCAodnApIC0gTWVyZ2UgMi40IGFuZCAyLjUgZHJpdmVycwotICoJCSAgIC0gU2luY2UgMi41IG5vdyBoYXMgaW5wdXRfc3luYygpLCByZW1vdmUgTVNDX1NFUklBTCBhYnVzZQotICoJCSAgIC0gQ2xlYW51cHMgaGVyZSBhbmQgdGhlcmUKLSAqICAgIHYxLjMwLjEgKHBpKSAtIEFkZGVkIEdyYXBoaXJlMyBzdXBwb3J0Ci0gKgl2MS40MCAocGMpIC0gQWRkIHN1cHBvcnQgZm9yIHNldmVyYWwgbmV3IGRldmljZXMsIGZpeCBlcmFzZXIgcmVwb3J0aW5nLCAuLi4KLSAqCXYxLjQzIChwYykgLSBBZGRlZCBzdXBwb3J0IGZvciBDaW50aXEgMjFVWAotICoJCSAgIC0gRml4ZWQgYSBHcmFwaGlyZSBidWcKLSAqCQkgICAtIE1lcmdlZCB3YWNvbV9pbnR1b3MzX2lycSBpbnRvIHdhY29tX2ludHVvc19pcnEKLSAqCXYxLjQ0IChwYykgLSBBZGRlZCBzdXBwb3J0IGZvciBHcmFwaGlyZTQsIENpbnRpcSA3MTAsIEludHVvczMgNngxMSwgZXRjLgotICoJCSAgIC0gUmVwb3J0IERldmljZSBJRHMKLSAqCXYxLjQ1IChwYykgLSBBZGRlZCBzdXBwb3J0IGZvciBEVEYgNTIxLCBJbnR1b3MzIDEyeDEyIGFuZCAxMngxOQotICoJCSAgIC0gTWlub3IgZGF0YSByZXBvcnQgZml4Ci0gKi8KLQotLyoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+Ci0jaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgotCi0vKgotICogVmVyc2lvbiBJbmZvcm1hdGlvbgotICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NSIKLSNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKLSNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBkcml2ZXIiCi0jZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCi0KLU1PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwotTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOwotCi0jZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JMHgwNTZhCi0jZGVmaW5lIFNUWUxVU19ERVZJQ0VfSUQJMHgwMgotI2RlZmluZSBDVVJTT1JfREVWSUNFX0lECTB4MDYKLSNkZWZpbmUgRVJBU0VSX0RFVklDRV9JRAkweDBBCi0KLWVudW0gewotCVBFTlBBUlRORVIgPSAwLAotCUdSQVBISVJFLAotCVdBQ09NX0c0LAotCVBMLAotCUlOVFVPUywKLQlJTlRVT1MzLAotCUlOVFVPUzMxMiwKLQlJTlRVT1MzMTksCi0JQ0lOVElRLAotCU1BWF9UWVBFCi19OwotCi1zdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgewotCWNoYXIgKm5hbWU7Ci0JaW50IHBrdGxlbjsKLQlpbnQgeF9tYXg7Ci0JaW50IHlfbWF4OwotCWludCBwcmVzc3VyZV9tYXg7Ci0JaW50IGRpc3RhbmNlX21heDsKLQlpbnQgdHlwZTsKLQl1c2JfY29tcGxldGVfdCBpcnE7Ci19OwotCi1zdHJ1Y3Qgd2Fjb20gewotCXNpZ25lZCBjaGFyICpkYXRhOwotCWRtYV9hZGRyX3QgZGF0YV9kbWE7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2OwotCXN0cnVjdCB1c2JfZGV2aWNlICp1c2JkZXY7Ci0Jc3RydWN0IHVyYiAqaXJxOwotCXN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqZmVhdHVyZXM7Ci0JaW50IHRvb2xbMl07Ci0JaW50IGlkWzJdOwotCV9fdTMyIHNlcmlhbFsyXTsKLQljaGFyIHBoeXNbMzJdOwotfTsKLQotI2RlZmluZSBVU0JfUkVRX0dFVF9SRVBPUlQJMHgwMQotI2RlZmluZSBVU0JfUkVRX1NFVF9SRVBPUlQJMHgwOQotCi1zdGF0aWMgaW50IHVzYl9nZXRfcmVwb3J0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBjaGFyIHR5cGUsCi0JCQkJdW5zaWduZWQgY2hhciBpZCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKLXsKLQlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksCi0JCXVzYl9yY3ZjdHJscGlwZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCAwKSwKLQkJVVNCX1JFUV9HRVRfUkVQT1JULCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCi0JCSh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQlidWYsIHNpemUsIDEwMCk7Ci19Ci0KLXN0YXRpYyBpbnQgdXNiX3NldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKLQkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQotewotCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKLQkJdXNiX3NuZGN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAotICAgICAgICAgICAgICAgIFVTQl9SRVFfU0VUX1JFUE9SVCwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAotICAgICAgICAgICAgICAgICh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAotCQlidWYsIHNpemUsIDEwMDApOwotfQotCi1zdGF0aWMgdm9pZCB3YWNvbV9wbF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3YWNvbS0+ZGV2OwotCWludCBwcm94LCBwcmVzc3VyZSwgaWQ7Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKGRhdGFbMF0gIT0gMikgewotCQlkYmcoIndhY29tX3BsX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlwcm94ID0gZGF0YVsxXSAmIDB4NDA7Ci0KLQlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0KLQlpZCA9IEVSQVNFUl9ERVZJQ0VfSUQ7Ci0JaWYgKHByb3gpIHsKLQotCQlwcmVzc3VyZSA9IChzaWduZWQgY2hhcikoKGRhdGFbN10gPDwgMSkgfCAoKGRhdGFbNF0gPj4gMikgJiAxKSk7Ci0JCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCA+IDI1NSkKLQkJCXByZXNzdXJlID0gKHByZXNzdXJlIDw8IDEpIHwgKChkYXRhWzRdID4+IDYpICYgMSk7Ci0JCXByZXNzdXJlICs9ICh3YWNvbS0+ZmVhdHVyZXMtPnByZXNzdXJlX21heCArIDEpIC8gMjsKLQotCQkvKgotCQkgKiBpZiBnb2luZyBmcm9tIG91dCBvZiBwcm94aW1pdHkgaW50byBwcm94aW1pdHkgc2VsZWN0IGJldHdlZW4gdGhlIGVyYXNlcgotCQkgKiBhbmQgdGhlIHBlbiBiYXNlZCBvbiB0aGUgc3RhdGUgb2YgdGhlIHN0eWx1czIgYnV0dG9uLCBjaG9vc2UgZXJhc2VyIGlmCi0JCSAqIHByZXNzZWQgZWxzZSBjaG9vc2UgcGVuLiBpZiBub3QgYSBwcm94aW1pdHkgY2hhbmdlIGZyb20gb3V0IHRvIGluLCBzZW5kCi0JCSAqIGFuIG91dCBvZiBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wgdGhlbiBhIGluIGZvciBuZXcgdG9vbC4KLQkJICovCi0JCWlmICghd2Fjb20tPnRvb2xbMF0pIHsKLQkJCS8qIEVyYXNlciBiaXQgc2V0IGZvciBEVEYgKi8KLQkJCWlmIChkYXRhWzFdICYgMHgxMCkKLQkJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1JVQkJFUjsKLQkJCWVsc2UKLQkJCQkvKiBHb2luZyBpbnRvIHByb3hpbWl0eSBzZWxlY3QgdG9vbCAqLwotCQkJCXdhY29tLT50b29sWzFdID0gKGRhdGFbNF0gJiAweDIwKSA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKLQkJfSBlbHNlIHsKLQkJCS8qIHdhcyBlbnRlcmVkIHdpdGggc3R5bHVzMiBwcmVzc2VkICovCi0JCQlpZiAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUlVCQkVSICYmICEoZGF0YVs0XSAmIDB4MjApKSB7Ci0JCQkJLyogcmVwb3J0IG91dCBwcm94aW1pdHkgZm9yIHByZXZpb3VzIHRvb2wgKi8KLQkJCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDApOwotCQkJCWlucHV0X3N5bmMoZGV2KTsKLQkJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKLQkJCQlnb3RvIGV4aXQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKHdhY29tLT50b29sWzFdICE9IEJUTl9UT09MX1JVQkJFUikgewotCQkJLyogVW5rbm93biB0b29sIHNlbGVjdGVkIGRlZmF1bHQgdG8gcGVuIHRvb2wgKi8KLQkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOwotCQkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOwotCQl9Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFsxXSwgcHJveCk7IC8qIHJlcG9ydCBpbiBwcm94aW1pdHkgZm9yIHRvb2wgKi8KLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBpZCk7IC8qIHJlcG9ydCB0b29sIGlkICovCi0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWCwgZGF0YVszXSB8IChkYXRhWzJdIDw8IDcpIHwgKChkYXRhWzFdICYgMHgwMykgPDwgMTQpKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCBkYXRhWzZdIHwgKGRhdGFbNV0gPDwgNykgfCAoKGRhdGFbNF0gJiAweDAzKSA8PCAxNCkpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBwcmVzc3VyZSk7Ci0KLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVs0XSAmIDB4MDgpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUywgZGF0YVs0XSAmIDB4MTApOwotCQkvKiBPbmx5IGFsbG93IHRoZSBzdHlsdXMyIGJ1dHRvbiB0byBiZSByZXBvcnRlZCBmb3IgdGhlIHBlbiB0b29sLiAqLwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1NUWUxVUzIsICh3YWNvbS0+dG9vbFsxXSA9PSBCVE5fVE9PTF9QRU4pICYmIChkYXRhWzRdICYgMHgyMCkpOwotCX0gZWxzZSB7Ci0JCS8qIHJlcG9ydCBwcm94aW1pdHktb3V0IG9mIGEgKHZhbGlkKSB0b29sICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKLQkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCi0JCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKLQkJfQotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIHByb3gpOwotCX0KLQotCXdhY29tLT50b29sWzBdID0gcHJveDsgLyogU2F2ZSBwcm94aW1pdHkgc3RhdGUgKi8KLQlpbnB1dF9zeW5jKGRldik7Ci0KLSBleGl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhY29tX3B0dV9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3YWNvbS0+ZGV2OwotCWludCByZXR2YWwsIGlkOwotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZGF0YVswXSAhPSAyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIndhY29tX3B0dV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0JaWYgKGRhdGFbMV0gJiAweDA0KSB7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9SVUJCRVIsIGRhdGFbMV0gJiAweDIwKTsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDgpOwotCQlpZCA9IEVSQVNFUl9ERVZJQ0VfSUQ7Ci0JfSBlbHNlIHsKLQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT09MX1BFTiwgZGF0YVsxXSAmIDB4MjApOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwMSk7Ci0JCWlkID0gU1RZTFVTX0RFVklDRV9JRDsKLQl9Ci0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCBpZCk7IC8qIHJlcG9ydCB0b29sIGlkICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsyXSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbNF0pKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVs2XSkpOwotCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMHgwMik7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMyLCBkYXRhWzFdICYgMHgxMCk7Ci0KLQlpbnB1dF9zeW5jKGRldik7Ci0KLSBleGl0OgotCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiICh1cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXR2YWwpCi0JCWVyciAoIiVzIC0gdXNiX3N1Ym1pdF91cmIgZmFpbGVkIHdpdGggcmVzdWx0ICVkIiwKLQkJICAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyB2b2lkIHdhY29tX3BlbnBhcnRuZXJfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gd2Fjb20tPmRldjsKLQlpbnQgcmV0dmFsOwotCi0Jc3dpdGNoICh1cmItPnN0YXR1cykgewotCWNhc2UgMDoKLQkJLyogc3VjY2VzcyAqLwotCQlicmVhazsKLQljYXNlIC1FQ09OTlJFU0VUOgotCWNhc2UgLUVOT0VOVDoKLQljYXNlIC1FU0hVVERPV046Ci0JCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCi0JCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwotCWRlZmF1bHQ6Ci0JCWRiZygiJXMgLSBub256ZXJvIHVyYiBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpZiAoZGF0YVswXSAhPSAyKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIndhY29tX3BlbnBhcnRuZXJfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWRcbiIsIGRhdGFbMF0pOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaW5wdXRfcmVncyhkZXYsIHJlZ3MpOwotCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9QRU4sIDEpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgU1RZTFVTX0RFVklDRV9JRCk7IC8qIHJlcG9ydCB0b29sIGlkICovCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBsZTE2X3RvX2NwdSgqKF9fbGUxNiAqKSAmZGF0YVsxXSkpOwotCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgbGUxNl90b19jcHUoKihfX2xlMTYgKikgJmRhdGFbM10pKTsKLQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCAoc2lnbmVkIGNoYXIpZGF0YVs2XSArIDEyNyk7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgKChzaWduZWQgY2hhcilkYXRhWzZdID4gLTgwKSAmJiAhKGRhdGFbNV0gJiAweDIwKSk7Ci0JaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIChkYXRhWzVdICYgMHg0MCkpOwotCWlucHV0X3N5bmMoZGV2KTsKLQotIGV4aXQ6Ci0JcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7Ci0JaWYgKHJldHZhbCkKLQkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAotCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKLX0KLQotc3RhdGljIHZvaWQgd2Fjb21fZ3JhcGhpcmVfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCi17Ci0Jc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gd2Fjb20tPmRldjsKLQlpbnQgeCwgeSwgaWQsIHJ3OwotCWludCByZXR2YWw7Ci0KLQlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7Ci0JY2FzZSAwOgotCQkvKiBzdWNjZXNzICovCi0JCWJyZWFrOwotCWNhc2UgLUVDT05OUkVTRVQ6Ci0JY2FzZSAtRU5PRU5UOgotCWNhc2UgLUVTSFVURE9XTjoKLQkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47Ci0JZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmIChkYXRhWzBdID09IDk5KSByZXR1cm47IC8qIGZvciBWb2xpdG8gdGFibGV0cyAqLwotCi0JaWYgKGRhdGFbMF0gIT0gMikgewotCQlkYmcoIndhY29tX2dyYXBoaXJlX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0KLQlpbnB1dF9yZWdzKGRldiwgcmVncyk7Ci0KLQlpZCA9IFNUWUxVU19ERVZJQ0VfSUQ7Ci0JaWYgKGRhdGFbMV0gJiAweDEwKSB7IC8qIGluIHByb3ggKi8KLQotCQlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgewotCi0JCQljYXNlIDA6CS8qIFBlbiAqLwotCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfUEVOOwotCQkJCWJyZWFrOwotCi0JCQljYXNlIDE6IC8qIFJ1YmJlciAqLwotCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfUlVCQkVSOwotCQkJCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKLQkJCQlicmVhazsKLQotCQkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCi0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbMV0gJiAweDA0KTsKLQkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0KSB7Ci0JCQkJCXJ3ID0gZGF0YVs3XSAmIDB4MDQgPyAoZGF0YVs3XSAmIDB4MDMpLTQgOiAoZGF0YVs3XSAmIDB4MDMpOwotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtcncpOwotCQkJCX0gZWxzZQotCQkJCQlpbnB1dF9yZXBvcnRfcmVsKGRldiwgUkVMX1dIRUVMLCAtKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKLQkJCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCQkJY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCi0JCQkJd2Fjb20tPnRvb2xbMF0gPSBCVE5fVE9PTF9NT1VTRTsKLQkJCQlpZCA9IENVUlNPUl9ERVZJQ0VfSUQ7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCBkYXRhWzFdICYgMHgwMSk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgZGF0YVsxXSAmIDB4MDIpOwotCQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQpCi0JCQkJCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfRElTVEFOQ0UsIGRhdGFbNl0pOwotCQkJCWVsc2UKLQkJCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ESVNUQU5DRSwgZGF0YVs3XSk7Ci0JCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KLQlpZiAoZGF0YVsxXSAmIDB4OTApIHsKLQkJeCA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzJdKTsKLQkJeSA9IGxlMTZfdG9fY3B1KCooX19sZTE2ICopICZkYXRhWzRdKTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCB4KTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19ZLCB5KTsKLQkJaWYgKHdhY29tLT50b29sWzBdICE9IEJUTl9UT09MX01PVVNFKSB7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCBkYXRhWzZdIHwgKChkYXRhWzddICYgMHgwMSkgPDwgOCkpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDB4MDQpOwotCQl9Ci0JfQotCi0JaWYgKGRhdGFbMV0gJiAweDEwKQotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KLQllbHNlCi0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KLQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMF0sIGRhdGFbMV0gJiAweDEwKTsKLQlpbnB1dF9zeW5jKGRldik7Ci0KLQkvKiBzZW5kIHBhZCBkYXRhICovCi0JaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9HNCkgewotCQlpZiAoKHdhY29tLT5zZXJpYWxbMV0gJiAweGMwKSAhPSAoZGF0YVs3XSAmIDB4ZjgpKSB7Ci0JCQl3YWNvbS0+aWRbMV0gPSAxOwotCQkJd2Fjb20tPnNlcmlhbFsxXSA9IChkYXRhWzddICYgMHhmOCk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIChkYXRhWzddICYgMHg0MCkpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl80LCAoZGF0YVs3XSAmIDB4ODApKTsKLQkJCXJ3ID0gKChkYXRhWzddICYgMHgxOCkgPj4gMykgLSAoKGRhdGFbN10gJiAweDIwKSA+PiAzKTsKLQkJCWlucHV0X3JlcG9ydF9yZWwoZGV2LCBSRUxfV0hFRUwsIHJ3KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIDB4ZjApOwotCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwotCQl9IGVsc2UgaWYgKHdhY29tLT5pZFsxXSkgewotCQkJd2Fjb20tPmlkWzFdID0gMDsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fVE9PTF9GSU5HRVIsIDApOwotCQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIDB4ZjApOwotCQl9Ci0JCWlucHV0X3N5bmMoZGV2KTsKLQl9Ci0gZXhpdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICAgX19GVU5DVElPTl9fLCByZXR2YWwpOwotfQotCi1zdGF0aWMgaW50IHdhY29tX2ludHVvc19pbm91dChzdHJ1Y3QgdXJiICp1cmIpCi17Ci0Jc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKLQl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7Ci0Jc3RydWN0IGlucHV0X2RldiAqZGV2ID0gd2Fjb20tPmRldjsKLQlpbnQgaWR4OwotCi0JLyogdG9vbCBudW1iZXIgKi8KLQlpZHggPSBkYXRhWzFdICYgMHgwMTsKLQotCS8qIEVudGVyIHJlcG9ydCAqLwotCWlmICgoZGF0YVsxXSAmIDB4ZmMpID09IDB4YzApIHsKLQkJLyogc2VyaWFsIG51bWJlciBvZiB0aGUgdG9vbCAqLwotCQl3YWNvbS0+c2VyaWFsW2lkeF0gPSAoKGRhdGFbM10gJiAweDBmKSA8PCAyOCkgKwotCQkJKGRhdGFbNF0gPDwgMjApICsgKGRhdGFbNV0gPDwgMTIpICsKLQkJCShkYXRhWzZdIDw8IDQpICsgKGRhdGFbN10gPj4gNCk7Ci0KLQkJd2Fjb20tPmlkW2lkeF0gPSAoZGF0YVsyXSA8PCA0KSB8IChkYXRhWzNdID4+IDQpOwotCQlzd2l0Y2ggKHdhY29tLT5pZFtpZHhdKSB7Ci0JCQljYXNlIDB4ODEyOiAvKiBJbmtpbmcgcGVuICovCi0JCQljYXNlIDB4ODAxOiAvKiBJbnR1b3MzIElua2luZyBwZW4gKi8KLQkJCWNhc2UgMHgwMTI6Ci0JCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTkNJTDsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg4MjI6IC8qIFBlbiAqLwotCQkJY2FzZSAweDg0MjoKLQkJCWNhc2UgMHg4NTI6Ci0JCQljYXNlIDB4ODIzOiAvKiBJbnR1b3MzIEdyaXAgUGVuICovCi0JCQljYXNlIDB4ODEzOiAvKiBJbnR1b3MzIENsYXNzaWMgUGVuICovCi0JCQljYXNlIDB4ODg1OiAvKiBJbnR1b3MzIE1hcmtlciBQZW4gKi8KLQkJCWNhc2UgMHgwMjI6Ci0JCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1BFTjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg4MzI6IC8qIFN0cm9rZSBwZW4gKi8KLQkJCWNhc2UgMHgwMzI6Ci0JCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX0JSVVNIOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDAwNzogLyogTW91c2UgNEQgYW5kIDJEICovCi0JCSAgICAgICAgY2FzZSAweDA5YzoKLQkJCWNhc2UgMHgwOTQ6Ci0JCQljYXNlIDB4MDE3OiAvKiBJbnR1b3MzIDJEIE1vdXNlICovCi0JCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX01PVVNFOwotCQkJCWJyZWFrOwotCQkJY2FzZSAweDA5NjogLyogTGVucyBjdXJzb3IgKi8KLQkJCWNhc2UgMHgwOTc6IC8qIEludHVvczMgTGVucyBjdXJzb3IgKi8KLQkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfTEVOUzsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHg4MmE6IC8qIEVyYXNlciAqLwotCQkJY2FzZSAweDg1YToKLQkJICAgICAgICBjYXNlIDB4OTFhOgotCQkJY2FzZSAweGQxYToKLQkJCWNhc2UgMHgwZmE6Ci0JCQljYXNlIDB4ODJiOiAvKiBJbnR1b3MzIEdyaXAgUGVuIEVyYXNlciAqLwotCQkJY2FzZSAweDgxYjogLyogSW50dW9zMyBDbGFzc2ljIFBlbiBFcmFzZXIgKi8KLQkJCWNhc2UgMHg5MWI6IC8qIEludHVvczMgQWlyYnJ1c2ggRXJhc2VyICovCi0JCQkJd2Fjb20tPnRvb2xbaWR4XSA9IEJUTl9UT09MX1JVQkJFUjsKLQkJCQlicmVhazsKLQkJCWNhc2UgMHhkMTI6Ci0JCQljYXNlIDB4OTEyOgotCQkJY2FzZSAweDExMjoKLQkJCWNhc2UgMHg5MTM6IC8qIEludHVvczMgQWlyYnJ1c2ggKi8KLQkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfQUlSQlJVU0g7Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OiAvKiBVbmtub3duIHRvb2wgKi8KLQkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOwotCQl9Ci0JCWlmKCEoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykgJiYKLQkJCQkoKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzMTIpCi0JCQkJCXx8ICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzE5KSkpKSB7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX01JU0MsIHdhY29tLT5pZFtpZHhdKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCB3YWNvbS0+dG9vbFtpZHhdLCAxKTsKLQkJCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOwotCQkJaW5wdXRfc3luYyhkZXYpOwotCQl9Ci0JCXJldHVybiAxOwotCX0KLQotCS8qIEV4aXQgcmVwb3J0ICovCi0JaWYgKChkYXRhWzFdICYgMHhmZSkgPT0gMHg4MCkgewotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbaWR4XSwgMCk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KLQkJaW5wdXRfZXZlbnQoZGV2LCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7Ci0JCWlucHV0X3N5bmMoZGV2KTsKLQkJcmV0dXJuIDE7Ci0JfQotCi0JaWYoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykgJiYgKCh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMzEyKQotCQkJfHwgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBJTlRVT1MzMTkpKSkKLQkJcmV0dXJuIDE7Ci0JZWxzZQotCQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2dlbmVyYWwoc3RydWN0IHVyYiAqdXJiKQotewotCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1cmItPmNvbnRleHQ7Ci0JdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOwotCXN0cnVjdCBpbnB1dF9kZXYgKmRldiA9IHdhY29tLT5kZXY7Ci0JdW5zaWduZWQgaW50IHQ7Ci0KLQkvKiBnZW5lcmFsIHBlbiBwYWNrZXQgKi8KLQlpZiAoKGRhdGFbMV0gJiAweGI4KSA9PSAweGEwKSB7Ci0JCXQgPSAoZGF0YVs2XSA8PCAyKSB8ICgoZGF0YVs3XSA+PiA2KSAmIDMpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1BSRVNTVVJFLCB0KTsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19USUxUX1gsCi0JCQkJKChkYXRhWzddIDw8IDEpICYgMHg3ZSkgfCAoZGF0YVs4XSA+PiA3KSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVElMVF9ZLCBkYXRhWzhdICYgMHg3Zik7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMik7Ci0JCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDQpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1RPVUNILCB0ID4gMTApOwotCX0KLQotCS8qIGFpcmJydXNoIHNlY29uZCBwYWNrZXQgKi8KLQlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGI0KSB7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfV0hFRUwsCi0JCQkJKGRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfVElMVF9YLAotCQkJCSgoZGF0YVs3XSA8PCAxKSAmIDB4N2UpIHwgKGRhdGFbOF0gPj4gNykpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RJTFRfWSwgZGF0YVs4XSAmIDB4N2YpOwotCX0KLQlyZXR1cm47Ci19Ci0KLXN0YXRpYyB2b2lkIHdhY29tX2ludHVvc19pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKLXsKLQlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gdXJiLT5jb250ZXh0OwotCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKLQlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYgPSB3YWNvbS0+ZGV2OwotCXVuc2lnbmVkIGludCB0OwotCWludCBpZHg7Ci0JaW50IHJldHZhbDsKLQotCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKLQljYXNlIDA6Ci0JCS8qIHN1Y2Nlc3MgKi8KLQkJYnJlYWs7Ci0JY2FzZSAtRUNPTk5SRVNFVDoKLQljYXNlIC1FTk9FTlQ6Ci0JY2FzZSAtRVNIVVRET1dOOgotCQkvKiB0aGlzIHVyYiBpcyB0ZXJtaW5hdGVkLCBjbGVhbiB1cCAqLwotCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7Ci0JCXJldHVybjsKLQlkZWZhdWx0OgotCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwotCQlnb3RvIGV4aXQ7Ci0JfQotCi0JaWYgKGRhdGFbMF0gIT0gMiAmJiBkYXRhWzBdICE9IDUgJiYgZGF0YVswXSAhPSA2ICYmIGRhdGFbMF0gIT0gMTIpIHsKLQkJZGJnKCJ3YWNvbV9pbnR1b3NfaXJxOiByZWNlaXZlZCB1bmtub3duIHJlcG9ydCAjJWQiLCBkYXRhWzBdKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlucHV0X3JlZ3MoZGV2LCByZWdzKTsKLQotCS8qIHRvb2wgbnVtYmVyICovCi0JaWR4ID0gZGF0YVsxXSAmIDB4MDE7Ci0KLQkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KLQlpZiAoZGF0YVswXSA9PSAxMikgewotCQkvKiBpbml0aWF0ZSB0aGUgcGFkIGFzIGEgZGV2aWNlICovCi0JCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpCi0JCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0ZJTkdFUjsKLQotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzAsIChkYXRhWzVdICYgMHgwMSkpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzEsIChkYXRhWzVdICYgMHgwMikpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzIsIChkYXRhWzVdICYgMHgwNCkpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzMsIChkYXRhWzVdICYgMHgwOCkpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzQsIChkYXRhWzZdICYgMHgwMSkpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzUsIChkYXRhWzZdICYgMHgwMikpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzYsIChkYXRhWzZdICYgMHgwNCkpOwotCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROXzcsIChkYXRhWzZdICYgMHgwOCkpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JYLCAoKGRhdGFbMV0gJiAweDFmKSA8PCA4KSB8IGRhdGFbMl0pOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1JZLCAoKGRhdGFbM10gJiAweDFmKSA8PCA4KSB8IGRhdGFbNF0pOwotCi0JCWlmKChkYXRhWzVdICYgMHgwZikgfCAoZGF0YVs2XSAmIDB4MGYpIHwgKGRhdGFbMV0gJiAweDFmKSB8IGRhdGFbMl0pCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDEpOwotCQllbHNlCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgd2Fjb20tPnRvb2xbMV0sIDApOwotCQlpbnB1dF9ldmVudChkZXYsIEVWX01TQywgTVNDX1NFUklBTCwgMHhmZmZmZmZmZik7Ci0JCWlucHV0X3N5bmMoZGV2KTsKLQkJZ290byBleGl0OwotCX0KLQotCS8qIHByb2Nlc3MgaW4vb3V0IHByb3ggZXZlbnRzICovCi0JaWYgKHdhY29tX2ludHVvc19pbm91dCh1cmIpKQotCQlnb3RvIGV4aXQ7Ci0KLQkvKiBDaW50aXEgZG9lc24ndCBzZW5kIGRhdGEgd2hlbiBSRFkgYml0IGlzbid0IHNldCAqLwotCWlmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IENJTlRJUSkgJiYgIShkYXRhWzFdICYgMHg0MCkpCi0JCWdvdG8gZXhpdDsKLQotCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPj0gSU5UVU9TMykgewotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1gsIChkYXRhWzJdIDw8IDkpIHwgKGRhdGFbM10gPDwgMSkgfCAoKGRhdGFbOV0gPj4gMSkgJiAxKSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfWSwgKGRhdGFbNF0gPDwgOSkgfCAoZGF0YVs1XSA8PCAxKSB8IChkYXRhWzldICYgMSkpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX0RJU1RBTkNFLCAoKGRhdGFbOV0gPj4gMikgJiAweDNmKSk7Ci0JfSBlbHNlIHsKLQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19YLCBiZTE2X3RvX2NwdSgqKF9fYmUxNiAqKSAmZGF0YVsyXSkpOwotCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1ksIGJlMTZfdG9fY3B1KCooX19iZTE2ICopICZkYXRhWzRdKSk7Ci0JCWlucHV0X3JlcG9ydF9hYnMoZGV2LCBBQlNfRElTVEFOQ0UsICgoZGF0YVs5XSA+PiAzKSAmIDB4MWYpKTsKLQl9Ci0KLQkvKiBwcm9jZXNzIGdlbmVyYWwgcGFja2V0cyAqLwotCXdhY29tX2ludHVvc19nZW5lcmFsKHVyYik7Ci0KLQkvKiA0RCBtb3VzZSwgMkQgbW91c2UsIG1hcmtlciBwZW4gcm90YXRpb24sIG9yIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KLQlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGE4IHx8IChkYXRhWzFdICYgMHhiZSkgPT0gMHhiMCkgewotCi0JCWlmIChkYXRhWzFdICYgMHgwMikgewotCQkJLyogUm90YXRpb24gcGFja2V0ICovCi0JCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzMpIHsKLQkJCQkvKiBJMyBtYXJrZXIgcGVuIHJvdGF0aW9uIHJlcG9ydGVkIGFzIHdoZWVsCi0JCQkJICogZHVlIHRvIHZhbHVhdG9yIGxpbWl0YXRpb24KLQkJCQkgKi8KLQkJCQl0ID0gKGRhdGFbNl0gPDwgMykgfCAoKGRhdGFbN10gPj4gNSkgJiA3KTsKLQkJCQl0ID0gKGRhdGFbN10gJiAweDIwKSA/ICgodCA+IDkwMCkgPyAoKHQtMSkgLyAyIC0gMTM1MCkgOgotCQkJCQkoKHQtMSkgLyAyICsgNDUwKSkgOiAoNDUwIC0gdCAvIDIpIDsKLQkJCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1dIRUVMLCB0KTsKLQkJCX0gZWxzZSB7Ci0JCQkJLyogNEQgbW91c2Ugcm90YXRpb24gcGFja2V0ICovCi0JCQkJdCA9IChkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7Ci0JCQkJaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19SWiwgKGRhdGFbN10gJiAweDIwKSA/Ci0JCQkJCSgodCAtIDEpIC8gMikgOiAtdCAvIDIpOwotCQkJfQotCi0JCX0gZWxzZSBpZiAoIShkYXRhWzFdICYgMHgxMCkgJiYgd2Fjb20tPmZlYXR1cmVzLT50eXBlIDwgSU5UVU9TMykgewotCQkJLyogNEQgbW91c2UgcGFja2V0ICovCi0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDEpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgwNCk7Ci0KLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgyMCk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MTApOwotCQkJdCA9IChkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMyk7Ci0JCQlpbnB1dF9yZXBvcnRfYWJzKGRldiwgQUJTX1RIUk9UVExFLCAoZGF0YVs4XSAmIDB4MDgpID8gLXQgOiB0KTsKLQotCQl9IGVsc2UgaWYgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTU9VU0UpIHsKLQkJCS8qIDJEIG1vdXNlIHBhY2tldCAqLwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDA0KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwOCk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MTApOwotCQkJaW5wdXRfcmVwb3J0X3JlbChkZXYsIFJFTF9XSEVFTCwgKGRhdGFbOF0gJiAweDAxKQotCQkJCQkJIC0gKChkYXRhWzhdICYgMHgwMikgPj4gMSkpOwotCi0JCQkvKiBJMyAyRCBtb3VzZSBzaWRlIGJ1dHRvbnMgKi8KLQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMykgewotCQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHg0MCk7Ci0JCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDIwKTsKLQkJCX0KLQotCQl9IGVsc2UgaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8IElOVFVPUzMpIHsKLQkJCS8qIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDIpOwotCQkJaW5wdXRfcmVwb3J0X2tleShkZXYsIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDA0KTsKLQkJCWlucHV0X3JlcG9ydF9rZXkoZGV2LCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgxMCk7Ci0JCQlpbnB1dF9yZXBvcnRfa2V5KGRldiwgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MDgpOwotCQl9Ci0JfQotCi0JaW5wdXRfcmVwb3J0X2FicyhkZXYsIEFCU19NSVNDLCB3YWNvbS0+aWRbaWR4XSk7IC8qIHJlcG9ydCB0b29sIGlkICovCi0JaW5wdXRfcmVwb3J0X2tleShkZXYsIHdhY29tLT50b29sW2lkeF0sIDEpOwotCWlucHV0X2V2ZW50KGRldiwgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOwotCWlucHV0X3N5bmMoZGV2KTsKLQotZXhpdDoKLQlyZXR2YWwgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0dmFsKQotCQllcnIgKCIlcyAtIHVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoIHJlc3VsdCAlZCIsCi0JCSAgICBfX0ZVTkNUSU9OX18sIHJldHZhbCk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgd2Fjb21fZmVhdHVyZXNbXSA9IHsKLQl7ICJXYWNvbSBQZW5wYXJ0bmVyIiwgICAgNywgICA1MDQwLCAgMzc4MCwgIDI1NSwgMzIsIFBFTlBBUlRORVIsIHdhY29tX3BlbnBhcnRuZXJfaXJxIH0sCi0gICAgICAgIHsgIldhY29tIEdyYXBoaXJlIiwgICAgICA4LCAgMTAyMDYsICA3NDIyLCAgNTExLCAzMiwgR1JBUEhJUkUsICAgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUyIDR4NSIsIDgsICAxMDIwNiwgIDc0MjIsICA1MTEsIDMyLCBHUkFQSElSRSwgICB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTIgNXg3IiwgOCwgIDEzOTE4LCAxMDIwNiwgIDUxMSwgMzIsIEdSQVBISVJFLCAgIHdhY29tX2dyYXBoaXJlX2lycSB9LAotCXsgIldhY29tIEdyYXBoaXJlMyIsICAgICA4LCAgMTAyMDgsICA3NDI0LCAgNTExLCAzMiwgR1JBUEhJUkUsICAgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmUzIDZ4OCIsIDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDMyLCBHUkFQSElSRSwgICB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKLQl7ICJXYWNvbSBHcmFwaGlyZTQgNHg1IiwgOCwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgMzIsIFdBQ09NX0c0LAkgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCi0JeyAiV2Fjb20gR3JhcGhpcmU0IDZ4OCIsIDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDMyLCBXQUNPTV9HNCwJIHdhY29tX2dyYXBoaXJlX2lycSB9LAotCXsgIldhY29tIFZvbGl0byIsICAgICAgICA4LCAgIDUxMDQsICAzNzEyLCAgNTExLCAzMiwgR1JBUEhJUkUsICAgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCi0JeyAiV2Fjb20gUGVuU3RhdGlvbjIiLCAgIDgsICAgMzI1MCwgIDIzMjAsICAyNTUsIDMyLCBHUkFQSElSRSwgICB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKLQl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgOCwgICA1MTA0LCAgMzcxMiwgIDUxMSwgMzIsIEdSQVBISVJFLCAgIHdhY29tX2dyYXBoaXJlX2lycSB9LAotCXsgIldhY29tIFZvbGl0bzIgMngzIiwgICA4LCAgIDMyNDgsICAyMzIwLCAgNTExLCAzMiwgR1JBUEhJUkUsICAgd2Fjb21fZ3JhcGhpcmVfaXJxIH0sCi0JeyAiV2Fjb20gUGVuUGFydG5lcjIiLCAgIDgsICAgMzI1MCwgIDIzMjAsICAyNTUsIDMyLCBHUkFQSElSRSwgICB3YWNvbV9ncmFwaGlyZV9pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAxMCwgIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MgNng4IiwgICAxMCwgIDIwMzIwLCAxNjI0MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAxMCwgIDMwNDgwLCAyNDA2MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTIiLCAxMCwgIDMwNDgwLCAzMTY4MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MgMTJ4MTgiLCAxMCwgIDQ1NzIwLCAzMTY4MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBQTDQwMCIsICAgICAgICAgOCwgICA1NDA4LCAgNDA1NiwgIDI1NSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAotCXsgIldhY29tIFBMNTAwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgMjU1LCAzMiwgUEwsICAgICAgICAgd2Fjb21fcGxfaXJxIH0sCi0JeyAiV2Fjb20gUEw2MDAiLCAgICAgICAgIDgsICAgNjEyNiwgIDQ2MDQsICAyNTUsIDMyLCBQTCwgICAgICAgICB3YWNvbV9wbF9pcnEgfSwKLQl7ICJXYWNvbSBQTDYwMFNYIiwgICAgICAgOCwgICA2MjYwLCAgNTAxNiwgIDI1NSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAotCXsgIldhY29tIFBMNTUwIiwgICAgICAgICA4LCAgIDYxNDQsICA0NjA4LCAgNTExLCAzMiwgUEwsICAgICAgICAgd2Fjb21fcGxfaXJxIH0sCi0JeyAiV2Fjb20gUEw4MDAiLCAgICAgICAgIDgsICAgNzIyMCwgIDU3ODAsICA1MTEsIDMyLCBQTCwgICAgICAgICB3YWNvbV9wbF9pcnEgfSwKLQl7ICJXYWNvbSBQTDcwMCIsICAgICAgICAgOCwgICA2NzU4LCAgNTQwNiwgIDUxMSwgMzIsIFBMLAkgd2Fjb21fcGxfaXJxIH0sCi0JeyAiV2Fjb20gUEw1MTAiLCAgICAgICAgIDgsICAgNjI4MiwgIDQ3NjIsICA1MTEsIDMyLCBQTCwJIHdhY29tX3BsX2lycSB9LAotCXsgIldhY29tIERUVTcxMCIsICAgICAgICA4LCAgMzQwODAsIDI3NjYwLCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKLQl7ICJXYWNvbSBEVEY1MjEiLCAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3BsX2lycSB9LAotCXsgIldhY29tIERURjcyMCIsICAgICAgICA4LCAgIDY4NTgsICA1NTA2LCAgNTExLCAzMiwgUEwsCSB3YWNvbV9wbF9pcnEgfSwKLQl7ICJXYWNvbSBDaW50aXEgUGFydG5lciIsOCwgIDIwNDgwLCAxNTM2MCwgIDUxMSwgMzIsIFBMLCAgICAgICAgIHdhY29tX3B0dV9pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgMTAsIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgMTAsIDIwMzIwLCAxNjI0MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDl4MTIiLCAgMTAsIDMwNDgwLCAyNDA2MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDEyIiwgMTAsIDMwNDgwLCAzMTY4MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDEyeDE4IiwgMTAsIDQ1NzIwLCAzMTY4MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDR4NSIsICAgMTAsIDI1NDAwLCAyMDMyMCwgMTAyMywgMTUsIElOVFVPUzMsICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDZ4OCIsICAgMTAsIDQwNjQwLCAzMDQ4MCwgMTAyMywgMTUsIElOVFVPUzMsICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDl4MTIiLCAgMTAsIDYwOTYwLCA0NTcyMCwgMTAyMywgMTUsIElOVFVPUzMsICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDEyeDEyIiwgMTAsIDYwOTYwLCA2MDk2MCwgMTAyMywgMTUsIElOVFVPUzMxMiwgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDEyeDE5IiwgMTAsIDk3NTM2LCA2MDk2MCwgMTAyMywgMTUsIElOVFVPUzMxOSwgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MzIDZ4MTEiLCAgMTAsIDU0MjA0LCAzMTc1MCwgMTAyMywgMTUsIElOVFVPUzMsICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBDaW50aXEgMjFVWCIsICAgMTAsIDg3MjAwLCA2NTYwMCwgMTAyMywgMTUsIENJTlRJUSwgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7ICJXYWNvbSBJbnR1b3MyIDZ4OCIsICAgMTAsIDIwMzIwLCAxNjI0MCwgMTAyMywgMTUsIElOVFVPUywgICAgIHdhY29tX2ludHVvc19pcnEgfSwKLQl7IH0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCB3YWNvbV9pZHNbXSA9IHsKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgwMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgxNikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2MykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg2NCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgyNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzNykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzOSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhDMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgwMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0MykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCMykgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNCkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHhCNSkgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHgzRikgfSwKLQl7IFVTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9XQUNPTSwgMHg0NykgfSwKLQl7IH0KLX07Ci0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3YWNvbV9pZHMpOwotCi1zdGF0aWMgaW50IHdhY29tX29wZW4oc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSBkZXYtPnByaXZhdGU7Ci0KLQl3YWNvbS0+aXJxLT5kZXYgPSB3YWNvbS0+dXNiZGV2OwotCWlmICh1c2Jfc3VibWl0X3VyYih3YWNvbS0+aXJxLCBHRlBfS0VSTkVMKSkKLQkJcmV0dXJuIC1FSU87Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgd2Fjb21fY2xvc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KQotewotCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSBkZXYtPnByaXZhdGU7Ci0KLQl1c2Jfa2lsbF91cmIod2Fjb20tPmlycSk7Ci19Ci0KLXN0YXRpYyBpbnQgd2Fjb21fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKLQlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwotCXN0cnVjdCB3YWNvbSAqd2Fjb207Ci0Jc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWNoYXIgcmVwX2RhdGFbMl0sIGxpbWl0ID0gMDsKLQotCXdhY29tID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHdhY29tKSwgR0ZQX0tFUk5FTCk7Ci0JaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7Ci0JaWYgKCF3YWNvbSB8fCAhaW5wdXRfZGV2KQotCQlnb3RvIGZhaWwxOwotCi0Jd2Fjb20tPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgMTAsIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOwotCWlmICghd2Fjb20tPmRhdGEpCi0JCWdvdG8gZmFpbDE7Ci0KLQl3YWNvbS0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKLQlpZiAoIXdhY29tLT5pcnEpCi0JCWdvdG8gZmFpbDI7Ci0KLQl3YWNvbS0+dXNiZGV2ID0gZGV2OwotCXdhY29tLT5kZXYgPSBpbnB1dF9kZXY7Ci0JdXNiX21ha2VfcGF0aChkZXYsIHdhY29tLT5waHlzLCBzaXplb2Yod2Fjb20tPnBoeXMpKTsKLQlzdHJsY2F0KHdhY29tLT5waHlzLCAiL2lucHV0MCIsIHNpemVvZih3YWNvbS0+cGh5cykpOwotCi0Jd2Fjb20tPmZlYXR1cmVzID0gd2Fjb21fZmVhdHVyZXMgKyAoaWQgLSB3YWNvbV9pZHMpOwotCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnBrdGxlbiA+IDEwKQotCQlCVUcoKTsKLQotCWlucHV0X2Rldi0+bmFtZSA9IHdhY29tLT5mZWF0dXJlcy0+bmFtZTsKLQl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7Ci0KLQlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmludGYtPmRldjsKLQlpbnB1dF9kZXYtPnByaXZhdGUgPSB3YWNvbTsKLQlpbnB1dF9kZXYtPm9wZW4gPSB3YWNvbV9vcGVuOwotCWlucHV0X2Rldi0+Y2xvc2UgPSB3YWNvbV9jbG9zZTsKLQotCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKLQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCB3YWNvbS0+ZmVhdHVyZXMtPnhfbWF4LCA0LCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ZLCAwLCB3YWNvbS0+ZmVhdHVyZXMtPnlfbWF4LCA0LCAwKTsKLQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19QUkVTU1VSRSwgMCwgd2Fjb20tPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsIDAsIDApOwotCWlucHV0X2Rldi0+YWJzYml0W0xPTkcoQUJTX01JU0MpXSB8PSBCSVQoQUJTX01JU0MpOwotCi0Jc3dpdGNoICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUpIHsKLQkJY2FzZSBXQUNPTV9HNDoKLQkJCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX01TQyk7Ci0JCQlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVQoTVNDX1NFUklBTCk7Ci0JCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7Ci0JCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl8wKSB8IEJJVChCVE5fMSkgfCBCSVQoQlROXzIpIHwgQklUKEJUTl8zKSB8IEJJVChCVE5fNCkgfCBCSVQoQlROXzUpIHwgQklUKEJUTl82KSB8IEJJVChCVE5fNyk7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQotCQljYXNlIEdSQVBISVJFOgotCQkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfUkVMKTsKLQkJCWlucHV0X2Rldi0+cmVsYml0WzBdIHw9IEJJVChSRUxfV0hFRUwpOwotCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKLQkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfUlVCQkVSKSB8IEJJVChCVE5fVE9PTF9NT1VTRSkgfCBCSVQoQlROX1NUWUxVUzIpOwotCQkJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tLT5mZWF0dXJlcy0+ZGlzdGFuY2VfbWF4LCAwLCAwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgSU5UVU9TMzoKLQkJY2FzZSBJTlRVT1MzMTI6Ci0JCWNhc2UgSU5UVU9TMzE5OgotCQljYXNlIENJTlRJUToKLQkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0RJR0kpXSB8PSBCSVQoQlROX1RPT0xfRklOR0VSKTsKLQkJCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROXzApIHwgQklUKEJUTl8xKSB8IEJJVChCVE5fMikgfCBCSVQoQlROXzMpIHwgQklUKEJUTl80KSB8IEJJVChCVE5fNSkgfCBCSVQoQlROXzYpIHwgQklUKEJUTl83KTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JYLCAwLCA0MDk3LCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1JZLCAwLCA0MDk3LCAwLCAwKTsKLQkJCS8qIGZhbGwgdGhyb3VnaCAqLwotCi0JCWNhc2UgSU5UVU9TOgotCQkJaW5wdXRfZGV2LT5ldmJpdFswXSB8PSBCSVQoRVZfTVNDKSB8IEJJVChFVl9SRUwpOwotCQkJaW5wdXRfZGV2LT5tc2NiaXRbMF0gfD0gQklUKE1TQ19TRVJJQUwpOwotCQkJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7Ci0JCQlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9MRUZUKV0gfD0gQklUKEJUTl9MRUZUKSB8IEJJVChCVE5fUklHSFQpIHwgQklUKEJUTl9NSURETEUpIHwgQklUKEJUTl9TSURFKSB8IEJJVChCVE5fRVhUUkEpOwotCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9SVUJCRVIpIHwgQklUKEJUTl9UT09MX01PVVNFKQl8IEJJVChCVE5fVE9PTF9CUlVTSCkKLQkJCQkJCQkgIHwgQklUKEJUTl9UT09MX1BFTkNJTCkgfCBCSVQoQlROX1RPT0xfQUlSQlJVU0gpIHwgQklUKEJUTl9UT09MX0xFTlMpIHwgQklUKEJUTl9TVFlMVVMyKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX0RJU1RBTkNFLCAwLCB3YWNvbS0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19XSEVFTCwgMCwgMTAyMywgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19USUxUX1gsIDAsIDEyNywgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19USUxUX1ksIDAsIDEyNywgMCwgMCk7Ci0JCQlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWiwgLTkwMCwgODk5LCAwLCAwKTsKLQkJCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1RIUk9UVExFLCAtMTAyMywgMTAyMywgMCwgMCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFBMOgotCQkJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fU1RZTFVTMikgfCBCSVQoQlROX1RPT0xfUlVCQkVSKTsKLQkJCWJyZWFrOwotCX0KLQotCWVuZHBvaW50ID0gJmludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjOwotCi0JaWYgKHdhY29tLT5mZWF0dXJlcy0+cGt0bGVuID4gMTApCi0JCUJVRygpOwotCi0JdXNiX2ZpbGxfaW50X3VyYih3YWNvbS0+aXJxLCBkZXYsCi0JCQkgdXNiX3JjdmludHBpcGUoZGV2LCBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCi0JCQkgd2Fjb20tPmRhdGEsIHdhY29tLT5mZWF0dXJlcy0+cGt0bGVuLAotCQkJIHdhY29tLT5mZWF0dXJlcy0+aXJxLCB3YWNvbSwgZW5kcG9pbnQtPmJJbnRlcnZhbCk7Ci0Jd2Fjb20tPmlycS0+dHJhbnNmZXJfZG1hID0gd2Fjb20tPmRhdGFfZG1hOwotCXdhY29tLT5pcnEtPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwotCi0JaW5wdXRfcmVnaXN0ZXJfZGV2aWNlKHdhY29tLT5kZXYpOwotCi0JLyogQXNrIHRoZSB0YWJsZXQgdG8gcmVwb3J0IHRhYmxldCBkYXRhLiBSZXBlYXQgdW50aWwgaXQgc3VjY2VlZHMgKi8KLQlkbyB7Ci0JCXJlcF9kYXRhWzBdID0gMjsKLQkJcmVwX2RhdGFbMV0gPSAyOwotCQl1c2Jfc2V0X3JlcG9ydChpbnRmLCAzLCAyLCByZXBfZGF0YSwgMik7Ci0JCXVzYl9nZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKLQl9IHdoaWxlIChyZXBfZGF0YVsxXSAhPSAyICYmIGxpbWl0KysgPCA1KTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwgd2Fjb20pOwotCXJldHVybiAwOwotCi1mYWlsMjoJdXNiX2J1ZmZlcl9mcmVlKGRldiwgMTAsIHdhY29tLT5kYXRhLCB3YWNvbS0+ZGF0YV9kbWEpOwotZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7Ci0Ja2ZyZWUod2Fjb20pOwotCXJldHVybiAtRU5PTUVNOwotfQotCi1zdGF0aWMgdm9pZCB3YWNvbV9kaXNjb25uZWN0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKQotewotCXN0cnVjdCB3YWNvbSAqd2Fjb20gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsKLQotCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgTlVMTCk7Ci0JaWYgKHdhY29tKSB7Ci0JCXVzYl9raWxsX3VyYih3YWNvbS0+aXJxKTsKLQkJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2Uod2Fjb20tPmRldik7Ci0JCXVzYl9mcmVlX3VyYih3YWNvbS0+aXJxKTsKLQkJdXNiX2J1ZmZlcl9mcmVlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDEwLCB3YWNvbS0+ZGF0YSwgd2Fjb20tPmRhdGFfZG1hKTsKLQkJa2ZyZWUod2Fjb20pOwotCX0KLX0KLQotc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHdhY29tX2RyaXZlciA9IHsKLQkubmFtZSA9CQkid2Fjb20iLAotCS5wcm9iZSA9CXdhY29tX3Byb2JlLAotCS5kaXNjb25uZWN0ID0Jd2Fjb21fZGlzY29ubmVjdCwKLQkuaWRfdGFibGUgPQl3YWNvbV9pZHMsCi19OwotCi1zdGF0aWMgaW50IF9faW5pdCB3YWNvbV9pbml0KHZvaWQpCi17Ci0JaW50IHJlc3VsdCA9IHVzYl9yZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKLQlpZiAocmVzdWx0ID09IDApCi0JCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKLQlyZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgdm9pZCBfX2V4aXQgd2Fjb21fZXhpdCh2b2lkKQotewotCXVzYl9kZXJlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOwotfQotCi1tb2R1bGVfaW5pdCh3YWNvbV9pbml0KTsKLW1vZHVsZV9leGl0KHdhY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb20uaCBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODMyNzM3YgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tLmgKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9pbnB1dC93YWNvbS5oCisgKgorICogIFVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBzdXBwb3J0CisgKgorICogIENvcHlyaWdodCAoYykgMjAwMC0yMDA0IFZvanRlY2ggUGF2bGlrCTx2b2p0ZWNoQHVjdy5jej4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDAgQW5kcmVhcyBCYWNoIEFhZW4JPGFiYWNoQHN0b2ZhbmV0LmRrPgorICogIENvcHlyaWdodCAoYykgMjAwMCBDbGlmZm9yZCBXb2xmCQk8Y2xpZmZvcmRAY2xpZmZvcmQuYXQ+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIFNhbSBNb3NlbAkJPHNhbS5tb3NlbEBjb21wdXRlci5vcmc+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIEphbWVzIEUuIEJsYWlyCQk8Y29ydnVzQGdudS5vcmc+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAwIERhbmllbCBFZ2dlcgkJPGVnZ2VyQHN1c2UuZGU+CisgKiAgQ29weXJpZ2h0IChjKSAyMDAxIEZyZWRlcmljIExlcGllZAkJPGZsZXBpZWRAbWFuZHJha2Vzb2Z0LmNvbT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDQgUGFuYWdpb3RpcyBJc3NhcmlzCTxwYW5hZ2lvdGlzLmlzc2FyaXNAbWVjaC5rdWxldXZlbi5hYy5iZT4KKyAqICBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBQaW5nIENoZW5nCQk8cGluZ2NAd2Fjb20uY29tPgorICoKKyAqICBDaGFuZ2VMb2c6CisgKiAgICAgIHYwLjEgKHZwKSAgLSBJbml0aWFsIHJlbGVhc2UKKyAqICAgICAgdjAuMiAoYWJhKSAtIFN1cHBvcnQgZm9yIGFsbCBidXR0b25zIC8gY29tYmluYXRpb25zCisgKiAgICAgIHYwLjMgKHZwKSAgLSBTdXBwb3J0IGZvciBJbnR1b3MgYWRkZWQKKyAqCXYwLjQgKHNtKSAgLSBTdXBwb3J0IGZvciBtb3JlIEludHVvcyBtb2RlbHMsIG1lbnVzdHJpcAorICoJCQlyZWxhdGl2ZSBtb2RlLCBwcm94aW1pdHkuCisgKgl2MC41ICh2cCkgIC0gQmlnIGNsZWFudXAsIG5pZnR5IGZlYXR1cmVzIHJlbW92ZWQsCisgKgkJCXRoZXkgYmVsb25nIGluIHVzZXJzcGFjZQorICoJdjEuOCAodnApICAtIFN1Ym1pdCBVUkIgb25seSB3aGVuIG9wZXJhdGluZywgbW92ZWQgdG8gQ1ZTLAorICoJCQl1c2UgaW5wdXRfcmVwb3J0X2tleSBpbnN0ZWFkIG9mIHJlcG9ydF9idG4gYW5kCisgKgkJCW90aGVyIGNsZWFudXBzCisgKgl2MS4xMSAodnApIC0gQWRkIFVSQiAtPmRldiBzZXR0aW5nIGZvciBuZXcga2VybmVscworICoJdjEuMTEgKGpiKSAtIEFkZCBzdXBwb3J0IGZvciB0aGUgNEQgTW91c2UgJiBMZW5zCisgKgl2MS4xMiAoZGUpIC0gQWRkIHN1cHBvcnQgZm9yIHR3byBtb3JlIGlua2luZyBwZW4gSURzCisgKgl2MS4xNCAodnApIC0gVXNlIG5ldyBVU0IgZGV2aWNlIGlkIHByb2Jpbmcgc2NoZW1lLgorICoJCSAgICAgRml4IFdhY29tIEdyYXBoaXJlIG1vdXNlIHdoZWVsCisgKgl2MS4xOCAodnApIC0gRml4IG1vdXNlIHdoZWVsIGRpcmVjdGlvbgorICoJCSAgICAgTWFrZSBtb3VzZSByZWxhdGl2ZQorICogICAgICB2MS4yMCAoZmwpIC0gUmVwb3J0IHRvb2wgaWQgZm9yIEludHVvcyBkZXZpY2VzCisgKiAgICAgICAgICAgICAgICAgLSBNdWx0aSB0b29scyBzdXBwb3J0CisgKiAgICAgICAgICAgICAgICAgLSBDb3JyZWN0ZWQgSW50dW9zIHByb3RvY29sIGRlY29kaW5nIChhaXJicnVzaCwgNEQgbW91c2UsIGxlbnMgY3Vyc29yLi4uKQorICogICAgICAgICAgICAgICAgIC0gQWRkIFBMIG1vZGVscyBzdXBwb3J0CisgKgkJICAgLSBGaXggV2Fjb20gR3JhcGhpcmUgbW91c2Ugd2hlZWwgYWdhaW4KKyAqCXYxLjIxICh2cCkgLSBSZW1vdmVkIHByb3RvY29sIGRlc2NyaXB0aW9ucworICoJCSAgIC0gQWRkZWQgTUlTQ19TRVJJQUwgZm9yIHRvb2wgc2VyaWFsIG51bWJlcnMKKyAqCSAgICAgIChnYikgLSBJZGVudGlmeSB2ZXJzaW9uIG9uIG1vZHVsZSBsb2FkLgorICogICAgdjEuMjEuMSAoZmwpIC0gYWRkZWQgR3JhcGhpcmUyIHN1cHBvcnQKKyAqICAgIHYxLjIxLjIgKGZsKSAtIGFkZGVkIEludHVvczIgc3VwcG9ydAorICogICAgICAgICAgICAgICAgIC0gYWRkZWQgYWxsIHRoZSBQTCBpZHMKKyAqICAgIHYxLjIxLjMgKGZsKSAtIGFkZGVkIGFub3RoZXIgZXJhc2VyIGlkIGZyb20gTmVpbCBPa2Ftb3RvCisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBzbW9vdGggZmlsdGVyIGZvciBHcmFwaGlyZSBmcm9tIFBlcmkgSGFua2V5CisgKiAgICAgICAgICAgICAgICAgLSBhZGRlZCBQZW5QYXJ0bmVyIHN1cHBvcnQgZnJvbSBPbGFmIHZhbiBFcworICogICAgICAgICAgICAgICAgIC0gbmV3IHRvb2wgaWRzIGZyb20gT2xlIE1hcnRpbiBCam9lcm5kYWxlbgorICoJdjEuMjkgKHBjKSAtIEFkZCBzdXBwb3J0IGZvciBtb3JlIHRhYmxldHMKKyAqCQkgICAtIEZpeCBwcmVzc3VyZSByZXBvcnRpbmcKKyAqCXYxLjMwICh2cCkgLSBNZXJnZSAyLjQgYW5kIDIuNSBkcml2ZXJzCisgKgkJICAgLSBTaW5jZSAyLjUgbm93IGhhcyBpbnB1dF9zeW5jKCksIHJlbW92ZSBNU0NfU0VSSUFMIGFidXNlCisgKgkJICAgLSBDbGVhbnVwcyBoZXJlIGFuZCB0aGVyZQorICogICAgdjEuMzAuMSAocGkpIC0gQWRkZWQgR3JhcGhpcmUzIHN1cHBvcnQKKyAqCXYxLjQwIChwYykgLSBBZGQgc3VwcG9ydCBmb3Igc2V2ZXJhbCBuZXcgZGV2aWNlcywgZml4IGVyYXNlciByZXBvcnRpbmcsIC4uLgorICoJdjEuNDMgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIENpbnRpcSAyMVVYCisgKgkJICAgLSBGaXhlZCBhIEdyYXBoaXJlIGJ1ZworICoJCSAgIC0gTWVyZ2VkIHdhY29tX2ludHVvczNfaXJxIGludG8gd2Fjb21faW50dW9zX2lycQorICoJdjEuNDQgKHBjKSAtIEFkZGVkIHN1cHBvcnQgZm9yIEdyYXBoaXJlNCwgQ2ludGlxIDcxMCwgSW50dW9zMyA2eDExLCBldGMuCisgKgkJICAgLSBSZXBvcnQgRGV2aWNlIElEcworICogICAgICB2MS40NSAocGMpIC0gQWRkZWQgc3VwcG9ydCBmb3IgRFRGIDUyMSwgSW50dW9zMyAxMngxMiBhbmQgMTJ4MTkKKyAqICAgICAgICAgICAgICAgICAtIE1pbm9yIGRhdGEgcmVwb3J0IGZpeAorICogICAgICB2MS40NiAocGMpIC0gU3BsaXQgd2Fjb20uYyBpbnRvIHdhY29tX3N5cy5jIGFuZCB3YWNvbV93YWMuYywKKyAqCQkgICAtIHdoZXJlIHdhY29tX3N5cy5jIGRlYWxzIHdpdGggc3lzdGVtIHNwZWNpZmljIGNvZGUsCisgKiAJCSAgIC0gYW5kIHdhY29tX3dhYy5jIGRlYWxzIHdpdGggV2Fjb20gc3BlY2lmaWMgY29kZQorICovCisKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisjaWZuZGVmIFdBQ09NX0gKKyNkZWZpbmUgV0FDT01fSAorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvdXNiL2lucHV0Lmg+CisjaW5jbHVkZSA8YXNtL3VuYWxpZ25lZC5oPgorCisvKgorICogVmVyc2lvbiBJbmZvcm1hdGlvbgorICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MS40NiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiVm9qdGVjaCBQYXZsaWsgPHZvanRlY2hAdWN3LmN6PiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBkcml2ZXIiCisjZGVmaW5lIERSSVZFUl9MSUNFTlNFICJHUEwiCisKK01PRFVMRV9BVVRIT1IoRFJJVkVSX0FVVEhPUik7CitNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOworTU9EVUxFX0xJQ0VOU0UoRFJJVkVSX0xJQ0VOU0UpOworCisjZGVmaW5lIFVTQl9WRU5ET1JfSURfV0FDT00JMHgwNTZhCisKK3N0cnVjdCB3YWNvbSB7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICpkZXY7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVzYmRldjsKKwlzdHJ1Y3QgdXJiICppcnE7CisJc3RydWN0IHdhY29tX3dhYyAqIHdhY29tX3dhYzsKKwljaGFyIHBoeXNbMzJdOworfTsKKworc3RydWN0IHdhY29tX2NvbWJvIHsKKwlzdHJ1Y3Qgd2Fjb20gKiB3YWNvbTsKKwlzdHJ1Y3QgdXJiICogdXJiOworCXN0cnVjdCBwdF9yZWdzICpyZWdzOworfTsKKworZXh0ZXJuIGludCB3YWNvbV93YWNfaXJxKHN0cnVjdCB3YWNvbV93YWMgKiB3YWNvbV93YWMsIHZvaWQgKiB3Y29tYm8pOworZXh0ZXJuIHZvaWQgd2Fjb21fc3lzX2lycShzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKK2V4dGVybiB2b2lkIHdhY29tX3JlcG9ydF9hYnModm9pZCAqd2NvbWJvLCB1bnNpZ25lZCBpbnQgYWJzX3R5cGUsIGludCBhYnNfZGF0YSk7CitleHRlcm4gdm9pZCB3YWNvbV9yZXBvcnRfcmVsKHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IHJlbF90eXBlLCBpbnQgcmVsX2RhdGEpOworZXh0ZXJuIHZvaWQgd2Fjb21fcmVwb3J0X2tleSh2b2lkICp3Y29tYm8sIHVuc2lnbmVkIGludCBrZXlfdHlwZSwgaW50IGtleV9kYXRhKTsKK2V4dGVybiB2b2lkIHdhY29tX2lucHV0X2V2ZW50KHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpOworZXh0ZXJuIHZvaWQgd2Fjb21faW5wdXRfcmVncyh2b2lkICp3Y29tYm8pOworZXh0ZXJuIHZvaWQgd2Fjb21faW5wdXRfc3luYyh2b2lkICp3Y29tYm8pOworZXh0ZXJuIHZvaWQgd2Fjb21faW5pdF9pbnB1dF9kZXYoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOworZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X2c0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKK2V4dGVybiB2b2lkIGlucHV0X2Rldl9nKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKK2V4dGVybiB2b2lkIGlucHV0X2Rldl9pMyhzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CitleHRlcm4gdm9pZCBpbnB1dF9kZXZfaShzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYyk7CitleHRlcm4gdm9pZCBpbnB1dF9kZXZfcGwoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpOworZXh0ZXJuIHZvaWQgaW5wdXRfZGV2X3B0KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKTsKK2V4dGVybiBfX3UxNiB3YWNvbV9sZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKK2V4dGVybiBfX3UxNiB3YWNvbV9iZTE2X3RvX2NwdSh1bnNpZ25lZCBjaGFyICpkYXRhKTsKK2V4dGVybiBzdHJ1Y3Qgd2Fjb21fZmVhdHVyZXMgKiBnZXRfd2Fjb21fZmVhdHVyZShjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICogZ2V0X2RldmljZV90YWJsZSh2b2lkKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV9zeXMuYyBiL2RyaXZlcnMvdXNiL2lucHV0L3dhY29tX3N5cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjM2I1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV9zeXMuYwpAQCAtMCwwICsxLDMxNSBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2lucHV0L3dhY29tX3N5cy5jCisgKgorICogIFVTQiBXYWNvbSBHcmFwaGlyZSBhbmQgV2Fjb20gSW50dW9zIHRhYmxldCBzdXBwb3J0IC0gc3lzdGVtIHNwZWNpZmljIGNvZGUKKyAqLworCisvKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSAid2Fjb20uaCIKKyNpbmNsdWRlICJ3YWNvbV93YWMuaCIKKworI2RlZmluZSBVU0JfUkVRX0dFVF9SRVBPUlQJMHgwMQorI2RlZmluZSBVU0JfUkVRX1NFVF9SRVBPUlQJMHgwOQorCitzdGF0aWMgaW50IHVzYl9nZXRfcmVwb3J0KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCB1bnNpZ25lZCBjaGFyIHR5cGUsCisJCQkJdW5zaWduZWQgY2hhciBpZCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSkKK3sKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksCisJCXVzYl9yY3ZjdHJscGlwZShpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpLCAwKSwKKwkJVVNCX1JFUV9HRVRfUkVQT1JULCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCSh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlidWYsIHNpemUsIDEwMCk7Cit9CisKK3N0YXRpYyBpbnQgdXNiX3NldF9yZXBvcnQoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGNoYXIgdHlwZSwKKwkJCQl1bnNpZ25lZCBjaGFyIGlkLCB2b2lkICpidWYsIGludCBzaXplKQoreworCXJldHVybiB1c2JfY29udHJvbF9tc2coaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwKKwkJdXNiX3NuZGN0cmxwaXBlKGludGVyZmFjZV90b191c2JkZXYoaW50ZiksIDApLAorICAgICAgICAgICAgICAgIFVTQl9SRVFfU0VUX1JFUE9SVCwgVVNCX1RZUEVfQ0xBU1MgfCBVU0JfUkVDSVBfSU5URVJGQUNFLAorICAgICAgICAgICAgICAgICh0eXBlIDw8IDgpICsgaWQsIGludGYtPmFsdHNldHRpbmdbMF0uZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorCQlidWYsIHNpemUsIDEwMDApOworfQorCitzdGF0aWMgc3RydWN0IGlucHV0X2RldiAqIGdldF9pbnB1dF9kZXYoc3RydWN0IHdhY29tX2NvbWJvICp3Y29tYm8pCit7CisJcmV0dXJuIHdjb21iby0+d2Fjb20tPmRldjsKK30KKwordm9pZCB3YWNvbV9zeXNfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3Qgd2Fjb21fY29tYm8gd2NvbWJvOworCWludCByZXR2YWw7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOgorCQkvKiBzdWNjZXNzICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6CisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KKwkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJZGVmYXVsdDoKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCXdjb21iby53YWNvbSA9IHdhY29tOworCXdjb21iby51cmIgPSB1cmI7CisJd2NvbWJvLnJlZ3MgPSByZWdzOworCisJaWYgKHdhY29tX3dhY19pcnEod2Fjb20tPndhY29tX3dhYywgKHZvaWQgKikmd2NvbWJvKSkKKwkJaW5wdXRfc3luYyhnZXRfaW5wdXRfZGV2KCZ3Y29tYm8pKTsKKworIGV4aXQ6CisJcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJldHZhbCkKKwkJZXJyICgiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWQiLAorCQkgICAgIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKK30KKwordm9pZCB3YWNvbV9yZXBvcnRfa2V5KHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IGtleV90eXBlLCBpbnQga2V5X2RhdGEpCit7CisJaW5wdXRfcmVwb3J0X2tleShnZXRfaW5wdXRfZGV2KChzdHJ1Y3Qgd2Fjb21fY29tYm8gKil3Y29tYm8pLCBrZXlfdHlwZSwga2V5X2RhdGEpOworCXJldHVybjsKK30KKwordm9pZCB3YWNvbV9yZXBvcnRfYWJzKHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IGFic190eXBlLCBpbnQgYWJzX2RhdGEpCit7CisJaW5wdXRfcmVwb3J0X2FicyhnZXRfaW5wdXRfZGV2KChzdHJ1Y3Qgd2Fjb21fY29tYm8gKil3Y29tYm8pLCBhYnNfdHlwZSwgYWJzX2RhdGEpOworCXJldHVybjsKK30KKwordm9pZCB3YWNvbV9yZXBvcnRfcmVsKHZvaWQgKndjb21ibywgdW5zaWduZWQgaW50IHJlbF90eXBlLCBpbnQgcmVsX2RhdGEpCit7CisJaW5wdXRfcmVwb3J0X3JlbChnZXRfaW5wdXRfZGV2KChzdHJ1Y3Qgd2Fjb21fY29tYm8gKil3Y29tYm8pLCByZWxfdHlwZSwgcmVsX2RhdGEpOworCXJldHVybjsKK30KKwordm9pZCB3YWNvbV9pbnB1dF9ldmVudCh2b2lkICp3Y29tYm8sIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgY29kZSwgaW50IHZhbHVlKQoreworCWlucHV0X2V2ZW50KGdldF9pbnB1dF9kZXYoKHN0cnVjdCB3YWNvbV9jb21ibyAqKXdjb21ibyksIHR5cGUsIGNvZGUsIHZhbHVlKTsKKwlyZXR1cm47Cit9CisKK19fdTE2IHdhY29tX2JlMTZfdG9fY3B1KHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJX191MTYgdmFsdWU7CisJdmFsdWUgPSBiZTE2X3RvX2NwdSgqKF9fYmUxNiAqKSBkYXRhKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK19fdTE2IHdhY29tX2xlMTZfdG9fY3B1KHVuc2lnbmVkIGNoYXIgKmRhdGEpCit7CisJX191MTYgdmFsdWU7CisJdmFsdWUgPSBiZTE2X3RvX2NwdSgqKF9fYmUxNiAqKSBkYXRhKTsKKwlyZXR1cm4gdmFsdWU7Cit9CisKK3ZvaWQgd2Fjb21faW5wdXRfcmVncyh2b2lkICp3Y29tYm8pCit7CisJaW5wdXRfcmVncyhnZXRfaW5wdXRfZGV2KChzdHJ1Y3Qgd2Fjb21fY29tYm8gKil3Y29tYm8pLCAoKHN0cnVjdCB3YWNvbV9jb21ibyAqKXdjb21ibyktPnJlZ3MpOworCXJldHVybjsKK30KKwordm9pZCB3YWNvbV9pbnB1dF9zeW5jKHZvaWQgKndjb21ibykKK3sKKwlpbnB1dF9zeW5jKGdldF9pbnB1dF9kZXYoKHN0cnVjdCB3YWNvbV9jb21ibyAqKXdjb21ibykpOworCXJldHVybjsKK30KKworc3RhdGljIGludCB3YWNvbV9vcGVuKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gZGV2LT5wcml2YXRlOworCisJd2Fjb20tPmlycS0+ZGV2ID0gd2Fjb20tPnVzYmRldjsKKwlpZiAodXNiX3N1Ym1pdF91cmIod2Fjb20tPmlycSwgR0ZQX0tFUk5FTCkpCisJCXJldHVybiAtRUlPOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2Nsb3NlKHN0cnVjdCBpbnB1dF9kZXYgKmRldikKK3sKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tID0gZGV2LT5wcml2YXRlOworCisJdXNiX2tpbGxfdXJiKHdhY29tLT5pcnEpOworfQorCit2b2lkIGlucHV0X2Rldl9nNChzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXYsIHN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYykKK3sKKwlpbnB1dF9kZXYtPmV2Yml0WzBdIHw9IEJJVChFVl9NU0MpOworCWlucHV0X2Rldi0+bXNjYml0WzBdIHw9IEJJVChNU0NfU0VSSUFMKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX0ZJTkdFUik7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fMCkgfCBCSVQoQlROXzEpIHwgQklUKEJUTl8yKSB8IEJJVChCVE5fMykgfCBCSVQoQlROXzQpIHwgQklUKEJUTl81KSB8IEJJVChCVE5fNikgfCBCSVQoQlROXzcpOworfQorCit2b2lkIGlucHV0X2Rldl9nKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQoreworCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX1JFTCk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpIHwgQklUKEJUTl9TVFlMVVMyKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19ESVNUQU5DRSwgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy0+ZGlzdGFuY2VfbWF4LCAwLCAwKTsKK30KKwordm9pZCBpbnB1dF9kZXZfaTMoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCit7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9GSU5HRVIpOworCWlucHV0X2Rldi0+a2V5Yml0W0xPTkcoQlROX0xFRlQpXSB8PSBCSVQoQlROXzApIHwgQklUKEJUTl8xKSB8IEJJVChCVE5fMikgfCBCSVQoQlROXzMpIHwgQklUKEJUTl80KSB8IEJJVChCVE5fNSkgfCBCSVQoQlROXzYpIHwgQklUKEJUTl83KTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19SWCwgMCwgNDA5NywgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlksIDAsIDQwOTcsIDAsIDApOworfQorCit2b2lkIGlucHV0X2Rldl9pKHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQoreworCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX01TQykgfCBCSVQoRVZfUkVMKTsKKwlpbnB1dF9kZXYtPm1zY2JpdFswXSB8PSBCSVQoTVNDX1NFUklBTCk7CisJaW5wdXRfZGV2LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fTEVGVCldIHw9IEJJVChCVE5fTEVGVCkgfCBCSVQoQlROX1JJR0hUKSB8IEJJVChCVE5fTUlERExFKSB8IEJJVChCVE5fU0lERSkgfCBCSVQoQlROX0VYVFJBKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1JVQkJFUikgfCBCSVQoQlROX1RPT0xfTU9VU0UpCXwgQklUKEJUTl9UT09MX0JSVVNIKQorCQl8IEJJVChCVE5fVE9PTF9QRU5DSUwpIHwgQklUKEJUTl9UT09MX0FJUkJSVVNIKSB8IEJJVChCVE5fVE9PTF9MRU5TKSB8IEJJVChCVE5fU1RZTFVTMik7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfRElTVEFOQ0UsIDAsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPmRpc3RhbmNlX21heCwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfV0hFRUwsIDAsIDEwMjMsIDAsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1RJTFRfWCwgMCwgMTI3LCAwLCAwKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19USUxUX1ksIDAsIDEyNywgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfUlosIC05MDAsIDg5OSwgMCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfVEhST1RUTEUsIC0xMDIzLCAxMDIzLCAwLCAwKTsKK30KKwordm9pZCBpbnB1dF9kZXZfcGwoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCit7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fU1RZTFVTMikgfCBCSVQoQlROX1RPT0xfUlVCQkVSKTsKK30KKwordm9pZCBpbnB1dF9kZXZfcHQoc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2LCBzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMpCit7CisJaW5wdXRfZGV2LT5rZXliaXRbTE9ORyhCVE5fRElHSSldIHw9IEJJVChCVE5fVE9PTF9SVUJCRVIpOworfQorCitzdGF0aWMgaW50IHdhY29tX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzdHJ1Y3Qgd2Fjb20gKndhY29tOworCXN0cnVjdCB3YWNvbV93YWMgKndhY29tX3dhYzsKKwlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9kZXY7CisJY2hhciByZXBfZGF0YVsyXSwgbGltaXQgPSAwOworCisJd2Fjb20gPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb20pLCBHRlBfS0VSTkVMKTsKKwl3YWNvbV93YWMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgd2Fjb21fd2FjKSwgR0ZQX0tFUk5FTCk7CisJaW5wdXRfZGV2ID0gaW5wdXRfYWxsb2NhdGVfZGV2aWNlKCk7CisJaWYgKCF3YWNvbSB8fCAhaW5wdXRfZGV2IHx8ICF3YWNvbV93YWMpCisJCWdvdG8gZmFpbDE7CisKKwl3YWNvbV93YWMtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgMTAsIEdGUF9LRVJORUwsICZ3YWNvbS0+ZGF0YV9kbWEpOworCWlmICghd2Fjb21fd2FjLT5kYXRhKQorCQlnb3RvIGZhaWwxOworCisJd2Fjb20tPmlycSA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCF3YWNvbS0+aXJxKQorCQlnb3RvIGZhaWwyOworCisJd2Fjb20tPnVzYmRldiA9IGRldjsKKwl3YWNvbS0+ZGV2ID0gaW5wdXRfZGV2OworCXVzYl9tYWtlX3BhdGgoZGV2LCB3YWNvbS0+cGh5cywgc2l6ZW9mKHdhY29tLT5waHlzKSk7CisJc3RybGNhdCh3YWNvbS0+cGh5cywgIi9pbnB1dDAiLCBzaXplb2Yod2Fjb20tPnBoeXMpKTsKKworCXdhY29tX3dhYy0+ZmVhdHVyZXMgPSBnZXRfd2Fjb21fZmVhdHVyZShpZCk7CisJaWYgKHdhY29tX3dhYy0+ZmVhdHVyZXMtPnBrdGxlbiA+IDEwKQorCQlCVUcoKTsKKworCWlucHV0X2Rldi0+bmFtZSA9IHdhY29tX3dhYy0+ZmVhdHVyZXMtPm5hbWU7CisJd2Fjb20tPndhY29tX3dhYyA9IHdhY29tX3dhYzsKKwl1c2JfdG9faW5wdXRfaWQoZGV2LCAmaW5wdXRfZGV2LT5pZCk7CisKKwlpbnB1dF9kZXYtPmNkZXYuZGV2ID0gJmludGYtPmRldjsKKwlpbnB1dF9kZXYtPnByaXZhdGUgPSB3YWNvbTsKKwlpbnB1dF9kZXYtPm9wZW4gPSB3YWNvbV9vcGVuOworCWlucHV0X2Rldi0+Y2xvc2UgPSB3YWNvbV9jbG9zZTsKKworCWlucHV0X2Rldi0+ZXZiaXRbMF0gfD0gQklUKEVWX0tFWSkgfCBCSVQoRVZfQUJTKTsKKwlpbnB1dF9kZXYtPmtleWJpdFtMT05HKEJUTl9ESUdJKV0gfD0gQklUKEJUTl9UT09MX1BFTikgfCBCSVQoQlROX1RPVUNIKSB8IEJJVChCVE5fU1RZTFVTKTsKKwlpbnB1dF9zZXRfYWJzX3BhcmFtcyhpbnB1dF9kZXYsIEFCU19YLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT54X21heCwgNCwgMCk7CisJaW5wdXRfc2V0X2Fic19wYXJhbXMoaW5wdXRfZGV2LCBBQlNfWSwgMCwgd2Fjb21fd2FjLT5mZWF0dXJlcy0+eV9tYXgsIDQsIDApOworCWlucHV0X3NldF9hYnNfcGFyYW1zKGlucHV0X2RldiwgQUJTX1BSRVNTVVJFLCAwLCB3YWNvbV93YWMtPmZlYXR1cmVzLT5wcmVzc3VyZV9tYXgsIDAsIDApOworCWlucHV0X2Rldi0+YWJzYml0W0xPTkcoQUJTX01JU0MpXSB8PSBCSVQoQUJTX01JU0MpOworCisJd2Fjb21faW5pdF9pbnB1dF9kZXYoaW5wdXRfZGV2LCB3YWNvbV93YWMpOworCisJZW5kcG9pbnQgPSAmaW50Zi0+Y3VyX2FsdHNldHRpbmctPmVuZHBvaW50WzBdLmRlc2M7CisKKwl1c2JfZmlsbF9pbnRfdXJiKHdhY29tLT5pcnEsIGRldiwKKwkJCSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSB3YWNvbV93YWMtPmRhdGEsIHdhY29tX3dhYy0+ZmVhdHVyZXMtPnBrdGxlbiwKKwkJCSB3YWNvbV93YWMtPmZlYXR1cmVzLT5pcnEsIHdhY29tLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwl3YWNvbS0+aXJxLT50cmFuc2Zlcl9kbWEgPSB3YWNvbS0+ZGF0YV9kbWE7CisJd2Fjb20tPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uod2Fjb20tPmRldik7CisKKwkvKiBBc2sgdGhlIHRhYmxldCB0byByZXBvcnQgdGFibGV0IGRhdGEuIFJlcGVhdCB1bnRpbCBpdCBzdWNjZWVkcyAqLworCWRvIHsKKwkJcmVwX2RhdGFbMF0gPSAyOworCQlyZXBfZGF0YVsxXSA9IDI7CisJCXVzYl9zZXRfcmVwb3J0KGludGYsIDMsIDIsIHJlcF9kYXRhLCAyKTsKKwkJdXNiX2dldF9yZXBvcnQoaW50ZiwgMywgMiwgcmVwX2RhdGEsIDIpOworCX0gd2hpbGUgKHJlcF9kYXRhWzFdICE9IDIgJiYgbGltaXQrKyA8IDUpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCB3YWNvbSk7CisJcmV0dXJuIDA7CisKK2ZhaWwyOgl1c2JfYnVmZmVyX2ZyZWUoZGV2LCAxMCwgd2Fjb21fd2FjLT5kYXRhLCB3YWNvbS0+ZGF0YV9kbWEpOworZmFpbDE6CWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CisJa2ZyZWUod2Fjb20pOworCWtmcmVlKHdhY29tX3dhYyk7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyB2b2lkIHdhY29tX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IHdhY29tICp3YWNvbSA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOworCisJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKKwlpZiAod2Fjb20pIHsKKwkJdXNiX2tpbGxfdXJiKHdhY29tLT5pcnEpOworCQlpbnB1dF91bnJlZ2lzdGVyX2RldmljZSh3YWNvbS0+ZGV2KTsKKwkJdXNiX2ZyZWVfdXJiKHdhY29tLT5pcnEpOworCQl1c2JfYnVmZmVyX2ZyZWUoaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKSwgMTAsIHdhY29tLT53YWNvbV93YWMtPmRhdGEsIHdhY29tLT5kYXRhX2RtYSk7CisJCWtmcmVlKHdhY29tKTsKKwkJa2ZyZWUod2Fjb20tPndhY29tX3dhYyk7CisJfQorfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgd2Fjb21fZHJpdmVyID0geworCS5uYW1lID0JCSJ3YWNvbSIsCisJLnByb2JlID0Jd2Fjb21fcHJvYmUsCisJLmRpc2Nvbm5lY3QgPQl3YWNvbV9kaXNjb25uZWN0LAorfTsKKworc3RhdGljIGludCBfX2luaXQgd2Fjb21faW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisJd2Fjb21fZHJpdmVyLmlkX3RhYmxlID0gZ2V0X2RldmljZV90YWJsZSgpOworCXJlc3VsdCA9IHVzYl9yZWdpc3Rlcigmd2Fjb21fZHJpdmVyKTsKKwlpZiAocmVzdWx0ID09IDApCisJCWluZm8oRFJJVkVSX1ZFUlNJT04gIjoiIERSSVZFUl9ERVNDKTsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgd2Fjb21fZXhpdCh2b2lkKQoreworCXVzYl9kZXJlZ2lzdGVyKCZ3YWNvbV9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdCh3YWNvbV9pbml0KTsKK21vZHVsZV9leGl0KHdhY29tX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmMgYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV93YWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQ0NThjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmMKQEAgLTAsMCArMSw2NDYgQEAKKy8qCisgKiBkcml2ZXJzL3VzYi9pbnB1dC93YWNvbV93YWMuYworICoKKyAqICBVU0IgV2Fjb20gR3JhcGhpcmUgYW5kIFdhY29tIEludHVvcyB0YWJsZXQgc3VwcG9ydCAtIFdhY29tIHNwZWNpZmljIGNvZGUKKyAqCisgKi8KKworLyoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKyNpbmNsdWRlICJ3YWNvbS5oIgorI2luY2x1ZGUgIndhY29tX3dhYy5oIgorCitzdGF0aWMgaW50IHdhY29tX3BlbnBhcnRuZXJfaXJxKHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCit7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCisJc3dpdGNoIChkYXRhWzBdKSB7CisJCWNhc2UgMToKKwkJCXdhY29tX2lucHV0X3JlZ3Mod2NvbWJvKTsKKwkJCWlmIChkYXRhWzVdICYgMHg4MCkgeworCQkJCXdhY29tLT50b29sWzBdID0gKGRhdGFbNV0gJiAweDIwKSA/IEJUTl9UT09MX1JVQkJFUiA6IEJUTl9UT09MX1BFTjsKKwkJCQl3YWNvbS0+aWRbMF0gPSAoZGF0YVs1XSAmIDB4MjApID8gRVJBU0VSX0RFVklDRV9JRCA6IFNUWUxVU19ERVZJQ0VfSUQ7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAxKTsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIHdhY29tLT5pZFswXSk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19YLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVsxXSkpOworCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgd2Fjb21fbGUxNl90b19jcHUoJmRhdGFbM10pKTsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCAoc2lnbmVkIGNoYXIpZGF0YVs2XSArIDEyNyk7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgKChzaWduZWQgY2hhcilkYXRhWzZdID4gLTEyNykpOworCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTLCAoZGF0YVs1XSAmIDB4NDApKTsKKwkJCX0gZWxzZSB7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzBdLCAwKTsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIDApOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIC0xKTsKKwkJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCAwKTsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIDI6CisJCQl3YWNvbV9pbnB1dF9yZWdzKHdjb21ibyk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPT0xfUEVOLCAxKTsKKwkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgU1RZTFVTX0RFVklDRV9JRCk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzFdKSk7CisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1ksIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzNdKSk7CisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCAoc2lnbmVkIGNoYXIpZGF0YVs2XSArIDEyNyk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCAoKHNpZ25lZCBjaGFyKWRhdGFbNl0gPiAtODApICYmICEoZGF0YVs1XSAmIDB4MjApKTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTLCAoZGF0YVs1XSAmIDB4NDApKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJpbnRrKEtFUk5fSU5GTyAid2Fjb21fcGVucGFydG5lcl9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCQlyZXR1cm4gMDsKKyAgICAgICAgfQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50IHdhY29tX3BsX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlpbnQgcHJveCwgaWQsIHByZXNzdXJlOworCisJaWYgKGRhdGFbMF0gIT0gMikgeworCQlkYmcoIndhY29tX3BsX2lycTogcmVjZWl2ZWQgdW5rbm93biByZXBvcnQgIyVkIiwgZGF0YVswXSk7CisJCXJldHVybiAwOworCX0KKworCXByb3ggPSBkYXRhWzFdICYgMHg0MDsKKworCXdhY29tX2lucHV0X3JlZ3Mod2NvbWJvKTsKKworCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKKwlpZiAocHJveCkgeworCisJCXByZXNzdXJlID0gKHNpZ25lZCBjaGFyKSgoZGF0YVs3XSA8PCAxKSB8ICgoZGF0YVs0XSA+PiAyKSAmIDEpKTsKKwkJaWYgKHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4ID4gMjU1KQorCQkJcHJlc3N1cmUgPSAocHJlc3N1cmUgPDwgMSkgfCAoKGRhdGFbNF0gPj4gNikgJiAxKTsKKwkJcHJlc3N1cmUgKz0gKHdhY29tLT5mZWF0dXJlcy0+cHJlc3N1cmVfbWF4ICsgMSkgLyAyOworCisJCS8qCisJCSAqIGlmIGdvaW5nIGZyb20gb3V0IG9mIHByb3hpbWl0eSBpbnRvIHByb3hpbWl0eSBzZWxlY3QgYmV0d2VlbiB0aGUgZXJhc2VyCisJCSAqIGFuZCB0aGUgcGVuIGJhc2VkIG9uIHRoZSBzdGF0ZSBvZiB0aGUgc3R5bHVzMiBidXR0b24sIGNob29zZSBlcmFzZXIgaWYKKwkJICogcHJlc3NlZCBlbHNlIGNob29zZSBwZW4uIGlmIG5vdCBhIHByb3hpbWl0eSBjaGFuZ2UgZnJvbSBvdXQgdG8gaW4sIHNlbmQKKwkJICogYW4gb3V0IG9mIHByb3hpbWl0eSBmb3IgcHJldmlvdXMgdG9vbCB0aGVuIGEgaW4gZm9yIG5ldyB0b29sLgorCQkgKi8KKwkJaWYgKCF3YWNvbS0+dG9vbFswXSkgeworCQkJLyogRXJhc2VyIGJpdCBzZXQgZm9yIERURiAqLworCQkJaWYgKGRhdGFbMV0gJiAweDEwKQorCQkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUlVCQkVSOworCQkJZWxzZQorCQkJCS8qIEdvaW5nIGludG8gcHJveGltaXR5IHNlbGVjdCB0b29sICovCisJCQkJd2Fjb20tPnRvb2xbMV0gPSAoZGF0YVs0XSAmIDB4MjApID8gQlROX1RPT0xfUlVCQkVSIDogQlROX1RPT0xfUEVOOworCQl9IGVsc2UgeworCQkJLyogd2FzIGVudGVyZWQgd2l0aCBzdHlsdXMyIHByZXNzZWQgKi8KKwkJCWlmICh3YWNvbS0+dG9vbFsxXSA9PSBCVE5fVE9PTF9SVUJCRVIgJiYgIShkYXRhWzRdICYgMHgyMCkpIHsKKwkJCQkvKiByZXBvcnQgb3V0IHByb3hpbWl0eSBmb3IgcHJldmlvdXMgdG9vbCAqLworCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCB3YWNvbS0+dG9vbFsxXSwgMCk7CisJCQkJd2Fjb21faW5wdXRfc3luYyh3Y29tYm8pOworCQkJCXdhY29tLT50b29sWzFdID0gQlROX1RPT0xfUEVOOworCQkJCXJldHVybiAwOworCQkJfQorCQl9CisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9SVUJCRVIpIHsKKwkJCS8qIFVua25vd24gdG9vbCBzZWxlY3RlZCBkZWZhdWx0IHRvIHBlbiB0b29sICovCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX1BFTjsKKwkJCWlkID0gU1RZTFVTX0RFVklDRV9JRDsKKwkJfQorCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIHByb3gpOyAvKiByZXBvcnQgaW4gcHJveGltaXR5IGZvciB0b29sICovCisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgaWQpOyAvKiByZXBvcnQgdG9vbCBpZCAqLworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIGRhdGFbM10gfCAoZGF0YVsyXSA8PCA3KSB8ICgoZGF0YVsxXSAmIDB4MDMpIDw8IDE0KSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgZGF0YVs2XSB8IChkYXRhWzVdIDw8IDcpIHwgKChkYXRhWzRdICYgMHgwMykgPDwgMTQpKTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19QUkVTU1VSRSwgcHJlc3N1cmUpOworCisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIGRhdGFbNF0gJiAweDA4KTsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMsIGRhdGFbNF0gJiAweDEwKTsKKwkJLyogT25seSBhbGxvdyB0aGUgc3R5bHVzMiBidXR0b24gdG8gYmUgcmVwb3J0ZWQgZm9yIHRoZSBwZW4gdG9vbC4gKi8KKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMyLCAod2Fjb20tPnRvb2xbMV0gPT0gQlROX1RPT0xfUEVOKSAmJiAoZGF0YVs0XSAmIDB4MjApKTsKKwl9IGVsc2UgeworCQkvKiByZXBvcnQgcHJveGltaXR5LW91dCBvZiBhICh2YWxpZCkgdG9vbCAqLworCQlpZiAod2Fjb20tPnRvb2xbMV0gIT0gQlROX1RPT0xfUlVCQkVSKSB7CisJCQkvKiBVbmtub3duIHRvb2wgc2VsZWN0ZWQgZGVmYXVsdCB0byBwZW4gdG9vbCAqLworCQkJd2Fjb20tPnRvb2xbMV0gPSBCVE5fVE9PTF9QRU47CisJCX0KKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sWzFdLCBwcm94KTsKKwl9CisKKwl3YWNvbS0+dG9vbFswXSA9IHByb3g7IC8qIFNhdmUgcHJveGltaXR5IHN0YXRlICovCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd2Fjb21fcHR1X2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwlpbnQgaWQ7CisKKwlpZiAoZGF0YVswXSAhPSAyKSB7CisJCXByaW50ayhLRVJOX0lORk8gIndhY29tX3B0dV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZFxuIiwgZGF0YVswXSk7CisJCXJldHVybiAwOworCX0KKworCXdhY29tX2lucHV0X3JlZ3Mod2NvbWJvKTsKKwlpZiAoZGF0YVsxXSAmIDB4MDQpIHsKKwkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT09MX1JVQkJFUiwgZGF0YVsxXSAmIDB4MjApOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCBkYXRhWzFdICYgMHgwOCk7CisJCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKKwl9IGVsc2UgeworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPT0xfUEVOLCBkYXRhWzFdICYgMHgyMCk7CisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fVE9VQ0gsIGRhdGFbMV0gJiAweDAxKTsKKwkJaWQgPSBTVFlMVVNfREVWSUNFX0lEOworCX0KKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KKwl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzJdKSk7CisJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB3YWNvbV9sZTE2X3RvX2NwdSgmZGF0YVs0XSkpOworCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfUFJFU1NVUkUsIHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzZdKSk7CisJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKKwl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1NUWUxVUzIsIGRhdGFbMV0gJiAweDEwKTsKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGludCB3YWNvbV9ncmFwaGlyZV9pcnEoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJaW50IHgsIHksIGlkLCBydzsKKworCWlmIChkYXRhWzBdICE9IDIpIHsKKwkJZGJnKCJ3YWNvbV9ncmFwaGlyZV9pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZCIsIGRhdGFbMF0pOworCQlyZXR1cm4gMDsKKwl9CisKKwl3YWNvbV9pbnB1dF9yZWdzKHdjb21ibyk7CisKKwlpZCA9IFNUWUxVU19ERVZJQ0VfSUQ7CisJaWYgKGRhdGFbMV0gJiAweDEwKSB7IC8qIGluIHByb3ggKi8KKworCQlzd2l0Y2ggKChkYXRhWzFdID4+IDUpICYgMykgeworCisJCQljYXNlIDA6CS8qIFBlbiAqLworCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfUEVOOworCQkJCWJyZWFrOworCisJCQljYXNlIDE6IC8qIFJ1YmJlciAqLworCQkJCXdhY29tLT50b29sWzBdID0gQlROX1RPT0xfUlVCQkVSOworCQkJCWlkID0gRVJBU0VSX0RFVklDRV9JRDsKKwkJCQlicmVhazsKKworCQkJY2FzZSAyOiAvKiBNb3VzZSB3aXRoIHdoZWVsICovCisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9NSURETEUsIGRhdGFbMV0gJiAweDA0KTsKKwkJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IFdBQ09NX0c0KSB7CisJCQkJCXJ3ID0gZGF0YVs3XSAmIDB4MDQgPyAoZGF0YVs3XSAmIDB4MDMpLTQgOiAoZGF0YVs3XSAmIDB4MDMpOworCQkJCQl3YWNvbV9yZXBvcnRfcmVsKHdjb21ibywgUkVMX1dIRUVMLCAtcncpOworCQkJCX0gZWxzZQorCQkJCQl3YWNvbV9yZXBvcnRfcmVsKHdjb21ibywgUkVMX1dIRUVMLCAtKHNpZ25lZCBjaGFyKSBkYXRhWzZdKTsKKwkJCQkvKiBmYWxsIHRocm91Z2ggKi8KKworCQkJY2FzZSAzOiAvKiBNb3VzZSB3aXRob3V0IHdoZWVsICovCisJCQkJd2Fjb20tPnRvb2xbMF0gPSBCVE5fVE9PTF9NT1VTRTsKKwkJCQlpZCA9IENVUlNPUl9ERVZJQ0VfSUQ7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCBkYXRhWzFdICYgMHgwMSk7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9SSUdIVCwgZGF0YVsxXSAmIDB4MDIpOworCQkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gV0FDT01fRzQpCisJCQkJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfRElTVEFOQ0UsIGRhdGFbNl0pOworCQkJCWVsc2UKKwkJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ESVNUQU5DRSwgZGF0YVs3XSk7CisJCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoZGF0YVsxXSAmIDB4OTApIHsKKwkJeCA9IHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzJdKTsKKwkJeSA9IHdhY29tX2xlMTZfdG9fY3B1KCZkYXRhWzRdKTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19YLCB4KTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCB5KTsKKwkJaWYgKHdhY29tLT50b29sWzBdICE9IEJUTl9UT09MX01PVVNFKSB7CisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCBkYXRhWzZdIHwgKChkYXRhWzddICYgMHgwMSkgPDwgOCkpOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT1VDSCwgZGF0YVsxXSAmIDB4MDEpOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9TVFlMVVMsIGRhdGFbMV0gJiAweDAyKTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDB4MDQpOworCQl9CisJfQorCisJaWYgKGRhdGFbMV0gJiAweDEwKQorCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX01JU0MsIGlkKTsgLyogcmVwb3J0IHRvb2wgaWQgKi8KKwllbHNlCisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KKwl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMF0sIGRhdGFbMV0gJiAweDEwKTsKKwl3YWNvbV9pbnB1dF9zeW5jKHdjb21ibyk7CisKKwkvKiBzZW5kIHBhZCBkYXRhICovCisJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA9PSBXQUNPTV9HNCkgeworCQlpZiAoICh3YWNvbS0+c2VyaWFsWzFdICYgMHhjMCkgIT0gKGRhdGFbN10gJiAweGY4KSApIHsKKwkJCXdhY29tLT5pZFsxXSA9IDE7CisJCQl3YWNvbS0+c2VyaWFsWzFdID0gKGRhdGFbN10gJiAweGY4KTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fMCwgKGRhdGFbN10gJiAweDQwKSk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzQsIChkYXRhWzddICYgMHg4MCkpOworCQkJcncgPSAoKGRhdGFbN10gJiAweDE4KSA+PiAzKSAtICgoZGF0YVs3XSAmIDB4MjApID4+IDMpOworCQkJd2Fjb21fcmVwb3J0X3JlbCh3Y29tYm8sIFJFTF9XSEVFTCwgcncpOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT09MX0ZJTkdFUiwgMHhmMCk7CisJCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgMHhmMCk7CisJCX0gZWxzZSBpZiAod2Fjb20tPmlkWzFdKSB7CisJCQl3YWNvbS0+aWRbMV0gPSAwOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9UT09MX0ZJTkdFUiwgMCk7CisJCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgMHhmMCk7CisJCX0KKwl9CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd2Fjb21faW50dW9zX2lub3V0KHN0cnVjdCB3YWNvbV93YWMgKndhY29tLCB2b2lkICp3Y29tYm8pCit7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHdhY29tLT5kYXRhOworCWludCBpZHg7CisKKwkvKiB0b29sIG51bWJlciAqLworCWlkeCA9IGRhdGFbMV0gJiAweDAxOworCisJLyogRW50ZXIgcmVwb3J0ICovCisJaWYgKChkYXRhWzFdICYgMHhmYykgPT0gMHhjMCkgeworCQkvKiBzZXJpYWwgbnVtYmVyIG9mIHRoZSB0b29sICovCisJCXdhY29tLT5zZXJpYWxbaWR4XSA9ICgoZGF0YVszXSAmIDB4MGYpIDw8IDI4KSArCisJCQkoZGF0YVs0XSA8PCAyMCkgKyAoZGF0YVs1XSA8PCAxMikgKworCQkJKGRhdGFbNl0gPDwgNCkgKyAoZGF0YVs3XSA+PiA0KTsKKworCQl3YWNvbS0+aWRbaWR4XSA9IChkYXRhWzJdIDw8IDQpIHwgKGRhdGFbM10gPj4gNCk7CisJCXN3aXRjaCAod2Fjb20tPmlkW2lkeF0pIHsKKwkJCWNhc2UgMHg4MTI6IC8qIElua2luZyBwZW4gKi8KKwkJCWNhc2UgMHg4MDE6IC8qIEludHVvczMgSW5raW5nIHBlbiAqLworCQkJY2FzZSAweDAxMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOQ0lMOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgyMjogLyogUGVuICovCisJCQljYXNlIDB4ODQyOgorCQkJY2FzZSAweDg1MjoKKwkJCWNhc2UgMHg4MjM6IC8qIEludHVvczMgR3JpcCBQZW4gKi8KKwkJCWNhc2UgMHg4MTM6IC8qIEludHVvczMgQ2xhc3NpYyBQZW4gKi8KKwkJCWNhc2UgMHg4ODU6IC8qIEludHVvczMgTWFya2VyIFBlbiAqLworCQkJY2FzZSAweDAyMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUEVOOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgzMjogLyogU3Ryb2tlIHBlbiAqLworCQkJY2FzZSAweDAzMjoKKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfQlJVU0g7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDA3OiAvKiBNb3VzZSA0RCBhbmQgMkQgKi8KKwkJICAgICAgICBjYXNlIDB4MDljOgorCQkJY2FzZSAweDA5NDoKKwkJCWNhc2UgMHgwMTc6IC8qIEludHVvczMgMkQgTW91c2UgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfTU9VU0U7CisJCQkJYnJlYWs7CisJCQljYXNlIDB4MDk2OiAvKiBMZW5zIGN1cnNvciAqLworCQkJY2FzZSAweDA5NzogLyogSW50dW9zMyBMZW5zIGN1cnNvciAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9MRU5TOworCQkJCWJyZWFrOworCQkJY2FzZSAweDgyYTogLyogRXJhc2VyICovCisJCQljYXNlIDB4ODVhOgorCQkgICAgICAgIGNhc2UgMHg5MWE6CisJCQljYXNlIDB4ZDFhOgorCQkJY2FzZSAweDBmYToKKwkJCWNhc2UgMHg4MmI6IC8qIEludHVvczMgR3JpcCBQZW4gRXJhc2VyICovCisJCQljYXNlIDB4ODFiOiAvKiBJbnR1b3MzIENsYXNzaWMgUGVuIEVyYXNlciAqLworCQkJY2FzZSAweDkxYjogLyogSW50dW9zMyBBaXJicnVzaCBFcmFzZXIgKi8KKwkJCQl3YWNvbS0+dG9vbFtpZHhdID0gQlROX1RPT0xfUlVCQkVSOworCQkJCWJyZWFrOworCQkJY2FzZSAweGQxMjoKKwkJCWNhc2UgMHg5MTI6CisJCQljYXNlIDB4MTEyOgorCQkJY2FzZSAweDkxMzogLyogSW50dW9zMyBBaXJicnVzaCAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9BSVJCUlVTSDsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6IC8qIFVua25vd24gdG9vbCAqLworCQkJCXdhY29tLT50b29sW2lkeF0gPSBCVE5fVE9PTF9QRU47CisJCX0KKwkJLyogb25seSBsYXJnZSBJMyBzdXBwb3J0IExlbnMgQ3Vyc29yICovCisJCWlmKCEoKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTEVOUykgJiYKKwkJCQkod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IElOVFVPUzMpKSkgeworCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbaWR4XSk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbaWR4XSwgMSk7CisJCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgd2Fjb20tPnNlcmlhbFtpZHhdKTsKKwkJCXJldHVybiAyOworCQl9CisJCXJldHVybiAxOworCX0KKworCS8qIEV4aXQgcmVwb3J0ICovCisJaWYgKChkYXRhWzFdICYgMHhmZSkgPT0gMHg4MCkgeworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbaWR4XSwgMCk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfTUlTQywgMCk7IC8qIHJlc2V0IHRvb2wgaWQgKi8KKwkJd2Fjb21faW5wdXRfZXZlbnQod2NvbWJvLCBFVl9NU0MsIE1TQ19TRVJJQUwsIHdhY29tLT5zZXJpYWxbaWR4XSk7CisJCXJldHVybiAyOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgd2Fjb21faW50dW9zX2dlbmVyYWwoc3RydWN0IHdhY29tX3dhYyAqd2Fjb20sIHZvaWQgKndjb21ibykKK3sKKwl1bnNpZ25lZCBjaGFyICpkYXRhID0gd2Fjb20tPmRhdGE7CisJdW5zaWduZWQgaW50IHQ7CisKKwkvKiBnZW5lcmFsIHBlbiBwYWNrZXQgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGI4KSA9PSAweGEwKSB7CisJCXQgPSAoZGF0YVs2XSA8PCAyKSB8ICgoZGF0YVs3XSA+PiA2KSAmIDMpOworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1BSRVNTVVJFLCB0KTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19USUxUX1gsCisJCQkJKChkYXRhWzddIDw8IDEpICYgMHg3ZSkgfCAoZGF0YVs4XSA+PiA3KSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfVElMVF9ZLCBkYXRhWzhdICYgMHg3Zik7CisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTLCBkYXRhWzFdICYgMik7CisJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU1RZTFVTMiwgZGF0YVsxXSAmIDQpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1RPVUNILCB0ID4gMTApOworCX0KKworCS8qIGFpcmJydXNoIHNlY29uZCBwYWNrZXQgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGI0KSB7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfV0hFRUwsCisJCQkJKGRhdGFbNl0gPDwgMikgfCAoKGRhdGFbN10gPj4gNikgJiAzKSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfVElMVF9YLAorCQkJCSgoZGF0YVs3XSA8PCAxKSAmIDB4N2UpIHwgKGRhdGFbOF0gPj4gNykpOworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1RJTFRfWSwgZGF0YVs4XSAmIDB4N2YpOworCX0KKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgd2Fjb21faW50dW9zX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbSwgdm9pZCAqd2NvbWJvKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB3YWNvbS0+ZGF0YTsKKwl1bnNpZ25lZCBpbnQgdDsKKwlpbnQgaWR4LCByZXN1bHQ7CisKKwlpZiAoZGF0YVswXSAhPSAyICYmIGRhdGFbMF0gIT0gNSAmJiBkYXRhWzBdICE9IDYgJiYgZGF0YVswXSAhPSAxMikgeworCQlkYmcoIndhY29tX2ludHVvc19pcnE6IHJlY2VpdmVkIHVua25vd24gcmVwb3J0ICMlZCIsIGRhdGFbMF0pOworICAgICAgICAgICAgICAgIHJldHVybiAwOworCX0KKworCXdhY29tX2lucHV0X3JlZ3Mod2NvbWJvKTsKKworCS8qIHRvb2wgbnVtYmVyICovCisJaWR4ID0gZGF0YVsxXSAmIDB4MDE7CisKKwkvKiBwYWQgcGFja2V0cy4gV29ya3MgYXMgYSBzZWNvbmQgdG9vbCBhbmQgaXMgYWx3YXlzIGluIHByb3ggKi8KKwlpZiAoZGF0YVswXSA9PSAxMikgeworCQkvKiBpbml0aWF0ZSB0aGUgcGFkIGFzIGEgZGV2aWNlICovCisJCWlmICh3YWNvbS0+dG9vbFsxXSAhPSBCVE5fVE9PTF9GSU5HRVIpCisJCQl3YWNvbS0+dG9vbFsxXSA9IEJUTl9UT09MX0ZJTkdFUjsKKworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzAsIChkYXRhWzVdICYgMHgwMSkpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzEsIChkYXRhWzVdICYgMHgwMikpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzIsIChkYXRhWzVdICYgMHgwNCkpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzMsIChkYXRhWzVdICYgMHgwOCkpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzQsIChkYXRhWzZdICYgMHgwMSkpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzUsIChkYXRhWzZdICYgMHgwMikpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzYsIChkYXRhWzZdICYgMHgwNCkpOworCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROXzcsIChkYXRhWzZdICYgMHgwOCkpOworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1JYLCAoKGRhdGFbMV0gJiAweDFmKSA8PCA4KSB8IGRhdGFbMl0pOworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1JZLCAoKGRhdGFbM10gJiAweDFmKSA8PCA4KSB8IGRhdGFbNF0pOworCisJCWlmKChkYXRhWzVdICYgMHgwZikgfCAoZGF0YVs2XSAmIDB4MGYpIHwgKGRhdGFbMV0gJiAweDFmKSB8IGRhdGFbMl0pCisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIDEpOworCQllbHNlCisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgd2Fjb20tPnRvb2xbMV0sIDApOworCQl3YWNvbV9pbnB1dF9ldmVudCh3Y29tYm8sIEVWX01TQywgTVNDX1NFUklBTCwgMHhmZmZmZmZmZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisJfQorCisJLyogcHJvY2VzcyBpbi9vdXQgcHJveCBldmVudHMgKi8KKwlyZXN1bHQgPSB3YWNvbV9pbnR1b3NfaW5vdXQod2Fjb20sIHdjb21ibyk7CisJaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LTE7CisKKwkvKiBDaW50aXEgZG9lc24ndCBzZW5kIGRhdGEgd2hlbiBSRFkgYml0IGlzbid0IHNldCAqLworCWlmICgod2Fjb20tPmZlYXR1cmVzLT50eXBlID09IENJTlRJUSkgJiYgIShkYXRhWzFdICYgMHg0MCkpCisgICAgICAgICAgICAgICAgIHJldHVybiAwOworCisJaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA+PSBJTlRVT1MzKSB7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWCwgKGRhdGFbMl0gPDwgOSkgfCAoZGF0YVszXSA8PCAxKSB8ICgoZGF0YVs5XSA+PiAxKSAmIDEpKTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ZLCAoZGF0YVs0XSA8PCA5KSB8IChkYXRhWzVdIDw8IDEpIHwgKGRhdGFbOV0gJiAxKSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfRElTVEFOQ0UsICgoZGF0YVs5XSA+PiAyKSAmIDB4M2YpKTsKKwl9IGVsc2UgeworCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1gsIHdhY29tX2JlMTZfdG9fY3B1KCZkYXRhWzJdKSk7CisJCXdhY29tX3JlcG9ydF9hYnMod2NvbWJvLCBBQlNfWSwgd2Fjb21fYmUxNl90b19jcHUoJmRhdGFbNF0pKTsKKwkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19ESVNUQU5DRSwgKChkYXRhWzldID4+IDMpICYgMHgxZikpOworCX0KKworCS8qIHByb2Nlc3MgZ2VuZXJhbCBwYWNrZXRzICovCisJd2Fjb21faW50dW9zX2dlbmVyYWwod2Fjb20sIHdjb21ibyk7CisKKwkvKiA0RCBtb3VzZSwgMkQgbW91c2UsIG1hcmtlciBwZW4gcm90YXRpb24sIG9yIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KKwlpZiAoKGRhdGFbMV0gJiAweGJjKSA9PSAweGE4IHx8IChkYXRhWzFdICYgMHhiZSkgPT0gMHhiMCkgeworCisJCWlmIChkYXRhWzFdICYgMHgwMikgeworCQkJLyogUm90YXRpb24gcGFja2V0ICovCisJCQlpZiAod2Fjb20tPmZlYXR1cmVzLT50eXBlID49IElOVFVPUzMpIHsKKwkJCQkvKiBJMyBtYXJrZXIgcGVuIHJvdGF0aW9uIHJlcG9ydGVkIGFzIHdoZWVsCisJCQkJICogZHVlIHRvIHZhbHVhdG9yIGxpbWl0YXRpb24KKwkJCQkgKi8KKwkJCQl0ID0gKGRhdGFbNl0gPDwgMykgfCAoKGRhdGFbN10gPj4gNSkgJiA3KTsKKwkJCQl0ID0gKGRhdGFbN10gJiAweDIwKSA/ICgodCA+IDkwMCkgPyAoKHQtMSkgLyAyIC0gMTM1MCkgOgorCQkJCQkoKHQtMSkgLyAyICsgNDUwKSkgOiAoNDUwIC0gdCAvIDIpIDsKKwkJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1dIRUVMLCB0KTsKKwkJCX0gZWxzZSB7CisJCQkJLyogNEQgbW91c2Ugcm90YXRpb24gcGFja2V0ICovCisJCQkJdCA9IChkYXRhWzZdIDw8IDMpIHwgKChkYXRhWzddID4+IDUpICYgNyk7CisJCQkJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19SWiwgKGRhdGFbN10gJiAweDIwKSA/CisJCQkJCSgodCAtIDEpIC8gMikgOiAtdCAvIDIpOworCQkJfQorCisJCX0gZWxzZSBpZiAoIShkYXRhWzFdICYgMHgxMCkgJiYgd2Fjb20tPmZlYXR1cmVzLT50eXBlIDwgSU5UVU9TMykgeworCQkJLyogNEQgbW91c2UgcGFja2V0ICovCisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0xFRlQsICAgZGF0YVs4XSAmIDB4MDEpOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9NSURETEUsIGRhdGFbOF0gJiAweDAyKTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fUklHSFQsICBkYXRhWzhdICYgMHgwNCk7CisKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgyMCk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MTApOworCQkJdCA9IChkYXRhWzZdIDw8IDIpIHwgKChkYXRhWzddID4+IDYpICYgMyk7CisJCQl3YWNvbV9yZXBvcnRfYWJzKHdjb21ibywgQUJTX1RIUk9UVExFLCAoZGF0YVs4XSAmIDB4MDgpID8gLXQgOiB0KTsKKworCQl9IGVsc2UgaWYgKHdhY29tLT50b29sW2lkeF0gPT0gQlROX1RPT0xfTU9VU0UpIHsKKwkJCS8qIDJEIG1vdXNlIHBhY2tldCAqLworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9MRUZULCAgIGRhdGFbOF0gJiAweDA0KTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTUlERExFLCBkYXRhWzhdICYgMHgwOCk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX1JJR0hULCAgZGF0YVs4XSAmIDB4MTApOworCQkJd2Fjb21fcmVwb3J0X3JlbCh3Y29tYm8sIFJFTF9XSEVFTCwgKGRhdGFbOF0gJiAweDAxKQorCQkJCQkJIC0gKChkYXRhWzhdICYgMHgwMikgPj4gMSkpOworCisJCQkvKiBJMyAyRCBtb3VzZSBzaWRlIGJ1dHRvbnMgKi8KKwkJCWlmICh3YWNvbS0+ZmVhdHVyZXMtPnR5cGUgPT0gSU5UVU9TMykgeworCQkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHg0MCk7CisJCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9FWFRSQSwgIGRhdGFbOF0gJiAweDIwKTsKKwkJCX0KKworCQl9IGVsc2UgaWYgKHdhY29tLT5mZWF0dXJlcy0+dHlwZSA8IElOVFVPUzMpIHsKKwkJCS8qIExlbnMgY3Vyc29yIHBhY2tldHMgKi8KKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fTEVGVCwgICBkYXRhWzhdICYgMHgwMSk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX01JRERMRSwgZGF0YVs4XSAmIDB4MDIpOworCQkJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIEJUTl9SSUdIVCwgIGRhdGFbOF0gJiAweDA0KTsKKwkJCXdhY29tX3JlcG9ydF9rZXkod2NvbWJvLCBCVE5fU0lERSwgICBkYXRhWzhdICYgMHgxMCk7CisJCQl3YWNvbV9yZXBvcnRfa2V5KHdjb21ibywgQlROX0VYVFJBLCAgZGF0YVs4XSAmIDB4MDgpOworCQl9CisJfQorCisJd2Fjb21fcmVwb3J0X2Ficyh3Y29tYm8sIEFCU19NSVNDLCB3YWNvbS0+aWRbaWR4XSk7IC8qIHJlcG9ydCB0b29sIGlkICovCisJd2Fjb21fcmVwb3J0X2tleSh3Y29tYm8sIHdhY29tLT50b29sW2lkeF0sIDEpOworCXdhY29tX2lucHV0X2V2ZW50KHdjb21ibywgRVZfTVNDLCBNU0NfU0VSSUFMLCB3YWNvbS0+c2VyaWFsW2lkeF0pOworCXJldHVybiAxOworfQorCitpbnQgd2Fjb21fd2FjX2lycShzdHJ1Y3Qgd2Fjb21fd2FjICp3YWNvbV93YWMsIHZvaWQgKndjb21ibykKK3sKKwlzd2l0Y2ggKHdhY29tX3dhYy0+ZmVhdHVyZXMtPnR5cGUpIHsKKwkJY2FzZSBQRU5QQVJUTkVSOgorCQkJcmV0dXJuICh3YWNvbV9wZW5wYXJ0bmVyX2lycSh3YWNvbV93YWMsIHdjb21ibykpOworCQkJYnJlYWs7CisJCWNhc2UgUEw6CisJCQlyZXR1cm4gKHdhY29tX3BsX2lycSh3YWNvbV93YWMsIHdjb21ibykpOworCQkJYnJlYWs7CisJCWNhc2UgV0FDT01fRzQ6CisJCWNhc2UgR1JBUEhJUkU6CisJCQlyZXR1cm4gKHdhY29tX2dyYXBoaXJlX2lycSh3YWNvbV93YWMsIHdjb21ibykpOworCQkJYnJlYWs7CisJCWNhc2UgUFRVOgorCQkJcmV0dXJuICh3YWNvbV9wdHVfaXJxKHdhY29tX3dhYywgd2NvbWJvKSk7CisJCQlicmVhazsKKwkJY2FzZSBJTlRVT1M6CisJCWNhc2UgSU5UVU9TMzoKKwkJY2FzZSBJTlRVT1MzTDoKKwkJY2FzZSBDSU5USVE6CisJCQlyZXR1cm4gKHdhY29tX2ludHVvc19pcnEod2Fjb21fd2FjLCB3Y29tYm8pKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIDA7CisJfQorCXJldHVybiAwOworfQorCit2b2lkIHdhY29tX2luaXRfaW5wdXRfZGV2KHN0cnVjdCBpbnB1dF9kZXYgKmlucHV0X2Rldiwgc3RydWN0IHdhY29tX3dhYyAqd2Fjb21fd2FjKQoreworCXN3aXRjaCAod2Fjb21fd2FjLT5mZWF0dXJlcy0+dHlwZSkgeworCQljYXNlIFdBQ09NX0c0OgorCQkJaW5wdXRfZGV2X2c0KGlucHV0X2Rldiwgd2Fjb21fd2FjKTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIEdSQVBISVJFOgorCQkJaW5wdXRfZGV2X2coaW5wdXRfZGV2LCB3YWNvbV93YWMpOworCQkJYnJlYWs7CisJCWNhc2UgSU5UVU9TMzoKKwkJY2FzZSBJTlRVT1MzTDoKKwkJY2FzZSBDSU5USVE6CisJCQlpbnB1dF9kZXZfaTMoaW5wdXRfZGV2LCB3YWNvbV93YWMpOworCQkJLyogZmFsbCB0aHJvdWdoICovCisJCWNhc2UgSU5UVU9TOgorCQkJaW5wdXRfZGV2X2koaW5wdXRfZGV2LCB3YWNvbV93YWMpOworCQkJYnJlYWs7CisJCWNhc2UgUEw6CisJCWNhc2UgUFRVOgorCQkJaW5wdXRfZGV2X3BsKGlucHV0X2Rldiwgd2Fjb21fd2FjKTsKKwkJCWJyZWFrOworCQljYXNlIFBFTlBBUlRORVI6CisJCQlpbnB1dF9kZXZfcHQoaW5wdXRfZGV2LCB3YWNvbV93YWMpOworCQkJYnJlYWs7CisJfQorCXJldHVybjsKK30KKworc3RhdGljIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyB3YWNvbV9mZWF0dXJlc1tdID0geworCXsgIldhY29tIFBlbnBhcnRuZXIiLCAgICA3LCAgIDUwNDAsICAzNzgwLCAgMjU1LCAzMiwgUEVOUEFSVE5FUiwJd2Fjb21fc3lzX2lycSB9LAorICAgICAgICB7ICJXYWNvbSBHcmFwaGlyZSIsICAgICAgOCwgIDEwMjA2LCAgNzQyMiwgIDUxMSwgMzIsIEdSQVBISVJFLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUyIDR4NSIsIDgsICAxMDIwNiwgIDc0MjIsICA1MTEsIDMyLCBHUkFQSElSRSwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEdyYXBoaXJlMiA1eDciLCA4LCAgMTM5MTgsIDEwMjA2LCAgNTExLCAzMiwgR1JBUEhJUkUsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTMiLCAgICAgOCwgIDEwMjA4LCAgNzQyNCwgIDUxMSwgMzIsIEdSQVBISVJFLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gR3JhcGhpcmUzIDZ4OCIsIDgsICAxNjcwNCwgMTIwNjQsICA1MTEsIDMyLCBHUkFQSElSRSwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEdyYXBoaXJlNCA0eDUiLCA4LCAgMTAyMDgsICA3NDI0LCAgNTExLCAzMiwgV0FDT01fRzQsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBHcmFwaGlyZTQgNng4IiwgOCwgIDE2NzA0LCAxMjA2NCwgIDUxMSwgMzIsIFdBQ09NX0c0LAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gVm9saXRvIiwgICAgICAgIDgsICAgNTEwNCwgIDM3MTIsICA1MTEsIDMyLCBHUkFQSElSRSwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIFBlblN0YXRpb24yIiwgICA4LCAgIDMyNTAsICAyMzIwLCAgMjU1LCAzMiwgR1JBUEhJUkUsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBWb2xpdG8yIDR4NSIsICAgOCwgICA1MTA0LCAgMzcxMiwgIDUxMSwgMzIsIEdSQVBISVJFLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gVm9saXRvMiAyeDMiLCAgIDgsICAgMzI0OCwgIDIzMjAsICA1MTEsIDMyLCBHUkFQSElSRSwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIFBlblBhcnRuZXIyIiwgICA4LCAgIDMyNTAsICAyMzIwLCAgMjU1LCAzMiwgR1JBUEhJUkUsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MgNHg1IiwgICAxMCwgIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywJd2Fjb21fc3lzX2lycX0sCisJeyAiV2Fjb20gSW50dW9zIDZ4OCIsICAgMTAsICAyMDMyMCwgMTYyNDAsIDEwMjMsIDE1LCBJTlRVT1MsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MgOXgxMiIsICAxMCwgIDMwNDgwLCAyNDA2MCwgMTAyMywgMTUsIElOVFVPUywJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEludHVvcyAxMngxMiIsIDEwLCAgMzA0ODAsIDMxNjgwLCAxMDIzLCAxNSwgSU5UVU9TLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zIDEyeDE4IiwgMTAsICA0NTcyMCwgMzE2ODAsIDEwMjMsIDE1LCBJTlRVT1MsCXdhY29tX3N5c19pcnF9LAorCXsgIldhY29tIFBMNDAwIiwgICAgICAgICA4LCAgIDU0MDgsICA0MDU2LCAgMjU1LCAzMiwgUEwsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBQTDUwMCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDI1NSwgMzIsIFBMLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gUEw2MDAiLCAgICAgICAgIDgsICAgNjEyNiwgIDQ2MDQsICAyNTUsIDMyLCBQTCwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIFBMNjAwU1giLCAgICAgICA4LCAgIDYyNjAsICA1MDE2LCAgMjU1LCAzMiwgUEwsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBQTDU1MCIsICAgICAgICAgOCwgICA2MTQ0LCAgNDYwOCwgIDUxMSwgMzIsIFBMLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gUEw4MDAiLCAgICAgICAgIDgsICAgNzIyMCwgIDU3ODAsICA1MTEsIDMyLCBQTCwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIFBMNzAwIiwgICAgICAgICA4LCAgIDY3NTgsICA1NDA2LCAgNTExLCAzMiwgUEwsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBQTDUxMCIsICAgICAgICAgOCwgICA2MjgyLCAgNDc2MiwgIDUxMSwgMzIsIFBMLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gRFRVNzEwIiwgICAgICAgIDgsICAzNDA4MCwgMjc2NjAsICA1MTEsIDMyLCBQTCwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIERURjUyMSIsICAgICAgICA4LCAgIDYyODIsICA0NzYyLCAgNTExLCAzMiwgUEwsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBEVEY3MjAiLCAgICAgICAgOCwgICA2ODU4LCAgNTUwNiwgIDUxMSwgMzIsIFBMLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gQ2ludGlxIFBhcnRuZXIiLDgsICAyMDQ4MCwgMTUzNjAsICA1MTEsIDMyLCBQVFUsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MyIDR4NSIsICAgMTAsIDEyNzAwLCAxMDYwMCwgMTAyMywgMTUsIElOVFVPUywJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgSU5UVU9TLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMiA5eDEyIiwgIDEwLCAzMDQ4MCwgMjQwNjAsIDEwMjMsIDE1LCBJTlRVT1MsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MyIDEyeDEyIiwgMTAsIDMwNDgwLCAzMTY4MCwgMTAyMywgMTUsIElOVFVPUywJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEludHVvczIgMTJ4MTgiLCAxMCwgNDU3MjAsIDMxNjgwLCAxMDIzLCAxNSwgSU5UVU9TLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA0eDUiLCAgIDEwLCAyNTQwMCwgMjAzMjAsIDEwMjMsIDE1LCBJTlRVT1MzLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA2eDgiLCAgIDEwLCA0MDY0MCwgMzA0ODAsIDEwMjMsIDE1LCBJTlRVT1MzLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyA5eDEyIiwgIDEwLCA2MDk2MCwgNDU3MjAsIDEwMjMsIDE1LCBJTlRVT1MzLAl3YWNvbV9zeXNfaXJxIH0sCisJeyAiV2Fjb20gSW50dW9zMyAxMngxMiIsIDEwLCA2MDk2MCwgNjA5NjAsIDEwMjMsIDE1LCBJTlRVT1MzTCwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEludHVvczMgMTJ4MTkiLCAxMCwgOTc1MzYsIDYwOTYwLCAxMDIzLCAxNSwgSU5UVU9TM0wsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBJbnR1b3MzIDZ4MTEiLCAgMTAsIDU0MjA0LCAzMTc1MCwgMTAyMywgMTUsIElOVFVPUzMsCXdhY29tX3N5c19pcnEgfSwKKwl7ICJXYWNvbSBDaW50aXEgMjFVWCIsICAgMTAsIDg3MjAwLCA2NTYwMCwgMTAyMywgMTUsIENJTlRJUSwJd2Fjb21fc3lzX2lycSB9LAorCXsgIldhY29tIEludHVvczIgNng4IiwgICAxMCwgMjAzMjAsIDE2MjQwLCAxMDIzLCAxNSwgSU5UVU9TLAl3YWNvbV9zeXNfaXJxIH0sCisJeyB9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgd2Fjb21faWRzW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MTYpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NjQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MjQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzcpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzgpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MzkpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QzQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4MDMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjApIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjEpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjIpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjQpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4QjUpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4M0YpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfV0FDT00sIDB4NDcpIH0sCisJeyB9Cit9OworCitjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqIGdldF9kZXZpY2VfdGFibGUodm9pZCkgeworICAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqIGlkX3RhYmxlID0gd2Fjb21faWRzOworICAgICAgICByZXR1cm4gaWRfdGFibGU7Cit9CisKK3N0cnVjdCB3YWNvbV9mZWF0dXJlcyAqIGdldF93YWNvbV9mZWF0dXJlKGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICogaWQpIHsKKyAgICAgICAgaW50IGluZGV4ID0gaWQgLSB3YWNvbV9pZHM7CisgICAgICAgIHN0cnVjdCB3YWNvbV9mZWF0dXJlcyAqd2YgPSAmd2Fjb21fZmVhdHVyZXNbaW5kZXhdOworICAgICAgICByZXR1cm4gd2Y7Cit9CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCB3YWNvbV9pZHMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmggYi9kcml2ZXJzL3VzYi9pbnB1dC93YWNvbV93YWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFlN2JmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvaW5wdXQvd2Fjb21fd2FjLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIGRyaXZlcnMvdXNiL2lucHV0L3dhY29tX3dhYy5oCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworI2lmbmRlZiBXQUNPTV9XQUNfSAorI2RlZmluZSBXQUNPTV9XQUNfSAorCisjZGVmaW5lIFNUWUxVU19ERVZJQ0VfSUQJMHgwMgorI2RlZmluZSBDVVJTT1JfREVWSUNFX0lECTB4MDYKKyNkZWZpbmUgRVJBU0VSX0RFVklDRV9JRAkweDBBCisKK2VudW0geworCVBFTlBBUlRORVIgPSAwLAorCUdSQVBISVJFLAorCVdBQ09NX0c0LAorCVBUVSwKKwlQTCwKKwlJTlRVT1MsCisJSU5UVU9TMywKKwlJTlRVT1MzTCwKKwlDSU5USVEsCisJTUFYX1RZUEUKK307CisKK3N0cnVjdCB3YWNvbV9mZWF0dXJlcyB7CisJY2hhciAqbmFtZTsKKwlpbnQgcGt0bGVuOworCWludCB4X21heDsKKwlpbnQgeV9tYXg7CisJaW50IHByZXNzdXJlX21heDsKKwlpbnQgZGlzdGFuY2VfbWF4OworCWludCB0eXBlOworCXVzYl9jb21wbGV0ZV90IGlycTsKK307CisKK3N0cnVjdCB3YWNvbV93YWMgeworCXNpZ25lZCBjaGFyICpkYXRhOworICAgICAgICBpbnQgdG9vbFsyXTsKKyAgICAgICAgaW50IGlkWzJdOworICAgICAgICBfX3UzMiBzZXJpYWxbMl07CisJc3RydWN0IHdhY29tX2ZlYXR1cmVzICpmZWF0dXJlczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jIGIvZHJpdmVycy91c2IvaW5wdXQveWVhbGluay5jCmluZGV4IDdiNDVmZDMuLjcyOTFlN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL2lucHV0L3llYWxpbmsuYworKysgYi9kcml2ZXJzL3VzYi9pbnB1dC95ZWFsaW5rLmMKQEAgLTk3MSw3ICs5NzEsNyBAQAogCQkJRFJJVkVSX1ZFUlNJT04sIHNpemVvZihEUklWRVJfVkVSU0lPTikpOwogCiAJLyogUmVnaXN0ZXIgc3lzZnMgaG9va3MgKGRvbid0IGNhcmUgYWJvdXQgZmFpbHVyZSkgKi8KLQlzeXNmc19jcmVhdGVfZ3JvdXAoJmludGYtPmRldi5rb2JqLCAmeWxkX2F0dHJfZ3JvdXApOworCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cCgmaW50Zi0+ZGV2LmtvYmosICZ5bGRfYXR0cl9ncm91cCk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZyBiL2RyaXZlcnMvdXNiL21pc2MvS2NvbmZpZwppbmRleCA4ODkyOGE0Li5jMjk2NThmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL0tjb25maWcKKysrIGIvZHJpdmVycy91c2IvbWlzYy9LY29uZmlnCkBAIC0zMiw2ICszMiwxNiBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZW1pMjYuCiAKK2NvbmZpZyBVU0JfQURVVFVYCisJdHJpc3RhdGUgIkFEVSBkZXZpY2VzIGZyb20gT250cmFrIENvbnRyb2wgU3lzdGVtcyAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKKwloZWxwCisJICBTYXkgWSBpZiB5b3Ugd2FudCB0byB1c2UgYW4gQURVIGRldmljZSBmcm9tIE9udHJhayBDb250cm9sCisJICBTeXN0ZW1zLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiAgVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgYWR1dHV4LgorCiBjb25maWcgVVNCX0FVRVJTV0FMRAogCXRyaXN0YXRlICJVU0IgQXVlcnN3YWxkIElTRE4gc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKIAlkZXBlbmRzIG9uIFVTQiAmJiBFWFBFUklNRU5UQUwKQEAgLTExNSwxOSArMTI1LDM2IEBACiAJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBjeXRoZXJtLgogCi1jb25maWcgVVNCX1BISURHRVRLSVQKLQl0cmlzdGF0ZSAiVVNCIFBoaWRnZXRLaXQgc3VwcG9ydCIKK2NvbmZpZyBVU0JfUEhJREdFVAorCXRyaXN0YXRlICJVU0IgUGhpZGdldHMgZHJpdmVycyIKIAlkZXBlbmRzIG9uIFVTQgogCWhlbHAKLQkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRLaXQgVVNCIGRldmljZSBmcm9tCi0JICBQaGlkZ2V0cyBJbmMuCisJICBTYXkgWSBoZXJlIHRvIGVuYWJsZSB0aGUgdmFyaW91cyBkcml2ZXJzIGZvciBkZXZpY2VzIGZyb20KKwkgIFBoaWRnZXRzIGluYy4KKworY29uZmlnIFVTQl9QSElER0VUS0lUCisJdHJpc3RhdGUgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBVU0JfUEhJREdFVAorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gY29ubmVjdCBhIFBoaWRnZXRJbnRlcmZhY2VLaXQgVVNCIGRldmljZQorCSAgZnJvbSBQaGlkZ2V0cyBJbmMuCiAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHBoaWRnZXRraXQuCiAKK2NvbmZpZyBVU0JfUEhJREdFVE1PVE9SQ09OVFJPTAorCXRyaXN0YXRlICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBzdXBwb3J0IgorCWRlcGVuZHMgb24gVVNCX1BISURHRVQKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgYSBQaGlkZ2V0TW90b3JDb250cm9sIFVTQiBkZXZpY2UKKwkgIGZyb20gUGhpZGdldHMgSW5jLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBwaGlkZ2V0bW90b3Jjb250cm9sLgorCiBjb25maWcgVVNCX1BISURHRVRTRVJWTwogCXRyaXN0YXRlICJVU0IgUGhpZGdldFNlcnZvIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IKKwlkZXBlbmRzIG9uIFVTQl9QSElER0VUCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBjb25uZWN0IGFuIDEgb3IgNCBNb3RvciBQaGlkZ2V0U2Vydm8gCiAJICBzZXJ2byBjb250cm9sbGVyIHZlcnNpb24gMi4wIG9yIDMuMC4KQEAgLTE1MSw2ICsxNzgsMzAgQEAKIAogCSAgU2VlIGFsc28gPGh0dHA6Ly93d3cuZnMudHVtLmRlL35lY2h0bGVyL2lkbW91c2UvPi4KIAorY29uZmlnIFVTQl9GVERJX0VMQU4KKwl0cmlzdGF0ZSAiRWxhbiBQQ01DSUEgQ2FyZEJ1cyBBZGFwdGVyIFVTQiBDbGllbnQiCisJZGVwZW5kcyBvbiBVU0IKKwlkZWZhdWx0IE0KKwloZWxwCisJICBFTEFOJ3MgVXh4eCBzZXJpZXMgb2YgYWRhcHRlcnMgYXJlIFVTQiB0byBQQ01DSUEgQ2FyZEJ1cyBhZGFwdGVycy4KKwkgIEN1cnJlbnRseSBvbmx5IHRoZSBVMTMyIGFkYXB0ZXIgaXMgYXZhaWxhYmxlLgorCisJICBUaGUgVTEzMiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIENhcmRCdXMgUEMgY2FyZHMgdGhhdCBjb250YWluCisJICBhbiBPSENJIGhvc3QgY29udHJvbGxlci4gVHlwaWNhbCBQQyBjYXJkcyBhcmUgdGhlIE9yYW5nZSBNb2JpbGUgM0cKKwkgIE9wdGlvbiBHbG9iZVRyb3R0ZXIgRnVzaW9uIGNhcmQuIFRoZSBVMTMyIGFkYXB0ZXIgd2lsbCAqTk9UKiB3b3JrCisJICB3aXRoIFBDIGNhcmRzIHRoYXQgZG8gbm90IGNvbnRhaW4gYW4gT0hDSSBjb250cm9sbGVyLiBUbyB1c2UgYSBVMTMyCisJICBhZGFwdGVyIHlvdSB3aWxsIG5lZWQgdGhpcyAiZnRkaS1lbGFuIiBtb2R1bGUgYXMgd2VsbCBhcyB0aGUgInUxMzItaGNkIgorCSAgbW9kdWxlIHdoaWNoIGlzIGEgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIgdGhhdCB0YWxrcyB0byB0aGUgT0hDSQorCSAgY29udHJvbGxlciB3aXRoaW4gQ2FyZEJ1cyBjYXJkIHRoYXQgYXJlIGluc2VydGVkIGluIHRoZSBVMTMyIGFkYXB0ZXIuCisKKwkgIFRoaXMgZHJpdmVyIGhhcyBiZWVuIHRlc3RlZCB3aXRoIGEgQ2FyZEJ1cyBPSENJIFVTQiBhZGFwdGVyLCBhbmQKKwkgIHdvcmtlZCB3aXRoIGEgVVNCIFBFTiBEcml2ZSBpbnNlcnRlZCBpbnRvIHRoZSBmaXJzdCBVU0IgcG9ydCBvZgorCSAgdGhlIFBDQ0FSRC4gQSByYXRoZXIgcG9pbnRsZXNzIHRoaW5nIHRvIGRvLCBidXQgdXNlZnVsIGZvciB0ZXN0aW5nLgorCisJICBTZWUgYWxzbyB0aGUgVVNCX1UxMzJfSENEIGVudHJ5ICJFbGFuIFUxMzIgQWRhcHRlciBIb3N0IENvbnRyb2xsZXIiCisKKwkgIEl0IGlzIHNhZmUgdG8gc2F5IE0gaGVyZS4KKwogY29uZmlnIFVTQl9BUFBMRURJU1BMQVkKIAl0cmlzdGF0ZSAiQXBwbGUgQ2luZW1hIERpc3BsYXkgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFVTQgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZSBiL2RyaXZlcnMvdXNiL21pc2MvTWFrZWZpbGUKaW5kZXggMjkyNzI2MC4uMmJlNzBmYSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL3VzYi9taXNjL01ha2VmaWxlCkBAIC0zLDIyICszLDI1IEBACiAjICh0aGUgb25lcyB0aGF0IGRvbid0IGZpdCBpbnRvIGFueSBvdGhlciBjYXRlZ29yaWVzKQogIwogCitvYmotJChDT05GSUdfVVNCX0FEVVRVWCkJKz0gYWR1dHV4Lm8KIG9iai0kKENPTkZJR19VU0JfQVVFUlNXQUxEKQkrPSBhdWVyc3dhbGQubwogb2JqLSQoQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MykrPSBjeXByZXNzX2N5N2M2My5vCiBvYmotJChDT05GSUdfVVNCX0NZVEhFUk0pCSs9IGN5dGhlcm0ubwogb2JqLSQoQ09ORklHX1VTQl9FTUkyNikJCSs9IGVtaTI2Lm8KIG9iai0kKENPTkZJR19VU0JfRU1JNjIpCQkrPSBlbWk2Mi5vCitvYmotJChDT05GSUdfVVNCX0ZURElfRUxBTikJKz0gZnRkaS1lbGFuLm8KIG9iai0kKENPTkZJR19VU0JfSURNT1VTRSkJKz0gaWRtb3VzZS5vCiBvYmotJChDT05GSUdfVVNCX0xDRCkJCSs9IHVzYmxjZC5vCiBvYmotJChDT05GSUdfVVNCX0xEKQkJKz0gbGR1c2Iubwogb2JqLSQoQ09ORklHX1VTQl9MRUQpCQkrPSB1c2JsZWQubwogb2JqLSQoQ09ORklHX1VTQl9MRUdPVE9XRVIpCSs9IGxlZ291c2J0b3dlci5vCitvYmotJChDT05GSUdfVVNCX1BISURHRVQpCSs9IHBoaWRnZXQubwogb2JqLSQoQ09ORklHX1VTQl9QSElER0VUS0lUKQkrPSBwaGlkZ2V0a2l0Lm8KK29iai0kKENPTkZJR19VU0JfUEhJREdFVE1PVE9SQ09OVFJPTCkJKz0gcGhpZGdldG1vdG9yY29udHJvbC5vCiBvYmotJChDT05GSUdfVVNCX1BISURHRVRTRVJWTykJKz0gcGhpZGdldHNlcnZvLm8KIG9iai0kKENPTkZJR19VU0JfUklPNTAwKQkrPSByaW81MDAubwogb2JqLSQoQ09ORklHX1VTQl9URVNUKQkJKz0gdXNidGVzdC5vCiBvYmotJChDT05GSUdfVVNCX1VTUzcyMCkJKz0gdXNzNzIwLm8KLW9iai0kKENPTkZJR19VU0JfQVBQTEVESVNQTEFZKQkrPSBhcHBsZWRpc3BsYXkubwogCiBvYmotJChDT05GSUdfVVNCX1NJU1VTQlZHQSkJKz0gc2lzdXNidmdhLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2FkdXR1eC5jIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzk2MzE5Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2IvbWlzYy9hZHV0dXguYwpAQCAtMCwwICsxLDkwMCBAQAorLyoKKyAqIGFkdXR1eCAtIGRyaXZlciBmb3IgQURVIGRldmljZXMgZnJvbSBPbnRyYWsgQ29udHJvbCBTeXN0ZW1zCisgKiBUaGlzIGlzIGFuIGV4cGVyaW1lbnRhbCBkcml2ZXIuIFVzZSBhdCB5b3VyIG93biByaXNrLgorICogVGhpcyBkcml2ZXIgaXMgbm90IHN1cHBvcnRlZCBieSBPbnRyYWsgQ29udHJvbCBTeXN0ZW1zLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBKb2huIEhvbXBwaSAoU0NPLCBsZWF2ZSB0aGlzIG5vdGljZSBoZXJlKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogZGVyaXZlZCBmcm9tIHRoZSBMZWdvIFVTQiBUb3dlciBkcml2ZXIgMC41NjoKKyAqIENvcHlyaWdodCAoYykgMjAwMyBEYXZpZCBHbGFuY2UgPGRhdmlkZ3NmQHNvdXJjZWZvcmdlLm5ldD4KKyAqICAgICAgICAgICAgICAgMjAwMSBKdWVyZ2VuIFN0dWJlciA8c3R1YmVyQGxvcmlhLmZyPgorICogdGhhdCB3YXMgZGVyaXZlZCBmcm9tIFVTQiBTa2VsZXRvbiBkcml2ZXIgLSAwLjUKKyAqIENvcHlyaWdodCAoYykgMjAwMSBHcmVnIEtyb2FoLUhhcnRtYW4gKGdyZWdAa3JvYWguY29tKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKyNpZmRlZiBDT05GSUdfVVNCX0RFQlVHCitzdGF0aWMgaW50IGRlYnVnID0gNTsKKyNlbHNlCitzdGF0aWMgaW50IGRlYnVnID0gMTsKKyNlbmRpZgorCisvKiBVc2Ugb3VyIG93biBkYmcgbWFjcm8gKi8KKyN1bmRlZiBkYmcKKyNkZWZpbmUgZGJnKGx2bCwgZm9ybWF0LCBhcmcuLi4pIAkJCQkJXAorZG8geyAJCQkJCQkJCQlcCisJaWYgKGRlYnVnID49IGx2bCkJCQkJCQlcCisJCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fICIgOiAiIGZvcm1hdCAiIFxuIiwgIyMgYXJnKTsJXAorfSB3aGlsZSAoMCkKKworCisvKiBWZXJzaW9uIEluZm9ybWF0aW9uICovCisjZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC4wLjEzIgorI2RlZmluZSBEUklWRVJfQVVUSE9SICJKb2huIEhvbXBwaSIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgImFkdXR1eCAoc2VlIHd3dy5vbnRyYWsubmV0KSIKKworLyogTW9kdWxlIHBhcmFtZXRlcnMgKi8KK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZSAqLworI2RlZmluZSBBRFVfVkVORE9SX0lEIDB4MGEwNworI2RlZmluZSBBRFVfUFJPRFVDVF9JRCAweDAwNjQKKworLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQpIH0sCQkvKiBBRFUxMDAgKi8KKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMjApIH0sIAkvKiBBRFUxMjAgKi8KKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMzApIH0sIAkvKiBBRFUxMzAgKi8KKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMTAwKSB9LAkvKiBBRFUyMDAgKi8KKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMTA4KSB9LAkvKiBBRFUyMDggKi8KKwl7IFVTQl9ERVZJQ0UoQURVX1ZFTkRPUl9JRCwgQURVX1BST0RVQ1RfSUQrMTE4KSB9LAkvKiBBRFUyMTggKi8KKwl7IH0vKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGRldmljZV90YWJsZSk7CisKKyNpZmRlZiBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTCisjZGVmaW5lIEFEVV9NSU5PUl9CQVNFCTAKKyNlbHNlCisjZGVmaW5lIEFEVV9NSU5PUl9CQVNFCTY3CisjZW5kaWYKKworLyogd2UgY2FuIGhhdmUgdXAgdG8gdGhpcyBudW1iZXIgb2YgZGV2aWNlIHBsdWdnZWQgaW4gYXQgb25jZSAqLworI2RlZmluZSBNQVhfREVWSUNFUwkxNgorCisjZGVmaW5lIENPTU1BTkRfVElNRU9VVAkoMipIWikJLyogNjAgc2Vjb25kIHRpbWVvdXQgZm9yIGEgY29tbWFuZCAqLworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IGFkdV9kZXZpY2UgeworCXN0cnVjdCBzZW1hcGhvcmUJc2VtOyAvKiBsb2NrcyB0aGlzIHN0cnVjdHVyZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlKgl1ZGV2OyAvKiBzYXZlIG9mZiB0aGUgdXNiIGRldmljZSBwb2ludGVyICovCisJc3RydWN0IHVzYl9pbnRlcmZhY2UqCWludGVyZmFjZTsKKwl1bnNpZ25lZCBjaGFyCQltaW5vcjsgLyogdGhlIHN0YXJ0aW5nIG1pbm9yIG51bWJlciBmb3IgdGhpcyBkZXZpY2UgKi8KKwljaGFyCQkJc2VyaWFsX251bWJlcls4XTsKKworCWludAkJCW9wZW5fY291bnQ7IC8qIG51bWJlciBvZiB0aW1lcyB0aGlzIHBvcnQgaGFzIGJlZW4gb3BlbmVkICovCisKKwljaGFyKgkJCXJlYWRfYnVmZmVyX3ByaW1hcnk7CisJaW50CQkJcmVhZF9idWZmZXJfbGVuZ3RoOworCWNoYXIqCQkJcmVhZF9idWZmZXJfc2Vjb25kYXJ5OworCWludAkJCXNlY29uZGFyeV9oZWFkOworCWludAkJCXNlY29uZGFyeV90YWlsOworCXNwaW5sb2NrX3QJCWJ1ZmxvY2s7CisKKwl3YWl0X3F1ZXVlX2hlYWRfdAlyZWFkX3dhaXQ7CisJd2FpdF9xdWV1ZV9oZWFkX3QJd3JpdGVfd2FpdDsKKworCWNoYXIqCQkJaW50ZXJydXB0X2luX2J1ZmZlcjsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IqIGludGVycnVwdF9pbl9lbmRwb2ludDsKKwlzdHJ1Y3QgdXJiKgkJaW50ZXJydXB0X2luX3VyYjsKKwlpbnQJCQlyZWFkX3VyYl9maW5pc2hlZDsKKworCWNoYXIqCQkJaW50ZXJydXB0X291dF9idWZmZXI7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yKiBpbnRlcnJ1cHRfb3V0X2VuZHBvaW50OworCXN0cnVjdCB1cmIqCQlpbnRlcnJ1cHRfb3V0X3VyYjsKK307CisKKy8qIHByZXZlbnQgcmFjZXMgYmV0d2VlbiBvcGVuKCkgYW5kIGRpc2Nvbm5lY3QgKi8KK3N0YXRpYyBERUZJTkVfTVVURVgoZGlzY29ubmVjdF9tdXRleCk7CitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWR1X2RyaXZlcjsKKworc3RhdGljIHZvaWQgYWR1X2RlYnVnX2RhdGEoaW50IGxldmVsLCBjb25zdCBjaGFyICpmdW5jdGlvbiwgaW50IHNpemUsCisJCQkgICBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKQoreworCWludCBpOworCisJaWYgKGRlYnVnIDwgbGV2ZWwpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHIF9fRklMRV9fIjogJXMgLSBsZW5ndGggPSAlZCwgZGF0YSA9ICIsCisJICAgICAgIGZ1bmN0aW9uLCBzaXplKTsKKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorCQlwcmludGsoIiUuMnggIiwgZGF0YVtpXSk7CisJcHJpbnRrKCJcbiIpOworfQorCisvKioKKyAqIGFkdV9hYm9ydF90cmFuc2ZlcnMKKyAqICAgICAgYWJvcnRzIHRyYW5zZmVycyBhbmQgZnJlZXMgYXNzb2NpYXRlZCBkYXRhIHN0cnVjdHVyZXMKKyAqLworc3RhdGljIHZvaWQgYWR1X2Fib3J0X3RyYW5zZmVycyhzdHJ1Y3QgYWR1X2RldmljZSAqZGV2KQoreworCWRiZygyLCIgJXMgOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKwkJZGJnKDEsIiAlcyA6IGRldiBpcyBudWxsIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWlmIChkZXYtPnVkZXYgPT0gTlVMTCkgeworCQlkYmcoMSwiICVzIDogdWRldiBpcyBudWxsIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCWRiZygyLCIgJXMgOiB1ZGV2IHN0YXRlICVkIiwgX19GVU5DVElPTl9fLCBkZXYtPnVkZXYtPnN0YXRlKTsKKwlpZiAoZGV2LT51ZGV2LT5zdGF0ZSA9PSBVU0JfU1RBVEVfTk9UQVRUQUNIRUQpIHsKKwkJZGJnKDEsIiAlcyA6IHVkZXYgaXMgbm90IGF0dGFjaGVkIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHNodXRkb3duIHRyYW5zZmVyICovCisJdXNiX3VubGlua191cmIoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiKTsKKwl1c2JfdW5saW5rX3VyYihkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKKworZXhpdDoKKwlkYmcoMiwiICVzIDogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZCBhZHVfZGVsZXRlKHN0cnVjdCBhZHVfZGV2aWNlICpkZXYpCit7CisJZGJnKDIsICIlcyBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwlhZHVfYWJvcnRfdHJhbnNmZXJzKGRldik7CisKKwkvKiBmcmVlIGRhdGEgc3RydWN0dXJlcyAqLworCXVzYl9mcmVlX3VyYihkZXYtPmludGVycnVwdF9pbl91cmIpOworCXVzYl9mcmVlX3VyYihkZXYtPmludGVycnVwdF9vdXRfdXJiKTsKKwlrZnJlZShkZXYtPnJlYWRfYnVmZmVyX3ByaW1hcnkpOworCWtmcmVlKGRldi0+cmVhZF9idWZmZXJfc2Vjb25kYXJ5KTsKKwlrZnJlZShkZXYtPmludGVycnVwdF9pbl9idWZmZXIpOworCWtmcmVlKGRldi0+aW50ZXJydXB0X291dF9idWZmZXIpOworCWtmcmVlKGRldik7CisKKwlkYmcoMiwgIiVzIDogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworfQorCitzdGF0aWMgdm9pZCBhZHVfaW50ZXJydXB0X2luX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IGFkdV9kZXZpY2UgKmRldiA9IHVyYi0+Y29udGV4dDsKKworCWRiZyg0LCIgJXMgOiBlbnRlciwgc3RhdHVzICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJYWR1X2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwlzcGluX2xvY2soJmRldi0+YnVmbG9jayk7CisKKwlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAoKHVyYi0+c3RhdHVzICE9IC1FTk9FTlQpICYmICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkpIHsKKwkJCWRiZygxLCIgJXMgOiBub256ZXJvIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl9CisJCWdvdG8gZXhpdDsKKwl9CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCAmJiBkZXYtPmludGVycnVwdF9pbl9idWZmZXJbMF0gIT0gMHgwMCkgeworCQlpZiAoZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggPAorCQkgICAgKDQgKiBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpKSAtCisJCSAgICAgKHVyYi0+YWN0dWFsX2xlbmd0aCkpIHsKKwkJCW1lbWNweSAoZGV2LT5yZWFkX2J1ZmZlcl9wcmltYXJ5ICsKKwkJCQlkZXYtPnJlYWRfYnVmZmVyX2xlbmd0aCwKKwkJCQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIsIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisKKwkJCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCWRiZygyLCIgJXMgcmVhZGluZyAgJWQgIiwgX19GVU5DVElPTl9fLAorCQkJICAgIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCX0gZWxzZSB7CisJCQlkYmcoMSwiICVzIDogcmVhZF9idWZmZXIgb3ZlcmZsb3ciLCBfX0ZVTkNUSU9OX18pOworCQl9CisJfQorCitleGl0OgorCWRldi0+cmVhZF91cmJfZmluaXNoZWQgPSAxOworCXNwaW5fdW5sb2NrKCZkZXYtPmJ1ZmxvY2spOworCS8qIGFsd2F5cyB3YWtlIHVwIHNvIHdlIHJlY292ZXIgZnJvbSBlcnJvcnMgKi8KKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+cmVhZF93YWl0KTsKKwlhZHVfZGVidWdfZGF0YSg1LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwKKwkJICAgICAgIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlkYmcoNCwiICVzIDogbGVhdmUsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworfQorCitzdGF0aWMgdm9pZCBhZHVfaW50ZXJydXB0X291dF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBhZHVfZGV2aWNlICpkZXYgPSB1cmItPmNvbnRleHQ7CisKKwlkYmcoNCwiICVzIDogZW50ZXIsIHN0YXR1cyAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCWFkdV9kZWJ1Z19kYXRhKDUsX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPnN0YXR1cyAhPSAwKSB7CisJCWlmICgodXJiLT5zdGF0dXMgIT0gLUVOT0VOVCkgJiYKKwkJICAgICh1cmItPnN0YXR1cyAhPSAtRUNPTk5SRVNFVCkpIHsKKwkJCWRiZygxLCAiICVzIDpub256ZXJvIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQl9CisJCWdvdG8gZXhpdDsKKwl9CisKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d3JpdGVfd2FpdCk7CitleGl0OgorCisJYWR1X2RlYnVnX2RhdGEoNSwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsCisJCSAgICAgICB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJZGJnKDQsIiAlcyA6IGxlYXZlLCBzdGF0dXMgJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKK30KKworc3RhdGljIGludCBhZHVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgYWR1X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlOworCWludCBzdWJtaW5vcjsKKwlpbnQgcmV0dmFsID0gMDsKKworCWRiZygyLCIlcyA6IGVudGVyIiwgX19GVU5DVElPTl9fKTsKKworCXN1Ym1pbm9yID0gaW1pbm9yKGlub2RlKTsKKworCW11dGV4X2xvY2soJmRpc2Nvbm5lY3RfbXV0ZXgpOworCisJaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZhZHVfZHJpdmVyLCBzdWJtaW5vcik7CisJaWYgKCFpbnRlcmZhY2UpIHsKKwkJZXJyKCIlcyAtIGVycm9yLCBjYW4ndCBmaW5kIGRldmljZSBmb3IgbWlub3IgJWQiLAorCQkgICAgX19GVU5DVElPTl9fLCBzdWJtaW5vcik7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9ub19kZXZpY2U7CisJfQorCisJZGV2ID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCWlmICghZGV2KSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdF9ub19kZXZpY2U7CisJfQorCisJLyogbG9jayB0aGlzIGRldmljZSAqLworCWlmICgocmV0dmFsID0gZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSkpKSB7CisJCWRiZygyLCAiJXMgOiBzZW0gZG93biBmYWlsZWQiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXRfbm9fZGV2aWNlOworCX0KKworCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKwkrK2Rldi0+b3Blbl9jb3VudDsKKwlkYmcoMiwiJXMgOiBvcGVuIGNvdW50ICVkIiwgX19GVU5DVElPTl9fLCBkZXYtPm9wZW5fY291bnQpOworCisJLyogc2F2ZSBkZXZpY2UgaW4gdGhlIGZpbGUncyBwcml2YXRlIHN0cnVjdHVyZSAqLworCWZpbGUtPnByaXZhdGVfZGF0YSA9IGRldjsKKworCS8qIGluaXRpYWxpemUgaW4gZGlyZWN0aW9uICovCisJZGV2LT5yZWFkX2J1ZmZlcl9sZW5ndGggPSAwOworCisJLyogZml4dXAgZmlyc3QgcmVhZCBieSBoYXZpbmcgdXJiIHdhaXRpbmcgZm9yIGl0ICovCisJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsZGV2LT51ZGV2LAorCQkJIHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwKKwkJCSAJCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkgbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKSwKKwkJCSBhZHVfaW50ZXJydXB0X2luX2NhbGxiYWNrLCBkZXYsCisJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJLyogZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfQVNZTkNfVU5MSU5LOyAqLworCWRldi0+cmVhZF91cmJfZmluaXNoZWQgPSAwOworCXVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJLyogd2UgaWdub3JlIGZhaWx1cmUgKi8KKwkvKiBlbmQgb2YgZml4dXAgZm9yIGZpcnN0IHJlYWQgKi8KKworCXVwKCZkZXYtPnNlbSk7CisKK2V4aXRfbm9fZGV2aWNlOgorCW11dGV4X3VubG9jaygmZGlzY29ubmVjdF9tdXRleCk7CisJZGJnKDIsIiVzIDogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCAiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IGFkdV9yZWxlYXNlX2ludGVybmFsKHN0cnVjdCBhZHVfZGV2aWNlICpkZXYpCit7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoMiwiICVzIDogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGRldi0+dWRldiA9PSBOVUxMKSB7CisJCS8qIHRoZSBkZXZpY2Ugd2FzIHVucGx1Z2dlZCBiZWZvcmUgdGhlIGZpbGUgd2FzIHJlbGVhc2VkICovCisJCWFkdV9kZWxldGUoZGV2KTsKKwkJZ290byBleGl0OworCX0KKworCS8qIGRlY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KKwktLWRldi0+b3Blbl9jb3VudDsKKwlkYmcoMiwiICVzIDogb3BlbiBjb3VudCAlZCIsIF9fRlVOQ1RJT05fXywgZGV2LT5vcGVuX2NvdW50KTsKKwlpZiAoZGV2LT5vcGVuX2NvdW50IDw9IDApIHsKKwkJYWR1X2Fib3J0X3RyYW5zZmVycyhkZXYpOworCQlkZXYtPm9wZW5fY291bnQgPSAwOworCX0KKworZXhpdDoKKwlkYmcoMiwiICVzIDogbGVhdmUiLCBfX0ZVTkNUSU9OX18pOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgYWR1X3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGFkdV9kZXZpY2UgKmRldiA9IE5VTEw7CisJaW50IHJldHZhbCA9IDA7CisKKwlkYmcoMiwiICVzIDogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKGZpbGUgPT0gTlVMTCkgeworIAkJZGJnKDEsIiAlcyA6IGZpbGUgaXMgTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlpZiAoZGV2ID09IE5VTEwpIHsKKyAJCWRiZygxLCIgJXMgOiBvYmplY3QgaXMgTlVMTCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWdvdG8gZXhpdDsKKwl9CisKKwkvKiBsb2NrIG91ciBkZXZpY2UgKi8KKwlkb3duKCZkZXYtPnNlbSk7IC8qIG5vdCBpbnRlcnJ1cHRpYmxlICovCisKKwlpZiAoZGV2LT5vcGVuX2NvdW50IDw9IDApIHsKKwkJZGJnKDEsIiAlcyA6IGRldmljZSBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dmFsID0gLUVOT0RFVjsKKwkJZ290byBleGl0OworCX0KKworCS8qIGRvIHRoZSB3b3JrICovCisJcmV0dmFsID0gYWR1X3JlbGVhc2VfaW50ZXJuYWwoZGV2KTsKKworZXhpdDoKKwl1cCgmZGV2LT5zZW0pOworCWRiZygyLCIgJXMgOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVkIiwgX19GVU5DVElPTl9fLCByZXR2YWwpOworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFkdV9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBfX3VzZXIgY2hhciAqYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQlsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFkdV9kZXZpY2UgKmRldjsKKwlzaXplX3QgYnl0ZXNfcmVhZCA9IDA7CisJc2l6ZV90IGJ5dGVzX3RvX3JlYWQgPSBjb3VudDsKKwlpbnQgaTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdGltZW91dCA9IDA7CisJaW50IHNob3VsZF9zdWJtaXQgPSAwOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJREVDTEFSRV9XQUlUUVVFVUUod2FpdCwgY3VycmVudCk7CisKKwlkYmcoMiwiICVzIDogZW50ZXIsIGNvdW50ID0gJVpkLCBmaWxlPSVwIiwgX19GVU5DVElPTl9fLCBjb3VudCwgZmlsZSk7CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJZGJnKDIsIiAlcyA6IGRldj0lcCIsIF9fRlVOQ1RJT05fXywgZGV2KTsKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJaWYgKGRvd25faW50ZXJydXB0aWJsZSgmZGV2LT5zZW0pKQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOworCisJLyogdmVyaWZ5IHRoYXQgdGhlIGRldmljZSB3YXNuJ3QgdW5wbHVnZ2VkICovCisJaWYgKGRldi0+dWRldiA9PSBOVUxMIHx8IGRldi0+bWlub3IgPT0gMCkgeworCQlyZXR2YWwgPSAtRU5PREVWOworCQllcnIoIk5vIGRldmljZSBvciBkZXZpY2UgdW5wbHVnZ2VkICVkIiwgcmV0dmFsKTsKKwkJZ290byBleGl0OworCX0KKworCS8qIHZlcmlmeSB0aGF0IHNvbWUgZGF0YSB3YXMgcmVxdWVzdGVkICovCisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKDEsIiAlcyA6IHJlYWQgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCXRpbWVvdXQgPSBDT01NQU5EX1RJTUVPVVQ7CisJZGJnKDIsIiAlcyA6IGFib3V0IHRvIHN0YXJ0IGxvb3BpbmciLCBfX0ZVTkNUSU9OX18pOworCXdoaWxlIChieXRlc190b19yZWFkKSB7CisJCWludCBkYXRhX2luX3NlY29uZGFyeSA9IGRldi0+c2Vjb25kYXJ5X3RhaWwgLSBkZXYtPnNlY29uZGFyeV9oZWFkOworCQlkYmcoMiwiICVzIDogd2hpbGUsIGRhdGFfaW5fc2Vjb25kYXJ5PSVkLCBzdGF0dXM9JWQiLAorCQkgICAgX19GVU5DVElPTl9fLCBkYXRhX2luX3NlY29uZGFyeSwKKwkJICAgIGRldi0+aW50ZXJydXB0X2luX3VyYi0+c3RhdHVzKTsKKworCQlpZiAoZGF0YV9pbl9zZWNvbmRhcnkpIHsKKwkJCS8qIGRyYWluIHNlY29uZGFyeSBidWZmZXIgKi8KKwkJCWludCBhbW91bnQgPSBieXRlc190b19yZWFkIDwgZGF0YV9pbl9zZWNvbmRhcnkgPyBieXRlc190b19yZWFkIDogZGF0YV9pbl9zZWNvbmRhcnk7CisJCQlpID0gY29weV90b191c2VyKGJ1ZmZlciwgZGV2LT5yZWFkX2J1ZmZlcl9zZWNvbmRhcnkrZGV2LT5zZWNvbmRhcnlfaGVhZCwgYW1vdW50KTsKKwkJCWlmIChpIDwgMCkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJZGV2LT5zZWNvbmRhcnlfaGVhZCArPSAoYW1vdW50IC0gaSk7CisJCQlieXRlc19yZWFkICs9IChhbW91bnQgLSBpKTsKKwkJCWJ5dGVzX3RvX3JlYWQgLT0gKGFtb3VudCAtIGkpOworCQkJaWYgKGkpIHsKKwkJCQlyZXR2YWwgPSBieXRlc19yZWFkID8gYnl0ZXNfcmVhZCA6IC1FRkFVTFQ7CisJCQkJZ290byBleGl0OworCQkJfQorCQl9IGVsc2UgeworCQkJLyogd2UgY2hlY2sgdGhlIHByaW1hcnkgYnVmZmVyICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSAoJmRldi0+YnVmbG9jaywgZmxhZ3MpOworCQkJaWYgKGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoKSB7CisJCQkJLyogd2Ugc2VjdXJlIGFjY2VzcyB0byB0aGUgcHJpbWFyeSAqLworCQkJCWNoYXIgKnRtcDsKKwkJCQlkYmcoMiwiICVzIDogc3dhcCwgcmVhZF9idWZmZXJfbGVuZ3RoID0gJWQiLAorCQkJCSAgICBfX0ZVTkNUSU9OX18sIGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoKTsKKwkJCQl0bXAgPSBkZXYtPnJlYWRfYnVmZmVyX3NlY29uZGFyeTsKKwkJCQlkZXYtPnJlYWRfYnVmZmVyX3NlY29uZGFyeSA9IGRldi0+cmVhZF9idWZmZXJfcHJpbWFyeTsKKwkJCQlkZXYtPnJlYWRfYnVmZmVyX3ByaW1hcnkgPSB0bXA7CisJCQkJZGV2LT5zZWNvbmRhcnlfaGVhZCA9IDA7CisJCQkJZGV2LT5zZWNvbmRhcnlfdGFpbCA9IGRldi0+cmVhZF9idWZmZXJfbGVuZ3RoOworCQkJCWRldi0+cmVhZF9idWZmZXJfbGVuZ3RoID0gMDsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmJ1ZmxvY2ssIGZsYWdzKTsKKwkJCQkvKiB3ZSBoYXZlIGEgZnJlZSBidWZmZXIgc28gdXNlIGl0ICovCisJCQkJc2hvdWxkX3N1Ym1pdCA9IDE7CisJCQl9IGVsc2UgeworCQkJCS8qIGV2ZW4gdGhlIHByaW1hcnkgd2FzIGVtcHR5IC0gd2UgbWF5IG5lZWQgdG8gZG8gSU8gKi8KKwkJCQlpZiAoZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLT5zdGF0dXMgPT0gLUVJTlBST0dSRVNTKSB7CisJCQkJCS8qIHNvbWVib2R5IGlzIGRvaW5nIElPICovCisJCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+YnVmbG9jaywgZmxhZ3MpOworCQkJCQlkYmcoMiwiICVzIDogc3VibWl0dGVkIGFscmVhZHkiLCBfX0ZVTkNUSU9OX18pOworCQkJCX0gZWxzZSB7CisJCQkJCS8qIHdlIG11c3QgaW5pdGlhdGUgaW5wdXQgKi8KKwkJCQkJZGJnKDIsIiAlcyA6IGluaXRpYXRlIGlucHV0IiwgX19GVU5DVElPTl9fKTsKKwkJCQkJZGV2LT5yZWFkX3VyYl9maW5pc2hlZCA9IDA7CisKKwkJCQkJdXNiX2ZpbGxfaW50X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsZGV2LT51ZGV2LAorCQkJCQkJCSB1c2JfcmN2aW50cGlwZShkZXYtPnVkZXYsCisJCQkJCQkJIAkJZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MpLAorCQkJCQkJCSBkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkJCQkJIGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT53TWF4UGFja2V0U2l6ZSksCisJCQkJCQkJIGFkdV9pbnRlcnJ1cHRfaW5fY2FsbGJhY2ssCisJCQkJCQkJIGRldiwKKwkJCQkJCQkgZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPmJJbnRlcnZhbCk7CisJCQkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJCQkJCWlmICghcmV0dmFsKSB7CisJCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmJ1ZmxvY2ssIGZsYWdzKTsKKwkJCQkJCWRiZygyLCIgJXMgOiBzdWJtaXR0ZWQgT0siLCBfX0ZVTkNUSU9OX18pOworCQkJCQl9IGVsc2UgeworCQkJCQkJaWYgKHJldHZhbCA9PSAtRU5PTUVNKSB7CisJCQkJCQkJcmV0dmFsID0gYnl0ZXNfcmVhZCA/IGJ5dGVzX3JlYWQgOiAtRU5PTUVNOworCQkJCQkJfQorCQkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5idWZsb2NrLCBmbGFncyk7CisJCQkJCQlkYmcoMiwiICVzIDogc3VibWl0IGZhaWxlZCIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCQlnb3RvIGV4aXQ7CisJCQkJCX0KKwkJCQl9CisKKwkJCQkvKiB3ZSB3YWl0IGZvciBJL08gdG8gY29tcGxldGUgKi8KKwkJCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQkJCWFkZF93YWl0X3F1ZXVlKCZkZXYtPnJlYWRfd2FpdCwgJndhaXQpOworCQkJCWlmICghZGV2LT5yZWFkX3VyYl9maW5pc2hlZCkKKwkJCQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQoQ09NTUFORF9USU1FT1VUKTsKKwkJCQllbHNlCisJCQkJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7CisJCQkJcmVtb3ZlX3dhaXRfcXVldWUoJmRldi0+cmVhZF93YWl0LCAmd2FpdCk7CisKKwkJCQlpZiAodGltZW91dCA8PSAwKSB7CisJCQkJCWRiZygyLCIgJXMgOiB0aW1lb3V0IiwgX19GVU5DVElPTl9fKTsKKwkJCQkJcmV0dmFsID0gYnl0ZXNfcmVhZCA/IGJ5dGVzX3JlYWQgOiAtRVRJTUVET1VUOworCQkJCQlnb3RvIGV4aXQ7CisJCQkJfQorCisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJCWRiZygyLCIgJXMgOiBzaWduYWwgcGVuZGluZyIsIF9fRlVOQ1RJT05fXyk7CisJCQkJCXJldHZhbCA9IGJ5dGVzX3JlYWQgPyBieXRlc19yZWFkIDogLUVJTlRSOworCQkJCQlnb3RvIGV4aXQ7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJcmV0dmFsID0gYnl0ZXNfcmVhZDsKKwkvKiBpZiB0aGUgcHJpbWFyeSBidWZmZXIgaXMgZW1wdHkgdGhlbiB1c2UgaXQgKi8KKwlpZiAoc2hvdWxkX3N1Ym1pdCAmJiAhZGV2LT5pbnRlcnJ1cHRfaW5fdXJiLT5zdGF0dXM9PS1FSU5QUk9HUkVTUykgeworCQl1c2JfZmlsbF9pbnRfdXJiKGRldi0+aW50ZXJydXB0X2luX3VyYixkZXYtPnVkZXYsCisJCQkJIHVzYl9yY3ZpbnRwaXBlKGRldi0+dWRldiwKKwkJCQkgCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyksCisJCQkJCQlkZXYtPmludGVycnVwdF9pbl9idWZmZXIsCisJCQkJCQlsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+d01heFBhY2tldFNpemUpLAorCQkJCQkJYWR1X2ludGVycnVwdF9pbl9jYWxsYmFjaywKKwkJCQkJCWRldiwKKwkJCQkJCWRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50LT5iSW50ZXJ2YWwpOworCQkvKiBkZXYtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9BU1lOQ19VTkxJTks7ICovCisJCWRldi0+cmVhZF91cmJfZmluaXNoZWQgPSAwOworCQl1c2Jfc3VibWl0X3VyYihkZXYtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOworCQkvKiB3ZSBpZ25vcmUgZmFpbHVyZSAqLworCX0KKworZXhpdDoKKwkvKiB1bmxvY2sgdGhlIGRldmljZSAqLworCXVwKCZkZXYtPnNlbSk7CisKKwlkYmcoMiwiICVzIDogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgc3NpemVfdCBhZHVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IF9fdXNlciBjaGFyICpidWZmZXIsCisJCQkgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCit7CisJc3RydWN0IGFkdV9kZXZpY2UgKmRldjsKKwlzaXplX3QgYnl0ZXNfd3JpdHRlbiA9IDA7CisJc2l6ZV90IGJ5dGVzX3RvX3dyaXRlOworCXNpemVfdCBidWZmZXJfc2l6ZTsKKwlpbnQgcmV0dmFsID0gMDsKKwlpbnQgdGltZW91dCA9IDA7CisKKwlkYmcoMiwiICVzIDogZW50ZXIsIGNvdW50ID0gJVpkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisKKwlkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwkvKiBsb2NrIHRoaXMgb2JqZWN0ICovCisJZG93bl9pbnRlcnJ1cHRpYmxlKCZkZXYtPnNlbSk7CisKKwkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KKwlpZiAoZGV2LT51ZGV2ID09IE5VTEwgfHwgZGV2LT5taW5vciA9PSAwKSB7CisJCXJldHZhbCA9IC1FTk9ERVY7CisJCWVycigiTm8gZGV2aWNlIG9yIGRldmljZSB1bnBsdWdnZWQgJWQiLCByZXR2YWwpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogdmVyaWZ5IHRoYXQgd2UgYWN0dWFsbHkgaGF2ZSBzb21lIGRhdGEgdG8gd3JpdGUgKi8KKwlpZiAoY291bnQgPT0gMCkgeworCQlkYmcoMSwiICVzIDogd3JpdGUgcmVxdWVzdCBvZiAwIGJ5dGVzIiwgX19GVU5DVElPTl9fKTsKKwkJZ290byBleGl0OworCX0KKworCisJd2hpbGUgKGNvdW50ID4gMCkgeworCQlpZiAoZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYi0+c3RhdHVzID09IC1FSU5QUk9HUkVTUykgeworCQkJdGltZW91dCA9IENPTU1BTkRfVElNRU9VVDsKKworCQkJd2hpbGUgKHRpbWVvdXQgPiAwKSB7CisJCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKSB7CisJCQkJZGJnKDEsIiAlcyA6IGludGVycnVwdGVkIiwgX19GVU5DVElPTl9fKTsKKwkJCQlyZXR2YWwgPSAtRUlOVFI7CisJCQkJZ290byBleGl0OworCQkJfQorCQkJdXAoJmRldi0+c2VtKTsKKwkJCXRpbWVvdXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVvdXQoJmRldi0+d3JpdGVfd2FpdCwgdGltZW91dCk7CisJCQlkb3duX2ludGVycnVwdGlibGUoJmRldi0+c2VtKTsKKwkJCWlmICh0aW1lb3V0ID4gMCkgeworCQkJCWJyZWFrOworCQkJfQorCQkJZGJnKDEsIiAlcyA6IGludGVycnVwdGVkIHRpbWVvdXQ6ICVkIiwgX19GVU5DVElPTl9fLCB0aW1lb3V0KTsKKwkJfQorCisKKwkJZGJnKDEsIiAlcyA6IGZpbmFsIHRpbWVvdXQ6ICVkIiwgX19GVU5DVElPTl9fLCB0aW1lb3V0KTsKKworCQlpZiAodGltZW91dCA9PSAwKSB7CisJCQlkYmcoMSwgIiVzIC0gY29tbWFuZCB0aW1lZCBvdXQuIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHZhbCA9IC1FVElNRURPVVQ7CisJCQlnb3RvIGV4aXQ7CisJCX0KKworCQlkYmcoNCwiICVzIDogaW4gcHJvZ3Jlc3MsIGNvdW50ID0gJVpkIiwgX19GVU5DVElPTl9fLCBjb3VudCk7CisKKwkJfSBlbHNlIHsKKwkJCWRiZyg0LCIgJXMgOiBzZW5kaW5nLCBjb3VudCA9ICVaZCIsIF9fRlVOQ1RJT05fXywgY291bnQpOworCisJCQkvKiB3cml0ZSB0aGUgZGF0YSBpbnRvIGludGVycnVwdF9vdXRfYnVmZmVyIGZyb20gdXNlcnNwYWNlICovCisJCQlidWZmZXJfc2l6ZSA9IGxlMTZfdG9fY3B1KGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludC0+d01heFBhY2tldFNpemUpOworCQkJYnl0ZXNfdG9fd3JpdGUgPSBjb3VudCA+IGJ1ZmZlcl9zaXplID8gYnVmZmVyX3NpemUgOiBjb3VudDsKKwkJCWRiZyg0LCIgJXMgOiBidWZmZXJfc2l6ZSA9ICVaZCwgY291bnQgPSAlWmQsIGJ5dGVzX3RvX3dyaXRlID0gJVpkIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIGJ1ZmZlcl9zaXplLCBjb3VudCwgYnl0ZXNfdG9fd3JpdGUpOworCisJCQlpZiAoY29weV9mcm9tX3VzZXIoZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwgYnVmZmVyLCBieXRlc190b193cml0ZSkgIT0gMCkgeworCQkJCXJldHZhbCA9IC1FRkFVTFQ7CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQkvKiBzZW5kIG9mZiB0aGUgdXJiICovCisJCQl1c2JfZmlsbF9pbnRfdXJiKAorCQkJCWRldi0+aW50ZXJydXB0X291dF91cmIsCisJCQkJZGV2LT51ZGV2LAorCQkJCXVzYl9zbmRpbnRwaXBlKGRldi0+dWRldiwgZGV2LT5pbnRlcnJ1cHRfb3V0X2VuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKSwKKwkJCQlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyLAorCQkJCWJ5dGVzX3RvX3dyaXRlLAorCQkJCWFkdV9pbnRlcnJ1cHRfb3V0X2NhbGxiYWNrLAorCQkJCWRldiwKKwkJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludC0+YkludGVydmFsKTsKKwkJCS8qIGRldi0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX0FTWU5DX1VOTElOSzsgKi8KKwkJCWRldi0+aW50ZXJydXB0X291dF91cmItPmFjdHVhbF9sZW5ndGggPSBieXRlc190b193cml0ZTsKKwkJCXJldHZhbCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aW50ZXJydXB0X291dF91cmIsIEdGUF9LRVJORUwpOworCQkJaWYgKHJldHZhbCA8IDApIHsKKwkJCQllcnIoIkNvdWxkbid0IHN1Ym1pdCBpbnRlcnJ1cHRfb3V0X3VyYiAlZCIsIHJldHZhbCk7CisJCQkJZ290byBleGl0OworCQkJfQorCisJCQlidWZmZXIgKz0gYnl0ZXNfdG9fd3JpdGU7CisJCQljb3VudCAtPSBieXRlc190b193cml0ZTsKKworCQkJYnl0ZXNfd3JpdHRlbiArPSBieXRlc190b193cml0ZTsKKwkJfQorCX0KKworCXJldHZhbCA9IGJ5dGVzX3dyaXR0ZW47CisKK2V4aXQ6CisJLyogdW5sb2NrIHRoZSBkZXZpY2UgKi8KKwl1cCgmZGV2LT5zZW0pOworCisJZGJnKDIsIiAlcyA6IGxlYXZlLCByZXR1cm4gdmFsdWUgJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBmaWxlIG9wZXJhdGlvbnMgbmVlZGVkIHdoZW4gd2UgcmVnaXN0ZXIgdGhpcyBkcml2ZXIgKi8KK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGFkdV9mb3BzID0geworCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5yZWFkICA9IGFkdV9yZWFkLAorCS53cml0ZSA9IGFkdV93cml0ZSwKKwkub3BlbiA9IGFkdV9vcGVuLAorCS5yZWxlYXNlID0gYWR1X3JlbGVhc2UsCit9OworCisvKgorICogdXNiIGNsYXNzIGRyaXZlciBpbmZvIGluIG9yZGVyIHRvIGdldCBhIG1pbm9yIG51bWJlciBmcm9tIHRoZSB1c2IgY29yZSwKKyAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIGRldmZzIGFuZCB0aGUgZHJpdmVyIGNvcmUKKyAqLworc3RhdGljIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyIGFkdV9jbGFzcyA9IHsKKwkubmFtZSA9ICJ1c2IvYWR1dHV4JWQiLAorCS5mb3BzID0gJmFkdV9mb3BzLAorCS5taW5vcl9iYXNlID0gQURVX01JTk9SX0JBU0UsCit9OworCisvKioKKyAqIGFkdV9wcm9iZQorICoKKyAqIENhbGxlZCBieSB0aGUgdXNiIGNvcmUgd2hlbiBhIG5ldyBkZXZpY2UgaXMgY29ubmVjdGVkIHRoYXQgaXQgdGhpbmtzCisgKiB0aGlzIGRyaXZlciBtaWdodCBiZSBpbnRlcmVzdGVkIGluLgorICovCitzdGF0aWMgaW50IGFkdV9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAorCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKTsKKwlzdHJ1Y3QgYWR1X2RldmljZSAqZGV2ID0gTlVMTDsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50IHJldHZhbCA9IC1FTk9ERVY7CisJaW50IGluX2VuZF9zaXplOworCWludCBvdXRfZW5kX3NpemU7CisJaW50IGk7CisKKwlkYmcoMiwiICVzIDogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJaWYgKHVkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgInVkZXYgaXMgTlVMTC5cbiIpOworCQlnb3RvIGV4aXQ7CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciBvdXIgZGV2aWNlIHN0YXRlIGFuZCBpbnRpYWxpemUgaXQgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWR1X2RldmljZSksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5pdF9NVVRFWCgmZGV2LT5zZW0pOworCXNwaW5fbG9ja19pbml0KCZkZXYtPmJ1ZmxvY2spOworCWRldi0+dWRldiA9IHVkZXY7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yZWFkX3dhaXQpOworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+d3JpdGVfd2FpdCk7CisKKwlpZmFjZV9kZXNjID0gJmludGVyZmFjZS0+YWx0c2V0dGluZ1swXTsKKworCS8qIHNldCB1cCB0aGUgZW5kcG9pbnQgaW5mb3JtYXRpb24gKi8KKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKworCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCisJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9IGVuZHBvaW50OworCisJCWlmICh1c2JfZW5kcG9pbnRfaXNfaW50X291dChlbmRwb2ludCkpCisJCQlkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQgPSBlbmRwb2ludDsKKwl9CisJaWYgKGRldi0+aW50ZXJydXB0X2luX2VuZHBvaW50ID09IE5VTEwpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJpbnRlcnJ1cHQgaW4gZW5kcG9pbnQgbm90IGZvdW5kXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJaWYgKGRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiaW50ZXJydXB0IG91dCBlbmRwb2ludCBub3QgZm91bmRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWluX2VuZF9zaXplID0gbGUxNl90b19jcHUoZGV2LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKwlvdXRfZW5kX3NpemUgPSBsZTE2X3RvX2NwdShkZXYtPmludGVycnVwdF9vdXRfZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKworCWRldi0+cmVhZF9idWZmZXJfcHJpbWFyeSA9IGttYWxsb2MoKDQgKiBpbl9lbmRfc2l6ZSksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZWFkX2J1ZmZlcl9wcmltYXJ5KSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgcmVhZF9idWZmZXJfcHJpbWFyeVxuIik7CisJCXJldHZhbCA9IC1FTk9NRU07CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogZGVidWcgY29kZSBwcmltZSB0aGUgYnVmZmVyICovCisJbWVtc2V0KGRldi0+cmVhZF9idWZmZXJfcHJpbWFyeSwgJ2EnLCBpbl9lbmRfc2l6ZSk7CisJbWVtc2V0KGRldi0+cmVhZF9idWZmZXJfcHJpbWFyeSArIGluX2VuZF9zaXplLCAnYicsIGluX2VuZF9zaXplKTsKKwltZW1zZXQoZGV2LT5yZWFkX2J1ZmZlcl9wcmltYXJ5ICsgKDIgKiBpbl9lbmRfc2l6ZSksICdjJywgaW5fZW5kX3NpemUpOworCW1lbXNldChkZXYtPnJlYWRfYnVmZmVyX3ByaW1hcnkgKyAoMyAqIGluX2VuZF9zaXplKSwgJ2QnLCBpbl9lbmRfc2l6ZSk7CisKKwlkZXYtPnJlYWRfYnVmZmVyX3NlY29uZGFyeSA9IGttYWxsb2MoKDQgKiBpbl9lbmRfc2l6ZSksIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5yZWFkX2J1ZmZlcl9zZWNvbmRhcnkpIHsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZG4ndCBhbGxvY2F0ZSByZWFkX2J1ZmZlcl9zZWNvbmRhcnlcbiIpOworCQlyZXR2YWwgPSAtRU5PTUVNOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGRlYnVnIGNvZGUgcHJpbWUgdGhlIGJ1ZmZlciAqLworCW1lbXNldChkZXYtPnJlYWRfYnVmZmVyX3NlY29uZGFyeSwgJ2UnLCBpbl9lbmRfc2l6ZSk7CisJbWVtc2V0KGRldi0+cmVhZF9idWZmZXJfc2Vjb25kYXJ5ICsgaW5fZW5kX3NpemUsICdmJywgaW5fZW5kX3NpemUpOworCW1lbXNldChkZXYtPnJlYWRfYnVmZmVyX3NlY29uZGFyeSArICgyICogaW5fZW5kX3NpemUpLCAnZycsIGluX2VuZF9zaXplKTsKKwltZW1zZXQoZGV2LT5yZWFkX2J1ZmZlcl9zZWNvbmRhcnkgKyAoMyAqIGluX2VuZF9zaXplKSwgJ2gnLCBpbl9lbmRfc2l6ZSk7CisKKwlkZXYtPmludGVycnVwdF9pbl9idWZmZXIgPSBrbWFsbG9jKGluX2VuZF9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X2luX2J1ZmZlcikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl9idWZmZXJcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCS8qIGRlYnVnIGNvZGUgcHJpbWUgdGhlIGJ1ZmZlciAqLworCW1lbXNldChkZXYtPmludGVycnVwdF9pbl9idWZmZXIsICdpJywgaW5fZW5kX3NpemUpOworCisJZGV2LT5pbnRlcnJ1cHRfaW5fdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldi0+aW50ZXJydXB0X2luX3VyYikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9pbl91cmJcbiIpOworCQlnb3RvIGVycm9yOworCX0KKwlkZXYtPmludGVycnVwdF9vdXRfYnVmZmVyID0ga21hbGxvYyhvdXRfZW5kX3NpemUsIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlcikgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkbid0IGFsbG9jYXRlIGludGVycnVwdF9vdXRfYnVmZmVyXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2LT5pbnRlcnJ1cHRfb3V0X3VyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmludGVycnVwdF9vdXRfdXJiKSB7CisJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiQ291bGRuJ3QgYWxsb2NhdGUgaW50ZXJydXB0X291dF91cmJcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCWlmICghdXNiX3N0cmluZyh1ZGV2LCB1ZGV2LT5kZXNjcmlwdG9yLmlTZXJpYWxOdW1iZXIsIGRldi0+c2VyaWFsX251bWJlciwKKwkJCXNpemVvZihkZXYtPnNlcmlhbF9udW1iZXIpKSkgeworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCByZXRyaWV2ZSBzZXJpYWwgbnVtYmVyXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGJnKDIsIiAlcyA6IHNlcmlhbF9udW1iZXI9JXMiLCBfX0ZVTkNUSU9OX18sIGRldi0+c2VyaWFsX251bWJlcik7CisKKwkvKiB3ZSBjYW4gcmVnaXN0ZXIgdGhlIGRldmljZSBub3csIGFzIGl0IGlzIHJlYWR5ICovCisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CisKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmFkdV9jbGFzcyk7CisKKwlpZiAocmV0dmFsKSB7CisJCS8qIHNvbWV0aGluZyBwcmV2ZW50ZWQgdXMgZnJvbSByZWdpc3RlcmluZyB0aGlzIGRyaXZlciAqLworCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk5vdCBhYmxlIHRvIGdldCBhIG1pbm9yIGZvciB0aGlzIGRldmljZS5cbiIpOworCQl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZGV2LT5taW5vciA9IGludGVyZmFjZS0+bWlub3I7CisKKwkvKiBsZXQgdGhlIHVzZXIga25vdyB3aGF0IG5vZGUgdGhpcyBkZXZpY2UgaXMgbm93IGF0dGFjaGVkIHRvICovCisJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiQURVJWQgJXMgbm93IGF0dGFjaGVkIHRvIC9kZXYvdXNiL2FkdXR1eCVkIiwKKwkJIHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0LCBkZXYtPnNlcmlhbF9udW1iZXIsCisJCSAoZGV2LT5taW5vciAtIEFEVV9NSU5PUl9CQVNFKSk7CitleGl0OgorCWRiZygyLCIgJXMgOiBsZWF2ZSwgcmV0dXJuIHZhbHVlICVwIChkZXYpIiwgX19GVU5DVElPTl9fLCBkZXYpOworCisJcmV0dXJuIHJldHZhbDsKKworZXJyb3I6CisJYWR1X2RlbGV0ZShkZXYpOworCXJldHVybiByZXR2YWw7Cit9CisKKy8qKgorICogYWR1X2Rpc2Nvbm5lY3QKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHVzYiBjb3JlIHdoZW4gdGhlIGRldmljZSBpcyByZW1vdmVkIGZyb20gdGhlIHN5c3RlbS4KKyAqLworc3RhdGljIHZvaWQgYWR1X2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgYWR1X2RldmljZSAqZGV2OworCWludCBtaW5vcjsKKworCWRiZygyLCIgJXMgOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisKKwltdXRleF9sb2NrKCZkaXNjb25uZWN0X211dGV4KTsgLyogbm90IGludGVycnVwdGlibGUgKi8KKworCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisKKwlkb3duKCZkZXYtPnNlbSk7IC8qIG5vdCBpbnRlcnJ1cHRpYmxlICovCisKKwltaW5vciA9IGRldi0+bWlub3I7CisKKwkvKiBnaXZlIGJhY2sgb3VyIG1pbm9yICovCisJdXNiX2RlcmVnaXN0ZXJfZGV2KGludGVyZmFjZSwgJmFkdV9jbGFzcyk7CisJZGV2LT5taW5vciA9IDA7CisKKwkvKiBpZiB0aGUgZGV2aWNlIGlzIG5vdCBvcGVuZWQsIHRoZW4gd2UgY2xlYW4gdXAgcmlnaHQgbm93ICovCisJZGJnKDIsIiAlcyA6IG9wZW4gY291bnQgJWQiLCBfX0ZVTkNUSU9OX18sIGRldi0+b3Blbl9jb3VudCk7CisJaWYgKCFkZXYtPm9wZW5fY291bnQpIHsKKwkJdXAoJmRldi0+c2VtKTsKKwkJYWR1X2RlbGV0ZShkZXYpOworCX0gZWxzZSB7CisJCWRldi0+dWRldiA9IE5VTEw7CisJCXVwKCZkZXYtPnNlbSk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkaXNjb25uZWN0X211dGV4KTsKKworCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwgIkFEVSBkZXZpY2UgYWR1dHV4JWQgbm93IGRpc2Nvbm5lY3RlZCIsCisJCSAobWlub3IgLSBBRFVfTUlOT1JfQkFTRSkpOworCisJZGJnKDIsIiAlcyA6IGxlYXZlIiwgX19GVU5DVElPTl9fKTsKK30KKworLyogdXNiIHNwZWNpZmljIG9iamVjdCBuZWVkZWQgdG8gcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgdXNiIHN1YnN5c3RlbSAqLworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFkdV9kcml2ZXIgPSB7CisJLm5hbWUgPSAiYWR1dHV4IiwKKwkucHJvYmUgPSBhZHVfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBhZHVfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPSBkZXZpY2VfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBhZHVfaW5pdCh2b2lkKQoreworCWludCByZXN1bHQ7CisKKwlkYmcoMiwiICVzIDogZW50ZXIiLCBfX0ZVTkNUSU9OX18pOworCisJLyogcmVnaXN0ZXIgdGhpcyBkcml2ZXIgd2l0aCB0aGUgVVNCIHN1YnN5c3RlbSAqLworCXJlc3VsdCA9IHVzYl9yZWdpc3RlcigmYWR1X2RyaXZlcik7CisJaWYgKHJlc3VsdCA8IDApIHsKKwkJZXJyKCJ1c2JfcmVnaXN0ZXIgZmFpbGVkIGZvciB0aGUgIl9fRklMRV9fIiBkcml2ZXIuICIKKwkJICAgICJFcnJvciBudW1iZXIgJWQiLCByZXN1bHQpOworCQlnb3RvIGV4aXQ7CisJfQorCisJaW5mbygiYWR1dHV4ICIgRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKwlpbmZvKCJhZHV0dXggaXMgYW4gZXhwZXJpbWVudGFsIGRyaXZlci4gVXNlIGF0IHlvdXIgb3duIHJpc2siKTsKKworZXhpdDoKKwlkYmcoMiwiICVzIDogbGVhdmUsIHJldHVybiB2YWx1ZSAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBhZHVfZXhpdCh2b2lkKQoreworCWRiZygyLCIgJXMgOiBlbnRlciIsIF9fRlVOQ1RJT05fXyk7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmFkdV9kcml2ZXIpOworCWRiZygyLCIgJXMgOiBsZWF2ZSIsIF9fRlVOQ1RJT05fXyk7Cit9CisKK21vZHVsZV9pbml0KGFkdV9pbml0KTsKK21vZHVsZV9leGl0KGFkdV9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jIGIvZHJpdmVycy91c2IvbWlzYy9hdWVyc3dhbGQuYwppbmRleCAxZmVmMzZlLi40ZmQyMTEwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2F1ZXJzd2FsZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvYXVlcnN3YWxkLmMKQEAgLTgwNiw3ICs4MDYsNyBAQAogMAkJSW5pdGlhbCwgT0sKIC1FSU5QUk9HUkVTUwlkdXJpbmcgc3VibWlzc2lvbiB1bnRpbCBlbmQKIC1FTk9FTlQJCWlmIHVyYiBpcyB1bmxpbmtlZAotLUVUSU1FRE9VVAlUcmFuc2ZlciB0aW1lZCBvdXQsIE5BSworLUVUSU1FCQlEZXZpY2UgZGlkIG5vdCByZXNwb25kCiAtRU5PTUVNCQlNZW1vcnkgT3ZlcmZsb3cKIC1FTk9ERVYJCVNwZWNpZmllZCBVU0ItZGV2aWNlIG9yIGJ1cyBkb2Vzbid0IGV4aXN0CiAtRU5YSU8JCVVSQiBhbHJlYWR5IHF1ZXVlZApAQCAtODMyLDcgKzgzMiw3IEBACiB7CiAJc3dpdGNoIChzdGF0dXMpIHsKIAljYXNlIDA6Ci0JY2FzZSAtRVRJTUVET1VUOgorCWNhc2UgLUVUSU1FOgogCWNhc2UgLUVPVkVSRkxPVzoKIAljYXNlIC1FQUdBSU46CiAJY2FzZSAtRVBJUEU6CkBAIC0xODU4LDcgKzE4NTgsNyBAQAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogRmlsZSBvcGVyYXRpb24gc3RydWN0dXJlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1ZXJzd2FsZF9mb3BzID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGF1ZXJzd2FsZF9mb3BzID0KIHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkubGxzZWVrID0Jbm9fbGxzZWVrLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jIGIvZHJpdmVycy91c2IvbWlzYy9jeXByZXNzX2N5N2M2My5jCmluZGV4IDljNDY3NDYuLmI2M2I1ZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3lwcmVzc19jeTdjNjMuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2N5cHJlc3NfY3k3YzYzLmMKQEAgLTIwOSw3ICsyMDksNyBAQAogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKIAkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJPdXQgb2YgbWVtb3J5IVxuIik7Ci0JCWdvdG8gZXJyb3I7CisJCWdvdG8gZXJyb3JfbWVtOwogCX0KIAogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CkBAIC0yMTgsMTUgKzIxOCwyNiBAQAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBkZXYpOwogCiAJLyogY3JlYXRlIGRldmljZSBhdHRyaWJ1dGUgZmlsZXMgKi8KLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOwotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQwKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKIAogCS8qIGxldCB0aGUgdXNlciBrbm93IHRoYXQgdGhlIGRldmljZSBpcyBub3cgYXR0YWNoZWQgKi8KIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsCiAJCSAiQ3lwcmVzcyBDWTdDNjN4eHggZGV2aWNlIG5vdyBhdHRhY2hlZFxuIik7CisJcmV0dXJuIDA7CiAKLQlyZXR2YWwgPSAwOwogZXJyb3I6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQwKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDEpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOworCWtmcmVlKGRldik7CisKK2Vycm9yX21lbToKIAlyZXR1cm4gcmV0dmFsOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL2N5dGhlcm0uYyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCmluZGV4IGIyMGJlYzQuLjA0ZTg3YWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvY3l0aGVybS5jCkBAIC0zNTMsNyArMzUzLDcgQEAKIAlkZXYgPSBremFsbG9jIChzaXplb2Yoc3RydWN0IHVzYl9jeXRoZXJtKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIgKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycm9yX21lbTsKIAl9CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKQEAgLTM2MiwxOCArMzYyLDM1IEBACiAKIAlkZXYtPmJyaWdodG5lc3MgPSAweEZGOwogCi0JZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOyAgIAotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl90ZW1wKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9uKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOwotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3RlbXApOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2J1dHRvbik7CisJaWYgKHJldHZhbCkKKwkJZ290byBlcnJvcjsKKwlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3BvcnQxKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOwogCi0JZGV2X2luZm8gKCZpbnRlcmZhY2UtPmRldiwgCisJZGV2X2luZm8gKCZpbnRlcmZhY2UtPmRldiwKIAkJICAiQ3lwcmVzcyB0aGVybW9tZXRlciBkZXZpY2Ugbm93IGF0dGFjaGVkXG4iKTsKIAlyZXR1cm4gMDsKLQotIGVycm9yOgorZXJyb3I6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JyaWdodG5lc3MpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl90ZW1wKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfYnV0dG9uKTsKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcG9ydDApOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9wb3J0MSk7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwogCWtmcmVlKGRldik7CitlcnJvcl9tZW06CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9mdGRpLWVsYW4uYyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4YTA5NAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvZnRkaS1lbGFuLmMKQEAgLTAsMCArMSwyODA5IEBACisvKgorKiBVU0IgRlRESSBjbGllbnQgZHJpdmVyIGZvciBFbGFuIERpZ2l0YWwgU3lzdGVtcydzIFV4eHggYWRhcHRlcnMKKyoKKyogQ29weXJpZ2h0KEMpIDIwMDYgRWxhbiBEaWdpdGFsIFN5c3RlbXMgTGltaXRlZAorKiBodHRwOi8vd3d3LmVsYW5kaWdpdGFsc3lzdGVtcy5jb20KKyoKKyogQXV0aG9yIGFuZCBNYWludGFpbmVyIC0gVG9ueSBPbGVjaCAtIEVsYW4gRGlnaXRhbCBTeXN0ZW1zCisqIHRvbnkub2xlY2hAZWxhbmRpZ2l0YWxzeXN0ZW1zLmNvbQorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTt5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyoKKyoKKyogVGhpcyBkcml2ZXIgd2FzIHdyaXR0ZW4gYnkgVG9ueSBPbGVjaCh0b255Lm9sZWNoQGVsYW5kaWdpdGFsc3lzdGVtcy5jb20pCisqIGJhc2VkIG9uIHZhcmlvdXMgVVNCIGNsaWVudCBkcml2ZXJzIGluIHRoZSAyLjYuMTUgbGludXgga2VybmVsCisqIHdpdGggY29uc3RhbnQgcmVmZXJlbmNlIHRvIHRoZSAzcmQgRWRpdGlvbiBvZiBMaW51eCBEZXZpY2UgRHJpdmVycworKiBwdWJsaXNoZWQgYnkgTydSZWlsbHkKKyoKKyogVGhlIFUxMzIgYWRhcHRlciBpcyBhIFVTQiB0byBDYXJkQnVzIGFkYXB0ZXIgc3BlY2lmaWNhbGx5IGRlc2lnbmVkCisqIGZvciBQQyBjYXJkcyB0aGF0IGNvbnRhaW4gYW4gT0hDSSBob3N0IGNvbnRyb2xsZXIuIFR5cGljYWwgUEMgY2FyZHMKKyogYXJlIHRoZSBPcmFuZ2UgTW9iaWxlIDNHIE9wdGlvbiBHbG9iZVRyb3R0ZXIgRnVzaW9uIGNhcmQuCisqCisqIFRoZSBVMTMyIGFkYXB0ZXIgd2lsbCAqTk9UICp3b3JrIHdpdGggUEMgY2FyZHMgdGhhdCBkbyBub3QgY29udGFpbgorKiBhbiBPSENJIGNvbnRyb2xsZXIuIEEgc2ltcGxlIHdheSB0byB0ZXN0IHdoZXRoZXIgYSBQQyBjYXJkIGhhcyBhbgorKiBPSENJIGNvbnRyb2xsZXIgYXMgYW4gaW50ZXJmYWNlIGlzIHRvIGluc2VydCB0aGUgUEMgY2FyZCBkaXJlY3RseQorKiBpbnRvIGEgbGFwdG9wKG9yIGRlc2t0b3ApIHdpdGggYSBDYXJkQnVzIHNsb3QgYW5kIGlmICJsc3BjaSIgc2hvd3MKKyogYSBuZXcgVVNCIGNvbnRyb2xsZXIgYW5kICJsc3VzYiAtdiIgc2hvd3MgYSBuZXcgT0hDSSBIb3N0IENvbnRyb2xsZXIKKyogdGhlbiB0aGVyZSBpcyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIFUxMzIgYWRhcHRlciB3aWxsIHN1cHBvcnQgdGhlCisqIFBDIGNhcmQuKHlvdSBhbHNvIG5lZWQgdGhlIHNwZWNpZmljIGNsaWVudCBkcml2ZXIgZm9yIHRoZSBQQyBjYXJkKQorKgorKiBQbGVhc2UgaW5mb3JtIHRoZSBBdXRob3IgYW5kIE1haW50YWluZXIgYWJvdXQgYW55IFBDIGNhcmRzIHRoYXQKKyogY29udGFpbiBPSENJIEhvc3QgQ29udHJvbGxlciBhbmQgd29yayB3aGVuIGRpcmVjdGx5IGNvbm5lY3RlZCB0bworKiBhbiBlbWJlZGRlZCBDYXJkQnVzIHNsb3QgYnV0IGRvIG5vdCB3b3JrIHdoZW4gdGhleSBhcmUgY29ubmVjdGVkCisqIHZpYSBhbiBFTEFOIFUxMzIgYWRhcHRlci4KKyoKKyovCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tyZWYuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorTU9EVUxFX0FVVEhPUigiVG9ueSBPbGVjaCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGVERJIEVMQU4gZHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisjZGVmaW5lIElOVF9NT0RVTEVfUEFSTShuLCB2KSBzdGF0aWMgaW50IG4gPSB2O21vZHVsZV9wYXJhbShuLCBpbnQsIDA0NDQpCitleHRlcm4gc3RydWN0IHBsYXRmb3JtX2RyaXZlciB1MTMyX3BsYXRmb3JtX2RyaXZlcjsKK3N0YXRpYyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqc3RhdHVzX3F1ZXVlOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpjb21tYW5kX3F1ZXVlOworc3RhdGljIHN0cnVjdCB3b3JrcXVldWVfc3RydWN0ICpyZXNwb25kX3F1ZXVlOworLyoKKyogZnRkaV9tb2R1bGVfbG9jayBleGlzdHMgdG8gcHJvdGVjdCBhY2Nlc3MgdG8gZ2xvYmFsIHZhcmlhYmxlcworKgorKi8KK3N0YXRpYyBzdHJ1Y3Qgc2VtYXBob3JlIGZ0ZGlfbW9kdWxlX2xvY2s7CitzdGF0aWMgaW50IGZ0ZGlfaW5zdGFuY2VzID0gMDsKK3N0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGZ0ZGlfc3RhdGljX2xpc3Q7CisvKgorKiBlbmQgb2YgdGhlIGdsb2JhbCB2YXJpYWJsZXMgcHJvdGVjdGVkIGJ5IGZ0ZGlfbW9kdWxlX2xvY2sKKyovCisjaW5jbHVkZSAidXNiX3UxMzIuaCIKKyNkZWZpbmUgVERfREVWTk9UUkVTUCA1CisvKiBEZWZpbmUgdGhlc2UgdmFsdWVzIHRvIG1hdGNoIHlvdXIgZGV2aWNlcyovCisjZGVmaW5lIFVTQl9GVERJX0VMQU5fVkVORE9SX0lEIDB4MDQwMworI2RlZmluZSBVU0JfRlRESV9FTEFOX1BST0RVQ1RfSUQgMHhkNmVhCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBmdGRpX2VsYW5fdGFibGVbXSA9IHsKKyAgICAgICAge1VTQl9ERVZJQ0UoVVNCX0ZURElfRUxBTl9WRU5ET1JfSUQsIFVTQl9GVERJX0VMQU5fUFJPRFVDVF9JRCl9LAorICAgICAgICB7IC8qIFRlcm1pbmF0aW5nIGVudHJ5ICovIH0KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBmdGRpX2VsYW5fdGFibGUpOworLyogb25seSB0aGUganRhZyhmaXJtd2FyZSB1cGdyYWRlIGRldmljZSkgaW50ZXJmYWNlIHJlcXVpcmVzCisqIGEgZGV2aWNlIGZpbGUgYW5kIGNvcnJlc3BvbmRpbmcgbWlub3IgbnVtYmVyLCBidXQgdGhlCisqIGludGVyZmFjZSBpcyBjcmVhdGVkIHVuY29uZGl0aW9uYWxseSAtIEkgc3VwcG9zZSBpdCBjb3VsZAorKiBiZSBjb25maWd1cmVkIG9yIG5vdCBhY2NvcmRpbmcgdG8gYSBtb2R1bGUgcGFyYW1ldGVyLgorKiBCdXQgc2luY2Ugd2Uobm93KSByZXF1aXJlIG9uZSBpbnRlcmZhY2UgcGVyIGRldmljZSwKKyogYW5kIHNpbmNlIGl0IHVubGlrZWx5IHRoYXQgYSBub3JtYWwgaW5zdGFsbGF0aW9uIHdvdWxkCisqIHJlcXVpcmUgbW9yZSB0aGFuIGEgY291cGxlIG9mIGVsYW4tZnRkaSBkZXZpY2VzLCA4IHNlZW1zCisqIGxpa2UgYSByZWFzb25hYmxlIGxpbWl0IHRvIGhhdmUgaGVyZSwgYW5kIGlmIHNvbWVvbmUKKyogcmVhbGx5IHJlcXVpcmVzIG1vcmUgdGhhbiA4IGRldmljZXMsIHRoZW4gdGhleSBjYW4gZnJpZyB0aGUKKyogY29kZSBhbmQgcmVjb21waWxlCisqLworI2RlZmluZSBVU0JfRlRESV9FTEFOX01JTk9SX0JBU0UgMTkyCisjZGVmaW5lIENPTU1BTkRfQklUUyA1CisjZGVmaW5lIENPTU1BTkRfU0laRSAoMTw8Q09NTUFORF9CSVRTKQorI2RlZmluZSBDT01NQU5EX01BU0sgKENPTU1BTkRfU0laRS0xKQorc3RydWN0IHUxMzJfY29tbWFuZCB7CisgICAgICAgIHU4IGhlYWRlcjsKKyAgICAgICAgdTE2IGxlbmd0aDsKKyAgICAgICAgdTggYWRkcmVzczsKKyAgICAgICAgdTggd2lkdGg7CisgICAgICAgIHUzMiB2YWx1ZTsKKyAgICAgICAgaW50IGZvbGxvd3M7CisgICAgICAgIHZvaWQgKmJ1ZmZlcjsKK307CisjZGVmaW5lIFJFU1BPTkRfQklUUyA1CisjZGVmaW5lIFJFU1BPTkRfU0laRSAoMTw8UkVTUE9ORF9CSVRTKQorI2RlZmluZSBSRVNQT05EX01BU0sgKFJFU1BPTkRfU0laRS0xKQorc3RydWN0IHUxMzJfcmVzcG9uZCB7CisgICAgICAgIHU4IGhlYWRlcjsKKyAgICAgICAgdTggYWRkcmVzczsKKyAgICAgICAgdTMyICp2YWx1ZTsKKyAgICAgICAgaW50ICpyZXN1bHQ7CisgICAgICAgIHN0cnVjdCBjb21wbGV0aW9uIHdhaXRfY29tcGxldGlvbjsKK307CitzdHJ1Y3QgdTEzMl90YXJnZXQgeworICAgICAgICB2b2lkICplbmRwOworICAgICAgICBzdHJ1Y3QgdXJiICp1cmI7CisgICAgICAgIGludCB0b2dnbGVfYml0czsKKyAgICAgICAgaW50IGVycm9yX2NvdW50OworICAgICAgICBpbnQgY29uZGl0aW9uX2NvZGU7CisgICAgICAgIGludCByZXBlYXRfbnVtYmVyOworICAgICAgICBpbnQgaGFsdGVkOworICAgICAgICBpbnQgc2tpcHBlZDsKKyAgICAgICAgaW50IGFjdHVhbDsKKyAgICAgICAgaW50IG5vbl9udWxsOworICAgICAgICBpbnQgYWN0aXZlOworICAgICAgICBpbnQgYWJhbmRvbmluZzsKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsCisgICAgICAgICAgICAgICAgaW50IHJlcGVhdF9udW1iZXIsIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLAorICAgICAgICAgICAgICAgIGludCBub25fbnVsbCk7Cit9OworLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYqLworc3RydWN0IHVzYl9mdGRpIHsKKyAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBmdGRpX2xpc3Q7CisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgdTEzMl9sb2NrOworICAgICAgICBpbnQgY29tbWFuZF9uZXh0OworICAgICAgICBpbnQgY29tbWFuZF9oZWFkOworICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kIGNvbW1hbmRbQ09NTUFORF9TSVpFXTsKKyAgICAgICAgaW50IHJlc3BvbmRfbmV4dDsKKyAgICAgICAgaW50IHJlc3BvbmRfaGVhZDsKKyAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCByZXNwb25kW1JFU1BPTkRfU0laRV07CisgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCB0YXJnZXRbNF07CisgICAgICAgIGNoYXIgZGV2aWNlX25hbWVbMTZdOworICAgICAgICB1bnNpZ25lZCBzeW5jaHJvbml6ZWQ6MTsKKyAgICAgICAgdW5zaWduZWQgZW51bWVyYXRlZDoxOworICAgICAgICB1bnNpZ25lZCByZWdpc3RlcmVkOjE7CisgICAgICAgIHVuc2lnbmVkIGluaXRpYWxpemVkOjE7CisgICAgICAgIHVuc2lnbmVkIGNhcmRfZWplY3RlZDoxOworICAgICAgICBpbnQgZnVuY3Rpb247CisgICAgICAgIGludCBzZXF1ZW5jZV9udW07CisgICAgICAgIGludCBkaXNjb25uZWN0ZWQ7CisgICAgICAgIGludCBnb25lX2F3YXk7CisgICAgICAgIGludCBzdHVja19zdGF0dXM7CisgICAgICAgIGludCBzdGF0dXNfcXVldWVfZGVsYXk7CisgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc3dfbG9jazsKKyAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisgICAgICAgIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2U7CisgICAgICAgIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzczsKKyAgICAgICAgc3RydWN0IHdvcmtfc3RydWN0IHN0YXR1c193b3JrOworICAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgY29tbWFuZF93b3JrOworICAgICAgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgcmVzcG9uZF93b3JrOworICAgICAgICBzdHJ1Y3QgdTEzMl9wbGF0Zm9ybV9kYXRhIHBsYXRmb3JtX2RhdGE7CisgICAgICAgIHN0cnVjdCByZXNvdXJjZSByZXNvdXJjZXNbMF07CisgICAgICAgIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgcGxhdGZvcm1fZGV2OworICAgICAgICB1bnNpZ25lZCBjaGFyICpidWxrX2luX2J1ZmZlcjsKKyAgICAgICAgc2l6ZV90IGJ1bGtfaW5fc2l6ZTsKKyAgICAgICAgc2l6ZV90IGJ1bGtfaW5fbGFzdDsKKyAgICAgICAgc2l6ZV90IGJ1bGtfaW5fbGVmdDsKKyAgICAgICAgX191OCBidWxrX2luX2VuZHBvaW50QWRkcjsKKyAgICAgICAgX191OCBidWxrX291dF9lbmRwb2ludEFkZHI7CisgICAgICAgIHN0cnVjdCBrcmVmIGtyZWY7CisgICAgICAgIHUzMiBjb250cm9scmVnOworICAgICAgICB1OCByZXNwb25zZVs0ICsgMTAyNF07CisgICAgICAgIGludCBleHBlY3RlZDsKKyAgICAgICAgaW50IHJlY2lldmVkOworICAgICAgICBpbnQgZWRfZm91bmQ7Cit9OworI2RlZmluZSBrcmVmX3RvX3VzYl9mdGRpKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2Z0ZGksIGtyZWYpCisjZGVmaW5lIHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9mdGRpLCBcCisgICAgICAgIHBsYXRmb3JtX2RldikKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmdGRpX2VsYW5fZHJpdmVyOworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2RlbGV0ZShzdHJ1Y3Qga3JlZiAqa3JlZikKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0ga3JlZl90b191c2JfZnRkaShrcmVmKTsKKyAgICAgICAgZGV2X3dhcm4oJmZ0ZGktPnVkZXYtPmRldiwgIkZSRUVJTkcgZnRkaT0lcFxuIiwgZnRkaSk7CisgICAgICAgIHVzYl9wdXRfZGV2KGZ0ZGktPnVkZXYpOworICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKyAgICAgICAgZG93bigmZnRkaV9tb2R1bGVfbG9jayk7CisgICAgICAgIGxpc3RfZGVsX2luaXQoJmZ0ZGktPmZ0ZGlfbGlzdCk7CisgICAgICAgIGZ0ZGlfaW5zdGFuY2VzIC09IDE7CisgICAgICAgIHVwKCZmdGRpX21vZHVsZV9sb2NrKTsKKyAgICAgICAga2ZyZWUoZnRkaS0+YnVsa19pbl9idWZmZXIpOworICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciA9IE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9wdXRfa3JlZihzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGtyZWZfcHV0KCZmdGRpLT5rcmVmLCBmdGRpX2VsYW5fZGVsZXRlKTsKK30KKworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2dldF9rcmVmKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAga3JlZl9nZXQoJmZ0ZGktPmtyZWYpOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5faW5pdF9rcmVmKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAga3JlZl9pbml0KCZmdGRpLT5rcmVmKTsKK30KKworc3RhdGljIHZvaWQgZnRkaV9zdGF0dXNfcmVxdWV1ZV93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdW5zaWduZWQgaW50IGRlbHRhKQoreworICAgICAgICBpZiAoZGVsdGEgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhzdGF0dXNfcXVldWUsICZmdGRpLT5zdGF0dXNfd29yaywgZGVsdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlX3dvcmsoc3RhdHVzX3F1ZXVlLCAmZnRkaS0+c3RhdHVzX3dvcmspKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAga3JlZl9wdXQoJmZ0ZGktPmtyZWYsIGZ0ZGlfZWxhbl9kZWxldGUpOworICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfc3RhdHVzX3F1ZXVlX3dvcmsoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1bnNpZ25lZCBpbnQgZGVsdGEpCit7CisgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocXVldWVfZGVsYXllZF93b3JrKHN0YXR1c19xdWV1ZSwgJmZ0ZGktPnN0YXR1c193b3JrLCBkZWx0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICBrcmVmX2dldCgmZnRkaS0+a3JlZik7CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayhzdGF0dXNfcXVldWUsICZmdGRpLT5zdGF0dXNfd29yaykpCisgICAgICAgICAgICAgICAga3JlZl9nZXQoJmZ0ZGktPmtyZWYpOworICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfc3RhdHVzX2NhbmNlbF93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgaWYgKGNhbmNlbF9kZWxheWVkX3dvcmsoJmZ0ZGktPnN0YXR1c193b3JrKSkKKyAgICAgICAgICAgICAgICBrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfY29tbWFuZF9yZXF1ZXVlX3dvcmsoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1bnNpZ25lZCBpbnQgZGVsdGEpCit7CisgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocXVldWVfZGVsYXllZF93b3JrKGNvbW1hbmRfcXVldWUsICZmdGRpLT5jb21tYW5kX3dvcmssCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayhjb21tYW5kX3F1ZXVlLCAmZnRkaS0+Y29tbWFuZF93b3JrKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGtyZWZfcHV0KCZmdGRpLT5rcmVmLCBmdGRpX2VsYW5fZGVsZXRlKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2NvbW1hbmRfcXVldWVfd29yayhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHVuc2lnbmVkIGludCBkZWx0YSkKK3sKKyAgICAgICAgaWYgKGRlbHRhID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChxdWV1ZV9kZWxheWVkX3dvcmsoY29tbWFuZF9xdWV1ZSwgJmZ0ZGktPmNvbW1hbmRfd29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbHRhKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGtyZWZfZ2V0KCZmdGRpLT5rcmVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChxdWV1ZV93b3JrKGNvbW1hbmRfcXVldWUsICZmdGRpLT5jb21tYW5kX3dvcmspKQorICAgICAgICAgICAgICAgIGtyZWZfZ2V0KCZmdGRpLT5rcmVmKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2NvbW1hbmRfY2FuY2VsX3dvcmsoc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmZnRkaS0+Y29tbWFuZF93b3JrKSkKKyAgICAgICAgICAgICAgICBrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfcmVzcG9uc2VfcmVxdWV1ZV93b3JrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKKyAgICAgICAgdW5zaWduZWQgaW50IGRlbHRhKQoreworICAgICAgICBpZiAoZGVsdGEgPiAwKSB7CisgICAgICAgICAgICAgICAgaWYgKHF1ZXVlX2RlbGF5ZWRfd29yayhyZXNwb25kX3F1ZXVlLCAmZnRkaS0+cmVzcG9uZF93b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVsdGEpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXVlX3dvcmsocmVzcG9uZF9xdWV1ZSwgJmZ0ZGktPnJlc3BvbmRfd29yaykpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBrcmVmX3B1dCgmZnRkaS0+a3JlZiwgZnRkaV9lbGFuX2RlbGV0ZSk7CisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgZnRkaV9yZXNwb25kX3F1ZXVlX3dvcmsoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1bnNpZ25lZCBpbnQgZGVsdGEpCit7CisgICAgICAgIGlmIChkZWx0YSA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAocXVldWVfZGVsYXllZF93b3JrKHJlc3BvbmRfcXVldWUsICZmdGRpLT5yZXNwb25kX3dvcmssCisgICAgICAgICAgICAgICAgICAgICAgICBkZWx0YSkpCisgICAgICAgICAgICAgICAgICAgICAgICBrcmVmX2dldCgmZnRkaS0+a3JlZik7CisgICAgICAgIH0gZWxzZSBpZiAocXVldWVfd29yayhyZXNwb25kX3F1ZXVlLCAmZnRkaS0+cmVzcG9uZF93b3JrKSkKKyAgICAgICAgICAgICAgICBrcmVmX2dldCgmZnRkaS0+a3JlZik7CisgICAgICAgIHJldHVybjsKK30KKworc3RhdGljIHZvaWQgZnRkaV9yZXNwb25zZV9jYW5jZWxfd29yayhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGlmIChjYW5jZWxfZGVsYXllZF93b3JrKCZmdGRpLT5yZXNwb25kX3dvcmspKQorICAgICAgICAgICAgICAgIGtyZWZfcHV0KCZmdGRpLT5rcmVmLCBmdGRpX2VsYW5fZGVsZXRlKTsKK30KKwordm9pZCBmdGRpX2VsYW5fZ29uZV9hd2F5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKyAgICAgICAgZnRkaS0+Z29uZV9hd2F5ICs9IDE7CisgICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKK30KKworCitFWFBPUlRfU1lNQk9MX0dQTChmdGRpX2VsYW5fZ29uZV9hd2F5KTsKK3ZvaWQgZnRkaV9yZWxlYXNlX3BsYXRmb3JtX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisgICAgICAgIGRldi0+cGFyZW50ID0gTlVMTDsKK30KKworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2RvX2NhbGxiYWNrKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKKyAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQsIHU4ICpidWZmZXIsIGludCBsZW5ndGgpOworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpOworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2tpY2tfcmVzcG9uZF9xdWV1ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpOworc3RhdGljIGludCBmdGRpX2VsYW5fc2V0dXBPSENJKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9jaGVja2luZ1BDSShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpOworc3RhdGljIGludCBmdGRpX2VsYW5fZW51bWVyYXRlUENJKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zeW5jaHJvbml6ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpOworc3RhdGljIGludCBmdGRpX2VsYW5fc3R1Y2tfd2FpdGluZyhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpOworc3RhdGljIGludCBmdGRpX2VsYW5fY29tbWFuZF9lbmdpbmUoc3RydWN0IHVzYl9mdGRpICpmdGRpKTsKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX3Jlc3BvbmRfZW5naW5lKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9oY2RfaW5pdChzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGludCByZXN1bHQ7CisgICAgICAgIGlmIChmdGRpLT5wbGF0Zm9ybV9kZXYuZGV2LnBhcmVudCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworICAgICAgICBmdGRpX2VsYW5fZ2V0X2tyZWYoZnRkaSk7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEucG90cGcgPSAxMDA7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2RhdGEucmVzZXQgPSBOVUxMOworICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kZXYuaWQgPSBmdGRpLT5zZXF1ZW5jZV9udW07CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5yZXNvdXJjZSA9IGZ0ZGktPnJlc291cmNlczsKKyAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGV2Lm51bV9yZXNvdXJjZXMgPSBBUlJBWV9TSVpFKGZ0ZGktPnJlc291cmNlcyk7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGxhdGZvcm1fZGF0YSA9ICZmdGRpLT5wbGF0Zm9ybV9kYXRhOworICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kZXYuZGV2LnBhcmVudCA9IE5VTEw7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucmVsZWFzZSA9IGZ0ZGlfcmVsZWFzZV9wbGF0Zm9ybV9kZXY7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYuZG1hX21hc2sgPSBOVUxMOworICAgICAgICBzbnByaW50ZihmdGRpLT5kZXZpY2VfbmFtZSwgc2l6ZW9mKGZ0ZGktPmRldmljZV9uYW1lKSwgInUxMzJfaGNkIik7CisgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5uYW1lID0gZnRkaS0+ZGV2aWNlX25hbWU7CisgICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJyZXF1ZXN0aW5nIG1vZHVsZSAnJXMnXG4iLCAidTEzMl9oY2QiKTsKKyAgICAgICAgcmVxdWVzdF9tb2R1bGUoInUxMzJfaGNkIik7CisgICAgICAgIGRldl9pbmZvKCZmdGRpLT51ZGV2LT5kZXYsICJyZWdpc3RlcmluZyAnJXMnXG4iLAorICAgICAgICAgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5uYW1lKTsKKyAgICAgICAgcmVzdWx0ID0gcGxhdGZvcm1fZGV2aWNlX3JlZ2lzdGVyKCZmdGRpLT5wbGF0Zm9ybV9kZXYpOworICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fYWJhbmRvbl9jb21wbGV0aW9ucyhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgIHdoaWxlIChmdGRpLT5yZXNwb25kX25leHQgPiBmdGRpLT5yZXNwb25kX2hlYWQpIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yZXNwb25kICpyZXNwb25kID0gJmZ0ZGktPnJlc3BvbmRbUkVTUE9ORF9NQVNLICYKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbmRfaGVhZCsrXTsKKyAgICAgICAgICAgICAgICAqcmVzcG9uZC0+cmVzdWx0ID0gLUVTSFVURE9XTjsKKyAgICAgICAgICAgICAgICAqcmVzcG9uZC0+dmFsdWUgPSAwOworICAgICAgICAgICAgICAgIGNvbXBsZXRlKCZyZXNwb25kLT53YWl0X2NvbXBsZXRpb24pOworICAgICAgICB9IHVwKCZmdGRpLT51MTMyX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fYWJhbmRvbl90YXJnZXRzKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgaW50IGVkX251bWJlciA9IDQ7CisgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgIHdoaWxlIChlZF9udW1iZXItLSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LT5hY3RpdmUgPT0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5jb25kaXRpb25fY29kZSA9IFREX0RFVk5PVFJFU1A7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIE5VTEwsIDApOworICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZnRkaS0+cmVjaWV2ZWQgPSAwOworICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQ7CisgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKKyAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9mbHVzaF90YXJnZXRzKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgaW50IGVkX251bWJlciA9IDQ7CisgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgIHdoaWxlIChlZF9udW1iZXItLSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKyAgICAgICAgICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAxOworICAgICAgICAgICAgICB3YWl0XzE6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkX251bWJlciA8PCA1KSB8IDB4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0XzE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICB3YWl0XzI6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDkwIHwgKGVkX251bWJlciA8PCA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0XzI7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZ0ZGktPnJlY2lldmVkID0gMDsKKyAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICBmdGRpLT5lZF9mb3VuZCA9IDA7CisgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fY2FuY2VsX3RhcmdldHMoc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBpbnQgZWRfbnVtYmVyID0gNDsKKyAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgd2hpbGUgKGVkX251bWJlci0tID4gMCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF9udW1iZXJdOworICAgICAgICAgICAgICAgIHRhcmdldC0+YWJhbmRvbmluZyA9IDE7CisgICAgICAgICAgICAgIHdhaXQ6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkX251bWJlciA8PCA1KSB8IDB4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9IDB4MDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmdGRpLT5yZWNpZXZlZCA9IDA7CisgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKKyAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAwOworICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDApOworICAgICAgICByZXR1cm47Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9jb21tYW5kX3dvcmsodm9pZCAqZGF0YSkKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZGF0YTsKKyAgICAgICAgaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCByZXR2YWwgPSBmdGRpX2VsYW5fY29tbWFuZF9lbmdpbmUoZnRkaSk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA9PSAtRVNIVVRET1dOKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRU5PREVWKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvbW1hbmQgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgZnRkaV9jb21tYW5kX3JlcXVldWVfd29yayhmdGRpLCBtc2Vjc190b19qaWZmaWVzKDEwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGZ0ZGlfZWxhbl9raWNrX3Jlc3BvbmRfcXVldWUoc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBmdGRpX3Jlc3BvbmRfcXVldWVfd29yayhmdGRpLCAwKTsKKyAgICAgICAgcmV0dXJuOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fcmVzcG9uZF93b3JrKHZvaWQgKmRhdGEpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IGRhdGE7CisgICAgICAgIGlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gZnRkaV9lbGFuX3Jlc3BvbmRfZW5naW5lKGZ0ZGkpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FU0hVVERPV04pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FTk9ERVYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FTk9ERVYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FSUxTRVEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5kaXNjb25uZWN0ZWQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInJlc3BvbmQgZXJyb3IgJWRcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fYWJhbmRvbl9jb21wbGV0aW9ucyhmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9hYmFuZG9uX3RhcmdldHMoZnRkaSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZ0ZGlfcmVzcG9uc2VfcmVxdWV1ZV93b3JrKGZ0ZGksIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KK30KKworCisvKgorKiB0aGUgc3dfbG9jayBpcyBpbml0aWFsbHkgaGVsZCBhbmQgd2lsbCBiZSBmcmVlZAorKiBhZnRlciB0aGUgRlRESSBoYXMgYmVlbiBzeW5jaHJvbml6ZWQKKyoKKyovCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fc3RhdHVzX3dvcmsodm9pZCAqZGF0YSkKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gZGF0YTsKKyAgICAgICAgaW50IHdvcmtfZGVsYXlfaW5fbXNlYyA9IDA7CisgICAgICAgIGlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgZnRkaV9lbGFuX3B1dF9rcmVmKGZ0ZGkpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5zeW5jaHJvbml6ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgIGRvd24oJmZ0ZGktPnN3X2xvY2spOworICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fc3luY2hyb25pemUoZnRkaSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+c3luY2hyb25pemVkID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfY29tbWFuZF9xdWV1ZV93b3JrKGZ0ZGksIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9yZXNwb25kX3F1ZXVlX3dvcmsoZnRkaSwgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+c3dfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInN5bmNocm9uaXplIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+c3dfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMCAqMTAwMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+c3R1Y2tfc3RhdHVzID4gMCkgeworICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fc3R1Y2tfd2FpdGluZyhmdGRpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5zdHVja19zdGF0dXMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+c3luY2hyb25pemVkID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChmdGRpLT5zdHVja19zdGF0dXMrKyAlIDYwKSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJXUk9ORyB0eXBlIG9mIGNhcmQgaW5zZXJ0ZWQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLSBwbGVhc2UgcmVtb3ZlXG4iKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIldST05HIHR5cGUgb2YgY2FyZCBpbnNlcnRlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItIGNoZWNrZWQgJWQgdGltZXNcbiIsIGZ0ZGktPnN0dWNrX3N0YXR1cyk7CisgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTAwOworICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmVudW1lcmF0ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fZW51bWVyYXRlUENJKGZ0ZGkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMjUwOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTAwMDsKKyAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGZ0ZGlfZWxhbl9zZXR1cE9IQ0koZnRkaSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+aW5pdGlhbGl6ZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gNTAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJpbml0aWFsaXplZCBmYWlsZWQgLSB0cnlpbmcgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWdhaW4gaW4gMTAgc2Vjb25kc1xuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAxMCAqMTAwMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+cmVnaXN0ZXJlZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMTA7CisgICAgICAgICAgICAgICAgaWYgKGZ0ZGlfZWxhbl9oY2RfaW5pdChmdGRpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZWdpc3RlcmVkID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgInJlZ2lzdGVyIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMjUwOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChmdGRpX2VsYW5fY2hlY2tpbmdQQ0koZnRkaSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgd29ya19kZWxheV9pbl9tc2VjID0gMjUwOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+Y29udHJvbHJlZyAmIDB4MDA0MDAwMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmdGRpLT5nb25lX2F3YXkgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlBDSSBkZXZpY2UgZWplY3QgY29uIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmaXJtZWQgcGxhdGZvcm1fZGV2LmRldi5wYXJlbnQ9JXAgcGxhdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9ybV9kZXYuZGV2PSVwXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGFyZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdGRpLT5wbGF0Zm9ybV9kZXYuZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm1fZGV2aWNlX3VucmVnaXN0ZXIoJmZ0ZGktPnBsYXRmb3JtX2Rldik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnBsYXRmb3JtX2Rldi5kZXYucGFyZW50ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVnaXN0ZXJlZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVudW1lcmF0ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jYXJkX2VqZWN0ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5pbml0aWFsaXplZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmdvbmVfYXdheSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2ZsdXNoX3RhcmdldHMoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSAyNTA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlBDSSBkZXZpY2UgaGFzIGRpc2FwcGVhcmVkXG4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fY2FuY2VsX3RhcmdldHMoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrX2RlbGF5X2luX21zZWMgPSA1MDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lbnVtZXJhdGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmluaXRpYWxpemVkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZ0ZGlfc3RhdHVzX3JlcXVldWVfd29yayhmdGRpLAorICAgICAgICAgICAgICAgICAgICAgICAgbXNlY3NfdG9famlmZmllcyh3b3JrX2RlbGF5X2luX21zZWMpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KK30KKworCisvKgorKiBmaWxlX29wZXJhdGlvbnMgZm9yIHRoZSBqdGFnIGludGVyZmFjZQorKgorKiB0aGUgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgaXMgaW5jcmVtZW50ZWQgb24gb3BlbigpCisqIGFuZCBkZWNyZW1lbnRlZCBvbiByZWxlYXNlKCkKKyovCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworICAgICAgICBpbnQgc3VibWlub3IgPSBpbWlub3IoaW5vZGUpOworICAgICAgICBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlID0gdXNiX2ZpbmRfaW50ZXJmYWNlKCZmdGRpX2VsYW5fZHJpdmVyLAorICAgICAgICAgICAgICAgIHN1Ym1pbm9yKTsKKyAgICAgICAgaWYgKCFpbnRlcmZhY2UpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNhbid0IGZpbmQgZGV2aWNlIGZvciBtaW5vciAlZFxuIiwgc3VibWlub3IpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZ0ZGkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG93bl9pbnRlcnJ1cHRpYmxlKCZmdGRpLT5zd19sb2NrKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlRSOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2dldF9rcmVmKGZ0ZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlLT5wcml2YXRlX2RhdGEgPSBmdGRpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gKHN0cnVjdCB1c2JfZnRkaSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgaWYgKGZ0ZGkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgdXAoJmZ0ZGktPnN3X2xvY2spOyAgICAgICAgLyogZGVjcmVtZW50IHRoZSBjb3VudCBvbiBvdXIgZGV2aWNlICovCisgICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKKworI2RlZmluZSBGVERJX0VMQU5fSU9DX01BR0lDIDB4QTEKKyNkZWZpbmUgRlRESV9FTEFOX0lPQ0RFQlVHIF9JT0MoX0lPQ19XUklURSwgRlRESV9FTEFOX0lPQ19NQUdJQywgMSwgMTMyKQorc3RhdGljIGludCBmdGRpX2VsYW5faW9jdGwoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUsCisgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworICAgICAgICBzd2l0Y2ggKGNtZCkgeworICAgICAgICBjYXNlIEZURElfRUxBTl9JT0NERUJVRzp7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGxpbmVbMTMyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplID0gc3RybmNweV9mcm9tX3VzZXIobGluZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgX191c2VyICopYXJnLCBzaXplb2YobGluZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNpemUgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJUT0RPOiBpb2N0bCAlc1xuIiwgbGluZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgfQorfQorCisKKy8qCisqCisqIGJsb2NraW5nIGJ1bGsgcmVhZHMgYXJlIHVzZWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlCisqCisqLworc3RhdGljIHNzaXplX3QgZnRkaV9lbGFuX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWZmZXIsCisJCQkgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKyAgICAgICAgY2hhciBkYXRhWzMwICozICsgNF07CisgICAgICAgIGNoYXIgKmQgPSBkYXRhOworICAgICAgICBpbnQgbSA9IChzaXplb2YoZGF0YSkgLSAxKSAvIDM7CisgICAgICAgIGludCBieXRlc19yZWFkID0gMDsKKyAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7CisgICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gKHN0cnVjdCB1c2JfZnRkaSAqKWZpbGUtPnByaXZhdGVfZGF0YTsKKyAgICAgICAgaWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfQorICAgICAgICBkYXRhWzBdID0gMDsKKyAgICAgIGhhdmU6aWYgKGZ0ZGktPmJ1bGtfaW5fbGVmdCA+IDApIHsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnAgPSArK2Z0ZGktPmJ1bGtfaW5fbGFzdCArIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sZWZ0IC09IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnl0ZXNfcmVhZCA8IG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsIDB4MDAwMDAwRkYgJiAqcCk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiBtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb3B5X3RvX3VzZXIoYnVmZmVyKyssIHAsIDEpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXNfcmVhZDsKKyAgICAgICAgfQorICAgICAgbW9yZTppZiAoY291bnQgPiAwKSB7CisgICAgICAgICAgICAgICAgaW50IHBhY2tldF9ieXRlcyA9IDA7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MCkpOworICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2xlZnQgPSBwYWNrZXRfYnl0ZXMgLSAyOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sYXN0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fdGltZW91dC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBieXRlc19yZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR2YWwgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYnl0ZXNfcmVhZDsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBieXRlc19yZWFkOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSAoc3RydWN0IHVzYl9mdGRpICopdXJiLT5jb250ZXh0OworICAgICAgICBpZiAodXJiLT5zdGF0dXMgJiYgISh1cmItPnN0YXR1cyA9PSAtRU5PRU5UIHx8IHVyYi0+c3RhdHVzID09CisgICAgICAgICAgICAgICAgLUVDT05OUkVTRVQgfHwgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJ1cmI9JXAgd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICUiCisgICAgICAgICAgICAgICAgICAgICAgICAiZFxuIiwgdXJiLCB1cmItPnN0YXR1cyk7CisgICAgICAgIH0KKyAgICAgICAgdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisgICAgICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXIsIHVyYi0+dHJhbnNmZXJfZG1hKTsKK30KKworc3RhdGljIGludCBmaWxsX2J1ZmZlcl93aXRoX2FsbF9xdWV1ZWRfY29tbWFuZHMoc3RydWN0IHVzYl9mdGRpICpmdGRpLAorICAgICAgICBjaGFyICpidWYsIGludCBjb21tYW5kX3NpemUsIGludCB0b3RhbF9zaXplKQoreworICAgICAgICBpbnQgZWRfY29tbWFuZHMgPSAwOworICAgICAgICBpbnQgYiA9IDA7CisgICAgICAgIGludCBJID0gY29tbWFuZF9zaXplOworICAgICAgICBpbnQgaSA9IGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgd2hpbGUgKEktLSA+IDApIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbQ09NTUFORF9NQVNLICYKKyAgICAgICAgICAgICAgICAgICAgICAgIGkrK107CisgICAgICAgICAgICAgICAgaW50IEYgPSBjb21tYW5kLT5mb2xsb3dzOworICAgICAgICAgICAgICAgIHU4ICpmID0gY29tbWFuZC0+YnVmZmVyOworICAgICAgICAgICAgICAgIGlmIChjb21tYW5kLT5oZWFkZXIgJiAweDgwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlZF9jb21tYW5kcyB8PSAxIDw8ICgweDMgJiAoY29tbWFuZC0+aGVhZGVyID4+IDUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnVmW2IrK10gPSBjb21tYW5kLT5oZWFkZXI7CisgICAgICAgICAgICAgICAgYnVmW2IrK10gPSAoY29tbWFuZC0+bGVuZ3RoID4+IDApICYgMHgwMEZGOworICAgICAgICAgICAgICAgIGJ1ZltiKytdID0gKGNvbW1hbmQtPmxlbmd0aCA+PiA4KSAmIDB4MDBGRjsKKyAgICAgICAgICAgICAgICBidWZbYisrXSA9IGNvbW1hbmQtPmFkZHJlc3M7CisgICAgICAgICAgICAgICAgYnVmW2IrK10gPSBjb21tYW5kLT53aWR0aDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoRi0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2IrK10gPSAqZisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZWRfY29tbWFuZHM7Cit9CisKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX3RvdGFsX2NvbW1hbmRfc2l6ZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBjb21tYW5kX3NpemUpCit7CisgICAgICAgIGludCB0b3RhbF9zaXplID0gMDsKKyAgICAgICAgaW50IEkgPSBjb21tYW5kX3NpemU7CisgICAgICAgIGludCBpID0gZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICB3aGlsZSAoSS0tID4gMCkgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFtDT01NQU5EX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgaSsrXTsKKyAgICAgICAgICAgICAgICB0b3RhbF9zaXplICs9IDUgKyBjb21tYW5kLT5mb2xsb3dzOworICAgICAgICB9IHJldHVybiB0b3RhbF9zaXplOworfQorCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9jb21tYW5kX2VuZ2luZShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIGNoYXIgKmJ1ZjsKKyAgICAgICAgaW50IGVkX2NvbW1hbmRzOworICAgICAgICBpbnQgdG90YWxfc2l6ZTsKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiOworICAgICAgICBpbnQgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICBpZiAoY29tbWFuZF9zaXplID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHRvdGFsX3NpemUgPSBmdGRpX2VsYW5fdG90YWxfY29tbWFuZF9zaXplKGZ0ZGksIGNvbW1hbmRfc2l6ZSk7CisgICAgICAgIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICghdXJiKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIHVyYiB0byB3cml0ZSAlZCBjb21tIgorICAgICAgICAgICAgICAgICAgICAgICAgImFuZHMgdG90YWxpbmcgJWQgYnl0ZXMgdG8gdGhlIFV4eHhcbiIsIGNvbW1hbmRfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvdGFsX3NpemUpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZnRkaS0+dWRldiwgdG90YWxfc2l6ZSwgR0ZQX0tFUk5FTCwKKyAgICAgICAgICAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOworICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgYSBidWZmZXIgdG8gd3JpdGUgJWQgYyIKKyAgICAgICAgICAgICAgICAgICAgICAgICJvbW1hbmRzIHRvdGFsaW5nICVkIGJ5dGVzIHRvIHRoZSBVeHh4XG4iLCBjb21tYW5kX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgdG90YWxfc2l6ZSk7CisgICAgICAgICAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgIH0KKyAgICAgICAgZWRfY29tbWFuZHMgPSBmaWxsX2J1ZmZlcl93aXRoX2FsbF9xdWV1ZWRfY29tbWFuZHMoZnRkaSwgYnVmLAorICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSwgdG90YWxfc2l6ZSk7CisgICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCB0b3RhbF9zaXplLAorICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKKyAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKyAgICAgICAgaWYgKGVkX2NvbW1hbmRzKSB7CisgICAgICAgICAgICAgICAgY2hhciBkaWFnWzQwICozICsgNF07CisgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CisgICAgICAgICAgICAgICAgaW50IG0gPSB0b3RhbF9zaXplOworICAgICAgICAgICAgICAgIHU4ICpjID0gYnVmOworICAgICAgICAgICAgICAgIGludCBzID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKKyAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocy0tID4gMCAmJiBtLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+IDAgfHwgbSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAqYysrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZmFpbGVkICVkIHRvIHN1Ym1pdCB1cmIgJXAgdG8gd3JpdGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiVkIGNvbW1hbmRzIHRvdGFsaW5nICVkIGJ5dGVzIHRvIHRoZSBVeHh4XG4iLCByZXR2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICB1cmIsIGNvbW1hbmRfc2l6ZSwgdG90YWxfc2l6ZSk7CisgICAgICAgICAgICAgICAgdXNiX2J1ZmZlcl9mcmVlKGZ0ZGktPnVkZXYsIHRvdGFsX3NpemUsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgIH0KKyAgICAgICAgdXNiX2ZyZWVfdXJiKHVyYik7ICAgICAgICAvKiByZWxlYXNlIG91ciByZWZlcmVuY2UgdG8gdGhpcyB1cmIsCisgICAgICAgICAgICAgICAgdGhlIFVTQiBjb3JlIHdpbGwgZXZlbnR1YWxseSBmcmVlIGl0IGVudGlyZWx5ICovCisgICAgICAgIGZ0ZGktPmNvbW1hbmRfaGVhZCArPSBjb21tYW5kX3NpemU7CisgICAgICAgIGZ0ZGlfZWxhbl9raWNrX3Jlc3BvbmRfcXVldWUoZnRkaSk7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fZG9fY2FsbGJhY2soc3RydWN0IHVzYl9mdGRpICpmdGRpLAorICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTggKmJ1ZmZlciwgaW50IGxlbmd0aCkKK3sKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiID0gdGFyZ2V0LT51cmI7CisgICAgICAgIGludCBoYWx0ZWQgPSB0YXJnZXQtPmhhbHRlZDsKKyAgICAgICAgaW50IHNraXBwZWQgPSB0YXJnZXQtPnNraXBwZWQ7CisgICAgICAgIGludCBhY3R1YWwgPSB0YXJnZXQtPmFjdHVhbDsKKyAgICAgICAgaW50IG5vbl9udWxsID0gdGFyZ2V0LT5ub25fbnVsbDsKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzID0gdGFyZ2V0LT50b2dnbGVfYml0czsKKyAgICAgICAgaW50IGVycm9yX2NvdW50ID0gdGFyZ2V0LT5lcnJvcl9jb3VudDsKKyAgICAgICAgaW50IGNvbmRpdGlvbl9jb2RlID0gdGFyZ2V0LT5jb25kaXRpb25fY29kZTsKKyAgICAgICAgaW50IHJlcGVhdF9udW1iZXIgPSB0YXJnZXQtPnJlcGVhdF9udW1iZXI7CisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKiwgc3RydWN0IHVyYiAqLCB1OCAqLCBpbnQsIGludCwgaW50LCBpbnQsIGludCwKKyAgICAgICAgICAgICAgICBpbnQsIGludCwgaW50LCBpbnQpID0gdGFyZ2V0LT5jYWxsYmFjazsKKyAgICAgICAgdGFyZ2V0LT5hY3RpdmUgLT0gMTsKKyAgICAgICAgdGFyZ2V0LT5jYWxsYmFjayA9IE5VTEw7CisgICAgICAgICgqY2FsbGJhY2spICh0YXJnZXQtPmVuZHAsIHVyYiwgYnVmZmVyLCBsZW5ndGgsIHRvZ2dsZV9iaXRzLAorICAgICAgICAgICAgICAgIGVycm9yX2NvdW50LCBjb25kaXRpb25fY29kZSwgcmVwZWF0X251bWJlciwgaGFsdGVkLCBza2lwcGVkLAorICAgICAgICAgICAgICAgIGFjdHVhbCwgbm9uX251bGwpOworfQorCitzdGF0aWMgY2hhciAqaGF2ZV9lZF9zZXRfcmVzcG9uc2Uoc3RydWN0IHVzYl9mdGRpICpmdGRpLAorICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCwgdTE2IGVkX2xlbmd0aCwgaW50IGVkX251bWJlciwgaW50IGVkX3R5cGUsCisgICAgICAgIGNoYXIgKmIpCit7CisgICAgICAgIGludCBwYXlsb2FkID0gKGVkX2xlbmd0aCA+PiAwKSAmIDB4MDdGRjsKKyAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgdGFyZ2V0LT5hY3R1YWwgPSAwOworICAgICAgICB0YXJnZXQtPm5vbl9udWxsID0gKGVkX2xlbmd0aCA+PiAxNSkgJiAweDAwMDE7CisgICAgICAgIHRhcmdldC0+cmVwZWF0X251bWJlciA9IChlZF9sZW5ndGggPj4gMTEpICYgMHgwMDBGOworICAgICAgICBpZiAoZWRfdHlwZSA9PSAweDAyKSB7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgPT0gMCB8fCB0YXJnZXQtPmFiYW5kb25pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVjaWV2ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ0ZGktPnJlc3BvbnNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQgKyBwYXlsb2FkOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWRfdHlwZSA9PSAweDAzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBheWxvYWQgPT0gMCB8fCB0YXJnZXQtPmFiYW5kb25pbmcgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQpOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVjaWV2ZWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZ0ZGktPnJlc3BvbnNlOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5leHBlY3RlZCA9IDQgKyBwYXlsb2FkOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoZWRfdHlwZSA9PSAweDAxKSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKKyAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBmdGRpLT5yZWNpZXZlZCA9IDA7CisgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnRkaS0+cmVzcG9uc2U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMDsKKyAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fZG9fY2FsbGJhY2soZnRkaSwgdGFyZ2V0LCA0ICsgZnRkaS0+cmVzcG9uc2UsCisgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICBmdGRpLT5yZWNpZXZlZCA9IDA7CisgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZnRkaS0+cmVzcG9uc2U7CisgICAgICAgIH0KK30KKworc3RhdGljIGNoYXIgKmhhdmVfZWRfZ2V0X3Jlc3BvbnNlKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwKKyAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQsIHUxNiBlZF9sZW5ndGgsIGludCBlZF9udW1iZXIsIGludCBlZF90eXBlLAorICAgICAgICBjaGFyICpiKQoreworICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICB0YXJnZXQtPmNvbmRpdGlvbl9jb2RlID0gVERfREVWTk9UUkVTUDsKKyAgICAgICAgdGFyZ2V0LT5hY3R1YWwgPSAoZWRfbGVuZ3RoID4+IDApICYgMHgwMUZGOworICAgICAgICB0YXJnZXQtPm5vbl9udWxsID0gKGVkX2xlbmd0aCA+PiAxNSkgJiAweDAwMDE7CisgICAgICAgIHRhcmdldC0+cmVwZWF0X251bWJlciA9IChlZF9sZW5ndGggPj4gMTEpICYgMHgwMDBGOworICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgaWYgKHRhcmdldC0+YWN0aXZlKQorICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9kb19jYWxsYmFjayhmdGRpLCB0YXJnZXQsIE5VTEwsIDApOworICAgICAgICB0YXJnZXQtPmFiYW5kb25pbmcgPSAwOworICAgICAgICBmdGRpLT5yZWNpZXZlZCA9IDA7CisgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKKyAgICAgICAgZnRkaS0+ZWRfZm91bmQgPSAwOworICAgICAgICByZXR1cm4gZnRkaS0+cmVzcG9uc2U7Cit9CisKKworLyoKKyogVGhlIGVuZ2luZSB0cmllcyB0byBlbXB0eSB0aGUgRlRESSBmaWZvCisqCisqIGFsbCByZXNwb25zZXMgZm91bmQgaW4gdGhlIGZpZm8gZGF0YSBhcmUgZGlzcGF0Y2hlZCB0aHVzCisqIHRoZSByZXNwb25zZSBidWZmZXIgY2FuIG9ubHkgZXZlciBob2xkIGEgbWF4aW11bSBzaXplZAorKiByZXNwb25zZSBmcm9tIHRoZSBVeHh4LgorKgorKi8KK3N0YXRpYyBpbnQgZnRkaV9lbGFuX3Jlc3BvbmRfZW5naW5lKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgdTggKmIgPSBmdGRpLT5yZXNwb25zZSArIGZ0ZGktPnJlY2lldmVkOworICAgICAgICBpbnQgYnl0ZXNfcmVhZCA9IDA7CisgICAgICAgIGludCByZXRyeV9vbl9lbXB0eSA9IDE7CisgICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gMzsKKyAgICAgICAgaW50IGVtcHR5X3BhY2tldHMgPSAwOworICAgICAgcmVhZDp7CisgICAgICAgICAgICAgICAgaW50IHBhY2tldF9ieXRlcyA9IDA7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcyg1MDApKTsKKyAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKKyAgICAgICAgICAgICAgICBjaGFyICpkID0gZGlhZzsKKyAgICAgICAgICAgICAgICBpbnQgbSA9IHBhY2tldF9ieXRlczsKKyAgICAgICAgICAgICAgICB1OCAqYyA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyOworICAgICAgICAgICAgICAgIGludCBzID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKKyAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAocy0tID4gMCAmJiBtLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+IDAgfHwgbSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAqYysrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAocGFja2V0X2J5dGVzID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sZWZ0ID0gcGFja2V0X2J5dGVzIC0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fbGFzdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR2YWwgPT0gLUVUSU1FRE9VVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX3RpbWVvdXQtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiVElNRUQgT1VUIHdpdGggcGFja2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRfYnl0ZXMgPSAlZCB3aXRoIHRvdGFsICVkIGJ5dGVzJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChieXRlc19yZWFkID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJPTkxZICVkIGJ5dGVzJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCwgZGlhZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiVElNRUQgT1VUIHdpdGggcGFja2UiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRfYnl0ZXMgPSAlZCB3aXRoIHRvdGFsICVkIGJ5dGVzJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFja2V0X2J5dGVzLCBieXRlc19yZWFkLCBkaWFnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXR2YWwgPT0gLUVJTFNFUSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZXJyb3IgPSAlZCB3aXRoIHBhY2tldF9ieXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA9ICVkIHdpdGggdG90YWwgJWQgYnl0ZXMlc1xuIiwgcmV0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfYnl0ZXMsIGJ5dGVzX3JlYWQsIGRpYWcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZXJyb3IgPSAlZCB3aXRoIHBhY2tldF9ieXRlcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiA9ICVkIHdpdGggdG90YWwgJWQgYnl0ZXMlc1xuIiwgcmV0dmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfYnl0ZXMsIGJ5dGVzX3JlYWQsIGRpYWcpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA9PSAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHMwID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07CisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHMxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBlbXB0eV9wYWNrZXRzICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczAgPT0gMHgzMSAmJiBzMSA9PSAweDYwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl9lbXB0eS0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMwID09IDB4MzEgJiYgczEgPT0gMHgwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgbW9yZTp7CisgICAgICAgICAgICAgICAgZ290byByZWFkOworICAgICAgICB9CisgICAgICBoYXZlOmlmIChmdGRpLT5idWxrX2luX2xlZnQgPiAwKSB7CisgICAgICAgICAgICAgICAgdTggYyA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWysrZnRkaS0+YnVsa19pbl9sYXN0XTsKKyAgICAgICAgICAgICAgICBieXRlc19yZWFkICs9IDE7CisgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9sZWZ0IC09IDE7CisgICAgICAgICAgICAgICAgaWYgKGZ0ZGktPnJlY2lldmVkID09IDAgJiYgYyA9PSAweEZGKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAqYisrID0gYzsKKyAgICAgICAgICAgICAgICBpZiAoKytmdGRpLT5yZWNpZXZlZCA8IGZ0ZGktPmV4cGVjdGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5lZF9mb3VuZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVkX251bWJlciA9IChmdGRpLT5yZXNwb25zZVswXSA+PiA1KSAmIDB4MDM7CisgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZWRfbGVuZ3RoID0gKGZ0ZGktPnJlc3BvbnNlWzJdIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cmVzcG9uc2VbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRfbnVtYmVyXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXlsb2FkID0gKGVkX2xlbmd0aCA+PiAwKSAmIDB4MDdGRjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSA9IHBheWxvYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICB1OCAqYyA9IDQgKyBmdGRpLT5yZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBzID0gKHNpemVvZihkaWFnKSAtIDEpIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRpYWdbMF0gPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHMtLSA+IDAgJiYgbS0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocyA+IDAgfHwgbSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsICpjKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2RvX2NhbGxiYWNrKGZ0ZGksIHRhcmdldCwgNCArIGZ0ZGktPnJlc3BvbnNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXlsb2FkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlY2lldmVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBmdGRpLT5yZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmV4cGVjdGVkID09IDgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4IGJ1c2NtZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXNwb25kX2hlYWQgPSBmdGRpLT5yZXNwb25kX2hlYWQrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3Jlc3BvbmQgKnJlc3BvbmQgPSAmZnRkaS0+cmVzcG9uZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTUE9ORF9NQVNLICYgcmVzcG9uZF9oZWFkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBkYXRhID0gZnRkaS0+cmVzcG9uc2VbN107CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIDw8PSA4OworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSB8PSBmdGRpLT5yZXNwb25zZVs2XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgPDw9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhIHw9IGZ0ZGktPnJlc3BvbnNlWzVdOworICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA8PD0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgfD0gZnRkaS0+cmVzcG9uc2VbNF07CisgICAgICAgICAgICAgICAgICAgICAgICAqcmVzcG9uZC0+dmFsdWUgPSBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgKnJlc3BvbmQtPnJlc3VsdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0ZSgmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlY2lldmVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmV4cGVjdGVkID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmVkX2ZvdW5kID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBmdGRpLT5yZXNwb25zZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1c2NtZCA9IChmdGRpLT5yZXNwb25zZVswXSA+PiAwKSAmIDB4MEY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYnVzY21kID09IDB4MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVzY21kID09IDB4MDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVzY21kID09IDB4MDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnVzY21kID09IDB4MEEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJVeHh4IHVua25vd24oJTBYKSB2YSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibHVlID0gJTA4WFxuIiwgYnVzY21kLCBkYXRhKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmdGRpLT5yZXNwb25zZVswXSAmIDB4ODApID09IDB4MDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA4OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZWRfbnVtYmVyID0gKGZ0ZGktPnJlc3BvbnNlWzBdID4+IDUpICYgMHgwMzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGVkX3R5cGUgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gMCkgJiAweDAzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MTYgZWRfbGVuZ3RoID0gKGZ0ZGktPnJlc3BvbnNlWzJdIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZXNwb25zZVsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0WworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVkX251bWJlcl07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+aGFsdGVkID0gKGZ0ZGktPnJlc3BvbnNlWzBdID4+IDMpICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnNraXBwZWQgPSAoZnRkaS0+cmVzcG9uc2VbMF0gPj4gMikgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+dG9nZ2xlX2JpdHMgPSAoZnRkaS0+cmVzcG9uc2VbM10gPj4gNikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIDB4MDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+ZXJyb3JfY291bnQgPSAoZnRkaS0+cmVzcG9uc2VbM10gPj4gNCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmIDB4MDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y29uZGl0aW9uX2NvZGUgPSAoZnRkaS0+cmVzcG9uc2VbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgM10gPj4gMCkgJiAweDBGOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKGZ0ZGktPnJlc3BvbnNlWzBdICYgMHgxMCkgPT0gMHgwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBoYXZlX2VkX3NldF9yZXNwb25zZShmdGRpLCB0YXJnZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlZF9sZW5ndGgsIGVkX251bWJlciwgZWRfdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gaGF2ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiID0gaGF2ZV9lZF9nZXRfcmVzcG9uc2UoZnRkaSwgdGFyZ2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWRfbGVuZ3RoLCBlZF9udW1iZXIsIGVkX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGhhdmU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKK30KKworCisvKgorKiBjcmVhdGUgYSB1cmIsIGFuZCBhIGJ1ZmZlciBmb3IgaXQsIGFuZCBjb3B5IHRoZSBkYXRhIHRvIHRoZSB1cmIKKyoKKyovCitzdGF0aWMgc3NpemVfdCBmdGRpX2VsYW5fd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmZmVyLCBzaXplX3QgY291bnQsCisJCQkgICAgICAgbG9mZl90ICpwcG9zKQoreworICAgICAgICBpbnQgcmV0dmFsID0gMDsKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiOworICAgICAgICBjaGFyICpidWY7CisgICAgICAgIGNoYXIgZGF0YVszMCAqMyArIDRdOworICAgICAgICBjaGFyICpkID0gZGF0YTsKKyAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnMgPSB1c2VyX2J1ZmZlcjsKKyAgICAgICAgaW50IG0gPSAoc2l6ZW9mKGRhdGEpIC0gMSkgLyAzOworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSAoc3RydWN0IHVzYl9mdGRpICopZmlsZS0+cHJpdmF0ZV9kYXRhOworICAgICAgICBpZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9CisgICAgICAgIGlmIChjb3VudCA9PSAwKSB7CisgICAgICAgICAgICAgICAgZ290byBleGl0OworICAgICAgICB9CisgICAgICAgIHVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmICghdXJiKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yXzE7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gdXNiX2J1ZmZlcl9hbGxvYyhmdGRpLT51ZGV2LCBjb3VudCwgR0ZQX0tFUk5FTCwKKyAgICAgICAgICAgICAgICAmdXJiLT50cmFuc2Zlcl9kbWEpOworICAgICAgICBpZiAoIWJ1ZikgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IC1FTk9NRU07CisgICAgICAgICAgICAgICAgZ290byBlcnJvcl8yOworICAgICAgICB9CisgICAgICAgIGlmIChjb3B5X2Zyb21fdXNlcihidWYsIHVzZXJfYnVmZmVyLCBjb3VudCkpIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtRUZBVUxUOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3JfMzsKKyAgICAgICAgfQorICAgICAgICB1c2JfZmlsbF9idWxrX3VyYih1cmIsIGZ0ZGktPnVkZXYsIHVzYl9zbmRidWxrcGlwZShmdGRpLT51ZGV2LAorICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciksIGJ1ZiwgY291bnQsCisgICAgICAgICAgICAgICAgZnRkaV9lbGFuX3dyaXRlX2J1bGtfY2FsbGJhY2ssIGZ0ZGkpOworICAgICAgICB1cmItPnRyYW5zZmVyX2ZsYWdzIHw9IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOworICAgICAgICByZXR2YWwgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAocmV0dmFsKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlIgorICAgICAgICAgICAgICAgICAgICAgICAgImRcbiIsIHJldHZhbCk7CisgICAgICAgICAgICAgICAgZ290byBlcnJvcl80OworICAgICAgICB9CisgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgZXhpdDo7CisgICAgICAgIGlmIChjb3VudCA+IG0pIHsKKyAgICAgICAgICAgICAgICBpbnQgSSA9IG0gLSAxOworICAgICAgICAgICAgICAgIHdoaWxlIChJLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAlMDJYIiwgMHgwMDAwMDBGRiAmICpzKyspOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkICs9IHNwcmludGYoZCwgIiAuLiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBJID0gY291bnQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKEktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiICUwMlgiLCAweDAwMDAwMEZGICYgKnMrKyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBjb3VudDsKKyAgICAgIGVycm9yXzQ6IGVycm9yXzM6dXNiX2J1ZmZlcl9mcmVlKGZ0ZGktPnVkZXYsIGNvdW50LCBidWYsCisgICAgICAgICAgICAgIHVyYi0+dHJhbnNmZXJfZG1hKTsKKyAgICAgIGVycm9yXzI6dXNiX2ZyZWVfdXJiKHVyYik7CisgICAgICBlcnJvcl8xOnJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ0ZGlfZWxhbl9mb3BzID0geworICAgICAgICAub3duZXIgPSBUSElTX01PRFVMRSwKKyAgICAgICAgLmxsc2VlayA9IG5vX2xsc2VlaywKKyAgICAgICAgLmlvY3RsID0gZnRkaV9lbGFuX2lvY3RsLAorICAgICAgICAucmVhZCA9IGZ0ZGlfZWxhbl9yZWFkLAorICAgICAgICAud3JpdGUgPSBmdGRpX2VsYW5fd3JpdGUsCisgICAgICAgIC5vcGVuID0gZnRkaV9lbGFuX29wZW4sCisgICAgICAgIC5yZWxlYXNlID0gZnRkaV9lbGFuX3JlbGVhc2UsCit9OworCisvKgorKiB1c2IgY2xhc3MgZHJpdmVyIGluZm8gaW4gb3JkZXIgdG8gZ2V0IGEgbWlub3IgbnVtYmVyIGZyb20gdGhlIHVzYiBjb3JlLAorKiBhbmQgdG8gaGF2ZSB0aGUgZGV2aWNlIHJlZ2lzdGVyZWQgd2l0aCB0aGUgZHJpdmVyIGNvcmUKKyovCitzdGF0aWMgc3RydWN0IHVzYl9jbGFzc19kcml2ZXIgZnRkaV9lbGFuX2p0YWdfY2xhc3MgPSB7CisgICAgICAgIC5uYW1lID0gImZ0ZGktJWQtanRhZyIsCisgICAgICAgIC5mb3BzID0gJmZ0ZGlfZWxhbl9mb3BzLAorICAgICAgICAubWlub3JfYmFzZSA9IFVTQl9GVERJX0VMQU5fTUlOT1JfQkFTRSwKK307CisKKy8qCisqIHRoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXJlIGZvciB0aGUKKyogRUxBTiBGUEdBIHN0YXRlIG1hY2hnaW5lIHByb2Nlc3NvciB0aGF0CisqIGxpZXMgb24gdGhlIG90aGVyIHNpZGUgb2YgdGhlIEZUREkgY2hpcAorKi8KKyNkZWZpbmUgY1BDSXUxMzJyZCAweDAKKyNkZWZpbmUgY1BDSXUxMzJ3ciAweDEKKyNkZWZpbmUgY1BDSWlvcmQgMHgyCisjZGVmaW5lIGNQQ0lpb3dyIDB4MworI2RlZmluZSBjUENJbWVtcmQgMHg2CisjZGVmaW5lIGNQQ0ltZW13ciAweDcKKyNkZWZpbmUgY1BDSWNmZ3JkIDB4QQorI2RlZmluZSBjUENJY2Znd3IgMHhCCisjZGVmaW5lIGNQQ0ludWxsIDB4RgorI2RlZmluZSBjVTEzMmNtZF9zdGF0dXMgMHgwCisjZGVmaW5lIGNVMTMyZmxhc2ggMHgxCisjZGVmaW5lIGNQSURzZXR1cCAweDAKKyNkZWZpbmUgY1BJRG91dCAweDEKKyNkZWZpbmUgY1BJRGluIDB4MgorI2RlZmluZSBjUElEaW5vbmNlIDB4MworI2RlZmluZSBjQ0Nub2Vycm9yIDB4MAorI2RlZmluZSBjQ0NjcmMgMHgxCisjZGVmaW5lIGNDQ2JpdHN0dWZmIDB4MgorI2RlZmluZSBjQ0N0b2dnbGUgMHgzCisjZGVmaW5lIGNDQ3N0YWxsIDB4NAorI2RlZmluZSBjQ0Nub3Jlc3AgMHg1CisjZGVmaW5lIGNDQ2JhZHBpZDEgMHg2CisjZGVmaW5lIGNDQ2JhZHBpZDIgMHg3CisjZGVmaW5lIGNDQ2RhdGFvdmVycnVuIDB4OAorI2RlZmluZSBjQ0NkYXRhdW5kZXJydW4gMHg5CisjZGVmaW5lIGNDQ2J1ZmZvdmVycnVuIDB4QworI2RlZmluZSBjQ0NidWZmdW5kZXJydW4gMHhECisjZGVmaW5lIGNDQ25vdGFjY2Vzc2VkIDB4Rgorc3RhdGljIGludCBmdGRpX2VsYW5fd3JpdGVfcmVnKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdTMyIGRhdGEpCit7CisgICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgY1BDSXUxMzJ3cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fd3JpdGVfY29uZmlnKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgaW50IGNvbmZpZ19vZmZzZXQsCisgICAgICAgIHU4IHdpZHRoLCB1MzIgZGF0YSkKK3sKKyAgICAgICAgdTggYWRkcmVzc29mcyA9IGNvbmZpZ19vZmZzZXQgLyA0OworICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemU7CisgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IChjUENJY2Znd3IgJiAweDBGKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gYWRkcmVzc29mczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMCB8ICh3aWR0aCAmIDB4MEYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSAmY29tbWFuZC0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgbWVtX29mZnNldCwKKyAgICAgICAgdTggd2lkdGgsIHUzMiBkYXRhKQoreworICAgICAgICB1OCBhZGRyZXNzb2ZzID0gbWVtX29mZnNldCAvIDQ7CisgICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgKGNQQ0ltZW13ciAmIDB4MEYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9ICZjb21tYW5kLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2ludCB1c2JfZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBpbnQgbWVtX29mZnNldCwKKyAgICAgICAgdTggd2lkdGgsIHUzMiBkYXRhKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7CisgICAgICAgIHJldHVybiBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIG1lbV9vZmZzZXQsIHdpZHRoLCBkYXRhKTsKK30KKworCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZnRkaV9lbGFuX3dyaXRlX3BjaW1lbSk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9yZWFkX3JlZyhzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHUzMiAqZGF0YSkKK3sKKyAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOworICAgICAgICAgICAgICAgIGludCByZXNwb25kX3NpemU7CisgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgcmVzcG9uZF9zaXplID0gZnRkaS0+cmVzcG9uZF9uZXh0IC0gZnRkaS0+cmVzcG9uZF9oZWFkOworICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUgJiYgcmVzcG9uZF9zaXplIDwgUkVTUE9ORF9TSVpFKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfcmVzcG9uZCAqcmVzcG9uZCA9ICZmdGRpLT5yZXNwb25kWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVNQT05EX01BU0sgJiBmdGRpLT5yZXNwb25kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IC1FTk9ERVY7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5yZXN1bHQgPSAmcmVzdWx0OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+aGVhZGVyID0gY29tbWFuZC0+aGVhZGVyID0gMHgwMCB8IGNQQ0l1MTMycmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDA0OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBjVTEzMmNtZF9zdGF0dXM7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IDB4MDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT52YWx1ZSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2ludCB1c2JfZnRkaV9lbGFuX3JlYWRfcmVnKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHUzMiAqZGF0YSkKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworICAgICAgICByZXR1cm4gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksIGRhdGEpOworfQorCisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fcmVhZF9yZWcpOworc3RhdGljIGludCBmdGRpX2VsYW5fcmVhZF9jb25maWcoc3RydWN0IHVzYl9mdGRpICpmdGRpLCBpbnQgY29uZmlnX29mZnNldCwKKyAgICAgICAgdTggd2lkdGgsIHUzMiAqZGF0YSkKK3sKKyAgICAgICAgdTggYWRkcmVzc29mcyA9IGNvbmZpZ19vZmZzZXQgLyA0OworICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemU7CisgICAgICAgICAgICAgICAgaW50IHJlc3BvbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgICAgICAgICByZXNwb25kX3NpemUgPSBmdGRpLT5yZXNwb25kX25leHQgLSBmdGRpLT5yZXNwb25kX2hlYWQ7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSAmJiByZXNwb25kX3NpemUgPCBSRVNQT05EX1NJWkUpCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9yZXNwb25kICpyZXNwb25kID0gJmZ0ZGktPnJlc3BvbmRbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJFU1BPTkRfTUFTSyAmIGZ0ZGktPnJlc3BvbmRfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmQtPnJlc3VsdCA9ICZyZXN1bHQ7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT5oZWFkZXIgPSBjb21tYW5kLT5oZWFkZXIgPSAweDAwIHwgKGNQQ0ljZmdyZCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MEYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHgwNDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmQtPmFkZHJlc3MgPSBjb21tYW5kLT5hZGRyZXNzID0gYWRkcmVzc29mczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMCB8ICh3aWR0aCAmIDB4MEYpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+dmFsdWUgPSBkYXRhOworICAgICAgICAgICAgICAgICAgICAgICAgaW5pdF9jb21wbGV0aW9uKCZyZXNwb25kLT53YWl0X2NvbXBsZXRpb24pOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5yZXNwb25kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIGludCBtZW1fb2Zmc2V0LAorICAgICAgICB1OCB3aWR0aCwgdTMyICpkYXRhKQoreworICAgICAgICB1OCBhZGRyZXNzb2ZzID0gbWVtX29mZnNldCAvIDQ7CisgICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBpbnQgcmVzcG9uZF9zaXplOworICAgICAgICAgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICAgICAgICAgIHJlc3BvbmRfc2l6ZSA9IGZ0ZGktPnJlc3BvbmRfbmV4dCAtIGZ0ZGktPnJlc3BvbmRfaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFICYmIHJlc3BvbmRfc2l6ZSA8IFJFU1BPTkRfU0laRSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3Jlc3BvbmQgKnJlc3BvbmQgPSAmZnRkaS0+cmVzcG9uZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVTUE9ORF9NQVNLICYgZnRkaS0+cmVzcG9uZF9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXN1bHQgPSAtRU5PREVWOworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+cmVzdWx0ID0gJnJlc3VsdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbmQtPmhlYWRlciA9IGNvbW1hbmQtPmhlYWRlciA9IDB4MDAgfCAoY1BDSW1lbXJkICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwRik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDA0OworICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uZC0+YWRkcmVzcyA9IGNvbW1hbmQtPmFkZHJlc3MgPSBhZGRyZXNzb2ZzOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSAweDAwIHwgKHdpZHRoICYgMHgwRik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25kLT52YWx1ZSA9IGRhdGE7CisgICAgICAgICAgICAgICAgICAgICAgICBpbml0X2NvbXBsZXRpb24oJnJlc3BvbmQtPndhaXRfY29tcGxldGlvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlc3BvbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgd2FpdF9mb3JfY29tcGxldGlvbigmcmVzcG9uZC0+d2FpdF9jb21wbGV0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2ludCB1c2JfZnRkaV9lbGFuX3JlYWRfcGNpbWVtKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIGludCBtZW1fb2Zmc2V0LAorICAgICAgICB1OCB3aWR0aCwgdTMyICpkYXRhKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7CisgICAgICAgIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgbWVtX29mZnNldCwgd2lkdGgsIGRhdGEpOworfQorCisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fcmVhZF9wY2ltZW0pOworc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfc2V0dXAoc3RydWN0IHVzYl9mdGRpICpmdGRpLCB1OCBlZF9udW1iZXIsCisgICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQoreworICAgICAgICB1OCBlZCA9IGVkX251bWJlciAtIDE7CisgICAgICB3YWl0OmlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGludCBjb21tYW5kX3NpemU7CisgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBjb21tYW5kX3NpemUgPSBmdGRpLT5jb21tYW5kX25leHQgLSBmdGRpLT5jb21tYW5kX2hlYWQ7CisgICAgICAgICAgICAgICAgaWYgKGNvbW1hbmRfc2l6ZSA8IENPTU1BTkRfU0laRSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmhlYWRlciA9IDB4ODAgfCAoZWQgPDwgNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDgwMDc7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gKHRvZ2dsZV9iaXRzIDw8IDYpIHwgKGVwX251bWJlciA8PCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChhZGRyZXNzIDw8IDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDg7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSB1cmItPnNldHVwX3BhY2tldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+ZW5kcCA9IGVuZHA7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnVyYiA9IHVyYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+YWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X3NldHVwKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKyAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9zZXR1cChmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7Cit9CisKKworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9zZXR1cCk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9lZHNldF9pbnB1dChzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHU4IGVkID0gZWRfbnVtYmVyIC0gMTsKKyAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbWFpbmluZ19sZW5ndGggPSB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmItPmFjdHVhbF9sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgyIHwgKGVkIDw8IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlbWFpbmluZ19sZW5ndGggPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDAwMDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlbWFpbmluZ19sZW5ndGggPiAxMDI0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4ODAwMCB8IDEwMjM7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgKHJlbWFpbmluZ19sZW5ndGggLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9ICh0b2dnbGVfYml0cyA8PCA2KSB8IChlcF9udW1iZXIgPDwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+dmFsdWUgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+Y2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+ZW5kcCA9IGVuZHA7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPnVyYiA9IHVyYjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+YWN0aXZlID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaV9lbGFuX2tpY2tfY29tbWFuZF9xdWV1ZShmdGRpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHVwKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9Cit9CisKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X2lucHV0KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKyAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9pbnB1dChmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7Cit9CisKKworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9pbnB1dCk7CitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9lZHNldF9lbXB0eShzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGksIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHU4IGVkID0gZWRfbnVtYmVyIC0gMTsKKyAgICAgIHdhaXQ6aWYgKGZ0ZGktPmRpc2Nvbm5lY3RlZCA+IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIGlmIChmdGRpLT5pbml0aWFsaXplZCA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZTsKKyAgICAgICAgICAgICAgICBkb3duKCZmdGRpLT51MTMyX2xvY2spOworICAgICAgICAgICAgICAgIGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtIGZ0ZGktPmNvbW1hbmRfaGVhZDsKKyAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl90YXJnZXQgKnRhcmdldCA9ICZmdGRpLT50YXJnZXRbZWRdOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9ICZmdGRpLT5jb21tYW5kWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT01NQU5EX01BU0sgJiBmdGRpLT5jb21tYW5kX25leHRdOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+aGVhZGVyID0gMHg4MSB8IChlZCA8PCA1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAodG9nZ2xlX2JpdHMgPDwgNikgfCAoZXBfbnVtYmVyIDw8IDIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKGFkZHJlc3MgPDwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT53aWR0aCA9IHVzYl9tYXhwYWNrZXQodXJiLT5kZXYsIHVyYi0+cGlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3BpcGVvdXQodXJiLT5waXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmVuZHAgPSBlbmRwOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT51cmIgPSB1cmI7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitpbnQgdXNiX2Z0ZGlfZWxhbl9lZHNldF9lbXB0eShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCBlZF9udW1iZXIsCisgICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7CisgICAgICAgIHJldHVybiBmdGRpX2VsYW5fZWRzZXRfZW1wdHkoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworfQorCisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fZWRzZXRfZW1wdHkpOworc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfb3V0cHV0KHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisgICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKK3sKKyAgICAgICAgdTggZWQgPSBlZF9udW1iZXIgLSAxOworICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOworICAgICAgICAgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHU4ICpiOworICAgICAgICAgICAgICAgICAgICAgICAgdTE2IHVyYl9zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGkgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkYXRhWzMwICozICsgNF07CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkID0gZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBtID0gKHNpemVvZihkYXRhKSAtIDEpIC8gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCBsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdTEzMl9jb21tYW5kICpjb21tYW5kID0gJmZ0ZGktPmNvbW1hbmRbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTU1BTkRfTUFTSyAmIGZ0ZGktPmNvbW1hbmRfbmV4dF07CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgxIHwgKGVkIDw8IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YWRkcmVzcyA9ICh0b2dnbGVfYml0cyA8PCA2KSB8IChlcF9udW1iZXIgPDwgMikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAoYWRkcmVzcyA8PCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gdXNiX21heHBhY2tldCh1cmItPmRldiwgdXJiLT5waXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcGlwZW91dCh1cmItPnBpcGUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmZvbGxvd3MgPSBtaW4oMTAyNCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPnZhbHVlID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmJ1ZmZlciA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgKGNvbW1hbmQtPmZvbGxvd3MgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGIgPSBjb21tYW5kLT5idWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICB1cmJfc2l6ZSA9IGNvbW1hbmQtPmZvbGxvd3M7CisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICh1cmJfc2l6ZS0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpKysgPCBtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHcgPSBzcHJpbnRmKGQsICIgJTAyWCIsICpiKyspOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gdzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsICs9IHc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmVuZHAgPSBlbmRwOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT51cmIgPSB1cmI7CisgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQtPmFjdGl2ZSA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5jb21tYW5kX25leHQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1cCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byB3YWl0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCitpbnQgdXNiX2Z0ZGlfZWxhbl9lZHNldF9vdXRwdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisgICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKK3sKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0gcGxhdGZvcm1fZGV2aWNlX3RvX3VzYl9mdGRpKHBkZXYpOworICAgICAgICByZXR1cm4gZnRkaV9lbGFuX2Vkc2V0X291dHB1dChmdGRpLCBlZF9udW1iZXIsIGVuZHAsIHVyYiwgYWRkcmVzcywKKyAgICAgICAgICAgICAgICBlcF9udW1iZXIsIHRvZ2dsZV9iaXRzLCBjYWxsYmFjayk7Cit9CisKKworRVhQT1JUX1NZTUJPTF9HUEwodXNiX2Z0ZGlfZWxhbl9lZHNldF9vdXRwdXQpOworc3RhdGljIGludCBmdGRpX2VsYW5fZWRzZXRfc2luZ2xlKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisgICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSkKK3sKKyAgICAgICAgdTggZWQgPSBlZF9udW1iZXIgLSAxOworICAgICAgd2FpdDppZiAoZnRkaS0+ZGlzY29ubmVjdGVkID4gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgaWYgKGZ0ZGktPmluaXRpYWxpemVkID09IDApIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgY29tbWFuZF9zaXplOworICAgICAgICAgICAgICAgIGRvd24oJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgY29tbWFuZF9zaXplID0gZnRkaS0+Y29tbWFuZF9uZXh0IC0gZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICAgICAgICAgIGlmIChjb21tYW5kX3NpemUgPCBDT01NQU5EX1NJWkUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludCByZW1haW5pbmdfbGVuZ3RoID0gdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoIC0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoOworICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfdGFyZ2V0ICp0YXJnZXQgPSAmZnRkaS0+dGFyZ2V0W2VkXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX2NvbW1hbmQgKmNvbW1hbmQgPSAmZnRkaS0+Y29tbWFuZFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09NTUFORF9NQVNLICYgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmhlYWRlciA9IDB4ODMgfCAoZWQgPDwgNSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtYWluaW5nX2xlbmd0aCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmxlbmd0aCA9IDB4MDAwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVtYWluaW5nX2xlbmd0aCA+IDEwMjQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+bGVuZ3RoID0gMHg4MDAwIHwgMTAyMzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDgwMDAgfCAocmVtYWluaW5nX2xlbmd0aCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5hZGRyZXNzID0gKHRvZ2dsZV9iaXRzIDw8IDYpIHwgKGVwX251bWJlciA8PCAyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IChhZGRyZXNzIDw8IDApOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+d2lkdGggPSB1c2JfbWF4cGFja2V0KHVyYi0+ZGV2LCB1cmItPnBpcGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYl9waXBlb3V0KHVyYi0+cGlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+Zm9sbG93cyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5idWZmZXIgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5jYWxsYmFjayA9IGNhbGxiYWNrOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5lbmRwID0gZW5kcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldC0+dXJiID0gdXJiOworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hY3RpdmUgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpX2VsYW5fa2lja19jb21tYW5kX3F1ZXVlKGZ0ZGkpOworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoMTAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gd2FpdDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworaW50IHVzYl9mdGRpX2VsYW5fZWRzZXRfc2luZ2xlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaSA9IHBsYXRmb3JtX2RldmljZV90b191c2JfZnRkaShwZGV2KTsKKyAgICAgICAgcmV0dXJuIGZ0ZGlfZWxhbl9lZHNldF9zaW5nbGUoZnRkaSwgZWRfbnVtYmVyLCBlbmRwLCB1cmIsIGFkZHJlc3MsCisgICAgICAgICAgICAgICAgZXBfbnVtYmVyLCB0b2dnbGVfYml0cywgY2FsbGJhY2spOworfQorCisKK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9mdGRpX2VsYW5fZWRzZXRfc2luZ2xlKTsKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwKQoreworICAgICAgICB1OCBlZCA9IGVkX251bWJlciAtIDE7CisgICAgICAgIGlmIChmdGRpLT5kaXNjb25uZWN0ZWQgPiAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9ERVY7CisgICAgICAgIH0gZWxzZSBpZiAoZnRkaS0+aW5pdGlhbGl6ZWQgPT0gMCkgeworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHN0cnVjdCB1MTMyX3RhcmdldCAqdGFyZ2V0ID0gJmZ0ZGktPnRhcmdldFtlZF07CisgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAodGFyZ2V0LT5hYmFuZG9uaW5nID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0LT5hYmFuZG9uaW5nID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICB3YWl0XzE6aWYgKHRhcmdldC0+YWN0aXZlID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW1hbmRfc2l6ZSA9IGZ0ZGktPmNvbW1hbmRfbmV4dCAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9oZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWFuZF9zaXplIDwgQ09NTUFORF9TSVpFKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHUxMzJfY29tbWFuZCAqY29tbWFuZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZnRkaS0+Y29tbWFuZFtDT01NQU5EX01BU0sgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y29tbWFuZF9uZXh0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5oZWFkZXIgPSAweDgwIHwgKGVkIDw8IDUpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5sZW5ndGggPSAweDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPmFkZHJlc3MgPSAweDAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQtPndpZHRoID0gMHgwMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT5mb2xsb3dzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLT52YWx1ZSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZC0+YnVmZmVyID0gJmNvbW1hbmQtPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNvbW1hbmRfbmV4dCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9raWNrX2NvbW1hbmRfcXVldWUoZnRkaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDEwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bigmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHdhaXRfMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgdXAoJmZ0ZGktPnUxMzJfbG9jayk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworaW50IHVzYl9mdGRpX2VsYW5fZWRzZXRfZmx1c2goc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSBwbGF0Zm9ybV9kZXZpY2VfdG9fdXNiX2Z0ZGkocGRldik7CisgICAgICAgIHJldHVybiBmdGRpX2VsYW5fZWRzZXRfZmx1c2goZnRkaSwgZWRfbnVtYmVyLCBlbmRwKTsKK30KKworCitFWFBPUlRfU1lNQk9MX0dQTCh1c2JfZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKTsKK3N0YXRpYyBpbnQgZnRkaV9lbGFuX2ZsdXNoX2lucHV0X2ZpZm8oc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBpbnQgcmV0cnlfb25fZW1wdHkgPSAxMDsKKyAgICAgICAgaW50IHJldHJ5X29uX3RpbWVvdXQgPSA1OworICAgICAgICBpbnQgcmV0cnlfb25fc3RhdHVzID0gMjA7CisgICAgICBtb3JlOnsKKyAgICAgICAgICAgICAgICBpbnQgcGFja2V0X2J5dGVzID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgcmV0dmFsID0gdXNiX2J1bGtfbXNnKGZ0ZGktPnVkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyLCBmdGRpLT5idWxrX2luX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDEwMCkpOworICAgICAgICAgICAgICAgIGlmIChwYWNrZXRfYnl0ZXMgPiAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRpYWdbMzAgKjMgKyA0XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IG0gPSAoc2l6ZW9mKGRpYWcpIC0gMSkgLyAzOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYiA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyOworICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzX3JlYWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ1swXSA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAocGFja2V0X2J5dGVzLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYyA9ICpiKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkIDwgbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiICUwMlgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDBGRiAmIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ5dGVzX3JlYWQgPiBtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzX3JlYWQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG1vcmU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHMxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIHMyID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMV07CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoczEgPT0gMHgzMSAmJiBzMiA9PSAweDYwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXRyeV9vbl9zdGF0dXMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiU1RBVFVTIEVSUk9SIHJldHJ5IGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBiMSA9IGZ0ZGktPmJ1bGtfaW5fYnVmZmVyWzBdOworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAib25seSBvbmUgYnl0ZSBmbHVzaGVkIGZyb20gRiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRESSA9ICUwMlhcbiIsIGIxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl9zdGF0dXMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiU1RBVFVTIEVSUk9SIHJldHJ5IGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZXRyeSBsaW1pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IHJlYWNoZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZW1wdHkgcGFja2V0IHJldHJ5IGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLCByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIC0xOworfQorCisKKy8qCisqIHNlbmQgdGhlIGxvbmcgZmx1c2ggc2VxdWVuY2UKKyoKKyovCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zeW5jaHJvbml6ZV9mbHVzaChzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkpCit7CisgICAgICAgIGludCByZXR2YWw7CisgICAgICAgIHN0cnVjdCB1cmIgKnVyYjsKKyAgICAgICAgY2hhciAqYnVmOworICAgICAgICBpbnQgSSA9IDI1NzsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAoIXVyYikgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvdWxkIG5vdCBhbGxvYyBhIHVyYiBmb3IgZmx1c2ggc2VxdSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJlbmNlXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorICAgICAgICBidWYgPSB1c2JfYnVmZmVyX2FsbG9jKGZ0ZGktPnVkZXYsIEksIEdGUF9LRVJORUwsICZ1cmItPnRyYW5zZmVyX2RtYSk7CisgICAgICAgIGlmICghYnVmKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiY291bGQgbm90IGdldCBhIGJ1ZmZlciBmb3IgZmx1c2ggc2VxIgorICAgICAgICAgICAgICAgICAgICAgICAgInVlbmNlXG4iKTsKKyAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoSS0tID4gMCkKKyAgICAgICAgICAgICAgICBidWZbaSsrXSA9IDB4NTU7CisgICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAorICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKKyAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKyAgICAgICAgcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzdWJtaXQgdXJiIGNvbnRhaW5pbmcgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJmbHVzaCBzZXF1ZW5jZVxuIik7CisgICAgICAgICAgICAgICAgdXNiX2J1ZmZlcl9mcmVlKGZ0ZGktPnVkZXYsIGksIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICByZXR1cm4gMDsKK30KKworCisvKgorKiBzZW5kIHRoZSByZXNldCBzZXF1ZW5jZQorKgorKi8KK3N0YXRpYyBpbnQgZnRkaV9lbGFuX3N5bmNocm9uaXplX3Jlc2V0KHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgaW50IHJldHZhbDsKKyAgICAgICAgc3RydWN0IHVyYiAqdXJiOworICAgICAgICBjaGFyICpidWY7CisgICAgICAgIGludCBJID0gNDsKKyAgICAgICAgaW50IGkgPSAwOworICAgICAgICB1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOworICAgICAgICBpZiAoIXVyYikgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImNvdWxkIG5vdCBnZXQgYSB1cmIgZm9yIHRoZSByZXNldCBzZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICJxdWVuY2VcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIGJ1ZiA9IHVzYl9idWZmZXJfYWxsb2MoZnRkaS0+dWRldiwgSSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKyAgICAgICAgaWYgKCFidWYpIHsKKyAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJjb3VsZCBub3QgZ2V0IGEgYnVmZmVyIGZvciB0aGUgcmVzZXQiCisgICAgICAgICAgICAgICAgICAgICAgICAiIHNlcXVlbmNlXG4iKTsKKyAgICAgICAgICAgICAgICB1c2JfZnJlZV91cmIodXJiKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgfQorICAgICAgICBidWZbaSsrXSA9IDB4NTU7CisgICAgICAgIGJ1ZltpKytdID0gMHhBQTsKKyAgICAgICAgYnVmW2krK10gPSAweDVBOworICAgICAgICBidWZbaSsrXSA9IDB4QTU7CisgICAgICAgIHVzYl9maWxsX2J1bGtfdXJiKHVyYiwgZnRkaS0+dWRldiwgdXNiX3NuZGJ1bGtwaXBlKGZ0ZGktPnVkZXYsCisgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19vdXRfZW5kcG9pbnRBZGRyKSwgYnVmLCBpLAorICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl93cml0ZV9idWxrX2NhbGxiYWNrLCBmdGRpKTsKKyAgICAgICAgdXJiLT50cmFuc2Zlcl9mbGFncyB8PSBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKKyAgICAgICAgcmV0dmFsID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKyAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzdWJtaXQgdXJiIGNvbnRhaW5pbmcgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZXNldCBzZXF1ZW5jZVxuIik7CisgICAgICAgICAgICAgICAgdXNiX2J1ZmZlcl9mcmVlKGZ0ZGktPnVkZXYsIGksIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworICAgICAgICAgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIHVzYl9mcmVlX3VyYih1cmIpOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fc3luY2hyb25pemUoc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBpbnQgcmV0dmFsOworICAgICAgICBpbnQgbG9uZ19zdG9wID0gMTA7CisgICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKKyAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7CisgICAgICAgIGludCBlcnJfY291bnQgPSAwOworICAgICAgICByZXR2YWwgPSBmdGRpX2VsYW5fZmx1c2hfaW5wdXRfZmlmbyhmdGRpKTsKKyAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICBmdGRpLT5idWxrX2luX2xlZnQgPSAwOworICAgICAgICBmdGRpLT5idWxrX2luX2xhc3QgPSAtMTsKKyAgICAgICAgd2hpbGUgKGxvbmdfc3RvcC0tID4gMCkgeworICAgICAgICAgICAgICAgIGludCByZWFkX3N0b3A7CisgICAgICAgICAgICAgICAgaW50IHJlYWRfc3R1Y2s7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gZnRkaV9lbGFuX3N5bmNocm9uaXplX2ZsdXNoKGZ0ZGkpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICAgIHJldHZhbCA9IGZ0ZGlfZWxhbl9mbHVzaF9pbnB1dF9maWZvKGZ0ZGkpOworICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0dmFsOworICAgICAgICAgICAgICByZXNldDpyZXR2YWwgPSBmdGRpX2VsYW5fc3luY2hyb25pemVfcmVzZXQoZnRkaSk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXR2YWw7CisgICAgICAgICAgICAgICAgcmVhZF9zdG9wID0gMTAwOworICAgICAgICAgICAgICAgIHJlYWRfc3R1Y2sgPSAxMDsKKyAgICAgICAgICAgICAgcmVhZDp7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFja2V0X2J5dGVzID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JfcmN2YnVsa3BpcGUoZnRkaS0+dWRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFja2V0X2J5dGVzLCBtc2Vjc190b19qaWZmaWVzKDUwMCkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBkaWFnWzMwICozICsgNF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmQgPSBkaWFnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmIgPSBmdGRpLT5idWxrX2luX2J1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ5dGVzX3JlYWQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHBhY2tldF9ieXRlcy0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqYisrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChieXRlc19yZWFkIDwgbSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsIGMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQgKz0gc3ByaW50ZihkLCAiIC4uIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjID09IDB4N0UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSAweDU1KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocGFja2V0X2J5dGVzID4gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHMxID0gZnRkaS0+YnVsa19pbl9idWZmZXJbMF07CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHgwMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0dWNrLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMxID09IDB4MzEgJiYgczIgPT0gMHg2MCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInkgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfc3RvcC0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJyZXRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAieSBsaW1pdCByZWFjaGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwYWNrZXRfYnl0ZXMgPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWNoZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAtRVRJTUVET1VUKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0cnkgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldHJ5X29uX2VtcHR5LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImVtcHR5IHBhY2tldCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgcmV0cnkgbGltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycl9jb3VudCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHZhbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX3N0b3AtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAicmV0cnkgbGltaXQgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlYWNoZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgImZhaWxlZCB0byBzeW5jaHJvbml6ZVxuIik7CisgICAgICAgIHJldHVybiAtRUZBVUxUOworfQorCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zdHVja193YWl0aW5nKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgaW50IHJldHJ5X29uX2VtcHR5ID0gMTA7CisgICAgICAgIGludCByZXRyeV9vbl90aW1lb3V0ID0gNTsKKyAgICAgICAgaW50IHJldHJ5X29uX3N0YXR1cyA9IDUwOworICAgICAgbW9yZTp7CisgICAgICAgICAgICAgICAgaW50IHBhY2tldF9ieXRlcyA9IDA7CisgICAgICAgICAgICAgICAgaW50IHJldHZhbCA9IHVzYl9idWxrX21zZyhmdGRpLT51ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgdXNiX3JjdmJ1bGtwaXBlKGZ0ZGktPnVkZXYsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5idWxrX2luX2J1ZmZlciwgZnRkaS0+YnVsa19pbl9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJnBhY2tldF9ieXRlcywgbXNlY3NfdG9famlmZmllcygxMDAwKSk7CisgICAgICAgICAgICAgICAgaWYgKHBhY2tldF9ieXRlcyA+IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgZGlhZ1szMCAqMyArIDRdOworICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZCA9IGRpYWc7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbSA9IChzaXplb2YoZGlhZykgLSAxKSAvIDM7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpiID0gZnRkaS0+YnVsa19pbl9idWZmZXI7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnl0ZXNfcmVhZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBkaWFnWzBdID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYWNrZXRfYnl0ZXMtLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBjID0gKmIrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJ5dGVzX3JlYWQgPCBtKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgJTAyWCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMEZGICYgYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnl0ZXNfcmVhZCA+IG0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCArPSBzcHJpbnRmKGQsICIgLi4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfcmVhZCArPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgczEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgczIgPSBmdGRpLT5idWxrX2luX2J1ZmZlclsxXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzMSA9PSAweDMxICYmIHMyID09IDB4NjApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHJ5X29uX3N0YXR1cy0tID4gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtc2xlZXAoNSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF9ieXRlcyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgYjEgPSBmdGRpLT5idWxrX2luX2J1ZmZlclswXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIm9ubHkgb25lIGJ5dGUgZmx1c2hlZCBmcm9tIEYiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUREkgPSAlMDJYXG4iLCBiMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fc3RhdHVzLS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zbGVlcCg1KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiU1RBVFVTIEVSUk9SIHJldHJ5IGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmV0dmFsID09IC1FVElNRURPVVQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXRyeV9vbl90aW1lb3V0LS0gPiAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIlRJTUVEIE9VVCByZXRyeSBsaW1pIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0IHJlYWNoZWRcbiIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJldHZhbCA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV0cnlfb25fZW1wdHktLSA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBtb3JlOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiZW1wdHkgcGFja2V0IHJldHJ5IGwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImltaXQgcmVhY2hlZFxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJlcnJvciA9ICVkXG4iLCByZXR2YWwpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fY2hlY2tpbmdQQ0koc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICBpbnQgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmZnRkaS0+Y29udHJvbHJlZyk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBpZiAoZnRkaS0+Y29udHJvbHJlZyAmIDB4MDA0MDAwMDApIHsKKyAgICAgICAgICAgICAgICBpZiAoZnRkaS0+Y2FyZF9lamVjdGVkKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmNhcmRfZWplY3RlZCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJDQVJEIEVKRUNURUQgLSBjb250cm9scmVnID0gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTA4WFxuIiwgZnRkaS0+Y29udHJvbHJlZyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHU4IGZuID0gZnRkaS0+ZnVuY3Rpb24gLSAxOworICAgICAgICAgICAgICAgIGludCBhY3RpdmVQQ0lmbiA9IGZuIDw8IDg7CisgICAgICAgICAgICAgICAgdTMyIHBjaWRhdGE7CisgICAgICAgICAgICAgICAgdTMyIHBjaVZJRDsKKyAgICAgICAgICAgICAgICB1MzIgcGNpUElEOworICAgICAgICAgICAgICAgIGludCByZWcgPSAwOworICAgICAgICAgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAmcGNpZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgICAgICAgICBwY2lWSUQgPSBwY2lkYXRhICYgMHhGRkZGOworICAgICAgICAgICAgICAgIHBjaVBJRCA9IChwY2lkYXRhID4+IDE2KSAmIDB4RkZGRjsKKyAgICAgICAgICAgICAgICBpZiAocGNpVklEID09IGZ0ZGktPnBsYXRmb3JtX2RhdGEudmVuZG9yICYmIHBjaVBJRCA9PQorICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS5kZXZpY2UpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKCZmdGRpLT51ZGV2LT5kZXYsICJ2ZW5kb3I9JTA0WCBwY2lWSUQ9JTA0WCBkZXZpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2U9JTA0WCBwY2lQSUQ9JTA0WFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS52ZW5kb3IsIHBjaVZJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS5kZXZpY2UsIHBjaVBJRCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KK30KKworc3RhdGljIGludCBmdGRpX2VsYW5fZW51bWVyYXRlUENJKHN0cnVjdCB1c2JfZnRkaSAqZnRkaSkKK3sKKyAgICAgICAgdTMyIGxhdGVuY2VfdGltZXI7CisgICAgICAgIHUzMiBjb250cm9scmVnOworICAgICAgICBpbnQgVXh4eFN0YXR1czsKKyAgICAgICAgdTMyIHBjaWRhdGE7CisgICAgICAgIGludCByZWcgPSAwOworICAgICAgICBpbnQgZm91bmRPSENJID0gMDsKKyAgICAgICAgdTggZm47CisgICAgICAgIGludCBhY3RpdmVQQ0lmbiA9IDA7CisgICAgICAgIHUzMiBwY2lWSUQgPSAwOworICAgICAgICB1MzIgcGNpUElEID0gMDsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3JlZyhmdGRpLCAmY29udHJvbHJlZyk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMDAwTCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBtc2xlZXAoNzUwKTsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwMEwgfCAweDEwMCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjAwTCB8IDB4NTAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDIwQ0wgfCAweDAwMCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjBETCB8IDB4MDAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIG1zbGVlcCgyNTApOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3JlZyhmdGRpLCAweDAwMDAwMjBGTCB8IDB4MDAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9yZWcoZnRkaSwgMHgwMDAwMDI1RkwgfCAweDgwMCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcmVnKGZ0ZGksICZjb250cm9scmVnKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9yZWcoZnRkaSwgJmNvbnRyb2xyZWcpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgbXNsZWVwKDEwMDApOworICAgICAgICBmb3IgKGZuID0gMDsgKGZuIDwgNCkgJiYgKCFmb3VuZE9IQ0kpOyBmbisrKSB7CisgICAgICAgICAgICAgICAgYWN0aXZlUENJZm4gPSBmbiA8PCA4OworICAgICAgICAgICAgICAgIGZ0ZGktPmZ1bmN0aW9uID0gZm4gKyAxOworICAgICAgICAgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAmcGNpZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgICAgICAgICBwY2lWSUQgPSBwY2lkYXRhICYgMHhGRkZGOworICAgICAgICAgICAgICAgIHBjaVBJRCA9IChwY2lkYXRhID4+IDE2KSAmIDB4RkZGRjsKKyAgICAgICAgICAgICAgICBpZiAoKHBjaVZJRCA9PSAweDEwNDUpICYmIChwY2lQSUQgPT0gMHhjODYxKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRPSENJID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gMHgxMDMzKSAmJiAocGNpUElEID09IDB4MDAzNSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kT0hDSSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICgocGNpVklEID09IDB4MTBiOSkgJiYgKHBjaVBJRCA9PSAweDUyMzcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZE9IQ0kgPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKHBjaVZJRCA9PSAweDExYzEpICYmIChwY2lQSUQgPT0gMHg1ODAyKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRPSENJID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChwY2lWSUQgPT0gMHgxMUFCKSAmJiAocGNpUElEID09IDB4MUZBNikpIHsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kT0hDSSA9PSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC1FTlhJTzsKKyAgICAgICAgfQorICAgICAgICBmdGRpLT5wbGF0Zm9ybV9kYXRhLnZlbmRvciA9IHBjaVZJRDsKKyAgICAgICAgZnRkaS0+cGxhdGZvcm1fZGF0YS5kZXZpY2UgPSBwY2lQSUQ7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcmVnKGZ0ZGksIDB4MDAwMDAyNUZMIHwgMHgyODAwKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJlZyA9IDE2OworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMCwKKyAgICAgICAgICAgICAgICAweEZGRkZGRkZGKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgJnBjaWRhdGEpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgMHhGMDAwMDAwMCk7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJlZyA9IDEyOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgICZsYXRlbmNlX3RpbWVyKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIGxhdGVuY2VfdGltZXIgJj0gMHhGRkZGMDBGRjsKKyAgICAgICAgbGF0ZW5jZV90aW1lciB8PSAweDAwMDAxNjAwOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX2NvbmZpZyhmdGRpLCBhY3RpdmVQQ0lmbiB8IHJlZywgMHgwMCwKKyAgICAgICAgICAgICAgICBsYXRlbmNlX3RpbWVyKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIFV4eHhTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDAsCisgICAgICAgICAgICAgICAgJnBjaWRhdGEpOworICAgICAgICBpZiAoVXh4eFN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVXh4eFN0YXR1czsKKyAgICAgICAgcmVnID0gNDsKKyAgICAgICAgVXh4eFN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9jb25maWcoZnRkaSwgYWN0aXZlUENJZm4gfCByZWcsIDB4MDAsCisgICAgICAgICAgICAgICAgMHgwNik7CisgICAgICAgIGlmIChVeHh4U3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVeHh4U3RhdHVzOworICAgICAgICBVeHh4U3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfY29uZmlnKGZ0ZGksIGFjdGl2ZVBDSWZuIHwgcmVnLCAwLAorICAgICAgICAgICAgICAgICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFV4eHhTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFV4eHhTdGF0dXM7CisgICAgICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGZ0ZGlfZWxhbl9zZXR1cE9IQ0koc3RydWN0IHVzYl9mdGRpICpmdGRpKQoreworICAgICAgICB1MzIgcGNpZGF0YTsKKyAgICAgICAgaW50IFUxMzJTdGF0dXM7CisgICAgICAgIGludCByZWc7CisgICAgICAgIGludCByZXNldF9yZXBlYXQgPSAwOworICAgICAgZG9fcmVzZXQ6cmVnID0gODsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDBlLCAweDAxKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICByZXNldF9jaGVjazp7CisgICAgICAgICAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICAgICAgICAgIGlmIChwY2lkYXRhICYgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbXNsZWVwKDUwMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzZXRfcmVwZWF0KysgPiAxMDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzZXRfcmVwZWF0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBkb19yZXNldDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHJlc2V0X2NoZWNrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBnb3RvIGR1bXBfcmVnczsKKyAgICAgICAgbXNsZWVwKDUwMCk7CisgICAgICAgIHJlZyA9IDB4Mjg7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgxMTAwMDAwMCk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgcmVnID0gMHg0MDsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDJlZGYpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIHJlZyA9IDB4MzQ7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgyZWRmMmVkZik7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgcmVnID0gNDsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweEEwKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBtc2xlZXAoMjUwKTsKKyAgICAgICAgcmVnID0gODsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDBlLCAweDA0KTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICByZWcgPSAweDI4OworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgcmVnID0gODsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIHJlZyA9IDB4NDg7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgwMDAwMTIwMCk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgcmVnID0gMHg1NDsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIHJlZyA9IDB4NTg7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICByZWcgPSAweDM0OworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4MjgwMDJlZGYpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIG1zbGVlcCgxMDApOworICAgICAgICByZWcgPSAweDUwOworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4MTAwMDApOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgcmVnID0gMHg1NDsKKyAgICAgIHBvd2VyX2NoZWNrOlUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBpZiAoIShwY2lkYXRhICYgMSkpIHsKKyAgICAgICAgICAgICAgICBtc2xlZXAoNTAwKTsKKyAgICAgICAgICAgICAgICBnb3RvIHBvd2VyX2NoZWNrOworICAgICAgICB9CisgICAgICAgIG1zbGVlcCgzMDAwKTsKKyAgICAgICAgcmVnID0gMHg1NDsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIHJlZyA9IDB4NTg7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICByZWcgPSAweDU0OworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3dyaXRlX3BjaW1lbShmdGRpLCByZWcsIDB4MDAsIDB4MDIpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgcmV0dXJuIFUxMzJTdGF0dXM7CisgICAgICAgIHJlZyA9IDB4NTQ7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fd3JpdGVfcGNpbWVtKGZ0ZGksIHJlZywgMHgwMCwgMHgxMCk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgbXNsZWVwKDc1MCk7CisgICAgICAgIHJlZyA9IDB4NTQ7CisgICAgICAgIGlmICgwKSB7CisgICAgICAgICAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl93cml0ZV9wY2ltZW0oZnRkaSwgcmVnLCAweDAwLCAweDAyKTsKKyAgICAgICAgICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICB9CisgICAgICAgIGlmICgwKSB7CisgICAgICAgICAgICAgICAgVTEzMlN0YXR1cyA9IGZ0ZGlfZWxhbl9yZWFkX3BjaW1lbShmdGRpLCByZWcsIDAsICZwY2lkYXRhKTsKKyAgICAgICAgICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICB9CisgICAgICAgIHJlZyA9IDB4NTQ7CisgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgIGlmIChVMTMyU3RhdHVzKQorICAgICAgICAgICAgICAgIHJldHVybiBVMTMyU3RhdHVzOworICAgICAgICByZWcgPSAweDU4OworICAgICAgICBVMTMyU3RhdHVzID0gZnRkaV9lbGFuX3JlYWRfcGNpbWVtKGZ0ZGksIHJlZywgMCwgJnBjaWRhdGEpOworICAgICAgICBpZiAoVTEzMlN0YXR1cykKKyAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgIGR1bXBfcmVnczpmb3IgKHJlZyA9IDA7IHJlZyA8PSAweDU0OyByZWcgKz0gNCkgeworICAgICAgICAgICAgICAgIFUxMzJTdGF0dXMgPSBmdGRpX2VsYW5fcmVhZF9wY2ltZW0oZnRkaSwgcmVnLCAwLCAmcGNpZGF0YSk7CisgICAgICAgICAgICAgICAgaWYgKFUxMzJTdGF0dXMpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVTEzMlN0YXR1czsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gMDsKK30KKworCisvKgorKiB3ZSB1c2Ugb25seSB0aGUgZmlyc3QgYnVsay1pbiBhbmQgYnVsay1vdXQgZW5kcG9pbnRzCisqLworc3RhdGljIGludCBmdGRpX2VsYW5fcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSwKKyAgICAgICAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworICAgICAgICBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworICAgICAgICBzaXplX3QgYnVmZmVyX3NpemU7CisgICAgICAgIGludCBpOworICAgICAgICBpbnQgcmV0dmFsID0gLUVOT01FTTsKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICpmdGRpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9mdGRpKSwgR0ZQX0tFUk5FTCk7CisgICAgICAgIGlmIChmdGRpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgIk91dCBvZiBtZW1vcnlcbiIpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOworICAgICAgICB9CisgICAgICAgIG1lbXNldChmdGRpLCAweDAwLCBzaXplb2Yoc3RydWN0IHVzYl9mdGRpKSk7CisgICAgICAgIGRvd24oJmZ0ZGlfbW9kdWxlX2xvY2spOworICAgICAgICBsaXN0X2FkZF90YWlsKCZmdGRpLT5mdGRpX2xpc3QsICZmdGRpX3N0YXRpY19saXN0KTsKKyAgICAgICAgZnRkaS0+c2VxdWVuY2VfbnVtID0gKytmdGRpX2luc3RhbmNlczsKKyAgICAgICAgdXAoJmZ0ZGlfbW9kdWxlX2xvY2spOworICAgICAgICBmdGRpX2VsYW5faW5pdF9rcmVmKGZ0ZGkpOworICAgICAgICBpbml0X01VVEVYKCZmdGRpLT5zd19sb2NrKTsKKyAgICAgICAgZnRkaS0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisgICAgICAgIGZ0ZGktPmludGVyZmFjZSA9IGludGVyZmFjZTsKKyAgICAgICAgaW5pdF9NVVRFWCgmZnRkaS0+dTEzMl9sb2NrKTsKKyAgICAgICAgZnRkaS0+ZXhwZWN0ZWQgPSA0OworICAgICAgICBpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CisgICAgICAgICAgICAgICAgZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKyAgICAgICAgICAgICAgICBpZiAoIWZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQorICAgICAgICAgICAgICAgICAgICAgICAgPT0gVVNCX0RJUl9JTikgJiYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYKKyAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcl9zaXplID0gbGUxNl90b19jcHUoZW5kcG9pbnQtPndNYXhQYWNrZXRTaXplKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fc2l6ZSA9IGJ1ZmZlcl9zaXplOworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIgPSBlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZ0ZGktPmJ1bGtfaW5fYnVmZmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJmZ0ZGktPnVkZXYtPmRldiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bGtfaW5fYnVmZmVyXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT01FTTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCisgICAgICAgICAgICAgICAgICAgICAgICA9PSBVU0JfRElSX09VVCkgJiYgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYKKyAgICAgICAgICAgICAgICAgICAgICAgIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLKSA9PSBVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIShmdGRpLT5idWxrX2luX2VuZHBvaW50QWRkciAmJiBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIpKSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiQ291bGQgbm90IGZpbmQgYm90aCBidWxrLWluIGFuZCBidWxrIgorICAgICAgICAgICAgICAgICAgICAgICAgIi1vdXQgZW5kcG9pbnRzXG4iKTsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtRU5PREVWOworICAgICAgICAgICAgICAgIGdvdG8gZXJyb3I7CisgICAgICAgIH0KKyAgICAgICAgZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgImludGVyZmFjZSAlZCBoYXMgST0lMDJYIE89JTAyWFxuIiwKKyAgICAgICAgICAgICAgICBpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIsIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyLAorICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkcik7CisgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBmdGRpKTsKKyAgICAgICAgaWYgKGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlciA9PSAwICYmCisgICAgICAgICAgICAgICAgZnRkaS0+YnVsa19pbl9lbmRwb2ludEFkZHIgPT0gMHg4MSAmJgorICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9PSAweDAyKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gdXNiX3JlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZmdGRpX2VsYW5fanRhZ19jbGFzcyk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LCAiTm90IGFibGUgdG8gZ2V0IGEgbWlub3IgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRoaXMgZGV2aWNlLlxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICB1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSAtRU5PTUVNOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgZnRkaS0+Y2xhc3MgPSAmZnRkaV9lbGFuX2p0YWdfY2xhc3M7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfaW5mbygmZnRkaS0+dWRldi0+ZGV2LCAiVVNCIEZEVEk9JXAgSlRBRyBpbnRlcmZhY2UgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJWQgbm93IGF0dGFjaGVkIHRvIGZ0ZGklZFxuIiwgZnRkaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZhY2VfZGVzYy0+ZGVzYy5iSW50ZXJmYWNlTnVtYmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UtPm1pbm9yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChpZmFjZV9kZXNjLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPT0gMSAmJgorICAgICAgICAgICAgICAgIGZ0ZGktPmJ1bGtfaW5fZW5kcG9pbnRBZGRyID09IDB4ODMgJiYKKyAgICAgICAgICAgICAgICBmdGRpLT5idWxrX291dF9lbmRwb2ludEFkZHIgPT0gMHgwNCkgeworICAgICAgICAgICAgICAgIGZ0ZGktPmNsYXNzID0gTlVMTDsKKyAgICAgICAgICAgICAgICBkZXZfaW5mbygmZnRkaS0+dWRldi0+ZGV2LCAiVVNCIEZEVEk9JXAgRUxBTiBpbnRlcmZhY2UgJWQgbm93IGEiCisgICAgICAgICAgICAgICAgICAgICAgICAiY3RpdmF0ZWRcbiIsIGZ0ZGksIGlmYWNlX2Rlc2MtPmRlc2MuYkludGVyZmFjZU51bWJlcik7CisgICAgICAgICAgICAgICAgSU5JVF9XT1JLKCZmdGRpLT5zdGF0dXNfd29yaywgZnRkaV9lbGFuX3N0YXR1c193b3JrLAorICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKilmdGRpKTsKKyAgICAgICAgICAgICAgICBJTklUX1dPUksoJmZ0ZGktPmNvbW1hbmRfd29yaywgZnRkaV9lbGFuX2NvbW1hbmRfd29yaywKKyAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopZnRkaSk7CisgICAgICAgICAgICAgICAgSU5JVF9XT1JLKCZmdGRpLT5yZXNwb25kX3dvcmssIGZ0ZGlfZWxhbl9yZXNwb25kX3dvcmssCisgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKWZ0ZGkpOworICAgICAgICAgICAgICAgIGZ0ZGlfc3RhdHVzX3F1ZXVlX3dvcmsoZnRkaSwgbXNlY3NfdG9famlmZmllcygzICoxMDAwKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZGV2X2VycigmZnRkaS0+dWRldi0+ZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBmaW5kIEVMQU4ncyBVMTMyIGRldmljZVxuIik7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLUVOT0RFVjsKKyAgICAgICAgICAgICAgICBnb3RvIGVycm9yOworICAgICAgICB9CisgICAgICBlcnJvcjppZiAoZnRkaSkgeworICAgICAgICAgICAgICAgIGZ0ZGlfZWxhbl9wdXRfa3JlZihmdGRpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBmdGRpX2VsYW5fZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworICAgICAgICBzdHJ1Y3QgdXNiX2Z0ZGkgKmZ0ZGkgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICBpZiAoZnRkaS0+Y2xhc3MpIHsKKyAgICAgICAgICAgICAgICBpbnQgbWlub3IgPSBpbnRlcmZhY2UtPm1pbm9yOworICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzcyA9IGZ0ZGktPmNsYXNzOworICAgICAgICAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAgICAgICB1c2JfZGVyZWdpc3Rlcl9kZXYoaW50ZXJmYWNlLCBjbGFzcyk7CisgICAgICAgICAgICAgICAgZGV2X2luZm8oJmZ0ZGktPnVkZXYtPmRldiwgIlVTQiBGVERJIFUxMzIganRhZyBpbnRlcmZhY2Ugb24gbWluIgorICAgICAgICAgICAgICAgICAgICAgICAgIm9yICVkIG5vdyBkaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBmdGRpX3N0YXR1c19jYW5jZWxfd29yayhmdGRpKTsKKyAgICAgICAgICAgICAgICBmdGRpX2NvbW1hbmRfY2FuY2VsX3dvcmsoZnRkaSk7CisgICAgICAgICAgICAgICAgZnRkaV9yZXNwb25zZV9jYW5jZWxfd29yayhmdGRpKTsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fYWJhbmRvbl9jb21wbGV0aW9ucyhmdGRpKTsKKyAgICAgICAgICAgICAgICBmdGRpX2VsYW5fYWJhbmRvbl90YXJnZXRzKGZ0ZGkpOworICAgICAgICAgICAgICAgIGlmIChmdGRpLT5yZWdpc3RlcmVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwbGF0Zm9ybV9kZXZpY2VfdW5yZWdpc3RlcigmZnRkaS0+cGxhdGZvcm1fZGV2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnN5bmNocm9uaXplZCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBmdGRpLT5lbnVtZXJhdGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZ0ZGktPnJlZ2lzdGVyZWQgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmbHVzaF93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKKyAgICAgICAgICAgICAgICBmbHVzaF93b3JrcXVldWUoY29tbWFuZF9xdWV1ZSk7CisgICAgICAgICAgICAgICAgZmx1c2hfd29ya3F1ZXVlKHJlc3BvbmRfcXVldWUpOworICAgICAgICAgICAgICAgIGZ0ZGktPmRpc2Nvbm5lY3RlZCArPSAxOworICAgICAgICAgICAgICAgIHVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBkZXZfaW5mbygmZnRkaS0+dWRldi0+ZGV2LCAiVVNCIEZUREkgVTEzMiBob3N0IGNvbnRyb2xsZXIgaW50ZXIiCisgICAgICAgICAgICAgICAgICAgICAgICAiZmFjZSBub3cgZGlzY29ubmVjdGVkXG4iKTsKKyAgICAgICAgfQorICAgICAgICBmdGRpX2VsYW5fcHV0X2tyZWYoZnRkaSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBmdGRpX2VsYW5fZHJpdmVyID0geworICAgICAgICAubmFtZSA9ICJmdGRpLWVsYW4iLAorICAgICAgICAucHJvYmUgPSBmdGRpX2VsYW5fcHJvYmUsCisgICAgICAgIC5kaXNjb25uZWN0ID0gZnRkaV9lbGFuX2Rpc2Nvbm5lY3QsCisgICAgICAgIC5pZF90YWJsZSA9IGZ0ZGlfZWxhbl90YWJsZSwKK307CitzdGF0aWMgaW50IF9faW5pdCBmdGRpX2VsYW5faW5pdCh2b2lkKQoreworICAgICAgICBpbnQgcmVzdWx0OworICAgICAgICBwcmludGsoS0VSTl9JTkZPICJkcml2ZXIgJXMgYnVpbHQgYXQgJXMgb24gJXNcbiIsIGZ0ZGlfZWxhbl9kcml2ZXIubmFtZSwKKyAgICAgICAgICAgICAgICAgX19USU1FX18sIF9fREFURV9fKTsKKyAgICAgICAgaW5pdF9NVVRFWCgmZnRkaV9tb2R1bGVfbG9jayk7CisgICAgICAgIElOSVRfTElTVF9IRUFEKCZmdGRpX3N0YXRpY19saXN0KTsKKyAgICAgICAgc3RhdHVzX3F1ZXVlID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImZ0ZGktc3RhdHVzLWNvbnRyb2wiKTsKKyAgICAgICAgY29tbWFuZF9xdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKCJmdGRpLWNvbW1hbmQtZW5naW5lIik7CisgICAgICAgIHJlc3BvbmRfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiZnRkaS1yZXNwb25kLWVuZ2luZSIpOworICAgICAgICByZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmZ0ZGlfZWxhbl9kcml2ZXIpOworICAgICAgICBpZiAocmVzdWx0KQorICAgICAgICAgICAgICAgIHByaW50ayhLRVJOX0VSUiAidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGZ0ZGlfZWxhbl9leGl0KHZvaWQpCit7CisgICAgICAgIHN0cnVjdCB1c2JfZnRkaSAqZnRkaTsKKyAgICAgICAgc3RydWN0IHVzYl9mdGRpICp0ZW1wOworICAgICAgICB1c2JfZGVyZWdpc3RlcigmZnRkaV9lbGFuX2RyaXZlcik7CisgICAgICAgIHByaW50ayhLRVJOX0lORk8gImZ0ZGlfdTEzMiBkcml2ZXIgZGVyZWdpc3RlcmVkXG4iKTsKKyAgICAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGZ0ZGksIHRlbXAsICZmdGRpX3N0YXRpY19saXN0LCBmdGRpX2xpc3QpIHsKKyAgICAgICAgICAgICAgICBmdGRpX3N0YXR1c19jYW5jZWxfd29yayhmdGRpKTsKKyAgICAgICAgICAgICAgICBmdGRpX2NvbW1hbmRfY2FuY2VsX3dvcmsoZnRkaSk7CisgICAgICAgICAgICAgICAgZnRkaV9yZXNwb25zZV9jYW5jZWxfd29yayhmdGRpKTsKKyAgICAgICAgfSBmbHVzaF93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKKyAgICAgICAgZGVzdHJveV93b3JrcXVldWUoc3RhdHVzX3F1ZXVlKTsKKyAgICAgICAgc3RhdHVzX3F1ZXVlID0gTlVMTDsKKyAgICAgICAgZmx1c2hfd29ya3F1ZXVlKGNvbW1hbmRfcXVldWUpOworICAgICAgICBkZXN0cm95X3dvcmtxdWV1ZShjb21tYW5kX3F1ZXVlKTsKKyAgICAgICAgY29tbWFuZF9xdWV1ZSA9IE5VTEw7CisgICAgICAgIGZsdXNoX3dvcmtxdWV1ZShyZXNwb25kX3F1ZXVlKTsKKyAgICAgICAgZGVzdHJveV93b3JrcXVldWUocmVzcG9uZF9xdWV1ZSk7CisgICAgICAgIHJlc3BvbmRfcXVldWUgPSBOVUxMOworfQorCisKK21vZHVsZV9pbml0KGZ0ZGlfZWxhbl9pbml0KTsKK21vZHVsZV9leGl0KGZ0ZGlfZWxhbl9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvaWRtb3VzZS5jIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKaW5kZXggZmNkNjljNS4uOGU2ZTE5NSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9pZG1vdXNlLmMKQEAgLTk4LDcgKzk4LDcgQEAKIHN0YXRpYyB2b2lkIGlkbW91c2VfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKTsKIAogLyogZmlsZSBvcGVyYXRpb24gcG9pbnRlcnMgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkbW91c2VfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGlkbW91c2VfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IGlkbW91c2VfcmVhZCwKIAkub3BlbiA9IGlkbW91c2Vfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGR1c2IuYwppbmRleCBmMzBhYjFmLi4xMGI2NDAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL2xkdXNiLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9sZHVzYi5jCkBAIC01ODksNyArNTg5LDcgQEAKIH0KIAogLyogZmlsZSBvcGVyYXRpb25zIG5lZWRlZCB3aGVuIHdlIHJlZ2lzdGVyIHRoaXMgZHJpdmVyICovCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsZF91c2JfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxkX3VzYl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkICA9CWxkX3VzYl9yZWFkLAogCS53cml0ZSA9CWxkX3VzYl93cml0ZSwKQEAgLTY1NywxNSArNjU3LDExIEBACiAJZm9yIChpID0gMDsgaSA8IGlmYWNlX2Rlc2MtPmRlc2MuYk51bUVuZHBvaW50czsgKytpKSB7CiAJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CiAKLQkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfSU4pICYmCi0JCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykgPT0gVVNCX0VORFBPSU5UX1hGRVJfSU5UKSkgeworCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpCiAJCQlkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9IGVuZHBvaW50OwotCQl9CiAKLQkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spID09IFVTQl9ESVJfT1VUKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spID09IFVTQl9FTkRQT0lOVF9YRkVSX0lOVCkpIHsKKwkJaWYgKHVzYl9lbmRwb2ludF9pc19pbnRfb3V0KGVuZHBvaW50KSkKIAkJCWRldi0+aW50ZXJydXB0X291dF9lbmRwb2ludCA9IGVuZHBvaW50OwotCQl9CiAJfQogCWlmIChkZXYtPmludGVycnVwdF9pbl9lbmRwb2ludCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGYtPmRldiwgIkludGVycnVwdCBpbiBlbmRwb2ludCBub3QgZm91bmRcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYyBiL2RyaXZlcnMvdXNiL21pc2MvbGVnb3VzYnRvd2VyLmMKaW5kZXggNzY5OWQ5Ny4uNzdjMzZlNiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9sZWdvdXNidG93ZXIuYworKysgYi9kcml2ZXJzL3VzYi9taXNjL2xlZ291c2J0b3dlci5jCkBAIC0yNTksNyArMjU5LDcgQEAKIHN0YXRpYyBERUZJTkVfTVVURVggKGRpc2Nvbm5lY3RfbXV0ZXgpOwogCiAvKiBmaWxlIG9wZXJhdGlvbnMgbmVlZGVkIHdoZW4gd2UgcmVnaXN0ZXIgdGhpcyBkcml2ZXIgKi8KLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRvd2VyX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0b3dlcl9mb3BzID0gewogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5yZWFkICA9CXRvd2VyX3JlYWQsCiAJLndyaXRlID0JdG93ZXJfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczNWVkMzMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogVVNCIFBoaWRnZXRzIGNsYXNzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IGNsYXNzICpwaGlkZ2V0X2NsYXNzOworCitzdGF0aWMgaW50IF9faW5pdCBpbml0X3BoaWRnZXQodm9pZCkKK3sKKwlwaGlkZ2V0X2NsYXNzID0gY2xhc3NfY3JlYXRlKFRISVNfTU9EVUxFLCAicGhpZGdldCIpOworCisJaWYgKElTX0VSUihwaGlkZ2V0X2NsYXNzKSkKKwkJcmV0dXJuIFBUUl9FUlIocGhpZGdldF9jbGFzcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfcGhpZGdldCh2b2lkKQoreworCWNsYXNzX2Rlc3Ryb3kocGhpZGdldF9jbGFzcyk7Cit9CisKK0VYUE9SVF9TWU1CT0xfR1BMKHBoaWRnZXRfY2xhc3MpOworCittb2R1bGVfaW5pdChpbml0X3BoaWRnZXQpOworbW9kdWxlX2V4aXQoY2xlYW51cF9waGlkZ2V0KTsKKworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworTU9EVUxFX0FVVEhPUigiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiQ29udGFpbmVyIG1vZHVsZSBmb3IgcGhpZGdldCBjbGFzcyIpOworCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaCBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0MDExOTAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXQuaApAQCAtMCwwICsxLDEyIEBACisvKgorICogVVNCIFBoaWRnZXRzIGNsYXNzCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2ICBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworZXh0ZXJuIHN0cnVjdCBjbGFzcyAqcGhpZGdldF9jbGFzczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldGtpdC5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKaW5kZXggYmZiYmJmYi4uNzhlNDE5OSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0a2l0LmMKQEAgLTIwLDYgKzIwLDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAorI2luY2x1ZGUgInBoaWRnZXQuaCIKKwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0SW50ZXJmYWNlS2l0IERyaXZlciIKIApAQCAtNDIsMjYgKzQ0LDM1IEBACiAJaW50IGlucHV0czsKIAlpbnQgb3V0cHV0czsKIAlpbnQgaGFzX2xjZDsKKwlpbnQgYW1uZXNpYWM7CiB9OwotI2RlZmluZSBpZmtpdChfc2Vuc29ycywgX2lucHV0cywgX291dHB1dHMsIF9sY2QpCQkJXAotc3RhdGljIHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXyMjX3NlbnNvcnMjI19pbnB1dHMjI19vdXRwdXRzID0gewlcCisKKyNkZWZpbmUgaWZraXQoX3NlbnNvcnMsIF9pbnB1dHMsIF9vdXRwdXRzLCBfbGNkLCBfYW1uZXNpYWMpCQlcCit7CQkJCQkJCQkJXAogCS5zZW5zb3JzCT0gX3NlbnNvcnMsCQkJCQlcCiAJLmlucHV0cwkJPSBfaW5wdXRzLAkJCQkJXAogCS5vdXRwdXRzCT0gX291dHB1dHMsCQkJCQlcCiAJLmhhc19sY2QJPSBfbGNkLAkJCQkJCVwKKwkuYW1uZXNpYWMJPSBfYW1uZXNpYWMJCQkJCVwKIH07Ci1pZmtpdCgwLCAwLCA0LCAwKTsKLWlma2l0KDgsIDgsIDgsIDApOwotaWZraXQoMCwgNCwgNywgMSk7Ci1pZmtpdCg4LCA4LCA0LCAwKTsKLWlma2l0KDAsIDgsIDgsIDEpOwotaWZraXQoMCwgMTYsIDE2LCAwKTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzAwNCA9IGlma2l0KDAsIDAsIDQsIDAsIDApOworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0IHBoXzg4OG4gPSBpZmtpdCg4LCA4LCA4LCAwLCAxKTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCBwaF84ODhvID0gaWZraXQoOCwgOCwgOCwgMCwgMCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDQ3ID0gaWZraXQoMCwgNCwgNywgMSwgMCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfODg0ID0gaWZraXQoOCwgOCwgNCwgMCwgMCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDg4ID0gaWZraXQoMCwgOCwgOCwgMSwgMCk7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbnRlcmZhY2VraXQgcGhfMDE2MTYgPSBpZmtpdCgwLCAxNiwgMTYsIDAsIDApOworCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87CiAKIHN0cnVjdCBpbnRlcmZhY2VraXQgewogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OwogCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOwogCXN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICppZmtpdDsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiAJdW5zaWduZWQgbG9uZyBvdXRwdXRzOworCWludCBkZXZfbm87CiAJdTggaW5wdXRzW01BWF9JTlRFUkZBQ0VTXTsKIAl1MTYgc2Vuc29yc1tNQVhfSU5URVJGQUNFU107CiAJdTggbGNkX2ZpbGVzX29uOwpAQCAtNzEsNiArODIsNyBAQAogCWRtYV9hZGRyX3QgZGF0YV9kbWE7CiAKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3QgZG9fbm90aWZ5OworCXN0cnVjdCB3b3JrX3N0cnVjdCBkb19yZXN1Ym1pdDsKIAl1bnNpZ25lZCBsb25nIGlucHV0X2V2ZW50czsKIAl1bnNpZ25lZCBsb25nIHNlbnNvcl9ldmVudHM7CiB9OwpAQCAtNzgsOCArOTAsMTAgQEAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZVtdID0gewogCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9JTlRFUkZBQ0VLSVQwMDQpLAogCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzAwNH0sCi0Je1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCksCi0JCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg4fSwKKwl7VVNCX0RFVklDRV9WRVIoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDg4OCwgMCwgMHg4MTQpLAorCQkuZHJpdmVyX2luZm8gPSAoa2VybmVsX3Vsb25nX3QpJnBoXzg4OG99LAorCXtVU0JfREVWSUNFX1ZFUihVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUODg4LCAweDA4MTUsIDB4ZmZmZiksCisJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfODg4bn0sCiAJe1VTQl9ERVZJQ0UoVVNCX1ZFTkRPUl9JRF9HTEFCLCBVU0JfREVWSUNFX0lEX0lOVEVSRkFDRUtJVDA0NyksCiAJCS5kcml2ZXJfaW5mbyA9IChrZXJuZWxfdWxvbmdfdCkmcGhfMDQ3fSwKIAl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX0dMQUIsIFVTQl9ERVZJQ0VfSURfSU5URVJGQUNFS0lUMDg4KSwKQEAgLTkyLDE2ICsxMDYsMTEgQEAKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCi1zdGF0aWMgaW50IGNoYW5nZV9vdXRwdXRzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCwgaW50IG91dHB1dF9udW0sIGludCBlbmFibGUpCitzdGF0aWMgaW50IHNldF9vdXRwdXRzKHN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCkKIHsKIAl1OCAqYnVmZmVyOwogCWludCByZXR2YWw7CiAKLQlpZiAoZW5hYmxlKQotCQlzZXRfYml0KG91dHB1dF9udW0sICZraXQtPm91dHB1dHMpOwotCWVsc2UKLQkJY2xlYXJfYml0KG91dHB1dF9udW0sICZraXQtPm91dHB1dHMpOwotCiAJYnVmZmVyID0ga3phbGxvYyg0LCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZmZlcikgewogCQlkZXZfZXJyKCZraXQtPnVkZXYtPmRldiwgIiVzIC0gb3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKQEAgLTEyMSw2ICsxMzAsOSBAQAogCQkJCXJldHZhbCk7CiAJa2ZyZWUoYnVmZmVyKTsKIAorCWlmIChraXQtPmlma2l0LT5hbW5lc2lhYykKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0LCBIWiAvIDIpOworCiAJcmV0dXJuIHJldHZhbCA8IDAgPyByZXR2YWwgOiAwOwogfQogCkBAIC0xODAsMjEgKzE5MiwyNCBAQAogfQogCiAjZGVmaW5lIHNldF9sY2RfbGluZShudW1iZXIpCVwKLXN0YXRpYyBzc2l6ZV90IGxjZF9saW5lXyMjbnVtYmVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCi17CQkJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7CQkJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJCQlcCi0JY2hhbmdlX3N0cmluZyhraXQsIGJ1ZiwgbnVtYmVyIC0gMSk7CQkJCQkJXAotCXJldHVybiBjb3VudDsJCQkJCQkJCQlcCi19CQkJCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIobGNkX2xpbmVfIyNudW1iZXIsIFNfSVdVR08sIE5VTEwsIGxjZF9saW5lXyMjbnVtYmVyKTsKK3N0YXRpYyBzc2l6ZV90IGxjZF9saW5lXyMjbnVtYmVyKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAorCWNoYW5nZV9zdHJpbmcoa2l0LCBidWYsIG51bWJlciAtIDEpOwkJCQlcCisJcmV0dXJuIGNvdW50OwkJCQkJCQlcCit9CisKKyNkZWZpbmUgbGNkX2xpbmVfYXR0cihudW1iZXIpCQkJCQkJXAorCV9fQVRUUihsY2RfbGluZV8jI251bWJlciwgU19JV1VHTywgTlVMTCwgbGNkX2xpbmVfIyNudW1iZXIpCisKIHNldF9sY2RfbGluZSgxKTsKIHNldF9sY2RfbGluZSgyKTsKIAogc3RhdGljIHNzaXplX3Qgc2V0X2JhY2tsaWdodChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkKIHsKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOworCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCWludCBlbmFibGVkOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAlpbnQgcmV0dmFsID0gLUVOT01FTTsKQEAgLTIyNiwyMyArMjQxLDMwIEBACiAJa2ZyZWUoYnVmZmVyKTsKIAlyZXR1cm4gcmV0dmFsOwogfQotc3RhdGljIERFVklDRV9BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfbGNkX2xpbmVfYXR0cnNbXSA9IHsKKwlsY2RfbGluZV9hdHRyKDEpLAorCWxjZF9saW5lX2F0dHIoMiksCisJX19BVFRSKGJhY2tsaWdodCwgU19JV1VHTywgTlVMTCwgc2V0X2JhY2tsaWdodCkKK307CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9sY2RfZmlsZXMoc3RydWN0IGludGVyZmFjZWtpdCAqa2l0KQogeworCWludCBpOworCiAJaWYgKGtpdC0+bGNkX2ZpbGVzX29uKSB7CiAJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiUmVtb3ZpbmcgbGNkIGZpbGVzXG4iKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZraXQtPmludGYtPmRldiwgJmRldl9hdHRyX2xjZF9saW5lXzEpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMik7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgma2l0LT5pbnRmLT5kZXYsICZkZXZfYXR0cl9iYWNrbGlnaHQpOworCisJCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2xjZF9saW5lX2F0dHJzKTsgaSsrKQorCQkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2xjZF9saW5lX2F0dHJzW2ldKTsKIAl9CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGVuYWJsZV9sY2RfZmlsZXMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpCiB7Ci0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlKGRldik7Ci0Jc3RydWN0IGludGVyZmFjZWtpdCAqa2l0ID0gdXNiX2dldF9pbnRmZGF0YShpbnRmKTsKKwlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAlpbnQgZW5hYmxlOworCWludCBpLCByYzsKIAkKIAlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCA9PSAwKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTI1Myw5ICsyNzUsMTIgQEAKIAlpZiAoZW5hYmxlKSB7CiAJCWlmICgha2l0LT5sY2RfZmlsZXNfb24pIHsKIAkJCWRldl9kYmcoJmtpdC0+dWRldi0+ZGV2LCAiQWRkaW5nIGxjZCBmaWxlc1xuIik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMSk7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkX2xpbmVfMik7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmtpdC0+aW50Zi0+ZGV2LCAmZGV2X2F0dHJfYmFja2xpZ2h0KTsKKwkJCWZvciAoaT0wOyBpPEFSUkFZX1NJWkUoZGV2X2xjZF9saW5lX2F0dHJzKTsgaSsrKSB7CisJCQkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsCisJCQkJCSZkZXZfbGNkX2xpbmVfYXR0cnNbaV0pOworCQkJCWlmIChyYykKKwkJCQkJZ290byBvdXQ7CisJCQl9CiAJCQlraXQtPmxjZF9maWxlc19vbiA9IDE7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjY2LDcgKzI5MSwxMyBAQAogCX0KIAkKIAlyZXR1cm4gY291bnQ7CitvdXQ6CisJd2hpbGUgKGktLSA+IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9sY2RfbGluZV9hdHRyc1tpXSk7CisKKwlyZXR1cm4gcmM7CiB9CisKIHN0YXRpYyBERVZJQ0VfQVRUUihsY2QsIFNfSVdVR08sIE5VTEwsIGVuYWJsZV9sY2RfZmlsZXMpOwogCiBzdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfaXJxKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCkBAIC0zNjIsNDQgKzM5Myw1OCBAQAogCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPmlucHV0czsgaSsrKSB7CiAJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoaSwgJmtpdC0+aW5wdXRfZXZlbnRzKSkgewogCQkJc3ByaW50ZihzeXNmc19maWxlLCAiaW5wdXQlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5pbnRmLT5kZXYua29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7CisJCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKIAkJfQogCX0KIAogCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykgewogCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZraXQtPnNlbnNvcl9ldmVudHMpKSB7CiAJCQlzcHJpbnRmKHN5c2ZzX2ZpbGUsICJzZW5zb3IlZCIsIGkgKyAxKTsKLQkJCXN5c2ZzX25vdGlmeSgma2l0LT5pbnRmLT5kZXYua29iaiwgTlVMTCwgc3lzZnNfZmlsZSk7CisJCQlzeXNmc19ub3RpZnkoJmtpdC0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKIAkJfQogCX0KIH0KIAorc3RhdGljIHZvaWQgZG9fcmVzdWJtaXQodm9pZCAqZGF0YSkKK3sKKwlzZXRfb3V0cHV0cyhkYXRhKTsKK30KKwogI2RlZmluZSBzaG93X3NldF9vdXRwdXQodmFsdWUpCQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfb3V0cHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsCVwKLQkJCQkJCQlzaXplX3QgY291bnQpCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCiB7CQkJCQkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZShkZXYpOwkJXAotCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CQlcCi0JaW50IGVuYWJsZWQ7CQkJCQkJCVwKKwlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKKwlpbnQgZW5hYmxlOwkJCQkJCQlcCiAJaW50IHJldHZhbDsJCQkJCQkJXAogCQkJCQkJCQkJXAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmZW5hYmxlZCkgPCAxKQkJCQlcCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZlbmFibGUpIDwgMSkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCQlcCiAJCQkJCQkJCQlcCi0JcmV0dmFsID0gY2hhbmdlX291dHB1dHMoa2l0LCB2YWx1ZSAtIDEsIGVuYWJsZWQpOwkJXAorCWlmIChlbmFibGUpCQkJCQkJCVwKKwkJc2V0X2JpdCh2YWx1ZSAtIDEsICZraXQtPm91dHB1dHMpOwkJCVwKKwllbHNlCQkJCQkJCQlcCisJCWNsZWFyX2JpdCh2YWx1ZSAtIDEsICZraXQtPm91dHB1dHMpOyAJCQlcCisJCQkJCQkJCQlcCisJcmV0dmFsID0gc2V0X291dHB1dHMoa2l0KTsJCQkJCVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gcmV0dmFsID8gcmV0dmFsIDogY291bnQ7CQkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAorc3RhdGljIHNzaXplX3Qgc2hvd19vdXRwdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCQljaGFyICpidWYpCQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJXAorCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCQkJCQkJCQkJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAhIXRlc3RfYml0KHZhbHVlIC0gMSwgJmtpdC0+b3V0cHV0cykpO1wKLX0JCQkJCQkJCQlcCi1zdGF0aWMgREVWSUNFX0FUVFIob3V0cHV0IyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCQlzaG93X291dHB1dCMjdmFsdWUsIHNldF9vdXRwdXQjI3ZhbHVlKTsKK30KKworI2RlZmluZSBvdXRwdXRfYXR0cih2YWx1ZSkJCQkJCQlcCisJX19BVFRSKG91dHB1dCMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCVwKKwkJc2hvd19vdXRwdXQjI3ZhbHVlLCBzZXRfb3V0cHV0IyN2YWx1ZSkKKwogc2hvd19zZXRfb3V0cHV0KDEpOwogc2hvd19zZXRfb3V0cHV0KDIpOwogc2hvd19zZXRfb3V0cHV0KDMpOwpAQCAtNDE3LDE1ICs0NjIsMjQgQEAKIHNob3dfc2V0X291dHB1dCgxNSk7CiBzaG93X3NldF9vdXRwdXQoMTYpOwogCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X291dHB1dF9hdHRyc1tdID0geworCW91dHB1dF9hdHRyKDEpLCBvdXRwdXRfYXR0cigyKSwgb3V0cHV0X2F0dHIoMyksIG91dHB1dF9hdHRyKDQpLAorCW91dHB1dF9hdHRyKDUpLCBvdXRwdXRfYXR0cig2KSwgb3V0cHV0X2F0dHIoNyksIG91dHB1dF9hdHRyKDgpLAorCW91dHB1dF9hdHRyKDkpLCBvdXRwdXRfYXR0cigxMCksIG91dHB1dF9hdHRyKDExKSwgb3V0cHV0X2F0dHIoMTIpLAorCW91dHB1dF9hdHRyKDEzKSwgb3V0cHV0X2F0dHIoMTQpLCBvdXRwdXRfYXR0cigxNSksIG91dHB1dF9hdHRyKDE2KQorfTsKKwogI2RlZmluZSBzaG93X2lucHV0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzaG93X2lucHV0IyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5wdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAorCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJXAorCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCQkJCQkJCQkJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+aW5wdXRzW3ZhbHVlIC0gMV0pOwlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKGlucHV0IyN2YWx1ZSwgU19JUlVHTywgc2hvd19pbnB1dCMjdmFsdWUsIE5VTEwpOworfQorCisjZGVmaW5lIGlucHV0X2F0dHIodmFsdWUpCQkJCQkJXAorCV9fQVRUUihpbnB1dCMjdmFsdWUsIFNfSVJVR08sIHNob3dfaW5wdXQjI3ZhbHVlLCBOVUxMKQogCiBzaG93X2lucHV0KDEpOwogc2hvd19pbnB1dCgyKTsKQEAgLTQ0NCwxNSArNDk4LDI1IEBACiBzaG93X2lucHV0KDE1KTsKIHNob3dfaW5wdXQoMTYpOwogCitzdGF0aWMgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgZGV2X2lucHV0X2F0dHJzW10gPSB7CisJaW5wdXRfYXR0cigxKSwgaW5wdXRfYXR0cigyKSwgaW5wdXRfYXR0cigzKSwgaW5wdXRfYXR0cig0KSwKKwlpbnB1dF9hdHRyKDUpLCBpbnB1dF9hdHRyKDYpLCBpbnB1dF9hdHRyKDcpLCBpbnB1dF9hdHRyKDgpLAorCWlucHV0X2F0dHIoOSksIGlucHV0X2F0dHIoMTApLCBpbnB1dF9hdHRyKDExKSwgaW5wdXRfYXR0cigxMiksCisJaW5wdXRfYXR0cigxMyksIGlucHV0X2F0dHIoMTQpLCBpbnB1dF9hdHRyKDE1KSwgaW5wdXRfYXR0cigxNikKK307CisKICNkZWZpbmUgc2hvd19zZW5zb3IodmFsdWUpCVwKLXN0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vuc29yIyN2YWx1ZShzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCQljaGFyICpidWYpCQkJXAogewkJCQkJCQkJCVwKLQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiA9IHRvX3VzYl9pbnRlcmZhY2UoZGV2KTsJCVwKLQlzdHJ1Y3QgaW50ZXJmYWNla2l0ICpraXQgPSB1c2JfZ2V0X2ludGZkYXRhKGludGYpOwkJXAorCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCQkJCQkJCQkJXAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KWtpdC0+c2Vuc29yc1t2YWx1ZSAtIDFdKTsJXAotfQkJCQkJCQkJCVwKLXN0YXRpYyBERVZJQ0VfQVRUUihzZW5zb3IjI3ZhbHVlLCBTX0lSVUdPLCBzaG93X3NlbnNvciMjdmFsdWUsIE5VTEwpOworfQorCisjZGVmaW5lIHNlbnNvcl9hdHRyKHZhbHVlKQkJCQkJCVwKKwlfX0FUVFIoc2Vuc29yIyN2YWx1ZSwgU19JUlVHTywgc2hvd19zZW5zb3IjI3ZhbHVlLCBOVUxMKQogCiBzaG93X3NlbnNvcigxKTsKIHNob3dfc2Vuc29yKDIpOwpAQCAtNDYzLDYgKzUyNywxMSBAQAogc2hvd19zZW5zb3IoNyk7CiBzaG93X3NlbnNvcig4KTsKIAorc3RhdGljIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlIGRldl9zZW5zb3JfYXR0cnNbXSA9IHsKKwlzZW5zb3JfYXR0cigxKSwgc2Vuc29yX2F0dHIoMiksIHNlbnNvcl9hdHRyKDMpLCBzZW5zb3JfYXR0cig0KSwKKwlzZW5zb3JfYXR0cig1KSwgc2Vuc29yX2F0dHIoNiksIHNlbnNvcl9hdHRyKDcpLCBzZW5zb3JfYXR0cig4KQorfTsKKwogc3RhdGljIGludCBpbnRlcmZhY2VraXRfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRmKTsKQEAgLTQ3MSw2ICs1NDAsNyBAQAogCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKIAlzdHJ1Y3QgZHJpdmVyX2ludGVyZmFjZWtpdCAqaWZraXQ7CiAJaW50IHBpcGUsIG1heHAsIHJjID0gLUVOT01FTTsKKwlpbnQgYml0LCB2YWx1ZSwgaTsKIAogCWlma2l0ID0gKHN0cnVjdCBkcml2ZXJfaW50ZXJmYWNla2l0ICopaWQtPmRyaXZlcl9pbmZvOwogCWlmICghaWZraXQpCkBAIC00OTMsNiArNTYzLDcgQEAKIAlpZiAoIWtpdCkKIAkJZ290byBvdXQ7CiAKKwlraXQtPmRldl9ubyA9IC0xOwogCWtpdC0+aWZraXQgPSBpZmtpdDsKIAlraXQtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBTTEFCX0FUT01JQywgJmtpdC0+ZGF0YV9kbWEpOwogCWlmICgha2l0LT5kYXRhKQpAQCAtNTA1LDYgKzU3Niw3IEBACiAJa2l0LT51ZGV2ID0gdXNiX2dldF9kZXYoZGV2KTsKIAlraXQtPmludGYgPSBpbnRmOwogCUlOSVRfV09SSygma2l0LT5kb19ub3RpZnksIGRvX25vdGlmeSwga2l0KTsKKwlJTklUX1dPUksoJmtpdC0+ZG9fcmVzdWJtaXQsIGRvX3Jlc3VibWl0LCBraXQpOwogCXVzYl9maWxsX2ludF91cmIoa2l0LT5pcnEsIGtpdC0+dWRldiwgcGlwZSwga2l0LT5kYXRhLAogCQkJbWF4cCA+IFVSQl9JTlRfU0laRSA/IFVSQl9JTlRfU0laRSA6IG1heHAsCiAJCQlpbnRlcmZhY2VraXRfaXJxLCBraXQsIGVuZHBvaW50LT5iSW50ZXJ2YWwpOwpAQCAtNTEzLDg1ICs1ODUsODAgQEAKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50Ziwga2l0KTsKIAorICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB0ZXN0X2FuZF9zZXRfYml0KGJpdCwgJmRldmljZV9ubyk7CisgICAgICAgIH0gd2hpbGUodmFsdWUpOworICAgICAgICBraXQtPmRldl9ubyA9IGJpdDsKKworICAgICAgICBraXQtPmRldiA9IGRldmljZV9jcmVhdGUocGhpZGdldF9jbGFzcywgJmtpdC0+dWRldi0+ZGV2LCAwLAorICAgICAgICAgICAgICAgCQkiaW50ZXJmYWNla2l0JWQiLCBraXQtPmRldl9ubyk7CisgICAgICAgIGlmIChJU19FUlIoa2l0LT5kZXYpKSB7CisgICAgICAgICAgICAgICAgcmMgPSBQVFJfRVJSKGtpdC0+ZGV2KTsKKyAgICAgICAgICAgICAgICBraXQtPmRldiA9IE5VTEw7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKwlkZXZfc2V0X2RydmRhdGEoa2l0LT5kZXYsIGtpdCk7CisKIAlpZiAodXNiX3N1Ym1pdF91cmIoa2l0LT5pcnEsIEdGUF9LRVJORUwpKSB7CiAJCXJjID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKGlma2l0LT5vdXRwdXRzID49IDQpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQxKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQzKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ0KTsKLQl9Ci0JaWYgKGlma2l0LT5vdXRwdXRzID49IDgpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ1KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ2KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ3KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ4KTsKLQl9IAotCWlmIChpZmtpdC0+b3V0cHV0cyA9PSAxNikgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDkpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDEwKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQxMSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDEzKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQxNCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTUpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX291dHB1dDE2KTsKKwlmb3IgKGk9MDsgaTxpZmtpdC0+b3V0cHV0czsgaSsrICkgeworCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9vdXRwdXRfYXR0cnNbaV0pOworCQlpZiAocmMpCisJCQlnb3RvIG91dDI7CiAJfQogCi0JaWYgKGlma2l0LT5pbnB1dHMgPj0gNCkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0MSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQyKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDMpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0NCk7Ci0JfQotCWlmIChpZmtpdC0+aW5wdXRzID49IDgpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDUpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0Nik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ3KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9pbnB1dDgpOwotCX0KLQlpZiAoaWZraXQtPmlucHV0cyA9PSAxNikgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX2lucHV0OSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxMCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxMSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxMik7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxMyk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxNCk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxNSk7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxNik7CisJZm9yIChpPTA7IGk8aWZraXQtPmlucHV0czsgaSsrICkgeworCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShraXQtPmRldiwgJmRldl9pbnB1dF9hdHRyc1tpXSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0MzsKIAl9CiAKLQlpZiAoaWZraXQtPnNlbnNvcnMgPj0gNCkgewotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjEpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjIpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjMpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGYtPmRldiwgJmRldl9hdHRyX3NlbnNvcjQpOworCWZvciAoaT0wOyBpPGlma2l0LT5zZW5zb3JzOyBpKysgKSB7CisJCXJjID0gZGV2aWNlX2NyZWF0ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7CisJCWlmIChyYykKKwkJCWdvdG8gb3V0NDsKIAl9Ci0JaWYgKGlma2l0LT5zZW5zb3JzID49IDcpIHsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I1KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I2KTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRmLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I3KTsKLQl9Ci0JaWYgKGlma2l0LT5zZW5zb3JzID09IDgpCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yOCk7CiAKLQlpZiAoaWZraXQtPmhhc19sY2QpCi0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50Zi0+ZGV2LCAmZGV2X2F0dHJfbGNkKTsKKwlpZiAoaWZraXQtPmhhc19sY2QpIHsKKwkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOworCQlpZiAocmMpCisJCQlnb3RvIG91dDQ7CisKKwl9CiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgYXR0YWNoZWRcbiIsCiAJCQlpZmtpdC0+c2Vuc29ycywgaWZraXQtPmlucHV0cywgaWZraXQtPm91dHB1dHMpOwogCiAJcmV0dXJuIDA7CiAKK291dDQ6CisJd2hpbGUgKGktLSA+IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShraXQtPmRldiwgJmRldl9zZW5zb3JfYXR0cnNbaV0pOworCisJaSA9IGlma2l0LT5pbnB1dHM7CitvdXQzOgorCXdoaWxlIChpLS0gPiAwKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfaW5wdXRfYXR0cnNbaV0pOworCisJaSA9IGlma2l0LT5vdXRwdXRzOworb3V0MjoKKwl3aGlsZSAoaS0tID4gMCkKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7CiBvdXQ6CiAJaWYgKGtpdCkgewogCQlpZiAoa2l0LT5pcnEpCiAJCQl1c2JfZnJlZV91cmIoa2l0LT5pcnEpOwogCQlpZiAoa2l0LT5kYXRhKQogCQkJdXNiX2J1ZmZlcl9mcmVlKGRldiwgVVJCX0lOVF9TSVpFLCBraXQtPmRhdGEsIGtpdC0+ZGF0YV9kbWEpOworCQlpZiAoa2l0LT5kZXYpCisJCQlkZXZpY2VfdW5yZWdpc3RlcihraXQtPmRldik7CisJCWlmIChraXQtPmRldl9ubyA+PSAwKQorCQkJY2xlYXJfYml0KGtpdC0+ZGV2X25vLCAmZGV2aWNlX25vKTsKKwogCQlrZnJlZShraXQpOwogCX0KIApAQCAtNjAxLDYgKzY2OCw3IEBACiBzdGF0aWMgdm9pZCBpbnRlcmZhY2VraXRfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQogewogCXN0cnVjdCBpbnRlcmZhY2VraXQgKmtpdDsKKwlpbnQgaTsKIAogCWtpdCA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CkBAIC02MTIsNzQgKzY4MCwzMCBAQAogCXVzYl9idWZmZXJfZnJlZShraXQtPnVkZXYsIFVSQl9JTlRfU0laRSwga2l0LT5kYXRhLCBraXQtPmRhdGFfZG1hKTsKIAogCWNhbmNlbF9kZWxheWVkX3dvcmsoJmtpdC0+ZG9fbm90aWZ5KTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZraXQtPmRvX3Jlc3VibWl0KTsKIAotCWlmIChraXQtPmlma2l0LT5vdXRwdXRzID49IDQpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDEpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Mik7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQzKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDQpOwotCX0KLQlpZiAoa2l0LT5pZmtpdC0+b3V0cHV0cyA+PSA4KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ1KTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDYpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0Nyk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9vdXRwdXQ4KTsKLQl9Ci0JaWYgKGtpdC0+aWZraXQtPm91dHB1dHMgPT0gMTYpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX291dHB1dDkpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTApOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTEpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTIpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTMpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTQpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTUpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfb3V0cHV0MTYpOworCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPm91dHB1dHM7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X291dHB1dF9hdHRyc1tpXSk7CisKKwlmb3IgKGk9MDsgaTxraXQtPmlma2l0LT5pbnB1dHM7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X2lucHV0X2F0dHJzW2ldKTsKKworCWZvciAoaT0wOyBpPGtpdC0+aWZraXQtPnNlbnNvcnM7IGkrKykKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGtpdC0+ZGV2LCAmZGV2X3NlbnNvcl9hdHRyc1tpXSk7CisKKwlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCkgeworCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoa2l0LT5kZXYsICZkZXZfYXR0cl9sY2QpOworCQlyZW1vdmVfbGNkX2ZpbGVzKGtpdCk7CiAJfQogCi0JaWYgKGtpdC0+aWZraXQtPmlucHV0cyA+PSA0KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDEpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQyKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0Myk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDQpOwotCX0KLQlpZiAoa2l0LT5pZmtpdC0+aW5wdXRzID49IDgpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0NSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDYpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQ3KTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0OCk7Ci0JfQotCWlmIChraXQtPmlma2l0LT5pbnB1dHMgPT0gMTYpIHsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0OSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDEwKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0MTEpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxMik7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDEzKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2lucHV0MTQpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfaW5wdXQxNSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9pbnB1dDE2KTsKLQl9Ci0KLQlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycyA+PSA0KSB7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3IxKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjIpOwotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yMyk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I0KTsKLQl9Ci0JaWYgKGtpdC0+aWZraXQtPnNlbnNvcnMgPj0gNykgewotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yNSk7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZW5zb3I2KTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlbnNvcjcpOwotCX0KLQlpZiAoa2l0LT5pZmtpdC0+c2Vuc29ycyA9PSA4KQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vuc29yOCk7Ci0KLQlpZiAoa2l0LT5pZmtpdC0+aGFzX2xjZCkKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2xjZCk7CisJZGV2aWNlX3VucmVnaXN0ZXIoa2l0LT5kZXYpOwogCiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIFBoaWRnZXRJbnRlcmZhY2VLaXQgJWQvJWQvJWQgZGV0YWNoZWRcbiIsCiAJCWtpdC0+aWZraXQtPnNlbnNvcnMsIGtpdC0+aWZraXQtPmlucHV0cywga2l0LT5pZmtpdC0+b3V0cHV0cyk7CiAKIAl1c2JfcHV0X2RldihraXQtPnVkZXYpOworCWNsZWFyX2JpdChraXQtPmRldl9ubywgJmRldmljZV9ubyk7CisKIAlrZnJlZShraXQpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYyBiL2RyaXZlcnMvdXNiL21pc2MvcGhpZGdldG1vdG9yY29udHJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNTliNjIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRtb3RvcmNvbnRyb2wuYwpAQCAtMCwwICsxLDQ2NiBAQAorLyoKKyAqIFVTQiBQaGlkZ2V0IE1vdG9yQ29udHJvbCBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgIFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisKKyNpbmNsdWRlICJwaGlkZ2V0LmgiCisKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiU2VhbiBZb3VuZyA8c2VhbkBtZXNzLm9yZz4iCisjZGVmaW5lIERSSVZFUl9ERVNDICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBEcml2ZXIiCisKKyNkZWZpbmUgVVNCX1ZFTkRPUl9JRF9HTEFCCQkweDA2YzIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NT1RPUkNPTlRST0wJMHgwMDU4CisKKyNkZWZpbmUgVVJCX0lOVF9TSVpFCQkJOAorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBkZXZpY2Vfbm87CisKK3N0cnVjdCBtb3RvcmNvbnRyb2wgeworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmOworCXN0cnVjdCBkZXZpY2UgKmRldjsKKwlpbnQgZGV2X25vOworCXU4IGlucHV0c1s0XTsKKwlzOCBkZXNpcmVkX3NwZWVkWzJdOworCXM4IHNwZWVkWzJdOworCXMxNiBfY3VycmVudFsyXTsKKwlzOCBhY2NlbGVyYXRpb25bMl07CisJc3RydWN0IHVyYiAqaXJxOworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJZG1hX2FkZHJfdCBkYXRhX2RtYTsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCBkb19ub3RpZnk7CisJdW5zaWduZWQgbG9uZyBpbnB1dF9ldmVudHM7CisJdW5zaWduZWQgbG9uZyBzcGVlZF9ldmVudHM7CisJdW5zaWduZWQgbG9uZyBleGNlZWRfZXZlbnRzOworfTsKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGlkX3RhYmxlW10gPSB7CisJeyBVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfR0xBQiwgVVNCX0RFVklDRV9JRF9NT1RPUkNPTlRST0wpIH0sCisJe30KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCitzdGF0aWMgaW50IHNldF9tb3RvcihzdHJ1Y3QgbW90b3Jjb250cm9sICptYywgaW50IG1vdG9yKQoreworCXU4ICpidWZmZXI7CisJaW50IHNwZWVkLCBzcGVlZDIsIGFjY2VsZXJhdGlvbjsKKwlpbnQgcmV0dmFsOworCisJYnVmZmVyID0ga3phbGxvYyg4LCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZtYy0+aW50Zi0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlhY2NlbGVyYXRpb24gPSBtYy0+YWNjZWxlcmF0aW9uW21vdG9yXSAqIDEwOworCS8qIC0xMjcgPD0gc3BlZWQgPD0gMTI3ICovCisJc3BlZWQgPSAobWMtPmRlc2lyZWRfc3BlZWRbbW90b3JdICogMTI3KSAvIDEwMDsKKwkvKiAtMHg3MzAwIDw9IHNwZWVkMiA8PSAweDczMDAgKi8KKwlzcGVlZDIgPSAobWMtPmRlc2lyZWRfc3BlZWRbbW90b3JdICogMjMwICogMTI4KSAvIDEwMDsKKworCWJ1ZmZlclswXSA9IG1vdG9yOworCWJ1ZmZlclsxXSA9IHNwZWVkOworCWJ1ZmZlclsyXSA9IGFjY2VsZXJhdGlvbiA+PiA4OworCWJ1ZmZlclszXSA9IGFjY2VsZXJhdGlvbjsKKwlidWZmZXJbNF0gPSBzcGVlZDIgPj4gODsKKwlidWZmZXJbNV0gPSBzcGVlZDI7CisKKwlyZXR2YWwgPSB1c2JfY29udHJvbF9tc2cobWMtPnVkZXYsCisJCQkgdXNiX3NuZGN0cmxwaXBlKG1jLT51ZGV2LCAwKSwKKwkJCSAweDA5LCAweDIxLCAweDAyMDAsIDB4MDAwMCwgYnVmZmVyLCA4LCAyMDAwKTsKKworCWlmIChyZXR2YWwgIT0gOCkKKwkJZGV2X2VycigmbWMtPmludGYtPmRldiwgInVzYl9jb250cm9sX21zZyByZXR1cm5lZCAlZFxuIiwKKwkJCQlyZXR2YWwpOworCWtmcmVlKGJ1ZmZlcik7CisKKwlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IDA7Cit9CisKK3N0YXRpYyB2b2lkIG1vdG9yY29udHJvbF9pcnEoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3sKKwlzdHJ1Y3QgbW90b3Jjb250cm9sICptYyA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBtYy0+ZGF0YTsKKwlpbnQgaSwgbGV2ZWw7CisJaW50IHN0YXR1czsKKworCXN3aXRjaCAodXJiLT5zdGF0dXMpIHsKKwljYXNlIDA6CQkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgkvKiB1bmxpbmsgKi8KKwljYXNlIC1FTk9FTlQ6CisJY2FzZSAtRVNIVVRET1dOOgorCQlyZXR1cm47CisJLyogLUVQSVBFOiAgc2hvdWxkIGNsZWFyIHRoZSBoYWx0ICovCisJZGVmYXVsdDoJCS8qIGVycm9yICovCisJCWdvdG8gcmVzdWJtaXQ7CisJfQorCisJLyogZGlnaXRhbCBpbnB1dHMgKi8KKwlmb3IgKGk9MDsgaTw0OyBpKyspIHsKKwkJbGV2ZWwgPSAoYnVmZmVyWzBdID4+IGkpICYgMTsKKwkJaWYgKG1jLT5pbnB1dHNbaV0gIT0gbGV2ZWwpIHsKKwkJCW1jLT5pbnB1dHNbaV0gPSBsZXZlbDsKKwkJCXNldF9iaXQoaSwgJm1jLT5pbnB1dF9ldmVudHMpOworCQl9CisJfQorCisJLyogbW90b3Igc3BlZWQgKi8KKwlpZiAoYnVmZmVyWzJdID09IDApIHsKKwkJZm9yIChpPTA7IGk8MjsgaSsrKSB7CisJCWxldmVsID0gKChzOClidWZmZXJbNCtpXSkgKiAxMDAgLyAxMjc7CisJCQlpZiAobWMtPnNwZWVkW2ldICE9IGxldmVsKSB7CisJCQkJbWMtPnNwZWVkW2ldID0gbGV2ZWw7CisJCQkJc2V0X2JpdChpLCAmbWMtPnNwZWVkX2V2ZW50cyk7CisJCQl9CisJCX0KKwl9IGVsc2UgeworCQlpbnQgaW5kZXggPSBidWZmZXJbM10gJiAxOworCisJCWxldmVsID0gKChzOClidWZmZXJbNF0gPDwgOCkgfCBidWZmZXJbNV07CisJCWxldmVsID0gbGV2ZWwgKiAxMDAgLyAyOTQ0MDsKKwkJaWYgKG1jLT5zcGVlZFtpbmRleF0gIT0gbGV2ZWwpIHsKKwkJCW1jLT5zcGVlZFtpbmRleF0gPSBsZXZlbDsKKwkJCXNldF9iaXQoaW5kZXgsICZtYy0+c3BlZWRfZXZlbnRzKTsKKwkJfQorCisJCWxldmVsID0gKChzOClidWZmZXJbNl0gPDwgOCkgfCBidWZmZXJbN107CisJCW1jLT5fY3VycmVudFtpbmRleF0gPSBsZXZlbCAqIDEwMCAvIDE1NzI7CisJfQorCisJaWYgKGJ1ZmZlclsxXSAmIDEpCisJCXNldF9iaXQoMCwgJm1jLT5leGNlZWRfZXZlbnRzKTsKKworCWlmIChidWZmZXJbMV0gJiAyKQorCQlzZXRfYml0KDEsICZtYy0+ZXhjZWVkX2V2ZW50cyk7CisKKwlpZiAobWMtPmlucHV0X2V2ZW50cyB8fCBtYy0+ZXhjZWVkX2V2ZW50cyB8fCBtYy0+c3BlZWRfZXZlbnRzKQorCQlzY2hlZHVsZV93b3JrKCZtYy0+ZG9fbm90aWZ5KTsKKworcmVzdWJtaXQ6CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBTTEFCX0FUT01JQyk7CisJaWYgKHN0YXR1cykKKwkJZGV2X2VycigmbWMtPmludGYtPmRldiwKKwkJCSJjYW4ndCByZXN1Ym1pdCBpbnRyLCAlcy0lcy9tb3RvcmNvbnRyb2wwLCBzdGF0dXMgJWQiLAorCQkJbWMtPnVkZXYtPmJ1cy0+YnVzX25hbWUsCisJCQltYy0+dWRldi0+ZGV2cGF0aCwgc3RhdHVzKTsKK30KKworc3RhdGljIHZvaWQgZG9fbm90aWZ5KHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkYXRhOworCWludCBpOworCWNoYXIgc3lzZnNfZmlsZVs4XTsKKworCWZvciAoaT0wOyBpPDQ7IGkrKykgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+aW5wdXRfZXZlbnRzKSkgeworCQkJc3ByaW50ZihzeXNmc19maWxlLCAiaW5wdXQlZCIsIGkpOworCQkJc3lzZnNfbm90aWZ5KCZtYy0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKKwkJfQorCX0KKworCWZvciAoaT0wOyBpPDI7IGkrKykgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+c3BlZWRfZXZlbnRzKSkgeworCQkJc3ByaW50ZihzeXNmc19maWxlLCAic3BlZWQlZCIsIGkpOworCQkJc3lzZnNfbm90aWZ5KCZtYy0+ZGV2LT5rb2JqLCBOVUxMLCBzeXNmc19maWxlKTsKKwkJfQorCX0KKworCWZvciAoaT0wOyBpPDI7IGkrKykgeworCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksICZtYy0+ZXhjZWVkX2V2ZW50cykpCisJCQlkZXZfd2FybigmbWMtPmludGYtPmRldiwKKwkJCQkibW90b3IgIyVkIGV4Y2VlZHMgMS41IEFtcCBjdXJyZW50IGxpbWl0XG4iLCBpKTsKKwl9Cit9CisKKyNkZWZpbmUgc2hvd19zZXRfc3BlZWQodmFsdWUpCQlcCitzdGF0aWMgc3NpemVfdCBzZXRfc3BlZWQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAorCWludCBzcGVlZDsJCQkJCQkJXAorCWludCByZXR2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJnNwZWVkKSA8IDEpCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChzcGVlZCA8IC0xMDAgfHwgc3BlZWQgPiAxMDApCQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCW1jLT5kZXNpcmVkX3NwZWVkW3ZhbHVlXSA9IHNwZWVkOwkJCQlcCisJCQkJCQkJCQlcCisJcmV0dmFsID0gc2V0X21vdG9yKG1jLCB2YWx1ZSk7CQkJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHJldHZhbCA/IHJldHZhbCA6IGNvdW50OwkJCQkJXAorfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc3BlZWQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNoYXIgKmJ1ZikJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBtYy0+c3BlZWRbdmFsdWVdKTsJCQlcCit9CisKKyNkZWZpbmUgc3BlZWRfYXR0cih2YWx1ZSkgCQkJCQkJXAorCV9fQVRUUihzcGVlZCMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLCAJCQlcCisJCXNob3dfc3BlZWQjI3ZhbHVlLCBzZXRfc3BlZWQjI3ZhbHVlKQorCitzaG93X3NldF9zcGVlZCgwKTsKK3Nob3dfc2V0X3NwZWVkKDEpOworCisjZGVmaW5lIHNob3dfc2V0X2FjY2VsZXJhdGlvbih2YWx1ZSkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9hY2NlbGVyYXRpb24jI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwgCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAorCWludCBhY2NlbGVyYXRpb247CQkJCQkJXAorCWludCByZXR2YWw7CQkJCQkJCVwKKwkJCQkJCQkJCVwKKwlpZiAoc3NjYW5mKGJ1ZiwgIiVkIiwgJmFjY2VsZXJhdGlvbikgPCAxKQkJCVwKKwkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAorCQkJCQkJCQkJXAorCWlmIChhY2NlbGVyYXRpb24gPCAwIHx8IGFjY2VsZXJhdGlvbiA+IDEwMCkJCQlcCisJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKKwkJCQkJCQkJCVwKKwltYy0+YWNjZWxlcmF0aW9uW3ZhbHVlXSA9IGFjY2VsZXJhdGlvbjsJCQkJXAorCQkJCQkJCQkJXAorCXJldHZhbCA9IHNldF9tb3RvcihtYywgdmFsdWUpOwkJCQkJXAorCQkJCQkJCQkJXAorCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBjb3VudDsJCQkJCVwKK30JCQkJCQkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgc3NpemVfdCBzaG93X2FjY2VsZXJhdGlvbiMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkgCVwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCQkJCQljaGFyICpidWYpCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIG1jLT5hY2NlbGVyYXRpb25bdmFsdWVdKTsJCVwKK30KKworI2RlZmluZSBhY2NlbGVyYXRpb25fYXR0cih2YWx1ZSkJXAorCV9fQVRUUihhY2NlbGVyYXRpb24jI3ZhbHVlLCBTX0lXVUdPIHwgU19JUlVHTywJCQlcCisJCXNob3dfYWNjZWxlcmF0aW9uIyN2YWx1ZSwgc2V0X2FjY2VsZXJhdGlvbiMjdmFsdWUpCisKK3Nob3dfc2V0X2FjY2VsZXJhdGlvbigwKTsKK3Nob3dfc2V0X2FjY2VsZXJhdGlvbigxKTsKKworI2RlZmluZSBzaG93X2N1cnJlbnQodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfY3VycmVudCMjdmFsdWUoc3RydWN0IGRldmljZSAqZGV2LAkJCVwKKwkJCQkJc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCVwKKwkJCQkJY2hhciAqYnVmKQkJCVwKK3sJCQkJCQkJCQlcCisJc3RydWN0IG1vdG9yY29udHJvbCAqbWMgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCQlcCisJCQkJCQkJCQlcCisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRtQVxuIiwgKGludCltYy0+X2N1cnJlbnRbdmFsdWVdKTsJXAorfQorCisjZGVmaW5lIGN1cnJlbnRfYXR0cih2YWx1ZSkJXAorCV9fQVRUUihjdXJyZW50IyN2YWx1ZSwgU19JUlVHTywgc2hvd19jdXJyZW50IyN2YWx1ZSwgTlVMTCkKKworc2hvd19jdXJyZW50KDApOworc2hvd19jdXJyZW50KDEpOworCisjZGVmaW5lIHNob3dfaW5wdXQodmFsdWUpCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfaW5wdXQjI3ZhbHVlKHN0cnVjdCBkZXZpY2UgKmRldiwJCQlcCisJCQkJCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAlcCisJCQkJCWNoYXIgKmJ1ZikJCQlcCit7CQkJCQkJCQkJXAorCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jID0gZGV2X2dldF9kcnZkYXRhKGRldik7CQkJXAorCQkJCQkJCQkJXAorCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCAoaW50KW1jLT5pbnB1dHNbdmFsdWVdKTsJCVwKK30KKworI2RlZmluZSBpbnB1dF9hdHRyKHZhbHVlKQlcCisJX19BVFRSKGlucHV0IyN2YWx1ZSwgU19JUlVHTywgc2hvd19pbnB1dCMjdmFsdWUsIE5VTEwpCisKK3Nob3dfaW5wdXQoMCk7CitzaG93X2lucHV0KDEpOworc2hvd19pbnB1dCgyKTsKK3Nob3dfaW5wdXQoMyk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cnNbXSA9IHsKKwlpbnB1dF9hdHRyKDApLAorCWlucHV0X2F0dHIoMSksCisJaW5wdXRfYXR0cigyKSwKKwlpbnB1dF9hdHRyKDMpLAorCXNwZWVkX2F0dHIoMCksCisJc3BlZWRfYXR0cigxKSwKKwlhY2NlbGVyYXRpb25fYXR0cigwKSwKKwlhY2NlbGVyYXRpb25fYXR0cigxKSwKKwljdXJyZW50X2F0dHIoMCksCisJY3VycmVudF9hdHRyKDEpCit9OworCitzdGF0aWMgaW50IG1vdG9yY29udHJvbF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmludGVyZmFjZTsKKwlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OworCXN0cnVjdCBtb3RvcmNvbnRyb2wgKm1jOworCWludCBwaXBlLCBtYXhwLCByYyA9IC1FTk9NRU07CisJaW50IGJpdCwgdmFsdWUsIGk7CisKKwlpbnRlcmZhY2UgPSBpbnRmLT5jdXJfYWx0c2V0dGluZzsKKwlpZiAoaW50ZXJmYWNlLT5kZXNjLmJOdW1FbmRwb2ludHMgIT0gMSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwllbmRwb2ludCA9ICZpbnRlcmZhY2UtPmVuZHBvaW50WzBdLmRlc2M7CisJaWYgKCEoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKgorCSAqIGJtQXR0cmlidXRlcworCSAqLworCXBpcGUgPSB1c2JfcmN2aW50cGlwZShkZXYsIGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzKTsKKwltYXhwID0gdXNiX21heHBhY2tldChkZXYsIHBpcGUsIHVzYl9waXBlb3V0KHBpcGUpKTsKKworCW1jID0ga3phbGxvYyhzaXplb2YoKm1jKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYykKKwkJZ290byBvdXQ7CisKKwltYy0+ZGV2X25vID0gLTE7CisJbWMtPmRhdGEgPSB1c2JfYnVmZmVyX2FsbG9jKGRldiwgVVJCX0lOVF9TSVpFLCBTTEFCX0FUT01JQywgJm1jLT5kYXRhX2RtYSk7CisJaWYgKCFtYy0+ZGF0YSkKKwkJZ290byBvdXQ7CisKKwltYy0+aXJxID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwlpZiAoIW1jLT5pcnEpCisJCWdvdG8gb3V0OworCisJbWMtPnVkZXYgPSB1c2JfZ2V0X2RldihkZXYpOworCW1jLT5pbnRmID0gaW50ZjsKKwltYy0+YWNjZWxlcmF0aW9uWzBdID0gbWMtPmFjY2VsZXJhdGlvblsxXSA9IDEwOworCUlOSVRfV09SSygmbWMtPmRvX25vdGlmeSwgZG9fbm90aWZ5LCBtYyk7CisJdXNiX2ZpbGxfaW50X3VyYihtYy0+aXJxLCBtYy0+dWRldiwgcGlwZSwgbWMtPmRhdGEsCisJCQltYXhwID4gVVJCX0lOVF9TSVpFID8gVVJCX0lOVF9TSVpFIDogbWF4cCwKKwkJCW1vdG9yY29udHJvbF9pcnEsIG1jLCBlbmRwb2ludC0+YkludGVydmFsKTsKKwltYy0+aXJxLT50cmFuc2Zlcl9kbWEgPSBtYy0+ZGF0YV9kbWE7CisJbWMtPmlycS0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwl1c2Jfc2V0X2ludGZkYXRhKGludGYsIG1jKTsKKworCWRvIHsKKwkJYml0ID0gZmluZF9maXJzdF96ZXJvX2JpdCgmZGV2aWNlX25vLCBzaXplb2YoZGV2aWNlX25vKSk7CisJCXZhbHVlID0gdGVzdF9hbmRfc2V0X2JpdChiaXQsICZkZXZpY2Vfbm8pOworCX0gd2hpbGUodmFsdWUpOworCW1jLT5kZXZfbm8gPSBiaXQ7CisKKwltYy0+ZGV2ID0gZGV2aWNlX2NyZWF0ZShwaGlkZ2V0X2NsYXNzLCAmbWMtPnVkZXYtPmRldiwgMCwKKwkJCQkibW90b3Jjb250cm9sJWQiLCBtYy0+ZGV2X25vKTsKKwlpZiAoSVNfRVJSKG1jLT5kZXYpKSB7CisJCXJjID0gUFRSX0VSUihtYy0+ZGV2KTsKKwkJbWMtPmRldiA9IE5VTEw7CisJCWdvdG8gb3V0OworCX0KKworCWRldl9zZXRfZHJ2ZGF0YShtYy0+ZGV2LCBtYyk7CisKKwlpZiAodXNiX3N1Ym1pdF91cmIobWMtPmlycSwgR0ZQX0tFUk5FTCkpIHsKKwkJcmMgPSAtRUlPOworCQlnb3RvIG91dDsKKwl9CisKKwlmb3IgKGk9MDsgaTxBUlJBWV9TSVpFKGRldl9hdHRycyk7IGkrKykgeworCQlyYyA9IGRldmljZV9jcmVhdGVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKKwkJaWYgKHJjKQorCQkJZ290byBvdXQyOworCX0KKworCWRldl9pbmZvKCZpbnRmLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBhdHRhY2hlZFxuIik7CisKKwlyZXR1cm4gMDsKK291dDI6CisJd2hpbGUgKGktLSA+IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKK291dDoKKwlpZiAobWMpIHsKKwkJaWYgKG1jLT5pcnEpCisJCQl1c2JfZnJlZV91cmIobWMtPmlycSk7CisJCWlmIChtYy0+ZGF0YSkKKwkJCXVzYl9idWZmZXJfZnJlZShkZXYsIFVSQl9JTlRfU0laRSwgbWMtPmRhdGEsIG1jLT5kYXRhX2RtYSk7CisJCWlmIChtYy0+ZGV2KQorCQkJZGV2aWNlX3VucmVnaXN0ZXIobWMtPmRldik7CisJCWlmIChtYy0+ZGV2X25vID49IDApCisJCQljbGVhcl9iaXQobWMtPmRldl9ubywgJmRldmljZV9ubyk7CisKKwkJa2ZyZWUobWMpOworCX0KKworCXJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgbW90b3Jjb250cm9sX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlzdHJ1Y3QgbW90b3Jjb250cm9sICptYzsKKwlpbnQgaTsKKworCW1jID0gdXNiX2dldF9pbnRmZGF0YShpbnRlcmZhY2UpOworCXVzYl9zZXRfaW50ZmRhdGEoaW50ZXJmYWNlLCBOVUxMKTsKKwlpZiAoIW1jKQorCQlyZXR1cm47CisKKwl1c2Jfa2lsbF91cmIobWMtPmlycSk7CisJdXNiX2ZyZWVfdXJiKG1jLT5pcnEpOworCXVzYl9idWZmZXJfZnJlZShtYy0+dWRldiwgVVJCX0lOVF9TSVpFLCBtYy0+ZGF0YSwgbWMtPmRhdGFfZG1hKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmsoJm1jLT5kb19ub3RpZnkpOworCisJZm9yIChpPTA7IGk8QVJSQVlfU0laRShkZXZfYXR0cnMpOyBpKyspCisJCWRldmljZV9yZW1vdmVfZmlsZShtYy0+ZGV2LCAmZGV2X2F0dHJzW2ldKTsKKworCWRldmljZV91bnJlZ2lzdGVyKG1jLT5kZXYpOworCisJdXNiX3B1dF9kZXYobWMtPnVkZXYpOworCWNsZWFyX2JpdChtYy0+ZGV2X25vLCAmZGV2aWNlX25vKTsKKwlrZnJlZShtYyk7CisKKwlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgUGhpZGdldE1vdG9yQ29udHJvbCBkZXRhY2hlZFxuIik7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBtb3RvcmNvbnRyb2xfZHJpdmVyID0geworCS5uYW1lID0gInBoaWRnZXRtb3RvcmNvbnRyb2wiLAorCS5wcm9iZSA9IG1vdG9yY29udHJvbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9IG1vdG9yY29udHJvbF9kaXNjb25uZWN0LAorCS5pZF90YWJsZSA9IGlkX3RhYmxlCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtb3RvcmNvbnRyb2xfaW5pdCh2b2lkKQoreworCWludCByZXR2YWwgPSAwOworCisJcmV0dmFsID0gdXNiX3JlZ2lzdGVyKCZtb3RvcmNvbnRyb2xfZHJpdmVyKTsKKwlpZiAocmV0dmFsKQorCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJldHZhbCk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgbW90b3Jjb250cm9sX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3RlcigmbW90b3Jjb250cm9sX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG1vdG9yY29udHJvbF9pbml0KTsKK21vZHVsZV9leGl0KG1vdG9yY29udHJvbF9leGl0KTsKKworTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKK01PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jIGIvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYwppbmRleCBjMGRmNzljOS4uNzE2M2YwNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbWlzYy9waGlkZ2V0c2Vydm8uYworKysgYi9kcml2ZXJzL3VzYi9taXNjL3BoaWRnZXRzZXJ2by5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIFVTQiBQaGlkZ2V0U2Vydm8gZHJpdmVyIDEuMAogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNCBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA2IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xNSwxNCArMTUsNiBAQAogICoKICAqIENBVVRJT046IEdlbmVyYWxseSB5b3Ugc2hvdWxkIHVzZSAwIDwgZGVncmVlcyA8IDE4MCBhcyBhbnl0aGluZyBlbHNlCiAgKiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHJhbmdlIG9mIHlvdXIgc2Vydm8gYW5kIG1heSBkYW1hZ2UgaXQuCi0gKgotICogSnVuIDE2LCAyMDA0OiBTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPgotICogIC0gY2xlYW51cHMKLSAqICAtIHdhcyB1c2luZyBtZW1vcnkgYWZ0ZXIga2ZyZWUoKQotICogQXVnIDgsIDIwMDQ6IFNlYW4gWW91bmcgPHNlYW5AbWVzcy5vcmc+Ci0gKiAgLSBzZXQgdGhlIGhpZ2hlc3QgYW5nbGUgYXMgaGlnaCBhcyB0aGUgaGFyZHdhcmUgYWxsb3dzLCB0aGVyZSBhcmUgCi0gKiAgICBzb21lIG9kZCBzZXJ2b3Mgb3V0IHRoZXJlCi0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTMyLDYgKzI0LDggQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KIAorI2luY2x1ZGUgInBoaWRnZXQuaCIKKwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJTZWFuIFlvdW5nIDxzZWFuQG1lc3Mub3JnPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlVTQiBQaGlkZ2V0U2Vydm8gRHJpdmVyIgogCkBAIC03MCw4ICs2NCwxMiBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCitzdGF0aWMgaW50IHVuc2lnbmVkIGxvbmcgZGV2aWNlX25vOworCiBzdHJ1Y3QgcGhpZGdldF9zZXJ2byB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXY7CisJc3RydWN0IGRldmljZSAqZGV2OworCWludCBkZXZfbm87CiAJdWxvbmcgdHlwZTsKIAlpbnQgcHVsc2VbNF07CiAJaW50IGRlZ3JlZXNbNF07CkBAIC0yMDMsMTYgKzIwMSwxNiBAQAogfQogCiAjZGVmaW5lIHNob3dfc2V0KHZhbHVlKQlcCi1zdGF0aWMgc3NpemVfdCBzZXRfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAkJCVwKK3N0YXRpYyBzc2l6ZV90IHNldF9zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgCQkJXAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAogCQkJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudCkJXAogewkJCQkJCQkJCVwKIAlpbnQgZGVncmVlcywgbWludXRlcywgcmV0dmFsOwkJCQkJXAotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmID0gdG9fdXNiX2ludGVyZmFjZSAoZGV2KTsJCVwKLQlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSB1c2JfZ2V0X2ludGZkYXRhIChpbnRmKTsJCVwKKwlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqc2Vydm8gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsJCVwKIAkJCQkJCQkJCVwKIAltaW51dGVzID0gMDsJCQkJCQkJXAogCS8qIG11c3QgYXQgbGVhc3QgY29udmVydCBkZWdyZWVzICovCQkJCVwKLQlpZiAoc3NjYW5mIChidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCisJaWYgKHNzY2FuZihidWYsICIlZC4lZCIsICZkZWdyZWVzLCAmbWludXRlcykgPCAxKSB7CQlcCiAJCXJldHVybiAtRUlOVkFMOwkJCQkJCVwKIAl9CQkJCQkJCQlcCiAJCQkJCQkJCQlcCkBAIC0yMjAsODYgKzIxOCwxMjcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CQkJCQkJXAogCQkJCQkJCQkJXAogCWlmIChzZXJ2by0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzApCQkJCVwKLQkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YzMCAoc2Vydm8sIHZhbHVlLCBkZWdyZWVzLCAJXAorCQlyZXR2YWwgPSBjaGFuZ2VfcG9zaXRpb25fdjMwKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKIAkJCQkJCQltaW51dGVzKTsJXAogCWVsc2UgCQkJCQkJCQlcCi0JCXJldHZhbCA9IGNoYW5nZV9wb3NpdGlvbl92MjAgKHNlcnZvLCB2YWx1ZSwgZGVncmVlcywgCVwKKwkJcmV0dmFsID0gY2hhbmdlX3Bvc2l0aW9uX3YyMChzZXJ2bywgdmFsdWUsIGRlZ3JlZXMsIAlcCiAJCQkJCQkJbWludXRlcyk7CVwKIAkJCQkJCQkJCVwKIAlyZXR1cm4gcmV0dmFsIDwgMCA/IHJldHZhbCA6IGNvdW50OwkJCQlcCiB9CQkJCQkJCQkJXAogCQkJCQkJCQkJXAotc3RhdGljIHNzaXplX3Qgc2hvd19zZXJ2byMjdmFsdWUgKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikgCVwKK3N0YXRpYyBzc2l6ZV90IHNob3dfc2Vydm8jI3ZhbHVlIChzdHJ1Y3QgZGV2aWNlICpkZXYsCQkJXAorCQkJCQlzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwJXAorCQkJCQljaGFyICpidWYpIAkJCVwKIHsJCQkJCQkJCQlcCi0Jc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYgPSB0b191c2JfaW50ZXJmYWNlIChkZXYpOwkJXAotCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IHVzYl9nZXRfaW50ZmRhdGEgKGludGYpOwkJXAorCXN0cnVjdCBwaGlkZ2V0X3NlcnZvICpzZXJ2byA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwkJXAogCQkJCQkJCQkJXAotCXJldHVybiBzcHJpbnRmIChidWYsICIlZC4lMDJkXG4iLCBzZXJ2by0+ZGVncmVlc1t2YWx1ZV0sCVwKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZC4lMDJkXG4iLCBzZXJ2by0+ZGVncmVlc1t2YWx1ZV0sCQlcCiAJCQkJc2Vydm8tPm1pbnV0ZXNbdmFsdWVdKTsJCQlcCi19CQkJCQkJCQkJXAotc3RhdGljIERFVklDRV9BVFRSKHNlcnZvIyN2YWx1ZSwgU19JV1VHTyB8IFNfSVJVR08sCQkJXAotCSAgc2hvd19zZXJ2byMjdmFsdWUsIHNldF9zZXJ2byMjdmFsdWUpOworfQogCisjZGVmaW5lIHNlcnZvX2F0dHIodmFsdWUpCQkJCQkJXAorCV9fQVRUUihzZXJ2byMjdmFsdWUsIFNfSVdVR08gfCBTX0lSVUdPLAkJCQlcCisJCXNob3dfc2Vydm8jI3ZhbHVlLCBzZXRfc2Vydm8jI3ZhbHVlKQogc2hvd19zZXQoMCk7CiBzaG93X3NldCgxKTsKIHNob3dfc2V0KDIpOwogc2hvd19zZXQoMyk7CiAKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cnNbXSA9IHsKKwlzZXJ2b19hdHRyKDApLCBzZXJ2b19hdHRyKDEpLCBzZXJ2b19hdHRyKDIpLCBzZXJ2b19hdHRyKDMpCit9OworCiBzdGF0aWMgaW50CiBzZXJ2b19wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLCBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGVyZmFjZSk7CiAJc3RydWN0IHBoaWRnZXRfc2Vydm8gKmRldjsKKwlpbnQgYml0LCB2YWx1ZSwgcmM7CisJaW50IHNlcnZvX2NvdW50LCBpOwogCiAJZGV2ID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBwaGlkZ2V0X3NlcnZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRldiA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJmludGVyZmFjZS0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5XG4iLCBfX0ZVTkNUSU9OX18pOwotCQlyZXR1cm4gLUVOT01FTTsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKIAl9CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAlkZXYtPnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CisJZGV2LT5kZXZfbm8gPSAtMTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKIAotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzApOwotCWlmIChkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEKSB7Ci0JCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzEpOwotCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8yKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMyk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBiaXQgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCZkZXZpY2Vfbm8sIHNpemVvZihkZXZpY2Vfbm8pKTsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHRlc3RfYW5kX3NldF9iaXQoYml0LCAmZGV2aWNlX25vKTsKKyAgICAgICAgfSB3aGlsZSAodmFsdWUpOworCWRldi0+ZGV2X25vID0gYml0OworCisJZGV2LT5kZXYgPSBkZXZpY2VfY3JlYXRlKHBoaWRnZXRfY2xhc3MsICZkZXYtPnVkZXYtPmRldiwgMCwKKwkJCQkgInNlcnZvJWQiLCBkZXYtPmRldl9ubyk7CisJaWYgKElTX0VSUihkZXYtPmRldikpIHsKKwkJcmMgPSBQVFJfRVJSKGRldi0+ZGV2KTsKKwkJZGV2LT5kZXYgPSBOVUxMOworCQlnb3RvIG91dDsKKwl9CisKKwlzZXJ2b19jb3VudCA9IGRldi0+dHlwZSAmIFNFUlZPX0NPVU5UX1FVQUQgPyA0IDogMTsKKworCWZvciAoaT0wOyBpPHNlcnZvX2NvdW50OyBpKyspIHsKKwkJcmMgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOworCQlpZiAocmMpCisJCQlnb3RvIG91dDI7CiAJfQogCiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCICVkLU1vdG9yIFBoaWRnZXRTZXJ2byB2JWQuMCBhdHRhY2hlZFxuIiwKLQkJZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCA/IDQgOiAxLAotCQlkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOworCQlzZXJ2b19jb3VudCwgZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCA/IDMgOiAyKTsKIAotCWlmKCEoZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkpCisJaWYgKCEoZGV2LT50eXBlICYgU0VSVk9fVkVSU0lPTl8zMCkpCiAJCWRldl9pbmZvKCZpbnRlcmZhY2UtPmRldiwKIAkJCSAiV0FSTklORzogdjIuMCBub3QgdGVzdGVkISBQbGVhc2UgcmVwb3J0IGlmIGl0IHdvcmtzLlxuIik7CiAKIAlyZXR1cm4gMDsKK291dDI6CisJd2hpbGUgKGktLSA+IDApCisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYtPmRldiwgJmRldl9hdHRyc1tpXSk7CitvdXQ6CisJaWYgKGRldikgeworCQlpZiAoZGV2LT5kZXYpCisJCQlkZXZpY2VfdW5yZWdpc3RlcihkZXYtPmRldik7CisJCWlmIChkZXYtPmRldl9ubyA+PSAwKQorCQkJY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKKworCQlrZnJlZShkZXYpOworCX0KKworCXJldHVybiByYzsKIH0KIAogc3RhdGljIHZvaWQKIHNlcnZvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKIHsKIAlzdHJ1Y3QgcGhpZGdldF9zZXJ2byAqZGV2OworCWludCBzZXJ2b19jb3VudCwgaTsKIAogCWRldiA9IHVzYl9nZXRfaW50ZmRhdGEoaW50ZXJmYWNlKTsKIAl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgTlVMTCk7CiAKLQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8wKTsKLQlpZiAoZGV2LT50eXBlICYgU0VSVk9fQ09VTlRfUVVBRCkgewotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfc2Vydm8xKTsKLQkJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX3NlcnZvMik7Ci0JCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9zZXJ2bzMpOwotCX0KKwlpZiAoIWRldikKKwkJcmV0dXJuOwogCisJc2Vydm9fY291bnQgPSBkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDE7CisKKwlmb3IgKGk9MDsgaTxzZXJ2b19jb3VudDsgaSsrKQorCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LT5kZXYsICZkZXZfYXR0cnNbaV0pOworCisJZGV2aWNlX3VucmVnaXN0ZXIoZGV2LT5kZXYpOwogCXVzYl9wdXRfZGV2KGRldi0+dWRldik7CiAKIAlkZXZfaW5mbygmaW50ZXJmYWNlLT5kZXYsICJVU0IgJWQtTW90b3IgUGhpZGdldFNlcnZvIHYlZC4wIGRldGFjaGVkXG4iLAotCQlkZXYtPnR5cGUgJiBTRVJWT19DT1VOVF9RVUFEID8gNCA6IDEsCi0JCWRldi0+dHlwZSAmIFNFUlZPX1ZFUlNJT05fMzAgPyAzIDogMik7CisJCXNlcnZvX2NvdW50LCBkZXYtPnR5cGUgJiBTRVJWT19WRVJTSU9OXzMwID8gMyA6IDIpOwogCisJY2xlYXJfYml0KGRldi0+ZGV2X25vLCAmZGV2aWNlX25vKTsKIAlrZnJlZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3Npc3VzYnZnYS9zaXN1c2IuYyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCmluZGV4IGUxNjU4MmYuLmE0NDEyNGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2Mvc2lzdXNidmdhL3Npc3VzYi5jCkBAIC0zMTc5LDcgKzMxNzksNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9zaXN1c2JfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHVzYl9zaXN1c2JfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQlzaXN1c2Jfb3BlbiwKIAkucmVsZWFzZSA9CXNpc3VzYl9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbWlzYy91c2JfdTEzMi5oIGIvZHJpdmVycy91c2IvbWlzYy91c2JfdTEzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MWJhODkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3VzYi9taXNjL3VzYl91MTMyLmgKQEAgLTAsMCArMSw5NyBAQAorLyoKKyogQ29tbW9uIEhlYWRlciBGaWxlIGZvciB0aGUgRWxhbiBEaWdpdGFsIFN5c3RlbXMgVTEzMiBhZGFwdGVyCisqIHRoaXMgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQgYnkgYm90aCB0aGUgImZ0ZGktdTEzMiIgYW5kCisqIHRoZSAidTEzMi1oY2QiIG1vZHVsZXMuCisqCisqIENvcHlyaWdodChDKSAyMDA2IEVsYW4gRGlnaXRhbCBTeXN0ZW1zIExpbWl0ZWQKKyooaHR0cDovL3d3dy5lbGFuZGlnaXRhbHN5c3RlbXMuY29tKQorKgorKiBBdXRob3IgYW5kIE1haW50YWluZXIgLSBUb255IE9sZWNoIC0gRWxhbiBEaWdpdGFsIFN5c3RlbXMKKyoodG9ueS5vbGVjaEBlbGFuZGlnaXRhbHN5c3RlbXMuY29tKQorKgorKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTt5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyoKKyoKKyogVGhlIGRyaXZlciB3YXMgd3JpdHRlbiBieSBUb255IE9sZWNoKHRvbnkub2xlY2hAZWxhbmRpZ2l0YWxzeXN0ZW1zLmNvbSkKKyogYmFzZWQgb24gdmFyaW91cyBVU0IgY2xpZW50IGRyaXZlcnMgaW4gdGhlIDIuNi4xNSBsaW51eCBrZXJuZWwKKyogd2l0aCBjb25zdGFudCByZWZlcmVuY2UgdG8gdGhlIDNyZCBFZGl0aW9uIG9mIExpbnV4IERldmljZSBEcml2ZXJzCisqIHB1Ymxpc2hlZCBieSBPJ1JlaWxseQorKgorKiBUaGUgVTEzMiBhZGFwdGVyIGlzIGEgVVNCIHRvIENhcmRCdXMgYWRhcHRlciBzcGVjaWZpY2FsbHkgZGVzaWduZWQKKyogZm9yIFBDIGNhcmRzIHRoYXQgY29udGFpbiBhbiBPSENJIGhvc3QgY29udHJvbGxlci4gVHlwaWNhbCBQQyBjYXJkcworKiBhcmUgdGhlIE9yYW5nZSBNb2JpbGUgM0cgT3B0aW9uIEdsb2JlVHJvdHRlciBGdXNpb24gY2FyZC4KKyoKKyogVGhlIFUxMzIgYWRhcHRlciB3aWxsICpOT1QgKndvcmsgd2l0aCBQQyBjYXJkcyB0aGF0IGRvIG5vdCBjb250YWluCisqIGFuIE9IQ0kgY29udHJvbGxlci4gQSBzaW1wbGUgd2F5IHRvIHRlc3Qgd2hldGhlciBhIFBDIGNhcmQgaGFzIGFuCisqIE9IQ0kgY29udHJvbGxlciBhcyBhbiBpbnRlcmZhY2UgaXMgdG8gaW5zZXJ0IHRoZSBQQyBjYXJkIGRpcmVjdGx5CisqIGludG8gYSBsYXB0b3Aob3IgZGVza3RvcCkgd2l0aCBhIENhcmRCdXMgc2xvdCBhbmQgaWYgImxzcGNpIiBzaG93cworKiBhIG5ldyBVU0IgY29udHJvbGxlciBhbmQgImxzdXNiIC12IiBzaG93cyBhIG5ldyBPSENJIEhvc3QgQ29udHJvbGxlcgorKiB0aGVuIHRoZXJlIGlzIGEgZ29vZCBjaGFuY2UgdGhhdCB0aGUgVTEzMiBhZGFwdGVyIHdpbGwgc3VwcG9ydCB0aGUKKyogUEMgY2FyZC4oeW91IGFsc28gbmVlZCB0aGUgc3BlY2lmaWMgY2xpZW50IGRyaXZlciBmb3IgdGhlIFBDIGNhcmQpCisqCisqIFBsZWFzZSBpbmZvcm0gdGhlIEF1dGhvciBhbmQgTWFpbnRhaW5lciBhYm91dCBhbnkgUEMgY2FyZHMgdGhhdAorKiBjb250YWluIE9IQ0kgSG9zdCBDb250cm9sbGVyIGFuZCB3b3JrIHdoZW4gZGlyZWN0bHkgY29ubmVjdGVkIHRvCisqIGFuIGVtYmVkZGVkIENhcmRCdXMgc2xvdCBidXQgZG8gbm90IHdvcmsgd2hlbiB0aGV5IGFyZSBjb25uZWN0ZWQKKyogdmlhIGFuIEVMQU4gVTEzMiBhZGFwdGVyLgorKgorKiBUaGUgZHJpdmVyIGNvbnNpc3RzIG9mIHR3byBtb2R1bGVzLCB0aGUgImZ0ZGktdTEzMiIgbW9kdWxlIGlzCisqIGEgVVNCIGNsaWVudCBkcml2ZXIgdGhhdCBpbnRlcmZhY2VzIHRvIHRoZSBGVERJIGNoaXAgd2l0aGluCisqIHRoZSBVMTMyIGFkYXB0ZXIgbWFudWZhY3R1cmVkIGJ5IEVsYW4gRGlnaXRhbCBTeXN0ZW1zLCBhbmQgdGhlCisqICJ1MTMyLWhjZCIgbW9kdWxlIGlzIGEgVVNCIGhvc3QgY29udHJvbGxlciBkcml2ZXIgdGhhdCB0YWxrcworKiB0byB0aGUgT0hDSSBjb250cm9sbGVyIHdpdGhpbiBDYXJkQnVzIGNhcmQgdGhhdCBhcmUgaW5zZXJ0ZWQKKyogaW4gdGhlIFUxMzIgYWRhcHRlci4KKyoKKyogVGhlICJmdGRpLXUxMzIiIG1vZHVsZSBzaG91bGQgYmUgbG9hZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlCisqIGhvdCBwbHVnIHN5c3RlbSB3aGVuIHRoZSBVMTMyIGFkYXB0ZXIgaXMgcGx1Z2dlZCBpbi4gVGhlIG1vZHVsZQorKiBpbml0aWFsaXNlcyB0aGUgYWRhcHRlciB3aGljaCBtb3N0bHkgY29uc2lzdHMgb2Ygc3luY2hyb25pc2luZworKiB0aGUgRlRESSBjaGlwLCBiZWZvcmUgY29udGludW91c2x5IHBvbGxpbmcgdGhlIGFkYXB0ZXIgdG8gZGV0ZWN0CisqIFBDIGNhcmQgaW5zZXJ0aW9ucy4gQXMgc29vbiBhcyBhIFBDIGNhcmQgY29udGFpbmluZyBhIHJlY29nbmlzZWQKKyogT0hDSSBjb250cm9sbGVyIGlzIHNlZW4gdGhlICJmdGRpLXUxMzIiIG1vZHVsZSBleHBsaWNpdGx5IHJlcXVlc3RzCisqIHRoZSBrZXJuZWwgdG8gbG9hZCB0aGUgInUxMzItaGNkIiBtb2R1bGUuCisqCisqIFRoZSAiZnRkaS11MTMyIiBtb2R1bGUgcHJvdmlkZXMgdGhlIGludGVyZmFjZSB0byB0aGUgaW5zZXJ0ZWQKKyogUEMgY2FyZCBhbmQgdGhlICJ1MTMyLWhjZCIgbW9kdWxlIHVzZXMgdGhlIEFQSSB0byBzZW5kIGFuZCByZWNpZXZlCisqIGRhdGEuIFRoZSBBUEkgZmVhdHVyZXMgY2FsbC1iYWNrcywgc28gdGhhdCBwYXJ0IG9mIHRoZSAidTEzMi1oY2QiCisqIG1vZHVsZSBjb2RlIHdpbGwgcnVuIGluIHRoZSBjb250ZXh0IG9mIG9uZSBvZiB0aGUga2VybmVsIHRocmVhZHMKKyogb2YgdGhlICJmdGRpLXUxMzIiIG1vZHVsZS4KKyoKKyovCitpbnQgZnRkaV9lbGFuX3N3aXRjaF9vbl9kaWFnbm9zdGljcyhpbnQgbnVtYmVyKTsKK3ZvaWQgZnRkaV9lbGFuX2dvbmVfYXdheShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KTsKK3ZvaWQgc3RhcnRfdXNiX2xvY2tfZGV2aWNlX3RyYWNpbmcodm9pZCk7CitzdHJ1Y3QgdTEzMl9wbGF0Zm9ybV9kYXRhIHsKKyAgICAgICAgdTE2IHZlbmRvcjsKKyAgICAgICAgdTE2IGRldmljZTsKKyAgICAgICAgdTggcG90cGc7CisgICAgICAgIHZvaWQgKCpwb3J0X3Bvd2VyKSAoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgaXNfb24pOworICAgICAgICB2b2lkICgqcmVzZXQpIChzdHJ1Y3QgZGV2aWNlICpkZXYpOworfTsKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X3NpbmdsZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCBlZF9udW1iZXIsCisgICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKTsKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X291dHB1dChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCBlZF9udW1iZXIsCisgICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKTsKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X2VtcHR5KHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCBhZGRyZXNzLCB1OCBlcF9udW1iZXIsIHU4IHRvZ2dsZV9iaXRzLAorICAgICAgICB2b2lkICgqY2FsbGJhY2spICh2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4ICpidWYsIGludCBsZW4sCisgICAgICAgIGludCB0b2dnbGVfYml0cywgaW50IGVycm9yX2NvdW50LCBpbnQgY29uZGl0aW9uX2NvZGUsIGludCByZXBlYXRfbnVtYmVyLAorICAgICAgICAgaW50IGhhbHRlZCwgaW50IHNraXBwZWQsIGludCBhY3R1YWwsIGludCBub25fbnVsbCkpOworaW50IHVzYl9mdGRpX2VsYW5fZWRzZXRfaW5wdXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgdTggZWRfbnVtYmVyLAorICAgICAgICB2b2lkICplbmRwLCBzdHJ1Y3QgdXJiICp1cmIsIHU4IGFkZHJlc3MsIHU4IGVwX251bWJlciwgdTggdG9nZ2xlX2JpdHMsCisgICAgICAgIHZvaWQgKCpjYWxsYmFjaykgKHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggKmJ1ZiwgaW50IGxlbiwKKyAgICAgICAgaW50IHRvZ2dsZV9iaXRzLCBpbnQgZXJyb3JfY291bnQsIGludCBjb25kaXRpb25fY29kZSwgaW50IHJlcGVhdF9udW1iZXIsCisgICAgICAgICBpbnQgaGFsdGVkLCBpbnQgc2tpcHBlZCwgaW50IGFjdHVhbCwgaW50IG5vbl9udWxsKSk7CitpbnQgdXNiX2Z0ZGlfZWxhbl9lZHNldF9zZXR1cChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCB1OCBlZF9udW1iZXIsCisgICAgICAgIHZvaWQgKmVuZHAsIHN0cnVjdCB1cmIgKnVyYiwgdTggYWRkcmVzcywgdTggZXBfbnVtYmVyLCB1OCB0b2dnbGVfYml0cywKKyAgICAgICAgdm9pZCAoKmNhbGxiYWNrKSAodm9pZCAqZW5kcCwgc3RydWN0IHVyYiAqdXJiLCB1OCAqYnVmLCBpbnQgbGVuLAorICAgICAgICBpbnQgdG9nZ2xlX2JpdHMsIGludCBlcnJvcl9jb3VudCwgaW50IGNvbmRpdGlvbl9jb2RlLCBpbnQgcmVwZWF0X251bWJlciwKKyAgICAgICAgIGludCBoYWx0ZWQsIGludCBza2lwcGVkLCBpbnQgYWN0dWFsLCBpbnQgbm9uX251bGwpKTsKK2ludCB1c2JfZnRkaV9lbGFuX2Vkc2V0X2ZsdXNoKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYsIHU4IGVkX251bWJlciwKKyAgICAgICAgdm9pZCAqZW5kcCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jIGIvZHJpdmVycy91c2IvbWlzYy91c2JsY2QuYwppbmRleCBlMDk1NzcyLi5kYmFjYTlmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9taXNjL3VzYmxjZC5jCisrKyBiL2RyaXZlcnMvdXNiL21pc2MvdXNibGNkLmMKQEAgLTIzOSw3ICsyMzksNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGxjZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbGNkX2ZvcHMgPSB7CiAgICAgICAgIC5vd25lciA9ICAgICAgICBUSElTX01PRFVMRSwKICAgICAgICAgLnJlYWQgPSAgICAgICAgIGxjZF9yZWFkLAogICAgICAgICAud3JpdGUgPSAgICAgICAgbGNkX3dyaXRlLApAQCAtMjkwLDkgKzI5MCw3IEBACiAJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CiAKIAkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCi0JCSAgICAoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRElSX0lOKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKIAkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLwogCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKQEAgLTMwNSw5ICszMDMsNyBAQAogCQl9CiAKIAkJaWYgKCFkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciAmJgotCQkgICAgIShlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9ESVJfSU4pICYmCi0JCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiBVU0JfRU5EUE9JTlRfWEZFUlRZUEVfTUFTSykKLQkJCQkJPT0gVVNCX0VORFBPSU5UX1hGRVJfQlVMSykpIHsKKwkJICAgIHVzYl9lbmRwb2ludF9pc19idWxrX291dChlbmRwb2ludCkpIHsKIAkJCS8qIHdlIGZvdW5kIGEgYnVsayBvdXQgZW5kcG9pbnQgKi8KIAkJCWRldi0+YnVsa19vdXRfZW5kcG9pbnRBZGRyID0gZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3M7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMgYi9kcml2ZXJzL3VzYi9taXNjL3VzYmxlZC5jCmluZGV4IDBjNWVlMGEuLjQ5YzVjNWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21pc2MvdXNibGVkLmMKKysrIGIvZHJpdmVycy91c2IvbWlzYy91c2JsZWQuYwpAQCAtMTA4LDIyICsxMDgsMzQgQEAKIAlkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX2xlZCksIEdGUF9LRVJORUwpOwogCWlmIChkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIk91dCBvZiBtZW1vcnlcbiIpOwotCQlnb3RvIGVycm9yOworCQlnb3RvIGVycm9yX21lbTsKIAl9CiAKIAlkZXYtPnVkZXYgPSB1c2JfZ2V0X2Rldih1ZGV2KTsKIAogCXVzYl9zZXRfaW50ZmRhdGEgKGludGVyZmFjZSwgZGV2KTsKIAotCWRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ibHVlKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfcmVkKTsKLQlkZXZpY2VfY3JlYXRlX2ZpbGUoJmludGVyZmFjZS0+ZGV2LCAmZGV2X2F0dHJfZ3JlZW4pOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ibHVlKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOworCXJldHZhbCA9IGRldmljZV9jcmVhdGVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9yZWQpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXJyb3I7CisJcmV0dmFsID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2dyZWVuKTsKKwlpZiAocmV0dmFsKQorCQlnb3RvIGVycm9yOwogCiAJZGV2X2luZm8oJmludGVyZmFjZS0+ZGV2LCAiVVNCIExFRCBkZXZpY2Ugbm93IGF0dGFjaGVkXG4iKTsKIAlyZXR1cm4gMDsKIAogZXJyb3I6CisJZGV2aWNlX3JlbW92ZV9maWxlKCZpbnRlcmZhY2UtPmRldiwgJmRldl9hdHRyX2JsdWUpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9yZWQpOworCWRldmljZV9yZW1vdmVfZmlsZSgmaW50ZXJmYWNlLT5kZXYsICZkZXZfYXR0cl9ncmVlbik7CisJdXNiX3NldF9pbnRmZGF0YSAoaW50ZXJmYWNlLCBOVUxMKTsKKwl1c2JfcHV0X2RldihkZXYtPnVkZXYpOwogCWtmcmVlKGRldik7CitlcnJvcl9tZW06CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbW9uL21vbl9tYWluLmMgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwppbmRleCAyNzVhNjZmLi4zOTRiYmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYworKysgYi9kcml2ZXJzL3VzYi9tb24vbW9uX21haW4uYwpAQCAtMjY1LDcgKzI2NSw2IEBACiAJdWJ1cy0+bW9uX2J1cyA9IE5VTEw7CiAJbWJ1cy0+dV9idXMgPSBOVUxMOwogCW1iKCk7Ci0JLy8gdXNiX2J1c19wdXQodWJ1cyk7CiB9CiAKIC8qCkBAIC0yOTcsMTIgKzI5NiwxMiBAQAogCUlOSVRfTElTVF9IRUFEKCZtYnVzLT5yX2xpc3QpOwogCiAJLyoKLQkgKiBUaGlzIHVzYl9idXNfZ2V0IGhlcmUgaXMgc3VwZXJmbHVvdXMsIGJlY2F1c2Ugd2UgcmVjZWl2ZQotCSAqIGEgbm90aWZpY2F0aW9uIGlmIHVzYl9idXMgaXMgYWJvdXQgdG8gYmUgcmVtb3ZlZC4KKwkgKiBXZSBkb24ndCBuZWVkIHRvIHRha2UgYSByZWZlcmVuY2UgdG8gdWJ1cywgYmVjYXVzZSB3ZSByZWNlaXZlCisJICogYSBub3RpZmljYXRpb24gaWYgdGhlIGJ1cyBpcyBhYm91dCB0byBiZSByZW1vdmVkLgogCSAqLwotCS8vIHVzYl9idXNfZ2V0KHVidXMpOwogCW1idXMtPnVfYnVzID0gdWJ1czsKIAl1YnVzLT5tb25fYnVzID0gbWJ1czsKKwltYnVzLT51c2VzX2RtYSA9IHVidXMtPnVzZXNfZG1hOwogCiAJcmMgPSBzbnByaW50ZihuYW1lLCBOQU1FU1osICIlZHQiLCB1YnVzLT5idXNudW0pOwogCWlmIChyYyA8PSAwIHx8IHJjID49IE5BTUVTWikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL21vbi9tb25fc3RhdC5jIGIvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMKaW5kZXggMWZlMDFkOS4uZjZkMTQ5MSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMKKysrIGIvZHJpdmVycy91c2IvbW9uL21vbl9zdGF0LmMKQEAgLTI4LDcgKzI4LDcgQEAKIAlpZiAoKHNwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHNuYXApLCBHRlBfS0VSTkVMKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwltYnVzID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAogCXNwLT5zbGVuID0gc25wcmludGYoc3AtPnN0ciwgU1RBVF9CVUZfU0laRSwKIAkgICAgIm5yZWFkZXJzICVkIGV2ZW50cyAldSB0ZXh0X2xvc3QgJXVcbiIsCkBAIC02Miw3ICs2Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfc3RhdCA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfc3RhdCA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQltb25fc3RhdF9vcGVuLAogCS5sbHNlZWsgPQlub19sbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vbW9uX3RleHQuYyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCmluZGV4IGY5NjFhNzcuLjdhMjM0NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCisrKyBiL2RyaXZlcnMvdXNiL21vbi9tb25fdGV4dC5jCkBAIC03NSwxMyArNzUsMTMgQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIGNoYXIgbW9uX3RleHRfZ2V0X3NldHVwKHN0cnVjdCBtb25fZXZlbnRfdGV4dCAqZXAsCi0gICAgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUpCisgICAgc3RydWN0IHVyYiAqdXJiLCBjaGFyIGV2X3R5cGUsIHN0cnVjdCBtb25fYnVzICptYnVzKQogewogCiAJaWYgKCF1c2JfcGlwZWNvbnRyb2wodXJiLT5waXBlKSB8fCBldl90eXBlICE9ICdTJykKIAkJcmV0dXJuICctJzsKIAotCWlmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1NFVFVQX0RNQV9NQVApCisJaWYgKG1idXMtPnVzZXNfZG1hICYmICh1cmItPnRyYW5zZmVyX2ZsYWdzICYgVVJCX05PX1NFVFVQX0RNQV9NQVApKQogCQlyZXR1cm4gbW9uX2RtYXBlZWsoZXAtPnNldHVwLCB1cmItPnNldHVwX2RtYSwgU0VUVVBfTUFYKTsKIAlpZiAodXJiLT5zZXR1cF9wYWNrZXQgPT0gTlVMTCkKIAkJcmV0dXJuICdaJzsJLyogJzAnIHdvdWxkIGJlIG5vdCBhcyBwcmV0dHkuICovCkBAIC05MSw3ICs5MSw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgY2hhciBtb25fdGV4dF9nZXRfZGF0YShzdHJ1Y3QgbW9uX2V2ZW50X3RleHQgKmVwLCBzdHJ1Y3QgdXJiICp1cmIsCi0gICAgaW50IGxlbiwgY2hhciBldl90eXBlKQorICAgIGludCBsZW4sIGNoYXIgZXZfdHlwZSwgc3RydWN0IG1vbl9idXMgKm1idXMpCiB7CiAJaW50IHBpcGUgPSB1cmItPnBpcGU7CiAKQEAgLTExNyw3ICsxMTcsNyBAQAogCSAqIGNvbnRhaW4gbm9uLU5VTEwgZ2FyYmFnZSBpbiBjYXNlIHRoZSB1cHBlciBsZXZlbCBwcm9taXNlZCB0bwogCSAqIHNldCBETUEgZm9yIHRoZSBIQ0QuCiAJICovCi0JaWYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkKKwlpZiAobWJ1cy0+dXNlc19kbWEgJiYgKHVyYi0+dHJhbnNmZXJfZmxhZ3MgJiBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUCkpCiAJCXJldHVybiBtb25fZG1hcGVlayhlcC0+ZGF0YSwgdXJiLT50cmFuc2Zlcl9kbWEsIGxlbik7CiAKIAlpZiAodXJiLT50cmFuc2Zlcl9idWZmZXIgPT0gTlVMTCkKQEAgLTE2MSw4ICsxNjEsOSBAQAogCS8qIENvbGxlY3Rpbmcgc3RhdHVzIG1ha2VzIGRlYnVnZ2luZyBzZW5zZSBmb3Igc3VibWl0cywgdG9vICovCiAJZXAtPnN0YXR1cyA9IHVyYi0+c3RhdHVzOwogCi0JZXAtPnNldHVwX2ZsYWcgPSBtb25fdGV4dF9nZXRfc2V0dXAoZXAsIHVyYiwgZXZfdHlwZSk7Ci0JZXAtPmRhdGFfZmxhZyA9IG1vbl90ZXh0X2dldF9kYXRhKGVwLCB1cmIsIGVwLT5sZW5ndGgsIGV2X3R5cGUpOworCWVwLT5zZXR1cF9mbGFnID0gbW9uX3RleHRfZ2V0X3NldHVwKGVwLCB1cmIsIGV2X3R5cGUsIHJwLT5yLm1fYnVzKTsKKwllcC0+ZGF0YV9mbGFnID0gbW9uX3RleHRfZ2V0X2RhdGEoZXAsIHVyYiwgZXAtPmxlbmd0aCwgZXZfdHlwZSwKKwkJCXJwLT5yLm1fYnVzKTsKIAogCXJwLT5uZXZlbnRzKys7CiAJbGlzdF9hZGRfdGFpbCgmZXAtPmVfbGluaywgJnJwLT5lX2xpc3QpOwpAQCAtMjM4LDcgKzIzOSw3IEBACiAJaW50IHJjOwogCiAJbXV0ZXhfbG9jaygmbW9uX2xvY2spOwotCW1idXMgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCW1idXMgPSBpbm9kZS0+aV9wcml2YXRlOwogCXVidXMgPSBtYnVzLT51X2J1czsKIAogCXJwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1vbl9yZWFkZXJfdGV4dCksIEdGUF9LRVJORUwpOwpAQCAtNDAxLDcgKzQwMiw3IEBACiAJc3RydWN0IG1vbl9ldmVudF90ZXh0ICplcDsKIAogCW11dGV4X2xvY2soJm1vbl9sb2NrKTsKLQltYnVzID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwltYnVzID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAogCWlmIChtYnVzLT5ucmVhZGVycyA8PSAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiBUQUcgIjogY29uc2lzdGVuY3kgZXJyb3Igb24gY2xvc2VcbiIpOwpAQCAtNDM1LDcgKzQzNiw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfdGV4dCA9IHsKK2NvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfdGV4dCA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkub3BlbiA9CQltb25fdGV4dF9vcGVuLAogCS5sbHNlZWsgPQlub19sbHNlZWssCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oIGIvZHJpdmVycy91c2IvbW9uL3VzYl9tb24uaAppbmRleCAzMzY3OGMyLi5hYjlkMDJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9tb24vdXNiX21vbi5oCisrKyBiL2RyaXZlcnMvdXNiL21vbi91c2JfbW9uLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50X3M7CQkvKiBEZWJ1Z2dpbmcgZmlsZSAqLwogCXN0cnVjdCBkZW50cnkgKmRlbnRfdDsJCS8qIFRleHQgaW50ZXJmYWNlIGZpbGUgKi8KIAlzdHJ1Y3QgdXNiX2J1cyAqdV9idXM7CisJaW50IHVzZXNfZG1hOwogCiAJLyogUmVmICovCiAJaW50IG5yZWFkZXJzOwkJCS8qIFVuZGVyIG1vbl9sb2NrIEFORCBtYnVzLT5sb2NrICovCkBAIC01Myw3ICs1NCw3IEBACiAKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggbW9uX2xvY2s7CiAKLWV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3RleHQ7Ci1leHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtb25fZm9wc19zdGF0OworZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbW9uX2ZvcHNfdGV4dDsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG1vbl9mb3BzX3N0YXQ7CiAKICNlbmRpZiAvKiBfX1VTQl9NT05fSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2FzaXguYyBiL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKaW5kZXggMmUyYmJjMDAuLjljMGVhY2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9hc2l4LmMKKysrIGIvZHJpdmVycy91c2IvbmV0L2FzaXguYwpAQCAtMSw3ICsxLDggQEAKIC8qCiAgKiBBU0lYIEFYODgxN1ggYmFzZWQgVVNCIDIuMCBFdGhlcm5ldCBEZXZpY2VzCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNSBEYXZpZCBIb2xsaXMgPGRob2xsaXNAZGF2ZWhvbGxpcy5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBEYXZpZCBIb2xsaXMgPGRob2xsaXNAZGF2ZWhvbGxpcy5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUgUGhpbCBDaGFuZyA8cGNoYW5nMjNAc2JjZ2xvYmFsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBKYW1lcyBQYWludGVyIDxqYW1pZS5wYWludGVyQGluYW1lLmNvbT4KICAqIENvcHlyaWdodCAoYykgMjAwMi0yMDAzIFRpVm8gSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CkBAIC0zNiw2ICszNyw5IEBACiAKICNpbmNsdWRlICJ1c2JuZXQuaCIKIAorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMTQtSnVuLTIwMDYiCitzdGF0aWMgY29uc3QgY2hhciBkcml2ZXJfbmFtZSBbXSA9ICJhc2l4IjsKKwogLyogQVNJWCBBWDg4MTdYIGJhc2VkIFVTQiAyLjAgRXRoZXJuZXQgRGV2aWNlcyAqLwogCiAjZGVmaW5lIEFYX0NNRF9TRVRfU1dfTUlJCQkweDA2CkBAIC00NiwyMyArNTAsMjUgQEAKICNkZWZpbmUgQVhfQ01EX1dSSVRFX0VFUFJPTQkJMHgwYwogI2RlZmluZSBBWF9DTURfV1JJVEVfRU5BQkxFCQkweDBkCiAjZGVmaW5lIEFYX0NNRF9XUklURV9ESVNBQkxFCQkweDBlCisjZGVmaW5lIEFYX0NNRF9SRUFEX1JYX0NUTAkJMHgwZgogI2RlZmluZSBBWF9DTURfV1JJVEVfUlhfQ1RMCQkweDEwCiAjZGVmaW5lIEFYX0NNRF9SRUFEX0lQRzAxMgkJMHgxMQogI2RlZmluZSBBWF9DTURfV1JJVEVfSVBHMAkJMHgxMgogI2RlZmluZSBBWF9DTURfV1JJVEVfSVBHMQkJMHgxMworI2RlZmluZSBBWF9DTURfUkVBRF9OT0RFX0lECQkweDEzCiAjZGVmaW5lIEFYX0NNRF9XUklURV9JUEcyCQkweDE0CiAjZGVmaW5lIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIJMHgxNgotI2RlZmluZSBBWF9DTURfUkVBRF9OT0RFX0lECQkweDE3CisjZGVmaW5lIEFYODgxNzJfQ01EX1JFQURfTk9ERV9JRAkweDE3CiAjZGVmaW5lIEFYX0NNRF9SRUFEX1BIWV9JRAkJMHgxOQogI2RlZmluZSBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTCTB4MWEKICNkZWZpbmUgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFCTB4MWIKICNkZWZpbmUgQVhfQ01EX1JFQURfTU9OSVRPUl9NT0RFCTB4MWMKICNkZWZpbmUgQVhfQ01EX1dSSVRFX01PTklUT1JfTU9ERQkweDFkCisjZGVmaW5lIEFYX0NNRF9SRUFEX0dQSU9TCQkweDFlCiAjZGVmaW5lIEFYX0NNRF9XUklURV9HUElPUwkJMHgxZgogI2RlZmluZSBBWF9DTURfU1dfUkVTRVQJCQkweDIwCiAjZGVmaW5lIEFYX0NNRF9TV19QSFlfU1RBVFVTCQkweDIxCiAjZGVmaW5lIEFYX0NNRF9TV19QSFlfU0VMRUNUCQkweDIyCi0jZGVmaW5lIEFYODg3NzJfQ01EX1JFQURfTk9ERV9JRAkweDEzCiAKICNkZWZpbmUgQVhfTU9OSVRPUl9NT0RFCQkJMHgwMQogI2RlZmluZSBBWF9NT05JVE9SX0xJTksJCQkweDAyCkBAIC03MCwxNSArNzYsMTUgQEAKICNkZWZpbmUgQVhfTU9OSVRPUl9IU0ZTCQkJMHgxMAogCiAvKiBBWDg4MTcyIE1lZGl1bSBTdGF0dXMgUmVnaXN0ZXIgdmFsdWVzICovCi0jZGVmaW5lIEFYX01FRElVTV9GVUxMX0RVUExFWAkJMHgwMgotI2RlZmluZSBBWF9NRURJVU1fVFhfQUJPUlRfQUxMT1cJMHgwNAotI2RlZmluZSBBWF9NRURJVU1fRkxPV19DT05UUk9MX0VOCTB4MTAKKyNkZWZpbmUgQVg4ODE3Ml9NRURJVU1fRkQJCTB4MDIKKyNkZWZpbmUgQVg4ODE3Ml9NRURJVU1fVFgJCTB4MDQKKyNkZWZpbmUgQVg4ODE3Ml9NRURJVU1fRkMJCTB4MTAKKyNkZWZpbmUgQVg4ODE3Ml9NRURJVU1fREVGQVVMVCBcCisJCSggQVg4ODE3Ml9NRURJVU1fRkQgfCBBWDg4MTcyX01FRElVTV9UWCB8IEFYODgxNzJfTUVESVVNX0ZDICkKIAogI2RlZmluZSBBWF9NQ0FTVF9GSUxURVJfU0laRQkJOAogI2RlZmluZSBBWF9NQVhfTUNBU1QJCQk2NAogCi0jZGVmaW5lIEFYX0VFUFJPTV9MRU4JCQkweDQwCi0KICNkZWZpbmUgQVhfU1dSRVNFVF9DTEVBUgkJMHgwMAogI2RlZmluZSBBWF9TV1JFU0VUX1JSCQkJMHgwMQogI2RlZmluZSBBWF9TV1JFU0VUX1JUCQkJMHgwMgpAQCAtOTIsMjMgKzk4LDc4IEBACiAjZGVmaW5lIEFYODg3NzJfSVBHMV9ERUZBVUxUCQkweDBjCiAjZGVmaW5lIEFYODg3NzJfSVBHMl9ERUZBVUxUCQkweDEyCiAKLSNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fRlVMTF9EVVBMRVgJMHgwMDAyCi0jZGVmaW5lIEFYODg3NzJfTUVESVVNX1JFU0VSVkVECQkweDAwMDQKLSNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fUlhfRkNfRU5BQkxFCTB4MDAxMAotI2RlZmluZSBBWDg4NzcyX01FRElVTV9UWF9GQ19FTkFCTEUJMHgwMDIwCi0jZGVmaW5lIEFYODg3NzJfTUVESVVNX1BBVVNFX0ZPUk1BVAkweDAwODAKLSNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fUlhfRU5BQkxFCTB4MDEwMAotI2RlZmluZSBBWDg4NzcyX01FRElVTV8xMDBNQgkJMHgwMjAwCi0jZGVmaW5lIEFYODg3NzJfTUVESVVNX0RFRkFVTFQJXAotCShBWDg4NzcyX01FRElVTV9GVUxMX0RVUExFWCB8IEFYODg3NzJfTUVESVVNX1JYX0ZDX0VOQUJMRSB8IFwKLQkgQVg4ODc3Ml9NRURJVU1fVFhfRkNfRU5BQkxFIHwgQVg4ODc3Ml9NRURJVU1fMTAwTUIgfCBcCi0JIEFYODg3NzJfTUVESVVNX1JFU0VSVkVEIHwgQVg4ODc3Ml9NRURJVU1fUlhfRU5BQkxFICkKKy8qIEFYODg3NzIgJiBBWDg4MTc4IE1lZGl1bSBNb2RlIFJlZ2lzdGVyICovCisjZGVmaW5lIEFYX01FRElVTV9QRgkJMHgwMDgwCisjZGVmaW5lIEFYX01FRElVTV9KRkUJCTB4MDA0MAorI2RlZmluZSBBWF9NRURJVU1fVEZDCQkweDAwMjAKKyNkZWZpbmUgQVhfTUVESVVNX1JGQwkJMHgwMDEwCisjZGVmaW5lIEFYX01FRElVTV9FTkNLCQkweDAwMDgKKyNkZWZpbmUgQVhfTUVESVVNX0FDCQkweDAwMDQKKyNkZWZpbmUgQVhfTUVESVVNX0ZECQkweDAwMDIKKyNkZWZpbmUgQVhfTUVESVVNX0dNCQkweDAwMDEKKyNkZWZpbmUgQVhfTUVESVVNX1NNCQkweDEwMDAKKyNkZWZpbmUgQVhfTUVESVVNX1NCUAkJMHgwODAwCisjZGVmaW5lIEFYX01FRElVTV9QUwkJMHgwMjAwCisjZGVmaW5lIEFYX01FRElVTV9SRQkJMHgwMTAwCiAKLSNkZWZpbmUgQVhfRUVQUk9NX01BR0lDCQkJMHhkZWFkYmVlZgorI2RlZmluZSBBWDg4MTc4X01FRElVTV9ERUZBVUxUCVwKKwkoQVhfTUVESVVNX1BTIHwgQVhfTUVESVVNX0ZEIHwgQVhfTUVESVVNX0FDIHwgXAorCSBBWF9NRURJVU1fUkZDIHwgQVhfTUVESVVNX1RGQyB8IEFYX01FRElVTV9KRkUgfCBcCisJIEFYX01FRElVTV9SRSApCisKKyNkZWZpbmUgQVg4ODc3Ml9NRURJVU1fREVGQVVMVAlcCisJKEFYX01FRElVTV9GRCB8IEFYX01FRElVTV9SRkMgfCBcCisJIEFYX01FRElVTV9URkMgfCBBWF9NRURJVU1fUFMgfCBcCisJIEFYX01FRElVTV9BQyB8IEFYX01FRElVTV9SRSApCisKKy8qIEFYODg3NzIgJiBBWDg4MTc4IFJYX0NUTCB2YWx1ZXMgKi8KKyNkZWZpbmUgQVhfUlhfQ1RMX1NPCQkJMHgwMDgwCisjZGVmaW5lIEFYX1JYX0NUTF9BUAkJCTB4MDAyMAorI2RlZmluZSBBWF9SWF9DVExfQU0JCQkweDAwMTAKKyNkZWZpbmUgQVhfUlhfQ1RMX0FCCQkJMHgwMDA4CisjZGVmaW5lIEFYX1JYX0NUTF9TRVAJCQkweDAwMDQKKyNkZWZpbmUgQVhfUlhfQ1RMX0FNQUxMCQkJMHgwMDAyCisjZGVmaW5lIEFYX1JYX0NUTF9QUk8JCQkweDAwMDEKKyNkZWZpbmUgQVhfUlhfQ1RMX01GQl8yMDQ4CQkweDAwMDAKKyNkZWZpbmUgQVhfUlhfQ1RMX01GQl80MDk2CQkweDAxMDAKKyNkZWZpbmUgQVhfUlhfQ1RMX01GQl84MTkyCQkweDAyMDAKKyNkZWZpbmUgQVhfUlhfQ1RMX01GQl8xNjM4NAkJMHgwMzAwCisKKyNkZWZpbmUgQVhfREVGQVVMVF9SWF9DVEwJXAorCShBWF9SWF9DVExfU08gfCBBWF9SWF9DVExfQUIgKQorCisvKiBHUElPIDAgLi4gMiB0b2dnbGVzICovCisjZGVmaW5lIEFYX0dQSU9fR1BPMEVOCQkweDAxCS8qIEdQSU8wIE91dHB1dCBlbmFibGUgKi8KKyNkZWZpbmUgQVhfR1BJT19HUE9fMAkJMHgwMgkvKiBHUElPMCBPdXRwdXQgdmFsdWUgKi8KKyNkZWZpbmUgQVhfR1BJT19HUE8xRU4JCTB4MDQJLyogR1BJTzEgT3V0cHV0IGVuYWJsZSAqLworI2RlZmluZSBBWF9HUElPX0dQT18xCQkweDA4CS8qIEdQSU8xIE91dHB1dCB2YWx1ZSAqLworI2RlZmluZSBBWF9HUElPX0dQTzJFTgkJMHgxMAkvKiBHUElPMiBPdXRwdXQgZW5hYmxlICovCisjZGVmaW5lIEFYX0dQSU9fR1BPXzIJCTB4MjAJLyogR1BJTzIgT3V0cHV0IHZhbHVlICovCisjZGVmaW5lIEFYX0dQSU9fUkVTRVJWRUQJMHg0MAkvKiBSZXNlcnZlZCAqLworI2RlZmluZSBBWF9HUElPX1JTRQkJMHg4MAkvKiBSZWxvYWQgc2VyaWFsIEVFUFJPTSAqLworCisjZGVmaW5lIEFYX0VFUFJPTV9NQUdJQwkJMHhkZWFkYmVlZgorI2RlZmluZSBBWDg4MTcyX0VFUFJPTV9MRU4JMHg0MAorI2RlZmluZSBBWDg4NzcyX0VFUFJPTV9MRU4JMHhmZgorCisjZGVmaW5lIFBIWV9NT0RFX01BUlZFTEwJMHgwMDAwCisjZGVmaW5lIE1JSV9NQVJWRUxMX0xFRF9DVFJMCTB4MDAxOAorI2RlZmluZSBNSUlfTUFSVkVMTF9TVEFUVVMJMHgwMDFiCisjZGVmaW5lIE1JSV9NQVJWRUxMX0NUUkwJMHgwMDE0CisKKyNkZWZpbmUgTUFSVkVMTF9MRURfTUFOVUFMCTB4MDAxOQorCisjZGVmaW5lIE1BUlZFTExfU1RBVFVTX0hXQ0ZHCTB4MDAwNAorCisjZGVmaW5lIE1BUlZFTExfQ1RSTF9UWERFTEFZCTB4MDAwMgorI2RlZmluZSBNQVJWRUxMX0NUUkxfUlhERUxBWQkweDAwODAKIAogLyogVGhpcyBzdHJ1Y3R1cmUgY2Fubm90IGV4Y2VlZCBzaXplb2YodW5zaWduZWQgbG9uZyBbNV0pIEFLQSAyMCBieXRlcyAqLwogc3RydWN0IGFzaXhfZGF0YSB7CiAJdTggbXVsdGlfZmlsdGVyW0FYX01DQVNUX0ZJTFRFUl9TSVpFXTsKKwl1OCBwaHltb2RlOworCXU4IGxlZG1vZGU7CisJdTggZWVwcm9tX2xlbjsKIH07CiAKIHN0cnVjdCBheDg4MTcyX2ludF9kYXRhIHsKQEAgLTEyMiw2ICsxODMsOCBAQAogc3RhdGljIGludCBhc2l4X3JlYWRfY21kKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKIAkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKIHsKKwlkZXZkYmcoZGV2LCJhc2l4X3JlYWRfY21kKCkgY21kPTB4JTAyeCB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWQiLAorCQljbWQsIHZhbHVlLCBpbmRleCwgc2l6ZSk7CiAJcmV0dXJuIHVzYl9jb250cm9sX21zZygKIAkJZGV2LT51ZGV2LAogCQl1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTEzNyw2ICsyMDAsOCBAQAogc3RhdGljIGludCBhc2l4X3dyaXRlX2NtZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHU4IGNtZCwgdTE2IHZhbHVlLCB1MTYgaW5kZXgsCiAJCQkgICAgIHUxNiBzaXplLCB2b2lkICpkYXRhKQogeworCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfY21kKCkgY21kPTB4JTAyeCB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWQiLAorCQljbWQsIHZhbHVlLCBpbmRleCwgc2l6ZSk7CiAJcmV0dXJuIHVzYl9jb250cm9sX21zZygKIAkJZGV2LT51ZGV2LAogCQl1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKQEAgLTE2MSw2NSArMjI2LDEzOSBAQAogCXVzYl9mcmVlX3VyYih1cmIpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhc2l4X3NldF9zd19taWkoc3RydWN0IHVzYm5ldCAqZGV2KQorc3RhdGljIHZvaWQKK2FzaXhfd3JpdGVfY21kX2FzeW5jKHN0cnVjdCB1c2JuZXQgKmRldiwgdTggY21kLCB1MTYgdmFsdWUsIHUxNiBpbmRleCwKKwkJCQkgICAgdTE2IHNpemUsIHZvaWQgKmRhdGEpCiB7Ci0JaW50IHJldDsKLQlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfU1dfTUlJLCAweDAwMDAsIDAsIDAsIE5VTEwpOwotCWlmIChyZXQgPCAwKQotCQlkZXZkYmcoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBzb2Z0d2FyZSBNSUkgYWNjZXNzIik7Ci0JcmV0dXJuIHJldDsKLX0KKwlzdHJ1Y3QgdXNiX2N0cmxyZXF1ZXN0ICpyZXE7CisJaW50IHN0YXR1czsKKwlzdHJ1Y3QgdXJiICp1cmI7CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFzaXhfc2V0X2h3X21paShzdHJ1Y3QgdXNibmV0ICpkZXYpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9TRVRfSFdfTUlJLCAweDAwMDAsIDAsIDAsIE5VTEwpOwotCWlmIChyZXQgPCAwKQotCQlkZXZkYmcoZGV2LCAiRmFpbGVkIHRvIGVuYWJsZSBoYXJkd2FyZSBNSUkgYWNjZXNzIik7Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgYXNpeF9nZXRfcGh5aWQoc3RydWN0IHVzYm5ldCAqZGV2KQotewotCWludCByZXQgPSAwOwotCXZvaWQgKmJ1ZjsKLQotCWJ1ZiA9IGttYWxsb2MoMiwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFidWYpCi0JCWdvdG8gb3V0MTsKLQotCWlmICgocmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX1BIWV9JRCwKLQkJCQkgICAgMCwgMCwgMiwgYnVmKSkgPCAyKSB7Ci0JCWRldmRiZyhkZXYsICJFcnJvciByZWFkaW5nIFBIWUlEIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsKLQkJZ290byBvdXQyOworCWRldmRiZyhkZXYsImFzaXhfd3JpdGVfY21kX2FzeW5jKCkgY21kPTB4JTAyeCB2YWx1ZT0weCUwNHggaW5kZXg9MHglMDR4IHNpemU9JWQiLAorCQljbWQsIHZhbHVlLCBpbmRleCwgc2l6ZSk7CisJaWYgKCh1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWRldmVycihkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhIik7CisJCXJldHVybjsKIAl9Ci0JcmV0ID0gKigodTggKilidWYgKyAxKTsKLW91dDI6Ci0Ja2ZyZWUoYnVmKTsKLW91dDE6Ci0JcmV0dXJuIHJldDsKKworCWlmICgocmVxID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHVzYl9jdHJscmVxdWVzdCksIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7CisJCWRldmVycihkZXYsICJGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBjb250cm9sIHJlcXVlc3QiKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCXJldHVybjsKKwl9CisKKwlyZXEtPmJSZXF1ZXN0VHlwZSA9IFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRTsKKwlyZXEtPmJSZXF1ZXN0ID0gY21kOworCXJlcS0+d1ZhbHVlID0gdmFsdWU7CisJcmVxLT53SW5kZXggPSBpbmRleDsKKwlyZXEtPndMZW5ndGggPSBzaXplOworCisJdXNiX2ZpbGxfY29udHJvbF91cmIodXJiLCBkZXYtPnVkZXYsCisJCQkgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAodm9pZCAqKXJlcSwgZGF0YSwgc2l6ZSwKKwkJCSAgICAgYXNpeF9hc3luY19jbWRfY2FsbGJhY2ssIHJlcSk7CisKKwlpZigoc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKSkgPCAwKSB7CisJCWRldmVycihkZXYsICJFcnJvciBzdWJtaXR0aW5nIHRoZSBjb250cm9sIG1lc3NhZ2U6IHN0YXR1cz0lZCIsCisJCQkJc3RhdHVzKTsKKwkJa2ZyZWUocmVxKTsKKwkJdXNiX2ZyZWVfdXJiKHVyYik7CisJfQogfQogCi1zdGF0aWMgaW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncykKK3N0YXRpYyBpbnQgYXNpeF9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiB7Ci0JaW50IHJldDsKKwl1OCAgKmhlYWQ7CisJdTMyICBoZWFkZXI7CisJY2hhciAqcGFja2V0OworCXN0cnVjdCBza19idWZmICpheF9za2I7CisJdTE2IHNpemU7CiAKLSAgICAgICAgcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUkVTRVQsIGZsYWdzLCAwLCAwLCBOVUxMKTsKLQlpZiAocmV0IDwgMCkKLQkJZGV2ZGJnKGRldiwiRmFpbGVkIHRvIHNlbmQgc29mdHdhcmUgcmVzZXQ6ICUwMngiLCByZXQpOworCWhlYWQgPSAodTggKikgc2tiLT5kYXRhOworCW1lbWNweSgmaGVhZGVyLCBoZWFkLCBzaXplb2YoaGVhZGVyKSk7CisJbGUzMl90b19jcHVzKCZoZWFkZXIpOworCXBhY2tldCA9IGhlYWQgKyBzaXplb2YoaGVhZGVyKTsKIAotCXJldHVybiByZXQ7CisJc2tiX3B1bGwoc2tiLCA0KTsKKworCXdoaWxlIChza2ItPmxlbiA+IDApIHsKKwkJaWYgKChzaG9ydCkoaGVhZGVyICYgMHgwMDAwZmZmZikgIT0KKwkJICAgIH4oKHNob3J0KSgoaGVhZGVyICYgMHhmZmZmMDAwMCkgPj4gMTYpKSkgeworCQkJZGV2ZXJyKGRldiwiYXNpeF9yeF9maXh1cCgpIEJhZCBIZWFkZXIgTGVuZ3RoIik7CisJCX0KKwkJLyogZ2V0IHRoZSBwYWNrZXQgbGVuZ3RoICovCisJCXNpemUgPSAodTE2KSAoaGVhZGVyICYgMHgwMDAwZmZmZik7CisKKwkJaWYgKChza2ItPmxlbikgLSAoKHNpemUgKyAxKSAmIDB4ZmZmZSkgPT0gMCkKKwkJCXJldHVybiAyOworCQlpZiAoc2l6ZSA+IEVUSF9GUkFNRV9MRU4pIHsKKwkJCWRldmVycihkZXYsImFzaXhfcnhfZml4dXAoKSBCYWQgUlggTGVuZ3RoICVkIiwgc2l6ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCQlheF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKGF4X3NrYikgeworCQkJYXhfc2tiLT5sZW4gPSBzaXplOworCQkJYXhfc2tiLT5kYXRhID0gcGFja2V0OworCQkJYXhfc2tiLT50YWlsID0gcGFja2V0ICsgc2l6ZTsKKwkJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTsKKwkJfSBlbHNlIHsKKwkJCXJldHVybiAwOworCQl9CisKKwkJc2tiX3B1bGwoc2tiLCAoc2l6ZSArIDEpICYgMHhmZmZlKTsKKworCQlpZiAoc2tiLT5sZW4gPT0gMCkKKwkJCWJyZWFrOworCisJCWhlYWQgPSAodTggKikgc2tiLT5kYXRhOworCQltZW1jcHkoJmhlYWRlciwgaGVhZCwgc2l6ZW9mKGhlYWRlcikpOworCQlsZTMyX3RvX2NwdXMoJmhlYWRlcik7CisJCXBhY2tldCA9IGhlYWQgKyBzaXplb2YoaGVhZGVyKTsKKwkJc2tiX3B1bGwoc2tiLCA0KTsKKwl9CisKKwlpZiAoc2tiLT5sZW4gPCAwKSB7CisJCWRldmVycihkZXYsImFzaXhfcnhfZml4dXAoKSBCYWQgU0tCIExlbmd0aCAlZCIsIHNrYi0+bGVuKTsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGFzaXhfd3JpdGVfcnhfY3RsKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IG1vZGUpCitzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmFzaXhfdHhfZml4dXAoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQlnZnBfdCBmbGFncykKIHsKLQlpbnQgcmV0OworCWludCBwYWRsZW47CisJaW50IGhlYWRyb29tID0gc2tiX2hlYWRyb29tKHNrYik7CisJaW50IHRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CisJdTMyIHBhY2tldF9sZW47CisJdTMyIHBhZGJ5dGVzID0gMHhmZmZmMDAwMDsKIAotCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgbW9kZSwgMCwgMCwgTlVMTCk7Ci0JaWYgKHJldCA8IDApCi0gICAgICAgICAgICAgICAgZGV2ZGJnKGRldiwgIkZhaWxlZCB0byB3cml0ZSBSWF9DVEwgbW9kZTogJTAyeCIsIHJldCk7CisJcGFkbGVuID0gKChza2ItPmxlbiArIDQpICUgNTEyKSA/IDAgOiA0OwogCi0JcmV0dXJuIHJldDsKKwlpZiAoKCFza2JfY2xvbmVkKHNrYikpCisJICAgICYmICgoaGVhZHJvb20gKyB0YWlscm9vbSkgPj0gKDQgKyBwYWRsZW4pKSkgeworCQlpZiAoKGhlYWRyb29tIDwgNCkgfHwgKHRhaWxyb29tIDwgcGFkbGVuKSkgeworCQkJc2tiLT5kYXRhID0gbWVtbW92ZShza2ItPmhlYWQgKyA0LCBza2ItPmRhdGEsIHNrYi0+bGVuKTsKKwkJCXNrYi0+dGFpbCA9IHNrYi0+ZGF0YSArIHNrYi0+bGVuOworCQl9CisJfSBlbHNlIHsKKwkJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisJCXNrYjIgPSBza2JfY29weV9leHBhbmQoc2tiLCA0LCBwYWRsZW4sIGZsYWdzKTsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsKKwkJc2tiID0gc2tiMjsKKwkJaWYgKCFza2IpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlza2JfcHVzaChza2IsIDQpOworCXBhY2tldF9sZW4gPSAoKChza2ItPmxlbiAtIDQpIF4gMHgwMDAwZmZmZikgPDwgMTYpICsgKHNrYi0+bGVuIC0gNCk7CisJbWVtY3B5KHNrYi0+ZGF0YSwgJnBhY2tldF9sZW4sIHNpemVvZihwYWNrZXRfbGVuKSk7CisKKwlpZiAoKHNrYi0+bGVuICUgNTEyKSA9PSAwKSB7CisJCW1lbWNweSggc2tiLT50YWlsLCAmcGFkYnl0ZXMsIHNpemVvZihwYWRieXRlcykpOworCQlza2JfcHV0KHNrYiwgc2l6ZW9mKHBhZGJ5dGVzKSk7CisJfQorCXJldHVybiBza2I7CiB9CiAKIHN0YXRpYyB2b2lkIGFzaXhfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVyYiAqdXJiKQpAQCAtMjQyLDU1ICszODEsMTU3IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZAotYXNpeF93cml0ZV9jbWRfYXN5bmMoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBjbWQsIHUxNiB2YWx1ZSwgdTE2IGluZGV4LAotCQkJCSAgICB1MTYgc2l6ZSwgdm9pZCAqZGF0YSkKK3N0YXRpYyBpbmxpbmUgaW50IGFzaXhfc2V0X3N3X21paShzdHJ1Y3QgdXNibmV0ICpkZXYpCiB7Ci0Jc3RydWN0IHVzYl9jdHJscmVxdWVzdCAqcmVxOwotCWludCBzdGF0dXM7Ci0Jc3RydWN0IHVyYiAqdXJiOwotCi0JaWYgKCh1cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9BVE9NSUMpKSA9PSBOVUxMKSB7Ci0JCWRldmRiZyhkZXYsICJFcnJvciBhbGxvY2F0aW5nIFVSQiBpbiB3cml0ZV9jbWRfYXN5bmMhIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAoKHJlcSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB1c2JfY3RybHJlcXVlc3QpLCBHRlBfQVRPTUlDKSkgPT0gTlVMTCkgewotCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgY29udHJvbCByZXF1ZXN0Iik7Ci0JCXVzYl9mcmVlX3VyYih1cmIpOwotCQlyZXR1cm47Ci0JfQotCi0JcmVxLT5iUmVxdWVzdFR5cGUgPSBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0U7Ci0JcmVxLT5iUmVxdWVzdCA9IGNtZDsKLQlyZXEtPndWYWx1ZSA9IGNwdV90b19sZTE2KHZhbHVlKTsKLQlyZXEtPndJbmRleCA9IGNwdV90b19sZTE2KGluZGV4KTsKLQlyZXEtPndMZW5ndGggPSBjcHVfdG9fbGUxNihzaXplKTsKLQotCXVzYl9maWxsX2NvbnRyb2xfdXJiKHVyYiwgZGV2LT51ZGV2LAotCQkJICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKLQkJCSAgICAgKHZvaWQgKilyZXEsIGRhdGEsIHNpemUsCi0JCQkgICAgIGFzaXhfYXN5bmNfY21kX2NhbGxiYWNrLCByZXEpOwotCi0JaWYoKHN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQykpIDwgMCkgewotCQlkZXZlcnIoZGV2LCAiRXJyb3Igc3VibWl0dGluZyB0aGUgY29udHJvbCBtZXNzYWdlOiBzdGF0dXM9JWQiLAotCQkJCXN0YXR1cyk7Ci0JCWtmcmVlKHJlcSk7Ci0JCXVzYl9mcmVlX3VyYih1cmIpOwotCX0KKwlpbnQgcmV0OworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NFVF9TV19NSUksIDB4MDAwMCwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmVycihkZXYsICJGYWlsZWQgdG8gZW5hYmxlIHNvZnR3YXJlIE1JSSBhY2Nlc3MiKTsKKwlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW5saW5lIGludCBhc2l4X3NldF9od19taWkoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCWludCByZXQ7CisJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU0VUX0hXX01JSSwgMHgwMDAwLCAwLCAwLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJZGV2ZXJyKGRldiwgIkZhaWxlZCB0byBlbmFibGUgaGFyZHdhcmUgTUlJIGFjY2VzcyIpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGFzaXhfZ2V0X3BoeV9hZGRyKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKwl2b2lkICpidWY7CisKKwlkZXZkYmcoZGV2LCAiYXNpeF9nZXRfcGh5X2FkZHIoKSIpOworCisJYnVmID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQxOworCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUEhZX0lELAorCQkJCSAgICAwLCAwLCAyLCBidWYpKSA8IDIpIHsKKwkJZGV2ZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgUEhZSUQgcmVnaXN0ZXI6ICUwMngiLCByZXQpOworCQlnb3RvIG91dDI7CisJfQorCWRldmRiZyhkZXYsICJhc2l4X2dldF9waHlfYWRkcigpIHJldHVybmluZyAweCUwNHgiLCAqKCh1MTYgKilidWYpKTsKKwlyZXQgPSAqKCh1OCAqKWJ1ZiArIDEpOworb3V0MjoKKwlrZnJlZShidWYpOworb3V0MToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzaXhfc3dfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2LCB1OCBmbGFncykKK3sKKwlpbnQgcmV0OworCisgICAgICAgIHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1NXX1JFU0VULCBmbGFncywgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmVycihkZXYsIkZhaWxlZCB0byBzZW5kIHNvZnR3YXJlIHJlc2V0OiAlMDJ4IiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1MTYgYXNpeF9yZWFkX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJdTE2IHJldCA9IDA7CisJdm9pZCAqYnVmOworCisJYnVmID0ga21hbGxvYygyLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJZ290byBvdXQxOworCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfUlhfQ1RMLAorCQkJCSAgICAwLCAwLCAyLCBidWYpKSA8IDIpIHsKKwkJZGV2ZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgUlhfQ1RMIHJlZ2lzdGVyOiAlMDJ4IiwgcmV0KTsKKwkJZ290byBvdXQyOworCX0KKwlyZXQgPSBsZTE2X3RvX2NwdSgqKCh1MTYgKilidWYpKTsKK291dDI6CisJa2ZyZWUoYnVmKTsKK291dDE6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhc2l4X3dyaXRlX3J4X2N0bChzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlKQoreworCWludCByZXQ7CisKKwlkZXZkYmcoZGV2LCJhc2l4X3dyaXRlX3J4X2N0bCgpIC0gbW9kZSA9IDB4JTA0eCIsIG1vZGUpOworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgbW9kZSwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmVycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgUlhfQ1RMIG1vZGUgdG8gMHglMDR4OiAlMDJ4IiwKKwkJICAgICAgIG1vZGUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdTE2IGFzaXhfcmVhZF9tZWRpdW1fc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwl1MTYgcmV0ID0gMDsKKwl2b2lkICpidWY7CisKKwlidWYgPSBrbWFsbG9jKDIsIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlnb3RvIG91dDE7CisKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9NRURJVU1fU1RBVFVTLAorCQkJCSAgICAwLCAwLCAyLCBidWYpKSA8IDIpIHsKKwkJZGV2ZXJyKGRldiwgIkVycm9yIHJlYWRpbmcgTWVkaXVtIFN0YXR1cyByZWdpc3RlcjogJTAyeCIsIHJldCk7CisJCWdvdG8gb3V0MjsKKwl9CisJcmV0ID0gbGUxNl90b19jcHUoKigodTE2ICopYnVmKSk7CitvdXQyOgorCWtmcmVlKGJ1Zik7CitvdXQxOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXNpeF93cml0ZV9tZWRpdW1fbW9kZShzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiBtb2RlKQoreworCWludCByZXQ7CisKKwlkZXZkYmcoZGV2LCJhc2l4X3dyaXRlX21lZGl1bV9tb2RlKCkgLSBtb2RlID0gMHglMDR4IiwgbW9kZSk7CisJcmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIG1vZGUsIDAsIDAsIE5VTEwpOworCWlmIChyZXQgPCAwKQorCQlkZXZlcnIoZGV2LCAiRmFpbGVkIHRvIHdyaXRlIE1lZGl1bSBNb2RlIG1vZGUgdG8gMHglMDR4OiAlMDJ4IiwKKwkJCW1vZGUsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFzaXhfd3JpdGVfZ3BpbyhzdHJ1Y3QgdXNibmV0ICpkZXYsIHUxNiB2YWx1ZSwgaW50IHNsZWVwKQoreworCWludCByZXQ7CisKKwlkZXZkYmcoZGV2LCJhc2l4X3dyaXRlX2dwaW8oKSAtIHZhbHVlID0gMHglMDR4IiwgdmFsdWUpOworCXJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX0dQSU9TLCB2YWx1ZSwgMCwgMCwgTlVMTCk7CisJaWYgKHJldCA8IDApCisJCWRldmVycihkZXYsICJGYWlsZWQgdG8gd3JpdGUgR1BJTyB2YWx1ZSAweCUwNHg6ICUwMngiLAorCQkJdmFsdWUsIHJldCk7CisKKwlpZiAoc2xlZXApCisJCW1zbGVlcChzbGVlcCk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogQVg4ODc3MiAmIEFYODgxNzggaGF2ZSBhIDE2LWJpdCBSWF9DVEwgdmFsdWUKKyAqLwogc3RhdGljIHZvaWQgYXNpeF9zZXRfbXVsdGljYXN0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKikmZGV2LT5kYXRhOwotCXU4IHJ4X2N0bCA9IDB4OGM7CisJdTE2IHJ4X2N0bCA9IEFYX0RFRkFVTFRfUlhfQ1RMOwogCiAJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgewotCQlyeF9jdGwgfD0gMHgwMTsKKwkJcnhfY3RsIHw9IEFYX1JYX0NUTF9QUk87CiAJfSBlbHNlIGlmIChuZXQtPmZsYWdzICYgSUZGX0FMTE1VTFRJCiAJCSAgIHx8IG5ldC0+bWNfY291bnQgPiBBWF9NQVhfTUNBU1QpIHsKLQkJcnhfY3RsIHw9IDB4MDI7CisJCXJ4X2N0bCB8PSBBWF9SWF9DVExfQU1BTEw7CiAJfSBlbHNlIGlmIChuZXQtPm1jX2NvdW50ID09IDApIHsKIAkJLyoganVzdCBicm9hZGNhc3QgYW5kIGRpcmVjdGVkICovCiAJfSBlbHNlIHsKQEAgLTMxNyw3ICs1NTgsNyBAQAogCQlhc2l4X3dyaXRlX2NtZF9hc3luYyhkZXYsIEFYX0NNRF9XUklURV9NVUxUSV9GSUxURVIsIDAsIDAsCiAJCQkJICAgQVhfTUNBU1RfRklMVEVSX1NJWkUsIGRhdGEtPm11bHRpX2ZpbHRlcik7CiAKLQkJcnhfY3RsIHw9IDB4MTA7CisJCXJ4X2N0bCB8PSBBWF9SWF9DVExfQU07CiAJfQogCiAJYXNpeF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfUlhfQ1RMLCByeF9jdGwsIDAsIDAsIE5VTEwpOwpAQCAtMzMzLDUwICs1NzQsNDMgQEAKIAkJCQkoX191MTYpbG9jLCAyLCAodTE2ICopJnJlcyk7CiAJYXNpeF9zZXRfaHdfbWlpKGRldik7CiAKLQlyZXR1cm4gcmVzICYgMHhmZmZmOwotfQorCWRldmRiZyhkZXYsICJhc2l4X21kaW9fcmVhZCgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHJldHVybnM9MHglMDR4IiwgcGh5X2lkLCBsb2MsIGxlMTZfdG9fY3B1KHJlcyAmIDB4ZmZmZikpOwogCi0vKiBzYW1lIGFzIGFib3ZlLCBidXQgY29udmVydHMgcmVzdWx0aW5nIHZhbHVlIHRvIGNwdSBieXRlIG9yZGVyICovCi1zdGF0aWMgaW50IGFzaXhfbWRpb19yZWFkX2xlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MpCi17Ci0JcmV0dXJuIGxlMTZfdG9fY3B1KGFzaXhfbWRpb19yZWFkKG5ldGRldixwaHlfaWQsIGxvYykpOworCXJldHVybiBsZTE2X3RvX2NwdShyZXMgJiAweGZmZmYpOwogfQogCiBzdGF0aWMgdm9pZAogYXNpeF9tZGlvX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBwaHlfaWQsIGludCBsb2MsIGludCB2YWwpCiB7CiAJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQl1MTYgcmVzID0gdmFsOworCXUxNiByZXMgPSBjcHVfdG9fbGUxNih2YWwpOwogCisJZGV2ZGJnKGRldiwgImFzaXhfbWRpb193cml0ZSgpIHBoeV9pZD0weCUwMngsIGxvYz0weCUwMngsIHZhbD0weCUwNHgiLCBwaHlfaWQsIGxvYywgdmFsKTsKIAlhc2l4X3NldF9zd19taWkoZGV2KTsKIAlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9NSUlfUkVHLCBwaHlfaWQsCiAJCQkJKF9fdTE2KWxvYywgMiwgKHUxNiAqKSZyZXMpOwogCWFzaXhfc2V0X2h3X21paShkZXYpOwogfQogCi0vKiBzYW1lIGFzIGFib3ZlLCBidXQgY29udmVydHMgbmV3IHZhbHVlIHRvIGxlMTYgYnl0ZSBvcmRlciBiZWZvcmUgd3JpdGluZyAqLwotc3RhdGljIHZvaWQKLWFzaXhfbWRpb193cml0ZV9sZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jLCBpbnQgdmFsKQorLyogR2V0IHRoZSBQSFkgSWRlbnRpZmllciBmcm9tIHRoZSBQSFlTSUQxICYgUEhZU0lEMiBNSUkgcmVnaXN0ZXJzICovCitzdGF0aWMgdTMyIGFzaXhfZ2V0X3BoeWlkKHN0cnVjdCB1c2JuZXQgKmRldikKIHsKLQlhc2l4X21kaW9fd3JpdGUoIG5ldGRldiwgcGh5X2lkLCBsb2MsIGNwdV90b19sZTE2KHZhbCkgKTsKLX0KKwlpbnQgcGh5X3JlZzsKKwl1MzIgcGh5X2lkOwogCi1zdGF0aWMgaW50IGF4ODgxNzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCi17Ci0JdTE2IGxwYTsKLQl1MTYgYWR2OwotCXUxNiByZXM7Ci0JdTggbW9kZTsKKwlwaHlfcmVnID0gYXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX1BIWVNJRDEpOworCWlmIChwaHlfcmVnIDwgMCkKKwkJcmV0dXJuIDA7CiAKLQltb2RlID0gQVhfTUVESVVNX1RYX0FCT1JUX0FMTE9XIHwgQVhfTUVESVVNX0ZMT1dfQ09OVFJPTF9FTjsKLQlscGEgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKLQlhZHYgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKLQlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7Ci0JaWYgKHJlcyAmIExQQV9EVVBMRVgpCi0JCW1vZGUgfD0gQVhfTUVESVVNX0ZVTExfRFVQTEVYOwotCWFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLCBtb2RlLCAwLCAwLCBOVUxMKTsKKwlwaHlfaWQgPSAocGh5X3JlZyAmIDB4ZmZmZikgPDwgMTY7CiAKLQlyZXR1cm4gMDsKKwlwaHlfcmVnID0gYXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX1BIWVNJRDIpOworCWlmIChwaHlfcmVnIDwgMCkKKwkJcmV0dXJuIDA7CisKKwlwaHlfaWQgfD0gKHBoeV9yZWcgJiAweGZmZmYpOworCisJcmV0dXJuIHBoeV9pZDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTQyMyw3ICs2NTcsMTAgQEAKIAogc3RhdGljIGludCBhc2l4X2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCiB7Ci0JcmV0dXJuIEFYX0VFUFJPTV9MRU47CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKwlzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKikmZGV2LT5kYXRhOworCisJcmV0dXJuIGRhdGEtPmVlcHJvbV9sZW47CiB9CiAKIHN0YXRpYyBpbnQgYXNpeF9nZXRfZWVwcm9tKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsCkBAIC00NTMsOSArNjkwLDE0IEBACiBzdGF0aWMgdm9pZCBhc2l4X2dldF9kcnZpbmZvIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LAogCQkJCSBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvICppbmZvKQogeworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKKwogCS8qIEluaGVyaXQgc3RhbmRhcmQgZGV2aWNlIGluZm8gKi8KIAl1c2JuZXRfZ2V0X2RydmluZm8obmV0LCBpbmZvKTsKLQlpbmZvLT5lZWR1bXBfbGVuID0gMHgzZTsKKwlzdHJuY3B5IChpbmZvLT5kcml2ZXIsIGRyaXZlcl9uYW1lLCBzaXplb2YgaW5mby0+ZHJpdmVyKTsKKwlzdHJuY3B5IChpbmZvLT52ZXJzaW9uLCBEUklWRVJfVkVSU0lPTiwgc2l6ZW9mIGluZm8tPnZlcnNpb24pOworCWluZm8tPmVlZHVtcF9sZW4gPSBkYXRhLT5lZXByb21fbGVuOwogfQogCiBzdGF0aWMgaW50IGFzaXhfZ2V0X3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBldGh0b29sX2NtZCAqY21kKQpAQCAtNDY4LDggKzcxMCwzNCBAQAogc3RhdGljIGludCBhc2l4X3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmNtZCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludCByZXMgPSBtaWlfZXRodG9vbF9zc2V0KCZkZXYtPm1paSxjbWQpOwogCi0JcmV0dXJuIG1paV9ldGh0b29sX3NzZXQoJmRldi0+bWlpLGNtZCk7CisJLyogbGluayBzcGVlZC9kdXBsZXggbWlnaHQgaGF2ZSBjaGFuZ2VkICovCisJaWYgKGRldi0+ZHJpdmVyX2luZm8tPmxpbmtfcmVzZXQpCisJCWRldi0+ZHJpdmVyX2luZm8tPmxpbmtfcmVzZXQoZGV2KTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgYXNpeF9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXQpCit7CisJc3RydWN0IHVzYm5ldCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKKworCXJldHVybiBtaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7Cit9CisKK3N0YXRpYyB1MzIgYXNpeF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0KQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlyZXR1cm4gbWlpX2xpbmtfb2soJmRldi0+bWlpKTsKK30KKworc3RhdGljIGludCBhc2l4X2lvY3RsIChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBzdHJ1Y3QgaWZyZXEgKnJxLCBpbnQgY21kKQoreworCXN0cnVjdCB1c2JuZXQgKmRldiA9IG5ldGRldl9wcml2KG5ldCk7CisKKwlyZXR1cm4gZ2VuZXJpY19taWlfaW9jdGwoJmRldi0+bWlpLCBpZl9taWkocnEpLCBjbWQsIE5VTEwpOwogfQogCiAvKiBXZSBuZWVkIHRvIG92ZXJyaWRlIHNvbWUgZXRodG9vbF9vcHMgc28gd2UgcmVxdWlyZSBvdXIKQEAgLTQ3Nyw3ICs3NDUsOCBAQAogICAgZGV2aWNlcyB0aGF0IG1heSBiZSBjb25uZWN0ZWQgYXQgdGhlIHNhbWUgdGltZS4gKi8KIHN0YXRpYyBzdHJ1Y3QgZXRodG9vbF9vcHMgYXg4ODE3Ml9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X2RydmluZm8JCT0gYXNpeF9nZXRfZHJ2aW5mbywKLQkuZ2V0X2xpbmsJCT0gZXRodG9vbF9vcF9nZXRfbGluaywKKwkuZ2V0X2xpbmsJCT0gYXNpeF9nZXRfbGluaywKKwkubndheV9yZXNldAkJPSBhc2l4X253YXlfcmVzZXQsCiAJLmdldF9tc2dsZXZlbAkJPSB1c2JuZXRfZ2V0X21zZ2xldmVsLAogCS5zZXRfbXNnbGV2ZWwJCT0gdXNibmV0X3NldF9tc2dsZXZlbCwKIAkuZ2V0X3dvbAkJPSBhc2l4X2dldF93b2wsCkBAIC00ODgsMTEgKzc1Nyw2NiBAQAogCS5zZXRfc2V0dGluZ3MJCT0gYXNpeF9zZXRfc2V0dGluZ3MsCiB9OwogCi1zdGF0aWMgaW50IGFzaXhfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpuZXQsIHN0cnVjdCBpZnJlcSAqcnEsIGludCBjbWQpCitzdGF0aWMgdm9pZCBheDg4MTcyX3NldF9tdWx0aWNhc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldCkKIHsKIAlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CisJdTggcnhfY3RsID0gMHg4YzsKIAotCXJldHVybiBnZW5lcmljX21paV9pb2N0bCgmZGV2LT5taWksIGlmX21paShycSksIGNtZCwgTlVMTCk7CisJaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfUFJPTUlTQykgeworCQlyeF9jdGwgfD0gMHgwMTsKKwl9IGVsc2UgaWYgKG5ldC0+ZmxhZ3MgJiBJRkZfQUxMTVVMVEkKKwkJICAgfHwgbmV0LT5tY19jb3VudCA+IEFYX01BWF9NQ0FTVCkgeworCQlyeF9jdGwgfD0gMHgwMjsKKwl9IGVsc2UgaWYgKG5ldC0+bWNfY291bnQgPT0gMCkgeworCQkvKiBqdXN0IGJyb2FkY2FzdCBhbmQgZGlyZWN0ZWQgKi8KKwl9IGVsc2UgeworCQkvKiBXZSB1c2UgdGhlIDIwIGJ5dGUgZGV2LT5kYXRhCisJCSAqIGZvciBvdXIgOCBieXRlIGZpbHRlciBidWZmZXIKKwkJICogdG8gYXZvaWQgYWxsb2NhdGluZyBtZW1vcnkgdGhhdAorCQkgKiBpcyB0cmlja3kgdG8gZnJlZSBsYXRlciAqLworCQlzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jX2xpc3QgPSBuZXQtPm1jX2xpc3Q7CisJCXUzMiBjcmNfYml0czsKKwkJaW50IGk7CisKKwkJbWVtc2V0KGRhdGEtPm11bHRpX2ZpbHRlciwgMCwgQVhfTUNBU1RfRklMVEVSX1NJWkUpOworCisJCS8qIEJ1aWxkIHRoZSBtdWx0aWNhc3QgaGFzaCBmaWx0ZXIuICovCisJCWZvciAoaSA9IDA7IGkgPCBuZXQtPm1jX2NvdW50OyBpKyspIHsKKwkJCWNyY19iaXRzID0KKwkJCSAgICBldGhlcl9jcmMoRVRIX0FMRU4sCisJCQkJICAgICAgbWNfbGlzdC0+ZG1pX2FkZHIpID4+IDI2OworCQkJZGF0YS0+bXVsdGlfZmlsdGVyW2NyY19iaXRzID4+IDNdIHw9CisJCQkgICAgMSA8PCAoY3JjX2JpdHMgJiA3KTsKKwkJCW1jX2xpc3QgPSBtY19saXN0LT5uZXh0OworCQl9CisKKwkJYXNpeF93cml0ZV9jbWRfYXN5bmMoZGV2LCBBWF9DTURfV1JJVEVfTVVMVElfRklMVEVSLCAwLCAwLAorCQkJCSAgIEFYX01DQVNUX0ZJTFRFUl9TSVpFLCBkYXRhLT5tdWx0aV9maWx0ZXIpOworCisJCXJ4X2N0bCB8PSAweDEwOworCX0KKworCWFzaXhfd3JpdGVfY21kX2FzeW5jKGRldiwgQVhfQ01EX1dSSVRFX1JYX0NUTCwgcnhfY3RsLCAwLCAwLCBOVUxMKTsKK30KKworc3RhdGljIGludCBheDg4MTcyX2xpbmtfcmVzZXQoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXU4IG1vZGU7CisJc3RydWN0IGV0aHRvb2xfY21kIGVjbWQ7CisKKwltaWlfY2hlY2tfbWVkaWEoJmRldi0+bWlpLCAxLCAxKTsKKwltaWlfZXRodG9vbF9nc2V0KCZkZXYtPm1paSwgJmVjbWQpOworCW1vZGUgPSBBWDg4MTcyX01FRElVTV9ERUZBVUxUOworCisJaWYgKGVjbWQuZHVwbGV4ICE9IERVUExFWF9GVUxMKQorCQltb2RlIHw9IH5BWDg4MTcyX01FRElVTV9GRDsKKworCWRldmRiZyhkZXYsICJheDg4MTcyX2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCisJYXNpeF93cml0ZV9tZWRpdW1fbW9kZShkZXYsIG1vZGUpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYXg4ODE3Ml9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCkBAIC01MDEsNiArODI1LDkgQEAKIAl2b2lkICpidWY7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBncGlvX2JpdHMgPSBkZXYtPmRyaXZlcl9pbmZvLT5kYXRhOworCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CisKKwlkYXRhLT5lZXByb21fbGVuID0gQVg4ODE3Ml9FRVBST01fTEVOOwogCiAJdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LGludGYpOwogCkBAIC01MTksMTIgKzg0NiwxMiBAQAogCQltc2xlZXAoNSk7CiAJfQogCi0JaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsMHg4MCkpIDwgMCkKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfcnhfY3RsKGRldiwgMHg4MCkpIDwgMCkKIAkJZ290byBvdXQyOwogCiAJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwogCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKLQlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELAorCWlmICgocmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYODgxNzJfQ01EX1JFQURfTk9ERV9JRCwKIAkJCQkwLCAwLCA2LCBidWYpKSA8IDApIHsKIAkJZGJnKCJyZWFkIEFYX0NNRF9SRUFEX05PREVfSUQgZmFpbGVkOiAlZCIsIHJldCk7CiAJCWdvdG8gb3V0MjsKQEAgLTUzNywxNCArODY0LDE0IEBACiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKIAlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4M2Y7CiAJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKLQlkZXYtPm1paS5waHlfaWQgPSBhc2l4X2dldF9waHlpZChkZXYpOworCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CiAJZGV2LT5uZXQtPmRvX2lvY3RsID0gYXNpeF9pb2N0bDsKIAotCWRldi0+bmV0LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBhc2l4X3NldF9tdWx0aWNhc3Q7CisJZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGF4ODgxNzJfc2V0X211bHRpY2FzdDsKIAlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3Ml9ldGh0b29sX29wczsKIAotCWFzaXhfbWRpb193cml0ZV9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQk1DUiwgQk1DUl9SRVNFVCk7Ci0JYXNpeF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsCisJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKIAkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BIHwgQURWRVJUSVNFX1BBVVNFX0NBUCk7CiAJbWlpX253YXlfcmVzdGFydCgmZGV2LT5taWkpOwogCkBAIC01NTcsNyArODg0LDggQEAKIAogc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBheDg4NzcyX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSBhc2l4X2dldF9kcnZpbmZvLAotCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAorCS5nZXRfbGluawkJPSBhc2l4X2dldF9saW5rLAorCS5ud2F5X3Jlc2V0CQk9IGFzaXhfbndheV9yZXNldCwKIAkuZ2V0X21zZ2xldmVsCQk9IHVzYm5ldF9nZXRfbXNnbGV2ZWwsCiAJLnNldF9tc2dsZXZlbAkJPSB1c2JuZXRfc2V0X21zZ2xldmVsLAogCS5nZXRfd29sCQk9IGFzaXhfZ2V0X3dvbCwKQEAgLTU2OCwxMCArODk2LDM3IEBACiAJLnNldF9zZXR0aW5ncwkJPSBhc2l4X3NldF9zZXR0aW5ncywKIH07CiAKK3N0YXRpYyBpbnQgYXg4ODc3Ml9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwl1MTYgbW9kZTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKworCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOworCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CisJbW9kZSA9IEFYODg3NzJfTUVESVVNX0RFRkFVTFQ7CisKKwlpZiAoZWNtZC5zcGVlZCAhPSBTUEVFRF8xMDApCisJCW1vZGUgJj0gfkFYX01FRElVTV9QUzsKKworCWlmIChlY21kLmR1cGxleCAhPSBEVVBMRVhfRlVMTCkKKwkJbW9kZSAmPSB+QVhfTUVESVVNX0ZEOworCisJZGV2ZGJnKGRldiwgImF4ODg3NzJfbGlua19yZXNldCgpIHNwZWVkOiAlZCBkdXBsZXg6ICVkIHNldHRpbmcgbW9kZSB0byAweCUwNHgiLCBlY21kLnNwZWVkLCBlY21kLmR1cGxleCwgbW9kZSk7CisKKwlhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgbW9kZSk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBheDg4NzcyX2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZikKIHsKIAlpbnQgcmV0OwogCXZvaWQgKmJ1ZjsKKwl1MTYgcnhfY3RsOworCXN0cnVjdCBhc2l4X2RhdGEgKmRhdGEgPSAoc3RydWN0IGFzaXhfZGF0YSAqKSZkZXYtPmRhdGE7CisJdTMyIHBoeWlkOworCisJZGF0YS0+ZWVwcm9tX2xlbiA9IEFYODg3NzJfRUVQUk9NX0xFTjsKIAogCXVzYm5ldF9nZXRfZW5kcG9pbnRzKGRldixpbnRmKTsKIApAQCAtNTgyLDEzICs5MzcsMTIgQEAKIAkJZ290byBvdXQxOwogCX0KIAotCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfR1BJT1MsCi0JCQkJICAgICAweDAwQjAsIDAsIDAsIGJ1ZikpIDwgMCkKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfZ3BpbyhkZXYsCisJCQlBWF9HUElPX1JTRSB8IEFYX0dQSU9fR1BPXzIgfCBBWF9HUElPX0dQTzJFTiwgNSkpIDwgMCkKIAkJZ290byBvdXQyOwogCi0JbXNsZWVwKDUpOwogCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfU1dfUEhZX1NFTEVDVCwKLQkJCQkweDAwMDEsIDAsIDAsIGJ1ZikpIDwgMCkgeworCQkJCTB4MDAwMCwgMCwgMCwgYnVmKSkgPCAwKSB7CiAJCWRiZygiU2VsZWN0IFBIWSAjMSBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KQEAgLTYwNSwzNiArOTU5LDM0IEBACiAJCWdvdG8gb3V0MjsKIAogCW1zbGVlcCgxNTApOwotCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwKSkgPCAwKQorCXJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsKKwlkYmcoIlJYX0NUTCBpcyAweCUwNHggYWZ0ZXIgc29mdHdhcmUgcmVzZXQiLCByeF9jdGwpOworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAweDAwMDApKSA8IDApCiAJCWdvdG8gb3V0MjsKIAorCXJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsKKwlkYmcoIlJYX0NUTCBpcyAweCUwNHggc2V0dGluZyB0byAweDAwMDAiLCByeF9jdGwpOworCiAJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLwogCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKLQlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWDg4NzcyX0NNRF9SRUFEX05PREVfSUQsCisJaWYgKChyZXQgPSBhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfTk9ERV9JRCwKIAkJCQkwLCAwLCBFVEhfQUxFTiwgYnVmKSkgPCAwKSB7CiAJCWRiZygiRmFpbGVkIHRvIHJlYWQgTUFDIGFkZHJlc3M6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KIAltZW1jcHkoZGV2LT5uZXQtPmRldl9hZGRyLCBidWYsIEVUSF9BTEVOKTsKIAotCWlmICgocmV0ID0gYXNpeF9zZXRfc3dfbWlpKGRldikpIDwgMCkKLQkJZ290byBvdXQyOwotCi0JaWYgKCgocmV0ID0gYXNpeF9yZWFkX2NtZChkZXYsIEFYX0NNRF9SRUFEX01JSV9SRUcsCi0JICAgICAgCQkJMHgwMDEwLCAyLCAyLCBidWYpKSA8IDApCi0JCQl8fCAoKigodTE2ICopYnVmKSAhPSAweDAwM2IpKSB7Ci0JCWRiZygiUmVhZCBQSFkgcmVnaXN0ZXIgMiBtdXN0IGJlIDB4M2IwMDogJWQiLCByZXQpOwotCQlnb3RvIG91dDI7Ci0JfQotCiAJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCiAJZGV2LT5taWkuZGV2ID0gZGV2LT5uZXQ7CiAJZGV2LT5taWkubWRpb19yZWFkID0gYXNpeF9tZGlvX3JlYWQ7CiAJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKLQlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4ZmY7Ci0JZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKKwlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CisJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHgxZjsKIAlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOwotCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CisJZGV2LT5taWkucGh5X2lkID0gYXNpeF9nZXRfcGh5X2FkZHIoZGV2KTsKKworCXBoeWlkID0gYXNpeF9nZXRfcGh5aWQoZGV2KTsKKwlkYmcoIlBIWUlEPTB4JTA4eCIsIHBoeWlkKTsKIAogCWlmICgocmV0ID0gYXNpeF9zd19yZXNldChkZXYsIEFYX1NXUkVTRVRfUFJMKSkgPCAwKQogCQlnb3RvIG91dDI7CkBAIC02NDksMTYgKzEwMDEsMTMgQEAKIAlkZXYtPm5ldC0+c2V0X211bHRpY2FzdF9saXN0ID0gYXNpeF9zZXRfbXVsdGljYXN0OwogCWRldi0+bmV0LT5ldGh0b29sX29wcyA9ICZheDg4NzcyX2V0aHRvb2xfb3BzOwogCi0JYXNpeF9tZGlvX3dyaXRlX2xlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9CTUNSLCBCTUNSX1JFU0VUKTsKLQlhc2l4X21kaW9fd3JpdGVfbGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0FEVkVSVElTRSwKKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsIEJNQ1JfUkVTRVQpOworCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFLAogCQkJQURWRVJUSVNFX0FMTCB8IEFEVkVSVElTRV9DU01BKTsKIAltaWlfbndheV9yZXN0YXJ0KCZkZXYtPm1paSk7CiAKLQlpZiAoKHJldCA9IGFzaXhfd3JpdGVfY21kKGRldiwgQVhfQ01EX1dSSVRFX01FRElVTV9NT0RFLAotCQkJCUFYODg3NzJfTUVESVVNX0RFRkFVTFQsIDAsIDAsIGJ1ZikpIDwgMCkgewotCQlkYmcoIldyaXRlIG1lZGl1bSBtb2RlIHJlZ2lzdGVyOiAlZCIsIHJldCk7CisJaWYgKChyZXQgPSBhc2l4X3dyaXRlX21lZGl1bV9tb2RlKGRldiwgQVg4ODc3Ml9NRURJVU1fREVGQVVMVCkpIDwgMCkKIAkJZ290byBvdXQyOwotCX0KIAogCWlmICgocmV0ID0gYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfSVBHMCwKIAkJCQlBWDg4NzcyX0lQRzBfREVGQVVMVCB8IEFYODg3NzJfSVBHMV9ERUZBVUxULApAQCAtNjY2LDEzICsxMDE1LDE3IEBACiAJCWRiZygiV3JpdGUgSVBHLElQRzEsSVBHMiBmYWlsZWQ6ICVkIiwgcmV0KTsKIAkJZ290byBvdXQyOwogCX0KLQlpZiAoKHJldCA9IGFzaXhfc2V0X2h3X21paShkZXYpKSA8IDApCi0JCWdvdG8gb3V0MjsKIAogCS8qIFNldCBSWF9DVEwgdG8gZGVmYXVsdCB2YWx1ZXMgd2l0aCAyayBidWZmZXIsIGFuZCBlbmFibGUgY2FjdHVzICovCi0JaWYgKChyZXQgPSBhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDB4MDA4OCkpIDwgMCkKKwlpZiAoKHJldCA9IGFzaXhfd3JpdGVfcnhfY3RsKGRldiwgQVhfREVGQVVMVF9SWF9DVEwpKSA8IDApCiAJCWdvdG8gb3V0MjsKIAorCXJ4X2N0bCA9IGFzaXhfcmVhZF9yeF9jdGwoZGV2KTsKKwlkYmcoIlJYX0NUTCBpcyAweCUwNHggYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyIsIHJ4X2N0bCk7CisKKwlyeF9jdGwgPSBhc2l4X3JlYWRfbWVkaXVtX3N0YXR1cyhkZXYpOworCWRiZygiTWVkaXVtIFN0YXR1cyBpcyAweCUwNHggYWZ0ZXIgYWxsIGluaXRpYWxpemF0aW9ucyIsIHJ4X2N0bCk7CisKIAlrZnJlZShidWYpOwogCiAJLyogQXNpeCBmcmFtaW5nIHBhY2tzIG11bHRpcGxlIGV0aCBmcmFtZXMgaW50byBhIDJLIHVzYiBidWxrIHRyYW5zZmVyICovCkBAIC02OTAsMTIyICsxMDQzLDI4NyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgYXg4ODc3Ml9yeF9maXh1cChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgc3RydWN0IGV0aHRvb2xfb3BzIGF4ODgxNzhfZXRodG9vbF9vcHMgPSB7CisJLmdldF9kcnZpbmZvCQk9IGFzaXhfZ2V0X2RydmluZm8sCisJLmdldF9saW5rCQk9IGFzaXhfZ2V0X2xpbmssCisJLm53YXlfcmVzZXQJCT0gYXNpeF9ud2F5X3Jlc2V0LAorCS5nZXRfbXNnbGV2ZWwJCT0gdXNibmV0X2dldF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsCQk9IHVzYm5ldF9zZXRfbXNnbGV2ZWwsCisJLmdldF93b2wJCT0gYXNpeF9nZXRfd29sLAorCS5zZXRfd29sCQk9IGFzaXhfc2V0X3dvbCwKKwkuZ2V0X2VlcHJvbV9sZW4JCT0gYXNpeF9nZXRfZWVwcm9tX2xlbiwKKwkuZ2V0X2VlcHJvbQkJPSBhc2l4X2dldF9lZXByb20sCisJLmdldF9zZXR0aW5ncwkJPSBhc2l4X2dldF9zZXR0aW5ncywKKwkuc2V0X3NldHRpbmdzCQk9IGFzaXhfc2V0X3NldHRpbmdzLAorfTsKKworc3RhdGljIGludCBtYXJ2ZWxsX3BoeV9pbml0KHN0cnVjdCB1c2JuZXQgKmRldikKIHsKLQl1OCAgKmhlYWQ7Ci0JdTMyICBoZWFkZXI7Ci0JY2hhciAqcGFja2V0OwotCXN0cnVjdCBza19idWZmICpheF9za2I7Ci0JdTE2IHNpemU7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKKwl1MTYgcmVnOwogCi0JaGVhZCA9ICh1OCAqKSBza2ItPmRhdGE7Ci0JbWVtY3B5KCZoZWFkZXIsIGhlYWQsIHNpemVvZihoZWFkZXIpKTsKLQlsZTMyX3RvX2NwdXMoJmhlYWRlcik7Ci0JcGFja2V0ID0gaGVhZCArIHNpemVvZihoZWFkZXIpOworCWRldmRiZyhkZXYsIm1hcnZlbGxfcGh5X2luaXQoKSIpOwogCi0Jc2tiX3B1bGwoc2tiLCA0KTsKKwlyZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTUFSVkVMTF9TVEFUVVMpOworCWRldmRiZyhkZXYsIk1JSV9NQVJWRUxMX1NUQVRVUyA9IDB4JTA0eCIsIHJlZyk7CiAKLQl3aGlsZSAoc2tiLT5sZW4gPiAwKSB7Ci0JCWlmICgoc2hvcnQpKGhlYWRlciAmIDB4MDAwMGZmZmYpICE9Ci0JCSAgICB+KChzaG9ydCkoKGhlYWRlciAmIDB4ZmZmZjAwMDApID4+IDE2KSkpIHsKLQkJCWRldmRiZyhkZXYsImhlYWRlciBsZW5ndGggZGF0YSBpcyBlcnJvciIpOwotCQl9Ci0JCS8qIGdldCB0aGUgcGFja2V0IGxlbmd0aCAqLwotCQlzaXplID0gKHUxNikgKGhlYWRlciAmIDB4MDAwMGZmZmYpOworCWFzaXhfbWRpb193cml0ZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTUFSVkVMTF9DVFJMLAorCQkJTUFSVkVMTF9DVFJMX1JYREVMQVkgfCBNQVJWRUxMX0NUUkxfVFhERUxBWSk7CiAKLQkJaWYgKChza2ItPmxlbikgLSAoKHNpemUgKyAxKSAmIDB4ZmZmZSkgPT0gMCkKLQkJCXJldHVybiAyOwotCQlpZiAoc2l6ZSA+IEVUSF9GUkFNRV9MRU4pIHsKLQkJCWRldmRiZyhkZXYsImludmFsaWQgcnggbGVuZ3RoICVkIiwgc2l6ZSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCQlheF9za2IgPSBza2JfY2xvbmUoc2tiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKGF4X3NrYikgewotCQkJYXhfc2tiLT5sZW4gPSBzaXplOwotCQkJYXhfc2tiLT5kYXRhID0gcGFja2V0OwotCQkJYXhfc2tiLT50YWlsID0gcGFja2V0ICsgc2l6ZTsKLQkJCXVzYm5ldF9za2JfcmV0dXJuKGRldiwgYXhfc2tiKTsKLQkJfSBlbHNlIHsKLQkJCXJldHVybiAwOwotCQl9CisJaWYgKGRhdGEtPmxlZG1vZGUpIHsKKwkJcmVnID0gYXNpeF9tZGlvX3JlYWQoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwKKwkJCU1JSV9NQVJWRUxMX0xFRF9DVFJMKTsKKwkJZGV2ZGJnKGRldiwiTUlJX01BUlZFTExfTEVEX0NUUkwgKDEpID0gMHglMDR4IiwgcmVnKTsKIAotCQlza2JfcHVsbChza2IsIChzaXplICsgMSkgJiAweGZmZmUpOworCQlyZWcgJj0gMHhmOGZmOworCQlyZWcgfD0gKDEgKyAweDAxMDApOworCQlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwKKwkJCU1JSV9NQVJWRUxMX0xFRF9DVFJMLCByZWcpOwogCi0JCWlmIChza2ItPmxlbiA9PSAwKQotCQkJYnJlYWs7Ci0KLQkJaGVhZCA9ICh1OCAqKSBza2ItPmRhdGE7Ci0JCW1lbWNweSgmaGVhZGVyLCBoZWFkLCBzaXplb2YoaGVhZGVyKSk7Ci0JCWxlMzJfdG9fY3B1cygmaGVhZGVyKTsKLQkJcGFja2V0ID0gaGVhZCArIHNpemVvZihoZWFkZXIpOwotCQlza2JfcHVsbChza2IsIDQpOworCQlyZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLAorCQkJTUlJX01BUlZFTExfTEVEX0NUUkwpOworCQlkZXZkYmcoZGV2LCJNSUlfTUFSVkVMTF9MRURfQ1RSTCAoMikgPSAweCUwNHgiLCByZWcpOworCQlyZWcgJj0gMHhmYzBmOwogCX0KIAotCWlmIChza2ItPmxlbiA8IDApIHsKLQkJZGV2ZGJnKGRldiwiaW52YWxpZCByeCBsZW5ndGggJWQiLCBza2ItPmxlbik7Ci0JCXJldHVybiAwOwotCX0KLQlyZXR1cm4gMTsKLX0KLQotc3RhdGljIHN0cnVjdCBza19idWZmICpheDg4NzcyX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKLQkJCQkJZ2ZwX3QgZmxhZ3MpCi17Ci0JaW50IHBhZGxlbjsKLQlpbnQgaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTsKLQlpbnQgdGFpbHJvb20gPSBza2JfdGFpbHJvb20oc2tiKTsKLQl1MzIgcGFja2V0X2xlbjsKLQl1MzIgcGFkYnl0ZXMgPSAweGZmZmYwMDAwOwotCi0JcGFkbGVuID0gKChza2ItPmxlbiArIDQpICUgNTEyKSA/IDAgOiA0OwotCi0JaWYgKCghc2tiX2Nsb25lZChza2IpKQotCSAgICAmJiAoKGhlYWRyb29tICsgdGFpbHJvb20pID49ICg0ICsgcGFkbGVuKSkpIHsKLQkJaWYgKChoZWFkcm9vbSA8IDQpIHx8ICh0YWlscm9vbSA8IHBhZGxlbikpIHsKLQkJCXNrYi0+ZGF0YSA9IG1lbW1vdmUoc2tiLT5oZWFkICsgNCwgc2tiLT5kYXRhLCBza2ItPmxlbik7Ci0JCQlza2ItPnRhaWwgPSBza2ItPmRhdGEgKyBza2ItPmxlbjsKLQkJfQotCX0gZWxzZSB7Ci0JCXN0cnVjdCBza19idWZmICpza2IyOwotCQlza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgNCwgcGFkbGVuLCBmbGFncyk7Ci0JCWRldl9rZnJlZV9za2JfYW55KHNrYik7Ci0JCXNrYiA9IHNrYjI7Ci0JCWlmICghc2tiKQotCQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0Jc2tiX3B1c2goc2tiLCA0KTsKLQlwYWNrZXRfbGVuID0gKCgoc2tiLT5sZW4gLSA0KSBeIDB4MDAwMGZmZmYpIDw8IDE2KSArIChza2ItPmxlbiAtIDQpOwotCW1lbWNweShza2ItPmRhdGEsICZwYWNrZXRfbGVuLCBzaXplb2YocGFja2V0X2xlbikpOwotCi0JaWYgKChza2ItPmxlbiAlIDUxMikgPT0gMCkgewotCQltZW1jcHkoIHNrYi0+dGFpbCwgJnBhZGJ5dGVzLCBzaXplb2YocGFkYnl0ZXMpKTsKLQkJc2tiX3B1dChza2IsIHNpemVvZihwYWRieXRlcykpOwotCX0KLQlyZXR1cm4gc2tiOwotfQotCi1zdGF0aWMgaW50IGF4ODg3NzJfbGlua19yZXNldChzdHJ1Y3QgdXNibmV0ICpkZXYpCi17Ci0JdTE2IGxwYTsKLQl1MTYgYWR2OwotCXUxNiByZXM7Ci0JdTE2IG1vZGU7Ci0KLQltb2RlID0gQVg4ODc3Ml9NRURJVU1fREVGQVVMVDsKLQlscGEgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfTFBBKTsKLQlhZHYgPSBhc2l4X21kaW9fcmVhZF9sZShkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNSUlfQURWRVJUSVNFKTsKLQlyZXMgPSBtaWlfbndheV9yZXN1bHQobHBhfGFkdik7Ci0KLQlpZiAoKHJlcyAmIExQQV9EVVBMRVgpID09IDApCi0JCW1vZGUgJj0gfkFYODg3NzJfTUVESVVNX0ZVTExfRFVQTEVYOwotCWlmICgocmVzICYgTFBBXzEwMCkgPT0gMCkKLQkJbW9kZSAmPSB+QVg4ODc3Ml9NRURJVU1fMTAwTUI7Ci0JYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfTUVESVVNX01PREUsIG1vZGUsIDAsIDAsIE5VTEwpOwotCiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbWFydmVsbF9sZWRfc3RhdHVzKHN0cnVjdCB1c2JuZXQgKmRldiwgdTE2IHNwZWVkKQoreworCXUxNiByZWcgPSBhc2l4X21kaW9fcmVhZChkZXYtPm5ldCwgZGV2LT5taWkucGh5X2lkLCBNQVJWRUxMX0xFRF9NQU5VQUwpOworCisJZGV2ZGJnKGRldiwgIm1hcnZlbGxfbGVkX3N0YXR1cygpIHJlYWQgMHglMDR4IiwgcmVnKTsKKworCS8qIENsZWFyIG91dCB0aGUgY2VudGVyIExFRCBiaXRzIC0gMHgwM0YwICovCisJcmVnICY9IDB4ZmMwZjsKKworCXN3aXRjaCAoc3BlZWQpIHsKKwkJY2FzZSBTUEVFRF8xMDAwOgorCQkJcmVnIHw9IDB4MDNlMDsKKwkJCWJyZWFrOworCQljYXNlIFNQRUVEXzEwMDoKKwkJCXJlZyB8PSAweDAzYjA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJlZyB8PSAweDAyZjA7CisJfQorCisJZGV2ZGJnKGRldiwgIm1hcnZlbGxfbGVkX3N0YXR1cygpIHdyaXRpbmcgMHglMDR4IiwgcmVnKTsKKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUFSVkVMTF9MRURfTUFOVUFMLCByZWcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3OF9saW5rX3Jlc2V0KHN0cnVjdCB1c2JuZXQgKmRldikKK3sKKwl1MTYgbW9kZTsKKwlzdHJ1Y3QgZXRodG9vbF9jbWQgZWNtZDsKKwlzdHJ1Y3QgYXNpeF9kYXRhICpkYXRhID0gKHN0cnVjdCBhc2l4X2RhdGEgKikmZGV2LT5kYXRhOworCisJZGV2ZGJnKGRldiwiYXg4ODE3OF9saW5rX3Jlc2V0KCkiKTsKKworCW1paV9jaGVja19tZWRpYSgmZGV2LT5taWksIDEsIDEpOworCW1paV9ldGh0b29sX2dzZXQoJmRldi0+bWlpLCAmZWNtZCk7CisJbW9kZSA9IEFYODgxNzhfTUVESVVNX0RFRkFVTFQ7CisKKwlpZiAoZWNtZC5zcGVlZCA9PSBTUEVFRF8xMDAwKQorCQltb2RlIHw9IEFYX01FRElVTV9HTSB8IEFYX01FRElVTV9FTkNLOworCWVsc2UgaWYgKGVjbWQuc3BlZWQgPT0gU1BFRURfMTAwKQorCQltb2RlIHw9IEFYX01FRElVTV9QUzsKKwllbHNlCisJCW1vZGUgJj0gfihBWF9NRURJVU1fUFMgfCBBWF9NRURJVU1fR00pOworCisJaWYgKGVjbWQuZHVwbGV4ID09IERVUExFWF9GVUxMKQorCQltb2RlIHw9IEFYX01FRElVTV9GRDsKKwllbHNlCisJCW1vZGUgJj0gfkFYX01FRElVTV9GRDsKKworCWRldmRiZyhkZXYsICJheDg4MTc4X2xpbmtfcmVzZXQoKSBzcGVlZDogJWQgZHVwbGV4OiAlZCBzZXR0aW5nIG1vZGUgdG8gMHglMDR4IiwgZWNtZC5zcGVlZCwgZWNtZC5kdXBsZXgsIG1vZGUpOworCisJYXNpeF93cml0ZV9tZWRpdW1fbW9kZShkZXYsIG1vZGUpOworCisJaWYgKGRhdGEtPnBoeW1vZGUgPT0gUEhZX01PREVfTUFSVkVMTCAmJiBkYXRhLT5sZWRtb2RlKQorCQltYXJ2ZWxsX2xlZF9zdGF0dXMoZGV2LCBlY21kLnNwZWVkKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBheDg4MTc4X3NldF9tZmIoc3RydWN0IHVzYm5ldCAqZGV2KQoreworCXUxNiBtZmIgPSBBWF9SWF9DVExfTUZCXzE2Mzg0OworCXUxNiByeGN0bDsKKwl1MTYgbWVkaXVtOworCWludCBvbGRfcnhfdXJiX3NpemUgPSBkZXYtPnJ4X3VyYl9zaXplOworCisJaWYgKGRldi0+aGFyZF9tdHUgPCAyMDQ4KSB7CisJCWRldi0+cnhfdXJiX3NpemUgPSAyMDQ4OworCQltZmIgPSBBWF9SWF9DVExfTUZCXzIwNDg7CisJfSBlbHNlIGlmIChkZXYtPmhhcmRfbXR1IDwgNDA5NikgeworCQlkZXYtPnJ4X3VyYl9zaXplID0gNDA5NjsKKwkJbWZiID0gQVhfUlhfQ1RMX01GQl80MDk2OworCX0gZWxzZSBpZiAoZGV2LT5oYXJkX210dSA8IDgxOTIpIHsKKwkJZGV2LT5yeF91cmJfc2l6ZSA9IDgxOTI7CisJCW1mYiA9IEFYX1JYX0NUTF9NRkJfODE5MjsKKwl9IGVsc2UgaWYgKGRldi0+aGFyZF9tdHUgPCAxNjM4NCkgeworCQlkZXYtPnJ4X3VyYl9zaXplID0gMTYzODQ7CisJCW1mYiA9IEFYX1JYX0NUTF9NRkJfMTYzODQ7CisJfQorCisJcnhjdGwgPSBhc2l4X3JlYWRfcnhfY3RsKGRldik7CisJYXNpeF93cml0ZV9yeF9jdGwoZGV2LCAocnhjdGwgJiB+QVhfUlhfQ1RMX01GQl8xNjM4NCkgfCBtZmIpOworCisJbWVkaXVtID0gYXNpeF9yZWFkX21lZGl1bV9zdGF0dXMoZGV2KTsKKwlpZiAoZGV2LT5uZXQtPm10dSA+IDE1MDApCisJCW1lZGl1bSB8PSBBWF9NRURJVU1fSkZFOworCWVsc2UKKwkJbWVkaXVtICY9IH5BWF9NRURJVU1fSkZFOworCWFzaXhfd3JpdGVfbWVkaXVtX21vZGUoZGV2LCBtZWRpdW0pOworCisJaWYgKGRldi0+cnhfdXJiX3NpemUgPiBvbGRfcnhfdXJiX3NpemUpCisJCXVzYm5ldF91bmxpbmtfcnhfdXJicyhkZXYpOworfQorCitzdGF0aWMgaW50IGF4ODgxNzhfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0LCBpbnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgdXNibmV0ICpkZXYgPSBuZXRkZXZfcHJpdihuZXQpOworCWludCBsbF9tdHUgPSBuZXdfbXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW4gKyA0OworCisJZGV2ZGJnKGRldiwgImF4ODgxNzhfY2hhbmdlX210dSgpIG5ld19tdHU9JWQiLCBuZXdfbXR1KTsKKworCWlmIChuZXdfbXR1IDw9IDAgfHwgbGxfbXR1ID4gMTYzODQpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKChsbF9tdHUgJSBkZXYtPm1heHBhY2tldCkgPT0gMCkKKwkJcmV0dXJuIC1FRE9NOworCisJbmV0LT5tdHUgPSBuZXdfbXR1OworCWRldi0+aGFyZF9tdHUgPSBuZXQtPm10dSArIG5ldC0+aGFyZF9oZWFkZXJfbGVuOworCWF4ODgxNzhfc2V0X21mYihkZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXg4ODE3OF9iaW5kKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCit7CisJc3RydWN0IGFzaXhfZGF0YSAqZGF0YSA9IChzdHJ1Y3QgYXNpeF9kYXRhICopJmRldi0+ZGF0YTsKKwlpbnQgcmV0OworCXZvaWQgKmJ1ZjsKKwl1MTYgZWVwcm9tOworCWludCBncGlvMCA9IDA7CisJdTMyIHBoeWlkOworCisJdXNibmV0X2dldF9lbmRwb2ludHMoZGV2LGludGYpOworCisJYnVmID0ga21hbGxvYyg2LCBHRlBfS0VSTkVMKTsKKwlpZighYnVmKSB7CisJCWRiZyAoIkNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGJ1ZmZlciIpOworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDE7CisJfQorCisJZWVwcm9tID0gMDsKKwlhc2l4X3JlYWRfY21kKGRldiwgQVhfQ01EX1JFQURfR1BJT1MsIDAsIDAsIDEsICZlZXByb20pOworCWRiZygiR1BJTyBTdGF0dXM6IDB4JTA0eCIsIGVlcHJvbSk7CisKKwlhc2l4X3dyaXRlX2NtZChkZXYsIEFYX0NNRF9XUklURV9FTkFCTEUsIDAsIDAsIDAsIE5VTEwpOworCWFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9FRVBST00sIDB4MDAxNywgMCwgMiwgJmVlcHJvbSk7CisJYXNpeF93cml0ZV9jbWQoZGV2LCBBWF9DTURfV1JJVEVfRElTQUJMRSwgMCwgMCwgMCwgTlVMTCk7CisKKwlkYmcoIkVFUFJPTSBpbmRleCAweDE3IGlzIDB4JTA0eCIsIGVlcHJvbSk7CisKKwlpZiAoZWVwcm9tID09IDB4ZmZmZikgeworCQlkYXRhLT5waHltb2RlID0gUEhZX01PREVfTUFSVkVMTDsKKwkJZGF0YS0+bGVkbW9kZSA9IDA7CisJCWdwaW8wID0gMTsKKwl9IGVsc2UgeworCQlkYXRhLT5waHltb2RlID0gZWVwcm9tICYgNzsKKwkJZGF0YS0+bGVkbW9kZSA9IGVlcHJvbSA+PiA4OworCQlncGlvMCA9IChlZXByb20gJiAweDgwKSA/IDAgOiAxOworCX0KKwlkYmcoIkdQSU8wOiAlZCwgUGh5TW9kZTogJWQiLCBncGlvMCwgZGF0YS0+cGh5bW9kZSk7CisKKwlhc2l4X3dyaXRlX2dwaW8oZGV2LCBBWF9HUElPX1JTRSB8IEFYX0dQSU9fR1BPXzEgfCBBWF9HUElPX0dQTzFFTiwgNDApOworCWlmICgoZWVwcm9tID4+IDgpICE9IDEpIHsKKwkJYXNpeF93cml0ZV9ncGlvKGRldiwgMHgwMDNjLCAzMCk7CisJCWFzaXhfd3JpdGVfZ3BpbyhkZXYsIDB4MDAxYywgMzAwKTsKKwkJYXNpeF93cml0ZV9ncGlvKGRldiwgMHgwMDNjLCAzMCk7CisJfSBlbHNlIHsKKwkJZGJnKCJncGlvIHBoeW1vZGUgPT0gMSBwYXRoIik7CisJCWFzaXhfd3JpdGVfZ3BpbyhkZXYsIEFYX0dQSU9fR1BPMUVOLCAzMCk7CisJCWFzaXhfd3JpdGVfZ3BpbyhkZXYsIEFYX0dQSU9fR1BPMUVOIHwgQVhfR1BJT19HUE9fMSwgMzApOworCX0KKworCWFzaXhfc3dfcmVzZXQoZGV2LCAwKTsKKwltc2xlZXAoMTUwKTsKKworCWFzaXhfc3dfcmVzZXQoZGV2LCBBWF9TV1JFU0VUX1BSTCB8IEFYX1NXUkVTRVRfSVBQRCk7CisJbXNsZWVwKDE1MCk7CisKKwlhc2l4X3dyaXRlX3J4X2N0bChkZXYsIDApOworCisJLyogR2V0IHRoZSBNQUMgYWRkcmVzcyAqLworCW1lbXNldChidWYsIDAsIEVUSF9BTEVOKTsKKwlpZiAoKHJldCA9IGFzaXhfcmVhZF9jbWQoZGV2LCBBWF9DTURfUkVBRF9OT0RFX0lELAorCQkJCTAsIDAsIEVUSF9BTEVOLCBidWYpKSA8IDApIHsKKwkJZGJnKCJGYWlsZWQgdG8gcmVhZCBNQUMgYWRkcmVzczogJWQiLCByZXQpOworCQlnb3RvIG91dDI7CisJfQorCW1lbWNweShkZXYtPm5ldC0+ZGV2X2FkZHIsIGJ1ZiwgRVRIX0FMRU4pOworCisJLyogSW5pdGlhbGl6ZSBNSUkgc3RydWN0dXJlICovCisJZGV2LT5taWkuZGV2ID0gZGV2LT5uZXQ7CisJZGV2LT5taWkubWRpb19yZWFkID0gYXNpeF9tZGlvX3JlYWQ7CisJZGV2LT5taWkubWRpb193cml0ZSA9IGFzaXhfbWRpb193cml0ZTsKKwlkZXYtPm1paS5waHlfaWRfbWFzayA9IDB4MWY7CisJZGV2LT5taWkucmVnX251bV9tYXNrID0gMHhmZjsKKwlkZXYtPm1paS5zdXBwb3J0c19nbWlpID0gMTsKKwlkZXYtPm5ldC0+ZG9faW9jdGwgPSBhc2l4X2lvY3RsOworCWRldi0+bWlpLnBoeV9pZCA9IGFzaXhfZ2V0X3BoeV9hZGRyKGRldik7CisJZGV2LT5uZXQtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGFzaXhfc2V0X211bHRpY2FzdDsKKwlkZXYtPm5ldC0+ZXRodG9vbF9vcHMgPSAmYXg4ODE3OF9ldGh0b29sX29wczsKKwlkZXYtPm5ldC0+Y2hhbmdlX210dSA9ICZheDg4MTc4X2NoYW5nZV9tdHU7CisKKwlwaHlpZCA9IGFzaXhfZ2V0X3BoeWlkKGRldik7CisJZGJnKCJQSFlJRD0weCUwOHgiLCBwaHlpZCk7CisKKwlpZiAoZGF0YS0+cGh5bW9kZSA9PSBQSFlfTU9ERV9NQVJWRUxMKSB7CisJCW1hcnZlbGxfcGh5X2luaXQoZGV2KTsKKwkJbXNsZWVwKDYwKTsKKwl9CisKKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0JNQ1IsCisJCQlCTUNSX1JFU0VUIHwgQk1DUl9BTkVOQUJMRSk7CisJYXNpeF9tZGlvX3dyaXRlKGRldi0+bmV0LCBkZXYtPm1paS5waHlfaWQsIE1JSV9BRFZFUlRJU0UsCisJCQlBRFZFUlRJU0VfQUxMIHwgQURWRVJUSVNFX0NTTUEgfCBBRFZFUlRJU0VfUEFVU0VfQ0FQKTsKKwlhc2l4X21kaW9fd3JpdGUoZGV2LT5uZXQsIGRldi0+bWlpLnBoeV9pZCwgTUlJX0NUUkwxMDAwLAorCQkJQURWRVJUSVNFXzEwMDBGVUxMKTsKKworCW1paV9ud2F5X3Jlc3RhcnQoJmRldi0+bWlpKTsKKworCWlmICgocmV0ID0gYXNpeF93cml0ZV9tZWRpdW1fbW9kZShkZXYsIEFYODgxNzhfTUVESVVNX0RFRkFVTFQpKSA8IDApCisJCWdvdG8gb3V0MjsKKworCWlmICgocmV0ID0gYXNpeF93cml0ZV9yeF9jdGwoZGV2LCBBWF9ERUZBVUxUX1JYX0NUTCkpIDwgMCkKKwkJZ290byBvdXQyOworCisJa2ZyZWUoYnVmKTsKKworCS8qIEFzaXggZnJhbWluZyBwYWNrcyBtdWx0aXBsZSBldGggZnJhbWVzIGludG8gYSAySyB1c2IgYnVsayB0cmFuc2ZlciAqLworCWlmIChkZXYtPmRyaXZlcl9pbmZvLT5mbGFncyAmIEZMQUdfRlJBTUlOR19BWCkgeworCQkvKiBoYXJkX210dSAgaXMgc3RpbGwgdGhlIGRlZmF1bHQgLSB0aGUgZGV2aWNlIGRvZXMgbm90IHN1cHBvcnQKKwkJICAganVtYm8gZXRoIGZyYW1lcyAqLworCQlkZXYtPnJ4X3VyYl9zaXplID0gMjA0ODsKKwl9CisKKwlyZXR1cm4gMDsKKworb3V0MjoKKwlrZnJlZShidWYpOworb3V0MToKKwlyZXR1cm4gcmV0OworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IGRyaXZlcl9pbmZvIGF4ODgxN3hfaW5mbyA9IHsKIAkuZGVzY3JpcHRpb24gPSAiQVNJWCBBWDg4MTd4IFVTQiAyLjAgRXRoZXJuZXQiLAogCS5iaW5kID0gYXg4ODE3Ml9iaW5kLApAQCAtODUzLDggKzEzNzEsMTkgQEAKIAkubGlua19yZXNldCA9IGF4ODg3NzJfbGlua19yZXNldCwKIAkucmVzZXQgPSBheDg4NzcyX2xpbmtfcmVzZXQsCiAJLmZsYWdzID0gRkxBR19FVEhFUiB8IEZMQUdfRlJBTUlOR19BWCwKLQkucnhfZml4dXAgPSBheDg4NzcyX3J4X2ZpeHVwLAotCS50eF9maXh1cCA9IGF4ODg3NzJfdHhfZml4dXAsCisJLnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cCwKKwkudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBkcml2ZXJfaW5mbyBheDg4MTc4X2luZm8gPSB7CisJLmRlc2NyaXB0aW9uID0gIkFTSVggQVg4ODE3OCBVU0IgMi4wIEV0aGVybmV0IiwKKwkuYmluZCA9IGF4ODgxNzhfYmluZCwKKwkuc3RhdHVzID0gYXNpeF9zdGF0dXMsCisJLmxpbmtfcmVzZXQgPSBheDg4MTc4X2xpbmtfcmVzZXQsCisJLnJlc2V0ID0gYXg4ODE3OF9saW5rX3Jlc2V0LAorCS5mbGFncyA9IEZMQUdfRVRIRVIgfCBGTEFHX0ZSQU1JTkdfQVgsCisJLnJ4X2ZpeHVwID0gYXNpeF9yeF9maXh1cCwKKwkudHhfZml4dXAgPSBhc2l4X3R4X2ZpeHVwLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkCXByb2R1Y3RzIFtdID0gewpAQCAtOTEzLDcgKzE0NDIsNyBAQAogfSwgewogCS8vIEFTSVggQVg4ODE3OCAxMC8xMDAvMTAwMAogCVVTQl9ERVZJQ0UgKDB4MGI5NSwgMHgxNzgwKSwKLQkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3NzJfaW5mbywKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODgxNzhfaW5mbywKIH0sIHsKIAkvLyBMaW5rc3lzIFVTQjIwME0gUmV2IDIKIAlVU0JfREVWSUNFICgweDEzYjEsIDB4MDAxOCksCkBAIC05MjIsNiArMTQ1MSwxOCBAQAogCS8vIDBRMCBjYWJsZSBldGhlcm5ldAogCVVTQl9ERVZJQ0UgKDB4MTU1NywgMHg3NzIwKSwKIAkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODg3NzJfaW5mbywKK30sIHsKKwkvLyBETGluayBEVUItRTEwMCBIL1cgVmVyIEIxCisJVVNCX0RFVklDRSAoMHgwN2QxLCAweDNjMDUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODc3Ml9pbmZvLAorfSwgeworCS8vIERMaW5rIERVQi1FMTAwIEgvVyBWZXIgQjEgQWx0ZXJuYXRlCisJVVNCX0RFVklDRSAoMHgyMDAxLCAweDNjMDUpLAorCS5kcml2ZXJfaW5mbyA9ICh1bnNpZ25lZCBsb25nKSAmYXg4ODc3Ml9pbmZvLAorfSwgeworCS8vIExpbmtzeXMgVVNCMTAwMAorCVVTQl9ERVZJQ0UgKDB4MTczNywgMHgwMDM5KSwKKwkuZHJpdmVyX2luZm8gPSAodW5zaWduZWQgbG9uZykgJmF4ODgxNzhfaW5mbywKIH0sCiAJeyB9LAkJLy8gRU5ECiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jIGIvZHJpdmVycy91c2IvbmV0L2thd2V0aC5jCmluZGV4IGRlZjNiYjguLjU0NGQ0MWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9rYXdldGguYworKysgYi9kcml2ZXJzL3VzYi9uZXQva2F3ZXRoLmMKQEAgLTE2NSw2ICsxNjUsNyBAQAogCXsgVVNCX0RFVklDRSgweDE2NDUsIDB4MDAwNSkgfSwgLyogRW50cmVnYSBFNDUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjQ1LCAweDAwMDgpIH0sIC8qIEVudHJlZ2EgVVNCIEV0aGVybmV0IEFkYXB0ZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxNjQ1LCAweDgwMDUpIH0sIC8qIFBvcnRHZWFyIEV0aGVybmV0IEFkYXB0ZXIgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxNjY4LCAweDAzMjMpIH0sIC8qIEFjdGlvbnRlYyBVU0IgRXRoZXJuZXQgKi8KIAl7IFVTQl9ERVZJQ0UoMHgyMDAxLCAweDQwMDApIH0sIC8qIEQtbGluayBEU0ItNjUwQyAqLwogCXt9IC8qIE51bGwgdGVybWluYXRvciAqLwogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL25ldC9uZXQxMDgwLmMgYi9kcml2ZXJzL3VzYi9uZXQvbmV0MTA4MC5jCmluZGV4IGE5YjZlZWEuLjMwMWJhYTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL25ldC9uZXQxMDgwLmMKKysrIGIvZHJpdmVycy91c2IvbmV0L25ldDEwODAuYwpAQCAtNDk4LDI1ICs0OTgsMjQgQEAKIHN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqCiBuZXQxMDgwX3R4X2ZpeHVwKHN0cnVjdCB1c2JuZXQgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgZ2ZwX3QgZmxhZ3MpCiB7Ci0JaW50CQkJcGFkbGVuOwogCXN0cnVjdCBza19idWZmCQkqc2tiMjsKIAlzdHJ1Y3QgbmNfaGVhZGVyCSpoZWFkZXIgPSBOVUxMOwogCXN0cnVjdCBuY190cmFpbGVyCSp0cmFpbGVyID0gTlVMTDsKKwlpbnQJCQlwYWRsZW4gPSBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKTsKIAlpbnQJCQlsZW4gPSBza2ItPmxlbjsKIAotCXBhZGxlbiA9ICgobGVuICsgc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKQotCQkJKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkgJiAweDAxKSA/IDAgOiAxOworCWlmICghKChsZW4gKyBwYWRsZW4gKyBzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpKSAmIDB4MDEpKQorCQlwYWRsZW4rKzsKIAlpZiAoIXNrYl9jbG9uZWQoc2tiKSkgewogCQlpbnQJaGVhZHJvb20gPSBza2JfaGVhZHJvb20oc2tiKTsKIAkJaW50CXRhaWxyb29tID0gc2tiX3RhaWxyb29tKHNrYik7CiAKLQkJaWYgKChwYWRsZW4gKyBzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSkgPD0gdGFpbHJvb20KLQkJCSAgICAmJiBzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpIDw9IGhlYWRyb29tKQorCQlpZiAocGFkbGVuIDw9IHRhaWxyb29tICYmCisJCSAgICBzaXplb2Yoc3RydWN0IG5jX2hlYWRlcikgPD0gaGVhZHJvb20pCiAJCQkvKiBUaGVyZSdzIGVub3VnaCBoZWFkIGFuZCB0YWlsIHJvb20gKi8KIAkJCWdvdG8gZW5jYXBzdWxhdGU7CiAKLQkJaWYgKChzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpICsgcGFkbGVuCi0JCQkJCSsgc2l6ZW9mIChzdHJ1Y3QgbmNfdHJhaWxlcikpIDwKKwkJaWYgKChzaXplb2YgKHN0cnVjdCBuY19oZWFkZXIpICsgcGFkbGVuKSA8CiAJCQkJKGhlYWRyb29tICsgdGFpbHJvb20pKSB7CiAJCQkvKiBUaGVyZSdzIGVub3VnaCB0b3RhbCByb29tLCBzbyBqdXN0IHJlYWRqdXN0ICovCiAJCQlza2ItPmRhdGEgPSBtZW1tb3ZlKHNrYi0+aGVhZApAQCAtNTMwLDcgKzUyOSw3IEBACiAJLyogQ3JlYXRlIGEgbmV3IHNrYiB0byB1c2Ugd2l0aCB0aGUgY29ycmVjdCBzaXplICovCiAJc2tiMiA9IHNrYl9jb3B5X2V4cGFuZChza2IsCiAJCQkJc2l6ZW9mIChzdHJ1Y3QgbmNfaGVhZGVyKSwKLQkJCQlzaXplb2YgKHN0cnVjdCBuY190cmFpbGVyKSArIHBhZGxlbiwKKwkJCQlwYWRsZW4sCiAJCQkJZmxhZ3MpOwogCWRldl9rZnJlZV9za2JfYW55KHNrYik7CiAJaWYgKCFza2IyKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYyBiL2RyaXZlcnMvdXNiL25ldC9wZWdhc3VzLmMKaW5kZXggYWIyMWY5Ni4uOTE4Y2Y1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3BlZ2FzdXMuYworKysgYi9kcml2ZXJzL3VzYi9uZXQvcGVnYXN1cy5jCkBAIC00NSw3ICs0NSw3IEBACiAvKgogICogVmVyc2lvbiBJbmZvcm1hdGlvbgogICovCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OICJ2MC42LjEzICgyMDA1LzExLzEzKSIKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYwLjYuMTQgKDIwMDYvMDkvMjcpIgogI2RlZmluZSBEUklWRVJfQVVUSE9SICJQZXRrbyBNYW5vbG92IDxwZXRrYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIlBlZ2FzdXMvUGVnYXN1cyBJSSBVU0IgRXRoZXJuZXQgZHJpdmVyIgogCkBAIC0zMzksNyArMzM5LDcgQEAKIAl9CiBmYWlsOgogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0zNzYsNyArMzc2LDcgQEAKIAogZmFpbDoKIAlpZiAobmV0aWZfbXNnX2RydihwZWdhc3VzKSkKLQkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgImZhaWwgJXNcbiIsIF9fRlVOQ1RJT05fXyk7CisJCWRldl93YXJuKCZwZWdhc3VzLT5pbnRmLT5kZXYsICIlcyBmYWlsZWRcbiIsIF9fRlVOQ1RJT05fXyk7CiAJcmV0dXJuIC1FVElNRURPVVQ7CiB9CiAKQEAgLTQxMyw3ICs0MTMsNyBAQAogCiBmYWlsOgogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KIApAQCAtNDYxLDcgKzQ2MSw3IEBACiAJCXJldHVybiByZXQ7CiBmYWlsOgogCWlmIChuZXRpZl9tc2dfZHJ2KHBlZ2FzdXMpKQotCQlkZXZfd2FybigmcGVnYXN1cy0+aW50Zi0+ZGV2LCAiZmFpbCAlc1xuIiwgX19GVU5DVElPTl9fKTsKKwkJZGV2X3dhcm4oJnBlZ2FzdXMtPmludGYtPmRldiwgIiVzIGZhaWxlZFxuIiwgX19GVU5DVElPTl9fKTsKIAlyZXR1cm4gLUVUSU1FRE9VVDsKIH0KICNlbmRpZgkJCQkvKiBQRUdBU1VTX1dSSVRFX0VFUFJPTSAqLwpAQCAtNDgxLDggKzQ4MSwxMiBAQAogewogCV9fdTggbm9kZV9pZFs2XTsKIAotCWdldF9ub2RlX2lkKHBlZ2FzdXMsIG5vZGVfaWQpOwotCXNldF9yZWdpc3RlcnMocGVnYXN1cywgRXRoSUQsIHNpemVvZiAobm9kZV9pZCksIG5vZGVfaWQpOworCWlmIChwZWdhc3VzLT5mZWF0dXJlcyAmIFBFR0FTVVNfSUkpIHsKKwkJZ2V0X3JlZ2lzdGVycyhwZWdhc3VzLCAweDEwLCBzaXplb2Yobm9kZV9pZCksIG5vZGVfaWQpOworCX0gZWxzZSB7CisJCWdldF9ub2RlX2lkKHBlZ2FzdXMsIG5vZGVfaWQpOworCQlzZXRfcmVnaXN0ZXJzKHBlZ2FzdXMsIEV0aElELCBzaXplb2YgKG5vZGVfaWQpLCBub2RlX2lkKTsKKwl9CiAJbWVtY3B5KHBlZ2FzdXMtPm5ldC0+ZGV2X2FkZHIsIG5vZGVfaWQsIHNpemVvZiAobm9kZV9pZCkpOwogfQogCkBAIC02MTksNyArNjIzLDcgQEAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgogCQlicmVhazsKLQljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRVRJTUU6CiAJCWlmIChuZXRpZl9tc2dfcnhfZXJyKHBlZ2FzdXMpKQogCQkJcHJfZGVidWcoIiVzOiByZXNldCBNQUNcbiIsIG5ldC0+bmFtZSk7CiAJCXBlZ2FzdXMtPmZsYWdzICY9IH5QRUdBU1VTX1JYX0JVU1k7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jIGIvZHJpdmVycy91c2IvbmV0L3J0bDgxNTAuYwppbmRleCBhNzI2ODViLi4yMzY0YzIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9uZXQvcnRsODE1MC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC9ydGw4MTUwLmMKQEAgLTQzOCw3ICs0MzgsNyBAQAogCQlicmVhazsKIAljYXNlIC1FTk9FTlQ6CiAJCXJldHVybjsJLyogdGhlIHVyYiBpcyBpbiB1bmxpbmsgc3RhdGUgKi8KLQljYXNlIC1FVElNRURPVVQ6CisJY2FzZSAtRVRJTUU6CiAJCXdhcm4oIm1heSBiZSByZXNldCBpcyBuZWVkZWQ/Li4iKTsKIAkJZ290byBnb29uOwogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMgYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmMKaW5kZXggNTQxODNlMS4uOThhNTIyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuYwpAQCAtNjEsOCArNjEsMTEgQEAKICAqIGxldCB0aGUgVVNCIGhvc3QgY29udHJvbGxlciBiZSBidXN5IGZvciA1bXNlYyBvciBtb3JlIGJlZm9yZSBhbiBpcnEKICAqIGlzIHJlcXVpcmVkLCB1bmRlciBsb2FkLiAgSnVtYm9ncmFtcyBjaGFuZ2UgdGhlIGVxdWF0aW9uLgogICovCi0jZGVmaW5lCVJYX1FMRU4oZGV2KSAoKChkZXYpLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA2MCA6IDQpCi0jZGVmaW5lCVRYX1FMRU4oZGV2KSAoKChkZXYpLT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkgPyA2MCA6IDQpCisjZGVmaW5lIFJYX01BWF9RVUVVRV9NRU1PUlkgKDYwICogMTUxOCkKKyNkZWZpbmUJUlhfUUxFTihkZXYpICgoKGRldiktPnVkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKSA/IFwKKwkJCShSWF9NQVhfUVVFVUVfTUVNT1JZLyhkZXYpLT5yeF91cmJfc2l6ZSkgOiA0KQorI2RlZmluZQlUWF9RTEVOKGRldikgKCgoZGV2KS0+dWRldi0+c3BlZWQgPT0gVVNCX1NQRUVEX0hJR0gpID8gXAorCQkJKFJYX01BWF9RVUVVRV9NRU1PUlkvKGRldiktPmhhcmRfbXR1KSA6IDQpCiAKIC8vIHJlYXdha2VuIG5ldHdvcmsgcXVldWUgdGhpcyBzb29uIGFmdGVyIHN0b3BwaW5nOyBlbHNlIHdhdGNoZG9nIGJhcmtzCiAjZGVmaW5lIFRYX1RJTUVPVVRfSklGRklFUwkoNSpIWikKQEAgLTIyNywxMyArMjMwLDIzIEBACiB7CiAJc3RydWN0IHVzYm5ldAkqZGV2ID0gbmV0ZGV2X3ByaXYobmV0KTsKIAlpbnQJCWxsX210dSA9IG5ld19tdHUgKyBuZXQtPmhhcmRfaGVhZGVyX2xlbjsKKwlpbnQJCW9sZF9oYXJkX210dSA9IGRldi0+aGFyZF9tdHU7CisJaW50CQlvbGRfcnhfdXJiX3NpemUgPSBkZXYtPnJ4X3VyYl9zaXplOwogCi0JaWYgKG5ld19tdHUgPD0gMCB8fCBsbF9tdHUgPiBkZXYtPmhhcmRfbXR1KQorCWlmIChuZXdfbXR1IDw9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCS8vIG5vIHNlY29uZCB6ZXJvLWxlbmd0aCBwYWNrZXQgcmVhZCB3YW50ZWQgYWZ0ZXIgbXR1LXNpemVkIHBhY2tldHMKIAlpZiAoKGxsX210dSAlIGRldi0+bWF4cGFja2V0KSA9PSAwKQogCQlyZXR1cm4gLUVET007CiAJbmV0LT5tdHUgPSBuZXdfbXR1OworCisJZGV2LT5oYXJkX210dSA9IG5ldC0+bXR1ICsgbmV0LT5oYXJkX2hlYWRlcl9sZW47CisJaWYgKGRldi0+cnhfdXJiX3NpemUgPT0gb2xkX2hhcmRfbXR1KSB7CisJCWRldi0+cnhfdXJiX3NpemUgPSBkZXYtPmhhcmRfbXR1OworCQlpZiAoZGV2LT5yeF91cmJfc2l6ZSA+IG9sZF9yeF91cmJfc2l6ZSkKKwkJCXVzYm5ldF91bmxpbmtfcnhfdXJicyhkZXYpOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC00MTIsOSArNDI1LDkgQEAKIAkgICAgLy8gd2UgZ2V0IGNvbnRyb2xsZXIgaS9vIGZhdWx0cyBkdXJpbmcga2h1YmQgZGlzY29ubmVjdCgpIGRlbGF5cy4KIAkgICAgLy8gdGhyb3R0bGUgZG93biByZXN1Ym1pdHMsIHRvIGF2b2lkIGxvZyBmbG9vZHM7IGp1c3QgdGVtcG9yYXJpbHksCiAJICAgIC8vIHNvIHdlIHN0aWxsIHJlY292ZXIgd2hlbiB0aGUgZmF1bHQgaXNuJ3QgYSBraHViZCBkZWxheS4KLQkgICAgY2FzZSAtRVBST1RPOgkJLy8gZWhjaQotCSAgICBjYXNlIC1FVElNRURPVVQ6CQkvLyBvaGNpCi0JICAgIGNhc2UgLUVJTFNFUToJCS8vIHVoY2kKKwkgICAgY2FzZSAtRVBST1RPOgorCSAgICBjYXNlIC1FVElNRToKKwkgICAgY2FzZSAtRUlMU0VROgogCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwogCQlpZiAoIXRpbWVyX3BlbmRpbmcgKCZkZXYtPmRlbGF5KSkgewogCQkJbW9kX3RpbWVyICgmZGV2LT5kZWxheSwgamlmZmllcyArIFRIUk9UVExFX0pJRkZJRVMpOwpAQCAtNTIxLDYgKzUzNCwxNyBAQAogCXJldHVybiBjb3VudDsKIH0KIAorLy8gRmx1c2ggYWxsIHBlbmRpbmcgcnggdXJicworLy8gbWluaWRyaXZlcnMgbWF5IG5lZWQgdG8gZG8gdGhpcyB3aGVuIHRoZSBNVFUgY2hhbmdlcworCit2b2lkIHVzYm5ldF91bmxpbmtfcnhfdXJicyhzdHJ1Y3QgdXNibmV0ICpkZXYpCit7CisJaWYgKG5ldGlmX3J1bm5pbmcoZGV2LT5uZXQpKSB7CisJCSh2b2lkKSB1bmxpbmtfdXJicyAoZGV2LCAmZGV2LT5yeHEpOworCQl0YXNrbGV0X3NjaGVkdWxlKCZkZXYtPmJoKTsKKwl9Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1c2JuZXRfdW5saW5rX3J4X3VyYnMpOwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCkBAIC02MjksNyArNjUzLDcgQEAKIAogCQlkZXZpbmZvIChkZXYsICJvcGVuOiBlbmFibGUgcXVldWVpbmcgIgogCQkJCSIocnggJWQsIHR4ICVkKSBtdHUgJWQgJXMgZnJhbWluZyIsCi0JCQlSWF9RTEVOIChkZXYpLCBUWF9RTEVOIChkZXYpLCBkZXYtPm5ldC0+bXR1LAorCQkJKGludClSWF9RTEVOIChkZXYpLCAoaW50KVRYX1FMRU4gKGRldiksIGRldi0+bmV0LT5tdHUsCiAJCQlmcmFtaW5nKTsKIAl9CiAKQEAgLTc5Nyw5ICs4MjEsOSBAQAogCiAJCS8vIGxpa2UgcngsIHR4IGdldHMgY29udHJvbGxlciBpL28gZmF1bHRzIGR1cmluZyBraHViZCBkZWxheXMKIAkJLy8gYW5kIHNvIGl0IHVzZXMgdGhlIHNhbWUgdGhyb3R0bGluZyBtZWNoYW5pc20uCi0JCWNhc2UgLUVQUk9UTzoJCS8vIGVoY2kKLQkJY2FzZSAtRVRJTUVET1VUOgkvLyBvaGNpCi0JCWNhc2UgLUVJTFNFUToJCS8vIHVoY2kKKwkJY2FzZSAtRVBST1RPOgorCQljYXNlIC1FVElNRToKKwkJY2FzZSAtRUlMU0VROgogCQkJaWYgKCF0aW1lcl9wZW5kaW5nICgmZGV2LT5kZWxheSkpIHsKIAkJCQltb2RfdGltZXIgKCZkZXYtPmRlbGF5LAogCQkJCQlqaWZmaWVzICsgVEhST1RUTEVfSklGRklFUyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmggYi9kcml2ZXJzL3VzYi9uZXQvdXNibmV0LmgKaW5kZXggODlmYzQ5NS4uYzA3NDZmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2IvbmV0L3VzYm5ldC5oCisrKyBiL2RyaXZlcnMvdXNiL25ldC91c2JuZXQuaApAQCAtMTY2LDYgKzE2Niw3IEBACiBleHRlcm4gaW50IHVzYm5ldF9nZXRfZW5kcG9pbnRzKHN0cnVjdCB1c2JuZXQgKiwgc3RydWN0IHVzYl9pbnRlcmZhY2UgKik7CiBleHRlcm4gdm9pZCB1c2JuZXRfZGVmZXJfa2V2ZW50IChzdHJ1Y3QgdXNibmV0ICosIGludCk7CiBleHRlcm4gdm9pZCB1c2JuZXRfc2tiX3JldHVybiAoc3RydWN0IHVzYm5ldCAqLCBzdHJ1Y3Qgc2tfYnVmZiAqKTsKK2V4dGVybiB2b2lkIHVzYm5ldF91bmxpbmtfcnhfdXJicyhzdHJ1Y3QgdXNibmV0ICopOwogCiBleHRlcm4gdTMyIHVzYm5ldF9nZXRfbXNnbGV2ZWwgKHN0cnVjdCBuZXRfZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgdXNibmV0X3NldF9tc2dsZXZlbCAoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTMyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9LY29uZmlnIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKaW5kZXggZjViOTQzOC4uNTA3NmI5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL0tjb25maWcKQEAgLTUzLDYgKzUzLDE1IEBACiAJICBzdXBwb3J0IiBiZSBjb21waWxlZCBhcyBhIG1vZHVsZSBmb3IgdGhpcyBkcml2ZXIgdG8gYmUgdXNlZAogCSAgcHJvcGVybHkuCiAKK2NvbmZpZyBVU0JfU0VSSUFMX0FJUkNBQkxFCisJdHJpc3RhdGUgIkFJUmNhYmxlIFVTQiBCbHVldG9vdGggRG9uZ2xlIERyaXZlciAoRVhQRVJJTUVOVEFMKSIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwgJiYgRVhQRVJJTUVOVEFMCisJaGVscAorCSAgICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBBSVJjYWJsZSBVU0IgQmx1ZXRvb3QgRG9uZ2xlLgorCisJICAgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZSBtb2R1bGUKKwkgICAgd2lsbCBiZSBjYWxsZWQgYWlyY2FibGUuCisKIGNvbmZpZyBVU0JfU0VSSUFMX0FJUlBSSU1FCiAJdHJpc3RhdGUgIlVTQiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIERyaXZlciIKIAlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKQEAgLTQxMyw2ICs0MjIsMjEgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG1jdF91MjMyLgogCitjb25maWcgVVNCX1NFUklBTF9NT1M3ODQwCisJdHJpc3RhdGUgIlVTQiBNb3NjaGlwIDc4NDAvNzgyMCBVU0IgU2VyaWFsIERyaXZlciIKKwlkZXBlbmRzIG9uIFVTQl9TRVJJQUwKKwktLS1oZWxwLS0tCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSBhIE1DUzc4NDAgUXVhZC1TZXJpYWwgb3IgTUNTNzgyMAorCSAgRHVhbC1TZXJpYWwgcG9ydCBkZXZpY2UgZnJvbSBNb3NDaGlwIFNlbWljb25kdWN0b3IuCisKKwkgIFRoZSBNQ1M3ODQwIGFuZCBNQ1M3ODIwIGhhdmUgYmVlbiBkZXZlbG9wZWQgdG8gY29ubmVjdCBhIHdpZGUgcmFuZ2UKKwkgIG9mIHN0YW5kYXJkIHNlcmlhbCBkZXZpY2VzIHRvIGEgVVNCIGhvc3QuICBUaGUgTUNTNzg0MCBoYXMgYSBVU0IKKwkgIGRldmljZSBjb250cm9sbGVyIGNvbm5lY3RlZCB0byBmb3VyICg0KSBpbmRpdmlkdWFsIFVBUlRzIHdoaWxlIHRoZQorCSAgTUNTNzgyMCBjb250cm9sbGVyIGNvbm5lY3RzIHRvIHR3byAoMikgaW5kaXZpZHVhbCBVQVJUcy4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgbW9zNzg0MC4gIElmIHVuc3VyZSwgY2hvb3NlIE4uCisKIGNvbmZpZyBVU0JfU0VSSUFMX05BVk1BTgogCXRyaXN0YXRlICJVU0IgTmF2bWFuIEdQUyBkZXZpY2UiCiAJZGVwZW5kcyBvbiBVU0JfU0VSSUFMCkBAIC01MjYsNSArNTUwLDYgQEAKIAlkZXBlbmRzIG9uIFVTQl9TRVJJQUxfS0VZU1BBTl9QREEgfHwgVVNCX1NFUklBTF9YSVJDT00gfHwgVVNCX1NFUklBTF9LRVlTUEFOIHx8IFVTQl9TRVJJQUxfV0hJVEVIRUFUCiAJZGVmYXVsdCB5CiAKKwogZW5kbWVudQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zZXJpYWwvTWFrZWZpbGUKaW5kZXggOGVmZWQyYy4uOGRjZTgzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9NYWtlZmlsZQpAQCAtMTEsNiArMTEsNyBAQAogCiB1c2JzZXJpYWwtb2Jqcwk6PSB1c2Itc2VyaWFsLm8gZ2VuZXJpYy5vIGJ1cy5vICQodXNic2VyaWFsLW9iai15KQogCitvYmotJChDT05GSUdfVVNCX1NFUklBTF9BSVJDQUJMRSkJCSs9IGFpcmNhYmxlLm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX0FJUlBSSU1FKQkJKz0gYWlycHJpbWUubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQVJLMzExNikJCSs9IGFyazMxMTYubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfQkVMS0lOKQkJCSs9IGJlbGtpbl9zYS5vCkBAIC0zMyw2ICszNCw3IEBACiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9LTFNJKQkJCSs9IGtsNWt1c2IxMDUubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfS09CSUxfU0NUKQkJKz0ga29iaWxfc2N0Lm8KIG9iai0kKENPTkZJR19VU0JfU0VSSUFMX01DVF9VMjMyKQkJKz0gbWN0X3UyMzIubworb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfTU9TNzg0MCkJCSs9IG1vczc4NDAubwogb2JqLSQoQ09ORklHX1VTQl9TRVJJQUxfTkFWTUFOKQkJCSs9IG5hdm1hbi5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PTU5JTkVUKQkJKz0gb21uaW5ldC5vCiBvYmotJChDT05GSUdfVVNCX1NFUklBTF9PUFRJT04pCQkJKz0gb3B0aW9uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcmNhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNjZDlkZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJjYWJsZS5jCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICogQUlSY2FibGUgVVNCIEJsdWV0b290aCBEb25nbGUgRHJpdmVyLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBNYW51ZWwgRnJhbmNpc2NvIE5hcmFuam8gKG5hcmFuam8ubWFudWVsQGdtYWlsLmNvbSkKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCisgKiB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhlIGRldmljZSB3b3JrcyBhcyBhbiBzdGFuZGFyZCBDREMgZGV2aWNlLCBpdCBoYXMgMiBpbnRlcmZhY2VzLCB0aGUgZmlyc3QKKyAqIG9uZSBpcyBmb3IgZmlybXdhcmUgYWNjZXNzIGFuZCB0aGUgc2Vjb25kIGlzIHRoZSBzZXJpYWwgb25lLgorICogVGhlIHByb3RvY29sIGlzIHZlcnkgc2ltcGx5LCB0aGVyZSBhcmUgdHdvIHBvc2liaWxpdGllcyByZWFkaW5nIG9yIHdyaXRpbmcuCisgKiBXaGVuIHdyaXR0aW5nIHRoZSBmaXJzdCB1cmIgbXVzdCBoYXZlIGEgSGVhZGVyIHRoYXQgc3RhcnRzIHdpdGggMHgyMCAweDI5IHRoZQorICogbmV4dCB0d28gYnl0ZXMgbXVzdCBzYXkgaG93IG11Y2ggZGF0YSB3aWxsIGJlIHNlbmRlZC4KKyAqIFdoZW4gcmVhZGluZyB0aGUgcHJvY2VzcyBpcyBhbG1vc3QgZXF1YWwgZXhjZXB0IHRoYXQgdGhlIGhlYWRlciBzdGFydHMgd2l0aAorICogMHgwMCAweDIwLgorICoKKyAqIFRoZSBkZXZpY2Ugc2ltcGx5IG5lZWQgc29tZSBzdHVmZiB0byB1bmRlcnN0YW5kIGRhdGEgY29tbWluZyBmcm9tIHRoZSB1c2IKKyAqIGJ1ZmZlcjogVGhlIEZpcnN0IGFuZCBTZWNvbmQgYnl0ZSBpcyB1c2VkIGZvciBhIEhlYWRlciwgdGhlIFRoaXJkIGFuZCBGb3VydGgKKyAqIHRlbGxzIHRoZSAgZGV2aWNlIHRoZSBhbW91bnQgb2YgaW5mb3JtYXRpb24gdGhlIHBhY2thZ2UgaG9sZHMuCisgKiBQYWNrYWdlcyBhcmUgNjAgYnl0ZXMgbG9uZyBIZWFkZXIgU3R1ZmYuCisgKiBXaGVuIHdyaXR0aW5nIHRvIHRoZSBkZXZpY2UgdGhlIGZpcnN0IHR3byBieXRlcyBvZiB0aGUgaGVhZGVyIGFyZSAweDIwIDB4MjkKKyAqIFdoZW4gcmVhZGluZyB0aGUgYnl0ZXMgYXJlIDB4MDAgMHgyMCwgb3IgMHgwMCAweDEwLCB0aGVyZSBpcyBhbiBzdHJhbmdlCisgKiBzaXR1YXRpb24sIHdoZW4gdG9vIG11Y2ggZGF0YSBhcnJpdmVzIHRvIHRoZSBkZXZpY2UgYmVjYXVzZSBpdCBzZW5kcyB0aGUgZGF0YQorICogYnV0IHdpdGggb3V0IHRoZSBoZWFkZXIuIEkgd2lsbCB1c2UgYSBzaW1wbHkgaGFjayB0byBvdmVycmlkZSB0aGlzIHNpdHVhdGlvbiwKKyAqIGlmIHRoZXJlIGlzIGRhdGEgY29taW5nIHRoYXQgZG9lcyBub3QgY29udGFpbiBhbnkgaGVhZGVyLCB0aGVuIHRoYXQgaXMgZGF0YQorICogdGhhdCBtdXN0IGdvIGRpcmVjdGx5IHRvIHRoZSB0dHksIGFzIHRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gYWJvdXQgaWYgdGhlcmUKKyAqIGlzIGFueSBvdGhlciBjb250cm9sIGNvZGUsIEkgd2lsbCBzaW1wbHkgY2hlY2sgZm9yIHRoZSBmaXJzdAorICogb25lLgorICoKKyAqIFRoZSBkcml2ZXIgcmVnaXN0ZXJzIGhpbXNlbGYgd2l0aCB0aGUgVVNCLXNlcmlhbCBjb3JlIGFuZCB0aGUgVVNCIENvcmUuIEkgaGFkCisgKiB0byBpbXBsZW1lbnQgYSBwcm9iZSBmdW5jdGlvbiBhZ2FpbnMgVVNCLXNlcmlhbCwgYmVjYXVzZSBvdGhlciB3YXksIHRoZQorICogZHJpdmVyIHdhcyBhdHRhY2hpbmcgaGltc2VsZiB0byBib3RoIGludGVyZmFjZXMuIEkgaGF2ZSB0cnllZCB3aXRoIGRpZmZlcmVudAorICogY29uZmlndXJhdGlvbnMgb2YgdXNiX3NlcmlhbF9kcml2ZXIgd2l0aCBvdXQgZXhpdCwgb25seSB0aGUgcHJvYmUgZnVuY3Rpb24KKyAqIGNvdWxkIGhhbmRsZSB0aGlzIGNvcnJlY3RseS4KKyAqCisgKiBJIGhhdmUgdGFrZW4gc29tZSBpbmZvIGZyb20gYSBHcmVnIEtyb2FoLUhhcnRtYW4gYXJ0aWNsZToKKyAqIGh0dHA6Ly93d3cubGludXhqb3VybmFsLmNvbS9hcnRpY2xlLzY1NzMKKyAqIEFuZCBmcm9tIExpbnV4IERldmljZSBEcml2ZXIgS2l0IENELCB3aGljaCBpcyBhIGdyZWF0IHdvcmssIHRoZSBhdXRob3JzIHRha2VuCisgKiB0aGUgd29yayB0byByZWNvbXBpbGUgbG90cyBvZiBpbmZvcm1hdGlvbiBhbiBrbm93bGFkZ2UgaW4gZHJpdmVycyBkZXZlbG9wbWVudAorICogYW5kIG1hZGUgaXQgYWxsIGF2YWlibGUgaW5zaWRlIGEgY2QuCisgKiBVUkw6IGh0dHA6Ly9rZXJuZWwub3JnL3B1Yi9saW51eC9rZXJuZWwvcGVvcGxlL2dyZWdraC9kZGsvCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC90dHkuaD4KKyNpbmNsdWRlIDxsaW51eC90dHlfZmxpcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NpcmNfYnVmLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorCitzdGF0aWMgaW50IGRlYnVnOworCisvKiBWZW5kb3IgYW5kIFByb2R1Y3QgSUQgKi8KKyNkZWZpbmUgQUlSQ0FCTEVfVklECQkweDE2Q0EKKyNkZWZpbmUgQUlSQ0FCTEVfVVNCX1BJRAkweDE1MDIKKworLyogd3JpdGUgYnVmZmVyIHNpemUgZGVmaW5lcyAqLworI2RlZmluZSBBSVJDQUJMRV9CVUZfU0laRQkyMDQ4CisKKy8qIFByb3RvY29sIFN0dWZmICovCisjZGVmaW5lIEhDSV9IRUFERVJfTEVOR1RICTB4NAorI2RlZmluZSBUWF9IRUFERVJfMAkJMHgyMAorI2RlZmluZSBUWF9IRUFERVJfMQkJMHgyOQorI2RlZmluZSBSWF9IRUFERVJfMAkJMHgwMAorI2RlZmluZSBSWF9IRUFERVJfMQkJMHgyMAorI2RlZmluZSBNQVhfSENJX0ZSQU1FU0laRQk2MAorI2RlZmluZSBIQ0lfQ09NUExFVEVfRlJBTUUJNjQKKworLyogcnhfZmxhZ3MgKi8KKyNkZWZpbmUgVEhST1RUTEVECQkweDAxCisjZGVmaW5lIEFDVFVBTExZX1RIUk9UVExFRAkweDAyCisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYxLjBiMiIKKyNkZWZpbmUgRFJJVkVSX0FVVEhPUiAiTmFyYW5qbywgTWFudWVsIEZyYW5jaXNjbyA8bmFyYW5qby5tYW51ZWxAZ21haWwuY29tPiIKKyNkZWZpbmUgRFJJVkVSX0RFU0MgIkFJUmNhYmxlIFVTQiBEcml2ZXIiCisKKy8qIElEIHRhYmxlIHRoYXQgd2lsbCBiZSByZWdpc3RlcmVkIHdpdGggVVNCIGNvcmUgKi8KK3N0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBpZF90YWJsZSBbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoQUlSQ0FCTEVfVklELCBBSVJDQUJMRV9VU0JfUElEKSB9LAorCXsgfSwKK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOworCisKKy8qIEludGVybmFsIFN0cnVjdHVyZSAqLworc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgeworCXNwaW5sb2NrX3QgcnhfbG9jazsJCS8qIHNwaW5sb2NrIGZvciB0aGUgcmVjZWl2ZSBsaW5lcyAqLworCXN0cnVjdCBjaXJjX2J1ZiAqdHhfYnVmOwkvKiB3cml0ZSBidWZmZXIgKi8KKwlzdHJ1Y3QgY2lyY19idWYgKnJ4X2J1ZjsJLyogcmVhZCBidWZmZXIgKi8KKwlpbnQgcnhfZmxhZ3M7CQkJLyogZm9yIHRocm90dGlsbmcgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgcnhfd29yazsJLyogd29yayBjdWUgZm9yIHRoZSByZWNlaXZpbmcgbGluZSAqLworfTsKKworLyogUHJpdmF0ZSBtZXRob2RzICovCisKKy8qIENpcmN1bGFyIEJ1ZmZlciBNZXRob2RzLCBjb2RlIGZyb20gdGlfdXNiXzM0MTBfNTA1MiB1c2VkICovCisvKgorICogc2VyaWFsX2J1Zl9jbGVhcgorICoKKyAqIENsZWFyIG91dCBhbGwgZGF0YSBpbiB0aGUgY2lyY3VsYXIgYnVmZmVyLgorICovCitzdGF0aWMgdm9pZCBzZXJpYWxfYnVmX2NsZWFyKHN0cnVjdCBjaXJjX2J1ZiAqY2IpCit7CisJY2ItPmhlYWQgPSBjYi0+dGFpbCA9IDA7Cit9CisKKy8qCisgKiBzZXJpYWxfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIHN0cnVjdCBjaXJjX2J1ZiAqc2VyaWFsX2J1Zl9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBjaXJjX2J1ZiAqY2I7CisJY2IgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgY2lyY19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2IgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJY2ItPmJ1ZiA9IGttYWxsb2MoQUlSQ0FCTEVfQlVGX1NJWkUsIEdGUF9LRVJORUwpOworCWlmIChjYi0+YnVmID09IE5VTEwpIHsKKwkJa2ZyZWUoY2IpOworCQlyZXR1cm4gTlVMTDsKKwl9CisJc2VyaWFsX2J1Zl9jbGVhcihjYik7CisJcmV0dXJuIGNiOworfQorCisvKgorICogc2VyaWFsX2J1Zl9mcmVlCisgKgorICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCisgKi8KK3N0YXRpYyB2b2lkIHNlcmlhbF9idWZfZnJlZShzdHJ1Y3QgY2lyY19idWYgKmNiKQoreworCWtmcmVlKGNiLT5idWYpOworCWtmcmVlKGNiKTsKK30KKworLyoKKyAqIHNlcmlhbF9idWZfZGF0YV9hdmFpbAorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCitzdGF0aWMgaW50IHNlcmlhbF9idWZfZGF0YV9hdmFpbChzdHJ1Y3QgY2lyY19idWYgKmNiKQoreworCXJldHVybiBDSVJDX0NOVChjYi0+aGVhZCxjYi0+dGFpbCxBSVJDQUJMRV9CVUZfU0laRSk7Cit9CisKKy8qCisgKiBzZXJpYWxfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIGludCBzZXJpYWxfYnVmX3B1dChzdHJ1Y3QgY2lyY19idWYgKmNiLCBjb25zdCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgYywgcmV0ID0gMDsKKwl3aGlsZSAoMSkgeworCQljID0gQ0lSQ19TUEFDRV9UT19FTkQoY2ItPmhlYWQsIGNiLT50YWlsLCBBSVJDQUJMRV9CVUZfU0laRSk7CisJCWlmIChjb3VudCA8IGMpCisJCQljID0gY291bnQ7CisJCWlmIChjIDw9IDApCisJCQlicmVhazsKKwkJbWVtY3B5KGNiLT5idWYgKyBjYi0+aGVhZCwgYnVmLCBjKTsKKwkJY2ItPmhlYWQgPSAoY2ItPmhlYWQgKyBjKSAmIChBSVJDQUJMRV9CVUZfU0laRS0xKTsKKwkJYnVmICs9IGM7CisJCWNvdW50IC09IGM7CisJCXJldD0gYzsKKwl9CisJcmV0dXJuIHJldDsKK30KKworLyoKKyAqIHNlcmlhbF9idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIGludCBzZXJpYWxfYnVmX2dldChzdHJ1Y3QgY2lyY19idWYgKmNiLCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlpbnQgYywgcmV0ID0gMDsKKwl3aGlsZSAoMSkgeworCQljID0gQ0lSQ19DTlRfVE9fRU5EKGNiLT5oZWFkLCBjYi0+dGFpbCwgQUlSQ0FCTEVfQlVGX1NJWkUpOworCQlpZiAoY291bnQgPCBjKQorCQkJYyA9IGNvdW50OworCQlpZiAoYyA8PSAwKQorCQkJYnJlYWs7CisJCW1lbWNweShidWYsIGNiLT5idWYgKyBjYi0+dGFpbCwgYyk7CisJCWNiLT50YWlsID0gKGNiLT50YWlsICsgYykgJiAoQUlSQ0FCTEVfQlVGX1NJWkUtMSk7CisJCWJ1ZiArPSBjOworCQljb3VudCAtPSBjOworCQlyZXQ9IGM7CisJfQorCXJldHVybiByZXQ7Cit9CisKKy8qIEVuZCBvZiBjaXJjdWxhIGJ1ZmZlciBtZXRob2RzICovCisKK3N0YXRpYyB2b2lkIGFpcmNhYmxlX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlpbnQgY291bnQsIHJlc3VsdDsKKwlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBjaGFyKiBidWY7CisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KQorCQlyZXR1cm47CisKKwljb3VudCA9IG1pbihzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+dHhfYnVmKSwgTUFYX0hDSV9GUkFNRVNJWkUpOworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm47CisKKwlidWYgPSBremFsbG9jKGNvdW50ICsgSENJX0hFQURFUl9MRU5HVEgsIEdGUF9BVE9NSUMpOworCWlmICghYnVmKSB7CisJCWVycigiJXMtIGt6YWxsb2MoJWQpIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sCisJCSAgICBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIKTsKKwkJcmV0dXJuOworCX0KKworCWJ1ZlswXSA9IFRYX0hFQURFUl8wOworCWJ1ZlsxXSA9IFRYX0hFQURFUl8xOworCWJ1ZlsyXSA9ICh1bnNpZ25lZCBjaGFyKWNvdW50OworCWJ1ZlszXSA9ICh1bnNpZ25lZCBjaGFyKShjb3VudCA+PiA4KTsKKwlzZXJpYWxfYnVmX2dldChwcml2LT50eF9idWYsYnVmICsgSENJX0hFQURFUl9MRU5HVEgsIE1BWF9IQ0lfRlJBTUVTSVpFKTsKKworCW1lbWNweShwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwgYnVmLAorCSAgICAgICBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIKTsKKworCWtmcmVlKGJ1Zik7CisJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLAorCQkJICAgICAgY291bnQgKyBIQ0lfSEVBREVSX0xFTkdUSCwKKwkJCSAgICAgIHBvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwlwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBjb3VudCArIEhDSV9IRUFERVJfTEVOR1RIOworCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKworCWlmIChyZXN1bHQpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOworCX0KKworCXNjaGVkdWxlX3dvcmsoJnBvcnQtPndvcmspOworfQorCitzdGF0aWMgdm9pZCBhaXJjYWJsZV9yZWFkKHZvaWQgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gcGFyYW1zOworCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlpbnQgY291bnQ7CisJaWYgKHByaXYtPnJ4X2ZsYWdzICYgVEhST1RUTEVEKXsKKwkJaWYgKHByaXYtPnJ4X2ZsYWdzICYgQUNUVUFMTFlfVEhST1RUTEVEKQorCQkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7CisJCXJldHVybjsKKwl9CisKKwkvKiBCeSBub3cgSSB3aWxsIGZsdXNoIGRhdGEgdG8gdGhlIHR0eSBpbiBwYWNrYWdlcyBvZiBubyBtb3JlIHRoYW4KKwkgKiA2NCBieXRlcywgdG8gZW5zdXJlIEkgZG8gbm90IGdldCB0aHJvdHRsZWQuCisJICogQXNrIFVTQiBtYWlsaW5nIGxpc3QgZm9yIGJldHRlciBhcHJvYWNoLgorCSAqLworCXR0eSA9IHBvcnQtPnR0eTsKKworCWlmICghdHR5KQorCQlzY2hlZHVsZV93b3JrKCZwcml2LT5yeF93b3JrKTsKKworCWNvdW50ID0gbWluKDY0LCBzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+cnhfYnVmKSk7CisKKwlpZiAoY291bnQgPD0gMCkKKwkJcmV0dXJuOyAvL1dlIGhhdmUgZmluaXNoZWQgc2VuZGluZyBldmVyeXRoaW5nLgorCisJdHR5X3ByZXBhcmVfZmxpcF9zdHJpbmcodHR5LCAmZGF0YSwgY291bnQpOworCWlmICghZGF0YSl7CisJCWVycigiJXMtIGt6YWxsb2MoJWQpIGZhaWxlZC4iLCBfX0ZVTkNUSU9OX18sIGNvdW50KTsKKwkJcmV0dXJuOworCX0KKworCXNlcmlhbF9idWZfZ2V0KHByaXYtPnJ4X2J1ZiwgZGF0YSwgY291bnQpOworCisJdHR5X2ZsaXBfYnVmZmVyX3B1c2godHR5KTsKKworCWlmIChzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+cnhfYnVmKSkKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7CisKKwlyZXR1cm47Cit9CisvKiBFbmQgb2YgcHJpdmF0ZSBtZXRob2RzICovCisKK3N0YXRpYyBpbnQgYWlyY2FibGVfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCSAgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2MgPSBzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmc7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlpbnQgbnVtX2J1bGtfb3V0PTA7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKKwkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKKwkJaWYgKCgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSA9PSAweDAwKSAmJgorCQkJKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKwkJCS8qIHdlIGZvdW5kIG91ciBidWxrIG91dCBlbmRwb2ludCAqLworCQkJZGJnKCJmb3VuZCBidWxrIG91dCBvbiBlbmRwb2ludCAlZCIsIGkpOworCQkJKytudW1fYnVsa19vdXQ7CisJCX0KKwl9CisKKwlpZiAobnVtX2J1bGtfb3V0ID09IDApIHsKKwkJZGJnKCJJbnZhbGlkIGludGVyZmFjZSwgZGlzY2FyZGluZyIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhaXJjYWJsZV9hdHRhY2ggKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHNlcmlhbC0+cG9ydFswXTsKKwlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdjsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSksIEdGUF9LRVJORUwpOworCWlmICghcHJpdil7CisJCWVycigiJXMtIGttYWxsb2MoJVpkKSBmYWlsZWQuIiwgX19GVU5DVElPTl9fLAorCQkJc2l6ZW9mKHN0cnVjdCBhaXJjYWJsZV9wcml2YXRlKSk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIEFsbG9jYXRpb24gb2YgQ2lyY3VsYXIgQnVmZmVycyAqLworCXByaXYtPnR4X2J1ZiA9IHNlcmlhbF9idWZfYWxsb2MoKTsKKwlpZiAocHJpdi0+dHhfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYtPnJ4X2J1ZiA9IHNlcmlhbF9idWZfYWxsb2MoKTsKKwlpZiAocHJpdi0+cnhfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocHJpdi0+dHhfYnVmKTsKKwkJa2ZyZWUocHJpdik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXByaXYtPnJ4X2ZsYWdzICY9IH4oVEhST1RUTEVEIHwgQUNUVUFMTFlfVEhST1RUTEVEKTsKKwlJTklUX1dPUksoJnByaXYtPnJ4X3dvcmssIGFpcmNhYmxlX3JlYWQsIHBvcnQpOworCisJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFswXSwgcHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgYWlyY2FibGVfc2h1dGRvd24oc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CisJc3RydWN0IGFpcmNhYmxlX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKworCWlmIChwcml2KSB7CisJCXNlcmlhbF9idWZfZnJlZShwcml2LT50eF9idWYpOworCQlzZXJpYWxfYnVmX2ZyZWUocHJpdi0+cnhfYnVmKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIE5VTEwpOworCQlrZnJlZShwcml2KTsKKwl9Cit9CisKK3N0YXRpYyBpbnQgYWlyY2FibGVfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCXJldHVybiBzZXJpYWxfYnVmX2RhdGFfYXZhaWwocHJpdi0+dHhfYnVmKTsKK30KKworc3RhdGljIGludCBhaXJjYWJsZV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpzb3VyY2UsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlpbnQgdGVtcDsKKworCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisKKwl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgY291bnQsIHNvdXJjZSk7CisKKwlpZiAoIWNvdW50KXsKKwkJZGJnKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybiBjb3VudDsKKwl9CisKKwl0ZW1wID0gc2VyaWFsX2J1Zl9wdXQocHJpdi0+dHhfYnVmLCBzb3VyY2UsIGNvdW50KTsKKworCWFpcmNhYmxlX3NlbmQocG9ydCk7CisKKwlpZiAoY291bnQgPiBBSVJDQUJMRV9CVUZfU0laRSkKKwkJY291bnQgPSBBSVJDQUJMRV9CVUZfU0laRTsKKworCXJldHVybiBjb3VudDsKKworfQorCitzdGF0aWMgdm9pZCBhaXJjYWJsZV93cml0ZV9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKwlpbnQgcmVzdWx0OworCisJZGJnKCIlcyAtIHVyYi0+c3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXyAsIHVyYi0+c3RhdHVzKTsKKworCS8qIFRoaXMgaGFzIGJlZW4gdGFrZW4gZnJvbSBjeXByZXNzX204LmMgY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2sgKi8KKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJCWNhc2UgMDoKKwkJCS8qIHN1Y2Nlc3MgKi8KKwkJCWJyZWFrOworCQljYXNlIC1FQ09OTlJFU0VUOgorCQljYXNlIC1FTk9FTlQ6CisJCWNhc2UgLUVTSFVURE9XTjoKKwkJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMDsKKwkJCXJldHVybjsKKwkJZGVmYXVsdDoKKwkJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KKwkJCWRiZygiJXMgLSBPdmVyZmxvdyBpbiB3cml0ZSIsIF9fRlVOQ1RJT05fXyk7CisJCQlkYmcoIiVzIC0gbm9uemVybyB3cml0ZSBidWxrIHN0YXR1cyByZWNlaXZlZDogJWQiLAorCQkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTsKKwkJCXBvcnQtPndyaXRlX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9LRVJORUwpOworCQkJaWYgKHJlc3VsdCkKKwkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJCQkiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCWVsc2UKKwkJCQlyZXR1cm47CisJfQorCisJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAwOworCisJYWlyY2FibGVfc2VuZChwb3J0KTsKK30KKworc3RhdGljIHZvaWQgYWlyY2FibGVfcmVhZF9idWxrX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IHVyYi0+Y29udGV4dDsKKwlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCXVuc2lnbmVkIGxvbmcgbm9fcGFja2FnZXMsIHJlbWFpbmluZywgcGFja2FnZV9sZW5ndGgsIGk7CisJaW50IHJlc3VsdCwgc2hpZnQgPSAwOworCXVuc2lnbmVkIGNoYXIgKnRlbXA7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIiVzIC0gdXJiLT5zdGF0dXMgPSAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlpZiAoIXBvcnQtPm9wZW5fY291bnQpIHsKKwkJCWRiZygiJXMgLSBwb3J0IGlzIGNsb3NlZCwgZXhpdGluZy4iLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuOworCQl9CisJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7CisJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18pOworCQkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCQkgIHVzYl9yY3ZidWxrcGlwZShwb3J0LT5zZXJpYWwtPmRldiwKKwkJCQkJICAJCSAgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCSAgcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkJCSAgYWlyY2FibGVfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChyZXN1bHQpCisJCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwKKwkJCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCXJldHVybjsKKwkJfQorCQlkYmcoIiVzIC0gdW5hYmxlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLAorCQkJCXVyYi0+YWN0dWFsX2xlbmd0aCx1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJaWYgKHVyYi0+YWN0dWFsX2xlbmd0aCA8PSAyKSB7CisJCQkvKiBUaGlzIGlzIGFuIGluY29tcGxldGUgcGFja2FnZSAqLworCQkJc2VyaWFsX2J1Zl9wdXQocHJpdi0+cnhfYnVmLCB1cmItPnRyYW5zZmVyX2J1ZmZlciwKKwkJCQkgICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJfSBlbHNlIHsKKwkJCXRlbXAgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwkJCWlmICh0ZW1wWzBdID09IFJYX0hFQURFUl8wKQorCQkJCXNoaWZ0ID0gSENJX0hFQURFUl9MRU5HVEg7CisKKwkJCXJlbWFpbmluZyA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJCW5vX3BhY2thZ2VzID0gdXJiLT5hY3R1YWxfbGVuZ3RoIC8gKEhDSV9DT01QTEVURV9GUkFNRSk7CisKKwkJCWlmICh1cmItPmFjdHVhbF9sZW5ndGggJSBIQ0lfQ09NUExFVEVfRlJBTUUgIT0gMCkKKwkJCQlub19wYWNrYWdlcys9MTsKKworCQkJZm9yIChpID0gMDsgaSA8IG5vX3BhY2thZ2VzIDtpKyspIHsKKwkJCQlpZiAocmVtYWluaW5nID4gKEhDSV9DT01QTEVURV9GUkFNRSkpCisJCQkJCXBhY2thZ2VfbGVuZ3RoID0gSENJX0NPTVBMRVRFX0ZSQU1FOworCQkJCWVsc2UKKwkJCQkJcGFja2FnZV9sZW5ndGggPSByZW1haW5pbmc7CisJCQkJcmVtYWluaW5nIC09IHBhY2thZ2VfbGVuZ3RoOworCisJCQkJc2VyaWFsX2J1Zl9wdXQocHJpdi0+cnhfYnVmLAorCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciArIHNoaWZ0ICsKKwkJCQkJKEhDSV9DT01QTEVURV9GUkFNRSkgKiAoaSksCisJCQkJCXBhY2thZ2VfbGVuZ3RoIC0gc2hpZnQpOworCQkJfQorCQl9CisJCWFpcmNhYmxlX3JlYWQocG9ydCk7CisJfQorCisJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCisJaWYgKHBvcnQtPm9wZW5fY291bnQpIHsKKwkJdXNiX2ZpbGxfYnVsa191cmIocG9ydC0+cmVhZF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgdXNiX3JjdmJ1bGtwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAorCQkJCSAgCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQkgIGFpcmNhYmxlX3JlYWRfYnVsa19jYWxsYmFjaywgcG9ydCk7CisKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJlc3VsdCkKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkJIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKworCXJldHVybjsKK30KKworLyogQmFzZWQgb24gZnRkaV9zaW8uYyB0aHJvdHRsZSAqLworc3RhdGljIHZvaWQgYWlyY2FibGVfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgYWlyY2FibGVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCXByaXYtPnJ4X2ZsYWdzIHw9IFRIUk9UVExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5yeF9sb2NrLCBmbGFncyk7Cit9CisKKy8qIEJhc2VkIG9uIGZ0ZGlfc2lvLmMgdW50aHJvdHRsZSAqLworc3RhdGljIHZvaWQgYWlyY2FibGVfdW50aHJvdHRsZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBhaXJjYWJsZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBhY3R1YWxseV90aHJvdHRsZWQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPnJ4X2xvY2ssIGZsYWdzKTsKKwlhY3R1YWxseV90aHJvdHRsZWQgPSBwcml2LT5yeF9mbGFncyAmIEFDVFVBTExZX1RIUk9UVExFRDsKKwlwcml2LT5yeF9mbGFncyAmPSB+KFRIUk9UVExFRCB8IEFDVFVBTExZX1RIUk9UVExFRCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+cnhfbG9jaywgZmxhZ3MpOworCisJaWYgKGFjdHVhbGx5X3Rocm90dGxlZCkKKwkJc2NoZWR1bGVfd29yaygmcHJpdi0+cnhfd29yayk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgYWlyY2FibGVfZGV2aWNlID0geworCS5kZXNjcmlwdGlvbiA9CQkiYWlyY2FibGUiLAorCS5pZF90YWJsZSA9IAkJaWRfdGFibGUsCisJLm51bV9wb3J0cyA9CQkxLAorCS5hdHRhY2ggPQkJYWlyY2FibGVfYXR0YWNoLAorCS5wcm9iZSA9CQlhaXJjYWJsZV9wcm9iZSwKKwkuc2h1dGRvd24gPQkJYWlyY2FibGVfc2h1dGRvd24sCisJLndyaXRlID0JCWFpcmNhYmxlX3dyaXRlLAorCS53cml0ZV9yb29tID0JCWFpcmNhYmxlX3dyaXRlX3Jvb20sCisJLndyaXRlX2J1bGtfY2FsbGJhY2sgPQlhaXJjYWJsZV93cml0ZV9idWxrX2NhbGxiYWNrLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlhaXJjYWJsZV9yZWFkX2J1bGtfY2FsbGJhY2ssCisJLnRocm90dGxlID0JCWFpcmNhYmxlX3Rocm90dGxlLAorCS51bnRocm90dGxlID0JCWFpcmNhYmxlX3VudGhyb3R0bGUsCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYWlyY2FibGVfZHJpdmVyID0geworCS5uYW1lID0JCSJhaXJjYWJsZSIsCisJLnByb2JlID0JdXNiX3NlcmlhbF9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CXVzYl9zZXJpYWxfZGlzY29ubmVjdCwKKwkuaWRfdGFibGUgPQlpZF90YWJsZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGFpcmNhYmxlX2luaXQgKHZvaWQpCit7CisJaW50IHJldHZhbDsKKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZhaXJjYWJsZV9kZXZpY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3NlcmlhbF9yZWdpc3RlcjsKKwlyZXR2YWwgPSB1c2JfcmVnaXN0ZXIoJmFpcmNhYmxlX2RyaXZlcik7CisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfdXNiX3JlZ2lzdGVyOworCXJldHVybiAwOworCitmYWlsZWRfc2VyaWFsX3JlZ2lzdGVyOgorCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYWlyY2FibGVfZGV2aWNlKTsKK2ZhaWxlZF91c2JfcmVnaXN0ZXI6CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgX19leGl0IGFpcmNhYmxlX2V4aXQgKHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJmFpcmNhYmxlX2RyaXZlcik7CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZhaXJjYWJsZV9kZXZpY2UpOworfQorCitNT0RVTEVfQVVUSE9SKERSSVZFUl9BVVRIT1IpOworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9WRVJTSU9OKERSSVZFUl9WRVJTSU9OKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX2luaXQoYWlyY2FibGVfaW5pdCk7Cittb2R1bGVfZXhpdChhaXJjYWJsZV9leGl0KTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9haXJwcmltZS5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKaW5kZXggNjIwODI1My4uNmUxYTg0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FpcnByaW1lLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogQWlyUHJpbWUgQ0RNQSBXaXJlbGVzcyBTZXJpYWwgVVNCIGRyaXZlcgogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNSBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdraEBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAc3VzZS5kZT4KICAqCiAgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCkBAIC0xMSwyNiArMTEsMjY0IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3R0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgogCiBzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaWRfdGFibGUgW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4MGM4OCwgMHgxN2RhKSB9LCAvKiBLeW9jZXJhIFdpcmVsZXNzIEtQQzY1MC9QYXNzcG9ydCAqLwotCXsgVVNCX0RFVklDRSgweGYzZCwgMHgwMTEyKSB9LCAgLyogQWlyUHJpbWUgQ0RNQSBXaXJlbGVzcyBQQyBDYXJkICovCi0JeyBVU0JfREVWSUNFKDB4MTQxMCwgMHgxMTEwKSB9LCAvKiBOb3ZhdGVsIFdpcmVsZXNzIE1lcmxpbiBDRE1BICovCisJeyBVU0JfREVWSUNFKDB4MGYzZCwgMHgwMTEyKSB9LCAvKiBBaXJQcmltZSBDRE1BIFdpcmVsZXNzIFBDIENhcmQgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMTcpIH0sIC8qIFNpZXJyYSBXaXJlbGVzcyBFTTU2MjUgKi8KKwl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAwMTgpIH0sIC8qIFNpZXJyYSBXaXJlbGVzcyBNQzU3MjAgKi8KIAl7IFVTQl9ERVZJQ0UoMHgxMTk5LCAweDAxMTIpIH0sIC8qIFNpZXJyYSBXaXJlbGVzcyBBaXJjYXJkIDU4MCAqLwogCXsgVVNCX0RFVklDRSgweDExOTksIDB4MDIxOCkgfSwgLyogU2llcnJhIFdpcmVsZXNzIE1DNTcyMCAqLworCXsgVVNCX0RFVklDRSgweDE0MTAsIDB4MTExMCkgfSwgLyogTm92YXRlbCBXaXJlbGVzcyBNZXJsaW4gQ0RNQSAqLwogCXsgfSwKIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaWRfdGFibGUpOwogCisjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRQk0MDk2CisjZGVmaW5lIE5VTV9SRUFEX1VSQlMJCQk0CisjZGVmaW5lIE5VTV9XUklURV9VUkJTCQkJNAorI2RlZmluZSBOVU1fQlVMS19FUFMJCQkzCisjZGVmaW5lIE1BWF9CVUxLX0VQUwkJCTYKKworLyogaWYgb3ZlcnJpZGRlbiBieSB0aGUgdXNlciwgdGhlbiB1c2UgdGhlaXIgdmFsdWUgZm9yIHRoZSBzaXplIG9mIHRoZQorICogcmVhZCBhbmQgd3JpdGUgdXJicywgYW5kIHRoZSBudW1iZXIgb2YgZW5kcG9pbnRzICovCitzdGF0aWMgaW50IGJ1ZmZlcl9zaXplID0gVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFOworc3RhdGljIGludCBlbmRwb2ludHMgPSBOVU1fQlVMS19FUFM7CitzdGF0aWMgaW50IGRlYnVnOworc3RydWN0IGFpcnByaW1lX3ByaXZhdGUgeworCXNwaW5sb2NrX3QgbG9jazsKKwlpbnQgb3V0c3RhbmRpbmdfdXJiczsKKwlpbnQgdGhyb3R0bGVkOworCXN0cnVjdCB1cmIgKnJlYWRfdXJicFtOVU1fUkVBRF9VUkJTXTsKK307CisKK3N0YXRpYyB2b2lkIGFpcnByaW1lX3JlYWRfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CisJdW5zaWduZWQgY2hhciAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisJaW50IHJlc3VsdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJaWYgKHVyYi0+c3RhdHVzKSB7CisJCWRiZygiJXMgLSBub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQkvKiBzb21ldGhpbmcgaGFwcGVuZWQsIHNvIGZyZWUgdXAgdGhlIG1lbW9yeSBmb3IgdGhpcyB1cmIgKi8KKwkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQlrZnJlZSAodXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQl9CisJCXJldHVybjsKKwl9CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIHVyYi0+YWN0dWFsX2xlbmd0aCwgZGF0YSk7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKHR0eSAmJiB1cmItPmFjdHVhbF9sZW5ndGgpIHsKKwkJdHR5X2luc2VydF9mbGlwX3N0cmluZyAodHR5LCBkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCQl0dHlfZmxpcF9idWZmZXJfcHVzaCAodHR5KTsKKwl9CisKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAodXJiLCBHRlBfQVRPTUlDKTsKKwlpZiAocmVzdWx0KQorCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYWlycHJpbWVfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSB1cmItPmNvbnRleHQ7CisJc3RydWN0IGFpcnByaW1lX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogZnJlZSB1cCB0aGUgdHJhbnNmZXIgYnVmZmVyLCBhcyB1c2JfZnJlZV91cmIoKSBkb2VzIG5vdCBkbyB0aGlzICovCisJa2ZyZWUgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKworCWlmICh1cmItPnN0YXR1cykKKwkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJLS1wcml2LT5vdXRzdGFuZGluZ191cmJzOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKworCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOworfQorCitzdGF0aWMgaW50IGFpcnByaW1lX29wZW4oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGFpcnByaW1lX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJY2hhciAqYnVmZmVyID0gTlVMTDsKKwlpbnQgaTsKKwlpbnQgcmVzdWx0ID0gMDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogaW5pdGlhbGl6ZSBvdXIgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSBpZiBpdCBpc24ndCBhbHJlYWR5IGNyZWF0ZWQgKi8KKwlpZiAoIXByaXYpIHsKKwkJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghcHJpdikgeworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gb3V0OworCQl9CisJCXNwaW5fbG9ja19pbml0KCZwcml2LT5sb2NrKTsKKwkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQsIHByaXYpOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVBRF9VUkJTOyArK2kpIHsKKwkJYnVmZmVyID0ga21hbGxvYyhidWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmZmVyKSB7CisJCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIG91dCBvZiBtZW1vcnkuXG4iLAorCQkJCV9fRlVOQ1RJT05fXyk7CisJCQlyZXN1bHQgPSAtRU5PTUVNOworCQkJZ290byBlcnJvdXQ7CisJCX0KKwkJdXJiID0gdXNiX2FsbG9jX3VyYigwLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gbm8gbW9yZSB1cmJzP1xuIiwKKwkJCQlfX0ZVTkNUSU9OX18pOworCQkJcmVzdWx0ID0gLUVOT01FTTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkJICB1c2JfcmN2YnVsa3BpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkJICBidWZmZXIsIGJ1ZmZlcl9zaXplLAorCQkJCSAgYWlycHJpbWVfcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJlc3VsdCkgeworCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiICVkIGZvciBwb3J0ICVkLCBlcnJvciAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIGksIHBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwkJCWdvdG8gZXJyb3V0OworCQl9CisJCS8qIHJlbWVtYmVyIHRoaXMgdXJiIHNvIHdlIGNhbiBraWxsIGl0IHdoZW4gdGhlIHBvcnQgaXMgY2xvc2VkICovCisJCXByaXYtPnJlYWRfdXJicFtpXSA9IHVyYjsKKwl9CisJZ290byBvdXQ7CisKKyBlcnJvdXQ6CisJLyogc29tZSBlcnJvciBoYXBwZW5lZCwgY2FuY2VsIGFueSBzdWJtaXR0ZWQgdXJicyBhbmQgY2xlYW4gdXAgYW55dGhpbmcgdGhhdAorCSAgIGdvdCBhbGxvY2F0ZWQgc3VjY2Vzc2Z1bGx5ICovCisKKwlmb3IgKCA7IGkgPj0gMDsgLS1pKSB7CisJCXVyYiA9IHByaXYtPnJlYWRfdXJicFtpXTsKKwkJaWYgKHVyYikgeworCQkJLyogVGhpcyB1cmIgd2FzIHN1Ym1pdHRlZCBzdWNjZXNzZnVsbHkuIFNvIHdlIGhhdmUgdG8KKwkJCSAgIGNhbmNlbCBpdC4KKwkJCSAgIFVubGlua2luZyB0aGUgdXJiIHdpbGwgaW52b2tlIHJlYWRfYnVsa19jYWxsYmFjaygpCisJCQkgICB3aXRoIGFuIGVycm9yIHN0YXR1cywgc28gaXRzIHRyYW5zZmVyIGJ1ZmZlciB3aWxsCisJCQkgICBiZSBmcmVlZCB0aGVyZSAqLworCQkJaWYgKHVzYl91bmxpbmtfdXJiICh1cmIpICE9IC1FSU5QUk9HUkVTUykgeworCQkJCS8qIGNvbW1lbnRzIGluIGRyaXZlcnMvdXNiL2NvcmUvdXJiLmMgc2F5IHRoaXMKKwkJCQkgICBjYW4gb25seSBoYXBwZW4gaWYgdGhlIHVyYiB3YXMgbmV2ZXIgc3VibWl0dGVkLAorCQkJCSAgIG9yIGhhcyBjb21wbGV0ZWQgYWxyZWFkeS4KKwkJCQkgICBFaXRoZXIgd2F5IHdlIG1heSBoYXZlIHRvIGZyZWUgdGhlIHRyYW5zZmVyCisJCQkJICAgYnVmZmVyIGhlcmUuICovCisJCQkJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyKSB7CisJCQkJCWtmcmVlICh1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCQl1c2JfZnJlZV91cmIgKHVyYik7CisJCX0KKwl9CisKKyBvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIHZvaWQgYWlycHJpbWVfY2xvc2Uoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKiBmaWxwKQoreworCXN0cnVjdCBhaXJwcmltZV9wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOworCWludCBpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwkvKiBraWxsaW5nIHRoZSB1cmIgd2lsbCBpbnZva2UgcmVhZF9idWxrX2NhbGxiYWNrKCkgd2l0aCBhbiBlcnJvciBzdGF0dXMsCisJICAgc28gdGhlIHRyYW5zZmVyIGJ1ZmZlciB3aWxsIGJlIGZyZWVkIHRoZXJlICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9SRUFEX1VSQlM7ICsraSkgeworCQl1c2Jfa2lsbF91cmIgKHByaXYtPnJlYWRfdXJicFtpXSk7CisJCXVzYl9mcmVlX3VyYiAocHJpdi0+cmVhZF91cmJwW2ldKTsKKwl9CisKKwkvKiBmcmVlIHVwIHByaXZhdGUgc3RydWN0dXJlICovCisJa2ZyZWUgKHByaXYpOworCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0LCBOVUxMKTsKK30KKworc3RhdGljIGludCBhaXJwcmltZV93cml0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKK3sKKwlzdHJ1Y3QgYWlycHJpbWVfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgc3RhdHVzOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlpZiAocHJpdi0+b3V0c3RhbmRpbmdfdXJicyA+IE5VTV9XUklURV9VUkJTKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJZGJnKCIlcyAtIHdyaXRlIGxpbWl0IGhpdFxuIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuIDA7CisJfQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlidWZmZXIgPSBrbWFsbG9jKGNvdW50LCBHRlBfQVRPTUlDKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0FUT01JQyk7CisJaWYgKCF1cmIpIHsKKwkJZGV2X2VycigmcG9ydC0+ZGV2LCAibm8gbW9yZSBmcmVlIHVyYnNcbiIpOworCQlrZnJlZSAoYnVmZmVyKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCW1lbWNweSAoYnVmZmVyLCBidWYsIGNvdW50KTsKKworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBjb3VudCwgYnVmZmVyKTsKKworCXVzYl9maWxsX2J1bGtfdXJiKHVyYiwgc2VyaWFsLT5kZXYsCisJCQkgIHVzYl9zbmRidWxrcGlwZShzZXJpYWwtPmRldiwKKwkJCQkJICBwb3J0LT5idWxrX291dF9lbmRwb2ludEFkZHJlc3MpLAorCQkJICBidWZmZXIsIGNvdW50LAorCQkJICBhaXJwcmltZV93cml0ZV9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHN0YXR1cykgeworCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwkJY291bnQgPSBzdGF0dXM7CisJCWtmcmVlIChidWZmZXIpOworCX0gZWxzZSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCSsrcHJpdi0+b3V0c3RhbmRpbmdfdXJiczsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwkvKiB3ZSBhcmUgZG9uZSB3aXRoIHRoaXMgdXJiLCBzbyBsZXQgdGhlIGhvc3QgZHJpdmVyCisJICogcmVhbGx5IGZyZWUgaXQgd2hlbiBpdCBpcyBmaW5pc2hlZCB3aXRoIGl0ICovCisJdXNiX2ZyZWVfdXJiICh1cmIpOworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGFpcnByaW1lX2RyaXZlciA9IHsKIAkubmFtZSA9CQkiYWlycHJpbWUiLAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCi0JLm5vX2R5bmFtaWNfaWQgPSAJMSwKKwkubm9fZHluYW1pY19pZCA9CTEsCiB9OwogCiBzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIGFpcnByaW1lX2RldmljZSA9IHsKQEAgLTQyLDEzICsyODAsMTcgQEAKIAkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX2luID0JCU5VTV9ET05UX0NBUkUsCiAJLm51bV9idWxrX291dCA9CQlOVU1fRE9OVF9DQVJFLAotCS5udW1fcG9ydHMgPQkJMSwKKwkub3BlbiA9CQkJYWlycHJpbWVfb3BlbiwKKwkuY2xvc2UgPQkJYWlycHJpbWVfY2xvc2UsCisJLndyaXRlID0JCWFpcnByaW1lX3dyaXRlLAogfTsKIAogc3RhdGljIGludCBfX2luaXQgYWlycHJpbWVfaW5pdCh2b2lkKQogewogCWludCByZXR2YWw7CiAKKwlhaXJwcmltZV9kZXZpY2UubnVtX3BvcnRzID0KKwkJKGVuZHBvaW50cyA+IDAgJiYgZW5kcG9pbnRzIDw9IE1BWF9CVUxLX0VQUykgPyBlbmRwb2ludHMgOiBOVU1fQlVMS19FUFM7CiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmYWlycHJpbWVfZGV2aWNlKTsKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwpAQCAtNjAsNiArMzAyLDggQEAKIAogc3RhdGljIHZvaWQgX19leGl0IGFpcnByaW1lX2V4aXQodm9pZCkKIHsKKwlkYmcoIiVzIiwgX19GVU5DVElPTl9fKTsKKwogCXVzYl9kZXJlZ2lzdGVyKCZhaXJwcmltZV9kcml2ZXIpOwogCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmYWlycHJpbWVfZGV2aWNlKTsKIH0KQEAgLTY3LDMgKzMxMSwxMCBAQAogbW9kdWxlX2luaXQoYWlycHJpbWVfaW5pdCk7CiBtb2R1bGVfZXhpdChhaXJwcmltZV9leGl0KTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCIpOworbW9kdWxlX3BhcmFtKGJ1ZmZlcl9zaXplLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhidWZmZXJfc2l6ZSwgIlNpemUgb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcnMgaW4gYnl0ZXMgKGRlZmF1bHQgNDA5NikiKTsKK21vZHVsZV9wYXJhbShlbmRwb2ludHMsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGVuZHBvaW50cywgIk51bWJlciBvZiBidWxrIEVQcyB0byBjb25maWd1cmUgKGRlZmF1bHQgMykiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvYXJrMzExNi5jCmluZGV4IDk3MGQ5ZWYuLmNhNTJmMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9hcmszMTE2LmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2FyazMxMTYuYwpAQCAtMSw0ICsxLDcgQEAKIC8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYKKyAqICAgU2ltb24gU2NodWx6IChhcmszMTE2X2RyaXZlciA8YXQ+IGF1Y3Rpb25hbnQuZGUpCisgKgogICogYXJrMzExNgogICogLSBpbXBsZW1lbnRzIGEgZHJpdmVyIGZvciB0aGUgYXJrbWljcm8gYXJrMzExNiBjaGlwc2V0ICh2ZW5kb3I9MHg2NTQ3LAogICogICBwcm9kdWN0aWQ9MHgwMjMyKSAodXNlZCBpbiBhIGRhdGFjYWJsZSBjYWxsZWQgS1EtVThBKQpAQCAtOCw4ICsxMSw2IEBACiAgKgogICogIC0gYmFzZWQgb24gbG9ncyBjcmVhdGVkIGJ5IHVzYnNub29weQogICoKLSAqICBBdXRob3IgICA6IFNpbW9uIFNjaHVseiBbYXJrMzExNl9kcml2ZXI8QVQ+YXVjdGlvbmFudC5kZV0KLSAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCiAgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyCkBAIC0yMiw2ICsyMyw4IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIAogc3RhdGljIGludCBkZWJ1ZzsKQEAgLTQzLDEwICs0NiwxMCBAQAogewogCWludCByZXN1bHQ7CiAJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAotCQkJCSB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsMCksCisJCQkJIHVzYl9zbmRjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQkJIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCi0JCQkJIE5VTEwsMHgwMCwgMTAwMCk7Ci0JZGJnKCIlMDNkID4gb2siLHNlcSk7CisJCQkJIE5VTEwsIDB4MDAsIDEwMDApOworCWRiZygiJTAzZCA+IG9rIiwgc2VxKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIEFSSzMxMTZfUkNWKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwsIGludCBzZXEsCkBAIC01NiwyNyArNTksMjUgQEAKIHsKIAlpbnQgcmVzdWx0OwogCXJlc3VsdCA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwwKSwKLQkJCSAgICAgIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCi0JCQkgICAgICBidWYsIDB4MDAwMDAwMSwgMTAwMCk7CisJCQkJIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkJIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCisJCQkJIGJ1ZiwgMHgwMDAwMDAxLCAxMDAwKTsKIAlpZiAocmVzdWx0KQotCQlkYmcoIiUwM2QgPCAlZCBieXRlcyBbMHglMDJYXSIsc2VxLCByZXN1bHQsIGJ1ZlswXSk7CisJCWRiZygiJTAzZCA8ICVkIGJ5dGVzIFsweCUwMlhdIiwgc2VxLCByZXN1bHQsIGJ1ZlswXSk7CiAJZWxzZQogCQlkYmcoIiUwM2QgPCAwIGJ5dGVzIiwgc2VxKTsKIH0KIAotCiBzdGF0aWMgaW5saW5lIHZvaWQgQVJLMzExNl9SQ1ZfUVVJRVQoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKIAkJCQkgICAgIF9fdTggcmVxdWVzdCwgX191OCByZXF1ZXN0dHlwZSwKIAkJCQkgICAgIF9fdTE2IHZhbHVlLCBfX3UxNiBpbmRleCwgY2hhciAqYnVmKQogewogCXVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwKLQkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwwKSwKKwkJCXVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCiAJCQlyZXF1ZXN0LCByZXF1ZXN0dHlwZSwgdmFsdWUsIGluZGV4LAogCQkJYnVmLCAweDAwMDAwMDEsIDEwMDApOwogfQogCi0KIHN0YXRpYyBpbnQgYXJrMzExNl9hdHRhY2goc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAljaGFyICpidWY7CkBAIC04NCwxMCArODUsMTAgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBzZXJpYWwtPm51bV9wb3J0czsgKytpKSB7Ci0JCXByaXYgPSBrbWFsbG9jIChzaXplb2YgKHN0cnVjdCBhcmszMTE2X3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKKwkJcHJpdiA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgYXJrMzExNl9wcml2YXRlKSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghcHJpdikKIAkJCWdvdG8gY2xlYW51cDsKLQkJbWVtc2V0IChwcml2LCAweDAwLCBzaXplb2YgKHN0cnVjdCBhcmszMTE2X3ByaXZhdGUpKTsKKwkJbWVtc2V0KHByaXYsIDB4MDAsIHNpemVvZiAoc3RydWN0IGFyazMxMTZfcHJpdmF0ZSkpOwogCQlzcGluX2xvY2tfaW5pdCgmcHJpdi0+bG9jayk7CiAKIAkJdXNiX3NldF9zZXJpYWxfcG9ydF9kYXRhKHNlcmlhbC0+cG9ydFtpXSwgcHJpdik7CkBAIC05NSw2MyArOTYsNjIgQEAKIAogCWJ1ZiA9IGttYWxsb2MoMSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKLQkJZGJnKCJlcnJvciBrbWFsbG9jIC0+IG91dCBvZiBtZW0gPyIpOworCQlkYmcoImVycm9yIGttYWxsb2MgLT4gb3V0IG9mIG1lbT8iKTsKIAkJZ290byBjbGVhbnVwOwogCX0KIAogCS8qIDMgKi8KLQlBUkszMTE2X1NORChzZXJpYWwsIDMsMHhGRSwweDQwLDB4MDAwOCwweDAwMDIpOwotCUFSSzMxMTZfU05EKHNlcmlhbCwgNCwweEZFLDB4NDAsMHgwMDA4LDB4MDAwMSk7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLCA1LDB4RkUsMHg0MCwweDAwMDAsMHgwMDA4KTsKLQlBUkszMTE2X1NORChzZXJpYWwsIDYsMHhGRSwweDQwLDB4MDAwMCwweDAwMEIpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMywgMHhGRSwgMHg0MCwgMHgwMDA4LCAweDAwMDIpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgNCwgMHhGRSwgMHg0MCwgMHgwMDA4LCAweDAwMDEpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgNSwgMHhGRSwgMHg0MCwgMHgwMDAwLCAweDAwMDgpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgNiwgMHhGRSwgMHg0MCwgMHgwMDAwLCAweDAwMEIpOwogCiAJLyogPC0tIHNlcTcgKi8KLQlBUkszMTE2X1JDVihzZXJpYWwsIDcsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsIDB4MDAsIGJ1Zik7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLCA4LDB4RkUsMHg0MCwweDAwODAsMHgwMDAzKTsKLQlBUkszMTE2X1NORChzZXJpYWwsIDksMHhGRSwweDQwLDB4MDAxQSwweDAwMDApOwotCUFSSzMxMTZfU05EKHNlcmlhbCwxMCwweEZFLDB4NDAsMHgwMDAwLDB4MDAwMSk7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLDExLDB4RkUsMHg0MCwweDAwMDAsMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsICA3LCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwMywgMHgwMCwgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsICA4LCAweEZFLCAweDQwLCAweDAwODAsIDB4MDAwMyk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAgOSwgMHhGRSwgMHg0MCwgMHgwMDFBLCAweDAwMDApOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTAsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDExLCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwMyk7CiAKIAkvKiA8LS0gc2VxMTIgKi8KLQlBUkszMTE2X1JDVihzZXJpYWwsMTIsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDAsIGJ1Zik7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLDEzLDB4RkUsMHg0MCwweDAwMDAsMHgwMDA0KTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDEyLCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwNCwgMHgwMCwgYnVmKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDEzLCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwNCk7CiAKIAkvKiAxNCAqLwotCUFSSzMxMTZfUkNWKHNlcmlhbCwxNCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMCwgYnVmKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTUsMHhGRSwweDQwLDB4MDAwMCwweDAwMDQpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTQsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA0LCAweDAwLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTUsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDA0KTsKIAogCS8qIDE2ICovCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDE2LDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAwLCBidWYpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTYsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA0LCAweDAwLCBidWYpOwogCS8qIC0tPiBzZXExNyAqLwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNywweEZFLDB4NDAsMHgwMDAxLDB4MDAwNCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNywgMHhGRSwgMHg0MCwgMHgwMDAxLCAweDAwMDQpOwogCiAJLyogPC0tIHNlcTE4ICovCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDE4LDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAxLCBidWYpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTgsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA0LCAweDAxLCBidWYpOwogCiAJLyogLS0+IHNlcTE5ICovCi0JQVJLMzExNl9TTkQoc2VyaWFsLDE5LDB4RkUsMHg0MCwweDAwMDMsMHgwMDA0KTsKLQorCUFSSzMxMTZfU05EKHNlcmlhbCwgMTksIDB4RkUsIDB4NDAsIDB4MDAwMywgMHgwMDA0KTsKIAogCS8qIDwtLSBzZXEyMCAqLwotCS8qIHNlZW1zIGxpa2Ugc2VyaWFsIHBvcnQgc3RhdHVzIGluZm8gKFJUUywgQ1RTLC4uLikgKi8KLQkvKiByZXR1cm5zIG1vZGVtIGNvbnRyb2wgbGluZSBzdGF0dXMgPyEgKi8KLQlBUkszMTE2X1JDVihzZXJpYWwsMjAsMHhGRSwweEMwLDB4MDAwMCwweDAwMDYsIDB4RkYsIGJ1Zik7CisJLyogc2VlbXMgbGlrZSBzZXJpYWwgcG9ydCBzdGF0dXMgaW5mbyAoUlRTLCBDVFMsIC4uLikgKi8KKwkvKiByZXR1cm5zIG1vZGVtIGNvbnRyb2wgbGluZSBzdGF0dXM/ISAqLworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMjAsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA2LCAweEZGLCBidWYpOwogCi0JLyogc2V0IDk2MDAgYmF1ZCAmIGRvIHNvbWUgaW5pdCA/ISAqLwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNDcsMHhGRSwweDQwLDB4MDA4MywweDAwMDMpOwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNDgsMHhGRSwweDQwLDB4MDAzOCwweDAwMDApOwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNDksMHhGRSwweDQwLDB4MDAwMSwweDAwMDEpOwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNTAsMHhGRSwweDQwLDB4MDAwMywweDAwMDMpOwotCUFSSzMxMTZfUkNWKHNlcmlhbCwxNTEsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsMHgwMywgYnVmKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTUyLDB4RkUsMHg0MCwweDAwMDAsMHgwMDAzKTsKLQlBUkszMTE2X1JDVihzZXJpYWwsMTUzLDB4RkUsMHhDMCwweDAwMDAsMHgwMDAzLDB4MDAsIGJ1Zik7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLDE1NCwweEZFLDB4NDAsMHgwMDAzLDB4MDAwMyk7CisJLyogc2V0IDk2MDAgYmF1ZCAmIGRvIHNvbWUgaW5pdD8hICovCisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNDcsIDB4RkUsIDB4NDAsIDB4MDA4MywgMHgwMDAzKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDE0OCwgMHhGRSwgMHg0MCwgMHgwMDM4LCAweDAwMDApOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTQ5LCAweEZFLCAweDQwLCAweDAwMDEsIDB4MDAwMSk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNTAsIDB4RkUsIDB4NDAsIDB4MDAwMywgMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDE1MSwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDQsIDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNTIsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDE1MywgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDMsIDB4MDAsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNTQsIDB4RkUsIDB4NDAsIDB4MDAwMywgMHgwMDAzKTsKIAogCWtmcmVlKGJ1Zik7Ci0JcmV0dXJuKDApOworCXJldHVybiAwOwogCiBjbGVhbnVwOgotCWZvciAoLS1pOyBpPj0wOyAtLWkpCisJZm9yICgtLWk7IGkgPj0gMDsgLS1pKQogCQl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0W2ldLCBOVUxMKTsKIAlyZXR1cm4gLUVOT01FTTsKIH0KQEAgLTE4MCw3ICsxODAsOCBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJaWYgKCFwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkKSB7CiAJCSoocG9ydC0+dHR5LT50ZXJtaW9zKSA9IHR0eV9zdGRfdGVybWlvczsKLQkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwgQ0xPQ0FMOworCQlwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWcgPSBCOTYwMCB8IENTOAorCQkJCQkgICAgICB8IENSRUFEIHwgSFVQQ0wgfCBDTE9DQUw7CiAJCXByaXYtPnRlcm1pb3NfaW5pdGlhbGl6ZWQgPSAxOwogCX0KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0yMDQsOCArMjA1LDggQEAKIAl9CiAKIAkvKiBzZXQgZGF0YSBiaXQgY291bnQgKDgvNy82LzUpICovCi0JaWYgKGNmbGFnICYgQ1NJWkUpewotCQlzd2l0Y2ggKGNmbGFnICYgQ1NJWkUpeworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgewogCQljYXNlIENTNToKIAkJCWNvbmZpZyB8PSAweDAwOwogCQkJZGJnKCJzZXR0aW5nIENTNSIpOwpAQCAtMjE5LDcgKzIyMCw4IEBACiAJCQlkYmcoInNldHRpbmcgQ1M3Iik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWVyciAoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4LCB1c2luZyBDUzghIik7CisJCQllcnIoIkNTSVpFIHdhcyBzZXQgYnV0IG5vdCBDUzUtQ1M4LCB1c2luZyBDUzghIik7CisJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBDUzg6CiAJCQljb25maWcgfD0gMHgwMzsKIAkJCWRiZygic2V0dGluZyBDUzgiKTsKQEAgLTIyNyw4ICsyMjksOCBAQAogCQl9CiAJfQogCi0JLyogc2V0IHBhcml0eSAoTk9ORSxFVkVOLE9ERCkgKi8KLQlpZiAoY2ZsYWcgJiBQQVJFTkIpeworCS8qIHNldCBwYXJpdHkgKE5PTkUvRVZFTi9PREQpICovCisJaWYgKGNmbGFnICYgUEFSRU5CKSB7CiAJCWlmIChjZmxhZyAmIFBBUk9ERCkgewogCQkJY29uZmlnIHw9IDB4MDg7CiAJCQlkYmcoInNldHRpbmcgcGFyaXR5IHRvIE9ERCIpOwpAQCAtMjQwLDIwICsyNDIsMTkgQEAKIAkJZGJnKCJzZXR0aW5nIHBhcml0eSB0byBOT05FIik7CiAJfQogCi0JLyogU0VUIFNUT1BCSVQgKDEvMikgKi8KKwkvKiBzZXQgc3RvcCBiaXQgKDEvMikgKi8KIAlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKIAkJY29uZmlnIHw9IDB4MDQ7Ci0JCWRiZyAoInNldHRpbmcgMiBzdG9wIGJpdHMiKTsKKwkJZGJnKCJzZXR0aW5nIDIgc3RvcCBiaXRzIik7CiAJfSBlbHNlIHsKLQkJZGJnICgic2V0dGluZyAxIHN0b3AgYml0Iik7CisJCWRiZygic2V0dGluZyAxIHN0b3AgYml0Iik7CiAJfQogCi0KLQkvKiBzZXQgYmF1ZHJhdGU6ICovCisJLyogc2V0IGJhdWRyYXRlICovCiAJYmF1ZCA9IDA7Ci0Jc3dpdGNoIChjZmxhZyAmIENCQVVEKXsKKwlzd2l0Y2ggKGNmbGFnICYgQ0JBVUQpIHsKIAkJY2FzZSBCMDoKLQkJCWVycigiY2FuJ3Qgc2V0IDBiYXVkLCB1c2luZyA5NjAwIGluc3RlYWQiKTsKKwkJCWVycigiY2FuJ3Qgc2V0IDAgYmF1ZCwgdXNpbmcgOTYwMCBpbnN0ZWFkIik7CiAJCQlicmVhazsKIAkJY2FzZSBCNzU6CWJhdWQgPSA3NTsJYnJlYWs7CiAJCWNhc2UgQjE1MDoJYmF1ZCA9IDE1MDsJYnJlYWs7CkBAIC0yODUsMzggKzI4Niw0MCBAQAogCSAqLwogCWlmIChiYXVkID09IDQ2MDgwMCkKIAkJLyogc3RyYW5nZSwgZm9yIDQ2MDgwMCB0aGUgZm9ybXVsYSBpcyB3cm9uZwotCQkgKiAoZG9udCB1c2Ugcm91bmQoKSwgdGhlbiA5NjAwYmF1ZCBpcyB3cm9uZykgKi8KKwkJICogaWYgdXNpbmcgcm91bmQoKSB0aGVuIDk2MDBiYXVkIGlzIHdyb25nKSAqLwogCQlhcmszMTE2X2JhdWQgPSA3OwogCWVsc2UKIAkJYXJrMzExNl9iYXVkID0gMzAwMDAwMCAvIGJhdWQ7CiAKIAkvKiA/ICovCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDAsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsIDB4MDMsIGJ1Zik7CisJQVJLMzExNl9SQ1Yoc2VyaWFsLCAwLCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwMywgMHgwMywgYnVmKTsKKwogCS8qIG9mZnNldCA9IGJ1ZlswXTsgKi8KIAkvKiBvZmZzZXQgPSAweDAzOyAqLwotCS8qIGRiZygidXNpbmcgMHglMDRYIGFzIHRhcmdldCBmb3IgMHgwMDAzOiIsMHgwMDgwK29mZnNldCk7ICovCi0KKwkvKiBkYmcoInVzaW5nIDB4JTA0WCBhcyB0YXJnZXQgZm9yIDB4MDAwMzoiLCAweDAwODAgKyBvZmZzZXQpOyAqLwogCiAJLyogc2V0IGJhdWRyYXRlICovCi0JZGJnKCJzZXR0aW5nIGJhdWRyYXRlIHRvICVkICgtPnJlZz0lZCkiLGJhdWQsYXJrMzExNl9iYXVkKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTQ3LDB4RkUsMHg0MCwweDAwODMsMHgwMDAzKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTQ4LDB4RkUsMHg0MCwoYXJrMzExNl9iYXVkICYgMHgwMEZGKSAgICwweDAwMDApOwotCUFSSzMxMTZfU05EKHNlcmlhbCwxNDksMHhGRSwweDQwLChhcmszMTE2X2JhdWQgJiAweEZGMDApPj44LDB4MDAwMSk7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLDE1MCwweEZFLDB4NDAsMHgwMDAzLDB4MDAwMyk7CisJZGJnKCJzZXR0aW5nIGJhdWRyYXRlIHRvICVkICgtPnJlZz0lZCkiLCBiYXVkLCBhcmszMTE2X2JhdWQpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTQ3LCAweEZFLCAweDQwLCAweDAwODMsIDB4MDAwMyk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNDgsIDB4RkUsIDB4NDAsCisJCQkgICAgKGFyazMxMTZfYmF1ZCAmIDB4MDBGRiksIDB4MDAwMCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNDksIDB4RkUsIDB4NDAsCisJCQkgICAgKGFyazMxMTZfYmF1ZCAmIDB4RkYwMCkgPj4gOCwgMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDE1MCwgMHhGRSwgMHg0MCwgMHgwMDAzLCAweDAwMDMpOwogCiAJLyogPyAqLwotCUFSSzMxMTZfUkNWKHNlcmlhbCwxNTEsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsMHgwMywgYnVmKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTUyLDB4RkUsMHg0MCwweDAwMDAsMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDE1MSwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDQsIDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNTIsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDAzKTsKIAogCS8qIHNldCBkYXRhIGJpdCBjb3VudCwgc3RvcCBiaXQgY291bnQgJiBwYXJpdHk6ICovCiAJZGJnKCJ1cGRhdGluZyBiaXQgY291bnQsIHN0b3AgYml0IG9yIHBhcml0eSAoY2ZnPTB4JTAyWCkiLCBjb25maWcpOwotCUFSSzMxMTZfUkNWKHNlcmlhbCwxNTMsMHhGRSwweEMwLDB4MDAwMCwweDAwMDMsMHgwMCwgYnVmKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTU0LDB4RkUsMHg0MCxjb25maWcsMHgwMDAzKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDE1MywgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDMsIDB4MDAsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxNTQsIDB4RkUsIDB4NDAsIGNvbmZpZywgMHgwMDAzKTsKIAogCWlmIChjZmxhZyAmIENSVFNDVFMpCi0JCWRiZygiQ1JUU0NUUyBub3Qgc3VwcG9ydGVkIGJ5IGNoaXBzZXQgPyEiKTsKKwkJZGJnKCJDUlRTQ1RTIG5vdCBzdXBwb3J0ZWQgYnkgY2hpcHNldD8hIik7CiAKLQkvKiBURVNUIEFSSzMxMTZfU05EKDE1NCwweEZFLDB4NDAsMHhGRkZGLCAweDAwMDYpOyAqLworCS8qIFRFU1QgQVJLMzExNl9TTkQoMTU0LCAweEZFLCAweDQwLCAweEZGRkYsIDB4MDAwNik7ICovCiAKIAlrZnJlZShidWYpOwogCXJldHVybjsKQEAgLTMyOSwxMSArMzMyLDExIEBACiAJY2hhciAqYnVmOwogCWludCByZXN1bHQgPSAwOwogCi0JZGJnKCIlcyAtICBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCiAJYnVmID0ga21hbGxvYygxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikgewotCQlkYmcoImVycm9yIGttYWxsb2MgLT4gb3V0IG9mIG1lbSA/Iik7CisJCWRiZygiZXJyb3Iga21hbGxvYyAtPiBvdXQgb2YgbWVtPyIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTM0Miw0NCArMzQ1LDY4IEBACiAJCXJldHVybiByZXN1bHQ7CiAKIAkvKiBvcGVuICovCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDExMSwweEZFLDB4QzAsMHgwMDAwLDB4MDAwMywgMHgwMiwgYnVmKTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDExMSwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDMsIDB4MDIsIGJ1Zik7CiAKLQlBUkszMTE2X1NORChzZXJpYWwsMTEyLDB4RkUsMHg0MCwweDAwODIsMHgwMDAzKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTEzLDB4RkUsMHg0MCwweDAwMUEsMHgwMDAwKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTE0LDB4RkUsMHg0MCwweDAwMDAsMHgwMDAxKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTE1LDB4RkUsMHg0MCwweDAwMDIsMHgwMDAzKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDExMiwgMHhGRSwgMHg0MCwgMHgwMDgyLCAweDAwMDMpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTEzLCAweEZFLCAweDQwLCAweDAwMUEsIDB4MDAwMCk7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxMTQsIDB4RkUsIDB4NDAsIDB4MDAwMCwgMHgwMDAxKTsKKwlBUkszMTE2X1NORChzZXJpYWwsIDExNSwgMHhGRSwgMHg0MCwgMHgwMDAyLCAweDAwMDMpOwogCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDExNiwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNCwgMHgwMywgYnVmKTsKLQlBUkszMTE2X1NORChzZXJpYWwsMTE3LDB4RkUsMHg0MCwweDAwMDIsMHgwMDA0KTsKKwlBUkszMTE2X1JDVihzZXJpYWwsIDExNiwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDQsIDB4MDMsIGJ1Zik7CisJQVJLMzExNl9TTkQoc2VyaWFsLCAxMTcsIDB4RkUsIDB4NDAsIDB4MDAwMiwgMHgwMDA0KTsKIAotCUFSSzMxMTZfUkNWKHNlcmlhbCwxMTgsMHhGRSwweEMwLDB4MDAwMCwweDAwMDQsIDB4MDIsIGJ1Zik7Ci0JQVJLMzExNl9TTkQoc2VyaWFsLDExOSwweEZFLDB4NDAsMHgwMDAwLDB4MDAwNCk7CisJQVJLMzExNl9SQ1Yoc2VyaWFsLCAxMTgsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA0LCAweDAyLCBidWYpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTE5LCAweEZFLCAweDQwLCAweDAwMDAsIDB4MDAwNCk7CiAKLQlBUkszMTE2X1JDVihzZXJpYWwsMTIwLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAwLCBidWYpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTIwLCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwNCwgMHgwMCwgYnVmKTsKIAotCUFSSzMxMTZfU05EKHNlcmlhbCwxMjEsMHhGRSwweDQwLDB4MDAwMSwweDAwMDQpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTIxLCAweEZFLCAweDQwLCAweDAwMDEsIDB4MDAwNCk7CiAKLQlBUkszMTE2X1JDVihzZXJpYWwsMTIyLDB4RkUsMHhDMCwweDAwMDAsMHgwMDA0LCAweDAxLCBidWYpOworCUFSSzMxMTZfUkNWKHNlcmlhbCwgMTIyLCAweEZFLCAweEMwLCAweDAwMDAsIDB4MDAwNCwgMHgwMSwgYnVmKTsKIAotCUFSSzMxMTZfU05EKHNlcmlhbCwxMjMsMHhGRSwweDQwLDB4MDAwMywweDAwMDQpOworCUFSSzMxMTZfU05EKHNlcmlhbCwgMTIzLCAweEZFLCAweDQwLCAweDAwMDMsIDB4MDAwNCk7CiAKLQkvKiByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgKGNvbnRyb2wgbGluZXMgPyEpICovCi0JQVJLMzExNl9SQ1Yoc2VyaWFsLDEyNCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNiwgMHhGRiwgYnVmKTsKKwkvKiByZXR1cm5zIGRpZmZlcmVudCB2YWx1ZXMgKGNvbnRyb2wgbGluZXM/ISkgKi8KKwlBUkszMTE2X1JDVihzZXJpYWwsIDEyNCwgMHhGRSwgMHhDMCwgMHgwMDAwLCAweDAwMDYsIDB4RkYsIGJ1Zik7CiAKLQkvKiBpbml0aWFsaXNlIHRlcm1pb3M6ICovCisJLyogaW5pdGlhbGlzZSB0ZXJtaW9zICovCiAJaWYgKHBvcnQtPnR0eSkKIAkJYXJrMzExNl9zZXRfdGVybWlvcyhwb3J0LCAmdG1wX3Rlcm1pb3MpOwogCiAJa2ZyZWUoYnVmKTsKIAogCXJldHVybiByZXN1bHQ7Ci0KIH0KIAogc3RhdGljIGludCBhcmszMTE2X2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAogCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewotCWRiZygiaW9jdGwgbm90IHN1cHBvcnRlZCB5ZXQuLi4iKTsKKwlzdHJ1Y3Qgc2VyaWFsX3N0cnVjdCBzZXJzdHJ1Y3Q7CisJdm9pZCBfX3VzZXIgKnVzZXJfYXJnID0gKHZvaWQgX191c2VyICopYXJnOworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFRJT0NHU0VSSUFMOgorCQkvKiBYWFg6IFNvbWUgb2YgdGhlc2UgdmFsdWVzIGFyZSBwcm9iYWJseSB3cm9uZy4gKi8KKwkJbWVtc2V0KCZzZXJzdHJ1Y3QsIDAsIHNpemVvZiAoc2Vyc3RydWN0KSk7CisJCXNlcnN0cnVjdC50eXBlID0gUE9SVF8xNjY1NDsKKwkJc2Vyc3RydWN0LmxpbmUgPSBwb3J0LT5zZXJpYWwtPm1pbm9yOworCQlzZXJzdHJ1Y3QucG9ydCA9IHBvcnQtPm51bWJlcjsKKwkJc2Vyc3RydWN0LmN1c3RvbV9kaXZpc29yID0gMDsKKwkJc2Vyc3RydWN0LmJhdWRfYmFzZSA9IDQ2MDgwMDsKKworCQlpZiAoY29weV90b191c2VyKHVzZXJfYXJnLCAmc2Vyc3RydWN0LCBzaXplb2YgKHNlcnN0cnVjdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmV0dXJuIDA7CisJY2FzZSBUSU9DU1NFUklBTDoKKwkJaWYgKGNvcHlfZnJvbV91c2VyKCZzZXJzdHJ1Y3QsIHVzZXJfYXJnLCBzaXplb2YgKHNlcnN0cnVjdCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCWRiZygiJXMgY21kIDB4JTA0eCBub3Qgc3VwcG9ydGVkIiwgX19GVU5DVElPTl9fLCBjbWQpOworCQlicmVhazsKKwl9CisKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCkBAIC0zODksNyArNDE2LDcgQEAKIAljaGFyICpidWY7CiAJY2hhciB0ZW1wOwogCi0JLyogc2VlbXMgbGlrZSBzZXJpYWwgcG9ydCBzdGF0dXMgaW5mbyAoUlRTLCBDVFMsLi4uKSBpcyBzdG9yZWQKKwkvKiBzZWVtcyBsaWtlIHNlcmlhbCBwb3J0IHN0YXR1cyBpbmZvIChSVFMsIENUUywgLi4uKSBpcyBzdG9yZWQKIAkgKiBpbiByZWcoPykgMHgwMDA2CiAJICogcGNiIGNvbm5lY3Rpb24gcG9pbnQgMTEgPSBHTkQgLT4gc2V0cyBiaXQ0IG9mIHJlc3BvbnNlCiAJICogcGNiIGNvbm5lY3Rpb24gcG9pbnQgIDcgPSBHTkQgLT4gc2V0cyBiaXQ2IG9mIHJlc3BvbnNlCkBAIC00MDEsMTYgKzQyOCwxNiBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQkvKiByZWFkIHJlZ2lzdGVyOiAqLwotCUFSSzMxMTZfUkNWX1FVSUVUKHNlcmlhbCwweEZFLDB4QzAsMHgwMDAwLDB4MDAwNixidWYpOworCS8qIHJlYWQgcmVnaXN0ZXIgKi8KKwlBUkszMTE2X1JDVl9RVUlFVChzZXJpYWwsIDB4RkUsIDB4QzAsIDB4MDAwMCwgMHgwMDA2LCBidWYpOwogCXRlbXAgPSBidWZbMF07CiAJa2ZyZWUoYnVmKTsKIAotCS8qIGkgZG8gbm90IHJlYWxseSBrbm93IGlmIGJpdDQ9Q1RTIGFuZCBiaXQ2PURTUi4uLiB3YXMganVzdCBhCi0JICogcXVpY2sgZ3Vlc3MgISEKKwkvKiBpIGRvIG5vdCByZWFsbHkga25vdyBpZiBiaXQ0PUNUUyBhbmQgYml0Nj1EU1IuLi4ganVzdCBhCisJICogcXVpY2sgZ3Vlc3MhCiAJICovCi0JcmV0dXJuICAodGVtcCAmICgxPDw0KSA/IFRJT0NNX0NUUyA6IDApIHwKLQkgICAgICAgICh0ZW1wICYgKDE8PDYpID8gVElPQ01fRFNSIDogMCk7CisJcmV0dXJuICh0ZW1wICYgKDE8PDQpID8gVElPQ01fQ1RTIDogMCkKKwkgICAgICAgfCAodGVtcCAmICgxPDw2KSA/IFRJT0NNX0RTUiA6IDApOwogfQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgYXJrMzExNl9kcml2ZXIgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3liZXJqYWNrLmMKaW5kZXggNjI4NmFiYS4uZDk1NGVjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5YmVyamFjay5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeWJlcmphY2suYwpAQCAtMjE0LDE0ICsyMTQsMTQgQEAKIAkJcmV0dXJuICgwKTsKIAl9CiAKLQlzcGluX2xvY2soJnBvcnQtPmxvY2spOworCXNwaW5fbG9ja19iaCgmcG9ydC0+bG9jayk7CiAJaWYgKHBvcnQtPndyaXRlX3VyYl9idXN5KSB7Ci0JCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmxvY2spOwogCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXBvcnQtPndyaXRlX3VyYl9idXN5ID0gMTsKLQlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmxvY2spOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9jeXByZXNzX204LmMKaW5kZXggZWU3MGZkZC4uZTExNzNjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2N5cHJlc3NfbTguYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvY3lwcmVzc19tOC5jCkBAIC0xMjksNiArMTI5LDkgQEAKIAlpbnQgY21kX2N0cmw7CQkJICAgLyogYWx3YXlzIHNldCB0aGlzIHRvIDEgYmVmb3JlIGlzc3VpbmcgYSBjb21tYW5kICovCiAJc3RydWN0IGN5cHJlc3NfYnVmICpidWY7CSAgIC8qIHdyaXRlIGJ1ZmZlciAqLwogCWludCB3cml0ZV91cmJfaW5fdXNlOwkJICAgLyogd3JpdGUgdXJiIGluIHVzZSBpbmRpY2F0b3IgKi8KKwlpbnQgd3JpdGVfdXJiX2ludGVydmFsOyAgICAgICAgICAgIC8qIGludGVydmFsIHRvIHVzZSBmb3Igd3JpdGUgdXJiICovCisJaW50IHJlYWRfdXJiX2ludGVydmFsOyAgICAgICAgICAgICAvKiBpbnRlcnZhbCB0byB1c2UgZm9yIHJlYWQgdXJiICovCisJaW50IGNvbW1faXNfb2s7ICAgICAgICAgICAgICAgICAgICAvKiB0cnVlIGlmIGNvbW11bmljYXRpb24gaXMgKHN0aWxsKSBvayAqLwogCWludCB0ZXJtaW9zX2luaXRpYWxpemVkOwogCV9fdTggbGluZV9jb250cm9sOwkgICAJICAgLyogaG9sZHMgZHRyIC8gcnRzIHZhbHVlICovCiAJX191OCBjdXJyZW50X3N0YXR1czsJICAgCSAgIC8qIHJlY2VpdmVkIGZyb20gbGFzdCByZWFkIC0gaW5mbyBvbiBkc3IsY3RzLGNkLHJpLGV0YyAqLwpAQCAtMTY4LDYgKzE3MSw3IEBACiBzdGF0aWMgaW50ICBjeXByZXNzX2NoYXJzX2luX2J1ZmZlcgkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBjeXByZXNzX3Rocm90dGxlCQkoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7CiBzdGF0aWMgdm9pZCBjeXByZXNzX3VudGhyb3R0bGUJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKK3N0YXRpYyB2b2lkIGN5cHJlc3Nfc2V0X2RlYWQJCShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKIHN0YXRpYyB2b2lkIGN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIHZvaWQgY3lwcmVzc193cml0ZV9pbnRfY2FsbGJhY2sJKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogLyogYmF1ZCBoZWxwZXIgZnVuY3Rpb25zICovCkBAIC0yODgsNiArMjkyLDkgQEAKIAkKIAlwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCisJaWYgKCFwcml2LT5jb21tX2lzX29rKQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCXN3aXRjaChjeXByZXNzX3JlcXVlc3RfdHlwZSkgewogCQljYXNlIENZUFJFU1NfU0VUX0NPTkZJRzoKIApAQCAtMzY1LDEzICszNzIsMTIgQEAKIAkJCQlpZiAodHJpZXMrKyA+PSAzKQogCQkJCQlicmVhazsKIAotCQkJCWlmIChyZXR2YWwgPT0gRVBJUEUpCi0JCQkJCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCAweDAwKTsKLQkJCX0gd2hpbGUgKHJldHZhbCAhPSA4ICYmIHJldHZhbCAhPSBFTk9ERVYpOworCQkJfSB3aGlsZSAocmV0dmFsICE9IDggJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCi0JCQlpZiAocmV0dmFsICE9IDgpCisJCQlpZiAocmV0dmFsICE9IDgpIHsKIAkJCQllcnIoIiVzIC0gZmFpbGVkIHNlbmRpbmcgc2VyaWFsIGxpbmUgc2V0dGluZ3MgLSAlZCIsIF9fRlVOQ1RJT05fXywgcmV0dmFsKTsKLQkJCWVsc2UgeworCQkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7CisJCQl9IGVsc2UgewogCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJCQkJcHJpdi0+YmF1ZF9yYXRlID0gbmV3X2JhdWRyYXRlOwogCQkJCXByaXYtPmNicl9tYXNrID0gYmF1ZF9tYXNrOwpAQCAtMzkyLDEyICszOTgsMTEgQEAKIAkJCQlpZiAodHJpZXMrKyA+PSAzKQogCQkJCQlicmVhazsKIAotCQkJCWlmIChyZXR2YWwgPT0gRVBJUEUpCi0JCQkJCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LCAweDAwKTsKLQkJCX0gd2hpbGUgKHJldHZhbCAhPSA1ICYmIHJldHZhbCAhPSBFTk9ERVYpOworCQkJfSB3aGlsZSAocmV0dmFsICE9IDUgJiYgcmV0dmFsICE9IC1FTk9ERVYpOwogCiAJCQlpZiAocmV0dmFsICE9IDUpIHsKIAkJCQllcnIoIiVzIC0gZmFpbGVkIHRvIHJldHJpZXZlIHNlcmlhbCBsaW5lIHNldHRpbmdzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIHJldHZhbCk7CisJCQkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAkJCQlyZXR1cm4gcmV0dmFsOwogCQkJfSBlbHNlIHsKIAkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtNDE5LDYgKzQyNCwyNCBAQAogfSAvKiBjeXByZXNzX3NlcmlhbF9jb250cm9sICovCiAKIAorc3RhdGljIHZvaWQgY3lwcmVzc19zZXRfZGVhZChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJaWYgKCFwcml2LT5jb21tX2lzX29rKSB7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJcmV0dXJuOworCX0KKwlwcml2LT5jb21tX2lzX29rID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwllcnIoImN5cHJlc3NfbTggc3VzcGVuZGluZyBmYWlsaW5nIHBvcnQgJWQgLSBpbnRlcnZhbCBtaWdodCBiZSB0b28gc2hvcnQiLAorCSAgICBwb3J0LT5udW1iZXIpOworfQorCisKIC8qIGdpdmVuIGEgYmF1ZCBtYXNrLCBpdCB3aWxsIHJldHVybiBpbnRlZ2VyIGJhdWQgb24gc3VjY2VzcyAqLwogc3RhdGljIGludCBtYXNrX3RvX3JhdGUgKHVuc2lnbmVkIG1hc2spCiB7CkBAIC00NzIsMTMgKzQ5NSwxNSBAQAogc3RhdGljIGludCBnZW5lcmljX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSAqcHJpdjsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gc2VyaWFsLT5wb3J0WzBdOwogCi0JZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHNlcmlhbC0+cG9ydFswXS0+bnVtYmVyKTsKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKIAogCXByaXYgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGN5cHJlc3NfcHJpdmF0ZSksIEdGUF9LRVJORUwpOwogCWlmICghcHJpdikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwlwcml2LT5jb21tX2lzX29rID0gITA7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxvY2spOwogCXByaXYtPmJ1ZiA9IGN5cHJlc3NfYnVmX2FsbG9jKENZUFJFU1NfQlVGX1NJWkUpOwogCWlmIChwcml2LT5idWYgPT0gTlVMTCkgewpAQCAtNDg5LDEzICs1MTQsMjQgQEAKIAkKIAl1c2JfcmVzZXRfY29uZmlndXJhdGlvbiAoc2VyaWFsLT5kZXYpOwogCQotCWludGVydmFsID0gMTsKIAlwcml2LT5jbWRfY3RybCA9IDA7CiAJcHJpdi0+bGluZV9jb250cm9sID0gMDsKIAlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMDsKIAlwcml2LT5yeF9mbGFncyA9IDA7CiAJcHJpdi0+Y2JyX21hc2sgPSBCMzAwOwotCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbMF0sIHByaXYpOworCWlmIChpbnRlcnZhbCA+IDApIHsKKwkJcHJpdi0+d3JpdGVfdXJiX2ludGVydmFsID0gaW50ZXJ2YWw7CisJCXByaXYtPnJlYWRfdXJiX2ludGVydmFsID0gaW50ZXJ2YWw7CisJCWRiZygiJXMgLSBwb3J0ICVkIHJlYWQgJiB3cml0ZSBpbnRlcnZhbHMgZm9yY2VkIHRvICVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXyxwb3J0LT5udW1iZXIsaW50ZXJ2YWwpOworCX0gZWxzZSB7CisJCXByaXYtPndyaXRlX3VyYl9pbnRlcnZhbCA9IHBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5pbnRlcnZhbDsKKwkJcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwgPSBwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5pbnRlcnZhbDsKKwkJZGJnKCIlcyAtIHBvcnQgJWQgaW50ZXJ2YWxzOiByZWFkPSVkIHdyaXRlPSVkIiwKKwkJICAgIF9fRlVOQ1RJT05fXyxwb3J0LT5udW1iZXIsCisJCSAgICBwcml2LT5yZWFkX3VyYl9pbnRlcnZhbCxwcml2LT53cml0ZV91cmJfaW50ZXJ2YWwpOworCX0KKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgcHJpdik7CiAJCiAJcmV0dXJuIDA7CiB9CkBAIC01ODUsNiArNjIxLDkgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCisJaWYgKCFwcml2LT5jb21tX2lzX29rKQorCQlyZXR1cm4gLUVJTzsKKwogCS8qIGNsZWFyIGhhbHRzIGJlZm9yZSBvcGVuICovCiAJdXNiX2NsZWFyX2hhbHQoc2VyaWFsLT5kZXYsIDB4ODEpOwogCXVzYl9jbGVhcl9oYWx0KHNlcmlhbC0+ZGV2LCAweDAyKTsKQEAgLTYyNCwxMSArNjYzLDEyIEBACiAJdXNiX2ZpbGxfaW50X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBzZXJpYWwtPmRldiwKIAkJdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsIHBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpLAogCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIsIHBvcnQtPmludGVycnVwdF9pbl91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCi0JCWN5cHJlc3NfcmVhZF9pbnRfY2FsbGJhY2ssIHBvcnQsIGludGVydmFsKTsKKwkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwgcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwpOwogCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIEdGUF9LRVJORUwpOwogCiAJaWYgKHJlc3VsdCl7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7CiAJfQogCiAJcmV0dXJuIHJlc3VsdDsKQEAgLTczMyw2ICs3NzMsOSBAQAogCXN0cnVjdCBjeXByZXNzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkKKwlpZiAoIXByaXYtPmNvbW1faXNfb2spCisJCXJldHVybjsKKwogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCWRiZygiJXMgLSBpbnRlcnJ1cHQgb3V0IHNpemUgaXMgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPmludGVycnVwdF9vdXRfc2l6ZSk7CiAJCkBAIC04MDYsMTQgKzg0OSwxNiBAQAogCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCBwb3J0LT5pbnRlcnJ1cHRfb3V0X3NpemUsCiAJCQkgICAgICBwb3J0LT5pbnRlcnJ1cHRfb3V0X3VyYi0+dHJhbnNmZXJfYnVmZmVyKTsKIAotCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gYWN0dWFsX3NpemU7Ci0JcG9ydC0+aW50ZXJydXB0X291dF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwotCXBvcnQtPmludGVycnVwdF9vdXRfdXJiLT5pbnRlcnZhbCA9IGludGVydmFsOworCXVzYl9maWxsX2ludF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAorCQl1c2Jfc25kaW50cGlwZShwb3J0LT5zZXJpYWwtPmRldiwgcG9ydC0+aW50ZXJydXB0X291dF9lbmRwb2ludEFkZHJlc3MpLAorCQlwb3J0LT5pbnRlcnJ1cHRfb3V0X2J1ZmZlciwgcG9ydC0+aW50ZXJydXB0X291dF9zaXplLAorCQljeXByZXNzX3dyaXRlX2ludF9jYWxsYmFjaywgcG9ydCwgcHJpdi0+d3JpdGVfdXJiX2ludGVydmFsKTsKIAlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+aW50ZXJydXB0X291dF91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sCiAJCQlyZXN1bHQpOwogCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKKwkJY3lwcmVzc19zZXRfZGVhZChwb3J0KTsKIAl9CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMTIxNCwxMyArMTI1OSwxOCBAQAogCXByaXYtPnJ4X2ZsYWdzID0gMDsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKKwlpZiAoIXByaXYtPmNvbW1faXNfb2spCisJCXJldHVybjsKKwogCWlmIChhY3R1YWxseV90aHJvdHRsZWQpIHsKIAkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+ZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CiAKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0FUT01JQyk7Ci0JCWlmIChyZXN1bHQpCisJCWlmIChyZXN1bHQpIHsKIAkJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgcmVhZCB1cmIsICIKIAkJCQkJImVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQl9CiAJfQogfQogCkBAIC0xMjQwLDkgKzEyOTAsMjIgQEAKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOwogCi0JaWYgKHVyYi0+c3RhdHVzKSB7Ci0JCWRiZygiJXMgLSBub256ZXJvIHJlYWQgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywKLQkJCQl1cmItPnN0YXR1cyk7CisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDogLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHByZWN1cnNvciB0byBkaXNjb25uZWN0IHNvIGp1c3QgZ28gYXdheSAqLworCQlyZXR1cm47CisJY2FzZSAtRVBJUEU6CisJCXVzYl9jbGVhcl9oYWx0KHBvcnQtPnNlcmlhbC0+ZGV2LDB4ODEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBzb21ldGhpbmcgdWdseSBpcyBnb2luZyBvbi4uLiAqLworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCIlcyAtIHVuZXhwZWN0ZWQgbm9uemVybyByZWFkIHN0YXR1cyByZWNlaXZlZDogJWRcbiIsCisJCQlfX0ZVTkNUSU9OX18sdXJiLT5zdGF0dXMpOworCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzQzLDE4ICsxNDA2LDIwIEBACiAKIAkvKiBDb250aW51ZSB0cnlpbmcgdG8gYWx3YXlzIHJlYWQuLi4gdW5sZXNzIHRoZSBwb3J0IGhhcyBjbG9zZWQuICovCiAKLQlpZiAocG9ydC0+b3Blbl9jb3VudCA+IDApIHsKKwlpZiAocG9ydC0+b3Blbl9jb3VudCA+IDAgJiYgcHJpdi0+Y29tbV9pc19vaykgewogCQl1c2JfZmlsbF9pbnRfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIsIHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCXVzYl9yY3ZpbnRwaXBlKHBvcnQtPnNlcmlhbC0+ZGV2LAogCQkJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKIAkJCQlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT50cmFuc2Zlcl9idWZmZXIsCiAJCQkJcG9ydC0+aW50ZXJydXB0X2luX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCQljeXByZXNzX3JlYWRfaW50X2NhbGxiYWNrLCBwb3J0LCBpbnRlcnZhbCk7CisJCQkJY3lwcmVzc19yZWFkX2ludF9jYWxsYmFjaywgcG9ydCwgcHJpdi0+cmVhZF91cmJfaW50ZXJ2YWwpOwogCQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLCBHRlBfQVRPTUlDKTsKLQkJaWYgKHJlc3VsdCkKKwkJaWYgKHJlc3VsdCkgewogCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIHJlc3VibWl0dGluZyAiCiAJCQkJCSJyZWFkIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywKIAkJCQkJcmVzdWx0KTsKKwkJCWN5cHJlc3Nfc2V0X2RlYWQocG9ydCk7CisJCX0KIAl9CiAKIAlyZXR1cm47CkBAIC0xMzgwLDIwICsxNDQ1LDI2IEBACiAJCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CiAJCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKIAkJCXJldHVybjsKLQkJY2FzZSAtRVBJUEU6IC8qIG5vIGJyZWFrIG5lZWRlZCAqLworCQljYXNlIC1FUElQRTogLyogbm8gYnJlYWsgbmVlZGVkOyBjbGVhciBoYWx0IGFuZCByZXN1Ym1pdCAqLworCQkJaWYgKCFwcml2LT5jb21tX2lzX29rKQorCQkJCWJyZWFrOwogCQkJdXNiX2NsZWFyX2hhbHQocG9ydC0+c2VyaWFsLT5kZXYsIDB4MDIpOwotCQlkZWZhdWx0OgogCQkJLyogZXJyb3IgaW4gdGhlIHVyYiwgc28gd2UgaGF2ZSB0byByZXN1Ym1pdCBpdCAqLwotCQkJZGJnKCIlcyAtIE92ZXJmbG93IGluIHdyaXRlIiwgX19GVU5DVElPTl9fKTsKIAkJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwogCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSAxOwogCQkJcG9ydC0+aW50ZXJydXB0X291dF91cmItPmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OwogCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X291dF91cmIsIEdGUF9BVE9NSUMpOwotCQkJaWYgKHJlc3VsdCkKLQkJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQkJCWVsc2UKKwkJCWlmICghcmVzdWx0KQogCQkJCXJldHVybjsKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgd3JpdGUgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCIlcyAtIHVuZXhwZWN0ZWQgbm9uemVybyB3cml0ZSBzdGF0dXMgcmVjZWl2ZWQ6ICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXyx1cmItPnN0YXR1cyk7CisJCQljeXByZXNzX3NldF9kZWFkKHBvcnQpOworCQkJYnJlYWs7CiAJfQogCQogCXByaXYtPndyaXRlX3VyYl9pbl91c2UgPSAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2Z0ZGlfc2lvLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwppbmRleCBjNjExNWFhLi5lNzc0YTI3IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uYwpAQCAtMzQ0LDYgKzM0NCw3IEBACiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwMl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwM19QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwNF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjEwNl9QSUQpIH0sCiAJeyBVU0JfREVWSUNFKFNFQUxFVkVMX1ZJRCwgU0VBTEVWRUxfMjIwMV8xX1BJRCkgfSwKIAl7IFVTQl9ERVZJQ0UoU0VBTEVWRUxfVklELCBTRUFMRVZFTF8yMjAxXzJfUElEKSB9LAogCXsgVVNCX0RFVklDRShTRUFMRVZFTF9WSUQsIFNFQUxFVkVMXzIyMDJfMV9QSUQpIH0sCkBAIC01MDcsNiArNTA4LDkgQEAKIAl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEhPUkxBQlNfUElEKSB9LAogCXsgVVNCX0RFVklDRShURVNUT19WSUQsIFRFU1RPX1VTQl9JTlRFUkZBQ0VfUElEKSB9LAogCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9HQU1NQV9TQ09VVF9QSUQpIH0sCisJeyBVU0JfREVWSUNFKEZURElfVklELCBGVERJX1RBQ1RSSVhfT1BFTlBPUlRfMTNNX1BJRCkgfSwKKwl7IFVTQl9ERVZJQ0UoRlRESV9WSUQsIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1NfUElEKSB9LAorCXsgVVNCX0RFVklDRShGVERJX1ZJRCwgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzVV9QSUQpIH0sCiAJeyB9LAkJCQkJLyogT3B0aW9uYWwgcGFyYW1ldGVyIGVudHJ5ICovCiAJeyB9CQkJCQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLwogfTsKQEAgLTExMDEsMjUgKzExMDUsMjkgQEAKIHN0YXRpYyBERVZJQ0VfQVRUUihsYXRlbmN5X3RpbWVyLCBTX0lXVVNSIHwgU19JUlVHTywgc2hvd19sYXRlbmN5X3RpbWVyLCBzdG9yZV9sYXRlbmN5X3RpbWVyKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihldmVudF9jaGFyLCBTX0lXVVNSLCBOVUxMLCBzdG9yZV9ldmVudF9jaGFyKTsKIAotc3RhdGljIHZvaWQgY3JlYXRlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCi17CQorc3RhdGljIGludCBjcmVhdGVfc3lzZnNfYXR0cnMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKIAlzdHJ1Y3QgZnRkaV9wcml2YXRlICpwcml2OwogCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2OworCWludCByZXR2YWwgPSAwOwogCiAJZGJnKCIlcyIsX19GVU5DVElPTl9fKTsKLQkKKwogCXByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdKTsKIAl1ZGV2ID0gc2VyaWFsLT5kZXY7Ci0JCisKIAkvKiBYWFggSSd2ZSBubyBpZGVhIGlmIHRoZSBvcmlnaW5hbCBTSU8gc3VwcG9ydHMgdGhlIGV2ZW50X2NoYXIKIAkgKiBzeXNmcyBwYXJhbWV0ZXIsIHNvIEknbSBwbGF5aW5nIGl0IHNhZmUuICAqLwogCWlmIChwcml2LT5jaGlwX3R5cGUgIT0gU0lPKSB7CiAJCWRiZygic3lzZnMgYXR0cmlidXRlcyBmb3IgJXMiLCBmdGRpX2NoaXBfbmFtZVtwcml2LT5jaGlwX3R5cGVdKTsKLQkJZGV2aWNlX2NyZWF0ZV9maWxlKCZ1ZGV2LT5kZXYsICZkZXZfYXR0cl9ldmVudF9jaGFyKTsKLQkJaWYgKHByaXYtPmNoaXBfdHlwZSA9PSBGVDIzMkJNIHx8IHByaXYtPmNoaXBfdHlwZSA9PSBGVDIyMzJDKSB7Ci0JCQlkZXZpY2VfY3JlYXRlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2xhdGVuY3lfdGltZXIpOworCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnVkZXYtPmRldiwgJmRldl9hdHRyX2V2ZW50X2NoYXIpOworCQlpZiAoKCFyZXR2YWwpICYmCisJCSAgICAocHJpdi0+Y2hpcF90eXBlID09IEZUMjMyQk0gfHwgcHJpdi0+Y2hpcF90eXBlID09IEZUMjIzMkMpKSB7CisJCQlyZXR2YWwgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJnVkZXYtPmRldiwKKwkJCQkJCSAgICAmZGV2X2F0dHJfbGF0ZW5jeV90aW1lcik7CiAJCX0KIAl9CisJcmV0dXJuIHJldHZhbDsKIH0KIAogc3RhdGljIHZvaWQgcmVtb3ZlX3N5c2ZzX2F0dHJzKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCkBAIC0xMTYyLDcgKzExNzAsOCBAQAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBzZXJpYWwtPnBvcnRbMF07CiAJc3RydWN0IGZ0ZGlfcHJpdmF0ZSAqcHJpdjsKIAlzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgKnF1aXJrOwotCQorCWludCByZXR2YWw7CisKIAlkYmcoIiVzIixfX0ZVTkNUSU9OX18pOwogCiAJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBmdGRpX3ByaXZhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTEyMDMsMTUgKzEyMTIsMTggQEAKIAl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEoc2VyaWFsLT5wb3J0WzBdLCBwcml2KTsKIAogCWZ0ZGlfZGV0ZXJtaW5lX3R5cGUgKHNlcmlhbC0+cG9ydFswXSk7Ci0JY3JlYXRlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisJcmV0dmFsID0gY3JlYXRlX3N5c2ZzX2F0dHJzKHNlcmlhbCk7CisJaWYgKHJldHZhbCkKKwkJZGV2X2Vycigmc2VyaWFsLT5kZXYtPmRldiwgIkVycm9yIGNyZWF0aW5nIHN5c2ZzIGZpbGVzLCAiCisJCQkiY29udGludWluZ1xuIik7CiAKIAkvKiBDaGVjayBmb3IgZGV2aWNlIHJlcXVpcmluZyBzcGVjaWFsIHNldCB1cC4gKi8KIAlxdWlyayA9IChzdHJ1Y3QgZnRkaV9zaW9fcXVpcmsgKil1c2JfZ2V0X3NlcmlhbF9kYXRhKHNlcmlhbCk7CiAJaWYgKHF1aXJrICYmIHF1aXJrLT5zZXR1cCkgewogCQlxdWlyay0+c2V0dXAoc2VyaWFsKTsKIAl9Ci0JCi0JcmV0dXJuICgwKTsKKworCXJldHVybiAwOwogfSAvKiBmdGRpX3Npb19hdHRhY2ggKi8KIAogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvZnRkaV9zaW8uaCBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCmluZGV4IDc3Mjk5OTkuLmYwZWRiODcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9mdGRpX3Npby5oCkBAIC0xMTEsNiArMTExLDcgQEAKICNkZWZpbmUgU0VBTEVWRUxfMjEwMl9QSUQJMHgyMTAyCS8qIFNlYUxJTksrNDg1ICgyMTAyKSAqLwogI2RlZmluZSBTRUFMRVZFTF8yMTAzX1BJRAkweDIxMDMJLyogU2VhTElOSysyMzJJICgyMTAzKSAqLwogI2RlZmluZSBTRUFMRVZFTF8yMTA0X1BJRAkweDIxMDQJLyogU2VhTElOSys0ODVJICgyMTA0KSAqLworI2RlZmluZSBTRUFMRVZFTF8yMTA2X1BJRAkweDkwMjAJLyogU2VhTElOSys0MjIgKDIxMDYpICovCiAjZGVmaW5lIFNFQUxFVkVMXzIyMDFfMV9QSUQJMHgyMjExCS8qIFNlYVBPUlQrMi8yMzIgKDIyMDEpIFBvcnQgMSAqLwogI2RlZmluZSBTRUFMRVZFTF8yMjAxXzJfUElECTB4MjIyMQkvKiBTZWFQT1JUKzIvMjMyICgyMjAxKSBQb3J0IDIgKi8KICNkZWZpbmUgU0VBTEVWRUxfMjIwMl8xX1BJRAkweDIyMTIJLyogU2VhUE9SVCsyLzQ4NSAoMjIwMikgUG9ydCAxICovCkBAIC00NzIsNiArNDczLDE1IEBACiAgKi8KICNkZWZpbmUgRlRESV9HQU1NQV9TQ09VVF9QSUQJCTB4RDY3OAkvKiBHYW1tYSBTY291dCBvbmxpbmUgKi8KIAorLyoKKyAqIFRhY3RyaXggT3BlblBvcnQgKEVDVSkgZGV2aWNlcy4KKyAqIE9wZW5Qb3J0IDEuM00gc3VibWl0dGVkIGJ5IERvbm91ciBTaXplbW9yZS4KKyAqIE9wZW5Qb3J0IDEuM1MgYW5kIDEuM1Ugc3VibWl0dGVkIGJ5IElhbiBBYmJvdHQuCisgKi8KKyNkZWZpbmUgRlRESV9UQUNUUklYX09QRU5QT1JUXzEzTV9QSUQJMHhDQzQ4CS8qIE9wZW5Qb3J0IDEuMyBNaXRzdWJpc2hpICovCisjZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1NfUElECTB4Q0M0OQkvKiBPcGVuUG9ydCAxLjMgU3ViYXJ1ICovCisjZGVmaW5lIEZURElfVEFDVFJJWF9PUEVOUE9SVF8xM1VfUElECTB4Q0M0QQkvKiBPcGVuUG9ydCAxLjMgVW5pdmVyc2FsICovCisKIC8qIENvbW1hbmRzICovCiAjZGVmaW5lIEZURElfU0lPX1JFU0VUIAkJMCAvKiBSZXNldCB0aGUgcG9ydCAqLwogI2RlZmluZSBGVERJX1NJT19NT0RFTV9DVFJMIAkxIC8qIFNldCB0aGUgbW9kZW0gY29udHJvbCByZWdpc3RlciAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nYXJtaW5fZ3BzLmMKaW5kZXggNzI3ODUyNi4uNGIxMTk2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dhcm1pbl9ncHMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2FybWluX2dwcy5jCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIEdhcm1pbiBHUFMgZHJpdmVyCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA0IEhlcm1hbm4gS25laXNzZWwgaGVya25lQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorICogQ29weXJpZ2h0IChDKSAyMDA2IEhlcm1hbm4gS25laXNzZWwgaGVya25lQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAogICoKICAqIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGNhbiBiZSBmb3VuZCBhdAogICogaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9nYXJtaW4tZ3BzLwpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgogI2luY2x1ZGUgPGxpbnV4L3VzYi9zZXJpYWwuaD4KIAorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKwogLyogdGhlIG1vZGUgdG8gYmUgc2V0IHdoZW4gdGhlIHBvcnQgaXN0IG9wZW5lZCAqLwogc3RhdGljIGludCBpbml0aWFsX21vZGUgPSAxOwogCkBAIC01MCw3ICs1Miw3IEBACiAgKi8KIAogI2RlZmluZSBWRVJTSU9OX01BSk9SCTAKLSNkZWZpbmUgVkVSU0lPTl9NSU5PUgkyMworI2RlZmluZSBWRVJTSU9OX01JTk9SCTI4CiAKICNkZWZpbmUgX1NUUihzKSAjcwogI2RlZmluZSBfRFJJVkVSX1ZFUlNJT04oYSxiKSAidiIgX1NUUihhKSAiLiIgX1NUUihiKQpAQCAtMTY0LDcgKzE2Niw4IEBACiAjZGVmaW5lIEZMQUdTX1NFU1NJT05fUkVQTFkxX1NFRU4gMHgwMDgwCiAjZGVmaW5lIEZMQUdTX1NFU1NJT05fUkVQTFkyX1NFRU4gMHgwMDQwCiAjZGVmaW5lIEZMQUdTX0JVTEtfSU5fQUNUSVZFICAgICAgMHgwMDIwCi0jZGVmaW5lIEZMQUdTX1RIUk9UVExFRCAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lIEZMQUdTX0JVTEtfSU5fUkVTVEFSVCAgICAgMHgwMDEwCisjZGVmaW5lIEZMQUdTX1RIUk9UVExFRCAgICAgICAgICAgMHgwMDA4CiAjZGVmaW5lIENMRUFSX0hBTFRfUkVRVUlSRUQgICAgICAgMHgwMDAxCiAKICNkZWZpbmUgRkxBR1NfUVVFVUlORyAgICAgICAgICAgICAweDAxMDAKQEAgLTIyNCw3ICsyMjcsNyBAQAogCS5wcm9iZSA9CXVzYl9zZXJpYWxfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPQl1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCiAJLmlkX3RhYmxlID0JaWRfdGFibGUsCi0JLm5vX2R5bmFtaWNfaWQgPSAJMSwKKwkubm9fZHluYW1pY19pZCA9IDEsCiB9OwogCiAKQEAgLTI3MCw3ICsyNzMsNyBAQAogCiAKIHN0YXRpYyB2b2lkIHNlbmRfdG9fdHR5KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgYWN0dWFsX2xlbmd0aCkKKwkJCWNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBhY3R1YWxfbGVuZ3RoKQogewogCXN0cnVjdCB0dHlfc3RydWN0ICp0dHkgPSBwb3J0LT50dHk7CiAKQEAgLTI5NCwxNSArMjk3LDE1IEBACiAgKiBxdWV1ZSBhIHJlY2VpdmVkICh1c2ItKXBhY2tldCBmb3IgbGF0ZXIgcHJvY2Vzc2luZwogICovCiBzdGF0aWMgaW50IHBrdF9hZGQoc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwKLSAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpkYXRhLCB1bnNpZ25lZCBpbnQgZGF0YV9sZW5ndGgpCisJCSAgIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhX2xlbmd0aCkKIHsKKwlpbnQgc3RhdGUgPSAwOwogCWludCByZXN1bHQgPSAwOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGdhcm1pbl9wYWNrZXQgKnBrdDsKIAogCS8qIHByb2Nlc3Mgb25seSBwYWNrZXRzIGNvbnRhaW5nIGRhdGEgLi4uICovCiAJaWYgKGRhdGFfbGVuZ3RoKSB7Ci0JCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkc7CiAJCXBrdCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBnYXJtaW5fcGFja2V0KStkYXRhX2xlbmd0aCwKIAkJICAgICAgICAgICAgICBHRlBfQVRPTUlDKTsKIAkJaWYgKHBrdCA9PSBOVUxMKSB7CkBAIC0zMTMsMTQgKzMxNiwxNiBAQAogCQltZW1jcHkocGt0LT5kYXRhLCBkYXRhLCBkYXRhX2xlbmd0aCk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfUVVFVUlORzsKIAkJcmVzdWx0ID0gbGlzdF9lbXB0eSgmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CiAJCXBrdC0+c2VxID0gZ2FybWluX2RhdGFfcC0+c2VxX2NvdW50ZXIrKzsKIAkJbGlzdF9hZGRfdGFpbCgmcGt0LT5saXN0LCAmZ2FybWluX2RhdGFfcC0+cGt0bGlzdCk7CisJCXN0YXRlID0gZ2FybWluX2RhdGFfcC0+c3RhdGU7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAogCQkvKiBpbiBzZXJpYWwgbW9kZSwgaWYgc29tZW9uZSBpcyB3YWl0aW5nIGZvciBkYXRhIGZyb20KIAkJICAgdGhlIGRldmljZSwgaWNvbnZlcnQgYW5kIHNlbmQgdGhlIG5leHQgcGFja2V0IHRvIHR0eS4gKi8KLQkJaWYgKHJlc3VsdCAmJiAoZ2FybWluX2RhdGFfcC0+c3RhdGUgPT0gU1RBVEVfR1NQX1dBSVRfREFUQSkpIHsKKwkJaWYgKHJlc3VsdCAmJiAoc3RhdGUgPT0gU1RBVEVfR1NQX1dBSVRfREFUQSkpIHsKIAkJCWdzcF9uZXh0X3BhY2tldChnYXJtaW5fZGF0YV9wKTsKIAkJfQogCX0KQEAgLTM3MCw5ICszNzUsOSBAQAogc3RhdGljIGludCBnc3Bfc2VuZF9hY2soc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCwgX191OCBwa3RfaWQpCiB7CiAJX191OCBwa3RbMTBdOwotICAgICAgICBfX3U4IGNrc3VtID0gMDsKLSAgICAgICAgX191OCAqcHRyID0gcGt0OwotICAgICAgICB1bnNpZ25lZCAgbCA9IDA7CisJX191OCBja3N1bSA9IDA7CisJX191OCAqcHRyID0gcGt0OworCXVuc2lnbmVkICBsID0gMDsKIAogCWRiZygiJXMgLSBwa3QtaWQ6IDB4JVguIiwgX19GVU5DVElPTl9fLCAweEZGICYgcGt0X2lkKTsKIApAQCAtNDE2LDcgKzQyMSw3IEBACiBzdGF0aWMgaW50IGdzcF9yZWNfcGFja2V0KHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsIGludCBjb3VudCkKIHsKIAljb25zdCBfX3U4KiByZWNwa3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcitHU1BfSU5JVElBTF9PRkZTRVQ7Ci0gICAgICAgIF9fbGUzMiAqdXNiZGF0YSA9IChfX2xlMzIgKikgZ2FybWluX2RhdGFfcC0+aW5idWZmZXI7CisJX19sZTMyICp1c2JkYXRhID0gKF9fbGUzMiAqKSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcjsKIAogCWludCBja3N1bSA9IDA7CiAJaW50IG4gPSAwOwpAQCAtNDQ3LDExICs0NTIsMTEgQEAKIAkJbisrOwogCX0KIAotICAgICAgIGlmICgoMHhmZiAmIChja3N1bSArICpyZWNwa3QpKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgZGJnKCIlcyAtIGludmFsaWQgY2hlY2tzdW0sIGV4cGVjdGVkICUwMngsIGdvdCAlMDJ4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgMHhmZiAmIC1ja3N1bSwgMHhmZiAmICpyZWNwa3QpOwotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVlBLVDsKLSAgICAgICAgfQorCWlmICgoMHhmZiAmIChja3N1bSArICpyZWNwa3QpKSAhPSAwKSB7CisJCWRiZygiJXMgLSBpbnZhbGlkIGNoZWNrc3VtLCBleHBlY3RlZCAlMDJ4LCBnb3QgJTAyeCIsCisJCQlfX0ZVTkNUSU9OX18sIDB4ZmYgJiAtY2tzdW0sIDB4ZmYgJiAqcmVjcGt0KTsKKwkJcmV0dXJuIC1FSU5WUEtUOworCX0KIAogCXVzYmRhdGFbMF0gPSBfX2NwdV90b19sZTMyKEdBUk1JTl9MQVlFUklEX0FQUEwpOwogCXVzYmRhdGFbMV0gPSBfX2NwdV90b19sZTMyKHBrdGlkKTsKQEAgLTQ5MSwyMCArNDk2LDI4IEBACiAgKi8KIAogc3RhdGljIGludCBnc3BfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IG9mZnMgPSAwOwogCWludCBhY2tfb3JfbmFrX3NlZW4gPSAwOwogCWludCBpID0gMDsKLQlfX3U4ICpkZXN0ID0gZ2FybWluX2RhdGFfcC0+aW5idWZmZXI7Ci0JaW50IHNpemUgPSBnYXJtaW5fZGF0YV9wLT5pbnNpemU7CisJX191OCAqZGVzdDsKKwlpbnQgc2l6ZTsKIAkvLyBkbGVTZWVuOiBzZXQgaWYgbGFzdCBieXRlIHJlYWQgd2FzIGEgRExFCi0JaW50IGRsZVNlZW4gPSBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0dTUF9ETEVTRUVOOworCWludCBkbGVTZWVuOwogCS8vIHNraXA6IGlmIHNldCwgc2tpcCBpbmNvbWluZyBkYXRhIHVudGlsIHBvc3NpYmxlIHN0YXJ0IG9mCiAJLy8gICAgICAgbmV3IHBhY2tldAotCWludCBza2lwID0gZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19HU1BfU0tJUDsKKwlpbnQgc2tpcDsKIAlfX3U4IGRhdGE7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCWRlc3QgPSBnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcjsKKwlzaXplID0gZ2FybWluX2RhdGFfcC0+aW5zaXplOworCWRsZVNlZW4gPSBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0dTUF9ETEVTRUVOOworCXNraXAgPSBnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0dTUF9TS0lQOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwogCWRiZygiJXMgLSBkbGU9JWQgc2tpcD0lZCBzaXplPSVkIGNvdW50PSVkIiwKIAkJX19GVU5DVElPTl9fLCBkbGVTZWVuLCBza2lwLCBzaXplLCBjb3VudCk7CiAKQEAgLTU3Miw2ICs1ODUsOCBAQAogCQl9CiAJfQogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwogCWdhcm1pbl9kYXRhX3AtPmluc2l6ZSA9IHNpemU7CiAKIAkvLyBjb3B5IGZsYWdzIGJhY2sgdG8gc3RydWN0dXJlCkBAIC01ODcsNiArNjAyLDExIEBACiAKIAlpZiAoYWNrX29yX25ha19zZWVuKSB7CiAJCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfR1NQX1dBSVRfREFUQTsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisKKwlpZiAoYWNrX29yX25ha19zZWVuKSB7CiAJCWdzcF9uZXh0X3BhY2tldChnYXJtaW5fZGF0YV9wKTsKIAl9CiAKQEAgLTY3Niw3ICs2OTYsNyBAQAogCXNyYyA9IGdhcm1pbl9kYXRhX3AtPm91dGJ1ZmZlcitHQVJNSU5fUEtUSERSX0xFTkdUSDsKIAlpZiAoayA+IChHQVJNSU5fUEtUSERSX0xFTkdUSC0yKSkgewogCQkvKiBjYW4ndCBhZGQgc3R1ZmZpbmcgRExFcyBpbiBwbGFjZSwgbW92ZSBkYXRhIHRvIGVuZCAKLSAgICAgICAgICAgICAgICAgICBvZiBidWZmZXIgLi4uICovCisJCSAgIG9mIGJ1ZmZlciAuLi4gKi8KIAkJZHN0ID0gZ2FybWluX2RhdGFfcC0+b3V0YnVmZmVyK0dQU19PVVRfQlVGU0laLWRhdGFsZW47CiAJCW1lbWNweShkc3QsIHNyYywgZGF0YWxlbik7CiAJCXNyYyA9IGRzdDsKQEAgLTc1NSw4ICs3NzUsOSBAQAogICogb3IgZXZlbiBpbmNvbXBsZXRlIHBhY2tldHMKICAqLwogc3RhdGljIGludCBuYXRfcmVjZWl2ZShzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wLAotICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKKwkJICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJX191OCAqIGRlc3Q7CiAJaW50IG9mZnMgPSAwOwogCWludCByZXN1bHQgPSBjb3VudDsKQEAgLTgwMyw3ICs4MjQsOSBAQAogCQkJCS8qIGlmIHRoaXMgd2FzIGFuIGFib3J0LXRyYW5zZmVyIGNvbW1hbmQsCiAJCQkJICAgZmx1c2ggYWxsIHF1ZXVlZCBkYXRhLiAqLwogCQkJCWlmIChpc0Fib3J0VHJmQ21uZChnYXJtaW5fZGF0YV9wLT5pbmJ1ZmZlcikpIHsKKwkJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfRFJPUF9EQVRBOworCQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQkJCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKIAkJCQl9CiAJCQl9CkBAIC04MzksMTIgKzg2MiwxNSBAQAogCiBzdGF0aWMgaW50IHByb2Nlc3NfcmVzZXRkZXZfcmVxdWVzdChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+KENMRUFSX0hBTFRfUkVRVUlSRUQpOwogCWdhcm1pbl9kYXRhX3AtPnN0YXRlID0gU1RBVEVfUkVTRVQ7CiAJZ2FybWluX2RhdGFfcC0+c2VyaWFsX251bSA9IDA7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCiAJdXNiX2tpbGxfdXJiIChwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiKTsKIAlkYmcoIiVzIC0gdXNiX3Jlc2V0X2RldmljZSIsIF9fRlVOQ1RJT05fXyApOwpAQCAtODYyLDYgKzg4OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZ2FybWluX2NsZWFyKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgc3RhdHVzID0gMDsKIAogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSBnYXJtaW5fZGF0YV9wLT5wb3J0OwpAQCAtODc1LDggKzkwMiwxMCBAQAogCS8qIGZsdXNoIGFsbCBxdWV1ZWQgZGF0YSAqLwogCXBrdF9jbGVhcihnYXJtaW5fZGF0YV9wKTsKIAorCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJZ2FybWluX2RhdGFfcC0+aW5zaXplID0gMDsKIAlnYXJtaW5fZGF0YV9wLT5vdXRzaXplID0gMDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gc3RhdHVzOwogfQpAQCAtODg4LDYgKzkxNyw3IEBACiAKIHN0YXRpYyBpbnQgZ2FybWluX2luaXRfc2Vzc2lvbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCWludCBzdGF0dXMgPSAwOwpAQCAtOTEzLDcgKzk0Myw5IEBACiAKIAkJaWYgKHN0YXR1cyA+PSAwKSB7CiAKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKys7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAKIAkJCS8qIG5vdCBuZWVkZWQsIGJ1dCB0aGUgd2luMzIgZHJpdmVyIGRvZXMgaXQgdG9vIC4uLiAqLwogCQkJc3RhdHVzID0gZ2FybWluX3dyaXRlX2J1bGsocG9ydCwKQEAgLTkyMSw3ICs5NTMsOSBAQAogCQkJICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUTIpKTsKIAkJCWlmIChzdGF0dXMgPj0gMCkgewogCQkJCXN0YXR1cyA9IDA7CisJCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzKys7CisJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCQkJfQogCQl9CiAJfQpAQCAtOTM1LDYgKzk2OSw3IEBACiAKIHN0YXRpYyBpbnQgZ2FybWluX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1cyA9IDA7CiAJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIApAQCAtOTQ4LDkgKzk4MywxMSBAQAogCWlmIChwb3J0LT50dHkpCiAJCXBvcnQtPnR0eS0+bG93X2xhdGVuY3kgPSAxOwogCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAlnYXJtaW5fZGF0YV9wLT5tb2RlICA9IGluaXRpYWxfbW9kZTsKIAlnYXJtaW5fZGF0YV9wLT5jb3VudCA9IDA7CiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgPSAwOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAogCS8qIHNodXRkb3duIGFueSBidWxrIHJlYWRzIHRoYXQgbWlnaHQgYmUgZ29pbmcgb24gKi8KIAl1c2Jfa2lsbF91cmIgKHBvcnQtPndyaXRlX3VyYik7CkBAIC05OTYsNiArMTAzMyw3IEBACiAKIHN0YXRpYyB2b2lkIGdhcm1pbl93cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopdXJiLT5jb250ZXh0OwogCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAKQEAgLTEwMDcsNyArMTA0NSw5IEBACiAJaWYgKHVyYi0+c3RhdHVzKSB7CiAJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsCiAJCQlfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gQ0xFQVJfSEFMVF9SRVFVSVJFRDsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCX0KIAogCXVzYl9zZXJpYWxfcG9ydF9zb2Z0aW50KHBvcnQpOwpAQCAtMTAxNSw4ICsxMDU1LDkgQEAKIAogCiBzdGF0aWMgaW50IGdhcm1pbl93cml0ZV9idWxrIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgY291bnQpCisJCQkgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKIAlzdHJ1Y3QgdXJiICp1cmI7CkBAIC0xMDI2LDcgKzEwNjcsOSBAQAogCWRiZygiJXMgLSBwb3J0ICVkLCBzdGF0ZSAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLAogCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSk7CiAKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19EUk9QX0RBVEE7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCiAJYnVmZmVyID0ga21hbGxvYyAoY291bnQsIEdGUF9BVE9NSUMpOwogCWlmICghYnVmZmVyKSB7CkBAIC0xMDUzLDcgKzEwOTYsOSBAQAogCXVyYi0+dHJhbnNmZXJfZmxhZ3MgfD0gVVJCX1pFUk9fUEFDS0VUOwogCiAJaWYgKEdBUk1JTl9MQVlFUklEX0FQUEwgPT0gZ2V0TGF5ZXJJZChidWZmZXIpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0FQUF9SRVFfU0VFTjsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCQlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpICB7CiAJCQlwa3RfY2xlYXIoZ2FybWluX2RhdGFfcCk7CiAJCQlnYXJtaW5fZGF0YV9wLT5zdGF0ZSA9IFNUQVRFX0dTUF9XQUlUX0RBVEE7CkBAIC0xMDg3LDggKzExMzIsOSBAQAogCiAKIHN0YXRpYyBpbnQgZ2FybWluX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQorCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHBrdGlkLCBwa3RzaXosIGxlbjsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCV9fbGUzMiAqcHJpdnBrdCA9IChfX2xlMzIgKilnYXJtaW5fZGF0YV9wLT5wcml2cGt0OwpAQCAtMTEzOSw3ICsxMTg1LDkgQEAKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQUklWX1BLVElEX1JFU0VUX1JFUToKKwkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCQkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0FQUF9SRVFfU0VFTjsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgUFJJVl9QS1RJRF9TRVRfREVGX01PREU6CkBAIC0xMTU1LDYgKzEyMDMsOCBAQAogCQl9CiAJfQogCisJZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cyA9IDA7CisKIAlpZiAoZ2FybWluX2RhdGFfcC0+bW9kZSA9PSBNT0RFX0dBUk1JTl9TRVJJQUwpIHsKIAkJcmV0dXJuIGdzcF9yZWNlaXZlKGdhcm1pbl9kYXRhX3AsIGJ1ZiwgY291bnQpOwogCX0gZWxzZSB7CS8qIE1PREVfTkFUSVZFICovCkBAIC0xMTc3LDEwICsxMjI3LDEwIEBACiB7CiAJLyoKIAkgKiBSZXBvcnQgYmFjayB0aGUgbnVtYmVyIG9mIGJ5dGVzIGN1cnJlbnRseSBpbiBvdXIgaW5wdXQgYnVmZmVyLgotICAgICAgICAgKiBXaWxsIHRoaXMgbG9jayB1cCB0aGUgZHJpdmVyIC0gdGhlIGJ1ZmZlciBjb250YWlucyBhbiBpbmNvbXBsZXRlCi0gICAgICAgICAqIHBhY2thZ2Ugd2hpY2ggd2lsbCBub3QgYmUgd3JpdHRlbiB0byB0aGUgZGV2aWNlIHVudGlsIGl0Ci0gICAgICAgICAqIGhhcyBiZWVuIGNvbXBsZXRlZCA/Ci0gICAgICAgICAqLworCSAqIFdpbGwgdGhpcyBsb2NrIHVwIHRoZSBkcml2ZXIgLSB0aGUgYnVmZmVyIGNvbnRhaW5zIGFuIGluY29tcGxldGUKKwkgKiBwYWNrYWdlIHdoaWNoIHdpbGwgbm90IGJlIHdyaXR0ZW4gdG8gdGhlIGRldmljZSB1bnRpbCBpdAorCSAqIGhhcyBiZWVuIGNvbXBsZXRlZCA/CisJICovCiAJLy9zdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCS8vcmV0dXJuIGdhcm1pbl9kYXRhX3AtPmluc2l6ZTsKIAlyZXR1cm4gMDsKQEAgLTExOTAsNiArMTI0MCw4IEBACiBzdGF0aWMgdm9pZCBnYXJtaW5fcmVhZF9wcm9jZXNzKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AsCiAJCQkJIHVuc2lnbmVkIGNoYXIgKmRhdGEsIHVuc2lnbmVkIGRhdGFfbGVuZ3RoKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKIAlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19EUk9QX0RBVEEpIHsKIAkJLyogYWJvcnQtdHJhbnNmZXIgY21kIGlzIGFjdGljZSAqLwogCQlkYmcoIiVzIC0gcGt0IGRyb3BwZWQiLCBfX0ZVTkNUSU9OX18pOwpAQCAtMTIwMCwxMSArMTI1MiwxNCBAQAogCQkgICBpZiBhIHJlc2V0IGlzIHJlcXVpcmVkIG9yIG5vdCB3aGVuIGNsb3NpbmcKIAkJICAgdGhlIGRldmljZSAqLwogCQlpZiAoMCA9PSBtZW1jbXAoZGF0YSwgR0FSTUlOX0FQUF9MQVlFUl9SRVBMWSwKLQkJICAgICAgICAgICAgICAgIHNpemVvZihHQVJNSU5fQVBQX0xBWUVSX1JFUExZKSkpCisJCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX0FQUF9MQVlFUl9SRVBMWSkpKSB7CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQVBQX1JFU1BfU0VFTjsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJfQogCiAJCS8qIGlmIHRocm90dGxpbmcgaXMgYWN0aXZlIG9yIHBvc3RwcmVjZXNzaW5nIGlzIHJlcXVpcmVkCi0JCSAgIHB1dCB0aGUgcmVjZWl2ZWQgZGF0YSBpbiB0aCBpbnB1dCBxdWV1ZSwgb3RoZXJ3aXNlCisJCSAgIHB1dCB0aGUgcmVjZWl2ZWQgZGF0YSBpbiB0aGUgaW5wdXQgcXVldWUsIG90aGVyd2lzZQogCQkgICBzZW5kIGl0IGRpcmVjdGx5IHRvIHRoZSB0dHkgcG9ydCAqLwogCQlpZiAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19RVUVVSU5HKSB7CiAJCQlwa3RfYWRkKGdhcm1pbl9kYXRhX3AsIGRhdGEsIGRhdGFfbGVuZ3RoKTsKQEAgLTEyMjEsNiArMTI3Niw3IEBACiAKIHN0YXRpYyB2b2lkIGdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9ICBwb3J0LT5zZXJpYWw7CiAJc3RydWN0IGdhcm1pbl9kYXRhICogZ2FybWluX2RhdGFfcCA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTEyNDUsMTkgKzEzMDEsMzAgQEAKIAogCWdhcm1pbl9yZWFkX3Byb2Nlc3MoZ2FybWluX2RhdGFfcCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAotCS8qIENvbnRpbnVlIHRyeWluZyB0byByZWFkIHVudGlsIG5vdGhpbmcgbW9yZSBpcyByZWNlaXZlZCAgKi8KLQlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkgewotCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAotCQkJICAgdXNiX3JjdmJ1bGtwaXBlIChzZXJpYWwtPmRldiwKLQkJCQkJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCSAgIHBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCi0JCQkgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJCSAgIGdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCAmJgorCQkJMCAhPSAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19CVUxLX0lOX1JFU1RBUlQpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19CVUxLX0lOX1JFU1RBUlQ7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOwogCQlpZiAoc3RhdHVzKQogCQkJZGV2X2VycigmcG9ydC0+ZGV2LAogCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAogCQkJICAgICAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPiAwKSB7CisJCS8qIENvbnRpbnVlIHRyeWluZyB0byByZWFkIHVudGlsIG5vdGhpbmcgbW9yZSBpcyByZWNlaXZlZCAgKi8KKwkJaWYgKDAgPT0gKGdhcm1pbl9kYXRhX3AtPmZsYWdzICYgRkxBR1NfVEhST1RUTEVEKSkgeworCQkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQkJaWYgKHN0YXR1cykKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJICAgICAgICAJX19GVU5DVElPTl9fLCBzdGF0dXMpOworCQl9CisJfSBlbHNlIHsKKwkJZGJnKCIlcyAtIGVuZCBvZiBidWxrIGRhdGEiLCBfX0ZVTkNUSU9OX18pOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOworCQlnYXJtaW5fZGF0YV9wLT5mbGFncyAmPSB+RkxBR1NfQlVMS19JTl9BQ1RJVkU7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAl9CiAJcmV0dXJuOwogfQpAQCAtMTI2NSw2ICsxMzMyLDcgQEAKIAogc3RhdGljIHZvaWQgZ2FybWluX3JlYWRfaW50X2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogeworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHN0YXR1czsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKil1cmItPmNvbnRleHQ7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKQEAgLTEyOTcsMjUgKzEzNjUsNDEgQEAKIAogCQlkYmcoIiVzIC0gYnVsayBkYXRhIGF2YWlsYWJsZS4iLCBfX0ZVTkNUSU9OX18pOwogCi0JCS8qIGJ1bGsgZGF0YSBhdmFpbGFibGUgKi8KLQkJdXNiX2ZpbGxfYnVsa191cmIgKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwKLQkJCQl1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAotCQkJCXBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKLQkJCQlwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLAotCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAotCQkJCWdhcm1pbl9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwotCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChzdGF0dXMpIHsKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwKLQkJCQkiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCi0JCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWlmICgwID09IChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX0JVTEtfSU5fQUNUSVZFKSkgeworCisJCQkvKiBidWxrIGRhdGEgYXZhaWxhYmxlICovCisJCQl1c2JfZmlsbF9idWxrX3VyYiAocG9ydC0+cmVhZF91cmIsIHNlcmlhbC0+ZGV2LAorCQkJCQl1c2JfcmN2YnVsa3BpcGUgKHNlcmlhbC0+ZGV2LAorCQkJCQlwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyksCisJCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXIsCisJCQkJCXBvcnQtPnJlYWRfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQlnYXJtaW5fcmVhZF9idWxrX2NhbGxiYWNrLCBwb3J0KTsKKwkJCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKwkJCWlmIChzdGF0dXMpIHsKKwkJCQlkZXZfZXJyKCZwb3J0LT5kZXYsCisJCQkJCSIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwKKwkJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCQl9IGVsc2UgeworCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCQkJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgfD0gRkxBR1NfQlVMS19JTl9BQ1RJVkU7CisJCQkJLyogZG8gbm90IHNlbmQgdGhpcyBwYWNrZXQgdG8gdGhlIHVzZXIgKi8KKwkJCQlnYXJtaW5fZGF0YV9wLT5pZ25vcmVQa3RzID0gMTsKKwkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKiBidWxrLWluIHRyYW5zZmVyIHN0aWxsIGFjdGl2ZSAqLworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKKwkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX0JVTEtfSU5fUkVTVEFSVDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJfQogCiAJfSBlbHNlIGlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gKDQrc2l6ZW9mKEdBUk1JTl9TVEFSVF9TRVNTSU9OX1JFUExZKSkKIAkJCSAmJiAwID09IG1lbWNtcChkYXRhLCBHQVJNSU5fU1RBUlRfU0VTU0lPTl9SRVBMWSwKIAkJCSAgICAgICAgICAgICAgICBzaXplb2YoR0FSTUlOX1NUQVJUX1NFU1NJT05fUkVQTFkpKSkgewogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1NFU1NJT05fUkVQTFkxX1NFRU47CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAogCQkvKiBzYXZlIHRoZSBzZXJpYWwgbnVtYmVyICovCiAJCWdhcm1pbl9kYXRhX3AtPnNlcmlhbF9udW0gCkBAIC0xMzMwLDcgKzE0MTQsOSBAQAogCQkgICBpZ25vcmUgaXQuICovCiAJCWRiZygiJXMgLSBwa3QgaWdub3JlZCAoJWQpIiwKIAkJCV9fRlVOQ1RJT05fXywgZ2FybWluX2RhdGFfcC0+aWdub3JlUGt0cyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJCWdhcm1pbl9kYXRhX3AtPmlnbm9yZVBrdHMtLTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCX0gZWxzZSB7CiAJCWdhcm1pbl9yZWFkX3Byb2Nlc3MoZ2FybWluX2RhdGFfcCwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKIAl9CkBAIC0xMzUxLDE4ICsxNDM3LDIwIEBACiAgKi8KIHN0YXRpYyBpbnQgZ2FybWluX2ZsdXNoX3F1ZXVlKHN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3ApCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZ2FybWluX3BhY2tldCAqcGt0OwogCiAJaWYgKChnYXJtaW5fZGF0YV9wLT5mbGFncyAmIEZMQUdTX1RIUk9UVExFRCkgPT0gMCkgewogCQlwa3QgPSBwa3RfcG9wKGdhcm1pbl9kYXRhX3ApOwogCQlpZiAocGt0ICE9IE5VTEwpIHsKLQogCQkJc2VuZF90b190dHkoZ2FybWluX2RhdGFfcC0+cG9ydCwgcGt0LT5kYXRhLCBwa3QtPnNpemUpOwogCQkJa2ZyZWUocGt0KTsKIAkJCW1vZF90aW1lcigmZ2FybWluX2RhdGFfcC0+dGltZXIsICgxKStqaWZmaWVzKTsKIAogCQl9IGVsc2UgeworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIAkJCWdhcm1pbl9kYXRhX3AtPmZsYWdzICY9IH5GTEFHU19RVUVVSU5HOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCQl9CiAJfQogCXJldHVybiAwOwpAQCAtMTM3MSwyNiArMTQ1OSw0MSBAQAogCiBzdGF0aWMgdm9pZCBnYXJtaW5fdGhyb3R0bGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCiB7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlzdHJ1Y3QgZ2FybWluX2RhdGEgKiBnYXJtaW5fZGF0YV9wID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwogCiAJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CiAJLyogc2V0IGZsYWcsIGRhdGEgcmVjZWl2ZWQgd2lsbCBiZSBwdXQgaW50byBhIHF1ZXVlCiAJICAgZm9yIGxhdGVyIHByb2Nlc3NpbmcgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ2FybWluX2RhdGFfcC0+bG9jaywgZmxhZ3MpOwogCWdhcm1pbl9kYXRhX3AtPmZsYWdzIHw9IEZMQUdTX1FVRVVJTkd8RkxBR1NfVEhST1RUTEVEOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdhcm1pbl9kYXRhX3AtPmxvY2ssIGZsYWdzKTsKIH0KIAogCiBzdGF0aWMgdm9pZCBnYXJtaW5fdW50aHJvdHRsZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBnYXJtaW5fZGF0YSAqIGdhcm1pbl9kYXRhX3AgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJaW50IHN0YXR1czsKIAogCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAJZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJj0gfkZMQUdTX1RIUk9UVExFRDsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZnYXJtaW5fZGF0YV9wLT5sb2NrLCBmbGFncyk7CiAKIAkvKiBpbiBuYXRpdmUgbW9kZSBzZW5kIHF1ZXVlZCBkYXRhIHRvIHR0eSwgaW4KIAkgICBzZXJpYWwgbW9kZSBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgaGVyZSAqLwogCWlmIChnYXJtaW5fZGF0YV9wLT5tb2RlID09IE1PREVfTkFUSVZFKQogCQlnYXJtaW5fZmx1c2hfcXVldWUoZ2FybWluX2RhdGFfcCk7CisKKwlpZiAoMCAhPSAoZ2FybWluX2RhdGFfcC0+ZmxhZ3MgJiBGTEFHU19CVUxLX0lOX0FDVElWRSkpIHsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9BVE9NSUMpOworCQlpZiAoc3RhdHVzKQorCQkJZGV2X2VycigmcG9ydC0+ZGV2LAorCQkJCSIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLAorCQkJCV9fRlVOQ1RJT05fXywgc3RhdHVzKTsKKwl9CiB9CiAKIApAQCAtMTQyMCwxMSArMTUyMywxMiBAQAogCiAJZGJnKCIlcyIsIF9fRlVOQ1RJT05fXyk7CiAKLQlnYXJtaW5fZGF0YV9wID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdhcm1pbl9kYXRhKSwgR0ZQX0tFUk5FTCk7CisJZ2FybWluX2RhdGFfcCA9IGttYWxsb2MgKHNpemVvZihzdHJ1Y3QgZ2FybWluX2RhdGEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZ2FybWluX2RhdGFfcCA9PSBOVUxMKSB7CiAJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gT3V0IG9mIG1lbW9yeVxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCW1lbXNldCAoZ2FybWluX2RhdGFfcCwgMCwgc2l6ZW9mKHN0cnVjdCBnYXJtaW5fZGF0YSkpOwogCWluaXRfdGltZXIoJmdhcm1pbl9kYXRhX3AtPnRpbWVyKTsKIAlzcGluX2xvY2tfaW5pdCgmZ2FybWluX2RhdGFfcC0+bG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmdhcm1pbl9kYXRhX3AtPnBrdGxpc3QpOwpAQCAtMTQ1OSwxMCArMTU2MywxMCBAQAogLyogQWxsIG9mIHRoZSBkZXZpY2UgaW5mbyBuZWVkZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgdXNiX3NlcmlhbF9kcml2ZXIgZ2FybWluX2RldmljZSA9IHsKIAkuZHJpdmVyID0gewotCQkub3duZXIgPQlUSElTX01PRFVMRSwKLQkJLm5hbWUgPQkJImdhcm1pbl9ncHMiLAorCQkub3duZXIgICAgICAgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgICAgICAgID0gImdhcm1pbl9ncHMiLAogCX0sCi0JLmRlc2NyaXB0aW9uID0JCSJHYXJtaW4gR1BTIHVzYi90dHkiLAorCS5kZXNjcmlwdGlvbiAgICAgICAgID0gIkdhcm1pbiBHUFMgdXNiL3R0eSIsCiAJLmlkX3RhYmxlICAgICAgICAgICAgPSBpZF90YWJsZSwKIAkubnVtX2ludGVycnVwdF9pbiAgICA9IDEsCiAJLm51bV9idWxrX2luICAgICAgICAgPSAxLApAQCAtMTQ4Myw2ICsxNTg3LDcgQEAKIH07CiAKIAorCiBzdGF0aWMgaW50IF9faW5pdCBnYXJtaW5faW5pdCAodm9pZCkKIHsKIAlpbnQgcmV0dmFsOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9nZW5lcmljLmMKaW5kZXggMTcyNzEzNS4uMjFjYmFhMCAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2dlbmVyaWMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvZ2VuZXJpYy5jCkBAIC0xNzUsMTQgKzE3NSwxNCBAQAogCiAJLyogb25seSBkbyBzb21ldGhpbmcgaWYgd2UgaGF2ZSBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCiAJaWYgKHNlcmlhbC0+bnVtX2J1bGtfb3V0KSB7Ci0JCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJCXNwaW5fbG9ja19iaCgmcG9ydC0+bG9jayk7CiAJCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkgewotCQkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCQkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmxvY2spOwogCQkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0JCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwkJc3Bpbl91bmxvY2tfYmgoJnBvcnQtPmxvY2spOwogCiAJCWNvdW50ID0gKGNvdW50ID4gcG9ydC0+YnVsa19vdXRfc2l6ZSkgPyBwb3J0LT5idWxrX291dF9zaXplIDogY291bnQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXBhcS5jCmluZGV4IDk4NDBiYWQuLmNiYzcyNWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pcGFxLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lwYXEuYwpAQCAtNDc5LDYgKzQ3OSw3IEBACiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlEKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlFKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQTlGKSB9LCAvKiBTbWFydFBob25lIFVTQiBTeW5jICovCisJeyBVU0JfREVWSUNFKDB4MEJCNCwgMHgwQkNFKSB9LCAvKiAiSGlnaCBUZWNoIENvbXB1dGVyIENvcnAiICovCiAJeyBVU0JfREVWSUNFKDB4MEJGOCwgMHgxMDAxKSB9LCAvKiBGdWppdHN1IFNpZW1lbnMgQ29tcHV0ZXJzIFVTQiBTeW5jICovCiAJeyBVU0JfREVWSUNFKDB4MEM0NCwgMHgwM0EyKSB9LCAvKiBNb3Rvcm9sYSBpREVOIFNtYXJ0cGhvbmUgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwQzhFLCAweDYwMDApIH0sIC8qIENlc3Njb20gTHV4aWFuIFNlcmllcyAqLwpAQCAtNjUyLDExICs2NTMsNiBAQAogCXBvcnQtPmJ1bGtfb3V0X3NpemUgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBVUkJEQVRBX1NJWkU7CiAJCiAJbXNsZWVwKDEwMDAqaW5pdGlhbF93YWl0KTsKLQkvKiBTdGFydCByZWFkaW5nIGZyb20gdGhlIGRldmljZSAqLwotCXVzYl9maWxsX2J1bGtfdXJiKHBvcnQtPnJlYWRfdXJiLCBzZXJpYWwtPmRldiwgCi0JCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAotCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKLQkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOwogCiAJLyoKIAkgKiBTZW5kIG91dCBjb250cm9sIG1lc3NhZ2Ugb2JzZXJ2ZWQgaW4gd2luOTggc25pZmZzLiBOb3Qgc3VyZSB3aGF0CkBAIC02NzAsMTggKzY2NiwzMSBAQAogCQlyZXN1bHQgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsCiAJCQkJdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwgMHgyMiwgMHgyMSwKIAkJCQkweDEsIDAsIE5VTEwsIDAsIDEwMCk7Ci0JCWlmIChyZXN1bHQgPT0gMCkgewotCQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOwotCQkJaWYgKHJlc3VsdCkgewotCQkJCWVycigiJXMgLSBmYWlsZWQgc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Ci0JCQkJZ290byBlcnJvcjsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9CisJCWlmICghcmVzdWx0KQorCQkJYnJlYWs7CisKIAkJbXNsZWVwKDEwMDApOwogCX0KLQllcnIoIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKLQlnb3RvIGVycm9yOworCisJaWYgKCFyZXRyaWVzICYmIHJlc3VsdCkgeworCQllcnIoIiVzIC0gZmFpbGVkIGRvaW5nIGNvbnRyb2wgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHJlc3VsdCk7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogU3RhcnQgcmVhZGluZyBmcm9tIHRoZSBkZXZpY2UgKi8KKwl1c2JfZmlsbF9idWxrX3VyYihwb3J0LT5yZWFkX3VyYiwgc2VyaWFsLT5kZXYsCisJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShzZXJpYWwtPmRldiwgcG9ydC0+YnVsa19pbl9lbmRwb2ludEFkZHJlc3MpLAorCQkgICAgICBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyLCBwb3J0LT5yZWFkX3VyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJICAgICAgaXBhcV9yZWFkX2J1bGtfY2FsbGJhY2ssIHBvcnQpOworCisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXN1bHQpIHsKKwkJZXJyKCIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKIAogZW5vbWVtOgogCXJlc3VsdCA9IC1FTk9NRU07CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvaXB3LmMKaW5kZXggODczMDZjYi4uODEyYmMyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc2VyaWFsL2lwdy5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pcHcuYwpAQCAtMzk0LDE0ICszOTQsMTQgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0Jc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBvcnQtPmxvY2spOwogCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSkgewotCQlzcGluX3VubG9jaygmcG9ydC0+bG9jayk7CisJCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5sb2NrKTsKIAkJZGJnKCIlcyAtIGFscmVhZHkgd3JpdGluZyIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAwOwogCX0KIAlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0Jc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5sb2NrKTsKIAogCWNvdW50ID0gbWluKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplKTsKIAltZW1jcHkocG9ydC0+YnVsa19vdXRfYnVmZmVyLCBidWYsIGNvdW50KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9pci11c2IuYwppbmRleCAxNzM4YjBiLi4xYjM0OGRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvaXItdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL2lyLXVzYi5jCkBAIC0zNDIsMTQgKzM0MiwxNCBAQAogCWlmIChjb3VudCA9PSAwKQogCQlyZXR1cm4gMDsKIAotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwb3J0LT5sb2NrKTsKIAlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpIHsKLQkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAKIAl0cmFuc2Zlcl9idWZmZXIgPSBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcjsKIAl0cmFuc2Zlcl9zaXplID0gbWluKGNvdW50LCBwb3J0LT5idWxrX291dF9zaXplIC0gMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwva2V5c3Bhbl9wZGEuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCmluZGV4IDQ5YjhkYzAuLjU5ZTc3N2YgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9rZXlzcGFuX3BkYS5jCkBAIC01MTgsMTMgKzUxOCwxMyBAQAogCSAgIHRoZSBUWCB1cmIgaXMgaW4tZmxpZ2h0ICh3YWl0IHVudGlsIGl0IGNvbXBsZXRlcykKIAkgICB0aGUgZGV2aWNlIGlzIGZ1bGwgKHdhaXQgdW50aWwgaXQgc2F5cyB0aGVyZSBpcyByb29tKQogCSovCi0Jc3Bpbl9sb2NrKCZwb3J0LT5sb2NrKTsKKwlzcGluX2xvY2tfYmgoJnBvcnQtPmxvY2spOwogCWlmIChwb3J0LT53cml0ZV91cmJfYnVzeSB8fCBwcml2LT50eF90aHJvdHRsZWQpIHsKLQkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAlwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0Jc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCXNwaW5fdW5sb2NrX2JoKCZwb3J0LT5sb2NrKTsKIAogCS8qIEF0IHRoaXMgcG9pbnQgdGhlIFVSQiBpcyBpbiBvdXIgY29udHJvbCwgbm9ib2R5IGVsc2UgY2FuIHN1Ym1pdCBpdAogCSAgIGFnYWluICh0aGUgb25seSBzdWRkZW4gdHJhbnNpdGlvbiB3YXMgdGhlIG9uZSBmcm9tIEVJTlBST0dSRVNTIHRvCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvbW9zNzg0MC5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NWJmNTcxCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL21vczc4NDAuYwpAQCAtMCwwICsxLDI5NjIgQEAKKy8qCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgKgorICogQ2xlYW4gdXBzIGZyb20gTW9zY2hpcCB2ZXJzaW9uIGFuZCBhIGZldyBpb2N0bCBpbXBsZW1lbnRhdGlvbnMgYnk6CisgKglQYXVsIEIgU2Nocm9lZGVyIDxwc2Nocm9lZGVyICJhdCIgdXBsb2dpeCAiZG90IiBjb20+CisgKgorICogT3JpZ2luYWxseSBiYXNlZCBvbiBkcml2ZXJzL3VzYi9zZXJpYWwvaW9fZWRnZXBvcnQuYyB3aGljaCBpczoKKyAqICAgICAgQ29weXJpZ2h0IChDKSAyMDAwIEluc2lkZSBPdXQgTmV0d29ya3MsIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgIENvcHlyaWdodCAoQykgMjAwMS0yMDAyIEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ0Brcm9haC5jb20+CisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5X2RyaXZlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc2VyaWFsLmg+CisjaW5jbHVkZSA8bGludXgvdXNiLmg+CisjaW5jbHVkZSA8bGludXgvdXNiL3NlcmlhbC5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisKKy8qCisgKiBWZXJzaW9uIEluZm9ybWF0aW9uCisgKi8KKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMy4xIgorI2RlZmluZSBEUklWRVJfREVTQyAiTW9zY2hpcCA3ODQwLzc4MjAgVVNCIFNlcmlhbCBEcml2ZXIiCisKKy8qCisgKiAxNkM1MCBVQVJUIHJlZ2lzdGVyIGRlZmluZXMKKyAqLworCisjZGVmaW5lIExDUl9CSVRTXzUgICAgICAgICAgICAgMHgwMAkvKiA1IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU182ICAgICAgICAgICAgIDB4MDEJLyogNiBiaXRzL2NoYXIgKi8KKyNkZWZpbmUgTENSX0JJVFNfNyAgICAgICAgICAgICAweDAyCS8qIDcgYml0cy9jaGFyICovCisjZGVmaW5lIExDUl9CSVRTXzggICAgICAgICAgICAgMHgwMwkvKiA4IGJpdHMvY2hhciAqLworI2RlZmluZSBMQ1JfQklUU19NQVNLICAgICAgICAgIDB4MDMJLyogTWFzayBmb3IgYml0cy9jaGFyIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1NUT1BfMSAgICAgICAgICAgICAweDAwCS8qIDEgc3RvcCBiaXQgKi8KKyNkZWZpbmUgTENSX1NUT1BfMV81ICAgICAgICAgICAweDA0CS8qIDEuNSBzdG9wIGJpdHMgKGlmIDUgICBiaXRzL2NoYXIpICovCisjZGVmaW5lIExDUl9TVE9QXzIgICAgICAgICAgICAgMHgwNAkvKiAyIHN0b3AgYml0cyAgIChpZiA2LTggYml0cy9jaGFyKSAqLworI2RlZmluZSBMQ1JfU1RPUF9NQVNLICAgICAgICAgIDB4MDQJLyogTWFzayBmb3Igc3RvcCBiaXRzIGZpZWxkICovCisKKyNkZWZpbmUgTENSX1BBUl9OT05FICAgICAgICAgICAweDAwCS8qIE5vIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX09ERCAgICAgICAgICAgIDB4MDgJLyogT2RkIHBhcml0eSAqLworI2RlZmluZSBMQ1JfUEFSX0VWRU4gICAgICAgICAgIDB4MTgJLyogRXZlbiBwYXJpdHkgKi8KKyNkZWZpbmUgTENSX1BBUl9NQVJLICAgICAgICAgICAweDI4CS8qIEZvcmNlIHBhcml0eSBiaXQgdG8gMSAqLworI2RlZmluZSBMQ1JfUEFSX1NQQUNFICAgICAgICAgIDB4MzgJLyogRm9yY2UgcGFyaXR5IGJpdCB0byAwICovCisjZGVmaW5lIExDUl9QQVJfTUFTSyAgICAgICAgICAgMHgzOAkvKiBNYXNrIGZvciBwYXJpdHkgZmllbGQgKi8KKworI2RlZmluZSBMQ1JfU0VUX0JSRUFLICAgICAgICAgIDB4NDAJLyogU2V0IEJyZWFrIGNvbmRpdGlvbiAqLworI2RlZmluZSBMQ1JfRExfRU5BQkxFICAgICAgICAgIDB4ODAJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisKKyNkZWZpbmUgTUNSX0RUUiAgICAgICAgICAgICAgICAweDAxCS8qIEFzc2VydCBEVFIgKi8KKyNkZWZpbmUgTUNSX1JUUyAgICAgICAgICAgICAgICAweDAyCS8qIEFzc2VydCBSVFMgKi8KKyNkZWZpbmUgTUNSX09VVDEgICAgICAgICAgICAgICAweDA0CS8qIExvb3BiYWNrIG9ubHk6IFNldHMgc3RhdGUgb2YgUkkgKi8KKyNkZWZpbmUgTUNSX01BU1RFUl9JRSAgICAgICAgICAweDA4CS8qIEVuYWJsZSBpbnRlcnJ1cHQgb3V0cHV0cyAqLworI2RlZmluZSBNQ1JfTE9PUEJBQ0sgICAgICAgICAgIDB4MTAJLyogU2V0IGludGVybmFsIChkaWdpdGFsKSBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIE1DUl9YT05fQU5ZICAgICAgICAgICAgMHgyMAkvKiBFbmFibGUgYW55IGNoYXIgdG8gZXhpdCBYT0ZGIG1vZGUgKi8KKworI2RlZmluZSBNT1M3ODQwX01TUl9DVFMgICAgICAgIDB4MTAJLyogQ3VycmVudCBzdGF0ZSBvZiBDVFMgKi8KKyNkZWZpbmUgTU9TNzg0MF9NU1JfRFNSICAgICAgICAweDIwCS8qIEN1cnJlbnQgc3RhdGUgb2YgRFNSICovCisjZGVmaW5lIE1PUzc4NDBfTVNSX1JJICAgICAgICAgMHg0MAkvKiBDdXJyZW50IHN0YXRlIG9mIFJJICovCisjZGVmaW5lIE1PUzc4NDBfTVNSX0NEICAgICAgICAgMHg4MAkvKiBDdXJyZW50IHN0YXRlIG9mIENEICovCisKKy8qCisgKiBEZWZpbmVzIHVzZWQgZm9yIHNlbmRpbmcgY29tbWFuZHMgdG8gcG9ydAorICovCisKKyNkZWZpbmUgV0FJVF9GT1JfRVZFUiAgIChIWiAqIDAgKQkvKiB0aW1lb3V0IHVyYiBpcyB3YWl0IGZvciBldmVyICovCisjZGVmaW5lIE1PU19XRFJfVElNRU9VVCAoSFogKiA1ICkJLyogZGVmYXVsdCB1cmIgdGltZW91dCAqLworCisjZGVmaW5lIE1PU19QT1JUMSAgICAgICAweDAyMDAKKyNkZWZpbmUgTU9TX1BPUlQyICAgICAgIDB4MDMwMAorI2RlZmluZSBNT1NfVkVOUkVHICAgICAgMHgwMDAwCisjZGVmaW5lIE1PU19NQVhfUE9SVAkweDAyCisjZGVmaW5lIE1PU19XUklURSAgICAgICAweDBFCisjZGVmaW5lIE1PU19SRUFEICAgICAgICAweDBECisKKy8qIFJlcXVlc3RzICovCisjZGVmaW5lIE1DU19SRF9SVFlQRSAgICAweEMwCisjZGVmaW5lIE1DU19XUl9SVFlQRSAgICAweDQwCisjZGVmaW5lIE1DU19SRFJFUSAgICAgICAweDBECisjZGVmaW5lIE1DU19XUlJFUSAgICAgICAweDBFCisjZGVmaW5lIE1DU19DVFJMX1RJTUVPVVQgICAgICAgIDUwMAorI2RlZmluZSBWRU5ET1JfUkVBRF9MRU5HVEggICAgICAoMHgwMSkKKworI2RlZmluZSBNQVhfTkFNRV9MRU4gICAgNjQKKworI2RlZmluZSBaTFBfUkVHMSAgMHgzQQkJLy9aZXJvX0ZsYWdfUmVnMSAgICA1OAorI2RlZmluZSBaTFBfUkVHNSAgMHgzRQkJLy9aZXJvX0ZsYWdfUmVnNSAgICA2MgorCisvKiBGb3IgaGlnaGVyIGJhdWQgUmF0ZXMgdXNlIFRJT0NFWEJBVUQgKi8KKyNkZWZpbmUgVElPQ0VYQkFVRCAgICAgMHg1NDYyCisKKy8qIHZlbmRvciBpZCBhbmQgZGV2aWNlIGlkIGRlZmluZXMgKi8KKworI2RlZmluZSBVU0JfVkVORE9SX0lEX01PU0NISVAgICAgICAgICAgIDB4OTcxMAorI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83ODQwICAgICAgICAgIDB4Nzg0MAorI2RlZmluZSBNT1NDSElQX0RFVklDRV9JRF83ODIwICAgICAgICAgIDB4NzgyMAorCisvKiBJbnRlcnJ1cHQgUm90aW51ZSBEZWZpbmVzICAgICovCisKKyNkZWZpbmUgU0VSSUFMX0lJUl9STFMgICAgICAweDA2CisjZGVmaW5lIFNFUklBTF9JSVJfTVMgICAgICAgMHgwMAorCisvKgorICogIEVtdWxhdGlvbiBvZiB0aGUgYml0IG1hc2sgb24gdGhlIExJTkUgU1RBVFVTIFJFR0lTVEVSLgorICovCisjZGVmaW5lIFNFUklBTF9MU1JfRFIgICAgICAgMHgwMDAxCisjZGVmaW5lIFNFUklBTF9MU1JfT0UgICAgICAgMHgwMDAyCisjZGVmaW5lIFNFUklBTF9MU1JfUEUgICAgICAgMHgwMDA0CisjZGVmaW5lIFNFUklBTF9MU1JfRkUgICAgICAgMHgwMDA4CisjZGVmaW5lIFNFUklBTF9MU1JfQkkgICAgICAgMHgwMDEwCisKKyNkZWZpbmUgTU9TX01TUl9ERUxUQV9DVFMgICAweDEwCisjZGVmaW5lIE1PU19NU1JfREVMVEFfRFNSICAgMHgyMAorI2RlZmluZSBNT1NfTVNSX0RFTFRBX1JJICAgIDB4NDAKKyNkZWZpbmUgTU9TX01TUl9ERUxUQV9DRCAgICAweDgwCisKKy8vIFNlcmlhbCBQb3J0IHJlZ2lzdGVyIEFkZHJlc3MKKyNkZWZpbmUgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiAgKChfX3UxNikoMHgwMSkpCisjZGVmaW5lIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiAgICAgICgoX191MTYpKDB4MDIpKQorI2RlZmluZSBMSU5FX0NPTlRST0xfUkVHSVNURVIgICAgICAoKF9fdTE2KSgweDAzKSkKKyNkZWZpbmUgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiAgICAgKChfX3UxNikoMHgwNCkpCisjZGVmaW5lIExJTkVfU1RBVFVTX1JFR0lTVEVSICAgICAgICgoX191MTYpKDB4MDUpKQorI2RlZmluZSBNT0RFTV9TVEFUVVNfUkVHSVNURVIgICAgICAoKF9fdTE2KSgweDA2KSkKKyNkZWZpbmUgU0NSQVRDSF9QQURfUkVHSVNURVIgICAgICAgKChfX3UxNikoMHgwNykpCisjZGVmaW5lIERJVklTT1JfTEFUQ0hfTFNCICAgICAgICAgICgoX191MTYpKDB4MDApKQorI2RlZmluZSBESVZJU09SX0xBVENIX01TQiAgICAgICAgICAoKF9fdTE2KSgweDAxKSkKKworI2RlZmluZSBDTEtfTVVMVElfUkVHSVNURVIgICAgICAgICAoKF9fdTE2KSgweDAyKSkKKyNkZWZpbmUgQ0xLX1NUQVJUX1ZBTFVFX1JFR0lTVEVSICAgKChfX3UxNikoMHgwMykpCisKKyNkZWZpbmUgU0VSSUFMX0xDUl9ETEFCICAgICAgICAgICAgKChfX3UxNikoMHgwMDgwKSkKKworLyoKKyAqIFVSQiBQT09MIHJlbGF0ZWQgZGVmaW5lcworICovCisjZGVmaW5lIE5VTV9VUkJTICAgICAgICAgICAgICAgICAgICAgICAgMTYJLyogVVJCIENvdW50ICovCisjZGVmaW5lIFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSAgICAgICAgMzIJLyogVVJCIFNpemUgICovCisKKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfcG9ydF9pZF90YWJsZVtdID0geworCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzg0MCl9LAorCXtVU0JfREVWSUNFKFVTQl9WRU5ET1JfSURfTU9TQ0hJUCwgTU9TQ0hJUF9ERVZJQ0VfSURfNzgyMCl9LAorCXt9CQkJLyogdGVybWluYXRpbmcgZW50cnkgKi8KK307CisKK3N0YXRpYyBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIG1vc2NoaXBfaWRfdGFibGVfY29tYmluZWRbXSA9IHsKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4NDApfSwKKwl7VVNCX0RFVklDRShVU0JfVkVORE9SX0lEX01PU0NISVAsIE1PU0NISVBfREVWSUNFX0lEXzc4MjApfSwKKwl7fQkJCS8qIHRlcm1pbmF0aW5nIGVudHJ5ICovCit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZCk7CisKKy8qIFRoaXMgc3RydWN0dXJlIGhvbGRzIGFsbCBvZiB0aGUgbG9jYWwgcG9ydCBpbmZvcm1hdGlvbiAqLworCitzdHJ1Y3QgbW9zY2hpcF9wb3J0IHsKKwlpbnQgcG9ydF9udW07CQkvKkFjdHVhbCBwb3J0IG51bWJlciBpbiB0aGUgZGV2aWNlKDEsMixldGMpICovCisJc3RydWN0IHVyYiAqd3JpdGVfdXJiOwkvKiB3cml0ZSBVUkIgZm9yIHRoaXMgcG9ydCAqLworCXN0cnVjdCB1cmIgKnJlYWRfdXJiOwkvKiByZWFkIFVSQiBmb3IgdGhpcyBwb3J0ICovCisJX191OCBzaGFkb3dMQ1I7CQkvKiBsYXN0IExDUiB2YWx1ZSByZWNlaXZlZCAqLworCV9fdTggc2hhZG93TUNSOwkJLyogbGFzdCBNQ1IgdmFsdWUgcmVjZWl2ZWQgKi8KKwljaGFyIG9wZW47CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9jaGFzZTsJLyogZm9yIGhhbmRsaW5nIHNsZWVwaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGNoYXNlIHRvIGZpbmlzaCAqLworCXdhaXRfcXVldWVfaGVhZF90IGRlbHRhX21zcl93YWl0OwkvKiBmb3IgaGFuZGxpbmcgc2xlZXBpbmcgd2hpbGUgd2FpdGluZyBmb3IgbXNyIGNoYW5nZSB0byBoYXBwZW4gKi8KKwlpbnQgZGVsdGFfbXNyX2NvbmQ7CisJc3RydWN0IGFzeW5jX2ljb3VudCBpY291bnQ7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsJLyogbG9vcCBiYWNrIHRvIHRoZSBvd25lciBvZiB0aGlzIG9iamVjdCAqLworCisJLypPZmZzZXRzICovCisJX191OCBTcFJlZ09mZnNldDsKKwlfX3U4IENvbnRyb2xSZWdPZmZzZXQ7CisJX191OCBEY3JSZWdPZmZzZXQ7CisJLy9mb3IgcHJvY2Vzc2luZyBjb250cm9sIFVSQlMgaW4gaW50ZXJydXB0IGNvbnRleHQKKwlzdHJ1Y3QgdXJiICpjb250cm9sX3VyYjsKKwljaGFyICpjdHJsX2J1ZjsKKwlpbnQgTXNyTHNyOworCisJc3RydWN0IHVyYiAqd3JpdGVfdXJiX3Bvb2xbTlVNX1VSQlNdOworfTsKKworCitzdGF0aWMgaW50IGRlYnVnOworc3RhdGljIGludCBtb3M3ODQwX251bV9wb3J0czsJLy90aGlzIHNheXMgdGhlIG51bWJlciBvZiBwb3J0cyBpbiB0aGUgZGV2aWNlCitzdGF0aWMgaW50IG1vczc4NDBfbnVtX29wZW5fcG9ydHM7CisKKworLyoKKyAqIG1vczc4NDBfc2V0X3JlZ19zeW5jCisgKiAJVG8gc2V0IHRoZSBDb250cm9sIHJlZ2lzdGVyIGJ5IGNhbGxpbmcgdXNiX2ZpbGxfY29udHJvbF91cmIgZnVuY3Rpb24KKyAqCWJ5IHBhc3NpbmcgdXNiX3NuZGN0cmxwaXBlIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4KKyAqLworCitzdGF0aWMgaW50IG1vczc4NDBfc2V0X3JlZ19zeW5jKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywKKwkJCQlfX3UxNiB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKmRldiA9IHBvcnQtPnNlcmlhbC0+ZGV2OworCXZhbCA9IHZhbCAmIDB4MDBmZjsKKwlkYmcoIm1vczc4NDBfc2V0X3JlZ19zeW5jIG9mZnNldCBpcyAleCwgdmFsdWUgJXhcbiIsIHJlZywgdmFsKTsKKworCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgTUNTX1dSUkVRLAorCQkJICAgICAgIE1DU19XUl9SVFlQRSwgdmFsLCByZWcsIE5VTEwsIDAsCisJCQkgICAgICAgTU9TX1dEUl9USU1FT1VUKTsKK30KKworLyoKKyAqIG1vczc4NDBfZ2V0X3JlZ19zeW5jCisgKiAJVG8gc2V0IHRoZSBVYXJ0IHJlZ2lzdGVyIGJ5IGNhbGxpbmcgdXNiX2ZpbGxfY29udHJvbF91cmIgZnVuY3Rpb24gYnkKKyAqCXBhc3NpbmcgdXNiX3JjdmN0cmxwaXBlIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4KKyAqLworCitzdGF0aWMgaW50IG1vczc4NDBfZ2V0X3JlZ19zeW5jKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywKKwkJCQlfX3UxNiAqIHZhbCkKK3sKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJaW50IHJldCA9IDA7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LCB1c2JfcmN2Y3RybHBpcGUoZGV2LCAwKSwgTUNTX1JEUkVRLAorCQkJICAgICAgTUNTX1JEX1JUWVBFLCAwLCByZWcsIHZhbCwgVkVORE9SX1JFQURfTEVOR1RILAorCQkJICAgICAgTU9TX1dEUl9USU1FT1VUKTsKKwlkYmcoIm1vczc4NDBfZ2V0X3JlZ19zeW5jIG9mZnNldCBpcyAleCwgcmV0dXJuIHZhbCAleFxuIiwgcmVnLCAqdmFsKTsKKwkqdmFsID0gKCp2YWwpICYgMHgwMGZmOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBtb3M3ODQwX3NldF91YXJ0X3JlZworICoJVG8gc2V0IHRoZSBVYXJ0IHJlZ2lzdGVyIGJ5IGNhbGxpbmcgdXNiX2ZpbGxfY29udHJvbF91cmIgZnVuY3Rpb24gYnkKKyAqCXBhc3NpbmcgdXNiX3NuZGN0cmxwaXBlIGZ1bmN0aW9uIGFzIHBhcmFtZXRlci4KKyAqLworCitzdGF0aWMgaW50IG1vczc4NDBfc2V0X3VhcnRfcmVnKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIF9fdTE2IHJlZywKKwkJCQlfX3UxNiB2YWwpCit7CisKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gcG9ydC0+c2VyaWFsLT5kZXY7CisJdmFsID0gdmFsICYgMHgwMGZmOworCS8vIEZvciB0aGUgVUFSVCBjb250cm9sIHJlZ2lzdGVycywgdGhlIGFwcGxpY2F0aW9uIG51bWJlciBuZWVkIHRvIGJlIE9yJ2VkCisJaWYgKG1vczc4NDBfbnVtX3BvcnRzID09IDQpIHsKKwkJdmFsIHw9CisJCSAgICAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gKF9fdTE2KSAocG9ydC0+c2VyaWFsLT5taW5vcikpICsKKwkJICAgICAxKSA8PCA4OworCQlkYmcoIm1vczc4NDBfc2V0X3VhcnRfcmVnIGFwcGxpY2F0aW9uIG51bWJlciBpcyAleFxuIiwgdmFsKTsKKwl9IGVsc2UgeworCQlpZiAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gKF9fdTE2KSAocG9ydC0+c2VyaWFsLT5taW5vcikpID09IDApIHsKKwkJCXZhbCB8PQorCQkJICAgICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLQorCQkJICAgICAgKF9fdTE2KSAocG9ydC0+c2VyaWFsLT5taW5vcikpICsgMSkgPDwgODsKKwkJCWRiZygibW9zNzg0MF9zZXRfdWFydF9yZWcgYXBwbGljYXRpb24gbnVtYmVyIGlzICV4XG4iLAorCQkJICAgIHZhbCk7CisJCX0gZWxzZSB7CisJCQl2YWwgfD0KKwkJCSAgICAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0KKwkJCSAgICAgIChfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSArIDIpIDw8IDg7CisJCQlkYmcoIm1vczc4NDBfc2V0X3VhcnRfcmVnIGFwcGxpY2F0aW9uIG51bWJlciBpcyAleFxuIiwKKwkJCSAgICB2YWwpOworCQl9CisJfQorCXJldHVybiB1c2JfY29udHJvbF9tc2coZGV2LCB1c2Jfc25kY3RybHBpcGUoZGV2LCAwKSwgTUNTX1dSUkVRLAorCQkJICAgICAgIE1DU19XUl9SVFlQRSwgdmFsLCByZWcsIE5VTEwsIDAsCisJCQkgICAgICAgTU9TX1dEUl9USU1FT1VUKTsKKworfQorCisvKgorICogbW9zNzg0MF9nZXRfdWFydF9yZWcKKyAqCVRvIHNldCB0aGUgQ29udHJvbCByZWdpc3RlciBieSBjYWxsaW5nIHVzYl9maWxsX2NvbnRyb2xfdXJiIGZ1bmN0aW9uCisgKglieSBwYXNzaW5nIHVzYl9yY3ZjdHJscGlwZSBmdW5jdGlvbiBhcyBwYXJhbWV0ZXIuCisgKi8KK3N0YXRpYyBpbnQgbW9zNzg0MF9nZXRfdWFydF9yZWcoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgX191MTYgcmVnLAorCQkJCV9fdTE2ICogdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKKwlpbnQgcmV0ID0gMDsKKwlfX3UxNiBXdmFsOworCisJLy9kYmcoImFwcGxpY2F0aW9uIG51bWJlciBpcyAlNHggXG4iLCgoKF9fdTE2KXBvcnQtPm51bWJlciAtIChfX3UxNikocG9ydC0+c2VyaWFsLT5taW5vcikpKzEpPDw4KTsKKwkvKld2YWwgIGlzIHNhbWUgYXMgYXBwbGljYXRpb24gbnVtYmVyICovCisJaWYgKG1vczc4NDBfbnVtX3BvcnRzID09IDQpIHsKKwkJV3ZhbCA9CisJCSAgICAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0gKF9fdTE2KSAocG9ydC0+c2VyaWFsLT5taW5vcikpICsKKwkJICAgICAxKSA8PCA4OworCQlkYmcoIm1vczc4NDBfZ2V0X3VhcnRfcmVnIGFwcGxpY2F0aW9uIG51bWJlciBpcyAleFxuIiwgV3ZhbCk7CisJfSBlbHNlIHsKKwkJaWYgKCgoX191MTYpIHBvcnQtPm51bWJlciAtIChfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSA9PSAwKSB7CisJCQlXdmFsID0KKwkJCSAgICAoKChfX3UxNikgcG9ydC0+bnVtYmVyIC0KKwkJCSAgICAgIChfX3UxNikgKHBvcnQtPnNlcmlhbC0+bWlub3IpKSArIDEpIDw8IDg7CisJCQlkYmcoIm1vczc4NDBfZ2V0X3VhcnRfcmVnIGFwcGxpY2F0aW9uIG51bWJlciBpcyAleFxuIiwKKwkJCSAgICBXdmFsKTsKKwkJfSBlbHNlIHsKKwkJCVd2YWwgPQorCQkJICAgICgoKF9fdTE2KSBwb3J0LT5udW1iZXIgLQorCQkJICAgICAgKF9fdTE2KSAocG9ydC0+c2VyaWFsLT5taW5vcikpICsgMikgPDwgODsKKwkJCWRiZygibW9zNzg0MF9nZXRfdWFydF9yZWcgYXBwbGljYXRpb24gbnVtYmVyIGlzICV4XG4iLAorCQkJICAgIFd2YWwpOworCQl9CisJfQorCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLCBNQ1NfUkRSRVEsCisJCQkgICAgICBNQ1NfUkRfUlRZUEUsIFd2YWwsIHJlZywgdmFsLCBWRU5ET1JfUkVBRF9MRU5HVEgsCisJCQkgICAgICBNT1NfV0RSX1RJTUVPVVQpOworCSp2YWwgPSAoKnZhbCkgJiAweDAwZmY7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgbW9zNzg0MF9kdW1wX3NlcmlhbF9wb3J0KHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCkKK3sKKworCWRiZygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKwlkYmcoIlNwUmVnT2Zmc2V0IGlzICUyeFxuIiwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCk7CisJZGJnKCJDb250cm9sUmVnT2Zmc2V0IGlzICUyeCBcbiIsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCk7CisJZGJnKCJEQ1JSZWdPZmZzZXQgaXMgJTJ4IFxuIiwgbW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQpOworCWRiZygiKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4iKTsKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgIEkgTiBUIEUgUiBGIEEgQyBFICAgRiBVIE4gQyBUIEkgTyBOIFMJCQkqLworLyogICAgICAgICAgICAgSSBOIFQgRSBSIEYgQSBDIEUgICBGIFUgTiBDIFQgSSBPIE4gUwkJCSovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGlubGluZSB2b2lkIG1vczc4NDBfc2V0X3BvcnRfcHJpdmF0ZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCQkgICAgc3RydWN0IG1vc2NoaXBfcG9ydCAqZGF0YSkKK3sKKwl1c2Jfc2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCwgKHZvaWQgKilkYXRhKTsKK30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUoc3RydWN0CisJCQkJCQkJICAgIHVzYl9zZXJpYWxfcG9ydAorCQkJCQkJCSAgICAqcG9ydCkKK3sKKwlyZXR1cm4gKHN0cnVjdCBtb3NjaGlwX3BvcnQgKil1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Cit9CisKK3N0YXRpYyBpbnQgbW9zNzg0MF9oYW5kbGVfbmV3X21zcihzdHJ1Y3QgbW9zY2hpcF9wb3J0ICpwb3J0LCBfX3U4IG5ld19tc3IpCit7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCXN0cnVjdCBhc3luY19pY291bnQgKmljb3VudDsKKwltb3M3ODQwX3BvcnQgPSBwb3J0OworCWljb3VudCA9ICZtb3M3ODQwX3BvcnQtPmljb3VudDsKKwlpZiAobmV3X21zciAmCisJICAgIChNT1NfTVNSX0RFTFRBX0NUUyB8IE1PU19NU1JfREVMVEFfRFNSIHwgTU9TX01TUl9ERUxUQV9SSSB8CisJICAgICBNT1NfTVNSX0RFTFRBX0NEKSkgeworCQlpY291bnQgPSAmbW9zNzg0MF9wb3J0LT5pY291bnQ7CisKKwkJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwkJaWYgKG5ld19tc3IgJiBNT1NfTVNSX0RFTFRBX0NUUykgeworCQkJaWNvdW50LT5jdHMrKzsKKwkJfQorCQlpZiAobmV3X21zciAmIE1PU19NU1JfREVMVEFfRFNSKSB7CisJCQlpY291bnQtPmRzcisrOworCQl9CisJCWlmIChuZXdfbXNyICYgTU9TX01TUl9ERUxUQV9DRCkgeworCQkJaWNvdW50LT5kY2QrKzsKKwkJfQorCQlpZiAobmV3X21zciAmIE1PU19NU1JfREVMVEFfUkkpIHsKKwkJCWljb3VudC0+cm5nKys7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtb3M3ODQwX2hhbmRsZV9uZXdfbHNyKHN0cnVjdCBtb3NjaGlwX3BvcnQgKnBvcnQsIF9fdTggbmV3X2xzcikKK3sKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50ICppY291bnQ7CisKKwlkYmcoIiVzIC0gJTAyeCIsIF9fRlVOQ1RJT05fXywgbmV3X2xzcik7CisKKwlpZiAobmV3X2xzciAmIFNFUklBTF9MU1JfQkkpIHsKKwkJLy8KKwkJLy8gUGFyaXR5IGFuZCBGcmFtaW5nIGVycm9ycyBvbmx5IGNvdW50IGlmIHRoZXkKKwkJLy8gb2NjdXIgZXhjbHVzaXZlIG9mIGEgYnJlYWsgYmVpbmcKKwkJLy8gcmVjZWl2ZWQuCisJCS8vCisJCW5ld19sc3IgJj0gKF9fdTgpIChTRVJJQUxfTFNSX09FIHwgU0VSSUFMX0xTUl9CSSk7CisJfQorCisJLyogdXBkYXRlIGlucHV0IGxpbmUgY291bnRlcnMgKi8KKwlpY291bnQgPSAmcG9ydC0+aWNvdW50OworCWlmIChuZXdfbHNyICYgU0VSSUFMX0xTUl9CSSkgeworCQlpY291bnQtPmJyaysrOworCX0KKwlpZiAobmV3X2xzciAmIFNFUklBTF9MU1JfT0UpIHsKKwkJaWNvdW50LT5vdmVycnVuKys7CisJfQorCWlmIChuZXdfbHNyICYgU0VSSUFMX0xTUl9QRSkgeworCQlpY291bnQtPnBhcml0eSsrOworCX0KKwlpZiAobmV3X2xzciAmIFNFUklBTF9MU1JfRkUpIHsKKwkJaWNvdW50LT5mcmFtZSsrOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgICAgICAgICAgVSBTIEIgIEMgQSBMIEwgQiBBIEMgSyAgIEYgVSBOIEMgVCBJIE8gTiBTICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgIFUgUyBCICBDIEEgTCBMIEIgQSBDIEsgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG1vczc4NDBfY29udHJvbF9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXVuc2lnbmVkIGNoYXIgKmRhdGE7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCV9fdTggcmVndmFsID0gMHgwOworCisJaWYgKCF1cmIpIHsKKwkJZGJnKCIlcyIsICJJbnZhbGlkIFBvaW50ZXIgISEhITpcbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCW1vczc4NDBfcG9ydCA9IChzdHJ1Y3QgbW9zY2hpcF9wb3J0ICopdXJiLT5jb250ZXh0OworCisJZGJnKCIlcyB1cmIgYnVmZmVyIHNpemUgaXMgJWRcbiIsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwlkYmcoIiVzIG1vczc4NDBfcG9ydC0+TXNyTHNyIGlzICVkIHBvcnQgJWRcbiIsIF9fRlVOQ1RJT05fXywKKwkgICAgbW9zNzg0MF9wb3J0LT5Nc3JMc3IsIG1vczc4NDBfcG9ydC0+cG9ydF9udW0pOworCWRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKKwlyZWd2YWwgPSAoX191OCkgZGF0YVswXTsKKwlkYmcoIiVzIGRhdGEgaXMgJXhcbiIsIF9fRlVOQ1RJT05fXywgcmVndmFsKTsKKwlpZiAobW9zNzg0MF9wb3J0LT5Nc3JMc3IgPT0gMCkKKwkJbW9zNzg0MF9oYW5kbGVfbmV3X21zcihtb3M3ODQwX3BvcnQsIHJlZ3ZhbCk7CisJZWxzZSBpZiAobW9zNzg0MF9wb3J0LT5Nc3JMc3IgPT0gMSkKKwkJbW9zNzg0MF9oYW5kbGVfbmV3X2xzcihtb3M3ODQwX3BvcnQsIHJlZ3ZhbCk7CisKKyAgICAgIGV4aXQ6CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IG1vczc4NDBfZ2V0X3JlZyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptY3MsIF9fdTE2IFd2YWwsIF9fdTE2IHJlZywKKwkJCSAgIF9fdTE2ICogdmFsKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBtY3MtPnBvcnQtPnNlcmlhbC0+ZGV2OworCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKmRyID0gTlVMTDsKKwl1bnNpZ25lZCBjaGFyICpidWZmZXIgPSBOVUxMOworCWludCByZXQgPSAwOworCWJ1ZmZlciA9IChfX3U4ICopIG1jcy0+Y3RybF9idWY7CisKKy8vICAgICAgZHI9KHN0cnVjdCB1c2JfY3RybHJlcXVlc3QgKikoYnVmZmVyKTsKKwlkciA9ICh2b2lkICopKGJ1ZmZlciArIDIpOworCWRyLT5iUmVxdWVzdFR5cGUgPSBNQ1NfUkRfUlRZUEU7CisJZHItPmJSZXF1ZXN0ID0gTUNTX1JEUkVROworCWRyLT53VmFsdWUgPSBjcHVfdG9fbGUxNihXdmFsKTsJLy8wOworCWRyLT53SW5kZXggPSBjcHVfdG9fbGUxNihyZWcpOworCWRyLT53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMik7CisKKwl1c2JfZmlsbF9jb250cm9sX3VyYihtY3MtPmNvbnRyb2xfdXJiLCBkZXYsIHVzYl9yY3ZjdHJscGlwZShkZXYsIDApLAorCQkJICAgICAodW5zaWduZWQgY2hhciAqKWRyLCBidWZmZXIsIDIsCisJCQkgICAgIG1vczc4NDBfY29udHJvbF9jYWxsYmFjaywgbWNzKTsKKwltY3MtPmNvbnRyb2xfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMjsKKwlyZXQgPSB1c2Jfc3VibWl0X3VyYihtY3MtPmNvbnRyb2xfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXR1cm4gcmV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfaW50ZXJydXB0X2NhbGxiYWNrCisgKgl0aGlzIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiBmb3Igd2hlbiB3ZSBoYXZlIHJlY2VpdmVkIGRhdGEgb24gdGhlCisgKglpbnRlcnJ1cHQgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG1vczc4NDBfaW50ZXJydXB0X2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJlc3VsdDsKKwlpbnQgbGVuZ3RoOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCV9fdTE2IERhdGE7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlfX3U4IHNwWzVdLCBzdDsKKwlpbnQgaTsKKwlfX3UxNiB3dmFsOworCisJZGJnKCIlcyIsICIgOiBFbnRlcmluZ1xuIik7CisJaWYgKCF1cmIpIHsKKwkJZGJnKCIlcyIsICJJbnZhbGlkIFBvaW50ZXIgISEhITpcbiIpOworCQlyZXR1cm47CisJfQorCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDoKKwkJLyogc3VjY2VzcyAqLworCQlicmVhazsKKwljYXNlIC1FQ09OTlJFU0VUOgorCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCS8qIHRoaXMgdXJiIGlzIHRlcm1pbmF0ZWQsIGNsZWFuIHVwICovCisJCWRiZygiJXMgLSB1cmIgc2h1dHRpbmcgZG93biB3aXRoIHN0YXR1czogJWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cyk7CisJCXJldHVybjsKKwlkZWZhdWx0OgorCQlkYmcoIiVzIC0gbm9uemVybyB1cmIgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKKwkJZ290byBleGl0OworCX0KKworCWxlbmd0aCA9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlzZXJpYWwgPSAoc3RydWN0IHVzYl9zZXJpYWwgKil1cmItPmNvbnRleHQ7CisKKwkvKiBNb3NjaGlwIGdldCA1IGJ5dGVzCisJICogQnl0ZSAxIElJUiBQb3J0IDEgKHBvcnQubnVtYmVyIGlzIDApCisJICogQnl0ZSAyIElJUiBQb3J0IDIgKHBvcnQubnVtYmVyIGlzIDEpCisJICogQnl0ZSAzIElJUiBQb3J0IDMgKHBvcnQubnVtYmVyIGlzIDIpCisJICogQnl0ZSA0IElJUiBQb3J0IDQgKHBvcnQubnVtYmVyIGlzIDMpCisJICogQnl0ZSA1IEZJRk8gc3RhdHVzIGZvciBib3RoICovCisKKwlpZiAobGVuZ3RoICYmIGxlbmd0aCA+IDUpIHsKKwkJZGJnKCIlcyBcbiIsICJXcm9uZyBkYXRhICEhISIpOworCQlyZXR1cm47CisJfQorCisJc3BbMF0gPSAoX191OCkgZGF0YVswXTsKKwlzcFsxXSA9IChfX3U4KSBkYXRhWzFdOworCXNwWzJdID0gKF9fdTgpIGRhdGFbMl07CisJc3BbM10gPSAoX191OCkgZGF0YVszXTsKKwlzdCA9IChfX3U4KSBkYXRhWzRdOworCisJZm9yIChpID0gMDsgaSA8IHNlcmlhbC0+bnVtX3BvcnRzOyBpKyspIHsKKwkJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHNlcmlhbC0+cG9ydFtpXSk7CisJCXd2YWwgPQorCQkgICAgKCgoX191MTYpIHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0KKwkJICAgICAgKF9fdTE2KSAoc2VyaWFsLT5taW5vcikpICsgMSkgPDwgODsKKwkJaWYgKG1vczc4NDBfcG9ydC0+b3BlbikgeworCQkJaWYgKHNwW2ldICYgMHgwMSkgeworCQkJCWRiZygiU1AlZCBObyBJbnRlcnJ1cHQgISEhXG4iLCBpKTsKKwkJCX0gZWxzZSB7CisJCQkJc3dpdGNoIChzcFtpXSAmIDB4MGYpIHsKKwkJCQljYXNlIFNFUklBTF9JSVJfUkxTOgorCQkJCQlkYmcoIlNlcmlhbCBQb3J0ICVkOiBSZWNlaXZlciBzdGF0dXMgZXJyb3Igb3IgIiwgaSk7CisJCQkJCWRiZygiYWRkcmVzcyBiaXQgZGV0ZWN0ZWQgaW4gOS1iaXQgbW9kZVxuIik7CisJCQkJCW1vczc4NDBfcG9ydC0+TXNyTHNyID0gMTsKKwkJCQkJbW9zNzg0MF9nZXRfcmVnKG1vczc4NDBfcG9ydCwgd3ZhbCwKKwkJCQkJCQlMSU5FX1NUQVRVU19SRUdJU1RFUiwKKwkJCQkJCQkmRGF0YSk7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU0VSSUFMX0lJUl9NUzoKKwkJCQkJZGJnKCJTZXJpYWwgUG9ydCAlZDogTW9kZW0gc3RhdHVzIGNoYW5nZVxuIiwgaSk7CisJCQkJCW1vczc4NDBfcG9ydC0+TXNyTHNyID0gMDsKKwkJCQkJbW9zNzg0MF9nZXRfcmVnKG1vczc4NDBfcG9ydCwgd3ZhbCwKKwkJCQkJCQlNT0RFTV9TVEFUVVNfUkVHSVNURVIsCisJCQkJCQkJJkRhdGEpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCX0KKwl9CisgICAgICBleGl0OgorCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisJaWYgKHJlc3VsdCkgeworCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LAorCQkJIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiXG4iLAorCQkJX19GVU5DVElPTl9fLCByZXN1bHQpOworCX0KKworCXJldHVybjsKKworfQorCitzdGF0aWMgaW50IG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCSAgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbikKK3sKKwlpZiAoIXBvcnQpIHsKKwkJZGJnKCIlcyAtIHBvcnQgPT0gTlVMTCIsIGZ1bmN0aW9uKTsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAoIXBvcnQtPnNlcmlhbCkgeworCQlkYmcoIiVzIC0gcG9ydC0+c2VyaWFsID09IE5VTEwiLCBmdW5jdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogSW5saW5lIGZ1bmN0aW9ucyB0byBjaGVjayB0aGUgc2FuaXR5IG9mIGEgcG9pbnRlciB0aGF0IGlzIHBhc3NlZCB0byB1cyAqLworc3RhdGljIGludCBtb3M3ODQwX3NlcmlhbF9wYXJhbm9pYV9jaGVjayhzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsLAorCQkJCQkgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyAtIHNlcmlhbCA9PSBOVUxMIiwgZnVuY3Rpb24pOworCQlyZXR1cm4gLTE7CisJfQorCWlmICghc2VyaWFsLT50eXBlKSB7CisJCWRiZygiJXMgLSBzZXJpYWwtPnR5cGUgPT0gTlVMTCEiLCBmdW5jdGlvbik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsICptb3M3ODQwX2dldF91c2Jfc2VyaWFsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCisJCQkJCQkgY29uc3QgY2hhciAqZnVuY3Rpb24pCit7CisJLyogaWYgbm8gcG9ydCB3YXMgc3BlY2lmaWVkLCBvciBpdCBmYWlscyBhIHBhcmFub2lhIGNoZWNrICovCisJaWYgKCFwb3J0IHx8CisJICAgIG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBmdW5jdGlvbikgfHwKKwkgICAgbW9zNzg0MF9zZXJpYWxfcGFyYW5vaWFfY2hlY2socG9ydC0+c2VyaWFsLCBmdW5jdGlvbikpIHsKKwkJLyogdGhlbiBzYXkgdGhhdCB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgdXNiX3NlcmlhbCB0aGluZywgd2hpY2ggd2lsbCAgICAgICAgICAgICAgICAgICogZW5kIHVwIGdlbnJhdGluZyAtRU5PREVWIHJldHVybiB2YWx1ZXMgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJcmV0dXJuIHBvcnQtPnNlcmlhbDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX2J1bGtfaW5fY2FsbGJhY2sKKyAqCXRoaXMgaXMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciB3aGVuIHdlIGhhdmUgcmVjZWl2ZWQgZGF0YSBvbiB0aGUKKyAqCWJ1bGsgaW4gZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG1vczc4NDBfYnVsa19pbl9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCWludCBzdGF0dXM7CisJdW5zaWduZWQgY2hhciAqZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlpZiAoIXVyYikgeworCQlkYmcoIiVzIiwgIkludmFsaWQgUG9pbnRlciAhISEhOlxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAodXJiLT5zdGF0dXMpIHsKKwkJZGJnKCJub256ZXJvIHJlYWQgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgdXJiLT5zdGF0dXMpOworCQlyZXR1cm47CisJfQorCisJbW9zNzg0MF9wb3J0ID0gKHN0cnVjdCBtb3NjaGlwX3BvcnQgKil1cmItPmNvbnRleHQ7CisJaWYgKCFtb3M3ODQwX3BvcnQpIHsKKwkJZGJnKCIlcyIsICJOVUxMIG1vczc4NDBfcG9ydCBwb2ludGVyIFxuIik7CisJCXJldHVybjsKKwl9CisKKwlwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKiltb3M3ODQwX3BvcnQtPnBvcnQ7CisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiUG9ydCBQYXJhbm9pYSBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuOworCX0KKworCXNlcmlhbCA9IG1vczc4NDBfZ2V0X3VzYl9zZXJpYWwocG9ydCwgX19GVU5DVElPTl9fKTsKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzXG4iLCAiQmFkIHNlcmlhbCBwb2ludGVyICIpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlc1xuIiwgIkVudGVyaW5nLi4uIFxuIik7CisKKwlkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nIC4uLi4uLi4uLi4uIFxuIik7CisKKwlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoKSB7CisJCXR0eSA9IG1vczc4NDBfcG9ydC0+cG9ydC0+dHR5OworCQlpZiAodHR5KSB7CisJCQl0dHlfYnVmZmVyX3JlcXVlc3Rfcm9vbSh0dHksIHVyYi0+YWN0dWFsX2xlbmd0aCk7CisJCQl0dHlfaW5zZXJ0X2ZsaXBfc3RyaW5nKHR0eSwgZGF0YSwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCWRiZygiICVzIFxuIiwgZGF0YSk7CisJCQl0dHlfZmxpcF9idWZmZXJfcHVzaCh0dHkpOworCQl9CisJCW1vczc4NDBfcG9ydC0+aWNvdW50LnJ4ICs9IHVyYi0+YWN0dWFsX2xlbmd0aDsKKwkJZGJnKCJtb3M3ODQwX3BvcnQtPmljb3VudC5yeCBpcyAlZDpcbiIsCisJCSAgICBtb3M3ODQwX3BvcnQtPmljb3VudC5yeCk7CisJfQorCisJaWYgKCFtb3M3ODQwX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISFcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1vczc4NDBfcG9ydC0+cmVhZF91cmItPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJbW9zNzg0MF9wb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7CisKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIobW9zNzg0MF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisKKwkJaWYgKHN0YXR1cykgeworCQkJZGJnKCIgdXNiX3N1Ym1pdF91cmIocmVhZCBidWxrKSBmYWlsZWQsIHN0YXR1cyA9ICVkIiwKKwkJCSAgICBzdGF0dXMpOworCQl9CisJfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfYnVsa19vdXRfZGF0YV9jYWxsYmFjaworICoJdGhpcyBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHdoZW4gd2UgaGF2ZSBmaW5pc2hlZCBzZW5kaW5nIHNlcmlhbCBkYXRhCisgKglvbiB0aGUgYnVsayBvdXQgZW5kcG9pbnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG1vczc4NDBfYnVsa19vdXRfZGF0YV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsCisJCQkJCSAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWlmICghdXJiKSB7CisJCWRiZygiJXMiLCAiSW52YWxpZCBQb2ludGVyICEhISE6XG4iKTsKKwkJcmV0dXJuOworCX0KKworCWlmICh1cmItPnN0YXR1cykgeworCQlkYmcoIm5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6JWRcbiIsIHVyYi0+c3RhdHVzKTsKKwkJcmV0dXJuOworCX0KKworCW1vczc4NDBfcG9ydCA9IChzdHJ1Y3QgbW9zY2hpcF9wb3J0ICopdXJiLT5jb250ZXh0OworCWlmICghbW9zNzg0MF9wb3J0KSB7CisJCWRiZygiJXMiLCAiTlVMTCBtb3M3ODQwX3BvcnQgcG9pbnRlciBcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhtb3M3ODQwX3BvcnQtPnBvcnQsIF9fRlVOQ1RJT05fXykpIHsKKwkJZGJnKCIlcyIsICJQb3J0IFBhcmFub2lhIGZhaWxlZCBcbiIpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyBcbiIsICJFbnRlcmluZyAuLi4uLi4uLi4iKTsKKworCXR0eSA9IG1vczc4NDBfcG9ydC0+cG9ydC0+dHR5OworCisJaWYgKHR0eSAmJiBtb3M3ODQwX3BvcnQtPm9wZW4pIHsKKwkJLyogbGV0IHRoZSB0dHkgZHJpdmVyIHdha2V1cCBpZiBpdCBoYXMgYSBzcGVjaWFsICoKKwkJICogd3JpdGVfd2FrZXVwIGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKwkJaWYgKCh0dHktPmZsYWdzICYgKDEgPDwgVFRZX0RPX1dSSVRFX1dBS0VVUCkpCisJCSAgICAmJiB0dHktPmxkaXNjLndyaXRlX3dha2V1cCkgeworCQkJKHR0eS0+bGRpc2Mud3JpdGVfd2FrZXVwKSAodHR5KTsKKwkJfQorCisJCS8qIHRlbGwgdGhlIHR0eSBkcml2ZXIgdGhhdCBzb21ldGhpbmcgaGFzIGNoYW5nZWQgKi8KKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ0dHktPndyaXRlX3dhaXQpOworCX0KKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgRCBSIEkgViBFIFIgIFQgVCBZICBJIE4gVCBFIFIgRiBBIEMgRSAgRiBVIE4gQyBUIEkgTyBOIFMgICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZkZWYgTUNTU2VyaWFsUHJvYmUKK3N0YXRpYyBpbnQgbW9zNzg0MF9zZXJpYWxfcHJvYmUoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCwKKwkJCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisKKwkvKm5lZWQgdG8gaW1wbGVtZW50IHRoZSBtb2RlX3JlZyByZWFkaW5nIGFuZCB1cGRhdGluZ1wKKwkgICBzdHJ1Y3R1cmVzIHVzYl9zZXJpYWxfIGRldmljZV90eXBlXAorCSAgIChpLmUgbnVtX3BvcnRzLCBudW1fYnVsa2luLGJ1bGtvdXQgZXRjKSAqLworCS8qIEFsc28gd2UgY2FuIHVwZGF0ZSB0aGUgY2hhbmdlcyAgYXR0YWNoICovCisJcmV0dXJuIDE7Cit9CisjZW5kaWYKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX29wZW4KKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gYSBwb3J0IGlzIG9wZW5lZAorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIDAKKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbW9zNzg0MF9vcGVuKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKQoreworCWludCByZXNwb25zZTsKKwlpbnQgajsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCB1cmIgKnVyYjsKKwlfX3UxNiBEYXRhOworCWludCBzdGF0dXM7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiUG9ydCBQYXJhbm9pYSBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorCisJbW9zNzg0MF9udW1fb3Blbl9wb3J0cysrOworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKworCWlmIChtb3M3ODQwX3NlcmlhbF9wYXJhbm9pYV9jaGVjayhzZXJpYWwsIF9fRlVOQ1RJT05fXykpIHsKKwkJZGJnKCIlcyIsICJTZXJpYWwgUGFyYW5vaWEgZmFpbGVkIFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCW1vczc4NDBfcG9ydCA9IG1vczc4NDBfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKKworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+d3JpdGVfdXJiLT5waXBlKTsKKwl1c2JfY2xlYXJfaGFsdChzZXJpYWwtPmRldiwgcG9ydC0+cmVhZF91cmItPnBpcGUpOworCisJLyogSW5pdGlhbGlzaW5nIHRoZSB3cml0ZSB1cmIgcG9vbCAqLworCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgKytqKSB7CisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9BVE9NSUMpOworCQltb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdID0gdXJiOworCisJCWlmICh1cmIgPT0gTlVMTCkgeworCQkJZXJyKCJObyBtb3JlIHVyYnM/Pz8iKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCQl1cmItPnRyYW5zZmVyX2J1ZmZlciA9CisJCSAgICBrbWFsbG9jKFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRSwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiLT50cmFuc2Zlcl9idWZmZXIpIHsKKwkJCWVycigiJXMtb3V0IG9mIG1lbW9yeSBmb3IgdXJiIGJ1ZmZlcnMuIiwgX19GVU5DVElPTl9fKTsKKwkJCWNvbnRpbnVlOworCQl9CisJfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEluaXRpYWxpemUgTUNTNzg0MCAtLSBXcml0ZSBJbml0IHZhbHVlcyB0byBjb3JyZXNwb25kaW5nIFJlZ2lzdGVycworICoKKyAqIFJlZ2lzdGVyIEluZGV4CisgKiAxIDogSUVSCisgKiAyIDogRkNSCisgKiAzIDogTENSCisgKiA0IDogTUNSCisgKgorICogMHgwOCA6IFNQMS8yIENvbnRyb2wgUmVnCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8vTkVFRCB0byBjaGVjayB0aGUgZm9sbG93aW5nIEJsb2NrCisKKwlzdGF0dXMgPSAwOworCURhdGEgPSAweDA7CisJc3RhdHVzID0gbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgJkRhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiUmVhZGluZyBTcHJlZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCURhdGEgfD0gMHg4MDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIndyaXRpbmcgU3ByZWcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCURhdGEgJj0gfjB4ODA7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJ3cml0aW5nIFNwcmVnIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisvL0VuZCBvZiBibG9jayB0byBiZSBjaGVja2VkCisKKwlzdGF0dXMgPSAwOworCURhdGEgPSAweDA7CisJc3RhdHVzID0KKwkgICAgbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJSZWFkaW5nIENvbnRyb2xyZWcgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKwlEYXRhIHw9IDB4MDg7CQkvL0RyaXZlciBkb25lIGJpdAorCURhdGEgfD0gMHgyMDsJCS8vcnhfZGlzYWJsZQorCXN0YXR1cyA9IDA7CisJc3RhdHVzID0KKwkgICAgbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIndyaXRpbmcgQ29udHJvbHJlZyBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCS8vZG8gcmVnaXN0ZXIgc2V0dGluZ3MgaGVyZQorCS8vIFNldCBhbGwgcmVncyB0byB0aGUgZGV2aWNlIGRlZmF1bHQgdmFsdWVzLgorCS8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLworCS8vIEZpcnN0IERpc2FibGUgYWxsIGludGVycnVwdHMuCisJLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCisKKwlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiZGlzYWJsZWluZyBpbnRlcnJ1cHRzIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisJLy8gU2V0IEZJRk9fQ09OVFJPTF9SRUdJU1RFUiB0byB0aGUgZGVmYXVsdCB2YWx1ZQorCURhdGEgPSAweDAwOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgRklGT19DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIldyaXRpbmcgRklGT19DT05UUk9MX1JFR0lTVEVSICBmYWlsZWRcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJRGF0YSA9IDB4Y2Y7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCWRiZygiV3JpdGluZyBGSUZPX0NPTlRST0xfUkVHSVNURVIgIGZhaWxlZFxuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlEYXRhID0gMHgwMzsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCisJRGF0YSA9IDB4MGI7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisKKwlEYXRhID0gMHgwMDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgJkRhdGEpOworCW1vczc4NDBfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKworCURhdGEgfD0gU0VSSUFMX0xDUl9ETEFCOwkvL2RhdGEgbGF0Y2ggZW5hYmxlIGluIExDUiAweDgwCisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJRGF0YSA9IDB4MGM7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX0xTQiwgRGF0YSk7CisKKwlEYXRhID0gMHgwOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgRElWSVNPUl9MQVRDSF9NU0IsIERhdGEpOworCisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX2dldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsICZEYXRhKTsKKworCURhdGEgPSBEYXRhICYgflNFUklBTF9MQ1JfRExBQjsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCisJLy9jbGVhcmluZyBCdWxraW4gYW5kIEJ1bGtvdXQgRmlmbworCURhdGEgPSAweDA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX2dldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0LCAmRGF0YSk7CisKKwlEYXRhID0gRGF0YSB8IDB4MGM7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKworCURhdGEgPSBEYXRhICYgfjB4MGM7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0LCBEYXRhKTsKKwkvL0ZpbmFsbHkgZW5hYmxlIGFsbCBpbnRlcnJ1cHRzCisJRGF0YSA9IDB4MDsKKwlEYXRhID0gMHgwYzsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCisJLy9jbGVhcmluZyByeF9kaXNhYmxlCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9CisJICAgIG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgJkRhdGEpOworCURhdGEgPSBEYXRhICYgfjB4MjA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPQorCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhwb3J0LCBtb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQsIERhdGEpOworCisJLy8gcnhfbmVnYXRlCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9CisJICAgIG1vczc4NDBfZ2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgJkRhdGEpOworCURhdGEgPSBEYXRhIHwgMHgxMDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9CisJICAgIG1vczc4NDBfc2V0X3JlZ19zeW5jKHBvcnQsIG1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCwgRGF0YSk7CisKKwkvKiBmb3JjZSBsb3dfbGF0ZW5jeSBvbiBzbyB0aGF0IG91ciB0dHlfcHVzaCBhY3R1YWxseSBmb3JjZXMgKgorCSAqIHRoZSBkYXRhIHRocm91Z2gsb3RoZXJ3aXNlIGl0IGlzIHNjaGVkdWxlZCwgYW5kIHdpdGggICAgICAqCisJICogaGlnaCBkYXRhIHJhdGVzIChsaWtlIHdpdGggT0hDSSkgZGF0YSBjYW4gZ2V0IGxvc3QuICAgICAgICovCisKKwlpZiAocG9ydC0+dHR5KQorCQlwb3J0LT50dHktPmxvd19sYXRlbmN5ID0gMTsKKy8qIENoZWNrIHRvIHNlZSBpZiB3ZSd2ZSBzZXQgdXAgb3VyIGVuZHBvaW50IGluZm8geWV0ICAgICoKKyAgICAgKiAoY2FuJ3Qgc2V0IGl0IHVwIGluIG1vczc4NDBfc3RhcnR1cCBhcyB0aGUgc3RydWN0dXJlcyAqCisgICAgICogd2VyZSBub3Qgc2V0IHVwIGF0IHRoYXQgdGltZS4pICAgICAgICAgICAgICAgICAgICAgICAgKi8KKwlpZiAobW9zNzg0MF9udW1fb3Blbl9wb3J0cyA9PSAxKSB7CisJCWlmIChzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl9idWZmZXIgPT0gTlVMTCkgeworCisJCQkvKiBzZXQgdXAgaW50ZXJydXB0IHVyYiAqLworCisJCQl1c2JfZmlsbF9pbnRfdXJiKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYiwKKwkJCQkJIHNlcmlhbC0+ZGV2LAorCQkJCQkgdXNiX3JjdmludHBpcGUoc2VyaWFsLT5kZXYsCisJCQkJCQkJc2VyaWFsLT5wb3J0WzBdLT4KKwkJCQkJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCQkJIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX2J1ZmZlciwKKwkJCQkJIHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYi0+CisJCQkJCSB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQkgbW9zNzg0MF9pbnRlcnJ1cHRfY2FsbGJhY2ssCisJCQkJCSBzZXJpYWwsCisJCQkJCSBzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmItPgorCQkJCQkgaW50ZXJ2YWwpOworCisJCQkvKiBzdGFydCBpbnRlcnJ1cHQgcmVhZCBmb3IgbW9zNzg0MCAgICAgICAgICAgICAgICoKKwkJCSAqIHdpbGwgY29udGludWUgYXMgbG9uZyBhcyBtb3M3ODQwIGlzIGNvbm5lY3RlZCAgKi8KKworCQkJcmVzcG9uc2UgPQorCQkJICAgIHVzYl9zdWJtaXRfdXJiKHNlcmlhbC0+cG9ydFswXS0+aW50ZXJydXB0X2luX3VyYiwKKwkJCQkJICAgR0ZQX0tFUk5FTCk7CisJCQlpZiAocmVzcG9uc2UpIHsKKwkJCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwKKwkJCQkgICAgX19GVU5DVElPTl9fLCByZXNwb25zZSk7CisJCQl9CisKKwkJfQorCisJfQorCisJLyogc2VlIGlmIHdlJ3ZlIHNldCB1cCBvdXIgZW5kcG9pbnQgaW5mbyB5ZXQgICAqCisJICogKGNhbid0IHNldCBpdCB1cCBpbiBtb3M3ODQwX3N0YXJ0dXAgYXMgdGhlICAqCisJICogc3RydWN0dXJlcyB3ZXJlIG5vdCBzZXQgdXAgYXQgdGhhdCB0aW1lLikgICAqLworCisJZGJnKCJwb3J0IG51bWJlciBpcyAlZCBcbiIsIHBvcnQtPm51bWJlcik7CisJZGJnKCJzZXJpYWwgbnVtYmVyIGlzICVkIFxuIiwgcG9ydC0+c2VyaWFsLT5taW5vcik7CisJZGJnKCJCdWxraW4gZW5kcG9pbnQgaXMgJWQgXG4iLCBwb3J0LT5idWxrX2luX2VuZHBvaW50QWRkcmVzcyk7CisJZGJnKCJCdWxrT3V0IGVuZHBvaW50IGlzICVkIFxuIiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKwlkYmcoIkludGVycnVwdCBlbmRwb2ludCBpcyAlZCBcbiIsIHBvcnQtPmludGVycnVwdF9pbl9lbmRwb2ludEFkZHJlc3MpOworCWRiZygicG9ydCdzIG51bWJlciBpbiB0aGUgZGV2aWNlIGlzICVkXG4iLCBtb3M3ODQwX3BvcnQtPnBvcnRfbnVtKTsKKwltb3M3ODQwX3BvcnQtPnJlYWRfdXJiID0gcG9ydC0+cmVhZF91cmI7CisKKwkvKiBzZXQgdXAgb3VyIGJ1bGsgaW4gdXJiICovCisKKwl1c2JfZmlsbF9idWxrX3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiLAorCQkJICBzZXJpYWwtPmRldiwKKwkJCSAgdXNiX3JjdmJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKSwKKwkJCSAgcG9ydC0+YnVsa19pbl9idWZmZXIsCisJCQkgIG1vczc4NDBfcG9ydC0+cmVhZF91cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCisJCQkgIG1vczc4NDBfYnVsa19pbl9jYWxsYmFjaywgbW9zNzg0MF9wb3J0KTsKKworCWRiZygibW9zNzg0MF9vcGVuOiBidWxraW4gZW5kcG9pbnQgaXMgJWRcbiIsCisJICAgIHBvcnQtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyZXNzKTsKKwlyZXNwb25zZSA9IHVzYl9zdWJtaXRfdXJiKG1vczc4NDBfcG9ydC0+cmVhZF91cmIsIEdGUF9LRVJORUwpOworCWlmIChyZXNwb25zZSkgeworCQllcnIoIiVzIC0gRXJyb3IgJWQgc3VibWl0dGluZyBjb250cm9sIHVyYiIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHJlc3BvbnNlKTsKKwl9CisKKwkvKiBpbml0aWFsaXplIG91ciB3YWl0IHF1ZXVlcyAqLworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJm1vczc4NDBfcG9ydC0+d2FpdF9jaGFzZSk7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmbW9zNzg0MF9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisKKwkvKiBpbml0aWFsaXplIG91ciBpY291bnQgc3RydWN0dXJlICovCisJbWVtc2V0KCYobW9zNzg0MF9wb3J0LT5pY291bnQpLCAweDAwLCBzaXplb2YobW9zNzg0MF9wb3J0LT5pY291bnQpKTsKKworCS8qIGluaXRpYWxpemUgb3VyIHBvcnQgc2V0dGluZ3MgKi8KKwltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IE1DUl9NQVNURVJfSUU7CS8qIE11c3Qgc2V0IHRvIGVuYWJsZSBpbnRzISAqLworCS8qIHNlbmQgYSBvcGVuIHBvcnQgY29tbWFuZCAqLworCW1vczc4NDBfcG9ydC0+b3BlbiA9IDE7CisJLy9tb3M3ODQwX2NoYW5nZV9wb3J0X3NldHRpbmdzKG1vczc4NDBfcG9ydCxvbGRfdGVybWlvcyk7CisJbW9zNzg0MF9wb3J0LT5pY291bnQudHggPSAwOworCW1vczc4NDBfcG9ydC0+aWNvdW50LnJ4ID0gMDsKKworCWRiZygiXG5cbnVzYl9zZXJpYWwgc2VyaWFsOiV4ICAgICAgIG1vczc4NDBfcG9ydDoleFxuICAgICAgdXNiX3NlcmlhbF9wb3J0IHBvcnQ6JXhcblxuIiwgKHVuc2lnbmVkIGludClzZXJpYWwsICh1bnNpZ25lZCBpbnQpbW9zNzg0MF9wb3J0LCAodW5zaWduZWQgaW50KXBvcnQpOworCisJcmV0dXJuIDA7CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcgorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBrbm93IGhvdyBtYW55CisgKglieXRlcyBvZiBkYXRhIHdlIGN1cnJlbnRseSBoYXZlIG91dHN0YW5kaW5nIGluIHRoZSBwb3J0IChkYXRhIHRoYXQgaGFzCisgKgliZWVuIHdyaXR0ZW4sIGJ1dCBoYXNuJ3QgbWFkZSBpdCBvdXQgdGhlIHBvcnQgeWV0KQorICoJSWYgc3VjY2Vzc2Z1bCwgd2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgbGVmdCB0byBiZSB3cml0dGVuIGluIHRoZQorICoJc3lzdGVtLAorICoJT3RoZXJ3aXNlIHdlIHJldHVybiBhIG5lZ2F0aXZlIGVycm9yIG51bWJlci4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlcihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQoreworCWludCBpOworCWludCBjaGFycyA9IDA7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCisJZGJnKCIlcyBcbiIsICIgbW9zNzg0MF9jaGFyc19pbl9idWZmZXI6ZW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIFxuIiwgIm1vczc4NDBfYnJlYWs6bGVhdmluZyAuLi4uLi4uLi4uLiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyA9PSAtRUlOUFJPR1JFU1MpIHsKKwkJCWNoYXJzICs9IFVSQl9UUkFOU0ZFUl9CVUZGRVJfU0laRTsKKwkJfQorCX0KKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgY2hhcnMpOworCXJldHVybiAoY2hhcnMpOworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBtb3M3ODQwX2Jsb2NrX3VudGlsX3R4X2VtcHR5CisgKgorICoJVGhpcyBmdW5jdGlvbiB3aWxsIGJsb2NrIHRoZSBjbG9zZSB1bnRpbCBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKyAqCQkxLiBUWCBjb3VudCBhcmUgMAorICoJCTIuIFRoZSBtb3M3ODQwIGhhcyBzdG9wcGVkCisgKgkJMy4gQSB0aW1vdXQgb2YgMyBzZWNvbmRzIHdpdGhvdXQgYWN0aXZpdHkgaGFzIGV4cGlyZWQKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgbW9zNzg0MF9ibG9ja191bnRpbF90eF9lbXB0eShzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQpCit7CisJaW50IHRpbWVvdXQgPSBIWiAvIDEwOworCWludCB3YWl0ID0gMzA7CisJaW50IGNvdW50OworCisJd2hpbGUgKDEpIHsKKworCQljb3VudCA9IG1vczc4NDBfY2hhcnNfaW5fYnVmZmVyKG1vczc4NDBfcG9ydC0+cG9ydCk7CisKKwkJLyogQ2hlY2sgZm9yIEJ1ZmZlciBzdGF0dXMgKi8KKwkJaWYgKGNvdW50IDw9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIEJsb2NrIHRoZSB0aHJlYWQgZm9yIGEgd2hpbGUgKi8KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZtb3M3ODQwX3BvcnQtPndhaXRfY2hhc2UsCisJCQkJCSAgICAgICB0aW1lb3V0KTsKKworCQkvKiBObyBhY3Rpdml0eS4uIGNvdW50IGRvd24gc2VjdGlvbiAqLworCQl3YWl0LS07CisJCWlmICh3YWl0ID09IDApIHsKKwkJCWRiZygiJXMgLSBUSU1FT1VUIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKKwkJfSBlbHNlIHsKKwkJCS8qIFJlc2V0IHRpbW91dCB2YWx1ZSBiYWNrIHRvIHNlY29uZHMgKi8KKwkJCXdhaXQgPSAzMDsKKwkJfQorCX0KK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX2Nsb3NlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGEgcG9ydCBpcyBjbG9zZWQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgbW9zNzg0MF9jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwlpbnQgajsKKwlfX3UxNiBEYXRhOworCisJZGJnKCIlc1xuIiwgIm1vczc4NDBfY2xvc2U6ZW50ZXJpbmcuLi4iKTsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIlBvcnQgUGFyYW5vaWEgZmFpbGVkIFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWwgPSBtb3M3ODQwX2dldF91c2Jfc2VyaWFsKHBvcnQsIF9fRlVOQ1RJT05fXyk7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyIsICJTZXJpYWwgUGFyYW5vaWEgZmFpbGVkIFxuIik7CisJCXJldHVybjsKKwl9CisKKwltb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCWZvciAoaiA9IDA7IGogPCBOVU1fVVJCUzsgKytqKQorCQl1c2Jfa2lsbF91cmIobW9zNzg0MF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSk7CisKKwkvKiBGcmVlaW5nIFdyaXRlIFVSQnMgKi8KKwlmb3IgKGogPSAwOyBqIDwgTlVNX1VSQlM7ICsraikgeworCQlpZiAobW9zNzg0MF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSkgeworCQkJaWYgKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbal0tPnRyYW5zZmVyX2J1ZmZlcikKKwkJCQlrZnJlZShtb3M3ODQwX3BvcnQtPndyaXRlX3VyYl9wb29sW2pdLT4KKwkJCQkgICAgICB0cmFuc2Zlcl9idWZmZXIpOworCisJCQl1c2JfZnJlZV91cmIobW9zNzg0MF9wb3J0LT53cml0ZV91cmJfcG9vbFtqXSk7CisJCX0KKwl9CisKKwlpZiAoc2VyaWFsLT5kZXYpIHsKKwkJLyogZmx1c2ggYW5kIGJsb2NrIHVudGlsIHR4IGlzIGVtcHR5ICovCisJCW1vczc4NDBfYmxvY2tfdW50aWxfdHhfZW1wdHkobW9zNzg0MF9wb3J0KTsKKwl9CisKKwkvKiBXaGlsZSBjbG9zaW5nIHBvcnQsIHNodXRkb3duIGFsbCBidWxrIHJlYWQsIHdyaXRlICAqCisJICogYW5kIGludGVycnVwdCByZWFkIGlmIHRoZXkgZXhpc3RzICAgICAgICAgICAgICAgICAgKi8KKwlpZiAoc2VyaWFsLT5kZXYpIHsKKworCQlpZiAobW9zNzg0MF9wb3J0LT53cml0ZV91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gYnVsayB3cml0ZVxuIik7CisJCQl1c2Jfa2lsbF91cmIobW9zNzg0MF9wb3J0LT53cml0ZV91cmIpOworCQl9CisKKwkJaWYgKG1vczc4NDBfcG9ydC0+cmVhZF91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gYnVsayByZWFkXG4iKTsKKwkJCXVzYl9raWxsX3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiKTsKKwkJfQorCQlpZiAoKCZtb3M3ODQwX3BvcnQtPmNvbnRyb2xfdXJiKSkgeworCQkJZGJnKCIlcyIsICJTaHV0ZG93biBjb250cm9sIHJlYWRcbiIpOworCQkJLy8gICAgICB1c2Jfa2lsbF91cmIgKG1vczc4NDBfcG9ydC0+Y29udHJvbF91cmIpOworCisJCX0KKwl9CisvLyAgICAgICAgICAgICAgaWYobW9zNzg0MF9wb3J0LT5jdHJsX2J1ZiAhPSBOVUxMKQorLy8gICAgICAgICAgICAgICAgICAgICAga2ZyZWUobW9zNzg0MF9wb3J0LT5jdHJsX2J1Zik7CisJbW9zNzg0MF9udW1fb3Blbl9wb3J0cy0tOworCWRiZygibW9zNzg0MF9udW1fb3Blbl9wb3J0cyBpbiBjbG9zZSVkOmluIHBvcnQlZFxuIiwKKwkgICAgbW9zNzg0MF9udW1fb3Blbl9wb3J0cywgcG9ydC0+bnVtYmVyKTsKKwlpZiAobW9zNzg0MF9udW1fb3Blbl9wb3J0cyA9PSAwKSB7CisJCWlmIChzZXJpYWwtPnBvcnRbMF0tPmludGVycnVwdF9pbl91cmIpIHsKKwkJCWRiZygiJXMiLCAiU2h1dGRvd24gaW50ZXJydXB0X2luX3VyYlxuIik7CisJCX0KKwl9CisKKwlpZiAobW9zNzg0MF9wb3J0LT53cml0ZV91cmIpIHsKKwkJLyogaWYgdGhpcyB1cmIgaGFkIGEgdHJhbnNmZXIgYnVmZmVyIGFscmVhZHkgKG9sZCB0eCkgZnJlZSBpdCAqLworCisJCWlmIChtb3M3ODQwX3BvcnQtPndyaXRlX3VyYi0+dHJhbnNmZXJfYnVmZmVyICE9IE5VTEwpIHsKKwkJCWtmcmVlKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOworCQl9CisJCXVzYl9mcmVlX3VyYihtb3M3ODQwX3BvcnQtPndyaXRlX3VyYik7CisJfQorCisJRGF0YSA9IDB4MDsKKwltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDAwOworCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIElOVEVSUlVQVF9FTkFCTEVfUkVHSVNURVIsIERhdGEpOworCisJbW9zNzg0MF9wb3J0LT5vcGVuID0gMDsKKworCWRiZygiJXMgXG4iLCAiTGVhdmluZyAuLi4uLi4uLi4uLi4iKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1vczc4NDBfYmxvY2tfdW50aWxfY2hhc2VfcmVzcG9uc2UKKyAqCisgKglUaGlzIGZ1bmN0aW9uIHdpbGwgYmxvY2sgdGhlIGNsb3NlIHVudGlsIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorICoJCTEuIFJlc3BvbnNlIHRvIG91ciBDaGFzZSBjb21lcyBmcm9tIG1vczc4NDAKKyAqCQkyLiBBIHRpbW91dCBvZiAxMCBzZWNvbmRzIHdpdGhvdXQgYWN0aXZpdHkgaGFzIGV4cGlyZWQKKyAqCQkgICAoMUsgb2YgbW9zNzg0MCBkYXRhIEAgMjQwMCBiYXVkID09PiA0IHNlYyB0byBlbXB0eSkKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBtb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKHN0cnVjdCBtb3NjaGlwX3BvcnQKKwkJCQkJICAgICAgICptb3M3ODQwX3BvcnQpCit7CisJaW50IHRpbWVvdXQgPSAxICogSFo7CisJaW50IHdhaXQgPSAxMDsKKwlpbnQgY291bnQ7CisKKwl3aGlsZSAoMSkgeworCQljb3VudCA9IG1vczc4NDBfY2hhcnNfaW5fYnVmZmVyKG1vczc4NDBfcG9ydC0+cG9ydCk7CisKKwkJLyogQ2hlY2sgZm9yIEJ1ZmZlciBzdGF0dXMgKi8KKwkJaWYgKGNvdW50IDw9IDApIHsKKwkJCXJldHVybjsKKwkJfQorCisJCS8qIEJsb2NrIHRoZSB0aHJlYWQgZm9yIGEgd2hpbGUgKi8KKwkJaW50ZXJydXB0aWJsZV9zbGVlcF9vbl90aW1lb3V0KCZtb3M3ODQwX3BvcnQtPndhaXRfY2hhc2UsCisJCQkJCSAgICAgICB0aW1lb3V0KTsKKwkJLyogTm8gYWN0aXZpdHkuLiBjb3VudCBkb3duIHNlY3Rpb24gKi8KKwkJd2FpdC0tOworCQlpZiAod2FpdCA9PSAwKSB7CisJCQlkYmcoIiVzIC0gVElNRU9VVCIsIF9fRlVOQ1RJT05fXyk7CisJCQlyZXR1cm47CisJCX0gZWxzZSB7CisJCQkvKiBSZXNldCB0aW1vdXQgdmFsdWUgYmFjayB0byBzZWNvbmRzICovCisJCQl3YWl0ID0gMTA7CisJCX0KKwl9CisKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX2JyZWFrCisgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIGEgYnJlYWsgdG8gdGhlIHBvcnQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkIG1vczc4NDBfYnJlYWsoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgaW50IGJyZWFrX3N0YXRlKQoreworCXVuc2lnbmVkIGNoYXIgZGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKworCWRiZygiJXMgXG4iLCAiRW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsKKwlkYmcoIm1vczc4NDBfYnJlYWs6IFN0YXJ0XG4iKTsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIlBvcnQgUGFyYW5vaWEgZmFpbGVkIFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWwgPSBtb3M3ODQwX2dldF91c2Jfc2VyaWFsKHBvcnQsIF9fRlVOQ1RJT05fXyk7CisJaWYgKCFzZXJpYWwpIHsKKwkJZGJnKCIlcyIsICJTZXJpYWwgUGFyYW5vaWEgZmFpbGVkIFxuIik7CisJCXJldHVybjsKKwl9CisKKwltb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpIHsKKwkJcmV0dXJuOworCX0KKworCWlmIChzZXJpYWwtPmRldikgeworCisJCS8qIGZsdXNoIGFuZCBibG9jayB1bnRpbCB0eCBpcyBlbXB0eSAqLworCQltb3M3ODQwX2Jsb2NrX3VudGlsX2NoYXNlX3Jlc3BvbnNlKG1vczc4NDBfcG9ydCk7CisJfQorCisJaWYgKGJyZWFrX3N0YXRlID09IC0xKSB7CisJCWRhdGEgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiB8IExDUl9TRVRfQlJFQUs7CisJfSBlbHNlIHsKKwkJZGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TENSICYgfkxDUl9TRVRfQlJFQUs7CisJfQorCisJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBkYXRhOworCWRiZygibWNzNzg0MF9icmVhayBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiBpcyAleFxuIiwKKwkgICAgbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOworCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIExJTkVfQ09OVFJPTF9SRUdJU1RFUiwKKwkJCSAgICAgbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOworCisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfd3JpdGVfcm9vbQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBrbm93IGhvdyBtYW55CisgKglieXRlcyBvZiBkYXRhIHdlIGNhbiBhY2NlcHQgZm9yIGEgc3BlY2lmaWMgcG9ydC4KKyAqCUlmIHN1Y2Nlc3NmdWwsIHdlIHJldHVybiB0aGUgYW1vdW50IG9mIHJvb20gdGhhdCB3ZSBoYXZlIGZvciB0aGlzIHBvcnQKKyAqCU90aGVyd2lzZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBudW1iZXIuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbW9zNzg0MF93cml0ZV9yb29tKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJaW50IGk7CisJaW50IHJvb20gPSAwOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKworCWRiZygiJXMgXG4iLCAiIG1vczc4NDBfd3JpdGVfcm9vbTplbnRlcmluZyAuLi4uLi4uLi4uLiIpOworCisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0IFxuIik7CisJCWRiZygiJXMgXG4iLCAiIG1vczc4NDBfd3JpdGVfcm9vbTpsZWF2aW5nIC4uLi4uLi4uLi4uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwltb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CisJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKSB7CisJCWRiZygiJXMgXG4iLCAibW9zNzg0MF9icmVhazpsZWF2aW5nIC4uLi4uLi4uLi4uIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgTlVNX1VSQlM7ICsraSkgeworCQlpZiAobW9zNzg0MF9wb3J0LT53cml0ZV91cmJfcG9vbFtpXS0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQkJcm9vbSArPSBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJCX0KKwl9CisKKwlkYmcoIiVzIC0gcmV0dXJucyAlZCIsIF9fRlVOQ1RJT05fXywgcm9vbSk7CisJcmV0dXJuIChyb29tKTsKKworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfd3JpdGUKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gZGF0YSBzaG91bGQgYmUgd3JpdHRlbiB0bworICoJdGhlIHBvcnQuCisgKglJZiBzdWNjZXNzZnVsLCB3ZSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3cml0dGVuLCBvdGhlcndpc2Ugd2UKKyAqICAgICAgcmV0dXJuIGEgbmVnYXRpdmUgZXJyb3IgbnVtYmVyLgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1vczc4NDBfd3JpdGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhLCBpbnQgY291bnQpCit7CisJaW50IHN0YXR1czsKKwlpbnQgaTsKKwlpbnQgYnl0ZXNfc2VudCA9IDA7CisJaW50IHRyYW5zZmVyX3NpemU7CisJaW50IGZyb21fdXNlciA9IDA7CisKKwlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQ7CisJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJLy9fX3UxNiBEYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmN1cnJlbnRfcG9zaXRpb24gPSBkYXRhOworCXVuc2lnbmVkIGNoYXIgKmRhdGExOworCWRiZygiJXMgXG4iLCAiZW50ZXJpbmcgLi4uLi4uLi4uLi4iKTsKKwkvL2RiZygibW9zNzg0MF93cml0ZTogbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgaXMgJXhcbiIsbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOworCisjaWZkZWYgTk9UTU9TNzg0MAorCURhdGEgPSAweDAwOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gbW9zNzg0MF9nZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCAmRGF0YSk7CisJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCWRiZygibW9zNzg0MF93cml0ZTogTElORV9DT05UUk9MX1JFR0lTVEVSIGlzICV4XG4iLCBEYXRhKTsKKwlkYmcoIm1vczc4NDBfd3JpdGU6IG1vczc4NDBfcG9ydC0+c2hhZG93TENSIGlzICV4XG4iLAorCSAgICBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUik7CisKKwkvL0RhdGEgPSAweDAzOworCS8vc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCxMSU5FX0NPTlRST0xfUkVHSVNURVIsRGF0YSk7CisJLy9tb3M3ODQwX3BvcnQtPnNoYWRvd0xDUj1EYXRhOy8vTmVlZCB0byBhZGQgbGF0ZXIKKworCURhdGEgfD0gU0VSSUFMX0xDUl9ETEFCOwkvL2RhdGEgbGF0Y2ggZW5hYmxlIGluIExDUiAweDgwCisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLy9EYXRhID0gMHgwYzsKKwkvL3N0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsRElWSVNPUl9MQVRDSF9MU0IsRGF0YSk7CisJRGF0YSA9IDB4MDA7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX2dldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX0xTQiwgJkRhdGEpOworCWRiZygibW9zNzg0MF93cml0ZTpETEwgdmFsdWUgaXMgJXhcbiIsIERhdGEpOworCisJRGF0YSA9IDB4MDsKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfZ2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTVNCLCAmRGF0YSk7CisJZGJnKCJtb3M3ODQwX3dyaXRlOkRMTSB2YWx1ZSBpcyAleFxuIiwgRGF0YSk7CisKKwlEYXRhID0gRGF0YSAmIH5TRVJJQUxfTENSX0RMQUI7CisJZGJnKCJtb3M3ODQwX3dyaXRlOiBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiBpcyAleFxuIiwKKwkgICAgbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKyNlbmRpZgorCisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiUG9ydCBQYXJhbm9pYSBmYWlsZWQgXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKKwlpZiAobW9zNzg0MF9zZXJpYWxfcGFyYW5vaWFfY2hlY2soc2VyaWFsLCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiU2VyaWFsIFBhcmFub2lhIGZhaWxlZCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkgeworCQlkYmcoIiVzIiwgIm1vczc4NDBfcG9ydCBpcyBOVUxMXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCS8qIHRyeSB0byBmaW5kIGEgZnJlZSB1cmIgaW4gdGhlIGxpc3QgKi8KKwl1cmIgPSBOVUxMOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9VUkJTOyArK2kpIHsKKwkJaWYgKG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV0tPnN0YXR1cyAhPSAtRUlOUFJPR1JFU1MpIHsKKwkJCXVyYiA9IG1vczc4NDBfcG9ydC0+d3JpdGVfdXJiX3Bvb2xbaV07CisJCQlkYmcoIlxuVVJCOiVkIiwgaSk7CisJCQlicmVhazsKKwkJfQorCX0KKworCWlmICh1cmIgPT0gTlVMTCkgeworCQlkYmcoIiVzIC0gbm8gbW9yZSBmcmVlIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCQlnb3RvIGV4aXQ7CisJfQorCisJaWYgKHVyYi0+dHJhbnNmZXJfYnVmZmVyID09IE5VTEwpIHsKKwkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPQorCQkgICAga21hbGxvYyhVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkUsIEdGUF9LRVJORUwpOworCisJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciA9PSBOVUxMKSB7CisJCQllcnIoIiVzIG5vIG1vcmUga2VybmVsIG1lbW9yeS4uLiIsIF9fRlVOQ1RJT05fXyk7CisJCQlnb3RvIGV4aXQ7CisJCX0KKwl9CisJdHJhbnNmZXJfc2l6ZSA9IG1pbihjb3VudCwgVVJCX1RSQU5TRkVSX0JVRkZFUl9TSVpFKTsKKworCWlmIChmcm9tX3VzZXIpIHsKKwkJaWYgKGNvcHlfZnJvbV91c2VyCisJCSAgICAodXJiLT50cmFuc2Zlcl9idWZmZXIsIGN1cnJlbnRfcG9zaXRpb24sIHRyYW5zZmVyX3NpemUpKSB7CisJCQlieXRlc19zZW50ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXhpdDsKKwkJfQorCX0gZWxzZSB7CisJCW1lbWNweSh1cmItPnRyYW5zZmVyX2J1ZmZlciwgY3VycmVudF9wb3NpdGlvbiwgdHJhbnNmZXJfc2l6ZSk7CisJfQorCisJLyogZmlsbCB1cmIgd2l0aCBkYXRhIGFuZCBzdWJtaXQgICovCisJdXNiX2ZpbGxfYnVsa191cmIodXJiLAorCQkJICBzZXJpYWwtPmRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKHNlcmlhbC0+ZGV2LAorCQkJCQkgIHBvcnQtPmJ1bGtfb3V0X2VuZHBvaW50QWRkcmVzcyksCisJCQkgIHVyYi0+dHJhbnNmZXJfYnVmZmVyLAorCQkJICB0cmFuc2Zlcl9zaXplLAorCQkJICBtb3M3ODQwX2J1bGtfb3V0X2RhdGFfY2FsbGJhY2ssIG1vczc4NDBfcG9ydCk7CisKKwlkYXRhMSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCWRiZygiXG5idWxrb3V0IGVuZHBvaW50IGlzICVkIiwgcG9ydC0+YnVsa19vdXRfZW5kcG9pbnRBZGRyZXNzKTsKKworCS8qIHNlbmQgaXQgZG93biB0aGUgcGlwZSAqLworCXN0YXR1cyA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CisKKwlpZiAoc3RhdHVzKSB7CisJCWVycigiJXMgLSB1c2Jfc3VibWl0X3VyYih3cml0ZSBidWxrKSBmYWlsZWQgd2l0aCBzdGF0dXMgPSAlZCIsCisJCSAgICBfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CisJCWJ5dGVzX3NlbnQgPSBzdGF0dXM7CisJCWdvdG8gZXhpdDsKKwl9CisJYnl0ZXNfc2VudCA9IHRyYW5zZmVyX3NpemU7CisJbW9zNzg0MF9wb3J0LT5pY291bnQudHggKz0gdHJhbnNmZXJfc2l6ZTsKKwlkYmcoIm1vczc4NDBfcG9ydC0+aWNvdW50LnR4IGlzICVkOlxuIiwgbW9zNzg0MF9wb3J0LT5pY291bnQudHgpOworICAgICAgZXhpdDoKKworCXJldHVybiBieXRlc19zZW50OworCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zNzg0MF90aHJvdHRsZQorICoJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgdGhlIHR0eSBkcml2ZXIgd2hlbiBpdCB3YW50cyB0byBzdG9wIHRoZSBkYXRhCisgKgliZWluZyByZWFkIGZyb20gdGhlIHBvcnQuCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIG1vczc4NDBfdGhyb3R0bGUoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQ7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzOworCisJaWYgKG1vczc4NDBfcG9ydF9wYXJhbm9pYV9jaGVjayhwb3J0LCBfX0ZVTkNUSU9OX18pKSB7CisJCWRiZygiJXMiLCAiSW52YWxpZCBwb3J0IFxuIik7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIi0gcG9ydCAlZFxuIiwgcG9ydC0+bnVtYmVyKTsKKworCW1vczc4NDBfcG9ydCA9IG1vczc4NDBfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKKworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaWYgKCFtb3M3ODQwX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlc1xuIiwgInBvcnQgbm90IG9wZW5lZCIpOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uIFxuIik7CisKKwl0dHkgPSBwb3J0LT50dHk7CisJaWYgKCF0dHkpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBhdmFpbGFibGUiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBYT04vWE9GRiwgc2VuZCB0aGUgc3RvcCBjaGFyYWN0ZXIgKi8KKwlpZiAoSV9JWE9GRih0dHkpKSB7CisJCXVuc2lnbmVkIGNoYXIgc3RvcF9jaGFyID0gU1RPUF9DSEFSKHR0eSk7CisJCXN0YXR1cyA9IG1vczc4NDBfd3JpdGUocG9ydCwgJnN0b3BfY2hhciwgMSk7CisJCWlmIChzdGF0dXMgPD0gMCkgeworCQkJcmV0dXJuOworCQl9CisJfQorCisJLyogaWYgd2UgYXJlIGltcGxlbWVudGluZyBSVFMvQ1RTLCB0b2dnbGUgdGhhdCBsaW5lICovCisJaWYgKHR0eS0+dGVybWlvcy0+Y19jZmxhZyAmIENSVFNDVFMpIHsKKwkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgJj0gfk1DUl9SVFM7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLAorCQkJCQkgbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IpOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwlyZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zNzg0MF91bnRocm90dGxlCisgKgl0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSB0aGUgdHR5IGRyaXZlciB3aGVuIGl0IHdhbnRzIHRvIHJlc3VtZSB0aGUgZGF0YQorICoJYmVpbmcgcmVhZCBmcm9tIHRoZSBwb3J0IChjYWxsZWQgYWZ0ZXIgU2VyaWFsVGhyb3R0bGUgaXMgY2FsbGVkKQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgbW9zNzg0MF91bnRocm90dGxlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCA9IG1vczc4NDBfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm47CisKKwlpZiAoIW1vczc4NDBfcG9ydC0+b3BlbikgeworCQlkYmcoIiVzIC0gcG9ydCBub3Qgb3BlbmVkIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWRiZygiJXMiLCAiRW50ZXJpbmcgLi4uLi4uLi4uLiBcbiIpOworCisJdHR5ID0gcG9ydC0+dHR5OworCWlmICghdHR5KSB7CisJCWRiZygiJXMgLSBubyB0dHkgYXZhaWxhYmxlIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGlmIHdlIGFyZSBpbXBsZW1lbnRpbmcgWE9OL1hPRkYsIHNlbmQgdGhlIHN0YXJ0IGNoYXJhY3RlciAqLworCWlmIChJX0lYT0ZGKHR0eSkpIHsKKwkJdW5zaWduZWQgY2hhciBzdGFydF9jaGFyID0gU1RBUlRfQ0hBUih0dHkpOworCQlzdGF0dXMgPSBtb3M3ODQwX3dyaXRlKHBvcnQsICZzdGFydF9jaGFyLCAxKTsKKwkJaWYgKHN0YXR1cyA8PSAwKSB7CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBpZiB3ZSBhcmUgaW1wbGVtZW50aW5nIFJUUy9DVFMsIHRvZ2dsZSB0aGF0IGxpbmUgKi8KKwlpZiAodHR5LT50ZXJtaW9zLT5jX2NmbGFnICYgQ1JUU0NUUykgeworCQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiB8PSBNQ1JfUlRTOworCQlzdGF0dXMgPSAwOworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwKKwkJCQkJIG1vczc4NDBfcG9ydC0+c2hhZG93TUNSKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJldHVybjsKK30KKworc3RhdGljIGludCBtb3M3ODQwX3Rpb2NtZ2V0KHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwl1bnNpZ25lZCBpbnQgcmVzdWx0OworCV9fdTE2IG1zcjsKKwlfX3UxNiBtY3I7CisJaW50IHN0YXR1cyA9IDA7CisJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOworCisJZGJnKCIlcyAtIHBvcnQgJWQiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCisJc3RhdHVzID0gbW9zNzg0MF9nZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fU1RBVFVTX1JFR0lTVEVSLCAmbXNyKTsKKwlzdGF0dXMgPSBtb3M3ODQwX2dldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCAmbWNyKTsKKwlyZXN1bHQgPSAoKG1jciAmIE1DUl9EVFIpID8gVElPQ01fRFRSIDogMCkKKwkgICAgfCAoKG1jciAmIE1DUl9SVFMpID8gVElPQ01fUlRTIDogMCkKKwkgICAgfCAoKG1jciAmIE1DUl9MT09QQkFDSykgPyBUSU9DTV9MT09QIDogMCkKKwkgICAgfCAoKG1zciAmIE1PUzc4NDBfTVNSX0NUUykgPyBUSU9DTV9DVFMgOiAwKQorCSAgICB8ICgobXNyICYgTU9TNzg0MF9NU1JfQ0QpID8gVElPQ01fQ0FSIDogMCkKKwkgICAgfCAoKG1zciAmIE1PUzc4NDBfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkKKwkgICAgfCAoKG1zciAmIE1PUzc4NDBfTVNSX0RTUikgPyBUSU9DTV9EU1IgOiAwKTsKKworCWRiZygiJXMgLSAweCUwNFgiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW50IG1vczc4NDBfdGlvY21zZXQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKQoreworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwl1bnNpZ25lZCBpbnQgbWNyOworCXVuc2lnbmVkIGludCBzdGF0dXM7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCW1vczc4NDBfcG9ydCA9IG1vczc4NDBfZ2V0X3BvcnRfcHJpdmF0ZShwb3J0KTsKKworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwltY3IgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9SVFMpCisJCW1jciAmPSB+TUNSX1JUUzsKKwlpZiAoY2xlYXIgJiBUSU9DTV9EVFIpCisJCW1jciAmPSB+TUNSX0RUUjsKKwlpZiAoY2xlYXIgJiBUSU9DTV9MT09QKQorCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKworCWlmIChzZXQgJiBUSU9DTV9SVFMpCisJCW1jciB8PSBNQ1JfUlRTOworCWlmIChzZXQgJiBUSU9DTV9EVFIpCisJCW1jciB8PSBNQ1JfRFRSOworCWlmIChzZXQgJiBUSU9DTV9MT09QKQorCQltY3IgfD0gTUNSX0xPT1BCQUNLOworCisJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgPSBtY3I7CisKKwlzdGF0dXMgPSAwOworCXN0YXR1cyA9IG1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIG1jcik7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJzZXR0aW5nIE1PREVNX0NPTlRST0xfUkVHSVNURVIgRmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfY2FsY19iYXVkX3JhdGVfZGl2aXNvcgorICoJdGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBwcm9wZXIgYmF1ZCByYXRlIGRpdmlzb3IgZm9yIHRoZSBzcGVjaWZpZWQKKyAqCWJhdWQgcmF0ZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgbW9zNzg0MF9jYWxjX2JhdWRfcmF0ZV9kaXZpc29yKGludCBiYXVkUmF0ZSwgaW50ICpkaXZpc29yLAorCQkJCQkgIF9fdTE2ICogY2xrX3NlbF92YWwpCit7CisKKwlkYmcoIiVzIC0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWRSYXRlKTsKKworCWlmIChiYXVkUmF0ZSA8PSAxMTUyMDApIHsKKwkJKmRpdmlzb3IgPSAxMTUyMDAgLyBiYXVkUmF0ZTsKKwkJKmNsa19zZWxfdmFsID0gMHgwOworCX0KKwlpZiAoKGJhdWRSYXRlID4gMTE1MjAwKSAmJiAoYmF1ZFJhdGUgPD0gMjMwNDAwKSkgeworCQkqZGl2aXNvciA9IDIzMDQwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDEwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gMjMwNDAwKSAmJiAoYmF1ZFJhdGUgPD0gNDAzMjAwKSkgeworCQkqZGl2aXNvciA9IDQwMzIwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDIwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gNDAzMjAwKSAmJiAoYmF1ZFJhdGUgPD0gNDYwODAwKSkgeworCQkqZGl2aXNvciA9IDQ2MDgwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDMwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gNDYwODAwKSAmJiAoYmF1ZFJhdGUgPD0gODA2NDAwKSkgeworCQkqZGl2aXNvciA9IDgwNjQwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDQwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gODA2NDAwKSAmJiAoYmF1ZFJhdGUgPD0gOTIxNjAwKSkgeworCQkqZGl2aXNvciA9IDkyMTYwMCAvIGJhdWRSYXRlOworCQkqY2xrX3NlbF92YWwgPSAweDUwOworCX0gZWxzZSBpZiAoKGJhdWRSYXRlID4gOTIxNjAwKSAmJiAoYmF1ZFJhdGUgPD0gMTU3Mjg2NCkpIHsKKwkJKmRpdmlzb3IgPSAxNTcyODY0IC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4NjA7CisJfSBlbHNlIGlmICgoYmF1ZFJhdGUgPiAxNTcyODY0KSAmJiAoYmF1ZFJhdGUgPD0gMzE0NTcyOCkpIHsKKwkJKmRpdmlzb3IgPSAzMTQ1NzI4IC8gYmF1ZFJhdGU7CisJCSpjbGtfc2VsX3ZhbCA9IDB4NzA7CisJfQorCXJldHVybiAwOworCisjaWZkZWYgTk9UTUNTNzg0MAorCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobW9zNzg0MF9kaXZpc29yX3RhYmxlKTsgaSsrKSB7CisJCWlmIChtb3M3ODQwX2Rpdmlzb3JfdGFibGVbaV0uQmF1ZFJhdGUgPT0gYmF1ZHJhdGUpIHsKKwkJCSpkaXZpc29yID0gbW9zNzg0MF9kaXZpc29yX3RhYmxlW2ldLkRpdmlzb3I7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCS8qIEFmdGVyIHRyeWluZyBmb3IgYWxsIHRoZSBzdGFuZGFyZCBiYXVkIHJhdGVzICAgICoKKwkgKiBUcnkgY2FsY3VsYXRpbmcgdGhlIGRpdmlzb3IgZm9yIHRoaXMgYmF1ZCByYXRlICAqLworCisJaWYgKGJhdWRyYXRlID4gNzUgJiYgYmF1ZHJhdGUgPCAyMzA0MDApIHsKKwkJLyogZ2V0IHRoZSBkaXZpc29yICovCisJCWN1c3RvbSA9IChfX3UxNikgKDIzMDQwMEwgLyBiYXVkcmF0ZSk7CisKKwkJLyogQ2hlY2sgZm9yIHJvdW5kIG9mZiAqLworCQlyb3VuZDEgPSAoX191MTYpICgyMzA0MDAwTCAvIGJhdWRyYXRlKTsKKwkJcm91bmQgPSAoX191MTYpIChyb3VuZDEgLSAoY3VzdG9tICogMTApKTsKKwkJaWYgKHJvdW5kID4gNCkgeworCQkJY3VzdG9tKys7CisJCX0KKwkJKmRpdmlzb3IgPSBjdXN0b207CisKKwkJZGJnKCIgQmF1ZCAlZCA9ICVkXG4iLCBiYXVkcmF0ZSwgY3VzdG9tKTsKKwkJcmV0dXJuIDA7CisJfQorCisJZGJnKCIlc1xuIiwgIiBCYXVkIGNhbGN1bGF0aW9uIEZhaWxlZC4uLiIpOworCXJldHVybiAtMTsKKyNlbmRpZgorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlCisgKgl0aGlzIGZ1bmN0aW9uIHNlbmRzIHRoZSBwcm9wZXIgY29tbWFuZCB0byBjaGFuZ2UgdGhlIGJhdWQgcmF0ZSBvZiB0aGUKKyAqCXNwZWNpZmllZCBwb3J0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1vczc4NDBfc2VuZF9jbWRfd3JpdGVfYmF1ZF9yYXRlKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCwKKwkJCQkJICAgIGludCBiYXVkUmF0ZSkKK3sKKwlpbnQgZGl2aXNvciA9IDA7CisJaW50IHN0YXR1czsKKwlfX3UxNiBEYXRhOworCXVuc2lnbmVkIGNoYXIgbnVtYmVyOworCV9fdTE2IGNsa19zZWxfdmFsOworCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQ7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpCisJCXJldHVybiAtMTsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKW1vczc4NDBfcG9ydC0+cG9ydDsKKwlpZiAobW9zNzg0MF9wb3J0X3BhcmFub2lhX2NoZWNrKHBvcnQsIF9fRlVOQ1RJT05fXykpIHsKKwkJZGJnKCIlcyIsICJJbnZhbGlkIHBvcnQgXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWlmIChtb3M3ODQwX3NlcmlhbF9wYXJhbm9pYV9jaGVjayhwb3J0LT5zZXJpYWwsIF9fRlVOQ1RJT05fXykpIHsKKwkJZGJnKCIlcyIsICJJbnZhbGlkIFNlcmlhbCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJZGJnKCIlcyIsICJFbnRlcmluZyAuLi4uLi4uLi4uIFxuIik7CisKKwludW1iZXIgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPm51bWJlciAtIG1vczc4NDBfcG9ydC0+cG9ydC0+c2VyaWFsLT5taW5vcjsKKworCWRiZygiJXMgLSBwb3J0ID0gJWQsIGJhdWQgPSAlZCIsIF9fRlVOQ1RJT05fXywKKwkgICAgbW9zNzg0MF9wb3J0LT5wb3J0LT5udW1iZXIsIGJhdWRSYXRlKTsKKwkvL3Jlc2V0IGNsa191YXJ0X3NlbCBpbiBzcHJlZ09mZnNldAorCWlmIChiYXVkUmF0ZSA+IDExNTIwMCkgeworI2lmZGVmIEhXX2Zsb3dfY29udHJvbAorCQkvL05PVEU6IG5lZWQgdG8gc2VlIHRoZSBwdGhlciByZWdpc3RlciB0byBtb2RpZnkKKwkJLy9zZXR0aW5nIGgvdyBmbG93IGNvbnRyb2wgYml0IHRvIDE7CisJCXN0YXR1cyA9IDA7CisJCURhdGEgPSAweDJiOworCQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiA9IERhdGE7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorI2VuZGlmCisKKwl9IGVsc2UgeworI2lmZGVmIEhXX2Zsb3dfY29udHJvbAorCQkvL3NldHRpbmcgaC93IGZsb3cgY29udHJvbCBiaXQgdG8gMDsKKwkJc3RhdHVzID0gMDsKKwkJRGF0YSA9IDB4YjsKKwkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgPSBEYXRhOworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKyNlbmRpZgorCisJfQorCisJaWYgKDEpCQkJLy9iYXVkUmF0ZSA8PSAxMTUyMDApCisJeworCQljbGtfc2VsX3ZhbCA9IDB4MDsKKwkJRGF0YSA9IDB4MDsKKwkJc3RhdHVzID0gMDsKKwkJc3RhdHVzID0KKwkJICAgIG1vczc4NDBfY2FsY19iYXVkX3JhdGVfZGl2aXNvcihiYXVkUmF0ZSwgJmRpdmlzb3IsCisJCQkJCQkgICAmY2xrX3NlbF92YWwpOworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9nZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwKKwkJCQkJICZEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygicmVhZGluZyBzcHJlZyBmYWlsZWQgaW4gc2V0X3NlcmlhbF9iYXVkXG4iKTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlEYXRhID0gKERhdGEgJiAweDhmKSB8IGNsa19zZWxfdmFsOworCQlzdGF0dXMgPSAwOworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9zZXRfcmVnX3N5bmMocG9ydCwgbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCwgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgc3ByZWcgZmFpbGVkIGluIHNldF9zZXJpYWxfYmF1ZFxuIik7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJLyogQ2FsY3VsYXRlIHRoZSBEaXZpc29yICovCisKKwkJaWYgKHN0YXR1cykgeworCQkJZXJyKCIlcyAtIGJhZCBiYXVkIHJhdGUiLCBfX0ZVTkNUSU9OX18pOworCQkJZGJnKCIlc1xuIiwgImJhZCBiYXVkIHJhdGUiKTsKKwkJCXJldHVybiBzdGF0dXM7CisJCX0KKwkJLyogRW5hYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisJCURhdGEgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiB8IFNFUklBTF9MQ1JfRExBQjsKKwkJbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgPSBEYXRhOworCQltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJCS8qIFdyaXRlIHRoZSBkaXZpc29yICovCisJCURhdGEgPSAodW5zaWduZWQgY2hhcikoZGl2aXNvciAmIDB4ZmYpOworCQlkYmcoInNldF9zZXJpYWxfYmF1ZCBWYWx1ZSB0byB3cml0ZSBETEwgaXMgJXhcbiIsIERhdGEpOworCQltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBESVZJU09SX0xBVENIX0xTQiwgRGF0YSk7CisKKwkJRGF0YSA9ICh1bnNpZ25lZCBjaGFyKSgoZGl2aXNvciAmIDB4ZmYwMCkgPj4gOCk7CisJCWRiZygic2V0X3NlcmlhbF9iYXVkIFZhbHVlIHRvIHdyaXRlIERMTSBpcyAleFxuIiwgRGF0YSk7CisJCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIERJVklTT1JfTEFUQ0hfTVNCLCBEYXRhKTsKKworCQkvKiBEaXNhYmxlIGFjY2VzcyB0byBkaXZpc29yIGxhdGNoICovCisJCURhdGEgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd0xDUiAmIH5TRVJJQUxfTENSX0RMQUI7CisJCW1vczc4NDBfcG9ydC0+c2hhZG93TENSID0gRGF0YTsKKwkJbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTElORV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKworCX0KKworCXJldHVybiBzdGF0dXM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zNzg0MF9jaGFuZ2VfcG9ydF9zZXR0aW5ncworICoJVGhpcyByb3V0aW5lIGlzIGNhbGxlZCB0byBzZXQgdGhlIFVBUlQgb24gdGhlIGRldmljZSB0byBtYXRjaAorICogICAgICB0aGUgc3BlY2lmaWVkIG5ldyBzZXR0aW5ncy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgbW9zNzg0MF9jaGFuZ2VfcG9ydF9zZXR0aW5ncyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCisJCQkJCSBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCit7CisJc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eTsKKwlpbnQgYmF1ZDsKKwl1bnNpZ25lZCBjZmxhZzsKKwl1bnNpZ25lZCBpZmxhZzsKKwlfX3U4IGxEYXRhOworCV9fdTggbFBhcml0eTsKKwlfX3U4IGxTdG9wOworCWludCBzdGF0dXM7CisJX191MTYgRGF0YTsKKwlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0OworCXN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWw7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKW1vczc4NDBfcG9ydC0+cG9ydDsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm47CisJfQorCisJaWYgKG1vczc4NDBfc2VyaWFsX3BhcmFub2lhX2NoZWNrKHBvcnQtPnNlcmlhbCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgU2VyaWFsIFxuIik7CisJCXJldHVybjsKKwl9CisKKwlzZXJpYWwgPSBwb3J0LT5zZXJpYWw7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgbW9zNzg0MF9wb3J0LT5wb3J0LT5udW1iZXIpOworCisJaWYgKCFtb3M3ODQwX3BvcnQtPm9wZW4pIHsKKwkJZGJnKCIlcyAtIHBvcnQgbm90IG9wZW5lZCIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwl0dHkgPSBtb3M3ODQwX3BvcnQtPnBvcnQtPnR0eTsKKworCWlmICgoIXR0eSkgfHwgKCF0dHktPnRlcm1pb3MpKSB7CisJCWRiZygiJXMgLSBubyB0dHkgc3RydWN0dXJlcyIsIF9fRlVOQ1RJT05fXyk7CisJCXJldHVybjsKKwl9CisKKwlkYmcoIiVzIiwgIkVudGVyaW5nIC4uLi4uLi4uLi4gXG4iKTsKKworCWxEYXRhID0gTENSX0JJVFNfODsKKwlsU3RvcCA9IExDUl9TVE9QXzE7CisJbFBhcml0eSA9IExDUl9QQVJfTk9ORTsKKworCWNmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCWlmbGFnID0gdHR5LT50ZXJtaW9zLT5jX2lmbGFnOworCisJLyogQ2hhbmdlIHRoZSBudW1iZXIgb2YgYml0cyAqLworCWlmIChjZmxhZyAmIENTSVpFKSB7CisJCXN3aXRjaCAoY2ZsYWcgJiBDU0laRSkgeworCQljYXNlIENTNToKKwkJCWxEYXRhID0gTENSX0JJVFNfNTsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1M2OgorCQkJbERhdGEgPSBMQ1JfQklUU182OworCQkJYnJlYWs7CisKKwkJY2FzZSBDUzc6CisJCQlsRGF0YSA9IExDUl9CSVRTXzc7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJY2FzZSBDUzg6CisJCQlsRGF0YSA9IExDUl9CSVRTXzg7CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBDaGFuZ2UgdGhlIFBhcml0eSBiaXQgKi8KKwlpZiAoY2ZsYWcgJiBQQVJFTkIpIHsKKwkJaWYgKGNmbGFnICYgUEFST0REKSB7CisJCQlsUGFyaXR5ID0gTENSX1BBUl9PREQ7CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gb2RkIiwgX19GVU5DVElPTl9fKTsKKwkJfSBlbHNlIHsKKwkJCWxQYXJpdHkgPSBMQ1JfUEFSX0VWRU47CisJCQlkYmcoIiVzIC0gcGFyaXR5ID0gZXZlbiIsIF9fRlVOQ1RJT05fXyk7CisJCX0KKworCX0gZWxzZSB7CisJCWRiZygiJXMgLSBwYXJpdHkgPSBub25lIiwgX19GVU5DVElPTl9fKTsKKwl9CisKKwlpZiAoY2ZsYWcgJiBDTVNQQVIpIHsKKwkJbFBhcml0eSA9IGxQYXJpdHkgfCAweDIwOworCX0KKworCS8qIENoYW5nZSB0aGUgU3RvcCBiaXQgKi8KKwlpZiAoY2ZsYWcgJiBDU1RPUEIpIHsKKwkJbFN0b3AgPSBMQ1JfU1RPUF8yOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMiIsIF9fRlVOQ1RJT05fXyk7CisJfSBlbHNlIHsKKwkJbFN0b3AgPSBMQ1JfU1RPUF8xOworCQlkYmcoIiVzIC0gc3RvcCBiaXRzID0gMSIsIF9fRlVOQ1RJT05fXyk7CisJfQorCisJLyogVXBkYXRlIHRoZSBMQ1Igd2l0aCB0aGUgY29ycmVjdCB2YWx1ZSAqLworCW1vczc4NDBfcG9ydC0+c2hhZG93TENSICY9CisJICAgIH4oTENSX0JJVFNfTUFTSyB8IExDUl9TVE9QX01BU0sgfCBMQ1JfUEFSX01BU0spOworCW1vczc4NDBfcG9ydC0+c2hhZG93TENSIHw9IChsRGF0YSB8IGxQYXJpdHkgfCBsU3RvcCk7CisKKwlkYmcoIm1vczc4NDBfY2hhbmdlX3BvcnRfc2V0dGluZ3MgbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IgaXMgJXhcbiIsCisJICAgIG1vczc4NDBfcG9ydC0+c2hhZG93TENSKTsKKwkvKiBEaXNhYmxlIEludGVycnVwdHMgKi8KKwlEYXRhID0gMHgwMDsKKwltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBJTlRFUlJVUFRfRU5BQkxFX1JFR0lTVEVSLCBEYXRhKTsKKworCURhdGEgPSAweDAwOworCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIEZJRk9fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwlEYXRhID0gMHhjZjsKKwltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBGSUZPX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLyogU2VuZCB0aGUgdXBkYXRlZCBMQ1IgdmFsdWUgdG8gdGhlIG1vczc4NDAgKi8KKwlEYXRhID0gbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1I7CisKKwltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBMSU5FX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJRGF0YSA9IDB4MDBiOworCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gRGF0YTsKKwltb3M3ODQwX3NldF91YXJ0X3JlZyhwb3J0LCBNT0RFTV9DT05UUk9MX1JFR0lTVEVSLCBEYXRhKTsKKwlEYXRhID0gMHgwMGI7CisJbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisKKwkvKiBzZXQgdXAgdGhlIE1DUiByZWdpc3RlciBhbmQgc2VuZCBpdCB0byB0aGUgbW9zNzg0MCAqLworCisJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgPSBNQ1JfTUFTVEVSX0lFOworCWlmIChjZmxhZyAmIENCQVVEKSB7CisJCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSIHw9IChNQ1JfRFRSIHwgTUNSX1JUUyk7CisJfQorCisJaWYgKGNmbGFnICYgQ1JUU0NUUykgeworCQltb3M3ODQwX3BvcnQtPnNoYWRvd01DUiB8PSAoTUNSX1hPTl9BTlkpOworCisJfSBlbHNlIHsKKwkJbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1IgJj0gfihNQ1JfWE9OX0FOWSk7CisJfQorCisJRGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TUNSOworCW1vczc4NDBfc2V0X3VhcnRfcmVnKHBvcnQsIE1PREVNX0NPTlRST0xfUkVHSVNURVIsIERhdGEpOworCisJLyogRGV0ZXJtaW5lIGRpdmlzb3IgYmFzZWQgb24gYmF1ZCByYXRlICovCisJYmF1ZCA9IHR0eV9nZXRfYmF1ZF9yYXRlKHR0eSk7CisKKwlpZiAoIWJhdWQpIHsKKwkJLyogcGljayBhIGRlZmF1bHQsIGFueSBkZWZhdWx0Li4uICovCisJCWRiZygiJXNcbiIsICJQaWNrZWQgZGVmYXVsdCBiYXVkLi4uIik7CisJCWJhdWQgPSA5NjAwOworCX0KKworCWRiZygiJXMgLSBiYXVkIHJhdGUgPSAlZCIsIF9fRlVOQ1RJT05fXywgYmF1ZCk7CisJc3RhdHVzID0gbW9zNzg0MF9zZW5kX2NtZF93cml0ZV9iYXVkX3JhdGUobW9zNzg0MF9wb3J0LCBiYXVkKTsKKworCS8qIEVuYWJsZSBJbnRlcnJ1cHRzICovCisJRGF0YSA9IDB4MGM7CisJbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgSU5URVJSVVBUX0VOQUJMRV9SRUdJU1RFUiwgRGF0YSk7CisKKwlpZiAobW9zNzg0MF9wb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQltb3M3ODQwX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKworCQlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihtb3M3ODQwX3BvcnQtPnJlYWRfdXJiLCBHRlBfQVRPTUlDKTsKKworCQlpZiAoc3RhdHVzKSB7CisJCQlkYmcoIiB1c2Jfc3VibWl0X3VyYihyZWFkIGJ1bGspIGZhaWxlZCwgc3RhdHVzID0gJWQiLAorCQkJICAgIHN0YXR1cyk7CisJCX0KKwl9CisJd2FrZV91cCgmbW9zNzg0MF9wb3J0LT5kZWx0YV9tc3Jfd2FpdCk7CisJbW9zNzg0MF9wb3J0LT5kZWx0YV9tc3JfY29uZCA9IDE7CisJZGJnKCJtb3M3ODQwX2NoYW5nZV9wb3J0X3NldHRpbmdzIG1vczc4NDBfcG9ydC0+c2hhZG93TENSIGlzIEVuZCAleFxuIiwKKwkgICAgbW9zNzg0MF9wb3J0LT5zaGFkb3dMQ1IpOworCisJcmV0dXJuOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfc2V0X3Rlcm1pb3MKKyAqCXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IHRoZSB0dHkgZHJpdmVyIHdoZW4gaXQgd2FudHMgdG8gY2hhbmdlCisgKgl0aGUgdGVybWlvcyBzdHJ1Y3R1cmUKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgbW9zNzg0MF9zZXRfdGVybWlvcyhzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAorCQkJCXN0cnVjdCB0ZXJtaW9zICpvbGRfdGVybWlvcykKK3sKKwlpbnQgc3RhdHVzOworCXVuc2lnbmVkIGludCBjZmxhZzsKKwlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsOworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5OworCWRiZygibW9zNzg0MF9zZXRfdGVybWlvczogU1RBUlRcbiIpOworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm47CisJfQorCisJc2VyaWFsID0gcG9ydC0+c2VyaWFsOworCisJaWYgKG1vczc4NDBfc2VyaWFsX3BhcmFub2lhX2NoZWNrKHNlcmlhbCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgU2VyaWFsIFxuIik7CisJCXJldHVybjsKKwl9CisKKwltb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUocG9ydCk7CisKKwlpZiAobW9zNzg0MF9wb3J0ID09IE5VTEwpCisJCXJldHVybjsKKworCXR0eSA9IHBvcnQtPnR0eTsKKworCWlmICghcG9ydC0+dHR5IHx8ICFwb3J0LT50dHktPnRlcm1pb3MpIHsKKwkJZGJnKCIlcyAtIG5vIHR0eSBvciB0ZXJtaW9zIiwgX19GVU5DVElPTl9fKTsKKwkJcmV0dXJuOworCX0KKworCWlmICghbW9zNzg0MF9wb3J0LT5vcGVuKSB7CisJCWRiZygiJXMgLSBwb3J0IG5vdCBvcGVuZWQiLCBfX0ZVTkNUSU9OX18pOworCQlyZXR1cm47CisJfQorCisJZGJnKCIlc1xuIiwgInNldHRpbmcgdGVybWlvcyAtICIpOworCisJY2ZsYWcgPSB0dHktPnRlcm1pb3MtPmNfY2ZsYWc7CisKKwlpZiAoIWNmbGFnKSB7CisJCWRiZygiJXMgJXNcbiIsIF9fRlVOQ1RJT05fXywgImNmbGFnIGlzIE5VTEwiKTsKKwkJcmV0dXJuOworCX0KKworCS8qIGNoZWNrIHRoYXQgdGhleSByZWFsbHkgd2FudCB1cyB0byBjaGFuZ2Ugc29tZXRoaW5nICovCisJaWYgKG9sZF90ZXJtaW9zKSB7CisJCWlmICgoY2ZsYWcgPT0gb2xkX3Rlcm1pb3MtPmNfY2ZsYWcpICYmCisJCSAgICAoUkVMRVZBTlRfSUZMQUcodHR5LT50ZXJtaW9zLT5jX2lmbGFnKSA9PQorCQkgICAgIFJFTEVWQU5UX0lGTEFHKG9sZF90ZXJtaW9zLT5jX2lmbGFnKSkpIHsKKwkJCWRiZygiJXNcbiIsICJOb3RoaW5nIHRvIGNoYW5nZSIpOworCQkJcmV0dXJuOworCQl9CisJfQorCisJZGJnKCIlcyAtIGNsZmFnICUwOHggaWZsYWcgJTA4eCIsIF9fRlVOQ1RJT05fXywKKwkgICAgdHR5LT50ZXJtaW9zLT5jX2NmbGFnLCBSRUxFVkFOVF9JRkxBRyh0dHktPnRlcm1pb3MtPmNfaWZsYWcpKTsKKworCWlmIChvbGRfdGVybWlvcykgeworCQlkYmcoIiVzIC0gb2xkIGNsZmFnICUwOHggb2xkIGlmbGFnICUwOHgiLCBfX0ZVTkNUSU9OX18sCisJCSAgICBvbGRfdGVybWlvcy0+Y19jZmxhZywgUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKTsKKwl9CisKKwlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKworCS8qIGNoYW5nZSB0aGUgcG9ydCBzZXR0aW5ncyB0byB0aGUgbmV3IG9uZXMgc3BlY2lmaWVkICovCisKKwltb3M3ODQwX2NoYW5nZV9wb3J0X3NldHRpbmdzKG1vczc4NDBfcG9ydCwgb2xkX3Rlcm1pb3MpOworCisJaWYgKCFtb3M3ODQwX3BvcnQtPnJlYWRfdXJiKSB7CisJCWRiZygiJXMiLCAiVVJCIEtJTExFRCAhISEhIVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAobW9zNzg0MF9wb3J0LT5yZWFkX3VyYi0+c3RhdHVzICE9IC1FSU5QUk9HUkVTUykgeworCQltb3M3ODQwX3BvcnQtPnJlYWRfdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKKwkJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIobW9zNzg0MF9wb3J0LT5yZWFkX3VyYiwgR0ZQX0FUT01JQyk7CisJCWlmIChzdGF0dXMpIHsKKwkJCWRiZygiIHVzYl9zdWJtaXRfdXJiKHJlYWQgYnVsaykgZmFpbGVkLCBzdGF0dXMgPSAlZCIsCisJCQkgICAgc3RhdHVzKTsKKwkJfQorCX0KKwlyZXR1cm47Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zNzg0MF9nZXRfbHNyX2luZm8gLSBnZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgaW5mbworICoKKyAqIFB1cnBvc2U6IExldCB1c2VyIGNhbGwgaW9jdGwoKSB0byBnZXQgaW5mbyB3aGVuIHRoZSBVQVJUIHBoeXNpY2FsbHkKKyAqIAkgICAgaXMgZW1wdGllZC4gIE9uIGJ1cyB0eXBlcyBsaWtlIFJTNDg1LCB0aGUgdHJhbnNtaXR0ZXIgbXVzdAorICogCSAgICByZWxlYXNlIHRoZSBidXMgYWZ0ZXIgdHJhbnNtaXR0aW5nLiBUaGlzIG11c3QgYmUgZG9uZSB3aGVuCisgKiAJICAgIHRoZSB0cmFuc21pdCBzaGlmdCByZWdpc3RlciBpcyBlbXB0eSwgbm90IGJlIGRvbmUgd2hlbiB0aGUKKyAqIAkgICAgdHJhbnNtaXQgaG9sZGluZyByZWdpc3RlciBpcyBlbXB0eS4gIFRoaXMgZnVuY3Rpb25hbGl0eQorICogCSAgICBhbGxvd3MgYW4gUlM0ODUgZHJpdmVyIHRvIGJlIHdyaXR0ZW4gaW4gdXNlciBzcGFjZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBtb3M3ODQwX2dldF9sc3JfaW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCisJCQkJdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwlpbnQgY291bnQ7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisKKwljb3VudCA9IG1vczc4NDBfY2hhcnNfaW5fYnVmZmVyKG1vczc4NDBfcG9ydC0+cG9ydCk7CisJaWYgKGNvdW50ID09IDApIHsKKwkJZGJnKCIlcyAtLSBFbXB0eSIsIF9fRlVOQ1RJT05fXyk7CisJCXJlc3VsdCA9IFRJT0NTRVJfVEVNVDsKKwl9CisKKwlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfZ2V0X2J5dGVzX2F2YWlsIC0gZ2V0IG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUKKyAqCisgKiBQdXJwb3NlOiBMZXQgdXNlciBjYWxsIGlvY3RsIHRvIGdldCB0aGUgY291bnQgb2YgbnVtYmVyIG9mIGJ5dGVzIGF2YWlsYWJsZS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBtb3M3ODQwX2dldF9ieXRlc19hdmFpbChzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCisJCQkJICAgdW5zaWduZWQgaW50ICp2YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgcmVzdWx0ID0gMDsKKwlzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5ID0gbW9zNzg0MF9wb3J0LT5wb3J0LT50dHk7CisKKwlpZiAoIXR0eSkKKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKworCXJlc3VsdCA9IHR0eS0+cmVhZF9jbnQ7CisKKwlkYmcoIiVzKCVkKSA9ICVkIiwgX19GVU5DVElPTl9fLCBtb3M3ODQwX3BvcnQtPnBvcnQtPm51bWJlciwgcmVzdWx0KTsKKwlpZiAoY29weV90b191c2VyKHZhbHVlLCAmcmVzdWx0LCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJcmV0dXJuIC1FTk9JT0NUTENNRDsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX3NldF9tb2RlbV9pbmZvCisgKiAgICAgIGZ1bmN0aW9uIHRvIHNldCBtb2RlbSBpbmZvCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbW9zNzg0MF9zZXRfbW9kZW1faW5mbyhzdHJ1Y3QgbW9zY2hpcF9wb3J0ICptb3M3ODQwX3BvcnQsCisJCQkJICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBpbnQgKnZhbHVlKQoreworCXVuc2lnbmVkIGludCBtY3I7CisJdW5zaWduZWQgaW50IGFyZzsKKwlfX3UxNiBEYXRhOworCWludCBzdGF0dXM7CisJc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydDsKKworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJcG9ydCA9IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICopbW9zNzg0MF9wb3J0LT5wb3J0OworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbWNyID0gbW9zNzg0MF9wb3J0LT5zaGFkb3dNQ1I7CisKKwlpZiAoY29weV9mcm9tX3VzZXIoJmFyZywgdmFsdWUsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgVElPQ01CSVM6CisJCWlmIChhcmcgJiBUSU9DTV9SVFMpCisJCQltY3IgfD0gTUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciB8PSBNQ1JfUlRTOworCQlpZiAoYXJnICYgVElPQ01fTE9PUCkKKwkJCW1jciB8PSBNQ1JfTE9PUEJBQ0s7CisJCWJyZWFrOworCisJY2FzZSBUSU9DTUJJQzoKKwkJaWYgKGFyZyAmIFRJT0NNX1JUUykKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0RUUikKKwkJCW1jciAmPSB+TUNSX1JUUzsKKwkJaWYgKGFyZyAmIFRJT0NNX0xPT1ApCisJCQltY3IgJj0gfk1DUl9MT09QQkFDSzsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNU0VUOgorCQkvKiB0dXJuIG9mZiB0aGUgUlRTIGFuZCBEVFIgYW5kIExPT1BCQUNLCisJCSAqIGFuZCB0aGVuIG9ubHkgdHVybiBvbiB3aGF0IHdhcyBhc2tlZCB0byAqLworCQltY3IgJj0gfihNQ1JfUlRTIHwgTUNSX0RUUiB8IE1DUl9MT09QQkFDSyk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX1JUUykgPyBNQ1JfUlRTIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0RUUikgPyBNQ1JfRFRSIDogMCk7CisJCW1jciB8PSAoKGFyZyAmIFRJT0NNX0xPT1ApID8gTUNSX0xPT1BCQUNLIDogMCk7CisJCWJyZWFrOworCX0KKworCW1vczc4NDBfcG9ydC0+c2hhZG93TUNSID0gbWNyOworCisJRGF0YSA9IG1vczc4NDBfcG9ydC0+c2hhZG93TUNSOworCXN0YXR1cyA9IDA7CisJc3RhdHVzID0gbW9zNzg0MF9zZXRfdWFydF9yZWcocG9ydCwgTU9ERU1fQ09OVFJPTF9SRUdJU1RFUiwgRGF0YSk7CisJaWYgKHN0YXR1cyA8IDApIHsKKwkJZGJnKCJzZXR0aW5nIE1PREVNX0NPTlRST0xfUkVHSVNURVIgRmFpbGVkXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXJldHVybiAwOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIG1vczc4NDBfZ2V0X21vZGVtX2luZm8KKyAqICAgICAgZnVuY3Rpb24gdG8gZ2V0IG1vZGVtIGluZm8KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCBtb3M3ODQwX2dldF9tb2RlbV9pbmZvKHN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydCwKKwkJCQkgIHVuc2lnbmVkIGludCAqdmFsdWUpCit7CisJdW5zaWduZWQgaW50IHJlc3VsdCA9IDA7CisJX191MTYgbXNyOworCXVuc2lnbmVkIGludCBtY3IgPSBtb3M3ODQwX3BvcnQtPnNoYWRvd01DUjsKKwlpbnQgc3RhdHVzID0gMDsKKwlzdGF0dXMgPQorCSAgICBtb3M3ODQwX2dldF91YXJ0X3JlZyhtb3M3ODQwX3BvcnQtPnBvcnQsIE1PREVNX1NUQVRVU19SRUdJU1RFUiwKKwkJCQkgJm1zcik7CisJcmVzdWx0ID0gKChtY3IgJiBNQ1JfRFRSKSA/IFRJT0NNX0RUUiA6IDApCS8qIDB4MDAyICovCisJICAgIHwoKG1jciAmIE1DUl9SVFMpID8gVElPQ01fUlRTIDogMCkJLyogMHgwMDQgKi8KKwkgICAgfCgobXNyICYgTU9TNzg0MF9NU1JfQ1RTKSA/IFRJT0NNX0NUUyA6IDApCS8qIDB4MDIwICovCisJICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX0NEKSA/IFRJT0NNX0NBUiA6IDApCS8qIDB4MDQwICovCisJICAgIHwoKG1zciAmIE1PUzc4NDBfTVNSX1JJKSA/IFRJT0NNX1JJIDogMCkJLyogMHgwODAgKi8KKwkgICAgfCgobXNyICYgTU9TNzg0MF9NU1JfRFNSKSA/IFRJT0NNX0RTUiA6IDApOwkvKiAweDEwMCAqLworCisJZGJnKCIlcyAtLSAleCIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKworCWlmIChjb3B5X3RvX3VzZXIodmFsdWUsICZyZXN1bHQsIHNpemVvZihpbnQpKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zNzg0MF9nZXRfc2VyaWFsX2luZm8KKyAqICAgICAgZnVuY3Rpb24gdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IHNlcmlhbCBwb3J0CisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgbW9zNzg0MF9nZXRfc2VyaWFsX2luZm8oc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0LAorCQkJCSAgIHN0cnVjdCBzZXJpYWxfc3RydWN0ICpyZXRpbmZvKQoreworCXN0cnVjdCBzZXJpYWxfc3RydWN0IHRtcDsKKworCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkKKwkJcmV0dXJuIC0xOworCisJaWYgKCFyZXRpbmZvKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCW1lbXNldCgmdG1wLCAwLCBzaXplb2YodG1wKSk7CisKKwl0bXAudHlwZSA9IFBPUlRfMTY1NTBBOworCXRtcC5saW5lID0gbW9zNzg0MF9wb3J0LT5wb3J0LT5zZXJpYWwtPm1pbm9yOworCXRtcC5wb3J0ID0gbW9zNzg0MF9wb3J0LT5wb3J0LT5udW1iZXI7CisJdG1wLmlycSA9IDA7CisJdG1wLmZsYWdzID0gQVNZTkNfU0tJUF9URVNUIHwgQVNZTkNfQVVUT19JUlE7CisJdG1wLnhtaXRfZmlmb19zaXplID0gTlVNX1VSQlMgKiBVUkJfVFJBTlNGRVJfQlVGRkVSX1NJWkU7CisJdG1wLmJhdWRfYmFzZSA9IDk2MDA7CisJdG1wLmNsb3NlX2RlbGF5ID0gNSAqIEhaOworCXRtcC5jbG9zaW5nX3dhaXQgPSAzMCAqIEhaOworCisJaWYgKGNvcHlfdG9fdXNlcihyZXRpbmZvLCAmdG1wLCBzaXplb2YoKnJldGluZm8pKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogU2VyaWFsSW9jdGwKKyAqCXRoaXMgZnVuY3Rpb24gaGFuZGxlcyBhbnkgaW9jdGwgY2FsbHMgdG8gdGhlIGRyaXZlcgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1vczc4NDBfaW9jdGwoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCisJCQkgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCit7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCXN0cnVjdCB0dHlfc3RydWN0ICp0dHk7CisKKwlzdHJ1Y3QgYXN5bmNfaWNvdW50IGNub3c7CisJc3RydWN0IGFzeW5jX2ljb3VudCBjcHJldjsKKwlzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCBpY291bnQ7CisJaW50IG1vc3JldCA9IDA7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3QgdHR5X2xkaXNjICpsZDsKKworCWlmIChtb3M3ODQwX3BvcnRfcGFyYW5vaWFfY2hlY2socG9ydCwgX19GVU5DVElPTl9fKSkgeworCQlkYmcoIiVzIiwgIkludmFsaWQgcG9ydCBcbiIpOworCQlyZXR1cm4gLTE7CisJfQorCisJbW9zNzg0MF9wb3J0ID0gbW9zNzg0MF9nZXRfcG9ydF9wcml2YXRlKHBvcnQpOworCXR0eSA9IG1vczc4NDBfcG9ydC0+cG9ydC0+dHR5OworCisJaWYgKG1vczc4NDBfcG9ydCA9PSBOVUxMKQorCQlyZXR1cm4gLTE7CisKKwlkYmcoIiVzIC0gcG9ydCAlZCwgY21kID0gMHgleCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOworCisJc3dpdGNoIChjbWQpIHsKKwkJLyogcmV0dXJuIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgKi8KKworCWNhc2UgVElPQ0lOUToKKwkJZGJnKCIlcyAoJWQpIFRJT0NJTlEiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBtb3M3ODQwX2dldF9ieXRlc19hdmFpbChtb3M3ODQwX3BvcnQsCisJCQkJCSAgICAgICAodW5zaWduZWQgaW50ICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NPVVRROgorCQlkYmcoIiVzICglZCkgVElPQ09VVFEiLCBfX0ZVTkNUSU9OX18sIHBvcnQtPm51bWJlcik7CisJCXJldHVybiBwdXRfdXNlcih0dHktPmRyaXZlci0+Y2hhcnNfaW5fYnVmZmVyID8KKwkJCQl0dHktPmRyaXZlci0+Y2hhcnNfaW5fYnVmZmVyKHR0eSkgOiAwLAorCQkJCShpbnQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CisKKwljYXNlIFRDRkxTSDoKKwkJcmV0dmFsID0gdHR5X2NoZWNrX2NoYW5nZSh0dHkpOworCQlpZiAocmV0dmFsKQorCQkJcmV0dXJuIHJldHZhbDsKKworCQlsZCA9IHR0eV9sZGlzY19yZWYodHR5KTsKKwkJc3dpdGNoIChhcmcpIHsKKwkJY2FzZSBUQ0lGTFVTSDoKKwkJCWlmIChsZCAmJiBsZC0+Zmx1c2hfYnVmZmVyKQorCQkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJCWJyZWFrOworCQljYXNlIFRDSU9GTFVTSDoKKwkJCWlmIChsZCAmJiBsZC0+Zmx1c2hfYnVmZmVyKQorCQkJCWxkLT5mbHVzaF9idWZmZXIodHR5KTsKKwkJCS8qIGZhbGwgdGhyb3VnaCAqLworCQljYXNlIFRDT0ZMVVNIOgorCQkJaWYgKHR0eS0+ZHJpdmVyLT5mbHVzaF9idWZmZXIpCisJCQkJdHR5LT5kcml2ZXItPmZsdXNoX2J1ZmZlcih0dHkpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl0dHlfbGRpc2NfZGVyZWYobGQpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJdHR5X2xkaXNjX2RlcmVmKGxkKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRDR0VUUzoKKwkJaWYgKGtlcm5lbF90ZXJtaW9zX3RvX3VzZXJfdGVybWlvcworCQkgICAgKChzdHJ1Y3QgdGVybWlvcyBfX3VzZXIgKilhcmcsIHR0eS0+dGVybWlvcykpCisJCQlyZXR1cm4gLUVGQVVMVDsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRJT0NTRVJHRVRMU1I6CisJCWRiZygiJXMgKCVkKSBUSU9DU0VSR0VUTFNSIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gbW9zNzg0MF9nZXRfbHNyX2luZm8obW9zNzg0MF9wb3J0LCAodW5zaWduZWQgaW50ICopYXJnKTsKKwkJcmV0dXJuIDA7CisKKwljYXNlIFRJT0NNQklTOgorCWNhc2UgVElPQ01CSUM6CisJY2FzZSBUSU9DTVNFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNU0VUL1RJT0NNQklDL1RJT0NNU0VUIiwgX19GVU5DVElPTl9fLAorCQkgICAgcG9ydC0+bnVtYmVyKTsKKwkJbW9zcmV0ID0KKwkJICAgIG1vczc4NDBfc2V0X21vZGVtX2luZm8obW9zNzg0MF9wb3J0LCBjbWQsCisJCQkJCSAgICh1bnNpZ25lZCBpbnQgKilhcmcpOworCQlyZXR1cm4gbW9zcmV0OworCisJY2FzZSBUSU9DTUdFVDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NNR0VUIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gbW9zNzg0MF9nZXRfbW9kZW1faW5mbyhtb3M3ODQwX3BvcnQsCisJCQkJCSAgICAgICh1bnNpZ25lZCBpbnQgKilhcmcpOworCisJY2FzZSBUSU9DR1NFUklBTDoKKwkJZGJnKCIlcyAoJWQpIFRJT0NHU0VSSUFMIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQlyZXR1cm4gbW9zNzg0MF9nZXRfc2VyaWFsX2luZm8obW9zNzg0MF9wb3J0LAorCQkJCQkgICAgICAgKHN0cnVjdCBzZXJpYWxfc3RydWN0ICopYXJnKTsKKworCWNhc2UgVElPQ1NTRVJJQUw6CisJCWRiZygiJXMgKCVkKSBUSU9DU1NFUklBTCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKKwkJYnJlYWs7CisKKwljYXNlIFRJT0NNSVdBSVQ6CisJCWRiZygiJXMgKCVkKSBUSU9DTUlXQUlUIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCQljcHJldiA9IG1vczc4NDBfcG9ydC0+aWNvdW50OworCQl3aGlsZSAoMSkgeworCQkJLy9pbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZtb3M3ODQwX3BvcnQtPmRlbHRhX21zcl93YWl0KTsKKwkJCW1vczc4NDBfcG9ydC0+ZGVsdGFfbXNyX2NvbmQgPSAwOworCQkJd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKG1vczc4NDBfcG9ydC0+ZGVsdGFfbXNyX3dhaXQsCisJCQkJCQkgKG1vczc4NDBfcG9ydC0+CisJCQkJCQkgIGRlbHRhX21zcl9jb25kID09IDEpKTsKKworCQkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLworCQkJaWYgKHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKQorCQkJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJCQljbm93ID0gbW9zNzg0MF9wb3J0LT5pY291bnQ7CisJCQlpZiAoY25vdy5ybmcgPT0gY3ByZXYucm5nICYmIGNub3cuZHNyID09IGNwcmV2LmRzciAmJgorCQkJICAgIGNub3cuZGNkID09IGNwcmV2LmRjZCAmJiBjbm93LmN0cyA9PSBjcHJldi5jdHMpCisJCQkJcmV0dXJuIC1FSU87CS8qIG5vIGNoYW5nZSA9PiBlcnJvciAqLworCQkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHwKKwkJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DRCkgJiYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpIHx8CisJCQkgICAgKChhcmcgJiBUSU9DTV9DVFMpICYmIChjbm93LmN0cyAhPSBjcHJldi5jdHMpKSkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJY3ByZXYgPSBjbm93OworCQl9CisJCS8qIE5PVFJFQUNIRUQgKi8KKwkJYnJlYWs7CisKKwljYXNlIFRJT0NHSUNPVU5UOgorCQljbm93ID0gbW9zNzg0MF9wb3J0LT5pY291bnQ7CisJCWljb3VudC5jdHMgPSBjbm93LmN0czsKKwkJaWNvdW50LmRzciA9IGNub3cuZHNyOworCQlpY291bnQucm5nID0gY25vdy5ybmc7CisJCWljb3VudC5kY2QgPSBjbm93LmRjZDsKKwkJaWNvdW50LnJ4ID0gY25vdy5yeDsKKwkJaWNvdW50LnR4ID0gY25vdy50eDsKKwkJaWNvdW50LmZyYW1lID0gY25vdy5mcmFtZTsKKwkJaWNvdW50Lm92ZXJydW4gPSBjbm93Lm92ZXJydW47CisJCWljb3VudC5wYXJpdHkgPSBjbm93LnBhcml0eTsKKwkJaWNvdW50LmJyayA9IGNub3cuYnJrOworCQlpY291bnQuYnVmX292ZXJydW4gPSBjbm93LmJ1Zl9vdmVycnVuOworCisJCWRiZygiJXMgKCVkKSBUSU9DR0lDT1VOVCBSWD0lZCwgVFg9JWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICBwb3J0LT5udW1iZXIsIGljb3VudC5yeCwgaWNvdW50LnR4KTsKKwkJaWYgKGNvcHlfdG9fdXNlcigodm9pZCAqKWFyZywgJmljb3VudCwgc2l6ZW9mKGljb3VudCkpKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisJCXJldHVybiAwOworCisJY2FzZSBUSU9DRVhCQVVEOgorCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gLUVOT0lPQ1RMQ01EOworfQorCitzdGF0aWMgaW50IG1vczc4NDBfY2FsY19udW1fcG9ydHMoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKK3sKKworCWRiZygibnVtYmVyb2ZlbmRwb2ludHM6ICVkIFxuIiwKKwkgICAgKGludClzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyk7CisJZGJnKCJudW1iZXJvZmVuZHBvaW50czogJWQgXG4iLAorCSAgICAoaW50KXNlcmlhbC0+aW50ZXJmYWNlLT5hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMpOworCWlmIChzZXJpYWwtPmludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYk51bUVuZHBvaW50cyA9PSA1KSB7CisJCW1vczc4NDBfbnVtX3BvcnRzID0gMjsKKwkJc2VyaWFsLT50eXBlLT5udW1fcG9ydHMgPSAyOworCX0gZWxzZSBpZiAoc2VyaWFsLT5pbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJOdW1FbmRwb2ludHMgPT0gOSkgeworCQltb3M3ODQwX251bV9wb3J0cyA9IDQ7CisJCXNlcmlhbC0+dHlwZS0+bnVtX2J1bGtfaW4gPSA0OworCQlzZXJpYWwtPnR5cGUtPm51bV9idWxrX291dCA9IDQ7CisJCXNlcmlhbC0+dHlwZS0+bnVtX3BvcnRzID0gNDsKKwl9CisKKwlyZXR1cm4gbW9zNzg0MF9udW1fcG9ydHM7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX3N0YXJ0dXAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1vczc4NDBfc3RhcnR1cChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQoreworCXN0cnVjdCBtb3NjaGlwX3BvcnQgKm1vczc4NDBfcG9ydDsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2OworCWludCBpLCBzdGF0dXM7CisKKwlfX3UxNiBEYXRhOworCWRiZygiJXMgXG4iLCAiIG1vczc4NDBfc3RhcnR1cCA6ZW50ZXJpbmcuLi4uLi4uLi4uIik7CisKKwlpZiAoIXNlcmlhbCkgeworCQlkYmcoIiVzXG4iLCAiSW52YWxpZCBIYW5kbGVyIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlkZXYgPSBzZXJpYWwtPmRldjsKKworCWRiZygiJXNcbiIsICJFbnRlcmluZy4uLiIpOworCisJLyogd2Ugc2V0IHVwIHRoZSBwb2ludGVycyB0byB0aGUgZW5kcG9pbnRzIGluIHRoZSBtb3M3ODQwX29wZW4gKgorCSAqIGZ1bmN0aW9uLCBhcyB0aGUgc3RydWN0dXJlcyBhcmVuJ3QgY3JlYXRlZCB5ZXQuICAgICAgICAgICAgICovCisKKwkvKiBzZXQgdXAgcG9ydCBwcml2YXRlIHN0cnVjdHVyZXMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQltb3M3ODQwX3BvcnQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbW9zY2hpcF9wb3J0KSwgR0ZQX0tFUk5FTCk7CisJCWlmIChtb3M3ODQwX3BvcnQgPT0gTlVMTCkgeworCQkJZXJyKCIlcyAtIE91dCBvZiBtZW1vcnkiLCBfX0ZVTkNUSU9OX18pOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KG1vczc4NDBfcG9ydCwgMCwgc2l6ZW9mKHN0cnVjdCBtb3NjaGlwX3BvcnQpKTsKKworCQkvKiBJbml0aWFsaXplIGFsbCBwb3J0IGludGVycnVwdCBlbmQgcG9pbnQgdG8gcG9ydCAwIGludCBlbmRwb2ludCAqCisJCSAqIE91ciBkZXZpY2UgaGFzIG9ubHkgb25lIGludGVycnVwdCBlbmQgcG9pbnQgY29tbWFuIHRvIGFsbCBwb3J0ICovCisKKwkJbW9zNzg0MF9wb3J0LT5wb3J0ID0gc2VyaWFsLT5wb3J0W2ldOworCQltb3M3ODQwX3NldF9wb3J0X3ByaXZhdGUoc2VyaWFsLT5wb3J0W2ldLCBtb3M3ODQwX3BvcnQpOworCisJCW1vczc4NDBfcG9ydC0+cG9ydF9udW0gPSAoKHNlcmlhbC0+cG9ydFtpXS0+bnVtYmVyIC0KKwkJCQkJICAgKHNlcmlhbC0+cG9ydFtpXS0+c2VyaWFsLT5taW5vcikpICsKKwkJCQkJICAxKTsKKworCQlpZiAobW9zNzg0MF9wb3J0LT5wb3J0X251bSA9PSAxKSB7CisJCQltb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHgwOworCQkJbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHgxOworCQkJbW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDQ7CisJCX0gZWxzZSBpZiAoKG1vczc4NDBfcG9ydC0+cG9ydF9udW0gPT0gMikKKwkJCSAgICYmIChtb3M3ODQwX251bV9wb3J0cyA9PSA0KSkgeworCQkJbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCA9IDB4ODsKKwkJCW1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4OTsKKwkJCW1vczc4NDBfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxNjsKKwkJfSBlbHNlIGlmICgobW9zNzg0MF9wb3J0LT5wb3J0X251bSA9PSAyKQorCQkJICAgJiYgKG1vczc4NDBfbnVtX3BvcnRzID09IDIpKSB7CisJCQltb3M3ODQwX3BvcnQtPlNwUmVnT2Zmc2V0ID0gMHhhOworCQkJbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0ID0gMHhiOworCQkJbW9zNzg0MF9wb3J0LT5EY3JSZWdPZmZzZXQgPSAweDE5OworCQl9IGVsc2UgaWYgKChtb3M3ODQwX3BvcnQtPnBvcnRfbnVtID09IDMpCisJCQkgICAmJiAobW9zNzg0MF9udW1fcG9ydHMgPT0gNCkpIHsKKwkJCW1vczc4NDBfcG9ydC0+U3BSZWdPZmZzZXQgPSAweGE7CisJCQltb3M3ODQwX3BvcnQtPkNvbnRyb2xSZWdPZmZzZXQgPSAweGI7CisJCQltb3M3ODQwX3BvcnQtPkRjclJlZ09mZnNldCA9IDB4MTk7CisJCX0gZWxzZSBpZiAoKG1vczc4NDBfcG9ydC0+cG9ydF9udW0gPT0gNCkKKwkJCSAgICYmIChtb3M3ODQwX251bV9wb3J0cyA9PSA0KSkgeworCQkJbW9zNzg0MF9wb3J0LT5TcFJlZ09mZnNldCA9IDB4YzsKKwkJCW1vczc4NDBfcG9ydC0+Q29udHJvbFJlZ09mZnNldCA9IDB4ZDsKKwkJCW1vczc4NDBfcG9ydC0+RGNyUmVnT2Zmc2V0ID0gMHgxYzsKKwkJfQorCQltb3M3ODQwX2R1bXBfc2VyaWFsX3BvcnQobW9zNzg0MF9wb3J0KTsKKworCQltb3M3ODQwX3NldF9wb3J0X3ByaXZhdGUoc2VyaWFsLT5wb3J0W2ldLCBtb3M3ODQwX3BvcnQpOworCisJCS8vZW5hYmxlIHJ4X2Rpc2FibGUgYml0IGluIGNvbnRyb2wgcmVnaXN0ZXIKKworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9nZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCAmRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIlJlYWRpbmcgQ29udHJvbFJlZyBmYWlsZWQgc3RhdHVzLTB4JXhcbiIsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkNvbnRyb2xSZWcgUmVhZGluZyBzdWNjZXNzIHZhbCBpcyAleCwgc3RhdHVzJWRcbiIsCisJCQkgICAgRGF0YSwgc3RhdHVzKTsKKwkJRGF0YSB8PSAweDA4OwkvL3NldHRpbmcgZHJpdmVyIGRvbmUgYml0CisJCURhdGEgfD0gMHgwNDsJLy9zcDFfYml0IHRvIGhhdmUgY3RzIGNoYW5nZSByZWZsZWN0IGluIG1vZGVtIHN0YXR1cyByZWcKKworCQkvL0RhdGEgfD0gMHgyMDsgLy9yeF9kaXNhYmxlIGJpdAorCQlzdGF0dXMgPSAwOworCQlzdGF0dXMgPQorCQkgICAgbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkgbW9zNzg0MF9wb3J0LT5Db250cm9sUmVnT2Zmc2V0LCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBDb250cm9sUmVnIGZhaWxlZChyeF9kaXNhYmxlKSBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiQ29udHJvbFJlZyBXcml0aW5nIHN1Y2Nlc3MocnhfZGlzYWJsZSkgc3RhdHVzJWRcbiIsCisJCQkgICAgc3RhdHVzKTsKKworCQkvL1dyaXRlIGRlZmF1bHQgdmFsdWVzIGluIERDUiAoaS5lIDB4MDEgaW4gRENSMCwgMHgwNSBpbiBEQ1IyIGFuZCAweDI0IGluIERDUjMKKwkJRGF0YSA9IDB4MDE7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAoX191MTYpIChtb3M3ODQwX3BvcnQtPkRjclJlZ09mZnNldCArCisJCQkJCQkgIDApLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IwIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMCBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MDU7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAoX191MTYpIChtb3M3ODQwX3BvcnQtPkRjclJlZ09mZnNldCArCisJCQkJCQkgIDEpLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IxIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMSBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MjQ7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSAoX191MTYpIChtb3M3ODQwX3BvcnQtPkRjclJlZ09mZnNldCArCisJCQkJCQkgIDIpLCBEYXRhKTsKKwkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCWRiZygiV3JpdGluZyBEQ1IyIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiRENSMiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CisKKwkJLy8gd3JpdGUgdmFsdWVzIGluIGNsa3N0YXJ0MHgwIGFuZCBjbGttdWx0aSAweDIwCisJCURhdGEgPSAweDA7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCSBDTEtfU1RBUlRfVkFMVUVfUkVHSVNURVIsIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIENMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiBmYWlsZWQgc3RhdHVzLTB4JXhcbiIsIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIkNMS19TVEFSVF9WQUxVRV9SRUdJU1RFUiBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsIHN0YXR1cyk7CisKKwkJRGF0YSA9IDB4MjA7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sIENMS19NVUxUSV9SRUdJU1RFUiwKKwkJCQkJIERhdGEpOworCQlpZiAoc3RhdHVzIDwgMCkgeworCQkJZGJnKCJXcml0aW5nIENMS19NVUxUSV9SRUdJU1RFUiBmYWlsZWQgc3RhdHVzLTB4JXhcbiIsCisJCQkgICAgc3RhdHVzKTsKKwkJCWJyZWFrOworCQl9IGVsc2UKKwkJCWRiZygiQ0xLX01VTFRJX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZFxuIiwKKwkJCSAgICBzdGF0dXMpOworCisJCS8vd3JpdGUgdmFsdWUgMHgwIHRvIHNjcmF0Y2hwYWQgcmVnaXN0ZXIKKwkJRGF0YSA9IDB4MDA7CisJCXN0YXR1cyA9IDA7CisJCXN0YXR1cyA9CisJCSAgICBtb3M3ODQwX3NldF91YXJ0X3JlZyhzZXJpYWwtPnBvcnRbaV0sIFNDUkFUQ0hfUEFEX1JFR0lTVEVSLAorCQkJCQkgRGF0YSk7CisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlkYmcoIldyaXRpbmcgU0NSQVRDSF9QQURfUkVHSVNURVIgZmFpbGVkIHN0YXR1cy0weCV4XG4iLAorCQkJICAgIHN0YXR1cyk7CisJCQlicmVhazsKKwkJfSBlbHNlCisJCQlkYmcoIlNDUkFUQ0hfUEFEX1JFR0lTVEVSIFdyaXRpbmcgc3VjY2VzcyBzdGF0dXMlZFxuIiwKKwkJCSAgICBzdGF0dXMpOworCisJCS8vWmVybyBMZW5ndGggZmxhZyByZWdpc3RlcgorCQlpZiAoKG1vczc4NDBfcG9ydC0+cG9ydF9udW0gIT0gMSkKKwkJICAgICYmIChtb3M3ODQwX251bV9wb3J0cyA9PSAyKSkgeworCisJCQlEYXRhID0gMHhmZjsKKwkJCXN0YXR1cyA9IDA7CisJCQlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbaV0sCisJCQkJCQkgICAgICAoX191MTYpIChaTFBfUkVHMSArCisJCQkJCQkJICAgICAgICgoX191MTYpCisJCQkJCQkJCW1vczc4NDBfcG9ydC0+CisJCQkJCQkJCXBvcnRfbnVtKSksCisJCQkJCQkgICAgICBEYXRhKTsKKwkJCWRiZygiWkxJUCBvZmZzZXQleFxuIiwKKwkJCSAgICAoX191MTYpIChaTFBfUkVHMSArCisJCQkJICAgICAoKF9fdTE2KSBtb3M3ODQwX3BvcnQtPnBvcnRfbnVtKSkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkYmcoIldyaXRpbmcgWkxQX1JFRyVkIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwKKwkJCQkgICAgaSArIDIsIHN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlkYmcoIlpMUF9SRUclZCBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsCisJCQkJICAgIGkgKyAyLCBzdGF0dXMpOworCQl9IGVsc2UgeworCQkJRGF0YSA9IDB4ZmY7CisJCQlzdGF0dXMgPSAwOworCQkJc3RhdHVzID0gbW9zNzg0MF9zZXRfcmVnX3N5bmMoc2VyaWFsLT5wb3J0W2ldLAorCQkJCQkJICAgICAgKF9fdTE2KSAoWkxQX1JFRzEgKworCQkJCQkJCSAgICAgICAoKF9fdTE2KQorCQkJCQkJCQltb3M3ODQwX3BvcnQtPgorCQkJCQkJCQlwb3J0X251bSkgLQorCQkJCQkJCSAgICAgICAweDEpLCBEYXRhKTsKKwkJCWRiZygiWkxJUCBvZmZzZXQleFxuIiwKKwkJCSAgICAoX191MTYpIChaTFBfUkVHMSArCisJCQkJICAgICAoKF9fdTE2KSBtb3M3ODQwX3BvcnQtPnBvcnRfbnVtKSAtIDB4MSkpOworCQkJaWYgKHN0YXR1cyA8IDApIHsKKwkJCQlkYmcoIldyaXRpbmcgWkxQX1JFRyVkIGZhaWxlZCBzdGF0dXMtMHgleFxuIiwKKwkJCQkgICAgaSArIDEsIHN0YXR1cyk7CisJCQkJYnJlYWs7CisJCQl9IGVsc2UKKwkJCQlkYmcoIlpMUF9SRUclZCBXcml0aW5nIHN1Y2Nlc3Mgc3RhdHVzJWRcbiIsCisJCQkJICAgIGkgKyAxLCBzdGF0dXMpOworCisJCX0KKwkJbW9zNzg0MF9wb3J0LT5jb250cm9sX3VyYiA9IHVzYl9hbGxvY191cmIoMCwgU0xBQl9BVE9NSUMpOworCQltb3M3ODQwX3BvcnQtPmN0cmxfYnVmID0ga21hbGxvYygxNiwgR0ZQX0tFUk5FTCk7CisKKwl9CisKKwkvL1plcm8gTGVuZ3RoIGZsYWcgZW5hYmxlCisJRGF0YSA9IDB4MGY7CisJc3RhdHVzID0gMDsKKwlzdGF0dXMgPSBtb3M3ODQwX3NldF9yZWdfc3luYyhzZXJpYWwtPnBvcnRbMF0sIFpMUF9SRUc1LCBEYXRhKTsKKwlpZiAoc3RhdHVzIDwgMCkgeworCQlkYmcoIldyaXRpbmcgWkxQX1JFRzUgZmFpbGVkIHN0YXR1cy0weCV4XG4iLCBzdGF0dXMpOworCQlyZXR1cm4gLTE7CisJfSBlbHNlCisJCWRiZygiWkxQX1JFRzUgV3JpdGluZyBzdWNjZXNzIHN0YXR1cyVkXG4iLCBzdGF0dXMpOworCisJLyogc2V0dGluZyBjb25maWd1cmF0aW9uIGZlYXR1cmUgdG8gb25lICovCisJdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJKF9fdTgpIDB4MDMsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDUgKiBIWik7CisJcmV0dXJuIDA7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3M3ODQwX3NodXRkb3duCisgKglUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuZXZlciB0aGUgZGV2aWNlIGlzIHJlbW92ZWQgZnJvbSB0aGUgdXNiIGJ1cy4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCBtb3M3ODQwX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCit7CisJaW50IGk7CisJc3RydWN0IG1vc2NoaXBfcG9ydCAqbW9zNzg0MF9wb3J0OworCWRiZygiJXMgXG4iLCAiIHNodXRkb3duIDplbnRlcmluZy4uLi4uLi4uLi4iKTsKKworCWlmICghc2VyaWFsKSB7CisJCWRiZygiJXMiLCAiSW52YWxpZCBIYW5kbGVyIFxuIik7CisJCXJldHVybjsKKwl9CisKKwkvKiAgICAgIGNoZWNrIGZvciB0aGUgcG9ydHMgdG8gYmUgY2xvc2VkLGNsb3NlIHRoZSBwb3J0cyBhbmQgZGlzY29ubmVjdCAgICAgICAgICovCisKKwkvKiBmcmVlIHByaXZhdGUgc3RydWN0dXJlIGFsbG9jYXRlZCBmb3Igc2VyaWFsIHBvcnQgICoKKwkgKiBzdG9wIHJlYWRzIGFuZCB3cml0ZXMgb24gYWxsIHBvcnRzICAgICAgICAgICAgICAgICovCisKKwlmb3IgKGkgPSAwOyBpIDwgc2VyaWFsLT5udW1fcG9ydHM7ICsraSkgeworCQltb3M3ODQwX3BvcnQgPSBtb3M3ODQwX2dldF9wb3J0X3ByaXZhdGUoc2VyaWFsLT5wb3J0W2ldKTsKKwkJa2ZyZWUobW9zNzg0MF9wb3J0LT5jdHJsX2J1Zik7CisJCXVzYl9raWxsX3VyYihtb3M3ODQwX3BvcnQtPmNvbnRyb2xfdXJiKTsKKwkJa2ZyZWUobW9zNzg0MF9wb3J0KTsKKwkJbW9zNzg0MF9zZXRfcG9ydF9wcml2YXRlKHNlcmlhbC0+cG9ydFtpXSwgTlVMTCk7CisJfQorCisJZGJnKCIlc1xuIiwgIlRoYW5rIHUgOjogIik7CisKK30KKworc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBtb3NjaGlwNzg0MF80cG9ydF9kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJICAgLm93bmVyID0gVEhJU19NT0RVTEUsCisJCSAgIC5uYW1lID0gIm1vczc4NDAiLAorCQkgICB9LAorCS5kZXNjcmlwdGlvbiA9IERSSVZFUl9ERVNDLAorCS5pZF90YWJsZSA9IG1vc2NoaXBfcG9ydF9pZF90YWJsZSwKKwkubnVtX2ludGVycnVwdF9pbiA9IDEsCS8vTlVNX0RPTlRfQ0FSRSwvLzEsCisjaWZkZWYgY2hlY2sKKwkubnVtX2J1bGtfaW4gPSA0LAorCS5udW1fYnVsa19vdXQgPSA0LAorCS5udW1fcG9ydHMgPSA0LAorI2VuZGlmCisJLm9wZW4gPSBtb3M3ODQwX29wZW4sCisJLmNsb3NlID0gbW9zNzg0MF9jbG9zZSwKKwkud3JpdGUgPSBtb3M3ODQwX3dyaXRlLAorCS53cml0ZV9yb29tID0gbW9zNzg0MF93cml0ZV9yb29tLAorCS5jaGFyc19pbl9idWZmZXIgPSBtb3M3ODQwX2NoYXJzX2luX2J1ZmZlciwKKwkudGhyb3R0bGUgPSBtb3M3ODQwX3Rocm90dGxlLAorCS51bnRocm90dGxlID0gbW9zNzg0MF91bnRocm90dGxlLAorCS5jYWxjX251bV9wb3J0cyA9IG1vczc4NDBfY2FsY19udW1fcG9ydHMsCisjaWZkZWYgTUNTU2VyaWFsUHJvYmUKKwkucHJvYmUgPSBtb3M3ODQwX3NlcmlhbF9wcm9iZSwKKyNlbmRpZgorCS5pb2N0bCA9IG1vczc4NDBfaW9jdGwsCisJLnNldF90ZXJtaW9zID0gbW9zNzg0MF9zZXRfdGVybWlvcywKKwkuYnJlYWtfY3RsID0gbW9zNzg0MF9icmVhaywKKwkudGlvY21nZXQgPSBtb3M3ODQwX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9IG1vczc4NDBfdGlvY21zZXQsCisJLmF0dGFjaCA9IG1vczc4NDBfc3RhcnR1cCwKKwkuc2h1dGRvd24gPSBtb3M3ODQwX3NodXRkb3duLAorCS5yZWFkX2J1bGtfY2FsbGJhY2sgPSBtb3M3ODQwX2J1bGtfaW5fY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0gbW9zNzg0MF9pbnRlcnJ1cHRfY2FsbGJhY2ssCit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgaW9fZHJpdmVyID0geworCS5uYW1lID0gIm1vczc4NDAiLAorCS5wcm9iZSA9IHVzYl9zZXJpYWxfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSB1c2Jfc2VyaWFsX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0gbW9zY2hpcF9pZF90YWJsZV9jb21iaW5lZCwKK307CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBtb3NjaGlwNzg0MF9pbml0CisgKglUaGlzIGlzIGNhbGxlZCBieSB0aGUgbW9kdWxlIHN1YnN5c3RlbSwgb3Igb24gc3RhcnR1cCB0byBpbml0aWFsaXplIHVzCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgX19pbml0IG1vc2NoaXA3ODQwX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0dmFsOworCisJZGJnKCIlcyBcbiIsICIgbW9zNzg0MF9pbml0IDplbnRlcmluZy4uLi4uLi4uLi4iKTsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiBzZXJpYWwgKi8KKwlyZXR2YWwgPSB1c2Jfc2VyaWFsX3JlZ2lzdGVyKCZtb3NjaGlwNzg0MF80cG9ydF9kZXZpY2UpOworCisJaWYgKHJldHZhbCkKKwkJZ290byBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI7CisKKwlkYmcoIiVzXG4iLCAiRW50cmluZy4uLiIpOworCWluZm8oRFJJVkVSX0RFU0MgIiAiIERSSVZFUl9WRVJTSU9OKTsKKworCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHVzYiAqLworCXJldHZhbCA9IHVzYl9yZWdpc3RlcigmaW9fZHJpdmVyKTsKKworCWlmIChyZXR2YWwpCisJCWdvdG8gZmFpbGVkX3VzYl9yZWdpc3RlcjsKKworCWlmIChyZXR2YWwgPT0gMCkgeworCQlkYmcoIiVzXG4iLCAiTGVhdmluZy4uLiIpOworCQlyZXR1cm4gMDsKKwl9CisKKyAgICAgIGZhaWxlZF91c2JfcmVnaXN0ZXI6CisJdXNiX3NlcmlhbF9kZXJlZ2lzdGVyKCZtb3NjaGlwNzg0MF80cG9ydF9kZXZpY2UpOworCisgICAgICBmYWlsZWRfcG9ydF9kZXZpY2VfcmVnaXN0ZXI6CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogbW9zY2hpcDc4NDBfZXhpdAorICoJQ2FsbGVkIHdoZW4gdGhlIGRyaXZlciBpcyBhYm91dCB0byBiZSB1bmxvYWRlZC4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgX19leGl0IG1vc2NoaXA3ODQwX2V4aXQodm9pZCkKK3sKKworCWRiZygiJXMgXG4iLCAiIG1vczc4NDBfZXhpdCA6ZW50ZXJpbmcuLi4uLi4uLi4uIik7CisKKwl1c2JfZGVyZWdpc3RlcigmaW9fZHJpdmVyKTsKKworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmbW9zY2hpcDc4NDBfNHBvcnRfZGV2aWNlKTsKKworCWRiZygiJXNcbiIsICJFbnRyaW5nLi4uIik7Cit9CisKK21vZHVsZV9pbml0KG1vc2NoaXA3ODQwX2luaXQpOworbW9kdWxlX2V4aXQobW9zY2hpcDc4NDBfZXhpdCk7CisKKy8qIE1vZHVsZSBpbmZvcm1hdGlvbiAqLworTU9EVUxFX0RFU0NSSVBUSU9OKERSSVZFUl9ERVNDKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCBTX0lSVUdPIHwgU19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgZW5hYmxlZCBvciBub3QiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCmluZGV4IGU0OWY0MDkuLmE3NjRmZjRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zZXJpYWwvb21uaW5ldC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9vbW5pbmV0LmMKQEAgLTI1NiwxNCArMjU2LDE0IEBACiAJCXJldHVybiAoMCk7CiAJfQogCi0Jc3Bpbl9sb2NrKCZ3cG9ydC0+bG9jayk7CisJc3Bpbl9sb2NrX2JoKCZ3cG9ydC0+bG9jayk7CiAJaWYgKHdwb3J0LT53cml0ZV91cmJfYnVzeSkgewotCQlzcGluX3VubG9jaygmd3BvcnQtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmd3BvcnQtPmxvY2spOwogCQlkYmcoIiVzIC0gYWxyZWFkeSB3cml0aW5nIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuIDA7CiAJfQogCXdwb3J0LT53cml0ZV91cmJfYnVzeSA9IDE7Ci0Jc3Bpbl91bmxvY2soJndwb3J0LT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmd3BvcnQtPmxvY2spOwogCiAJY291bnQgPSAoY291bnQgPiBPTU5JTkVUX0JVTEtPVVRTSVpFKSA/IE9NTklORVRfQlVMS09VVFNJWkUgOiBjb3VudDsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jIGIvZHJpdmVycy91c2Ivc2VyaWFsL3BsMjMwMy5jCmluZGV4IDY1ZTRkMDQuLjljMTgxNzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuYworKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmMKQEAgLTgxLDEwICs4MSwxMiBAQAogCXsgVVNCX0RFVklDRShTUEVFRERSQUdPTl9WRU5ET1JfSUQsIFNQRUVERFJBR09OX1BST0RVQ1RfSUQpIH0sCiAJeyBVU0JfREVWSUNFKERBVEFQSUxPVF9VMl9WRU5ET1JfSUQsIERBVEFQSUxPVF9VMl9QUk9EVUNUX0lEKSB9LAogCXsgVVNCX0RFVklDRShCRUxLSU5fVkVORE9SX0lELCBCRUxLSU5fUFJPRFVDVF9JRCkgfSwKKwl7IFVTQl9ERVZJQ0UoQUxDT1JfVkVORE9SX0lELCBBTENPUl9QUk9EVUNUX0lEKSB9LAorCXsgVVNCX0RFVklDRShIVUFXRUlfVkVORE9SX0lELCBIVUFXRUlfUFJPRFVDVF9JRCkgfSwKIAl7IH0JCQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCi1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIGlkX3RhYmxlKTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBpZF90YWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBwbDIzMDNfZHJpdmVyID0gewogCS5uYW1lID0JCSJwbDIzMDMiLApAQCAtMTI3LDY1ICsxMjksNiBAQAogI2RlZmluZSBVQVJUX09WRVJSVU5fRVJST1IJCTB4NDAKICNkZWZpbmUgVUFSVF9DVFMJCQkweDgwCiAKLS8qIGZ1bmN0aW9uIHByb3RvdHlwZXMgZm9yIGEgUEwyMzAzIHNlcmlhbCBjb252ZXJ0ZXIgKi8KLXN0YXRpYyBpbnQgcGwyMzAzX29wZW4gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxwKTsKLXN0YXRpYyB2b2lkIHBsMjMwM19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApOwotc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJCXN0cnVjdCB0ZXJtaW9zICpvbGQpOwotc3RhdGljIGludCBwbDIzMDNfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAotCQkJIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKTsKLXN0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2ludF9jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Ci1zdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXN0YXRpYyB2b2lkIHBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrIChzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKLXN0YXRpYyBpbnQgcGwyMzAzX3dyaXRlIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LAotCQkJIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvdW50KTsKLXN0YXRpYyB2b2lkIHBsMjMwM19zZW5kIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KTsKLXN0YXRpYyBpbnQgcGwyMzAzX3dyaXRlX3Jvb20oc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgaW50IHBsMjMwM19jaGFyc19pbl9idWZmZXIoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCk7Ci1zdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsaW50IGJyZWFrX3N0YXRlKTsKLXN0YXRpYyBpbnQgcGwyMzAzX3Rpb2NtZ2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7Ci1zdGF0aWMgaW50IHBsMjMwM190aW9jbXNldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgdW5zaWduZWQgaW50IHNldCwgdW5zaWduZWQgaW50IGNsZWFyKTsKLXN0YXRpYyBpbnQgcGwyMzAzX3N0YXJ0dXAgKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpOwotc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKTsKLXN0YXRpYyBzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGwyMzAzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSk7Ci1zdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKLXN0YXRpYyB2b2lkIHBsMjMwM19idWZfY2xlYXIoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYik7Ci1zdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfc3BhY2VfYXZhaWwoc3RydWN0IHBsMjMwM19idWYgKnBiKTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9wdXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjb25zdCBjaGFyICpidWYsCi0JdW5zaWduZWQgaW50IGNvdW50KTsKLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9nZXQoc3RydWN0IHBsMjMwM19idWYgKnBiLCBjaGFyICpidWYsCi0JdW5zaWduZWQgaW50IGNvdW50KTsKLQotCi0vKiBBbGwgb2YgdGhlIGRldmljZSBpbmZvIG5lZWRlZCBmb3IgdGhlIFBMMjMwMyBTSU8gc2VyaWFsIGNvbnZlcnRlciAqLwotc3RhdGljIHN0cnVjdCB1c2Jfc2VyaWFsX2RyaXZlciBwbDIzMDNfZGV2aWNlID0gewotCS5kcml2ZXIgPSB7Ci0JCS5vd25lciA9CVRISVNfTU9EVUxFLAotCQkubmFtZSA9CQkicGwyMzAzIiwKLQl9LAotCS5pZF90YWJsZSA9CQlpZF90YWJsZSwKLQkubnVtX2ludGVycnVwdF9pbiA9CU5VTV9ET05UX0NBUkUsCi0JLm51bV9idWxrX2luID0JCTEsCi0JLm51bV9idWxrX291dCA9CQkxLAotCS5udW1fcG9ydHMgPQkJMSwKLQkub3BlbiA9CQkJcGwyMzAzX29wZW4sCi0JLmNsb3NlID0JCXBsMjMwM19jbG9zZSwKLQkud3JpdGUgPQkJcGwyMzAzX3dyaXRlLAotCS5pb2N0bCA9CQlwbDIzMDNfaW9jdGwsCi0JLmJyZWFrX2N0bCA9CQlwbDIzMDNfYnJlYWtfY3RsLAotCS5zZXRfdGVybWlvcyA9CQlwbDIzMDNfc2V0X3Rlcm1pb3MsCi0JLnRpb2NtZ2V0ID0JCXBsMjMwM190aW9jbWdldCwKLQkudGlvY21zZXQgPQkJcGwyMzAzX3Rpb2Ntc2V0LAotCS5yZWFkX2J1bGtfY2FsbGJhY2sgPQlwbDIzMDNfcmVhZF9idWxrX2NhbGxiYWNrLAotCS5yZWFkX2ludF9jYWxsYmFjayA9CXBsMjMwM19yZWFkX2ludF9jYWxsYmFjaywKLQkud3JpdGVfYnVsa19jYWxsYmFjayA9CXBsMjMwM193cml0ZV9idWxrX2NhbGxiYWNrLAotCS53cml0ZV9yb29tID0JCXBsMjMwM193cml0ZV9yb29tLAotCS5jaGFyc19pbl9idWZmZXIgPQlwbDIzMDNfY2hhcnNfaW5fYnVmZmVyLAotCS5hdHRhY2ggPQkJcGwyMzAzX3N0YXJ0dXAsCi0JLnNodXRkb3duID0JCXBsMjMwM19zaHV0ZG93biwKLX07CiAKIGVudW0gcGwyMzAzX3R5cGUgewogCXR5cGVfMCwJCS8qIGRvbid0IGtub3cgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0eXBlIDAgYW5kICovCkBAIC0yMDQsOCArMTQ3LDE2NiBAQAogCWVudW0gcGwyMzAzX3R5cGUgdHlwZTsKIH07CiAKKy8qCisgKiBwbDIzMDNfYnVmX2FsbG9jCisgKgorICogQWxsb2NhdGUgYSBjaXJjdWxhciBidWZmZXIgYW5kIGFsbCBhc3NvY2lhdGVkIG1lbW9yeS4KKyAqLworc3RhdGljIHN0cnVjdCBwbDIzMDNfYnVmICpwbDIzMDNfYnVmX2FsbG9jKHVuc2lnbmVkIGludCBzaXplKQoreworCXN0cnVjdCBwbDIzMDNfYnVmICpwYjsKIAotc3RhdGljIGludCBwbDIzMDNfc3RhcnR1cCAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKKwlpZiAoc2l6ZSA9PSAwKQorCQlyZXR1cm4gTlVMTDsKKworCXBiID0gKHN0cnVjdCBwbDIzMDNfYnVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IHBsMjMwM19idWYpLCBHRlBfS0VSTkVMKTsKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlwYi0+YnVmX2J1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKHBiLT5idWZfYnVmID09IE5VTEwpIHsKKwkJa2ZyZWUocGIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlwYi0+YnVmX3NpemUgPSBzaXplOworCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQgPSBwYi0+YnVmX2J1ZjsKKworCXJldHVybiBwYjsKK30KKworLyoKKyAqIHBsMjMwM19idWZfZnJlZQorICoKKyAqIEZyZWUgdGhlIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgorICovCitzdGF0aWMgdm9pZCBwbDIzMDNfYnVmX2ZyZWUoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYikgeworCQlrZnJlZShwYi0+YnVmX2J1Zik7CisJCWtmcmVlKHBiKTsKKwl9Cit9CisKKy8qCisgKiBwbDIzMDNfYnVmX2NsZWFyCisgKgorICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCisgKi8KK3N0YXRpYyB2b2lkIHBsMjMwM19idWZfY2xlYXIoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYiAhPSBOVUxMKQorCQlwYi0+YnVmX2dldCA9IHBiLT5idWZfcHV0OworCQkvKiBlcXVpdmFsZW50IHRvIGEgZ2V0IG9mIGFsbCBkYXRhIGF2YWlsYWJsZSAqLworfQorCisvKgorICogcGwyMzAzX2J1Zl9kYXRhX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2YgZGF0YSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCisgKiBidWZmZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKK3sKKwlpZiAocGIgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwlyZXR1cm4gKChwYi0+YnVmX3NpemUgKyBwYi0+YnVmX3B1dCAtIHBiLT5idWZfZ2V0KSAlIHBiLT5idWZfc2l6ZSk7Cit9CisKKy8qCisgKiBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsCisgKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2Ygc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgorICogYnVmZmVyLgorICovCitzdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfc3BhY2VfYXZhaWwoc3RydWN0IHBsMjMwM19idWYgKnBiKQoreworCWlmIChwYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCXJldHVybiAoKHBiLT5idWZfc2l6ZSArIHBiLT5idWZfZ2V0IC0gcGItPmJ1Zl9wdXQgLSAxKSAlIHBiLT5idWZfc2l6ZSk7Cit9CisKKy8qCisgKiBwbDIzMDNfYnVmX3B1dAorICoKKyAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KKyAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3B1dChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNvbnN0IGNoYXIgKmJ1ZiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChwYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiAgPSBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHBiKTsKKwlpZiAoY291bnQgPiBsZW4pCisJCWNvdW50ID0gbGVuOworCisJaWYgKGNvdW50ID09IDApCisJCXJldHVybiAwOworCisJbGVuID0gcGItPmJ1Zl9idWYgKyBwYi0+YnVmX3NpemUgLSBwYi0+YnVmX3B1dDsKKwlpZiAoY291bnQgPiBsZW4pIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGxlbik7CisJCW1lbWNweShwYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOworCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmICsgY291bnQgLSBsZW47CisJfSBlbHNlIHsKKwkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKKwkJaWYgKGNvdW50IDwgbGVuKQorCQkJcGItPmJ1Zl9wdXQgKz0gY291bnQ7CisJCWVsc2UgLyogY291bnQgPT0gbGVuICovCisJCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmOworCX0KKworCXJldHVybiBjb3VudDsKK30KKworLyoKKyAqIHBsMjMwM19idWZfZ2V0CisgKgorICogR2V0IGRhdGEgZnJvbSB0aGUgY2lyY3VsYXIgYnVmZmVyIGFuZCBjb3B5IHRvIHRoZSBnaXZlbiBidWZmZXIuCisgKiBSZXN0cmljdCB0byB0aGUgYW1vdW50IG9mIGRhdGEgYXZhaWxhYmxlLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KKyAqLworc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX2dldChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNoYXIgKmJ1ZiwKKwkJCQkgICB1bnNpZ25lZCBpbnQgY291bnQpCit7CisJdW5zaWduZWQgaW50IGxlbjsKKworCWlmIChwYiA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHBsMjMwM19idWZfZGF0YV9hdmFpbChwYik7CisJaWYgKGNvdW50ID4gbGVuKQorCQljb3VudCA9IGxlbjsKKworCWlmIChjb3VudCA9PSAwKQorCQlyZXR1cm4gMDsKKworCWxlbiA9IHBiLT5idWZfYnVmICsgcGItPmJ1Zl9zaXplIC0gcGItPmJ1Zl9nZXQ7CisJaWYgKGNvdW50ID4gbGVuKSB7CisJCW1lbWNweShidWYsIHBiLT5idWZfZ2V0LCBsZW4pOworCQltZW1jcHkoYnVmK2xlbiwgcGItPmJ1Zl9idWYsIGNvdW50IC0gbGVuKTsKKwkJcGItPmJ1Zl9nZXQgPSBwYi0+YnVmX2J1ZiArIGNvdW50IC0gbGVuOworCX0gZWxzZSB7CisJCW1lbWNweShidWYsIHBiLT5idWZfZ2V0LCBjb3VudCk7CisJCWlmIChjb3VudCA8IGxlbikKKwkJCXBiLT5idWZfZ2V0ICs9IGNvdW50OworCQllbHNlIC8qIGNvdW50ID09IGxlbiAqLworCQkJcGItPmJ1Zl9nZXQgPSBwYi0+YnVmX2J1ZjsKKwl9CisKKwlyZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQgcGwyMzAzX3N0YXJ0dXAoc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCkKIHsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXY7CiAJZW51bSBwbDIzMDNfdHlwZSB0eXBlID0gdHlwZV8wOwpAQCAtMjQ3LDM2ICszNDgsMTcgQEAKIAlyZXR1cm4gLUVOT01FTTsKIH0KIAotc3RhdGljIGludCBzZXRfY29udHJvbF9saW5lcyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdTggdmFsdWUpCitzdGF0aWMgaW50IHNldF9jb250cm9sX2xpbmVzKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHU4IHZhbHVlKQogewogCWludCByZXR2YWw7CiAJCi0JcmV0dmFsID0gdXNiX2NvbnRyb2xfbXNnIChkZXYsIHVzYl9zbmRjdHJscGlwZSAoZGV2LCAwKSwKLQkJCQkgIFNFVF9DT05UUk9MX1JFUVVFU1QsIFNFVF9DT05UUk9MX1JFUVVFU1RfVFlQRSwKLQkJCQkgIHZhbHVlLCAwLCBOVUxMLCAwLCAxMDApOworCXJldHZhbCA9IHVzYl9jb250cm9sX21zZyhkZXYsIHVzYl9zbmRjdHJscGlwZShkZXYsIDApLAorCQkJCSBTRVRfQ09OVFJPTF9SRVFVRVNULCBTRVRfQ09OVFJPTF9SRVFVRVNUX1RZUEUsCisJCQkJIHZhbHVlLCAwLCBOVUxMLCAwLCAxMDApOwogCWRiZygiJXMgLSB2YWx1ZSA9ICVkLCByZXR2YWwgPSAlZCIsIF9fRlVOQ1RJT05fXywgdmFsdWUsIHJldHZhbCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGludCBwbDIzMDNfd3JpdGUgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCkKLXsKLQlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7Ci0KLQlpZiAoIWNvdW50KQotCQlyZXR1cm4gY291bnQ7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwotCWNvdW50ID0gcGwyMzAzX2J1Zl9wdXQocHJpdi0+YnVmLCBidWYsIGNvdW50KTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQlwbDIzMDNfc2VuZChwb3J0KTsKLQotCXJldHVybiBjb3VudDsKLX0KLQogc3RhdGljIHZvaWQgcGwyMzAzX3NlbmQoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCkKIHsKIAlpbnQgY291bnQsIHJlc3VsdDsKQEAgLTI5Myw3ICszNzUsNyBAQAogCX0KIAogCWNvdW50ID0gcGwyMzAzX2J1Zl9nZXQocHJpdi0+YnVmLCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlciwKLQkJcG9ydC0+YnVsa19vdXRfc2l6ZSk7CisJCQkgICAgICAgcG9ydC0+YnVsa19vdXRfc2l6ZSk7CiAKIAlpZiAoY291bnQgPT0gMCkgewogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC0zMDQsMTMgKzM4NiwxNSBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCi0JdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LCBwb3J0LT53cml0ZV91cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sIGNvdW50LAorCQkJICAgICAgcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXIpOwogCiAJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gY291bnQ7CiAJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+d3JpdGVfdXJiLCBHRlBfQVRPTUlDKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT53cml0ZV91cmIsIEdGUF9BVE9NSUMpOwogCWlmIChyZXN1bHQpIHsKLQkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBmYWlsZWQgc3VibWl0dGluZyB3cml0ZSB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgd3JpdGUgdXJiLCIKKwkJCSIgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKIAkJcHJpdi0+d3JpdGVfdXJiX2luX3VzZSA9IDA7CiAJCS8vIFRPRE86IHJlc2NoZWR1bGUgcGwyMzAzX3NlbmQKIAl9CkBAIC0zMTgsNiArNDAyLDI2IEBACiAJdXNiX3NlcmlhbF9wb3J0X3NvZnRpbnQocG9ydCk7CiB9CiAKK3N0YXRpYyBpbnQgcGwyMzAzX3dyaXRlKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJCWludCBjb3VudCkKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWRiZygiJXMgLSBwb3J0ICVkLCAlZCBieXRlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjb3VudCk7CisKKwlpZiAoIWNvdW50KQorCQlyZXR1cm4gY291bnQ7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCWNvdW50ID0gcGwyMzAzX2J1Zl9wdXQocHJpdi0+YnVmLCBidWYsIGNvdW50KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwlwbDIzMDNfc2VuZChwb3J0KTsKKworCXJldHVybiBjb3VudDsKK30KKwogc3RhdGljIGludCBwbDIzMDNfd3JpdGVfcm9vbShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0KQogewogCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTM1MCw3ICs0NTQsOCBAQAogCXJldHVybiBjaGFyczsKIH0KIAotc3RhdGljIHZvaWQgcGwyMzAzX3NldF90ZXJtaW9zIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCitzdGF0aWMgdm9pZCBwbDIzMDNfc2V0X3Rlcm1pb3Moc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwKKwkJCSAgICAgICBzdHJ1Y3QgdGVybWlvcyAqb2xkX3Rlcm1pb3MpCiB7CiAJc3RydWN0IHVzYl9zZXJpYWwgKnNlcmlhbCA9IHBvcnQtPnNlcmlhbDsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CkBAIC0zNzEsNyArNDc2LDggQEAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCWlmICghcHJpdi0+dGVybWlvc19pbml0aWFsaXplZCkgewogCQkqKHBvcnQtPnR0eS0+dGVybWlvcykgPSB0dHlfc3RkX3Rlcm1pb3M7Ci0JCXBvcnQtPnR0eS0+dGVybWlvcy0+Y19jZmxhZyA9IEI5NjAwIHwgQ1M4IHwgQ1JFQUQgfCBIVVBDTCB8IENMT0NBTDsKKwkJcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnID0gQjk2MDAgfCBDUzggfCBDUkVBRCB8CisJCQkJCSAgICAgIEhVUENMIHwgQ0xPQ0FMOwogCQlwcml2LT50ZXJtaW9zX2luaXRpYWxpemVkID0gMTsKIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwpAQCAtMzgwLDI0ICs0ODYsMjQgQEAKIAkvKiBjaGVjayB0aGF0IHRoZXkgcmVhbGx5IHdhbnQgdXMgdG8gY2hhbmdlIHNvbWV0aGluZyAqLwogCWlmIChvbGRfdGVybWlvcykgewogCQlpZiAoKGNmbGFnID09IG9sZF90ZXJtaW9zLT5jX2NmbGFnKSAmJgotCQkgICAgKFJFTEVWQU5UX0lGTEFHKHBvcnQtPnR0eS0+dGVybWlvcy0+Y19pZmxhZykgPT0gUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgewotCQkgICAgZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKLQkJICAgIHJldHVybjsKKwkJICAgIChSRUxFVkFOVF9JRkxBRyhwb3J0LT50dHktPnRlcm1pb3MtPmNfaWZsYWcpID09CisJCSAgICAgUkVMRVZBTlRfSUZMQUcob2xkX3Rlcm1pb3MtPmNfaWZsYWcpKSkgeworCQkJZGJnKCIlcyAtIG5vdGhpbmcgdG8gY2hhbmdlLi4uIiwgX19GVU5DVElPTl9fKTsKKwkJCXJldHVybjsKIAkJfQogCX0KIAotCWJ1ZiA9IGt6YWxsb2MgKDcsIEdGUF9LRVJORUwpOworCWJ1ZiA9IGt6YWxsb2MoNywgR0ZQX0tFUk5FTCk7CiAJaWYgKCFidWYpIHsKIAkJZGV2X2VycigmcG9ydC0+ZGV2LCAiJXMgLSBvdXQgb2YgbWVtb3J5LlxuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KLQkKLQlpID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3JjdmN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCi0JCQkgICAgIEdFVF9MSU5FX1JFUVVFU1QsIEdFVF9MSU5FX1JFUVVFU1RfVFlQRSwKLQkJCSAgICAgMCwgMCwgYnVmLCA3LCAxMDApOwotCWRiZyAoIjB4YTE6MHgyMTowOjAgICVkIC0gJXggJXggJXggJXggJXggJXggJXgiLCBpLAotCSAgICAgYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSwgYnVmWzNdLCBidWZbNF0sIGJ1Zls1XSwgYnVmWzZdKTsKIAorCWkgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZShzZXJpYWwtPmRldiwgMCksCisJCQkgICAgR0VUX0xJTkVfUkVRVUVTVCwgR0VUX0xJTkVfUkVRVUVTVF9UWVBFLAorCQkJICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKKwlkYmcoIjB4YTE6MHgyMTowOjAgICVkIC0gJXggJXggJXggJXggJXggJXggJXgiLCBpLAorCSAgICBidWZbMF0sIGJ1ZlsxXSwgYnVmWzJdLCBidWZbM10sIGJ1Zls0XSwgYnVmWzVdLCBidWZbNl0pOwogCiAJaWYgKGNmbGFnICYgQ1NJWkUpIHsKIAkJc3dpdGNoIChjZmxhZyAmIENTSVpFKSB7CkBAIC00MjksNyArNTM1LDggQEAKIAkJY2FzZSBCMjMwNDAwOgliYXVkID0gMjMwNDAwOwlicmVhazsKIAkJY2FzZSBCNDYwODAwOgliYXVkID0gNDYwODAwOwlicmVhazsKIAkJZGVmYXVsdDoKLQkJCWRldl9lcnIoJnBvcnQtPmRldiwgInBsMjMwMyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYmF1ZHJhdGUgcmVxdWVzdGVkIChmaXggaXQpXG4iKTsKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgInBsMjMwMyBkcml2ZXIgZG9lcyBub3Qgc3VwcG9ydCIKKwkJCQkiIHRoZSBiYXVkcmF0ZSByZXF1ZXN0ZWQgKGZpeCBpdClcbiIpOwogCQkJYnJlYWs7CiAJfQogCWRiZygiJXMgLSBiYXVkID0gJWQiLCBfX0ZVTkNUSU9OX18sIGJhdWQpOwpAQCAtNDY5LDEwICs1NzYsMTAgQEAKIAkJZGJnKCIlcyAtIHBhcml0eSA9IG5vbmUiLCBfX0ZVTkNUSU9OX18pOwogCX0KIAotCWkgPSB1c2JfY29udHJvbF9tc2cgKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUgKHNlcmlhbC0+ZGV2LCAwKSwKLQkJCSAgICAgU0VUX0xJTkVfUkVRVUVTVCwgU0VUX0xJTkVfUkVRVUVTVF9UWVBFLCAKLQkJCSAgICAgMCwgMCwgYnVmLCA3LCAxMDApOwotCWRiZyAoIjB4MjE6MHgyMDowOjAgICVkIiwgaSk7CisJaSA9IHVzYl9jb250cm9sX21zZyhzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC0+ZGV2LCAwKSwKKwkJCSAgICBTRVRfTElORV9SRVFVRVNULCBTRVRfTElORV9SRVFVRVNUX1RZUEUsCisJCQkgICAgMCwgMCwgYnVmLCA3LCAxMDApOworCWRiZygiMHgyMToweDIwOjA6MCAgJWQiLCBpKTsKIAogCS8qIGNoYW5nZSBjb250cm9sIGxpbmVzIGlmIHdlIGFyZSBzd2l0Y2hpbmcgdG8gb3IgZnJvbSBCMCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CkBAIC00ODgsMTMgKzU5NSwxMyBAQAogCX0gZWxzZSB7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAl9Ci0JCisKIAlidWZbMF0gPSBidWZbMV0gPSBidWZbMl0gPSBidWZbM10gPSBidWZbNF0gPSBidWZbNV0gPSBidWZbNl0gPSAwOwogCi0JaSA9IHVzYl9jb250cm9sX21zZyAoc2VyaWFsLT5kZXYsIHVzYl9yY3ZjdHJscGlwZSAoc2VyaWFsLT5kZXYsIDApLAotCQkJICAgICBHRVRfTElORV9SRVFVRVNULCBHRVRfTElORV9SRVFVRVNUX1RZUEUsCi0JCQkgICAgIDAsIDAsIGJ1ZiwgNywgMTAwKTsKLQlkYmcgKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKKwlpID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2JfcmN2Y3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJICAgIEdFVF9MSU5FX1JFUVVFU1QsIEdFVF9MSU5FX1JFUVVFU1RfVFlQRSwKKwkJCSAgICAwLCAwLCBidWYsIDcsIDEwMCk7CisJZGJnKCIweGExOjB4MjE6MDowICAlZCAtICV4ICV4ICV4ICV4ICV4ICV4ICV4IiwgaSwKIAkgICAgIGJ1ZlswXSwgYnVmWzFdLCBidWZbMl0sIGJ1ZlszXSwgYnVmWzRdLCBidWZbNV0sIGJ1Zls2XSk7CiAKIAlpZiAoY2ZsYWcgJiBDUlRTQ1RTKSB7CkBAIC01MDMsMTggKzYxMCw4MiBAQAogCQkJaW5kZXggPSAweDYxOwogCQllbHNlCiAJCQlpbmRleCA9IDB4NDE7Ci0JCWkgPSB1c2JfY29udHJvbF9tc2coc2VyaWFsLT5kZXYsIAorCQlpID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LAogCQkJCSAgICB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAogCQkJCSAgICBWRU5ET1JfV1JJVEVfUkVRVUVTVCwKIAkJCQkgICAgVkVORE9SX1dSSVRFX1JFUVVFU1RfVFlQRSwKIAkJCQkgICAgMHgwLCBpbmRleCwgTlVMTCwgMCwgMTAwKTsKLQkJZGJnICgiMHg0MDoweDE6MHgwOjB4JXggICVkIiwgaW5kZXgsIGkpOworCQlkYmcoIjB4NDA6MHgxOjB4MDoweCV4ICAlZCIsIGluZGV4LCBpKTsKIAl9CiAKLQlrZnJlZSAoYnVmKTsKKwlrZnJlZShidWYpOwogfQogCi1zdGF0aWMgaW50IHBsMjMwM19vcGVuIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3N0YXRpYyB2b2lkIHBsMjMwM19jbG9zZShzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgY19jZmxhZzsKKwlpbnQgYnBzOworCWxvbmcgdGltZW91dDsKKwl3YWl0X3F1ZXVlX3Qgd2FpdDsKKworCWRiZygiJXMgLSBwb3J0ICVkIiwgX19GVU5DVElPTl9fLCBwb3J0LT5udW1iZXIpOworCisJLyogd2FpdCBmb3IgZGF0YSB0byBkcmFpbiBmcm9tIHRoZSBidWZmZXIgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXRpbWVvdXQgPSBQTDIzMDNfQ0xPU0lOR19XQUlUOworCWluaXRfd2FpdHF1ZXVlX2VudHJ5KCZ3YWl0LCBjdXJyZW50KTsKKwlhZGRfd2FpdF9xdWV1ZSgmcG9ydC0+dHR5LT53cml0ZV93YWl0LCAmd2FpdCk7CisJZm9yICg7OykgeworCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOworCQlpZiAocGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHByaXYtPmJ1ZikgPT0gMCB8fAorCQkgICAgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIHx8CisJCSAgICAhdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCS8qIGRpc2Nvbm5lY3QgKi8KKwkJCWJyZWFrOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisJCXRpbWVvdXQgPSBzY2hlZHVsZV90aW1lb3V0KHRpbWVvdXQpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCX0KKwlzZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpOworCXJlbW92ZV93YWl0X3F1ZXVlKCZwb3J0LT50dHktPndyaXRlX3dhaXQsICZ3YWl0KTsKKwkvKiBjbGVhciBvdXQgYW55IHJlbWFpbmluZyBkYXRhIGluIHRoZSBidWZmZXIgKi8KKwlwbDIzMDNfYnVmX2NsZWFyKHByaXYtPmJ1Zik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCisJLyogd2FpdCBmb3IgY2hhcmFjdGVycyB0byBkcmFpbiBmcm9tIHRoZSBkZXZpY2UgKi8KKwkvKiAodGhpcyBpcyBsb25nIGVub3VnaCBmb3IgdGhlIGVudGlyZSAyNTYgYnl0ZSAqLworCS8qIHBsMjMwMyBoYXJkd2FyZSBidWZmZXIgdG8gZHJhaW4gd2l0aCBubyBmbG93ICovCisJLyogY29udHJvbCBmb3IgZGF0YSByYXRlcyBvZiAxMjAwIGJwcyBvciBtb3JlLCAqLworCS8qIGZvciBsb3dlciByYXRlcyB3ZSBzaG91bGQgcmVhbGx5IGtub3cgaG93IG11Y2ggKi8KKwkvKiBkYXRhIGlzIGluIHRoZSBidWZmZXIgdG8gY29tcHV0ZSBhIGRlbGF5ICovCisJLyogdGhhdCBpcyBub3QgdW5uZWNlc3NhcmlseSBsb25nKSAqLworCWJwcyA9IHR0eV9nZXRfYmF1ZF9yYXRlKHBvcnQtPnR0eSk7CisJaWYgKGJwcyA+IDEyMDApCisJCXRpbWVvdXQgPSBtYXgoKEhaKjI1NjApL2JwcyxIWi8xMCk7CisJZWxzZQorCQl0aW1lb3V0ID0gMipIWjsKKwlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUodGltZW91dCk7CisKKwkvKiBzaHV0ZG93biBvdXIgdXJicyAqLworCWRiZygiJXMgLSBzaHV0dGluZyBkb3duIHVyYnMiLCBfX0ZVTkNUSU9OX18pOworCXVzYl9raWxsX3VyYihwb3J0LT53cml0ZV91cmIpOworCXVzYl9raWxsX3VyYihwb3J0LT5yZWFkX3VyYik7CisJdXNiX2tpbGxfdXJiKHBvcnQtPmludGVycnVwdF9pbl91cmIpOworCisJaWYgKHBvcnQtPnR0eSkgeworCQljX2NmbGFnID0gcG9ydC0+dHR5LT50ZXJtaW9zLT5jX2NmbGFnOworCQlpZiAoY19jZmxhZyAmIEhVUENMKSB7CisJCQkvKiBkcm9wIERUUiBhbmQgUlRTICovCisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOworCQkJcHJpdi0+bGluZV9jb250cm9sID0gMDsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwkJCXNldF9jb250cm9sX2xpbmVzKHBvcnQtPnNlcmlhbC0+ZGV2LCAwKTsKKwkJfQorCX0KK30KKworc3RhdGljIGludCBwbDIzMDNfb3BlbihzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKIAlzdHJ1Y3QgdGVybWlvcyB0bXBfdGVybWlvczsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwpAQCAtNTY4LDk4ICs3MzksMzUgQEAKIAogCS8qIFNldHVwIHRlcm1pb3MgKi8KIAlpZiAocG9ydC0+dHR5KSB7Ci0JCXBsMjMwM19zZXRfdGVybWlvcyAocG9ydCwgJnRtcF90ZXJtaW9zKTsKKwkJcGwyMzAzX3NldF90ZXJtaW9zKHBvcnQsICZ0bXBfdGVybWlvcyk7CiAJfQogCiAJLy9GSVhNRTogbmVlZCB0byBhc3NlcnQgUlRTIGFuZCBEVFIgaWYgQ1JUU0NUUyBvZmYKIAogCWRiZygiJXMgLSBzdWJtaXR0aW5nIHJlYWQgdXJiIiwgX19GVU5DVElPTl9fKTsKIAlwb3J0LT5yZWFkX3VyYi0+ZGV2ID0gc2VyaWFsLT5kZXY7Ci0JcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPnJlYWRfdXJiLCBHRlBfS0VSTkVMKTsKKwlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYihwb3J0LT5yZWFkX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCBlcnJvciAlZFxuIiwgX19GVU5DVElPTl9fLCByZXN1bHQpOwotCQlwbDIzMDNfY2xvc2UgKHBvcnQsIE5VTEwpOworCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIHJlYWQgdXJiLCIKKwkJCSIgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJcGwyMzAzX2Nsb3NlKHBvcnQsIE5VTEwpOwogCQlyZXR1cm4gLUVQUk9UTzsKIAl9CiAKIAlkYmcoIiVzIC0gc3VibWl0dGluZyBpbnRlcnJ1cHQgdXJiIiwgX19GVU5DVElPTl9fKTsKIAlwb3J0LT5pbnRlcnJ1cHRfaW5fdXJiLT5kZXYgPSBzZXJpYWwtPmRldjsKLQlyZXN1bHQgPSB1c2Jfc3VibWl0X3VyYiAocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CisJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYiwgR0ZQX0tFUk5FTCk7CiAJaWYgKHJlc3VsdCkgewotCQlkZXZfZXJyKCZwb3J0LT5kZXYsICIlcyAtIGZhaWxlZCBzdWJtaXR0aW5nIGludGVycnVwdCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7Ci0JCXBsMjMwM19jbG9zZSAocG9ydCwgTlVMTCk7CisJCWRldl9lcnIoJnBvcnQtPmRldiwgIiVzIC0gZmFpbGVkIHN1Ym1pdHRpbmcgaW50ZXJydXB0IHVyYiwiCisJCQkiIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCXBsMjMwM19jbG9zZShwb3J0LCBOVUxMKTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyB2b2lkIHBsMjMwM19jbG9zZSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbHApCi17Ci0Jc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JdW5zaWduZWQgaW50IGNfY2ZsYWc7Ci0JaW50IGJwczsKLQlsb25nIHRpbWVvdXQ7Ci0Jd2FpdF9xdWV1ZV90IHdhaXQ7Ci0KLQlkYmcoIiVzIC0gcG9ydCAlZCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyKTsKLQotCS8qIHdhaXQgZm9yIGRhdGEgdG8gZHJhaW4gZnJvbSB0aGUgYnVmZmVyICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQl0aW1lb3V0ID0gUEwyMzAzX0NMT1NJTkdfV0FJVDsKLQlpbml0X3dhaXRxdWV1ZV9lbnRyeSgmd2FpdCwgY3VycmVudCk7Ci0JYWRkX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwotCWZvciAoOzspIHsKLQkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKLQkJaWYgKHBsMjMwM19idWZfZGF0YV9hdmFpbChwcml2LT5idWYpID09IDAKLQkJfHwgdGltZW91dCA9PSAwIHx8IHNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpCi0JCXx8ICF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkJLyogZGlzY29ubmVjdCAqLwotCQkJYnJlYWs7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJdGltZW91dCA9IHNjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JfQotCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7Ci0JcmVtb3ZlX3dhaXRfcXVldWUoJnBvcnQtPnR0eS0+d3JpdGVfd2FpdCwgJndhaXQpOwotCS8qIGNsZWFyIG91dCBhbnkgcmVtYWluaW5nIGRhdGEgaW4gdGhlIGJ1ZmZlciAqLwotCXBsMjMwM19idWZfY2xlYXIocHJpdi0+YnVmKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0KLQkvKiB3YWl0IGZvciBjaGFyYWN0ZXJzIHRvIGRyYWluIGZyb20gdGhlIGRldmljZSAqLwotCS8qICh0aGlzIGlzIGxvbmcgZW5vdWdoIGZvciB0aGUgZW50aXJlIDI1NiBieXRlICovCi0JLyogcGwyMzAzIGhhcmR3YXJlIGJ1ZmZlciB0byBkcmFpbiB3aXRoIG5vIGZsb3cgKi8KLQkvKiBjb250cm9sIGZvciBkYXRhIHJhdGVzIG9mIDEyMDAgYnBzIG9yIG1vcmUsICovCi0JLyogZm9yIGxvd2VyIHJhdGVzIHdlIHNob3VsZCByZWFsbHkga25vdyBob3cgbXVjaCAqLwotCS8qIGRhdGEgaXMgaW4gdGhlIGJ1ZmZlciB0byBjb21wdXRlIGEgZGVsYXkgKi8KLQkvKiB0aGF0IGlzIG5vdCB1bm5lY2Vzc2FyaWx5IGxvbmcpICovCi0JYnBzID0gdHR5X2dldF9iYXVkX3JhdGUocG9ydC0+dHR5KTsKLQlpZiAoYnBzID4gMTIwMCkKLQkJdGltZW91dCA9IG1heCgoSFoqMjU2MCkvYnBzLEhaLzEwKTsKLQllbHNlCi0JCXRpbWVvdXQgPSAyKkhaOwotCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZSh0aW1lb3V0KTsKLQotCS8qIHNodXRkb3duIG91ciB1cmJzICovCi0JZGJnKCIlcyAtIHNodXR0aW5nIGRvd24gdXJicyIsIF9fRlVOQ1RJT05fXyk7Ci0JdXNiX2tpbGxfdXJiKHBvcnQtPndyaXRlX3VyYik7Ci0JdXNiX2tpbGxfdXJiKHBvcnQtPnJlYWRfdXJiKTsKLQl1c2Jfa2lsbF91cmIocG9ydC0+aW50ZXJydXB0X2luX3VyYik7Ci0KLQlpZiAocG9ydC0+dHR5KSB7Ci0JCWNfY2ZsYWcgPSBwb3J0LT50dHktPnRlcm1pb3MtPmNfY2ZsYWc7Ci0JCWlmIChjX2NmbGFnICYgSFVQQ0wpIHsKLQkJCS8qIGRyb3AgRFRSIGFuZCBSVFMgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQlwcml2LT5saW5lX2NvbnRyb2wgPSAwOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQkJCXNldF9jb250cm9sX2xpbmVzIChwb3J0LT5zZXJpYWwtPmRldiwgMCk7Ci0JCX0KLQl9Ci19Ci0KLXN0YXRpYyBpbnQgcGwyMzAzX3Rpb2Ntc2V0IChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICB1bnNpZ25lZCBpbnQgc2V0LCB1bnNpZ25lZCBpbnQgY2xlYXIpCitzdGF0aWMgaW50IHBsMjMwM190aW9jbXNldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSwKKwkJCSAgIHVuc2lnbmVkIGludCBzZXQsIHVuc2lnbmVkIGludCBjbGVhcikKIHsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY2OCw3ICs3NzYsNyBAQAogCWlmICghdXNiX2dldF9pbnRmZGF0YShwb3J0LT5zZXJpYWwtPmludGVyZmFjZSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAlpZiAoc2V0ICYgVElPQ01fUlRTKQogCQlwcml2LT5saW5lX2NvbnRyb2wgfD0gQ09OVFJPTF9SVFM7CiAJaWYgKHNldCAmIFRJT0NNX0RUUikKQEAgLTY3OCwxMiArNzg2LDEyIEBACiAJaWYgKGNsZWFyICYgVElPQ01fRFRSKQogCQlwcml2LT5saW5lX2NvbnRyb2wgJj0gfkNPTlRST0xfRFRSOwogCWNvbnRyb2wgPSBwcml2LT5saW5lX2NvbnRyb2w7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAKLQlyZXR1cm4gc2V0X2NvbnRyb2xfbGluZXMgKHBvcnQtPnNlcmlhbC0+ZGV2LCBjb250cm9sKTsKKwlyZXR1cm4gc2V0X2NvbnRyb2xfbGluZXMocG9ydC0+c2VyaWFsLT5kZXYsIGNvbnRyb2wpOwogfQogCi1zdGF0aWMgaW50IHBsMjMwM190aW9jbWdldCAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqcG9ydCwgc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHBsMjMwM190aW9jbWdldChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgcGwyMzAzX3ByaXZhdGUgKnByaXYgPSB1c2JfZ2V0X3NlcmlhbF9wb3J0X2RhdGEocG9ydCk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTY5NiwxMCArODA0LDEwIEBACiAJaWYgKCF1c2JfZ2V0X2ludGZkYXRhKHBvcnQtPnNlcmlhbC0+aW50ZXJmYWNlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCW1jciA9IHByaXYtPmxpbmVfY29udHJvbDsKIAlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXJlc3VsdCA9ICgobWNyICYgQ09OVFJPTF9EVFIpCQk/IFRJT0NNX0RUUiA6IDApCiAJCSAgfCAoKG1jciAmIENPTlRST0xfUlRTKQk/IFRJT0NNX1JUUyA6IDApCkBAIC03MjEsMjIgKzgyOSwyMiBAQAogCXVuc2lnbmVkIGludCBzdGF0dXM7CiAJdW5zaWduZWQgaW50IGNoYW5nZWQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSAoJnByaXYtPmxvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bG9jaywgZmxhZ3MpOwogCXByZXZzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmcHJpdi0+bG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAogCXdoaWxlICgxKSB7CiAJCWludGVycnVwdGlibGVfc2xlZXBfb24oJnByaXYtPmRlbHRhX21zcl93YWl0KTsKIAkJLyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqLwogCQlpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpCiAJCQlyZXR1cm4gLUVSRVNUQVJUU1lTOwotCQkKLQkJc3Bpbl9sb2NrX2lycXNhdmUgKCZwcml2LT5sb2NrLCBmbGFncyk7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKIAkJc3RhdHVzID0gcHJpdi0+bGluZV9zdGF0dXM7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0JCQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7CisKIAkJY2hhbmdlZD1wcmV2c3RhdHVzXnN0YXR1czsKLQkJCisKIAkJaWYgKCgoYXJnICYgVElPQ01fUk5HKSAmJiAoY2hhbmdlZCAmIFVBUlRfUklORykpIHx8CiAJCSAgICAoKGFyZyAmIFRJT0NNX0RTUikgJiYgKGNoYW5nZWQgJiBVQVJUX0RTUikpIHx8CiAJCSAgICAoKGFyZyAmIFRJT0NNX0NEKSAgJiYgKGNoYW5nZWQgJiBVQVJUX0RDRCkpIHx8CkBAIC03NDksNyArODU3LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBwbDIzMDNfaW9jdGwgKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgcGwyMzAzX2lvY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJZGJnKCIlcyAoJWQpIGNtZCA9IDB4JTA0eCIsIF9fRlVOQ1RJT05fXywgcG9ydC0+bnVtYmVyLCBjbWQpOwogCkBAIC03NjYsNyArODc1LDcgQEAKIAlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogfQogCi1zdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsIChzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0LCBpbnQgYnJlYWtfc3RhdGUpCitzdGF0aWMgdm9pZCBwbDIzMDNfYnJlYWtfY3RsKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsIGludCBicmVha19zdGF0ZSkKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsID0gcG9ydC0+c2VyaWFsOwogCXUxNiBzdGF0ZTsKQEAgLTc4MCwxNSArODg5LDE0IEBACiAJCXN0YXRlID0gQlJFQUtfT047CiAJZGJnKCIlcyAtIHR1cm5pbmcgYnJlYWsgJXMiLCBfX0ZVTkNUSU9OX18sIHN0YXRlPT1CUkVBS19PRkYgPyAib2ZmIiA6ICJvbiIpOwogCi0JcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnIChzZXJpYWwtPmRldiwgdXNiX3NuZGN0cmxwaXBlIChzZXJpYWwtPmRldiwgMCksCi0JCQkJICBCUkVBS19SRVFVRVNULCBCUkVBS19SRVFVRVNUX1RZUEUsIHN0YXRlLCAKLQkJCQkgIDAsIE5VTEwsIDAsIDEwMCk7CisJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKHNlcmlhbC0+ZGV2LCB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLT5kZXYsIDApLAorCQkJCSBCUkVBS19SRVFVRVNULCBCUkVBS19SRVFVRVNUX1RZUEUsIHN0YXRlLAorCQkJCSAwLCBOVUxMLCAwLCAxMDApOwogCWlmIChyZXN1bHQpCiAJCWRiZygiJXMgLSBlcnJvciBzZW5kaW5nIGJyZWFrID0gJWQiLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiB9CiAKLQotc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duIChzdHJ1Y3QgdXNiX3NlcmlhbCAqc2VyaWFsKQorc3RhdGljIHZvaWQgcGwyMzAzX3NodXRkb3duKHN0cnVjdCB1c2Jfc2VyaWFsICpzZXJpYWwpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2OwpAQCAtODAyLDcgKzkxMCw3IEBACiAJCQlrZnJlZShwcml2KTsKIAkJCXVzYl9zZXRfc2VyaWFsX3BvcnRfZGF0YShzZXJpYWwtPnBvcnRbaV0sIE5VTEwpOwogCQl9Ci0JfQkJCisJfQogfQogCiBzdGF0aWMgdm9pZCBwbDIzMDNfdXBkYXRlX2xpbmVfc3RhdHVzKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQsCkBAIC04MTQsMjkgKzkyMiwzMyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTggc3RhdHVzX2lkeCA9IFVBUlRfU1RBVEU7CiAJdTggbGVuZ3RoID0gVUFSVF9TVEFURSArIDE7CisJdTE2IGlkdiwgaWRwOwogCi0JaWYgKChsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gU0lFTUVOU19WRU5ET1JfSUQpICYmCi0JICAgIChsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IFNJRU1FTlNfUFJPRFVDVF9JRF9YNjUgfHwKLQkgICAgIGxlMTZfdG9fY3B1KHBvcnQtPnNlcmlhbC0+ZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gU0lFTUVOU19QUk9EVUNUX0lEX1NYMSB8fAotCSAgICAgbGUxNl90b19jcHUocG9ydC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBTSUVNRU5TX1BST0RVQ1RfSURfWDc1KSkgewotCQlsZW5ndGggPSAxOwotCQlzdGF0dXNfaWR4ID0gMDsKKwlpZHYgPSBsZTE2X3RvX2NwdShwb3J0LT5zZXJpYWwtPmRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CisJaWRwID0gbGUxNl90b19jcHUocG9ydC0+c2VyaWFsLT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKKworCisJaWYgKGlkdiA9PSBTSUVNRU5TX1ZFTkRPUl9JRCkgeworCQlpZiAoaWRwID09IFNJRU1FTlNfUFJPRFVDVF9JRF9YNjUgfHwKKwkJICAgIGlkcCA9PSBTSUVNRU5TX1BST0RVQ1RfSURfU1gxIHx8CisJCSAgICBpZHAgPT0gU0lFTUVOU19QUk9EVUNUX0lEX1g3NSkgeworCisJCQlsZW5ndGggPSAxOworCQkJc3RhdHVzX2lkeCA9IDA7CisJCX0KIAl9CiAKIAlpZiAoYWN0dWFsX2xlbmd0aCA8IGxlbmd0aCkKLQkJZ290byBleGl0OworCQlyZXR1cm47CiAKICAgICAgICAgLyogU2F2ZSBvZmYgdGhlIHVhcnQgc3RhdHVzIGZvciBvdGhlcnMgdG8gbG9vayBhdCAqLwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sb2NrLCBmbGFncyk7CiAJcHJpdi0+bGluZV9zdGF0dXMgPSBkYXRhW3N0YXR1c19pZHhdOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxvY2ssIGZsYWdzKTsKLQl3YWtlX3VwX2ludGVycnVwdGlibGUgKCZwcml2LT5kZWx0YV9tc3Jfd2FpdCk7Ci0KLWV4aXQ6Ci0JcmV0dXJuOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwbDIzMDNfcmVhZF9pbnRfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OwogCXVuc2lnbmVkIGNoYXIgKmRhdGEgPSB1cmItPnRyYW5zZmVyX2J1ZmZlcjsKQEAgLTg1MywyNSArOTY1LDI5IEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5zdGF0dXMpOwogCQlyZXR1cm47CiAJZGVmYXVsdDoKLQkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sIHVyYi0+c3RhdHVzKTsKKwkJZGJnKCIlcyAtIG5vbnplcm8gdXJiIHN0YXR1cyByZWNlaXZlZDogJWQiLCBfX0ZVTkNUSU9OX18sCisJCSAgICB1cmItPnN0YXR1cyk7CiAJCWdvdG8gZXhpdDsKIAl9CiAKLQl1c2Jfc2VyaWFsX2RlYnVnX2RhdGEoZGVidWcsICZwb3J0LT5kZXYsIF9fRlVOQ1RJT05fXywgdXJiLT5hY3R1YWxfbGVuZ3RoLCB1cmItPnRyYW5zZmVyX2J1ZmZlcik7CisJdXNiX3NlcmlhbF9kZWJ1Z19kYXRhKGRlYnVnLCAmcG9ydC0+ZGV2LCBfX0ZVTkNUSU9OX18sCisJCQkgICAgICB1cmItPmFjdHVhbF9sZW5ndGgsIHVyYi0+dHJhbnNmZXJfYnVmZmVyKTsKKwogCXBsMjMwM191cGRhdGVfbGluZV9zdGF0dXMocG9ydCwgZGF0YSwgYWN0dWFsX2xlbmd0aCk7CiAKIGV4aXQ6Ci0Jc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CisJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzKQotCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCisJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsCisJCQkiJXMgLSB1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCByZXN1bHQgJWRcbiIsCiAJCQlfX0ZVTkNUSU9OX18sIHN0YXR1cyk7CiB9CiAKLQotc3RhdGljIHZvaWQgcGwyMzAzX3JlYWRfYnVsa19jYWxsYmFjayAoc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKK3N0YXRpYyB2b2lkIHBsMjMwM19yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAlzdHJ1Y3QgdXNiX3NlcmlhbF9wb3J0ICpwb3J0ID0gKHN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKikgdXJiLT5jb250ZXh0OwogCXN0cnVjdCBwbDIzMDNfcHJpdmF0ZSAqcHJpdiA9IHVzYl9nZXRfc2VyaWFsX3BvcnRfZGF0YShwb3J0KTsKQEAgLTg5MiwyMCArMTAwOCwyNSBAQAogCQkJcmV0dXJuOwogCQl9CiAJCWlmICh1cmItPnN0YXR1cyA9PSAtRVBST1RPKSB7Ci0JCQkvKiBQTDIzMDMgbXlzdGVyaW91c2x5IGZhaWxzIHdpdGggLUVQUk9UTyByZXNjaGVkdWxlIHRoZSByZWFkICovCi0JCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwgX19GVU5DVElPTl9fKTsKKwkJCS8qIFBMMjMwMyBteXN0ZXJpb3VzbHkgZmFpbHMgd2l0aCAtRVBST1RPIHJlc2NoZWR1bGUKKwkJCSAqIHRoZSByZWFkICovCisJCQlkYmcoIiVzIC0gY2F1Z2h0IC1FUFJPVE8sIHJlc3VibWl0dGluZyB0aGUgdXJiIiwKKwkJCSAgICBfX0ZVTkNUSU9OX18pOwogCQkJdXJiLT5zdGF0dXMgPSAwOwogCQkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHVyYiwgR0ZQX0FUT01JQyk7CiAJCQlpZiAocmVzdWx0KQotCQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQkJZGV2X2VycigmdXJiLT5kZXYtPmRldiwgIiVzIC0gZmFpbGVkIgorCQkJCQkiIHJlc3VibWl0dGluZyByZWFkIHVyYiwgZXJyb3IgJWRcbiIsCisJCQkJCV9fRlVOQ1RJT05fXywgcmVzdWx0KTsKIAkJCXJldHVybjsKIAkJfQogCQlkYmcoIiVzIC0gdW5hYmxlIHRvIGhhbmRsZSB0aGUgZXJyb3IsIGV4aXRpbmcuIiwgX19GVU5DVElPTl9fKTsKIAkJcmV0dXJuOwogCX0KIAotCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLCB1cmItPmFjdHVhbF9sZW5ndGgsIGRhdGEpOworCXVzYl9zZXJpYWxfZGVidWdfZGF0YShkZWJ1ZywgJnBvcnQtPmRldiwgX19GVU5DVElPTl9fLAorCQkJICAgICAgdXJiLT5hY3R1YWxfbGVuZ3RoLCBkYXRhKTsKIAogCS8qIGdldCB0dHlfZmxhZyBmcm9tIHN0YXR1cyAqLwogCXR0eV9mbGFnID0gVFRZX05PUk1BTDsKQEAgLTkxNCw3ICsxMDM1LDcgQEAKIAlzdGF0dXMgPSBwcml2LT5saW5lX3N0YXR1czsKIAlwcml2LT5saW5lX3N0YXR1cyAmPSB+VUFSVF9TVEFURV9UUkFOU0lFTlRfTUFTSzsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sb2NrLCBmbGFncyk7Ci0Jd2FrZV91cF9pbnRlcnJ1cHRpYmxlICgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmcHJpdi0+ZGVsdGFfbXNyX3dhaXQpOwogCiAJLyogYnJlYWsgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHBhcml0eSwgKi8KIAkvKiB3aGljaCB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgZnJhbWluZyBlcnJvcnMgKi8KQEAgLTkzMyw4ICsxMDU0LDggQEAKIAkJaWYgKHN0YXR1cyAmIFVBUlRfT1ZFUlJVTl9FUlJPUikKIAkJCXR0eV9pbnNlcnRfZmxpcF9jaGFyKHR0eSwgMCwgVFRZX09WRVJSVU4pOwogCQlmb3IgKGkgPSAwOyBpIDwgdXJiLT5hY3R1YWxfbGVuZ3RoOyArK2kpCi0JCQl0dHlfaW5zZXJ0X2ZsaXBfY2hhciAodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7Ci0JCXR0eV9mbGlwX2J1ZmZlcl9wdXNoICh0dHkpOworCQkJdHR5X2luc2VydF9mbGlwX2NoYXIodHR5LCBkYXRhW2ldLCB0dHlfZmxhZyk7CisJCXR0eV9mbGlwX2J1ZmZlcl9wdXNoKHR0eSk7CiAJfQogCiAJLyogU2NoZWR1bGUgdGhlIG5leHQgcmVhZCBfaWZfIHdlIGFyZSBzdGlsbCBvcGVuICovCkBAIC05NDIsMTUgKzEwNjMsMTQgQEAKIAkJdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKIAkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHJlc3VsdCkKLQkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CisJCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIgorCQkJCSIgcmVhZCB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiAJfQogCiAJcmV0dXJuOwogfQogCi0KLQotc3RhdGljIHZvaWQgcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2sgKHN0cnVjdCB1cmIgKnVyYiwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCitzdGF0aWMgdm9pZCBwbDIzMDNfd3JpdGVfYnVsa19jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXN0cnVjdCB1c2Jfc2VyaWFsX3BvcnQgKnBvcnQgPSAoc3RydWN0IHVzYl9zZXJpYWxfcG9ydCAqKSB1cmItPmNvbnRleHQ7CiAJc3RydWN0IHBsMjMwM19wcml2YXRlICpwcml2ID0gdXNiX2dldF9zZXJpYWxfcG9ydF9kYXRhKHBvcnQpOwpAQCAtOTY2LDE4ICsxMDg2LDIxIEBACiAJY2FzZSAtRU5PRU5UOgogCWNhc2UgLUVTSFVURE9XTjoKIAkJLyogdGhpcyB1cmIgaXMgdGVybWluYXRlZCwgY2xlYW4gdXAgKi8KLQkJZGJnKCIlcyAtIHVyYiBzaHV0dGluZyBkb3duIHdpdGggc3RhdHVzOiAlZCIsIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOworCQlkYmcoIiVzIC0gdXJiIHNodXR0aW5nIGRvd24gd2l0aCBzdGF0dXM6ICVkIiwgX19GVU5DVElPTl9fLAorCQkgICAgdXJiLT5zdGF0dXMpOwogCQlwcml2LT53cml0ZV91cmJfaW5fdXNlID0gMDsKIAkJcmV0dXJuOwogCWRlZmF1bHQ6CiAJCS8qIGVycm9yIGluIHRoZSB1cmIsIHNvIHdlIGhhdmUgdG8gcmVzdWJtaXQgaXQgKi8KIAkJZGJnKCIlcyAtIE92ZXJmbG93IGluIHdyaXRlIiwgX19GVU5DVElPTl9fKTsKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwgX19GVU5DVElPTl9fLCB1cmItPnN0YXR1cyk7CisJCWRiZygiJXMgLSBub256ZXJvIHdyaXRlIGJ1bGsgc3RhdHVzIHJlY2VpdmVkOiAlZCIsIF9fRlVOQ1RJT05fXywKKwkJICAgIHVyYi0+c3RhdHVzKTsKIAkJcG9ydC0+d3JpdGVfdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoID0gMTsKIAkJcG9ydC0+d3JpdGVfdXJiLT5kZXYgPSBwb3J0LT5zZXJpYWwtPmRldjsKLQkJcmVzdWx0ID0gdXNiX3N1Ym1pdF91cmIgKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CisJCXJlc3VsdCA9IHVzYl9zdWJtaXRfdXJiKHBvcnQtPndyaXRlX3VyYiwgR0ZQX0FUT01JQyk7CiAJCWlmIChyZXN1bHQpCi0JCQlkZXZfZXJyKCZ1cmItPmRldi0+ZGV2LCAiJXMgLSBmYWlsZWQgcmVzdWJtaXR0aW5nIHdyaXRlIHVyYiwgZXJyb3IgJWRcbiIsIF9fRlVOQ1RJT05fXywgcmVzdWx0KTsKKwkJCWRldl9lcnIoJnVyYi0+ZGV2LT5kZXYsICIlcyAtIGZhaWxlZCByZXN1Ym1pdHRpbmcgd3JpdGUiCisJCQkJIiB1cmIsIGVycm9yICVkXG4iLCBfX0ZVTkNUSU9OX18sIHJlc3VsdCk7CiAJCWVsc2UKIAkJCXJldHVybjsKIAl9CkBAIC05ODgsMTkxICsxMTExLDM4IEBACiAJcGwyMzAzX3NlbmQocG9ydCk7CiB9CiAKKy8qIEFsbCBvZiB0aGUgZGV2aWNlIGluZm8gbmVlZGVkIGZvciB0aGUgUEwyMzAzIFNJTyBzZXJpYWwgY29udmVydGVyICovCitzdGF0aWMgc3RydWN0IHVzYl9zZXJpYWxfZHJpdmVyIHBsMjMwM19kZXZpY2UgPSB7CisJLmRyaXZlciA9IHsKKwkJLm93bmVyID0JVEhJU19NT0RVTEUsCisJCS5uYW1lID0JCSJwbDIzMDMiLAorCX0sCisJLmlkX3RhYmxlID0JCWlkX3RhYmxlLAorCS5udW1faW50ZXJydXB0X2luID0JTlVNX0RPTlRfQ0FSRSwKKwkubnVtX2J1bGtfaW4gPQkJMSwKKwkubnVtX2J1bGtfb3V0ID0JCTEsCisJLm51bV9wb3J0cyA9CQkxLAorCS5vcGVuID0JCQlwbDIzMDNfb3BlbiwKKwkuY2xvc2UgPQkJcGwyMzAzX2Nsb3NlLAorCS53cml0ZSA9CQlwbDIzMDNfd3JpdGUsCisJLmlvY3RsID0JCXBsMjMwM19pb2N0bCwKKwkuYnJlYWtfY3RsID0JCXBsMjMwM19icmVha19jdGwsCisJLnNldF90ZXJtaW9zID0JCXBsMjMwM19zZXRfdGVybWlvcywKKwkudGlvY21nZXQgPQkJcGwyMzAzX3Rpb2NtZ2V0LAorCS50aW9jbXNldCA9CQlwbDIzMDNfdGlvY21zZXQsCisJLnJlYWRfYnVsa19jYWxsYmFjayA9CXBsMjMwM19yZWFkX2J1bGtfY2FsbGJhY2ssCisJLnJlYWRfaW50X2NhbGxiYWNrID0JcGwyMzAzX3JlYWRfaW50X2NhbGxiYWNrLAorCS53cml0ZV9idWxrX2NhbGxiYWNrID0JcGwyMzAzX3dyaXRlX2J1bGtfY2FsbGJhY2ssCisJLndyaXRlX3Jvb20gPQkJcGwyMzAzX3dyaXRlX3Jvb20sCisJLmNoYXJzX2luX2J1ZmZlciA9CXBsMjMwM19jaGFyc19pbl9idWZmZXIsCisJLmF0dGFjaCA9CQlwbDIzMDNfc3RhcnR1cCwKKwkuc2h1dGRvd24gPQkJcGwyMzAzX3NodXRkb3duLAorfTsKIAotLyoKLSAqIHBsMjMwM19idWZfYWxsb2MKLSAqCi0gKiBBbGxvY2F0ZSBhIGNpcmN1bGFyIGJ1ZmZlciBhbmQgYWxsIGFzc29jaWF0ZWQgbWVtb3J5LgotICovCi0KLXN0YXRpYyBzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGwyMzAzX2J1Zl9hbGxvYyh1bnNpZ25lZCBpbnQgc2l6ZSkKLXsKLQotCXN0cnVjdCBwbDIzMDNfYnVmICpwYjsKLQotCi0JaWYgKHNpemUgPT0gMCkKLQkJcmV0dXJuIE5VTEw7Ci0KLQlwYiA9IChzdHJ1Y3QgcGwyMzAzX2J1ZiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBwbDIzMDNfYnVmKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHBiID09IE5VTEwpCi0JCXJldHVybiBOVUxMOwotCi0JcGItPmJ1Zl9idWYgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwotCWlmIChwYi0+YnVmX2J1ZiA9PSBOVUxMKSB7Ci0JCWtmcmVlKHBiKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCi0JcGItPmJ1Zl9zaXplID0gc2l6ZTsKLQlwYi0+YnVmX2dldCA9IHBiLT5idWZfcHV0ID0gcGItPmJ1Zl9idWY7Ci0KLQlyZXR1cm4gcGI7Ci0KLX0KLQotCi0vKgotICogcGwyMzAzX2J1Zl9mcmVlCi0gKgotICogRnJlZSB0aGUgYnVmZmVyIGFuZCBhbGwgYXNzb2NpYXRlZCBtZW1vcnkuCi0gKi8KLQotc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9mcmVlKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKLXsKLQlpZiAocGIpIHsKLQkJa2ZyZWUocGItPmJ1Zl9idWYpOwotCQlrZnJlZShwYik7Ci0JfQotfQotCi0KLS8qCi0gKiBwbDIzMDNfYnVmX2NsZWFyCi0gKgotICogQ2xlYXIgb3V0IGFsbCBkYXRhIGluIHRoZSBjaXJjdWxhciBidWZmZXIuCi0gKi8KLQotc3RhdGljIHZvaWQgcGwyMzAzX2J1Zl9jbGVhcihzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIpCi17Ci0JaWYgKHBiICE9IE5VTEwpCi0JCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9wdXQ7Ci0JCS8qIGVxdWl2YWxlbnQgdG8gYSBnZXQgb2YgYWxsIGRhdGEgYXZhaWxhYmxlICovCi19Ci0KLQotLyoKLSAqIHBsMjMwM19idWZfZGF0YV9hdmFpbAotICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIGRhdGEgYXZhaWxhYmxlIGluIHRoZSBjaXJjdWxhcgotICogYnVmZmVyLgotICovCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgcGwyMzAzX2J1Zl9kYXRhX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKLXsKLQlpZiAocGIgIT0gTlVMTCkKLQkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9wdXQgLSBwYi0+YnVmX2dldCkgJSBwYi0+YnVmX3NpemUpOwotCWVsc2UKLQkJcmV0dXJuIDA7Ci19Ci0KLQotLyoKLSAqIHBsMjMwM19idWZfc3BhY2VfYXZhaWwKLSAqCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBvZiBzcGFjZSBhdmFpbGFibGUgaW4gdGhlIGNpcmN1bGFyCi0gKiBidWZmZXIuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHN0cnVjdCBwbDIzMDNfYnVmICpwYikKLXsKLQlpZiAocGIgIT0gTlVMTCkKLQkJcmV0dXJuICgocGItPmJ1Zl9zaXplICsgcGItPmJ1Zl9nZXQgLSBwYi0+YnVmX3B1dCAtIDEpICUgcGItPmJ1Zl9zaXplKTsKLQllbHNlCi0JCXJldHVybiAwOwotfQotCi0KLS8qCi0gKiBwbDIzMDNfYnVmX3B1dAotICoKLSAqIENvcHkgZGF0YSBkYXRhIGZyb20gYSB1c2VyIGJ1ZmZlciBhbmQgcHV0IGl0IGludG8gdGhlIGNpcmN1bGFyIGJ1ZmZlci4KLSAqIFJlc3RyaWN0IHRvIHRoZSBhbW91bnQgb2Ygc3BhY2UgYXZhaWxhYmxlLgotICoKLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIGNvcGllZC4KLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgaW50IHBsMjMwM19idWZfcHV0KHN0cnVjdCBwbDIzMDNfYnVmICpwYiwgY29uc3QgY2hhciAqYnVmLAotCXVuc2lnbmVkIGludCBjb3VudCkKLXsKLQotCXVuc2lnbmVkIGludCBsZW47Ci0KLQotCWlmIChwYiA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQotCWxlbiAgPSBwbDIzMDNfYnVmX3NwYWNlX2F2YWlsKHBiKTsKLQlpZiAoY291bnQgPiBsZW4pCi0JCWNvdW50ID0gbGVuOwotCi0JaWYgKGNvdW50ID09IDApCi0JCXJldHVybiAwOwotCi0JbGVuID0gcGItPmJ1Zl9idWYgKyBwYi0+YnVmX3NpemUgLSBwYi0+YnVmX3B1dDsKLQlpZiAoY291bnQgPiBsZW4pIHsKLQkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGxlbik7Ci0JCW1lbWNweShwYi0+YnVmX2J1ZiwgYnVmK2xlbiwgY291bnQgLSBsZW4pOwotCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmICsgY291bnQgLSBsZW47Ci0JfSBlbHNlIHsKLQkJbWVtY3B5KHBiLT5idWZfcHV0LCBidWYsIGNvdW50KTsKLQkJaWYgKGNvdW50IDwgbGVuKQotCQkJcGItPmJ1Zl9wdXQgKz0gY291bnQ7Ci0JCWVsc2UgLyogY291bnQgPT0gbGVuICovCi0JCQlwYi0+YnVmX3B1dCA9IHBiLT5idWZfYnVmOwotCX0KLQotCXJldHVybiBjb3VudDsKLQotfQotCi0KLS8qCi0gKiBwbDIzMDNfYnVmX2dldAotICoKLSAqIEdldCBkYXRhIGZyb20gdGhlIGNpcmN1bGFyIGJ1ZmZlciBhbmQgY29weSB0byB0aGUgZ2l2ZW4gYnVmZmVyLgotICogUmVzdHJpY3QgdG8gdGhlIGFtb3VudCBvZiBkYXRhIGF2YWlsYWJsZS4KLSAqCi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBjb3BpZWQuCi0gKi8KLQotc3RhdGljIHVuc2lnbmVkIGludCBwbDIzMDNfYnVmX2dldChzdHJ1Y3QgcGwyMzAzX2J1ZiAqcGIsIGNoYXIgKmJ1ZiwKLQl1bnNpZ25lZCBpbnQgY291bnQpCi17Ci0KLQl1bnNpZ25lZCBpbnQgbGVuOwotCi0KLQlpZiAocGIgPT0gTlVMTCkKLQkJcmV0dXJuIDA7Ci0KLQlsZW4gPSBwbDIzMDNfYnVmX2RhdGFfYXZhaWwocGIpOwotCWlmIChjb3VudCA+IGxlbikKLQkJY291bnQgPSBsZW47Ci0KLQlpZiAoY291bnQgPT0gMCkKLQkJcmV0dXJuIDA7Ci0KLQlsZW4gPSBwYi0+YnVmX2J1ZiArIHBiLT5idWZfc2l6ZSAtIHBiLT5idWZfZ2V0OwotCWlmIChjb3VudCA+IGxlbikgewotCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgbGVuKTsKLQkJbWVtY3B5KGJ1ZitsZW4sIHBiLT5idWZfYnVmLCBjb3VudCAtIGxlbik7Ci0JCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWYgKyBjb3VudCAtIGxlbjsKLQl9IGVsc2UgewotCQltZW1jcHkoYnVmLCBwYi0+YnVmX2dldCwgY291bnQpOwotCQlpZiAoY291bnQgPCBsZW4pCi0JCQlwYi0+YnVmX2dldCArPSBjb3VudDsKLQkJZWxzZSAvKiBjb3VudCA9PSBsZW4gKi8KLQkJCXBiLT5idWZfZ2V0ID0gcGItPmJ1Zl9idWY7Ci0JfQotCi0JcmV0dXJuIGNvdW50OwotCi19Ci0KLXN0YXRpYyBpbnQgX19pbml0IHBsMjMwM19pbml0ICh2b2lkKQorc3RhdGljIGludCBfX2luaXQgcGwyMzAzX2luaXQodm9pZCkKIHsKIAlpbnQgcmV0dmFsOworCiAJcmV0dmFsID0gdXNiX3NlcmlhbF9yZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CiAJaWYgKHJldHZhbCkKIAkJZ290byBmYWlsZWRfdXNiX3NlcmlhbF9yZWdpc3RlcjsKQEAgLTExODcsMTQgKzExNTcsMTIgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0KLXN0YXRpYyB2b2lkIF9fZXhpdCBwbDIzMDNfZXhpdCAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBwbDIzMDNfZXhpdCh2b2lkKQogewotCXVzYl9kZXJlZ2lzdGVyICgmcGwyMzAzX2RyaXZlcik7Ci0JdXNiX3NlcmlhbF9kZXJlZ2lzdGVyICgmcGwyMzAzX2RldmljZSk7CisJdXNiX2RlcmVnaXN0ZXIoJnBsMjMwM19kcml2ZXIpOworCXVzYl9zZXJpYWxfZGVyZWdpc3RlcigmcGwyMzAzX2RldmljZSk7CiB9CiAKLQogbW9kdWxlX2luaXQocGwyMzAzX2luaXQpOwogbW9kdWxlX2V4aXQocGwyMzAzX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmggYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKaW5kZXggNTUxOTVlNy4uNjVhNTAzOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9wbDIzMDMuaAorKysgYi9kcml2ZXJzL3VzYi9zZXJpYWwvcGwyMzAzLmgKQEAgLTg5LDMgKzg5LDExIEBACiAvKiBCZWxraW4gIkY1VTI1NyIgU2VyaWFsIEFkYXB0ZXIgKi8KICNkZWZpbmUgQkVMS0lOX1ZFTkRPUl9JRAkweDA1MGQKICNkZWZpbmUgQkVMS0lOX1BST0RVQ1RfSUQJMHgwMjU3CisKKy8qIEFsY29yIE1pY3JvIENvcnAuIFVTQiAyLjAgVE8gUlMtMjMyICovCisjZGVmaW5lIEFMQ09SX1ZFTkRPUl9JRAkJMHgwNThGCisjZGVmaW5lIEFMQ09SX1BST0RVQ1RfSUQJMHg5NzIwCisKKy8qIEh1YXdlaSBFNjIwIFVNVFMvSFNEUEEgY2FyZCAoSUQ6IDEyZDE6MTAwMSkgKi8KKyNkZWZpbmUgSFVBV0VJX1ZFTkRPUl9JRAkweDEyZDEKKyNkZWZpbmUgSFVBV0VJX1BST0RVQ1RfSUQJMHgxMDAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zZXJpYWwvc2FmZV9zZXJpYWwuYyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCmluZGV4IDc4OTc3MWUuLjFlMDdkZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCisrKyBiL2RyaXZlcnMvdXNiL3NlcmlhbC9zYWZlX3NlcmlhbC5jCkBAIC0yOTgsMTQgKzI5OCwxNCBAQAogCQlkYmcgKCIlcyAtIHdyaXRlIHJlcXVlc3Qgb2YgMCBieXRlcyIsIF9fRlVOQ1RJT05fXyk7CiAJCXJldHVybiAoMCk7CiAJfQotCXNwaW5fbG9jaygmcG9ydC0+bG9jayk7CisJc3Bpbl9sb2NrX2JoKCZwb3J0LT5sb2NrKTsKIAlpZiAocG9ydC0+d3JpdGVfdXJiX2J1c3kpIHsKLQkJc3Bpbl91bmxvY2soJnBvcnQtPmxvY2spOworCQlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAJCWRiZygiJXMgLSBhbHJlYWR5IHdyaXRpbmciLCBfX0ZVTkNUSU9OX18pOwogCQlyZXR1cm4gMDsKIAl9CiAJcG9ydC0+d3JpdGVfdXJiX2J1c3kgPSAxOwotCXNwaW5fdW5sb2NrKCZwb3J0LT5sb2NrKTsKKwlzcGluX3VubG9ja19iaCgmcG9ydC0+bG9jayk7CiAKIAlwYWNrZXRfbGVuZ3RoID0gcG9ydC0+YnVsa19vdXRfc2l6ZTsJLy8gZ2V0IG1heCBwYWNrZXRzaXplCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMgYi9kcml2ZXJzL3VzYi9zZXJpYWwvdXNiLXNlcmlhbC5jCmluZGV4IGUwNmE0MWIuLjAyMjJkOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3NlcmlhbC91c2Itc2VyaWFsLmMKKysrIGIvZHJpdmVycy91c2Ivc2VyaWFsL3VzYi1zZXJpYWwuYwpAQCAtNjc2LDMzICs2NzYsMjkgQEAKIAlpZmFjZV9kZXNjID0gaW50ZXJmYWNlLT5jdXJfYWx0c2V0dGluZzsKIAlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKIAkJZW5kcG9pbnQgPSAmaWZhY2VfZGVzYy0+ZW5kcG9pbnRbaV0uZGVzYzsKLQkJCi0JCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMikpIHsKKworCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgaW4gZW5kcG9pbnQgKi8KIAkJCWRiZygiZm91bmQgYnVsayBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOwogCQkJYnVsa19pbl9lbmRwb2ludFtudW1fYnVsa19pbl0gPSBlbmRwb2ludDsKIAkJCSsrbnVtX2J1bGtfaW47CiAJCX0KIAotCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCi0JCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAyKSkgeworCQlpZiAodXNiX2VuZHBvaW50X2lzX2J1bGtfb3V0KGVuZHBvaW50KSkgewogCQkJLyogd2UgZm91bmQgYSBidWxrIG91dCBlbmRwb2ludCAqLwogCQkJZGJnKCJmb3VuZCBidWxrIG91dCBvbiBlbmRwb2ludCAlZCIsIGkpOwogCQkJYnVsa19vdXRfZW5kcG9pbnRbbnVtX2J1bGtfb3V0XSA9IGVuZHBvaW50OwogCQkJKytudW1fYnVsa19vdXQ7CiAJCX0KLQkJCi0JCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgMykgPT0gMHgwMykpIHsKKworCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9pbihlbmRwb2ludCkpIHsKIAkJCS8qIHdlIGZvdW5kIGEgaW50ZXJydXB0IGluIGVuZHBvaW50ICovCiAJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiBvbiBlbmRwb2ludCAlZCIsIGkpOwogCQkJaW50ZXJydXB0X2luX2VuZHBvaW50W251bV9pbnRlcnJ1cHRfaW5dID0gZW5kcG9pbnQ7CiAJCQkrK251bV9pbnRlcnJ1cHRfaW47CiAJCX0KIAotCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIDB4ODApID09IDB4MDApICYmCi0JCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQlpZiAodXNiX2VuZHBvaW50X2lzX2ludF9vdXQoZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBhbiBpbnRlcnJ1cHQgb3V0IGVuZHBvaW50ICovCiAJCQlkYmcoImZvdW5kIGludGVycnVwdCBvdXQgb24gZW5kcG9pbnQgJWQiLCBpKTsKIAkJCWludGVycnVwdF9vdXRfZW5kcG9pbnRbbnVtX2ludGVycnVwdF9vdXRdID0gZW5kcG9pbnQ7CkBAIC03MTYsMTQgKzcxMiwxNSBAQAogCWlmICgoKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgPT0gUEwyMzAzX1ZFTkRPUl9JRCkgJiYKIAkgICAgIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBQTDIzMDNfUFJPRFVDVF9JRCkpIHx8CiAJICAgICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBBVEVOX1ZFTkRPUl9JRCkgJiYKLQkgICAgIChsZTE2X3RvX2NwdShkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSBBVEVOX1BST0RVQ1RfSUQpKSkgeworCSAgICAgKGxlMTZfdG9fY3B1KGRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IEFURU5fUFJPRFVDVF9JRCkpIHx8CisJICAgICgobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkVmVuZG9yKSA9PSBBTENPUl9WRU5ET1JfSUQpICYmCisJICAgICAobGUxNl90b19jcHUoZGV2LT5kZXNjcmlwdG9yLmlkUHJvZHVjdCkgPT0gQUxDT1JfUFJPRFVDVF9JRCkpKSB7CiAJCWlmIChpbnRlcmZhY2UgIT0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXSkgewogCQkJLyogY2hlY2sgb3V0IHRoZSBlbmRwb2ludHMgb2YgdGhlIG90aGVyIGludGVyZmFjZSovCiAJCQlpZmFjZV9kZXNjID0gZGV2LT5hY3Rjb25maWctPmludGVyZmFjZVswXS0+Y3VyX2FsdHNldHRpbmc7CiAJCQlmb3IgKGkgPSAwOyBpIDwgaWZhY2VfZGVzYy0+ZGVzYy5iTnVtRW5kcG9pbnRzOyArK2kpIHsKIAkJCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOwotCQkJCWlmICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiAweDgwKSAmJgotCQkJCSAgICAoKGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMgJiAzKSA9PSAweDAzKSkgeworCQkJCWlmICh1c2JfZW5kcG9pbnRfaXNfaW50X2luKGVuZHBvaW50KSkgewogCQkJCQkvKiB3ZSBmb3VuZCBhIGludGVycnVwdCBpbiBlbmRwb2ludCAqLwogCQkJCQlkYmcoImZvdW5kIGludGVycnVwdCBpbiBmb3IgUHJvbGlmaWMgZGV2aWNlIG9uIHNlcGFyYXRlIGludGVyZmFjZSIpOwogCQkJCQlpbnRlcnJ1cHRfaW5fZW5kcG9pbnRbbnVtX2ludGVycnVwdF9pbl0gPSBlbmRwb2ludDsKQEAgLTkzNyw3ICs5MzQsMTAgQEAKIAogCQlzbnByaW50ZiAoJnBvcnQtPmRldi5idXNfaWRbMF0sIHNpemVvZihwb3J0LT5kZXYuYnVzX2lkKSwgInR0eVVTQiVkIiwgcG9ydC0+bnVtYmVyKTsKIAkJZGJnICgiJXMgLSByZWdpc3RlcmluZyAlcyIsIF9fRlVOQ1RJT05fXywgcG9ydC0+ZGV2LmJ1c19pZCk7Ci0JCWRldmljZV9yZWdpc3RlciAoJnBvcnQtPmRldik7CisJCXJldHZhbCA9IGRldmljZV9yZWdpc3RlcigmcG9ydC0+ZGV2KTsKKwkJaWYgKHJldHZhbCkKKwkJCWRldl9lcnIoJnBvcnQtPmRldiwgIkVycm9yIHJlZ2lzdGVyaW5nIHBvcnQgZGV2aWNlLCAiCisJCQkJImNvbnRpbnVpbmdcbiIpOwogCX0KIAogCXVzYl9zZXJpYWxfY29uc29sZV9pbml0IChkZWJ1ZywgbWlub3IpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9LY29uZmlnCmluZGV4IGJlOWVlYzIuLjQyMmE0YjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvS2NvbmZpZworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL0tjb25maWcKQEAgLTgsOCArOCw3IEBACiAKIGNvbmZpZyBVU0JfU1RPUkFHRQogCXRyaXN0YXRlICJVU0IgTWFzcyBTdG9yYWdlIHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBVU0IKLQlzZWxlY3QgU0NTSQorCWRlcGVuZHMgb24gVVNCICYmIFNDU0kKIAktLS1oZWxwLS0tCiAJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGNvbm5lY3QgVVNCIG1hc3Mgc3RvcmFnZSBkZXZpY2VzIHRvIHlvdXIKIAkgIGNvbXB1dGVyJ3MgVVNCIHBvcnQuIFRoaXMgaXMgdGhlIGRyaXZlciB5b3UgbmVlZCBmb3IgVVNCCkBAIC0xOCw3ICsxNyw3IEBACiAJICBzaW1pbGFyIGRldmljZXMuIFRoaXMgZHJpdmVyIG1heSBhbHNvIGJlIHVzZWQgZm9yIHNvbWUgY2FtZXJhcwogCSAgYW5kIGNhcmQgcmVhZGVycy4KIAotCSAgVGhpcyBvcHRpb24gJ3NlbGVjdHMnICh0dXJucyBvbiwgZW5hYmxlcykgJ1NDU0knLCBidXQgeW91CisJICBUaGlzIG9wdGlvbiBkZXBlbmRzIG9uICdTQ1NJJyBzdXBwb3J0IGJlaW5nIGVuYWJsZWQsIGJ1dCB5b3UKIAkgIHByb2JhYmx5IGFsc28gbmVlZCAnU0NTSSBkZXZpY2Ugc3VwcG9ydDogU0NTSSBkaXNrIHN1cHBvcnQnCiAJICAoQkxLX0RFVl9TRCkgZm9yIG1vc3QgVVNCIHN0b3JhZ2UgZGV2aWNlcy4KIApAQCAtMTM1LDYgKzEzNCwxOCBAQAogCSAgdGhpcyBpbnB1dCBpbiBhbnkga2V5YmluZGluZyBzb2Z0d2FyZS4gKGUuZy4gZ25vbWUncyBrZXlib2FyZCBzaG9ydC0KIAkgIGN1dHMpCiAKK2NvbmZpZyBVU0JfU1RPUkFHRV9LQVJNQQorCWJvb2wgIlN1cHBvcnQgZm9yIFJpbyBLYXJtYSBtdXNpYyBwbGF5ZXIiCisJZGVwZW5kcyBvbiBVU0JfU1RPUkFHRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBhZGRpdGlvbmFsIGNvZGUgdG8gc3VwcG9ydCB0aGUgUmlvIEthcm1hCisJICBVU0IgaW50ZXJmYWNlLgorCisJICBUaGlzIGNvZGUgcGxhY2VzIHRoZSBSaW8gS2FybWEgaW50byBtYXNzIHN0b3JhZ2UgbW9kZSwgZW5hYmxpbmcKKwkgIGl0IHRvIGJlIG1vdW50ZWQgYXMgYW4gb3JkaW5hcnkgZmlsZXN5c3RlbS4gUGVyZm9ybWluZyBhbiBlamVjdAorCSAgb24gdGhlIHJlc3VsdGluZyBzY3NpIGRldmljZSBub2RlIHJldHVybnMgdGhlIEthcm1hIHRvIG5vcm1hbAorCSAgb3BlcmF0aW9uLgorCiBjb25maWcgVVNCX0xJQlVTVUFMCiAJYm9vbCAiVGhlIHNoYXJlZCB0YWJsZSBvZiBjb21tb24gKG9yIHVzdWFsKSBzdG9yYWdlIGRldmljZXMiCiAJZGVwZW5kcyBvbiBVU0IKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL01ha2VmaWxlCmluZGV4IDhjYmJhMjIuLjAyMzk2OWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvTWFrZWZpbGUKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9NYWtlZmlsZQpAQCAtMjAsNiArMjAsNyBAQAogdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UKQkrPSBqdW1wc2hvdC5vCiB1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBKQkrPSBhbGF1ZGEubwogdXNiLXN0b3JhZ2Utb2JqLSQoQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIKQkrPSBvbmV0b3VjaC5vCit1c2Itc3RvcmFnZS1vYmotJChDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEpCSs9IGthcm1hLm8KIAogdXNiLXN0b3JhZ2Utb2JqcyA6PQlzY3NpZ2x1ZS5vIHByb3RvY29sLm8gdHJhbnNwb3J0Lm8gdXNiLm8gXAogCQkJaW5pdGlhbGl6ZXJzLm8gJCh1c2Itc3RvcmFnZS1vYmoteSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5jCmluZGV4IGFiMTczYjMuLjViMDZmOTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuYwpAQCAtNDUsMTIgKzQ1LDYgQEAKICNpbmNsdWRlICJkZWJ1Zy5oIgogI2luY2x1ZGUgInRyYW5zcG9ydC5oIgogCi0jZGVmaW5lIFJJT19NU0MgMHgwOAotI2RlZmluZSBSSU9QX0lOSVQgIlJJT1BceDAwXHgwMVx4MDgiCi0jZGVmaW5lIFJJT1BfSU5JVF9MRU4gNwotI2RlZmluZSBSSU9fU0VORF9MRU4gNDAKLSNkZWZpbmUgUklPX1JFQ1ZfTEVOIDB4MjAwCi0KIC8qIFRoaXMgcGxhY2VzIHRoZSBTaHV0dGxlL1NDTSBVU0I8LT5TQ1NJIGJyaWRnZSBkZXZpY2VzIGluIG11bHRpLXRhcmdldAogICogbW9kZSAqLwogaW50IHVzYl9zdG9yX2V1c2NzaV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKQEAgLTk3LDcwICs5MSwzIEBACiAKIAlyZXR1cm4gKHJlcyA/IC0xIDogMCk7CiB9Ci0KLS8qIFBsYWNlIHRoZSBSaW8gS2FybWEgaW50byBtYXNzIHN0b3JhZ2UgbW9kZS4KLSAqCi0gKiBUaGUgaW5pdGlhbGl6YXRpb24gYmVnaW5zIGJ5IHNlbmRpbmcgNDAgYnl0ZXMgc3RhcnRpbmcKLSAqIFJJT1BceDAwXHgwMVx4MDhceDAwLCB3aGljaCB0aGUgZGV2aWNlIHdpbGwgYWNrIHdpdGggYSA1MTItYnl0ZQotICogcGFja2V0IHdpdGggdGhlIGhpZ2ggZm91ciBiaXRzIHNldCBhbmQgZXZlcnl0aGluZyBlbHNlIG51bGwuCi0gKgotICogTmV4dCwgd2Ugc2VuZCBSSU9QXHg4MFx4MDBceDA4XHgwMC4gIEVhY2ggdGltZSwgYSA1MTIgYnl0ZSByZXNwb25zZQotICogbXVzdCBiZSByZWFkLCBidXQgd2UgbXVzdCBsb29wIHVudGlsIGJ5dGUgNSBpbiB0aGUgcmVzcG9uc2UgaXMgMHgwOCwKLSAqIGluZGljYXRpbmcgc3VjY2Vzcy4gICovCi1pbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKQotewotCWludCByZXN1bHQsIHBhcnRpYWw7Ci0JY2hhciAqcmVjdjsKLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQ7Ci0KLQkvLyB1cy0+aW9idWYgaXMgYmlnIGVub3VnaCB0byBob2xkIGNtZCBidXQgbm90IHJlY2VpdmUKLQlpZiAoIShyZWN2ID0ga21hbGxvYyhSSU9fUkVDVl9MRU4sIEdGUF9LRVJORUwpKSkKLQkJZ290byBkaWVfbm9tZW07Ci0KLQlVU19ERUJVR1AoIkluaXRpYWxpemluZyBLYXJtYS4uLlxuIik7Ci0KLQltZW1zZXQodXMtPmlvYnVmLCAwLCBSSU9fU0VORF9MRU4pOwotCW1lbWNweSh1cy0+aW9idWYsIFJJT1BfSU5JVCwgUklPUF9JTklUX0xFTik7Ci0KLQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAotCQl1cy0+aW9idWYsIFJJT19TRU5EX0xFTiwgJnBhcnRpYWwpOwotCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQotCQlnb3RvIGRpZTsKLQotCXJlc3VsdCA9IHVzYl9zdG9yX2J1bGtfdHJhbnNmZXJfYnVmKHVzLCB1cy0+cmVjdl9idWxrX3BpcGUsCi0JCXJlY3YsIFJJT19SRUNWX0xFTiwgJnBhcnRpYWwpOwotCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQotCQlnb3RvIGRpZTsKLQotCXVzLT5pb2J1Zls0XSA9IDB4ODA7Ci0JdXMtPmlvYnVmWzVdID0gMDsKLQl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMzAwMCk7Ci0JZm9yICg7OykgewotCQlVU19ERUJVR1AoIlNlbmRpbmcgaW5pdCBjb21tYW5kXG4iKTsKLQkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5zZW5kX2J1bGtfcGlwZSwKLQkJCXVzLT5pb2J1ZiwgUklPX1NFTkRfTEVOLCAmcGFydGlhbCk7Ci0JCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQotCQkJZ290byBkaWU7Ci0KLQkJcmVzdWx0ID0gdXNiX3N0b3JfYnVsa190cmFuc2Zlcl9idWYodXMsIHVzLT5yZWN2X2J1bGtfcGlwZSwKLQkJCXJlY3YsIFJJT19SRUNWX0xFTiwgJnBhcnRpYWwpOwotCQlpZiAocmVzdWx0ICE9IFVTQl9TVE9SX1hGRVJfR09PRCkKLQkJCWdvdG8gZGllOwotCi0JCWlmIChyZWN2WzVdID09IFJJT19NU0MpCi0JCQlicmVhazsKLQkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCi0JCQlnb3RvIGRpZTsKLQkJbXNsZWVwKDEwKTsKLQl9Ci0JVVNfREVCVUdQKCJLYXJtYSBpbml0aWFsaXplZC5cbiIpOwotCWtmcmVlKHJlY3YpOwotCXJldHVybiAwOwotCi1kaWU6Ci0Ja2ZyZWUocmVjdik7Ci1kaWVfbm9tZW06Ci0JVVNfREVCVUdQKCJDb3VsZCBub3QgaW5pdGlhbGl6ZSBrYXJtYS5cbiIpOwotCXJldHVybiBVU0JfU1RPUl9UUkFOU1BPUlRfRkFJTEVEOwotfQotCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9pbml0aWFsaXplcnMuaAppbmRleCA5MjdmNzc4Li5lMjk2N2E0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2luaXRpYWxpemVycy5oCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvaW5pdGlhbGl6ZXJzLmgKQEAgLTQ3LDQgKzQ3LDMgQEAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgcmVxdWlyZWQgdG8gYWN0aXZhdGUgYWxsIGZvdXIgc2xvdHMgb24gdGhlIFVDUi02MVMyQgogICogZmxhc2ggcmVhZGVyICovCiBpbnQgdXNiX3N0b3JfdWNyNjFzMmJfaW5pdChzdHJ1Y3QgdXNfZGF0YSAqdXMpOwotaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2thcm1hLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3OWFlNQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuYwpAQCAtMCwwICsxLDE1NSBAQAorLyogRHJpdmVyIGZvciBSaW8gS2FybWEKKyAqCisgKiAgIChjKSAyMDA2IEJvYiBDb3BlbGFuZCA8bWVAYm9iY29wZWxhbmQuY29tPgorICogICAoYykgMjAwNiBLZWl0aCBCZW5uZXR0IDxrZWl0aEBtY3Muc3QtYW5kLmFjLnVrPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAqIGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICogV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICogd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAqIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxzY3NpL3Njc2kuaD4KKyNpbmNsdWRlIDxzY3NpL3Njc2lfY21uZC5oPgorI2luY2x1ZGUgPHNjc2kvc2NzaV9kZXZpY2UuaD4KKworI2luY2x1ZGUgInVzYi5oIgorI2luY2x1ZGUgInRyYW5zcG9ydC5oIgorI2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAia2FybWEuaCIKKworI2RlZmluZSBSSU9fUFJFRklYICJSSU9QXHgwMCIKKyNkZWZpbmUgUklPX1BSRUZJWF9MRU4gNQorI2RlZmluZSBSSU9fU0VORF9MRU4gNDAKKyNkZWZpbmUgUklPX1JFQ1ZfTEVOIDB4MjAwCisKKyNkZWZpbmUgUklPX0VOVEVSX1NUT1JBR0UgMHgxCisjZGVmaW5lIFJJT19MRUFWRV9TVE9SQUdFIDB4MgorI2RlZmluZSBSSU9fUkVTRVQgMHhDCisKK2V4dGVybiBpbnQgdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3RydWN0IHNjc2lfY21uZCAqLCBzdHJ1Y3QgdXNfZGF0YSAqKTsKKworc3RydWN0IGthcm1hX2RhdGEgeworCWludCBpbl9zdG9yYWdlOworCWNoYXIgKnJlY3Y7Cit9OworCisvKgorICogU2VuZCBjb21tYW5kcyB0byBSaW8gS2FybWEuCisgKgorICogRm9yIGVhY2ggY29tbWFuZCB3ZSBzZW5kIDQwIGJ5dGVzIHN0YXJ0aW5nICdSSU9QXDAnIGZvbGxvd2VkIGJ5CisgKiB0aGUgY29tbWFuZCBudW1iZXIgYW5kIGEgc2VxdWVuY2UgbnVtYmVyLCB3aGljaCB0aGUgZGV2aWNlIHdpbGwgYWNrCisgKiB3aXRoIGEgNTEyLWJ5dGUgcGFja2V0IHdpdGggdGhlIGhpZ2ggZm91ciBiaXRzIHNldCBhbmQgZXZlcnl0aGluZworICogZWxzZSBudWxsLiAgVGhlbiB3ZSBzZW5kICdSSU9QXHg4MCcgZm9sbG93ZWQgYnkgYSB6ZXJvIGFuZCB0aGUKKyAqIHNlcXVlbmNlIG51bWJlciwgdW50aWwgYnl0ZSA1IGluIHRoZSByZXNwb25zZSByZXBlYXRzIHRoZSBzZXF1ZW5jZQorICogbnVtYmVyLgorICovCitzdGF0aWMgaW50IHJpb19rYXJtYV9zZW5kX2NvbW1hbmQoY2hhciBjbWQsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmVzdWx0LCBwYXJ0aWFsOworCXVuc2lnbmVkIGxvbmcgdGltZW91dDsKKwlzdGF0aWMgdW5zaWduZWQgY2hhciBzZXEgPSAxOworCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0gKHN0cnVjdCBrYXJtYV9kYXRhICopIHVzLT5leHRyYTsKKworCVVTX0RFQlVHUCgia2FybWE6IHNlbmRpbmcgY29tbWFuZCAlMDR4XG4iLCBjbWQpOworCW1lbXNldCh1cy0+aW9idWYsIDAsIFJJT19TRU5EX0xFTik7CisJbWVtY3B5KHVzLT5pb2J1ZiwgUklPX1BSRUZJWCwgUklPX1BSRUZJWF9MRU4pOworCXVzLT5pb2J1Zls1XSA9IGNtZDsKKwl1cy0+aW9idWZbNl0gPSBzZXE7CisKKwl0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNjAwMCk7CisJZm9yICg7OykgeworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnNlbmRfYnVsa19waXBlLAorCQkJdXMtPmlvYnVmLCBSSU9fU0VORF9MRU4sICZwYXJ0aWFsKTsKKwkJaWYgKHJlc3VsdCAhPSBVU0JfU1RPUl9YRkVSX0dPT0QpCisJCQlnb3RvIGVycjsKKworCQlyZXN1bHQgPSB1c2Jfc3Rvcl9idWxrX3RyYW5zZmVyX2J1Zih1cywgdXMtPnJlY3ZfYnVsa19waXBlLAorCQkJZGF0YS0+cmVjdiwgUklPX1JFQ1ZfTEVOLCAmcGFydGlhbCk7CisJCWlmIChyZXN1bHQgIT0gVVNCX1NUT1JfWEZFUl9HT09EKQorCQkJZ290byBlcnI7CisKKwkJaWYgKGRhdGEtPnJlY3ZbNV0gPT0gc2VxKQorCQkJYnJlYWs7CisKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlnb3RvIGVycjsKKworCQl1cy0+aW9idWZbNF0gPSAweDgwOworCQl1cy0+aW9idWZbNV0gPSAwOworCQltc2xlZXAoNTApOworCX0KKworCXNlcSsrOworCWlmIChzZXEgPT0gMCkKKwkJc2VxID0gMTsKKworCVVTX0RFQlVHUCgia2FybWE6IHNlbnQgY29tbWFuZCAlMDR4XG4iLCBjbWQpOworCXJldHVybiAwOworZXJyOgorCVVTX0RFQlVHUCgia2FybWE6IGNvbW1hbmQgJTA0eCBmYWlsZWRcbiIsIGNtZCk7CisJcmV0dXJuIFVTQl9TVE9SX1RSQU5TUE9SVF9GQUlMRUQ7Cit9CisKKy8qCisgKiBUcmFwIFNUQVJUX1NUT1AgYW5kIFJFQURfMTAgdG8gbGVhdmUvcmUtZW50ZXIgc3RvcmFnZSBtb2RlLgorICogRXZlcnl0aGluZyBlbHNlIGlzIHByb3BhZ2F0ZWQgdG8gdGhlIG5vcm1hbCBidWxrIGxheWVyLgorICovCitpbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBrYXJtYV9kYXRhICpkYXRhID0gKHN0cnVjdCBrYXJtYV9kYXRhICopIHVzLT5leHRyYTsKKworCWlmIChzcmItPmNtbmRbMF0gPT0gUkVBRF8xMCAmJiAhZGF0YS0+aW5fc3RvcmFnZSkgeworCQlyZXQgPSByaW9fa2FybWFfc2VuZF9jb21tYW5kKFJJT19FTlRFUl9TVE9SQUdFLCB1cyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWRhdGEtPmluX3N0b3JhZ2UgPSAxOworCQlyZXR1cm4gdXNiX3N0b3JfQnVsa190cmFuc3BvcnQoc3JiLCB1cyk7CisJfSBlbHNlIGlmIChzcmItPmNtbmRbMF0gPT0gU1RBUlRfU1RPUCkgeworCQlyZXQgPSByaW9fa2FybWFfc2VuZF9jb21tYW5kKFJJT19MRUFWRV9TVE9SQUdFLCB1cyk7CisJCWlmIChyZXQpCisJCQlyZXR1cm4gcmV0OworCisJCWRhdGEtPmluX3N0b3JhZ2UgPSAwOworCQlyZXR1cm4gcmlvX2thcm1hX3NlbmRfY29tbWFuZChSSU9fUkVTRVQsIHVzKTsKKwl9CisJcmV0dXJuIHVzYl9zdG9yX0J1bGtfdHJhbnNwb3J0KHNyYiwgdXMpOworfQorCitzdGF0aWMgdm9pZCByaW9fa2FybWFfZGVzdHJ1Y3Rvcih2b2lkICpleHRyYSkKK3sKKwlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IChzdHJ1Y3Qga2FybWFfZGF0YSAqKSBleHRyYTsKKwlrZnJlZShkYXRhLT5yZWN2KTsKK30KKworaW50IHJpb19rYXJtYV9pbml0KHN0cnVjdCB1c19kYXRhICp1cykKK3sKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3Qga2FybWFfZGF0YSAqZGF0YSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBrYXJtYV9kYXRhKSwgR0ZQX05PSU8pOworCWlmICghZGF0YSkKKwkJZ290byBvdXQ7CisKKwlkYXRhLT5yZWN2ID0ga21hbGxvYyhSSU9fUkVDVl9MRU4sIEdGUF9OT0lPKTsKKwlpZiAoIWRhdGEtPnJlY3YpIHsKKwkJa2ZyZWUoZGF0YSk7CisJCWdvdG8gb3V0OworCX0KKworCXVzLT5leHRyYSA9IGRhdGE7CisJdXMtPmV4dHJhX2Rlc3RydWN0b3IgPSByaW9fa2FybWFfZGVzdHJ1Y3RvcjsKKwlyZXQgPSByaW9fa2FybWFfc2VuZF9jb21tYW5kKFJJT19FTlRFUl9TVE9SQUdFLCB1cyk7CisJZGF0YS0+aW5fc3RvcmFnZSA9IChyZXQgPT0gMCk7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaCBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uva2FybWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTYwOTcyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9rYXJtYS5oCkBAIC0wLDAgKzEsNyBAQAorI2lmbmRlZiBfS0FSTUFfVVNCX0gKKyNkZWZpbmUgX0tBUk1BX1VTQl9ICisKK2V4dGVybiBpbnQgcmlvX2thcm1hX2luaXQoc3RydWN0IHVzX2RhdGEgKnVzKTsKK2V4dGVybiBpbnQgcmlvX2thcm1hX3RyYW5zcG9ydChzdHJ1Y3Qgc2NzaV9jbW5kICpzcmIsIHN0cnVjdCB1c19kYXRhICp1cyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jIGIvZHJpdmVycy91c2Ivc3RvcmFnZS9saWJ1c3VhbC5jCmluZGV4IGIxZWM0YTcuLjU5OWFkMTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvbGlidXN1YWwuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL2xpYnVzdWFsLmMKQEAgLTgsNiArOCw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvdXNiX3VzdWFsLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KIAogLyoKICAqLwpAQCAtMTE3LDcgKzExOCw3IEBACiAJCQkgY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogewogCXVuc2lnbmVkIGxvbmcgdHlwZTsKLQlpbnQgcmM7CisJc3RydWN0IHRhc2tfc3RydWN0KiB0YXNrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAl0eXBlID0gVVNCX1VTX1RZUEUoaWQtPmRyaXZlcl9pbmZvKTsKQEAgLTEzMiw4ICsxMzMsOSBAQAogCXN0YXRbdHlwZV0uZmxzIHw9IFVTVV9NT0RfRkxfVEhSRUFEOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnVzdV9sb2NrLCBmbGFncyk7CiAKLQlyYyA9IGtlcm5lbF90aHJlYWQodXN1X3Byb2JlX3RocmVhZCwgKHZvaWQqKXR5cGUsIENMT05FX1ZNKTsKLQlpZiAocmMgPCAwKSB7CisJdGFzayA9IGt0aHJlYWRfcnVuKHVzdV9wcm9iZV90aHJlYWQsICh2b2lkKil0eXBlLCAibGlidXN1YWxfJWQiLCB0eXBlKTsKKwlpZiAoSVNfRVJSKHRhc2spKSB7CisJCWludCByYyA9IFBUUl9FUlIodGFzayk7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImxpYnVzdWFsOiAiCiAJCSAgICAiVW5hYmxlIHRvIHN0YXJ0IHRoZSB0aHJlYWQgZm9yICVzOiAlZFxuIiwKIAkJICAgIGJpYXNfbmFtZXNbdHlwZV0sIHJjKTsKQEAgLTE3NSw4ICsxNzcsNiBAQAogCWludCByYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JZGFlbW9uaXplKCJsaWJ1c3VhbF8lZCIsIHR5cGUpOwkvKiAidXNiLXN0b3JhZ2UiIGlzIGtpbmRhIHRvbyBsb25nICovCi0KIAkvKiBBIGNvbXBsZXRpb24gZG9lcyBub3Qgd29yayBoZXJlIGJlY2F1c2UgaXQncyBjb3VudGVkLiAqLwogCWRvd24oJnVzdV9pbml0X25vdGlmeSk7CiAJdXAoJnVzdV9pbml0X25vdGlmeSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL29uZXRvdWNoLmMKaW5kZXggMzEzOTIwZC4uZjg0M2EwYiAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9vbmV0b3VjaC5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvb25ldG91Y2guYwpAQCAtMTM1LDYgKzEzNSw3IEBACiAJc3RydWN0IHVzYl9vbmV0b3VjaCAqb25ldG91Y2g7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwogCWludCBwaXBlLCBtYXhwOworCWludCBlcnJvciA9IC1FTk9NRU07CiAKIAlpbnRlcmZhY2UgPSBzcy0+cHVzYl9pbnRmLT5jdXJfYWx0c2V0dGluZzsKIApAQCAtMjExLDE1ICsyMTIsMTggQEAKIAlzcy0+c3VzcGVuZF9yZXN1bWVfaG9vayA9IHVzYl9vbmV0b3VjaF9wbV9ob29rOwogI2VuZGlmCiAKLQlpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uob25ldG91Y2gtPmRldik7CisJZXJyb3IgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2Uob25ldG91Y2gtPmRldik7CisJaWYgKGVycm9yKQorCQlnb3RvIGZhaWwzOwogCiAJcmV0dXJuIDA7CiAKKyBmYWlsMzoJdXNiX2ZyZWVfdXJiKG9uZXRvdWNoLT5pcnEpOwogIGZhaWwyOgl1c2JfYnVmZmVyX2ZyZWUodWRldiwgT05FVE9VQ0hfUEtUX0xFTiwKIAkJCW9uZXRvdWNoLT5kYXRhLCBvbmV0b3VjaC0+ZGF0YV9kbWEpOwogIGZhaWwxOglrZnJlZShvbmV0b3VjaCk7CiAJaW5wdXRfZnJlZV9kZXZpY2UoaW5wdXRfZGV2KTsKLQlyZXR1cm4gLUVOT01FTTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIHZvaWQgb25ldG91Y2hfcmVsZWFzZV9pbnB1dCh2b2lkICpvbmV0b3VjaF8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3Njc2lnbHVlLmMKaW5kZXggYTRiN2RmOS4uZTEwNzJkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS9zY3NpZ2x1ZS5jCisrKyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2Uvc2NzaWdsdWUuYwpAQCAtNzIsMTIgKzcyLDI3IEBACiAKIHN0YXRpYyBpbnQgc2xhdmVfYWxsb2MgKHN0cnVjdCBzY3NpX2RldmljZSAqc2RldikKIHsKKwlzdHJ1Y3QgdXNfZGF0YSAqdXMgPSBob3N0X3RvX3VzKHNkZXYtPmhvc3QpOworCiAJLyoKIAkgKiBTZXQgdGhlIElOUVVJUlkgdHJhbnNmZXIgbGVuZ3RoIHRvIDM2LiAgV2UgZG9uJ3QgdXNlIGFueSBvZgogCSAqIHRoZSBleHRyYSBkYXRhIGFuZCBtYW55IGRldmljZXMgY2hva2UgaWYgYXNrZWQgZm9yIG1vcmUgb3IKIAkgKiBsZXNzIHRoYW4gMzYgYnl0ZXMuCiAJICovCiAJc2Rldi0+aW5xdWlyeV9sZW4gPSAzNjsKKworCS8qCisJICogVGhlIFVGSSBzcGVjIHRyZWF0ZXMgdGhlIFBlcmlwaGVyYWwgUXVhbGlmaWVyIGJpdHMgaW4gYW4KKwkgKiBJTlFVSVJZIHJlc3VsdCBhcyByZXNlcnZlZCBhbmQgcmVxdWlyZXMgZGV2aWNlcyB0byBzZXQgdGhlbQorCSAqIHRvIDAuICBIb3dldmVyIHRoZSBTQ1NJIHNwZWMgcmVxdWlyZXMgdGhlc2UgYml0cyB0byBiZSBzZXQKKwkgKiB0byAzIHRvIGluZGljYXRlIHdoZW4gYSBMVU4gaXMgbm90IHByZXNlbnQuCisJICoKKwkgKiBMZXQgdGhlIHNjYW5uaW5nIGNvZGUga25vdyBpZiB0aGlzIHRhcmdldCBtZXJlbHkgc2V0cworCSAqIFBlcmlwaGVyYWwgRGV2aWNlIFR5cGUgdG8gMHgxZiB0byBpbmRpY2F0ZSBubyBMVU4uCisJICovCisJaWYgKHVzLT5zdWJjbGFzcyA9PSBVU19TQ19VRkkpCisJCXNkZXYtPnNkZXZfdGFyZ2V0LT5wZHRfMWZfZm9yX25vX2x1biA9IDE7CisKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYyBiL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdHJhbnNwb3J0LmMKaW5kZXggZDZhY2M5Mi4uZjIzNTE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy91c2Ivc3RvcmFnZS90cmFuc3BvcnQuYworKysgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3RyYW5zcG9ydC5jCkBAIC0yOTQsMTEgKzI5NCw2IEBACiAJCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKIAkJcmV0dXJuIFVTQl9TVE9SX1hGRVJfU1RBTExFRDsKIAotCS8qIHRpbWVvdXQgb3IgZXhjZXNzaXZlbHkgbG9uZyBOQUsgKi8KLQljYXNlIC1FVElNRURPVVQ6Ci0JCVVTX0RFQlVHUCgiLS0gdGltZW91dCBvciBOQUtcbiIpOwotCQlyZXR1cm4gVVNCX1NUT1JfWEZFUl9FUlJPUjsKLQogCS8qIGJhYmJsZSAtIHRoZSBkZXZpY2UgdHJpZWQgdG8gc2VuZCBtb3JlIHRoYW4gd2Ugd2FudGVkIHRvIHJlYWQgKi8KIAljYXNlIC1FT1ZFUkZMT1c6CiAJCVVTX0RFQlVHUCgiLS0gYmFiYmxlXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmggYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VudXN1YWxfZGV2cy5oCmluZGV4IGIxMzBlMTcuLmM5YThkNTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdW51c3VhbF9kZXZzLmgKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91bnVzdWFsX2RldnMuaApAQCAtMTUyLDYgKzE1MiwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfSUdOT1JFX1JFU0lEVUUgfCBVU19GTF9GSVhfQ0FQQUNJVFkgKSwKIAorLyogUmVwb3J0ZWQgYnkgSm9uIEhhcnQgPEpvbi5IYXJ0QHdlYi5kZT4gKi8KK1VOVVNVQUxfREVWKCAgMHgwNDIxLCAweDA0MzQsIDB4MDEwMCwgMHgwMTAwLAorCQkiTm9raWEiLAorCQkiRTYwIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSB8IFVTX0ZMX0lHTk9SRV9SRVNJRFVFICksCisKIC8qIFJlcG9ydGVkIGJ5IFN1bWVkaGEgU3dhbXkgPHN1bWVkaGFzd2FteUBnbWFpbC5jb20+IGFuZAogICogRWluYXIgVGguIEVpbmFyc3NvbiA8ZWluYXJ0aGVyZWRAZ21haWwuY29tPiAqLwogVU5VU1VBTF9ERVYoICAweDA0MjEsIDB4MDQ0NCwgMHgwMTAwLCAweDAxMDAsCkBAIC0yMTgsMTAgKzIyNSwxMiBAQAogICAgICAgICAgICAgICAgIFVTX1NDX0RFVklDRSwgVVNfUFJfREVWSUNFLCBOVUxMLAogICAgICAgICAgICAgICAgIFVTX0ZMX05PVF9MT0NLQUJMRSApLAogCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCiBVTlVTVUFMX0RFViggIDB4MDQ1YSwgMHg1MjEwLCAweDAxMDEsIDB4MDEwMSwKIAkJIlJpbyIsCiAJCSJSaW8gS2FybWEiLAotCQlVU19TQ19TQ1NJLCBVU19QUl9CVUxLLCByaW9fa2FybWFfaW5pdCwgMCksCisJCVVTX1NDX1NDU0ksIFVTX1BSX0tBUk1BLCByaW9fa2FybWFfaW5pdCwgMCksCisjZW5kaWYKIAogLyogUGF0Y2ggc3VibWl0dGVkIGJ5IFBoaWxpcHAgRnJpZWRyaWNoIDxwaGlsaXBwQHZvaWQuYXQ+ICovCiBVTlVTVUFMX0RFViggIDB4MDQ4MiwgMHgwMTAwLCAweDAxMDAsIDB4MDEwMCwKQEAgLTYzMSw2ICs2NDAsMTMgQEAKIAkJIkRpZ2l0YWwgQ2FtZXJhIEVYLTIwIERTQyIsCiAJCVVTX1NDXzgwNzAsIFVTX1BSX0RFVklDRSwgTlVMTCwgMCApLAogCisvKiBSZXBvcnRlZCBieSA8SGVuZHJ5ay5QZmVpZmZlckBnbXguZGU+ICovCitVTlVTVUFMX0RFViggIDB4MDU5ZiwgMHgwNjQzLCAweDAwMDAsIDB4MDAwMCwKKwkJIkxhQ2llIiwKKwkJIkRWRCstUlciLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfR09fU0xPVyApLAorCiAvKiBTdWJtaXR0ZWQgYnkgSm9lbCBCb3VycXVhcmQgPG51bWxvY2tAZnJlZXN1cmYuY2g+CiAgKiBTb21lIHZlcnNpb25zIG9mIHRoaXMgZGV2aWNlIG5lZWQgdGhlIFN1YkNsYXNzIGFuZCBQcm90b2NvbCBvdmVycmlkZXMKICAqIHdoaWxlIG90aGVycyBkb24ndC4KQEAgLTEyNTQsNiArMTI3MCwxMyBAQAogCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKIAkJVVNfRkxfTk9fV1BfREVURUNUICksCiAKKy8qIFJlcG9ydGVkIGJ5IEphbiBNYXRlIDxtYXRlQGZpaXQuc3R1YmEuc2s+ICovCitVTlVTVUFMX0RFViggIDB4MGZjZSwgMHhlMDMwLCAweDAwMDAsIDB4MDAwMCwKKwkJIlNvbnkgRXJpY3Nzb24iLAorCQkiUDk5MGkiLAorCQlVU19TQ19ERVZJQ0UsIFVTX1BSX0RFVklDRSwgTlVMTCwKKwkJVVNfRkxfRklYX0NBUEFDSVRZICksCisKIC8qIFJlcG9ydGVkIGJ5IEVtbWFudWVsIFZhc2lsYWtpcyA8ZXZhc0Bmb3J0aG5ldC5ncj4gKi8KIFVOVVNVQUxfREVWKCAgMHgwZmNlLCAweGUwMzEsIDB4MDAwMCwgMHgwMDAwLAogCQkiU29ueSBFcmljc3NvbiIsCkBAIC0xMjYxLDYgKzEyODQsMTMgQEAKIAkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCiAJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAogCisvKiBSZXBvcnRlZCBieSBKYW4gTWF0ZSA8bWF0ZUBmaWl0LnN0dWJhLnNrPiAqLworVU5VU1VBTF9ERVYoICAweDBmY2UsIDB4ZTAzMCwgMHgwMDAwLCAweDAwMDAsCisJCSJTb255IEVyaWNzc29uIiwKKwkJIlA5OTBpIiwKKwkJVVNfU0NfREVWSUNFLCBVU19QUl9ERVZJQ0UsIE5VTEwsCisJCVVTX0ZMX0ZJWF9DQVBBQ0lUWSApLAorCiAvKiBSZXBvcnRlZCBieSBLZXZpbiBDZXJuZWtlZSA8a3BjLXVzYmRldkBnZWxhdG8udWl1Yy5lZHU+CiAgKiBUZXN0ZWQgb24gaGFyZHdhcmUgdmVyc2lvbiAxLjEwLgogICogRW50cnkgaXMgbmVlZGVkIG9ubHkgZm9yIHRoZSBpbml0aWFsaXplciBmdW5jdGlvbiBvdmVycmlkZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMgYi9kcml2ZXJzL3VzYi9zdG9yYWdlL3VzYi5jCmluZGV4IDhkN2JkY2IuLmI4ZDYwMzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdXNiL3N0b3JhZ2UvdXNiLmMKKysrIGIvZHJpdmVycy91c2Ivc3RvcmFnZS91c2IuYwpAQCAtOTgsNiArOTgsOSBAQAogI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEKICNpbmNsdWRlICJhbGF1ZGEuaCIKICNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQorI2luY2x1ZGUgImthcm1hLmgiCisjZW5kaWYKIAogLyogU29tZSBpbmZvcm1hdGlvbmFsIGRhdGEgKi8KIE1PRFVMRV9BVVRIT1IoIk1hdHRoZXcgRGhhcm0gPG1kaGFybS11c2JAb25lLWV5ZWQtYWxpZW4ubmV0PiIpOwpAQCAtNjQ2LDYgKzY0OSwxNCBAQAogCQlicmVhazsKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BCisJY2FzZSBVU19QUl9LQVJNQToKKwkJdXMtPnRyYW5zcG9ydF9uYW1lID0gIlJpbyBLYXJtYS9CdWxrIjsKKwkJdXMtPnRyYW5zcG9ydCA9IHJpb19rYXJtYV90cmFuc3BvcnQ7CisJCXVzLT50cmFuc3BvcnRfcmVzZXQgPSB1c2Jfc3Rvcl9CdWxrX3Jlc2V0OworCQlicmVhazsKKyNlbmRpZgorCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwppbmRleCBiMzYyMDM5Li4xYjUxZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYworKysgYi9kcml2ZXJzL3VzYi91c2Itc2tlbGV0b24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBVU0IgU2tlbGV0b24gZHJpdmVyIC0gMi4wCisgKiBVU0IgU2tlbGV0b24gZHJpdmVyIC0gMi4yCiAgKgogICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKICAqCkBAIC03LDkgKzcsOCBAQAogICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCiAgKgotICogVGhpcyBkcml2ZXIgaXMgYmFzZWQgb24gdGhlIDIuNi4zIHZlcnNpb24gb2YgZHJpdmVycy91c2IvdXNiLXNrZWxldG9uLmMgCi0gKiBidXQgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIGVhc3kgdG8gcmVhZCBhbmQgdXNlLCBhcyBubyBsb2NrcyBhcmUgbm93Ci0gKiBuZWVkZWQgYW55bW9yZS4KKyAqIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSAyLjYuMyB2ZXJzaW9uIG9mIGRyaXZlcnMvdXNiL3VzYi1za2VsZXRvbi5jCisgKiBidXQgaGFzIGJlZW4gcmV3cml0dGVuIHRvIGJlIGVhc2llciB0byByZWFkIGFuZCB1c2UuCiAgKgogICovCiAKQEAgLTIxLDYgKzIwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAKIC8qIERlZmluZSB0aGVzZSB2YWx1ZXMgdG8gbWF0Y2ggeW91ciBkZXZpY2VzICovCkBAIC0zMiwzOCArMzIsMzkgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1NLRUxfVkVORE9SX0lELCBVU0JfU0tFTF9QUk9EVUNUX0lEKSB9LAogCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07Ci1NT0RVTEVfREVWSUNFX1RBQkxFICh1c2IsIHNrZWxfdGFibGUpOworTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIHNrZWxfdGFibGUpOwogCiAKIC8qIEdldCBhIG1pbm9yIHJhbmdlIGZvciB5b3VyIGRldmljZXMgZnJvbSB0aGUgdXNiIG1haW50YWluZXIgKi8KICNkZWZpbmUgVVNCX1NLRUxfTUlOT1JfQkFTRQkxOTIKIAogLyogb3VyIHByaXZhdGUgZGVmaW5lcy4gaWYgdGhpcyBncm93cyBhbnkgbGFyZ2VyLCB1c2UgeW91ciBvd24gLmggZmlsZSAqLwotI2RlZmluZSBNQVhfVFJBTlNGRVIJCSggUEFHRV9TSVpFIC0gNTEyICkKKyNkZWZpbmUgTUFYX1RSQU5TRkVSCQkoUEFHRV9TSVpFIC0gNTEyKQogI2RlZmluZSBXUklURVNfSU5fRkxJR0hUCTgKIAogLyogU3RydWN0dXJlIHRvIGhvbGQgYWxsIG9mIG91ciBkZXZpY2Ugc3BlY2lmaWMgc3R1ZmYgKi8KIHN0cnVjdCB1c2Jfc2tlbCB7Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKgl1ZGV2OwkJCS8qIHRoZSB1c2IgZGV2aWNlIGZvciB0aGlzIGRldmljZSAqLwotCXN0cnVjdCB1c2JfaW50ZXJmYWNlICoJaW50ZXJmYWNlOwkJLyogdGhlIGludGVyZmFjZSBmb3IgdGhpcyBkZXZpY2UgKi8KKwlzdHJ1Y3QgdXNiX2RldmljZSAgICAgICAqZGV2OwkJCS8qIHRoZSB1c2IgZGV2aWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfaW50ZXJmYWNlICAgICppbnRlcmZhY2U7CQkvKiB0aGUgaW50ZXJmYWNlIGZvciB0aGlzIGRldmljZSAqLwogCXN0cnVjdCBzZW1hcGhvcmUJbGltaXRfc2VtOwkJLyogbGltaXRpbmcgdGhlIG51bWJlciBvZiB3cml0ZXMgaW4gcHJvZ3Jlc3MgKi8KLQl1bnNpZ25lZCBjaGFyICoJCWJ1bGtfaW5fYnVmZmVyOwkJLyogdGhlIGJ1ZmZlciB0byByZWNlaXZlIGRhdGEgKi8KKwl1bnNpZ25lZCBjaGFyICAgICAgICAgICAqYnVsa19pbl9idWZmZXI7CS8qIHRoZSBidWZmZXIgdG8gcmVjZWl2ZSBkYXRhICovCiAJc2l6ZV90CQkJYnVsa19pbl9zaXplOwkJLyogdGhlIHNpemUgb2YgdGhlIHJlY2VpdmUgYnVmZmVyICovCiAJX191OAkJCWJ1bGtfaW5fZW5kcG9pbnRBZGRyOwkvKiB0aGUgYWRkcmVzcyBvZiB0aGUgYnVsayBpbiBlbmRwb2ludCAqLwogCV9fdTgJCQlidWxrX291dF9lbmRwb2ludEFkZHI7CS8qIHRoZSBhZGRyZXNzIG9mIHRoZSBidWxrIG91dCBlbmRwb2ludCAqLwogCXN0cnVjdCBrcmVmCQlrcmVmOworCXN0cnVjdCBtdXRleAkJaW9fbXV0ZXg7CQkvKiBzeW5jaHJvbml6ZSBJL08gd2l0aCBkaXNjb25uZWN0ICovCiB9OwogI2RlZmluZSB0b19za2VsX2RldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9za2VsLCBrcmVmKQogCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2tlbF9kcml2ZXI7CiAKIHN0YXRpYyB2b2lkIHNrZWxfZGVsZXRlKHN0cnVjdCBrcmVmICprcmVmKQotewkKK3sKIAlzdHJ1Y3QgdXNiX3NrZWwgKmRldiA9IHRvX3NrZWxfZGV2KGtyZWYpOwogCiAJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKLQlrZnJlZSAoZGV2LT5idWxrX2luX2J1ZmZlcik7Ci0Ja2ZyZWUgKGRldik7CisJa2ZyZWUoZGV2LT5idWxrX2luX2J1ZmZlcik7CisJa2ZyZWUoZGV2KTsKIH0KIAogc3RhdGljIGludCBza2VsX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCkBAIC04OSw2ICs5MCwxMSBAQAogCQlnb3RvIGV4aXQ7CiAJfQogCisJLyogcHJldmVudCB0aGUgZGV2aWNlIGZyb20gYmVpbmcgYXV0b3N1c3BlbmRlZCAqLworCXJldHZhbCA9IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShpbnRlcmZhY2UpOworCWlmIChyZXR2YWwpCisJCWdvdG8gZXhpdDsKKwogCS8qIGluY3JlbWVudCBvdXIgdXNhZ2UgY291bnQgZm9yIHRoZSBkZXZpY2UgKi8KIAlrcmVmX2dldCgmZGV2LT5rcmVmKTsKIApAQCAtMTA3LDYgKzExMywxMiBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwkvKiBhbGxvdyB0aGUgZGV2aWNlIHRvIGJlIGF1dG9zdXNwZW5kZWQgKi8KKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoZGV2LT5pbnRlcmZhY2UpCisJCXVzYl9hdXRvcG1fcHV0X2ludGVyZmFjZShkZXYtPmludGVyZmFjZSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwogCS8qIGRlY3JlbWVudCB0aGUgY291bnQgb24gb3VyIGRldmljZSAqLwogCWtyZWZfcHV0KCZkZXYtPmtyZWYsIHNrZWxfZGVsZXRlKTsKIAlyZXR1cm4gMDsKQEAgLTExNSwxMSArMTI3LDE3IEBACiBzdGF0aWMgc3NpemVfdCBza2VsX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7CiAJc3RydWN0IHVzYl9za2VsICpkZXY7Ci0JaW50IHJldHZhbCA9IDA7CisJaW50IHJldHZhbDsKIAlpbnQgYnl0ZXNfcmVhZDsKIAogCWRldiA9IChzdHJ1Y3QgdXNiX3NrZWwgKilmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoIWRldi0+aW50ZXJmYWNlKSB7CQkvKiBkaXNjb25uZWN0KCkgd2FzIGNhbGxlZCAqLworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGV4aXQ7CisJfQorCiAJLyogZG8gYSBibG9ja2luZyBidWxrIHJlYWQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgZGV2aWNlICovCiAJcmV0dmFsID0gdXNiX2J1bGtfbXNnKGRldi0+dWRldiwKIAkJCSAgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLApAQCAtMTM1LDYgKzE1Myw4IEBACiAJCQlyZXR2YWwgPSBieXRlc19yZWFkOwogCX0KIAorZXhpdDoKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwogCXJldHVybiByZXR2YWw7CiB9CiAKQEAgLTE0NSwxNiArMTY1LDE2IEBACiAJZGV2ID0gKHN0cnVjdCB1c2Jfc2tlbCAqKXVyYi0+Y29udGV4dDsKIAogCS8qIHN5bmMvYXN5bmMgdW5saW5rIGZhdWx0cyBhcmVuJ3QgZXJyb3JzICovCi0JaWYgKHVyYi0+c3RhdHVzICYmIAotCSAgICAhKHVyYi0+c3RhdHVzID09IC1FTk9FTlQgfHwgCisJaWYgKHVyYi0+c3RhdHVzICYmCisJICAgICEodXJiLT5zdGF0dXMgPT0gLUVOT0VOVCB8fAogCSAgICAgIHVyYi0+c3RhdHVzID09IC1FQ09OTlJFU0VUIHx8CiAJICAgICAgdXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikpIHsKLQkJZGJnKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKKwkJZXJyKCIlcyAtIG5vbnplcm8gd3JpdGUgYnVsayBzdGF0dXMgcmVjZWl2ZWQ6ICVkIiwKIAkJICAgIF9fRlVOQ1RJT05fXywgdXJiLT5zdGF0dXMpOwogCX0KIAogCS8qIGZyZWUgdXAgb3VyIGFsbG9jYXRlZCBidWZmZXIgKi8KLQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgCisJdXNiX2J1ZmZlcl9mcmVlKHVyYi0+ZGV2LCB1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCiAJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOwogCXVwKCZkZXYtPmxpbWl0X3NlbSk7CiB9CkBAIC0xNzksNiArMTk5LDEyIEBACiAJCWdvdG8gZXhpdDsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlpZiAoIWRldi0+aW50ZXJmYWNlKSB7CQkvKiBkaXNjb25uZWN0KCkgd2FzIGNhbGxlZCAqLworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycm9yOworCX0KKwogCS8qIGNyZWF0ZSBhIHVyYiwgYW5kIGEgYnVmZmVyIGZvciBpdCwgYW5kIGNvcHkgdGhlIGRhdGEgdG8gdGhlIHVyYiAqLwogCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1cmIpIHsKQEAgLTIxMywxNyArMjM5LDIyIEBACiAJLyogcmVsZWFzZSBvdXIgcmVmZXJlbmNlIHRvIHRoaXMgdXJiLCB0aGUgVVNCIGNvcmUgd2lsbCBldmVudHVhbGx5IGZyZWUgaXQgZW50aXJlbHkgKi8KIAl1c2JfZnJlZV91cmIodXJiKTsKIAotZXhpdDoKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOwogCXJldHVybiB3cml0ZXNpemU7CiAKIGVycm9yOgotCXVzYl9idWZmZXJfZnJlZShkZXYtPnVkZXYsIHdyaXRlc2l6ZSwgYnVmLCB1cmItPnRyYW5zZmVyX2RtYSk7Ci0JdXNiX2ZyZWVfdXJiKHVyYik7CisJaWYgKHVyYikgeworCQl1c2JfYnVmZmVyX2ZyZWUoZGV2LT51ZGV2LCB3cml0ZXNpemUsIGJ1ZiwgdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKIAl1cCgmZGV2LT5saW1pdF9zZW0pOworCitleGl0OgogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNrZWxfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNrZWxfZm9wcyA9IHsKIAkub3duZXIgPQlUSElTX01PRFVMRSwKIAkucmVhZCA9CQlza2VsX3JlYWQsCiAJLndyaXRlID0Jc2tlbF93cml0ZSwKQEAgLTIzMSw3ICsyNjIsNyBAQAogCS5yZWxlYXNlID0Jc2tlbF9yZWxlYXNlLAogfTsKIAotLyogCisvKgogICogdXNiIGNsYXNzIGRyaXZlciBpbmZvIGluIG9yZGVyIHRvIGdldCBhIG1pbm9yIG51bWJlciBmcm9tIHRoZSB1c2IgY29yZSwKICAqIGFuZCB0byBoYXZlIHRoZSBkZXZpY2UgcmVnaXN0ZXJlZCB3aXRoIHRoZSBkcml2ZXIgY29yZQogICovCkBAIC0yNDMsNyArMjc0LDcgQEAKIAogc3RhdGljIGludCBza2VsX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlzdHJ1Y3QgdXNiX3NrZWwgKmRldiA9IE5VTEw7CisJc3RydWN0IHVzYl9za2VsICpkZXY7CiAJc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqaWZhY2VfZGVzYzsKIAlzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVuZHBvaW50OwogCXNpemVfdCBidWZmZXJfc2l6ZTsKQEAgLTI1MiwxMiArMjgzLDEzIEBACiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KIAlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRldiA9PSBOVUxMKSB7CisJaWYgKCFkZXYpIHsKIAkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCWtyZWZfaW5pdCgmZGV2LT5rcmVmKTsKIAlzZW1hX2luaXQoJmRldi0+bGltaXRfc2VtLCBXUklURVNfSU5fRkxJR0hUKTsKKwltdXRleF9pbml0KCZkZXYtPmlvX211dGV4KTsKIAogCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CiAJZGV2LT5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7CkBAIC0yNjksMTAgKzMwMSw3IEBACiAJCWVuZHBvaW50ID0gJmlmYWNlX2Rlc2MtPmVuZHBvaW50W2ldLmRlc2M7CiAKIAkJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyICYmCi0JCSAgICAoKGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzICYgVVNCX0VORFBPSU5UX0RJUl9NQVNLKQotCQkJCQk9PSBVU0JfRElSX0lOKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihlbmRwb2ludCkpIHsKIAkJCS8qIHdlIGZvdW5kIGEgYnVsayBpbiBlbmRwb2ludCAqLwogCQkJYnVmZmVyX3NpemUgPSBsZTE2X3RvX2NwdShlbmRwb2ludC0+d01heFBhY2tldFNpemUpOwogCQkJZGV2LT5idWxrX2luX3NpemUgPSBidWZmZXJfc2l6ZTsKQEAgLTI4NSwxMCArMzE0LDcgQEAKIAkJfQogCiAJCWlmICghZGV2LT5idWxrX291dF9lbmRwb2ludEFkZHIgJiYKLQkJICAgICgoZW5kcG9pbnQtPmJFbmRwb2ludEFkZHJlc3MgJiBVU0JfRU5EUE9JTlRfRElSX01BU0spCi0JCQkJCT09IFVTQl9ESVJfT1VUKSAmJgotCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCi0JCQkJCT09IFVTQl9FTkRQT0lOVF9YRkVSX0JVTEspKSB7CisJCSAgICB1c2JfZW5kcG9pbnRfaXNfYnVsa19vdXQoZW5kcG9pbnQpKSB7CiAJCQkvKiB3ZSBmb3VuZCBhIGJ1bGsgb3V0IGVuZHBvaW50ICovCiAJCQlkZXYtPmJ1bGtfb3V0X2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOwogCQl9CkBAIC0zMzQsNiArMzYwLDExIEBACiAJLyogZ2l2ZSBiYWNrIG91ciBtaW5vciAqLwogCXVzYl9kZXJlZ2lzdGVyX2RldihpbnRlcmZhY2UsICZza2VsX2NsYXNzKTsKIAorCS8qIHByZXZlbnQgbW9yZSBJL08gZnJvbSBzdGFydGluZyAqLworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWRldi0+aW50ZXJmYWNlID0gTlVMTDsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCiAJdW5sb2NrX2tlcm5lbCgpOwogCiAJLyogZGVjcmVtZW50IG91ciB1c2FnZSBjb3VudCAqLwpAQCAtMzY3LDcgKzM5OCw3IEBACiAJdXNiX2RlcmVnaXN0ZXIoJnNrZWxfZHJpdmVyKTsKIH0KIAotbW9kdWxlX2luaXQgKHVzYl9za2VsX2luaXQpOwotbW9kdWxlX2V4aXQgKHVzYl9za2VsX2V4aXQpOworbW9kdWxlX2luaXQodXNiX3NrZWxfaW5pdCk7Cittb2R1bGVfZXhpdCh1c2Jfc2tlbF9leGl0KTsKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9LY29uZmlnIGIvZHJpdmVycy92aWRlby9LY29uZmlnCmluZGV4IDcwMmViOTMuLmUwZWYzMzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vS2NvbmZpZworKysgYi9kcml2ZXJzL3ZpZGVvL0tjb25maWcKQEAgLTgyNSwzMCArODI1LDQ4IEBACiAJaGVscAogCiBjb25maWcgRkJfSU5URUwKLQl0cmlzdGF0ZSAiSW50ZWwgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKKwl0cmlzdGF0ZSAiSW50ZWwgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85NDVHIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBGQiAmJiBFWFBFUklNRU5UQUwgJiYgUENJICYmIFg4NgogCXNlbGVjdCBBR1AKIAlzZWxlY3QgQUdQX0lOVEVMCisJc2VsZWN0IEkyQ19BTEdPQklUIGlmIEZCX0lOVEVMX0kyQworCXNlbGVjdCBJMkMgaWYgRkJfSU5URUxfSTJDCiAJc2VsZWN0IEZCX01PREVfSEVMUEVSUwogCXNlbGVjdCBGQl9DRkJfRklMTFJFQ1QKIAlzZWxlY3QgRkJfQ0ZCX0NPUFlBUkVBCiAJc2VsZWN0IEZCX0NGQl9JTUFHRUJMSVQKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgb24tYm9hcmQgZ3JhcGhpY3MgYnVpbHQgaW4gdG8gdGhlIEludGVsCi0gICAgICAgICAgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcgY2hpcHNldHMuCisgICAgICAgICAgODMwTS84NDVHLzg1MkdNLzg1NUdNLzg2NUcvOTE1Ry85MTVHTS85NDVHLzk0NUdNIGNoaXBzZXRzLgogICAgICAgICAgIFNheSBZIGlmIHlvdSBoYXZlIGFuZCBwbGFuIHRvIHVzZSBzdWNoIGEgYm9hcmQuCiAKLSAgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIElmIHlvdSBzYXkgWSBoZXJlIGFuZCB3YW50IEREQy9JMkMgc3VwcG9ydCB5b3UgbXVzdCBmaXJzdCBzYXkgWSB0bworCSAgIkkyQyBzdXBwb3J0IiBhbmQgIkkyQyBiaXQtYmFuZ2luZyBzdXBwb3J0IiBpbiB0aGUgY2hhcmFjdGVyIGRldmljZXMKKwkgIHNlY3Rpb24uCisKKwkgIElmIHlvdSBzYXkgTSBoZXJlIHRoZW4gIkkyQyBzdXBwb3J0IiBhbmQgIkkyQyBiaXQtYmFuZ2luZyBzdXBwb3J0IgorCSAgY2FuIGJlIGJ1aWxkIGVpdGhlciBhcyBtb2R1bGVzIG9yIGJ1aWx0LWluLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKIAkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBpbnRlbGZiLgogCisJICBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlYWQgPGZpbGU6RG9jdW1lbnRhdGlvbi9mYi9pbnRlbGZiLnR4dD4KKwogY29uZmlnIEZCX0lOVEVMX0RFQlVHCi0gICAgICAgIGJvb2wgIkludGVsIGRyaXZlciBEZWJ1ZyBNZXNzYWdlcyIKKwlib29sICJJbnRlbCBkcml2ZXIgRGVidWcgTWVzc2FnZXMiCiAJZGVwZW5kcyBvbiBGQl9JTlRFTAogCS0tLWhlbHAtLS0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdGhlIEludGVsIGRyaXZlciB0byBvdXRwdXQgYWxsIHNvcnRzCiAJICBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb25zIHRvIHByb3ZpZGUgdG8gdGhlIG1haW50YWluZXIgd2hlbgogCSAgc29tZXRoaW5nIGdvZXMgd3JvbmcuCiAKK2NvbmZpZyBGQl9JTlRFTF9JMkMKKwlib29sICJEREMvSTJDIGZvciBJbnRlbCBmcmFtZWJ1ZmZlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gRkJfSU5URUwKKwlkZWZhdWx0IHkKKwloZWxwCisJICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IEREQy9JMkMgc3VwcG9ydCBmb3IgeW91ciBvbi1ib2FyZCBJbnRlbCBncmFwaGljcy4KKwogY29uZmlnIEZCX01BVFJPWAogCXRyaXN0YXRlICJNYXRyb3ggYWNjZWxlcmF0aW9uIgogCWRlcGVuZHMgb24gRkIgJiYgUENJCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jIGIvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvaHA2ODBfYmwuYwppbmRleCBmZmM3MmFlLi5mZTE0ODgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9ocDY4MF9ibC5jCisrKyBiL2RyaXZlcnMvdmlkZW8vYmFja2xpZ2h0L2hwNjgwX2JsLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAogI2luY2x1ZGUgPGFzbS9jcHUvZGFjLmg+CiAjaW5jbHVkZSA8YXNtL2hwNnh4L2hwNnh4Lmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaGQ2NDQ2MS5oPgorI2luY2x1ZGUgPGFzbS9oZDY0NDYxLmg+CiAKICNkZWZpbmUgSFA2ODBfTUFYX0lOVEVOU0lUWSAyNTUKICNkZWZpbmUgSFA2ODBfREVGQVVMVF9JTlRFTlNJVFkgMTAKQEAgLTE2Myw2ICsxNjMsNiBAQAogbW9kdWxlX2luaXQoaHA2ODBibF9pbml0KTsKIG1vZHVsZV9leGl0KGhwNjgwYmxfZXhpdCk7CiAKLU1PRFVMRV9BVVRIT1IoIkFuZHJpeSBTa3VseXNoIDxhc2t1bHlzaEBpbWFnZS5raWV2LnVhPiIpOworTU9EVUxFX0FVVEhPUigiQW5kcml5IFNrdWx5c2ggPGFza3VseXNoQGdtYWlsLmNvbT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSFAgSm9ybmFkYSA2ODAgQmFja2xpZ2h0IERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9iYWNrbGlnaHQvbG9jb21vbGNkLmMgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwppbmRleCBjYWYxZWNhLi42Mjg1NzFjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYworKysgYi9kcml2ZXJzL3ZpZGVvL2JhY2tsaWdodC9sb2NvbW9sY2QuYwpAQCAtMzMsMTkgKzMzLDE5IEBACiAKIHN0YXRpYyB2b2lkIGxvY29tb2xjZF9vbihpbnQgY29tYWRqKQogewotCWxvY29tb19ncGlvX3NldF9kaXIobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX1ZTSEFfT04sIDApOwotCWxvY29tb19ncGlvX3dyaXRlKGxvY29tb2xjZF9kZXYsIExPQ09NT19HUElPX0xDRF9WU0hBX09OLCAxKTsKKwlsb2NvbW9fZ3Bpb19zZXRfZGlyKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9WU0hBX09OLCAwKTsKKwlsb2NvbW9fZ3Bpb193cml0ZShsb2NvbW9sY2RfZGV2LT5kZXYucGFyZW50LCBMT0NPTU9fR1BJT19MQ0RfVlNIQV9PTiwgMSk7CiAJbWRlbGF5KDIpOwogCi0JbG9jb21vX2dwaW9fc2V0X2Rpcihsb2NvbW9sY2RfZGV2LCBMT0NPTU9fR1BJT19MQ0RfVlNIRF9PTiwgMCk7Ci0JbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX1ZTSERfT04sIDEpOworCWxvY29tb19ncGlvX3NldF9kaXIobG9jb21vbGNkX2Rldi0+ZGV2LnBhcmVudCwgTE9DT01PX0dQSU9fTENEX1ZTSERfT04sIDApOworCWxvY29tb19ncGlvX3dyaXRlKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9WU0hEX09OLCAxKTsKIAltZGVsYXkoMik7CiAKIAlsb2NvbW9fbTYyMzMyX3NlbmRkYXRhKGxvY29tb2xjZF9kZXYsIGNvbWFkaiwgMCk7CiAJbWRlbGF5KDUpOwogCi0JbG9jb21vX2dwaW9fc2V0X2Rpcihsb2NvbW9sY2RfZGV2LCBMT0NPTU9fR1BJT19MQ0RfVkVFX09OLCAwKTsKLQlsb2NvbW9fZ3Bpb193cml0ZShsb2NvbW9sY2RfZGV2LCBMT0NPTU9fR1BJT19MQ0RfVkVFX09OLCAxKTsKKwlsb2NvbW9fZ3Bpb19zZXRfZGlyKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9WRUVfT04sIDApOworCWxvY29tb19ncGlvX3dyaXRlKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9WRUVfT04sIDEpOwogCW1kZWxheSgxMCk7CiAKIAkvKiBURlRDUlNUIHwgQ1BTT1VUPTAgfCBDUFNFTiAqLwpAQCAtNTgsOCArNTgsOCBAQAogCWxvY29tb193cml0ZWwoKDB4MDQgfCAweDAxKSwgbG9jb21vbGNkX2Rldi0+bWFwYmFzZSArIExPQ09NT19UQyk7CiAJbWRlbGF5KDEwKTsKIAotCWxvY29tb19ncGlvX3NldF9kaXIobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX01PRCwgMCk7Ci0JbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX01PRCwgMSk7CisJbG9jb21vX2dwaW9fc2V0X2Rpcihsb2NvbW9sY2RfZGV2LT5kZXYucGFyZW50LCBMT0NPTU9fR1BJT19MQ0RfTU9ELCAwKTsKKwlsb2NvbW9fZ3Bpb193cml0ZShsb2NvbW9sY2RfZGV2LT5kZXYucGFyZW50LCBMT0NPTU9fR1BJT19MQ0RfTU9ELCAxKTsKIH0KIAogc3RhdGljIHZvaWQgbG9jb21vbGNkX29mZihpbnQgY29tYWRqKQpAQCAtNjgsMTYgKzY4LDE2IEBACiAJbG9jb21vX3dyaXRlbCgweDA2LCBsb2NvbW9sY2RfZGV2LT5tYXBiYXNlICsgTE9DT01PX1RDKTsKIAltZGVsYXkoMSk7CiAKLQlsb2NvbW9fZ3Bpb193cml0ZShsb2NvbW9sY2RfZGV2LCBMT0NPTU9fR1BJT19MQ0RfVlNIQV9PTiwgMCk7CisJbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2Rldi0+ZGV2LnBhcmVudCwgTE9DT01PX0dQSU9fTENEX1ZTSEFfT04sIDApOwogCW1kZWxheSgxMTApOwogCi0JbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX1ZFRV9PTiwgMCk7CisJbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2Rldi0+ZGV2LnBhcmVudCwgTE9DT01PX0dQSU9fTENEX1ZFRV9PTiwgMCk7CiAJbWRlbGF5KDcwMCk7CiAKIAkvKiBURlRDUlNUPTAgfCBDUFNPVVQ9MCB8IENQU0VOID0gMCAqLwogCWxvY29tb193cml0ZWwoMCwgbG9jb21vbGNkX2Rldi0+bWFwYmFzZSArIExPQ09NT19UQyk7Ci0JbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX01PRCwgMCk7Ci0JbG9jb21vX2dwaW9fd3JpdGUobG9jb21vbGNkX2RldiwgTE9DT01PX0dQSU9fTENEX1ZTSERfT04sIDApOworCWxvY29tb19ncGlvX3dyaXRlKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9NT0QsIDApOworCWxvY29tb19ncGlvX3dyaXRlKGxvY29tb2xjZF9kZXYtPmRldi5wYXJlbnQsIExPQ09NT19HUElPX0xDRF9WU0hEX09OLCAwKTsKIH0KIAogdm9pZCBsb2NvbW9sY2RfcG93ZXIoaW50IG9uKQpAQCAtMTY3LDE0ICsxNjcsMTQgQEAKICNkZWZpbmUgbG9jb21vbGNkX3Jlc3VtZQlOVUxMCiAjZW5kaWYKIAotc3RhdGljIGludCBsb2NvbW9sY2RfcHJvYmUoc3RydWN0IGxvY29tb19kZXYgKmRldikKK3N0YXRpYyBpbnQgbG9jb21vbGNkX3Byb2JlKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JbG9jb21vbGNkX2RldiA9IGRldjsKKwlsb2NvbW9sY2RfZGV2ID0gbGRldjsKIAotCWxvY29tb19ncGlvX3NldF9kaXIoZGV2LCBMT0NPTU9fR1BJT19GTF9WUiwgMCk7CisJbG9jb21vX2dwaW9fc2V0X2RpcihsZGV2LT5kZXYucGFyZW50LCBMT0NPTU9fR1BJT19GTF9WUiwgMCk7CiAKIAkvKiB0aGUgcG9vZGxlX2xjZF9wb3dlciBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAJICogZnJvbSBmc19pbml0Y2FsbCwgd2hpY2ggaXMgYmVmb3JlIGxvY29tbyBpcyBhY3RpdmF0ZWQuCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2NvbnNvbGUvS2NvbmZpZyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCmluZGV4IDQ0NDRiZWYuLmFhMzkzNWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvdmlkZW8vY29uc29sZS9LY29uZmlnCkBAIC02LDcgKzYsNyBAQAogCiBjb25maWcgVkdBX0NPTlNPTEUKIAlib29sICJWR0EgdGV4dCBjb25zb2xlIiBpZiBFTUJFRERFRCB8fCAhWDg2Ci0JZGVwZW5kcyBvbiAhQVJDSF9BQ09STiAmJiAhQVJDSF9FQlNBMTEwICYmICE0eHggJiYgITh4eCAmJiAhU1BBUkMgJiYgIU02OEsgJiYgIVBBUklTQyAmJiAhRlJWICYmICFBUkNIX1ZFUlNBVElMRQorCWRlcGVuZHMgb24gIUFSQ0hfQUNPUk4gJiYgIUFSQ0hfRUJTQTExMCAmJiAhNHh4ICYmICE4eHggJiYgIVNQQVJDICYmICFNNjhLICYmICFQQVJJU0MgJiYgIUZSViAmJiAhQVJDSF9WRVJTQVRJTEUgJiYgIVNVUEVSSAogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFNheWluZyBZIGhlcmUgd2lsbCBhbGxvdyB5b3UgdG8gdXNlIExpbnV4IGluIHRleHQgbW9kZSB0aHJvdWdoIGEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYyBiL2RyaXZlcnMvdmlkZW8vaGl0ZmIuYwppbmRleCA0Y2M2YjQ1Li4zYWZiNDcyIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2hpdGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9oaXRmYi5jCkBAIC00LDcgKzQsNyBAQAogICogKEMpIDE5OTkgTWloYWkgU3BhdGFyCiAgKiAoQykgMjAwMCBZQUVHQVNISSBUYWtlc2hpCiAgKiAoQykgMjAwMywgMjAwNCBQYXVsIE11bmR0Ci0gKiAoQykgMjAwMywgMjAwNCBBbmRyaXkgU2t1bHlzaAorICogKEMpIDIwMDMsIDIwMDQsIDIwMDYgQW5kcml5IFNrdWx5c2gKICAqCiAgKiAgVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKICAqICBMaWNlbnNlLiBTZWUgdGhlIGZpbGUgQ09QWUlORyBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlIGZvcgpAQCAtMjAsMTggKzIwLDE2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZiLmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vaGQ2NDQ2MS9oZDY0NDYxLmg+Ci0KLSNpZmRlZiBNQUNIX0hQNjAwCisjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KICNpbmNsdWRlIDxhc20vY3B1L2RhYy5oPgogI2luY2x1ZGUgPGFzbS9ocDZ4eC9ocDZ4eC5oPgotI2VuZGlmCiAKICNkZWZpbmUJV0lEVEggNjQwCiAKQEAgLTQ1LDcgKzQzLDYgQEAKIHN0YXRpYyBzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8gaGl0ZmJfZml4IF9faW5pdGRhdGEgPSB7CiAJLmlkCQk9ICJIaXRhY2hpIEhENjQ0NjEiLAogCS50eXBlCQk9IEZCX1RZUEVfUEFDS0VEX1BJWEVMUywKLQkueXBhbnN0ZXAJPSA4LAogCS5hY2NlbAkJPSBGQl9BQ0NFTF9OT05FLAogfTsKIApAQCAtNzMsMjYgKzcwLDE0IEBACiAJaWYgKHRydWVjb2xvcikKIAkJc2FkZHIgPDw9IDE7CiAKLQlmYl93cml0ZXcod2lkdGgsIEhENjQ0NjFfQkJURFdSKTsKLQlmYl93cml0ZXcoaGVpZ2h0LCBIRDY0NDYxX0JCVERIUik7CisJZmJfd3JpdGV3KHdpZHRoLTEsIEhENjQ0NjFfQkJURFdSKTsKKwlmYl93cml0ZXcoaGVpZ2h0LTEsIEhENjQ0NjFfQkJUREhSKTsKIAogCWZiX3dyaXRldyhzYWRkciAmIDB4ZmZmZiwgSEQ2NDQ2MV9CQlREU0FSTCk7CiAJZmJfd3JpdGV3KHNhZGRyID4+IDE2LCBIRDY0NDYxX0JCVERTQVJIKTsKIAogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaGl0ZmJfYWNjZWxfc29saWRmaWxsKGludCB0cnVlY29sb3IsIHUxNiBkeCwgdTE2IGR5LAotCQkJCQkgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0LCB1MTYgY29sb3IpCi17Ci0JaGl0ZmJfYWNjZWxfc2V0X2Rlc3QodHJ1ZWNvbG9yLCBkeCwgZHksIHdpZHRoLCBoZWlnaHQpOwotCi0JZmJfd3JpdGV3KDB4MDBmMCwgSEQ2NDQ2MV9CQlRST1BSKTsKLQlmYl93cml0ZXcoMTYsIEhENjQ0NjFfQkJUTURSKTsKLQlmYl93cml0ZXcoY29sb3IsIEhENjQ0NjFfR1JTQ1IpOwotCi0JaGl0ZmJfYWNjZWxfc3RhcnQodHJ1ZWNvbG9yKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGhpdGZiX2FjY2VsX2JpdGJsdChpbnQgdHJ1ZWNvbG9yLCB1MTYgc3gsIHUxNiBzeSwgdTE2IGR4LAogCQkJCSAgICAgIHUxNiBkeSwgdTE2IHdpZHRoLCB1MTYgaGVpZ2h0LCB1MTYgcm9wLAogCQkJCSAgICAgIHUzMiBtYXNrX2FkZHIpCkBAIC0xMDAsNiArODUsOCBAQAogCXUzMiBzYWRkciwgZGFkZHI7CiAJdTMyIG1hZGRyID0gMDsKIAorCWhlaWdodC0tOworCXdpZHRoLS07CiAJZmJfd3JpdGV3KHJvcCwgSEQ2NDQ2MV9CQlRST1BSKTsKIAlpZiAoKHN5IDwgZHkpIHx8ICgoc3kgPT0gZHkpICYmIChzeCA8PSBkeCkpKSB7CiAJCXNhZGRyID0gV0lEVEggKiAoc3kgKyBoZWlnaHQpICsgc3ggKyB3aWR0aDsKQEAgLTE0Niw2ICsxMzMsNyBAQAogCWlmIChyZWN0LT5yb3AgIT0gUk9QX0NPUFkpCiAJCWNmYl9maWxscmVjdChwLCByZWN0KTsKIAllbHNlIHsKKwkJaGl0ZmJfYWNjZWxfd2FpdCgpOwogCQlmYl93cml0ZXcoMHgwMGYwLCBIRDY0NDYxX0JCVFJPUFIpOwogCQlmYl93cml0ZXcoMTYsIEhENjQ0NjFfQkJUTURSKTsKIApAQCAtMTYxLDE2ICsxNDksMTUgQEAKIAkJCQkJICAgICByZWN0LT5oZWlnaHQpOwogCQkJaGl0ZmJfYWNjZWxfc3RhcnQoMCk7CiAJCX0KLQkJaGl0ZmJfYWNjZWxfd2FpdCgpOwogCX0KIH0KIAogc3RhdGljIHZvaWQgaGl0ZmJfY29weWFyZWEoc3RydWN0IGZiX2luZm8gKnAsIGNvbnN0IHN0cnVjdCBmYl9jb3B5YXJlYSAqYXJlYSkKIHsKKwloaXRmYl9hY2NlbF93YWl0KCk7CiAJaGl0ZmJfYWNjZWxfYml0Ymx0KHAtPnZhci5iaXRzX3Blcl9waXhlbCA9PSAxNiwgYXJlYS0+c3gsIGFyZWEtPnN5LAogCQkJICAgYXJlYS0+ZHgsIGFyZWEtPmR5LCBhcmVhLT53aWR0aCwgYXJlYS0+aGVpZ2h0LAogCQkJICAgMHgwMGNjLCAwKTsKLQloaXRmYl9hY2NlbF93YWl0KCk7CiB9CiAKIHN0YXRpYyBpbnQgaGl0ZmJfcGFuX2Rpc3BsYXkoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsCkBAIC0xODIsNyArMTY5LDcgQEAKIAlpZiAoeG9mZnNldCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWZiX3dyaXRldyh5b2Zmc2V0LCBIRDY0NDYxX0xDRENCQVIpOworCWZiX3dyaXRldygoeW9mZnNldCppbmZvLT5maXgubGluZV9sZW5ndGgpPj4xMCwgSEQ2NDQ2MV9MQ0RDQkFSKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTkyLDEyICsxNzksNiBAQAogCXVuc2lnbmVkIHNob3J0IHY7CiAKIAlpZiAoYmxhbmtfbW9kZSkgewotI2lmZGVmIE1BQ0hfSFA2MDAKLQkJc2hfZGFjX2Rpc2FibGUoREFDX0xDRF9CUklHSFRORVNTKTsKLQkJdiA9IGZiX3JlYWR3KEhENjQ0NjFfR1BCRFIpOwotCQl2IHw9IEhENjQ0NjFfR1BCRFJfTENET0ZGOwotCQlmYl93cml0ZXcodiwgSEQ2NDQ2MV9HUEJEUik7Ci0jZW5kaWYKIAkJdiA9IGZiX3JlYWR3KEhENjQ0NjFfTERSMSk7CiAJCXYgJj0gfkhENjQ0NjFfTERSMV9ET047CiAJCWZiX3dyaXRldyh2LCBIRDY0NDYxX0xEUjEpOwpAQCAtMjEzLDE5ICsxOTQsMTggQEAKIAkJdiA9IGZiX3JlYWR3KEhENjQ0NjFfU1RCQ1IpOwogCQl2ICY9IH5IRDY0NDYxX1NUQkNSX1NMQ0RTVDsKIAkJZmJfd3JpdGV3KHYsIEhENjQ0NjFfU1RCQ1IpOwotI2lmZGVmIE1BQ0hfSFA2MDAKLQkJc2hfZGFjX2VuYWJsZShEQUNfTENEX0JSSUdIVE5FU1MpOwotCQl2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9HUEJEUik7Ci0JCXYgJj0gfkhENjQ0NjFfR1BCRFJfTENET0ZGOwotCQlmYl93cml0ZXcodiwgSEQ2NDQ2MV9HUEJEUik7Ci0jZW5kaWYKKworCQl2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9MQ0RDQ1IpOworCQl2ICY9IH4oSEQ2NDQ2MV9MQ0RDQ1JfTU9GRiB8IEhENjQ0NjFfTENEQ0NSX1NUUkVRKTsKKwkJZmJfd3JpdGV3KHYsIEhENjQ0NjFfTENEQ0NSKTsKKworCQlkbyB7CisJCSAgICB2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9MQ0RDQ1IpOworCQl9IHdoaWxlKHYmSEQ2NDQ2MV9MQ0RDQ1JfU1RCQUNLKTsKKwogCQl2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9MRFIxKTsKIAkJdiB8PSBIRDY0NDYxX0xEUjFfRE9OOwogCQlmYl93cml0ZXcodiwgSEQ2NDQ2MV9MRFIxKTsKLQotCQl2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9MQ0RDQ1IpOwotCQl2ICY9IH5IRDY0NDYxX0xDRENDUl9NT0ZGOwotCQlmYl93cml0ZXcodiwgSEQ2NDQ2MV9MQ0RDQ1IpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTIzMyw3ICsyMTMsNyBAQAogc3RhdGljIGludCBoaXRmYl9zZXRjb2xyZWcodW5zaWduZWQgcmVnbm8sIHVuc2lnbmVkIHJlZCwgdW5zaWduZWQgZ3JlZW4sCiAJCQkgICB1bnNpZ25lZCBibHVlLCB1bnNpZ25lZCB0cmFuc3AsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewotCWlmIChyZWdubyA+PSBpbmZvLT5jbWFwLmxlbikKKwlpZiAocmVnbm8gPj0gMjU2KQogCQlyZXR1cm4gMTsKIAogCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CkBAIC0yNDQsNiArMjI0LDggQEAKIAkJZmJfd3JpdGV3KGJsdWUgPj4gMTAsIEhENjQ0NjFfQ1BUV0RSKTsKIAkJYnJlYWs7CiAJY2FzZSAxNjoKKwkJaWYgKHJlZ25vID49IDE2KQorCQkJcmV0dXJuIDE7CiAJCSgodTMyICopIChpbmZvLT5wc2V1ZG9fcGFsZXR0ZSkpW3JlZ25vXSA9CiAJCSAgICAoKHJlZCAmIDB4ZjgwMCkpIHwKIAkJICAgICgoZ3JlZW4gJiAweGZjMDApID4+IDUpIHwgKChibHVlICYgMHhmODAwKSA+PiAxMSk7CkBAIC0yNTIsMjYgKzIzNCwxMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBoaXRmYl9zeW5jKHN0cnVjdCBmYl9pbmZvICppbmZvKQoreworCWhpdGZiX2FjY2VsX3dhaXQoKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpdGZiX2NoZWNrX3ZhcihzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhciwgc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJaW50IG1heHk7CisKKwl2YXItPnhyZXMgPSBpbmZvLT52YXIueHJlczsKKwl2YXItPnhyZXNfdmlydHVhbCA9IGluZm8tPnZhci54cmVzOworCXZhci0+eXJlcyA9IGluZm8tPnZhci55cmVzOworCisJaWYgKCh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDgpICYmICh2YXItPmJpdHNfcGVyX3BpeGVsICE9IDE2KSkKKwkJdmFyLT5iaXRzX3Blcl9waXhlbCA9IGluZm8tPnZhci5iaXRzX3Blcl9waXhlbDsKKworCWlmICh2YXItPnlyZXNfdmlydHVhbCA8IHZhci0+eXJlcykKKwkJdmFyLT55cmVzX3ZpcnR1YWwgPSB2YXItPnlyZXM7CisKKwltYXh5ID0gaW5mby0+Zml4LnNtZW1fbGVuIC8gdmFyLT54cmVzOworCisJaWYgKHZhci0+Yml0c19wZXJfcGl4ZWwgPT0gMTYpCisJCW1heHkgLz0gMjsKKworCWlmICh2YXItPnlyZXNfdmlydHVhbCA+IG1heHkpCisJCXZhci0+eXJlc192aXJ0dWFsID0gbWF4eTsKKworCXZhci0+eG9mZnNldCA9IDA7CisJdmFyLT55b2Zmc2V0ID0gMDsKKworCXN3aXRjaCAodmFyLT5iaXRzX3Blcl9waXhlbCkgeworCWNhc2UgODoKKwkJdmFyLT5yZWQub2Zmc2V0ID0gMDsKKwkJdmFyLT5yZWQubGVuZ3RoID0gODsKKwkJdmFyLT5ncmVlbi5vZmZzZXQgPSAwOworCQl2YXItPmdyZWVuLmxlbmd0aCA9IDg7CisJCXZhci0+Ymx1ZS5vZmZzZXQgPSAwOworCQl2YXItPmJsdWUubGVuZ3RoID0gODsKKwkJdmFyLT50cmFuc3Aub2Zmc2V0ID0gMDsKKwkJdmFyLT50cmFuc3AubGVuZ3RoID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxNjoJCS8qIFJHQiA1NjUgKi8KKwkJdmFyLT5yZWQub2Zmc2V0ID0gMTE7CisJCXZhci0+cmVkLmxlbmd0aCA9IDU7CisJCXZhci0+Z3JlZW4ub2Zmc2V0ID0gNTsKKwkJdmFyLT5ncmVlbi5sZW5ndGggPSA2OworCQl2YXItPmJsdWUub2Zmc2V0ID0gMDsKKwkJdmFyLT5ibHVlLmxlbmd0aCA9IDU7CisJCXZhci0+dHJhbnNwLm9mZnNldCA9IDA7CisJCXZhci0+dHJhbnNwLmxlbmd0aCA9IDA7CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGhpdGZiX3NldF9wYXIoc3RydWN0IGZiX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgc2hvcnQgbGRyMzsKKworCXN3aXRjaCAoaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSB7CisJY2FzZSA4OgorCQlpbmZvLT5maXgubGluZV9sZW5ndGggPSBpbmZvLT52YXIueHJlczsKKwkJaW5mby0+Zml4LnZpc3VhbCA9IEZCX1ZJU1VBTF9QU0VVRE9DT0xPUjsKKwkJaW5mby0+Zml4LnlwYW5zdGVwID0gMTY7CisJCWJyZWFrOworCWNhc2UgMTY6CisJCWluZm8tPmZpeC5saW5lX2xlbmd0aCA9IGluZm8tPnZhci54cmVzKjI7CisJCWluZm8tPmZpeC52aXN1YWwgPSBGQl9WSVNVQUxfVFJVRUNPTE9SOworCQlpbmZvLT5maXgueXBhbnN0ZXAgPSA4OworCQlicmVhazsKKwl9CisKKwlmYl93cml0ZXcoaW5mby0+Zml4LmxpbmVfbGVuZ3RoLCBIRDY0NDYxX0xDRENMT1IpOworCWxkcjMgPSBmYl9yZWFkdyhIRDY0NDYxX0xEUjMpOworCWxkcjMgJj0gfjE1OworCWxkcjMgfD0gKGluZm8tPnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSA/IDQgOiA4OworCWZiX3dyaXRldyhsZHIzLCBIRDY0NDYxX0xEUjMpOworCXJldHVybiAwOworfQorCiBzdGF0aWMgc3RydWN0IGZiX29wcyBoaXRmYl9vcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9jaGVja192YXIJPSBoaXRmYl9jaGVja192YXIsCisJLmZiX3NldF9wYXIJCT0gaGl0ZmJfc2V0X3BhciwKIAkuZmJfc2V0Y29scmVnCT0gaGl0ZmJfc2V0Y29scmVnLAogCS5mYl9ibGFuawk9IGhpdGZiX2JsYW5rLAorCS5mYl9zeW5jCT0gaGl0ZmJfc3luYywKIAkuZmJfcGFuX2Rpc3BsYXkgPSBoaXRmYl9wYW5fZGlzcGxheSwKIAkuZmJfZmlsbHJlY3QJPSBoaXRmYl9maWxscmVjdCwKIAkuZmJfY29weWFyZWEJPSBoaXRmYl9jb3B5YXJlYSwKIAkuZmJfaW1hZ2VibGl0CT0gY2ZiX2ltYWdlYmxpdCwKIH07CiAKLWludCBfX2luaXQgaGl0ZmJfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgaGl0ZmJfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQogewogCXVuc2lnbmVkIHNob3J0IGxjZGNsb3IsIGxkcjMsIGxkdm5kcjsKLQlpbnQgc2l6ZTsKIAogCWlmIChmYl9nZXRfb3B0aW9ucygiaGl0ZmIiLCBOVUxMKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwloaXRmYl9maXgubW1pb19zdGFydCA9IENPTkZJR19IRDY0NDYxX0lPQkFTRSsweDEwMDA7CisJaGl0ZmJfZml4Lm1taW9fbGVuID0gMHgxMDAwOwogCWhpdGZiX2ZpeC5zbWVtX3N0YXJ0ID0gQ09ORklHX0hENjQ0NjFfSU9CQVNFICsgMHgwMjAwMDAwMDsKLQloaXRmYl9maXguc21lbV9sZW4gPSAoTUFDSF9IUDY5MCkgPyAxMDI0ICogMTAyNCA6IDUxMiAqIDEwMjQ7CisJaGl0ZmJfZml4LnNtZW1fbGVuID0gNTEyICogMTAyNDsKIAogCWxjZGNsb3IgPSBmYl9yZWFkdyhIRDY0NDYxX0xDRENMT1IpOwogCWxkdm5kciA9IGZiX3JlYWR3KEhENjQ0NjFfTERWTkRSKTsKQEAgLTMyMSwxMiArMzkwLDEyIEBACiAJZmJfaW5mby52YXIgPSBoaXRmYl92YXI7CiAJZmJfaW5mby5maXggPSBoaXRmYl9maXg7CiAJZmJfaW5mby5wc2V1ZG9fcGFsZXR0ZSA9IHBzZXVkb19wYWxldHRlOwotCWZiX2luZm8uZmxhZ3MgPSBGQklORk9fREVGQVVMVDsKKwlmYl9pbmZvLmZsYWdzID0gRkJJTkZPX0RFRkFVTFQgfCBGQklORk9fSFdBQ0NFTF9ZUEFOIHwKKwkJRkJJTkZPX0hXQUNDRUxfRklMTFJFQ1QgfCBGQklORk9fSFdBQ0NFTF9DT1BZQVJFQTsKIAogCWZiX2luZm8uc2NyZWVuX2Jhc2UgPSAodm9pZCAqKWhpdGZiX2ZpeC5zbWVtX3N0YXJ0OwogCi0Jc2l6ZSA9IChmYl9pbmZvLnZhci5iaXRzX3Blcl9waXhlbCA9PSA4KSA/IDI1NiA6IDE2OwotCWZiX2FsbG9jX2NtYXAoJmZiX2luZm8uY21hcCwgc2l6ZSwgMCk7CisJZmJfYWxsb2NfY21hcCgmZmJfaW5mby5jbWFwLCAyNTYsIDApOwogCiAJaWYgKHJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKSA8IDApCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMzM2LDkgKzQwNSw3NSBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IF9fZGV2ZXhpdCBoaXRmYl9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXJldHVybiB1bnJlZ2lzdGVyX2ZyYW1lYnVmZmVyKCZmYl9pbmZvKTsKK30KKworI2lmZGVmIENPTkZJR19QTQorc3RhdGljIGludCBoaXRmYl9zdXNwZW5kKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQoreworCXUxNiB2OworCisJaGl0ZmJfYmxhbmsoMSwwKTsKKwl2ID0gZmJfcmVhZHcoSEQ2NDQ2MV9TVEJDUik7CisJdiB8PSBIRDY0NDYxX1NUQkNSX1NMQ0tFX0lTVDsKKwlmYl93cml0ZXcodiwgSEQ2NDQ2MV9TVEJDUik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoaXRmYl9yZXN1bWUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqZGV2KQoreworCXUxNiB2OworCisJdiA9IGZiX3JlYWR3KEhENjQ0NjFfU1RCQ1IpOworCXYgJj0gfkhENjQ0NjFfU1RCQ1JfU0xDS0VfT1NUOworCW1zbGVlcCgxMDApOworCXYgPSBmYl9yZWFkdyhIRDY0NDYxX1NUQkNSKTsKKwl2ICY9IH5IRDY0NDYxX1NUQkNSX1NMQ0tFX0lTVDsKKwlmYl93cml0ZXcodiwgSEQ2NDQ2MV9TVEJDUik7CisJaGl0ZmJfYmxhbmsoMCwwKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGhpdGZiX2RyaXZlciA9IHsKKwkucHJvYmUJCT0gaGl0ZmJfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2RldmV4aXRfcChoaXRmYl9yZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kCT0gaGl0ZmJfc3VzcGVuZCwKKwkucmVzdW1lCQk9IGhpdGZiX3Jlc3VtZSwKKyNlbmRpZgorCS5kcml2ZXIJCT0geworCQkubmFtZQk9ICJoaXRmYiIsCisJfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGhpdGZiX2RldmljZSA9IHsKKwkubmFtZQk9ICJoaXRmYiIsCisJLmlkCT0gLTEsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoaXRmYl9pbml0KHZvaWQpCit7CisJaW50IHJldDsKKworCXJldCA9IHBsYXRmb3JtX2RyaXZlcl9yZWdpc3RlcigmaGl0ZmJfZHJpdmVyKTsKKwlpZiAoIXJldCkgeworCQlyZXQgPSBwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJmhpdGZiX2RldmljZSk7CisJCWlmIChyZXQpCisJCQlwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3RlcigmaGl0ZmJfZHJpdmVyKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworCiBzdGF0aWMgdm9pZCBfX2V4aXQgaGl0ZmJfZXhpdCh2b2lkKQogewotCXVucmVnaXN0ZXJfZnJhbWVidWZmZXIoJmZiX2luZm8pOworCXBsYXRmb3JtX2RldmljZV91bnJlZ2lzdGVyKCZoaXRmYl9kZXZpY2UpOworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZoaXRmYl9kcml2ZXIpOwogfQogCiBtb2R1bGVfaW5pdChoaXRmYl9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaTgxMC9pODEwLWkyYy5jIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKaW5kZXggYzFmN2I0OS4uN2QwNmIzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKKysrIGIvZHJpdmVycy92aWRlby9pODEwL2k4MTAtaTJjLmMKQEAgLTk4LDcgKzk4LDYgQEAKIAljaGFuLT5hbGdvLmdldHNkYSAgICAgICAgICAgICAgID0gaTgxMGkyY19nZXRzZGE7CiAJY2hhbi0+YWxnby5nZXRzY2wgICAgICAgICAgICAgICA9IGk4MTBpMmNfZ2V0c2NsOwogCWNoYW4tPmFsZ28udWRlbGF5ICAgICAgICAgICAgICAgPSAxMDsKLQljaGFuLT5hbGdvLm1kZWxheSAgICAgICAgICAgICAgID0gMTA7CiAgICAgICAgIGNoYW4tPmFsZ28udGltZW91dCAgICAgICAgICAgICAgPSAoSFovMik7CiAgICAgICAgIGNoYW4tPmFsZ28uZGF0YSAgICAgICAgICAgICAgICAgPSBjaGFuOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvTWFrZWZpbGUgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvTWFrZWZpbGUKaW5kZXggNzIyZDIxZC4uNmM3ODJkMyAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9pbnRlbGZiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9NYWtlZmlsZQpAQCAtMSw2ICsxLDggQEAKIG9iai0kKENPTkZJR19GQl9JTlRFTCkgKz0gaW50ZWxmYi5vCiAKLWludGVsZmItb2JqcyA6PSBpbnRlbGZiZHJ2Lm8gaW50ZWxmYmh3Lm8KK2ludGVsZmIteSA6PSBpbnRlbGZiZHJ2Lm8gaW50ZWxmYmh3Lm8KK2ludGVsZmItJChDT05GSUdfRkJfSU5URUxfSTJDKSArPSBpbnRlbGZiX2kyYy5vCitpbnRlbGZiLW9ianMgOj0gJChpbnRlbGZiLXkpCiAKIGlmZGVmIENPTkZJR19GQl9JTlRFTF9ERUJVRwogI0VYVFJBX0NGTEFHUyArPSAtRERFQlVHIC1EVkVSQk9TRSAtRFJFR0RVTVAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmggYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYi5oCmluZGV4IGUyOTBkNzQuLjgwYjk0YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiLmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmIuaApAQCAtNiw2ICs2LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYWdwX2JhY2tlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9mYi5oPgogCisjaWZkZWYgQ09ORklHX0ZCX0lOVEVMX0kyQworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgorI2VuZGlmCiAKIC8qKiogVmVyc2lvbi9uYW1lICoqKi8KICNkZWZpbmUgSU5URUxGQl9WRVJTSU9OCQkJIjAuOS40IgpAQCAtMTE1LDYgKzExOSwyOSBAQAogLyogSW50ZWwgYWdwZ2FydCBkcml2ZXIgKi8KICNkZWZpbmUgQUdQX1BIWVNJQ0FMX01FTU9SWSAgICAgMgogCisvKiBzdG9yZSBpbmZvcm1hdGlvbiBhYm91dCBhbiBJeHh4IERWTyAqLworLyogVGhlIGk4MzAtPmk4NjUgdXNlIG11bHRpcGxlIERWT3Mgd2l0aCBtdWx0aXBsZSBpMmNzICovCisvKiB0aGUgaTkxNSwgaTk0NSBoYXZlIGEgc2luZ2xlIHNEVk8gaTJjIGJ1cyAtIHdoaWNoIGlzIGRpZmZlcmVudCAqLworI2RlZmluZSBNQVhfT1VUUFVUUyA2CisKKy8qIHRoZXNlIGFyZSBvdXRwdXRzIGZyb20gdGhlIGNoaXAgLSBpbnRlZ3JhdGVkIG9ubHkKKyAgIGV4dGVybmFsIGNoaXBzIGFyZSB2aWEgRFZPIG9yIFNEVk8gb3V0cHV0ICovCisjZGVmaW5lIElOVEVMRkJfT1VUUFVUX1VOVVNFRCAwCisjZGVmaW5lIElOVEVMRkJfT1VUUFVUX0FOQUxPRyAxCisjZGVmaW5lIElOVEVMRkJfT1VUUFVUX0RWTyAyCisjZGVmaW5lIElOVEVMRkJfT1VUUFVUX1NEVk8gMworI2RlZmluZSBJTlRFTEZCX09VVFBVVF9MVkRTIDQKKyNkZWZpbmUgSU5URUxGQl9PVVRQVVRfVFZPVVQgNQorCisjZGVmaW5lIElOVEVMRkJfRFZPX0NISVBfTk9ORSAwCisjZGVmaW5lIElOVEVMRkJfRFZPX0NISVBfTFZEUyAxCisjZGVmaW5lIElOVEVMRkJfRFZPX0NISVBfVE1EUyAyCisjZGVmaW5lIElOVEVMRkJfRFZPX0NISVBfVFZPVVQgNAorCisjZGVmaW5lIElOVEVMRkJfT1VUUFVUX1BJUEVfTkMgIDAKKyNkZWZpbmUgSU5URUxGQl9PVVRQVVRfUElQRV9BICAgMQorI2RlZmluZSBJTlRFTEZCX09VVFBVVF9QSVBFX0IgICAyCisKIC8qKiogRGF0YSBUeXBlcyAqKiovCiAKIC8qIHN1cHBvcnRlZCBjaGlwc2V0cyAqLwpAQCAtMTk1LDYgKzIyMiwxMCBAQAogCXUzMiBtZW1fbW9kZTsKIAl1MzIgZndfYmxjXzA7CiAJdTMyIGZ3X2JsY18xOworCXUxNiBod3N0YW07CisJdTE2IGllcjsKKwl1MTYgaWlyOworCXUxNiBpbXI7CiB9OwogCiBzdHJ1Y3QgaW50ZWxmYl9oZWFwX2RhdGEgewpAQCAtMjA0LDYgKzIzNSwzMyBAQAogCXUzMiBzaXplOyAgICAvLyBpbiBieXRlcwogfTsKIAorI2lmZGVmIENPTkZJR19GQl9JTlRFTF9JMkMKK3N0cnVjdCBpbnRlbGZiX2kyY19jaGFuIHsKKyAgICBzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbzsKKyAgICB1MzIgcmVnOworICAgIHN0cnVjdCBpMmNfYWRhcHRlciBhZGFwdGVyOworICAgIHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBhbGdvOworfTsKKyNlbmRpZgorCitzdHJ1Y3QgaW50ZWxmYl9vdXRwdXRfcmVjIHsKKyAgICBpbnQgdHlwZTsKKyAgICBpbnQgcGlwZTsKKyAgICBpbnQgZmxhZ3M7CisKKyNpZmRlZiBDT05GSUdfRkJfSU5URUxfSTJDCisgICAgc3RydWN0IGludGVsZmJfaTJjX2NoYW4gaTJjX2J1czsKKyAgICBzdHJ1Y3QgaW50ZWxmYl9pMmNfY2hhbiBkZGNfYnVzOworI2VuZGlmCit9OworCitzdHJ1Y3QgaW50ZWxmYl92c3luYyB7CisJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJaW50IHBhbl9kaXNwbGF5OworCXUzMiBwYW5fb2Zmc2V0OworfTsKKwogc3RydWN0IGludGVsZmJfaW5mbyB7CiAJc3RydWN0IGZiX2luZm8gKmluZm87CiAJc3RydWN0IGZiX29wcyAgKmZib3BzOwpAQCAtMjIwLDcgKzI3OCw3IEBACiAJdTggZmJtZW1fZ2FydDsKIAogCS8qIG10cnIgc3VwcG9ydCAqLwotCXUzMiBtdHJyX3JlZzsKKwlpbnQgbXRycl9yZWc7CiAJdTMyIGhhc19tdHJyOwogCiAJLyogaGVhcCBkYXRhICovCkBAIC0yNjcsNiArMzI1LDEyIEBACiAJaW50IGZpeGVkX21vZGU7CiAJaW50IHJpbmdfYWN0aXZlOwogCWludCBmbGFnOworCXVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOworCWludCBvcGVuOworCisJLyogdnN5bmMgKi8KKwlzdHJ1Y3QgaW50ZWxmYl92c3luYyB2c3luYzsKKwlzcGlubG9ja190IGludF9sb2NrOwogCiAJLyogaHcgY3Vyc29yICovCiAJaW50IGN1cnNvcl9vbjsKQEAgLTI4NSwxMiArMzQ5LDI1IEBACiAJCiAJLyogaW5kZXggaW50byBwbGxzICovCiAJaW50IHBsbF9pbmRleDsKKworCS8qIG91dHB1dHMgKi8KKwlpbnQgbnVtX291dHB1dHM7CisJc3RydWN0IGludGVsZmJfb3V0cHV0X3JlYyBvdXRwdXRbTUFYX09VVFBVVFNdOwogfTsKIAogI2RlZmluZSBJU19JOVhYKGRpbmZvKSAoKChkaW5mbyktPmNoaXBzZXQgPT0gSU5URUxfOTE1Ryl8fChkaW5mby0+Y2hpcHNldCA9PSBJTlRFTF85MTVHTSl8fCgoZGluZm8pLT5jaGlwc2V0ID09IElOVEVMXzk0NUcpfHwoZGluZm8tPmNoaXBzZXQ9PUlOVEVMXzk0NUdNKSkKIAorI2lmbmRlZiBGQklPX1dBSVRGT1JWU1lOQworI2RlZmluZSBGQklPX1dBSVRGT1JWU1lOQwlfSU9XKCdGJywgMHgyMCwgX191MzIpCisjZW5kaWYKKwogLyoqKiBmdW5jdGlvbiBwcm90b3R5cGVzICoqKi8KIAogZXh0ZXJuIGludCBpbnRlbGZiX3Zhcl90b19kZXB0aChjb25zdCBzdHJ1Y3QgZmJfdmFyX3NjcmVlbmluZm8gKnZhcik7CiAKKyNpZmRlZiBDT05GSUdfRkJfSU5URUxfSTJDCitleHRlcm4gdm9pZCBpbnRlbGZiX2NyZWF0ZV9pMmNfYnVzc2VzKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKK2V4dGVybiB2b2lkIGludGVsZmJfZGVsZXRlX2kyY19idXNzZXMoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pOworI2VuZGlmCisKICNlbmRpZiAvKiBfSU5URUxGQl9IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiX2kyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTEzZDYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYl9pMmMuYwpAQCAtMCwwICsxLDIwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyBDb3B5cmlnaHQgMjAwNiBEYXZlIEFpcmxpZSA8YWlybGllZEBsaW51eC5pZT4KKworQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCitvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3ViCitsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQordGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKK3BhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKK1NvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgU0hBTEwKK1RIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgVEhFSVIgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLAorREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFCitVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9mYi5oPgorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2luY2x1ZGUgImludGVsZmIuaCIKKyNpbmNsdWRlICJpbnRlbGZiaHcuaCIKKworLyogYml0IGxvY2F0aW9ucyBpbiB0aGUgcmVnaXN0ZXJzICovCisjZGVmaW5lIFNDTF9ESVJfTUFTSwkJMHgwMDAxCisjZGVmaW5lIFNDTF9ESVIJCQkweDAwMDIKKyNkZWZpbmUgU0NMX1ZBTF9NQVNLCQkweDAwMDQKKyNkZWZpbmUgU0NMX1ZBTF9PVVQJCTB4MDAwOAorI2RlZmluZSBTQ0xfVkFMX0lOCQkweDAwMTAKKyNkZWZpbmUgU0RBX0RJUl9NQVNLCQkweDAxMDAKKyNkZWZpbmUgU0RBX0RJUgkJCTB4MDIwMAorI2RlZmluZSBTREFfVkFMX01BU0sJCTB4MDQwMAorI2RlZmluZSBTREFfVkFMX09VVAkJMHgwODAwCisjZGVmaW5lIFNEQV9WQUxfSU4JCTB4MTAwMAorCitzdGF0aWMgdm9pZCBpbnRlbGZiX2dwaW9fc2V0c2NsKHZvaWQgKmRhdGEsIGludCBzdGF0ZSkKK3sKKwlzdHJ1Y3QgaW50ZWxmYl9pMmNfY2hhbiAqY2hhbiA9IGRhdGE7CisJc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8gPSBjaGFuLT5kaW5mbzsKKwl1MzIgdmFsOworCisJT1VUUkVHKGNoYW4tPnJlZywgKHN0YXRlID8gU0NMX1ZBTF9PVVQgOiAwKSB8IFNDTF9ESVIgfCBTQ0xfRElSX01BU0sgfCBTQ0xfVkFMX01BU0spOworCXZhbCA9IElOUkVHKGNoYW4tPnJlZyk7Cit9CisKK3N0YXRpYyB2b2lkIGludGVsZmJfZ3Bpb19zZXRzZGEodm9pZCAqZGF0YSwgaW50IHN0YXRlKQoreworCXN0cnVjdCBpbnRlbGZiX2kyY19jaGFuICpjaGFuID0gZGF0YTsKKwlzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyA9IGNoYW4tPmRpbmZvOworCXUzMiB2YWw7CisKKwlPVVRSRUcoY2hhbi0+cmVnLCAoc3RhdGUgPyBTREFfVkFMX09VVCA6IDApIHwgU0RBX0RJUiB8IFNEQV9ESVJfTUFTSyB8IFNEQV9WQUxfTUFTSyk7CisJdmFsID0gSU5SRUcoY2hhbi0+cmVnKTsKK30KKworc3RhdGljIGludCBpbnRlbGZiX2dwaW9fZ2V0c2NsKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGludGVsZmJfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOworCXN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvID0gY2hhbi0+ZGluZm87CisJdTMyIHZhbDsKKworCU9VVFJFRyhjaGFuLT5yZWcsIFNDTF9ESVJfTUFTSyk7CisJT1VUUkVHKGNoYW4tPnJlZywgMCk7CisJdmFsID0gSU5SRUcoY2hhbi0+cmVnKTsKKwlyZXR1cm4gKCh2YWwgJiBTQ0xfVkFMX0lOKSAhPSAwKTsKK30KKworc3RhdGljIGludCBpbnRlbGZiX2dwaW9fZ2V0c2RhKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGludGVsZmJfaTJjX2NoYW4gKmNoYW4gPSBkYXRhOworCXN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvID0gY2hhbi0+ZGluZm87CisJdTMyIHZhbDsKKworCU9VVFJFRyhjaGFuLT5yZWcsIFNEQV9ESVJfTUFTSyk7CisJT1VUUkVHKGNoYW4tPnJlZywgMCk7CisJdmFsID0gSU5SRUcoY2hhbi0+cmVnKTsKKwlyZXR1cm4gKCh2YWwgJiBTREFfVkFMX0lOKSAhPSAwKTsKK30KKworc3RhdGljIGludCBpbnRlbGZiX3NldHVwX2kyY19idXMoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sCisJCQkJCQkJCSBzdHJ1Y3QgaW50ZWxmYl9pMmNfY2hhbiAqY2hhbiwKKwkJCQkJCQkJIGNvbnN0IHUzMiByZWcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IHJjOworCisJY2hhbi0+ZGluZm8JCQkJCT0gZGluZm87CisJY2hhbi0+cmVnCQkJCQk9IHJlZzsKKwlzbnByaW50ZihjaGFuLT5hZGFwdGVyLm5hbWUsIEkyQ19OQU1FX1NJWkUsICJpbnRlbGZiICVzIiwgbmFtZSk7CisJY2hhbi0+YWRhcHRlci5vd25lcgkJCT0gVEhJU19NT0RVTEU7CisJY2hhbi0+YWRhcHRlci5pZAkJCT0gSTJDX0hXX0JfSU5URUxGQjsKKwljaGFuLT5hZGFwdGVyLmFsZ29fZGF0YQkJPSAmY2hhbi0+YWxnbzsKKwljaGFuLT5hZGFwdGVyLmRldi5wYXJlbnQJPSAmY2hhbi0+ZGluZm8tPnBkZXYtPmRldjsKKwljaGFuLT5hbGdvLnNldHNkYQkJCT0gaW50ZWxmYl9ncGlvX3NldHNkYTsKKwljaGFuLT5hbGdvLnNldHNjbAkJCT0gaW50ZWxmYl9ncGlvX3NldHNjbDsKKwljaGFuLT5hbGdvLmdldHNkYQkJCT0gaW50ZWxmYl9ncGlvX2dldHNkYTsKKwljaGFuLT5hbGdvLmdldHNjbAkJCT0gaW50ZWxmYl9ncGlvX2dldHNjbDsKKwljaGFuLT5hbGdvLnVkZWxheQkJCT0gNDA7CisJY2hhbi0+YWxnby50aW1lb3V0CQkJPSAyMDsKKwljaGFuLT5hbGdvLmRhdGEJCQkJPSBjaGFuOworCisJaTJjX3NldF9hZGFwZGF0YSgmY2hhbi0+YWRhcHRlciwgY2hhbik7CisKKwkvKiBSYWlzZSBTQ0wgYW5kIFNEQSAqLworCWludGVsZmJfZ3Bpb19zZXRzZGEoY2hhbiwgMSk7CisJaW50ZWxmYl9ncGlvX3NldHNjbChjaGFuLCAxKTsKKwl1ZGVsYXkoMjApOworCisJcmMgPSBpMmNfYml0X2FkZF9idXMoJmNoYW4tPmFkYXB0ZXIpOworCWlmIChyYyA9PSAwKQorCQlEQkdfTVNHKCJJMkMgYnVzICVzIHJlZ2lzdGVyZWQuXG4iLCBuYW1lKTsKKwllbHNlCisJCVdSTl9NU0coIkZhaWxlZCB0byByZWdpc3RlciBJMkMgYnVzICVzLlxuIiwgbmFtZSk7CisJcmV0dXJuIHJjOworfQorCit2b2lkIGludGVsZmJfY3JlYXRlX2kyY19idXNzZXMoc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8pCit7CisJaW50IGkgPSAwOworCisJLyogZXZlcnlvbmUgaGFzIGF0IGxlYXN0IGEgc2luZ2xlIGFuYWxvZyBvdXRwdXQgKi8KKwlkaW5mby0+bnVtX291dHB1dHMgPSAxOworCWRpbmZvLT5vdXRwdXRbaV0udHlwZSA9IElOVEVMRkJfT1VUUFVUX0FOQUxPRzsKKworCS8qIHNldHVwIHRoZSBEREMgYnVzIGZvciBhbmFsb2cgb3V0cHV0ICovCisJaW50ZWxmYl9zZXR1cF9pMmNfYnVzKGRpbmZvLCAmZGluZm8tPm91dHB1dFtpXS5kZGNfYnVzLCBHUElPQSwgIkNSVEREQ19BIik7CisJaSsrOworCisgICAgLyogbmVlZCB0byBhZGQgdGhlIG91dHB1dCBidXNzZXMgZm9yIGVhY2ggZGV2aWNlCisgICAgICAgLSB0aGlzIGZ1bmN0aW9uIGlzIHZlcnkgaW5jb21wbGV0ZQorICAgICAgIC0gaTkxNUdNIGhhcyBMVkRTIGFuZCBUVk9VVCBmb3IgZXhhbXBsZQorICAgICovCisgICAgc3dpdGNoKGRpbmZvLT5jaGlwc2V0KSB7CisJY2FzZSBJTlRFTF84MzBNOgorCWNhc2UgSU5URUxfODQ1RzoKKwljYXNlIElOVEVMXzg1NUdNOgorCWNhc2UgSU5URUxfODY1RzoKKwkJZGluZm8tPm91dHB1dFtpXS50eXBlID0gSU5URUxGQl9PVVRQVVRfRFZPOworCQlpbnRlbGZiX3NldHVwX2kyY19idXMoZGluZm8sICZkaW5mby0+b3V0cHV0W2ldLmRkY19idXMsIEdQSU9ELCAiRFZPRERDX0QiKTsKKwkJaW50ZWxmYl9zZXR1cF9pMmNfYnVzKGRpbmZvLCAmZGluZm8tPm91dHB1dFtpXS5pMmNfYnVzLCBHUElPRSwgIkRWT0kyQ19FIik7CisJCWkrKzsKKwkJYnJlYWs7CisJY2FzZSBJTlRFTF85MTVHOgorCWNhc2UgSU5URUxfOTE1R006CisJCS8qIGhhcyAgc29tZSBMVkRTICsgdHYtb3V0ICovCisJY2FzZSBJTlRFTF85NDVHOgorCWNhc2UgSU5URUxfOTQ1R006CisJCS8qIFNEVk8gcG9ydHMgaGF2ZSBhIHNpbmdsZSBjb250cm9sIGJ1cyAtIDIgZGV2aWNlcyAqLworCQlkaW5mby0+b3V0cHV0W2ldLnR5cGUgPSBJTlRFTEZCX09VVFBVVF9TRFZPOworCQlpbnRlbGZiX3NldHVwX2kyY19idXMoZGluZm8sICZkaW5mby0+b3V0cHV0W2ldLmkyY19idXMsIEdQSU9FLCAiU0RWT0NUUkxfRSIpOworCQkvKiBUT0RPOiBpbml0aWFsaXplIHRoZSBTRFZPICovCisvLwkJSTgzMFNEVk9Jbml0KHBTY3JuLCBpLCBEVk9CKTsKKwkJaSsrOworCisJCS8qIHNldCB1cCBTRFZPQyAqLworCQlkaW5mby0+b3V0cHV0W2ldLnR5cGUgPSBJTlRFTEZCX09VVFBVVF9TRFZPOworCQlkaW5mby0+b3V0cHV0W2ldLmkyY19idXMgPSBkaW5mby0+b3V0cHV0W2kgLSAxXS5pMmNfYnVzOworCQkvKiBUT0RPOiBpbml0aWFsaXplIHRoZSBTRFZPICovCisvLwkJSTgzMFNEVk9Jbml0KHBTY3JuLCBpLCBEVk9DKTsKKwkJaSsrOworCQlicmVhazsKKwl9CisJZGluZm8tPm51bV9vdXRwdXRzID0gaTsKK30KKwordm9pZCBpbnRlbGZiX2RlbGV0ZV9pMmNfYnVzc2VzKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9PVVRQVVRTOyBpKyspIHsKKwkJaWYgKGRpbmZvLT5vdXRwdXRbaV0uaTJjX2J1cy5kaW5mbykgeworCQkJaTJjX2JpdF9kZWxfYnVzKCZkaW5mby0+b3V0cHV0W2ldLmkyY19idXMuYWRhcHRlcik7CisJCQlkaW5mby0+b3V0cHV0W2ldLmkyY19idXMuZGluZm8gPSBOVUxMOworCQl9CisJCWlmIChkaW5mby0+b3V0cHV0W2ldLmRkY19idXMuZGluZm8pIHsKKwkJCWkyY19iaXRfZGVsX2J1cygmZGluZm8tPm91dHB1dFtpXS5kZGNfYnVzLmFkYXB0ZXIpOworCQkJZGluZm8tPm91dHB1dFtpXS5kZGNfYnVzLmRpbmZvID0gTlVMTDsKKwkJfQorCX0KK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMgYi9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmRydi5jCmluZGV4IDA2YWY4OWQuLjZmOWRlMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiZHJ2LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJkcnYuYwpAQCAtMTM2LDYgKzEzNiw4IEBACiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZ2V0X2luaXRpYWxfbW9kZShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CiBzdGF0aWMgdm9pZCB1cGRhdGVfZGluZm8oc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8sCiAJCQkgc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIpOworc3RhdGljIGludCBpbnRlbGZiX29wZW4oc3RydWN0IGZiX2luZm8gKmluZm8sIGludCB1c2VyKTsKK3N0YXRpYyBpbnQgaW50ZWxmYl9yZWxlYXNlKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcik7CiBzdGF0aWMgaW50IGludGVsZmJfY2hlY2tfdmFyKHN0cnVjdCBmYl92YXJfc2NyZWVuaW5mbyAqdmFyLAogCQkJICAgICBzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CiBzdGF0aWMgaW50IGludGVsZmJfc2V0X3BhcihzdHJ1Y3QgZmJfaW5mbyAqaW5mbyk7CkBAIC0xOTQsNiArMTk2LDggQEAKIC8qIGZiIG9wcyAqLwogc3RhdGljIHN0cnVjdCBmYl9vcHMgaW50ZWxfZmJfb3BzID0gewogCS5vd25lciA9CQlUSElTX01PRFVMRSwKKwkuZmJfb3BlbiA9ICAgICAgICAgICAgICBpbnRlbGZiX29wZW4sCisJLmZiX3JlbGVhc2UgPSAgICAgICAgICAgaW50ZWxmYl9yZWxlYXNlLAogCS5mYl9jaGVja192YXIgPSAgICAgICAgIGludGVsZmJfY2hlY2tfdmFyLAogCS5mYl9zZXRfcGFyID0gICAgICAgICAgIGludGVsZmJfc2V0X3BhciwKIAkuZmJfc2V0Y29scmVnID0JCWludGVsZmJfc2V0Y29scmVnLApAQCAtNDQ2LDYgKzQ1MCw4IEBACiAJaWYgKCFkaW5mbykKIAkJcmV0dXJuOwogCisJaW50ZWxmYmh3X2Rpc2FibGVfaXJxKGRpbmZvKTsKKwogCWZiX2RlYWxsb2NfY21hcCgmZGluZm8tPmluZm8tPmNtYXApOwogCWtmcmVlKGRpbmZvLT5pbmZvLT5waXhtYXAuYWRkcik7CiAKQEAgLTQ2Nyw2ICs0NzMsMTEgQEAKIAkJYWdwX2ZyZWVfbWVtb3J5KGRpbmZvLT5ndHRfcmluZ19tZW0pOwogCX0KIAorI2lmZGVmIENPTkZJR19GQl9JTlRFTF9JMkMKKwkvKiB1bi1yZWdpc3RlciBJMkMgYnVzICovCisJaW50ZWxmYl9kZWxldGVfaTJjX2J1c3NlcyhkaW5mbyk7CisjZW5kaWYKKwogCWlmIChkaW5mby0+bW1pb19iYXNlKQogCQlpb3VubWFwKCh2b2lkIF9faW9tZW0gKilkaW5mby0+bW1pb19iYXNlKTsKIAlpZiAoZGluZm8tPmFwZXJ0dXJlLnZpcnR1YWwpCkBAIC04NDQsNiArODU1LDExIEBACiAJaWYgKGJhaWxlYXJseSA9PSA1KQogCQliYWlsb3V0KGRpbmZvKTsKIAorI2lmZGVmIENPTkZJR19GQl9JTlRFTF9JMkMKKwkvKiByZWdpc3RlciBJMkMgYnVzICovCisJaW50ZWxmYl9jcmVhdGVfaTJjX2J1c3NlcyhkaW5mbyk7CisjZW5kaWYKKwogCWlmIChiYWlsZWFybHkgPT0gNikKIAkJYmFpbG91dChkaW5mbyk7CiAKQEAgLTg4OCw2ICs5MDQsMTMgQEAKIAl9CiAKIAlkaW5mby0+cmVnaXN0ZXJlZCA9IDE7CisJZGluZm8tPm9wZW4gPSAwOworCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGluZm8tPnZzeW5jLndhaXQpOworCXNwaW5fbG9ja19pbml0KCZkaW5mby0+aW50X2xvY2spOworCWRpbmZvLT5pcnFfZmxhZ3MgPSAwOworCWRpbmZvLT52c3luYy5wYW5fZGlzcGxheSA9IDA7CisJZGluZm8tPnZzeW5jLnBhbl9vZmZzZXQgPSAwOwogCiAJcmV0dXJuIDA7CiAKQEAgLTExODgsNiArMTIxMSwzNCBAQAogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogc3RhdGljIGludAoraW50ZWxmYl9vcGVuKHN0cnVjdCBmYl9pbmZvICppbmZvLCBpbnQgdXNlcikKK3sKKwlzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyA9IEdFVF9ESU5GTyhpbmZvKTsKKworCWlmICh1c2VyKSB7CisJCWRpbmZvLT5vcGVuKys7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2ludGVsZmJfcmVsZWFzZShzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgaW50IHVzZXIpCit7CisJc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8gPSBHRVRfRElORk8oaW5mbyk7CisKKwlpZiAodXNlcikgeworCQlkaW5mby0+b3Blbi0tOworCQltc2xlZXAoMSk7CisJCWlmICghZGluZm8tPm9wZW4pIHsKKwkJCWludGVsZmJod19kaXNhYmxlX2lycShkaW5mbyk7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludAogaW50ZWxmYl9jaGVja192YXIoc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvICp2YXIsIHN0cnVjdCBmYl9pbmZvICppbmZvKQogewogCWludCBjaGFuZ2VfdmFyID0gMDsKQEAgLTE0MzMsNiArMTQ4NCwxOSBAQAogaW50ZWxmYl9pb2N0bChzdHJ1Y3QgZmJfaW5mbyAqaW5mbywgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaW50IHJldHZhbCA9IDA7CisJc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8gPSBHRVRfRElORk8oaW5mbyk7CisJdTMyIHBpcGUgPSAwOworCisJc3dpdGNoIChjbWQpIHsKKwkJY2FzZSBGQklPX1dBSVRGT1JWU1lOQzoKKwkJCWlmIChnZXRfdXNlcihwaXBlLCAoX191MzIgX191c2VyICopYXJnKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKworCQkJcmV0dmFsID0gaW50ZWxmYmh3X3dhaXRfZm9yX3ZzeW5jKGRpbmZvLCBwaXBlKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQogCiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYyBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuYwppbmRleCAyYTkzMjJmLi5mODg3ZjFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmMKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC0zNjgsNyArMzY5LDEzIEBACiAKIAlvZmZzZXQgKz0gZGluZm8tPmZiLm9mZnNldCA8PCAxMjsKIAotCU9VVFJFRyhEU1BBQkFTRSwgb2Zmc2V0KTsKKwlkaW5mby0+dnN5bmMucGFuX29mZnNldCA9IG9mZnNldDsKKwlpZiAoKHZhci0+YWN0aXZhdGUgJiBGQl9BQ1RJVkFURV9WQkwpICYmICFpbnRlbGZiaHdfZW5hYmxlX2lycShkaW5mbywgMCkpIHsKKwkJZGluZm8tPnZzeW5jLnBhbl9kaXNwbGF5ID0gMTsKKwl9IGVsc2UgeworCQlkaW5mby0+dnN5bmMucGFuX2Rpc3BsYXkgPSAwOworCQlPVVRSRUcoRFNQQUJBU0UsIG9mZnNldCk7CisJfQogCiAJcmV0dXJuIDA7CiB9CkBAIC01ODUsNiArNTkyLDExIEBACiAJaHctPmZ3X2JsY18wID0gSU5SRUcoRldfQkxDXzApOwogCWh3LT5md19ibGNfMSA9IElOUkVHKEZXX0JMQ18xKTsKIAorCWh3LT5od3N0YW0gPSBJTlJFRzE2KEhXU1RBTSk7CisJaHctPmllciA9IElOUkVHMTYoSUVSKTsKKwlody0+aWlyID0gSU5SRUcxNihJSVIpOworCWh3LT5pbXIgPSBJTlJFRzE2KElNUik7CisKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjEzLDYgKzYyNSw3IEBACiAJcmV0dXJuIHZjbyAvIHA7CiB9CiAKKyNpZiBSRUdEVU1QCiBzdGF0aWMgdm9pZAogaW50ZWxmYmh3X2dldF9wMXAyKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCBpbnQgZHBsbCwgaW50ICpvX3AxLCBpbnQgKm9fcDIpCiB7CkBAIC02MzgsNiArNjUxLDcgQEAKIAkqb19wMSA9IHAxOwogCSpvX3AyID0gcDI7CiB9CisjZW5kaWYKIAogCiB2b2lkCkBAIC03OTQsNiArODA4LDEwIEBACiAJcHJpbnRrKCIJRldfQkxDXzAJCTB4JTA4eFxuIiwgaHctPmZ3X2JsY18wKTsKIAlwcmludGsoIglGV19CTENfMQkJMHglMDh4XG4iLCBody0+ZndfYmxjXzEpOwogCisJcHJpbnRrKCIJSFdTVEFNCQkJMHglMDR4XG4iLCBody0+aHdzdGFtKTsKKwlwcmludGsoIglJRVIJCQkweCUwNHhcbiIsIGh3LT5pZXIpOworCXByaW50aygiCUlJUgkJCTB4JTA0eFxuIiwgaHctPmlpcik7CisJcHJpbnRrKCIJSU1SCQkJMHglMDR4XG4iLCBody0+aW1yKTsKIAlwcmludGsoImh3IHN0YXRlIGR1bXAgZW5kXG4iKTsKICNlbmRpZgogfQpAQCAtMTkzMiwzICsxOTUwLDExOSBAQAogCQlhZGRyICs9IDE2OwogCX0KIH0KKworc3RhdGljIGlycXJldHVybl90CitpbnRlbGZiaHdfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKmZwKSB7CisJaW50IGhhbmRsZWQgPSAwOworCXUxNiB0bXA7CisJc3RydWN0IGludGVsZmJfaW5mbyAqZGluZm8gPSAoc3RydWN0IGludGVsZmJfaW5mbyAqKWRldl9pZDsKKworCXNwaW5fbG9jaygmZGluZm8tPmludF9sb2NrKTsKKworCXRtcCA9IElOUkVHMTYoSUlSKTsKKwl0bXAgJj0gVlNZTkNfUElQRV9BX0lOVEVSUlVQVDsKKworCWlmICh0bXAgPT0gMCkgeworCQlzcGluX3VubG9jaygmZGluZm8tPmludF9sb2NrKTsKKwkJcmV0dXJuIElSUV9SRVRWQUwoaGFuZGxlZCk7CisJfQorCisJT1VUUkVHMTYoSUlSLCB0bXApOworCisJaWYgKHRtcCAmIFZTWU5DX1BJUEVfQV9JTlRFUlJVUFQpIHsKKwkJZGluZm8tPnZzeW5jLmNvdW50Kys7CisJCWlmIChkaW5mby0+dnN5bmMucGFuX2Rpc3BsYXkpIHsKKwkJCWRpbmZvLT52c3luYy5wYW5fZGlzcGxheSA9IDA7CisJCQlPVVRSRUcoRFNQQUJBU0UsIGRpbmZvLT52c3luYy5wYW5fb2Zmc2V0KTsKKwkJfQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRpbmZvLT52c3luYy53YWl0KTsKKwkJaGFuZGxlZCA9IDE7CisJfQorCisJc3Bpbl91bmxvY2soJmRpbmZvLT5pbnRfbG9jayk7CisKKwlyZXR1cm4gSVJRX1JFVFZBTChoYW5kbGVkKTsKK30KKworaW50CitpbnRlbGZiaHdfZW5hYmxlX2lycShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywgaW50IHJlZW5hYmxlKSB7CisKKwlpZiAoIXRlc3RfYW5kX3NldF9iaXQoMCwgJmRpbmZvLT5pcnFfZmxhZ3MpKSB7CisJCWlmIChyZXF1ZXN0X2lycShkaW5mby0+cGRldi0+aXJxLCBpbnRlbGZiaHdfaXJxLCBTQV9TSElSUSwgImludGVsZmIiLCBkaW5mbykpIHsKKwkJCWNsZWFyX2JpdCgwLCAmZGluZm8tPmlycV9mbGFncyk7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCisJCXNwaW5fbG9ja19pcnEoJmRpbmZvLT5pbnRfbG9jayk7CisJCU9VVFJFRzE2KEhXU1RBTSwgMHhmZmZlKTsKKwkJT1VUUkVHMTYoSU1SLCAweDApOworCQlPVVRSRUcxNihJRVIsIFZTWU5DX1BJUEVfQV9JTlRFUlJVUFQpOworCQlzcGluX3VubG9ja19pcnEoJmRpbmZvLT5pbnRfbG9jayk7CisJfSBlbHNlIGlmIChyZWVuYWJsZSkgeworCQl1MTYgaWVyOworCisJCXNwaW5fbG9ja19pcnEoJmRpbmZvLT5pbnRfbG9jayk7CisJCWllciA9IElOUkVHMTYoSUVSKTsKKwkJaWYgKChpZXIgJiBWU1lOQ19QSVBFX0FfSU5URVJSVVBUKSkgeworCQkJREJHX01TRygic29tZW9uZSBkaXNhYmxlZCB0aGUgSVJRIFslMDhYXVxuIiwgaWVyKTsKKwkJCU9VVFJFRyhJRVIsIFZTWU5DX1BJUEVfQV9JTlRFUlJVUFQpOworCQl9CisJCXNwaW5fdW5sb2NrX2lycSgmZGluZm8tPmludF9sb2NrKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQKK2ludGVsZmJod19kaXNhYmxlX2lycShzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbykgeworCXUxNiB0bXA7CisKKwlpZiAodGVzdF9hbmRfY2xlYXJfYml0KDAsICZkaW5mby0+aXJxX2ZsYWdzKSkgeworCQlpZiAoZGluZm8tPnZzeW5jLnBhbl9kaXNwbGF5KSB7CisJCQlkaW5mby0+dnN5bmMucGFuX2Rpc3BsYXkgPSAwOworCQkJT1VUUkVHKERTUEFCQVNFLCBkaW5mby0+dnN5bmMucGFuX29mZnNldCk7CisJCX0KKwkJc3Bpbl9sb2NrX2lycSgmZGluZm8tPmludF9sb2NrKTsKKwkJT1VUUkVHMTYoSFdTVEFNLCAweGZmZmYpOworCQlPVVRSRUcxNihJTVIsIDB4ZmZmZik7CisJCU9VVFJFRzE2KElFUiwgMHgwKTsKKworCQl0bXAgPSBJTlJFRzE2KElJUik7CisJCU9VVFJFRzE2KElJUiwgdG1wKTsKKwkJc3Bpbl91bmxvY2tfaXJxKCZkaW5mby0+aW50X2xvY2spOworCisJCWZyZWVfaXJxKGRpbmZvLT5wZGV2LT5pcnEsIGRpbmZvKTsKKwl9Cit9CisKK2ludAoraW50ZWxmYmh3X3dhaXRfZm9yX3ZzeW5jKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCB1MzIgcGlwZSkgeworCXN0cnVjdCBpbnRlbGZiX3ZzeW5jICp2c3luYzsKKwl1bnNpZ25lZCBpbnQgY291bnQ7CisJaW50IHJldDsKKworCXN3aXRjaCAocGlwZSkgeworCQljYXNlIDA6CisJCQl2c3luYyA9ICZkaW5mby0+dnN5bmM7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXJldHVybiAtRU5PREVWOworCX0KKworCXJldCA9IGludGVsZmJod19lbmFibGVfaXJxKGRpbmZvLCAwKTsKKwlpZiAocmV0KSB7CisJCXJldHVybiByZXQ7CisJfQorCisJY291bnQgPSB2c3luYy0+Y291bnQ7CisJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlX3RpbWVvdXQodnN5bmMtPndhaXQsIGNvdW50ICE9IHZzeW5jLT5jb3VudCwgSFovMTApOworCWlmIChyZXQgPCAwKSB7CisJCXJldHVybiByZXQ7CisJfQorCWlmIChyZXQgPT0gMCkgeworCQlpbnRlbGZiaHdfZW5hYmxlX2lycShkaW5mbywgMSk7CisJCURCR19NU0coIndhaXRfZm9yX3ZzeW5jIHRpbWVkIG91dCFcbiIpOworCQlyZXR1cm4gLUVUSU1FRE9VVDsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaCBiL2RyaXZlcnMvdmlkZW8vaW50ZWxmYi9pbnRlbGZiaHcuaAppbmRleCAxMGFjZGEwLi44YzU0YmE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL2ludGVsZmIvaW50ZWxmYmh3LmgKKysrIGIvZHJpdmVycy92aWRlby9pbnRlbGZiL2ludGVsZmJody5oCkBAIC04OCw2ICs4OCwxOSBAQAogI2RlZmluZSBJTlNURE9ORQkJMHgyMDkwCiAjZGVmaW5lIFBSSV9SSU5HX0VNUFRZCQkJMQogCisjZGVmaW5lIEhXU1RBTQkJCTB4MjA5OAorI2RlZmluZSBJRVIJCQkweDIwQTAKKyNkZWZpbmUgSUlSCQkJMHgyMEE0CisjZGVmaW5lIElNUgkJCTB4MjBBOAorI2RlZmluZSBWU1lOQ19QSVBFX0FfSU5URVJSVVBUCQkoMSA8PCA3KQorI2RlZmluZSBQSVBFX0FfRVZFTlRfSU5URVJSVVBUCQkoMSA8PCA0KQorI2RlZmluZSBWU1lOQ19QSVBFX0JfSU5URVJSVVBUCQkoMSA8PCA1KQorI2RlZmluZSBQSVBFX0JfRVZFTlRfSU5URVJSVVBUCQkoMSA8PCA0KQorI2RlZmluZSBIT1NUX1BPUlRfRVZFTlRfSU5URVJSVVBUCSgxIDw8IDMpCisjZGVmaW5lIENBUFRVUkVfRVZFTlRfSU5URVJSVVBUCQkoMSA8PCAyKQorI2RlZmluZSBVU0VSX0RFRklORURfSU5URVJSVVBUCQkoMSA8PCAxKQorI2RlZmluZSBCUkVBS1BPSU5UX0lOVEVSUlVQVAkJMQorCiAjZGVmaW5lIElOU1RQTQkJCTB4MjBjMAogI2RlZmluZSBTWU5DX0ZMVVNIX0VOQUJMRQkJKDEgPDwgNSkKIApAQCAtMTEzLDYgKzEyNiwxMiBAQAogI2RlZmluZSBGV19ESVNQQ19CTF9TSElGVAkJOAogI2RlZmluZSBGV19ESVNQQ19CTF9NQVNLCQkweDcKIAorI2RlZmluZSBHUElPQSAgICAgICAgICAgICAweDUwMTAKKyNkZWZpbmUgR1BJT0IgICAgICAgICAgICAgMHg1MDE0CisjZGVmaW5lIEdQSU9DICAgICAgICAgICAgIDB4NTAxOCAvLyB0aGlzIG1heSBiZSBleHRlcm5hbCBEREMgb24gaTgzMAorI2RlZmluZSBHUElPRCAgICAgICAgICAgICAweDUwMUMgLy8gdGhpcyBpcyBEVk8gRERDCisjZGVmaW5lIEdQSU9FICAgICAgICAgICAgIDB4NTAyMCAvLyB0aGlzIGlzIERWTyBpMkMKKyNkZWZpbmUgR1BJT0YgICAgICAgICAgICAgMHg1MDI0CiAKIC8qIFBMTCByZWdpc3RlcnMgKi8KICNkZWZpbmUgVkdBMF9ESVZJU09SCQkweDA2MDAwCkBAIC00NjgsOSArNDg3LDEyIEBACiAKIC8qIEkvTyBtYWNyb3MgKi8KICNkZWZpbmUgSU5SRUc4KGFkZHIpCSAgICAgIHJlYWRiKCh1OCBfX2lvbWVtICopKGRpbmZvLT5tbWlvX2Jhc2UgKyAoYWRkcikpKQorI2RlZmluZSBJTlJFRzE2KGFkZHIpCSAgICAgIHJlYWR3KCh1MTYgX19pb21lbSAqKShkaW5mby0+bW1pb19iYXNlICsgKGFkZHIpKSkKICNkZWZpbmUgSU5SRUcoYWRkcikJICAgICAgcmVhZGwoKHUzMiBfX2lvbWVtICopKGRpbmZvLT5tbWlvX2Jhc2UgKyAoYWRkcikpKQogI2RlZmluZSBPVVRSRUc4KGFkZHIsIHZhbCkgICAgd3JpdGViKCh2YWwpLCh1OCBfX2lvbWVtICopKGRpbmZvLT5tbWlvX2Jhc2UgKyBcCiAJCQkJCQkJICAgKGFkZHIpKSkKKyNkZWZpbmUgT1VUUkVHMTYoYWRkciwgdmFsKSAgICB3cml0ZXcoKHZhbCksKHUxNiBfX2lvbWVtICopKGRpbmZvLT5tbWlvX2Jhc2UgKyBcCisJCQkJCQkJICAgKGFkZHIpKSkKICNkZWZpbmUgT1VUUkVHKGFkZHIsIHZhbCkgICAgIHdyaXRlbCgodmFsKSwodTMyIF9faW9tZW0gKikoZGluZm8tPm1taW9fYmFzZSArIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWRkcikpKQogCkBAIC01NDUsNSArNTY3LDggQEAKIGV4dGVybiB2b2lkIGludGVsZmJod19jdXJzb3JfbG9hZChzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbywgaW50IHdpZHRoLAogCQkJCSAgaW50IGhlaWdodCwgdTggKmRhdGEpOwogZXh0ZXJuIHZvaWQgaW50ZWxmYmh3X2N1cnNvcl9yZXNldChzdHJ1Y3QgaW50ZWxmYl9pbmZvICpkaW5mbyk7CitleHRlcm4gaW50IGludGVsZmJod19lbmFibGVfaXJxKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCBpbnQgcmVlbmFibGUpOworZXh0ZXJuIHZvaWQgaW50ZWxmYmh3X2Rpc2FibGVfaXJxKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvKTsKK2V4dGVybiBpbnQgaW50ZWxmYmh3X3dhaXRfZm9yX3ZzeW5jKHN0cnVjdCBpbnRlbGZiX2luZm8gKmRpbmZvLCB1MzIgcGlwZSk7CiAKICNlbmRpZiAvKiBfSU5URUxGQkhXX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vbWF0cm94L2kyYy1tYXRyb3hmYi5jIGIvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKaW5kZXggNTdhYmJhZS4uNzk1YzFhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKKysrIGIvZHJpdmVycy92aWRlby9tYXRyb3gvaTJjLW1hdHJveGZiLmMKQEAgLTk1LDEyICs5NSwxMiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhIG1hdHJveF9pMmNfYWxnb190ZW1wbGF0ZSA9CiB7Ci0JTlVMTCwKLQltYXRyb3hmYl9ncGlvX3NldHNkYSwKLQltYXRyb3hmYl9ncGlvX3NldHNjbCwKLQltYXRyb3hmYl9ncGlvX2dldHNkYSwKLQltYXRyb3hmYl9ncGlvX2dldHNjbCwKLQkxMCwgMTAsIDEwMCwKKwkuc2V0c2RhCQk9IG1hdHJveGZiX2dwaW9fc2V0c2RhLAorCS5zZXRzY2wJCT0gbWF0cm94ZmJfZ3Bpb19zZXRzY2wsCisJLmdldHNkYQkJPSBtYXRyb3hmYl9ncGlvX2dldHNkYSwKKwkuZ2V0c2NsCQk9IG1hdHJveGZiX2dwaW9fZ2V0c2NsLAorCS51ZGVsYXkJCT0gMTAsCisJLnRpbWVvdXQJPSAxMDAsCiB9OwogCiBzdGF0aWMgaW50IGkyY19idXNfcmVnKHN0cnVjdCBpMmNfYml0X2FkYXB0ZXIqIGIsIHN0cnVjdCBtYXRyb3hfZmJfaW5mbyogbWluZm8sIApkaWZmIC0tZ2l0IGEvZHJpdmVycy92aWRlby9wdnIyZmIuYyBiL2RyaXZlcnMvdmlkZW8vcHZyMmZiLmMKaW5kZXggOTQwYmEyYi4uNzhkYzU5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9wdnIyZmIuYworKysgYi9kcml2ZXJzL3ZpZGVvL3B2cjJmYi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgaXNfYmxhbmtlZCA9IDA7CQkvKiBJcyB0aGUgc2NyZWVuIGJsYW5rZWQ/ICovCiAKICNpZmRlZiBDT05GSUdfU0hfU1RPUkVfUVVFVUVTCi1zdGF0aWMgc3RydWN0IHNxX21hcHBpbmcgKnB2cjJmYl9tYXA7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBwdnIyZmJfbWFwOwogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU0hfRE1BCkBAIC0yMTMsMTUgKzIxMywxNyBAQAogc3RhdGljIGludCBwdnIyX2luaXRfY2FibGUodm9pZCk7CiBzdGF0aWMgaW50IHB2cjJfZ2V0X3BhcmFtKGNvbnN0IHN0cnVjdCBwdnIyX3BhcmFtcyAqcCwgY29uc3QgY2hhciAqcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdmFsLCBpbnQgc2l6ZSk7CisjaWZkZWYgQ09ORklHX1NIX0RNQQogc3RhdGljIHNzaXplX3QgcHZyMmZiX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWYsCiAJCQkgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpOworI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgZmJfb3BzIHB2cjJmYl9vcHMgPSB7Ci0JLm93bmVyIAkJPSBUSElTX01PRFVMRSwKLQkuZmJfc2V0Y29scmVnIAk9IHB2cjJmYl9zZXRjb2xyZWcsCi0JLmZiX2JsYW5rIAk9IHB2cjJmYl9ibGFuaywKLQkuZmJfY2hlY2tfdmFyIAk9IHB2cjJmYl9jaGVja192YXIsCi0JLmZiX3NldF9wYXIgCT0gcHZyMmZiX3NldF9wYXIsCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5mYl9zZXRjb2xyZWcJPSBwdnIyZmJfc2V0Y29scmVnLAorCS5mYl9ibGFuawk9IHB2cjJmYl9ibGFuaywKKwkuZmJfY2hlY2tfdmFyCT0gcHZyMmZiX2NoZWNrX3ZhciwKKwkuZmJfc2V0X3Bhcgk9IHB2cjJmYl9zZXRfcGFyLAogI2lmZGVmIENPTkZJR19TSF9ETUEKIAkuZmJfd3JpdGUJPSBwdnIyZmJfd3JpdGUsCiAjZW5kaWYKQEAgLTc4Myw3ICs3ODUsNyBAQAogCQlnb3RvIG91dF9lcnI7CiAJfQogCi0JZmJfbWVtc2V0KCh1bnNpZ25lZCBsb25nKWZiX2luZm8tPnNjcmVlbl9iYXNlLCAwLCBwdnIyX2ZpeC5zbWVtX2xlbik7CisJZmJfbWVtc2V0KGZiX2luZm8tPnNjcmVlbl9iYXNlLCAwLCBwdnIyX2ZpeC5zbWVtX2xlbik7CiAKIAlwdnIyX2ZpeC55cGFuc3RlcAk9IG5vcGFuICA/IDAgOiAxOwogCXB2cjJfZml4Lnl3cmFwc3RlcAk9IG5vd3JhcCA/IDAgOiAxOwpAQCAtODIwLDcgKzgyMiw3IEBACiAJICAgICAgIG1vZGVtZW11c2VkID4+IDEwLCAodW5zaWduZWQgbG9uZykoZmJfaW5mby0+Zml4LnNtZW1fbGVuID4+IDEwKSk7CiAJcHJpbnRrKCJmYiVkOiBNb2RlICVkeCVkLSVkIHBpdGNoID0gJWxkIGNhYmxlOiAlcyB2aWRlbyBvdXRwdXQ6ICVzXG4iLCAKIAkgICAgICAgZmJfaW5mby0+bm9kZSwgZmJfaW5mby0+dmFyLnhyZXMsIGZiX2luZm8tPnZhci55cmVzLAotCSAgICAgICBmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsIAorCSAgICAgICBmYl9pbmZvLT52YXIuYml0c19wZXJfcGl4ZWwsCiAJICAgICAgIGdldF9saW5lX2xlbmd0aChmYl9pbmZvLT52YXIueHJlcywgZmJfaW5mby0+dmFyLmJpdHNfcGVyX3BpeGVsKSwKIAkgICAgICAgKGNoYXIgKilwdnIyX2dldF9wYXJhbShjYWJsZXMsIE5VTEwsIGNhYmxlX3R5cGUsIDMpLAogCSAgICAgICAoY2hhciAqKXB2cjJfZ2V0X3BhcmFtKG91dHB1dHMsIE5VTEwsIHZpZGVvX291dHB1dCwgMykpOwpAQCAtODI5LDEwICs4MzEsMTAgQEAKIAlwcmludGsoS0VSTl9OT1RJQ0UgImZiJWQ6IHJlZ2lzdGVyaW5nIHdpdGggU1EgQVBJXG4iLCBmYl9pbmZvLT5ub2RlKTsKIAogCXB2cjJmYl9tYXAgPSBzcV9yZW1hcChmYl9pbmZvLT5maXguc21lbV9zdGFydCwgZmJfaW5mby0+Zml4LnNtZW1fbGVuLAotCQkJICAgICAgZmJfaW5mby0+Zml4LmlkKTsKKwkJCSAgICAgIGZiX2luZm8tPmZpeC5pZCwgcGdwcm90X3ZhbChQQUdFX1NIQVJFRCkpOwogCiAJcHJpbnRrKEtFUk5fTk9USUNFICJmYiVkOiBNYXBwZWQgdmlkZW8gbWVtb3J5IHRvIFNRIGFkZHIgMHglbHhcbiIsCi0JICAgICAgIGZiX2luZm8tPm5vZGUsIHB2cjJmYl9tYXAtPnNxX2FkZHIpOworCSAgICAgICBmYl9pbmZvLT5ub2RlLCBwdnIyZmJfbWFwKTsKICNlbmRpZgogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYyBiL2RyaXZlcnMvdmlkZW8vc2F2YWdlL3NhdmFnZWZiLWkyYy5jCmluZGV4IGU4M2JlZmQuLmQ3ZDgxMGRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYworKysgYi9kcml2ZXJzL3ZpZGVvL3NhdmFnZS9zYXZhZ2VmYi1pMmMuYwpAQCAtMTQ4LDcgKzE0OCw2IEBACiAJCWNoYW4tPmFkYXB0ZXIuYWxnb19kYXRhCQk9ICZjaGFuLT5hbGdvOwogCQljaGFuLT5hZGFwdGVyLmRldi5wYXJlbnQJPSAmY2hhbi0+cGFyLT5wY2lkZXYtPmRldjsKIAkJY2hhbi0+YWxnby51ZGVsYXkJCT0gNDA7Ci0JCWNoYW4tPmFsZ28ubWRlbGF5ICAgICAgICAgICAgICAgPSA1OwogCQljaGFuLT5hbGdvLnRpbWVvdXQJCT0gMjA7CiAJCWNoYW4tPmFsZ28uZGF0YSAJCT0gY2hhbjsKIApkaWZmIC0tZ2l0IGEvZnMvOXAvdjlmcy5jIGIvZnMvOXAvdjlmcy5jCmluZGV4IDIyZjdjY2QuLjBmNjI4MDQgMTAwNjQ0Ci0tLSBhL2ZzLzlwL3Y5ZnMuYworKysgYi9mcy85cC92OWZzLmMKQEAgLTQ2MCw4ICs0NjAsMTAgQEAKIAogCXJldCA9IHY5ZnNfbXV4X2dsb2JhbF9pbml0KCk7CiAJaWYgKCFyZXQpCi0JCXJldCA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnY5ZnNfZnNfdHlwZSk7Ci0KKwkJcmV0dXJuIHJldDsKKwlyZXQgPSByZWdpc3Rlcl9maWxlc3lzdGVtKCZ2OWZzX2ZzX3R5cGUpOworCWlmICghcmV0KQorCQl2OWZzX211eF9nbG9iYWxfZXhpdCgpOwogCXJldHVybiByZXQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzLzlwL3Zmc19pbm9kZS5jIGIvZnMvOXAvdmZzX2lub2RlLmMKaW5kZXggZWFlNTBjOS4uNTI0MWM2MCAxMDA2NDQKLS0tIGEvZnMvOXAvdmZzX2lub2RlLmMKKysrIGIvZnMvOXAvdmZzX2lub2RlLmMKQEAgLTIwNCw3ICsyMDQsNiBAQAogCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKIAkJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOwotCQlpbm9kZS0+aV9ibGtzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCQlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCQlpbm9kZS0+aV9yZGV2ID0gMDsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwpAQCAtMjM0LDcgKzIzMyw3IEBACiAJCQlpbm9kZS0+aV9vcCA9ICZ2OWZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZESVI6Ci0JCQlpbm9kZS0+aV9ubGluaysrOworCQkJaW5jX25saW5rKGlub2RlKTsKIAkJCWlmKHY5c2VzLT5leHRlbmRlZCkKIAkJCQlpbm9kZS0+aV9vcCA9ICZ2OWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zX2V4dDsKIAkJCWVsc2UKQEAgLTk1MCw5ICs5NDksOCBAQAogCiAJaW5vZGUtPmlfc2l6ZSA9IHN0YXQtPmxlbmd0aDsKIAotCWlub2RlLT5pX2Jsa3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJaW5vZGUtPmlfYmxvY2tzID0KLQkgICAgKGlub2RlLT5pX3NpemUgKyBpbm9kZS0+aV9ibGtzaXplIC0gMSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CisJICAgIChpbm9kZS0+aV9zaXplICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4gc2ItPnNfYmxvY2tzaXplX2JpdHM7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZyBiL2ZzL0tjb25maWcKaW5kZXggYTI3MDAyNi4uMTQ1M2QyZCAxMDA2NDQKLS0tIGEvZnMvS2NvbmZpZworKysgYi9mcy9LY29uZmlnCkBAIC00LDYgKzQsOCBAQAogCiBtZW51ICJGaWxlIHN5c3RlbXMiCiAKK2lmIEJMT0NLCisKIGNvbmZpZyBFWFQyX0ZTCiAJdHJpc3RhdGUgIlNlY29uZCBleHRlbmRlZCBmcyBzdXBwb3J0IgogCWhlbHAKQEAgLTM5OSw2ICs0MDEsOCBAQAogCSAgSWYgeW91IGRvbid0IGtub3cgd2hldGhlciB5b3UgbmVlZCBpdCwgdGhlbiB5b3UgZG9uJ3QgbmVlZCBpdDoKIAkgIGFuc3dlciBOLgogCitlbmRpZgorCiBjb25maWcgSU5PVElGWQogCWJvb2wgIklub3RpZnkgZmlsZSBjaGFuZ2Ugbm90aWZpY2F0aW9uIHN1cHBvcnQiCiAJZGVmYXVsdCB5CkBAIC01MzAsNiArNTM0LDcgQEAKIAkgIElmIHlvdSB3YW50IHRvIGRldmVsb3AgYSB1c2Vyc3BhY2UgRlMsIG9yIGlmIHlvdSB3YW50IHRvIHVzZQogCSAgYSBmaWxlc3lzdGVtIGJhc2VkIG9uIEZVU0UsIGFuc3dlciBZIG9yIE0uCiAKK2lmIEJMT0NLCiBtZW51ICJDRC1ST00vRFZEIEZpbGVzeXN0ZW1zIgogCiBjb25maWcgSVNPOTY2MF9GUwpAQCAtNTk3LDcgKzYwMiw5IEBACiAJZGVwZW5kcyBvbiAoVURGX0ZTPW0gJiYgTkxTKSB8fCAoVURGX0ZTPXkgJiYgTkxTPXkpCiAKIGVuZG1lbnUKK2VuZGlmCiAKK2lmIEJMT0NLCiBtZW51ICJET1MvRkFUL05UIEZpbGVzeXN0ZW1zIgogCiBjb25maWcgRkFUX0ZTCkBAIC03ODIsNiArNzg5LDcgQEAKIAkgIEl0IGlzIHBlcmZlY3RseSBzYWZlIHRvIHNheSBOIGhlcmUuCiAKIGVuZG1lbnUKK2VuZGlmCiAKIG1lbnUgIlBzZXVkbyBmaWxlc3lzdGVtcyIKIApAQCAtODI2LDYgKzgzNCwyNSBAQAogICAgICAgICBoZWxwCiAgICAgICAgIEV4cG9ydHMgdGhlIGR1bXAgaW1hZ2Ugb2YgY3Jhc2hlZCBrZXJuZWwgaW4gRUxGIGZvcm1hdC4KIAorY29uZmlnIFBST0NfU1lTQ1RMCisJYm9vbCAiU3lzY3RsIHN1cHBvcnQgKC9wcm9jL3N5cykiIGlmIEVNQkVEREVECisJZGVwZW5kcyBvbiBQUk9DX0ZTCisJc2VsZWN0IFNZU0NUTAorCWRlZmF1bHQgeQorCS0tLWhlbHAtLS0KKwkgIFRoZSBzeXNjdGwgaW50ZXJmYWNlIHByb3ZpZGVzIGEgbWVhbnMgb2YgZHluYW1pY2FsbHkgY2hhbmdpbmcKKwkgIGNlcnRhaW4ga2VybmVsIHBhcmFtZXRlcnMgYW5kIHZhcmlhYmxlcyBvbiB0aGUgZmx5IHdpdGhvdXQgcmVxdWlyaW5nCisJICBhIHJlY29tcGlsZSBvZiB0aGUga2VybmVsIG9yIHJlYm9vdCBvZiB0aGUgc3lzdGVtLiAgVGhlIHByaW1hcnkKKwkgIGludGVyZmFjZSBpcyB0aHJvdWdoIC9wcm9jL3N5cy4gIElmIHlvdSBzYXkgWSBoZXJlIGEgdHJlZSBvZgorCSAgbW9kaWZpYWJsZSBzeXNjdGwgZW50cmllcyB3aWxsIGJlIGdlbmVyYXRlZCBiZW5lYXRoIHRoZQorICAgICAgICAgIC9wcm9jL3N5cyBkaXJlY3RvcnkuIFRoZXkgYXJlIGV4cGxhaW5lZCBpbiB0aGUgZmlsZXMKKwkgIGluIDxmaWxlOkRvY3VtZW50YXRpb24vc3lzY3RsLz4uICBOb3RlIHRoYXQgZW5hYmxpbmcgdGhpcworCSAgb3B0aW9uIHdpbGwgZW5sYXJnZSB0aGUga2VybmVsIGJ5IGF0IGxlYXN0IDggS0IuCisKKwkgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3MKKwkgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5CisJICBsaW1pdGVkIGluIG1lbW9yeS4KKwogY29uZmlnIFNZU0ZTCiAJYm9vbCAic3lzZnMgZmlsZSBzeXN0ZW0gc3VwcG9ydCIgaWYgRU1CRURERUQKIAlkZWZhdWx0IHkKQEAgLTg2Miw2ICs4ODksMTkgQEAKIAogCSAgU2VlIDxmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvdG1wZnMudHh0PiBmb3IgZGV0YWlscy4KIAorY29uZmlnIFRNUEZTX1BPU0lYX0FDTAorCWJvb2wgIlRtcGZzIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzIgorCWRlcGVuZHMgb24gVE1QRlMKKwlzZWxlY3QgR0VORVJJQ19BQ0wKKwloZWxwCisJICBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0cyAoQUNMcykgc3VwcG9ydCBwZXJtaXNzaW9ucyBmb3IgdXNlcnMgYW5kCisJICBncm91cHMgYmV5b25kIHRoZSBvd25lci9ncm91cC93b3JsZCBzY2hlbWUuCisKKwkgIFRvIGxlYXJuIG1vcmUgYWJvdXQgQWNjZXNzIENvbnRyb2wgTGlzdHMsIHZpc2l0IHRoZSBQT1NJWCBBQ0xzIGZvcgorCSAgTGludXggd2Vic2l0ZSA8aHR0cDovL2FjbC5iZXN0Yml0cy5hdC8+LgorCisJICBJZiB5b3UgZG9uJ3Qga25vdyB3aGF0IEFjY2VzcyBDb250cm9sIExpc3RzIGFyZSwgc2F5IE4uCisKIGNvbmZpZyBIVUdFVExCRlMKIAlib29sICJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnQiCiAJZGVwZW5kcyBYODYgfHwgSUE2NCB8fCBQUEM2NCB8fCBTUEFSQzY0IHx8IFNVUEVSSCB8fCBCUk9LRU4KQEAgLTkwNyw3ICs5NDcsNyBAQAogCiBjb25maWcgQURGU19GUwogCXRyaXN0YXRlICJBREZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJMT0NLICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFRoZSBBY29ybiBEaXNjIEZpbGluZyBTeXN0ZW0gaXMgdGhlIHN0YW5kYXJkIGZpbGUgc3lzdGVtIG9mIHRoZQogCSAgUmlzY09TIG9wZXJhdGluZyBzeXN0ZW0gd2hpY2ggcnVucyBvbiBBY29ybidzIEFSTS1iYXNlZCBSaXNjIFBDCkBAIC05MzUsNyArOTc1LDcgQEAKIAogY29uZmlnIEFGRlNfRlMKIAl0cmlzdGF0ZSAiQW1pZ2EgRkZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJMT0NLICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIFRoZSBGYXN0IEZpbGUgU3lzdGVtIChGRlMpIGlzIHRoZSBjb21tb24gZmlsZSBzeXN0ZW0gdXNlZCBvbiBoYXJkCiAJICBkaXNrcyBieSBBbWlnYSh0bSkgc3lzdGVtcyBzaW5jZSBBbWlnYU9TIFZlcnNpb24gMS4zICgzNC4yMCkuICBTYXkgWQpAQCAtOTU3LDcgKzk5Nyw3IEBACiAKIGNvbmZpZyBIRlNfRlMKIAl0cmlzdGF0ZSAiQXBwbGUgTWFjaW50b3NoIGZpbGUgc3lzdGVtIHN1cHBvcnQgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJMT0NLICYmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBOTFMKIAloZWxwCiAJICBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmUgYWJsZSB0byBtb3VudCBNYWNpbnRvc2gtZm9ybWF0dGVkCkBAIC05NzAsNiArMTAxMCw3IEBACiAKIGNvbmZpZyBIRlNQTFVTX0ZTCiAJdHJpc3RhdGUgIkFwcGxlIEV4dGVuZGVkIEhGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkxPQ0sKIAlzZWxlY3QgTkxTCiAJc2VsZWN0IE5MU19VVEY4CiAJaGVscApAQCAtOTgzLDcgKzEwMjQsNyBAQAogCiBjb25maWcgQkVGU19GUwogCXRyaXN0YXRlICJCZU9TIGZpbGUgc3lzdGVtIChCZUZTKSBzdXBwb3J0IChyZWFkIG9ubHkpIChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBCTE9DSyAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgTkxTCiAJaGVscAogCSAgVGhlIEJlT1MgRmlsZSBTeXN0ZW0gKEJlRlMpIGlzIHRoZSBuYXRpdmUgZmlsZSBzeXN0ZW0gb2YgQmUsIEluYydzCkBAIC0xMDEwLDcgKzEwNTEsNyBAQAogCiBjb25maWcgQkZTX0ZTCiAJdHJpc3RhdGUgIkJGUyBmaWxlIHN5c3RlbSBzdXBwb3J0IChFWFBFUklNRU5UQUwpIgotCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCisJZGVwZW5kcyBvbiBCTE9DSyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBCb290IEZpbGUgU3lzdGVtIChCRlMpIGlzIGEgZmlsZSBzeXN0ZW0gdXNlZCB1bmRlciBTQ08gVW5peFdhcmUgdG8KIAkgIGFsbG93IHRoZSBib290bG9hZGVyIGFjY2VzcyB0byB0aGUga2VybmVsIGltYWdlIGFuZCBvdGhlciBpbXBvcnRhbnQKQEAgLTEwMzIsNyArMTA3Myw3IEBACiAKIGNvbmZpZyBFRlNfRlMKIAl0cmlzdGF0ZSAiRUZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHJlYWQgb25seSkgKEVYUEVSSU1FTlRBTCkiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJMT0NLICYmIEVYUEVSSU1FTlRBTAogCWhlbHAKIAkgIEVGUyBpcyBhbiBvbGRlciBmaWxlIHN5c3RlbSB1c2VkIGZvciBub24tSVNPOTY2MCBDRC1ST01zIGFuZCBoYXJkCiAJICBkaXNrIHBhcnRpdGlvbnMgYnkgU0dJJ3MgSVJJWCBvcGVyYXRpbmcgc3lzdGVtIChJUklYIDYuMCBhbmQgbmV3ZXIKQEAgLTEwNDcsNyArMTA4OCw3IEBACiAKIGNvbmZpZyBKRkZTX0ZTCiAJdHJpc3RhdGUgIkpvdXJuYWxsaW5nIEZsYXNoIEZpbGUgU3lzdGVtIChKRkZTKSBzdXBwb3J0IgotCWRlcGVuZHMgb24gTVRECisJZGVwZW5kcyBvbiBNVEQgJiYgQkxPQ0sKIAloZWxwCiAJICBKRkZTIGlzIHRoZSBKb3VybmFsaW5nIEZsYXNoIEZpbGUgU3lzdGVtIGRldmVsb3BlZCBieSBBeGlzCiAJICBDb21tdW5pY2F0aW9ucyBpbiBTd2VkZW4sIGFpbWVkIGF0IHByb3ZpZGluZyBhIGNyYXNoL3Bvd2VyZG93bi1zYWZlCkBAIC0xMjMyLDYgKzEyNzMsNyBAQAogCiBjb25maWcgQ1JBTUZTCiAJdHJpc3RhdGUgIkNvbXByZXNzZWQgUk9NIGZpbGUgc3lzdGVtIHN1cHBvcnQgKGNyYW1mcykiCisJZGVwZW5kcyBvbiBCTE9DSwogCXNlbGVjdCBaTElCX0lORkxBVEUKIAloZWxwCiAJICBTYXlpbmcgWSBoZXJlIGluY2x1ZGVzIHN1cHBvcnQgZm9yIENyYW1GcyAoQ29tcHJlc3NlZCBST00gRmlsZQpAQCAtMTI1MSw2ICsxMjkzLDcgQEAKIAogY29uZmlnIFZYRlNfRlMKIAl0cmlzdGF0ZSAiRnJlZVZ4RlMgZmlsZSBzeXN0ZW0gc3VwcG9ydCAoVkVSSVRBUyBWeEZTKFRNKSBjb21wYXRpYmxlKSIKKwlkZXBlbmRzIG9uIEJMT0NLCiAJaGVscAogCSAgRnJlZVZ4RlMgaXMgYSBmaWxlIHN5c3RlbSBkcml2ZXIgdGhhdCBzdXBwb3J0IHRoZSBWRVJJVEFTIFZ4RlMoVE0pCiAJICBmaWxlIHN5c3RlbSBmb3JtYXQuICBWRVJJVEFTIFZ4RlMoVE0pIGlzIHRoZSBzdGFuZGFyZCBmaWxlIHN5c3RlbQpAQCAtMTI2OCw2ICsxMzExLDcgQEAKIAogY29uZmlnIEhQRlNfRlMKIAl0cmlzdGF0ZSAiT1MvMiBIUEZTIGZpbGUgc3lzdGVtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCTE9DSwogCWhlbHAKIAkgIE9TLzIgaXMgSUJNJ3Mgb3BlcmF0aW5nIHN5c3RlbSBmb3IgUEMncywgdGhlIHNhbWUgYXMgV2FycCwgYW5kIEhQRlMKIAkgIGlzIHRoZSBmaWxlIHN5c3RlbSB1c2VkIGZvciBvcmdhbml6aW5nIGZpbGVzIG9uIE9TLzIgaGFyZCBkaXNrCkBAIC0xMjg0LDYgKzEzMjgsNyBAQAogCiBjb25maWcgUU5YNEZTX0ZTCiAJdHJpc3RhdGUgIlFOWDQgZmlsZSBzeXN0ZW0gc3VwcG9ydCAocmVhZCBvbmx5KSIKKwlkZXBlbmRzIG9uIEJMT0NLCiAJaGVscAogCSAgVGhpcyBpcyB0aGUgZmlsZSBzeXN0ZW0gdXNlZCBieSB0aGUgcmVhbC10aW1lIG9wZXJhdGluZyBzeXN0ZW1zCiAJICBRTlggNCBhbmQgUU5YIDYgKHRoZSBsYXR0ZXIgaXMgYWxzbyBjYWxsZWQgUU5YIFJUUCkuCkBAIC0xMzExLDYgKzEzNTYsNyBAQAogCiBjb25maWcgU1lTVl9GUwogCXRyaXN0YXRlICJTeXN0ZW0gVi9YZW5peC9WNy9Db2hlcmVudCBmaWxlIHN5c3RlbSBzdXBwb3J0IgorCWRlcGVuZHMgb24gQkxPQ0sKIAloZWxwCiAJICBTQ08sIFhlbml4IGFuZCBDb2hlcmVudCBhcmUgY29tbWVyY2lhbCBVbml4IHN5c3RlbXMgZm9yIEludGVsCiAJICBtYWNoaW5lcywgYW5kIFZlcnNpb24gNyB3YXMgdXNlZCBvbiB0aGUgREVDIFBEUC0xMS4gU2F5aW5nIFkKQEAgLTEzNDksNiArMTM5NSw3IEBACiAKIGNvbmZpZyBVRlNfRlMKIAl0cmlzdGF0ZSAiVUZTIGZpbGUgc3lzdGVtIHN1cHBvcnQgKHJlYWQgb25seSkiCisJZGVwZW5kcyBvbiBCTE9DSwogCWhlbHAKIAkgIEJTRCBhbmQgZGVyaXZhdGUgdmVyc2lvbnMgb2YgVW5peCAoc3VjaCBhcyBTdW5PUywgRnJlZUJTRCwgTmV0QlNELAogCSAgT3BlbkJTRCBhbmQgTmVYVHN0ZXApIHVzZSBhIGZpbGUgc3lzdGVtIGNhbGxlZCBVRlMuIFNvbWUgU3lzdGVtIFYKQEAgLTE5MjEsMTMgKzE5NjgsMTkgQEAKIAogCSAgSWYgdW5zdXJlLCBzYXkgTi4KIAorY29uZmlnIEdFTkVSSUNfQUNMCisJYm9vbAorCXNlbGVjdCBGU19QT1NJWF9BQ0wKKwogZW5kbWVudQogCitpZiBCTE9DSwogbWVudSAiUGFydGl0aW9uIFR5cGVzIgogCiBzb3VyY2UgImZzL3BhcnRpdGlvbnMvS2NvbmZpZyIKIAogZW5kbWVudQorZW5kaWYKIAogc291cmNlICJmcy9ubHMvS2NvbmZpZyIKIApkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCA4OTEzNTQyLi44MTliMmE5IDEwMDY0NAotLS0gYS9mcy9NYWtlZmlsZQorKysgYi9mcy9NYWtlZmlsZQpAQCAtNSwxMiArNSwxOCBAQAogIyBSZXdyaXR0ZW4gdG8gdXNlIGxpc3RzIGluc3RlYWQgb2YgaWYtc3RhdGVtZW50cy4KICMgCiAKLW9iai15IDo9CW9wZW4ubyByZWFkX3dyaXRlLm8gZmlsZV90YWJsZS5vIGJ1ZmZlci5vICBiaW8ubyBzdXBlci5vIFwKLQkJYmxvY2tfZGV2Lm8gY2hhcl9kZXYubyBzdGF0Lm8gZXhlYy5vIHBpcGUubyBuYW1laS5vIGZjbnRsLm8gXAorb2JqLXkgOj0Jb3Blbi5vIHJlYWRfd3JpdGUubyBmaWxlX3RhYmxlLm8gc3VwZXIubyBcCisJCWNoYXJfZGV2Lm8gc3RhdC5vIGV4ZWMubyBwaXBlLm8gbmFtZWkubyBmY250bC5vIFwKIAkJaW9jdGwubyByZWFkZGlyLm8gc2VsZWN0Lm8gZmlmby5vIGxvY2tzLm8gZGNhY2hlLm8gaW5vZGUubyBcCiAJCWF0dHIubyBiYWRfaW5vZGUubyBmaWxlLm8gZmlsZXN5c3RlbXMubyBuYW1lc3BhY2UubyBhaW8ubyBcCi0JCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIG1wYWdlLm8gZGlyZWN0LWlvLm8gXAotCQlpb3ByaW8ubyBwbm9kZS5vIGRyb3BfY2FjaGVzLm8gc3BsaWNlLm8gc3luYy5vCisJCXNlcV9maWxlLm8geGF0dHIubyBsaWJmcy5vIGZzLXdyaXRlYmFjay5vIFwKKwkJcG5vZGUubyBkcm9wX2NhY2hlcy5vIHNwbGljZS5vIHN5bmMubyB1dGltZXMubworCitpZmVxICgkKENPTkZJR19CTE9DSykseSkKK29iai15ICs9CWJ1ZmZlci5vIGJpby5vIGJsb2NrX2Rldi5vIGRpcmVjdC1pby5vIG1wYWdlLm8gaW9wcmlvLm8KK2Vsc2UKK29iai15ICs9CW5vLWJsb2NrLm8KK2VuZGlmCiAKIG9iai0kKENPTkZJR19JTk9USUZZKQkJKz0gaW5vdGlmeS5vCiBvYmotJChDT05GSUdfSU5PVElGWV9VU0VSKQkrPSBpbm90aWZ5X3VzZXIubwpAQCAtMzUsNiArNDEsNyBAQAogb2JqLSQoQ09ORklHX0ZTX01CQ0FDSEUpCSs9IG1iY2FjaGUubwogb2JqLSQoQ09ORklHX0ZTX1BPU0lYX0FDTCkJKz0gcG9zaXhfYWNsLm8geGF0dHJfYWNsLm8KIG9iai0kKENPTkZJR19ORlNfQ09NTU9OKQkrPSBuZnNfY29tbW9uLworb2JqLSQoQ09ORklHX0dFTkVSSUNfQUNMKQkrPSBnZW5lcmljX2FjbC5vCiAKIG9iai0kKENPTkZJR19RVU9UQSkJCSs9IGRxdW90Lm8KIG9iai0kKENPTkZJR19RRk1UX1YxKQkJKz0gcXVvdGFfdjEubwpkaWZmIC0tZ2l0IGEvZnMvYWRmcy9maWxlLmMgYi9mcy9hZGZzL2ZpbGUuYwppbmRleCAxMDE0YjlmLi42MTAxZWE2IDEwMDY0NAotLS0gYS9mcy9hZGZzL2ZpbGUuYworKysgYi9mcy9hZGZzL2ZpbGUuYwpAQCAtMjcsMTAgKzI3LDEyIEBACiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWRmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLmZzeW5jCQk9IGZpbGVfZnN5bmMsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCiB9OwogCmRpZmYgLS1naXQgYS9mcy9hZGZzL2lub2RlLmMgYi9mcy9hZGZzL2lub2RlLmMKaW5kZXggNTM0ZjNlZS4uN2U3YTA0YiAxMDA2NDQKLS0tIGEvZnMvYWRmcy9pbm9kZS5jCisrKyBiL2ZzL2FkZnMvaW5vZGUuYwpAQCAtMjY5LDcgKzI2OSw2IEBACiAJaW5vZGUtPmlfaW5vCSA9IG9iai0+ZmlsZV9pZDsKIAlpbm9kZS0+aV9zaXplCSA9IG9iai0+c2l6ZTsKIAlpbm9kZS0+aV9ubGluawkgPSAyOwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzCSA9IChpbm9kZS0+aV9zaXplICsgc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KIAkJCSAgICBzYi0+c19ibG9ja3NpemVfYml0czsKIApkaWZmIC0tZ2l0IGEvZnMvYWRmcy9zdXBlci5jIGIvZnMvYWRmcy9zdXBlci5jCmluZGV4IDgyMDExMDEuLjlhZGUxMzkgMTAwNjQ0Ci0tLSBhL2ZzL2FkZnMvc3VwZXIuYworKysgYi9mcy9hZGZzL3N1cGVyLmMKQEAgLTI1MSw4ICsyNTEsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGFkZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYWRmc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShhZGZzX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZGZzX3NvcHMgPSB7CkBAIC0zMzksMTEgKzMzOCwxMCBAQAogCiAJc2ItPnNfZmxhZ3MgfD0gTVNfTk9ESVJBVElNRTsKIAotCWFzYiA9IGttYWxsb2Moc2l6ZW9mKCphc2IpLCBHRlBfS0VSTkVMKTsKKwlhc2IgPSBremFsbG9jKHNpemVvZigqYXNiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFhc2IpCiAJCXJldHVybiAtRU5PTUVNOwogCXNiLT5zX2ZzX2luZm8gPSBhc2I7Ci0JbWVtc2V0KGFzYiwgMCwgc2l6ZW9mKCphc2IpKTsKIAogCS8qIHNldCBkZWZhdWx0IG9wdGlvbnMgKi8KIAlhc2ItPnNfdWlkID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2FmZnMvZmlsZS5jIGIvZnMvYWZmcy9maWxlLmMKaW5kZXggM2RlODU5MC4uMDViNWUyMiAxMDA2NDQKLS0tIGEvZnMvYWZmcy9maWxlLmMKKysrIGIvZnMvYWZmcy9maWxlLmMKQEAgLTI3LDggKzI3LDEwIEBACiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYWZmc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAotCS53cml0ZQkJPSBnZW5lcmljX2ZpbGVfd3JpdGUsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkub3BlbgkJPSBhZmZzX2ZpbGVfb3BlbiwKIAkucmVsZWFzZQk9IGFmZnNfZmlsZV9yZWxlYXNlLApkaWZmIC0tZ2l0IGEvZnMvYWZmcy9zdXBlci5jIGIvZnMvYWZmcy9zdXBlci5jCmluZGV4IDE3MzUyMDEuLjVlYTcyYzMgMTAwNjQ0Ci0tLSBhL2ZzL2FmZnMvc3VwZXIuYworKysgYi9mcy9hZmZzL3N1cGVyLmMKQEAgLTEwOSw4ICsxMDksNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGFmZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiYWZmc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShhZmZzX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBhZmZzX3NvcHMgPSB7CkBAIC0yODAsMTEgKzI3OSwxMCBAQAogCXNiLT5zX29wICAgICAgICAgICAgICAgID0gJmFmZnNfc29wczsKIAlzYi0+c19mbGFncyB8PSBNU19OT0RJUkFUSU1FOwogCi0Jc2JpID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFmZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOworCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBhZmZzX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2ItPnNfZnNfaW5mbyA9IHNiaTsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2YoKnNiaSkpOwogCWluaXRfTVVURVgoJnNiaS0+c19ibWxvY2spOwogCiAJaWYgKCFwYXJzZV9vcHRpb25zKGRhdGEsJnVpZCwmZ2lkLCZpLCZyZXNlcnZlZCwmcm9vdF9ibG9jaywKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9maWxlLmMgYi9mcy9hZnMvZmlsZS5jCmluZGV4IDY3ZDY2MzQuLjJlOGM0MjYgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9maWxlLmMKKysrIGIvZnMvYWZzL2ZpbGUuYwpAQCAtMTYsNyArMTYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgInZvbHVtZS5oIgogI2luY2x1ZGUgInZub2RlLmgiCiAjaW5jbHVkZSA8cnhycGMvY2FsbC5oPgpAQCAtMzcsNyArMzYsNiBAQAogCiBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGFmc19mc19hb3BzID0gewogCS5yZWFkcGFnZQk9IGFmc19maWxlX3JlYWRwYWdlLAotCS5zeW5jX3BhZ2UJPSBibG9ja19zeW5jX3BhZ2UsCiAJLnNldF9wYWdlX2RpcnR5CT0gX19zZXRfcGFnZV9kaXJ0eV9ub2J1ZmZlcnMsCiAJLnJlbGVhc2VwYWdlCT0gYWZzX2ZpbGVfcmVsZWFzZXBhZ2UsCiAJLmludmFsaWRhdGVwYWdlCT0gYWZzX2ZpbGVfaW52YWxpZGF0ZXBhZ2UsCmRpZmYgLS1naXQgYS9mcy9hZnMvaW5vZGUuYyBiL2ZzL2Fmcy9pbm9kZS5jCmluZGV4IDRlYmIzMGEuLjZmMzc3NTQgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9pbm9kZS5jCisrKyBiL2ZzL2Fmcy9pbm9kZS5jCkBAIC03Miw3ICs3Miw2IEBACiAJaW5vZGUtPmlfY3RpbWUudHZfc2VjCT0gdm5vZGUtPnN0YXR1cy5tdGltZV9zZXJ2ZXI7CiAJaW5vZGUtPmlfY3RpbWUudHZfbnNlYwk9IDA7CiAJaW5vZGUtPmlfYXRpbWUJCT0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZTsKLQlpbm9kZS0+aV9ibGtzaXplCT0gUEFHRV9DQUNIRV9TSVpFOwogCWlub2RlLT5pX2Jsb2NrcwkJPSAwOwogCWlub2RlLT5pX3ZlcnNpb24JPSB2bm9kZS0+ZmlkLnVuaXF1ZTsKIAlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcwk9ICZhZnNfZnNfYW9wczsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy9wcm9jLmMgYi9mcy9hZnMvcHJvYy5jCmluZGV4IDEwMWQyMWIuLjg2NDYzZWMgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9wcm9jLmMKKysrIGIvZnMvYWZzL3Byb2MuYwpAQCAtNzc1LDYgKzc3NSw3IEBACiAgKiBmaXJzdCBpdGVtCiAgKi8KIHN0YXRpYyB2b2lkICphZnNfcHJvY19jZWxsX3NlcnZlcnNfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKl9wb3MpCisJX19hY3F1aXJlcyhtLT5wcml2YXRlLT5zdl9sb2NrKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKl9wOwogCXN0cnVjdCBhZnNfY2VsbCAqY2VsbCA9IG0tPnByaXZhdGU7CkBAIC04MjMsNiArODI0LDcgQEAKICAqIGNsZWFuIHVwIGFmdGVyIHJlYWRpbmcgZnJvbSB0aGUgY2VsbHMgbGlzdAogICovCiBzdGF0aWMgdm9pZCBhZnNfcHJvY19jZWxsX3NlcnZlcnNfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIHZvaWQgKnYpCisJX19yZWxlYXNlcyhwLT5wcml2YXRlLT5zdl9sb2NrKQogewogCXN0cnVjdCBhZnNfY2VsbCAqY2VsbCA9IHAtPnByaXZhdGU7CiAKZGlmZiAtLWdpdCBhL2ZzL2Fmcy92bG9jYXRpb24uYyBiL2ZzL2Fmcy92bG9jYXRpb24uYwppbmRleCAzMzFmNzMwLi43ODJlZTdjIDEwMDY0NAotLS0gYS9mcy9hZnMvdmxvY2F0aW9uLmMKKysrIGIvZnMvYWZzL3Zsb2NhdGlvbi5jCkBAIC0yODEsMTEgKzI4MSwxMCBAQAogCXNwaW5fdW5sb2NrKCZjZWxsLT52bF9neWxvY2spOwogCiAJLyogbm90IGluIHRoZSBjZWxsJ3MgaW4tbWVtb3J5IGxpc3RzIC0gY3JlYXRlIGEgbmV3IHJlY29yZCAqLwotCXZsb2NhdGlvbiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZnNfdmxvY2F0aW9uKSwgR0ZQX0tFUk5FTCk7CisJdmxvY2F0aW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFmc192bG9jYXRpb24pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXZsb2NhdGlvbikKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQltZW1zZXQodmxvY2F0aW9uLCAwLCBzaXplb2Yoc3RydWN0IGFmc192bG9jYXRpb24pKTsKIAlhdG9taWNfc2V0KCZ2bG9jYXRpb24tPnVzYWdlLCAxKTsKIAlJTklUX0xJU1RfSEVBRCgmdmxvY2F0aW9uLT5saW5rKTsKIAlyd2xvY2tfaW5pdCgmdmxvY2F0aW9uLT5sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL2Fmcy92b2x1bWUuYyBiL2ZzL2Fmcy92b2x1bWUuYwppbmRleCAwZmY0Yjg2Li43NjhjNmRiIDEwMDY0NAotLS0gYS9mcy9hZnMvdm9sdW1lLmMKKysrIGIvZnMvYWZzL3ZvbHVtZS5jCkBAIC0xODYsMTEgKzE4NiwxMCBAQAogCV9kZWJ1ZygiY3JlYXRpbmcgbmV3IHZvbHVtZSByZWNvcmQiKTsKIAogCXJldCA9IC1FTk9NRU07Ci0Jdm9sdW1lID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGFmc192b2x1bWUpLCBHRlBfS0VSTkVMKTsKKwl2b2x1bWUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYWZzX3ZvbHVtZSksIEdGUF9LRVJORUwpOwogCWlmICghdm9sdW1lKQogCQlnb3RvIGVycm9yX3VwOwogCi0JbWVtc2V0KHZvbHVtZSwgMCwgc2l6ZW9mKHN0cnVjdCBhZnNfdm9sdW1lKSk7CiAJYXRvbWljX3NldCgmdm9sdW1lLT51c2FnZSwgMSk7CiAJdm9sdW1lLT50eXBlCQk9IHR5cGU7CiAJdm9sdW1lLT50eXBlX2ZvcmNlCT0gZm9yY2U7CmRpZmYgLS1naXQgYS9mcy9haW8uYyBiL2ZzL2Fpby5jCmluZGV4IDk1MDYzMDEuLjJlMGQxNTAgMTAwNjQ0Ci0tLSBhL2ZzL2Fpby5jCisrKyBiL2ZzL2Fpby5jCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvYWlvX2FiaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAKICNkZWZpbmUgREVCVUcgMAogCkBAIC00MTQsNiArNDE1LDcgQEAKIAlyZXEtPmtpX3JldHJ5ID0gTlVMTDsKIAlyZXEtPmtpX2R0b3IgPSBOVUxMOwogCXJlcS0+cHJpdmF0ZSA9IE5VTEw7CisJcmVxLT5raV9pb3ZlYyA9IE5VTEw7CiAJSU5JVF9MSVNUX0hFQUQoJnJlcS0+a2lfcnVuX2xpc3QpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGNvbXBsZXRpb24gcXVldWUgaGFzIGVub3VnaCBmcmVlIHNwYWNlIHRvCkBAIC00NTksNiArNDYxLDggQEAKIAogCWlmIChyZXEtPmtpX2R0b3IpCiAJCXJlcS0+a2lfZHRvcihyZXEpOworCWlmIChyZXEtPmtpX2lvdmVjICE9ICZyZXEtPmtpX2lubGluZV92ZWMpCisJCWtmcmVlKHJlcS0+a2lfaW92ZWMpOwogCWttZW1fY2FjaGVfZnJlZShraW9jYl9jYWNoZXAsIHJlcSk7CiAJY3R4LT5yZXFzX2FjdGl2ZS0tOwogCkBAIC0xMzAwLDM5ICsxMzA0LDYwIEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLS8qCi0gKiBhaW9fcHtyZWFkLHdyaXRlfSBhcmUgdGhlIGRlZmF1bHQgIGtpX3JldHJ5IG1ldGhvZHMgZm9yCi0gKiBJT19DTURfUHtSRUFELFdSSVRFfS4gIFRoZXkgbWFpbnRhaW5zIGtpb2NiIHJldHJ5IHN0YXRlIGFyb3VuZCBwb3RlbnRpYWxseQotICogbXVsdGlwbGUgY2FsbHMgdG8gZl9vcC0+YWlvX3JlYWQoKS4gIFRoZXkgbG9vcCBhcm91bmQgcGFydGlhbCBwcm9ncmVzcwotICogaW5zdGVhZCBvZiByZXR1cm5pbmcgLUVJT0NCUkVUUlkgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgdGhlIG1lYW5zIHRvIGNhbGwKLSAqIGtpY2tfaW9jYigpLgotICovCi1zdGF0aWMgc3NpemVfdCBhaW9fcHJlYWQoc3RydWN0IGtpb2NiICppb2NiKQorc3RhdGljIHZvaWQgYWlvX2FkdmFuY2VfaW92ZWMoc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHJldCkKK3sKKwlzdHJ1Y3QgaW92ZWMgKmlvdiA9ICZpb2NiLT5raV9pb3ZlY1tpb2NiLT5raV9jdXJfc2VnXTsKKworCUJVR19PTihyZXQgPD0gMCk7CisKKwl3aGlsZSAoaW9jYi0+a2lfY3VyX3NlZyA8IGlvY2ItPmtpX25yX3NlZ3MgJiYgcmV0ID4gMCkgeworCQlzc2l6ZV90IHRoaXMgPSBtaW4oKHNzaXplX3QpaW92LT5pb3ZfbGVuLCByZXQpOworCQlpb3YtPmlvdl9iYXNlICs9IHRoaXM7CisJCWlvdi0+aW92X2xlbiAtPSB0aGlzOworCQlpb2NiLT5raV9sZWZ0IC09IHRoaXM7CisJCXJldCAtPSB0aGlzOworCQlpZiAoaW92LT5pb3ZfbGVuID09IDApIHsKKwkJCWlvY2ItPmtpX2N1cl9zZWcrKzsKKwkJCWlvdisrOworCQl9CisJfQorCisJLyogdGhlIGNhbGxlciBzaG91bGQgbm90IGhhdmUgZG9uZSBtb3JlIGlvIHRoYW4gd2hhdCBmaXQgaW4KKwkgKiB0aGUgcmVtYWluaW5nIGlvdmVjcyAqLworCUJVR19PTihyZXQgPiAwICYmIGlvY2ItPmtpX2xlZnQgPT0gMCk7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGFpb19yd192ZWN0X3JldHJ5KHN0cnVjdCBraW9jYiAqaW9jYikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CisJc3NpemVfdCAoKnJ3X29wKShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCisJCQkgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKIAlzc2l6ZV90IHJldCA9IDA7CisJdW5zaWduZWQgc2hvcnQgb3Bjb2RlOworCisJaWYgKChpb2NiLT5raV9vcGNvZGUgPT0gSU9DQl9DTURfUFJFQURWKSB8fAorCQkoaW9jYi0+a2lfb3Bjb2RlID09IElPQ0JfQ01EX1BSRUFEKSkgeworCQlyd19vcCA9IGZpbGUtPmZfb3AtPmFpb19yZWFkOworCQlvcGNvZGUgPSBJT0NCX0NNRF9QUkVBRFY7CisJfSBlbHNlIHsKKwkJcndfb3AgPSBmaWxlLT5mX29wLT5haW9fd3JpdGU7CisJCW9wY29kZSA9IElPQ0JfQ01EX1BXUklURVY7CisJfQogCiAJZG8gewotCQlyZXQgPSBmaWxlLT5mX29wLT5haW9fcmVhZChpb2NiLCBpb2NiLT5raV9idWYsCi0JCQlpb2NiLT5raV9sZWZ0LCBpb2NiLT5raV9wb3MpOwotCQkvKgotCQkgKiBDYW4ndCBqdXN0IGRlcGVuZCBvbiBpb2NiLT5raV9sZWZ0IHRvIGRldGVybWluZQotCQkgKiB3aGV0aGVyIHdlIGFyZSBkb25lLiBUaGlzIG1heSBoYXZlIGJlZW4gYSBzaG9ydCByZWFkLgotCQkgKi8KLQkJaWYgKHJldCA+IDApIHsKLQkJCWlvY2ItPmtpX2J1ZiArPSByZXQ7Ci0JCQlpb2NiLT5raV9sZWZ0IC09IHJldDsKLQkJfQorCQlyZXQgPSByd19vcChpb2NiLCAmaW9jYi0+a2lfaW92ZWNbaW9jYi0+a2lfY3VyX3NlZ10sCisJCQkgICAgaW9jYi0+a2lfbnJfc2VncyAtIGlvY2ItPmtpX2N1cl9zZWcsCisJCQkgICAgaW9jYi0+a2lfcG9zKTsKKwkJaWYgKHJldCA+IDApCisJCQlhaW9fYWR2YW5jZV9pb3ZlYyhpb2NiLCByZXQpOwogCi0JCS8qCi0JCSAqIEZvciBwaXBlcyBhbmQgc29ja2V0cyB3ZSByZXR1cm4gb25jZSB3ZSBoYXZlIHNvbWUgZGF0YTsgZm9yCi0JCSAqIHJlZ3VsYXIgZmlsZXMgd2UgcmV0cnkgdGlsbCB3ZSBjb21wbGV0ZSB0aGUgZW50aXJlIHJlYWQgb3IKLQkJICogZmluZCB0aGF0IHdlIGNhbid0IHJlYWQgYW55IG1vcmUgZGF0YSAoZS5nIHNob3J0IHJlYWRzKS4KLQkJICovCisJLyogcmV0cnkgYWxsIHBhcnRpYWwgd3JpdGVzLiAgcmV0cnkgcGFydGlhbCByZWFkcyBhcyBsb25nIGFzIGl0cyBhCisJICogcmVndWxhciBmaWxlLiAqLwogCX0gd2hpbGUgKHJldCA+IDAgJiYgaW9jYi0+a2lfbGVmdCA+IDAgJiYKLQkJICFTX0lTRklGTyhpbm9kZS0+aV9tb2RlKSAmJiAhU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpOworCQkgKG9wY29kZSA9PSBJT0NCX0NNRF9QV1JJVEVWIHx8CisJCSAgKCFTX0lTRklGTyhpbm9kZS0+aV9tb2RlKSAmJiAhU19JU1NPQ0soaW5vZGUtPmlfbW9kZSkpKSk7CiAKIAkvKiBUaGlzIG1lYW5zIHdlIG11c3QgaGF2ZSB0cmFuc2ZlcnJlZCBhbGwgdGhhdCB3ZSBjb3VsZCAqLwogCS8qIE5vIG5lZWQgdG8gcmV0cnkgYW55bW9yZSAqLwpAQCAtMTM0MiwyNyArMTM2Nyw2IEBACiAJcmV0dXJuIHJldDsKIH0KIAotLyogc2VlIGFpb19wcmVhZCgpICovCi1zdGF0aWMgc3NpemVfdCBhaW9fcHdyaXRlKHN0cnVjdCBraW9jYiAqaW9jYikKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7Ci0Jc3NpemVfdCByZXQgPSAwOwotCi0JZG8gewotCQlyZXQgPSBmaWxlLT5mX29wLT5haW9fd3JpdGUoaW9jYiwgaW9jYi0+a2lfYnVmLAotCQkJaW9jYi0+a2lfbGVmdCwgaW9jYi0+a2lfcG9zKTsKLQkJaWYgKHJldCA+IDApIHsKLQkJCWlvY2ItPmtpX2J1ZiArPSByZXQ7Ci0JCQlpb2NiLT5raV9sZWZ0IC09IHJldDsKLQkJfQotCX0gd2hpbGUgKHJldCA+IDAgJiYgaW9jYi0+a2lfbGVmdCA+IDApOwotCi0JaWYgKChyZXQgPT0gMCkgfHwgKGlvY2ItPmtpX2xlZnQgPT0gMCkpCi0JCXJldCA9IGlvY2ItPmtpX25ieXRlcyAtIGlvY2ItPmtpX2xlZnQ7Ci0KLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgc3NpemVfdCBhaW9fZmRzeW5jKHN0cnVjdCBraW9jYiAqaW9jYikKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CkBAIC0xMzgzLDYgKzEzODcsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgc3NpemVfdCBhaW9fc2V0dXBfdmVjdG9yZWRfcncoaW50IHR5cGUsIHN0cnVjdCBraW9jYiAqa2lvY2IpCit7CisJc3NpemVfdCByZXQ7CisKKwlyZXQgPSByd19jb3B5X2NoZWNrX3V2ZWN0b3IodHlwZSwgKHN0cnVjdCBpb3ZlYyBfX3VzZXIgKilraW9jYi0+a2lfYnVmLAorCQkJCSAgICBraW9jYi0+a2lfbmJ5dGVzLCAxLAorCQkJCSAgICAma2lvY2ItPmtpX2lubGluZV92ZWMsICZraW9jYi0+a2lfaW92ZWMpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIG91dDsKKworCWtpb2NiLT5raV9ucl9zZWdzID0ga2lvY2ItPmtpX25ieXRlczsKKwlraW9jYi0+a2lfY3VyX3NlZyA9IDA7CisJLyoga2lfbmJ5dGVzL2xlZnQgbm93IHJlZmxlY3QgYnl0ZXMgaW5zdGVhZCBvZiBzZWdzICovCisJa2lvY2ItPmtpX25ieXRlcyA9IHJldDsKKwlraW9jYi0+a2lfbGVmdCA9IHJldDsKKworCXJldCA9IDA7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHNzaXplX3QgYWlvX3NldHVwX3NpbmdsZV92ZWN0b3Ioc3RydWN0IGtpb2NiICpraW9jYikKK3sKKwlraW9jYi0+a2lfaW92ZWMgPSAma2lvY2ItPmtpX2lubGluZV92ZWM7CisJa2lvY2ItPmtpX2lvdmVjLT5pb3ZfYmFzZSA9IGtpb2NiLT5raV9idWY7CisJa2lvY2ItPmtpX2lvdmVjLT5pb3ZfbGVuID0ga2lvY2ItPmtpX2xlZnQ7CisJa2lvY2ItPmtpX25yX3NlZ3MgPSAxOworCWtpb2NiLT5raV9jdXJfc2VnID0gMDsKKwlraW9jYi0+a2lfbmJ5dGVzID0ga2lvY2ItPmtpX2xlZnQ7CisJcmV0dXJuIDA7Cit9CisKIC8qCiAgKiBhaW9fc2V0dXBfaW9jYjoKICAqCVBlcmZvcm1zIHRoZSBpbml0aWFsIGNoZWNrcyBhbmQgYWlvIHJldHJ5IG1ldGhvZApAQCAtMTQwNSw5ICsxNDQxLDEyIEBACiAJCXJldCA9IHNlY3VyaXR5X2ZpbGVfcGVybWlzc2lvbihmaWxlLCBNQVlfUkVBRCk7CiAJCWlmICh1bmxpa2VseShyZXQpKQogCQkJYnJlYWs7CisJCXJldCA9IGFpb19zZXR1cF9zaW5nbGVfdmVjdG9yKGtpb2NiKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOwogCQlyZXQgPSAtRUlOVkFMOwogCQlpZiAoZmlsZS0+Zl9vcC0+YWlvX3JlYWQpCi0JCQlraW9jYi0+a2lfcmV0cnkgPSBhaW9fcHJlYWQ7CisJCQlraW9jYi0+a2lfcmV0cnkgPSBhaW9fcndfdmVjdF9yZXRyeTsKIAkJYnJlYWs7CiAJY2FzZSBJT0NCX0NNRF9QV1JJVEU6CiAJCXJldCA9IC1FQkFERjsKQEAgLTE0MjAsOSArMTQ1OSw0MCBAQAogCQlyZXQgPSBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX1dSSVRFKTsKIAkJaWYgKHVubGlrZWx5KHJldCkpCiAJCQlicmVhazsKKwkJcmV0ID0gYWlvX3NldHVwX3NpbmdsZV92ZWN0b3Ioa2lvY2IpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CiAJCXJldCA9IC1FSU5WQUw7CiAJCWlmIChmaWxlLT5mX29wLT5haW9fd3JpdGUpCi0JCQlraW9jYi0+a2lfcmV0cnkgPSBhaW9fcHdyaXRlOworCQkJa2lvY2ItPmtpX3JldHJ5ID0gYWlvX3J3X3ZlY3RfcmV0cnk7CisJCWJyZWFrOworCWNhc2UgSU9DQl9DTURfUFJFQURWOgorCQlyZXQgPSAtRUJBREY7CisJCWlmICh1bmxpa2VseSghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1JFQUQpKSkKKwkJCWJyZWFrOworCQlyZXQgPSBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX1JFQUQpOworCQlpZiAodW5saWtlbHkocmV0KSkKKwkJCWJyZWFrOworCQlyZXQgPSBhaW9fc2V0dXBfdmVjdG9yZWRfcncoUkVBRCwga2lvY2IpOworCQlpZiAocmV0KQorCQkJYnJlYWs7CisJCXJldCA9IC1FSU5WQUw7CisJCWlmIChmaWxlLT5mX29wLT5haW9fcmVhZCkKKwkJCWtpb2NiLT5raV9yZXRyeSA9IGFpb19yd192ZWN0X3JldHJ5OworCQlicmVhazsKKwljYXNlIElPQ0JfQ01EX1BXUklURVY6CisJCXJldCA9IC1FQkFERjsKKwkJaWYgKHVubGlrZWx5KCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKSkKKwkJCWJyZWFrOworCQlyZXQgPSBzZWN1cml0eV9maWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX1dSSVRFKTsKKwkJaWYgKHVubGlrZWx5KHJldCkpCisJCQlicmVhazsKKwkJcmV0ID0gYWlvX3NldHVwX3ZlY3RvcmVkX3J3KFdSSVRFLCBraW9jYik7CisJCWlmIChyZXQpCisJCQlicmVhazsKKwkJcmV0ID0gLUVJTlZBTDsKKwkJaWYgKGZpbGUtPmZfb3AtPmFpb193cml0ZSkKKwkJCWtpb2NiLT5raV9yZXRyeSA9IGFpb19yd192ZWN0X3JldHJ5OwogCQlicmVhazsKIAljYXNlIElPQ0JfQ01EX0ZEU1lOQzoKIAkJcmV0ID0gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mcy9pbm9kZS5jIGIvZnMvYXV0b2ZzL2lub2RlLmMKaW5kZXggYWYyZWZiYi4uMmM5NzU5YmEgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mcy9pbm9kZS5jCkBAIC0xMjksMTAgKzEyOSw5IEBACiAJc3RydWN0IGF1dG9mc19zYl9pbmZvICpzYmk7CiAJaW50IG1pbnByb3RvLCBtYXhwcm90bzsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKKwlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCAhc2JpICkKIAkJZ290byBmYWlsX3VubG9jazsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2YoKnNiaSkpOwogCURQUklOVEsoKCJhdXRvZnM6IHN0YXJ0aW5nIHVwLCBzYmkgPSAlcFxuIixzYmkpKTsKIAogCXMtPnNfZnNfaW5mbyA9IHNiaTsKQEAgLTIxNyw3ICsyMTYsNiBAQAogCWlub2RlLT5pX25saW5rID0gMjsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKLQlpbm9kZS0+aV9ibGtzaXplID0gMTAyNDsKIAogCWlmICggaW5vID09IEFVVE9GU19ST09UX0lOTyApIHsKIAkJaW5vZGUtPmlfbW9kZSA9IFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTyB8IFNfSVdVU1I7CkBAIC0yNDIsNyArMjQwLDcgQEAKIAkJCiAJCWlub2RlLT5pX29wID0gJmF1dG9mc19zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CiAJCXNsID0gJnNiaS0+c3ltbGlua1tuXTsKLQkJaW5vZGUtPnUuZ2VuZXJpY19pcCA9IHNsOworCQlpbm9kZS0+aV9wcml2YXRlID0gc2w7CiAJCWlub2RlLT5pX21vZGUgPSBTX0lGTE5LIHwgU19JUldYVUdPOwogCQlpbm9kZS0+aV9tdGltZS50dl9zZWMgPSBpbm9kZS0+aV9jdGltZS50dl9zZWMgPSBzbC0+bXRpbWU7CiAJCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSBpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mcy9yb290LmMgYi9mcy9hdXRvZnMvcm9vdC5jCmluZGV4IDljYWMwOGQuLjM2OGExYzMgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mcy9yb290LmMKKysrIGIvZnMvYXV0b2ZzL3Jvb3QuYwpAQCAtNDE0LDcgKzQxNCw3IEBACiAKIAlkZW50cnktPmRfdGltZSA9ICh1bnNpZ25lZCBsb25nKShzdHJ1Y3QgYXV0b2ZzX2Rpcl9lbnQgKilOVUxMOwogCWF1dG9mc19oYXNoX2RlbGV0ZShlbnQpOwotCWRpci0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoZGlyKTsKIAlkX2Ryb3AoZGVudHJ5KTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCWVudC0+ZGVudHJ5ID0gZGVudHJ5OwogCWF1dG9mc19oYXNoX2luc2VydChkaCxlbnQpOwogCi0JZGlyLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlnZXQoZGlyLT5pX3NiLGlubykpOwogCXVubG9ja19rZXJuZWwoKTsKIApkaWZmIC0tZ2l0IGEvZnMvYXV0b2ZzL3N5bWxpbmsuYyBiL2ZzL2F1dG9mcy9zeW1saW5rLmMKaW5kZXggNTJlODc3Mi4uYzc0ZjJlYiAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzL3N5bWxpbmsuYworKysgYi9mcy9hdXRvZnMvc3ltbGluay5jCkBAIC0xNSw3ICsxNSw3IEBACiAvKiBOb3RoaW5nIHRvIHJlbGVhc2UuLiAqLwogc3RhdGljIHZvaWQgKmF1dG9mc19mb2xsb3dfbGluayhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCWNoYXIgKnM9KChzdHJ1Y3QgYXV0b2ZzX3N5bWxpbmsgKilkZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcCktPmRhdGE7CisJY2hhciAqcz0oKHN0cnVjdCBhdXRvZnNfc3ltbGluayAqKWRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlKS0+ZGF0YTsKIAluZF9zZXRfbGluayhuZCwgcyk7CiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9mcy9hdXRvZnM0L2lub2RlLmMgYi9mcy9hdXRvZnM0L2lub2RlLmMKaW5kZXggMTFhNmE5YS4uODAwY2U4NyAxMDA2NDQKLS0tIGEvZnMvYXV0b2ZzNC9pbm9kZS5jCisrKyBiL2ZzL2F1dG9mczQvaW5vZGUuYwpAQCAtNDQ3LDcgKzQ0Nyw2IEBACiAJCWlub2RlLT5pX3VpZCA9IDA7CiAJCWlub2RlLT5pX2dpZCA9IDA7CiAJfQotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAKZGlmZiAtLWdpdCBhL2ZzL2F1dG9mczQvcm9vdC5jIGIvZnMvYXV0b2ZzNC9yb290LmMKaW5kZXggNTEwMGY5ODQuLmMxNDkzNTIgMTAwNjQ0Ci0tLSBhL2ZzL2F1dG9mczQvcm9vdC5jCisrKyBiL2ZzL2F1dG9mczQvcm9vdC5jCkBAIC0xMzcsNyArMTM3LDkgQEAKIAkJbmQuZmxhZ3MgPSBMT09LVVBfRElSRUNUT1JZOwogCQlyZXQgPSAoZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpKGRlbnRyeSwgJm5kKTsKIAotCQlpZiAoIXJldCkgeworCQlpZiAocmV0IDw9IDApIHsKKwkJCWlmIChyZXQgPCAwKQorCQkJCXN0YXR1cyA9IHJldDsKIAkJCWRjYWNoZV9kaXJfY2xvc2UoaW5vZGUsIGZpbGUpOwogCQkJZ290byBvdXQ7CiAJCX0KQEAgLTI3OSw5ICsyODEsNiBAQAogCiAJCURQUklOVEsoIm1vdW50IGRvbmUgc3RhdHVzPSVkIiwgc3RhdHVzKTsKIAotCQlpZiAoc3RhdHVzICYmIGRlbnRyeS0+ZF9pbm9kZSkKLQkJCXJldHVybiBzdGF0dXM7IC8qIFRyeSB0byBnZXQgdGhlIGtlcm5lbCB0byBpbnZhbGlkYXRlIHRoaXMgZGVudHJ5ICovCi0KIAkJLyogVHVybiB0aGlzIGludG8gYSByZWFsIG5lZ2F0aXZlIGRlbnRyeT8gKi8KIAkJaWYgKHN0YXR1cyA9PSAtRU5PRU5UKSB7CiAJCQlzcGluX2xvY2soJmRlbnRyeS0+ZF9sb2NrKTsKQEAgLTM1Nyw3ICszNTYsNyBAQAogCSAqIGRvbid0IHRyeSB0byBtb3VudCBpdCBhZ2Fpbi4KIAkgKi8KIAlzcGluX2xvY2soJmRjYWNoZV9sb2NrKTsKLQlpZiAoIWRfbW91bnRwb2ludChkZW50cnkpICYmIGxpc3RfZW1wdHkoJmRlbnRyeS0+ZF9zdWJkaXJzKSkgeworCWlmICghZF9tb3VudHBvaW50KGRlbnRyeSkgJiYgX19zaW1wbGVfZW1wdHkoZGVudHJ5KSkgewogCQlzcGluX3VubG9jaygmZGNhY2hlX2xvY2spOwogCiAJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIDApOwpAQCAtNDAwLDEzICszOTksMjMgQEAKIAlzdHJ1Y3QgYXV0b2ZzX3NiX2luZm8gKnNiaSA9IGF1dG9mczRfc2JpKGRpci0+aV9zYik7CiAJaW50IG96X21vZGUgPSBhdXRvZnM0X296X21vZGUoc2JpKTsKIAlpbnQgZmxhZ3MgPSBuZCA/IG5kLT5mbGFncyA6IDA7Ci0JaW50IHN0YXR1cyA9IDA7CisJaW50IHN0YXR1cyA9IDE7CiAKIAkvKiBQZW5kaW5nIGRlbnRyeSAqLwogCWlmIChhdXRvZnM0X2lzcGVuZGluZyhkZW50cnkpKSB7Ci0JCWlmICghb3pfbW9kZSkKLQkJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIGZsYWdzKTsKLQkJcmV0dXJuICFzdGF0dXM7CisJCS8qIFRoZSBkYWVtb24gbmV2ZXIgY2F1c2VzIGEgbW91bnQgdG8gdHJpZ2dlciAqLworCQlpZiAob3pfbW9kZSkKKwkJCXJldHVybiAxOworCisJCS8qCisJCSAqIEEgemVybyBzdGF0dXMgaXMgc3VjY2VzcyBvdGhlcndpc2Ugd2UgaGF2ZSBhCisJCSAqIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisJCSAqLworCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5LCBmbGFncyk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCQlyZXR1cm4gMTsKKworCQlyZXR1cm4gc3RhdHVzOwogCX0KIAogCS8qIE5lZ2F0aXZlIGRlbnRyeS4uIGludmFsaWRhdGUgaWYgIm9sZCIgKi8KQEAgLTQyMSw5ICs0MzAsMTkgQEAKIAkJRFBSSU5USygiZGVudHJ5PSVwICUuKnMsIGVtcHR5ZGlyIiwKIAkJCSBkZW50cnksIGRlbnRyeS0+ZF9uYW1lLmxlbiwgZGVudHJ5LT5kX25hbWUubmFtZSk7CiAJCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7Ci0JCWlmICghb3pfbW9kZSkKLQkJCXN0YXR1cyA9IHRyeV90b19maWxsX2RlbnRyeShkZW50cnksIGZsYWdzKTsKLQkJcmV0dXJuICFzdGF0dXM7CisJCS8qIFRoZSBkYWVtb24gbmV2ZXIgY2F1c2VzIGEgbW91bnQgdG8gdHJpZ2dlciAqLworCQlpZiAob3pfbW9kZSkKKwkJCXJldHVybiAxOworCisJCS8qCisJCSAqIEEgemVybyBzdGF0dXMgaXMgc3VjY2VzcyBvdGhlcndpc2Ugd2UgaGF2ZSBhCisJCSAqIG5lZ2F0aXZlIGVycm9yIGNvZGUuCisJCSAqLworCQlzdGF0dXMgPSB0cnlfdG9fZmlsbF9kZW50cnkoZGVudHJ5LCBmbGFncyk7CisJCWlmIChzdGF0dXMgPT0gMCkKKwkJCXJldHVybiAxOworCisJCXJldHVybiBzdGF0dXM7CiAJfQogCXNwaW5fdW5sb2NrKCZkY2FjaGVfbG9jayk7CiAKQEAgLTUxOCw2ICs1MzcsOSBAQAogCQkJICAgIHJldHVybiBFUlJfUFRSKC1FUkVTVEFSVE5PSU5UUik7CiAJCQl9CiAJCX0KKwkJc3Bpbl9sb2NrKCZkZW50cnktPmRfbG9jayk7CisJCWRlbnRyeS0+ZF9mbGFncyAmPSB+RENBQ0hFX0FVVE9GU19QRU5ESU5HOworCQlzcGluX3VubG9jaygmZGVudHJ5LT5kX2xvY2spOwogCX0KIAogCS8qCkBAIC02MTYsNyArNjM4LDcgQEAKIAlkcHV0KGluby0+ZGVudHJ5KTsKIAogCWRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID0gMDsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAlkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CiAKQEAgLTY1MSwxMCArNjczLDEwIEBACiAJfQogCWRwdXQoaW5vLT5kZW50cnkpOwogCWRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplID0gMDsKLQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAlpZiAoZGlyLT5pX25saW5rKQotCQlkaXItPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhkaXIpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC02OTEsNyArNzEzLDcgQEAKIAlpZiAocF9pbm8gJiYgZGVudHJ5LT5kX3BhcmVudCAhPSBkZW50cnkpCiAJCWF0b21pY19pbmMoJnBfaW5vLT5jb3VudCk7CiAJaW5vLT5pbm9kZSA9IGlub2RlOwotCWRpci0+aV9ubGluaysrOworCWluY19ubGluayhkaXIpOwogCWRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZnMvYmFkX2lub2RlLmMgYi9mcy9iYWRfaW5vZGUuYwppbmRleCA4MDU5OWFlLi4zNGU2ZDdiIDEwMDY0NAotLS0gYS9mcy9iYWRfaW5vZGUuYworKysgYi9mcy9iYWRfaW5vZGUuYwpAQCAtNDAsOCArNDAsNiBAQAogCS5haW9fZnN5bmMJPSBFSU9fRVJST1IsCiAJLmZhc3luYwkJPSBFSU9fRVJST1IsCiAJLmxvY2sJCT0gRUlPX0VSUk9SLAotCS5yZWFkdgkJPSBFSU9fRVJST1IsCi0JLndyaXRldgkJPSBFSU9fRVJST1IsCiAJLnNlbmRmaWxlCT0gRUlPX0VSUk9SLAogCS5zZW5kcGFnZQk9IEVJT19FUlJPUiwKIAkuZ2V0X3VubWFwcGVkX2FyZWEgPSBFSU9fRVJST1IsCmRpZmYgLS1naXQgYS9mcy9iZWZzL2xpbnV4dmZzLmMgYi9mcy9iZWZzL2xpbnV4dmZzLmMKaW5kZXggNTBjZmNhNS4uNTcwMjBjNyAxMDA2NDQKLS0tIGEvZnMvYmVmcy9saW51eHZmcy5jCisrKyBiL2ZzL2JlZnMvbGludXh2ZnMuYwpAQCAtMzY1LDcgKzM2NSw2IEBACiAJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7ICAgLyogbG93ZXIgMTYgYml0cyBhcmUgbm90IGEgdGltZSAqLwkKIAlpbm9kZS0+aV9jdGltZSA9IGlub2RlLT5pX210aW1lOwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWU7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IGJlZnNfc2ItPmJsb2NrX3NpemU7CiAKIAliZWZzX2luby0+aV9pbm9kZV9udW0gPSBmc3J1bl90b19jcHUoc2IsIHJhd19pbm9kZS0+aW5vZGVfbnVtKTsKIAliZWZzX2luby0+aV9wYXJlbnQgPSBmc3J1bl90b19jcHUoc2IsIHJhd19pbm9kZS0+cGFyZW50KTsKQEAgLTQ0Niw5ICs0NDUsNyBAQAogc3RhdGljIHZvaWQKIGJlZnNfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShiZWZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0VSUiAiYmVmc19kZXN0cm95X2lub2RlY2FjaGU6ICIKLQkJICAgICAgICJub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KGJlZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9kaXIuYyBiL2ZzL2Jmcy9kaXIuYwppbmRleCAyNmZhZDk2Li5hNjUwZjFkIDEwMDY0NAotLS0gYS9mcy9iZnMvZGlyLmMKKysrIGIvZnMvYmZzL2Rpci5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5mc3VpZDsKIAlpbm9kZS0+aV9naWQgPSAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSA/IGRpci0+aV9naWQgOiBjdXJyZW50LT5mc2dpZDsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWlub2RlLT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsa3NpemUgPSAwOworCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJaW5vZGUtPmlfb3AgPSAmYmZzX2ZpbGVfaW5vcHM7CiAJaW5vZGUtPmlfZm9wID0gJmJmc19maWxlX29wZXJhdGlvbnM7CiAJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmYmZzX2FvcHM7CkBAIC0xMTcsOCArMTE3LDcgQEAKIAogCWVyciA9IGJmc19hZGRfZW50cnkoZGlyLCBkZW50cnktPmRfbmFtZS5uYW1lLCBkZW50cnktPmRfbmFtZS5sZW4sIGlub2RlLT5pX2lubyk7CiAJaWYgKGVycikgewotCQlpbm9kZS0+aV9ubGluay0tOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQoaW5vZGUpOwogCQlpcHV0KGlub2RlKTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gZXJyOwpAQCAtMTY0LDcgKzE2Myw3IEBACiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIGVycjsKIAl9Ci0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIAlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CkBAIC0xOTYsOSArMTk1LDggQEAKIAltYXJrX2J1ZmZlcl9kaXJ0eShiaCk7CiAJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAltYXJrX2lub2RlX2RpcnR5KGRpcik7Ci0JaW5vZGUtPmlfbmxpbmstLTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJZXJyb3IgPSAwOwogCiBvdXRfYnJlbHNlOgpAQCAtMjQ5LDkgKzI0Nyw4IEBACiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CiAJaWYgKG5ld19pbm9kZSkgewotCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJbWFya19pbm9kZV9kaXJ0eShuZXdfaW5vZGUpOworCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCX0KIAltYXJrX2J1ZmZlcl9kaXJ0eShvbGRfYmgpOwogCWVycm9yID0gMDsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9maWxlLmMgYi9mcy9iZnMvZmlsZS5jCmluZGV4IDNkNWFjYTIuLmE5MTY0YTggMTAwNjQ0Ci0tLSBhL2ZzL2Jmcy9maWxlLmMKKysrIGIvZnMvYmZzL2ZpbGUuYwpAQCAtMTksOCArMTksMTAgQEAKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBiZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZAkJPSBnZW5lcmljX2ZpbGVfcmVhZCwKLQkud3JpdGUJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAogfTsKZGlmZiAtLWdpdCBhL2ZzL2Jmcy9pbm9kZS5jIGIvZnMvYmZzL2lub2RlLmMKaW5kZXggY2Y3NGYzZC4uZWQyN2ZmYiAxMDA2NDQKLS0tIGEvZnMvYmZzL2lub2RlLmMKKysrIGIvZnMvYmZzL2lub2RlLmMKQEAgLTc2LDcgKzc2LDYgQEAKIAlpbm9kZS0+aV9zaXplID0gQkZTX0ZJTEVTSVpFKGRpKTsKIAlpbm9kZS0+aV9ibG9ja3MgPSBCRlNfRklMRUJMT0NLUyhkaSk7CiAgICAgICAgIGlmIChpbm9kZS0+aV9zaXplIHx8IGlub2RlLT5pX2Jsb2NrcykgZHByaW50ZigiUmVnaXN0ZXJlZCBpbm9kZSB3aXRoICVsbGQgc2l6ZSwgJWxkIGJsb2Nrc1xuIiwgaW5vZGUtPmlfc2l6ZSwgaW5vZGUtPmlfYmxvY2tzKTsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwogCWlub2RlLT5pX2F0aW1lLnR2X3NlYyA9ICBsZTMyX3RvX2NwdShkaS0+aV9hdGltZSk7CiAJaW5vZGUtPmlfbXRpbWUudHZfc2VjID0gIGxlMzJfdG9fY3B1KGRpLT5pX210aW1lKTsKIAlpbm9kZS0+aV9jdGltZS50dl9zZWMgPSAgbGUzMl90b19jcHUoZGktPmlfY3RpbWUpOwpAQCAtMjY4LDggKzI2Nyw3IEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3koYmZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gImJmc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShiZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGJmc19zb3BzID0gewpAQCAtMzExLDExICszMDksMTAgQEAKIAl1bnNpZ25lZCBpLCBpbWFwX2xlbjsKIAlzdHJ1Y3QgYmZzX3NiX2luZm8gKiBpbmZvOwogCi0JaW5mbyA9IGttYWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFpbmZvKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzLT5zX2ZzX2luZm8gPSBpbmZvOwotCW1lbXNldChpbmZvLCAwLCBzaXplb2YoKmluZm8pKTsKIAogCXNiX3NldF9ibG9ja3NpemUocywgQkZTX0JTSVpFKTsKIApAQCAtMzM4LDEwICszMzUsOSBAQAogCQkJKyBCRlNfUk9PVF9JTk8gLSAxOwogCiAJaW1hcF9sZW4gPSBpbmZvLT5zaV9sYXN0aS84ICsgMTsKLQlpbmZvLT5zaV9pbWFwID0ga21hbGxvYyhpbWFwX2xlbiwgR0ZQX0tFUk5FTCk7CisJaW5mby0+c2lfaW1hcCA9IGt6YWxsb2MoaW1hcF9sZW4sIEdGUF9LRVJORUwpOwogCWlmICghaW5mby0+c2lfaW1hcCkKIAkJZ290byBvdXQ7Ci0JbWVtc2V0KGluZm8tPnNpX2ltYXAsIDAsIGltYXBfbGVuKTsKIAlmb3IgKGk9MDsgaTxCRlNfUk9PVF9JTk87IGkrKykgCiAJCXNldF9iaXQoaSwgaW5mby0+c2lfaW1hcCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9hb3V0LmMgYi9mcy9iaW5mbXRfYW91dC5jCmluZGV4IGYzMTIxMDMuLjUxN2UxMTEgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9hb3V0LmMKKysrIGIvZnMvYmluZm10X2FvdXQuYwpAQCAtMjc4LDYgKzI3OCwxMyBAQAogCQlyZXR1cm4gLUVOT0VYRUM7CiAJfQogCisJLyoKKwkgKiBSZXF1aXJlcyBhIG1tYXAgaGFuZGxlci4gVGhpcyBwcmV2ZW50cyBwZW9wbGUgZnJvbSB1c2luZyBhLm91dAorCSAqIGFzIHBhcnQgb2YgYW4gZXhwbG9pdCBhdHRhY2sgYWdhaW5zdCAvcHJvYy1yZWxhdGVkIHZ1bG5lcmFiaWxpdGllcy4KKwkgKi8KKwlpZiAoIWJwcm0tPmZpbGUtPmZfb3AgfHwgIWJwcm0tPmZpbGUtPmZfb3AtPm1tYXApCisJCXJldHVybiAtRU5PRVhFQzsKKwogCWZkX29mZnNldCA9IE5fVFhUT0ZGKGV4KTsKIAogCS8qIENoZWNrIGluaXRpYWwgbGltaXRzLiBUaGlzIGF2b2lkcyBsZXR0aW5nIHBlb3BsZSBjaXJjdW12ZW50CkBAIC00NzYsNiArNDgzLDEzIEBACiAJCWdvdG8gb3V0OwogCX0KIAorCS8qCisJICogUmVxdWlyZXMgYSBtbWFwIGhhbmRsZXIuIFRoaXMgcHJldmVudHMgcGVvcGxlIGZyb20gdXNpbmcgYS5vdXQKKwkgKiBhcyBwYXJ0IG9mIGFuIGV4cGxvaXQgYXR0YWNrIGFnYWluc3QgL3Byb2MtcmVsYXRlZCB2dWxuZXJhYmlsaXRpZXMuCisJICovCisJaWYgKCFmaWxlLT5mX29wIHx8ICFmaWxlLT5mX29wLT5tbWFwKQorCQlnb3RvIG91dDsKKwogCWlmIChOX0ZMQUdTKGV4KSkKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9lbGYuYyBiL2ZzL2JpbmZtdF9lbGYuYwppbmRleCBkZmQ4Y2ZiLi4wNjQzNWYzNiAxMDA2NDQKLS0tIGEvZnMvYmluZm10X2VsZi5jCisrKyBiL2ZzL2JpbmZtdF9lbGYuYwpAQCAtNDYsNyArNDYsNiBAQAogc3RhdGljIGludCBsb2FkX2VsZl9iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwogc3RhdGljIGludCBsb2FkX2VsZl9saWJyYXJ5KHN0cnVjdCBmaWxlICopOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgZWxmX21hcCAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywgc3RydWN0IGVsZl9waGRyICosIGludCwgaW50KTsKLWV4dGVybiBpbnQgZHVtcF9mcHUgKHN0cnVjdCBwdF9yZWdzICosIGVsZl9mcHJlZ3NldF90ICopOwogCiAjaWZuZGVmIGVsZl9hZGRyX3QKICNkZWZpbmUgZWxmX2FkZHJfdCB1bnNpZ25lZCBsb25nCkBAIC0xMDM4LDEwICsxMDM3LDggQEAKIG91dF9mcmVlX2ZpbGU6CiAJc3lzX2Nsb3NlKGVsZl9leGVjX2ZpbGVubyk7CiBvdXRfZnJlZV9maDoKLQlpZiAoZmlsZXMpIHsKLQkJcHV0X2ZpbGVzX3N0cnVjdChjdXJyZW50LT5maWxlcyk7Ci0JCWN1cnJlbnQtPmZpbGVzID0gZmlsZXM7Ci0JfQorCWlmIChmaWxlcykKKwkJcmVzZXRfZmlsZXNfc3RydWN0KGN1cnJlbnQsIGZpbGVzKTsKIG91dF9mcmVlX3BoOgogCWtmcmVlKGVsZl9waGRhdGEpOwogCWdvdG8gb3V0OwpAQCAtMTE1NCwxMSArMTE1MSwyMyBAQAogCiBzdGF0aWMgaW50IGR1bXBfc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZikKIHsKLQlpZiAoZmlsZS0+Zl9vcC0+bGxzZWVrKSB7Ci0JCWlmIChmaWxlLT5mX29wLT5sbHNlZWsoZmlsZSwgb2ZmLCAwKSAhPSBvZmYpCisJaWYgKGZpbGUtPmZfb3AtPmxsc2VlayAmJiBmaWxlLT5mX29wLT5sbHNlZWsgIT0gbm9fbGxzZWVrKSB7CisJCWlmIChmaWxlLT5mX29wLT5sbHNlZWsoZmlsZSwgb2ZmLCAxKSAhPSBvZmYpCiAJCQlyZXR1cm4gMDsKLQl9IGVsc2UKLQkJZmlsZS0+Zl9wb3MgPSBvZmY7CisJfSBlbHNlIHsKKwkJY2hhciAqYnVmID0gKGNoYXIgKilnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKQorCQkJcmV0dXJuIDA7CisJCXdoaWxlIChvZmYgPiAwKSB7CisJCQl1bnNpZ25lZCBsb25nIG4gPSBvZmY7CisJCQlpZiAobiA+IFBBR0VfU0laRSkKKwkJCQluID0gUEFHRV9TSVpFOworCQkJaWYgKCFkdW1wX3dyaXRlKGZpbGUsIGJ1ZiwgbikpCisJCQkJcmV0dXJuIDA7CisJCQlvZmYgLT0gbjsKKwkJfQorCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVmKTsKKwl9CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTEyMDYsMzAgKzEyMTUsMzUgQEAKIAlyZXR1cm4gc3o7CiB9CiAKLSNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAotCWRvIHsgaWYgKCFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIHJldHVybiAwOyB9IHdoaWxlKDApCi0jZGVmaW5lIERVTVBfU0VFSyhvZmYpCVwKLQlkbyB7IGlmICghZHVtcF9zZWVrKGZpbGUsIChvZmYpKSkgcmV0dXJuIDA7IH0gd2hpbGUoMCkKKyNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBuciwgZm9mZnNldCkJXAorCWRvIHsgaWYgKCFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIHJldHVybiAwOyAqZm9mZnNldCArPSAobnIpOyB9IHdoaWxlKDApCiAKLXN0YXRpYyBpbnQgd3JpdGVub3RlKHN0cnVjdCBtZW1lbGZub3RlICptZW4sIHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBhbGlnbmZpbGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqZm9mZnNldCkKK3sKKwljaGFyIGJ1Zls0XSA9IHsgMCwgfTsKKwlEVU1QX1dSSVRFKGJ1Ziwgcm91bmR1cCgqZm9mZnNldCwgNCkgLSAqZm9mZnNldCwgZm9mZnNldCk7CisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyBpbnQgd3JpdGVub3RlKHN0cnVjdCBtZW1lbGZub3RlICptZW4sIHN0cnVjdCBmaWxlICpmaWxlLAorCQkJbG9mZl90ICpmb2Zmc2V0KQogewogCXN0cnVjdCBlbGZfbm90ZSBlbjsKLQogCWVuLm5fbmFtZXN6ID0gc3RybGVuKG1lbi0+bmFtZSkgKyAxOwogCWVuLm5fZGVzY3N6ID0gbWVuLT5kYXRhc3o7CiAJZW4ubl90eXBlID0gbWVuLT50eXBlOwogCi0JRFVNUF9XUklURSgmZW4sIHNpemVvZihlbikpOwotCURVTVBfV1JJVEUobWVuLT5uYW1lLCBlbi5uX25hbWVzeik7Ci0JLyogWFhYIC0gY2FzdCBmcm9tIGxvbmcgbG9uZyB0byBsb25nIHRvIGF2b2lkIG5lZWQgZm9yIGxpYmdjYy5hICovCi0JRFVNUF9TRUVLKHJvdW5kdXAoKHVuc2lnbmVkIGxvbmcpZmlsZS0+Zl9wb3MsIDQpKTsJLyogWFhYICovCi0JRFVNUF9XUklURShtZW4tPmRhdGEsIG1lbi0+ZGF0YXN6KTsKLQlEVU1QX1NFRUsocm91bmR1cCgodW5zaWduZWQgbG9uZylmaWxlLT5mX3BvcywgNCkpOwkvKiBYWFggKi8KKwlEVU1QX1dSSVRFKCZlbiwgc2l6ZW9mKGVuKSwgZm9mZnNldCk7CisJRFVNUF9XUklURShtZW4tPm5hbWUsIGVuLm5fbmFtZXN6LCBmb2Zmc2V0KTsKKwlpZiAoIWFsaWduZmlsZShmaWxlLCBmb2Zmc2V0KSkKKwkJcmV0dXJuIDA7CisJRFVNUF9XUklURShtZW4tPmRhdGEsIG1lbi0+ZGF0YXN6LCBmb2Zmc2V0KTsKKwlpZiAoIWFsaWduZmlsZShmaWxlLCBmb2Zmc2V0KSkKKwkJcmV0dXJuIDA7CiAKIAlyZXR1cm4gMTsKIH0KICN1bmRlZiBEVU1QX1dSSVRFCi0jdW5kZWYgRFVNUF9TRUVLCiAKICNkZWZpbmUgRFVNUF9XUklURShhZGRyLCBucikJXAogCWlmICgoc2l6ZSArPSAobnIpKSA+IGxpbWl0IHx8ICFkdW1wX3dyaXRlKGZpbGUsIChhZGRyKSwgKG5yKSkpIFwKQEAgLTE0MjksNyArMTQ0Myw3IEBACiAJaW50IGk7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IGVsZmhkciAqZWxmID0gTlVMTDsKLQlsb2ZmX3Qgb2Zmc2V0ID0gMCwgZGF0YW9mZjsKKwlsb2ZmX3Qgb2Zmc2V0ID0gMCwgZGF0YW9mZiwgZm9mZnNldDsKIAl1bnNpZ25lZCBsb25nIGxpbWl0ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXS5ybGltX2N1cjsKIAlpbnQgbnVtbm90ZTsKIAlzdHJ1Y3QgbWVtZWxmbm90ZSAqbm90ZXMgPSBOVUxMOwpAQCAtMTQ4MSwyMCArMTQ5NSwxOSBAQAogCiAJaWYgKHNpZ25yKSB7CiAJCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdG1wOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWRvX2VhY2hfdGhyZWFkKGcscCkKIAkJCWlmIChjdXJyZW50LT5tbSA9PSBwLT5tbSAmJiBjdXJyZW50ICE9IHApIHsKIAkJCQl0bXAgPSBremFsbG9jKHNpemVvZigqdG1wKSwgR0ZQX0FUT01JQyk7CiAJCQkJaWYgKCF0bXApIHsKLQkJCQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQkJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCQkJZ290byBjbGVhbnVwOwogCQkJCX0KLQkJCQlJTklUX0xJU1RfSEVBRCgmdG1wLT5saXN0KTsKIAkJCQl0bXAtPnRocmVhZCA9IHA7CiAJCQkJbGlzdF9hZGQoJnRtcC0+bGlzdCwgJnRocmVhZF9saXN0KTsKIAkJCX0KIAkJd2hpbGVfZWFjaF90aHJlYWQoZyxwKTsKLQkJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJbGlzdF9mb3JfZWFjaCh0LCAmdGhyZWFkX2xpc3QpIHsKIAkJCXN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cyAqdG1wOwogCQkJaW50IHN6OwpAQCAtMTU3Myw3ICsxNTg2LDggQEAKIAkJRFVNUF9XUklURSgmcGhkciwgc2l6ZW9mKHBoZHIpKTsKIAl9CiAKLQkvKiBQYWdlLWFsaWduIGR1bXBlZCBkYXRhICovCisJZm9mZnNldCA9IG9mZnNldDsKKwogCWRhdGFvZmYgPSBvZmZzZXQgPSByb3VuZHVwKG9mZnNldCwgRUxGX0VYRUNfUEFHRVNJWkUpOwogCiAJLyogV3JpdGUgcHJvZ3JhbSBoZWFkZXJzIGZvciBzZWdtZW50cyBkdW1wICovCkBAIC0xNTk4LDYgKzE2MTIsNyBAQAogCQlwaGRyLnBfYWxpZ24gPSBFTEZfRVhFQ19QQUdFU0laRTsKIAogCQlEVU1QX1dSSVRFKCZwaGRyLCBzaXplb2YocGhkcikpOworCQlmb2Zmc2V0ICs9IHNpemVvZihwaGRyKTsKIAl9CiAKICNpZmRlZiBFTEZfQ09SRV9XUklURV9FWFRSQV9QSERSUwpAQCAtMTYwNiw3ICsxNjIxLDcgQEAKIAogIAkvKiB3cml0ZSBvdXQgdGhlIG5vdGVzIHNlY3Rpb24gKi8KIAlmb3IgKGkgPSAwOyBpIDwgbnVtbm90ZTsgaSsrKQotCQlpZiAoIXdyaXRlbm90ZShub3RlcyArIGksIGZpbGUpKQorCQlpZiAoIXdyaXRlbm90ZShub3RlcyArIGksIGZpbGUsICZmb2Zmc2V0KSkKIAkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCiAJLyogd3JpdGUgb3V0IHRoZSB0aHJlYWQgc3RhdHVzIG5vdGVzIHNlY3Rpb24gKi8KQEAgLTE2MTUsMTEgKzE2MzAsMTIgQEAKIAkJCQlsaXN0X2VudHJ5KHQsIHN0cnVjdCBlbGZfdGhyZWFkX3N0YXR1cywgbGlzdCk7CiAKIAkJZm9yIChpID0gMDsgaSA8IHRtcC0+bnVtX25vdGVzOyBpKyspCi0JCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSkpCisJCQlpZiAoIXdyaXRlbm90ZSgmdG1wLT5ub3Rlc1tpXSwgZmlsZSwgJmZvZmZzZXQpKQogCQkJCWdvdG8gZW5kX2NvcmVkdW1wOwogCX0KLSAKLQlEVU1QX1NFRUsoZGF0YW9mZik7CisKKwkvKiBBbGlnbiB0byBwYWdlICovCisJRFVNUF9TRUVLKGRhdGFvZmYgLSBmb2Zmc2V0KTsKIAogCWZvciAodm1hID0gY3VycmVudC0+bW0tPm1tYXA7IHZtYSAhPSBOVUxMOyB2bWEgPSB2bWEtPnZtX25leHQpIHsKIAkJdW5zaWduZWQgbG9uZyBhZGRyOwpAQCAtMTYzNSwxMCArMTY1MSwxMCBAQAogCiAJCQlpZiAoZ2V0X3VzZXJfcGFnZXMoY3VycmVudCwgY3VycmVudC0+bW0sIGFkZHIsIDEsIDAsIDEsCiAJCQkJCQkmcGFnZSwgJnZtYSkgPD0gMCkgewotCQkJCURVTVBfU0VFSyhmaWxlLT5mX3BvcyArIFBBR0VfU0laRSk7CisJCQkJRFVNUF9TRUVLKFBBR0VfU0laRSk7CiAJCQl9IGVsc2UgewogCQkJCWlmIChwYWdlID09IFpFUk9fUEFHRShhZGRyKSkgewotCQkJCQlEVU1QX1NFRUsoZmlsZS0+Zl9wb3MgKyBQQUdFX1NJWkUpOworCQkJCQlEVU1QX1NFRUsoUEFHRV9TSVpFKTsKIAkJCQl9IGVsc2UgewogCQkJCQl2b2lkICprYWRkcjsKIAkJCQkJZmx1c2hfY2FjaGVfcGFnZSh2bWEsIGFkZHIsCkBAIC0xNjYyLDEzICsxNjc4LDYgQEAKIAlFTEZfQ09SRV9XUklURV9FWFRSQV9EQVRBOwogI2VuZGlmCiAKLQlpZiAoZmlsZS0+Zl9wb3MgIT0gb2Zmc2V0KSB7Ci0JCS8qIFNhbml0eSBjaGVjayAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZWxmX2NvcmVfZHVtcDogZmlsZS0+Zl9wb3MgKCVMZCkgIT0gb2Zmc2V0ICglTGQpXG4iLAotCQkgICAgICAgZmlsZS0+Zl9wb3MsIG9mZnNldCk7Ci0JfQotCiBlbmRfY29yZWR1bXA6CiAJc2V0X2ZzKGZzKTsKIApkaWZmIC0tZ2l0IGEvZnMvYmluZm10X2VsZl9mZHBpYy5jIGIvZnMvYmluZm10X2VsZl9mZHBpYy5jCmluZGV4IDJmMzM2NTguLmY4NmQ1YzkgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9lbGZfZmRwaWMuYworKysgYi9mcy9iaW5mbXRfZWxmX2ZkcGljLmMKQEAgLTE1OTcsMjAgKzE1OTcsMTkgQEAKIAogCWlmIChzaWducikgewogCQlzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMgKnRtcDsKLQkJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfbG9jaygpOwogCQlkb19lYWNoX3RocmVhZChnLHApCiAJCQlpZiAoY3VycmVudC0+bW0gPT0gcC0+bW0gJiYgY3VycmVudCAhPSBwKSB7CiAJCQkJdG1wID0ga3phbGxvYyhzaXplb2YoKnRtcCksIEdGUF9BVE9NSUMpOwogCQkJCWlmICghdG1wKSB7Ci0JCQkJCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQkJCWdvdG8gY2xlYW51cDsKIAkJCQl9Ci0JCQkJSU5JVF9MSVNUX0hFQUQoJnRtcC0+bGlzdCk7CiAJCQkJdG1wLT50aHJlYWQgPSBwOwogCQkJCWxpc3RfYWRkKCZ0bXAtPmxpc3QsICZ0aHJlYWRfbGlzdCk7CiAJCQl9CiAJCXdoaWxlX2VhY2hfdGhyZWFkKGcscCk7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWxpc3RfZm9yX2VhY2godCwgJnRocmVhZF9saXN0KSB7CiAJCQlzdHJ1Y3QgZWxmX3RocmVhZF9zdGF0dXMgKnRtcDsKIAkJCWludCBzejsKZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jCmluZGV4IDM0ZWJiYzEuLjE3MTNjNDggMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKKysrIGIvZnMvYmluZm10X21pc2MuYwpAQCAtMjE1LDEwICsyMTUsOCBAQAogCWJwcm0tPmludGVycF9mbGFncyA9IDA7CiAJYnBybS0+aW50ZXJwX2RhdGEgPSAwOwogX3Vuc2hhcmU6Ci0JaWYgKGZpbGVzKSB7Ci0JCXB1dF9maWxlc19zdHJ1Y3QoY3VycmVudC0+ZmlsZXMpOwotCQljdXJyZW50LT5maWxlcyA9IGZpbGVzOwotCX0KKwlpZiAoZmlsZXMpCisJCXJlc2V0X2ZpbGVzX3N0cnVjdChjdXJyZW50LCBmaWxlcyk7CiAJZ290byBfcmV0OwogfQogCkBAIC01MDcsNyArNTA1LDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IDA7CiAJCWlub2RlLT5pX2dpZCA9IDA7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9CiAJCQljdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOwpAQCAtNTE3LDcgKzUxNCw3IEBACiAKIHN0YXRpYyB2b2lkIGJtX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0Ja2ZyZWUoaW5vZGUtPnUuZ2VuZXJpY19pcCk7CisJa2ZyZWUoaW5vZGUtPmlfcHJpdmF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGtpbGxfbm9kZShOb2RlICplKQpAQCAtNTQ1LDcgKzU0Miw3IEBACiBzdGF0aWMgc3NpemVfdAogYm1fZW50cnlfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKnBwb3MpCiB7Ci0JTm9kZSAqZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXA7CisJTm9kZSAqZSA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAJbG9mZl90IHBvcyA9ICpwcG9zOwogCXNzaXplX3QgcmVzOwogCWNoYXIgKnBhZ2U7CkBAIC01NzksNyArNTc2LDcgQEAKIAkJCQlzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290OwotCU5vZGUgKmUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+dS5nZW5lcmljX2lwOworCU5vZGUgKmUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCWludCByZXMgPSBwYXJzZV9jb21tYW5kKGJ1ZmZlciwgY291bnQpOwogCiAJc3dpdGNoIChyZXMpIHsKQEAgLTY0Niw3ICs2NDMsNyBAQAogCX0KIAogCWUtPmRlbnRyeSA9IGRnZXQoZGVudHJ5KTsKLQlpbm9kZS0+dS5nZW5lcmljX2lwID0gZTsKKwlpbm9kZS0+aV9wcml2YXRlID0gZTsKIAlpbm9kZS0+aV9mb3AgPSAmYm1fZW50cnlfb3BlcmF0aW9uczsKIAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9iaW8uYyBiL2ZzL2Jpby5jCmluZGV4IDZhMGI5YWQuLjhmOTNlOTMgMTAwNjQ0Ci0tLSBhL2ZzL2Jpby5jCisrKyBiL2ZzL2Jpby5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBKZW5zIEF4Ym9lIDxheGJvZUBzdXNlLmRlPgorICogQ29weXJpZ2h0IChDKSAyMDAxIEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKQEAgLTExNDIsNyArMTE0Miw3IEBACiAJCXN0cnVjdCBiaW92ZWNfc2xhYiAqYnAgPSBidmVjX3NsYWJzICsgaTsKIAkJbWVtcG9vbF90ICoqYnZwID0gYnMtPmJ2ZWNfcG9vbHMgKyBpOwogCi0JCWlmIChpID49IHNjYWxlKQorCQlpZiAocG9vbF9lbnRyaWVzID4gMSAmJiBpID49IHNjYWxlKQogCQkJcG9vbF9lbnRyaWVzID4+PSAxOwogCiAJCSpidnAgPSBtZW1wb29sX2NyZWF0ZV9zbGFiX3Bvb2wocG9vbF9lbnRyaWVzLCBicC0+c2xhYik7CmRpZmYgLS1naXQgYS9mcy9ibG9ja19kZXYuYyBiL2ZzL2Jsb2NrX2Rldi5jCmluZGV4IDA0NWY5ODguLmJjOGYyN2MgMTAwNjQ0Ci0tLSBhL2ZzL2Jsb2NrX2Rldi5jCisrKyBiL2ZzL2Jsb2NrX2Rldi5jCkBAIC0xNywxMSArMTcsMTMgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9tb3VudC5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlICJpbnRlcm5hbC5oIgogCiBzdHJ1Y3QgYmRldl9pbm9kZSB7CiAJc3RydWN0IGJsb2NrX2RldmljZSBiZGV2OwpAQCAtNTQzLDExICs1NDUsMTEgQEAKIAkJcmV0dXJuIGtvYmplY3RfZ2V0KGJkZXYtPmJkX2Rpc2stPmhvbGRlcl9kaXIpOwogfQogCi1zdGF0aWMgdm9pZCBhZGRfc3ltbGluayhzdHJ1Y3Qga29iamVjdCAqZnJvbSwgc3RydWN0IGtvYmplY3QgKnRvKQorc3RhdGljIGludCBhZGRfc3ltbGluayhzdHJ1Y3Qga29iamVjdCAqZnJvbSwgc3RydWN0IGtvYmplY3QgKnRvKQogewogCWlmICghZnJvbSB8fCAhdG8pCi0JCXJldHVybjsKLQlzeXNmc19jcmVhdGVfbGluayhmcm9tLCB0bywga29iamVjdF9uYW1lKHRvKSk7CisJCXJldHVybiAwOworCXJldHVybiBzeXNmc19jcmVhdGVfbGluayhmcm9tLCB0bywga29iamVjdF9uYW1lKHRvKSk7CiB9CiAKIHN0YXRpYyB2b2lkIGRlbF9zeW1saW5rKHN0cnVjdCBrb2JqZWN0ICpmcm9tLCBzdHJ1Y3Qga29iamVjdCAqdG8pCkBAIC02NDgsMzAgKzY1MCwzOCBAQAogICogSWYgdGhlcmUgaXMgbm8gbWF0Y2hpbmcgZW50cnkgd2l0aCBAYm8gaW4gQGJkZXYtPmJkX2hvbGRlcl9saXN0LAogICogYWRkIEBibyB0byB0aGUgbGlzdCwgY3JlYXRlIHN5bWxpbmtzLgogICoKLSAqIFJldHVybnMgMSBpZiBAYm8gd2FzIGFkZGVkIHRvIHRoZSBsaXN0LgotICogUmV0dXJucyAwIGlmIEBibyB3YXNuJ3QgdXNlZCBieSBhbnkgcmVhc29uIGFuZCBzaG91bGQgYmUgZnJlZWQuCisgKiBSZXR1cm5zIDAgaWYgc3ltbGlua3MgYXJlIGNyZWF0ZWQgb3IgYWxyZWFkeSB0aGVyZS4KKyAqIFJldHVybnMgLXZlIGlmIHNvbWV0aGluZyBmYWlscyBhbmQgQGJvIGNhbiBiZSBmcmVlZC4KICAqLwogc3RhdGljIGludCBhZGRfYmRfaG9sZGVyKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHN0cnVjdCBiZF9ob2xkZXIgKmJvKQogewogCXN0cnVjdCBiZF9ob2xkZXIgKnRtcDsKKwlpbnQgcmV0OwogCiAJaWYgKCFibykKLQkJcmV0dXJuIDA7CisJCXJldHVybiAtRUlOVkFMOwogCiAJbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZiZGV2LT5iZF9ob2xkZXJfbGlzdCwgbGlzdCkgewogCQlpZiAodG1wLT5zZGlyID09IGJvLT5zZGlyKSB7CiAJCQl0bXAtPmNvdW50Kys7CisJCQkvKiBXZSd2ZSBhbHJlYWR5IGRvbmUgd2hhdCB3ZSBuZWVkIHRvIGRvIGhlcmUuICovCisJCQlmcmVlX2JkX2hvbGRlcihibyk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAogCWlmICghYmRfaG9sZGVyX2dyYWJfZGlycyhiZGV2LCBibykpCi0JCXJldHVybiAwOworCQlyZXR1cm4gLUVCVVNZOwogCi0JYWRkX3N5bWxpbmsoYm8tPnNkaXIsIGJvLT5zZGV2KTsKLQlhZGRfc3ltbGluayhiby0+aGRpciwgYm8tPmhkZXYpOwotCWxpc3RfYWRkX3RhaWwoJmJvLT5saXN0LCAmYmRldi0+YmRfaG9sZGVyX2xpc3QpOwotCXJldHVybiAxOworCXJldCA9IGFkZF9zeW1saW5rKGJvLT5zZGlyLCBiby0+c2Rldik7CisJaWYgKHJldCA9PSAwKSB7CisJCXJldCA9IGFkZF9zeW1saW5rKGJvLT5oZGlyLCBiby0+aGRldik7CisJCWlmIChyZXQpCisJCQlkZWxfc3ltbGluayhiby0+c2RpciwgYm8tPnNkZXYpOworCX0KKwlpZiAocmV0ID09IDApCisJCWxpc3RfYWRkX3RhaWwoJmJvLT5saXN0LCAmYmRldi0+YmRfaG9sZGVyX2xpc3QpOworCXJldHVybiByZXQ7CiB9CiAKIC8qKgpAQCAtNzQxLDcgKzc1MSw5IEBACiAKIAltdXRleF9sb2NrX25lc3RlZCgmYmRldi0+YmRfbXV0ZXgsIEJEX01VVEVYX1BBUlRJVElPTik7CiAJcmVzID0gYmRfY2xhaW0oYmRldiwgaG9sZGVyKTsKLQlpZiAocmVzIHx8ICFhZGRfYmRfaG9sZGVyKGJkZXYsIGJvKSkKKwlpZiAocmVzID09IDApCisJCXJlcyA9IGFkZF9iZF9ob2xkZXIoYmRldiwgYm8pOworCWlmIChyZXMpCiAJCWZyZWVfYmRfaG9sZGVyKGJvKTsKIAltdXRleF91bmxvY2soJmJkZXYtPmJkX211dGV4KTsKIApAQCAtMTAyMSw3ICsxMDMzLDcgQEAKIAkJCQlyZXNjYW5fcGFydGl0aW9ucyhiZGV2LT5iZF9kaXNrLCBiZGV2KTsKIAkJfSBlbHNlIHsKIAkJCW11dGV4X2xvY2tfbmVzdGVkKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgsCi0JCQkJCSAgQkRfTVVURVhfUEFSVElUSU9OKTsKKwkJCQkJICBCRF9NVVRFWF9XSE9MRSk7CiAJCQliZGV2LT5iZF9jb250YWlucy0+YmRfcGFydF9jb3VudCsrOwogCQkJbXV0ZXhfdW5sb2NrKCZiZGV2LT5iZF9jb250YWlucy0+YmRfbXV0ZXgpOwogCQl9CkBAIC0xMTQyLDIyICsxMTU0LDYgQEAKIAlyZXR1cm4gYmxrZGV2X3B1dChiZGV2KTsKIH0KIAotc3RhdGljIHNzaXplX3QgYmxrZGV2X2ZpbGVfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGlvdmVjIGxvY2FsX2lvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLCAuaW92X2xlbiA9IGNvdW50IH07Ci0KLQlyZXR1cm4gZ2VuZXJpY19maWxlX3dyaXRlX25vbG9jayhmaWxlLCAmbG9jYWxfaW92LCAxLCBwcG9zKTsKLX0KLQotc3RhdGljIHNzaXplX3QgYmxrZGV2X2ZpbGVfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCQkgICBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCi17Ci0Jc3RydWN0IGlvdmVjIGxvY2FsX2lvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLCAuaW92X2xlbiA9IGNvdW50IH07Ci0KLQlyZXR1cm4gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwgJmlvY2ItPmtpX3Bvcyk7Ci19Ci0KIHN0YXRpYyBsb25nIGJsb2NrX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXJldHVybiBibGtkZXZfaW9jdGwoZmlsZS0+Zl9tYXBwaW5nLT5ob3N0LCBmaWxlLCBjbWQsIGFyZyk7CkBAIC0xMTc3LDE4ICsxMTczLDE2IEBACiAJLm9wZW4JCT0gYmxrZGV2X29wZW4sCiAJLnJlbGVhc2UJPSBibGtkZXZfY2xvc2UsCiAJLmxsc2VlawkJPSBibG9ja19sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGJsa2Rldl9maWxlX3dyaXRlLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKICAgCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKLSAgCS5haW9fd3JpdGUJPSBibGtkZXZfZmlsZV9haW9fd3JpdGUsIAorICAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5mc3luYwkJPSBibG9ja19mc3luYywKIAkudW5sb2NrZWRfaW9jdGwJPSBibG9ja19pb2N0bCwKICNpZmRlZiBDT05GSUdfQ09NUEFUCiAJLmNvbXBhdF9pb2N0bAk9IGNvbXBhdF9ibGtkZXZfaW9jdGwsCiAjZW5kaWYKLQkucmVhZHYJCT0gZ2VuZXJpY19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0gZ2VuZXJpY19maWxlX3dyaXRlX25vbG9jaywKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLApAQCAtMTMwMywzICsxMjk3LDI0IEBACiB9CiAKIEVYUE9SVF9TWU1CT0woY2xvc2VfYmRldl9leGNsKTsKKworaW50IF9faW52YWxpZGF0ZV9kZXZpY2Uoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZ2V0X3N1cGVyKGJkZXYpOworCWludCByZXMgPSAwOworCisJaWYgKHNiKSB7CisJCS8qCisJCSAqIG5vIG5lZWQgdG8gbG9jayB0aGUgc3VwZXIsIGdldF9zdXBlciBob2xkcyB0aGUKKwkJICogcmVhZCBtdXRleCBzbyB0aGUgZmlsZXN5c3RlbSBjYW5ub3QgZ28gYXdheQorCQkgKiB1bmRlciB1cyAoLT5wdXRfc3VwZXIgcnVucyB3aXRoIHRoZSB3cml0ZSBsb2NrCisJCSAqIGhvbGQpLgorCQkgKi8KKwkJc2hyaW5rX2RjYWNoZV9zYihzYik7CisJCXJlcyA9IGludmFsaWRhdGVfaW5vZGVzKHNiKTsKKwkJZHJvcF9zdXBlcihzYik7CisJfQorCWludmFsaWRhdGVfYmRldihiZGV2LCAwKTsKKwlyZXR1cm4gcmVzOworfQorRVhQT1JUX1NZTUJPTChfX2ludmFsaWRhdGVfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2ZzL2J1ZmZlci5jIGIvZnMvYnVmZmVyLmMKaW5kZXggM2I2ZDcwMS4uMTZjZmJjZCAxMDA2NDQKLS0tIGEvZnMvYnVmZmVyLmMKKysrIGIvZnMvYnVmZmVyLmMKQEAgLTE1OSwzMSArMTU5LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woc3luY19ibG9ja2Rldik7CiAKLXN0YXRpYyB2b2lkIF9fZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlzeW5jX2lub2Rlc19zYihzYiwgMCk7Ci0JRFFVT1RfU1lOQyhzYik7Ci0JbG9ja19zdXBlcihzYik7Ci0JaWYgKHNiLT5zX2RpcnQgJiYgc2ItPnNfb3AtPndyaXRlX3N1cGVyKQotCQlzYi0+c19vcC0+d3JpdGVfc3VwZXIoc2IpOwotCXVubG9ja19zdXBlcihzYik7Ci0JaWYgKHNiLT5zX29wLT5zeW5jX2ZzKQotCQlzYi0+c19vcC0+c3luY19mcyhzYiwgMSk7Ci0Jc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLQlzeW5jX2lub2Rlc19zYihzYiwgMSk7Ci19Ci0KLS8qCi0gKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcwotICogc3VwZXJibG9jay4gIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCi0gKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLgotICovCi1pbnQgZnN5bmNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKLXsKLQlfX2ZzeW5jX3N1cGVyKHNiKTsKLQlyZXR1cm4gc3luY19ibG9ja2RldihzYi0+c19iZGV2KTsKLX0KLQogLyoKICAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzCiAgKiBkZXZpY2UuICAgRmlsZXN5c3RlbSBkYXRhIGFzIHdlbGwgYXMgdGhlIHVuZGVybHlpbmcgYmxvY2sKQEAgLTI2MCwxMTggKzIzNSw2IEBACiBFWFBPUlRfU1lNQk9MKHRoYXdfYmRldik7CiAKIC8qCi0gKiBzeW5jIGV2ZXJ5dGhpbmcuICBTdGFydCBvdXQgYnkgd2FraW5nIHBkZmx1c2gsIGJlY2F1c2UgdGhhdCB3cml0ZXMgYmFjawotICogYWxsIHF1ZXVlcyBpbiBwYXJhbGxlbC4KLSAqLwotc3RhdGljIHZvaWQgZG9fc3luYyh1bnNpZ25lZCBsb25nIHdhaXQpCi17Ci0Jd2FrZXVwX3BkZmx1c2goMCk7Ci0Jc3luY19pbm9kZXMoMCk7CQkvKiBBbGwgbWFwcGluZ3MsIGlub2RlcyBhbmQgdGhlaXIgYmxvY2tkZXZzICovCi0JRFFVT1RfU1lOQyhOVUxMKTsKLQlzeW5jX3N1cGVycygpOwkJLyogV3JpdGUgdGhlIHN1cGVyYmxvY2tzICovCi0Jc3luY19maWxlc3lzdGVtcygwKTsJLyogU3RhcnQgc3luY2luZyB0aGUgZmlsZXN5c3RlbXMgKi8KLQlzeW5jX2ZpbGVzeXN0ZW1zKHdhaXQpOwkvKiBXYWl0aW5nbHkgc3luYyB0aGUgZmlsZXN5c3RlbXMgKi8KLQlzeW5jX2lub2Rlcyh3YWl0KTsJLyogTWFwcGluZ3MsIGlub2RlcyBhbmQgYmxvY2tkZXZzLCBhZ2Fpbi4gKi8KLQlpZiAoIXdhaXQpCi0JCXByaW50aygiRW1lcmdlbmN5IFN5bmMgY29tcGxldGVcbiIpOwotCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpCi0JCWxhcHRvcF9zeW5jX2NvbXBsZXRpb24oKTsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5c19zeW5jKHZvaWQpCi17Ci0JZG9fc3luYygxKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBlbWVyZ2VuY3lfc3luYyh2b2lkKQotewotCXBkZmx1c2hfb3BlcmF0aW9uKGRvX3N5bmMsIDApOwotfQotCi0vKgotICogR2VuZXJpYyBmdW5jdGlvbiB0byBmc3luYyBhIGZpbGUuCi0gKgotICogZmlscCBtYXkgYmUgTlVMTCBpZiBjYWxsZWQgdmlhIHRoZSBtc3luYyBvZiBhIHZtYS4KLSAqLwotIAotaW50IGZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQotewotCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOwotCWludCByZXQsIGVycjsKLQotCS8qIHN5bmMgdGhlIGlub2RlIHRvIGJ1ZmZlcnMgKi8KLQlyZXQgPSB3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDApOwotCi0JLyogc3luYyB0aGUgc3VwZXJibG9jayB0byBidWZmZXJzICovCi0Jc2IgPSBpbm9kZS0+aV9zYjsKLQlsb2NrX3N1cGVyKHNiKTsKLQlpZiAoc2ItPnNfb3AtPndyaXRlX3N1cGVyKQotCQlzYi0+c19vcC0+d3JpdGVfc3VwZXIoc2IpOwotCXVubG9ja19zdXBlcihzYik7Ci0KLQkvKiAuLiBmaW5hbGx5IHN5bmMgdGhlIGJ1ZmZlcnMgdG8gZGlzayAqLwotCWVyciA9IHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQlyZXR1cm4gcmV0OwotfQotCi1sb25nIGRvX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpCi17Ci0JaW50IHJldDsKLQlpbnQgZXJyOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCi0JaWYgKCFmaWxlLT5mX29wIHx8ICFmaWxlLT5mX29wLT5mc3luYykgewotCQkvKiBXaHk/ICBXZSBjYW4gc3RpbGwgY2FsbCBmaWxlbWFwX2ZkYXRhd3JpdGUgKi8KLQkJcmV0ID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0JfQotCi0JcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOwotCi0JLyoKLQkgKiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcnMsIHdoaWNoIGNvdWxkIGNhdXNlCi0JICogbGl2ZWxvY2tzIGluIGZzeW5jX2J1ZmZlcnNfbGlzdCgpLgotCSAqLwotCW11dGV4X2xvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwotCWVyciA9IGZpbGUtPmZfb3AtPmZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5LCBkYXRhc3luYyk7Ci0JaWYgKCFyZXQpCi0JCXJldCA9IGVycjsKLQltdXRleF91bmxvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOwotCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOwotCWlmICghcmV0KQotCQlyZXQgPSBlcnI7Ci1vdXQ6Ci0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGxvbmcgX19kb19mc3luYyh1bnNpZ25lZCBpbnQgZmQsIGludCBkYXRhc3luYykKLXsKLQlzdHJ1Y3QgZmlsZSAqZmlsZTsKLQlpbnQgcmV0ID0gLUVCQURGOwotCi0JZmlsZSA9IGZnZXQoZmQpOwotCWlmIChmaWxlKSB7Ci0JCXJldCA9IGRvX2ZzeW5jKGZpbGUsIGRhdGFzeW5jKTsKLQkJZnB1dChmaWxlKTsKLQl9Ci0JcmV0dXJuIHJldDsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5c19mc3luYyh1bnNpZ25lZCBpbnQgZmQpCi17Ci0JcmV0dXJuIF9fZG9fZnN5bmMoZmQsIDApOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzX2ZkYXRhc3luYyh1bnNpZ25lZCBpbnQgZmQpCi17Ci0JcmV0dXJuIF9fZG9fZnN5bmMoZmQsIDEpOwotfQotCi0vKgogICogVmFyaW91cyBmaWxlc3lzdGVtcyBhcHBlYXIgdG8gd2FudCBfX2ZpbmRfZ2V0X2Jsb2NrIHRvIGJlIG5vbi1ibG9ja2luZy4KICAqIEJ1dCBpdCdzIHRoZSBwYWdlIGxvY2sgd2hpY2ggcHJvdGVjdHMgdGhlIGJ1ZmZlcnMuICBUbyBnZXQgYXJvdW5kIHRoaXMsCiAgKiB3ZSBnZXQgZXhjbHVzaW9uIGZyb20gdHJ5X3RvX2ZyZWVfYnVmZmVycyB3aXRoIHRoZSBibG9ja2RldiBtYXBwaW5nJ3MKQEAgLTE1NTEsMzUgKzE0MTQsNiBAQAogfQogCiAvKioKLSAqIHRyeV90b19yZWxlYXNlX3BhZ2UoKSAtIHJlbGVhc2Ugb2xkIGZzLXNwZWNpZmljIG1ldGFkYXRhIG9uIGEgcGFnZQotICoKLSAqIEBwYWdlOiB0aGUgcGFnZSB3aGljaCB0aGUga2VybmVsIGlzIHRyeWluZyB0byBmcmVlCi0gKiBAZ2ZwX21hc2s6IG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIChhbmQgSS9PIG1vZGUpCi0gKgotICogVGhlIGFkZHJlc3Nfc3BhY2UgaXMgdG8gdHJ5IHRvIHJlbGVhc2UgYW55IGRhdGEgYWdhaW5zdCB0aGUgcGFnZQotICogKHByZXN1bWFibHkgYXQgcGFnZS0+cHJpdmF0ZSkuICBJZiB0aGUgcmVsZWFzZSB3YXMgc3VjY2Vzc2Z1bCwgcmV0dXJuIGAxJy4KLSAqIE90aGVyd2lzZSByZXR1cm4gemVyby4KLSAqCi0gKiBUaGUgQGdmcF9tYXNrIGFyZ3VtZW50IHNwZWNpZmllcyB3aGV0aGVyIEkvTyBtYXkgYmUgcGVyZm9ybWVkIHRvIHJlbGVhc2UKLSAqIHRoaXMgcGFnZSAoX19HRlBfSU8pLCBhbmQgd2hldGhlciB0aGUgY2FsbCBtYXkgYmxvY2sgKF9fR0ZQX1dBSVQpLgotICoKLSAqIE5PVEU6IEBnZnBfbWFzayBtYXkgZ28gYXdheSwgYW5kIHRoaXMgZnVuY3Rpb24gbWF5IGJlY29tZSBub24tYmxvY2tpbmcuCi0gKi8KLWludCB0cnlfdG9fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZnBfdCBnZnBfbWFzaykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqIGNvbnN0IG1hcHBpbmcgPSBwYWdlLT5tYXBwaW5nOwotCi0JQlVHX09OKCFQYWdlTG9ja2VkKHBhZ2UpKTsKLQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSkKLQkJcmV0dXJuIDA7Ci0JCi0JaWYgKG1hcHBpbmcgJiYgbWFwcGluZy0+YV9vcHMtPnJlbGVhc2VwYWdlKQotCQlyZXR1cm4gbWFwcGluZy0+YV9vcHMtPnJlbGVhc2VwYWdlKHBhZ2UsIGdmcF9tYXNrKTsKLQlyZXR1cm4gdHJ5X3RvX2ZyZWVfYnVmZmVycyhwYWdlKTsKLX0KLUVYUE9SVF9TWU1CT0wodHJ5X3RvX3JlbGVhc2VfcGFnZSk7Ci0KLS8qKgogICogYmxvY2tfaW52YWxpZGF0ZXBhZ2UgLSBpbnZhbGlkYXRlIHBhcnQgb2YgYWxsIG9mIGEgYnVmZmVyLWJhY2tlZCBwYWdlCiAgKgogICogQHBhZ2U6IHRoZSBwYWdlIHdoaWNoIGlzIGFmZmVjdGVkCkBAIC0xNjMwLDE0ICsxNDY0LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0woYmxvY2tfaW52YWxpZGF0ZXBhZ2UpOwogCi12b2lkIGRvX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCkKLXsKLQl2b2lkICgqaW52YWxpZGF0ZXBhZ2UpKHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcpOwotCWludmFsaWRhdGVwYWdlID0gcGFnZS0+bWFwcGluZy0+YV9vcHMtPmludmFsaWRhdGVwYWdlID8gOgotCQlibG9ja19pbnZhbGlkYXRlcGFnZTsKLQkoKmludmFsaWRhdGVwYWdlKShwYWdlLCBvZmZzZXQpOwotfQotCiAvKgogICogV2UgYXR0YWNoIGFuZCBwb3NzaWJseSBkaXJ0eSB0aGUgYnVmZmVycyBhdG9taWNhbGx5IHdydAogICogX19zZXRfcGFnZV9kaXJ0eV9idWZmZXJzKCkgdmlhIHByaXZhdGVfbG9jay4gIHRyeV90b19mcmVlX2J1ZmZlcnMKZGlmZiAtLWdpdCBhL2ZzL2NoYXJfZGV2LmMgYi9mcy9jaGFyX2Rldi5jCmluZGV4IDM0ODNkM2MuLmE4ODVmNDYgMTAwNjQ0Ci0tLSBhL2ZzL2NoYXJfZGV2LmMKKysrIGIvZnMvY2hhcl9kZXYuYwpAQCAtMTksMTAgKzE5LDMwIEBACiAjaW5jbHVkZSA8bGludXgva29ial9tYXAuaD4KICNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC9iYWNraW5nLWRldi5oPgogCiAjaWZkZWYgQ09ORklHX0tNT0QKICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjZW5kaWYKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisvKgorICogY2FwYWJpbGl0aWVzIGZvciAvZGV2L21lbSwgL2Rldi9rbWVtIGFuZCBzaW1pbGFyIGRpcmVjdGx5IG1hcHBhYmxlIGNoYXJhY3RlcgorICogZGV2aWNlcworICogLSBwZXJtaXRzIHNoYXJlZC1tbWFwIGZvciByZWFkLCB3cml0ZSBhbmQvb3IgZXhlYworICogLSBkb2VzIG5vdCBwZXJtaXQgcHJpdmF0ZSBtbWFwIGluIE5PTU1VIG1vZGUgKGNhbid0IGRvIENPVykKKyAqIC0gbm8gcmVhZGFoZWFkIG9yIEkvTyBxdWV1ZSB1bnBsdWdnaW5nIHJlcXVpcmVkCisgKi8KK3N0cnVjdCBiYWNraW5nX2Rldl9pbmZvIGRpcmVjdGx5X21hcHBhYmxlX2NkZXZfYmRpID0geworCS5jYXBhYmlsaXRpZXMJPSAoCisjaWZkZWYgQ09ORklHX01NVQorCQkvKiBwZXJtaXQgcHJpdmF0ZSBjb3BpZXMgb2YgdGhlIGRhdGEgdG8gYmUgdGFrZW4gKi8KKwkJQkRJX0NBUF9NQVBfQ09QWSB8CisjZW5kaWYKKwkJLyogcGVybWl0IGRpcmVjdCBtbWFwLCBmb3IgcmVhZCwgd3JpdGUgb3IgZXhlYyAqLworCQlCRElfQ0FQX01BUF9ESVJFQ1QgfAorCQlCRElfQ0FQX1JFQURfTUFQIHwgQkRJX0NBUF9XUklURV9NQVAgfCBCRElfQ0FQX0VYRUNfTUFQKSwKK307CiAKIHN0YXRpYyBzdHJ1Y3Qga29ial9tYXAgKmNkZXZfbWFwOwogCkBAIC0xMDksMTMgKzEyOSwzMSBAQAogCiAJZm9yIChjcCA9ICZjaHJkZXZzW2ldOyAqY3A7IGNwID0gJigqY3ApLT5uZXh0KQogCQlpZiAoKCpjcCktPm1ham9yID4gbWFqb3IgfHwKLQkJICAgICgoKmNwKS0+bWFqb3IgPT0gbWFqb3IgJiYgKCpjcCktPmJhc2VtaW5vciA+PSBiYXNlbWlub3IpKQorCQkgICAgKCgqY3ApLT5tYWpvciA9PSBtYWpvciAmJgorCQkgICAgICgoKCpjcCktPmJhc2VtaW5vciA+PSBiYXNlbWlub3IpIHx8CisJCSAgICAgICgoKmNwKS0+YmFzZW1pbm9yICsgKCpjcCktPm1pbm9yY3QgPiBiYXNlbWlub3IpKSkpCiAJCQlicmVhazsKLQlpZiAoKmNwICYmICgqY3ApLT5tYWpvciA9PSBtYWpvciAmJgotCSAgICAoKmNwKS0+YmFzZW1pbm9yIDwgYmFzZW1pbm9yICsgbWlub3JjdCkgewotCQlyZXQgPSAtRUJVU1k7Ci0JCWdvdG8gb3V0OworCisJLyogQ2hlY2sgZm9yIG92ZXJsYXBwaW5nIG1pbm9yIHJhbmdlcy4gICovCisJaWYgKCpjcCAmJiAoKmNwKS0+bWFqb3IgPT0gbWFqb3IpIHsKKwkJaW50IG9sZF9taW4gPSAoKmNwKS0+YmFzZW1pbm9yOworCQlpbnQgb2xkX21heCA9ICgqY3ApLT5iYXNlbWlub3IgKyAoKmNwKS0+bWlub3JjdCAtIDE7CisJCWludCBuZXdfbWluID0gYmFzZW1pbm9yOworCQlpbnQgbmV3X21heCA9IGJhc2VtaW5vciArIG1pbm9yY3QgLSAxOworCisJCS8qIE5ldyBkcml2ZXIgb3ZlcmxhcHMgZnJvbSB0aGUgbGVmdC4gICovCisJCWlmIChuZXdfbWF4ID49IG9sZF9taW4gJiYgbmV3X21heCA8PSBvbGRfbWF4KSB7CisJCQlyZXQgPSAtRUJVU1k7CisJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIE5ldyBkcml2ZXIgb3ZlcmxhcHMgZnJvbSB0aGUgcmlnaHQuICAqLworCQlpZiAobmV3X21pbiA8PSBvbGRfbWF4ICYmIG5ld19taW4gPj0gb2xkX21pbikgeworCQkJcmV0ID0gLUVCVVNZOworCQkJZ290byBvdXQ7CisJCX0KIAl9CisKIAljZC0+bmV4dCA9ICpjcDsKIAkqY3AgPSBjZDsKIAltdXRleF91bmxvY2soJmNocmRldnNfbG9jayk7CkBAIC0xNDYsNiArMTg0LDE1IEBACiAJcmV0dXJuIGNkOwogfQogCisvKioKKyAqIHJlZ2lzdGVyX2NocmRldl9yZWdpb24oKSAtIHJlZ2lzdGVyIGEgcmFuZ2Ugb2YgZGV2aWNlIG51bWJlcnMKKyAqIEBmcm9tOiB0aGUgZmlyc3QgaW4gdGhlIGRlc2lyZWQgcmFuZ2Ugb2YgZGV2aWNlIG51bWJlcnM7IG11c3QgaW5jbHVkZQorICogICAgICAgIHRoZSBtYWpvciBudW1iZXIuCisgKiBAY291bnQ6IHRoZSBudW1iZXIgb2YgY29uc2VjdXRpdmUgZGV2aWNlIG51bWJlcnMgcmVxdWlyZWQKKyAqIEBuYW1lOiB0aGUgbmFtZSBvZiB0aGUgZGV2aWNlIG9yIGRyaXZlci4KKyAqCisgKiBSZXR1cm4gdmFsdWUgaXMgemVybyBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZS4KKyAqLwogaW50IHJlZ2lzdGVyX2NocmRldl9yZWdpb24oZGV2X3QgZnJvbSwgdW5zaWduZWQgY291bnQsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CiAJc3RydWN0IGNoYXJfZGV2aWNlX3N0cnVjdCAqY2Q7CkBAIC0xNzEsNiArMjE4LDE3IEBACiAJcmV0dXJuIFBUUl9FUlIoY2QpOwogfQogCisvKioKKyAqIGFsbG9jX2NocmRldl9yZWdpb24oKSAtIHJlZ2lzdGVyIGEgcmFuZ2Ugb2YgY2hhciBkZXZpY2UgbnVtYmVycworICogQGRldjogb3V0cHV0IHBhcmFtZXRlciBmb3IgZmlyc3QgYXNzaWduZWQgbnVtYmVyCisgKiBAYmFzZW1pbm9yOiBmaXJzdCBvZiB0aGUgcmVxdWVzdGVkIHJhbmdlIG9mIG1pbm9yIG51bWJlcnMKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBtaW5vciBudW1iZXJzIHJlcXVpcmVkCisgKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIGFzc29jaWF0ZWQgZGV2aWNlIG9yIGRyaXZlcgorICoKKyAqIEFsbG9jYXRlcyBhIHJhbmdlIG9mIGNoYXIgZGV2aWNlIG51bWJlcnMuICBUaGUgbWFqb3IgbnVtYmVyIHdpbGwgYmUKKyAqIGNob3NlbiBkeW5hbWljYWxseSwgYW5kIHJldHVybmVkIChhbG9uZyB3aXRoIHRoZSBmaXJzdCBtaW5vciBudW1iZXIpCisgKiBpbiBAZGV2LiAgUmV0dXJucyB6ZXJvIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZS4KKyAqLwogaW50IGFsbG9jX2NocmRldl9yZWdpb24oZGV2X3QgKmRldiwgdW5zaWduZWQgYmFzZW1pbm9yLCB1bnNpZ25lZCBjb3VudCwKIAkJCWNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0yNDAsNiArMjk4LDE1IEBACiAJcmV0dXJuIGVycjsKIH0KIAorLyoqCisgKiB1bnJlZ2lzdGVyX2NocmRldl9yZWdpb24oKSAtIHJldHVybiBhIHJhbmdlIG9mIGRldmljZSBudW1iZXJzCisgKiBAZnJvbTogdGhlIGZpcnN0IGluIHRoZSByYW5nZSBvZiBudW1iZXJzIHRvIHVucmVnaXN0ZXIKKyAqIEBjb3VudDogdGhlIG51bWJlciBvZiBkZXZpY2UgbnVtYmVycyB0byB1bnJlZ2lzdGVyCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIHVucmVnaXN0ZXIgYSByYW5nZSBvZiBAY291bnQgZGV2aWNlIG51bWJlcnMsCisgKiBzdGFydGluZyB3aXRoIEBmcm9tLiAgVGhlIGNhbGxlciBzaG91bGQgbm9ybWFsbHkgYmUgdGhlIG9uZSB3aG8KKyAqIGFsbG9jYXRlZCB0aG9zZSBudW1iZXJzIGluIHRoZSBmaXJzdCBwbGFjZS4uLgorICovCiB2b2lkIHVucmVnaXN0ZXJfY2hyZGV2X3JlZ2lvbihkZXZfdCBmcm9tLCB1bnNpZ25lZCBjb3VudCkKIHsKIAlkZXZfdCB0byA9IGZyb20gKyBjb3VudDsKQEAgLTM3Nyw2ICs0NDQsMTYgQEAKIAlyZXR1cm4gY2Rldl9nZXQocCkgPyAwIDogLTE7CiB9CiAKKy8qKgorICogY2Rldl9hZGQoKSAtIGFkZCBhIGNoYXIgZGV2aWNlIHRvIHRoZSBzeXN0ZW0KKyAqIEBwOiB0aGUgY2RldiBzdHJ1Y3R1cmUgZm9yIHRoZSBkZXZpY2UKKyAqIEBkZXY6IHRoZSBmaXJzdCBkZXZpY2UgbnVtYmVyIGZvciB3aGljaCB0aGlzIGRldmljZSBpcyByZXNwb25zaWJsZQorICogQGNvdW50OiB0aGUgbnVtYmVyIG9mIGNvbnNlY3V0aXZlIG1pbm9yIG51bWJlcnMgY29ycmVzcG9uZGluZyB0byB0aGlzCisgKiAgICAgICAgIGRldmljZQorICoKKyAqIGNkZXZfYWRkKCkgYWRkcyB0aGUgZGV2aWNlIHJlcHJlc2VudGVkIGJ5IEBwIHRvIHRoZSBzeXN0ZW0sIG1ha2luZyBpdAorICogbGl2ZSBpbW1lZGlhdGVseS4gIEEgbmVnYXRpdmUgZXJyb3IgY29kZSBpcyByZXR1cm5lZCBvbiBmYWlsdXJlLgorICovCiBpbnQgY2Rldl9hZGQoc3RydWN0IGNkZXYgKnAsIGRldl90IGRldiwgdW5zaWduZWQgY291bnQpCiB7CiAJcC0+ZGV2ID0gZGV2OwpAQCAtMzg5LDYgKzQ2NiwxMyBAQAogCWtvYmpfdW5tYXAoY2Rldl9tYXAsIGRldiwgY291bnQpOwogfQogCisvKioKKyAqIGNkZXZfZGVsKCkgLSByZW1vdmUgYSBjZGV2IGZyb20gdGhlIHN5c3RlbQorICogQHA6IHRoZSBjZGV2IHN0cnVjdHVyZSB0byBiZSByZW1vdmVkCisgKgorICogY2Rldl9kZWwoKSByZW1vdmVzIEBwIGZyb20gdGhlIHN5c3RlbSwgcG9zc2libHkgZnJlZWluZyB0aGUgc3RydWN0dXJlCisgKiBpdHNlbGYuCisgKi8KIHZvaWQgY2Rldl9kZWwoc3RydWN0IGNkZXYgKnApCiB7CiAJY2Rldl91bm1hcChwLT5kZXYsIHAtPmNvdW50KTsKQEAgLTQxNyw2ICs1MDEsMTEgQEAKIAkucmVsZWFzZQk9IGNkZXZfZHluYW1pY19yZWxlYXNlLAogfTsKIAorLyoqCisgKiBjZGV2X2FsbG9jKCkgLSBhbGxvY2F0ZSBhIGNkZXYgc3RydWN0dXJlCisgKgorICogQWxsb2NhdGVzIGFuZCByZXR1cm5zIGEgY2RldiBzdHJ1Y3R1cmUsIG9yIE5VTEwgb24gZmFpbHVyZS4KKyAqLwogc3RydWN0IGNkZXYgKmNkZXZfYWxsb2Modm9pZCkKIHsKIAlzdHJ1Y3QgY2RldiAqcCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjZGV2KSwgR0ZQX0tFUk5FTCk7CkBAIC00MjgsNiArNTE3LDE0IEBACiAJcmV0dXJuIHA7CiB9CiAKKy8qKgorICogY2Rldl9pbml0KCkgLSBpbml0aWFsaXplIGEgY2RldiBzdHJ1Y3R1cmUKKyAqIEBjZGV2OiB0aGUgc3RydWN0dXJlIHRvIGluaXRpYWxpemUKKyAqIEBmb3BzOiB0aGUgZmlsZV9vcGVyYXRpb25zIGZvciB0aGlzIGRldmljZQorICoKKyAqIEluaXRpYWxpemVzIEBjZGV2LCByZW1lbWJlcmluZyBAZm9wcywgbWFraW5nIGl0IHJlYWR5IHRvIGFkZCB0byB0aGUKKyAqIHN5c3RlbSB3aXRoIGNkZXZfYWRkKCkuCisgKi8KIHZvaWQgY2Rldl9pbml0KHN0cnVjdCBjZGV2ICpjZGV2LCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzKQogewogCW1lbXNldChjZGV2LCAwLCBzaXplb2YgKmNkZXYpOwpAQCAtNDYxLDMgKzU1OCw0IEBACiBFWFBPUlRfU1lNQk9MKGNkZXZfYWRkKTsKIEVYUE9SVF9TWU1CT0wocmVnaXN0ZXJfY2hyZGV2KTsKIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9jaHJkZXYpOworRVhQT1JUX1NZTUJPTChkaXJlY3RseV9tYXBwYWJsZV9jZGV2X2JkaSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2NpZnNmcy5jIGIvZnMvY2lmcy9jaWZzZnMuYwppbmRleCBjM2VmMWMwLi5jMDBjNjU0IDEwMDY0NAotLS0gYS9mcy9jaWZzL2NpZnNmcy5jCisrKyBiL2ZzL2NpZnMvY2lmc2ZzLmMKQEAgLTI1Myw3ICsyNTMsNiBAQAogCWZpbGUgZGF0YSBvciBtZXRhZGF0YSAqLwogCWNpZnNfaW5vZGUtPmNsaWVudENhbkNhY2hlUmVhZCA9IEZBTFNFOwogCWNpZnNfaW5vZGUtPmNsaWVudENhbkNhY2hlQWxsID0gRkFMU0U7Ci0JY2lmc19pbm9kZS0+dmZzX2lub2RlLmlfYmxrc2l6ZSA9IENJRlNfTUFYX01TR1NJWkU7CiAJY2lmc19pbm9kZS0+dmZzX2lub2RlLmlfYmxrYml0cyA9IDE0OyAgLyogMioqMTQgPSBDSUZTX01BWF9NU0dTSVpFICovCiAJY2lmc19pbm9kZS0+dmZzX2lub2RlLmlfZmxhZ3MgPSBTX05PQVRJTUUgfCBTX05PQ01USU1FOwogCUlOSVRfTElTVF9IRUFEKCZjaWZzX2lub2RlLT5vcGVuRmlsZUxpc3QpOwpAQCAtNDgxLDI1ICs0ODAsMTMgQEAKIAlyZXR1cm4gc2ltcGxlX3NldF9tbnQobW50LCBzYik7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGNpZnNfZmlsZV93cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKLQlzc2l6ZV90IHdyaXR0ZW47Ci0KLQl3cml0dGVuID0gZ2VuZXJpY19maWxlX3dyaXRldihmaWxlLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOwotCWlmICghQ0lGU19JKGlub2RlKS0+Y2xpZW50Q2FuQ2FjaGVBbGwpCi0JCWZpbGVtYXBfZmRhdGF3cml0ZShpbm9kZS0+aV9tYXBwaW5nKTsKLQlyZXR1cm4gd3JpdHRlbjsKLX0KLQotc3RhdGljIHNzaXplX3QgY2lmc19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQorc3RhdGljIHNzaXplX3QgY2lmc19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gaW9jYi0+a2lfZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAJc3NpemVfdCB3cml0dGVuOwogCi0Jd3JpdHRlbiA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgYnVmLCBjb3VudCwgcG9zKTsKKwl3cml0dGVuID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBpb3YsIG5yX3NlZ3MsIHBvcyk7CiAJaWYgKCFDSUZTX0koaW5vZGUpLT5jbGllbnRDYW5DYWNoZUFsbCkKIAkJZmlsZW1hcF9mZGF0YXdyaXRlKGlub2RlLT5pX21hcHBpbmcpOwogCXJldHVybiB3cml0dGVuOwpAQCAtNTc4LDggKzU2NSw2IEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9vcHMgPSB7CiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKLQkucmVhZHYgPSBnZW5lcmljX2ZpbGVfcmVhZHYsCi0JLndyaXRldiA9IGNpZnNfZmlsZV93cml0ZXYsCiAJLmFpb19yZWFkID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAogCS5vcGVuID0gY2lmc19vcGVuLApAQCAtNjIxLDggKzYwNiw2IEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNpZnNfZmlsZV9ub2JybF9vcHMgPSB7CiAJLnJlYWQgPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlID0gZG9fc3luY193cml0ZSwKLQkucmVhZHYgPSBnZW5lcmljX2ZpbGVfcmVhZHYsCi0JLndyaXRldiA9IGNpZnNfZmlsZV93cml0ZXYsCiAJLmFpb19yZWFkID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUgPSBjaWZzX2ZpbGVfYWlvX3dyaXRlLAogCS5vcGVuID0gY2lmc19vcGVuLApAQCAtNjk5LDggKzY4Miw3IEBACiBzdGF0aWMgdm9pZAogY2lmc19kZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiY2lmc19pbm9kZV9jYWNoZTogZXJyb3IgZnJlZWluZ1xuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogc3RhdGljIGludApAQCAtNzc4LDEzICs3NjAsOSBAQAogY2lmc19kZXN0cm95X3JlcXVlc3RfYnVmcyh2b2lkKQogewogCW1lbXBvb2xfZGVzdHJveShjaWZzX3JlcV9wb29scCk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShjaWZzX3JlcV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiY2lmc19kZXN0cm95X3JlcXVlc3RfY2FjaGU6IGVycm9yIG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19yZXFfY2FjaGVwKTsKIAltZW1wb29sX2Rlc3Ryb3koY2lmc19zbV9yZXFfcG9vbHApOwotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19zbV9yZXFfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORwotCQkgICAgICAiY2lmc19kZXN0cm95X3JlcXVlc3RfY2FjaGU6IGNpZnNfc21hbGxfcnEgZnJlZSBlcnJvclxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfc21fcmVxX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTgxOSwxMyArNzk3LDggQEAKIGNpZnNfZGVzdHJveV9taWRzKHZvaWQpCiB7CiAJbWVtcG9vbF9kZXN0cm95KGNpZnNfbWlkX3Bvb2xwKTsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGNpZnNfbWlkX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJICAgICAgICJjaWZzX2Rlc3Ryb3lfbWlkczogZXJyb3Igbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOwotCi0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShjaWZzX29wbG9ja19jYWNoZXApKQotCQlwcmludGsoS0VSTl9XQVJOSU5HCi0JCSAgICAgICAiZXJyb3Igbm90IGFsbCBvcGxvY2sgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19taWRfY2FjaGVwKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koY2lmc19vcGxvY2tfY2FjaGVwKTsKIH0KIAogc3RhdGljIGludCBjaWZzX29wbG9ja190aHJlYWQodm9pZCAqIGR1bW15YXJnKQpkaWZmIC0tZ2l0IGEvZnMvY2lmcy9maWxlLmMgYi9mcy9jaWZzL2ZpbGUuYwppbmRleCBkZGIwMTJhLi45NzZhNjkxIDEwMDY0NAotLS0gYS9mcy9jaWZzL2ZpbGUuYworKysgYi9mcy9jaWZzL2ZpbGUuYwpAQCAtMjUsNyArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2JhY2tpbmctZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ZjbnRsLmg+Ci0jaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lub2RlLmMgYi9mcy9jaWZzL2lub2RlLmMKaW5kZXggYjg4MTQ3Yy4uNmI5MGVmOSAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pbm9kZS5jCisrKyBiL2ZzL2NpZnMvaW5vZGUuYwpAQCAtMTksNyArMTksNiBAQAogICogICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQogICovCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC01OTEsNyArNTkwLDcgQEAKIAogCWlmICghcmMpIHsKIAkJaWYgKGRpcmVudHJ5LT5kX2lub2RlKQotCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwkJCWRyb3BfbmxpbmsoZGlyZW50cnktPmRfaW5vZGUpOwogCX0gZWxzZSBpZiAocmMgPT0gLUVOT0VOVCkgewogCQlkX2Ryb3AoZGlyZW50cnkpOwogCX0gZWxzZSBpZiAocmMgPT0gLUVUWFRCU1kpIHsKQEAgLTYxMCw3ICs2MDksNyBAQAogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sIG5ldGZpZCk7CiAJCQlpZiAoZGlyZW50cnktPmRfaW5vZGUpCi0JCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwkJCQlkcm9wX25saW5rKGRpcmVudHJ5LT5kX2lub2RlKTsKIAkJfQogCX0gZWxzZSBpZiAocmMgPT0gLUVBQ0NFUykgewogCQkvKiB0cnkgb25seSBpZiByL28gYXR0cmlidXRlIHNldCBpbiBsb2NhbCBsb29rdXAgZGF0YT8gKi8KQEAgLTY2NCw3ICs2NjMsNyBAQAogCQkJCQkJQ0lGU19NT1VOVF9NQVBfU1BFQ0lBTF9DSFIpOwogCQkJaWYgKCFyYykgewogCQkJCWlmIChkaXJlbnRyeS0+ZF9pbm9kZSkKLQkJCQkJZGlyZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwkJCQkJZHJvcF9ubGluayhkaXJlbnRyeS0+ZF9pbm9kZSk7CiAJCQl9IGVsc2UgaWYgKHJjID09IC1FVFhUQlNZKSB7CiAJCQkJaW50IG9wbG9jayA9IEZBTFNFOwogCQkJCV9fdTE2IG5ldGZpZDsKQEAgLTY4NSw3ICs2ODQsNyBAQAogCQkJCQkJICAgIENJRlNfTU9VTlRfTUFQX1NQRUNJQUxfQ0hSKTsKIAkJCQkJQ0lGU1NNQkNsb3NlKHhpZCwgcFRjb24sIG5ldGZpZCk7CiAJCQkJCWlmIChkaXJlbnRyeS0+ZF9pbm9kZSkKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVudHJ5LT5kX2lub2RlLT5pX25saW5rLS07CisJCQkJCQlkcm9wX25saW5rKGRpcmVudHJ5LT5kX2lub2RlKTsKIAkJCQl9CiAJCQkvKiBCQiBpZiByYyA9IC1FVFhUQlVTWSBnb3RvIHRoZSByZW5hbWUgbG9naWMgQkIgKi8KIAkJCX0KQEAgLTczNiw3ICs3MzUsNyBAQAogCQljRllJKDEsICgiY2lmc19ta2RpciByZXR1cm5lZCAweCV4IiwgcmMpKTsKIAkJZF9kcm9wKGRpcmVudHJ5KTsKIAl9IGVsc2UgewotCQlpbm9kZS0+aV9ubGluaysrOworCQlpbmNfbmxpbmsoaW5vZGUpOwogCQlpZiAocFRjb24tPnNlcy0+Y2FwYWJpbGl0aWVzICYgQ0FQX1VOSVgpCiAJCQlyYyA9IGNpZnNfZ2V0X2lub2RlX2luZm9fdW5peCgmbmV3aW5vZGUsIGZ1bGxfcGF0aCwKIAkJCQkJCSAgICAgIGlub2RlLT5pX3NiLHhpZCk7CkBAIC04MTcsOSArODE2LDkgQEAKIAkJCSAgY2lmc19zYi0+bW50X2NpZnNfZmxhZ3MgJiBDSUZTX01PVU5UX01BUF9TUEVDSUFMX0NIUik7CiAKIAlpZiAoIXJjKSB7Ci0JCWlub2RlLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsoaW5vZGUpOwogCQlpX3NpemVfd3JpdGUoZGlyZW50cnktPmRfaW5vZGUsMCk7Ci0JCWRpcmVudHJ5LT5kX2lub2RlLT5pX25saW5rID0gMDsKKwkJY2xlYXJfbmxpbmsoZGlyZW50cnktPmRfaW5vZGUpOwogCX0KIAogCWNpZnNJbm9kZSA9IENJRlNfSShkaXJlbnRyeS0+ZF9pbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9jaWZzL2lvY3RsLmMgYi9mcy9jaWZzL2lvY3RsLmMKaW5kZXggYjBlYTY2OC4uZTM0YzdkYiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9pb2N0bC5jCisrKyBiL2ZzL2NpZnMvaW9jdGwuYwpAQCAtMjIsNyArMjIsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlICJjaWZzcGR1LmgiCiAjaW5jbHVkZSAiY2lmc2dsb2IuaCIKICNpbmNsdWRlICJjaWZzcHJvdG8uaCIKQEAgLTc0LDcgKzczLDcgQEAKIAkJCX0KIAkJCWJyZWFrOwogI2lmZGVmIENPTkZJR19DSUZTX1BPU0lYCi0JCWNhc2UgRVhUMl9JT0NfR0VURkxBR1M6CisJCWNhc2UgRlNfSU9DX0dFVEZMQUdTOgogCQkJaWYoQ0lGU19VTklYX0VYVEFUVFJfQ0FQICYgY2FwcykgewogCQkJCWlmIChwU01CRmlsZSA9PSBOVUxMKQogCQkJCQlicmVhazsKQEAgLTgyLDEyICs4MSwxMiBAQAogCQkJCQkmRXh0QXR0ckJpdHMsICZFeHRBdHRyTWFzayk7CiAJCQkJaWYocmMgPT0gMCkKIAkJCQkJcmMgPSBwdXRfdXNlcihFeHRBdHRyQml0cyAmCi0JCQkJCQlFWFQyX0ZMX1VTRVJfVklTSUJMRSwKKwkJCQkJCUZTX0ZMX1VTRVJfVklTSUJMRSwKIAkJCQkJCShpbnQgX191c2VyICopYXJnKTsKIAkJCX0KIAkJCWJyZWFrOwogCi0JCWNhc2UgRVhUMl9JT0NfU0VURkxBR1M6CisJCWNhc2UgRlNfSU9DX1NFVEZMQUdTOgogCQkJaWYoQ0lGU19VTklYX0VYVEFUVFJfQ0FQICYgY2FwcykgewogCQkJCWlmKGdldF91c2VyKEV4dEF0dHJCaXRzLChpbnQgX191c2VyICopYXJnKSkgewogCQkJCQlyYyA9IC1FRkFVTFQ7CmRpZmYgLS1naXQgYS9mcy9jaWZzL3JlYWRkaXIuYyBiL2ZzL2NpZnMvcmVhZGRpci5jCmluZGV4IDlhZWI1OGEuLmIyN2IzNDUgMTAwNjQ0Ci0tLSBhL2ZzL2NpZnMvcmVhZGRpci5jCisrKyBiL2ZzL2NpZnMvcmVhZGRpci5jCkBAIC0yMTYsMTAgKzIxNiw5IEBACiAKIAlpZiAoYWxsb2NhdGlvbl9zaXplIDwgZW5kX29mX2ZpbGUpCiAJCWNGWUkoMSwgKCJNYXkgYmUgc3BhcnNlIGZpbGUsIGFsbG9jYXRpb24gbGVzcyB0aGFuIGZpbGUgc2l6ZSIpKTsKLQljRllJKDEsICgiRmlsZSBTaXplICVsZCBhbmQgYmxvY2tzICVsbHUgYW5kIGJsb2Nrc2l6ZSAlbGQiLAorCWNGWUkoMSwgKCJGaWxlIFNpemUgJWxkIGFuZCBibG9ja3MgJWxsdSIsCiAJCSh1bnNpZ25lZCBsb25nKXRtcF9pbm9kZS0+aV9zaXplLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXRtcF9pbm9kZS0+aV9ibG9ja3MsCi0JCXRtcF9pbm9kZS0+aV9ibGtzaXplKSk7CisJCSh1bnNpZ25lZCBsb25nIGxvbmcpdG1wX2lub2RlLT5pX2Jsb2NrcykpOwogCWlmIChTX0lTUkVHKHRtcF9pbm9kZS0+aV9tb2RlKSkgewogCQljRllJKDEsICgiRmlsZSBpbm9kZSIpKTsKIAkJdG1wX2lub2RlLT5pX29wID0gJmNpZnNfZmlsZV9pbm9kZV9vcHM7CmRpZmYgLS1naXQgYS9mcy9jb2RhL2NvZGFfbGludXguYyBiL2ZzL2NvZGEvY29kYV9saW51eC5jCmluZGV4IDU1OTcwODAuLjk1YTU0MjUgMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvY29kYV9saW51eC5jCisrKyBiL2ZzL2NvZGEvY29kYV9saW51eC5jCkBAIC0xMTAsOCArMTEwLDYgQEAKIAkgICAgICAgIGlub2RlLT5pX25saW5rID0gYXR0ci0+dmFfbmxpbms7CiAJaWYgKGF0dHItPnZhX3NpemUgIT0gLTEpCiAJICAgICAgICBpbm9kZS0+aV9zaXplID0gYXR0ci0+dmFfc2l6ZTsKLQlpZiAoYXR0ci0+dmFfYmxvY2tzaXplICE9IC0xKQotCQlpbm9kZS0+aV9ibGtzaXplID0gYXR0ci0+dmFfYmxvY2tzaXplOwogCWlmIChhdHRyLT52YV9zaXplICE9IC0xKQogCQlpbm9kZS0+aV9ibG9ja3MgPSAoYXR0ci0+dmFfc2l6ZSArIDUxMSkgPj4gOTsKIAlpZiAoYXR0ci0+dmFfYXRpbWUudHZfc2VjICE9IC0xKSAKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvZGlyLmMgYi9mcy9jb2RhL2Rpci5jCmluZGV4IDcxZjJlYTYuLjAxMDJiMjggMTAwNjQ0Ci0tLSBhL2ZzL2NvZGEvZGlyLmMKKysrIGIvZnMvY29kYS9kaXIuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJY29kYV9kaXJfY2hhbmdlZChkaXJfaW5vZGUsIDApOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAlkX2luc3RhbnRpYXRlKGRlLCBpbm9kZSk7Ci0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogICAgICAgICAKIG91dDoKIAl1bmxvY2tfa2VybmVsKCk7CkBAIC0zNjcsNyArMzY3LDcgQEAKICAgICAgICAgfQogCiAJY29kYV9kaXJfY2hhbmdlZChkaXIsIDApOwotCWRlLT5kX2lub2RlLT5pX25saW5rLS07CisJZHJvcF9ubGluayhkZS0+ZF9pbm9kZSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzk0LDcgKzM5NCw3IEBACiAgICAgICAgIH0KIAogCWNvZGFfZGlyX2NoYW5nZWQoZGlyLCAtMSk7Ci0JZGUtPmRfaW5vZGUtPmlfbmxpbmstLTsKKwlkcm9wX25saW5rKGRlLT5kX2lub2RlKTsKIAlkX2RlbGV0ZShkZSk7CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC01MTMsNyArNTEzLDcgQEAKIAlpbm9fdCBpbm87CiAJaW50IHJldCwgaTsKIAotCXZkaXIgPSAoc3RydWN0IHZlbnVzX2RpcmVudCAqKWttYWxsb2Moc2l6ZW9mKCp2ZGlyKSwgR0ZQX0tFUk5FTCk7CisJdmRpciA9IGttYWxsb2Moc2l6ZW9mKCp2ZGlyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2ZGlyKSByZXR1cm4gLUVOT01FTTsKIAogCWkgPSBmaWxwLT5mX3BvczsKZGlmZiAtLWdpdCBhL2ZzL2NvZGEvaW5vZGUuYyBiL2ZzL2NvZGEvaW5vZGUuYwppbmRleCA4N2YxZGM4Li44OGQxMjMzIDEwMDY0NAotLS0gYS9mcy9jb2RhL2lub2RlLmMKKysrIGIvZnMvY29kYS9pbm9kZS5jCkBAIC04MCw4ICs4MCw3IEBACiAKIHZvaWQgY29kYV9kZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGNvZGFfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiY29kYV9pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShjb2RhX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQgY29kYV9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCmRpZmYgLS1naXQgYS9mcy9jb21wYXQuYyBiL2ZzL2NvbXBhdC5jCmluZGV4IGNlOTgyZjYuLjEzZmIwOGQgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdC5jCisrKyBiL2ZzL2NvbXBhdC5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8bGludXgvbmZzZC9zeXNjYWxsLmg+CiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgotI2luY2x1ZGUgPGxpbnV4L2FjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAKICNpbmNsdWRlIDxuZXQvc29jay5oPgkJLyogc2lvY2RldnByaXZhdGVfaW9jdGwgKi8KQEAgLTUyLDExICs1MiwxMiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+CiAjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgotCi1leHRlcm4gdm9pZCBzaWdzZXRfZnJvbV9jb21wYXQoc2lnc2V0X3QgKnNldCwgY29tcGF0X3NpZ3NldF90ICpjb21wYXQpOworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIGludCBjb21wYXRfbG9nID0gMTsKIAorZXh0ZXJuIHZvaWQgc2lnc2V0X2Zyb21fY29tcGF0KHNpZ3NldF90ICpzZXQsIGNvbXBhdF9zaWdzZXRfdCAqY29tcGF0KTsKKwogaW50IGNvbXBhdF9wcmludGsoY29uc3QgY2hhciAqZm10LCAuLi4pCiB7CiAJdmFfbGlzdCBhcDsKQEAgLTY5LDYgKzcwLDggQEAKIAlyZXR1cm4gcmV0OwogfQogCisjaW5jbHVkZSAicmVhZF93cml0ZS5oIgorCiAvKgogICogTm90IGFsbCBhcmNoaXRlY3R1cmVzIGhhdmUgc3lzX3V0aW1lLCBzbyBpbXBsZW1lbnQgdGhpcyBpbiB0ZXJtcwogICogb2Ygc3lzX3V0aW1lcy4KQEAgLTMxMyw5ICszMTYsNiBAQAogI2RlZmluZSBJT0NUTF9IQVNIU0laRSAyNTYKIHN0YXRpYyBzdHJ1Y3QgaW9jdGxfdHJhbnMgKmlvY3RsMzJfaGFzaF90YWJsZVtJT0NUTF9IQVNIU0laRV07CiAKLWV4dGVybiBzdHJ1Y3QgaW9jdGxfdHJhbnMgaW9jdGxfc3RhcnRbXTsKLWV4dGVybiBpbnQgaW9jdGxfdGFibGVfc2l6ZTsKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGlvY3RsMzJfaGFzaCh1bnNpZ25lZCBsb25nIGNtZCkKIHsKIAlyZXR1cm4gKCgoY21kID4+IDYpIF4gKGNtZCA+PiA0KSBeIGNtZCkpICUgSU9DVExfSEFTSFNJWkU7CkBAIC04MzgsOCArODM4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIGludCBjb3B5X21vdW50X29wdGlvbnMgKGNvbnN0IHZvaWQgX191c2VyICosIHVuc2lnbmVkIGxvbmcgKik7Ci0KICNkZWZpbmUgU01CRlNfTkFNRSAgICAgICJzbWJmcyIKICNkZWZpbmUgTkNQRlNfTkFNRSAgICAgICJuY3BmcyIKICNkZWZpbmUgTkZTNF9OQU1FCSJuZnM0IgpAQCAtMTE1Myw5ICsxMTUxLDYgQEAKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgY29tcGF0X2lvdmVjIF9fdXNlciAqdXZlY3RvciwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcG9zKQogewotCXR5cGVkZWYgc3NpemVfdCAoKmlvX2ZuX3QpKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwotCXR5cGVkZWYgc3NpemVfdCAoKmlvdl9mbl90KShzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwotCiAJY29tcGF0X3NzaXplX3QgdG90X2xlbjsKIAlzdHJ1Y3QgaW92ZWMgaW92c3RhY2tbVUlPX0ZBU1RJT1ZdOwogCXN0cnVjdCBpb3ZlYyAqaW92PWlvdnN0YWNrLCAqdmVjdG9yOwpAQCAtMTIzOCwzOSArMTIzMywxOCBAQAogCWZudiA9IE5VTEw7CiAJaWYgKHR5cGUgPT0gUkVBRCkgewogCQlmbiA9IGZpbGUtPmZfb3AtPnJlYWQ7Ci0JCWZudiA9IGZpbGUtPmZfb3AtPnJlYWR2OworCQlmbnYgPSBmaWxlLT5mX29wLT5haW9fcmVhZDsKIAl9IGVsc2UgewogCQlmbiA9IChpb19mbl90KWZpbGUtPmZfb3AtPndyaXRlOwotCQlmbnYgPSBmaWxlLT5mX29wLT53cml0ZXY7Ci0JfQotCWlmIChmbnYpIHsKLQkJcmV0ID0gZm52KGZpbGUsIGlvdiwgbnJfc2VncywgcG9zKTsKLQkJZ290byBvdXQ7CisJCWZudiA9IGZpbGUtPmZfb3AtPmFpb193cml0ZTsKIAl9CiAKLQkvKiBEbyBpdCBieSBoYW5kLCB3aXRoIGZpbGUtb3BzICovCi0JcmV0ID0gMDsKLQl2ZWN0b3IgPSBpb3Y7Ci0Jd2hpbGUgKG5yX3NlZ3MgPiAwKSB7Ci0JCXZvaWQgX191c2VyICogYmFzZTsKLQkJc2l6ZV90IGxlbjsKLQkJc3NpemVfdCBucjsKKwlpZiAoZm52KQorCQlyZXQgPSBkb19zeW5jX3JlYWR2X3dyaXRldihmaWxlLCBpb3YsIG5yX3NlZ3MsIHRvdF9sZW4sCisJCQkJCQlwb3MsIGZudik7CisJZWxzZQorCQlyZXQgPSBkb19sb29wX3JlYWR2X3dyaXRldihmaWxlLCBpb3YsIG5yX3NlZ3MsIHBvcywgZm4pOwogCi0JCWJhc2UgPSB2ZWN0b3ItPmlvdl9iYXNlOwotCQlsZW4gPSB2ZWN0b3ItPmlvdl9sZW47Ci0JCXZlY3RvcisrOwotCQlucl9zZWdzLS07Ci0KLQkJbnIgPSBmbihmaWxlLCBiYXNlLCBsZW4sIHBvcyk7Ci0KLQkJaWYgKG5yIDwgMCkgewotCQkJaWYgKCFyZXQpIHJldCA9IG5yOwotCQkJYnJlYWs7Ci0JCX0KLQkJcmV0ICs9IG5yOwotCQlpZiAobnIgIT0gbGVuKQotCQkJYnJlYWs7Ci0JfQogb3V0OgogCWlmIChpb3YgIT0gaW92c3RhY2spCiAJCWtmcmVlKGlvdik7CkBAIC0xMjk4LDcgKzEyNzIsNyBAQAogCQlnb3RvIG91dDsKIAogCXJldCA9IC1FSU5WQUw7Ci0JaWYgKCFmaWxlLT5mX29wIHx8ICghZmlsZS0+Zl9vcC0+cmVhZHYgJiYgIWZpbGUtPmZfb3AtPnJlYWQpKQorCWlmICghZmlsZS0+Zl9vcCB8fCAoIWZpbGUtPmZfb3AtPmFpb19yZWFkICYmICFmaWxlLT5mX29wLT5yZWFkKSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFJFQUQsIGZpbGUsIHZlYywgdmxlbiwgJmZpbGUtPmZfcG9zKTsKQEAgLTEzMjEsNyArMTI5NSw3IEBACiAJCWdvdG8gb3V0OwogCiAJcmV0ID0gLUVJTlZBTDsKLQlpZiAoIWZpbGUtPmZfb3AgfHwgKCFmaWxlLT5mX29wLT53cml0ZXYgJiYgIWZpbGUtPmZfb3AtPndyaXRlKSkKKwlpZiAoIWZpbGUtPmZfb3AgfHwgKCFmaWxlLT5mX29wLT5haW9fd3JpdGUgJiYgIWZpbGUtPmZfb3AtPndyaXRlKSkKIAkJZ290byBvdXQ7CiAKIAlyZXQgPSBjb21wYXRfZG9fcmVhZHZfd3JpdGV2KFdSSVRFLCBmaWxlLCB2ZWMsIHZsZW4sICZmaWxlLT5mX3Bvcyk7CmRpZmYgLS1naXQgYS9mcy9jb21wYXRfaW9jdGwuYyBiL2ZzL2NvbXBhdF9pb2N0bC5jCmluZGV4IDQwNjNhOTMuLjI3Y2ExYWEgMTAwNjQ0Ci0tLSBhL2ZzL2NvbXBhdF9pb2N0bC5jCisrKyBiL2ZzL2NvbXBhdF9pb2N0bC5jCkBAIC00MCwxNSArNDAsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9wcHBveC5oPgogI2luY2x1ZGUgPGxpbnV4L210aW8uaD4KICNpbmNsdWRlIDxsaW51eC9jZHJvbS5oPgotI2luY2x1ZGUgPGxpbnV4L2xvb3AuaD4KICNpbmNsdWRlIDxsaW51eC9hdXRvX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvYXV0b19mczQuaD4KICNpbmNsdWRlIDxsaW51eC90dHkuaD4KICNpbmNsdWRlIDxsaW51eC92dF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZmIuaD4KLSNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgvZXh0M19qYmQuaD4KLSNpbmNsdWRlIDxsaW51eC9leHQzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9yYXcuaD4KQEAgLTYwLDEyICs1NiwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcmlhbC5oPgotI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaWZfdHVuLmg+CiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KLSNpbmNsdWRlIDxsaW51eC9uY3BfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvd2lyZWxlc3MuaD4KQEAgLTExMyw3ICsxMDcsNiBAQAogI2luY2x1ZGUgPGxpbnV4L25iZC5oPgogI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZpbHRlci5oPgotI2luY2x1ZGUgPGxpbnV4L21zZG9zX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvcGt0Y2R2ZC5oPgogCiAjaW5jbHVkZSA8bGludXgvaGlkZGV2Lmg+CkBAIC0xMjQsMjEgKzExNyw2IEBACiAjaW5jbHVkZSA8bGludXgvZHZiL3ZpZGVvLmg+CiAjaW5jbHVkZSA8bGludXgvbHAuaD4KIAotLyogQWllZS4gU29tZW9uZSBkb2VzIG5vdCBmaW5kIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGludCBhbmQgbG9uZyAqLwotI2RlZmluZSBFWFQyX0lPQzMyX0dFVEZMQUdTICAgICAgICAgICAgICAgX0lPUignZicsIDEsIGludCkKLSNkZWZpbmUgRVhUMl9JT0MzMl9TRVRGTEFHUyAgICAgICAgICAgICAgIF9JT1coJ2YnLCAyLCBpbnQpCi0jZGVmaW5lIEVYVDNfSU9DMzJfR0VUVkVSU0lPTiAgICAgICAgICAgICBfSU9SKCdmJywgMywgaW50KQotI2RlZmluZSBFWFQzX0lPQzMyX1NFVFZFUlNJT04gICAgICAgICAgICAgX0lPVygnZicsIDQsIGludCkKLSNkZWZpbmUgRVhUM19JT0MzMl9HRVRSU1ZTWiAgICAgICAgICAgICAgIF9JT1IoJ2YnLCA1LCBpbnQpCi0jZGVmaW5lIEVYVDNfSU9DMzJfU0VUUlNWU1ogICAgICAgICAgICAgICBfSU9XKCdmJywgNiwgaW50KQotI2RlZmluZSBFWFQzX0lPQzMyX0dST1VQX0VYVEVORCAgICAgICAgICAgX0lPVygnZicsIDcsIHVuc2lnbmVkIGludCkKLSNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCi0jZGVmaW5lIEVYVDNfSU9DMzJfV0FJVF9GT1JfUkVBRE9OTFkgICAgICBfSU9SKCdmJywgOTksIGludCkKLSNlbmRpZgotCi0jZGVmaW5lIEVYVDJfSU9DMzJfR0VUVkVSU0lPTiAgICAgICAgICAgICBfSU9SKCd2JywgMSwgaW50KQotI2RlZmluZSBFWFQyX0lPQzMyX1NFVFZFUlNJT04gICAgICAgICAgICAgX0lPVygndicsIDIsIGludCkKLQogc3RhdGljIGludCBkb19pb2N0bDMyX3BvaW50ZXIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhcmcsIHN0cnVjdCBmaWxlICpmKQogewpAQCAtMTc2LDM0ICsxNTQsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgZG9fZXh0Ml9pb2N0bCh1bnNpZ25lZCBpbnQgZmQsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQotewotCS8qIFRoZXNlIGFyZSBqdXN0IG1pc25hbWVkLCB0aGV5IGFjdHVhbGx5IGdldC9wdXQgZnJvbS90byB1c2VyIGFuIGludCAqLwotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBFWFQyX0lPQzMyX0dFVEZMQUdTOiBjbWQgPSBFWFQyX0lPQ19HRVRGTEFHUzsgYnJlYWs7Ci0JY2FzZSBFWFQyX0lPQzMyX1NFVEZMQUdTOiBjbWQgPSBFWFQyX0lPQ19TRVRGTEFHUzsgYnJlYWs7Ci0JY2FzZSBFWFQyX0lPQzMyX0dFVFZFUlNJT046IGNtZCA9IEVYVDJfSU9DX0dFVFZFUlNJT047IGJyZWFrOwotCWNhc2UgRVhUMl9JT0MzMl9TRVRWRVJTSU9OOiBjbWQgPSBFWFQyX0lPQ19TRVRWRVJTSU9OOyBicmVhazsKLQl9Ci0JcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOwotfQotCi1zdGF0aWMgaW50IGRvX2V4dDNfaW9jdGwodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQkvKiBUaGVzZSBhcmUganVzdCBtaXNuYW1lZCwgdGhleSBhY3R1YWxseSBnZXQvcHV0IGZyb20vdG8gdXNlciBhbiBpbnQgKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgRVhUM19JT0MzMl9HRVRWRVJTSU9OOiBjbWQgPSBFWFQzX0lPQ19HRVRWRVJTSU9OOyBicmVhazsKLQljYXNlIEVYVDNfSU9DMzJfU0VUVkVSU0lPTjogY21kID0gRVhUM19JT0NfU0VUVkVSU0lPTjsgYnJlYWs7Ci0JY2FzZSBFWFQzX0lPQzMyX0dFVFJTVlNaOiBjbWQgPSBFWFQzX0lPQ19HRVRSU1ZTWjsgYnJlYWs7Ci0JY2FzZSBFWFQzX0lPQzMyX1NFVFJTVlNaOiBjbWQgPSBFWFQzX0lPQ19TRVRSU1ZTWjsgYnJlYWs7Ci0JY2FzZSBFWFQzX0lPQzMyX0dST1VQX0VYVEVORDogY21kID0gRVhUM19JT0NfR1JPVVBfRVhURU5EOyBicmVhazsKLSNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCi0JY2FzZSBFWFQzX0lPQzMyX1dBSVRfRk9SX1JFQURPTkxZOiBjbWQgPSBFWFQzX0lPQ19XQUlUX0ZPUl9SRUFET05MWTsgYnJlYWs7Ci0jZW5kaWYKLQl9Ci0JcmV0dXJuIHN5c19pb2N0bChmZCwgY21kLCAodW5zaWduZWQgbG9uZyljb21wYXRfcHRyKGFyZykpOwotfQotCiBzdHJ1Y3QgY29tcGF0X3ZpZGVvX2V2ZW50IHsKIAlpbnQzMl90CQl0eXBlOwogCWNvbXBhdF90aW1lX3QJdGltZXN0YW1wOwpAQCAtNjk0LDYgKzY0NCw3IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CTE9DSwogc3RydWN0IGhkX2dlb21ldHJ5MzIgewogCXVuc2lnbmVkIGNoYXIgaGVhZHM7CiAJdW5zaWduZWQgY2hhciBzZWN0b3JzOwpAQCAtOTE4LDYgKzg2OSw3IEBACiAJfQogCXJldHVybiBlcnI7CiB9CisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCiAKIHN0cnVjdCBzb2NrX2Zwcm9nMzIgewogCXVuc2lnbmVkIHNob3J0CWxlbjsKQEAgLTEwNDEsNiArOTkzLDcgQEAKIH0KIAogCisjaWZkZWYgQ09ORklHX0JMT0NLCiBzdHJ1Y3QgbXRnZXQzMiB7CiAJY29tcGF0X2xvbmdfdAltdF90eXBlOwogCWNvbXBhdF9sb25nX3QJbXRfcmVzaWQ7CkBAIC0xMjEzLDczICsxMTY2LDcgQEAKIAogCXJldHVybiBlcnI7CiB9Ci0KLXN0cnVjdCBsb29wX2luZm8zMiB7Ci0JY29tcGF0X2ludF90CWxvX251bWJlcjsgICAgICAvKiBpb2N0bCByL28gKi8KLQljb21wYXRfZGV2X3QJbG9fZGV2aWNlOyAgICAgIC8qIGlvY3RsIHIvbyAqLwotCWNvbXBhdF91bG9uZ190CWxvX2lub2RlOyAgICAgICAvKiBpb2N0bCByL28gKi8KLQljb21wYXRfZGV2X3QJbG9fcmRldmljZTsgICAgIC8qIGlvY3RsIHIvbyAqLwotCWNvbXBhdF9pbnRfdAlsb19vZmZzZXQ7Ci0JY29tcGF0X2ludF90CWxvX2VuY3J5cHRfdHlwZTsKLQljb21wYXRfaW50X3QJbG9fZW5jcnlwdF9rZXlfc2l6ZTsgICAgLyogaW9jdGwgdy9vICovCi0JY29tcGF0X2ludF90CWxvX2ZsYWdzOyAgICAgICAvKiBpb2N0bCByL28gKi8KLQljaGFyCQlsb19uYW1lW0xPX05BTUVfU0laRV07Ci0JdW5zaWduZWQgY2hhcglsb19lbmNyeXB0X2tleVtMT19LRVlfU0laRV07IC8qIGlvY3RsIHcvbyAqLwotCWNvbXBhdF91bG9uZ190CWxvX2luaXRbMl07Ci0JY2hhcgkJcmVzZXJ2ZWRbNF07Ci19OwotCi1zdGF0aWMgaW50IGxvb3Bfc3RhdHVzKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JbW1fc2VnbWVudF90IG9sZF9mcyA9IGdldF9mcygpOwotCXN0cnVjdCBsb29wX2luZm8gbDsKLQlzdHJ1Y3QgbG9vcF9pbmZvMzIgX191c2VyICp1bDsKLQlpbnQgZXJyID0gLUVJTlZBTDsKLQotCXVsID0gY29tcGF0X3B0cihhcmcpOwotCXN3aXRjaChjbWQpIHsKLQljYXNlIExPT1BfU0VUX1NUQVRVUzoKLQkJZXJyID0gZ2V0X3VzZXIobC5sb19udW1iZXIsICZ1bC0+bG9fbnVtYmVyKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIobC5sb19kZXZpY2UsICZ1bC0+bG9fZGV2aWNlKTsKLQkJZXJyIHw9IF9fZ2V0X3VzZXIobC5sb19pbm9kZSwgJnVsLT5sb19pbm9kZSk7Ci0JCWVyciB8PSBfX2dldF91c2VyKGwubG9fcmRldmljZSwgJnVsLT5sb19yZGV2aWNlKTsKLQkJZXJyIHw9IF9fY29weV9mcm9tX3VzZXIoJmwubG9fb2Zmc2V0LCAmdWwtPmxvX29mZnNldCwKLQkJICAgICAgICA4ICsgKHVuc2lnbmVkIGxvbmcpbC5sb19pbml0IC0gKHVuc2lnbmVkIGxvbmcpJmwubG9fb2Zmc2V0KTsKLQkJaWYgKGVycikgewotCQkJZXJyID0gLUVGQVVMVDsKLQkJfSBlbHNlIHsKLQkJCXNldF9mcyAoS0VSTkVMX0RTKTsKLQkJCWVyciA9IHN5c19pb2N0bCAoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJmwpOwotCQkJc2V0X2ZzIChvbGRfZnMpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgTE9PUF9HRVRfU1RBVFVTOgotCQlzZXRfZnMgKEtFUk5FTF9EUyk7Ci0JCWVyciA9IHN5c19pb2N0bCAoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJmwpOwotCQlzZXRfZnMgKG9sZF9mcyk7Ci0JCWlmICghZXJyKSB7Ci0JCQllcnIgPSBwdXRfdXNlcihsLmxvX251bWJlciwgJnVsLT5sb19udW1iZXIpOwotCQkJZXJyIHw9IF9fcHV0X3VzZXIobC5sb19kZXZpY2UsICZ1bC0+bG9fZGV2aWNlKTsKLQkJCWVyciB8PSBfX3B1dF91c2VyKGwubG9faW5vZGUsICZ1bC0+bG9faW5vZGUpOwotCQkJZXJyIHw9IF9fcHV0X3VzZXIobC5sb19yZGV2aWNlLCAmdWwtPmxvX3JkZXZpY2UpOwotCQkJZXJyIHw9IF9fY29weV90b191c2VyKCZ1bC0+bG9fb2Zmc2V0LCAmbC5sb19vZmZzZXQsCi0JCQkJKHVuc2lnbmVkIGxvbmcpbC5sb19pbml0IC0gKHVuc2lnbmVkIGxvbmcpJmwubG9fb2Zmc2V0KTsKLQkJCWlmIChlcnIpCi0JCQkJZXJyID0gLUVGQVVMVDsKLQkJfQotCQlicmVhazsKLQlkZWZhdWx0OiB7Ci0JCXN0YXRpYyBpbnQgY291bnQ7Ci0JCWlmICgrK2NvdW50IDw9IDIwKQotCQkJcHJpbnRrKCIlczogVW5rbm93biBsb29wIGlvY3RsIGNtZCwgZmQoJWQpICIKLQkJCSAgICAgICAiY21kKCUwOHgpIGFyZyglMDhseClcbiIsCi0JCQkgICAgICAgX19GVU5DVElPTl9fLCBmZCwgY21kLCBhcmcpOwotCX0KLQl9Ci0JcmV0dXJuIGVycjsKLX0KLQotZXh0ZXJuIGludCB0dHlfaW9jdGwoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOworI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogCiAjaWZkZWYgQ09ORklHX1ZUCiAKQEAgLTE2MDcsNiArMTQ5NCw3IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKKyNpZmRlZiBDT05GSUdfQkxPQ0sKIHN0YXRpYyBpbnQgYnJva2VuX2Jsa2dldHNpemUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAkvKiBUaGUgbWtzd2FwIGJpbmFyeSBoYXJkIGNvZGVzIGl0IHRvIEludGVsIHZhbHVlIDotKCgoICovCkBAIC0xNjQxLDEyICsxNTI5LDE0IEBACiAKIAlyZXR1cm4gc3lzX2lvY3RsKGZkLCBjbWQsICh1bnNpZ25lZCBsb25nKWEpOwogfQorI2VuZGlmCiAKIHN0YXRpYyBpbnQgaW9jX3NldHRpbWVvdXQodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlyZXR1cm4gcndfbG9uZyhmZCwgQVVUT0ZTX0lPQ19TRVRUSU1FT1VULCBhcmcpOwogfQogCisjaWZkZWYgQ09ORklHX0JMT0NLCiAvKiBGaXggc2l6ZW9mKHNpemVvZigpKSBicmVha2FnZSAqLwogI2RlZmluZSBCTEtCU1pHRVRfMzIgICBfSU9SKDB4MTIsMTEyLGludCkKICNkZWZpbmUgQkxLQlNaU0VUXzMyICAgX0lPVygweDEyLDExMyxpbnQpCkBAIC0xNjY3LDYgKzE1NTcsNyBAQAogewogICAgICAgIHJldHVybiBzeXNfaW9jdGwoZmQsIEJMS0dFVFNJWkU2NCwgKHVuc2lnbmVkIGxvbmcpY29tcGF0X3B0cihhcmcpKTsKIH0KKyNlbmRpZgogCiAvKiBCbHVldG9vdGggaW9jdGxzICovCiAjZGVmaW5lIEhDSVVBUlRTRVRQUk9UTwlfSU9XKCdVJywgMjAwLCBpbnQpCkBAIC0xNjg3LDYgKzE1NzgsNyBAQAogI2RlZmluZSBISURQR0VUQ09OTkxJU1QJX0lPUignSCcsIDIxMCwgaW50KQogI2RlZmluZSBISURQR0VUQ09OTklORk8JX0lPUignSCcsIDIxMSwgaW50KQogCisjaWZkZWYgQ09ORklHX0JMT0NLCiBzdHJ1Y3QgZmxvcHB5X3N0cnVjdDMyIHsKIAljb21wYXRfdWludF90CXNpemU7CiAJY29tcGF0X3VpbnRfdAlzZWN0OwpAQCAtMjAxMSw2ICsxOTAzLDcgQEAKIAlrZnJlZShrYXJnKTsKIAlyZXR1cm4gZXJyOwogfQorI2VuZGlmCiAKIHN0cnVjdCBtdGRfb29iX2J1ZjMyIHsKIAl1X2ludDMyX3Qgc3RhcnQ7CkBAIC0yMDUyLDYxICsxOTQ1LDcgQEAKIAlyZXR1cm4gZXJyOwogfQkKIAotI2RlZmluZQlWRkFUX0lPQ1RMX1JFQURESVJfQk9USDMyCV9JT1IoJ3InLCAxLCBzdHJ1Y3QgY29tcGF0X2RpcmVudFsyXSkKLSNkZWZpbmUJVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUMzIJX0lPUigncicsIDIsIHN0cnVjdCBjb21wYXRfZGlyZW50WzJdKQotCi1zdGF0aWMgbG9uZwotcHV0X2RpcmVudDMyIChzdHJ1Y3QgZGlyZW50ICpkLCBzdHJ1Y3QgY29tcGF0X2RpcmVudCBfX3VzZXIgKmQzMikKLXsKLSAgICAgICAgaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBkMzIsIHNpemVvZihzdHJ1Y3QgY29tcGF0X2RpcmVudCkpKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgICAgIF9fcHV0X3VzZXIoZC0+ZF9pbm8sICZkMzItPmRfaW5vKTsKLSAgICAgICAgX19wdXRfdXNlcihkLT5kX29mZiwgJmQzMi0+ZF9vZmYpOwotICAgICAgICBfX3B1dF91c2VyKGQtPmRfcmVjbGVuLCAmZDMyLT5kX3JlY2xlbik7Ci0gICAgICAgIGlmIChfX2NvcHlfdG9fdXNlcihkMzItPmRfbmFtZSwgZC0+ZF9uYW1lLCBkLT5kX3JlY2xlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0gICAgICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZmYXRfaW9jdGwzMih1bnNpZ25lZCBmZCwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgY29tcGF0X2RpcmVudCBfX3VzZXIgKnAgPSBjb21wYXRfcHRyKGFyZyk7Ci0JaW50IHJldDsKLQltbV9zZWdtZW50X3Qgb2xkZnMgPSBnZXRfZnMoKTsKLQlzdHJ1Y3QgZGlyZW50IGRbMl07Ci0KLQlzd2l0Y2goY21kKQotCXsKLSAgICAgICAgCWNhc2UgVkZBVF9JT0NUTF9SRUFERElSX0JPVEgzMjoKLSAgICAgICAgICAgICAgICAJY21kID0gVkZBVF9JT0NUTF9SRUFERElSX0JPVEg7Ci0gICAgICAgICAgICAgICAgCWJyZWFrOwotICAgICAgICAJY2FzZSBWRkFUX0lPQ1RMX1JFQURESVJfU0hPUlQzMjoKLSAgICAgICAgICAgICAgICAJY21kID0gVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUOwotICAgICAgICAgICAgICAgIAlicmVhazsKLQl9Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQlyZXQgPSBzeXNfaW9jdGwoZmQsY21kLCh1bnNpZ25lZCBsb25nKSZkKTsKLQlzZXRfZnMob2xkZnMpOwotCWlmIChyZXQgPj0gMCkgewotCQlyZXQgfD0gcHV0X2RpcmVudDMyKCZkWzBdLCBwKTsKLQkJcmV0IHw9IHB1dF9kaXJlbnQzMigmZFsxXSwgcCArIDEpOwotCX0KLQlyZXR1cm4gcmV0OwotfQotCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19VTlBBQ0szMiAgICAgICAgICAgICAgIF9JT1coMHhDRCwxLGludCkKLQotc3RhdGljIGludCByZWlzZXJmc19pb2N0bDMyKHVuc2lnbmVkIGZkLCB1bnNpZ25lZCBjbWQsIHVuc2lnbmVkIGxvbmcgcHRyKQotewotICAgICAgICBpZiAoY21kID09IFJFSVNFUkZTX0lPQ19VTlBBQ0szMikKLSAgICAgICAgICAgICAgICBjbWQgPSBSRUlTRVJGU19JT0NfVU5QQUNLOwotCi0gICAgICAgIHJldHVybiBzeXNfaW9jdGwoZmQsY21kLHB0cik7Ci19Ci0KKyNpZmRlZiBDT05GSUdfQkxPQ0sKIHN0cnVjdCByYXczMl9jb25maWdfcmVxdWVzdAogewogICAgICAgICBjb21wYXRfaW50X3QgICAgcmF3X21pbm9yOwpAQCAtMjE3MSw2ICsyMDEwLDcgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gcmV0OwogfQorI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogCiBzdHJ1Y3Qgc2VyaWFsX3N0cnVjdDMyIHsKICAgICAgICAgY29tcGF0X2ludF90ICAgIHR5cGU7CkBAIC0yNTA3LDE5MyArMjM0Nyw2IEBACiAJfQogfQogCi0jaWYgZGVmaW5lZChDT05GSUdfTkNQX0ZTKSB8fCBkZWZpbmVkKENPTkZJR19OQ1BfRlNfTU9EVUxFKQotc3RydWN0IG5jcF9pb2N0bF9yZXF1ZXN0XzMyIHsKLQl1MzIgZnVuY3Rpb247Ci0JdTMyIHNpemU7Ci0JY29tcGF0X2NhZGRyX3QgZGF0YTsKLX07Ci0KLXN0cnVjdCBuY3BfZnNfaW5mb192Ml8zMiB7Ci0JczMyIHZlcnNpb247Ci0JdTMyIG1vdW50ZWRfdWlkOwotCXUzMiBjb25uZWN0aW9uOwotCXUzMiBidWZmZXJfc2l6ZTsKLQotCXUzMiB2b2x1bWVfbnVtYmVyOwotCXUzMiBkaXJlY3RvcnlfaWQ7Ci0KLQl1MzIgZHVtbXkxOwotCXUzMiBkdW1teTI7Ci0JdTMyIGR1bW15MzsKLX07Ci0KLXN0cnVjdCBuY3Bfb2JqZWN0bmFtZV9pb2N0bF8zMgotewotCXMzMgkJYXV0aF90eXBlOwotCXUzMgkJb2JqZWN0X25hbWVfbGVuOwotCWNvbXBhdF9jYWRkcl90CW9iamVjdF9uYW1lOwkvKiBhbiB1c2Vyc3BhY2UgZGF0YSwgaW4gbW9zdCBjYXNlcyB1c2VyIG5hbWUgKi8KLX07Ci0KLXN0cnVjdCBuY3BfcHJpdmF0ZWRhdGFfaW9jdGxfMzIKLXsKLQl1MzIJCWxlbjsKLQljb21wYXRfY2FkZHJfdAlkYXRhOwkJLyogfjEwMDAgZm9yIE5EUyAqLwotfTsKLQotI2RlZmluZQlOQ1BfSU9DX05DUFJFUVVFU1RfMzIJCV9JT1IoJ24nLCAxLCBzdHJ1Y3QgbmNwX2lvY3RsX3JlcXVlc3RfMzIpCi0jZGVmaW5lIE5DUF9JT0NfR0VUTU9VTlRVSUQyXzMyCQlfSU9XKCduJywgMiwgdTMyKQotI2RlZmluZSBOQ1BfSU9DX0dFVF9GU19JTkZPX1YyXzMyCV9JT1dSKCduJywgNCwgc3RydWN0IG5jcF9mc19pbmZvX3YyXzMyKQotI2RlZmluZSBOQ1BfSU9DX0dFVE9CSkVDVE5BTUVfMzIJX0lPV1IoJ24nLCA5LCBzdHJ1Y3QgbmNwX29iamVjdG5hbWVfaW9jdGxfMzIpCi0jZGVmaW5lIE5DUF9JT0NfU0VUT0JKRUNUTkFNRV8zMglfSU9SKCduJywgOSwgc3RydWN0IG5jcF9vYmplY3RuYW1lX2lvY3RsXzMyKQotI2RlZmluZSBOQ1BfSU9DX0dFVFBSSVZBVEVEQVRBXzMyCV9JT1dSKCduJywgMTAsIHN0cnVjdCBuY3BfcHJpdmF0ZWRhdGFfaW9jdGxfMzIpCi0jZGVmaW5lIE5DUF9JT0NfU0VUUFJJVkFURURBVEFfMzIJX0lPUignbicsIDEwLCBzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsXzMyKQotCi1zdGF0aWMgaW50IGRvX25jcF9uY3ByZXF1ZXN0KHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IG5jcF9pb2N0bF9yZXF1ZXN0XzMyIG4zMjsKLQlzdHJ1Y3QgbmNwX2lvY3RsX3JlcXVlc3QgX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJm4zMiwgY29tcGF0X3B0cihhcmcpLCBzaXplb2YobjMyKSkgfHwKLQkgICAgcHV0X3VzZXIobjMyLmZ1bmN0aW9uLCAmcC0+ZnVuY3Rpb24pIHx8Ci0JICAgIHB1dF91c2VyKG4zMi5zaXplLCAmcC0+c2l6ZSkgfHwKLQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihuMzIuZGF0YSksICZwLT5kYXRhKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBOQ1BfSU9DX05DUFJFUVVFU1QsICh1bnNpZ25lZCBsb25nKXApOwotfQotCi1zdGF0aWMgaW50IGRvX25jcF9nZXRtb3VudHVpZDIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0JX19rZXJuZWxfdWlkX3Qga3VpZDsKLQlpbnQgZXJyOwotCi0JY21kID0gTkNQX0lPQ19HRVRNT1VOVFVJRDI7Ci0KLQlzZXRfZnMoS0VSTkVMX0RTKTsKLQllcnIgPSBzeXNfaW9jdGwoZmQsIGNtZCwgKHVuc2lnbmVkIGxvbmcpJmt1aWQpOwotCXNldF9mcyhvbGRfZnMpOwotCi0JaWYgKCFlcnIpCi0JCWVyciA9IHB1dF91c2VyKGt1aWQsCi0JCQkgICAgICAgKHVuc2lnbmVkIGludCBfX3VzZXIgKikgY29tcGF0X3B0cihhcmcpKTsKLQotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fbmNwX2dldGZzaW5mbzIodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQltbV9zZWdtZW50X3Qgb2xkX2ZzID0gZ2V0X2ZzKCk7Ci0Jc3RydWN0IG5jcF9mc19pbmZvX3YyXzMyIG4zMjsKLQlzdHJ1Y3QgbmNwX2ZzX2luZm9fdjIgbjsKLQlpbnQgZXJyOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZuMzIsIGNvbXBhdF9wdHIoYXJnKSwgc2l6ZW9mKG4zMikpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQlpZiAobjMyLnZlcnNpb24gIT0gTkNQX0dFVF9GU19JTkZPX1ZFUlNJT05fVjIpCi0JCXJldHVybiAtRUlOVkFMOwotCW4udmVyc2lvbiA9IE5DUF9HRVRfRlNfSU5GT19WRVJTSU9OX1YyOwotCi0Jc2V0X2ZzKEtFUk5FTF9EUyk7Ci0JZXJyID0gc3lzX2lvY3RsKGZkLCBOQ1BfSU9DX0dFVF9GU19JTkZPX1YyLCAodW5zaWduZWQgbG9uZykmbik7Ci0Jc2V0X2ZzKG9sZF9mcyk7Ci0KLQlpZiAoIWVycikgewotCQluMzIudmVyc2lvbiA9IG4udmVyc2lvbjsKLQkJbjMyLm1vdW50ZWRfdWlkID0gbi5tb3VudGVkX3VpZDsKLQkJbjMyLmNvbm5lY3Rpb24gPSBuLmNvbm5lY3Rpb247Ci0JCW4zMi5idWZmZXJfc2l6ZSA9IG4uYnVmZmVyX3NpemU7Ci0JCW4zMi52b2x1bWVfbnVtYmVyID0gbi52b2x1bWVfbnVtYmVyOwotCQluMzIuZGlyZWN0b3J5X2lkID0gbi5kaXJlY3RvcnlfaWQ7Ci0JCW4zMi5kdW1teTEgPSBuLmR1bW15MTsKLQkJbjMyLmR1bW15MiA9IG4uZHVtbXkyOwotCQluMzIuZHVtbXkzID0gbi5kdW1teTM7Ci0JCWVyciA9IGNvcHlfdG9fdXNlcihjb21wYXRfcHRyKGFyZyksICZuMzIsIHNpemVvZihuMzIpKSA/IC1FRkFVTFQgOiAwOwotCX0KLQlyZXR1cm4gZXJyOwotfQotCi1zdGF0aWMgaW50IGRvX25jcF9nZXRvYmplY3RuYW1lKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IG5jcF9vYmplY3RuYW1lX2lvY3RsXzMyIG4zMiwgX191c2VyICpwMzIgPSBjb21wYXRfcHRyKGFyZyk7Ci0Jc3RydWN0IG5jcF9vYmplY3RuYW1lX2lvY3RsIF9fdXNlciAqcCA9IGNvbXBhdF9hbGxvY191c2VyX3NwYWNlKHNpemVvZigqcCkpOwotCXMzMiBhdXRoX3R5cGU7Ci0JdTMyIG5hbWVfbGVuOwotCWludCBlcnI7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJm4zMiwgcDMyLCBzaXplb2YobjMyKSkgfHwKLQkgICAgcHV0X3VzZXIobjMyLm9iamVjdF9uYW1lX2xlbiwgJnAtPm9iamVjdF9uYW1lX2xlbikgfHwKLQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihuMzIub2JqZWN0X25hbWUpLCAmcC0+b2JqZWN0X25hbWUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCWVyciA9IHN5c19pb2N0bChmZCwgTkNQX0lPQ19HRVRPQkpFQ1ROQU1FLCAodW5zaWduZWQgbG9uZylwKTsKLSAgICAgICAgaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChnZXRfdXNlcihhdXRoX3R5cGUsICZwLT5hdXRoX3R5cGUpIHx8Ci0JICAgIHB1dF91c2VyKGF1dGhfdHlwZSwgJnAzMi0+YXV0aF90eXBlKSB8fAotCSAgICBnZXRfdXNlcihuYW1lX2xlbiwgJnAtPm9iamVjdF9uYW1lX2xlbikgfHwKLQkgICAgcHV0X3VzZXIobmFtZV9sZW4sICZwMzItPm9iamVjdF9uYW1lX2xlbikpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fbmNwX3NldG9iamVjdG5hbWUodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgbmNwX29iamVjdG5hbWVfaW9jdGxfMzIgbjMyLCBfX3VzZXIgKnAzMiA9IGNvbXBhdF9wdHIoYXJnKTsKLQlzdHJ1Y3QgbmNwX29iamVjdG5hbWVfaW9jdGwgX191c2VyICpwID0gY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJm4zMiwgcDMyLCBzaXplb2YobjMyKSkgfHwKLQkgICAgcHV0X3VzZXIobjMyLmF1dGhfdHlwZSwgJnAtPmF1dGhfdHlwZSkgfHwKLQkgICAgcHV0X3VzZXIobjMyLm9iamVjdF9uYW1lX2xlbiwgJnAtPm9iamVjdF9uYW1lX2xlbikgfHwKLQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihuMzIub2JqZWN0X25hbWUpLCAmcC0+b2JqZWN0X25hbWUpKQotCQlyZXR1cm4gLUVGQVVMVDsKLQotCXJldHVybiBzeXNfaW9jdGwoZmQsIE5DUF9JT0NfU0VUT0JKRUNUTkFNRSwgKHVuc2lnbmVkIGxvbmcpcCk7Ci19Ci0KLXN0YXRpYyBpbnQgZG9fbmNwX2dldHByaXZhdGVkYXRhKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0Jc3RydWN0IG5jcF9wcml2YXRlZGF0YV9pb2N0bF8zMiBuMzIsIF9fdXNlciAqcDMyID0gY29tcGF0X3B0cihhcmcpOwotCXN0cnVjdCBuY3BfcHJpdmF0ZWRhdGFfaW9jdGwgX191c2VyICpwID0KLQkJY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7Ci0JdTMyIGxlbjsKLQlpbnQgZXJyOwotCi0JaWYgKGNvcHlfZnJvbV91c2VyKCZuMzIsIHAzMiwgc2l6ZW9mKG4zMikpIHx8Ci0JICAgIHB1dF91c2VyKG4zMi5sZW4sICZwLT5sZW4pIHx8Ci0JICAgIHB1dF91c2VyKGNvbXBhdF9wdHIobjMyLmRhdGEpLCAmcC0+ZGF0YSkpCi0JCXJldHVybiAtRUZBVUxUOwotCi0JZXJyID0gc3lzX2lvY3RsKGZkLCBOQ1BfSU9DX0dFVFBSSVZBVEVEQVRBLCAodW5zaWduZWQgbG9uZylwKTsKLSAgICAgICAgaWYgKGVycikKLQkJcmV0dXJuIGVycjsKLQotCWlmIChnZXRfdXNlcihsZW4sICZwLT5sZW4pIHx8Ci0JICAgIHB1dF91c2VyKGxlbiwgJnAzMi0+bGVuKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkb19uY3Bfc2V0cHJpdmF0ZWRhdGEodW5zaWduZWQgaW50IGZkLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKLXsKLQlzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsXzMyIG4zMjsKLQlzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsXzMyIF9fdXNlciAqcDMyID0gY29tcGF0X3B0cihhcmcpOwotCXN0cnVjdCBuY3BfcHJpdmF0ZWRhdGFfaW9jdGwgX191c2VyICpwID0KLQkJY29tcGF0X2FsbG9jX3VzZXJfc3BhY2Uoc2l6ZW9mKCpwKSk7Ci0KLQlpZiAoY29weV9mcm9tX3VzZXIoJm4zMiwgcDMyLCBzaXplb2YobjMyKSkgfHwKLQkgICAgcHV0X3VzZXIobjMyLmxlbiwgJnAtPmxlbikgfHwKLQkgICAgcHV0X3VzZXIoY29tcGF0X3B0cihuMzIuZGF0YSksICZwLT5kYXRhKSkKLQkJcmV0dXJuIC1FRkFVTFQ7Ci0KLQlyZXR1cm4gc3lzX2lvY3RsKGZkLCBOQ1BfSU9DX1NFVFBSSVZBVEVEQVRBLCAodW5zaWduZWQgbG9uZylwKTsKLX0KLSNlbmRpZgotCiBzdGF0aWMgaW50CiBscF90aW1lb3V0X3RyYW5zKHVuc2lnbmVkIGludCBmZCwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNzc3LDYgKzI0MzAsNyBAQAogSEFORExFX0lPQ1RMKFNJT0NSVE1TRywgcmV0X2VpbnZhbCkKIEhBTkRMRV9JT0NUTChTSU9DR1NUQU1QLCBkb19zaW9jZ3N0YW1wKQogI2VuZGlmCisjaWZkZWYgQ09ORklHX0JMT0NLCiBIQU5ETEVfSU9DVEwoSERJT19HRVRHRU8sIGhkaW9fZ2V0Z2VvKQogSEFORExFX0lPQ1RMKEJMS1JBR0VULCB3X2xvbmcpCiBIQU5ETEVfSU9DVEwoQkxLR0VUU0laRSwgd19sb25nKQpAQCAtMjgwMiwxNiArMjQ1NiwxNyBAQAogSEFORExFX0lPQ1RMKEZEV0VSUk9SR0VUMzIsIGZkX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKFNHX0lPLHNnX2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKFNHX0dFVF9SRVFVRVNUX1RBQkxFLCBzZ19ncnRfdHJhbnMpCisjZW5kaWYKIEhBTkRMRV9JT0NUTChQUFBJT0NHSURMRTMyLCBwcHBfaW9jdGxfdHJhbnMpCiBIQU5ETEVfSU9DVEwoUFBQSU9DU0NPTVBSRVNTMzIsIHBwcF9pb2N0bF90cmFucykKIEhBTkRMRV9JT0NUTChQUFBJT0NTUEFTUzMyLCBwcHBfc29ja19mcHJvZ19pb2N0bF90cmFucykKIEhBTkRMRV9JT0NUTChQUFBJT0NTQUNUSVZFMzIsIHBwcF9zb2NrX2Zwcm9nX2lvY3RsX3RyYW5zKQorI2lmZGVmIENPTkZJR19CTE9DSwogSEFORExFX0lPQ1RMKE1USU9DR0VUMzIsIG10X2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKE1USU9DUE9TMzIsIG10X2lvY3RsX3RyYW5zKQogSEFORExFX0lPQ1RMKENEUk9NUkVBREFVRElPLCBjZHJvbV9pb2N0bF90cmFucykKIEhBTkRMRV9JT0NUTChDRFJPTV9TRU5EX1BBQ0tFVCwgY2Ryb21faW9jdGxfdHJhbnMpCi1IQU5ETEVfSU9DVEwoTE9PUF9TRVRfU1RBVFVTLCBsb29wX3N0YXR1cykKLUhBTkRMRV9JT0NUTChMT09QX0dFVF9TVEFUVVMsIGxvb3Bfc3RhdHVzKQorI2VuZGlmCiAjZGVmaW5lIEFVVE9GU19JT0NfU0VUVElNRU9VVDMyIF9JT1dSKDB4OTMsMHg2NCx1bnNpZ25lZCBpbnQpCiBIQU5ETEVfSU9DVEwoQVVUT0ZTX0lPQ19TRVRUSU1FT1VUMzIsIGlvY19zZXR0aW1lb3V0KQogI2lmZGVmIENPTkZJR19WVApAQCAtMjgyMSwxOSArMjQ3Niw2IEBACiBIQU5ETEVfSU9DVEwoR0lPX1VOSU1BUCwgZG9fdW5pbWFwX2lvY3RsKQogSEFORExFX0lPQ1RMKEtERk9OVE9QLCBkb19rZGZvbnRvcF9pb2N0bCkKICNlbmRpZgotSEFORExFX0lPQ1RMKEVYVDJfSU9DMzJfR0VURkxBR1MsIGRvX2V4dDJfaW9jdGwpCi1IQU5ETEVfSU9DVEwoRVhUMl9JT0MzMl9TRVRGTEFHUywgZG9fZXh0Ml9pb2N0bCkKLUhBTkRMRV9JT0NUTChFWFQyX0lPQzMyX0dFVFZFUlNJT04sIGRvX2V4dDJfaW9jdGwpCi1IQU5ETEVfSU9DVEwoRVhUMl9JT0MzMl9TRVRWRVJTSU9OLCBkb19leHQyX2lvY3RsKQotSEFORExFX0lPQ1RMKEVYVDNfSU9DMzJfR0VUVkVSU0lPTiwgZG9fZXh0M19pb2N0bCkKLUhBTkRMRV9JT0NUTChFWFQzX0lPQzMyX1NFVFZFUlNJT04sIGRvX2V4dDNfaW9jdGwpCi1IQU5ETEVfSU9DVEwoRVhUM19JT0MzMl9HRVRSU1ZTWiwgZG9fZXh0M19pb2N0bCkKLUhBTkRMRV9JT0NUTChFWFQzX0lPQzMyX1NFVFJTVlNaLCBkb19leHQzX2lvY3RsKQotSEFORExFX0lPQ1RMKEVYVDNfSU9DMzJfR1JPVVBfRVhURU5ELCBkb19leHQzX2lvY3RsKQotQ09NUEFUSUJMRV9JT0NUTChFWFQzX0lPQ19HUk9VUF9BREQpCi0jaWZkZWYgQ09ORklHX0pCRF9ERUJVRwotSEFORExFX0lPQ1RMKEVYVDNfSU9DMzJfV0FJVF9GT1JfUkVBRE9OTFksIGRvX2V4dDNfaW9jdGwpCi0jZW5kaWYKIC8qIE9uZSBTTUIgaW9jdGwgbmVlZHMgdHJhbnNsYXRpb25zLiAqLwogI2RlZmluZSBTTUJfSU9DX0dFVE1PVU5UVUlEXzMyIF9JT1IoJ3UnLCAxLCBjb21wYXRfdWlkX3QpCiBIQU5ETEVfSU9DVEwoU01CX0lPQ19HRVRNT1VOVFVJRF8zMiwgZG9fc21iX2dldG1vdW50dWlkKQpAQCAtMjg2MywxNiArMjUwNSwxNCBAQAogSEFORExFX0lPQ1RMKFNPTkVUX0dFVEZSQU1JTkcsIGRvX2F0bV9pb2N0bCkKIEhBTkRMRV9JT0NUTChTT05FVF9HRVRGUlNFTlNFLCBkb19hdG1faW9jdGwpCiAvKiBibG9jayBzdHVmZiAqLworI2lmZGVmIENPTkZJR19CTE9DSwogSEFORExFX0lPQ1RMKEJMS0JTWkdFVF8zMiwgZG9fYmxrYnN6Z2V0KQogSEFORExFX0lPQ1RMKEJMS0JTWlNFVF8zMiwgZG9fYmxrYnN6c2V0KQogSEFORExFX0lPQ1RMKEJMS0dFVFNJWkU2NF8zMiwgZG9fYmxrZ2V0c2l6ZTY0KQotLyogdmZhdCAqLwotSEFORExFX0lPQ1RMKFZGQVRfSU9DVExfUkVBRERJUl9CT1RIMzIsIHZmYXRfaW9jdGwzMikKLUhBTkRMRV9JT0NUTChWRkFUX0lPQ1RMX1JFQURESVJfU0hPUlQzMiwgdmZhdF9pb2N0bDMyKQotSEFORExFX0lPQ1RMKFJFSVNFUkZTX0lPQ19VTlBBQ0szMiwgcmVpc2VyZnNfaW9jdGwzMikKIC8qIFJhdyBkZXZpY2VzICovCiBIQU5ETEVfSU9DVEwoUkFXX1NFVEJJTkQsIHJhd19pb2N0bCkKIEhBTkRMRV9JT0NUTChSQVdfR0VUQklORCwgcmF3X2lvY3RsKQorI2VuZGlmCiAvKiBTZXJpYWwgKi8KIEhBTkRMRV9JT0NUTChUSU9DR1NFUklBTCwgc2VyaWFsX3N0cnVjdF9pb2N0bCkKIEhBTkRMRV9JT0NUTChUSU9DU1NFUklBTCwgc2VyaWFsX3N0cnVjdF9pb2N0bCkKQEAgLTI5MjAsMTYgKzI1NjAsNiBAQAogSEFORExFX0lPQ1RMKFJUQ19FUE9DSF9SRUFEMzIsIHJ0Y19pb2N0bCkKIEhBTkRMRV9JT0NUTChSVENfRVBPQ0hfU0VUMzIsIHJ0Y19pb2N0bCkKIAotI2lmIGRlZmluZWQoQ09ORklHX05DUF9GUykgfHwgZGVmaW5lZChDT05GSUdfTkNQX0ZTX01PRFVMRSkKLUhBTkRMRV9JT0NUTChOQ1BfSU9DX05DUFJFUVVFU1RfMzIsIGRvX25jcF9uY3ByZXF1ZXN0KQotSEFORExFX0lPQ1RMKE5DUF9JT0NfR0VUTU9VTlRVSUQyXzMyLCBkb19uY3BfZ2V0bW91bnR1aWQyKQotSEFORExFX0lPQ1RMKE5DUF9JT0NfR0VUX0ZTX0lORk9fVjJfMzIsIGRvX25jcF9nZXRmc2luZm8yKQotSEFORExFX0lPQ1RMKE5DUF9JT0NfR0VUT0JKRUNUTkFNRV8zMiwgZG9fbmNwX2dldG9iamVjdG5hbWUpCi1IQU5ETEVfSU9DVEwoTkNQX0lPQ19TRVRPQkpFQ1ROQU1FXzMyLCBkb19uY3Bfc2V0b2JqZWN0bmFtZSkKLUhBTkRMRV9JT0NUTChOQ1BfSU9DX0dFVFBSSVZBVEVEQVRBXzMyLCBkb19uY3BfZ2V0cHJpdmF0ZWRhdGEpCi1IQU5ETEVfSU9DVEwoTkNQX0lPQ19TRVRQUklWQVRFREFUQV8zMiwgZG9fbmNwX3NldHByaXZhdGVkYXRhKQotI2VuZGlmCi0KIC8qIGR2YiAqLwogSEFORExFX0lPQ1RMKFZJREVPX0dFVF9FVkVOVCwgZG9fdmlkZW9fZ2V0X2V2ZW50KQogSEFORExFX0lPQ1RMKFZJREVPX1NUSUxMUElDVFVSRSwgZG9fdmlkZW9fc3RpbGxwaWN0dXJlKQpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCA4MTZlOGVmLi44YTNiNmExIDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9kaXIuYworKysgYi9mcy9jb25maWdmcy9kaXIuYwpAQCAtMTM5LDcgKzEzOSw3IEBACiAJaW5vZGUtPmlfZm9wID0gJmNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zOwogCiAJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xNjksNyArMTY5LDcgQEAKIAlpZiAoIWVycm9yKSB7CiAJCWVycm9yID0gY29uZmlnZnNfY3JlYXRlKGQsIG1vZGUsIGluaXRfZGlyKTsKIAkJaWYgKCFlcnJvcikgewotCQkJcC0+ZF9pbm9kZS0+aV9ubGluaysrOworCQkJaW5jX25saW5rKHAtPmRfaW5vZGUpOwogCQkJKGQpLT5kX29wID0gJmNvbmZpZ2ZzX2RlbnRyeV9vcHM7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCA9IGQtPmRfZnNkYXRhOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZmlsZS5jIGIvZnMvY29uZmlnZnMvZmlsZS5jCmluZGV4IGY0OTk4MDMuLjg1MTA1ZTUgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2ZpbGUuYworKysgYi9mcy9jb25maWdmcy9maWxlLmMKQEAgLTI3NCw5ICsyNzQsOCBAQAogCS8qIE5vIGVycm9yPyBHcmVhdCwgYWxsb2NhdGUgYSBidWZmZXIgZm9yIHRoZSBmaWxlLCBhbmQgc3RvcmUgaXQKIAkgKiBpdCBpbiBmaWxlLT5wcml2YXRlX2RhdGEgZm9yIGVhc3kgYWNjZXNzLgogCSAqLwotCWJ1ZmZlciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWdmc19idWZmZXIpLEdGUF9LRVJORUwpOworCWJ1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjb25maWdmc19idWZmZXIpLEdGUF9LRVJORUwpOwogCWlmIChidWZmZXIpIHsKLQkJbWVtc2V0KGJ1ZmZlciwwLHNpemVvZihzdHJ1Y3QgY29uZmlnZnNfYnVmZmVyKSk7CiAJCWluaXRfTVVURVgoJmJ1ZmZlci0+c2VtKTsKIAkJYnVmZmVyLT5uZWVkc19yZWFkX2ZpbGwgPSAxOwogCQlidWZmZXItPm9wcyA9IG9wczsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMgYi9mcy9jb25maWdmcy9pbm9kZS5jCmluZGV4IGUxNDQ4OGMuLmZiMTg5MTcgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2lub2RlLmMKKysrIGIvZnMvY29uZmlnZnMvaW5vZGUuYwpAQCAtNzYsMTEgKzc2LDEwIEBACiAKIAlpZiAoIXNkX2lhdHRyKSB7CiAJCS8qIHNldHRpbmcgYXR0cmlidXRlcyBmb3IgdGhlIGZpcnN0IHRpbWUsIGFsbG9jYXRlIG5vdyAqLwotCQlzZF9pYXR0ciA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBpYXR0ciksIEdGUF9LRVJORUwpOworCQlzZF9pYXR0ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpYXR0ciksIEdGUF9LRVJORUwpOwogCQlpZiAoIXNkX2lhdHRyKQogCQkJcmV0dXJuIC1FTk9NRU07CiAJCS8qIGFzc2lnbiBkZWZhdWx0IGF0dHJpYnV0ZXMgKi8KLQkJbWVtc2V0KHNkX2lhdHRyLCAwLCBzaXplb2Yoc3RydWN0IGlhdHRyKSk7CiAJCXNkX2lhdHRyLT5pYV9tb2RlID0gc2QtPnNfbW9kZTsKIAkJc2RfaWF0dHItPmlhX3VpZCA9IDA7CiAJCXNkX2lhdHRyLT5pYV9naWQgPSAwOwpAQCAtMTM2LDcgKzEzNSw2IEBACiB7CiAJc3RydWN0IGlub2RlICogaW5vZGUgPSBuZXdfaW5vZGUoY29uZmlnZnNfc2IpOwogCWlmIChpbm9kZSkgewotCQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCQlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5hX29wcyA9ICZjb25maWdmc19hb3BzOwogCQlpbm9kZS0+aV9tYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gJmNvbmZpZ2ZzX2JhY2tpbmdfZGV2X2luZm87CmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9tb3VudC5jIGIvZnMvY29uZmlnZnMvbW91bnQuYwppbmRleCAzZTVmZTg0Li42OGJkNWM5IDEwMDY0NAotLS0gYS9mcy9jb25maWdmcy9tb3VudC5jCisrKyBiL2ZzL2NvbmZpZ2ZzL21vdW50LmMKQEAgLTg0LDcgKzg0LDcgQEAKIAkJaW5vZGUtPmlfb3AgPSAmY29uZmlnZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX2ZvcCA9ICZjb25maWdmc19kaXJfb3BlcmF0aW9uczsKIAkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JCWlub2RlLT5pX25saW5rKys7CisJCWluY19ubGluayhpbm9kZSk7CiAJfSBlbHNlIHsKIAkJcHJfZGVidWcoImNvbmZpZ2ZzOiBjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy9pbm9kZS5jIGIvZnMvY3JhbWZzL2lub2RlLmMKaW5kZXggMjIzYzA0My4uYTYyNGMzZSAxMDA2NDQKLS0tIGEvZnMvY3JhbWZzL2lub2RlLmMKKysrIGIvZnMvY3JhbWZzL2lub2RlLmMKQEAgLTczLDcgKzczLDYgQEAKIAlpbm9kZS0+aV91aWQgPSBjcmFtZnNfaW5vZGUtPnVpZDsKIAlpbm9kZS0+aV9zaXplID0gY3JhbWZzX2lub2RlLT5zaXplOwogCWlub2RlLT5pX2Jsb2NrcyA9IChjcmFtZnNfaW5vZGUtPnNpemUgLSAxKSAvIDUxMiArIDE7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAlpbm9kZS0+aV9naWQgPSBjcmFtZnNfaW5vZGUtPmdpZDsKIAkvKiBTdHJ1Y3QgY29weSBpbnRlbnRpb25hbCAqLwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IHplcm90aW1lOwpAQCAtMjQyLDExICsyNDEsMTAgQEAKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmFtZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOworCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjcmFtZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzYi0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZihzdHJ1Y3QgY3JhbWZzX3NiX2luZm8pKTsKIAogCS8qIEludmFsaWRhdGUgdGhlIHJlYWQgYnVmZmVycyBvbiBtb3VudDogdGhpbmsgZGlzayBjaGFuZ2UuLiAqLwogCW11dGV4X2xvY2soJnJlYWRfbXV0ZXgpOwpAQCAtNTQ1LDggKzU0MywxNSBAQAogCiBzdGF0aWMgaW50IF9faW5pdCBpbml0X2NyYW1mc19mcyh2b2lkKQogewotCWNyYW1mc191bmNvbXByZXNzX2luaXQoKTsKLQlyZXR1cm4gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmY3JhbWZzX2ZzX3R5cGUpOworCWludCBydjsKKworCXJ2ID0gY3JhbWZzX3VuY29tcHJlc3NfaW5pdCgpOworCWlmIChydiA8IDApCisJCXJldHVybiBydjsKKwlydiA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJmNyYW1mc19mc190eXBlKTsKKwlpZiAocnYgPCAwKQorCQljcmFtZnNfdW5jb21wcmVzc19leGl0KCk7CisJcmV0dXJuIHJ2OwogfQogCiBzdGF0aWMgdm9pZCBfX2V4aXQgZXhpdF9jcmFtZnNfZnModm9pZCkKZGlmZiAtLWdpdCBhL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMgYi9mcy9jcmFtZnMvdW5jb21wcmVzcy5jCmluZGV4IDhkZWY4OWYuLmZjM2NjYjcgMTAwNjQ0Ci0tLSBhL2ZzL2NyYW1mcy91bmNvbXByZXNzLmMKKysrIGIvZnMvY3JhbWZzL3VuY29tcHJlc3MuYwpAQCAtNjgsMTEgKzY4LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLWludCBjcmFtZnNfdW5jb21wcmVzc19leGl0KHZvaWQpCit2b2lkIGNyYW1mc191bmNvbXByZXNzX2V4aXQodm9pZCkKIHsKIAlpZiAoIS0taW5pdGlhbGl6ZWQpIHsKIAkJemxpYl9pbmZsYXRlRW5kKCZzdHJlYW0pOwogCQl2ZnJlZShzdHJlYW0ud29ya3NwYWNlKTsKIAl9Ci0JcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9kY2FjaGUuYyBiL2ZzL2RjYWNoZS5jCmluZGV4IDE3YjM5MmEuLmZjMmZhYTQgMTAwNjQ0Ci0tLSBhL2ZzL2RjYWNoZS5jCisrKyBiL2ZzL2RjYWNoZS5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VxbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9ib290bWVtLmg+CisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogCiBpbnQgc3lzY3RsX3Zmc19jYWNoZV9wcmVzc3VyZSBfX3JlYWRfbW9zdGx5ID0gMTAwOwpAQCAtMTg3Nyw5ICsxODc4LDYgQEAKIAogRVhQT1JUX1NZTUJPTChkX2dlbm9jaWRlKTsKIAotZXh0ZXJuIHZvaWQgYmRldl9jYWNoZV9pbml0KHZvaWQpOwotZXh0ZXJuIHZvaWQgY2hyZGV2X2luaXQodm9pZCk7Ci0KIHZvaWQgX19pbml0IHZmc19jYWNoZXNfaW5pdF9lYXJseSh2b2lkKQogewogCWRjYWNoZV9pbml0X2Vhcmx5KCk7CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2ZpbGUuYyBiL2ZzL2RlYnVnZnMvZmlsZS5jCmluZGV4IGU0YjQzMDUuLmJmMzkwMWEgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvZmlsZS5jCisrKyBiL2ZzL2RlYnVnZnMvZmlsZS5jCkBAIC0zMiw4ICszMiw4IEBACiAKIHN0YXRpYyBpbnQgZGVmYXVsdF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQogewotCWlmIChpbm9kZS0+dS5nZW5lcmljX2lwKQotCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWlmIChpbm9kZS0+aV9wcml2YXRlKQorCQlmaWxlLT5wcml2YXRlX2RhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9mcy9kZWJ1Z2ZzL2lub2RlLmMgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKaW5kZXggM2NhMjY4ZC4uZWNmM2RhOWUgMTAwNjQ0Ci0tLSBhL2ZzL2RlYnVnZnMvaW5vZGUuYworKysgYi9mcy9kZWJ1Z2ZzL2lub2RlLmMKQEAgLTQwLDcgKzQwLDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IDA7CiAJCWlub2RlLT5pX2dpZCA9IDA7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CkBAIC01NSw3ICs1NCw3IEBACiAJCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCiAJCQkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJCWlub2RlLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsoaW5vZGUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC04OCw3ICs4Nyw3IEBACiAJbW9kZSA9IChtb2RlICYgKFNfSVJXWFVHTyB8IFNfSVNWVFgpKSB8IFNfSUZESVI7CiAJcmVzID0gZGVidWdmc19ta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CiAJaWYgKCFyZXMpCi0JCWRpci0+aV9ubGluaysrOworCQlpbmNfbmxpbmsoZGlyKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xNjgsNyArMTY3LDcgQEAKICAqICAgICAgICAgIGRpcmVjdG9yeSBkZW50cnkgaWYgc2V0LiAgSWYgdGhpcyBwYXJhbWF0ZXIgaXMgTlVMTCwgdGhlbiB0aGUKICAqICAgICAgICAgIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSByb290IG9mIHRoZSBkZWJ1Z2ZzIGZpbGVzeXN0ZW0uCiAgKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlcgotICogICAgICAgIG9uLiAgVGhlIGlub2RlLnUuZ2VuZXJpY19pcCBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgorICogICAgICAgIG9uLiAgVGhlIGlub2RlLmlfcHJpdmF0ZSBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgogICogICAgICAgIHRoZSBvcGVuKCkgY2FsbC4KICAqIEBmb3BzOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCiAgKiAgICAgICAgdGhpcyBmaWxlLgpAQCAtMjA5LDcgKzIwOCw3IEBACiAKIAlpZiAoZGVudHJ5LT5kX2lub2RlKSB7CiAJCWlmIChkYXRhKQotCQkJZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXAgPSBkYXRhOworCQkJZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUgPSBkYXRhOwogCQlpZiAoZm9wcykKIAkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mb3AgPSBmb3BzOwogCX0KZGlmZiAtLWdpdCBhL2ZzL2RldnB0cy9pbm9kZS5jIGIvZnMvZGV2cHRzL2lub2RlLmMKaW5kZXggZjdhZWY1Yi4uNWY3YjVhNiAxMDA2NDQKLS0tIGEvZnMvZGV2cHRzL2lub2RlLmMKKysrIGIvZnMvZGV2cHRzL2lub2RlLmMKQEAgLTExMyw3ICsxMTMsNiBAQAogCWlub2RlLT5pX2lubyA9IDE7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IDEwMjQ7CiAJaW5vZGUtPmlfdWlkID0gaW5vZGUtPmlfZ2lkID0gMDsKIAlpbm9kZS0+aV9tb2RlID0gU19JRkRJUiB8IFNfSVJVR08gfCBTX0lYVUdPIHwgU19JV1VTUjsKIAlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CkBAIC0xNzIsMTIgKzE3MSwxMSBAQAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWlub2RlLT5pX2lubyA9IG51bWJlcisyOwotCWlub2RlLT5pX2Jsa3NpemUgPSAxMDI0OwogCWlub2RlLT5pX3VpZCA9IGNvbmZpZy5zZXR1aWQgPyBjb25maWcudWlkIDogY3VycmVudC0+ZnN1aWQ7CiAJaW5vZGUtPmlfZ2lkID0gY29uZmlnLnNldGdpZCA/IGNvbmZpZy5naWQgOiBjdXJyZW50LT5mc2dpZDsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBTX0lGQ0hSfGNvbmZpZy5tb2RlLCBkZXZpY2UpOwotCWlub2RlLT51LmdlbmVyaWNfaXAgPSB0dHk7CisJaW5vZGUtPmlfcHJpdmF0ZSA9IHR0eTsKIAogCWRlbnRyeSA9IGdldF9ub2RlKG51bWJlcik7CiAJaWYgKCFJU19FUlIoZGVudHJ5KSAmJiAhZGVudHJ5LT5kX2lub2RlKQpAQCAtMTk2LDcgKzE5NCw3IEBACiAJdHR5ID0gTlVMTDsKIAlpZiAoIUlTX0VSUihkZW50cnkpKSB7CiAJCWlmIChkZW50cnktPmRfaW5vZGUpCi0JCQl0dHkgPSBkZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwkJCXR0eSA9IGRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlOwogCQlkcHV0KGRlbnRyeSk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy9kcXVvdC5jIGIvZnMvZHF1b3QuYwppbmRleCAwMTIyYTI3Li45YWY3ODk1IDEwMDY0NAotLS0gYS9mcy9kcXVvdC5jCisrKyBiL2ZzL2RxdW90LmMKQEAgLTgzNCw2ICs4MzQsOSBAQAogCWlmICghbmVlZF9wcmludF93YXJuaW5nKGRxdW90KSB8fCAoZmxhZyAmJiB0ZXN0X2FuZF9zZXRfYml0KGZsYWcsICZkcXVvdC0+ZHFfZmxhZ3MpKSkKIAkJcmV0dXJuOwogCisJbXV0ZXhfbG9jaygmdHR5X211dGV4KTsKKwlpZiAoIWN1cnJlbnQtPnNpZ25hbC0+dHR5KQorCQlnb3RvIG91dF9sb2NrOwogCXR0eV93cml0ZV9tZXNzYWdlKGN1cnJlbnQtPnNpZ25hbC0+dHR5LCBkcXVvdC0+ZHFfc2ItPnNfaWQpOwogCWlmICh3YXJudHlwZSA9PSBJU09GVFdBUk4gfHwgd2FybnR5cGUgPT0gQlNPRlRXQVJOKQogCQl0dHlfd3JpdGVfbWVzc2FnZShjdXJyZW50LT5zaWduYWwtPnR0eSwgIjogd2FybmluZywgIik7CkBAIC04NjEsNiArODY0LDggQEAKIAkJCWJyZWFrOwogCX0KIAl0dHlfd3JpdGVfbWVzc2FnZShjdXJyZW50LT5zaWduYWwtPnR0eSwgbXNnKTsKK291dF9sb2NrOgorCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3dhcm5pbmdzKHN0cnVjdCBkcXVvdCAqKmRxdW90cywgY2hhciAqd2FybnR5cGUpCmRpZmYgLS1naXQgYS9mcy9lZnMvc3VwZXIuYyBiL2ZzL2Vmcy9zdXBlci5jCmluZGV4IDhhYzI0NjIuLmIzZjUwNjUgMTAwNjQ0Ci0tLSBhL2ZzL2Vmcy9zdXBlci5jCisrKyBiL2ZzL2Vmcy9zdXBlci5jCkBAIC05MCw4ICs5MCw3IEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3koZWZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gImVmc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShlZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogc3RhdGljIHZvaWQgZWZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCkBAIC0yNDgsMTEgKzI0NywxMCBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGlub2RlICpyb290OwogCi0gCXNiID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGVmc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisgCXNiID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGVmc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcy0+c19mc19pbmZvID0gc2I7Ci0JbWVtc2V0KHNiLCAwLCBzaXplb2Yoc3RydWN0IGVmc19zYl9pbmZvKSk7CiAgCiAJcy0+c19tYWdpYwkJPSBFRlNfU1VQRVJfTUFHSUM7CiAJaWYgKCFzYl9zZXRfYmxvY2tzaXplKHMsIEVGU19CTE9DS1NJWkUpKSB7CmRpZmYgLS1naXQgYS9mcy9ldmVudHBvbGwuYyBiL2ZzL2V2ZW50cG9sbC5jCmluZGV4IDNhMzU2NzQuLjhkNTQ0MzMgMTAwNjQ0Ci0tLSBhL2ZzL2V2ZW50cG9sbC5jCisrKyBiL2ZzL2V2ZW50cG9sbC5jCkBAIC0xNTkwLDcgKzE1OTAsNiBAQAogCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwogCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwogCXJldHVybiBpbm9kZTsKIAogZWV4aXRfMToKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCA1NDEzNWRmLi42MjcwZjhmIDEwMDY0NAotLS0gYS9mcy9leGVjLmMKKysrIGIvZnMvZXhlYy5jCkBAIC00Niw3ICs0Niw3IEBACiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgogI2luY2x1ZGUgPGxpbnV4L3JtYXAuaD4KLSNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CisjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9jbl9wcm9jLmg+CiAjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KIApAQCAtNTgsNyArNTgsNyBAQAogI2VuZGlmCiAKIGludCBjb3JlX3VzZXNfcGlkOwotY2hhciBjb3JlX3BhdHRlcm5bNjVdID0gImNvcmUiOworY2hhciBjb3JlX3BhdHRlcm5bMTI4XSA9ICJjb3JlIjsKIGludCBzdWlkX2R1bXBhYmxlID0gMDsKIAogRVhQT1JUX1NZTUJPTChzdWlkX2R1bXBhYmxlKTsKQEAgLTU5NSw3ICs1OTUsNyBAQAogCWlmICghbmV3c2lnaGFuZCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlpZiAodGhyZWFkX2dyb3VwX2VtcHR5KGN1cnJlbnQpKQorCWlmICh0aHJlYWRfZ3JvdXBfZW1wdHkodHNrKSkKIAkJZ290byBub190aHJlYWRfZ3JvdXA7CiAKIAkvKgpAQCAtNjIwLDE3ICs2MjAsMTcgQEAKIAkgKiBSZXBhcmVudGluZyBuZWVkcyB3cml0ZV9sb2NrIG9uIHRhc2tsaXN0X2xvY2ssCiAJICogc28gaXQgaXMgc2FmZSB0byBkbyBpdCB1bmRlciByZWFkX2xvY2suCiAJICovCi0JaWYgKHVubGlrZWx5KGN1cnJlbnQtPmdyb3VwX2xlYWRlciA9PSBjaGlsZF9yZWFwZXIpKQotCQljaGlsZF9yZWFwZXIgPSBjdXJyZW50OworCWlmICh1bmxpa2VseSh0c2stPmdyb3VwX2xlYWRlciA9PSBjaGlsZF9yZWFwZXIpKQorCQljaGlsZF9yZWFwZXIgPSB0c2s7CiAKLQl6YXBfb3RoZXJfdGhyZWFkcyhjdXJyZW50KTsKKwl6YXBfb3RoZXJfdGhyZWFkcyh0c2spOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAogCS8qCiAJICogQWNjb3VudCBmb3IgdGhlIHRocmVhZCBncm91cCBsZWFkZXIgaGFuZ2luZyBhcm91bmQ6CiAJICovCiAJY291bnQgPSAxOwotCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcihjdXJyZW50KSkgeworCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcih0c2spKSB7CiAJCWNvdW50ID0gMjsKIAkJLyoKIAkJICogVGhlIFNJR0FMUk0gdGltZXIgc3Vydml2ZXMgdGhlIGV4ZWMsIGJ1dCBuZWVkcyB0byBwb2ludApAQCAtNjM5LDE0ICs2MzksMTQgQEAKIAkJICogc3luY2hyb25pemUgd2l0aCBhbnkgZmlyaW5nIChieSBjYWxsaW5nIGRlbF90aW1lcl9zeW5jKQogCQkgKiBiZWZvcmUgd2UgY2FuIHNhZmVseSBsZXQgdGhlIG9sZCBncm91cCBsZWFkZXIgZGllLgogCQkgKi8KLQkJc2lnLT50c2sgPSBjdXJyZW50OworCQlzaWctPnRzayA9IHRzazsKIAkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOwogCQlpZiAoaHJ0aW1lcl9jYW5jZWwoJnNpZy0+cmVhbF90aW1lcikpCiAJCQlocnRpbWVyX3Jlc3RhcnQoJnNpZy0+cmVhbF90aW1lcik7CiAJCXNwaW5fbG9ja19pcnEobG9jayk7CiAJfQogCXdoaWxlIChhdG9taWNfcmVhZCgmc2lnLT5jb3VudCkgPiBjb3VudCkgewotCQlzaWctPmdyb3VwX2V4aXRfdGFzayA9IGN1cnJlbnQ7CisJCXNpZy0+Z3JvdXBfZXhpdF90YXNrID0gdHNrOwogCQlzaWctPm5vdGlmeV9jb3VudCA9IGNvdW50OwogCQlfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKIAkJc3Bpbl91bmxvY2tfaXJxKGxvY2spOwpAQCAtNjYyLDEzICs2NjIsMTMgQEAKIAkgKiBkbyBpcyB0byB3YWl0IGZvciB0aGUgdGhyZWFkIGdyb3VwIGxlYWRlciB0byBiZWNvbWUgaW5hY3RpdmUsCiAJICogYW5kIHRvIGFzc3VtZSBpdHMgUElEOgogCSAqLwotCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcihjdXJyZW50KSkgeworCWlmICghdGhyZWFkX2dyb3VwX2xlYWRlcih0c2spKSB7CiAJCS8qCiAJCSAqIFdhaXQgZm9yIHRoZSB0aHJlYWQgZ3JvdXAgbGVhZGVyIHRvIGJlIGEgem9tYmllLgogCQkgKiBJdCBzaG91bGQgYWxyZWFkeSBiZSB6b21iaWUgYXQgdGhpcyBwb2ludCwgbW9zdAogCQkgKiBvZiB0aGUgdGltZS4KIAkJICovCi0JCWxlYWRlciA9IGN1cnJlbnQtPmdyb3VwX2xlYWRlcjsKKwkJbGVhZGVyID0gdHNrLT5ncm91cF9sZWFkZXI7CiAJCXdoaWxlIChsZWFkZXItPmV4aXRfc3RhdGUgIT0gRVhJVF9aT01CSUUpCiAJCQl5aWVsZCgpOwogCkBAIC02ODIsMTIgKzY4MiwxMiBAQAogCQkgKiBXaGVuIHdlIHRha2Ugb24gaXRzIGlkZW50aXR5IGJ5IHN3aXRjaGluZyB0byBpdHMgUElELCB3ZQogCQkgKiBhbHNvIHRha2UgaXRzIGJpcnRoZGF0ZSAoYWx3YXlzIGVhcmxpZXIgdGhhbiBvdXIgb3duKS4KIAkJICovCi0JCWN1cnJlbnQtPnN0YXJ0X3RpbWUgPSBsZWFkZXItPnN0YXJ0X3RpbWU7CisJCXRzay0+c3RhcnRfdGltZSA9IGxlYWRlci0+c3RhcnRfdGltZTsKIAogCQl3cml0ZV9sb2NrX2lycSgmdGFza2xpc3RfbG9jayk7CiAKLQkJQlVHX09OKGxlYWRlci0+dGdpZCAhPSBjdXJyZW50LT50Z2lkKTsKLQkJQlVHX09OKGN1cnJlbnQtPnBpZCA9PSBjdXJyZW50LT50Z2lkKTsKKwkJQlVHX09OKGxlYWRlci0+dGdpZCAhPSB0c2stPnRnaWQpOworCQlCVUdfT04odHNrLT5waWQgPT0gdHNrLT50Z2lkKTsKIAkJLyoKIAkJICogQW4gZXhlYygpIHN0YXJ0cyBhIG5ldyB0aHJlYWQgZ3JvdXAgd2l0aCB0aGUKIAkJICogVEdJRCBvZiB0aGUgcHJldmlvdXMgdGhyZWFkIGdyb3VwLiBSZWhhc2ggdGhlCkBAIC02OTYsMjQgKzY5NiwyMSBAQAogCQkgKi8KIAogCQkvKiBCZWNvbWUgYSBwcm9jZXNzIGdyb3VwIGxlYWRlciB3aXRoIHRoZSBvbGQgbGVhZGVyJ3MgcGlkLgotCQkgKiBOb3RlOiBUaGUgb2xkIGxlYWRlciBhbHNvIHVzZXMgdGhpc3BpZCB1bnRpbCByZWxlYXNlX3Rhc2sKKwkJICogVGhlIG9sZCBsZWFkZXIgYmVjb21lcyBhIHRocmVhZCBvZiB0aGUgdGhpcyB0aHJlYWQgZ3JvdXAuCisJCSAqIE5vdGU6IFRoZSBvbGQgbGVhZGVyIGFsc28gdXNlcyB0aGlzIHBpZCB1bnRpbCByZWxlYXNlX3Rhc2sKIAkJICogICAgICAgaXMgY2FsbGVkLiAgT2RkIGJ1dCBzaW1wbGUgYW5kIGNvcnJlY3QuCiAJCSAqLwotCQlkZXRhY2hfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUElEKTsKLQkJY3VycmVudC0+cGlkID0gbGVhZGVyLT5waWQ7Ci0JCWF0dGFjaF9waWQoY3VycmVudCwgUElEVFlQRV9QSUQsICBjdXJyZW50LT5waWQpOwotCQlhdHRhY2hfcGlkKGN1cnJlbnQsIFBJRFRZUEVfUEdJRCwgY3VycmVudC0+c2lnbmFsLT5wZ3JwKTsKLQkJYXR0YWNoX3BpZChjdXJyZW50LCBQSURUWVBFX1NJRCwgIGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbik7Ci0JCWxpc3RfcmVwbGFjZV9yY3UoJmxlYWRlci0+dGFza3MsICZjdXJyZW50LT50YXNrcyk7CisJCWRldGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCk7CisJCXRzay0+cGlkID0gbGVhZGVyLT5waWQ7CisJCWF0dGFjaF9waWQodHNrLCBQSURUWVBFX1BJRCwgIHRzay0+cGlkKTsKKwkJdHJhbnNmZXJfcGlkKGxlYWRlciwgdHNrLCBQSURUWVBFX1BHSUQpOworCQl0cmFuc2Zlcl9waWQobGVhZGVyLCB0c2ssIFBJRFRZUEVfU0lEKTsKKwkJbGlzdF9yZXBsYWNlX3JjdSgmbGVhZGVyLT50YXNrcywgJnRzay0+dGFza3MpOwogCi0JCWN1cnJlbnQtPmdyb3VwX2xlYWRlciA9IGN1cnJlbnQ7Ci0JCWxlYWRlci0+Z3JvdXBfbGVhZGVyID0gY3VycmVudDsKKwkJdHNrLT5ncm91cF9sZWFkZXIgPSB0c2s7CisJCWxlYWRlci0+Z3JvdXBfbGVhZGVyID0gdHNrOwogCi0JCS8qIFJlZHVjZSBsZWFkZXIgdG8gYSB0aHJlYWQgKi8KLQkJZGV0YWNoX3BpZChsZWFkZXIsIFBJRFRZUEVfUEdJRCk7Ci0JCWRldGFjaF9waWQobGVhZGVyLCBQSURUWVBFX1NJRCk7Ci0KLQkJY3VycmVudC0+ZXhpdF9zaWduYWwgPSBTSUdDSExEOworCQl0c2stPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKIAogCQlCVUdfT04obGVhZGVyLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFKTsKIAkJbGVhZGVyLT5leGl0X3N0YXRlID0gRVhJVF9ERUFEOwpAQCAtNzUzLDcgKzc1MCw3IEBACiAJCXNwaW5fbG9jaygmb2xkc2lnaGFuZC0+c2lnbG9jayk7CiAJCXNwaW5fbG9ja19uZXN0ZWQoJm5ld3NpZ2hhbmQtPnNpZ2xvY2ssIFNJTkdMRV9ERVBUSF9ORVNUSU5HKTsKIAotCQlyY3VfYXNzaWduX3BvaW50ZXIoY3VycmVudC0+c2lnaGFuZCwgbmV3c2lnaGFuZCk7CisJCXJjdV9hc3NpZ25fcG9pbnRlcih0c2stPnNpZ2hhbmQsIG5ld3NpZ2hhbmQpOwogCQlyZWNhbGNfc2lncGVuZGluZygpOwogCiAJCXNwaW5fdW5sb2NrKCZuZXdzaWdoYW5kLT5zaWdsb2NrKTsKQEAgLTc2NCw3ICs3NjEsNyBAQAogCQkJa21lbV9jYWNoZV9mcmVlKHNpZ2hhbmRfY2FjaGVwLCBvbGRzaWdoYW5kKTsKIAl9CiAKLQlCVUdfT04oIXRocmVhZF9ncm91cF9sZWFkZXIoY3VycmVudCkpOworCUJVR19PTighdGhyZWFkX2dyb3VwX2xlYWRlcih0c2spKTsKIAlyZXR1cm4gMDsKIH0KIAkKQEAgLTkwMSw4ICs4OTgsNyBAQAogCXJldHVybiAwOwogCiBtbWFwX2ZhaWxlZDoKLQlwdXRfZmlsZXNfc3RydWN0KGN1cnJlbnQtPmZpbGVzKTsKLQljdXJyZW50LT5maWxlcyA9IGZpbGVzOworCXJlc2V0X2ZpbGVzX3N0cnVjdChjdXJyZW50LCBmaWxlcyk7CiBvdXQ6CiAJcmV0dXJuIHJldHZhbDsKIH0KQEAgLTE0NjcsNiArMTQ2Myw3IEBACiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGZzdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJaW50IGZsYWcgPSAwOworCWludCBpc3BpcGUgPSAwOwogCiAJYmluZm10ID0gY3VycmVudC0+YmluZm10OwogCWlmICghYmluZm10IHx8ICFiaW5mbXQtPmNvcmVfZHVtcCkKQEAgLTE1MDgsMjIgKzE1MDUsMzQgQEAKICAJbG9ja19rZXJuZWwoKTsKIAlmb3JtYXRfY29yZW5hbWUoY29yZW5hbWUsIGNvcmVfcGF0dGVybiwgc2lnbnIpOwogCXVubG9ja19rZXJuZWwoKTsKLQlmaWxlID0gZmlscF9vcGVuKGNvcmVuYW1lLCBPX0NSRUFUIHwgMiB8IE9fTk9GT0xMT1cgfCBPX0xBUkdFRklMRSB8IGZsYWcsIDA2MDApOworIAlpZiAoY29yZW5hbWVbMF0gPT0gJ3wnKSB7CisJCS8qIFNJR1BJUEUgY2FuIGhhcHBlbiwgYnV0IGl0J3MganVzdCBuZXZlciBwcm9jZXNzZWQgKi8KKyAJCWlmKGNhbGxfdXNlcm1vZGVoZWxwZXJfcGlwZShjb3JlbmFtZSsxLCBOVUxMLCBOVUxMLCAmZmlsZSkpIHsKKyAJCQlwcmludGsoS0VSTl9JTkZPICJDb3JlIGR1bXAgdG8gJXMgcGlwZSBmYWlsZWRcbiIsCisJCQkgICAgICAgY29yZW5hbWUpOworIAkJCWdvdG8gZmFpbF91bmxvY2s7CisgCQl9CisJCWlzcGlwZSA9IDE7CisgCX0gZWxzZQorIAkJZmlsZSA9IGZpbHBfb3Blbihjb3JlbmFtZSwKKwkJCQkgT19DUkVBVCB8IDIgfCBPX05PRk9MTE9XIHwgT19MQVJHRUZJTEUsIDA2MDApOwogCWlmIChJU19FUlIoZmlsZSkpCiAJCWdvdG8gZmFpbF91bmxvY2s7CiAJaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpZiAoaW5vZGUtPmlfbmxpbmsgPiAxKQogCQlnb3RvIGNsb3NlX2ZhaWw7CS8qIG11bHRpcGxlIGxpbmtzIC0gZG9uJ3QgZHVtcCAqLwotCWlmIChkX3VuaGFzaGVkKGZpbGUtPmZfZGVudHJ5KSkKKwlpZiAoIWlzcGlwZSAmJiBkX3VuaGFzaGVkKGZpbGUtPmZfZGVudHJ5KSkKIAkJZ290byBjbG9zZV9mYWlsOwogCi0JaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQorCS8qIEFLOiBhY3R1YWxseSBpIHNlZSBubyByZWFzb24gdG8gbm90IGFsbG93IHRoaXMgZm9yIG5hbWVkIHBpcGVzIGV0Yy4sCisJICAgYnV0IGtlZXAgdGhlIHByZXZpb3VzIGJlaGF2aW91ciBmb3Igbm93LiAqLworCWlmICghaXNwaXBlICYmICFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlnb3RvIGNsb3NlX2ZhaWw7CiAJaWYgKCFmaWxlLT5mX29wKQogCQlnb3RvIGNsb3NlX2ZhaWw7CiAJaWYgKCFmaWxlLT5mX29wLT53cml0ZSkKIAkJZ290byBjbG9zZV9mYWlsOwotCWlmIChkb190cnVuY2F0ZShmaWxlLT5mX2RlbnRyeSwgMCwgMCwgZmlsZSkgIT0gMCkKKwlpZiAoIWlzcGlwZSAmJiBkb190cnVuY2F0ZShmaWxlLT5mX2RlbnRyeSwgMCwgMCwgZmlsZSkgIT0gMCkKIAkJZ290byBjbG9zZV9mYWlsOwogCiAJcmV0dmFsID0gYmluZm10LT5jb3JlX2R1bXAoc2lnbnIsIHJlZ3MsIGZpbGUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9hY2wuYyBiL2ZzL2V4dDIvYWNsLmMKaW5kZXggZGE1MmI0YS4uN2M0MjBiOCAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9hY2wuYworKysgYi9mcy9leHQyL2FjbC5jCkBAIC04OSw4ICs4OSw4IEBACiAJc2l6ZV90IG47CiAKIAkqc2l6ZSA9IGV4dDJfYWNsX3NpemUoYWNsLT5hX2NvdW50KTsKLQlleHRfYWNsID0gKGV4dDJfYWNsX2hlYWRlciAqKWttYWxsb2Moc2l6ZW9mKGV4dDJfYWNsX2hlYWRlcikgKwotCQlhY2wtPmFfY291bnQgKiBzaXplb2YoZXh0Ml9hY2xfZW50cnkpLCBHRlBfS0VSTkVMKTsKKwlleHRfYWNsID0ga21hbGxvYyhzaXplb2YoZXh0Ml9hY2xfaGVhZGVyKSArIGFjbC0+YV9jb3VudCAqCisJCQlzaXplb2YoZXh0Ml9hY2xfZW50cnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWV4dF9hY2wpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCWV4dF9hY2wtPmFfdmVyc2lvbiA9IGNwdV90b19sZTMyKEVYVDJfQUNMX1ZFUlNJT04pOwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9kaXIuYyBiL2ZzL2V4dDIvZGlyLmMKaW5kZXggOTJlYTgyNi4uM2U3YTg0YSAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9kaXIuYworKysgYi9mcy9leHQyL2Rpci5jCkBAIC02NjEsNSArNjYxLDggQEAKIAkucmVhZAkJPSBnZW5lcmljX3JlYWRfZGlyLAogCS5yZWFkZGlyCT0gZXh0Ml9yZWFkZGlyLAogCS5pb2N0bAkJPSBleHQyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZXh0Ml9jb21wYXRfaW9jdGwsCisjZW5kaWYKIAkuZnN5bmMJCT0gZXh0Ml9zeW5jX2ZpbGUsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9leHQyLmggYi9mcy9leHQyL2V4dDIuaAppbmRleCBlNjVhMDE5Li5jMTlhYzE1IDEwMDY0NAotLS0gYS9mcy9leHQyL2V4dDIuaAorKysgYi9mcy9leHQyL2V4dDIuaApAQCAtMTM3LDYgKzEzNyw3IEBACiAvKiBpb2N0bC5jICovCiBleHRlcm4gaW50IGV4dDJfaW9jdGwgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsCiAJCSAgICAgICB1bnNpZ25lZCBsb25nKTsKK2V4dGVybiBsb25nIGV4dDJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIG5hbWVpLmMgKi8KIHN0cnVjdCBkZW50cnkgKmV4dDJfZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5ICpjaGlsZCk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2ZpbGUuYyBiL2ZzL2V4dDIvZmlsZS5jCmluZGV4IDIzZTJjN2MuLjJkYmE0NzMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvZmlsZS5jCisrKyBiL2ZzL2V4dDIvZmlsZS5jCkBAIC00MSwxNyArNDEsMTggQEAKICAqLwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQyX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCiAJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5pb2N0bAkJPSBleHQyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZXh0Ml9jb21wYXRfaW9jdGwsCisjZW5kaWYKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkub3BlbgkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKIAkucmVsZWFzZQk9IGV4dDJfcmVsZWFzZV9maWxlLAogCS5mc3luYwkJPSBleHQyX3N5bmNfZmlsZSwKLQkucmVhZHYJCT0gZ2VuZXJpY19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0gZ2VuZXJpY19maWxlX3dyaXRldiwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCiAJLnNwbGljZV9yZWFkCT0gZ2VuZXJpY19maWxlX3NwbGljZV9yZWFkLAogCS5zcGxpY2Vfd3JpdGUJPSBnZW5lcmljX2ZpbGVfc3BsaWNlX3dyaXRlLApAQCAtNjMsNiArNjQsOSBAQAogCS5yZWFkCQk9IHhpcF9maWxlX3JlYWQsCiAJLndyaXRlCQk9IHhpcF9maWxlX3dyaXRlLAogCS5pb2N0bAkJPSBleHQyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZXh0Ml9jb21wYXRfaW9jdGwsCisjZW5kaWYKIAkubW1hcAkJPSB4aXBfZmlsZV9tbWFwLAogCS5vcGVuCQk9IGdlbmVyaWNfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gZXh0Ml9yZWxlYXNlX2ZpbGUsCmRpZmYgLS1naXQgYS9mcy9leHQyL2lhbGxvYy5jIGIvZnMvZXh0Mi9pYWxsb2MuYwppbmRleCA2OTVmNjljLi4yY2I1NDViIDEwMDY0NAotLS0gYS9mcy9leHQyL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDIvaWFsbG9jLmMKQEAgLTU3NCw3ICs1NzQsNiBAQAogCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCiAJaW5vZGUtPmlfaW5vID0gaW5vOwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CS8qIFRoaXMgaXMgdGhlIG9wdGltYWwgSU8gc2l6ZSAoZm9yIHN0YXQpLCBub3QgdGhlIGZzIGJsb2NrIHNpemUgKi8KIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJbWVtc2V0KGVpLT5pX2RhdGEsIDAsIHNpemVvZihlaS0+aV9kYXRhKSk7CmRpZmYgLS1naXQgYS9mcy9leHQyL2lub2RlLmMgYi9mcy9leHQyL2lub2RlLmMKaW5kZXggZmI0ZDMyMi4uZGQ0ZTE0YyAxMDA2NDQKLS0tIGEvZnMvZXh0Mi9pbm9kZS5jCisrKyBiL2ZzL2V4dDIvaW5vZGUuYwpAQCAtMTA5NCw3ICsxMDk0LDYgQEAKIAkJYnJlbHNlIChiaCk7CiAJCWdvdG8gYmFkX2lub2RlOwogCX0KLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwkvKiBUaGlzIGlzIHRoZSBvcHRpbWFsIElPIHNpemUgKGZvciBzdGF0KSwgbm90IHRoZSBmcyBibG9jayBzaXplICovCiAJaW5vZGUtPmlfYmxvY2tzID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Jsb2Nrcyk7CiAJZWktPmlfZmxhZ3MgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZmxhZ3MpOwogCWVpLT5pX2ZhZGRyID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2ZhZGRyKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvaW9jdGwuYyBiL2ZzL2V4dDIvaW9jdGwuYwppbmRleCAzY2E5YWZkLi4xZGZiYTc3IDEwMDY0NAotLS0gYS9mcy9leHQyL2lvY3RsLmMKKysrIGIvZnMvZXh0Mi9pb2N0bC5jCkBAIC0xMSw2ICsxMSw4IEBACiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCkBAIC04MCwzICs4MiwzMyBAQAogCQlyZXR1cm4gLUVOT1RUWTsKIAl9CiB9CisKKyNpZmRlZiBDT05GSUdfQ09NUEFUCitsb25nIGV4dDJfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW50IHJldDsKKworCS8qIFRoZXNlIGFyZSBqdXN0IG1pc25hbWVkLCB0aGV5IGFjdHVhbGx5IGdldC9wdXQgZnJvbS90byB1c2VyIGFuIGludCAqLworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBFWFQyX0lPQzMyX0dFVEZMQUdTOgorCQljbWQgPSBFWFQyX0lPQ19HRVRGTEFHUzsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0lPQzMyX1NFVEZMQUdTOgorCQljbWQgPSBFWFQyX0lPQ19TRVRGTEFHUzsKKwkJYnJlYWs7CisJY2FzZSBFWFQyX0lPQzMyX0dFVFZFUlNJT046CisJCWNtZCA9IEVYVDJfSU9DX0dFVFZFUlNJT047CisJCWJyZWFrOworCWNhc2UgRVhUMl9JT0MzMl9TRVRWRVJTSU9OOgorCQljbWQgPSBFWFQyX0lPQ19TRVRWRVJTSU9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKwlsb2NrX2tlcm5lbCgpOworCXJldCA9IGV4dDJfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKSk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL2V4dDIvbmFtZWkuYyBiL2ZzL2V4dDIvbmFtZWkuYwppbmRleCA0Y2E4MjQ5Li5lMWFmNWI0IDEwMDY0NAotLS0gYS9mcy9leHQyL25hbWVpLmMKKysrIGIvZnMvZXh0Mi9uYW1laS5jCkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJZXh0Ml9zZXRfbGluayhuZXdfZGlyLCBuZXdfZGUsIG5ld19wYWdlLCBvbGRfaW5vZGUpOwogCQluZXdfaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQlpZiAoZGlyX2RlKQotCQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCWlub2RlX2RlY19saW5rX2NvdW50KG5ld19pbm9kZSk7CiAJfSBlbHNlIHsKIAkJaWYgKGRpcl9kZSkgewpkaWZmIC0tZ2l0IGEvZnMvZXh0Mi9zdXBlci5jIGIvZnMvZXh0Mi9zdXBlci5jCmluZGV4IDQyODZmZjYuLjUxM2NkNDIgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDIvc3VwZXIuYworKysgYi9mcy9leHQyL3N1cGVyLmMKQEAgLTE4NCw4ICsxODQsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGV4dDJfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZXh0Ml9pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShleHQyX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyB2b2lkIGV4dDJfY2xlYXJfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTU0NCwxNyArNTQzLDI0IEBACiAJaW50IGk7CiAJaW50IGRlc2NfYmxvY2sgPSAwOwogCXN0cnVjdCBleHQyX3NiX2luZm8gKnNiaSA9IEVYVDJfU0Ioc2IpOwotCXVuc2lnbmVkIGxvbmcgYmxvY2sgPSBsZTMyX3RvX2NwdShzYmktPnNfZXMtPnNfZmlyc3RfZGF0YV9ibG9jayk7CisJdW5zaWduZWQgbG9uZyBmaXJzdF9ibG9jayA9IGxlMzJfdG9fY3B1KHNiaS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwl1bnNpZ25lZCBsb25nIGxhc3RfYmxvY2s7CiAJc3RydWN0IGV4dDJfZ3JvdXBfZGVzYyAqIGdkcCA9IE5VTEw7CiAKIAlleHQyX2RlYnVnICgiQ2hlY2tpbmcgZ3JvdXAgZGVzY3JpcHRvcnMiKTsKIAogCWZvciAoaSA9IDA7IGkgPCBzYmktPnNfZ3JvdXBzX2NvdW50OyBpKyspCiAJeworCQlpZiAoaSA9PSBzYmktPnNfZ3JvdXBzX2NvdW50IC0gMSkKKwkJCWxhc3RfYmxvY2sgPSBsZTMyX3RvX2NwdShzYmktPnNfZXMtPnNfYmxvY2tzX2NvdW50KSAtIDE7CisJCWVsc2UKKwkJCWxhc3RfYmxvY2sgPSBmaXJzdF9ibG9jayArCisJCQkJKEVYVDJfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxKTsKKwogCQlpZiAoKGkgJSBFWFQyX0RFU0NfUEVSX0JMT0NLKHNiKSkgPT0gMCkKIAkJCWdkcCA9IChzdHJ1Y3QgZXh0Ml9ncm91cF9kZXNjICopIHNiaS0+c19ncm91cF9kZXNjW2Rlc2NfYmxvY2srK10tPmJfZGF0YTsKLQkJaWYgKGxlMzJfdG9fY3B1KGdkcC0+YmdfYmxvY2tfYml0bWFwKSA8IGJsb2NrIHx8Ci0JCSAgICBsZTMyX3RvX2NwdShnZHAtPmJnX2Jsb2NrX2JpdG1hcCkgPj0gYmxvY2sgKyBFWFQyX0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCQlpZiAobGUzMl90b19jcHUoZ2RwLT5iZ19ibG9ja19iaXRtYXApIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfYmxvY2tfYml0bWFwKSA+IGxhc3RfYmxvY2spCiAJCXsKIAkJCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19kZXNjcmlwdG9ycyIsCiAJCQkJICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVkIgpAQCAtNTYyLDggKzU2OCw4IEBACiAJCQkJICAgIGksICh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShnZHAtPmJnX2Jsb2NrX2JpdG1hcCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJaWYgKGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfYml0bWFwKSA8IGJsb2NrIHx8Ci0JCSAgICBsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX2JpdG1hcCkgPj0gYmxvY2sgKyBFWFQyX0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCQlpZiAobGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV9iaXRtYXApIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfYml0bWFwKSA+IGxhc3RfYmxvY2spCiAJCXsKIAkJCWV4dDJfZXJyb3IgKHNiLCAiZXh0Ml9jaGVja19kZXNjcmlwdG9ycyIsCiAJCQkJICAgICJJbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVkIgpAQCAtNTcxLDkgKzU3Nyw5IEBACiAJCQkJICAgIGksICh1bnNpZ25lZCBsb25nKSBsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX2JpdG1hcCkpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJaWYgKGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfdGFibGUpIDwgYmxvY2sgfHwKLQkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfdGFibGUpICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgPj0KLQkJICAgIGJsb2NrICsgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSkKKwkJaWYgKGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfdGFibGUpIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfdGFibGUpICsgc2JpLT5zX2l0Yl9wZXJfZ3JvdXAgPgorCQkgICAgbGFzdF9ibG9jaykKIAkJewogCQkJZXh0Ml9lcnJvciAoc2IsICJleHQyX2NoZWNrX2Rlc2NyaXB0b3JzIiwKIAkJCQkgICAgIklub2RlIHRhYmxlIGZvciBncm91cCAlZCIKQEAgLTU4MSw3ICs1ODcsNyBAQAogCQkJCSAgICBpLCAodW5zaWduZWQgbG9uZykgbGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV90YWJsZSkpOwogCQkJcmV0dXJuIDA7CiAJCX0KLQkJYmxvY2sgKz0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKTsKKwkJZmlyc3RfYmxvY2sgKz0gRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKTsKIAkJZ2RwKys7CiAJfQogCXJldHVybiAxOwpAQCAtNjQ4LDExICs2NTQsMTAgQEAKIAlpbnQgaSwgajsKIAlfX2xlMzIgZmVhdHVyZXM7CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzYi0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZigqc2JpKSk7CiAKIAkvKgogCSAqIFNlZSB3aGF0IHRoZSBjdXJyZW50IGJsb2Nrc2l6ZSBmb3IgdGhlIGRldmljZSBpcywgYW5kCkBAIC04NjEsMTAgKzg2Niw5IEBACiAKIAlpZiAoRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSA9PSAwKQogCQlnb3RvIGNhbnRmaW5kX2V4dDI7Ci0Jc2JpLT5zX2dyb3Vwc19jb3VudCA9IChsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpIC0KLQkJCQkgICAgICAgIGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spICsKLQkJCQkgICAgICAgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSAtIDEpIC8KLQkJCQkgICAgICAgRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKTsKKyAJc2JpLT5zX2dyb3Vwc19jb3VudCA9ICgobGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSAtCisgCQkJCWxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spIC0gMSkKKyAJCQkJCS8gRVhUMl9CTE9DS1NfUEVSX0dST1VQKHNiKSkgKyAxOwogCWRiX2NvdW50ID0gKHNiaS0+c19ncm91cHNfY291bnQgKyBFWFQyX0RFU0NfUEVSX0JMT0NLKHNiKSAtIDEpIC8KIAkJICAgRVhUMl9ERVNDX1BFUl9CTE9DSyhzYik7CiAJc2JpLT5zX2dyb3VwX2Rlc2MgPSBrbWFsbG9jIChkYl9jb3VudCAqIHNpemVvZiAoc3RydWN0IGJ1ZmZlcl9oZWFkICopLCBHRlBfS0VSTkVMKTsKZGlmZiAtLWdpdCBhL2ZzL2V4dDIveGF0dHIuYyBiL2ZzL2V4dDIveGF0dHIuYwppbmRleCA4NmFlOGU5Li5hZjUyYTdmIDEwMDY0NAotLS0gYS9mcy9leHQyL3hhdHRyLmMKKysrIGIvZnMvZXh0Mi94YXR0ci5jCkBAIC01MjEsMTEgKzUyMSwxMCBAQAogCQl9CiAJfSBlbHNlIHsKIAkJLyogQWxsb2NhdGUgYSBidWZmZXIgd2hlcmUgd2UgY29uc3RydWN0IHRoZSBuZXcgYmxvY2suICovCi0JCWhlYWRlciA9IGttYWxsb2Moc2ItPnNfYmxvY2tzaXplLCBHRlBfS0VSTkVMKTsKKwkJaGVhZGVyID0ga3phbGxvYyhzYi0+c19ibG9ja3NpemUsIEdGUF9LRVJORUwpOwogCQllcnJvciA9IC1FTk9NRU07CiAJCWlmIChoZWFkZXIgPT0gTlVMTCkKIAkJCWdvdG8gY2xlYW51cDsKLQkJbWVtc2V0KGhlYWRlciwgMCwgc2ItPnNfYmxvY2tzaXplKTsKIAkJZW5kID0gKGNoYXIgKiloZWFkZXIgKyBzYi0+c19ibG9ja3NpemU7CiAJCWhlYWRlci0+aF9tYWdpYyA9IGNwdV90b19sZTMyKEVYVDJfWEFUVFJfTUFHSUMpOwogCQloZWFkZXItPmhfYmxvY2tzID0gaGVhZGVyLT5oX3JlZmNvdW50ID0gY3B1X3RvX2xlMzIoMSk7CmRpZmYgLS1naXQgYS9mcy9leHQzL2FjbC5jIGIvZnMvZXh0My9hY2wuYwppbmRleCAwZDIxZDU1Li4xZTUwMzhkIDEwMDY0NAotLS0gYS9mcy9leHQzL2FjbC5jCisrKyBiL2ZzL2V4dDMvYWNsLmMKQEAgLTkwLDggKzkwLDggQEAKIAlzaXplX3QgbjsKIAogCSpzaXplID0gZXh0M19hY2xfc2l6ZShhY2wtPmFfY291bnQpOwotCWV4dF9hY2wgPSAoZXh0M19hY2xfaGVhZGVyICopa21hbGxvYyhzaXplb2YoZXh0M19hY2xfaGVhZGVyKSArCi0JCWFjbC0+YV9jb3VudCAqIHNpemVvZihleHQzX2FjbF9lbnRyeSksIEdGUF9LRVJORUwpOworCWV4dF9hY2wgPSBrbWFsbG9jKHNpemVvZihleHQzX2FjbF9oZWFkZXIpICsgYWNsLT5hX2NvdW50ICoKKwkJCXNpemVvZihleHQzX2FjbF9lbnRyeSksIEdGUF9LRVJORUwpOwogCWlmICghZXh0X2FjbCkKIAkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJZXh0X2FjbC0+YV92ZXJzaW9uID0gY3B1X3RvX2xlMzIoRVhUM19BQ0xfVkVSU0lPTik7CkBAIC0yNTgsNyArMjU4LDcgQEAKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtRUlOVkFMOwogCX0KLSAJaWYgKGFjbCkgeworCWlmIChhY2wpIHsKIAkJdmFsdWUgPSBleHQzX2FjbF90b19kaXNrKGFjbCwgJnNpemUpOwogCQlpZiAoSVNfRVJSKHZhbHVlKSkKIAkJCXJldHVybiAoaW50KVBUUl9FUlIodmFsdWUpOwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9iYWxsb2MuYyBiL2ZzL2V4dDMvYmFsbG9jLmMKaW5kZXggMDYzZDk5NC4uYjQxYTdkNyAxMDA2NDQKLS0tIGEvZnMvZXh0My9iYWxsb2MuYworKysgYi9mcy9leHQzL2JhbGxvYy5jCkBAIC0zOCw2ICszOCwxMyBAQAogCiAjZGVmaW5lIGluX3JhbmdlKGIsIGZpcnN0LCBsZW4pCSgoYikgPj0gKGZpcnN0KSAmJiAoYikgPD0gKGZpcnN0KSArIChsZW4pIC0gMSkKIAorLyoqCisgKiBleHQzX2dldF9ncm91cF9kZXNjKCkgLS0gbG9hZCBncm91cCBkZXNjcmlwdG9yIGZyb20gZGlzaworICogQHNiOgkJCXN1cGVyIGJsb2NrCisgKiBAYmxvY2tfZ3JvdXA6CWdpdmVuIGJsb2NrIGdyb3VwCisgKiBAYmg6CQkJcG9pbnRlciB0byB0aGUgYnVmZmVyIGhlYWQgdG8gc3RvcmUgdGhlIGJsb2NrCisgKgkJCWdyb3VwIGRlc2NyaXB0b3IKKyAqLwogc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqIGV4dDNfZ2V0X2dyb3VwX2Rlc2Moc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsCiAJCQkJCSAgICAgdW5zaWduZWQgaW50IGJsb2NrX2dyb3VwLAogCQkJCQkgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBiaCkKQEAgLTczLDggKzgwLDEyIEBACiAJcmV0dXJuIGRlc2MgKyBvZmZzZXQ7CiB9CiAKLS8qCi0gKiBSZWFkIHRoZSBiaXRtYXAgZm9yIGEgZ2l2ZW4gYmxvY2tfZ3JvdXAsIHJlYWRpbmcgaW50byB0aGUgc3BlY2lmaWVkIAorLyoqCisgKiByZWFkX2Jsb2NrX2JpdG1hcCgpCisgKiBAc2I6CQkJc3VwZXIgYmxvY2sKKyAqIEBibG9ja19ncm91cDoJZ2l2ZW4gYmxvY2sgZ3JvdXAKKyAqCisgKiBSZWFkIHRoZSBiaXRtYXAgZm9yIGEgZ2l2ZW4gYmxvY2tfZ3JvdXAsIHJlYWRpbmcgaW50byB0aGUgc3BlY2lmaWVkCiAgKiBzbG90IGluIHRoZSBzdXBlcmJsb2NrJ3MgYml0bWFwIGNhY2hlLgogICoKICAqIFJldHVybiBidWZmZXJfaGVhZCBvbiBzdWNjZXNzIG9yIE5VTEwgaW4gY2FzZSBvZiBmYWlsdXJlLgpAQCAtMTAzLDE1ICsxMTQsMjIgQEAKICAqIE9wZXJhdGlvbnMgaW5jbHVkZToKICAqIGR1bXAsIGZpbmQsIGFkZCwgcmVtb3ZlLCBpc19lbXB0eSwgZmluZF9uZXh0X3Jlc2VydmFibGVfd2luZG93LCBldGMuCiAgKgotICogV2UgdXNlIHNvcnRlZCBkb3VibGUgbGlua2VkIGxpc3QgZm9yIHRoZSBwZXItZmlsZXN5c3RlbSByZXNlcnZhdGlvbgotICogd2luZG93IGxpc3QuIChsaWtlIGluIHZtX3JlZ2lvbikuCisgKiBXZSB1c2UgYSByZWQtYmxhY2sgdHJlZSB0byByZXByZXNlbnQgcGVyLWZpbGVzeXN0ZW0gcmVzZXJ2YXRpb24KKyAqIHdpbmRvd3MuCiAgKgotICogSW5pdGlhbGx5LCB3ZSBrZWVwIHRob3NlIHNtYWxsIG9wZXJhdGlvbnMgaW4gdGhlIGFic3RyYWN0IGZ1bmN0aW9ucywKLSAqIHNvIGxhdGVyIGlmIHdlIG5lZWQgYSBiZXR0ZXIgc2VhcmNoaW5nIHRyZWUgdGhhbiBkb3VibGUgbGlua2VkLWxpc3QsCi0gKiB3ZSBjb3VsZCBlYXNpbHkgc3dpdGNoIHRvIHRoYXQgd2l0aG91dCBjaGFuZ2luZyB0b28gbXVjaAotICogY29kZS4KICAqLwotI2lmIDAKKworLyoqCisgKiBfX3Jzdl93aW5kb3dfZHVtcCgpIC0tIER1bXAgdGhlIGZpbGVzeXN0ZW0gYmxvY2sgYWxsb2NhdGlvbiByZXNlcnZhdGlvbiBtYXAKKyAqIEByYl9yb290OgkJcm9vdCBvZiBwZXItZmlsZXN5c3RlbSByZXNlcnZhdGlvbiByYiB0cmVlCisgKiBAdmVyYm9zZToJCXZlcmJvc2UgbW9kZQorICogQGZuOgkJCWZ1bmN0aW9uIHdoaWNoIHdpc2hlcyB0byBkdW1wIHRoZSByZXNlcnZhdGlvbiBtYXAKKyAqCisgKiBJZiB2ZXJib3NlIGlzIHR1cm5lZCBvbiwgaXQgd2lsbCBwcmludCB0aGUgd2hvbGUgYmxvY2sgcmVzZXJ2YXRpb24KKyAqIHdpbmRvd3Moc3RhcnQsIGVuZCkuCU90aGVyd2lzZSwgaXQgd2lsbCBvbmx5IHByaW50IG91dCB0aGUgImJhZCIgd2luZG93cywKKyAqIHRob3NlIHdpbmRvd3MgdGhhdCBvdmVybGFwIHdpdGggdGhlaXIgaW1tZWRpYXRlIG5laWdoYm9ycy4KKyAqLworI2lmIDEKIHN0YXRpYyB2b2lkIF9fcnN2X3dpbmRvd19kdW1wKHN0cnVjdCByYl9yb290ICpyb290LCBpbnQgdmVyYm9zZSwKIAkJCSAgICAgIGNvbnN0IGNoYXIgKmZuKQogewpAQCAtMTI5LDcgKzE0Nyw3IEBACiAJCXJzdiA9IGxpc3RfZW50cnkobiwgc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSwgcnN2X25vZGUpOwogCQlpZiAodmVyYm9zZSkKIAkJCXByaW50aygicmVzZXJ2YXRpb24gd2luZG93IDB4JXAgIgotCQkJICAgICAgICJzdGFydDogICVkLCBlbmQ6ICAlZFxuIiwKKwkJCSAgICAgICAic3RhcnQ6ICAlbHUsIGVuZDogICVsdVxuIiwKIAkJCSAgICAgICByc3YsIHJzdi0+cnN2X3N0YXJ0LCByc3YtPnJzdl9lbmQpOwogCQlpZiAocnN2LT5yc3Zfc3RhcnQgJiYgcnN2LT5yc3Zfc3RhcnQgPj0gcnN2LT5yc3ZfZW5kKSB7CiAJCQlwcmludGsoIkJhZCByZXNlcnZhdGlvbiAlcCAoc3RhcnQgPj0gZW5kKVxuIiwKQEAgLTE2MSw2ICsxNzksMjIgQEAKICNkZWZpbmUgcnN2X3dpbmRvd19kdW1wKHJvb3QsIHZlcmJvc2UpIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCiAKKy8qKgorICogZ29hbF9pbl9teV9yZXNlcnZhdGlvbigpCisgKiBAcnN2OgkJaW5vZGUncyByZXNlcnZhdGlvbiB3aW5kb3cKKyAqIEBncnBfZ29hbDoJCWdpdmVuIGdvYWwgYmxvY2sgcmVsYXRpdmUgdG8gdGhlIGFsbG9jYXRpb24gYmxvY2sgZ3JvdXAKKyAqIEBncm91cDoJCXRoZSBjdXJyZW50IGFsbG9jYXRpb24gYmxvY2sgZ3JvdXAKKyAqIEBzYjoJCQlmaWxlc3lzdGVtIHN1cGVyIGJsb2NrCisgKgorICogVGVzdCBpZiB0aGUgZ2l2ZW4gZ29hbCBibG9jayAoZ3JvdXAgcmVsYXRpdmUpIGlzIHdpdGhpbiB0aGUgZmlsZSdzCisgKiBvd24gYmxvY2sgcmVzZXJ2YXRpb24gd2luZG93IHJhbmdlLgorICoKKyAqIElmIHRoZSByZXNlcnZhdGlvbiB3aW5kb3cgaXMgb3V0c2lkZSB0aGUgZ29hbCBhbGxvY2F0aW9uIGdyb3VwLCByZXR1cm4gMDsKKyAqIGdycF9nb2FsIChnaXZlbiBnb2FsIGJsb2NrKSBjb3VsZCBiZSAtMSwgd2hpY2ggbWVhbnMgbm8gc3BlY2lmaWMKKyAqIGdvYWwgYmxvY2suIEluIHRoaXMgY2FzZSwgYWx3YXlzIHJldHVybiAxLgorICogSWYgdGhlIGdvYWwgYmxvY2sgaXMgd2l0aGluIHRoZSByZXNlcnZhdGlvbiB3aW5kb3csIHJldHVybiAxOworICogb3RoZXJ3aXNlLCByZXR1cm4gMDsKKyAqLwogc3RhdGljIGludAogZ29hbF9pbl9teV9yZXNlcnZhdGlvbihzdHJ1Y3QgZXh0M19yZXNlcnZlX3dpbmRvdyAqcnN2LCBleHQzX2dycGJsa190IGdycF9nb2FsLAogCQkJdW5zaWduZWQgaW50IGdyb3VwLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYikKQEAgLTE2OCw3ICsyMDIsNyBAQAogCWV4dDNfZnNibGtfdCBncm91cF9maXJzdF9ibG9jaywgZ3JvdXBfbGFzdF9ibG9jazsKIAogCWdyb3VwX2ZpcnN0X2Jsb2NrID0gZXh0M19ncm91cF9maXJzdF9ibG9ja19ubyhzYiwgZ3JvdXApOwotCWdyb3VwX2xhc3RfYmxvY2sgPSBncm91cF9maXJzdF9ibG9jayArIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxOworCWdyb3VwX2xhc3RfYmxvY2sgPSBncm91cF9maXJzdF9ibG9jayArIChFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpIC0gMSk7CiAKIAlpZiAoKHJzdi0+X3Jzdl9zdGFydCA+IGdyb3VwX2xhc3RfYmxvY2spIHx8CiAJICAgIChyc3YtPl9yc3ZfZW5kIDwgZ3JvdXBfZmlyc3RfYmxvY2spKQpAQCAtMTc5LDcgKzIxMywxMSBAQAogCXJldHVybiAxOwogfQogCi0vKgorLyoqCisgKiBzZWFyY2hfcmVzZXJ2ZV93aW5kb3coKQorICogQHJiX3Jvb3Q6CQlyb290IG9mIHJlc2VydmF0aW9uIHRyZWUKKyAqIEBnb2FsOgkJdGFyZ2V0IGFsbG9jYXRpb24gYmxvY2sKKyAqCiAgKiBGaW5kIHRoZSByZXNlcnZlZCB3aW5kb3cgd2hpY2ggaW5jbHVkZXMgdGhlIGdvYWwsIG9yIHRoZSBwcmV2aW91cyBvbmUKICAqIGlmIHRoZSBnb2FsIGlzIG5vdCBpbiBhbnkgd2luZG93LgogICogUmV0dXJucyBOVUxMIGlmIHRoZXJlIGFyZSBubyB3aW5kb3dzIG9yIGlmIGFsbCB3aW5kb3dzIHN0YXJ0IGFmdGVyIHRoZSBnb2FsLgpAQCAtMjE2LDYgKzI1NCwxMyBAQAogCXJldHVybiByc3Y7CiB9CiAKKy8qKgorICogZXh0M19yc3Zfd2luZG93X2FkZCgpIC0tIEluc2VydCBhIHdpbmRvdyB0byB0aGUgYmxvY2sgcmVzZXJ2YXRpb24gcmIgdHJlZS4KKyAqIEBzYjoJCQlzdXBlciBibG9jaworICogQHJzdjoJCXJlc2VydmF0aW9uIHdpbmRvdyB0byBhZGQKKyAqCisgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHJzdl9sb2NrIGhvbGQuCisgKi8KIHZvaWQgZXh0M19yc3Zfd2luZG93X2FkZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkgICAgc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSAqcnN2KQogewpAQCAtMjM2LDE0ICsyODEsMjUgQEAKIAkJCXAgPSAmKCpwKS0+cmJfbGVmdDsKIAkJZWxzZSBpZiAoc3RhcnQgPiB0aGlzLT5yc3ZfZW5kKQogCQkJcCA9ICYoKnApLT5yYl9yaWdodDsKLQkJZWxzZQorCQllbHNlIHsKKwkJCXJzdl93aW5kb3dfZHVtcChyb290LCAxKTsKIAkJCUJVRygpOworCQl9CiAJfQogCiAJcmJfbGlua19ub2RlKG5vZGUsIHBhcmVudCwgcCk7CiAJcmJfaW5zZXJ0X2NvbG9yKG5vZGUsIHJvb3QpOwogfQogCisvKioKKyAqIGV4dDNfcnN2X3dpbmRvd19yZW1vdmUoKSAtLSB1bmxpbmsgYSB3aW5kb3cgZnJvbSB0aGUgcmVzZXJ2YXRpb24gcmIgdHJlZQorICogQHNiOgkJCXN1cGVyIGJsb2NrCisgKiBAcnN2OgkJcmVzZXJ2YXRpb24gd2luZG93IHRvIHJlbW92ZQorICoKKyAqIE1hcmsgdGhlIGJsb2NrIHJlc2VydmF0aW9uIHdpbmRvdyBhcyBub3QgYWxsb2NhdGVkLCBhbmQgdW5saW5rIGl0CisgKiBmcm9tIHRoZSBmaWxlc3lzdGVtIHJlc2VydmF0aW9uIHdpbmRvdyByYiB0cmVlLiBNdXN0IGJlIGNhbGxlZCB3aXRoCisgKiByc3ZfbG9jayBob2xkLgorICovCiBzdGF0aWMgdm9pZCByc3Zfd2luZG93X3JlbW92ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSAqcnN2KQogewpAQCAtMjUzLDExICszMDksMzkgQEAKIAlyYl9lcmFzZSgmcnN2LT5yc3Zfbm9kZSwgJkVYVDNfU0Ioc2IpLT5zX3Jzdl93aW5kb3dfcm9vdCk7CiB9CiAKKy8qCisgKiByc3ZfaXNfZW1wdHkoKSAtLSBDaGVjayBpZiB0aGUgcmVzZXJ2YXRpb24gd2luZG93IGlzIGFsbG9jYXRlZC4KKyAqIEByc3Y6CQlnaXZlbiByZXNlcnZhdGlvbiB3aW5kb3cgdG8gY2hlY2sKKyAqCisgKiByZXR1cm5zIDEgaWYgdGhlIGVuZCBibG9jayBpcyBFWFQzX1JFU0VSVkVfV0lORE9XX05PVF9BTExPQ0FURUQuCisgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHJzdl9pc19lbXB0eShzdHJ1Y3QgZXh0M19yZXNlcnZlX3dpbmRvdyAqcnN2KQogewogCS8qIGEgdmFsaWQgcmVzZXJ2YXRpb24gZW5kIGJsb2NrIGNvdWxkIG5vdCBiZSAwICovCi0JcmV0dXJuIChyc3YtPl9yc3ZfZW5kID09IEVYVDNfUkVTRVJWRV9XSU5ET1dfTk9UX0FMTE9DQVRFRCk7CisJcmV0dXJuIHJzdi0+X3Jzdl9lbmQgPT0gRVhUM19SRVNFUlZFX1dJTkRPV19OT1RfQUxMT0NBVEVEOwogfQorCisvKioKKyAqIGV4dDNfaW5pdF9ibG9ja19hbGxvY19pbmZvKCkKKyAqIEBpbm9kZToJCWZpbGUgaW5vZGUgc3RydWN0dXJlCisgKgorICogQWxsb2NhdGUgYW5kIGluaXRpYWxpemUgdGhlCXJlc2VydmF0aW9uIHdpbmRvdyBzdHJ1Y3R1cmUsIGFuZAorICogbGluayB0aGUgd2luZG93IHRvIHRoZSBleHQzIGlub2RlIHN0cnVjdHVyZSBhdCBsYXN0CisgKgorICogVGhlIHJlc2VydmF0aW9uIHdpbmRvdyBzdHJ1Y3R1cmUgaXMgb25seSBkeW5hbWljYWxseSBhbGxvY2F0ZWQKKyAqIGFuZCBsaW5rZWQgdG8gZXh0MyBpbm9kZSB0aGUgZmlyc3QgdGltZSB0aGUgb3BlbiBmaWxlCisgKiBuZWVkcyBhIG5ldyBibG9jay4gU28sIGJlZm9yZSBldmVyeSBleHQzX25ld19ibG9jayhzKSBjYWxsLCBmb3IKKyAqIHJlZ3VsYXIgZmlsZXMsIHdlIHNob3VsZCBjaGVjayB3aGV0aGVyIHRoZSByZXNlcnZhdGlvbiB3aW5kb3cKKyAqIHN0cnVjdHVyZSBleGlzdHMgb3Igbm90LiBJbiB0aGUgbGF0dGVyIGNhc2UsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLgorICogRmFpbCB0byBkbyBzbyB3aWxsIHJlc3VsdCBpbiBibG9jayByZXNlcnZhdGlvbiBiZWluZyB0dXJuZWQgb2ZmIGZvciB0aGF0CisgKiBvcGVuIGZpbGUuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBleHQzX2dldF9ibG9ja3NfaGFuZGxlKCksIGFsc28gY2FsbGVkCisgKiB3aGVuIHNldHRpbmcgdGhlIHJlc2VydmF0aW9uIHdpbmRvdyBzaXplIHRocm91Z2ggaW9jdGwgYmVmb3JlIHRoZSBmaWxlCisgKiBpcyBvcGVuIGZvciB3cml0ZSAobmVlZHMgYmxvY2sgYWxsb2NhdGlvbikuCisgKgorICogTmVlZHMgdHJ1bmNhdGVfbXV0ZXggcHJvdGVjdGlvbiBwcmlvciB0byBjYWxsIHRoaXMgZnVuY3Rpb24uCisgKi8KIHZvaWQgZXh0M19pbml0X2Jsb2NrX2FsbG9jX2luZm8oc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CkBAIC0yNzEsNyArMzU1LDcgQEAKIAkJcnN2LT5yc3Zfc3RhcnQgPSBFWFQzX1JFU0VSVkVfV0lORE9XX05PVF9BTExPQ0FURUQ7CiAJCXJzdi0+cnN2X2VuZCA9IEVYVDNfUkVTRVJWRV9XSU5ET1dfTk9UX0FMTE9DQVRFRDsKIAotCSAJLyoKKwkJLyoKIAkJICogaWYgZmlsZXN5c3RlbSBpcyBtb3VudGVkIHdpdGggTk9SRVNFUlZBVElPTiwgdGhlIGdvYWwKIAkJICogcmVzZXJ2YXRpb24gd2luZG93IHNpemUgaXMgc2V0IHRvIHplcm8gdG8gaW5kaWNhdGUKIAkJICogYmxvY2sgcmVzZXJ2YXRpb24gaXMgb2ZmCkBAIC0yODcsNiArMzcxLDE5IEBACiAJZWktPmlfYmxvY2tfYWxsb2NfaW5mbyA9IGJsb2NrX2k7CiB9CiAKKy8qKgorICogZXh0M19kaXNjYXJkX3Jlc2VydmF0aW9uKCkKKyAqIEBpbm9kZToJCWlub2RlCisgKgorICogRGlzY2FyZChmcmVlKSBibG9jayByZXNlcnZhdGlvbiB3aW5kb3cgb24gbGFzdCBmaWxlIGNsb3NlLCBvciB0cnVuY2F0ZQorICogb3IgYXQgbGFzdCBpcHV0KCkuCisgKgorICogSXQgaXMgYmVpbmcgY2FsbGVkIGluIHRocmVlIGNhc2VzOgorICoJZXh0M19yZWxlYXNlX2ZpbGUoKTogbGFzdCB3cml0ZXIgY2xvc2UgdGhlIGZpbGUKKyAqCWV4dDNfY2xlYXJfaW5vZGUoKTogbGFzdCBpcHV0KCksIHdoZW4gbm9ib2R5IGxpbmsgdG8gdGhpcyBmaWxlLgorICoJZXh0M190cnVuY2F0ZSgpOiB3aGVuIHRoZSBibG9jayBpbmRpcmVjdCBtYXAgaXMgYWJvdXQgdG8gY2hhbmdlLgorICoKKyAqLwogdm9pZCBleHQzX2Rpc2NhcmRfcmVzZXJ2YXRpb24oc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlzdHJ1Y3QgZXh0M19pbm9kZV9pbmZvICplaSA9IEVYVDNfSShpbm9kZSk7CkBAIC0zMDYsNyArNDAzLDE0IEBACiAJfQogfQogCi0vKiBGcmVlIGdpdmVuIGJsb2NrcywgdXBkYXRlIHF1b3RhIGFuZCBpX2Jsb2NrcyBmaWVsZCAqLworLyoqCisgKiBleHQzX2ZyZWVfYmxvY2tzX3NiKCkgLS0gRnJlZSBnaXZlbiBibG9ja3MgYW5kIHVwZGF0ZSBxdW90YQorICogQGhhbmRsZToJCQloYW5kbGUgdG8gdGhpcyB0cmFuc2FjdGlvbgorICogQHNiOgkJCQlzdXBlciBibG9jaworICogQGJsb2NrOgkJCXN0YXJ0IHBoeXNjaWFsIGJsb2NrIHRvIGZyZWUKKyAqIEBjb3VudDoJCQludW1iZXIgb2YgYmxvY2tzIHRvIGZyZWUKKyAqIEBwZHF1b3RfZnJlZWRfYmxvY2tzOglwb2ludGVyIHRvIHF1b3RhCisgKi8KIHZvaWQgZXh0M19mcmVlX2Jsb2Nrc19zYihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJIGV4dDNfZnNibGtfdCBibG9jaywgdW5zaWduZWQgbG9uZyBjb3VudCwKIAkJCSB1bnNpZ25lZCBsb25nICpwZHF1b3RfZnJlZWRfYmxvY2tzKQpAQCAtNDE5LDggKzUyMyw4IEBACiAJCX0KIAkJLyogQEBAIFRoaXMgcHJldmVudHMgbmV3bHktYWxsb2NhdGVkIGRhdGEgZnJvbSBiZWluZwogCQkgKiBmcmVlZCBhbmQgdGhlbiByZWFsbG9jYXRlZCB3aXRoaW4gdGhlIHNhbWUKLQkJICogdHJhbnNhY3Rpb24uIAotCQkgKiAKKwkJICogdHJhbnNhY3Rpb24uCisJCSAqCiAJCSAqIElkZWFsbHkgd2Ugd291bGQgd2FudCB0byBhbGxvdyB0aGF0IHRvIGhhcHBlbiwgYnV0IHRvCiAJCSAqIGRvIHNvIHJlcXVpcmVzIG1ha2luZyBqb3VybmFsX2ZvcmdldCgpIGNhcGFibGUgb2YKIAkJICogcmV2b2tpbmcgdGhlIHF1ZXVlZCB3cml0ZSBvZiBhIGRhdGEgYmxvY2ssIHdoaWNoCkBAIC00MzMsNyArNTM3LDcgQEAKIAkJICogc2FmZSBub3QgdG8gc2V0IHRoZSBhbGxvY2F0aW9uIGJpdCBpbiB0aGUgY29tbWl0dGVkCiAJCSAqIGJpdG1hcCwgYmVjYXVzZSB3ZSBrbm93IHRoYXQgdGhlcmUgaXMgbm8gb3V0c3RhbmRpbmcKIAkJICogYWN0aXZpdHkgb24gdGhlIGJ1ZmZlciBhbnkgbW9yZSBhbmQgc28gaXQgaXMgc2FmZSB0bwotCQkgKiByZWFsbG9jYXRlIGl0LiAgCisJCSAqIHJlYWxsb2NhdGUgaXQuCiAJCSAqLwogCQlCVUZGRVJfVFJBQ0UoYml0bWFwX2JoLCAic2V0IGluIGJfY29tbWl0dGVkX2RhdGEiKTsKIAkJSl9BU1NFUlRfQkgoYml0bWFwX2JoLApAQCAtNDkwLDcgKzU5NCwxMyBAQAogCXJldHVybjsKIH0KIAotLyogRnJlZSBnaXZlbiBibG9ja3MsIHVwZGF0ZSBxdW90YSBhbmQgaV9ibG9ja3MgZmllbGQgKi8KKy8qKgorICogZXh0M19mcmVlX2Jsb2NrcygpIC0tIEZyZWUgZ2l2ZW4gYmxvY2tzIGFuZCB1cGRhdGUgcXVvdGEKKyAqIEBoYW5kbGU6CQloYW5kbGUgZm9yIHRoaXMgdHJhbnNhY3Rpb24KKyAqIEBpbm9kZToJCWlub2RlCisgKiBAYmxvY2s6CQlzdGFydCBwaHlzaWNhbCBibG9jayB0byBmcmVlCisgKiBAY291bnQ6CQludW1iZXIgb2YgYmxvY2tzIHRvIGNvdW50CisgKi8KIHZvaWQgZXh0M19mcmVlX2Jsb2NrcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJZXh0M19mc2Jsa190IGJsb2NrLCB1bnNpZ25lZCBsb25nIGNvdW50KQogewpAQCAtNTA4LDcgKzYxOCwxMSBAQAogCXJldHVybjsKIH0KIAotLyoKKy8qKgorICogZXh0M190ZXN0X2FsbG9jYXRhYmxlKCkKKyAqIEBucjoJCQlnaXZlbiBhbGxvY2F0aW9uIGJsb2NrIGdyb3VwCisgKiBAYmg6CQkJYnVmZmVyaGVhZCBjb250YWlucyB0aGUgYml0bWFwIG9mIHRoZSBnaXZlbiBibG9jayBncm91cAorICoKICAqIEZvciBleHQzIGFsbG9jYXRpb25zLCB3ZSBtdXN0IG5vdCByZXVzZSBhbnkgYmxvY2tzIHdoaWNoIGFyZQogICogYWxsb2NhdGVkIGluIHRoZSBiaXRtYXAgYnVmZmVyJ3MgImxhc3QgY29tbWl0dGVkIGRhdGEiIGNvcHkuICBUaGlzCiAgKiBwcmV2ZW50cyBkZWxldGVzIGZyb20gZnJlZWluZyB1cCB0aGUgcGFnZSBmb3IgcmV1c2UgdW50aWwgd2UgaGF2ZQpAQCAtNTE4LDcgKzYzMiw3IEBACiAgKiBkYXRhIHdvdWxkIGFsbG93IHRoZSBvbGQgYmxvY2sgdG8gYmUgb3ZlcndyaXR0ZW4gYmVmb3JlIHRoZQogICogdHJhbnNhY3Rpb24gY29tbWl0dGVkIChiZWNhdXNlIHdlIGZvcmNlIGRhdGEgdG8gZGlzayBiZWZvcmUgY29tbWl0KS4KICAqIFRoaXMgd291bGQgbGVhZCB0byBjb3JydXB0aW9uIGlmIHdlIGNyYXNoZWQgYmV0d2VlbiBvdmVyd3JpdGluZyB0aGUKLSAqIGRhdGEgYW5kIGNvbW1pdHRpbmcgdGhlIGRlbGV0ZS4gCisgKiBkYXRhIGFuZCBjb21taXR0aW5nIHRoZSBkZWxldGUuCiAgKgogICogQEBAIFdlIG1heSB3YW50IHRvIG1ha2UgdGhpcyBhbGxvY2F0aW9uIGJlaGF2aW91ciBjb25kaXRpb25hbCBvbgogICogZGF0YS13cml0ZXMgYXQgc29tZSBwb2ludCwgYW5kIGRpc2FibGUgaXQgZm9yIG1ldGFkYXRhIGFsbG9jYXRpb25zIG9yCkBAIC01NDEsNiArNjU1LDE2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorLyoqCisgKiBiaXRtYXBfc2VhcmNoX25leHRfdXNhYmxlX2Jsb2NrKCkKKyAqIEBzdGFydDoJCXRoZSBzdGFydGluZyBibG9jayAoZ3JvdXAgcmVsYXRpdmUpIG9mIHRoZSBzZWFyY2gKKyAqIEBiaDoJCQlidWZmZXJoZWFkIGNvbnRhaW5zIHRoZSBibG9jayBncm91cCBiaXRtYXAKKyAqIEBtYXhibG9ja3M6CQl0aGUgZW5kaW5nIGJsb2NrIChncm91cCByZWxhdGl2ZSkgb2YgdGhlIHJlc2VydmF0aW9uCisgKgorICogVGhlIGJpdG1hcCBzZWFyY2ggLS0tIHNlYXJjaCBmb3J3YXJkIGFsdGVybmF0ZWx5IHRocm91Z2ggdGhlIGFjdHVhbAorICogYml0bWFwIG9uIGRpc2sgYW5kIHRoZSBsYXN0LWNvbW1pdHRlZCBjb3B5IGluIGpvdXJuYWwsIHVudGlsIHdlIGZpbmQgYQorICogYml0IGZyZWUgaW4gYm90aCBiaXRtYXBzLgorICovCiBzdGF0aWMgZXh0M19ncnBibGtfdAogYml0bWFwX3NlYXJjaF9uZXh0X3VzYWJsZV9ibG9jayhleHQzX2dycGJsa190IHN0YXJ0LCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCQlleHQzX2dycGJsa190IG1heGJsb2NrcykKQEAgLTU0OCwxMSArNjcyLDYgQEAKIAlleHQzX2dycGJsa190IG5leHQ7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqamggPSBiaDJqaChiaCk7CiAKLQkvKgotCSAqIFRoZSBiaXRtYXAgc2VhcmNoIC0tLSBzZWFyY2ggZm9yd2FyZCBhbHRlcm5hdGVseSB0aHJvdWdoIHRoZSBhY3R1YWwKLQkgKiBiaXRtYXAgYW5kIHRoZSBsYXN0LWNvbW1pdHRlZCBjb3B5IHVudGlsIHdlIGZpbmQgYSBiaXQgZnJlZSBpbgotCSAqIGJvdGgKLQkgKi8KIAl3aGlsZSAoc3RhcnQgPCBtYXhibG9ja3MpIHsKIAkJbmV4dCA9IGV4dDNfZmluZF9uZXh0X3plcm9fYml0KGJoLT5iX2RhdGEsIG1heGJsb2Nrcywgc3RhcnQpOwogCQlpZiAobmV4dCA+PSBtYXhibG9ja3MpCkBAIC01NjIsMTQgKzY4MSwyMCBAQAogCQlqYmRfbG9ja19iaF9zdGF0ZShiaCk7CiAJCWlmIChqaC0+Yl9jb21taXR0ZWRfZGF0YSkKIAkJCXN0YXJ0ID0gZXh0M19maW5kX25leHRfemVyb19iaXQoamgtPmJfY29tbWl0dGVkX2RhdGEsCi0JCQkJCQkgCW1heGJsb2NrcywgbmV4dCk7CisJCQkJCQkJbWF4YmxvY2tzLCBuZXh0KTsKIAkJamJkX3VubG9ja19iaF9zdGF0ZShiaCk7CiAJfQogCXJldHVybiAtMTsKIH0KIAotLyoKLSAqIEZpbmQgYW4gYWxsb2NhdGFibGUgYmxvY2sgaW4gYSBiaXRtYXAuICBXZSBob25vdXIgYm90aCB0aGUgYml0bWFwIGFuZAorLyoqCisgKiBmaW5kX25leHRfdXNhYmxlX2Jsb2NrKCkKKyAqIEBzdGFydDoJCXRoZSBzdGFydGluZyBibG9jayAoZ3JvdXAgcmVsYXRpdmUpIHRvIGZpbmQgbmV4dAorICoJCQlhbGxvY2F0YWJsZSBibG9jayBpbiBiaXRtYXAuCisgKiBAYmg6CQkJYnVmZmVyaGVhZCBjb250YWlucyB0aGUgYmxvY2sgZ3JvdXAgYml0bWFwCisgKiBAbWF4YmxvY2tzOgkJdGhlIGVuZGluZyBibG9jayAoZ3JvdXAgcmVsYXRpdmUpIGZvciB0aGUgc2VhcmNoCisgKgorICogRmluZCBhbiBhbGxvY2F0YWJsZSBibG9jayBpbiBhIGJpdG1hcC4gIFdlIGhvbm9yIGJvdGggdGhlIGJpdG1hcCBhbmQKICAqIGl0cyBsYXN0LWNvbW1pdHRlZCBjb3B5IChpZiB0aGF0IGV4aXN0cyksIGFuZCBwZXJmb3JtIHRoZSAibW9zdAogICogYXBwcm9wcmlhdGUgYWxsb2NhdGlvbiIgYWxnb3JpdGhtIG9mIGxvb2tpbmcgZm9yIGEgZnJlZSBibG9jayBuZWFyCiAgKiB0aGUgaW5pdGlhbCBnb2FsOyB0aGVuIGZvciBhIGZyZWUgYnl0ZSBzb21ld2hlcmUgaW4gdGhlIGJpdG1hcDsgdGhlbgpAQCAtNTg0LDcgKzcwOSw3IEBACiAKIAlpZiAoc3RhcnQgPiAwKSB7CiAJCS8qCi0JCSAqIFRoZSBnb2FsIHdhcyBvY2N1cGllZDsgc2VhcmNoIGZvcndhcmQgZm9yIGEgZnJlZSAKKwkJICogVGhlIGdvYWwgd2FzIG9jY3VwaWVkOyBzZWFyY2ggZm9yd2FyZCBmb3IgYSBmcmVlCiAJCSAqIGJsb2NrIHdpdGhpbiB0aGUgbmV4dCBYWCBibG9ja3MuCiAJCSAqCiAJCSAqIGVuZF9nb2FsIGlzIG1vcmUgb3IgbGVzcyByYW5kb20sIGJ1dCBpdCBoYXMgdG8gYmUKQEAgLTYyMCw3ICs3NDUsMTEgQEAKIAlyZXR1cm4gaGVyZTsKIH0KIAotLyoKKy8qKgorICogY2xhaW1fYmxvY2soKQorICogQGJsb2NrOgkJdGhlIGZyZWUgYmxvY2sgKGdyb3VwIHJlbGF0aXZlKSB0byBhbGxvY2F0ZQorICogQGJoOgkJCXRoZSBidWZmZXJoZWFkIGNvbnRhaW50cyB0aGUgYmxvY2sgZ3JvdXAgYml0bWFwCisgKgogICogV2UgdGhpbmsgd2UgY2FuIGFsbG9jYXRlIHRoaXMgYmxvY2sgaW4gdGhpcyBiaXRtYXAuICBUcnkgdG8gc2V0IHRoZSBiaXQuCiAgKiBJZiB0aGF0IHN1Y2NlZWRzIHRoZW4gY2hlY2sgdGhhdCBub2JvZHkgaGFzIGFsbG9jYXRlZCBhbmQgdGhlbiBmcmVlZCB0aGUKICAqIGJsb2NrIHNpbmNlIHdlIHNhdyB0aGF0IGlzIHdhcyBub3QgbWFya2VkIGluIGJfY29tbWl0dGVkX2RhdGEuICBJZiBpdCBfd2FzXwpAQCAtNjQ2LDcgKzc3NSwyNiBAQAogCXJldHVybiByZXQ7CiB9CiAKLS8qCisvKioKKyAqIGV4dDNfdHJ5X3RvX2FsbG9jYXRlKCkKKyAqIEBzYjoJCQlzdXBlcmJsb2NrCisgKiBAaGFuZGxlOgkJaGFuZGxlIHRvIHRoaXMgdHJhbnNhY3Rpb24KKyAqIEBncm91cDoJCWdpdmVuIGFsbG9jYXRpb24gYmxvY2sgZ3JvdXAKKyAqIEBiaXRtYXBfYmg6CQlidWZmZXJoZWFkIGhvbGRzIHRoZSBibG9jayBiaXRtYXAKKyAqIEBncnBfZ29hbDoJCWdpdmVuIHRhcmdldCBibG9jayB3aXRoaW4gdGhlIGdyb3VwCisgKiBAY291bnQ6CQl0YXJnZXQgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZQorICogQG15X3JzdjoJCXJlc2VydmF0aW9uIHdpbmRvdworICoKKyAqIEF0dGVtcHQgdG8gYWxsb2NhdGUgYmxvY2tzIHdpdGhpbiBhIGdpdmUgcmFuZ2UuIFNldCB0aGUgcmFuZ2Ugb2YgYWxsb2NhdGlvbgorICogZmlyc3QsIHRoZW4gZmluZCB0aGUgZmlyc3QgZnJlZSBiaXQocykgZnJvbSB0aGUgYml0bWFwICh3aXRoaW4gdGhlIHJhbmdlKSwKKyAqIGFuZCBhdCBsYXN0LCBhbGxvY2F0ZSB0aGUgYmxvY2tzIGJ5IGNsYWltaW5nIHRoZSBmb3VuZCBmcmVlIGJpdCBhcyBhbGxvY2F0ZWQuCisgKgorICogVG8gc2V0IHRoZSByYW5nZSBvZiB0aGlzIGFsbG9jYXRpb246CisgKglpZiB0aGVyZSBpcyBhIHJlc2VydmF0aW9uIHdpbmRvdywgb25seSB0cnkgdG8gYWxsb2NhdGUgYmxvY2socykgZnJvbSB0aGUKKyAqCWZpbGUncyBvd24gcmVzZXJ2YXRpb24gd2luZG93OworICoJT3RoZXJ3aXNlLCB0aGUgYWxsb2NhdGlvbiByYW5nZSBzdGFydHMgZnJvbSB0aGUgZ2l2ZSBnb2FsIGJsb2NrLCBlbmRzIGF0CisgKgl0aGUgYmxvY2sgZ3JvdXAncyBsYXN0IGJsb2NrLgorICoKICAqIElmIHdlIGZhaWxlZCB0byBhbGxvY2F0ZSB0aGUgZGVzaXJlZCBibG9jayB0aGVuIHdlIG1heSBlbmQgdXAgY3Jvc3NpbmcgdG8gYQogICogbmV3IGJpdG1hcC4gIEluIHRoYXQgY2FzZSB3ZSBtdXN0IHJlbGVhc2Ugd3JpdGUgYWNjZXNzIHRvIHRoZSBvbGQgb25lIHZpYQogICogZXh0M19qb3VybmFsX3JlbGVhc2VfYnVmZmVyKCksIGVsc2Ugd2UnbGwgcnVuIG91dCBvZiBjcmVkaXRzLgpAQCAtNzAzLDcgKzg1MSw4IEBACiAJfQogCXN0YXJ0ID0gZ3JwX2dvYWw7CiAKLQlpZiAoIWNsYWltX2Jsb2NrKHNiX2JnbF9sb2NrKEVYVDNfU0Ioc2IpLCBncm91cCksIGdycF9nb2FsLCBiaXRtYXBfYmgpKSB7CisJaWYgKCFjbGFpbV9ibG9jayhzYl9iZ2xfbG9jayhFWFQzX1NCKHNiKSwgZ3JvdXApLAorCQlncnBfZ29hbCwgYml0bWFwX2JoKSkgewogCQkvKgogCQkgKiBUaGUgYmxvY2sgd2FzIGFsbG9jYXRlZCBieSBhbm90aGVyIHRocmVhZCwgb3IgaXQgd2FzCiAJCSAqIGFsbG9jYXRlZCBhbmQgdGhlbiBmcmVlZCBieSBhbm90aGVyIHRocmVhZApAQCAtNzE4LDcgKzg2Nyw4IEBACiAJZ3JwX2dvYWwrKzsKIAl3aGlsZSAobnVtIDwgKmNvdW50ICYmIGdycF9nb2FsIDwgZW5kCiAJCSYmIGV4dDNfdGVzdF9hbGxvY2F0YWJsZShncnBfZ29hbCwgYml0bWFwX2JoKQotCQkmJiBjbGFpbV9ibG9jayhzYl9iZ2xfbG9jayhFWFQzX1NCKHNiKSwgZ3JvdXApLCBncnBfZ29hbCwgYml0bWFwX2JoKSkgeworCQkmJiBjbGFpbV9ibG9jayhzYl9iZ2xfbG9jayhFWFQzX1NCKHNiKSwgZ3JvdXApLAorCQkJCWdycF9nb2FsLCBiaXRtYXBfYmgpKSB7CiAJCW51bSsrOwogCQlncnBfZ29hbCsrOwogCX0KQEAgLTczMCwxMiArODgwLDEyIEBACiB9CiAKIC8qKgotICogCWZpbmRfbmV4dF9yZXNlcnZhYmxlX3dpbmRvdygpOgorICoJZmluZF9uZXh0X3Jlc2VydmFibGVfd2luZG93KCk6CiAgKgkJZmluZCBhIHJlc2VydmFibGUgc3BhY2Ugd2l0aGluIHRoZSBnaXZlbiByYW5nZS4KICAqCQlJdCBkb2VzIG5vdCBhbGxvY2F0ZSB0aGUgcmVzZXJ2YXRpb24gd2luZG93IGZvciBub3c6CiAgKgkJYWxsb2NfbmV3X3Jlc2VydmF0aW9uKCkgd2lsbCBkbyB0aGUgd29yayBsYXRlci4KICAqCi0gKiAJQHNlYXJjaF9oZWFkOiB0aGUgaGVhZCBvZiB0aGUgc2VhcmNoaW5nIGxpc3Q7CisgKglAc2VhcmNoX2hlYWQ6IHRoZSBoZWFkIG9mIHRoZSBzZWFyY2hpbmcgbGlzdDsKICAqCQlUaGlzIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgbGlzdCBoZWFkIG9mIHRoZSB3aG9sZSBmaWxlc3lzdGVtCiAgKgogICoJCVdlIGhhdmUgYm90aCBoZWFkIGFuZCBzdGFydF9ibG9jayB0byBhc3Npc3QgdGhlIHNlYXJjaApAQCAtNzQzLDEyICs4OTMsMTIgQEAKICAqCQlidXQgd2Ugd2lsbCBzaGlmdCB0byB0aGUgcGxhY2Ugd2hlcmUgc3RhcnRfYmxvY2sgaXMsCiAgKgkJdGhlbiBzdGFydCBmcm9tIHRoZXJlLCB3aGVuIGxvb2tpbmcgZm9yIGEgcmVzZXJ2YWJsZSBzcGFjZS4KICAqCi0gKiAJQHNpemU6IHRoZSB0YXJnZXQgbmV3IHJlc2VydmF0aW9uIHdpbmRvdyBzaXplCisgKglAc2l6ZTogdGhlIHRhcmdldCBuZXcgcmVzZXJ2YXRpb24gd2luZG93IHNpemUKICAqCi0gKiAJQGdyb3VwX2ZpcnN0X2Jsb2NrOiB0aGUgZmlyc3QgYmxvY2sgd2UgY29uc2lkZXIgdG8gc3RhcnQKKyAqCUBncm91cF9maXJzdF9ibG9jazogdGhlIGZpcnN0IGJsb2NrIHdlIGNvbnNpZGVyIHRvIHN0YXJ0CiAgKgkJCXRoZSByZWFsIHNlYXJjaCBmcm9tCiAgKgotICogCUBsYXN0X2Jsb2NrOgorICoJQGxhc3RfYmxvY2s6CiAgKgkJdGhlIG1heGltdW0gYmxvY2sgbnVtYmVyIHRoYXQgb3VyIGdvYWwgcmVzZXJ2YWJsZSBzcGFjZQogICoJCWNvdWxkIHN0YXJ0IGZyb20uIFRoaXMgaXMgbm9ybWFsbHkgdGhlIGxhc3QgYmxvY2sgaW4gdGhpcwogICoJCWdyb3VwLiBUaGUgc2VhcmNoIHdpbGwgZW5kIHdoZW4gd2UgZm91bmQgdGhlIHN0YXJ0IG9mIG5leHQKQEAgLTc1NiwxMCArOTA2LDEwIEBACiAgKgkJVGhpcyBjb3VsZCBoYW5kbGUgdGhlIGNyb3NzIGJvdW5kYXJ5IHJlc2VydmF0aW9uIHdpbmRvdwogICoJCXJlcXVlc3QuCiAgKgotICogCWJhc2ljYWxseSB3ZSBzZWFyY2ggZnJvbSB0aGUgZ2l2ZW4gcmFuZ2UsIHJhdGhlciB0aGFuIHRoZSB3aG9sZQotICogCXJlc2VydmF0aW9uIGRvdWJsZSBsaW5rZWQgbGlzdCwgKHN0YXJ0X2Jsb2NrLCBsYXN0X2Jsb2NrKQotICogCXRvIGZpbmQgYSBmcmVlIHJlZ2lvbiB0aGF0IGlzIG9mIG15IHNpemUgYW5kIGhhcyBub3QKLSAqIAliZWVuIHJlc2VydmVkLgorICoJYmFzaWNhbGx5IHdlIHNlYXJjaCBmcm9tIHRoZSBnaXZlbiByYW5nZSwgcmF0aGVyIHRoYW4gdGhlIHdob2xlCisgKglyZXNlcnZhdGlvbiBkb3VibGUgbGlua2VkIGxpc3QsIChzdGFydF9ibG9jaywgbGFzdF9ibG9jaykKKyAqCXRvIGZpbmQgYSBmcmVlIHJlZ2lvbiB0aGF0IGlzIG9mIG15IHNpemUgYW5kIGhhcyBub3QKKyAqCWJlZW4gcmVzZXJ2ZWQuCiAgKgogICovCiBzdGF0aWMgaW50IGZpbmRfbmV4dF9yZXNlcnZhYmxlX3dpbmRvdygKQEAgLTgxMiw3ICs5NjIsNyBAQAogCQkJLyoKIAkJCSAqIEZvdW5kIGEgcmVzZXJ2ZWFibGUgc3BhY2UgYmlnIGVub3VnaC4gIFdlIGNvdWxkCiAJCQkgKiBoYXZlIGEgcmVzZXJ2YXRpb24gYWNyb3NzIHRoZSBncm91cCBib3VuZGFyeSBoZXJlCi0JCSAJICovCisJCQkgKi8KIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtODQ4LDcgKzk5OCw3IEBACiB9CiAKIC8qKgotICogCWFsbG9jX25ld19yZXNlcnZhdGlvbigpLS1hbGxvY2F0ZSBhIG5ldyByZXNlcnZhdGlvbiB3aW5kb3cKKyAqCWFsbG9jX25ld19yZXNlcnZhdGlvbigpLS1hbGxvY2F0ZSBhIG5ldyByZXNlcnZhdGlvbiB3aW5kb3cKICAqCiAgKgkJVG8gbWFrZSBhIG5ldyByZXNlcnZhdGlvbiwgd2Ugc2VhcmNoIHBhcnQgb2YgdGhlIGZpbGVzeXN0ZW0KICAqCQlyZXNlcnZhdGlvbiBsaXN0ICh0aGUgbGlzdCB0aGF0IGluc2lkZSB0aGUgZ3JvdXApLiBXZSB0cnkgdG8KQEAgLTg5Nyw3ICsxMDQ3LDcgQEAKIAlzcGlubG9ja190ICpyc3ZfbG9jayA9ICZFWFQzX1NCKHNiKS0+c19yc3Zfd2luZG93X2xvY2s7CiAKIAlncm91cF9maXJzdF9ibG9jayA9IGV4dDNfZ3JvdXBfZmlyc3RfYmxvY2tfbm8oc2IsIGdyb3VwKTsKLQlncm91cF9lbmRfYmxvY2sgPSBncm91cF9maXJzdF9ibG9jayArIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxOworCWdyb3VwX2VuZF9ibG9jayA9IGdyb3VwX2ZpcnN0X2Jsb2NrICsgKEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxKTsKIAogCWlmIChncnBfZ29hbCA8IDApCiAJCXN0YXJ0X2Jsb2NrID0gZ3JvdXBfZmlyc3RfYmxvY2s7CkBAIC05MjksOSArMTA3OSwxMCBAQAogCQlpZiAoKG15X3Jzdi0+cnN2X2FsbG9jX2hpdCA+CiAJCSAgICAgKG15X3Jzdi0+cnN2X2VuZCAtIG15X3Jzdi0+cnN2X3N0YXJ0ICsgMSkgLyAyKSkgewogCQkJLyoKLQkJCSAqIGlmIHdlIHByZXZpb3VzbHkgYWxsb2NhdGlvbiBoaXQgcmF0aW9uIGlzIGdyZWF0ZXIgdGhhbiBoYWxmCi0JCQkgKiB3ZSBkb3VibGUgdGhlIHNpemUgb2YgcmVzZXJ2YXRpb24gd2luZG93IG5leHQgdGltZQotCQkJICogb3RoZXJ3aXNlIGtlZXAgdGhlIHNhbWUKKwkJCSAqIGlmIHRoZSBwcmV2aW91c2x5IGFsbG9jYXRpb24gaGl0IHJhdGlvIGlzCisJCQkgKiBncmVhdGVyIHRoYW4gMS8yLCB0aGVuIHdlIGRvdWJsZSB0aGUgc2l6ZSBvZgorCQkJICogdGhlIHJlc2VydmF0aW9uIHdpbmRvdyB0aGUgbmV4dCB0aW1lLAorCQkJICogb3RoZXJ3aXNlIHdlIGtlZXAgdGhlIHNhbWUgc2l6ZSB3aW5kb3cKIAkJCSAqLwogCQkJc2l6ZSA9IHNpemUgKiAyOwogCQkJaWYgKHNpemUgPiBFWFQzX01BWF9SRVNFUlZFX0JMT0NLUykKQEAgLTEwMTAsNiArMTE2MSwyMyBAQAogCWdvdG8gcmV0cnk7CiB9CiAKKy8qKgorICogdHJ5X3RvX2V4dGVuZF9yZXNlcnZhdGlvbigpCisgKiBAbXlfcnN2OgkJZ2l2ZW4gcmVzZXJ2YXRpb24gd2luZG93CisgKiBAc2I6CQkJc3VwZXIgYmxvY2sKKyAqIEBzaXplOgkJdGhlIGRlbHRhIHRvIGV4dGVuZAorICoKKyAqIEF0dGVtcHQgdG8gZXhwYW5kIHRoZSByZXNlcnZhdGlvbiB3aW5kb3cgbGFyZ2UgZW5vdWdoIHRvIGhhdmUKKyAqIHJlcXVpcmVkIG51bWJlciBvZiBmcmVlIGJsb2NrcworICoKKyAqIFNpbmNlIGV4dDNfdHJ5X3RvX2FsbG9jYXRlKCkgd2lsbCBhbHdheXMgYWxsb2NhdGUgYmxvY2tzIHdpdGhpbgorICogdGhlIHJlc2VydmF0aW9uIHdpbmRvdyByYW5nZSwgaWYgdGhlIHdpbmRvdyBzaXplIGlzIHRvbyBzbWFsbCwKKyAqIG11bHRpcGxlIGJsb2NrcyBhbGxvY2F0aW9uIGhhcyB0byBzdG9wIGF0IHRoZSBlbmQgb2YgdGhlIHJlc2VydmF0aW9uCisgKiB3aW5kb3cuIFRvIG1ha2UgdGhpcyBtb3JlIGVmZmljaWVudCwgZ2l2ZW4gdGhlIHRvdGFsIG51bWJlciBvZgorICogYmxvY2tzIG5lZWRlZCBhbmQgdGhlIGN1cnJlbnQgc2l6ZSBvZiB0aGUgd2luZG93LCB3ZSB0cnkgdG8KKyAqIGV4cGFuZCB0aGUgcmVzZXJ2YXRpb24gd2luZG93IHNpemUgaWYgbmVjZXNzYXJ5IG9uIGEgYmVzdC1lZmZvcnQKKyAqIGJhc2lzIGJlZm9yZSBleHQzX25ld19ibG9ja3MoKSB0cmllcyB0byBhbGxvY2F0ZSBibG9ja3MsCisgKi8KIHN0YXRpYyB2b2lkIHRyeV90b19leHRlbmRfcmVzZXJ2YXRpb24oc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSAqbXlfcnN2LAogCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IHNpemUpCiB7CkBAIC0xMDM1LDcgKzEyMDMsMTcgQEAKIAlzcGluX3VubG9jayhyc3ZfbG9jayk7CiB9CiAKLS8qCisvKioKKyAqIGV4dDNfdHJ5X3RvX2FsbG9jYXRlX3dpdGhfcnN2KCkKKyAqIEBzYjoJCQlzdXBlcmJsb2NrCisgKiBAaGFuZGxlOgkJaGFuZGxlIHRvIHRoaXMgdHJhbnNhY3Rpb24KKyAqIEBncm91cDoJCWdpdmVuIGFsbG9jYXRpb24gYmxvY2sgZ3JvdXAKKyAqIEBiaXRtYXBfYmg6CQlidWZmZXJoZWFkIGhvbGRzIHRoZSBibG9jayBiaXRtYXAKKyAqIEBncnBfZ29hbDoJCWdpdmVuIHRhcmdldCBibG9jayB3aXRoaW4gdGhlIGdyb3VwCisgKiBAY291bnQ6CQl0YXJnZXQgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZQorICogQG15X3JzdjoJCXJlc2VydmF0aW9uIHdpbmRvdworICogQGVycnA6CQlwb2ludGVyIHRvIHN0b3JlIHRoZSBlcnJvciBjb2RlCisgKgogICogVGhpcyBpcyB0aGUgbWFpbiBmdW5jdGlvbiB1c2VkIHRvIGFsbG9jYXRlIGEgbmV3IGJsb2NrIGFuZCBpdHMgcmVzZXJ2YXRpb24KICAqIHdpbmRvdy4KICAqCkBAIC0xMDUxLDkgKzEyMjksNyBAQAogICogcmVzZXJ2YXRpb24pLCBhbmQgdGhlcmUgYXJlIGxvdHMgb2YgZnJlZSBibG9ja3MsIGJ1dCB0aGV5IGFyZSBhbGwKICAqIGJlaW5nIHJlc2VydmVkLgogICoKLSAqIFdlIHVzZSBhIHNvcnRlZCBkb3VibGUgbGlua2VkIGxpc3QgZm9yIHRoZSBwZXItZmlsZXN5c3RlbSByZXNlcnZhdGlvbiBsaXN0LgotICogVGhlIGluc2VydCwgcmVtb3ZlIGFuZCBmaW5kIGEgZnJlZSBzcGFjZShub24tcmVzZXJ2ZWQpIG9wZXJhdGlvbnMgZm9yIHRoZQotICogc29ydGVkIGRvdWJsZSBsaW5rZWQgbGlzdCBzaG91bGQgYmUgZmFzdC4KKyAqIFdlIHVzZSBhIHJlZC1ibGFjayB0cmVlIGZvciB0aGUgcGVyLWZpbGVzeXN0ZW0gcmVzZXJ2YXRpb24gbGlzdC4KICAqCiAgKi8KIHN0YXRpYyBleHQzX2dycGJsa190CkBAIC0xMDYzLDcgKzEyMzksNyBAQAogCQkJc3RydWN0IGV4dDNfcmVzZXJ2ZV93aW5kb3dfbm9kZSAqIG15X3JzdiwKIAkJCXVuc2lnbmVkIGxvbmcgKmNvdW50LCBpbnQgKmVycnApCiB7Ci0JZXh0M19mc2Jsa190IGdyb3VwX2ZpcnN0X2Jsb2NrOworCWV4dDNfZnNibGtfdCBncm91cF9maXJzdF9ibG9jaywgZ3JvdXBfbGFzdF9ibG9jazsKIAlleHQzX2dycGJsa190IHJldCA9IDA7CiAJaW50IGZhdGFsOwogCXVuc2lnbmVkIGxvbmcgbnVtID0gKmNvdW50OwpAQCAtMTEwMCw2ICsxMjc2LDcgQEAKIAkgKiBmaXJzdCBibG9jayBpcyB0aGUgYmxvY2sgbnVtYmVyIG9mIHRoZSBmaXJzdCBibG9jayBpbiB0aGlzIGdyb3VwCiAJICovCiAJZ3JvdXBfZmlyc3RfYmxvY2sgPSBleHQzX2dyb3VwX2ZpcnN0X2Jsb2NrX25vKHNiLCBncm91cCk7CisJZ3JvdXBfbGFzdF9ibG9jayA9IGdyb3VwX2ZpcnN0X2Jsb2NrICsgKEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxKTsKIAogCS8qCiAJICogQmFzaWNhbGx5IHdlIHdpbGwgYWxsb2NhdGUgYSBuZXcgYmxvY2sgZnJvbSBpbm9kZSdzIHJlc2VydmF0aW9uCkBAIC0xMTE4LDcgKzEyOTUsOCBAQAogCSAqLwogCXdoaWxlICgxKSB7CiAJCWlmIChyc3ZfaXNfZW1wdHkoJm15X3Jzdi0+cnN2X3dpbmRvdykgfHwgKHJldCA8IDApIHx8Ci0JCQkhZ29hbF9pbl9teV9yZXNlcnZhdGlvbigmbXlfcnN2LT5yc3Zfd2luZG93LCBncnBfZ29hbCwgZ3JvdXAsIHNiKSkgeworCQkJIWdvYWxfaW5fbXlfcmVzZXJ2YXRpb24oJm15X3Jzdi0+cnN2X3dpbmRvdywKKwkJCQkJCWdycF9nb2FsLCBncm91cCwgc2IpKSB7CiAJCQlpZiAobXlfcnN2LT5yc3ZfZ29hbF9zaXplIDwgKmNvdW50KQogCQkJCW15X3Jzdi0+cnN2X2dvYWxfc2l6ZSA9ICpjb3VudDsKIAkJCXJldCA9IGFsbG9jX25ld19yZXNlcnZhdGlvbihteV9yc3YsIGdycF9nb2FsLCBzYiwKQEAgLTExMjYsMTcgKzEzMDQsMjEgQEAKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwkJCS8qIGZhaWxlZCAqLwogCi0JCQlpZiAoIWdvYWxfaW5fbXlfcmVzZXJ2YXRpb24oJm15X3Jzdi0+cnN2X3dpbmRvdywgZ3JwX2dvYWwsIGdyb3VwLCBzYikpCisJCQlpZiAoIWdvYWxfaW5fbXlfcmVzZXJ2YXRpb24oJm15X3Jzdi0+cnN2X3dpbmRvdywKKwkJCQkJCQlncnBfZ29hbCwgZ3JvdXAsIHNiKSkKIAkJCQlncnBfZ29hbCA9IC0xOwotCQl9IGVsc2UgaWYgKGdycF9nb2FsID4gMCAmJiAobXlfcnN2LT5yc3ZfZW5kLWdycF9nb2FsKzEpIDwgKmNvdW50KQorCQl9IGVsc2UgaWYgKGdycF9nb2FsID4gMCAmJgorCQkJICAobXlfcnN2LT5yc3ZfZW5kLWdycF9nb2FsKzEpIDwgKmNvdW50KQogCQkJdHJ5X3RvX2V4dGVuZF9yZXNlcnZhdGlvbihteV9yc3YsIHNiLAogCQkJCQkqY291bnQtbXlfcnN2LT5yc3ZfZW5kICsgZ3JwX2dvYWwgLSAxKTsKIAotCQlpZiAoKG15X3Jzdi0+cnN2X3N0YXJ0ID49IGdyb3VwX2ZpcnN0X2Jsb2NrICsgRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKSkKLQkJICAgIHx8IChteV9yc3YtPnJzdl9lbmQgPCBncm91cF9maXJzdF9ibG9jaykpCisJCWlmICgobXlfcnN2LT5yc3Zfc3RhcnQgPiBncm91cF9sYXN0X2Jsb2NrKSB8fAorCQkJCShteV9yc3YtPnJzdl9lbmQgPCBncm91cF9maXJzdF9ibG9jaykpIHsKKwkJCXJzdl93aW5kb3dfZHVtcCgmRVhUM19TQihzYiktPnNfcnN2X3dpbmRvd19yb290LCAxKTsKIAkJCUJVRygpOwotCQlyZXQgPSBleHQzX3RyeV90b19hbGxvY2F0ZShzYiwgaGFuZGxlLCBncm91cCwgYml0bWFwX2JoLCBncnBfZ29hbCwKLQkJCQkJICAgJm51bSwgJm15X3Jzdi0+cnN2X3dpbmRvdyk7CisJCX0KKwkJcmV0ID0gZXh0M190cnlfdG9fYWxsb2NhdGUoc2IsIGhhbmRsZSwgZ3JvdXAsIGJpdG1hcF9iaCwKKwkJCQkJICAgZ3JwX2dvYWwsICZudW0sICZteV9yc3YtPnJzdl93aW5kb3cpOwogCQlpZiAocmV0ID49IDApIHsKIAkJCW15X3Jzdi0+cnN2X2FsbG9jX2hpdCArPSBudW07CiAJCQkqY291bnQgPSBudW07CkBAIC0xMTYxLDYgKzEzNDMsMTIgQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKioKKyAqIGV4dDNfaGFzX2ZyZWVfYmxvY2tzKCkKKyAqIEBzYmk6CQlpbi1jb3JlIHN1cGVyIGJsb2NrIHN0cnVjdHVyZS4KKyAqCisgKiBDaGVjayBpZiBmaWxlc3lzdGVtIGhhcyBhdCBsZWFzdCAxIGZyZWUgYmxvY2sgYXZhaWxhYmxlIGZvciBhbGxvY2F0aW9uLgorICovCiBzdGF0aWMgaW50IGV4dDNfaGFzX2ZyZWVfYmxvY2tzKHN0cnVjdCBleHQzX3NiX2luZm8gKnNiaSkKIHsKIAlleHQzX2ZzYmxrX3QgZnJlZV9ibG9ja3MsIHJvb3RfYmxvY2tzOwpAQCAtMTE3NSwxMSArMTM2MywxNyBAQAogCXJldHVybiAxOwogfQogCi0vKgorLyoqCisgKiBleHQzX3Nob3VsZF9yZXRyeV9hbGxvYygpCisgKiBAc2I6CQkJc3VwZXIgYmxvY2sKKyAqIEByZXRyaWVzCQludW1iZXIgb2YgYXR0ZW1wcyBoYXMgYmVlbiBtYWRlCisgKgogICogZXh0M19zaG91bGRfcmV0cnlfYWxsb2MoKSBpcyBjYWxsZWQgd2hlbiBFTk9TUEMgaXMgcmV0dXJuZWQsIGFuZCBpZgogICogaXQgaXMgcHJvZml0YWJsZSB0byByZXRyeSB0aGUgb3BlcmF0aW9uLCB0aGlzIGZ1bmN0aW9uIHdpbGwgd2FpdAogICogZm9yIHRoZSBjdXJyZW50IG9yIGNvbW1pdGluZyB0cmFuc2FjdGlvbiB0byBjb21wbGV0ZSwgYW5kIHRoZW4KICAqIHJldHVybiBUUlVFLgorICoKKyAqIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgcmV0cmllcyBleGNlZWQgdGhyZWUgdGltZXMsIHJldHVybiBGQUxTRS4KICAqLwogaW50IGV4dDNfc2hvdWxkX3JldHJ5X2FsbG9jKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqcmV0cmllcykKIHsKQEAgLTExOTEsMTMgKzEzODUsMTkgQEAKIAlyZXR1cm4gam91cm5hbF9mb3JjZV9jb21taXRfbmVzdGVkKEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWwpOwogfQogCi0vKgotICogZXh0M19uZXdfYmxvY2sgdXNlcyBhIGdvYWwgYmxvY2sgdG8gYXNzaXN0IGFsbG9jYXRpb24uICBJZiB0aGUgZ29hbCBpcwotICogZnJlZSwgb3IgdGhlcmUgaXMgYSBmcmVlIGJsb2NrIHdpdGhpbiAzMiBibG9ja3Mgb2YgdGhlIGdvYWwsIHRoYXQgYmxvY2sKLSAqIGlzIGFsbG9jYXRlZC4gIE90aGVyd2lzZSBhIGZvcndhcmQgc2VhcmNoIGlzIG1hZGUgZm9yIGEgZnJlZSBibG9jazsgd2l0aGluIAotICogZWFjaCBibG9jayBncm91cCB0aGUgc2VhcmNoIGZpcnN0IGxvb2tzIGZvciBhbiBlbnRpcmUgZnJlZSBieXRlIGluIHRoZSBibG9jawotICogYml0bWFwLCBhbmQgdGhlbiBmb3IgYW55IGZyZWUgYml0IGlmIHRoYXQgZmFpbHMuCi0gKiBUaGlzIGZ1bmN0aW9uIGFsc28gdXBkYXRlcyBxdW90YSBhbmQgaV9ibG9ja3MgZmllbGQuCisvKioKKyAqIGV4dDNfbmV3X2Jsb2NrcygpIC0tIGNvcmUgYmxvY2socykgYWxsb2NhdGlvbiBmdW5jdGlvbgorICogQGhhbmRsZToJCWhhbmRsZSB0byB0aGlzIHRyYW5zYWN0aW9uCisgKiBAaW5vZGU6CQlmaWxlIGlub2RlCisgKiBAZ29hbDoJCWdpdmVuIHRhcmdldCBibG9jayhmaWxlc3lzdGVtIHdpZGUpCisgKiBAY291bnQ6CQl0YXJnZXQgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZQorICogQGVycnA6CQllcnJvciBjb2RlCisgKgorICogZXh0M19uZXdfYmxvY2tzIHVzZXMgYSBnb2FsIGJsb2NrIHRvIGFzc2lzdCBhbGxvY2F0aW9uLiAgSXQgdHJpZXMgdG8KKyAqIGFsbG9jYXRlIGJsb2NrKHMpIGZyb20gdGhlIGJsb2NrIGdyb3VwIGNvbnRhaW5zIHRoZSBnb2FsIGJsb2NrIGZpcnN0LiBJZiB0aGF0CisgKiBmYWlscywgaXQgd2lsbCB0cnkgdG8gYWxsb2NhdGUgYmxvY2socykgZnJvbSBvdGhlciBibG9jayBncm91cHMgd2l0aG91dAorICogYW55IHNwZWNpZmljIGdvYWwgYmxvY2suCisgKgogICovCiBleHQzX2ZzYmxrX3QgZXh0M19uZXdfYmxvY2tzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQzX2ZzYmxrX3QgZ29hbCwgdW5zaWduZWQgbG9uZyAqY291bnQsIGludCAqZXJycCkKQEAgLTEzMDMsNyArMTUwMyw3IEBACiAJc21wX3JtYigpOwogCiAJLyoKLQkgKiBOb3cgc2VhcmNoIHRoZSByZXN0IG9mIHRoZSBncm91cHMuICBXZSBhc3N1bWUgdGhhdCAKKwkgKiBOb3cgc2VhcmNoIHRoZSByZXN0IG9mIHRoZSBncm91cHMuICBXZSBhc3N1bWUgdGhhdAogCSAqIGkgYW5kIGdkcCBjb3JyZWN0bHkgcG9pbnQgdG8gdGhlIGxhc3QgZ3JvdXAgdmlzaXRlZC4KIAkgKi8KIAlmb3IgKGJnaSA9IDA7IGJnaSA8IG5ncm91cHM7IGJnaSsrKSB7CkBAIC0xNDI4LDcgKzE2MjgsNyBAQAogCiAJc3Bpbl9sb2NrKHNiX2JnbF9sb2NrKHNiaSwgZ3JvdXBfbm8pKTsKIAlnZHAtPmJnX2ZyZWVfYmxvY2tzX2NvdW50ID0KLQkJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQpIC0gbnVtKTsKKwkJCWNwdV90b19sZTE2KGxlMTZfdG9fY3B1KGdkcC0+YmdfZnJlZV9ibG9ja3NfY291bnQpLW51bSk7CiAJc3Bpbl91bmxvY2soc2JfYmdsX2xvY2soc2JpLCBncm91cF9ubykpOwogCXBlcmNwdV9jb3VudGVyX21vZCgmc2JpLT5zX2ZyZWVibG9ja3NfY291bnRlciwgLW51bSk7CiAKQEAgLTE0NzEsNiArMTY3MSwxMiBAQAogCXJldHVybiBleHQzX25ld19ibG9ja3MoaGFuZGxlLCBpbm9kZSwgZ29hbCwgJmNvdW50LCBlcnJwKTsKIH0KIAorLyoqCisgKiBleHQzX2NvdW50X2ZyZWVfYmxvY2tzKCkgLS0gY291bnQgZmlsZXN5c3RlbSBmcmVlIGJsb2NrcworICogQHNiOgkJc3VwZXJibG9jaworICoKKyAqIEFkZHMgdXAgdGhlIG51bWJlciBvZiBmcmVlIGJsb2NrcyBmcm9tIGVhY2ggYmxvY2sgZ3JvdXAuCisgKi8KIGV4dDNfZnNibGtfdCBleHQzX2NvdW50X2ZyZWVfYmxvY2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJZXh0M19mc2Jsa190IGRlc2NfY291bnQ7CmRpZmYgLS1naXQgYS9mcy9leHQzL2JpdG1hcC5jIGIvZnMvZXh0My9iaXRtYXAuYwppbmRleCBjZTRmODJiLi5iOTE3NmVlIDEwMDY0NAotLS0gYS9mcy9leHQzL2JpdG1hcC5jCisrKyBiL2ZzL2V4dDMvYml0bWFwLmMKQEAgLTIwLDcgKzIwLDcgQEAKIAl1bnNpZ25lZCBpbnQgaTsKIAl1bnNpZ25lZCBsb25nIHN1bSA9IDA7CiAKLQlpZiAoIW1hcCkgCisJaWYgKCFtYXApCiAJCXJldHVybiAoMCk7CiAJZm9yIChpID0gMDsgaSA8IG51bWNoYXJzOyBpKyspCiAJCXN1bSArPSBuaWJibGVtYXBbbWFwLT5iX2RhdGFbaV0gJiAweGZdICsKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZGlyLmMgYi9mcy9leHQzL2Rpci5jCmluZGV4IGZiYjBkNGUuLmQwYjU0ZjMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZGlyLmMKKysrIGIvZnMvZXh0My9kaXIuYwpAQCAtNDQsNiArNDQsOSBAQAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBleHQzX3JlYWRkaXIsCQkvKiB3ZSB0YWtlIEJLTC4gbmVlZGVkPyovCiAJLmlvY3RsCQk9IGV4dDNfaW9jdGwsCQkvKiBCS0wgaGVsZCAqLworI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZXh0M19jb21wYXRfaW9jdGwsCisjZW5kaWYKIAkuZnN5bmMJCT0gZXh0M19zeW5jX2ZpbGUsCS8qIEJLTCBoZWxkICovCiAjaWZkZWYgQ09ORklHX0VYVDNfSU5ERVgKIAkucmVsZWFzZQk9IGV4dDNfcmVsZWFzZV9kaXIsCkBAIC01OSw3ICs2Miw3IEBACiAKIAlyZXR1cm4gKGV4dDNfZmlsZXR5cGVfdGFibGVbZmlsZXR5cGVdKTsKIH0KLQkJCSAgICAgICAKKwogCiBpbnQgZXh0M19jaGVja19kaXJfZW50cnkgKGNvbnN0IGNoYXIgKiBmdW5jdGlvbiwgc3RydWN0IGlub2RlICogZGlyLAogCQkJICBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqIGRlLApAQCAtNjcsNyArNzAsNyBAQAogCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAljb25zdCBjaGFyICogZXJyb3JfbXNnID0gTlVMTDsKLSAJY29uc3QgaW50IHJsZW4gPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CisJY29uc3QgaW50IHJsZW4gPSBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbik7CiAKIAlpZiAocmxlbiA8IEVYVDNfRElSX1JFQ19MRU4oMSkpCiAJCWVycm9yX21zZyA9ICJyZWNfbGVuIGlzIHNtYWxsZXIgdGhhbiBtaW5pbWFsIjsKQEAgLTE2Miw3ICsxNjUsNyBAQAogCQkgKiB0byBtYWtlIHN1cmUuICovCiAJCWlmIChmaWxwLT5mX3ZlcnNpb24gIT0gaW5vZGUtPmlfdmVyc2lvbikgewogCQkJZm9yIChpID0gMDsgaSA8IHNiLT5zX2Jsb2Nrc2l6ZSAmJiBpIDwgb2Zmc2V0OyApIHsKLQkJCQlkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKSAKKwkJCQlkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKQogCQkJCQkoYmgtPmJfZGF0YSArIGkpOwogCQkJCS8qIEl0J3MgdG9vIGV4cGVuc2l2ZSB0byBkbyBhIGZ1bGwKIAkJCQkgKiBkaXJlbnQgdGVzdCBlYWNoIHRpbWUgcm91bmQgdGhpcwpAQCAtMTgxLDcgKzE4NCw3IEBACiAJCQlmaWxwLT5mX3ZlcnNpb24gPSBpbm9kZS0+aV92ZXJzaW9uOwogCQl9CiAKLQkJd2hpbGUgKCFlcnJvciAmJiBmaWxwLT5mX3BvcyA8IGlub2RlLT5pX3NpemUgCisJCXdoaWxlICghZXJyb3IgJiYgZmlscC0+Zl9wb3MgPCBpbm9kZS0+aV9zaXplCiAJCSAgICAgICAmJiBvZmZzZXQgPCBzYi0+c19ibG9ja3NpemUpIHsKIAkJCWRlID0gKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICopIChiaC0+Yl9kYXRhICsgb2Zmc2V0KTsKIAkJCWlmICghZXh0M19jaGVja19kaXJfZW50cnkgKCJleHQzX3JlYWRkaXIiLCBpbm9kZSwgZGUsCkBAIC0yMjksNyArMjMyLDcgQEAKIC8qCiAgKiBUaGVzZSBmdW5jdGlvbnMgY29udmVydCBmcm9tIHRoZSBtYWpvci9taW5vciBoYXNoIHRvIGFuIGZfcG9zCiAgKiB2YWx1ZS4KLSAqIAorICoKICAqIEN1cnJlbnRseSB3ZSBvbmx5IHVzZSBtYWpvciBoYXNoIG51bWVyLiAgVGhpcyBpcyB1bmZvcnR1bmF0ZSwgYnV0CiAgKiBvbiAzMi1iaXQgbWFjaGluZXMsIHRoZSBzYW1lIFZGUyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgbHNlZWsgYW5kCiAgKiBsbHNlZWssIHNvIGlmIHdlIHVzZSB0aGUgNjQgYml0IG9mZnNldCwgdGhlbiB0aGUgMzItYml0IHZlcnNpb25zIG9mCkBAIC0yNTAsNyArMjUzLDcgQEAKIHN0cnVjdCBmbmFtZSB7CiAJX191MzIJCWhhc2g7CiAJX191MzIJCW1pbm9yX2hhc2g7Ci0Jc3RydWN0IHJiX25vZGUJcmJfaGFzaDsgCisJc3RydWN0IHJiX25vZGUJcmJfaGFzaDsKIAlzdHJ1Y3QgZm5hbWUJKm5leHQ7CiAJX191MzIJCWlub2RlOwogCV9fdTgJCW5hbWVfbGVuOwpAQCAtMzQzLDEwICszNDYsOSBAQAogCiAJLyogQ3JlYXRlIGFuZCBhbGxvY2F0ZSB0aGUgZm5hbWUgc3RydWN0dXJlICovCiAJbGVuID0gc2l6ZW9mKHN0cnVjdCBmbmFtZSkgKyBkaXJlbnQtPm5hbWVfbGVuICsgMTsKLQluZXdfZm4gPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CisJbmV3X2ZuID0ga3phbGxvYyhsZW4sIEdGUF9LRVJORUwpOwogCWlmICghbmV3X2ZuKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQobmV3X2ZuLCAwLCBsZW4pOwogCW5ld19mbi0+aGFzaCA9IGhhc2g7CiAJbmV3X2ZuLT5taW5vcl9oYXNoID0gbWlub3JfaGFzaDsKIAluZXdfZm4tPmlub2RlID0gbGUzMl90b19jcHUoZGlyZW50LT5pbm9kZSk7CkBAIC00MTAsNyArNDEyLDcgQEAKIAljdXJyX3BvcyA9IGhhc2gycG9zKGZuYW1lLT5oYXNoLCBmbmFtZS0+bWlub3JfaGFzaCk7CiAJd2hpbGUgKGZuYW1lKSB7CiAJCWVycm9yID0gZmlsbGRpcihkaXJlbnQsIGZuYW1lLT5uYW1lLAotCQkJCWZuYW1lLT5uYW1lX2xlbiwgY3Vycl9wb3MsIAorCQkJCWZuYW1lLT5uYW1lX2xlbiwgY3Vycl9wb3MsCiAJCQkJZm5hbWUtPmlub2RlLAogCQkJCWdldF9kdHlwZShzYiwgZm5hbWUtPmZpbGVfdHlwZSkpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTQ2NSw3ICs0NjcsNyBAQAogCQkvKgogCQkgKiBGaWxsIHRoZSByYnRyZWUgaWYgd2UgaGF2ZSBubyBtb3JlIGVudHJpZXMsCiAJCSAqIG9yIHRoZSBpbm9kZSBoYXMgY2hhbmdlZCBzaW5jZSB3ZSBsYXN0IHJlYWQgaW4gdGhlCi0JCSAqIGNhY2hlZCBlbnRyaWVzLiAKKwkJICogY2FjaGVkIGVudHJpZXMuCiAJCSAqLwogCQlpZiAoKCFpbmZvLT5jdXJyX25vZGUpIHx8CiAJCSAgICAoZmlscC0+Zl92ZXJzaW9uICE9IGlub2RlLT5pX3ZlcnNpb24pKSB7CmRpZmYgLS1naXQgYS9mcy9leHQzL2ZpbGUuYyBiL2ZzL2V4dDMvZmlsZS5jCmluZGV4IDFlZmVmYjYuLmU5NmMzODggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvZmlsZS5jCisrKyBiL2ZzL2V4dDMvZmlsZS5jCkBAIC00OCwxNCArNDgsMTUgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLWV4dDNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK2V4dDNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHJldDsKIAlpbnQgZXJyOwogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZShpb2NiLCBidWYsIGNvdW50LCBwb3MpOworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwogCiAJLyoKIAkgKiBTa2lwIGZsdXNoaW5nIGlmIHRoZXJlIHdhcyBhbiBlcnJvciwgb3IgaWYgbm90aGluZyB3YXMgd3JpdHRlbi4KQEAgLTEwMCw3ICsxMDEsNyBAQAogCiBmb3JjZV9jb21taXQ6CiAJZXJyID0gZXh0M19mb3JjZV9jb21taXQoaW5vZGUtPmlfc2IpOwotCWlmIChlcnIpIAorCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTExMSw5ICsxMTIsMTAgQEAKIAkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLmFpb193cml0ZQk9IGV4dDNfZmlsZV93cml0ZSwKLQkucmVhZHYJCT0gZ2VuZXJpY19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0gZ2VuZXJpY19maWxlX3dyaXRldiwKIAkuaW9jdGwJCT0gZXh0M19pb2N0bCwKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJLmNvbXBhdF9pb2N0bAk9IGV4dDNfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCiAJLnJlbGVhc2UJPSBleHQzX3JlbGVhc2VfZmlsZSwKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvZnN5bmMuYyBiL2ZzL2V4dDMvZnN5bmMuYwppbmRleCA0OTM4MmEyLi5kZDFmZDNjIDEwMDY0NAotLS0gYS9mcy9leHQzL2ZzeW5jLmMKKysrIGIvZnMvZXh0My9mc3luYy5jCkBAIC04LDE0ICs4LDE0IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXRlIFBpZXJyZSBldCBNYXJpZSBDdXJpZSAoUGFyaXMgVkkpCiAgKiAgZnJvbQogICogIGxpbnV4L2ZzL21pbml4L3RydW5jYXRlLmMgICBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCi0gKiAKKyAqCiAgKiAgZXh0M2ZzIGZzeW5jIHByaW1pdGl2ZQogICoKICAqICBCaWctZW5kaWFuIHRvIGxpdHRsZS1lbmRpYW4gYnl0ZS1zd2FwcGluZy9iaXRtYXBzIGJ5CiAgKiAgICAgICAgRGF2aWQgUy4gTWlsbGVyIChkYXZlbUBjYWlwLnJ1dGdlcnMuZWR1KSwgMTk5NQotICogCisgKgogICogIFJlbW92ZWQgdW5uZWNlc3NhcnkgY29kZSBkdXBsaWNhdGlvbiBmb3IgbGl0dGxlIGVuZGlhbiBtYWNoaW5lcwotICogIGFuZCBleGNlc3NpdmUgX19pbmxpbmVfX3MuIAorICogIGFuZCBleGNlc3NpdmUgX19pbmxpbmVfX3MuCiAgKiAgICAgICAgQW5kaSBLbGVlbiwgMTk5NwogICoKICAqIE1ham9yIHNpbXBsaWNhdGlvbnMgYW5kIGNsZWFudXAgLSB3ZSBvbmx5IG5lZWQgdG8gZG8gdGhlIG1ldGFkYXRhLCBiZWNhdXNlCmRpZmYgLS1naXQgYS9mcy9leHQzL2hhc2guYyBiL2ZzL2V4dDMvaGFzaC5jCmluZGV4IDVhMmQxMjMuLmRlZWIyN2IgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaGFzaC5jCisrKyBiL2ZzL2V4dDMvaGFzaC5jCkBAIC00LDcgKzQsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDAyIGJ5IFRoZW9kb3JlIFRzJ28KICAqCiAgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2Mi4KLSAqIAorICoKICAqIFRoaXMgZmlsZSBtYXkgYmUgcmVkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMKICAqIExpY2Vuc2UuCiAgKi8KQEAgLTgwLDExICs4MCwxMSBAQAogICogUmV0dXJucyB0aGUgaGFzaCBvZiBhIGZpbGVuYW1lLiAgSWYgbGVuIGlzIDAgYW5kIG5hbWUgaXMgTlVMTCwgdGhlbgogICogdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCB0byB0ZXN0IHdoZXRoZXIgb3Igbm90IGEgaGFzaCB2ZXJzaW9uIGlzCiAgKiBzdXBwb3J0ZWQuCi0gKiAKKyAqCiAgKiBUaGUgc2VlZCBpcyBhbiA0IGxvbmd3b3JkICgzMiBiaXRzKSAic2VjcmV0IiB3aGljaCBjYW4gYmUgdXNlZCB0bwogICogdW5pcXVpZnkgYSBoYXNoLiAgSWYgdGhlIHNlZWQgaXMgYWxsIHplcm8ncywgdGhlbiBzb21lIGRlZmF1bHQgc2VlZAogICogbWF5IGJlIHVzZWQuCi0gKiAKKyAqCiAgKiBBIHBhcnRpY3VsYXIgaGFzaCB2ZXJzaW9uIHNwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgc2VlZCBpcwogICogcmVwcmVzZW50ZWQsIGFuZCB3aGV0aGVyIG9yIG5vdCB0aGUgcmV0dXJuZWQgaGFzaCBpcyAzMiBiaXRzIG9yIDY0CiAgKiBiaXRzLiAgMzIgYml0IGhhc2hlcyB3aWxsIHJldHVybiAwIGZvciB0aGUgbWlub3IgaGFzaC4KQEAgLTk1LDcgKzk1LDcgQEAKIAlfX3UzMgltaW5vcl9oYXNoID0gMDsKIAljb25zdCBjaGFyCSpwOwogCWludAkJaTsKLQlfX3UzMiAJCWluWzhdLCBidWZbNF07CisJX191MzIJCWluWzhdLCBidWZbNF07CiAKIAkvKiBJbml0aWFsaXplIHRoZSBkZWZhdWx0IHNlZWQgZm9yIHRoZSBoYXNoIGNoZWNrc3VtIGZ1bmN0aW9ucyAqLwogCWJ1ZlswXSA9IDB4Njc0NTIzMDE7CmRpZmYgLS1naXQgYS9mcy9leHQzL2lhbGxvYy5jIGIvZnMvZXh0My9pYWxsb2MuYwppbmRleCAzNjU0NmVkLi5lNDVkYmQ2IDEwMDY0NAotLS0gYS9mcy9leHQzL2lhbGxvYy5jCisrKyBiL2ZzL2V4dDMvaWFsbG9jLmMKQEAgLTIwMiw3ICsyMDIsNyBAQAogc3RhdGljIGludCBmaW5kX2dyb3VwX2RpcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCkKIHsKIAlpbnQgbmdyb3VwcyA9IEVYVDNfU0Ioc2IpLT5zX2dyb3Vwc19jb3VudDsKLQlpbnQgZnJlZWksIGF2ZWZyZWVpOworCXVuc2lnbmVkIGludCBmcmVlaSwgYXZlZnJlZWk7CiAJc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqZGVzYywgKmJlc3RfZGVzYyA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlpbnQgZ3JvdXAsIGJlc3RfZ3JvdXAgPSAtMTsKQEAgLTIxNiw3ICsyMTYsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2lub2Rlc19jb3VudCkgPCBhdmVmcmVlaSkKIAkJCWNvbnRpbnVlOwotCQlpZiAoIWJlc3RfZGVzYyB8fCAKKwkJaWYgKCFiZXN0X2Rlc2MgfHwKIAkJICAgIChsZTE2X3RvX2NwdShkZXNjLT5iZ19mcmVlX2Jsb2Nrc19jb3VudCkgPgogCQkgICAgIGxlMTZfdG9fY3B1KGJlc3RfZGVzYy0+YmdfZnJlZV9ibG9ja3NfY291bnQpKSkgewogCQkJYmVzdF9ncm91cCA9IGdyb3VwOwpAQCAtMjI2LDMwICsyMjYsMzAgQEAKIAlyZXR1cm4gYmVzdF9ncm91cDsKIH0KIAotLyogCi0gKiBPcmxvdidzIGFsbG9jYXRvciBmb3IgZGlyZWN0b3JpZXMuIAotICogCisvKgorICogT3Jsb3YncyBhbGxvY2F0b3IgZm9yIGRpcmVjdG9yaWVzLgorICoKICAqIFdlIGFsd2F5cyB0cnkgdG8gc3ByZWFkIGZpcnN0LWxldmVsIGRpcmVjdG9yaWVzLgogICoKLSAqIElmIHRoZXJlIGFyZSBibG9ja2dyb3VwcyB3aXRoIGJvdGggZnJlZSBpbm9kZXMgYW5kIGZyZWUgYmxvY2tzIGNvdW50cyAKLSAqIG5vdCB3b3JzZSB0aGFuIGF2ZXJhZ2Ugd2UgcmV0dXJuIG9uZSB3aXRoIHNtYWxsZXN0IGRpcmVjdG9yeSBjb3VudC4gCi0gKiBPdGhlcndpc2Ugd2Ugc2ltcGx5IHJldHVybiBhIHJhbmRvbSBncm91cC4gCi0gKiAKLSAqIEZvciB0aGUgcmVzdCBydWxlcyBsb29rIHNvOiAKLSAqIAotICogSXQncyBPSyB0byBwdXQgZGlyZWN0b3J5IGludG8gYSBncm91cCB1bmxlc3MgCi0gKiBpdCBoYXMgdG9vIG1hbnkgZGlyZWN0b3JpZXMgYWxyZWFkeSAobWF4X2RpcnMpIG9yIAotICogaXQgaGFzIHRvbyBmZXcgZnJlZSBpbm9kZXMgbGVmdCAobWluX2lub2Rlcykgb3IgCi0gKiBpdCBoYXMgdG9vIGZldyBmcmVlIGJsb2NrcyBsZWZ0IChtaW5fYmxvY2tzKSBvciAKLSAqIGl0J3MgYWxyZWFkeSBydW5uaW5nIHRvbyBsYXJnZSBkZWJ0IChtYXhfZGVidCkuIAotICogUGFyZW50J3MgZ3JvdXAgaXMgcHJlZmVyZWQsIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGVzZSAKLSAqIGNvbmRpdGlvbnMgd2Ugc2VhcmNoIGN5Y2xpY2FsbHkgdGhyb3VnaCB0aGUgcmVzdC4gSWYgbm9uZSAKLSAqIG9mIHRoZSBncm91cHMgbG9vayBnb29kIHdlIGp1c3QgbG9vayBmb3IgYSBncm91cCB3aXRoIG1vcmUgCi0gKiBmcmVlIGlub2RlcyB0aGFuIGF2ZXJhZ2UgKHN0YXJ0aW5nIGF0IHBhcmVudCdzIGdyb3VwKS4gCi0gKiAKLSAqIERlYnQgaXMgaW5jcmVtZW50ZWQgZWFjaCB0aW1lIHdlIGFsbG9jYXRlIGEgZGlyZWN0b3J5IGFuZCBkZWNyZW1lbnRlZCAKLSAqIHdoZW4gd2UgYWxsb2NhdGUgYW4gaW5vZGUsIHdpdGhpbiAwLS0yNTUuIAotICovIAorICogSWYgdGhlcmUgYXJlIGJsb2NrZ3JvdXBzIHdpdGggYm90aCBmcmVlIGlub2RlcyBhbmQgZnJlZSBibG9ja3MgY291bnRzCisgKiBub3Qgd29yc2UgdGhhbiBhdmVyYWdlIHdlIHJldHVybiBvbmUgd2l0aCBzbWFsbGVzdCBkaXJlY3RvcnkgY291bnQuCisgKiBPdGhlcndpc2Ugd2Ugc2ltcGx5IHJldHVybiBhIHJhbmRvbSBncm91cC4KKyAqCisgKiBGb3IgdGhlIHJlc3QgcnVsZXMgbG9vayBzbzoKKyAqCisgKiBJdCdzIE9LIHRvIHB1dCBkaXJlY3RvcnkgaW50byBhIGdyb3VwIHVubGVzcworICogaXQgaGFzIHRvbyBtYW55IGRpcmVjdG9yaWVzIGFscmVhZHkgKG1heF9kaXJzKSBvcgorICogaXQgaGFzIHRvbyBmZXcgZnJlZSBpbm9kZXMgbGVmdCAobWluX2lub2Rlcykgb3IKKyAqIGl0IGhhcyB0b28gZmV3IGZyZWUgYmxvY2tzIGxlZnQgKG1pbl9ibG9ja3MpIG9yCisgKiBpdCdzIGFscmVhZHkgcnVubmluZyB0b28gbGFyZ2UgZGVidCAobWF4X2RlYnQpLgorICogUGFyZW50J3MgZ3JvdXAgaXMgcHJlZmVyZWQsIGlmIGl0IGRvZXNuJ3Qgc2F0aXNmeSB0aGVzZQorICogY29uZGl0aW9ucyB3ZSBzZWFyY2ggY3ljbGljYWxseSB0aHJvdWdoIHRoZSByZXN0LiBJZiBub25lCisgKiBvZiB0aGUgZ3JvdXBzIGxvb2sgZ29vZCB3ZSBqdXN0IGxvb2sgZm9yIGEgZ3JvdXAgd2l0aCBtb3JlCisgKiBmcmVlIGlub2RlcyB0aGFuIGF2ZXJhZ2UgKHN0YXJ0aW5nIGF0IHBhcmVudCdzIGdyb3VwKS4KKyAqCisgKiBEZWJ0IGlzIGluY3JlbWVudGVkIGVhY2ggdGltZSB3ZSBhbGxvY2F0ZSBhIGRpcmVjdG9yeSBhbmQgZGVjcmVtZW50ZWQKKyAqIHdoZW4gd2UgYWxsb2NhdGUgYW4gaW5vZGUsIHdpdGhpbiAwLS0yNTUuCisgKi8KIAogI2RlZmluZSBJTk9ERV9DT1NUIDY0CiAjZGVmaW5lIEJMT0NLX0NPU1QgMjU2CkBAIC0yNjEsMTAgKzI2MSwxMCBAQAogCXN0cnVjdCBleHQzX3N1cGVyX2Jsb2NrICplcyA9IHNiaS0+c19lczsKIAlpbnQgbmdyb3VwcyA9IHNiaS0+c19ncm91cHNfY291bnQ7CiAJaW50IGlub2Rlc19wZXJfZ3JvdXAgPSBFWFQzX0lOT0RFU19QRVJfR1JPVVAoc2IpOwotCWludCBmcmVlaSwgYXZlZnJlZWk7CisJdW5zaWduZWQgaW50IGZyZWVpLCBhdmVmcmVlaTsKIAlleHQzX2ZzYmxrX3QgZnJlZWIsIGF2ZWZyZWViOwogCWV4dDNfZnNibGtfdCBibG9ja3NfcGVyX2RpcjsKLQlpbnQgbmRpcnM7CisJdW5zaWduZWQgaW50IG5kaXJzOwogCWludCBtYXhfZGVidCwgbWF4X2RpcnMsIG1pbl9pbm9kZXM7CiAJZXh0M19ncnBibGtfdCBtaW5fYmxvY2tzOwogCWludCBncm91cCA9IC0xLCBpOwpAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCQlncm91cCA9IGZpbmRfZ3JvdXBfZGlyKHNiLCBkaXIpOwogCQllbHNlCiAJCQlncm91cCA9IGZpbmRfZ3JvdXBfb3Jsb3Yoc2IsIGRpcik7Ci0JfSBlbHNlIAorCX0gZWxzZQogCQlncm91cCA9IGZpbmRfZ3JvdXBfb3RoZXIoc2IsIGRpcik7CiAKIAllcnIgPSAtRU5PU1BDOwpAQCAtNTU5LDcgKzU1OSw2IEBACiAKIAlpbm9kZS0+aV9pbm8gPSBpbm87CiAJLyogVGhpcyBpcyB0aGUgb3B0aW1hbCBJTyBzaXplIChmb3Igc3RhdCksIG5vdCB0aGUgZnMgYmxvY2sgc2l6ZSAqLwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCmRpZmYgLS1naXQgYS9mcy9leHQzL2lub2RlLmMgYi9mcy9leHQzL2lub2RlLmMKaW5kZXggODRiZTAyZS4uMDNiYTViYyAxMDA2NDQKLS0tIGEvZnMvZXh0My9pbm9kZS5jCisrKyBiL2ZzL2V4dDMvaW5vZGUuYwpAQCAtMTMsMTEgKzEzLDExIEBACiAgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyICBMaW51cyBUb3J2YWxkcwogICoKICAqICBHb2FsLWRpcmVjdGVkIGJsb2NrIGFsbG9jYXRpb24gYnkgU3RlcGhlbiBUd2VlZGllCi0gKiAJKHNjdEByZWRoYXQuY29tKSwgMTk5MywgMTk5OAorICoJKHNjdEByZWRoYXQuY29tKSwgMTk5MywgMTk5OAogICogIEJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBieXRlLXN3YXBwaW5nL2JpdG1hcHMgYnkKICAqICAgICAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLCAxOTk1CiAgKiAgNjQtYml0IGZpbGUgc3VwcG9ydCBvbiA2NC1iaXQgcGxhdGZvcm1zIGJ5IEpha3ViIEplbGluZWsKLSAqIAkoampAc3Vuc2l0ZS5tcy5tZmYuY3VuaS5jeikKKyAqCShqakBzdW5zaXRlLm1zLm1mZi5jdW5pLmN6KQogICoKICAqICBBc3NvcnRlZCByYWNlIGZpeGVzLCByZXdyaXRlIG9mIGV4dDNfZ2V0X2Jsb2NrKCkgYnkgQWwgVmlybywgMjAwMAogICovCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KKyNpbmNsdWRlIDxsaW51eC9iaW8uaD4KICNpbmNsdWRlICJ4YXR0ci5oIgogI2luY2x1ZGUgImFjbC5oIgogCkBAIC01NSw3ICs1Niw3IEBACiAvKgogICogVGhlIGV4dDMgZm9yZ2V0IGZ1bmN0aW9uIG11c3QgcGVyZm9ybSBhIHJldm9rZSBpZiB3ZSBhcmUgZnJlZWluZyBkYXRhCiAgKiB3aGljaCBoYXMgYmVlbiBqb3VybmFsZWQuICBNZXRhZGF0YSAoZWcuIGluZGlyZWN0IGJsb2NrcykgbXVzdCBiZQotICogcmV2b2tlZCBpbiBhbGwgY2FzZXMuIAorICogcmV2b2tlZCBpbiBhbGwgY2FzZXMuCiAgKgogICogImJoIiBtYXkgYmUgTlVMTDogYSBtZXRhZGF0YSBibG9jayBtYXkgaGF2ZSBiZWVuIGZyZWVkIGZyb20gbWVtb3J5CiAgKiBidXQgdGhlcmUgbWF5IHN0aWxsIGJlIGEgcmVjb3JkIG9mIGl0IGluIHRoZSBqb3VybmFsLCBhbmQgdGhhdCByZWNvcmQKQEAgLTEwNSw3ICsxMDYsNyBAQAogICogV29yayBvdXQgaG93IG1hbnkgYmxvY2tzIHdlIG5lZWQgdG8gcHJvY2VlZCB3aXRoIHRoZSBuZXh0IGNodW5rIG9mIGEKICAqIHRydW5jYXRlIHRyYW5zYWN0aW9uLgogICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBibG9ja3NfZm9yX3RydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgYmxvY2tzX2Zvcl90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXVuc2lnbmVkIGxvbmcgbmVlZGVkOwogCkBAIC0xMjIsMTMgKzEyMywxMyBAQAogCiAJLyogQnV0IHdlIG5lZWQgdG8gYm91bmQgdGhlIHRyYW5zYWN0aW9uIHNvIHdlIGRvbid0IG92ZXJmbG93IHRoZQogCSAqIGpvdXJuYWwuICovCi0JaWYgKG5lZWRlZCA+IEVYVDNfTUFYX1RSQU5TX0RBVEEpIAorCWlmIChuZWVkZWQgPiBFWFQzX01BWF9UUkFOU19EQVRBKQogCQluZWVkZWQgPSBFWFQzX01BWF9UUkFOU19EQVRBOwogCiAJcmV0dXJuIEVYVDNfREFUQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpICsgbmVlZGVkOwogfQogCi0vKiAKKy8qCiAgKiBUcnVuY2F0ZSB0cmFuc2FjdGlvbnMgY2FuIGJlIGNvbXBsZXggYW5kIGFic29sdXRlbHkgaHVnZS4gIFNvIHdlIG5lZWQgdG8KICAqIGJlIGFibGUgdG8gcmVzdGFydCB0aGUgdHJhbnNhY3Rpb24gYXQgYSBjb252ZW50aWVudCBjaGVja3BvaW50IHRvIG1ha2UKICAqIHN1cmUgd2UgZG9uJ3Qgb3ZlcmZsb3cgdGhlIGpvdXJuYWwuCkBAIC0xMzYsOSArMTM3LDkgQEAKICAqIHN0YXJ0X3RyYW5zYWN0aW9uIGdldHMgdXMgYSBuZXcgaGFuZGxlIGZvciBhIHRydW5jYXRlIHRyYW5zYWN0aW9uLAogICogYW5kIGV4dGVuZF90cmFuc2FjdGlvbiB0cmllcyB0byBleHRlbmQgdGhlIGV4aXN0aW5nIG9uZSBhIGJpdC4gIElmCiAgKiBleHRlbmQgZmFpbHMsIHdlIG5lZWQgdG8gcHJvcGFnYXRlIHRoZSBmYWlsdXJlIHVwIGFuZCByZXN0YXJ0IHRoZQotICogdHJhbnNhY3Rpb24gaW4gdGhlIHRvcC1sZXZlbCB0cnVuY2F0ZSBsb29wLiAtLXNjdCAKKyAqIHRyYW5zYWN0aW9uIGluIHRoZSB0b3AtbGV2ZWwgdHJ1bmNhdGUgbG9vcC4gLS1zY3QKICAqLwotc3RhdGljIGhhbmRsZV90ICpzdGFydF90cmFuc2FjdGlvbihzdHJ1Y3QgaW5vZGUgKmlub2RlKSAKK3N0YXRpYyBoYW5kbGVfdCAqc3RhcnRfdHJhbnNhY3Rpb24oc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAloYW5kbGVfdCAqcmVzdWx0OwogCkBAIC0yMTUsMTIgKzIxNiwxMiBAQAogCWV4dDNfb3JwaGFuX2RlbChoYW5kbGUsIGlub2RlKTsKIAlFWFQzX0koaW5vZGUpLT5pX2R0aW1lCT0gZ2V0X3NlY29uZHMoKTsKIAotCS8qIAorCS8qCiAJICogT25lIHN1YnRsZSBvcmRlcmluZyByZXF1aXJlbWVudDogaWYgYW55dGhpbmcgaGFzIGdvbmUgd3JvbmcKIAkgKiAodHJhbnNhY3Rpb24gYWJvcnQsIElPIGVycm9ycywgd2hhdGV2ZXIpLCB0aGVuIHdlIGNhbiBzdGlsbAogCSAqIGRvIHRoZXNlIG5leHQgc3RlcHMgKHRoZSBmcyB3aWxsIGFscmVhZHkgaGF2ZSBiZWVuIG1hcmtlZCBhcwogCSAqIGhhdmluZyBlcnJvcnMpLCBidXQgd2UgY2FuJ3QgZnJlZSB0aGUgaW5vZGUgaWYgdGhlIG1hcmtfZGlydHkKLQkgKiBmYWlscy4gIAorCSAqIGZhaWxzLgogCSAqLwogCWlmIChleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSkpCiAJCS8qIElmIHRoYXQgZmFpbGVkLCBqdXN0IGRvIHRoZSByZXF1aXJlZCBpbi1jb3JlIGlub2RlIGNsZWFyLiAqLwpAQCAtMzk4LDcgKzM5OSw3IEBACiAgKgkgICsgaWYgdGhlcmUgaXMgYSBibG9jayB0byB0aGUgbGVmdCBvZiBvdXIgcG9zaXRpb24gLSBhbGxvY2F0ZSBuZWFyIGl0LgogICoJICArIGlmIHBvaW50ZXIgd2lsbCBsaXZlIGluIGluZGlyZWN0IGJsb2NrIC0gYWxsb2NhdGUgbmVhciB0aGF0IGJsb2NrLgogICoJICArIGlmIHBvaW50ZXIgd2lsbCBsaXZlIGluIGlub2RlIC0gYWxsb2NhdGUgaW4gdGhlIHNhbWUKLSAqCSAgICBjeWxpbmRlciBncm91cC4gCisgKgkgICAgY3lsaW5kZXIgZ3JvdXAuCiAgKgogICogSW4gdGhlIGxhdHRlciBjYXNlIHdlIGNvbG91ciB0aGUgc3RhcnRpbmcgYmxvY2sgYnkgdGhlIGNhbGxlcnMgUElEIHRvCiAgKiBwcmV2ZW50IGl0IGZyb20gY2xhc2hpbmcgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb25zIGZvciBhIGRpZmZlcmVudCBpbm9kZQpAQCAtNDcwLDcgKzQ3MSw3IEBACiAgKglleHQzX2Jsa3NfdG9fYWxsb2NhdGU6IExvb2sgdXAgdGhlIGJsb2NrIG1hcCBhbmQgY291bnQgdGhlIG51bWJlcgogICoJb2YgZGlyZWN0IGJsb2NrcyBuZWVkIHRvIGJlIGFsbG9jYXRlZCBmb3IgdGhlIGdpdmVuIGJyYW5jaC4KICAqCi0gKiAJQGJyYW5jaDogY2hhaW4gb2YgaW5kaXJlY3QgYmxvY2tzCisgKglAYnJhbmNoOiBjaGFpbiBvZiBpbmRpcmVjdCBibG9ja3MKICAqCUBrOiBudW1iZXIgb2YgYmxvY2tzIG5lZWQgZm9yIGluZGlyZWN0IGJsb2NrcwogICoJQGJsa3M6IG51bWJlciBvZiBkYXRhIGJsb2NrcyB0byBiZSBtYXBwZWQuCiAgKglAYmxvY2tzX3RvX2JvdW5kYXJ5OiAgdGhlIG9mZnNldCBpbiB0aGUgaW5kaXJlY3QgYmxvY2sKQEAgLTc0NCw3ICs3NDUsNyBAQAogCQlqYmRfZGVidWcoNSwgInNwbGljaW5nIGluZGlyZWN0IG9ubHlcbiIpOwogCQlCVUZGRVJfVFJBQ0Uod2hlcmUtPmJoLCAiY2FsbCBleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEiKTsKIAkJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgd2hlcmUtPmJoKTsKLQkJaWYgKGVycikgCisJCWlmIChlcnIpCiAJCQlnb3RvIGVycl9vdXQ7CiAJfSBlbHNlIHsKIAkJLyoKQEAgLTEwNzMsNyArMTA3NCw3IEBACiAJCXJldHVybiBiaDsKIAlpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJcmV0dXJuIGJoOwotCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZiaCk7CisJbGxfcndfYmxvY2soUkVBRF9NRVRBLCAxLCAmYmgpOwogCXdhaXRfb25fYnVmZmVyKGJoKTsKIAlpZiAoYnVmZmVyX3VwdG9kYXRlKGJoKSkKIAkJcmV0dXJuIGJoOwpAQCAtMTA5OCw3ICsxMDk5LDcgQEAKIAogCWZvciAoCWJoID0gaGVhZCwgYmxvY2tfc3RhcnQgPSAwOwogCQlyZXQgPT0gMCAmJiAoYmggIT0gaGVhZCB8fCAhYmxvY2tfc3RhcnQpOwotCSAgICAJYmxvY2tfc3RhcnQgPSBibG9ja19lbmQsIGJoID0gbmV4dCkKKwkJYmxvY2tfc3RhcnQgPSBibG9ja19lbmQsIGJoID0gbmV4dCkKIAl7CiAJCW5leHQgPSBiaC0+Yl90aGlzX3BhZ2U7CiAJCWJsb2NrX2VuZCA9IGJsb2NrX3N0YXJ0ICsgYmxvY2tzaXplOwpAQCAtMTEzNyw3ICsxMTM4LDcgQEAKICAqIFNvIHdoYXQgd2UgZG8gaXMgdG8gcmVseSBvbiB0aGUgZmFjdCB0aGF0IGpvdXJuYWxfc3RvcC9qb3VybmFsX3N0YXJ0CiAgKiB3aWxsIF9ub3RfIHJ1biBjb21taXQgdW5kZXIgdGhlc2UgY2lyY3Vtc3RhbmNlcyBiZWNhdXNlIGhhbmRsZS0+aF9yZWYKICAqIGlzIGVsZXZhdGVkLiAgV2UnbGwgc3RpbGwgaGF2ZSBlbm91Z2ggY3JlZGl0cyBmb3IgdGhlIHRpbnkgcXVvdGFmaWxlCi0gKiB3cml0ZS4gIAorICogd3JpdGUuCiAgKi8KIHN0YXRpYyBpbnQgZG9fam91cm5hbF9nZXRfd3JpdGVfYWNjZXNzKGhhbmRsZV90ICpoYW5kbGUsCiAJCQkJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCkBAIC0xMjgyLDcgKzEyODMsNyBAQAogCWlmIChpbm9kZS0+aV9zaXplID4gRVhUM19JKGlub2RlKS0+aV9kaXNrc2l6ZSkgewogCQlFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2l6ZTsKIAkJcmV0MiA9IGV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKLQkJaWYgKCFyZXQpIAorCQlpZiAoIXJldCkKIAkJCXJldCA9IHJldDI7CiAJfQogCXJldDIgPSBleHQzX2pvdXJuYWxfc3RvcChoYW5kbGUpOwpAQCAtMTI5MSw3ICsxMjkyLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiAKKy8qCiAgKiBibWFwKCkgaXMgc3BlY2lhbC4gIEl0IGdldHMgdXNlZCBieSBhcHBsaWNhdGlvbnMgc3VjaCBhcyBsaWxvIGFuZCBieQogICogdGhlIHN3YXBwZXIgdG8gZmluZCB0aGUgb24tZGlzayBibG9jayBvZiBhIHNwZWNpZmljIHBpZWNlIG9mIGRhdGEuCiAgKgpAQCAtMTMwMCwxMCArMTMwMSwxMCBAQAogICogZmlsZXN5c3RlbSBhbmQgZW5hYmxlcyBzd2FwLCB0aGVuIHRoZXkgbWF5IGdldCBhIG5hc3R5IHNob2NrIHdoZW4gdGhlCiAgKiBkYXRhIGdldHRpbmcgc3dhcHBlZCB0byB0aGF0IHN3YXBmaWxlIHN1ZGRlbmx5IGdldHMgb3ZlcndyaXR0ZW4gYnkKICAqIHRoZSBvcmlnaW5hbCB6ZXJvJ3Mgd3JpdHRlbiBvdXQgcHJldmlvdXNseSB0byB0aGUgam91cm5hbCBhbmQKLSAqIGF3YWl0aW5nIHdyaXRlYmFjayBpbiB0aGUga2VybmVsJ3MgYnVmZmVyIGNhY2hlLiAKKyAqIGF3YWl0aW5nIHdyaXRlYmFjayBpbiB0aGUga2VybmVsJ3MgYnVmZmVyIGNhY2hlLgogICoKICAqIFNvLCBpZiB3ZSBzZWUgYW55IGJtYXAgY2FsbHMgaGVyZSBvbiBhIG1vZGlmaWVkLCBkYXRhLWpvdXJuYWxlZCBmaWxlLAotICogdGFrZSBleHRyYSBzdGVwcyB0byBmbHVzaCBhbnkgYmxvY2tzIHdoaWNoIG1pZ2h0IGJlIGluIHRoZSBjYWNoZS4gCisgKiB0YWtlIGV4dHJhIHN0ZXBzIHRvIGZsdXNoIGFueSBibG9ja3Mgd2hpY2ggbWlnaHQgYmUgaW4gdGhlIGNhY2hlLgogICovCiBzdGF0aWMgc2VjdG9yX3QgZXh0M19ibWFwKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzZWN0b3JfdCBibG9jaykKIHsKQEAgLTEzMTIsMTYgKzEzMTMsMTYgQEAKIAlpbnQgZXJyOwogCiAJaWYgKEVYVDNfSShpbm9kZSktPmlfc3RhdGUgJiBFWFQzX1NUQVRFX0pEQVRBKSB7Ci0JCS8qIAorCQkvKgogCQkgKiBUaGlzIGlzIGEgUkVBTExZIGhlYXZ5d2VpZ2h0IGFwcHJvYWNoLCBidXQgdGhlIHVzZSBvZgogCQkgKiBibWFwIG9uIGRpcnR5IGZpbGVzIGlzIGV4cGVjdGVkIHRvIGJlIGV4dHJlbWVseSByYXJlOgogCQkgKiBvbmx5IGlmIHdlIHJ1biBsaWxvIG9yIHN3YXBvbiBvbiBhIGZyZXNobHkgbWFkZSBmaWxlCi0JCSAqIGRvIHdlIGV4cGVjdCB0aGlzIHRvIGhhcHBlbi4gCisJCSAqIGRvIHdlIGV4cGVjdCB0aGlzIHRvIGhhcHBlbi4KIAkJICoKIAkJICogKGJtYXAgcmVxdWlyZXMgQ0FQX1NZU19SQVdJTyBzbyB0aGlzIGRvZXMgbm90CiAJCSAqIHJlcHJlc2VudCBhbiB1bnByaXZpbGVnZWQgdXNlciBET1MgYXR0YWNrIC0tLSB3ZSdkIGJlCiAJCSAqIGluIHRyb3VibGUgaWYgbW9ydGFsIHVzZXJzIGNvdWxkIHRyaWdnZXIgdGhpcyBwYXRoIGF0Ci0JCSAqIHdpbGwuKSAKKwkJICogd2lsbC4pCiAJCSAqCiAJCSAqIE5CLiBFWFQzX1NUQVRFX0pEQVRBIGlzIG5vdCBzZXQgb24gZmlsZXMgb3RoZXIgdGhhbgogCQkgKiByZWd1bGFyIGZpbGVzLiAgSWYgc29tZWJvZHkgd2FudHMgdG8gYm1hcCBhIGRpcmVjdG9yeQpAQCAtMTQ1Nyw3ICsxNDU4LDcgQEAKIAkgKi8KIAogCS8qCi0JICogQW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgQnV0IG9ubHkgaWYgCisJICogQW5kIGF0dGFjaCB0aGVtIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLiAgQnV0IG9ubHkgaWYKIAkgKiBibG9ja193cml0ZV9mdWxsX3BhZ2UoKSBzdWNjZWVkZWQuICBPdGhlcndpc2UgdGhleSBhcmUgdW5tYXBwZWQsCiAJICogYW5kIGdlbmVyYWxseSBqdW5rLgogCSAqLwpAQCAtMTY0NCw3ICsxNjQ1LDcgQEAKIAkJfQogCX0KIAotCXJldCA9IGJsb2NrZGV2X2RpcmVjdF9JTyhydywgaW9jYiwgaW5vZGUsIGlub2RlLT5pX3NiLT5zX2JkZXYsIGlvdiwgCisJcmV0ID0gYmxvY2tkZXZfZGlyZWN0X0lPKHJ3LCBpb2NiLCBpbm9kZSwgaW5vZGUtPmlfc2ItPnNfYmRldiwgaW92LAogCQkJCSBvZmZzZXQsIG5yX3NlZ3MsCiAJCQkJIGV4dDNfZ2V0X2Jsb2NrLCBOVUxMKTsKIApAQCAtMjAyNSw3ICsyMDI2LDcgQEAKIAkJCSAgIF9fbGUzMiAqZmlyc3QsIF9fbGUzMiAqbGFzdCkKIHsKIAlleHQzX2ZzYmxrX3QgYmxvY2tfdG9fZnJlZSA9IDA7ICAgIC8qIFN0YXJ0aW5nIGJsb2NrICMgb2YgYSBydW4gKi8KLQl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsJICAgIC8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhlIHJ1biAqLyAKKwl1bnNpZ25lZCBsb25nIGNvdW50ID0gMDsJICAgIC8qIE51bWJlciBvZiBibG9ja3MgaW4gdGhlIHJ1biAqLwogCV9fbGUzMiAqYmxvY2tfdG9fZnJlZV9wID0gTlVMTDsJICAgIC8qIFBvaW50ZXIgaW50byBpbm9kZS9pbmQKIAkJCQkJICAgICAgIGNvcnJlc3BvbmRpbmcgdG8KIAkJCQkJICAgICAgIGJsb2NrX3RvX2ZyZWUgKi8KQEAgLTIwNTQsNyArMjA1NSw3IEBACiAJCQl9IGVsc2UgaWYgKG5yID09IGJsb2NrX3RvX2ZyZWUgKyBjb3VudCkgewogCQkJCWNvdW50Kys7CiAJCQl9IGVsc2UgewotCQkJCWV4dDNfY2xlYXJfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgsIAorCQkJCWV4dDNfY2xlYXJfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIHRoaXNfYmgsCiAJCQkJCQkgIGJsb2NrX3RvX2ZyZWUsCiAJCQkJCQkgIGNvdW50LCBibG9ja190b19mcmVlX3AsIHApOwogCQkJCWJsb2NrX3RvX2ZyZWUgPSBucjsKQEAgLTIxMTUsNyArMjExNiw3IEBACiAJCQkgKi8KIAkJCWlmICghYmgpIHsKIAkJCQlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCAiZXh0M19mcmVlX2JyYW5jaGVzIiwKLQkJCQkJICAgIlJlYWQgZmFpbHVyZSwgaW5vZGU9JWxkLCBibG9jaz0iRTNGU0JMSywKKwkJCQkJICAgIlJlYWQgZmFpbHVyZSwgaW5vZGU9JWx1LCBibG9jaz0iRTNGU0JMSywKIAkJCQkJICAgaW5vZGUtPmlfaW5vLCBucik7CiAJCQkJY29udGludWU7CiAJCQl9CkBAIC0yMTg0LDcgKzIxODUsNyBAQAogCQkJCQkqcCA9IDA7CiAJCQkJCUJVRkZFUl9UUkFDRShwYXJlbnRfYmgsCiAJCQkJCSJjYWxsIGV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YSIpOwotCQkJCQlleHQzX2pvdXJuYWxfZGlydHlfbWV0YWRhdGEoaGFuZGxlLCAKKwkJCQkJZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKIAkJCQkJCQkJICAgIHBhcmVudF9iaCk7CiAJCQkJfQogCQkJfQpAQCAtMjU0MCw3ICsyNTQxLDcgQEAKIAkJICovCiAJCWdldF9iaChiaCk7CiAJCWJoLT5iX2VuZF9pbyA9IGVuZF9idWZmZXJfcmVhZF9zeW5jOwotCQlzdWJtaXRfYmgoUkVBRCwgYmgpOworCQlzdWJtaXRfYmgoUkVBRF9NRVRBLCBiaCk7CiAJCXdhaXRfb25fYnVmZmVyKGJoKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKSB7CiAJCQlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCAiZXh0M19nZXRfaW5vZGVfbG9jIiwKQEAgLTI2MzIsOSArMjYzMyw2IEBACiAJCSAqIHJlY292ZXJ5IGNvZGU6IHRoYXQncyBmaW5lLCB3ZSdyZSBhYm91dCB0byBjb21wbGV0ZQogCQkgKiB0aGUgcHJvY2VzcyBvZiBkZWxldGluZyB0aG9zZS4gKi8KIAl9Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsJLyogVGhpcyBpcyB0aGUgb3B0aW1hbCBJTyBzaXplCi0JCQkJCSAqIChmb3Igc3RhdCksIG5vdCB0aGUgZnMgYmxvY2sKLQkJCQkJICogc2l6ZSAqLyAgCiAJaW5vZGUtPmlfYmxvY2tzID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Jsb2Nrcyk7CiAJZWktPmlfZmxhZ3MgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfZmxhZ3MpOwogI2lmZGVmIEVYVDNfRlJBR01FTlRTCkBAIC0yNzA0LDcgKzI3MDIsNyBAQAogCQlpZiAocmF3X2lub2RlLT5pX2Jsb2NrWzBdKQogCQkJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLAogCQkJICAgb2xkX2RlY29kZV9kZXYobGUzMl90b19jcHUocmF3X2lub2RlLT5pX2Jsb2NrWzBdKSkpOwotCQllbHNlIAorCQllbHNlCiAJCQlpbml0X3NwZWNpYWxfaW5vZGUoaW5vZGUsIGlub2RlLT5pX21vZGUsCiAJCQkgICBuZXdfZGVjb2RlX2RldihsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmlfYmxvY2tbMV0pKSk7CiAJfQpAQCAtMjcyNCw4ICsyNzIyLDggQEAKICAqCiAgKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gaWxvYy0+YmguCiAgKi8KLXN0YXRpYyBpbnQgZXh0M19kb191cGRhdGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgCi0JCQkJc3RydWN0IGlub2RlICppbm9kZSwgCitzdGF0aWMgaW50IGV4dDNfZG9fdXBkYXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsCisJCQkJc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlzdHJ1Y3QgZXh0M19pbG9jICppbG9jKQogewogCXN0cnVjdCBleHQzX2lub2RlICpyYXdfaW5vZGUgPSBleHQzX3Jhd19pbm9kZShpbG9jKTsKQEAgLTI5MDAsNyArMjg5OCw3IEBACiAgKiBjb21taXQgd2lsbCBsZWF2ZSB0aGUgYmxvY2tzIGJlaW5nIGZsdXNoZWQgaW4gYW4gdW51c2VkIHN0YXRlIG9uCiAgKiBkaXNrLiAgKE9uIHJlY292ZXJ5LCB0aGUgaW5vZGUgd2lsbCBnZXQgdHJ1bmNhdGVkIGFuZCB0aGUgYmxvY2tzIHdpbGwKICAqIGJlIGZyZWVkLCBzbyB3ZSBoYXZlIGEgc3Ryb25nIGd1YXJhbnRlZSB0aGF0IG5vIGZ1dHVyZSBjb21taXQgd2lsbAotICogbGVhdmUgdGhlc2UgYmxvY2tzIHZpc2libGUgdG8gdGhlIHVzZXIuKSAgCisgKiBsZWF2ZSB0aGVzZSBibG9ja3MgdmlzaWJsZSB0byB0aGUgdXNlci4pCiAgKgogICogQ2FsbGVkIHdpdGggaW5vZGUtPnNlbSBkb3duLgogICovCkBAIC0zMDQzLDEzICszMDQxLDEzIEBACiAJcmV0dXJuIGVycjsKIH0KIAotLyogCisvKgogICogT24gc3VjY2VzcywgV2UgZW5kIHVwIHdpdGggYW4gb3V0c3RhbmRpbmcgcmVmZXJlbmNlIGNvdW50IGFnYWluc3QKLSAqIGlsb2MtPmJoLiAgVGhpcyBfbXVzdF8gYmUgY2xlYW5lZCB1cCBsYXRlci4gCisgKiBpbG9jLT5iaC4gIFRoaXMgX211c3RfIGJlIGNsZWFuZWQgdXAgbGF0ZXIuCiAgKi8KIAogaW50Ci1leHQzX3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgCitleHQzX3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCSBzdHJ1Y3QgZXh0M19pbG9jICppbG9jKQogewogCWludCBlcnIgPSAwOwpAQCAtMzEzOSw3ICszMTM3LDcgQEAKIH0KIAogI2lmIDAKLS8qIAorLyoKICAqIEJpbmQgYW4gaW5vZGUncyBiYWNraW5nIGJ1ZmZlcl9oZWFkIGludG8gdGhpcyB0cmFuc2FjdGlvbiwgdG8gcHJldmVudAogICogaXQgZnJvbSBiZWluZyBmbHVzaGVkIHRvIGRpc2sgZWFybHkuICBVbmxpa2UKICAqIGV4dDNfcmVzZXJ2ZV9pbm9kZV93cml0ZSwgdGhpcyBsZWF2ZXMgYmVoaW5kIG5vIGJoIHJlZmVyZW5jZSBhbmQKQEAgLTMxNTcsNyArMzE1NSw3IEBACiAJCQlCVUZGRVJfVFJBQ0UoaWxvYy5iaCwgImdldF93cml0ZV9hY2Nlc3MiKTsKIAkJCWVyciA9IGpvdXJuYWxfZ2V0X3dyaXRlX2FjY2VzcyhoYW5kbGUsIGlsb2MuYmgpOwogCQkJaWYgKCFlcnIpCi0JCQkJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwgCisJCQkJZXJyID0gZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhKGhhbmRsZSwKIAkJCQkJCQkJICBpbG9jLmJoKTsKIAkJCWJyZWxzZShpbG9jLmJoKTsKIAkJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0My9pb2N0bC5jIGIvZnMvZXh0My9pb2N0bC5jCmluZGV4IDNhNmIwMTIuLjEyZGFhNjggMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvaW9jdGwuYworKysgYi9mcy9leHQzL2lvY3RsLmMKQEAgLTEzLDkgKzEzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvZXh0M19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2V4dDNfamJkLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotCiBpbnQgZXh0M19pb2N0bCAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCwgdW5zaWduZWQgaW50IGNtZCwKIAkJdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0yNTIsMyArMjUzLDU1IEBACiAJCXJldHVybiAtRU5PVFRZOwogCX0KIH0KKworI2lmZGVmIENPTkZJR19DT01QQVQKK2xvbmcgZXh0M19jb21wYXRfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgcmV0OworCisJLyogVGhlc2UgYXJlIGp1c3QgbWlzbmFtZWQsIHRoZXkgYWN0dWFsbHkgZ2V0L3B1dCBmcm9tL3RvIHVzZXIgYW4gaW50ICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIEVYVDNfSU9DMzJfR0VURkxBR1M6CisJCWNtZCA9IEVYVDNfSU9DX0dFVEZMQUdTOworCQlicmVhazsKKwljYXNlIEVYVDNfSU9DMzJfU0VURkxBR1M6CisJCWNtZCA9IEVYVDNfSU9DX1NFVEZMQUdTOworCQlicmVhazsKKwljYXNlIEVYVDNfSU9DMzJfR0VUVkVSU0lPTjoKKwkJY21kID0gRVhUM19JT0NfR0VUVkVSU0lPTjsKKwkJYnJlYWs7CisJY2FzZSBFWFQzX0lPQzMyX1NFVFZFUlNJT046CisJCWNtZCA9IEVYVDNfSU9DX1NFVFZFUlNJT047CisJCWJyZWFrOworCWNhc2UgRVhUM19JT0MzMl9HUk9VUF9FWFRFTkQ6CisJCWNtZCA9IEVYVDNfSU9DX0dST1VQX0VYVEVORDsKKwkJYnJlYWs7CisJY2FzZSBFWFQzX0lPQzMyX0dFVFZFUlNJT05fT0xEOgorCQljbWQgPSBFWFQzX0lPQ19HRVRWRVJTSU9OX09MRDsKKwkJYnJlYWs7CisJY2FzZSBFWFQzX0lPQzMyX1NFVFZFUlNJT05fT0xEOgorCQljbWQgPSBFWFQzX0lPQ19TRVRWRVJTSU9OX09MRDsKKwkJYnJlYWs7CisjaWZkZWYgQ09ORklHX0pCRF9ERUJVRworCWNhc2UgRVhUM19JT0MzMl9XQUlUX0ZPUl9SRUFET05MWToKKwkJY21kID0gRVhUM19JT0NfV0FJVF9GT1JfUkVBRE9OTFk7CisJCWJyZWFrOworI2VuZGlmCisJY2FzZSBFWFQzX0lPQzMyX0dFVFJTVlNaOgorCQljbWQgPSBFWFQzX0lPQ19HRVRSU1ZTWjsKKwkJYnJlYWs7CisJY2FzZSBFWFQzX0lPQzMyX1NFVFJTVlNaOgorCQljbWQgPSBFWFQzX0lPQ19TRVRSU1ZTWjsKKwkJYnJlYWs7CisJY2FzZSBFWFQzX0lPQ19HUk9VUF9BREQ6CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gZXh0M19pb2N0bChpbm9kZSwgZmlsZSwgY21kLCAodW5zaWduZWQgbG9uZykgY29tcGF0X3B0cihhcmcpKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvZXh0My9uYW1laS5jIGIvZnMvZXh0My9uYW1laS5jCmluZGV4IDJhYTcxMDEuLjkwNjczMWEgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDMvbmFtZWkuYworKysgYi9mcy9leHQzL25hbWVpLmMKQEAgLTE1LDEzICsxNSwxMyBAQAogICogIEJpZy1lbmRpYW4gdG8gbGl0dGxlLWVuZGlhbiBieXRlLXN3YXBwaW5nL2JpdG1hcHMgYnkKICAqICAgICAgICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQGNhaXAucnV0Z2Vycy5lZHUpLCAxOTk1CiAgKiAgRGlyZWN0b3J5IGVudHJ5IGZpbGUgdHlwZSBzdXBwb3J0IGFuZCBmb3J3YXJkIGNvbXBhdGliaWxpdHkgaG9va3MKLSAqICAJZm9yIEItdHJlZSBkaXJlY3RvcmllcyBieSBUaGVvZG9yZSBUcydvICh0eXRzb0BtaXQuZWR1KSwgMTk5OAorICoJZm9yIEItdHJlZSBkaXJlY3RvcmllcyBieSBUaGVvZG9yZSBUcydvICh0eXRzb0BtaXQuZWR1KSwgMTk5OAogICogIEhhc2ggVHJlZSBEaXJlY3RvcnkgaW5kZXhpbmcgKGMpCi0gKiAgCURhbmllbCBQaGlsbGlwcywgMjAwMQorICoJRGFuaWVsIFBoaWxsaXBzLCAyMDAxCiAgKiAgSGFzaCBUcmVlIERpcmVjdG9yeSBpbmRleGluZyBwb3J0aW5nCi0gKiAgCUNocmlzdG9waGVyIExpLCAyMDAyCisgKglDaHJpc3RvcGhlciBMaSwgMjAwMgogICogIEhhc2ggVHJlZSBEaXJlY3RvcnkgaW5kZXhpbmcgY2xlYW51cAotICogCVRoZW9kb3JlIFRzJ28sIDIwMDIKKyAqCVRoZW9kb3JlIFRzJ28sIDIwMDIKICAqLwogCiAjaW5jbHVkZSA8bGludXgvZnMuaD4KQEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CisjaW5jbHVkZSA8bGludXgvYmlvLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KIAogI2luY2x1ZGUgIm5hbWVpLmgiCkBAIC03Niw3ICs3Nyw3IEBACiAjaWZkZWYgRFhfREVCVUcKICNkZWZpbmUgZHh0cmFjZShjb21tYW5kKSBjb21tYW5kCiAjZWxzZQotI2RlZmluZSBkeHRyYWNlKGNvbW1hbmQpIAorI2RlZmluZSBkeHRyYWNlKGNvbW1hbmQpCiAjZW5kaWYKIAogc3RydWN0IGZha2VfZGlyZW50CkBAIC0xNjksNyArMTcwLDcgQEAKIHN0YXRpYyB2b2lkIGR4X2luc2VydF9ibG9jayAoc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwgdTMyIGhhc2gsIHUzMiBibG9jayk7CiBzdGF0aWMgaW50IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwgX191MzIgaGFzaCwKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKLQkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZXMsIAorCQkJCSBzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lcywKIAkJCQkgX191MzIgKnN0YXJ0X2hhc2gpOwogc3RhdGljIHN0cnVjdCBidWZmZXJfaGVhZCAqIGV4dDNfZHhfZmluZF9lbnRyeShzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCSAgICAgICBzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKnJlc19kaXIsIGludCAqZXJyKTsKQEAgLTI1MCw3ICsyNTEsNyBAQAogfQogCiBzdHJ1Y3Qgc3RhdHMKLXsgCit7CiAJdW5zaWduZWQgbmFtZXM7CiAJdW5zaWduZWQgc3BhY2U7CiAJdW5zaWduZWQgYmNvdW50OwpAQCAtMjc4LDcgKzI3OSw3IEBACiAJCQkJICAgICAgICgoY2hhciAqKSBkZSAtIGJhc2UpKTsKIAkJCX0KIAkJCXNwYWNlICs9IEVYVDNfRElSX1JFQ19MRU4oZGUtPm5hbWVfbGVuKTsKLQkgCQluYW1lcysrOworCQkJbmFtZXMrKzsKIAkJfQogCQlkZSA9IChzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiAqKSAoKGNoYXIgKikgZGUgKyBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikpOwogCX0KQEAgLTQ2NCw3ICs0NjUsNyBAQAogICovCiBzdGF0aWMgaW50IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhzdHJ1Y3QgaW5vZGUgKmRpciwgX191MzIgaGFzaCwKIAkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZSwKLQkJCQkgc3RydWN0IGR4X2ZyYW1lICpmcmFtZXMsIAorCQkJCSBzdHJ1Y3QgZHhfZnJhbWUgKmZyYW1lcywKIAkJCQkgX191MzIgKnN0YXJ0X2hhc2gpCiB7CiAJc3RydWN0IGR4X2ZyYW1lICpwOwpAQCAtNjMyLDcgKzYzMyw3IEBACiAJCX0KIAkJY291bnQgKz0gcmV0OwogCQloYXNodmFsID0gfjA7Ci0JCXJldCA9IGV4dDNfaHRyZWVfbmV4dF9ibG9jayhkaXIsIEhBU0hfTkJfQUxXQVlTLCAKKwkJcmV0ID0gZXh0M19odHJlZV9uZXh0X2Jsb2NrKGRpciwgSEFTSF9OQl9BTFdBWVMsCiAJCQkJCSAgICBmcmFtZSwgZnJhbWVzLCAmaGFzaHZhbCk7CiAJCSpuZXh0X2hhc2ggPSBoYXNodmFsOwogCQlpZiAocmV0IDwgMCkgewpAQCAtNjQ5LDcgKzY1MCw3IEBACiAJCQlicmVhazsKIAl9CiAJZHhfcmVsZWFzZShmcmFtZXMpOwotCWR4dHJhY2UocHJpbnRrKCJGaWxsIHRyZWU6IHJldHVybmVkICVkIGVudHJpZXMsIG5leHQgaGFzaDogJXhcbiIsIAorCWR4dHJhY2UocHJpbnRrKCJGaWxsIHRyZWU6IHJldHVybmVkICVkIGVudHJpZXMsIG5leHQgaGFzaDogJXhcbiIsCiAJCSAgICAgICBjb3VudCwgKm5leHRfaGFzaCkpOwogCXJldHVybiBjb3VudDsKIGVycm91dDoKQEAgLTg3MCw3ICs4NzEsNyBAQAogCQkJCWJoID0gZXh0M19nZXRibGsoTlVMTCwgZGlyLCBiKyssIDAsICZlcnIpOwogCQkJCWJoX3VzZVtyYV9tYXhdID0gYmg7CiAJCQkJaWYgKGJoKQotCQkJCQlsbF9yd19ibG9jayhSRUFELCAxLCAmYmgpOworCQkJCQlsbF9yd19ibG9jayhSRUFEX01FVEEsIDEsICZiaCk7CiAJCQl9CiAJCX0KIAkJaWYgKChiaCA9IGJoX3VzZVtyYV9wdHIrK10pID09IE5VTEwpCkBAIC0xMDUwLDcgKzEwNTEsNyBAQAogCQlwYXJlbnQgPSBFUlJfUFRSKC1FTk9NRU0pOwogCX0KIAlyZXR1cm4gcGFyZW50OwotfSAKK30KIAogI2RlZmluZSBTX1NISUZUIDEyCiBzdGF0aWMgdW5zaWduZWQgY2hhciBleHQzX3R5cGVfYnlfbW9kZVtTX0lGTVQgPj4gU19TSElGVF0gPSB7CkBAIC0xMTk4LDcgKzExOTksNyBAQAogICogYWRkX2RpcmVudF90b19idWYgd2lsbCBhdHRlbXB0IHNlYXJjaCB0aGUgZGlyZWN0b3J5IGJsb2NrIGZvcgogICogc3BhY2UuICBJdCB3aWxsIHJldHVybiAtRU5PU1BDIGlmIG5vIHNwYWNlIGlzIGF2YWlsYWJsZSwgYW5kIC1FSU8KICAqIGFuZCAtRUVYSVNUIGlmIGRpcmVjdG9yeSBlbnRyeSBhbHJlYWR5IGV4aXN0cy4KLSAqIAorICoKICAqIE5PVEUhICBiaCBpcyBOT1QgcmVsZWFzZWQgaW4gdGhlIGNhc2Ugd2hlcmUgRU5PU1BDIGlzIHJldHVybmVkLiAgSW4KICAqIGFsbCBvdGhlciBjYXNlcyBiaCBpcyByZWxlYXNlZC4KICAqLwpAQCAtMTU3Miw3ICsxNTczLDcgQEAKICAqIGV4dDNfZGVsZXRlX2VudHJ5IGRlbGV0ZXMgYSBkaXJlY3RvcnkgZW50cnkgYnkgbWVyZ2luZyBpdCB3aXRoIHRoZQogICogcHJldmlvdXMgZW50cnkKICAqLwotc3RhdGljIGludCBleHQzX2RlbGV0ZV9lbnRyeSAoaGFuZGxlX3QgKmhhbmRsZSwgCitzdGF0aWMgaW50IGV4dDNfZGVsZXRlX2VudHJ5IChoYW5kbGVfdCAqaGFuZGxlLAogCQkJICAgICAgc3RydWN0IGlub2RlICogZGlyLAogCQkJICAgICAgc3RydWN0IGV4dDNfZGlyX2VudHJ5XzIgKiBkZV9kZWwsCiAJCQkgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKQEAgLTE2MTUsMTIgKzE2MTYsMTIgQEAKICAqLwogc3RhdGljIGlubGluZSB2b2lkIGV4dDNfaW5jX2NvdW50KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgZXh0M19kZWNfY291bnQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQlpbm9kZS0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoaW5vZGUpOwogfQogCiBzdGF0aWMgaW50IGV4dDNfYWRkX25vbmRpcihoYW5kbGVfdCAqaGFuZGxlLApAQCAtMTY0MywxMiArMTY0NCwxMiBAQAogICogaXMgc28gZmFyIG5lZ2F0aXZlIC0gaXQgaGFzIG5vIGlub2RlLgogICoKICAqIElmIHRoZSBjcmVhdGUgc3VjY2VlZHMsIHdlIGZpbGwgaW4gdGhlIGlub2RlIGluZm9ybWF0aW9uCi0gKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4gCisgKiB3aXRoIGRfaW5zdGFudGlhdGUoKS4KICAqLwogc3RhdGljIGludCBleHQzX2NyZWF0ZSAoc3RydWN0IGlub2RlICogZGlyLCBzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBpbnQgbW9kZSwKIAkJc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7Ci0JaGFuZGxlX3QgKmhhbmRsZTsgCisJaGFuZGxlX3QgKmhhbmRsZTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAlpbnQgZXJyLCByZXRyaWVzID0gMDsKIApAQCAtMTY4OCw3ICsxNjg5LDcgQEAKIAogcmV0cnk6CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KGRpciwgRVhUM19EQVRBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpICsKLQkJCSAJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCisJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMyArCiAJCQkJCTIqRVhUM19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpKTsKIAlpZiAoSVNfRVJSKGhhbmRsZSkpCiAJCXJldHVybiBQVFJfRVJSKGhhbmRsZSk7CkBAIC0xNzQyLDcgKzE3NDMsNyBAQAogCWlub2RlLT5pX3NpemUgPSBFWFQzX0koaW5vZGUpLT5pX2Rpc2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCWRpcl9ibG9jayA9IGV4dDNfYnJlYWQgKGhhbmRsZSwgaW5vZGUsIDAsIDEsICZlcnIpOwogCWlmICghZGlyX2Jsb2NrKSB7Ci0JCWlub2RlLT5pX25saW5rLS07IC8qIGlzIHRoaXMgbmxpbmsgPT0gMD8gKi8KKwkJZHJvcF9ubGluayhpbm9kZSk7IC8qIGlzIHRoaXMgbmxpbmsgPT0gMD8gKi8KIAkJZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCQlpcHV0IChpbm9kZSk7CiAJCWdvdG8gb3V0X3N0b3A7CkBAIC0xNzc0LDcgKzE3NzUsNyBAQAogCQlpcHV0IChpbm9kZSk7CiAJCWdvdG8gb3V0X3N0b3A7CiAJfQotCWRpci0+aV9ubGluaysrOworCWluY19ubGluayhkaXIpOwogCWV4dDNfdXBkYXRlX2R4X2ZsYWcoZGlyKTsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CkBAIC0xODEzLDEwICsxODE0LDEwIEBACiAJZGUxID0gKHN0cnVjdCBleHQzX2Rpcl9lbnRyeV8yICopCiAJCQkoKGNoYXIgKikgZGUgKyBsZTE2X3RvX2NwdShkZS0+cmVjX2xlbikpOwogCWlmIChsZTMyX3RvX2NwdShkZS0+aW5vZGUpICE9IGlub2RlLT5pX2lubyB8fAotCQkJIWxlMzJfdG9fY3B1KGRlMS0+aW5vZGUpIHx8IAorCQkJIWxlMzJfdG9fY3B1KGRlMS0+aW5vZGUpIHx8CiAJCQlzdHJjbXAgKCIuIiwgZGUtPm5hbWUpIHx8CiAJCQlzdHJjbXAgKCIuLiIsIGRlMS0+bmFtZSkpIHsKLQkgICAgCWV4dDNfd2FybmluZyAoaW5vZGUtPmlfc2IsICJlbXB0eV9kaXIiLAorCQlleHQzX3dhcm5pbmcgKGlub2RlLT5pX3NiLCAiZW1wdHlfZGlyIiwKIAkJCSAgICAgICJiYWQgZGlyZWN0b3J5IChkaXIgIyVsdSkgLSBubyBgLicgb3IgYC4uJyIsCiAJCQkgICAgICBpbm9kZS0+aV9pbm8pOwogCQlicmVsc2UgKGJoKTsKQEAgLTE4ODMsNyArMTg4NCw3IEBACiAJICogYmVpbmcgdHJ1bmNhdGVkLCBvciBmaWxlcyBiZWluZyB1bmxpbmtlZC4gKi8KIAogCS8qIEBAQCBGSVhNRTogT2JzZXJ2YXRpb24gZnJvbSBhdmlybzoKLQkgKiBJIHRoaW5rIEkgY2FuIHRyaWdnZXIgSl9BU1NFUlQgaW4gZXh0M19vcnBoYW5fYWRkKCkuICBXZSBibG9jayAKKwkgKiBJIHRoaW5rIEkgY2FuIHRyaWdnZXIgSl9BU1NFUlQgaW4gZXh0M19vcnBoYW5fYWRkKCkuICBXZSBibG9jawogCSAqIGhlcmUgKG9uIGxvY2tfc3VwZXIoKSksIHNvIHJhY2Ugd2l0aCBleHQzX2xpbmsoKSB3aGljaCBtaWdodCBidW1wCiAJICogLT5pX25saW5rLiBGb3IsIHNheSBpdCwgY2hhcmFjdGVyIGRldmljZS4gTm90IGEgcmVndWxhciBmaWxlLAogCSAqIG5vdCBhIGRpcmVjdG9yeSwgbm90IGEgc3ltbGluayBhbmQgLT5pX25saW5rID4gMC4KQEAgLTE5MTksOCArMTkyMCw4IEBACiAJaWYgKCFlcnIpCiAJCWxpc3RfYWRkKCZFWFQzX0koaW5vZGUpLT5pX29ycGhhbiwgJkVYVDNfU0Ioc2IpLT5zX29ycGhhbik7CiAKLQlqYmRfZGVidWcoNCwgInN1cGVyYmxvY2sgd2lsbCBwb2ludCB0byAlbGRcbiIsIGlub2RlLT5pX2lubyk7Ci0JamJkX2RlYnVnKDQsICJvcnBoYW4gaW5vZGUgJWxkIHdpbGwgcG9pbnQgdG8gJWRcbiIsCisJamJkX2RlYnVnKDQsICJzdXBlcmJsb2NrIHdpbGwgcG9pbnQgdG8gJWx1XG4iLCBpbm9kZS0+aV9pbm8pOworCWpiZF9kZWJ1Zyg0LCAib3JwaGFuIGlub2RlICVsdSB3aWxsIHBvaW50IHRvICVkXG4iLAogCQkJaW5vZGUtPmlfaW5vLCBORVhUX09SUEhBTihpbm9kZSkpOwogb3V0X3VubG9jazoKIAl1bmxvY2tfc3VwZXIoc2IpOwpAQCAtMjA0NCw3ICsyMDQ1LDcgQEAKIAkJCSAgICAgICJlbXB0eSBkaXJlY3RvcnkgaGFzIG5saW5rIT0yICglZCkiLAogCQkJICAgICAgaW5vZGUtPmlfbmxpbmspOwogCWlub2RlLT5pX3ZlcnNpb24rKzsKLQlpbm9kZS0+aV9ubGluayA9IDA7CisJY2xlYXJfbmxpbmsoaW5vZGUpOwogCS8qIFRoZXJlJ3Mgbm8gbmVlZCB0byBzZXQgaV9kaXNrc2l6ZTogdGhlIGZhY3QgdGhhdCBpX25saW5rIGlzCiAJICogemVybyB3aWxsIGVuc3VyZSB0aGF0IHRoZSByaWdodCB0aGluZyBoYXBwZW5zIGR1cmluZyBhbnkKIAkgKiByZWNvdmVyeS4gKi8KQEAgLTIwNTIsNyArMjA1Myw3IEBACiAJZXh0M19vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7Ci0JZGlyLT5pX25saW5rLS07CisJZHJvcF9ubGluayhkaXIpOwogCWV4dDNfdXBkYXRlX2R4X2ZsYWcoZGlyKTsKIAlleHQzX21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBkaXIpOwogCkBAIC0yMTAzLDcgKzIxMDQsNyBAQAogCWRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZXh0M191cGRhdGVfZHhfZmxhZyhkaXIpOwogCWV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGRpcik7Ci0JaW5vZGUtPmlfbmxpbmstLTsKKwlkcm9wX25saW5rKGlub2RlKTsKIAlpZiAoIWlub2RlLT5pX25saW5rKQogCQlleHQzX29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7CkBAIC0yMTI5LDcgKzIxMzAsNyBAQAogCiByZXRyeToKIAloYW5kbGUgPSBleHQzX2pvdXJuYWxfc3RhcnQoZGlyLCBFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikgKwotCQkJIAkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyA1ICsKKwkJCQkJRVhUM19JTkRFWF9FWFRSQV9UUkFOU19CTE9DS1MgKyA1ICsKIAkJCQkJMipFWFQzX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikpOwogCWlmIChJU19FUlIoaGFuZGxlKSkKIAkJcmV0dXJuIFBUUl9FUlIoaGFuZGxlKTsKQEAgLTIyMjcsNyArMjIyOCw3IEBACiAJCURRVU9UX0lOSVQobmV3X2RlbnRyeS0+ZF9pbm9kZSk7CiAJaGFuZGxlID0gZXh0M19qb3VybmFsX3N0YXJ0KG9sZF9kaXIsIDIgKgogCQkJCQlFWFQzX0RBVEFfVFJBTlNfQkxPQ0tTKG9sZF9kaXItPmlfc2IpICsKLQkJCSAJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CisJCQkJCUVYVDNfSU5ERVhfRVhUUkFfVFJBTlNfQkxPQ0tTICsgMik7CiAJaWYgKElTX0VSUihoYW5kbGUpKQogCQlyZXR1cm4gUFRSX0VSUihoYW5kbGUpOwogCkBAIC0yMzI1LDcgKzIzMjYsNyBAQAogCX0KIAogCWlmIChuZXdfaW5vZGUpIHsKLQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsobmV3X2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAl9CiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwpAQCAtMjMzNiwxMSArMjMzNywxMSBAQAogCQlQQVJFTlRfSU5PKGRpcl9iaC0+Yl9kYXRhKSA9IGNwdV90b19sZTMyKG5ld19kaXItPmlfaW5vKTsKIAkJQlVGRkVSX1RSQUNFKGRpcl9iaCwgImNhbGwgZXh0M19qb3VybmFsX2RpcnR5X21ldGFkYXRhIik7CiAJCWV4dDNfam91cm5hbF9kaXJ0eV9tZXRhZGF0YShoYW5kbGUsIGRpcl9iaCk7Ci0JCW9sZF9kaXItPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhvbGRfZGlyKTsKIAkJaWYgKG5ld19pbm9kZSkgewotCQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCX0gZWxzZSB7Ci0JCQluZXdfZGlyLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJCQlleHQzX3VwZGF0ZV9keF9mbGFnKG5ld19kaXIpOwogCQkJZXh0M19tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgbmV3X2Rpcik7CiAJCX0KQEAgLTIzOTMsNCArMjM5NCw0IEBACiAJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKICNlbmRpZgogCS5wZXJtaXNzaW9uCT0gZXh0M19wZXJtaXNzaW9uLAotfTsgCit9OwpkaWZmIC0tZ2l0IGEvZnMvZXh0My9yZXNpemUuYyBiL2ZzL2V4dDMvcmVzaXplLmMKaW5kZXggNWUxMzM3Zi4uYjczY2JhMSAxMDA2NDQKLS0tIGEvZnMvZXh0My9yZXNpemUuYworKysgYi9mcy9leHQzL3Jlc2l6ZS5jCkBAIC0zMzYsNyArMzM2LDcgQEAKIAl1bnNpZ25lZCBmaXZlID0gNTsKIAl1bnNpZ25lZCBzZXZlbiA9IDc7CiAJdW5zaWduZWQgZ3JwOwotCV9fdTMyICpwID0gKF9fdTMyICopcHJpbWFyeS0+Yl9kYXRhOworCV9fbGUzMiAqcCA9IChfX2xlMzIgKilwcmltYXJ5LT5iX2RhdGE7CiAJaW50IGdkYmFja3VwcyA9IDA7CiAKIAl3aGlsZSAoKGdycCA9IGV4dDNfbGlzdF9iYWNrdXBzKHNiLCAmdGhyZWUsICZmaXZlLCAmc2V2ZW4pKSA8IGVuZCkgewpAQCAtMzgwLDcgKzM4MCw3IEBACiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkaW5kOwogCWludCBnZGJhY2t1cHM7CiAJc3RydWN0IGV4dDNfaWxvYyBpbG9jOwotCV9fdTMyICpkYXRhOworCV9fbGUzMiAqZGF0YTsKIAlpbnQgZXJyOwogCiAJaWYgKHRlc3Rfb3B0KHNiLCBERUJVRykpCkBAIC00MTcsNyArNDE3LDcgQEAKIAkJZ290byBleGl0X2JoOwogCX0KIAotCWRhdGEgPSAoX191MzIgKilkaW5kLT5iX2RhdGE7CisJZGF0YSA9IChfX2xlMzIgKilkaW5kLT5iX2RhdGE7CiAJaWYgKGxlMzJfdG9fY3B1KGRhdGFbZ2RiX251bSAlIEVYVDNfQUREUl9QRVJfQkxPQ0soc2IpXSkgIT0gZ2RibG9jaykgewogCQlleHQzX3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCSAgICAgIm5ldyBncm91cCAldSBHRFQgYmxvY2sgIkUzRlNCTEsiIG5vdCByZXNlcnZlZCIsCkBAIC00MzksOCArNDM5LDggQEAKIAlpZiAoKGVyciA9IGV4dDNfcmVzZXJ2ZV9pbm9kZV93cml0ZShoYW5kbGUsIGlub2RlLCAmaWxvYykpKQogCQlnb3RvIGV4aXRfZGluZGo7CiAKLQluX2dyb3VwX2Rlc2MgPSAoc3RydWN0IGJ1ZmZlcl9oZWFkICoqKWttYWxsb2MoKGdkYl9udW0gKyAxKSAqCi0JCQkJc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwgR0ZQX0tFUk5FTCk7CisJbl9ncm91cF9kZXNjID0ga21hbGxvYygoZ2RiX251bSArIDEpICogc2l6ZW9mKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKKwkJCUdGUF9LRVJORUwpOwogCWlmICghbl9ncm91cF9kZXNjKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWV4dDNfd2FybmluZyAoc2IsIF9fRlVOQ1RJT05fXywKQEAgLTUxOSw3ICs1MTksNyBAQAogCXN0cnVjdCBidWZmZXJfaGVhZCAqZGluZDsKIAlzdHJ1Y3QgZXh0M19pbG9jIGlsb2M7CiAJZXh0M19mc2Jsa190IGJsazsKLQlfX3UzMiAqZGF0YSwgKmVuZDsKKwlfX2xlMzIgKmRhdGEsICplbmQ7CiAJaW50IGdkYmFja3VwcyA9IDA7CiAJaW50IHJlcywgaTsKIAlpbnQgZXJyOwpAQCAtNTM2LDggKzUzNiw4IEBACiAJfQogCiAJYmxrID0gRVhUM19TQihzYiktPnNfc2JoLT5iX2Jsb2NrbnIgKyAxICsgRVhUM19TQihzYiktPnNfZ2RiX2NvdW50OwotCWRhdGEgPSAoX191MzIgKilkaW5kLT5iX2RhdGEgKyBFWFQzX1NCKHNiKS0+c19nZGJfY291bnQ7Ci0JZW5kID0gKF9fdTMyICopZGluZC0+Yl9kYXRhICsgRVhUM19BRERSX1BFUl9CTE9DSyhzYik7CisJZGF0YSA9IChfX2xlMzIgKilkaW5kLT5iX2RhdGEgKyBFWFQzX1NCKHNiKS0+c19nZGJfY291bnQ7CisJZW5kID0gKF9fbGUzMiAqKWRpbmQtPmJfZGF0YSArIEVYVDNfQUREUl9QRVJfQkxPQ0soc2IpOwogCiAJLyogR2V0IGVhY2ggcmVzZXJ2ZWQgcHJpbWFyeSBHRFQgYmxvY2sgYW5kIHZlcmlmeSBpdCBob2xkcyBiYWNrdXBzICovCiAJZm9yIChyZXMgPSAwOyByZXMgPCByZXNlcnZlZF9nZGI7IHJlcysrLCBibGsrKykgewpAQCAtNTQ1LDcgKzU0NSw4IEBACiAJCQlleHQzX3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywKIAkJCQkgICAgICJyZXNlcnZlZCBibG9jayAiRTNGU0JMSwogCQkJCSAgICAgIiBub3QgYXQgb2Zmc2V0ICVsZCIsCi0JCQkJICAgICBibGssIChsb25nKShkYXRhIC0gKF9fdTMyICopZGluZC0+Yl9kYXRhKSk7CisJCQkJICAgICBibGssCisJCQkJICAgICAobG9uZykoZGF0YSAtIChfX2xlMzIgKilkaW5kLT5iX2RhdGEpKTsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIGV4aXRfYmg7CiAJCX0KQEAgLTU2MCw3ICs1NjEsNyBAQAogCQkJZ290byBleGl0X2JoOwogCQl9CiAJCWlmICgrK2RhdGEgPj0gZW5kKQotCQkJZGF0YSA9IChfX3UzMiAqKWRpbmQtPmJfZGF0YTsKKwkJCWRhdGEgPSAoX19sZTMyICopZGluZC0+Yl9kYXRhOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCByZXNlcnZlZF9nZGI7IGkrKykgewpAQCAtNTg0LDcgKzU4NSw3IEBACiAJYmxrID0gaW5wdXQtPmdyb3VwICogRVhUM19CTE9DS1NfUEVSX0dST1VQKHNiKTsKIAlmb3IgKGkgPSAwOyBpIDwgcmVzZXJ2ZWRfZ2RiOyBpKyspIHsKIAkJaW50IGVycjI7Ci0JCWRhdGEgPSAoX191MzIgKilwcmltYXJ5W2ldLT5iX2RhdGE7CisJCWRhdGEgPSAoX19sZTMyICopcHJpbWFyeVtpXS0+Yl9kYXRhOwogCQkvKiBwcmludGsoInJlc2VydmluZyBiYWNrdXAgJWx1WyV1XSA9ICVsdVxuIiwKIAkJICAgICAgIHByaW1hcnlbaV0tPmJfYmxvY2tuciwgZ2RiYWNrdXBzLAogCQkgICAgICAgYmxrICsgcHJpbWFyeVtpXS0+Yl9ibG9ja25yKTsgKi8KQEAgLTY4OSw3ICs2OTAsNyBAQAogCQkJICAgICAiY2FuJ3QgdXBkYXRlIGJhY2t1cCBmb3IgZ3JvdXAgJWQgKGVyciAlZCksICIKIAkJCSAgICAgImZvcmNpbmcgZnNjayBvbiBuZXh0IHJlYm9vdCIsIGdyb3VwLCBlcnIpOwogCQlzYmktPnNfbW91bnRfc3RhdGUgJj0gfkVYVDNfVkFMSURfRlM7Ci0JCXNiaS0+c19lcy0+c19zdGF0ZSAmPSB+Y3B1X3RvX2xlMTYoRVhUM19WQUxJRF9GUyk7CisJCXNiaS0+c19lcy0+c19zdGF0ZSAmPSBjcHVfdG9fbGUxNih+RVhUM19WQUxJRF9GUyk7CiAJCW1hcmtfYnVmZmVyX2RpcnR5KHNiaS0+c19zYmgpOwogCX0KIH0KQEAgLTczMCw2ICs3MzEsMTggQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKKwlpZiAobGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSArIGlucHV0LT5ibG9ja3NfY291bnQgPAorCSAgICBsZTMyX3RvX2NwdShlcy0+c19ibG9ja3NfY291bnQpKSB7CisJCWV4dDNfd2FybmluZyhzYiwgX19GVU5DVElPTl9fLCAiYmxvY2tzX2NvdW50IG92ZXJmbG93XG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGxlMzJfdG9fY3B1KGVzLT5zX2lub2Rlc19jb3VudCkgKyBFWFQzX0lOT0RFU19QRVJfR1JPVVAoc2IpIDwKKwkgICAgbGUzMl90b19jcHUoZXMtPnNfaW5vZGVzX2NvdW50KSkgeworCQlleHQzX3dhcm5pbmcoc2IsIF9fRlVOQ1RJT05fXywgImlub2Rlc19jb3VudCBvdmVyZmxvd1xuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCWlmIChyZXNlcnZlZF9nZGIgfHwgZ2RiX29mZiA9PSAwKSB7CiAJCWlmICghRVhUM19IQVNfQ09NUEFUX0ZFQVRVUkUoc2IsCiAJCQkJCSAgICAgRVhUM19GRUFUVVJFX0NPTVBBVF9SRVNJWkVfSU5PREUpKXsKQEAgLTk1OCw2ICs5NzEsMTEgQEAKIAogCWFkZCA9IEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSBsYXN0OwogCisJaWYgKG9fYmxvY2tzX2NvdW50ICsgYWRkIDwgb19ibG9ja3NfY291bnQpIHsKKwkJZXh0M193YXJuaW5nKHNiLCBfX0ZVTkNUSU9OX18sICJibG9ja3NfY291bnQgb3ZlcmZsb3ciKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCiAJaWYgKG9fYmxvY2tzX2NvdW50ICsgYWRkID4gbl9ibG9ja3NfY291bnQpCiAJCWFkZCA9IG5fYmxvY2tzX2NvdW50IC0gb19ibG9ja3NfY291bnQ7CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMvc3VwZXIuYyBiL2ZzL2V4dDMvc3VwZXIuYwppbmRleCAzNTU5MDg2Li44YmZkNTZlIDEwMDY0NAotLS0gYS9mcy9leHQzL3N1cGVyLmMKKysrIGIvZnMvZXh0My9zdXBlci5jCkBAIC00NSw3ICs0NSw3IEBACiBzdGF0aWMgaW50IGV4dDNfbG9hZF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBzdHJ1Y3QgZXh0M19zdXBlcl9ibG9jayAqLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGpvdXJuYWxfZGV2bnVtKTsKIHN0YXRpYyBpbnQgZXh0M19jcmVhdGVfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKiwKLQkJCSAgICAgICBpbnQpOworCQkJICAgICAgIHVuc2lnbmVkIGludCk7CiBzdGF0aWMgdm9pZCBleHQzX2NvbW1pdF9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsCiAJCQkgICAgICAgc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKiBlcywKIAkJCSAgICAgICBpbnQgc3luYyk7CkBAIC02MiwxMyArNjIsMTMgQEAKIHN0YXRpYyB2b2lkIGV4dDNfd3JpdGVfc3VwZXIgKHN0cnVjdCBzdXBlcl9ibG9jayAqIHNiKTsKIHN0YXRpYyB2b2lkIGV4dDNfd3JpdGVfc3VwZXJfbG9ja2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwogCi0vKiAKKy8qCiAgKiBXcmFwcGVycyBmb3Igam91cm5hbF9zdGFydC9lbmQuCiAgKgogICogVGhlIG9ubHkgc3BlY2lhbCB0aGluZyB3ZSBuZWVkIHRvIGRvIGhlcmUgaXMgdG8gbWFrZSBzdXJlIHRoYXQgYWxsCiAgKiBqb3VybmFsX2VuZCBjYWxscyByZXN1bHQgaW4gdGhlIHN1cGVyYmxvY2sgYmVpbmcgbWFya2VkIGRpcnR5LCBzbwogICogdGhhdCBzeW5jKCkgd2lsbCBjYWxsIHRoZSBmaWxlc3lzdGVtJ3Mgd3JpdGVfc3VwZXIgY2FsbGJhY2sgaWYKLSAqIGFwcHJvcHJpYXRlLiAKKyAqIGFwcHJvcHJpYXRlLgogICovCiBoYW5kbGVfdCAqZXh0M19qb3VybmFsX3N0YXJ0X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBuYmxvY2tzKQogewpAQCAtOTAsMTEgKzkwLDExIEBACiAJcmV0dXJuIGpvdXJuYWxfc3RhcnQoam91cm5hbCwgbmJsb2Nrcyk7CiB9CiAKLS8qIAorLyoKICAqIFRoZSBvbmx5IHNwZWNpYWwgdGhpbmcgd2UgbmVlZCB0byBkbyBoZXJlIGlzIHRvIG1ha2Ugc3VyZSB0aGF0IGFsbAogICogam91cm5hbF9zdG9wIGNhbGxzIHJlc3VsdCBpbiB0aGUgc3VwZXJibG9jayBiZWluZyBtYXJrZWQgZGlydHksIHNvCiAgKiB0aGF0IHN5bmMoKSB3aWxsIGNhbGwgdGhlIGZpbGVzeXN0ZW0ncyB3cml0ZV9zdXBlciBjYWxsYmFjayBpZgotICogYXBwcm9wcmlhdGUuIAorICogYXBwcm9wcmlhdGUuCiAgKi8KIGludCBfX2V4dDNfam91cm5hbF9zdG9wKGNvbnN0IGNoYXIgKndoZXJlLCBoYW5kbGVfdCAqaGFuZGxlKQogewpAQCAtMTU5LDIwICsxNTksMjEgQEAKIAlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybjsKIAotCWlmICh0ZXN0X29wdCAoc2IsIEVSUk9SU19STykpIHsKLQkJcHJpbnRrIChLRVJOX0NSSVQgIlJlbW91bnRpbmcgZmlsZXN5c3RlbSByZWFkLW9ubHlcbiIpOwotCQlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JfSBlbHNlIHsKKwlpZiAoIXRlc3Rfb3B0IChzYiwgRVJST1JTX0NPTlQpKSB7CiAJCWpvdXJuYWxfdCAqam91cm5hbCA9IEVYVDNfU0Ioc2IpLT5zX2pvdXJuYWw7CiAKIAkJRVhUM19TQihzYiktPnNfbW91bnRfb3B0IHw9IEVYVDNfTU9VTlRfQUJPUlQ7CiAJCWlmIChqb3VybmFsKQogCQkJam91cm5hbF9hYm9ydChqb3VybmFsLCAtRUlPKTsKIAl9CisJaWYgKHRlc3Rfb3B0IChzYiwgRVJST1JTX1JPKSkgeworCQlwcmludGsgKEtFUk5fQ1JJVCAiUmVtb3VudGluZyBmaWxlc3lzdGVtIHJlYWQtb25seVxuIik7CisJCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKKwl9CisJZXh0M19jb21taXRfc3VwZXIoc2IsIGVzLCAxKTsKIAlpZiAodGVzdF9vcHQoc2IsIEVSUk9SU19QQU5JQykpCiAJCXBhbmljKCJFWFQzLWZzIChkZXZpY2UgJXMpOiBwYW5pYyBmb3JjZWQgYWZ0ZXIgZXJyb3JcbiIsCiAJCQlzYi0+c19pZCk7Ci0JZXh0M19jb21taXRfc3VwZXIoc2IsIGVzLCAxKTsKIH0KIAogdm9pZCBleHQzX2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBzYiwgY29uc3QgY2hhciAqIGZ1bmN0aW9uLApAQCAtMzY5LDE2ICszNzAsMTYgQEAKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpsOwogCi0JcHJpbnRrKEtFUk5fRVJSICJzYiBvcnBoYW4gaGVhZCBpcyAlZFxuIiwgCisJcHJpbnRrKEtFUk5fRVJSICJzYiBvcnBoYW4gaGVhZCBpcyAlZFxuIiwKIAkgICAgICAgbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2xhc3Rfb3JwaGFuKSk7CiAKIAlwcmludGsoS0VSTl9FUlIgInNiX2luZm8gb3JwaGFuIGxpc3Q6XG4iKTsKIAlsaXN0X2Zvcl9lYWNoKGwsICZzYmktPnNfb3JwaGFuKSB7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvcnBoYW5fbGlzdF9lbnRyeShsKTsKIAkJcHJpbnRrKEtFUk5fRVJSICIgICIKLQkJICAgICAgICJpbm9kZSAlczolbGQgYXQgJXA6IG1vZGUgJW8sIG5saW5rICVkLCBuZXh0ICVkXG4iLAorCQkgICAgICAgImlub2RlICVzOiVsdSBhdCAlcDogbW9kZSAlbywgbmxpbmsgJWQsIG5leHQgJWRcbiIsCiAJCSAgICAgICBpbm9kZS0+aV9zYi0+c19pZCwgaW5vZGUtPmlfaW5vLCBpbm9kZSwKLQkJICAgICAgIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX25saW5rLCAKKwkJICAgICAgIGlub2RlLT5pX21vZGUsIGlub2RlLT5pX25saW5rLAogCQkgICAgICAgTkVYVF9PUlBIQU4oaW5vZGUpKTsKIAl9CiB9CkBAIC00NzUsNyArNDc2LDcgQEAKIAkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKIAl9CiB9Ci0gCisKIHN0YXRpYyBpbnQgaW5pdF9pbm9kZWNhY2hlKHZvaWQpCiB7CiAJZXh0M19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgiZXh0M19pbm9kZV9jYWNoZSIsCkBAIC00OTAsOCArNDkxLDcgQEAKIAogc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShleHQzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gImV4dDNfaW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZXh0M19pbm9kZV9jYWNoZXApOwogfQogCiBzdGF0aWMgdm9pZCBleHQzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCkBAIC03MzMsOCArNzMzLDggQEAKIAogc3RhdGljIGV4dDNfZnNibGtfdCBnZXRfc2JfYmxvY2sodm9pZCAqKmRhdGEpCiB7Ci0JZXh0M19mc2Jsa190IAlzYl9ibG9jazsKLQljaGFyIAkJKm9wdGlvbnMgPSAoY2hhciAqKSAqZGF0YTsKKwlleHQzX2ZzYmxrX3QJc2JfYmxvY2s7CisJY2hhcgkJKm9wdGlvbnMgPSAoY2hhciAqKSAqZGF0YTsKIAogCWlmICghb3B0aW9ucyB8fCBzdHJuY21wKG9wdGlvbnMsICJzYj0iLCAzKSAhPSAwKQogCQlyZXR1cm4gMTsJLyogRGVmYXVsdCBsb2NhdGlvbiAqLwpAQCAtNzUzLDcgKzc1Myw3IEBACiB9CiAKIHN0YXRpYyBpbnQgcGFyc2Vfb3B0aW9ucyAoY2hhciAqb3B0aW9ucywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCSAgdW5zaWduZWQgbG9uZyAqaW51bSwgdW5zaWduZWQgbG9uZyAqam91cm5hbF9kZXZudW0sCisJCQkgIHVuc2lnbmVkIGludCAqaW51bSwgdW5zaWduZWQgbG9uZyAqam91cm5hbF9kZXZudW0sCiAJCQkgIGV4dDNfZnNibGtfdCAqbl9ibG9ja3NfY291bnQsIGludCBpc19yZW1vdW50KQogewogCXN0cnVjdCBleHQzX3NiX2luZm8gKnNiaSA9IEVYVDNfU0Ioc2IpOwpAQCAtMTE3NCw3ICsxMTc0LDggQEAKIHN0YXRpYyBpbnQgZXh0M19jaGVja19kZXNjcmlwdG9ycyAoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IpCiB7CiAJc3RydWN0IGV4dDNfc2JfaW5mbyAqc2JpID0gRVhUM19TQihzYik7Ci0JZXh0M19mc2Jsa190IGJsb2NrID0gbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2ZpcnN0X2RhdGFfYmxvY2spOworCWV4dDNfZnNibGtfdCBmaXJzdF9ibG9jayA9IGxlMzJfdG9fY3B1KHNiaS0+c19lcy0+c19maXJzdF9kYXRhX2Jsb2NrKTsKKwlleHQzX2ZzYmxrX3QgbGFzdF9ibG9jazsKIAlzdHJ1Y3QgZXh0M19ncm91cF9kZXNjICogZ2RwID0gTlVMTDsKIAlpbnQgZGVzY19ibG9jayA9IDA7CiAJaW50IGk7CkBAIC0xMTgzLDEyICsxMTg0LDE3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgc2JpLT5zX2dyb3Vwc19jb3VudDsgaSsrKQogCXsKKwkJaWYgKGkgPT0gc2JpLT5zX2dyb3Vwc19jb3VudCAtIDEpCisJCQlsYXN0X2Jsb2NrID0gbGUzMl90b19jcHUoc2JpLT5zX2VzLT5zX2Jsb2Nrc19jb3VudCkgLSAxOworCQllbHNlCisJCQlsYXN0X2Jsb2NrID0gZmlyc3RfYmxvY2sgKworCQkJCShFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpIC0gMSk7CisKIAkJaWYgKChpICUgRVhUM19ERVNDX1BFUl9CTE9DSyhzYikpID09IDApCiAJCQlnZHAgPSAoc3RydWN0IGV4dDNfZ3JvdXBfZGVzYyAqKQogCQkJCQlzYmktPnNfZ3JvdXBfZGVzY1tkZXNjX2Jsb2NrKytdLT5iX2RhdGE7Ci0JCWlmIChsZTMyX3RvX2NwdShnZHAtPmJnX2Jsb2NrX2JpdG1hcCkgPCBibG9jayB8fAotCQkgICAgbGUzMl90b19jcHUoZ2RwLT5iZ19ibG9ja19iaXRtYXApID49Ci0JCQkJYmxvY2sgKyBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCQlpZiAobGUzMl90b19jcHUoZ2RwLT5iZ19ibG9ja19iaXRtYXApIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfYmxvY2tfYml0bWFwKSA+IGxhc3RfYmxvY2spCiAJCXsKIAkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19kZXNjcmlwdG9ycyIsCiAJCQkJICAgICJCbG9jayBiaXRtYXAgZm9yIGdyb3VwICVkIgpAQCAtMTE5Nyw5ICsxMjAzLDggQEAKIAkJCQkJbGUzMl90b19jcHUoZ2RwLT5iZ19ibG9ja19iaXRtYXApKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWlmIChsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX2JpdG1hcCkgPCBibG9jayB8fAotCQkgICAgbGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV9iaXRtYXApID49Ci0JCQkJYmxvY2sgKyBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpKQorCQlpZiAobGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV9iaXRtYXApIDwgZmlyc3RfYmxvY2sgfHwKKwkJICAgIGxlMzJfdG9fY3B1KGdkcC0+YmdfaW5vZGVfYml0bWFwKSA+IGxhc3RfYmxvY2spCiAJCXsKIAkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19kZXNjcmlwdG9ycyIsCiAJCQkJICAgICJJbm9kZSBiaXRtYXAgZm9yIGdyb3VwICVkIgpAQCAtMTIwOCw5ICsxMjEzLDkgQEAKIAkJCQkJbGUzMl90b19jcHUoZ2RwLT5iZ19pbm9kZV9iaXRtYXApKTsKIAkJCXJldHVybiAwOwogCQl9Ci0JCWlmIChsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSA8IGJsb2NrIHx8Ci0JCSAgICBsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSArIHNiaS0+c19pdGJfcGVyX2dyb3VwID49Ci0JCSAgICBibG9jayArIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikpCisJCWlmIChsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSA8IGZpcnN0X2Jsb2NrIHx8CisJCSAgICBsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSArIHNiaS0+c19pdGJfcGVyX2dyb3VwID4KKwkJICAgIGxhc3RfYmxvY2spCiAJCXsKIAkJCWV4dDNfZXJyb3IgKHNiLCAiZXh0M19jaGVja19kZXNjcmlwdG9ycyIsCiAJCQkJICAgICJJbm9kZSB0YWJsZSBmb3IgZ3JvdXAgJWQiCkBAIC0xMjE5LDcgKzEyMjQsNyBAQAogCQkJCQlsZTMyX3RvX2NwdShnZHAtPmJnX2lub2RlX3RhYmxlKSk7CiAJCQlyZXR1cm4gMDsKIAkJfQotCQlibG9jayArPSBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpOworCQlmaXJzdF9ibG9jayArPSBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpOwogCQlnZHArKzsKIAl9CiAKQEAgLTEzMDEsMTcgKzEzMDYsMTcgQEAKIAkJRFFVT1RfSU5JVChpbm9kZSk7CiAJCWlmIChpbm9kZS0+aV9ubGluaykgewogCQkJcHJpbnRrKEtFUk5fREVCVUcKLQkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWxkIHRvICVMZCBieXRlc1xuIiwKKwkJCQkiJXM6IHRydW5jYXRpbmcgaW5vZGUgJWx1IHRvICVMZCBieXRlc1xuIiwKIAkJCQlfX0ZVTkNUSU9OX18sIGlub2RlLT5pX2lubywgaW5vZGUtPmlfc2l6ZSk7Ci0JCQlqYmRfZGVidWcoMiwgInRydW5jYXRpbmcgaW5vZGUgJWxkIHRvICVMZCBieXRlc1xuIiwKKwkJCWpiZF9kZWJ1ZygyLCAidHJ1bmNhdGluZyBpbm9kZSAlbHUgdG8gJUxkIGJ5dGVzXG4iLAogCQkJCSAgaW5vZGUtPmlfaW5vLCBpbm9kZS0+aV9zaXplKTsKIAkJCWV4dDNfdHJ1bmNhdGUoaW5vZGUpOwogCQkJbnJfdHJ1bmNhdGVzKys7CiAJCX0gZWxzZSB7CiAJCQlwcmludGsoS0VSTl9ERUJVRwotCQkJCSIlczogZGVsZXRpbmcgdW5yZWZlcmVuY2VkIGlub2RlICVsZFxuIiwKKwkJCQkiJXM6IGRlbGV0aW5nIHVucmVmZXJlbmNlZCBpbm9kZSAlbHVcbiIsCiAJCQkJX19GVU5DVElPTl9fLCBpbm9kZS0+aV9pbm8pOwotCQkJamJkX2RlYnVnKDIsICJkZWxldGluZyB1bnJlZmVyZW5jZWQgaW5vZGUgJWxkXG4iLAorCQkJamJkX2RlYnVnKDIsICJkZWxldGluZyB1bnJlZmVyZW5jZWQgaW5vZGUgJWx1XG4iLAogCQkJCSAgaW5vZGUtPmlfaW5vKTsKIAkJCW5yX29ycGhhbnMrKzsKIAkJfQpAQCAtMTM5MCw3ICsxMzk1LDcgQEAKIAlleHQzX2ZzYmxrX3Qgc2JfYmxvY2sgPSBnZXRfc2JfYmxvY2soJmRhdGEpOwogCWV4dDNfZnNibGtfdCBsb2dpY19zYl9ibG9jazsKIAl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBqb3VybmFsX2ludW0gPSAwOworCXVuc2lnbmVkIGludCBqb3VybmFsX2ludW0gPSAwOwogCXVuc2lnbmVkIGxvbmcgam91cm5hbF9kZXZudW0gPSAwOwogCXVuc2lnbmVkIGxvbmcgZGVmX21vdW50X29wdHM7CiAJc3RydWN0IGlub2RlICpyb290OwpAQCAtMTQwMSwxMSArMTQwNiwxMCBAQAogCWludCBuZWVkc19yZWNvdmVyeTsKIAlfX2xlMzIgZmVhdHVyZXM7CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzYi0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZigqc2JpKSk7CiAJc2JpLT5zX21vdW50X29wdCA9IDA7CiAJc2JpLT5zX3Jlc3VpZCA9IEVYVDNfREVGX1JFU1VJRDsKIAlzYmktPnNfcmVzZ2lkID0gRVhUM19ERUZfUkVTR0lEOwpAQCAtMTQ4Myw3ICsxNDg3LDcgQEAKIAkgICAgKEVYVDNfSEFTX0NPTVBBVF9GRUFUVVJFKHNiLCB+MFUpIHx8CiAJICAgICBFWFQzX0hBU19ST19DT01QQVRfRkVBVFVSRShzYiwgfjBVKSB8fAogCSAgICAgRVhUM19IQVNfSU5DT01QQVRfRkVBVFVSRShzYiwgfjBVKSkpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgCisJCXByaW50ayhLRVJOX1dBUk5JTkcKIAkJICAgICAgICJFWFQzLWZzIHdhcm5pbmc6IGZlYXR1cmUgZmxhZ3Mgc2V0IG9uIHJldiAwIGZzLCAiCiAJCSAgICAgICAicnVubmluZyBlMmZzY2sgaXMgcmVjb21tZW5kZWRcbiIpOwogCS8qCkBAIC0xNTA5LDcgKzE1MTMsNyBAQAogCiAJaWYgKGJsb2Nrc2l6ZSA8IEVYVDNfTUlOX0JMT0NLX1NJWkUgfHwKIAkgICAgYmxvY2tzaXplID4gRVhUM19NQVhfQkxPQ0tfU0laRSkgewotCQlwcmludGsoS0VSTl9FUlIgCisJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgIkVYVDMtZnM6IFVuc3VwcG9ydGVkIGZpbGVzeXN0ZW0gYmxvY2tzaXplICVkIG9uICVzLlxuIiwKIAkJICAgICAgIGJsb2Nrc2l6ZSwgc2ItPnNfaWQpOwogCQlnb3RvIGZhaWxlZF9tb3VudDsKQEAgLTE1MzMsMTQgKzE1MzcsMTQgQEAKIAkJb2Zmc2V0ID0gKHNiX2Jsb2NrICogRVhUM19NSU5fQkxPQ0tfU0laRSkgJSBibG9ja3NpemU7CiAJCWJoID0gc2JfYnJlYWQoc2IsIGxvZ2ljX3NiX2Jsb2NrKTsKIAkJaWYgKCFiaCkgewotCQkJcHJpbnRrKEtFUk5fRVJSIAorCQkJcHJpbnRrKEtFUk5fRVJSCiAJCQkgICAgICAgIkVYVDMtZnM6IENhbid0IHJlYWQgc3VwZXJibG9jayBvbiAybmQgdHJ5LlxuIik7CiAJCQlnb3RvIGZhaWxlZF9tb3VudDsKIAkJfQogCQllcyA9IChzdHJ1Y3QgZXh0M19zdXBlcl9ibG9jayAqKSgoKGNoYXIgKiliaC0+Yl9kYXRhKSArIG9mZnNldCk7CiAJCXNiaS0+c19lcyA9IGVzOwogCQlpZiAoZXMtPnNfbWFnaWMgIT0gY3B1X3RvX2xlMTYoRVhUM19TVVBFUl9NQUdJQykpIHsKLQkJCXByaW50ayAoS0VSTl9FUlIgCisJCQlwcmludGsgKEtFUk5fRVJSCiAJCQkJIkVYVDMtZnM6IE1hZ2ljIG1pc21hdGNoLCB2ZXJ5IHdlaXJkICFcbiIpOwogCQkJZ290byBmYWlsZWRfbW91bnQ7CiAJCX0KQEAgLTE2MjIsMTAgKzE2MjYsOSBAQAogCiAJaWYgKEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgPT0gMCkKIAkJZ290byBjYW50ZmluZF9leHQzOwotCXNiaS0+c19ncm91cHNfY291bnQgPSAobGUzMl90b19jcHUoZXMtPnNfYmxvY2tzX2NvdW50KSAtCi0JCQkgICAgICAgbGUzMl90b19jcHUoZXMtPnNfZmlyc3RfZGF0YV9ibG9jaykgKwotCQkJICAgICAgIEVYVDNfQkxPQ0tTX1BFUl9HUk9VUChzYikgLSAxKSAvCi0JCQkgICAgICBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpOworCXNiaS0+c19ncm91cHNfY291bnQgPSAoKGxlMzJfdG9fY3B1KGVzLT5zX2Jsb2Nrc19jb3VudCkgLQorCQkJICAgICAgIGxlMzJfdG9fY3B1KGVzLT5zX2ZpcnN0X2RhdGFfYmxvY2spIC0gMSkKKwkJCQkgICAgICAgLyBFWFQzX0JMT0NLU19QRVJfR1JPVVAoc2IpKSArIDE7CiAJZGJfY291bnQgPSAoc2JpLT5zX2dyb3Vwc19jb3VudCArIEVYVDNfREVTQ19QRVJfQkxPQ0soc2IpIC0gMSkgLwogCQkgICBFWFQzX0RFU0NfUEVSX0JMT0NLKHNiKTsKIAlzYmktPnNfZ3JvdXBfZGVzYyA9IGttYWxsb2MoZGJfY291bnQgKiBzaXplb2YgKHN0cnVjdCBidWZmZXJfaGVhZCAqKSwKQEAgLTE4MjAsNyArMTgyMyw3IEBACiAvKgogICogU2V0dXAgYW55IHBlci1mcyBqb3VybmFsIHBhcmFtZXRlcnMgbm93LiAgV2UnbGwgZG8gdGhpcyBib3RoIG9uCiAgKiBpbml0aWFsIG1vdW50LCBvbmNlIHRoZSBqb3VybmFsIGhhcyBiZWVuIGluaXRpYWxpc2VkIGJ1dCBiZWZvcmUgd2UndmUKLSAqIGRvbmUgYW55IHJlY292ZXJ5OyBhbmQgYWdhaW4gb24gYW55IHN1YnNlcXVlbnQgcmVtb3VudC4gCisgKiBkb25lIGFueSByZWNvdmVyeTsgYW5kIGFnYWluIG9uIGFueSBzdWJzZXF1ZW50IHJlbW91bnQuCiAgKi8KIHN0YXRpYyB2b2lkIGV4dDNfaW5pdF9qb3VybmFsX3BhcmFtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBqb3VybmFsX3QgKmpvdXJuYWwpCiB7CkBAIC0xODQwLDcgKzE4NDMsOCBAQAogCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogfQogCi1zdGF0aWMgam91cm5hbF90ICpleHQzX2dldF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBqb3VybmFsX2ludW0pCitzdGF0aWMgam91cm5hbF90ICpleHQzX2dldF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkJICAgdW5zaWduZWQgaW50IGpvdXJuYWxfaW51bSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmpvdXJuYWxfaW5vZGU7CiAJam91cm5hbF90ICpqb3VybmFsOwpAQCAtMTk3NSw3ICsxOTc5LDcgQEAKIAkJCSAgICAgdW5zaWduZWQgbG9uZyBqb3VybmFsX2Rldm51bSkKIHsKIAlqb3VybmFsX3QgKmpvdXJuYWw7Ci0JaW50IGpvdXJuYWxfaW51bSA9IGxlMzJfdG9fY3B1KGVzLT5zX2pvdXJuYWxfaW51bSk7CisJdW5zaWduZWQgaW50IGpvdXJuYWxfaW51bSA9IGxlMzJfdG9fY3B1KGVzLT5zX2pvdXJuYWxfaW51bSk7CiAJZGV2X3Qgam91cm5hbF9kZXY7CiAJaW50IGVyciA9IDA7CiAJaW50IHJlYWxseV9yZWFkX29ubHk7CkBAIC0yMDYxLDcgKzIwNjUsNyBAQAogCiBzdGF0aWMgaW50IGV4dDNfY3JlYXRlX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICogc2IsCiAJCQkgICAgICAgc3RydWN0IGV4dDNfc3VwZXJfYmxvY2sgKiBlcywKLQkJCSAgICAgICBpbnQgam91cm5hbF9pbnVtKQorCQkJICAgICAgIHVuc2lnbmVkIGludCBqb3VybmFsX2ludW0pCiB7CiAJam91cm5hbF90ICpqb3VybmFsOwogCkBAIC0yMDc0LDcgKzIwNzgsNyBAQAogCWlmICghKGpvdXJuYWwgPSBleHQzX2dldF9qb3VybmFsKHNiLCBqb3VybmFsX2ludW0pKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlwcmludGsoS0VSTl9JTkZPICJFWFQzLWZzOiBjcmVhdGluZyBuZXcgam91cm5hbCBvbiBpbm9kZSAlZFxuIiwKKwlwcmludGsoS0VSTl9JTkZPICJFWFQzLWZzOiBjcmVhdGluZyBuZXcgam91cm5hbCBvbiBpbm9kZSAldVxuIiwKIAkgICAgICAgam91cm5hbF9pbnVtKTsKIAogCWlmIChqb3VybmFsX2NyZWF0ZShqb3VybmFsKSkgewpAQCAtMjM0MiwxMCArMjM0Niw4IEBACiAJCQkgKi8KIAkJCWV4dDNfY2xlYXJfam91cm5hbF9lcnIoc2IsIGVzKTsKIAkJCXNiaS0+c19tb3VudF9zdGF0ZSA9IGxlMTZfdG9fY3B1KGVzLT5zX3N0YXRlKTsKLQkJCWlmICgocmV0ID0gZXh0M19ncm91cF9leHRlbmQoc2IsIGVzLCBuX2Jsb2Nrc19jb3VudCkpKSB7Ci0JCQkJZXJyID0gcmV0OworCQkJaWYgKChlcnIgPSBleHQzX2dyb3VwX2V4dGVuZChzYiwgZXMsIG5fYmxvY2tzX2NvdW50KSkpCiAJCQkJZ290byByZXN0b3JlX29wdHM7Ci0JCQl9CiAJCQlpZiAoIWV4dDNfc2V0dXBfc3VwZXIgKHNiLCBlcywgMCkpCiAJCQkJc2ItPnNfZmxhZ3MgJj0gfk1TX1JET05MWTsKIAkJfQpAQCAtMjczNCw3ICsyNzM2LDcgQEAKIG91dDoKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKIG91dDE6Ci0gCWV4aXRfZXh0M194YXR0cigpOworCWV4aXRfZXh0M194YXR0cigpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2V4dDMveGF0dHIuYyBiL2ZzL2V4dDMveGF0dHIuYwppbmRleCBhNDRhMDU2Li5mODZmMjQ4IDEwMDY0NAotLS0gYS9mcy9leHQzL3hhdHRyLmMKKysrIGIvZnMvZXh0My94YXR0ci5jCkBAIC03NSw3ICs3NSw3IEBACiAKICNpZmRlZiBFWFQzX1hBVFRSX0RFQlVHCiAjIGRlZmluZSBlYV9pZGVidWcoaW5vZGUsIGYuLi4pIGRvIHsgXAotCQlwcmludGsoS0VSTl9ERUJVRyAiaW5vZGUgJXM6JWxkOiAiLCBcCisJCXByaW50ayhLRVJOX0RFQlVHICJpbm9kZSAlczolbHU6ICIsIFwKIAkJCWlub2RlLT5pX3NiLT5zX2lkLCBpbm9kZS0+aV9pbm8pOyBcCiAJCXByaW50ayhmKTsgXAogCQlwcmludGsoIlxuIik7IFwKQEAgLTIzMyw3ICsyMzMsNyBAQAogCQlhdG9taWNfcmVhZCgmKGJoLT5iX2NvdW50KSksIGxlMzJfdG9fY3B1KEJIRFIoYmgpLT5oX3JlZmNvdW50KSk7CiAJaWYgKGV4dDNfeGF0dHJfY2hlY2tfYmxvY2soYmgpKSB7CiBiYWRfYmxvY2s6CWV4dDNfZXJyb3IoaW5vZGUtPmlfc2IsIF9fRlVOQ1RJT05fXywKLQkJCSAgICJpbm9kZSAlbGQ6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAorCQkJICAgImlub2RlICVsdTogYmFkIGJsb2NrICJFM0ZTQkxLLCBpbm9kZS0+aV9pbm8sCiAJCQkgICBFWFQzX0koaW5vZGUpLT5pX2ZpbGVfYWNsKTsKIAkJZXJyb3IgPSAtRUlPOwogCQlnb3RvIGNsZWFudXA7CkBAIC0zNzUsNyArMzc1LDcgQEAKIAkJYXRvbWljX3JlYWQoJihiaC0+Yl9jb3VudCkpLCBsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkpOwogCWlmIChleHQzX3hhdHRyX2NoZWNrX2Jsb2NrKGJoKSkgewogCQlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCBfX0ZVTkNUSU9OX18sCi0JCQkgICAiaW5vZGUgJWxkOiBiYWQgYmxvY2sgIkUzRlNCTEssIGlub2RlLT5pX2lubywKKwkJCSAgICJpbm9kZSAlbHU6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAogCQkJICAgRVhUM19JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWVycm9yID0gLUVJTzsKIAkJZ290byBjbGVhbnVwOwpAQCAtNjQ3LDcgKzY0Nyw3IEBACiAJCQlsZTMyX3RvX2NwdShCSERSKGJzLT5iaCktPmhfcmVmY291bnQpKTsKIAkJaWYgKGV4dDNfeGF0dHJfY2hlY2tfYmxvY2soYnMtPmJoKSkgewogCQkJZXh0M19lcnJvcihzYiwgX19GVU5DVElPTl9fLAotCQkJCSJpbm9kZSAlbGQ6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAorCQkJCSJpbm9kZSAlbHU6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAogCQkJCUVYVDNfSShpbm9kZSktPmlfZmlsZV9hY2wpOwogCQkJZXJyb3IgPSAtRUlPOwogCQkJZ290byBjbGVhbnVwOwpAQCAtODQ4LDcgKzg0OCw3IEBACiAKIGJhZF9ibG9jazoKIAlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCBfX0ZVTkNUSU9OX18sCi0JCSAgICJpbm9kZSAlbGQ6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAorCQkgICAiaW5vZGUgJWx1OiBiYWQgYmxvY2sgIkUzRlNCTEssIGlub2RlLT5pX2lubywKIAkJICAgRVhUM19JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJZ290byBjbGVhbnVwOwogCkBAIC0xMDc3LDE0ICsxMDc3LDE0IEBACiAJYmggPSBzYl9icmVhZChpbm9kZS0+aV9zYiwgRVhUM19JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJaWYgKCFiaCkgewogCQlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCBfX0ZVTkNUSU9OX18sCi0JCQkiaW5vZGUgJWxkOiBibG9jayAiRTNGU0JMSyIgcmVhZCBlcnJvciIsIGlub2RlLT5pX2lubywKKwkJCSJpbm9kZSAlbHU6IGJsb2NrICJFM0ZTQkxLIiByZWFkIGVycm9yIiwgaW5vZGUtPmlfaW5vLAogCQkJRVhUM19JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CiAJaWYgKEJIRFIoYmgpLT5oX21hZ2ljICE9IGNwdV90b19sZTMyKEVYVDNfWEFUVFJfTUFHSUMpIHx8CiAJICAgIEJIRFIoYmgpLT5oX2Jsb2NrcyAhPSBjcHVfdG9fbGUzMigxKSkgewogCQlleHQzX2Vycm9yKGlub2RlLT5pX3NiLCBfX0ZVTkNUSU9OX18sCi0JCQkiaW5vZGUgJWxkOiBiYWQgYmxvY2sgIkUzRlNCTEssIGlub2RlLT5pX2lubywKKwkJCSJpbm9kZSAlbHU6IGJhZCBibG9jayAiRTNGU0JMSywgaW5vZGUtPmlfaW5vLAogCQkJRVhUM19JKGlub2RlKS0+aV9maWxlX2FjbCk7CiAJCWdvdG8gY2xlYW51cDsKIAl9CkBAIC0xMjExLDcgKzEyMTEsNyBAQAogCQliaCA9IHNiX2JyZWFkKGlub2RlLT5pX3NiLCBjZS0+ZV9ibG9jayk7CiAJCWlmICghYmgpIHsKIAkJCWV4dDNfZXJyb3IoaW5vZGUtPmlfc2IsIF9fRlVOQ1RJT05fXywKLQkJCQkiaW5vZGUgJWxkOiBibG9jayAlbHUgcmVhZCBlcnJvciIsCisJCQkJImlub2RlICVsdTogYmxvY2sgJWx1IHJlYWQgZXJyb3IiLAogCQkJCWlub2RlLT5pX2lubywgKHVuc2lnbmVkIGxvbmcpIGNlLT5lX2Jsb2NrKTsKIAkJfSBlbHNlIGlmIChsZTMyX3RvX2NwdShCSERSKGJoKS0+aF9yZWZjb3VudCkgPj0KIAkJCQlFWFQzX1hBVFRSX1JFRkNPVU5UX01BWCkgewpkaWZmIC0tZ2l0IGEvZnMvZmF0L2NhY2hlLmMgYi9mcy9mYXQvY2FjaGUuYwppbmRleCA5N2I5NjdiLi44MmNjNGY1OSAxMDA2NDQKLS0tIGEvZnMvZmF0L2NhY2hlLmMKKysrIGIvZnMvZmF0L2NhY2hlLmMKQEAgLTU4LDggKzU4LDcgQEAKIAogdm9pZCBmYXRfY2FjaGVfZGVzdHJveSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3koZmF0X2NhY2hlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gImZhdF9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShmYXRfY2FjaGVfY2FjaGVwKTsKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgZmF0X2NhY2hlICpmYXRfY2FjaGVfYWxsb2Moc3RydWN0IGlub2RlICppbm9kZSkKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9kaXIuYyBiL2ZzL2ZhdC9kaXIuYwppbmRleCA2OThiODViLi4zZTUwYTQxIDEwMDY0NAotLS0gYS9mcy9mYXQvZGlyLmMKKysrIGIvZnMvZmF0L2Rpci5jCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSA8bGludXgvZGlyZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0YXRpYyBpbmxpbmUgbG9mZl90IGZhdF9tYWtlX2lfcG9zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCkBAIC03NDEsMTAgKzc0Miw2NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisjZGVmaW5lCVZGQVRfSU9DVExfUkVBRERJUl9CT1RIMzIJX0lPUigncicsIDEsIHN0cnVjdCBjb21wYXRfZGlyZW50WzJdKQorI2RlZmluZQlWRkFUX0lPQ1RMX1JFQURESVJfU0hPUlQzMglfSU9SKCdyJywgMiwgc3RydWN0IGNvbXBhdF9kaXJlbnRbMl0pCisKK3N0YXRpYyBsb25nIGZhdF9jb21wYXRfcHV0X2RpcmVudDMyKHN0cnVjdCBkaXJlbnQgKmQsCisJCQkJICAgIHN0cnVjdCBjb21wYXRfZGlyZW50IF9fdXNlciAqZDMyKQoreworICAgICAgICBpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGQzMiwgc2l6ZW9mKHN0cnVjdCBjb21wYXRfZGlyZW50KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgX19wdXRfdXNlcihkLT5kX2lubywgJmQzMi0+ZF9pbm8pOworICAgICAgICBfX3B1dF91c2VyKGQtPmRfb2ZmLCAmZDMyLT5kX29mZik7CisgICAgICAgIF9fcHV0X3VzZXIoZC0+ZF9yZWNsZW4sICZkMzItPmRfcmVjbGVuKTsKKyAgICAgICAgaWYgKF9fY29weV90b191c2VyKGQzMi0+ZF9uYW1lLCBkLT5kX25hbWUsIGQtPmRfcmVjbGVuKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIGZhdF9jb21wYXRfZGlyX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBjbWQsCisJCQkJIHVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBjb21wYXRfZGlyZW50IF9fdXNlciAqcCA9IGNvbXBhdF9wdHIoYXJnKTsKKwlpbnQgcmV0OworCW1tX3NlZ21lbnRfdCBvbGRmcyA9IGdldF9mcygpOworCXN0cnVjdCBkaXJlbnQgZFsyXTsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBWRkFUX0lPQ1RMX1JFQURESVJfQk9USDMyOgorCQljbWQgPSBWRkFUX0lPQ1RMX1JFQURESVJfQk9USDsKKwkJYnJlYWs7CisJY2FzZSBWRkFUX0lPQ1RMX1JFQURESVJfU0hPUlQzMjoKKwkJY21kID0gVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCX0KKworCXNldF9mcyhLRVJORUxfRFMpOworCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gZmF0X2Rpcl9pb2N0bChmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSwgZmlsZSwKKwkJCSAgICBjbWQsICh1bnNpZ25lZCBsb25nKSAmZCk7CisJdW5sb2NrX2tlcm5lbCgpOworCXNldF9mcyhvbGRmcyk7CisJaWYgKHJldCA+PSAwKSB7CisJCXJldCB8PSBmYXRfY29tcGF0X3B1dF9kaXJlbnQzMigmZFswXSwgcCk7CisJCXJldCB8PSBmYXRfY29tcGF0X3B1dF9kaXJlbnQzMigmZFsxXSwgcCArIDEpOworCX0KKwlyZXR1cm4gcmV0OworfQorI2VuZGlmIC8qIENPTkZJR19DT01QQVQgKi8KKwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmYXRfZGlyX29wZXJhdGlvbnMgPSB7CiAJLnJlYWQJCT0gZ2VuZXJpY19yZWFkX2RpciwKIAkucmVhZGRpcgk9IGZhdF9yZWFkZGlyLAogCS5pb2N0bAkJPSBmYXRfZGlyX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gZmF0X2NvbXBhdF9kaXJfaW9jdGwsCisjZW5kaWYKIAkuZnN5bmMJCT0gZmlsZV9mc3luYywKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL2ZhdC9maWxlLmMgYi9mcy9mYXQvZmlsZS5jCmluZGV4IDFlZTI1MjMuLmY0YjhmOGIgMTAwNjQ0Ci0tLSBhL2ZzL2ZhdC9maWxlLmMKKysrIGIvZnMvZmF0L2ZpbGUuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogaW50IGZhdF9nZW5lcmljX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKQEAgLTExMiwxNSArMTEzLDI0IEBACiAJfQogfQogCitzdGF0aWMgaW50IGZhdF9maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJaWYgKChmaWxwLT5mX21vZGUgJiBGTU9ERV9XUklURSkgJiYKKwkgICAgIE1TRE9TX1NCKGlub2RlLT5pX3NiKS0+b3B0aW9ucy5mbHVzaCkgeworCQlmYXRfZmx1c2hfaW5vZGVzKGlub2RlLT5pX3NiLCBpbm9kZSwgTlVMTCk7CisJCWJsa19jb25nZXN0aW9uX3dhaXQoV1JJVEUsIEhaLzEwKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZmF0X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAotCS5yZWFkdgkJPSBnZW5lcmljX2ZpbGVfcmVhZHYsCi0JLndyaXRldgkJPSBnZW5lcmljX2ZpbGVfd3JpdGV2LAogCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKKwkucmVsZWFzZQk9IGZhdF9maWxlX3JlbGVhc2UsCiAJLmlvY3RsCQk9IGZhdF9nZW5lcmljX2lvY3RsLAogCS5mc3luYwkJPSBmaWxlX2ZzeW5jLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKQEAgLTI4OSw2ICsyOTksNyBAQAogCWxvY2tfa2VybmVsKCk7CiAJZmF0X2ZyZWUoaW5vZGUsIG5yX2NsdXN0ZXJzKTsKIAl1bmxvY2tfa2VybmVsKCk7CisJZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS0+aV9zYiwgaW5vZGUsIE5VTEwpOwogfQogCiBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBmYXRfZmlsZV9pbm9kZV9vcGVyYXRpb25zID0gewpkaWZmIC0tZ2l0IGEvZnMvZmF0L2lub2RlLmMgYi9mcy9mYXQvaW5vZGUuYwppbmRleCAzMWI3MTc0Li4wNDU3MzgwIDEwMDY0NAotLS0gYS9mcy9mYXQvaW5vZGUuYworKysgYi9mcy9mYXQvaW5vZGUuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Zmcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BhcnNlci5oPgogI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2lmbmRlZiBDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUCkBAIC01MCwxNCArNTEsMTQgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IF9fZmF0X2dldF9ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAotCQkJICAgIHVuc2lnbmVkIGxvbmcgKm1heF9ibG9ja3MsCi0JCQkgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCitzdGF0aWMgaW5saW5lIGludCBfX2ZhdF9nZXRfYmxvY2soc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgaWJsb2NrLAorCQkJCSAgdW5zaWduZWQgbG9uZyAqbWF4X2Jsb2NrcywKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmhfcmVzdWx0LCBpbnQgY3JlYXRlKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgbXNkb3Nfc2JfaW5mbyAqc2JpID0gTVNET1NfU0Ioc2IpOwotCXNlY3Rvcl90IHBoeXM7CiAJdW5zaWduZWQgbG9uZyBtYXBwZWRfYmxvY2tzOworCXNlY3Rvcl90IHBoeXM7CiAJaW50IGVyciwgb2Zmc2V0OwogCiAJZXJyID0gZmF0X2JtYXAoaW5vZGUsIGlibG9jaywgJnBoeXMsICZtYXBwZWRfYmxvY2tzKTsKQEAgLTczLDcgKzc0LDcgQEAKIAogCWlmIChpYmxvY2sgIT0gTVNET1NfSShpbm9kZSktPm1tdV9wcml2YXRlID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSB7CiAJCWZhdF9mc19wYW5pYyhzYiwgImNvcnJ1cHRlZCBmaWxlIHNpemUgKGlfcG9zICVsbGQsICVsbGQpIiwKLQkJCSAgICAgTVNET1NfSShpbm9kZSktPmlfcG9zLCBNU0RPU19JKGlub2RlKS0+bW11X3ByaXZhdGUpOworCQkJTVNET1NfSShpbm9kZSktPmlfcG9zLCBNU0RPU19JKGlub2RlKS0+bW11X3ByaXZhdGUpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTkzLDMyICs5NCwyNyBAQAogCWVyciA9IGZhdF9ibWFwKGlub2RlLCBpYmxvY2ssICZwaHlzLCAmbWFwcGVkX2Jsb2Nrcyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKKwogCUJVR19PTighcGh5cyk7CiAJQlVHX09OKCptYXhfYmxvY2tzICE9IG1hcHBlZF9ibG9ja3MpOwogCXNldF9idWZmZXJfbmV3KGJoX3Jlc3VsdCk7CiAJbWFwX2JoKGJoX3Jlc3VsdCwgc2IsIHBoeXMpOwotCXJldHVybiAwOwotfQogCi1zdGF0aWMgaW50IGZhdF9nZXRfYmxvY2tzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKLQkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaF9yZXN1bHQsIGludCBjcmVhdGUpCi17Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwotCWludCBlcnI7Ci0JdW5zaWduZWQgbG9uZyBtYXhfYmxvY2tzID0gYmhfcmVzdWx0LT5iX3NpemUgPj4gaW5vZGUtPmlfYmxrYml0czsKLQotCWVyciA9IF9fZmF0X2dldF9ibG9ja3MoaW5vZGUsIGlibG9jaywgJm1heF9ibG9ja3MsIGJoX3Jlc3VsdCwgY3JlYXRlKTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCWJoX3Jlc3VsdC0+Yl9zaXplID0gbWF4X2Jsb2NrcyA8PCBzYi0+c19ibG9ja3NpemVfYml0czsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBmYXRfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHNlY3Rvcl90IGlibG9jaywKIAkJCSBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX3Jlc3VsdCwgaW50IGNyZWF0ZSkKIHsKLQl1bnNpZ25lZCBsb25nIG1heF9ibG9ja3MgPSAxOwotCXJldHVybiBfX2ZhdF9nZXRfYmxvY2tzKGlub2RlLCBpYmxvY2ssICZtYXhfYmxvY2tzLCBiaF9yZXN1bHQsIGNyZWF0ZSk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXVuc2lnbmVkIGxvbmcgbWF4X2Jsb2NrcyA9IGJoX3Jlc3VsdC0+Yl9zaXplID4+IGlub2RlLT5pX2Jsa2JpdHM7CisJaW50IGVycjsKKworCWVyciA9IF9fZmF0X2dldF9ibG9jayhpbm9kZSwgaWJsb2NrLCAmbWF4X2Jsb2NrcywgYmhfcmVzdWx0LCBjcmVhdGUpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisJYmhfcmVzdWx0LT5iX3NpemUgPSBtYXhfYmxvY2tzIDw8IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGZhdF93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKQpAQCAtMTg4LDcgKzE4NCw3IEBACiAJICogY29uZGl0aW9uIG9mIGZhdF9nZXRfYmxvY2soKSBhbmQgLT50cnVuY2F0ZSgpLgogCSAqLwogCXJldHVybiBibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBpbm9kZS0+aV9zYi0+c19iZGV2LCBpb3YsCi0JCQkJICBvZmZzZXQsIG5yX3NlZ3MsIGZhdF9nZXRfYmxvY2tzLCBOVUxMKTsKKwkJCQkgIG9mZnNldCwgbnJfc2VncywgZmF0X2dldF9ibG9jaywgTlVMTCk7CiB9CiAKIHN0YXRpYyBzZWN0b3JfdCBfZmF0X2JtYXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHNlY3Rvcl90IGJsb2NrKQpAQCAtMzc1LDggKzM3MSw2IEBACiAJCQlpbm9kZS0+aV9mbGFncyB8PSBTX0lNTVVUQUJMRTsKIAl9CiAJTVNET1NfSShpbm9kZSktPmlfYXR0cnMgPSBkZS0+YXR0ciAmIEFUVFJfVU5VU0VEOwotCS8qIHRoaXMgaXMgYXMgY2xvc2UgdG8gdGhlIHRydXRoIGFzIHdlIGNhbiBnZXQgLi4uICovCi0JaW5vZGUtPmlfYmxrc2l6ZSA9IHNiaS0+Y2x1c3Rlcl9zaXplOwogCWlub2RlLT5pX2Jsb2NrcyA9ICgoaW5vZGUtPmlfc2l6ZSArIChzYmktPmNsdXN0ZXJfc2l6ZSAtIDEpKQogCQkJICAgJiB+KChsb2ZmX3Qpc2JpLT5jbHVzdGVyX3NpemUgLSAxKSkgPj4gOTsKIAlpbm9kZS0+aV9tdGltZS50dl9zZWMgPQpAQCAtNTI4LDggKzUyMiw3IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBmYXRfZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShmYXRfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiZmF0X2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KGZhdF9pbm9kZV9jYWNoZXApOwogfQogCiBzdGF0aWMgaW50IGZhdF9yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCkBAIC04NjEsNyArODU0LDcgQEAKIAlPcHRfY2hhcnNldCwgT3B0X3Nob3J0bmFtZV9sb3dlciwgT3B0X3Nob3J0bmFtZV93aW45NSwKIAlPcHRfc2hvcnRuYW1lX3dpbm50LCBPcHRfc2hvcnRuYW1lX21peGVkLCBPcHRfdXRmOF9ubywgT3B0X3V0ZjhfeWVzLAogCU9wdF91bmlfeGxfbm8sIE9wdF91bmlfeGxfeWVzLCBPcHRfbm9udW10YWlsX25vLCBPcHRfbm9udW10YWlsX3llcywKLQlPcHRfb2Jzb2xhdGUsIE9wdF9lcnIsCisJT3B0X29ic29sYXRlLCBPcHRfZmx1c2gsIE9wdF9lcnIsCiB9OwogCiBzdGF0aWMgbWF0Y2hfdGFibGVfdCBmYXRfdG9rZW5zID0gewpAQCAtODkzLDcgKzg4Niw4IEBACiAJe09wdF9vYnNvbGF0ZSwgImN2Zl9mb3JtYXQ9JTIwcyJ9LAogCXtPcHRfb2Jzb2xhdGUsICJjdmZfb3B0aW9ucz0lMTAwcyJ9LAogCXtPcHRfb2Jzb2xhdGUsICJwb3NpeCJ9LAotCXtPcHRfZXJyLCBOVUxMfQorCXtPcHRfZmx1c2gsICJmbHVzaCJ9LAorCXtPcHRfZXJyLCBOVUxMfSwKIH07CiBzdGF0aWMgbWF0Y2hfdGFibGVfdCBtc2Rvc190b2tlbnMgPSB7CiAJe09wdF9ub2RvdHMsICJub2RvdHMifSwKQEAgLTEwMzQsNiArMTAyOCw5IEBACiAJCQkJcmV0dXJuIDA7CiAJCQlvcHRzLT5jb2RlcGFnZSA9IG9wdGlvbjsKIAkJCWJyZWFrOworCQljYXNlIE9wdF9mbHVzaDoKKwkJCW9wdHMtPmZsdXNoID0gMTsKKwkJCWJyZWFrOwogCiAJCS8qIG1zZG9zIHNwZWNpZmljICovCiAJCWNhc2UgT3B0X2RvdHM6CkBAIC0xMTM3LDcgKzExMzQsNiBAQAogCQlNU0RPU19JKGlub2RlKS0+aV9zdGFydCA9IDA7CiAJCWlub2RlLT5pX3NpemUgPSBzYmktPmRpcl9lbnRyaWVzICogc2l6ZW9mKHN0cnVjdCBtc2Rvc19kaXJfZW50cnkpOwogCX0KLQlpbm9kZS0+aV9ibGtzaXplID0gc2JpLT5jbHVzdGVyX3NpemU7CiAJaW5vZGUtPmlfYmxvY2tzID0gKChpbm9kZS0+aV9zaXplICsgKHNiaS0+Y2x1c3Rlcl9zaXplIC0gMSkpCiAJCQkgICAmIH4oKGxvZmZfdClzYmktPmNsdXN0ZXJfc2l6ZSAtIDEpKSA+PiA5OwogCU1TRE9TX0koaW5vZGUpLT5pX2xvZ3N0YXJ0ID0gMDsKQEAgLTExNjgsMTEgKzExNjQsMTAgQEAKIAlsb25nIGVycm9yOwogCWNoYXIgYnVmWzUwXTsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtc2Rvc19zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1zZG9zX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJc2ItPnNfZnNfaW5mbyA9IHNiaTsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2Yoc3RydWN0IG1zZG9zX3NiX2luZm8pKTsKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX05PRElSQVRJTUU7CiAJc2ItPnNfbWFnaWMgPSBNU0RPU19TVVBFUl9NQUdJQzsKQEAgLTE0MzUsNiArMTQzMCw1NiBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChmYXRfZmlsbF9zdXBlcik7CiAKKy8qCisgKiBoZWxwZXIgZnVuY3Rpb24gZm9yIGZhdF9mbHVzaF9pbm9kZXMuICBUaGlzIHdyaXRlcyBib3RoIHRoZSBpbm9kZQorICogYW5kIHRoZSBmaWxlIGRhdGEgYmxvY2tzLCB3YWl0aW5nIGZvciBpbiBmbGlnaHQgZGF0YSBibG9ja3MgYmVmb3JlCisgKiB0aGUgc3RhcnQgb2YgdGhlIGNhbGwuICBJdCBkb2VzIG5vdCB3YWl0IGZvciBhbnkgaW8gc3RhcnRlZAorICogZHVyaW5nIHRoZSBjYWxsCisgKi8KK3N0YXRpYyBpbnQgd3JpdGViYWNrX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisKKwlpbnQgcmV0OworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gaW5vZGUtPmlfbWFwcGluZzsKKwlzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgd2JjID0geworCSAgICAgICAuc3luY19tb2RlID0gV0JfU1lOQ19OT05FLAorCSAgICAgIC5ucl90b193cml0ZSA9IDAsCisJfTsKKwkvKiBpZiB3ZSB1c2VkIFdCX1NZTkNfQUxMLCBzeW5jX2lub2RlIHdhaXRzIGZvciB0aGUgaW8gZm9yIHRoZQorCSogaW5vZGUgdG8gZmluaXNoLiAgU28gV0JfU1lOQ19OT05FIGlzIHNlbnQgZG93biB0byBzeW5jX2lub2RlCisJKiBhbmQgZmlsZW1hcF9mZGF0YXdyaXRlIGlzIHVzZWQgZm9yIHRoZSBkYXRhIGJsb2NrcworCSovCisJcmV0ID0gc3luY19pbm9kZShpbm9kZSwgJndiYyk7CisJaWYgKCFyZXQpCisJICAgICAgIHJldCA9IGZpbGVtYXBfZmRhdGF3cml0ZShtYXBwaW5nKTsKKwlyZXR1cm4gcmV0OworfQorCisvKgorICogd3JpdGUgZGF0YSBhbmQgbWV0YWRhdGEgY29ycmVzcG9uZGluZyB0byBpMSBhbmQgaTIuICBUaGUgaW8gaXMKKyAqIHN0YXJ0ZWQgYnV0IHdlIGRvIG5vdCB3YWl0IGZvciBhbnkgb2YgaXQgdG8gZmluaXNoLgorICoKKyAqIGZpbGVtYXBfZmx1c2ggaXMgdXNlZCBmb3IgdGhlIGJsb2NrIGRldmljZSwgc28gaWYgdGhlcmUgaXMgYSBkaXJ0eQorICogcGFnZSBmb3IgYSBibG9jayBhbHJlYWR5IGluIGZsaWdodCwgd2Ugd2lsbCBub3Qgd2FpdCBhbmQgc3RhcnQgdGhlCisgKiBpbyBvdmVyIGFnYWluCisgKi8KK2ludCBmYXRfZmx1c2hfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaTEsIHN0cnVjdCBpbm9kZSAqaTIpCit7CisJaW50IHJldCA9IDA7CisJaWYgKCFNU0RPU19TQihzYiktPm9wdGlvbnMuZmx1c2gpCisJCXJldHVybiAwOworCWlmIChpMSkKKwkJcmV0ID0gd3JpdGViYWNrX2lub2RlKGkxKTsKKwlpZiAoIXJldCAmJiBpMikKKwkJcmV0ID0gd3JpdGViYWNrX2lub2RlKGkyKTsKKwlpZiAoIXJldCAmJiBzYikgeworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmc7CisJCXJldCA9IGZpbGVtYXBfZmx1c2gobWFwcGluZyk7CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChmYXRfZmx1c2hfaW5vZGVzKTsKKwogc3RhdGljIGludCBfX2luaXQgaW5pdF9mYXRfZnModm9pZCkKIHsKIAlpbnQgZXJyOwpkaWZmIC0tZ2l0IGEvZnMvZmlsZS5jIGIvZnMvZmlsZS5jCmluZGV4IGIzYzZiODIuLjhlODE3NzUgMTAwNjQ0Ci0tLSBhL2ZzL2ZpbGUuYworKysgYi9mcy9maWxlLmMKQEAgLTI4MSw4MCArMjgxLDcwIEBACiBvdXQyOgogCW5mZHMgPSBmZHQtPm1heF9mZHNldDsKIG91dDoKLSAgCWlmIChuZXdfb3BlbnNldCkKLSAgCQlmcmVlX2Zkc2V0KG5ld19vcGVuc2V0LCBuZmRzKTsKLSAgCWlmIChuZXdfZXhlY3NldCkKLSAgCQlmcmVlX2Zkc2V0KG5ld19leGVjc2V0LCBuZmRzKTsKKwlmcmVlX2Zkc2V0KG5ld19vcGVuc2V0LCBuZmRzKTsKKwlmcmVlX2Zkc2V0KG5ld19leGVjc2V0LCBuZmRzKTsKIAlrZnJlZShmZHQpOwogCXJldHVybiBOVUxMOwogfQogCiAvKgotICogRXhwYW5kcyB0aGUgZmlsZSBkZXNjcmlwdG9yIHRhYmxlIC0gaXQgd2lsbCBhbGxvY2F0ZSBhIG5ldyBmZHRhYmxlIGFuZAotICogYm90aCBmZCBhcnJheSBhbmQgZmRzZXQuIEl0IGlzIGV4cGVjdGVkIHRvIGJlIGNhbGxlZCB3aXRoIHRoZQotICogZmlsZXNfbG9jayBoZWxkLgorICogRXhwYW5kIHRoZSBmaWxlIGRlc2NyaXB0b3IgdGFibGUuCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxsb2NhdGUgYSBuZXcgZmR0YWJsZSBhbmQgYm90aCBmZCBhcnJheSBhbmQgZmRzZXQsIG9mCisgKiB0aGUgZ2l2ZW4gc2l6ZS4KKyAqIFJldHVybiA8MCBlcnJvciBjb2RlIG9uIGVycm9yOyAxIG9uIHN1Y2Nlc3NmdWwgY29tcGxldGlvbi4KKyAqIFRoZSBmaWxlcy0+ZmlsZV9sb2NrIHNob3VsZCBiZSBoZWxkIG9uIGVudHJ5LCBhbmQgd2lsbCBiZSBoZWxkIG9uIGV4aXQuCiAgKi8KIHN0YXRpYyBpbnQgZXhwYW5kX2ZkdGFibGUoc3RydWN0IGZpbGVzX3N0cnVjdCAqZmlsZXMsIGludCBucikKIAlfX3JlbGVhc2VzKGZpbGVzLT5maWxlX2xvY2spCiAJX19hY3F1aXJlcyhmaWxlcy0+ZmlsZV9sb2NrKQogewotCWludCBlcnJvciA9IDA7Ci0Jc3RydWN0IGZkdGFibGUgKmZkdDsKLQlzdHJ1Y3QgZmR0YWJsZSAqbmZkdCA9IE5VTEw7CisJc3RydWN0IGZkdGFibGUgKm5ld19mZHQsICpjdXJfZmR0OwogCiAJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwotCW5mZHQgPSBhbGxvY19mZHRhYmxlKG5yKTsKLQlpZiAoIW5mZHQpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlzcGluX2xvY2soJmZpbGVzLT5maWxlX2xvY2spOwotCQlnb3RvIG91dDsKLQl9Ci0KKwluZXdfZmR0ID0gYWxsb2NfZmR0YWJsZShucik7CiAJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKLQlmZHQgPSBmaWxlc19mZHRhYmxlKGZpbGVzKTsKKwlpZiAoIW5ld19mZHQpCisJCXJldHVybiAtRU5PTUVNOwogCS8qCi0JICogQ2hlY2sgYWdhaW4gc2luY2UgYW5vdGhlciB0YXNrIG1heSBoYXZlIGV4cGFuZGVkIHRoZQotCSAqIGZkIHRhYmxlIHdoaWxlIHdlIGRyb3BwZWQgdGhlIGxvY2sKKwkgKiBDaGVjayBhZ2FpbiBzaW5jZSBhbm90aGVyIHRhc2sgbWF5IGhhdmUgZXhwYW5kZWQgdGhlIGZkIHRhYmxlIHdoaWxlCisJICogd2UgZHJvcHBlZCB0aGUgbG9jawogCSAqLwotCWlmIChuciA+PSBmZHQtPm1heF9mZHMgfHwgbnIgPj0gZmR0LT5tYXhfZmRzZXQpIHsKLQkJY29weV9mZHRhYmxlKG5mZHQsIGZkdCk7CisJY3VyX2ZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOworCWlmIChuciA+PSBjdXJfZmR0LT5tYXhfZmRzIHx8IG5yID49IGN1cl9mZHQtPm1heF9mZHNldCkgeworCQkvKiBDb250aW51ZSBhcyBwbGFubmVkICovCisJCWNvcHlfZmR0YWJsZShuZXdfZmR0LCBjdXJfZmR0KTsKKwkJcmN1X2Fzc2lnbl9wb2ludGVyKGZpbGVzLT5mZHQsIG5ld19mZHQpOworCQlmcmVlX2ZkdGFibGUoY3VyX2ZkdCk7CiAJfSBlbHNlIHsKLQkJLyogU29tZWJvZHkgZXhwYW5kZWQgd2hpbGUgd2UgZHJvcHBlZCBmaWxlX2xvY2sgKi8KLQkJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwotCQlfX2ZyZWVfZmR0YWJsZShuZmR0KTsKLQkJc3Bpbl9sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKLQkJZ290byBvdXQ7CisJCS8qIFNvbWVib2R5IGVsc2UgZXhwYW5kZWQsIHNvIHVuZG8gb3VyIGF0dGVtcHQgKi8KKwkJX19mcmVlX2ZkdGFibGUobmV3X2ZkdCk7CiAJfQotCXJjdV9hc3NpZ25fcG9pbnRlcihmaWxlcy0+ZmR0LCBuZmR0KTsKLQlmcmVlX2ZkdGFibGUoZmR0KTsKLW91dDoKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDE7CiB9CiAKIC8qCiAgKiBFeHBhbmQgZmlsZXMuCi0gKiBSZXR1cm4gPDAgb24gZXJyb3I7IDAgbm90aGluZyBkb25lOyAxIGZpbGVzIGV4cGFuZGVkLCB3ZSBtYXkgaGF2ZSBibG9ja2VkLgotICogU2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZSBmaWxlcy0+ZmlsZV9sb2NrIHNwaW5sb2NrIGhlbGQgZm9yIHdyaXRlLgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGV4cGFuZCB0aGUgZmlsZSBzdHJ1Y3R1cmVzLCBpZiB0aGUgcmVxdWVzdGVkIHNpemUgZXhjZWVkcworICogdGhlIGN1cnJlbnQgY2FwYWNpdHkgYW5kIHRoZXJlIGlzIHJvb20gZm9yIGV4cGFuc2lvbi4KKyAqIFJldHVybiA8MCBlcnJvciBjb2RlIG9uIGVycm9yOyAwIHdoZW4gbm90aGluZyBkb25lOyAxIHdoZW4gZmlsZXMgd2VyZQorICogZXhwYW5kZWQgYW5kIGV4ZWN1dGlvbiBtYXkgaGF2ZSBibG9ja2VkLgorICogVGhlIGZpbGVzLT5maWxlX2xvY2sgc2hvdWxkIGJlIGhlbGQgb24gZW50cnksIGFuZCB3aWxsIGJlIGhlbGQgb24gZXhpdC4KICAqLwogaW50IGV4cGFuZF9maWxlcyhzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcywgaW50IG5yKQogewotCWludCBlcnIsIGV4cGFuZCA9IDA7CiAJc3RydWN0IGZkdGFibGUgKmZkdDsKIAogCWZkdCA9IGZpbGVzX2ZkdGFibGUoZmlsZXMpOwotCWlmIChuciA+PSBmZHQtPm1heF9mZHNldCB8fCBuciA+PSBmZHQtPm1heF9mZHMpIHsKLQkJaWYgKGZkdC0+bWF4X2Zkc2V0ID49IE5SX09QRU4gfHwKLQkJCWZkdC0+bWF4X2ZkcyA+PSBOUl9PUEVOIHx8IG5yID49IE5SX09QRU4pIHsKLQkJCWVyciA9IC1FTUZJTEU7Ci0JCQlnb3RvIG91dDsKLQkJfQotCQlleHBhbmQgPSAxOwotCQlpZiAoKGVyciA9IGV4cGFuZF9mZHRhYmxlKGZpbGVzLCBucikpKQotCQkJZ290byBvdXQ7Ci0JfQotCWVyciA9IGV4cGFuZDsKLW91dDoKLQlyZXR1cm4gZXJyOworCS8qIERvIHdlIG5lZWQgdG8gZXhwYW5kPyAqLworCWlmIChuciA8IGZkdC0+bWF4X2Zkc2V0ICYmIG5yIDwgZmR0LT5tYXhfZmRzKQorCQlyZXR1cm4gMDsKKwkvKiBDYW4gd2UgZXhwYW5kPyAqLworCWlmIChmZHQtPm1heF9mZHNldCA+PSBOUl9PUEVOIHx8IGZkdC0+bWF4X2ZkcyA+PSBOUl9PUEVOIHx8CisJICAgIG5yID49IE5SX09QRU4pCisJCXJldHVybiAtRU1GSUxFOworCisJLyogQWxsIGdvb2QsIHNvIHdlIHRyeSAqLworCXJldHVybiBleHBhbmRfZmR0YWJsZShmaWxlcywgbnIpOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmluaXQgZmR0YWJsZV9kZWZlcl9saXN0X2luaXQoaW50IGNwdSkKZGlmZiAtLWdpdCBhL2ZzL2ZpbGVfdGFibGUuYyBiL2ZzL2ZpbGVfdGFibGUuYwppbmRleCAwMTMxYmEwLi5iYzM1YTQwIDEwMDY0NAotLS0gYS9mcy9maWxlX3RhYmxlLmMKKysrIGIvZnMvZmlsZV90YWJsZS5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAlpZiAoZmlsZS0+Zl9vcCAmJiBmaWxlLT5mX29wLT5yZWxlYXNlKQogCQlmaWxlLT5mX29wLT5yZWxlYXNlKGlub2RlLCBmaWxlKTsKIAlzZWN1cml0eV9maWxlX2ZyZWUoZmlsZSk7Ci0JaWYgKHVubGlrZWx5KGlub2RlLT5pX2NkZXYgIT0gTlVMTCkpCisJaWYgKHVubGlrZWx5KFNfSVNDSFIoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfY2RldiAhPSBOVUxMKSkKIAkJY2Rldl9wdXQoaW5vZGUtPmlfY2Rldik7CiAJZm9wc19wdXQoZmlsZS0+Zl9vcCk7CiAJaWYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKQpkaWZmIC0tZ2l0IGEvZnMvZmlsZXN5c3RlbXMuYyBiL2ZzL2ZpbGVzeXN0ZW1zLmMKaW5kZXggOWYxMDcyOC4uZTNmYTc3YyAxMDA2NDQKLS0tIGEvZnMvZmlsZXN5c3RlbXMuYworKysgYi9mcy9maWxlc3lzdGVtcy5jCkBAIC02OSw4ICs2OSw2IEBACiAJaW50IHJlcyA9IDA7CiAJc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiogcDsKIAotCWlmICghZnMpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChmcy0+bmV4dCkKIAkJcmV0dXJuIC1FQlVTWTsKIAlJTklUX0xJU1RfSEVBRCgmZnMtPmZzX3N1cGVycyk7CmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzLmggYi9mcy9mcmVldnhmcy92eGZzLmgKaW5kZXggZDM1OTc5YS4uYzhhOTI2NSAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmcy5oCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnMuaApAQCAtMjUyLDcgKzI1Miw3IEBACiAgKiBHZXQgZmlsZXN5c3RlbSBwcml2YXRlIGRhdGEgZnJvbSBWRlMgaW5vZGUuCiAgKi8KICNkZWZpbmUgVlhGU19JTk8oaXApIFwKLQkoKHN0cnVjdCB2eGZzX2lub2RlX2luZm8gKikoaXApLT51LmdlbmVyaWNfaXApCisJKChzdHJ1Y3Qgdnhmc19pbm9kZV9pbmZvICopKGlwKS0+aV9wcml2YXRlKQogCiAvKgogICogR2V0IGZpbGVzeXN0ZW0gcHJpdmF0ZSBkYXRhIGZyb20gVkZTIHN1cGVyYmxvY2suCmRpZmYgLS1naXQgYS9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMgYi9mcy9mcmVldnhmcy92eGZzX2lub2RlLmMKaW5kZXggY2E2YTM5Ny4uNDc4NmQ1MSAxMDA2NDQKLS0tIGEvZnMvZnJlZXZ4ZnMvdnhmc19pbm9kZS5jCisrKyBiL2ZzL2ZyZWV2eGZzL3Z4ZnNfaW5vZGUuYwpAQCAtMjM5LDExICsyMzksMTAgQEAKIAlpcC0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlpcC0+aV9tdGltZS50dl9uc2VjID0gMDsKIAotCWlwLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CiAJaXAtPmlfYmxvY2tzID0gdmlwLT52aWlfYmxvY2tzOwogCWlwLT5pX2dlbmVyYXRpb24gPSB2aXAtPnZpaV9nZW47CiAKLQlpcC0+dS5nZW5lcmljX2lwID0gKHZvaWQgKil2aXA7CisJaXAtPmlfcHJpdmF0ZSA9IHZpcDsKIAkKIH0KIApAQCAtMzM4LDUgKzMzNyw1IEBACiB2b2lkCiB2eGZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaXApCiB7Ci0Ja21lbV9jYWNoZV9mcmVlKHZ4ZnNfaW5vZGVfY2FjaGVwLCBpcC0+dS5nZW5lcmljX2lwKTsKKwlrbWVtX2NhY2hlX2ZyZWUodnhmc19pbm9kZV9jYWNoZXAsIGlwLT5pX3ByaXZhdGUpOwogfQpkaWZmIC0tZ2l0IGEvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jIGIvZnMvZnJlZXZ4ZnMvdnhmc19zdXBlci5jCmluZGV4IGI3NGI3OTEuLmFjMjhiMDggMTAwNjQ0Ci0tLSBhL2ZzL2ZyZWV2eGZzL3Z4ZnNfc3VwZXIuYworKysgYi9mcy9mcmVldnhmcy92eGZzX3N1cGVyLmMKQEAgLTI2MCwxMiArMjYwLDE3IEBACiBzdGF0aWMgaW50IF9faW5pdAogdnhmc19pbml0KHZvaWQpCiB7CisJaW50IHJ2OworCiAJdnhmc19pbm9kZV9jYWNoZXAgPSBrbWVtX2NhY2hlX2NyZWF0ZSgidnhmc19pbm9kZSIsCiAJCQlzaXplb2Yoc3RydWN0IHZ4ZnNfaW5vZGVfaW5mbyksIDAsIAogCQkJU0xBQl9SRUNMQUlNX0FDQ09VTlR8U0xBQl9NRU1fU1BSRUFELCBOVUxMLCBOVUxMKTsKLQlpZiAodnhmc19pbm9kZV9jYWNoZXApCi0JCXJldHVybiByZWdpc3Rlcl9maWxlc3lzdGVtKCZ2eGZzX2ZzX3R5cGUpOwotCXJldHVybiAtRU5PTUVNOworCWlmICghdnhmc19pbm9kZV9jYWNoZXApCisJCXJldHVybiAtRU5PTUVNOworCXJ2ID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmdnhmc19mc190eXBlKTsKKwlpZiAocnYgPCAwKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3kodnhmc19pbm9kZV9jYWNoZXApOworCXJldHVybiBydjsKIH0KIAogc3RhdGljIHZvaWQgX19leGl0CmRpZmYgLS1naXQgYS9mcy9mcy13cml0ZWJhY2suYyBiL2ZzL2ZzLXdyaXRlYmFjay5jCmluZGV4IDg5MjY0M2QuLmM0MDNiNjYgMTAwNjQ0Ci0tLSBhL2ZzL2ZzLXdyaXRlYmFjay5jCisrKyBiL2ZzL2ZzLXdyaXRlYmFjay5jCkBAIC0yMiw4ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9idWZmZXJfaGVhZC5oPgotCi1leHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpibG9ja2Rldl9zdXBlcmJsb2NrOworI2luY2x1ZGUgImludGVybmFsLmgiCiAKIC8qKgogICoJX19tYXJrX2lub2RlX2RpcnR5IC0JaW50ZXJuYWwgZnVuY3Rpb24KQEAgLTMyMCw3ICszMTksNyBAQAogCiAJCWlmICghYmRpX2NhcF93cml0ZWJhY2tfZGlydHkoYmRpKSkgewogCQkJbGlzdF9tb3ZlKCZpbm9kZS0+aV9saXN0LCAmc2ItPnNfZGlydHkpOwotCQkJaWYgKHNiID09IGJsb2NrZGV2X3N1cGVyYmxvY2spIHsKKwkJCWlmIChzYl9pc19ibGtkZXZfc2Ioc2IpKSB7CiAJCQkJLyoKIAkJCQkgKiBEaXJ0eSBtZW1vcnktYmFja2VkIGJsb2NrZGV2OiB0aGUgcmFtZGlzawogCQkJCSAqIGRyaXZlciBkb2VzIHRoaXMuICBTa2lwIGp1c3QgdGhpcyBpbm9kZQpAQCAtMzM3LDE0ICszMzYsMTQgQEAKIAogCQlpZiAod2JjLT5ub25ibG9ja2luZyAmJiBiZGlfd3JpdGVfY29uZ2VzdGVkKGJkaSkpIHsKIAkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7Ci0JCQlpZiAoc2IgIT0gYmxvY2tkZXZfc3VwZXJibG9jaykKKwkJCWlmICghc2JfaXNfYmxrZGV2X3NiKHNiKSkKIAkJCQlicmVhazsJCS8qIFNraXAgYSBjb25nZXN0ZWQgZnMgKi8KIAkJCWxpc3RfbW92ZSgmaW5vZGUtPmlfbGlzdCwgJnNiLT5zX2RpcnR5KTsKIAkJCWNvbnRpbnVlOwkJLyogU2tpcCBhIGNvbmdlc3RlZCBibG9ja2RldiAqLwogCQl9CiAKIAkJaWYgKHdiYy0+YmRpICYmIGJkaSAhPSB3YmMtPmJkaSkgewotCQkJaWYgKHNiICE9IGJsb2NrZGV2X3N1cGVyYmxvY2spCisJCQlpZiAoIXNiX2lzX2Jsa2Rldl9zYihzYikpCiAJCQkJYnJlYWs7CQkvKiBmcyBoYXMgdGhlIHdyb25nIHF1ZXVlICovCiAJCQlsaXN0X21vdmUoJmlub2RlLT5pX2xpc3QsICZzYi0+c19kaXJ0eSk7CiAJCQljb250aW51ZTsJCS8qIGJsb2NrZGV2IGhhcyB3cm9uZyBxdWV1ZSAqLwpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9jb250cm9sLmMgYi9mcy9mdXNlL2NvbnRyb2wuYwppbmRleCA0NmZlNjBiLi4xNmIzOWMwIDEwMDY0NAotLS0gYS9mcy9mdXNlL2NvbnRyb2wuYworKysgYi9mcy9mdXNlL2NvbnRyb2wuYwpAQCAtMjMsNyArMjMsNyBAQAogewogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjOwogCW11dGV4X2xvY2soJmZ1c2VfbXV0ZXgpOwotCWZjID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlmYyA9IGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGU7CiAJaWYgKGZjKQogCQlmYyA9IGZ1c2VfY29ubl9nZXQoZmMpOwogCW11dGV4X3VubG9jaygmZnVzZV9tdXRleCk7CkBAIC05OCw3ICs5OCw3IEBACiAJCWlub2RlLT5pX29wID0gaW9wOwogCWlub2RlLT5pX2ZvcCA9IGZvcDsKIAlpbm9kZS0+aV9ubGluayA9IG5saW5rOwotCWlub2RlLT51LmdlbmVyaWNfaXAgPSBmYzsKKwlpbm9kZS0+aV9wcml2YXRlID0gZmM7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7CiAJcmV0dXJuIGRlbnRyeTsKIH0KQEAgLTExNiw3ICsxMTYsNyBAQAogCQlyZXR1cm4gMDsKIAogCXBhcmVudCA9IGZ1c2VfY29udHJvbF9zYi0+c19yb290OwotCXBhcmVudC0+ZF9pbm9kZS0+aV9ubGluaysrOworCWluY19ubGluayhwYXJlbnQtPmRfaW5vZGUpOwogCXNwcmludGYobmFtZSwgIiVsbHUiLCAodW5zaWduZWQgbG9uZyBsb25nKSBmYy0+aWQpOwogCXBhcmVudCA9IGZ1c2VfY3RsX2FkZF9kZW50cnkocGFyZW50LCBmYywgbmFtZSwgU19JRkRJUiB8IDA1MDAsIDIsCiAJCQkJICAgICAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zLApAQCAtMTUwLDcgKzE1MCw3IEBACiAKIAlmb3IgKGkgPSBmYy0+Y3RsX25kZW50cyAtIDE7IGkgPj0gMDsgaS0tKSB7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGZjLT5jdGxfZGVudHJ5W2ldOwotCQlkZW50cnktPmRfaW5vZGUtPnUuZ2VuZXJpY19pcCA9IE5VTEw7CisJCWRlbnRyeS0+ZF9pbm9kZS0+aV9wcml2YXRlID0gTlVMTDsKIAkJZF9kcm9wKGRlbnRyeSk7CiAJCWRwdXQoZGVudHJ5KTsKIAl9CmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rldi5jIGIvZnMvZnVzZS9kZXYuYwppbmRleCAxZTIwMDZjLi42NjU3MWVhIDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rldi5jCisrKyBiL2ZzL2Z1c2UvZGV2LmMKQEAgLTIxMiw2ICsyMTIsNyBAQAogICogQ2FsbGVkIHdpdGggZmMtPmxvY2ssIHVubG9ja3MgaXQKICAqLwogc3RhdGljIHZvaWQgcmVxdWVzdF9lbmQoc3RydWN0IGZ1c2VfY29ubiAqZmMsIHN0cnVjdCBmdXNlX3JlcSAqcmVxKQorCV9fcmVsZWFzZXMoZmMtPmxvY2spCiB7CiAJdm9pZCAoKmVuZCkgKHN0cnVjdCBmdXNlX2Nvbm4gKiwgc3RydWN0IGZ1c2VfcmVxICopID0gcmVxLT5lbmQ7CiAJcmVxLT5lbmQgPSBOVUxMOwpAQCAtNjQwLDYgKzY0MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZnVzZV9yZWFkX2ludGVycnVwdChzdHJ1Y3QgZnVzZV9jb25uICpmYywgc3RydWN0IGZ1c2VfcmVxICpyZXEsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKKwlfX3JlbGVhc2VzKGZjLT5sb2NrKQogewogCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgY3M7CiAJc3RydWN0IGZ1c2VfaW5faGVhZGVyIGloOwpAQCAtNjc4LDE0ICs2ODAsMTUgQEAKICAqIHJlcXVlc3RfZW5kKCkuICBPdGhlcndpc2UgYWRkIGl0IHRvIHRoZSBwcm9jZXNzaW5nIGxpc3QsIGFuZCBzZXQKICAqIHRoZSAnc2VudCcgZmxhZy4KICAqLwotc3RhdGljIHNzaXplX3QgZnVzZV9kZXZfcmVhZHYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKm9mZikKK3N0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBmdXNlX3JlcSAqcmVxOwogCXN0cnVjdCBmdXNlX2luICppbjsKIAlzdHJ1Y3QgZnVzZV9jb3B5X3N0YXRlIGNzOwogCXVuc2lnbmVkIHJlcXNpemU7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihmaWxlKTsKIAlpZiAoIWZjKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNzU5LDE1ICs3NjIsNiBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IGZ1c2VfZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgIHNpemVfdCBuYnl0ZXMsIGxvZmZfdCAqb2ZmKQotewotCXN0cnVjdCBpb3ZlYyBpb3Y7Ci0JaW92Lmlvdl9sZW4gPSBuYnl0ZXM7Ci0JaW92Lmlvdl9iYXNlID0gYnVmOwotCXJldHVybiBmdXNlX2Rldl9yZWFkdihmaWxlLCAmaW92LCAxLCBvZmYpOwotfQotCiAvKiBMb29rIHVwIHJlcXVlc3Qgb24gcHJvY2Vzc2luZyBsaXN0IGJ5IHVuaXF1ZSBJRCAqLwogc3RhdGljIHN0cnVjdCBmdXNlX3JlcSAqcmVxdWVzdF9maW5kKHN0cnVjdCBmdXNlX2Nvbm4gKmZjLCB1NjQgdW5pcXVlKQogewpAQCAtODEyLDE1ICs4MDYsMTUgQEAKICAqIGl0IGZyb20gdGhlIGxpc3QgYW5kIGNvcHkgdGhlIHJlc3Qgb2YgdGhlIGJ1ZmZlciB0byB0aGUgcmVxdWVzdC4KICAqIFRoZSByZXF1ZXN0IGlzIGZpbmlzaGVkIGJ5IGNhbGxpbmcgcmVxdWVzdF9lbmQoKQogICovCi1zdGF0aWMgc3NpemVfdCBmdXNlX2Rldl93cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpvZmYpCitzdGF0aWMgc3NpemVfdCBmdXNlX2Rldl93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlpbnQgZXJyOwogCXVuc2lnbmVkIG5ieXRlcyA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKIAlzdHJ1Y3QgZnVzZV9yZXEgKnJlcTsKIAlzdHJ1Y3QgZnVzZV9vdXRfaGVhZGVyIG9oOwogCXN0cnVjdCBmdXNlX2NvcHlfc3RhdGUgY3M7Ci0Jc3RydWN0IGZ1c2VfY29ubiAqZmMgPSBmdXNlX2dldF9jb25uKGZpbGUpOworCXN0cnVjdCBmdXNlX2Nvbm4gKmZjID0gZnVzZV9nZXRfY29ubihpb2NiLT5raV9maWxwKTsKIAlpZiAoIWZjKQogCQlyZXR1cm4gLUVQRVJNOwogCkBAIC04OTYsMTUgKzg5MCw2IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIHNzaXplX3QgZnVzZV9kZXZfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgICBzaXplX3QgbmJ5dGVzLCBsb2ZmX3QgKm9mZikKLXsKLQlzdHJ1Y3QgaW92ZWMgaW92OwotCWlvdi5pb3ZfbGVuID0gbmJ5dGVzOwotCWlvdi5pb3ZfYmFzZSA9IChjaGFyIF9fdXNlciAqKSBidWY7Ci0JcmV0dXJuIGZ1c2VfZGV2X3dyaXRldihmaWxlLCAmaW92LCAxLCBvZmYpOwotfQotCiBzdGF0aWMgdW5zaWduZWQgZnVzZV9kZXZfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgcG9sbF90YWJsZSAqd2FpdCkKIHsKIAl1bnNpZ25lZCBtYXNrID0gUE9MTE9VVCB8IFBPTExXUk5PUk07CkBAIC0xMDM5LDEwICsxMDI0LDEwIEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGZ1c2VfZGV2X29wZXJhdGlvbnMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWFkCQk9IGZ1c2VfZGV2X3JlYWQsCi0JLnJlYWR2CQk9IGZ1c2VfZGV2X3JlYWR2LAotCS53cml0ZQkJPSBmdXNlX2Rldl93cml0ZSwKLQkud3JpdGV2CQk9IGZ1c2VfZGV2X3dyaXRldiwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZnVzZV9kZXZfcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZnVzZV9kZXZfd3JpdGUsCiAJLnBvbGwJCT0gZnVzZV9kZXZfcG9sbCwKIAkucmVsZWFzZQk9IGZ1c2VfZGV2X3JlbGVhc2UsCiAJLmZhc3luYwkJPSBmdXNlX2Rldl9mYXN5bmMsCmRpZmYgLS1naXQgYS9mcy9mdXNlL2Rpci5jIGIvZnMvZnVzZS9kaXIuYwppbmRleCA0MDljZTZhLi44NjA1MTU1IDEwMDY0NAotLS0gYS9mcy9mdXNlL2Rpci5jCisrKyBiL2ZzL2Z1c2UvZGlyLmMKQEAgLTUwOCw3ICs1MDgsNyBAQAogCQkvKiBTZXQgbmxpbmsgdG8gemVybyBzbyB0aGUgaW5vZGUgY2FuIGJlIGNsZWFyZWQsIGlmCiAgICAgICAgICAgICAgICAgICAgdGhlIGlub2RlIGRvZXMgaGF2ZSBtb3JlIGxpbmtzIHRoaXMgd2lsbCBiZQogICAgICAgICAgICAgICAgICAgIGRpc2NvdmVyZWQgYXQgdGhlIG5leHQgbG9va3VwL2dldGF0dHIgKi8KLQkJaW5vZGUtPmlfbmxpbmsgPSAwOworCQljbGVhcl9ubGluayhpbm9kZSk7CiAJCWZ1c2VfaW52YWxpZGF0ZV9hdHRyKGlub2RlKTsKIAkJZnVzZV9pbnZhbGlkYXRlX2F0dHIoZGlyKTsKIAkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKGVudHJ5KTsKQEAgLTUzNCw3ICs1MzQsNyBAQAogCWVyciA9IHJlcS0+b3V0LmguZXJyb3I7CiAJZnVzZV9wdXRfcmVxdWVzdChmYywgcmVxKTsKIAlpZiAoIWVycikgewotCQllbnRyeS0+ZF9pbm9kZS0+aV9ubGluayA9IDA7CisJCWNsZWFyX25saW5rKGVudHJ5LT5kX2lub2RlKTsKIAkJZnVzZV9pbnZhbGlkYXRlX2F0dHIoZGlyKTsKIAkJZnVzZV9pbnZhbGlkYXRlX2VudHJ5X2NhY2hlKGVudHJ5KTsKIAl9IGVsc2UgaWYgKGVyciA9PSAtRUlOVFIpCkBAIC03NzYsNyArNzc2LDcgQEAKIAkJaWYgKChtYXNrICYgTUFZX0VYRUMpICYmICFTX0lTRElSKG1vZGUpICYmICEobW9kZSAmIFNfSVhVR08pKQogCQkJcmV0dXJuIC1FQUNDRVM7CiAKLQkJaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiBMT09LVVBfQUNDRVNTKSkKKwkJaWYgKG5kICYmIChuZC0+ZmxhZ3MgJiAoTE9PS1VQX0FDQ0VTUyB8IExPT0tVUF9DSERJUikpKQogCQkJcmV0dXJuIGZ1c2VfYWNjZXNzKGlub2RlLCBtYXNrKTsKIAkJcmV0dXJuIDA7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZnVzZS9maWxlLmMgYi9mcy9mdXNlL2ZpbGUuYwppbmRleCA1YzRmY2QxLi4xODM2MjY4IDEwMDY0NAotLS0gYS9mcy9mdXNlL2ZpbGUuYworKysgYi9mcy9mdXNlL2ZpbGUuYwpAQCAtNzUzLDggKzc1MywxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmdXNlX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGZ1c2VfZmlsZV9tbWFwLAogCS5vcGVuCQk9IGZ1c2Vfb3BlbiwKIAkuZmx1c2gJCT0gZnVzZV9mbHVzaCwKZGlmZiAtLWdpdCBhL2ZzL2Z1c2UvaW5vZGUuYyBiL2ZzL2Z1c2UvaW5vZGUuYwppbmRleCA3ZDI1MDkyLi43ZDBhOWFlIDEwMDY0NAotLS0gYS9mcy9mdXNlL2lub2RlLmMKKysrIGIvZnMvZnVzZS9pbm9kZS5jCkBAIC0xMTgsNyArMTE4LDYgQEAKIAlpbm9kZS0+aV91aWQgICAgID0gYXR0ci0+dWlkOwogCWlub2RlLT5pX2dpZCAgICAgPSBhdHRyLT5naWQ7CiAJaV9zaXplX3dyaXRlKGlub2RlLCBhdHRyLT5zaXplKTsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwogCWlub2RlLT5pX2Jsb2NrcyAgPSBhdHRyLT5ibG9ja3M7CiAJaW5vZGUtPmlfYXRpbWUudHZfc2VjICAgPSBhdHRyLT5hdGltZTsKIAlpbm9kZS0+aV9hdGltZS50dl9uc2VjICA9IGF0dHItPmF0aW1lbnNlYzsKQEAgLTI1Miw2ICsyNTEsNyBAQAogCW1lbXNldCgmb3V0YXJnLCAwLCBzaXplb2Yob3V0YXJnKSk7CiAJcmVxLT5pbi5udW1hcmdzID0gMDsKIAlyZXEtPmluLmgub3Bjb2RlID0gRlVTRV9TVEFURlM7CisJcmVxLT5pbi5oLm5vZGVpZCA9IGdldF9ub2RlX2lkKGRlbnRyeS0+ZF9pbm9kZSk7CiAJcmVxLT5vdXQubnVtYXJncyA9IDE7CiAJcmVxLT5vdXQuYXJnc1swXS5zaXplID0KIAkJZmMtPm1pbm9yIDwgNCA/IEZVU0VfQ09NUEFUX1NUQVRGU19TSVpFIDogc2l6ZW9mKG91dGFyZyk7CmRpZmYgLS1naXQgYS9mcy9nZW5lcmljX2FjbC5jIGIvZnMvZ2VuZXJpY19hY2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2NiNzg5Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvZ2VuZXJpY19hY2wuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIGZzL2dlbmVyaWNfYWNsLmMKKyAqCisgKiAoQykgMjAwNSBBbmRyZWFzIEdydWVuYmFjaGVyIDxhZ3J1ZW5Ac3VzZS5kZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTC4KKyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfYWNsLmg+CisKKy8qKgorICogZ2VuZXJpY19hY2xfbGlzdCAgLSAgR2VuZXJpYyB4YXR0cl9oYW5kbGVyLT5saXN0KCkgb3BlcmF0aW9uCisgKiBAb3BzOglGaWxlc3lzdGVtIHNwZWNpZmljIGdldGFjbCBhbmQgc2V0YWNsIGNhbGxiYWNrcworICovCitzaXplX3QKK2dlbmVyaWNfYWNsX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgKm9wcywKKwkJIGludCB0eXBlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwljb25zdCBjaGFyICpuYW1lOworCXNpemVfdCBzaXplOworCisJYWNsID0gb3BzLT5nZXRhY2woaW5vZGUsIHR5cGUpOworCWlmICghYWNsKQorCQlyZXR1cm4gMDsKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCisJc3dpdGNoKHR5cGUpIHsKKwkJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCQluYW1lID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUzsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJCW5hbWUgPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVDsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gMDsKKwl9CisJc2l6ZSA9IHN0cmxlbihuYW1lKSArIDE7CisJaWYgKGxpc3QgJiYgc2l6ZSA8PSBsaXN0X3NpemUpCisJCW1lbWNweShsaXN0LCBuYW1lLCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKK30KKworLyoqCisgKiBnZW5lcmljX2FjbF9nZXQgIC0gIEdlbmVyaWMgeGF0dHJfaGFuZGxlci0+Z2V0KCkgb3BlcmF0aW9uCisgKiBAb3BzOglGaWxlc3lzdGVtIHNwZWNpZmljIGdldGFjbCBhbmQgc2V0YWNsIGNhbGxiYWNrcworICovCitpbnQKK2dlbmVyaWNfYWNsX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqb3BzLAorCQlpbnQgdHlwZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IGVycm9yOworCisJYWNsID0gb3BzLT5nZXRhY2woaW5vZGUsIHR5cGUpOworCWlmICghYWNsKQorCQlyZXR1cm4gLUVOT0RBVEE7CisJZXJyb3IgPSBwb3NpeF9hY2xfdG9feGF0dHIoYWNsLCBidWZmZXIsIHNpemUpOworCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2VuZXJpY19hY2xfc2V0ICAtICBHZW5lcmljIHhhdHRyX2hhbmRsZXItPnNldCgpIG9wZXJhdGlvbgorICogQG9wczoJRmlsZXN5c3RlbSBzcGVjaWZpYyBnZXRhY2wgYW5kIHNldGFjbCBjYWxsYmFja3MKKyAqLworaW50CitnZW5lcmljX2FjbF9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgKm9wcywKKwkJaW50IHR5cGUsIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSkKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOworCWludCBlcnJvcjsKKworCWlmIChTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJaWYgKGN1cnJlbnQtPmZzdWlkICE9IGlub2RlLT5pX3VpZCAmJiAhY2FwYWJsZShDQVBfRk9XTkVSKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlpZiAodmFsdWUpIHsKKwkJYWNsID0gcG9zaXhfYWNsX2Zyb21feGF0dHIodmFsdWUsIHNpemUpOworCQlpZiAoSVNfRVJSKGFjbCkpCisJCQlyZXR1cm4gUFRSX0VSUihhY2wpOworCX0KKwlpZiAoYWNsKSB7CisJCW1vZGVfdCBtb2RlOworCisJCWVycm9yID0gcG9zaXhfYWNsX3ZhbGlkKGFjbCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZmFpbGVkOworCQlzd2l0Y2godHlwZSkgeworCQkJY2FzZSBBQ0xfVFlQRV9BQ0NFU1M6CisJCQkJbW9kZSA9IGlub2RlLT5pX21vZGU7CisJCQkJZXJyb3IgPSBwb3NpeF9hY2xfZXF1aXZfbW9kZShhY2wsICZtb2RlKTsKKwkJCQlpZiAoZXJyb3IgPCAwKQorCQkJCQlnb3RvIGZhaWxlZDsKKwkJCQlpbm9kZS0+aV9tb2RlID0gbW9kZTsKKwkJCQlpZiAoZXJyb3IgPT0gMCkgeworCQkJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQkJCQlhY2wgPSBOVUxMOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQkJCWlmICghU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgeworCQkJCQllcnJvciA9IC1FSU5WQUw7CisJCQkJCWdvdG8gZmFpbGVkOworCQkJCX0KKwkJCQlicmVhazsKKwkJfQorCX0KKwlvcHMtPnNldGFjbChpbm9kZSwgdHlwZSwgYWNsKTsKKwllcnJvciA9IDA7CitmYWlsZWQ6CisJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qKgorICogZ2VuZXJpY19hY2xfaW5pdCAgLSAgVGFrZSBjYXJlIG9mIGFjbCBpbmhlcml0YW5jZSBhdCBAaW5vZGUgY3JlYXRlIHRpbWUKKyAqIEBvcHM6CUZpbGVzeXN0ZW0gc3BlY2lmaWMgZ2V0YWNsIGFuZCBzZXRhY2wgY2FsbGJhY2tzCisgKgorICogRmlsZXMgY3JlYXRlZCBpbnNpZGUgYSBkaXJlY3Rvcnkgd2l0aCBhIGRlZmF1bHQgQUNMIGluaGVyaXQgdGhlCisgKiBkaXJlY3RvcnkncyBkZWZhdWx0IEFDTC4KKyAqLworaW50CitnZW5lcmljX2FjbF9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyLAorCQkgc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgKm9wcykKK3sKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2wgPSBOVUxMOworCW1vZGVfdCBtb2RlID0gaW5vZGUtPmlfbW9kZTsKKwlpbnQgZXJyb3I7CisKKwlpbm9kZS0+aV9tb2RlID0gbW9kZSAmIH5jdXJyZW50LT5mcy0+dW1hc2s7CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpKQorCQlhY2wgPSBvcHMtPmdldGFjbChkaXIsIEFDTF9UWVBFX0RFRkFVTFQpOworCWlmIChhY2wpIHsKKwkJc3RydWN0IHBvc2l4X2FjbCAqY2xvbmU7CisKKwkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKKwkJCWNsb25lID0gcG9zaXhfYWNsX2Nsb25lKGFjbCwgR0ZQX0tFUk5FTCk7CisJCQllcnJvciA9IC1FTk9NRU07CisJCQlpZiAoIWNsb25lKQorCQkJCWdvdG8gY2xlYW51cDsKKwkJCW9wcy0+c2V0YWNsKGlub2RlLCBBQ0xfVFlQRV9ERUZBVUxULCBjbG9uZSk7CisJCQlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CisJCX0KKwkJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwkJZXJyb3IgPSAtRU5PTUVNOworCQlpZiAoIWNsb25lKQorCQkJZ290byBjbGVhbnVwOworCQllcnJvciA9IHBvc2l4X2FjbF9jcmVhdGVfbWFzcShjbG9uZSwgJm1vZGUpOworCQlpZiAoZXJyb3IgPj0gMCkgeworCQkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CisJCQlpZiAoZXJyb3IgPiAwKQorCQkJCW9wcy0+c2V0YWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKKwkJfQorCQlwb3NpeF9hY2xfcmVsZWFzZShjbG9uZSk7CisJfQorCWVycm9yID0gMDsKKworY2xlYW51cDoKKwlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBnZW5lcmljX2FjbF9jaG1vZCAgLSAgY2hhbmdlIHRoZSBhY2Nlc3MgYWNsIG9mIEBpbm9kZSB1cG9uIGNobW9kKCkKKyAqIEBvcHM6CUZJbGVzeXN0ZW0gc3BlY2lmaWMgZ2V0YWNsIGFuZCBzZXRhY2wgY2FsbGJhY2tzCisgKgorICogQSBjaG1vZCBhbHNvIGNoYW5nZXMgdGhlIHBlcm1pc3Npb25zIG9mIHRoZSBvd25lciwgZ3JvdXAvbWFzaywgYW5kCisgKiBvdGhlciBBQ0wgZW50cmllcy4KKyAqLworaW50CitnZW5lcmljX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqb3BzKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCwgKmNsb25lOworCWludCBlcnJvciA9IDA7CisKKwlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOworCWFjbCA9IG9wcy0+Z2V0YWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOworCWlmIChhY2wpIHsKKwkJY2xvbmUgPSBwb3NpeF9hY2xfY2xvbmUoYWNsLCBHRlBfS0VSTkVMKTsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwkJaWYgKCFjbG9uZSkKKwkJCXJldHVybiAtRU5PTUVNOworCQllcnJvciA9IHBvc2l4X2FjbF9jaG1vZF9tYXNxKGNsb25lLCBpbm9kZS0+aV9tb2RlKTsKKwkJaWYgKCFlcnJvcikKKwkJCW9wcy0+c2V0YWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKKwkJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOworCX0KKwlyZXR1cm4gZXJyb3I7Cit9CmRpZmYgLS1naXQgYS9mcy9oZnMvYm5vZGUuYyBiL2ZzL2hmcy9ibm9kZS5jCmluZGV4IDEzMjMxZGQuLjBkMjAwMDYgMTAwNjQ0Ci0tLSBhL2ZzL2hmcy9ibm9kZS5jCisrKyBiL2ZzL2hmcy9ibm9kZS5jCkBAIC0yNDksMTAgKzI0OSw5IEBACiAJc2IgPSB0cmVlLT5pbm9kZS0+aV9zYjsKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCBoZnNfYm5vZGUpICsgdHJlZS0+cGFnZXNfcGVyX2Jub2RlICoKIAkJc2l6ZW9mKHN0cnVjdCBwYWdlICopOwotCW5vZGUgPSBrbWFsbG9jKHNpemUsIEdGUF9LRVJORUwpOworCW5vZGUgPSBremFsbG9jKHNpemUsIEdGUF9LRVJORUwpOwogCWlmICghbm9kZSkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KG5vZGUsIDAsIHNpemUpOwogCW5vZGUtPnRyZWUgPSB0cmVlOwogCW5vZGUtPnRoaXMgPSBjbmlkOwogCXNldF9iaXQoSEZTX0JOT0RFX05FVywgJm5vZGUtPmZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9idHJlZS5jIGIvZnMvaGZzL2J0cmVlLmMKaW5kZXggNDAwMzU3OS4uNWZkMGVkNyAxMDA2NDQKLS0tIGEvZnMvaGZzL2J0cmVlLmMKKysrIGIvZnMvaGZzL2J0cmVlLmMKQEAgLTIxLDEwICsyMSw5IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKLQl0cmVlID0ga21hbGxvYyhzaXplb2YoKnRyZWUpLCBHRlBfS0VSTkVMKTsKKwl0cmVlID0ga3phbGxvYyhzaXplb2YoKnRyZWUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyZWUpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldCh0cmVlLCAwLCBzaXplb2YoKnRyZWUpKTsKIAogCWluaXRfTVVURVgoJnRyZWUtPnRyZWVfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnRyZWUtPmhhc2hfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9oZnMvZGlyLmMgYi9mcy9oZnMvZGlyLmMKaW5kZXggN2NkOGNjMC4uMzdkNjgxYiAxMDA2NDQKLS0tIGEvZnMvaGZzL2Rpci5jCisrKyBiL2ZzL2hmcy9kaXIuYwpAQCAtMjQ2LDcgKzI0Niw3IEBACiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKIAotCWlub2RlLT5pX25saW5rLS07CisJZHJvcF9ubGluayhpbm9kZSk7CiAJaGZzX2RlbGV0ZV9pbm9kZShpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwpAQCAtMjczLDcgKzI3Myw3IEBACiAJcmVzID0gaGZzX2NhdF9kZWxldGUoaW5vZGUtPmlfaW5vLCBkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJaWYgKHJlcykKIAkJcmV0dXJuIHJlczsKLQlpbm9kZS0+aV9ubGluayA9IDA7CisJY2xlYXJfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAloZnNfZGVsZXRlX2lub2RlKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2hmcy9pbm9kZS5jIGIvZnMvaGZzL2lub2RlLmMKaW5kZXggMzE1Y2Y0NC4uMDJmNTU3MyAxMDA2NDQKLS0tIGEvZnMvaGZzL2lub2RlLmMKKysrIGIvZnMvaGZzL2lub2RlLmMKQEAgLTE1NCw3ICsxNTQsNiBAQAogCWlub2RlLT5pX2dpZCA9IGN1cnJlbnQtPmZzZ2lkOwogCWlub2RlLT5pX25saW5rID0gMTsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWlub2RlLT5pX2Jsa3NpemUgPSBIRlNfU0Ioc2IpLT5hbGxvY19ibGtzejsKIAlIRlNfSShpbm9kZSktPmZsYWdzID0gMDsKIAlIRlNfSShpbm9kZSktPnJzcmNfaW5vZGUgPSBOVUxMOwogCUhGU19JKGlub2RlKS0+ZnNfYmxvY2tzID0gMDsKQEAgLTI4NCw3ICsyODMsNiBAQAogCWlub2RlLT5pX3VpZCA9IGhzYi0+c191aWQ7CiAJaW5vZGUtPmlfZ2lkID0gaHNiLT5zX2dpZDsKIAlpbm9kZS0+aV9ubGluayA9IDE7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IEhGU19TQihpbm9kZS0+aV9zYiktPmFsbG9jX2Jsa3N6OwogCiAJaWYgKGlkYXRhLT5rZXkpCiAJCUhGU19JKGlub2RlKS0+Y2F0X2tleSA9ICppZGF0YS0+a2V5OwpAQCAtNjAzLDggKzYwMSwxMCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBoZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZAkJPSBnZW5lcmljX2ZpbGVfcmVhZCwKLQkud3JpdGUJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAogCS5mc3luYwkJPSBmaWxlX2ZzeW5jLApkaWZmIC0tZ2l0IGEvZnMvaGZzL3N1cGVyLmMgYi9mcy9oZnMvc3VwZXIuYwppbmRleCAzNDkzN2VlLi5kNDNiNGZjIDEwMDY0NAotLS0gYS9mcy9oZnMvc3VwZXIuYworKysgYi9mcy9oZnMvc3VwZXIuYwpAQCAtMzU2LDExICszNTYsMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJvb3RfaW5vZGU7CiAJaW50IHJlczsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBoZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOworCXNiaSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZnNfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzYi0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZihzdHJ1Y3QgaGZzX3NiX2luZm8pKTsKIAlJTklUX0hMSVNUX0hFQUQoJnNiaS0+cnNyY19pbm9kZXMpOwogCiAJcmVzID0gLUVJTlZBTDsKQEAgLTQ1NSw4ICs0NTQsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGZzX2ZzKHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZoZnNfZnNfdHlwZSk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShoZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJoZnNfaW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaGZzX2lub2RlX2NhY2hlcCk7CiB9CiAKIG1vZHVsZV9pbml0KGluaXRfaGZzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9ibm9kZS5jIGIvZnMvaGZzcGx1cy9ibm9kZS5jCmluZGV4IDc3YmY0MzQuLjI5ZGE2NTcgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYm5vZGUuYworKysgYi9mcy9oZnNwbHVzL2Jub2RlLmMKQEAgLTQwOSwxMCArNDA5LDkgQEAKIAlzYiA9IHRyZWUtPmlub2RlLT5pX3NiOwogCXNpemUgPSBzaXplb2Yoc3RydWN0IGhmc19ibm9kZSkgKyB0cmVlLT5wYWdlc19wZXJfYm5vZGUgKgogCQlzaXplb2Yoc3RydWN0IHBhZ2UgKik7Ci0Jbm9kZSA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJbm9kZSA9IGt6YWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFub2RlKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQobm9kZSwgMCwgc2l6ZSk7CiAJbm9kZS0+dHJlZSA9IHRyZWU7CiAJbm9kZS0+dGhpcyA9IGNuaWQ7CiAJc2V0X2JpdChIRlNfQk5PREVfTkVXLCAmbm9kZS0+ZmxhZ3MpOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9idHJlZS5jIGIvZnMvaGZzcGx1cy9idHJlZS5jCmluZGV4IGNmYzg1MmYuLmE5YjllODcgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvYnRyZWUuYworKysgYi9mcy9oZnNwbHVzL2J0cmVlLmMKQEAgLTI0LDEwICsyNCw5IEBACiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJdW5zaWduZWQgaW50IHNpemU7CiAKLQl0cmVlID0ga21hbGxvYyhzaXplb2YoKnRyZWUpLCBHRlBfS0VSTkVMKTsKKwl0cmVlID0ga3phbGxvYyhzaXplb2YoKnRyZWUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXRyZWUpCiAJCXJldHVybiBOVUxMOwotCW1lbXNldCh0cmVlLCAwLCBzaXplb2YoKnRyZWUpKTsKIAogCWluaXRfTVVURVgoJnRyZWUtPnRyZWVfbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJnRyZWUtPmhhc2hfbG9jayk7CmRpZmYgLS1naXQgYS9mcy9oZnNwbHVzL2Rpci5jIGIvZnMvaGZzcGx1cy9kaXIuYwppbmRleCAxZjllY2UwLi43ZTMwOTc1IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2Rpci5jCisrKyBiL2ZzL2hmc3BsdXMvZGlyLmMKQEAgLTI5OCw3ICsyOTgsNyBAQAogCWlmIChyZXMpCiAJCXJldHVybiByZXM7CiAKLQlpbm9kZS0+aV9ubGluaysrOworCWluY19ubGluayhpbm9kZSk7CiAJaGZzcGx1c19pbnN0YW50aWF0ZShkc3RfZGVudHJ5LCBpbm9kZSwgY25pZCk7CiAJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKQEAgLTMzOCw3ICszMzgsNyBAQAogCQlyZXR1cm4gcmVzOwogCiAJaWYgKGlub2RlLT5pX25saW5rID4gMCkKLQkJaW5vZGUtPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhpbm9kZSk7CiAJaGZzcGx1c19kZWxldGVfaW5vZGUoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9pbm8gIT0gY25pZCAmJiAhaW5vZGUtPmlfbmxpbmspIHsKIAkJaWYgKCFhdG9taWNfcmVhZCgmSEZTUExVU19JKGlub2RlKS5vcGVuY250KSkgewpAQCAtMzQ4LDcgKzM0OCw3IEBACiAJCX0gZWxzZQogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19ERUFEOwogCX0gZWxzZQotCQlpbm9kZS0+aV9ubGluayA9IDA7CisJCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAKQEAgLTM4Nyw3ICszODcsNyBAQAogCXJlcyA9IGhmc3BsdXNfZGVsZXRlX2NhdChpbm9kZS0+aV9pbm8sIGRpciwgJmRlbnRyeS0+ZF9uYW1lKTsKIAlpZiAocmVzKQogCQlyZXR1cm4gcmVzOwotCWlub2RlLT5pX25saW5rID0gMDsKKwljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCWhmc3BsdXNfZGVsZXRlX2lub2RlKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaGZzcGx1c19mcy5oIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKaW5kZXggOGExY2E1ZS4uMzkxNTYzNSAxMDA2NDQKLS0tIGEvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKKysrIGIvZnMvaGZzcGx1cy9oZnNwbHVzX2ZzLmgKQEAgLTI0NiwxMiArMjQ2LDggQEAKIAogLyogZXh0MiBpb2N0bHMgKEVYVDJfSU9DX0dFVEZMQUdTIGFuZCBFWFQyX0lPQ19TRVRGTEFHUykgdG8gc3VwcG9ydAogICogY2hhdHRyL2xzYXR0ciAqLwotI2RlZmluZSBIRlNQTFVTX0lPQ19FWFQyX0dFVEZMQUdTCV9JT1IoJ2YnLCAxLCBsb25nKQotI2RlZmluZSBIRlNQTFVTX0lPQ19FWFQyX1NFVEZMQUdTCV9JT1coJ2YnLCAyLCBsb25nKQotCi0jZGVmaW5lIEVYVDJfRkxBR19JTU1VVEFCTEUJCTB4MDAwMDAwMTAgLyogSW1tdXRhYmxlIGZpbGUgKi8KLSNkZWZpbmUgRVhUMl9GTEFHX0FQUEVORAkJMHgwMDAwMDAyMCAvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KLSNkZWZpbmUgRVhUMl9GTEFHX05PRFVNUAkJMHgwMDAwMDA0MCAvKiBkbyBub3QgZHVtcCBmaWxlICovCisjZGVmaW5lIEhGU1BMVVNfSU9DX0VYVDJfR0VURkxBR1MJRlNfSU9DX0dFVEZMQUdTCisjZGVmaW5lIEhGU1BMVVNfSU9DX0VYVDJfU0VURkxBR1MJRlNfSU9DX1NFVEZMQUdTCiAKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW5vZGUuYyBiL2ZzL2hmc3BsdXMvaW5vZGUuYwppbmRleCA5MjRlY2RlLi45ZTM2NzUyIDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lub2RlLmMKKysrIGIvZnMvaGZzcGx1cy9pbm9kZS5jCkBAIC0yODIsOCArMjgyLDEwIEBACiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGhmc3BsdXNfZmlsZV9vcGVyYXRpb25zID0gewogCS5sbHNlZWsgCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkucmVhZAkJPSBnZW5lcmljX2ZpbGVfcmVhZCwKLQkud3JpdGUJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAogCS5mc3luYwkJPSBmaWxlX2ZzeW5jLApAQCAtMzA0LDcgKzMwNiw2IEBACiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CiAJaW5vZGUtPmlfbmxpbmsgPSAxOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IEhGU1BMVVNfU0Ioc2IpLmFsbG9jX2Jsa3N6OwogCUlOSVRfTElTVF9IRUFEKCZIRlNQTFVTX0koaW5vZGUpLm9wZW5fZGlyX2xpc3QpOwogCWluaXRfTVVURVgoJkhGU1BMVVNfSShpbm9kZSkuZXh0ZW50c19sb2NrKTsKIAlhdG9taWNfc2V0KCZIRlNQTFVTX0koaW5vZGUpLm9wZW5jbnQsIDApOwpAQCAtNDA3LDcgKzQwOCw2IEBACiAJdHlwZSA9IGhmc19ibm9kZV9yZWFkX3UxNihmZC0+Ym5vZGUsIGZkLT5lbnRyeW9mZnNldCk7CiAKIAlIRlNQTFVTX0koaW5vZGUpLmRldiA9IDA7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IEhGU1BMVVNfU0IoaW5vZGUtPmlfc2IpLmFsbG9jX2Jsa3N6OwogCWlmICh0eXBlID09IEhGU1BMVVNfRk9MREVSKSB7CiAJCXN0cnVjdCBoZnNwbHVzX2NhdF9mb2xkZXIgKmZvbGRlciA9ICZlbnRyeS5mb2xkZXI7CiAKZGlmZiAtLWdpdCBhL2ZzL2hmc3BsdXMvaW9jdGwuYyBiL2ZzL2hmc3BsdXMvaW9jdGwuYwppbmRleCAxM2NmODQ4Li43OWZkMTA0IDEwMDY0NAotLS0gYS9mcy9oZnNwbHVzL2lvY3RsLmMKKysrIGIvZnMvaGZzcGx1cy9pb2N0bC5jCkBAIC0yOCwxMSArMjgsMTEgQEAKIAljYXNlIEhGU1BMVVNfSU9DX0VYVDJfR0VURkxBR1M6CiAJCWZsYWdzID0gMDsKIAkJaWYgKEhGU1BMVVNfSShpbm9kZSkucm9vdGZsYWdzICYgSEZTUExVU19GTEdfSU1NVVRBQkxFKQotCQkJZmxhZ3MgfD0gRVhUMl9GTEFHX0lNTVVUQUJMRTsgLyogRVhUMl9JTU1VVEFCTEVfRkwgKi8KKwkJCWZsYWdzIHw9IEZTX0lNTVVUQUJMRV9GTDsgLyogRVhUMl9JTU1VVEFCTEVfRkwgKi8KIAkJaWYgKEhGU1BMVVNfSShpbm9kZSkucm9vdGZsYWdzICYgSEZTUExVU19GTEdfQVBQRU5EKQotCQkJZmxhZ3MgfD0gRVhUMl9GTEFHX0FQUEVORDsgLyogRVhUMl9BUFBFTkRfRkwgKi8KKwkJCWZsYWdzIHw9IEZTX0FQUEVORF9GTDsgLyogRVhUMl9BUFBFTkRfRkwgKi8KIAkJaWYgKEhGU1BMVVNfSShpbm9kZSkudXNlcmZsYWdzICYgSEZTUExVU19GTEdfTk9EVU1QKQotCQkJZmxhZ3MgfD0gRVhUMl9GTEFHX05PRFVNUDsgLyogRVhUMl9OT0RVTVBfRkwgKi8KKwkJCWZsYWdzIHw9IEZTX05PRFVNUF9GTDsgLyogRVhUMl9OT0RVTVBfRkwgKi8KIAkJcmV0dXJuIHB1dF91c2VyKGZsYWdzLCAoaW50IF9fdXNlciAqKWFyZyk7CiAJY2FzZSBIRlNQTFVTX0lPQ19FWFQyX1NFVEZMQUdTOiB7CiAJCWlmIChJU19SRE9OTFkoaW5vZGUpKQpAQCAtNDQsMzIgKzQ0LDMxIEBACiAJCWlmIChnZXRfdXNlcihmbGFncywgKGludCBfX3VzZXIgKilhcmcpKQogCQkJcmV0dXJuIC1FRkFVTFQ7CiAKLQkJaWYgKGZsYWdzICYgKEVYVDJfRkxBR19JTU1VVEFCTEV8RVhUMl9GTEFHX0FQUEVORCkgfHwKKwkJaWYgKGZsYWdzICYgKEZTX0lNTVVUQUJMRV9GTHxGU19BUFBFTkRfRkwpIHx8CiAJCSAgICBIRlNQTFVTX0koaW5vZGUpLnJvb3RmbGFncyAmIChIRlNQTFVTX0ZMR19JTU1VVEFCTEV8SEZTUExVU19GTEdfQVBQRU5EKSkgewogCQkJaWYgKCFjYXBhYmxlKENBUF9MSU5VWF9JTU1VVEFCTEUpKQogCQkJCXJldHVybiAtRVBFUk07CiAJCX0KIAogCQkvKiBkb24ndCBzaWxlbnRseSBpZ25vcmUgdW5zdXBwb3J0ZWQgZXh0MiBmbGFncyAqLwotCQlpZiAoZmxhZ3MgJiB+KEVYVDJfRkxBR19JTU1VVEFCTEV8RVhUMl9GTEFHX0FQUEVORHwKLQkJCSAgICAgIEVYVDJfRkxBR19OT0RVTVApKQorCQlpZiAoZmxhZ3MgJiB+KEZTX0lNTVVUQUJMRV9GTHxGU19BUFBFTkRfRkx8RlNfTk9EVU1QX0ZMKSkKIAkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCQlpZiAoZmxhZ3MgJiBFWFQyX0ZMQUdfSU1NVVRBQkxFKSB7IC8qIEVYVDJfSU1NVVRBQkxFX0ZMICovCisJCWlmIChmbGFncyAmIEZTX0lNTVVUQUJMRV9GTCkgeyAvKiBFWFQyX0lNTVVUQUJMRV9GTCAqLwogCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJCQlIRlNQTFVTX0koaW5vZGUpLnJvb3RmbGFncyB8PSBIRlNQTFVTX0ZMR19JTU1VVEFCTEU7CiAJCX0gZWxzZSB7CiAJCQlpbm9kZS0+aV9mbGFncyAmPSB+U19JTU1VVEFCTEU7CiAJCQlIRlNQTFVTX0koaW5vZGUpLnJvb3RmbGFncyAmPSB+SEZTUExVU19GTEdfSU1NVVRBQkxFOwogCQl9Ci0JCWlmIChmbGFncyAmIEVYVDJfRkxBR19BUFBFTkQpIHsgLyogRVhUMl9BUFBFTkRfRkwgKi8KKwkJaWYgKGZsYWdzICYgRlNfQVBQRU5EX0ZMKSB7IC8qIEVYVDJfQVBQRU5EX0ZMICovCiAJCQlpbm9kZS0+aV9mbGFncyB8PSBTX0FQUEVORDsKIAkJCUhGU1BMVVNfSShpbm9kZSkucm9vdGZsYWdzIHw9IEhGU1BMVVNfRkxHX0FQUEVORDsKIAkJfSBlbHNlIHsKIAkJCWlub2RlLT5pX2ZsYWdzICY9IH5TX0FQUEVORDsKIAkJCUhGU1BMVVNfSShpbm9kZSkucm9vdGZsYWdzICY9IH5IRlNQTFVTX0ZMR19BUFBFTkQ7CiAJCX0KLQkJaWYgKGZsYWdzICYgRVhUMl9GTEFHX05PRFVNUCkgLyogRVhUMl9OT0RVTVBfRkwgKi8KKwkJaWYgKGZsYWdzICYgRlNfTk9EVU1QX0ZMKSAvKiBFWFQyX05PRFVNUF9GTCAqLwogCQkJSEZTUExVU19JKGlub2RlKS51c2VyZmxhZ3MgfD0gSEZTUExVU19GTEdfTk9EVU1QOwogCQllbHNlCiAJCQlIRlNQTFVTX0koaW5vZGUpLnVzZXJmbGFncyAmPSB+SEZTUExVU19GTEdfTk9EVU1QOwpkaWZmIC0tZ2l0IGEvZnMvaGZzcGx1cy9zdXBlci5jIGIvZnMvaGZzcGx1cy9zdXBlci5jCmluZGV4IGQyNzlkNTkuLjE5NGVlZGUgMTAwNjQ0Ci0tLSBhL2ZzL2hmc3BsdXMvc3VwZXIuYworKysgYi9mcy9oZnNwbHVzL3N1cGVyLmMKQEAgLTQ5Myw4ICs0OTMsNyBAQAogc3RhdGljIHZvaWQgX19leGl0IGV4aXRfaGZzcGx1c19mcyh2b2lkKQogewogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmaGZzcGx1c19mc190eXBlKTsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGhmc3BsdXNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJoZnNwbHVzX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KGhmc3BsdXNfaW5vZGVfY2FjaGVwKTsKIH0KIAogbW9kdWxlX2luaXQoaW5pdF9oZnNwbHVzX2ZzKQpkaWZmIC0tZ2l0IGEvZnMvaG9zdGZzL2hvc3Rmc19rZXJuLmMgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwppbmRleCBiODJlM2Q5Li5iNmJkMzNjIDEwMDY0NAotLS0gYS9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYworKysgYi9mcy9ob3N0ZnMvaG9zdGZzX2tlcm4uYwpAQCAtMTU2LDcgKzE1Niw2IEBACiAJaW5vLT5pX21vZGUgPSBpX21vZGU7CiAJaW5vLT5pX25saW5rID0gaV9ubGluazsKIAlpbm8tPmlfc2l6ZSA9IGlfc2l6ZTsKLQlpbm8tPmlfYmxrc2l6ZSA9IGlfYmxrc2l6ZTsKIAlpbm8tPmlfYmxvY2tzID0gaV9ibG9ja3M7CiAJcmV0dXJuKDApOwogfQpAQCAtMzg2LDEzICszODUsMTEgQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaG9zdGZzX2ZpbGVfZm9wcyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCi0JLnJlYWR2CQk9IGdlbmVyaWNfZmlsZV9yZWFkdiwKLQkud3JpdGV2CQk9IGdlbmVyaWNfZmlsZV93cml0ZXYsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkub3BlbgkJPSBob3N0ZnNfZmlsZV9vcGVuLAogCS5yZWxlYXNlCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvYnVmZmVyLmMgYi9mcy9ocGZzL2J1ZmZlci5jCmluZGV4IDI4MDdhYTguLmI1MmI3MzggMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvYnVmZmVyLmMKKysrIGIvZnMvaHBmcy9idWZmZXIuYwpAQCAtNzYsNyArNzYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQlxYmgtPmRhdGEgPSBkYXRhID0gKGNoYXIgKilrbWFsbG9jKDIwNDgsIEdGUF9OT0ZTKTsKKwlxYmgtPmRhdGEgPSBkYXRhID0ga21hbGxvYygyMDQ4LCBHRlBfTk9GUyk7CiAJaWYgKCFkYXRhKSB7CiAJCXByaW50aygiSFBGUzogaHBmc19tYXBfNHNlY3RvcnM6IG91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGJhaWw7CmRpZmYgLS1naXQgYS9mcy9ocGZzL2ZpbGUuYyBiL2ZzL2hwZnMvZmlsZS5jCmluZGV4IGQ5ZWIxOWIuLjhiOTRkMjQgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvZmlsZS5jCisrKyBiL2ZzL2hwZnMvZmlsZS5jCkBAIC0xMTMsNyArMTEzLDcgQEAKIHsKIAlzc2l6ZV90IHJldHZhbDsKIAotCXJldHZhbCA9IGdlbmVyaWNfZmlsZV93cml0ZShmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKKwlyZXR2YWwgPSBkb19zeW5jX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogCWlmIChyZXR2YWwgPiAwKQogCQlocGZzX2koZmlsZS0+Zl9kZW50cnktPmRfaW5vZGUpLT5pX2RpcnR5ID0gMTsKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTIyLDggKzEyMiwxMCBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBocGZzX2ZpbGVfb3BzID0KIHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkud3JpdGUJCT0gaHBmc19maWxlX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5yZWxlYXNlCT0gaHBmc19maWxlX3JlbGVhc2UsCiAJLmZzeW5jCQk9IGhwZnNfZmlsZV9mc3luYywKZGlmZiAtLWdpdCBhL2ZzL2hwZnMvaW5vZGUuYyBiL2ZzL2hwZnMvaW5vZGUuYwppbmRleCA1NmYyYzMzLi5iY2Y2ZWUzIDEwMDY0NAotLS0gYS9mcy9ocGZzL2lub2RlLmMKKysrIGIvZnMvaHBmcy9pbm9kZS5jCkBAIC0xNyw3ICsxNyw2IEBACiAJaS0+aV9naWQgPSBocGZzX3NiKHNiKS0+c2JfZ2lkOwogCWktPmlfbW9kZSA9IGhwZnNfc2Ioc2IpLT5zYl9tb2RlOwogCWhwZnNfaW5vZGUtPmlfY29udiA9IGhwZnNfc2Ioc2IpLT5zYl9jb252OwotCWktPmlfYmxrc2l6ZSA9IDUxMjsKIAlpLT5pX3NpemUgPSAtMTsKIAlpLT5pX2Jsb2NrcyA9IC0xOwogCQpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9uYW1laS5jIGIvZnMvaHBmcy9uYW1laS5jCmluZGV4IDU5ZTdkYzEuLjI1MDdlNzMgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvbmFtZWkuYworKysgYi9mcy9ocGZzL25hbWVpLmMKQEAgLTg5LDcgKzg5LDcgQEAKIAlicmVsc2UoYmgpOwogCWhwZnNfbWFya180YnVmZmVyc19kaXJ0eSgmcWJoMCk7CiAJaHBmc19icmVsc2U0KCZxYmgwKTsKLQlkaXItPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKIAlpbnNlcnRfaW5vZGVfaGFzaChyZXN1bHQpOwogCiAJaWYgKHJlc3VsdC0+aV91aWQgIT0gY3VycmVudC0+ZnN1aWQgfHwKQEAgLTQzNCw3ICs0MzQsNyBAQAogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PU1BDOwogCWRlZmF1bHQ6Ci0JCWlub2RlLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsoaW5vZGUpOwogCQllcnIgPSAwOwogCX0KIAlnb3RvIG91dDsKQEAgLTQ5NCw4ICs0OTQsOCBAQAogCQllcnIgPSAtRU5PU1BDOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlkaXItPmlfbmxpbmstLTsKLQkJaW5vZGUtPmlfbmxpbmsgPSAwOworCQlkcm9wX25saW5rKGRpcik7CisJCWNsZWFyX25saW5rKGlub2RlKTsKIAkJZXJyID0gMDsKIAl9CiAJZ290byBvdXQ7CkBAIC01OTAsNyArNTkwLDcgQEAKIAkJaW50IHI7CiAJCWlmICgociA9IGhwZnNfcmVtb3ZlX2RpcmVudChvbGRfZGlyLCBkbm8sIGRlcCwgJnFiaCwgMSkpICE9IDIpIHsKIAkJCWlmICgobmRlID0gbWFwX2RpcmVudChuZXdfZGlyLCBocGZzX2kobmV3X2RpciktPmlfZG5vLCAoY2hhciAqKW5ld19uYW1lLCBuZXdfbGVuLCBOVUxMLCAmcWJoMSkpKSB7Ci0JCQkJbmV3X2lub2RlLT5pX25saW5rID0gMDsKKwkJCQljbGVhcl9ubGluayhuZXdfaW5vZGUpOwogCQkJCWNvcHlfZGUobmRlLCAmZGUpOwogCQkJCW1lbWNweShuZGUtPm5hbWUsIG5ld19uYW1lLCBuZXdfbGVuKTsKIAkJCQlocGZzX21hcmtfNGJ1ZmZlcnNfZGlydHkoJnFiaDEpOwpAQCAtNjM1LDggKzYzNSw4IEBACiAJZW5kOgogCWhwZnNfaShpKS0+aV9wYXJlbnRfZGlyID0gbmV3X2Rpci0+aV9pbm87CiAJaWYgKFNfSVNESVIoaS0+aV9tb2RlKSkgewotCQluZXdfZGlyLT5pX25saW5rKys7Ci0JCW9sZF9kaXItPmlfbmxpbmstLTsKKwkJaW5jX25saW5rKG5ld19kaXIpOworCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCX0KIAlpZiAoKGZub2RlID0gaHBmc19tYXBfZm5vZGUoaS0+aV9zYiwgaS0+aV9pbm8sICZiaCkpKSB7CiAJCWZub2RlLT51cCA9IG5ld19kaXItPmlfaW5vOwpkaWZmIC0tZ2l0IGEvZnMvaHBmcy9zdXBlci5jIGIvZnMvaHBmcy9zdXBlci5jCmluZGV4IDhmZTUxYzMuLjQ1MGI1ZTAgMTAwNjQ0Ci0tLSBhL2ZzL2hwZnMvc3VwZXIuYworKysgYi9mcy9ocGZzL3N1cGVyLmMKQEAgLTIwMyw4ICsyMDMsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KGhwZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiaHBmc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShocGZzX2lub2RlX2NhY2hlcCk7CiB9CiAKIC8qCkBAIC00NjIsMTEgKzQ2MSwxMCBAQAogCiAJaW50IG87CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2YoKnNiaSksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKIAlzLT5zX2ZzX2luZm8gPSBzYmk7Ci0JbWVtc2V0KHNiaSwgMCwgc2l6ZW9mKCpzYmkpKTsKIAogCXNiaS0+c2JfYm1wX2RpciA9IE5VTEw7CiAJc2JpLT5zYl9jcF90YWJsZSA9IE5VTEw7CmRpZmYgLS1naXQgYS9mcy9ocHBmcy9ocHBmc19rZXJuLmMgYi9mcy9ocHBmcy9ocHBmc19rZXJuLmMKaW5kZXggM2E5YmRmNTguLmRjYjZkMmUgMTAwNjQ0Ci0tLSBhL2ZzL2hwcGZzL2hwcGZzX2tlcm4uYworKysgYi9mcy9ocHBmcy9ocHBmc19rZXJuLmMKQEAgLTE1Miw3ICsxNTIsNiBAQAogCWluby0+aV9tb2RlID0gcHJvY19pbm8tPmlfbW9kZTsKIAlpbm8tPmlfbmxpbmsgPSBwcm9jX2luby0+aV9ubGluazsKIAlpbm8tPmlfc2l6ZSA9IHByb2NfaW5vLT5pX3NpemU7Ci0JaW5vLT5pX2Jsa3NpemUgPSBwcm9jX2luby0+aV9ibGtzaXplOwogCWluby0+aV9ibG9ja3MgPSBwcm9jX2luby0+aV9ibG9ja3M7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKaW5kZXggYzM5MjBjOS4uNWUwM2IyZiAxMDA2NDQKLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmMKKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmMKQEAgLTIyOSw3ICsyMjksNyBAQAogCWNsZWFyX2lub2RlKGlub2RlKTsKIH0KIAotc3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZvcmdldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQorc3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZvcmdldF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKSBfX3JlbGVhc2VzKGlub2RlX2xvY2spCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOwogCkBAIC0zNTcsNyArMzU3LDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IHVpZDsKIAkJaW5vZGUtPmlfZ2lkID0gZ2lkOwotCQlpbm9kZS0+aV9ibGtzaXplID0gSFBBR0VfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmaHVnZXRsYmZzX2FvcHM7CiAJCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSZodWdldGxiZnNfYmFja2luZ19kZXZfaW5mbzsKQEAgLTM3OCw3ICszNzcsNyBAQAogCQkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAogCQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JCQlpbm9kZS0+aV9ubGluaysrOworCQkJaW5jX25saW5rKGlub2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZMTks6CiAJCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTQxOSw3ICs0MTgsNyBAQAogewogCWludCByZXR2YWwgPSBodWdldGxiZnNfbWtub2QoZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGRElSLCAwKTsKIAlpZiAoIXJldHZhbCkKLQkJZGlyLT5pX25saW5rKys7CisJCWluY19ubGluayhkaXIpOwogCXJldHVybiByZXR2YWw7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL2lub2RlLmMgYi9mcy9pbm9kZS5jCmluZGV4IDBiZjlmMDQuLmFkYTc2NDMgMTAwNjQ0Ci0tLSBhL2ZzL2lub2RlLmMKKysrIGIvZnMvaW5vZGUuYwpAQCAtMTMzLDcgKzEzMyw2IEBACiAJCWlub2RlLT5pX2JkZXYgPSBOVUxMOwogCQlpbm9kZS0+aV9jZGV2ID0gTlVMTDsKIAkJaW5vZGUtPmlfcmRldiA9IDA7Ci0JCWlub2RlLT5pX3NlY3VyaXR5ID0gTlVMTDsKIAkJaW5vZGUtPmRpcnRpZWRfd2hlbiA9IDA7CiAJCWlmIChzZWN1cml0eV9pbm9kZV9hbGxvYyhpbm9kZSkpIHsKIAkJCWlmIChpbm9kZS0+aV9zYi0+c19vcC0+ZGVzdHJveV9pbm9kZSkKQEAgLTE2Myw3ICsxNjIsNyBAQAogCQkJCWJkaSA9IHNiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm87CiAJCQltYXBwaW5nLT5iYWNraW5nX2Rldl9pbmZvID0gYmRpOwogCQl9Ci0JCW1lbXNldCgmaW5vZGUtPnUsIDAsIHNpemVvZihpbm9kZS0+dSkpOworCQlpbm9kZS0+aV9wcml2YXRlID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZyA9IG1hcHBpbmc7CiAJfQogCXJldHVybiBpbm9kZTsKQEAgLTI1NCw5ICsyNTMsOSBAQAogCURRVU9UX0RST1AoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9zYiAmJiBpbm9kZS0+aV9zYi0+c19vcC0+Y2xlYXJfaW5vZGUpCiAJCWlub2RlLT5pX3NiLT5zX29wLT5jbGVhcl9pbm9kZShpbm9kZSk7Ci0JaWYgKGlub2RlLT5pX2JkZXYpCisJaWYgKFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfYmRldikKIAkJYmRfZm9yZ2V0KGlub2RlKTsKLQlpZiAoaW5vZGUtPmlfY2RldikKKwlpZiAoU19JU0NIUihpbm9kZS0+aV9tb2RlKSAmJiBpbm9kZS0+aV9jZGV2KQogCQljZF9mb3JnZXQoaW5vZGUpOwogCWlub2RlLT5pX3N0YXRlID0gSV9DTEVBUjsKIH0KQEAgLTM2MywyNyArMzYyLDYgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChpbnZhbGlkYXRlX2lub2Rlcyk7Ci0gCi1pbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQotewotCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBnZXRfc3VwZXIoYmRldik7Ci0JaW50IHJlcyA9IDA7Ci0KLQlpZiAoc2IpIHsKLQkJLyoKLQkJICogbm8gbmVlZCB0byBsb2NrIHRoZSBzdXBlciwgZ2V0X3N1cGVyIGhvbGRzIHRoZQotCQkgKiByZWFkIG11dGV4IHNvIHRoZSBmaWxlc3lzdGVtIGNhbm5vdCBnbyBhd2F5Ci0JCSAqIHVuZGVyIHVzICgtPnB1dF9zdXBlciBydW5zIHdpdGggdGhlIHdyaXRlIGxvY2sKLQkJICogaG9sZCkuCi0JCSAqLwotCQlzaHJpbmtfZGNhY2hlX3NiKHNiKTsKLQkJcmVzID0gaW52YWxpZGF0ZV9pbm9kZXMoc2IpOwotCQlkcm9wX3N1cGVyKHNiKTsKLQl9Ci0JaW52YWxpZGF0ZV9iZGV2KGJkZXYsIDApOwotCXJldHVybiByZXM7Ci19Ci1FWFBPUlRfU1lNQk9MKF9faW52YWxpZGF0ZV9kZXZpY2UpOwogCiBzdGF0aWMgaW50IGNhbl91bnVzZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpkaWZmIC0tZ2l0IGEvZnMvaW50ZXJuYWwuaCBiL2ZzL2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEwMDEyNgotLS0gL2Rldi9udWxsCisrKyBiL2ZzL2ludGVybmFsLmgKQEAgLTAsMCArMSw1NSBAQAorLyogZnMvIGludGVybmFsIGRlZmluaXRpb25zCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFJlZCBIYXQsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIFdyaXR0ZW4gYnkgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bDMyLmg+CisKK3N0cnVjdCBzdXBlcl9ibG9jazsKKworLyoKKyAqIGJsb2NrX2Rldi5jCisgKi8KKyNpZmRlZiBDT05GSUdfQkxPQ0sKK2V4dGVybiBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKmJsb2NrZGV2X3N1cGVyYmxvY2s7CitleHRlcm4gdm9pZCBfX2luaXQgYmRldl9jYWNoZV9pbml0KHZvaWQpOworCitzdGF0aWMgaW5saW5lIGludCBzYl9pc19ibGtkZXZfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlyZXR1cm4gc2IgPT0gYmxvY2tkZXZfc3VwZXJibG9jazsKK30KKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZGV2X2NhY2hlX2luaXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSBpbnQgc2JfaXNfYmxrZGV2X3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworLyoKKyAqIGNoYXJfZGV2LmMKKyAqLworZXh0ZXJuIHZvaWQgX19pbml0IGNocmRldl9pbml0KHZvaWQpOworCisvKgorICogY29tcGF0X2lvY3RsLmMKKyAqLworI2lmZGVmIENPTkZJR19DT01QQVQKK2V4dGVybiBzdHJ1Y3QgaW9jdGxfdHJhbnMgaW9jdGxfc3RhcnRbXTsKK2V4dGVybiBpbnQgaW9jdGxfdGFibGVfc2l6ZTsKKyNlbmRpZgorCisvKgorICogbmFtZXNwYWNlLmMKKyAqLworZXh0ZXJuIGludCBjb3B5X21vdW50X29wdGlvbnMoY29uc3Qgdm9pZCBfX3VzZXIgKiwgdW5zaWduZWQgbG9uZyAqKTsKZGlmZiAtLWdpdCBhL2ZzL2lvcHJpby5jIGIvZnMvaW9wcmlvLmMKaW5kZXggNzhiMWRlYS4uNmRjNjcyMSAxMDA2NDQKLS0tIGEvZnMvaW9wcmlvLmMKKysrIGIvZnMvaW9wcmlvLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogZnMvaW9wcmlvLmMKICAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBKZW5zIEF4Ym9lIDxheGJvZUBrZXJuZWwuZGs+CiAgKgogICogSGVscGVyIGZ1bmN0aW9ucyBmb3Igc2V0dGluZy9xdWVyeWluZyBpbyBwcmlvcml0aWVzIG9mIHByb2Nlc3Nlcy4gVGhlCiAgKiBzeXN0ZW0gY2FsbHMgY2xvc2VseSBtaW1taWNrIGdldHByaW9yaXR5L3NldHByaW9yaXR5LCBzZWUgdGhlIG1hbiBwYWdlIGZvcgpAQCAtNDcsOCArNDcsOCBAQAogCS8qIHNlZSB3bWIoKSBpbiBjdXJyZW50X2lvX2NvbnRleHQoKSAqLwogCXNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpOwogCi0JaWYgKGlvYyAmJiBpb2MtPnNldF9pb3ByaW8pCi0JCWlvYy0+c2V0X2lvcHJpbyhpb2MsIGlvcHJpbyk7CisJaWYgKGlvYykKKwkJaW9jLT5pb3ByaW9fY2hhbmdlZCA9IDE7CiAKIAl0YXNrX3VubG9jayh0YXNrKTsKIAlyZXR1cm4gMDsKQEAgLTgxLDcgKzgxLDEyIEBACiAJfQogCiAJcmV0ID0gLUVTUkNIOwotCXJlYWRfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCS8qCisJICogV2Ugd2FudCBJT1BSSU9fV0hPX1BHUlAvSU9QUklPX1dIT19VU0VSIHRvIGJlICJhdG9taWMiLAorCSAqIHNvIHdlIGNhbid0IHVzZSByY3VfcmVhZF9sb2NrKCkuIFNlZSByZS1jb3B5IG9mIC0+aW9wcmlvCisJICogaW4gY29weV9wcm9jZXNzKCkuCisJICovCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlzd2l0Y2ggKHdoaWNoKSB7CiAJCWNhc2UgSU9QUklPX1dIT19QUk9DRVNTOgogCQkJaWYgKCF3aG8pCkBAIC0xMjQsNyArMTI5LDcgQEAKIAkJCXJldCA9IC1FSU5WQUw7CiAJfQogCi0JcmVhZF91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlyZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMTcwLDcgKzE3NSw3IEBACiAJaW50IHJldCA9IC1FU1JDSDsKIAlpbnQgdG1waW87CiAKLQlyZWFkX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOwogCXN3aXRjaCAod2hpY2gpIHsKIAkJY2FzZSBJT1BSSU9fV0hPX1BST0NFU1M6CiAJCQlpZiAoIXdobykKQEAgLTIyMSw3ICsyMjYsNyBAQAogCQkJcmV0ID0gLUVJTlZBTDsKIAl9CiAKLQlyZWFkX3VubG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9mcy9pc29mcy9pbm9kZS5jIGIvZnMvaXNvZnMvaW5vZGUuYwppbmRleCAxNDM5MTM2Li5jMzRiODYyIDEwMDY0NAotLS0gYS9mcy9pc29mcy9pbm9kZS5jCisrKyBiL2ZzL2lzb2ZzL2lub2RlLmMKQEAgLTk2LDkgKzk2LDcgQEAKIAogc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShpc29mc19pbm9kZV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPICJpc29faW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlICIKLQkJCQkJImZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koaXNvZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogc3RhdGljIGludCBpc29mc19yZW1vdW50KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCAqZmxhZ3MsIGNoYXIgKmRhdGEpCkBAIC01NTcsMTEgKzU1NSwxMCBAQAogCXN0cnVjdCBpc285NjYwX29wdGlvbnMJCW9wdDsKIAlzdHJ1Y3QgaXNvZnNfc2JfaW5mbwkgICAgICAqIHNiaTsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKCpzYmkpLCBHRlBfS0VSTkVMKTsKKwlzYmkgPSBremFsbG9jKHNpemVvZigqc2JpKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCiAJCXJldHVybiAtRU5PTUVNOwogCXMtPnNfZnNfaW5mbyA9IHNiaTsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2YoKnNiaSkpOwogCiAJaWYgKCFwYXJzZV9vcHRpb25zKChjaGFyICopZGF0YSwgJm9wdCkpCiAJCWdvdG8gb3V0X2ZyZWVzYmk7CkBAIC05NjMsMzAgKzk2MCwzMCBAQAogCQkJZ290byBhYm9ydDsKIAkJfQogCQkKLQkJaWYgKG5leHRibGspIHsKLQkJCXdoaWxlIChiX29mZiA+PSAob2Zmc2V0ICsgc2VjdF9zaXplKSkgewotCQkJCXN0cnVjdCBpbm9kZSAqbmlub2RlOwotCQkJCQotCQkJCW9mZnNldCArPSBzZWN0X3NpemU7Ci0JCQkJaWYgKG5leHRibGsgPT0gMCkKLQkJCQkJZ290byBhYm9ydDsKLQkJCQluaW5vZGUgPSBpc29mc19pZ2V0KGlub2RlLT5pX3NiLCBuZXh0YmxrLCBuZXh0b2ZmKTsKLQkJCQlpZiAoIW5pbm9kZSkKLQkJCQkJZ290byBhYm9ydDsKLQkJCQlmaXJzdGV4dCAgPSBJU09GU19JKG5pbm9kZSktPmlfZmlyc3RfZXh0ZW50OwotCQkJCXNlY3Rfc2l6ZSA9IElTT0ZTX0kobmlub2RlKS0+aV9zZWN0aW9uX3NpemUgPj4gSVNPRlNfQlVGRkVSX0JJVFMobmlub2RlKTsKLQkJCQluZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktPmlfbmV4dF9zZWN0aW9uX2Jsb2NrOwotCQkJCW5leHRvZmYgICA9IElTT0ZTX0kobmlub2RlKS0+aV9uZXh0X3NlY3Rpb25fb2Zmc2V0OwotCQkJCWlwdXQobmlub2RlKTsKLQkJCQkKLQkJCQlpZiAoKytzZWN0aW9uID4gMTAwKSB7Ci0JCQkJCXByaW50aygiaXNvZnNfZ2V0X2Jsb2NrczogTW9yZSB0aGFuIDEwMCBmaWxlIHNlY3Rpb25zID8hPywgYWJvcnRpbmcuLi5cbiIpOwotCQkJCQlwcmludGsoImlzb2ZzX2dldF9ibG9ja3M6IGJsb2NrPSVsZCBmaXJzdGV4dD0ldSBzZWN0X3NpemU9JXUgIgotCQkJCQkgICAgICAgIm5leHRibGs9JWx1IG5leHRvZmY9JWx1XG4iLAotCQkJCQkgICAgICAgaWJsb2NrLCBmaXJzdGV4dCwgKHVuc2lnbmVkKSBzZWN0X3NpemUsCi0JCQkJCSAgICAgICBuZXh0YmxrLCBuZXh0b2ZmKTsKLQkJCQkJZ290byBhYm9ydDsKLQkJCQl9CisJCS8qIE9uIHRoZSBsYXN0IHNlY3Rpb24sIG5leHRibGsgPT0gMCwgc2VjdGlvbiBzaXplIGlzIGxpa2VseSB0bworCQkgKiBleGNlZWQgc2VjdF9zaXplIGJ5IGEgcGFydGlhbCBibG9jaywgYW5kIGFjY2VzcyBiZXlvbmQgdGhlCisJCSAqIGVuZCBvZiB0aGUgZmlsZSB3aWxsIHJlYWNoIGJleW9uZCB0aGUgc2VjdGlvbiBzaXplLCB0b28uCisJCSAqLworCQl3aGlsZSAobmV4dGJsayAmJiAoYl9vZmYgPj0gKG9mZnNldCArIHNlY3Rfc2l6ZSkpKSB7CisJCQlzdHJ1Y3QgaW5vZGUgKm5pbm9kZTsKKworCQkJb2Zmc2V0ICs9IHNlY3Rfc2l6ZTsKKwkJCW5pbm9kZSA9IGlzb2ZzX2lnZXQoaW5vZGUtPmlfc2IsIG5leHRibGssIG5leHRvZmYpOworCQkJaWYgKCFuaW5vZGUpCisJCQkJZ290byBhYm9ydDsKKwkJCWZpcnN0ZXh0ICA9IElTT0ZTX0kobmlub2RlKS0+aV9maXJzdF9leHRlbnQ7CisJCQlzZWN0X3NpemUgPSBJU09GU19JKG5pbm9kZSktPmlfc2VjdGlvbl9zaXplID4+IElTT0ZTX0JVRkZFUl9CSVRTKG5pbm9kZSk7CisJCQluZXh0YmxrICAgPSBJU09GU19JKG5pbm9kZSktPmlfbmV4dF9zZWN0aW9uX2Jsb2NrOworCQkJbmV4dG9mZiAgID0gSVNPRlNfSShuaW5vZGUpLT5pX25leHRfc2VjdGlvbl9vZmZzZXQ7CisJCQlpcHV0KG5pbm9kZSk7CisKKwkJCWlmICgrK3NlY3Rpb24gPiAxMDApIHsKKwkJCQlwcmludGsoImlzb2ZzX2dldF9ibG9ja3M6IE1vcmUgdGhhbiAxMDAgZmlsZSBzZWN0aW9ucyA/IT8sIGFib3J0aW5nLi4uXG4iKTsKKwkJCQlwcmludGsoImlzb2ZzX2dldF9ibG9ja3M6IGJsb2NrPSVsZCBmaXJzdGV4dD0ldSBzZWN0X3NpemU9JXUgIgorCQkJCSAgICAgICAibmV4dGJsaz0lbHUgbmV4dG9mZj0lbHVcbiIsCisJCQkJICAgICAgIGlibG9jaywgZmlyc3RleHQsICh1bnNpZ25lZCkgc2VjdF9zaXplLAorCQkJCSAgICAgICBuZXh0YmxrLCBuZXh0b2ZmKTsKKwkJCQlnb3RvIGFib3J0OwogCQkJfQogCQl9CiAJCQpAQCAtMTIzOCw3ICsxMjM1LDcgQEAKIAl9CiAJaW5vZGUtPmlfdWlkID0gc2JpLT5zX3VpZDsKIAlpbm9kZS0+aV9naWQgPSBzYmktPnNfZ2lkOwotCWlub2RlLT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsa3NpemUgPSAwOworCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAKIAllaS0+aV9mb3JtYXRfcGFybVswXSA9IDA7CiAJZWktPmlfZm9ybWF0X3Bhcm1bMV0gPSAwOwpAQCAtMTI5NCw3ICsxMjkxLDYgQEAKIAkJCSAgICAgIGlzb251bV83MTEgKGRlLT5leHRfYXR0cl9sZW5ndGgpKTsKIAogCS8qIFNldCB0aGUgbnVtYmVyIG9mIGJsb2NrcyBmb3Igc3RhdCgpIC0gc2hvdWxkIGJlIGRvbmUgYmVmb3JlIFJSICovCi0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsgLyogRm9yIHN0YXQoKSBvbmx5ICovCiAJaW5vZGUtPmlfYmxvY2tzICA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwogCiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2piZC9jaGVja3BvaW50LmMgYi9mcy9qYmQvY2hlY2twb2ludC5jCmluZGV4IDQ3Njc4YTIuLjAyMDhjYzcgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9jaGVja3BvaW50LmMKKysrIGIvZnMvamJkL2NoZWNrcG9pbnQuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBsaW51eC9mcy9jaGVja3BvaW50LmMKLSAqIAorICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDE5OTkKICAqCiAgKiBDb3B5cmlnaHQgMTk5OSBSZWQgSGF0IFNvZnR3YXJlIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCkBAIC05LDggKzksOCBAQAogICogdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBvciBhdCB5b3VyCiAgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCi0gKiBDaGVja3BvaW50IHJvdXRpbmVzIGZvciB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGpvdXJuYWxpbmcgY29kZS4gIAotICogUGFydCBvZiB0aGUgZXh0MmZzIGpvdXJuYWxpbmcgc3lzdGVtLiAgCisgKiBDaGVja3BvaW50IHJvdXRpbmVzIGZvciB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGpvdXJuYWxpbmcgY29kZS4KKyAqIFBhcnQgb2YgdGhlIGV4dDJmcyBqb3VybmFsaW5nIHN5c3RlbS4KICAqCiAgKiBDaGVja3BvaW50aW5nIGlzIHRoZSBwcm9jZXNzIG9mIGVuc3VyaW5nIHRoYXQgYSBzZWN0aW9uIG9mIHRoZSBsb2cgaXMKICAqIGNvbW1pdHRlZCBmdWxseSB0byBkaXNrLCBzbyB0aGF0IHRoYXQgcG9ydGlvbiBvZiB0aGUgbG9nIGNhbiBiZQpAQCAtMTQ1LDYgKzE0NSw3IEBACiAgKiBqYmRfdW5sb2NrX2JoX3N0YXRlKCkuCiAgKi8KIHN0YXRpYyB2b2lkIGpiZF9zeW5jX2JoKGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKKwlfX3JlbGVhc2VzKGpvdXJuYWwtPmpfbGlzdF9sb2NrKQogewogCWdldF9iaChiaCk7CiAJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfbGlzdF9sb2NrKTsKQEAgLTIyNSw3ICsyMjYsNyBAQAogICogVHJ5IHRvIGZsdXNoIG9uZSBidWZmZXIgZnJvbSB0aGUgY2hlY2twb2ludCBsaXN0IHRvIGRpc2suCiAgKgogICogUmV0dXJuIDEgaWYgc29tZXRoaW5nIGhhcHBlbmVkIHdoaWNoIHJlcXVpcmVzIHVzIHRvIGFib3J0IHRoZSBjdXJyZW50Ci0gKiBzY2FuIG9mIHRoZSBjaGVja3BvaW50IGxpc3QuICAKKyAqIHNjYW4gb2YgdGhlIGNoZWNrcG9pbnQgbGlzdC4KICAqCiAgKiBDYWxsZWQgd2l0aCBqX2xpc3RfbG9jayBoZWxkIGFuZCBkcm9wcyBpdCBpZiAxIGlzIHJldHVybmVkCiAgKiBDYWxsZWQgdW5kZXIgamJkX2xvY2tfYmhfc3RhdGUoamgyYmgoamgpKSwgYW5kIGRyb3BzIGl0CkBAIC0yNjksNyArMjcwLDcgQEAKIAkJICogcG9zc2libHkgYmxvY2ssIHdoaWxlIHN0aWxsIGhvbGRpbmcgdGhlIGpvdXJuYWwgbG9jay4KIAkJICogV2UgY2Fubm90IGFmZm9yZCB0byBsZXQgdGhlIHRyYW5zYWN0aW9uIGxvZ2ljIHN0YXJ0CiAJCSAqIG1lc3NpbmcgYXJvdW5kIHdpdGggdGhpcyBidWZmZXIgYmVmb3JlIHdlIHdyaXRlIGl0IHRvCi0JCSAqIGRpc2ssIGFzIHRoYXQgd291bGQgYnJlYWsgcmVjb3ZlcmFiaWxpdHkuICAKKwkJICogZGlzaywgYXMgdGhhdCB3b3VsZCBicmVhayByZWNvdmVyYWJpbGl0eS4KIAkJICovCiAJCUJVRkZFUl9UUkFDRShiaCwgInF1ZXVlIik7CiAJCWdldF9iaChiaCk7CkBAIC0yOTIsNyArMjkzLDcgQEAKICAqIFBlcmZvcm0gYW4gYWN0dWFsIGNoZWNrcG9pbnQuIFdlIHRha2UgdGhlIGZpcnN0IHRyYW5zYWN0aW9uIG9uIHRoZQogICogbGlzdCBvZiB0cmFuc2FjdGlvbnMgdG8gYmUgY2hlY2twb2ludGVkIGFuZCBzZW5kIGFsbCBpdHMgYnVmZmVycwogICogdG8gZGlzay4gV2Ugc3VibWl0IGxhcmdlciBjaHVua3Mgb2YgZGF0YSBhdCBvbmNlLgotICogCisgKgogICogVGhlIGpvdXJuYWwgc2hvdWxkIGJlIGxvY2tlZCBiZWZvcmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgogICovCiBpbnQgbG9nX2RvX2NoZWNrcG9pbnQoam91cm5hbF90ICpqb3VybmFsKQpAQCAtMzAzLDEwICszMDQsMTAgQEAKIAogCWpiZF9kZWJ1ZygxLCAiU3RhcnQgY2hlY2twb2ludFxuIik7CiAKLQkvKiAKKwkvKgogCSAqIEZpcnN0IHRoaW5nOiBpZiB0aGVyZSBhcmUgYW55IHRyYW5zYWN0aW9ucyBpbiB0aGUgbG9nIHdoaWNoCiAJICogZG9uJ3QgbmVlZCBjaGVja3BvaW50aW5nLCBqdXN0IGVsaW1pbmF0ZSB0aGVtIGZyb20gdGhlCi0JICogam91cm5hbCBzdHJhaWdodCBhd2F5LiAgCisJICogam91cm5hbCBzdHJhaWdodCBhd2F5LgogCSAqLwogCXJlc3VsdCA9IGNsZWFudXBfam91cm5hbF90YWlsKGpvdXJuYWwpOwogCWpiZF9kZWJ1ZygxLCAiY2xlYW51cF9qb3VybmFsX3RhaWwgcmV0dXJuZWQgJWRcbiIsIHJlc3VsdCk7CkBAIC0zODQsOSArMzg1LDkgQEAKICAqIHdlIGhhdmUgYWxyZWFkeSBnb3QgcmlkIG9mIGFueSBzaW5jZSB0aGUgbGFzdCB1cGRhdGUgb2YgdGhlIGxvZyB0YWlsCiAgKiBpbiB0aGUgam91cm5hbCBzdXBlcmJsb2NrLiAgSWYgc28sIHdlIGNhbiBpbnN0YW50bHkgcm9sbCB0aGUKICAqIHN1cGVyYmxvY2sgZm9yd2FyZCB0byByZW1vdmUgdGhvc2UgdHJhbnNhY3Rpb25zIGZyb20gdGhlIGxvZy4KLSAqIAorICoKICAqIFJldHVybiA8MCBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLCAxIGlmIHRoZXJlIHdhcyBub3RoaW5nIHRvIGNsZWFuIHVwLgotICogCisgKgogICogQ2FsbGVkIHdpdGggdGhlIGpvdXJuYWwgbG9jayBoZWxkLgogICoKICAqIFRoaXMgaXMgdGhlIG9ubHkgcGFydCBvZiB0aGUgam91cm5hbGluZyBjb2RlIHdoaWNoIHJlYWxseSBuZWVkcyB0byBiZQpAQCAtNDAzLDggKzQwNCw4IEBACiAJdW5zaWduZWQgbG9uZwlibG9ja25yLCBmcmVlZDsKIAogCS8qIE9LLCB3b3JrIG91dCB0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIHJlbWFpbmluZyBpbiB0aGUgbG9nLCBhbmQKLQkgKiB0aGUgbG9nIGJsb2NrIGl0IHN0YXJ0cyBhdC4gCi0JICogCisJICogdGhlIGxvZyBibG9jayBpdCBzdGFydHMgYXQuCisJICoKIAkgKiBJZiB0aGUgbG9nIGlzIG5vdyBlbXB0eSwgd2UgbmVlZCB0byB3b3JrIG91dCB3aGljaCBpcyB0aGUKIAkgKiBuZXh0IHRyYW5zYWN0aW9uIElEIHdlIHdpbGwgd3JpdGUsIGFuZCB3aGVyZSBpdCB3aWxsCiAJICogc3RhcnQuICovCkBAIC00NzksNyArNDgwLDcgQEAKIAlpZiAoIWpoKQogCQlyZXR1cm4gMDsKIAotIAlsYXN0X2poID0gamgtPmJfY3BwcmV2OworCWxhc3RfamggPSBqaC0+Yl9jcHByZXY7CiAJZG8gewogCQlqaCA9IG5leHRfamg7CiAJCW5leHRfamggPSBqaC0+Yl9jcG5leHQ7CkBAIC01NTcsNyArNTU4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKiAKKy8qCiAgKiBqb3VybmFsX3JlbW92ZV9jaGVja3BvaW50OiBjYWxsZWQgYWZ0ZXIgYSBidWZmZXIgaGFzIGJlZW4gY29tbWl0dGVkCiAgKiB0byBkaXNrIChlaXRoZXIgYnkgYmVpbmcgd3JpdGUtYmFjayBmbHVzaGVkIHRvIGRpc2ssIG9yIGJlaW5nCiAgKiBjb21taXR0ZWQgdG8gdGhlIGxvZykuCkBAIC02MzUsNyArNjM2LDcgQEAKICAqIENhbGxlZCB3aXRoIHRoZSBqb3VybmFsIGxvY2tlZC4KICAqIENhbGxlZCB3aXRoIGpfbGlzdF9sb2NrIGhlbGQuCiAgKi8KLXZvaWQgX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLCAKK3ZvaWQgX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLAogCQkJICAgICAgIHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uKQogewogCUpCVUZGRVJfVFJBQ0UoamgsICJlbnRyeSIpOwpAQCAtNjU3LDcgKzY1OCw3IEBACiAKIC8qCiAgKiBXZSd2ZSBmaW5pc2hlZCB3aXRoIHRoaXMgdHJhbnNhY3Rpb24gc3RydWN0dXJlOiBhZGlvcy4uLgotICogCisgKgogICogVGhlIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBubyBsaW5rcyBleGNlcHQgZm9yIHRoZSBjaGVja3BvaW50IGJ5IHRoaXMKICAqIHBvaW50LgogICoKZGlmZiAtLWdpdCBhL2ZzL2piZC9qb3VybmFsLmMgYi9mcy9qYmQvam91cm5hbC5jCmluZGV4IGY2NjcyNGMuLjdhZjYwOTkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9qb3VybmFsLmMKKysrIGIvZnMvamJkL2pvdXJuYWwuYwpAQCAtMTgxLDcgKzE4MSw3IEBACiAJCQkJCQl0cmFuc2FjdGlvbi0+dF9leHBpcmVzKSkKIAkJCXNob3VsZF9zbGVlcCA9IDA7CiAJCWlmIChqb3VybmFsLT5qX2ZsYWdzICYgSkZTX1VOTU9VTlQpCi0gCQkJc2hvdWxkX3NsZWVwID0gMDsKKwkJCXNob3VsZF9zbGVlcCA9IDA7CiAJCWlmIChzaG91bGRfc2xlZXApIHsKIAkJCXNwaW5fdW5sb2NrKCZqb3VybmFsLT5qX3N0YXRlX2xvY2spOwogCQkJc2NoZWR1bGUoKTsKQEAgLTI3MSw3ICsyNzEsNyBAQAogaW50IGpvdXJuYWxfd3JpdGVfbWV0YWRhdGFfYnVmZmVyKHRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uLAogCQkJCSAgc3RydWN0IGpvdXJuYWxfaGVhZCAgKmpoX2luLAogCQkJCSAgc3RydWN0IGpvdXJuYWxfaGVhZCAqKmpoX291dCwKLQkJCQkgIGludCBibG9ja25yKQorCQkJCSAgdW5zaWduZWQgbG9uZyBibG9ja25yKQogewogCWludCBuZWVkX2NvcHlfb3V0ID0gMDsKIAlpbnQgZG9uZV9jb3B5X291dCA9IDA7CkBAIC01NzgsNyArNTc4LDcgQEAKICAqIHRoaXMgaXMgYSBuby1vcC4gIElmIG5lZWRlZCwgd2UgY2FuIHVzZSBqX2Jsa19vZmZzZXQgLSBldmVyeXRoaW5nIGlzCiAgKiByZWFkeS4KICAqLwotaW50IGpvdXJuYWxfYm1hcChqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGxvbmcgYmxvY2tuciwgCitpbnQgam91cm5hbF9ibWFwKGpvdXJuYWxfdCAqam91cm5hbCwgdW5zaWduZWQgbG9uZyBibG9ja25yLAogCQkgdW5zaWduZWQgbG9uZyAqcmV0cCkKIHsKIAlpbnQgZXJyID0gMDsKQEAgLTY5NiwxMyArNjk2LDEzIEBACiAgKiAgQGJkZXY6IEJsb2NrIGRldmljZSBvbiB3aGljaCB0byBjcmVhdGUgdGhlIGpvdXJuYWwKICAqICBAZnNfZGV2OiBEZXZpY2Ugd2hpY2ggaG9sZCBqb3VybmFsbGVkIGZpbGVzeXN0ZW0gZm9yIHRoaXMgam91cm5hbC4KICAqICBAc3RhcnQ6IEJsb2NrIG5yIFN0YXJ0IG9mIGpvdXJuYWwuCi0gKiAgQGxlbjogIExlbmdodCBvZiB0aGUgam91cm5hbCBpbiBibG9ja3MuCisgKiAgQGxlbjogIExlbmd0aCBvZiB0aGUgam91cm5hbCBpbiBibG9ja3MuCiAgKiAgQGJsb2Nrc2l6ZTogYmxvY2tzaXplIG9mIGpvdXJuYWxsaW5nIGRldmljZQogICogIEByZXR1cm5zOiBhIG5ld2x5IGNyZWF0ZWQgam91cm5hbF90ICoKLSAqICAKKyAqCiAgKiAgam91cm5hbF9pbml0X2RldiBjcmVhdGVzIGEgam91cm5hbCB3aGljaCBtYXBzIGEgZml4ZWQgY29udGlndW91cwogICogIHJhbmdlIG9mIGJsb2NrcyBvbiBhbiBhcmJpdHJhcnkgYmxvY2sgZGV2aWNlLgotICogCisgKgogICovCiBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfZGV2KHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpmc19kZXYsCkBAIC03MTUsMTggKzcxNSw4IEBACiAJaWYgKCFqb3VybmFsKQogCQlyZXR1cm4gTlVMTDsKIAotCWpvdXJuYWwtPmpfZGV2ID0gYmRldjsKLQlqb3VybmFsLT5qX2ZzX2RldiA9IGZzX2RldjsKLQlqb3VybmFsLT5qX2Jsa19vZmZzZXQgPSBzdGFydDsKLQlqb3VybmFsLT5qX21heGxlbiA9IGxlbjsKLQlqb3VybmFsLT5qX2Jsb2Nrc2l6ZSA9IGJsb2Nrc2l6ZTsKLQotCWJoID0gX19nZXRibGsoam91cm5hbC0+al9kZXYsIHN0YXJ0LCBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSk7Ci0JSl9BU1NFUlQoYmggIT0gTlVMTCk7Ci0Jam91cm5hbC0+al9zYl9idWZmZXIgPSBiaDsKLQlqb3VybmFsLT5qX3N1cGVyYmxvY2sgPSAoam91cm5hbF9zdXBlcmJsb2NrX3QgKiliaC0+Yl9kYXRhOwotCiAJLyogam91cm5hbCBkZXNjcmlwdG9yIGNhbiBzdG9yZSB1cCB0byBuIGJsb2NrcyAtYnp6eiAqLworCWpvdXJuYWwtPmpfYmxvY2tzaXplID0gYmxvY2tzaXplOwogCW4gPSBqb3VybmFsLT5qX2Jsb2Nrc2l6ZSAvIHNpemVvZihqb3VybmFsX2Jsb2NrX3RhZ190KTsKIAlqb3VybmFsLT5qX3didWZzaXplID0gbjsKIAlqb3VybmFsLT5qX3didWYgPSBrbWFsbG9jKG4gKiBzaXplb2Yoc3RydWN0IGJ1ZmZlcl9oZWFkKiksIEdGUF9LRVJORUwpOwpAQCAtNzM2LDE0ICs3MjYsMjMgQEAKIAkJa2ZyZWUoam91cm5hbCk7CiAJCWpvdXJuYWwgPSBOVUxMOwogCX0KKwlqb3VybmFsLT5qX2RldiA9IGJkZXY7CisJam91cm5hbC0+al9mc19kZXYgPSBmc19kZXY7CisJam91cm5hbC0+al9ibGtfb2Zmc2V0ID0gc3RhcnQ7CisJam91cm5hbC0+al9tYXhsZW4gPSBsZW47CisKKwliaCA9IF9fZ2V0YmxrKGpvdXJuYWwtPmpfZGV2LCBzdGFydCwgam91cm5hbC0+al9ibG9ja3NpemUpOworCUpfQVNTRVJUKGJoICE9IE5VTEwpOworCWpvdXJuYWwtPmpfc2JfYnVmZmVyID0gYmg7CisJam91cm5hbC0+al9zdXBlcmJsb2NrID0gKGpvdXJuYWxfc3VwZXJibG9ja190ICopYmgtPmJfZGF0YTsKIAogCXJldHVybiBqb3VybmFsOwogfQotIAotLyoqIAorCisvKioKICAqICBqb3VybmFsX3QgKiBqb3VybmFsX2luaXRfaW5vZGUgKCkgLSBjcmVhdGVzIGEgam91cm5hbCB3aGljaCBtYXBzIHRvIGEgaW5vZGUuCiAgKiAgQGlub2RlOiBBbiBpbm9kZSB0byBjcmVhdGUgdGhlIGpvdXJuYWwgaW4KLSAqICAKKyAqCiAgKiBqb3VybmFsX2luaXRfaW5vZGUgY3JlYXRlcyBhIGpvdXJuYWwgd2hpY2ggbWFwcyBhbiBvbi1kaXNrIGlub2RlIGFzCiAgKiB0aGUgam91cm5hbC4gIFRoZSBpbm9kZSBtdXN0IGV4aXN0IGFscmVhZHksIG11c3Qgc3VwcG9ydCBibWFwKCkgYW5kCiAgKiBtdXN0IGhhdmUgYWxsIGRhdGEgYmxvY2tzIHByZWFsbG9jYXRlZC4KQEAgLTc2Myw3ICs3NjIsNyBAQAogCWpvdXJuYWwtPmpfaW5vZGUgPSBpbm9kZTsKIAlqYmRfZGVidWcoMSwKIAkJICAiam91cm5hbCAlcDogaW5vZGUgJXMvJWxkLCBzaXplICVMZCwgYml0cyAlZCwgYmxrc2l6ZSAlbGRcbiIsCi0JCSAgam91cm5hbCwgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywgCisJCSAgam91cm5hbCwgaW5vZGUtPmlfc2ItPnNfaWQsIGlub2RlLT5pX2lubywKIAkJICAobG9uZyBsb25nKSBpbm9kZS0+aV9zaXplLAogCQkgIGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUpOwogCkBAIC03OTgsMTAgKzc5NywxMCBAQAogCXJldHVybiBqb3VybmFsOwogfQogCi0vKiAKKy8qCiAgKiBJZiB0aGUgam91cm5hbCBpbml0IG9yIGNyZWF0ZSBhYm9ydHMsIHdlIG5lZWQgdG8gbWFyayB0aGUgam91cm5hbAogICogc3VwZXJibG9jayBhcyBiZWluZyBOVUxMIHRvIHByZXZlbnQgdGhlIGpvdXJuYWwgZGVzdHJveSBmcm9tIHdyaXRpbmcKLSAqIGJhY2sgYSBib2d1cyBzdXBlcmJsb2NrLiAKKyAqIGJhY2sgYSBib2d1cyBzdXBlcmJsb2NrLgogICovCiBzdGF0aWMgdm9pZCBqb3VybmFsX2ZhaWxfc3VwZXJibG9jayAoam91cm5hbF90ICpqb3VybmFsKQogewpAQCAtODIwLDcgKzgxOSw3IEBACiBzdGF0aWMgaW50IGpvdXJuYWxfcmVzZXQoam91cm5hbF90ICpqb3VybmFsKQogewogCWpvdXJuYWxfc3VwZXJibG9ja190ICpzYiA9IGpvdXJuYWwtPmpfc3VwZXJibG9jazsKLQl1bnNpZ25lZCBpbnQgZmlyc3QsIGxhc3Q7CisJdW5zaWduZWQgbG9uZyBmaXJzdCwgbGFzdDsKIAogCWZpcnN0ID0gYmUzMl90b19jcHUoc2ItPnNfZmlyc3QpOwogCWxhc3QgPSBiZTMyX3RvX2NwdShzYi0+c19tYXhsZW4pOwpAQCAtODQ0LDEzICs4NDMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqIAorLyoqCiAgKiBpbnQgam91cm5hbF9jcmVhdGUoKSAtIEluaXRpYWxpc2UgdGhlIG5ldyBqb3VybmFsIGZpbGUKICAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGNyZWF0ZS4gVGhpcyBzdHJ1Y3R1cmUgbXVzdCBoYXZlIGJlZW4gaW5pdGlhbGlzZWQKLSAqIAorICoKICAqIEdpdmVuIGEgam91cm5hbF90IHN0cnVjdHVyZSB3aGljaCB0ZWxscyB1cyB3aGljaCBkaXNrIGJsb2NrcyB3ZSBjYW4KICAqIHVzZSwgY3JlYXRlIGEgbmV3IGpvdXJuYWwgc3VwZXJibG9jayBhbmQgaW5pdGlhbGlzZSBhbGwgb2YgdGhlCi0gKiBqb3VybmFsIGZpZWxkcyBmcm9tIHNjcmF0Y2guICAKKyAqIGpvdXJuYWwgZmllbGRzIGZyb20gc2NyYXRjaC4KICAqKi8KIGludCBqb3VybmFsX2NyZWF0ZShqb3VybmFsX3QgKmpvdXJuYWwpCiB7CkBAIC05MTUsNyArOTE0LDcgQEAKIAlyZXR1cm4gam91cm5hbF9yZXNldChqb3VybmFsKTsKIH0KIAotLyoqIAorLyoqCiAgKiB2b2lkIGpvdXJuYWxfdXBkYXRlX3N1cGVyYmxvY2soKSAtIFVwZGF0ZSBqb3VybmFsIHNiIG9uIGRpc2suCiAgKiBAam91cm5hbDogVGhlIGpvdXJuYWwgdG8gdXBkYXRlLgogICogQHdhaXQ6IFNldCB0byAnMCcgaWYgeW91IGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgSU8gY29tcGxldGlvbi4KQEAgLTkzOSw3ICs5MzgsNyBAQAogCQkJCWpvdXJuYWwtPmpfdHJhbnNhY3Rpb25fc2VxdWVuY2UpIHsKIAkJamJkX2RlYnVnKDEsIkpCRDogU2tpcHBpbmcgc3VwZXJibG9jayB1cGRhdGUgb24gcmVjb3ZlcmVkIHNiICIKIAkJCSIoc3RhcnQgJWxkLCBzZXEgJWQsIGVycm5vICVkKVxuIiwKLQkJCWpvdXJuYWwtPmpfdGFpbCwgam91cm5hbC0+al90YWlsX3NlcXVlbmNlLCAKKwkJCWpvdXJuYWwtPmpfdGFpbCwgam91cm5hbC0+al90YWlsX3NlcXVlbmNlLAogCQkJam91cm5hbC0+al9lcnJubyk7CiAJCWdvdG8gb3V0OwogCX0KQEAgLTEwNjIsNyArMTA2MSw3IEBACiAvKioKICAqIGludCBqb3VybmFsX2xvYWQoKSAtIFJlYWQgam91cm5hbCBmcm9tIGRpc2suCiAgKiBAam91cm5hbDogSm91cm5hbCB0byBhY3Qgb24uCi0gKiAKKyAqCiAgKiBHaXZlbiBhIGpvdXJuYWxfdCBzdHJ1Y3R1cmUgd2hpY2ggdGVsbHMgdXMgd2hpY2ggZGlzayBibG9ja3MgY29udGFpbgogICogYSBqb3VybmFsLCByZWFkIHRoZSBqb3VybmFsIGZyb20gZGlzayB0byBpbml0aWFsaXNlIHRoZSBpbi1tZW1vcnkKICAqIHN0cnVjdHVyZXMuCkBAIC0xMDk0LDcgKzEwOTMsNyBAQAogCS8qCiAJICogQ3JlYXRlIGEgc2xhYiBmb3IgdGhpcyBibG9ja3NpemUKIAkgKi8KLQllcnIgPSBqb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihjcHVfdG9fYmUzMihzYi0+c19ibG9ja3NpemUpKTsKKwllcnIgPSBqb3VybmFsX2NyZWF0ZV9qYmRfc2xhYihiZTMyX3RvX2NwdShzYi0+c19ibG9ja3NpemUpKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCkBAIC0xMTcyLDkgKzExNzEsOSBAQAogICogQGNvbXBhdDogYml0bWFzayBvZiBjb21wYXRpYmxlIGZlYXR1cmVzCiAgKiBAcm86IGJpdG1hc2sgb2YgZmVhdHVyZXMgdGhhdCBmb3JjZSByZWFkLW9ubHkgbW91bnQKICAqIEBpbmNvbXBhdDogYml0bWFzayBvZiBpbmNvbXBhdGlibGUgZmVhdHVyZXMKLSAqIAorICoKICAqIENoZWNrIHdoZXRoZXIgdGhlIGpvdXJuYWwgdXNlcyBhbGwgb2YgYSBnaXZlbiBzZXQgb2YKLSAqIGZlYXR1cmVzLiAgUmV0dXJuIHRydWUgKG5vbi16ZXJvKSBpZiBpdCBkb2VzLiAKKyAqIGZlYXR1cmVzLiAgUmV0dXJuIHRydWUgKG5vbi16ZXJvKSBpZiBpdCBkb2VzLgogICoqLwogCiBpbnQgam91cm5hbF9jaGVja191c2VkX2ZlYXR1cmVzIChqb3VybmFsX3QgKmpvdXJuYWwsIHVuc2lnbmVkIGxvbmcgY29tcGF0LApAQCAtMTIwMyw3ICsxMjAyLDcgQEAKICAqIEBjb21wYXQ6IGJpdG1hc2sgb2YgY29tcGF0aWJsZSBmZWF0dXJlcwogICogQHJvOiBiaXRtYXNrIG9mIGZlYXR1cmVzIHRoYXQgZm9yY2UgcmVhZC1vbmx5IG1vdW50CiAgKiBAaW5jb21wYXQ6IGJpdG1hc2sgb2YgaW5jb21wYXRpYmxlIGZlYXR1cmVzCi0gKiAKKyAqCiAgKiBDaGVjayB3aGV0aGVyIHRoZSBqb3VybmFsaW5nIGNvZGUgc3VwcG9ydHMgdGhlIHVzZSBvZgogICogYWxsIG9mIGEgZ2l2ZW4gc2V0IG9mIGZlYXR1cmVzIG9uIHRoaXMgam91cm5hbC4gIFJldHVybiB0cnVlCiAgKiAobm9uLXplcm8pIGlmIGl0IGNhbi4gKi8KQEAgLTEyNDEsNyArMTI0MCw3IEBACiAgKiBAaW5jb21wYXQ6IGJpdG1hc2sgb2YgaW5jb21wYXRpYmxlIGZlYXR1cmVzCiAgKgogICogTWFyayBhIGdpdmVuIGpvdXJuYWwgZmVhdHVyZSBhcyBwcmVzZW50IG9uIHRoZQotICogc3VwZXJibG9jay4gIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVxdWVzdGVkIGZlYXR1cmVzIGNvdWxkIGJlIHNldC4gCisgKiBzdXBlcmJsb2NrLiAgUmV0dXJucyB0cnVlIGlmIHRoZSByZXF1ZXN0ZWQgZmVhdHVyZXMgY291bGQgYmUgc2V0LgogICoKICAqLwogCkBAIC0xMzI3LDcgKzEzMjYsNyBAQAogLyoqCiAgKiBpbnQgam91cm5hbF9mbHVzaCAoKSAtIEZsdXNoIGpvdXJuYWwKICAqIEBqb3VybmFsOiBKb3VybmFsIHRvIGFjdCBvbi4KLSAqIAorICoKICAqIEZsdXNoIGFsbCBkYXRhIGZvciBhIGdpdmVuIGpvdXJuYWwgdG8gZGlzayBhbmQgZW1wdHkgdGhlIGpvdXJuYWwuCiAgKiBGaWxlc3lzdGVtcyBjYW4gdXNlIHRoaXMgd2hlbiByZW1vdW50aW5nIHJlYWRvbmx5IHRvIGVuc3VyZSB0aGF0CiAgKiByZWNvdmVyeSBkb2VzIG5vdCBuZWVkIHRvIGhhcHBlbiBvbiByZW1vdW50LgpAQCAtMTM5NCw3ICsxMzkzLDcgQEAKICAqIGludCBqb3VybmFsX3dpcGUoKSAtIFdpcGUgam91cm5hbCBjb250ZW50cwogICogQGpvdXJuYWw6IEpvdXJuYWwgdG8gYWN0IG9uLgogICogQHdyaXRlOiBmbGFnIChzZWUgYmVsb3cpCi0gKiAKKyAqCiAgKiBXaXBlIG91dCBhbGwgb2YgdGhlIGNvbnRlbnRzIG9mIGEgam91cm5hbCwgc2FmZWx5LiAgVGhpcyB3aWxsIHByb2R1Y2UKICAqIGEgd2FybmluZyBpZiB0aGUgam91cm5hbCBjb250YWlucyBhbnkgdmFsaWQgcmVjb3ZlcnkgaW5mb3JtYXRpb24uCiAgKiBNdXN0IGJlIGNhbGxlZCBiZXR3ZWVuIGpvdXJuYWxfaW5pdF8qKCkgYW5kIGpvdXJuYWxfbG9hZCgpLgpAQCAtMTQ0OSw3ICsxNDQ4LDcgQEAKIAogLyoKICAqIEpvdXJuYWwgYWJvcnQgaGFzIHZlcnkgc3BlY2lmaWMgc2VtYW50aWNzLCB3aGljaCB3ZSBkZXNjcmliZQotICogZm9yIGpvdXJuYWwgYWJvcnQuIAorICogZm9yIGpvdXJuYWwgYWJvcnQuCiAgKgogICogVHdvIGludGVybmFsIGZ1bmN0aW9uLCB3aGljaCBwcm92aWRlIGFib3J0IHRvIHRlIGpiZCBsYXllcgogICogaXRzZWxmIGFyZSBoZXJlLgpAQCAtMTUwNCw3ICsxNTAzLDcgQEAKICAqIFBlcmZvcm0gYSBjb21wbGV0ZSwgaW1tZWRpYXRlIHNodXRkb3duIG9mIHRoZSBFTlRJUkUKICAqIGpvdXJuYWwgKG5vdCBvZiBhIHNpbmdsZSB0cmFuc2FjdGlvbikuICBUaGlzIG9wZXJhdGlvbiBjYW5ub3QgYmUKICAqIHVuZG9uZSB3aXRob3V0IGNsb3NpbmcgYW5kIHJlb3BlbmluZyB0aGUgam91cm5hbC4KLSAqICAgICAgICAgICAKKyAqCiAgKiBUaGUgam91cm5hbF9hYm9ydCBmdW5jdGlvbiBpcyBpbnRlbmRlZCB0byBzdXBwb3J0IGhpZ2hlciBsZXZlbCBlcnJvcgogICogcmVjb3ZlcnkgbWVjaGFuaXNtcyBzdWNoIGFzIHRoZSBleHQyL2V4dDMgcmVtb3VudC1yZWFkb25seSBlcnJvcgogICogbW9kZS4KQEAgLTE1MzgsNyArMTUzNyw3IEBACiAgKiBzdXBwbHkgYW4gZXJybm87IGEgbnVsbCBlcnJubyBpbXBsaWVzIHRoYXQgYWJzb2x1dGVseSBubyBmdXJ0aGVyCiAgKiB3cml0ZXMgYXJlIGRvbmUgdG8gdGhlIGpvdXJuYWwgKHVubGVzcyB0aGVyZSBhcmUgYW55IGFscmVhZHkgaW4KICAqIHByb2dyZXNzKS4KLSAqIAorICoKICAqLwogCiB2b2lkIGpvdXJuYWxfYWJvcnQoam91cm5hbF90ICpqb3VybmFsLCBpbnQgZXJybm8pCkBAIC0xNTQ2LDcgKzE1NDUsNyBAQAogCV9fam91cm5hbF9hYm9ydF9zb2Z0KGpvdXJuYWwsIGVycm5vKTsKIH0KIAotLyoqIAorLyoqCiAgKiBpbnQgam91cm5hbF9lcnJubyAoKSAtIHJldHVybnMgdGhlIGpvdXJuYWwncyBlcnJvciBzdGF0ZS4KICAqIEBqb3VybmFsOiBqb3VybmFsIHRvIGV4YW1pbmUuCiAgKgpAQCAtMTU3MCw3ICsxNTY5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiogCisvKioKICAqIGludCBqb3VybmFsX2NsZWFyX2VyciAoKSAtIGNsZWFycyB0aGUgam91cm5hbCdzIGVycm9yIHN0YXRlCiAgKiBAam91cm5hbDogam91cm5hbCB0byBhY3Qgb24uCiAgKgpAQCAtMTU5MCw3ICsxNTg5LDcgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiogCisvKioKICAqIHZvaWQgam91cm5hbF9hY2tfZXJyKCkgLSBBY2sgam91cm5hbCBlcnIuCiAgKiBAam91cm5hbDogam91cm5hbCB0byBhY3Qgb24uCiAgKgpAQCAtMTYxMiw3ICsxNjExLDcgQEAKIAogLyoKICAqIFNpbXBsZSBzdXBwb3J0IGZvciByZXRyeWluZyBtZW1vcnkgYWxsb2NhdGlvbnMuICBJbnRyb2R1Y2VkIHRvIGhlbHAgdG8KLSAqIGRlYnVnIGRpZmZlcmVudCBWTSBkZWFkbG9jayBhdm9pZGFuY2Ugc3RyYXRlZ2llcy4gCisgKiBkZWJ1ZyBkaWZmZXJlbnQgVk0gZGVhZGxvY2sgYXZvaWRhbmNlIHN0cmF0ZWdpZXMuCiAgKi8KIHZvaWQgKiBfX2piZF9rbWFsbG9jIChjb25zdCBjaGFyICp3aGVyZSwgc2l6ZV90IHNpemUsIGdmcF90IGZsYWdzLCBpbnQgcmV0cnkpCiB7CkBAIC0yMDQ3LDEzICsyMDQ2LDcgQEAKIHsKIAlpbnQgcmV0OwogCi0vKiBTdGF0aWMgY2hlY2sgZm9yIGRhdGEgc3RydWN0dXJlIGNvbnNpc3RlbmN5LiAgVGhlcmUncyBubyBjb2RlCi0gKiBpbnZva2VkIC0tLSB3ZSdsbCBqdXN0IGdldCBhIGxpbmtlciBmYWlsdXJlIGlmIHRoaW5ncyBhcmVuJ3QgcmlnaHQuCi0gKi8KLQlleHRlcm4gdm9pZCBqb3VybmFsX2JhZF9zdXBlcmJsb2NrX3NpemUodm9pZCk7Ci0JaWYgKHNpemVvZihzdHJ1Y3Qgam91cm5hbF9zdXBlcmJsb2NrX3MpICE9IDEwMjQpCi0JCWpvdXJuYWxfYmFkX3N1cGVyYmxvY2tfc2l6ZSgpOwotCisJQlVJTERfQlVHX09OKHNpemVvZihzdHJ1Y3Qgam91cm5hbF9zdXBlcmJsb2NrX3MpICE9IDEwMjQpOwogCiAJcmV0ID0gam91cm5hbF9pbml0X2NhY2hlcygpOwogCWlmIChyZXQgIT0gMCkKZGlmZiAtLWdpdCBhL2ZzL2piZC9yZWNvdmVyeS5jIGIvZnMvamJkL3JlY292ZXJ5LmMKaW5kZXggZGU1YmFmYjRlLi4xMTU2M2ZlIDEwMDY0NAotLS0gYS9mcy9qYmQvcmVjb3ZlcnkuYworKysgYi9mcy9qYmQvcmVjb3ZlcnkuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBsaW51eC9mcy9yZWNvdmVyeS5jCi0gKiAKKyAqCiAgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+LCAxOTk5CiAgKgogICogQ29weXJpZ2h0IDE5OTktMjAwMCBSZWQgSGF0IFNvZnR3YXJlIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiBKb3VybmFsIHJlY292ZXJ5IHJvdXRpbmVzIGZvciB0aGUgZ2VuZXJpYyBmaWxlc3lzdGVtIGpvdXJuYWxpbmcgY29kZTsKLSAqIHBhcnQgb2YgdGhlIGV4dDJmcyBqb3VybmFsaW5nIHN5c3RlbS4gIAorICogcGFydCBvZiB0aGUgZXh0MmZzIGpvdXJuYWxpbmcgc3lzdGVtLgogICovCiAKICNpZm5kZWYgX19LRVJORUxfXwpAQCAtMjUsOSArMjUsOSBAQAogCiAvKgogICogTWFpbnRhaW4gaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2dyZXNzIG9mIHRoZSByZWNvdmVyeSBqb2IsIHNvIHRoYXQKLSAqIHRoZSBkaWZmZXJlbnQgcGFzc2VzIGNhbiBjYXJyeSBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZW0uIAorICogdGhlIGRpZmZlcmVudCBwYXNzZXMgY2FuIGNhcnJ5IGluZm9ybWF0aW9uIGJldHdlZW4gdGhlbS4KICAqLwotc3RydWN0IHJlY292ZXJ5X2luZm8gCitzdHJ1Y3QgcmVjb3ZlcnlfaW5mbwogewogCXRpZF90CQlzdGFydF90cmFuc2FjdGlvbjsKIAl0aWRfdAkJZW5kX3RyYW5zYWN0aW9uOwpAQCAtNDYsNyArNDYsNyBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogLyogUmVsZWFzZSByZWFkYWhlYWQgYnVmZmVycyBhZnRlciB1c2UgKi8KLXZvaWQgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKQorc3RhdGljIHZvaWQgam91cm5hbF9icmVsc2VfYXJyYXkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiW10sIGludCBuKQogewogCXdoaWxlICgtLW4gPj0gMCkKIAkJYnJlbHNlIChiW25dKTsKQEAgLTExNiw3ICsxMTYsNyBAQAogCWVyciA9IDA7CiAKIGZhaWxlZDoKLQlpZiAobmJ1ZnMpIAorCWlmIChuYnVmcykKIAkJam91cm5hbF9icmVsc2VfYXJyYXkoYnVmcywgbmJ1ZnMpOwogCXJldHVybiBlcnI7CiB9CkBAIC0xMjgsNyArMTI4LDcgQEAKICAqIFJlYWQgYSBibG9jayBmcm9tIHRoZSBqb3VybmFsCiAgKi8KIAotc3RhdGljIGludCBqcmVhZChzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaHAsIGpvdXJuYWxfdCAqam91cm5hbCwgCitzdGF0aWMgaW50IGpyZWFkKHN0cnVjdCBidWZmZXJfaGVhZCAqKmJocCwgam91cm5hbF90ICpqb3VybmFsLAogCQkgdW5zaWduZWQgaW50IG9mZnNldCkKIHsKIAlpbnQgZXJyOwpAQCAtMjEyLDE0ICsyMTIsMTQgQEAKIC8qKgogICogam91cm5hbF9yZWNvdmVyIC0gcmVjb3ZlcnMgYSBvbi1kaXNrIGpvdXJuYWwKICAqIEBqb3VybmFsOiB0aGUgam91cm5hbCB0byByZWNvdmVyCi0gKiAKKyAqCiAgKiBUaGUgcHJpbWFyeSBmdW5jdGlvbiBmb3IgcmVjb3ZlcmluZyB0aGUgbG9nIGNvbnRlbnRzIHdoZW4gbW91bnRpbmcgYQotICogam91cm5hbGVkIGRldmljZS4gIAorICogam91cm5hbGVkIGRldmljZS4KICAqCiAgKiBSZWNvdmVyeSBpcyBkb25lIGluIHRocmVlIHBhc3Nlcy4gIEluIHRoZSBmaXJzdCBwYXNzLCB3ZSBsb29rIGZvciB0aGUKICAqIGVuZCBvZiB0aGUgbG9nLiAgSW4gdGhlIHNlY29uZCwgd2UgYXNzZW1ibGUgdGhlIGxpc3Qgb2YgcmV2b2tlCiAgKiBibG9ja3MuICBJbiB0aGUgdGhpcmQgYW5kIGZpbmFsIHBhc3MsIHdlIHJlcGxheSBhbnkgdW4tcmV2b2tlZCBibG9ja3MKLSAqIGluIHRoZSBsb2cuICAKKyAqIGluIHRoZSBsb2cuCiAgKi8KIGludCBqb3VybmFsX3JlY292ZXIoam91cm5hbF90ICpqb3VybmFsKQogewpAQCAtMjMxLDEwICsyMzEsMTAgQEAKIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CiAJc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CiAKLQkvKiAKKwkvKgogCSAqIFRoZSBqb3VybmFsIHN1cGVyYmxvY2sncyBzX3N0YXJ0IGZpZWxkICh0aGUgY3VycmVudCBsb2cgaGVhZCkKIAkgKiBpcyBhbHdheXMgemVybyBpZiwgYW5kIG9ubHkgaWYsIHRoZSBqb3VybmFsIHdhcyBjbGVhbmx5Ci0JICogdW5tb3VudGVkLiAgCisJICogdW5tb3VudGVkLgogCSAqLwogCiAJaWYgKCFzYi0+c19zdGFydCkgewpAQCAtMjUzLDcgKzI1Myw3IEBACiAJamJkX2RlYnVnKDAsICJKQkQ6IHJlY292ZXJ5LCBleGl0IHN0YXR1cyAlZCwgIgogCQkgICJyZWNvdmVyZWQgdHJhbnNhY3Rpb25zICV1IHRvICV1XG4iLAogCQkgIGVyciwgaW5mby5zdGFydF90cmFuc2FjdGlvbiwgaW5mby5lbmRfdHJhbnNhY3Rpb24pOwotCWpiZF9kZWJ1ZygwLCAiSkJEOiBSZXBsYXllZCAlZCBhbmQgcmV2b2tlZCAlZC8lZCBibG9ja3NcbiIsIAorCWpiZF9kZWJ1ZygwLCAiSkJEOiBSZXBsYXllZCAlZCBhbmQgcmV2b2tlZCAlZC8lZCBibG9ja3NcbiIsCiAJCSAgaW5mby5ucl9yZXBsYXlzLCBpbmZvLm5yX3Jldm9rZV9oaXRzLCBpbmZvLm5yX3Jldm9rZXMpOwogCiAJLyogUmVzdGFydCB0aGUgbG9nIGF0IHRoZSBuZXh0IHRyYW5zYWN0aW9uIElELCB0aHVzIGludmFsaWRhdGluZwpAQCAtMjY4LDE1ICsyNjgsMTUgQEAKIC8qKgogICogam91cm5hbF9za2lwX3JlY292ZXJ5IC0gU3RhcnQgam91cm5hbCBhbmQgd2lwZSBleGl0aW5nIHJlY29yZHMKICAqIEBqb3VybmFsOiBqb3VybmFsIHRvIHN0YXJ0dXAKLSAqIAorICoKICAqIExvY2F0ZSBhbnkgdmFsaWQgcmVjb3ZlcnkgaW5mb3JtYXRpb24gZnJvbSB0aGUgam91cm5hbCBhbmQgc2V0IHVwIHRoZQogICogam91cm5hbCBzdHJ1Y3R1cmVzIGluIG1lbW9yeSB0byBpZ25vcmUgaXQgKHByZXN1bWFibHkgYmVjYXVzZSB0aGUKLSAqIGNhbGxlciBoYXMgZXZpZGVuY2UgdGhhdCBpdCBpcyBvdXQgb2YgZGF0ZSkuICAKKyAqIGNhbGxlciBoYXMgZXZpZGVuY2UgdGhhdCBpdCBpcyBvdXQgb2YgZGF0ZSkuCiAgKiBUaGlzIGZ1bmN0aW9uIGRvZXMnbnQgYXBwZWFyIHRvIGJlIGV4b3J0ZWQuLgogICoKICAqIFdlIHBlcmZvcm0gb25lIHBhc3Mgb3ZlciB0aGUgam91cm5hbCB0byBhbGxvdyB1cyB0byB0ZWxsIHRoZSB1c2VyIGhvdwogICogbXVjaCByZWNvdmVyeSBpbmZvcm1hdGlvbiBpcyBiZWluZyBlcmFzZWQsIGFuZCB0byBsZXQgdXMgaW5pdGlhbGlzZQotICogdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb24gc2VxdWVuY2UgbnVtYmVycyB0byB0aGUgbmV4dCB1bnVzZWQgSUQuIAorICogdGhlIGpvdXJuYWwgdHJhbnNhY3Rpb24gc2VxdWVuY2UgbnVtYmVycyB0byB0aGUgbmV4dCB1bnVzZWQgSUQuCiAgKi8KIGludCBqb3VybmFsX3NraXBfcmVjb3Zlcnkoam91cm5hbF90ICpqb3VybmFsKQogewpAQCAtMjk3LDcgKzI5Nyw3IEBACiAjaWZkZWYgQ09ORklHX0pCRF9ERUJVRwogCQlpbnQgZHJvcHBlZCA9IGluZm8uZW5kX3RyYW5zYWN0aW9uIC0gYmUzMl90b19jcHUoc2ItPnNfc2VxdWVuY2UpOwogI2VuZGlmCi0JCWpiZF9kZWJ1ZygwLCAKKwkJamJkX2RlYnVnKDAsCiAJCQkgICJKQkQ6IGlnbm9yaW5nICVkIHRyYW5zYWN0aW9uJXMgZnJvbSB0aGUgam91cm5hbC5cbiIsCiAJCQkgIGRyb3BwZWQsIChkcm9wcGVkID09IDEpID8gIiIgOiAicyIpOwogCQlqb3VybmFsLT5qX3RyYW5zYWN0aW9uX3NlcXVlbmNlID0gKytpbmZvLmVuZF90cmFuc2FjdGlvbjsKQEAgLTMxNCw3ICszMTQsNyBAQAogCXVuc2lnbmVkIGxvbmcJCW5leHRfbG9nX2Jsb2NrOwogCWludAkJCWVyciwgc3VjY2VzcyA9IDA7CiAJam91cm5hbF9zdXBlcmJsb2NrX3QgKglzYjsKLQlqb3VybmFsX2hlYWRlcl90ICogCXRtcDsKKwlqb3VybmFsX2hlYWRlcl90ICoJdG1wOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqCWJoOwogCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7CiAJaW50CQkJYmxvY2t0eXBlOwpAQCAtMzI0LDEwICszMjQsMTAgQEAKIAlNQVhfQkxPQ0tTX1BFUl9ERVNDID0gKChqb3VybmFsLT5qX2Jsb2Nrc2l6ZS1zaXplb2Yoam91cm5hbF9oZWFkZXJfdCkpCiAJCQkgICAgICAgLyBzaXplb2Yoam91cm5hbF9ibG9ja190YWdfdCkpOwogCi0JLyogCisJLyoKIAkgKiBGaXJzdCB0aGluZyBpcyB0byBlc3RhYmxpc2ggd2hhdCB3ZSBleHBlY3QgdG8gZmluZCBpbiB0aGUgbG9nCiAJICogKGluIHRlcm1zIG9mIHRyYW5zYWN0aW9uIElEcyksIGFuZCB3aGVyZSAoaW4gdGVybXMgb2YgbG9nCi0JICogYmxvY2sgb2Zmc2V0cyk6IHF1ZXJ5IHRoZSBzdXBlcmJsb2NrLiAgCisJICogYmxvY2sgb2Zmc2V0cyk6IHF1ZXJ5IHRoZSBzdXBlcmJsb2NrLgogCSAqLwogCiAJc2IgPSBqb3VybmFsLT5qX3N1cGVyYmxvY2s7CkBAIC0zNDQsNyArMzQ0LDcgQEAKIAkgKiBOb3cgd2Ugd2FsayB0aHJvdWdoIHRoZSBsb2csIHRyYW5zYWN0aW9uIGJ5IHRyYW5zYWN0aW9uLAogCSAqIG1ha2luZyBzdXJlIHRoYXQgZWFjaCB0cmFuc2FjdGlvbiBoYXMgYSBjb21taXQgYmxvY2sgaW4gdGhlCiAJICogZXhwZWN0ZWQgcGxhY2UuICBFYWNoIGNvbXBsZXRlIHRyYW5zYWN0aW9uIGdldHMgcmVwbGF5ZWQgYmFjawotCSAqIGludG8gdGhlIG1haW4gZmlsZXN5c3RlbS4gCisJICogaW50byB0aGUgbWFpbiBmaWxlc3lzdGVtLgogCSAqLwogCiAJd2hpbGUgKDEpIHsKQEAgLTM3OSw4ICszNzksOCBAQAogCQluZXh0X2xvZ19ibG9jaysrOwogCQl3cmFwKGpvdXJuYWwsIG5leHRfbG9nX2Jsb2NrKTsKIAotCQkvKiBXaGF0IGtpbmQgb2YgYnVmZmVyIGlzIGl0PyAKLQkJICogCisJCS8qIFdoYXQga2luZCBvZiBidWZmZXIgaXMgaXQ/CisJCSAqCiAJCSAqIElmIGl0IGlzIGEgZGVzY3JpcHRvciBibG9jaywgY2hlY2sgdGhhdCBpdCBoYXMgdGhlCiAJCSAqIGV4cGVjdGVkIHNlcXVlbmNlIG51bWJlci4gIE90aGVyd2lzZSwgd2UncmUgYWxsIGRvbmUKIAkJICogaGVyZS4gKi8KQEAgLTM5NCw3ICszOTQsNyBAQAogCiAJCWJsb2NrdHlwZSA9IGJlMzJfdG9fY3B1KHRtcC0+aF9ibG9ja3R5cGUpOwogCQlzZXF1ZW5jZSA9IGJlMzJfdG9fY3B1KHRtcC0+aF9zZXF1ZW5jZSk7Ci0JCWpiZF9kZWJ1ZygzLCAiRm91bmQgbWFnaWMgJWQsIHNlcXVlbmNlICVkXG4iLCAKKwkJamJkX2RlYnVnKDMsICJGb3VuZCBtYWdpYyAlZCwgc2VxdWVuY2UgJWRcbiIsCiAJCQkgIGJsb2NrdHlwZSwgc2VxdWVuY2UpOwogCiAJCWlmIChzZXF1ZW5jZSAhPSBuZXh0X2NvbW1pdF9JRCkgewpAQCAtNDM4LDcgKzQzOCw3IEBACiAJCQkJCS8qIFJlY292ZXIgd2hhdCB3ZSBjYW4sIGJ1dAogCQkJCQkgKiByZXBvcnQgZmFpbHVyZSBhdCB0aGUgZW5kLiAqLwogCQkJCQlzdWNjZXNzID0gZXJyOwotCQkJCQlwcmludGsgKEtFUk5fRVJSIAorCQkJCQlwcmludGsgKEtFUk5fRVJSCiAJCQkJCQkiSkJEOiBJTyBlcnJvciAlZCByZWNvdmVyaW5nICIKIAkJCQkJCSJibG9jayAlbGQgaW4gbG9nXG4iLAogCQkJCQkJZXJyLCBpb19ibG9jayk7CkBAIC00NTIsNyArNDUyLDcgQEAKIAkJCQkJICogcmV2b2tlZCwgdGhlbiB3ZSdyZSBhbGwgZG9uZQogCQkJCQkgKiBoZXJlLiAqLwogCQkJCQlpZiAoam91cm5hbF90ZXN0X3Jldm9rZQotCQkJCQkgICAgKGpvdXJuYWwsIGJsb2NrbnIsIAorCQkJCQkgICAgKGpvdXJuYWwsIGJsb2NrbnIsCiAJCQkJCSAgICAgbmV4dF9jb21taXRfSUQpKSB7CiAJCQkJCQlicmVsc2Uob2JoKTsKIAkJCQkJCSsraW5mby0+bnJfcmV2b2tlX2hpdHM7CkBAIC00NjUsNyArNDY1LDcgQEAKIAkJCQkJCQlibG9ja25yLAogCQkJCQkJCWpvdXJuYWwtPmpfYmxvY2tzaXplKTsKIAkJCQkJaWYgKG5iaCA9PSBOVUxMKSB7Ci0JCQkJCQlwcmludGsoS0VSTl9FUlIgCisJCQkJCQlwcmludGsoS0VSTl9FUlIKIAkJCQkJCSAgICAgICAiSkJEOiBPdXQgb2YgbWVtb3J5ICIKIAkJCQkJCSAgICAgICAiZHVyaW5nIHJlY292ZXJ5LlxuIik7CiAJCQkJCQllcnIgPSAtRU5PTUVNOwpAQCAtNTM3LDcgKzUzNyw3IEBACiAJfQogCiAgZG9uZToKLQkvKiAKKwkvKgogCSAqIFdlIGJyb2tlIG91dCBvZiB0aGUgbG9nIHNjYW4gbG9vcDogZWl0aGVyIHdlIGNhbWUgdG8gdGhlCiAJICoga25vd24gZW5kIG9mIHRoZSBsb2cgb3Igd2UgZm91bmQgYW4gdW5leHBlY3RlZCBibG9jayBpbiB0aGUKIAkgKiBsb2cuICBJZiB0aGUgbGF0dGVyIGhhcHBlbmVkLCB0aGVuIHdlIGtub3cgdGhhdCB0aGUgImN1cnJlbnQiCkBAIC01NjcsNyArNTY3LDcgQEAKIAogLyogU2NhbiBhIHJldm9rZSByZWNvcmQsIG1hcmtpbmcgYWxsIGJsb2NrcyBtZW50aW9uZWQgYXMgcmV2b2tlZC4gKi8KIAotc3RhdGljIGludCBzY2FuX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqam91cm5hbCwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgCitzdGF0aWMgaW50IHNjYW5fcmV2b2tlX3JlY29yZHMoam91cm5hbF90ICpqb3VybmFsLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICAgIHRpZF90IHNlcXVlbmNlLCBzdHJ1Y3QgcmVjb3ZlcnlfaW5mbyAqaW5mbykKIHsKIAlqb3VybmFsX3Jldm9rZV9oZWFkZXJfdCAqaGVhZGVyOwpkaWZmIC0tZ2l0IGEvZnMvamJkL3Jldm9rZS5jIGIvZnMvamJkL3Jldm9rZS5jCmluZGV4IGE1NjE0NDEuLmM1MzI0MjkgMTAwNjQ0Ci0tLSBhL2ZzL2piZC9yZXZva2UuYworKysgYi9mcy9qYmQvcmV2b2tlLmMKQEAgLTEsNiArMSw2IEBACiAvKgogICogbGludXgvZnMvcmV2b2tlLmMKLSAqIAorICoKICAqIFdyaXR0ZW4gYnkgU3RlcGhlbiBDLiBUd2VlZGllIDxzY3RAcmVkaGF0LmNvbT4sIDIwMDAKICAqCiAgKiBDb3B5cmlnaHQgMjAwMCBSZWQgSGF0IGNvcnAgLS0tIEFsbCBSaWdodHMgUmVzZXJ2ZWQKQEAgLTE1LDEwICsxNSwxMCBAQAogICogUmV2b2tlIGlzIHRoZSBtZWNoYW5pc20gdXNlZCB0byBwcmV2ZW50IG9sZCBsb2cgcmVjb3JkcyBmb3IgZGVsZXRlZAogICogbWV0YWRhdGEgZnJvbSBiZWluZyByZXBsYXllZCBvbiB0b3Agb2YgbmV3ZXIgZGF0YSB1c2luZyB0aGUgc2FtZQogICogYmxvY2tzLiAgVGhlIHJldm9rZSBtZWNoYW5pc20gaXMgdXNlZCBpbiB0d28gc2VwYXJhdGUgcGxhY2VzOgotICogCisgKgogICogKyBDb21taXQ6IGR1cmluZyBjb21taXQgd2Ugd3JpdGUgdGhlIGVudGlyZSBsaXN0IG9mIHRoZSBjdXJyZW50CiAgKiAgIHRyYW5zYWN0aW9uJ3MgcmV2b2tlZCBibG9ja3MgdG8gdGhlIGpvdXJuYWwKLSAqIAorICoKICAqICsgUmVjb3Zlcnk6IGR1cmluZyByZWNvdmVyeSB3ZSByZWNvcmQgdGhlIHRyYW5zYWN0aW9uIElEIG9mIGFsbAogICogICByZXZva2VkIGJsb2Nrcy4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSByZXZva2UgcmVjb3JkcyBpbiB0aGUgbG9nCiAgKiAgIGZvciBhIHNpbmdsZSBibG9jaywgb25seSB0aGUgbGFzdCBvbmUgY291bnRzLCBhbmQgaWYgdGhlcmUgaXMgYSBsb2cKQEAgLTI5LDcgKzI5LDcgQEAKICAqIHNpbmdsZSB0cmFuc2FjdGlvbjoKICAqCiAgKiBCbG9jayBpcyByZXZva2VkIGFuZCB0aGVuIGpvdXJuYWxlZDoKLSAqICAgVGhlIGRlc2lyZWQgZW5kIHJlc3VsdCBpcyB0aGUgam91cm5hbGluZyBvZiB0aGUgbmV3IGJsb2NrLCBzbyB3ZSAKKyAqICAgVGhlIGRlc2lyZWQgZW5kIHJlc3VsdCBpcyB0aGUgam91cm5hbGluZyBvZiB0aGUgbmV3IGJsb2NrLCBzbyB3ZQogICogICBjYW5jZWwgdGhlIHJldm9rZSBiZWZvcmUgdGhlIHRyYW5zYWN0aW9uIGNvbW1pdHMuCiAgKgogICogQmxvY2sgaXMgam91cm5hbGVkIGFuZCB0aGVuIHJldm9rZWQ6CkBAIC00MSw3ICs0MSw3IEBACiAgKiAgIHRyYW5zYWN0aW9uIG11c3QgaGF2ZSBoYXBwZW5lZCBhZnRlciB0aGUgYmxvY2sgd2FzIGpvdXJuYWxlZCBhbmQgc28KICAqICAgdGhlIHJldm9rZSBtdXN0IHRha2UgcHJlY2VkZW5jZS4KICAqCi0gKiBCbG9jayBpcyByZXZva2VkIGFuZCB0aGVuIHdyaXR0ZW4gYXMgZGF0YTogCisgKiBCbG9jayBpcyByZXZva2VkIGFuZCB0aGVuIHdyaXR0ZW4gYXMgZGF0YToKICAqICAgVGhlIGRhdGEgd3JpdGUgaXMgYWxsb3dlZCB0byBzdWNjZWVkLCBidXQgdGhlIHJldm9rZSBpcyBfbm90XwogICogICBjYW5jZWxsZWQuICBXZSBzdGlsbCBuZWVkIHRvIHByZXZlbnQgb2xkIGxvZyByZWNvcmRzIGZyb20KICAqICAgb3ZlcndyaXRpbmcgdGhlIG5ldyBkYXRhLiAgV2UgZG9uJ3QgZXZlbiBuZWVkIHRvIGNsZWFyIHRoZSByZXZva2UKQEAgLTU0LDcgKzU0LDcgQEAKICAqCQkJYnVmZmVyIGhhcyBub3QgYmVlbiByZXZva2VkLCBhbmQgY2FuY2VsX3Jldm9rZQogICoJCQluZWVkIGRvIG5vdGhpbmcuCiAgKiBSZXZva2VWYWxpZCBzZXQsIFJldm9rZWQgc2V0OgotICoJCQlidWZmZXIgaGFzIGJlZW4gcmV2b2tlZC4gIAorICoJCQlidWZmZXIgaGFzIGJlZW4gcmV2b2tlZC4KICAqLwogCiAjaWZuZGVmIF9fS0VSTkVMX18KQEAgLTc3LDcgKzc3LDcgQEAKICAgIGpvdXJuYWwgcmVwbGF5LCB0aGlzIGludm9sdmVzIHJlY29yZGluZyB0aGUgdHJhbnNhY3Rpb24gSUQgb2YgdGhlCiAgICBsYXN0IHRyYW5zYWN0aW9uIHRvIHJldm9rZSB0aGlzIGJsb2NrLiAqLwogCi1zdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAKK3N0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAgaGFzaDsKIAl0aWRfdAkJICBzZXF1ZW5jZTsJLyogVXNlZCBmb3IgcmVjb3Zlcnkgb25seSAqLwpAQCAtOTAsOCArOTAsOCBAQAogewogCS8qIEl0IGlzIGNvbmNlaXZhYmxlIHRoYXQgd2UgbWlnaHQgd2FudCBhIGxhcmdlciBoYXNoIHRhYmxlCiAJICogZm9yIHJlY292ZXJ5LiAgTXVzdCBiZSBhIHBvd2VyIG9mIHR3by4gKi8KLQlpbnQJCSAgaGFzaF9zaXplOyAKLQlpbnQJCSAgaGFzaF9zaGlmdDsgCisJaW50CQkgIGhhc2hfc2l6ZTsKKwlpbnQJCSAgaGFzaF9zaGlmdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICpoYXNoX3RhYmxlOwogfTsKIApAQCAtMzAxLDIyICszMDEsMjIgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAotLyogCisvKgogICogam91cm5hbF9yZXZva2U6IHJldm9rZSBhIGdpdmVuIGJ1ZmZlcl9oZWFkIGZyb20gdGhlIGpvdXJuYWwuICBUaGlzCiAgKiBwcmV2ZW50cyB0aGUgYmxvY2sgZnJvbSBiZWluZyByZXBsYXllZCBkdXJpbmcgcmVjb3ZlcnkgaWYgd2UgdGFrZSBhCiAgKiBjcmFzaCBhZnRlciB0aGlzIGN1cnJlbnQgdHJhbnNhY3Rpb24gY29tbWl0cy4gIEFueSBzdWJzZXF1ZW50CiAgKiBtZXRhZGF0YSB3cml0ZXMgb2YgdGhlIGJ1ZmZlciBpbiB0aGlzIHRyYW5zYWN0aW9uIGNhbmNlbCB0aGUKLSAqIHJldm9rZS4gIAorICogcmV2b2tlLgogICoKICAqIE5vdGUgdGhhdCB0aGlzIGNhbGwgbWF5IGJsb2NrIC0tLSBpdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIG1ha2UKICAqIHN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhlciBjYWxscyB0byBqb3VybmFsX3dyaXRlX21ldGFkYXRhCiAgKiBiZWZvcmUgdGhlIHJldm9rZSBpcyBjb21wbGV0ZS4gIEluIGV4dDMsIHRoaXMgaW1wbGllcyBjYWxsaW5nIHRoZQogICogcmV2b2tlIGJlZm9yZSBjbGVhcmluZyB0aGUgYmxvY2sgYml0bWFwIHdoZW4gd2UgYXJlIGRlbGV0aW5nCi0gKiBtZXRhZGF0YS4gCisgKiBtZXRhZGF0YS4KICAqCiAgKiBSZXZva2UgcGVyZm9ybXMgYSBqb3VybmFsX2ZvcmdldCBvbiBhbnkgYnVmZmVyX2hlYWQgcGFzc2VkIGluIGFzIGEKICAqIHBhcmFtZXRlciwgYnV0IGRvZXMgX25vdF8gZm9yZ2V0IHRoZSBidWZmZXJfaGVhZCBpZiB0aGUgYmggd2FzIG9ubHkKLSAqIGZvdW5kIGltcGxpY2l0bHkuIAorICogZm91bmQgaW1wbGljaXRseS4KICAqCiAgKiBiaF9pbiBtYXkgbm90IGJlIGEgam91cm5hbGxlZCBidWZmZXIgLSBpdCBtYXkgaGF2ZSBjb21lIG9mZgogICogdGhlIGhhc2ggdGFibGVzIHdpdGhvdXQgYW4gYXR0YWNoZWQgam91cm5hbF9oZWFkLgpAQCAtMzI1LDcgKzMyNSw3IEBACiAgKiBieSBvbmUuCiAgKi8KIAotaW50IGpvdXJuYWxfcmV2b2tlKGhhbmRsZV90ICpoYW5kbGUsIHVuc2lnbmVkIGxvbmcgYmxvY2tuciwgCitpbnQgam91cm5hbF9yZXZva2UoaGFuZGxlX3QgKmhhbmRsZSwgdW5zaWduZWQgbG9uZyBibG9ja25yLAogCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoX2luKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMOwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJZWxzZQogCQlqb3VybmFsLT5qX3Jldm9rZSA9IGpvdXJuYWwtPmpfcmV2b2tlX3RhYmxlWzBdOwogCi0JZm9yIChpID0gMDsgaSA8IGpvdXJuYWwtPmpfcmV2b2tlLT5oYXNoX3NpemU7IGkrKykgCisJZm9yIChpID0gMDsgaSA8IGpvdXJuYWwtPmpfcmV2b2tlLT5oYXNoX3NpemU7IGkrKykKIAkJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfcmV2b2tlLT5oYXNoX3RhYmxlW2ldKTsKIH0KIApAQCAtNDk4LDcgKzQ5OCw3IEBACiAgKiBDYWxsZWQgd2l0aCB0aGUgam91cm5hbCBsb2NrIGhlbGQuCiAgKi8KIAotdm9pZCBqb3VybmFsX3dyaXRlX3Jldm9rZV9yZWNvcmRzKGpvdXJuYWxfdCAqam91cm5hbCwgCit2b2lkIGpvdXJuYWxfd3JpdGVfcmV2b2tlX3JlY29yZHMoam91cm5hbF90ICpqb3VybmFsLAogCQkJCSAgdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24pCiB7CiAJc3RydWN0IGpvdXJuYWxfaGVhZCAqZGVzY3JpcHRvcjsKQEAgLTUwNyw3ICs1MDcsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmhhc2hfbGlzdDsKIAlpbnQgaSwgb2Zmc2V0LCBjb3VudDsKIAotCWRlc2NyaXB0b3IgPSBOVUxMOyAKKwlkZXNjcmlwdG9yID0gTlVMTDsKIAlvZmZzZXQgPSAwOwogCWNvdW50ID0gMDsKIApAQCAtNTE5LDEwICs1MTksMTAgQEAKIAkJaGFzaF9saXN0ID0gJnJldm9rZS0+aGFzaF90YWJsZVtpXTsKIAogCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGFzaF9saXN0KSkgewotCQkJcmVjb3JkID0gKHN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICopIAorCQkJcmVjb3JkID0gKHN0cnVjdCBqYmRfcmV2b2tlX3JlY29yZF9zICopCiAJCQkJaGFzaF9saXN0LT5uZXh0OwogCQkJd3JpdGVfb25lX3Jldm9rZV9yZWNvcmQoam91cm5hbCwgdHJhbnNhY3Rpb24sCi0JCQkJCQkmZGVzY3JpcHRvciwgJm9mZnNldCwgCisJCQkJCQkmZGVzY3JpcHRvciwgJm9mZnNldCwKIAkJCQkJCXJlY29yZCk7CiAJCQljb3VudCsrOwogCQkJbGlzdF9kZWwoJnJlY29yZC0+aGFzaCk7CkBAIC01MzQsMTQgKzUzNCwxNCBAQAogCWpiZF9kZWJ1ZygxLCAiV3JvdGUgJWQgcmV2b2tlIHJlY29yZHNcbiIsIGNvdW50KTsKIH0KIAotLyogCisvKgogICogV3JpdGUgb3V0IG9uZSByZXZva2UgcmVjb3JkLiAgV2UgbmVlZCB0byBjcmVhdGUgYSBuZXcgZGVzY3JpcHRvcgotICogYmxvY2sgaWYgdGhlIG9sZCBvbmUgaXMgZnVsbCBvciBpZiB3ZSBoYXZlIG5vdCBhbHJlYWR5IGNyZWF0ZWQgb25lLiAgCisgKiBibG9jayBpZiB0aGUgb2xkIG9uZSBpcyBmdWxsIG9yIGlmIHdlIGhhdmUgbm90IGFscmVhZHkgY3JlYXRlZCBvbmUuCiAgKi8KIAotc3RhdGljIHZvaWQgd3JpdGVfb25lX3Jldm9rZV9yZWNvcmQoam91cm5hbF90ICpqb3VybmFsLCAKK3N0YXRpYyB2b2lkIHdyaXRlX29uZV9yZXZva2VfcmVjb3JkKGpvdXJuYWxfdCAqam91cm5hbCwKIAkJCQkgICAgdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sCi0JCQkJICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipkZXNjcmlwdG9ycCwgCisJCQkJICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipkZXNjcmlwdG9ycCwKIAkJCQkgICAgaW50ICpvZmZzZXRwLAogCQkJCSAgICBzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqcmVjb3JkKQogewpAQCAtNTg0LDIxICs1ODQsMjEgQEAKIAkJKmRlc2NyaXB0b3JwID0gZGVzY3JpcHRvcjsKIAl9CiAKLQkqICgoX19iZTMyICopKCZqaDJiaChkZXNjcmlwdG9yKS0+Yl9kYXRhW29mZnNldF0pKSA9IAorCSogKChfX2JlMzIgKikoJmpoMmJoKGRlc2NyaXB0b3IpLT5iX2RhdGFbb2Zmc2V0XSkpID0KIAkJY3B1X3RvX2JlMzIocmVjb3JkLT5ibG9ja25yKTsKIAlvZmZzZXQgKz0gNDsKIAkqb2Zmc2V0cCA9IG9mZnNldDsKIH0KIAotLyogCisvKgogICogRmx1c2ggYSByZXZva2UgZGVzY3JpcHRvciBvdXQgdG8gdGhlIGpvdXJuYWwuICBJZiB3ZSBhcmUgYWJvcnRpbmcsCiAgKiB0aGlzIGlzIGEgbm9vcDsgb3RoZXJ3aXNlIHdlIGFyZSBnZW5lcmF0aW5nIGEgYnVmZmVyIHdoaWNoIG5lZWRzIHRvCiAgKiBiZSB3YWl0ZWQgZm9yIGR1cmluZyBjb21taXQsIHNvIGl0IGhhcyB0byBnbyBvbnRvIHRoZSBhcHByb3ByaWF0ZQogICogam91cm5hbCBidWZmZXIgbGlzdC4KICAqLwogCi1zdGF0aWMgdm9pZCBmbHVzaF9kZXNjcmlwdG9yKGpvdXJuYWxfdCAqam91cm5hbCwgCi0JCQkgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKmRlc2NyaXB0b3IsIAorc3RhdGljIHZvaWQgZmx1c2hfZGVzY3JpcHRvcihqb3VybmFsX3QgKmpvdXJuYWwsCisJCQkgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKmRlc2NyaXB0b3IsCiAJCQkgICAgIGludCBvZmZzZXQpCiB7CiAJam91cm5hbF9yZXZva2VfaGVhZGVyX3QgKmhlYWRlcjsKQEAgLTYxOCw3ICs2MTgsNyBAQAogfQogI2VuZGlmCiAKLS8qIAorLyoKICAqIFJldm9rZSBzdXBwb3J0IGZvciByZWNvdmVyeS4KICAqCiAgKiBSZWNvdmVyeSBuZWVkcyB0byBiZSBhYmxlIHRvOgpAQCAtNjI5LDcgKzYyOSw3IEBACiAgKiAgY2hlY2sgd2hldGhlciBhIGdpdmVuIGJsb2NrIGluIGEgZ2l2ZW4gdHJhbnNhY3Rpb24gc2hvdWxkIGJlIHJlcGxheWVkCiAgKiAgKGllLiBoYXMgbm90IGJlZW4gcmV2b2tlZCBieSBhIHJldm9rZSByZWNvcmQgaW4gdGhhdCBvciBhIHN1YnNlcXVlbnQKICAqICB0cmFuc2FjdGlvbikKLSAqIAorICoKICAqICBlbXB0eSB0aGUgcmV2b2tlIHRhYmxlIGFmdGVyIHJlY292ZXJ5LgogICovCiAKQEAgLTYzNywxMSArNjM3LDExIEBACiAgKiBGaXJzdCwgc2V0dGluZyByZXZva2UgcmVjb3Jkcy4gIFdlIGNyZWF0ZSBhIG5ldyByZXZva2UgcmVjb3JkIGZvcgogICogZXZlcnkgYmxvY2sgZXZlciByZXZva2VkIGluIHRoZSBsb2cgYXMgd2Ugc2NhbiBpdCBmb3IgcmVjb3ZlcnksIGFuZAogICogd2UgdXBkYXRlIHRoZSBleGlzdGluZyByZWNvcmRzIGlmIHdlIGZpbmQgbXVsdGlwbGUgcmV2b2tlcyBmb3IgYQotICogc2luZ2xlIGJsb2NrLiAKKyAqIHNpbmdsZSBibG9jay4KICAqLwogCi1pbnQgam91cm5hbF9zZXRfcmV2b2tlKGpvdXJuYWxfdCAqam91cm5hbCwgCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrbnIsIAoraW50IGpvdXJuYWxfc2V0X3Jldm9rZShqb3VybmFsX3QgKmpvdXJuYWwsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGJsb2NrbnIsCiAJCSAgICAgICB0aWRfdCBzZXF1ZW5jZSkKIHsKIAlzdHJ1Y3QgamJkX3Jldm9rZV9yZWNvcmRfcyAqcmVjb3JkOwpAQCAtNjUzLDE4ICs2NTMsMTggQEAKIAkJaWYgKHRpZF9ndChzZXF1ZW5jZSwgcmVjb3JkLT5zZXF1ZW5jZSkpCiAJCQlyZWNvcmQtPnNlcXVlbmNlID0gc2VxdWVuY2U7CiAJCXJldHVybiAwOwotCX0gCisJfQogCXJldHVybiBpbnNlcnRfcmV2b2tlX2hhc2goam91cm5hbCwgYmxvY2tuciwgc2VxdWVuY2UpOwogfQogCi0vKiAKKy8qCiAgKiBUZXN0IHJldm9rZSByZWNvcmRzLiAgRm9yIGEgZ2l2ZW4gYmxvY2sgcmVmZXJlbmNlZCBpbiB0aGUgbG9nLCBoYXMKICAqIHRoYXQgYmxvY2sgYmVlbiByZXZva2VkPyAgQSByZXZva2UgcmVjb3JkIHdpdGggYSBnaXZlbiB0cmFuc2FjdGlvbgogICogc2VxdWVuY2UgbnVtYmVyIHJldm9rZXMgYWxsIGJsb2NrcyBpbiB0aGF0IHRyYW5zYWN0aW9uIGFuZCBlYXJsaWVyCiAgKiBvbmVzLCBidXQgbGF0ZXIgdHJhbnNhY3Rpb25zIHN0aWxsIG5lZWQgcmVwbGF5ZWQuCiAgKi8KIAotaW50IGpvdXJuYWxfdGVzdF9yZXZva2Uoam91cm5hbF90ICpqb3VybmFsLCAKK2ludCBqb3VybmFsX3Rlc3RfcmV2b2tlKGpvdXJuYWxfdCAqam91cm5hbCwKIAkJCXVuc2lnbmVkIGxvbmcgYmxvY2tuciwKIAkJCXRpZF90IHNlcXVlbmNlKQogewpkaWZmIC0tZ2l0IGEvZnMvamJkL3RyYW5zYWN0aW9uLmMgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwppbmRleCBmNTE2OWE5Li5lMWIzYzhhIDEwMDY0NAotLS0gYS9mcy9qYmQvdHJhbnNhY3Rpb24uYworKysgYi9mcy9qYmQvdHJhbnNhY3Rpb24uYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgKiBsaW51eC9mcy90cmFuc2FjdGlvbi5jCi0gKiAKKyAqCiAgKiBXcml0dGVuIGJ5IFN0ZXBoZW4gQy4gVHdlZWRpZSA8c2N0QHJlZGhhdC5jb20+LCAxOTk4CiAgKgogICogQ29weXJpZ2h0IDE5OTggUmVkIEhhdCBjb3JwIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCkBAIC0xMCw3ICsxMCw3IEBACiAgKiBvcHRpb24sIGFueSBsYXRlciB2ZXJzaW9uLCBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZS4KICAqCiAgKiBHZW5lcmljIGZpbGVzeXN0ZW0gdHJhbnNhY3Rpb24gaGFuZGxpbmcgY29kZTsgcGFydCBvZiB0aGUgZXh0MmZzCi0gKiBqb3VybmFsaW5nIHN5c3RlbS4gIAorICogam91cm5hbGluZyBzeXN0ZW0uCiAgKgogICogVGhpcyBmaWxlIG1hbmFnZXMgdHJhbnNhY3Rpb25zIChjb21wb3VuZCBjb21taXRzIG1hbmFnZWQgYnkgdGhlCiAgKiBqb3VybmFsaW5nIGNvZGUpIGFuZCBoYW5kbGVzIChpbmRpdmlkdWFsIGF0b21pYyBvcGVyYXRpb25zIGJ5IHRoZQpAQCAtNzQsNyArNzQsNyBAQAogICogc3RhcnRfdGhpc19oYW5kbGU6IEdpdmVuIGEgaGFuZGxlLCBkZWFsIHdpdGggYW55IGxvY2tpbmcgb3Igc3RhbGxpbmcKICAqIG5lZWRlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGVyZSBpcyBlbm91Z2ggam91cm5hbCBzcGFjZSBmb3IgdGhlIGhhbmRsZQogICogdG8gYmVnaW4uICBBdHRhY2ggdGhlIGhhbmRsZSB0byBhIHRyYW5zYWN0aW9uIGFuZCBzZXQgdXAgdGhlCi0gKiB0cmFuc2FjdGlvbidzIGJ1ZmZlciBjcmVkaXRzLiAgCisgKiB0cmFuc2FjdGlvbidzIGJ1ZmZlciBjcmVkaXRzLgogICovCiAKIHN0YXRpYyBpbnQgc3RhcnRfdGhpc19oYW5kbGUoam91cm5hbF90ICpqb3VybmFsLCBoYW5kbGVfdCAqaGFuZGxlKQpAQCAtMTE3LDcgKzExNyw3IEBACiAJaWYgKGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSB8fAogCSAgICAoam91cm5hbC0+al9lcnJubyAhPSAwICYmICEoam91cm5hbC0+al9mbGFncyAmIEpGU19BQ0tfRVJSKSkpIHsKIAkJc3Bpbl91bmxvY2soJmpvdXJuYWwtPmpfc3RhdGVfbG9jayk7Ci0JCXJldCA9IC1FUk9GUzsgCisJCXJldCA9IC1FUk9GUzsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC0xODIsNyArMTgyLDcgQEAKIAkJZ290byByZXBlYXQ7CiAJfQogCi0JLyogCisJLyoKIAkgKiBUaGUgY29tbWl0IGNvZGUgYXNzdW1lcyB0aGF0IGl0IGNhbiBnZXQgZW5vdWdoIGxvZyBzcGFjZQogCSAqIHdpdGhvdXQgZm9yY2luZyBhIGNoZWNrcG9pbnQuICBUaGlzIGlzICpjcml0aWNhbCogZm9yCiAJICogY29ycmVjdG5lc3M6IGEgY2hlY2twb2ludCBvZiBhIGJ1ZmZlciB3aGljaCBpcyBhbHNvCkBAIC0xOTEsNyArMTkxLDcgQEAKIAkgKgogCSAqIFdlIG11c3QgdGhlcmVmb3JlIGVuc3VyZSB0aGUgbmVjZXNzYXJ5IHNwYWNlIGluIHRoZSBqb3VybmFsCiAJICogKmJlZm9yZSogc3RhcnRpbmcgdG8gZGlydHkgcG90ZW50aWFsbHkgY2hlY2twb2ludGVkIGJ1ZmZlcnMKLQkgKiBpbiB0aGUgbmV3IHRyYW5zYWN0aW9uLiAKKwkgKiBpbiB0aGUgbmV3IHRyYW5zYWN0aW9uLgogCSAqCiAJICogVGhlIHdvcnN0IHBhcnQgaXMsIGFueSB0cmFuc2FjdGlvbiBjdXJyZW50bHkgY29tbWl0dGluZyBjYW4KIAkgKiByZWR1Y2UgdGhlIGZyZWUgc3BhY2UgYXJiaXRyYXJpbHkuICBCZSBjYXJlZnVsIHRvIGFjY291bnQgZm9yCkBAIC0yNDYsMTMgKzI0NiwxMyBAQAogfQogCiAvKioKLSAqIGhhbmRsZV90ICpqb3VybmFsX3N0YXJ0KCkgLSBPYnRhaW4gYSBuZXcgaGFuZGxlLiAgCisgKiBoYW5kbGVfdCAqam91cm5hbF9zdGFydCgpIC0gT2J0YWluIGEgbmV3IGhhbmRsZS4KICAqIEBqb3VybmFsOiBKb3VybmFsIHRvIHN0YXJ0IHRyYW5zYWN0aW9uIG9uLgogICogQG5ibG9ja3M6IG51bWJlciBvZiBibG9jayBidWZmZXIgd2UgbWlnaHQgbW9kaWZ5CiAgKgogICogV2UgbWFrZSBzdXJlIHRoYXQgdGhlIHRyYW5zYWN0aW9uIGNhbiBndWFyYW50ZWUgYXQgbGVhc3QgbmJsb2NrcyBvZgogICogbW9kaWZpZWQgYnVmZmVycyBpbiB0aGUgbG9nLiAgV2UgYmxvY2sgdW50aWwgdGhlIGxvZyBjYW4gZ3VhcmFudGVlCi0gKiB0aGF0IG11Y2ggc3BhY2UuICAKKyAqIHRoYXQgbXVjaCBzcGFjZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIHZpc2libGUgdG8gam91cm5hbCB1c2VycyAobGlrZSBleHQzZnMpLCBzbyBpcyBub3QKICAqIGNhbGxlZCB3aXRoIHRoZSBqb3VybmFsIGFscmVhZHkgbG9ja2VkLgpAQCAtMjkyLDExICsyOTIsMTEgQEAKICAqIGludCBqb3VybmFsX2V4dGVuZCgpIC0gZXh0ZW5kIGJ1ZmZlciBjcmVkaXRzLgogICogQGhhbmRsZTogIGhhbmRsZSB0byAnZXh0ZW5kJwogICogQG5ibG9ja3M6IG5yIGJsb2NrcyB0byB0cnkgdG8gZXh0ZW5kIGJ5LgotICogCisgKgogICogU29tZSB0cmFuc2FjdGlvbnMsIHN1Y2ggYXMgbGFyZ2UgZXh0ZW5kcyBhbmQgdHJ1bmNhdGVzLCBjYW4gYmUgZG9uZQogICogYXRvbWljYWxseSBhbGwgYXQgb25jZSBvciBpbiBzZXZlcmFsIHN0YWdlcy4gIFRoZSBvcGVyYXRpb24gcmVxdWVzdHMKICAqIGEgY3JlZGl0IGZvciBhIG51bWJlciBvZiBidWZmZXIgbW9kaWNhdGlvbnMgaW4gYWR2YW5jZSwgYnV0IGNhbgotICogZXh0ZW5kIGl0cyBjcmVkaXQgaWYgaXQgbmVlZHMgbW9yZS4gIAorICogZXh0ZW5kIGl0cyBjcmVkaXQgaWYgaXQgbmVlZHMgbW9yZS4KICAqCiAgKiBqb3VybmFsX2V4dGVuZCB0cmllcyB0byBnaXZlIHRoZSBydW5uaW5nIGhhbmRsZSBtb3JlIGJ1ZmZlciBjcmVkaXRzLgogICogSXQgZG9lcyBub3QgZ3VhcmFudGVlIHRoYXQgYWxsb2NhdGlvbiAtIHRoaXMgaXMgYSBiZXN0LWVmZm9ydCBvbmx5LgpAQCAtMzYzLDcgKzM2Myw3IEBACiAgKiBpbnQgam91cm5hbF9yZXN0YXJ0KCkgLSByZXN0YXJ0IGEgaGFuZGxlIC4KICAqIEBoYW5kbGU6ICBoYW5kbGUgdG8gcmVzdGFydAogICogQG5ibG9ja3M6IG5yIGNyZWRpdHMgcmVxdWVzdGVkCi0gKiAKKyAqCiAgKiBSZXN0YXJ0IGEgaGFuZGxlIGZvciBhIG11bHRpLXRyYW5zYWN0aW9uIGZpbGVzeXN0ZW0KICAqIG9wZXJhdGlvbi4KICAqCkBAIC00NjIsNyArNDYyLDcgQEAKIC8qKgogICogdm9pZCBqb3VybmFsX3VubG9ja191cGRhdGVzIChqb3VybmFsX3QqIGpvdXJuYWwpIC0gcmVsZWFzZSBiYXJyaWVyCiAgKiBAam91cm5hbDogIEpvdXJuYWwgdG8gcmVsZWFzZSB0aGUgYmFycmllciBvbi4KLSAqIAorICoKICAqIFJlbGVhc2UgYSB0cmFuc2FjdGlvbiBiYXJyaWVyIG9idGFpbmVkIHdpdGggam91cm5hbF9sb2NrX3VwZGF0ZXMoKS4KICAqCiAgKiBTaG91bGQgYmUgY2FsbGVkIHdpdGhvdXQgdGhlIGpvdXJuYWwgbG9jayBoZWxkLgpAQCAtNTQ3LDggKzU0Nyw4IEBACiAJamJkX2xvY2tfYmhfc3RhdGUoYmgpOwogCiAJLyogV2Ugbm93IGhvbGQgdGhlIGJ1ZmZlciBsb2NrIHNvIGl0IGlzIHNhZmUgdG8gcXVlcnkgdGhlIGJ1ZmZlcgotCSAqIHN0YXRlLiAgSXMgdGhlIGJ1ZmZlciBkaXJ0eT8gCi0JICogCisJICogc3RhdGUuICBJcyB0aGUgYnVmZmVyIGRpcnR5PworCSAqCiAJICogSWYgc28sIHRoZXJlIGFyZSB0d28gcG9zc2liaWxpdGllcy4gIFRoZSBidWZmZXIgbWF5IGJlCiAJICogbm9uLWpvdXJuYWxlZCwgYW5kIHVuZGVyZ29pbmcgYSBxdWl0ZSBsZWdpdGltYXRlIHdyaXRlYmFjay4KIAkgKiBPdGhlcndpc2UsIGl0IGlzIGpvdXJuYWxlZCwgYW5kIHdlIGRvbid0IGV4cGVjdCBkaXJ0eSBidWZmZXJzCkBAIC01NjYsNyArNTY2LDcgQEAKIAkJICovCiAJCWlmIChqaC0+Yl90cmFuc2FjdGlvbikgewogCQkJSl9BU1NFUlRfSkgoamgsCi0JCQkJamgtPmJfdHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24gfHwgCisJCQkJamgtPmJfdHJhbnNhY3Rpb24gPT0gdHJhbnNhY3Rpb24gfHwKIAkJCQlqaC0+Yl90cmFuc2FjdGlvbiA9PQogCQkJCQlqb3VybmFsLT5qX2NvbW1pdHRpbmdfdHJhbnNhY3Rpb24pOwogCQkJaWYgKGpoLT5iX25leHRfdHJhbnNhY3Rpb24pCkBAIC01ODAsNyArNTgwLDcgQEAKIAkJICovCiAJCUpCVUZGRVJfVFJBQ0UoamgsICJVbmV4cGVjdGVkIGRpcnR5IGJ1ZmZlciIpOwogCQlqYmRfdW5leHBlY3RlZF9kaXJ0eV9idWZmZXIoamgpOwotIAl9CisJfQogCiAJdW5sb2NrX2J1ZmZlcihiaCk7CiAKQEAgLTY1Myw3ICs2NTMsNyBAQAogCQkgKiBidWZmZXIgaGFkIGJldHRlciByZW1haW4gbG9ja2VkIGR1cmluZyB0aGUga21hbGxvYywKIAkJICogYnV0IHRoYXQgc2hvdWxkIGJlIHRydWUgLS0tIHdlIGhvbGQgdGhlIGpvdXJuYWwgbG9jawogCQkgKiBzdGlsbCBhbmQgdGhlIGJ1ZmZlciBpcyBhbHJlYWR5IG9uIHRoZSBCVUZfSk9VUk5BTAotCQkgKiBsaXN0IHNvIHdvbid0IGJlIGZsdXNoZWQuIAorCQkgKiBsaXN0IHNvIHdvbid0IGJlIGZsdXNoZWQuCiAJCSAqCiAJCSAqIFN1YnRsZSBwb2ludCwgdGhvdWdoOiBpZiB0aGlzIGlzIGEgZ2V0X3VuZG9fYWNjZXNzLAogCQkgKiB0aGVuIHdlIHdpbGwgYmUgcmVseWluZyBvbiB0aGUgZnJvemVuX2RhdGEgdG8gY29udGFpbgpAQCAtNzY1LDggKzc2NSw4IEBACiAgKiBtYW51YWxseSByYXRoZXIgdGhhbiByZWFkaW5nIG9mZiBkaXNrKSwgdGhlbiB3ZSBuZWVkIHRvIGtlZXAgdGhlCiAgKiBidWZmZXJfaGVhZCBsb2NrZWQgdW50aWwgaXQgaGFzIGJlZW4gY29tcGxldGVseSBmaWxsZWQgd2l0aCBuZXcKICAqIGRhdGEuICBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBiZSBhYmxlIHRvIG1ha2UgdGhlIGFzc2VydGlvbiB0aGF0Ci0gKiB0aGUgYmggaXMgbm90IGFscmVhZHkgcGFydCBvZiBhbiBleGlzdGluZyB0cmFuc2FjdGlvbi4gIAotICogCisgKiB0aGUgYmggaXMgbm90IGFscmVhZHkgcGFydCBvZiBhbiBleGlzdGluZyB0cmFuc2FjdGlvbi4KKyAqCiAgKiBUaGUgYnVmZmVyIHNob3VsZCBhbHJlYWR5IGJlIGxvY2tlZCBieSB0aGUgY2FsbGVyIGJ5IHRoaXMgcG9pbnQuCiAgKiBUaGVyZSBpcyBubyBsb2NrIHJhbmtpbmcgdmlvbGF0aW9uOiBpdCB3YXMgYSBuZXdseSBjcmVhdGVkLAogICogdW5sb2NrZWQgYnVmZmVyIGJlZm9yZWhhbmQuICovCkBAIC03NzgsNyArNzc4LDcgQEAKICAqCiAgKiBDYWxsIHRoaXMgaWYgeW91IGNyZWF0ZSBhIG5ldyBiaC4KICAqLwotaW50IGpvdXJuYWxfZ2V0X2NyZWF0ZV9hY2Nlc3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgCitpbnQgam91cm5hbF9nZXRfY3JlYXRlX2FjY2VzcyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCXRyYW5zYWN0aW9uX3QgKnRyYW5zYWN0aW9uID0gaGFuZGxlLT5oX3RyYW5zYWN0aW9uOwogCWpvdXJuYWxfdCAqam91cm5hbCA9IHRyYW5zYWN0aW9uLT50X2pvdXJuYWw7CkBAIC04NDcsMTMgKzg0NywxMyBAQAogICogZG8gbm90IHJldXNlIGZyZWVkIHNwYWNlIHVudGlsIHRoZSBkZWFsbG9jYXRpb24gaGFzIGJlZW4gY29tbWl0dGVkLAogICogc2luY2UgaWYgd2Ugb3Zlcndyb3RlIHRoYXQgc3BhY2Ugd2Ugd291bGQgbWFrZSB0aGUgZGVsZXRlCiAgKiB1bi1yZXdpbmRhYmxlIGluIGNhc2Ugb2YgYSBjcmFzaC4KLSAqIAorICoKICAqIFRvIGRlYWwgd2l0aCB0aGF0LCBqb3VybmFsX2dldF91bmRvX2FjY2VzcyByZXF1ZXN0cyB3cml0ZSBhY2Nlc3MgdG8gYQogICogYnVmZmVyIGZvciBwYXJ0cyBvZiBub24tcmV3aW5kYWJsZSBvcGVyYXRpb25zIHN1Y2ggYXMgZGVsZXRlCiAgKiBvcGVyYXRpb25zIG9uIHRoZSBiaXRtYXBzLiAgVGhlIGpvdXJuYWxpbmcgY29kZSBtdXN0IGtlZXAgYSBjb3B5IG9mCiAgKiB0aGUgYnVmZmVyJ3MgY29udGVudHMgcHJpb3IgdG8gdGhlIHVuZG9fYWNjZXNzIGNhbGwgdW50aWwgc3VjaCB0aW1lCiAgKiBhcyB3ZSBrbm93IHRoYXQgdGhlIGJ1ZmZlciBoYXMgZGVmaW5pdGVseSBiZWVuIGNvbW1pdHRlZCB0byBkaXNrLgotICogCisgKgogICogV2UgbmV2ZXIgbmVlZCB0byBrbm93IHdoaWNoIHRyYW5zYWN0aW9uIHRoZSBjb21taXR0ZWQgZGF0YSBpcyBwYXJ0CiAgKiBvZiwgYnVmZmVycyB0b3VjaGVkIGhlcmUgYXJlIGd1YXJhbnRlZWQgdG8gYmUgZGlydGllZCBsYXRlciBhbmQgc28KICAqIHdpbGwgYmUgY29tbWl0dGVkIHRvIGEgbmV3IHRyYW5zYWN0aW9uIGluIGR1ZSBjb3Vyc2UsIGF0IHdoaWNoIHBvaW50CkBAIC05MTEsMTMgKzkxMSwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLS8qKiAKKy8qKgogICogaW50IGpvdXJuYWxfZGlydHlfZGF0YSgpIC0gIG1hcmsgYSBidWZmZXIgYXMgY29udGFpbmluZyBkaXJ0eSBkYXRhIHdoaWNoCiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZHMgdG8gYmUgZmx1c2hlZCBiZWZvcmUgd2UgY2FuIGNvbW1pdCB0aGUKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50IHRyYW5zYWN0aW9uLiAgCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqIEBoYW5kbGU6IHRyYW5zYWN0aW9uCiAgKiBAYmg6IGJ1ZmZlcmhlYWQgdG8gbWFyawotICogCisgKgogICogVGhlIGJ1ZmZlciBpcyBwbGFjZWQgb24gdGhlIHRyYW5zYWN0aW9uJ3MgZGF0YSBsaXN0IGFuZCBpcyBtYXJrZWQgYXMKICAqIGJlbG9uZ2luZyB0byB0aGUgdHJhbnNhY3Rpb24uCiAgKgpAQCAtOTQ2LDE1ICs5NDYsMTUgQEAKIAogCS8qCiAJICogV2hhdCBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgcGFydCBvZiBhIHJ1bm5pbmcgdHJhbnNhY3Rpb24/Ci0JICogCisJICoKIAkgKiBUaGVyZSBhcmUgdHdvIGNhc2VzOgogCSAqIDEpIEl0IGlzIHBhcnQgb2YgdGhlIGN1cnJlbnQgcnVubmluZyB0cmFuc2FjdGlvbi4gIFJlZmlsZSBpdCwKIAkgKiAgICBqdXN0IGluIGNhc2Ugd2UgaGF2ZSBhbGxvY2F0ZWQgaXQgYXMgbWV0YWRhdGEsIGRlYWxsb2NhdGVkCi0JICogICAgaXQsIHRoZW4gcmVhbGxvY2F0ZWQgaXQgYXMgZGF0YS4gCisJICogICAgaXQsIHRoZW4gcmVhbGxvY2F0ZWQgaXQgYXMgZGF0YS4KIAkgKiAyKSBJdCBpcyBwYXJ0IG9mIHRoZSBwcmV2aW91cywgc3RpbGwtY29tbWl0dGluZyB0cmFuc2FjdGlvbi4KIAkgKiAgICBJZiBhbGwgd2Ugd2FudCB0byBkbyBpcyB0byBndWFyYW50ZWUgdGhhdCB0aGUgYnVmZmVyIHdpbGwgYmUKIAkgKiAgICB3cml0dGVuIHRvIGRpc2sgYmVmb3JlIHRoaXMgbmV3IHRyYW5zYWN0aW9uIGNvbW1pdHMsIHRoZW4KLQkgKiAgICBiZWluZyBzdXJlIHRoYXQgdGhlICpwcmV2aW91cyogdHJhbnNhY3Rpb24gaGFzIHRoaXMgc2FtZSAKKwkgKiAgICBiZWluZyBzdXJlIHRoYXQgdGhlICpwcmV2aW91cyogdHJhbnNhY3Rpb24gaGFzIHRoaXMgc2FtZQogCSAqICAgIHByb3BlcnR5IGlzIHN1ZmZpY2llbnQgZm9yIHVzISAgSnVzdCBsZWF2ZSBpdCBvbiBpdHMgb2xkCiAJICogICAgdHJhbnNhY3Rpb24uCiAJICoKQEAgLTEwNzYsMTggKzEwNzYsMTggQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoqIAorLyoqCiAgKiBpbnQgam91cm5hbF9kaXJ0eV9tZXRhZGF0YSgpIC0gIG1hcmsgYSBidWZmZXIgYXMgY29udGFpbmluZyBkaXJ0eSBtZXRhZGF0YQogICogQGhhbmRsZTogdHJhbnNhY3Rpb24gdG8gYWRkIGJ1ZmZlciB0by4KLSAqIEBiaDogYnVmZmVyIHRvIG1hcmsgCi0gKiAKKyAqIEBiaDogYnVmZmVyIHRvIG1hcmsKKyAqCiAgKiBtYXJrIGRpcnR5IG1ldGFkYXRhIHdoaWNoIG5lZWRzIHRvIGJlIGpvdXJuYWxlZCBhcyBwYXJ0IG9mIHRoZSBjdXJyZW50CiAgKiB0cmFuc2FjdGlvbi4KICAqCiAgKiBUaGUgYnVmZmVyIGlzIHBsYWNlZCBvbiB0aGUgdHJhbnNhY3Rpb24ncyBtZXRhZGF0YSBsaXN0IGFuZCBpcyBtYXJrZWQKLSAqIGFzIGJlbG9uZ2luZyB0byB0aGUgdHJhbnNhY3Rpb24uICAKKyAqIGFzIGJlbG9uZ2luZyB0byB0aGUgdHJhbnNhY3Rpb24uCiAgKgotICogUmV0dXJucyBlcnJvciBudW1iZXIgb3IgMCBvbiBzdWNjZXNzLiAgCisgKiBSZXR1cm5zIGVycm9yIG51bWJlciBvciAwIG9uIHN1Y2Nlc3MuCiAgKgogICogU3BlY2lhbCBjYXJlIG5lZWRzIHRvIGJlIHRha2VuIGlmIHRoZSBidWZmZXIgYWxyZWFkeSBiZWxvbmdzIHRvIHRoZQogICogY3VycmVudCBjb21taXR0aW5nIHRyYW5zYWN0aW9uIChpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBoYXZlIGZyb3plbgpAQCAtMTEzNSwxMSArMTEzNSwxMSBAQAogCiAJc2V0X2J1ZmZlcl9qYmRkaXJ0eShiaCk7CiAKLQkvKiAKKwkvKgogCSAqIE1ldGFkYXRhIGFscmVhZHkgb24gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gbGlzdCBkb2Vzbid0CiAJICogbmVlZCB0byBiZSBmaWxlZC4gIE1ldGFkYXRhIG9uIGFub3RoZXIgdHJhbnNhY3Rpb24ncyBsaXN0IG11c3QKIAkgKiBiZSBjb21taXR0aW5nLCBhbmQgd2lsbCBiZSByZWZpbGVkIG9uY2UgdGhlIGNvbW1pdCBjb21wbGV0ZXM6Ci0JICogbGVhdmUgaXQgYWxvbmUgZm9yIG5vdy4gCisJICogbGVhdmUgaXQgYWxvbmUgZm9yIG5vdy4KIAkgKi8KIAlpZiAoamgtPmJfdHJhbnNhY3Rpb24gIT0gdHJhbnNhY3Rpb24pIHsKIAkJSkJVRkZFUl9UUkFDRShqaCwgImFscmVhZHkgb24gb3RoZXIgdHJhbnNhY3Rpb24iKTsKQEAgLTExNjUsNyArMTE2NSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIAorLyoKICAqIGpvdXJuYWxfcmVsZWFzZV9idWZmZXI6IHVuZG8gYSBnZXRfd3JpdGVfYWNjZXNzIHdpdGhvdXQgYW55IGJ1ZmZlcgogICogdXBkYXRlcywgaWYgdGhlIHVwZGF0ZSBkZWNpZGVkIGluIHRoZSBlbmQgdGhhdCBpdCBkaWRuJ3QgbmVlZCBhY2Nlc3MuCiAgKgpAQCAtMTE3NiwyMCArMTE3NiwyMCBAQAogCUJVRkZFUl9UUkFDRShiaCwgImVudHJ5Iik7CiB9CiAKLS8qKiAKKy8qKgogICogdm9pZCBqb3VybmFsX2ZvcmdldCgpIC0gYmZvcmdldCgpIGZvciBwb3RlbnRpYWxseS1qb3VybmFsZWQgYnVmZmVycy4KICAqIEBoYW5kbGU6IHRyYW5zYWN0aW9uIGhhbmRsZQogICogQGJoOiAgICAgYmggdG8gJ2ZvcmdldCcKICAqCiAgKiBXZSBjYW4gb25seSBkbyB0aGUgYmZvcmdldCBpZiB0aGVyZSBhcmUgbm8gY29tbWl0cyBwZW5kaW5nIGFnYWluc3QgdGhlCiAgKiBidWZmZXIuICBJZiB0aGUgYnVmZmVyIGlzIGRpcnR5IGluIHRoZSBjdXJyZW50IHJ1bm5pbmcgdHJhbnNhY3Rpb24gd2UKLSAqIGNhbiBzYWZlbHkgdW5saW5rIGl0LiAKKyAqIGNhbiBzYWZlbHkgdW5saW5rIGl0LgogICoKICAqIGJoIG1heSBub3QgYmUgYSBqb3VybmFsbGVkIGJ1ZmZlciBhdCBhbGwgLSBpdCBtYXkgYmUgYSBub24tSkJECiAgKiBidWZmZXIgd2hpY2ggY2FtZSBvZmYgdGhlIGhhc2h0YWJsZS4gIENoZWNrIGZvciB0aGlzLgogICoKICAqIERlY3JlbWVudHMgYmgtPmJfY291bnQgYnkgb25lLgotICogCisgKgogICogQWxsb3cgdGhpcyBjYWxsIGV2ZW4gaWYgdGhlIGhhbmRsZSBoYXMgYWJvcnRlZCAtLS0gaXQgbWF5IGJlIHBhcnQgb2YKICAqIHRoZSBjYWxsZXIncyBjbGVhbnVwIGFmdGVyIGFuIGFib3J0LgogICovCkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCiAJCWRyb3BfcmVzZXJ2ZSA9IDE7CiAKLQkJLyogCisJCS8qCiAJCSAqIFdlIGFyZSBubyBsb25nZXIgZ29pbmcgdG8gam91cm5hbCB0aGlzIGJ1ZmZlci4KIAkJICogSG93ZXZlciwgdGhlIGNvbW1pdCBvZiB0aGlzIHRyYW5zYWN0aW9uIGlzIHN0aWxsCiAJCSAqIGltcG9ydGFudCB0byB0aGUgYnVmZmVyOiB0aGUgZGVsZXRlIHRoYXQgd2UgYXJlIG5vdwpAQCAtMTI0Niw3ICsxMjQ2LDcgQEAKIAkJICoKIAkJICogU28sIGlmIHdlIGhhdmUgYSBjaGVja3BvaW50IG9uIHRoZSBidWZmZXIsIHdlIHNob3VsZAogCQkgKiBub3cgcmVmaWxlIHRoZSBidWZmZXIgb24gb3VyIEJKX0ZvcmdldCBsaXN0IHNvIHRoYXQKLQkJICogd2Uga25vdyB0byByZW1vdmUgdGhlIGNoZWNrcG9pbnQgYWZ0ZXIgd2UgY29tbWl0LiAKKwkJICogd2Uga25vdyB0byByZW1vdmUgdGhlIGNoZWNrcG9pbnQgYWZ0ZXIgd2UgY29tbWl0LgogCQkgKi8KIAogCQlpZiAoamgtPmJfY3BfdHJhbnNhY3Rpb24pIHsKQEAgLTEyNjQsNyArMTI2NCw3IEBACiAJCQl9CiAJCX0KIAl9IGVsc2UgaWYgKGpoLT5iX3RyYW5zYWN0aW9uKSB7Ci0JCUpfQVNTRVJUX0pIKGpoLCAoamgtPmJfdHJhbnNhY3Rpb24gPT0gCisJCUpfQVNTRVJUX0pIKGpoLCAoamgtPmJfdHJhbnNhY3Rpb24gPT0KIAkJCQkgam91cm5hbC0+al9jb21taXR0aW5nX3RyYW5zYWN0aW9uKSk7CiAJCS8qIEhvd2V2ZXIsIGlmIHRoZSBidWZmZXIgaXMgc3RpbGwgb3duZWQgYnkgYSBwcmlvcgogCQkgKiAoY29tbWl0dGluZykgdHJhbnNhY3Rpb24sIHdlIGNhbid0IGRyb3AgaXQgeWV0Li4uICovCkBAIC0xMjk0LDcgKzEyOTQsNyBAQAogLyoqCiAgKiBpbnQgam91cm5hbF9zdG9wKCkgLSBjb21wbGV0ZSBhIHRyYW5zYWN0aW9uCiAgKiBAaGFuZGxlOiB0cmFuYWN0aW9uIHRvIGNvbXBsZXRlLgotICogCisgKgogICogQWxsIGRvbmUgZm9yIGEgcGFydGljdWxhciBoYW5kbGUuCiAgKgogICogVGhlcmUgaXMgbm90IG11Y2ggYWN0aW9uIG5lZWRlZCBoZXJlLiAgV2UganVzdCByZXR1cm4gYW55IHJlbWFpbmluZwpAQCAtMTMwMyw3ICsxMzAzLDcgQEAKICAqIGZpbGVzeXN0ZW0gaXMgbWFya2VkIGZvciBzeW5jaHJvbm91cyB1cGRhdGUuCiAgKgogICogam91cm5hbF9zdG9wIGl0c2VsZiB3aWxsIG5vdCB1c3VhbGx5IHJldHVybiBhbiBlcnJvciwgYnV0IGl0IG1heQotICogZG8gc28gaW4gdW51c3VhbCBjaXJjdW1zdGFuY2VzLiAgSW4gcGFydGljdWxhciwgZXhwZWN0IGl0IHRvIAorICogZG8gc28gaW4gdW51c3VhbCBjaXJjdW1zdGFuY2VzLiAgSW4gcGFydGljdWxhciwgZXhwZWN0IGl0IHRvCiAgKiByZXR1cm4gLUVJTyBpZiBhIGpvdXJuYWxfYWJvcnQgaGFzIGJlZW4gZXhlY3V0ZWQgc2luY2UgdGhlCiAgKiB0cmFuc2FjdGlvbiBiZWdhbi4KICAqLwpAQCAtMTM3Myw3ICsxMzczLDcgQEAKIAlpZiAoaGFuZGxlLT5oX3N5bmMgfHwKIAkJCXRyYW5zYWN0aW9uLT50X291dHN0YW5kaW5nX2NyZWRpdHMgPgogCQkJCWpvdXJuYWwtPmpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnMgfHwKLQkgICAgCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpKSB7CisJCQl0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRyYW5zYWN0aW9uLT50X2V4cGlyZXMpKSB7CiAJCS8qIERvIHRoaXMgZXZlbiBmb3IgYWJvcnRlZCBqb3VybmFsczogYW4gYWJvcnQgc3RpbGwKIAkJICogY29tcGxldGVzIHRoZSBjb21taXQgdGhyZWFkLCBpdCBqdXN0IGRvZXNuJ3Qgd3JpdGUKIAkJICogYW55dGhpbmcgdG8gZGlzay4gKi8KQEAgLTEzODgsNyArMTM4OCw3IEBACiAKIAkJLyoKIAkJICogU3BlY2lhbCBjYXNlOiBKRlNfU1lOQyBzeW5jaHJvbm91cyB1cGRhdGVzIHJlcXVpcmUgdXMKLQkJICogdG8gd2FpdCBmb3IgdGhlIGNvbW1pdCB0byBjb21wbGV0ZS4gIAorCQkgKiB0byB3YWl0IGZvciB0aGUgY29tbWl0IHRvIGNvbXBsZXRlLgogCQkgKi8KIAkJaWYgKGhhbmRsZS0+aF9zeW5jICYmICEoY3VycmVudC0+ZmxhZ3MgJiBQRl9NRU1BTExPQykpCiAJCQllcnIgPSBsb2dfd2FpdF9jb21taXQoam91cm5hbCwgdGlkKTsKQEAgLTE0MzksNyArMTQzOSw3IEBACiAgKiBqYmRfbG9ja19iaF9zdGF0ZShqaDJiaChqaCkpIGlzIGhlbGQuCiAgKi8KIAotc3RhdGljIGlubGluZSB2b2lkIAorc3RhdGljIGlubGluZSB2b2lkCiBfX2JsaXN0X2FkZF9idWZmZXIoc3RydWN0IGpvdXJuYWxfaGVhZCAqKmxpc3QsIHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoKQogewogCWlmICghKmxpc3QpIHsKQEAgLTE0NTQsNyArMTQ1NCw3IEBACiAJfQogfQogCi0vKiAKKy8qCiAgKiBSZW1vdmUgYSBidWZmZXIgZnJvbSBhIHRyYW5zYWN0aW9uIGxpc3QsIGdpdmVuIHRoZSB0cmFuc2FjdGlvbidzIGxpc3QKICAqIGhlYWQgcG9pbnRlci4KICAqCkBAIC0xNDc1LDcgKzE0NzUsNyBAQAogCWpoLT5iX3RuZXh0LT5iX3RwcmV2ID0gamgtPmJfdHByZXY7CiB9CiAKLS8qIAorLyoKICAqIFJlbW92ZSBhIGJ1ZmZlciBmcm9tIHRoZSBhcHByb3ByaWF0ZSB0cmFuc2FjdGlvbiBsaXN0LgogICoKICAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIGNhbiAqY2hhbmdlKiB0aGUgdmFsdWUgb2YKQEAgLTE1OTUsMTcgKzE1OTUsMTcgQEAKIH0KIAogCi0vKiogCisvKioKICAqIGludCBqb3VybmFsX3RyeV90b19mcmVlX2J1ZmZlcnMoKSAtIHRyeSB0byBmcmVlIHBhZ2UgYnVmZmVycy4KICAqIEBqb3VybmFsOiBqb3VybmFsIGZvciBvcGVyYXRpb24KICAqIEBwYWdlOiB0byB0cnkgYW5kIGZyZWUKICAqIEB1bnVzZWRfZ2ZwX21hc2s6IHVudXNlZAogICoKLSAqIAorICoKICAqIEZvciBhbGwgdGhlIGJ1ZmZlcnMgb24gdGhpcyBwYWdlLAogICogaWYgdGhleSBhcmUgZnVsbHkgd3JpdHRlbiBvdXQgb3JkZXJlZCBkYXRhLCBtb3ZlIHRoZW0gb250byBCVUZfQ0xFQU4KICAqIHNvIHRyeV90b19mcmVlX2J1ZmZlcnMoKSBjYW4gcmVhcCB0aGVtLgotICogCisgKgogICogVGhpcyBmdW5jdGlvbiByZXR1cm5zIG5vbi16ZXJvIGlmIHdlIHdpc2ggdHJ5X3RvX2ZyZWVfYnVmZmVycygpCiAgKiB0byBiZSBjYWxsZWQuIFdlIGRvIHRoaXMgaWYgdGhlIHBhZ2UgaXMgcmVsZWFzYWJsZSBieSB0cnlfdG9fZnJlZV9idWZmZXJzKCkuCiAgKiBXZSBhbHNvIGRvIGl0IGlmIHRoZSBwYWdlIGhhcyBsb2NrZWQgb3IgZGlydHkgYnVmZmVycyBhbmQgdGhlIGNhbGxlciB3YW50cwpAQCAtMTYyOSw3ICsxNjI5LDcgQEAKICAqIGNhbm5vdCBoYXBwZW4gYmVjYXVzZSB3ZSBuZXZlciByZWFsbG9jYXRlIGZyZWVkIGRhdGEgYXMgbWV0YWRhdGEKICAqIHdoaWxlIHRoZSBkYXRhIGlzIHBhcnQgb2YgYSB0cmFuc2FjdGlvbi4gIFllcz8KICAqLwotaW50IGpvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsIAoraW50IGpvdXJuYWxfdHJ5X3RvX2ZyZWVfYnVmZmVycyhqb3VybmFsX3QgKmpvdXJuYWwsCiAJCQkJc3RydWN0IHBhZ2UgKnBhZ2UsIGdmcF90IHVudXNlZF9nZnBfbWFzaykKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWQ7CkBAIC0xNjk3LDcgKzE2OTcsNyBAQAogfQogCiAvKgotICogam91cm5hbF9pbnZhbGlkYXRlcGFnZSAKKyAqIGpvdXJuYWxfaW52YWxpZGF0ZXBhZ2UKICAqCiAgKiBUaGlzIGNvZGUgaXMgdHJpY2t5LiAgSXQgaGFzIGEgbnVtYmVyIG9mIGNhc2VzIHRvIGRlYWwgd2l0aC4KICAqCkBAIC0xNzA1LDE1ICsxNzA1LDE1IEBACiAgKgogICogaV9zaXplIG11c3QgYmUgdXBkYXRlZCBvbiBkaXNrIGJlZm9yZSB3ZSBzdGFydCBjYWxsaW5nIGludmFsaWRhdGVwYWdlIG9uIHRoZQogICogZGF0YS4KLSAqIAorICoKICAqICBUaGlzIGlzIGRvbmUgaW4gZXh0MyBieSBkZWZpbmluZyBhbiBleHQzX3NldGF0dHIgbWV0aG9kIHdoaWNoCiAgKiAgdXBkYXRlcyBpX3NpemUgYmVmb3JlIHRydW5jYXRlIGdldHMgZ29pbmcuICBCeSBtYWludGFpbmluZyB0aGlzCiAgKiAgaW52YXJpYW50LCB3ZSBjYW4gYmUgc3VyZSB0aGF0IGl0IGlzIHNhZmUgdG8gdGhyb3cgYXdheSBhbnkgYnVmZmVycwogICogIGF0dGFjaGVkIHRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uOiBvbmNlIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLAogICogIHdlIGtub3cgdGhhdCB0aGUgZGF0YSB3aWxsIG5vdCBiZSBuZWVkZWQuCi0gKiAKKyAqCiAgKiAgTm90ZSBob3dldmVyIHRoYXQgd2UgY2FuICpub3QqIHRocm93IGF3YXkgZGF0YSBiZWxvbmdpbmcgdG8gdGhlCi0gKiAgcHJldmlvdXMsIGNvbW1pdHRpbmcgdHJhbnNhY3Rpb24hICAKKyAqICBwcmV2aW91cywgY29tbWl0dGluZyB0cmFuc2FjdGlvbiEKICAqCiAgKiBBbnkgZGlzayBibG9ja3Mgd2hpY2ggKmFyZSogcGFydCBvZiB0aGUgcHJldmlvdXMsIGNvbW1pdHRpbmcKICAqIHRyYW5zYWN0aW9uIChhbmQgd2hpY2ggdGhlcmVmb3JlIGNhbm5vdCBiZSBkaXNjYXJkZWQgaW1tZWRpYXRlbHkpIGFyZQpAQCAtMTczMiw3ICsxNzMyLDcgQEAKICAqIGRvbid0IG1ha2UgZ3VhcmFudGVlcyBhYm91dCB0aGUgb3JkZXIgaW4gd2hpY2ggZGF0YSBoaXRzIGRpc2sgLS0tIGluCiAgKiBwYXJ0aWN1bGFyIHdlIGRvbid0IGd1YXJhbnRlZSB0aGF0IG5ldyBkaXJ0eSBkYXRhIGlzIGZsdXNoZWQgYmVmb3JlCiAgKiB0cmFuc2FjdGlvbiBjb21taXQgLS0tIHNvIGl0IGlzIGFsd2F5cyBzYWZlIGp1c3QgdG8gZGlzY2FyZCBkYXRhCi0gKiBpbW1lZGlhdGVseSBpbiB0aGF0IG1vZGUuICAtLXNjdCAKKyAqIGltbWVkaWF0ZWx5IGluIHRoYXQgbW9kZS4gIC0tc2N0CiAgKi8KIAogLyoKQEAgLTE4NzYsOSArMTg3Niw5IEBACiAJcmV0dXJuIG1heV9mcmVlOwogfQogCi0vKiogCisvKioKICAqIHZvaWQgam91cm5hbF9pbnZhbGlkYXRlcGFnZSgpCi0gKiBAam91cm5hbDogam91cm5hbCB0byB1c2UgZm9yIGZsdXNoLi4uIAorICogQGpvdXJuYWw6IGpvdXJuYWwgdG8gdXNlIGZvciBmbHVzaC4uLgogICogQHBhZ2U6ICAgIHBhZ2UgdG8gZmx1c2gKICAqIEBvZmZzZXQ6ICBsZW5ndGggb2YgcGFnZSB0byBpbnZhbGlkYXRlLgogICoKQEAgLTE4ODYsNyArMTg4Niw3IEBACiAgKgogICovCiB2b2lkIGpvdXJuYWxfaW52YWxpZGF0ZXBhZ2Uoam91cm5hbF90ICpqb3VybmFsLAotCQkgICAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgCisJCSAgICAgIHN0cnVjdCBwYWdlICpwYWdlLAogCQkgICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmhlYWQsICpiaCwgKm5leHQ7CkBAIC0xOTA4LDcgKzE5MDgsNyBAQAogCQluZXh0ID0gYmgtPmJfdGhpc19wYWdlOwogCiAJCWlmIChvZmZzZXQgPD0gY3Vycl9vZmYpIHsKLQkJIAkvKiBUaGlzIGJsb2NrIGlzIHdob2xseSBvdXRzaWRlIHRoZSB0cnVuY2F0aW9uIHBvaW50ICovCisJCQkvKiBUaGlzIGJsb2NrIGlzIHdob2xseSBvdXRzaWRlIHRoZSB0cnVuY2F0aW9uIHBvaW50ICovCiAJCQlsb2NrX2J1ZmZlcihiaCk7CiAJCQltYXlfZnJlZSAmPSBqb3VybmFsX3VubWFwX2J1ZmZlcihqb3VybmFsLCBiaCk7CiAJCQl1bmxvY2tfYnVmZmVyKGJoKTsKQEAgLTE5MjQsOCArMTkyNCw4IEBACiAJfQogfQogCi0vKiAKLSAqIEZpbGUgYSBidWZmZXIgb24gdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGxpc3QuIAorLyoKKyAqIEZpbGUgYSBidWZmZXIgb24gdGhlIGdpdmVuIHRyYW5zYWN0aW9uIGxpc3QuCiAgKi8KIHZvaWQgX19qb3VybmFsX2ZpbGVfYnVmZmVyKHN0cnVjdCBqb3VybmFsX2hlYWQgKmpoLAogCQkJdHJhbnNhY3Rpb25fdCAqdHJhbnNhY3Rpb24sIGludCBqbGlzdCkKQEAgLTE5NDgsNyArMTk0OCw3IEBACiAJICogd2l0aCBfX2piZF91bmV4cGVjdGVkX2RpcnR5X2J1ZmZlcigpJ3MgaGFuZGxpbmcgb2YgZGlydHkKIAkgKiBzdGF0ZS4gKi8KIAotCWlmIChqbGlzdCA9PSBCSl9NZXRhZGF0YSB8fCBqbGlzdCA9PSBCSl9SZXNlcnZlZCB8fCAKKwlpZiAoamxpc3QgPT0gQkpfTWV0YWRhdGEgfHwgamxpc3QgPT0gQkpfUmVzZXJ2ZWQgfHwKIAkgICAgamxpc3QgPT0gQkpfU2hhZG93IHx8IGpsaXN0ID09IEJKX0ZvcmdldCkgewogCQlpZiAodGVzdF9jbGVhcl9idWZmZXJfZGlydHkoYmgpIHx8CiAJCSAgICB0ZXN0X2NsZWFyX2J1ZmZlcl9qYmRkaXJ0eShiaCkpCkBAIC0yMDA4LDcgKzIwMDgsNyBAQAogCWpiZF91bmxvY2tfYmhfc3RhdGUoamgyYmgoamgpKTsKIH0KIAotLyogCisvKgogICogUmVtb3ZlIGEgYnVmZmVyIGZyb20gaXRzIGN1cnJlbnQgYnVmZmVyIGxpc3QgaW4gcHJlcGFyYXRpb24gZm9yCiAgKiBkcm9wcGluZyBpdCBmcm9tIGl0cyBjdXJyZW50IHRyYW5zYWN0aW9uIGVudGlyZWx5LiAgSWYgdGhlIGJ1ZmZlciBoYXMKICAqIGFscmVhZHkgc3RhcnRlZCB0byBiZSB1c2VkIGJ5IGEgc3Vic2VxdWVudCB0cmFuc2FjdGlvbiwgcmVmaWxlIHRoZQpAQCAtMjA2MCw3ICsyMDYwLDcgQEAKICAqIHRvIHRoZSBjYWxsZXIgdG8gcmVtb3ZlIHRoZSBqb3VybmFsX2hlYWQgaWYgbmVjZXNzYXJ5LiAgRm9yIHRoZQogICogdW5sb2NrZWQgam91cm5hbF9yZWZpbGVfYnVmZmVyIGNhbGwsIHRoZSBjYWxsZXIgaXNuJ3QgZ29pbmcgdG8gYmUKICAqIGRvaW5nIGFueXRoaW5nIGVsc2UgdG8gdGhlIGJ1ZmZlciBzbyB3ZSBuZWVkIHRvIGRvIHRoZSBjbGVhbnVwCi0gKiBvdXJzZWx2ZXMgdG8gYXZvaWQgYSBqaCBsZWFrLiAKKyAqIG91cnNlbHZlcyB0byBhdm9pZCBhIGpoIGxlYWsuCiAgKgogICogKioqIFRoZSBqb3VybmFsX2hlYWQgbWF5IGJlIGZyZWVkIGJ5IHRoaXMgY2FsbCEgKioqCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMgYi9mcy9qZmZzL2lub2RlLXYyMy5jCmluZGV4IDkzMDY4NjkuLjNmNzg5OWUgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMvaW5vZGUtdjIzLmMKKysrIGIvZnMvamZmcy9pbm9kZS12MjMuYwpAQCAtMzY0LDEyICszNjQsMTEgQEAKIAlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gMDsKIAlpbm9kZS0+aV9hdGltZS50dl9uc2VjID0gMDsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwogCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwogCiAJZiA9IGpmZnNfZmluZF9maWxlKGMsIHJhd19pbm9kZS0+aW5vKTsKIAotCWlub2RlLT51LmdlbmVyaWNfaXAgPSAodm9pZCAqKWY7CisJaW5vZGUtPmlfcHJpdmF0ZSA9ICh2b2lkICopZjsKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAKIAlyZXR1cm4gaW5vZGU7CkBAIC00NDIsNyArNDQxLDcgQEAKIAl9KTsKIAogCXJlc3VsdCA9IC1FTk9URElSOwotCWlmICghKG9sZF9kaXJfZiA9IChzdHJ1Y3QgamZmc19maWxlICopb2xkX2Rpci0+dS5nZW5lcmljX2lwKSkgeworCWlmICghKG9sZF9kaXJfZiA9IG9sZF9kaXItPmlfcHJpdmF0ZSkpIHsKIAkJRChwcmludGsoImpmZnNfcmVuYW1lKCk6IE9sZCBkaXIgaW52YWxpZC5cbiIpKTsKIAkJZ290byBqZmZzX3JlbmFtZV9lbmQ7CiAJfQpAQCAtNDU2LDcgKzQ1NSw3IEBACiAKIAkvKiBGaW5kIHRoZSBuZXcgZGlyZWN0b3J5LiAgKi8KIAlyZXN1bHQgPSAtRU5PVERJUjsKLQlpZiAoIShuZXdfZGlyX2YgPSAoc3RydWN0IGpmZnNfZmlsZSAqKW5ld19kaXItPnUuZ2VuZXJpY19pcCkpIHsKKwlpZiAoIShuZXdfZGlyX2YgPSBuZXdfZGlyLT5pX3ByaXZhdGUpKSB7CiAJCUQocHJpbnRrKCJqZmZzX3JlbmFtZSgpOiBOZXcgZGlyIGludmFsaWQuXG4iKSk7CiAJCWdvdG8gamZmc19yZW5hbWVfZW5kOwogCX0KQEAgLTU5Myw3ICs1OTIsNyBAQAogCQl9CiAJCWVsc2UgewogCQkJZGRpbm8gPSAoKHN0cnVjdCBqZmZzX2ZpbGUgKikKLQkJCQkgaW5vZGUtPnUuZ2VuZXJpY19pcCktPnBpbm87CisJCQkJIGlub2RlLT5pX3ByaXZhdGUpLT5waW5vOwogCQl9CiAJCUQzKHByaW50aygiamZmc19yZWFkZGlyKCk6IFwiLi5cIiAldVxuIiwgZGRpbm8pKTsKIAkJaWYgKGZpbGxkaXIoZGlyZW50LCAiLi4iLCAyLCBmaWxwLT5mX3BvcywgZGRpbm8sIERUX0RJUikgPCAwKSB7CkBAIC02MDQsNyArNjAzLDcgQEAKIAkJfQogCQlmaWxwLT5mX3BvcysrOwogCX0KLQlmID0gKChzdHJ1Y3QgamZmc19maWxlICopaW5vZGUtPnUuZ2VuZXJpY19pcCktPmNoaWxkcmVuOworCWYgPSAoKHN0cnVjdCBqZmZzX2ZpbGUgKilpbm9kZS0+aV9wcml2YXRlKS0+Y2hpbGRyZW47CiAKIAlqID0gMjsKIAl3aGlsZShmICYmIChmLT5kZWxldGVkIHx8IGorKyA8IGZpbHAtPmZfcG9zICkpIHsKQEAgLTY1Miw3ICs2NTEsNyBAQAogCWxvY2tfa2VybmVsKCk7CiAKIAlEMyh7Ci0JCWNoYXIgKnMgPSAoY2hhciAqKWttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCWNoYXIgKnMgPSBrbWFsbG9jKGxlbiArIDEsIEdGUF9LRVJORUwpOwogCQltZW1jcHkocywgbmFtZSwgbGVuKTsKIAkJc1tsZW5dID0gJ1wwJzsKIAkJcHJpbnRrKCJqZmZzX2xvb2t1cCgpOiBkaXI6IDB4JXAsIG5hbWU6IFwiJXNcIlxuIiwgZGlyLCBzKTsKQEAgLTY2OCw3ICs2NjcsNyBAQAogCX0KIAogCXIgPSAtRUFDQ0VTOwotCWlmICghKGQgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWRpci0+dS5nZW5lcmljX2lwKSkgeworCWlmICghKGQgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWRpci0+aV9wcml2YXRlKSkgewogCQlEKHByaW50aygiamZmc19sb29rdXAoKTogTm8gc3VjaCBpbm9kZSEgKCVsdSlcbiIsCiAJCQkgZGlyLT5pX2lubykpOwogCQlnb3RvIGpmZnNfbG9va3VwX2VuZDsKQEAgLTczOSw3ICs3MzgsNyBAQAogCXVuc2lnbmVkIGxvbmcgcmVhZF9sZW47CiAJaW50IHJlc3VsdDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gKHN0cnVjdCBpbm9kZSopcGFnZS0+bWFwcGluZy0+aG9zdDsKLQlzdHJ1Y3QgamZmc19maWxlICpmID0gKHN0cnVjdCBqZmZzX2ZpbGUgKilpbm9kZS0+dS5nZW5lcmljX2lwOworCXN0cnVjdCBqZmZzX2ZpbGUgKmYgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWlub2RlLT5pX3ByaXZhdGU7CiAJc3RydWN0IGpmZnNfY29udHJvbCAqYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopaW5vZGUtPmlfc2ItPnNfZnNfaW5mbzsKIAlpbnQgcjsKIAlsb2ZmX3Qgb2Zmc2V0OwpAQCAtODI4LDcgKzgyNyw3IEBACiAJfSk7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWRpcl9mID0gKHN0cnVjdCBqZmZzX2ZpbGUgKilkaXItPnUuZ2VuZXJpY19pcDsKKwlkaXJfZiA9IGRpci0+aV9wcml2YXRlOwogCiAJQVNTRVJUKGlmICghZGlyX2YpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJqZmZzX21rZGlyKCk6IE5vIHJlZmVyZW5jZSB0byBhICIKQEAgLTk3Miw3ICs5NzEsNyBAQAogCQlrZnJlZShfbmFtZSk7CiAJfSk7CiAKLQlkaXJfZiA9IChzdHJ1Y3QgamZmc19maWxlICopIGRpci0+dS5nZW5lcmljX2lwOworCWRpcl9mID0gZGlyLT5pX3ByaXZhdGU7CiAJYyA9IGRpcl9mLT5jOwogCiAJcmVzdWx0ID0gLUVOT0VOVDsKQEAgLTEwNTMsOSArMTA1Miw4IEBACiAKIAlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQlpbm9kZS0+aV9ubGluay0tOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAogCWRfZGVsZXRlKGRlbnRyeSk7CS8qIFRoaXMgYWxzbyBmcmVlcyB0aGUgaW5vZGUgKi8KIApAQCAtMTA4Miw3ICsxMDgwLDcgQEAKIAlpZiAoIW9sZF92YWxpZF9kZXYocmRldikpCiAJCXJldHVybiAtRUlOVkFMOwogCWxvY2tfa2VybmVsKCk7Ci0JZGlyX2YgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWRpci0+dS5nZW5lcmljX2lwOworCWRpcl9mID0gZGlyLT5pX3ByaXZhdGU7CiAJYyA9IGRpcl9mLT5jOwogCiAJRDMocHJpbnRrIChLRVJOX05PVElDRSAibWtub2QoKTogZG93biBiaWdsb2NrXG4iKSk7CkBAIC0xMTczLDggKzExNzEsOCBAQAogCWxvY2tfa2VybmVsKCk7CiAJRDEoewogCQlpbnQgbGVuID0gZGVudHJ5LT5kX25hbWUubGVuOyAKLQkJY2hhciAqX25hbWUgPSAoY2hhciAqKWttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7Ci0JCWNoYXIgKl9zeW1uYW1lID0gKGNoYXIgKilrbWFsbG9jKHN5bW5hbWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CisJCWNoYXIgKl9uYW1lID0ga21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJY2hhciAqX3N5bW5hbWUgPSBrbWFsbG9jKHN5bW5hbWVfbGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCW1lbWNweShfbmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSwgbGVuKTsKIAkJX25hbWVbbGVuXSA9ICdcMCc7CiAJCW1lbWNweShfc3ltbmFtZSwgc3ltbmFtZSwgc3ltbmFtZV9sZW4pOwpAQCAtMTE4Niw3ICsxMTg0LDcgQEAKIAkJa2ZyZWUoX3N5bW5hbWUpOwogCX0pOwogCi0JZGlyX2YgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWRpci0+dS5nZW5lcmljX2lwOworCWRpcl9mID0gZGlyLT5pX3ByaXZhdGU7CiAJQVNTRVJUKGlmICghZGlyX2YpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJqZmZzX3N5bWxpbmsoKTogTm8gcmVmZXJlbmNlIHRvIGEgIgogCQkgICAgICAgImpmZnNfZmlsZSBzdHJ1Y3QgaW4gaW5vZGUuXG4iKTsKQEAgLTEyODIsMTQgKzEyODAsMTQgQEAKIAlsb2NrX2tlcm5lbCgpOwogCUQxKHsKIAkJaW50IGxlbiA9IGRlbnRyeS0+ZF9uYW1lLmxlbjsKLQkJY2hhciAqcyA9IChjaGFyICopa21hbGxvYyhsZW4gKyAxLCBHRlBfS0VSTkVMKTsKKwkJY2hhciAqcyA9IGttYWxsb2MobGVuICsgMSwgR0ZQX0tFUk5FTCk7CiAJCW1lbWNweShzLCBkZW50cnktPmRfbmFtZS5uYW1lLCBsZW4pOwogCQlzW2xlbl0gPSAnXDAnOwogCQlwcmludGsoImpmZnNfY3JlYXRlKCk6IGRpcjogMHglcCwgbmFtZTogXCIlc1wiXG4iLCBkaXIsIHMpOwogCQlrZnJlZShzKTsKIAl9KTsKIAotCWRpcl9mID0gKHN0cnVjdCBqZmZzX2ZpbGUgKilkaXItPnUuZ2VuZXJpY19pcDsKKwlkaXJfZiA9IGRpci0+aV9wcml2YXRlOwogCUFTU0VSVChpZiAoIWRpcl9mKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiamZmc19jcmVhdGUoKTogTm8gcmVmZXJlbmNlIHRvIGEgIgogCQkgICAgICAgImpmZnNfZmlsZSBzdHJ1Y3QgaW4gaW5vZGUuXG4iKTsKQEAgLTE0MDMsOSArMTQwMSw5IEBACiAJCWdvdG8gb3V0X2lzZW07CiAJfQogCi0JaWYgKCEoZiA9IChzdHJ1Y3QgamZmc19maWxlICopaW5vZGUtPnUuZ2VuZXJpY19pcCkpIHsKLQkJRChwcmludGsoImpmZnNfZmlsZV93cml0ZSgpOiBpbm9kZS0+dS5nZW5lcmljX2lwID0gMHglcFxuIiwKLQkJCQlpbm9kZS0+dS5nZW5lcmljX2lwKSk7CisJaWYgKCEoZiA9IGlub2RlLT5pX3ByaXZhdGUpKSB7CisJCUQocHJpbnRrKCJqZmZzX2ZpbGVfd3JpdGUoKTogaW5vZGUtPmlfcHJpdmF0ZSA9IDB4JXBcbiIsCisJCQkJaW5vZGUtPmlfcHJpdmF0ZSkpOwogCQlnb3RvIG91dF9pc2VtOwogCX0KIApAQCAtMTYzMyw4ICsxNjMxLDEwIEBACiB7CiAJLm9wZW4JCT0gZ2VuZXJpY19maWxlX29wZW4sCiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAotCS53cml0ZQkJPSBnZW5lcmljX2ZpbGVfd3JpdGUsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkuaW9jdGwJCT0gamZmc19pb2N0bCwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKIAkuZnN5bmMJCT0gamZmc19mc3luYywKQEAgLTE2OTMsNyArMTY5Myw3IEBACiAJCW11dGV4X3VubG9jaygmYy0+Zm1jLT5iaWdsb2NrKTsKIAkJcmV0dXJuOwogCX0KLQlpbm9kZS0+dS5nZW5lcmljX2lwID0gKHZvaWQgKilmOworCWlub2RlLT5pX3ByaXZhdGUgPSBmOwogCWlub2RlLT5pX21vZGUgPSBmLT5tb2RlOwogCWlub2RlLT5pX25saW5rID0gZi0+bmxpbms7CiAJaW5vZGUtPmlfdWlkID0gZi0+dWlkOwpAQCAtMTcwNiw3ICsxNzA2LDYgQEAKIAlpbm9kZS0+aV9tdGltZS50dl9uc2VjID0gCiAJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7CiAKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwogCWlub2RlLT5pX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgNTExKSA+PiA5OwogCWlmIChTX0lTUkVHKGlub2RlLT5pX21vZGUpKSB7CiAJCWlub2RlLT5pX29wID0gJmpmZnNfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpAQCAtMTc0OCw3ICsxNzQ3LDcgQEAKIAlsb2NrX2tlcm5lbCgpOwogCWlub2RlLT5pX3NpemUgPSAwOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7Ci0JaW5vZGUtPnUuZ2VuZXJpY19pcCA9IE5VTEw7CisJaW5vZGUtPmlfcHJpdmF0ZSA9IE5VTEw7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwogCWlmIChpbm9kZS0+aV9ubGluayA9PSAwKSB7CiAJCWMgPSAoc3RydWN0IGpmZnNfY29udHJvbCAqKSBpbm9kZS0+aV9zYi0+c19mc19pbmZvOwpkaWZmIC0tZ2l0IGEvZnMvamZmcy9pbnRyZXAuYyBiL2ZzL2pmZnMvaW50cmVwLmMKaW5kZXggOTAwMGYxZS4uNGE1NDNlMSAxMDA2NDQKLS0tIGEvZnMvamZmcy9pbnRyZXAuYworKysgYi9mcy9qZmZzL2ludHJlcC5jCkBAIC00ODgsMTMgKzQ4OCwxMSBAQAogewogCXN0cnVjdCBqZmZzX2ZpbGUgKmY7CiAKLQlpZiAoIShmID0gKHN0cnVjdCBqZmZzX2ZpbGUgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmc19maWxlKSwKLQkJCQkJICAgICAgR0ZQX0tFUk5FTCkpKSB7CisJaWYgKCEoZiA9IGt6YWxsb2Moc2l6ZW9mKCpmKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCUQocHJpbnRrKCJqZmZzX2NyZWF0ZV9maWxlKCk6IEZhaWxlZCFcbiIpKTsKIAkJcmV0dXJuIE5VTEw7CiAJfQogCW5vX2pmZnNfZmlsZSsrOwotCW1lbXNldChmLCAwLCBzaXplb2Yoc3RydWN0IGpmZnNfZmlsZSkpOwogCWYtPmlubyA9IHJhd19pbm9kZS0+aW5vOwogCWYtPnBpbm8gPSByYXdfaW5vZGUtPnBpbm87CiAJZi0+bmxpbmsgPSByYXdfaW5vZGUtPm5saW5rOwpAQCAtNTE2LDcgKzUxNCw3IEBACiAKIAlEMihwcmludGsoImpmZnNfY3JlYXRlX2NvbnRyb2woKVxuIikpOwogCi0JaWYgKCEoYyA9IChzdHJ1Y3QgamZmc19jb250cm9sICopa21hbGxvYyhzLCBHRlBfS0VSTkVMKSkpIHsKKwlpZiAoIShjID0ga21hbGxvYyhzLCBHRlBfS0VSTkVMKSkpIHsKIAkJZ290byBmYWlsX2NvbnRyb2w7CiAJfQogCURKTShub19qZmZzX2NvbnRyb2wrKyk7CkBAIC01MjQsNyArNTIyLDcgQEAKIAljLT5nY190YXNrID0gTlVMTDsKIAljLT5oYXNoX2xlbiA9IEpGRlNfSEFTSF9TSVpFOwogCXMgPSBzaXplb2Yoc3RydWN0IGxpc3RfaGVhZCkgKiBjLT5oYXNoX2xlbjsKLQlpZiAoIShjLT5oYXNoID0gKHN0cnVjdCBsaXN0X2hlYWQgKilrbWFsbG9jKHMsIEdGUF9LRVJORUwpKSkgeworCWlmICghKGMtPmhhc2ggPSBrbWFsbG9jKHMsIEdGUF9LRVJORUwpKSkgewogCQlnb3RvIGZhaWxfaGFzaDsKIAl9CiAJREpNKG5vX2hhc2grKyk7CkBAIC01OTMsOCArNTkxLDcgQEAKIAlEMihwcmludGsoImpmZnNfYWRkX3ZpcnR1YWxfcm9vdCgpOiAiCiAJCSAgIkNyZWF0aW5nIGEgdmlydHVhbCByb290IGRpcmVjdG9yeS5cbiIpKTsKIAotCWlmICghKHJvb3QgPSAoc3RydWN0IGpmZnNfZmlsZSAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBqZmZzX2ZpbGUpLAotCQkJCQkJIEdGUF9LRVJORUwpKSkgeworCWlmICghKHJvb3QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmc19maWxlKSwgR0ZQX0tFUk5FTCkpKSB7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAlub19qZmZzX2ZpbGUrKzsKZGlmZiAtLWdpdCBhL2ZzL2pmZnMvamZmc19mbS5jIGIvZnMvamZmcy9qZmZzX2ZtLmMKaW5kZXggN2Q4Y2ExYS4uMjliNjhkOSAxMDA2NDQKLS0tIGEvZnMvamZmcy9qZmZzX2ZtLmMKKysrIGIvZnMvamZmcy9qZmZzX2ZtLmMKQEAgLTk0LDggKzk0LDcgQEAKIAlzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKIAkKIAlEMyhwcmludGsoImpmZnNfYnVpbGRfYmVnaW4oKVxuIikpOwotCWZtYyA9IChzdHJ1Y3QgamZmc19mbWNvbnRyb2wgKilrbWFsbG9jKHNpemVvZihzdHJ1Y3QgamZmc19mbWNvbnRyb2wpLAotCQkJCQkgICAgICAgR0ZQX0tFUk5FTCk7CisJZm1jID0ga21hbGxvYyhzaXplb2YoKmZtYyksIEdGUF9LRVJORUwpOwogCWlmICghZm1jKSB7CiAJCUQocHJpbnRrKCJqZmZzX2J1aWxkX2JlZ2luKCk6IEFsbG9jYXRpb24gb2YgIgogCQkJICJzdHJ1Y3QgamZmc19mbWNvbnRyb2wgZmFpbGVkIVxuIikpOwpAQCAtNDg2LDggKzQ4NSw3IEBACiAKIAlEMyhwcmludGsoImpmZnNfYWRkX25vZGUoKTogaW5vID0gJXVcbiIsIG5vZGUtPmlubykpOwogCi0JcmVmID0gKHN0cnVjdCBqZmZzX25vZGVfcmVmICopa21hbGxvYyhzaXplb2Yoc3RydWN0IGpmZnNfbm9kZV9yZWYpLAotCQkJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlyZWYgPSBrbWFsbG9jKHNpemVvZigqcmVmKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyZWYpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9qZmZzMi9kaXIuYyBiL2ZzL2pmZnMyL2Rpci5jCmluZGV4IGVkZDgzNzEuLjlkZWY2YWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmZnMyL2Rpci5jCisrKyBiL2ZzL2pmZnMyL2Rpci5jCkBAIC01ODgsNyArNTg4LDcgQEAKIAl9CiAKIAlkaXJfaS0+aV9tdGltZSA9IGRpcl9pLT5pX2N0aW1lID0gSVRJTUUoamUzMl90b19jcHUocmQtPm1jdGltZSkpOwotCWRpcl9pLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcl9pKTsKIAogCWpmZnMyX2ZyZWVfcmF3X2RpcmVudChyZCk7CiAKQEAgLTYxNSw3ICs2MTUsNyBAQAogCX0KIAlyZXQgPSBqZmZzMl91bmxpbmsoZGlyX2ksIGRlbnRyeSk7CiAJaWYgKCFyZXQpCi0JCWRpcl9pLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsoZGlyX2kpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTgyMyw3ICs4MjMsNyBAQAogCiAJaWYgKHZpY3RpbV9mKSB7CiAJCS8qIFRoZXJlIHdhcyBhIHZpY3RpbS4gS2lsbCBpdCBvZmYgbmljZWx5ICovCi0JCW5ld19kZW50cnktPmRfaW5vZGUtPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhuZXdfZGVudHJ5LT5kX2lub2RlKTsKIAkJLyogRG9uJ3Qgb29wcyBpZiB0aGUgdmljdGltIHdhcyBhIGRpcmVudCBwb2ludGluZyB0byBhbgogCQkgICBpbm9kZSB3aGljaCBkaWRuJ3QgZXhpc3QuICovCiAJCWlmICh2aWN0aW1fZi0+aW5vY2FjaGUpIHsKQEAgLTgzNiw3ICs4MzYsNyBAQAogCS8qIElmIGl0IHdhcyBhIGRpcmVjdG9yeSB3ZSBtb3ZlZCwgYW5kIHRoZXJlIHdhcyBubyB2aWN0aW0sCiAJICAgaW5jcmVhc2UgaV9ubGluayBvbiBpdHMgbmV3IHBhcmVudCAqLwogCWlmIChTX0lTRElSKG9sZF9kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkgJiYgIXZpY3RpbV9mKQotCQluZXdfZGlyX2ktPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKG5ld19kaXJfaSk7CiAKIAkvKiBVbmxpbmsgdGhlIG9yaWdpbmFsICovCiAJcmV0ID0gamZmczJfZG9fdW5saW5rKGMsIEpGRlMyX0lOT0RFX0lORk8ob2xkX2Rpcl9pKSwKQEAgLTg0OCw3ICs4NDgsNyBAQAogCQkvKiBPaCBzaGl0LiBXZSByZWFsbHkgb3VnaHQgdG8gbWFrZSBhIHNpbmdsZSBub2RlIHdoaWNoIGNhbiBkbyBib3RoIGF0b21pY2FsbHkgKi8KIAkJc3RydWN0IGpmZnMyX2lub2RlX2luZm8gKmYgPSBKRkZTMl9JTk9ERV9JTkZPKG9sZF9kZW50cnktPmRfaW5vZGUpOwogCQlkb3duKCZmLT5zZW0pOwotCQlvbGRfZGVudHJ5LT5kX2lub2RlLT5pX25saW5rKys7CisJCWluY19ubGluayhvbGRfZGVudHJ5LT5kX2lub2RlKTsKIAkJaWYgKGYtPmlub2NhY2hlKQogCQkJZi0+aW5vY2FjaGUtPm5saW5rKys7CiAJCXVwKCZmLT5zZW0pOwpAQCAtODYyLDcgKzg2Miw3IEBACiAJfQogCiAJaWYgKFNfSVNESVIob2xkX2RlbnRyeS0+ZF9pbm9kZS0+aV9tb2RlKSkKLQkJb2xkX2Rpcl9pLT5pX25saW5rLS07CisJCWRyb3Bfbmxpbmsob2xkX2Rpcl9pKTsKIAogCW5ld19kaXJfaS0+aV9tdGltZSA9IG5ld19kaXJfaS0+aV9jdGltZSA9IG9sZF9kaXJfaS0+aV9tdGltZSA9IG9sZF9kaXJfaS0+aV9jdGltZSA9IElUSU1FKG5vdyk7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmZnMyL2ZpbGUuYyBiL2ZzL2pmZnMyL2ZpbGUuYwppbmRleCAzZWQ2ZTNlLi4yNDI4NzVmIDEwMDY0NAotLS0gYS9mcy9qZmZzMi9maWxlLmMKKysrIGIvZnMvamZmczIvZmlsZS5jCkBAIC00Miw4ICs0MiwxMCBAQAogewogCS5sbHNlZWsgPQlnZW5lcmljX2ZpbGVfbGxzZWVrLAogCS5vcGVuID0JCWdlbmVyaWNfZmlsZV9vcGVuLAotCS5yZWFkID0JCWdlbmVyaWNfZmlsZV9yZWFkLAotCS53cml0ZSA9CWdlbmVyaWNfZmlsZV93cml0ZSwKKyAJLnJlYWQgPQkJZG9fc3luY19yZWFkLAorIAkuYWlvX3JlYWQgPQlnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCisgCS53cml0ZSA9CWRvX3N5bmNfd3JpdGUsCisgCS5haW9fd3JpdGUgPQlnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5pb2N0bCA9CWpmZnMyX2lvY3RsLAogCS5tbWFwID0JCWdlbmVyaWNfZmlsZV9yZWFkb25seV9tbWFwLAogCS5mc3luYyA9CWpmZnMyX2ZzeW5jLApkaWZmIC0tZ2l0IGEvZnMvamZmczIvZnMuYyBiL2ZzL2pmZnMyL2ZzLmMKaW5kZXggNDc4MGY4Mi4uN2JjMWE0MiAxMDA2NDQKLS0tIGEvZnMvamZmczIvZnMuYworKysgYi9mcy9qZmZzMi9mcy5jCkBAIC0yNjMsNyArMjYzLDYgQEAKIAogCWlub2RlLT5pX25saW5rID0gZi0+aW5vY2FjaGUtPm5saW5rOwogCi0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAoaW5vZGUtPmlfc2l6ZSArIDUxMSkgPj4gOTsKIAogCXN3aXRjaCAoaW5vZGUtPmlfbW9kZSAmIFNfSUZNVCkgewpAQCAtMjc4LDEzICsyNzcsMTMgQEAKIAogCQlmb3IgKGZkPWYtPmRlbnRzOyBmZDsgZmQgPSBmZC0+bmV4dCkgewogCQkJaWYgKGZkLT50eXBlID09IERUX0RJUiAmJiBmZC0+aW5vKQotCQkJCWlub2RlLT5pX25saW5rKys7CisJCQkJaW5jX25saW5rKGlub2RlKTsKIAkJfQogCQkvKiBhbmQgJy4uJyAqLwotCQlpbm9kZS0+aV9ubGluaysrOworCQlpbmNfbmxpbmsoaW5vZGUpOwogCQkvKiBSb290IGRpciBnZXRzIGlfbmxpbmsgMyBmb3Igc29tZSByZWFzb24gKi8KIAkJaWYgKGlub2RlLT5pX2lubyA9PSAxKQotCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhpbm9kZSk7CiAKIAkJaW5vZGUtPmlfb3AgPSAmamZmczJfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX2ZvcCA9ICZqZmZzMl9kaXJfb3BlcmF0aW9uczsKQEAgLTQ0OSw3ICs0NDgsNiBAQAogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJcmktPmF0aW1lID0gcmktPm10aW1lID0gcmktPmN0aW1lID0gY3B1X3RvX2plMzIoSV9TRUMoaW5vZGUtPmlfbXRpbWUpKTsKIAotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9zaXplID0gMDsKIApkaWZmIC0tZ2l0IGEvZnMvamZmczIvc3VwZXIuYyBiL2ZzL2pmZnMyL3N1cGVyLmMKaW5kZXggNjhlMzk1My4uNmRlMzc0NSAxMDA2NDQKLS0tIGEvZnMvamZmczIvc3VwZXIuYworKysgYi9mcy9qZmZzMi9zdXBlci5jCkBAIC0xMTksMTAgKzExOSw5IEBACiAJc3RydWN0IGpmZnMyX3NiX2luZm8gKmM7CiAJaW50IHJldDsKIAotCWMgPSBrbWFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOworCWMgPSBremFsbG9jKHNpemVvZigqYyksIEdGUF9LRVJORUwpOwogCWlmICghYykKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KGMsIDAsIHNpemVvZigqYykpOwogCWMtPm10ZCA9IG10ZDsKIAogCXNiID0gc2dldChmc190eXBlLCBqZmZzMl9zYl9jb21wYXJlLCBqZmZzMl9zYl9zZXQsIGMpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2ZpbGUuYyBiL2ZzL2pmcy9maWxlLmMKaW5kZXggMWM5NzQ1Yi4uOTc2ZTkwZCAxMDA2NDQKLS0tIGEvZnMvamZzL2ZpbGUuYworKysgYi9mcy9qZnMvZmlsZS5jCkBAIC0xMDMsMTMgKzEwMywxMSBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBqZnNfZmlsZV9vcGVyYXRpb25zID0gewogCS5vcGVuCQk9IGpmc19vcGVuLAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKLQkud3JpdGUJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLmFpb193cml0ZQk9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCi0JLnJlYWR2CQk9IGdlbmVyaWNfZmlsZV9yZWFkdiwKLQkud3JpdGV2CQk9IGdlbmVyaWNfZmlsZV93cml0ZXYsCiAgCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKIAkuZnN5bmMJCT0gamZzX2ZzeW5jLAogCS5yZWxlYXNlCT0gamZzX3JlbGVhc2UsCmRpZmYgLS1naXQgYS9mcy9qZnMvaW5vZGUuYyBiL2ZzL2pmcy9pbm9kZS5jCmluZGV4IGEyMjNjZjQuLmE4Y2MxNjkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pbm9kZS5jCisrKyBiL2ZzL2pmcy9pbm9kZS5jCkBAIC0yMjcsNyArMjI3LDcgQEAKICNpZmRlZiBfSkZTXzRLCiAJaWYgKChyYyA9IGV4dEhpbnQoaXAsIGxibG9jazY0IDw8IGlwLT5pX3NiLT5zX2Jsb2Nrc2l6ZV9iaXRzLCAmeGFkKSkpCiAJCWdvdG8gdW5sb2NrOwotCXJjID0gZXh0QWxsb2MoaXAsIHhsZW4sIGxibG9jazY0LCAmeGFkLCBGQUxTRSk7CisJcmMgPSBleHRBbGxvYyhpcCwgeGxlbiwgbGJsb2NrNjQsICZ4YWQsIGZhbHNlKTsKIAlpZiAocmMpCiAJCWdvdG8gdW5sb2NrOwogCmRpZmYgLS1naXQgYS9mcy9qZnMvaW9jdGwuYyBiL2ZzL2pmcy9pb2N0bC5jCmluZGV4IDY3YjM3NzQuLjM3ZGI1MjQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9pb2N0bC5jCisrKyBiL2ZzL2pmcy9pb2N0bC5jCkBAIC02LDcgKzYsNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9mcy5oPgotI2luY2x1ZGUgPGxpbnV4L2V4dDJfZnMuaD4KICNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC0yMiwxMyArMjEsMTMgQEAKIAlsb25nIGpmc19mbGFnOwogCWxvbmcgZXh0Ml9mbGFnOwogfSBqZnNfbWFwW10gPSB7Ci0Je0pGU19OT0FUSU1FX0ZMLCBFWFQyX05PQVRJTUVfRkx9LAotCXtKRlNfRElSU1lOQ19GTCwgRVhUMl9ESVJTWU5DX0ZMfSwKLQl7SkZTX1NZTkNfRkwsIEVYVDJfU1lOQ19GTH0sCi0Je0pGU19TRUNSTV9GTCwgRVhUMl9TRUNSTV9GTH0sCi0Je0pGU19VTlJNX0ZMLCBFWFQyX1VOUk1fRkx9LAotCXtKRlNfQVBQRU5EX0ZMLCBFWFQyX0FQUEVORF9GTH0sCi0Je0pGU19JTU1VVEFCTEVfRkwsIEVYVDJfSU1NVVRBQkxFX0ZMfSwKKwl7SkZTX05PQVRJTUVfRkwsCUZTX05PQVRJTUVfRkx9LAorCXtKRlNfRElSU1lOQ19GTCwJRlNfRElSU1lOQ19GTH0sCisJe0pGU19TWU5DX0ZMLAkJRlNfU1lOQ19GTH0sCisJe0pGU19TRUNSTV9GTCwJCUZTX1NFQ1JNX0ZMfSwKKwl7SkZTX1VOUk1fRkwsCQlGU19VTlJNX0ZMfSwKKwl7SkZTX0FQUEVORF9GTCwJCUZTX0FQUEVORF9GTH0sCisJe0pGU19JTU1VVEFCTEVfRkwsCUZTX0lNTVVUQUJMRV9GTH0sCiAJezAsIDB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kbWFwLmMgYi9mcy9qZnMvamZzX2RtYXAuYwppbmRleCBjMTYxYzk4Li5mMDVlYmI2IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2RtYXAuYworKysgYi9mcy9qZnMvamZzX2RtYXAuYwpAQCAtNDAzLDggKzQwMyw4IEBACiAgKgogICogUEFSQU1FVEVSUzoKICAqICAgICAgaXBibWFwCS0gIHBvaW50ZXIgdG8gaW4tY29yZSBpbm9kZSBmb3IgdGhlIGJsb2NrIG1hcC4KLSAqICAgICAgZnJlZQktIFRSVUUgaWYgYmxvY2sgcmFuZ2UgaXMgdG8gYmUgZnJlZWQgZnJvbSB0aGUgcGVyc2lzdGVudAotICoJCSAgbWFwOyBGQUxTRSBpZiBpdCBpcyB0byAgIGJlIGFsbG9jYXRlZC4KKyAqICAgICAgZnJlZQktICAndHJ1ZScgaWYgYmxvY2sgcmFuZ2UgaXMgdG8gYmUgZnJlZWQgZnJvbSB0aGUgcGVyc2lzdGVudAorICoJCSAgIG1hcDsgJ2ZhbHNlJyBpZiBpdCBpcyB0byAgIGJlIGFsbG9jYXRlZC4KICAqICAgICAgYmxrbm8JLSAgc3RhcnRpbmcgYmxvY2sgbnVtYmVyIG9mIHRoZSByYW5nZS4KICAqICAgICAgbmJsb2NrcwktICBudW1iZXIgb2YgY29udGlndW91cyBibG9ja3MgaW4gdGhlIHJhbmdlLgogICogICAgICB0YmxrCS0gIHRyYW5zYWN0aW9uIGJsb2NrOwpAQCAtMjM5NCw3ICsyMzk0LDcgQEAKICAqCQkgICByZXF1aXJlcyB0aGUgZG1hcCBjb250cm9sIHBhZ2UgdG8gYmUgYWRqdXN0ZWQuCiAgKiAgICAgIG5ld3ZhbAktICB0aGUgbmV3IHZhbHVlIG9mIHRoZSBsb3dlciBsZXZlbCBkbWFwIG9yIGRtYXAgY29udHJvbAogICoJCSAgIHBhZ2Ugcm9vdC4KLSAqICAgICAgYWxsb2MJLSAgVFJVRSBpZiBhZGp1c3RtZW50IGlzIGR1ZSB0byBhbiBhbGxvY2F0aW9uLgorICogICAgICBhbGxvYwktICAndHJ1ZScgaWYgYWRqdXN0bWVudCBpcyBkdWUgdG8gYW4gYWxsb2NhdGlvbi4KICAqICAgICAgbGV2ZWwJLSAgY3VycmVudCBsZXZlbCBvZiBkbWFwIGNvbnRyb2wgcGFnZSAoaS5lLiBMMCwgTDEsIEwyKSB0bwogICoJCSAgIGJlIGFkanVzdGVkLgogICoKQEAgLTMyOTAsNyArMzI5MCw3IEBACiB7CiAJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKGlwYm1hcC0+aV9zYik7CiAJaW50IG5icGVycGFnZSA9IHNiaS0+bmJwZXJwYWdlOwotCWludCBpLCBpMCA9IFRSVUUsIGosIGowID0gVFJVRSwgaywgbjsKKwlpbnQgaSwgaTAgPSB0cnVlLCBqLCBqMCA9IHRydWUsIGssIG47CiAJczY0IG5ld3NpemU7CiAJczY0IHA7CiAJc3RydWN0IG1ldGFwYWdlICptcCwgKmwybXAsICpsMW1wID0gTlVMTCwgKmwwbXAgPSBOVUxMOwpAQCAtMzM5OCw3ICszMzk4LDcgQEAKIAkJCWogPSAoYmxrbm8gJiAoTUFYTDFTSVpFIC0gMSkpID4+IEwyTUFYTDBTSVpFOwogCQkJbDFsZWFmID0gbDFkY3AtPnN0cmVlICsgQ1RMTEVBRklORCArIGo7CiAJCQlwID0gQkxLVE9MMChibGtubywgc2JpLT5sMm5icGVycGFnZSk7Ci0JCQlqMCA9IEZBTFNFOworCQkJajAgPSBmYWxzZTsKIAkJfSBlbHNlIHsKIAkJCS8qIGFzc2lnbi9pbml0IEwxIHBhZ2UgKi8KIAkJCWwxbXAgPSBnZXRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7CkBAIC0zNDMyLDcgKzM0MzIsNyBAQAogCQkJCWwwbGVhZiA9IGwwZGNwLT5zdHJlZSArIENUTExFQUZJTkQgKyBpOwogCQkJCXAgPSBCTEtUT0RNQVAoYmxrbm8sCiAJCQkJCSAgICAgIHNiaS0+bDJuYnBlcnBhZ2UpOwotCQkJCWkwID0gRkFMU0U7CisJCQkJaTAgPSBmYWxzZTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogYXNzaWduL2luaXQgTDAgcGFnZSAqLwogCQkJCWwwbXAgPSBnZXRfbWV0YXBhZ2UoaXBibWFwLCBwLCBQU0laRSwgMCk7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2V4dGVudC5jIGIvZnMvamZzL2pmc19leHRlbnQuYwppbmRleCA0ZDUyNTkzLi45MzNiNzQ1IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2V4dGVudC5jCisrKyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKQEAgLTc0LDcgKzc0LDcgQEAKICAqCQkgIGV4dGVudCB0aGF0IGlzIHVzZWQgYXMgYW4gYWxsb2NhdGlvbiBoaW50IGlmIHRoZQogICoJCSAgeGFkZHIgb2YgdGhlIHhhZCBpcyBub24temVyby4gIG9uIHN1Y2Nlc3NmdWwgZXhpdCwKICAqCQkgIHRoZSB4YWQgZGVzY3JpYmVzIHRoZSBuZXdseSBhbGxvY2F0ZWQgZXh0ZW50LgotICoJYWJucgktIGJvb2xlYW5fdCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5ld2x5IGFsbG9jYXRlZCBleHRlbnQKKyAqCWFibnIJLSBib29sIGluZGljYXRpbmcgd2hldGhlciB0aGUgbmV3bHkgYWxsb2NhdGVkIGV4dGVudAogICoJCSAgc2hvdWxkIGJlIG1hcmtlZCBhcyBhbGxvY2F0ZWQgYnV0IG5vdCByZWNvcmRlZC4KICAqCiAgKiBSRVRVUk4gVkFMVUVTOgpAQCAtODMsNyArODMsNyBAQAogICogICAgICAtRU5PU1BDCS0gaW5zdWZmaWNpZW50IGRpc2sgcmVzb3VyY2VzLgogICovCiBpbnQKLWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sZWFuX3QgYWJucikKK2V4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sIGFibnIpCiB7CiAJc3RydWN0IGpmc19zYl9pbmZvICpzYmkgPSBKRlNfU0JJKGlwLT5pX3NiKTsKIAlzNjQgbnhsZW4sIG54YWRkciwgeG9mZiwgaGludCwgeGFkZHIgPSAwOwpAQCAtMTE3LDcgKzExNyw3IEBACiAJCSAqIGZvbGxvd2luZyB0aGUgaGludCBleHRlbnQuCiAJCSAqLwogCQlpZiAob2Zmc2V0WEFEKHhwKSArIG54bGVuID09IHhvZmYgJiYKLQkJICAgIGFibnIgPT0gKCh4cC0+ZmxhZyAmIFhBRF9OT1RSRUNPUkRFRCkgPyBUUlVFIDogRkFMU0UpKQorCQkgICAgYWJuciA9PSAoKHhwLT5mbGFnICYgWEFEX05PVFJFQ09SREVEKSA/IHRydWUgOiBmYWxzZSkpCiAJCQl4YWRkciA9IGhpbnQgKyBueGxlbjsKIAogCQkvKiBhZGp1c3QgdGhlIGhpbnQgdG8gdGhlIGxhc3QgYmxvY2sgb2YgdGhlIGV4dGVudCAqLwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJfQogCiAJLyogZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgZXh0ZW50IGZsYWcgKi8KLQl4ZmxhZyA9IChhYm5yID09IFRSVUUpID8gWEFEX05PVFJFQ09SREVEIDogMDsKKwl4ZmxhZyA9IGFibnIgPyBYQURfTk9UUkVDT1JERUQgOiAwOwogCiAJLyogaWYgd2UgY2FuIGV4dGVuZCB0aGUgaGludCBleHRlbnQgdG8gY292ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCwgCiAJICogZXh0ZW5kIGl0LiAgb3RoZXJ3aXNlLCBpbnNlcnQgYSBuZXcgZXh0ZW50IHRvCkBAIC0yMDMsNyArMjAzLDcgQEAKICAqCXhsZW4JLSByZXF1ZXN0IHNpemUgb2YgdGhlIHJlc3VsdGluZyBleHRlbnQuCiAgKgl4cAktIHBvaW50ZXIgdG8gYW4geGFkLiBvbiBzdWNjZXNzZnVsIGV4aXQsIHRoZSB4YWQKICAqCQkgIGRlc2NyaWJlcyB0aGUgbmV3bHkgYWxsb2NhdGVkIGV4dGVudC4KLSAqCWFibnIJLSBib29sZWFuX3QgaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBuZXdseSBhbGxvY2F0ZWQgZXh0ZW50CisgKglhYm5yCS0gYm9vbCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIG5ld2x5IGFsbG9jYXRlZCBleHRlbnQKICAqCQkgIHNob3VsZCBiZSBtYXJrZWQgYXMgYWxsb2NhdGVkIGJ1dCBub3QgcmVjb3JkZWQuCiAgKgogICogUkVUVVJOIFZBTFVFUzoKQEAgLTIxMSw3ICsyMTEsNyBAQAogICogICAgICAtRUlPCS0gaS9vIGVycm9yLgogICogICAgICAtRU5PU1BDCS0gaW5zdWZmaWNpZW50IGRpc2sgcmVzb3VyY2VzLgogICovCi1pbnQgZXh0UmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgbnhsZW4sIHhhZF90ICogeHAsIGJvb2xlYW5fdCBhYm5yKQoraW50IGV4dFJlYWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IG54bGVuLCB4YWRfdCAqIHhwLCBib29sIGFibnIpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlwLT5pX3NiOwogCXM2NCB4YWRkciwgeGxlbiwgbnhhZGRyLCBkZWx0YSwgeG9mZjsKQEAgLTQ2OCw3ICs0NjgsNyBAQAogaW50IGV4dEZpbGwoc3RydWN0IGlub2RlICppcCwgeGFkX3QgKiB4cCkKIHsKIAlpbnQgcmMsIG5icGVycGFnZSA9IEpGU19TQkkoaXAtPmlfc2IpLT5uYnBlcnBhZ2U7Ci0JczY0IGJsa25vID0gb2Zmc2V0WEFEKHhwKSA+PiBpcC0+aV9ibGtzaXplOworCXM2NCBibGtubyA9IG9mZnNldFhBRCh4cCkgPj4gaXAtPmlfYmxrYml0czsKIAogLy8gICAgICBhc3NlcnQoSVNTUEFSU0UoaXApKTsKIApAQCAtNDc2LDcgKzQ3Niw3IEBACiAJWEFEYWRkcmVzcyh4cCwgMCk7CiAKIAkvKiBhbGxvY2F0ZSBhbiBleHRlbnQgdG8gZmlsbCB0aGUgaG9sZSAqLwotCWlmICgocmMgPSBleHRBbGxvYyhpcCwgbmJwZXJwYWdlLCBibGtubywgeHAsIEZBTFNFKSkpCisJaWYgKChyYyA9IGV4dEFsbG9jKGlwLCBuYnBlcnBhZ2UsIGJsa25vLCB4cCwgZmFsc2UpKSkKIAkJcmV0dXJuIChyYyk7CiAKIAlhc3NlcnQobGVuZ3RoUFhEKHhwKSA9PSBuYnBlcnBhZ2UpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuaCBiL2ZzL2pmcy9qZnNfZXh0ZW50LmgKaW5kZXggZTgwZmM3Yy4uM2E3ZjNmMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuaAorKysgYi9mcy9qZnMvamZzX2V4dGVudC5oCkBAIC0yMiwxMCArMjIsMTAgQEAKICNkZWZpbmUJSU5PSElOVChpcCkJXAogCShhZGRyZXNzUFhEKCYoSkZTX0lQKGlwKS0+aXhweGQpKSArIGxlbmd0aFBYRCgmKEpGU19JUChpcCktPml4cHhkKSkgLSAxKQogCi1leHRlcm4gaW50CWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqLCBzNjQsIHM2NCwgeGFkX3QgKiwgYm9vbGVhbl90KTsKK2V4dGVybiBpbnQJZXh0QWxsb2Moc3RydWN0IGlub2RlICosIHM2NCwgczY0LCB4YWRfdCAqLCBib29sKTsKIGV4dGVybiBpbnQJZXh0RmlsbChzdHJ1Y3QgaW5vZGUgKiwgeGFkX3QgKik7CiBleHRlcm4gaW50CWV4dEhpbnQoc3RydWN0IGlub2RlICosIHM2NCwgeGFkX3QgKik7Ci1leHRlcm4gaW50CWV4dFJlYWxsb2Moc3RydWN0IGlub2RlICosIHM2NCwgeGFkX3QgKiwgYm9vbGVhbl90KTsKK2V4dGVybiBpbnQJZXh0UmVhbGxvYyhzdHJ1Y3QgaW5vZGUgKiwgczY0LCB4YWRfdCAqLCBib29sKTsKIGV4dGVybiBpbnQJZXh0UmVjb3JkKHN0cnVjdCBpbm9kZSAqLCB4YWRfdCAqKTsKIAogI2VuZGlmCS8qIF9IX0pGU19FWFRFTlQgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW1hcC5jIGIvZnMvamZzL2pmc19pbWFwLmMKaW5kZXggY2NiZTYwYS4uYTQ1ZWUyNCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbWFwLmMKKysrIGIvZnMvamZzL2pmc19pbWFwLmMKQEAgLTc4LDggKzc4LDggQEAKIC8qCiAgKiBmb3J3YXJkIHJlZmVyZW5jZXMKICAqLwotc3RhdGljIGludCBkaUFsbG9jQUcoc3RydWN0IGlub21hcCAqLCBpbnQsIGJvb2xlYW5fdCwgc3RydWN0IGlub2RlICopOwotc3RhdGljIGludCBkaUFsbG9jQW55KHN0cnVjdCBpbm9tYXAgKiwgaW50LCBib29sZWFuX3QsIHN0cnVjdCBpbm9kZSAqKTsKK3N0YXRpYyBpbnQgZGlBbGxvY0FHKHN0cnVjdCBpbm9tYXAgKiwgaW50LCBib29sLCBzdHJ1Y3QgaW5vZGUgKik7CitzdGF0aWMgaW50IGRpQWxsb2NBbnkoc3RydWN0IGlub21hcCAqLCBpbnQsIGJvb2wsIHN0cnVjdCBpbm9kZSAqKTsKIHN0YXRpYyBpbnQgZGlBbGxvY0JpdChzdHJ1Y3QgaW5vbWFwICosIHN0cnVjdCBpYWcgKiwgaW50KTsKIHN0YXRpYyBpbnQgZGlBbGxvY0V4dChzdHJ1Y3QgaW5vbWFwICosIGludCwgc3RydWN0IGlub2RlICopOwogc3RhdGljIGludCBkaUFsbG9jSW5vKHN0cnVjdCBpbm9tYXAgKiwgaW50LCBzdHJ1Y3QgaW5vZGUgKik7CkBAIC0xMzQ1LDcgKzEzNDUsNyBAQAogICoKICAqIFBBUkFNRVRFUlM6CiAgKiAgICAgIHBpcCAgCS0gcG9pbnRlciB0byBpbmNvcmUgaW5vZGUgZm9yIHRoZSBwYXJlbnQgaW5vZGUuCi0gKiAgICAgIGRpciAgCS0gVFJVRSBpZiB0aGUgbmV3IGRpc2sgaW5vZGUgaXMgZm9yIGEgZGlyZWN0b3J5LgorICogICAgICBkaXIgIAktICd0cnVlJyBpZiB0aGUgbmV3IGRpc2sgaW5vZGUgaXMgZm9yIGEgZGlyZWN0b3J5LgogICogICAgICBpcCAgCS0gcG9pbnRlciB0byBhIG5ldyBpbm9kZQogICoKICAqIFJFVFVSTiBWQUxVRVM6CkBAIC0xMzUzLDcgKzEzNTMsNyBAQAogICogICAgICAtRU5PU1BDCS0gaW5zdWZmaWNpZW50IGRpc2sgcmVzb3VyY2VzLgogICogICAgICAtRUlPICAJLSBpL28gZXJyb3IuCiAgKi8KLWludCBkaUFsbG9jKHN0cnVjdCBpbm9kZSAqcGlwLCBib29sZWFuX3QgZGlyLCBzdHJ1Y3QgaW5vZGUgKmlwKQoraW50IGRpQWxsb2Moc3RydWN0IGlub2RlICpwaXAsIGJvb2wgZGlyLCBzdHJ1Y3QgaW5vZGUgKmlwKQogewogCWludCByYywgaW5vLCBpYWdubywgYWRkZXh0LCBleHRubywgYml0bm8sIHN3b3JkOwogCWludCBud29yZHMsIHJlbSwgaSwgYWdubzsKQEAgLTEzNzUsNyArMTM3NSw3IEBACiAJLyogZm9yIGEgZGlyZWN0b3J5LCB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgaXMgdG8gc3RhcnQgCiAJICogYXQgdGhlIGFnIGxldmVsIHVzaW5nIHRoZSBwcmVmZXJyZWQgYWcuCiAJICovCi0JaWYgKGRpciA9PSBUUlVFKSB7CisJaWYgKGRpcikgewogCQlhZ25vID0gZGJOZXh0QUcoSkZTX1NCSShwaXAtPmlfc2IpLT5pcGJtYXApOwogCQlBR19MT0NLKGltYXAsIGFnbm8pOwogCQlnb3RvIHRyeWFnOwpAQCAtMTY1MSw3ICsxNjUxLDcgQEAKICAqIFBBUkFNRVRFUlM6CiAgKiAgICAgIGltYXAgIAktIHBvaW50ZXIgdG8gaW5vZGUgbWFwIGNvbnRyb2wgc3RydWN0dXJlLgogICogICAgICBhZ25vICAJLSBhbGxvY2F0aW9uIGdyb3VwIHRvIGFsbG9jYXRlIGZyb20uCi0gKiAgICAgIGRpciAgCS0gVFJVRSBpZiB0aGUgbmV3IGRpc2sgaW5vZGUgaXMgZm9yIGEgZGlyZWN0b3J5LgorICogICAgICBkaXIgIAktICd0cnVlJyBpZiB0aGUgbmV3IGRpc2sgaW5vZGUgaXMgZm9yIGEgZGlyZWN0b3J5LgogICogICAgICBpcCAgCS0gcG9pbnRlciB0byB0aGUgbmV3IGlub2RlIHRvIGJlIGZpbGxlZCBpbiBvbiBzdWNjZXNzZnVsIHJldHVybgogICoJCSAgd2l0aCB0aGUgZGlzayBpbm9kZSBudW1iZXIgYWxsb2NhdGVkLCBpdHMgZXh0ZW50IGFkZHJlc3MKICAqCQkgIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGFnLgpAQCAtMTY2Miw3ICsxNjYyLDcgQEAKICAqICAgICAgLUVJTyAgCS0gaS9vIGVycm9yLgogICovCiBzdGF0aWMgaW50Ci1kaUFsbG9jQUcoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBhZ25vLCBib29sZWFuX3QgZGlyLCBzdHJ1Y3QgaW5vZGUgKmlwKQorZGlBbGxvY0FHKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgYWdubywgYm9vbCBkaXIsIHN0cnVjdCBpbm9kZSAqaXApCiB7CiAJaW50IHJjLCBhZGRleHQsIG51bWZyZWUsIG51bWlub3M7CiAKQEAgLTE2ODIsNyArMTY4Miw3IEBACiAJICogaWYgdGhlcmUgYXJlIGEgc21hbGwgbnVtYmVyIG9mIGZyZWUgaW5vZGVzIG9yIG51bWJlciBvZiBmcmVlCiAJICogaW5vZGVzIGlzIGEgc21hbGwgcGVyY2VudGFnZSBvZiB0aGUgbnVtYmVyIG9mIGJhY2tlZCBpbm9kZXMuCiAJICovCi0JaWYgKGRpciA9PSBUUlVFKQorCWlmIChkaXIpCiAJCWFkZGV4dCA9IChudW1mcmVlIDwgNjQgfHwKIAkJCSAgKG51bWZyZWUgPCAyNTYKIAkJCSAgICYmICgobnVtZnJlZSAqIDEwMCkgLyBudW1pbm9zKSA8PSAyMCkpOwpAQCAtMTcyMSw3ICsxNzIxLDcgQEAKICAqIFBBUkFNRVRFUlM6CiAgKiAgICAgIGltYXAgIAktIHBvaW50ZXIgdG8gaW5vZGUgbWFwIGNvbnRyb2wgc3RydWN0dXJlLgogICogICAgICBhZ25vICAJLSBwcmltYXJ5IGFsbG9jYXRpb24gZ3JvdXAgKHRvIGF2b2lkKS4KLSAqICAgICAgZGlyICAJLSBUUlVFIGlmIHRoZSBuZXcgZGlzayBpbm9kZSBpcyBmb3IgYSBkaXJlY3RvcnkuCisgKiAgICAgIGRpciAgCS0gJ3RydWUnIGlmIHRoZSBuZXcgZGlzayBpbm9kZSBpcyBmb3IgYSBkaXJlY3RvcnkuCiAgKiAgICAgIGlwICAJLSBwb2ludGVyIHRvIGEgbmV3IGlub2RlIHRvIGJlIGZpbGxlZCBpbiBvbiBzdWNjZXNzZnVsIHJldHVybgogICoJCSAgd2l0aCB0aGUgZGlzayBpbm9kZSBudW1iZXIgYWxsb2NhdGVkLCBpdHMgZXh0ZW50IGFkZHJlc3MKICAqCQkgIGFuZCB0aGUgc3RhcnQgb2YgdGhlIGFnLgpAQCAtMTczMiw3ICsxNzMyLDcgQEAKICAqICAgICAgLUVJTyAgCS0gaS9vIGVycm9yLgogICovCiBzdGF0aWMgaW50Ci1kaUFsbG9jQW55KHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgYWdubywgYm9vbGVhbl90IGRpciwgc3RydWN0IGlub2RlICppcCkKK2RpQWxsb2NBbnkoc3RydWN0IGlub21hcCAqIGltYXAsIGludCBhZ25vLCBib29sIGRpciwgc3RydWN0IGlub2RlICppcCkKIHsKIAlpbnQgYWcsIHJjOwogCWludCBtYXhhZyA9IEpGU19TQkkoaW1hcC0+aW1faXBpbWFwLT5pX3NiKS0+Ym1hcC0+ZGJfbWF4YWc7CkBAIC0yNzQ5LDcgKzI3NDksNyBAQAogICogUEFSQU1FVEVSUzoKICAqCWlwaW1hcAktIEluY29yZSBpbm9kZSBtYXAgaW5vZGUKICAqCWludW0JLSBOdW1iZXIgb2YgaW5vZGUgdG8gbWFyayBpbiBwZXJtYW5lbnQgbWFwCi0gKglpc19mcmVlCS0gSWYgVFJVRSBpbmRpY2F0ZXMgaW5vZGUgc2hvdWxkIGJlIG1hcmtlZCBmcmVlZCwgb3RoZXJ3aXNlCisgKglpc19mcmVlCS0gSWYgJ3RydWUnIGluZGljYXRlcyBpbm9kZSBzaG91bGQgYmUgbWFya2VkIGZyZWVkLCBvdGhlcndpc2UKICAqCQkgIGluZGljYXRlcyBpbm9kZSBzaG91bGQgYmUgbWFya2VkIGFsbG9jYXRlZC4KICAqCiAgKiBSRVRVUk4gVkFMVUVTOiAKQEAgLTI3NTcsNyArMjc1Nyw3IEBACiAgKi8KIGludAogZGlVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBpbWFwLAotCSAgICAgdW5zaWduZWQgbG9uZyBpbnVtLCBib29sZWFuX3QgaXNfZnJlZSwgc3RydWN0IHRibG9jayAqIHRibGspCisJICAgICB1bnNpZ25lZCBsb25nIGludW0sIGJvb2wgaXNfZnJlZSwgc3RydWN0IHRibG9jayAqIHRibGspCiB7CiAJaW50IHJjOwogCXN0cnVjdCBpYWcgKmlhZ3A7CkBAIC0yNzk2LDcgKzI3OTYsNyBAQAogCS8qIAogCSAqIG1hcmsgdGhlIGlub2RlIGZyZWUgaW4gcGVyc2lzdGVudCBtYXA6CiAJICovCi0JaWYgKGlzX2ZyZWUgPT0gVFJVRSkgeworCWlmIChpc19mcmVlKSB7CiAJCS8qIFRoZSBpbm9kZSBzaG91bGQgaGF2ZSBiZWVuIGFsbG9jYXRlZCBib3RoIGluIHdvcmtpbmcKIAkJICogbWFwIGFuZCBpbiBwZXJzaXN0ZW50IG1hcDsKIAkJICogdGhlIGlub2RlIHdpbGwgYmUgZnJlZWQgZnJvbSB3b3JraW5nIG1hcCBhdCB0aGUgcmVsZWFzZQpAQCAtMzExNSw3ICszMTE1LDYgQEAKIAlpcC0+aV9tdGltZS50dl9uc2VjID0gbGUzMl90b19jcHUoZGlwLT5kaV9tdGltZS50dl9uc2VjKTsKIAlpcC0+aV9jdGltZS50dl9zZWMgPSBsZTMyX3RvX2NwdShkaXAtPmRpX2N0aW1lLnR2X3NlYyk7CiAJaXAtPmlfY3RpbWUudHZfbnNlYyA9IGxlMzJfdG9fY3B1KGRpcC0+ZGlfY3RpbWUudHZfbnNlYyk7Ci0JaXAtPmlfYmxrc2l6ZSA9IGlwLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAlpcC0+aV9ibG9ja3MgPSBMQkxLMlBCTEsoaXAtPmlfc2IsIGxlNjRfdG9fY3B1KGRpcC0+ZGlfbmJsb2NrcykpOwogCWlwLT5pX2dlbmVyYXRpb24gPSBsZTMyX3RvX2NwdShkaXAtPmRpX2dlbik7CiAKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfaW1hcC5oIGIvZnMvamZzL2pmc19pbWFwLmgKaW5kZXggNmUyNDQ2NS4uZTNiN2RiNCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19pbWFwLmgKKysrIGIvZnMvamZzL2pmc19pbWFwLmgKQEAgLTE1OSwxMSArMTU5LDExIEBACiAjZGVmaW5lCWltX21heGFnCWltX2ltYXAuaW5fbWF4YWcKIAogZXh0ZXJuIGludCBkaUZyZWUoc3RydWN0IGlub2RlICopOwotZXh0ZXJuIGludCBkaUFsbG9jKHN0cnVjdCBpbm9kZSAqLCBib29sZWFuX3QsIHN0cnVjdCBpbm9kZSAqKTsKK2V4dGVybiBpbnQgZGlBbGxvYyhzdHJ1Y3QgaW5vZGUgKiwgYm9vbCwgc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludCBkaVN5bmMoc3RydWN0IGlub2RlICopOwogLyogZXh0ZXJuYWwgcmVmZXJlbmNlcyAqLwogZXh0ZXJuIGludCBkaVVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGltYXAsIHVuc2lnbmVkIGxvbmcgaW51bSwKLQkJCWJvb2xlYW5fdCBpc19mcmVlLCBzdHJ1Y3QgdGJsb2NrICogdGJsayk7CisJCQlib29sIGlzX2ZyZWUsIHN0cnVjdCB0YmxvY2sgKiB0YmxrKTsKIGV4dGVybiBpbnQgZGlFeHRlbmRGUyhzdHJ1Y3QgaW5vZGUgKmlwaW1hcCwgc3RydWN0IGlub2RlICppcGJtYXApOwogZXh0ZXJuIGludCBkaU1vdW50KHN0cnVjdCBpbm9kZSAqKTsKIGV4dGVybiBpbnQgZGlVbm1vdW50KHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbm9kZS5jIGIvZnMvamZzL2pmc19pbm9kZS5jCmluZGV4IDQ5NWRmNDAuLmJmZmFjYTkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfaW5vZGUuYworKysgYi9mcy9qZnMvamZzX2lub2RlLmMKQEAgLTExNSw3ICsxMTUsNiBAQAogCX0KIAlqZnNfaW5vZGUtPm1vZGUyIHw9IG1vZGU7CiAKLQlpbm9kZS0+aV9ibGtzaXplID0gc2ItPnNfYmxvY2tzaXplOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWpmc19pbm9kZS0+b3RpbWUgPSBpbm9kZS0+aV9jdGltZS50dl9zZWM7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX21ldGFwYWdlLmMgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKaW5kZXggZTFlMGE2ZS4uZjVhZmMxMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19tZXRhcGFnZS5jCisrKyBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJaW50IHJjID0gMDsKIAlpbnQgeGZsYWc7CiAJczY0IHhhZGRyOwotCXNlY3Rvcl90IGZpbGVfYmxvY2tzID0gKGlub2RlLT5pX3NpemUgKyBpbm9kZS0+aV9ibGtzaXplIC0gMSkgPj4KKwlzZWN0b3JfdCBmaWxlX2Jsb2NrcyA9IChpbm9kZS0+aV9zaXplICsgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gMSkgPj4KIAkJCSAgICAgICBpbm9kZS0+aV9ibGtiaXRzOwogCiAJaWYgKGxibG9jayA+PSBmaWxlX2Jsb2NrcykKZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaCBiL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuaAppbmRleCBkMTdhMzI5Li4wMWE1YTQ1IDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX21ldGFwYWdlLmgKKysrIGIvZnMvamZzL2pmc19tZXRhcGFnZS5oCkBAIC02NSwxMCArNjUsMTAgQEAKIAkJCQkgIGludCBhYnNvbHV0ZSwgdW5zaWduZWQgbG9uZyBuZXcpOwogCiAjZGVmaW5lIHJlYWRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXAotCSBfX2dldF9tZXRhcGFnZShpbm9kZSwgbGJsb2NrLCBzaXplLCBhYnNvbHV0ZSwgRkFMU0UpCisJIF9fZ2V0X21ldGFwYWdlKGlub2RlLCBsYmxvY2ssIHNpemUsIGFic29sdXRlLCBmYWxzZSkKIAogI2RlZmluZSBnZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUpXAotCSBfX2dldF9tZXRhcGFnZShpbm9kZSwgbGJsb2NrLCBzaXplLCBhYnNvbHV0ZSwgVFJVRSkKKwkgX19nZXRfbWV0YXBhZ2UoaW5vZGUsIGxibG9jaywgc2l6ZSwgYWJzb2x1dGUsIHRydWUpCiAKIGV4dGVybiB2b2lkIHJlbGVhc2VfbWV0YXBhZ2Uoc3RydWN0IG1ldGFwYWdlICopOwogZXh0ZXJuIHZvaWQgZ3JhYl9tZXRhcGFnZShzdHJ1Y3QgbWV0YXBhZ2UgKik7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R4bm1nci5jIGIvZnMvamZzL2pmc190eG5tZ3IuYwppbmRleCBlZmJiNTg2Li5lYmZhNmMwIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3R4bm1nci5jCisrKyBiL2ZzL2pmcy9qZnNfdHhubWdyLmMKQEAgLTI4Miw3ICsyODIsNyBAQAogCVR4TG9ja1ZIV00gPSAoblR4TG9jayAqIDgpIC8gMTA7CiAKIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB0YmxvY2spICogblR4QmxvY2s7Ci0JVHhCbG9jayA9IChzdHJ1Y3QgdGJsb2NrICopIHZtYWxsb2Moc2l6ZSk7CisJVHhCbG9jayA9IHZtYWxsb2Moc2l6ZSk7CiAJaWYgKFR4QmxvY2sgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTMwNyw3ICszMDcsNyBAQAogCSAqIHRsb2NrIGlkID0gMCBpcyByZXNlcnZlZC4KIAkgKi8KIAlzaXplID0gc2l6ZW9mKHN0cnVjdCB0bG9jaykgKiBuVHhMb2NrOwotCVR4TG9jayA9IChzdHJ1Y3QgdGxvY2sgKikgdm1hbGxvYyhzaXplKTsKKwlUeExvY2sgPSB2bWFsbG9jKHNpemUpOwogCWlmIChUeExvY2sgPT0gTlVMTCkgewogCQl2ZnJlZShUeEJsb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC0yMzkzLDcgKzIzOTMsNyBAQAogCSAqIHVubG9jayBtYXBwZXIvd3JpdGUgbG9jawogCSAqLwogCWlmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9DUkVBVEUpIHsKLQkJZGlVcGRhdGVQTWFwKGlwaW1hcCwgdGJsay0+aW5vLCBGQUxTRSwgdGJsayk7CisJCWRpVXBkYXRlUE1hcChpcGltYXAsIHRibGstPmlubywgZmFsc2UsIHRibGspOwogCQkvKiB1cGRhdGUgcGVyc2lzdGVudCBibG9jayBhbGxvY2F0aW9uIG1hcAogCQkgKiBmb3IgdGhlIGFsbG9jYXRpb24gb2YgaW5vZGUgZXh0ZW50OwogCQkgKi8KQEAgLTI0MDMsNyArMjQwMyw3IEBACiAJCXR4QWxsb2NQTWFwKGlwaW1hcCwgKHN0cnVjdCBtYXBsb2NrICopICYgcHhkbG9jaywgdGJsayk7CiAJfSBlbHNlIGlmICh0YmxrLT54ZmxhZyAmIENPTU1JVF9ERUxFVEUpIHsKIAkJaXAgPSB0YmxrLT51LmlwOwotCQlkaVVwZGF0ZVBNYXAoaXBpbWFwLCBpcC0+aV9pbm8sIFRSVUUsIHRibGspOworCQlkaVVwZGF0ZVBNYXAoaXBpbWFwLCBpcC0+aV9pbm8sIHRydWUsIHRibGspOwogCQlpcHV0KGlwKTsKIAl9CiB9CkBAIC0yNDUxLDcgKzI0NTEsNyBAQAogCQkJaWYgKHhhZC0+ZmxhZyAmIChYQURfTkVXIHwgWEFEX0VYVEVOREVEKSkgewogCQkJCXhhZGRyID0gYWRkcmVzc1hBRCh4YWQpOwogCQkJCXhsZW4gPSBsZW5ndGhYQUQoeGFkKTsKLQkJCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBGQUxTRSwgeGFkZHIsCisJCQkJZGJVcGRhdGVQTWFwKGlwYm1hcCwgZmFsc2UsIHhhZGRyLAogCQkJCQkgICAgIChzNjQpIHhsZW4sIHRibGspOwogCQkJCXhhZC0+ZmxhZyAmPSB+KFhBRF9ORVcgfCBYQURfRVhURU5ERUQpOwogCQkJCWpmc19pbmZvKCJhbGxvY1BNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWQiLApAQCAtMjQ2Miw3ICsyNDYyLDcgQEAKIAkJcHhkbG9jayA9IChzdHJ1Y3QgcHhkX2xvY2sgKikgbWFwbG9jazsKIAkJeGFkZHIgPSBhZGRyZXNzUFhEKCZweGRsb2NrLT5weGQpOwogCQl4bGVuID0gbGVuZ3RoUFhEKCZweGRsb2NrLT5weGQpOwotCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBGQUxTRSwgeGFkZHIsIChzNjQpIHhsZW4sIHRibGspOworCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBmYWxzZSwgeGFkZHIsIChzNjQpIHhsZW4sIHRibGspOwogCQlqZnNfaW5mbygiYWxsb2NQTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkIiwgKHVsb25nKSB4YWRkciwgeGxlbik7CiAJfSBlbHNlIHsJCS8qIChtYXBsb2NrLT5mbGFnICYgbWxja0FMTE9DUFhETElTVCkgKi8KIApAQCAtMjQ3MSw3ICsyNDcxLDcgQEAKIAkJZm9yIChuID0gMDsgbiA8IHB4ZGxpc3Rsb2NrLT5jb3VudDsgbisrLCBweGQrKykgewogCQkJeGFkZHIgPSBhZGRyZXNzUFhEKHB4ZCk7CiAJCQl4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7Ci0JCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBGQUxTRSwgeGFkZHIsIChzNjQpIHhsZW4sCisJCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBmYWxzZSwgeGFkZHIsIChzNjQpIHhsZW4sCiAJCQkJICAgICB0YmxrKTsKIAkJCWpmc19pbmZvKCJhbGxvY1BNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWQiLAogCQkJCSAodWxvbmcpIHhhZGRyLCB4bGVuKTsKQEAgLTI1MTMsNyArMjUxMyw3IEBACiAJCQkJaWYgKCEoeGFkLT5mbGFnICYgWEFEX05FVykpIHsKIAkJCQkJeGFkZHIgPSBhZGRyZXNzWEFEKHhhZCk7CiAJCQkJCXhsZW4gPSBsZW5ndGhYQUQoeGFkKTsKLQkJCQkJZGJVcGRhdGVQTWFwKGlwYm1hcCwgVFJVRSwgeGFkZHIsCisJCQkJCWRiVXBkYXRlUE1hcChpcGJtYXAsIHRydWUsIHhhZGRyLAogCQkJCQkJICAgICAoczY0KSB4bGVuLCB0YmxrKTsKIAkJCQkJamZzX2luZm8oImZyZWVQTWFwOiB4YWRkcjoweCVseCAiCiAJCQkJCQkgInhsZW46JWQiLApAQCAtMjUyNCw3ICsyNTI0LDcgQEAKIAkJCXB4ZGxvY2sgPSAoc3RydWN0IHB4ZF9sb2NrICopIG1hcGxvY2s7CiAJCQl4YWRkciA9IGFkZHJlc3NQWEQoJnB4ZGxvY2stPnB4ZCk7CiAJCQl4bGVuID0gbGVuZ3RoUFhEKCZweGRsb2NrLT5weGQpOwotCQkJZGJVcGRhdGVQTWFwKGlwYm1hcCwgVFJVRSwgeGFkZHIsIChzNjQpIHhsZW4sCisJCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkciwgKHM2NCkgeGxlbiwKIAkJCQkgICAgIHRibGspOwogCQkJamZzX2luZm8oImZyZWVQTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkIiwKIAkJCQkgKHVsb25nKSB4YWRkciwgeGxlbik7CkBAIC0yNTM1LDcgKzI1MzUsNyBAQAogCQkJZm9yIChuID0gMDsgbiA8IHB4ZGxpc3Rsb2NrLT5jb3VudDsgbisrLCBweGQrKykgewogCQkJCXhhZGRyID0gYWRkcmVzc1BYRChweGQpOwogCQkJCXhsZW4gPSBsZW5ndGhQWEQocHhkKTsKLQkJCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCBUUlVFLCB4YWRkciwKKwkJCQlkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkciwKIAkJCQkJICAgICAoczY0KSB4bGVuLCB0YmxrKTsKIAkJCQlqZnNfaW5mbygiZnJlZVBNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWQiLAogCQkJCQkgKHVsb25nKSB4YWRkciwgeGxlbik7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3R5cGVzLmggYi9mcy9qZnMvamZzX3R5cGVzLmgKaW5kZXggNWJmYWQzOS4uMDliMjUyOSAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc190eXBlcy5oCisrKyBiL2ZzL2pmcy9qZnNfdHlwZXMuaApAQCAtNTcsMTAgKzU3LDYgQEAKICNkZWZpbmUJSElHSE9SREVSCTB4ODAwMDAwMDB1CS8qIGhpZ2ggb3JkZXIgYml0IG9uICAgICAgICAgICAgKi8KICNkZWZpbmUJT05FUwkJMHhmZmZmZmZmZnUJLyogYWxsIGJpdCBvbiAgICAgICAgICAgICAgICAgICAqLwogCi10eXBlZGVmIGludCBib29sZWFuX3Q7Ci0jZGVmaW5lIFRSVUUgMQotI2RlZmluZSBGQUxTRSAwCi0KIC8qCiAgKglsb2dpY2FsIHhkIChseGQpCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfeHRyZWUuYyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwppbmRleCBlNzJmNGViLi5jOTIzMDdkIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX3h0cmVlLmMKKysrIGIvZnMvamZzL2pmc194dHJlZS5jCkBAIC0yOTY0LDcgKzI5NjQsNyBAQAogCQkJY21TZXRYRChpcCwgY3AsIHBubywgZHhhZGRyLCBuYmxrcyk7CiAKIAkJCS8qIHJlbGVhc2UgdGhlIGNidWYsIG1hcmsgaXQgYXMgbW9kaWZpZWQgKi8KLQkJCWNtUHV0KGNwLCBUUlVFKTsKKwkJCWNtUHV0KGNwLCB0cnVlKTsKIAogCQkJZHhhZGRyICs9IG5ibGtzOwogCQkJc3hhZGRyICs9IG5ibGtzOwpkaWZmIC0tZ2l0IGEvZnMvamZzL25hbWVpLmMgYi9mcy9qZnMvbmFtZWkuYwppbmRleCAyOTUyNjhhZDIuLmI4ZDE2YTYgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9uYW1laS5jCisrKyBiL2ZzL2pmcy9uYW1laS5jCkBAIC0yOTIsNyArMjkyLDcgQEAKIAltYXJrX2lub2RlX2RpcnR5KGlwKTsKIAogCS8qIHVwZGF0ZSBwYXJlbnQgZGlyZWN0b3J5IGlub2RlICovCi0JZGlwLT5pX25saW5rKys7CQkvKiBmb3IgJy4uJyBmcm9tIGNoaWxkIGRpcmVjdG9yeSAqLworCWluY19ubGluayhkaXApOwkJLyogZm9yICcuLicgZnJvbSBjaGlsZCBkaXJlY3RvcnkgKi8KIAlkaXAtPmlfY3RpbWUgPSBkaXAtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7CiAJbWFya19pbm9kZV9kaXJ0eShkaXApOwogCkBAIC0zOTMsOSArMzkzLDggQEAKIAkvKiB1cGRhdGUgcGFyZW50IGRpcmVjdG9yeSdzIGxpbmsgY291bnQgY29ycmVzcG9uZGluZwogCSAqIHRvICIuLiIgZW50cnkgb2YgdGhlIHRhcmdldCBkaXJlY3RvcnkgZGVsZXRlZAogCSAqLwotCWRpcC0+aV9ubGluay0tOwogCWRpcC0+aV9jdGltZSA9IGRpcC0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKLQltYXJrX2lub2RlX2RpcnR5KGRpcCk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoZGlwKTsKIAogCS8qCiAJICogT1MvMiBjb3VsZCBoYXZlIGNyZWF0ZWQgRUEgYW5kL29yIEFDTApAQCAtNDE1LDcgKzQxNCw3IEBACiAJSkZTX0lQKGlwKS0+YWNsLmZsYWcgPSAwOwogCiAJLyogbWFyayB0aGUgdGFyZ2V0IGRpcmVjdG9yeSBhcyBkZWxldGVkICovCi0JaXAtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGlwKTsKIAltYXJrX2lub2RlX2RpcnR5KGlwKTsKIAogCXJjID0gdHhDb21taXQodGlkLCAyLCAmaXBsaXN0WzBdLCAwKTsKQEAgLTUxNSw4ICs1MTQsNyBAQAogCW1hcmtfaW5vZGVfZGlydHkoZGlwKTsKIAogCS8qIHVwZGF0ZSB0YXJnZXQncyBpbm9kZSAqLwotCWlwLT5pX25saW5rLS07Ci0JbWFya19pbm9kZV9kaXJ0eShpcCk7CisJaW5vZGVfZGVjX2xpbmtfY291bnQoaXApOwogCiAJLyoKIAkgKiAgICAgIGNvbW1pdCB6ZXJvIGxpbmsgY291bnQgb2JqZWN0CkBAIC04MjQsNyArODIyLDcgQEAKIAkJZ290byBmcmVlX2RuYW1lOwogCiAJLyogdXBkYXRlIG9iamVjdCBpbm9kZSAqLwotCWlwLT5pX25saW5rKys7CQkvKiBmb3IgbmV3IGxpbmsgKi8KKwlpbmNfbmxpbmsoaXApOwkJLyogZm9yIG5ldyBsaW5rICovCiAJaXAtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKQEAgLTgzNSw3ICs4MzMsNyBAQAogCXJjID0gdHhDb21taXQodGlkLCAyLCAmaXBsaXN0WzBdLCAwKTsKIAogCWlmIChyYykgewotCQlpcC0+aV9ubGluay0tOworCQlpcC0+aV9ubGluay0tOyAvKiBuZXZlciBpbnN0YW50aWF0ZWQgKi8KIAkJaXB1dChpcCk7CiAJfSBlbHNlCiAJCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpcCk7CkBAIC0xMTU1LDkgKzExNTMsOSBAQAogCQkJICAgICAgb2xkX2lwLT5pX2lubywgSkZTX1JFTkFNRSk7CiAJCWlmIChyYykKIAkJCWdvdG8gb3V0NDsKLQkJbmV3X2lwLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsobmV3X2lwKTsKIAkJaWYgKFNfSVNESVIobmV3X2lwLT5pX21vZGUpKSB7Ci0JCQluZXdfaXAtPmlfbmxpbmstLTsKKwkJCWRyb3BfbmxpbmsobmV3X2lwKTsKIAkJCWlmIChuZXdfaXAtPmlfbmxpbmspIHsKIAkJCQltdXRleF91bmxvY2soJkpGU19JUChuZXdfaXApLT5jb21taXRfbXV0ZXgpOwogCQkJCWlmIChvbGRfZGlyICE9IG5ld19kaXIpCkBAIC0xMjA4LDcgKzEyMDYsNyBAQAogCQkJZ290byBvdXQ0OwogCQl9CiAJCWlmIChTX0lTRElSKG9sZF9pcC0+aV9tb2RlKSkKLQkJCW5ld19kaXItPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhuZXdfZGlyKTsKIAl9CiAJLyoKIAkgKiBSZW1vdmUgb2xkIGRpcmVjdG9yeSBlbnRyeQpAQCAtMTIyMyw3ICsxMjIxLDcgQEAKIAkJZ290byBvdXQ0OwogCX0KIAlpZiAoU19JU0RJUihvbGRfaXAtPmlfbW9kZSkpIHsKLQkJb2xkX2Rpci0+aV9ubGluay0tOworCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCQlpZiAob2xkX2RpciAhPSBuZXdfZGlyKSB7CiAJCQkvKgogCQkJICogQ2hhbmdlIGlub2RlIG51bWJlciBvZiBwYXJlbnQgZm9yIG1vdmVkIGRpcmVjdG9yeQpkaWZmIC0tZ2l0IGEvZnMvamZzL3hhdHRyLmMgYi9mcy9qZnMveGF0dHIuYwppbmRleCA5YmM1YjdjLi43YTEwZTE5IDEwMDY0NAotLS0gYS9mcy9qZnMveGF0dHIuYworKysgYi9mcy9qZnMveGF0dHIuYwpAQCAtOTcsMjYgKzk3LDI2IEBACiAJICovCiAJaWYgKChlYS0+bmFtZWxlbiA+PSBYQVRUUl9TWVNURU1fUFJFRklYX0xFTikgJiYKIAkgICAgIXN0cm5jbXAoZWEtPm5hbWUsIFhBVFRSX1NZU1RFTV9QUkVGSVgsIFhBVFRSX1NZU1RFTV9QUkVGSVhfTEVOKSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJLyoKIAkgKiBDaGVjayBmb3IgInVzZXIuIgogCSAqLwogCWlmICgoZWEtPm5hbWVsZW4gPj0gWEFUVFJfVVNFUl9QUkVGSVhfTEVOKSAmJgogCSAgICAhc3RybmNtcChlYS0+bmFtZSwgWEFUVFJfVVNFUl9QUkVGSVgsIFhBVFRSX1VTRVJfUFJFRklYX0xFTikpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCS8qCiAJICogQ2hlY2sgZm9yICJzZWN1cml0eS4iCiAJICovCiAJaWYgKChlYS0+bmFtZWxlbiA+PSBYQVRUUl9TRUNVUklUWV9QUkVGSVhfTEVOKSAmJgogCSAgICAhc3RybmNtcChlYS0+bmFtZSwgWEFUVFJfU0VDVVJJVFlfUFJFRklYLAogCQkgICAgIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4pKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAkvKgogCSAqIENoZWNrIGZvciAidHJ1c3RlZC4iCiAJICovCiAJaWYgKChlYS0+bmFtZWxlbiA+PSBYQVRUUl9UUlVTVEVEX1BSRUZJWF9MRU4pICYmCiAJICAgICFzdHJuY21wKGVhLT5uYW1lLCBYQVRUUl9UUlVTVEVEX1BSRUZJWCwgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOKSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJLyoKIAkgKiBBZGQgYW55IG90aGVyIHZhbGlkIG5hbWVzcGFjZSBwcmVmaXhlcyBoZXJlCiAJICovCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkvKgogCSAqIFdlIGFzc3VtZSBpdCdzIE9TLzIncyBmbGF0IG5hbWVzcGFjZQogCSAqLwotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBuYW1lX3NpemUoc3RydWN0IGpmc19lYSAqZWEpCmRpZmYgLS1naXQgYS9mcy9saWJmcy5jIGIvZnMvbGliZnMuYwppbmRleCBhYzAyZWE2Li5iZDA4ZTBlIDEwMDY0NAotLS0gYS9mcy9saWJmcy5jCisrKyBiL2ZzL2xpYmZzLmMKQEAgLTI0Myw3ICsyNDMsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBvbGRfZGVudHJ5LT5kX2lub2RlOwogCiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCWF0b21pY19pbmMoJmlub2RlLT5pX2NvdW50KTsKIAlkZ2V0KGRlbnRyeSk7CiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKQEAgLTI3NSw3ICsyNzUsNyBAQAogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRTsKLQlpbm9kZS0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoaW5vZGUpOwogCWRwdXQoZGVudHJ5KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI4NSw5ICsyODUsOSBAQAogCWlmICghc2ltcGxlX2VtcHR5KGRlbnRyeSkpCiAJCXJldHVybiAtRU5PVEVNUFRZOwogCi0JZGVudHJ5LT5kX2lub2RlLT5pX25saW5rLS07CisJZHJvcF9ubGluayhkZW50cnktPmRfaW5vZGUpOwogCXNpbXBsZV91bmxpbmsoZGlyLCBkZW50cnkpOwotCWRpci0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoZGlyKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzAzLDEwICszMDMsMTAgQEAKIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkgewogCQlzaW1wbGVfdW5saW5rKG5ld19kaXIsIG5ld19kZW50cnkpOwogCQlpZiAodGhleV9hcmVfZGlycykKLQkJCW9sZF9kaXItPmlfbmxpbmstLTsKKwkJCWRyb3Bfbmxpbmsob2xkX2Rpcik7CiAJfSBlbHNlIGlmICh0aGV5X2FyZV9kaXJzKSB7Ci0JCW9sZF9kaXItPmlfbmxpbmstLTsKLQkJbmV3X2Rpci0+aV9ubGluaysrOworCQlkcm9wX25saW5rKG9sZF9kaXIpOworCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJfQogCiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBuZXdfZGlyLT5pX2N0aW1lID0KQEAgLTMxNywxNyArMzE3LDkgQEAKIAogaW50IHNpbXBsZV9yZWFkcGFnZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0Jdm9pZCAqa2FkZHI7Ci0KLQlpZiAoUGFnZVVwdG9kYXRlKHBhZ2UpKQotCQlnb3RvIG91dDsKLQotCWthZGRyID0ga21hcF9hdG9taWMocGFnZSwgS01fVVNFUjApOwotCW1lbXNldChrYWRkciwgMCwgUEFHRV9DQUNIRV9TSVpFKTsKLQlrdW5tYXBfYXRvbWljKGthZGRyLCBLTV9VU0VSMCk7CisJY2xlYXJfaGlnaHBhZ2UocGFnZSk7CiAJZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAJU2V0UGFnZVVwdG9kYXRlKHBhZ2UpOwotb3V0OgogCXVubG9ja19wYWdlKHBhZ2UpOwogCXJldHVybiAwOwogfQpAQCAtMzgzLDcgKzM3NSw2IEBACiAJCXJldHVybiAtRU5PTUVNOwogCWlub2RlLT5pX21vZGUgPSBTX0lGRElSIHwgMDc1NTsKIAlpbm9kZS0+aV91aWQgPSBpbm9kZS0+aV9naWQgPSAwOwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CiAJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwpAQCAtNDA1LDcgKzM5Niw2IEBACiAJCQlnb3RvIG91dDsKIAkJaW5vZGUtPmlfbW9kZSA9IFNfSUZSRUcgfCBmaWxlcy0+bW9kZTsKIAkJaW5vZGUtPmlfdWlkID0gaW5vZGUtPmlfZ2lkID0gMDsKLQkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCQlpbm9kZS0+aV9mb3AgPSBmaWxlcy0+b3BzOwpAQCAtNTQ3LDcgKzUzNyw3IEBACiAKIAlhdHRyLT5nZXQgPSBnZXQ7CiAJYXR0ci0+c2V0ID0gc2V0OwotCWF0dHItPmRhdGEgPSBpbm9kZS0+dS5nZW5lcmljX2lwOworCWF0dHItPmRhdGEgPSBpbm9kZS0+aV9wcml2YXRlOwogCWF0dHItPmZtdCA9IGZtdDsKIAltdXRleF9pbml0KCZhdHRyLT5tdXRleCk7CiAKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMgYi9mcy9sb2NrZC9jbG50bG9jay5jCmluZGV4IDUyNzc0ZmUuLmY5NWNjM2YgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRsb2NrLmMKKysrIGIvZnMvbG9ja2QvY2xudGxvY2suYwpAQCAtMTYwLDcgKzE2MCw3IEBACiAJICovCiAJbGlzdF9zcGxpY2VfaW5pdCgmaG9zdC0+aF9ncmFudGVkLCAmaG9zdC0+aF9yZWNsYWltKTsKIAotCWRwcmludGsoIk5MTTogcmVjbGFpbWluZyBsb2NrcyBmb3IgaG9zdCAlcyIsIGhvc3QtPmhfbmFtZSk7CisJZHByaW50aygiTkxNOiByZWNsYWltaW5nIGxvY2tzIGZvciBob3N0ICVzXG4iLCBob3N0LT5oX25hbWUpOwogfQogCiBzdGF0aWMgdm9pZCBubG1jbG50X2ZpbmlzaF9yZWNsYWltKHN0cnVjdCBubG1faG9zdCAqaG9zdCkKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2NsbnRwcm9jLmMgYi9mcy9sb2NrZC9jbG50cHJvYy5jCmluZGV4IDUwZGJiNjcuLjI3MWUyMTYgMTAwNjQ0Ci0tLSBhL2ZzL2xvY2tkL2NsbnRwcm9jLmMKKysrIGIvZnMvbG9ja2QvY2xudHByb2MuYwpAQCAtMTAwLDcgKzEwMCw3IEBACiAJcmVzID0gX19ubG1fZmluZF9sb2Nrb3duZXIoaG9zdCwgb3duZXIpOwogCWlmIChyZXMgPT0gTlVMTCkgewogCQlzcGluX3VubG9jaygmaG9zdC0+aF9sb2NrKTsKLQkJbmV3ID0gKHN0cnVjdCBubG1fbG9ja293bmVyICopa21hbGxvYyhzaXplb2YoKm5ldyksIEdGUF9LRVJORUwpOworCQluZXcgPSBrbWFsbG9jKHNpemVvZigqbmV3KSwgR0ZQX0tFUk5FTCk7CiAJCXNwaW5fbG9jaygmaG9zdC0+aF9sb2NrKTsKIAkJcmVzID0gX19ubG1fZmluZF9sb2Nrb3duZXIoaG9zdCwgb3duZXIpOwogCQlpZiAocmVzID09IE5VTEwgJiYgbmV3ICE9IE5VTEwpIHsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL2hvc3QuYyBiL2ZzL2xvY2tkL2hvc3QuYwppbmRleCA3MDNmYjAzLi5hMGQwYjU4IDEwMDY0NAotLS0gYS9mcy9sb2NrZC9ob3N0LmMKKysrIGIvZnMvbG9ja2QvaG9zdC5jCkBAIC05OSw5ICs5OSw5IEBACiAJLyogT29vcHMsIG5vIGhvc3QgZm91bmQsIGNyZWF0ZSBpdCAqLwogCWRwcmludGsoImxvY2tkOiBjcmVhdGluZyBob3N0IGVudHJ5XG4iKTsKIAotCWlmICghKGhvc3QgPSAoc3RydWN0IG5sbV9ob3N0ICopIGttYWxsb2Moc2l6ZW9mKCpob3N0KSwgR0ZQX0tFUk5FTCkpKQorCWhvc3QgPSBremFsbG9jKHNpemVvZigqaG9zdCksIEdGUF9LRVJORUwpOworCWlmICghaG9zdCkKIAkJZ290byBub2hvc3Q7Ci0JbWVtc2V0KGhvc3QsIDAsIHNpemVvZigqaG9zdCkpOwogCiAJYWRkciA9IHNpbi0+c2luX2FkZHIuc19hZGRyOwogCXNwcmludGYoaG9zdC0+aF9uYW1lLCAiJXUuJXUuJXUuJXUiLCBOSVBRVUFEKGFkZHIpKTsKZGlmZiAtLWdpdCBhL2ZzL2xvY2tkL3N2Y3N1YnMuYyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwppbmRleCAwMWI0ZGI5Li5hOTJkZDk4ZiAxMDA2NDQKLS0tIGEvZnMvbG9ja2Qvc3Zjc3Vicy5jCisrKyBiL2ZzL2xvY2tkL3N2Y3N1YnMuYwpAQCAtMTAwLDExICsxMDAsMTAgQEAKIAlubG1fZGVidWdfcHJpbnRfZmgoImNyZWF0aW5nIGZpbGUgZm9yIiwgZik7CiAKIAluZnNlcnIgPSBubG1fbGNrX2RlbmllZF9ub2xvY2tzOwotCWZpbGUgPSAoc3RydWN0IG5sbV9maWxlICopIGttYWxsb2Moc2l6ZW9mKCpmaWxlKSwgR0ZQX0tFUk5FTCk7CisJZmlsZSA9IGt6YWxsb2Moc2l6ZW9mKCpmaWxlKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmaWxlKQogCQlnb3RvIG91dF91bmxvY2s7CiAKLQltZW1zZXQoZmlsZSwgMCwgc2l6ZW9mKCpmaWxlKSk7CiAJbWVtY3B5KCZmaWxlLT5mX2hhbmRsZSwgZiwgc2l6ZW9mKHN0cnVjdCBuZnNfZmgpKTsKIAlmaWxlLT5mX2hhc2ggPSBoYXNoOwogCWluaXRfTVVURVgoJmZpbGUtPmZfc2VtYSk7CmRpZmYgLS1naXQgYS9mcy9sb2Nrcy5jIGIvZnMvbG9ja3MuYwppbmRleCBkN2M1MzM5Li4yMWRmYWRmIDEwMDY0NAotLS0gYS9mcy9sb2Nrcy5jCisrKyBiL2ZzL2xvY2tzLmMKQEAgLTMxNCwxMyArMzE0LDEzIEBACiAJb2ZmX3Qgc3RhcnQsIGVuZDsKIAogCXN3aXRjaCAobC0+bF93aGVuY2UpIHsKLQljYXNlIDA6IC8qU0VFS19TRVQqLworCWNhc2UgU0VFS19TRVQ6CiAJCXN0YXJ0ID0gMDsKIAkJYnJlYWs7Ci0JY2FzZSAxOiAvKlNFRUtfQ1VSKi8KKwljYXNlIFNFRUtfQ1VSOgogCQlzdGFydCA9IGZpbHAtPmZfcG9zOwogCQlicmVhazsKLQljYXNlIDI6IC8qU0VFS19FTkQqLworCWNhc2UgU0VFS19FTkQ6CiAJCXN0YXJ0ID0gaV9zaXplX3JlYWQoZmlscC0+Zl9kZW50cnktPmRfaW5vZGUpOwogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtMzY0LDEzICszNjQsMTMgQEAKIAlsb2ZmX3Qgc3RhcnQ7CiAKIAlzd2l0Y2ggKGwtPmxfd2hlbmNlKSB7Ci0JY2FzZSAwOiAvKlNFRUtfU0VUKi8KKwljYXNlIFNFRUtfU0VUOgogCQlzdGFydCA9IDA7CiAJCWJyZWFrOwotCWNhc2UgMTogLypTRUVLX0NVUiovCisJY2FzZSBTRUVLX0NVUjoKIAkJc3RhcnQgPSBmaWxwLT5mX3BvczsKIAkJYnJlYWs7Ci0JY2FzZSAyOiAvKlNFRUtfRU5EKi8KKwljYXNlIFNFRUtfRU5EOgogCQlzdGFydCA9IGlfc2l6ZV9yZWFkKGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2ZzL21iY2FjaGUuYyBiL2ZzL21iY2FjaGUuYwppbmRleCBlNGZkZTFhLi4wZmY3MTI1IDEwMDY0NAotLS0gYS9mcy9tYmNhY2hlLmMKKysrIGIvZnMvbWJjYWNoZS5jCkBAIC0xNjAsNiArMTYwLDcgQEAKIAogc3RhdGljIHZvaWQKIF9fbWJfY2FjaGVfZW50cnlfcmVsZWFzZV91bmxvY2soc3RydWN0IG1iX2NhY2hlX2VudHJ5ICpjZSkKKwlfX3JlbGVhc2VzKG1iX2NhY2hlX3NwaW5sb2NrKQogewogCS8qIFdha2UgdXAgYWxsIHByb2Nlc3NlcyBxdWV1aW5nIGZvciB0aGlzIGNhY2hlIGVudHJ5LiAqLwogCWlmIChjZS0+ZV9xdWV1ZWQpCmRpZmYgLS1naXQgYS9mcy9taW5peC9iaXRtYXAuYyBiL2ZzL21pbml4L2JpdG1hcC5jCmluZGV4IDRhNmFiYzQuLmRmNmIxMDcgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2JpdG1hcC5jCisrKyBiL2ZzL21pbml4L2JpdG1hcC5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIAlpbm9kZS0+aV9naWQgPSAoZGlyLT5pX21vZGUgJiBTX0lTR0lEKSA/IGRpci0+aV9naWQgOiBjdXJyZW50LT5mc2dpZDsKIAlpbm9kZS0+aV9pbm8gPSBqOwogCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JaW5vZGUtPmlfYmxvY2tzID0gaW5vZGUtPmlfYmxrc2l6ZSA9IDA7CisJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAltZW1zZXQoJm1pbml4X2koaW5vZGUpLT51LCAwLCBzaXplb2YobWluaXhfaShpbm9kZSktPnUpKTsKIAlpbnNlcnRfaW5vZGVfaGFzaChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CmRpZmYgLS1naXQgYS9mcy9taW5peC9maWxlLmMgYi9mcy9taW5peC9maWxlLmMKaW5kZXggNDIwYjMyOC4uNDBlYWMyZSAxMDA2NDQKLS0tIGEvZnMvbWluaXgvZmlsZS5jCisrKyBiL2ZzL21pbml4L2ZpbGUuYwpAQCAtMTcsOCArMTcsMTAgQEAKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBtaW5peF9maWxlX29wZXJhdGlvbnMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAotCS53cml0ZQkJPSBnZW5lcmljX2ZpbGVfd3JpdGUsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gZ2VuZXJpY19maWxlX2Fpb193cml0ZSwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfbW1hcCwKIAkuZnN5bmMJCT0gbWluaXhfc3luY19maWxlLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKZGlmZiAtLWdpdCBhL2ZzL21pbml4L2lub2RlLmMgYi9mcy9taW5peC9pbm9kZS5jCmluZGV4IDMzMGZmOWYuLmMxMWE0YjkgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L2lub2RlLmMKKysrIGIvZnMvbWluaXgvaW5vZGUuYwpAQCAtOTAsOCArOTAsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG1pbml4X2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gIm1pbml4X2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KG1pbml4X2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBtaW5peF9zb3BzID0gewpAQCAtMTQ1LDExICsxNDQsMTAgQEAKIAlzdHJ1Y3QgaW5vZGUgKnJvb3RfaW5vZGU7CiAJc3RydWN0IG1pbml4X3NiX2luZm8gKnNiaTsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBtaW5peF9zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG1pbml4X3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcy0+c19mc19pbmZvID0gc2JpOwotCW1lbXNldChzYmksIDAsIHNpemVvZihzdHJ1Y3QgbWluaXhfc2JfaW5mbykpOwogCiAJLyogTi5CLiBUaGVzZSBzaG91bGQgYmUgY29tcGlsZS10aW1lIHRlc3RzLgogCSAgIFVuZm9ydHVuYXRlbHkgdGhhdCBpcyBpbXBvc3NpYmxlLiAqLwpAQCAtMjA3LDEwICsyMDUsOSBAQAogCWlmIChzYmktPnNfaW1hcF9ibG9ja3MgPT0gMCB8fCBzYmktPnNfem1hcF9ibG9ja3MgPT0gMCkKIAkJZ290byBvdXRfaWxsZWdhbF9zYjsKIAlpID0gKHNiaS0+c19pbWFwX2Jsb2NrcyArIHNiaS0+c196bWFwX2Jsb2NrcykgKiBzaXplb2YoYmgpOwotCW1hcCA9IGttYWxsb2MoaSwgR0ZQX0tFUk5FTCk7CisJbWFwID0ga3phbGxvYyhpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1hcCkKIAkJZ290byBvdXRfbm9fbWFwOwotCW1lbXNldChtYXAsIDAsIGkpOwogCXNiaS0+c19pbWFwID0gJm1hcFswXTsKIAlzYmktPnNfem1hcCA9ICZtYXBbc2JpLT5zX2ltYXBfYmxvY2tzXTsKIApAQCAtMzk5LDcgKzM5Niw3IEBACiAJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IDA7CiAJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7Ci0JaW5vZGUtPmlfYmxvY2tzID0gaW5vZGUtPmlfYmxrc2l6ZSA9IDA7CisJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgOTsgaSsrKQogCQltaW5peF9pbm9kZS0+dS5pMV9kYXRhW2ldID0gcmF3X2lub2RlLT5pX3pvbmVbaV07CiAJbWluaXhfc2V0X2lub2RlKGlub2RlLCBvbGRfZGVjb2RlX2RldihyYXdfaW5vZGUtPmlfem9uZVswXSkpOwpAQCAtNDMyLDcgKzQyOSw3IEBACiAJaW5vZGUtPmlfbXRpbWUudHZfbnNlYyA9IDA7CiAJaW5vZGUtPmlfYXRpbWUudHZfbnNlYyA9IDA7CiAJaW5vZGUtPmlfY3RpbWUudHZfbnNlYyA9IDA7Ci0JaW5vZGUtPmlfYmxvY2tzID0gaW5vZGUtPmlfYmxrc2l6ZSA9IDA7CisJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykKIAkJbWluaXhfaW5vZGUtPnUuaTJfZGF0YVtpXSA9IHJhd19pbm9kZS0+aV96b25lW2ldOwogCW1pbml4X3NldF9pbm9kZShpbm9kZSwgb2xkX2RlY29kZV9kZXYocmF3X2lub2RlLT5pX3pvbmVbMF0pKTsKZGlmZiAtLWdpdCBhL2ZzL21pbml4L25hbWVpLmMgYi9mcy9taW5peC9uYW1laS5jCmluZGV4IDViNmE0NTQuLjI5OWJiNjYgMTAwNjQ0Ci0tLSBhL2ZzL21pbml4L25hbWVpLmMKKysrIGIvZnMvbWluaXgvbmFtZWkuYwpAQCAtMjQ5LDcgKzI0OSw3IEBACiAJCW1pbml4X3NldF9saW5rKG5ld19kZSwgbmV3X3BhZ2UsIG9sZF9pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJCWlmIChkaXJfZGUpCi0JCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKKwkJCWRyb3BfbmxpbmsobmV3X2lub2RlKTsKIAkJaW5vZGVfZGVjX2xpbmtfY291bnQobmV3X2lub2RlKTsKIAl9IGVsc2UgewogCQlpZiAoZGlyX2RlKSB7CmRpZmYgLS1naXQgYS9mcy9tcGFnZS5jIGIvZnMvbXBhZ2UuYwppbmRleCAxZTQ1OTgyLi42OTJhM2U1IDEwMDY0NAotLS0gYS9mcy9tcGFnZS5jCisrKyBiL2ZzL21wYWdlLmMKQEAgLTY5Myw2ICs2OTMsOCBAQAogICogdGhlIGNhbGwgd2FzIG1hZGUgZ2V0IG5ldyBJL08gc3RhcnRlZCBhZ2FpbnN0IHRoZW0uICBJZiB3YmMtPnN5bmNfbW9kZSBpcwogICogV0JfU1lOQ19BTEwgdGhlbiB3ZSB3ZXJlIGNhbGxlZCBmb3IgZGF0YSBpbnRlZ3JpdHkgYW5kIHdlIG11c3Qgd2FpdCBmb3IKICAqIGV4aXN0aW5nIElPIHRvIGNvbXBsZXRlLgorICoKKyAqIElmIHlvdSBmaXggdGhpcyB5b3Ugc2hvdWxkIGNoZWNrIGdlbmVyaWNfd3JpdGVwYWdlcygpIGFsc28hCiAgKi8KIGludAogbXBhZ2Vfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKZGlmZiAtLWdpdCBhL2ZzL21zZG9zL25hbWVpLmMgYi9mcy9tc2Rvcy9uYW1laS5jCmluZGV4IDllNDQxNTguLmIwZjAxYjMgMTAwNjQ0Ci0tLSBhL2ZzL21zZG9zL25hbWVpLmMKKysrIGIvZnMvbXNkb3MvbmFtZWkuYwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJCQlzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gZGlyLT5pX3NiOwotCXN0cnVjdCBpbm9kZSAqaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IE5VTEw7CiAJc3RydWN0IGZhdF9zbG90X2luZm8gc2luZm87CiAJc3RydWN0IHRpbWVzcGVjIHRzOwogCXVuc2lnbmVkIGNoYXIgbXNkb3NfbmFtZVtNU0RPU19OQU1FXTsKQEAgLTMxNiw2ICszMTYsOCBAQAogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOworCWlmICghZXJyKQorCQllcnIgPSBmYXRfZmx1c2hfaW5vZGVzKHNiLCBkaXIsIGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0zNDEsMTMgKzM0MywxNSBAQAogCWVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhkaXIsICZzaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCWRpci0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoZGlyKTsKIAotCWlub2RlLT5pX25saW5rID0gMDsKKwljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCWZhdF9kZXRhY2goaW5vZGUpOwogb3V0OgogCXVubG9ja19rZXJuZWwoKTsKKwlpZiAoIWVycikKKwkJZXJyID0gZmF0X2ZsdXNoX2lub2Rlcyhpbm9kZS0+aV9zYiwgZGlyLCBpbm9kZSk7CiAKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzg1LDcgKzM4OSw3IEBACiAJZXJyID0gbXNkb3NfYWRkX2VudHJ5KGRpciwgbXNkb3NfbmFtZSwgMSwgaXNfaGlkLCBjbHVzdGVyLCAmdHMsICZzaW5mbyk7CiAJaWYgKGVycikKIAkJZ290byBvdXRfZnJlZTsKLQlkaXItPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKIAogCWlub2RlID0gZmF0X2J1aWxkX2lub2RlKHNiLCBzaW5mby5kZSwgc2luZm8uaV9wb3MpOwogCWJyZWxzZShzaW5mby5iaCk7CkBAIC00MDEsNiArNDA1LDcgQEAKIAlkX2luc3RhbnRpYXRlKGRlbnRyeSwgaW5vZGUpOwogCiAJdW5sb2NrX2tlcm5lbCgpOworCWZhdF9mbHVzaF9pbm9kZXMoc2IsIGRpciwgaW5vZGUpOwogCXJldHVybiAwOwogCiBvdXRfZnJlZToKQEAgLTQyNSwxMSArNDMwLDEzIEBACiAJZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKGRpciwgJnNpbmZvKTsJLyogYW5kIHJlbGVhc2VzIGJoICovCiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JaW5vZGUtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZmF0X2RldGFjaChpbm9kZSk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOworCWlmICghZXJyKQorCQllcnIgPSBmYXRfZmx1c2hfaW5vZGVzKGlub2RlLT5pX3NiLCBkaXIsIGlub2RlKTsKIAogCXJldHVybiBlcnI7CiB9CkBAIC01NDIsOSArNTQ5LDkgQEAKIAkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcl9kb3Rkb3Q7CiAJCX0KLQkJb2xkX2Rpci0+aV9ubGluay0tOworCQlkcm9wX25saW5rKG9sZF9kaXIpOwogCQlpZiAoIW5ld19pbm9kZSkKLQkJCW5ld19kaXItPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhuZXdfZGlyKTsKIAl9CiAKIAllcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgJm9sZF9zaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwpAQCAtNTU5LDEwICs1NjYsOSBAQAogCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwogCiAJaWYgKG5ld19pbm9kZSkgeworCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCWlmIChpc19kaXIpCi0JCQluZXdfaW5vZGUtPmlfbmxpbmsgLT0gMjsKLQkJZWxzZQotCQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IHRzOwogCX0KIG91dDoKQEAgLTYzNSw2ICs2NDEsOCBAQAogCQkJICAgICAgbmV3X2RpciwgbmV3X21zZG9zX25hbWUsIG5ld19kZW50cnksIGlzX2hpZCk7CiBvdXQ6CiAJdW5sb2NrX2tlcm5lbCgpOworCWlmICghZXJyKQorCQllcnIgPSBmYXRfZmx1c2hfaW5vZGVzKG9sZF9kaXItPmlfc2IsIG9sZF9kaXIsIG5ld19kaXIpOwogCXJldHVybiBlcnI7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25hbWVpLmMgYi9mcy9uYW1laS5jCmluZGV4IDZiNTkxYzAuLjI4ZDQ5YjMgMTAwNjQ0Ci0tLSBhL2ZzL25hbWVpLmMKKysrIGIvZnMvbmFtZWkuYwpAQCAtMzcyLDYgKzM3MiwzMCBAQAogCQlmcHV0KG5kLT5pbnRlbnQub3Blbi5maWxlKTsKIH0KIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgZGVudHJ5ICoKK2RvX3JldmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKK3sKKwlpbnQgc3RhdHVzID0gZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisJaWYgKHVubGlrZWx5KHN0YXR1cyA8PSAwKSkgeworCQkvKgorCQkgKiBUaGUgZGVudHJ5IGZhaWxlZCB2YWxpZGF0aW9uLgorCQkgKiBJZiBkX3JldmFsaWRhdGUgcmV0dXJuZWQgMCBhdHRlbXB0IHRvIGludmFsaWRhdGUKKwkJICogdGhlIGRlbnRyeSBvdGhlcndpc2UgZF9yZXZhbGlkYXRlIGlzIGFza2luZyB1cworCQkgKiB0byByZXR1cm4gYSBmYWlsIHN0YXR1cy4KKwkJICovCisJCWlmICghc3RhdHVzKSB7CisJCQlpZiAoIWRfaW52YWxpZGF0ZShkZW50cnkpKSB7CisJCQkJZHB1dChkZW50cnkpOworCQkJCWRlbnRyeSA9IE5VTEw7CisJCQl9CisJCX0gZWxzZSB7CisJCQlkcHV0KGRlbnRyeSk7CisJCQlkZW50cnkgPSBFUlJfUFRSKHN0YXR1cyk7CisJCX0KKwl9CisJcmV0dXJuIGRlbnRyeTsKK30KKwogLyoKICAqIEludGVybmFsIGxvb2t1cCgpIHVzaW5nIHRoZSBuZXcgZ2VuZXJpYyBkY2FjaGUuCiAgKiBTTVAtc2FmZQpAQCAtMzg2LDEyICs0MTAsOSBAQAogCWlmICghZGVudHJ5KQogCQlkZW50cnkgPSBkX2xvb2t1cChwYXJlbnQsIG5hbWUpOwogCi0JaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpIHsKLQkJaWYgKCFkZW50cnktPmRfb3AtPmRfcmV2YWxpZGF0ZShkZW50cnksIG5kKSAmJiAhZF9pbnZhbGlkYXRlKGRlbnRyeSkpIHsKLQkJCWRwdXQoZGVudHJ5KTsKLQkJCWRlbnRyeSA9IE5VTEw7Ci0JCX0KLQl9CisJaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfb3AgJiYgZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUpCisJCWRlbnRyeSA9IGRvX3JldmFsaWRhdGUoZGVudHJ5LCBuZCk7CisKIAlyZXR1cm4gZGVudHJ5OwogfQogCkBAIC00ODQsMTAgKzUwNSw5IEBACiAJICovCiAJbXV0ZXhfdW5sb2NrKCZkaXItPmlfbXV0ZXgpOwogCWlmIChyZXN1bHQtPmRfb3AgJiYgcmVzdWx0LT5kX29wLT5kX3JldmFsaWRhdGUpIHsKLQkJaWYgKCFyZXN1bHQtPmRfb3AtPmRfcmV2YWxpZGF0ZShyZXN1bHQsIG5kKSAmJiAhZF9pbnZhbGlkYXRlKHJlc3VsdCkpIHsKLQkJCWRwdXQocmVzdWx0KTsKKwkJcmVzdWx0ID0gZG9fcmV2YWxpZGF0ZShyZXN1bHQsIG5kKTsKKwkJaWYgKCFyZXN1bHQpCiAJCQlyZXN1bHQgPSBFUlJfUFRSKC1FTk9FTlQpOwotCQl9CiAJfQogCXJldHVybiByZXN1bHQ7CiB9CkBAIC00OTgsMTggKzUxOCwyMCBAQAogc3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQKIHdhbGtfaW5pdF9yb290KGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBuYW1laWRhdGEgKm5kKQogewotCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCWlmIChjdXJyZW50LT5mcy0+YWx0cm9vdCAmJiAhKG5kLT5mbGFncyAmIExPT0tVUF9OT0FMVCkpIHsKLQkJbmQtPm1udCA9IG1udGdldChjdXJyZW50LT5mcy0+YWx0cm9vdG1udCk7Ci0JCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5hbHRyb290KTsKLQkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCisJcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJaWYgKGZzLT5hbHRyb290ICYmICEobmQtPmZsYWdzICYgTE9PS1VQX05PQUxUKSkgeworCQluZC0+bW50ID0gbW50Z2V0KGZzLT5hbHRyb290bW50KTsKKwkJbmQtPmRlbnRyeSA9IGRnZXQoZnMtPmFsdHJvb3QpOworCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwogCQlpZiAoX19lbXVsX2xvb2t1cF9kZW50cnkobmFtZSxuZCkpCiAJCQlyZXR1cm4gMDsKLQkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOwogCX0KLQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5yb290bW50KTsKLQluZC0+ZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cm9vdCk7Ci0JcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwluZC0+bW50ID0gbW50Z2V0KGZzLT5yb290bW50KTsKKwluZC0+ZGVudHJ5ID0gZGdldChmcy0+cm9vdCk7CisJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNzA0LDE3ICs3MjYsMTkgQEAKIAogc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGZvbGxvd19kb3Rkb3Qoc3RydWN0IG5hbWVpZGF0YSAqbmQpCiB7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKKwogCXdoaWxlKDEpIHsKIAkJc3RydWN0IHZmc21vdW50ICpwYXJlbnQ7CiAJCXN0cnVjdCBkZW50cnkgKm9sZCA9IG5kLT5kZW50cnk7CiAKLSAgICAgICAgICAgICAgICByZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQkJaWYgKG5kLT5kZW50cnkgPT0gY3VycmVudC0+ZnMtPnJvb3QgJiYKLQkJICAgIG5kLT5tbnQgPT0gY3VycmVudC0+ZnMtPnJvb3RtbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisgICAgICAgICAgICAgICAgcmVhZF9sb2NrKCZmcy0+bG9jayk7CisJCWlmIChuZC0+ZGVudHJ5ID09IGZzLT5yb290ICYmCisJCSAgICBuZC0+bW50ID09IGZzLT5yb290bW50KSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZWFkX3VubG9jaygmZnMtPmxvY2spOwogCQkJYnJlYWs7CiAJCX0KLSAgICAgICAgICAgICAgICByZWFkX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworICAgICAgICAgICAgICAgIHJlYWRfdW5sb2NrKCZmcy0+bG9jayk7CiAJCXNwaW5fbG9jaygmZGNhY2hlX2xvY2spOwogCQlpZiAobmQtPmRlbnRyeSAhPSBuZC0+bW50LT5tbnRfcm9vdCkgewogCQkJbmQtPmRlbnRyeSA9IGRnZXQobmQtPmRlbnRyeS0+ZF9wYXJlbnQpOwpAQCAtNzY3LDEyICs3OTEsMTIgQEAKIAlnb3RvIGRvbmU7CiAKIG5lZWRfcmV2YWxpZGF0ZToKLQlpZiAoZGVudHJ5LT5kX29wLT5kX3JldmFsaWRhdGUoZGVudHJ5LCBuZCkpCi0JCWdvdG8gZG9uZTsKLQlpZiAoZF9pbnZhbGlkYXRlKGRlbnRyeSkpCi0JCWdvdG8gZG9uZTsKLQlkcHV0KGRlbnRyeSk7Ci0JZ290byBuZWVkX2xvb2t1cDsKKwlkZW50cnkgPSBkb19yZXZhbGlkYXRlKGRlbnRyeSwgbmQpOworCWlmICghZGVudHJ5KQorCQlnb3RvIG5lZWRfbG9va3VwOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJZ290byBmYWlsOworCWdvdG8gZG9uZTsKIAogZmFpbDoKIAlyZXR1cm4gUFRSX0VSUihkZW50cnkpOwpAQCAtMTAyMiwxNSArMTA0NiwxNyBAQAogCQlzdHJ1Y3QgdmZzbW91bnQgKm9sZF9tbnQgPSBuZC0+bW50OwogCQlzdHJ1Y3QgcXN0ciBsYXN0ID0gbmQtPmxhc3Q7CiAJCWludCBsYXN0X3R5cGUgPSBuZC0+bGFzdF90eXBlOworCQlzdHJ1Y3QgZnNfc3RydWN0ICpmcyA9IGN1cnJlbnQtPmZzOworCiAJCS8qCi0JCSAqIE5BTUUgd2FzIG5vdCBmb3VuZCBpbiBhbHRlcm5hdGUgcm9vdCBvciBpdCdzIGEgZGlyZWN0b3J5LiAgVHJ5IHRvIGZpbmQKLQkJICogaXQgaW4gdGhlIG5vcm1hbCByb290OgorCQkgKiBOQU1FIHdhcyBub3QgZm91bmQgaW4gYWx0ZXJuYXRlIHJvb3Qgb3IgaXQncyBhIGRpcmVjdG9yeS4KKwkJICogVHJ5IHRvIGZpbmQgaXQgaW4gdGhlIG5vcm1hbCByb290OgogCQkgKi8KIAkJbmQtPmxhc3RfdHlwZSA9IExBU1RfUk9PVDsKLQkJcmVhZF9sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7Ci0JCW5kLT5tbnQgPSBtbnRnZXQoY3VycmVudC0+ZnMtPnJvb3RtbnQpOwotCQluZC0+ZGVudHJ5ID0gZGdldChjdXJyZW50LT5mcy0+cm9vdCk7Ci0JCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOworCQluZC0+bW50ID0gbW50Z2V0KGZzLT5yb290bW50KTsKKwkJbmQtPmRlbnRyeSA9IGRnZXQoZnMtPnJvb3QpOworCQlyZWFkX3VubG9jaygmZnMtPmxvY2spOwogCQlpZiAocGF0aF93YWxrKG5hbWUsIG5kKSA9PSAwKSB7CiAJCQlpZiAobmQtPmRlbnRyeS0+ZF9pbm9kZSkgewogCQkJCWRwdXQob2xkX2RlbnRyeSk7CkBAIC0xMDU0LDYgKzEwODAsNyBAQAogCXN0cnVjdCB2ZnNtb3VudCAqbW50ID0gTlVMTCwgKm9sZG1udDsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBOVUxMLCAqb2xkZGVudHJ5OwogCWludCBlcnI7CisJc3RydWN0IGZzX3N0cnVjdCAqZnMgPSBjdXJyZW50LT5mczsKIAogCWlmICghZW11bCkKIAkJZ290byBzZXRfaXQ7CkBAIC0xMDYzLDEyICsxMDkwLDEyIEBACiAJCWRlbnRyeSA9IG5kLmRlbnRyeTsKIAl9CiBzZXRfaXQ6Ci0Jd3JpdGVfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCW9sZG1udCA9IGN1cnJlbnQtPmZzLT5hbHRyb290bW50OwotCW9sZGRlbnRyeSA9IGN1cnJlbnQtPmZzLT5hbHRyb290OwotCWN1cnJlbnQtPmZzLT5hbHRyb290bW50ID0gbW50OwotCWN1cnJlbnQtPmZzLT5hbHRyb290ID0gZGVudHJ5OwotCXdyaXRlX3VubG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCXdyaXRlX2xvY2soJmZzLT5sb2NrKTsKKwlvbGRtbnQgPSBmcy0+YWx0cm9vdG1udDsKKwlvbGRkZW50cnkgPSBmcy0+YWx0cm9vdDsKKwlmcy0+YWx0cm9vdG1udCA9IG1udDsKKwlmcy0+YWx0cm9vdCA9IGRlbnRyeTsKKwl3cml0ZV91bmxvY2soJmZzLT5sb2NrKTsKIAlpZiAob2xkZGVudHJ5KSB7CiAJCWRwdXQob2xkZGVudHJ5KTsKIAkJbW50cHV0KG9sZG1udCk7CkBAIC0xMDgyLDI5ICsxMTA5LDMwIEBACiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGZwdXRfbmVlZGVkOwogCXN0cnVjdCBmaWxlICpmaWxlOworCXN0cnVjdCBmc19zdHJ1Y3QgKmZzID0gY3VycmVudC0+ZnM7CiAKIAluZC0+bGFzdF90eXBlID0gTEFTVF9ST09UOyAvKiBpZiB0aGVyZSBhcmUgb25seSBzbGFzaGVzLi4uICovCiAJbmQtPmZsYWdzID0gZmxhZ3M7CiAJbmQtPmRlcHRoID0gMDsKIAogCWlmICgqbmFtZT09Jy8nKSB7Ci0JCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOwotCQlpZiAoY3VycmVudC0+ZnMtPmFsdHJvb3QgJiYgIShuZC0+ZmxhZ3MgJiBMT09LVVBfTk9BTFQpKSB7Ci0JCQluZC0+bW50ID0gbW50Z2V0KGN1cnJlbnQtPmZzLT5hbHRyb290bW50KTsKLQkJCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5hbHRyb290KTsKLQkJCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOworCQlpZiAoZnMtPmFsdHJvb3QgJiYgIShuZC0+ZmxhZ3MgJiBMT09LVVBfTk9BTFQpKSB7CisJCQluZC0+bW50ID0gbW50Z2V0KGZzLT5hbHRyb290bW50KTsKKwkJCW5kLT5kZW50cnkgPSBkZ2V0KGZzLT5hbHRyb290KTsKKwkJCXJlYWRfdW5sb2NrKCZmcy0+bG9jayk7CiAJCQlpZiAoX19lbXVsX2xvb2t1cF9kZW50cnkobmFtZSxuZCkpCiAJCQkJZ290byBvdXQ7IC8qIGZvdW5kIGluIGFsdHJvb3QgKi8KLQkJCXJlYWRfbG9jaygmY3VycmVudC0+ZnMtPmxvY2spOworCQkJcmVhZF9sb2NrKCZmcy0+bG9jayk7CiAJCX0KLQkJbmQtPm1udCA9IG1udGdldChjdXJyZW50LT5mcy0+cm9vdG1udCk7Ci0JCW5kLT5kZW50cnkgPSBkZ2V0KGN1cnJlbnQtPmZzLT5yb290KTsKLQkJcmVhZF91bmxvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKKwkJbmQtPm1udCA9IG1udGdldChmcy0+cm9vdG1udCk7CisJCW5kLT5kZW50cnkgPSBkZ2V0KGZzLT5yb290KTsKKwkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKIAl9IGVsc2UgaWYgKGRmZCA9PSBBVF9GRENXRCkgewotCQlyZWFkX2xvY2soJmN1cnJlbnQtPmZzLT5sb2NrKTsKLQkJbmQtPm1udCA9IG1udGdldChjdXJyZW50LT5mcy0+cHdkbW50KTsKLQkJbmQtPmRlbnRyeSA9IGRnZXQoY3VycmVudC0+ZnMtPnB3ZCk7Ci0JCXJlYWRfdW5sb2NrKCZjdXJyZW50LT5mcy0+bG9jayk7CisJCXJlYWRfbG9jaygmZnMtPmxvY2spOworCQluZC0+bW50ID0gbW50Z2V0KGZzLT5wd2RtbnQpOworCQluZC0+ZGVudHJ5ID0gZGdldChmcy0+cHdkKTsKKwkJcmVhZF91bmxvY2soJmZzLT5sb2NrKTsKIAl9IGVsc2UgewogCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CiAKQEAgLTE1NjcsNiArMTU5NSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IG9wZW5fbmFtZWlfY3JlYXRlKHN0cnVjdCBuYW1laWRhdGEgKm5kLCBzdHJ1Y3QgcGF0aCAqcGF0aCwKKwkJCQlpbnQgZmxhZywgaW50IG1vZGUpCit7CisJaW50IGVycm9yOworCXN0cnVjdCBkZW50cnkgKmRpciA9IG5kLT5kZW50cnk7CisKKwlpZiAoIUlTX1BPU0lYQUNMKGRpci0+ZF9pbm9kZSkpCisJCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKKwllcnJvciA9IHZmc19jcmVhdGUoZGlyLT5kX2lub2RlLCBwYXRoLT5kZW50cnksIG1vZGUsIG5kKTsKKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisJZHB1dChuZC0+ZGVudHJ5KTsKKwluZC0+ZGVudHJ5ID0gcGF0aC0+ZGVudHJ5OworCWlmIChlcnJvcikKKwkJcmV0dXJuIGVycm9yOworCS8qIERvbid0IGNoZWNrIGZvciB3cml0ZSBwZXJtaXNzaW9uLCBkb24ndCB0cnVuY2F0ZSAqLworCXJldHVybiBtYXlfb3BlbihuZCwgMCwgZmxhZyAmIH5PX1RSVU5DKTsKK30KKwogLyoKICAqCW9wZW5fbmFtZWkoKQogICoKQEAgLTE2NDgsMTggKzE2OTQsMTAgQEAKIAogCS8qIE5lZ2F0aXZlIGRlbnRyeSwganVzdCBjcmVhdGUgdGhlIGZpbGUgKi8KIAlpZiAoIXBhdGguZGVudHJ5LT5kX2lub2RlKSB7Ci0JCWlmICghSVNfUE9TSVhBQ0woZGlyLT5kX2lub2RlKSkKLQkJCW1vZGUgJj0gfmN1cnJlbnQtPmZzLT51bWFzazsKLQkJZXJyb3IgPSB2ZnNfY3JlYXRlKGRpci0+ZF9pbm9kZSwgcGF0aC5kZW50cnksIG1vZGUsIG5kKTsKLQkJbXV0ZXhfdW5sb2NrKCZkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOwotCQlkcHV0KG5kLT5kZW50cnkpOwotCQluZC0+ZGVudHJ5ID0gcGF0aC5kZW50cnk7CisJCWVycm9yID0gb3Blbl9uYW1laV9jcmVhdGUobmQsICZwYXRoLCBmbGFnLCBtb2RlKTsKIAkJaWYgKGVycm9yKQogCQkJZ290byBleGl0OwotCQkvKiBEb24ndCBjaGVjayBmb3Igd3JpdGUgcGVybWlzc2lvbiwgZG9uJ3QgdHJ1bmNhdGUgKi8KLQkJYWNjX21vZGUgPSAwOwotCQlmbGFnICY9IH5PX1RSVU5DOwotCQlnb3RvIG9rOworCQlyZXR1cm4gMDsKIAl9CiAKIAkvKgpAQCAtMTkwNiwzMCArMTk0NCwzMiBAQAogewogCWludCBlcnJvciA9IDA7CiAJY2hhciAqIHRtcDsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAogCXRtcCA9IGdldG5hbWUocGF0aG5hbWUpOwogCWVycm9yID0gUFRSX0VSUih0bXApOwotCWlmICghSVNfRVJSKHRtcCkpIHsKLQkJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCWlmIChJU19FUlIodG1wKSkKKwkJZ290byBvdXRfZXJyOwogCi0JCWVycm9yID0gZG9fcGF0aF9sb29rdXAoZGZkLCB0bXAsIExPT0tVUF9QQVJFTlQsICZuZCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCQlkZW50cnkgPSBsb29rdXBfY3JlYXRlKCZuZCwgMSk7Ci0JCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCQlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCQlpZiAoIUlTX1BPU0lYQUNMKG5kLmRlbnRyeS0+ZF9pbm9kZSkpCi0JCQkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOwotCQkJZXJyb3IgPSB2ZnNfbWtkaXIobmQuZGVudHJ5LT5kX2lub2RlLCBkZW50cnksIG1vZGUpOwotCQkJZHB1dChkZW50cnkpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQkJcGF0aF9yZWxlYXNlKCZuZCk7CisJZXJyb3IgPSBkb19wYXRoX2xvb2t1cChkZmQsIHRtcCwgTE9PS1VQX1BBUkVOVCwgJm5kKTsKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWRlbnRyeSA9IGxvb2t1cF9jcmVhdGUoJm5kLCAxKTsKKwllcnJvciA9IFBUUl9FUlIoZGVudHJ5KTsKKwlpZiAoSVNfRVJSKGRlbnRyeSkpCisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmICghSVNfUE9TSVhBQ0wobmQuZGVudHJ5LT5kX2lub2RlKSkKKwkJbW9kZSAmPSB+Y3VycmVudC0+ZnMtPnVtYXNrOworCWVycm9yID0gdmZzX21rZGlyKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBtb2RlKTsKKwlkcHV0KGRlbnRyeSk7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKLQkJcHV0bmFtZSh0bXApOwotCX0KLQorCXB1dG5hbWUodG1wKTsKK291dF9lcnI6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0yMDI4LDEwICsyMDY4LDExIEBACiAJbXV0ZXhfbG9ja19uZXN0ZWQoJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9QQVJFTlQpOwogCWRlbnRyeSA9IGxvb2t1cF9oYXNoKCZuZCk7CiAJZXJyb3IgPSBQVFJfRVJSKGRlbnRyeSk7Ci0JaWYgKCFJU19FUlIoZGVudHJ5KSkgewotCQllcnJvciA9IHZmc19ybWRpcihuZC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSk7Ci0JCWRwdXQoZGVudHJ5KTsKLQl9CisJaWYgKElTX0VSUihkZW50cnkpKQorCQlnb3RvIGV4aXQyOworCWVycm9yID0gdmZzX3JtZGlyKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CitleGl0MjoKIAltdXRleF91bmxvY2soJm5kLmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CiBleGl0MToKIAlwYXRoX3JlbGVhc2UoJm5kKTsKQEAgLTIxNzEsMzAgKzIyMTIsMzMgQEAKIAlpbnQgZXJyb3IgPSAwOwogCWNoYXIgKiBmcm9tOwogCWNoYXIgKiB0bzsKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAogCWZyb20gPSBnZXRuYW1lKG9sZG5hbWUpOwogCWlmKElTX0VSUihmcm9tKSkKIAkJcmV0dXJuIFBUUl9FUlIoZnJvbSk7CiAJdG8gPSBnZXRuYW1lKG5ld25hbWUpOwogCWVycm9yID0gUFRSX0VSUih0byk7Ci0JaWYgKCFJU19FUlIodG8pKSB7Ci0JCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKLQkJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlpZiAoSVNfRVJSKHRvKSkKKwkJZ290byBvdXRfcHV0bmFtZTsKIAotCQllcnJvciA9IGRvX3BhdGhfbG9va3VwKG5ld2RmZCwgdG8sIExPT0tVUF9QQVJFTlQsICZuZCk7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gb3V0OwotCQlkZW50cnkgPSBsb29rdXBfY3JlYXRlKCZuZCwgMCk7Ci0JCWVycm9yID0gUFRSX0VSUihkZW50cnkpOwotCQlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCQllcnJvciA9IHZmc19zeW1saW5rKG5kLmRlbnRyeS0+ZF9pbm9kZSwgZGVudHJ5LCBmcm9tLCBTX0lBTExVR08pOwotCQkJZHB1dChkZW50cnkpOwotCQl9Ci0JCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKLQkJcGF0aF9yZWxlYXNlKCZuZCk7CisJZXJyb3IgPSBkb19wYXRoX2xvb2t1cChuZXdkZmQsIHRvLCBMT09LVVBfUEFSRU5ULCAmbmQpOworCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJZGVudHJ5ID0gbG9va3VwX2NyZWF0ZSgmbmQsIDApOworCWVycm9yID0gUFRSX0VSUihkZW50cnkpOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJZ290byBvdXRfdW5sb2NrOworCisJZXJyb3IgPSB2ZnNfc3ltbGluayhuZC5kZW50cnktPmRfaW5vZGUsIGRlbnRyeSwgZnJvbSwgU19JQUxMVUdPKTsKKwlkcHV0KGRlbnRyeSk7CitvdXRfdW5sb2NrOgorCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKwlwYXRoX3JlbGVhc2UoJm5kKTsKIG91dDoKLQkJcHV0bmFtZSh0byk7Ci0JfQorCXB1dG5hbWUodG8pOworb3V0X3B1dG5hbWU6CiAJcHV0bmFtZShmcm9tKTsKIAlyZXR1cm4gZXJyb3I7CiB9CkBAIC0yMjgwLDEwICsyMzI0LDExIEBACiAJCWdvdG8gb3V0X3JlbGVhc2U7CiAJbmV3X2RlbnRyeSA9IGxvb2t1cF9jcmVhdGUoJm5kLCAwKTsKIAllcnJvciA9IFBUUl9FUlIobmV3X2RlbnRyeSk7Ci0JaWYgKCFJU19FUlIobmV3X2RlbnRyeSkpIHsKLQkJZXJyb3IgPSB2ZnNfbGluayhvbGRfbmQuZGVudHJ5LCBuZC5kZW50cnktPmRfaW5vZGUsIG5ld19kZW50cnkpOwotCQlkcHV0KG5ld19kZW50cnkpOwotCX0KKwlpZiAoSVNfRVJSKG5ld19kZW50cnkpKQorCQlnb3RvIG91dF91bmxvY2s7CisJZXJyb3IgPSB2ZnNfbGluayhvbGRfbmQuZGVudHJ5LCBuZC5kZW50cnktPmRfaW5vZGUsIG5ld19kZW50cnkpOworCWRwdXQobmV3X2RlbnRyeSk7CitvdXRfdW5sb2NrOgogCW11dGV4X3VubG9jaygmbmQuZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKIG91dF9yZWxlYXNlOgogCXBhdGhfcmVsZWFzZSgmbmQpOwpkaWZmIC0tZ2l0IGEvZnMvbmFtZXNwYWNlLmMgYi9mcy9uYW1lc3BhY2UuYwppbmRleCAzNmQxODA4Li42NmQ5MjFlIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYworKysgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTMsNiArMTMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CiAjaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgpAQCAtMjMsMTIgKzI0LDExIEBACiAjaW5jbHVkZSA8bGludXgvbmFtZWkuaD4KICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CisjaW5jbHVkZSA8bGludXgvcmFtZnMuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KICNpbmNsdWRlICJwbm9kZS5oIgogCi1leHRlcm4gaW50IF9faW5pdCBpbml0X3Jvb3Rmcyh2b2lkKTsKLQogLyogc3BpbmxvY2sgZm9yIHZmc21vdW50IHJlbGF0ZWQgb3BlcmF0aW9ucywgaW5wbGFjZSBvZiBkY2FjaGVfbG9jayAqLwogX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXAgREVGSU5FX1NQSU5MT0NLKHZmc21vdW50X2xvY2spOwogCkBAIC0xODEzLDYgKzE4MTMsNyBAQAogCXN0cnVjdCBsaXN0X2hlYWQgKmQ7CiAJdW5zaWduZWQgaW50IG5yX2hhc2g7CiAJaW50IGk7CisJaW50IGVycjsKIAogCWluaXRfcndzZW0oJm5hbWVzcGFjZV9zZW0pOwogCkBAIC0xODUzLDggKzE4NTQsMTQgQEAKIAkJZCsrOwogCQlpLS07CiAJfSB3aGlsZSAoaSk7Ci0Jc3lzZnNfaW5pdCgpOwotCXN1YnN5c3RlbV9yZWdpc3RlcigmZnNfc3Vic3lzKTsKKwllcnIgPSBzeXNmc19pbml0KCk7CisJaWYgKGVycikKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHN5c2ZzX2luaXQgZXJyb3I6ICVkXG4iLAorCQkJX19GVU5DVElPTl9fLCBlcnIpOworCWVyciA9IHN1YnN5c3RlbV9yZWdpc3RlcigmZnNfc3Vic3lzKTsKKwlpZiAoZXJyKQorCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogc3Vic3lzdGVtX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwKKwkJCV9fRlVOQ1RJT05fXywgZXJyKTsKIAlpbml0X3Jvb3RmcygpOwogCWluaXRfbW91bnRfdHJlZSgpOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvZGlyLmMgYi9mcy9uY3Bmcy9kaXIuYwppbmRleCBiNGVlODkyLi40NThiM2I3IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9kaXIuYworKysgYi9mcy9uY3Bmcy9kaXIuYwpAQCAtNTMsNiArNTMsOSBAQAogCS5yZWFkCQk9IGdlbmVyaWNfcmVhZF9kaXIsCiAJLnJlYWRkaXIJPSBuY3BfcmVhZGRpciwKIAkuaW9jdGwJCT0gbmNwX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gbmNwX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogfTsKIAogc3RydWN0IGlub2RlX29wZXJhdGlvbnMgbmNwX2Rpcl9pbm9kZV9vcGVyYXRpb25zID0KZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2ZpbGUuYyBiL2ZzL25jcGZzL2ZpbGUuYwppbmRleCBlNmI3YzY3Li5kZjM3NTI0IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9maWxlLmMKKysrIGIvZnMvbmNwZnMvZmlsZS5jCkBAIC0yODksNiArMjg5LDkgQEAKIAkucmVhZAkJPSBuY3BfZmlsZV9yZWFkLAogCS53cml0ZQkJPSBuY3BfZmlsZV93cml0ZSwKIAkuaW9jdGwJCT0gbmNwX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsCT0gbmNwX2NvbXBhdF9pb2N0bCwKKyNlbmRpZgogCS5tbWFwCQk9IG5jcF9tbWFwLAogCS5yZWxlYXNlCT0gbmNwX3JlbGVhc2UsCiAJLmZzeW5jCQk9IG5jcF9mc3luYywKZGlmZiAtLWdpdCBhL2ZzL25jcGZzL2lub2RlLmMgYi9mcy9uY3Bmcy9pbm9kZS5jCmluZGV4IDFkZGY3N2IuLjQyZTNiZWYgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL2lub2RlLmMKKysrIGIvZnMvbmNwZnMvaW5vZGUuYwpAQCAtODEsOCArODEsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG5jcF9pbm9kZV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPICJuY3BfaW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmNwX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQgbmNwX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciogZGF0YSkKQEAgLTIyNCw3ICsyMjMsNiBAQAogCWlub2RlLT5pX25saW5rID0gMTsKIAlpbm9kZS0+aV91aWQgPSBzZXJ2ZXItPm0udWlkOwogCWlub2RlLT5pX2dpZCA9IHNlcnZlci0+bS5naWQ7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IE5DUF9CTE9DS19TSVpFOwogCiAJbmNwX3VwZGF0ZV9kYXRlcyhpbm9kZSwgJm53aW5mby0+aSk7CiAJbmNwX3VwZGF0ZV9pbm9kZShpbm9kZSwgbndpbmZvKTsKQEAgLTQxMSwxMSArNDA5LDEwIEBACiAjZW5kaWYKIAlzdHJ1Y3QgbmNwX2VudHJ5X2luZm8gZmluZm87CiAKLQlzZXJ2ZXIgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbmNwX3NlcnZlciksIEdGUF9LRVJORUwpOworCXNlcnZlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuY3Bfc2VydmVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzZXJ2ZXIpCiAJCXJldHVybiAtRU5PTUVNOwogCXNiLT5zX2ZzX2luZm8gPSBzZXJ2ZXI7Ci0JbWVtc2V0KHNlcnZlciwgMCwgc2l6ZW9mKHN0cnVjdCBuY3Bfc2VydmVyKSk7CiAKIAllcnJvciA9IC1FRkFVTFQ7CiAJaWYgKHJhd19kYXRhID09IE5VTEwpCmRpZmYgLS1naXQgYS9mcy9uY3Bmcy9pb2N0bC5jIGIvZnMvbmNwZnMvaW9jdGwuYwppbmRleCA0MjAzOWZlLi5hODlhYzg0IDEwMDY0NAotLS0gYS9mcy9uY3Bmcy9pb2N0bC5jCisrKyBiL2ZzL25jcGZzL2lvY3RsLmMKQEAgLTcsMTkgKzcsMjEgQEAKICAqCiAgKi8KIAotCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisjaW5jbHVkZSA8bGludXgvY29tcGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaHVpZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8bGludXgvbmNwX2ZzLmg+CiAKKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorCiAjaW5jbHVkZSAibmNwbGliX2tlcm5lbC5oIgogCiAvKiBtYXhpbXVtIGxpbWl0IGZvciBuY3Bfb2JqZWN0bmFtZV9pb2N0bCAqLwpAQCAtODksNiArOTEsODIgQEAKIAlyZXR1cm4gMDsKIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK3N0cnVjdCBjb21wYXRfbmNwX29iamVjdG5hbWVfaW9jdGwKK3sKKwlzMzIJCWF1dGhfdHlwZTsKKwl1MzIJCW9iamVjdF9uYW1lX2xlbjsKKwljb21wYXRfY2FkZHJfdAlvYmplY3RfbmFtZTsJLyogYW4gdXNlcnNwYWNlIGRhdGEsIGluIG1vc3QgY2FzZXMgdXNlciBuYW1lICovCit9OworCitzdHJ1Y3QgY29tcGF0X25jcF9mc19pbmZvX3YyIHsKKwlzMzIgdmVyc2lvbjsKKwl1MzIgbW91bnRlZF91aWQ7CisJdTMyIGNvbm5lY3Rpb247CisJdTMyIGJ1ZmZlcl9zaXplOworCisJdTMyIHZvbHVtZV9udW1iZXI7CisJdTMyIGRpcmVjdG9yeV9pZDsKKworCXUzMiBkdW1teTE7CisJdTMyIGR1bW15MjsKKwl1MzIgZHVtbXkzOworfTsKKworc3RydWN0IGNvbXBhdF9uY3BfaW9jdGxfcmVxdWVzdCB7CisJdTMyIGZ1bmN0aW9uOworCXUzMiBzaXplOworCWNvbXBhdF9jYWRkcl90IGRhdGE7Cit9OworCitzdHJ1Y3QgY29tcGF0X25jcF9wcml2YXRlZGF0YV9pb2N0bAoreworCXUzMgkJbGVuOworCWNvbXBhdF9jYWRkcl90CWRhdGE7CQkvKiB+MTAwMCBmb3IgTkRTICovCit9OworCisjZGVmaW5lIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjJfMzIJX0lPV1IoJ24nLCA0LCBzdHJ1Y3QgY29tcGF0X25jcF9mc19pbmZvX3YyKQorI2RlZmluZSBOQ1BfSU9DX05DUFJFUVVFU1RfMzIJCV9JT1IoJ24nLCAxLCBzdHJ1Y3QgY29tcGF0X25jcF9pb2N0bF9yZXF1ZXN0KQorI2RlZmluZSBOQ1BfSU9DX0dFVE9CSkVDVE5BTUVfMzIJX0lPV1IoJ24nLCA5LCBzdHJ1Y3QgY29tcGF0X25jcF9vYmplY3RuYW1lX2lvY3RsKQorI2RlZmluZSBOQ1BfSU9DX1NFVE9CSkVDVE5BTUVfMzIJX0lPUignbicsIDksIHN0cnVjdCBjb21wYXRfbmNwX29iamVjdG5hbWVfaW9jdGwpCisjZGVmaW5lIE5DUF9JT0NfR0VUUFJJVkFURURBVEFfMzIJX0lPV1IoJ24nLCAxMCwgc3RydWN0IGNvbXBhdF9uY3BfcHJpdmF0ZWRhdGFfaW9jdGwpCisjZGVmaW5lIE5DUF9JT0NfU0VUUFJJVkFURURBVEFfMzIJX0lPUignbicsIDEwLCBzdHJ1Y3QgY29tcGF0X25jcF9wcml2YXRlZGF0YV9pb2N0bCkKKworc3RhdGljIGludAorbmNwX2dldF9jb21wYXRfZnNfaW5mb192MihzdHJ1Y3QgbmNwX3NlcnZlciAqIHNlcnZlciwgc3RydWN0IGZpbGUgKmZpbGUsCisJCSAgIHN0cnVjdCBjb21wYXRfbmNwX2ZzX2luZm9fdjIgX191c2VyICogYXJnKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlzdHJ1Y3QgY29tcGF0X25jcF9mc19pbmZvX3YyIGluZm8yOworCisJaWYgKChmaWxlX3Blcm1pc3Npb24oZmlsZSwgTUFZX1dSSVRFKSAhPSAwKQorCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpIHsKKwkJcmV0dXJuIC1FQUNDRVM7CisJfQorCWlmIChjb3B5X2Zyb21fdXNlcigmaW5mbzIsIGFyZywgc2l6ZW9mKGluZm8yKSkpCisJCXJldHVybiAtRUZBVUxUOworCisJaWYgKGluZm8yLnZlcnNpb24gIT0gTkNQX0dFVF9GU19JTkZPX1ZFUlNJT05fVjIpIHsKKwkJRFBSSU5USygiaW5mby52ZXJzaW9uIGludmFsaWQ6ICVkXG4iLCBpbmZvMi52ZXJzaW9uKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWluZm8yLm1vdW50ZWRfdWlkICAgPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQ7CisJaW5mbzIuY29ubmVjdGlvbiAgICA9IHNlcnZlci0+Y29ubmVjdGlvbjsKKwlpbmZvMi5idWZmZXJfc2l6ZSAgID0gc2VydmVyLT5idWZmZXJfc2l6ZTsKKwlpbmZvMi52b2x1bWVfbnVtYmVyID0gTkNQX0ZJTkZPKGlub2RlKS0+dm9sTnVtYmVyOworCWluZm8yLmRpcmVjdG9yeV9pZCAgPSBOQ1BfRklORk8oaW5vZGUpLT5Eb3NEaXJOdW07CisJaW5mbzIuZHVtbXkxID0gaW5mbzIuZHVtbXkyID0gaW5mbzIuZHVtbXkzID0gMDsKKworCWlmIChjb3B5X3RvX3VzZXIoYXJnLCAmaW5mbzIsIHNpemVvZihpbmZvMikpKQorCQlyZXR1cm4gLUVGQVVMVDsKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCisjZGVmaW5lIE5DUF9JT0NfR0VUTU9VTlRVSUQxNgkJX0lPVygnbicsIDIsIHUxNikKKyNkZWZpbmUgTkNQX0lPQ19HRVRNT1VOVFVJRDMyCQlfSU9XKCduJywgMiwgdTMyKQorI2RlZmluZSBOQ1BfSU9DX0dFVE1PVU5UVUlENjQJCV9JT1coJ24nLCAyLCB1NjQpCisKICNpZmRlZiBDT05GSUdfTkNQRlNfTkxTCiAvKiBIZXJlIHdlIGFyZSBzZWxlY3QgdGhlIGlvY2hhcnNldCBhbmQgdGhlIGNvZGVwYWdlIGZvciBOTFMuCiAgKiBUaGFua3MgUGV0ciBWYW5kcm92ZWMgZm9yIGlkZWEgYW5kIG1hbnkgaGludHMuCkBAIC0xOTIsMTIgKzI3MCwyNCBAQAogCXZvaWQgX191c2VyICphcmdwID0gKHZvaWQgX191c2VyICopYXJnOwogCiAJc3dpdGNoIChjbWQpIHsKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBOQ1BfSU9DX05DUFJFUVVFU1RfMzI6CisjZW5kaWYKIAljYXNlIE5DUF9JT0NfTkNQUkVRVUVTVDoKLQogCQlpZiAoKGZpbGVfcGVybWlzc2lvbihmaWxwLCBNQVlfV1JJVEUpICE9IDApCiAJCSAgICAmJiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkpIHsKIAkJCXJldHVybiAtRUFDQ0VTOwogCQl9CisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQlpZiAoY21kID09IE5DUF9JT0NfTkNQUkVRVUVTVF8zMikgeworCQkJc3RydWN0IGNvbXBhdF9uY3BfaW9jdGxfcmVxdWVzdCByZXF1ZXN0MzI7CisJCQlpZiAoY29weV9mcm9tX3VzZXIoJnJlcXVlc3QzMiwgYXJncCwgc2l6ZW9mKHJlcXVlc3QzMikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJcmVxdWVzdC5mdW5jdGlvbiA9IHJlcXVlc3QzMi5mdW5jdGlvbjsKKwkJCXJlcXVlc3Quc2l6ZSA9IHJlcXVlc3QzMi5zaXplOworCQkJcmVxdWVzdC5kYXRhID0gY29tcGF0X3B0cihyZXF1ZXN0MzIuZGF0YSk7CisJCX0gZWxzZQorI2VuZGlmCiAJCWlmIChjb3B5X2Zyb21fdXNlcigmcmVxdWVzdCwgYXJncCwgc2l6ZW9mKHJlcXVlc3QpKSkKIAkJCXJldHVybiAtRUZBVUxUOwogCkBAIC0yNTQsMTkgKzM0NCwzNSBAQAogCWNhc2UgTkNQX0lPQ19HRVRfRlNfSU5GT19WMjoKIAkJcmV0dXJuIG5jcF9nZXRfZnNfaW5mb192MihzZXJ2ZXIsIGZpbHAsIGFyZ3ApOwogCi0JY2FzZSBOQ1BfSU9DX0dFVE1PVU5UVUlEMjoKLQkJewotCQkJdW5zaWduZWQgbG9uZyB0bXAgPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQ7Ci0KLQkJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQotCQkJICAgICYmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSkKLQkJCXsKLQkJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJCX0KLQkJCWlmIChwdXRfdXNlcih0bXAsICh1bnNpZ25lZCBsb25nIF9fdXNlciAqKWFyZ3ApKSAKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOworI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIE5DUF9JT0NfR0VUX0ZTX0lORk9fVjJfMzI6CisJCXJldHVybiBuY3BfZ2V0X2NvbXBhdF9mc19pbmZvX3YyKHNlcnZlciwgZmlscCwgYXJncCk7CisjZW5kaWYKKwkvKiB3ZSBoYXZlIHRvbyBtYW55IGNvbWJpbmF0aW9ucyBvZiBDT05GSUdfQ09NUEFULAorCSAqIENPTkZJR182NEJJVCBhbmQgQ09ORklHX1VJRDE2LCBzbyBqdXN0IGhhbmRsZQorCSAqIGFueSBvZiB0aGUgcG9zc2libGUgaW9jdGxzICovCisJY2FzZSBOQ1BfSU9DX0dFVE1PVU5UVUlEMTY6CisJY2FzZSBOQ1BfSU9DX0dFVE1PVU5UVUlEMzI6CisJY2FzZSBOQ1BfSU9DX0dFVE1PVU5UVUlENjQ6CisJCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQorCQkJJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKSB7CisJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJfQorCQlpZiAoY21kID09IE5DUF9JT0NfR0VUTU9VTlRVSUQxNikgeworCQkJdTE2IHVpZDsKKwkJCVNFVF9VSUQodWlkLCBzZXJ2ZXItPm0ubW91bnRlZF91aWQpOworCQkJaWYgKHB1dF91c2VyKHVpZCwgKHUxNiBfX3VzZXIgKilhcmdwKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlIGlmIChjbWQgPT0gTkNQX0lPQ19HRVRNT1VOVFVJRDMyKSB7CisJCQlpZiAocHV0X3VzZXIoc2VydmVyLT5tLm1vdW50ZWRfdWlkLAorCQkJCQkJKHUzMiBfX3VzZXIgKilhcmdwKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJfSBlbHNlIHsKKwkJCWlmIChwdXRfdXNlcihzZXJ2ZXItPm0ubW91bnRlZF91aWQsCisJCQkJCQkodTY0IF9fdXNlciAqKWFyZ3ApKQorCQkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCXJldHVybiAwOwogCiAJY2FzZSBOQ1BfSU9DX0dFVFJPT1Q6CiAJCXsKQEAgLTQ3Niw2ICs1ODIsMzIgQEAKIAkJfQogI2VuZGlmCS8qIENPTkZJR19OQ1BGU19JT0NUTF9MT0NLSU5HICovCiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBOQ1BfSU9DX0dFVE9CSkVDVE5BTUVfMzI6CisJCWlmIChjdXJyZW50LT51aWQgIT0gc2VydmVyLT5tLm1vdW50ZWRfdWlkKSB7CisJCQlyZXR1cm4gLUVBQ0NFUzsKKwkJfQorCQl7CisJCQlzdHJ1Y3QgY29tcGF0X25jcF9vYmplY3RuYW1lX2lvY3RsIHVzZXI7CisJCQlzaXplX3Qgb3V0bDsKKworCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyLCBhcmdwLCBzaXplb2YodXNlcikpKQorCQkJCXJldHVybiAtRUZBVUxUOworCQkJdXNlci5hdXRoX3R5cGUgPSBzZXJ2ZXItPmF1dGguYXV0aF90eXBlOworCQkJb3V0bCA9IHVzZXIub2JqZWN0X25hbWVfbGVuOworCQkJdXNlci5vYmplY3RfbmFtZV9sZW4gPSBzZXJ2ZXItPmF1dGgub2JqZWN0X25hbWVfbGVuOworCQkJaWYgKG91dGwgPiB1c2VyLm9iamVjdF9uYW1lX2xlbikKKwkJCQlvdXRsID0gdXNlci5vYmplY3RfbmFtZV9sZW47CisJCQlpZiAob3V0bCkgeworCQkJCWlmIChjb3B5X3RvX3VzZXIoY29tcGF0X3B0cih1c2VyLm9iamVjdF9uYW1lKSwKKwkJCQkJCSBzZXJ2ZXItPmF1dGgub2JqZWN0X25hbWUsCisJCQkJCQkgb3V0bCkpIHJldHVybiAtRUZBVUxUOworCQkJfQorCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdXNlciwgc2l6ZW9mKHVzZXIpKSkKKwkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCXJldHVybiAwOworCQl9CisjZW5kaWYKIAljYXNlIE5DUF9JT0NfR0VUT0JKRUNUTkFNRToKIAkJaWYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpIHsKIAkJCXJldHVybiAtRUFDQ0VTOwpAQCAtNTAwLDYgKzYzMiw5IEBACiAJCQkJcmV0dXJuIC1FRkFVTFQ7CiAJCQlyZXR1cm4gMDsKIAkJfQorI2lmZGVmIENPTkZJR19DT01QQVQKKwljYXNlIE5DUF9JT0NfU0VUT0JKRUNUTkFNRV8zMjoKKyNlbmRpZgogCWNhc2UgTkNQX0lPQ19TRVRPQkpFQ1ROQU1FOgogCQlpZiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkgewogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC01MTIsOCArNjQ3LDE5IEBACiAJCQl2b2lkKiBvbGRwcml2YXRlOwogCQkJc2l6ZV90IG9sZHByaXZhdGVsZW47CiAKKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCQlpZiAoY21kID09IE5DUF9JT0NfU0VUT0JKRUNUTkFNRV8zMikgeworCQkJCXN0cnVjdCBjb21wYXRfbmNwX29iamVjdG5hbWVfaW9jdGwgdXNlcjMyOworCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcjMyLCBhcmdwLCBzaXplb2YodXNlcjMyKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXVzZXIuYXV0aF90eXBlID0gdXNlcjMyLmF1dGhfdHlwZTsKKwkJCQl1c2VyLm9iamVjdF9uYW1lX2xlbiA9IHVzZXIzMi5vYmplY3RfbmFtZV9sZW47CisJCQkJdXNlci5vYmplY3RfbmFtZSA9IGNvbXBhdF9wdHIodXNlcjMyLm9iamVjdF9uYW1lKTsKKwkJCX0gZWxzZQorI2VuZGlmCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXIsIGFyZ3AsIHNpemVvZih1c2VyKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJCWlmICh1c2VyLm9iamVjdF9uYW1lX2xlbiA+IE5DUF9PQkpFQ1RfTkFNRV9NQVhfTEVOKQogCQkJCXJldHVybiAtRU5PTUVNOwogCQkJaWYgKHVzZXIub2JqZWN0X25hbWVfbGVuKSB7CkBAIC01NDQsNiArNjkwLDkgQEAKIAkJCWtmcmVlKG9sZG5hbWUpOwogCQkJcmV0dXJuIDA7CiAJCX0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBOQ1BfSU9DX0dFVFBSSVZBVEVEQVRBXzMyOgorI2VuZGlmCiAJY2FzZSBOQ1BfSU9DX0dFVFBSSVZBVEVEQVRBOgogCQlpZiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkgewogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC01NTIsOCArNzAxLDE4IEBACiAJCQlzdHJ1Y3QgbmNwX3ByaXZhdGVkYXRhX2lvY3RsIHVzZXI7CiAJCQlzaXplX3Qgb3V0bDsKIAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkJCWlmIChjbWQgPT0gTkNQX0lPQ19HRVRQUklWQVRFREFUQV8zMikgeworCQkJCXN0cnVjdCBjb21wYXRfbmNwX3ByaXZhdGVkYXRhX2lvY3RsIHVzZXIzMjsKKwkJCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXIzMiwgYXJncCwgc2l6ZW9mKHVzZXIzMikpKQorCQkJCQlyZXR1cm4gLUVGQVVMVDsKKwkJCQl1c2VyLmxlbiA9IHVzZXIzMi5sZW47CisJCQkJdXNlci5kYXRhID0gY29tcGF0X3B0cih1c2VyMzIuZGF0YSk7CisJCQl9IGVsc2UKKyNlbmRpZgogCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ1c2VyLCBhcmdwLCBzaXplb2YodXNlcikpKQogCQkJCXJldHVybiAtRUZBVUxUOworCiAJCQlvdXRsID0gdXNlci5sZW47CiAJCQl1c2VyLmxlbiA9IHNlcnZlci0+cHJpdi5sZW47CiAJCQlpZiAob3V0bCA+IHVzZXIubGVuKSBvdXRsID0gdXNlci5sZW47CkBAIC01NjIsMTAgKzcyMSwyMyBAQAogCQkJCQkJIHNlcnZlci0+cHJpdi5kYXRhLAogCQkJCQkJIG91dGwpKSByZXR1cm4gLUVGQVVMVDsKIAkJCX0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJCQlpZiAoY21kID09IE5DUF9JT0NfR0VUUFJJVkFURURBVEFfMzIpIHsKKwkJCQlzdHJ1Y3QgY29tcGF0X25jcF9wcml2YXRlZGF0YV9pb2N0bCB1c2VyMzI7CisJCQkJdXNlcjMyLmxlbiA9IHVzZXIubGVuOworCQkJCXVzZXIzMi5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHVzZXIuZGF0YTsKKwkJCQlpZiAoY29weV90b191c2VyKCZ1c2VyMzIsIGFyZ3AsIHNpemVvZih1c2VyMzIpKSkKKwkJCQkJcmV0dXJuIC1FRkFVTFQ7CisJCQl9IGVsc2UKKyNlbmRpZgogCQkJaWYgKGNvcHlfdG9fdXNlcihhcmdwLCAmdXNlciwgc2l6ZW9mKHVzZXIpKSkKIAkJCQlyZXR1cm4gLUVGQVVMVDsKKwogCQkJcmV0dXJuIDA7CiAJCX0KKyNpZmRlZiBDT05GSUdfQ09NUEFUCisJY2FzZSBOQ1BfSU9DX1NFVFBSSVZBVEVEQVRBXzMyOgorI2VuZGlmCiAJY2FzZSBOQ1BfSU9DX1NFVFBSSVZBVEVEQVRBOgogCQlpZiAoY3VycmVudC0+dWlkICE9IHNlcnZlci0+bS5tb3VudGVkX3VpZCkgewogCQkJcmV0dXJuIC1FQUNDRVM7CkBAIC01NzYsOCArNzQ4LDE4IEBACiAJCQl2b2lkKiBvbGQ7CiAJCQlzaXplX3Qgb2xkbGVuOwogCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCQkJaWYgKGNtZCA9PSBOQ1BfSU9DX1NFVFBSSVZBVEVEQVRBXzMyKSB7CisJCQkJc3RydWN0IGNvbXBhdF9uY3BfcHJpdmF0ZWRhdGFfaW9jdGwgdXNlcjMyOworCQkJCWlmIChjb3B5X2Zyb21fdXNlcigmdXNlcjMyLCBhcmdwLCBzaXplb2YodXNlcjMyKSkpCisJCQkJCXJldHVybiAtRUZBVUxUOworCQkJCXVzZXIubGVuID0gdXNlcjMyLmxlbjsKKwkJCQl1c2VyLmRhdGEgPSBjb21wYXRfcHRyKHVzZXIzMi5kYXRhKTsKKwkJCX0gZWxzZQorI2VuZGlmCiAJCQlpZiAoY29weV9mcm9tX3VzZXIoJnVzZXIsIGFyZ3AsIHNpemVvZih1c2VyKSkpCiAJCQkJcmV0dXJuIC1FRkFVTFQ7CisKIAkJCWlmICh1c2VyLmxlbiA+IE5DUF9QUklWQVRFX0RBVEFfTUFYX0xFTikKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCWlmICh1c2VyLmxlbikgewpAQCAtNjM2LDIwICs4MTgsMTkgQEAKIAkJfQogCiAJfQotLyogI2lmZGVmIENPTkZJR19VSUQxNiAqLwotCS8qIE5DUF9JT0NfR0VUTU9VTlRVSUQgbWF5IGJlIHNhbWUgYXMgTkNQX0lPQ19HRVRNT1VOVFVJRDIsCi0gICAgICAgICAgIHNvIHdlIGhhdmUgdGhpcyBvdXQgb2Ygc3dpdGNoICovCi0JaWYgKGNtZCA9PSBOQ1BfSU9DX0dFVE1PVU5UVUlEKSB7Ci0JCV9fa2VybmVsX3VpZF90IHVpZCA9IDA7Ci0JCWlmICgoZmlsZV9wZXJtaXNzaW9uKGZpbHAsIE1BWV9SRUFEKSAhPSAwKQotCQkgICAgJiYgKGN1cnJlbnQtPnVpZCAhPSBzZXJ2ZXItPm0ubW91bnRlZF91aWQpKSB7Ci0JCQlyZXR1cm4gLUVBQ0NFUzsKLQkJfQotCQlTRVRfVUlEKHVpZCwgc2VydmVyLT5tLm1vdW50ZWRfdWlkKTsKLQkJaWYgKHB1dF91c2VyKHVpZCwgKF9fa2VybmVsX3VpZF90IF9fdXNlciAqKWFyZ3ApKQotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCXJldHVybiAwOwotCX0KLS8qICNlbmRpZiAqLwogCXJldHVybiAtRUlOVkFMOwogfQorCisjaWZkZWYgQ09ORklHX0NPTVBBVAorbG9uZyBuY3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3sKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZS0+Zl9kZW50cnktPmRfaW5vZGU7CisJaW50IHJldDsKKworCWxvY2tfa2VybmVsKCk7CisJYXJnID0gKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKTsKKwlyZXQgPSBuY3BfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgYXJnKTsKKwl1bmxvY2tfa2VybmVsKCk7CisJcmV0dXJuIHJldDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvbmNwZnMvc3ltbGluay5jIGIvZnMvbmNwZnMvc3ltbGluay5jCmluZGV4IGNhOTJjMjQuLmUzZDI2YzEgMTAwNjQ0Ci0tLSBhL2ZzL25jcGZzL3N5bWxpbmsuYworKysgYi9mcy9uY3Bmcy9zeW1saW5rLmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAljaGFyICpidWYgPSBrbWFwKHBhZ2UpOwogCiAJZXJyb3IgPSAtRU5PTUVNOwotCXJhd2xpbms9KGNoYXIgKilrbWFsbG9jKE5DUF9NQVhfU1lNTElOS19TSVpFLCBHRlBfS0VSTkVMKTsKKwlyYXdsaW5rID0ga21hbGxvYyhOQ1BfTUFYX1NZTUxJTktfU0laRSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFyYXdsaW5rKQogCQlnb3RvIGZhaWw7CiAKQEAgLTEyNiw3ICsxMjYsNyBAQAogCS8qIEVQRVJNIGlzIHJldHVybmVkIGJ5IFZGUyBpZiBzeW1saW5rIHByb2NlZHVyZSBkb2VzIG5vdCBleGlzdCAqLwogCQlyZXR1cm4gLUVQRVJNOwogICAKLQlyYXdsaW5rPShjaGFyICopa21hbGxvYyhOQ1BfTUFYX1NZTUxJTktfU0laRSwgR0ZQX0tFUk5FTCk7CisJcmF3bGluayA9IGttYWxsb2MoTkNQX01BWF9TWU1MSU5LX1NJWkUsIEdGUF9LRVJORUwpOwogCWlmICghcmF3bGluaykKIAkJcmV0dXJuIC1FTk9NRU07CiAKZGlmZiAtLWdpdCBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMgYi9mcy9uZnMvZGVsZWdhdGlvbi5jCmluZGV4IDU3MTMzNjcuLjg0MWM5OWEgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9kZWxlZ2F0aW9uLmMKKysrIGIvZnMvbmZzL2RlbGVnYXRpb24uYwpAQCAtMjAsMTEgKzIwLDYgQEAKICNpbmNsdWRlICJkZWxlZ2F0aW9uLmgiCiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAotc3RhdGljIHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqbmZzX2FsbG9jX2RlbGVnYXRpb24odm9pZCkKLXsKLQlyZXR1cm4gKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqKWttYWxsb2Moc2l6ZW9mKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiksIEdGUF9LRVJORUwpOwotfQotCiBzdGF0aWMgdm9pZCBuZnNfZnJlZV9kZWxlZ2F0aW9uKHN0cnVjdCBuZnNfZGVsZWdhdGlvbiAqZGVsZWdhdGlvbikKIHsKIAlpZiAoZGVsZWdhdGlvbi0+Y3JlZCkKQEAgLTEyNCw3ICsxMTksNyBAQAogCWlmICgobmZzaS0+Y2FjaGVfdmFsaWRpdHkgJiAoTkZTX0lOT19SRVZBTF9QQUdFQ0FDSEV8TkZTX0lOT19JTlZBTElEX0FUVFIpKSkKIAkJX19uZnNfcmV2YWxpZGF0ZV9pbm9kZShORlNfU0VSVkVSKGlub2RlKSwgaW5vZGUpOwogCi0JZGVsZWdhdGlvbiA9IG5mc19hbGxvY19kZWxlZ2F0aW9uKCk7CisJZGVsZWdhdGlvbiA9IGttYWxsb2Moc2l6ZW9mKCpkZWxlZ2F0aW9uKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGRlbGVnYXRpb24gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJbWVtY3B5KGRlbGVnYXRpb24tPnN0YXRlaWQuZGF0YSwgcmVzLT5kZWxlZ2F0aW9uLmRhdGEsCmRpZmYgLS1naXQgYS9mcy9uZnMvZGlyLmMgYi9mcy9uZnMvZGlyLmMKaW5kZXggNzQzMmYxYS4uNDgxZjg4OSAxMDA2NDQKLS0tIGEvZnMvbmZzL2Rpci5jCisrKyBiL2ZzL25mcy9kaXIuYwpAQCAtODQzLDcgKzg0Myw3IEBACiAJbmZzX2lub2RlX3JldHVybl9kZWxlZ2F0aW9uKGlub2RlKTsKIAlpZiAoZGVudHJ5LT5kX2ZsYWdzICYgRENBQ0hFX05GU0ZTX1JFTkFNRUQpIHsKIAkJbG9ja19rZXJuZWwoKTsKLQkJaW5vZGUtPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhpbm9kZSk7CiAJCW5mc19jb21wbGV0ZV91bmxpbmsoZGVudHJ5KTsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCX0KQEAgLTEyODYsNyArMTI4Niw3IEBACiAJZXJyb3IgPSBORlNfUFJPVE8oZGlyKS0+cm1kaXIoZGlyLCAmZGVudHJ5LT5kX25hbWUpOwogCS8qIEVuc3VyZSB0aGUgVkZTIGRlbGV0ZXMgdGhpcyBpbm9kZSAqLwogCWlmIChlcnJvciA9PSAwICYmIGRlbnRyeS0+ZF9pbm9kZSAhPSBOVUxMKQotCQlkZW50cnktPmRfaW5vZGUtPmlfbmxpbmsgPSAwOworCQljbGVhcl9ubGluayhkZW50cnktPmRfaW5vZGUpOwogCW5mc19lbmRfZGF0YV91cGRhdGUoZGlyKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKQEAgLTE0MDEsNyArMTQwMSw3IEBACiAJCWVycm9yID0gTkZTX1BST1RPKGRpciktPnJlbW92ZShkaXIsICZkZW50cnktPmRfbmFtZSk7CiAJCS8qIFRoZSBWRlMgbWF5IHdhbnQgdG8gZGVsZXRlIHRoaXMgaW5vZGUgKi8KIAkJaWYgKGVycm9yID09IDApCi0JCQlpbm9kZS0+aV9ubGluay0tOworCQkJZHJvcF9ubGluayhpbm9kZSk7CiAJCW5mc19tYXJrX2Zvcl9yZXZhbGlkYXRlKGlub2RlKTsKIAkJbmZzX2VuZF9kYXRhX3VwZGF0ZShpbm9kZSk7CiAJfSBlbHNlCkBAIC0xNjM5LDcgKzE2MzksNyBAQAogCQkJZ290byBvdXQ7CiAJCX0KIAl9IGVsc2UKLQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCWRyb3BfbmxpbmsobmV3X2lub2RlKTsKIAogZ29fYWhlYWQ6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9kaXJlY3QuYyBiL2ZzL25mcy9kaXJlY3QuYwppbmRleCA3NmNhMWNiLi45ZjdmOGI5IDEwMDY0NAotLS0gYS9mcy9uZnMvZGlyZWN0LmMKKysrIGIvZnMvbmZzL2RpcmVjdC5jCkBAIC03MDcsOCArNzA3LDggQEAKIC8qKgogICogbmZzX2ZpbGVfZGlyZWN0X3JlYWQgLSBmaWxlIGRpcmVjdCByZWFkIG9wZXJhdGlvbiBmb3IgTkZTIGZpbGVzCiAgKiBAaW9jYjogdGFyZ2V0IEkvTyBjb250cm9sIGJsb2NrCi0gKiBAYnVmOiB1c2VyJ3MgYnVmZmVyIGludG8gd2hpY2ggdG8gcmVhZCBkYXRhCi0gKiBAY291bnQ6IG51bWJlciBvZiBieXRlcyB0byByZWFkCisgKiBAaW92OiB2ZWN0b3Igb2YgdXNlciBidWZmZXJzIGludG8gd2hpY2ggdG8gcmVhZCBkYXRhCisgKiBAbnJfc2Vnczogc2l6ZSBvZiBpb3YgdmVjdG9yCiAgKiBAcG9zOiBieXRlIG9mZnNldCBpbiBmaWxlIHdoZXJlIHJlYWRpbmcgc3RhcnRzCiAgKgogICogV2UgdXNlIHRoaXMgZnVuY3Rpb24gZm9yIGRpcmVjdCByZWFkcyBpbnN0ZWFkIG9mIGNhbGxpbmcKQEAgLTcyNSwxNyArNzI1LDI0IEBACiAgKiBjbGllbnQgbXVzdCByZWFkIHRoZSB1cGRhdGVkIGF0aW1lIGZyb20gdGhlIHNlcnZlciBiYWNrIGludG8gaXRzCiAgKiBjYWNoZS4KICAqLwotc3NpemVfdCBuZnNfZmlsZV9kaXJlY3RfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK3NzaXplX3QgbmZzX2ZpbGVfZGlyZWN0X3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3NpemVfdCByZXR2YWwgPSAtRUlOVkFMOwogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKKwkvKiBYWFg6IHRlbXBvcmFyeSAqLworCWNvbnN0IGNoYXIgX191c2VyICpidWYgPSBpb3ZbMF0uaW92X2Jhc2U7CisJc2l6ZV90IGNvdW50ID0gaW92WzBdLmlvdl9sZW47CiAKIAlkcHJpbnRrKCJuZnM6IGRpcmVjdCByZWFkKCVzLyVzLCAlbHVAJUxkKVxuIiwKIAkJZmlsZS0+Zl9kZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwKIAkJZmlsZS0+Zl9kZW50cnktPmRfbmFtZS5uYW1lLAogCQkodW5zaWduZWQgbG9uZykgY291bnQsIChsb25nIGxvbmcpIHBvcyk7CiAKKwlpZiAobnJfc2VncyAhPSAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCWlmIChjb3VudCA8IDApCiAJCWdvdG8gb3V0OwogCXJldHZhbCA9IC1FRkFVTFQ7CkBAIC03NjAsOCArNzY3LDggQEAKIC8qKgogICogbmZzX2ZpbGVfZGlyZWN0X3dyaXRlIC0gZmlsZSBkaXJlY3Qgd3JpdGUgb3BlcmF0aW9uIGZvciBORlMgZmlsZXMKICAqIEBpb2NiOiB0YXJnZXQgSS9PIGNvbnRyb2wgYmxvY2sKLSAqIEBidWY6IHVzZXIncyBidWZmZXIgZnJvbSB3aGljaCB0byB3cml0ZSBkYXRhCi0gKiBAY291bnQ6IG51bWJlciBvZiBieXRlcyB0byB3cml0ZQorICogQGlvdjogdmVjdG9yIG9mIHVzZXIgYnVmZmVycyBmcm9tIHdoaWNoIHRvIHdyaXRlIGRhdGEKKyAqIEBucl9zZWdzOiBzaXplIG9mIGlvdiB2ZWN0b3IKICAqIEBwb3M6IGJ5dGUgb2Zmc2V0IGluIGZpbGUgd2hlcmUgd3JpdGluZyBzdGFydHMKICAqCiAgKiBXZSB1c2UgdGhpcyBmdW5jdGlvbiBmb3IgZGlyZWN0IHdyaXRlcyBpbnN0ZWFkIG9mIGNhbGxpbmcKQEAgLTc4MiwxNyArNzg5LDI0IEBACiAgKiBOb3RlIHRoYXQgT19BUFBFTkQgaXMgbm90IHN1cHBvcnRlZCBmb3IgTkZTIGRpcmVjdCB3cml0ZXMsIGFzIHRoZXJlCiAgKiBpcyBubyBhdG9taWMgT19BUFBFTkQgd3JpdGUgZmFjaWxpdHkgaW4gdGhlIE5GUyBwcm90b2NvbC4KICAqLwotc3NpemVfdCBuZnNfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCBwb3MpCitzc2l6ZV90IG5mc19maWxlX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzc2l6ZV90IHJldHZhbDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CisJLyogWFhYOiB0ZW1wb3JhcnkgKi8KKwljb25zdCBjaGFyIF9fdXNlciAqYnVmID0gaW92WzBdLmlvdl9iYXNlOworCXNpemVfdCBjb3VudCA9IGlvdlswXS5pb3ZfbGVuOwogCiAJZGZwcmludGsoVkZTLCAibmZzOiBkaXJlY3Qgd3JpdGUoJXMvJXMsICVsdUAlTGQpXG4iLAogCQlmaWxlLT5mX2RlbnRyeS0+ZF9wYXJlbnQtPmRfbmFtZS5uYW1lLAogCQlmaWxlLT5mX2RlbnRyeS0+ZF9uYW1lLm5hbWUsCiAJCSh1bnNpZ25lZCBsb25nKSBjb3VudCwgKGxvbmcgbG9uZykgcG9zKTsKIAorCWlmIChucl9zZWdzICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCiAJcmV0dmFsID0gZ2VuZXJpY193cml0ZV9jaGVja3MoZmlsZSwgJnBvcywgJmNvdW50LCAwKTsKIAlpZiAocmV0dmFsKQogCQlnb3RvIG91dDsKQEAgLTg1NSw2ICs4NjksNSBAQAogICovCiB2b2lkIG5mc19kZXN0cm95X2RpcmVjdGNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShuZnNfZGlyZWN0X2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gIm5mc19kaXJlY3RfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzX2RpcmVjdF9jYWNoZXApOwogfQpkaWZmIC0tZ2l0IGEvZnMvbmZzL2ZpbGUuYyBiL2ZzL25mcy9maWxlLmMKaW5kZXggYmU5OTdkNi4uY2M5Mzg2NSAxMDA2NDQKLS0tIGEvZnMvbmZzL2ZpbGUuYworKysgYi9mcy9uZnMvZmlsZS5jCkBAIC00MSw4ICs0MSwxMCBAQAogc3RhdGljIGxvZmZfdCBuZnNfZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOwogc3RhdGljIGludCAgbmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBzdGF0aWMgc3NpemVfdCBuZnNfZmlsZV9zZW5kZmlsZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCByZWFkX2FjdG9yX3QsIHZvaWQgKik7Ci1zdGF0aWMgc3NpemVfdCBuZnNfZmlsZV9yZWFkKHN0cnVjdCBraW9jYiAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCk7Ci1zdGF0aWMgc3NpemVfdCBuZnNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworc3RhdGljIHNzaXplX3QgbmZzX2ZpbGVfcmVhZChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKK3N0YXRpYyBzc2l6ZV90IG5mc19maWxlX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOwogc3RhdGljIGludCAgbmZzX2ZpbGVfZmx1c2goc3RydWN0IGZpbGUgKiwgZmxfb3duZXJfdCBpZCk7CiBzdGF0aWMgaW50ICBuZnNfZnN5bmMoc3RydWN0IGZpbGUgKiwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgZGF0YXN5bmMpOwogc3RhdGljIGludCBuZnNfY2hlY2tfZmxhZ3MoaW50IGZsYWdzKTsKQEAgLTUzLDggKzU1LDggQEAKIAkubGxzZWVrCQk9IG5mc19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLmFpb19yZWFkCQk9IG5mc19maWxlX3JlYWQsCi0JLmFpb193cml0ZQkJPSBuZnNfZmlsZV93cml0ZSwKKwkuYWlvX3JlYWQJPSBuZnNfZmlsZV9yZWFkLAorCS5haW9fd3JpdGUJPSBuZnNfZmlsZV93cml0ZSwKIAkubW1hcAkJPSBuZnNfZmlsZV9tbWFwLAogCS5vcGVuCQk9IG5mc19maWxlX29wZW4sCiAJLmZsdXNoCQk9IG5mc19maWxlX2ZsdXNoLApAQCAtMTk2LDE1ICsxOTgsMTcgQEAKIH0KIAogc3RhdGljIHNzaXplX3QKLW5mc19maWxlX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjaGFyIF9fdXNlciAqIGJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQorbmZzX2ZpbGVfcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqIGRlbnRyeSA9IGlvY2ItPmtpX2ZpbHAtPmZfZGVudHJ5OwogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOwogCXNzaXplX3QgcmVzdWx0OworCXNpemVfdCBjb3VudCA9IGlvdl9sZW5ndGgoaW92LCBucl9zZWdzKTsKIAogI2lmZGVmIENPTkZJR19ORlNfRElSRUNUSU8KIAlpZiAoaW9jYi0+a2lfZmlscC0+Zl9mbGFncyAmIE9fRElSRUNUKQotCQlyZXR1cm4gbmZzX2ZpbGVfZGlyZWN0X3JlYWQoaW9jYiwgYnVmLCBjb3VudCwgcG9zKTsKKwkJcmV0dXJuIG5mc19maWxlX2RpcmVjdF9yZWFkKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKICNlbmRpZgogCiAJZGZwcmludGsoVkZTLCAibmZzOiByZWFkKCVzLyVzLCAlbHVAJWx1KVxuIiwKQEAgLTIxNCw3ICsyMTgsNyBAQAogCXJlc3VsdCA9IG5mc19yZXZhbGlkYXRlX21hcHBpbmcoaW5vZGUsIGlvY2ItPmtpX2ZpbHAtPmZfbWFwcGluZyk7CiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX05PUk1BTFJFQURCWVRFUywgY291bnQpOwogCWlmICghcmVzdWx0KQotCQlyZXN1bHQgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgYnVmLCBjb3VudCwgcG9zKTsKKwkJcmVzdWx0ID0gZ2VuZXJpY19maWxlX2Fpb19yZWFkKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC0zMzYsMjQgKzM0MCwyMiBAQAogI2VuZGlmCiB9OwogCi0vKiAKLSAqIFdyaXRlIHRvIGEgZmlsZSAodGhyb3VnaCB0aGUgcGFnZSBjYWNoZSkuCi0gKi8KLXN0YXRpYyBzc2l6ZV90Ci1uZnNfZmlsZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK3N0YXRpYyBzc2l6ZV90IG5mc19maWxlX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBpb2NiLT5raV9maWxwLT5mX2RlbnRyeTsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzc2l6ZV90IHJlc3VsdDsKKwlzaXplX3QgY291bnQgPSBpb3ZfbGVuZ3RoKGlvdiwgbnJfc2Vncyk7CiAKICNpZmRlZiBDT05GSUdfTkZTX0RJUkVDVElPCiAJaWYgKGlvY2ItPmtpX2ZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkKLQkJcmV0dXJuIG5mc19maWxlX2RpcmVjdF93cml0ZShpb2NiLCBidWYsIGNvdW50LCBwb3MpOworCQlyZXR1cm4gbmZzX2ZpbGVfZGlyZWN0X3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKICNlbmRpZgogCi0JZGZwcmludGsoVkZTLCAibmZzOiB3cml0ZSglcy8lcyglbGQpLCAlbHVAJWx1KVxuIiwKKwlkZnByaW50ayhWRlMsICJuZnM6IHdyaXRlKCVzLyVzKCVsZCksICVsdUAlTGQpXG4iLAogCQlkZW50cnktPmRfcGFyZW50LT5kX25hbWUubmFtZSwgZGVudHJ5LT5kX25hbWUubmFtZSwKLQkJaW5vZGUtPmlfaW5vLCAodW5zaWduZWQgbG9uZykgY291bnQsICh1bnNpZ25lZCBsb25nKSBwb3MpOworCQlpbm9kZS0+aV9pbm8sICh1bnNpZ25lZCBsb25nKSBjb3VudCwgKGxvbmcgbG9uZykgcG9zKTsKIAogCXJlc3VsdCA9IC1FQlVTWTsKIAlpZiAoSVNfU1dBUEZJTEUoaW5vZGUpKQpAQCAtMzcyLDcgKzM3NCw3IEBACiAJCWdvdG8gb3V0OwogCiAJbmZzX2FkZF9zdGF0cyhpbm9kZSwgTkZTSU9TX05PUk1BTFdSSVRURU5CWVRFUywgY291bnQpOwotCXJlc3VsdCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgYnVmLCBjb3VudCwgcG9zKTsKKwlyZXN1bHQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKIG91dDoKIAlyZXR1cm4gcmVzdWx0OwogCmRpZmYgLS1naXQgYS9mcy9uZnMvaW5vZGUuYyBiL2ZzL25mcy9pbm9kZS5jCmluZGV4IGU4YzE0M2QuLmJjOTM3NmMgMTAwNjQ0Ci0tLSBhL2ZzL25mcy9pbm9kZS5jCisrKyBiL2ZzL25mcy9pbm9kZS5jCkBAIC0yNzcsMTAgKzI3Nyw4IEBACiAJCQkgKiByZXBvcnQgdGhlIGJsb2NrcyBpbiA1MTJieXRlIHVuaXRzCiAJCQkgKi8KIAkJCWlub2RlLT5pX2Jsb2NrcyA9IG5mc19jYWxjX2Jsb2NrX3NpemUoZmF0dHItPmR1Lm5mczMudXNlZCk7Ci0JCQlpbm9kZS0+aV9ibGtzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogCQl9IGVsc2UgewogCQkJaW5vZGUtPmlfYmxvY2tzID0gZmF0dHItPmR1Lm5mczIuYmxvY2tzOwotCQkJaW5vZGUtPmlfYmxrc2l6ZSA9IGZhdHRyLT5kdS5uZnMyLmJsb2Nrc2l6ZTsKIAkJfQogCQluZnNpLT5hdHRydGltZW8gPSBORlNfTUlOQVRUUlRJTUVPKGlub2RlKTsKIAkJbmZzaS0+YXR0cnRpbWVvX3RpbWVzdGFtcCA9IGppZmZpZXM7CkBAIC00NDMsNyArNDQxLDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY3R4OwogCi0JY3R4ID0gKHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICopa21hbGxvYyhzaXplb2YoKmN0eCksIEdGUF9LRVJORUwpOworCWN0eCA9IGttYWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY3R4ICE9IE5VTEwpIHsKIAkJYXRvbWljX3NldCgmY3R4LT5jb3VudCwgMSk7CiAJCWN0eC0+ZGVudHJ5ID0gZGdldChkZW50cnkpOwpAQCAtOTY5LDEwICs5NjcsOCBAQAogCQkgKiByZXBvcnQgdGhlIGJsb2NrcyBpbiA1MTJieXRlIHVuaXRzCiAJCSAqLwogCQlpbm9kZS0+aV9ibG9ja3MgPSBuZnNfY2FsY19ibG9ja19zaXplKGZhdHRyLT5kdS5uZnMzLnVzZWQpOwotCQlpbm9kZS0+aV9ibGtzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOwogIAl9IGVsc2UgewogIAkJaW5vZGUtPmlfYmxvY2tzID0gZmF0dHItPmR1Lm5mczIuYmxvY2tzOwotIAkJaW5vZGUtPmlfYmxrc2l6ZSA9IGZhdHRyLT5kdS5uZnMyLmJsb2Nrc2l6ZTsKICAJfQogCiAJaWYgKChmYXR0ci0+dmFsaWQgJiBORlNfQVRUUl9GQVRUUl9WNCkgIT0gMCAmJgpAQCAtMTEzNCw4ICsxMTMwLDcgQEAKIAogc3RhdGljIHZvaWQgbmZzX2Rlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gIm5mc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShuZnNfaW5vZGVfY2FjaGVwKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL25mcy9uYW1lc3BhY2UuYyBiL2ZzL25mcy9uYW1lc3BhY2UuYwppbmRleCA3N2IwMDY4Li42MDQwODY0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmFtZXNwYWNlLmMKKysrIGIvZnMvbmZzL25hbWVzcGFjZS5jCkBAIC0yNiw2ICsyNiwxMSBAQAogc3RhdGljIERFQ0xBUkVfV09SSyhuZnNfYXV0b21vdW50X3Rhc2ssIG5mc19leHBpcmVfYXV0b21vdW50cywgJm5mc19hdXRvbW91bnRfbGlzdCk7CiBpbnQgbmZzX21vdW50cG9pbnRfZXhwaXJ5X3RpbWVvdXQgPSA1MDAgKiBIWjsKIAorc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqbmZzX2RvX3N1Ym1vdW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudCwKKwkJCQkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorCQkJCQlzdHJ1Y3QgbmZzX2ZoICpmaCwKKwkJCQkJc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpOworCiAvKgogICogbmZzX3BhdGggLSByZWNvbnN0cnVjdCB0aGUgcGF0aCBnaXZlbiBhbiBhcmJpdHJhcnkgZGVudHJ5CiAgKiBAYmFzZSAtIGFyYml0cmFyeSBzdHJpbmcgdG8gcHJlcGVuZCB0byB0aGUgcGF0aApAQCAtMjA5LDkgKzIxNCwxMCBAQAogICogQGZhdHRyIC0gYXR0cmlidXRlcyBmb3IgbmV3IHJvb3QgaW5vZGUKICAqCiAgKi8KLXN0cnVjdCB2ZnNtb3VudCAqbmZzX2RvX3N1Ym1vdW50KGNvbnN0IHN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudCwKLQkJY29uc3Qgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgbmZzX2ZoICpmaCwKLQkJc3RydWN0IG5mc19mYXR0ciAqZmF0dHIpCitzdGF0aWMgc3RydWN0IHZmc21vdW50ICpuZnNfZG9fc3VibW91bnQoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnRfcGFyZW50LAorCQkJCQljb25zdCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCisJCQkJCXN0cnVjdCBuZnNfZmggKmZoLAorCQkJCQlzdHJ1Y3QgbmZzX2ZhdHRyICpmYXR0cikKIHsKIAlzdHJ1Y3QgbmZzX2Nsb25lX21vdW50IG1vdW50ZGF0YSA9IHsKIAkJLnNiID0gbW50X3BhcmVudC0+bW50X3NiLApkaWZmIC0tZ2l0IGEvZnMvbmZzL25mczNwcm9jLmMgYi9mcy9uZnMvbmZzM3Byb2MuYwppbmRleCBmODY4OGVhLi4zYjIzNGQ0IDEwMDY0NAotLS0gYS9mcy9uZnMvbmZzM3Byb2MuYworKysgYi9mcy9uZnMvbmZzM3Byb2MuYwpAQCAtNDQ5LDcgKzQ0OSw3IEBACiAJCXN0cnVjdCBuZnNfZmF0dHIgcmVzOwogCX0gKnB0cjsKIAotCXB0ciA9IChzdHJ1Y3QgdW5saW5reGRyICopa21hbGxvYyhzaXplb2YoKnB0ciksIEdGUF9LRVJORUwpOworCXB0ciA9IGttYWxsb2Moc2l6ZW9mKCpwdHIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXB0cikKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHRyLT5hcmcuZmggPSBORlNfRkgoZGlyLT5kX2lub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL25mcy9wYWdlbGlzdC5jIGIvZnMvbmZzL3BhZ2VsaXN0LmMKaW5kZXggMzZlOTAyYS4uODI5YWYzMiAxMDA2NDQKLS0tIGEvZnMvbmZzL3BhZ2VsaXN0LmMKKysrIGIvZnMvbmZzL3BhZ2VsaXN0LmMKQEAgLTM5Miw3ICszOTIsNiBAQAogCiB2b2lkIG5mc19kZXN0cm95X25mc3BhZ2VjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzX3BhZ2VfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAibmZzX3BhZ2U6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzX3BhZ2VfY2FjaGVwKTsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvbmZzL3Byb2MuYyBiL2ZzL25mcy9wcm9jLmMKaW5kZXggNjMwZTUwNi4uNDUyOWNjNCAxMDA2NDQKLS0tIGEvZnMvbmZzL3Byb2MuYworKysgYi9mcy9uZnMvcHJvYy5jCkBAIC0zNTIsNyArMzUyLDcgQEAKIHsKIAlzdHJ1Y3QgbmZzX2Rpcm9wYXJncwkqYXJnOwogCi0JYXJnID0gKHN0cnVjdCBuZnNfZGlyb3BhcmdzICopa21hbGxvYyhzaXplb2YoKmFyZyksIEdGUF9LRVJORUwpOworCWFyZyA9IGttYWxsb2Moc2l6ZW9mKCphcmcpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWFyZykKIAkJcmV0dXJuIC1FTk9NRU07CiAJYXJnLT5maCA9IE5GU19GSChkaXItPmRfaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvbmZzL3JlYWQuYyBiL2ZzL25mcy9yZWFkLmMKaW5kZXggNjlmMTU0OS4uYzJlNDljMyAxMDA2NDQKLS0tIGEvZnMvbmZzL3JlYWQuYworKysgYi9mcy9uZnMvcmVhZC5jCkBAIC03MzcsNiArNzM3LDUgQEAKIHZvaWQgbmZzX2Rlc3Ryb3lfcmVhZHBhZ2VjYWNoZSh2b2lkKQogewogCW1lbXBvb2xfZGVzdHJveShuZnNfcmRhdGFfbWVtcG9vbCk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShuZnNfcmRhdGFfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAibmZzX3JlYWRfZGF0YTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShuZnNfcmRhdGFfY2FjaGVwKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL25mcy93cml0ZS5jIGIvZnMvbmZzL3dyaXRlLmMKaW5kZXggYzEyZWZmYi4uZjY2NzVkMiAxMDA2NDQKLS0tIGEvZnMvbmZzL3dyaXRlLmMKKysrIGIvZnMvbmZzL3dyaXRlLmMKQEAgLTUxLDcgKzUxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbXBhZ2UuaD4KICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KIAogI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9jbG50Lmg+CkBAIC0xNTY1LDcgKzE1NjQsNiBAQAogewogCW1lbXBvb2xfZGVzdHJveShuZnNfY29tbWl0X21lbXBvb2wpOwogCW1lbXBvb2xfZGVzdHJveShuZnNfd2RhdGFfbWVtcG9vbCk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShuZnNfd2RhdGFfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAibmZzX3dyaXRlX2RhdGE6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobmZzX3dkYXRhX2NhY2hlcCk7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL25mc2QvbmZzNGlkbWFwLmMgYi9mcy9uZnNkL25mczRpZG1hcC5jCmluZGV4IGJlYTZiOTQuLmIxOTAyZWIgMTAwNjQ0Ci0tLSBhL2ZzL25mc2QvbmZzNGlkbWFwLmMKKysrIGIvZnMvbmZzZC9uZnM0aWRtYXAuYwpAQCAtNTczLDEwICs1NzMsOSBAQAogCXN0cnVjdCBpZG1hcF9kZWZlcl9yZXEgKm1kcjsKIAlpbnQgcmV0OwogCi0JbWRyID0ga21hbGxvYyhzaXplb2YoKm1kciksIEdGUF9LRVJORUwpOworCW1kciA9IGt6YWxsb2Moc2l6ZW9mKCptZHIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIW1kcikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtc2V0KG1kciwgMCwgc2l6ZW9mKCptZHIpKTsKIAlhdG9taWNfc2V0KCZtZHItPmNvdW50LCAxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZtZHItPndhaXRxKTsKIAltZHItPnJlcS5kZWZlciA9IGlkbWFwX2RlZmVyOwpkaWZmIC0tZ2l0IGEvZnMvbmZzZC9uZnM0c3RhdGUuYyBiL2ZzL25mc2QvbmZzNHN0YXRlLmMKaW5kZXggOWRhYTBiOS4uZWJjZjIyNiAxMDA2NDQKLS0tIGEvZnMvbmZzZC9uZnM0c3RhdGUuYworKysgYi9mcy9uZnNkL25mczRzdGF0ZS5jCkBAIC0zMzksOCArMzM5LDcgQEAKIHsKIAlzdHJ1Y3QgbmZzNF9jbGllbnQgKmNscDsKIAotCWlmICgoY2xwID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IG5mczRfY2xpZW50KSwgR0ZQX0tFUk5FTCkpIT0gTlVMTCkgewotCQltZW1zZXQoY2xwLCAwLCBzaXplb2YoKmNscCkpOworCWlmICgoY2xwID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IG5mczRfY2xpZW50KSwgR0ZQX0tFUk5FTCkpIT0gTlVMTCkgewogCQlpZiAoKGNscC0+Y2xfbmFtZS5kYXRhID0ga21hbGxvYyhuYW1lLmxlbiwgR0ZQX0tFUk5FTCkpICE9IE5VTEwpIHsKIAkJCW1lbWNweShjbHAtPmNsX25hbWUuZGF0YSwgbmFtZS5kYXRhLCBuYW1lLmxlbik7CiAJCQljbHAtPmNsX25hbWUubGVuID0gbmFtZS5sZW47CkBAIC0xMDA2LDEzICsxMDA1LDEwIEBACiBzdGF0aWMgdm9pZAogbmZzZDRfZnJlZV9zbGFiKGttZW1fY2FjaGVfdCAqKnNsYWIpCiB7Ci0JaW50IHN0YXR1czsKLQogCWlmICgqc2xhYiA9PSBOVUxMKQogCQlyZXR1cm47Ci0Jc3RhdHVzID0ga21lbV9jYWNoZV9kZXN0cm95KCpzbGFiKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koKnNsYWIpOwogCSpzbGFiID0gTlVMTDsKLQlXQVJOX09OKHN0YXR1cyk7CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9mcy9uby1ibG9jay5jIGIvZnMvbm8tYmxvY2suYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjY5YTkzCi0tLSAvZGV2L251bGwKKysrIGIvZnMvbm8tYmxvY2suYwpAQCAtMCwwICsxLDIyIEBACisvKiBuby1ibG9jay5jOiBpbXBsZW1lbnRhdGlvbiBvZiByb3V0aW5lcyByZXF1aXJlZCBmb3Igbm9uLUJMT0NLIGNvbmZpZ3VyYXRpb24KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgUmVkIEhhdCwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogV3JpdHRlbiBieSBEYXZpZCBIb3dlbGxzIChkaG93ZWxsc0ByZWRoYXQuY29tKQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisKK3N0YXRpYyBpbnQgbm9fYmxrZGV2X29wZW4oc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBmaWxlICogZmlscCkKK3sKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkZWZfYmxrX2ZvcHMgPSB7CisJLm9wZW4JCT0gbm9fYmxrZGV2X29wZW4sCit9OwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hb3BzLmMgYi9mcy9udGZzL2FvcHMuYwppbmRleCBiYzU3OWJmLi43YjJjOGY0IDEwMDY0NAotLS0gYS9mcy9udGZzL2FvcHMuYworKysgYi9mcy9udGZzL2FvcHMuYwpAQCAtMjU0LDcgKzI1NCw3IEBACiAJCWJoLT5iX2JkZXYgPSB2b2wtPnNiLT5zX2JkZXY7CiAJCS8qIElzIHRoZSBibG9jayB3aXRoaW4gdGhlIGFsbG93ZWQgbGltaXRzPyAqLwogCQlpZiAoaWJsb2NrIDwgbGJsb2NrKSB7Ci0JCQlCT09MIGlzX3JldHJ5ID0gRkFMU0U7CisJCQlib29sIGlzX3JldHJ5ID0gZmFsc2U7CiAKIAkJCS8qIENvbnZlcnQgaWJsb2NrIGludG8gY29ycmVzcG9uZGluZyB2Y24gYW5kIG9mZnNldC4gKi8KIAkJCXZjbiA9IChWQ04paWJsb2NrIDw8IGJsb2Nrc2l6ZV9iaXRzID4+CkBAIC0yOTIsNyArMjkyLDcgQEAKIAkJCQlnb3RvIGhhbmRsZV9ob2xlOwogCQkJLyogSWYgZmlyc3QgdHJ5IGFuZCBydW5saXN0IHVubWFwcGVkLCBtYXAgYW5kIHJldHJ5LiAqLwogCQkJaWYgKCFpc19yZXRyeSAmJiBsY24gPT0gTENOX1JMX05PVF9NQVBQRUQpIHsKLQkJCQlpc19yZXRyeSA9IFRSVUU7CisJCQkJaXNfcmV0cnkgPSB0cnVlOwogCQkJCS8qCiAJCQkJICogQXR0ZW1wdCB0byBtYXAgcnVubGlzdCwgZHJvcHBpbmcgbG9jayBmb3IKIAkJCQkgKiB0aGUgZHVyYXRpb24uCkBAIC01NTgsNyArNTU4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGludCBibG9ja3NpemUsIHZjbl9vZnM7CiAJaW50IGVycjsKLQlCT09MIG5lZWRfZW5kX3dyaXRlYmFjazsKKwlib29sIG5lZWRfZW5kX3dyaXRlYmFjazsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzOwogCiAJdmkgPSBwYWdlLT5tYXBwaW5nLT5ob3N0OwpAQCAtNjI2LDcgKzYyNiw3IEBACiAJcmwgPSBOVUxMOwogCWVyciA9IDA7CiAJZG8gewotCQlCT09MIGlzX3JldHJ5ID0gRkFMU0U7CisJCWJvb2wgaXNfcmV0cnkgPSBmYWxzZTsKIAogCQlpZiAodW5saWtlbHkoYmxvY2sgPj0gZGJsb2NrKSkgewogCQkJLyoKQEAgLTc2OCw3ICs3NjgsNyBAQAogCQl9CiAJCS8qIElmIGZpcnN0IHRyeSBhbmQgcnVubGlzdCB1bm1hcHBlZCwgbWFwIGFuZCByZXRyeS4gKi8KIAkJaWYgKCFpc19yZXRyeSAmJiBsY24gPT0gTENOX1JMX05PVF9NQVBQRUQpIHsKLQkJCWlzX3JldHJ5ID0gVFJVRTsKKwkJCWlzX3JldHJ5ID0gdHJ1ZTsKIAkJCS8qCiAJCQkgKiBBdHRlbXB0IHRvIG1hcCBydW5saXN0LCBkcm9wcGluZyBsb2NrIGZvcgogCQkJICogdGhlIGR1cmF0aW9uLgpAQCAtODc0LDEyICs4NzQsMTIgQEAKIAlzZXRfcGFnZV93cml0ZWJhY2socGFnZSk7CS8qIEtlZXBzIHRyeV90b19mcmVlX2J1ZmZlcnMoKSBhd2F5LiAqLwogCiAJLyogU3VibWl0IHRoZSBwcmVwYXJlZCBidWZmZXJzIGZvciBpL28uICovCi0JbmVlZF9lbmRfd3JpdGViYWNrID0gVFJVRTsKKwluZWVkX2VuZF93cml0ZWJhY2sgPSB0cnVlOwogCWRvIHsKIAkJc3RydWN0IGJ1ZmZlcl9oZWFkICpuZXh0ID0gYmgtPmJfdGhpc19wYWdlOwogCQlpZiAoYnVmZmVyX2FzeW5jX3dyaXRlKGJoKSkgewogCQkJc3VibWl0X2JoKFdSSVRFLCBiaCk7Ci0JCQluZWVkX2VuZF93cml0ZWJhY2sgPSBGQUxTRTsKKwkJCW5lZWRfZW5kX3dyaXRlYmFjayA9IGZhbHNlOwogCQl9CiAJCWJoID0gbmV4dDsKIAl9IHdoaWxlIChiaCAhPSBoZWFkKTsKQEAgLTkzMiw3ICs5MzIsNyBAQAogCXJ1bmxpc3RfZWxlbWVudCAqcmw7CiAJaW50IGksIG5yX2xvY2tlZF9uaXMsIG5yX3JlY3MsIG5yX2JocywgbWF4X2JocywgYmhzX3Blcl9yZWMsIGVyciwgZXJyMjsKIAl1bnNpZ25lZCBiaF9zaXplLCByZWNfc2l6ZV9iaXRzOwotCUJPT0wgc3luYywgaXNfbWZ0LCBwYWdlX2lzX2RpcnR5LCByZWNfaXNfZGlydHk7CisJYm9vbCBzeW5jLCBpc19tZnQsIHBhZ2VfaXNfZGlydHksIHJlY19pc19kaXJ0eTsKIAl1bnNpZ25lZCBjaGFyIGJoX3NpemVfYml0czsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nIGZvciBpbm9kZSAweCVseCwgYXR0cmlidXRlIHR5cGUgMHgleCwgcGFnZSBpbmRleCAiCkBAIC05NzUsMTAgKzk3NSwxMCBAQAogCiAJcmwgPSBOVUxMOwogCWVyciA9IGVycjIgPSBucl9iaHMgPSBucl9yZWNzID0gbnJfbG9ja2VkX25pcyA9IDA7Ci0JcGFnZV9pc19kaXJ0eSA9IHJlY19pc19kaXJ0eSA9IEZBTFNFOworCXBhZ2VfaXNfZGlydHkgPSByZWNfaXNfZGlydHkgPSBmYWxzZTsKIAlyZWNfc3RhcnRfYmggPSBOVUxMOwogCWRvIHsKLQkJQk9PTCBpc19yZXRyeSA9IEZBTFNFOworCQlib29sIGlzX3JldHJ5ID0gZmFsc2U7CiAKIAkJaWYgKGxpa2VseShibG9jayA8IHJlY19ibG9jaykpIHsKIAkJCWlmICh1bmxpa2VseShibG9jayA+PSBkYmxvY2spKSB7CkBAIC0xMDA5LDEwICsxMDA5LDEwIEBACiAJCQl9CiAJCQlpZiAoIWJ1ZmZlcl9kaXJ0eShiaCkpIHsKIAkJCQkvKiBDbGVhbiByZWNvcmRzIGFyZSBub3Qgd3JpdHRlbiBvdXQuICovCi0JCQkJcmVjX2lzX2RpcnR5ID0gRkFMU0U7CisJCQkJcmVjX2lzX2RpcnR5ID0gZmFsc2U7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlyZWNfaXNfZGlydHkgPSBUUlVFOworCQkJcmVjX2lzX2RpcnR5ID0gdHJ1ZTsKIAkJCXJlY19zdGFydF9iaCA9IGJoOwogCQl9CiAJCS8qIE5lZWQgdG8gbWFwIHRoZSBidWZmZXIgaWYgaXQgaXMgbm90IG1hcHBlZCBhbHJlYWR5LiAqLwpAQCAtMTA1Myw3ICsxMDUzLDcgQEAKIAkJCQkgKi8KIAkJCQlpZiAoIWlzX21mdCAmJiAhaXNfcmV0cnkgJiYKIAkJCQkJCWxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkgewotCQkJCQlpc19yZXRyeSA9IFRSVUU7CisJCQkJCWlzX3JldHJ5ID0gdHJ1ZTsKIAkJCQkJLyoKIAkJCQkJICogQXR0ZW1wdCB0byBtYXAgcnVubGlzdCwgZHJvcHBpbmcKIAkJCQkJICogbG9jayBmb3IgdGhlIGR1cmF0aW9uLgpAQCAtMTA2Myw3ICsxMDYzLDcgQEAKIAkJCQkJaWYgKGxpa2VseSghZXJyMikpCiAJCQkJCQlnb3RvIGxvY2tfcmV0cnlfcmVtYXA7CiAJCQkJCWlmIChlcnIyID09IC1FTk9NRU0pCi0JCQkJCQlwYWdlX2lzX2RpcnR5ID0gVFJVRTsKKwkJCQkJCXBhZ2VfaXNfZGlydHkgPSB0cnVlOwogCQkJCQlsY24gPSBlcnIyOwogCQkJCX0gZWxzZSB7CiAJCQkJCWVycjIgPSAtRUlPOwpAQCAtMTE0NSw3ICsxMTQ1LDcgQEAKIAkJCQkgKiBtZWFucyB3ZSBuZWVkIHRvIHJlZGlydHkgdGhlIHBhZ2UgYmVmb3JlCiAJCQkJICogcmV0dXJuaW5nLgogCQkJCSAqLwotCQkJCXBhZ2VfaXNfZGlydHkgPSBUUlVFOworCQkJCXBhZ2VfaXNfZGlydHkgPSB0cnVlOwogCQkJCS8qCiAJCQkJICogUmVtb3ZlIHRoZSBidWZmZXJzIGluIHRoaXMgbWZ0IHJlY29yZCBmcm9tCiAJCQkJICogdGhlIGxpc3Qgb2YgYnVmZmVycyB0byB3cml0ZS4KZGlmZiAtLWdpdCBhL2ZzL250ZnMvYW9wcy5oIGIvZnMvbnRmcy9hb3BzLmgKaW5kZXggMzI1Y2UyNi4uOTM5M2Y0YiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hb3BzLmgKKysrIGIvZnMvbnRmcy9hb3BzLmgKQEAgLTgwLDcgKzgwLDcgQEAKICAqCiAgKiBUaGUgdW5sb2NrZWQgYW5kIHVwdG9kYXRlIHBhZ2UgaXMgcmV0dXJuZWQgb24gc3VjY2VzcyBvciBhbiBlbmNvZGVkIGVycm9yCiAgKiBvbiBmYWlsdXJlLiBDYWxsZXIgaGFzIHRvIHRlc3QgZm9yIGVycm9yIHVzaW5nIHRoZSBJU19FUlIoKSBtYWNybyBvbiB0aGUKLSAqIHJldHVybiB2YWx1ZS4gSWYgdGhhdCBldmFsdWF0ZXMgdG8gVFJVRSwgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgY2FuIGJlCisgKiByZXR1cm4gdmFsdWUuIElmIHRoYXQgZXZhbHVhdGVzIHRvICd0cnVlJywgdGhlIG5lZ2F0aXZlIGVycm9yIGNvZGUgY2FuIGJlCiAgKiBvYnRhaW5lZCB1c2luZyBQVFJfRVJSKCkgb24gdGhlIHJldHVybiB2YWx1ZSBvZiBudGZzX21hcF9wYWdlKCkuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHBhZ2UgKm50ZnNfbWFwX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCmRpZmYgLS1naXQgYS9mcy9udGZzL2F0dHJpYi5jIGIvZnMvbnRmcy9hdHRyaWIuYwppbmRleCA2NzA4ZTFkLi45ZjA4ZTg1IDEwMDY0NAotLS0gYS9mcy9udGZzL2F0dHJpYi5jCisrKyBiL2ZzL250ZnMvYXR0cmliLmMKQEAgLTY3LDcgKzY3LDcgQEAKICAqIHRoZSBhdHRyaWJ1dGUgaGFzIHplcm8gYWxsb2NhdGVkIHNpemUsIGkuZS4gdGhlcmUgc2ltcGx5IGlzIG5vIHJ1bmxpc3QuCiAgKgogICogV0FSTklORzogSWYgQGN0eCBpcyBzdXBwbGllZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpcwotICoJICAgIHJldHVybmVkLCB5b3UgbmVlZCB0byBjaGVjayBJU19FUlIoQGN0eC0+bXJlYykgYW5kIGlmIFRSVUUgdGhlIEBjdHgKKyAqCSAgICByZXR1cm5lZCwgeW91IG5lZWQgdG8gY2hlY2sgSVNfRVJSKEBjdHgtPm1yZWMpIGFuZCBpZiAndHJ1ZScgdGhlIEBjdHgKICAqCSAgICBpcyBubyBsb25nZXIgdmFsaWQsIGkuZS4geW91IG5lZWQgdG8gZWl0aGVyIGNhbGwKICAqCSAgICBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoKSBvciBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoKSBvbiBpdC4KICAqCSAgICBJbiB0aGF0IGNhc2UgUFRSX0VSUihAY3R4LT5tcmVjKSB3aWxsIGdpdmUgeW91IHRoZSBlcnJvciBjb2RlIGZvcgpAQCAtOTAsNyArOTAsNyBAQAogCXJ1bmxpc3RfZWxlbWVudCAqcmw7CiAJc3RydWN0IHBhZ2UgKnB1dF90aGlzX3BhZ2UgPSBOVUxMOwogCWludCBlcnIgPSAwOwotCUJPT0wgY3R4X2lzX3RlbXBvcmFyeSwgY3R4X25lZWRzX3Jlc2V0OworCWJvb2wgY3R4X2lzX3RlbXBvcmFyeSwgY3R4X25lZWRzX3Jlc2V0OwogCW50ZnNfYXR0cl9zZWFyY2hfY3R4IG9sZF9jdHggPSB7IE5VTEwsIH07CiAKIAludGZzX2RlYnVnKCJNYXBwaW5nIHJ1bmxpc3QgcGFydCBjb250YWluaW5nIHZjbiAweCVsbHguIiwKQEAgLTEwMCw3ICsxMDAsNyBAQAogCWVsc2UKIAkJYmFzZV9uaSA9IG5pLT5leHQuYmFzZV9udGZzX2lubzsKIAlpZiAoIWN0eCkgewotCQljdHhfaXNfdGVtcG9yYXJ5ID0gY3R4X25lZWRzX3Jlc2V0ID0gVFJVRTsKKwkJY3R4X2lzX3RlbXBvcmFyeSA9IGN0eF9uZWVkc19yZXNldCA9IHRydWU7CiAJCW0gPSBtYXBfbWZ0X3JlY29yZChiYXNlX25pKTsKIAkJaWYgKElTX0VSUihtKSkKIAkJCXJldHVybiBQVFJfRVJSKG0pOwpAQCAtMTE1LDcgKzExNSw3IEBACiAJCUJVR19PTihJU19FUlIoY3R4LT5tcmVjKSk7CiAJCWEgPSBjdHgtPmF0dHI7CiAJCUJVR19PTighYS0+bm9uX3Jlc2lkZW50KTsKLQkJY3R4X2lzX3RlbXBvcmFyeSA9IEZBTFNFOworCQljdHhfaXNfdGVtcG9yYXJ5ID0gZmFsc2U7CiAJCWVuZF92Y24gPSBzbGU2NF90b19jcHUoYS0+ZGF0YS5ub25fcmVzaWRlbnQuaGlnaGVzdF92Y24pOwogCQlyZWFkX2xvY2tfaXJxc2F2ZSgmbmktPnNpemVfbG9jaywgZmxhZ3MpOwogCQlhbGxvY2F0ZWRfc2l6ZV92Y24gPSBuaS0+YWxsb2NhdGVkX3NpemUgPj4KQEAgLTEzNiw3ICsxMzYsNyBAQAogCQkJCW5pLT5uYW1lLCBuaS0+bmFtZV9sZW4pICYmCiAJCQkJc2xlNjRfdG9fY3B1KGEtPmRhdGEubm9uX3Jlc2lkZW50Lmxvd2VzdF92Y24pCiAJCQkJPD0gdmNuICYmIGVuZF92Y24gPj0gdmNuKSkKLQkJCWN0eF9uZWVkc19yZXNldCA9IEZBTFNFOworCQkJY3R4X25lZWRzX3Jlc2V0ID0gZmFsc2U7CiAJCWVsc2UgewogCQkJLyogU2F2ZSB0aGUgb2xkIHNlYXJjaCBjb250ZXh0LiAqLwogCQkJb2xkX2N0eCA9ICpjdHg7CkBAIC0xNTgsNyArMTU4LDcgQEAKIAkJCSAqIG5lZWRlZCBhdHRyaWJ1dGUgZXh0ZW50LgogCQkJICovCiAJCQludGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoY3R4KTsKLQkJCWN0eF9uZWVkc19yZXNldCA9IFRSVUU7CisJCQljdHhfbmVlZHNfcmVzZXQgPSB0cnVlOwogCQl9CiAJfQogCWlmIChjdHhfbmVlZHNfcmVzZXQpIHsKQEAgLTMzNiwxNiArMzM2LDE2IEBACiAgKiAgTENOX0VJTwlDcml0aWNhbCBlcnJvciAocnVubGlzdC9maWxlIGlzIGNvcnJ1cHQsIGkvbyBlcnJvciwgZXRjKS4KICAqCiAgKiBMb2NraW5nOiAtIFRoZSBydW5saXN0IG11c3QgYmUgbG9ja2VkIG9uIGVudHJ5IGFuZCBpcyBsZWZ0IGxvY2tlZCBvbiByZXR1cm4uCi0gKgkgICAgLSBJZiBAd3JpdGVfbG9ja2VkIGlzIEZBTFNFLCBpLmUuIHRoZSBydW5saXN0IGlzIGxvY2tlZCBmb3IgcmVhZGluZywKKyAqCSAgICAtIElmIEB3cml0ZV9sb2NrZWQgaXMgJ2ZhbHNlJywgaS5lLiB0aGUgcnVubGlzdCBpcyBsb2NrZWQgZm9yIHJlYWRpbmcsCiAgKgkgICAgICB0aGUgbG9jayBtYXkgYmUgZHJvcHBlZCBpbnNpZGUgdGhlIGZ1bmN0aW9uIHNvIHlvdSBjYW5ub3QgcmVseSBvbgogICoJICAgICAgdGhlIHJ1bmxpc3Qgc3RpbGwgYmVpbmcgdGhlIHNhbWUgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuCiAgKi8KIExDTiBudGZzX2F0dHJfdmNuX3RvX2xjbl9ub2xvY2sobnRmc19pbm9kZSAqbmksIGNvbnN0IFZDTiB2Y24sCi0JCWNvbnN0IEJPT0wgd3JpdGVfbG9ja2VkKQorCQljb25zdCBib29sIHdyaXRlX2xvY2tlZCkKIHsKIAlMQ04gbGNuOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JQk9PTCBpc19yZXRyeSA9IEZBTFNFOworCWJvb2wgaXNfcmV0cnkgPSBmYWxzZTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nIGZvciBpX2lubyAweCVseCwgdmNuIDB4JWxseCwgJXNfbG9ja2VkLiIsCiAJCQluaS0+bWZ0X25vLCAodW5zaWduZWQgbG9uZyBsb25nKXZjbiwKQEAgLTM5MCw3ICszOTAsNyBAQAogCQkJZG93bl9yZWFkKCZuaS0+cnVubGlzdC5sb2NrKTsKIAkJfQogCQlpZiAobGlrZWx5KCFlcnIpKSB7Ci0JCQlpc19yZXRyeSA9IFRSVUU7CisJCQlpc19yZXRyeSA9IHRydWU7CiAJCQlnb3RvIHJldHJ5X3JlbWFwOwogCQl9CiAJCWlmIChlcnIgPT0gLUVOT0VOVCkKQEAgLTQ0OSw3ICs0NDksNyBAQAogICoJLUVJTwktIENyaXRpY2FsIGVycm9yIChydW5saXN0L2ZpbGUgaXMgY29ycnVwdCwgaS9vIGVycm9yLCBldGMpLgogICoKICAqIFdBUk5JTkc6IElmIEBjdHggaXMgc3VwcGxpZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBzdWNjZXNzIG9yIGZhaWx1cmUgaXMKLSAqCSAgICByZXR1cm5lZCwgeW91IG5lZWQgdG8gY2hlY2sgSVNfRVJSKEBjdHgtPm1yZWMpIGFuZCBpZiBUUlVFIHRoZSBAY3R4CisgKgkgICAgcmV0dXJuZWQsIHlvdSBuZWVkIHRvIGNoZWNrIElTX0VSUihAY3R4LT5tcmVjKSBhbmQgaWYgJ3RydWUnIHRoZSBAY3R4CiAgKgkgICAgaXMgbm8gbG9uZ2VyIHZhbGlkLCBpLmUuIHlvdSBuZWVkIHRvIGVpdGhlciBjYWxsCiAgKgkgICAgbnRmc19hdHRyX3JlaW5pdF9zZWFyY2hfY3R4KCkgb3IgbnRmc19hdHRyX3B1dF9zZWFyY2hfY3R4KCkgb24gaXQuCiAgKgkgICAgSW4gdGhhdCBjYXNlIFBUUl9FUlIoQGN0eC0+bXJlYykgd2lsbCBnaXZlIHlvdSB0aGUgZXJyb3IgY29kZSBmb3IKQEAgLTQ2OSw3ICs0NjksNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJcnVubGlzdF9lbGVtZW50ICpybDsKIAlpbnQgZXJyID0gMDsKLQlCT09MIGlzX3JldHJ5ID0gRkFMU0U7CisJYm9vbCBpc19yZXRyeSA9IGZhbHNlOwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcgZm9yIGlfaW5vIDB4JWx4LCB2Y24gMHglbGx4LCB3aXRoJXMgY3R4LiIsCiAJCQluaS0+bWZ0X25vLCAodW5zaWduZWQgbG9uZyBsb25nKXZjbiwgY3R4ID8gIiIgOiAib3V0Iik7CkBAIC01MTgsNyArNTE4LDcgQEAKIAkJCSAqLwogCQkJZXJyID0gbnRmc19tYXBfcnVubGlzdF9ub2xvY2sobmksIHZjbiwgY3R4KTsKIAkJCWlmIChsaWtlbHkoIWVycikpIHsKLQkJCQlpc19yZXRyeSA9IFRSVUU7CisJCQkJaXNfcmV0cnkgPSB0cnVlOwogCQkJCWdvdG8gcmV0cnlfcmVtYXA7CiAJCQl9CiAJCX0KQEAgLTU1OCw4ICs1NTgsOCBAQAogICogT24gYWN0dWFsIGVycm9yLCBudGZzX2F0dHJfZmluZCgpIHJldHVybnMgLUVJTy4gIEluIHRoaXMgY2FzZSBAY3R4LT5hdHRyIGlzCiAgKiB1bmRlZmluZWQgYW5kIGluIHBhcnRpY3VsYXIgZG8gbm90IHJlbHkgb24gaXQgbm90IGNoYW5naW5nLgogICoKLSAqIElmIEBjdHgtPmlzX2ZpcnN0IGlzIFRSVUUsIHRoZSBzZWFyY2ggYmVnaW5zIHdpdGggQGN0eC0+YXR0ciBpdHNlbGYuICBJZiBpdAotICogaXMgRkFMU0UsIHRoZSBzZWFyY2ggYmVnaW5zIGFmdGVyIEBjdHgtPmF0dHIuCisgKiBJZiBAY3R4LT5pc19maXJzdCBpcyAndHJ1ZScsIHRoZSBzZWFyY2ggYmVnaW5zIHdpdGggQGN0eC0+YXR0ciBpdHNlbGYuICBJZiBpdAorICogaXMgJ2ZhbHNlJywgdGhlIHNlYXJjaCBiZWdpbnMgYWZ0ZXIgQGN0eC0+YXR0ci4KICAqCiAgKiBJZiBAaWMgaXMgSUdOT1JFX0NBU0UsIHRoZSBAbmFtZSBjb21wYXJpc3NvbiBpcyBub3QgY2FzZSBzZW5zaXRpdmUgYW5kCiAgKiBAY3R4LT5udGZzX2lubyBtdXN0IGJlIHNldCB0byB0aGUgbnRmcyBpbm9kZSB0byB3aGljaCB0aGUgbWZ0IHJlY29yZApAQCAtNTk5LDExICs1OTksMTEgQEAKIAogCS8qCiAJICogSXRlcmF0ZSBvdmVyIGF0dHJpYnV0ZXMgaW4gbWZ0IHJlY29yZCBzdGFydGluZyBhdCBAY3R4LT5hdHRyLCBvciB0aGUKLQkgKiBhdHRyaWJ1dGUgZm9sbG93aW5nIHRoYXQsIGlmIEBjdHgtPmlzX2ZpcnN0IGlzIFRSVUUuCisJICogYXR0cmlidXRlIGZvbGxvd2luZyB0aGF0LCBpZiBAY3R4LT5pc19maXJzdCBpcyAndHJ1ZScuCiAJICovCiAJaWYgKGN0eC0+aXNfZmlyc3QpIHsKIAkJYSA9IGN0eC0+YXR0cjsKLQkJY3R4LT5pc19maXJzdCA9IEZBTFNFOworCQljdHgtPmlzX2ZpcnN0ID0gZmFsc2U7CiAJfSBlbHNlCiAJCWEgPSAoQVRUUl9SRUNPUkQqKSgodTgqKWN0eC0+YXR0ciArCiAJCQkJbGUzMl90b19jcHUoY3R4LT5hdHRyLT5sZW5ndGgpKTsKQEAgLTg5MCwxMSArODkwLDExIEBACiAJCWN0eC0+YWxfZW50cnkgPSAoQVRUUl9MSVNUX0VOVFJZKilhbF9zdGFydDsKIAkvKgogCSAqIEl0ZXJhdGUgb3ZlciBlbnRyaWVzIGluIGF0dHJpYnV0ZSBsaXN0IHN0YXJ0aW5nIGF0IEBjdHgtPmFsX2VudHJ5LAotCSAqIG9yIHRoZSBlbnRyeSBmb2xsb3dpbmcgdGhhdCwgaWYgQGN0eC0+aXNfZmlyc3QgaXMgVFJVRS4KKwkgKiBvciB0aGUgZW50cnkgZm9sbG93aW5nIHRoYXQsIGlmIEBjdHgtPmlzX2ZpcnN0IGlzICd0cnVlJy4KIAkgKi8KIAlpZiAoY3R4LT5pc19maXJzdCkgewogCQlhbF9lbnRyeSA9IGN0eC0+YWxfZW50cnk7Ci0JCWN0eC0+aXNfZmlyc3QgPSBGQUxTRTsKKwkJY3R4LT5pc19maXJzdCA9IGZhbHNlOwogCX0gZWxzZQogCQlhbF9lbnRyeSA9IChBVFRSX0xJU1RfRU5UUlkqKSgodTgqKWN0eC0+YWxfZW50cnkgKwogCQkJCWxlMTZfdG9fY3B1KGN0eC0+YWxfZW50cnktPmxlbmd0aCkpOwpAQCAtMTEyNyw3ICsxMTI3LDcgQEAKIAljdHgtPm1yZWMgPSBjdHgtPmJhc2VfbXJlYzsKIAljdHgtPmF0dHIgPSAoQVRUUl9SRUNPUkQqKSgodTgqKWN0eC0+bXJlYyArCiAJCQlsZTE2X3RvX2NwdShjdHgtPm1yZWMtPmF0dHJzX29mZnNldCkpOwotCWN0eC0+aXNfZmlyc3QgPSBUUlVFOworCWN0eC0+aXNfZmlyc3QgPSB0cnVlOwogCWN0eC0+bnRmc19pbm8gPSBiYXNlX25pOwogCWN0eC0+YmFzZV9udGZzX2lubyA9IE5VTEw7CiAJY3R4LT5iYXNlX21yZWMgPSBOVUxMOwpAQCAtMTIyNCw3ICsxMjI0LDcgQEAKIAkJLyogU2FuaXR5IGNoZWNrcyBhcmUgcGVyZm9ybWVkIGVsc2V3aGVyZS4gKi8KIAkJLmF0dHIgPSAoQVRUUl9SRUNPUkQqKSgodTgqKW1yZWMgKwogCQkJCWxlMTZfdG9fY3B1KG1yZWMtPmF0dHJzX29mZnNldCkpLAotCQkuaXNfZmlyc3QgPSBUUlVFLAorCQkuaXNfZmlyc3QgPSB0cnVlLAogCQkubnRmc19pbm8gPSBuaSwKIAl9OwogfQpAQCAtMTI0Myw3ICsxMjQzLDcgQEAKIHsKIAlpZiAobGlrZWx5KCFjdHgtPmJhc2VfbnRmc19pbm8pKSB7CiAJCS8qIE5vIGF0dHJpYnV0ZSBsaXN0LiAqLwotCQljdHgtPmlzX2ZpcnN0ID0gVFJVRTsKKwkJY3R4LT5pc19maXJzdCA9IHRydWU7CiAJCS8qIFNhbml0eSBjaGVja3MgYXJlIHBlcmZvcm1lZCBlbHNld2hlcmUuICovCiAJCWN0eC0+YXR0ciA9IChBVFRSX1JFQ09SRCopKCh1OCopY3R4LT5tcmVjICsKIAkJCQlsZTE2X3RvX2NwdShjdHgtPm1yZWMtPmF0dHJzX29mZnNldCkpOwpAQCAtMTU4NSw3ICsxNTg1LDcgQEAKIAkJCXJldHVybiAtRU5PTUVNOwogCQkvKiBTdGFydCBieSBhbGxvY2F0aW5nIGNsdXN0ZXJzIHRvIGhvbGQgdGhlIGF0dHJpYnV0ZSB2YWx1ZS4gKi8KIAkJcmwgPSBudGZzX2NsdXN0ZXJfYWxsb2Modm9sLCAwLCBuZXdfc2l6ZSA+PgotCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMsIC0xLCBEQVRBX1pPTkUsIFRSVUUpOworCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMsIC0xLCBEQVRBX1pPTkUsIHRydWUpOwogCQlpZiAoSVNfRVJSKHJsKSkgewogCQkJZXJyID0gUFRSX0VSUihybCk7CiAJCQludGZzX2RlYnVnKCJGYWlsZWQgdG8gYWxsb2NhdGUgY2x1c3RlciVzLCBlcnJvciBjb2RlICIKQEAgLTE5MTksNyArMTkxOSw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyLCBtcF9zaXplOwogCXUzMiBhdHRyX2xlbiA9IDA7IC8qIFNpbGVuY2Ugc3R1cGlkIGdjYyB3YXJuaW5nLiAqLwotCUJPT0wgbXBfcmVidWlsdDsKKwlib29sIG1wX3JlYnVpbHQ7CiAKICNpZmRlZiBOVEZTX0RFQlVHCiAJcmVhZF9sb2NrX2lycXNhdmUoJm5pLT5zaXplX2xvY2ssIGZsYWdzKTsKQEAgLTIyMjIsNyArMjIyMiw3IEBACiAJcmwyID0gbnRmc19jbHVzdGVyX2FsbG9jKHZvbCwgYWxsb2NhdGVkX3NpemUgPj4gdm9sLT5jbHVzdGVyX3NpemVfYml0cywKIAkJCShuZXdfYWxsb2Nfc2l6ZSAtIGFsbG9jYXRlZF9zaXplKSA+PgogCQkJdm9sLT5jbHVzdGVyX3NpemVfYml0cywgKHJsICYmIChybC0+bGNuID49IDApKSA/Ci0JCQlybC0+bGNuICsgcmwtPmxlbmd0aCA6IC0xLCBEQVRBX1pPTkUsIFRSVUUpOworCQkJcmwtPmxjbiArIHJsLT5sZW5ndGggOiAtMSwgREFUQV9aT05FLCB0cnVlKTsKIAlpZiAoSVNfRVJSKHJsMikpIHsKIAkJZXJyID0gUFRSX0VSUihybDIpOwogCQlpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IGFsbG9jYXRlZF9zaXplKQpAQCAtMjI2NSw3ICsyMjY1LDcgQEAKIAlCVUdfT04oIXJsMik7CiAJQlVHX09OKCFybDItPmxlbmd0aCk7CiAJQlVHX09OKHJsMi0+bGNuIDwgTENOX0hPTEUpOwotCW1wX3JlYnVpbHQgPSBGQUxTRTsKKwltcF9yZWJ1aWx0ID0gZmFsc2U7CiAJLyogR2V0IHRoZSBzaXplIGZvciB0aGUgbmV3IG1hcHBpbmcgcGFpcnMgYXJyYXkgZm9yIHRoaXMgZXh0ZW50LiAqLwogCW1wX3NpemUgPSBudGZzX2dldF9zaXplX2Zvcl9tYXBwaW5nX3BhaXJzKHZvbCwgcmwyLCBsbCwgLTEpOwogCWlmICh1bmxpa2VseShtcF9zaXplIDw9IDApKSB7CkBAIC0yMzAwLDcgKzIzMDAsNyBAQAogCQllcnIgPSAtRU9QTk9UU1VQUDsKIAkJZ290byB1bmRvX2FsbG9jOwogCX0KLQltcF9yZWJ1aWx0ID0gVFJVRTsKKwltcF9yZWJ1aWx0ID0gdHJ1ZTsKIAkvKiBHZW5lcmF0ZSB0aGUgbWFwcGluZyBwYWlycyBhcnJheSBkaXJlY3RseSBpbnRvIHRoZSBhdHRyIHJlY29yZC4gKi8KIAllcnIgPSBudGZzX21hcHBpbmdfcGFpcnNfYnVpbGQodm9sLCAodTgqKWEgKwogCQkJbGUxNl90b19jcHUoYS0+ZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpLApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9hdHRyaWIuaCBiL2ZzL250ZnMvYXR0cmliLmgKaW5kZXggOTA3NDg4Ni4uM2M4Yjc0YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9hdHRyaWIuaAorKysgYi9mcy9udGZzL2F0dHJpYi5oCkBAIC00MCwxMCArNDAsMTAgQEAKICAqIFN0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIHRvIHplcm8gYmVmb3JlIHRoZSBmaXJzdCBjYWxsIHRvIG9uZSBvZiB0aGUKICAqIGF0dHJpYnV0ZSBzZWFyY2ggZnVuY3Rpb25zLiBJbml0aWFsaXplIEBtcmVjIHRvIHBvaW50IHRvIHRoZSBtZnQgcmVjb3JkIHRvCiAgKiBzZWFyY2gsIGFuZCBAYXR0ciB0byBwb2ludCB0byB0aGUgZmlyc3QgYXR0cmlidXRlIHdpdGhpbiBAbXJlYyAobm90IG5lY2Vzc2FyeQotICogaWYgY2FsbGluZyB0aGUgX2ZpcnN0KCkgZnVuY3Rpb25zKSwgYW5kIHNldCBAaXNfZmlyc3QgdG8gVFJVRSAobm90IG5lY2Vzc2FyeQorICogaWYgY2FsbGluZyB0aGUgX2ZpcnN0KCkgZnVuY3Rpb25zKSwgYW5kIHNldCBAaXNfZmlyc3QgdG8gJ3RydWUnIChub3QgbmVjZXNzYXJ5CiAgKiBpZiBjYWxsaW5nIHRoZSBfZmlyc3QoKSBmdW5jdGlvbnMpLgogICoKLSAqIElmIEBpc19maXJzdCBpcyBUUlVFLCB0aGUgc2VhcmNoIGJlZ2lucyB3aXRoIEBhdHRyLiBJZiBAaXNfZmlyc3QgaXMgRkFMU0UsCisgKiBJZiBAaXNfZmlyc3QgaXMgJ3RydWUnLCB0aGUgc2VhcmNoIGJlZ2lucyB3aXRoIEBhdHRyLiBJZiBAaXNfZmlyc3QgaXMgJ2ZhbHNlJywKICAqIHRoZSBzZWFyY2ggYmVnaW5zIGFmdGVyIEBhdHRyLiBUaGlzIGlzIHNvIHRoYXQsIGFmdGVyIHRoZSBmaXJzdCBjYWxsIHRvIG9uZQogICogb2YgdGhlIHNlYXJjaCBhdHRyaWJ1dGUgZnVuY3Rpb25zLCB3ZSBjYW4gY2FsbCB0aGUgZnVuY3Rpb24gYWdhaW4sIHdpdGhvdXQKICAqIGFueSBtb2RpZmljYXRpb24gb2YgdGhlIHNlYXJjaCBjb250ZXh0LCB0byBhdXRvbWFnaWNhbGx5IGdldCB0aGUgbmV4dApAQCAtNTIsNyArNTIsNyBAQAogdHlwZWRlZiBzdHJ1Y3QgewogCU1GVF9SRUNPUkQgKm1yZWM7CiAJQVRUUl9SRUNPUkQgKmF0dHI7Ci0JQk9PTCBpc19maXJzdDsKKwlib29sIGlzX2ZpcnN0OwogCW50ZnNfaW5vZGUgKm50ZnNfaW5vOwogCUFUVFJfTElTVF9FTlRSWSAqYWxfZW50cnk7CiAJbnRmc19pbm9kZSAqYmFzZV9udGZzX2lubzsKQEAgLTY1LDcgKzY1LDcgQEAKIGV4dGVybiBpbnQgbnRmc19tYXBfcnVubGlzdChudGZzX2lub2RlICpuaSwgVkNOIHZjbik7CiAKIGV4dGVybiBMQ04gbnRmc19hdHRyX3Zjbl90b19sY25fbm9sb2NrKG50ZnNfaW5vZGUgKm5pLCBjb25zdCBWQ04gdmNuLAotCQljb25zdCBCT09MIHdyaXRlX2xvY2tlZCk7CisJCWNvbnN0IGJvb2wgd3JpdGVfbG9ja2VkKTsKIAogZXh0ZXJuIHJ1bmxpc3RfZWxlbWVudCAqbnRmc19hdHRyX2ZpbmRfdmNuX25vbG9jayhudGZzX2lub2RlICpuaSwKIAkJY29uc3QgVkNOIHZjbiwgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCk7CmRpZmYgLS1naXQgYS9mcy9udGZzL2JpdG1hcC5jIGIvZnMvbnRmcy9iaXRtYXAuYwppbmRleCA3YTE5MGNkLi4wODA5Y2Y4IDEwMDY0NAotLS0gYS9mcy9udGZzL2JpdG1hcC5jCisrKyBiL2ZzL250ZnMvYml0bWFwLmMKQEAgLTM0LDE4ICszNCwxOCBAQAogICogQHN0YXJ0X2JpdDoJCWZpcnN0IGJpdCB0byBzZXQKICAqIEBjb3VudDoJCW51bWJlciBvZiBiaXRzIHRvIHNldAogICogQHZhbHVlOgkJdmFsdWUgdG8gc2V0IHRoZSBiaXRzIHRvIChpLmUuIDAgb3IgMSkKLSAqIEBpc19yb2xsYmFjazoJaWYgVFJVRSB0aGlzIGlzIGEgcm9sbGJhY2sgb3BlcmF0aW9uCisgKiBAaXNfcm9sbGJhY2s6CWlmICd0cnVlJyB0aGlzIGlzIGEgcm9sbGJhY2sgb3BlcmF0aW9uCiAgKgogICogU2V0IEBjb3VudCBiaXRzIHN0YXJ0aW5nIGF0IGJpdCBAc3RhcnRfYml0IGluIHRoZSBiaXRtYXAgZGVzY3JpYmVkIGJ5IHRoZQogICogdmZzIGlub2RlIEB2aSB0byBAdmFsdWUsIHdoZXJlIEB2YWx1ZSBpcyBlaXRoZXIgMCBvciAxLgogICoKLSAqIEBpc19yb2xsYmFjayBzaG91bGQgYWx3YXlzIGJlIEZBTFNFLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIHRvIHJvbGxiYWNrCisgKiBAaXNfcm9sbGJhY2sgc2hvdWxkIGFsd2F5cyBiZSAnZmFsc2UnLCBpdCBpcyBmb3IgaW50ZXJuYWwgdXNlIHRvIHJvbGxiYWNrCiAgKiBlcnJvcnMuICBZb3UgcHJvYmFibHkgd2FudCB0byB1c2UgbnRmc19iaXRtYXBfc2V0X2JpdHNfaW5fcnVuKCkgaW5zdGVhZC4KICAqCiAgKiBSZXR1cm4gMCBvbiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuCiAgKi8KIGludCBfX250ZnNfYml0bWFwX3NldF9iaXRzX2luX3J1bihzdHJ1Y3QgaW5vZGUgKnZpLCBjb25zdCBzNjQgc3RhcnRfYml0LAotCQljb25zdCBzNjQgY291bnQsIGNvbnN0IHU4IHZhbHVlLCBjb25zdCBCT09MIGlzX3JvbGxiYWNrKQorCQljb25zdCBzNjQgY291bnQsIGNvbnN0IHU4IHZhbHVlLCBjb25zdCBib29sIGlzX3JvbGxiYWNrKQogewogCXM2NCBjbnQgPSBjb3VudDsKIAlwZ29mZl90IGluZGV4LCBlbmRfaW5kZXg7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAkJcmV0dXJuIFBUUl9FUlIocGFnZSk7CiAJaWYgKGNvdW50ICE9IGNudCkKIAkJcG9zID0gX19udGZzX2JpdG1hcF9zZXRfYml0c19pbl9ydW4odmksIHN0YXJ0X2JpdCwgY291bnQgLSBjbnQsCi0JCQkJdmFsdWUgPyAwIDogMSwgVFJVRSk7CisJCQkJdmFsdWUgPyAwIDogMSwgdHJ1ZSk7CiAJZWxzZQogCQlwb3MgPSAwOwogCWlmICghcG9zKSB7CmRpZmYgLS1naXQgYS9mcy9udGZzL2JpdG1hcC5oIGIvZnMvbnRmcy9iaXRtYXAuaAppbmRleCBiYjUwZDZiLi43MmM5YWQ4IDEwMDY0NAotLS0gYS9mcy9udGZzL2JpdG1hcC5oCisrKyBiL2ZzL250ZnMvYml0bWFwLmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogCiBleHRlcm4gaW50IF9fbnRmc19iaXRtYXBfc2V0X2JpdHNfaW5fcnVuKHN0cnVjdCBpbm9kZSAqdmksIGNvbnN0IHM2NCBzdGFydF9iaXQsCi0JCWNvbnN0IHM2NCBjb3VudCwgY29uc3QgdTggdmFsdWUsIGNvbnN0IEJPT0wgaXNfcm9sbGJhY2spOworCQljb25zdCBzNjQgY291bnQsIGNvbnN0IHU4IHZhbHVlLCBjb25zdCBib29sIGlzX3JvbGxiYWNrKTsKIAogLyoqCiAgKiBudGZzX2JpdG1hcF9zZXRfYml0c19pbl9ydW4gLSBzZXQgYSBydW4gb2YgYml0cyBpbiBhIGJpdG1hcCB0byBhIHZhbHVlCkBAIC00OCw3ICs0OCw3IEBACiAJCWNvbnN0IHM2NCBzdGFydF9iaXQsIGNvbnN0IHM2NCBjb3VudCwgY29uc3QgdTggdmFsdWUpCiB7CiAJcmV0dXJuIF9fbnRmc19iaXRtYXBfc2V0X2JpdHNfaW5fcnVuKHZpLCBzdGFydF9iaXQsIGNvdW50LCB2YWx1ZSwKLQkJCUZBTFNFKTsKKwkJCWZhbHNlKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbGxhdGUuaCBiL2ZzL250ZnMvY29sbGF0ZS5oCmluZGV4IGUwMjdmMzYuLmFiYTgzMzQgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvY29sbGF0ZS5oCisrKyBiL2ZzL250ZnMvY29sbGF0ZS5oCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAidHlwZXMuaCIKICNpbmNsdWRlICJ2b2x1bWUuaCIKIAotc3RhdGljIGlubGluZSBCT09MIG50ZnNfaXNfY29sbGF0aW9uX3J1bGVfc3VwcG9ydGVkKENPTExBVElPTl9SVUxFIGNyKSB7CitzdGF0aWMgaW5saW5lIGJvb2wgbnRmc19pc19jb2xsYXRpb25fcnVsZV9zdXBwb3J0ZWQoQ09MTEFUSU9OX1JVTEUgY3IpIHsKIAlpbnQgaTsKIAogCS8qCkBAIC0zNSwxMiArMzUsMTIgQEAKIAkgKiBub3cuCiAJICovCiAJaWYgKHVubGlrZWx5KGNyICE9IENPTExBVElPTl9CSU5BUlkgJiYgY3IgIT0gQ09MTEFUSU9OX05UT0ZTX1VMT05HKSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJaSA9IGxlMzJfdG9fY3B1KGNyKTsKIAlpZiAobGlrZWx5KCgoaSA+PSAwKSAmJiAoaSA8PSAweDAyKSkgfHwKIAkJCSgoaSA+PSAweDEwKSAmJiAoaSA8PSAweDEzKSkpKQotCQlyZXR1cm4gVFJVRTsKLQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiB0cnVlOworCXJldHVybiBmYWxzZTsKIH0KIAogZXh0ZXJuIGludCBudGZzX2NvbGxhdGUobnRmc192b2x1bWUgKnZvbCwgQ09MTEFUSU9OX1JVTEUgY3IsCmRpZmYgLS1naXQgYS9mcy9udGZzL2NvbXByZXNzLmMgYi9mcy9udGZzL2NvbXByZXNzLmMKaW5kZXggNjhhNjA3Zi4uZDk4ZGFmNSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9jb21wcmVzcy5jCisrKyBiL2ZzL250ZnMvY29tcHJlc3MuYwpAQCAtNjAwLDcgKzYwMCw3IEBACiAJcmwgPSBOVUxMOwogCWZvciAodmNuID0gc3RhcnRfdmNuLCBzdGFydF92Y24gKz0gY2JfY2x1c3RlcnM7IHZjbiA8IHN0YXJ0X3ZjbjsKIAkJCXZjbisrKSB7Ci0JCUJPT0wgaXNfcmV0cnkgPSBGQUxTRTsKKwkJYm9vbCBpc19yZXRyeSA9IGZhbHNlOwogCiAJCWlmICghcmwpIHsKIGxvY2tfcmV0cnlfcmVtYXA6CkBAIC02MjYsNyArNjI2LDcgQEAKIAkJCQlicmVhazsKIAkJCWlmIChpc19yZXRyeSB8fCBsY24gIT0gTENOX1JMX05PVF9NQVBQRUQpCiAJCQkJZ290byBybF9lcnI7Ci0JCQlpc19yZXRyeSA9IFRSVUU7CisJCQlpc19yZXRyeSA9IHRydWU7CiAJCQkvKgogCQkJICogQXR0ZW1wdCB0byBtYXAgcnVubGlzdCwgZHJvcHBpbmcgbG9jayBmb3IgdGhlCiAJCQkgKiBkdXJhdGlvbi4KZGlmZiAtLWdpdCBhL2ZzL250ZnMvZGlyLmMgYi9mcy9udGZzL2Rpci5jCmluZGV4IGQxZTJjNmYuLjg1YzM2YjggMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvZGlyLmMKKysrIGIvZnMvbnRmcy9kaXIuYwpAQCAtMTE0OSw4ICsxMTQ5LDcgQEAKIAkgKiBBbGxvY2F0ZSBhIGJ1ZmZlciB0byBzdG9yZSB0aGUgY3VycmVudCBuYW1lIGJlaW5nIHByb2Nlc3NlZAogCSAqIGNvbnZlcnRlZCB0byBmb3JtYXQgZGV0ZXJtaW5lZCBieSBjdXJyZW50IE5MUy4KIAkgKi8KLQluYW1lID0gKHU4KilrbWFsbG9jKE5URlNfTUFYX05BTUVfTEVOICogTkxTX01BWF9DSEFSU0VUX1NJWkUgKyAxLAotCQkJR0ZQX05PRlMpOworCW5hbWUgPSBrbWFsbG9jKE5URlNfTUFYX05BTUVfTEVOICogTkxTX01BWF9DSEFSU0VUX1NJWkUgKyAxLCBHRlBfTk9GUyk7CiAJaWYgKHVubGlrZWx5KCFuYW1lKSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl9vdXQ7CkBAIC0xMTkxLDcgKzExOTAsNyBAQAogCSAqIG1hcCB0aGUgbWZ0IHJlY29yZCB3aXRob3V0IGRlYWRsb2NraW5nLgogCSAqLwogCXJjID0gbGUzMl90b19jcHUoY3R4LT5hdHRyLT5kYXRhLnJlc2lkZW50LnZhbHVlX2xlbmd0aCk7Ci0JaXIgPSAoSU5ERVhfUk9PVCopa21hbGxvYyhyYywgR0ZQX05PRlMpOworCWlyID0ga21hbGxvYyhyYywgR0ZQX05PRlMpOwogCWlmICh1bmxpa2VseSghaXIpKSB7CiAJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gZXJyX291dDsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvZmlsZS5jIGIvZnMvbnRmcy9maWxlLmMKaW5kZXggMmU0MmMyZC4uYWUyZmUwMCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9maWxlLmMKKysrIGIvZnMvbnRmcy9maWxlLmMKQEAgLTUwOSw3ICs1MDksNyBAQAogCXUzMiBhdHRyX3JlY19sZW4gPSAwOwogCXVuc2lnbmVkIGJsb2Nrc2l6ZSwgdTsKIAlpbnQgZXJyLCBtcF9zaXplOwotCUJPT0wgcmxfd3JpdGVfbG9ja2VkLCB3YXNfaG9sZSwgaXNfcmV0cnk7CisJYm9vbCBybF93cml0ZV9sb2NrZWQsIHdhc19ob2xlLCBpc19yZXRyeTsKIAl1bnNpZ25lZCBjaGFyIGJsb2Nrc2l6ZV9iaXRzOwogCXN0cnVjdCB7CiAJCXU4IHJ1bmxpc3RfbWVyZ2VkOjE7CkBAIC01NDMsMTMgKzU0MywxMyBAQAogCQkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAJfSB3aGlsZSAoKyt1IDwgbnJfcGFnZXMpOwotCXJsX3dyaXRlX2xvY2tlZCA9IEZBTFNFOworCXJsX3dyaXRlX2xvY2tlZCA9IGZhbHNlOwogCXJsID0gTlVMTDsKIAllcnIgPSAwOwogCXZjbiA9IGxjbiA9IC0xOwogCXZjbl9sZW4gPSAwOwogCWxjbl9ibG9jayA9IC0xOwotCXdhc19ob2xlID0gRkFMU0U7CisJd2FzX2hvbGUgPSBmYWxzZTsKIAljcG9zID0gcG9zID4+IHZvbC0+Y2x1c3Rlcl9zaXplX2JpdHM7CiAJZW5kID0gcG9zICsgYnl0ZXM7CiAJY2VuZCA9IChlbmQgKyB2b2wtPmNsdXN0ZXJfc2l6ZSAtIDEpID4+IHZvbC0+Y2x1c3Rlcl9zaXplX2JpdHM7CkBAIC03NjAsNyArNzYwLDcgQEAKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlzX3JldHJ5ID0gRkFMU0U7CisJCWlzX3JldHJ5ID0gZmFsc2U7CiAJCWlmICghcmwpIHsKIAkJCWRvd25fcmVhZCgmbmktPnJ1bmxpc3QubG9jayk7CiByZXRyeV9yZW1hcDoKQEAgLTc3Niw3ICs3NzYsNyBAQAogCQkJCSAqIFN1Y2Nlc3NmdWwgcmVtYXAsIHNldHVwIHRoZSBtYXAgY2FjaGUgYW5kCiAJCQkJICogdXNlIHRoYXQgdG8gZGVhbCB3aXRoIHRoZSBidWZmZXIuCiAJCQkJICovCi0JCQkJd2FzX2hvbGUgPSBGQUxTRTsKKwkJCQl3YXNfaG9sZSA9IGZhbHNlOwogCQkJCXZjbiA9IGJoX2Nwb3M7CiAJCQkJdmNuX2xlbiA9IHJsWzFdLnZjbiAtIHZjbjsKIAkJCQlsY25fYmxvY2sgPSBsY24gPDwgKHZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMgLQpAQCAtNzkyLDcgKzc5Miw3IEBACiAJCQkJaWYgKGxpa2VseSh2Y24gKyB2Y25fbGVuID49IGNlbmQpKSB7CiAJCQkJCWlmIChybF93cml0ZV9sb2NrZWQpIHsKIAkJCQkJCXVwX3dyaXRlKCZuaS0+cnVubGlzdC5sb2NrKTsKLQkJCQkJCXJsX3dyaXRlX2xvY2tlZCA9IEZBTFNFOworCQkJCQkJcmxfd3JpdGVfbG9ja2VkID0gZmFsc2U7CiAJCQkJCX0gZWxzZQogCQkJCQkJdXBfcmVhZCgmbmktPnJ1bmxpc3QubG9jayk7CiAJCQkJCXJsID0gTlVMTDsKQEAgLTgxOCwxMyArODE4LDEzIEBACiAJCQkJCSAqLwogCQkJCQl1cF9yZWFkKCZuaS0+cnVubGlzdC5sb2NrKTsKIAkJCQkJZG93bl93cml0ZSgmbmktPnJ1bmxpc3QubG9jayk7Ci0JCQkJCXJsX3dyaXRlX2xvY2tlZCA9IFRSVUU7CisJCQkJCXJsX3dyaXRlX2xvY2tlZCA9IHRydWU7CiAJCQkJCWdvdG8gcmV0cnlfcmVtYXA7CiAJCQkJfQogCQkJCWVyciA9IG50ZnNfbWFwX3J1bmxpc3Rfbm9sb2NrKG5pLCBiaF9jcG9zLAogCQkJCQkJTlVMTCk7CiAJCQkJaWYgKGxpa2VseSghZXJyKSkgewotCQkJCQlpc19yZXRyeSA9IFRSVUU7CisJCQkJCWlzX3JldHJ5ID0gdHJ1ZTsKIAkJCQkJZ290byByZXRyeV9yZW1hcDsKIAkJCQl9CiAJCQkJLyoKQEAgLTkwMyw3ICs5MDMsNyBAQAogCQlpZiAoIXJsX3dyaXRlX2xvY2tlZCkgewogCQkJdXBfcmVhZCgmbmktPnJ1bmxpc3QubG9jayk7CiAJCQlkb3duX3dyaXRlKCZuaS0+cnVubGlzdC5sb2NrKTsKLQkJCXJsX3dyaXRlX2xvY2tlZCA9IFRSVUU7CisJCQlybF93cml0ZV9sb2NrZWQgPSB0cnVlOwogCQkJZ290byByZXRyeV9yZW1hcDsKIAkJfQogCQkvKiBGaW5kIHRoZSBwcmV2aW91cyBsYXN0IGFsbG9jYXRlZCBjbHVzdGVyLiAqLwpAQCAtOTE3LDcgKzkxNyw3IEBACiAJCQl9CiAJCX0KIAkJcmwyID0gbnRmc19jbHVzdGVyX2FsbG9jKHZvbCwgYmhfY3BvcywgMSwgbGNuLCBEQVRBX1pPTkUsCi0JCQkJRkFMU0UpOworCQkJCWZhbHNlKTsKIAkJaWYgKElTX0VSUihybDIpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHJsMik7CiAJCQludGZzX2RlYnVnKCJGYWlsZWQgdG8gYWxsb2NhdGUgY2x1c3RlciwgZXJyb3IgY29kZSAlaS4iLApAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIAkJc3RhdHVzLm1mdF9hdHRyX21hcHBlZCA9IDA7CiAJCXN0YXR1cy5tcF9yZWJ1aWx0ID0gMDsKIAkJLyogU2V0dXAgdGhlIG1hcCBjYWNoZSBhbmQgdXNlIHRoYXQgdG8gZGVhbCB3aXRoIHRoZSBidWZmZXIuICovCi0JCXdhc19ob2xlID0gVFJVRTsKKwkJd2FzX2hvbGUgPSB0cnVlOwogCQl2Y24gPSBiaF9jcG9zOwogCQl2Y25fbGVuID0gMTsKIAkJbGNuX2Jsb2NrID0gbGNuIDw8ICh2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzIC0gYmxvY2tzaXplX2JpdHMpOwpAQCAtMTEwNSw3ICsxMTA1LDcgQEAKIAkJICovCiAJCWlmIChsaWtlbHkodmNuICsgdmNuX2xlbiA+PSBjZW5kKSkgewogCQkJdXBfd3JpdGUoJm5pLT5ydW5saXN0LmxvY2spOwotCQkJcmxfd3JpdGVfbG9ja2VkID0gRkFMU0U7CisJCQlybF93cml0ZV9sb2NrZWQgPSBmYWxzZTsKIAkJCXJsID0gTlVMTDsKIAkJfQogCQlnb3RvIG1hcF9idWZmZXJfY2FjaGVkOwpAQCAtMTExNyw3ICsxMTE3LDcgQEAKIAlpZiAobGlrZWx5KCFlcnIpKSB7CiAJCWlmICh1bmxpa2VseShybF93cml0ZV9sb2NrZWQpKSB7CiAJCQl1cF93cml0ZSgmbmktPnJ1bmxpc3QubG9jayk7Ci0JCQlybF93cml0ZV9sb2NrZWQgPSBGQUxTRTsKKwkJCXJsX3dyaXRlX2xvY2tlZCA9IGZhbHNlOwogCQl9IGVsc2UgaWYgKHVubGlrZWx5KHJsKSkKIAkJCXVwX3JlYWQoJm5pLT5ydW5saXN0LmxvY2spOwogCQlybCA9IE5VTEw7CkBAIC0xNTI4LDE5ICsxNTI4LDE5IEBACiAJZG8gewogCQlzNjQgYmhfcG9zOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQkJQk9PTCBwYXJ0aWFsOworCQlib29sIHBhcnRpYWw7CiAKIAkJcGFnZSA9IHBhZ2VzW3VdOwogCQliaF9wb3MgPSAoczY0KXBhZ2UtPmluZGV4IDw8IFBBR0VfQ0FDSEVfU0hJRlQ7CiAJCWJoID0gaGVhZCA9IHBhZ2VfYnVmZmVycyhwYWdlKTsKLQkJcGFydGlhbCA9IEZBTFNFOworCQlwYXJ0aWFsID0gZmFsc2U7CiAJCWRvIHsKIAkJCXM2NCBiaF9lbmQ7CiAKIAkJCWJoX2VuZCA9IGJoX3BvcyArIGJsb2Nrc2l6ZTsKIAkJCWlmIChiaF9lbmQgPD0gcG9zIHx8IGJoX3BvcyA+PSBlbmQpIHsKIAkJCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShiaCkpCi0JCQkJCXBhcnRpYWwgPSBUUlVFOworCQkJCQlwYXJ0aWFsID0gdHJ1ZTsKIAkJCX0gZWxzZSB7CiAJCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaCk7CiAJCQkJbWFya19idWZmZXJfZGlydHkoYmgpOwpAQCAtMTk5Nyw3ICsxOTk3LDcgQEAKIAkJCQkgKi8KIAkJCQlkb3duX3JlYWQoJm5pLT5ydW5saXN0LmxvY2spOwogCQkJCWxjbiA9IG50ZnNfYXR0cl92Y25fdG9fbGNuX25vbG9jayhuaSwgcG9zID4+Ci0JCQkJCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzLCBGQUxTRSk7CisJCQkJCQl2b2wtPmNsdXN0ZXJfc2l6ZV9iaXRzLCBmYWxzZSk7CiAJCQkJdXBfcmVhZCgmbmktPnJ1bmxpc3QubG9jayk7CiAJCQkJaWYgKHVubGlrZWx5KGxjbiA8IExDTl9IT0xFKSkgewogCQkJCQlzdGF0dXMgPSAtRUlPOwpAQCAtMjE3NiwyMCArMjE3NiwxOCBAQAogLyoqCiAgKiBudGZzX2ZpbGVfYWlvX3dyaXRlIC0KICAqLwotc3RhdGljIHNzaXplX3QgbnRmc19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCXNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK3N0YXRpYyBzc2l6ZV90IG50ZnNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBmaWxlICpmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKIAlzc2l6ZV90IHJldDsKLQlzdHJ1Y3QgaW92ZWMgbG9jYWxfaW92ID0geyAuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKilidWYsCi0JCQkJICAgLmlvdl9sZW4gPSBjb3VudCB9OwogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IG50ZnNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsICZsb2NhbF9pb3YsIDEsICZpb2NiLT5raV9wb3MpOworCXJldCA9IG50ZnNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKGlvY2IsIGlvdiwgbnJfc2VncywgJmlvY2ItPmtpX3Bvcyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJaWYgKHJldCA+IDAgJiYgKChmaWxlLT5mX2ZsYWdzICYgT19TWU5DKSB8fCBJU19TWU5DKGlub2RlKSkpIHsKIAkJaW50IGVyciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgcG9zLCByZXQpOwpAQCAtMjI5OCwxMyArMjI5NiwxMSBAQAogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIG50ZnNfZmlsZV9vcHMgPSB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAkgLyogU2VlayBpbnNpZGUgZmlsZS4gKi8KLQkucmVhZAkJPSBnZW5lcmljX2ZpbGVfcmVhZCwJIC8qIFJlYWQgZnJvbSBmaWxlLiAqLworCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwJCSAvKiBSZWFkIGZyb20gZmlsZS4gKi8KIAkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsIC8qIEFzeW5jIHJlYWQgZnJvbSBmaWxlLiAqLwotCS5yZWFkdgkJPSBnZW5lcmljX2ZpbGVfcmVhZHYsCSAvKiBSZWFkIGZyb20gZmlsZS4gKi8KICNpZmRlZiBOVEZTX1JXCiAJLndyaXRlCQk9IG50ZnNfZmlsZV93cml0ZSwJIC8qIFdyaXRlIHRvIGZpbGUuICovCiAJLmFpb193cml0ZQk9IG50ZnNfZmlsZV9haW9fd3JpdGUsCSAvKiBBc3luYyB3cml0ZSB0byBmaWxlLiAqLwotCS53cml0ZXYJCT0gbnRmc19maWxlX3dyaXRldiwJIC8qIFdyaXRlIHRvIGZpbGUuICovCiAJLyoucmVsZWFzZQk9ICwqLwkJCSAvKiBMYXN0IGZpbGUgaXMgY2xvc2VkLiAgU2VlCiAJCQkJCQkgICAgZnMvZXh0Mi9maWxlLmM6OgogCQkJCQkJICAgIGV4dDJfcmVsZWFzZV9maWxlKCkgZm9yCmRpZmYgLS1naXQgYS9mcy9udGZzL2luZGV4LmMgYi9mcy9udGZzL2luZGV4LmMKaW5kZXggOWY1NDI3Yy4uZTMyY2RlNCAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbmRleC5jCisrKyBiL2ZzL250ZnMvaW5kZXguYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCWlmICgoa2V5X2xlbiA9PSBsZTE2X3RvX2NwdShpZS0+a2V5X2xlbmd0aCkpICYmICFtZW1jbXAoa2V5LAogCQkJCSZpZS0+a2V5LCBrZXlfbGVuKSkgewogaXJfZG9uZToKLQkJCWljdHgtPmlzX2luX3Jvb3QgPSBUUlVFOworCQkJaWN0eC0+aXNfaW5fcm9vdCA9IHRydWU7CiAJCQlpY3R4LT5pciA9IGlyOwogCQkJaWN0eC0+YWN0eCA9IGFjdHg7CiAJCQlpY3R4LT5iYXNlX25pID0gYmFzZV9uaTsKQEAgLTM3NCw3ICszNzQsNyBAQAogCQlpZiAoKGtleV9sZW4gPT0gbGUxNl90b19jcHUoaWUtPmtleV9sZW5ndGgpKSAmJiAhbWVtY21wKGtleSwKIAkJCQkmaWUtPmtleSwga2V5X2xlbikpIHsKIGlhX2RvbmU6Ci0JCQlpY3R4LT5pc19pbl9yb290ID0gRkFMU0U7CisJCQlpY3R4LT5pc19pbl9yb290ID0gZmFsc2U7CiAJCQlpY3R4LT5hY3R4ID0gTlVMTDsKIAkJCWljdHgtPmJhc2VfbmkgPSBOVUxMOwogCQkJaWN0eC0+aWEgPSBpYTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvaW5kZXguaCBiL2ZzL250ZnMvaW5kZXguaAppbmRleCA4NDZhNDg5Li44NzQ1NDY5IDEwMDY0NAotLS0gYS9mcy9udGZzL2luZGV4LmgKKysrIGIvZnMvbnRmcy9pbmRleC5oCkBAIC0zNywxMiArMzcsMTIgQEAKICAqIEBlbnRyeToJaW5kZXggZW50cnkgKHBvaW50cyBpbnRvIEBpciBvciBAaWEpCiAgKiBAZGF0YToJaW5kZXggZW50cnkgZGF0YSAocG9pbnRzIGludG8gQGVudHJ5KQogICogQGRhdGFfbGVuOglsZW5ndGggaW4gYnl0ZXMgb2YgQGRhdGEKLSAqIEBpc19pbl9yb290OglUUlVFIGlmIEBlbnRyeSBpcyBpbiBAaXIgYW5kIEZBTFNFIGlmIGl0IGlzIGluIEBpYQorICogQGlzX2luX3Jvb3Q6CSd0cnVlJyBpZiBAZW50cnkgaXMgaW4gQGlyIGFuZCAnZmFsc2UnIGlmIGl0IGlzIGluIEBpYQogICogQGlyOgkJaW5kZXggcm9vdCBpZiBAaXNfaW5fcm9vdCBhbmQgTlVMTCBvdGhlcndpc2UKICAqIEBhY3R4OglhdHRyaWJ1dGUgc2VhcmNoIGNvbnRleHQgaWYgQGlzX2luX3Jvb3QgYW5kIE5VTEwgb3RoZXJ3aXNlCiAgKiBAYmFzZV9uaToJYmFzZSBpbm9kZSBpZiBAaXNfaW5fcm9vdCBhbmQgTlVMTCBvdGhlcndpc2UKLSAqIEBpYToJCWluZGV4IGJsb2NrIGlmIEBpc19pbl9yb290IGlzIEZBTFNFIGFuZCBOVUxMIG90aGVyd2lzZQotICogQHBhZ2U6CXBhZ2UgaWYgQGlzX2luX3Jvb3QgaXMgRkFMU0UgYW5kIE5VTEwgb3RoZXJ3aXNlCisgKiBAaWE6CQlpbmRleCBibG9jayBpZiBAaXNfaW5fcm9vdCBpcyAnZmFsc2UnIGFuZCBOVUxMIG90aGVyd2lzZQorICogQHBhZ2U6CXBhZ2UgaWYgQGlzX2luX3Jvb3QgaXMgJ2ZhbHNlJyBhbmQgTlVMTCBvdGhlcndpc2UKICAqCiAgKiBAaWR4X25pIGlzIHRoZSBpbmRleCBpbm9kZSB0aGlzIGNvbnRleHQgYmVsb25ncyB0by4KICAqCkBAIC01MCwxMSArNTAsMTEgQEAKICAqIGFyZSB0aGUgaW5kZXggZW50cnkgZGF0YSBhbmQgaXRzIGxlbmd0aCBpbiBieXRlcywgcmVzcGVjdGl2ZWx5LiAgQGRhdGEKICAqIHNpbXBseSBwb2ludHMgaW50byBAZW50cnkuICBUaGlzIGlzIHByb2JhYmx5IHdoYXQgdGhlIHVzZXIgaXMgaW50ZXJlc3RlZCBpbi4KICAqCi0gKiBJZiBAaXNfaW5fcm9vdCBpcyBUUlVFLCBAZW50cnkgaXMgaW4gdGhlIGluZGV4IHJvb3QgYXR0cmlidXRlIEBpciBkZXNjcmliZWQKKyAqIElmIEBpc19pbl9yb290IGlzICd0cnVlJywgQGVudHJ5IGlzIGluIHRoZSBpbmRleCByb290IGF0dHJpYnV0ZSBAaXIgZGVzY3JpYmVkCiAgKiBieSB0aGUgYXR0cmlidXRlIHNlYXJjaCBjb250ZXh0IEBhY3R4IGFuZCB0aGUgYmFzZSBpbm9kZSBAYmFzZV9uaS4gIEBpYSBhbmQKICAqIEBwYWdlIGFyZSBOVUxMIGluIHRoaXMgY2FzZS4KICAqCi0gKiBJZiBAaXNfaW5fcm9vdCBpcyBGQUxTRSwgQGVudHJ5IGlzIGluIHRoZSBpbmRleCBhbGxvY2F0aW9uIGF0dHJpYnV0ZSBhbmQgQGlhCisgKiBJZiBAaXNfaW5fcm9vdCBpcyAnZmFsc2UnLCBAZW50cnkgaXMgaW4gdGhlIGluZGV4IGFsbG9jYXRpb24gYXR0cmlidXRlIGFuZCBAaWEKICAqIGFuZCBAcGFnZSBwb2ludCB0byB0aGUgaW5kZXggYWxsb2NhdGlvbiBibG9jayBhbmQgdGhlIG1hcHBlZCwgbG9ja2VkIHBhZ2UgaXQKICAqIGlzIGluLCByZXNwZWN0aXZlbHkuICBAaXIsIEBhY3R4IGFuZCBAYmFzZV9uaSBhcmUgTlVMTCBpbiB0aGlzIGNhc2UuCiAgKgpAQCAtNzcsNyArNzcsNyBAQAogCUlOREVYX0VOVFJZICplbnRyeTsKIAl2b2lkICpkYXRhOwogCXUxNiBkYXRhX2xlbjsKLQlCT09MIGlzX2luX3Jvb3Q7CisJYm9vbCBpc19pbl9yb290OwogCUlOREVYX1JPT1QgKmlyOwogCW50ZnNfYXR0cl9zZWFyY2hfY3R4ICphY3R4OwogCW50ZnNfaW5vZGUgKmJhc2Vfbmk7CmRpZmYgLS1naXQgYS9mcy9udGZzL2lub2RlLmMgYi9mcy9udGZzL2lub2RlLmMKaW5kZXggZDMxM2YzNS4uMmQzZGU5YyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9pbm9kZS5jCisrKyBiL2ZzL250ZnMvaW5vZGUuYwpAQCAtMTM3LDcgKzEzNyw3IEBACiAKIAkJQlVHX09OKCFuYS0+bmFtZSk7CiAJCWkgPSBuYS0+bmFtZV9sZW4gKiBzaXplb2YobnRmc2NoYXIpOwotCQluaS0+bmFtZSA9IChudGZzY2hhciopa21hbGxvYyhpICsgc2l6ZW9mKG50ZnNjaGFyKSwgR0ZQX0FUT01JQyk7CisJCW5pLT5uYW1lID0ga21hbGxvYyhpICsgc2l6ZW9mKG50ZnNjaGFyKSwgR0ZQX0FUT01JQyk7CiAJCWlmICghbmktPm5hbWUpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJbWVtY3B5KG5pLT5uYW1lLCBuYS0+bmFtZSwgaSk7CkBAIC01NTYsOCArNTU2LDYgQEAKIAogCS8qIFNldHVwIHRoZSBnZW5lcmljIHZmcyBpbm9kZSBwYXJ0cyBub3cuICovCiAKLQkvKiBUaGlzIGlzIHRoZSBvcHRpbWFsIElPIHNpemUgKGZvciBzdGF0KSwgbm90IHRoZSBmcyBibG9jayBzaXplLiAqLwotCXZpLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJLyoKIAkgKiBUaGlzIGlzIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGlub2RlIGhhcyBjaGFuZ2VkIHcuci50LiBhIGZpbGUgc28KIAkgKiB0aGF0IHRoZSBmaWxlIGNhbiBiZSB1cGRhdGVkIGlmIG5lY2Vzc2FyeSAoY29tcGFyZSB3aXRoIGZfdmVyc2lvbikuCkBAIC0xMjM0LDcgKzEyMzIsNiBAQAogCWJhc2VfbmkgPSBOVEZTX0koYmFzZV92aSk7CiAKIAkvKiBKdXN0IG1pcnJvciB0aGUgdmFsdWVzIGZyb20gdGhlIGJhc2UgaW5vZGUuICovCi0JdmktPmlfYmxrc2l6ZQk9IGJhc2VfdmktPmlfYmxrc2l6ZTsKIAl2aS0+aV92ZXJzaW9uCT0gYmFzZV92aS0+aV92ZXJzaW9uOwogCXZpLT5pX3VpZAk9IGJhc2VfdmktPmlfdWlkOwogCXZpLT5pX2dpZAk9IGJhc2VfdmktPmlfZ2lkOwpAQCAtMTUwNCw3ICsxNTAxLDYgQEAKIAluaQk9IE5URlNfSSh2aSk7CiAJYmFzZV9uaSA9IE5URlNfSShiYXNlX3ZpKTsKIAkvKiBKdXN0IG1pcnJvciB0aGUgdmFsdWVzIGZyb20gdGhlIGJhc2UgaW5vZGUuICovCi0JdmktPmlfYmxrc2l6ZQk9IGJhc2VfdmktPmlfYmxrc2l6ZTsKIAl2aS0+aV92ZXJzaW9uCT0gYmFzZV92aS0+aV92ZXJzaW9uOwogCXZpLT5pX3VpZAk9IGJhc2VfdmktPmlfdWlkOwogCXZpLT5pX2dpZAk9IGJhc2VfdmktPmlfZ2lkOwpAQCAtMjMwNSw3ICsyMzAxLDcgQEAKIAl9CiAjaWZkZWYgTlRGU19SVwogCWlmIChOSW5vRGlydHkobmkpKSB7Ci0JCUJPT0wgd2FzX2JhZCA9IChpc19iYWRfaW5vZGUodmkpKTsKKwkJYm9vbCB3YXNfYmFkID0gKGlzX2JhZF9pbm9kZSh2aSkpOwogCiAJCS8qIENvbW1pdHRpbmcgdGhlIGlub2RlIGFsc28gY29tbWl0cyBhbGwgZXh0ZW50IGlub2Rlcy4gKi8KIAkJbnRmc19jb21taXRfaW5vZGUodmkpOwpAQCAtMzAxOSw3ICszMDE1LDcgQEAKIAlNRlRfUkVDT1JEICptOwogCVNUQU5EQVJEX0lORk9STUFUSU9OICpzaTsKIAlpbnQgZXJyID0gMDsKLQlCT09MIG1vZGlmaWVkID0gRkFMU0U7CisJYm9vbCBtb2RpZmllZCA9IGZhbHNlOwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcgZm9yICVzaW5vZGUgMHglbHguIiwgTklub0F0dHIobmkpID8gImF0dHIgIiA6ICIiLAogCQkJdmktPmlfaW5vKTsKQEAgLTMwNjEsNyArMzA1Nyw3IEBACiAJCQkJc2xlNjRfdG9fY3B1KHNpLT5sYXN0X2RhdGFfY2hhbmdlX3RpbWUpLAogCQkJCShsb25nIGxvbmcpc2xlNjRfdG9fY3B1KG50KSk7CiAJCXNpLT5sYXN0X2RhdGFfY2hhbmdlX3RpbWUgPSBudDsKLQkJbW9kaWZpZWQgPSBUUlVFOworCQltb2RpZmllZCA9IHRydWU7CiAJfQogCW50ID0gdXRjMm50ZnModmktPmlfY3RpbWUpOwogCWlmIChzaS0+bGFzdF9tZnRfY2hhbmdlX3RpbWUgIT0gbnQpIHsKQEAgLTMwNzAsNyArMzA2Niw3IEBACiAJCQkJc2xlNjRfdG9fY3B1KHNpLT5sYXN0X21mdF9jaGFuZ2VfdGltZSksCiAJCQkJKGxvbmcgbG9uZylzbGU2NF90b19jcHUobnQpKTsKIAkJc2ktPmxhc3RfbWZ0X2NoYW5nZV90aW1lID0gbnQ7Ci0JCW1vZGlmaWVkID0gVFJVRTsKKwkJbW9kaWZpZWQgPSB0cnVlOwogCX0KIAludCA9IHV0YzJudGZzKHZpLT5pX2F0aW1lKTsKIAlpZiAoc2ktPmxhc3RfYWNjZXNzX3RpbWUgIT0gbnQpIHsKQEAgLTMwNzksNyArMzA3NSw3IEBACiAJCQkJKGxvbmcgbG9uZylzbGU2NF90b19jcHUoc2ktPmxhc3RfYWNjZXNzX3RpbWUpLAogCQkJCShsb25nIGxvbmcpc2xlNjRfdG9fY3B1KG50KSk7CiAJCXNpLT5sYXN0X2FjY2Vzc190aW1lID0gbnQ7Ci0JCW1vZGlmaWVkID0gVFJVRTsKKwkJbW9kaWZpZWQgPSB0cnVlOwogCX0KIAkvKgogCSAqIElmIHdlIGp1c3QgbW9kaWZpZWQgdGhlIHN0YW5kYXJkIGluZm9ybWF0aW9uIGF0dHJpYnV0ZSB3ZSBuZWVkIHRvCmRpZmYgLS1naXQgYS9mcy9udGZzL2xheW91dC5oIGIvZnMvbnRmcy9sYXlvdXQuaAppbmRleCBkMzRiOTNjLi4xZTM4MzMyIDEwMDY0NAotLS0gYS9mcy9udGZzL2xheW91dC5oCisrKyBiL2ZzL250ZnMvbGF5b3V0LmgKQEAgLTE0MiwxMyArMTQyLDEzIEBACiAgKiBvcGVyYXRvciEgKC04CiAgKi8KIAotc3RhdGljIGlubGluZSBCT09MIF9fbnRmc19pc19tYWdpYyhsZTMyIHgsIE5URlNfUkVDT1JEX1RZUEUgcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX250ZnNfaXNfbWFnaWMobGUzMiB4LCBOVEZTX1JFQ09SRF9UWVBFIHIpCiB7CiAJcmV0dXJuICh4ID09IHIpOwogfQogI2RlZmluZSBudGZzX2lzX21hZ2ljKHgsIG0pCV9fbnRmc19pc19tYWdpYyh4LCBtYWdpY18jI20pCiAKLXN0YXRpYyBpbmxpbmUgQk9PTCBfX250ZnNfaXNfbWFnaWNwKGxlMzIgKnAsIE5URlNfUkVDT1JEX1RZUEUgcikKK3N0YXRpYyBpbmxpbmUgYm9vbCBfX250ZnNfaXNfbWFnaWNwKGxlMzIgKnAsIE5URlNfUkVDT1JEX1RZUEUgcikKIHsKIAlyZXR1cm4gKCpwID09IHIpOwogfQpAQCAtMzIzLDcgKzMyMyw3IEBACiAjZGVmaW5lIE1SRUZfTEUoeCkJKCh1bnNpZ25lZCBsb25nKShsZTY0X3RvX2NwdSh4KSAmIE1GVF9SRUZfTUFTS19DUFUpKQogI2RlZmluZSBNU0VRTk9fTEUoeCkJKCh1MTYpKChsZTY0X3RvX2NwdSh4KSA+PiA0OCkgJiAweGZmZmYpKQogCi0jZGVmaW5lIElTX0VSUl9NUkVGKHgpCSgoKHgpICYgMHgwMDAwODAwMDAwMDAwMDAwVUxMKSA/IDEgOiAwKQorI2RlZmluZSBJU19FUlJfTVJFRih4KQkoKCh4KSAmIDB4MDAwMDgwMDAwMDAwMDAwMFVMTCkgPyB0cnVlIDogZmFsc2UpCiAjZGVmaW5lIEVSUl9NUkVGKHgpCSgodTY0KSgoczY0KSh4KSkpCiAjZGVmaW5lIE1SRUZfRVJSKHgpCSgoaW50KSgoczY0KSh4KSkpCiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbGNuYWxsb2MuYyBiL2ZzL250ZnMvbGNuYWxsb2MuYwppbmRleCAyOWNhYmY5Li4xNzExYjcxIDEwMDY0NAotLS0gYS9mcy9udGZzL2xjbmFsbG9jLmMKKysrIGIvZnMvbnRmcy9sY25hbGxvYy5jCkBAIC03Niw3ICs3Niw3IEBACiAgKiBAY291bnQ6CW51bWJlciBvZiBjbHVzdGVycyB0byBhbGxvY2F0ZQogICogQHN0YXJ0X2xjbjoJc3RhcnRpbmcgbGNuIGF0IHdoaWNoIHRvIGFsbG9jYXRlIHRoZSBjbHVzdGVycyAob3IgLTEgaWYgbm9uZSkKICAqIEB6b25lOgl6b25lIGZyb20gd2hpY2ggdG8gYWxsb2NhdGUgdGhlIGNsdXN0ZXJzCi0gKiBAaXNfZXh0ZW5zaW9uOglpZiBUUlVFLCB0aGlzIGlzIGFuIGF0dHJpYnV0ZSBleHRlbnNpb24KKyAqIEBpc19leHRlbnNpb246CWlmICd0cnVlJywgdGhpcyBpcyBhbiBhdHRyaWJ1dGUgZXh0ZW5zaW9uCiAgKgogICogQWxsb2NhdGUgQGNvdW50IGNsdXN0ZXJzIHByZWZlcmFibHkgc3RhcnRpbmcgYXQgY2x1c3RlciBAc3RhcnRfbGNuIG9yIGF0IHRoZQogICogY3VycmVudCBhbGxvY2F0b3IgcG9zaXRpb24gaWYgQHN0YXJ0X2xjbiBpcyAtMSwgb24gdGhlIG1vdW50ZWQgbnRmcyB2b2x1bWUKQEAgLTg3LDExICs4NywxMSBAQAogICogQHN0YXJ0X3ZjbiBzcGVjaWZpZXMgdGhlIHZjbiBvZiB0aGUgZmlyc3QgYWxsb2NhdGVkIGNsdXN0ZXIuICBUaGlzIG1ha2VzCiAgKiBtZXJnaW5nIHRoZSByZXN1bHRpbmcgcnVubGlzdCB3aXRoIHRoZSBvbGQgcnVubGlzdCBlYXNpZXIuCiAgKgotICogSWYgQGlzX2V4dGVuc2lvbiBpcyBUUlVFLCB0aGUgY2FsbGVyIGlzIGFsbG9jYXRpbmcgY2x1c3RlcnMgdG8gZXh0ZW5kIGFuCi0gKiBhdHRyaWJ1dGUgYW5kIGlmIGl0IGlzIEZBTFNFLCB0aGUgY2FsbGVyIGlzIGFsbG9jYXRpbmcgY2x1c3RlcnMgdG8gZmlsbCBhCisgKiBJZiBAaXNfZXh0ZW5zaW9uIGlzICd0cnVlJywgdGhlIGNhbGxlciBpcyBhbGxvY2F0aW5nIGNsdXN0ZXJzIHRvIGV4dGVuZCBhbgorICogYXR0cmlidXRlIGFuZCBpZiBpdCBpcyAnZmFsc2UnLCB0aGUgY2FsbGVyIGlzIGFsbG9jYXRpbmcgY2x1c3RlcnMgdG8gZmlsbCBhCiAgKiBob2xlIGluIGFuIGF0dHJpYnV0ZS4gIFByYWN0aWNhbGx5IHRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgaWYgQGlzX2V4dGVuc2lvbgotICogaXMgVFJVRSB0aGUgcmV0dXJuZWQgcnVubGlzdCB3aWxsIGJlIHRlcm1pbmF0ZWQgd2l0aCBMQ05fRU5PRU5UIGFuZCBpZgotICogQGlzX2V4dGVuc2lvbiBpcyBGQUxTRSB0aGUgcnVubGlzdCB3aWxsIGJlIHRlcm1pbmF0ZWQgd2l0aAorICogaXMgJ3RydWUnIHRoZSByZXR1cm5lZCBydW5saXN0IHdpbGwgYmUgdGVybWluYXRlZCB3aXRoIExDTl9FTk9FTlQgYW5kIGlmCisgKiBAaXNfZXh0ZW5zaW9uIGlzICdmYWxzZScgdGhlIHJ1bmxpc3Qgd2lsbCBiZSB0ZXJtaW5hdGVkIHdpdGgKICAqIExDTl9STF9OT1RfTUFQUEVELgogICoKICAqIFlvdSBuZWVkIHRvIGNoZWNrIHRoZSByZXR1cm4gdmFsdWUgd2l0aCBJU19FUlIoKS4gIElmIHRoaXMgaXMgZmFsc2UsIHRoZQpAQCAtMTQ2LDcgKzE0Niw3IEBACiBydW5saXN0X2VsZW1lbnQgKm50ZnNfY2x1c3Rlcl9hbGxvYyhudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBWQ04gc3RhcnRfdmNuLAogCQljb25zdCBzNjQgY291bnQsIGNvbnN0IExDTiBzdGFydF9sY24sCiAJCWNvbnN0IE5URlNfQ0xVU1RFUl9BTExPQ0FUSU9OX1pPTkVTIHpvbmUsCi0JCWNvbnN0IEJPT0wgaXNfZXh0ZW5zaW9uKQorCQljb25zdCBib29sIGlzX2V4dGVuc2lvbikKIHsKIAlMQ04gem9uZV9zdGFydCwgem9uZV9lbmQsIGJtcF9wb3MsIGJtcF9pbml0aWFsX3BvcywgbGFzdF9yZWFkX3BvcywgbGNuOwogCUxDTiBwcmV2X2xjbiA9IDAsIHByZXZfcnVuX2xlbiA9IDAsIG1mdF96b25lX3NpemU7CkBAIC04MTgsNyArODE4LDcgQEAKICAqIEFzc3VtaW5nIHlvdSBjYWNoZSBjdHgtPmF0dHIgaW4gYSB2YXJpYWJsZSBAYSBvZiB0eXBlIEFUVFJfUkVDT1JEICogYW5kIHRoYXQKICAqIHlvdSBjYWNoZSBjdHgtPm1yZWMgaW4gYSB2YXJpYWJsZSBAbSBvZiB0eXBlIE1GVF9SRUNPUkQgKi4KICAqCi0gKiBAaXNfcm9sbGJhY2sgc2hvdWxkIGFsd2F5cyBiZSBGQUxTRSwgaXQgaXMgZm9yIGludGVybmFsIHVzZSB0byByb2xsYmFjaworICogQGlzX3JvbGxiYWNrIHNob3VsZCBhbHdheXMgYmUgJ2ZhbHNlJywgaXQgaXMgZm9yIGludGVybmFsIHVzZSB0byByb2xsYmFjawogICogZXJyb3JzLiAgWW91IHByb2JhYmx5IHdhbnQgdG8gdXNlIG50ZnNfY2x1c3Rlcl9mcmVlKCkgaW5zdGVhZC4KICAqCiAgKiBOb3RlLCBfX250ZnNfY2x1c3Rlcl9mcmVlKCkgZG9lcyBub3QgbW9kaWZ5IHRoZSBydW5saXN0LCBzbyB5b3UgaGF2ZSB0bwpAQCAtODI4LDcgKzgyOCw3IEBACiAgKiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuCiAgKgogICogV0FSTklORzogSWYgQGN0eCBpcyBzdXBwbGllZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpcwotICoJICAgIHJldHVybmVkLCB5b3UgbmVlZCB0byBjaGVjayBJU19FUlIoQGN0eC0+bXJlYykgYW5kIGlmIFRSVUUgdGhlIEBjdHgKKyAqCSAgICByZXR1cm5lZCwgeW91IG5lZWQgdG8gY2hlY2sgSVNfRVJSKEBjdHgtPm1yZWMpIGFuZCBpZiAndHJ1ZScgdGhlIEBjdHgKICAqCSAgICBpcyBubyBsb25nZXIgdmFsaWQsIGkuZS4geW91IG5lZWQgdG8gZWl0aGVyIGNhbGwKICAqCSAgICBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoKSBvciBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoKSBvbiBpdC4KICAqCSAgICBJbiB0aGF0IGNhc2UgUFRSX0VSUihAY3R4LT5tcmVjKSB3aWxsIGdpdmUgeW91IHRoZSBlcnJvciBjb2RlIGZvcgpAQCAtODQ3LDcgKzg0Nyw3IEBACiAgKgkgICAgICBhbmQgaXQgd2lsbCBiZSBsZWZ0IG1hcHBlZCBvbiByZXR1cm4uCiAgKi8KIHM2NCBfX250ZnNfY2x1c3Rlcl9mcmVlKG50ZnNfaW5vZGUgKm5pLCBjb25zdCBWQ04gc3RhcnRfdmNuLCBzNjQgY291bnQsCi0JCW50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIGNvbnN0IEJPT0wgaXNfcm9sbGJhY2spCisJCW50ZnNfYXR0cl9zZWFyY2hfY3R4ICpjdHgsIGNvbnN0IGJvb2wgaXNfcm9sbGJhY2spCiB7CiAJczY0IGRlbHRhLCB0b19mcmVlLCB0b3RhbF9mcmVlZCwgcmVhbF9mcmVlZDsKIAludGZzX3ZvbHVtZSAqdm9sOwpAQCAtOTk5LDcgKzk5OSw3IEBACiAJICogSWYgcm9sbGJhY2sgZmFpbHMsIHNldCB0aGUgdm9sdW1lIGVycm9ycyBmbGFnLCBlbWl0IGFuIGVycm9yCiAJICogbWVzc2FnZSwgYW5kIHJldHVybiB0aGUgZXJyb3IgY29kZS4KIAkgKi8KLQlkZWx0YSA9IF9fbnRmc19jbHVzdGVyX2ZyZWUobmksIHN0YXJ0X3ZjbiwgdG90YWxfZnJlZWQsIGN0eCwgVFJVRSk7CisJZGVsdGEgPSBfX250ZnNfY2x1c3Rlcl9mcmVlKG5pLCBzdGFydF92Y24sIHRvdGFsX2ZyZWVkLCBjdHgsIHRydWUpOwogCWlmIChkZWx0YSA8IDApIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIHJvbGxiYWNrIChlcnJvciAlaSkuICBMZWF2aW5nICIKIAkJCQkiaW5jb25zaXN0ZW50IG1ldGFkYXRhISAgVW5tb3VudCBhbmQgcnVuICIKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbGNuYWxsb2MuaCBiL2ZzL250ZnMvbGNuYWxsb2MuaAppbmRleCA3MmNiY2E3Li4yYWRiMDQzIDEwMDY0NAotLS0gYS9mcy9udGZzL2xjbmFsbG9jLmgKKysrIGIvZnMvbnRmcy9sY25hbGxvYy5oCkBAIC00MywxMCArNDMsMTAgQEAKIGV4dGVybiBydW5saXN0X2VsZW1lbnQgKm50ZnNfY2x1c3Rlcl9hbGxvYyhudGZzX3ZvbHVtZSAqdm9sLAogCQljb25zdCBWQ04gc3RhcnRfdmNuLCBjb25zdCBzNjQgY291bnQsIGNvbnN0IExDTiBzdGFydF9sY24sCiAJCWNvbnN0IE5URlNfQ0xVU1RFUl9BTExPQ0FUSU9OX1pPTkVTIHpvbmUsCi0JCWNvbnN0IEJPT0wgaXNfZXh0ZW5zaW9uKTsKKwkJY29uc3QgYm9vbCBpc19leHRlbnNpb24pOwogCiBleHRlcm4gczY0IF9fbnRmc19jbHVzdGVyX2ZyZWUobnRmc19pbm9kZSAqbmksIGNvbnN0IFZDTiBzdGFydF92Y24sCi0JCXM2NCBjb3VudCwgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgY29uc3QgQk9PTCBpc19yb2xsYmFjayk7CisJCXM2NCBjb3VudCwgbnRmc19hdHRyX3NlYXJjaF9jdHggKmN0eCwgY29uc3QgYm9vbCBpc19yb2xsYmFjayk7CiAKIC8qKgogICogbnRmc19jbHVzdGVyX2ZyZWUgLSBmcmVlIGNsdXN0ZXJzIG9uIGFuIG50ZnMgdm9sdW1lCkBAIC04Niw3ICs4Niw3IEBACiAgKiBzdWNjZXNzIGFuZCAtZXJybm8gb24gZXJyb3IuCiAgKgogICogV0FSTklORzogSWYgQGN0eCBpcyBzdXBwbGllZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBpcwotICoJICAgIHJldHVybmVkLCB5b3UgbmVlZCB0byBjaGVjayBJU19FUlIoQGN0eC0+bXJlYykgYW5kIGlmIFRSVUUgdGhlIEBjdHgKKyAqCSAgICByZXR1cm5lZCwgeW91IG5lZWQgdG8gY2hlY2sgSVNfRVJSKEBjdHgtPm1yZWMpIGFuZCBpZiAndHJ1ZScgdGhlIEBjdHgKICAqCSAgICBpcyBubyBsb25nZXIgdmFsaWQsIGkuZS4geW91IG5lZWQgdG8gZWl0aGVyIGNhbGwKICAqCSAgICBudGZzX2F0dHJfcmVpbml0X3NlYXJjaF9jdHgoKSBvciBudGZzX2F0dHJfcHV0X3NlYXJjaF9jdHgoKSBvbiBpdC4KICAqCSAgICBJbiB0aGF0IGNhc2UgUFRSX0VSUihAY3R4LT5tcmVjKSB3aWxsIGdpdmUgeW91IHRoZSBlcnJvciBjb2RlIGZvcgpAQCAtMTA3LDcgKzEwNyw3IEBACiBzdGF0aWMgaW5saW5lIHM2NCBudGZzX2NsdXN0ZXJfZnJlZShudGZzX2lub2RlICpuaSwgY29uc3QgVkNOIHN0YXJ0X3ZjbiwKIAkJczY0IGNvdW50LCBudGZzX2F0dHJfc2VhcmNoX2N0eCAqY3R4KQogewotCXJldHVybiBfX250ZnNfY2x1c3Rlcl9mcmVlKG5pLCBzdGFydF92Y24sIGNvdW50LCBjdHgsIEZBTFNFKTsKKwlyZXR1cm4gX19udGZzX2NsdXN0ZXJfZnJlZShuaSwgc3RhcnRfdmNuLCBjb3VudCwgY3R4LCBmYWxzZSk7CiB9CiAKIGV4dGVybiBpbnQgbnRmc19jbHVzdGVyX2ZyZWVfZnJvbV9ybF9ub2xvY2sobnRmc192b2x1bWUgKnZvbCwKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5jIGIvZnMvbnRmcy9sb2dmaWxlLmMKaW5kZXggNGFmMmFkMS4uYWNmZWQzMiAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmMKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmMKQEAgLTQxLDE4ICs0MSwxOCBAQAogICogQHJwOgkJcmVzdGFydCBwYWdlIGhlYWRlciB0byBjaGVjawogICogQHBvczoJcG9zaXRpb24gaW4gQHZpIGF0IHdoaWNoIHRoZSByZXN0YXJ0IHBhZ2UgaGVhZGVyIHJlc2lkZXMKICAqCi0gKiBDaGVjayB0aGUgcmVzdGFydCBwYWdlIGhlYWRlciBAcnAgZm9yIGNvbnNpc3RlbmN5IGFuZCByZXR1cm4gVFJVRSBpZiBpdCBpcwotICogY29uc2lzdGVudCBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgorICogQ2hlY2sgdGhlIHJlc3RhcnQgcGFnZSBoZWFkZXIgQHJwIGZvciBjb25zaXN0ZW5jeSBhbmQgcmV0dXJuICd0cnVlJyBpZiBpdCBpcworICogY29uc2lzdGVudCBhbmQgJ2ZhbHNlJyBvdGhlcndpc2UuCiAgKgogICogVGhpcyBmdW5jdGlvbiBvbmx5IG5lZWRzIE5URlNfQkxPQ0tfU0laRSBieXRlcyBpbiBAcnAsIGkuZS4gaXQgZG9lcyBub3QKICAqIHJlcXVpcmUgdGhlIGZ1bGwgcmVzdGFydCBwYWdlLgogICovCi1zdGF0aWMgQk9PTCBudGZzX2NoZWNrX3Jlc3RhcnRfcGFnZV9oZWFkZXIoc3RydWN0IGlub2RlICp2aSwKK3N0YXRpYyBib29sIG50ZnNfY2hlY2tfcmVzdGFydF9wYWdlX2hlYWRlcihzdHJ1Y3QgaW5vZGUgKnZpLAogCQlSRVNUQVJUX1BBR0VfSEVBREVSICpycCwgczY0IHBvcykKIHsKIAl1MzIgbG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplLCBsb2dmaWxlX2xvZ19wYWdlX3NpemU7CiAJdTE2IHJhX29mcywgdXNhX2NvdW50LCB1c2Ffb2ZzLCB1c2FfZW5kID0gMDsKLQlCT09MIGhhdmVfdXNhID0gVFJVRTsKKwlib29sIGhhdmVfdXNhID0gdHJ1ZTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nLiIpOwogCS8qCkBAIC02Nyw3ICs2Nyw3IEBACiAJCQkobG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplIC0gMSkgfHwKIAkJCWxvZ2ZpbGVfbG9nX3BhZ2Vfc2l6ZSAmIChsb2dmaWxlX2xvZ19wYWdlX3NpemUgLSAxKSkgewogCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiJExvZ0ZpbGUgdXNlcyB1bnN1cHBvcnRlZCBwYWdlIHNpemUuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKgogCSAqIFdlIG11c3QgYmUgZWl0aGVyIGF0ICFwb3MgKDFzdCByZXN0YXJ0IHBhZ2UpIG9yIGF0IHBvcyA9IHN5c3RlbSBwYWdlCkBAIC03Niw3ICs3Niw3IEBACiAJaWYgKHBvcyAmJiBwb3MgIT0gbG9nZmlsZV9zeXN0ZW1fcGFnZV9zaXplKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICJGb3VuZCByZXN0YXJ0IGFyZWEgaW4gaW5jb3JyZWN0ICIKIAkJCQkicG9zaXRpb24gaW4gJExvZ0ZpbGUuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKiBXZSBvbmx5IGtub3cgaG93IHRvIGhhbmRsZSB2ZXJzaW9uIDEuMS4gKi8KIAlpZiAoc2xlMTZfdG9fY3B1KHJwLT5tYWpvcl92ZXIpICE9IDEgfHwKQEAgLTg1LDE0ICs4NSwxNCBAQAogCQkJCSJzdXBwb3J0ZWQuICAoVGhpcyBkcml2ZXIgc3VwcG9ydHMgdmVyc2lvbiAiCiAJCQkJIjEuMSBvbmx5LikiLCAoaW50KXNsZTE2X3RvX2NwdShycC0+bWFqb3JfdmVyKSwKIAkJCQkoaW50KXNsZTE2X3RvX2NwdShycC0+bWlub3JfdmVyKSk7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKgogCSAqIElmIGNoa2RzayBoYXMgYmVlbiBydW4gdGhlIHJlc3RhcnQgcGFnZSBtYXkgbm90IGJlIHByb3RlY3RlZCBieSBhbgogCSAqIHVwZGF0ZSBzZXF1ZW5jZSBhcnJheS4KIAkgKi8KIAlpZiAobnRmc19pc19jaGtkX3JlY29yZChycC0+bWFnaWMpICYmICFsZTE2X3RvX2NwdShycC0+dXNhX2NvdW50KSkgewotCQloYXZlX3VzYSA9IEZBTFNFOworCQloYXZlX3VzYSA9IGZhbHNlOwogCQlnb3RvIHNraXBfdXNhX2NoZWNrczsKIAl9CiAJLyogVmVyaWZ5IHRoZSBzaXplIG9mIHRoZSB1cGRhdGUgc2VxdWVuY2UgYXJyYXkuICovCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlpZiAodXNhX2NvdW50ICE9IGxlMTZfdG9fY3B1KHJwLT51c2FfY291bnQpKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IHBhZ2Ugc3BlY2lmaWVzICIKIAkJCQkiaW5jb25zaXN0ZW50IHVwZGF0ZSBzZXF1ZW5jZSBhcnJheSBjb3VudC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qIFZlcmlmeSB0aGUgcG9zaXRpb24gb2YgdGhlIHVwZGF0ZSBzZXF1ZW5jZSBhcnJheS4gKi8KIAl1c2Ffb2ZzID0gbGUxNl90b19jcHUocnAtPnVzYV9vZnMpOwpAQCAtMTA5LDcgKzEwOSw3IEBACiAJCQl1c2FfZW5kID4gTlRGU19CTE9DS19TSVpFIC0gc2l6ZW9mKHUxNikpIHsKIAkJbnRmc19lcnJvcih2aS0+aV9zYiwgIiRMb2dGaWxlIHJlc3RhcnQgcGFnZSBzcGVjaWZpZXMgIgogCQkJCSJpbmNvbnNpc3RlbnQgdXBkYXRlIHNlcXVlbmNlIGFycmF5IG9mZnNldC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogc2tpcF91c2FfY2hlY2tzOgogCS8qCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkJCXJhX29mcyA+IGxvZ2ZpbGVfc3lzdGVtX3BhZ2Vfc2l6ZSkgewogCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiJExvZ0ZpbGUgcmVzdGFydCBwYWdlIHNwZWNpZmllcyAiCiAJCQkJImluY29uc2lzdGVudCByZXN0YXJ0IGFyZWEgb2Zmc2V0LiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyoKIAkgKiBPbmx5IHJlc3RhcnQgcGFnZXMgbW9kaWZpZWQgYnkgY2hrZHNrIGFyZSBhbGxvd2VkIHRvIGhhdmUgY2hrZHNrX2xzbgpAQCAtMTMzLDEwICsxMzMsMTAgQEAKIAlpZiAoIW50ZnNfaXNfY2hrZF9yZWNvcmQocnAtPm1hZ2ljKSAmJiBzbGU2NF90b19jcHUocnAtPmNoa2Rza19sc24pKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IHBhZ2UgaXMgbm90IG1vZGlmaWVkICIKIAkJCQkiYnkgY2hrZHNrIGJ1dCBhIGNoa2RzayBMU04gaXMgc3BlY2lmaWVkLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC0xNDUsNyArMTQ1LDcgQEAKICAqIEBycDoJCXJlc3RhcnQgcGFnZSB3aG9zZSByZXN0YXJ0IGFyZWEgdG8gY2hlY2sKICAqCiAgKiBDaGVjayB0aGUgcmVzdGFydCBhcmVhIG9mIHRoZSByZXN0YXJ0IHBhZ2UgQHJwIGZvciBjb25zaXN0ZW5jeSBhbmQgcmV0dXJuCi0gKiBUUlVFIGlmIGl0IGlzIGNvbnNpc3RlbnQgYW5kIEZBTFNFIG90aGVyd2lzZS4KKyAqICd0cnVlJyBpZiBpdCBpcyBjb25zaXN0ZW50IGFuZCAnZmFsc2UnIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgcmVzdGFydCBwYWdlIGhlYWRlciBoYXMgYWxyZWFkeSBiZWVuCiAgKiBjb25zaXN0ZW5jeSBjaGVja2VkLgpAQCAtMTUzLDcgKzE1Myw3IEBACiAgKiBUaGlzIGZ1bmN0aW9uIG9ubHkgbmVlZHMgTlRGU19CTE9DS19TSVpFIGJ5dGVzIGluIEBycCwgaS5lLiBpdCBkb2VzIG5vdAogICogcmVxdWlyZSB0aGUgZnVsbCByZXN0YXJ0IHBhZ2UuCiAgKi8KLXN0YXRpYyBCT09MIG50ZnNfY2hlY2tfcmVzdGFydF9hcmVhKHN0cnVjdCBpbm9kZSAqdmksIFJFU1RBUlRfUEFHRV9IRUFERVIgKnJwKQorc3RhdGljIGJvb2wgbnRmc19jaGVja19yZXN0YXJ0X2FyZWEoc3RydWN0IGlub2RlICp2aSwgUkVTVEFSVF9QQUdFX0hFQURFUiAqcnApCiB7CiAJdTY0IGZpbGVfc2l6ZTsKIAlSRVNUQVJUX0FSRUEgKnJhOwpAQCAtMTcyLDcgKzE3Miw3IEBACiAJCQlOVEZTX0JMT0NLX1NJWkUgLSBzaXplb2YodTE2KSkgewogCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiJExvZ0ZpbGUgcmVzdGFydCBhcmVhIHNwZWNpZmllcyAiCiAJCQkJImluY29uc2lzdGVudCBmaWxlIG9mZnNldC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qCiAJICogTm93IHRoYXQgd2UgY2FuIGFjY2VzcyByYS0+Y2xpZW50X2FycmF5X29mZnNldCwgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcKQEAgLTE4Niw3ICsxODYsNyBAQAogCQkJcmFfb2ZzICsgY2Ffb2ZzID4gTlRGU19CTE9DS19TSVpFIC0gc2l6ZW9mKHUxNikpIHsKIAkJbnRmc19lcnJvcih2aS0+aV9zYiwgIiRMb2dGaWxlIHJlc3RhcnQgYXJlYSBzcGVjaWZpZXMgIgogCQkJCSJpbmNvbnNpc3RlbnQgY2xpZW50IGFycmF5IG9mZnNldC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qCiAJICogVGhlIHJlc3RhcnQgYXJlYSBtdXN0IGVuZCB3aXRoaW4gdGhlIHN5c3RlbSBwYWdlIHNpemUgYm90aCB3aGVuCkBAIC0yMDMsNyArMjAzLDcgQEAKIAkJCQkib2YgdGhlIHN5c3RlbSBwYWdlIHNpemUgc3BlY2lmaWVkIGJ5IHRoZSAiCiAJCQkJInJlc3RhcnQgcGFnZSBoZWFkZXIgYW5kL29yIHRoZSBzcGVjaWZpZWQgIgogCQkJCSJyZXN0YXJ0IGFyZWEgbGVuZ3RoIGlzIGluY29uc2lzdGVudC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qCiAJICogVGhlIHJhLT5jbGllbnRfZnJlZV9saXN0IGFuZCByYS0+Y2xpZW50X2luX3VzZV9saXN0IG11c3QgYmUgZWl0aGVyCkBAIC0yMTgsNyArMjE4LDcgQEAKIAkJCWxlMTZfdG9fY3B1KHJhLT5sb2dfY2xpZW50cykpKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IGFyZWEgc3BlY2lmaWVzICIKIAkJCQkib3ZlcmZsb3dpbmcgY2xpZW50IGZyZWUgYW5kL29yIGluIHVzZSBsaXN0cy4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qCiAJICogQ2hlY2sgcmEtPnNlcV9udW1iZXJfYml0cyBhZ2FpbnN0IHJhLT5maWxlX3NpemUgZm9yIGNvbnNpc3RlbmN5LgpAQCAtMjMzLDI0ICsyMzMsMjQgQEAKIAlpZiAobGUzMl90b19jcHUocmEtPnNlcV9udW1iZXJfYml0cykgIT0gNjcgLSBmc19iaXRzKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IGFyZWEgc3BlY2lmaWVzICIKIAkJCQkiaW5jb25zaXN0ZW50IHNlcXVlbmNlIG51bWJlciBiaXRzLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogVGhlIGxvZyByZWNvcmQgaGVhZGVyIGxlbmd0aCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOC4gKi8KIAlpZiAoKChsZTE2X3RvX2NwdShyYS0+bG9nX3JlY29yZF9oZWFkZXJfbGVuZ3RoKSArIDcpICYgfjcpICE9CiAJCQlsZTE2X3RvX2NwdShyYS0+bG9nX3JlY29yZF9oZWFkZXJfbGVuZ3RoKSkgewogCQludGZzX2Vycm9yKHZpLT5pX3NiLCAiJExvZ0ZpbGUgcmVzdGFydCBhcmVhIHNwZWNpZmllcyAiCiAJCQkJImluY29uc2lzdGVudCBsb2cgcmVjb3JkIGhlYWRlciBsZW5ndGguIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKiBEaXRvIGZvciB0aGUgbG9nIHBhZ2UgZGF0YSBvZmZzZXQuICovCiAJaWYgKCgobGUxNl90b19jcHUocmEtPmxvZ19wYWdlX2RhdGFfb2Zmc2V0KSArIDcpICYgfjcpICE9CiAJCQlsZTE2X3RvX2NwdShyYS0+bG9nX3BhZ2VfZGF0YV9vZmZzZXQpKSB7CiAJCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSByZXN0YXJ0IGFyZWEgc3BlY2lmaWVzICIKIAkJCQkiaW5jb25zaXN0ZW50IGxvZyBwYWdlIGRhdGEgb2Zmc2V0LiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC0yNTksNyArMjU5LDcgQEAKICAqIEBycDoJCXJlc3RhcnQgcGFnZSB3aG9zZSBsb2cgY2xpZW50IGFycmF5IHRvIGNoZWNrCiAgKgogICogQ2hlY2sgdGhlIGxvZyBjbGllbnQgYXJyYXkgb2YgdGhlIHJlc3RhcnQgcGFnZSBAcnAgZm9yIGNvbnNpc3RlbmN5IGFuZAotICogcmV0dXJuIFRSVUUgaWYgaXQgaXMgY29uc2lzdGVudCBhbmQgRkFMU0Ugb3RoZXJ3aXNlLgorICogcmV0dXJuICd0cnVlJyBpZiBpdCBpcyBjb25zaXN0ZW50IGFuZCAnZmFsc2UnIG90aGVyd2lzZS4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgcmVzdGFydCBwYWdlIGhlYWRlciBhbmQgdGhlIHJlc3RhcnQgYXJlYSBoYXZlCiAgKiBhbHJlYWR5IGJlZW4gY29uc2lzdGVuY3kgY2hlY2tlZC4KQEAgLTI2OCwxMyArMjY4LDEzIEBACiAgKiBmdW5jdGlvbiBuZWVkcyBAcnAtPnN5c3RlbV9wYWdlX3NpemUgYnl0ZXMgaW4gQHJwLCBpLmUuIGl0IHJlcXVpcmVzIHRoZSBmdWxsCiAgKiByZXN0YXJ0IHBhZ2UgYW5kIHRoZSBwYWdlIG11c3QgYmUgbXVsdGkgc2VjdG9yIHRyYW5zZmVyIGRlcHJvdGVjdGVkLgogICovCi1zdGF0aWMgQk9PTCBudGZzX2NoZWNrX2xvZ19jbGllbnRfYXJyYXkoc3RydWN0IGlub2RlICp2aSwKK3N0YXRpYyBib29sIG50ZnNfY2hlY2tfbG9nX2NsaWVudF9hcnJheShzdHJ1Y3QgaW5vZGUgKnZpLAogCQlSRVNUQVJUX1BBR0VfSEVBREVSICpycCkKIHsKIAlSRVNUQVJUX0FSRUEgKnJhOwogCUxPR19DTElFTlRfUkVDT1JEICpjYSwgKmNyOwogCXUxNiBucl9jbGllbnRzLCBpZHg7Ci0JQk9PTCBpbl9mcmVlX2xpc3QsIGlkeF9pc19maXJzdDsKKwlib29sIGluX2ZyZWVfbGlzdCwgaWR4X2lzX2ZpcnN0OwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcuIik7CiAJcmEgPSAoUkVTVEFSVF9BUkVBKikoKHU4KilycCArIGxlMTZfdG9fY3B1KHJwLT5yZXN0YXJ0X2FyZWFfb2Zmc2V0KSk7CkBAIC0yOTAsOSArMjkwLDkgQEAKIAkgKi8KIAlucl9jbGllbnRzID0gbGUxNl90b19jcHUocmEtPmxvZ19jbGllbnRzKTsKIAlpZHggPSBsZTE2X3RvX2NwdShyYS0+Y2xpZW50X2ZyZWVfbGlzdCk7Ci0JaW5fZnJlZV9saXN0ID0gVFJVRTsKKwlpbl9mcmVlX2xpc3QgPSB0cnVlOwogY2hlY2tfbGlzdDoKLQlmb3IgKGlkeF9pc19maXJzdCA9IFRSVUU7IGlkeCAhPSBMT0dGSUxFX05PX0NMSUVOVF9DUFU7IG5yX2NsaWVudHMtLSwKKwlmb3IgKGlkeF9pc19maXJzdCA9IHRydWU7IGlkeCAhPSBMT0dGSUxFX05PX0NMSUVOVF9DUFU7IG5yX2NsaWVudHMtLSwKIAkJCWlkeCA9IGxlMTZfdG9fY3B1KGNyLT5uZXh0X2NsaWVudCkpIHsKIAkJaWYgKCFucl9jbGllbnRzIHx8IGlkeCA+PSBsZTE2X3RvX2NwdShyYS0+bG9nX2NsaWVudHMpKQogCQkJZ290byBlcnJfb3V0OwpAQCAtMzAyLDIwICszMDIsMjAgQEAKIAkJaWYgKGlkeF9pc19maXJzdCkgewogCQkJaWYgKGNyLT5wcmV2X2NsaWVudCAhPSBMT0dGSUxFX05PX0NMSUVOVCkKIAkJCQlnb3RvIGVycl9vdXQ7Ci0JCQlpZHhfaXNfZmlyc3QgPSBGQUxTRTsKKwkJCWlkeF9pc19maXJzdCA9IGZhbHNlOwogCQl9CiAJfQogCS8qIFN3aXRjaCB0byBhbmQgY2hlY2sgdGhlIGluIHVzZSBsaXN0IGlmIHdlIGp1c3QgZGlkIHRoZSBmcmVlIGxpc3QuICovCiAJaWYgKGluX2ZyZWVfbGlzdCkgewotCQlpbl9mcmVlX2xpc3QgPSBGQUxTRTsKKwkJaW5fZnJlZV9saXN0ID0gZmFsc2U7CiAJCWlkeCA9IGxlMTZfdG9fY3B1KHJhLT5jbGllbnRfaW5fdXNlX2xpc3QpOwogCQlnb3RvIGNoZWNrX2xpc3Q7CiAJfQogCW50ZnNfZGVidWcoIkRvbmUuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiBlcnJfb3V0OgogCW50ZnNfZXJyb3IodmktPmlfc2IsICIkTG9nRmlsZSBsb2cgY2xpZW50IGFycmF5IGlzIGNvcnJ1cHQuIik7Ci0JcmV0dXJuIEZBTFNFOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoqCkBAIC00NjgsOCArNDY4LDggQEAKICAqIEBsb2dfdmk6CXN0cnVjdCBpbm9kZSBvZiBsb2FkZWQgam91cm5hbCAkTG9nRmlsZSB0byBjaGVjawogICogQHJwOgkJW09VVF0gb24gc3VjY2VzcyB0aGlzIGlzIGEgY29weSBvZiB0aGUgY3VycmVudCByZXN0YXJ0IHBhZ2UKICAqCi0gKiBDaGVjayB0aGUgJExvZ0ZpbGUgam91cm5hbCBmb3IgY29uc2lzdGVuY3kgYW5kIHJldHVybiBUUlVFIGlmIGl0IGlzCi0gKiBjb25zaXN0ZW50IGFuZCBGQUxTRSBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgY3VycmVudCByZXN0YXJ0IHBhZ2UgaXMKKyAqIENoZWNrIHRoZSAkTG9nRmlsZSBqb3VybmFsIGZvciBjb25zaXN0ZW5jeSBhbmQgcmV0dXJuICd0cnVlJyBpZiBpdCBpcworICogY29uc2lzdGVudCBhbmQgJ2ZhbHNlJyBpZiBub3QuICBPbiBzdWNjZXNzLCB0aGUgY3VycmVudCByZXN0YXJ0IHBhZ2UgaXMKICAqIHJldHVybmVkIGluICpAcnAuICBDYWxsZXIgbXVzdCBjYWxsIG50ZnNfZnJlZSgqQHJwKSB3aGVuIGZpbmlzaGVkIHdpdGggaXQuCiAgKgogICogQXQgcHJlc2VudCB3ZSBvbmx5IGNoZWNrIHRoZSB0d28gcmVzdGFydCBwYWdlcyBhbmQgaWdub3JlIHRoZSBsb2cgcmVjb3JkCkBAIC00ODAsNyArNDgwLDcgQEAKICAqIGlmIHRoZSAkTG9nRmlsZSB3YXMgY3JlYXRlZCBvbiBhIHN5c3RlbSB3aXRoIGEgZGlmZmVyZW50IHBhZ2Ugc2l6ZSB0byBvdXJzCiAgKiB5ZXQgYW5kIG1zdCBkZXByb3RlY3Rpb24gd291bGQgZmFpbCBpZiBvdXIgcGFnZSBzaXplIGlzIHNtYWxsZXIuCiAgKi8KLUJPT0wgbnRmc19jaGVja19sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpLCBSRVNUQVJUX1BBR0VfSEVBREVSICoqcnApCitib29sIG50ZnNfY2hlY2tfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSwgUkVTVEFSVF9QQUdFX0hFQURFUiAqKnJwKQogewogCXM2NCBzaXplLCBwb3M7CiAJTFNOIHJzdHIxX2xzbiwgcnN0cjJfbHNuOwpAQCAtNDkxLDcgKzQ5MSw3IEBACiAJUkVTVEFSVF9QQUdFX0hFQURFUiAqcnN0cjFfcGggPSBOVUxMOwogCVJFU1RBUlRfUEFHRV9IRUFERVIgKnJzdHIyX3BoID0gTlVMTDsKIAlpbnQgbG9nX3BhZ2Vfc2l6ZSwgbG9nX3BhZ2VfbWFzaywgZXJyOwotCUJPT0wgbG9nZmlsZV9pc19lbXB0eSA9IFRSVUU7CisJYm9vbCBsb2dmaWxlX2lzX2VtcHR5ID0gdHJ1ZTsKIAl1OCBsb2dfcGFnZV9iaXRzOwogCiAJbnRmc19kZWJ1ZygiRW50ZXJpbmcuIik7CkBAIC01MjcsNyArNTI3LDcgQEAKIAlpZiAoc2l6ZSA8IGxvZ19wYWdlX3NpemUgKiAyIHx8IChzaXplIC0gbG9nX3BhZ2Vfc2l6ZSAqIDIpID4+CiAJCQlsb2dfcGFnZV9iaXRzIDwgTWluTG9nUmVjb3JkUGFnZXMpIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiJExvZ0ZpbGUgaXMgdG9vIHNtYWxsLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyoKIAkgKiBSZWFkIHRocm91Z2ggdGhlIGZpbGUgbG9va2luZyBmb3IgYSByZXN0YXJ0IHBhZ2UuICBTaW5jZSB0aGUgcmVzdGFydApAQCAtNTU2LDcgKzU1Niw3IEBACiAJCSAqIG1lYW5zIHdlIGFyZSBkb25lLgogCQkgKi8KIAkJaWYgKCFudGZzX2lzX2VtcHR5X3JlY29yZHAoKGxlMzIqKWthZGRyKSkKLQkJCWxvZ2ZpbGVfaXNfZW1wdHkgPSBGQUxTRTsKKwkJCWxvZ2ZpbGVfaXNfZW1wdHkgPSBmYWxzZTsKIAkJZWxzZSBpZiAoIWxvZ2ZpbGVfaXNfZW1wdHkpCiAJCQlicmVhazsKIAkJLyoKQEAgLTYxNSwxMyArNjE1LDEzIEBACiAJCU5Wb2xTZXRMb2dGaWxlRW1wdHkodm9sKTsKIGlzX2VtcHR5OgogCQludGZzX2RlYnVnKCJEb25lLiAgKCRMb2dGaWxlIGlzIGVtcHR5LikiKTsKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KIAlpZiAoIXJzdHIxX3BoKSB7CiAJCUJVR19PTihyc3RyMl9waCk7CiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkRpZCBub3QgZmluZCBhbnkgcmVzdGFydCBwYWdlcyBpbiAiCiAJCQkJIiRMb2dGaWxlIGFuZCBpdCB3YXMgbm90IGVtcHR5LiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogSWYgYm90aCByZXN0YXJ0IHBhZ2VzIHdlcmUgZm91bmQsIHVzZSB0aGUgbW9yZSByZWNlbnQgb25lLiAqLwogCWlmIChyc3RyMl9waCkgewpAQCAtNjQ4LDExICs2NDgsMTEgQEAKIAllbHNlCiAJCW50ZnNfZnJlZShyc3RyMV9waCk7CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIGVycl9vdXQ6CiAJaWYgKHJzdHIxX3BoKQogCQludGZzX2ZyZWUocnN0cjFfcGgpOwotCXJldHVybiBGQUxTRTsKKwlyZXR1cm4gZmFsc2U7CiB9CiAKIC8qKgpAQCAtNjYwLDggKzY2MCw4IEBACiAgKiBAbG9nX3ZpOglzdHJ1Y3QgaW5vZGUgb2YgbG9hZGVkIGpvdXJuYWwgJExvZ0ZpbGUgdG8gY2hlY2sKICAqIEBycDoJCWNvcHkgb2YgdGhlIGN1cnJlbnQgcmVzdGFydCBwYWdlCiAgKgotICogQW5hbHl6ZSB0aGUgJExvZ0ZpbGUgam91cm5hbCBhbmQgcmV0dXJuIFRSVUUgaWYgaXQgaW5kaWNhdGVzIHRoZSB2b2x1bWUgd2FzCi0gKiBzaHV0ZG93biBjbGVhbmx5IGFuZCBGQUxTRSBpZiBub3QuCisgKiBBbmFseXplIHRoZSAkTG9nRmlsZSBqb3VybmFsIGFuZCByZXR1cm4gJ3RydWUnIGlmIGl0IGluZGljYXRlcyB0aGUgdm9sdW1lIHdhcworICogc2h1dGRvd24gY2xlYW5seSBhbmQgJ2ZhbHNlJyBpZiBub3QuCiAgKgogICogQXQgcHJlc2VudCB3ZSBvbmx5IGxvb2sgYXQgdGhlIHR3byByZXN0YXJ0IHBhZ2VzIGFuZCBpZ25vcmUgdGhlIGxvZyByZWNvcmQKICAqIHBhZ2VzLiAgVGhpcyBpcyBhIGxpdHRsZSBiaXQgY3J1ZGUgaW4gdGhhdCB0aGVyZSB3aWxsIGJlIGEgdmVyeSBzbWFsbCBudW1iZXIKQEAgLTY3NSw3ICs2NzUsNyBAQAogICogaXMgZW1wdHkgdGhpcyBmdW5jdGlvbiByZXF1aXJlcyB0aGF0IE5Wb2xMb2dGaWxlRW1wdHkoKSBpcyB0cnVlIG90aGVyd2lzZSBhbgogICogZW1wdHkgdm9sdW1lIHdpbGwgYmUgcmVwb3J0ZWQgYXMgZGlydHkuCiAgKi8KLUJPT0wgbnRmc19pc19sb2dmaWxlX2NsZWFuKHN0cnVjdCBpbm9kZSAqbG9nX3ZpLCBjb25zdCBSRVNUQVJUX1BBR0VfSEVBREVSICpycCkKK2Jvb2wgbnRmc19pc19sb2dmaWxlX2NsZWFuKHN0cnVjdCBpbm9kZSAqbG9nX3ZpLCBjb25zdCBSRVNUQVJUX1BBR0VfSEVBREVSICpycCkKIHsKIAludGZzX3ZvbHVtZSAqdm9sID0gTlRGU19TQihsb2dfdmktPmlfc2IpOwogCVJFU1RBUlRfQVJFQSAqcmE7CkBAIC02ODQsNyArNjg0LDcgQEAKIAkvKiBBbiBlbXB0eSAkTG9nRmlsZSBtdXN0IGhhdmUgYmVlbiBjbGVhbiBiZWZvcmUgaXQgZ290IGVtcHRpZWQuICovCiAJaWYgKE5Wb2xMb2dGaWxlRW1wdHkodm9sKSkgewogCQludGZzX2RlYnVnKCJEb25lLiAgKCRMb2dGaWxlIGlzIGVtcHR5LikiKTsKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KIAlCVUdfT04oIXJwKTsKIAlpZiAoIW50ZnNfaXNfcnN0cl9yZWNvcmQocnAtPm1hZ2ljKSAmJgpAQCAtNjkzLDcgKzY5Myw3IEBACiAJCQkJInByb2JhYmx5IGEgYnVnIGluIHRoYXQgdGhlICRMb2dGaWxlIHNob3VsZCAiCiAJCQkJImhhdmUgYmVlbiBjb25zaXN0ZW5jeSBjaGVja2VkIGJlZm9yZSBjYWxsaW5nICIKIAkJCQkidGhpcyBmdW5jdGlvbi4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCXJhID0gKFJFU1RBUlRfQVJFQSopKCh1OCopcnAgKyBsZTE2X3RvX2NwdShycC0+cmVzdGFydF9hcmVhX29mZnNldCkpOwogCS8qCkBAIC03MDQsMjUgKzcwNCwyNSBAQAogCWlmIChyYS0+Y2xpZW50X2luX3VzZV9saXN0ICE9IExPR0ZJTEVfTk9fQ0xJRU5UICYmCiAJCQkhKHJhLT5mbGFncyAmIFJFU1RBUlRfVk9MVU1FX0lTX0NMRUFOKSkgewogCQludGZzX2RlYnVnKCJEb25lLiAgJExvZ0ZpbGUgaW5kaWNhdGVzIGEgZGlydHkgc2h1dGRvd24uIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKiAkTG9nRmlsZSBpbmRpY2F0ZXMgYSBjbGVhbiBzaHV0ZG93bi4gKi8KIAludGZzX2RlYnVnKCJEb25lLiAgJExvZ0ZpbGUgaW5kaWNhdGVzIGEgY2xlYW4gc2h1dGRvd24uIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgogICogbnRmc19lbXB0eV9sb2dmaWxlIC0gZW1wdHkgdGhlIGNvbnRlbnRzIG9mIHRoZSAkTG9nRmlsZSBqb3VybmFsCiAgKiBAbG9nX3ZpOglzdHJ1Y3QgaW5vZGUgb2YgbG9hZGVkIGpvdXJuYWwgJExvZ0ZpbGUgdG8gZW1wdHkKICAqCi0gKiBFbXB0eSB0aGUgY29udGVudHMgb2YgdGhlICRMb2dGaWxlIGpvdXJuYWwgQGxvZ192aSBhbmQgcmV0dXJuIFRSVUUgb24KLSAqIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGVycm9yLgorICogRW1wdHkgdGhlIGNvbnRlbnRzIG9mIHRoZSAkTG9nRmlsZSBqb3VybmFsIEBsb2dfdmkgYW5kIHJldHVybiAndHJ1ZScgb24KKyAqIHN1Y2Nlc3MgYW5kICdmYWxzZScgb24gZXJyb3IuCiAgKgogICogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgdGhlICRMb2dGaWxlIGpvdXJuYWwgaGFzIGFscmVhZHkgYmVlbiBjb25zaXN0ZW5jeQogICogY2hlY2tlZCBieSBhIGNhbGwgdG8gbnRmc19jaGVja19sb2dmaWxlKCkgYW5kIHRoYXQgbnRmc19pc19sb2dmaWxlX2NsZWFuKCkKICAqIGhhcyBiZWVuIHVzZWQgdG8gZW5zdXJlIHRoYXQgdGhlICRMb2dGaWxlIGlzIGNsZWFuLgogICovCi1CT09MIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSkKK2Jvb2wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKQogewogCW50ZnNfdm9sdW1lICp2b2wgPSBOVEZTX1NCKGxvZ192aS0+aV9zYik7CiAKQEAgLTczNSwxMyArNzM1LDEzIEBACiAJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gZmlsbCAkTG9nRmlsZSB3aXRoICIKIAkJCQkJIjB4ZmYgYnl0ZXMgKGVycm9yIGNvZGUgJWkpLiIsIGVycik7Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAkJLyogU2V0IHRoZSBmbGFnIHNvIHdlIGRvIG5vdCBoYXZlIHRvIGRvIGl0IGFnYWluIG9uIHJlbW91bnQuICovCiAJCU5Wb2xTZXRMb2dGaWxlRW1wdHkodm9sKTsKIAl9CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogI2VuZGlmIC8qIE5URlNfUlcgKi8KZGlmZiAtLWdpdCBhL2ZzL250ZnMvbG9nZmlsZS5oIGIvZnMvbnRmcy9sb2dmaWxlLmgKaW5kZXggYTUxZjNkZC4uOTQ2OGUxYyAxMDA2NDQKLS0tIGEvZnMvbnRmcy9sb2dmaWxlLmgKKysrIGIvZnMvbnRmcy9sb2dmaWxlLmgKQEAgLTI5NiwxMyArMjk2LDEzIEBACiAvKiBzaXplb2YoKSA9IDE2MCAoMHhhMCkgYnl0ZXMgKi8KIH0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2VkX18pKSBMT0dfQ0xJRU5UX1JFQ09SRDsKIAotZXh0ZXJuIEJPT0wgbnRmc19jaGVja19sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpLAorZXh0ZXJuIGJvb2wgbnRmc19jaGVja19sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpLAogCQlSRVNUQVJUX1BBR0VfSEVBREVSICoqcnApOwogCi1leHRlcm4gQk9PTCBudGZzX2lzX2xvZ2ZpbGVfY2xlYW4oc3RydWN0IGlub2RlICpsb2dfdmksCitleHRlcm4gYm9vbCBudGZzX2lzX2xvZ2ZpbGVfY2xlYW4oc3RydWN0IGlub2RlICpsb2dfdmksCiAJCWNvbnN0IFJFU1RBUlRfUEFHRV9IRUFERVIgKnJwKTsKIAotZXh0ZXJuIEJPT0wgbnRmc19lbXB0eV9sb2dmaWxlKHN0cnVjdCBpbm9kZSAqbG9nX3ZpKTsKK2V4dGVybiBib29sIG50ZnNfZW1wdHlfbG9nZmlsZShzdHJ1Y3QgaW5vZGUgKmxvZ192aSk7CiAKICNlbmRpZiAvKiBOVEZTX1JXICovCiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmMgYi9mcy9udGZzL21mdC5jCmluZGV4IDI0MzhjMDAuLjJhZDVjOGIgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmMKKysrIGIvZnMvbnRmcy9tZnQuYwpAQCAtMjUxLDcgKzI1MSw3IEBACiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBtZnRfbm8gPSBNUkVGKG1yZWYpOwogCXUxNiBzZXFfbm8gPSBNU0VRTk8obXJlZik7Ci0JQk9PTCBkZXN0cm95X25pID0gRkFMU0U7CisJYm9vbCBkZXN0cm95X25pID0gZmFsc2U7CiAKIAludGZzX2RlYnVnKCJNYXBwaW5nIGV4dGVudCBtZnQgcmVjb3JkIDB4JWx4IChiYXNlIG1mdCByZWNvcmQgMHglbHgpLiIsCiAJCQltZnRfbm8sIGJhc2VfbmktPm1mdF9ubyk7CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlpZiAoc2VxX25vICYmIChsZTE2X3RvX2NwdShtLT5zZXF1ZW5jZV9udW1iZXIpICE9IHNlcV9ubykpIHsKIAkJbnRmc19lcnJvcihiYXNlX25pLT52b2wtPnNiLCAiRm91bmQgc3RhbGUgZXh0ZW50IG1mdCAiCiAJCQkJInJlZmVyZW5jZSEgQ29ycnVwdCBmaWxlc3lzdGVtLiBSdW4gY2hrZHNrLiIpOwotCQlkZXN0cm95X25pID0gVFJVRTsKKwkJZGVzdHJveV9uaSA9IHRydWU7CiAJCW0gPSBFUlJfUFRSKC1FSU8pOwogCQlnb3RvIHVubV9lcnJfb3V0OwogCX0KQEAgLTMzMSwxMSArMzMxLDExIEBACiAJCW50ZnNfaW5vZGUgKip0bXA7CiAJCWludCBuZXdfc2l6ZSA9IChiYXNlX25pLT5ucl9leHRlbnRzICsgNCkgKiBzaXplb2YobnRmc19pbm9kZSAqKTsKIAotCQl0bXAgPSAobnRmc19pbm9kZSAqKilrbWFsbG9jKG5ld19zaXplLCBHRlBfTk9GUyk7CisJCXRtcCA9IGttYWxsb2MobmV3X3NpemUsIEdGUF9OT0ZTKTsKIAkJaWYgKHVubGlrZWx5KCF0bXApKSB7CiAJCQludGZzX2Vycm9yKGJhc2VfbmktPnZvbC0+c2IsICJGYWlsZWQgdG8gYWxsb2NhdGUgIgogCQkJCQkiaW50ZXJuYWwgYnVmZmVyLiIpOwotCQkJZGVzdHJveV9uaSA9IFRSVUU7CisJCQlkZXN0cm95X25pID0gdHJ1ZTsKIAkJCW0gPSBFUlJfUFRSKC1FTk9NRU0pOwogCQkJZ290byB1bm1fZXJyX291dDsKIAkJfQpAQCAtODU3LDcgKzg1Nyw3IEBACiAgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIHVubG9ja2luZyB0aGUgbnRmcyBpbm9kZSBhbmQgdW5waW5uaW5nIHRoZSBiYXNlCiAgKiB2ZnMgaW5vZGUuCiAgKgotICogUmV0dXJuIFRSVUUgaWYgdGhlIG1mdCByZWNvcmQgbWF5IGJlIHdyaXR0ZW4gb3V0IGFuZCBGQUxTRSBpZiBub3QuCisgKiBSZXR1cm4gJ3RydWUnIGlmIHRoZSBtZnQgcmVjb3JkIG1heSBiZSB3cml0dGVuIG91dCBhbmQgJ2ZhbHNlJyBpZiBub3QuCiAgKgogICogVGhlIGNhbGxlciBoYXMgbG9ja2VkIHRoZSBwYWdlIGFuZCBjbGVhcmVkIHRoZSB1cHRvZGF0ZSBmbGFnIG9uIGl0IHdoaWNoCiAgKiBtZWFucyB0aGF0IHdlIGNhbiBzYWZlbHkgd3JpdGUgb3V0IGFueSBkaXJ0eSBtZnQgcmVjb3JkcyB0aGF0IGRvIG5vdCBoYXZlCkBAIC04NjgsNyArODY4LDcgQEAKICAqIEhlcmUgaXMgYSBkZXNjcmlwdGlvbiBvZiB0aGUgdGVzdHMgd2UgcGVyZm9ybToKICAqCiAgKiBJZiB0aGUgaW5vZGUgaXMgZm91bmQgaW4gaWNhY2hlIHdlIGtub3cgdGhlIG1mdCByZWNvcmQgbXVzdCBiZSBhIGJhc2UgbWZ0Ci0gKiByZWNvcmQuICBJZiBpdCBpcyBkaXJ0eSwgd2UgZG8gbm90IHdyaXRlIGl0IGFuZCByZXR1cm4gRkFMU0UgYXMgdGhlIHZmcworICogcmVjb3JkLiAgSWYgaXQgaXMgZGlydHksIHdlIGRvIG5vdCB3cml0ZSBpdCBhbmQgcmV0dXJuICdmYWxzZScgYXMgdGhlIHZmcwogICogaW5vZGUgd3JpdGUgcGF0aHMgd2lsbCByZXN1bHQgaW4gdGhlIGFjY2VzcyB0aW1lcyBiZWluZyB1cGRhdGVkIHdoaWNoIHdvdWxkCiAgKiBjYXVzZSB0aGUgYmFzZSBtZnQgcmVjb3JkIHRvIGJlIHJlZGlydGllZCBhbmQgd3JpdHRlbiBvdXQgYWdhaW4uICAoV2Uga25vdwogICogdGhlIGFjY2VzcyB0aW1lIHVwZGF0ZSB3aWxsIG1vZGlmeSB0aGUgYmFzZSBtZnQgcmVjb3JkIGJlY2F1c2UgV2luZG93cwpAQCAtODc3LDExICs4NzcsMTEgQEAKICAqCiAgKiBJZiB0aGUgaW5vZGUgaXMgaW4gaWNhY2hlIGFuZCBub3QgZGlydHksIHdlIGF0dGVtcHQgdG8gbG9jayB0aGUgbWZ0IHJlY29yZAogICogYW5kIGlmIHdlIGZpbmQgdGhlIGxvY2sgd2FzIGFscmVhZHkgdGFrZW4sIGl0IGlzIG5vdCBzYWZlIHRvIHdyaXRlIHRoZSBtZnQKLSAqIHJlY29yZCBhbmQgd2UgcmV0dXJuIEZBTFNFLgorICogcmVjb3JkIGFuZCB3ZSByZXR1cm4gJ2ZhbHNlJy4KICAqCiAgKiBJZiB3ZSBtYW5hZ2UgdG8gb2J0YWluIHRoZSBsb2NrIHdlIGhhdmUgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgbWZ0IHJlY29yZCwKICAqIHdoaWNoIGFsc28gYWxsb3dzIHVzIHNhZmUgd3JpdGVvdXQgb2YgdGhlIG1mdCByZWNvcmQuICBXZSB0aGVuIHNldAotICogQGxvY2tlZF9uaSB0byB0aGUgbG9ja2VkIG50ZnMgaW5vZGUgYW5kIHJldHVybiBUUlVFLgorICogQGxvY2tlZF9uaSB0byB0aGUgbG9ja2VkIG50ZnMgaW5vZGUgYW5kIHJldHVybiAndHJ1ZScuCiAgKgogICogTm90ZSB3ZSBjYW5ub3QganVzdCBsb2NrIHRoZSBtZnQgcmVjb3JkIGFuZCBzbGVlcCB3aGlsZSB3YWl0aW5nIGZvciB0aGUgbG9jawogICogYmVjYXVzZSB0aGlzIHdvdWxkIGRlYWRsb2NrIGR1ZSB0byBsb2NrIHJldmVyc2FsIChub3JtYWxseSB0aGUgbWZ0IHJlY29yZCBpcwpAQCAtODkxLDI0ICs4OTEsMjQgQEAKICAqIElmIHRoZSBpbm9kZSBpcyBub3QgaW4gaWNhY2hlIHdlIG5lZWQgdG8gcGVyZm9ybSBmdXJ0aGVyIGNoZWNrcy4KICAqCiAgKiBJZiB0aGUgbWZ0IHJlY29yZCBpcyBub3QgYSBGSUxFIHJlY29yZCBvciBpdCBpcyBhIGJhc2UgbWZ0IHJlY29yZCwgd2UgY2FuCi0gKiBzYWZlbHkgd3JpdGUgaXQgYW5kIHJldHVybiBUUlVFLgorICogc2FmZWx5IHdyaXRlIGl0IGFuZCByZXR1cm4gJ3RydWUnLgogICoKICAqIFdlIG5vdyBrbm93IHRoZSBtZnQgcmVjb3JkIGlzIGFuIGV4dGVudCBtZnQgcmVjb3JkLiAgV2UgY2hlY2sgaWYgdGhlIGlub2RlCiAgKiBjb3JyZXNwb25kaW5nIHRvIGl0cyBiYXNlIG1mdCByZWNvcmQgaXMgaW4gaWNhY2hlIGFuZCBvYnRhaW4gYSByZWZlcmVuY2UgdG8KLSAqIGl0IGlmIGl0IGlzLiAgSWYgaXQgaXMgbm90LCB3ZSBjYW4gc2FmZWx5IHdyaXRlIGl0IGFuZCByZXR1cm4gVFJVRS4KKyAqIGl0IGlmIGl0IGlzLiAgSWYgaXQgaXMgbm90LCB3ZSBjYW4gc2FmZWx5IHdyaXRlIGl0IGFuZCByZXR1cm4gJ3RydWUnLgogICoKICAqIFdlIG5vdyBoYXZlIHRoZSBiYXNlIGlub2RlIGZvciB0aGUgZXh0ZW50IG1mdCByZWNvcmQuICBXZSBjaGVjayBpZiBpdCBoYXMgYW4KICAqIG50ZnMgaW5vZGUgZm9yIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBhdHRhY2hlZCBhbmQgaWYgbm90IGl0IGlzIHNhZmUgdG8gd3JpdGUKLSAqIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBhbmQgd2UgcmV0dXJuIFRSVUUuCisgKiB0aGUgZXh0ZW50IG1mdCByZWNvcmQgYW5kIHdlIHJldHVybiAndHJ1ZScuCiAgKgogICogVGhlIG50ZnMgaW5vZGUgZm9yIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBpcyBhdHRhY2hlZCB0byB0aGUgYmFzZSBpbm9kZSBzbyB3ZQogICogYXR0ZW1wdCB0byBsb2NrIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBhbmQgaWYgd2UgZmluZCB0aGUgbG9jayB3YXMgYWxyZWFkeQotICogdGFrZW4sIGl0IGlzIG5vdCBzYWZlIHRvIHdyaXRlIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBhbmQgd2UgcmV0dXJuIEZBTFNFLgorICogdGFrZW4sIGl0IGlzIG5vdCBzYWZlIHRvIHdyaXRlIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBhbmQgd2UgcmV0dXJuICdmYWxzZScuCiAgKgogICogSWYgd2UgbWFuYWdlIHRvIG9idGFpbiB0aGUgbG9jayB3ZSBoYXZlIGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gdGhlIGV4dGVudCBtZnQKICAqIHJlY29yZCwgd2hpY2ggYWxzbyBhbGxvd3MgdXMgc2FmZSB3cml0ZW91dCBvZiB0aGUgZXh0ZW50IG1mdCByZWNvcmQuICBXZQogICogc2V0IHRoZSBudGZzIGlub2RlIG9mIHRoZSBleHRlbnQgbWZ0IHJlY29yZCBjbGVhbiBhbmQgdGhlbiBzZXQgQGxvY2tlZF9uaSB0bwotICogdGhlIG5vdyBsb2NrZWQgbnRmcyBpbm9kZSBhbmQgcmV0dXJuIFRSVUUuCisgKiB0aGUgbm93IGxvY2tlZCBudGZzIGlub2RlIGFuZCByZXR1cm4gJ3RydWUnLgogICoKICAqIE5vdGUsIHRoZSByZWFzb24gZm9yIGFjdHVhbGx5IHdyaXRpbmcgZGlydHkgbWZ0IHJlY29yZHMgaGVyZSBhbmQgbm90IGp1c3QKICAqIHJlbHlpbmcgb24gdGhlIHZmcyBpbm9kZSBkaXJ0eSBjb2RlIHBhdGhzIGlzIHRoYXQgd2UgY2FuIGhhdmUgbWZ0IHJlY29yZHMKQEAgLTkyMiw3ICs5MjIsNyBAQAogICogYXBwZWFyIGlmIHRoZSBtZnQgcmVjb3JkIGlzIHJldXNlZCBmb3IgYSBuZXcgaW5vZGUgYmVmb3JlIGl0IGdvdCB3cml0dGVuCiAgKiBvdXQuCiAgKi8KLUJPT0wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCB1bnNpZ25lZCBsb25nIG1mdF9ubywKK2Jvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCB1bnNpZ25lZCBsb25nIG1mdF9ubywKIAkJY29uc3QgTUZUX1JFQ09SRCAqbSwgbnRmc19pbm9kZSAqKmxvY2tlZF9uaSkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdm9sLT5zYjsKQEAgLTk3Nyw3ICs5NzcsNyBAQAogCQkJCQltZnRfbm8pOwogCQkJYXRvbWljX2RlYygmbmktPmNvdW50KTsKIAkJCWlwdXQodmkpOwotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCW50ZnNfZGVidWcoIklub2RlIDB4JWx4IGlzIG5vdCBkaXJ0eS4iLCBtZnRfbm8pOwogCQkvKiBUaGUgaW5vZGUgaXMgbm90IGRpcnR5LCB0cnkgdG8gdGFrZSB0aGUgbWZ0IHJlY29yZCBsb2NrLiAqLwpAQCAtOTg2LDcgKzk4Niw3IEBACiAJCQkJCSJub3Qgd3JpdGUgaXQuIiwgbWZ0X25vKTsKIAkJCWF0b21pY19kZWMoJm5pLT5jb3VudCk7CiAJCQlpcHV0KHZpKTsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCQludGZzX2RlYnVnKCJNYW5hZ2VkIHRvIGxvY2sgbWZ0IHJlY29yZCAweCVseCwgd3JpdGUgaXQuIiwKIAkJCQltZnRfbm8pOwpAQCAtOTk1LDcgKzk5NSw3IEBACiAJCSAqIHJldHVybiB0aGUgbG9ja2VkIG50ZnMgaW5vZGUuCiAJCSAqLwogCQkqbG9ja2VkX25pID0gbmk7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJbnRmc19kZWJ1ZygiSW5vZGUgMHglbHggaXMgbm90IGluIGljYWNoZS4iLCBtZnRfbm8pOwogCS8qIFRoZSBpbm9kZSBpcyBub3QgaW4gaWNhY2hlLiAqLwpAQCAtMTAwMywxMyArMTAwMywxMyBAQAogCWlmICghbnRmc19pc19tZnRfcmVjb3JkKG0tPm1hZ2ljKSkgewogCQludGZzX2RlYnVnKCJNZnQgcmVjb3JkIDB4JWx4IGlzIG5vdCBhIEZJTEUgcmVjb3JkLCB3cml0ZSBpdC4iLAogCQkJCW1mdF9ubyk7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJLyogV3JpdGUgdGhlIG1mdCByZWNvcmQgaWYgaXQgaXMgYSBiYXNlIGlub2RlLiAqLwogCWlmICghbS0+YmFzZV9tZnRfcmVjb3JkKSB7CiAJCW50ZnNfZGVidWcoIk1mdCByZWNvcmQgMHglbHggaXMgYSBiYXNlIHJlY29yZCwgd3JpdGUgaXQuIiwKIAkJCQltZnRfbm8pOwotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJfQogCS8qCiAJICogVGhpcyBpcyBhbiBleHRlbnQgbWZ0IHJlY29yZC4gIENoZWNrIGlmIHRoZSBpbm9kZSBjb3JyZXNwb25kaW5nIHRvCkBAIC0xMDMzLDcgKzEwMzMsNyBAQAogCQkgKi8KIAkJbnRmc19kZWJ1ZygiQmFzZSBpbm9kZSAweCVseCBpcyBub3QgaW4gaWNhY2hlLCB3cml0ZSB0aGUgIgogCQkJCSJleHRlbnQgcmVjb3JkLiIsIG5hLm1mdF9ubyk7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJbnRmc19kZWJ1ZygiQmFzZSBpbm9kZSAweCVseCBpcyBpbiBpY2FjaGUuIiwgbmEubWZ0X25vKTsKIAkvKgpAQCAtMTA1MSw3ICsxMDUxLDcgQEAKIAkJaXB1dCh2aSk7CiAJCW50ZnNfZGVidWcoIkJhc2UgaW5vZGUgMHglbHggaGFzIG5vIGF0dGFjaGVkIGV4dGVudCBpbm9kZXMsICIKIAkJCQkid3JpdGUgdGhlIGV4dGVudCByZWNvcmQuIiwgbmEubWZ0X25vKTsKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KIAkvKiBJdGVyYXRlIG92ZXIgdGhlIGF0dGFjaGVkIGV4dGVudCBpbm9kZXMuICovCiAJZXh0ZW50X25pcyA9IG5pLT5leHQuZXh0ZW50X250ZnNfaW5vczsKQEAgLTEwNzUsNyArMTA3NSw3IEBACiAJCW50ZnNfZGVidWcoIkV4dGVudCBpbm9kZSAweCVseCBpcyBub3QgYXR0YWNoZWQgdG8gaXRzIGJhc2UgIgogCQkJCSJpbm9kZSAweCVseCwgd3JpdGUgdGhlIGV4dGVudCByZWNvcmQuIiwKIAkJCQltZnRfbm8sIG5hLm1mdF9ubyk7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJbnRmc19kZWJ1ZygiRXh0ZW50IGlub2RlIDB4JWx4IGlzIGF0dGFjaGVkIHRvIGl0cyBiYXNlIGlub2RlIDB4JWx4LiIsCiAJCQltZnRfbm8sIG5hLm1mdF9ubyk7CkBAIC0xMDkxLDcgKzEwOTEsNyBAQAogCQlpcHV0KHZpKTsKIAkJbnRmc19kZWJ1ZygiRXh0ZW50IG1mdCByZWNvcmQgMHglbHggaXMgYWxyZWFkeSBsb2NrZWQsIGRvICIKIAkJCQkibm90IHdyaXRlIGl0LiIsIG1mdF9ubyk7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAludGZzX2RlYnVnKCJNYW5hZ2VkIHRvIGxvY2sgZXh0ZW50IG1mdCByZWNvcmQgMHglbHgsIHdyaXRlIGl0LiIsCiAJCQltZnRfbm8pOwpAQCAtMTEwMyw3ICsxMTAzLDcgQEAKIAkgKiB0aGUgbG9ja2VkIGV4dGVudCBudGZzIGlub2RlLgogCSAqLwogCSpsb2NrZWRfbmkgPSBlbmk7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICplcyA9ICIgIExlYXZpbmcgaW5jb25zaXN0ZW50IG1ldGFkYXRhLiAgVW5tb3VudCBhbmQgcnVuICIKQEAgLTEzNTQsNyArMTM1NCw3IEBACiAJCW50ZnNfdW5tYXBfcGFnZShwYWdlKTsKIAkJLyogQWxsb2NhdGUgYSBjbHVzdGVyIGZyb20gdGhlIERBVEFfWk9ORS4gKi8KIAkJcmwyID0gbnRmc19jbHVzdGVyX2FsbG9jKHZvbCwgcmxbMV0udmNuLCAxLCBsY24sIERBVEFfWk9ORSwKLQkJCQlUUlVFKTsKKwkJCQl0cnVlKTsKIAkJaWYgKElTX0VSUihybDIpKSB7CiAJCQl1cF93cml0ZSgmbWZ0Ym1wX25pLT5ydW5saXN0LmxvY2spOwogCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIGEgY2x1c3RlciBmb3IgIgpAQCAtMTcyNCw3ICsxNzI0LDcgQEAKIAlBVFRSX1JFQ09SRCAqYSA9IE5VTEw7CiAJaW50IHJldCwgbXBfc2l6ZTsKIAl1MzIgb2xkX2FsZW4gPSAwOwotCUJPT0wgbXBfcmVidWlsdCA9IEZBTFNFOworCWJvb2wgbXBfcmVidWlsdCA9IGZhbHNlOwogCiAJbnRmc19kZWJ1ZygiRXh0ZW5kaW5nIG1mdCBkYXRhIGFsbG9jYXRpb24uIik7CiAJbWZ0X25pID0gTlRGU19JKHZvbC0+bWZ0X2lubyk7CkBAIC0xNzgwLDcgKzE3ODAsNyBAQAogCW9sZF9sYXN0X3ZjbiA9IHJsWzFdLnZjbjsKIAlkbyB7CiAJCXJsMiA9IG50ZnNfY2x1c3Rlcl9hbGxvYyh2b2wsIG9sZF9sYXN0X3ZjbiwgbnIsIGxjbiwgTUZUX1pPTkUsCi0JCQkJVFJVRSk7CisJCQkJdHJ1ZSk7CiAJCWlmIChsaWtlbHkoIUlTX0VSUihybDIpKSkKIAkJCWJyZWFrOwogCQlpZiAoUFRSX0VSUihybDIpICE9IC1FTk9TUEMgfHwgbnIgPT0gbWluX25yKSB7CkBAIC0xODg0LDcgKzE4ODQsNyBAQAogCQlyZXQgPSAtRU9QTk9UU1VQUDsKIAkJZ290byB1bmRvX2FsbG9jOwogCX0KLQltcF9yZWJ1aWx0ID0gVFJVRTsKKwltcF9yZWJ1aWx0ID0gdHJ1ZTsKIAkvKiBHZW5lcmF0ZSB0aGUgbWFwcGluZyBwYWlycyBhcnJheSBkaXJlY3RseSBpbnRvIHRoZSBhdHRyIHJlY29yZC4gKi8KIAlyZXQgPSBudGZzX21hcHBpbmdfcGFpcnNfYnVpbGQodm9sLCAodTgqKWEgKwogCQkJbGUxNl90b19jcHUoYS0+ZGF0YS5ub25fcmVzaWRlbnQubWFwcGluZ19wYWlyc19vZmZzZXQpLApAQCAtMjI1NSw3ICsyMjU1LDcgQEAKIAl1bnNpZ25lZCBpbnQgb2ZzOwogCWludCBlcnI7CiAJbGUxNiBzZXFfbm8sIHVzbjsKLQlCT09MIHJlY29yZF9mb3JtYXR0ZWQgPSBGQUxTRTsKKwlib29sIHJlY29yZF9mb3JtYXR0ZWQgPSBmYWxzZTsKIAogCWlmIChiYXNlX25pKSB7CiAJCW50ZnNfZGVidWcoIkVudGVyaW5nIChhbGxvY2F0aW5nIGFuIGV4dGVudCBtZnQgcmVjb3JkIGZvciAiCkBAIC0yNDU0LDcgKzI0NTQsNyBAQAogCQltZnRfbmktPmluaXRpYWxpemVkX3NpemUgPSBuZXdfaW5pdGlhbGl6ZWRfc2l6ZTsKIAl9CiAJd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUoJm1mdF9uaS0+c2l6ZV9sb2NrLCBmbGFncyk7Ci0JcmVjb3JkX2Zvcm1hdHRlZCA9IFRSVUU7CisJcmVjb3JkX2Zvcm1hdHRlZCA9IHRydWU7CiAJLyogVXBkYXRlIHRoZSBtZnQgZGF0YSBhdHRyaWJ1dGUgcmVjb3JkIHRvIHJlZmxlY3QgdGhlIG5ldyBzaXplcy4gKi8KIAltID0gbWFwX21mdF9yZWNvcmQobWZ0X25pKTsKIAlpZiAoSVNfRVJSKG0pKSB7CkBAIC0yNjM4LDExICsyNjM4LDYgQEAKIAkJfQogCQl2aS0+aV9pbm8gPSBiaXQ7CiAJCS8qCi0JCSAqIFRoaXMgaXMgdGhlIG9wdGltYWwgSU8gc2l6ZSAoZm9yIHN0YXQpLCBub3QgdGhlIGZzIGJsb2NrCi0JCSAqIHNpemUuCi0JCSAqLwotCQl2aS0+aV9ibGtzaXplID0gUEFHRV9DQUNIRV9TSVpFOwotCQkvKgogCQkgKiBUaGlzIGlzIGZvciBjaGVja2luZyB3aGV0aGVyIGFuIGlub2RlIGhhcyBjaGFuZ2VkIHcuci50LiBhCiAJCSAqIGZpbGUgc28gdGhhdCB0aGUgZmlsZSBjYW4gYmUgdXBkYXRlZCBpZiBuZWNlc3NhcnkgKGNvbXBhcmUKIAkJICogd2l0aCBmX3ZlcnNpb24pLgpAQCAtMjg5Myw3ICsyODg4LDcgQEAKIAlpZiAoIShiYXNlX25pLT5ucl9leHRlbnRzICYgMykpIHsKIAkJaW50IG5ld19zaXplID0gKGJhc2VfbmktPm5yX2V4dGVudHMgKyA0KSAqIHNpemVvZihudGZzX2lub2RlKik7CiAKLQkJZXh0ZW50X25pcyA9IChudGZzX2lub2RlKiopa21hbGxvYyhuZXdfc2l6ZSwgR0ZQX05PRlMpOworCQlleHRlbnRfbmlzID0ga21hbGxvYyhuZXdfc2l6ZSwgR0ZQX05PRlMpOwogCQlpZiAodW5saWtlbHkoIWV4dGVudF9uaXMpKSB7CiAJCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gYWxsb2NhdGUgaW50ZXJuYWwgIgogCQkJCQkiYnVmZmVyIGR1cmluZyByb2xsYmFjay4lcyIsIGVzKTsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbWZ0LmggYi9mcy9udGZzL21mdC5oCmluZGV4IDYzOWNkMWIuLmI1MmJmODcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvbWZ0LmgKKysrIGIvZnMvbnRmcy9tZnQuaApAQCAtMTExLDcgKzExMSw3IEBACiAJcmV0dXJuIGVycjsKIH0KIAotZXh0ZXJuIEJPT0wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChudGZzX3ZvbHVtZSAqdm9sLAorZXh0ZXJuIGJvb2wgbnRmc19tYXlfd3JpdGVfbWZ0X3JlY29yZChudGZzX3ZvbHVtZSAqdm9sLAogCQljb25zdCB1bnNpZ25lZCBsb25nIG1mdF9ubywgY29uc3QgTUZUX1JFQ09SRCAqbSwKIAkJbnRmc19pbm9kZSAqKmxvY2tlZF9uaSk7CiAKZGlmZiAtLWdpdCBhL2ZzL250ZnMvbnRmcy5oIGIvZnMvbnRmcy9udGZzLmgKaW5kZXggZGRkM2Q1MC4uYTEyODQ3YSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9udGZzLmgKKysrIGIvZnMvbnRmcy9udGZzLmgKQEAgLTEwNSw3ICsxMDUsNyBAQAogZXh0ZXJuIHZvaWQgcG9zdF93cml0ZV9tc3RfZml4dXAoTlRGU19SRUNPUkQgKmIpOwogCiAvKiBGcm9tIGZzL250ZnMvdW5pc3RyLmMgKi8KLWV4dGVybiBCT09MIG50ZnNfYXJlX25hbWVzX2VxdWFsKGNvbnN0IG50ZnNjaGFyICpzMSwgc2l6ZV90IHMxX2xlbiwKK2V4dGVybiBib29sIG50ZnNfYXJlX25hbWVzX2VxdWFsKGNvbnN0IG50ZnNjaGFyICpzMSwgc2l6ZV90IHMxX2xlbiwKIAkJY29uc3QgbnRmc2NoYXIgKnMyLCBzaXplX3QgczJfbGVuLAogCQljb25zdCBJR05PUkVfQ0FTRV9CT09MIGljLAogCQljb25zdCBudGZzY2hhciAqdXBjYXNlLCBjb25zdCB1MzIgdXBjYXNlX3NpemUpOwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9xdW90YS5jIGIvZnMvbnRmcy9xdW90YS5jCmluZGV4IGQwZWY0MTguLmQ4MGUzMzEgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvcXVvdGEuYworKysgYi9mcy9udGZzL3F1b3RhLmMKQEAgLTMxLDEwICszMSwxMCBAQAogICogbnRmc19tYXJrX3F1b3Rhc19vdXRfb2ZfZGF0ZSAtIG1hcmsgdGhlIHF1b3RhcyBvdXQgb2YgZGF0ZSBvbiBhbiBudGZzIHZvbHVtZQogICogQHZvbDoJbnRmcyB2b2x1bWUgb24gd2hpY2ggdG8gbWFyayB0aGUgcXVvdGFzIG91dCBvZiBkYXRlCiAgKgotICogTWFyayB0aGUgcXVvdGFzIG91dCBvZiBkYXRlIG9uIHRoZSBudGZzIHZvbHVtZSBAdm9sIGFuZCByZXR1cm4gVFJVRSBvbgotICogc3VjY2VzcyBhbmQgRkFMU0Ugb24gZXJyb3IuCisgKiBNYXJrIHRoZSBxdW90YXMgb3V0IG9mIGRhdGUgb24gdGhlIG50ZnMgdm9sdW1lIEB2b2wgYW5kIHJldHVybiAndHJ1ZScgb24KKyAqIHN1Y2Nlc3MgYW5kICdmYWxzZScgb24gZXJyb3IuCiAgKi8KLUJPT0wgbnRmc19tYXJrX3F1b3Rhc19vdXRfb2ZfZGF0ZShudGZzX3ZvbHVtZSAqdm9sKQorYm9vbCBudGZzX21hcmtfcXVvdGFzX291dF9vZl9kYXRlKG50ZnNfdm9sdW1lICp2b2wpCiB7CiAJbnRmc19pbmRleF9jb250ZXh0ICppY3R4OwogCVFVT1RBX0NPTlRST0xfRU5UUlkgKnFjZTsKQEAgLTQ2LDcgKzQ2LDcgQEAKIAkJZ290byBkb25lOwogCWlmICghdm9sLT5xdW90YV9pbm8gfHwgIXZvbC0+cXVvdGFfcV9pbm8pIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiUXVvdGEgaW5vZGVzIGFyZSBub3Qgb3Blbi4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCW11dGV4X2xvY2soJnZvbC0+cXVvdGFfcV9pbm8tPmlfbXV0ZXgpOwogCWljdHggPSBudGZzX2luZGV4X2N0eF9nZXQoTlRGU19JKHZvbC0+cXVvdGFfcV9pbm8pKTsKQEAgLTEwNiwxMiArMTA2LDEyIEBACiAJTlZvbFNldFF1b3RhT3V0T2ZEYXRlKHZvbCk7CiBkb25lOgogCW50ZnNfZGVidWcoIkRvbmUuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiBlcnJfb3V0OgogCWlmIChpY3R4KQogCQludGZzX2luZGV4X2N0eF9wdXQoaWN0eCk7CiAJbXV0ZXhfdW5sb2NrKCZ2b2wtPnF1b3RhX3FfaW5vLT5pX211dGV4KTsKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAjZW5kaWYgLyogTlRGU19SVyAqLwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy9xdW90YS5oIGIvZnMvbnRmcy9xdW90YS5oCmluZGV4IDQwZTQ3NjMuLjRjYmU1NTkgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvcXVvdGEuaAorKysgYi9mcy9udGZzL3F1b3RhLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJ0eXBlcy5oIgogI2luY2x1ZGUgInZvbHVtZS5oIgogCi1leHRlcm4gQk9PTCBudGZzX21hcmtfcXVvdGFzX291dF9vZl9kYXRlKG50ZnNfdm9sdW1lICp2b2wpOworZXh0ZXJuIGJvb2wgbnRmc19tYXJrX3F1b3Rhc19vdXRfb2ZfZGF0ZShudGZzX3ZvbHVtZSAqdm9sKTsKIAogI2VuZGlmIC8qIE5URlNfUlcgKi8KIApkaWZmIC0tZ2l0IGEvZnMvbnRmcy9ydW5saXN0LmMgYi9mcy9udGZzL3J1bmxpc3QuYwppbmRleCBlYjUyYjgwLi45YWZkNzJjIDEwMDY0NAotLS0gYS9mcy9udGZzL3J1bmxpc3QuYworKysgYi9mcy9udGZzL3J1bmxpc3QuYwpAQCAtMTQ5LDEwICsxNDksMTAgQEAKICAqCiAgKiBJdCBpcyB1cCB0byB0aGUgY2FsbGVyIHRvIHNlcmlhbGl6ZSBhY2Nlc3MgdG8gdGhlIHJ1bmxpc3RzIEBkc3QgYW5kIEBzcmMuCiAgKgotICogUmV0dXJuOiBUUlVFICAgU3VjY2VzcywgdGhlIHJ1bmxpc3RzIGNhbiBiZSBtZXJnZWQuCi0gKgkgICBGQUxTRSAgRmFpbHVyZSwgdGhlIHJ1bmxpc3RzIGNhbm5vdCBiZSBtZXJnZWQuCisgKiBSZXR1cm46IHRydWUgICBTdWNjZXNzLCB0aGUgcnVubGlzdHMgY2FuIGJlIG1lcmdlZC4KKyAqCSAgIGZhbHNlICBGYWlsdXJlLCB0aGUgcnVubGlzdHMgY2Fubm90IGJlIG1lcmdlZC4KICAqLwotc3RhdGljIGlubGluZSBCT09MIG50ZnNfYXJlX3JsX21lcmdlYWJsZShydW5saXN0X2VsZW1lbnQgKmRzdCwKK3N0YXRpYyBpbmxpbmUgYm9vbCBudGZzX2FyZV9ybF9tZXJnZWFibGUocnVubGlzdF9lbGVtZW50ICpkc3QsCiAJCXJ1bmxpc3RfZWxlbWVudCAqc3JjKQogewogCUJVR19PTighZHN0KTsKQEAgLTE2MCwxOSArMTYwLDE5IEBACiAKIAkvKiBXZSBjYW4gbWVyZ2UgdW5tYXBwZWQgcmVnaW9ucyBldmVuIGlmIHRoZXkgYXJlIG1pc2FsaWduZWQuICovCiAJaWYgKChkc3QtPmxjbiA9PSBMQ05fUkxfTk9UX01BUFBFRCkgJiYgKHNyYy0+bGNuID09IExDTl9STF9OT1RfTUFQUEVEKSkKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCS8qIElmIHRoZSBydW5zIGFyZSBtaXNhbGlnbmVkLCB3ZSBjYW5ub3QgbWVyZ2UgdGhlbS4gKi8KIAlpZiAoKGRzdC0+dmNuICsgZHN0LT5sZW5ndGgpICE9IHNyYy0+dmNuKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAkvKiBJZiBib3RoIHJ1bnMgYXJlIG5vbi1zcGFyc2UgYW5kIGNvbnRpZ3VvdXMsIHdlIGNhbiBtZXJnZSB0aGVtLiAqLwogCWlmICgoZHN0LT5sY24gPj0gMCkgJiYgKHNyYy0+bGNuID49IDApICYmCiAJCQkoKGRzdC0+bGNuICsgZHN0LT5sZW5ndGgpID09IHNyYy0+bGNuKSkKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCS8qIElmIHdlIGFyZSBtZXJnaW5nIHR3byBob2xlcywgd2UgY2FuIG1lcmdlIHRoZW0uICovCiAJaWYgKChkc3QtPmxjbiA9PSBMQ05fSE9MRSkgJiYgKHNyYy0+bGNuID09IExDTl9IT0xFKSkKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCS8qIENhbm5vdCBtZXJnZS4gKi8KLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKQEAgLTIxOCw3ICsyMTgsNyBAQAogc3RhdGljIGlubGluZSBydW5saXN0X2VsZW1lbnQgKm50ZnNfcmxfYXBwZW5kKHJ1bmxpc3RfZWxlbWVudCAqZHN0LAogCQlpbnQgZHNpemUsIHJ1bmxpc3RfZWxlbWVudCAqc3JjLCBpbnQgc3NpemUsIGludCBsb2MpCiB7Ci0JQk9PTCByaWdodCA9IEZBTFNFOwkvKiBSaWdodCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLworCWJvb2wgcmlnaHQgPSBmYWxzZTsJLyogUmlnaHQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KIAlpbnQgbWFya2VyOwkJLyogRW5kIG9mIHRoZSBpbnNlcnRlZCBydW5zLiAqLwogCiAJQlVHX09OKCFkc3QpOwpAQCAtMjg1LDggKzI4NSw4IEBACiBzdGF0aWMgaW5saW5lIHJ1bmxpc3RfZWxlbWVudCAqbnRmc19ybF9pbnNlcnQocnVubGlzdF9lbGVtZW50ICpkc3QsCiAJCWludCBkc2l6ZSwgcnVubGlzdF9lbGVtZW50ICpzcmMsIGludCBzc2l6ZSwgaW50IGxvYykKIHsKLQlCT09MIGxlZnQgPSBGQUxTRTsJLyogTGVmdCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLwotCUJPT0wgZGlzYyA9IEZBTFNFOwkvKiBEaXNjb250aW51aXR5IGJldHdlZW4gQGRzdCBhbmQgQHNyYy4gKi8KKwlib29sIGxlZnQgPSBmYWxzZTsJLyogTGVmdCBlbmQgb2YgQHNyYyBuZWVkcyBtZXJnaW5nLiAqLworCWJvb2wgZGlzYyA9IGZhbHNlOwkvKiBEaXNjb250aW51aXR5IGJldHdlZW4gQGRzdCBhbmQgQHNyYy4gKi8KIAlpbnQgbWFya2VyOwkJLyogRW5kIG9mIHRoZSBpbnNlcnRlZCBydW5zLiAqLwogCiAJQlVHX09OKCFkc3QpOwpAQCAtMzgyLDggKzM4Miw4IEBACiAJCWludCBkc2l6ZSwgcnVubGlzdF9lbGVtZW50ICpzcmMsIGludCBzc2l6ZSwgaW50IGxvYykKIHsKIAlzaWduZWQgZGVsdGE7Ci0JQk9PTCBsZWZ0ID0gRkFMU0U7CS8qIExlZnQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KLQlCT09MIHJpZ2h0ID0gRkFMU0U7CS8qIFJpZ2h0IGVuZCBvZiBAc3JjIG5lZWRzIG1lcmdpbmcuICovCisJYm9vbCBsZWZ0ID0gZmFsc2U7CS8qIExlZnQgZW5kIG9mIEBzcmMgbmVlZHMgbWVyZ2luZy4gKi8KKwlib29sIHJpZ2h0ID0gZmFsc2U7CS8qIFJpZ2h0IGVuZCBvZiBAc3JjIG5lZWRzIG1lcmdpbmcuICovCiAJaW50IHRhaWw7CQkvKiBTdGFydCBvZiB0YWlsIG9mIEBkc3QuICovCiAJaW50IG1hcmtlcjsJCS8qIEVuZCBvZiB0aGUgaW5zZXJ0ZWQgcnVucy4gKi8KIApAQCAtNjIwLDggKzYyMCw4IEBACiAJCTsKIAogCXsKLQlCT09MIHN0YXJ0OwotCUJPT0wgZmluaXNoOworCWJvb2wgc3RhcnQ7CisJYm9vbCBmaW5pc2g7CiAJaW50IGRzID0gZGVuZCArIDE7CQkvKiBOdW1iZXIgb2YgZWxlbWVudHMgaW4gZHJsICYgc3JsICovCiAJaW50IHNzID0gc2ZpbmFsIC0gc3N0YXJ0ICsgMTsKIApAQCAtNjM1LDcgKzYzNSw3IEBACiAJaWYgKGZpbmlzaCAmJiAhZHJsW2RpbnNdLmxlbmd0aCkKIAkJc3MrKzsKIAlpZiAobWFya2VyICYmIChkcmxbZGluc10udmNuICsgZHJsW2RpbnNdLmxlbmd0aCA+IHNybFtzZW5kIC0gMV0udmNuKSkKLQkJZmluaXNoID0gRkFMU0U7CisJCWZpbmlzaCA9IGZhbHNlOwogI2lmIDAKIAludGZzX2RlYnVnKCJkZmluYWwgPSAlaSwgZGVuZCA9ICVpIiwgZGZpbmFsLCBkZW5kKTsKIAludGZzX2RlYnVnKCJzc3RhcnQgPSAlaSwgc2ZpbmFsID0gJWksIHNlbmQgPSAlaSIsIHNzdGFydCwgc2ZpbmFsLCBzZW5kKTsKQEAgLTExMzQsNyArMTEzNCw3IEBACiB7CiAJTENOIHByZXZfbGNuOwogCWludCBybHM7Ci0JQk9PTCB0aGVfZW5kID0gRkFMU0U7CisJYm9vbCB0aGVfZW5kID0gZmFsc2U7CiAKIAlCVUdfT04oZmlyc3RfdmNuIDwgMCk7CiAJQlVHX09OKGxhc3RfdmNuIDwgLTEpOwpAQCAtMTE2OCw3ICsxMTY4LDcgQEAKIAkJCXM2NCBzMSA9IGxhc3RfdmNuICsgMTsKIAkJCWlmICh1bmxpa2VseShybFsxXS52Y24gPiBzMSkpCiAJCQkJbGVuZ3RoID0gczEgLSBybC0+dmNuOwotCQkJdGhlX2VuZCA9IFRSVUU7CisJCQl0aGVfZW5kID0gdHJ1ZTsKIAkJfQogCQlkZWx0YSA9IGZpcnN0X3ZjbiAtIHJsLT52Y247CiAJCS8qIEhlYWRlciBieXRlICsgbGVuZ3RoLiAqLwpAQCAtMTIwNCw3ICsxMjA0LDcgQEAKIAkJCXM2NCBzMSA9IGxhc3RfdmNuICsgMTsKIAkJCWlmICh1bmxpa2VseShybFsxXS52Y24gPiBzMSkpCiAJCQkJbGVuZ3RoID0gczEgLSBybC0+dmNuOwotCQkJdGhlX2VuZCA9IFRSVUU7CisJCQl0aGVfZW5kID0gdHJ1ZTsKIAkJfQogCQkvKiBIZWFkZXIgYnl0ZSArIGxlbmd0aC4gKi8KIAkJcmxzICs9IDEgKyBudGZzX2dldF9ucl9zaWduaWZpY2FudF9ieXRlcyhsZW5ndGgpOwpAQCAtMTMyNyw3ICsxMzI3LDcgQEAKIAlMQ04gcHJldl9sY247CiAJczggKmRzdF9tYXgsICpkc3RfbmV4dDsKIAlpbnQgZXJyID0gLUVOT1NQQzsKLQlCT09MIHRoZV9lbmQgPSBGQUxTRTsKKwlib29sIHRoZV9lbmQgPSBmYWxzZTsKIAlzOCBsZW5fbGVuLCBsY25fbGVuOwogCiAJQlVHX09OKGZpcnN0X3ZjbiA8IDApOwpAQCAtMTM3MCw3ICsxMzcwLDcgQEAKIAkJCXM2NCBzMSA9IGxhc3RfdmNuICsgMTsKIAkJCWlmICh1bmxpa2VseShybFsxXS52Y24gPiBzMSkpCiAJCQkJbGVuZ3RoID0gczEgLSBybC0+dmNuOwotCQkJdGhlX2VuZCA9IFRSVUU7CisJCQl0aGVfZW5kID0gdHJ1ZTsKIAkJfQogCQlkZWx0YSA9IGZpcnN0X3ZjbiAtIHJsLT52Y247CiAJCS8qIFdyaXRlIGxlbmd0aC4gKi8KQEAgLTE0MjIsNyArMTQyMiw3IEBACiAJCQlzNjQgczEgPSBsYXN0X3ZjbiArIDE7CiAJCQlpZiAodW5saWtlbHkocmxbMV0udmNuID4gczEpKQogCQkJCWxlbmd0aCA9IHMxIC0gcmwtPnZjbjsKLQkJCXRoZV9lbmQgPSBUUlVFOworCQkJdGhlX2VuZCA9IHRydWU7CiAJCX0KIAkJLyogV3JpdGUgbGVuZ3RoLiAqLwogCQlsZW5fbGVuID0gbnRmc193cml0ZV9zaWduaWZpY2FudF9ieXRlcyhkc3QgKyAxLCBkc3RfbWF4LApAQCAtMTU0MSw3ICsxNTQxLDcgQEAKIAkgKi8KIAlpZiAocmwtPmxlbmd0aCkgewogCQlydW5saXN0X2VsZW1lbnQgKnRybDsKLQkJQk9PTCBpc19lbmQ7CisJCWJvb2wgaXNfZW5kOwogCiAJCW50ZnNfZGVidWcoIlNocmlua2luZyBydW5saXN0LiIpOwogCQkvKiBEZXRlcm1pbmUgdGhlIHJ1bmxpc3Qgc2l6ZS4gKi8KQEAgLTE1NTUsMTEgKzE1NTUsMTEgQEAKIAkJICogSWYgYSBydW4gd2FzIHBhcnRpYWxseSB0cnVuY2F0ZWQsIG1ha2UgdGhlIGZvbGxvd2luZyBydW5saXN0CiAJCSAqIGVsZW1lbnQgYSB0ZXJtaW5hdG9yLgogCQkgKi8KLQkJaXNfZW5kID0gRkFMU0U7CisJCWlzX2VuZCA9IGZhbHNlOwogCQlpZiAocmwtPmxlbmd0aCkgewogCQkJcmwrKzsKIAkJCWlmICghcmwtPmxlbmd0aCkKLQkJCQlpc19lbmQgPSBUUlVFOworCQkJCWlzX2VuZCA9IHRydWU7CiAJCQlybC0+dmNuID0gbmV3X2xlbmd0aDsKIAkJCXJsLT5sZW5ndGggPSAwOwogCQl9CkBAIC0xNjQ4LDcgKzE2NDgsNyBAQAogCXM2NCBkZWx0YTsKIAlydW5saXN0X2VsZW1lbnQgKnJsLCAqcmxfZW5kLCAqcmxfcmVhbF9lbmQsICp0cmw7CiAJaW50IG9sZF9zaXplOwotCUJPT0wgbGNuX2ZpeHVwID0gRkFMU0U7CisJYm9vbCBsY25fZml4dXAgPSBmYWxzZTsKIAogCW50ZnNfZGVidWcoIkVudGVyaW5nIGZvciBzdGFydCAweCVsbHgsIGxlbmd0aCAweCVsbHguIiwKIAkJCShsb25nIGxvbmcpc3RhcnQsIChsb25nIGxvbmcpbGVuZ3RoKTsKQEAgLTE4NjIsNyArMTg2Miw3IEBACiAJCWlmIChybC0+bGNuID49IDApIHsKIAkJCXJsLT5sY24gLT0gZGVsdGE7CiAJCQkvKiBOZWVkIHRoaXMgaW4gY2FzZSB0aGUgbGNuIGp1c3QgYmVjYW1lIG5lZ2F0aXZlLiAqLwotCQkJbGNuX2ZpeHVwID0gVFJVRTsKKwkJCWxjbl9maXh1cCA9IHRydWU7CiAJCX0KIAkJcmwtPmxlbmd0aCArPSBkZWx0YTsKIAkJZ290byBzcGxpdF9lbmQ7CmRpZmYgLS1naXQgYS9mcy9udGZzL3N1cGVyLmMgYi9mcy9udGZzL3N1cGVyLmMKaW5kZXggNzRlMGVlOC4uMDNhMzkxYSAxMDA2NDQKLS0tIGEvZnMvbnRmcy9zdXBlci5jCisrKyBiL2ZzL250ZnMvc3VwZXIuYwpAQCAtNzQsMTggKzc0LDE4IEBACiAgKgogICogQ29waWVkIGZyb20gb2xkIG50ZnMgZHJpdmVyICh3aGljaCBjb3BpZWQgZnJvbSB2ZmF0IGRyaXZlcikuCiAgKi8KLXN0YXRpYyBpbnQgc2ltcGxlX2dldGJvb2woY2hhciAqcywgQk9PTCAqc2V0dmFsKQorc3RhdGljIGludCBzaW1wbGVfZ2V0Ym9vbChjaGFyICpzLCBib29sICpzZXR2YWwpCiB7CiAJaWYgKHMpIHsKIAkJaWYgKCFzdHJjbXAocywgIjEiKSB8fCAhc3RyY21wKHMsICJ5ZXMiKSB8fCAhc3RyY21wKHMsICJ0cnVlIikpCi0JCQkqc2V0dmFsID0gVFJVRTsKKwkJCSpzZXR2YWwgPSB0cnVlOwogCQllbHNlIGlmICghc3RyY21wKHMsICIwIikgfHwgIXN0cmNtcChzLCAibm8iKSB8fAogCQkJCQkJCSFzdHJjbXAocywgImZhbHNlIikpCi0JCQkqc2V0dmFsID0gRkFMU0U7CisJCQkqc2V0dmFsID0gZmFsc2U7CiAJCWVsc2UKIAkJCXJldHVybiAwOwogCX0gZWxzZQotCQkqc2V0dmFsID0gVFJVRTsKKwkJKnNldHZhbCA9IHRydWU7CiAJcmV0dXJuIDE7CiB9CiAKQEAgLTk2LDcgKzk2LDcgQEAKICAqCiAgKiBQYXJzZSB0aGUgcmVjb2duaXplZCBvcHRpb25zIGluIEBvcHQgZm9yIHRoZSBudGZzIHZvbHVtZSBkZXNjcmliZWQgYnkgQHZvbC4KICAqLwotc3RhdGljIEJPT0wgcGFyc2Vfb3B0aW9ucyhudGZzX3ZvbHVtZSAqdm9sLCBjaGFyICpvcHQpCitzdGF0aWMgYm9vbCBwYXJzZV9vcHRpb25zKG50ZnNfdm9sdW1lICp2b2wsIGNoYXIgKm9wdCkKIHsKIAljaGFyICpwLCAqdiwgKm92OwogCXN0YXRpYyBjaGFyICp1dGY4ID0gInV0ZjgiOwpAQCAtMTM3LDcgKzEzNyw3IEBACiAJfQogI2RlZmluZSBOVEZTX0dFVE9QVF9CT09MKG9wdGlvbiwgdmFyaWFibGUpCQkJCVwKIAlpZiAoIXN0cmNtcChwLCBvcHRpb24pKSB7CQkJCQlcCi0JCUJPT0wgdmFsOwkJCQkJCVwKKwkJYm9vbCB2YWw7CQkJCQkJXAogCQlpZiAoIXNpbXBsZV9nZXRib29sKHYsICZ2YWwpKQkJCQlcCiAJCQlnb3RvIG5lZWRzX2Jvb2w7CQkJCVwKIAkJdmFyaWFibGUgPSB2YWw7CQkJCQkJXApAQCAtMTcwLDcgKzE3MCw3IEBACiAJCWVsc2UgTlRGU19HRVRPUFRfT0NUQUwoImZtYXNrIiwgZm1hc2spCiAJCWVsc2UgTlRGU19HRVRPUFRfT0NUQUwoImRtYXNrIiwgZG1hc2spCiAJCWVsc2UgTlRGU19HRVRPUFQoIm1mdF96b25lX211bHRpcGxpZXIiLCBtZnRfem9uZV9tdWx0aXBsaWVyKQotCQllbHNlIE5URlNfR0VUT1BUX1dJVEhfREVGQVVMVCgic2xvcHB5Iiwgc2xvcHB5LCBUUlVFKQorCQllbHNlIE5URlNfR0VUT1BUX1dJVEhfREVGQVVMVCgic2xvcHB5Iiwgc2xvcHB5LCB0cnVlKQogCQllbHNlIE5URlNfR0VUT1BUX0JPT0woInNob3dfc3lzX2ZpbGVzIiwgc2hvd19zeXNfZmlsZXMpCiAJCWVsc2UgTlRGU19HRVRPUFRfQk9PTCgiY2FzZV9zZW5zaXRpdmUiLCBjYXNlX3NlbnNpdGl2ZSkKIAkJZWxzZSBOVEZTX0dFVE9QVF9CT09MKCJkaXNhYmxlX3NwYXJzZSIsIGRpc2FibGVfc3BhcnNlKQpAQCAtMTk0LDcgKzE5NCw3IEBACiAJCQkJaWYgKCFvbGRfbmxzKSB7CiAJCQkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk5MUyBjaGFyYWN0ZXIgc2V0ICIKIAkJCQkJCQkiJXMgbm90IGZvdW5kLiIsIHYpOwotCQkJCQlyZXR1cm4gRkFMU0U7CisJCQkJCXJldHVybiBmYWxzZTsKIAkJCQl9CiAJCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiTkxTIGNoYXJhY3RlciBzZXQgJXMgbm90ICIKIAkJCQkJCSJmb3VuZC4gVXNpbmcgcHJldmlvdXMgb25lICVzLiIsCkBAIC0yMDUsMTQgKzIwNSwxNCBAQAogCQkJCQl1bmxvYWRfbmxzKG9sZF9ubHMpOwogCQkJfQogCQl9IGVsc2UgaWYgKCFzdHJjbXAocCwgInV0ZjgiKSkgewotCQkJQk9PTCB2YWwgPSBGQUxTRTsKKwkJCWJvb2wgdmFsID0gZmFsc2U7CiAJCQludGZzX3dhcm5pbmcodm9sLT5zYiwgIk9wdGlvbiB1dGY4IGlzIG5vIGxvbmdlciAiCiAJCQkJICAgInN1cHBvcnRlZCwgdXNpbmcgb3B0aW9uIG5scz11dGY4LiBQbGVhc2UgIgogCQkJCSAgICJ1c2Ugb3B0aW9uIG5scz11dGY4IGluIHRoZSBmdXR1cmUgYW5kICIKIAkJCQkgICAibWFrZSBzdXJlIHV0ZjggaXMgY29tcGlsZWQgZWl0aGVyIGFzIGEgIgogCQkJCSAgICJtb2R1bGUgb3IgaW50byB0aGUga2VybmVsLiIpOwogCQkJaWYgKCF2IHx8ICEqdikKLQkJCQl2YWwgPSBUUlVFOworCQkJCXZhbCA9IHRydWU7CiAJCQllbHNlIGlmICghc2ltcGxlX2dldGJvb2wodiwgJnZhbCkpCiAJCQkJZ290byBuZWVkc19ib29sOwogCQkJaWYgKHZhbCkgewpAQCAtMjMxLDcgKzIzMSw3IEBACiAJfQogbm9fbW91bnRfb3B0aW9uczoKIAlpZiAoZXJyb3JzICYmICFzbG9wcHkpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCWlmIChzbG9wcHkpCiAJCW50ZnNfd2FybmluZyh2b2wtPnNiLCAiU2xvcHB5IG9wdGlvbiBnaXZlbi4gSWdub3JpbmcgIgogCQkJCSJ1bnJlY29nbml6ZWQgbW91bnQgb3B0aW9uKHMpIGFuZCBjb250aW51aW5nLiIpOwpAQCAtMjQwLDE0ICsyNDAsMTQgQEAKIAkJaWYgKCFvbl9lcnJvcnMpIHsKIAkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkludmFsaWQgZXJyb3JzIG9wdGlvbiBhcmd1bWVudCAiCiAJCQkJCSJvciBidWcgaW4gb3B0aW9ucyBwYXJzZXIuIik7Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9CiAJaWYgKG5sc19tYXApIHsKIAkJaWYgKHZvbC0+bmxzX21hcCAmJiB2b2wtPm5sc19tYXAgIT0gbmxzX21hcCkgewogCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiQ2Fubm90IGNoYW5nZSBOTFMgY2hhcmFjdGVyIHNldCAiCiAJCQkJCSJvbiByZW1vdW50LiIpOwotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9IC8qIGVsc2UgKCF2b2wtPm5sc19tYXApICovCiAJCW50ZnNfZGVidWcoIlVzaW5nIE5MUyBjaGFyYWN0ZXIgc2V0ICVzLiIsIG5sc19tYXAtPmNoYXJzZXQpOwogCQl2b2wtPm5sc19tYXAgPSBubHNfbWFwOwpAQCAtMjU3LDcgKzI1Nyw3IEBACiAJCQlpZiAoIXZvbC0+bmxzX21hcCkgewogCQkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkZhaWxlZCB0byBsb2FkIGRlZmF1bHQgIgogCQkJCQkJIk5MUyBjaGFyYWN0ZXIgc2V0LiIpOwotCQkJCXJldHVybiBGQUxTRTsKKwkJCQlyZXR1cm4gZmFsc2U7CiAJCQl9CiAJCQludGZzX2RlYnVnKCJVc2luZyBkZWZhdWx0IE5MUyBjaGFyYWN0ZXIgc2V0ICglcykuIiwKIAkJCQkJdm9sLT5ubHNfbWFwLT5jaGFyc2V0KTsKQEAgLTI2OCw3ICsyNjgsNyBAQAogCQkJCW1mdF96b25lX211bHRpcGxpZXIpIHsKIAkJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkNhbm5vdCBjaGFuZ2UgbWZ0X3pvbmVfbXVsdGlwbGllciAiCiAJCQkJCSJvbiByZW1vdW50LiIpOwotCQkJcmV0dXJuIEZBTFNFOworCQkJcmV0dXJuIGZhbHNlOwogCQl9CiAJCWlmIChtZnRfem9uZV9tdWx0aXBsaWVyIDwgMSB8fCBtZnRfem9uZV9tdWx0aXBsaWVyID4gNCkgewogCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiSW52YWxpZCBtZnRfem9uZV9tdWx0aXBsaWVyLiAiCkBAIC0zMTgsMTYgKzMxOCwxNiBAQAogCQkJCU5Wb2xTZXRTcGFyc2VFbmFibGVkKHZvbCk7CiAJCX0KIAl9Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiBuZWVkc19hcmc6CiAJbnRmc19lcnJvcih2b2wtPnNiLCAiVGhlICVzIG9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudC4iLCBwKTsKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogbmVlZHNfYm9vbDoKIAludGZzX2Vycm9yKHZvbC0+c2IsICJUaGUgJXMgb3B0aW9uIHJlcXVpcmVzIGEgYm9vbGVhbiBhcmd1bWVudC4iLCBwKTsKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogbmVlZHNfdmFsOgogCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkludmFsaWQgJXMgb3B0aW9uIGFyZ3VtZW50OiAlcyIsIHAsIG92KTsKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAjaWZkZWYgTlRGU19SVwpAQCAtNTQzLDE2ICs1NDMsMTYgQEAKICAqIGlzX2Jvb3Rfc2VjdG9yX250ZnMgLSBjaGVjayB3aGV0aGVyIGEgYm9vdCBzZWN0b3IgaXMgYSB2YWxpZCBOVEZTIGJvb3Qgc2VjdG9yCiAgKiBAc2I6CQlTdXBlciBibG9jayBvZiB0aGUgZGV2aWNlIHRvIHdoaWNoIEBiIGJlbG9uZ3MuCiAgKiBAYjoJCUJvb3Qgc2VjdG9yIG9mIGRldmljZSBAc2IgdG8gY2hlY2suCi0gKiBAc2lsZW50OglJZiBUUlVFLCBhbGwgb3V0cHV0IHdpbGwgYmUgc2lsZW5jZWQuCisgKiBAc2lsZW50OglJZiAndHJ1ZScsIGFsbCBvdXRwdXQgd2lsbCBiZSBzaWxlbmNlZC4KICAqCiAgKiBpc19ib290X3NlY3Rvcl9udGZzKCkgY2hlY2tzIHdoZXRoZXIgdGhlIGJvb3Qgc2VjdG9yIEBiIGlzIGEgdmFsaWQgTlRGUyBib290Ci0gKiBzZWN0b3IuIFJldHVybnMgVFJVRSBpZiBpdCBpcyB2YWxpZCBhbmQgRkFMU0UgaWYgbm90LgorICogc2VjdG9yLiBSZXR1cm5zICd0cnVlJyBpZiBpdCBpcyB2YWxpZCBhbmQgJ2ZhbHNlJyBpZiBub3QuCiAgKgogICogQHNiIGlzIG9ubHkgbmVlZGVkIGZvciB3YXJuaW5nL2Vycm9yIG91dHB1dCwgaS5lLiBpdCBjYW4gYmUgTlVMTCB3aGVuIHNpbGVudAotICogaXMgVFJVRS4KKyAqIGlzICd0cnVlJy4KICAqLwotc3RhdGljIEJPT0wgaXNfYm9vdF9zZWN0b3JfbnRmcyhjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAotCQljb25zdCBOVEZTX0JPT1RfU0VDVE9SICpiLCBjb25zdCBCT09MIHNpbGVudCkKK3N0YXRpYyBib29sIGlzX2Jvb3Rfc2VjdG9yX250ZnMoY29uc3Qgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJY29uc3QgTlRGU19CT09UX1NFQ1RPUiAqYiwgY29uc3QgYm9vbCBzaWxlbnQpCiB7CiAJLyoKIAkgKiBDaGVjayB0aGF0IGNoZWNrc3VtID09IHN1bSBvZiB1MzIgdmFsdWVzIGZyb20gYiB0byB0aGUgY2hlY2tzdW0KQEAgLTYyMCw5ICs2MjAsOSBAQAogCSAqLwogCWlmICghc2lsZW50ICYmIGItPmVuZF9vZl9zZWN0b3JfbWFya2VyICE9IGNvbnN0X2NwdV90b19sZTE2KDB4YWE1NSkpCiAJCW50ZnNfd2FybmluZyhzYiwgIkludmFsaWQgZW5kIG9mIHNlY3RvciBtYXJrZXIuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiBub3RfbnRmczoKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAvKioKQEAgLTczMiw5ICs3MzIsOSBAQAogICogQGI6CQlib290IHNlY3RvciB0byBwYXJzZQogICoKICAqIFBhcnNlIHRoZSBudGZzIGJvb3Qgc2VjdG9yIEBiIGFuZCBzdG9yZSBhbGwgaW1wb3JhbnQgaW5mb3JtYXRpb24gdGhlcmVpbiBpbgotICogdGhlIG50ZnMgc3VwZXIgYmxvY2sgQHZvbC4gIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3MgYW5kIEZBTFNFIG9uIGVycm9yLgorICogdGhlIG50ZnMgc3VwZXIgYmxvY2sgQHZvbC4gIFJldHVybiAndHJ1ZScgb24gc3VjY2VzcyBhbmQgJ2ZhbHNlJyBvbiBlcnJvci4KICAqLwotc3RhdGljIEJPT0wgcGFyc2VfbnRmc19ib290X3NlY3RvcihudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBOVEZTX0JPT1RfU0VDVE9SICpiKQorc3RhdGljIGJvb2wgcGFyc2VfbnRmc19ib290X3NlY3RvcihudGZzX3ZvbHVtZSAqdm9sLCBjb25zdCBOVEZTX0JPT1RfU0VDVE9SICpiKQogewogCXVuc2lnbmVkIGludCBzZWN0b3JzX3Blcl9jbHVzdGVyX2JpdHMsIG5yX2hpZGRlbl9zZWN0czsKIAlpbnQgY2x1c3RlcnNfcGVyX21mdF9yZWNvcmQsIGNsdXN0ZXJzX3Blcl9pbmRleF9yZWNvcmQ7CkBAIC03NTEsNyArNzUxLDcgQEAKIAkJCQkiZGV2aWNlIGJsb2NrIHNpemUgKCVsdSkuICBUaGlzIGlzIG5vdCAiCiAJCQkJInN1cHBvcnRlZC4gIFNvcnJ5LiIsIHZvbC0+c2VjdG9yX3NpemUsCiAJCQkJdm9sLT5zYi0+c19ibG9ja3NpemUpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJbnRmc19kZWJ1Zygic2VjdG9yc19wZXJfY2x1c3RlciA9IDB4JXgiLCBiLT5icGIuc2VjdG9yc19wZXJfY2x1c3Rlcik7CiAJc2VjdG9yc19wZXJfY2x1c3Rlcl9iaXRzID0gZmZzKGItPmJwYi5zZWN0b3JzX3Blcl9jbHVzdGVyKSAtIDE7CkBAIC03NzAsNyArNzcwLDcgQEAKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiQ2x1c3RlciBzaXplICglaSkgaXMgc21hbGxlciB0aGFuIHRoZSAiCiAJCQkJInNlY3RvciBzaXplICglaSkuICBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQuICAiCiAJCQkJIlNvcnJ5LiIsIHZvbC0+Y2x1c3Rlcl9zaXplLCB2b2wtPnNlY3Rvcl9zaXplKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWNsdXN0ZXJzX3Blcl9tZnRfcmVjb3JkID0gYi0+Y2x1c3RlcnNfcGVyX21mdF9yZWNvcmQ7CiAJbnRmc19kZWJ1ZygiY2x1c3RlcnNfcGVyX21mdF9yZWNvcmQgPSAlaSAoMHgleCkiLApAQCAtODAyLDcgKzgwMiw3IEBACiAJCQkJIlBBR0VfQ0FDSEVfU0laRSBvbiB5b3VyIHN5c3RlbSAoJWx1KS4gICIKIAkJCQkiVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgU29ycnkuIiwKIAkJCQl2b2wtPm1mdF9yZWNvcmRfc2l6ZSwgUEFHRV9DQUNIRV9TSVpFKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCS8qIFdlIGNhbm5vdCBzdXBwb3J0IG1mdCByZWNvcmQgc2l6ZXMgYmVsb3cgdGhlIHNlY3RvciBzaXplLiAqLwogCWlmICh2b2wtPm1mdF9yZWNvcmRfc2l6ZSA8IHZvbC0+c2VjdG9yX3NpemUpIHsKQEAgLTgxMCw3ICs4MTAsNyBAQAogCQkJCSJzZWN0b3Igc2l6ZSAoJWkpLiAgVGhpcyBpcyBub3Qgc3VwcG9ydGVkLiAgIgogCQkJCSJTb3JyeS4iLCB2b2wtPm1mdF9yZWNvcmRfc2l6ZSwKIAkJCQl2b2wtPnNlY3Rvcl9zaXplKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWNsdXN0ZXJzX3Blcl9pbmRleF9yZWNvcmQgPSBiLT5jbHVzdGVyc19wZXJfaW5kZXhfcmVjb3JkOwogCW50ZnNfZGVidWcoImNsdXN0ZXJzX3Blcl9pbmRleF9yZWNvcmQgPSAlaSAoMHgleCkiLApAQCAtODQxLDcgKzg0MSw3IEBACiAJCQkJInRoZSBzZWN0b3Igc2l6ZSAoJWkpLiAgVGhpcyBpcyBub3QgIgogCQkJCSJzdXBwb3J0ZWQuICBTb3JyeS4iLCB2b2wtPmluZGV4X3JlY29yZF9zaXplLAogCQkJCXZvbC0+c2VjdG9yX3NpemUpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyoKIAkgKiBHZXQgdGhlIHNpemUgb2YgdGhlIHZvbHVtZSBpbiBjbHVzdGVycyBhbmQgY2hlY2sgZm9yIDY0LWJpdC1uZXNzLgpAQCAtODUxLDcgKzg1MSw3IEBACiAJbGwgPSBzbGU2NF90b19jcHUoYi0+bnVtYmVyX29mX3NlY3RvcnMpID4+IHNlY3RvcnNfcGVyX2NsdXN0ZXJfYml0czsKIAlpZiAoKHU2NClsbCA+PSAxVUxMIDw8IDMyKSB7CiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIkNhbm5vdCBoYW5kbGUgNjQtYml0IGNsdXN0ZXJzLiAgU29ycnkuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAl2b2wtPm5yX2NsdXN0ZXJzID0gbGw7CiAJbnRmc19kZWJ1Zygidm9sLT5ucl9jbHVzdGVycyA9IDB4JWxseCIsIChsb25nIGxvbmcpdm9sLT5ucl9jbHVzdGVycyk7CkBAIC04NjcsNyArODY3LDcgQEAKIAkJCQkJIk1heGltdW0gc3VwcG9ydGVkIGlzIDJUaUIuICBTb3JyeS4iLAogCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWxsID4+ICg0MCAtCiAJCQkJCXZvbC0+Y2x1c3Rlcl9zaXplX2JpdHMpKTsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCX0KIAlsbCA9IHNsZTY0X3RvX2NwdShiLT5tZnRfbGNuKTsKQEAgLTg3NSw3ICs4NzUsNyBAQAogCQludGZzX2Vycm9yKHZvbC0+c2IsICJNRlQgTENOICglbGxpLCAweCVsbHgpIGlzIGJleW9uZCBlbmQgb2YgIgogCQkJCSJ2b2x1bWUuICBXZWlyZC4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxsLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGwpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJdm9sLT5tZnRfbGNuID0gbGw7CiAJbnRmc19kZWJ1Zygidm9sLT5tZnRfbGNuID0gMHglbGx4IiwgKGxvbmcgbG9uZyl2b2wtPm1mdF9sY24pOwpAQCAtODg0LDcgKzg4NCw3IEBACiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIk1GVE1pcnIgTENOICglbGxpLCAweCVsbHgpIGlzIGJleW9uZCBlbmQgIgogCQkJCSJvZiB2b2x1bWUuICBXZWlyZC4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxsLAogCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpbGwpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJdm9sLT5tZnRtaXJyX2xjbiA9IGxsOwogCW50ZnNfZGVidWcoInZvbC0+bWZ0bWlycl9sY24gPSAweCVsbHgiLCAobG9uZyBsb25nKXZvbC0+bWZ0bWlycl9sY24pOwpAQCAtOTA3LDcgKzkwNyw3IEBACiAJdm9sLT5zZXJpYWxfbm8gPSBsZTY0X3RvX2NwdShiLT52b2x1bWVfc2VyaWFsX251bWJlcik7CiAJbnRmc19kZWJ1Zygidm9sLT5zZXJpYWxfbm8gPSAweCVsbHgiLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZyl2b2wtPnNlcmlhbF9ubyk7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtMTAwMCw5ICsxMDAwLDkgQEAKICAqIGxvYWRfYW5kX2luaXRfbWZ0X21pcnJvciAtIGxvYWQgYW5kIHNldHVwIHRoZSBtZnQgbWlycm9yIGlub2RlIGZvciBhIHZvbHVtZQogICogQHZvbDoJbnRmcyBzdXBlciBibG9jayBkZXNjcmliaW5nIGRldmljZSB3aG9zZSBtZnQgbWlycm9yIHRvIGxvYWQKICAqCi0gKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgorICogUmV0dXJuICd0cnVlJyBvbiBzdWNjZXNzIG9yICdmYWxzZScgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBCT09MIGxvYWRfYW5kX2luaXRfbWZ0X21pcnJvcihudGZzX3ZvbHVtZSAqdm9sKQorc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF9tZnRfbWlycm9yKG50ZnNfdm9sdW1lICp2b2wpCiB7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vOwogCW50ZnNfaW5vZGUgKnRtcF9uaTsKQEAgLTEwMTQsNyArMTAxNCw3IEBACiAJCWlmICghSVNfRVJSKHRtcF9pbm8pKQogCQkJaXB1dCh0bXBfaW5vKTsKIAkJLyogQ2FsbGVyIHdpbGwgZGlzcGxheSBlcnJvciBtZXNzYWdlLiAqLwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyoKIAkgKiBSZS1pbml0aWFsaXplIHNvbWUgc3BlY2lmaWNzIGFib3V0ICRNRlRNaXJyJ3MgaW5vZGUgYXMKQEAgLTEwNDEsMjAgKzEwNDEsMjAgQEAKIAl0bXBfbmktPml0eXBlLmluZGV4LmJsb2NrX3NpemVfYml0cyA9IHZvbC0+bWZ0X3JlY29yZF9zaXplX2JpdHM7CiAJdm9sLT5tZnRtaXJyX2lubyA9IHRtcF9pbm87CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCiAgKiBjaGVja19tZnRfbWlycm9yIC0gY29tcGFyZSBjb250ZW50cyBvZiB0aGUgbWZ0IG1pcnJvciB3aXRoIHRoZSBtZnQKICAqIEB2b2w6CW50ZnMgc3VwZXIgYmxvY2sgZGVzY3JpYmluZyBkZXZpY2Ugd2hvc2UgbWZ0IG1pcnJvciB0byBjaGVjawogICoKLSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCisgKiBSZXR1cm4gJ3RydWUnIG9uIHN1Y2Nlc3Mgb3IgJ2ZhbHNlJyBvbiBlcnJvci4KICAqCiAgKiBOb3RlLCB0aGlzIGZ1bmN0aW9uIGFsc28gcmVzdWx0cyBpbiB0aGUgbWZ0IG1pcnJvciBydW5saXN0IGJlaW5nIGNvbXBsZXRlbHkKICAqIG1hcHBlZCBpbnRvIG1lbW9yeS4gIFRoZSBtZnQgbWlycm9yIHdyaXRlIGNvZGUgcmVxdWlyZXMgdGhpcyBhbmQgd2lsbCBCVUcoKQogICogc2hvdWxkIGl0IGZpbmQgYW4gdW5tYXBwZWQgcnVubGlzdCBlbGVtZW50LgogICovCi1zdGF0aWMgQk9PTCBjaGVja19tZnRfbWlycm9yKG50ZnNfdm9sdW1lICp2b2wpCitzdGF0aWMgYm9vbCBjaGVja19tZnRfbWlycm9yKG50ZnNfdm9sdW1lICp2b2wpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHZvbC0+c2I7CiAJbnRmc19pbm9kZSAqbWlycl9uaTsKQEAgLTEwODYsNyArMTA4Niw3IEBACiAJCQkJCWluZGV4KTsKIAkJCWlmIChJU19FUlIobWZ0X3BhZ2UpKSB7CiAJCQkJbnRmc19lcnJvcihzYiwgIkZhaWxlZCB0byByZWFkICRNRlQuIik7Ci0JCQkJcmV0dXJuIEZBTFNFOworCQkJCXJldHVybiBmYWxzZTsKIAkJCX0KIAkJCWttZnQgPSBwYWdlX2FkZHJlc3MobWZ0X3BhZ2UpOwogCQkJLyogR2V0IHRoZSAkTUZUTWlyciBwYWdlLiAqLwpAQCAtMTExMCw3ICsxMTEwLDcgQEAKIAkJCQludGZzX3VubWFwX3BhZ2UobWlycl9wYWdlKTsKIG1mdF91bm1hcF9vdXQ6CiAJCQkJbnRmc191bm1hcF9wYWdlKG1mdF9wYWdlKTsKLQkJCQlyZXR1cm4gRkFMU0U7CisJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQogCQl9CiAJCS8qIERvIG5vdCBjaGVjayB0aGUgbWlycm9yIHJlY29yZCBpZiBpdCBpcyBub3QgaW4gdXNlLiAqLwpAQCAtMTE2OSwyMSArMTE2OSwyMSBAQAogCQkJbnRmc19lcnJvcihzYiwgIiRNRlRNaXJyIGxvY2F0aW9uIG1pc21hdGNoLiAgIgogCQkJCQkiUnVuIGNoa2Rzay4iKTsKIAkJCXVwX3JlYWQoJm1pcnJfbmktPnJ1bmxpc3QubG9jayk7Ci0JCQlyZXR1cm4gRkFMU0U7CisJCQlyZXR1cm4gZmFsc2U7CiAJCX0KIAl9IHdoaWxlIChybDJbaSsrXS5sZW5ndGgpOwogCXVwX3JlYWQoJm1pcnJfbmktPnJ1bmxpc3QubG9jayk7CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCiAgKiBsb2FkX2FuZF9jaGVja19sb2dmaWxlIC0gbG9hZCBhbmQgY2hlY2sgdGhlIGxvZ2ZpbGUgaW5vZGUgZm9yIGEgdm9sdW1lCiAgKiBAdm9sOgludGZzIHN1cGVyIGJsb2NrIGRlc2NyaWJpbmcgZGV2aWNlIHdob3NlIGxvZ2ZpbGUgdG8gbG9hZAogICoKLSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCisgKiBSZXR1cm4gJ3RydWUnIG9uIHN1Y2Nlc3Mgb3IgJ2ZhbHNlJyBvbiBlcnJvci4KICAqLwotc3RhdGljIEJPT0wgbG9hZF9hbmRfY2hlY2tfbG9nZmlsZShudGZzX3ZvbHVtZSAqdm9sLAorc3RhdGljIGJvb2wgbG9hZF9hbmRfY2hlY2tfbG9nZmlsZShudGZzX3ZvbHVtZSAqdm9sLAogCQlSRVNUQVJUX1BBR0VfSEVBREVSICoqcnApCiB7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vOwpAQCAtMTE5NCwxNyArMTE5NCwxNyBAQAogCQlpZiAoIUlTX0VSUih0bXBfaW5vKSkKIAkJCWlwdXQodG1wX2lubyk7CiAJCS8qIENhbGxlciB3aWxsIGRpc3BsYXkgZXJyb3IgbWVzc2FnZS4gKi8KLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmICghbnRmc19jaGVja19sb2dmaWxlKHRtcF9pbm8sIHJwKSkgewogCQlpcHV0KHRtcF9pbm8pOwogCQkvKiBudGZzX2NoZWNrX2xvZ2ZpbGUoKSB3aWxsIGhhdmUgZGlzcGxheWVkIGVycm9yIG91dHB1dC4gKi8KLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCU5Jbm9TZXRTcGFyc2VEaXNhYmxlZChOVEZTX0kodG1wX2lubykpOwogCXZvbC0+bG9nZmlsZV9pbm8gPSB0bXBfaW5vOwogCW50ZnNfZGVidWcoIkRvbmUuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKICNkZWZpbmUgTlRGU19ISUJFUkZJTF9IRUFERVJfU0laRQk0MDk2CkBAIC0xMzI5LDEwICsxMzI5LDEwIEBACiAgKiBsb2FkX2FuZF9pbml0X3F1b3RhIC0gbG9hZCBhbmQgc2V0dXAgdGhlIHF1b3RhIGZpbGUgZm9yIGEgdm9sdW1lIGlmIHByZXNlbnQKICAqIEB2b2w6CW50ZnMgc3VwZXIgYmxvY2sgZGVzY3JpYmluZyBkZXZpY2Ugd2hvc2UgcXVvdGEgZmlsZSB0byBsb2FkCiAgKgotICogUmV0dXJuIFRSVUUgb24gc3VjY2VzcyBvciBGQUxTRSBvbiBlcnJvci4gIElmICRRdW90YSBpcyBub3QgcHJlc2VudCwgd2UKKyAqIFJldHVybiAndHJ1ZScgb24gc3VjY2VzcyBvciAnZmFsc2UnIG9uIGVycm9yLiAgSWYgJFF1b3RhIGlzIG5vdCBwcmVzZW50LCB3ZQogICogbGVhdmUgdm9sLT5xdW90YV9pbm8gYXMgTlVMTCBhbmQgcmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBCT09MIGxvYWRfYW5kX2luaXRfcXVvdGEobnRmc192b2x1bWUgKnZvbCkKK3N0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfcXVvdGEobnRmc192b2x1bWUgKnZvbCkKIHsKIAlNRlRfUkVGIG1yZWY7CiAJc3RydWN0IGlub2RlICp0bXBfaW5vOwpAQCAtMTM2NiwxMSArMTM2NiwxMSBAQAogCQkJICogbm90IGVuYWJsZWQuCiAJCQkgKi8KIAkJCU5Wb2xTZXRRdW90YU91dE9mRGF0ZSh2b2wpOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJlZC4gKi8KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGZpbmQgaW5vZGUgbnVtYmVyIGZvciAkUXVvdGEuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKiBXZSBkbyBub3QgY2FyZSBmb3IgdGhlIHR5cGUgb2YgbWF0Y2ggdGhhdCB3YXMgZm91bmQuICovCiAJa2ZyZWUobmFtZSk7CkBAIC0xMzgwLDI1ICsxMzgwLDI1IEBACiAJCWlmICghSVNfRVJSKHRtcF9pbm8pKQogCQkJaXB1dCh0bXBfaW5vKTsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGxvYWQgJFF1b3RhLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJdm9sLT5xdW90YV9pbm8gPSB0bXBfaW5vOwogCS8qIEdldCB0aGUgJFEgaW5kZXggYWxsb2NhdGlvbiBhdHRyaWJ1dGUuICovCiAJdG1wX2lubyA9IG50ZnNfaW5kZXhfaWdldCh2b2wtPnF1b3RhX2lubywgUSwgMik7CiAJaWYgKElTX0VSUih0bXBfaW5vKSkgewogCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbG9hZCAkUXVvdGEvJFEgaW5kZXguIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAl2b2wtPnF1b3RhX3FfaW5vID0gdG1wX2lubzsKIAludGZzX2RlYnVnKCJEb25lLiIpOwotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAvKioKICAqIGxvYWRfYW5kX2luaXRfdXNuanJubCAtIGxvYWQgYW5kIHNldHVwIHRoZSB0cmFuc2FjdGlvbiBsb2cgaWYgcHJlc2VudAogICogQHZvbDoJbnRmcyBzdXBlciBibG9jayBkZXNjcmliaW5nIGRldmljZSB3aG9zZSB1c25qcm5sIGZpbGUgdG8gbG9hZAogICoKLSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCisgKiBSZXR1cm4gJ3RydWUnIG9uIHN1Y2Nlc3Mgb3IgJ2ZhbHNlJyBvbiBlcnJvci4KICAqCiAgKiBJZiAkVXNuSnJubCBpcyBub3QgcHJlc2VudCBvciBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBkaXNhYmxlZCwgd2Ugc2V0CiAgKiBOVm9sVXNuSnJubFN0YW1wZWQoKSBhbmQgcmV0dXJuIHN1Y2Nlc3MuCkBAIC0xNDA4LDcgKzE0MDgsNyBAQAogICogc3RhbXBlZCBhbmQgbm90aGluZyBoYXMgYmVlbiBsb2dnZWQgc2luY2UsIHdlIGFsc28gc2V0IE5Wb2xVc25Kcm5sU3RhbXBlZCgpCiAgKiBhbmQgcmV0dXJuIHN1Y2Nlc3MuCiAgKi8KLXN0YXRpYyBCT09MIGxvYWRfYW5kX2luaXRfdXNuanJubChudGZzX3ZvbHVtZSAqdm9sKQorc3RhdGljIGJvb2wgbG9hZF9hbmRfaW5pdF91c25qcm5sKG50ZnNfdm9sdW1lICp2b2wpCiB7CiAJTUZUX1JFRiBtcmVmOwogCXN0cnVjdCBpbm9kZSAqdG1wX2lubzsKQEAgLTE0NTAsMTIgKzE0NTAsMTIgQEAKIAkJCSAqIHRyYW5zYWN0aW9uIGxvZ2dpbmcgaXMgbm90IGVuYWJsZWQuCiAJCQkgKi8KIAkJCU5Wb2xTZXRVc25Kcm5sU3RhbXBlZCh2b2wpOwotCQkJcmV0dXJuIFRSVUU7CisJCQlyZXR1cm4gdHJ1ZTsKIAkJfQogCQkvKiBBIHJlYWwgZXJyb3Igb2NjdXJlZC4gKi8KIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGZpbmQgaW5vZGUgbnVtYmVyIGZvciAiCiAJCQkJIiRVc25Kcm5sLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogV2UgZG8gbm90IGNhcmUgZm9yIHRoZSB0eXBlIG9mIG1hdGNoIHRoYXQgd2FzIGZvdW5kLiAqLwogCWtmcmVlKG5hbWUpOwpAQCAtMTQ2NSw3ICsxNDY1LDcgQEAKIAkJaWYgKCFJU19FUlIodG1wX2lubykpCiAJCQlpcHV0KHRtcF9pbm8pOwogCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gbG9hZCAkVXNuSnJubC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbC0+dXNuanJubF9pbm8gPSB0bXBfaW5vOwogCS8qCkBAIC0xNDgzLDcgKzE0ODMsNyBAQAogCWlmIChJU19FUlIodG1wX2lubykpIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGxvYWQgJFVzbkpybmwvJERBVEEvJE1heCAiCiAJCQkJImF0dHJpYnV0ZS4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCXZvbC0+dXNuanJubF9tYXhfaW5vID0gdG1wX2lubzsKIAlpZiAodW5saWtlbHkoaV9zaXplX3JlYWQodG1wX2lubykgPCBzaXplb2YoVVNOX0hFQURFUikpKSB7CkBAIC0xNDkxLDE0ICsxNDkxLDE0IEBACiAJCQkJImF0dHJpYnV0ZSAoc2l6ZSBpcyAweCVsbHggYnV0IHNob3VsZCBiZSBhdCAiCiAJCQkJImxlYXN0IDB4JXp4IGJ5dGVzKS4iLCBpX3NpemVfcmVhZCh0bXBfaW5vKSwKIAkJCQlzaXplb2YoVVNOX0hFQURFUikpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogR2V0IHRoZSAkREFUQS8kSiBhdHRyaWJ1dGUuICovCiAJdG1wX2lubyA9IG50ZnNfYXR0cl9pZ2V0KHZvbC0+dXNuanJubF9pbm8sIEFUX0RBVEEsIEosIDIpOwogCWlmIChJU19FUlIodG1wX2lubykpIHsKIAkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIGxvYWQgJFVzbkpybmwvJERBVEEvJEogIgogCQkJCSJhdHRyaWJ1dGUuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAl2b2wtPnVzbmpybmxfal9pbm8gPSB0bXBfaW5vOwogCS8qIFZlcmlmeSAkSiBpcyBub24tcmVzaWRlbnQgYW5kIHNwYXJzZS4gKi8KQEAgLTE1MDYsMTQgKzE1MDYsMTQgQEAKIAlpZiAodW5saWtlbHkoIU5Jbm9Ob25SZXNpZGVudCh0bXBfbmkpIHx8ICFOSW5vU3BhcnNlKHRtcF9uaSkpKSB7CiAJCW50ZnNfZXJyb3Iodm9sLT5zYiwgIiRVc25Kcm5sLyREQVRBLyRKIGF0dHJpYnV0ZSBpcyByZXNpZGVudCAiCiAJCQkJImFuZC9vciBub3Qgc3BhcnNlLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAJLyogUmVhZCB0aGUgVVNOX0hFQURFUiBmcm9tICREQVRBLyRNYXguICovCiAJcGFnZSA9IG50ZnNfbWFwX3BhZ2Uodm9sLT51c25qcm5sX21heF9pbm8tPmlfbWFwcGluZywgMCk7CiAJaWYgKElTX0VSUihwYWdlKSkgewogCQludGZzX2Vycm9yKHZvbC0+c2IsICJGYWlsZWQgdG8gcmVhZCBmcm9tICRVc25Kcm5sLyREQVRBLyRNYXggIgogCQkJCSJhdHRyaWJ1dGUuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAl1aCA9IChVU05fSEVBREVSKilwYWdlX2FkZHJlc3MocGFnZSk7CiAJLyogU2FuaXR5IGNoZWNrIHRoZSAkTWF4LiAqLwpAQCAtMTUyNCw3ICsxNTI0LDcgQEAKIAkJCQkobG9uZyBsb25nKXNsZTY0X3RvX2NwdSh1aC0+YWxsb2NhdGlvbl9kZWx0YSksCiAJCQkJKGxvbmcgbG9uZylzbGU2NF90b19jcHUodWgtPm1heGltdW1fc2l6ZSkpOwogCQludGZzX3VubWFwX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAkvKgogCSAqIElmIHRoZSB0cmFuc2FjdGlvbiBsb2cgaGFzIGJlZW4gc3RhbXBlZCBhbmQgbm90aGluZyBoYXMgYmVlbiB3cml0dGVuCkBAIC0xNTQ4LDIwICsxNTQ4LDIwIEBACiAJCQkJKGxvbmcgbG9uZylzbGU2NF90b19jcHUodWgtPmxvd2VzdF92YWxpZF91c24pLAogCQkJCWlfc2l6ZV9yZWFkKHZvbC0+dXNuanJubF9qX2lubykpOwogCQludGZzX3VubWFwX3BhZ2UocGFnZSk7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAludGZzX3VubWFwX3BhZ2UocGFnZSk7CiAJbnRmc19kZWJ1ZygiRG9uZS4iKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCiAgKiBsb2FkX2FuZF9pbml0X2F0dHJkZWYgLSBsb2FkIHRoZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbnMgdGFibGUgZm9yIGEgdm9sdW1lCiAgKiBAdm9sOgludGZzIHN1cGVyIGJsb2NrIGRlc2NyaWJpbmcgZGV2aWNlIHdob3NlIGF0dHJkZWYgdG8gbG9hZAogICoKLSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCisgKiBSZXR1cm4gJ3RydWUnIG9uIHN1Y2Nlc3Mgb3IgJ2ZhbHNlJyBvbiBlcnJvci4KICAqLwotc3RhdGljIEJPT0wgbG9hZF9hbmRfaW5pdF9hdHRyZGVmKG50ZnNfdm9sdW1lICp2b2wpCitzdGF0aWMgYm9vbCBsb2FkX2FuZF9pbml0X2F0dHJkZWYobnRmc192b2x1bWUgKnZvbCkKIHsKIAlsb2ZmX3QgaV9zaXplOwogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2b2wtPnNiOwpAQCAtMTYwNyw3ICsxNjA3LDcgQEAKIAl2b2wtPmF0dHJkZWZfc2l6ZSA9IGlfc2l6ZTsKIAludGZzX2RlYnVnKCJSZWFkICVsbHUgYnl0ZXMgZnJvbSAkQXR0ckRlZi4iLCBpX3NpemUpOwogCWlwdXQoaW5vKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIGZyZWVfaXB1dF9mYWlsZWQ6CiAJbnRmc19mcmVlKHZvbC0+YXR0cmRlZik7CiAJdm9sLT5hdHRyZGVmID0gTlVMTDsKQEAgLTE2MTUsNyArMTYxNSw3IEBACiAJaXB1dChpbm8pOwogZmFpbGVkOgogCW50ZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBhdHRyaWJ1dGUgZGVmaW5pdGlvbiB0YWJsZS4iKTsKLQlyZXR1cm4gRkFMU0U7CisJcmV0dXJuIGZhbHNlOwogfQogCiAjZW5kaWYgLyogTlRGU19SVyAqLwpAQCAtMTYyNCw5ICsxNjI0LDkgQEAKICAqIGxvYWRfYW5kX2luaXRfdXBjYXNlIC0gbG9hZCB0aGUgdXBjYXNlIHRhYmxlIGZvciBhbiBudGZzIHZvbHVtZQogICogQHZvbDoJbnRmcyBzdXBlciBibG9jayBkZXNjcmliaW5nIGRldmljZSB3aG9zZSB1cGNhc2UgdG8gbG9hZAogICoKLSAqIFJldHVybiBUUlVFIG9uIHN1Y2Nlc3Mgb3IgRkFMU0Ugb24gZXJyb3IuCisgKiBSZXR1cm4gJ3RydWUnIG9uIHN1Y2Nlc3Mgb3IgJ2ZhbHNlJyBvbiBlcnJvci4KICAqLwotc3RhdGljIEJPT0wgbG9hZF9hbmRfaW5pdF91cGNhc2UobnRmc192b2x1bWUgKnZvbCkKK3N0YXRpYyBib29sIGxvYWRfYW5kX2luaXRfdXBjYXNlKG50ZnNfdm9sdW1lICp2b2wpCiB7CiAJbG9mZl90IGlfc2l6ZTsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gdm9sLT5zYjsKQEAgLTE2ODIsNyArMTY4Miw3IEBACiAJCW50ZnNfZGVidWcoIlVzaW5nIHZvbHVtZSBzcGVjaWZpZWQgJFVwQ2FzZSBzaW5jZSBkZWZhdWx0IGlzICIKIAkJCQkibm90IHByZXNlbnQuIik7CiAJCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKLQkJcmV0dXJuIFRSVUU7CisJCXJldHVybiB0cnVlOwogCX0KIAltYXggPSBkZWZhdWx0X3VwY2FzZV9sZW47CiAJaWYgKG1heCA+IHZvbC0+dXBjYXNlX2xlbikKQEAgLTE2OTgsMTIgKzE2OTgsMTIgQEAKIAkJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCQludGZzX2RlYnVnKCJWb2x1bWUgc3BlY2lmaWVkICRVcENhc2UgbWF0Y2hlcyBkZWZhdWx0LiBVc2luZyAiCiAJCQkJImRlZmF1bHQuIik7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCW50ZnNfZGVidWcoIlVzaW5nIHZvbHVtZSBzcGVjaWZpZWQgJFVwQ2FzZSBzaW5jZSBpdCBkb2VzIG5vdCBtYXRjaCAiCiAJCQkidGhlIGRlZmF1bHQuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiBpcHV0X3VwY2FzZV9mYWlsZWQ6CiAJaXB1dChpbm8pOwogCW50ZnNfZnJlZSh2b2wtPnVwY2FzZSk7CkBAIC0xNzE3LDExICsxNzE3LDExIEBACiAJCW11dGV4X3VubG9jaygmbnRmc19sb2NrKTsKIAkJbnRmc19lcnJvcihzYiwgIkZhaWxlZCB0byBsb2FkICRVcENhc2UgZnJvbSB0aGUgdm9sdW1lLiBVc2luZyAiCiAJCQkJImRlZmF1bHQuIik7Ci0JCXJldHVybiBUUlVFOworCQlyZXR1cm4gdHJ1ZTsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZudGZzX2xvY2spOwogCW50ZnNfZXJyb3Ioc2IsICJGYWlsZWQgdG8gaW5pdGlhbGl6ZSB1cGNhc2UgdGFibGUuIik7Ci0JcmV0dXJuIEZBTFNFOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoKQEAgLTE3MzksOSArMTczOSw5IEBACiAgKiBPcGVuIHRoZSBzeXN0ZW0gZmlsZXMgd2l0aCBub3JtYWwgYWNjZXNzIGZ1bmN0aW9ucyBhbmQgY29tcGxldGUgc2V0dGluZyB1cAogICogdGhlIG50ZnMgc3VwZXIgYmxvY2sgQHZvbC4KICAqCi0gKiBSZXR1cm4gVFJVRSBvbiBzdWNjZXNzIG9yIEZBTFNFIG9uIGVycm9yLgorICogUmV0dXJuICd0cnVlJyBvbiBzdWNjZXNzIG9yICdmYWxzZScgb24gZXJyb3IuCiAgKi8KLXN0YXRpYyBCT09MIGxvYWRfc3lzdGVtX2ZpbGVzKG50ZnNfdm9sdW1lICp2b2wpCitzdGF0aWMgYm9vbCBsb2FkX3N5c3RlbV9maWxlcyhudGZzX3ZvbHVtZSAqdm9sKQogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB2b2wtPnNiOwogCU1GVF9SRUNPUkQgKm07CkBAIC0yMDY3LDcgKzIwNjcsNyBAQAogI2VuZGlmIC8qIE5URlNfUlcgKi8KIAkvKiBJZiBvbiBOVEZTIHZlcnNpb25zIGJlZm9yZSAzLjAsIHdlIGFyZSBkb25lLiAqLwogCWlmICh1bmxpa2VseSh2b2wtPm1ham9yX3ZlciA8IDMpKQotCQlyZXR1cm4gVFJVRTsKKwkJcmV0dXJuIHRydWU7CiAJLyogTlRGUyAzLjArIHNwZWNpZmljIGluaXRpYWxpemF0aW9uLiAqLwogCS8qIEdldCB0aGUgc2VjdXJpdHkgZGVzY3JpcHRvcnMgaW5vZGUuICovCiAJdm9sLT5zZWN1cmVfaW5vID0gbnRmc19pZ2V0KHNiLCBGSUxFX1NlY3VyZSk7CkBAIC0yMTczLDcgKzIxNzMsNyBAQAogCQlOVm9sU2V0RXJyb3JzKHZvbCk7CiAJfQogI2VuZGlmIC8qIE5URlNfUlcgKi8KLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKICNpZmRlZiBOVEZTX1JXCiBpcHV0X3VzbmpybmxfZXJyX291dDoKIAlpZiAodm9sLT51c25qcm5sX2pfaW5vKQpAQCAtMjIyOSw3ICsyMjI5LDcgQEAKIAlpZiAodm9sLT5tZnRtaXJyX2lubykKIAkJaXB1dCh2b2wtPm1mdG1pcnJfaW5vKTsKICNlbmRpZiAvKiBOVEZTX1JXICovCi0JcmV0dXJuIEZBTFNFOworCXJldHVybiBmYWxzZTsKIH0KIAogLyoqCkBAIC0zMjQ4LDMyICszMjQ4LDE0IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X250ZnNfZnModm9pZCkKIHsKLQlpbnQgZXJyID0gMDsKLQogCW50ZnNfZGVidWcoIlVucmVnaXN0ZXJpbmcgTlRGUyBkcml2ZXIuIik7CiAKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJm50ZnNfZnNfdHlwZSk7Ci0KLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG50ZnNfYmlnX2lub2RlX2NhY2hlKSAmJiAoZXJyID0gMSkpCi0JCXByaW50ayhLRVJOX0NSSVQgIk5URlM6IEZhaWxlZCB0byBkZXN0b3J5ICVzLlxuIiwKLQkJCQludGZzX2JpZ19pbm9kZV9jYWNoZV9uYW1lKTsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG50ZnNfaW5vZGVfY2FjaGUpICYmIChlcnIgPSAxKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlRGUzogRmFpbGVkIHRvIGRlc3RvcnkgJXMuXG4iLAotCQkJCW50ZnNfaW5vZGVfY2FjaGVfbmFtZSk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShudGZzX25hbWVfY2FjaGUpICYmIChlcnIgPSAxKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlRGUzogRmFpbGVkIHRvIGRlc3RvcnkgJXMuXG4iLAotCQkJCW50ZnNfbmFtZV9jYWNoZV9uYW1lKTsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG50ZnNfYXR0cl9jdHhfY2FjaGUpICYmIChlcnIgPSAxKSkKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlRGUzogRmFpbGVkIHRvIGRlc3RvcnkgJXMuXG4iLAotCQkJCW50ZnNfYXR0cl9jdHhfY2FjaGVfbmFtZSk7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShudGZzX2luZGV4X2N0eF9jYWNoZSkgJiYgKGVyciA9IDEpKQotCQlwcmludGsoS0VSTl9DUklUICJOVEZTOiBGYWlsZWQgdG8gZGVzdG9yeSAlcy5cbiIsCi0JCQkJbnRmc19pbmRleF9jdHhfY2FjaGVfbmFtZSk7Ci0JaWYgKGVycikKLQkJcHJpbnRrKEtFUk5fQ1JJVCAiTlRGUzogVGhpcyBjYXVzZXMgbWVtb3J5IHRvIGxlYWshIFRoZXJlIGlzICIKLQkJCQkicHJvYmFibHkgYSBCVUcgaW4gdGhlIGRyaXZlciEgUGxlYXNlIHJlcG9ydCAiCi0JCQkJInlvdSBzYXcgdGhpcyBtZXNzYWdlIHRvICIKLQkJCQkibGludXgtbnRmcy1kZXZAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobnRmc19iaWdfaW5vZGVfY2FjaGUpOworCWttZW1fY2FjaGVfZGVzdHJveShudGZzX2lub2RlX2NhY2hlKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobnRmc19uYW1lX2NhY2hlKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3kobnRmc19hdHRyX2N0eF9jYWNoZSk7CisJa21lbV9jYWNoZV9kZXN0cm95KG50ZnNfaW5kZXhfY3R4X2NhY2hlKTsKIAkvKiBVbnJlZ2lzdGVyIHRoZSBudGZzIHN5c2N0bHMuICovCiAJbnRmc19zeXNjdGwoMCk7CiB9CmRpZmYgLS1naXQgYS9mcy9udGZzL3R5cGVzLmggYi9mcy9udGZzL3R5cGVzLmgKaW5kZXggNmU0YTdlMy4uOGM4MDUzYiAxMDA2NDQKLS0tIGEvZnMvbnRmcy90eXBlcy5oCisrKyBiL2ZzL250ZnMvdHlwZXMuaApAQCAtNjIsMTEgKzYyLDYgQEAKIHR5cGVkZWYgc2xlNjQgbGVVU047CiAKIHR5cGVkZWYgZW51bSB7Ci0JRkFMU0UgPSAwLAotCVRSVUUgPSAxCi19IEJPT0w7Ci0KLXR5cGVkZWYgZW51bSB7CiAJQ0FTRV9TRU5TSVRJVkUgPSAwLAogCUlHTk9SRV9DQVNFID0gMSwKIH0gSUdOT1JFX0NBU0VfQk9PTDsKZGlmZiAtLWdpdCBhL2ZzL250ZnMvdW5pc3RyLmMgYi9mcy9udGZzL3VuaXN0ci5jCmluZGV4IGIxMjNjMGYuLjZhNDk1ZjcgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvdW5pc3RyLmMKKysrIGIvZnMvbnRmcy91bmlzdHIuYwpAQCAtNjEsMTYgKzYxLDE2IEBACiAgKiBAdXBjYXNlOgkJdXBjYXNlIHRhYmxlIChvbmx5IGlmIEBpYyA9PSBJR05PUkVfQ0FTRSkKICAqIEB1cGNhc2Vfc2l6ZToJbGVuZ3RoIGluIFVuaWNvZGUgY2hhcmFjdGVycyBvZiBAdXBjYXNlIChpZiBwcmVzZW50KQogICoKLSAqIENvbXBhcmUgdGhlIG5hbWVzIEBzMSBhbmQgQHMyIGFuZCByZXR1cm4gVFJVRSAoMSkgaWYgdGhlIG5hbWVzIGFyZQotICogaWRlbnRpY2FsLCBvciBGQUxTRSAoMCkgaWYgdGhleSBhcmUgbm90IGlkZW50aWNhbC4gSWYgQGljIGlzIElHTk9SRV9DQVNFLAorICogQ29tcGFyZSB0aGUgbmFtZXMgQHMxIGFuZCBAczIgYW5kIHJldHVybiAndHJ1ZScgKDEpIGlmIHRoZSBuYW1lcyBhcmUKKyAqIGlkZW50aWNhbCwgb3IgJ2ZhbHNlJyAoMCkgaWYgdGhleSBhcmUgbm90IGlkZW50aWNhbC4gSWYgQGljIGlzIElHTk9SRV9DQVNFLAogICogdGhlIEB1cGNhc2UgdGFibGUgaXMgdXNlZCB0byBwZXJmb3JtYSBhIGNhc2UgaW5zZW5zaXRpdmUgY29tcGFyaXNvbi4KICAqLwotQk9PTCBudGZzX2FyZV9uYW1lc19lcXVhbChjb25zdCBudGZzY2hhciAqczEsIHNpemVfdCBzMV9sZW4sCitib29sIG50ZnNfYXJlX25hbWVzX2VxdWFsKGNvbnN0IG50ZnNjaGFyICpzMSwgc2l6ZV90IHMxX2xlbiwKIAkJY29uc3QgbnRmc2NoYXIgKnMyLCBzaXplX3QgczJfbGVuLCBjb25zdCBJR05PUkVfQ0FTRV9CT09MIGljLAogCQljb25zdCBudGZzY2hhciAqdXBjYXNlLCBjb25zdCB1MzIgdXBjYXNlX3NpemUpCiB7CiAJaWYgKHMxX2xlbiAhPSBzMl9sZW4pCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCWlmIChpYyA9PSBDQVNFX1NFTlNJVElWRSkKIAkJcmV0dXJuICFudGZzX3Vjc25jbXAoczEsIHMyLCBzMV9sZW4pOwogCXJldHVybiAhbnRmc191Y3NuY2FzZWNtcChzMSwgczIsIHMxX2xlbiwgdXBjYXNlLCB1cGNhc2Vfc2l6ZSk7CkBAIC0zNTAsNyArMzUwLDcgQEAKIAkJfQogCQlpZiAoIW5zKSB7CiAJCQluc19sZW4gPSBpbnNfbGVuICogTkxTX01BWF9DSEFSU0VUX1NJWkU7Ci0JCQlucyA9ICh1bnNpZ25lZCBjaGFyKilrbWFsbG9jKG5zX2xlbiArIDEsIEdGUF9OT0ZTKTsKKwkJCW5zID0ga21hbGxvYyhuc19sZW4gKyAxLCBHRlBfTk9GUyk7CiAJCQlpZiAoIW5zKQogCQkJCWdvdG8gbWVtX2Vycl9vdXQ7CiAJCX0KQEAgLTM2NSw3ICszNjUsNyBAQAogCQkJZWxzZSBpZiAod2MgPT0gLUVOQU1FVE9PTE9ORyAmJiBucyAhPSAqb3V0cykgewogCQkJCXVuc2lnbmVkIGNoYXIgKnRjOwogCQkJCS8qIEdyb3cgaW4gbXVsdGlwbGVzIG9mIDY0IGJ5dGVzLiAqLwotCQkJCXRjID0gKHVuc2lnbmVkIGNoYXIqKWttYWxsb2MoKG5zX2xlbiArIDY0KSAmCisJCQkJdGMgPSBrbWFsbG9jKChuc19sZW4gKyA2NCkgJgogCQkJCQkJfjYzLCBHRlBfTk9GUyk7CiAJCQkJaWYgKHRjKSB7CiAJCQkJCW1lbWNweSh0YywgbnMsIG5zX2xlbik7CmRpZmYgLS1naXQgYS9mcy9udGZzL3VzbmpybmwuYyBiL2ZzL250ZnMvdXNuanJubC5jCmluZGV4IDc3NzczMjQuLmIyYmMwZDUgMTAwNjQ0Ci0tLSBhL2ZzL250ZnMvdXNuanJubC5jCisrKyBiL2ZzL250ZnMvdXNuanJubC5jCkBAIC0zOSwxMiArMzksMTIgQEAKICAqIEB2b2w6CW50ZnMgdm9sdW1lIG9uIHdoaWNoIHRvIHN0YW1wIHRoZSB0cmFuc2FjdGlvbiBsb2cKICAqCiAgKiBTdGFtcCB0aGUgdHJhbnNhY3Rpb24gbG9nICgkVXNuSnJubCkgb24gdGhlIG50ZnMgdm9sdW1lIEB2b2wgYW5kIHJldHVybgotICogVFJVRSBvbiBzdWNjZXNzIGFuZCBGQUxTRSBvbiBlcnJvci4KKyAqICd0cnVlJyBvbiBzdWNjZXNzIGFuZCAnZmFsc2UnIG9uIGVycm9yLgogICoKICAqIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHRoZSB0cmFuc2FjdGlvbiBsb2cgaGFzIGFscmVhZHkgYmVlbiBsb2FkZWQgYW5kCiAgKiBjb25zaXN0ZW5jeSBjaGVja2VkIGJ5IGEgY2FsbCB0byBmcy9udGZzL3N1cGVyLmM6OmxvYWRfYW5kX2luaXRfdXNuanJubCgpLgogICovCi1CT09MIG50ZnNfc3RhbXBfdXNuanJubChudGZzX3ZvbHVtZSAqdm9sKQorYm9vbCBudGZzX3N0YW1wX3VzbmpybmwobnRmc192b2x1bWUgKnZvbCkKIHsKIAludGZzX2RlYnVnKCJFbnRlcmluZy4iKTsKIAlpZiAobGlrZWx5KCFOVm9sVXNuSnJubFN0YW1wZWQodm9sKSkpIHsKQEAgLTU2LDcgKzU2LDcgQEAKIAkJaWYgKElTX0VSUihwYWdlKSkgewogCQkJbnRmc19lcnJvcih2b2wtPnNiLCAiRmFpbGVkIHRvIHJlYWQgZnJvbSAiCiAJCQkJCSIkVXNuSnJubC8kREFUQS8kTWF4IGF0dHJpYnV0ZS4iKTsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCQl1aCA9IChVU05fSEVBREVSKilwYWdlX2FkZHJlc3MocGFnZSk7CiAJCXN0YW1wID0gZ2V0X2N1cnJlbnRfbnRmc190aW1lKCk7CkBAIC03OCw3ICs3OCw3IEBACiAJCU5Wb2xTZXRVc25Kcm5sU3RhbXBlZCh2b2wpOwogCX0KIAludGZzX2RlYnVnKCJEb25lLiIpOwotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAjZW5kaWYgLyogTlRGU19SVyAqLwpkaWZmIC0tZ2l0IGEvZnMvbnRmcy91c25qcm5sLmggYi9mcy9udGZzL3VzbmpybmwuaAppbmRleCBmZjk4OGIwLi4zYThhZjc1IDEwMDY0NAotLS0gYS9mcy9udGZzL3VzbmpybmwuaAorKysgYi9mcy9udGZzL3VzbmpybmwuaApAQCAtMTk4LDcgKzE5OCw3IEBACiAvKiBzaXplb2YoKSA9IDYwICgweDNjKSBieXRlcyAqLwogfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIFVTTl9SRUNPUkQ7CiAKLWV4dGVybiBCT09MIG50ZnNfc3RhbXBfdXNuanJubChudGZzX3ZvbHVtZSAqdm9sKTsKK2V4dGVybiBib29sIG50ZnNfc3RhbXBfdXNuanJubChudGZzX3ZvbHVtZSAqdm9sKTsKIAogI2VuZGlmIC8qIE5URlNfUlcgKi8KIApkaWZmIC0tZ2l0IGEvZnMvb2NmczIvZGxtL2RsbWZzLmMgYi9mcy9vY2ZzMi9kbG0vZGxtZnMuYwppbmRleCAwMzNhZDE3Li4xNmI4ZDFiIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG0vZGxtZnMuYworKysgYi9mcy9vY2ZzMi9kbG0vZGxtZnMuYwpAQCAtMzM1LDExICszMzUsMTAgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwogCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKLQkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZkbG1mc19iYWNraW5nX2Rldl9pbmZvOwogCQlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7Ci0JCWlub2RlLT5pX25saW5rKys7CisJCWluY19ubGluayhpbm9kZSk7CiAKIAkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAkJaW5vZGUtPmlfb3AgPSAmZGxtZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwpAQCAtMzYyLDcgKzM2MSw2IEBACiAJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX21hcHBpbmctPmJhY2tpbmdfZGV2X2luZm8gPSAmZGxtZnNfYmFja2luZ19kZXZfaW5mbzsKIAlpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUU7CkBAIC0zOTcsNyArMzk1LDcgQEAKIAogCQkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0KIAkJICogMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKGlub2RlKTsKIAkJYnJlYWs7CiAJfQogCkBAIC00NTEsNyArNDQ5LDcgQEAKIAl9CiAJaXAtPmlwX2RsbSA9IGRsbTsKIAotCWRpci0+aV9ubGluaysrOworCWluY19ubGluayhkaXIpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJZGdldChkZW50cnkpOwkvKiBFeHRyYSBjb3VudCAtIHBpbiB0aGUgZGVudHJ5IGluIGNvcmUgKi8KIApAQCAtNjI5LDkgKzYyNyw3IEBACiAJZmx1c2hfd29ya3F1ZXVlKHVzZXJfZGxtX3dvcmtlcik7CiAJZGVzdHJveV93b3JrcXVldWUodXNlcl9kbG1fd29ya2VyKTsKIAotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtZnNfaW5vZGVfY2FjaGUpKQotCQlwcmludGsoS0VSTl9JTkZPICJkbG1mc19pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzICIKLQkJICAgICAgICJ3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koZGxtZnNfaW5vZGVfY2FjaGUpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJPcmFjbGUiKTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2RsbWdsdWUuYyBiL2ZzL29jZnMyL2RsbWdsdWUuYwppbmRleCBkZTg4NzA2Li44ODAxZTQxIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9kbG1nbHVlLmMKKysrIGIvZnMvb2NmczIvZGxtZ2x1ZS5jCkBAIC0yMDUyLDcgKzIwNTIsNyBAQAogCQltbG9nX2Vycm5vKHJldCk7CiAJCWdvdG8gb3V0OwogCX0KLQlvc2IgPSAoc3RydWN0IG9jZnMyX3N1cGVyICopIGlub2RlLT51LmdlbmVyaWNfaXA7CisJb3NiID0gaW5vZGUtPmlfcHJpdmF0ZTsKIAlvY2ZzMl9nZXRfZGxtX2RlYnVnKG9zYi0+b3NiX2RsbV9kZWJ1Zyk7CiAJcHJpdi0+cF9kbG1fZGVidWcgPSBvc2ItPm9zYl9kbG1fZGVidWc7CiAJSU5JVF9MSVNUX0hFQUQoJnByaXYtPnBfaXRlcl9yZXMubF9kZWJ1Z19saXN0KTsKZGlmZiAtLWdpdCBhL2ZzL29jZnMyL2ZpbGUuYyBiL2ZzL29jZnMyL2ZpbGUuYwppbmRleCAyYmJmYTE3Li5kOWJhMGE5IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9maWxlLmMKKysrIGIvZnMvb2NmczIvZmlsZS5jCkBAIC05NjEsMjUgKzk2MSwyMyBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBvY2ZzMl9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCQkJICAgIGNvbnN0IGNoYXIgX191c2VyICpidWYsCi0JCQkJICAgIHNpemVfdCBjb3VudCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywKIAkJCQkgICAgbG9mZl90IHBvcykKIHsKLQlzdHJ1Y3QgaW92ZWMgbG9jYWxfaW92ID0geyAuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKilidWYsCi0JCQkJICAgLmlvdl9sZW4gPSBjb3VudCB9OwogCWludCByZXQsIHJ3X2xldmVsID0gLTEsIG1ldGFfbGV2ZWwgPSAtMSwgaGF2ZV9hbGxvY19zZW0gPSAwOwogCXUzMiBjbHVzdGVyczsKIAlzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCWxvZmZfdCBuZXdzaXplLCBzYXZlZF9wb3M7CiAKLQltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJXUsICclLipzJylcbiIsIGZpbHAsIGJ1ZiwKLQkJICAgKHVuc2lnbmVkIGludCljb3VudCwKKwltbG9nX2VudHJ5KCIoMHglcCwgJXUsICclLipzJylcbiIsIGZpbHAsCisJCSAgICh1bnNpZ25lZCBpbnQpbnJfc2VncywKIAkJICAgZmlscC0+Zl9kZW50cnktPmRfbmFtZS5sZW4sCiAJCSAgIGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKIAkvKiBoYXBweSB3cml0ZSBvZiB6ZXJvIGJ5dGVzICovCi0JaWYgKGNvdW50ID09IDApCisJaWYgKGlvY2ItPmtpX2xlZnQgPT0gMCkKIAkJcmV0dXJuIDA7CiAKIAlpZiAoIWlub2RlKSB7CkBAIC0xMDQ4LDcgKzEwNDYsNyBAQAogCQl9IGVsc2UgewogCQkJc2F2ZWRfcG9zID0gaW9jYi0+a2lfcG9zOwogCQl9Ci0JCW5ld3NpemUgPSBjb3VudCArIHNhdmVkX3BvczsKKwkJbmV3c2l6ZSA9IGlvY2ItPmtpX2xlZnQgKyBzYXZlZF9wb3M7CiAKIAkJbWxvZygwLCAicG9zPSVsbGQgbmV3c2l6ZT0lbGxkIGN1cnNpemU9JWxsZFxuIiwKIAkJICAgICAobG9uZyBsb25nKSBzYXZlZF9wb3MsIChsb25nIGxvbmcpIG5ld3NpemUsCkBAIC0xMDgxLDcgKzEwNzksNyBAQAogCQlpZiAoIWNsdXN0ZXJzKQogCQkJYnJlYWs7CiAKLQkJcmV0ID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIE5VTEwsIG5ld3NpemUsIGNvdW50KTsKKwkJcmV0ID0gb2NmczJfZXh0ZW5kX2ZpbGUoaW5vZGUsIE5VTEwsIG5ld3NpemUsIGlvY2ItPmtpX2xlZnQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJaWYgKHJldCAhPSAtRU5PU1BDKQogCQkJCW1sb2dfZXJybm8ocmV0KTsKQEAgLTEwOTgsNyArMTA5Niw3IEBACiAJLyogY29tbXVuaWNhdGUgd2l0aCBvY2ZzMl9kaW9fZW5kX2lvICovCiAJb2NmczJfaW9jYl9zZXRfcndfbG9ja2VkKGlvY2IpOwogCi0JcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwgJmlvY2ItPmtpX3Bvcyk7CisJcmV0ID0gZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLCBpb2NiLT5raV9wb3MpOwogCiAJLyogYnVmZmVyZWQgYWlvIHdvdWxkbid0IGhhdmUgcHJvcGVyIGxvY2sgY292ZXJhZ2UgdG9kYXkgKi8KIAlCVUdfT04ocmV0ID09IC1FSU9DQlFVRVVFRCAmJiAhKGZpbHAtPmZfZmxhZ3MgJiBPX0RJUkVDVCkpOwpAQCAtMTEzMiwxNiArMTEzMCwxNiBAQAogfQogCiBzdGF0aWMgc3NpemVfdCBvY2ZzMl9maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwKLQkJCQkgICBjaGFyIF9fdXNlciAqYnVmLAotCQkJCSAgIHNpemVfdCBjb3VudCwKKwkJCQkgICBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQkgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsCiAJCQkJICAgbG9mZl90IHBvcykKIHsKIAlpbnQgcmV0ID0gMCwgcndfbGV2ZWwgPSAtMSwgaGF2ZV9hbGxvY19zZW0gPSAwOwogCXN0cnVjdCBmaWxlICpmaWxwID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlscC0+Zl9kZW50cnktPmRfaW5vZGU7CiAKLQltbG9nX2VudHJ5KCIoMHglcCwgMHglcCwgJXUsICclLipzJylcbiIsIGZpbHAsIGJ1ZiwKLQkJICAgKHVuc2lnbmVkIGludCljb3VudCwKKwltbG9nX2VudHJ5KCIoMHglcCwgJXUsICclLipzJylcbiIsIGZpbHAsCisJCSAgICh1bnNpZ25lZCBpbnQpbnJfc2VncywKIAkJICAgZmlscC0+Zl9kZW50cnktPmRfbmFtZS5sZW4sCiAJCSAgIGZpbHAtPmZfZGVudHJ5LT5kX25hbWUubmFtZSk7CiAKQEAgLTExODUsNyArMTE4Myw3IEBACiAJfQogCW9jZnMyX21ldGFfdW5sb2NrKGlub2RlLCAwKTsKIAotCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBidWYsIGNvdW50LCBpb2NiLT5raV9wb3MpOworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3YsIG5yX3NlZ3MsIGlvY2ItPmtpX3Bvcyk7CiAJaWYgKHJldCA9PSAtRUlOVkFMKQogCQltbG9nKE1MX0VSUk9SLCAiZ2VuZXJpY19maWxlX2Fpb19yZWFkIHJldHVybmVkIC1FSU5WQUxcbiIpOwogCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9pbm9kZS5jIGIvZnMvb2NmczIvaW5vZGUuYwppbmRleCA2OWQzZGI1Li4xNmU4ZTc0IDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9pbm9kZS5jCisrKyBiL2ZzL29jZnMyL2lub2RlLmMKQEAgLTI2OSw3ICsyNjksNiBAQAogCWlub2RlLT5pX21vZGUgPSBsZTE2X3RvX2NwdShmZS0+aV9tb2RlKTsKIAlpbm9kZS0+aV91aWQgPSBsZTMyX3RvX2NwdShmZS0+aV91aWQpOwogCWlub2RlLT5pX2dpZCA9IGxlMzJfdG9fY3B1KGZlLT5pX2dpZCk7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9ICh1MzIpb3NiLT5zX2NsdXN0ZXJzaXplOwogCiAJLyogRmFzdCBzeW1saW5rcyB3aWxsIGhhdmUgaV9zaXplIGJ1dCBubyBhbGxvY2F0ZWQgY2x1c3RlcnMuICovCiAJaWYgKFNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgIWZlLT5pX2NsdXN0ZXJzKQpAQCAtMTI1OCw4ICsxMjU3LDYgQEAKIHZvaWQgb2NmczJfcmVmcmVzaF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJIHN0cnVjdCBvY2ZzMl9kaW5vZGUgKmZlKQogewotCXN0cnVjdCBvY2ZzMl9zdXBlciAqb3NiID0gT0NGUzJfU0IoaW5vZGUtPmlfc2IpOwotCiAJc3Bpbl9sb2NrKCZPQ0ZTMl9JKGlub2RlKS0+aXBfbG9jayk7CiAKIAlPQ0ZTMl9JKGlub2RlKS0+aXBfY2x1c3RlcnMgPSBsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycyk7CkBAIC0xMjcwLDcgKzEyNjcsNiBAQAogCWlub2RlLT5pX3VpZCA9IGxlMzJfdG9fY3B1KGZlLT5pX3VpZCk7CiAJaW5vZGUtPmlfZ2lkID0gbGUzMl90b19jcHUoZmUtPmlfZ2lkKTsKIAlpbm9kZS0+aV9tb2RlID0gbGUxNl90b19jcHUoZmUtPmlfbW9kZSk7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9ICh1MzIpIG9zYi0+c19jbHVzdGVyc2l6ZTsKIAlpZiAoU19JU0xOSyhpbm9kZS0+aV9tb2RlKSAmJiBsZTMyX3RvX2NwdShmZS0+aV9jbHVzdGVycykgPT0gMCkKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAllbHNlCmRpZmYgLS1naXQgYS9mcy9vY2ZzMi9uYW1laS5jIGIvZnMvb2NmczIvbmFtZWkuYwppbmRleCA4NDljM2I0Li4yNTkxNTVmIDEwMDY0NAotLS0gYS9mcy9vY2ZzMi9uYW1laS5jCisrKyBiL2ZzL29jZnMyL25hbWVpLmMKQEAgLTQyOSw3ICs0MjksNyBAQAogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwogCQkJZ290byBsZWF2ZTsKIAkJfQotCQlkaXItPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKGRpcik7CiAJfQogCiAJc3RhdHVzID0gb2NmczJfYWRkX2VudHJ5KGhhbmRsZSwgZGVudHJ5LCBpbm9kZSwKQEAgLTczMCw3ICs3MzAsNyBAQAogCQlnb3RvIGJhaWw7CiAJfQogCi0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwogCWZlLT5pX2xpbmtzX2NvdW50ID0gY3B1X3RvX2xlMTYoaW5vZGUtPmlfbmxpbmspOwogCWZlLT5pX2N0aW1lID0gY3B1X3RvX2xlNjQoaW5vZGUtPmlfY3RpbWUudHZfc2VjKTsKQEAgLTczOSw3ICs3MzksNyBAQAogCWVyciA9IG9jZnMyX2pvdXJuYWxfZGlydHkoaGFuZGxlLCBmZV9iaCk7CiAJaWYgKGVyciA8IDApIHsKIAkJbGUxNl9hZGRfY3B1KCZmZS0+aV9saW5rc19jb3VudCwgLTEpOwotCQlpbm9kZS0+aV9ubGluay0tOworCQlkcm9wX25saW5rKGlub2RlKTsKIAkJbWxvZ19lcnJubyhlcnIpOwogCQlnb3RvIGJhaWw7CiAJfQpAQCAtNzQ5LDcgKzc0OSw3IEBACiAJCQkgICAgICBwYXJlbnRfZmVfYmgsIGRlX2JoKTsKIAlpZiAoZXJyKSB7CiAJCWxlMTZfYWRkX2NwdSgmZmUtPmlfbGlua3NfY291bnQsIC0xKTsKLQkJaW5vZGUtPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhpbm9kZSk7CiAJCW1sb2dfZXJybm8oZXJyKTsKIAkJZ290byBiYWlsOwogCX0KQEAgLTc5NSwxMSArNzk1LDIzIEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGlubGluZSBpbnQgaW5vZGVfaXNfdW5saW5rYWJsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlmIChTX0lTRElSKGlub2RlLT5pX21vZGUpKSB7CisJCWlmIChpbm9kZS0+aV9ubGluayA9PSAyKQorCQkJcmV0dXJuIDE7CisJCXJldHVybiAwOworCX0KKworCWlmIChpbm9kZS0+aV9ubGluayA9PSAxKQorCQlyZXR1cm4gMTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBvY2ZzMl91bmxpbmsoc3RydWN0IGlub2RlICpkaXIsCiAJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCiB7CiAJaW50IHN0YXR1czsKLQl1bnNpZ25lZCBpbnQgc2F2ZWRfbmxpbmsgPSAwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CiAJc3RydWN0IG9jZnMyX3N1cGVyICpvc2IgPSBPQ0ZTMl9TQihkaXItPmlfc2IpOwogCXU2NCBibGtubzsKQEAgLTg3NCwxNiArODg2LDYgQEAKIAkJfQogCX0KIAotCS8qIFRoZXJlIGFyZSBzdGlsbCBhIGZldyBzdGVwcyBsZWZ0IHVudGlsIHdlIGNhbiBjb25zaWRlciB0aGUKLQkgKiB1bmxpbmsgdG8gaGF2ZSBzdWNjZWVkZWQuIFNhdmUgb2ZmIG5saW5rIGhlcmUgYmVmb3JlCi0JICogbW9kaWZpY2F0aW9uIHNvIHdlIGNhbiBzZXQgaXQgYmFjayBpbiBjYXNlIHdlIGhpdCBhbiBpc3N1ZQotCSAqIGJlZm9yZSBjb21taXQuICovCi0Jc2F2ZWRfbmxpbmsgPSBpbm9kZS0+aV9ubGluazsKLQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJaW5vZGUtPmlfbmxpbmsgPSAwOwotCWVsc2UKLQkJaW5vZGUtPmlfbmxpbmstLTsKLQogCXN0YXR1cyA9IG9jZnMyX3JlbW90ZV9kZW50cnlfZGVsZXRlKGRlbnRyeSk7CiAJaWYgKHN0YXR1cyA8IDApIHsKIAkJLyogVGhpcyB2b3RlIHNob3VsZCBzdWNjZWVkIHVuZGVyIGFsbCBub3JtYWwKQEAgLTg5Miw3ICs4OTQsNyBAQAogCQlnb3RvIGxlYXZlOwogCX0KIAotCWlmICghaW5vZGUtPmlfbmxpbmspIHsKKwlpZiAoaW5vZGVfaXNfdW5saW5rYWJsZShpbm9kZSkpIHsKIAkJc3RhdHVzID0gb2NmczJfcHJlcGFyZV9vcnBoYW5fZGlyKG9zYiwgaGFuZGxlLCBpbm9kZSwKIAkJCQkJCSAgb3JwaGFuX25hbWUsCiAJCQkJCQkgICZvcnBoYW5fZW50cnlfYmgpOwpAQCAtOTE5LDcgKzkyMSw3IEBACiAKIAlmZSA9IChzdHJ1Y3Qgb2NmczJfZGlub2RlICopIGZlX2JoLT5iX2RhdGE7CiAKLQlpZiAoIWlub2RlLT5pX25saW5rKSB7CisJaWYgKGlub2RlX2lzX3VubGlua2FibGUoaW5vZGUpKSB7CiAJCXN0YXR1cyA9IG9jZnMyX29ycGhhbl9hZGQob3NiLCBoYW5kbGUsIGlub2RlLCBmZSwgb3JwaGFuX25hbWUsCiAJCQkJCSAgb3JwaGFuX2VudHJ5X2JoKTsKIAkJaWYgKHN0YXR1cyA8IDApIHsKQEAgLTkzNSwxMCArOTM3LDEwIEBACiAJCWdvdG8gbGVhdmU7CiAJfQogCi0JLyogV2UgY2FuIHNldCBubGluayBvbiB0aGUgZGlub2RlIG5vdy4gY2xlYXIgdGhlIHNhdmVkIHZlcnNpb24KLQkgKiBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHNldCBsYXRlci4gKi8KKwlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKKwkJZHJvcF9ubGluayhpbm9kZSk7CisJZHJvcF9ubGluayhpbm9kZSk7CiAJZmUtPmlfbGlua3NfY291bnQgPSBjcHVfdG9fbGUxNihpbm9kZS0+aV9ubGluayk7Ci0Jc2F2ZWRfbmxpbmsgPSAwOwogCiAJc3RhdHVzID0gb2NmczJfam91cm5hbF9kaXJ0eShoYW5kbGUsIGZlX2JoKTsKIAlpZiAoc3RhdHVzIDwgMCkgewpAQCAtOTQ3LDE5ICs5NDksMTYgQEAKIAl9CiAKIAlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkgewotCQlkaXItPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhkaXIpOwogCQlzdGF0dXMgPSBvY2ZzMl9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgZGlyLAogCQkJCQkJcGFyZW50X25vZGVfYmgpOwogCQlpZiAoc3RhdHVzIDwgMCkgewogCQkJbWxvZ19lcnJubyhzdGF0dXMpOwotCQkJZGlyLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsoZGlyKTsKIAkJfQogCX0KIAogbGVhdmU6Ci0JaWYgKHN0YXR1cyA8IDAgJiYgc2F2ZWRfbmxpbmspCi0JCWlub2RlLT5pX25saW5rID0gc2F2ZWRfbmxpbms7Ci0KIAlpZiAoaGFuZGxlKQogCQlvY2ZzMl9jb21taXRfdHJhbnMoaGFuZGxlKTsKIApAQCAtMTM4Miw3ICsxMzgxLDcgQEAKIAkJaWYgKG5ld19pbm9kZSkgewogCQkJbmV3X2lub2RlLT5pX25saW5rLS07CiAJCX0gZWxzZSB7Ci0JCQluZXdfZGlyLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJCQltYXJrX2lub2RlX2RpcnR5KG5ld19kaXIpOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvZnMvb3Blbi5jIGIvZnMvb3Blbi5jCmluZGV4IDMwM2YwNmQuLjg5ZTBjMjMgMTAwNjQ0Ci0tLSBhL2ZzL29wZW4uYworKysgYi9mcy9vcGVuLmMKQEAgLTYsNyArNiw2IEBACiAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgotI2luY2x1ZGUgPGxpbnV4L3V0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KQEAgLTI5LDggKzI4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9yY3VwZGF0ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CiAKLSNpbmNsdWRlIDxhc20vdW5pc3RkLmg+Ci0KIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZikKIHsKIAlpbnQgcmV0dmFsID0gLUVOT0RFVjsKQEAgLTM1MywxMzcgKzM1MCw2IEBACiB9CiAjZW5kaWYKIAotI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19VVElNRQotCi0vKgotICogc3lzX3V0aW1lKCkgY2FuIGJlIGltcGxlbWVudGVkIGluIHVzZXItbGV2ZWwgdXNpbmcgc3lzX3V0aW1lcygpLgotICogSXMgdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk/ICBJZiBzbywgd2h5IG5vdCBtb3ZlIGl0Ci0gKiBpbnRvIHRoZSBhcHByb3ByaWF0ZSBhcmNoIGRpcmVjdG9yeSAoZm9yIHRob3NlIGFyY2hpdGVjdHVyZXMgdGhhdAotICogbmVlZCBpdCkuCi0gKi8KLQotLyogSWYgdGltZXM9PU5VTEwsIHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0byBjdXJyZW50IHRpbWUsCi0gKiBtdXN0IGJlIG93bmVyIG9yIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4KLSAqIEVsc2UsIHVwZGF0ZSBmcm9tICp0aW1lcywgbXVzdCBiZSBvd25lciBvciBzdXBlciB1c2VyLgotICovCi1hc21saW5rYWdlIGxvbmcgc3lzX3V0aW1lKGNoYXIgX191c2VyICogZmlsZW5hbWUsIHN0cnVjdCB1dGltYnVmIF9fdXNlciAqIHRpbWVzKQotewotCWludCBlcnJvcjsKLQlzdHJ1Y3QgbmFtZWlkYXRhIG5kOwotCXN0cnVjdCBpbm9kZSAqIGlub2RlOwotCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKLQotCWVycm9yID0gdXNlcl9wYXRoX3dhbGsoZmlsZW5hbWUsICZuZCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dDsKLQlpbm9kZSA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsKLQotCWVycm9yID0gLUVST0ZTOwotCWlmIChJU19SRE9OTFkoaW5vZGUpKQotCQlnb3RvIGRwdXRfYW5kX291dDsKLQotCS8qIERvbid0IHdvcnJ5LCB0aGUgY2hlY2tzIGFyZSBkb25lIGluIGlub2RlX2NoYW5nZV9vaygpICovCi0JbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX0NUSU1FIHwgQVRUUl9NVElNRSB8IEFUVFJfQVRJTUU7Ci0JaWYgKHRpbWVzKSB7Ci0JCWVycm9yID0gLUVQRVJNOwotCQlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQotCQkJZ290byBkcHV0X2FuZF9vdXQ7Ci0KLQkJZXJyb3IgPSBnZXRfdXNlcihuZXdhdHRycy5pYV9hdGltZS50dl9zZWMsICZ0aW1lcy0+YWN0aW1lKTsKLQkJbmV3YXR0cnMuaWFfYXRpbWUudHZfbnNlYyA9IDA7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IGdldF91c2VyKG5ld2F0dHJzLmlhX210aW1lLnR2X3NlYywgJnRpbWVzLT5tb2R0aW1lKTsKLQkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9IDA7Ci0JCWlmIChlcnJvcikKLQkJCWdvdG8gZHB1dF9hbmRfb3V0OwotCi0JCW5ld2F0dHJzLmlhX3ZhbGlkIHw9IEFUVFJfQVRJTUVfU0VUIHwgQVRUUl9NVElNRV9TRVQ7Ci0JfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBlcnJvciA9IC1FQUNDRVM7Ci0gICAgICAgICAgICAgICAgaWYgKElTX0lNTVVUQUJMRShpbm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKLQotCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCi0JCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCi0JCQlnb3RvIGRwdXRfYW5kX291dDsKLQl9Ci0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci1kcHV0X2FuZF9vdXQ6Ci0JcGF0aF9yZWxlYXNlKCZuZCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi0jZW5kaWYKLQotLyogSWYgdGltZXM9PU5VTEwsIHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0byBjdXJyZW50IHRpbWUsCi0gKiBtdXN0IGJlIG93bmVyIG9yIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4KLSAqIEVsc2UsIHVwZGF0ZSBmcm9tICp0aW1lcywgbXVzdCBiZSBvd25lciBvciBzdXBlciB1c2VyLgotICovCi1sb25nIGRvX3V0aW1lcyhpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsICp0aW1lcykKLXsKLQlpbnQgZXJyb3I7Ci0Jc3RydWN0IG5hbWVpZGF0YSBuZDsKLQlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKLQlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7Ci0KLQllcnJvciA9IF9fdXNlcl93YWxrX2ZkKGRmZCwgZmlsZW5hbWUsIExPT0tVUF9GT0xMT1csICZuZCk7Ci0KLQlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0OwotCWlub2RlID0gbmQuZGVudHJ5LT5kX2lub2RlOwotCi0JZXJyb3IgPSAtRVJPRlM7Ci0JaWYgKElTX1JET05MWShpbm9kZSkpCi0JCWdvdG8gZHB1dF9hbmRfb3V0OwotCi0JLyogRG9uJ3Qgd29ycnksIHRoZSBjaGVja3MgYXJlIGRvbmUgaW4gaW5vZGVfY2hhbmdlX29rKCkgKi8KLQluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfQ1RJTUUgfCBBVFRSX01USU1FIHwgQVRUUl9BVElNRTsKLQlpZiAodGltZXMpIHsKLQkJZXJyb3IgPSAtRVBFUk07Ci0gICAgICAgICAgICAgICAgaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHB1dF9hbmRfb3V0OwotCi0JCW5ld2F0dHJzLmlhX2F0aW1lLnR2X3NlYyA9IHRpbWVzWzBdLnR2X3NlYzsKLQkJbmV3YXR0cnMuaWFfYXRpbWUudHZfbnNlYyA9IHRpbWVzWzBdLnR2X3VzZWMgKiAxMDAwOwotCQluZXdhdHRycy5pYV9tdGltZS50dl9zZWMgPSB0aW1lc1sxXS50dl9zZWM7Ci0JCW5ld2F0dHJzLmlhX210aW1lLnR2X25zZWMgPSB0aW1lc1sxXS50dl91c2VjICogMTAwMDsKLQkJbmV3YXR0cnMuaWFfdmFsaWQgfD0gQVRUUl9BVElNRV9TRVQgfCBBVFRSX01USU1FX1NFVDsKLQl9IGVsc2UgewotCQllcnJvciA9IC1FQUNDRVM7Ci0gICAgICAgICAgICAgICAgaWYgKElTX0lNTVVUQUJMRShpbm9kZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKLQotCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCi0JCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCi0JCQlnb3RvIGRwdXRfYW5kX291dDsKLQl9Ci0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7Ci0JbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7Ci1kcHV0X2FuZF9vdXQ6Ci0JcGF0aF9yZWxlYXNlKCZuZCk7Ci1vdXQ6Ci0JcmV0dXJuIGVycm9yOwotfQotCi1hc21saW5rYWdlIGxvbmcgc3lzX2Z1dGltZXNhdChpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdXRpbWVzKQotewotCXN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdOwotCi0JaWYgKHV0aW1lcyAmJiBjb3B5X2Zyb21fdXNlcigmdGltZXMsIHV0aW1lcywgc2l6ZW9mKHRpbWVzKSkpCi0JCXJldHVybiAtRUZBVUxUOwotCXJldHVybiBkb191dGltZXMoZGZkLCBmaWxlbmFtZSwgdXRpbWVzID8gdGltZXMgOiBOVUxMKTsKLX0KLQotYXNtbGlua2FnZSBsb25nIHN5c191dGltZXMoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnV0aW1lcykKLXsKLQlyZXR1cm4gc3lzX2Z1dGltZXNhdChBVF9GRENXRCwgZmlsZW5hbWUsIHV0aW1lcyk7Ci19Ci0KLQogLyoKICAqIGFjY2VzcygpIG5lZWRzIHRvIHVzZSB0aGUgcmVhbCB1aWQvZ2lkLCBub3QgdGhlIGVmZmVjdGl2ZSB1aWQvZ2lkLgogICogV2UgZG8gdGhpcyBieSB0ZW1wb3JhcmlseSBjbGVhcmluZyBhbGwgRlMtcmVsYXRlZCBjYXBhYmlsaXRpZXMgYW5kCkBAIC01MjAsMTUgKzM4NiwyMSBAQAogCQljdXJyZW50LT5jYXBfZWZmZWN0aXZlID0gY3VycmVudC0+Y2FwX3Blcm1pdHRlZDsKIAogCXJlcyA9IF9fdXNlcl93YWxrX2ZkKGRmZCwgZmlsZW5hbWUsIExPT0tVUF9GT0xMT1d8TE9PS1VQX0FDQ0VTUywgJm5kKTsKLQlpZiAoIXJlcykgewotCQlyZXMgPSB2ZnNfcGVybWlzc2lvbigmbmQsIG1vZGUpOwotCQkvKiBTdVMgdjIgcmVxdWlyZXMgd2UgcmVwb3J0IGEgcmVhZCBvbmx5IGZzIHRvbyAqLwotCQlpZighcmVzICYmIChtb2RlICYgU19JV09USCkgJiYgSVNfUkRPTkxZKG5kLmRlbnRyeS0+ZF9pbm9kZSkKLQkJICAgJiYgIXNwZWNpYWxfZmlsZShuZC5kZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCi0JCQlyZXMgPSAtRVJPRlM7Ci0JCXBhdGhfcmVsZWFzZSgmbmQpOwotCX0KKwlpZiAocmVzKQorCQlnb3RvIG91dDsKIAorCXJlcyA9IHZmc19wZXJtaXNzaW9uKCZuZCwgbW9kZSk7CisJLyogU3VTIHYyIHJlcXVpcmVzIHdlIHJlcG9ydCBhIHJlYWQgb25seSBmcyB0b28gKi8KKwlpZihyZXMgfHwgIShtb2RlICYgU19JV09USCkgfHwKKwkgICBzcGVjaWFsX2ZpbGUobmQuZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQorCQlnb3RvIG91dF9wYXRoX3JlbGVhc2U7CisKKwlpZihJU19SRE9OTFkobmQuZGVudHJ5LT5kX2lub2RlKSkKKwkJcmVzID0gLUVST0ZTOworCitvdXRfcGF0aF9yZWxlYXNlOgorCXBhdGhfcmVsZWFzZSgmbmQpOworb3V0OgogCWN1cnJlbnQtPmZzdWlkID0gb2xkX2ZzdWlkOwogCWN1cnJlbnQtPmZzZ2lkID0gb2xkX2ZzZ2lkOwogCWN1cnJlbnQtPmNhcF9lZmZlY3RpdmUgPSBvbGRfY2FwOwpAQCAtNTQ2LDcgKzQxOCw4IEBACiAJc3RydWN0IG5hbWVpZGF0YSBuZDsKIAlpbnQgZXJyb3I7CiAKLQllcnJvciA9IF9fdXNlcl93YWxrKGZpbGVuYW1lLCBMT09LVVBfRk9MTE9XfExPT0tVUF9ESVJFQ1RPUlksICZuZCk7CisJZXJyb3IgPSBfX3VzZXJfd2FsayhmaWxlbmFtZSwKKwkJCSAgICBMT09LVVBfRk9MTE9XfExPT0tVUF9ESVJFQ1RPUll8TE9PS1VQX0NIRElSLCAmbmQpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKQEAgLTczNiwxMCArNjA5LDExIEBACiAJaW50IGVycm9yOwogCiAJZXJyb3IgPSB1c2VyX3BhdGhfd2FsayhmaWxlbmFtZSwgJm5kKTsKLQlpZiAoIWVycm9yKSB7Ci0JCWVycm9yID0gY2hvd25fY29tbW9uKG5kLmRlbnRyeSwgdXNlciwgZ3JvdXApOwotCQlwYXRoX3JlbGVhc2UoJm5kKTsKLQl9CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwllcnJvciA9IGNob3duX2NvbW1vbihuZC5kZW50cnksIHVzZXIsIGdyb3VwKTsKKwlwYXRoX3JlbGVhc2UoJm5kKTsKK291dDoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTc1NSwxMCArNjI5LDEwIEBACiAKIAlmb2xsb3cgPSAoZmxhZyAmIEFUX1NZTUxJTktfTk9GT0xMT1cpID8gMCA6IExPT0tVUF9GT0xMT1c7CiAJZXJyb3IgPSBfX3VzZXJfd2Fsa19mZChkZmQsIGZpbGVuYW1lLCBmb2xsb3csICZuZCk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IGNob3duX2NvbW1vbihuZC5kZW50cnksIHVzZXIsIGdyb3VwKTsKLQkJcGF0aF9yZWxlYXNlKCZuZCk7Ci0JfQorCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBjaG93bl9jb21tb24obmQuZGVudHJ5LCB1c2VyLCBncm91cCk7CisJcGF0aF9yZWxlYXNlKCZuZCk7CiBvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQpAQCAtNzY5LDEwICs2NDMsMTEgQEAKIAlpbnQgZXJyb3I7CiAKIAllcnJvciA9IHVzZXJfcGF0aF93YWxrX2xpbmsoZmlsZW5hbWUsICZuZCk7Ci0JaWYgKCFlcnJvcikgewotCQllcnJvciA9IGNob3duX2NvbW1vbihuZC5kZW50cnksIHVzZXIsIGdyb3VwKTsKLQkJcGF0aF9yZWxlYXNlKCZuZCk7Ci0JfQorCWlmIChlcnJvcikKKwkJZ290byBvdXQ7CisJZXJyb3IgPSBjaG93bl9jb21tb24obmQuZGVudHJ5LCB1c2VyLCBncm91cCk7CisJcGF0aF9yZWxlYXNlKCZuZCk7CitvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC03ODEsMTUgKzY1NiwxNyBAQAogewogCXN0cnVjdCBmaWxlICogZmlsZTsKIAlpbnQgZXJyb3IgPSAtRUJBREY7CisJc3RydWN0IGRlbnRyeSAqIGRlbnRyeTsKIAogCWZpbGUgPSBmZ2V0KGZkKTsKLQlpZiAoZmlsZSkgewotCQlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5OwotCQlkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKLQkJYXVkaXRfaW5vZGUoTlVMTCwgZGVudHJ5LT5kX2lub2RlKTsKLQkJZXJyb3IgPSBjaG93bl9jb21tb24oZGVudHJ5LCB1c2VyLCBncm91cCk7Ci0JCWZwdXQoZmlsZSk7Ci0JfQorCWlmICghZmlsZSkKKwkJZ290byBvdXQ7CisKKwlkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKKwlhdWRpdF9pbm9kZShOVUxMLCBkZW50cnktPmRfaW5vZGUpOworCWVycm9yID0gY2hvd25fY29tbW9uKGRlbnRyeSwgdXNlciwgZ3JvdXApOworCWZwdXQoZmlsZSk7CitvdXQ6CiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0xMTcyLDYgKzEwNDksNyBAQAogCXN0cnVjdCBmaWxlICogZmlscDsKIAlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmaWxlcyA9IGN1cnJlbnQtPmZpbGVzOwogCXN0cnVjdCBmZHRhYmxlICpmZHQ7CisJaW50IHJldHZhbDsKIAogCXNwaW5fbG9jaygmZmlsZXMtPmZpbGVfbG9jayk7CiAJZmR0ID0gZmlsZXNfZmR0YWJsZShmaWxlcyk7CkBAIC0xMTg0LDcgKzEwNjIsMTYgQEAKIAlGRF9DTFIoZmQsIGZkdC0+Y2xvc2Vfb25fZXhlYyk7CiAJX19wdXRfdW51c2VkX2ZkKGZpbGVzLCBmZCk7CiAJc3Bpbl91bmxvY2soJmZpbGVzLT5maWxlX2xvY2spOwotCXJldHVybiBmaWxwX2Nsb3NlKGZpbHAsIGZpbGVzKTsKKwlyZXR2YWwgPSBmaWxwX2Nsb3NlKGZpbHAsIGZpbGVzKTsKKworCS8qIGNhbid0IHJlc3RhcnQgY2xvc2Ugc3lzY2FsbCBiZWNhdXNlIGZpbGUgdGFibGUgZW50cnkgd2FzIGNsZWFyZWQgKi8KKwlpZiAodW5saWtlbHkocmV0dmFsID09IC1FUkVTVEFSVFNZUyB8fAorCQkgICAgIHJldHZhbCA9PSAtRVJFU1RBUlROT0lOVFIgfHwKKwkJICAgICByZXR2YWwgPT0gLUVSRVNUQVJUTk9IQU5EIHx8CisJCSAgICAgcmV0dmFsID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spKQorCQlyZXR2YWwgPSAtRUlOVFI7CisKKwlyZXR1cm4gcmV0dmFsOwogCiBvdXRfdW5sb2NrOgogCXNwaW5fdW5sb2NrKCZmaWxlcy0+ZmlsZV9sb2NrKTsKZGlmZiAtLWdpdCBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUgYi9mcy9wYXJ0aXRpb25zL01ha2VmaWxlCmluZGV4IGQ3MTNjZTYuLjY3ZTY2NWYgMTAwNjQ0Ci0tLSBhL2ZzL3BhcnRpdGlvbnMvTWFrZWZpbGUKKysrIGIvZnMvcGFydGl0aW9ucy9NYWtlZmlsZQpAQCAtMiw3ICsyLDcgQEAKICMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBrZXJuZWwuCiAjCiAKLW9iai15IDo9IGNoZWNrLm8KK29iai0kKENPTkZJR19CTE9DSykgOj0gY2hlY2subwogCiBvYmotJChDT05GSUdfQUNPUk5fUEFSVElUSU9OKSArPSBhY29ybi5vCiBvYmotJChDT05GSUdfQU1JR0FfUEFSVElUSU9OKSArPSBhbWlnYS5vCmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2VmaS5jIGIvZnMvcGFydGl0aW9ucy9lZmkuYwppbmRleCA2MzczMDI4Li4xYmVhNjEwIDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2VmaS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvZWZpLmMKQEAgLTIzOCwxMCArMjM4LDkgQEAKICAgICAgICAgICAgICAgICBsZTMyX3RvX2NwdShncHQtPnNpemVvZl9wYXJ0aXRpb25fZW50cnkpOwogCWlmICghY291bnQpCiAJCXJldHVybiBOVUxMOwotCXB0ZSA9IGttYWxsb2MoY291bnQsIEdGUF9LRVJORUwpOworCXB0ZSA9IGt6YWxsb2MoY291bnQsIEdGUF9LRVJORUwpOwogCWlmICghcHRlKQogCQlyZXR1cm4gTlVMTDsKLQltZW1zZXQocHRlLCAwLCBjb3VudCk7CiAKIAlpZiAocmVhZF9sYmEoYmRldiwgbGU2NF90b19jcHUoZ3B0LT5wYXJ0aXRpb25fZW50cnlfbGJhKSwKICAgICAgICAgICAgICAgICAgICAgICh1OCAqKSBwdGUsCkBAIC0yNjksMTAgKzI2OCw5IEBACiAJaWYgKCFiZGV2KQogCQlyZXR1cm4gTlVMTDsKIAotCWdwdCA9IGttYWxsb2Moc2l6ZW9mIChncHRfaGVhZGVyKSwgR0ZQX0tFUk5FTCk7CisJZ3B0ID0ga3phbGxvYyhzaXplb2YgKGdwdF9oZWFkZXIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWdwdCkKIAkJcmV0dXJuIE5VTEw7Ci0JbWVtc2V0KGdwdCwgMCwgc2l6ZW9mIChncHRfaGVhZGVyKSk7CiAKIAlpZiAocmVhZF9sYmEoYmRldiwgbGJhLCAodTggKikgZ3B0LAogCQkgICAgIHNpemVvZiAoZ3B0X2hlYWRlcikpIDwgc2l6ZW9mIChncHRfaGVhZGVyKSkgewpAQCAtNTI2LDkgKzUyNCw4IEBACiAJbGFzdGxiYSA9IGxhc3RfbGJhKGJkZXYpOwogICAgICAgICBpZiAoIWZvcmNlX2dwdCkgewogICAgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBiZSBhZGRlZCB0byB0aGUgRUZJIFNwZWMuIHBlciBJbnRlbCBhZnRlciB2MS4wMi4gKi8KLSAgICAgICAgICAgICAgICBsZWdhY3ltYnIgPSBrbWFsbG9jKHNpemVvZiAoKmxlZ2FjeW1iciksIEdGUF9LRVJORUwpOworICAgICAgICAgICAgICAgIGxlZ2FjeW1iciA9IGt6YWxsb2Moc2l6ZW9mICgqbGVnYWN5bWJyKSwgR0ZQX0tFUk5FTCk7CiAgICAgICAgICAgICAgICAgaWYgKGxlZ2FjeW1icikgewotICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGxlZ2FjeW1iciwgMCwgc2l6ZW9mICgqbGVnYWN5bWJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZWFkX2xiYShiZGV2LCAwLCAodTggKikgbGVnYWN5bWJyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mICgqbGVnYWN5bWJyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBnb29kX3BtYnIgPSBpc19wbWJyX3ZhbGlkKGxlZ2FjeW1iciwgbGFzdGxiYSk7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL2xkbS5jIGIvZnMvcGFydGl0aW9ucy9sZG0uYwppbmRleCA3YWIxYzExLi4xYTYwOTI2IDEwMDY0NAotLS0gYS9mcy9wYXJ0aXRpb25zL2xkbS5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbGRtLmMKQEAgLTMwLDExICszMCw2IEBACiAjaW5jbHVkZSAiY2hlY2suaCIKICNpbmNsdWRlICJtc2Rvcy5oIgogCi10eXBlZGVmIGVudW0gewotCUZBTFNFID0gMCwKLQlUUlVFICA9IDEKLX0gQk9PTDsKLQogLyoqCiAgKiBsZG1fZGVidWcvaW5mby9lcnJvci9jcml0IC0gT3V0cHV0IGFuIGVycm9yIG1lc3NhZ2UKICAqIEBmOiAgICBBIHByaW50ZiBmb3JtYXQgc3RyaW5nIGNvbnRhaW5pbmcgdGhlIG1lc3NhZ2UKQEAgLTEwMywyNCArOTgsMjQgQEAKICAqCiAgKiBOLkIuIFRoZSBHVUlEIG5lZWQgbm90IGJlIE5VTEwgdGVybWluYXRlZC4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQGRlc3QgY29udGFpbnMgYmluYXJ5IEdVSUQKLSAqICAgICAgICAgIEZBTFNFICBAZGVzdCBjb250ZW50cyBhcmUgdW5kZWZpbmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBAZGVzdCBjb250YWlucyBiaW5hcnkgR1VJRAorICogICAgICAgICAgJ2ZhbHNlJyAgQGRlc3QgY29udGVudHMgYXJlIHVuZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fcGFyc2VfZ3VpZCAoY29uc3QgdTggKnNyYywgdTggKmRlc3QpCitzdGF0aWMgYm9vbCBsZG1fcGFyc2VfZ3VpZCAoY29uc3QgdTggKnNyYywgdTggKmRlc3QpCiB7CiAJc3RhdGljIGNvbnN0IGludCBzaXplW10gPSB7IDQsIDIsIDIsIDIsIDYgfTsKIAlpbnQgaSwgaiwgdjsKIAogCWlmIChzcmNbOF0gICE9ICctJyB8fCBzcmNbMTNdICE9ICctJyB8fAogCSAgICBzcmNbMThdICE9ICctJyB8fCBzcmNbMjNdICE9ICctJykKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGogPSAwOyBqIDwgNTsgaisrLCBzcmMrKykKIAkJZm9yIChpID0gMDsgaSA8IHNpemVbal07IGkrKywgc3JjKz0yLCAqZGVzdCsrID0gdikKIAkJCWlmICgodiA9IGxkbV9wYXJzZV9oZXhieXRlIChzcmMpKSA8IDApCi0JCQkJcmV0dXJuIEZBTFNFOworCQkJCXJldHVybiBmYWxzZTsKIAotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAKQEAgLTEzMiwxNyArMTI3LDE3IEBACiAgKiBUaGlzIHBhcnNlcyB0aGUgTERNIGRhdGFiYXNlIFBSSVZIRUFEIHN0cnVjdHVyZSBzdXBwbGllZCBpbiBAZGF0YSBhbmQKICAqIHNldHMgdXAgdGhlIGluLW1lbW9yeSBwcml2aGVhZCBzdHJ1Y3R1cmUgQHBoIHdpdGggdGhlIG9idGFpbmVkIGluZm9ybWF0aW9uLgogICoKLSAqIFJldHVybjogIFRSVUUgICBAcGggY29udGFpbnMgdGhlIFBSSVZIRUFEIGRhdGEKLSAqICAgICAgICAgIEZBTFNFICBAcGggY29udGVudHMgYXJlIHVuZGVmaW5lZAorICogUmV0dXJuOiAgJ3RydWUnICAgQHBoIGNvbnRhaW5zIHRoZSBQUklWSEVBRCBkYXRhCisgKiAgICAgICAgICAnZmFsc2UnICBAcGggY29udGVudHMgYXJlIHVuZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fcGFyc2VfcHJpdmhlYWQgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3QgcHJpdmhlYWQgKnBoKQorc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ByaXZoZWFkIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHByaXZoZWFkICpwaCkKIHsKIAlCVUdfT04gKCFkYXRhIHx8ICFwaCk7CiAKIAlpZiAoTUFHSUNfUFJJVkhFQUQgIT0gQkU2NCAoZGF0YSkpIHsKIAkJbGRtX2Vycm9yICgiQ2Fubm90IGZpbmQgUFJJVkhFQUQgc3RydWN0dXJlLiBMRE0gZGF0YWJhc2UgaXMiCiAJCQkiIGNvcnJ1cHQuIEFib3J0aW5nLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlwaC0+dmVyX21ham9yICAgICAgICAgID0gQkUxNiAoZGF0YSArIDB4MDAwQyk7CkBAIC0xNTUsNyArMTUwLDcgQEAKIAlpZiAoKHBoLT52ZXJfbWFqb3IgIT0gMikgfHwgKHBoLT52ZXJfbWlub3IgIT0gMTEpKSB7CiAJCWxkbV9lcnJvciAoIkV4cGVjdGVkIFBSSVZIRUFEIHZlcnNpb24gJWQuJWQsIGdvdCAlZC4lZC4iCiAJCQkiIEFib3J0aW5nLiIsIDIsIDExLCBwaC0+dmVyX21ham9yLCBwaC0+dmVyX21pbm9yKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWlmIChwaC0+Y29uZmlnX3NpemUgIT0gTERNX0RCX1NJWkUpIHsJLyogMSBNaUIgaW4gc2VjdG9ycy4gKi8KIAkJLyogV2FybiB0aGUgdXNlciBhbmQgY29udGludWUsIGNhcmVmdWxseSAqLwpAQCAtMTY2LDE2ICsxNjEsMTYgQEAKIAlpZiAoKHBoLT5sb2dpY2FsX2Rpc2tfc2l6ZSA9PSAwKSB8fAogCSAgICAocGgtPmxvZ2ljYWxfZGlza19zdGFydCArIHBoLT5sb2dpY2FsX2Rpc2tfc2l6ZSA+IHBoLT5jb25maWdfc3RhcnQpKSB7CiAJCWxkbV9lcnJvciAoIlBSSVZIRUFEIGRpc2sgc2l6ZSBkb2Vzbid0IG1hdGNoIHJlYWwgZGlzayBzaXplIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmICghbGRtX3BhcnNlX2d1aWQgKGRhdGEgKyAweDAwMzAsIHBoLT5kaXNrX2lkKSkgewogCQlsZG1fZXJyb3IgKCJQUklWSEVBRCBjb250YWlucyBhbiBpbnZhbGlkIEdVSUQuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWxkbV9kZWJ1ZyAoIlBhcnNlZCBQUklWSEVBRCBzdWNjZXNzZnVsbHkuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtMTg5LDE2ICsxODQsMTYgQEAKICAqCiAgKiBOLkIuICBUaGUgKl9zdGFydCBhbmQgKl9zaXplIHZhbHVlcyByZXR1cm5lZCBpbiBAdG9jIGFyZSBub3QgcmFuZ2UtY2hlY2tlZC4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQHRvYyBjb250YWlucyB0aGUgVE9DQkxPQ0sgZGF0YQotICogICAgICAgICAgRkFMU0UgIEB0b2MgY29udGVudHMgYXJlIHVuZGVmaW5lZAorICogUmV0dXJuOiAgJ3RydWUnICAgQHRvYyBjb250YWlucyB0aGUgVE9DQkxPQ0sgZGF0YQorICogICAgICAgICAgJ2ZhbHNlJyAgQHRvYyBjb250ZW50cyBhcmUgdW5kZWZpbmVkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9wYXJzZV90b2NibG9jayAoY29uc3QgdTggKmRhdGEsIHN0cnVjdCB0b2NibG9jayAqdG9jKQorc3RhdGljIGJvb2wgbGRtX3BhcnNlX3RvY2Jsb2NrIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHRvY2Jsb2NrICp0b2MpCiB7CiAJQlVHX09OICghZGF0YSB8fCAhdG9jKTsKIAogCWlmIChNQUdJQ19UT0NCTE9DSyAhPSBCRTY0IChkYXRhKSkgewogCQlsZG1fY3JpdCAoIkNhbm5vdCBmaW5kIFRPQ0JMT0NLLCBkYXRhYmFzZSBtYXkgYmUgY29ycnVwdC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCXN0cm5jcHkgKHRvYy0+Yml0bWFwMV9uYW1lLCBkYXRhICsgMHgyNCwgc2l6ZW9mICh0b2MtPmJpdG1hcDFfbmFtZSkpOwogCXRvYy0+Yml0bWFwMV9uYW1lW3NpemVvZiAodG9jLT5iaXRtYXAxX25hbWUpIC0gMV0gPSAwOwpAQCAtMjA5LDcgKzIwNCw3IEBACiAJCQlzaXplb2YgKHRvYy0+Yml0bWFwMV9uYW1lKSkgIT0gMCkgewogCQlsZG1fY3JpdCAoIlRPQ0JMT0NLJ3MgZmlyc3QgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLiIsCiAJCQkJVE9DX0JJVE1BUDEsIHRvYy0+Yml0bWFwMV9uYW1lKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCXN0cm5jcHkgKHRvYy0+Yml0bWFwMl9uYW1lLCBkYXRhICsgMHg0Niwgc2l6ZW9mICh0b2MtPmJpdG1hcDJfbmFtZSkpOwogCXRvYy0+Yml0bWFwMl9uYW1lW3NpemVvZiAodG9jLT5iaXRtYXAyX25hbWUpIC0gMV0gPSAwOwpAQCAtMjE5LDEwICsyMTQsMTAgQEAKIAkJCXNpemVvZiAodG9jLT5iaXRtYXAyX25hbWUpKSAhPSAwKSB7CiAJCWxkbV9jcml0ICgiVE9DQkxPQ0sncyBzZWNvbmQgYml0bWFwIGlzICclcycsIHNob3VsZCBiZSAnJXMnLiIsCiAJCQkJVE9DX0JJVE1BUDIsIHRvYy0+Yml0bWFwMl9uYW1lKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCWxkbV9kZWJ1ZyAoIlBhcnNlZCBUT0NCTE9DSyBzdWNjZXNzZnVsbHkuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtMjM1LDE2ICsyMzAsMTYgQEAKICAqCiAgKiBOLkIuICBUaGUgKl9zdGFydCwgKl9zaXplIGFuZCAqX3NlcSB2YWx1ZXMgd2lsbCBiZSByYW5nZS1jaGVja2VkIGxhdGVyLgogICoKLSAqIFJldHVybjogIFRSVUUgICBAdm0gY29udGFpbnMgVk1EQiBpbmZvCi0gKiAgICAgICAgICBGQUxTRSAgQHZtIGNvbnRlbnRzIGFyZSB1bmRlZmluZWQKKyAqIFJldHVybjogICd0cnVlJyAgIEB2bSBjb250YWlucyBWTURCIGluZm8KKyAqICAgICAgICAgICdmYWxzZScgIEB2bSBjb250ZW50cyBhcmUgdW5kZWZpbmVkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9wYXJzZV92bWRiIChjb25zdCB1OCAqZGF0YSwgc3RydWN0IHZtZGIgKnZtKQorc3RhdGljIGJvb2wgbGRtX3BhcnNlX3ZtZGIgKGNvbnN0IHU4ICpkYXRhLCBzdHJ1Y3Qgdm1kYiAqdm0pCiB7CiAJQlVHX09OICghZGF0YSB8fCAhdm0pOwogCiAJaWYgKE1BR0lDX1ZNREIgIT0gQkUzMiAoZGF0YSkpIHsKIAkJbGRtX2NyaXQgKCJDYW5ub3QgZmluZCB0aGUgVk1EQiwgZGF0YWJhc2UgbWF5IGJlIGNvcnJ1cHQuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCXZtLT52ZXJfbWFqb3IgPSBCRTE2IChkYXRhICsgMHgxMik7CkBAIC0yNTIsNyArMjQ3LDcgQEAKIAlpZiAoKHZtLT52ZXJfbWFqb3IgIT0gNCkgfHwgKHZtLT52ZXJfbWlub3IgIT0gMTApKSB7CiAJCWxkbV9lcnJvciAoIkV4cGVjdGVkIFZNREIgdmVyc2lvbiAlZC4lZCwgZ290ICVkLiVkLiAiCiAJCQkiQWJvcnRpbmcuIiwgNCwgMTAsIHZtLT52ZXJfbWFqb3IsIHZtLT52ZXJfbWlub3IpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAl2bS0+dmJsa19zaXplICAgICA9IEJFMzIgKGRhdGEgKyAweDA4KTsKQEAgLTI2MCw3ICsyNTUsNyBAQAogCXZtLT5sYXN0X3ZibGtfc2VxID0gQkUzMiAoZGF0YSArIDB4MDQpOwogCiAJbGRtX2RlYnVnICgiUGFyc2VkIFZNREIgc3VjY2Vzc2Z1bGx5LiIpOwotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTI3MCwxMCArMjY1LDEwIEBACiAgKgogICogVGhpcyBjb21wYXJlcyB0aGUgdHdvIHByaXZoZWFkIHN0cnVjdHVyZXMgQHBoMSBhbmQgQHBoMi4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgSWRlbnRpY2FsCi0gKiAgICAgICAgICBGQUxTRSAgRGlmZmVyZW50CisgKiBSZXR1cm46ICAndHJ1ZScgICBJZGVudGljYWwKKyAqICAgICAgICAgICdmYWxzZScgIERpZmZlcmVudAogICovCi1zdGF0aWMgQk9PTCBsZG1fY29tcGFyZV9wcml2aGVhZHMgKGNvbnN0IHN0cnVjdCBwcml2aGVhZCAqcGgxLAorc3RhdGljIGJvb2wgbGRtX2NvbXBhcmVfcHJpdmhlYWRzIChjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMSwKIAkJCQkgICBjb25zdCBzdHJ1Y3QgcHJpdmhlYWQgKnBoMikKIHsKIAlCVUdfT04gKCFwaDEgfHwgIXBoMik7CkBAIC0yOTQsMTAgKzI4OSwxMCBAQAogICoKICAqIFRoaXMgY29tcGFyZXMgdGhlIHR3byB0b2NibG9jayBzdHJ1Y3R1cmVzIEB0b2MxIGFuZCBAdG9jMi4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgSWRlbnRpY2FsCi0gKiAgICAgICAgICBGQUxTRSAgRGlmZmVyZW50CisgKiBSZXR1cm46ICAndHJ1ZScgICBJZGVudGljYWwKKyAqICAgICAgICAgICdmYWxzZScgIERpZmZlcmVudAogICovCi1zdGF0aWMgQk9PTCBsZG1fY29tcGFyZV90b2NibG9ja3MgKGNvbnN0IHN0cnVjdCB0b2NibG9jayAqdG9jMSwKK3N0YXRpYyBib29sIGxkbV9jb21wYXJlX3RvY2Jsb2NrcyAoY29uc3Qgc3RydWN0IHRvY2Jsb2NrICp0b2MxLAogCQkJCSAgIGNvbnN0IHN0cnVjdCB0b2NibG9jayAqdG9jMikKIHsKIAlCVUdfT04gKCF0b2MxIHx8ICF0b2MyKTsKQEAgLTMyMywxNyArMzE4LDE3IEBACiAgKiB0aGUgY29uZmlndXJhdGlvbiBhcmVhICh0aGUgZGF0YWJhc2UpLiAgVGhlIHZhbHVlcyBhcmUgcmFuZ2UtY2hlY2tlZCBhZ2FpbnN0CiAgKiBAaGQsIHdoaWNoIGNvbnRhaW5zIHRoZSByZWFsIHNpemUgb2YgdGhlIGRpc2suCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIFN1Y2Nlc3MKLSAqICAgICAgICAgIEZBTFNFICBFcnJvcgorICogUmV0dXJuOiAgJ3RydWUnICAgU3VjY2VzcworICogICAgICAgICAgJ2ZhbHNlJyAgRXJyb3IKICAqLwotc3RhdGljIEJPT0wgbGRtX3ZhbGlkYXRlX3ByaXZoZWFkcyAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKK3N0YXRpYyBib29sIGxkbV92YWxpZGF0ZV9wcml2aGVhZHMgKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsCiAJCQkJICAgIHN0cnVjdCBwcml2aGVhZCAqcGgxKQogewogCXN0YXRpYyBjb25zdCBpbnQgb2ZmWzNdID0geyBPRkZfUFJJVjEsIE9GRl9QUklWMiwgT0ZGX1BSSVYzIH07CiAJc3RydWN0IHByaXZoZWFkICpwaFszXSA9IHsgcGgxIH07CiAJU2VjdG9yIHNlY3Q7CiAJdTggKmRhdGE7Ci0JQk9PTCByZXN1bHQgPSBGQUxTRTsKKwlib29sIHJlc3VsdCA9IGZhbHNlOwogCWxvbmcgbnVtX3NlY3RzOwogCWludCBpOwogCkBAIC0zOTMsNyArMzg4LDcgQEAKIAkJZ290byBvdXQ7CiAJfSovCiAJbGRtX2RlYnVnICgiVmFsaWRhdGVkIFBSSVZIRUFEcyBzdWNjZXNzZnVsbHkuIik7Ci0JcmVzdWx0ID0gVFJVRTsKKwlyZXN1bHQgPSB0cnVlOwogb3V0OgogCWtmcmVlIChwaFsxXSk7CiAJa2ZyZWUgKHBoWzJdKTsKQEAgLTQxMSwxMCArNDA2LDEwIEBACiAgKgogICogVGhlIG9mZnNldHMgYW5kIHNpemVzIG9mIHRoZSBjb25maWdzIGFyZSByYW5nZS1jaGVja2VkIGFnYWluc3QgYSBwcml2aGVhZC4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQHRvYzEgY29udGFpbnMgdmFsaWRhdGVkIFRPQ0JMT0NLIGluZm8KLSAqICAgICAgICAgIEZBTFNFICBAdG9jMSBjb250ZW50cyBhcmUgdW5kZWZpbmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBAdG9jMSBjb250YWlucyB2YWxpZGF0ZWQgVE9DQkxPQ0sgaW5mbworICogICAgICAgICAgJ2ZhbHNlJyAgQHRvYzEgY29udGVudHMgYXJlIHVuZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fdmFsaWRhdGVfdG9jYmxvY2tzIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LAorc3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3RvY2Jsb2NrcyAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwKIAl1bnNpZ25lZCBsb25nIGJhc2UsIHN0cnVjdCBsZG1kYiAqbGRiKQogewogCXN0YXRpYyBjb25zdCBpbnQgb2ZmWzRdID0geyBPRkZfVE9DQjEsIE9GRl9UT0NCMiwgT0ZGX1RPQ0IzLCBPRkZfVE9DQjR9OwpAQCAtNDIyLDcgKzQxNyw3IEBACiAJc3RydWN0IHByaXZoZWFkICpwaDsKIAlTZWN0b3Igc2VjdDsKIAl1OCAqZGF0YTsKLQlCT09MIHJlc3VsdCA9IEZBTFNFOworCWJvb2wgcmVzdWx0ID0gZmFsc2U7CiAJaW50IGk7CiAKIAlCVUdfT04gKCFiZGV2IHx8ICFsZGIpOwpAQCAtNDY1LDcgKzQ2MCw3IEBACiAJfQogCiAJbGRtX2RlYnVnICgiVmFsaWRhdGVkIFRPQ0JMT0NLcyBzdWNjZXNzZnVsbHkuIik7Ci0JcmVzdWx0ID0gVFJVRTsKKwlyZXN1bHQgPSB0cnVlOwogb3V0OgogCWtmcmVlICh0YlsxXSk7CiAJa2ZyZWUgKHRiWzJdKTsKQEAgLTQ4MiwxNSArNDc3LDE1IEBACiAgKiBGaW5kIHRoZSB2bWRiIG9mIHRoZSBMRE0gRGF0YWJhc2Ugc3RvcmVkIG9uIEBiZGV2IGFuZCByZXR1cm4gdGhlIHBhcnNlZAogICogaW5mb3JtYXRpb24gaW4gQGxkYi4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQGxkYiBjb250YWlucyB2YWxpZGF0ZWQgVkJEQiBpbmZvCi0gKiAgICAgICAgICBGQUxTRSAgQGxkYiBjb250ZW50cyBhcmUgdW5kZWZpbmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBAbGRiIGNvbnRhaW5zIHZhbGlkYXRlZCBWQkRCIGluZm8KKyAqICAgICAgICAgICdmYWxzZScgIEBsZGIgY29udGVudHMgYXJlIHVuZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fdmFsaWRhdGVfdm1kYiAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgbG9uZyBiYXNlLAorc3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3ZtZGIgKHN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIHVuc2lnbmVkIGxvbmcgYmFzZSwKIAkJCSAgICAgICBzdHJ1Y3QgbGRtZGIgKmxkYikKIHsKIAlTZWN0b3Igc2VjdDsKIAl1OCAqZGF0YTsKLQlCT09MIHJlc3VsdCA9IEZBTFNFOworCWJvb2wgcmVzdWx0ID0gZmFsc2U7CiAJc3RydWN0IHZtZGIgKnZtOwogCXN0cnVjdCB0b2NibG9jayAqdG9jOwogCkBAIC01MDIsNyArNDk3LDcgQEAKIAlkYXRhID0gcmVhZF9kZXZfc2VjdG9yIChiZGV2LCBiYXNlICsgT0ZGX1ZNREIsICZzZWN0KTsKIAlpZiAoIWRhdGEpIHsKIAkJbGRtX2NyaXQgKCJEaXNrIHJlYWQgZmFpbGVkLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlpZiAoIWxkbV9wYXJzZV92bWRiIChkYXRhLCB2bSkpCkBAIC01MjcsNyArNTIyLDcgQEAKIAkJZ290byBvdXQ7CiAJfQogCi0JcmVzdWx0ID0gVFJVRTsKKwlyZXN1bHQgPSB0cnVlOwogb3V0OgogCXB1dF9kZXZfc2VjdG9yIChzZWN0KTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtNTQ3LDIzICs1NDIsMjMgQEAKICAqICAgICAgIG9ubHkgbGlrZWx5IHRvIGhhcHBlbiBpZiB0aGUgdW5kZXJseWluZyBkZXZpY2UgaXMgc3RyYW5nZS4gIElmIHRoYXQgSVMKICAqICAgICAgIHRoZSBjYXNlIHdlIHNob3VsZCByZXR1cm4gemVybyB0byBsZXQgc29tZW9uZSBlbHNlIHRyeS4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQGJkZXYgaXMgYSBkeW5hbWljIGRpc2sKLSAqICAgICAgICAgIEZBTFNFICBAYmRldiBpcyBub3QgYSBkeW5hbWljIGRpc2ssIG9yIGFuIGVycm9yIG9jY3VycmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBAYmRldiBpcyBhIGR5bmFtaWMgZGlzaworICogICAgICAgICAgJ2ZhbHNlJyAgQGJkZXYgaXMgbm90IGEgZHluYW1pYyBkaXNrLCBvciBhbiBlcnJvciBvY2N1cnJlZAogICovCi1zdGF0aWMgQk9PTCBsZG1fdmFsaWRhdGVfcGFydGl0aW9uX3RhYmxlIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2KQorc3RhdGljIGJvb2wgbGRtX3ZhbGlkYXRlX3BhcnRpdGlvbl90YWJsZSAoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKIHsKIAlTZWN0b3Igc2VjdDsKIAl1OCAqZGF0YTsKIAlzdHJ1Y3QgcGFydGl0aW9uICpwOwogCWludCBpOwotCUJPT0wgcmVzdWx0ID0gRkFMU0U7CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKIAogCUJVR19PTiAoIWJkZXYpOwogCiAJZGF0YSA9IHJlYWRfZGV2X3NlY3RvciAoYmRldiwgMCwgJnNlY3QpOwogCWlmICghZGF0YSkgewogCQlsZG1fY3JpdCAoIkRpc2sgcmVhZCBmYWlsZWQuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmICgqKF9fbGUxNiopIChkYXRhICsgMHgwMUZFKSAhPSBjcHVfdG9fbGUxNiAoTVNET1NfTEFCRUxfTUFHSUMpKQpAQCAtNTcyLDcgKzU2Nyw3IEBACiAJcCA9IChzdHJ1Y3QgcGFydGl0aW9uKikoZGF0YSArIDB4MDFCRSk7CiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKywgcCsrKQogCQlpZiAoU1lTX0lORCAocCkgPT0gV0lOMktfRFlOQU1JQ19QQVJUSVRJT04pIHsKLQkJCXJlc3VsdCA9IFRSVUU7CisJCQlyZXN1bHQgPSB0cnVlOwogCQkJYnJlYWs7CiAJCX0KIApAQCAtNjI1LDEwICs2MjAsMTAgQEAKICAqIE4uQi4gIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyB0aGUgcGFydGl0aW9ucyBpbiB0aGUgb3JkZXIgaXQgZmluZHMgcGFydGl0aW9uCiAgKiAgICAgICBvYmplY3RzIGluIHRoZSBsaW5rZWQgbGlzdC4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgUGFydGl0aW9uIGNyZWF0ZWQKLSAqICAgICAgICAgIEZBTFNFICBFcnJvciwgcHJvYmFibHkgYSByYW5nZSBjaGVja2luZyBwcm9ibGVtCisgKiBSZXR1cm46ICAndHJ1ZScgICBQYXJ0aXRpb24gY3JlYXRlZAorICogICAgICAgICAgJ2ZhbHNlJyAgRXJyb3IsIHByb2JhYmx5IGEgcmFuZ2UgY2hlY2tpbmcgcHJvYmxlbQogICovCi1zdGF0aWMgQk9PTCBsZG1fY3JlYXRlX2RhdGFfcGFydGl0aW9ucyAoc3RydWN0IHBhcnNlZF9wYXJ0aXRpb25zICpwcCwKK3N0YXRpYyBib29sIGxkbV9jcmVhdGVfZGF0YV9wYXJ0aXRpb25zIChzdHJ1Y3QgcGFyc2VkX3BhcnRpdGlvbnMgKnBwLAogCQkJCQljb25zdCBzdHJ1Y3QgbGRtZGIgKmxkYikKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOwpAQCAtNjQyLDcgKzYzNyw3IEBACiAJZGlzayA9IGxkbV9nZXRfZGlza19vYmppZCAobGRiKTsKIAlpZiAoIWRpc2spIHsKIAkJbGRtX2NyaXQgKCJDYW4ndCBmaW5kIHRoZSBJRCBvZiB0aGlzIGRpc2sgaW4gdGhlIGRhdGFiYXNlLiIpOwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlwcmludGsgKCIgW0xETV0iKTsKQEAgLTY2MSw3ICs2NTYsNyBAQAogCX0KIAogCXByaW50ayAoIlxuIik7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIApAQCAtNzY2LDEwICs3NjEsMTAgQEAKICAqCiAgKiBSZWFkIGEgcmF3IFZCTEsgQ29tcG9uZW50IG9iamVjdCAodmVyc2lvbiAzKSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIEB2YiBjb250YWlucyBhIENvbXBvbmVudCBWQkxLCi0gKiAgICAgICAgICBGQUxTRSAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZAorICogUmV0dXJuOiAgJ3RydWUnICAgQHZiIGNvbnRhaW5zIGEgQ29tcG9uZW50IFZCTEsKKyAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKICAqLwotc3RhdGljIEJPT0wgbGRtX3BhcnNlX2NtcDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKK3N0YXRpYyBib29sIGxkbV9wYXJzZV9jbXAzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiB7CiAJaW50IHJfb2JqaWQsIHJfbmFtZSwgcl92c3RhdGUsIHJfY2hpbGQsIHJfcGFyZW50LCByX3N0cmlwZSwgcl9jb2xzLCBsZW47CiAJc3RydWN0IHZibGtfY29tcCAqY29tcDsKQEAgLTc5MiwxMSArNzg3LDExIEBACiAJCWxlbiA9IHJfcGFyZW50OwogCX0KIAlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlsZW4gKz0gVkJMS19TSVpFX0NNUDM7CiAJaWYgKGxlbiAhPSBCRTMyIChidWZmZXIgKyAweDE0KSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAljb21wID0gJnZiLT52YmxrLmNvbXA7CiAJbGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBjb21wLT5zdGF0ZSwKQEAgLTgwNiw3ICs4MDEsNyBAQAogCWNvbXAtPnBhcmVudF9pZCA9IGxkbV9nZXRfdm51bSAoYnVmZmVyICsgMHgyRCArIHJfY2hpbGQpOwogCWNvbXAtPmNodW5rc2l6ZSA9IHJfc3RyaXBlID8gbGRtX2dldF92bnVtIChidWZmZXIrcl9wYXJlbnQrMHgyRSkgOiAwOwogCi0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtODE3LDggKzgxMiw4IEBACiAgKgogICogUmVhZCBhIHJhdyBWQkxLIERpc2sgR3JvdXAgb2JqZWN0ICh2ZXJzaW9uIDMpIGludG8gYSB2YmxrIHN0cnVjdHVyZS4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQHZiIGNvbnRhaW5zIGEgRGlzayBHcm91cCBWQkxLCi0gKiAgICAgICAgICBGQUxTRSAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZAorICogUmV0dXJuOiAgJ3RydWUnICAgQHZiIGNvbnRhaW5zIGEgRGlzayBHcm91cCBWQkxLCisgKiAgICAgICAgICAnZmFsc2UnICBAdmIgY29udGVudHMgYXJlIG5vdCBkZWZpbmVkCiAgKi8KIHN0YXRpYyBpbnQgbGRtX3BhcnNlX2RncjMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIHsKQEAgLTg0MSwxNiArODM2LDE2IEBACiAJCWxlbiA9IHJfZGlza2lkOwogCX0KIAlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlsZW4gKz0gVkJMS19TSVpFX0RHUjM7CiAJaWYgKGxlbiAhPSBCRTMyIChidWZmZXIgKyAweDE0KSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlkZ3JwID0gJnZiLT52YmxrLmRncnA7CiAJbGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9uYW1lLCBkZ3JwLT5kaXNrX2lkLAogCQlzaXplb2YgKGRncnAtPmRpc2tfaWQpKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC04NjEsMTAgKzg1NiwxMCBAQAogICoKICAqIFJlYWQgYSByYXcgVkJMSyBEaXNrIEdyb3VwIG9iamVjdCAodmVyc2lvbiA0KSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIEB2YiBjb250YWlucyBhIERpc2sgR3JvdXAgVkJMSwotICogICAgICAgICAgRkFMU0UgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKKyAqIFJldHVybjogICd0cnVlJyAgIEB2YiBjb250YWlucyBhIERpc2sgR3JvdXAgVkJMSworICogICAgICAgICAgJ2ZhbHNlJyAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fcGFyc2VfZGdyNCAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQorc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RncjQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIHsKIAljaGFyIGJ1Zls2NF07CiAJaW50IHJfb2JqaWQsIHJfbmFtZSwgcl9pZDEsIHJfaWQyLCBsZW47CkBAIC04ODUsMTYgKzg4MCwxNiBAQAogCQlsZW4gPSByX25hbWU7CiAJfQogCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWxlbiArPSBWQkxLX1NJWkVfREdSNDsKIAlpZiAobGVuICE9IEJFMzIgKGJ1ZmZlciArIDB4MTQpKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWRncnAgPSAmdmItPnZibGsuZGdycDsKIAogCWxkbV9nZXRfdnN0ciAoYnVmZmVyICsgMHgxOCArIHJfb2JqaWQsIGJ1Ziwgc2l6ZW9mIChidWYpKTsKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC05MDUsMTAgKzkwMCwxMCBAQAogICoKICAqIFJlYWQgYSByYXcgVkJMSyBEaXNrIG9iamVjdCAodmVyc2lvbiAzKSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIEB2YiBjb250YWlucyBhIERpc2sgVkJMSwotICogICAgICAgICAgRkFMU0UgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKKyAqIFJldHVybjogICd0cnVlJyAgIEB2YiBjb250YWlucyBhIERpc2sgVkJMSworICogICAgICAgICAgJ2ZhbHNlJyAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZAogICovCi1zdGF0aWMgQk9PTCBsZG1fcGFyc2VfZHNrMyAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQorc3RhdGljIGJvb2wgbGRtX3BhcnNlX2RzazMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKIHsKIAlpbnQgcl9vYmppZCwgcl9uYW1lLCByX2Rpc2tpZCwgcl9hbHRuYW1lLCBsZW47CiAJc3RydWN0IHZibGtfZGlzayAqZGlzazsKQEAgLTkyMSwxOSArOTE2LDE5IEBACiAJcl9hbHRuYW1lID0gbGRtX3JlbGF0aXZlIChidWZmZXIsIGJ1ZmxlbiwgMHgxOCwgcl9kaXNraWQpOwogCWxlbiA9IHJfYWx0bmFtZTsKIAlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlsZW4gKz0gVkJMS19TSVpFX0RTSzM7CiAJaWYgKGxlbiAhPSBCRTMyIChidWZmZXIgKyAweDE0KSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlkaXNrID0gJnZiLT52YmxrLmRpc2s7CiAJbGRtX2dldF92c3RyIChidWZmZXIgKyAweDE4ICsgcl9kaXNraWQsIGRpc2stPmFsdF9uYW1lLAogCQlzaXplb2YgKGRpc2stPmFsdF9uYW1lKSk7CiAJaWYgKCFsZG1fcGFyc2VfZ3VpZCAoYnVmZmVyICsgMHgxOSArIHJfbmFtZSwgZGlzay0+ZGlza19pZCkpCi0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtOTQ0LDEwICs5MzksMTAgQEAKICAqCiAgKiBSZWFkIGEgcmF3IFZCTEsgRGlzayBvYmplY3QgKHZlcnNpb24gNCkgaW50byBhIHZibGsgc3RydWN0dXJlLgogICoKLSAqIFJldHVybjogIFRSVUUgICBAdmIgY29udGFpbnMgYSBEaXNrIFZCTEsKLSAqICAgICAgICAgIEZBTFNFICBAdmIgY29udGVudHMgYXJlIG5vdCBkZWZpbmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBAdmIgY29udGFpbnMgYSBEaXNrIFZCTEsKKyAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKICAqLwotc3RhdGljIEJPT0wgbGRtX3BhcnNlX2RzazQgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKK3N0YXRpYyBib29sIGxkbV9wYXJzZV9kc2s0IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiB7CiAJaW50IHJfb2JqaWQsIHJfbmFtZSwgbGVuOwogCXN0cnVjdCB2YmxrX2Rpc2sgKmRpc2s7CkBAIC05NTgsMTUgKzk1MywxNSBAQAogCXJfbmFtZSAgPSBsZG1fcmVsYXRpdmUgKGJ1ZmZlciwgYnVmbGVuLCAweDE4LCByX29iamlkKTsKIAlsZW4gICAgID0gcl9uYW1lOwogCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWxlbiArPSBWQkxLX1NJWkVfRFNLNDsKIAlpZiAobGVuICE9IEJFMzIgKGJ1ZmZlciArIDB4MTQpKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWRpc2sgPSAmdmItPnZibGsuZGlzazsKIAltZW1jcHkgKGRpc2stPmRpc2tfaWQsIGJ1ZmZlciArIDB4MTggKyByX25hbWUsIEdVSURfU0laRSk7Ci0JcmV0dXJuIFRSVUU7CisJcmV0dXJuIHRydWU7CiB9CiAKIC8qKgpAQCAtOTc3LDEwICs5NzIsMTAgQEAKICAqCiAgKiBSZWFkIGEgcmF3IFZCTEsgUGFydGl0aW9uIG9iamVjdCAodmVyc2lvbiAzKSBpbnRvIGEgdmJsayBzdHJ1Y3R1cmUuCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIEB2YiBjb250YWlucyBhIFBhcnRpdGlvbiBWQkxLCi0gKiAgICAgICAgICBGQUxTRSAgQHZiIGNvbnRlbnRzIGFyZSBub3QgZGVmaW5lZAorICogUmV0dXJuOiAgJ3RydWUnICAgQHZiIGNvbnRhaW5zIGEgUGFydGl0aW9uIFZCTEsKKyAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKICAqLwotc3RhdGljIEJPT0wgbGRtX3BhcnNlX3BydDMgKGNvbnN0IHU4ICpidWZmZXIsIGludCBidWZsZW4sIHN0cnVjdCB2YmxrICp2YikKK3N0YXRpYyBib29sIGxkbV9wYXJzZV9wcnQzIChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiB7CiAJaW50IHJfb2JqaWQsIHJfbmFtZSwgcl9zaXplLCByX3BhcmVudCwgcl9kaXNraWQsIHJfaW5kZXgsIGxlbjsKIAlzdHJ1Y3QgdmJsa19wYXJ0ICpwYXJ0OwpAQCAtMTAwMSwxMSArOTk2LDExIEBACiAJCWxlbiA9IHJfZGlza2lkOwogCX0KIAlpZiAobGVuIDwgMCkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlsZW4gKz0gVkJMS19TSVpFX1BSVDM7CiAJaWYgKGxlbiAhPSBCRTMyIChidWZmZXIgKyAweDE0KSkKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAKIAlwYXJ0ID0gJnZiLT52YmxrLnBhcnQ7CiAJcGFydC0+c3RhcnQgICAgICAgICA9IEJFNjQgICAgICAgICAoYnVmZmVyICsgMHgyNCArIHJfbmFtZSk7CkBAIC0xMDE4LDcgKzEwMTMsNyBAQAogCWVsc2UKIAkJcGFydC0+cGFydG51bSA9IDA7CiAKLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC0xMDI5LDEwICsxMDI0LDEwIEBACiAgKgogICogUmVhZCBhIHJhdyBWQkxLIFZvbHVtZSBvYmplY3QgKHZlcnNpb24gNSkgaW50byBhIHZibGsgc3RydWN0dXJlLgogICoKLSAqIFJldHVybjogIFRSVUUgICBAdmIgY29udGFpbnMgYSBWb2x1bWUgVkJMSwotICogICAgICAgICAgRkFMU0UgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKKyAqIFJldHVybjogICd0cnVlJyAgIEB2YiBjb250YWlucyBhIFZvbHVtZSBWQkxLCisgKiAgICAgICAgICAnZmFsc2UnICBAdmIgY29udGVudHMgYXJlIG5vdCBkZWZpbmVkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9wYXJzZV92b2w1IChjb25zdCB1OCAqYnVmZmVyLCBpbnQgYnVmbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCitzdGF0aWMgYm9vbCBsZG1fcGFyc2Vfdm9sNSAoY29uc3QgdTggKmJ1ZmZlciwgaW50IGJ1Zmxlbiwgc3RydWN0IHZibGsgKnZiKQogewogCWludCByX29iamlkLCByX25hbWUsIHJfdnR5cGUsIHJfY2hpbGQsIHJfc2l6ZSwgcl9pZDEsIHJfaWQyLCByX3NpemUyOwogCWludCByX2RyaXZlLCBsZW47CkBAIC0xMDY4LDExICsxMDYzLDExIEBACiAKIAlsZW4gPSByX2RyaXZlOwogCWlmIChsZW4gPCAwKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCWxlbiArPSBWQkxLX1NJWkVfVk9MNTsKIAlpZiAobGVuICE9IEJFMzIgKGJ1ZmZlciArIDB4MTQpKQotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAogCXZvbHUgPSAmdmItPnZibGsudm9sdTsKIApAQCAtMTA4Nyw3ICsxMDgyLDcgQEAKIAkJbGRtX2dldF92c3RyIChidWZmZXIgKyAweDUzICsgcl9zaXplLCAgdm9sdS0+ZHJpdmVfaGludCwKIAkJCXNpemVvZiAodm9sdS0+ZHJpdmVfaGludCkpOwogCX0KLQlyZXR1cm4gVFJVRTsKKwlyZXR1cm4gdHJ1ZTsKIH0KIAogLyoqCkBAIC0xMTAwLDEyICsxMDk1LDEyIEBACiAgKiBpbmZvcm1hdGlvbiBjb21tb24gdG8gYWxsIFZCTEsgdHlwZXMsIHRoZW4gZGVsZWdhdGVzIHRoZSByZXN0IG9mIHRoZSB3b3JrIHRvCiAgKiBoZWxwZXIgZnVuY3Rpb25zOiBsZG1fcGFyc2VfKi4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgQHZiIGNvbnRhaW5zIGEgVkJMSwotICogICAgICAgICAgRkFMU0UgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKKyAqIFJldHVybjogICd0cnVlJyAgIEB2YiBjb250YWlucyBhIFZCTEsKKyAqICAgICAgICAgICdmYWxzZScgIEB2YiBjb250ZW50cyBhcmUgbm90IGRlZmluZWQKICAqLwotc3RhdGljIEJPT0wgbGRtX3BhcnNlX3ZibGsgKGNvbnN0IHU4ICpidWYsIGludCBsZW4sIHN0cnVjdCB2YmxrICp2YikKK3N0YXRpYyBib29sIGxkbV9wYXJzZV92YmxrIChjb25zdCB1OCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3QgdmJsayAqdmIpCiB7Ci0JQk9PTCByZXN1bHQgPSBGQUxTRTsKKwlib29sIHJlc3VsdCA9IGZhbHNlOwogCWludCByX29iamlkOwogCiAJQlVHX09OICghYnVmIHx8ICF2Yik7CkBAIC0xMTEzLDcgKzExMDgsNyBAQAogCXJfb2JqaWQgPSBsZG1fcmVsYXRpdmUgKGJ1ZiwgbGVuLCAweDE4LCAwKTsKIAlpZiAocl9vYmppZCA8IDApIHsKIAkJbGRtX2Vycm9yICgiVkJMSyBoZWFkZXIgaXMgY29ycnVwdC4iKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJdmItPmZsYWdzICA9IGJ1ZlsweDEyXTsKQEAgLTExNTIsMTAgKzExNDcsMTAgQEAKICAqCiAgKiBOLkIuICBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGNoZWNrIHRoZSB2YWxpZGl0eSBvZiB0aGUgVkJMS3MuCiAgKgotICogUmV0dXJuOiAgVFJVRSAgIFRoZSBWQkxLIHdhcyBhZGRlZAotICogICAgICAgICAgRkFMU0UgIEFuIGVycm9yIG9jY3VycmVkCisgKiBSZXR1cm46ICAndHJ1ZScgICBUaGUgVkJMSyB3YXMgYWRkZWQKKyAqICAgICAgICAgICdmYWxzZScgIEFuIGVycm9yIG9jY3VycmVkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYikKK3N0YXRpYyBib29sIGxkbV9sZG1kYl9hZGQgKHU4ICpkYXRhLCBpbnQgbGVuLCBzdHJ1Y3QgbGRtZGIgKmxkYikKIHsKIAlzdHJ1Y3QgdmJsayAqdmI7CiAJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKQEAgLTExNjUsMTIgKzExNjAsMTIgQEAKIAl2YiA9IGttYWxsb2MgKHNpemVvZiAoKnZiKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF2YikgewogCQlsZG1fY3JpdCAoIk91dCBvZiBtZW1vcnkuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWlmICghbGRtX3BhcnNlX3ZibGsgKGRhdGEsIGxlbiwgdmIpKSB7CiAJCWtmcmVlKHZiKTsKLQkJcmV0dXJuIEZBTFNFOwkJCS8qIEFscmVhZHkgbG9nZ2VkICovCisJCXJldHVybiBmYWxzZTsJCQkvKiBBbHJlYWR5IGxvZ2dlZCAqLwogCX0KIAogCS8qIFB1dCB2YmxrIGludG8gdGhlIGNvcnJlY3QgbGlzdC4gKi8KQEAgLTExOTYsMTMgKzExOTEsMTMgQEAKIAkJCWlmICgodi0+dmJsay5wYXJ0LmRpc2tfaWQgPT0gdmItPnZibGsucGFydC5kaXNrX2lkKSAmJgogCQkJICAgICh2LT52YmxrLnBhcnQuc3RhcnQgPiB2Yi0+dmJsay5wYXJ0LnN0YXJ0KSkgewogCQkJCWxpc3RfYWRkX3RhaWwgKCZ2Yi0+bGlzdCwgJnYtPmxpc3QpOwotCQkJCXJldHVybiBUUlVFOworCQkJCXJldHVybiB0cnVlOwogCQkJfQogCQl9CiAJCWxpc3RfYWRkX3RhaWwgKCZ2Yi0+bGlzdCwgJmxkYi0+dl9wYXJ0KTsKIAkJYnJlYWs7CiAJfQotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTEyMTQsMTAgKzEyMDksMTAgQEAKICAqIEZyYWdtZW50ZWQgVkJMS3MgbWF5IG5vdCBiZSBjb25zZWN1dGl2ZSBpbiB0aGUgZGF0YWJhc2UsIHNvIHRoZXkgYXJlIHBsYWNlZAogICogaW4gYSBsaXN0IHNvIHRoZXkgY2FuIGJlIHBpZWNlZCB0b2dldGhlciBsYXRlci4KICAqCi0gKiBSZXR1cm46ICBUUlVFICAgU3VjY2VzcywgdGhlIFZCTEsgd2FzIGFkZGVkIHRvIHRoZSBsaXN0Ci0gKiAgICAgICAgICBGQUxTRSAgRXJyb3IsIGEgcHJvYmxlbSBvY2N1cnJlZAorICogUmV0dXJuOiAgJ3RydWUnICAgU3VjY2VzcywgdGhlIFZCTEsgd2FzIGFkZGVkIHRvIHRoZSBsaXN0CisgKiAgICAgICAgICAnZmFsc2UnICBFcnJvciwgYSBwcm9ibGVtIG9jY3VycmVkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9mcmFnX2FkZCAoY29uc3QgdTggKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgbGlzdF9oZWFkICpmcmFncykKK3N0YXRpYyBib29sIGxkbV9mcmFnX2FkZCAoY29uc3QgdTggKmRhdGEsIGludCBzaXplLCBzdHJ1Y3QgbGlzdF9oZWFkICpmcmFncykKIHsKIAlzdHJ1Y3QgZnJhZyAqZjsKIAlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOwpAQCAtMTIzMCw3ICsxMjI1LDcgQEAKIAludW0gICA9IEJFMTYgKGRhdGEgKyAweDBFKTsKIAlpZiAoKG51bSA8IDEpIHx8IChudW0gPiA0KSkgewogCQlsZG1fZXJyb3IgKCJBIFZCTEsgY2xhaW1zIHRvIGhhdmUgJWQgcGFydHMuIiwgbnVtKTsKLQkJcmV0dXJuIEZBTFNFOworCQlyZXR1cm4gZmFsc2U7CiAJfQogCiAJbGlzdF9mb3JfZWFjaCAoaXRlbSwgZnJhZ3MpIHsKQEAgLTEyNDIsNyArMTIzNyw3IEBACiAJZiA9IGttYWxsb2MgKHNpemVvZiAoKmYpICsgc2l6ZSpudW0sIEdGUF9LRVJORUwpOwogCWlmICghZikgewogCQlsZG1fY3JpdCAoIk91dCBvZiBtZW1vcnkuIik7Ci0JCXJldHVybiBGQUxTRTsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCWYtPmdyb3VwID0gZ3JvdXA7CkBAIC0xMjU1LDcgKzEyNTAsNyBAQAogCWlmIChmLT5tYXAgJiAoMSA8PCByZWMpKSB7CiAJCWxkbV9lcnJvciAoIkR1cGxpY2F0ZSBWQkxLLCBwYXJ0ICVkLiIsIHJlYyk7CiAJCWYtPm1hcCAmPSAweDdGOwkJCS8qIE1hcmsgdGhlIGdyb3VwIGFzIGJyb2tlbiAqLwotCQlyZXR1cm4gRkFMU0U7CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlmLT5tYXAgfD0gKDEgPDwgcmVjKTsKQEAgLTEyNjYsNyArMTI2MSw3IEBACiAJfQogCW1lbWNweSAoZi0+ZGF0YStyZWMqKHNpemUtVkJMS19TSVpFX0hFQUQpK1ZCTEtfU0laRV9IRUFELCBkYXRhLCBzaXplKTsKIAotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTEyOTUsMTAgKzEyOTAsMTAgQEAKICAqIE5vdyB0aGF0IGFsbCB0aGUgZnJhZ21lbnRlZCBWQkxLcyBoYXZlIGJlZW4gY29sbGVjdGVkLCB0aGV5IG11c3QgYmUgYWRkZWQgdG8KICAqIHRoZSBkYXRhYmFzZSBmb3IgbGF0ZXIgdXNlLgogICoKLSAqIFJldHVybjogIFRSVUUgICBBbGwgdGhlIGZyYWdtZW50cyB3ZSBhZGRlZCBzdWNjZXNzZnVsbHkKLSAqICAgICAgICAgIEZBTFNFICBPbmUgb3IgbW9yZSBvZiB0aGUgZnJhZ21lbnRzIHdlIGludmFsaWQKKyAqIFJldHVybjogICd0cnVlJyAgIEFsbCB0aGUgZnJhZ21lbnRzIHdlIGFkZGVkIHN1Y2Nlc3NmdWxseQorICogICAgICAgICAgJ2ZhbHNlJyAgT25lIG9yIG1vcmUgb2YgdGhlIGZyYWdtZW50cyB3ZSBpbnZhbGlkCiAgKi8KLXN0YXRpYyBCT09MIGxkbV9mcmFnX2NvbW1pdCAoc3RydWN0IGxpc3RfaGVhZCAqZnJhZ3MsIHN0cnVjdCBsZG1kYiAqbGRiKQorc3RhdGljIGJvb2wgbGRtX2ZyYWdfY29tbWl0IChzdHJ1Y3QgbGlzdF9oZWFkICpmcmFncywgc3RydWN0IGxkbWRiICpsZGIpCiB7CiAJc3RydWN0IGZyYWcgKmY7CiAJc3RydWN0IGxpc3RfaGVhZCAqaXRlbTsKQEAgLTEzMTEsMTMgKzEzMDYsMTMgQEAKIAkJaWYgKGYtPm1hcCAhPSAweEZGKSB7CiAJCQlsZG1fZXJyb3IgKCJWQkxLIGdyb3VwICVkIGlzIGluY29tcGxldGUgKDB4JTAyeCkuIiwKIAkJCQlmLT5ncm91cCwgZi0+bWFwKTsKLQkJCXJldHVybiBGQUxTRTsKKwkJCXJldHVybiBmYWxzZTsKIAkJfQogCiAJCWlmICghbGRtX2xkbWRiX2FkZCAoZi0+ZGF0YSwgZi0+bnVtKmxkYi0+dm0udmJsa19zaXplLCBsZGIpKQotCQkJcmV0dXJuIEZBTFNFOwkJLyogQWxyZWFkeSBsb2dnZWQgKi8KKwkJCXJldHVybiBmYWxzZTsJCS8qIEFscmVhZHkgbG9nZ2VkICovCiAJfQotCXJldHVybiBUUlVFOworCXJldHVybiB0cnVlOwogfQogCiAvKioKQEAgLTEzMjksMTYgKzEzMjQsMTYgQEAKICAqIFRvIHVzZSB0aGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgVkJMS3MsIHRoZXkgbmVlZCB0byBiZSByZWFkIGZyb20gdGhlIGRpc2ssCiAgKiB1bnBhY2tlZCBhbmQgdmFsaWRhdGVkLiAgV2UgY2FjaGUgdGhlbSBpbiBAbGRiIGFjY29yZGluZyB0byB0aGVpciB0eXBlLgogICoKLSAqIFJldHVybjogIFRSVUUgICBBbGwgdGhlIFZCTEtzIHdlcmUgcmVhZCBzdWNjZXNzZnVsbHkKLSAqICAgICAgICAgIEZBTFNFICBBbiBlcnJvciBvY2N1cnJlZAorICogUmV0dXJuOiAgJ3RydWUnICAgQWxsIHRoZSBWQkxLcyB3ZXJlIHJlYWQgc3VjY2Vzc2Z1bGx5CisgKiAgICAgICAgICAnZmFsc2UnICBBbiBlcnJvciBvY2N1cnJlZAogICovCi1zdGF0aWMgQk9PTCBsZG1fZ2V0X3ZibGtzIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UsCitzdGF0aWMgYm9vbCBsZG1fZ2V0X3ZibGtzIChzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBsb25nIGJhc2UsCiAJCQkgICBzdHJ1Y3QgbGRtZGIgKmxkYikKIHsKIAlpbnQgc2l6ZSwgcGVyYnVmLCBza2lwLCBmaW5pc2gsIHMsIHYsIHJlY3M7CiAJdTggKmRhdGEgPSBOVUxMOwogCVNlY3RvciBzZWN0OwotCUJPT0wgcmVzdWx0ID0gRkFMU0U7CisJYm9vbCByZXN1bHQgPSBmYWxzZTsKIAlMSVNUX0hFQUQgKGZyYWdzKTsKIAogCUJVR19PTiAoIWJkZXYgfHwgIWxkYik7CmRpZmYgLS1naXQgYS9mcy9wYXJ0aXRpb25zL21zZG9zLmMgYi9mcy9wYXJ0aXRpb25zL21zZG9zLmMKaW5kZXggOGYxMjU4Ny4uNGY4ZGY3MSAxMDA2NDQKLS0tIGEvZnMvcGFydGl0aW9ucy9tc2Rvcy5jCisrKyBiL2ZzL3BhcnRpdGlvbnMvbXNkb3MuYwpAQCAtNTgsNiArNTgsMzEgQEAKIAlyZXR1cm4gKHBbMF0gPT0gTVNET1NfTEFCRUxfTUFHSUMxICYmIHBbMV0gPT0gTVNET1NfTEFCRUxfTUFHSUMyKTsKIH0KIAorLyogVmFsdWUgaXMgRUJDRElDICdJQk1BJyAqLworI2RlZmluZSBBSVhfTEFCRUxfTUFHSUMxCTB4QzkKKyNkZWZpbmUgQUlYX0xBQkVMX01BR0lDMgkweEMyCisjZGVmaW5lIEFJWF9MQUJFTF9NQUdJQzMJMHhENAorI2RlZmluZSBBSVhfTEFCRUxfTUFHSUM0CTB4QzEKK3N0YXRpYyBpbnQgYWl4X21hZ2ljX3ByZXNlbnQodW5zaWduZWQgY2hhciAqcCwgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKK3sKKwlTZWN0b3Igc2VjdDsKKwl1bnNpZ25lZCBjaGFyICpkOworCWludCByZXQgPSAwOworCisJaWYgKHBbMF0gIT0gQUlYX0xBQkVMX01BR0lDMSAmJgorCQlwWzFdICE9IEFJWF9MQUJFTF9NQUdJQzIgJiYKKwkJcFsyXSAhPSBBSVhfTEFCRUxfTUFHSUMzICYmCisJCXBbM10gIT0gQUlYX0xBQkVMX01BR0lDNCkKKwkJcmV0dXJuIDA7CisJZCA9IHJlYWRfZGV2X3NlY3RvcihiZGV2LCA3LCAmc2VjdCk7CisJaWYgKGQpIHsKKwkJaWYgKGRbMF0gPT0gJ18nICYmIGRbMV0gPT0gJ0wnICYmIGRbMl0gPT0gJ1YnICYmIGRbM10gPT0gJ00nKQorCQkJcmV0ID0gMTsKKwkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CisJfTsKKwlyZXR1cm4gcmV0OworfQorCiAvKgogICogQ3JlYXRlIGRldmljZXMgZm9yIGVhY2ggbG9naWNhbCBwYXJ0aXRpb24gaW4gYW4gZXh0ZW5kZWQgcGFydGl0aW9uLgogICogVGhlIGxvZ2ljYWwgcGFydGl0aW9ucyBmb3JtIGEgbGlua2VkIGxpc3QsIHdpdGggZWFjaCBlbnRyeSBiZWluZwpAQCAtMzkzLDYgKzQxOCwxMiBAQAogCQlyZXR1cm4gMDsKIAl9CiAKKwlpZiAoYWl4X21hZ2ljX3ByZXNlbnQoZGF0YSwgYmRldikpIHsKKwkJcHV0X2Rldl9zZWN0b3Ioc2VjdCk7CisJCXByaW50ayggIiBbQUlYXSIpOworCQlyZXR1cm4gMDsKKwl9CisKIAkvKgogCSAqIE5vdyB0aGF0IHRoZSA1NWFhIHNpZ25hdHVyZSBpcyBwcmVzZW50LCB0aGlzIGlzIHByb2JhYmx5CiAJICogZWl0aGVyIHRoZSBib290IHNlY3RvciBvZiBhIEZBVCBmaWxlc3lzdGVtIG9yIGEgRE9TLXR5cGUKZGlmZiAtLWdpdCBhL2ZzL3BpcGUuYyBiL2ZzL3BpcGUuYwppbmRleCAyMDM1MjU3Li5iMTYyNmYyIDEwMDY0NAotLS0gYS9mcy9waXBlLmMKKysrIGIvZnMvcGlwZS5jCkBAIC0yMTgsOSArMjE4LDEwIEBACiB9OwogCiBzdGF0aWMgc3NpemVfdAotcGlwZV9yZWFkdihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgc3RydWN0IGlvdmVjICpfaW92LAotCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKQorcGlwZV9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICpfaW92LAorCSAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKKwlzdHJ1Y3QgZmlsZSAqZmlscCA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfZGVudHJ5LT5kX2lub2RlOwogCXN0cnVjdCBwaXBlX2lub2RlX2luZm8gKnBpcGU7CiAJaW50IGRvX3dha2V1cDsKQEAgLTMzMCwxNyArMzMxLDEwIEBACiB9CiAKIHN0YXRpYyBzc2l6ZV90Ci1waXBlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQorcGlwZV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqX2lvdiwKKwkgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcHBvcykKIHsKLQlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSBidWYsIC5pb3ZfbGVuID0gY291bnQgfTsKLQotCXJldHVybiBwaXBlX3JlYWR2KGZpbHAsICZpb3YsIDEsIHBwb3MpOwotfQotCi1zdGF0aWMgc3NpemVfdAotcGlwZV93cml0ZXYoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqX2lvdiwKLQkgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCi17CisJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxwLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICpwaXBlOwogCXNzaXplX3QgcmV0OwpAQCAtNTEwLDE1ICs1MDQsNiBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotcGlwZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSAodm9pZCBfX3VzZXIgKilidWYsIC5pb3ZfbGVuID0gY291bnQgfTsKLQotCXJldHVybiBwaXBlX3dyaXRldihmaWxwLCAmaW92LCAxLCBwcG9zKTsKLX0KLQotc3RhdGljIHNzaXplX3QKIGJhZF9waXBlX3Ioc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewogCXJldHVybiAtRUJBREY7CkBAIC03MzYsOCArNzIxLDggQEAKICAqLwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX2ZpZm9fZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBwaXBlX3JlYWQsCi0JLnJlYWR2CQk9IHBpcGVfcmVhZHYsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IHBpcGVfcmVhZCwKIAkud3JpdGUJCT0gYmFkX3BpcGVfdywKIAkucG9sbAkJPSBwaXBlX3BvbGwsCiAJLmlvY3RsCQk9IHBpcGVfaW9jdGwsCkBAIC03NDksOCArNzM0LDggQEAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgd3JpdGVfZmlmb19mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAogCS5yZWFkCQk9IGJhZF9waXBlX3IsCi0JLndyaXRlCQk9IHBpcGVfd3JpdGUsCi0JLndyaXRldgkJPSBwaXBlX3dyaXRldiwKKwkud3JpdGUJCT0gZG9fc3luY193cml0ZSwKKwkuYWlvX3dyaXRlCT0gcGlwZV93cml0ZSwKIAkucG9sbAkJPSBwaXBlX3BvbGwsCiAJLmlvY3RsCQk9IHBpcGVfaW9jdGwsCiAJLm9wZW4JCT0gcGlwZV93cml0ZV9vcGVuLApAQCAtNzYwLDEwICs3NDUsMTAgQEAKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZHdyX2ZpZm9fZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBwaXBlX3JlYWQsCi0JLnJlYWR2CQk9IHBpcGVfcmVhZHYsCi0JLndyaXRlCQk9IHBpcGVfd3JpdGUsCi0JLndyaXRldgkJPSBwaXBlX3dyaXRldiwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gcGlwZV9yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBwaXBlX3dyaXRlLAogCS5wb2xsCQk9IHBpcGVfcG9sbCwKIAkuaW9jdGwJCT0gcGlwZV9pb2N0bCwKIAkub3BlbgkJPSBwaXBlX3Jkd3Jfb3BlbiwKQEAgLTc3Myw4ICs3NTgsOCBAQAogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWFkX3BpcGVfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKLQkucmVhZAkJPSBwaXBlX3JlYWQsCi0JLnJlYWR2CQk9IHBpcGVfcmVhZHYsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IHBpcGVfcmVhZCwKIAkud3JpdGUJCT0gYmFkX3BpcGVfdywKIAkucG9sbAkJPSBwaXBlX3BvbGwsCiAJLmlvY3RsCQk9IHBpcGVfaW9jdGwsCkBAIC03ODYsOCArNzcxLDggQEAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX3BpcGVfZm9wcyA9IHsKIAkubGxzZWVrCQk9IG5vX2xsc2VlaywKIAkucmVhZAkJPSBiYWRfcGlwZV9yLAotCS53cml0ZQkJPSBwaXBlX3dyaXRlLAotCS53cml0ZXYJCT0gcGlwZV93cml0ZXYsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IHBpcGVfd3JpdGUsCiAJLnBvbGwJCT0gcGlwZV9wb2xsLAogCS5pb2N0bAkJPSBwaXBlX2lvY3RsLAogCS5vcGVuCQk9IHBpcGVfd3JpdGVfb3BlbiwKQEAgLTc5NywxMCArNzgyLDEwIEBACiAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzID0gewogCS5sbHNlZWsJCT0gbm9fbGxzZWVrLAotCS5yZWFkCQk9IHBpcGVfcmVhZCwKLQkucmVhZHYJCT0gcGlwZV9yZWFkdiwKLQkud3JpdGUJCT0gcGlwZV93cml0ZSwKLQkud3JpdGV2CQk9IHBpcGVfd3JpdGV2LAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBwaXBlX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IHBpcGVfd3JpdGUsCiAJLnBvbGwJCT0gcGlwZV9wb2xsLAogCS5pb2N0bAkJPSBwaXBlX2lvY3RsLAogCS5vcGVuCQk9IHBpcGVfcmR3cl9vcGVuLApAQCAtODc5LDcgKzg2NCw2IEBACiAJaW5vZGUtPmlfdWlkID0gY3VycmVudC0+ZnN1aWQ7CiAJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7CiAJaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FOwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7CiAKIAlyZXR1cm4gaW5vZGU7CiAKQEAgLTg5MCw4NyArODc0LDExOCBAQAogCXJldHVybiBOVUxMOwogfQogCi1pbnQgZG9fcGlwZShpbnQgKmZkKQorc3RydWN0IGZpbGUgKmNyZWF0ZV93cml0ZV9waXBlKHZvaWQpCiB7Ci0Jc3RydWN0IHFzdHIgdGhpczsKLQljaGFyIG5hbWVbMzJdOworCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZTsKKwlzdHJ1Y3QgZmlsZSAqZjsKIAlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGlub2RlICogaW5vZGU7Ci0Jc3RydWN0IGZpbGUgKmYxLCAqZjI7Ci0JaW50IGVycm9yOwotCWludCBpLCBqOworCWNoYXIgbmFtZVszMl07CisJc3RydWN0IHFzdHIgdGhpczsKIAotCWVycm9yID0gLUVORklMRTsKLQlmMSA9IGdldF9lbXB0eV9maWxwKCk7Ci0JaWYgKCFmMSkKLQkJZ290byBub19maWxlczsKLQotCWYyID0gZ2V0X2VtcHR5X2ZpbHAoKTsKLQlpZiAoIWYyKQotCQlnb3RvIGNsb3NlX2YxOwotCisJZiA9IGdldF9lbXB0eV9maWxwKCk7CisJaWYgKCFmKQorCQlyZXR1cm4gRVJSX1BUUigtRU5GSUxFKTsKKwllcnIgPSAtRU5GSUxFOwogCWlub2RlID0gZ2V0X3BpcGVfaW5vZGUoKTsKIAlpZiAoIWlub2RlKQotCQlnb3RvIGNsb3NlX2YxMjsKKwkJZ290byBlcnJfZmlsZTsKIAotCWVycm9yID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gY2xvc2VfZjEyX2lub2RlOwotCWkgPSBlcnJvcjsKLQotCWVycm9yID0gZ2V0X3VudXNlZF9mZCgpOwotCWlmIChlcnJvciA8IDApCi0JCWdvdG8gY2xvc2VfZjEyX2lub2RlX2k7Ci0JaiA9IGVycm9yOwotCi0JZXJyb3IgPSAtRU5PTUVNOwogCXNwcmludGYobmFtZSwgIlslbHVdIiwgaW5vZGUtPmlfaW5vKTsKIAl0aGlzLm5hbWUgPSBuYW1lOwogCXRoaXMubGVuID0gc3RybGVuKG5hbWUpOwogCXRoaXMuaGFzaCA9IGlub2RlLT5pX2lubzsgLyogd2lsbCBnbyAqLworCWVyciA9IC1FTk9NRU07CiAJZGVudHJ5ID0gZF9hbGxvYyhwaXBlX21udC0+bW50X3NiLT5zX3Jvb3QsICZ0aGlzKTsKIAlpZiAoIWRlbnRyeSkKLQkJZ290byBjbG9zZV9mMTJfaW5vZGVfaV9qOworCQlnb3RvIGVycl9pbm9kZTsKIAogCWRlbnRyeS0+ZF9vcCA9ICZwaXBlZnNfZGVudHJ5X29wZXJhdGlvbnM7CiAJZF9hZGQoZGVudHJ5LCBpbm9kZSk7Ci0JZjEtPmZfdmZzbW50ID0gZjItPmZfdmZzbW50ID0gbW50Z2V0KG1udGdldChwaXBlX21udCkpOwotCWYxLT5mX2RlbnRyeSA9IGYyLT5mX2RlbnRyeSA9IGRnZXQoZGVudHJ5KTsKLQlmMS0+Zl9tYXBwaW5nID0gZjItPmZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CisJZi0+Zl92ZnNtbnQgPSBtbnRnZXQocGlwZV9tbnQpOworCWYtPmZfZGVudHJ5ID0gZGVudHJ5OworCWYtPmZfbWFwcGluZyA9IGlub2RlLT5pX21hcHBpbmc7CiAKLQkvKiByZWFkIGZpbGUgKi8KLQlmMS0+Zl9wb3MgPSBmMi0+Zl9wb3MgPSAwOwotCWYxLT5mX2ZsYWdzID0gT19SRE9OTFk7Ci0JZjEtPmZfb3AgPSAmcmVhZF9waXBlX2ZvcHM7Ci0JZjEtPmZfbW9kZSA9IEZNT0RFX1JFQUQ7Ci0JZjEtPmZfdmVyc2lvbiA9IDA7CisJZi0+Zl9mbGFncyA9IE9fV1JPTkxZOworCWYtPmZfb3AgPSAmd3JpdGVfcGlwZV9mb3BzOworCWYtPmZfbW9kZSA9IEZNT0RFX1dSSVRFOworCWYtPmZfdmVyc2lvbiA9IDA7CiAKLQkvKiB3cml0ZSBmaWxlICovCi0JZjItPmZfZmxhZ3MgPSBPX1dST05MWTsKLQlmMi0+Zl9vcCA9ICZ3cml0ZV9waXBlX2ZvcHM7Ci0JZjItPmZfbW9kZSA9IEZNT0RFX1dSSVRFOwotCWYyLT5mX3ZlcnNpb24gPSAwOworCXJldHVybiBmOwogCi0JZmRfaW5zdGFsbChpLCBmMSk7Ci0JZmRfaW5zdGFsbChqLCBmMik7Ci0JZmRbMF0gPSBpOwotCWZkWzFdID0gajsKKyBlcnJfaW5vZGU6CisJZnJlZV9waXBlX2luZm8oaW5vZGUpOworCWlwdXQoaW5vZGUpOworIGVycl9maWxlOgorCXB1dF9maWxwKGYpOworCXJldHVybiBFUlJfUFRSKGVycik7Cit9CisKK3ZvaWQgZnJlZV93cml0ZV9waXBlKHN0cnVjdCBmaWxlICpmKQoreworCW1udHB1dChmLT5mX3Zmc21udCk7CisJZHB1dChmLT5mX2RlbnRyeSk7CisJcHV0X2ZpbHAoZik7Cit9CisKK3N0cnVjdCBmaWxlICpjcmVhdGVfcmVhZF9waXBlKHN0cnVjdCBmaWxlICp3cmYpCit7CisJc3RydWN0IGZpbGUgKmYgPSBnZXRfZW1wdHlfZmlscCgpOworCWlmICghZikKKwkJcmV0dXJuIEVSUl9QVFIoLUVORklMRSk7CisKKwkvKiBHcmFiIHBpcGUgZnJvbSB0aGUgd3JpdGVyICovCisJZi0+Zl92ZnNtbnQgPSBtbnRnZXQod3JmLT5mX3Zmc21udCk7CisJZi0+Zl9kZW50cnkgPSBkZ2V0KHdyZi0+Zl9kZW50cnkpOworCWYtPmZfbWFwcGluZyA9IHdyZi0+Zl9kZW50cnktPmRfaW5vZGUtPmlfbWFwcGluZzsKKworCWYtPmZfcG9zID0gMDsKKwlmLT5mX2ZsYWdzID0gT19SRE9OTFk7CisJZi0+Zl9vcCA9ICZyZWFkX3BpcGVfZm9wczsKKwlmLT5mX21vZGUgPSBGTU9ERV9SRUFEOworCWYtPmZfdmVyc2lvbiA9IDA7CisKKwlyZXR1cm4gZjsKK30KKworaW50IGRvX3BpcGUoaW50ICpmZCkKK3sKKwlzdHJ1Y3QgZmlsZSAqZncsICpmcjsKKwlpbnQgZXJyb3I7CisJaW50IGZkdywgZmRyOworCisJZncgPSBjcmVhdGVfd3JpdGVfcGlwZSgpOworCWlmIChJU19FUlIoZncpKQorCQlyZXR1cm4gUFRSX0VSUihmdyk7CisJZnIgPSBjcmVhdGVfcmVhZF9waXBlKGZ3KTsKKwllcnJvciA9IFBUUl9FUlIoZnIpOworCWlmIChJU19FUlIoZnIpKQorCQlnb3RvIGVycl93cml0ZV9waXBlOworCisJZXJyb3IgPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBlcnJfcmVhZF9waXBlOworCWZkciA9IGVycm9yOworCisJZXJyb3IgPSBnZXRfdW51c2VkX2ZkKCk7CisJaWYgKGVycm9yIDwgMCkKKwkJZ290byBlcnJfZmRyOworCWZkdyA9IGVycm9yOworCisJZmRfaW5zdGFsbChmZHIsIGZyKTsKKwlmZF9pbnN0YWxsKGZkdywgZncpOworCWZkWzBdID0gZmRyOworCWZkWzFdID0gZmR3OwogCiAJcmV0dXJuIDA7CiAKLWNsb3NlX2YxMl9pbm9kZV9pX2o6Ci0JcHV0X3VudXNlZF9mZChqKTsKLWNsb3NlX2YxMl9pbm9kZV9pOgotCXB1dF91bnVzZWRfZmQoaSk7Ci1jbG9zZV9mMTJfaW5vZGU6Ci0JZnJlZV9waXBlX2luZm8oaW5vZGUpOwotCWlwdXQoaW5vZGUpOwotY2xvc2VfZjEyOgotCXB1dF9maWxwKGYyKTsKLWNsb3NlX2YxOgotCXB1dF9maWxwKGYxKTsKLW5vX2ZpbGVzOgotCXJldHVybiBlcnJvcjsJCisgZXJyX2ZkcjoKKwlwdXRfdW51c2VkX2ZkKGZkcik7CisgZXJyX3JlYWRfcGlwZToKKwlwdXRfZmlscChmcik7CisgZXJyX3dyaXRlX3BpcGU6CisJZnJlZV93cml0ZV9waXBlKGZ3KTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9mcy9wb3NpeF9hY2wuYyBiL2ZzL3Bvc2l4X2FjbC5jCmluZGV4IDZjOGRjZjcuLmFlYzkzMWUgMTAwNjQ0Ci0tLSBhL2ZzL3Bvc2l4X2FjbC5jCisrKyBiL2ZzL3Bvc2l4X2FjbC5jCkBAIC01OCwxMSArNTgsOSBAQAogCWlmIChhY2wpIHsKIAkJaW50IHNpemUgPSBzaXplb2Yoc3RydWN0IHBvc2l4X2FjbCkgKyBhY2wtPmFfY291bnQgKgogCQkgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5KTsKLQkJY2xvbmUgPSBrbWFsbG9jKHNpemUsIGZsYWdzKTsKLQkJaWYgKGNsb25lKSB7Ci0JCQltZW1jcHkoY2xvbmUsIGFjbCwgc2l6ZSk7CisJCWNsb25lID0ga21lbWR1cChhY2wsIHNpemUsIGZsYWdzKTsKKwkJaWYgKGNsb25lKQogCQkJYXRvbWljX3NldCgmY2xvbmUtPmFfcmVmY291bnQsIDEpOwotCQl9CiAJfQogCXJldHVybiBjbG9uZTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuYwppbmRleCAwYjYxNWQ2Li5jMGU1NTQ5IDEwMDY0NAotLS0gYS9mcy9wcm9jL2FycmF5LmMKKysrIGIvZnMvcHJvYy9hcnJheS5jCkBAIC0zNDcsNiArMzQ3LDggQEAKIAlzaWdlbXB0eXNldCgmc2lnaWduKTsKIAlzaWdlbXB0eXNldCgmc2lnY2F0Y2gpOwogCWN1dGltZSA9IGNzdGltZSA9IHV0aW1lID0gc3RpbWUgPSBjcHV0aW1lX3plcm87CisKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CiAJaWYgKHRhc2stPnNpZ2hhbmQpIHsKIAkJc3Bpbl9sb2NrX2lycSgmdGFzay0+c2lnaGFuZC0+c2lnbG9jayk7CkBAIC0zODgsNiArMzkwLDcgQEAKIAl9CiAJcHBpZCA9IHBpZF9hbGl2ZSh0YXNrKSA/IHRhc2stPmdyb3VwX2xlYWRlci0+cmVhbF9wYXJlbnQtPnRnaWQgOiAwOwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnR0eV9tdXRleCk7CiAKIAlpZiAoIXdob2xlIHx8IG51bV90aHJlYWRzPDIpCiAJCXdjaGFuID0gZ2V0X3djaGFuKHRhc2spOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9iYXNlLmMgYi9mcy9wcm9jL2Jhc2UuYwppbmRleCBmZThkNTVmLi44OWMyMGQ5IDEwMDY0NAotLS0gYS9mcy9wcm9jL2Jhc2UuYworKysgYi9mcy9wcm9jL2Jhc2UuYwpAQCAtNzk3LDcgKzc5Nyw3IEBACiBzdGF0aWMgc3NpemVfdCBtZW1fd3JpdGUoc3RydWN0IGZpbGUgKiBmaWxlLCBjb25zdCBjaGFyICogYnVmLAogCQkJIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQogewotCWludCBjb3BpZWQgPSAwOworCWludCBjb3BpZWQ7CiAJY2hhciAqcGFnZTsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2sgPSBnZXRfcHJvY190YXNrKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAl1bnNpZ25lZCBsb25nIGRzdCA9ICpwcG9zOwpAQCAtODE0LDYgKzgxNCw3IEBACiAJaWYgKCFwYWdlKQogCQlnb3RvIG91dDsKIAorCWNvcGllZCA9IDA7CiAJd2hpbGUgKGNvdW50ID4gMCkgewogCQlpbnQgdGhpc19sZW4sIHJldHZhbDsKIApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IDE0NmE0MzQuLjk4N2M3NzMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTI4LDYgKzI4LDcgQEAKIAkodm1pKS0+bGFyZ2VzdF9jaHVuayA9IDA7CQlcCiB9IHdoaWxlKDApCiAKK2V4dGVybiBpbnQgbm9tbXVfdm1hX3Nob3coc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICNlbmRpZgogCiBleHRlcm4gdm9pZCBjcmVhdGVfc2VxX2VudHJ5KGNoYXIgKm5hbWUsIG1vZGVfdCBtb2RlLCBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmKTsKZGlmZiAtLWdpdCBhL2ZzL3Byb2Mva2NvcmUuYyBiL2ZzL3Byb2Mva2NvcmUuYwppbmRleCA2YTk4NGY2Li4xMjk0ZWRhIDEwMDY0NAotLS0gYS9mcy9wcm9jL2tjb3JlLmMKKysrIGIvZnMvcHJvYy9rY29yZS5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlpbnQgc3o7CiAKIAlzeiA9IHNpemVvZihzdHJ1Y3QgZWxmX25vdGUpOwotCXN6ICs9IHJvdW5kdXAoc3RybGVuKGVuLT5uYW1lKSwgNCk7CisJc3ogKz0gcm91bmR1cCgoc3RybGVuKGVuLT5uYW1lKSArIDEpLCA0KTsKIAlzeiArPSByb3VuZHVwKGVuLT5kYXRhc3osIDQpOwogCiAJcmV0dXJuIHN6OwpAQCAtMTE2LDcgKzExNiw3IEBACiAKICNkZWZpbmUgRFVNUF9XUklURShhZGRyLG5yKSBkbyB7IG1lbWNweShidWZwLGFkZHIsbnIpOyBidWZwICs9IG5yOyB9IHdoaWxlKDApCiAKLQllbi5uX25hbWVzeiA9IHN0cmxlbihtZW4tPm5hbWUpOworCWVuLm5fbmFtZXN6ID0gc3RybGVuKG1lbi0+bmFtZSkgKyAxOwogCWVuLm5fZGVzY3N6ID0gbWVuLT5kYXRhc3o7CiAJZW4ubl90eXBlID0gbWVuLT50eXBlOwogCkBAIC0yNzksMTIgKzI3OSwxMSBAQAogCQl0c3ogPSBlbGZfYnVmbGVuIC0gKmZwb3M7CiAJCWlmIChidWZsZW4gPCB0c3opCiAJCQl0c3ogPSBidWZsZW47Ci0JCWVsZl9idWYgPSBrbWFsbG9jKGVsZl9idWZsZW4sIEdGUF9BVE9NSUMpOworCQllbGZfYnVmID0ga3phbGxvYyhlbGZfYnVmbGVuLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCFlbGZfYnVmKSB7CiAJCQlyZWFkX3VubG9jaygma2NsaXN0X2xvY2spOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KLQkJbWVtc2V0KGVsZl9idWYsIDAsIGVsZl9idWZsZW4pOwogCQllbGZfa2NvcmVfc3RvcmVfaGRyKGVsZl9idWYsIG5waGRyLCBlbGZfYnVmbGVuKTsKIAkJcmVhZF91bmxvY2soJmtjbGlzdF9sb2NrKTsKIAkJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGVsZl9idWYgKyAqZnBvcywgdHN6KSkgewpAQCAtMzMwLDEwICszMjksOSBAQAogCQkJdW5zaWduZWQgbG9uZyBjdXJzdGFydCA9IHN0YXJ0OwogCQkJdW5zaWduZWQgbG9uZyBjdXJzaXplID0gdHN6OwogCi0JCQllbGZfYnVmID0ga21hbGxvYyh0c3osIEdGUF9LRVJORUwpOworCQkJZWxmX2J1ZiA9IGt6YWxsb2ModHN6LCBHRlBfS0VSTkVMKTsKIAkJCWlmICghZWxmX2J1ZikKIAkJCQlyZXR1cm4gLUVOT01FTTsKLQkJCW1lbXNldChlbGZfYnVmLCAwLCB0c3opOwogCiAJCQlyZWFkX2xvY2soJnZtbGlzdF9sb2NrKTsKIAkJCWZvciAobT12bWxpc3Q7IG0gJiYgY3Vyc2l6ZTsgbT1tLT5uZXh0KSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL25vbW11LmMgYi9mcy9wcm9jL25vbW11LmMKaW5kZXggY2ZmMTBhYi4uZDdkYmRmOSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9ub21tdS5jCisrKyBiL2ZzL3Byb2Mvbm9tbXUuYwpAQCAtMzMsMTkgKzMzLDE1IEBACiAjaW5jbHVkZSAiaW50ZXJuYWwuaCIKIAogLyoKLSAqIGRpc3BsYXkgYSBsaXN0IG9mIGFsbCB0aGUgVk1BcyB0aGUga2VybmVsIGtub3dzIGFib3V0Ci0gKiAtIG5vbW11IGtlcm5hbHMgaGF2ZSBhIHNpbmdsZSBmbGF0IGxpc3QKKyAqIGRpc3BsYXkgYSBzaW5nbGUgVk1BIHRvIGEgc2VxdWVuY2VkIGZpbGUKICAqLwotc3RhdGljIGludCBub21tdV92bWFfbGlzdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK2ludCBub21tdV92bWFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewotCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwogCXVuc2lnbmVkIGxvbmcgaW5vID0gMDsKIAlzdHJ1Y3QgZmlsZSAqZmlsZTsKIAlkZXZfdCBkZXYgPSAwOwogCWludCBmbGFncywgbGVuOwogCi0Jdm1hID0gcmJfZW50cnkoKHN0cnVjdCByYl9ub2RlICopIHYsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCwgdm1fcmIpOwotCiAJZmxhZ3MgPSB2bWEtPnZtX2ZsYWdzOwogCWZpbGUgPSB2bWEtPnZtX2ZpbGU7CiAKQEAgLTc4LDYgKzc0LDE4IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBkaXNwbGF5IGEgbGlzdCBvZiBhbGwgdGhlIFZNQXMgdGhlIGtlcm5lbCBrbm93cyBhYm91dAorICogLSBub21tdSBrZXJuYWxzIGhhdmUgYSBzaW5nbGUgZmxhdCBsaXN0CisgKi8KK3N0YXRpYyBpbnQgbm9tbXVfdm1hX2xpc3Rfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CisKKwl2bWEgPSByYl9lbnRyeSgoc3RydWN0IHJiX25vZGUgKikgdiwgc3RydWN0IHZtX2FyZWFfc3RydWN0LCB2bV9yYik7CisJcmV0dXJuIG5vbW11X3ZtYV9zaG93KG0sIHZtYSk7Cit9CisKIHN0YXRpYyB2b2lkICpub21tdV92bWFfbGlzdF9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqX3BvcykKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqX3JiOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX21pc2MuYyBiL2ZzL3Byb2MvcHJvY19taXNjLmMKaW5kZXggNWJiZDYwOC4uNjZiYzQyNSAxMDA2NDQKLS0tIGEvZnMvcHJvYy9wcm9jX21pc2MuYworKysgYi9mcy9wcm9jL3Byb2NfbWlzYy5jCkBAIC0yNzcsMTIgKzI3NywxNSBAQAogCQlpZiAoaSA9PSAwKQogCQkJc2VxX3ByaW50ZihmLCAiQ2hhcmFjdGVyIGRldmljZXM6XG4iKTsKIAkJY2hyZGV2X3Nob3coZiwgaSk7Ci0JfSBlbHNlIHsKKwl9CisjaWZkZWYgQ09ORklHX0JMT0NLCisJZWxzZSB7CiAJCWkgLT0gQ0hSREVWX01BSk9SX0hBU0hfU0laRTsKIAkJaWYgKGkgPT0gMCkKIAkJCXNlcV9wcmludGYoZiwgIlxuQmxvY2sgZGV2aWNlczpcbiIpOwogCQlibGtkZXZfc2hvdyhmLCBpKTsKIAl9CisjZW5kaWYKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzU1LDYgKzM1OCw3IEBACiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CTE9DSwogZXh0ZXJuIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwYXJ0aXRpb25zX29wOwogc3RhdGljIGludCBwYXJ0aXRpb25zX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CkBAIC0zNzgsNiArMzgyLDcgQEAKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKIAkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAogfTsKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX01PRFVMRVMKIGV4dGVybiBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgbW9kdWxlc19vcDsKQEAgLTY5NSw3ICs3MDAsOSBAQAogCQllbnRyeS0+cHJvY19mb3BzID0gJnByb2Nfa21zZ19vcGVyYXRpb25zOwogCWNyZWF0ZV9zZXFfZW50cnkoImRldmljZXMiLCAwLCAmcHJvY19kZXZpbmZvX29wZXJhdGlvbnMpOwogCWNyZWF0ZV9zZXFfZW50cnkoImNwdWluZm8iLCAwLCAmcHJvY19jcHVpbmZvX29wZXJhdGlvbnMpOworI2lmZGVmIENPTkZJR19CTE9DSwogCWNyZWF0ZV9zZXFfZW50cnkoInBhcnRpdGlvbnMiLCAwLCAmcHJvY19wYXJ0aXRpb25zX29wZXJhdGlvbnMpOworI2VuZGlmCiAJY3JlYXRlX3NlcV9lbnRyeSgic3RhdCIsIDAsICZwcm9jX3N0YXRfb3BlcmF0aW9ucyk7CiAJY3JlYXRlX3NlcV9lbnRyeSgiaW50ZXJydXB0cyIsIDAsICZwcm9jX2ludGVycnVwdHNfb3BlcmF0aW9ucyk7CiAjaWZkZWYgQ09ORklHX1NMQUIKQEAgLTcwNyw3ICs3MTQsOSBAQAogCWNyZWF0ZV9zZXFfZW50cnkoImJ1ZGR5aW5mbyIsU19JUlVHTywgJmZyYWdtZW50YXRpb25fZmlsZV9vcGVyYXRpb25zKTsKIAljcmVhdGVfc2VxX2VudHJ5KCJ2bXN0YXQiLFNfSVJVR08sICZwcm9jX3Ztc3RhdF9maWxlX29wZXJhdGlvbnMpOwogCWNyZWF0ZV9zZXFfZW50cnkoInpvbmVpbmZvIixTX0lSVUdPLCAmcHJvY196b25laW5mb19maWxlX29wZXJhdGlvbnMpOworI2lmZGVmIENPTkZJR19CTE9DSwogCWNyZWF0ZV9zZXFfZW50cnkoImRpc2tzdGF0cyIsIDAsICZwcm9jX2Rpc2tzdGF0c19vcGVyYXRpb25zKTsKKyNlbmRpZgogI2lmZGVmIENPTkZJR19NT0RVTEVTCiAJY3JlYXRlX3NlcV9lbnRyeSgibW9kdWxlcyIsIDAsICZwcm9jX21vZHVsZXNfb3BlcmF0aW9ucyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCAwYTE2M2E0Li42Yjc2OWFmIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC0xMjIsMTEgKzEyMiw2IEBACiAJdW5zaWduZWQgbG9uZyBwcml2YXRlX2RpcnR5OwogfTsKIAotX19hdHRyaWJ1dGVfXygod2VhaykpIGNvbnN0IGNoYXIgKmFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCi17Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KIHN0YXRpYyBpbnQgc2hvd19tYXBfaW50ZXJuYWwoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcykKIHsKIAlzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLT5wcml2YXRlOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX25vbW11LmMgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwppbmRleCA0NjE2ZWQ1Li4wOTFhYThlIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbm9tbXUuYworKysgYi9mcy9wcm9jL3Rhc2tfbm9tbXUuYwpAQCAtMTM4LDI1ICsxMzgsNjMgQEAKIH0KIAogLyoKLSAqIEFsYmVydCBELiBDYWhhbGFuIHN1Z2dlc3RlZCB0byBmYWtlIGVudHJpZXMgZm9yIHRoZSB0cmFkaXRpb25hbAotICogc2VjdGlvbnMgaGVyZS4gIFRoaXMgbWlnaHQgYmUgd29ydGggaW52ZXN0aWdhdGluZy4KKyAqIGRpc3BsYXkgbWFwcGluZyBsaW5lcyBmb3IgYSBwYXJ0aWN1bGFyIHByb2Nlc3MncyAvcHJvYy9waWQvbWFwcwogICovCi1zdGF0aWMgaW50IHNob3dfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKK3N0YXRpYyBpbnQgc2hvd19tYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICpfdm1sKQogewotCXJldHVybiAwOworCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sID0gX3ZtbDsKKwlyZXR1cm4gbm9tbXVfdm1hX3Nob3cobSwgdm1sLT52bWEpOwogfQorCiBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKQogeworCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tPnByaXZhdGU7CisJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp2bWw7CisJc3RydWN0IG1tX3N0cnVjdCAqbW07CisJbG9mZl90IG4gPSAqcG9zOworCisJLyogcGluIHRoZSB0YXNrIGFuZCBtbSB3aGlsc3Qgd2UgcGxheSB3aXRoIHRoZW0gKi8KKwlwcml2LT50YXNrID0gZ2V0X3BpZF90YXNrKHByaXYtPnBpZCwgUElEVFlQRV9QSUQpOworCWlmICghcHJpdi0+dGFzaykKKwkJcmV0dXJuIE5VTEw7CisKKwltbSA9IGdldF90YXNrX21tKHByaXYtPnRhc2spOworCWlmICghbW0pIHsKKwkJcHV0X3Rhc2tfc3RydWN0KHByaXYtPnRhc2spOworCQlwcml2LT50YXNrID0gTlVMTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJZG93bl9yZWFkKCZtbS0+bW1hcF9zZW0pOworCisJLyogc3RhcnQgZnJvbSB0aGUgTnRoIFZNQSAqLworCWZvciAodm1sID0gbW0tPmNvbnRleHQudm1saXN0OyB2bWw7IHZtbCA9IHZtbC0+bmV4dCkKKwkJaWYgKG4tLSA9PSAwKQorCQkJcmV0dXJuIHZtbDsKIAlyZXR1cm4gTlVMTDsKIH0KLXN0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCisKK3N0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl92bWwpCiB7CisJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0+cHJpdmF0ZTsKKworCWlmIChwcml2LT50YXNrKSB7CisJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi0+dGFzay0+bW07CisJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJCW1tcHV0KG1tKTsKKwkJcHV0X3Rhc2tfc3RydWN0KHByaXYtPnRhc2spOworCX0KIH0KLXN0YXRpYyB2b2lkICptX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBvcykKKworc3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl92bWwsIGxvZmZfdCAqcG9zKQogewotCXJldHVybiBOVUxMOworCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sID0gX3ZtbDsKKworCSgqcG9zKSsrOworCXJldHVybiB2bWwgPyB2bWwtPm5leHQgOiBOVUxMOwogfQotc3RhdGljIHN0cnVjdCBzZXFfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wID0geworCitzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIHByb2NfcGlkX21hcHNfb3BzID0gewogCS5zdGFydAk9IG1fc3RhcnQsCiAJLm5leHQJPSBtX25leHQsCiAJLnN0b3AJPSBtX3N0b3AsCkBAIC0xNjUsMTEgKzIwMywxOSBAQAogCiBzdGF0aWMgaW50IG1hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlpbnQgcmV0OwotCXJldCA9IHNlcV9vcGVuKGZpbGUsICZwcm9jX3BpZF9tYXBzX29wKTsKLQlpZiAoIXJldCkgewotCQlzdHJ1Y3Qgc2VxX2ZpbGUgKm0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JCW0tPnByaXZhdGUgPSBOVUxMOworCXN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdjsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKworCXByaXYgPSBremFsbG9jKHNpemVvZigqcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2KSB7CisJCXByaXYtPnBpZCA9IHByb2NfcGlkKGlub2RlKTsKKwkJcmV0ID0gc2VxX29wZW4oZmlsZSwgJnByb2NfcGlkX21hcHNfb3BzKTsKKwkJaWYgKCFyZXQpIHsKKwkJCXN0cnVjdCBzZXFfZmlsZSAqbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJCW0tPnByaXZhdGUgPSBwcml2OworCQl9IGVsc2UgeworCQkJa2ZyZWUocHJpdik7CisJCX0KIAl9CiAJcmV0dXJuIHJldDsKIH0KQEAgLTE3OCw2ICsyMjQsNiBAQAogCS5vcGVuCQk9IG1hcHNfb3BlbiwKIAkucmVhZAkJPSBzZXFfcmVhZCwKIAkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorCS5yZWxlYXNlCT0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKZGlmZiAtLWdpdCBhL2ZzL3FueDQvZmlsZS5jIGIvZnMvcW54NC9maWxlLmMKaW5kZXggNjJhZjRiMS4uNDY3ZTVhYyAxMDA2NDQKLS0tIGEvZnMvcW54NC9maWxlLmMKKysrIGIvZnMvcW54NC9maWxlLmMKQEAgLTIyLDExICsyMiwxMyBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBxbng0X2ZpbGVfb3BlcmF0aW9ucyA9CiB7CiAJLmxsc2VlawkJPSBnZW5lcmljX2ZpbGVfbGxzZWVrLAotCS5yZWFkCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAorCS5yZWFkCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQsCiAJLm1tYXAJCT0gZ2VuZXJpY19maWxlX21tYXAsCiAJLnNlbmRmaWxlCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAogI2lmZGVmIENPTkZJR19RTlg0RlNfUlcKLQkud3JpdGUJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5mc3luYwkJPSBxbng0X3N5bmNfZmlsZSwKICNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2ZzL3FueDQvaW5vZGUuYyBiL2ZzL3FueDQvaW5vZGUuYwppbmRleCA1YTkwMzQ5Li41YTQxZGIyIDEwMDY0NAotLS0gYS9mcy9xbng0L2lub2RlLmMKKysrIGIvZnMvcW54NC9pbm9kZS5jCkBAIC0zNTgsMTEgKzM1OCwxMCBAQAogCWNvbnN0IGNoYXIgKmVycm1zZzsKIAlzdHJ1Y3QgcW54NF9zYl9pbmZvICpxczsKIAotCXFzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHFueDRfc2JfaW5mbyksIEdGUF9LRVJORUwpOworCXFzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHFueDRfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghcXMpCiAJCXJldHVybiAtRU5PTUVNOwogCXMtPnNfZnNfaW5mbyA9IHFzOwotCW1lbXNldChxcywgMCwgc2l6ZW9mKHN0cnVjdCBxbng0X3NiX2luZm8pKTsKIAogCXNiX3NldF9ibG9ja3NpemUocywgUU5YNF9CTE9DS19TSVpFKTsKIApAQCAtNDk3LDcgKzQ5Niw2IEBACiAJaW5vZGUtPmlfY3RpbWUudHZfc2VjICAgPSBsZTMyX3RvX2NwdShyYXdfaW5vZGUtPmRpX2N0aW1lKTsKIAlpbm9kZS0+aV9jdGltZS50dl9uc2VjID0gMDsKIAlpbm9kZS0+aV9ibG9ja3MgID0gbGUzMl90b19jcHUocmF3X2lub2RlLT5kaV9maXJzdF94dG50Lnh0bnRfc2l6ZSk7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFFOWDRfRElSX0VOVFJZX1NJWkU7CiAKIAltZW1jcHkocW54NF9pbm9kZSwgcmF3X2lub2RlLCBRTlg0X0RJUl9FTlRSWV9TSVpFKTsKIAlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSkgewpAQCAtNTU3LDkgKzU1NSw3IEBACiAKIHN0YXRpYyB2b2lkIGRlc3Ryb3lfaW5vZGVjYWNoZSh2b2lkKQogewotCWlmIChrbWVtX2NhY2hlX2Rlc3Ryb3kocW54NF9pbm9kZV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPCi0JCSAgICAgICAicW54NF9pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShxbng0X2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQgcW54NF9nZXRfc2Ioc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmZzX3R5cGUsCmRpZmYgLS1naXQgYS9mcy9xbng0L25hbWVpLmMgYi9mcy9xbng0L25hbWVpLmMKaW5kZXggYzNkODNmNi4uNzMzY2RmMCAxMDA2NDQKLS0tIGEvZnMvcW54NC9uYW1laS5jCisrKyBiL2ZzL3FueDQvbmFtZWkuYwpAQCAtMTg2LDExICsxODYsMTAgQEAKIAltZW1zZXQoZGUtPmRpX2ZuYW1lLCAwLCBzaXplb2YgZGUtPmRpX2ZuYW1lKTsKIAlkZS0+ZGlfbW9kZSA9IDA7CiAJbWFya19idWZmZXJfZGlydHkoYmgpOwotCWlub2RlLT5pX25saW5rID0gMDsKKwljbGVhcl9ubGluayhpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWRpci0+aV9ubGluay0tOwotCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChkaXIpOwogCXJldHZhbCA9IDA7CiAKICAgICAgIGVuZF9ybWRpcjoKQEAgLTIzNCw5ICsyMzMsOCBAQAogCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKIAlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKLQlpbm9kZS0+aV9ubGluay0tOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lOwotCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAlyZXR2YWwgPSAwOwogCiBlbmRfdW5saW5rOgpkaWZmIC0tZ2l0IGEvZnMvcXVvdGEuYyBiL2ZzL3F1b3RhLmMKaW5kZXggZDZhMmJlOC4uYjlkYWU3NiAxMDA2NDQKLS0tIGEvZnMvcXVvdGEuYworKysgYi9mcy9xdW90YS5jCkBAIC0zMzgsNiArMzM4LDM0IEBACiB9CiAKIC8qCisgKiBsb29rIHVwIGEgc3VwZXJibG9jayBvbiB3aGljaCBxdW90YSBvcHMgd2lsbCBiZSBwZXJmb3JtZWQKKyAqIC0gdXNlIHRoZSBuYW1lIG9mIGEgYmxvY2sgZGV2aWNlIHRvIGZpbmQgdGhlIHN1cGVyYmxvY2sgdGhlcmVvbgorICovCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzdXBlcl9ibG9jayAqcXVvdGFjdGxfYmxvY2soY29uc3QgY2hhciBfX3VzZXIgKnNwZWNpYWwpCit7CisjaWZkZWYgQ09ORklHX0JMT0NLCisJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOworCWNoYXIgKnRtcCA9IGdldG5hbWUoc3BlY2lhbCk7CisKKwlpZiAoSVNfRVJSKHRtcCkpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIodG1wKSk7CisJYmRldiA9IGxvb2t1cF9iZGV2KHRtcCk7CisJcHV0bmFtZSh0bXApOworCWlmIChJU19FUlIoYmRldikpCisJCXJldHVybiBFUlJfUFRSKFBUUl9FUlIoYmRldikpOworCXNiID0gZ2V0X3N1cGVyKGJkZXYpOworCWJkcHV0KGJkZXYpOworCWlmICghc2IpCisJCXJldHVybiBFUlJfUFRSKC1FTk9ERVYpOworCisJcmV0dXJuIHNiOworI2Vsc2UKKwlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKKyNlbmRpZgorfQorCisvKgogICogVGhpcyBpcyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlLiBUaGlzIGNvbW11bmljYXRlcyB3aXRoCiAgKiB0aGUgdXNlci1sZXZlbCBwcm9ncmFtcy4gQ3VycmVudGx5IHRoaXMgb25seSBzdXBwb3J0cyBkaXNrcXVvdGEKICAqIGNhbGxzLiBNYXliZSB3ZSBuZWVkIHRvIGFkZCB0aGUgcHJvY2VzcyBxdW90YXMgZXRjLiBpbiB0aGUgZnV0dXJlLApAQCAtMzQ3LDI1ICszNzUsMTUgQEAKIHsKIAl1aW50IGNtZHMsIHR5cGU7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKLQljaGFyICp0bXA7CiAJaW50IHJldDsKIAogCWNtZHMgPSBjbWQgPj4gU1VCQ01EU0hJRlQ7CiAJdHlwZSA9IGNtZCAmIFNVQkNNRE1BU0s7CiAKIAlpZiAoY21kcyAhPSBRX1NZTkMgfHwgc3BlY2lhbCkgewotCQl0bXAgPSBnZXRuYW1lKHNwZWNpYWwpOwotCQlpZiAoSVNfRVJSKHRtcCkpCi0JCQlyZXR1cm4gUFRSX0VSUih0bXApOwotCQliZGV2ID0gbG9va3VwX2JkZXYodG1wKTsKLQkJcHV0bmFtZSh0bXApOwotCQlpZiAoSVNfRVJSKGJkZXYpKQotCQkJcmV0dXJuIFBUUl9FUlIoYmRldik7Ci0JCXNiID0gZ2V0X3N1cGVyKGJkZXYpOwotCQliZHB1dChiZGV2KTsKLQkJaWYgKCFzYikKLQkJCXJldHVybiAtRU5PREVWOworCQlzYiA9IHF1b3RhY3RsX2Jsb2NrKHNwZWNpYWwpOworCQlpZiAoSVNfRVJSKHNiKSkKKwkJCXJldHVybiBQVFJfRVJSKHNiKTsKIAl9CiAKIAlyZXQgPSBjaGVja19xdW90YWN0bF92YWxpZChzYiwgdHlwZSwgY21kcywgaWQpOwpkaWZmIC0tZ2l0IGEvZnMvcmFtZnMvZmlsZS1tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbW11LmMKaW5kZXggODZmMTRjYS4uMDk0N2ZiNSAxMDA2NDQKLS0tIGEvZnMvcmFtZnMvZmlsZS1tbXUuYworKysgYi9mcy9yYW1mcy9maWxlLW1tdS5jCkBAIC0zMyw4ICszMywxMCBAQAogfTsKIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnMgPSB7Ci0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5mc3luYwkJPSBzaW1wbGVfc3luY19maWxlLAogCS5zZW5kZmlsZQk9IGdlbmVyaWNfZmlsZV9zZW5kZmlsZSwKZGlmZiAtLWdpdCBhL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYyBiL2ZzL3JhbWZzL2ZpbGUtbm9tbXUuYwppbmRleCA2NzcxMzliLi5iZmU1ZGJmIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9maWxlLW5vbW11LmMKKysrIGIvZnMvcmFtZnMvZmlsZS1ub21tdS5jCkBAIC0zNiw4ICszNiwxMCBAQAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByYW1mc19maWxlX29wZXJhdGlvbnMgPSB7CiAJLm1tYXAJCQk9IHJhbWZzX25vbW11X21tYXAsCiAJLmdldF91bm1hcHBlZF9hcmVhCT0gcmFtZnNfbm9tbXVfZ2V0X3VubWFwcGVkX2FyZWEsCi0JLnJlYWQJCQk9IGdlbmVyaWNfZmlsZV9yZWFkLAotCS53cml0ZQkJCT0gZ2VuZXJpY19maWxlX3dyaXRlLAorCS5yZWFkCQkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCQk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKKwkud3JpdGUJCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQkJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5mc3luYwkJCT0gc2ltcGxlX3N5bmNfZmlsZSwKIAkuc2VuZGZpbGUJCT0gZ2VuZXJpY19maWxlX3NlbmRmaWxlLAogCS5sbHNlZWsJCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCmRpZmYgLS1naXQgYS9mcy9yYW1mcy9pbm9kZS5jIGIvZnMvcmFtZnMvaW5vZGUuYwppbmRleCBiOTY3NzMzLi4yZmFmNGNkIDEwMDY0NAotLS0gYS9mcy9yYW1mcy9pbm9kZS5jCisrKyBiL2ZzL3JhbWZzL2lub2RlLmMKQEAgLTU4LDcgKzU4LDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwogCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKLQkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmcmFtZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZyYW1mc19iYWNraW5nX2Rldl9pbmZvOwpAQCAtNzYsNyArNzUsNyBAQAogCQkJaW5vZGUtPmlfZm9wID0gJnNpbXBsZV9kaXJfb3BlcmF0aW9uczsKIAogCQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JCQlpbm9kZS0+aV9ubGluaysrOworCQkJaW5jX25saW5rKGlub2RlKTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZMTks6CiAJCQlpbm9kZS0+aV9vcCA9ICZwYWdlX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTExNCw3ICsxMTMsNyBAQAogewogCWludCByZXR2YWwgPSByYW1mc19ta25vZChkaXIsIGRlbnRyeSwgbW9kZSB8IFNfSUZESVIsIDApOwogCWlmICghcmV0dmFsKQotCQlkaXItPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKGRpcik7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvcmVhZF93cml0ZS5jIGIvZnMvcmVhZF93cml0ZS5jCmluZGV4IGQ0Y2IzMTguLmY3OTIwMDAgMTAwNjQ0Ci0tLSBhL2ZzL3JlYWRfd3JpdGUuYworKysgYi9mcy9yZWFkX3dyaXRlLmMKQEAgLTE1LDEzICsxNSwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgInJlYWRfd3JpdGUuaCIKIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgogCiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdlbmVyaWNfcm9fZm9wcyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJCT0gZG9fc3luY19yZWFkLAorCS5haW9fcmVhZAk9IGdlbmVyaWNfZmlsZV9haW9fcmVhZCwKIAkubW1hcAkJPSBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcCwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCiB9OwpAQCAtMjI3LDE0ICsyMjksMjAgQEAKIAogc3NpemVfdCBkb19zeW5jX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcykKIHsKKwlzdHJ1Y3QgaW92ZWMgaW92ID0geyAuaW92X2Jhc2UgPSBidWYsIC5pb3ZfbGVuID0gbGVuIH07CiAJc3RydWN0IGtpb2NiIGtpb2NiOwogCXNzaXplX3QgcmV0OwogCiAJaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlscCk7CiAJa2lvY2Iua2lfcG9zID0gKnBwb3M7Ci0Jd2hpbGUgKC1FSU9DQlJFVFJZID09Ci0JCShyZXQgPSBmaWxwLT5mX29wLT5haW9fcmVhZCgma2lvY2IsIGJ1ZiwgbGVuLCBraW9jYi5raV9wb3MpKSkKKwlraW9jYi5raV9sZWZ0ID0gbGVuOworCisJZm9yICg7OykgeworCQlyZXQgPSBmaWxwLT5mX29wLT5haW9fcmVhZCgma2lvY2IsICZpb3YsIDEsIGtpb2NiLmtpX3Bvcyk7CisJCWlmIChyZXQgIT0gLUVJT0NCUkVUUlkpCisJCQlicmVhazsKIAkJd2FpdF9vbl9yZXRyeV9zeW5jX2tpb2NiKCZraW9jYik7CisJfQogCiAJaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwpAQCAtMjc5LDE0ICsyODcsMjAgQEAKIAogc3NpemVfdCBkb19zeW5jX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MpCiB7CisJc3RydWN0IGlvdmVjIGlvdiA9IHsgLmlvdl9iYXNlID0gKHZvaWQgX191c2VyICopYnVmLCAuaW92X2xlbiA9IGxlbiB9OwogCXN0cnVjdCBraW9jYiBraW9jYjsKIAlzc2l6ZV90IHJldDsKIAogCWluaXRfc3luY19raW9jYigma2lvY2IsIGZpbHApOwogCWtpb2NiLmtpX3BvcyA9ICpwcG9zOwotCXdoaWxlICgtRUlPQ0JSRVRSWSA9PQotCSAgICAgICAocmV0ID0gZmlscC0+Zl9vcC0+YWlvX3dyaXRlKCZraW9jYiwgYnVmLCBsZW4sIGtpb2NiLmtpX3BvcykpKQorCWtpb2NiLmtpX2xlZnQgPSBsZW47CisKKwlmb3IgKDs7KSB7CisJCXJldCA9IGZpbHAtPmZfb3AtPmFpb193cml0ZSgma2lvY2IsICZpb3YsIDEsIGtpb2NiLmtpX3Bvcyk7CisJCWlmIChyZXQgIT0gLUVJT0NCUkVUUlkpCisJCQlicmVhazsKIAkJd2FpdF9vbl9yZXRyeV9zeW5jX2tpb2NiKCZraW9jYik7CisJfQogCiAJaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwpAQCAtNDM4LDc4ICs0NTIsMTU1IEBACiAKIEVYUE9SVF9VTlVTRURfU1lNQk9MKGlvdl9zaG9ydGVuKTsgIC8qICBKdW5lIDIwMDYgICovCiAKK3NzaXplX3QgZG9fc3luY19yZWFkdl93cml0ZXYoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcywgaW92X2ZuX3QgZm4pCit7CisJc3RydWN0IGtpb2NiIGtpb2NiOworCXNzaXplX3QgcmV0OworCisJaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlscCk7CisJa2lvY2Iua2lfcG9zID0gKnBwb3M7CisJa2lvY2Iua2lfbGVmdCA9IGxlbjsKKwlraW9jYi5raV9uYnl0ZXMgPSBsZW47CisKKwlmb3IgKDs7KSB7CisJCXJldCA9IGZuKCZraW9jYiwgaW92LCBucl9zZWdzLCBraW9jYi5raV9wb3MpOworCQlpZiAocmV0ICE9IC1FSU9DQlJFVFJZKQorCQkJYnJlYWs7CisJCXdhaXRfb25fcmV0cnlfc3luY19raW9jYigma2lvY2IpOworCX0KKworCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQorCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmtpb2NiKTsKKwkqcHBvcyA9IGtpb2NiLmtpX3BvczsKKwlyZXR1cm4gcmV0OworfQorCisvKiBEbyBpdCBieSBoYW5kLCB3aXRoIGZpbGUtb3BzICovCitzc2l6ZV90IGRvX2xvb3BfcmVhZHZfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MsIGlvX2ZuX3QgZm4pCit7CisJc3RydWN0IGlvdmVjICp2ZWN0b3IgPSBpb3Y7CisJc3NpemVfdCByZXQgPSAwOworCisJd2hpbGUgKG5yX3NlZ3MgPiAwKSB7CisJCXZvaWQgX191c2VyICpiYXNlOworCQlzaXplX3QgbGVuOworCQlzc2l6ZV90IG5yOworCisJCWJhc2UgPSB2ZWN0b3ItPmlvdl9iYXNlOworCQlsZW4gPSB2ZWN0b3ItPmlvdl9sZW47CisJCXZlY3RvcisrOworCQlucl9zZWdzLS07CisKKwkJbnIgPSBmbihmaWxwLCBiYXNlLCBsZW4sIHBwb3MpOworCisJCWlmIChuciA8IDApIHsKKwkJCWlmICghcmV0KQorCQkJCXJldCA9IG5yOworCQkJYnJlYWs7CisJCX0KKwkJcmV0ICs9IG5yOworCQlpZiAobnIgIT0gbGVuKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogLyogQSB3cml0ZSBvcGVyYXRpb24gZG9lcyBhIHJlYWQgZnJvbSB1c2VyIHNwYWNlIGFuZCB2aWNlIHZlcnNhICovCiAjZGVmaW5lIHZyZnlfZGlyKHR5cGUpICgodHlwZSkgPT0gUkVBRCA/IFZFUklGWV9XUklURSA6IFZFUklGWV9SRUFEKQogCitzc2l6ZV90IHJ3X2NvcHlfY2hlY2tfdXZlY3RvcihpbnQgdHlwZSwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqIHV2ZWN0b3IsCisJCQkgICAgICB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHVuc2lnbmVkIGxvbmcgZmFzdF9zZWdzLAorCQkJICAgICAgc3RydWN0IGlvdmVjICpmYXN0X3BvaW50ZXIsCisJCQkgICAgICBzdHJ1Y3QgaW92ZWMgKipyZXRfcG9pbnRlcikKKyAgeworCXVuc2lnbmVkIGxvbmcgc2VnOworICAJc3NpemVfdCByZXQ7CisJc3RydWN0IGlvdmVjICppb3YgPSBmYXN0X3BvaW50ZXI7CisKKyAgCS8qCisgIAkgKiBTdVMgc2F5cyAiVGhlIHJlYWR2KCkgZnVuY3Rpb24gKm1heSogZmFpbCBpZiB0aGUgaW92Y250IGFyZ3VtZW50CisgIAkgKiB3YXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIDAsIG9yIGdyZWF0ZXIgdGhhbiB7SU9WX01BWH0uICBMaW51eCBoYXMKKyAgCSAqIHRyYWRpdGlvbmFsbHkgcmV0dXJuZWQgemVybyBmb3IgemVybyBzZWdtZW50cywgc28uLi4KKyAgCSAqLworCWlmIChucl9zZWdzID09IDApIHsKKwkJcmV0ID0gMDsKKyAgCQlnb3RvIG91dDsKKwl9CisKKyAgCS8qCisgIAkgKiBGaXJzdCBnZXQgdGhlICJzdHJ1Y3QgaW92ZWMiIGZyb20gdXNlciBtZW1vcnkgYW5kCisgIAkgKiB2ZXJpZnkgYWxsIHRoZSBwb2ludGVycworICAJICovCisJaWYgKG5yX3NlZ3MgPiBVSU9fTUFYSU9WKSB7CisJCXJldCA9IC1FSU5WQUw7CisgIAkJZ290byBvdXQ7CisJfQorCWlmIChucl9zZWdzID4gZmFzdF9zZWdzKSB7CisgIAkJaW92ID0ga21hbGxvYyhucl9zZWdzKnNpemVvZihzdHJ1Y3QgaW92ZWMpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKGlvdiA9PSBOVUxMKSB7CisJCQlyZXQgPSAtRU5PTUVNOworICAJCQlnb3RvIG91dDsKKwkJfQorICAJfQorCWlmIChjb3B5X2Zyb21fdXNlcihpb3YsIHV2ZWN0b3IsIG5yX3NlZ3Mqc2l6ZW9mKCp1dmVjdG9yKSkpIHsKKwkJcmV0ID0gLUVGQVVMVDsKKyAgCQlnb3RvIG91dDsKKwl9CisKKyAgCS8qCisJICogQWNjb3JkaW5nIHRvIHRoZSBTaW5nbGUgVW5peCBTcGVjaWZpY2F0aW9uIHdlIHNob3VsZCByZXR1cm4gRUlOVkFMCisJICogaWYgYW4gZWxlbWVudCBsZW5ndGggaXMgPCAwIHdoZW4gY2FzdCB0byBzc2l6ZV90IG9yIGlmIHRoZQorCSAqIHRvdGFsIGxlbmd0aCB3b3VsZCBvdmVyZmxvdyB0aGUgc3NpemVfdCByZXR1cm4gdmFsdWUgb2YgdGhlCisJICogc3lzdGVtIGNhbGwuCisgIAkgKi8KKwlyZXQgPSAwOworICAJZm9yIChzZWcgPSAwOyBzZWcgPCBucl9zZWdzOyBzZWcrKykgeworICAJCXZvaWQgX191c2VyICpidWYgPSBpb3Zbc2VnXS5pb3ZfYmFzZTsKKyAgCQlzc2l6ZV90IGxlbiA9IChzc2l6ZV90KWlvdltzZWddLmlvdl9sZW47CisKKwkJLyogc2VlIGlmIHdlIHdlJ3JlIGFib3V0IHRvIHVzZSBhbiBpbnZhbGlkIGxlbiBvciBpZgorCQkgKiBpdCdzIGFib3V0IHRvIG92ZXJmbG93IHNzaXplX3QgKi8KKwkJaWYgKGxlbiA8IDAgfHwgKHJldCArIGxlbiA8IHJldCkpIHsKKwkJCXJldCA9IC1FSU5WQUw7CisgIAkJCWdvdG8gb3V0OworCQl9CisJCWlmICh1bmxpa2VseSghYWNjZXNzX29rKHZyZnlfZGlyKHR5cGUpLCBidWYsIGxlbikpKSB7CisJCQlyZXQgPSAtRUZBVUxUOworICAJCQlnb3RvIG91dDsKKwkJfQorCisJCXJldCArPSBsZW47CisgIAl9CitvdXQ6CisJKnJldF9wb2ludGVyID0gaW92OworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBzc2l6ZV90IGRvX3JlYWR2X3dyaXRldihpbnQgdHlwZSwgc3RydWN0IGZpbGUgKmZpbGUsCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqIHV2ZWN0b3IsCiAJCQkgICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBvcykKIHsKLQl0eXBlZGVmIHNzaXplX3QgKCppb19mbl90KShzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQl0eXBlZGVmIHNzaXplX3QgKCppb3ZfZm5fdCkoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCAqKTsKLQogCXNpemVfdCB0b3RfbGVuOwogCXN0cnVjdCBpb3ZlYyBpb3ZzdGFja1tVSU9fRkFTVElPVl07Ci0Jc3RydWN0IGlvdmVjICppb3Y9aW92c3RhY2ssICp2ZWN0b3I7CisJc3RydWN0IGlvdmVjICppb3YgPSBpb3ZzdGFjazsKIAlzc2l6ZV90IHJldDsKLQlpbnQgc2VnOwogCWlvX2ZuX3QgZm47CiAJaW92X2ZuX3QgZm52OwogCi0JLyoKLQkgKiBTdVMgc2F5cyAiVGhlIHJlYWR2KCkgZnVuY3Rpb24gKm1heSogZmFpbCBpZiB0aGUgaW92Y250IGFyZ3VtZW50Ci0JICogd2FzIGxlc3MgdGhhbiBvciBlcXVhbCB0byAwLCBvciBncmVhdGVyIHRoYW4ge0lPVl9NQVh9LiAgTGludXggaGFzCi0JICogdHJhZGl0aW9uYWxseSByZXR1cm5lZCB6ZXJvIGZvciB6ZXJvIHNlZ21lbnRzLCBzby4uLgotCSAqLwotCXJldCA9IDA7Ci0JaWYgKG5yX3NlZ3MgPT0gMCkKLQkJZ290byBvdXQ7Ci0KLQkvKgotCSAqIEZpcnN0IGdldCB0aGUgInN0cnVjdCBpb3ZlYyIgZnJvbSB1c2VyIG1lbW9yeSBhbmQKLQkgKiB2ZXJpZnkgYWxsIHRoZSBwb2ludGVycwotCSAqLwotCXJldCA9IC1FSU5WQUw7Ci0JaWYgKG5yX3NlZ3MgPiBVSU9fTUFYSU9WKQotCQlnb3RvIG91dDsKLQlpZiAoIWZpbGUtPmZfb3ApCi0JCWdvdG8gb3V0OwotCWlmIChucl9zZWdzID4gVUlPX0ZBU1RJT1YpIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJaW92ID0ga21hbGxvYyhucl9zZWdzKnNpemVvZihzdHJ1Y3QgaW92ZWMpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFpb3YpCi0JCQlnb3RvIG91dDsKLQl9Ci0JcmV0ID0gLUVGQVVMVDsKLQlpZiAoY29weV9mcm9tX3VzZXIoaW92LCB1dmVjdG9yLCBucl9zZWdzKnNpemVvZigqdXZlY3RvcikpKQotCQlnb3RvIG91dDsKLQotCS8qCi0JICogU2luZ2xlIHVuaXggc3BlY2lmaWNhdGlvbjoKLQkgKiBXZSBzaG91bGQgLUVJTlZBTCBpZiBhbiBlbGVtZW50IGxlbmd0aCBpcyBub3QgPj0gMCBhbmQgZml0dGluZyBhbgotCSAqIHNzaXplX3QuICBUaGUgdG90YWwgbGVuZ3RoIGlzIGZpdHRpbmcgYW4gc3NpemVfdAotCSAqCi0JICogQmUgY2FyZWZ1bCBoZXJlIGJlY2F1c2UgaW92X2xlbiBpcyBhIHNpemVfdCBub3QgYW4gc3NpemVfdAotCSAqLwotCXRvdF9sZW4gPSAwOwotCXJldCA9IC1FSU5WQUw7Ci0JZm9yIChzZWcgPSAwOyBzZWcgPCBucl9zZWdzOyBzZWcrKykgewotCQl2b2lkIF9fdXNlciAqYnVmID0gaW92W3NlZ10uaW92X2Jhc2U7Ci0JCXNzaXplX3QgbGVuID0gKHNzaXplX3QpaW92W3NlZ10uaW92X2xlbjsKLQotCQlpZiAobGVuIDwgMCkJLyogc2l6ZV90IG5vdCBmaXR0aW5nIGFuIHNzaXplX3QgLi4gKi8KLQkJCWdvdG8gb3V0OwotCQlpZiAodW5saWtlbHkoIWFjY2Vzc19vayh2cmZ5X2Rpcih0eXBlKSwgYnVmLCBsZW4pKSkKLQkJCWdvdG8gRWZhdWx0OwotCQl0b3RfbGVuICs9IGxlbjsKLQkJaWYgKChzc2l6ZV90KXRvdF9sZW4gPCAwKSAvKiBtYXRocyBvdmVyZmxvdyBvbiB0aGUgc3NpemVfdCAqLwotCQkJZ290byBvdXQ7Ci0JfQotCWlmICh0b3RfbGVuID09IDApIHsKLQkJcmV0ID0gMDsKKwlpZiAoIWZpbGUtPmZfb3ApIHsKKwkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQogCisJcmV0ID0gcndfY29weV9jaGVja191dmVjdG9yKHR5cGUsIHV2ZWN0b3IsIG5yX3NlZ3MsCisJCQlBUlJBWV9TSVpFKGlvdnN0YWNrKSwgaW92c3RhY2ssICZpb3YpOworCWlmIChyZXQgPD0gMCkKKwkJZ290byBvdXQ7CisKKwl0b3RfbGVuID0gcmV0OwogCXJldCA9IHJ3X3ZlcmlmeV9hcmVhKHR5cGUsIGZpbGUsIHBvcywgdG90X2xlbik7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gb3V0OwpAQCAtNTIwLDM5ICs2MTEsMTggQEAKIAlmbnYgPSBOVUxMOwogCWlmICh0eXBlID09IFJFQUQpIHsKIAkJZm4gPSBmaWxlLT5mX29wLT5yZWFkOwotCQlmbnYgPSBmaWxlLT5mX29wLT5yZWFkdjsKKwkJZm52ID0gZmlsZS0+Zl9vcC0+YWlvX3JlYWQ7CiAJfSBlbHNlIHsKIAkJZm4gPSAoaW9fZm5fdClmaWxlLT5mX29wLT53cml0ZTsKLQkJZm52ID0gZmlsZS0+Zl9vcC0+d3JpdGV2OwotCX0KLQlpZiAoZm52KSB7Ci0JCXJldCA9IGZudihmaWxlLCBpb3YsIG5yX3NlZ3MsIHBvcyk7Ci0JCWdvdG8gb3V0OworCQlmbnYgPSBmaWxlLT5mX29wLT5haW9fd3JpdGU7CiAJfQogCi0JLyogRG8gaXQgYnkgaGFuZCwgd2l0aCBmaWxlLW9wcyAqLwotCXJldCA9IDA7Ci0JdmVjdG9yID0gaW92OwotCXdoaWxlIChucl9zZWdzID4gMCkgewotCQl2b2lkIF9fdXNlciAqIGJhc2U7Ci0JCXNpemVfdCBsZW47Ci0JCXNzaXplX3QgbnI7CisJaWYgKGZudikKKwkJcmV0ID0gZG9fc3luY19yZWFkdl93cml0ZXYoZmlsZSwgaW92LCBucl9zZWdzLCB0b3RfbGVuLAorCQkJCQkJcG9zLCBmbnYpOworCWVsc2UKKwkJcmV0ID0gZG9fbG9vcF9yZWFkdl93cml0ZXYoZmlsZSwgaW92LCBucl9zZWdzLCBwb3MsIGZuKTsKIAotCQliYXNlID0gdmVjdG9yLT5pb3ZfYmFzZTsKLQkJbGVuID0gdmVjdG9yLT5pb3ZfbGVuOwotCQl2ZWN0b3IrKzsKLQkJbnJfc2Vncy0tOwotCi0JCW5yID0gZm4oZmlsZSwgYmFzZSwgbGVuLCBwb3MpOwotCi0JCWlmIChuciA8IDApIHsKLQkJCWlmICghcmV0KSByZXQgPSBucjsKLQkJCWJyZWFrOwotCQl9Ci0JCXJldCArPSBucjsKLQkJaWYgKG5yICE9IGxlbikKLQkJCWJyZWFrOwotCX0KIG91dDoKIAlpZiAoaW92ICE9IGlvdnN0YWNrKQogCQlrZnJlZShpb3YpOwpAQCAtNTYzLDkgKzYzMyw2IEBACiAJCQlmc25vdGlmeV9tb2RpZnkoZmlsZS0+Zl9kZW50cnkpOwogCX0KIAlyZXR1cm4gcmV0OwotRWZhdWx0OgotCXJldCA9IC1FRkFVTFQ7Ci0JZ290byBvdXQ7CiB9CiAKIHNzaXplX3QgdmZzX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICp2ZWMsCkBAIC01NzMsNyArNjQwLDcgQEAKIHsKIAlpZiAoIShmaWxlLT5mX21vZGUgJiBGTU9ERV9SRUFEKSkKIAkJcmV0dXJuIC1FQkFERjsKLQlpZiAoIWZpbGUtPmZfb3AgfHwgKCFmaWxlLT5mX29wLT5yZWFkdiAmJiAhZmlsZS0+Zl9vcC0+cmVhZCkpCisJaWYgKCFmaWxlLT5mX29wIHx8ICghZmlsZS0+Zl9vcC0+YWlvX3JlYWQgJiYgIWZpbGUtPmZfb3AtPnJlYWQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBkb19yZWFkdl93cml0ZXYoUkVBRCwgZmlsZSwgdmVjLCB2bGVuLCBwb3MpOwpAQCAtNTg2LDcgKzY1Myw3IEBACiB7CiAJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfV1JJVEUpKQogCQlyZXR1cm4gLUVCQURGOwotCWlmICghZmlsZS0+Zl9vcCB8fCAoIWZpbGUtPmZfb3AtPndyaXRldiAmJiAhZmlsZS0+Zl9vcC0+d3JpdGUpKQorCWlmICghZmlsZS0+Zl9vcCB8fCAoIWZpbGUtPmZfb3AtPmFpb193cml0ZSAmJiAhZmlsZS0+Zl9vcC0+d3JpdGUpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiBkb19yZWFkdl93cml0ZXYoV1JJVEUsIGZpbGUsIHZlYywgdmxlbiwgcG9zKTsKZGlmZiAtLWdpdCBhL2ZzL3JlYWRfd3JpdGUuaCBiL2ZzL3JlYWRfd3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDdiOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvZnMvcmVhZF93cml0ZS5oCkBAIC0wLDAgKzEsMTQgQEAKKy8qCisgKiBUaGlzIGZpbGUgaXMgb25seSBmb3Igc2hhcmluZyBzb21lIGhlbHBlcnMgZnJvbSByZWFkX3dyaXRlLmMgd2l0aCBjb21wYXQuYy4KKyAqIERvbid0IHVzZSBhbnl3aGVyZSBlbHNlLgorICovCisKKwordHlwZWRlZiBzc2l6ZV90ICgqaW9fZm5fdCkoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7Cit0eXBlZGVmIHNzaXplX3QgKCppb3ZfZm5fdCkoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLAorCQl1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOworCitzc2l6ZV90IGRvX3N5bmNfcmVhZHZfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBzaXplX3QgbGVuLCBsb2ZmX3QgKnBwb3MsIGlvdl9mbl90IGZuKTsKK3NzaXplX3QgZG9fbG9vcF9yZWFkdl93cml0ZXYoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcywgaW9fZm5fdCBmbik7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9NYWtlZmlsZSBiL2ZzL3JlaXNlcmZzL01ha2VmaWxlCmluZGV4IDNhNTkzMDkuLjBlYjdhYzAgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL01ha2VmaWxlCisrKyBiL2ZzL3JlaXNlcmZzL01ha2VmaWxlCkBAIC0yOCw3ICsyOCw3IEBACiAjIHdpbGwgd29yayBhcm91bmQgaXQuIElmIGFueSBvdGhlciBhcmNoaXRlY3R1cmUgZGlzcGxheXMgdGhpcyBiZWhhdmlvciwKICMgYWRkIGl0IGhlcmUuCiBpZmVxICgkKENPTkZJR19QUEMzMikseSkKLUVYVFJBX0NGTEFHUyA6PSAtTzEKK0VYVFJBX0NGTEFHUyA6PSAkKGNhbGwgY2MtaWZ2ZXJzaW9uLCAtbHQsIDA0MDAsIC1PMSkKIGVuZGlmCiAKIFRBR1M6CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9iaXRtYXAuYyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCmluZGV4IDRhN2RiZGUuLjFiZmFlNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCisrKyBiL2ZzL3JlaXNlcmZzL2JpdG1hcC5jCkBAIC05LDYgKzksNyBAQAogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mc19zYi5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgpAQCAtNTAsMTYgKzUxLDE1IEBACiB7CiAJLyogSXQgaXMgaW4gdGhlIGJpdG1hcCBibG9jayBudW1iZXIgZXF1YWwgdG8gdGhlIGJsb2NrCiAJICogbnVtYmVyIGRpdmlkZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGluIGEgYmxvY2suICovCi0JKmJtYXBfbnIgPSBibG9jayAvIChzLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwkqYm1hcF9uciA9IGJsb2NrID4+IChzLT5zX2Jsb2Nrc2l6ZV9iaXRzICsgMyk7CiAJLyogV2l0aGluIHRoYXQgYml0bWFwIGJsb2NrIGl0IGlzIGxvY2F0ZWQgYXQgYml0IG9mZnNldCAqb2Zmc2V0LiAqLwogCSpvZmZzZXQgPSBibG9jayAmICgocy0+c19ibG9ja3NpemUgPDwgMykgLSAxKTsKLQlyZXR1cm47CiB9CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIGludCBpc19yZXVzYWJsZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGJfYmxvY2tucl90IGJsb2NrLCBpbnQgYml0X3ZhbHVlKQogewotCWludCBpLCBqOworCWludCBibWFwLCBvZmZzZXQ7CiAKIAlpZiAoYmxvY2sgPT0gMCB8fCBibG9jayA+PSBTQl9CTE9DS19DT1VOVChzKSkgewogCQlyZWlzZXJmc193YXJuaW5nKHMsCkBAIC02OCwzNiArNjgsMzIgQEAKIAkJcmV0dXJuIDA7CiAJfQogCi0JLyogaXQgY2FuJ3QgYmUgb25lIG9mIHRoZSBiaXRtYXAgYmxvY2tzICovCi0JZm9yIChpID0gMDsgaSA8IFNCX0JNQVBfTlIocyk7IGkrKykKLQkJaWYgKGJsb2NrID09IFNCX0FQX0JJVE1BUChzKVtpXS5iaC0+Yl9ibG9ja25yKSB7CisJZ2V0X2JpdF9hZGRyZXNzKHMsIGJsb2NrLCAmYm1hcCwgJm9mZnNldCk7CisKKwkvKiBPbGQgZm9ybWF0IGZpbGVzeXN0ZW0/IFVubGlrZWx5LCBidXQgdGhlIGJpdG1hcHMgYXJlIGFsbCB1cCBmcm9udCBzbworCSAqIHdlIG5lZWQgdG8gYWNjb3VudCBmb3IgaXQuICovCisJaWYgKHVubGlrZWx5KHRlc3RfYml0KFJFSVNFUkZTX09MRF9GT1JNQVQsCisJCQkgICAgICAmKFJFSVNFUkZTX1NCKHMpLT5zX3Byb3BlcnRpZXMpKSkpIHsKKwkJYl9ibG9ja25yX3QgYm1hcDEgPSBSRUlTRVJGU19TQihzKS0+c19zYmgtPmJfYmxvY2tuciArIDE7CisJCWlmIChibG9jayA+PSBibWFwMSAmJiBibG9jayA8PSBibWFwMSArIFNCX0JNQVBfTlIocykpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzOiA0MDE5OiBpc19yZXVzYWJsZTogIgorCQkJCQkgImJpdG1hcCBibG9jayAlbHUoJXUpIGNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCisJCQkJCSBibG9jaywgU0JfQk1BUF9OUihzKSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChvZmZzZXQgPT0gMCkgewogCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnM6IDQwMjA6IGlzX3JldXNhYmxlOiAiCiAJCQkJCSAiYml0bWFwIGJsb2NrICVsdSgldSkgY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKIAkJCQkJIGJsb2NrLCBTQl9CTUFQX05SKHMpKTsKIAkJCXJldHVybiAwOwogCQl9Ci0KLQlnZXRfYml0X2FkZHJlc3MocywgYmxvY2ssICZpLCAmaik7Ci0KLQlpZiAoaSA+PSBTQl9CTUFQX05SKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwMzA6IGlzX3JldXNhYmxlOiB0aGVyZSBpcyBubyBzbyBtYW55IGJpdG1hcCBibG9ja3M6ICIKLQkJCQkgImJsb2NrPSVsdSwgYml0bWFwX25yPSVkIiwgYmxvY2ssIGkpOwotCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoKGJpdF92YWx1ZSA9PSAwICYmCi0JICAgICByZWlzZXJmc190ZXN0X2xlX2JpdChqLCBTQl9BUF9CSVRNQVAocylbaV0uYmgtPmJfZGF0YSkpIHx8Ci0JICAgIChiaXRfdmFsdWUgPT0gMSAmJgotCSAgICAgcmVpc2VyZnNfdGVzdF9sZV9iaXQoaiwgU0JfQVBfQklUTUFQKHMpW2ldLmJoLT5iX2RhdGEpID09IDApKSB7CisJaWYgKGJtYXAgPj0gU0JfQk1BUF9OUihzKSkgewogCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJ2cy00MDQwOiBpc19yZXVzYWJsZTogY29ycmVzcG9uZGluZyBiaXQgb2YgYmxvY2sgJWx1IGRvZXMgbm90ICIKLQkJCQkgIm1hdGNoIHJlcXVpcmVkIHZhbHVlIChpPT0lZCwgaj09JWQpIHRlc3RfYml0PT0lZCIsCi0JCQkJIGJsb2NrLCBpLCBqLCByZWlzZXJmc190ZXN0X2xlX2JpdChqLAotCQkJCQkJCQkgICBTQl9BUF9CSVRNQVAKLQkJCQkJCQkJICAgKHMpW2ldLmJoLT4KLQkJCQkJCQkJICAgYl9kYXRhKSk7Ci0KKwkJCQkgInZzLTQwMzA6IGlzX3JldXNhYmxlOiB0aGVyZSBpcyBubyBzbyBtYW55IGJpdG1hcCBibG9ja3M6ICIKKwkJCQkgImJsb2NrPSVsdSwgYml0bWFwX25yPSVkIiwgYmxvY2ssIGJtYXApOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE0MSw2ICsxMzcsNyBAQAogewogCXN0cnVjdCBzdXBlcl9ibG9jayAqcyA9IHRoLT50X3N1cGVyOwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqYmkgPSAmU0JfQVBfQklUTUFQKHMpW2JtYXBfbl07CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKIAlpbnQgZW5kLCBuZXh0OwogCWludCBvcmcgPSAqYmVnOwogCkBAIC0xNTksMjIgKzE1NiwyNSBAQAogCQkJCSBibWFwX24pOwogCQlyZXR1cm4gMDsKIAl9Ci0JaWYgKGJ1ZmZlcl9sb2NrZWQoYmktPmJoKSkgewotCQlQUk9DX0lORk9fSU5DKHMsIHNjYW5fYml0bWFwLndhaXQpOwotCQlfX3dhaXRfb25fYnVmZmVyKGJpLT5iaCk7Ci0JfQorCisJYmggPSByZWlzZXJmc19yZWFkX2JpdG1hcF9ibG9jayhzLCBibWFwX24pOworCWlmIChiaCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKIAogCXdoaWxlICgxKSB7CiAJICAgICAgY29udDoKLQkJaWYgKGJpLT5mcmVlX2NvdW50IDwgbWluKQorCQlpZiAoYmktPmZyZWVfY291bnQgPCBtaW4pIHsKKwkJCWJyZWxzZShiaCk7CiAJCQlyZXR1cm4gMDsJLy8gTm8gZnJlZSBibG9ja3MgaW4gdGhpcyBiaXRtYXAKKwkJfQogCiAJCS8qIHNlYXJjaCBmb3IgYSBmaXJzdCB6ZXJvIGJpdCAtLSBiZWdnaW5pbmcgb2YgYSB3aW5kb3cgKi8KIAkJKmJlZyA9IHJlaXNlcmZzX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdAotCQkgICAgKCh1bnNpZ25lZCBsb25nICopKGJpLT5iaC0+Yl9kYXRhKSwgYm91bmRhcnksICpiZWcpOworCQkgICAgKCh1bnNpZ25lZCBsb25nICopKGJoLT5iX2RhdGEpLCBib3VuZGFyeSwgKmJlZyk7CiAKIAkJaWYgKCpiZWcgKyBtaW4gPiBib3VuZGFyeSkgewkvKiBzZWFyY2ggZm9yIGEgemVybyBiaXQgZmFpbHMgb3IgdGhlIHJlc3Qgb2YgYml0bWFwIGJsb2NrCiAJCQkJCQkgKiBjYW5ub3QgY29udGFpbiBhIHplcm8gd2luZG93IG9mIG1pbmltdW0gc2l6ZSAqLworCQkJYnJlbHNlKGJoKTsKIAkJCXJldHVybiAwOwogCQl9CiAKQEAgLTE4Myw3ICsxODMsNyBAQAogCQkvKiBmaXJzdCB6ZXJvIGJpdCBmb3VuZDsgd2UgY2hlY2sgbmV4dCBiaXRzICovCiAJCWZvciAoZW5kID0gKmJlZyArIDE7OyBlbmQrKykgewogCQkJaWYgKGVuZCA+PSAqYmVnICsgbWF4IHx8IGVuZCA+PSBib3VuZGFyeQotCQkJICAgIHx8IHJlaXNlcmZzX3Rlc3RfbGVfYml0KGVuZCwgYmktPmJoLT5iX2RhdGEpKSB7CisJCQkgICAgfHwgcmVpc2VyZnNfdGVzdF9sZV9iaXQoZW5kLCBiaC0+Yl9kYXRhKSkgewogCQkJCW5leHQgPSBlbmQ7CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0xOTcsMTIgKzE5NywxMiBAQAogCQkgKiAoZW5kKSBwb2ludHMgdG8gb25lIGJpdCBhZnRlciB0aGUgd2luZG93IGVuZCAqLwogCQlpZiAoZW5kIC0gKmJlZyA+PSBtaW4pIHsJLyogaXQgc2VlbXMgd2UgaGF2ZSBmb3VuZCB3aW5kb3cgb2YgcHJvcGVyIHNpemUgKi8KIAkJCWludCBpOwotCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaS0+YmgsIDEpOworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaCwgMSk7CiAJCQkvKiB0cnkgdG8gc2V0IGFsbCBibG9ja3MgdXNlZCBjaGVja2luZyBhcmUgdGhleSBzdGlsbCBmcmVlICovCiAJCQlmb3IgKGkgPSAqYmVnOyBpIDwgZW5kOyBpKyspIHsKIAkJCQkvKiBJdCBzZWVtcyB0aGF0IHdlIHNob3VsZCBub3QgY2hlY2sgaW4gam91cm5hbCBhZ2Fpbi4gKi8KIAkJCQlpZiAocmVpc2VyZnNfdGVzdF9hbmRfc2V0X2xlX2JpdAotCQkJCSAgICAoaSwgYmktPmJoLT5iX2RhdGEpKSB7CisJCQkJICAgIChpLCBiaC0+Yl9kYXRhKSkgewogCQkJCQkvKiBiaXQgd2FzIHNldCBieSBhbm90aGVyIHByb2Nlc3MKIAkJCQkJICogd2hpbGUgd2Ugc2xlcHQgaW4gcHJlcGFyZV9mb3Jfam91cm5hbCgpICovCiAJCQkJCVBST0NfSU5GT19JTkMocywgc2Nhbl9iaXRtYXAuc3RvbGVuKTsKQEAgLTIxNCwxNyArMjE0LDE2IEBACiAJCQkJCS8qIG90aGVyd2lzZSB3ZSBjbGVhciBhbGwgYml0IHdlcmUgc2V0IC4uLiAqLwogCQkJCQl3aGlsZSAoLS1pID49ICpiZWcpCiAJCQkJCQlyZWlzZXJmc190ZXN0X2FuZF9jbGVhcl9sZV9iaXQKLQkJCQkJCSAgICAoaSwgYmktPmJoLT5iX2RhdGEpOwotCQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzLAotCQkJCQkJCQkJIGJpLT4KLQkJCQkJCQkJCSBiaCk7CisJCQkJCQkgICAgKGksIGJoLT5iX2RhdGEpOworCQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzLCBiaCk7CiAJCQkJCSpiZWcgPSBvcmc7CiAJCQkJCS8qIC4uLiBhbmQgc2VhcmNoIGFnYWluIGluIGN1cnJlbnQgYmxvY2sgZnJvbSBiZWdpbm5pbmcgKi8KIAkJCQkJZ290byBjb250OwogCQkJCX0KIAkJCX0KIAkJCWJpLT5mcmVlX2NvdW50IC09IChlbmQgLSAqYmVnKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgYmktPmJoKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgYmgpOworCQkJYnJlbHNlKGJoKTsKIAogCQkJLyogZnJlZSBibG9jayBjb3VudCBjYWxjdWxhdGlvbiAqLwogCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBTQl9CVUZGRVJfV0lUSF9TQihzKSwKQEAgLTI2Niw5ICsyNjUsMjAgQEAKICAqLwogc3RhdGljIGlubGluZSBpbnQgYmxvY2tfZ3JvdXBfdXNlZChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIHUzMiBpZCkKIHsKLQlpbnQgYm07Ci0JYm0gPSBibWFwX2hhc2hfaWQocywgaWQpOwotCWlmIChTQl9BUF9CSVRNQVAocylbYm1dLmZyZWVfY291bnQgPiAoKHMtPnNfYmxvY2tzaXplIDw8IDMpICogNjAgLyAxMDApKSB7CisJaW50IGJtID0gYm1hcF9oYXNoX2lkKHMsIGlkKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX2luZm8gKmluZm8gPSAmU0JfQVBfQklUTUFQKHMpW2JtXTsKKworCS8qIElmIHdlIGRvbid0IGhhdmUgY2FjaGVkIGluZm9ybWF0aW9uIG9uIHRoaXMgYml0bWFwIGJsb2NrLCB3ZSdyZQorCSAqIGdvaW5nIHRvIGhhdmUgdG8gbG9hZCBpdCBsYXRlciBhbnl3YXkuIExvYWRpbmcgaXQgaGVyZSBhbGxvd3MgdXMKKwkgKiB0byBtYWtlIGEgYmV0dGVyIGRlY2lzaW9uLiBUaGlzIGZhdm9ycyBsb25nLXRlcm0gcGVyZm9ybWFjZSBnYWluCisJICogd2l0aCBhIGJldHRlciBvbi1kaXNrIGxheW91dCB2cy4gYSBzaG9ydCB0ZXJtIGdhaW4gb2Ygc2tpcHBpbmcgdGhlCisJICogcmVhZCBhbmQgcG90ZW50aWFsbHkgaGF2aW5nIGEgYmFkIHBsYWNlbWVudC4gKi8KKwlpZiAoaW5mby0+Zmlyc3RfemVyb19oaW50ID09IDApIHsKKwkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IHJlaXNlcmZzX3JlYWRfYml0bWFwX2Jsb2NrKHMsIGJtKTsKKwkJYnJlbHNlKGJoKTsKKwl9CisKKwlpZiAoaW5mby0+ZnJlZV9jb3VudCA+ICgocy0+c19ibG9ja3NpemUgPDwgMykgKiA2MCAvIDEwMCkpIHsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAxOwpAQCAtMzczLDcgKzM4Myw3IEBACiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzID0gdGgtPnRfc3VwZXI7CiAJc3RydWN0IHJlaXNlcmZzX3N1cGVyX2Jsb2NrICpyczsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNiaCwgKmJtYmg7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICphcGJpOwogCWludCBuciwgb2Zmc2V0OwogCkBAIC0zOTQsMTYgKzQwNCwyMSBAQAogCQlyZXR1cm47CiAJfQogCi0JcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBhcGJpW25yXS5iaCwgMSk7CisJYm1iaCA9IHJlaXNlcmZzX3JlYWRfYml0bWFwX2Jsb2NrKHMsIG5yKTsKKwlpZiAoIWJtYmgpCisJCXJldHVybjsKKworCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocywgYm1iaCwgMSk7CiAKIAkvKiBjbGVhciBiaXQgZm9yIHRoZSBnaXZlbiBibG9jayBpbiBiaXQgbWFwICovCi0JaWYgKCFyZWlzZXJmc190ZXN0X2FuZF9jbGVhcl9sZV9iaXQob2Zmc2V0LCBhcGJpW25yXS5iaC0+Yl9kYXRhKSkgeworCWlmICghcmVpc2VyZnNfdGVzdF9hbmRfY2xlYXJfbGVfYml0KG9mZnNldCwgYm1iaC0+Yl9kYXRhKSkgewogCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy00MDgwOiByZWlzZXJmc19mcmVlX2Jsb2NrOiAiCiAJCQkJICJmcmVlX2Jsb2NrICglczolbHUpW2RldjpibG9ja25yXTogYml0IGFscmVhZHkgY2xlYXJlZCIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBibG9jayk7CiAJfQogCWFwYmlbbnJdLmZyZWVfY291bnQrKzsKLQlqb3VybmFsX21hcmtfZGlydHkodGgsIHMsIGFwYmlbbnJdLmJoKTsKKwlqb3VybmFsX21hcmtfZGlydHkodGgsIHMsIGJtYmgpOworCWJyZWxzZShibWJoKTsKIAogCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocywgc2JoLCAxKTsKIAkvKiB1cGRhdGUgc3VwZXIgYmxvY2sgKi8KQEAgLTEwMTksNyArMTAzNCw2IEBACiAJYl9ibG9ja25yX3QgZmluaXNoID0gU0JfQkxPQ0tfQ09VTlQocykgLSAxOwogCWludCBwYXNzbm8gPSAwOwogCWludCBucl9hbGxvY2F0ZWQgPSAwOwotCWludCBiaWdhbGxvYyA9IDA7CiAKIAlkZXRlcm1pbmVfcHJlYWxsb2Nfc2l6ZShoaW50KTsKIAlpZiAoIWhpbnQtPmZvcm1hdHRlZF9ub2RlKSB7CkBAIC0xMDQ2LDI4ICsxMDYwLDkgQEAKIAkJCQloaW50LT5wcmVhbGxvY2F0ZSA9IGhpbnQtPnByZWFsbG9jX3NpemUgPSAwOwogCQl9CiAJCS8qIGZvciB1bmZvcm1hdHRlZCBub2RlcywgZm9yY2UgbGFyZ2UgYWxsb2NhdGlvbnMgKi8KLQkJYmlnYWxsb2MgPSBhbW91bnRfbmVlZGVkOwogCX0KIAogCWRvIHsKLQkJLyogaW4gYmlnYWxsb2MgbW9kZSwgbnJfYWxsb2NhdGVkIHNob3VsZCBzdGF5IHplcm8gdW50aWwKLQkJICogdGhlIGVudGlyZSBhbGxvY2F0aW9uIGlzIGZpbGxlZAotCQkgKi8KLQkJaWYgKHVubGlrZWx5KGJpZ2FsbG9jICYmIG5yX2FsbG9jYXRlZCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgImJpZ2FsbG9jIGlzICVkLCBucl9hbGxvY2F0ZWQgJWRcbiIsCi0JCQkJCSBiaWdhbGxvYywgbnJfYWxsb2NhdGVkKTsKLQkJCS8qIHJlc2V0IHRoaW5ncyB0byBhIHNhbmUgdmFsdWUgKi8KLQkJCWJpZ2FsbG9jID0gYW1vdW50X25lZWRlZCAtIG5yX2FsbG9jYXRlZDsKLQkJfQotCQkvKgotCQkgKiB0cnkgcGFzcyAwIGFuZCBwYXNzIDEgbG9va2luZyBmb3IgYSBuaWNlIGJpZwotCQkgKiBjb250aWd1b3VzIGFsbG9jYXRpb24uICBUaGVuIHJlc2V0IGFuZCBsb29rCi0JCSAqIGZvciBhbnl0aGluZyB5b3UgY2FuIGZpbmQuCi0JCSAqLwotCQlpZiAocGFzc25vID09IDIgJiYgYmlnYWxsb2MpIHsKLQkJCXBhc3NubyA9IDA7Ci0JCQliaWdhbGxvYyA9IDA7Ci0JCX0KIAkJc3dpdGNoIChwYXNzbm8rKykgewogCQljYXNlIDA6CS8qIFNlYXJjaCBmcm9tIGhpbnQtPnNlYXJjaF9zdGFydCB0byBlbmQgb2YgZGlzayAqLwogCQkJc3RhcnQgPSBoaW50LT5zZWFyY2hfc3RhcnQ7CkBAIC0xMTA1LDggKzExMDAsNyBAQAogCQkJCQkJCQkgbmV3X2Jsb2NrbnJzICsKIAkJCQkJCQkJIG5yX2FsbG9jYXRlZCwKIAkJCQkJCQkJIHN0YXJ0LCBmaW5pc2gsCi0JCQkJCQkJCSBiaWdhbGxvYyA/Ci0JCQkJCQkJCSBiaWdhbGxvYyA6IDEsCisJCQkJCQkJCSAxLAogCQkJCQkJCQkgYW1vdW50X25lZWRlZCAtCiAJCQkJCQkJCSBucl9hbGxvY2F0ZWQsCiAJCQkJCQkJCSBoaW50LT4KQEAgLTEyNjMsMyArMTI1Nyw4OSBAQAogCiAJcmV0dXJuIHNwYWNlID4gMCA/IHNwYWNlIDogMDsKIH0KKwordm9pZCByZWlzZXJmc19jYWNoZV9iaXRtYXBfbWV0YWRhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX2luZm8gKmluZm8pCit7CisJdW5zaWduZWQgbG9uZyAqY3VyID0gKHVuc2lnbmVkIGxvbmcgKikoYmgtPmJfZGF0YSArIGJoLT5iX3NpemUpOworCisJaW5mby0+Zmlyc3RfemVyb19oaW50ID0gMSA8PCAoc2ItPnNfYmxvY2tzaXplX2JpdHMgKyAzKTsKKworCXdoaWxlICgtLWN1ciA+PSAodW5zaWduZWQgbG9uZyAqKWJoLT5iX2RhdGEpIHsKKwkJaW50IGJhc2UgPSAoKGNoYXIgKiljdXIgLSBiaC0+Yl9kYXRhKSA8PCAzOworCisJCS8qIDAgYW5kIH4wIGFyZSBzcGVjaWFsLCB3ZSBjYW4gb3B0aW1pemUgZm9yIHRoZW0gKi8KKwkJaWYgKCpjdXIgPT0gMCkgeworCQkJaW5mby0+Zmlyc3RfemVyb19oaW50ID0gYmFzZTsKKwkJCWluZm8tPmZyZWVfY291bnQgKz0gQklUU19QRVJfTE9ORzsKKwkJfSBlbHNlIGlmICgqY3VyICE9IH4wTCkgeyAgICAgICAvKiBBIG1peCwgaW52ZXN0aWdhdGUgKi8KKwkJCWludCBiOworCQkJZm9yIChiID0gQklUU19QRVJfTE9ORyAtIDE7IGIgPj0gMDsgYi0tKSB7CisJCQkJaWYgKCFyZWlzZXJmc190ZXN0X2xlX2JpdChiLCBjdXIpKSB7CisJCQkJCWluZm8tPmZpcnN0X3plcm9faGludCA9IGJhc2UgKyBiOworCQkJCQlpbmZvLT5mcmVlX2NvdW50Kys7CisJCQkJfQorCQkJfQorCQl9CisJfQorCS8qIFRoZSBmaXJzdCBiaXQgbXVzdCBBTFdBWVMgYmUgMSAqLworCUJVR19PTihpbmZvLT5maXJzdF96ZXJvX2hpbnQgPT0gMCk7Cit9CisKK3N0cnVjdCBidWZmZXJfaGVhZCAqcmVpc2VyZnNfcmVhZF9iaXRtYXBfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdG1hcCkKK3sKKwliX2Jsb2NrbnJfdCBibG9jayA9IChzYi0+c19ibG9ja3NpemUgPDwgMykgKiBiaXRtYXA7CisJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICppbmZvID0gU0JfQVBfQklUTUFQKHNiKSArIGJpdG1hcDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCisJLyogV2F5IG9sZCBmb3JtYXQgZmlsZXN5c3RlbXMgaGFkIHRoZSBiaXRtYXBzIHBhY2tlZCB1cCBmcm9udC4KKwkgKiBJIGRvdWJ0IHRoZXJlIGFyZSBhbnkgb2YgdGhlc2UgbGVmdCwgYnV0IGp1c3QgaW4gY2FzZS4uLiAqLworCWlmICh1bmxpa2VseSh0ZXN0X2JpdChSRUlTRVJGU19PTERfRk9STUFULAorCSAgICAgICAgICAgICAgICAgICAgICAmKFJFSVNFUkZTX1NCKHNiKS0+c19wcm9wZXJ0aWVzKSkpKQorCQlibG9jayA9IFJFSVNFUkZTX1NCKHNiKS0+c19zYmgtPmJfYmxvY2tuciArIDEgKyBiaXRtYXA7CisJZWxzZSBpZiAoYml0bWFwID09IDApCisJCWJsb2NrID0gKFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTID4+IHNiLT5zX2Jsb2Nrc2l6ZV9iaXRzKSArIDE7CisKKwliaCA9IHNiX2JyZWFkKHNiLCBibG9jayk7CisJaWYgKGJoID09IE5VTEwpCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC0yMDI5OiAlczogYml0bWFwIGJsb2NrICgjJWx1KSAiCisJCSAgICAgICAgICAgICAgICAgInJlYWRpbmcgZmFpbGVkIiwgX19GVU5DVElPTl9fLCBiaC0+Yl9ibG9ja25yKTsKKwllbHNlIHsKKwkJaWYgKGJ1ZmZlcl9sb2NrZWQoYmgpKSB7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBzY2FuX2JpdG1hcC53YWl0KTsKKwkJCV9fd2FpdF9vbl9idWZmZXIoYmgpOworCQl9CisJCUJVR19PTighYnVmZmVyX3VwdG9kYXRlKGJoKSk7CisJCUJVR19PTihhdG9taWNfcmVhZCgmYmgtPmJfY291bnQpID09IDApOworCisJCWlmIChpbmZvLT5maXJzdF96ZXJvX2hpbnQgPT0gMCkKKwkJCXJlaXNlcmZzX2NhY2hlX2JpdG1hcF9tZXRhZGF0YShzYiwgYmgsIGluZm8pOworCX0KKworCXJldHVybiBiaDsKK30KKworaW50IHJlaXNlcmZzX2luaXRfYml0bWFwX2NhY2hlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCit7CisJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICpiaXRtYXA7CisKKwliaXRtYXAgPSB2bWFsbG9jKHNpemVvZiAoKmJpdG1hcCkgKiBTQl9CTUFQX05SKHNiKSk7CisJaWYgKGJpdG1hcCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKworCW1lbXNldChiaXRtYXAsIDAsIHNpemVvZiAoKmJpdG1hcCkgKiBTQl9CTUFQX05SKHNiKSk7CisKKwlTQl9BUF9CSVRNQVAoc2IpID0gYml0bWFwOworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgcmVpc2VyZnNfZnJlZV9iaXRtYXBfY2FjaGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKK3sKKwlpZiAoU0JfQVBfQklUTUFQKHNiKSkgeworCQl2ZnJlZShTQl9BUF9CSVRNQVAoc2IpKTsKKwkJU0JfQVBfQklUTUFQKHNiKSA9IE5VTEw7CisJfQorfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZGlyLmMgYi9mcy9yZWlzZXJmcy9kaXIuYwppbmRleCA5YWFiY2MwLi42NTcwNTBhIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9kaXIuYworKysgYi9mcy9yZWlzZXJmcy9kaXIuYwpAQCAtMjIsNiArMjIsOSBAQAogCS5yZWFkZGlyID0gcmVpc2VyZnNfcmVhZGRpciwKIAkuZnN5bmMgPSByZWlzZXJmc19kaXJfZnN5bmMsCiAJLmlvY3RsID0gcmVpc2VyZnNfaW9jdGwsCisjaWZkZWYgQ09ORklHX0NPTVBBVAorCS5jb21wYXRfaW9jdGwgPSByZWlzZXJmc19jb21wYXRfaW9jdGwsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgcmVpc2VyZnNfZGlyX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggMTYyN2VkZC4uNDFmMjQzNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAorI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgpAQCAtMTMwLDcgKzEzMSw3IEBACiAJcmVpc2VyZnNfd3JpdGVfbG9jayhwX3NfaW5vZGUtPmlfc2IpOwogCWJhcnJpZXJfZG9uZSA9IHJlaXNlcmZzX2NvbW1pdF9mb3JfaW5vZGUocF9zX2lub2RlKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2socF9zX2lub2RlLT5pX3NiKTsKLQlpZiAoYmFycmllcl9kb25lICE9IDEpCisJaWYgKGJhcnJpZXJfZG9uZSAhPSAxICYmIHJlaXNlcmZzX2JhcnJpZXJfZmx1c2gocF9zX2lub2RlLT5pX3NiKSkKIAkJYmxrZGV2X2lzc3VlX2ZsdXNoKHBfc19pbm9kZS0+aV9zYi0+c19iZGV2LCBOVUxMKTsKIAlpZiAoYmFycmllcl9kb25lIDwgMCkKIAkJcmV0dXJuIGJhcnJpZXJfZG9uZTsKQEAgLTEzMzMsNyArMTMzNCw3IEBACiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KLQkJcmVzdWx0ID0gZ2VuZXJpY19maWxlX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOworCQlyZXN1bHQgPSBkb19zeW5jX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwogCiAJCWlmIChhZnRlcl9maWxlX2VuZCkgewkvKiBOb3cgdXBkYXRlIGlfc2l6ZSBhbmQgcmVtb3ZlIHRoZSBzYXZlbGluayAqLwogCQkJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKQEAgLTE1NjUsMTAgKzE1NjYsMTQgQEAKIH0KIAogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWlzZXJmc19maWxlX29wZXJhdGlvbnMgPSB7Ci0JLnJlYWQgPSBnZW5lcmljX2ZpbGVfcmVhZCwKKwkucmVhZCA9IGRvX3N5bmNfcmVhZCwKIAkud3JpdGUgPSByZWlzZXJmc19maWxlX3dyaXRlLAogCS5pb2N0bCA9IHJlaXNlcmZzX2lvY3RsLAorI2lmZGVmIENPTkZJR19DT01QQVQKKwkuY29tcGF0X2lvY3RsID0gcmVpc2VyZnNfY29tcGF0X2lvY3RsLAorI2VuZGlmCiAJLm1tYXAgPSBnZW5lcmljX2ZpbGVfbW1hcCwKKwkub3BlbiA9IGdlbmVyaWNfZmlsZV9vcGVuLAogCS5yZWxlYXNlID0gcmVpc2VyZnNfZmlsZV9yZWxlYXNlLAogCS5mc3luYyA9IHJlaXNlcmZzX3N5bmNfZmlsZSwKIAkuc2VuZGZpbGUgPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCA1MmYxZTIxLi43ZTVhMmY1IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTE3LDggKzE3LDYgQEAKICNpbmNsdWRlIDxsaW51eC93cml0ZWJhY2suaD4KICNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCi1leHRlcm4gaW50IHJlaXNlcmZzX2RlZmF1bHRfaW9fc2l6ZTsJLyogZGVmYXVsdCBpbyBzaXplIGRldnVuZWQgaW4gc3VwZXIuYyAqLwotCiBzdGF0aWMgaW50IHJlaXNlcmZzX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkJIHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIHRvKTsKIHN0YXRpYyBpbnQgcmVpc2VyZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBhZ2UsCkBAIC0xMTIyLDcgKzExMjAsNiBAQAogCWloID0gUEFUSF9QSVRFTV9IRUFEKHBhdGgpOwogCiAJY29weV9rZXkoSU5PREVfUEtFWShpbm9kZSksICYoaWgtPmloX2tleSkpOwotCWlub2RlLT5pX2Jsa3NpemUgPSByZWlzZXJmc19kZWZhdWx0X2lvX3NpemU7CiAKIAlJTklUX0xJU1RfSEVBRCgmKFJFSVNFUkZTX0koaW5vZGUpLT5pX3ByZWFsbG9jX2xpc3QpKTsKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyA9IDA7CkBAIC0xMTMwLDkgKzExMjcsOSBAQAogCVJFSVNFUkZTX0koaW5vZGUpLT5pX3ByZWFsbG9jX2NvdW50ID0gMDsKIAlSRUlTRVJGU19JKGlub2RlKS0+aV90cmFuc19pZCA9IDA7CiAJUkVJU0VSRlNfSShpbm9kZSktPmlfamwgPSBOVUxMOwotCVJFSVNFUkZTX0koaW5vZGUpLT5pX2FjbF9hY2Nlc3MgPSBOVUxMOwotCVJFSVNFUkZTX0koaW5vZGUpLT5pX2FjbF9kZWZhdWx0ID0gTlVMTDsKLQlpbml0X3J3c2VtKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKKwlyZWlzZXJmc19pbml0X2FjbF9hY2Nlc3MoaW5vZGUpOworCXJlaXNlcmZzX2luaXRfYWNsX2RlZmF1bHQoaW5vZGUpOworCXJlaXNlcmZzX2luaXRfeGF0dHJfcndzZW0oaW5vZGUpOwogCiAJaWYgKHN0YXRfZGF0YV92MShpaCkpIHsKIAkJc3RydWN0IHN0YXRfZGF0YV92MSAqc2QgPQpAQCAtMTgzNyw5ICsxODM0LDkgQEAKIAlSRUlTRVJGU19JKGlub2RlKS0+aV9hdHRycyA9CiAJICAgIFJFSVNFUkZTX0koZGlyKS0+aV9hdHRycyAmIFJFSVNFUkZTX0lOSEVSSVRfTUFTSzsKIAlzZF9hdHRyc190b19pX2F0dHJzKFJFSVNFUkZTX0koaW5vZGUpLT5pX2F0dHJzLCBpbm9kZSk7Ci0JUkVJU0VSRlNfSShpbm9kZSktPmlfYWNsX2FjY2VzcyA9IE5VTEw7Ci0JUkVJU0VSRlNfSShpbm9kZSktPmlfYWNsX2RlZmF1bHQgPSBOVUxMOwotCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworCXJlaXNlcmZzX2luaXRfYWNsX2FjY2Vzcyhpbm9kZSk7CisJcmVpc2VyZnNfaW5pdF9hY2xfZGVmYXVsdChpbm9kZSk7CisJcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShpbm9kZSk7CiAKIAlpZiAob2xkX2Zvcm1hdF9vbmx5KHNiKSkKIAkJbWFrZV9sZV9pdGVtX2hlYWQoJmloLCBOVUxMLCBLRVlfRk9STUFUXzNfNSwgU0RfT0ZGU0VULApAQCAtMTg3Nyw3ICsxODc0LDYgQEAKIAl9CiAJLy8gdGhlc2UgZG8gbm90IGdvIHRvIG9uLWRpc2sgc3RhdCBkYXRhCiAJaW5vZGUtPmlfaW5vID0gbGUzMl90b19jcHUoaWguaWhfa2V5Lmtfb2JqZWN0aWQpOwotCWlub2RlLT5pX2Jsa3NpemUgPSByZWlzZXJmc19kZWZhdWx0X2lvX3NpemU7CiAKIAkvLyBzdG9yZSBpbiBpbi1jb3JlIGlub2RlIHRoZSBrZXkgb2Ygc3RhdCBkYXRhIGFuZCB2ZXJzaW9uIGFsbAogCS8vIG9iamVjdCBpdGVtcyB3aWxsIGhhdmUgKGRpcmVjdG9yeSBpdGVtcyB3aWxsIGhhdmUgb2xkIG9mZnNldApAQCAtMTk3OCwxMSArMTk3NCwxMyBAQAogCSAqIGlwdXQgZG9lc24ndCBkZWFkbG9jayBpbiByZWlzZXJmc19kZWxldGVfeGF0dHJzLiBUaGUgbG9ja2luZwogCSAqIGNvZGUgcmVhbGx5IG5lZWRzIHRvIGJlIHJld29ya2VkLCBidXQgdGhpcyB3aWxsIHRha2UgY2FyZSBvZiBpdAogCSAqIGZvciBub3cuIC1qZWZmbSAqLworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKIAlpZiAoUkVJU0VSRlNfSShkaXIpLT5pX2FjbF9kZWZhdWx0ICYmICFJU19FUlIoUkVJU0VSRlNfSShkaXIpLT5pX2FjbF9kZWZhdWx0KSkgewogCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAJCWlwdXQoaW5vZGUpOwogCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCX0gZWxzZQorI2VuZGlmCiAJCWlwdXQoaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pb2N0bC5jIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwppbmRleCBhOTg2YjVlLi45YzU3NTc4IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pb2N0bC5jCisrKyBiL2ZzL3JlaXNlcmZzL2lvY3RsLmMKQEAgLTksNiArOSw3IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvc21wX2xvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KIAogc3RhdGljIGludCByZWlzZXJmc191bnBhY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApOwogCkBAIC05NCw2ICs5NSw0MCBAQAogCX0KIH0KIAorI2lmZGVmIENPTkZJR19DT01QQVQKK2xvbmcgcmVpc2VyZnNfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLAorCQkJCXVuc2lnbmVkIGxvbmcgYXJnKQoreworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgcmV0OworCisJLyogVGhlc2UgYXJlIGp1c3QgbWlzbmFtZWQsIHRoZXkgYWN0dWFsbHkgZ2V0L3B1dCBmcm9tL3RvIHVzZXIgYW4gaW50ICovCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFJFSVNFUkZTX0lPQzMyX1VOUEFDSzoKKwkJY21kID0gUkVJU0VSRlNfSU9DX1VOUEFDSzsKKwkJYnJlYWs7CisJY2FzZSBSRUlTRVJGU19JT0MzMl9HRVRGTEFHUzoKKwkJY21kID0gUkVJU0VSRlNfSU9DX0dFVEZMQUdTOworCQlicmVhazsKKwljYXNlIFJFSVNFUkZTX0lPQzMyX1NFVEZMQUdTOgorCQljbWQgPSBSRUlTRVJGU19JT0NfU0VURkxBR1M7CisJCWJyZWFrOworCWNhc2UgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTjoKKwkJY21kID0gUkVJU0VSRlNfSU9DX0dFVFZFUlNJT047CisJCWJyZWFrOworCWNhc2UgUkVJU0VSRlNfSU9DMzJfU0VUVkVSU0lPTjoKKwkJY21kID0gUkVJU0VSRlNfSU9DX1NFVFZFUlNJT047CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJfQorCWxvY2tfa2VybmVsKCk7CisJcmV0ID0gcmVpc2VyZnNfaW9jdGwoaW5vZGUsIGZpbGUsIGNtZCwgKHVuc2lnbmVkIGxvbmcpIGNvbXBhdF9wdHIoYXJnKSk7CisJdW5sb2NrX2tlcm5lbCgpOworCXJldHVybiByZXQ7Cit9CisjZW5kaWYKKwogLyoKICoqIHJlaXNlcmZzX3VucGFjawogKiogRnVuY3Rpb24gdHJ5IHRvIGNvbnZlcnQgdGFpbCBmcm9tIGRpcmVjdCBpdGVtIGludG8gaW5kaXJlY3QuCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKaW5kZXggOWIzNjcyZC4uZTZiNWNjZiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvam91cm5hbC5jCisrKyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwpAQCAtMTE4Niw2ICsxMTg2LDIxIEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKK3N0YXRpYyBpbnQgbmV3ZXJfamxfZG9uZShzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24pCit7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGNuLT5zYjsKKwliX2Jsb2NrbnJfdCBibG9ja25yID0gY24tPmJsb2NrbnI7CisKKwljbiA9IGNuLT5ocHJldjsKKwl3aGlsZSAoY24pIHsKKwkJaWYgKGNuLT5zYiA9PSBzYiAmJiBjbi0+YmxvY2tuciA9PSBibG9ja25yICYmIGNuLT5qbGlzdCAmJgorCQkgICAgYXRvbWljX3JlYWQoJmNuLT5qbGlzdC0+al9jb21taXRfbGVmdCkgIT0gMCkKKwkJCQkgICAgcmV0dXJuIDA7CisJCWNuID0gY24tPmhwcmV2OworCX0KKwlyZXR1cm4gMTsKK30KKwogc3RhdGljIHZvaWQgcmVtb3ZlX2pvdXJuYWxfaGFzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqKiwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICosIHVuc2lnbmVkIGxvbmcsCkBAIC0xNjA0LDYgKzE2MTksMzEgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHRlc3RfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQoreworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKKworCWlmIChqbC0+al9sZW4gPT0gMCB8fCBhdG9taWNfcmVhZCgmamwtPmpfbm9uemVyb2xlbikgPT0gMCkKKwkJcmV0dXJuIDE7CisKKwljbiA9IGpsLT5qX3JlYWxibG9jazsKKwl3aGlsZSAoY24pIHsKKwkJLyogaWYgdGhlIGJsb2NrbnIgPT0gMCwgdGhpcyBoYXMgYmVlbiBjbGVhcmVkIGZyb20gdGhlIGhhc2gsCisJCSAqKiBza2lwIGl0CisJCSAqLworCQlpZiAoY24tPmJsb2NrbnIgPT0gMCkgeworCQkJZ290byBuZXh0OworCQl9CisJCWlmIChjbi0+YmggJiYgIW5ld2VyX2psX2RvbmUoY24pKQorCQkJcmV0dXJuIDA7CisJICAgICAgbmV4dDoKKwkJY24gPSBjbi0+bmV4dDsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCXJldHVybiAwOworfQorCiBzdGF0aWMgaW50IHdyaXRlX29uZV90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLAogCQkJCSBzdHJ1Y3QgYnVmZmVyX2NodW5rICpjaHVuaykKQEAgLTM0MzMsMTYgKzM0NzMsNiBAQAogCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKIAl9CiAJdW5sb2NrX2tlcm5lbCgpOwotCS8qCi0JICogdGhpcyBpcyBhIGxpdHRsZSByYWNleSwgYnV0IHRoZXJlJ3Mgbm8gaGFybSBpbiBtaXNzaW5nCi0JICogdGhlIGZpbGVtYXBfZmRhdGFfd3JpdGUKLQkgKi8KLQlpZiAoIWF0b21pY19yZWFkKCZqb3VybmFsLT5qX2FzeW5jX3Rocm90dGxlKQotCSAgICAmJiAhcmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7Ci0JCWF0b21pY19pbmMoJmpvdXJuYWwtPmpfYXN5bmNfdGhyb3R0bGUpOwotCQlmaWxlbWFwX2ZkYXRhd3JpdGUocF9zX3NiLT5zX2JkZXYtPmJkX2lub2RlLT5pX21hcHBpbmcpOwotCQlhdG9taWNfZGVjKCZqb3VybmFsLT5qX2FzeW5jX3Rocm90dGxlKTsKLQl9CiB9CiAKIC8qCkBAIC0zODQ0LDcgKzM4NzQsOSBAQAogCQllbnRyeSA9IGpvdXJuYWwtPmpfam91cm5hbF9saXN0Lm5leHQ7CiAJCWpsID0gSk9VUk5BTF9MSVNUX0VOVFJZKGVudHJ5KTsKIAkJLyogdGhpcyBjaGVjayBzaG91bGQgYWx3YXlzIGJlIHJ1biwgdG8gc2VuZCBvbGQgbGlzdHMgdG8gZGlzayAqLwotCQlpZiAoamwtPmpfdGltZXN0YW1wIDwgKG5vdyAtIChKT1VSTkFMX01BWF9UUkFOU19BR0UgKiA0KSkpIHsKKwkJaWYgKGpsLT5qX3RpbWVzdGFtcCA8IChub3cgLSAoSk9VUk5BTF9NQVhfVFJBTlNfQUdFICogNCkpICYmCisJCSAgICBhdG9taWNfcmVhZCgmamwtPmpfY29tbWl0X2xlZnQpID09IDAgJiYKKwkJICAgIHRlc3RfdHJhbnNhY3Rpb24ocywgamwpKSB7CiAJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMocywgamwpOwogCQl9IGVsc2UgewogCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9uYW1laS5jIGIvZnMvcmVpc2VyZnMvbmFtZWkuYwppbmRleCBjNjE3MTBlLi4xNmU5Y2ZmIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9uYW1laS5jCisrKyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKQEAgLTE5LDggKzE5LDggQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CiAKLSNkZWZpbmUgSU5DX0RJUl9JTk9ERV9OTElOSyhpKSBpZiAoaS0+aV9ubGluayAhPSAxKSB7IGktPmlfbmxpbmsrKzsgaWYgKGktPmlfbmxpbmsgPj0gUkVJU0VSRlNfTElOS19NQVgpIGktPmlfbmxpbms9MTsgfQotI2RlZmluZSBERUNfRElSX0lOT0RFX05MSU5LKGkpIGlmIChpLT5pX25saW5rICE9IDEpIGktPmlfbmxpbmstLTsKKyNkZWZpbmUgSU5DX0RJUl9JTk9ERV9OTElOSyhpKSBpZiAoaS0+aV9ubGluayAhPSAxKSB7IGluY19ubGluayhpKTsgaWYgKGktPmlfbmxpbmsgPj0gUkVJU0VSRlNfTElOS19NQVgpIGktPmlfbmxpbms9MTsgfQorI2RlZmluZSBERUNfRElSX0lOT0RFX05MSU5LKGkpIGlmIChpLT5pX25saW5rICE9IDEpIGRyb3BfbmxpbmsoaSk7CiAKIC8vIGRpcmVjdG9yeSBpdGVtIGNvbnRhaW5zIGFycmF5IG9mIGVudHJ5IGhlYWRlcnMuIFRoaXMgcGVyZm9ybXMKIC8vIGJpbmFyeSBzZWFyY2ggdGhyb3VnaCB0aGF0IGFycmF5CkBAIC05MTMsNyArOTEzLDcgQEAKIAkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIiVzOiBlbXB0eSBkaXJlY3RvcnkgaGFzIG5saW5rICIKIAkJCQkgIiE9IDIgKCVkKSIsIF9fRlVOQ1RJT05fXywgaW5vZGUtPmlfbmxpbmspOwogCi0JaW5vZGUtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJcmVpc2VyZnNfdXBkYXRlX3NkKCZ0aCwgaW5vZGUpOwogCkBAIC05OTQsNyArOTk0LDcgQEAKIAkJaW5vZGUtPmlfbmxpbmsgPSAxOwogCX0KIAotCWlub2RlLT5pX25saW5rLS07CisJZHJvcF9ubGluayhpbm9kZSk7CiAKIAkvKgogCSAqIHdlIHNjaGVkdWxlIGJlZm9yZSBkb2luZyB0aGUgYWRkX3NhdmVfbGluayBjYWxsLCBzYXZlIHRoZSBsaW5rCkBAIC0xMDA2LDcgKzEwMDYsNyBAQAogCSAgICByZWlzZXJmc19jdXRfZnJvbV9pdGVtKCZ0aCwgJnBhdGgsICYoZGUuZGVfZW50cnlfa2V5KSwgZGlyLCBOVUxMLAogCQkJCSAgIDApOwogCWlmIChyZXR2YWwgPCAwKSB7Ci0JCWlub2RlLT5pX25saW5rKys7CisJCWluY19ubGluayhpbm9kZSk7CiAJCWdvdG8gZW5kX3VubGluazsKIAl9CiAJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwpAQCAtMTE0Myw3ICsxMTQzLDcgQEAKIAl9CiAKIAkvKiBpbmMgYmVmb3JlIHNjaGVkdWxpbmcgc28gcmVpc2VyZnNfdW5saW5rIGtub3dzIHdlIGFyZSBoZXJlICovCi0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CkBAIC0xNDczLDkgKzE0NzMsOSBAQAogCWlmIChuZXdfZGVudHJ5X2lub2RlKSB7CiAJCS8vIGFkanVzdCBsaW5rIG51bWJlciBvZiB0aGUgdmljdGltCiAJCWlmIChTX0lTRElSKG5ld19kZW50cnlfaW5vZGUtPmlfbW9kZSkpIHsKLQkJCW5ld19kZW50cnlfaW5vZGUtPmlfbmxpbmsgPSAwOworCQkJY2xlYXJfbmxpbmsobmV3X2RlbnRyeV9pbm9kZSk7CiAJCX0gZWxzZSB7Ci0JCQluZXdfZGVudHJ5X2lub2RlLT5pX25saW5rLS07CisJCQlkcm9wX25saW5rKG5ld19kZW50cnlfaW5vZGUpOwogCQl9CiAJCW5ld19kZW50cnlfaW5vZGUtPmlfY3RpbWUgPSBjdGltZTsKIAkJc2F2ZWxpbmsgPSBuZXdfZGVudHJ5X2lub2RlLT5pX25saW5rOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcmVzaXplLmMgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwppbmRleCAzOWNjN2Y0Li4zMTU2ODQ3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9yZXNpemUuYworKysgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwpAQCAtMjIsNiArMjIsNyBAQAogCWludCBlcnIgPSAwOwogCXN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqc2I7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICpiaXRtYXA7CisJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvICppbmZvOwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqb2xkX2JpdG1hcCA9IFNCX0FQX0JJVE1BUChzKTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CkBAIC0xMjcsMTYgKzEyOCwyMCBAQAogCQkgKiB0cmFuc2FjdGlvbiBiZWdpbnMsIGFuZCB0aGUgbmV3IGJpdG1hcHMgZG9uJ3QgbWF0dGVyIGlmIHRoZQogCQkgKiB0cmFuc2FjdGlvbiBmYWlscy4gKi8KIAkJZm9yIChpID0gYm1hcF9ucjsgaSA8IGJtYXBfbnJfbmV3OyBpKyspIHsKLQkJCWJpdG1hcFtpXS5iaCA9IHNiX2dldGJsayhzLCBpICogcy0+c19ibG9ja3NpemUgKiA4KTsKLQkJCW1lbXNldChiaXRtYXBbaV0uYmgtPmJfZGF0YSwgMCwgc2JfYmxvY2tzaXplKHNiKSk7Ci0JCQlyZWlzZXJmc190ZXN0X2FuZF9zZXRfbGVfYml0KDAsIGJpdG1hcFtpXS5iaC0+Yl9kYXRhKTsKKwkJCS8qIGRvbid0IHVzZSByZWFkX2JpdG1hcF9ibG9jayBzaW5jZSBpdCB3aWxsIGNhY2hlCisJCQkgKiB0aGUgdW5pbml0aWFsaXplZCBiaXRtYXAgKi8KKwkJCWJoID0gc2JfYnJlYWQocywgaSAqIHMtPnNfYmxvY2tzaXplICogOCk7CisJCQltZW1zZXQoYmgtPmJfZGF0YSwgMCwgc2JfYmxvY2tzaXplKHNiKSk7CisJCQlyZWlzZXJmc190ZXN0X2FuZF9zZXRfbGVfYml0KDAsIGJoLT5iX2RhdGEpOworCQkJcmVpc2VyZnNfY2FjaGVfYml0bWFwX21ldGFkYXRhKHMsIGJoLCBiaXRtYXAgKyBpKTsKIAotCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZShiaXRtYXBbaV0uYmgpOwotCQkJbWFya19idWZmZXJfZGlydHkoYml0bWFwW2ldLmJoKTsKLQkJCXN5bmNfZGlydHlfYnVmZmVyKGJpdG1hcFtpXS5iaCk7CisJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGJoKTsKKwkJCW1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKKwkJCXN5bmNfZGlydHlfYnVmZmVyKGJoKTsKIAkJCS8vIHVwZGF0ZSBiaXRtYXBfaW5mbyBzdHVmZgogCQkJYml0bWFwW2ldLmZpcnN0X3plcm9faGludCA9IDE7CiAJCQliaXRtYXBbaV0uZnJlZV9jb3VudCA9IHNiX2Jsb2Nrc2l6ZShzYikgKiA4IC0gMTsKKwkJCWJyZWxzZShiaCk7CiAJCX0KIAkJLyogZnJlZSBvbGQgYml0bWFwIGJsb2NrcyBhcnJheSAqLwogCQlTQl9BUF9CSVRNQVAocykgPSBiaXRtYXA7CkBAIC0xNTAsMzAgKzE1NSw0NiBAQAogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQkvKiBjb3JyZWN0IGxhc3QgYml0bWFwIGJsb2NrcyBpbiBvbGQgYW5kIG5ldyBkaXNrIGxheW91dCAqLwotCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocywgU0JfQVBfQklUTUFQKHMpW2JtYXBfbnIgLSAxXS5iaCwgMSk7CisJLyogRXh0ZW5kIG9sZCBsYXN0IGJpdG1hcCBibG9jayAtIG5ldyBibG9ja3MgaGF2ZSBiZWVuIG1hZGUgYXZhaWxhYmxlICovCisJaW5mbyA9IFNCX0FQX0JJVE1BUChzKSArIGJtYXBfbnIgLSAxOworCWJoID0gcmVpc2VyZnNfcmVhZF9iaXRtYXBfYmxvY2socywgYm1hcF9uciAtIDEpOworCWlmICghYmgpIHsKKwkJaW50IGplcnIgPSBqb3VybmFsX2VuZCgmdGgsIHMsIDEwKTsKKwkJaWYgKGplcnIpCisJCQlyZXR1cm4gamVycjsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaCwgMSk7CiAJZm9yIChpID0gYmxvY2tfcjsgaSA8IHMtPnNfYmxvY2tzaXplICogODsgaSsrKQotCQlyZWlzZXJmc190ZXN0X2FuZF9jbGVhcl9sZV9iaXQoaSwKLQkJCQkJICAgICAgIFNCX0FQX0JJVE1BUChzKVtibWFwX25yIC0KLQkJCQkJCQkgICAgICAgMV0uYmgtPmJfZGF0YSk7Ci0JU0JfQVBfQklUTUFQKHMpW2JtYXBfbnIgLSAxXS5mcmVlX2NvdW50ICs9IHMtPnNfYmxvY2tzaXplICogOCAtIGJsb2NrX3I7Ci0JaWYgKCFTQl9BUF9CSVRNQVAocylbYm1hcF9uciAtIDFdLmZpcnN0X3plcm9faGludCkKLQkJU0JfQVBfQklUTUFQKHMpW2JtYXBfbnIgLSAxXS5maXJzdF96ZXJvX2hpbnQgPSBibG9ja19yOworCQlyZWlzZXJmc190ZXN0X2FuZF9jbGVhcl9sZV9iaXQoaSwgYmgtPmJfZGF0YSk7CisJaW5mby0+ZnJlZV9jb3VudCArPSBzLT5zX2Jsb2Nrc2l6ZSAqIDggLSBibG9ja19yOworCWlmICghaW5mby0+Zmlyc3RfemVyb19oaW50KQorCQlpbmZvLT5maXJzdF96ZXJvX2hpbnQgPSBibG9ja19yOwogCi0Jam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgU0JfQVBfQklUTUFQKHMpW2JtYXBfbnIgLSAxXS5iaCk7CisJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgYmgpOworCWJyZWxzZShiaCk7CiAKLQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHMsIFNCX0FQX0JJVE1BUChzKVtibWFwX25yX25ldyAtIDFdLmJoLCAxKTsKKwkvKiBDb3JyZWN0IG5ldyBsYXN0IGJpdG1hcCBibG9jayAtIEl0IG1heSBub3QgYmUgZnVsbCAqLworCWluZm8gPSBTQl9BUF9CSVRNQVAocykgKyBibWFwX25yX25ldyAtIDE7CisJYmggPSByZWlzZXJmc19yZWFkX2JpdG1hcF9ibG9jayhzLCBibWFwX25yX25ldyAtIDEpOworCWlmICghYmgpIHsKKwkJaW50IGplcnIgPSBqb3VybmFsX2VuZCgmdGgsIHMsIDEwKTsKKwkJaWYgKGplcnIpCisJCQlyZXR1cm4gamVycjsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaCwgMSk7CiAJZm9yIChpID0gYmxvY2tfcl9uZXc7IGkgPCBzLT5zX2Jsb2Nrc2l6ZSAqIDg7IGkrKykKLQkJcmVpc2VyZnNfdGVzdF9hbmRfc2V0X2xlX2JpdChpLAotCQkJCQkgICAgIFNCX0FQX0JJVE1BUChzKVtibWFwX25yX25ldyAtCi0JCQkJCQkJICAgICAxXS5iaC0+Yl9kYXRhKTsKLQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBzLCBTQl9BUF9CSVRNQVAocylbYm1hcF9ucl9uZXcgLSAxXS5iaCk7CisJCXJlaXNlcmZzX3Rlc3RfYW5kX3NldF9sZV9iaXQoaSwgYmgtPmJfZGF0YSk7CisJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcywgYmgpOworCWJyZWxzZShiaCk7CiAKLQlTQl9BUF9CSVRNQVAocylbYm1hcF9ucl9uZXcgLSAxXS5mcmVlX2NvdW50IC09Ci0JICAgIHMtPnNfYmxvY2tzaXplICogOCAtIGJsb2NrX3JfbmV3OworCWluZm8tPmZyZWVfY291bnQgLT0gcy0+c19ibG9ja3NpemUgKiA4IC0gYmxvY2tfcl9uZXc7CiAJLyogRXh0cmVtZSBjYXNlIHdoZXJlIGxhc3QgYml0bWFwIGlzIHRoZSBvbmx5IHZhbGlkIGJsb2NrIGluIGl0c2VsZi4gKi8KLQlpZiAoIVNCX0FQX0JJVE1BUChzKVtibWFwX25yX25ldyAtIDFdLmZyZWVfY291bnQpCi0JCVNCX0FQX0JJVE1BUChzKVtibWFwX25yX25ldyAtIDFdLmZpcnN0X3plcm9faGludCA9IDA7CisJaWYgKCFpbmZvLT5mcmVlX2NvdW50KQorCQlpbmZvLT5maXJzdF96ZXJvX2hpbnQgPSAwOwogCS8qIHVwZGF0ZSBzdXBlciAqLwogCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocywgU0JfQlVGRkVSX1dJVEhfU0IocyksIDEpOwogCWZyZWVfYmxvY2tzID0gU0JfRlJFRV9CTE9DS1Mocyk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCA1NTY3MzI4Li5jODlhYTIzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9zdXBlci5jCisrKyBiL2ZzL3JlaXNlcmZzL3N1cGVyLmMKQEAgLTQzMiw3ICs0MzIsNiBAQAogCiBzdGF0aWMgdm9pZCByZWlzZXJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQogewotCWludCBpOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CiAJdGgudF90cmFuc19pZCA9IDA7CiAKQEAgLTQ2MiwxMCArNDYxLDcgQEAKIAkgKi8KIAlqb3VybmFsX3JlbGVhc2UoJnRoLCBzKTsKIAotCWZvciAoaSA9IDA7IGkgPCBTQl9CTUFQX05SKHMpOyBpKyspCi0JCWJyZWxzZShTQl9BUF9CSVRNQVAocylbaV0uYmgpOwotCi0JdmZyZWUoU0JfQVBfQklUTUFQKHMpKTsKKwlyZWlzZXJmc19mcmVlX2JpdG1hcF9jYWNoZShzKTsKIAogCWJyZWxzZShTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAKQEAgLTUxMCw4ICs1MDYsMTAgQEAKIAkgICAgU0xBQl9DVE9SX0NPTlNUUlVDVE9SKSB7CiAJCUlOSVRfTElTVF9IRUFEKCZlaS0+aV9wcmVhbGxvY19saXN0KTsKIAkJaW5vZGVfaW5pdF9vbmNlKCZlaS0+dmZzX2lub2RlKTsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiAJCWVpLT5pX2FjbF9hY2Nlc3MgPSBOVUxMOwogCQllaS0+aV9hY2xfZGVmYXVsdCA9IE5VTEw7CisjZW5kaWYKIAl9CiB9CiAKQEAgLTUzMCw5ICs1MjgsNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHJlaXNlcmZzX2lub2RlX2NhY2hlcCkpCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgInJlaXNlcmZzX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZCIpOworCWttZW1fY2FjaGVfZGVzdHJveShyZWlzZXJmc19pbm9kZV9jYWNoZXApOwogfQogCiAvKiB3ZSBkb24ndCBtYXJrIGlub2RlcyBkaXJ0eSwgd2UganVzdCBsb2cgdGhlbSAqLwpAQCAtNTYyLDYgKzU1OCw3IEBACiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIH0KIAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKIHN0YXRpYyB2b2lkIHJlaXNlcmZzX2NsZWFyX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwpAQCAtNTc2LDYgKzU3Myw5IEBACiAJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CiAJUkVJU0VSRlNfSShpbm9kZSktPmlfYWNsX2RlZmF1bHQgPSBOVUxMOwogfQorI2Vsc2UKKyNkZWZpbmUgcmVpc2VyZnNfY2xlYXJfaW5vZGUgTlVMTAorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfUVVPVEEKIHN0YXRpYyBzc2l6ZV90IHJlaXNlcmZzX3F1b3RhX3dyaXRlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNvbnN0IGNoYXIgKiwKQEAgLTcyNSwxMiArNzI1LDYgQEAKIAl7TlVMTCwgMCwgMH0sCiB9OwogCi1pbnQgcmVpc2VyZnNfZGVmYXVsdF9pb19zaXplID0gMTI4ICogMTAyNDsJLyogRGVmYXVsdCByZWNvbW1lbmRlZCBJL08gc2l6ZSBpcyAxMjhrLgotCQkJCQkJICAgVGhlcmUgbWlnaHQgYmUgYnJva2VuIGFwcGxpY2F0aW9ucyB0aGF0IGFyZQotCQkJCQkJICAgY29uZnVzZWQgYnkgdGhpcy4gVXNlIG5vbGFyZ2VpbyBtb3VudCBvcHRpb24KLQkJCQkJCSAgIHRvIGdldCB1c3VhbCBpL28gc2l6ZSA9IFBBR0VfU0laRS4KLQkJCQkJCSAqLwotCiAvKiBwcm9jZWVkIG9ubHkgb25lIG9wdGlvbiBmcm9tIGEgbGlzdCAqY3VyIC0gc3RyaW5nIGNvbnRhaW5pbmcgb2YgbW91bnQgb3B0aW9ucwogICAgb3B0cyAtIGFycmF5IG9mIG9wdGlvbnMgd2hpY2ggYXJlIGFjY2VwdGVkCiAgICBvcHRfYXJnIC0gaWYgb3B0aW9uIGlzIGZvdW5kIGFuZCByZXF1aXJlcyBhbiBhcmd1bWVudCBhbmQgaWYgaXQgaXMgc3BlY2lmZWQKQEAgLTk1OSwxOSArOTUzLDggQEAKIAkJfQogCiAJCWlmIChjID09ICd3JykgewotCQkJY2hhciAqcCA9IE5VTEw7Ci0JCQlpbnQgdmFsID0gc2ltcGxlX3N0cnRvdWwoYXJnLCAmcCwgMCk7Ci0KLQkJCWlmICgqcCAhPSAnXDAnKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBub24tbnVtZXJpYyB2YWx1ZSAlcyBmb3Igbm9sYXJnZWlvIG9wdGlvbiIsCi0JCQkJCQkgYXJnKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICh2YWwpCi0JCQkJcmVpc2VyZnNfZGVmYXVsdF9pb19zaXplID0gUEFHRV9TSVpFOwotCQkJZWxzZQotCQkJCXJlaXNlcmZzX2RlZmF1bHRfaW9fc2l6ZSA9IDEyOCAqIDEwMjQ7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmczogbm9sYXJnZWlvIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7CisJCQlyZXR1cm4gMDsKIAkJfQogCiAJCWlmIChjID09ICdqJykgewpAQCAtMTI1NiwxMTggKzEyMzksNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBsb2FkX2JpdG1hcF9pbmZvX2RhdGEgLSBTZXRzIHVwIHRoZSByZWlzZXJmc19iaXRtYXBfaW5mbyBzdHJ1Y3R1cmUgZnJvbSBkaXNrLgotICogQHNiIC0gc3VwZXJibG9jayBmb3IgdGhpcyBmaWxlc3lzdGVtCi0gKiBAYmkgLSB0aGUgYml0bWFwIGluZm8gdG8gYmUgbG9hZGVkLiBSZXF1aXJlcyB0aGF0IGJpLT5iaCBpcyB2YWxpZC4KLSAqCi0gKiBUaGlzIHJvdXRpbmUgY291bnRzIGhvdyBtYW55IGZyZWUgYml0cyB0aGVyZSBhcmUsIGZpbmRpbmcgdGhlIGZpcnN0IHplcm8KLSAqIGFzIGEgc2lkZSBlZmZlY3QuIENvdWxkIGFsc28gYmUgaW1wbGVtZW50ZWQgYXMgYSBsb29wIG9mIHRlc3RfYml0KCkgY2FsbHMsIG9yCi0gKiBhIGxvb3Agb2YgZmluZF9maXJzdF96ZXJvX2JpdCgpIGNhbGxzLiBUaGlzIGltcGxlbWVudGF0aW9uIGlzIHNpbWlsYXIgdG8KLSAqIGZpbmRfZmlyc3RfemVyb19iaXQoKSwgYnV0IGRvZXNuJ3QgcmV0dXJuIGFmdGVyIGl0IGZpbmRzIHRoZSBmaXJzdCBiaXQuCi0gKiBTaG91bGQgb25seSBiZSBjYWxsZWQgb24gZnMgbW91bnQsIGJ1dCBzaG91bGQgYmUgZmFpcmx5IGVmZmljaWVudCBhbnl3YXlzLgotICoKLSAqIGJpLT5maXJzdF96ZXJvX2hpbnQgaXMgY29uc2lkZXJlZCB1bnNldCBpZiBpdCA9PSAwLCBzaW5jZSB0aGUgYml0bWFwIGl0c2VsZgotICogd2lsbCAqIGludmFyaWFibHkgb2NjdXB0IGJsb2NrIDAgcmVwcmVzZW50ZWQgaW4gdGhlIGJpdG1hcC4gVGhlIG9ubHkKLSAqIGV4Y2VwdGlvbiB0byB0aGlzIGlzIHdoZW4gZnJlZV9jb3VudCBhbHNvID09IDAsIHNpbmNlIHRoZXJlIHdpbGwgYmUgbm8KLSAqIGZyZWUgYmxvY2tzIGF0IGFsbC4KLSAqLwotCi1zdGF0aWMgdm9pZCBsb2FkX2JpdG1hcF9pbmZvX2RhdGEoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKLQkJCQkgIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqYmkpCi17Ci0JdW5zaWduZWQgbG9uZyAqY3VyID0gKHVuc2lnbmVkIGxvbmcgKiliaS0+YmgtPmJfZGF0YTsKLQotCXdoaWxlICgoY2hhciAqKWN1ciA8IChiaS0+YmgtPmJfZGF0YSArIHNiLT5zX2Jsb2Nrc2l6ZSkpIHsKLQotCQkvKiBObyBuZWVkIHRvIHNjYW4gaWYgYWxsIDAncyBvciBhbGwgMSdzLgotCQkgKiBTaW5jZSB3ZSdyZSBvbmx5IGNvdW50aW5nIDAncywgd2UgY2FuIHNpbXBseSBpZ25vcmUgYWxsIDEncyAqLwotCQlpZiAoKmN1ciA9PSAwKSB7Ci0JCQlpZiAoYmktPmZpcnN0X3plcm9faGludCA9PSAwKSB7Ci0JCQkJYmktPmZpcnN0X3plcm9faGludCA9Ci0JCQkJICAgICgoY2hhciAqKWN1ciAtIGJpLT5iaC0+Yl9kYXRhKSA8PCAzOwotCQkJfQotCQkJYmktPmZyZWVfY291bnQgKz0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogODsKLQkJfSBlbHNlIGlmICgqY3VyICE9IH4wTCkgewotCQkJaW50IGI7Ci0JCQlmb3IgKGIgPSAwOyBiIDwgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpICogODsgYisrKSB7Ci0JCQkJaWYgKCFyZWlzZXJmc190ZXN0X2xlX2JpdChiLCBjdXIpKSB7Ci0JCQkJCWJpLT5mcmVlX2NvdW50Kys7Ci0JCQkJCWlmIChiaS0+Zmlyc3RfemVyb19oaW50ID09IDApCi0JCQkJCQliaS0+Zmlyc3RfemVyb19oaW50ID0KLQkJCQkJCSAgICAoKChjaGFyICopY3VyIC0KLQkJCQkJCSAgICAgIGJpLT5iaC0+Yl9kYXRhKSA8PCAzKSArIGI7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWN1cisrOwotCX0KLQotI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotLy8gVGhpcyBvdXRwdXRzIGEgbG90IG9mIHVubmVkZWQgaW5mbyBvbiBiaWcgRlNlcwotLy8gICAgcmVpc2VyZnNfd2FybmluZyAoImJpdG1hcCBsb2FkZWQgZnJvbSBibG9jayAlZDogJWQgZnJlZSBibG9ja3MiLAotLy8gICAgICAgICAgICAgICAgICAgIGJpLT5iaC0+Yl9ibG9ja25yLCBiaS0+ZnJlZV9jb3VudCk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCByZWFkX2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotCWludCBpLCBibWFwX25yOwotCi0JU0JfQVBfQklUTUFQKHMpID0KLQkgICAgdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9pbmZvKSAqIFNCX0JNQVBfTlIocykpOwotCWlmIChTQl9BUF9CSVRNQVAocykgPT0gMCkKLQkJcmV0dXJuIDE7Ci0JbWVtc2V0KFNCX0FQX0JJVE1BUChzKSwgMCwKLQkgICAgICAgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbykgKiBTQl9CTUFQX05SKHMpKTsKLQlmb3IgKGkgPSAwLCBibWFwX25yID0KLQkgICAgIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTIC8gcy0+c19ibG9ja3NpemUgKyAxOwotCSAgICAgaSA8IFNCX0JNQVBfTlIocyk7IGkrKywgYm1hcF9uciA9IHMtPnNfYmxvY2tzaXplICogOCAqIGkpIHsKLQkJU0JfQVBfQklUTUFQKHMpW2ldLmJoID0gc2JfZ2V0YmxrKHMsIGJtYXBfbnIpOwotCQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShTQl9BUF9CSVRNQVAocylbaV0uYmgpKQotCQkJbGxfcndfYmxvY2soUkVBRCwgMSwgJlNCX0FQX0JJVE1BUChzKVtpXS5iaCk7Ci0JfQotCWZvciAoaSA9IDA7IGkgPCBTQl9CTUFQX05SKHMpOyBpKyspIHsKLQkJd2FpdF9vbl9idWZmZXIoU0JfQVBfQklUTUFQKHMpW2ldLmJoKTsKLQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoU0JfQVBfQklUTUFQKHMpW2ldLmJoKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAyOTogcmVpc2VyZnMgcmVhZF9iaXRtYXBzOiAiCi0JCQkJCSAiYml0bWFwIGJsb2NrICgjJWx1KSByZWFkaW5nIGZhaWxlZCIsCi0JCQkJCSBTQl9BUF9CSVRNQVAocylbaV0uYmgtPmJfYmxvY2tucik7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgU0JfQk1BUF9OUihzKTsgaSsrKQotCQkJCWJyZWxzZShTQl9BUF9CSVRNQVAocylbaV0uYmgpOwotCQkJdmZyZWUoU0JfQVBfQklUTUFQKHMpKTsKLQkJCVNCX0FQX0JJVE1BUChzKSA9IE5VTEw7Ci0JCQlyZXR1cm4gMTsKLQkJfQotCQlsb2FkX2JpdG1hcF9pbmZvX2RhdGEocywgU0JfQVBfQklUTUFQKHMpICsgaSk7Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJlYWRfb2xkX2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQotewotCWludCBpOwotCXN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9jayAqcnMgPSBTQl9ESVNLX1NVUEVSX0JMT0NLKHMpOwotCWludCBibXAxID0gKFJFSVNFUkZTX09MRF9ESVNLX09GRlNFVF9JTl9CWVRFUyAvIHMtPnNfYmxvY2tzaXplKSArIDE7CS8qIGZpcnN0IG9mIGJpdG1hcCBibG9ja3MgKi8KLQotCS8qIHJlYWQgdHJ1ZSBiaXRtYXAgKi8KLQlTQl9BUF9CSVRNQVAocykgPQotCSAgICB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfYnVmZmVyX2luZm8gKikgKiBzYl9ibWFwX25yKHJzKSk7Ci0JaWYgKFNCX0FQX0JJVE1BUChzKSA9PSAwKQotCQlyZXR1cm4gMTsKLQotCW1lbXNldChTQl9BUF9CSVRNQVAocyksIDAsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfYnVmZmVyX2luZm8gKikgKiBzYl9ibWFwX25yKHJzKSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgc2JfYm1hcF9ucihycyk7IGkrKykgewotCQlTQl9BUF9CSVRNQVAocylbaV0uYmggPSBzYl9icmVhZChzLCBibXAxICsgaSk7Ci0JCWlmICghU0JfQVBfQklUTUFQKHMpW2ldLmJoKQotCQkJcmV0dXJuIDE7Ci0JCWxvYWRfYml0bWFwX2luZm9fZGF0YShzLCBTQl9BUF9CSVRNQVAocykgKyBpKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCByZWFkX3N1cGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IG9mZnNldCkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtMTQ2OSw3ICsxMzQwLDYgQEAKIC8qIGFmdGVyIGpvdXJuYWwgcmVwbGF5LCByZXJlYWQgYWxsIGJpdG1hcCBhbmQgc3VwZXIgYmxvY2tzICovCiBzdGF0aWMgaW50IHJlcmVhZF9tZXRhX2Jsb2NrcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMpCiB7Ci0JaW50IGk7CiAJbGxfcndfYmxvY2soUkVBRCwgMSwgJihTQl9CVUZGRVJfV0lUSF9TQihzKSkpOwogCXdhaXRfb25fYnVmZmVyKFNCX0JVRkZFUl9XSVRIX1NCKHMpKTsKIAlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShTQl9CVUZGRVJfV0lUSF9TQihzKSkpIHsKQEAgLTE0NzgsMjAgKzEzNDgsNyBAQAogCQlyZXR1cm4gMTsKIAl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgU0JfQk1BUF9OUihzKTsgaSsrKSB7Ci0JCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICYoU0JfQVBfQklUTUFQKHMpW2ldLmJoKSk7Ci0JCXdhaXRfb25fYnVmZmVyKFNCX0FQX0JJVE1BUChzKVtpXS5iaCk7Ci0JCWlmICghYnVmZmVyX3VwdG9kYXRlKFNCX0FQX0JJVE1BUChzKVtpXS5iaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZXJlYWRfbWV0YV9ibG9ja3MsIGVycm9yIHJlYWRpbmcgYml0bWFwIGJsb2NrIG51bWJlciAlZCBhdCAlbGx1IiwKLQkJCQkJIGksCi0JCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKVNCX0FQX0JJVE1BUChzKVtpXS4KLQkJCQkJIGJoLT5iX2Jsb2NrbnIpOwotCQkJcmV0dXJuIDE7Ci0JCX0KLQl9CiAJcmV0dXJuIDA7Ci0KIH0KIAogLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTE2NzIsNyArMTUyOSw2IEBACiBzdGF0aWMgaW50IHJlaXNlcmZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhLCBpbnQgc2lsZW50KQogewogCXN0cnVjdCBpbm9kZSAqcm9vdF9pbm9kZTsKLQlpbnQgajsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwogCWludCBvbGRfZm9ybWF0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGJsb2NrczsKQEAgLTE3NDksNyArMTYwNSw3IEBACiAJc2JpLT5zX21vdW50X3N0YXRlID0gU0JfUkVJU0VSRlNfU1RBVEUocyk7CiAJc2JpLT5zX21vdW50X3N0YXRlID0gUkVJU0VSRlNfVkFMSURfRlM7CiAKLQlpZiAob2xkX2Zvcm1hdCA/IHJlYWRfb2xkX2JpdG1hcHMocykgOiByZWFkX2JpdG1hcHMocykpIHsKKwlpZiAoKGVycnZhbCA9IHJlaXNlcmZzX2luaXRfYml0bWFwX2NhY2hlKHMpKSkgewogCQlTV0FSTihzaWxlbnQsIHMsCiAJCSAgICAgICJqbWFjZC04OiByZWlzZXJmc19maWxsX3N1cGVyOiB1bmFibGUgdG8gcmVhZCBiaXRtYXAiKTsKIAkJZ290byBlcnJvcjsKQEAgLTE4MzEsNiArMTY4Nyw4IEBACiAJaWYgKGlzX3JlaXNlcmZzXzNfNShycykKIAkgICAgfHwgKGlzX3JlaXNlcmZzX2pyKHJzKSAmJiBTQl9WRVJTSU9OKHMpID09IFJFSVNFUkZTX1ZFUlNJT05fMSkpCiAJCXNldF9iaXQoUkVJU0VSRlNfM181LCAmKHNiaS0+c19wcm9wZXJ0aWVzKSk7CisJZWxzZSBpZiAob2xkX2Zvcm1hdCkKKwkJc2V0X2JpdChSRUlTRVJGU19PTERfRk9STUFULCAmKHNiaS0+c19wcm9wZXJ0aWVzKSk7CiAJZWxzZQogCQlzZXRfYml0KFJFSVNFUkZTXzNfNiwgJihzYmktPnNfcHJvcGVydGllcykpOwogCkBAIC0xOTE2LDE5ICsxNzc0LDE3IEBACiAJaWYgKGppbml0X2RvbmUpIHsJLyoga2lsbCB0aGUgY29tbWl0IHRocmVhZCwgZnJlZSBqb3VybmFsIHJhbSAqLwogCQlqb3VybmFsX3JlbGVhc2VfZXJyb3IoTlVMTCwgcyk7CiAJfQotCWlmIChTQl9ESVNLX1NVUEVSX0JMT0NLKHMpKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBTQl9CTUFQX05SKHMpOyBqKyspIHsKLQkJCWlmIChTQl9BUF9CSVRNQVAocykpCi0JCQkJYnJlbHNlKFNCX0FQX0JJVE1BUChzKVtqXS5iaCk7Ci0JCX0KLQkJdmZyZWUoU0JfQVBfQklUTUFQKHMpKTsKLQl9CisKKwlyZWlzZXJmc19mcmVlX2JpdG1hcF9jYWNoZShzKTsKIAlpZiAoU0JfQlVGRkVSX1dJVEhfU0IocykpCiAJCWJyZWxzZShTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAjaWZkZWYgQ09ORklHX1FVT1RBCi0JZm9yIChqID0gMDsgaiA8IE1BWFFVT1RBUzsgaisrKSB7Ci0JCWtmcmVlKHNiaS0+c19xZl9uYW1lc1tqXSk7Ci0JCXNiaS0+c19xZl9uYW1lc1tqXSA9IE5VTEw7CisJeworCQlpbnQgajsKKwkJZm9yIChqID0gMDsgaiA8IE1BWFFVT1RBUzsgaisrKSB7CisJCQlrZnJlZShzYmktPnNfcWZfbmFtZXNbal0pOworCQkJc2JpLT5zX3FmX25hbWVzW2pdID0gTlVMTDsKKwkJfQogCX0KICNlbmRpZgogCWtmcmVlKHNiaSk7CmRpZmYgLS1naXQgYS9mcy9yb21mcy9pbm9kZS5jIGIvZnMvcm9tZnMvaW5vZGUuYwppbmRleCAyMmVlZDYxLi5kZGNkOWUxIDEwMDY0NAotLS0gYS9mcy9yb21mcy9pbm9kZS5jCisrKyBiL2ZzL3JvbWZzL2lub2RlLmMKQEAgLTU4OSw4ICs1ODksNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHJvbWZzX2lub2RlX2NhY2hlcCkpCi0JCXByaW50ayhLRVJOX0lORk8gInJvbWZzX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJvbWZzX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQgcm9tZnNfcmVtb3VudChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgKmZsYWdzLCBjaGFyICpkYXRhKQpkaWZmIC0tZ2l0IGEvZnMvc2VsZWN0LmMgYi9mcy9zZWxlY3QuYwppbmRleCAzM2I3MmJhLi5kY2JjMTExIDEwMDY0NAotLS0gYS9mcy9zZWxlY3QuYworKysgYi9mcy9zZWxlY3QuYwpAQCAtNjU4LDggKzY1OCw2IEBACiAgCXVuc2lnbmVkIGludCBpOwogCXN0cnVjdCBwb2xsX2xpc3QgKmhlYWQ7CiAgCXN0cnVjdCBwb2xsX2xpc3QgKndhbGs7Ci0Jc3RydWN0IGZkdGFibGUgKmZkdDsKLQlpbnQgbWF4X2Zkc2V0OwogCS8qIEFsbG9jYXRlIHNtYWxsIGFyZ3VtZW50cyBvbiB0aGUgc3RhY2sgdG8gc2F2ZSBtZW1vcnkgYW5kIGJlCiAJICAgZmFzdGVyIC0gdXNlIGxvbmcgdG8gbWFrZSBzdXJlIHRoZSBidWZmZXIgaXMgYWxpZ25lZCBwcm9wZXJseQogCSAgIG9uIDY0IGJpdCBhcmNocyB0byBhdm9pZCB1bmFsaWduZWQgYWNjZXNzICovCkBAIC02NjcsMTEgKzY2NSw3IEBACiAJc3RydWN0IHBvbGxfbGlzdCAqc3RhY2tfcHAgPSBOVUxMOwogCiAJLyogRG8gYSBzYW5pdHkgY2hlY2sgb24gbmZkcyAuLi4gKi8KLQlyY3VfcmVhZF9sb2NrKCk7Ci0JZmR0ID0gZmlsZXNfZmR0YWJsZShjdXJyZW50LT5maWxlcyk7Ci0JbWF4X2Zkc2V0ID0gZmR0LT5tYXhfZmRzZXQ7Ci0JcmN1X3JlYWRfdW5sb2NrKCk7Ci0JaWYgKG5mZHMgPiBtYXhfZmRzZXQgJiYgbmZkcyA+IE9QRU5fTUFYKQorCWlmIChuZmRzID4gY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9OT0ZJTEVdLnJsaW1fY3VyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXBvbGxfaW5pdHdhaXQoJnRhYmxlKTsKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2ZpbGUuYyBiL2ZzL3NtYmZzL2ZpbGUuYwppbmRleCBkYWU2NzA0Li41MDc4NGQxIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9maWxlLmMKKysrIGIvZnMvc21iZnMvZmlsZS5jCkBAIC0yMTQsMTMgKzIxNCwxNSBAQAogfQogCiBzdGF0aWMgc3NpemVfdAotc21iX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNoYXIgX191c2VyICogYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3NtYl9maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCisJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CisJc3RydWN0IGZpbGUgKiBmaWxlID0gaW9jYi0+a2lfZmlscDsKIAlzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5ID0gZmlsZS0+Zl9kZW50cnk7CiAJc3NpemVfdAlzdGF0dXM7CiAKIAlWRVJCT1NFKCJmaWxlICVzLyVzLCBjb3VudD0lbHVAJWx1XG4iLCBERU5UUllfUEFUSChkZW50cnkpLAotCQkodW5zaWduZWQgbG9uZykgY291bnQsICh1bnNpZ25lZCBsb25nKSAqcHBvcyk7CisJCSh1bnNpZ25lZCBsb25nKSBpb2NiLT5raV9sZWZ0LCAodW5zaWduZWQgbG9uZykgcG9zKTsKIAogCXN0YXR1cyA9IHNtYl9yZXZhbGlkYXRlX2lub2RlKGRlbnRyeSk7CiAJaWYgKHN0YXR1cykgewpAQCAtMjMzLDcgKzIzNSw3IEBACiAJCShsb25nKWRlbnRyeS0+ZF9pbm9kZS0+aV9zaXplLAogCQlkZW50cnktPmRfaW5vZGUtPmlfZmxhZ3MsIGRlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZSk7CiAKLQlzdGF0dXMgPSBnZW5lcmljX2ZpbGVfcmVhZChmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKKwlzdGF0dXMgPSBnZW5lcmljX2ZpbGVfYWlvX3JlYWQoaW9jYiwgaW92LCBucl9zZWdzLCBwb3MpOwogb3V0OgogCXJldHVybiBzdGF0dXM7CiB9CkBAIC0zMTcsMTQgKzMxOSwxNiBAQAogICogV3JpdGUgdG8gYSBmaWxlICh0aHJvdWdoIHRoZSBwYWdlIGNhY2hlKS4KICAqLwogc3RhdGljIHNzaXplX3QKLXNtYl9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3NtYl9maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKKwlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBkZW50cnkgKiBkZW50cnkgPSBmaWxlLT5mX2RlbnRyeTsKIAlzc2l6ZV90CXJlc3VsdDsKIAogCVZFUkJPU0UoImZpbGUgJXMvJXMsIGNvdW50PSVsdUAlbHVcbiIsCiAJCURFTlRSWV9QQVRIKGRlbnRyeSksCi0JCSh1bnNpZ25lZCBsb25nKSBjb3VudCwgKHVuc2lnbmVkIGxvbmcpICpwcG9zKTsKKwkJKHVuc2lnbmVkIGxvbmcpIGlvY2ItPmtpX2xlZnQsICh1bnNpZ25lZCBsb25nKSBwb3MpOwogCiAJcmVzdWx0ID0gc21iX3JldmFsaWRhdGVfaW5vZGUoZGVudHJ5KTsKIAlpZiAocmVzdWx0KSB7CkBAIC0zMzcsOCArMzQxLDggQEAKIAlpZiAocmVzdWx0KQogCQlnb3RvIG91dDsKIAotCWlmIChjb3VudCA+IDApIHsKLQkJcmVzdWx0ID0gZ2VuZXJpY19maWxlX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOworCWlmIChpb2NiLT5raV9sZWZ0ID4gMCkgeworCQlyZXN1bHQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgcG9zKTsKIAkJVkVSQk9TRSgicG9zPSVsZCwgc2l6ZT0lbGQsIG10aW1lPSVsZCwgYXRpbWU9JWxkXG4iLAogCQkJKGxvbmcpIGZpbGUtPmZfcG9zLCAobG9uZykgZGVudHJ5LT5kX2lub2RlLT5pX3NpemUsCiAJCQlkZW50cnktPmRfaW5vZGUtPmlfbXRpbWUsIGRlbnRyeS0+ZF9pbm9kZS0+aV9hdGltZSk7CkBAIC00MDIsOCArNDA2LDEwIEBACiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNtYl9maWxlX29wZXJhdGlvbnMgPQogewogCS5sbHNlZWsJCT0gcmVtb3RlX2xsc2VlaywKLQkucmVhZAkJPSBzbWJfZmlsZV9yZWFkLAotCS53cml0ZQkJPSBzbWJfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gc21iX2ZpbGVfYWlvX3JlYWQsCisJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQk9IHNtYl9maWxlX2Fpb193cml0ZSwKIAkuaW9jdGwJCT0gc21iX2lvY3RsLAogCS5tbWFwCQk9IHNtYl9maWxlX21tYXAsCiAJLm9wZW4JCT0gc21iX2ZpbGVfb3BlbiwKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL2lub2RlLmMgYi9mcy9zbWJmcy9pbm9kZS5jCmluZGV4IGExZWQ2NTcuLjJjMTIyZWUgMTAwNjQ0Ci0tLSBhL2ZzL3NtYmZzL2lub2RlLmMKKysrIGIvZnMvc21iZnMvaW5vZGUuYwpAQCAtODksOCArODksNyBAQAogCiBzdGF0aWMgdm9pZCBkZXN0cm95X2lub2RlY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHNtYl9pbm9kZV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPICJzbWJfaW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlrbWVtX2NhY2hlX2Rlc3Ryb3koc21iX2lub2RlX2NhY2hlcCk7CiB9CiAKIHN0YXRpYyBpbnQgc21iX3JlbW91bnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50ICpmbGFncywgY2hhciAqZGF0YSkKQEAgLTE2Nyw3ICsxNjYsNiBAQAogCWZhdHRyLT5mX210aW1lCT0gaW5vZGUtPmlfbXRpbWU7CiAJZmF0dHItPmZfY3RpbWUJPSBpbm9kZS0+aV9jdGltZTsKIAlmYXR0ci0+Zl9hdGltZQk9IGlub2RlLT5pX2F0aW1lOwotCWZhdHRyLT5mX2Jsa3NpemU9IGlub2RlLT5pX2Jsa3NpemU7CiAJZmF0dHItPmZfYmxvY2tzCT0gaW5vZGUtPmlfYmxvY2tzOwogCiAJZmF0dHItPmF0dHIJPSBTTUJfSShpbm9kZSktPmF0dHI7CkBAIC0yMDEsNyArMTk5LDYgQEAKIAlpbm9kZS0+aV91aWQJPSBmYXR0ci0+Zl91aWQ7CiAJaW5vZGUtPmlfZ2lkCT0gZmF0dHItPmZfZ2lkOwogCWlub2RlLT5pX2N0aW1lCT0gZmF0dHItPmZfY3RpbWU7Ci0JaW5vZGUtPmlfYmxrc2l6ZT0gZmF0dHItPmZfYmxrc2l6ZTsKIAlpbm9kZS0+aV9ibG9ja3MgPSBmYXR0ci0+Zl9ibG9ja3M7CiAJaW5vZGUtPmlfc2l6ZQk9IGZhdHRyLT5mX3NpemU7CiAJaW5vZGUtPmlfbXRpbWUJPSBmYXR0ci0+Zl9tdGltZTsKZGlmZiAtLWdpdCBhL2ZzL3NtYmZzL3Byb2MuYyBiL2ZzL3NtYmZzL3Byb2MuYwppbmRleCBjMzQ5NTA1Li40MGUxNzRkIDEwMDY0NAotLS0gYS9mcy9zbWJmcy9wcm9jLmMKKysrIGIvZnMvc21iZnMvcHJvYy5jCkBAIC0xODI2LDcgKzE4MjYsNiBAQAogCWZhdHRyLT5mX25saW5rID0gMTsKIAlmYXR0ci0+Zl91aWQgPSBzZXJ2ZXItPm1udC0+dWlkOwogCWZhdHRyLT5mX2dpZCA9IHNlcnZlci0+bW50LT5naWQ7Ci0JZmF0dHItPmZfYmxrc2l6ZSA9IFNNQl9TVF9CTEtTSVpFOwogCWZhdHRyLT5mX3VuaXggPSAwOwogfQogCmRpZmYgLS1naXQgYS9mcy9zbWJmcy9yZXF1ZXN0LmMgYi9mcy9zbWJmcy9yZXF1ZXN0LmMKaW5kZXggYzhlOTYxOS4uMGZiNzQ2OSAxMDA2NDQKLS0tIGEvZnMvc21iZnMvcmVxdWVzdC5jCisrKyBiL2ZzL3NtYmZzL3JlcXVlc3QuYwpAQCAtNDksOCArNDksNyBAQAogCiB2b2lkIHNtYl9kZXN0cm95X3JlcXVlc3RfY2FjaGUodm9pZCkKIHsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KHJlcV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPICJzbWJfZGVzdHJveV9yZXF1ZXN0X2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJlcV9jYWNoZXApOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvc3BsaWNlLmMgYi9mcy9zcGxpY2UuYwppbmRleCA2ODRiY2EzLi4xM2U5MmRkIDEwMDY0NAotLS0gYS9mcy9zcGxpY2UuYworKysgYi9mcy9zcGxpY2UuYwpAQCAtMTIsNyArMTIsNyBAQAogICogSmVucyB0byBzdXBwb3J0IHNwbGljaW5nIHRvIGZpbGVzLCBuZXR3b3JrLCBkaXJlY3Qgc3BsaWNpbmcsIGV0YyBhbmQKICAqIGZpeGluZyBsb3RzIG9mIGJ1Z3MuCiAgKgotICogQ29weXJpZ2h0IChDKSAyMDA1LTIwMDYgSmVucyBBeGJvZSA8YXhib2VAc3VzZS5kZT4KKyAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IEplbnMgQXhib2UgPGF4Ym9lQGtlcm5lbC5kaz4KICAqIENvcHlyaWdodCAoQykgMjAwNS0yMDA2IExpbnVzIFRvcnZhbGRzIDx0b3J2YWxkc0Bvc2RsLm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBJbmdvIE1vbG5hciA8bWluZ29AZWx0ZS5odT4KICAqCmRpZmYgLS1naXQgYS9mcy9zdGF0LmMgYi9mcy9zdGF0LmMKaW5kZXggM2E0NGRjZi4uNjBhMzFkNSAxMDA2NDQKLS0tIGEvZnMvc3RhdC5jCisrKyBiL2ZzL3N0YXQuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CiAjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9zeXNjYWxscy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMzIsNyArMzMsNyBAQAogCXN0YXQtPmN0aW1lID0gaW5vZGUtPmlfY3RpbWU7CiAJc3RhdC0+c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAlzdGF0LT5ibG9ja3MgPSBpbm9kZS0+aV9ibG9ja3M7Ci0Jc3RhdC0+Ymxrc2l6ZSA9IGlub2RlLT5pX2Jsa3NpemU7CisJc3RhdC0+Ymxrc2l6ZSA9ICgxIDw8IGlub2RlLT5pX2Jsa2JpdHMpOwogfQogCiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsbGF0dHIpOwpkaWZmIC0tZ2l0IGEvZnMvc3VwZXIuYyBiL2ZzL3N1cGVyLmMKaW5kZXggNWM0Yzk0ZC4uYWVjOTlkZCAxMDA2NDQKLS0tIGEvZnMvc3VwZXIuYworKysgYi9mcy9zdXBlci5jCkBAIC0xOTksNyArMTk5LDcgQEAKICAqCXN1Y2Nlc3MsIDAgaWYgd2UgaGFkIGZhaWxlZCAoc3VwZXJibG9jayBjb250ZW50cyB3YXMgYWxyZWFkeSBkZWFkIG9yCiAgKglkeWluZyB3aGVuIGdyYWJfc3VwZXIoKSBoYWQgYmVlbiBjYWxsZWQpLgogICovCi1zdGF0aWMgaW50IGdyYWJfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQorc3RhdGljIGludCBncmFiX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcykgX19yZWxlYXNlcyhzYl9sb2NrKQogewogCXMtPnNfY291bnQrKzsKIAlzcGluX3VubG9jaygmc2JfbG9jayk7CkBAIC0yMjAsNiArMjIwLDM3IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBXcml0ZSBvdXQgYW5kIHdhaXQgdXBvbiBhbGwgZGlydHkgZGF0YSBhc3NvY2lhdGVkIHdpdGggdGhpcworICogc3VwZXJibG9jay4gIEZpbGVzeXN0ZW0gZGF0YSBhcyB3ZWxsIGFzIHRoZSB1bmRlcmx5aW5nIGJsb2NrCisgKiBkZXZpY2UuICBUYWtlcyB0aGUgc3VwZXJibG9jayBsb2NrLiAgUmVxdWlyZXMgYSBzZWNvbmQgYmxrZGV2CisgKiBmbHVzaCBieSB0aGUgY2FsbGVyIHRvIGNvbXBsZXRlIHRoZSBvcGVyYXRpb24uCisgKi8KK3ZvaWQgX19mc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCXN5bmNfaW5vZGVzX3NiKHNiLCAwKTsKKwlEUVVPVF9TWU5DKHNiKTsKKwlsb2NrX3N1cGVyKHNiKTsKKwlpZiAoc2ItPnNfZGlydCAmJiBzYi0+c19vcC0+d3JpdGVfc3VwZXIpCisJCXNiLT5zX29wLT53cml0ZV9zdXBlcihzYik7CisJdW5sb2NrX3N1cGVyKHNiKTsKKwlpZiAoc2ItPnNfb3AtPnN5bmNfZnMpCisJCXNiLT5zX29wLT5zeW5jX2ZzKHNiLCAxKTsKKwlzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOworCXN5bmNfaW5vZGVzX3NiKHNiLCAxKTsKK30KKworLyoKKyAqIFdyaXRlIG91dCBhbmQgd2FpdCB1cG9uIGFsbCBkaXJ0eSBkYXRhIGFzc29jaWF0ZWQgd2l0aCB0aGlzCisgKiBzdXBlcmJsb2NrLiAgRmlsZXN5c3RlbSBkYXRhIGFzIHdlbGwgYXMgdGhlIHVuZGVybHlpbmcgYmxvY2sKKyAqIGRldmljZS4gIFRha2VzIHRoZSBzdXBlcmJsb2NrIGxvY2suCisgKi8KK2ludCBmc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQoreworCV9fZnN5bmNfc3VwZXIoc2IpOworCXJldHVybiBzeW5jX2Jsb2NrZGV2KHNiLT5zX2JkZXYpOworfQorCiAvKioKICAqCWdlbmVyaWNfc2h1dGRvd25fc3VwZXIJLQljb21tb24gaGVscGVyIGZvciAtPmtpbGxfc2IoKQogICoJQHNiOiBzdXBlcmJsb2NrIHRvIGtpbGwKQEAgLTU0MCw4ICs1NzEsMTAgQEAKIHsKIAlpbnQgcmV0dmFsOwogCQorI2lmZGVmIENPTkZJR19CTE9DSwogCWlmICghKGZsYWdzICYgTVNfUkRPTkxZKSAmJiBiZGV2X3JlYWRfb25seShzYi0+c19iZGV2KSkKIAkJcmV0dXJuIC1FQUNDRVM7CisjZW5kaWYKIAlpZiAoZmxhZ3MgJiBNU19SRE9OTFkpCiAJCWFjY3RfYXV0b19jbG9zZShzYik7CiAJc2hyaW5rX2RjYWNoZV9zYihzYik7CkBAIC02NjEsNiArNjk0LDcgQEAKIAogRVhQT1JUX1NZTUJPTChraWxsX2xpdHRlcl9zdXBlcik7CiAKKyNpZmRlZiBDT05GSUdfQkxPQ0sKIHN0YXRpYyBpbnQgc2V0X2JkZXZfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCB2b2lkICpkYXRhKQogewogCXMtPnNfYmRldiA9IGRhdGE7CkBAIC03NTYsNiArNzkwLDcgQEAKIH0KIAogRVhQT1JUX1NZTUJPTChraWxsX2Jsb2NrX3N1cGVyKTsKKyNlbmRpZgogCiBpbnQgZ2V0X3NiX25vZGV2KHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlICpmc190eXBlLAogCWludCBmbGFncywgdm9pZCAqZGF0YSwKZGlmZiAtLWdpdCBhL2ZzL3N5bmMuYyBiL2ZzL3N5bmMuYwppbmRleCA5NTVhZWYwLi4xZGU3NDdiIDEwMDY0NAotLS0gYS9mcy9zeW5jLmMKKysrIGIvZnMvc3luYy5jCkBAIC0xMCwxMSArMTAsMTI0IEBACiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L3F1b3Rhb3BzLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KIAogI2RlZmluZSBWQUxJRF9GTEFHUyAoU1lOQ19GSUxFX1JBTkdFX1dBSVRfQkVGT1JFfFNZTkNfRklMRV9SQU5HRV9XUklURXwgXAogCQkJU1lOQ19GSUxFX1JBTkdFX1dBSVRfQUZURVIpCiAKIC8qCisgKiBzeW5jIGV2ZXJ5dGhpbmcuICBTdGFydCBvdXQgYnkgd2FraW5nIHBkZmx1c2gsIGJlY2F1c2UgdGhhdCB3cml0ZXMgYmFjaworICogYWxsIHF1ZXVlcyBpbiBwYXJhbGxlbC4KKyAqLworc3RhdGljIHZvaWQgZG9fc3luYyh1bnNpZ25lZCBsb25nIHdhaXQpCit7CisJd2FrZXVwX3BkZmx1c2goMCk7CisJc3luY19pbm9kZXMoMCk7CQkvKiBBbGwgbWFwcGluZ3MsIGlub2RlcyBhbmQgdGhlaXIgYmxvY2tkZXZzICovCisJRFFVT1RfU1lOQyhOVUxMKTsKKwlzeW5jX3N1cGVycygpOwkJLyogV3JpdGUgdGhlIHN1cGVyYmxvY2tzICovCisJc3luY19maWxlc3lzdGVtcygwKTsJLyogU3RhcnQgc3luY2luZyB0aGUgZmlsZXN5c3RlbXMgKi8KKwlzeW5jX2ZpbGVzeXN0ZW1zKHdhaXQpOwkvKiBXYWl0aW5nbHkgc3luYyB0aGUgZmlsZXN5c3RlbXMgKi8KKwlzeW5jX2lub2Rlcyh3YWl0KTsJLyogTWFwcGluZ3MsIGlub2RlcyBhbmQgYmxvY2tkZXZzLCBhZ2Fpbi4gKi8KKwlpZiAoIXdhaXQpCisJCXByaW50aygiRW1lcmdlbmN5IFN5bmMgY29tcGxldGVcbiIpOworCWlmICh1bmxpa2VseShsYXB0b3BfbW9kZSkpCisJCWxhcHRvcF9zeW5jX2NvbXBsZXRpb24oKTsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19zeW5jKHZvaWQpCit7CisJZG9fc3luYygxKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBlbWVyZ2VuY3lfc3luYyh2b2lkKQoreworCXBkZmx1c2hfb3BlcmF0aW9uKGRvX3N5bmMsIDApOworfQorCisvKgorICogR2VuZXJpYyBmdW5jdGlvbiB0byBmc3luYyBhIGZpbGUuCisgKgorICogZmlscCBtYXkgYmUgTlVMTCBpZiBjYWxsZWQgdmlhIHRoZSBtc3luYyBvZiBhIHZtYS4KKyAqLworaW50IGZpbGVfZnN5bmMoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQoreworCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCBzdXBlcl9ibG9jayAqIHNiOworCWludCByZXQsIGVycjsKKworCS8qIHN5bmMgdGhlIGlub2RlIHRvIGJ1ZmZlcnMgKi8KKwlyZXQgPSB3cml0ZV9pbm9kZV9ub3coaW5vZGUsIDApOworCisJLyogc3luYyB0aGUgc3VwZXJibG9jayB0byBidWZmZXJzICovCisJc2IgPSBpbm9kZS0+aV9zYjsKKwlsb2NrX3N1cGVyKHNiKTsKKwlpZiAoc2ItPnNfb3AtPndyaXRlX3N1cGVyKQorCQlzYi0+c19vcC0+d3JpdGVfc3VwZXIoc2IpOworCXVubG9ja19zdXBlcihzYik7CisKKwkvKiAuLiBmaW5hbGx5IHN5bmMgdGhlIGJ1ZmZlcnMgdG8gZGlzayAqLworCWVyciA9IHN5bmNfYmxvY2tkZXYoc2ItPnNfYmRldik7CisJaWYgKCFyZXQpCisJCXJldCA9IGVycjsKKwlyZXR1cm4gcmV0OworfQorCitsb25nIGRvX2ZzeW5jKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgZGF0YXN5bmMpCit7CisJaW50IHJldDsKKwlpbnQgZXJyOworCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOworCisJaWYgKCFmaWxlLT5mX29wIHx8ICFmaWxlLT5mX29wLT5mc3luYykgeworCQkvKiBXaHk/ICBXZSBjYW4gc3RpbGwgY2FsbCBmaWxlbWFwX2ZkYXRhd3JpdGUgKi8KKwkJcmV0ID0gLUVJTlZBTDsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0ID0gZmlsZW1hcF9mZGF0YXdyaXRlKG1hcHBpbmcpOworCisJLyoKKwkgKiBXZSBuZWVkIHRvIHByb3RlY3QgYWdhaW5zdCBjb25jdXJyZW50IHdyaXRlcnMsIHdoaWNoIGNvdWxkIGNhdXNlCisJICogbGl2ZWxvY2tzIGluIGZzeW5jX2J1ZmZlcnNfbGlzdCgpLgorCSAqLworCW11dGV4X2xvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOworCWVyciA9IGZpbGUtPmZfb3AtPmZzeW5jKGZpbGUsIGZpbGUtPmZfZGVudHJ5LCBkYXRhc3luYyk7CisJaWYgKCFyZXQpCisJCXJldCA9IGVycjsKKwltdXRleF91bmxvY2soJm1hcHBpbmctPmhvc3QtPmlfbXV0ZXgpOworCWVyciA9IGZpbGVtYXBfZmRhdGF3YWl0KG1hcHBpbmcpOworCWlmICghcmV0KQorCQlyZXQgPSBlcnI7CitvdXQ6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGxvbmcgX19kb19mc3luYyh1bnNpZ25lZCBpbnQgZmQsIGludCBkYXRhc3luYykKK3sKKwlzdHJ1Y3QgZmlsZSAqZmlsZTsKKwlpbnQgcmV0ID0gLUVCQURGOworCisJZmlsZSA9IGZnZXQoZmQpOworCWlmIChmaWxlKSB7CisJCXJldCA9IGRvX2ZzeW5jKGZpbGUsIGRhdGFzeW5jKTsKKwkJZnB1dChmaWxlKTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c19mc3luYyh1bnNpZ25lZCBpbnQgZmQpCit7CisJcmV0dXJuIF9fZG9fZnN5bmMoZmQsIDApOworfQorCithc21saW5rYWdlIGxvbmcgc3lzX2ZkYXRhc3luYyh1bnNpZ25lZCBpbnQgZmQpCit7CisJcmV0dXJuIF9fZG9fZnN5bmMoZmQsIDEpOworfQorCisvKgogICogc3lzX3N5bmNfZmlsZV9yYW5nZSgpIHBlcm1pdHMgZmluZWx5IGNvbnRyb2xsZWQgc3luY2luZyBvdmVyIGEgc2VnbWVudCBvZgogICogYSBmaWxlIGluIHRoZSByYW5nZSBvZmZzZXQgLi4gKG9mZnNldCtuYnl0ZXMtMSkgaW5jbHVzaXZlLiAgSWYgbmJ5dGVzIGlzCiAgKiB6ZXJvIHRoZW4gc3lzX3N5bmNfZmlsZV9yYW5nZSgpIHdpbGwgb3BlcmF0ZSBmcm9tIG9mZnNldCBvdXQgdG8gRU9GLgpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvZGlyLmMgYi9mcy9zeXNmcy9kaXIuYwppbmRleCA1ZjNkNzI1Li4zYWEzNDM0IDEwMDY0NAotLS0gYS9mcy9zeXNmcy9kaXIuYworKysgYi9mcy9zeXNmcy9kaXIuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJaW5vZGUtPmlfZm9wID0gJnN5c2ZzX2Rpcl9vcGVyYXRpb25zOwogCiAJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzcsNyArMTM3LDcgQEAKIAkJaWYgKCFlcnJvcikgewogCQkJZXJyb3IgPSBzeXNmc19jcmVhdGUoKmQsIG1vZGUsIGluaXRfZGlyKTsKIAkJCWlmICghZXJyb3IpIHsKLQkJCQlwLT5kX2lub2RlLT5pX25saW5rKys7CisJCQkJaW5jX25saW5rKHAtPmRfaW5vZGUpOwogCQkJCSgqZCktPmRfb3AgPSAmc3lzZnNfZGVudHJ5X29wczsKIAkJCQlkX3JlaGFzaCgqZCk7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy9zeXNmcy9pbm9kZS5jIGIvZnMvc3lzZnMvaW5vZGUuYwppbmRleCBmZDdjZDVmLi5lNzllMzhkIDEwMDY0NAotLS0gYS9mcy9zeXNmcy9pbm9kZS5jCisrKyBiL2ZzL3N5c2ZzL2lub2RlLmMKQEAgLTEyNSw3ICsxMjUsNiBAQAogewogCXN0cnVjdCBpbm9kZSAqIGlub2RlID0gbmV3X2lub2RlKHN5c2ZzX3NiKTsKIAlpZiAoaW5vZGUpIHsKLQkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc3lzZnNfYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZzeXNmc19iYWNraW5nX2Rldl9pbmZvOwpkaWZmIC0tZ2l0IGEvZnMvc3lzZnMvbW91bnQuYyBiL2ZzL3N5c2ZzL21vdW50LmMKaW5kZXggNDAxOTBjNC4uMjA1NTFhMSAxMDA2NDQKLS0tIGEvZnMvc3lzZnMvbW91bnQuYworKysgYi9mcy9zeXNmcy9tb3VudC5jCkBAIC00OSw3ICs0OSw3IEBACiAJCWlub2RlLT5pX29wID0gJnN5c2ZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQlpbm9kZS0+aV9mb3AgPSAmc3lzZnNfZGlyX29wZXJhdGlvbnM7CiAJCS8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgIi4iIGVudHJ5KSAqLwotCQlpbm9kZS0+aV9ubGluaysrOwkKKwkJaW5jX25saW5rKGlub2RlKTsKIAl9IGVsc2UgewogCQlwcl9kZWJ1Zygic3lzZnM6IGNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxuIik7CiAJCXJldHVybiAtRU5PTUVNOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9maWxlLmMgYi9mcy9zeXN2L2ZpbGUuYwppbmRleCBhNTllMzAzLi40N2E0YjcyIDEwMDY0NAotLS0gYS9mcy9zeXN2L2ZpbGUuYworKysgYi9mcy9zeXN2L2ZpbGUuYwpAQCAtMjEsOCArMjEsMTAgQEAKICAqLwogY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBzeXN2X2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5mc3luYwkJPSBzeXN2X3N5bmNfZmlsZSwKIAkuc2VuZGZpbGUJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCmRpZmYgLS1naXQgYS9mcy9zeXN2L2lhbGxvYy5jIGIvZnMvc3lzdi9pYWxsb2MuYwppbmRleCA5YjU4NWQxLi4xMTVhYjBkIDEwMDY0NAotLS0gYS9mcy9zeXN2L2lhbGxvYy5jCisrKyBiL2ZzL3N5c3YvaWFsbG9jLmMKQEAgLTE3MCw3ICsxNzAsNyBAQAogCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwogCWlub2RlLT5pX2lubyA9IGZzMTZfdG9fY3B1KHNiaSwgaW5vKTsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCWlub2RlLT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsa3NpemUgPSAwOworCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJbWVtc2V0KFNZU1ZfSShpbm9kZSktPmlfZGF0YSwgMCwgc2l6ZW9mKFNZU1ZfSShpbm9kZSktPmlfZGF0YSkpOwogCVNZU1ZfSShpbm9kZSktPmlfZGlyX3N0YXJ0X2xvb2t1cCA9IDA7CiAJaW5zZXJ0X2lub2RlX2hhc2goaW5vZGUpOwpkaWZmIC0tZ2l0IGEvZnMvc3lzdi9pbm9kZS5jIGIvZnMvc3lzdi9pbm9kZS5jCmluZGV4IDU4YjJkMjIuLmQ2M2M1ZTQgMTAwNjQ0Ci0tLSBhL2ZzL3N5c3YvaW5vZGUuYworKysgYi9mcy9zeXN2L2lub2RlLmMKQEAgLTIwMSw3ICsyMDEsNyBAQAogCWlub2RlLT5pX2N0aW1lLnR2X25zZWMgPSAwOwogCWlub2RlLT5pX2F0aW1lLnR2X25zZWMgPSAwOwogCWlub2RlLT5pX210aW1lLnR2X25zZWMgPSAwOwotCWlub2RlLT5pX2Jsb2NrcyA9IGlub2RlLT5pX2Jsa3NpemUgPSAwOworCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAKIAlzaSA9IFNZU1ZfSShpbm9kZSk7CiAJZm9yIChibG9jayA9IDA7IGJsb2NrIDwgMTArMSsxKzE7IGJsb2NrKyspCmRpZmYgLS1naXQgYS9mcy9zeXN2L25hbWVpLmMgYi9mcy9zeXN2L25hbWVpLmMKaW5kZXggYjhhNzNmNy4uZjdjMDhkYiAxMDA2NDQKLS0tIGEvZnMvc3lzdi9uYW1laS5jCisrKyBiL2ZzL3N5c3YvbmFtZWkuYwpAQCAtMjUwLDcgKzI1MCw3IEBACiAJCXN5c3Zfc2V0X2xpbmsobmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKLQkJCW5ld19pbm9kZS0+aV9ubGluay0tOworCQkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwogCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCX0gZWxzZSB7CiAJCWlmIChkaXJfZGUpIHsKZGlmZiAtLWdpdCBhL2ZzL3N5c3Yvc3VwZXIuYyBiL2ZzL3N5c3Yvc3VwZXIuYwppbmRleCA4NzY2MzliLi4zNTBjYmE1IDEwMDY0NAotLS0gYS9mcy9zeXN2L3N1cGVyLmMKKysrIGIvZnMvc3lzdi9zdXBlci5jCkBAIC0zNjksMTAgKzM2OSw5IEBACiAJaWYgKDY0ICE9IHNpemVvZiAoc3RydWN0IHN5c3ZfaW5vZGUpKQogCQlwYW5pYygic3lzdiBmczogYmFkIGlub2RlIHNpemUiKTsKIAotCXNiaSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzeXN2X3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlzYmkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc3lzdl9zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFzYmkpCiAJCXJldHVybiAtRU5PTUVNOwotCW1lbXNldChzYmksIDAsIHNpemVvZihzdHJ1Y3Qgc3lzdl9zYl9pbmZvKSk7CiAKIAlzYmktPnNfc2IgPSBzYjsKIAlzYmktPnNfYmxvY2tfYmFzZSA9IDA7CkBAIC00NTMsMTAgKzQ1Miw5IEBACiAJaWYgKDY0ICE9IHNpemVvZiAoc3RydWN0IHN5c3ZfaW5vZGUpKQogCQlwYW5pYygic3lzdiBmczogYmFkIGktbm9kZSBzaXplIik7CiAKLQlzYmkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc3lzdl9zYl9pbmZvKSwgR0ZQX0tFUk5FTCk7CisJc2JpID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5c3Zfc2JfaW5mbyksIEdGUF9LRVJORUwpOwogCWlmICghc2JpKQogCQlyZXR1cm4gLUVOT01FTTsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2Yoc3RydWN0IHN5c3Zfc2JfaW5mbykpOwogCiAJc2JpLT5zX3NiID0gc2I7CiAJc2JpLT5zX2Jsb2NrX2Jhc2UgPSAwOwpkaWZmIC0tZ2l0IGEvZnMvdWRmL2ZpbGUuYyBiL2ZzL3VkZi9maWxlLmMKaW5kZXggYTU5ZTVmMy4uN2FlZGQ1NTIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9maWxlLmMKKysrIGIvZnMvdWRmL2ZpbGUuYwpAQCAtMTAzLDE5ICsxMDMsMjEgQEAKIAkuY29tbWl0X3dyaXRlCQk9IHVkZl9hZGluaWNiX2NvbW1pdF93cml0ZSwKIH07CiAKLXN0YXRpYyBzc2l6ZV90IHVkZl9maWxlX3dyaXRlKHN0cnVjdCBmaWxlICogZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKiBidWYsCi0Jc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCB1ZGZfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBwb3MpCiB7CiAJc3NpemVfdCByZXR2YWw7CisJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZTsKIAlpbnQgZXJyLCBwb3M7CisJc2l6ZV90IGNvdW50ID0gaW9jYi0+a2lfbGVmdDsKIAogCWlmIChVREZfSV9BTExPQ1RZUEUoaW5vZGUpID09IElDQlRBR19GTEFHX0FEX0lOX0lDQikKIAl7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19BUFBFTkQpCiAJCQlwb3MgPSBpbm9kZS0+aV9zaXplOwogCQllbHNlCi0JCQlwb3MgPSAqcHBvczsKKwkJCXBvcyA9IHBwb3M7CiAKIAkJaWYgKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSA8ICh1ZGZfZmlsZV9lbnRyeV9hbGxvY19vZmZzZXQoaW5vZGUpICsKIAkJCXBvcyArIGNvdW50KSkKQEAgLTEzNiw3ICsxMzgsNyBAQAogCQl9CiAJfQogCi0JcmV0dmFsID0gZ2VuZXJpY19maWxlX3dyaXRlKGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOworCXJldHZhbCA9IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBwcG9zKTsKIAogCWlmIChyZXR2YWwgPiAwKQogCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKQEAgLTI0OSwxMSArMjUxLDEzIEBACiB9CiAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWRmX2ZpbGVfb3BlcmF0aW9ucyA9IHsKLQkucmVhZAkJCT0gZ2VuZXJpY19maWxlX3JlYWQsCisJLnJlYWQJCQk9IGRvX3N5bmNfcmVhZCwKKwkuYWlvX3JlYWQJCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAogCS5pb2N0bAkJCT0gdWRmX2lvY3RsLAogCS5vcGVuCQkJPSBnZW5lcmljX2ZpbGVfb3BlbiwKIAkubW1hcAkJCT0gZ2VuZXJpY19maWxlX21tYXAsCi0JLndyaXRlCQkJPSB1ZGZfZmlsZV93cml0ZSwKKwkud3JpdGUJCQk9IGRvX3N5bmNfd3JpdGUsCisJLmFpb193cml0ZQkJPSB1ZGZfZmlsZV9haW9fd3JpdGUsCiAJLnJlbGVhc2UJCT0gdWRmX3JlbGVhc2VfZmlsZSwKIAkuZnN5bmMJCQk9IHVkZl9mc3luY19maWxlLAogCS5zZW5kZmlsZQkJPSBnZW5lcmljX2ZpbGVfc2VuZGZpbGUsCmRpZmYgLS1naXQgYS9mcy91ZGYvaWFsbG9jLmMgYi9mcy91ZGYvaWFsbG9jLmMKaW5kZXggMzMzMjM0Ny4uODIwNjk4MyAxMDA2NDQKLS0tIGEvZnMvdWRmL2lhbGxvYy5jCisrKyBiL2ZzL3VkZi9pYWxsb2MuYwpAQCAtMTIxLDcgKzEyMSw2IEBACiAJVURGX0lfTE9DQVRJT04oaW5vZGUpLmxvZ2ljYWxCbG9ja051bSA9IGJsb2NrOwogCVVERl9JX0xPQ0FUSU9OKGlub2RlKS5wYXJ0aXRpb25SZWZlcmVuY2VOdW0gPSBVREZfSV9MT0NBVElPTihkaXIpLnBhcnRpdGlvblJlZmVyZW5jZU51bTsKIAlpbm9kZS0+aV9pbm8gPSB1ZGZfZ2V0X2xiX3BibG9jayhzYiwgVURGX0lfTE9DQVRJT04oaW5vZGUpLCAwKTsKLQlpbm9kZS0+aV9ibGtzaXplID0gUEFHRV9TSVpFOwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJVURGX0lfTEVORUFUVFIoaW5vZGUpID0gMDsKIAlVREZfSV9MRU5BTExPQyhpbm9kZSkgPSAwOwpAQCAtMTMwLDE0ICsxMjksMTIgQEAKIAl7CiAJCVVERl9JX0VGRShpbm9kZSkgPSAxOwogCQlVREZfVVBEQVRFX1VERlJFVihpbm9kZS0+aV9zYiwgVURGX1ZFUlNfVVNFX0VYVEVOREVEX0ZFKTsKLQkJVURGX0lfREFUQShpbm9kZSkgPSBrbWFsbG9jKGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSAtIHNpemVvZihzdHJ1Y3QgZXh0ZW5kZWRGaWxlRW50cnkpLCBHRlBfS0VSTkVMKTsKLQkJbWVtc2V0KFVERl9JX0RBVEEoaW5vZGUpLCAweDAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkRmlsZUVudHJ5KSk7CisJCVVERl9JX0RBVEEoaW5vZGUpID0ga3phbGxvYyhpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGV4dGVuZGVkRmlsZUVudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJfQogCWVsc2UKIAl7CiAJCVVERl9JX0VGRShpbm9kZSkgPSAwOwotCQlVREZfSV9EQVRBKGlub2RlKSA9IGttYWxsb2MoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpLCBHRlBfS0VSTkVMKTsKLQkJbWVtc2V0KFVERl9JX0RBVEEoaW5vZGUpLCAweDAwLCBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemUgLSBzaXplb2Yoc3RydWN0IGZpbGVFbnRyeSkpOworCQlVREZfSV9EQVRBKGlub2RlKSA9IGt6YWxsb2MoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplIC0gc2l6ZW9mKHN0cnVjdCBmaWxlRW50cnkpLCBHRlBfS0VSTkVMKTsKIAl9CiAJaWYgKFVERl9RVUVSWV9GTEFHKGlub2RlLT5pX3NiLCBVREZfRkxBR19VU0VfQURfSU5fSUNCKSkKIAkJVURGX0lfQUxMT0NUWVBFKGlub2RlKSA9IElDQlRBR19GTEFHX0FEX0lOX0lDQjsKZGlmZiAtLWdpdCBhL2ZzL3VkZi9pbm9kZS5jIGIvZnMvdWRmL2lub2RlLmMKaW5kZXggNjA1ZjUxMS4uYWUyMWEwZSAxMDA2NDQKLS0tIGEvZnMvdWRmL2lub2RlLmMKKysrIGIvZnMvdWRmL2lub2RlLmMKQEAgLTkxNiw4ICs5MTYsNiBAQAogCSAqICAgICAgaV9ubGluayA9IDEKIAkgKiAgICAgIGlfb3AgPSBOVUxMOwogCSAqLwotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7Ci0KIAliaCA9IHVkZl9yZWFkX3B0YWdnZWQoaW5vZGUtPmlfc2IsIFVERl9JX0xPQ0FUSU9OKGlub2RlKSwgMCwgJmlkZW50KTsKIAogCWlmICghYmgpCkBAIC0xMTY3LDcgKzExNjUsNyBAQAogCQkJaW5vZGUtPmlfb3AgPSAmdWRmX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCQkJaW5vZGUtPmlfZm9wID0gJnVkZl9kaXJfb3BlcmF0aW9uczsKIAkJCWlub2RlLT5pX21vZGUgfD0gU19JRkRJUjsKLQkJCWlub2RlLT5pX25saW5rICsrOworCQkJaW5jX25saW5rKGlub2RlKTsKIAkJCWJyZWFrOwogCQl9CiAJCWNhc2UgSUNCVEFHX0ZJTEVfVFlQRV9SRUFMVElNRToKZGlmZiAtLWdpdCBhL2ZzL3VkZi9uYW1laS5jIGIvZnMvdWRmL25hbWVpLmMKaW5kZXggYWI5YTc2Mi4uNzMxNjMzMiAxMDA2NDQKLS0tIGEvZnMvdWRmL25hbWVpLmMKKysrIGIvZnMvdWRmL25hbWVpLmMKQEAgLTc2Miw3ICs3NjIsNyBAQAogCQljcHVfdG9fbGUzMihVREZfSV9VTklRVUUoaW5vZGUpICYgMHgwMDAwMDAwMEZGRkZGRkZGVUwpOwogCWNmaS5maWxlQ2hhcmFjdGVyaXN0aWNzIHw9IEZJRF9GSUxFX0NIQVJfRElSRUNUT1JZOwogCXVkZl93cml0ZV9maShkaXIsICZjZmksIGZpLCAmZmliaCwgTlVMTCwgTlVMTCk7Ci0JZGlyLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CiAJbWFya19pbm9kZV9kaXJ0eShkaXIpOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7CiAJaWYgKGZpYmguc2JoICE9IGZpYmguZWJoKQpAQCAtODc2LDEwICs4NzYsOSBAQAogCQl1ZGZfd2FybmluZyhpbm9kZS0+aV9zYiwgInVkZl9ybWRpciIsCiAJCQkiZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayAhPSAyICglZCkiLAogCQkJaW5vZGUtPmlfbmxpbmspOwotCWlub2RlLT5pX25saW5rID0gMDsKKwljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfc2l6ZSA9IDA7Ci0JbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JZGlyLT5pX25saW5rIC0tOworCWlub2RlX2RlY19saW5rX2NvdW50KGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IGRpci0+aV9jdGltZSA9IGRpci0+aV9tdGltZSA9IGN1cnJlbnRfZnNfdGltZShkaXItPmlfc2IpOwogCW1hcmtfaW5vZGVfZGlydHkoZGlyKTsKIApAQCAtOTIzLDggKzkyMiw3IEBACiAJCWdvdG8gZW5kX3VubGluazsKIAlkaXItPmlfY3RpbWUgPSBkaXItPmlfbXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUoZGlyLT5pX3NiKTsKIAltYXJrX2lub2RlX2RpcnR5KGRpcik7Ci0JaW5vZGUtPmlfbmxpbmstLTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaW5vZGUtPmlfY3RpbWUgPSBkaXItPmlfY3RpbWU7CiAJcmV0dmFsID0gMDsKIApAQCAtMTEwMSw4ICsxMDk5LDcgQEAKIAlyZXR1cm4gZXJyOwogCiBvdXRfbm9fZW50cnk6Ci0JaW5vZGUtPmlfbmxpbmstLTsKLQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwlpbm9kZV9kZWNfbGlua19jb3VudChpbm9kZSk7CiAJaXB1dChpbm9kZSk7CiAJZ290byBvdXQ7CiB9CkBAIC0xMTUwLDcgKzExNDcsNyBAQAogCWlmIChmaWJoLnNiaCAhPSBmaWJoLmViaCkKIAkJdWRmX3JlbGVhc2VfZGF0YShmaWJoLmViaCk7CiAJdWRmX3JlbGVhc2VfZGF0YShmaWJoLnNiaCk7Ci0JaW5vZGUtPmlfbmxpbmsgKys7CisJaW5jX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9jdGltZSA9IGN1cnJlbnRfZnNfdGltZShpbm9kZS0+aV9zYik7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiAJYXRvbWljX2luYygmaW5vZGUtPmlfY291bnQpOwpAQCAtMTI2MSw5ICsxMjU4LDggQEAKIAogCWlmIChuZXdfaW5vZGUpCiAJewotCQluZXdfaW5vZGUtPmlfbmxpbmstLTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gY3VycmVudF9mc190aW1lKG5ld19pbm9kZS0+aV9zYik7Ci0JCW1hcmtfaW5vZGVfZGlydHkobmV3X2lub2RlKTsKKwkJaW5vZGVfZGVjX2xpbmtfY291bnQobmV3X2lub2RlKTsKIAl9CiAJb2xkX2Rpci0+aV9jdGltZSA9IG9sZF9kaXItPmlfbXRpbWUgPSBjdXJyZW50X2ZzX3RpbWUob2xkX2Rpci0+aV9zYik7CiAJbWFya19pbm9kZV9kaXJ0eShvbGRfZGlyKTsKQEAgLTEyNzksMTYgKzEyNzUsMTQgQEAKIAkJfQogCQllbHNlCiAJCQltYXJrX2J1ZmZlcl9kaXJ0eV9pbm9kZShkaXJfYmgsIG9sZF9pbm9kZSk7Ci0JCW9sZF9kaXItPmlfbmxpbmsgLS07Ci0JCW1hcmtfaW5vZGVfZGlydHkob2xkX2Rpcik7CisJCWlub2RlX2RlY19saW5rX2NvdW50KG9sZF9kaXIpOwogCQlpZiAobmV3X2lub2RlKQogCQl7Ci0JCQluZXdfaW5vZGUtPmlfbmxpbmsgLS07Ci0JCQltYXJrX2lub2RlX2RpcnR5KG5ld19pbm9kZSk7CisJCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCQl9CiAJCWVsc2UKIAkJewotCQkJbmV3X2Rpci0+aV9ubGluayArKzsKKwkJCWluY19ubGluayhuZXdfZGlyKTsKIAkJCW1hcmtfaW5vZGVfZGlydHkobmV3X2Rpcik7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9mcy91ZGYvc3VwZXIuYyBiL2ZzL3VkZi9zdXBlci5jCmluZGV4IGZjY2UxYTIuLjFkM2I1ZDIgMTAwNjQ0Ci0tLSBhL2ZzL3VkZi9zdXBlci5jCisrKyBiL2ZzL3VkZi9zdXBlci5jCkBAIC0xNTYsOCArMTU2LDcgQEAKIAogc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveSh1ZGZfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAidWRmX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHVkZl9pbm9kZV9jYWNoZXApOwogfQogCiAvKiBTdXBlcmJsb2NrIG9wZXJhdGlvbnMgKi8KQEAgLTE2MjIsNiArMTYyMSwxMCBAQAogCQlnb3RvIGVycm9yX291dDsKIAl9CiAKKwlpZiAoVURGX1NCX1BBUlRGTEFHUyhzYiwgVURGX1NCX1BBUlRJVElPTihzYikpICYgVURGX1BBUlRfRkxBR19SRUFEX09OTFkpCisJCXByaW50aygiVURGLWZzOiBQYXJ0aXRpb24gbWFya2VkIHJlYWRvbmx5OyBmb3JjaW5nIHJlYWRvbmx5IG1vdW50XG4iKTsKKwkJc2ItPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOworCiAJaWYgKCB1ZGZfZmluZF9maWxlc2V0KHNiLCAmZmlsZXNldCwgJnJvb3RkaXIpICkKIAl7CiAJCXByaW50aygiVURGLWZzOiBObyBmaWxlc2V0IGZvdW5kXG4iKTsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9maWxlLmMgYi9mcy91ZnMvZmlsZS5jCmluZGV4IGE5YzZlNWYuLjFlMDk2MzIgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9maWxlLmMKKysrIGIvZnMvdWZzL2ZpbGUuYwpAQCAtNTMsOCArNTMsMTAgQEAKICAKIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2ZpbGVfb3BlcmF0aW9ucyA9IHsKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCi0JLnJlYWQJCT0gZ2VuZXJpY19maWxlX3JlYWQsCi0JLndyaXRlCQk9IGdlbmVyaWNfZmlsZV93cml0ZSwKKwkucmVhZAkJPSBkb19zeW5jX3JlYWQsCisJLmFpb19yZWFkCT0gZ2VuZXJpY19maWxlX2Fpb19yZWFkLAorCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAorCS5haW9fd3JpdGUJPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlLAogCS5tbWFwCQk9IGdlbmVyaWNfZmlsZV9tbWFwLAogCS5vcGVuICAgICAgICAgICA9IGdlbmVyaWNfZmlsZV9vcGVuLAogCS5mc3luYwkJPSB1ZnNfc3luY19maWxlLApkaWZmIC0tZ2l0IGEvZnMvdWZzL2lhbGxvYy5jIGIvZnMvdWZzL2lhbGxvYy5jCmluZGV4IDk1MDFkY2QuLjJhZDEyNTkgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pYWxsb2MuYworKysgYi9mcy91ZnMvaWFsbG9jLmMKQEAgLTI1NSw3ICsyNTUsNiBAQAogCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKIAogCWlub2RlLT5pX2lubyA9IGNnICogdXNwaS0+c19pcGcgKyBiaXQ7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfU0laRTsJLyogVGhpcyBpcyB0aGUgb3B0aW1hbCBJTyBzaXplIChmb3Igc3RhdCksIG5vdCB0aGUgZnMgYmxvY2sgc2l6ZSAqLwogCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IGlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAl1ZnNpLT5pX2ZsYWdzID0gVUZTX0koZGlyKS0+aV9mbGFnczsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9pbm9kZS5jIGIvZnMvdWZzL2lub2RlLmMKaW5kZXggMzBjNmU4YTkuLmVlMWVhYTYgMTAwNjQ0Ci0tLSBhL2ZzL3Vmcy9pbm9kZS5jCisrKyBiL2ZzL3Vmcy9pbm9kZS5jCkBAIC03NDEsNyArNzQxLDYgQEAKIAkJdWZzMV9yZWFkX2lub2RlKGlub2RlLCB1ZnNfaW5vZGUgKyB1ZnNfaW5vdG9mc2JvKGlub2RlLT5pX2lubykpOwogCX0KIAotCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX1NJWkU7LypUaGlzIGlzIHRoZSBvcHRpbWFsIElPIHNpemUgKGZvciBzdGF0KSovCiAJaW5vZGUtPmlfdmVyc2lvbisrOwogCXVmc2ktPmlfbGFzdGZyYWcgPQogCQkoaW5vZGUtPmlfc2l6ZSArIHVzcGktPnNfZnNpemUgLSAxKSA+PiB1c3BpLT5zX2ZzaGlmdDsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9uYW1laS5jIGIvZnMvdWZzL25hbWVpLmMKaW5kZXggZDM0NGI0MS4uZTg0YzBlYyAxMDA2NDQKLS0tIGEvZnMvdWZzL25hbWVpLmMKKysrIGIvZnMvdWZzL25hbWVpLmMKQEAgLTMwOCw3ICszMDgsNyBAQAogCQl1ZnNfc2V0X2xpbmsobmV3X2RpciwgbmV3X2RlLCBuZXdfcGFnZSwgb2xkX2lub2RlKTsKIAkJbmV3X2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJaWYgKGRpcl9kZSkKLQkJCW5ld19pbm9kZS0+aV9ubGluay0tOworCQkJZHJvcF9ubGluayhuZXdfaW5vZGUpOwogCQlpbm9kZV9kZWNfbGlua19jb3VudChuZXdfaW5vZGUpOwogCX0gZWxzZSB7CiAJCWlmIChkaXJfZGUpIHsKZGlmZiAtLWdpdCBhL2ZzL3Vmcy9zdXBlci5jIGIvZnMvdWZzL3N1cGVyLmMKaW5kZXggOTkyZWUwYi4uZWM3OWUzMCAxMDA2NDQKLS0tIGEvZnMvdWZzL3N1cGVyLmMKKysrIGIvZnMvdWZzL3N1cGVyLmMKQEAgLTYxMSwxMSArNjExLDEwIEBACiAJCiAJVUZTRCgiRU5URVJcbiIpOwogCQkKLQlzYmkgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdWZzX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKKwlzYmkgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdWZzX3NiX2luZm8pLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNiaSkKIAkJZ290byBmYWlsZWRfbm9tZW07CiAJc2ItPnNfZnNfaW5mbyA9IHNiaTsKLQltZW1zZXQoc2JpLCAwLCBzaXplb2Yoc3RydWN0IHVmc19zYl9pbmZvKSk7CiAKIAlVRlNEKCJmbGFnICV1XG4iLCAoaW50KShzYi0+c19mbGFncyAmIE1TX1JET05MWSkpOwogCQpAQCAtMTI0NSw4ICsxMjQ0LDcgQEAKIAogc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveSh1ZnNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAidWZzX2lub2RlX2NhY2hlOiBub3QgYWxsIHN0cnVjdHVyZXMgd2VyZSBmcmVlZFxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHVmc19pbm9kZV9jYWNoZXApOwogfQogCiAjaWZkZWYgQ09ORklHX1FVT1RBCmRpZmYgLS1naXQgYS9mcy91dGltZXMuYyBiL2ZzL3V0aW1lcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiY2Q4NTJmCi0tLSAvZGV2L251bGwKKysrIGIvZnMvdXRpbWVzLmMKQEAgLTAsMCArMSwxMzcgQEAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L25hbWVpLmg+CisjaW5jbHVkZSA8bGludXgvdXRpbWUuaD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworI2lmZGVmIF9fQVJDSF9XQU5UX1NZU19VVElNRQorCisvKgorICogc3lzX3V0aW1lKCkgY2FuIGJlIGltcGxlbWVudGVkIGluIHVzZXItbGV2ZWwgdXNpbmcgc3lzX3V0aW1lcygpLgorICogSXMgdGhpcyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk/ICBJZiBzbywgd2h5IG5vdCBtb3ZlIGl0CisgKiBpbnRvIHRoZSBhcHByb3ByaWF0ZSBhcmNoIGRpcmVjdG9yeSAoZm9yIHRob3NlIGFyY2hpdGVjdHVyZXMgdGhhdAorICogbmVlZCBpdCkuCisgKi8KKworLyogSWYgdGltZXM9PU5VTEwsIHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0byBjdXJyZW50IHRpbWUsCisgKiBtdXN0IGJlIG93bmVyIG9yIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4KKyAqIEVsc2UsIHVwZGF0ZSBmcm9tICp0aW1lcywgbXVzdCBiZSBvd25lciBvciBzdXBlciB1c2VyLgorICovCithc21saW5rYWdlIGxvbmcgc3lzX3V0aW1lKGNoYXIgX191c2VyICogZmlsZW5hbWUsIHN0cnVjdCB1dGltYnVmIF9fdXNlciAqIHRpbWVzKQoreworCWludCBlcnJvcjsKKwlzdHJ1Y3QgbmFtZWlkYXRhIG5kOworCXN0cnVjdCBpbm9kZSAqIGlub2RlOworCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKworCWVycm9yID0gdXNlcl9wYXRoX3dhbGsoZmlsZW5hbWUsICZuZCk7CisJaWYgKGVycm9yKQorCQlnb3RvIG91dDsKKwlpbm9kZSA9IG5kLmRlbnRyeS0+ZF9pbm9kZTsKKworCWVycm9yID0gLUVST0ZTOworCWlmIChJU19SRE9OTFkoaW5vZGUpKQorCQlnb3RvIGRwdXRfYW5kX291dDsKKworCS8qIERvbid0IHdvcnJ5LCB0aGUgY2hlY2tzIGFyZSBkb25lIGluIGlub2RlX2NoYW5nZV9vaygpICovCisJbmV3YXR0cnMuaWFfdmFsaWQgPSBBVFRSX0NUSU1FIHwgQVRUUl9NVElNRSB8IEFUVFJfQVRJTUU7CisJaWYgKHRpbWVzKSB7CisJCWVycm9yID0gLUVQRVJNOworCQlpZiAoSVNfQVBQRU5EKGlub2RlKSB8fCBJU19JTU1VVEFCTEUoaW5vZGUpKQorCQkJZ290byBkcHV0X2FuZF9vdXQ7CisKKwkJZXJyb3IgPSBnZXRfdXNlcihuZXdhdHRycy5pYV9hdGltZS50dl9zZWMsICZ0aW1lcy0+YWN0aW1lKTsKKwkJbmV3YXR0cnMuaWFfYXRpbWUudHZfbnNlYyA9IDA7CisJCWlmICghZXJyb3IpCisJCQllcnJvciA9IGdldF91c2VyKG5ld2F0dHJzLmlhX210aW1lLnR2X3NlYywgJnRpbWVzLT5tb2R0aW1lKTsKKwkJbmV3YXR0cnMuaWFfbXRpbWUudHZfbnNlYyA9IDA7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gZHB1dF9hbmRfb3V0OworCisJCW5ld2F0dHJzLmlhX3ZhbGlkIHw9IEFUVFJfQVRJTUVfU0VUIHwgQVRUUl9NVElNRV9TRVQ7CisJfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlcnJvciA9IC1FQUNDRVM7CisgICAgICAgICAgICAgICAgaWYgKElTX0lNTVVUQUJMRShpbm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKKworCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCisJCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCisJCQlnb3RvIGRwdXRfYW5kX291dDsKKwl9CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CitkcHV0X2FuZF9vdXQ6CisJcGF0aF9yZWxlYXNlKCZuZCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCisjZW5kaWYKKworLyogSWYgdGltZXM9PU5VTEwsIHNldCBhY2Nlc3MgYW5kIG1vZGlmaWNhdGlvbiB0byBjdXJyZW50IHRpbWUsCisgKiBtdXN0IGJlIG93bmVyIG9yIGhhdmUgd3JpdGUgcGVybWlzc2lvbi4KKyAqIEVsc2UsIHVwZGF0ZSBmcm9tICp0aW1lcywgbXVzdCBiZSBvd25lciBvciBzdXBlciB1c2VyLgorICovCitsb25nIGRvX3V0aW1lcyhpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsICp0aW1lcykKK3sKKwlpbnQgZXJyb3I7CisJc3RydWN0IG5hbWVpZGF0YSBuZDsKKwlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKKwlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnM7CisKKwllcnJvciA9IF9fdXNlcl93YWxrX2ZkKGRmZCwgZmlsZW5hbWUsIExPT0tVUF9GT0xMT1csICZuZCk7CisKKwlpZiAoZXJyb3IpCisJCWdvdG8gb3V0OworCWlub2RlID0gbmQuZGVudHJ5LT5kX2lub2RlOworCisJZXJyb3IgPSAtRVJPRlM7CisJaWYgKElTX1JET05MWShpbm9kZSkpCisJCWdvdG8gZHB1dF9hbmRfb3V0OworCisJLyogRG9uJ3Qgd29ycnksIHRoZSBjaGVja3MgYXJlIGRvbmUgaW4gaW5vZGVfY2hhbmdlX29rKCkgKi8KKwluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfQ1RJTUUgfCBBVFRSX01USU1FIHwgQVRUUl9BVElNRTsKKwlpZiAodGltZXMpIHsKKwkJZXJyb3IgPSAtRVBFUk07CisgICAgICAgICAgICAgICAgaWYgKElTX0FQUEVORChpbm9kZSkgfHwgSVNfSU1NVVRBQkxFKGlub2RlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZHB1dF9hbmRfb3V0OworCisJCW5ld2F0dHJzLmlhX2F0aW1lLnR2X3NlYyA9IHRpbWVzWzBdLnR2X3NlYzsKKwkJbmV3YXR0cnMuaWFfYXRpbWUudHZfbnNlYyA9IHRpbWVzWzBdLnR2X3VzZWMgKiAxMDAwOworCQluZXdhdHRycy5pYV9tdGltZS50dl9zZWMgPSB0aW1lc1sxXS50dl9zZWM7CisJCW5ld2F0dHJzLmlhX210aW1lLnR2X25zZWMgPSB0aW1lc1sxXS50dl91c2VjICogMTAwMDsKKwkJbmV3YXR0cnMuaWFfdmFsaWQgfD0gQVRUUl9BVElNRV9TRVQgfCBBVFRSX01USU1FX1NFVDsKKwl9IGVsc2UgeworCQllcnJvciA9IC1FQUNDRVM7CisgICAgICAgICAgICAgICAgaWYgKElTX0lNTVVUQUJMRShpbm9kZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGRwdXRfYW5kX291dDsKKworCQlpZiAoY3VycmVudC0+ZnN1aWQgIT0gaW5vZGUtPmlfdWlkICYmCisJCSAgICAoZXJyb3IgPSB2ZnNfcGVybWlzc2lvbigmbmQsIE1BWV9XUklURSkpICE9IDApCisJCQlnb3RvIGRwdXRfYW5kX291dDsKKwl9CisJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCWVycm9yID0gbm90aWZ5X2NoYW5nZShuZC5kZW50cnksICZuZXdhdHRycyk7CisJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CitkcHV0X2FuZF9vdXQ6CisJcGF0aF9yZWxlYXNlKCZuZCk7CitvdXQ6CisJcmV0dXJuIGVycm9yOworfQorCithc21saW5rYWdlIGxvbmcgc3lzX2Z1dGltZXNhdChpbnQgZGZkLCBjaGFyIF9fdXNlciAqZmlsZW5hbWUsIHN0cnVjdCB0aW1ldmFsIF9fdXNlciAqdXRpbWVzKQoreworCXN0cnVjdCB0aW1ldmFsIHRpbWVzWzJdOworCisJaWYgKHV0aW1lcyAmJiBjb3B5X2Zyb21fdXNlcigmdGltZXMsIHV0aW1lcywgc2l6ZW9mKHRpbWVzKSkpCisJCXJldHVybiAtRUZBVUxUOworCXJldHVybiBkb191dGltZXMoZGZkLCBmaWxlbmFtZSwgdXRpbWVzID8gdGltZXMgOiBOVUxMKTsKK30KKworYXNtbGlua2FnZSBsb25nIHN5c191dGltZXMoY2hhciBfX3VzZXIgKmZpbGVuYW1lLCBzdHJ1Y3QgdGltZXZhbCBfX3VzZXIgKnV0aW1lcykKK3sKKwlyZXR1cm4gc3lzX2Z1dGltZXNhdChBVF9GRENXRCwgZmlsZW5hbWUsIHV0aW1lcyk7Cit9CmRpZmYgLS1naXQgYS9mcy92ZmF0L25hbWVpLmMgYi9mcy92ZmF0L25hbWVpLmMKaW5kZXggOWE4ZjQ4Yi4uZWRiNzExZiAxMDA2NDQKLS0tIGEvZnMvdmZhdC9uYW1laS5jCisrKyBiL2ZzL3ZmYXQvbmFtZWkuYwpAQCAtNzgyLDkgKzc4Miw5IEBACiAJZXJyID0gZmF0X3JlbW92ZV9lbnRyaWVzKGRpciwgJnNpbmZvKTsJLyogYW5kIHJlbGVhc2VzIGJoICovCiAJaWYgKGVycikKIAkJZ290byBvdXQ7Ci0JZGlyLT5pX25saW5rLS07CisJZHJvcF9ubGluayhkaXIpOwogCi0JaW5vZGUtPmlfbmxpbmsgPSAwOworCWNsZWFyX25saW5rKGlub2RlKTsKIAlpbm9kZS0+aV9tdGltZSA9IGlub2RlLT5pX2F0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAlmYXRfZGV0YWNoKGlub2RlKTsKIG91dDoKQEAgLTgwOCw3ICs4MDgsNyBAQAogCWVyciA9IGZhdF9yZW1vdmVfZW50cmllcyhkaXIsICZzaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwotCWlub2RlLT5pX25saW5rID0gMDsKKwljbGVhcl9ubGluayhpbm9kZSk7CiAJaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9hdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJZmF0X2RldGFjaChpbm9kZSk7CiBvdXQ6CkBAIC04MzcsNyArODM3LDcgQEAKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwogCWRpci0+aV92ZXJzaW9uKys7Ci0JZGlyLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CiAKIAlpbm9kZSA9IGZhdF9idWlsZF9pbm9kZShzYiwgc2luZm8uZGUsIHNpbmZvLmlfcG9zKTsKIAlicmVsc2Uoc2luZm8uYmgpOwpAQCAtOTMwLDkgKzkzMCw5IEBACiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gZXJyb3JfZG90ZG90OwogCQl9Ci0JCW9sZF9kaXItPmlfbmxpbmstLTsKKwkJZHJvcF9ubGluayhvbGRfZGlyKTsKIAkJaWYgKCFuZXdfaW5vZGUpCi0gCQkJbmV3X2Rpci0+aV9ubGluaysrOworIAkJCWluY19ubGluayhuZXdfZGlyKTsKIAl9CiAKIAllcnIgPSBmYXRfcmVtb3ZlX2VudHJpZXMob2xkX2RpciwgJm9sZF9zaW5mbyk7CS8qIGFuZCByZWxlYXNlcyBiaCAqLwpAQCAtOTQ3LDEwICs5NDcsOSBAQAogCQltYXJrX2lub2RlX2RpcnR5KG9sZF9kaXIpOwogCiAJaWYgKG5ld19pbm9kZSkgeworCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCWlmIChpc19kaXIpCi0JCQluZXdfaW5vZGUtPmlfbmxpbmsgLT0gMjsKLQkJZWxzZQotCQkJbmV3X2lub2RlLT5pX25saW5rLS07CisJCQlkcm9wX25saW5rKG5ld19pbm9kZSk7CiAJCW5ld19pbm9kZS0+aV9jdGltZSA9IHRzOwogCX0KIG91dDoKZGlmZiAtLWdpdCBhL2ZzL3hmcy9LY29uZmlnIGIvZnMveGZzL0tjb25maWcKaW5kZXggMjZiMzY0Yy4uMzUxMTViYyAxMDA2NDQKLS0tIGEvZnMveGZzL0tjb25maWcKKysrIGIvZnMveGZzL0tjb25maWcKQEAgLTEsNSArMSw2IEBACiBjb25maWcgWEZTX0ZTCiAJdHJpc3RhdGUgIlhGUyBmaWxlc3lzdGVtIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBCTE9DSwogCWhlbHAKIAkgIFhGUyBpcyBhIGhpZ2ggcGVyZm9ybWFuY2Ugam91cm5hbGluZyBmaWxlc3lzdGVtIHdoaWNoIG9yaWdpbmF0ZWQKIAkgIG9uIHRoZSBTR0kgSVJJWCBwbGF0Zm9ybS4gIEl0IGlzIGNvbXBsZXRlbHkgbXVsdGktdGhyZWFkZWQsIGNhbgpkaWZmIC0tZ2l0IGEvZnMveGZzL01ha2VmaWxlLWxpbnV4LTIuNiBiL2ZzL3hmcy9NYWtlZmlsZS1saW51eC0yLjYKaW5kZXggOWU3Zjg1OS4uMjkxOTQ4ZCAxMDA2NDQKLS0tIGEvZnMveGZzL01ha2VmaWxlLWxpbnV4LTIuNgorKysgYi9mcy94ZnMvTWFrZWZpbGUtbGludXgtMi42CkBAIC0zMCw3ICszMCw2IEBACiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0JMSV9UUkFDRQogCUVYVFJBX0NGTEFHUyArPSAtRFhGU19CTUFQX1RSQUNFCiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0JNQlRfVFJBQ0UKLQlFWFRSQV9DRkxBR1MgKz0gLURYRlNfRElSX1RSQUNFCiAJRVhUUkFfQ0ZMQUdTICs9IC1EWEZTX0RJUjJfVFJBQ0UKIAlFWFRSQV9DRkxBR1MgKz0gLURYRlNfRFFVT1RfVFJBQ0UKIAlFWFRSQV9DRkxBR1MgKz0gLURYRlNfSUxPQ0tfVFJBQ0UKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5jIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMKaW5kZXggYWJhN2ZjZi4uZDU5NzM3NSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmMKQEAgLTM0LDYgKzM0LDE0IEBACiAJZ2ZwX3QJbGZsYWdzID0ga21lbV9mbGFnc19jb252ZXJ0KGZsYWdzKTsKIAl2b2lkCSpwdHI7CiAKKyNpZmRlZiBERUJVRworCWlmICh1bmxpa2VseSghKGZsYWdzICYgS01fTEFSR0UpICYmIChzaXplID4gUEFHRV9TSVpFKSkpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiTGFyZ2UgJXMgYXR0ZW1wdCwgc2l6ZT0lbGRcbiIsCisJCQlfX0ZVTkNUSU9OX18sIChsb25nKXNpemUpOworCQlkdW1wX3N0YWNrKCk7CisJfQorI2VuZGlmCisKIAlkbyB7CiAJCWlmIChzaXplIDwgTUFYX1NMQUJfU0laRSB8fCByZXRyaWVzID4gTUFYX1ZNQUxMT0NTKQogCQkJcHRyID0ga21hbGxvYyhzaXplLCBsZmxhZ3MpOwpAQCAtNjAsNiArNjgsMjcgQEAKIAlyZXR1cm4gcHRyOwogfQogCit2b2lkICoKK2ttZW1femFsbG9jX2dyZWVkeShzaXplX3QgKnNpemUsIHNpemVfdCBtaW5zaXplLCBzaXplX3QgbWF4c2l6ZSwKKwkJICAgdW5zaWduZWQgaW50IF9fbm9jYXN0IGZsYWdzKQoreworCXZvaWQJCSpwdHI7CisJc2l6ZV90CQlrbXNpemUgPSBtYXhzaXplOworCXVuc2lnbmVkIGludAlrbWZsYWdzID0gKGZsYWdzICYgfktNX1NMRUVQKSB8IEtNX05PU0xFRVA7CisKKwl3aGlsZSAoIShwdHIgPSBrbWVtX3phbGxvYyhrbXNpemUsIGttZmxhZ3MpKSkgeworCQlpZiAoKGttc2l6ZSA8PSBtaW5zaXplKSAmJiAoZmxhZ3MgJiBLTV9OT1NMRUVQKSkKKwkJCWJyZWFrOworCQlpZiAoKGttc2l6ZSA+Pj0gMSkgPD0gbWluc2l6ZSkgeworCQkJa21zaXplID0gbWluc2l6ZTsKKwkJCWttZmxhZ3MgPSBmbGFnczsKKwkJfQorCX0KKwlpZiAocHRyKQorCQkqc2l6ZSA9IGttc2l6ZTsKKwlyZXR1cm4gcHRyOworfQorCiB2b2lkCiBrbWVtX2ZyZWUodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKIHsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYva21lbS5oIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKaW5kZXggOTM5YmQ4NC4uOWViYWJkZiAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9rbWVtLmgKQEAgLTMwLDYgKzMwLDcgQEAKICNkZWZpbmUgS01fTk9TTEVFUAkweDAwMDJ1CiAjZGVmaW5lIEtNX05PRlMJCTB4MDAwNHUKICNkZWZpbmUgS01fTUFZRkFJTAkweDAwMDh1CisjZGVmaW5lIEtNX0xBUkdFCTB4MDAxMHUKIAogLyoKICAqIFdlIHVzZSBhIHNwZWNpYWwgcHJvY2VzcyBmbGFnIHRvIGF2b2lkIHJlY3Vyc2l2ZSBjYWxsYmFja3MgaW50bwpAQCAtNDEsNyArNDIsNyBAQAogewogCWdmcF90CWxmbGFnczsKIAotCUJVR19PTihmbGFncyAmIH4oS01fU0xFRVB8S01fTk9TTEVFUHxLTV9OT0ZTfEtNX01BWUZBSUwpKTsKKwlCVUdfT04oZmxhZ3MgJiB+KEtNX1NMRUVQfEtNX05PU0xFRVB8S01fTk9GU3xLTV9NQVlGQUlMfEtNX0xBUkdFKSk7CiAKIAlpZiAoZmxhZ3MgJiBLTV9OT1NMRUVQKSB7CiAJCWxmbGFncyA9IEdGUF9BVE9NSUMgfCBfX0dGUF9OT1dBUk47CkBAIC01NCw4ICs1NSw5IEBACiB9CiAKIGV4dGVybiB2b2lkICprbWVtX2FsbG9jKHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKLWV4dGVybiB2b2lkICprbWVtX3JlYWxsb2Modm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICprbWVtX3phbGxvYyhzaXplX3QsIHVuc2lnbmVkIGludCBfX25vY2FzdCk7CitleHRlcm4gdm9pZCAqa21lbV96YWxsb2NfZ3JlZWR5KHNpemVfdCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKK2V4dGVybiB2b2lkICprbWVtX3JlYWxsb2Modm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKIGV4dGVybiB2b2lkICBrbWVtX2ZyZWUodm9pZCAqLCBzaXplX3QpOwogCiAvKgpAQCAtOTEsOCArOTMsOCBAQAogc3RhdGljIGlubGluZSB2b2lkCiBrbWVtX3pvbmVfZGVzdHJveShrbWVtX3pvbmVfdCAqem9uZSkKIHsKLQlpZiAoem9uZSAmJiBrbWVtX2NhY2hlX2Rlc3Ryb3koem9uZSkpCi0JCUJVRygpOworCWlmICh6b25lKQorCQlrbWVtX2NhY2hlX2Rlc3Ryb3koem9uZSk7CiB9CiAKIGV4dGVybiB2b2lkICprbWVtX3pvbmVfYWxsb2Moa21lbV96b25lX3QgKiwgdW5zaWduZWQgaW50IF9fbm9jYXN0KTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYvc2VtYS5oIGIvZnMveGZzL2xpbnV4LTIuNi9zZW1hLmgKaW5kZXggYjI1MDkwMC4uMjAwOWU2ZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi9zZW1hLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9zZW1hLmgKQEAgLTI5LDggKzI5LDYgQEAKIAogdHlwZWRlZiBzdHJ1Y3Qgc2VtYXBob3JlIHNlbWFfdDsKIAotI2RlZmluZSBpbml0X3NlbWEoc3AsIHZhbCwgYywgZCkJc2VtYV9pbml0KHNwLCB2YWwpCi0jZGVmaW5lIGluaXRzZW1hKHNwLCB2YWwpCQlzZW1hX2luaXQoc3AsIHZhbCkKICNkZWZpbmUgaW5pdG5zZW1hKHNwLCB2YWwsIG5hbWUpCXNlbWFfaW5pdChzcCwgdmFsKQogI2RlZmluZSBwc2VtYShzcCwgYikJCQlkb3duKHNwKQogI2RlZmluZSB2c2VtYShzcCkJCQl1cChzcCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYvc3YuaCBiL2ZzL3hmcy9saW51eC0yLjYvc3YuaAppbmRleCA5YThhZDQ4Li4zNTFhOGY0IDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3N2LmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi9zdi5oCkBAIC01Myw4ICs1Myw2IEBACiAJcmVtb3ZlX3dhaXRfcXVldWUoJnN2LT53YWl0ZXJzLCAmd2FpdCk7CiB9CiAKLSNkZWZpbmUgaW5pdF9zdihzdix0eXBlLG5hbWUsZmxhZykgXAotCWluaXRfd2FpdHF1ZXVlX2hlYWQoJihzdiktPndhaXRlcnMpCiAjZGVmaW5lIHN2X2luaXQoc3YsZmxhZyxuYW1lKSBcCiAJaW5pdF93YWl0cXVldWVfaGVhZCgmKHN2KS0+d2FpdGVycykKICNkZWZpbmUgc3ZfZGVzdHJveShzdikgXApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYW9wcy5jCmluZGV4IDM0ZGNiNDMuLjA5MzYwY2YgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2FvcHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19hb3BzLmMKQEAgLTcxLDcgKzcxLDcgQEAKIAlpbnQJCXRhZywKIAlzdHJ1Y3QgaW5vZGUJKmlub2RlLAogCXN0cnVjdCBwYWdlCSpwYWdlLAotCWludAkJbWFzaykKKwl1bnNpZ25lZCBsb25nCXBnb2ZmKQogewogCXhmc19pbm9kZV90CSppcDsKIAliaHZfdm5vZGVfdAkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKQEAgLTkxLDcgKzkxLDcgQEAKIAkJKHZvaWQgKilpcCwKIAkJKHZvaWQgKilpbm9kZSwKIAkJKHZvaWQgKilwYWdlLAotCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZyltYXNrKSwKKwkJKHZvaWQgKilwZ29mZiwKIAkJKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKChpcC0+aV9kLmRpX3NpemUgPj4gMzIpICYgMHhmZmZmZmZmZikpLAogCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoaXAtPmlfZC5kaV9zaXplICYgMHhmZmZmZmZmZikpLAogCQkodm9pZCAqKSgodW5zaWduZWQgbG9uZykoKGlzaXplID4+IDMyKSAmIDB4ZmZmZmZmZmYpKSwKQEAgLTEwNSw3ICsxMDUsNyBAQAogCQkodm9pZCAqKU5VTEwpOwogfQogI2Vsc2UKLSNkZWZpbmUgeGZzX3BhZ2VfdHJhY2UodGFnLCBpbm9kZSwgcGFnZSwgbWFzaykKKyNkZWZpbmUgeGZzX3BhZ2VfdHJhY2UodGFnLCBpbm9kZSwgcGFnZSwgcGdvZmYpCiAjZW5kaWYKIAogLyoKQEAgLTExOTcsNyArMTE5Nyw3IEBACiAJCS5ucl90b193cml0ZSA9IDEsCiAJfTsKIAotCXhmc19wYWdlX3RyYWNlKFhGU19SRUxFQVNFUEFHRV9FTlRFUiwgaW5vZGUsIHBhZ2UsIGdmcF9tYXNrKTsKKwl4ZnNfcGFnZV90cmFjZShYRlNfUkVMRUFTRVBBR0VfRU5URVIsIGlub2RlLCBwYWdlLCAwKTsKIAogCWlmICghcGFnZV9oYXNfYnVmZmVycyhwYWdlKSkKIAkJcmV0dXJuIDA7CkBAIC0xMzU2LDcgKzEzNTYsNiBAQAogCQlpb2VuZC0+aW9fc2l6ZSA9IHNpemU7CiAJCXhmc19maW5pc2hfaW9lbmQoaW9lbmQpOwogCX0gZWxzZSB7Ci0JCUFTU0VSVChzaXplID49IDApOwogCQl4ZnNfZGVzdHJveV9pb2VuZChpb2VuZCk7CiAJfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19idWYuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCmluZGV4IDJhZjUyOGQuLjliYmFkYWYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA1IFNpbGljb24gR3JhcGhpY3MsIEluYy4KKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDA2IFNpbGljb24gR3JhcGhpY3MsIEluYy4KICAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzE4LDggKzMxOCwxMiBAQAogCQlpZiAoKGJwLT5iX2ZsYWdzICYgWEJGX01BUFBFRCkgJiYgKGJwLT5iX3BhZ2VfY291bnQgPiAxKSkKIAkJCWZyZWVfYWRkcmVzcyhicC0+Yl9hZGRyIC0gYnAtPmJfb2Zmc2V0KTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgYnAtPmJfcGFnZV9jb3VudDsgaSsrKQotCQkJcGFnZV9jYWNoZV9yZWxlYXNlKGJwLT5iX3BhZ2VzW2ldKTsKKwkJZm9yIChpID0gMDsgaSA8IGJwLT5iX3BhZ2VfY291bnQ7IGkrKykgeworCQkJc3RydWN0IHBhZ2UJKnBhZ2UgPSBicC0+Yl9wYWdlc1tpXTsKKworCQkJQVNTRVJUKCFQYWdlUHJpdmF0ZShwYWdlKSk7CisJCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCX0KIAkJX3hmc19idWZfZnJlZV9wYWdlcyhicCk7CiAJfSBlbHNlIGlmIChicC0+Yl9mbGFncyAmIF9YQkZfS01FTV9BTExPQykgewogCQkgLyoKQEAgLTQwMCw2ICs0MDQsNyBAQAogCQluYnl0ZXMgPSBtaW5fdChzaXplX3QsIHNpemUsIFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCk7CiAJCXNpemUgLT0gbmJ5dGVzOwogCisJCUFTU0VSVCghUGFnZVByaXZhdGUocGFnZSkpOwogCQlpZiAoIVBhZ2VVcHRvZGF0ZShwYWdlKSkgewogCQkJcGFnZV9jb3VudC0tOwogCQkJaWYgKGJsb2Nrc2l6ZSA+PSBQQUdFX0NBQ0hFX1NJWkUpIHsKQEAgLTc2OCw3ICs3NzMsNyBAQAogCV94ZnNfYnVmX2luaXRpYWxpemUoYnAsIHRhcmdldCwgMCwgbGVuLCAwKTsKIAogIHRyeV9hZ2FpbjoKLQlkYXRhID0ga21lbV9hbGxvYyhtYWxsb2NfbGVuLCBLTV9TTEVFUCB8IEtNX01BWUZBSUwpOworCWRhdGEgPSBrbWVtX2FsbG9jKG1hbGxvY19sZW4sIEtNX1NMRUVQIHwgS01fTUFZRkFJTCB8IEtNX0xBUkdFKTsKIAlpZiAodW5saWtlbHkoZGF0YSA9PSBOVUxMKSkKIAkJZ290byBmYWlsX2ZyZWVfYnVmOwogCkBAIC0xMTE3LDEwICsxMTIyLDEwIEBACiAJZG8gewogCQlzdHJ1Y3QgcGFnZQkqcGFnZSA9IGJ2ZWMtPmJ2X3BhZ2U7CiAKKwkJQVNTRVJUKCFQYWdlUHJpdmF0ZShwYWdlKSk7CiAJCWlmICh1bmxpa2VseShicC0+Yl9lcnJvcikpIHsKIAkJCWlmIChicC0+Yl9mbGFncyAmIFhCRl9SRUFEKQogCQkJCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCQkJU2V0UGFnZUVycm9yKHBhZ2UpOwogCQl9IGVsc2UgaWYgKGJsb2Nrc2l6ZSA+PSBQQUdFX0NBQ0hFX1NJWkUpIHsKIAkJCVNldFBhZ2VVcHRvZGF0ZShwYWdlKTsKIAkJfSBlbHNlIGlmICghUGFnZVByaXZhdGUocGFnZSkgJiYKQEAgLTExNTYsMTYgKzExNjEsMTYgQEAKIAl0b3RhbF9ucl9wYWdlcyA9IGJwLT5iX3BhZ2VfY291bnQ7CiAJbWFwX2kgPSAwOwogCi0JaWYgKGJwLT5iX2ZsYWdzICYgX1hCRl9SVU5fUVVFVUVTKSB7Ci0JCWJwLT5iX2ZsYWdzICY9IH5fWEJGX1JVTl9RVUVVRVM7Ci0JCXJ3ID0gKGJwLT5iX2ZsYWdzICYgWEJGX1JFQUQpID8gUkVBRF9TWU5DIDogV1JJVEVfU1lOQzsKLQl9IGVsc2UgewotCQlydyA9IChicC0+Yl9mbGFncyAmIFhCRl9SRUFEKSA/IFJFQUQgOiBXUklURTsKLQl9Ci0KIAlpZiAoYnAtPmJfZmxhZ3MgJiBYQkZfT1JERVJFRCkgewogCQlBU1NFUlQoIShicC0+Yl9mbGFncyAmIFhCRl9SRUFEKSk7CiAJCXJ3ID0gV1JJVEVfQkFSUklFUjsKKwl9IGVsc2UgaWYgKGJwLT5iX2ZsYWdzICYgX1hCRl9SVU5fUVVFVUVTKSB7CisJCUFTU0VSVCghKGJwLT5iX2ZsYWdzICYgWEJGX1JFQURfQUhFQUQpKTsKKwkJYnAtPmJfZmxhZ3MgJj0gfl9YQkZfUlVOX1FVRVVFUzsKKwkJcncgPSAoYnAtPmJfZmxhZ3MgJiBYQkZfV1JJVEUpID8gV1JJVEVfU1lOQyA6IFJFQURfU1lOQzsKKwl9IGVsc2UgeworCQlydyA9IChicC0+Yl9mbGFncyAmIFhCRl9XUklURSkgPyBXUklURSA6CisJCSAgICAgKGJwLT5iX2ZsYWdzICYgWEJGX1JFQURfQUhFQUQpID8gUkVBREEgOiBSRUFEOwogCX0KIAogCS8qIFNwZWNpYWwgY29kZSBwYXRoIGZvciByZWFkaW5nIGEgc3ViIHBhZ2Ugc2l6ZSBidWZmZXIgaW4gLS0KQEAgLTE2ODEsNiArMTY4Niw3IEBACiAJeGZzX2J1Zl90CQkqYnAsICpuOwogCXN0cnVjdCBsaXN0X2hlYWQJKmR3cSA9ICZ0YXJnZXQtPmJ0X2RlbHdyaXRlX3F1ZXVlOwogCXNwaW5sb2NrX3QJCSpkd2xrID0gJnRhcmdldC0+YnRfZGVsd3JpdGVfbG9jazsKKwlpbnQJCQljb3VudDsKIAogCWN1cnJlbnQtPmZsYWdzIHw9IFBGX01FTUFMTE9DOwogCkBAIC0xNjk2LDYgKzE3MDIsNyBAQAogCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoCiAJCQl4ZnNfYnVmX3RpbWVyX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApKTsKIAorCQljb3VudCA9IDA7CiAJCWFnZSA9IHhmc19idWZfYWdlX2NlbnRpc2VjcyAqIG1zZWNzX3RvX2ppZmZpZXMoMTApOwogCQlzcGluX2xvY2soZHdsayk7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShicCwgbiwgZHdxLCBiX2xpc3QpIHsKQEAgLTE3MTEsOSArMTcxOCwxMSBAQAogCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQlicC0+Yl9mbGFncyAmPSB+KFhCRl9ERUxXUkl8X1hCRl9ERUxXUklfUSk7CisJCQkJYnAtPmJfZmxhZ3MgJj0gfihYQkZfREVMV1JJfF9YQkZfREVMV1JJX1F8CisJCQkJCQkgX1hCRl9SVU5fUVVFVUVTKTsKIAkJCQlicC0+Yl9mbGFncyB8PSBYQkZfV1JJVEU7Ci0JCQkJbGlzdF9tb3ZlKCZicC0+Yl9saXN0LCAmdG1wKTsKKwkJCQlsaXN0X21vdmVfdGFpbCgmYnAtPmJfbGlzdCwgJnRtcCk7CisJCQkJY291bnQrKzsKIAkJCX0KIAkJfQogCQlzcGluX3VubG9jayhkd2xrKTsKQEAgLTE3MjQsMTIgKzE3MzMsMTIgQEAKIAogCQkJbGlzdF9kZWxfaW5pdCgmYnAtPmJfbGlzdCk7CiAJCQl4ZnNfYnVmX2lvc3RyYXRlZ3koYnApOwotCi0JCQlibGtfcnVuX2FkZHJlc3Nfc3BhY2UodGFyZ2V0LT5idF9tYXBwaW5nKTsKIAkJfQogCiAJCWlmIChhc19saXN0X2xlbiA+IDApCiAJCQlwdXJnZV9hZGRyZXNzZXMoKTsKKwkJaWYgKGNvdW50KQorCQkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7CiAKIAkJY2xlYXJfYml0KFhCVF9GT1JDRV9GTFVTSCwgJnRhcmdldC0+YnRfZmxhZ3MpOwogCX0gd2hpbGUgKCFrdGhyZWFkX3Nob3VsZF9zdG9wKCkpOwpAQCAtMTc2Nyw3ICsxNzc2LDcgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJbGlzdF9tb3ZlKCZicC0+Yl9saXN0LCAmdG1wKTsKKwkJbGlzdF9tb3ZlX3RhaWwoJmJwLT5iX2xpc3QsICZ0bXApOwogCX0KIAlzcGluX3VubG9jayhkd2xrKTsKIApAQCAtMTc3Niw3ICsxNzg1LDcgQEAKIAkgKi8KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoYnAsIG4sICZ0bXAsIGJfbGlzdCkgewogCQl4ZnNfYnVmX2xvY2soYnApOwotCQlicC0+Yl9mbGFncyAmPSB+KFhCRl9ERUxXUkl8X1hCRl9ERUxXUklfUSk7CisJCWJwLT5iX2ZsYWdzICY9IH4oWEJGX0RFTFdSSXxfWEJGX0RFTFdSSV9RfF9YQkZfUlVOX1FVRVVFUyk7CiAJCWJwLT5iX2ZsYWdzIHw9IFhCRl9XUklURTsKIAkJaWYgKHdhaXQpCiAJCQlicC0+Yl9mbGFncyAmPSB+WEJGX0FTWU5DOwpAQCAtMTc4Niw2ICsxNzk1LDkgQEAKIAkJeGZzX2J1Zl9pb3N0cmF0ZWd5KGJwKTsKIAl9CiAKKwlpZiAod2FpdCkKKwkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7CisKIAkvKgogCSAqIFJlbWFpbmluZyBsaXN0IGl0ZW1zIG11c3QgYmUgZmx1c2hlZCBiZWZvcmUgcmV0dXJuaW5nCiAJICovCkBAIC0xNzk3LDkgKzE4MDksNiBAQAogCQl4ZnNfYnVmX3JlbHNlKGJwKTsKIAl9CiAKLQlpZiAod2FpdCkKLQkJYmxrX3J1bl9hZGRyZXNzX3NwYWNlKHRhcmdldC0+YnRfbWFwcGluZyk7Ci0KIAlyZXR1cm4gcGluY291bnQ7CiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2J1Zi5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKaW5kZXggNzg1ODcwMy4uOWRkMjM1YyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfYnVmLmgKQEAgLTI5OCwxMSArMjk4LDYgQEAKICNkZWZpbmUgWEZTX0JVRl9VTldSSVRFKGJwKQkoKGJwKS0+Yl9mbGFncyAmPSB+WEJGX1dSSVRFKQogI2RlZmluZSBYRlNfQlVGX0lTV1JJVEUoYnApCSgoYnApLT5iX2ZsYWdzICYgWEJGX1dSSVRFKQogCi0jZGVmaW5lIFhGU19CVUZfSVNVTklOSVRJQUwoYnApCSgwKQotI2RlZmluZSBYRlNfQlVGX1VOVU5JTklUSUFMKGJwKQkoMCkKLQotI2RlZmluZSBYRlNfQlVGX0JQX0lTTUFQUEVEKGJwKQkoMSkKLQogI2RlZmluZSBYRlNfQlVGX0lPRE9ORV9GVU5DKGJwKQkJCSgoYnApLT5iX2lvZG9uZSkKICNkZWZpbmUgWEZTX0JVRl9TRVRfSU9ET05FX0ZVTkMoYnAsIGZ1bmMpCSgoYnApLT5iX2lvZG9uZSA9IChmdW5jKSkKICNkZWZpbmUgWEZTX0JVRl9DTFJfSU9ET05FX0ZVTkMoYnApCQkoKGJwKS0+Yl9pb2RvbmUgPSBOVUxMKQpAQCAtMzkzLDggKzM4OCw2IEBACiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIFhGU19iZHdyaXRlKGJwKQkJeGZzX2J1Zl9pb3N0YXJ0KGJwLCBYQkZfREVMV1JJIHwgWEJGX0FTWU5DKQotCiBzdGF0aWMgaW5saW5lIGludCB4ZnNfYmR3cml0ZSh2b2lkICptcCwgeGZzX2J1Zl90ICpicCkKIHsKIAlicC0+Yl9zdHJhdCA9IHhmc19iZHN0cmF0X2NiOwpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZmlsZS5jCmluZGV4IDNkNGY2ZGYuLmQ5M2Q4ZGQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2ZpbGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19maWxlLmMKQEAgLTQ5LDUwICs0OSw0OSBAQAogU1RBVElDIGlubGluZSBzc2l6ZV90CiBfX3hmc19maWxlX3JlYWQoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKLQljaGFyCQkJX191c2VyICpidWYsCisJY29uc3Qgc3RydWN0IGlvdmVjCSppb3YsCisJdW5zaWduZWQgbG9uZwkJbnJfc2VncywKIAlpbnQJCQlpb2ZsYWdzLAotCXNpemVfdAkJCWNvdW50LAogCWxvZmZfdAkJCXBvcykKIHsKLQlzdHJ1Y3QgaW92ZWMJCWlvdiA9IHtidWYsIGNvdW50fTsKIAlzdHJ1Y3QgZmlsZQkJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCWJodl92bm9kZV90CQkqdnAgPSB2bl9mcm9tX2lub2RlKGZpbGUtPmZfZGVudHJ5LT5kX2lub2RlKTsKIAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKIAlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKIAkJaW9mbGFncyB8PSBJT19JU0RJUkVDVDsKLQlyZXR1cm4gYmh2X3ZvcF9yZWFkKHZwLCBpb2NiLCAmaW92LCAxLCAmaW9jYi0+a2lfcG9zLCBpb2ZsYWdzLCBOVUxMKTsKKwlyZXR1cm4gYmh2X3ZvcF9yZWFkKHZwLCBpb2NiLCBpb3YsIG5yX3NlZ3MsICZpb2NiLT5raV9wb3MsCisJCQkJaW9mbGFncywgTlVMTCk7CiB9CiAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9haW9fcmVhZCgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCWNoYXIJCQlfX3VzZXIgKmJ1ZiwKLQlzaXplX3QJCQljb3VudCwKKwljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdiwKKwl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAogCWxvZmZfdAkJCXBvcykKIHsKLQlyZXR1cm4gX194ZnNfZmlsZV9yZWFkKGlvY2IsIGJ1ZiwgSU9fSVNBSU8sIGNvdW50LCBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3JlYWQoaW9jYiwgaW92LCBucl9zZWdzLCBJT19JU0FJTywgcG9zKTsKIH0KIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb19yZWFkX2ludmlzKAogCXN0cnVjdCBraW9jYgkJKmlvY2IsCi0JY2hhcgkJCV9fdXNlciAqYnVmLAotCXNpemVfdAkJCWNvdW50LAorCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92LAorCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCiAJbG9mZl90CQkJcG9zKQogewotCXJldHVybiBfX3hmc19maWxlX3JlYWQoaW9jYiwgYnVmLCBJT19JU0FJT3xJT19JTlZJUywgY291bnQsIHBvcyk7CisJcmV0dXJuIF9feGZzX2ZpbGVfcmVhZChpb2NiLCBpb3YsIG5yX3NlZ3MsIElPX0lTQUlPfElPX0lOVklTLCBwb3MpOwogfQogCiBTVEFUSUMgaW5saW5lIHNzaXplX3QKIF9feGZzX2ZpbGVfd3JpdGUoCi0Jc3RydWN0IGtpb2NiCSppb2NiLAotCWNvbnN0IGNoYXIJX191c2VyICpidWYsCi0JaW50CQlpb2ZsYWdzLAotCXNpemVfdAkJY291bnQsCi0JbG9mZl90CQlwb3MpCisJc3RydWN0IGtpb2NiCQkqaW9jYiwKKwljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdiwKKwl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAorCWludAkJCWlvZmxhZ3MsCisJbG9mZl90CQkJcG9zKQogewotCXN0cnVjdCBpb3ZlYwlpb3YgPSB7KHZvaWQgX191c2VyICopYnVmLCBjb3VudH07CiAJc3RydWN0IGZpbGUJKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7CiAJYmh2X3Zub2RlX3QJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7CkBAIC0xMDAsMTE3ICs5OSwyOCBAQAogCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKIAlpZiAodW5saWtlbHkoZmlsZS0+Zl9mbGFncyAmIE9fRElSRUNUKSkKIAkJaW9mbGFncyB8PSBJT19JU0RJUkVDVDsKLQlyZXR1cm4gYmh2X3ZvcF93cml0ZSh2cCwgaW9jYiwgJmlvdiwgMSwgJmlvY2ItPmtpX3BvcywgaW9mbGFncywgTlVMTCk7CisJcmV0dXJuIGJodl92b3Bfd3JpdGUodnAsIGlvY2IsIGlvdiwgbnJfc2VncywgJmlvY2ItPmtpX3BvcywKKwkJCQlpb2ZsYWdzLCBOVUxMKTsKIH0KIAogU1RBVElDIHNzaXplX3QKIHhmc19maWxlX2Fpb193cml0ZSgKIAlzdHJ1Y3Qga2lvY2IJCSppb2NiLAotCWNvbnN0IGNoYXIJCV9fdXNlciAqYnVmLAotCXNpemVfdAkJCWNvdW50LAorCWNvbnN0IHN0cnVjdCBpb3ZlYwkqaW92LAorCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCiAJbG9mZl90CQkJcG9zKQogewotCXJldHVybiBfX3hmc19maWxlX3dyaXRlKGlvY2IsIGJ1ZiwgSU9fSVNBSU8sIGNvdW50LCBwb3MpOworCXJldHVybiBfX3hmc19maWxlX3dyaXRlKGlvY2IsIGlvdiwgbnJfc2VncywgSU9fSVNBSU8sIHBvcyk7CiB9CiAKIFNUQVRJQyBzc2l6ZV90CiB4ZnNfZmlsZV9haW9fd3JpdGVfaW52aXMoCiAJc3RydWN0IGtpb2NiCQkqaW9jYiwKLQljb25zdCBjaGFyCQlfX3VzZXIgKmJ1ZiwKLQlzaXplX3QJCQljb3VudCwKKwljb25zdCBzdHJ1Y3QgaW92ZWMJKmlvdiwKKwl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAogCWxvZmZfdAkJCXBvcykKIHsKLQlyZXR1cm4gX194ZnNfZmlsZV93cml0ZShpb2NiLCBidWYsIElPX0lTQUlPfElPX0lOVklTLCBjb3VudCwgcG9zKTsKLX0KLQotU1RBVElDIGlubGluZSBzc2l6ZV90Ci1fX3hmc19maWxlX3JlYWR2KAotCXN0cnVjdCBmaWxlCQkqZmlsZSwKLQljb25zdCBzdHJ1Y3QgaW92ZWMgCSppb3YsCi0JaW50CQkJaW9mbGFncywKLQl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAotCWxvZmZfdAkJCSpwcG9zKQotewotCXN0cnVjdCBpbm9kZQkqaW5vZGUgPSBmaWxlLT5mX21hcHBpbmctPmhvc3Q7Ci0JYmh2X3Zub2RlX3QJKnZwID0gdm5fZnJvbV9pbm9kZShpbm9kZSk7Ci0Jc3RydWN0IGtpb2NiCWtpb2NiOwotCXNzaXplX3QJCXJ2YWw7Ci0KLQlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxlKTsKLQlraW9jYi5raV9wb3MgPSAqcHBvczsKLQotCWlmICh1bmxpa2VseShmaWxlLT5mX2ZsYWdzICYgT19ESVJFQ1QpKQotCQlpb2ZsYWdzIHw9IElPX0lTRElSRUNUOwotCXJ2YWwgPSBiaHZfdm9wX3JlYWQodnAsICZraW9jYiwgaW92LCBucl9zZWdzLAotCQkJCSZraW9jYi5raV9wb3MsIGlvZmxhZ3MsIE5VTEwpOwotCi0JKnBwb3MgPSBraW9jYi5raV9wb3M7Ci0JcmV0dXJuIHJ2YWw7Ci19Ci0KLVNUQVRJQyBzc2l6ZV90Ci14ZnNfZmlsZV9yZWFkdigKLQlzdHJ1Y3QgZmlsZQkJKmZpbGUsCi0JY29uc3Qgc3RydWN0IGlvdmVjIAkqaW92LAotCXVuc2lnbmVkIGxvbmcJCW5yX3NlZ3MsCi0JbG9mZl90CQkJKnBwb3MpCi17Ci0JcmV0dXJuIF9feGZzX2ZpbGVfcmVhZHYoZmlsZSwgaW92LCAwLCBucl9zZWdzLCBwcG9zKTsKLX0KLQotU1RBVElDIHNzaXplX3QKLXhmc19maWxlX3JlYWR2X2ludmlzKAotCXN0cnVjdCBmaWxlCQkqZmlsZSwKLQljb25zdCBzdHJ1Y3QgaW92ZWMgCSppb3YsCi0JdW5zaWduZWQgbG9uZwkJbnJfc2VncywKLQlsb2ZmX3QJCQkqcHBvcykKLXsKLQlyZXR1cm4gX194ZnNfZmlsZV9yZWFkdihmaWxlLCBpb3YsIElPX0lOVklTLCBucl9zZWdzLCBwcG9zKTsKLX0KLQotU1RBVElDIGlubGluZSBzc2l6ZV90Ci1fX3hmc19maWxlX3dyaXRldigKLQlzdHJ1Y3QgZmlsZQkJKmZpbGUsCi0JY29uc3Qgc3RydWN0IGlvdmVjIAkqaW92LAotCWludAkJCWlvZmxhZ3MsCi0JdW5zaWduZWQgbG9uZwkJbnJfc2VncywKLQlsb2ZmX3QJCQkqcHBvcykKLXsKLQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gZmlsZS0+Zl9tYXBwaW5nLT5ob3N0OwotCWJodl92bm9kZV90CSp2cCA9IHZuX2Zyb21faW5vZGUoaW5vZGUpOwotCXN0cnVjdCBraW9jYglraW9jYjsKLQlzc2l6ZV90CQlydmFsOwotCi0JaW5pdF9zeW5jX2tpb2NiKCZraW9jYiwgZmlsZSk7Ci0Ja2lvY2Iua2lfcG9zID0gKnBwb3M7Ci0JaWYgKHVubGlrZWx5KGZpbGUtPmZfZmxhZ3MgJiBPX0RJUkVDVCkpCi0JCWlvZmxhZ3MgfD0gSU9fSVNESVJFQ1Q7Ci0KLQlydmFsID0gYmh2X3ZvcF93cml0ZSh2cCwgJmtpb2NiLCBpb3YsIG5yX3NlZ3MsCi0JCQkJICZraW9jYi5raV9wb3MsIGlvZmxhZ3MsIE5VTEwpOwotCi0JKnBwb3MgPSBraW9jYi5raV9wb3M7Ci0JcmV0dXJuIHJ2YWw7Ci19Ci0KLVNUQVRJQyBzc2l6ZV90Ci14ZnNfZmlsZV93cml0ZXYoCi0Jc3RydWN0IGZpbGUJCSpmaWxlLAotCWNvbnN0IHN0cnVjdCBpb3ZlYyAJKmlvdiwKLQl1bnNpZ25lZCBsb25nCQlucl9zZWdzLAotCWxvZmZfdAkJCSpwcG9zKQotewotCXJldHVybiBfX3hmc19maWxlX3dyaXRldihmaWxlLCBpb3YsIDAsIG5yX3NlZ3MsIHBwb3MpOwotfQotCi1TVEFUSUMgc3NpemVfdAoteGZzX2ZpbGVfd3JpdGV2X2ludmlzKAotCXN0cnVjdCBmaWxlCQkqZmlsZSwKLQljb25zdCBzdHJ1Y3QgaW92ZWMgCSppb3YsCi0JdW5zaWduZWQgbG9uZwkJbnJfc2VncywKLQlsb2ZmX3QJCQkqcHBvcykKLXsKLQlyZXR1cm4gX194ZnNfZmlsZV93cml0ZXYoZmlsZSwgaW92LCBJT19JTlZJUywgbnJfc2VncywgcHBvcyk7CisJcmV0dXJuIF9feGZzX2ZpbGVfd3JpdGUoaW9jYiwgaW92LCBucl9zZWdzLCBJT19JU0FJT3xJT19JTlZJUywgcG9zKTsKIH0KIAogU1RBVElDIHNzaXplX3QKQEAgLTM3MCw3ICsyODAsNyBAQAogCiAJLyogVHJ5IGZhaXJseSBoYXJkIHRvIGdldCBtZW1vcnkgKi8KIAlkbyB7Ci0JCWlmICgocmVhZF9idWYgPSAoY2FkZHJfdClrbWFsbG9jKHJsZW4sIEdGUF9LRVJORUwpKSkKKwkJaWYgKChyZWFkX2J1ZiA9IGttYWxsb2MocmxlbiwgR0ZQX0tFUk5FTCkpKQogCQkJYnJlYWs7CiAJCXJsZW4gPj49IDE7CiAJfSB3aGlsZSAocmxlbiA+PSAxMDI0KTsKQEAgLTU0MCw4ICs0NTAsNiBAQAogCS5sbHNlZWsJCT0gZ2VuZXJpY19maWxlX2xsc2VlaywKIAkucmVhZAkJPSBkb19zeW5jX3JlYWQsCiAJLndyaXRlCQk9IGRvX3N5bmNfd3JpdGUsCi0JLnJlYWR2CQk9IHhmc19maWxlX3JlYWR2LAotCS53cml0ZXYJCT0geGZzX2ZpbGVfd3JpdGV2LAogCS5haW9fcmVhZAk9IHhmc19maWxlX2Fpb19yZWFkLAogCS5haW9fd3JpdGUJPSB4ZnNfZmlsZV9haW9fd3JpdGUsCiAJLnNlbmRmaWxlCT0geGZzX2ZpbGVfc2VuZGZpbGUsCkBAIC01NjUsOCArNDczLDYgQEAKIAkubGxzZWVrCQk9IGdlbmVyaWNfZmlsZV9sbHNlZWssCiAJLnJlYWQJCT0gZG9fc3luY19yZWFkLAogCS53cml0ZQkJPSBkb19zeW5jX3dyaXRlLAotCS5yZWFkdgkJPSB4ZnNfZmlsZV9yZWFkdl9pbnZpcywKLQkud3JpdGV2CQk9IHhmc19maWxlX3dyaXRldl9pbnZpcywKIAkuYWlvX3JlYWQJPSB4ZnNfZmlsZV9haW9fcmVhZF9pbnZpcywKIAkuYWlvX3dyaXRlCT0geGZzX2ZpbGVfYWlvX3dyaXRlX2ludmlzLAogCS5zZW5kZmlsZQk9IHhmc19maWxlX3NlbmRmaWxlX2ludmlzLApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfZ2xvYmFscy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfZ2xvYmFscy5jCmluZGV4IDZjMTYyYzMuLmVkM2E1ZTEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2dsb2JhbHMuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc19nbG9iYWxzLmMKQEAgLTM0LDcgKzM0LDcgQEAKIAkucmVzdHJpY3RfY2hvd24JPSB7CTAsCQkxLAkJMQl9LAogCS5zZ2lkX2luaGVyaXQJPSB7CTAsCQkwLAkJMQl9LAogCS5zeW1saW5rX21vZGUJPSB7CTAsCQkwLAkJMQl9LAotCS5wYW5pY19tYXNrCT0gewkwLAkJMCwJCTEyNwl9LAorCS5wYW5pY19tYXNrCT0gewkwLAkJMCwJCTI1NQl9LAogCS5lcnJvcl9sZXZlbAk9IHsJMCwJCTMsCQkxMQl9LAogCS5zeW5jZF90aW1lcgk9IHsJMSoxMDAsCQkzMCoxMDAsCQk3MjAwKjEwMH0sCiAJLnN0YXRzX2NsZWFyCT0gewkwLAkJMCwJCTEJfSwKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19pb2N0bC5jCmluZGV4IDZlNTJhNWQuLmE3NGY4NTQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvY3RsLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9jdGwuYwpAQCAtNjUzLDcgKzY1Myw3IEBACiBTVEFUSUMgaW50CiB4ZnNfaW9jX3NwYWNlKAogCWJodl9kZXNjX3QJCSpiZHAsCi0JYmh2X3Zub2RlX3QJCSp2cCwKKwlzdHJ1Y3QgaW5vZGUJCSppbm9kZSwKIAlzdHJ1Y3QgZmlsZQkJKmZpbHAsCiAJaW50CQkJZmxhZ3MsCiAJdW5zaWduZWQgaW50CQljbWQsCkBAIC03MzUsNyArNzM1LDcgQEAKIAkJICAgICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0dXJuIC1FUEVSTTsKIAotCQlyZXR1cm4geGZzX2lvY19zcGFjZShiZHAsIHZwLCBmaWxwLCBpb2ZsYWdzLCBjbWQsIGFyZyk7CisJCXJldHVybiB4ZnNfaW9jX3NwYWNlKGJkcCwgaW5vZGUsIGZpbHAsIGlvZmxhZ3MsIGNtZCwgYXJnKTsKIAogCWNhc2UgWEZTX0lPQ19ESU9JTkZPOiB7CiAJCXN0cnVjdCBkaW9hdHRyCWRhOwpAQCAtNzYzLDYgKzc2Myw4IEBACiAJCXJldHVybiB4ZnNfaW9jX2ZzZ2VvbWV0cnkobXAsIGFyZyk7CiAKIAljYXNlIFhGU19JT0NfR0VUVkVSU0lPTjoKKwkJcmV0dXJuIHB1dF91c2VyKGlub2RlLT5pX2dlbmVyYXRpb24sIChpbnQgX191c2VyICopYXJnKTsKKwogCWNhc2UgWEZTX0lPQ19HRVRYRkxBR1M6CiAJY2FzZSBYRlNfSU9DX1NFVFhGTEFHUzoKIAljYXNlIFhGU19JT0NfRlNHRVRYQVRUUjoKQEAgLTk1Nyw3ICs5NTksNyBAQAogU1RBVElDIGludAogeGZzX2lvY19zcGFjZSgKIAliaHZfZGVzY190CQkqYmRwLAotCWJodl92bm9kZV90CQkqdnAsCisJc3RydWN0IGlub2RlCQkqaW5vZGUsCiAJc3RydWN0IGZpbGUJCSpmaWxwLAogCWludAkJCWlvZmxhZ3MsCiAJdW5zaWduZWQgaW50CQljbWQsCkBAIC05NjcsMTMgKzk2OSwxMyBAQAogCWludAkJCWF0dHJfZmxhZ3MgPSAwOwogCWludAkJCWVycm9yOwogCi0JaWYgKHZwLT52X2lub2RlLmlfZmxhZ3MgJiAoU19JTU1VVEFCTEV8U19BUFBFTkQpKQorCWlmIChpbm9kZS0+aV9mbGFncyAmIChTX0lNTVVUQUJMRXxTX0FQUEVORCkpCiAJCXJldHVybiAtWEZTX0VSUk9SKEVQRVJNKTsKIAogCWlmICghKGZpbHAtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKIAkJcmV0dXJuIC1YRlNfRVJST1IoRUJBREYpOwogCi0JaWYgKCFWTl9JU1JFRyh2cCkpCisJaWYgKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKQogCQlyZXR1cm4gLVhGU19FUlJPUihFSU5WQUwpOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKCZiZiwgYXJnLCBzaXplb2YoYmYpKSkKQEAgLTEyNjQsMTMgKzEyNjYsNiBAQAogCQlicmVhazsKIAl9CiAKLQljYXNlIFhGU19JT0NfR0VUVkVSU0lPTjogewotCQlmbGFncyA9IHZuX3RvX2lub2RlKHZwKS0+aV9nZW5lcmF0aW9uOwotCQlpZiAoY29weV90b191c2VyKGFyZywgJmZsYWdzLCBzaXplb2YoZmxhZ3MpKSkKLQkJCWVycm9yID0gLUVGQVVMVDsKLQkJYnJlYWs7Ci0JfQotCiAJZGVmYXVsdDoKIAkJZXJyb3IgPSAtRU5PVFRZOwogCQlicmVhazsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2lvcHMuYwppbmRleCBkOTE4MDAyLi4zYmE4MTRhIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19pb3BzLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfaW9wcy5jCkBAIC01NTMsMTMgKzU1MywxMyBAQAogCUFTU0VSVChkZW50cnkpOwogCUFTU0VSVChuZCk7CiAKLQlsaW5rID0gKGNoYXIgKilrbWFsbG9jKE1BWFBBVEhMRU4rMSwgR0ZQX0tFUk5FTCk7CisJbGluayA9IGttYWxsb2MoTUFYUEFUSExFTisxLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxpbmspIHsKIAkJbmRfc2V0X2xpbmsobmQsIEVSUl9QVFIoLUVOT01FTSkpOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKLQl1aW8gPSAodWlvX3QgKilrbWFsbG9jKHNpemVvZih1aW9fdCksIEdGUF9LRVJORUwpOworCXVpbyA9IGttYWxsb2Moc2l6ZW9mKHVpb190KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCF1aW8pIHsKIAkJa2ZyZWUobGluayk7CiAJCW5kX3NldF9saW5rKG5kLCBFUlJfUFRSKC1FTk9NRU0pKTsKQEAgLTYyMywxMiArNjIzLDI3IEBACiB7CiAJc3RydWN0IGlub2RlCSppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAliaHZfdm5vZGVfdAkqdnAgPSB2bl9mcm9tX2lub2RlKGlub2RlKTsKLQlpbnQJCWVycm9yID0gMDsKKwliaHZfdmF0dHJfdAl2YXR0ciA9IHsgLnZhX21hc2sgPSBYRlNfQVRfU1RBVCB9OworCWludAkJZXJyb3I7CiAKLQlpZiAodW5saWtlbHkodnAtPnZfZmxhZyAmIFZNT0RJRklFRCkpCi0JCWVycm9yID0gdm5fcmV2YWxpZGF0ZSh2cCk7Ci0JaWYgKCFlcnJvcikKLQkJZ2VuZXJpY19maWxsYXR0cihpbm9kZSwgc3RhdCk7CisJZXJyb3IgPSBiaHZfdm9wX2dldGF0dHIodnAsICZ2YXR0ciwgQVRUUl9MQVpZLCBOVUxMKTsKKwlpZiAobGlrZWx5KCFlcnJvcikpIHsKKwkJc3RhdC0+c2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTsKKwkJc3RhdC0+ZGV2ID0gaW5vZGUtPmlfc2ItPnNfZGV2OworCQlzdGF0LT5yZGV2ID0gKHZhdHRyLnZhX3JkZXYgPT0gMCkgPyAwIDoKKwkJCQlNS0RFVihzeXN2X21ham9yKHZhdHRyLnZhX3JkZXYpICYgMHgxZmYsCisJCQkJICAgICAgc3lzdl9taW5vcih2YXR0ci52YV9yZGV2KSk7CisJCXN0YXQtPm1vZGUgPSB2YXR0ci52YV9tb2RlOworCQlzdGF0LT5ubGluayA9IHZhdHRyLnZhX25saW5rOworCQlzdGF0LT51aWQgPSB2YXR0ci52YV91aWQ7CisJCXN0YXQtPmdpZCA9IHZhdHRyLnZhX2dpZDsKKwkJc3RhdC0+aW5vID0gdmF0dHIudmFfbm9kZWlkOworCQlzdGF0LT5hdGltZSA9IHZhdHRyLnZhX2F0aW1lOworCQlzdGF0LT5tdGltZSA9IHZhdHRyLnZhX210aW1lOworCQlzdGF0LT5jdGltZSA9IHZhdHRyLnZhX2N0aW1lOworCQlzdGF0LT5ibG9ja3MgPSB2YXR0ci52YV9uYmxvY2tzOworCQlzdGF0LT5ibGtzaXplID0gdmF0dHIudmFfYmxvY2tzaXplOworCX0KIAlyZXR1cm4gLWVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbGludXguaAppbmRleCBhMTNmNzVjLi4yYjBlMDAxIDEwMDY0NAotLS0gYS9mcy94ZnMvbGludXgtMi42L3hmc19saW51eC5oCisrKyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX2xpbnV4LmgKQEAgLTE0OCwxMSArMTQ4LDcgQEAKIAkJKGN1cnJlbnQtPmZsYWdzID0gKChjdXJyZW50LT5mbGFncyAmIH4oZikpIHwgKCooc3ApICYgKGYpKSkpCiAKICNkZWZpbmUgTkJQUAkJUEFHRV9TSVpFCi0jZGVmaW5lIERQUFNIRlQJCShQQUdFX1NISUZUIC0gOSkKICNkZWZpbmUgTkRQUAkJKDEgPDwgKFBBR0VfU0hJRlQgLSA5KSkKLSNkZWZpbmUgZHRvcChERCkJKCgoREQpICsgTkRQUCAtIDEpID4+IERQUFNIRlQpCi0jZGVmaW5lIGR0b3B0KEREKQkoKEREKSA+PiBEUFBTSEZUKQotI2RlZmluZSBkcG9mZihERCkJKChERCkgJiAoTkRQUC0xKSkKIAogI2RlZmluZSBOQkJZCQk4CQkvKiBudW1iZXIgb2YgYml0cyBwZXIgYnl0ZSAqLwogI2RlZmluZQlOQlBDCQlQQUdFX1NJWkUJLyogTnVtYmVyIG9mIGJ5dGVzIHBlciBjbGljayAqLwpAQCAtMTcyLDggKzE2OCw2IEBACiAjZGVmaW5lCWJ0b2N0KHgpCSgoX19wc3Vuc2lnbmVkX3QpKHgpPj5CUENTSElGVCkKICNkZWZpbmUJYnRvYzY0KHgpCSgoKF9fdWludDY0X3QpKHgpKyhOQlBDLTEpKT4+QlBDU0hJRlQpCiAjZGVmaW5lCWJ0b2N0NjQoeCkJKChfX3VpbnQ2NF90KSh4KT4+QlBDU0hJRlQpCi0jZGVmaW5lCWlvX2J0b2MoeCkJKCgoX19wc3Vuc2lnbmVkX3QpKHgpKyhJT19OQlBDLTEpKT4+SU9fQlBDU0hJRlQpCi0jZGVmaW5lCWlvX2J0b2N0KHgpCSgoX19wc3Vuc2lnbmVkX3QpKHgpPj5JT19CUENTSElGVCkKIAogLyogb2ZmX3QgYnl0ZXMgdG8gY2xpY2tzICovCiAjZGVmaW5lIG9mZnRvYyh4KSAgICAgICAoKChfX3VpbnQ2NF90KSh4KSsoTkJQQy0xKSk+PkJQQ1NISUZUKQpAQCAtMTg2LDcgKzE4MCw2IEBACiAjZGVmaW5lCWN0b2IoeCkJCSgoX19wc3Vuc2lnbmVkX3QpKHgpPDxCUENTSElGVCkKICNkZWZpbmUgYnRvY3QoeCkgICAgICAgICgoX19wc3Vuc2lnbmVkX3QpKHgpPj5CUENTSElGVCkKICNkZWZpbmUJY3RvYjY0KHgpCSgoX191aW50NjRfdCkoeCk8PEJQQ1NISUZUKQotI2RlZmluZQlpb19jdG9iKHgpCSgoX19wc3Vuc2lnbmVkX3QpKHgpPDxJT19CUENTSElGVCkKIAogLyogYnl0ZXMgdG8gY2xpY2tzICovCiAjZGVmaW5lIGJ0b2MoeCkgICAgICAgICAoKChfX3BzdW5zaWduZWRfdCkoeCkrKE5CUEMtMSkpPj5CUENTSElGVCkKQEAgLTMzOSw0ICszMzIsMTEgQEAKIAlyZXR1cm4oeCAqIHkpOwogfQogCitzdGF0aWMgaW5saW5lIF9fdWludDY0X3QgaG93bWFueV82NChfX3VpbnQ2NF90IHgsIF9fdWludDMyX3QgeSkKK3sKKwl4ICs9IHkgLSAxOworCWRvX2Rpdih4LCB5KTsKKwlyZXR1cm4geDsKK30KKwogI2VuZGlmIC8qIF9fWEZTX0xJTlVYX18gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX2xydy5jIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKaW5kZXggZWU3ODhiMS4uZmE4NDJmMSAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfbHJ3LmMKQEAgLTI3MCwxNiArMjcwLDE4IEBACiAJCX0KIAl9CiAKLQlpZiAodW5saWtlbHkoKGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkgJiYgVk5fQ0FDSEVEKHZwKSkpCi0JCWJodl92b3BfZmx1c2hpbnZhbF9wYWdlcyh2cCwgY3Rvb2ZmKG9mZnRvY3QoKm9mZnNldCkpLAotCQkJCQkJLTEsIEZJX1JFTUFQRl9MT0NLRUQpOwotCi0JaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpCisJaWYgKHVubGlrZWx5KGlvZmxhZ3MgJiBJT19JU0RJUkVDVCkpIHsKKwkJaWYgKFZOX0NBQ0hFRCh2cCkpCisJCQliaHZfdm9wX2ZsdXNoaW52YWxfcGFnZXModnAsIGN0b29mZihvZmZ0b2N0KCpvZmZzZXQpKSwKKwkJCQkJCSAtMSwgRklfUkVNQVBGX0xPQ0tFRCk7CiAJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOworCX0KIAogCXhmc19yd19lbnRlcl90cmFjZShYRlNfUkVBRF9FTlRFUiwgJmlwLT5pX2lvY29yZSwKIAkJCQkodm9pZCAqKWlvdnAsIHNlZ3MsICpvZmZzZXQsIGlvZmxhZ3MpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb19yZWFkKGlvY2IsIGlvdnAsIHNlZ3MsIG9mZnNldCk7CisKKwlpb2NiLT5raV9wb3MgPSAqb2Zmc2V0OworCXJldCA9IGdlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCBpb3ZwLCBzZWdzLCAqb2Zmc2V0KTsKIAlpZiAocmV0ID09IC1FSU9DQlFVRVVFRCAmJiAhKGlvZmxhZ3MgJiBJT19JU0FJTykpCiAJCXJldCA9IHdhaXRfb25fc3luY19raW9jYihpb2NiKTsKIAlpZiAocmV0ID4gMCkKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMgYi9mcy94ZnMvbGludXgtMi42L3hmc19zdXBlci5jCmluZGV4IDQ3NTRmMzQuLjM4YzRkMTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3N1cGVyLmMKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfc3VwZXIuYwpAQCAtMTcxLDcgKzE3MSw2IEBACiAJCWJyZWFrOwogCX0KIAotCWlub2RlLT5pX2Jsa3NpemUgPSB4ZnNfcHJlZmVycmVkX2lvc2l6ZShtcCk7CiAJaW5vZGUtPmlfZ2VuZXJhdGlvbiA9IGlwLT5pX2QuZGlfZ2VuOwogCWlfc2l6ZV93cml0ZShpbm9kZSwgaXAtPmlfZC5kaV9zaXplKTsKIAlpbm9kZS0+aV9ibG9ja3MgPQpAQCAtMjI4LDcgKzIyNyw5IEBACiAJCXhmc19yZXZhbGlkYXRlX2lub2RlKFhGU19CSFZUT00oYmRwKSwgdnAsIGlwKTsKIAkJeGZzX3NldF9pbm9kZW9wcyhpbm9kZSk7CiAKKwkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJaXAtPmlfZmxhZ3MgJj0gflhGU19JTkVXOworCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCWJhcnJpZXIoKTsKIAogCQl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zmcy5oIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmgKaW5kZXggOTFmYzJjNC4uZGEyNTViZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmgKKysrIGIvZnMveGZzL2xpbnV4LTIuNi94ZnNfdmZzLmgKQEAgLTc5LDcgKzc5LDcgQEAKICNkZWZpbmUgVkZTX1JET05MWQkJMHgwMDAxCS8qIHJlYWQtb25seSB2ZnMgKi8KICNkZWZpbmUgVkZTX0dSUElECQkweDAwMDIJLyogZ3JvdXAtSUQgYXNzaWduZWQgZnJvbSBkaXJlY3RvcnkgKi8KICNkZWZpbmUgVkZTX0RNSQkJCTB4MDAwNAkvKiBmaWxlc3lzdGVtIGhhcyB0aGUgRE1JIGVuYWJsZWQgKi8KLSNkZWZpbmUgVkZTX1VNT1VOVAkJMHgwMDA4CS8qIHVubW91bnQgaW4gcHJvZ3Jlc3MgKi8KKy8qIC0tLS0gVkZTX1VNT1VOVCAtLS0tCQkweDAwMDgJLS0gdW5uZWVkZWQsIGZpeGVkIHZpYSBrdGhyZWFkIEFQSXMgKi8KICNkZWZpbmUgVkZTXzMyQklUSU5PREVTCQkweDAwMTAJLyogZG8gbm90IHVzZSBpbnVtcyBhYm92ZSAzMiBiaXRzICovCiAjZGVmaW5lIFZGU19FTkQJCQkweDAwMTAJLyogbWF4IGZsYWcgKi8KIApkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuYyBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmMKaW5kZXggNjYyOGQ5Ni4uNTUzZmE3MyAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuYworKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5jCkBAIC0xMjIsNyArMTIyLDYgQEAKIAlpbm9kZS0+aV9ibG9ja3MJICAgID0gdmFwLT52YV9uYmxvY2tzOwogCWlub2RlLT5pX210aW1lCSAgICA9IHZhcC0+dmFfbXRpbWU7CiAJaW5vZGUtPmlfY3RpbWUJICAgID0gdmFwLT52YV9jdGltZTsKLQlpbm9kZS0+aV9ibGtzaXplICAgID0gdmFwLT52YV9ibG9ja3NpemU7CiAJaWYgKHZhcC0+dmFfeGZsYWdzICYgWEZTX1hGTEFHX0lNTVVUQUJMRSkKIAkJaW5vZGUtPmlfZmxhZ3MgfD0gU19JTU1VVEFCTEU7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaCBiL2ZzL3hmcy9saW51eC0yLjYveGZzX3Zub2RlLmgKaW5kZXggYzQyYjMyMi4uNTE1ZjVmZCAxMDA2NDQKLS0tIGEvZnMveGZzL2xpbnV4LTIuNi94ZnNfdm5vZGUuaAorKysgYi9mcy94ZnMvbGludXgtMi42L3hmc192bm9kZS5oCkBAIC04NSw4ICs4NSw2IEBACiAjZGVmaW5lIFZOX0JIVl9IRUFEKHZwKQkJCSgoYmh2X2hlYWRfdCAqKSgmKCh2cCktPnZfYmgpKSkKICNkZWZpbmUgdm5fYmh2X2hlYWRfaW5pdChiaHAsbmFtZSkJYmh2X2hlYWRfaW5pdChiaHAsbmFtZSkKICNkZWZpbmUgdm5fYmh2X3JlbW92ZShiaHAsYmRwKQkJYmh2X3JlbW92ZShiaHAsYmRwKQotI2RlZmluZSB2bl9iaHZfbG9va3VwKGJocCxvcHMpCQliaHZfbG9va3VwKGJocCxvcHMpCi0jZGVmaW5lIHZuX2Jodl9sb29rdXBfdW5sb2NrZWQoYmhwLG9wcykgYmh2X2xvb2t1cF91bmxvY2tlZChiaHAsb3BzKQogCiAvKgogICogVm5vZGUgdG8gTGludXggaW5vZGUgbWFwcGluZy4KZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfZHF1b3RfaXRlbS5jIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKaW5kZXggNWIyZGNjNS4uMzNhZDVhZiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19kcXVvdF9pdGVtLmMKQEAgLTM4MiwxOCArMzgyLDYgQEAKIAogCiAvKgotICogVGhlIHRyYW5zYWN0aW9uIHdpdGggdGhlIGRxdW90IGxvY2tlZCBoYXMgYWJvcnRlZC4gIFRoZSBkcXVvdAotICogbXVzdCBub3QgYmUgZGlydHkgd2l0aGluIHRoZSB0cmFuc2FjdGlvbi4gIFdlIHNpbXBseSB1bmxvY2sganVzdAotICogYXMgaWYgdGhlIHRyYW5zYWN0aW9uIGhhZCBiZWVuIGNhbmNlbGxlZC4KLSAqLwotU1RBVElDIHZvaWQKLXhmc19xbV9kcXVvdF9sb2dpdGVtX2Fib3J0KAotCXhmc19kcV9sb2dpdGVtX3QgICAgKnFsKQotewotCXhmc19xbV9kcXVvdF9sb2dpdGVtX3VubG9jayhxbCk7Ci19Ci0KLS8qCiAgKiB0aGlzIG5lZWRzIHRvIHN0YW1wIGFuIGxzbiBpbnRvIHRoZSBkcXVvdCwgSSB0aGluay4KICAqIHJwYydzIHRoYXQgbG9vayBhdCB1c2VyIGRxdW90J3Mgd291bGQgdGhlbiBoYXZlIHRvCiAgKiBwdXNoIG9uIHRoZSBkZXBlbmRlbmN5IHJlY29yZGVkIGluIHRoZSBkcXVvdApAQCAtNDI2LDcgKzQxNCw2IEBACiAJLmlvcF9jb21taXR0ZWQJPSAoeGZzX2xzbl90KCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX3FtX2RxdW90X2xvZ2l0ZW1fY29tbWl0dGVkLAogCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX2RxdW90X2xvZ2l0ZW1fcHVzaCwKLQkuaW9wX2Fib3J0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fZHF1b3RfbG9naXRlbV9hYm9ydCwKIAkuaW9wX3B1c2hidWYJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKQogCQkJCQl4ZnNfcW1fZHF1b3RfbG9naXRlbV9wdXNoYnVmLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKQEAgLTU1OSwxNyArNTQ2LDYgQEAKIH0KIAogLyoKLSAqIFRoZSB0cmFuc2FjdGlvbiBvZiB3aGljaCB0aGlzIFFVT1RBT0ZGIGlzIGEgcGFydCBoYXMgYmVlbiBhYm9ydGVkLgotICogSnVzdCBjbGVhbiB1cCBhZnRlciBvdXJzZWx2ZXMuCi0gKiBTaG91bGRuJ3QgdGhpcyBuZXZlciBoYXBwZW4gaW4gdGhlIGNhc2Ugb2YgcW9mZmVuZCBsb2dpdGVtcz8gWFhYCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfcW1fcW9mZl9sb2dpdGVtX2Fib3J0KHhmc19xb2ZmX2xvZ2l0ZW1fdCAqcWYpCi17Ci0Ja21lbV9mcmVlKHFmLCBzaXplb2YoeGZzX3FvZmZfbG9naXRlbV90KSk7Ci19Ci0KLS8qCiAgKiBUaGVyZSBpc24ndCBtdWNoIHlvdSBjYW4gZG8gdG8gcHVzaCBvbiBhbiBxdW90YW9mZiBpdGVtLiAgSXQgaXMgc2ltcGx5CiAgKiBzdHVjayB3YWl0aW5nIGZvciB0aGUgbG9nIHRvIGJlIGZsdXNoZWQgdG8gZGlzay4KICAqLwpAQCAtNjQ0LDcgKzYyMCw2IEBACiAJLmlvcF9jb21taXR0ZWQJPSAoeGZzX2xzbl90KCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX3FtX3FvZmZlbmRfbG9naXRlbV9jb21taXR0ZWQsCiAJLmlvcF9wdXNoCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX3B1c2gsCi0JLmlvcF9hYm9ydAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX3FtX3FvZmZfbG9naXRlbV9hYm9ydCwKIAkuaW9wX3B1c2hidWYJPSBOVUxMLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX3FtX3FvZmZlbmRfbG9naXRlbV9jb21taXR0aW5nCkBAIC02NjcsNyArNjQyLDYgQEAKIAkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRlZCwKIAkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19xbV9xb2ZmX2xvZ2l0ZW1fcHVzaCwKLQkuaW9wX2Fib3J0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfcW1fcW9mZl9sb2dpdGVtX2Fib3J0LAogCS5pb3BfcHVzaGJ1Zgk9IE5VTEwsCiAJLmlvcF9jb21taXR0aW5nID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfcW1fcW9mZl9sb2dpdGVtX2NvbW1pdHRpbmcKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uYyBiL2ZzL3hmcy9xdW90YS94ZnNfcW0uYwppbmRleCBlMjNlNDU1Li43YzZhM2E1IDEwMDY0NAotLS0gYS9mcy94ZnMvcXVvdGEveGZzX3FtLmMKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xbS5jCkBAIC0xMTIsMTcgKzExMiwxNyBAQAogewogCXhmc19kcWhhc2hfdAkqdWRxaGFzaCwgKmdkcWhhc2g7CiAJeGZzX3FtX3QJKnhxbTsKLQl1aW50CQlpLCBoc2l6ZSwgZmxhZ3MgPSBLTV9TTEVFUCB8IEtNX01BWUZBSUw7CisJc2l6ZV90CQloc2l6ZTsKKwl1aW50CQlpOwogCiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBkcXVvdCBoYXNoIHRhYmxlcy4KIAkgKi8KLQloc2l6ZSA9IFhGU19RTV9IQVNIU0laRV9ISUdIOwotCXdoaWxlICghKHVkcWhhc2ggPSBrbWVtX3phbGxvYyhoc2l6ZSAqIHNpemVvZih4ZnNfZHFoYXNoX3QpLCBmbGFncykpKSB7Ci0JCWlmICgoaHNpemUgPj49IDEpIDw9IFhGU19RTV9IQVNIU0laRV9MT1cpCi0JCQlmbGFncyA9IEtNX1NMRUVQOwotCX0KLQlnZHFoYXNoID0ga21lbV96YWxsb2MoaHNpemUgKiBzaXplb2YoeGZzX2RxaGFzaF90KSwgS01fU0xFRVApOworCXVkcWhhc2ggPSBrbWVtX3phbGxvY19ncmVlZHkoJmhzaXplLAorCQkJCSAgICAgWEZTX1FNX0hBU0hTSVpFX0xPVywgWEZTX1FNX0hBU0hTSVpFX0hJR0gsCisJCQkJICAgICBLTV9TTEVFUCB8IEtNX01BWUZBSUwgfCBLTV9MQVJHRSk7CisJZ2RxaGFzaCA9IGttZW1femFsbG9jKGhzaXplLCBLTV9TTEVFUCB8IEtNX0xBUkdFKTsKKwloc2l6ZSAvPSBzaXplb2YoeGZzX2RxaGFzaF90KTsKIAluZHF1b3QgPSBoc2l6ZSA8PCA4OwogCiAJeHFtID0ga21lbV96YWxsb2Moc2l6ZW9mKHhmc19xbV90KSwgS01fU0xFRVApOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3F1b3RhL3hmc19xbS5oIGIvZnMveGZzL3F1b3RhL3hmc19xbS5oCmluZGV4IDQ1NjhkZWIuLjY4OTQwN2QgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9xdW90YS94ZnNfcW0uaAorKysgYi9mcy94ZnMvcXVvdGEveGZzX3FtLmgKQEAgLTU2LDEyICs1Niw2IEBACiAjZGVmaW5lIFhGU19RTV9IQVNIU0laRV9ISUdICQkoKE5CUFAgKiA0KSAvIHNpemVvZih4ZnNfZHFoYXNoX3QpKQogCiAvKgotICogV2Ugb3V0cHV0IGEgY21uX2VyciB3aGVuIHF1b3RhY2hlY2tpbmcgYSBxdW90YSBmaWxlIHdpdGggbW9yZSB0aGFuCi0gKiB0aGlzIG1hbnkgZnNicy4KLSAqLwotI2RlZmluZSBYRlNfUU1fQklHX1FDSEVDS19OQkxLUwkJNTAwCi0KLS8qCiAgKiBUaGlzIGRlZmluZXMgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbiBvZiBkcXVvdHMuCiAgKiBDdXJyZW50bHksIGl0IGlzIGp1c3Qgb25lIGZpbGUgc3lzdGVtIGJsb2NrLCBhbmQgYSA0SyBibGsgY29udGFpbnMgMzAKICAqICgxMzYgKiAzMCA9IDQwODApIGRxdW90cy4gSXQncyBwcm9iYWJseSBub3Qgd29ydGggdHJ5aW5nIHRvIG1ha2UKZGlmZiAtLWdpdCBhL2ZzL3hmcy9xdW90YS94ZnNfcXVvdGFfcHJpdi5oIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKaW5kZXggYjdkZGQwNC4uYThiODVlMiAxMDA2NDQKLS0tIGEvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKKysrIGIvZnMveGZzL3F1b3RhL3hmc19xdW90YV9wcml2LmgKQEAgLTc1LDcgKzc1LDYgQEAKIAogI2RlZmluZSB4ZnNfcW1fZnJlZWxpc3RfbG9jayhxbSkJWFFNTENLKCYoKHFtKS0+cW1fZHFmcmVlbGlzdCkpCiAjZGVmaW5lIHhmc19xbV9mcmVlbGlzdF91bmxvY2socW0pCVhRTVVOTENLKCYoKHFtKS0+cW1fZHFmcmVlbGlzdCkpCi0jZGVmaW5lIFhGU19RTV9JU19GUkVFTElTVF9MT0NLRUQocW0pCVhRTUlTTENLRCgmKChxbSktPnFtX2RxZnJlZWxpc3QpKQogCiAvKgogICogSGFzaCBpbnRvIGEgYnVja2V0IGluIHRoZSBkcXVvdCBoYXNoIHRhYmxlLCBiYXNlZCBvbiA8bXAsIGlkPi4KQEAgLTE3MCw2ICsxNjksNSBAQAogI2RlZmluZSBEUUZMQUdUT19UWVBFU1RSKGQpCSgoKGQpLT5kcV9mbGFncyAmIFhGU19EUV9VU0VSKSA/ICJVU1IiIDogXAogCQkJCSAoKChkKS0+ZHFfZmxhZ3MgJiBYRlNfRFFfR1JPVVApID8gIkdSUCIgOiBcCiAJCQkJICgoKGQpLT5kcV9mbGFncyAmIFhGU19EUV9QUk9KKSA/ICJQUkoiOiI/Pz8iKSkpCi0jZGVmaW5lIERRRkxBR1RPX0RJUlRZU1RSKGQpCShYRlNfRFFfSVNfRElSVFkoZCkgPyAiRElSVFkiIDogIk5PVERJUlRZIikKIAogI2VuZGlmCS8qIF9fWEZTX1FVT1RBX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMvc3VwcG9ydC9rdHJhY2UuYyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCmluZGV4IGFkZGY1YTcuLjVjZjJlODYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCisrKyBiL2ZzL3hmcy9zdXBwb3J0L2t0cmFjZS5jCkBAIC03NSw3ICs3NSw3IEBACiAJCQkJCQkJICAgIHNsZWVwKTsKIAl9IGVsc2UgewogCQlrdGVwID0gKGt0cmFjZV9lbnRyeV90KilrbWVtX3phbGxvYygobmVudHJpZXMgKiBzaXplb2YoKmt0ZXApKSwKLQkJCQkJCQkgICAgc2xlZXApOworCQkJCQkJCSAgICBzbGVlcCB8IEtNX0xBUkdFKTsKIAl9CiAKIAlpZiAoa3RlcCA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2FnLmggYi9mcy94ZnMveGZzX2FnLmgKaW5kZXggZGMyMzYxZC4uOWVjZTdmODcgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWcuaAorKysgYi9mcy94ZnMveGZzX2FnLmgKQEAgLTE1MCw3ICsxNTAsNyBAQAogI2RlZmluZQlYRlNfQlVGX1RPX0FHRkwoYnApCSgoeGZzX2FnZmxfdCAqKVhGU19CVUZfUFRSKGJwKSkKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2FnZmwgewotCXhmc19hZ2Jsb2NrX3QJYWdmbF9ibm9bMV07CS8qIGFjdHVhbGx5IFhGU19BR0ZMX1NJWkUobXApICovCisJX19iZTMyCQlhZ2ZsX2Jub1sxXTsJLyogYWN0dWFsbHkgWEZTX0FHRkxfU0laRShtcCkgKi8KIH0geGZzX2FnZmxfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYWxsb2MuYyBiL2ZzL3hmcy94ZnNfYWxsb2MuYwppbmRleCBkMmJiY2Q4Li5lODBkZGEzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2FsbG9jLmMKKysrIGIvZnMveGZzL3hmc19hbGxvYy5jCkBAIC0xNDc3LDggKzE0NzcsMTAgQEAKIAkvKgogCSAqIENhbid0IGFsbG9jYXRlIGZyb20gdGhlIGZyZWVsaXN0IGZvciBzb21lIHJlYXNvbi4KIAkgKi8KLQllbHNlCisJZWxzZSB7CisJCWZibm8gPSBOVUxMQUdCTE9DSzsKIAkJZmxlbiA9IDA7CisJfQogCS8qCiAJICogQ2FuJ3QgZG8gdGhlIGFsbG9jYXRpb24sIGdpdmUgdXAuCiAJICovCkBAIC0yMDIxLDcgKzIwMjMsNyBAQAogCS8qCiAJICogR2V0IHRoZSBibG9jayBudW1iZXIgYW5kIHVwZGF0ZSB0aGUgZGF0YSBzdHJ1Y3R1cmVzLgogCSAqLwotCWJubyA9IElOVF9HRVQoYWdmbC0+YWdmbF9ibm9bYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxmaXJzdCldLCBBUkNIX0NPTlZFUlQpOworCWJubyA9IGJlMzJfdG9fY3B1KGFnZmwtPmFnZmxfYm5vW2JlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsZmlyc3QpXSk7CiAJYmUzMl9hZGQoJmFnZi0+YWdmX2ZsZmlyc3QsIDEpOwogCXhmc190cmFuc19icmVsc2UodHAsIGFnZmxicCk7CiAJaWYgKGJlMzJfdG9fY3B1KGFnZi0+YWdmX2ZsZmlyc3QpID09IFhGU19BR0ZMX1NJWkUobXApKQpAQCAtMjEwOCw3ICsyMTEwLDcgQEAKIHsKIAl4ZnNfYWdmX3QJCSphZ2Y7CS8qIGEuZy4gZnJlZXNwYWNlIHN0cnVjdHVyZSAqLwogCXhmc19hZ2ZsX3QJCSphZ2ZsOwkvKiBhLmcuIGZyZWUgYmxvY2sgYXJyYXkgKi8KLQl4ZnNfYWdibG9ja190CQkqYmxvY2twOy8qIHBvaW50ZXIgdG8gYXJyYXkgZW50cnkgKi8KKwlfX2JlMzIJCQkqYmxvY2twOy8qIHBvaW50ZXIgdG8gYXJyYXkgZW50cnkgKi8KIAlpbnQJCQllcnJvcjsKICNpZmRlZiBYRlNfQUxMT0NfVFJBQ0UKIAlzdGF0aWMgY2hhcgkJZm5hbWVbXSA9ICJ4ZnNfYWxsb2NfcHV0X2ZyZWVsaXN0IjsKQEAgLTIxMzIsNyArMjEzNCw3IEBACiAJcGFnLT5wYWdmX2ZsY291bnQrKzsKIAlBU1NFUlQoYmUzMl90b19jcHUoYWdmLT5hZ2ZfZmxjb3VudCkgPD0gWEZTX0FHRkxfU0laRShtcCkpOwogCWJsb2NrcCA9ICZhZ2ZsLT5hZ2ZsX2Jub1tiZTMyX3RvX2NwdShhZ2YtPmFnZl9mbGxhc3QpXTsKLQlJTlRfU0VUKCpibG9ja3AsIEFSQ0hfQ09OVkVSVCwgYm5vKTsKKwkqYmxvY2twID0gY3B1X3RvX2JlMzIoYm5vKTsKIAlUUkFDRV9NT0RBR0YoTlVMTCwgYWdmLCBYRlNfQUdGX0ZMTEFTVCB8IFhGU19BR0ZfRkxDT1VOVCk7CiAJeGZzX2FsbG9jX2xvZ19hZ2YodHAsIGFnYnAsIFhGU19BR0ZfRkxMQVNUIHwgWEZTX0FHRl9GTENPVU5UKTsKIAl4ZnNfdHJhbnNfbG9nX2J1Zih0cCwgYWdmbGJwLApkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hbGxvY19idHJlZS5jIGIvZnMveGZzL3hmc19hbGxvY19idHJlZS5jCmluZGV4IDc0NDY1NTYuLjc0Y2FkZjkgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2FsbG9jX2J0cmVlLmMKQEAgLTkyLDYgKzkyLDcgQEAKIAl4ZnNfYWxsb2Nfa2V5X3QJCSpya3A7CS8qIHJpZ2h0IGJsb2NrIGtleSBwb2ludGVyICovCiAJeGZzX2FsbG9jX3B0cl90CQkqcnBwOwkvKiByaWdodCBibG9jayBhZGRyZXNzIHBvaW50ZXIgKi8KIAlpbnQJCQlycmVjcz0wOwkvKiBudW1iZXIgb2YgcmVjb3JkcyBpbiByaWdodCBibG9jayAqLworCWludAkJCW51bXJlY3M7CiAJeGZzX2FsbG9jX3JlY190CQkqcnJwOwkvKiByaWdodCBibG9jayByZWNvcmQgcG9pbnRlciAqLwogCXhmc19idHJlZV9jdXJfdAkJKnRjdXI7CS8qIHRlbXBvcmFyeSBidHJlZSBjdXJzb3IgKi8KIApAQCAtMTE1LDcgKzExNiw4IEBACiAJLyoKIAkgKiBGYWlsIGlmIHdlJ3JlIG9mZiB0aGUgZW5kIG9mIHRoZSBibG9jay4KIAkgKi8KLQlpZiAocHRyID4gYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpKSB7CisJbnVtcmVjcyA9IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKTsKKwlpZiAocHRyID4gbnVtcmVjcykgewogCQkqc3RhdCA9IDA7CiAJCXJldHVybiAwOwogCX0KQEAgLTEyOSwxOCArMTMxLDE4IEBACiAJCWxrcCA9IFhGU19BTExPQ19LRVlfQUREUihibG9jaywgMSwgY3VyKTsKIAkJbHBwID0gWEZTX0FMTE9DX1BUUl9BRERSKGJsb2NrLCAxLCBjdXIpOwogI2lmZGVmIERFQlVHCi0JCWZvciAoaSA9IHB0cjsgaSA8IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKTsgaSsrKSB7CisJCWZvciAoaSA9IHB0cjsgaSA8IG51bXJlY3M7IGkrKykgewogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zcHRyKGN1ciwgYmUzMl90b19jcHUobHBwW2ldKSwgbGV2ZWwpKSkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KICNlbmRpZgotCQlpZiAocHRyIDwgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpKSB7CisJCWlmIChwdHIgPCBudW1yZWNzKSB7CiAJCQltZW1tb3ZlKCZsa3BbcHRyIC0gMV0sICZsa3BbcHRyXSwKLQkJCQkoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIC0gcHRyKSAqIHNpemVvZigqbGtwKSk7CisJCQkJKG51bXJlY3MgLSBwdHIpICogc2l6ZW9mKCpsa3ApKTsKIAkJCW1lbW1vdmUoJmxwcFtwdHIgLSAxXSwgJmxwcFtwdHJdLAotCQkJCShiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykgLSBwdHIpICogc2l6ZW9mKCpscHApKTsKLQkJCXhmc19hbGxvY19sb2dfcHRycyhjdXIsIGJwLCBwdHIsIGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSAtIDEpOwotCQkJeGZzX2FsbG9jX2xvZ19rZXlzKGN1ciwgYnAsIHB0ciwgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIC0gMSk7CisJCQkJKG51bXJlY3MgLSBwdHIpICogc2l6ZW9mKCpscHApKTsKKwkJCXhmc19hbGxvY19sb2dfcHRycyhjdXIsIGJwLCBwdHIsIG51bXJlY3MgLSAxKTsKKwkJCXhmc19hbGxvY19sb2dfa2V5cyhjdXIsIGJwLCBwdHIsIG51bXJlY3MgLSAxKTsKIAkJfQogCX0KIAkvKgpAQCAtMTQ5LDEwICsxNTEsMTAgQEAKIAkgKi8KIAllbHNlIHsKIAkJbHJwID0gWEZTX0FMTE9DX1JFQ19BRERSKGJsb2NrLCAxLCBjdXIpOwotCQlpZiAocHRyIDwgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpKSB7CisJCWlmIChwdHIgPCBudW1yZWNzKSB7CiAJCQltZW1tb3ZlKCZscnBbcHRyIC0gMV0sICZscnBbcHRyXSwKLQkJCQkoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIC0gcHRyKSAqIHNpemVvZigqbHJwKSk7Ci0JCQl4ZnNfYWxsb2NfbG9nX3JlY3MoY3VyLCBicCwgcHRyLCBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykgLSAxKTsKKwkJCQkobnVtcmVjcyAtIHB0cikgKiBzaXplb2YoKmxycCkpOworCQkJeGZzX2FsbG9jX2xvZ19yZWNzKGN1ciwgYnAsIHB0ciwgbnVtcmVjcyAtIDEpOwogCQl9CiAJCS8qCiAJCSAqIElmIGl0J3MgdGhlIGZpcnN0IHJlY29yZCBpbiB0aGUgYmxvY2ssIHdlJ2xsIG5lZWQgYSBrZXkKQEAgLTE2Nyw3ICsxNjksOCBAQAogCS8qCiAJICogRGVjcmVtZW50IGFuZCBsb2cgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBibG9jay4KIAkgKi8KLQliZTE2X2FkZCgmYmxvY2stPmJiX251bXJlY3MsIC0xKTsKKwludW1yZWNzLS07CisJYmxvY2stPmJiX251bXJlY3MgPSBjcHVfdG9fYmUxNihudW1yZWNzKTsKIAl4ZnNfYWxsb2NfbG9nX2Jsb2NrKGN1ci0+YmNfdHAsIGJwLCBYRlNfQkJfTlVNUkVDUyk7CiAJLyoKIAkgKiBTZWUgaWYgdGhlIGxvbmdlc3QgZnJlZSBleHRlbnQgaW4gdGhlIGFsbG9jYXRpb24gZ3JvdXAgd2FzCkBAIC0xODEsMTQgKzE4NCwxNCBAQAogCWlmIChsZXZlbCA9PSAwICYmCiAJICAgIGN1ci0+YmNfYnRudW0gPT0gWEZTX0JUTlVNX0NOVCAmJgogCSAgICBiZTMyX3RvX2NwdShibG9jay0+YmJfcmlnaHRzaWIpID09IE5VTExBR0JMT0NLICYmCi0JICAgIHB0ciA+IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSkgewotCQlBU1NFUlQocHRyID09IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSArIDEpOworCSAgICBwdHIgPiBudW1yZWNzKSB7CisJCUFTU0VSVChwdHIgPT0gbnVtcmVjcyArIDEpOwogCQkvKgogCQkgKiBUaGVyZSBhcmUgc3RpbGwgcmVjb3JkcyBpbiB0aGUgYmxvY2suICBHcmFiIHRoZSBzaXplCiAJCSAqIGZyb20gdGhlIGxhc3Qgb25lLgogCQkgKi8KLQkJaWYgKGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSkgewotCQkJcnJwID0gWEZTX0FMTE9DX1JFQ19BRERSKGJsb2NrLCBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcyksIGN1cik7CisJCWlmIChudW1yZWNzKSB7CisJCQlycnAgPSBYRlNfQUxMT0NfUkVDX0FERFIoYmxvY2ssIG51bXJlY3MsIGN1cik7CiAJCQlhZ2YtPmFnZl9sb25nZXN0ID0gcnJwLT5hcl9ibG9ja2NvdW50OwogCQl9CiAJCS8qCkBAIC0yMTEsNyArMjE0LDcgQEAKIAkJICogYW5kIGl0J3MgTk9UIHRoZSBsZWFmIGxldmVsLAogCQkgKiB0aGVuIHdlIGNhbiBnZXQgcmlkIG9mIHRoaXMgbGV2ZWwuCiAJCSAqLwotCQlpZiAoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpID09IDEgJiYgbGV2ZWwgPiAwKSB7CisJCWlmIChudW1yZWNzID09IDEgJiYgbGV2ZWwgPiAwKSB7CiAJCQkvKgogCQkJICogbHBwIGlzIHN0aWxsIHNldCB0byB0aGUgZmlyc3QgcG9pbnRlciBpbiB0aGUgYmxvY2suCiAJCQkgKiBNYWtlIGl0IHRoZSBuZXcgcm9vdCBvZiB0aGUgYnRyZWUuCkBAIC0yNjcsNyArMjcwLDcgQEAKIAkgKiBJZiB0aGUgbnVtYmVyIG9mIHJlY29yZHMgcmVtYWluaW5nIGluIHRoZSBibG9jayBpcyBhdCBsZWFzdAogCSAqIHRoZSBtaW5pbXVtLCB3ZSdyZSBkb25lLgogCSAqLwotCWlmIChiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykgPj0gWEZTX0FMTE9DX0JMT0NLX01JTlJFQ1MobGV2ZWwsIGN1cikpIHsKKwlpZiAobnVtcmVjcyA+PSBYRlNfQUxMT0NfQkxPQ0tfTUlOUkVDUyhsZXZlbCwgY3VyKSkgewogCQlpZiAobGV2ZWwgPiAwICYmIChlcnJvciA9IHhmc19hbGxvY19kZWNyZW1lbnQoY3VyLCBsZXZlbCwgJmkpKSkKIAkJCXJldHVybiBlcnJvcjsKIAkJKnN0YXQgPSAxOwpAQCAtNDE5LDE5ICs0MjIsMjEgQEAKIAkgKiBTZWUgaWYgd2UgY2FuIGpvaW4gd2l0aCB0aGUgbGVmdCBuZWlnaGJvciBibG9jay4KIAkgKi8KIAlpZiAobGJubyAhPSBOVUxMQUdCTE9DSyAmJgotCSAgICBscmVjcyArIGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSA8PSBYRlNfQUxMT0NfQkxPQ0tfTUFYUkVDUyhsZXZlbCwgY3VyKSkgeworCSAgICBscmVjcyArIG51bXJlY3MgPD0gWEZTX0FMTE9DX0JMT0NLX01BWFJFQ1MobGV2ZWwsIGN1cikpIHsKIAkJLyoKIAkJICogU2V0ICJyaWdodCIgdG8gYmUgdGhlIHN0YXJ0aW5nIGJsb2NrLAogCQkgKiAibGVmdCIgdG8gYmUgdGhlIGxlZnQgbmVpZ2hib3IuCiAJCSAqLwogCQlyYm5vID0gYm5vOwogCQlyaWdodCA9IGJsb2NrOworCQlycmVjcyA9IGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKTsKIAkJcmJwID0gYnA7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfcmVhZF9idWZzKG1wLCBjdXItPmJjX3RwLAogCQkJCWN1ci0+YmNfcHJpdmF0ZS5hLmFnbm8sIGxibm8sIDAsICZsYnAsCiAJCQkJWEZTX0FMTE9DX0JUUkVFX1JFRikpKQogCQkJcmV0dXJuIGVycm9yOwogCQlsZWZ0ID0gWEZTX0JVRl9UT19BTExPQ19CTE9DSyhsYnApOworCQlscmVjcyA9IGJlMTZfdG9fY3B1KGxlZnQtPmJiX251bXJlY3MpOwogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX3NibG9jayhjdXIsIGxlZnQsIGxldmVsLCBsYnApKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9CkBAIC00MzksMjAgKzQ0NCwyMSBAQAogCSAqIElmIHRoYXQgd29uJ3Qgd29yaywgc2VlIGlmIHdlIGNhbiBqb2luIHdpdGggdGhlIHJpZ2h0IG5laWdoYm9yIGJsb2NrLgogCSAqLwogCWVsc2UgaWYgKHJibm8gIT0gTlVMTEFHQkxPQ0sgJiYKLQkJIHJyZWNzICsgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIDw9Ci0JCSAgWEZTX0FMTE9DX0JMT0NLX01BWFJFQ1MobGV2ZWwsIGN1cikpIHsKKwkJIHJyZWNzICsgbnVtcmVjcyA8PSBYRlNfQUxMT0NfQkxPQ0tfTUFYUkVDUyhsZXZlbCwgY3VyKSkgewogCQkvKgogCQkgKiBTZXQgImxlZnQiIHRvIGJlIHRoZSBzdGFydGluZyBibG9jaywKIAkJICogInJpZ2h0IiB0byBiZSB0aGUgcmlnaHQgbmVpZ2hib3IuCiAJCSAqLwogCQlsYm5vID0gYm5vOwogCQlsZWZ0ID0gYmxvY2s7CisJCWxyZWNzID0gYmUxNl90b19jcHUobGVmdC0+YmJfbnVtcmVjcyk7CiAJCWxicCA9IGJwOwogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX3JlYWRfYnVmcyhtcCwgY3VyLT5iY190cCwKIAkJCQljdXItPmJjX3ByaXZhdGUuYS5hZ25vLCByYm5vLCAwLCAmcmJwLAogCQkJCVhGU19BTExPQ19CVFJFRV9SRUYpKSkKIAkJCXJldHVybiBlcnJvcjsKIAkJcmlnaHQgPSBYRlNfQlVGX1RPX0FMTE9DX0JMT0NLKHJicCk7CisJCXJyZWNzID0gYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpOwogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX3NibG9jayhjdXIsIHJpZ2h0LCBsZXZlbCwgcmJwKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtNDc0LDM0ICs0ODAsMjggQEAKIAkJLyoKIAkJICogSXQncyBhIG5vbi1sZWFmLiAgTW92ZSBrZXlzIGFuZCBwb2ludGVycy4KIAkJICovCi0JCWxrcCA9IFhGU19BTExPQ19LRVlfQUREUihsZWZ0LCBiZTE2X3RvX2NwdShsZWZ0LT5iYl9udW1yZWNzKSArIDEsIGN1cik7Ci0JCWxwcCA9IFhGU19BTExPQ19QVFJfQUREUihsZWZ0LCBiZTE2X3RvX2NwdShsZWZ0LT5iYl9udW1yZWNzKSArIDEsIGN1cik7CisJCWxrcCA9IFhGU19BTExPQ19LRVlfQUREUihsZWZ0LCBscmVjcyArIDEsIGN1cik7CisJCWxwcCA9IFhGU19BTExPQ19QVFJfQUREUihsZWZ0LCBscmVjcyArIDEsIGN1cik7CiAJCXJrcCA9IFhGU19BTExPQ19LRVlfQUREUihyaWdodCwgMSwgY3VyKTsKIAkJcnBwID0gWEZTX0FMTE9DX1BUUl9BRERSKHJpZ2h0LCAxLCBjdXIpOwogI2lmZGVmIERFQlVHCi0JCWZvciAoaSA9IDA7IGkgPCBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcyk7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgcnJlY3M7IGkrKykgewogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zcHRyKGN1ciwgYmUzMl90b19jcHUocnBwW2ldKSwgbGV2ZWwpKSkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KICNlbmRpZgotCQltZW1jcHkobGtwLCBya3AsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSAqIHNpemVvZigqbGtwKSk7Ci0JCW1lbWNweShscHAsIHJwcCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpscHApKTsKLQkJeGZzX2FsbG9jX2xvZ19rZXlzKGN1ciwgbGJwLCBiZTE2X3RvX2NwdShsZWZ0LT5iYl9udW1yZWNzKSArIDEsCi0JCQkJICAgYmUxNl90b19jcHUobGVmdC0+YmJfbnVtcmVjcykgKwotCQkJCSAgIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSk7Ci0JCXhmc19hbGxvY19sb2dfcHRycyhjdXIsIGxicCwgYmUxNl90b19jcHUobGVmdC0+YmJfbnVtcmVjcykgKyAxLAotCQkJCSAgIGJlMTZfdG9fY3B1KGxlZnQtPmJiX251bXJlY3MpICsKLQkJCQkgICBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykpOworCQltZW1jcHkobGtwLCBya3AsIHJyZWNzICogc2l6ZW9mKCpsa3ApKTsKKwkJbWVtY3B5KGxwcCwgcnBwLCBycmVjcyAqIHNpemVvZigqbHBwKSk7CisJCXhmc19hbGxvY19sb2dfa2V5cyhjdXIsIGxicCwgbHJlY3MgKyAxLCBscmVjcyArIHJyZWNzKTsKKwkJeGZzX2FsbG9jX2xvZ19wdHJzKGN1ciwgbGJwLCBscmVjcyArIDEsIGxyZWNzICsgcnJlY3MpOwogCX0gZWxzZSB7CiAJCS8qCiAJCSAqIEl0J3MgYSBsZWFmLiAgTW92ZSByZWNvcmRzLgogCQkgKi8KLQkJbHJwID0gWEZTX0FMTE9DX1JFQ19BRERSKGxlZnQsIGJlMTZfdG9fY3B1KGxlZnQtPmJiX251bXJlY3MpICsgMSwgY3VyKTsKKwkJbHJwID0gWEZTX0FMTE9DX1JFQ19BRERSKGxlZnQsIGxyZWNzICsgMSwgY3VyKTsKIAkJcnJwID0gWEZTX0FMTE9DX1JFQ19BRERSKHJpZ2h0LCAxLCBjdXIpOwotCQltZW1jcHkobHJwLCBycnAsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSAqIHNpemVvZigqbHJwKSk7Ci0JCXhmc19hbGxvY19sb2dfcmVjcyhjdXIsIGxicCwgYmUxNl90b19jcHUobGVmdC0+YmJfbnVtcmVjcykgKyAxLAotCQkJCSAgIGJlMTZfdG9fY3B1KGxlZnQtPmJiX251bXJlY3MpICsKLQkJCQkgICBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykpOworCQltZW1jcHkobHJwLCBycnAsIHJyZWNzICogc2l6ZW9mKCpscnApKTsKKwkJeGZzX2FsbG9jX2xvZ19yZWNzKGN1ciwgbGJwLCBscmVjcyArIDEsIGxyZWNzICsgcnJlY3MpOwogCX0KIAkvKgogCSAqIElmIHdlIGpvaW5lZCB3aXRoIHRoZSBsZWZ0IG5laWdoYm9yLCBzZXQgdGhlIGJ1ZmZlciBpbiB0aGUKQEAgLTUwOSw3ICs1MDksNyBAQAogCSAqLwogCWlmIChicCAhPSBsYnApIHsKIAkJeGZzX2J0cmVlX3NldGJ1ZihjdXIsIGxldmVsLCBsYnApOwotCQljdXItPmJjX3B0cnNbbGV2ZWxdICs9IGJlMTZfdG9fY3B1KGxlZnQtPmJiX251bXJlY3MpOworCQljdXItPmJjX3B0cnNbbGV2ZWxdICs9IGxyZWNzOwogCX0KIAkvKgogCSAqIElmIHdlIGpvaW5lZCB3aXRoIHRoZSByaWdodCBuZWlnaGJvciBhbmQgdGhlcmUncyBhIGxldmVsIGFib3ZlCkBAIC01MjEsNyArNTIxLDggQEAKIAkvKgogCSAqIEZpeCB1cCB0aGUgbnVtYmVyIG9mIHJlY29yZHMgaW4gdGhlIHN1cnZpdmluZyBibG9jay4KIAkgKi8KLQliZTE2X2FkZCgmbGVmdC0+YmJfbnVtcmVjcywgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpKTsKKwlscmVjcyArPSBycmVjczsKKwlsZWZ0LT5iYl9udW1yZWNzID0gY3B1X3RvX2JlMTYobHJlY3MpOwogCS8qCiAJICogRml4IHVwIHRoZSByaWdodCBibG9jayBwb2ludGVyIGluIHRoZSBzdXJ2aXZpbmcgYmxvY2ssIGFuZCBsb2cgaXQuCiAJICovCkBAIC02MDgsNiArNjA5LDcgQEAKIAl4ZnNfYnRyZWVfY3VyX3QJCSpuY3VyOwkvKiBuZXcgY3Vyc29yIHRvIGJlIHVzZWQgYXQgbmV4dCBsdmwgKi8KIAl4ZnNfYWxsb2Nfa2V5X3QJCW5rZXk7CS8qIG5ldyBrZXkgdmFsdWUsIGZyb20gc3BsaXQgKi8KIAl4ZnNfYWxsb2NfcmVjX3QJCW5yZWM7CS8qIG5ldyByZWNvcmQgdmFsdWUsIGZvciBjYWxsZXIgKi8KKwlpbnQJCQludW1yZWNzOwogCWludAkJCW9wdHI7CS8qIG9sZCBwdHIgdmFsdWUgKi8KIAl4ZnNfYWxsb2NfcHRyX3QJCSpwcDsJLyogcG9pbnRlciB0byBidHJlZSBhZGRyZXNzZXMgKi8KIAlpbnQJCQlwdHI7CS8qIGluZGV4IGluIGJ0cmVlIGJsb2NrIGZvciB0aGlzIHJlYyAqLwpAQCAtNjUzLDEzICs2NTUsMTQgQEAKIAkgKi8KIAlicCA9IGN1ci0+YmNfYnVmc1tsZXZlbF07CiAJYmxvY2sgPSBYRlNfQlVGX1RPX0FMTE9DX0JMT0NLKGJwKTsKKwludW1yZWNzID0gYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpOwogI2lmZGVmIERFQlVHCiAJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zYmxvY2soY3VyLCBibG9jaywgbGV2ZWwsIGJwKSkpCiAJCXJldHVybiBlcnJvcjsKIAkvKgogCSAqIENoZWNrIHRoYXQgdGhlIG5ldyBlbnRyeSBpcyBiZWluZyBpbnNlcnRlZCBpbiB0aGUgcmlnaHQgcGxhY2UuCiAJICovCi0JaWYgKHB0ciA8PSBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykpIHsKKwlpZiAocHRyIDw9IG51bXJlY3MpIHsKIAkJaWYgKGxldmVsID09IDApIHsKIAkJCXJwID0gWEZTX0FMTE9DX1JFQ19BRERSKGJsb2NrLCBwdHIsIGN1cik7CiAJCQl4ZnNfYnRyZWVfY2hlY2tfcmVjKGN1ci0+YmNfYnRudW0sIHJlY3AsIHJwKTsKQEAgLTY3MCwxMiArNjczLDEyIEBACiAJfQogI2VuZGlmCiAJbmJubyA9IE5VTExBR0JMT0NLOwotCW5jdXIgPSAoeGZzX2J0cmVlX2N1cl90ICopMDsKKwluY3VyID0gTlVMTDsKIAkvKgogCSAqIElmIHRoZSBibG9jayBpcyBmdWxsLCB3ZSBjYW4ndCBpbnNlcnQgdGhlIG5ldyBlbnRyeSB1bnRpbCB3ZQogCSAqIG1ha2UgdGhlIGJsb2NrIHVuLWZ1bGwuCiAJICovCi0JaWYgKGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSA9PSBYRlNfQUxMT0NfQkxPQ0tfTUFYUkVDUyhsZXZlbCwgY3VyKSkgeworCWlmIChudW1yZWNzID09IFhGU19BTExPQ19CTE9DS19NQVhSRUNTKGxldmVsLCBjdXIpKSB7CiAJCS8qCiAJCSAqIEZpcnN0LCB0cnkgc2hpZnRpbmcgYW4gZW50cnkgdG8gdGhlIHJpZ2h0IG5laWdoYm9yLgogCQkgKi8KQEAgLTcyOSw2ICs3MzIsNyBAQAogCSAqIEF0IHRoaXMgcG9pbnQgd2Uga25vdyB0aGVyZSdzIHJvb20gZm9yIG91ciBuZXcgZW50cnkgaW4gdGhlIGJsb2NrCiAJICogd2UncmUgcG9pbnRpbmcgYXQuCiAJICovCisJbnVtcmVjcyA9IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKTsKIAlpZiAobGV2ZWwgPiAwKSB7CiAJCS8qCiAJCSAqIEl0J3MgYSBub24tbGVhZiBlbnRyeS4gIE1ha2UgYSBob2xlIGZvciB0aGUgbmV3IGRhdGEKQEAgLTczNywxNSArNzQxLDE1IEBACiAJCWtwID0gWEZTX0FMTE9DX0tFWV9BRERSKGJsb2NrLCAxLCBjdXIpOwogCQlwcCA9IFhGU19BTExPQ19QVFJfQUREUihibG9jaywgMSwgY3VyKTsKICNpZmRlZiBERUJVRwotCQlmb3IgKGkgPSBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcyk7IGkgPj0gcHRyOyBpLS0pIHsKKwkJZm9yIChpID0gbnVtcmVjczsgaSA+PSBwdHI7IGktLSkgewogCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zcHRyKGN1ciwgYmUzMl90b19jcHUocHBbaSAtIDFdKSwgbGV2ZWwpKSkKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCX0KICNlbmRpZgogCQltZW1tb3ZlKCZrcFtwdHJdLCAma3BbcHRyIC0gMV0sCi0JCQkoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIC0gcHRyICsgMSkgKiBzaXplb2YoKmtwKSk7CisJCQkobnVtcmVjcyAtIHB0ciArIDEpICogc2l6ZW9mKCprcCkpOwogCQltZW1tb3ZlKCZwcFtwdHJdLCAmcHBbcHRyIC0gMV0sCi0JCQkoYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpIC0gcHRyICsgMSkgKiBzaXplb2YoKnBwKSk7CisJCQkobnVtcmVjcyAtIHB0ciArIDEpICogc2l6ZW9mKCpwcCkpOwogI2lmZGVmIERFQlVHCiAJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfc3B0cihjdXIsICpibm9wLCBsZXZlbCkpKQogCQkJcmV0dXJuIGVycm9yOwpAQCAtNzU1LDExICs3NTksMTIgQEAKIAkJICovCiAJCWtwW3B0ciAtIDFdID0ga2V5OwogCQlwcFtwdHIgLSAxXSA9IGNwdV90b19iZTMyKCpibm9wKTsKLQkJYmUxNl9hZGQoJmJsb2NrLT5iYl9udW1yZWNzLCAxKTsKLQkJeGZzX2FsbG9jX2xvZ19rZXlzKGN1ciwgYnAsIHB0ciwgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpKTsKLQkJeGZzX2FsbG9jX2xvZ19wdHJzKGN1ciwgYnAsIHB0ciwgYmUxNl90b19jcHUoYmxvY2stPmJiX251bXJlY3MpKTsKKwkJbnVtcmVjcysrOworCQlibG9jay0+YmJfbnVtcmVjcyA9IGNwdV90b19iZTE2KG51bXJlY3MpOworCQl4ZnNfYWxsb2NfbG9nX2tleXMoY3VyLCBicCwgcHRyLCBudW1yZWNzKTsKKwkJeGZzX2FsbG9jX2xvZ19wdHJzKGN1ciwgYnAsIHB0ciwgbnVtcmVjcyk7CiAjaWZkZWYgREVCVUcKLQkJaWYgKHB0ciA8IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSkKKwkJaWYgKHB0ciA8IG51bXJlY3MpCiAJCQl4ZnNfYnRyZWVfY2hlY2tfa2V5KGN1ci0+YmNfYnRudW0sIGtwICsgcHRyIC0gMSwKIAkJCQlrcCArIHB0cik7CiAjZW5kaWYKQEAgLTc2OSwxNiArNzc0LDE3IEBACiAJCSAqLwogCQlycCA9IFhGU19BTExPQ19SRUNfQUREUihibG9jaywgMSwgY3VyKTsKIAkJbWVtbW92ZSgmcnBbcHRyXSwgJnJwW3B0ciAtIDFdLAotCQkJKGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9udW1yZWNzKSAtIHB0ciArIDEpICogc2l6ZW9mKCpycCkpOworCQkJKG51bXJlY3MgLSBwdHIgKyAxKSAqIHNpemVvZigqcnApKTsKIAkJLyoKIAkJICogTm93IHN0dWZmIHRoZSBuZXcgcmVjb3JkIGluLCBidW1wIG51bXJlY3MKIAkJICogYW5kIGxvZyB0aGUgbmV3IGRhdGEuCiAJCSAqLwotCQlycFtwdHIgLSAxXSA9ICpyZWNwOyAvKiBJTlRfOiBzdHJ1Y3QgY29weSAqLwotCQliZTE2X2FkZCgmYmxvY2stPmJiX251bXJlY3MsIDEpOwotCQl4ZnNfYWxsb2NfbG9nX3JlY3MoY3VyLCBicCwgcHRyLCBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykpOworCQlycFtwdHIgLSAxXSA9ICpyZWNwOworCQludW1yZWNzKys7CisJCWJsb2NrLT5iYl9udW1yZWNzID0gY3B1X3RvX2JlMTYobnVtcmVjcyk7CisJCXhmc19hbGxvY19sb2dfcmVjcyhjdXIsIGJwLCBwdHIsIG51bXJlY3MpOwogI2lmZGVmIERFQlVHCi0JCWlmIChwdHIgPCBiZTE2X3RvX2NwdShibG9jay0+YmJfbnVtcmVjcykpCisJCWlmIChwdHIgPCBudW1yZWNzKQogCQkJeGZzX2J0cmVlX2NoZWNrX3JlYyhjdXItPmJjX2J0bnVtLCBycCArIHB0ciAtIDEsCiAJCQkJcnAgKyBwdHIpOwogI2VuZGlmCkBAIC04MTksOCArODI1LDggQEAKIAkgKi8KIAkqYm5vcCA9IG5ibm87CiAJaWYgKG5ibm8gIT0gTlVMTEFHQkxPQ0spIHsKLQkJKnJlY3AgPSBucmVjOyAvKiBJTlRfOiBzdHJ1Y3QgY29weSAqLwotCQkqY3VycCA9IG5jdXI7IC8qIElOVF86IHN0cnVjdCBjb3B5ICovCisJCSpyZWNwID0gbnJlYzsKKwkJKmN1cnAgPSBuY3VyOwogCX0KIAkqc3RhdCA9IDE7CiAJcmV0dXJuIDA7CkBAIC05ODEsNyArOTg3LDcgQEAKIAkJICovCiAJCWJwID0gY3VyLT5iY19idWZzW2xldmVsXTsKIAkJaWYgKGJwICYmIFhGU19CVUZfQUREUihicCkgIT0gZCkKLQkJCWJwID0gKHhmc19idWZfdCAqKTA7CisJCQlicCA9IE5VTEw7CiAJCWlmICghYnApIHsKIAkJCS8qCiAJCQkgKiBOZWVkIHRvIGdldCBhIG5ldyBidWZmZXIuICBSZWFkIGl0LCB0aGVuCkBAIC0xMjI5LDcgKzEyMzUsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX3NwdHIoY3VyLCBiZTMyX3RvX2NwdSgqcnBwKSwgbGV2ZWwpKSkKIAkJCXJldHVybiBlcnJvcjsKICNlbmRpZgotCQkqbHBwID0gKnJwcDsgLyogSU5UXzogY29weSAqLworCQkqbHBwID0gKnJwcDsKIAkJeGZzX2FsbG9jX2xvZ19wdHJzKGN1ciwgbGJwLCBucmVjLCBucmVjKTsKIAkJeGZzX2J0cmVlX2NoZWNrX2tleShjdXItPmJjX2J0bnVtLCBsa3AgLSAxLCBsa3ApOwogCX0KQEAgLTE0MDYsOCArMTQxMiw4IEBACiAKIAkJa3AgPSBYRlNfQUxMT0NfS0VZX0FERFIobmV3LCAxLCBjdXIpOwogCQlpZiAoYmUxNl90b19jcHUobGVmdC0+YmJfbGV2ZWwpID4gMCkgewotCQkJa3BbMF0gPSAqWEZTX0FMTE9DX0tFWV9BRERSKGxlZnQsIDEsIGN1cik7IC8qIElOVF86IHN0cnVjdHVyZSBjb3B5ICovCi0JCQlrcFsxXSA9ICpYRlNfQUxMT0NfS0VZX0FERFIocmlnaHQsIDEsIGN1cik7LyogSU5UXzogc3RydWN0dXJlIGNvcHkgKi8KKwkJCWtwWzBdID0gKlhGU19BTExPQ19LRVlfQUREUihsZWZ0LCAxLCBjdXIpOworCQkJa3BbMV0gPSAqWEZTX0FMTE9DX0tFWV9BRERSKHJpZ2h0LCAxLCBjdXIpOwogCQl9IGVsc2UgewogCQkJeGZzX2FsbG9jX3JlY190CSpycDsJLyogYnRyZWUgcmVjb3JkIHBvaW50ZXIgKi8KIApAQCAtMTUyNyw4ICsxNTMzLDggQEAKIAkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zcHRyKGN1ciwgYmUzMl90b19jcHUoKmxwcCksIGxldmVsKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAjZW5kaWYKLQkJKnJrcCA9ICpsa3A7IC8qIElOVF86IGNvcHkgKi8KLQkJKnJwcCA9ICpscHA7IC8qIElOVF86IGNvcHkgKi8KKwkJKnJrcCA9ICpsa3A7CisJCSpycHAgPSAqbHBwOwogCQl4ZnNfYWxsb2NfbG9nX2tleXMoY3VyLCByYnAsIDEsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSArIDEpOwogCQl4ZnNfYWxsb2NfbG9nX3B0cnMoY3VyLCByYnAsIDEsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSArIDEpOwogCQl4ZnNfYnRyZWVfY2hlY2tfa2V5KGN1ci0+YmNfYnRudW0sIHJrcCwgcmtwICsgMSk7CkBAIC0yMDQ0LDcgKzIwNTAsNyBAQAogCW5ibm8gPSBOVUxMQUdCTE9DSzsKIAlucmVjLmFyX3N0YXJ0YmxvY2sgPSBjcHVfdG9fYmUzMihjdXItPmJjX3JlYy5hLmFyX3N0YXJ0YmxvY2spOwogCW5yZWMuYXJfYmxvY2tjb3VudCA9IGNwdV90b19iZTMyKGN1ci0+YmNfcmVjLmEuYXJfYmxvY2tjb3VudCk7Ci0JbmN1ciA9ICh4ZnNfYnRyZWVfY3VyX3QgKikwOworCW5jdXIgPSBOVUxMOwogCXBjdXIgPSBjdXI7CiAJLyoKIAkgKiBMb29wIGdvaW5nIHVwIHRoZSB0cmVlLCBzdGFydGluZyBhdCB0aGUgbGVhZiBsZXZlbC4KQEAgLTIwNzYsNyArMjA4Miw3IEBACiAJCSAqLwogCQlpZiAobmN1cikgewogCQkJcGN1ciA9IG5jdXI7Ci0JCQluY3VyID0gKHhmc19idHJlZV9jdXJfdCAqKTA7CisJCQluY3VyID0gTlVMTDsKIAkJfQogCX0gd2hpbGUgKG5ibm8gIT0gTlVMTEFHQkxPQ0spOwogCSpzdGF0ID0gaTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5jIGIvZnMveGZzL3hmc19hdHRyLmMKaW5kZXggMWEyMTAxMDQuLjlhZGE3YmQgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYXR0ci5jCisrKyBiL2ZzL3hmcy94ZnNfYXR0ci5jCkBAIC05MSw3ICs5MSw2IEBACiAvKgogICogUm91dGluZXMgdG8gbWFuaXB1bGF0ZSBvdXQtb2YtbGluZSBhdHRyaWJ1dGUgdmFsdWVzLgogICovCi1TVEFUSUMgaW50IHhmc19hdHRyX3JtdHZhbF9nZXQoeGZzX2RhX2FyZ3NfdCAqYXJncyk7CiBTVEFUSUMgaW50IHhmc19hdHRyX3JtdHZhbF9zZXQoeGZzX2RhX2FyZ3NfdCAqYXJncyk7CiBTVEFUSUMgaW50IHhmc19hdHRyX3JtdHZhbF9yZW1vdmUoeGZzX2RhX2FyZ3NfdCAqYXJncyk7CiAKQEAgLTE4MCw3ICsxNzksNyBAQAogCXJldHVybihlcnJvcik7CiB9CiAKLVNUQVRJQyBpbnQKK2ludAogeGZzX2F0dHJfc2V0X2ludCh4ZnNfaW5vZGVfdCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAogCQkgY2hhciAqdmFsdWUsIGludCB2YWx1ZWxlbiwgaW50IGZsYWdzKQogewpAQCAtNDQwLDcgKzQzOSw3IEBACiAgKiBHZW5lcmljIGhhbmRsZXIgcm91dGluZSB0byByZW1vdmUgYSBuYW1lIGZyb20gYW4gYXR0cmlidXRlIGxpc3QuCiAgKiBUcmFuc2l0aW9ucyBhdHRyaWJ1dGUgbGlzdCBmcm9tIEJ0cmVlIHRvIHNob3J0Zm9ybSBhcyBuZWNlc3NhcnkuCiAgKi8KLVNUQVRJQyBpbnQKK2ludAogeGZzX2F0dHJfcmVtb3ZlX2ludCh4ZnNfaW5vZGVfdCAqZHAsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBpbnQgZmxhZ3MpCiB7CiAJeGZzX2RhX2FyZ3NfdAlhcmdzOwpAQCAtNTkxLDYgKzU5MCwxMTAgQEAKIAlyZXR1cm4geGZzX2F0dHJfcmVtb3ZlX2ludChkcCwgbmFtZSwgbmFtZWxlbiwgZmxhZ3MpOwogfQogCitpbnQJCQkJCQkJCS8qIGVycm9yICovCit4ZnNfYXR0cl9saXN0X2ludCh4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCkKK3sKKwlpbnQgZXJyb3I7CisJeGZzX2lub2RlX3QgKmRwID0gY29udGV4dC0+ZHA7CisKKwkvKgorCSAqIERlY2lkZSBvbiB3aGF0IHdvcmsgcm91dGluZXMgdG8gY2FsbCBiYXNlZCBvbiB0aGUgaW5vZGUgc2l6ZS4KKwkgKi8KKwlpZiAoWEZTX0lGT1JLX1EoZHApID09IDAgfHwKKwkgICAgKGRwLT5pX2QuZGlfYWZvcm1hdCA9PSBYRlNfRElOT0RFX0ZNVF9FWFRFTlRTICYmCisJICAgICBkcC0+aV9kLmRpX2FuZXh0ZW50cyA9PSAwKSkgeworCQllcnJvciA9IDA7CisJfSBlbHNlIGlmIChkcC0+aV9kLmRpX2Fmb3JtYXQgPT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpIHsKKwkJZXJyb3IgPSB4ZnNfYXR0cl9zaG9ydGZvcm1fbGlzdChjb250ZXh0KTsKKwl9IGVsc2UgaWYgKHhmc19ibWFwX29uZV9ibG9jayhkcCwgWEZTX0FUVFJfRk9SSykpIHsKKwkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xpc3QoY29udGV4dCk7CisJfSBlbHNlIHsKKwkJZXJyb3IgPSB4ZnNfYXR0cl9ub2RlX2xpc3QoY29udGV4dCk7CisJfQorCXJldHVybiBlcnJvcjsKK30KKworI2RlZmluZQlBVFRSX0VOVEJBU0VTSVpFCQkvKiBtaW5pbXVtIGJ5dGVzIHVzZWQgYnkgYW4gYXR0ciAqLyBcCisJKCgoc3RydWN0IGF0dHJsaXN0X2VudCAqKSAwKS0+YV9uYW1lIC0gKGNoYXIgKikgMCkKKyNkZWZpbmUJQVRUUl9FTlRTSVpFKG5hbWVsZW4pCQkvKiBhY3R1YWwgYnl0ZXMgdXNlZCBieSBhbiBhdHRyICovIFwKKwkoKEFUVFJfRU5UQkFTRVNJWkUgKyAobmFtZWxlbikgKyAxICsgc2l6ZW9mKHVfaW50MzJfdCktMSkgXAorCSAmIH4oc2l6ZW9mKHVfaW50MzJfdCktMSkpCisKKy8qCisgKiBGb3JtYXQgYW4gYXR0cmlidXRlIGFuZCBjb3B5IGl0IG91dCB0byB0aGUgdXNlcidzIGJ1ZmZlci4KKyAqIFRha2UgY2FyZSB0byBjaGVjayB2YWx1ZXMgYW5kIHByb3RlY3QgYWdhaW5zdCB0aGVtIGNoYW5naW5nIGxhdGVyLAorICogd2UgbWF5IGJlIHJlYWRpbmcgdGhlbSBkaXJlY3RseSBvdXQgb2YgYSB1c2VyIGJ1ZmZlci4KKyAqLworLypBUkdTVVNFRCovCitTVEFUSUMgaW50Cit4ZnNfYXR0cl9wdXRfbGlzdGVudCh4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCwgYXR0cm5hbWVzX3QgKm5hbWVzcCwKKwkJICAgICBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKKwkJICAgICBpbnQgdmFsdWVsZW4sIGNoYXIgKnZhbHVlKQoreworCWF0dHJsaXN0X2VudF90ICphZXA7CisJaW50IGFycmF5dG9wOworCisJQVNTRVJUKCEoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSk7CisJQVNTRVJUKGNvbnRleHQtPmNvdW50ID49IDApOworCUFTU0VSVChjb250ZXh0LT5jb3VudCA8IChBVFRSX01BWF9WQUxVRUxFTi84KSk7CisJQVNTRVJUKGNvbnRleHQtPmZpcnN0dSA+PSBzaXplb2YoKmNvbnRleHQtPmFsaXN0KSk7CisJQVNTRVJUKGNvbnRleHQtPmZpcnN0dSA8PSBjb250ZXh0LT5idWZzaXplKTsKKworCWFycmF5dG9wID0gc2l6ZW9mKCpjb250ZXh0LT5hbGlzdCkgKworCQkJY29udGV4dC0+Y291bnQgKiBzaXplb2YoY29udGV4dC0+YWxpc3QtPmFsX29mZnNldFswXSk7CisJY29udGV4dC0+Zmlyc3R1IC09IEFUVFJfRU5UU0laRShuYW1lbGVuKTsKKwlpZiAoY29udGV4dC0+Zmlyc3R1IDwgYXJyYXl0b3ApIHsKKwkJeGZzX2F0dHJfdHJhY2VfbF9jKCJidWZmZXIgZnVsbCIsIGNvbnRleHQpOworCQljb250ZXh0LT5hbGlzdC0+YWxfbW9yZSA9IDE7CisJCWNvbnRleHQtPnNlZW5fZW5vdWdoID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCisJYWVwID0gKGF0dHJsaXN0X2VudF90ICopJigoKGNoYXIgKiljb250ZXh0LT5hbGlzdClbIGNvbnRleHQtPmZpcnN0dSBdKTsKKwlhZXAtPmFfdmFsdWVsZW4gPSB2YWx1ZWxlbjsKKwltZW1jcHkoYWVwLT5hX25hbWUsIG5hbWUsIG5hbWVsZW4pOworCWFlcC0+YV9uYW1lWyBuYW1lbGVuIF0gPSAwOworCWNvbnRleHQtPmFsaXN0LT5hbF9vZmZzZXRbIGNvbnRleHQtPmNvdW50KysgXSA9IGNvbnRleHQtPmZpcnN0dTsKKwljb250ZXh0LT5hbGlzdC0+YWxfY291bnQgPSBjb250ZXh0LT5jb3VudDsKKwl4ZnNfYXR0cl90cmFjZV9sX2MoImFkZCIsIGNvbnRleHQpOworCXJldHVybiAwOworfQorCitTVEFUSUMgaW50Cit4ZnNfYXR0cl9rZXJuX2xpc3QoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsIGF0dHJuYW1lc190ICpuYW1lc3AsCisJCSAgICAgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgICAgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3sKKwljaGFyICpvZmZzZXQ7CisJaW50IGFycmF5dG9wOworCisJQVNTRVJUKGNvbnRleHQtPmNvdW50ID49IDApOworCisJYXJyYXl0b3AgPSBjb250ZXh0LT5jb3VudCArIG5hbWVzcC0+YXR0cl9uYW1lbGVuICsgbmFtZWxlbiArIDE7CisJaWYgKGFycmF5dG9wID4gY29udGV4dC0+Zmlyc3R1KSB7CisJCWNvbnRleHQtPmNvdW50ID0gLTE7CS8qIGluc3VmZmljaWVudCBzcGFjZSAqLworCQlyZXR1cm4gMTsKKwl9CisJb2Zmc2V0ID0gKGNoYXIgKiljb250ZXh0LT5hbGlzdCArIGNvbnRleHQtPmNvdW50OworCXN0cm5jcHkob2Zmc2V0LCBuYW1lc3AtPmF0dHJfbmFtZSwgbmFtZXNwLT5hdHRyX25hbWVsZW4pOworCW9mZnNldCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbjsKKwlzdHJuY3B5KG9mZnNldCwgbmFtZSwgbmFtZWxlbik7CQkJLyogcmVhbCBuYW1lICovCisJb2Zmc2V0ICs9IG5hbWVsZW47CisJKm9mZnNldCA9ICdcMCc7CisJY29udGV4dC0+Y291bnQgKz0gbmFtZXNwLT5hdHRyX25hbWVsZW4gKyBuYW1lbGVuICsgMTsKKwlyZXR1cm4gMDsKK30KKworLypBUkdTVVNFRCovCitTVEFUSUMgaW50Cit4ZnNfYXR0cl9rZXJuX2xpc3Rfc2l6ZXMoeGZzX2F0dHJfbGlzdF9jb250ZXh0X3QgKmNvbnRleHQsIGF0dHJuYW1lc190ICpuYW1lc3AsCisJCSAgICAgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCisJCSAgICAgaW50IHZhbHVlbGVuLCBjaGFyICp2YWx1ZSkKK3sKKwljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArIG5hbWVsZW4gKyAxOworCXJldHVybiAwOworfQorCiAvKgogICogR2VuZXJhdGUgYSBsaXN0IG9mIGV4dGVuZGVkIGF0dHJpYnV0ZSBuYW1lcyBhbmQgb3B0aW9uYWxseQogICogYWxzbyB2YWx1ZSBsZW5ndGhzLiAgUG9zaXRpdmUgcmV0dXJuIHZhbHVlIGZvbGxvd3MgdGhlIFhGUwpAQCAtNjE1LDEzICs3MTgsMTMgQEAKIAkJcmV0dXJuKFhGU19FUlJPUihFSU5WQUwpKTsKIAlpZiAoKGN1cnNvci0+aW5pdHRlZCA9PSAwKSAmJgogCSAgICAoY3Vyc29yLT5oYXNodmFsIHx8IGN1cnNvci0+Ymxrbm8gfHwgY3Vyc29yLT5vZmZzZXQpKQotCQlyZXR1cm4oWEZTX0VSUk9SKEVJTlZBTCkpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAKIAkvKgogCSAqIENoZWNrIGZvciBhIHByb3Blcmx5IGFsaWduZWQgYnVmZmVyLgogCSAqLwogCWlmICgoKGxvbmcpYnVmZmVyKSAmIChzaXplb2YoaW50KS0xKSkKLQkJcmV0dXJuKFhGU19FUlJPUihFRkFVTFQpKTsKKwkJcmV0dXJuIFhGU19FUlJPUihFRkFVTFQpOwogCWlmIChmbGFncyAmIEFUVFJfS0VSTk9WQUwpCiAJCWJ1ZnNpemUgPSAwOwogCkBAIC02MzQsNTMgKzczNyw0NyBAQAogCWNvbnRleHQuZHVwY250ID0gMDsKIAljb250ZXh0LnJlc3luY2ggPSAxOwogCWNvbnRleHQuZmxhZ3MgPSBmbGFnczsKLQlpZiAoIShmbGFncyAmIEFUVFJfS0VSTkFNRUxTKSkgeworCWNvbnRleHQuc2Vlbl9lbm91Z2ggPSAwOworCWNvbnRleHQuYWxpc3QgPSAoYXR0cmxpc3RfdCAqKWJ1ZmZlcjsKKwljb250ZXh0LnB1dF92YWx1ZSA9IDA7CisKKwlpZiAoZmxhZ3MgJiBBVFRSX0tFUk5BTUVMUykgeworCQljb250ZXh0LmJ1ZnNpemUgPSBidWZzaXplOworCQljb250ZXh0LmZpcnN0dSA9IGNvbnRleHQuYnVmc2l6ZTsKKwkJaWYgKGZsYWdzICYgQVRUUl9LRVJOT1ZBTCkKKwkJCWNvbnRleHQucHV0X2xpc3RlbnQgPSB4ZnNfYXR0cl9rZXJuX2xpc3Rfc2l6ZXM7CisJCWVsc2UKKwkJCWNvbnRleHQucHV0X2xpc3RlbnQgPSB4ZnNfYXR0cl9rZXJuX2xpc3Q7CisJfSBlbHNlIHsKIAkJY29udGV4dC5idWZzaXplID0gKGJ1ZnNpemUgJiB+KHNpemVvZihpbnQpLTEpKTsgIC8qIGFsaWduICovCiAJCWNvbnRleHQuZmlyc3R1ID0gY29udGV4dC5idWZzaXplOwotCQljb250ZXh0LmFsaXN0ID0gKGF0dHJsaXN0X3QgKilidWZmZXI7CiAJCWNvbnRleHQuYWxpc3QtPmFsX2NvdW50ID0gMDsKIAkJY29udGV4dC5hbGlzdC0+YWxfbW9yZSA9IDA7CiAJCWNvbnRleHQuYWxpc3QtPmFsX29mZnNldFswXSA9IGNvbnRleHQuYnVmc2l6ZTsKLQl9Ci0JZWxzZSB7Ci0JCWNvbnRleHQuYnVmc2l6ZSA9IGJ1ZnNpemU7Ci0JCWNvbnRleHQuZmlyc3R1ID0gY29udGV4dC5idWZzaXplOwotCQljb250ZXh0LmFsaXN0ID0gKGF0dHJsaXN0X3QgKilidWZmZXI7CisJCWNvbnRleHQucHV0X2xpc3RlbnQgPSB4ZnNfYXR0cl9wdXRfbGlzdGVudDsKIAl9CiAKIAlpZiAoWEZTX0ZPUkNFRF9TSFVURE9XTihkcC0+aV9tb3VudCkpCi0JCXJldHVybiAoRUlPKTsKKwkJcmV0dXJuIEVJTzsKIAogCXhmc19pbG9jayhkcCwgWEZTX0lMT0NLX1NIQVJFRCk7Ci0JLyoKLQkgKiBEZWNpZGUgb24gd2hhdCB3b3JrIHJvdXRpbmVzIHRvIGNhbGwgYmFzZWQgb24gdGhlIGlub2RlIHNpemUuCi0JICovCiAJeGZzX2F0dHJfdHJhY2VfbF9jKCJzeXNjYWxsIHN0YXJ0IiwgJmNvbnRleHQpOwotCWlmIChYRlNfSUZPUktfUShkcCkgPT0gMCB8fAotCSAgICAoZHAtPmlfZC5kaV9hZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0VYVEVOVFMgJiYKLQkgICAgIGRwLT5pX2QuZGlfYW5leHRlbnRzID09IDApKSB7Ci0JCWVycm9yID0gMDsKLQl9IGVsc2UgaWYgKGRwLT5pX2QuZGlfYWZvcm1hdCA9PSBYRlNfRElOT0RFX0ZNVF9MT0NBTCkgewotCQllcnJvciA9IHhmc19hdHRyX3Nob3J0Zm9ybV9saXN0KCZjb250ZXh0KTsKLQl9IGVsc2UgaWYgKHhmc19ibWFwX29uZV9ibG9jayhkcCwgWEZTX0FUVFJfRk9SSykpIHsKLQkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xpc3QoJmNvbnRleHQpOwotCX0gZWxzZSB7Ci0JCWVycm9yID0geGZzX2F0dHJfbm9kZV9saXN0KCZjb250ZXh0KTsKLQl9CisKKwllcnJvciA9IHhmc19hdHRyX2xpc3RfaW50KCZjb250ZXh0KTsKKwogCXhmc19pdW5sb2NrKGRwLCBYRlNfSUxPQ0tfU0hBUkVEKTsKIAl4ZnNfYXR0cl90cmFjZV9sX2MoInN5c2NhbGwgZW5kIiwgJmNvbnRleHQpOwogCi0JaWYgKCEoY29udGV4dC5mbGFncyAmIChBVFRSX0tFUk5PVkFMfEFUVFJfS0VSTkFNRUxTKSkpIHsKLQkJQVNTRVJUKGVycm9yID49IDApOwotCX0KLQllbHNlIHsJLyogbXVzdCByZXR1cm4gbmVnYXRlZCBidWZmZXIgc2l6ZSBvciB0aGUgZXJyb3IgKi8KKwlpZiAoY29udGV4dC5mbGFncyAmIChBVFRSX0tFUk5PVkFMfEFUVFJfS0VSTkFNRUxTKSkgeworCQkvKiBtdXN0IHJldHVybiBuZWdhdGVkIGJ1ZmZlciBzaXplIG9yIHRoZSBlcnJvciAqLwogCQlpZiAoY29udGV4dC5jb3VudCA8IDApCiAJCQllcnJvciA9IFhGU19FUlJPUihFUkFOR0UpOwogCQllbHNlCiAJCQllcnJvciA9IC1jb250ZXh0LmNvdW50OwotCX0KKwl9IGVsc2UKKwkJQVNTRVJUKGVycm9yID49IDApOwogCi0JcmV0dXJuKGVycm9yKTsKKwlyZXR1cm4gZXJyb3I7CiB9CiAKIGludAkJCQkJCQkJLyogZXJyb3IgKi8KQEAgLTExMjIsMTkgKzEyMTksMTkgQEAKIAljb250ZXh0LT5jdXJzb3ItPmJsa25vID0gMDsKIAllcnJvciA9IHhmc19kYV9yZWFkX2J1ZihOVUxMLCBjb250ZXh0LT5kcCwgMCwgLTEsICZicCwgWEZTX0FUVFJfRk9SSyk7CiAJaWYgKGVycm9yKQotCQlyZXR1cm4oZXJyb3IpOworCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAlBU1NFUlQoYnAgIT0gTlVMTCk7CiAJbGVhZiA9IGJwLT5kYXRhOwogCWlmICh1bmxpa2VseShiZTE2X3RvX2NwdShsZWFmLT5oZHIuaW5mby5tYWdpYykgIT0gWEZTX0FUVFJfTEVBRl9NQUdJQykpIHsKIAkJWEZTX0NPUlJVUFRJT05fRVJST1IoInhmc19hdHRyX2xlYWZfbGlzdCIsIFhGU19FUlJMRVZFTF9MT1csCiAJCQkJICAgICBjb250ZXh0LT5kcC0+aV9tb3VudCwgbGVhZik7CiAJCXhmc19kYV9icmVsc2UoTlVMTCwgYnApOwotCQlyZXR1cm4oWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCkpOworCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJfQogCi0JKHZvaWQpeGZzX2F0dHJfbGVhZl9saXN0X2ludChicCwgY29udGV4dCk7CisJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2xpc3RfaW50KGJwLCBjb250ZXh0KTsKIAl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKLQlyZXR1cm4oMCk7CisJcmV0dXJuIFhGU19FUlJPUihlcnJvcik7CiB9CiAKIApAQCAtMTg1OCw4ICsxOTU1LDEyIEBACiAJCQlyZXR1cm4oWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCkpOwogCQl9CiAJCWVycm9yID0geGZzX2F0dHJfbGVhZl9saXN0X2ludChicCwgY29udGV4dCk7Ci0JCWlmIChlcnJvciB8fCAhbGVhZi0+aGRyLmluZm8uZm9ydykKLQkJCWJyZWFrOwkvKiBub3QgcmVhbGx5IGFuIGVycm9yLCBidWZmZXIgZnVsbCBvciBFT0YgKi8KKwkJaWYgKGVycm9yKSB7CisJCQl4ZnNfZGFfYnJlbHNlKE5VTEwsIGJwKTsKKwkJCXJldHVybiBlcnJvcjsKKwkJfQorCQlpZiAoY29udGV4dC0+c2Vlbl9lbm91Z2ggfHwgbGVhZi0+aGRyLmluZm8uZm9ydyA9PSAwKQorCQkJYnJlYWs7CiAJCWN1cnNvci0+Ymxrbm8gPSBiZTMyX3RvX2NwdShsZWFmLT5oZHIuaW5mby5mb3J3KTsKIAkJeGZzX2RhX2JyZWxzZShOVUxMLCBicCk7CiAJCWVycm9yID0geGZzX2RhX3JlYWRfYnVmKE5VTEwsIGNvbnRleHQtPmRwLCBjdXJzb3ItPmJsa25vLCAtMSwKQEAgLTE4ODYsNyArMTk4Nyw3IEBACiAgKiBSZWFkIHRoZSB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggYW4gYXR0cmlidXRlIGZyb20gdGhlIG91dC1vZi1saW5lIGJ1ZmZlcgogICogdGhhdCB3ZSBzdG9yZWQgaXQgaW4uCiAgKi8KLVNUQVRJQyBpbnQKK2ludAogeGZzX2F0dHJfcm10dmFsX2dldCh4ZnNfZGFfYXJnc190ICphcmdzKQogewogCXhmc19ibWJ0X2lyZWNfdCBtYXBbQVRUUl9STVRWQUxVRV9NQVBTSVpFXTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYXR0ci5oIGIvZnMveGZzL3hmc19hdHRyLmgKaW5kZXggOTgxNjMzZi4uNzgzOTc3ZCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyLmgKKysrIGIvZnMveGZzL3hmc19hdHRyLmgKQEAgLTM3LDYgKzM3LDcgQEAKIAogc3RydWN0IGNyZWQ7CiBzdHJ1Y3QgYmh2X3Zub2RlOworc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dDsKIAogdHlwZWRlZiBpbnQgKCphdHRyc2V0X3QpKHN0cnVjdCBiaHZfdm5vZGUgKiwgY2hhciAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKIHR5cGVkZWYgaW50ICgqYXR0cmdldF90KShzdHJ1Y3QgYmh2X3Zub2RlICosIGNoYXIgKiwgdm9pZCAqLCBzaXplX3QsIGludCk7CkBAIC0xNjAsMTMgKzE2MSwxNiBAQAogICovCiBpbnQgeGZzX2F0dHJfZ2V0KGJodl9kZXNjX3QgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIGludCAqLCBpbnQsIHN0cnVjdCBjcmVkICopOwogaW50IHhmc19hdHRyX3NldChiaHZfZGVzY190ICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGNyZWQgKik7CitpbnQgeGZzX2F0dHJfc2V0X2ludChzdHJ1Y3QgeGZzX2lub2RlICosIGNvbnN0IGNoYXIgKiwgaW50LCBjaGFyICosIGludCwgaW50KTsKIGludCB4ZnNfYXR0cl9yZW1vdmUoYmh2X2Rlc2NfdCAqLCBjb25zdCBjaGFyICosIGludCwgc3RydWN0IGNyZWQgKik7Ci1pbnQgeGZzX2F0dHJfbGlzdChiaHZfZGVzY190ICosIGNoYXIgKiwgaW50LCBpbnQsCi0JCQkgc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuICosIHN0cnVjdCBjcmVkICopOworaW50IHhmc19hdHRyX3JlbW92ZV9pbnQoc3RydWN0IHhmc19pbm9kZSAqLCBjb25zdCBjaGFyICosIGludCwgaW50KTsKK2ludCB4ZnNfYXR0cl9saXN0KGJodl9kZXNjX3QgKiwgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuICosIHN0cnVjdCBjcmVkICopOworaW50IHhmc19hdHRyX2xpc3RfaW50KHN0cnVjdCB4ZnNfYXR0cl9saXN0X2NvbnRleHQgKik7CiBpbnQgeGZzX2F0dHJfaW5hY3RpdmUoc3RydWN0IHhmc19pbm9kZSAqZHApOwogCiBpbnQgeGZzX2F0dHJfc2hvcnRmb3JtX2dldHZhbHVlKHN0cnVjdCB4ZnNfZGFfYXJncyAqKTsKIGludCB4ZnNfYXR0cl9mZXRjaChzdHJ1Y3QgeGZzX2lub2RlICosIGNvbnN0IGNoYXIgKiwgaW50LAogCQkJY2hhciAqLCBpbnQgKiwgaW50LCBzdHJ1Y3QgY3JlZCAqKTsKK2ludCB4ZnNfYXR0cl9ybXR2YWxfZ2V0KHN0cnVjdCB4ZnNfZGFfYXJncyAqYXJncyk7CiAKICNlbmRpZgkvKiBfX1hGU19BVFRSX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmMKaW5kZXggOTQ1NTA1MS4uOTcxOWJiZSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19hdHRyX2xlYWYuYworKysgYi9mcy94ZnMveGZzX2F0dHJfbGVhZi5jCkBAIC04OSw5ICs4OSw0NiBAQAogCQkJCQkgaW50IGRzdF9zdGFydCwgaW50IG1vdmVfY291bnQsCiAJCQkJCSB4ZnNfbW91bnRfdCAqbXApOwogU1RBVElDIGludCB4ZnNfYXR0cl9sZWFmX2VudHNpemUoeGZzX2F0dHJfbGVhZmJsb2NrX3QgKmxlYWYsIGludCBpbmRleCk7Ci1TVEFUSUMgaW50IHhmc19hdHRyX3B1dF9saXN0ZW50KHhmc19hdHRyX2xpc3RfY29udGV4dF90ICpjb250ZXh0LAotCQkJICAgICBhdHRybmFtZXNfdCAqLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgICAgaW50IHZhbHVlbGVuKTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIE5hbWVzcGFjZSBoZWxwZXIgcm91dGluZXMKKyAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKworU1RBVElDIGlubGluZSBhdHRybmFtZXNfdCAqCit4ZnNfYXR0cl9mbGFnc19uYW1lc3AoaW50IGZsYWdzKQoreworCXJldHVybiAoKGZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSA/ICZhdHRyX3NlY3VyZToKKwkJICAoKGZsYWdzICYgWEZTX0FUVFJfUk9PVCkgPyAmYXR0cl90cnVzdGVkIDogJmF0dHJfdXNlcikpOworfQorCisvKgorICogSWYgbmFtZXNwYWNlIGJpdHMgZG9uJ3QgbWF0Y2ggcmV0dXJuIDAuCisgKiBJZiBhbGwgbWF0Y2ggdGhlbiByZXR1cm4gMS4KKyAqLworU1RBVElDIGlubGluZSBpbnQKK3hmc19hdHRyX25hbWVzcF9tYXRjaChpbnQgYXJnX2ZsYWdzLCBpbnQgb25kaXNrX2ZsYWdzKQoreworCXJldHVybiBYRlNfQVRUUl9OU1BfT05ESVNLKG9uZGlza19mbGFncykgPT0gWEZTX0FUVFJfTlNQX0FSR1NfVE9fT05ESVNLKGFyZ19mbGFncyk7Cit9CisKKy8qCisgKiBJZiBuYW1lc3BhY2UgYml0cyBkb24ndCBtYXRjaCBhbmQgd2UgZG9uJ3QgaGF2ZSBhbiBvdmVycmlkZSBmb3IgaXQKKyAqIHRoZW4gcmV0dXJuIDAuCisgKiBJZiBhbGwgbWF0Y2ggb3IgYXJlIG92ZXJyaWRhYmxlIHRoZW4gcmV0dXJuIDEuCisgKi8KK1NUQVRJQyBpbmxpbmUgaW50Cit4ZnNfYXR0cl9uYW1lc3BfbWF0Y2hfb3ZlcnJpZGVzKGludCBhcmdfZmxhZ3MsIGludCBvbmRpc2tfZmxhZ3MpCit7CisJaWYgKCgoYXJnX2ZsYWdzICYgQVRUUl9TRUNVUkUpID09IDApICE9CisJICAgICgob25kaXNrX2ZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSA9PSAwKSAmJgorCSAgICAhKGFyZ19mbGFncyAmIEFUVFJfS0VSTk9STUFMUykpCisJCXJldHVybiAwOworCWlmICgoKGFyZ19mbGFncyAmIEFUVFJfUk9PVCkgPT0gMCkgIT0KKwkgICAgKChvbmRpc2tfZmxhZ3MgJiBYRlNfQVRUUl9ST09UKSA9PSAwKSAmJgorCSAgICAhKGFyZ19mbGFncyAmIEFUVFJfS0VSTlJPT1RMUykpCisJCXJldHVybiAwOworCXJldHVybiAxOworfQogCiAKIC8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0yMjgsMTEgKzI2NSw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKG1lbWNtcChhcmdzLT5uYW1lLCBzZmUtPm5hbWV2YWwsIGFyZ3MtPm5hbWVsZW4pICE9IDApCiAJCQljb250aW51ZTsKLQkJaWYgKCgoYXJncy0+ZmxhZ3MgJiBBVFRSX1NFQ1VSRSkgIT0gMCkgIT0KLQkJICAgICgoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1NFQ1VSRSkgIT0gMCkpCi0JCQljb250aW51ZTsKLQkJaWYgKCgoYXJncy0+ZmxhZ3MgJiBBVFRSX1JPT1QpICE9IDApICE9Ci0JCSAgICAoKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9ST09UKSAhPSAwKSkKKwkJaWYgKCF4ZnNfYXR0cl9uYW1lc3BfbWF0Y2goYXJncy0+ZmxhZ3MsIHNmZS0+ZmxhZ3MpKQogCQkJY29udGludWU7CiAJCUFTU0VSVCgwKTsKICNlbmRpZgpAQCAtMjQ2LDggKzI3OSw3IEBACiAKIAlzZmUtPm5hbWVsZW4gPSBhcmdzLT5uYW1lbGVuOwogCXNmZS0+dmFsdWVsZW4gPSBhcmdzLT52YWx1ZWxlbjsKLQlzZmUtPmZsYWdzID0gKGFyZ3MtPmZsYWdzICYgQVRUUl9TRUNVUkUpID8gWEZTX0FUVFJfU0VDVVJFIDoKLQkJCSgoYXJncy0+ZmxhZ3MgJiBBVFRSX1JPT1QpID8gWEZTX0FUVFJfUk9PVCA6IDApOworCXNmZS0+ZmxhZ3MgPSBYRlNfQVRUUl9OU1BfQVJHU19UT19PTkRJU0soYXJncy0+ZmxhZ3MpOwogCW1lbWNweShzZmUtPm5hbWV2YWwsIGFyZ3MtPm5hbWUsIGFyZ3MtPm5hbWVsZW4pOwogCW1lbWNweSgmc2ZlLT5uYW1ldmFsW2FyZ3MtPm5hbWVsZW5dLCBhcmdzLT52YWx1ZSwgYXJncy0+dmFsdWVsZW4pOwogCXNmLT5oZHIuY291bnQrKzsKQEAgLTI4MiwxMSArMzE0LDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAobWVtY21wKHNmZS0+bmFtZXZhbCwgYXJncy0+bmFtZSwgYXJncy0+bmFtZWxlbikgIT0gMCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfU0VDVVJFKSAhPSAwKSAhPQotCQkgICAgKChzZmUtPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSAhPSAwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfUk9PVCkgIT0gMCkgIT0KLQkJICAgICgoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1JPT1QpICE9IDApKQorCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaChhcmdzLT5mbGFncywgc2ZlLT5mbGFncykpCiAJCQljb250aW51ZTsKIAkJYnJlYWs7CiAJfQpAQCAtMzYzLDExICszOTEsNyBAQAogCQkJY29udGludWU7CiAJCWlmIChtZW1jbXAoYXJncy0+bmFtZSwgc2ZlLT5uYW1ldmFsLCBhcmdzLT5uYW1lbGVuKSAhPSAwKQogCQkJY29udGludWU7Ci0JCWlmICgoKGFyZ3MtPmZsYWdzICYgQVRUUl9TRUNVUkUpICE9IDApICE9Ci0JCSAgICAoKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9TRUNVUkUpICE9IDApKQotCQkJY29udGludWU7Ci0JCWlmICgoKGFyZ3MtPmZsYWdzICYgQVRUUl9ST09UKSAhPSAwKSAhPQotCQkgICAgKChzZmUtPmZsYWdzICYgWEZTX0FUVFJfUk9PVCkgIT0gMCkpCisJCWlmICgheGZzX2F0dHJfbmFtZXNwX21hdGNoKGFyZ3MtPmZsYWdzLCBzZmUtPmZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCQlyZXR1cm4oWEZTX0VSUk9SKEVFWElTVCkpOwogCX0KQEAgLTM5NCwxMSArNDE4LDcgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAobWVtY21wKGFyZ3MtPm5hbWUsIHNmZS0+bmFtZXZhbCwgYXJncy0+bmFtZWxlbikgIT0gMCkKIAkJCWNvbnRpbnVlOwotCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfU0VDVVJFKSAhPSAwKSAhPQotCQkgICAgKChzZmUtPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSAhPSAwKSkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfUk9PVCkgIT0gMCkgIT0KLQkJICAgICgoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1JPT1QpICE9IDApKQorCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaChhcmdzLT5mbGFncywgc2ZlLT5mbGFncykpCiAJCQljb250aW51ZTsKIAkJaWYgKGFyZ3MtPmZsYWdzICYgQVRUUl9LRVJOT1ZBTCkgewogCQkJYXJncy0+dmFsdWVsZW4gPSBzZmUtPnZhbHVlbGVuOwpAQCAtNDg1LDggKzUwNSw3IEBACiAJCW5hcmdzLnZhbHVlbGVuID0gc2ZlLT52YWx1ZWxlbjsKIAkJbmFyZ3MuaGFzaHZhbCA9IHhmc19kYV9oYXNobmFtZSgoY2hhciAqKXNmZS0+bmFtZXZhbCwKIAkJCQkJCXNmZS0+bmFtZWxlbik7Ci0JCW5hcmdzLmZsYWdzID0gKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9TRUNVUkUpID8gQVRUUl9TRUNVUkUgOgotCQkJCSgoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1JPT1QpID8gQVRUUl9ST09UIDogMCk7CisJCW5hcmdzLmZsYWdzID0gWEZTX0FUVFJfTlNQX09ORElTS19UT19BUkdTKHNmZS0+ZmxhZ3MpOwogCQllcnJvciA9IHhmc19hdHRyX2xlYWZfbG9va3VwX2ludChicCwgJm5hcmdzKTsgLyogc2V0IGEtPmluZGV4ICovCiAJCUFTU0VSVChlcnJvciA9PSBFTk9BVFRSKTsKIAkJZXJyb3IgPSB4ZnNfYXR0cl9sZWFmX2FkZChicCwgJm5hcmdzKTsKQEAgLTUyMCw2ICs1MzksMTAgQEAKIAl9CiB9CiAKKworI2RlZmluZSBYRlNfSVNSRVNFVF9DVVJTT1IoY3Vyc29yKSBcCisJKCEoKGN1cnNvciktPmluaXR0ZWQpICYmICEoKGN1cnNvciktPmhhc2h2YWwpICYmIFwKKwkgISgoY3Vyc29yKS0+Ymxrbm8pICYmICEoKGN1cnNvciktPm9mZnNldCkpCiAvKgogICogQ29weSBvdXQgZW50cmllcyBvZiBzaG9ydGZvcm0gYXR0cmlidXRlIGxpc3RzIGZvciBhdHRyX2xpc3QoKS4KICAqIFNob3J0Zm9ybSBhdHRyaWJ1dGUgbGlzdHMgYXJlIG5vdCBzdG9yZWQgaW4gaGFzaHZhbCBzb3J0ZWQgb3JkZXIuCkBAIC01MzcsNiArNTYwLDcgQEAKIAl4ZnNfYXR0cl9zZl9lbnRyeV90ICpzZmU7CiAJeGZzX2lub2RlX3QgKmRwOwogCWludCBzYnNpemUsIG5zYnVmLCBjb3VudCwgaTsKKwlpbnQgZXJyb3I7CiAKIAlBU1NFUlQoY29udGV4dCAhPSBOVUxMKTsKIAlkcCA9IGNvbnRleHQtPmRwOwpAQCAtNTUyLDQ2ICs1NzYsNTEgQEAKIAl4ZnNfYXR0cl90cmFjZV9sX2MoInNmIHN0YXJ0IiwgY29udGV4dCk7CiAKIAkvKgotCSAqIElmIHRoZSBidWZmZXIgaXMgbGFyZ2UgZW5vdWdoLCBkbyBub3QgYm90aGVyIHdpdGggc29ydGluZy4KKwkgKiBJZiB0aGUgYnVmZmVyIGlzIGxhcmdlIGVub3VnaCBhbmQgdGhlIGN1cnNvciBpcyBhdCB0aGUgc3RhcnQsCisJICogZG8gbm90IGJvdGhlciB3aXRoIHNvcnRpbmcgc2luY2Ugd2Ugd2lsbCByZXR1cm4gZXZlcnl0aGluZyBpbgorCSAqIG9uZSBidWZmZXIgYW5kIGFub3RoZXIgY2FsbCB1c2luZyB0aGUgY3Vyc29yIHdvbid0IG5lZWQgdG8gYmUKKwkgKiBtYWRlLgogCSAqIE5vdGUgdGhlIGdlbmVyb3VzIGZ1ZGdlIGZhY3RvciBvZiAxNiBvdmVyaGVhZCBieXRlcyBwZXIgZW50cnkuCisJICogSWYgYnVmc2l6ZSBpcyB6ZXJvIHRoZW4gcHV0X2xpc3RlbnQgbXVzdCBiZSBhIHNlYXJjaCBmdW5jdGlvbgorCSAqIGFuZCBjYW4ganVzdCBzY2FuIHRocm91Z2ggd2hhdCB3ZSBoYXZlLgogCSAqLwotCWlmICgoZHAtPmlfYWZwLT5pZl9ieXRlcyArIHNmLT5oZHIuY291bnQgKiAxNikgPCBjb250ZXh0LT5idWZzaXplKSB7CisJaWYgKGNvbnRleHQtPmJ1ZnNpemUgPT0gMCB8fAorCSAgICAoWEZTX0lTUkVTRVRfQ1VSU09SKGN1cnNvcikgJiYKKyAgICAgICAgICAgICAoZHAtPmlfYWZwLT5pZl9ieXRlcyArIHNmLT5oZHIuY291bnQgKiAxNikgPCBjb250ZXh0LT5idWZzaXplKSkgewogCQlmb3IgKGkgPSAwLCBzZmUgPSAmc2YtPmxpc3RbMF07IGkgPCBzZi0+aGRyLmNvdW50OyBpKyspIHsKIAkJCWF0dHJuYW1lc190CSpuYW1lc3A7CiAKLQkJCWlmICgoKGNvbnRleHQtPmZsYWdzICYgQVRUUl9TRUNVUkUpICE9IDApICE9Ci0JCQkgICAgKChzZmUtPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSAhPSAwKSAmJgotCQkJICAgICEoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5PUk1BTFMpKSB7CisJCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaF9vdmVycmlkZXMoY29udGV4dC0+ZmxhZ3MsIHNmZS0+ZmxhZ3MpKSB7CiAJCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSk7CiAJCQkJY29udGludWU7CiAJCQl9Ci0JCQlpZiAoKChjb250ZXh0LT5mbGFncyAmIEFUVFJfUk9PVCkgIT0gMCkgIT0KLQkJCSAgICAoKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9ST09UKSAhPSAwKSAmJgotCQkJICAgICEoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5ST09UTFMpKSB7Ci0JCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSk7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQluYW1lc3AgPSAoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1NFQ1VSRSkgPyAmYXR0cl9zZWN1cmU6Ci0JCQkJKChzZmUtPmZsYWdzICYgWEZTX0FUVFJfUk9PVCkgPyAmYXR0cl90cnVzdGVkIDoKLQkJCQkgICZhdHRyX3VzZXIpOwotCQkJaWYgKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOT1ZBTCkgewotCQkJCUFTU0VSVChjb250ZXh0LT5mbGFncyAmIEFUVFJfS0VSTkFNRUxTKTsKLQkJCQljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArCi0JCQkJCXNmZS0+bmFtZWxlbiArIDE7Ci0JCQl9Ci0JCQllbHNlIHsKLQkJCQlpZiAoeGZzX2F0dHJfcHV0X2xpc3RlbnQoY29udGV4dCwgbmFtZXNwLAotCQkJCQkJICAgKGNoYXIgKilzZmUtPm5hbWV2YWwsCi0JCQkJCQkgICAoaW50KXNmZS0+bmFtZWxlbiwKLQkJCQkJCSAgIChpbnQpc2ZlLT52YWx1ZWxlbikpCi0JCQkJCWJyZWFrOwotCQkJfQorCQkJbmFtZXNwID0geGZzX2F0dHJfZmxhZ3NfbmFtZXNwKHNmZS0+ZmxhZ3MpOworCQkJZXJyb3IgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAorCQkJCQkgICBuYW1lc3AsCisJCQkJCSAgIChjaGFyICopc2ZlLT5uYW1ldmFsLAorCQkJCQkgICAoaW50KXNmZS0+bmFtZWxlbiwKKwkJCQkJICAgKGludClzZmUtPnZhbHVlbGVuLAorCQkJCQkgICAoY2hhciopJnNmZS0+bmFtZXZhbFtzZmUtPm5hbWVsZW5dKTsKKworCQkJLyoKKwkJCSAqIEVpdGhlciBzZWFyY2ggY2FsbGJhY2sgZmluaXNoZWQgZWFybHkgb3IKKwkJCSAqIGRpZG4ndCBmaXQgaXQgYWxsIGluIHRoZSBidWZmZXIgYWZ0ZXIgYWxsLgorCQkJICovCisJCQlpZiAoY29udGV4dC0+c2Vlbl9lbm91Z2gpCisJCQkJYnJlYWs7CisKKwkJCWlmIChlcnJvcikKKwkJCQlyZXR1cm4gZXJyb3I7CiAJCQlzZmUgPSBYRlNfQVRUUl9TRl9ORVhURU5UUlkoc2ZlKTsKIAkJfQogCQl4ZnNfYXR0cl90cmFjZV9sX2MoInNmIGJpZy1ndWxwIiwgY29udGV4dCk7CiAJCXJldHVybigwKTsKIAl9CiAKKwkvKiBkbyBubyBtb3JlIGZvciBhIHNlYXJjaCBjYWxsYmFjayAqLworCWlmIChjb250ZXh0LT5idWZzaXplID09IDApCisJCXJldHVybiAwOworCiAJLyoKIAkgKiBJdCBkaWRuJ3QgYWxsIGZpdCwgc28gd2UgaGF2ZSB0byBzb3J0IGV2ZXJ5dGhpbmcgb24gaGFzaHZhbC4KIAkgKi8KQEAgLTYxNCwxNSArNjQzLDcgQEAKIAkJCWttZW1fZnJlZShzYnVmLCBzYnNpemUpOwogCQkJcmV0dXJuIFhGU19FUlJPUihFRlNDT1JSVVBURUQpOwogCQl9Ci0JCWlmICgoKGNvbnRleHQtPmZsYWdzICYgQVRUUl9TRUNVUkUpICE9IDApICE9Ci0JCSAgICAoKHNmZS0+ZmxhZ3MgJiBYRlNfQVRUUl9TRUNVUkUpICE9IDApICYmCi0JCSAgICAhKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOT1JNQUxTKSkgewotCQkJc2ZlID0gWEZTX0FUVFJfU0ZfTkVYVEVOVFJZKHNmZSk7Ci0JCQljb250aW51ZTsKLQkJfQotCQlpZiAoKChjb250ZXh0LT5mbGFncyAmIEFUVFJfUk9PVCkgIT0gMCkgIT0KLQkJICAgICgoc2ZlLT5mbGFncyAmIFhGU19BVFRSX1JPT1QpICE9IDApICYmCi0JCSAgICAhKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOUk9PVExTKSkgeworCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaF9vdmVycmlkZXMoY29udGV4dC0+ZmxhZ3MsIHNmZS0+ZmxhZ3MpKSB7CiAJCQlzZmUgPSBYRlNfQVRUUl9TRl9ORVhURU5UUlkoc2ZlKTsKIAkJCWNvbnRpbnVlOwogCQl9CkBAIC02NzEsMjQgKzY5MiwyMiBAQAogCWZvciAoIDsgaSA8IG5zYnVmOyBpKyssIHNicCsrKSB7CiAJCWF0dHJuYW1lc190CSpuYW1lc3A7CiAKLQkJbmFtZXNwID0gKHNicC0+ZmxhZ3MgJiBYRlNfQVRUUl9TRUNVUkUpID8gJmF0dHJfc2VjdXJlIDoKLQkJCSgoc2JwLT5mbGFncyAmIFhGU19BVFRSX1JPT1QpID8gJmF0dHJfdHJ1c3RlZCA6Ci0JCQkgICZhdHRyX3VzZXIpOworCQluYW1lc3AgPSB4ZnNfYXR0cl9mbGFnc19uYW1lc3Aoc2JwLT5mbGFncyk7CiAKIAkJaWYgKGN1cnNvci0+aGFzaHZhbCAhPSBzYnAtPmhhc2gpIHsKIAkJCWN1cnNvci0+aGFzaHZhbCA9IHNicC0+aGFzaDsKIAkJCWN1cnNvci0+b2Zmc2V0ID0gMDsKIAkJfQotCQlpZiAoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSB7Ci0JCQlBU1NFUlQoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5BTUVMUyk7Ci0JCQljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArCi0JCQkJCQlzYnAtPm5hbWVsZW4gKyAxOwotCQl9IGVsc2UgewotCQkJaWYgKHhmc19hdHRyX3B1dF9saXN0ZW50KGNvbnRleHQsIG5hbWVzcCwKLQkJCQkJc2JwLT5uYW1lLCBzYnAtPm5hbWVsZW4sCi0JCQkJCXNicC0+dmFsdWVsZW4pKQotCQkJCWJyZWFrOwotCQl9CisJCWVycm9yID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKKwkJCQkJbmFtZXNwLAorCQkJCQlzYnAtPm5hbWUsCisJCQkJCXNicC0+bmFtZWxlbiwKKwkJCQkJc2JwLT52YWx1ZWxlbiwKKwkJCQkJJnNicC0+bmFtZVtzYnAtPm5hbWVsZW5dKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCQlpZiAoY29udGV4dC0+c2Vlbl9lbm91Z2gpCisJCQlicmVhazsKIAkJY3Vyc29yLT5vZmZzZXQrKzsKIAl9CiAKQEAgLTgxMCw4ICs4MjksNyBAQAogCQluYXJncy52YWx1ZSA9IChjaGFyICopJm5hbWVfbG9jLT5uYW1ldmFsW25hcmdzLm5hbWVsZW5dOwogCQluYXJncy52YWx1ZWxlbiA9IGJlMTZfdG9fY3B1KG5hbWVfbG9jLT52YWx1ZWxlbik7CiAJCW5hcmdzLmhhc2h2YWwgPSBiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCk7Ci0JCW5hcmdzLmZsYWdzID0gKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1NFQ1VSRSkgPyBBVFRSX1NFQ1VSRSA6Ci0JCQkgICAgICAoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1JPT1QpID8gQVRUUl9ST09UIDogMCk7CisJCW5hcmdzLmZsYWdzID0gWEZTX0FUVFJfTlNQX09ORElTS19UT19BUkdTKGVudHJ5LT5mbGFncyk7CiAJCXhmc19hdHRyX3Nob3J0Zm9ybV9hZGQoJm5hcmdzLCBmb3Jrb2ZmKTsKIAl9CiAJZXJyb3IgPSAwOwpAQCAtMTA5OCw4ICsxMTE2LDcgQEAKIAkJCQkgICAgIGJlMTZfdG9fY3B1KG1hcC0+c2l6ZSkpOwogCWVudHJ5LT5oYXNodmFsID0gY3B1X3RvX2JlMzIoYXJncy0+aGFzaHZhbCk7CiAJZW50cnktPmZsYWdzID0gdG1wID8gWEZTX0FUVFJfTE9DQUwgOiAwOwotCWVudHJ5LT5mbGFncyB8PSAoYXJncy0+ZmxhZ3MgJiBBVFRSX1NFQ1VSRSkgPyBYRlNfQVRUUl9TRUNVUkUgOgotCQkJKChhcmdzLT5mbGFncyAmIEFUVFJfUk9PVCkgPyBYRlNfQVRUUl9ST09UIDogMCk7CisJZW50cnktPmZsYWdzIHw9IFhGU19BVFRSX05TUF9BUkdTX1RPX09ORElTSyhhcmdzLT5mbGFncyk7CiAJaWYgKGFyZ3MtPnJlbmFtZSkgewogCQllbnRyeS0+ZmxhZ3MgfD0gWEZTX0FUVFJfSU5DT01QTEVURTsKIAkJaWYgKChhcmdzLT5ibGtubzIgPT0gYXJncy0+Ymxrbm8pICYmCkBAIC0xOTI2LDcgKzE5NDMsNyBAQAogCQllbHNlCiAJCQlicmVhazsKIAl9Ci0JQVNTRVJUKChwcm9iZSA+PSAwKSAmJiAKKwlBU1NFUlQoKHByb2JlID49IDApICYmCiAJICAgICAgICghbGVhZi0+aGRyLmNvdW50CiAJICAgICAgIHx8IChwcm9iZSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpKSk7CiAJQVNTRVJUKChzcGFuIDw9IDQpIHx8IChiZTMyX3RvX2NwdShlbnRyeS0+aGFzaHZhbCkgPT0gaGFzaHZhbCkpOwpAQCAtMTk3MSwxNCArMTk4OCw5IEBACiAJCQluYW1lX2xvYyA9IFhGU19BVFRSX0xFQUZfTkFNRV9MT0NBTChsZWFmLCBwcm9iZSk7CiAJCQlpZiAobmFtZV9sb2MtPm5hbWVsZW4gIT0gYXJncy0+bmFtZWxlbikKIAkJCQljb250aW51ZTsKLQkJCWlmIChtZW1jbXAoYXJncy0+bmFtZSwgKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbCwKLQkJCQkJICAgICBhcmdzLT5uYW1lbGVuKSAhPSAwKQorCQkJaWYgKG1lbWNtcChhcmdzLT5uYW1lLCAoY2hhciAqKW5hbWVfbG9jLT5uYW1ldmFsLCBhcmdzLT5uYW1lbGVuKSAhPSAwKQogCQkJCWNvbnRpbnVlOwotCQkJaWYgKCgoYXJncy0+ZmxhZ3MgJiBBVFRSX1NFQ1VSRSkgIT0gMCkgIT0KLQkJCSAgICAoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1NFQ1VSRSkgIT0gMCkpCi0JCQkJY29udGludWU7Ci0JCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfUk9PVCkgIT0gMCkgIT0KLQkJCSAgICAoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1JPT1QpICE9IDApKQorCQkJaWYgKCF4ZnNfYXR0cl9uYW1lc3BfbWF0Y2goYXJncy0+ZmxhZ3MsIGVudHJ5LT5mbGFncykpCiAJCQkJY29udGludWU7CiAJCQlhcmdzLT5pbmRleCA9IHByb2JlOwogCQkJcmV0dXJuKFhGU19FUlJPUihFRVhJU1QpKTsKQEAgLTE5ODksMTEgKzIwMDEsNyBAQAogCQkJaWYgKG1lbWNtcChhcmdzLT5uYW1lLCAoY2hhciAqKW5hbWVfcm10LT5uYW1lLAogCQkJCQkgICAgIGFyZ3MtPm5hbWVsZW4pICE9IDApCiAJCQkJY29udGludWU7Ci0JCQlpZiAoKChhcmdzLT5mbGFncyAmIEFUVFJfU0VDVVJFKSAhPSAwKSAhPQotCQkJICAgICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSAhPSAwKSkKLQkJCQljb250aW51ZTsKLQkJCWlmICgoKGFyZ3MtPmZsYWdzICYgQVRUUl9ST09UKSAhPSAwKSAhPQotCQkJICAgICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfUk9PVCkgIT0gMCkpCisJCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaChhcmdzLT5mbGFncywgZW50cnktPmZsYWdzKSkKIAkJCQljb250aW51ZTsKIAkJCWFyZ3MtPmluZGV4ID0gcHJvYmU7CiAJCQlhcmdzLT5ybXRibGtubyA9IGJlMzJfdG9fY3B1KG5hbWVfcm10LT52YWx1ZWJsayk7CkBAIC0yMzEyLDggKzIzMjAsNiBAQAogCWF0dHJsaXN0X2N1cnNvcl9rZXJuX3QgKmN1cnNvcjsKIAl4ZnNfYXR0cl9sZWFmYmxvY2tfdCAqbGVhZjsKIAl4ZnNfYXR0cl9sZWFmX2VudHJ5X3QgKmVudHJ5OwotCXhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbF90ICpuYW1lX2xvYzsKLQl4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKm5hbWVfcm10OwogCWludCByZXR2YWwsIGk7CiAKIAlBU1NFUlQoYnAgIT0gTlVMTCk7CkBAIC0yMzU1LDkgKzIzNjEsOCBAQAogCSAqIFdlIGhhdmUgZm91bmQgb3VyIHBsYWNlLCBzdGFydCBjb3B5aW5nIG91dCB0aGUgbmV3IGF0dHJpYnV0ZXMuCiAJICovCiAJcmV0dmFsID0gMDsKLQlmb3IgKCAgOyAoaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpCi0JICAgICAmJiAocmV0dmFsID09IDApOyBlbnRyeSsrLCBpKyspIHsKLQkJYXR0cm5hbWVzX3QJKm5hbWVzcDsKKwlmb3IgKCAgOyAoaSA8IGJlMTZfdG9fY3B1KGxlYWYtPmhkci5jb3VudCkpOyBlbnRyeSsrLCBpKyspIHsKKwkJYXR0cm5hbWVzX3QgKm5hbWVzcDsKIAogCQlpZiAoYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpICE9IGN1cnNvci0+aGFzaHZhbCkgewogCQkJY3Vyc29yLT5oYXNodmFsID0gYmUzMl90b19jcHUoZW50cnktPmhhc2h2YWwpOwpAQCAtMjM2NiwxMTUgKzIzNzEsNjkgQEAKIAogCQlpZiAoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfSU5DT01QTEVURSkKIAkJCWNvbnRpbnVlOwkJLyogc2tpcCBpbmNvbXBsZXRlIGVudHJpZXMgKi8KLQkJaWYgKCgoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX1NFQ1VSRSkgIT0gMCkgIT0KLQkJICAgICgoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSAhPSAwKSAmJgotCQkgICAgIShjb250ZXh0LT5mbGFncyAmIEFUVFJfS0VSTk9STUFMUykpCi0JCQljb250aW51ZTsJCS8qIHNraXAgbm9uLW1hdGNoaW5nIGVudHJpZXMgKi8KLQkJaWYgKCgoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX1JPT1QpICE9IDApICE9Ci0JCSAgICAoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1JPT1QpICE9IDApICYmCi0JCSAgICAhKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOUk9PVExTKSkKLQkJCWNvbnRpbnVlOwkJLyogc2tpcCBub24tbWF0Y2hpbmcgZW50cmllcyAqLworCQlpZiAoIXhmc19hdHRyX25hbWVzcF9tYXRjaF9vdmVycmlkZXMoY29udGV4dC0+ZmxhZ3MsIGVudHJ5LT5mbGFncykpCisJCQljb250aW51ZTsKIAotCQluYW1lc3AgPSAoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfU0VDVVJFKSA/ICZhdHRyX3NlY3VyZSA6Ci0JCQkoKGVudHJ5LT5mbGFncyAmIFhGU19BVFRSX1JPT1QpID8gJmF0dHJfdHJ1c3RlZCA6Ci0JCQkgICZhdHRyX3VzZXIpOworCQluYW1lc3AgPSB4ZnNfYXR0cl9mbGFnc19uYW1lc3AoZW50cnktPmZsYWdzKTsKIAogCQlpZiAoZW50cnktPmZsYWdzICYgWEZTX0FUVFJfTE9DQUwpIHsKLQkJCW5hbWVfbG9jID0gWEZTX0FUVFJfTEVBRl9OQU1FX0xPQ0FMKGxlYWYsIGkpOwotCQkJaWYgKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOT1ZBTCkgewotCQkJCUFTU0VSVChjb250ZXh0LT5mbGFncyAmIEFUVFJfS0VSTkFNRUxTKTsKLQkJCQljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArCi0JCQkJCQkoaW50KW5hbWVfbG9jLT5uYW1lbGVuICsgMTsKLQkJCX0gZWxzZSB7Ci0JCQkJcmV0dmFsID0geGZzX2F0dHJfcHV0X2xpc3RlbnQoY29udGV4dCwgbmFtZXNwLAotCQkJCQkoY2hhciAqKW5hbWVfbG9jLT5uYW1ldmFsLAotCQkJCQkoaW50KW5hbWVfbG9jLT5uYW1lbGVuLAotCQkJCQliZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pKTsKLQkJCX0KKwkJCXhmc19hdHRyX2xlYWZfbmFtZV9sb2NhbF90ICpuYW1lX2xvYyA9CisJCQkJWEZTX0FUVFJfTEVBRl9OQU1FX0xPQ0FMKGxlYWYsIGkpOworCisJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAorCQkJCQkJbmFtZXNwLAorCQkJCQkJKGNoYXIgKiluYW1lX2xvYy0+bmFtZXZhbCwKKwkJCQkJCShpbnQpbmFtZV9sb2MtPm5hbWVsZW4sCisJCQkJCQliZTE2X3RvX2NwdShuYW1lX2xvYy0+dmFsdWVsZW4pLAorCQkJCQkJKGNoYXIgKikmbmFtZV9sb2MtPm5hbWV2YWxbbmFtZV9sb2MtPm5hbWVsZW5dKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKIAkJfSBlbHNlIHsKLQkJCW5hbWVfcm10ID0gWEZTX0FUVFJfTEVBRl9OQU1FX1JFTU9URShsZWFmLCBpKTsKLQkJCWlmIChjb250ZXh0LT5mbGFncyAmIEFUVFJfS0VSTk9WQUwpIHsKLQkJCQlBU1NFUlQoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5BTUVMUyk7Ci0JCQkJY29udGV4dC0+Y291bnQgKz0gbmFtZXNwLT5hdHRyX25hbWVsZW4gKwotCQkJCQkJKGludCluYW1lX3JtdC0+bmFtZWxlbiArIDE7Ci0JCQl9IGVsc2UgewotCQkJCXJldHZhbCA9IHhmc19hdHRyX3B1dF9saXN0ZW50KGNvbnRleHQsIG5hbWVzcCwKLQkJCQkJKGNoYXIgKiluYW1lX3JtdC0+bmFtZSwKLQkJCQkJKGludCluYW1lX3JtdC0+bmFtZWxlbiwKLQkJCQkJYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlbGVuKSk7CisJCQl4ZnNfYXR0cl9sZWFmX25hbWVfcmVtb3RlX3QgKm5hbWVfcm10ID0KKwkJCQlYRlNfQVRUUl9MRUFGX05BTUVfUkVNT1RFKGxlYWYsIGkpOworCisJCQlpbnQgdmFsdWVsZW4gPSBiZTMyX3RvX2NwdShuYW1lX3JtdC0+dmFsdWVsZW4pOworCisJCQlpZiAoY29udGV4dC0+cHV0X3ZhbHVlKSB7CisJCQkJeGZzX2RhX2FyZ3NfdCBhcmdzOworCisJCQkJbWVtc2V0KChjaGFyICopJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJCQkJYXJncy5kcCA9IGNvbnRleHQtPmRwOworCQkJCWFyZ3Mud2hpY2hmb3JrID0gWEZTX0FUVFJfRk9SSzsKKwkJCQlhcmdzLnZhbHVlbGVuID0gdmFsdWVsZW47CisJCQkJYXJncy52YWx1ZSA9IGttZW1fYWxsb2ModmFsdWVsZW4sIEtNX1NMRUVQKTsKKwkJCQlhcmdzLnJtdGJsa25vID0gYmUzMl90b19jcHUobmFtZV9ybXQtPnZhbHVlYmxrKTsKKwkJCQlhcmdzLnJtdGJsa2NudCA9IFhGU19CX1RPX0ZTQihhcmdzLmRwLT5pX21vdW50LCB2YWx1ZWxlbik7CisJCQkJcmV0dmFsID0geGZzX2F0dHJfcm10dmFsX2dldCgmYXJncyk7CisJCQkJaWYgKHJldHZhbCkKKwkJCQkJcmV0dXJuIHJldHZhbDsKKwkJCQlyZXR2YWwgPSBjb250ZXh0LT5wdXRfbGlzdGVudChjb250ZXh0LAorCQkJCQkJbmFtZXNwLAorCQkJCQkJKGNoYXIgKiluYW1lX3JtdC0+bmFtZSwKKwkJCQkJCShpbnQpbmFtZV9ybXQtPm5hbWVsZW4sCisJCQkJCQl2YWx1ZWxlbiwKKwkJCQkJCShjaGFyKilhcmdzLnZhbHVlKTsKKwkJCQlrbWVtX2ZyZWUoYXJncy52YWx1ZSwgdmFsdWVsZW4pOwogCQkJfQorCQkJZWxzZSB7CisJCQkJcmV0dmFsID0gY29udGV4dC0+cHV0X2xpc3RlbnQoY29udGV4dCwKKwkJCQkJCW5hbWVzcCwKKwkJCQkJCShjaGFyICopbmFtZV9ybXQtPm5hbWUsCisJCQkJCQkoaW50KW5hbWVfcm10LT5uYW1lbGVuLAorCQkJCQkJdmFsdWVsZW4sCisJCQkJCQlOVUxMKTsKKwkJCX0KKwkJCWlmIChyZXR2YWwpCisJCQkJcmV0dXJuIHJldHZhbDsKIAkJfQotCQlpZiAocmV0dmFsID09IDApIHsKLQkJCWN1cnNvci0+b2Zmc2V0Kys7Ci0JCX0KKwkJaWYgKGNvbnRleHQtPnNlZW5fZW5vdWdoKQorCQkJYnJlYWs7CisJCWN1cnNvci0+b2Zmc2V0Kys7CiAJfQogCXhmc19hdHRyX3RyYWNlX2xfY2woImJsayBlbmQiLCBjb250ZXh0LCBsZWFmKTsKIAlyZXR1cm4ocmV0dmFsKTsKIH0KIAotI2RlZmluZQlBVFRSX0VOVEJBU0VTSVpFCQkvKiBtaW5pbXVtIGJ5dGVzIHVzZWQgYnkgYW4gYXR0ciAqLyBcCi0JKCgoc3RydWN0IGF0dHJsaXN0X2VudCAqKSAwKS0+YV9uYW1lIC0gKGNoYXIgKikgMCkKLSNkZWZpbmUJQVRUUl9FTlRTSVpFKG5hbWVsZW4pCQkvKiBhY3R1YWwgYnl0ZXMgdXNlZCBieSBhbiBhdHRyICovIFwKLQkoKEFUVFJfRU5UQkFTRVNJWkUgKyAobmFtZWxlbikgKyAxICsgc2l6ZW9mKHVfaW50MzJfdCktMSkgXAotCSAmIH4oc2l6ZW9mKHVfaW50MzJfdCktMSkpCi0KLS8qCi0gKiBGb3JtYXQgYW4gYXR0cmlidXRlIGFuZCBjb3B5IGl0IG91dCB0byB0aGUgdXNlcidzIGJ1ZmZlci4KLSAqIFRha2UgY2FyZSB0byBjaGVjayB2YWx1ZXMgYW5kIHByb3RlY3QgYWdhaW5zdCB0aGVtIGNoYW5naW5nIGxhdGVyLAotICogd2UgbWF5IGJlIHJlYWRpbmcgdGhlbSBkaXJlY3RseSBvdXQgb2YgYSB1c2VyIGJ1ZmZlci4KLSAqLwotLypBUkdTVVNFRCovCi1TVEFUSUMgaW50Ci14ZnNfYXR0cl9wdXRfbGlzdGVudCh4ZnNfYXR0cl9saXN0X2NvbnRleHRfdCAqY29udGV4dCwKLQkJICAgICBhdHRybmFtZXNfdCAqbmFtZXNwLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgaW50IHZhbHVlbGVuKQotewotCWF0dHJsaXN0X2VudF90ICphZXA7Ci0JaW50IGFycmF5dG9wOwotCi0JQVNTRVJUKCEoY29udGV4dC0+ZmxhZ3MgJiBBVFRSX0tFUk5PVkFMKSk7Ci0JaWYgKGNvbnRleHQtPmZsYWdzICYgQVRUUl9LRVJOQU1FTFMpIHsKLQkJY2hhciAqb2Zmc2V0OwotCi0JCUFTU0VSVChjb250ZXh0LT5jb3VudCA+PSAwKTsKLQotCQlhcnJheXRvcCA9IGNvbnRleHQtPmNvdW50ICsgbmFtZXNwLT5hdHRyX25hbWVsZW4gKyBuYW1lbGVuICsgMTsKLQkJaWYgKGFycmF5dG9wID4gY29udGV4dC0+Zmlyc3R1KSB7Ci0JCQljb250ZXh0LT5jb3VudCA9IC0xOwkvKiBpbnN1ZmZpY2llbnQgc3BhY2UgKi8KLQkJCXJldHVybigxKTsKLQkJfQotCQlvZmZzZXQgPSAoY2hhciAqKWNvbnRleHQtPmFsaXN0ICsgY29udGV4dC0+Y291bnQ7Ci0JCXN0cm5jcHkob2Zmc2V0LCBuYW1lc3AtPmF0dHJfbmFtZSwgbmFtZXNwLT5hdHRyX25hbWVsZW4pOwotCQlvZmZzZXQgKz0gbmFtZXNwLT5hdHRyX25hbWVsZW47Ci0JCXN0cm5jcHkob2Zmc2V0LCBuYW1lLCBuYW1lbGVuKTsJCQkvKiByZWFsIG5hbWUgKi8KLQkJb2Zmc2V0ICs9IG5hbWVsZW47Ci0JCSpvZmZzZXQgPSAnXDAnOwotCQljb250ZXh0LT5jb3VudCArPSBuYW1lc3AtPmF0dHJfbmFtZWxlbiArIG5hbWVsZW4gKyAxOwotCQlyZXR1cm4oMCk7Ci0JfQotCi0JQVNTRVJUKGNvbnRleHQtPmNvdW50ID49IDApOwotCUFTU0VSVChjb250ZXh0LT5jb3VudCA8IChBVFRSX01BWF9WQUxVRUxFTi84KSk7Ci0JQVNTRVJUKGNvbnRleHQtPmZpcnN0dSA+PSBzaXplb2YoKmNvbnRleHQtPmFsaXN0KSk7Ci0JQVNTRVJUKGNvbnRleHQtPmZpcnN0dSA8PSBjb250ZXh0LT5idWZzaXplKTsKLQotCWFycmF5dG9wID0gc2l6ZW9mKCpjb250ZXh0LT5hbGlzdCkgKwotCQkJY29udGV4dC0+Y291bnQgKiBzaXplb2YoY29udGV4dC0+YWxpc3QtPmFsX29mZnNldFswXSk7Ci0JY29udGV4dC0+Zmlyc3R1IC09IEFUVFJfRU5UU0laRShuYW1lbGVuKTsKLQlpZiAoY29udGV4dC0+Zmlyc3R1IDwgYXJyYXl0b3ApIHsKLQkJeGZzX2F0dHJfdHJhY2VfbF9jKCJidWZmZXIgZnVsbCIsIGNvbnRleHQpOwotCQljb250ZXh0LT5hbGlzdC0+YWxfbW9yZSA9IDE7Ci0JCXJldHVybigxKTsKLQl9Ci0KLQlhZXAgPSAoYXR0cmxpc3RfZW50X3QgKikmKCgoY2hhciAqKWNvbnRleHQtPmFsaXN0KVsgY29udGV4dC0+Zmlyc3R1IF0pOwotCWFlcC0+YV92YWx1ZWxlbiA9IHZhbHVlbGVuOwotCW1lbWNweShhZXAtPmFfbmFtZSwgbmFtZSwgbmFtZWxlbik7Ci0JYWVwLT5hX25hbWVbIG5hbWVsZW4gXSA9IDA7Ci0JY29udGV4dC0+YWxpc3QtPmFsX29mZnNldFsgY29udGV4dC0+Y291bnQrKyBdID0gY29udGV4dC0+Zmlyc3R1OwotCWNvbnRleHQtPmFsaXN0LT5hbF9jb3VudCA9IGNvbnRleHQtPmNvdW50OwotCXhmc19hdHRyX3RyYWNlX2xfYygiYWRkIiwgY29udGV4dCk7Ci0JcmV0dXJuKDApOwotfQogCiAvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogTWFuYWdlIHRoZSBJTkNPTVBMRVRFIGZsYWcgaW4gYSBsZWFmIGVudHJ5CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5oIGIvZnMveGZzL3hmc19hdHRyX2xlYWYuaAppbmRleCA1MWMzZWUxLi4wNDBmNzMyIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2F0dHJfbGVhZi5oCisrKyBiL2ZzL3hmcy94ZnNfYXR0cl9sZWFmLmgKQEAgLTEzMCw2ICsxMzAsMTkgQEAKICNkZWZpbmUgWEZTX0FUVFJfSU5DT01QTEVURQkoMSA8PCBYRlNfQVRUUl9JTkNPTVBMRVRFX0JJVCkKIAogLyoKKyAqIENvbnZlcnNpb24gbWFjcm9zIGZvciBjb252ZXJ0aW5nIG5hbWVzcGFjZSBiaXRzIGZyb20gYXJndW1lbnQgZmxhZ3MKKyAqIHRvIG9uZGlzayBmbGFncy4KKyAqLworI2RlZmluZSBYRlNfQVRUUl9OU1BfQVJHU19NQVNLCQkoQVRUUl9ST09UIHwgQVRUUl9TRUNVUkUpCisjZGVmaW5lIFhGU19BVFRSX05TUF9PTkRJU0tfTUFTSwkoWEZTX0FUVFJfUk9PVCB8IFhGU19BVFRSX1NFQ1VSRSkKKyNkZWZpbmUgWEZTX0FUVFJfTlNQX09ORElTSyhmbGFncykJKChmbGFncykgJiBYRlNfQVRUUl9OU1BfT05ESVNLX01BU0spCisjZGVmaW5lIFhGU19BVFRSX05TUF9BUkdTKGZsYWdzKQkoKGZsYWdzKSAmIFhGU19BVFRSX05TUF9BUkdTX01BU0spCisjZGVmaW5lIFhGU19BVFRSX05TUF9BUkdTX1RPX09ORElTSyh4KQkoKCh4KSAmIEFUVFJfUk9PVCA/IFhGU19BVFRSX1JPT1QgOiAwKSB8XAorCQkJCQkgKCh4KSAmIEFUVFJfU0VDVVJFID8gWEZTX0FUVFJfU0VDVVJFIDogMCkpCisjZGVmaW5lIFhGU19BVFRSX05TUF9PTkRJU0tfVE9fQVJHUyh4KQkoKCh4KSAmIFhGU19BVFRSX1JPT1QgPyBBVFRSX1JPT1QgOiAwKSB8XAorCQkJCQkgKCh4KSAmIFhGU19BVFRSX1NFQ1VSRSA/IEFUVFJfU0VDVVJFIDogMCkpCisKKy8qCiAgKiBBbGlnbm1lbnQgZm9yIG5hbWVsaXN0IGFuZCB2YWx1ZWxpc3QgZW50cmllcyAoc2luY2UgdGhleSBhcmUgbWl4ZWQKICAqIHRoZXJlIGNhbiBiZSBvbmx5IG9uZSBhbGlnbm1lbnQgdmFsdWUpCiAgKi8KQEAgLTE5NiwxNiArMjA5LDI2IEBACiAgKiBTdHJ1Y3R1cmUgdXNlZCB0byBwYXNzIGNvbnRleHQgYXJvdW5kIGFtb25nIHRoZSByb3V0aW5lcy4KICAqPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KIAorCitzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0OworCit0eXBlZGVmIGludCAoKnB1dF9saXN0ZW50X2Z1bmNfdCkoc3RydWN0IHhmc19hdHRyX2xpc3RfY29udGV4dCAqLCBzdHJ1Y3QgYXR0cm5hbWVzICosCisJCQkJICAgICAgY2hhciAqLCBpbnQsIGludCwgY2hhciAqKTsKKwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2F0dHJfbGlzdF9jb250ZXh0IHsKLQlzdHJ1Y3QgeGZzX2lub2RlCQkqZHA7CS8qIGlub2RlICovCi0Jc3RydWN0IGF0dHJsaXN0X2N1cnNvcl9rZXJuCSpjdXJzb3I7LyogcG9zaXRpb24gaW4gbGlzdCAqLwotCXN0cnVjdCBhdHRybGlzdAkJCSphbGlzdDsJLyogb3V0cHV0IGJ1ZmZlciAqLwotCWludAkJCQljb3VudDsJLyogbnVtIHVzZWQgZW50cmllcyAqLwotCWludAkJCQlkdXBjbnQ7CS8qIGNvdW50IGR1cCBoYXNodmFscyBzZWVuICovCi0JaW50CQkJCWJ1ZnNpemU7LyogdG90YWwgYnVmZmVyIHNpemUgKi8KLQlpbnQJCQkJZmlyc3R1OwkvKiBmaXJzdCB1c2VkIGJ5dGUgaW4gYnVmZmVyICovCi0JaW50CQkJCWZsYWdzOwkvKiBmcm9tIFZPUCBjYWxsICovCi0JaW50CQkJCXJlc3luY2g7LyogVC9GOiByZXN5bmNoIHdpdGggY3Vyc29yICovCisJc3RydWN0IHhmc19pbm9kZQkJKmRwOwkJLyogaW5vZGUgKi8KKwlzdHJ1Y3QgYXR0cmxpc3RfY3Vyc29yX2tlcm4JKmN1cnNvcjsJLyogcG9zaXRpb24gaW4gbGlzdCAqLworCXN0cnVjdCBhdHRybGlzdAkJCSphbGlzdDsJCS8qIG91dHB1dCBidWZmZXIgKi8KKwlpbnQJCQkJc2Vlbl9lbm91Z2g7CS8qIFQvRjogc2VlbiBlbm91Z2ggb2YgbGlzdD8gKi8KKwlpbnQJCQkJY291bnQ7CQkvKiBudW0gdXNlZCBlbnRyaWVzICovCisJaW50CQkJCWR1cGNudDsJCS8qIGNvdW50IGR1cCBoYXNodmFscyBzZWVuICovCisJaW50CQkJCWJ1ZnNpemU7CS8qIHRvdGFsIGJ1ZmZlciBzaXplICovCisJaW50CQkJCWZpcnN0dTsJCS8qIGZpcnN0IHVzZWQgYnl0ZSBpbiBidWZmZXIgKi8KKwlpbnQJCQkJZmxhZ3M7CQkvKiBmcm9tIFZPUCBjYWxsICovCisJaW50CQkJCXJlc3luY2g7CS8qIFQvRjogcmVzeW5jaCB3aXRoIGN1cnNvciAqLworCWludAkJCQlwdXRfdmFsdWU7CS8qIFQvRjogbmVlZCB2YWx1ZSBmb3IgbGlzdGVudCAqLworCXB1dF9saXN0ZW50X2Z1bmNfdAkJcHV0X2xpc3RlbnQ7CS8qIGxpc3Qgb3V0cHV0IGZtdCBmdW5jdGlvbiAqLworCWludAkJCQlpbmRleDsJCS8qIGluZGV4IGludG8gb3V0cHV0IGJ1ZmZlciAqLwogfSB4ZnNfYXR0cl9saXN0X2NvbnRleHRfdDsKIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYmVoYXZpb3IuYyBiL2ZzL3hmcy94ZnNfYmVoYXZpb3IuYwppbmRleCBmNGZlMzcxLi4wZGMxNzIxIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JlaGF2aW9yLmMKKysrIGIvZnMveGZzL3hmc19iZWhhdmlvci5jCkBAIC0xMTAsMjYgKzExMCw2IEBACiB9CiAKIC8qCi0gKiBMb29rIGZvciBhIHNwZWNpZmljIG9wcyB2ZWN0b3Igb24gdGhlIHNwZWNpZmllZCBiZWhhdmlvciBjaGFpbi4KLSAqIFJldHVybiB0aGUgYXNzb2NpYXRlZCBiZWhhdmlvciBkZXNjcmlwdG9yLiAgT3IgTlVMTCwgaWYgbm90IGZvdW5kLgotICovCi1iaHZfZGVzY190ICoKLWJodl9sb29rdXAoYmh2X2hlYWRfdCAqYmhwLCB2b2lkICpvcHMpCi17Ci0JYmh2X2Rlc2NfdAkqY3VyZGVzYzsKLQotCWZvciAoY3VyZGVzYyA9IGJocC0+YmhfZmlyc3Q7Ci0JICAgICBjdXJkZXNjICE9IE5VTEw7Ci0JICAgICBjdXJkZXNjID0gY3VyZGVzYy0+YmRfbmV4dCkgewotCi0JCWlmIChjdXJkZXNjLT5iZF9vcHMgPT0gb3BzKQotCQkJcmV0dXJuIGN1cmRlc2M7Ci0JfQotCi0JcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCiAgKiBMb29rcyBmb3IgdGhlIGZpcnN0IGJlaGF2aW9yIHdpdGhpbiBhIHNwZWNpZmllZCByYW5nZSBvZiBwb3NpdGlvbnMuCiAgKiBSZXR1cm4gdGhlIGFzc29jaWF0ZWQgYmVoYXZpb3IgZGVzY3JpcHRvci4gIE9yIE5VTEwsIGlmIG5vbmUgZm91bmQuCiAgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYmVoYXZpb3IuaCBiL2ZzL3hmcy94ZnNfYmVoYXZpb3IuaAppbmRleCA2ZTZlNTZmLi5lN2NhMWZlIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JlaGF2aW9yLmgKKysrIGIvZnMveGZzL3hmc19iZWhhdmlvci5oCkBAIC0xNzYsMTIgKzE3NiwxMCBAQAogICogQmVoYXZpb3IgbW9kdWxlIHByb3RvdHlwZXMuCiAgKi8KIGV4dGVybiB2b2lkCQliaHZfcmVtb3ZlX25vdF9maXJzdChiaHZfaGVhZF90ICpiaHAsIGJodl9kZXNjX3QgKmJkcCk7Ci1leHRlcm4gYmh2X2Rlc2NfdCAqCWJodl9sb29rdXAoYmh2X2hlYWRfdCAqYmhwLCB2b2lkICpvcHMpOwogZXh0ZXJuIGJodl9kZXNjX3QgKgliaHZfbG9va3VwX3JhbmdlKGJodl9oZWFkX3QgKmJocCwgaW50IGxvdywgaW50IGhpZ2gpOwogZXh0ZXJuIGJodl9kZXNjX3QgKgliaHZfYmFzZShiaHZfaGVhZF90ICpiaHApOwogCiAvKiBObyBiaHYgbG9ja2luZyBvbiBMaW51eCAqLwotI2RlZmluZSBiaHZfbG9va3VwX3VubG9ja2VkCWJodl9sb29rdXAKICNkZWZpbmUgYmh2X2Jhc2VfdW5sb2NrZWQJYmh2X2Jhc2UKIAogI2VuZGlmIC8qIF9fWEZTX0JFSEFWSU9SX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19ibWFwLmMgYi9mcy94ZnMveGZzX2JtYXAuYwppbmRleCBiZjQ2ZmFlLi41YjA1MGMwIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2JtYXAuYworKysgYi9mcy94ZnMveGZzX2JtYXAuYwpAQCAtMjk5OSw3ICsyOTk5LDcgQEAKIAlpbnQJCQllcnJvcjsJLyogZXJyb3IgcmV0dXJuIHZhbHVlICovCiAJeGZzX2lmb3JrX3QJCSppZnA7CS8qIGlub2RlIGZvcmsgZGF0YSAqLwogCXhmc19tb3VudF90CQkqbXA7CS8qIG1vdW50IHBvaW50IHN0cnVjdHVyZSAqLwotCXhmc19ibWJ0X3B0cl90CQkqcHA7CS8qIHB0ciB0byBibG9jayBhZGRyZXNzICovCisJX19iZTY0CQkJKnBwOwkvKiBwdHIgdG8gYmxvY2sgYWRkcmVzcyAqLwogCXhmc19ibWJ0X2Jsb2NrX3QJKnJibG9jazsvKiByb290IGJ0cmVlIGJsb2NrICovCiAKIAlpZnAgPSBYRlNfSUZPUktfUFRSKGlwLCB3aGljaGZvcmspOwpAQCAtMzAxMSwxMiArMzAxMSwxMiBAQAogCUFTU0VSVChYRlNfQk1BUF9CUk9PVF9NQVhSRUNTKGlmcC0+aWZfYnJvb3RfYnl0ZXMpID09IDEpOwogCW1wID0gaXAtPmlfbW91bnQ7CiAJcHAgPSBYRlNfQk1BUF9CUk9PVF9QVFJfQUREUihyYmxvY2ssIDEsIGlmcC0+aWZfYnJvb3RfYnl0ZXMpOworCWNibm8gPSBiZTY0X3RvX2NwdSgqcHApOwogCSpsb2dmbGFnc3AgPSAwOwogI2lmZGVmIERFQlVHCi0JaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCksIDEpKSkKKwlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBjYm5vLCAxKSkpCiAJCXJldHVybiBlcnJvcjsKICNlbmRpZgotCWNibm8gPSBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKTsKIAlpZiAoKGVycm9yID0geGZzX2J0cmVlX3JlYWRfYnVmbChtcCwgdHAsIGNibm8sIDAsICZjYnAsCiAJCQlYRlNfQk1BUF9CVFJFRV9SRUYpKSkKIAkJcmV0dXJuIGVycm9yOwpAQCAtMzUxMiw5ICszNTEyLDkgQEAKIAkgKi8KIAlrcCA9IFhGU19CTUFQX0tFWV9JQUREUihibG9jaywgMSwgY3VyKTsKIAlhcnAgPSBYRlNfQk1BUF9SRUNfSUFERFIoYWJsb2NrLCAxLCBjdXIpOwotCUlOVF9TRVQoa3AtPmJyX3N0YXJ0b2ZmLCBBUkNIX0NPTlZFUlQsIHhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKGFycCkpOworCWtwLT5icl9zdGFydG9mZiA9IGNwdV90b19iZTY0KHhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKGFycCkpOwogCXBwID0gWEZTX0JNQVBfUFRSX0lBRERSKGJsb2NrLCAxLCBjdXIpOwotCUlOVF9TRVQoKnBwLCBBUkNIX0NPTlZFUlQsIGFyZ3MuZnNibm8pOworCSpwcCA9IGNwdV90b19iZTY0KGFyZ3MuZnNibm8pOwogCS8qCiAJICogRG8gYWxsIHRoaXMgbG9nZ2luZyBhdCB0aGUgZW5kIHNvIHRoYXQKIAkgKiB0aGUgcm9vdCBpcyBhdCB0aGUgcmlnaHQgbGV2ZWwuCkBAIC0zNzA1LDcgKzM3MDUsNyBAQAogeGZzX2JtYXBfc2VhcmNoX2V4dGVudHMoCiAJeGZzX2lub2RlX3QgICAgICppcCwgICAgICAgICAgICAvKiBpbmNvcmUgaW5vZGUgcG9pbnRlciAqLwogCXhmc19maWxlb2ZmX3QgICBibm8sICAgICAgICAgICAgLyogYmxvY2sgbnVtYmVyIHNlYXJjaGVkIGZvciAqLwotCWludCAgICAgICAgICAgICB3aGljaGZvcmssICAgICAgLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KKwlpbnQgICAgICAgICAgICAgZm9yaywgICAgICAJLyogZGF0YSBvciBhdHRyIGZvcmsgKi8KIAlpbnQgICAgICAgICAgICAgKmVvZnAsICAgICAgICAgIC8qIG91dDogZW5kIG9mIGZpbGUgZm91bmQgKi8KIAl4ZnNfZXh0bnVtX3QgICAgKmxhc3R4cCwgICAgICAgIC8qIG91dDogbGFzdCBleHRlbnQgaW5kZXggKi8KIAl4ZnNfYm1idF9pcmVjX3QgKmdvdHAsICAgICAgICAgIC8qIG91dDogZXh0ZW50IGVudHJ5IGZvdW5kICovCkBAIC0zNzEzLDI1ICszNzEzLDI4IEBACiB7CiAJeGZzX2lmb3JrX3QJKmlmcDsJCS8qIGlub2RlIGZvcmsgcG9pbnRlciAqLwogCXhmc19ibWJ0X3JlY190ICAqZXA7ICAgICAgICAgICAgLyogZXh0ZW50IHJlY29yZCBwb2ludGVyICovCi0JaW50CQlydDsJCS8qIHJlYWx0aW1lIGZsYWcgICAgKi8KIAogCVhGU19TVEFUU19JTkMoeHNfbG9va19leGxpc3QpOwotCWlmcCA9IFhGU19JRk9SS19QVFIoaXAsIHdoaWNoZm9yayk7CisJaWZwID0gWEZTX0lGT1JLX1BUUihpcCwgZm9yayk7CiAKIAllcCA9IHhmc19ibWFwX3NlYXJjaF9tdWx0aV9leHRlbnRzKGlmcCwgYm5vLCBlb2ZwLCBsYXN0eHAsIGdvdHAsIHByZXZwKTsKIAotCXJ0ID0gKHdoaWNoZm9yayA9PSBYRlNfREFUQV9GT1JLKSAmJiBYRlNfSVNfUkVBTFRJTUVfSU5PREUoaXApOwotCWlmICh1bmxpa2VseSghcnQgJiYgIWdvdHAtPmJyX3N0YXJ0YmxvY2sgJiYgKCpsYXN0eHAgIT0gTlVMTEVYVE5VTSkpKSB7Ci0gICAgICAgICAgICAgICAgY21uX2VycihDRV9QQU5JQywiQWNjZXNzIHRvIGJsb2NrIHplcm86IGZzOiA8JXM+IGlub2RlOiAlbGxkICIKLQkJCSJzdGFydF9ibG9jayA6ICVsbHggc3RhcnRfb2ZmIDogJWxseCBibGtjbnQgOiAlbGx4ICIKLQkJCSJleHRlbnQtc3RhdGUgOiAleCBcbiIsCi0JCQkoaXAtPmlfbW91bnQpLT5tX2ZzbmFtZSwgKGxvbmcgbG9uZylpcC0+aV9pbm8sCisJaWYgKHVubGlrZWx5KCEoZ290cC0+YnJfc3RhcnRibG9jaykgJiYgKCpsYXN0eHAgIT0gTlVMTEVYVE5VTSkgJiYKKwkJICAgICAhKFhGU19JU19SRUFMVElNRV9JTk9ERShpcCkgJiYgZm9yayA9PSBYRlNfREFUQV9GT1JLKSkpIHsKKwkJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfRlNCTE9DS19aRVJPLCBDRV9BTEVSVCwgaXAtPmlfbW91bnQsCisJCQkJIkFjY2VzcyB0byBibG9jayB6ZXJvIGluIGlub2RlICVsbHUgIgorCQkJCSJzdGFydF9ibG9jazogJWxseCBzdGFydF9vZmY6ICVsbHggIgorCQkJCSJibGtjbnQ6ICVsbHggZXh0ZW50LXN0YXRlOiAleCBsYXN0eDogJXhcbiIsCisJCQkodW5zaWduZWQgbG9uZyBsb25nKWlwLT5pX2lubywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ290cC0+YnJfc3RhcnRibG9jaywKIAkJCSh1bnNpZ25lZCBsb25nIGxvbmcpZ290cC0+YnJfc3RhcnRvZmYsCiAJCQkodW5zaWduZWQgbG9uZyBsb25nKWdvdHAtPmJyX2Jsb2NrY291bnQsCi0JCQlnb3RwLT5icl9zdGF0ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVwOworCQkJZ290cC0+YnJfc3RhdGUsICpsYXN0eHApOworCQkqbGFzdHhwID0gTlVMTEVYVE5VTTsKKwkJKmVvZnAgPSAxOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcmV0dXJuIGVwOwogfQogCiAKQEAgLTQ0OTQsNyArNDQ5Nyw3IEBACiAJeGZzX2lmb3JrX3QJCSppZnA7CS8qIGZvcmsgc3RydWN0dXJlICovCiAJaW50CQkJbGV2ZWw7CS8qIGJ0cmVlIGxldmVsLCBmb3IgY2hlY2tpbmcgKi8KIAl4ZnNfbW91bnRfdAkJKm1wOwkvKiBmaWxlIHN5c3RlbSBtb3VudCBzdHJ1Y3R1cmUgKi8KLQl4ZnNfYm1idF9wdHJfdAkJKnBwOwkvKiBwb2ludGVyIHRvIGJsb2NrIGFkZHJlc3MgKi8KKwlfX2JlNjQJCQkqcHA7CS8qIHBvaW50ZXIgdG8gYmxvY2sgYWRkcmVzcyAqLwogCS8qIFJFRkVSRU5DRUQgKi8KIAl4ZnNfZXh0bnVtX3QJCXJvb207CS8qIG51bWJlciBvZiBlbnRyaWVzIHRoZXJlJ3Mgcm9vbSBmb3IgKi8KIApAQCAtNDUxMCwxMCArNDUxMywxMCBAQAogCWxldmVsID0gYmUxNl90b19jcHUoYmxvY2stPmJiX2xldmVsKTsKIAlBU1NFUlQobGV2ZWwgPiAwKTsKIAlwcCA9IFhGU19CTUFQX0JST09UX1BUUl9BRERSKGJsb2NrLCAxLCBpZnAtPmlmX2Jyb290X2J5dGVzKTsKLQlBU1NFUlQoSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCkgIT0gTlVMTERGU0JOTyk7Ci0JQVNTRVJUKFhGU19GU0JfVE9fQUdOTyhtcCwgSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCkpIDwgbXAtPm1fc2Iuc2JfYWdjb3VudCk7Ci0JQVNTRVJUKFhGU19GU0JfVE9fQUdCTk8obXAsIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSA8IG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKLQlibm8gPSBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKTsKKwlibm8gPSBiZTY0X3RvX2NwdSgqcHApOworCUFTU0VSVChibm8gIT0gTlVMTERGU0JOTyk7CisJQVNTRVJUKFhGU19GU0JfVE9fQUdOTyhtcCwgYm5vKSA8IG1wLT5tX3NiLnNiX2FnY291bnQpOworCUFTU0VSVChYRlNfRlNCX1RPX0FHQk5PKG1wLCBibm8pIDwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOwogCS8qCiAJICogR28gZG93biB0aGUgdHJlZSB1bnRpbCBsZWFmIGxldmVsIGlzIHJlYWNoZWQsIGZvbGxvd2luZyB0aGUgZmlyc3QKIAkgKiBwb2ludGVyIChsZWZ0bW9zdCkgYXQgZWFjaCBsZXZlbC4KQEAgLTQ1MzAsMTAgKzQ1MzMsOCBAQAogCQkJYnJlYWs7CiAJCXBwID0gWEZTX0JUUkVFX1BUUl9BRERSKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgeGZzX2JtYnQsIGJsb2NrLAogCQkJMSwgbXAtPm1fYm1hcF9kbXhyWzFdKTsKLQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oCi0JCQlYRlNfRlNCX1NBTklUWV9DSEVDSyhtcCwgSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCkpLAotCQkJZXJyb3IwKTsKLQkJYm5vID0gSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCk7CisJCWJubyA9IGJlNjRfdG9fY3B1KCpwcCk7CisJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKFhGU19GU0JfU0FOSVRZX0NIRUNLKG1wLCBibm8pLCBlcnJvcjApOwogCQl4ZnNfdHJhbnNfYnJlbHNlKHRwLCBicCk7CiAJfQogCS8qCkBAIC02MTQxLDcgKzYxNDIsNyBAQAogCXNob3J0CQkJc3opCiB7CiAJaW50CQkJaSwgaiwgZG14cjsKLQl4ZnNfYm1idF9wdHJfdAkJKnBwLCAqdGhpc3BhOwkvKiBwb2ludGVyIHRvIGJsb2NrIGFkZHJlc3MgKi8KKwlfX2JlNjQJCQkqcHAsICp0aGlzcGE7CS8qIHBvaW50ZXIgdG8gYmxvY2sgYWRkcmVzcyAqLwogCXhmc19ibWJ0X2tleV90CQkqcHJldnAsICprZXlwOwogCiAJQVNTRVJUKGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9sZXZlbCkgPiAwKTsKQEAgLTYxNzksMTEgKzYxODAsMTAgQEAKIAkJCQl0aGlzcGEgPSBYRlNfQlRSRUVfUFRSX0FERFIobXAtPm1fc2Iuc2JfYmxvY2tzaXplLAogCQkJCQl4ZnNfYm1idCwgYmxvY2ssIGosIGRteHIpOwogCQkJfQotCQkJaWYgKElOVF9HRVQoKnRoaXNwYSwgQVJDSF9DT05WRVJUKSA9PQotCQkJICAgIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSB7CisJCQlpZiAoKnRoaXNwYSA9PSAqcHApIHsKIAkJCQljbW5fZXJyKENFX1dBUk4sICIlczogdGhpc3BhKCVkKSA9PSBwcCglZCkgJUxkIiwKIAkJCQkJX19GVU5DVElPTl9fLCBqLCBpLAotCQkJCQlJTlRfR0VUKCp0aGlzcGEsIEFSQ0hfQ09OVkVSVCkpOworCQkJCQkodW5zaWduZWQgbG9uZyBsb25nKWJlNjRfdG9fY3B1KCp0aGlzcGEpKTsKIAkJCQlwYW5pYygiJXM6IHB0cnMgYXJlIGVxdWFsIGluIG5vZGVcbiIsCiAJCQkJCV9fRlVOQ1RJT05fXyk7CiAJCQl9CkBAIC02MjEwLDcgKzYyMTAsNyBAQAogCXhmc19pZm9ya190CQkqaWZwOwkvKiBmb3JrIHN0cnVjdHVyZSAqLwogCWludAkJCWxldmVsOwkvKiBidHJlZSBsZXZlbCwgZm9yIGNoZWNraW5nICovCiAJeGZzX21vdW50X3QJCSptcDsJLyogZmlsZSBzeXN0ZW0gbW91bnQgc3RydWN0dXJlICovCi0JeGZzX2JtYnRfcHRyX3QJCSpwcDsJLyogcG9pbnRlciB0byBibG9jayBhZGRyZXNzICovCisJX19iZTY0CQkJKnBwOwkvKiBwb2ludGVyIHRvIGJsb2NrIGFkZHJlc3MgKi8KIAl4ZnNfYm1idF9yZWNfdAkJKmVwOwkvKiBwb2ludGVyIHRvIGN1cnJlbnQgZXh0ZW50ICovCiAJeGZzX2JtYnRfcmVjX3QJCSpsYXN0cDsgLyogcG9pbnRlciB0byBwcmV2aW91cyBleHRlbnQgKi8KIAl4ZnNfYm1idF9yZWNfdAkJKm5leHRwOwkvKiBwb2ludGVyIHRvIG5leHQgZXh0ZW50ICovCkBAIC02MjMxLDEwICs2MjMxLDEyIEBACiAJQVNTRVJUKGxldmVsID4gMCk7CiAJeGZzX2NoZWNrX2Jsb2NrKGJsb2NrLCBtcCwgMSwgaWZwLT5pZl9icm9vdF9ieXRlcyk7CiAJcHAgPSBYRlNfQk1BUF9CUk9PVF9QVFJfQUREUihibG9jaywgMSwgaWZwLT5pZl9icm9vdF9ieXRlcyk7Ci0JQVNTRVJUKElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpICE9IE5VTExERlNCTk8pOwotCUFTU0VSVChYRlNfRlNCX1RPX0FHTk8obXAsIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSA8IG1wLT5tX3NiLnNiX2FnY291bnQpOwotCUFTU0VSVChYRlNfRlNCX1RPX0FHQk5PKG1wLCBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKSkgPCBtcC0+bV9zYi5zYl9hZ2Jsb2Nrcyk7Ci0JYm5vID0gSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCk7CisJYm5vID0gYmU2NF90b19jcHUoKnBwKTsKKworCUFTU0VSVChibm8gIT0gTlVMTERGU0JOTyk7CisJQVNTRVJUKFhGU19GU0JfVE9fQUdOTyhtcCwgYm5vKSA8IG1wLT5tX3NiLnNiX2FnY291bnQpOworCUFTU0VSVChYRlNfRlNCX1RPX0FHQk5PKG1wLCBibm8pIDwgbXAtPm1fc2Iuc2JfYWdibG9ja3MpOworCiAJLyoKIAkgKiBHbyBkb3duIHRoZSB0cmVlIHVudGlsIGxlYWYgbGV2ZWwgaXMgcmVhY2hlZCwgZm9sbG93aW5nIHRoZSBmaXJzdAogCSAqIHBvaW50ZXIgKGxlZnRtb3N0KSBhdCBlYWNoIGxldmVsLgpAQCAtNjI2NSw4ICs2MjY3LDggQEAKIAkJeGZzX2NoZWNrX2Jsb2NrKGJsb2NrLCBtcCwgMCwgMCk7CiAJCXBwID0gWEZTX0JUUkVFX1BUUl9BRERSKG1wLT5tX3NiLnNiX2Jsb2Nrc2l6ZSwgeGZzX2JtYnQsIGJsb2NrLAogCQkJMSwgbXAtPm1fYm1hcF9kbXhyWzFdKTsKLQkJWEZTX1dBTlRfQ09SUlVQVEVEX0dPVE8oWEZTX0ZTQl9TQU5JVFlfQ0hFQ0sobXAsIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSwgZXJyb3IwKTsKLQkJYm5vID0gSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCk7CisJCWJubyA9IGJlNjRfdG9fY3B1KCpwcCk7CisJCVhGU19XQU5UX0NPUlJVUFRFRF9HT1RPKFhGU19GU0JfU0FOSVRZX0NIRUNLKG1wLCBibm8pLCBlcnJvcjApOwogCQlpZiAoYnBfcmVsZWFzZSkgewogCQkJYnBfcmVsZWFzZSA9IDA7CiAJCQl4ZnNfdHJhbnNfYnJlbHNlKE5VTEwsIGJwKTsKQEAgLTYzNzIsNyArNjM3NCw3IEBACiAJeGZzX2lmb3JrX3QJCSppZnA7CS8qIGZvcmsgc3RydWN0dXJlICovCiAJaW50CQkJbGV2ZWw7CS8qIGJ0cmVlIGxldmVsLCBmb3IgY2hlY2tpbmcgKi8KIAl4ZnNfbW91bnRfdAkJKm1wOwkvKiBmaWxlIHN5c3RlbSBtb3VudCBzdHJ1Y3R1cmUgKi8KLQl4ZnNfYm1idF9wdHJfdAkJKnBwOwkvKiBwb2ludGVyIHRvIGJsb2NrIGFkZHJlc3MgKi8KKwlfX2JlNjQJCQkqcHA7CS8qIHBvaW50ZXIgdG8gYmxvY2sgYWRkcmVzcyAqLwogCiAJYm5vID0gTlVMTEZTQkxPQ0s7CiAJbXAgPSBpcC0+aV9tb3VudDsKQEAgLTYzOTUsMTAgKzYzOTcsMTAgQEAKIAlsZXZlbCA9IGJlMTZfdG9fY3B1KGJsb2NrLT5iYl9sZXZlbCk7CiAJQVNTRVJUKGxldmVsID4gMCk7CiAJcHAgPSBYRlNfQk1BUF9CUk9PVF9QVFJfQUREUihibG9jaywgMSwgaWZwLT5pZl9icm9vdF9ieXRlcyk7Ci0JQVNTRVJUKElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpICE9IE5VTExERlNCTk8pOwotCUFTU0VSVChYRlNfRlNCX1RPX0FHTk8obXAsIElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpKSA8IG1wLT5tX3NiLnNiX2FnY291bnQpOwotCUFTU0VSVChYRlNfRlNCX1RPX0FHQk5PKG1wLCBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKSkgPCBtcC0+bV9zYi5zYl9hZ2Jsb2Nrcyk7Ci0JYm5vID0gSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCk7CisJYm5vID0gYmU2NF90b19jcHUoKnBwKTsKKwlBU1NFUlQoYm5vICE9IE5VTExERlNCTk8pOworCUFTU0VSVChYRlNfRlNCX1RPX0FHTk8obXAsIGJubykgPCBtcC0+bV9zYi5zYl9hZ2NvdW50KTsKKwlBU1NFUlQoWEZTX0ZTQl9UT19BR0JOTyhtcCwgYm5vKSA8IG1wLT5tX3NiLnNiX2FnYmxvY2tzKTsKIAogCWlmICh1bmxpa2VseSh4ZnNfYm1hcF9jb3VudF90cmVlKG1wLCB0cCwgaWZwLCBibm8sIGxldmVsLCBjb3VudCkgPCAwKSkgewogCQlYRlNfRVJST1JfUkVQT1JUKCJ4ZnNfYm1hcF9jb3VudF9ibG9ja3MoMikiLCBYRlNfRVJSTEVWRUxfTE9XLApAQCAtNjQyNSw3ICs2NDI3LDcgQEAKIAlpbnQJCQllcnJvcjsKIAl4ZnNfYnVmX3QJCSpicCwgKm5icDsKIAlpbnQJCQlsZXZlbCA9IGxldmVsaW47Ci0JeGZzX2JtYnRfcHRyX3QgICAgICAgICAgKnBwOworCV9fYmU2NAkJCSpwcDsKIAl4ZnNfZnNibG9ja190ICAgICAgICAgICBibm8gPSBibG9ja25vOwogCXhmc19mc2Jsb2NrX3QJCW5leHRibm87CiAJeGZzX2JtYnRfYmxvY2tfdCAgICAgICAgKmJsb2NrLCAqbmV4dGJsb2NrOwpAQCAtNjQ1Miw3ICs2NDU0LDcgQEAKIAkJLyogRGl2ZSB0byB0aGUgbmV4dCBsZXZlbCAqLwogCQlwcCA9IFhGU19CVFJFRV9QVFJfQUREUihtcC0+bV9zYi5zYl9ibG9ja3NpemUsCiAJCQl4ZnNfYm1idCwgYmxvY2ssIDEsIG1wLT5tX2JtYXBfZG14clsxXSk7Ci0JCWJubyA9IElOVF9HRVQoKnBwLCBBUkNIX0NPTlZFUlQpOworCQlibm8gPSBiZTY0X3RvX2NwdSgqcHApOwogCQlpZiAodW5saWtlbHkoKGVycm9yID0KIAkJICAgICB4ZnNfYm1hcF9jb3VudF90cmVlKG1wLCB0cCwgaWZwLCBibm8sIGxldmVsLCBjb3VudCkpIDwgMCkpIHsKIAkJCXhmc190cmFuc19icmVsc2UodHAsIGJwKTsKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5jIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKaW5kZXggMThmYjczOC4uYTdiODM1YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKKysrIGIvZnMveGZzL3hmc19ibWFwX2J0cmVlLmMKQEAgLTU4LDcgKzU4LDcgQEAKIFNUQVRJQyBpbnQgeGZzX2JtYnRfbHNoaWZ0KHhmc19idHJlZV9jdXJfdCAqLCBpbnQsIGludCAqKTsKIFNUQVRJQyBpbnQgeGZzX2JtYnRfcnNoaWZ0KHhmc19idHJlZV9jdXJfdCAqLCBpbnQsIGludCAqKTsKIFNUQVRJQyBpbnQgeGZzX2JtYnRfc3BsaXQoeGZzX2J0cmVlX2N1cl90ICosIGludCwgeGZzX2ZzYmxvY2tfdCAqLAotCQl4ZnNfYm1idF9rZXlfdCAqLCB4ZnNfYnRyZWVfY3VyX3QgKiosIGludCAqKTsKKwkJX191aW50NjRfdCAqLCB4ZnNfYnRyZWVfY3VyX3QgKiosIGludCAqKTsKIFNUQVRJQyBpbnQgeGZzX2JtYnRfdXBka2V5KHhmc19idHJlZV9jdXJfdCAqLCB4ZnNfYm1idF9rZXlfdCAqLCBpbnQpOwogCiAKQEAgLTE5MiwxNiArMTkyLDExIEBACiAJeGZzX2J0cmVlX2N1cl90CQkqY3VyLAogCWludAkJCWksCiAJeGZzX2ZzYmxvY2tfdAkJZiwKLQl4ZnNfYm1idF9rZXlfdAkJKmssCisJeGZzX2RmaWxvZmZfdAkJbywKIAlpbnQJCQlsaW5lKQogewotCXhmc19kZnNibm9fdAkJZDsKLQl4ZnNfZGZpbG9mZl90CQlvOwotCi0JZCA9ICh4ZnNfZGZzYm5vX3QpZjsKLQlvID0gSU5UX0dFVChrLT5icl9zdGFydG9mZiwgQVJDSF9DT05WRVJUKTsKIAl4ZnNfYm1idF90cmFjZV9lbnRlcihmdW5jLCBjdXIsIEFSR1MsIFhGU19CTUJUX0tUUkFDRV9BUkdJRkssIGxpbmUsCi0JCWksIGQgPj4gMzIsIChpbnQpZCwgbyA+PiAzMiwKKwkJaSwgKHhmc19kZnNibm9fdClmID4+IDMyLCAoaW50KWYsIG8gPj4gMzIsCiAJCShpbnQpbywgMCwgMCwgMCwKIAkJMCwgMCwgMCk7CiB9CkBAIC0yNDgsNyArMjQzLDcgQEAKIHsKIAl4ZnNfZGZpbG9mZl90CQlvOwogCi0JbyA9IElOVF9HRVQoay0+YnJfc3RhcnRvZmYsIEFSQ0hfQ09OVkVSVCk7CisJbyA9IGJlNjRfdG9fY3B1KGstPmJyX3N0YXJ0b2ZmKTsKIAl4ZnNfYm1idF90cmFjZV9lbnRlcihmdW5jLCBjdXIsIEFSR1MsIFhGU19CTUJUX0tUUkFDRV9BUkdJRkssIGxpbmUsCiAJCWksIG8gPj4gMzIsIChpbnQpbywgMCwKIAkJMCwgMCwgMCwgMCwKQEAgLTI4Niw4ICsyODEsOCBAQAogCXhmc19ibWJ0X3RyYWNlX2FyZ2ZmZmkoZm5hbWUsIGMsIG8sIGIsIGksIGosIF9fTElORV9fKQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdJKGMsaSkJXAogCXhmc19ibWJ0X3RyYWNlX2FyZ2koZm5hbWUsIGMsIGksIF9fTElORV9fKQotI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdJRksoYyxpLGYsaykJXAotCXhmc19ibWJ0X3RyYWNlX2FyZ2lmayhmbmFtZSwgYywgaSwgZiwgaywgX19MSU5FX18pCisjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0lGSyhjLGksZixzKQlcCisJeGZzX2JtYnRfdHJhY2VfYXJnaWZrKGZuYW1lLCBjLCBpLCBmLCBzLCBfX0xJTkVfXykKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHSUZSKGMsaSxmLHIpCVwKIAl4ZnNfYm1idF90cmFjZV9hcmdpZnIoZm5hbWUsIGMsIGksIGYsIHIsIF9fTElORV9fKQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdJSyhjLGksaykJXApAQCAtMjk5LDcgKzI5NCw3IEBACiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0JJSShjLGIsaSxqKQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdGRkZJKGMsbyxiLGksaikKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHSShjLGkpCi0jZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0lGSyhjLGksZixrKQorI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9BUkdJRksoYyxpLGYscykKICNkZWZpbmUJWEZTX0JNQlRfVFJBQ0VfQVJHSUZSKGMsaSxmLHIpCiAjZGVmaW5lCVhGU19CTUJUX1RSQUNFX0FSR0lLKGMsaSxrKQogI2RlZmluZQlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoYyxzKQpAQCAtMzU3LDcgKzM1Miw3IEBACiAJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRU5UUlkpOwogCVhGU19CTUJUX1RSQUNFX0FSR0koY3VyLCBsZXZlbCk7CiAJcHRyID0gY3VyLT5iY19wdHJzW2xldmVsXTsKLQl0Y3VyID0gKHhmc19idHJlZV9jdXJfdCAqKTA7CisJdGN1ciA9IE5VTEw7CiAJaWYgKHB0ciA9PSAwKSB7CiAJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVYSVQpOwogCQkqc3RhdCA9IDA7CkBAIC0zODIsNyArMzc3LDcgQEAKIAkJcHAgPSBYRlNfQk1BUF9QVFJfSUFERFIoYmxvY2ssIDEsIGN1cik7CiAjaWZkZWYgREVCVUcKIAkJZm9yIChpID0gcHRyOyBpIDwgbnVtcmVjczsgaSsrKSB7Ci0JCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBJTlRfR0VUKHBwW2ldLCBBUkNIX0NPTlZFUlQpLCBsZXZlbCkpKSB7CisJCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHJfZGlzayhjdXIsIHBwW2ldLCBsZXZlbCkpKSB7CiAJCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRVJST1IpOwogCQkJCWdvdG8gZXJyb3IwOwogCQkJfQpAQCAtNDA0LDcgKzM5OSw4IEBACiAJCQl4ZnNfYm1idF9sb2dfcmVjcyhjdXIsIGJwLCBwdHIsIG51bXJlY3MgLSAxKTsKIAkJfQogCQlpZiAocHRyID09IDEpIHsKLQkJCUlOVF9TRVQoa2V5LmJyX3N0YXJ0b2ZmLCBBUkNIX0NPTlZFUlQsIHhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKHJwKSk7CisJCQlrZXkuYnJfc3RhcnRvZmYgPQorCQkJCWNwdV90b19iZTY0KHhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKHJwKSk7CiAJCQlrcCA9ICZrZXk7CiAJCX0KIAl9CkBAIC02MjEsNyArNjE3LDcgQEAKIAkJcnBwID0gWEZTX0JNQVBfUFRSX0lBRERSKHJpZ2h0LCAxLCBjdXIpOwogI2lmZGVmIERFQlVHCiAJCWZvciAoaSA9IDA7IGkgPCBudW1ycmVjczsgaSsrKSB7Ci0JCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBJTlRfR0VUKHJwcFtpXSwgQVJDSF9DT05WRVJUKSwgbGV2ZWwpKSkgeworCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyX2Rpc2soY3VyLCBycHBbaV0sIGxldmVsKSkpIHsKIAkJCQlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFUlJPUik7CiAJCQkJZ290byBlcnJvcjA7CiAJCQl9CkBAIC03NDgsNyArNzQ0LDcgQEAKIAlpbnQJCQlsb2dmbGFnczsJLyogaW5vZGUgbG9nZ2luZyBmbGFncyAqLwogCXhmc19mc2Jsb2NrX3QJCW5ibm87CQkvKiBuZXcgYmxvY2sgbnVtYmVyICovCiAJc3RydWN0IHhmc19idHJlZV9jdXIJKm5jdXI7CQkvKiBuZXcgYnRyZWUgY3Vyc29yICovCi0JeGZzX2JtYnRfa2V5X3QJCW5rZXk7CQkvKiBuZXcgYnRyZWUga2V5IHZhbHVlICovCisJX191aW50NjRfdAkJc3RhcnRvZmY7CS8qIG5ldyBidHJlZSBrZXkgdmFsdWUgKi8KIAl4ZnNfYm1idF9yZWNfdAkJbnJlYzsJCS8qIG5ldyByZWNvcmQgY291bnQgKi8KIAlpbnQJCQlvcHRyOwkJLyogb2xkIGtleS9yZWNvcmQgaW5kZXggKi8KIAl4ZnNfYm1idF9wdHJfdAkJKnBwOwkJLyogcG9pbnRlciB0byBibWFwIGJsb2NrIGFkZHIgKi8KQEAgLTc1OSw5ICs3NTUsOCBAQAogCUFTU0VSVChsZXZlbCA8IGN1ci0+YmNfbmxldmVscyk7CiAJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRU5UUlkpOwogCVhGU19CTUJUX1RSQUNFX0FSR0lGUihjdXIsIGxldmVsLCAqYm5vcCwgcmVjcCk7Ci0JbmN1ciA9ICh4ZnNfYnRyZWVfY3VyX3QgKikwOwotCUlOVF9TRVQoa2V5LmJyX3N0YXJ0b2ZmLCBBUkNIX0NPTlZFUlQsCi0JCXhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKHJlY3ApKTsKKwluY3VyID0gTlVMTDsKKwlrZXkuYnJfc3RhcnRvZmYgPSBjcHVfdG9fYmU2NCh4ZnNfYm1idF9kaXNrX2dldF9zdGFydG9mZihyZWNwKSk7CiAJb3B0ciA9IHB0ciA9IGN1ci0+YmNfcHRyc1tsZXZlbF07CiAJaWYgKHB0ciA9PSAwKSB7CiAJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVYSVQpOwpAQCAtODIwLDcgKzgxNSw3IEBACiAJCQkJCW9wdHIgPSBwdHIgPSBjdXItPmJjX3B0cnNbbGV2ZWxdOwogCQkJCX0gZWxzZSB7CiAJCQkJCWlmICgoZXJyb3IgPSB4ZnNfYm1idF9zcGxpdChjdXIsIGxldmVsLAotCQkJCQkJCSZuYm5vLCAmbmtleSwgJm5jdXIsCisJCQkJCQkJJm5ibm8sICZzdGFydG9mZiwgJm5jdXIsCiAJCQkJCQkJJmkpKSkgewogCQkJCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwKIAkJCQkJCQlFUlJPUik7CkBAIC04NDAsNyArODM1LDcgQEAKICNlbmRpZgogCQkJCQkJcHRyID0gY3VyLT5iY19wdHJzW2xldmVsXTsKIAkJCQkJCXhmc19ibWJ0X2Rpc2tfc2V0X2FsbGYoJm5yZWMsCi0JCQkJCQkJbmtleS5icl9zdGFydG9mZiwgMCwgMCwKKwkJCQkJCQlzdGFydG9mZiwgMCwgMCwKIAkJCQkJCQlYRlNfRVhUX05PUk0pOwogCQkJCQl9IGVsc2UgewogCQkJCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwKQEAgLTg1OCw3ICs4NTMsNyBAQAogCQlwcCA9IFhGU19CTUFQX1BUUl9JQUREUihibG9jaywgMSwgY3VyKTsKICNpZmRlZiBERUJVRwogCQlmb3IgKGkgPSBudW1yZWNzOyBpID49IHB0cjsgaS0tKSB7Ci0JCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBJTlRfR0VUKHBwW2kgLSAxXSwgQVJDSF9DT05WRVJUKSwKKwkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cl9kaXNrKGN1ciwgcHBbaSAtIDFdLAogCQkJCQlsZXZlbCkpKSB7CiAJCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRVJST1IpOwogCQkJCXJldHVybiBlcnJvcjsKQEAgLTg3MCwxNCArODY1LDEzIEBACiAJCW1lbW1vdmUoJnBwW3B0cl0sICZwcFtwdHIgLSAxXSwgLyogSU5UXzogZGlyZWN0IGNvcHkgKi8KIAkJCShudW1yZWNzIC0gcHRyICsgMSkgKiBzaXplb2YoKnBwKSk7CiAjaWZkZWYgREVCVUcKLQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgKHhmc19ibWJ0X3B0cl90KSpibm9wLAotCQkJCWxldmVsKSkpIHsKKwkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgKmJub3AsIGxldmVsKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQogI2VuZGlmCiAJCWtwW3B0ciAtIDFdID0ga2V5OwotCQlJTlRfU0VUKHBwW3B0ciAtIDFdLCBBUkNIX0NPTlZFUlQsICpibm9wKTsKKwkJcHBbcHRyIC0gMV0gPSBjcHVfdG9fYmU2NCgqYm5vcCk7CiAJCW51bXJlY3MrKzsKIAkJYmxvY2stPmJiX251bXJlY3MgPSBjcHVfdG9fYmUxNihudW1yZWNzKTsKIAkJeGZzX2JtYnRfbG9nX2tleXMoY3VyLCBicCwgcHRyLCBudW1yZWNzKTsKQEAgLTk4OCw3ICs5ODIsNyBAQAogCWNwcCA9IFhGU19CTUFQX1BUUl9JQUREUihjYmxvY2ssIDEsIGN1cik7CiAjaWZkZWYgREVCVUcKIAlmb3IgKGkgPSAwOyBpIDwgYmUxNl90b19jcHUoY2Jsb2NrLT5iYl9udW1yZWNzKTsgaSsrKSB7Ci0JCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cihjdXIsIElOVF9HRVQoY3BwW2ldLCBBUkNIX0NPTlZFUlQpLCBsZXZlbCAtIDEpKSkgeworCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHJfZGlzayhjdXIsIGNwcFtpXSwgbGV2ZWwgLSAxKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQpAQCAtMTEzMiw3ICsxMTI2LDcgQEAKIAkJCWQgPSBYRlNfRlNCX1RPX0RBRERSKG1wLCBmc2Jubyk7CiAJCQlicCA9IGN1ci0+YmNfYnVmc1tsZXZlbF07CiAJCQlpZiAoYnAgJiYgWEZTX0JVRl9BRERSKGJwKSAhPSBkKQotCQkJCWJwID0gKHhmc19idWZfdCAqKTA7CisJCQkJYnAgPSBOVUxMOwogCQkJaWYgKCFicCkgewogCQkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfcmVhZF9idWZsKG1wLCB0cCwgZnNibm8sCiAJCQkJCQkwLCAmYnAsIFhGU19CTUFQX0JUUkVFX1JFRikpKSB7CkBAIC0xMTcwLDcgKzExNjQsNyBAQAogCQkJCWtleW5vID0gKGxvdyArIGhpZ2gpID4+IDE7CiAJCQkJaWYgKGxldmVsID4gMCkgewogCQkJCQlra3AgPSBra2Jhc2UgKyBrZXlubyAtIDE7Ci0JCQkJCXN0YXJ0b2ZmID0gSU5UX0dFVChra3AtPmJyX3N0YXJ0b2ZmLCBBUkNIX0NPTlZFUlQpOworCQkJCQlzdGFydG9mZiA9IGJlNjRfdG9fY3B1KGtrcC0+YnJfc3RhcnRvZmYpOwogCQkJCX0gZWxzZSB7CiAJCQkJCWtycCA9IGtyYmFzZSArIGtleW5vIC0gMTsKIAkJCQkJc3RhcnRvZmYgPSB4ZnNfYm1idF9kaXNrX2dldF9zdGFydG9mZihrcnApOwpAQCAtMTE4OSwxMyArMTE4MywxMyBAQAogCQkJaWYgKGRpZmYgPiAwICYmIC0ta2V5bm8gPCAxKQogCQkJCWtleW5vID0gMTsKIAkJCXBwID0gWEZTX0JNQVBfUFRSX0lBRERSKGJsb2NrLCBrZXlubywgY3VyKTsKKwkJCWZzYm5vID0gYmU2NF90b19jcHUoKnBwKTsKICNpZmRlZiBERUJVRwotCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCksIGxldmVsKSkpIHsKKwkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cihjdXIsIGZzYm5vLCBsZXZlbCkpKSB7CiAJCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRVJST1IpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KICNlbmRpZgotCQkJZnNibm8gPSBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKTsKIAkJCWN1ci0+YmNfcHRyc1tsZXZlbF0gPSBrZXlubzsKIAkJfQogCX0KQEAgLTEzMTMsNyArMTMwNyw3IEBACiAJCWxwcCA9IFhGU19CTUFQX1BUUl9JQUREUihsZWZ0LCBscmVjcywgY3VyKTsKIAkJcnBwID0gWEZTX0JNQVBfUFRSX0lBRERSKHJpZ2h0LCAxLCBjdXIpOwogI2lmZGVmIERFQlVHCi0JCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cihjdXIsIElOVF9HRVQoKnJwcCwgQVJDSF9DT05WRVJUKSwgbGV2ZWwpKSkgeworCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHJfZGlzayhjdXIsICpycHAsIGxldmVsKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQpAQCAtMTM0MCw3ICsxMzM0LDcgQEAKIAlpZiAobGV2ZWwgPiAwKSB7CiAjaWZkZWYgREVCVUcKIAkJZm9yIChpID0gMDsgaSA8IHJyZWNzOyBpKyspIHsKLQkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cihjdXIsIElOVF9HRVQocnBwW2kgKyAxXSwgQVJDSF9DT05WRVJUKSwKKwkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cl9kaXNrKGN1ciwgcnBwW2kgKyAxXSwKIAkJCQkJbGV2ZWwpKSkgewogCQkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCQlyZXR1cm4gZXJyb3I7CkBAIC0xMzU0LDggKzEzNDgsNyBAQAogCX0gZWxzZSB7CiAJCW1lbW1vdmUocnJwLCBycnAgKyAxLCBycmVjcyAqIHNpemVvZigqcnJwKSk7CiAJCXhmc19ibWJ0X2xvZ19yZWNzKGN1ciwgcmJwLCAxLCBycmVjcyk7Ci0JCUlOVF9TRVQoa2V5LmJyX3N0YXJ0b2ZmLCBBUkNIX0NPTlZFUlQsCi0JCQl4ZnNfYm1idF9kaXNrX2dldF9zdGFydG9mZihycnApKTsKKwkJa2V5LmJyX3N0YXJ0b2ZmID0gY3B1X3RvX2JlNjQoeGZzX2JtYnRfZGlza19nZXRfc3RhcnRvZmYocnJwKSk7CiAJCXJrcCA9ICZrZXk7CiAJfQogCWlmICgoZXJyb3IgPSB4ZnNfYm1idF91cGRrZXkoY3VyLCBya3AsIGxldmVsICsgMSkpKSB7CkBAIC0xNDQ1LDcgKzE0MzgsNyBAQAogCQlycHAgPSBYRlNfQk1BUF9QVFJfSUFERFIocmlnaHQsIDEsIGN1cik7CiAjaWZkZWYgREVCVUcKIAkJZm9yIChpID0gYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cihjdXIsIElOVF9HRVQocnBwW2ldLCBBUkNIX0NPTlZFUlQpLCBsZXZlbCkpKSB7CisJCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHJfZGlzayhjdXIsIHJwcFtpXSwgbGV2ZWwpKSkgewogCQkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCQlyZXR1cm4gZXJyb3I7CiAJCQl9CkBAIC0xNDU0LDcgKzE0NDcsNyBAQAogCQltZW1tb3ZlKHJrcCArIDEsIHJrcCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpya3ApKTsKIAkJbWVtbW92ZShycHAgKyAxLCBycHAsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSAqIHNpemVvZigqcnBwKSk7CiAjaWZkZWYgREVCVUcKLQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgSU5UX0dFVCgqbHBwLCBBUkNIX0NPTlZFUlQpLCBsZXZlbCkpKSB7CisJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cl9kaXNrKGN1ciwgKmxwcCwgbGV2ZWwpKSkgewogCQkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRVJST1IpOwogCQkJcmV0dXJuIGVycm9yOwogCQl9CkBAIC0xNDY5LDggKzE0NjIsNyBAQAogCQltZW1tb3ZlKHJycCArIDEsIHJycCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpycnApKTsKIAkJKnJycCA9ICpscnA7CiAJCXhmc19ibWJ0X2xvZ19yZWNzKGN1ciwgcmJwLCAxLCBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykgKyAxKTsKLQkJSU5UX1NFVChrZXkuYnJfc3RhcnRvZmYsIEFSQ0hfQ09OVkVSVCwKLQkJCXhmc19ibWJ0X2Rpc2tfZ2V0X3N0YXJ0b2ZmKHJycCkpOworCQlrZXkuYnJfc3RhcnRvZmYgPSBjcHVfdG9fYmU2NCh4ZnNfYm1idF9kaXNrX2dldF9zdGFydG9mZihycnApKTsKIAkJcmtwID0gJmtleTsKIAl9CiAJYmUxNl9hZGQoJmxlZnQtPmJiX251bXJlY3MsIC0xKTsKQEAgLTE1MzUsNyArMTUyNyw3IEBACiAJeGZzX2J0cmVlX2N1cl90CQkqY3VyLAogCWludAkJCWxldmVsLAogCXhmc19mc2Jsb2NrX3QJCSpibm9wLAotCXhmc19ibWJ0X2tleV90CQkqa2V5cCwKKwlfX3VpbnQ2NF90CQkqc3RhcnRvZmYsCiAJeGZzX2J0cmVlX2N1cl90CQkqKmN1cnAsCiAJaW50CQkJKnN0YXQpCQkvKiBzdWNjZXNzL2ZhaWx1cmUgKi8KIHsKQEAgLTE1NjAsNyArMTU1Miw3IEBACiAJeGZzX2JtYnRfcmVjX3QJCSpycnA7CQkvKiByaWdodCByZWNvcmQgcG9pbnRlciAqLwogCiAJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRU5UUlkpOwotCVhGU19CTUJUX1RSQUNFX0FSR0lGSyhjdXIsIGxldmVsLCAqYm5vcCwga2V5cCk7CisJWEZTX0JNQlRfVFJBQ0VfQVJHSUZLKGN1ciwgbGV2ZWwsICpibm9wLCAqc3RhcnRvZmYpOwogCWFyZ3MudHAgPSBjdXItPmJjX3RwOwogCWFyZ3MubXAgPSBjdXItPmJjX21wOwogCWxicCA9IGN1ci0+YmNfYnVmc1tsZXZlbF07CkBAIC0xNjE5LDcgKzE2MTEsNyBAQAogCQlycHAgPSBYRlNfQk1BUF9QVFJfSUFERFIocmlnaHQsIDEsIGN1cik7CiAjaWZkZWYgREVCVUcKIAkJZm9yIChpID0gMDsgaSA8IGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKTsgaSsrKSB7Ci0JCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBJTlRfR0VUKGxwcFtpXSwgQVJDSF9DT05WRVJUKSwgbGV2ZWwpKSkgeworCQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyX2Rpc2soY3VyLCBscHBbaV0sIGxldmVsKSkpIHsKIAkJCQlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFUlJPUik7CiAJCQkJcmV0dXJuIGVycm9yOwogCQkJfQpAQCAtMTYyOSwxMyArMTYyMSwxMyBAQAogCQltZW1jcHkocnBwLCBscHAsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSAqIHNpemVvZigqcnBwKSk7CiAJCXhmc19ibWJ0X2xvZ19rZXlzKGN1ciwgcmJwLCAxLCBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykpOwogCQl4ZnNfYm1idF9sb2dfcHRycyhjdXIsIHJicCwgMSwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpKTsKLQkJa2V5cC0+YnJfc3RhcnRvZmYgPSBJTlRfR0VUKHJrcC0+YnJfc3RhcnRvZmYsIEFSQ0hfQ09OVkVSVCk7CisJCSpzdGFydG9mZiA9IGJlNjRfdG9fY3B1KHJrcC0+YnJfc3RhcnRvZmYpOwogCX0gZWxzZSB7CiAJCWxycCA9IFhGU19CTUFQX1JFQ19JQUREUihsZWZ0LCBpLCBjdXIpOwogCQlycnAgPSBYRlNfQk1BUF9SRUNfSUFERFIocmlnaHQsIDEsIGN1cik7CiAJCW1lbWNweShycnAsIGxycCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpycnApKTsKIAkJeGZzX2JtYnRfbG9nX3JlY3MoY3VyLCByYnAsIDEsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSk7Ci0JCWtleXAtPmJyX3N0YXJ0b2ZmID0geGZzX2JtYnRfZGlza19nZXRfc3RhcnRvZmYocnJwKTsKKwkJKnN0YXJ0b2ZmID0geGZzX2JtYnRfZGlza19nZXRfc3RhcnRvZmYocnJwKTsKIAl9CiAJYmUxNl9hZGQoJmxlZnQtPmJiX251bXJlY3MsIC0oYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpKSk7CiAJcmlnaHQtPmJiX3JpZ2h0c2liID0gbGVmdC0+YmJfcmlnaHRzaWI7CkBAIC0xNzI4LDkgKzE3MjAsOSBAQAogewogCWludAkJCWRteHI7CiAJeGZzX2JtYnRfa2V5X3QJCSpma3A7Ci0JeGZzX2JtYnRfcHRyX3QJCSpmcHA7CisJX19iZTY0CQkJKmZwcDsKIAl4ZnNfYm1idF9rZXlfdAkJKnRrcDsKLQl4ZnNfYm1idF9wdHJfdAkJKnRwcDsKKwlfX2JlNjQJCQkqdHBwOwogCiAJcmJsb2NrLT5iYl9tYWdpYyA9IGNwdV90b19iZTMyKFhGU19CTUFQX01BR0lDKTsKIAlyYmxvY2stPmJiX2xldmVsID0gZGJsb2NrLT5iYl9sZXZlbDsKQEAgLTE3NDUsNyArMTczNyw3IEBACiAJdHBwID0gWEZTX0JNQVBfQlJPT1RfUFRSX0FERFIocmJsb2NrLCAxLCByYmxvY2tsZW4pOwogCWRteHIgPSBiZTE2X3RvX2NwdShkYmxvY2stPmJiX251bXJlY3MpOwogCW1lbWNweSh0a3AsIGZrcCwgc2l6ZW9mKCpma3ApICogZG14cik7Ci0JbWVtY3B5KHRwcCwgZnBwLCBzaXplb2YoKmZwcCkgKiBkbXhyKTsgLyogSU5UXzogZGlyZWN0IGNvcHkgKi8KKwltZW1jcHkodHBwLCBmcHAsIHNpemVvZigqZnBwKSAqIGRteHIpOwogfQogCiAvKgpAQCAtMTgwNSw3ICsxNzk3LDcgQEAKIAl0cCA9IGN1ci0+YmNfdHA7CiAJbXAgPSBjdXItPmJjX21wOwogCWZvciAoYmxvY2sgPSB4ZnNfYm1idF9nZXRfYmxvY2soY3VyLCBsZXYsICZicCk7IGxldiA+IGxldmVsOyApIHsKLQkJZnNibm8gPSBJTlRfR0VUKCpYRlNfQk1BUF9QVFJfSUFERFIoYmxvY2ssIGN1ci0+YmNfcHRyc1tsZXZdLCBjdXIpLCBBUkNIX0NPTlZFUlQpOworCQlmc2JubyA9IGJlNjRfdG9fY3B1KCpYRlNfQk1BUF9QVFJfSUFERFIoYmxvY2ssIGN1ci0+YmNfcHRyc1tsZXZdLCBjdXIpKTsKIAkJaWYgKChlcnJvciA9IHhmc19idHJlZV9yZWFkX2J1ZmwobXAsIHRwLCBmc2JubywgMCwgJmJwLAogCQkJCVhGU19CTUFQX0JUUkVFX1JFRikpKSB7CiAJCQlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFUlJPUik7CkBAIC0yMTM1LDcgKzIxMjcsNyBAQAogCXRwID0gY3VyLT5iY190cDsKIAltcCA9IGN1ci0+YmNfbXA7CiAJZm9yIChibG9jayA9IHhmc19ibWJ0X2dldF9ibG9jayhjdXIsIGxldiwgJmJwKTsgbGV2ID4gbGV2ZWw7ICkgewotCQlmc2JubyA9IElOVF9HRVQoKlhGU19CTUFQX1BUUl9JQUREUihibG9jaywgY3VyLT5iY19wdHJzW2xldl0sIGN1ciksIEFSQ0hfQ09OVkVSVCk7CisJCWZzYm5vID0gYmU2NF90b19jcHUoKlhGU19CTUFQX1BUUl9JQUREUihibG9jaywgY3VyLT5iY19wdHJzW2xldl0sIGN1cikpOwogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX3JlYWRfYnVmbChtcCwgdHAsIGZzYm5vLCAwLCAmYnAsCiAJCQkJWEZTX0JNQVBfQlRSRUVfUkVGKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKQEAgLTIxNzgsNyArMjE3MCw3IEBACiAJbGV2ZWwgPSAwOwogCW5ibm8gPSBOVUxMRlNCTE9DSzsKIAl4ZnNfYm1idF9kaXNrX3NldF9hbGwoJm5yZWMsICZjdXItPmJjX3JlYy5iKTsKLQluY3VyID0gKHhmc19idHJlZV9jdXJfdCAqKTA7CisJbmN1ciA9IE5VTEw7CiAJcGN1ciA9IGN1cjsKIAlkbyB7CiAJCWlmICgoZXJyb3IgPSB4ZnNfYm1idF9pbnNyZWMocGN1ciwgbGV2ZWwrKywgJm5ibm8sICZucmVjLCAmbmN1ciwKQEAgLTIyMDUsNyArMjE5Nyw3IEBACiAJCX0KIAkJaWYgKG5jdXIpIHsKIAkJCXBjdXIgPSBuY3VyOwotCQkJbmN1ciA9ICh4ZnNfYnRyZWVfY3VyX3QgKikwOworCQkJbmN1ciA9IE5VTEw7CiAJCX0KIAl9IHdoaWxlIChuYm5vICE9IE5VTExGU0JMT0NLKTsKIAlYRlNfQk1CVF9UUkFDRV9DVVJTT1IoY3VyLCBFWElUKTsKQEAgLTIzNTYsMTIgKzIzNDgsMTIgQEAKIAlhcmdzLmZpcnN0YmxvY2sgPSBhcmdzLmZzYm5vOwogCWlmIChhcmdzLmZzYm5vID09IE5VTExGU0JMT0NLKSB7CiAjaWZkZWYgREVCVUcKLQkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyKGN1ciwgSU5UX0dFVCgqcHAsIEFSQ0hfQ09OVkVSVCksIGxldmVsKSkpIHsKKwkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19scHRyX2Rpc2soY3VyLCAqcHAsIGxldmVsKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQogI2VuZGlmCi0JCWFyZ3MuZnNibm8gPSBJTlRfR0VUKCpwcCwgQVJDSF9DT05WRVJUKTsKKwkJYXJncy5mc2JubyA9IGJlNjRfdG9fY3B1KCpwcCk7CiAJCWFyZ3MudHlwZSA9IFhGU19BTExPQ1RZUEVfU1RBUlRfQk5POwogCX0gZWxzZQogCQlhcmdzLnR5cGUgPSBYRlNfQUxMT0NUWVBFX05FQVJfQk5POwpAQCAtMjM5Myw3ICsyMzg1LDcgQEAKIAljcHAgPSBYRlNfQk1BUF9QVFJfSUFERFIoY2Jsb2NrLCAxLCBjdXIpOwogI2lmZGVmIERFQlVHCiAJZm9yIChpID0gMDsgaSA8IGJlMTZfdG9fY3B1KGNibG9jay0+YmJfbnVtcmVjcyk7IGkrKykgewotCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBJTlRfR0VUKHBwW2ldLCBBUkNIX0NPTlZFUlQpLCBsZXZlbCkpKSB7CisJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfbHB0cl9kaXNrKGN1ciwgcHBbaV0sIGxldmVsKSkpIHsKIAkJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJCXJldHVybiBlcnJvcjsKIAkJfQpAQCAtMjQwMSwxMyArMjM5MywxMiBAQAogI2VuZGlmCiAJbWVtY3B5KGNwcCwgcHAsIGJlMTZfdG9fY3B1KGNibG9jay0+YmJfbnVtcmVjcykgKiBzaXplb2YoKnBwKSk7CiAjaWZkZWYgREVCVUcKLQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCAoeGZzX2JtYnRfcHRyX3QpYXJncy5mc2JubywKLQkJCWxldmVsKSkpIHsKKwlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX2xwdHIoY3VyLCBhcmdzLmZzYm5vLCBsZXZlbCkpKSB7CiAJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVSUk9SKTsKIAkJcmV0dXJuIGVycm9yOwogCX0KICNlbmRpZgotCUlOVF9TRVQoKnBwLCBBUkNIX0NPTlZFUlQsIGFyZ3MuZnNibm8pOworCSpwcCA9IGNwdV90b19iZTY0KGFyZ3MuZnNibm8pOwogCXhmc19pcm9vdF9yZWFsbG9jKGN1ci0+YmNfcHJpdmF0ZS5iLmlwLCAxIC0gYmUxNl90b19jcHUoY2Jsb2NrLT5iYl9udW1yZWNzKSwKIAkJY3VyLT5iY19wcml2YXRlLmIud2hpY2hmb3JrKTsKIAl4ZnNfYnRyZWVfc2V0YnVmKGN1ciwgbGV2ZWwsIGJwKTsKQEAgLTI2ODEsOSArMjY3Miw5IEBACiB7CiAJaW50CQkJZG14cjsKIAl4ZnNfYm1idF9rZXlfdAkJKmZrcDsKLQl4ZnNfYm1idF9wdHJfdAkJKmZwcDsKKwlfX2JlNjQJCQkqZnBwOwogCXhmc19ibWJ0X2tleV90CQkqdGtwOwotCXhmc19ibWJ0X3B0cl90CQkqdHBwOworCV9fYmU2NAkJCSp0cHA7CiAKIAlBU1NFUlQoYmUzMl90b19jcHUocmJsb2NrLT5iYl9tYWdpYykgPT0gWEZTX0JNQVBfTUFHSUMpOwogCUFTU0VSVChiZTY0X3RvX2NwdShyYmxvY2stPmJiX2xlZnRzaWIpID09IE5VTExERlNCTk8pOwpAQCAtMjY5OCw3ICsyNjg5LDcgQEAKIAl0cHAgPSBYRlNfQlRSRUVfUFRSX0FERFIoZGJsb2NrbGVuLCB4ZnNfYm1kciwgZGJsb2NrLCAxLCBkbXhyKTsKIAlkbXhyID0gYmUxNl90b19jcHUoZGJsb2NrLT5iYl9udW1yZWNzKTsKIAltZW1jcHkodGtwLCBma3AsIHNpemVvZigqZmtwKSAqIGRteHIpOwotCW1lbWNweSh0cHAsIGZwcCwgc2l6ZW9mKCpmcHApICogZG14cik7IC8qIElOVF86IGRpcmVjdCBjb3B5ICovCisJbWVtY3B5KHRwcCwgZnBwLCBzaXplb2YoKmZwcCkgKiBkbXhyKTsKIH0KIAogLyoKQEAgLTI3NDAsNyArMjczMSw3IEBACiAJCVhGU19CTUJUX1RSQUNFX0NVUlNPUihjdXIsIEVYSVQpOwogCQlyZXR1cm4gMDsKIAl9Ci0JSU5UX1NFVChrZXkuYnJfc3RhcnRvZmYsIEFSQ0hfQ09OVkVSVCwgb2ZmKTsKKwlrZXkuYnJfc3RhcnRvZmYgPSBjcHVfdG9fYmU2NChvZmYpOwogCWlmICgoZXJyb3IgPSB4ZnNfYm1idF91cGRrZXkoY3VyLCAma2V5LCAxKSkpIHsKIAkJWEZTX0JNQlRfVFJBQ0VfQ1VSU09SKGN1ciwgRVJST1IpOwogCQlyZXR1cm4gZXJyb3I7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2JtYXBfYnRyZWUuaCBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCmluZGV4IDY0NzhjZmEuLjQ5NTM5ZGUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfYm1hcF9idHJlZS5oCkBAIC0xNjMsMTMgKzE2MywxNCBAQAogLyoKICAqIEtleSBzdHJ1Y3R1cmUgZm9yIG5vbi1sZWFmIGxldmVscyBvZiB0aGUgdHJlZS4KICAqLwotdHlwZWRlZiBzdHJ1Y3QgeGZzX2JtYnRfa2V5Ci17Ci0JeGZzX2RmaWxvZmZfdAlicl9zdGFydG9mZjsJLyogc3RhcnRpbmcgZmlsZSBvZmZzZXQgKi8KK3R5cGVkZWYgc3RydWN0IHhmc19ibWJ0X2tleSB7CisJX19iZTY0CQlicl9zdGFydG9mZjsJLyogc3RhcnRpbmcgZmlsZSBvZmZzZXQgKi8KIH0geGZzX2JtYnRfa2V5X3QsIHhmc19ibWRyX2tleV90OwogCi10eXBlZGVmIHhmc19kZnNibm9fdCB4ZnNfYm1idF9wdHJfdCwgeGZzX2JtZHJfcHRyX3Q7CS8qIGJ0cmVlIHBvaW50ZXIgdHlwZSAqLwotCQkJCQkvKiBidHJlZSBibG9jayBoZWFkZXIgdHlwZSAqLworLyogYnRyZWUgcG9pbnRlciB0eXBlICovCit0eXBlZGVmIF9fYmU2NCB4ZnNfYm1idF9wdHJfdCwgeGZzX2JtZHJfcHRyX3Q7CisKKy8qIGJ0cmVlIGJsb2NrIGhlYWRlciB0eXBlICovCiB0eXBlZGVmIHN0cnVjdCB4ZnNfYnRyZWVfbGJsb2NrIHhmc19ibWJ0X2Jsb2NrX3Q7CiAKICNkZWZpbmUgWEZTX0JVRl9UT19CTUJUX0JMT0NLKGJwKQkoKHhmc19ibWJ0X2Jsb2NrX3QgKilYRlNfQlVGX1BUUihicCkpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J0cmVlLmMgYi9mcy94ZnMveGZzX2J0cmVlLmMKaW5kZXggZWUyMjU1Yi4uYWViODdjYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfYnRyZWUuYwpAQCAtMTYxLDcgKzE2MSw3IEBACiAKIAkJazEgPSBhazE7CiAJCWsyID0gYWsyOwotCQlBU1NFUlQoSU5UX0dFVChrMS0+YnJfc3RhcnRvZmYsIEFSQ0hfQ09OVkVSVCkgPCBJTlRfR0VUKGsyLT5icl9zdGFydG9mZiwgQVJDSF9DT05WRVJUKSk7CisJCUFTU0VSVChiZTY0X3RvX2NwdShrMS0+YnJfc3RhcnRvZmYpIDwgYmU2NF90b19jcHUoazItPmJyX3N0YXJ0b2ZmKSk7CiAJCWJyZWFrOwogCSAgICB9CiAJY2FzZSBYRlNfQlROVU1fSU5POiB7CkBAIC0xNzAsNyArMTcwLDcgQEAKIAogCQlrMSA9IGFrMTsKIAkJazIgPSBhazI7Ci0JCUFTU0VSVChJTlRfR0VUKGsxLT5pcl9zdGFydGlubywgQVJDSF9DT05WRVJUKSA8IElOVF9HRVQoazItPmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQpKTsKKwkJQVNTRVJUKGJlMzJfdG9fY3B1KGsxLT5pcl9zdGFydGlubykgPCBiZTMyX3RvX2NwdShrMi0+aXJfc3RhcnRpbm8pKTsKIAkJYnJlYWs7CiAJICAgIH0KIAlkZWZhdWx0OgpAQCAtMjg1LDggKzI4NSw4IEBACiAKIAkJcjEgPSBhcjE7CiAJCXIyID0gYXIyOwotCQlBU1NFUlQoSU5UX0dFVChyMS0+aXJfc3RhcnRpbm8sIEFSQ0hfQ09OVkVSVCkgKyBYRlNfSU5PREVTX1BFUl9DSFVOSyA8PQotCQkgICAgICAgSU5UX0dFVChyMi0+aXJfc3RhcnRpbm8sIEFSQ0hfQ09OVkVSVCkpOworCQlBU1NFUlQoYmUzMl90b19jcHUocjEtPmlyX3N0YXJ0aW5vKSArIFhGU19JTk9ERVNfUEVSX0NIVU5LIDw9CisJCSAgICAgICBiZTMyX3RvX2NwdShyMi0+aXJfc3RhcnRpbm8pKTsKIAkJYnJlYWs7CiAJICAgIH0KIAlkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19idHJlZS5oIGIvZnMveGZzL3hmc19idHJlZS5oCmluZGV4IDQ0ZjFiZDkuLjg5MmIwNmMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfYnRyZWUuaAorKysgYi9mcy94ZnMveGZzX2J0cmVlLmgKQEAgLTE0NSw3ICsxNDUsNyBAQAogCXVuaW9uIHsKIAkJeGZzX2FsbG9jX3JlY19pbmNvcmVfdAlhOwogCQl4ZnNfYm1idF9pcmVjX3QJCWI7Ci0JCXhmc19pbm9idF9yZWNfdAkJaTsKKwkJeGZzX2lub2J0X3JlY19pbmNvcmVfdAlpOwogCX0JCWJjX3JlYzsJCS8qIGN1cnJlbnQgaW5zZXJ0L3NlYXJjaCByZWNvcmQgdmFsdWUgKi8KIAlzdHJ1Y3QgeGZzX2J1ZgkqYmNfYnVmc1tYRlNfQlRSRUVfTUFYTEVWRUxTXTsJLyogYnVmIHB0ciBwZXIgbGV2ZWwgKi8KIAlpbnQJCWJjX3B0cnNbWEZTX0JUUkVFX01BWExFVkVMU107CS8qIGtleS9yZWNvcmQgIyAqLwpAQCAtMjQzLDYgKzI0Myw5IEBACiAJeGZzX2Rmc2Jub190CQlwdHIsCS8qIGJ0cmVlIGJsb2NrIGRpc2sgYWRkcmVzcyAqLwogCWludAkJCWxldmVsKTsJLyogYnRyZWUgYmxvY2sgbGV2ZWwgKi8KIAorI2RlZmluZSB4ZnNfYnRyZWVfY2hlY2tfbHB0cl9kaXNrKGN1ciwgcHRyLCBsZXZlbCkgXAorCXhmc19idHJlZV9jaGVja19scHRyKGN1ciwgYmU2NF90b19jcHUocHRyKSwgbGV2ZWwpCisKIC8qCiAgKiBDaGVja2luZyByb3V0aW5lOiBjaGVjayB0aGF0IHNob3J0IGZvcm0gYmxvY2sgaGVhZGVyIGlzIG9rLgogICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2J1Zl9pdGVtLmMgYi9mcy94ZnMveGZzX2J1Zl9pdGVtLmMKaW5kZXggYTRhYTUzOS4uN2E1NWMyNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19idWZfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfYnVmX2l0ZW0uYwpAQCAtMjM0LDcgKzIzNCw2IEBACiAJQVNTRVJUKChiaXAtPmJsaV9mbGFncyAmIFhGU19CTElfTE9HR0VEKSB8fAogCSAgICAgICAoYmlwLT5ibGlfZmxhZ3MgJiBYRlNfQkxJX1NUQUxFKSk7CiAJYnAgPSBiaXAtPmJsaV9idWY7Ci0JQVNTRVJUKFhGU19CVUZfQlBfSVNNQVBQRUQoYnApKTsKIAl2ZWNwID0gbG9nX3ZlY3RvcjsKIAogCS8qCkBAIC02MjgsMjUgKzYyNyw2IEBACiB9CiAKIC8qCi0gKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSB0cmFuc2FjdGlvbiBob2xkaW5nIHRoZSBidWZmZXIgaXMgYWJvcnRlZC4KLSAqIEp1c3QgYmVoYXZlIGFzIGlmIHRoZSB0cmFuc2FjdGlvbiBoYWQgYmVlbiBjYW5jZWxsZWQuIElmIHdlJ3JlIHNodXR0aW5nIGRvd24KLSAqIGFuZCBoYXZlIGFib3J0ZWQgdGhpcyB0cmFuc2FjdGlvbiwgd2UnbGwgdHJhcCB0aGlzIGJ1ZmZlciB3aGVuIGl0IHRyaWVzIHRvCi0gKiBnZXQgd3JpdHRlbiBvdXQuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfYnVmX2l0ZW1fYWJvcnQoCi0JeGZzX2J1Zl9sb2dfaXRlbV90CSpiaXApCi17Ci0JeGZzX2J1Zl90CSpicDsKLQotCWJwID0gYmlwLT5ibGlfYnVmOwotCXhmc19idWZ0cmFjZSgiWEZTX0FCT1JUIiwgYnApOwotCVhGU19CVUZfU1VQRVJfU1RBTEUoYnApOwotCXhmc19idWZfaXRlbV91bmxvY2soYmlwKTsKLQlyZXR1cm47Ci19Ci0KLS8qCiAgKiBUaGlzIGlzIGNhbGxlZCB0byBhc3luY2hyb25vdXNseSB3cml0ZSB0aGUgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCB0aGlzCiAgKiBidWYgbG9nIGl0ZW0gb3V0IHRvIGRpc2suIFRoZSBidWZmZXIgd2lsbCBhbHJlYWR5IGhhdmUgYmVlbiBsb2NrZWQgYnkKICAqIGEgc3VjY2Vzc2Z1bCBjYWxsIHRvIHhmc19idWZfaXRlbV90cnlsb2NrKCkuICBJZiB0aGUgYnVmZmVyIHN0aWxsIGhhcwpAQCAtNjkzLDcgKzY3Myw2IEBACiAJLmlvcF9jb21taXR0ZWQJPSAoeGZzX2xzbl90KCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2J1Zl9pdGVtX2NvbW1pdHRlZCwKIAkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV9wdXNoLAotCS5pb3BfYWJvcnQJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19idWZfaXRlbV9hYm9ydCwKIAkuaW9wX3B1c2hidWYJPSBOVUxMLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2J1Zl9pdGVtX2NvbW1pdHRpbmcKQEAgLTkwMSw3ICs4ODAsNiBAQAogCVhGU19CVUZfU0VUX0ZTUFJJVkFURShicCwgYmlwLT5ibGlfaXRlbS5saV9iaW9fbGlzdCk7CiAJaWYgKChYRlNfQlVGX0ZTUFJJVkFURShicCwgdm9pZCAqKSA9PSBOVUxMKSAmJgogCSAgICAoWEZTX0JVRl9JT0RPTkVfRlVOQyhicCkgIT0gTlVMTCkpIHsKLQkJQVNTRVJUKChYRlNfQlVGX0lTVU5JTklUSUFMKGJwKSkgPT0gMCk7CiAJCVhGU19CVUZfQ0xSX0lPRE9ORV9GVU5DKGJwKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwppbmRleCAzMmFiNjFkLi5hNjhiYzFmMSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19kYV9idHJlZS5jCisrKyBiL2ZzL3hmcy94ZnNfZGFfYnRyZWUuYwpAQCAtMTA1NCw3ICsxMDU0LDcgQEAKIAl4ZnNfZGFfbm9kZV9lbnRyeV90ICpidHJlZTsKIAl4ZnNfZGFibGtfdCBibGtubzsKIAlpbnQgcHJvYmUsIHNwYW4sIG1heCwgZXJyb3IsIHJldHZhbDsKLQl4ZnNfZGFoYXNoX3QgaGFzaHZhbDsKKwl4ZnNfZGFoYXNoX3QgaGFzaHZhbCwgYnRyZWVoYXNodmFsOwogCXhmc19kYV9hcmdzX3QgKmFyZ3M7CiAKIAlhcmdzID0gc3RhdGUtPmFyZ3M7CkBAIC0xMDc5LDMwICsxMDc5LDMyIEBACiAJCQlyZXR1cm4oZXJyb3IpOwogCQl9CiAJCWN1cnIgPSBibGstPmJwLT5kYXRhOwotCQlBU1NFUlQoYmUxNl90b19jcHUoY3Vyci0+bWFnaWMpID09IFhGU19EQV9OT0RFX01BR0lDIHx8Ci0JCSAgICAgICBiZTE2X3RvX2NwdShjdXJyLT5tYWdpYykgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMgfHwKLQkJICAgICAgIGJlMTZfdG9fY3B1KGN1cnItPm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKTsKKwkJYmxrLT5tYWdpYyA9IGJlMTZfdG9fY3B1KGN1cnItPm1hZ2ljKTsKKwkJQVNTRVJUKGJsay0+bWFnaWMgPT0gWEZTX0RBX05PREVfTUFHSUMgfHwKKwkJICAgICAgIGJsay0+bWFnaWMgPT0gWEZTX0RJUjJfTEVBRk5fTUFHSUMgfHwKKwkJICAgICAgIGJsay0+bWFnaWMgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQyk7CiAKIAkJLyoKIAkJICogU2VhcmNoIGFuIGludGVybWVkaWF0ZSBub2RlIGZvciBhIG1hdGNoLgogCQkgKi8KLQkJYmxrLT5tYWdpYyA9IGJlMTZfdG9fY3B1KGN1cnItPm1hZ2ljKTsKIAkJaWYgKGJsay0+bWFnaWMgPT0gWEZTX0RBX05PREVfTUFHSUMpIHsKIAkJCW5vZGUgPSBibGstPmJwLT5kYXRhOwotCQkJYmxrLT5oYXNodmFsID0gYmUzMl90b19jcHUobm9kZS0+YnRyZWVbYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KS0xXS5oYXNodmFsKTsKKwkJCW1heCA9IGJlMTZfdG9fY3B1KG5vZGUtPmhkci5jb3VudCk7CisJCQlidHJlZWhhc2h2YWwgPSBub2RlLT5idHJlZVttYXgtMV0uaGFzaHZhbDsKKwkJCWJsay0+aGFzaHZhbCA9IGJlMzJfdG9fY3B1KGJ0cmVlaGFzaHZhbCk7CiAKIAkJCS8qCiAJCQkgKiBCaW5hcnkgc2VhcmNoLiAgKG5vdGU6IHNtYWxsIGJsb2NrcyB3aWxsIHNraXAgbG9vcCkKIAkJCSAqLwotCQkJbWF4ID0gYmUxNl90b19jcHUobm9kZS0+aGRyLmNvdW50KTsKIAkJCXByb2JlID0gc3BhbiA9IG1heCAvIDI7CiAJCQloYXNodmFsID0gYXJncy0+aGFzaHZhbDsKIAkJCWZvciAoYnRyZWUgPSAmbm9kZS0+YnRyZWVbcHJvYmVdOyBzcGFuID4gNDsKIAkJCQkgICBidHJlZSA9ICZub2RlLT5idHJlZVtwcm9iZV0pIHsKIAkJCQlzcGFuIC89IDI7Ci0JCQkJaWYgKGJlMzJfdG9fY3B1KGJ0cmVlLT5oYXNodmFsKSA8IGhhc2h2YWwpCisJCQkJYnRyZWVoYXNodmFsID0gYmUzMl90b19jcHUoYnRyZWUtPmhhc2h2YWwpOworCQkJCWlmIChidHJlZWhhc2h2YWwgPCBoYXNodmFsKQogCQkJCQlwcm9iZSArPSBzcGFuOwotCQkJCWVsc2UgaWYgKGJlMzJfdG9fY3B1KGJ0cmVlLT5oYXNodmFsKSA+IGhhc2h2YWwpCisJCQkJZWxzZSBpZiAoYnRyZWVoYXNodmFsID4gaGFzaHZhbCkKIAkJCQkJcHJvYmUgLT0gc3BhbjsKIAkJCQllbHNlCiAJCQkJCWJyZWFrOwpAQCAtMTEzMywxMCArMTEzNSwxMCBAQAogCQkJCWJsay0+aW5kZXggPSBwcm9iZTsKIAkJCQlibGtubyA9IGJlMzJfdG9fY3B1KGJ0cmVlLT5iZWZvcmUpOwogCQkJfQotCQl9IGVsc2UgaWYgKGJlMTZfdG9fY3B1KGN1cnItPm1hZ2ljKSA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CisJCX0gZWxzZSBpZiAoYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CiAJCQlibGstPmhhc2h2YWwgPSB4ZnNfYXR0cl9sZWFmX2xhc3RoYXNoKGJsay0+YnAsIE5VTEwpOwogCQkJYnJlYWs7Ci0JCX0gZWxzZSBpZiAoYmUxNl90b19jcHUoY3Vyci0+bWFnaWMpID09IFhGU19ESVIyX0xFQUZOX01BR0lDKSB7CisJCX0gZWxzZSBpZiAoYmxrLT5tYWdpYyA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQykgewogCQkJYmxrLT5oYXNodmFsID0geGZzX2RpcjJfbGVhZm5fbGFzdGhhc2goYmxrLT5icCwgTlVMTCk7CiAJCQlicmVhazsKIAkJfQpAQCAtMTE1MiwxMSArMTE1NCwxMyBAQAogCQlpZiAoYmxrLT5tYWdpYyA9PSBYRlNfRElSMl9MRUFGTl9NQUdJQykgewogCQkJcmV0dmFsID0geGZzX2RpcjJfbGVhZm5fbG9va3VwX2ludChibGstPmJwLCBhcmdzLAogCQkJCQkJCSZibGstPmluZGV4LCBzdGF0ZSk7Ci0JCX0KLQkJZWxzZSBpZiAoYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CisJCX0gZWxzZSBpZiAoYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CiAJCQlyZXR2YWwgPSB4ZnNfYXR0cl9sZWFmX2xvb2t1cF9pbnQoYmxrLT5icCwgYXJncyk7CiAJCQlibGstPmluZGV4ID0gYXJncy0+aW5kZXg7CiAJCQlhcmdzLT5ibGtubyA9IGJsay0+Ymxrbm87CisJCX0gZWxzZSB7CisJCQlBU1NFUlQoMCk7CisJCQlyZXR1cm4gWEZTX0VSUk9SKEVGU0NPUlJVUFRFRCk7CiAJCX0KIAkJaWYgKCgocmV0dmFsID09IEVOT0VOVCkgfHwgKHJldHZhbCA9PSBFTk9BVFRSKSkgJiYKIAkJICAgIChibGstPmhhc2h2YWwgPT0gYXJncy0+aGFzaHZhbCkpIHsKQEAgLTExNjYsOCArMTE3MCw3IEBACiAJCQkJcmV0dXJuKGVycm9yKTsKIAkJCWlmIChyZXR2YWwgPT0gMCkgewogCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJZWxzZSBpZiAoYmxrLT5tYWdpYyA9PSBYRlNfQVRUUl9MRUFGX01BR0lDKSB7CisJCQl9IGVsc2UgaWYgKGJsay0+bWFnaWMgPT0gWEZTX0FUVFJfTEVBRl9NQUdJQykgewogCQkJCS8qIHBhdGhfc2hpZnQoKSBnaXZlcyBFTk9FTlQgKi8KIAkJCQlyZXR2YWwgPSBYRlNfRVJST1IoRU5PQVRUUik7CiAJCQl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2Vycm9yLmggYi9mcy94ZnMveGZzX2Vycm9yLmgKaW5kZXggYmM0MzE2My4uMDg5M2UxNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19lcnJvci5oCisrKyBiL2ZzL3hmcy94ZnNfZXJyb3IuaApAQCAtMTgsMTQgKzE4LDYgQEAKICNpZm5kZWYJX19YRlNfRVJST1JfSF9fCiAjZGVmaW5lCV9fWEZTX0VSUk9SX0hfXwogCi0jZGVmaW5lIFhGU19FUkVDT1ZFUgkxCS8qIEZhaWx1cmUgdG8gcmVjb3ZlciBsb2cgKi8KLSNkZWZpbmUgWEZTX0VMT0dTVEFUCTIJLyogRmFpbHVyZSB0byBzdGF0IGxvZyBpbiB1c2VyIHNwYWNlICovCi0jZGVmaW5lIFhGU19FTk9MT0dTUEFDRQkzCS8qIFJlc2VydmF0aW9uIHRvbyBsYXJnZSAqLwotI2RlZmluZSBYRlNfRU5PVFNVUAk0CS8qIE9wZXJhdGlvbiBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lCVhGU19FTk9MU04JNQkvKiBDYW4ndCBmaW5kIHRoZSBsc24geW91IGFza2VkIGZvciAqLwotI2RlZmluZSBYRlNfRU5PVEZPVU5ECTYKLSNkZWZpbmUgWEZTX0VOT1RYRlMJNwkvKiBOb3QgWEZTIGZpbGVzeXN0ZW0gKi8KLQogI2lmZGVmIERFQlVHCiAjZGVmaW5lCVhGU19FUlJPUl9OVFJBUAkxMAogZXh0ZXJuIGludAl4ZnNfZXRyYXBbWEZTX0VSUk9SX05UUkFQXTsKQEAgLTE3NSw2ICsxNjcsNyBAQAogI2RlZmluZQkJWEZTX1BUQUdfU0hVVERPV05fQ09SUlVQVAkweDAwMDAwMDEwCiAjZGVmaW5lCQlYRlNfUFRBR19TSFVURE9XTl9JT0VSUk9SCTB4MDAwMDAwMjAKICNkZWZpbmUJCVhGU19QVEFHX1NIVVRET1dOX0xPR0VSUk9SCTB4MDAwMDAwNDAKKyNkZWZpbmUJCVhGU19QVEFHX0ZTQkxPQ0tfWkVSTwkJMHgwMDAwMDA4MAogCiBzdHJ1Y3QgeGZzX21vdW50OwogLyogUFJJTlRGTElLRTQgKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5jCmluZGV4IDZjZjZkODcuLjZkYmE3ODEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmMKKysrIGIvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uYwpAQCAtMzMsOSArMzMsNiBAQAoga21lbV96b25lX3QJKnhmc19lZmRfem9uZTsKIAogU1RBVElDIHZvaWQJeGZzX2VmaV9pdGVtX3VubG9jayh4ZnNfZWZpX2xvZ19pdGVtX3QgKik7Ci1TVEFUSUMgdm9pZAl4ZnNfZWZpX2l0ZW1fYWJvcnQoeGZzX2VmaV9sb2dfaXRlbV90ICopOwotU1RBVElDIHZvaWQJeGZzX2VmZF9pdGVtX2Fib3J0KHhmc19lZmRfbG9nX2l0ZW1fdCAqKTsKLQogCiB2b2lkCiB4ZnNfZWZpX2l0ZW1fZnJlZSh4ZnNfZWZpX2xvZ19pdGVtX3QgKmVmaXApCkBAIC0xODQsNyArMTgxLDcgQEAKIHhmc19lZmlfaXRlbV91bmxvY2soeGZzX2VmaV9sb2dfaXRlbV90ICplZmlwKQogewogCWlmIChlZmlwLT5lZmlfaXRlbS5saV9mbGFncyAmIFhGU19MSV9BQk9SVEVEKQotCQl4ZnNfZWZpX2l0ZW1fYWJvcnQoZWZpcCk7CisJCXhmc19lZmlfaXRlbV9mcmVlKGVmaXApOwogCXJldHVybjsKIH0KIApAQCAtMjAyLDE4ICsxOTksNiBAQAogfQogCiAvKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gbG9nZ2luZyB0aGUgRUZJIGlzIGFib3J0ZWQuCi0gKiBGcmVlIHVwIHRoZSBFRkkgYW5kIHJldHVybi4gIE5vIG5lZWQgdG8gY2xlYW4gdXAgdGhlIHNsb3QgZm9yCi0gKiB0aGUgaXRlbSBpbiB0aGUgdHJhbnNhY3Rpb24uICBUaGF0IHdhcyBkb25lIGJ5IHRoZSB1bnBpbiBjb2RlCi0gKiB3aGljaCBpcyBjYWxsZWQgcHJpb3IgdG8gdGhpcyByb3V0aW5lIGluIHRoZSBhYm9ydC9mcy1zaHV0ZG93biBwYXRoLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2VmaV9pdGVtX2Fib3J0KHhmc19lZmlfbG9nX2l0ZW1fdCAqZWZpcCkKLXsKLQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKLX0KLQotLyoKICAqIFRoZXJlIGlzbid0IG11Y2ggeW91IGNhbiBkbyB0byBwdXNoIG9uIGFuIGVmaSBpdGVtLiAgSXQgaXMgc2ltcGx5CiAgKiBzdHVjayB3YWl0aW5nIGZvciBhbGwgb2YgaXRzIGNvcnJlc3BvbmRpbmcgZWZkIGl0ZW1zIHRvIGJlCiAgKiBjb21taXR0ZWQgdG8gZGlzay4KQEAgLTI1NSw3ICsyNDAsNiBAQAogCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19lZmlfaXRlbV9jb21taXR0ZWQsCiAJLmlvcF9wdXNoCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZpX2l0ZW1fcHVzaCwKLQkuaW9wX2Fib3J0CT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfZWZpX2l0ZW1fYWJvcnQsCiAJLmlvcF9wdXNoYnVmCT0gTlVMTCwKIAkuaW9wX2NvbW1pdHRpbmcgPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19lZmlfaXRlbV9jb21taXR0aW5nCkBAIC0zODYsMzMgKzM3MCw2IEBACiAJfQogfQogCi0vKgotICogVGhpcyBpcyBjYWxsZWQgd2hlbiB0aGUgdHJhbnNhY3Rpb24gdGhhdCBzaG91bGQgYmUgY29tbWl0dGluZyB0aGUKLSAqIEVGRCBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBFRkkgaXMgYWJvcnRlZC4gIFRoZSBjb21taXR0ZWQgYW5kCi0gKiBjYW5jZWxlZCBmbGFncyBhcmUgdXNlZCB0byBjb29yZGluYXRlIHRoZSBmcmVlaW5nIG9mIHRoZSBFRkkgYW5kCi0gKiB0aGUgcmVmZXJlbmNlcyBieSB0aGUgdHJhbnNhY3Rpb24gdGhhdCBjb21taXR0ZWQgaXQuCi0gKi8KLVNUQVRJQyB2b2lkCi14ZnNfZWZpX2NhbmNlbCgKLQl4ZnNfZWZpX2xvZ19pdGVtX3QJKmVmaXApCi17Ci0JeGZzX21vdW50X3QJKm1wOwotCVNQTERFQ0wocyk7Ci0KLQltcCA9IGVmaXAtPmVmaV9pdGVtLmxpX21vdW50cDsKLQlBSUxfTE9DSyhtcCwgcyk7Ci0JaWYgKGVmaXAtPmVmaV9mbGFncyAmIFhGU19FRklfQ09NTUlUVEVEKSB7Ci0JCS8qCi0JCSAqIHhmc190cmFuc19kZWxldGVfYWlsKCkgZHJvcHMgdGhlIEFJTCBsb2NrLgotCQkgKi8KLQkJeGZzX3RyYW5zX2RlbGV0ZV9haWwobXAsICh4ZnNfbG9nX2l0ZW1fdCAqKWVmaXAsIHMpOwotCQl4ZnNfZWZpX2l0ZW1fZnJlZShlZmlwKTsKLQl9IGVsc2UgewotCQllZmlwLT5lZmlfZmxhZ3MgfD0gWEZTX0VGSV9DQU5DRUxFRDsKLQkJQUlMX1VOTE9DSyhtcCwgcyk7Ci0JfQotfQotCiBTVEFUSUMgdm9pZAogeGZzX2VmZF9pdGVtX2ZyZWUoeGZzX2VmZF9sb2dfaXRlbV90ICplZmRwKQogewpAQCAtNTE0LDcgKzQ3MSw3IEBACiB4ZnNfZWZkX2l0ZW1fdW5sb2NrKHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKIHsKIAlpZiAoZWZkcC0+ZWZkX2l0ZW0ubGlfZmxhZ3MgJiBYRlNfTElfQUJPUlRFRCkKLQkJeGZzX2VmZF9pdGVtX2Fib3J0KGVmZHApOworCQl4ZnNfZWZkX2l0ZW1fZnJlZShlZmRwKTsKIAlyZXR1cm47CiB9CiAKQEAgLTU0MSwyNyArNDk4LDYgQEAKIH0KIAogLyoKLSAqIFRoZSB0cmFuc2FjdGlvbiBvZiB3aGljaCB0aGlzIEVGRCBpcyBhIHBhcnQgaGFzIGJlZW4gYWJvcnRlZC4KLSAqIEluZm9ybSBpdHMgY29tcGFuaW9uIEVGSSBvZiB0aGlzIGZhY3QgYW5kIHRoZW4gY2xlYW4gdXAgYWZ0ZXIKLSAqIG91cnNlbHZlcy4gIE5vIG5lZWQgdG8gY2xlYW4gdXAgdGhlIHNsb3QgZm9yIHRoZSBpdGVtIGluIHRoZQotICogdHJhbnNhY3Rpb24uICBUaGF0IHdhcyBkb25lIGJ5IHRoZSB1bnBpbiBjb2RlIHdoaWNoIGlzIGNhbGxlZAotICogcHJpb3IgdG8gdGhpcyByb3V0aW5lIGluIHRoZSBhYm9ydC9mcy1zaHV0ZG93biBwYXRoLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2VmZF9pdGVtX2Fib3J0KHhmc19lZmRfbG9nX2l0ZW1fdCAqZWZkcCkKLXsKLQkvKgotCSAqIElmIHdlIGdvdCBhIGxvZyBJL08gZXJyb3IsIGl0J3MgYWx3YXlzIHRoZSBjYXNlIHRoYXQgdGhlIExSIHdpdGggdGhlCi0JICogRUZJIGdvdCB1bnBpbm5lZCBhbmQgZnJlZWQgYmVmb3JlIHRoZSBFRkQgZ290IGFib3J0ZWQuIFNvIGRvbid0Ci0JICogcmVmZXJlbmNlIHRoZSBFRkkgYXQgYWxsIGluIHRoYXQgY2FzZS4KLQkgKi8KLQlpZiAoKGVmZHAtPmVmZF9pdGVtLmxpX2ZsYWdzICYgWEZTX0xJX0FCT1JURUQpID09IDApCi0JCXhmc19lZmlfY2FuY2VsKGVmZHAtPmVmZF9lZmlwKTsKLQotCXhmc19lZmRfaXRlbV9mcmVlKGVmZHApOwotfQotCi0vKgogICogVGhlcmUgaXNuJ3QgbXVjaCB5b3UgY2FuIGRvIHRvIHB1c2ggb24gYW4gZWZkIGl0ZW0uICBJdCBpcyBzaW1wbHkKICAqIHN0dWNrIHdhaXRpbmcgZm9yIHRoZSBsb2cgdG8gYmUgZmx1c2hlZCB0byBkaXNrLgogICovCkBAIC02MDIsNyArNTM4LDYgQEAKIAkuaW9wX2NvbW1pdHRlZAk9ICh4ZnNfbHNuX3QoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfZWZkX2l0ZW1fY29tbWl0dGVkLAogCS5pb3BfcHVzaAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmZF9pdGVtX3B1c2gsCi0JLmlvcF9hYm9ydAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2VmZF9pdGVtX2Fib3J0LAogCS5pb3BfcHVzaGJ1Zgk9IE5VTEwsCiAJLmlvcF9jb21taXR0aW5nID0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqLCB4ZnNfbHNuX3QpKQogCQkJCQl4ZnNfZWZkX2l0ZW1fY29tbWl0dGluZwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaCBiL2ZzL3hmcy94ZnNfZXh0ZnJlZV9pdGVtLmgKaW5kZXggMGVhNDVlZC4uMmYwNDlmNiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19leHRmcmVlX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2V4dGZyZWVfaXRlbS5oCkBAIC0zMywxNCArMzMsMTYgQEAKICAqIGNvbnZlcnNpb24gcm91dGluZS4KICAqLwogCisjaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19leHRlbnRfMzIgewotCXhmc19kZnNibm9fdAlleHRfc3RhcnQ7Ci0JeGZzX2V4dGxlbl90CWV4dF9sZW47CisJX191aW50NjRfdAlleHRfc3RhcnQ7CisJX191aW50MzJfdAlleHRfbGVuOwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfZXh0ZW50XzMyX3Q7CisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2V4dGVudF82NCB7Ci0JeGZzX2Rmc2Jub190CWV4dF9zdGFydDsKLQl4ZnNfZXh0bGVuX3QJZXh0X2xlbjsKKwlfX3VpbnQ2NF90CWV4dF9zdGFydDsKKwlfX3VpbnQzMl90CWV4dF9sZW47CiAJX191aW50MzJfdAlleHRfcGFkOwogfSB4ZnNfZXh0ZW50XzY0X3Q7CiAKQEAgLTUwLDI1ICs1MiwyNyBAQAogICogc2l6ZSBpcyBnaXZlbiBieSBlZmlfbmV4dGVudHMuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19lZmlfbG9nX2Zvcm1hdCB7Ci0JdW5zaWduZWQgc2hvcnQJCWVmaV90eXBlOwkvKiBlZmkgbG9nIGl0ZW0gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0CQllZmlfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KLQl1aW50CQkJZWZpX25leHRlbnRzOwkvKiAjIGV4dGVudHMgdG8gZnJlZSAqLworCV9fdWludDE2X3QJCWVmaV90eXBlOwkvKiBlZmkgbG9nIGl0ZW0gdHlwZSAqLworCV9fdWludDE2X3QJCWVmaV9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLworCV9fdWludDMyX3QJCWVmaV9uZXh0ZW50czsJLyogIyBleHRlbnRzIHRvIGZyZWUgKi8KIAlfX3VpbnQ2NF90CQllZmlfaWQ7CQkvKiBlZmkgaWRlbnRpZmllciAqLwogCXhmc19leHRlbnRfdAkJZWZpX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgdG8gZnJlZSAqLwogfSB4ZnNfZWZpX2xvZ19mb3JtYXRfdDsKIAorI2lmbmRlZiBIQVZFX0ZPUk1BVDMyCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZWZpX2xvZ19mb3JtYXRfMzIgewotCXVuc2lnbmVkIHNob3J0CQllZmlfdHlwZTsJLyogZWZpIGxvZyBpdGVtIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydAkJZWZpX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCi0JdWludAkJCWVmaV9uZXh0ZW50czsJLyogIyBleHRlbnRzIHRvIGZyZWUgKi8KKwlfX3VpbnQxNl90CQllZmlfdHlwZTsJLyogZWZpIGxvZyBpdGVtIHR5cGUgKi8KKwlfX3VpbnQxNl90CQllZmlfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KKwlfX3VpbnQzMl90CQllZmlfbmV4dGVudHM7CS8qICMgZXh0ZW50cyB0byBmcmVlICovCiAJX191aW50NjRfdAkJZWZpX2lkOwkJLyogZWZpIGlkZW50aWZpZXIgKi8KIAl4ZnNfZXh0ZW50XzMyX3QJCWVmaV9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIHRvIGZyZWUgKi8KIH0gX19hdHRyaWJ1dGVfXygocGFja2VkKSkgeGZzX2VmaV9sb2dfZm9ybWF0XzMyX3Q7CisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmaV9sb2dfZm9ybWF0XzY0IHsKLQl1bnNpZ25lZCBzaG9ydAkJZWZpX3R5cGU7CS8qIGVmaSBsb2cgaXRlbSB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJCWVmaV9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLwotCXVpbnQJCQllZmlfbmV4dGVudHM7CS8qICMgZXh0ZW50cyB0byBmcmVlICovCisJX191aW50MTZfdAkJZWZpX3R5cGU7CS8qIGVmaSBsb2cgaXRlbSB0eXBlICovCisJX191aW50MTZfdAkJZWZpX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCisJX191aW50MzJfdAkJZWZpX25leHRlbnRzOwkvKiAjIGV4dGVudHMgdG8gZnJlZSAqLwogCV9fdWludDY0X3QJCWVmaV9pZDsJCS8qIGVmaSBpZGVudGlmaWVyICovCiAJeGZzX2V4dGVudF82NF90CQllZmlfZXh0ZW50c1sxXTsJLyogYXJyYXkgb2YgZXh0ZW50cyB0byBmcmVlICovCiB9IHhmc19lZmlfbG9nX2Zvcm1hdF82NF90OwpAQCAtNzksMjUgKzgzLDI3IEBACiAgKiBzaXplIGlzIGdpdmVuIGJ5IGVmZF9uZXh0ZW50czsKICAqLwogdHlwZWRlZiBzdHJ1Y3QgeGZzX2VmZF9sb2dfZm9ybWF0IHsKLQl1bnNpZ25lZCBzaG9ydAkJZWZkX3R5cGU7CS8qIGVmZCBsb2cgaXRlbSB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJCWVmZF9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLwotCXVpbnQJCQllZmRfbmV4dGVudHM7CS8qICMgb2YgZXh0ZW50cyBmcmVlZCAqLworCV9fdWludDE2X3QJCWVmZF90eXBlOwkvKiBlZmQgbG9nIGl0ZW0gdHlwZSAqLworCV9fdWludDE2X3QJCWVmZF9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLworCV9fdWludDMyX3QJCWVmZF9uZXh0ZW50czsJLyogIyBvZiBleHRlbnRzIGZyZWVkICovCiAJX191aW50NjRfdAkJZWZkX2VmaV9pZDsJLyogaWQgb2YgY29ycmVzcG9uZGluZyBlZmkgKi8KIAl4ZnNfZXh0ZW50X3QJCWVmZF9leHRlbnRzWzFdOwkvKiBhcnJheSBvZiBleHRlbnRzIGZyZWVkICovCiB9IHhmc19lZmRfbG9nX2Zvcm1hdF90OwogCisjaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19lZmRfbG9nX2Zvcm1hdF8zMiB7Ci0JdW5zaWduZWQgc2hvcnQJCWVmZF90eXBlOwkvKiBlZmQgbG9nIGl0ZW0gdHlwZSAqLwotCXVuc2lnbmVkIHNob3J0CQllZmRfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KLQl1aW50CQkJZWZkX25leHRlbnRzOwkvKiAjIG9mIGV4dGVudHMgZnJlZWQgKi8KKwlfX3VpbnQxNl90CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KKwlfX3VpbnQxNl90CQllZmRfc2l6ZTsJLyogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KKwlfX3VpbnQzMl90CQllZmRfbmV4dGVudHM7CS8qICMgb2YgZXh0ZW50cyBmcmVlZCAqLwogCV9fdWludDY0X3QJCWVmZF9lZmlfaWQ7CS8qIGlkIG9mIGNvcnJlc3BvbmRpbmcgZWZpICovCiAJeGZzX2V4dGVudF8zMl90CQllZmRfZXh0ZW50c1sxXTsJLyogYXJyYXkgb2YgZXh0ZW50cyBmcmVlZCAqLwogfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKSB4ZnNfZWZkX2xvZ19mb3JtYXRfMzJfdDsKKyNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB4ZnNfZWZkX2xvZ19mb3JtYXRfNjQgewotCXVuc2lnbmVkIHNob3J0CQllZmRfdHlwZTsJLyogZWZkIGxvZyBpdGVtIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydAkJZWZkX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCi0JdWludAkJCWVmZF9uZXh0ZW50czsJLyogIyBvZiBleHRlbnRzIGZyZWVkICovCisJX191aW50MTZfdAkJZWZkX3R5cGU7CS8qIGVmZCBsb2cgaXRlbSB0eXBlICovCisJX191aW50MTZfdAkJZWZkX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCisJX191aW50MzJfdAkJZWZkX25leHRlbnRzOwkvKiAjIG9mIGV4dGVudHMgZnJlZWQgKi8KIAlfX3VpbnQ2NF90CQllZmRfZWZpX2lkOwkvKiBpZCBvZiBjb3JyZXNwb25kaW5nIGVmaSAqLwogCXhmc19leHRlbnRfNjRfdAkJZWZkX2V4dGVudHNbMV07CS8qIGFycmF5IG9mIGV4dGVudHMgZnJlZWQgKi8KIH0geGZzX2VmZF9sb2dfZm9ybWF0XzY0X3Q7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2ZzLmggYi9mcy94ZnMveGZzX2ZzLmgKaW5kZXggMGYwYWQxNS4uMTMzNTQ0OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19mcy5oCisrKyBiL2ZzL3hmcy94ZnNfZnMuaApAQCAtMjIsOCArMjIsNiBAQAogICogU0dJJ3MgWEZTIGZpbGVzeXN0ZW0ncyBtYWpvciBzdHVmZiAoY29uc3RhbnRzLCBzdHJ1Y3R1cmVzKQogICovCiAKLSNkZWZpbmUgWEZTX05BTUUJInhmcyIKLQogLyoKICAqIERpcmVjdCBJL08gYXR0cmlidXRlIHJlY29yZCB1c2VkIHdpdGggWEZTX0lPQ19ESU9JTkZPCiAgKiBkX21pbmlvc3ogaXMgdGhlIG1pbiB4ZmVyIHNpemUsIHhmZXIgc2l6ZSBtdWx0aXBsZSBhbmQgZmlsZSBzZWVrIG9mZnNldApAQCAtNDI2LDExICs0MjQsNyBAQAogCQkJCSAtIChjaGFyICopICYoaGFuZGxlKSkJCQkgIFwKIAkJCQkgKyAoaGFuZGxlKS5oYV9maWQueGZzX2ZpZF9sZW4pCiAKLSNkZWZpbmUgWEZTX0hBTkRMRV9DTVAoaDEsIGgyKQltZW1jbXAoaDEsIGgyLCBzaXplb2YoeGZzX2hhbmRsZV90KSkKLQotI2RlZmluZSBGU0hTSVpFCQlzaXplb2YoZnNpZF90KQotCi0vKiAKKy8qCiAgKiBGbGFncyBmb3IgZ29pbmcgZG93biBvcGVyYXRpb24KICAqLwogI2RlZmluZSBYRlNfRlNPUF9HT0lOR19GTEFHU19ERUZBVUxUCQkweDAJLyogZ29pbmcgZG93biAqLwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2MuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jLmMKaW5kZXggMzMxNjRhOC4uYTQ0NmU1YSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2MuYworKysgYi9mcy94ZnMveGZzX2lhbGxvYy5jCkBAIC00NTgsNyArNDU4LDcgQEAKIAkJICovCiAJCWlmIChYRlNfRk9SQ0VEX1NIVVRET1dOKG1wKSkgewogCQkJdXBfcmVhZCgmbXAtPm1fcGVyYWdsb2NrKTsKLQkJCXJldHVybiAoeGZzX2J1Zl90ICopMDsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJCWFnbm8rKzsKIAkJaWYgKGFnbm8gPj0gYWdjb3VudCkKQEAgLTQ2Niw3ICs0NjYsNyBAQAogCQlpZiAoYWdubyA9PSBwYWdubykgewogCQkJaWYgKGZsYWdzID09IDApIHsKIAkJCQl1cF9yZWFkKCZtcC0+bV9wZXJhZ2xvY2spOwotCQkJCXJldHVybiAoeGZzX2J1Zl90ICopMDsKKwkJCQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJCWZsYWdzID0gMDsKIAkJfQpAQCAtNTI5LDEwICs1MjksMTAgQEAKIAlpbnQJCW9mZnNldDsJCS8qIGluZGV4IG9mIGlub2RlIGluIGNodW5rICovCiAJeGZzX2FnaW5vX3QJcGFnaW5vOwkJLyogcGFyZW50J3MgYS5nLiByZWxhdGl2ZSBpbm9kZSAjICovCiAJeGZzX2FnbnVtYmVyX3QJcGFnbm87CQkvKiBwYXJlbnQncyBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwotCXhmc19pbm9idF9yZWNfdAlyZWM7CQkvKiBpbm9kZSBhbGxvY2F0aW9uIHJlY29yZCAqLworCXhmc19pbm9idF9yZWNfaW5jb3JlX3QgcmVjOwkvKiBpbm9kZSBhbGxvY2F0aW9uIHJlY29yZCAqLwogCXhmc19hZ251bWJlcl90CXRhZ25vOwkJLyogdGVzdGluZyBhbGxvY2F0aW9uIGdyb3VwIG51bWJlciAqLwogCXhmc19idHJlZV9jdXJfdAkqdGN1cjsJCS8qIHRlbXAgY3Vyc29yICovCi0JeGZzX2lub2J0X3JlY190CXRyZWM7CQkvKiB0ZW1wIGlub2RlIGFsbG9jYXRpb24gcmVjb3JkICovCisJeGZzX2lub2J0X3JlY19pbmNvcmVfdCB0cmVjOwkvKiB0ZW1wIGlub2RlIGFsbG9jYXRpb24gcmVjb3JkICovCiAKIAogCWlmICgqSU9fYWdicCA9PSBOVUxMKSB7CkBAIC05NDUsNyArOTQ1LDcgQEAKIAlpbnQJCWlsZW47CS8qIGlub2RlcyBpbiBhbiBpbm9kZSBjbHVzdGVyICovCiAJeGZzX21vdW50X3QJKm1wOwkvKiBtb3VudCBzdHJ1Y3R1cmUgZm9yIGZpbGVzeXN0ZW0gKi8KIAlpbnQJCW9mZjsJLyogb2Zmc2V0IG9mIGlub2RlIGluIGlub2RlIGNodW5rICovCi0JeGZzX2lub2J0X3JlY190CXJlYzsJLyogYnRyZWUgcmVjb3JkICovCisJeGZzX2lub2J0X3JlY19pbmNvcmVfdCByZWM7CS8qIGJ0cmVlIHJlY29yZCAqLwogCiAJbXAgPSB0cC0+dF9tb3VudHA7CiAKQEAgLTExOTUsNiArMTE5NSw3IEBACiAJCQkJCSIoMHglbGx4KSIsCiAJCQkJCWlubywgWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pKTsKIAkJfQorCQl4ZnNfc3RhY2tfdHJhY2UoKTsKICNlbmRpZiAvKiBERUJVRyAqLwogCQlyZXR1cm4gWEZTX0VSUk9SKEVJTlZBTCk7CiAJfQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYyBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmMKaW5kZXggNjE2ZWVlYi4uOGNkZWVhZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuYworKysgYi9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5jCkBAIC01NjgsNyArNTY4LDcgQEAKIAkvKgogCSAqIE1ha2UgYSBrZXkgb3V0IG9mIHRoZSByZWNvcmQgZGF0YSB0byBiZSBpbnNlcnRlZCwgYW5kIHNhdmUgaXQuCiAJICovCi0Ja2V5LmlyX3N0YXJ0aW5vID0gcmVjcC0+aXJfc3RhcnRpbm87IC8qIElOVF86IGRpcmVjdCBjb3B5ICovCisJa2V5LmlyX3N0YXJ0aW5vID0gcmVjcC0+aXJfc3RhcnRpbm87CiAJb3B0ciA9IHB0ciA9IGN1ci0+YmNfcHRyc1tsZXZlbF07CiAJLyoKIAkgKiBJZiB3ZSdyZSBvZmYgdGhlIGxlZnQgZWRnZSwgcmV0dXJuIGZhaWx1cmUuCkBAIC02MDAsNyArNjAwLDcgQEAKIAl9CiAjZW5kaWYKIAluYm5vID0gTlVMTEFHQkxPQ0s7Ci0JbmN1ciA9ICh4ZnNfYnRyZWVfY3VyX3QgKikwOworCW5jdXIgPSBOVUxMOwogCS8qCiAJICogSWYgdGhlIGJsb2NrIGlzIGZ1bGwsIHdlIGNhbid0IGluc2VydCB0aGUgbmV3IGVudHJ5IHVudGlsIHdlCiAJICogbWFrZSB0aGUgYmxvY2sgdW4tZnVsbC4KQEAgLTY0MSw3ICs2NDEsNyBAQAogCQkJCQkJcmV0dXJuIGVycm9yOwogI2VuZGlmCiAJCQkJCXB0ciA9IGN1ci0+YmNfcHRyc1tsZXZlbF07Ci0JCQkJCW5yZWMuaXJfc3RhcnRpbm8gPSBua2V5LmlyX3N0YXJ0aW5vOyAvKiBJTlRfOiBkaXJlY3QgY29weSAqLworCQkJCQlucmVjLmlyX3N0YXJ0aW5vID0gbmtleS5pcl9zdGFydGlubzsKIAkJCQl9IGVsc2UgewogCQkJCQkvKgogCQkJCQkgKiBPdGhlcndpc2UgdGhlIGluc2VydCBmYWlscy4KQEAgLTY4MSw3ICs2ODEsNyBAQAogCQlpZiAoKGVycm9yID0geGZzX2J0cmVlX2NoZWNrX3NwdHIoY3VyLCAqYm5vcCwgbGV2ZWwpKSkKIAkJCXJldHVybiBlcnJvcjsKICNlbmRpZgotCQlrcFtwdHIgLSAxXSA9IGtleTsgLyogSU5UXzogc3RydWN0IGNvcHkgKi8KKwkJa3BbcHRyIC0gMV0gPSBrZXk7CiAJCXBwW3B0ciAtIDFdID0gY3B1X3RvX2JlMzIoKmJub3ApOwogCQludW1yZWNzKys7CiAJCWJsb2NrLT5iYl9udW1yZWNzID0gY3B1X3RvX2JlMTYobnVtcmVjcyk7CkBAIC02OTgsNyArNjk4LDcgQEAKIAkJICogTm93IHN0dWZmIHRoZSBuZXcgcmVjb3JkIGluLCBidW1wIG51bXJlY3MKIAkJICogYW5kIGxvZyB0aGUgbmV3IGRhdGEuCiAJCSAqLwotCQlycFtwdHIgLSAxXSA9ICpyZWNwOyAvKiBJTlRfOiBzdHJ1Y3QgY29weSAqLworCQlycFtwdHIgLSAxXSA9ICpyZWNwOwogCQludW1yZWNzKys7CiAJCWJsb2NrLT5iYl9udW1yZWNzID0gY3B1X3RvX2JlMTYobnVtcmVjcyk7CiAJCXhmc19pbm9idF9sb2dfcmVjcyhjdXIsIGJwLCBwdHIsIG51bXJlY3MpOwpAQCAtNzMxLDcgKzczMSw3IEBACiAJICovCiAJKmJub3AgPSBuYm5vOwogCWlmIChuYm5vICE9IE5VTExBR0JMT0NLKSB7Ci0JCSpyZWNwID0gbnJlYzsgLyogSU5UXzogc3RydWN0IGNvcHkgKi8KKwkJKnJlY3AgPSBucmVjOwogCQkqY3VycCA9IG5jdXI7CiAJfQogCSpzdGF0ID0gMTsKQEAgLTg3OCw3ICs4NzgsNyBAQAogCQkgKi8KIAkJYnAgPSBjdXItPmJjX2J1ZnNbbGV2ZWxdOwogCQlpZiAoYnAgJiYgWEZTX0JVRl9BRERSKGJwKSAhPSBkKQotCQkJYnAgPSAoeGZzX2J1Zl90ICopMDsKKwkJCWJwID0gTlVMTDsKIAkJaWYgKCFicCkgewogCQkJLyoKIAkJCSAqIE5lZWQgdG8gZ2V0IGEgbmV3IGJ1ZmZlci4gIFJlYWQgaXQsIHRoZW4KQEAgLTk1MCwxMiArOTUwLDEyIEBACiAJCQkJCXhmc19pbm9idF9rZXlfdAkqa2twOwogCiAJCQkJCWtrcCA9IGtrYmFzZSArIGtleW5vIC0gMTsKLQkJCQkJc3RhcnRpbm8gPSBJTlRfR0VUKGtrcC0+aXJfc3RhcnRpbm8sIEFSQ0hfQ09OVkVSVCk7CisJCQkJCXN0YXJ0aW5vID0gYmUzMl90b19jcHUoa2twLT5pcl9zdGFydGlubyk7CiAJCQkJfSBlbHNlIHsKIAkJCQkJeGZzX2lub2J0X3JlY190CSprcnA7CiAKIAkJCQkJa3JwID0ga3JiYXNlICsga2V5bm8gLSAxOwotCQkJCQlzdGFydGlubyA9IElOVF9HRVQoa3JwLT5pcl9zdGFydGlubywgQVJDSF9DT05WRVJUKTsKKwkJCQkJc3RhcnRpbm8gPSBiZTMyX3RvX2NwdShrcnAtPmlyX3N0YXJ0aW5vKTsKIAkJCQl9CiAJCQkJLyoKIAkJCQkgKiBDb21wdXRlIGRpZmZlcmVuY2UgdG8gZ2V0IG5leHQgZGlyZWN0aW9uLgpAQCAtMTExNyw3ICsxMTE3LDcgQEAKIAkJaWYgKChlcnJvciA9IHhmc19idHJlZV9jaGVja19zcHRyKGN1ciwgYmUzMl90b19jcHUoKnJwcCksIGxldmVsKSkpCiAJCQlyZXR1cm4gZXJyb3I7CiAjZW5kaWYKLQkJKmxwcCA9ICpycHA7IC8qIElOVF86IG5vLWNoYW5nZSBjb3B5ICovCisJCSpscHAgPSAqcnBwOwogCQl4ZnNfaW5vYnRfbG9nX3B0cnMoY3VyLCBsYnAsIG5yZWMsIG5yZWMpOwogCX0KIAkvKgpAQCAtMTE2MCw3ICsxMTYwLDcgQEAKIAl9IGVsc2UgewogCQltZW1tb3ZlKHJycCwgcnJwICsgMSwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpycnApKTsKIAkJeGZzX2lub2J0X2xvZ19yZWNzKGN1ciwgcmJwLCAxLCBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykpOwotCQlrZXkuaXJfc3RhcnRpbm8gPSBycnAtPmlyX3N0YXJ0aW5vOyAvKiBJTlRfOiBkaXJlY3QgY29weSAqLworCQlrZXkuaXJfc3RhcnRpbm8gPSBycnAtPmlyX3N0YXJ0aW5vOwogCQlya3AgPSAma2V5OwogCX0KIAkvKgpAQCAtMTI5NywxMyArMTI5NywxMyBAQAogCSAqLwogCWtwID0gWEZTX0lOT0JUX0tFWV9BRERSKG5ldywgMSwgY3VyKTsKIAlpZiAoYmUxNl90b19jcHUobGVmdC0+YmJfbGV2ZWwpID4gMCkgewotCQlrcFswXSA9ICpYRlNfSU5PQlRfS0VZX0FERFIobGVmdCwgMSwgY3VyKTsgLyogSU5UXzogc3RydWN0IGNvcHkgKi8KLQkJa3BbMV0gPSAqWEZTX0lOT0JUX0tFWV9BRERSKHJpZ2h0LCAxLCBjdXIpOyAvKiBJTlRfOiBzdHJ1Y3QgY29weSAqLworCQlrcFswXSA9ICpYRlNfSU5PQlRfS0VZX0FERFIobGVmdCwgMSwgY3VyKTsKKwkJa3BbMV0gPSAqWEZTX0lOT0JUX0tFWV9BRERSKHJpZ2h0LCAxLCBjdXIpOwogCX0gZWxzZSB7CiAJCXJwID0gWEZTX0lOT0JUX1JFQ19BRERSKGxlZnQsIDEsIGN1cik7Ci0JCUlOVF9DT1BZKGtwWzBdLmlyX3N0YXJ0aW5vLCBycC0+aXJfc3RhcnRpbm8sIEFSQ0hfQ09OVkVSVCk7CisJCWtwWzBdLmlyX3N0YXJ0aW5vID0gcnAtPmlyX3N0YXJ0aW5vOwogCQlycCA9IFhGU19JTk9CVF9SRUNfQUREUihyaWdodCwgMSwgY3VyKTsKLQkJSU5UX0NPUFkoa3BbMV0uaXJfc3RhcnRpbm8sIHJwLT5pcl9zdGFydGlubywgQVJDSF9DT05WRVJUKTsKKwkJa3BbMV0uaXJfc3RhcnRpbm8gPSBycC0+aXJfc3RhcnRpbm87CiAJfQogCXhmc19pbm9idF9sb2dfa2V5cyhjdXIsIG5icCwgMSwgMik7CiAJLyoKQEAgLTE0MTAsOCArMTQxMCw4IEBACiAJCWlmICgoZXJyb3IgPSB4ZnNfYnRyZWVfY2hlY2tfc3B0cihjdXIsIGJlMzJfdG9fY3B1KCpscHApLCBsZXZlbCkpKQogCQkJcmV0dXJuIGVycm9yOwogI2VuZGlmCi0JCSpya3AgPSAqbGtwOyAvKiBJTlRfOiBubyBjaGFuZ2UgY29weSAqLwotCQkqcnBwID0gKmxwcDsgLyogSU5UXzogbm8gY2hhbmdlIGNvcHkgKi8KKwkJKnJrcCA9ICpsa3A7CisJCSpycHAgPSAqbHBwOwogCQl4ZnNfaW5vYnRfbG9nX2tleXMoY3VyLCByYnAsIDEsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSArIDEpOwogCQl4ZnNfaW5vYnRfbG9nX3B0cnMoY3VyLCByYnAsIDEsIGJlMTZfdG9fY3B1KHJpZ2h0LT5iYl9udW1yZWNzKSArIDEpOwogCX0gZWxzZSB7CkBAIC0xNDIwLDcgKzE0MjAsNyBAQAogCQltZW1tb3ZlKHJycCArIDEsIHJycCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpycnApKTsKIAkJKnJycCA9ICpscnA7CiAJCXhmc19pbm9idF9sb2dfcmVjcyhjdXIsIHJicCwgMSwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICsgMSk7Ci0JCWtleS5pcl9zdGFydGlubyA9IHJycC0+aXJfc3RhcnRpbm87IC8qIElOVF86IGRpcmVjdCBjb3B5ICovCisJCWtleS5pcl9zdGFydGlubyA9IHJycC0+aXJfc3RhcnRpbm87CiAJCXJrcCA9ICZrZXk7CiAJfQogCS8qCkBAIC0xNTU5LDcgKzE1NTksNyBAQAogCQlycnAgPSBYRlNfSU5PQlRfUkVDX0FERFIocmlnaHQsIDEsIGN1cik7CiAJCW1lbWNweShycnAsIGxycCwgYmUxNl90b19jcHUocmlnaHQtPmJiX251bXJlY3MpICogc2l6ZW9mKCpycnApKTsKIAkJeGZzX2lub2J0X2xvZ19yZWNzKGN1ciwgcmJwLCAxLCBiZTE2X3RvX2NwdShyaWdodC0+YmJfbnVtcmVjcykpOwotCQlrZXlwLT5pcl9zdGFydGlubyA9IHJycC0+aXJfc3RhcnRpbm87IC8qIElOVF86IGRpcmVjdCBjb3B5ICovCisJCWtleXAtPmlyX3N0YXJ0aW5vID0gcnJwLT5pcl9zdGFydGlubzsKIAl9CiAJLyoKIAkgKiBGaW5kIHRoZSBsZWZ0IGJsb2NrIG51bWJlciBieSBsb29raW5nIGluIHRoZSBidWZmZXIuCkBAIC0xODEzLDkgKzE4MTMsOSBAQAogCSAqIFBvaW50IHRvIHRoZSByZWNvcmQgYW5kIGV4dHJhY3QgaXRzIGRhdGEuCiAJICovCiAJcmVjID0gWEZTX0lOT0JUX1JFQ19BRERSKGJsb2NrLCBwdHIsIGN1cik7Ci0JKmlubyA9IElOVF9HRVQocmVjLT5pcl9zdGFydGlubywgQVJDSF9DT05WRVJUKTsKLQkqZmNudCA9IElOVF9HRVQocmVjLT5pcl9mcmVlY291bnQsIEFSQ0hfQ09OVkVSVCk7Ci0JKmZyZWUgPSBJTlRfR0VUKHJlYy0+aXJfZnJlZSwgQVJDSF9DT05WRVJUKTsKKwkqaW5vID0gYmUzMl90b19jcHUocmVjLT5pcl9zdGFydGlubyk7CisJKmZjbnQgPSBiZTMyX3RvX2NwdShyZWMtPmlyX2ZyZWVjb3VudCk7CisJKmZyZWUgPSBiZTY0X3RvX2NwdShyZWMtPmlyX2ZyZWUpOwogCSpzdGF0ID0gMTsKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MzAsMTAgKzE5MzAsMTAgQEAKIAogCWxldmVsID0gMDsKIAluYm5vID0gTlVMTEFHQkxPQ0s7Ci0JSU5UX1NFVChucmVjLmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQsIGN1ci0+YmNfcmVjLmkuaXJfc3RhcnRpbm8pOwotCUlOVF9TRVQobnJlYy5pcl9mcmVlY291bnQsIEFSQ0hfQ09OVkVSVCwgY3VyLT5iY19yZWMuaS5pcl9mcmVlY291bnQpOwotCUlOVF9TRVQobnJlYy5pcl9mcmVlLCBBUkNIX0NPTlZFUlQsIGN1ci0+YmNfcmVjLmkuaXJfZnJlZSk7Ci0JbmN1ciA9ICh4ZnNfYnRyZWVfY3VyX3QgKikwOworCW5yZWMuaXJfc3RhcnRpbm8gPSBjcHVfdG9fYmUzMihjdXItPmJjX3JlYy5pLmlyX3N0YXJ0aW5vKTsKKwlucmVjLmlyX2ZyZWVjb3VudCA9IGNwdV90b19iZTMyKGN1ci0+YmNfcmVjLmkuaXJfZnJlZWNvdW50KTsKKwlucmVjLmlyX2ZyZWUgPSBjcHVfdG9fYmU2NChjdXItPmJjX3JlYy5pLmlyX2ZyZWUpOworCW5jdXIgPSBOVUxMOwogCXBjdXIgPSBjdXI7CiAJLyoKIAkgKiBMb29wIGdvaW5nIHVwIHRoZSB0cmVlLCBzdGFydGluZyBhdCB0aGUgbGVhZiBsZXZlbC4KQEAgLTE5NjUsNyArMTk2NSw3IEBACiAJCSAqLwogCQlpZiAobmN1cikgewogCQkJcGN1ciA9IG5jdXI7Ci0JCQluY3VyID0gKHhmc19idHJlZV9jdXJfdCAqKTA7CisJCQluY3VyID0gTlVMTDsKIAkJfQogCX0gd2hpbGUgKG5ibm8gIT0gTlVMTEFHQkxPQ0spOwogCSpzdGF0ID0gaTsKQEAgLTIwNjAsOSArMjA2MCw5IEBACiAJLyoKIAkgKiBGaWxsIGluIHRoZSBuZXcgY29udGVudHMgYW5kIGxvZyB0aGVtLgogCSAqLwotCUlOVF9TRVQocnAtPmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQsIGlubyk7Ci0JSU5UX1NFVChycC0+aXJfZnJlZWNvdW50LCBBUkNIX0NPTlZFUlQsIGZjbnQpOwotCUlOVF9TRVQocnAtPmlyX2ZyZWUsIEFSQ0hfQ09OVkVSVCwgZnJlZSk7CisJcnAtPmlyX3N0YXJ0aW5vID0gY3B1X3RvX2JlMzIoaW5vKTsKKwlycC0+aXJfZnJlZWNvdW50ID0gY3B1X3RvX2JlMzIoZmNudCk7CisJcnAtPmlyX2ZyZWUgPSBjcHVfdG9fYmU2NChmcmVlKTsKIAl4ZnNfaW5vYnRfbG9nX3JlY3MoY3VyLCBicCwgcHRyLCBwdHIpOwogCS8qCiAJICogVXBkYXRpbmcgZmlyc3QgcmVjb3JkIGluIGxlYWYuIFBhc3MgbmV3IGtleSB2YWx1ZSB1cCB0byBvdXIgcGFyZW50LgpAQCAtMjA3MCw3ICsyMDcwLDcgQEAKIAlpZiAocHRyID09IDEpIHsKIAkJeGZzX2lub2J0X2tleV90CWtleTsJLyoga2V5IGNvbnRhaW5pbmcgW2lub10gKi8KIAotCQlJTlRfU0VUKGtleS5pcl9zdGFydGlubywgQVJDSF9DT05WRVJULCBpbm8pOworCQlrZXkuaXJfc3RhcnRpbm8gPSBjcHVfdG9fYmUzMihpbm8pOwogCQlpZiAoKGVycm9yID0geGZzX2lub2J0X3VwZGtleShjdXIsICZrZXksIDEpKSkKIAkJCXJldHVybiBlcnJvcjsKIAl9CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oIGIvZnMveGZzL3hmc19pYWxsb2NfYnRyZWUuaAppbmRleCBhZTM5MDRjLi4yYzBlNDk4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lhbGxvY19idHJlZS5oCisrKyBiL2ZzL3hmcy94ZnNfaWFsbG9jX2J0cmVlLmgKQEAgLTQ3LDE5ICs0NywyNCBAQAogLyoKICAqIERhdGEgcmVjb3JkIHN0cnVjdHVyZQogICovCi10eXBlZGVmIHN0cnVjdCB4ZnNfaW5vYnRfcmVjCi17Cit0eXBlZGVmIHN0cnVjdCB4ZnNfaW5vYnRfcmVjIHsKKwlfX2JlMzIJCWlyX3N0YXJ0aW5vOwkvKiBzdGFydGluZyBpbm9kZSBudW1iZXIgKi8KKwlfX2JlMzIJCWlyX2ZyZWVjb3VudDsJLyogY291bnQgb2YgZnJlZSBpbm9kZXMgKHNldCBiaXRzKSAqLworCV9fYmU2NAkJaXJfZnJlZTsJLyogZnJlZSBpbm9kZSBtYXNrICovCit9IHhmc19pbm9idF9yZWNfdDsKKwordHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2J0X3JlY19pbmNvcmUgewogCXhmc19hZ2lub190CWlyX3N0YXJ0aW5vOwkvKiBzdGFydGluZyBpbm9kZSBudW1iZXIgKi8KIAlfX2ludDMyX3QJaXJfZnJlZWNvdW50OwkvKiBjb3VudCBvZiBmcmVlIGlub2RlcyAoc2V0IGJpdHMpICovCiAJeGZzX2lub2ZyZWVfdAlpcl9mcmVlOwkvKiBmcmVlIGlub2RlIG1hc2sgKi8KLX0geGZzX2lub2J0X3JlY190OworfSB4ZnNfaW5vYnRfcmVjX2luY29yZV90OworCiAKIC8qCiAgKiBLZXkgc3RydWN0dXJlCiAgKi8KLXR5cGVkZWYgc3RydWN0IHhmc19pbm9idF9rZXkKLXsKLQl4ZnNfYWdpbm9fdAlpcl9zdGFydGlubzsJLyogc3RhcnRpbmcgaW5vZGUgbnVtYmVyICovCit0eXBlZGVmIHN0cnVjdCB4ZnNfaW5vYnRfa2V5IHsKKwlfX2JlMzIJCWlyX3N0YXJ0aW5vOwkvKiBzdGFydGluZyBpbm9kZSBudW1iZXIgKi8KIH0geGZzX2lub2J0X2tleV90OwogCiAvKiBidHJlZSBwb2ludGVyIHR5cGUgKi8KQEAgLTc3LDcgKzgyLDcgQEAKICNkZWZpbmUJWEZTX0lOT0JUX0lTX0ZSRUUocnAsaSkJCVwKIAkJKCgocnApLT5pcl9mcmVlICYgWEZTX0lOT0JUX01BU0soaSkpICE9IDApCiAjZGVmaW5lCVhGU19JTk9CVF9JU19GUkVFX0RJU0socnAsaSkJXAotCQkoKElOVF9HRVQoKHJwKS0+aXJfZnJlZSxBUkNIX0NPTlZFUlQpICYgWEZTX0lOT0JUX01BU0soaSkpICE9IDApCisJCSgoYmU2NF90b19jcHUoKHJwKS0+aXJfZnJlZSkgJiBYRlNfSU5PQlRfTUFTSyhpKSkgIT0gMCkKICNkZWZpbmUJWEZTX0lOT0JUX1NFVF9GUkVFKHJwLGkpCSgocnApLT5pcl9mcmVlIHw9IFhGU19JTk9CVF9NQVNLKGkpKQogI2RlZmluZQlYRlNfSU5PQlRfQ0xSX0ZSRUUocnAsaSkJKChycCktPmlyX2ZyZWUgJj0gflhGU19JTk9CVF9NQVNLKGkpKQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lnZXQuYyBiL2ZzL3hmcy94ZnNfaWdldC5jCmluZGV4IDA3MjRkZjcuLmI3M2QyMTYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaWdldC5jCisrKyBiL2ZzL3hmcy94ZnNfaWdldC5jCkBAIC01MCw3ICs1MCw3IEBACiB4ZnNfaWhhc2hfaW5pdCh4ZnNfbW91bnRfdCAqbXApCiB7CiAJX191aW50NjRfdAlpY291bnQ7Ci0JdWludAkJaSwgZmxhZ3MgPSBLTV9TTEVFUCB8IEtNX01BWUZBSUw7CisJdWludAkJaTsKIAogCWlmICghbXAtPm1faWhzaXplKSB7CiAJCWljb3VudCA9IG1wLT5tX21heGljb3VudCA/IG1wLT5tX21heGljb3VudCA6CkBAIC02MSwxNCArNjEsMTMgQEAKIAkJCQkJKDY0ICogTkJQUCkgLyBzaXplb2YoeGZzX2loYXNoX3QpKTsKIAl9CiAKLQl3aGlsZSAoIShtcC0+bV9paGFzaCA9ICh4ZnNfaWhhc2hfdCAqKWttZW1femFsbG9jKG1wLT5tX2loc2l6ZSAqCi0JCQkJCQlzaXplb2YoeGZzX2loYXNoX3QpLCBmbGFncykpKSB7Ci0JCWlmICgobXAtPm1faWhzaXplID4+PSAxKSA8PSBOQlBQKQotCQkJZmxhZ3MgPSBLTV9TTEVFUDsKLQl9Ci0JZm9yIChpID0gMDsgaSA8IG1wLT5tX2loc2l6ZTsgaSsrKSB7CisJbXAtPm1faWhhc2ggPSBrbWVtX3phbGxvY19ncmVlZHkoJm1wLT5tX2loc2l6ZSwKKwkJCQkJIE5CUEMgKiBzaXplb2YoeGZzX2loYXNoX3QpLAorCQkJCQkgbXAtPm1faWhzaXplICogc2l6ZW9mKHhmc19paGFzaF90KSwKKwkJCQkJIEtNX1NMRUVQIHwgS01fTUFZRkFJTCB8IEtNX0xBUkdFKTsKKwltcC0+bV9paHNpemUgLz0gc2l6ZW9mKHhmc19paGFzaF90KTsKKwlmb3IgKGkgPSAwOyBpIDwgbXAtPm1faWhzaXplOyBpKyspCiAJCXJ3bG9ja19pbml0KCYobXAtPm1faWhhc2hbaV0uaWhfbG9jaykpOwotCX0KIH0KIAogLyoKQEAgLTc3LDcgKzc2LDcgQEAKIHZvaWQKIHhmc19paGFzaF9mcmVlKHhmc19tb3VudF90ICptcCkKIHsKLQlrbWVtX2ZyZWUobXAtPm1faWhhc2gsIG1wLT5tX2loc2l6ZSpzaXplb2YoeGZzX2loYXNoX3QpKTsKKwlrbWVtX2ZyZWUobXAtPm1faWhhc2gsIG1wLT5tX2loc2l6ZSAqIHNpemVvZih4ZnNfaWhhc2hfdCkpOwogCW1wLT5tX2loYXNoID0gTlVMTDsKIH0KIApAQCAtOTUsNyArOTQsNyBAQAogCW1wLT5tX2Noc2l6ZSA9IG1pbl90KHVpbnQsIG1wLT5tX2Noc2l6ZSwgbXAtPm1faWhzaXplKTsKIAltcC0+bV9jaGFzaCA9ICh4ZnNfY2hhc2hfdCAqKWttZW1femFsbG9jKG1wLT5tX2Noc2l6ZQogCQkJCQkJICogc2l6ZW9mKHhmc19jaGFzaF90KSwKLQkJCQkJCSBLTV9TTEVFUCk7CisJCQkJCQkgS01fU0xFRVAgfCBLTV9MQVJHRSk7CiAJZm9yIChpID0gMDsgaSA8IG1wLT5tX2Noc2l6ZTsgaSsrKSB7CiAJCXNwaW5sb2NrX2luaXQoJm1wLT5tX2NoYXNoW2ldLmNoX2xvY2ssInhmc2hhc2giKTsKIAl9CkBAIC0yNDQsNyArMjQzLDkgQEAKIAogCQkJCVhGU19TVEFUU19JTkMoeHNfaWdfZm91bmQpOwogCisJCQkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJCQlpcC0+aV9mbGFncyAmPSB+WEZTX0lSRUNMQUlNQUJMRTsKKwkJCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCQkJdmVyc2lvbiA9IGloLT5paF92ZXJzaW9uOwogCQkJCXJlYWRfdW5sb2NrKCZpaC0+aWhfbG9jayk7CiAJCQkJeGZzX2loYXNoX3Byb21vdGUoaWgsIGlwLCB2ZXJzaW9uKTsKQEAgLTI5MCwxNSArMjkxLDE3IEBACiAKIGZpbmlzaF9pbm9kZToKIAkJCWlmIChpcC0+aV9kLmRpX21vZGUgPT0gMCkgewotCQkJCWlmICghKGZsYWdzICYgSUdFVF9DUkVBVEUpKQorCQkJCWlmICghKGZsYWdzICYgWEZTX0lHRVRfQ1JFQVRFKSkKIAkJCQkJcmV0dXJuIEVOT0VOVDsKIAkJCQl4ZnNfaW9jb3JlX2lub2RlX3JlaW5pdChpcCk7CiAJCQl9Ci0JCisKIAkJCWlmIChsb2NrX2ZsYWdzICE9IDApCiAJCQkJeGZzX2lsb2NrKGlwLCBsb2NrX2ZsYWdzKTsKIAorCQkJc3Bpbl9sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJCWlwLT5pX2ZsYWdzICY9IH5YRlNfSVNUQUxFOworCQkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCiAJCQl2bl90cmFjZV9leGl0KHZwLCAieGZzX2lnZXQuZm91bmQiLAogCQkJCQkJKGluc3RfdCAqKV9fcmV0dXJuX2FkZHJlc3MpOwpAQCAtMzIwLDIxICszMjMsMjAgQEAKIAkgKiBSZWFkIHRoZSBkaXNrIGlub2RlIGF0dHJpYnV0ZXMgaW50byBhIG5ldyBpbm9kZSBzdHJ1Y3R1cmUgYW5kIGdldAogCSAqIGEgbmV3IHZub2RlIGZvciBpdC4gVGhpcyBzaG91bGQgYWxzbyBpbml0aWFsaXplIGlfaW5vIGFuZCBpX21vdW50LgogCSAqLwotCWVycm9yID0geGZzX2lyZWFkKG1wLCB0cCwgaW5vLCAmaXAsIGJubyk7Ci0JaWYgKGVycm9yKSB7CisJZXJyb3IgPSB4ZnNfaXJlYWQobXAsIHRwLCBpbm8sICZpcCwgYm5vLAorCQkJICAoZmxhZ3MgJiBYRlNfSUdFVF9CVUxLU1RBVCkgPyBYRlNfSU1BUF9CVUxLU1RBVCA6IDApOworCWlmIChlcnJvcikKIAkJcmV0dXJuIGVycm9yOwotCX0KIAogCXZuX3RyYWNlX2V4aXQodnAsICJ4ZnNfaWdldC5hbGxvYyIsIChpbnN0X3QgKilfX3JldHVybl9hZGRyZXNzKTsKIAogCXhmc19pbm9kZV9sb2NrX2luaXQoaXAsIHZwKTsKIAl4ZnNfaW9jb3JlX2lub2RlX2luaXQoaXApOwogCi0JaWYgKGxvY2tfZmxhZ3MgIT0gMCkgeworCWlmIChsb2NrX2ZsYWdzKQogCQl4ZnNfaWxvY2soaXAsIGxvY2tfZmxhZ3MpOwotCX0KLQkJCi0JaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkgJiYgIShmbGFncyAmIElHRVRfQ1JFQVRFKSkgeworCisJaWYgKChpcC0+aV9kLmRpX21vZGUgPT0gMCkgJiYgIShmbGFncyAmIFhGU19JR0VUX0NSRUFURSkpIHsKIAkJeGZzX2lkZXN0cm95KGlwKTsKIAkJcmV0dXJuIEVOT0VOVDsKIAl9CkBAIC0zNjksNyArMzcxLDkgQEAKIAlpaC0+aWhfbmV4dCA9IGlwOwogCWlwLT5pX3VkcXVvdCA9IGlwLT5pX2dkcXVvdCA9IE5VTEw7CiAJaWgtPmloX3ZlcnNpb24rKzsKKwlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCWlwLT5pX2ZsYWdzIHw9IFhGU19JTkVXOworCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAogCXdyaXRlX3VubG9jaygmaWgtPmloX2xvY2spOwogCkBAIC01NDgsNyArNTUyLDcgQEAKIAltcmxvY2tfaW5pdCgmaXAtPmlfaW9sb2NrLCBNUkxPQ0tfQkFSUklFUiwgInhmc2lvIiwgdnAtPnZfbnVtYmVyKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZpcC0+aV9pcGluX3dhaXQpOwogCWF0b21pY19zZXQoJmlwLT5pX3BpbmNvdW50LCAwKTsKLQlpbml0X3NlbWEoJmlwLT5pX2Zsb2NrLCAxLCAieGZzZmlubyIsIHZwLT52X251bWJlcik7CisJaW5pdG5zZW1hKCZpcC0+aV9mbG9jaywgMSwgInhmc2Zpbm8iKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaW5vZGUuYyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwppbmRleCAxZjhlY2ZmLi5jMjdkN2Q0OSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuYwpAQCAtODU0LDcgKzg1NCw4IEBACiAJeGZzX3RyYW5zX3QJKnRwLAogCXhmc19pbm9fdAlpbm8sCiAJeGZzX2lub2RlX3QJKippcHAsCi0JeGZzX2RhZGRyX3QJYm5vKQorCXhmc19kYWRkcl90CWJubywKKwl1aW50CQlpbWFwX2ZsYWdzKQogewogCXhmc19idWZfdAkqYnA7CiAJeGZzX2Rpbm9kZV90CSpkaXA7CkBAIC04NjYsNiArODY3LDcgQEAKIAlpcCA9IGttZW1fem9uZV96YWxsb2MoeGZzX2lub2RlX3pvbmUsIEtNX1NMRUVQKTsKIAlpcC0+aV9pbm8gPSBpbm87CiAJaXAtPmlfbW91bnQgPSBtcDsKKwlzcGluX2xvY2tfaW5pdCgmaXAtPmlfZmxhZ3NfbG9jayk7CiAKIAkvKgogCSAqIEdldCBwb2ludGVyJ3MgdG8gdGhlIG9uLWRpc2sgaW5vZGUgYW5kIHRoZSBidWZmZXIgY29udGFpbmluZyBpdC4KQEAgLTg3NCw3ICs4NzYsNyBAQAogCSAqIHJldHVybiBOVUxMIGFzIHdlbGwuICBTZXQgaV9ibGtubyB0byAwIHNvIHRoYXQgeGZzX2l0b2JwKCkgd2lsbAogCSAqIGtub3cgdGhhdCB0aGlzIGlzIGEgbmV3IGluY29yZSBpbm9kZS4KIAkgKi8KLQllcnJvciA9IHhmc19pdG9icChtcCwgdHAsIGlwLCAmZGlwLCAmYnAsIGJubywgMCk7CisJZXJyb3IgPSB4ZnNfaXRvYnAobXAsIHRwLCBpcCwgJmRpcCwgJmJwLCBibm8sIGltYXBfZmxhZ3MpOwogCWlmIChlcnJvcikgewogCQlrbWVtX3pvbmVfZnJlZSh4ZnNfaW5vZGVfem9uZSwgaXApOwogCQlyZXR1cm4gZXJyb3I7CkBAIC0xMTEzLDcgKzExMTUsNyBAQAogCSAqIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gbG9va2luZyBhdCB1bnRpbCB3ZSdyZSBkb25lLgogCSAqLwogCWVycm9yID0geGZzX3RyYW5zX2lnZXQodHAtPnRfbW91bnRwLCB0cCwgaW5vLAotCQkJSUdFVF9DUkVBVEUsIFhGU19JTE9DS19FWENMLCAmaXApOworCQkJCVhGU19JR0VUX0NSRUFURSwgWEZTX0lMT0NLX0VYQ0wsICZpcCk7CiAJaWYgKGVycm9yICE9IDApIHsKIAkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTIyMTMsNyArMjIxNSw5IEBACiAKIAkJCWlmIChpcCA9PSBmcmVlX2lwKSB7CiAJCQkJaWYgKHhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQkJCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCQkJCQlpcC0+aV9mbGFncyB8PSBYRlNfSVNUQUxFOworCQkJCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAKIAkJCQkJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKIAkJCQkJCXhmc19pZnVubG9jayhpcCk7CkBAIC0yMjI3LDcgKzIyMzEsOSBAQAogCiAJCQlpZiAoeGZzX2lsb2NrX25vd2FpdChpcCwgWEZTX0lMT0NLX0VYQ0wpKSB7CiAJCQkJaWYgKHhmc19pZmxvY2tfbm93YWl0KGlwKSkgeworCQkJCQlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCQkJCQlpcC0+aV9mbGFncyB8PSBYRlNfSVNUQUxFOworCQkJCQlzcGluX3VubG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAKIAkJCQkJaWYgKHhmc19pbm9kZV9jbGVhbihpcCkpIHsKIAkJCQkJCXhmc19pZnVubG9jayhpcCk7CkBAIC0yMjU3LDcgKzIyNjMsOSBAQAogCQkJCUFJTF9MT0NLKG1wLHMpOwogCQkJCWlpcC0+aWxpX2ZsdXNoX2xzbiA9IGlpcC0+aWxpX2l0ZW0ubGlfbHNuOwogCQkJCUFJTF9VTkxPQ0sobXAsIHMpOworCQkJCXNwaW5fbG9jaygmaWlwLT5pbGlfaW5vZGUtPmlfZmxhZ3NfbG9jayk7CiAJCQkJaWlwLT5pbGlfaW5vZGUtPmlfZmxhZ3MgfD0gWEZTX0lTVEFMRTsKKwkJCQlzcGluX3VubG9jaygmaWlwLT5pbGlfaW5vZGUtPmlfZmxhZ3NfbG9jayk7CiAJCQkJcHJlX2ZsdXNoZWQrKzsKIAkJCX0KIAkJCWxpcCA9IGxpcC0+bGlfYmlvX2xpc3Q7CkBAIC0yNzUzLDE5ICsyNzYxLDI5IEBACiAJCSAqIGNhbGwgYXMgdGhlIGlub2RlIHJlY2xhaW0gbWF5IGJlIGJsb2NrZWQgd2FpdGluZyBmb3IKIAkJICogdGhlIGlub2RlIHRvIGJlY29tZSB1bnBpbm5lZC4KIAkJICovCisJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBOVUxMOworCisJCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCWlmICghKGlwLT5pX2ZsYWdzICYgKFhGU19JUkVDTEFJTXxYRlNfSVJFQ0xBSU1BQkxFKSkpIHsKIAkJCWJodl92bm9kZV90CSp2cCA9IFhGU19JVE9WX05VTEwoaXApOwogCiAJCQkvKiBtYWtlIHN5bmMgY29tZSBiYWNrIGFuZCBmbHVzaCB0aGlzIGlub2RlICovCiAJCQlpZiAodnApIHsKLQkJCQlzdHJ1Y3QgaW5vZGUJKmlub2RlID0gdm5fdG9faW5vZGUodnApOworCQkJCWlub2RlID0gdm5fdG9faW5vZGUodnApOwogCiAJCQkJaWYgKCEoaW5vZGUtPmlfc3RhdGUgJgotCQkJCQkJKElfTkVXfElfRlJFRUlOR3xJX0NMRUFSKSkpCi0JCQkJCW1hcmtfaW5vZGVfZGlydHlfc3luYyhpbm9kZSk7CisJCQkJCQkoSV9ORVd8SV9GUkVFSU5HfElfQ0xFQVIpKSkgeworCQkJCQlpbm9kZSA9IGlncmFiKGlub2RlKTsKKwkJCQkJaWYgKGlub2RlKQorCQkJCQkJbWFya19pbm9kZV9kaXJ0eV9zeW5jKGlub2RlKTsKKwkJCQl9IGVsc2UKKwkJCQkJaW5vZGUgPSBOVUxMOwogCQkJfQogCQl9CisJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJd2FrZV91cCgmaXAtPmlfaXBpbl93YWl0KTsKKwkJaWYgKGlub2RlKQorCQkJaXB1dChpbm9kZSk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlLmggYi9mcy94ZnMveGZzX2lub2RlLmgKaW5kZXggZDEwYjc2ZS4uZTk2ZWIwOCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19pbm9kZS5oCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGUuaApAQCAtMjY3LDYgKzI2Nyw3IEBACiAJc2VtYV90CQkJaV9mbG9jazsJLyogaW5vZGUgZmx1c2ggbG9jayAqLwogCWF0b21pY190CQlpX3BpbmNvdW50OwkvKiBpbm9kZSBwaW4gY291bnQgKi8KIAl3YWl0X3F1ZXVlX2hlYWRfdAlpX2lwaW5fd2FpdDsJLyogaW5vZGUgcGlubmluZyB3YWl0IHF1ZXVlICovCisJc3BpbmxvY2tfdAkJaV9mbGFnc19sb2NrOwkvKiBpbm9kZSBpX2ZsYWdzIGxvY2sgKi8KICNpZmRlZiBIQVZFX1JFRkNBQ0hFCiAJc3RydWN0IHhmc19pbm9kZQkqKmlfcmVmY2FjaGU7CS8qIHB0ciB0byBlbnRyeSBpbiByZWYgY2FjaGUgKi8KIAlzdHJ1Y3QgeGZzX2lub2RlCSppX3JlbGVhc2U7CS8qIGlub2RlIHRvIHVucmVmICovCkBAIC0zODksMTEgKzM5MCwxNCBAQAogCSgoKHZmc3ApLT52ZnNfZmxhZyAmIFZGU19HUlBJRCkgfHwgKChwaXApLT5pX2QuZGlfbW9kZSAmIFNfSVNHSUQpKQogCiAvKgorICogRmxhZ3MgZm9yIHhmc19pZ2V0KCkKKyAqLworI2RlZmluZSBYRlNfSUdFVF9DUkVBVEUJCTB4MQorI2RlZmluZSBYRlNfSUdFVF9CVUxLU1RBVAkweDIKKworLyoKICAqIHhmc19pZ2V0LmMgcHJvdG90eXBlcy4KICAqLwotCi0jZGVmaW5lIElHRVRfQ1JFQVRFCTEKLQogdm9pZAkJeGZzX2loYXNoX2luaXQoc3RydWN0IHhmc19tb3VudCAqKTsKIHZvaWQJCXhmc19paGFzaF9mcmVlKHN0cnVjdCB4ZnNfbW91bnQgKik7CiB2b2lkCQl4ZnNfY2hhc2hfaW5pdChzdHJ1Y3QgeGZzX21vdW50ICopOwpAQCAtNDI1LDcgKzQyOSw3IEBACiAJCQkgIHhmc19pbm9kZV90ICosIHhmc19kaW5vZGVfdCAqKiwgc3RydWN0IHhmc19idWYgKiosCiAJCQkgIHhmc19kYWRkcl90LCB1aW50KTsKIGludAkJeGZzX2lyZWFkKHN0cnVjdCB4ZnNfbW91bnQgKiwgc3RydWN0IHhmc190cmFucyAqLCB4ZnNfaW5vX3QsCi0JCQkgIHhmc19pbm9kZV90ICoqLCB4ZnNfZGFkZHJfdCk7CisJCQkgIHhmc19pbm9kZV90ICoqLCB4ZnNfZGFkZHJfdCwgdWludCk7CiBpbnQJCXhmc19pcmVhZF9leHRlbnRzKHN0cnVjdCB4ZnNfdHJhbnMgKiwgeGZzX2lub2RlX3QgKiwgaW50KTsKIGludAkJeGZzX2lhbGxvYyhzdHJ1Y3QgeGZzX3RyYW5zICosIHhmc19pbm9kZV90ICosIG1vZGVfdCwKIAkJCSAgIHhmc19ubGlua190LCB4ZnNfZGV2X3QsIHN0cnVjdCBjcmVkICosIHhmc19wcmlkX3QsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uYyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCmluZGV4IGY4ZTgwZDguLmE3YTkyMjUgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCisrKyBiL2ZzL3hmcy94ZnNfaW5vZGVfaXRlbS5jCkBAIC03NDMsMjEgKzc0Myw2IEBACiB9CiAKIC8qCi0gKiBUaGUgdHJhbnNhY3Rpb24gd2l0aCB0aGUgaW5vZGUgbG9ja2VkIGhhcyBhYm9ydGVkLiAgVGhlIGlub2RlCi0gKiBtdXN0IG5vdCBiZSBkaXJ0eSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uICh1bmxlc3Mgd2UncmUgZm9yY2libHkKLSAqIHNodXR0aW5nIGRvd24pLiAgV2Ugc2ltcGx5IHVubG9jayBqdXN0IGFzIGlmIHRoZSB0cmFuc2FjdGlvbgotICogaGFkIGJlZW4gY2FuY2VsbGVkLgotICovCi1TVEFUSUMgdm9pZAoteGZzX2lub2RlX2l0ZW1fYWJvcnQoCi0JeGZzX2lub2RlX2xvZ19pdGVtX3QJKmlpcCkKLXsKLQl4ZnNfaW5vZGVfaXRlbV91bmxvY2soaWlwKTsKLQlyZXR1cm47Ci19Ci0KLQotLyoKICAqIFRoaXMgZ2V0cyBjYWxsZWQgYnkgeGZzX3RyYW5zX3B1c2hfYWlsKCksIHdoZW4gSU9QX1RSWUxPQ0sKICAqIGZhaWxlZCB0byBnZXQgdGhlIGlub2RlIGZsdXNoIGxvY2sgYnV0IGRpZCBnZXQgdGhlIGlub2RlIGxvY2tlZCBTSEFSRUQuCiAgKiBIZXJlIHdlJ3JlIHRyeWluZyB0byBzZWUgaWYgdGhlIGlub2RlIGJ1ZmZlciBpcyBpbmNvcmUsIGFuZCBpZiBzbyB3aGV0aGVyIGl0J3MKQEAgLTkxNSw3ICs5MDAsNiBAQAogCS5pb3BfY29tbWl0dGVkCT0gKHhmc19sc25fdCgqKSh4ZnNfbG9nX2l0ZW1fdCosIHhmc19sc25fdCkpCiAJCQkJCXhmc19pbm9kZV9pdGVtX2NvbW1pdHRlZCwKIAkuaW9wX3B1c2gJPSAodm9pZCgqKSh4ZnNfbG9nX2l0ZW1fdCopKXhmc19pbm9kZV9pdGVtX3B1c2gsCi0JLmlvcF9hYm9ydAk9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KikpeGZzX2lub2RlX2l0ZW1fYWJvcnQsCiAJLmlvcF9wdXNoYnVmCT0gKHZvaWQoKikoeGZzX2xvZ19pdGVtX3QqKSl4ZnNfaW5vZGVfaXRlbV9wdXNoYnVmLAogCS5pb3BfY29tbWl0dGluZyA9ICh2b2lkKCopKHhmc19sb2dfaXRlbV90KiwgeGZzX2xzbl90KSkKIAkJCQkJeGZzX2lub2RlX2l0ZW1fY29tbWl0dGluZwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pbm9kZV9pdGVtLmggYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAppbmRleCA1ZGI2Y2QxLi5iZmU5MmVhIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaAorKysgYi9mcy94ZnMveGZzX2lub2RlX2l0ZW0uaApAQCAtMjUsNTIgKzI1LDU0IEBACiAgKiBtdXN0IGJlIGFkZGVkIG9uIHRvIHRoZSBlbmQuCiAgKi8KIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZV9sb2dfZm9ybWF0IHsKLQl1bnNpZ25lZCBzaG9ydAkJaWxmX3R5cGU7CS8qIGlub2RlIGxvZyBpdGVtIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydAkJaWxmX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCi0JdWludAkJCWlsZl9maWVsZHM7CS8qIGZsYWdzIGZvciBmaWVsZHMgbG9nZ2VkICovCi0JdXNob3J0CQkJaWxmX2FzaXplOwkvKiBzaXplIG9mIGF0dHIgZC9leHQvcm9vdCAqLwotCXVzaG9ydAkJCWlsZl9kc2l6ZTsJLyogc2l6ZSBvZiBkYXRhL2V4dC9yb290ICovCi0JeGZzX2lub190CQlpbGZfaW5vOwkvKiBpbm9kZSBudW1iZXIgKi8KKwlfX3VpbnQxNl90CQlpbGZfdHlwZTsJLyogaW5vZGUgbG9nIGl0ZW0gdHlwZSAqLworCV9fdWludDE2X3QJCWlsZl9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLworCV9fdWludDMyX3QJCWlsZl9maWVsZHM7CS8qIGZsYWdzIGZvciBmaWVsZHMgbG9nZ2VkICovCisJX191aW50MTZfdAkJaWxmX2FzaXplOwkvKiBzaXplIG9mIGF0dHIgZC9leHQvcm9vdCAqLworCV9fdWludDE2X3QJCWlsZl9kc2l6ZTsJLyogc2l6ZSBvZiBkYXRhL2V4dC9yb290ICovCisJX191aW50NjRfdAkJaWxmX2lubzsJLyogaW5vZGUgbnVtYmVyICovCiAJdW5pb24gewotCQl4ZnNfZGV2X3QJaWxmdV9yZGV2OwkvKiByZGV2IHZhbHVlIGZvciBkZXYgaW5vZGUqLworCQlfX3VpbnQzMl90CWlsZnVfcmRldjsJLyogcmRldiB2YWx1ZSBmb3IgZGV2IGlub2RlKi8KIAkJdXVpZF90CQlpbGZ1X3V1aWQ7CS8qIG1vdW50IHBvaW50IHZhbHVlICovCiAJfSBpbGZfdTsKIAlfX2ludDY0X3QJCWlsZl9ibGtubzsJLyogYmxrbm8gb2YgaW5vZGUgYnVmZmVyICovCi0JaW50CQkJaWxmX2xlbjsJLyogbGVuIG9mIGlub2RlIGJ1ZmZlciAqLwotCWludAkJCWlsZl9ib2Zmc2V0OwkvKiBvZmYgb2YgaW5vZGUgaW4gYnVmZmVyICovCisJX19pbnQzMl90CQlpbGZfbGVuOwkvKiBsZW4gb2YgaW5vZGUgYnVmZmVyICovCisJX19pbnQzMl90CQlpbGZfYm9mZnNldDsJLyogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLwogfSB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF90OwogCisjaWZuZGVmIEhBVkVfRk9STUFUMzIKIHR5cGVkZWYgc3RydWN0IHhmc19pbm9kZV9sb2dfZm9ybWF0XzMyIHsKLQl1bnNpZ25lZCBzaG9ydAkJaWxmX3R5cGU7CS8qIDE2OiBpbm9kZSBsb2cgaXRlbSB0eXBlICovCi0JdW5zaWduZWQgc2hvcnQJCWlsZl9zaXplOwkvKiAxNjogc2l6ZSBvZiB0aGlzIGl0ZW0gKi8KLQl1aW50CQkJaWxmX2ZpZWxkczsJLyogMzI6IGZsYWdzIGZvciBmaWVsZHMgbG9nZ2VkICovCi0JdXNob3J0CQkJaWxmX2FzaXplOwkvKiAzMjogc2l6ZSBvZiBhdHRyIGQvZXh0L3Jvb3QgKi8KLQl1c2hvcnQJCQlpbGZfZHNpemU7CS8qIDMyOiBzaXplIG9mIGRhdGEvZXh0L3Jvb3QgKi8KLQl4ZnNfaW5vX3QJCWlsZl9pbm87CS8qIDY0OiBpbm9kZSBudW1iZXIgKi8KKwlfX3VpbnQxNl90CQlpbGZfdHlwZTsJLyogaW5vZGUgbG9nIGl0ZW0gdHlwZSAqLworCV9fdWludDE2X3QJCWlsZl9zaXplOwkvKiBzaXplIG9mIHRoaXMgaXRlbSAqLworCV9fdWludDMyX3QJCWlsZl9maWVsZHM7CS8qIGZsYWdzIGZvciBmaWVsZHMgbG9nZ2VkICovCisJX191aW50MTZfdAkJaWxmX2FzaXplOwkvKiBzaXplIG9mIGF0dHIgZC9leHQvcm9vdCAqLworCV9fdWludDE2X3QJCWlsZl9kc2l6ZTsJLyogc2l6ZSBvZiBkYXRhL2V4dC9yb290ICovCisJX191aW50NjRfdAkJaWxmX2lubzsJLyogaW5vZGUgbnVtYmVyICovCiAJdW5pb24gewotCQl4ZnNfZGV2X3QJaWxmdV9yZGV2OwkvKiAzMjogcmRldiB2YWx1ZSBmb3IgZGV2IGlub2RlKi8KLQkJdXVpZF90CQlpbGZ1X3V1aWQ7CS8qIDEyODogbW91bnQgcG9pbnQgdmFsdWUgKi8KKwkJX191aW50MzJfdAlpbGZ1X3JkZXY7CS8qIHJkZXYgdmFsdWUgZm9yIGRldiBpbm9kZSovCisJCXV1aWRfdAkJaWxmdV91dWlkOwkvKiBtb3VudCBwb2ludCB2YWx1ZSAqLwogCX0gaWxmX3U7Ci0JX19pbnQ2NF90CQlpbGZfYmxrbm87CS8qIDY0OiBibGtubyBvZiBpbm9kZSBidWZmZXIgKi8KLQlpbnQJCQlpbGZfbGVuOwkvKiAzMjogbGVuIG9mIGlub2RlIGJ1ZmZlciAqLwotCWludAkJCWlsZl9ib2Zmc2V0OwkvKiAzMjogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLworCV9faW50NjRfdAkJaWxmX2Jsa25vOwkvKiBibGtubyBvZiBpbm9kZSBidWZmZXIgKi8KKwlfX2ludDMyX3QJCWlsZl9sZW47CS8qIGxlbiBvZiBpbm9kZSBidWZmZXIgKi8KKwlfX2ludDMyX3QJCWlsZl9ib2Zmc2V0OwkvKiBvZmYgb2YgaW5vZGUgaW4gYnVmZmVyICovCiB9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpIHhmc19pbm9kZV9sb2dfZm9ybWF0XzMyX3Q7CisjZW5kaWYKIAogdHlwZWRlZiBzdHJ1Y3QgeGZzX2lub2RlX2xvZ19mb3JtYXRfNjQgewotCXVuc2lnbmVkIHNob3J0CQlpbGZfdHlwZTsJLyogMTY6IGlub2RlIGxvZyBpdGVtIHR5cGUgKi8KLQl1bnNpZ25lZCBzaG9ydAkJaWxmX3NpemU7CS8qIDE2OiBzaXplIG9mIHRoaXMgaXRlbSAqLwotCXVpbnQJCQlpbGZfZmllbGRzOwkvKiAzMjogZmxhZ3MgZm9yIGZpZWxkcyBsb2dnZWQgKi8KLQl1c2hvcnQJCQlpbGZfYXNpemU7CS8qIDMyOiBzaXplIG9mIGF0dHIgZC9leHQvcm9vdCAqLwotCXVzaG9ydAkJCWlsZl9kc2l6ZTsJLyogMzI6IHNpemUgb2YgZGF0YS9leHQvcm9vdCAqLwotCV9fdWludDMyX3QJCWlsZl9wYWQ7CS8qIDMyOiBwYWQgZm9yIDY0IGJpdCBib3VuZGFyeSAqLwotCXhmc19pbm9fdAkJaWxmX2lubzsJLyogNjQ6IGlub2RlIG51bWJlciAqLworCV9fdWludDE2X3QJCWlsZl90eXBlOwkvKiBpbm9kZSBsb2cgaXRlbSB0eXBlICovCisJX191aW50MTZfdAkJaWxmX3NpemU7CS8qIHNpemUgb2YgdGhpcyBpdGVtICovCisJX191aW50MzJfdAkJaWxmX2ZpZWxkczsJLyogZmxhZ3MgZm9yIGZpZWxkcyBsb2dnZWQgKi8KKwlfX3VpbnQxNl90CQlpbGZfYXNpemU7CS8qIHNpemUgb2YgYXR0ciBkL2V4dC9yb290ICovCisJX191aW50MTZfdAkJaWxmX2RzaXplOwkvKiBzaXplIG9mIGRhdGEvZXh0L3Jvb3QgKi8KKwlfX3VpbnQzMl90CQlpbGZfcGFkOwkvKiBwYWQgZm9yIDY0IGJpdCBib3VuZGFyeSAqLworCV9fdWludDY0X3QJCWlsZl9pbm87CS8qIGlub2RlIG51bWJlciAqLwogCXVuaW9uIHsKLQkJeGZzX2Rldl90CWlsZnVfcmRldjsJLyogMzI6IHJkZXYgdmFsdWUgZm9yIGRldiBpbm9kZSovCi0JCXV1aWRfdAkJaWxmdV91dWlkOwkvKiAxMjg6IG1vdW50IHBvaW50IHZhbHVlICovCisJCV9fdWludDMyX3QJaWxmdV9yZGV2OwkvKiByZGV2IHZhbHVlIGZvciBkZXYgaW5vZGUqLworCQl1dWlkX3QJCWlsZnVfdXVpZDsJLyogbW91bnQgcG9pbnQgdmFsdWUgKi8KIAl9IGlsZl91OwotCV9faW50NjRfdAkJaWxmX2Jsa25vOwkvKiA2NDogYmxrbm8gb2YgaW5vZGUgYnVmZmVyICovCi0JaW50CQkJaWxmX2xlbjsJLyogMzI6IGxlbiBvZiBpbm9kZSBidWZmZXIgKi8KLQlpbnQJCQlpbGZfYm9mZnNldDsJLyogMzI6IG9mZiBvZiBpbm9kZSBpbiBidWZmZXIgKi8KKwlfX2ludDY0X3QJCWlsZl9ibGtubzsJLyogYmxrbm8gb2YgaW5vZGUgYnVmZmVyICovCisJX19pbnQzMl90CQlpbGZfbGVuOwkvKiBsZW4gb2YgaW5vZGUgYnVmZmVyICovCisJX19pbnQzMl90CQlpbGZfYm9mZnNldDsJLyogb2ZmIG9mIGlub2RlIGluIGJ1ZmZlciAqLwogfSB4ZnNfaW5vZGVfbG9nX2Zvcm1hdF82NF90OwogCiAvKgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19pb21hcC5jIGIvZnMveGZzL3hmc19pb21hcC5jCmluZGV4IGYxOTQ5YzEuLjE5NjU1MTIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaW9tYXAuYworKysgYi9mcy94ZnMveGZzX2lvbWFwLmMKQEAgLTM5OCw2ICszOTgsMjMgQEAKIAlyZXR1cm4gMTsKIH0KIAorU1RBVElDIGludAoreGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKAorCXhmc19pbm9kZV90CSppcCwKKwl4ZnNfYm1idF9pcmVjX3QJKmltYXApCit7CisJeGZzX2Ntbl9lcnIoWEZTX1BUQUdfRlNCTE9DS19aRVJPLCBDRV9BTEVSVCwgaXAtPmlfbW91bnQsCisJCQkiQWNjZXNzIHRvIGJsb2NrIHplcm8gaW4gaW5vZGUgJWxsdSAiCisJCQkic3RhcnRfYmxvY2s6ICVsbHggc3RhcnRfb2ZmOiAlbGx4ICIKKwkJCSJibGtjbnQ6ICVsbHggZXh0ZW50LXN0YXRlOiAleFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpcC0+aV9pbm8sCisJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW1hcC0+YnJfc3RhcnRibG9jaywKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFwLT5icl9zdGFydG9mZiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFwLT5icl9ibG9ja2NvdW50LAorCQlpbWFwLT5icl9zdGF0ZSk7CisJcmV0dXJuIEVGU0NPUlJVUFRFRDsKK30KKwogaW50CiB4ZnNfaW9tYXBfd3JpdGVfZGlyZWN0KAogCXhmc19pbm9kZV90CSppcCwKQEAgLTUzNiwyMyArNTUzLDE3IEBACiAJICogQ29weSBhbnkgbWFwcyB0byBjYWxsZXIncyBhcnJheSBhbmQgcmV0dXJuIGFueSBlcnJvci4KIAkgKi8KIAlpZiAobmltYXBzID09IDApIHsKLQkJZXJyb3IgPSAoRU5PU1BDKTsKKwkJZXJyb3IgPSBFTk9TUEM7CisJCWdvdG8gZXJyb3Jfb3V0OworCX0KKworCWlmICh1bmxpa2VseSghaW1hcC5icl9zdGFydGJsb2NrICYmICEoaW8tPmlvX2ZsYWdzICYgWEZTX0lPQ09SRV9SVCkpKSB7CisJCWVycm9yID0geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCAmaW1hcCk7CiAJCWdvdG8gZXJyb3Jfb3V0OwogCX0KIAogCSpyZXRfaW1hcCA9IGltYXA7CiAJKm5tYXBzID0gMTsKLQlpZiAoICEoaW8tPmlvX2ZsYWdzICYgWEZTX0lPQ09SRV9SVCkgICYmICFyZXRfaW1hcC0+YnJfc3RhcnRibG9jaykgewotICAgICAgICAgICAgICAgIGNtbl9lcnIoQ0VfUEFOSUMsIkFjY2VzcyB0byBibG9jayB6ZXJvOiAgZnMgPCVzPiBpbm9kZTogJWxsZCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAic3RhcnRfYmxvY2sgOiAlbGx4IHN0YXJ0X29mZiA6ICVsbHggYmxrY250IDogJWxseCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiZXh0ZW50LXN0YXRlIDogJXggXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgKGlwLT5pX21vdW50KS0+bV9mc25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAobG9uZyBsb25nKWlwLT5pX2lubywKLSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmV0X2ltYXAtPmJyX3N0YXJ0YmxvY2ssCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKXJldF9pbWFwLT5icl9zdGFydG9mZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpcmV0X2ltYXAtPmJyX2Jsb2NrY291bnQsCi0JCQlyZXRfaW1hcC0+YnJfc3RhdGUpOwotICAgICAgICB9CiAJcmV0dXJuIDA7CiAKIGVycm9yMDoJLyogQ2FuY2VsIGJtYXAsIHVubG9jayBpbm9kZSwgdW5yZXNlcnZlIHF1b3RhIGJsb2NrcywgY2FuY2VsIHRyYW5zICovCkBAIC03MTUsMTcgKzcyNiw4IEBACiAJCWdvdG8gcmV0cnk7CiAJfQogCi0JaWYgKCEoaW8tPmlvX2ZsYWdzICYgWEZTX0lPQ09SRV9SVCkgICYmICFyZXRfaW1hcC0+YnJfc3RhcnRibG9jaykgewotCQljbW5fZXJyKENFX1BBTklDLCJBY2Nlc3MgdG8gYmxvY2sgemVybzogIGZzIDwlcz4gaW5vZGU6ICVsbGQgIgotICAgICAgICAgICAgICAgICAgICAgICAgInN0YXJ0X2Jsb2NrIDogJWxseCBzdGFydF9vZmYgOiAlbGx4IGJsa2NudCA6ICVsbHggIgotICAgICAgICAgICAgICAgICAgICAgICAgImV4dGVudC1zdGF0ZSA6ICV4IFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpcC0+aV9tb3VudCktPm1fZnNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcgbG9uZylpcC0+aV9pbm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJldF9pbWFwLT5icl9zdGFydGJsb2NrLAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXRfaW1hcC0+YnJfc3RhcnRvZmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXJldF9pbWFwLT5icl9ibG9ja2NvdW50LAotCQkJcmV0X2ltYXAtPmJyX3N0YXRlKTsKLQl9CisJaWYgKHVubGlrZWx5KCFpbWFwWzBdLmJyX3N0YXJ0YmxvY2sgJiYgIShpby0+aW9fZmxhZ3MgJiBYRlNfSU9DT1JFX1JUKSkpCisJCXJldHVybiB4ZnNfY21uX2Vycl9mc2Jsb2NrX3plcm8oaXAsICZpbWFwWzBdKTsKIAogCSpyZXRfaW1hcCA9IGltYXBbMF07CiAJKm5tYXBzID0gMTsKQEAgLTg1MywyNCArODU1LDEwIEBACiAJCSAqIFNlZSBpZiB3ZSB3ZXJlIGFibGUgdG8gYWxsb2NhdGUgYW4gZXh0ZW50IHRoYXQKIAkJICogY292ZXJzIGF0IGxlYXN0IHBhcnQgb2YgdGhlIGNhbGxlcnMgcmVxdWVzdAogCQkgKi8KLQogCQlmb3IgKGkgPSAwOyBpIDwgbmltYXBzOyBpKyspIHsKLQkJCWlmICghKGlvLT5pb19mbGFncyAmIFhGU19JT0NPUkVfUlQpICAmJgotCQkJICAgICFpbWFwW2ldLmJyX3N0YXJ0YmxvY2spIHsKLQkJCQljbW5fZXJyKENFX1BBTklDLCJBY2Nlc3MgdG8gYmxvY2sgemVybzogICIKLQkJCQkJImZzIDwlcz4gaW5vZGU6ICVsbGQgIgotCQkJCQkic3RhcnRfYmxvY2sgOiAlbGx4IHN0YXJ0X29mZiA6ICVsbHggIgotCQkJCQkiYmxrY250IDogJWxseCBleHRlbnQtc3RhdGUgOiAleCBcbiIsCi0JCQkJCShpcC0+aV9tb3VudCktPm1fZnNuYW1lLAotCQkJCQkobG9uZyBsb25nKWlwLT5pX2lubywKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJCWltYXBbaV0uYnJfc3RhcnRibG9jaywKLQkJCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykKLQkJCQkJCWltYXBbaV0uYnJfc3RhcnRvZmYsCi0JCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpCi0JCQkJICAgICAgICAJaW1hcFtpXS5icl9ibG9ja2NvdW50LAotCQkJCQlpbWFwW2ldLmJyX3N0YXRlKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCWlmICh1bmxpa2VseSghaW1hcFtpXS5icl9zdGFydGJsb2NrICYmCisJCQkJICAgICAhKGlvLT5pb19mbGFncyAmIFhGU19JT0NPUkVfUlQpKSkKKwkJCQlyZXR1cm4geGZzX2Ntbl9lcnJfZnNibG9ja196ZXJvKGlwLCAmaW1hcFtpXSk7CiAJCQlpZiAoKG9mZnNldF9mc2IgPj0gaW1hcFtpXS5icl9zdGFydG9mZikgJiYKIAkJCSAgICAob2Zmc2V0X2ZzYiA8IChpbWFwW2ldLmJyX3N0YXJ0b2ZmICsKIAkJCQkJICAgaW1hcFtpXS5icl9ibG9ja2NvdW50KSkpIHsKQEAgLTk0MSw3ICs5MjksNyBAQAogCQkJCVhGU19XUklURV9MT0dfQ09VTlQpOwogCQlpZiAoZXJyb3IpIHsKIAkJCXhmc190cmFuc19jYW5jZWwodHAsIDApOwotCQkJZ290byBlcnJvcjA7CisJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAkJfQogCiAJCXhmc19pbG9jayhpcCwgWEZTX0lMT0NLX0VYQ0wpOwpAQCAtOTY3LDE5ICs5NTUsMTEgQEAKIAkJZXJyb3IgPSB4ZnNfdHJhbnNfY29tbWl0KHRwLCBYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTLCBOVUxMKTsKIAkJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBlcnJvcjA7CisJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAotCQlpZiAoICEoaW8tPmlvX2ZsYWdzICYgWEZTX0lPQ09SRV9SVCkgICYmICFpbWFwLmJyX3N0YXJ0YmxvY2spIHsKLQkJCWNtbl9lcnIoQ0VfUEFOSUMsIkFjY2VzcyB0byBibG9jayB6ZXJvOiAgZnMgPCVzPiAiCi0JCQkJImlub2RlOiAlbGxkIHN0YXJ0X2Jsb2NrIDogJWxseCBzdGFydF9vZmYgOiAiCi0JCQkJIiVsbHggYmxrY250IDogJWxseCBleHRlbnQtc3RhdGUgOiAleCBcbiIsCi0JCQkJKGlwLT5pX21vdW50KS0+bV9mc25hbWUsCi0JCQkJKGxvbmcgbG9uZylpcC0+aV9pbm8sCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFwLmJyX3N0YXJ0YmxvY2ssCi0JCQkJKHVuc2lnbmVkIGxvbmcgbG9uZylpbWFwLmJyX3N0YXJ0b2ZmLAotCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpaW1hcC5icl9ibG9ja2NvdW50LAotCQkJCWltYXAuYnJfc3RhdGUpOwotICAgICAgICAJfQorCQlpZiAodW5saWtlbHkoIWltYXAuYnJfc3RhcnRibG9jayAmJgorCQkJICAgICAhKGlvLT5pb19mbGFncyAmIFhGU19JT0NPUkVfUlQpKSkKKwkJCXJldHVybiB4ZnNfY21uX2Vycl9mc2Jsb2NrX3plcm8oaXAsICZpbWFwKTsKIAogCQlpZiAoKG51bWJsa3NfZnNiID0gaW1hcC5icl9ibG9ja2NvdW50KSA9PSAwKSB7CiAJCQkvKgpAQCAtOTk5LDYgKzk3OSw1IEBACiAJeGZzX2JtYXBfY2FuY2VsKCZmcmVlX2xpc3QpOwogCXhmc190cmFuc19jYW5jZWwodHAsIChYRlNfVFJBTlNfUkVMRUFTRV9MT0dfUkVTIHwgWEZTX1RSQU5TX0FCT1JUKSk7CiAJeGZzX2l1bmxvY2soaXAsIFhGU19JTE9DS19FWENMKTsKLWVycm9yMDoKIAlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIH0KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMgYi9mcy94ZnMveGZzX2l0YWJsZS5jCmluZGV4IDQ2MjQ5ZTQuLjc3NzVkZGMgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfaXRhYmxlLmMKKysrIGIvZnMveGZzL3hmc19pdGFibGUuYwpAQCAtMzksNiArMzksMTYgQEAKICNpbmNsdWRlICJ4ZnNfZXJyb3IuaCIKICNpbmNsdWRlICJ4ZnNfYnRyZWUuaCIKIAoraW50Cit4ZnNfaW50ZXJuYWxfaW51bSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJeGZzX2lub190CWlubykKK3sKKwlyZXR1cm4gKGlubyA9PSBtcC0+bV9zYi5zYl9yYm1pbm8gfHwgaW5vID09IG1wLT5tX3NiLnNiX3JzdW1pbm8gfHwKKwkJKFhGU19TQl9WRVJTSU9OX0hBU1FVT1RBKCZtcC0+bV9zYikgJiYKKwkJIChpbm8gPT0gbXAtPm1fc2Iuc2JfdXF1b3Rpbm8gfHwgaW5vID09IG1wLT5tX3NiLnNiX2dxdW90aW5vKSkpOworfQorCiBTVEFUSUMgaW50CiB4ZnNfYnVsa3N0YXRfb25lX2lnZXQoCiAJeGZzX21vdW50X3QJKm1wLAkJLyogbW91bnQgcG9pbnQgZm9yIGZpbGVzeXN0ZW0gKi8KQEAgLTUyLDcgKzYyLDggQEAKIAliaHZfdm5vZGVfdAkqdnA7CiAJaW50CQllcnJvcjsKIAotCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywgMCwgWEZTX0lMT0NLX1NIQVJFRCwgJmlwLCBibm8pOworCWVycm9yID0geGZzX2lnZXQobXAsIE5VTEwsIGlubywKKwkJCSBYRlNfSUdFVF9CVUxLU1RBVCwgWEZTX0lMT0NLX1NIQVJFRCwgJmlwLCBibm8pOwogCWlmIChlcnJvcikgewogCQkqc3RhdCA9IEJVTEtTVEFUX1JWX05PVEhJTkc7CiAJCXJldHVybiBlcnJvcjsKQEAgLTIxMiwxNyArMjIzLDEyIEBACiAJeGZzX2Rpbm9kZV90CSpkaXA7CQkvKiBkaW5vZGUgaW5vZGUgcG9pbnRlciAqLwogCiAJZGlwID0gKHhmc19kaW5vZGVfdCAqKWRpYnVmZjsKKwkqc3RhdCA9IEJVTEtTVEFUX1JWX05PVEhJTkc7CiAKLQlpZiAoIWJ1ZmZlciB8fCBpbm8gPT0gbXAtPm1fc2Iuc2JfcmJtaW5vIHx8IGlubyA9PSBtcC0+bV9zYi5zYl9yc3VtaW5vIHx8Ci0JICAgIChYRlNfU0JfVkVSU0lPTl9IQVNRVU9UQSgmbXAtPm1fc2IpICYmCi0JICAgICAoaW5vID09IG1wLT5tX3NiLnNiX3VxdW90aW5vIHx8IGlubyA9PSBtcC0+bV9zYi5zYl9ncXVvdGlubykpKSB7Ci0JCSpzdGF0ID0gQlVMS1NUQVRfUlZfTk9USElORzsKKwlpZiAoIWJ1ZmZlciB8fCB4ZnNfaW50ZXJuYWxfaW51bShtcCwgaW5vKSkKIAkJcmV0dXJuIFhGU19FUlJPUihFSU5WQUwpOwotCX0KLQlpZiAodWJzaXplIDwgc2l6ZW9mKCpidWYpKSB7Ci0JCSpzdGF0ID0gQlVMS1NUQVRfUlZfTk9USElORzsKKwlpZiAodWJzaXplIDwgc2l6ZW9mKCpidWYpKQogCQlyZXR1cm4gWEZTX0VSUk9SKEVOT01FTSk7Ci0JfQogCiAJYnVmID0ga21lbV9hbGxvYyhzaXplb2YoKmJ1ZiksIEtNX1NMRUVQKTsKIApAQCAtMjM4LDggKzI0NCw3IEBACiAJfQogCiAJaWYgKGNvcHlfdG9fdXNlcihidWZmZXIsIGJ1Ziwgc2l6ZW9mKCpidWYpKSkgIHsKLQkJKnN0YXQgPSBCVUxLU1RBVF9SVl9OT1RISU5HOwotCQllcnJvciA9ICBFRkFVTFQ7CisJCWVycm9yID0gRUZBVUxUOwogCQlnb3RvIG91dF9mcmVlOwogCX0KIApAQCAtMjUzLDYgKzI1OCw0NiBAQAogfQogCiAvKgorICogVGVzdCB0byBzZWUgd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBvbmRpc2sgaW5vZGUgZGlyZWN0bHksIGJhc2VkCisgKiBvbiB0aGUgZ2l2ZW4gYnVsa3N0YXQgZmxhZ3MsIGZpbGxpbmcgaW4gZGlwcCBhY2NvcmRpbmdseS4KKyAqIFJldHVybnMgemVybyBpZiB0aGUgaW5vZGUgaXMgZG9kZ2V5LgorICovCitTVEFUSUMgaW50Cit4ZnNfYnVsa3N0YXRfdXNlX2Rpbm9kZSgKKwl4ZnNfbW91bnRfdAkqbXAsCisJaW50CQlmbGFncywKKwl4ZnNfYnVmX3QJKmJwLAorCWludAkJY2x1c3RpZHgsCisJeGZzX2Rpbm9kZV90CSoqZGlwcCkKK3sKKwl4ZnNfZGlub2RlX3QJKmRpcDsKKwl1bnNpZ25lZCBpbnQJYWZvcm1hdDsKKworCSpkaXBwID0gTlVMTDsKKwlpZiAoIWJwIHx8IChmbGFncyAmIEJVTEtTVEFUX0ZHX0lHRVQpKQorCQlyZXR1cm4gMTsKKwlkaXAgPSAoeGZzX2Rpbm9kZV90ICopCisJCQl4ZnNfYnVmX29mZnNldChicCwgY2x1c3RpZHggPDwgbXAtPm1fc2Iuc2JfaW5vZGVsb2cpOworCWlmIChJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9tYWdpYywgQVJDSF9DT05WRVJUKSAhPSBYRlNfRElOT0RFX01BR0lDIHx8CisJICAgICFYRlNfRElOT0RFX0dPT0RfVkVSU0lPTigKKwkJCUlOVF9HRVQoZGlwLT5kaV9jb3JlLmRpX3ZlcnNpb24sIEFSQ0hfQ09OVkVSVCkpKQorCQlyZXR1cm4gMDsKKwlpZiAoZmxhZ3MgJiBCVUxLU1RBVF9GR19RVUlDSykgeworCQkqZGlwcCA9IGRpcDsKKwkJcmV0dXJuIDE7CisJfQorCS8qIEJVTEtTVEFUX0ZHX0lOTElORTogaWYgYXR0ciBmb3JrIGlzIGxvY2FsLCBvciBub3QgdGhlcmUsIHVzZSBpdCAqLworCWFmb3JtYXQgPSBJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9hZm9ybWF0LCBBUkNIX0NPTlZFUlQpOworCWlmICgoWEZTX0NGT1JLX1EoJmRpcC0+ZGlfY29yZSkgPT0gMCkgfHwKKwkgICAgKGFmb3JtYXQgPT0gWEZTX0RJTk9ERV9GTVRfTE9DQUwpIHx8CisJICAgIChhZm9ybWF0ID09IFhGU19ESU5PREVfRk1UX0VYVEVOVFMgJiYgIWRpcC0+ZGlfY29yZS5kaV9hbmV4dGVudHMpKSB7CisJCSpkaXBwID0gZGlwOworCQlyZXR1cm4gMTsKKwl9CisJcmV0dXJuIDE7Cit9CisKKy8qCiAgKiBSZXR1cm4gc3RhdCBpbmZvcm1hdGlvbiBpbiBidWxrIChieS1pbm9kZSkgZm9yIHRoZSBmaWxlc3lzdGVtLgogICovCiBpbnQJCQkJCS8qIGVycm9yIHN0YXR1cyAqLwpAQCAtMjg0LDEwICszMjksMTEgQEAKIAl4ZnNfYWdpbm9fdAkJZ2lubzsJLyogY3VycmVudCBidHJlZSByZWMncyBzdGFydCBpbm9kZSAqLwogCWludAkJCWk7CS8qIGxvb3AgaW5kZXggKi8KIAlpbnQJCQlpY291bnQ7CS8qIGNvdW50IG9mIGlub2RlcyBnb29kIGluIGlyYnVmICovCisJc2l6ZV90CQkJaXJic2l6ZTsgLyogc2l6ZSBvZiBpcmVjIGJ1ZmZlciBpbiBieXRlcyAqLwogCXhmc19pbm9fdAkJaW5vOwkvKiBpbm9kZSBudW1iZXIgKGZpbGVzeXN0ZW0pICovCi0JeGZzX2lub2J0X3JlY190CQkqaXJicDsJLyogY3VycmVudCBpcmVjIGJ1ZmZlciBwb2ludGVyICovCi0JeGZzX2lub2J0X3JlY190CQkqaXJidWY7CS8qIHN0YXJ0IG9mIGlyZWMgYnVmZmVyICovCi0JeGZzX2lub2J0X3JlY190CQkqaXJidWZlbmQ7IC8qIGVuZCBvZiBnb29kIGlyZWMgYnVmZmVyIGVudHJpZXMgKi8KKwl4ZnNfaW5vYnRfcmVjX2luY29yZV90CSppcmJwOwkvKiBjdXJyZW50IGlyZWMgYnVmZmVyIHBvaW50ZXIgKi8KKwl4ZnNfaW5vYnRfcmVjX2luY29yZV90CSppcmJ1ZjsJLyogc3RhcnQgb2YgaXJlYyBidWZmZXIgKi8KKwl4ZnNfaW5vYnRfcmVjX2luY29yZV90CSppcmJ1ZmVuZDsgLyogZW5kIG9mIGdvb2QgaXJlYyBidWZmZXIgZW50cmllcyAqLwogCXhmc19pbm9fdAkJbGFzdGlubz0wOyAvKiBsYXN0IGlub2RlIG51bWJlciByZXR1cm5lZCAqLwogCWludAkJCW5iY2x1c3RlcjsgLyogIyBvZiBibG9ja3MgaW4gYSBjbHVzdGVyICovCiAJaW50CQkJbmljbHVzdGVyOyAvKiAjIG9mIGlub2RlcyBpbiBhIGNsdXN0ZXIgKi8KQEAgLTMyOCwxMyArMzc0LDEwIEBACiAJCShYRlNfSU5PREVfQ0xVU1RFUl9TSVpFKG1wKSA+PiBtcC0+bV9zYi5zYl9pbm9kZWxvZyk7CiAJbmltYXNrID0gfihuaWNsdXN0ZXIgLSAxKTsKIAluYmNsdXN0ZXIgPSBuaWNsdXN0ZXIgPj4gbXAtPm1fc2Iuc2JfaW5vcGJsb2c7Ci0JLyoKLQkgKiBBbGxvY2F0ZSBhIHBhZ2Utc2l6ZWQgYnVmZmVyIGZvciBpbm9kZSBidHJlZSByZWNvcmRzLgotCSAqIFdlIGNvdWxkIHRyeSBhbGxvY2F0aW5nIHNvbWV0aGluZyBzbWFsbGVyLCBidXQgZm9yIG5vcm1hbAotCSAqIGNhbGxzIHdlJ2xsIGFsd2F5cyAocG90ZW50aWFsbHkpIG5lZWQgdGhlIHdob2xlIHBhZ2UuCi0JICovCi0JaXJidWYgPSBrbWVtX2FsbG9jKE5CUEMsIEtNX1NMRUVQKTsKLQluaXJidWYgPSBOQlBDIC8gc2l6ZW9mKCppcmJ1Zik7CisJaXJidWYgPSBrbWVtX3phbGxvY19ncmVlZHkoJmlyYnNpemUsIE5CUEMsIE5CUEMgKiA0LAorCQkJCSAgIEtNX1NMRUVQIHwgS01fTUFZRkFJTCB8IEtNX0xBUkdFKTsKKwluaXJidWYgPSBpcmJzaXplIC8gc2l6ZW9mKCppcmJ1Zik7CisKIAkvKgogCSAqIExvb3Agb3ZlciB0aGUgYWxsb2NhdGlvbiBncm91cHMsIHN0YXJ0aW5nIGZyb20gdGhlIGxhc3QKIAkgKiBpbm9kZSByZXR1cm5lZDsgMCBtZWFucyBzdGFydCBvZiB0aGUgYWxsb2NhdGlvbiBncm91cC4KQEAgLTM1OCw3ICs0MDEsNyBAQAogCQkgKiBBbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGJ0cmVlIGN1cnNvciBmb3IgaWFsbG9jIGJ0cmVlLgogCQkgKi8KIAkJY3VyID0geGZzX2J0cmVlX2luaXRfY3Vyc29yKG1wLCBOVUxMLCBhZ2JwLCBhZ25vLCBYRlNfQlROVU1fSU5PLAotCQkJKHhmc19pbm9kZV90ICopMCwgMCk7CisJCQkJCQkoeGZzX2lub2RlX3QgKikwLCAwKTsKIAkJaXJicCA9IGlyYnVmOwogCQlpcmJ1ZmVuZCA9IGlyYnVmICsgbmlyYnVmOwogCQllbmRfb2ZfYWcgPSAwOwpAQCAtMzk1LDkgKzQzOCw5IEBACiAJCQkJCQlnY250Kys7CiAJCQkJfQogCQkJCWdmcmVlIHw9IFhGU19JTk9CVF9NQVNLTigwLCBjaHVua2lkeCk7Ci0JCQkJSU5UX1NFVChpcmJwLT5pcl9zdGFydGlubywgQVJDSF9DT05WRVJULCBnaW5vKTsKLQkJCQlJTlRfU0VUKGlyYnAtPmlyX2ZyZWVjb3VudCwgQVJDSF9DT05WRVJULCBnY250KTsKLQkJCQlJTlRfU0VUKGlyYnAtPmlyX2ZyZWUsIEFSQ0hfQ09OVkVSVCwgZ2ZyZWUpOworCQkJCWlyYnAtPmlyX3N0YXJ0aW5vID0gZ2lubzsKKwkJCQlpcmJwLT5pcl9mcmVlY291bnQgPSBnY250OworCQkJCWlyYnAtPmlyX2ZyZWUgPSBnZnJlZTsKIAkJCQlpcmJwKys7CiAJCQkJYWdpbm8gPSBnaW5vICsgWEZTX0lOT0RFU19QRVJfQ0hVTks7CiAJCQkJaWNvdW50ID0gWEZTX0lOT0RFU19QRVJfQ0hVTksgLSBnY250OwpAQCAtNDUxLDExICs0OTQsMjcgQEAKIAkJCX0KIAkJCS8qCiAJCQkgKiBJZiB0aGlzIGNodW5rIGhhcyBhbnkgYWxsb2NhdGVkIGlub2Rlcywgc2F2ZSBpdC4KKwkJCSAqIEFsc28gc3RhcnQgcmVhZC1haGVhZCBub3cgZm9yIHRoaXMgY2h1bmsuCiAJCQkgKi8KIAkJCWlmIChnY250IDwgWEZTX0lOT0RFU19QRVJfQ0hVTkspIHsKLQkJCQlJTlRfU0VUKGlyYnAtPmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQsIGdpbm8pOwotCQkJCUlOVF9TRVQoaXJicC0+aXJfZnJlZWNvdW50LCBBUkNIX0NPTlZFUlQsIGdjbnQpOwotCQkJCUlOVF9TRVQoaXJicC0+aXJfZnJlZSwgQVJDSF9DT05WRVJULCBnZnJlZSk7CisJCQkJLyoKKwkJCQkgKiBMb29wIG92ZXIgYWxsIGNsdXN0ZXJzIGluIHRoZSBuZXh0IGNodW5rLgorCQkJCSAqIERvIGEgcmVhZGFoZWFkIGlmIHRoZXJlIGFyZSBhbnkgYWxsb2NhdGVkCisJCQkJICogaW5vZGVzIGluIHRoYXQgY2x1c3Rlci4KKwkJCQkgKi8KKwkJCQlmb3IgKGFnYm5vID0gWEZTX0FHSU5PX1RPX0FHQk5PKG1wLCBnaW5vKSwKKwkJCQkgICAgIGNodW5raWR4ID0gMDsKKwkJCQkgICAgIGNodW5raWR4IDwgWEZTX0lOT0RFU19QRVJfQ0hVTks7CisJCQkJICAgICBjaHVua2lkeCArPSBuaWNsdXN0ZXIsCisJCQkJICAgICBhZ2JubyArPSBuYmNsdXN0ZXIpIHsKKwkJCQkJaWYgKFhGU19JTk9CVF9NQVNLTihjaHVua2lkeCwKKwkJCQkJCQkgICAgbmljbHVzdGVyKSAmIH5nZnJlZSkKKwkJCQkJCXhmc19idHJlZV9yZWFkYV9idWZzKG1wLCBhZ25vLAorCQkJCQkJCWFnYm5vLCBuYmNsdXN0ZXIpOworCQkJCX0KKwkJCQlpcmJwLT5pcl9zdGFydGlubyA9IGdpbm87CisJCQkJaXJicC0+aXJfZnJlZWNvdW50ID0gZ2NudDsKKwkJCQlpcmJwLT5pcl9mcmVlID0gZ2ZyZWU7CiAJCQkJaXJicCsrOwogCQkJCWljb3VudCArPSBYRlNfSU5PREVTX1BFUl9DSFVOSyAtIGdjbnQ7CiAJCQl9CkBAIC00NzksMzMgKzUzOCwxMSBAQAogCQlmb3IgKGlyYnAgPSBpcmJ1ZjsKIAkJICAgICBpcmJwIDwgaXJidWZlbmQgJiYgdWJsZWZ0ID49IHN0YXRzdHJ1Y3Rfc2l6ZTsgaXJicCsrKSB7CiAJCQkvKgotCQkJICogUmVhZC1haGVhZCB0aGUgbmV4dCBjaHVuaydzIHdvcnRoIG9mIGlub2Rlcy4KLQkJCSAqLwotCQkJaWYgKCZpcmJwWzFdIDwgaXJidWZlbmQpIHsKLQkJCQkvKgotCQkJCSAqIExvb3Agb3ZlciBhbGwgY2x1c3RlcnMgaW4gdGhlIG5leHQgY2h1bmsuCi0JCQkJICogRG8gYSByZWFkYWhlYWQgaWYgdGhlcmUgYXJlIGFueSBhbGxvY2F0ZWQKLQkJCQkgKiBpbm9kZXMgaW4gdGhhdCBjbHVzdGVyLgotCQkJCSAqLwotCQkJCWZvciAoYWdibm8gPSBYRlNfQUdJTk9fVE9fQUdCTk8obXAsCi0JCQkJCQkJSU5UX0dFVChpcmJwWzFdLmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQpKSwKLQkJCQkgICAgIGNodW5raWR4ID0gMDsKLQkJCQkgICAgIGNodW5raWR4IDwgWEZTX0lOT0RFU19QRVJfQ0hVTks7Ci0JCQkJICAgICBjaHVua2lkeCArPSBuaWNsdXN0ZXIsCi0JCQkJICAgICBhZ2JubyArPSBuYmNsdXN0ZXIpIHsKLQkJCQkJaWYgKFhGU19JTk9CVF9NQVNLTihjaHVua2lkeCwKLQkJCQkJCQkgICAgbmljbHVzdGVyKSAmCi0JCQkJCSAgICB+KElOVF9HRVQoaXJicFsxXS5pcl9mcmVlLCBBUkNIX0NPTlZFUlQpKSkKLQkJCQkJCXhmc19idHJlZV9yZWFkYV9idWZzKG1wLCBhZ25vLAotCQkJCQkJCWFnYm5vLCBuYmNsdXN0ZXIpOwotCQkJCX0KLQkJCX0KLQkJCS8qCiAJCQkgKiBOb3cgcHJvY2VzcyB0aGlzIGNodW5rIG9mIGlub2Rlcy4KIAkJCSAqLwotCQkJZm9yIChhZ2lubyA9IElOVF9HRVQoaXJicC0+aXJfc3RhcnRpbm8sIEFSQ0hfQ09OVkVSVCksIGNodW5raWR4ID0gMCwgY2x1c3RpZHggPSAwOworCQkJZm9yIChhZ2lubyA9IGlyYnAtPmlyX3N0YXJ0aW5vLCBjaHVua2lkeCA9IGNsdXN0aWR4ID0gMDsKIAkJCSAgICAgdWJsZWZ0ID4gMCAmJgotCQkJCUlOVF9HRVQoaXJicC0+aXJfZnJlZWNvdW50LCBBUkNIX0NPTlZFUlQpIDwgWEZTX0lOT0RFU19QRVJfQ0hVTks7CisJCQkJaXJicC0+aXJfZnJlZWNvdW50IDwgWEZTX0lOT0RFU19QRVJfQ0hVTks7CiAJCQkgICAgIGNodW5raWR4KyssIGNsdXN0aWR4KyssIGFnaW5vKyspIHsKIAkJCQlBU1NFUlQoY2h1bmtpZHggPCBYRlNfSU5PREVTX1BFUl9DSFVOSyk7CiAJCQkJLyoKQEAgLTUyNSwxMSArNTYyLDEyIEBACiAJCQkJICovCiAJCQkJaWYgKChjaHVua2lkeCAmIChuaWNsdXN0ZXIgLSAxKSkgPT0gMCkgewogCQkJCQlhZ2JubyA9IFhGU19BR0lOT19UT19BR0JOTyhtcCwKLQkJCQkJCQlJTlRfR0VUKGlyYnAtPmlyX3N0YXJ0aW5vLCBBUkNIX0NPTlZFUlQpKSArCisJCQkJCQkJaXJicC0+aXJfc3RhcnRpbm8pICsKIAkJCQkJCSgoY2h1bmtpZHggJiBuaW1hc2spID4+CiAJCQkJCQkgbXAtPm1fc2Iuc2JfaW5vcGJsb2cpOwogCi0JCQkJCWlmIChmbGFncyAmIEJVTEtTVEFUX0ZHX1FVSUNLKSB7CisJCQkJCWlmIChmbGFncyAmIChCVUxLU1RBVF9GR19RVUlDSyB8CisJCQkJCQkgICAgIEJVTEtTVEFUX0ZHX0lOTElORSkpIHsKIAkJCQkJCWlubyA9IFhGU19BR0lOT19UT19JTk8obXAsIGFnbm8sCiAJCQkJCQkJCSAgICAgICBhZ2lubyk7CiAJCQkJCQlibm8gPSBYRlNfQUdCX1RPX0RBRERSKG1wLCBhZ25vLApAQCAtNTQzLDYgKzU4MSw3IEBACiAJCQkJCQkJCSAgICAgIEtNX1NMRUVQKTsKIAkJCQkJCWlwLT5pX2lubyA9IGlubzsKIAkJCQkJCWlwLT5pX21vdW50ID0gbXA7CisJCQkJCQlzcGluX2xvY2tfaW5pdCgmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCQkJCQlpZiAoYnApCiAJCQkJCQkJeGZzX2J1Zl9yZWxzZShicCk7CiAJCQkJCQllcnJvciA9IHhmc19pdG9icChtcCwgTlVMTCwgaXAsCkBAIC01NjQsMzAgKzYwMywzNCBAQAogCQkJCS8qCiAJCQkJICogU2tpcCBpZiB0aGlzIGlub2RlIGlzIGZyZWUuCiAJCQkJICovCi0JCQkJaWYgKFhGU19JTk9CVF9NQVNLKGNodW5raWR4KSAmIElOVF9HRVQoaXJicC0+aXJfZnJlZSwgQVJDSF9DT05WRVJUKSkKKwkJCQlpZiAoWEZTX0lOT0JUX01BU0soY2h1bmtpZHgpICYgaXJicC0+aXJfZnJlZSkKIAkJCQkJY29udGludWU7CiAJCQkJLyoKIAkJCQkgKiBDb3VudCB1c2VkIGlub2RlcyBhcyBmcmVlIHNvIHdlIGNhbiB0ZWxsCiAJCQkJICogd2hlbiB0aGUgY2h1bmsgaXMgdXNlZCB1cC4KIAkJCQkgKi8KLQkJCQlJTlRfTU9EKGlyYnAtPmlyX2ZyZWVjb3VudCwgQVJDSF9DT05WRVJULCArMSk7CisJCQkJaXJicC0+aXJfZnJlZWNvdW50Kys7CiAJCQkJaW5vID0gWEZTX0FHSU5PX1RPX0lOTyhtcCwgYWdubywgYWdpbm8pOwogCQkJCWJubyA9IFhGU19BR0JfVE9fREFERFIobXAsIGFnbm8sIGFnYm5vKTsKLQkJCQlpZiAoZmxhZ3MgJiBCVUxLU1RBVF9GR19RVUlDSykgewotCQkJCQlkaXAgPSAoeGZzX2Rpbm9kZV90ICopeGZzX2J1Zl9vZmZzZXQoYnAsCi0JCQkJCSAgICAgIChjbHVzdGlkeCA8PCBtcC0+bV9zYi5zYl9pbm9kZWxvZykpOwotCi0JCQkJCWlmIChJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV9tYWdpYywgQVJDSF9DT05WRVJUKQotCQkJCQkJICAgICE9IFhGU19ESU5PREVfTUFHSUMKLQkJCQkJICAgIHx8ICFYRlNfRElOT0RFX0dPT0RfVkVSU0lPTigKLQkJCQkJCSAgICBJTlRfR0VUKGRpcC0+ZGlfY29yZS5kaV92ZXJzaW9uLCBBUkNIX0NPTlZFUlQpKSkKLQkJCQkJCWNvbnRpbnVlOworCQkJCWlmICgheGZzX2J1bGtzdGF0X3VzZV9kaW5vZGUobXAsIGZsYWdzLCBicCwKKwkJCQkJCQkgICAgIGNsdXN0aWR4LCAmZGlwKSkKKwkJCQkJY29udGludWU7CisJCQkJLyoKKwkJCQkgKiBJZiB3ZSBuZWVkIHRvIGRvIGFuIGlnZXQsIGNhbm5vdCBob2xkIGJwLgorCQkJCSAqIERyb3AgaXQsIHVudGlsIHN0YXJ0aW5nIHRoZSBuZXh0IGNsdXN0ZXIuCisJCQkJICovCisJCQkJaWYgKChmbGFncyAmIEJVTEtTVEFUX0ZHX0lOTElORSkgJiYgIWRpcCkgeworCQkJCQlpZiAoYnApCisJCQkJCQl4ZnNfYnVmX3JlbHNlKGJwKTsKKwkJCQkJYnAgPSBOVUxMOwogCQkJCX0KIAogCQkJCS8qCiAJCQkJICogR2V0IHRoZSBpbm9kZSBhbmQgZmlsbCBpbiBhIHNpbmdsZSBidWZmZXIuCiAJCQkJICogQlVMS1NUQVRfRkdfUVVJQ0sgdXNlcyBkaXAgdG8gZmlsbCBpdCBpbi4KIAkJCQkgKiBCVUxLU1RBVF9GR19JR0VUIHVzZXMgaWdldHMuCisJCQkJICogQlVMS1NUQVRfRkdfSU5MSU5FIHVzZXMgZGlwIGlmIHdlIGhhdmUgYW4KKwkJCQkgKiBpbmxpbmUgYXR0ciBmb3JrLCBlbHNlIGlnZXRzLgogCQkJCSAqIFNlZTogeGZzX2J1bGtzdGF0X29uZSAmIHhmc19kbV9idWxrc3RhdF9vbmUuCiAJCQkJICogVGhpcyBpcyBhbHNvIHVzZWQgdG8gY291bnQgaW5vZGVzL2Jsa3MsIGV0YwogCQkJCSAqIGluIHhmc19xbV9xdW90YWNoZWNrLgpAQCAtNTk3LDggKzY0MCwxNSBAQAogCQkJCQkJdWJsZWZ0LCBwcml2YXRlX2RhdGEsCiAJCQkJCQlibm8sICZ1YnVzZWQsIGRpcCwgJmZtdGVycm9yKTsKIAkJCQlpZiAoZm10ZXJyb3IgPT0gQlVMS1NUQVRfUlZfTk9USElORykgewotCQkJCQlpZiAoZXJyb3IgPT0gRU5PTUVNKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvciA9PSBFRkFVTFQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVibGVmdCA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydmFsID0gZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJCWVsc2UgaWYgKGVycm9yID09IEVOT01FTSkKIAkJCQkJCXVibGVmdCA9IDA7CisJCQkJCWVsc2UKKwkJCQkJCWxhc3Rpbm8gPSBpbm87CiAJCQkJCWNvbnRpbnVlOwogCQkJCX0KIAkJCQlpZiAoZm10ZXJyb3IgPT0gQlVMS1NUQVRfUlZfR0lWRVVQKSB7CkBAIC02MzMsNyArNjgzLDcgQEAKIAkvKgogCSAqIERvbmUsIHdlJ3JlIGVpdGhlciBvdXQgb2YgZmlsZXN5c3RlbSBvciBzcGFjZSB0byBwdXQgdGhlIGRhdGEuCiAJICovCi0Ja21lbV9mcmVlKGlyYnVmLCBOQlBDKTsKKwlrbWVtX2ZyZWUoaXJidWYsIGlyYnNpemUpOwogCSp1YmNvdW50cCA9IHViZWxlbTsKIAlpZiAoYWdubyA+PSBtcC0+bV9zYi5zYl9hZ2NvdW50KSB7CiAJCS8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2l0YWJsZS5oIGIvZnMveGZzL3hmc19pdGFibGUuaAppbmRleCBiZTVmMTJlLi5mMjVhMjg4IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2l0YWJsZS5oCisrKyBiL2ZzL3hmcy94ZnNfaXRhYmxlLmgKQEAgLTM2LDE1ICszNiwxNiBAQAogLyoKICAqIFZhbHVlcyBmb3Igc3RhdCByZXR1cm4gdmFsdWUuCiAgKi8KLSNkZWZpbmUJQlVMS1NUQVRfUlZfTk9USElORwkwCi0jZGVmaW5lCUJVTEtTVEFUX1JWX0RJRE9ORQkxCi0jZGVmaW5lCUJVTEtTVEFUX1JWX0dJVkVVUAkyCisjZGVmaW5lIEJVTEtTVEFUX1JWX05PVEhJTkcJMAorI2RlZmluZSBCVUxLU1RBVF9SVl9ESURPTkUJMQorI2RlZmluZSBCVUxLU1RBVF9SVl9HSVZFVVAJMgogCiAvKgogICogVmFsdWVzIGZvciBidWxrc3RhdCBmbGFnIGFyZ3VtZW50LgogICovCi0jZGVmaW5lCUJVTEtTVEFUX0ZHX0lHRVQJMHgxCS8qIEdvIHRocm91Z2ggdGhlIGJ1ZmZlciBjYWNoZSAqLwotI2RlZmluZQlCVUxLU1RBVF9GR19RVUlDSwkweDIJLyogTm8gaWdldCwgd2FsayB0aGUgZGlub2RlIGNsdXN0ZXIgKi8KKyNkZWZpbmUgQlVMS1NUQVRfRkdfSUdFVAkweDEJLyogR28gdGhyb3VnaCB0aGUgYnVmZmVyIGNhY2hlICovCisjZGVmaW5lIEJVTEtTVEFUX0ZHX1FVSUNLCTB4MgkvKiBObyBpZ2V0LCB3YWxrIHRoZSBkaW5vZGUgY2x1c3RlciAqLworI2RlZmluZSBCVUxLU1RBVF9GR19JTkxJTkUJMHg0CS8qIE5vIGlnZXQgaWYgaW5saW5lIGF0dHJzICovCiAKIC8qCiAgKiBSZXR1cm4gc3RhdCBpbmZvcm1hdGlvbiBpbiBidWxrIChieS1pbm9kZSkgZm9yIHRoZSBmaWxlc3lzdGVtLgpAQCAtODAsNiArODEsMTEgQEAKIAl2b2lkCQkJKmRpYnVmZiwKIAlpbnQJCQkqc3RhdCk7CiAKK2ludAoreGZzX2ludGVybmFsX2ludW0oCisJeGZzX21vdW50X3QJCSptcCwKKwl4ZnNfaW5vX3QJCWlubyk7CisKIGludAkJCQkJLyogZXJyb3Igc3RhdHVzICovCiB4ZnNfaW51bWJlcnMoCiAJeGZzX21vdW50X3QJCSptcCwJLyogbW91bnQgcG9pbnQgZm9yIGZpbGVzeXN0ZW0gKi8KZGlmZiAtLWdpdCBhL2ZzL3hmcy94ZnNfbG9nLmMgYi9mcy94ZnMveGZzX2xvZy5jCmluZGV4IDIxYWMxYTYuLmM0OGJmNjEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nLmMKKysrIGIvZnMveGZzL3hmc19sb2cuYwpAQCAtNjE3LDcgKzYxNyw4IEBACiAJCXJlZ1swXS5pX2xlbiAgPSBzaXplb2YobWFnaWMpOwogCQlYTE9HX1ZFQ19TRVRfVFlQRSgmcmVnWzBdLCBYTE9HX1JFR19UWVBFX1VOTU9VTlQpOwogCi0JCWVycm9yID0geGZzX2xvZ19yZXNlcnZlKG1wLCA2MDAsIDEsICZ0aWMsIFhGU19MT0csIDAsIDApOworCQllcnJvciA9IHhmc19sb2dfcmVzZXJ2ZShtcCwgNjAwLCAxLCAmdGljLAorCQkJCQlYRlNfTE9HLCAwLCBYTE9HX1VOTU9VTlRfUkVDX1RZUEUpOwogCQlpZiAoIWVycm9yKSB7CiAJCQkvKiByZW1vdmUgaW5pdGVkIGZsYWcgKi8KIAkJCSgoeGxvZ190aWNrZXRfdCAqKXRpYyktPnRfZmxhZ3MgPSAwOwpAQCAtNjU1LDggKzY1NiwxMSBAQAogCQl9IGVsc2UgewogCQkJTE9HX1VOTE9DSyhsb2csIHMpOwogCQl9Ci0JCWlmICh0aWMpCisJCWlmICh0aWMpIHsKKwkJCXhsb2dfdHJhY2VfbG9nZ3JhbnQobG9nLCB0aWMsICJ1bm1vdW50IHJlYyIpOworCQkJeGxvZ191bmdyYW50X2xvZ19zcGFjZShsb2csIHRpYyk7CiAJCQl4bG9nX3N0YXRlX3B1dF90aWNrZXQobG9nLCB0aWMpOworCQl9CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogV2UncmUgYWxyZWFkeSBpbiBmb3JjZWRfc2h1dGRvd24gbW9kZSwgY291bGRuJ3QKQEAgLTExOTYsNyArMTIwMCw3IEBACiAJCQkgIGttZW1femFsbG9jKHNpemVvZih4bG9nX2luX2NvcmVfdCksIEtNX1NMRUVQKTsKIAkJaWNsb2cgPSAqaWNsb2dwOwogCQlpY2xvZy0+aGljX2RhdGEgPSAoeGxvZ19pbl9jb3JlXzJfdCAqKQotCQkJICBrbWVtX3phbGxvYyhpY2xvZ3NpemUsIEtNX1NMRUVQKTsKKwkJCSAga21lbV96YWxsb2MoaWNsb2dzaXplLCBLTV9TTEVFUCB8IEtNX0xBUkdFKTsKIAogCQlpY2xvZy0+aWNfcHJldiA9IHByZXZfaWNsb2c7CiAJCXByZXZfaWNsb2cgPSBpY2xvZzsKQEAgLTIyMTIsOSArMjIxNiwxMyBAQAogCiAJCQlpY2xvZyA9IGljbG9nLT5pY19uZXh0OwogCQl9IHdoaWxlIChmaXJzdF9pY2xvZyAhPSBpY2xvZyk7Ci0JCWlmIChyZXBlYXRzICYmIChyZXBlYXRzICUgMTApID09IDApIHsKKworCQlpZiAocmVwZWF0cyA+IDUwMDApIHsKKwkJCWZsdXNoY250ICs9IHJlcGVhdHM7CisJCQlyZXBlYXRzID0gMDsKIAkJCXhmc19mc19jbW5fZXJyKENFX1dBUk4sIGxvZy0+bF9tcCwKLQkJCQkieGxvZ19zdGF0ZV9kb19jYWxsYmFjazogbG9vcGluZyAlZCIsIHJlcGVhdHMpOworCQkJCSIlczogcG9zc2libGUgaW5maW5pdGUgbG9vcCAoJWQgaXRlcmF0aW9ucykiLAorCQkJCV9fRlVOQ1RJT05fXywgZmx1c2hjbnQpOwogCQl9CiAJfSB3aGlsZSAoIWlvZXJyb3JzICYmIGxvb3BkaWRjYWxsYmFja3MpOwogCkBAIC0yMjQ2LDYgKzIyNTQsNyBAQAogCX0KICNlbmRpZgogCisJZmx1c2hjbnQgPSAwOwogCWlmIChsb2ctPmxfaWNsb2ctPmljX3N0YXRlICYgKFhMT0dfU1RBVEVfQUNUSVZFfFhMT0dfU1RBVEVfSU9FUlJPUikpIHsKIAkJZmx1c2hjbnQgPSBsb2ctPmxfZmx1c2hjbnQ7CiAJCWxvZy0+bF9mbHVzaGNudCA9IDA7CmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX2xvZy5oIGIvZnMveGZzL3hmc19sb2cuaAppbmRleCBlYWNiM2Q0Li5lYmJlOTNmIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX2xvZy5oCisrKyBiL2ZzL3hmcy94ZnNfbG9nLmgKQEAgLTQ4LDE2ICs0OCwxMCBAQAogICovCiAKIC8qCi0gKiBGbGFncyB0byB4ZnNfbG9nX21vdW50Ci0gKi8KLSNkZWZpbmUgWEZTX0xPR19SRUNPVkVSCQkweDEKLQotLyoKICAqIEZsYWdzIHRvIHhmc19sb2dfZG9uZSgpCiAgKi8KICNkZWZpbmUgWEZTX0xPR19SRUxfUEVSTV9SRVNFUlYJMHgxCiAKLQogLyoKICAqIEZsYWdzIHRvIHhmc19sb2dfcmVzZXJ2ZSgpCiAgKgpAQCAtNzAsOCArNjQsNiBAQAogI2RlZmluZSBYRlNfTE9HX1NMRUVQCQkweDAKICNkZWZpbmUgWEZTX0xPR19OT1NMRUVQCQkweDEKICNkZWZpbmUgWEZTX0xPR19QRVJNX1JFU0VSVgkweDIKLSNkZWZpbmUgWEZTX0xPR19SRVNWX0FMTAkoWEZTX0xPR19OT1NMRUVQfFhGU19MT0dfUEVSTV9SRVNFUlYpCi0KIAogLyoKICAqIEZsYWdzIHRvIHhmc19sb2dfZm9yY2UoKQpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc19sb2dfcHJpdi5oIGIvZnMveGZzL3hmc19sb2dfcHJpdi5oCmluZGV4IDM0YmNiZjUuLjliZDNjZGYgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfbG9nX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX2xvZ19wcml2LmgKQEAgLTMyLDcgKzMyLDYgQEAKICNkZWZpbmUgWExPR19NSU5fSUNMT0dTCQkyCiAjZGVmaW5lIFhMT0dfTUVEX0lDTE9HUwkJNAogI2RlZmluZSBYTE9HX01BWF9JQ0xPR1MJCTgKLSNkZWZpbmUgWExPR19DQUxMQkFDS19TSVpFCTEwCiAjZGVmaW5lIFhMT0dfSEVBREVSX01BR0lDX05VTQkweEZFRURiYWJlCS8qIEludmFsaWQgY3ljbGUgbnVtYmVyICovCiAjZGVmaW5lIFhMT0dfVkVSU0lPTl8xCQkxCiAjZGVmaW5lIFhMT0dfVkVSU0lPTl8yCQkyCQkvKiBMYXJnZSBJQ2xvZ3MsIExvZyBzdW5pdCAqLwpAQCAtMTQ5LDkgKzE0OCw2IEBACiAjZGVmaW5lIFhMT0dfV0FTX0NPTlRfVFJBTlMJMHgwOAkvKiBDb250IHRoaXMgdHJhbnMgaW50byBuZXcgcmVnaW9uICovCiAjZGVmaW5lIFhMT0dfRU5EX1RSQU5TCQkweDEwCS8qIEVuZCBhIGNvbnRpbnVlZCB0cmFuc2FjdGlvbiAqLwogI2RlZmluZSBYTE9HX1VOTU9VTlRfVFJBTlMJMHgyMAkvKiBVbm1vdW50IGEgZmlsZXN5c3RlbSB0cmFuc2FjdGlvbiAqLwotI2RlZmluZSBYTE9HX1NLSVBfVFJBTlMJCShYTE9HX0NPTU1JVF9UUkFOUyB8IFhMT0dfQ09OVElOVUVfVFJBTlMgfCBcCi0JCQkJIFhMT0dfV0FTX0NPTlRfVFJBTlMgfCBYTE9HX0VORF9UUkFOUyB8IFwKLQkJCQkgWExPR19VTk1PVU5UX1RSQU5TKQogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKQEAgLTUwNiw2ICs1MDIsMTIgQEAKICNkZWZpbmUgWExPR19UUkFDRV9TTEVFUF9GTFVTSCAzCiAjZGVmaW5lIFhMT0dfVFJBQ0VfV0FLRV9GTFVTSCAgNAogCisvKgorICogVW5tb3VudCByZWNvcmQgdHlwZSBpcyB1c2VkIGFzIGEgcHNldWRvIHRyYW5zYWN0aW9uIHR5cGUgZm9yIHRoZSB0aWNrZXQuCisgKiBJdCdzIHZhbHVlIG11c3QgYmUgb3V0c2lkZSB0aGUgcmFuZ2Ugb2YgWEZTX1RSQU5TXyogdmFsdWVzLgorICovCisjZGVmaW5lIFhMT0dfVU5NT1VOVF9SRUNfVFlQRQkoLTFVKQorCiAjZW5kaWYJLyogX19LRVJORUxfXyAqLwogCiAjZW5kaWYJLyogX19YRlNfTE9HX1BSSVZfSF9fICovCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX21vdW50LmggYi9mcy94ZnMveGZzX21vdW50LmgKaW5kZXggYjJiZDRiZS4uZTVmMzk2ZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19tb3VudC5oCisrKyBiL2ZzL3hmcy94ZnNfbW91bnQuaApAQCAtMzMxLDcgKzMzMSw3IEBACiAJeGZzX2FnbnVtYmVyX3QJCW1fYWdpcm90b3I7CS8qIGxhc3QgYWcgZGlyIGlub2RlIGFsbG9jZWQgKi8KIAlsb2NrX3QJCQltX2FnaXJvdG9yX2xvY2s7LyogLi4gYW5kIGxvY2sgcHJvdGVjdGluZyBpdCAqLwogCXhmc19hZ251bWJlcl90CQltX21heGFnaTsJLyogaGlnaGVzdCBpbm9kZSBhbGxvYyBncm91cCAqLwotCXVpbnQJCQltX2loc2l6ZTsJLyogc2l6ZSBvZiBuZXh0IGZpZWxkICovCisJc2l6ZV90CQkJbV9paHNpemU7CS8qIHNpemUgb2YgbmV4dCBmaWVsZCAqLwogCXN0cnVjdCB4ZnNfaWhhc2gJKm1faWhhc2g7CS8qIGZzIHByaXZhdGUgaW5vZGUgaGFzaCB0YWJsZSovCiAJc3RydWN0IHhmc19pbm9kZQkqbV9pbm9kZXM7CS8qIGFjdGl2ZSBpbm9kZSBsaXN0ICovCiAJc3RydWN0IGxpc3RfaGVhZAltX2RlbF9pbm9kZXM7CS8qIGlub2RlcyB0byByZWNsYWltICovCkBAIC01NDEsNyArNTQxLDggQEAKICNkZWZpbmUgWEZTX1ZGU1RPTSh2ZnMpIHhmc192ZnN0b20odmZzKQogc3RhdGljIGlubGluZSB4ZnNfbW91bnRfdCAqeGZzX3Zmc3RvbShiaHZfdmZzX3QgKnZmcykKIHsKLQlyZXR1cm4gWEZTX0JIVlRPTShiaHZfbG9va3VwKFZGU19CSFZIRUFEKHZmcyksICZ4ZnNfdmZzb3BzKSk7CisJcmV0dXJuIFhGU19CSFZUT00oYmh2X2xvb2t1cF9yYW5nZShWRlNfQkhWSEVBRCh2ZnMpLAorCQkJCVZGU19QT1NJVElPTl9YRlMsIFZGU19QT1NJVElPTl9YRlMpKTsKIH0KIAogI2RlZmluZSBYRlNfREFERFJfVE9fQUdOTyhtcCxkKSAgICAgICAgIHhmc19kYWRkcl90b19hZ25vKG1wLGQpCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3F1b3RhLmggYi9mcy94ZnMveGZzX3F1b3RhLmgKaW5kZXggYWNiODUzYi4uOWRjYjMyYSAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19xdW90YS5oCisrKyBiL2ZzL3hmcy94ZnNfcXVvdGEuaApAQCAtMjgxLDggKzI4MSw2IEBACiAJCQkJIFhGU19VUVVPVEFfQ0hLRHxYRlNfUFFVT1RBX0FDQ1R8XAogCQkJCSBYRlNfT1FVT1RBX0VORkR8WEZTX09RVU9UQV9DSEtEfFwKIAkJCQkgWEZTX0dRVU9UQV9BQ0NUKQotI2RlZmluZSBYRlNfTU9VTlRfUVVPVEFfTUFTSwkoWEZTX01PVU5UX1FVT1RBX0FMTCB8IFhGU19VUVVPVEFfQUNUSVZFIHwgXAotCQkJCSBYRlNfR1FVT1RBX0FDVElWRSB8IFhGU19QUVVPVEFfQUNUSVZFKQogCiAKIC8qCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3J0YWxsb2MuYyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCmluZGV4IDVhMGI2NzguLjg4MGM3MzIgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCisrKyBiL2ZzL3hmcy94ZnNfcnRhbGxvYy5jCkBAIC0xOTQ4LDcgKzE5NDgsNyBAQAogCSAqLwogCW5yZXh0ZW50cyA9IG5yYmxvY2tzOwogCWRvX2RpdihucmV4dGVudHMsIGluLT5leHRzaXplKTsKLQlucmJtYmxvY2tzID0gcm91bmR1cF82NChucmV4dGVudHMsIE5CQlkgKiBzYnAtPnNiX2Jsb2Nrc2l6ZSk7CisJbnJibWJsb2NrcyA9IGhvd21hbnlfNjQobnJleHRlbnRzLCBOQkJZICogc2JwLT5zYl9ibG9ja3NpemUpOwogCW5yZXh0c2xvZyA9IHhmc19oaWdoYml0MzIobnJleHRlbnRzKTsKIAlucnN1bWxldmVscyA9IG5yZXh0c2xvZyArIDE7CiAJbnJzdW1zaXplID0gKHVpbnQpc2l6ZW9mKHhmc19zdW1pbmZvX3QpICogbnJzdW1sZXZlbHMgKiBucmJtYmxvY2tzOwpAQCAtMTk3Niw3ICsxOTc2LDEwIEBACiAJaWYgKChlcnJvciA9IHhmc19ncm93ZnNfcnRfYWxsb2MobXAsIHJzdW1ibG9ja3MsIG5yc3VtYmxvY2tzLAogCQkJbXAtPm1fc2Iuc2JfcnN1bWlubykpKQogCQlyZXR1cm4gZXJyb3I7Ci0Jbm1wID0gTlVMTDsKKwkvKgorCSAqIEFsbG9jYXRlIGEgbmV3IChmYWtlKSBtb3VudC9zYi4KKwkgKi8KKwlubXAgPSBrbWVtX2FsbG9jKHNpemVvZigqbm1wKSwgS01fU0xFRVApOwogCS8qCiAJICogTG9vcCBvdmVyIHRoZSBiaXRtYXAgYmxvY2tzLgogCSAqIFdlIHdpbGwgZG8gZXZlcnl0aGluZyBvbmUgYml0bWFwIGJsb2NrIGF0IGEgdGltZS4KQEAgLTE5ODcsMTAgKzE5OTAsNiBAQAogCQkgICAgICgoc2JwLT5zYl9yZXh0ZW50cyAmICgoMSA8PCBtcC0+bV9ibGtiaXRfbG9nKSAtIDEpKSAhPSAwKTsKIAkgICAgIGJtYm5vIDwgbnJibWJsb2NrczsKIAkgICAgIGJtYm5vKyspIHsKLQkJLyoKLQkJICogQWxsb2NhdGUgYSBuZXcgKGZha2UpIG1vdW50L3NiLgotCQkgKi8KLQkJbm1wID0ga21lbV9hbGxvYyhzaXplb2YoKm5tcCksIEtNX1NMRUVQKTsKIAkJKm5tcCA9ICptcDsKIAkJbnNicCA9ICZubXAtPm1fc2I7CiAJCS8qCkBAIC0yMDE4LDEzICsyMDE3LDEzIEBACiAJCWNhbmNlbGZsYWdzID0gMDsKIAkJaWYgKChlcnJvciA9IHhmc190cmFuc19yZXNlcnZlKHRwLCAwLAogCQkJCVhGU19HUk9XUlRGUkVFX0xPR19SRVMobm1wKSwgMCwgMCwgMCkpKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJYnJlYWs7CiAJCS8qCiAJCSAqIExvY2sgb3V0IG90aGVyIGNhbGxlcnMgYnkgZ3JhYmJpbmcgdGhlIGJpdG1hcCBpbm9kZSBsb2NrLgogCQkgKi8KIAkJaWYgKChlcnJvciA9IHhmc190cmFuc19pZ2V0KG1wLCB0cCwgbXAtPm1fc2Iuc2JfcmJtaW5vLCAwLAogCQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJYnJlYWs7CiAJCUFTU0VSVChpcCA9PSBtcC0+bV9yYm1pcCk7CiAJCS8qCiAJCSAqIFVwZGF0ZSB0aGUgYml0bWFwIGlub2RlJ3Mgc2l6ZS4KQEAgLTIwMzgsNyArMjAzNyw3IEBACiAJCSAqLwogCQlpZiAoKGVycm9yID0geGZzX3RyYW5zX2lnZXQobXAsIHRwLCBtcC0+bV9zYi5zYl9yc3VtaW5vLCAwLAogCQkJCQkJWEZTX0lMT0NLX0VYQ0wsICZpcCkpKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJYnJlYWs7CiAJCUFTU0VSVChpcCA9PSBtcC0+bV9yc3VtaXApOwogCQkvKgogCQkgKiBVcGRhdGUgdGhlIHN1bW1hcnkgaW5vZGUncyBzaXplLgpAQCAtMjA1Myw3ICsyMDUyLDcgQEAKIAkJICAgIG1wLT5tX3JzdW1sZXZlbHMgIT0gbm1wLT5tX3JzdW1sZXZlbHMpIHsKIAkJCWVycm9yID0geGZzX3J0Y29weV9zdW1tYXJ5KG1wLCBubXAsIHRwKTsKIAkJCWlmIChlcnJvcikKLQkJCQlnb3RvIGVycm9yX2V4aXQ7CisJCQkJYnJlYWs7CiAJCX0KIAkJLyoKIAkJICogVXBkYXRlIHN1cGVyYmxvY2sgZmllbGRzLgpAQCAtMjA4MCwxOCArMjA3OSwxMyBAQAogCQllcnJvciA9IHhmc19ydGZyZWVfcmFuZ2Uobm1wLCB0cCwgc2JwLT5zYl9yZXh0ZW50cywKIAkJCW5zYnAtPnNiX3JleHRlbnRzIC0gc2JwLT5zYl9yZXh0ZW50cywgJmJwLCAmc3VtYm5vKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBlcnJvcl9leGl0OworCQkJYnJlYWs7CiAJCS8qCiAJCSAqIE1hcmsgbW9yZSBibG9ja3MgZnJlZSBpbiB0aGUgc3VwZXJibG9jay4KIAkJICovCiAJCXhmc190cmFuc19tb2Rfc2IodHAsIFhGU19UUkFOU19TQl9GUkVYVEVOVFMsCiAJCQluc2JwLT5zYl9yZXh0ZW50cyAtIHNicC0+c2JfcmV4dGVudHMpOwogCQkvKgotCQkgKiBGcmVlIHRoZSBmYWtlIG1wIHN0cnVjdHVyZS4KLQkJICovCi0JCWttZW1fZnJlZShubXAsIHNpemVvZigqbm1wKSk7Ci0JCW5tcCA9IE5VTEw7Ci0JCS8qCiAJCSAqIFVwZGF0ZSBtcCB2YWx1ZXMgaW50byB0aGUgcmVhbCBtcCBzdHJ1Y3R1cmUuCiAJCSAqLwogCQltcC0+bV9yc3VtbGV2ZWxzID0gbnJzdW1sZXZlbHM7CkBAIC0yMTAxLDE1ICsyMDk1LDE1IEBACiAJCSAqLwogCQl4ZnNfdHJhbnNfY29tbWl0KHRwLCAwLCBOVUxMKTsKIAl9Ci0JcmV0dXJuIDA7CisKKwlpZiAoZXJyb3IpCisJCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbGZsYWdzKTsKIAogCS8qCi0JICogRXJyb3IgcGF0aHMgY29tZSBoZXJlLgorCSAqIEZyZWUgdGhlIGZha2UgbXAgc3RydWN0dXJlLgogCSAqLwotZXJyb3JfZXhpdDoKLQlpZiAobm1wKQotCQlrbWVtX2ZyZWUobm1wLCBzaXplb2YoKm5tcCkpOwotCXhmc190cmFuc19jYW5jZWwodHAsIGNhbmNlbGZsYWdzKTsKKwlrbWVtX2ZyZWUobm1wLCBzaXplb2YoKm5tcCkpOworCiAJcmV0dXJuIGVycm9yOwogfQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3NiLmggYi9mcy94ZnMveGZzX3NiLmgKaW5kZXggYmYxNjhhOS4uNDY3ODU0YiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc19zYi5oCisrKyBiL2ZzL3hmcy94ZnNfc2IuaApAQCAtNjAsMTAgKzYwLDYgQEAKIAkgWEZTX1NCX1ZFUlNJT05fTE9HVjJCSVQgfCBcCiAJIFhGU19TQl9WRVJTSU9OX1NFQ1RPUkJJVCB8IFwKIAkgWEZTX1NCX1ZFUlNJT05fTU9SRUJJVFNCSVQpCi0jZGVmaW5lCVhGU19TQl9WRVJTSU9OX09LU0FTSEJJVFMJXAotCShYRlNfU0JfVkVSU0lPTl9OVU1CSVRTIHwgXAotCSBYRlNfU0JfVkVSU0lPTl9SRUFMRkJJVFMgfCBcCi0JIFhGU19TQl9WRVJTSU9OX09LU0FTSEZCSVRTKQogI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9PS1JFQUxCSVRTCVwKIAkoWEZTX1NCX1ZFUlNJT05fTlVNQklUUyB8IFwKIAkgWEZTX1NCX1ZFUlNJT05fT0tSRUFMRkJJVFMgfCBcCkBAIC04MSw5ICs3Nyw2IEBACiAjZGVmaW5lIFhGU19TQl9WRVJTSU9OMl9SRVNFUlZFRDJCSVQJMHgwMDAwMDAwMgogI2RlZmluZSBYRlNfU0JfVkVSU0lPTjJfUkVTRVJWRUQ0QklUCTB4MDAwMDAwMDQKICNkZWZpbmUgWEZTX1NCX1ZFUlNJT04yX0FUVFIyQklUCTB4MDAwMDAwMDgJLyogSW5saW5lIGF0dHIgcmV3b3JrICovCi0jZGVmaW5lIFhGU19TQl9WRVJTSU9OMl9TQVNIRkJJVFMJMHhmZjAwMDAwMAkvKiBNYXNrOiBmZWF0dXJlcyB0aGF0Ci0JCQkJCQkJICAgcmVxdWlyZSBjaGFuZ2luZwotCQkJCQkJCSAgIFBST00gYW5kIFNBU0ggKi8KIAogI2RlZmluZQlYRlNfU0JfVkVSU0lPTjJfT0tSRUFMRkJJVFMJXAogCShYRlNfU0JfVkVSU0lPTjJfQVRUUjJCSVQpCkBAIC0yMzgsMTIgKzIzMSw2IEBACiB9CiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCi0jZGVmaW5lCVhGU19TQl9HT09EX1NBU0hfVkVSU0lPTihzYnApCVwKLQkoKCgoc2JwKS0+c2JfdmVyc2lvbm51bSA+PSBYRlNfU0JfVkVSU0lPTl8xKSAmJiBcCi0JICAoKHNicCktPnNiX3ZlcnNpb25udW0gPD0gWEZTX1NCX1ZFUlNJT05fMykpIHx8IFwKLQkgKChYRlNfU0JfVkVSU0lPTl9OVU0oc2JwKSA9PSBYRlNfU0JfVkVSU0lPTl80KSAmJiBcCi0JICAhKChzYnApLT5zYl92ZXJzaW9ubnVtICYgflhGU19TQl9WRVJTSU9OX09LU0FTSEJJVFMpKSkKLQogI2RlZmluZQlYRlNfU0JfVkVSU0lPTl9UT05FVyh2KQl4ZnNfc2JfdmVyc2lvbl90b25ldyh2KQogc3RhdGljIGlubGluZSB1bnNpZ25lZCB4ZnNfc2JfdmVyc2lvbl90b25ldyh1bnNpZ25lZCB2KQogewpAQCAtNDYxLDE1ICs0NDgsNiBAQAogICogRmlsZSBzeXN0ZW0gc2VjdG9yIHRvIGJhc2ljIGJsb2NrIGNvbnZlcnNpb25zLgogICovCiAjZGVmaW5lIFhGU19GU1NfVE9fQkIobXAsc2VjKQkoKHNlYykgPDwgKG1wKS0+bV9zZWN0YmJfbG9nKQotI2RlZmluZSBYRlNfQkJfVE9fRlNTKG1wLGJiKQlcCi0JKCgoYmIpICsgKFhGU19GU1NfVE9fQkIobXAsMSkgLSAxKSkgPj4gKG1wKS0+bV9zZWN0YmJfbG9nKQotI2RlZmluZSBYRlNfQkJfVE9fRlNTVChtcCxiYikJKChiYikgPj4gKG1wKS0+bV9zZWN0YmJfbG9nKQotCi0vKgotICogRmlsZSBzeXN0ZW0gc2VjdG9yIHRvIGJ5dGUgY29udmVyc2lvbnMuCi0gKi8KLSNkZWZpbmUgWEZTX0ZTU19UT19CKG1wLHNlY3RubykJKCh4ZnNfZnNpemVfdCkoc2VjdG5vKSA8PCAobXApLT5tX3NiLnNiX3NlY3Rsb2cpCi0jZGVmaW5lIFhGU19CX1RPX0ZTU1QobXAsYikJKCgoX191aW50NjRfdCkoYikpID4+IChtcCktPm1fc2Iuc2Jfc2VjdGxvZykKIAogLyoKICAqIEZpbGUgc3lzdGVtIGJsb2NrIHRvIGJhc2ljIGJsb2NrIGNvbnZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFucy5oIGIvZnMveGZzL3hmc190cmFucy5oCmluZGV4IDlkYzg4YjMuLmM2OGUwMDEgMTAwNjQ0Ci0tLSBhL2ZzL3hmcy94ZnNfdHJhbnMuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zLmgKQEAgLTE0OSw3ICsxNDksNiBAQAogCXZvaWQgKCppb3BfdW5sb2NrKSh4ZnNfbG9nX2l0ZW1fdCAqKTsKIAl4ZnNfbHNuX3QgKCppb3BfY29tbWl0dGVkKSh4ZnNfbG9nX2l0ZW1fdCAqLCB4ZnNfbHNuX3QpOwogCXZvaWQgKCppb3BfcHVzaCkoeGZzX2xvZ19pdGVtX3QgKik7Ci0Jdm9pZCAoKmlvcF9hYm9ydCkoeGZzX2xvZ19pdGVtX3QgKik7CiAJdm9pZCAoKmlvcF9wdXNoYnVmKSh4ZnNfbG9nX2l0ZW1fdCAqKTsKIAl2b2lkICgqaW9wX2NvbW1pdHRpbmcpKHhmc19sb2dfaXRlbV90ICosIHhmc19sc25fdCk7CiB9IHhmc19pdGVtX29wc190OwpAQCAtMTYzLDcgKzE2Miw2IEBACiAjZGVmaW5lIElPUF9VTkxPQ0soaXApCQkoKihpcCktPmxpX29wcy0+aW9wX3VubG9jaykoaXApCiAjZGVmaW5lIElPUF9DT01NSVRURUQoaXAsIGxzbikJKCooaXApLT5saV9vcHMtPmlvcF9jb21taXR0ZWQpKGlwLCBsc24pCiAjZGVmaW5lIElPUF9QVVNIKGlwKQkJKCooaXApLT5saV9vcHMtPmlvcF9wdXNoKShpcCkKLSNkZWZpbmUgSU9QX0FCT1JUKGlwKQkJKCooaXApLT5saV9vcHMtPmlvcF9hYm9ydCkoaXApCiAjZGVmaW5lIElPUF9QVVNIQlVGKGlwKQkJKCooaXApLT5saV9vcHMtPmlvcF9wdXNoYnVmKShpcCkKICNkZWZpbmUgSU9QX0NPTU1JVFRJTkcoaXAsIGxzbikgKCooaXApLT5saV9vcHMtPmlvcF9jb21taXR0aW5nKShpcCwgbHNuKQogCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jIGIvZnMveGZzL3hmc190cmFuc19haWwuYwppbmRleCA1NThjODdmLi5mYzM5YjE2IDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX2FpbC5jCisrKyBiL2ZzL3hmcy94ZnNfdHJhbnNfYWlsLmMKQEAgLTI3Niw3ICsyNzYsNyBAQAogCXhmc19tb3VudF90CSptcCwKIAl4ZnNfbG9nX2l0ZW1fdAkqbGlwLAogCXhmc19sc25fdAlsc24sCi0JdW5zaWduZWQgbG9uZwlzKQorCXVuc2lnbmVkIGxvbmcJcykgX19yZWxlYXNlcyhtcC0+bV9haWxfbG9jaykKIHsKIAl4ZnNfYWlsX2VudHJ5X3QJCSphaWxwOwogCXhmc19sb2dfaXRlbV90CQkqZGxpcD1OVUxMOwpAQCAtMzI4LDcgKzMyOCw3IEBACiB4ZnNfdHJhbnNfZGVsZXRlX2FpbCgKIAl4ZnNfbW91bnRfdAkqbXAsCiAJeGZzX2xvZ19pdGVtX3QJKmxpcCwKLQl1bnNpZ25lZCBsb25nCXMpCisJdW5zaWduZWQgbG9uZwlzKSBfX3JlbGVhc2VzKG1wLT5tX2FpbF9sb2NrKQogewogCXhmc19haWxfZW50cnlfdAkJKmFpbHA7CiAJeGZzX2xvZ19pdGVtX3QJCSpkbGlwOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc190cmFuc19wcml2LmggYi9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaAppbmRleCAxM2VkYWI4Li40NDdhYzQzIDEwMDY0NAotLS0gYS9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaAorKysgYi9mcy94ZnMveGZzX3RyYW5zX3ByaXYuaApAQCAtNDYsMTEgKzQ2LDEzIEBACiAvKgogICogRnJvbSB4ZnNfdHJhbnNfYWlsLmMKICAqLwotdm9pZAkJCXhmc190cmFuc191cGRhdGVfYWlsKHN0cnVjdCB4ZnNfbW91bnQgKiwKLQkJCQkgICAgIHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKiwgeGZzX2xzbl90LAotCQkJCSAgICAgdW5zaWduZWQgbG9uZyk7Ci12b2lkCQkJeGZzX3RyYW5zX2RlbGV0ZV9haWwoc3RydWN0IHhmc19tb3VudCAqLAotCQkJCSAgICAgc3RydWN0IHhmc19sb2dfaXRlbSAqLCB1bnNpZ25lZCBsb25nKTsKK3ZvaWQJCQl4ZnNfdHJhbnNfdXBkYXRlX2FpbChzdHJ1Y3QgeGZzX21vdW50ICptcCwKKwkJCQkgICAgIHN0cnVjdCB4ZnNfbG9nX2l0ZW0gKmxpcCwgeGZzX2xzbl90IGxzbiwKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgcykKKwkJCQkgICAgIF9fcmVsZWFzZXMobXAtPm1fYWlsX2xvY2spOwordm9pZAkJCXhmc190cmFuc19kZWxldGVfYWlsKHN0cnVjdCB4ZnNfbW91bnQgKm1wLAorCQkJCSAgICAgc3RydWN0IHhmc19sb2dfaXRlbSAqbGlwLCB1bnNpZ25lZCBsb25nIHMpCisJCQkJICAgICBfX3JlbGVhc2VzKG1wLT5tX2FpbF9sb2NrKTsKIHN0cnVjdCB4ZnNfbG9nX2l0ZW0JKnhmc190cmFuc19maXJzdF9haWwoc3RydWN0IHhmc19tb3VudCAqLCBpbnQgKik7CiBzdHJ1Y3QgeGZzX2xvZ19pdGVtCSp4ZnNfdHJhbnNfbmV4dF9haWwoc3RydWN0IHhmc19tb3VudCAqLAogCQkJCSAgICAgc3RydWN0IHhmc19sb2dfaXRlbSAqLCBpbnQgKiwgaW50ICopOwpkaWZmIC0tZ2l0IGEvZnMveGZzL3hmc192ZnNvcHMuYyBiL2ZzL3hmcy94ZnNfdmZzb3BzLmMKaW5kZXggYTM0Nzk2ZS4uNjIzMzZhNCAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192ZnNvcHMuYworKysgYi9mcy94ZnMveGZzX3Zmc29wcy5jCkBAIC0xOTIyLDcgKzE5MjIsNyBAQAogCX0KIAogCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9JSEFTSFNJWkUpCi0JCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF9JSEFTSFNJWkUgIj0lZCIsIG1wLT5tX2loc2l6ZSk7CisJCXNlcV9wcmludGYobSwgIiwiIE1OVE9QVF9JSEFTSFNJWkUgIj0lZCIsIChpbnQpbXAtPm1faWhzaXplKTsKIAogCWlmIChtcC0+bV9mbGFncyAmIFhGU19NT1VOVF9ERkxUX0lPU0laRSkKIAkJc2VxX3ByaW50ZihtLCAiLCIgTU5UT1BUX0FMTE9DU0laRSAiPSVkayIsCmRpZmYgLS1naXQgYS9mcy94ZnMveGZzX3Zub2Rlb3BzLmMgYi9mcy94ZnMveGZzX3Zub2Rlb3BzLmMKaW5kZXggMjNjZmE1OC4uMDYxZTJmZiAxMDA2NDQKLS0tIGEvZnMveGZzL3hmc192bm9kZW9wcy5jCisrKyBiL2ZzL3hmcy94ZnNfdm5vZGVvcHMuYwpAQCAtMjM2NiwxMCArMjM2NiwxNSBAQAogCiAJbmFtZWxlbiA9IFZOQU1FTEVOKGRlbnRyeSk7CiAKKwlpZiAoIXhmc19nZXRfZGlyX2VudHJ5KGRlbnRyeSwgJmlwKSkgeworCSAgICAgICAgZG1fZGlfbW9kZSA9IGlwLT5pX2QuZGlfbW9kZTsKKwkJSVJFTEUoaXApOworCX0KKwogCWlmIChETV9FVkVOVF9FTkFCTEVEKGRpcl92cC0+dl92ZnNwLCBkcCwgRE1fRVZFTlRfUkVNT1ZFKSkgewogCQllcnJvciA9IFhGU19TRU5EX05BTUVTUChtcCwgRE1fRVZFTlRfUkVNT1ZFLCBkaXJfdnAsCiAJCQkJCURNX1JJR0hUX05VTEwsIE5VTEwsIERNX1JJR0hUX05VTEwsCi0JCQkJCW5hbWUsIE5VTEwsIDAsIDAsIDApOworCQkJCQluYW1lLCBOVUxMLCBkbV9kaV9tb2RlLCAwLCAwKTsKIAkJaWYgKGVycm9yKQogCQkJcmV0dXJuIGVycm9yOwogCX0KQEAgLTI5OTUsNyArMzAwMCw3IEBACiAJaW50CQkJY2FuY2VsX2ZsYWdzOwogCWludAkJCWNvbW1pdHRlZDsKIAliaHZfdm5vZGVfdAkJKmRpcl92cDsKLQlpbnQJCQlkbV9kaV9tb2RlID0gMDsKKwlpbnQJCQlkbV9kaV9tb2RlID0gU19JRkRJUjsKIAlpbnQJCQlsYXN0X2NkcF9saW5rOwogCWludAkJCW5hbWVsZW47CiAJdWludAkJCXJlc2Jsa3M7CkBAIC0zMDEwLDExICszMDE1LDE2IEBACiAJCXJldHVybiBYRlNfRVJST1IoRUlPKTsKIAluYW1lbGVuID0gVk5BTUVMRU4oZGVudHJ5KTsKIAorCWlmICgheGZzX2dldF9kaXJfZW50cnkoZGVudHJ5LCAmY2RwKSkgeworCSAgICAgICAgZG1fZGlfbW9kZSA9IGNkcC0+aV9kLmRpX21vZGU7CisJCUlSRUxFKGNkcCk7CisJfQorCiAJaWYgKERNX0VWRU5UX0VOQUJMRUQoZGlyX3ZwLT52X3Zmc3AsIGRwLCBETV9FVkVOVF9SRU1PVkUpKSB7CiAJCWVycm9yID0gWEZTX1NFTkRfTkFNRVNQKG1wLCBETV9FVkVOVF9SRU1PVkUsCiAJCQkJCWRpcl92cCwgRE1fUklHSFRfTlVMTCwKIAkJCQkJTlVMTCwgRE1fUklHSFRfTlVMTCwKLQkJCQkJbmFtZSwgTlVMTCwgMCwgMCwgMCk7CisJCQkJCW5hbWUsIE5VTEwsIGRtX2RpX21vZGUsIDAsIDApOwogCQlpZiAoZXJyb3IpCiAJCQlyZXR1cm4gWEZTX0VSUk9SKGVycm9yKTsKIAl9CkBAIC0zODM0LDcgKzM4NDQsOSBAQAogCQlYRlNfTU9VTlRfSUxPQ0sobXApOwogCQl2bl9iaHZfcmVtb3ZlKFZOX0JIVl9IRUFEKHZwKSwgWEZTX0lUT0JIVihpcCkpOwogCQlsaXN0X2FkZF90YWlsKCZpcC0+aV9yZWNsYWltLCAmbXAtPm1fZGVsX2lub2Rlcyk7CisJCXNwaW5fbG9jaygmaXAtPmlfZmxhZ3NfbG9jayk7CiAJCWlwLT5pX2ZsYWdzIHw9IFhGU19JUkVDTEFJTUFCTEU7CisJCXNwaW5fdW5sb2NrKCZpcC0+aV9mbGFnc19sb2NrKTsKIAkJWEZTX01PVU5UX0lVTkxPQ0sobXApOwogCX0KIAlyZXR1cm4gMDsKQEAgLTM4NTksOCArMzg3MSwxMCBAQAogCSAqIHVzLgogCSAqLwogCXdyaXRlX2xvY2soJmloLT5paF9sb2NrKTsKKwlzcGluX2xvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCWlmICgoaXAtPmlfZmxhZ3MgJiBYRlNfSVJFQ0xBSU0pIHx8CiAJICAgICghKGlwLT5pX2ZsYWdzICYgWEZTX0lSRUNMQUlNQUJMRSkgJiYgdnAgPT0gTlVMTCkpIHsKKwkJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCQl3cml0ZV91bmxvY2soJmloLT5paF9sb2NrKTsKIAkJaWYgKGxvY2tlZCkgewogCQkJeGZzX2lmdW5sb2NrKGlwKTsKQEAgLTM4NjksNiArMzg4Myw3IEBACiAJCXJldHVybiAxOwogCX0KIAlpcC0+aV9mbGFncyB8PSBYRlNfSVJFQ0xBSU07CisJc3Bpbl91bmxvY2soJmlwLT5pX2ZsYWdzX2xvY2spOwogCXdyaXRlX3VubG9jaygmaWgtPmloX2xvY2spOwogCiAJLyoKQEAgLTQyNzIsNyArNDI4Nyw3IEBACiAJeGZzX21vdW50X3QJCSptcDsKIAlpbnQJCQluaW1hcDsKIAl1aW50CQkJcmVzYmxrczsKLQlpbnQJCQlyb3VuZGluZzsKKwl1aW50CQkJcm91bmRpbmc7CiAJaW50CQkJcnQ7CiAJeGZzX2ZpbGVvZmZfdAkJc3RhcnRvZmZzZXRfZnNiOwogCXhmc190cmFuc190CQkqdHA7CkBAIC00MzEzLDggKzQzMjgsNyBAQAogCQl2bl9pb3dhaXQodnApOwkvKiB3YWl0IGZvciB0aGUgY29tcGxldGlvbiBvZiBhbnkgcGVuZGluZyBESU9zICovCiAJfQogCi0Jcm91bmRpbmcgPSBNQVgoKF9fdWludDhfdCkoMSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZyksCi0JCQkoX191aW50OF90KU5CUFApOworCXJvdW5kaW5nID0gbWF4X3QodWludCwgMSA8PCBtcC0+bV9zYi5zYl9ibG9ja2xvZywgTkJQUCk7CiAJaWxlbiA9IGxlbiArIChvZmZzZXQgJiAocm91bmRpbmcgLSAxKSk7CiAJaW9mZnNldCA9IG9mZnNldCAmIH4ocm91bmRpbmcgLSAxKTsKIAlpZiAoaWxlbiAmIChyb3VuZGluZyAtIDEpKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKaW5kZXggMGMyOTRjOWIuLmFlZWIxMjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFscGhhL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYWxwaGEvc3BpbmxvY2suaApAQCAtMTY2LDQgKzE2Niw4IEBACiAJbG9jay0+bG9jayA9IDA7CiB9CiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKICNlbmRpZiAvKiBfQUxQSEFfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaAppbmRleCA1OGY0MDkzLi5hNWE4NmIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDAuaApAQCAtMTksNjcgKzE5LDgwIEBACiAvKgogICogUGVyaXBoZXJhbCBpZGVudGlmaWVycy9pbnRlcnJ1cHRzLgogICovCi0jZGVmaW5lIEFUOTFfSURfRklRCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KLSNkZWZpbmUgQVQ5MV9JRF9TWVMJMQkvKiBTeXN0ZW0gUGVyaXBoZXJhbCAqLwotI2RlZmluZSBBVDkxX0lEX1BJT0EJMgkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEEgKi8KLSNkZWZpbmUgQVQ5MV9JRF9QSU9CCTMJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBCICovCi0jZGVmaW5lIEFUOTFfSURfUElPQwk0CS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQyAqLwotI2RlZmluZSBBVDkxX0lEX1BJT0QJNQkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEQgKi8KLSNkZWZpbmUgQVQ5MV9JRF9VUzAJNgkvKiBVU0FSVCAwICovCi0jZGVmaW5lIEFUOTFfSURfVVMxCTcJLyogVVNBUlQgMSAqLwotI2RlZmluZSBBVDkxX0lEX1VTMgk4CS8qIFVTQVJUIDIgKi8KLSNkZWZpbmUgQVQ5MV9JRF9VUzMJOQkvKiBVU0FSVCAzICovCi0jZGVmaW5lIEFUOTFfSURfTUNJCTEwCS8qIE11bHRpbWVkaWEgQ2FyZCBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQVQ5MV9JRF9VRFAJMTEJLyogVVNCIERldmljZSBQb3J0ICovCi0jZGVmaW5lIEFUOTFfSURfVFdJCTEyCS8qIFR3by1XaXJlIEludGVyZmFjZSAqLwotI2RlZmluZSBBVDkxX0lEX1NQSQkxMwkvKiBTZXJpYWwgUGVyaXBoZXJhbCBJbnRlcmZhY2UgKi8KLSNkZWZpbmUgQVQ5MV9JRF9TU0MwCTE0CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDAgKi8KLSNkZWZpbmUgQVQ5MV9JRF9TU0MxCTE1CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDEgKi8KLSNkZWZpbmUgQVQ5MV9JRF9TU0MyCTE2CS8qIFNlcmlhbCBTeW5jaHJvbm91cyBDb250cm9sbGVyIDIgKi8KLSNkZWZpbmUgQVQ5MV9JRF9UQzAJMTcJLyogVGltZXIgQ291bnRlciAwICovCi0jZGVmaW5lIEFUOTFfSURfVEMxCTE4CS8qIFRpbWVyIENvdW50ZXIgMSAqLwotI2RlZmluZSBBVDkxX0lEX1RDMgkxOQkvKiBUaW1lciBDb3VudGVyIDIgKi8KLSNkZWZpbmUgQVQ5MV9JRF9UQzMJMjAJLyogVGltZXIgQ291bnRlciAzICovCi0jZGVmaW5lIEFUOTFfSURfVEM0CTIxCS8qIFRpbWVyIENvdW50ZXIgNCAqLwotI2RlZmluZSBBVDkxX0lEX1RDNQkyMgkvKiBUaW1lciBDb3VudGVyIDUgKi8KLSNkZWZpbmUgQVQ5MV9JRF9VSFAJMjMJLyogVVNCIEhvc3QgcG9ydCAqLwotI2RlZmluZSBBVDkxX0lEX0VNQUMJMjQJLyogRXRoZXJuZXQgTUFDICovCi0jZGVmaW5lIEFUOTFfSURfSVJRMAkyNQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMCkgKi8KLSNkZWZpbmUgQVQ5MV9JRF9JUlExCTI2CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlExKSAqLwotI2RlZmluZSBBVDkxX0lEX0lSUTIJMjcJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTIpICovCi0jZGVmaW5lIEFUOTFfSURfSVJRMwkyOAkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMykgKi8KLSNkZWZpbmUgQVQ5MV9JRF9JUlE0CTI5CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE0KSAqLwotI2RlZmluZSBBVDkxX0lEX0lSUTUJMzAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTUpICovCi0jZGVmaW5lIEFUOTFfSURfSVJRNgkzMQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNikgKi8KKyNkZWZpbmUgQVQ5MV9JRF9GSVEJCTAJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKEZJUSkgKi8KKyNkZWZpbmUgQVQ5MV9JRF9TWVMJCTEJLyogU3lzdGVtIFBlcmlwaGVyYWwgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9QSU9BCTIJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBBICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfUElPQgkzCS8qIFBhcmFsbGVsIElPIENvbnRyb2xsZXIgQiAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX1BJT0MJNAkvKiBQYXJhbGxlbCBJTyBDb250cm9sbGVyIEMgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9QSU9ECTUJLyogUGFyYWxsZWwgSU8gQ29udHJvbGxlciBEICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVVMwCTYJLyogVVNBUlQgMCAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX1VTMQk3CS8qIFVTQVJUIDEgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9VUzIJOAkvKiBVU0FSVCAyICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVVMzCTkJLyogVVNBUlQgMyAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX01DSQkxMAkvKiBNdWx0aW1lZGlhIENhcmQgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVURQCTExCS8qIFVTQiBEZXZpY2UgUG9ydCAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX1RXSQkxMgkvKiBUd28tV2lyZSBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9TUEkJMTMJLyogU2VyaWFsIFBlcmlwaGVyYWwgSW50ZXJmYWNlICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfU1NDMAkxNAkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAwICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfU1NDMQkxNQkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAxICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfU1NDMgkxNgkvKiBTZXJpYWwgU3luY2hyb25vdXMgQ29udHJvbGxlciAyICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVEMwCTE3CS8qIFRpbWVyIENvdW50ZXIgMCAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX1RDMQkxOAkvKiBUaW1lciBDb3VudGVyIDEgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9UQzIJMTkJLyogVGltZXIgQ291bnRlciAyICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVEMzCTIwCS8qIFRpbWVyIENvdW50ZXIgMyAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX1RDNAkyMQkvKiBUaW1lciBDb3VudGVyIDQgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9UQzUJMjIJLyogVGltZXIgQ291bnRlciA1ICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfVUhQCTIzCS8qIFVTQiBIb3N0IHBvcnQgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9FTUFDCTI0CS8qIEV0aGVybmV0IE1BQyAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX0lSUTAJMjUJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTApICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfSVJRMQkyNgkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRMSkgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9JUlEyCTI3CS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlEyKSAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX0lSUTMJMjgJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTMpICovCisjZGVmaW5lIEFUOTFSTTkyMDBfSURfSVJRNAkyOQkvKiBBZHZhbmNlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoSVJRNCkgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9JRF9JUlE1CTMwCS8qIEFkdmFuY2VkIEludGVycnVwdCBDb250cm9sbGVyIChJUlE1KSAqLworI2RlZmluZSBBVDkxUk05MjAwX0lEX0lSUTYJMzEJLyogQWR2YW5jZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKElSUTYpICovCiAKIAogLyoKICAqIFBlcmlwaGVyYWwgcGh5c2ljYWwgYmFzZSBhZGRyZXNzZXMuCiAgKi8KLSNkZWZpbmUgQVQ5MV9CQVNFX1RDQjAJCTB4ZmZmYTAwMDAKLSNkZWZpbmUgQVQ5MV9CQVNFX1RDMAkJMHhmZmZhMDAwMAotI2RlZmluZSBBVDkxX0JBU0VfVEMxCQkweGZmZmEwMDQwCi0jZGVmaW5lIEFUOTFfQkFTRV9UQzIJCTB4ZmZmYTAwODAKLSNkZWZpbmUgQVQ5MV9CQVNFX1RDQjEJCTB4ZmZmYTQwMDAKLSNkZWZpbmUgQVQ5MV9CQVNFX1RDMwkJMHhmZmZhNDAwMAotI2RlZmluZSBBVDkxX0JBU0VfVEM0CQkweGZmZmE0MDQwCi0jZGVmaW5lIEFUOTFfQkFTRV9UQzUJCTB4ZmZmYTQwODAKLSNkZWZpbmUgQVQ5MV9CQVNFX1VEUAkJMHhmZmZiMDAwMAotI2RlZmluZSBBVDkxX0JBU0VfTUNJCQkweGZmZmI0MDAwCi0jZGVmaW5lIEFUOTFfQkFTRV9UV0kJCTB4ZmZmYjgwMDAKLSNkZWZpbmUgQVQ5MV9CQVNFX0VNQUMJCTB4ZmZmYmMwMDAKLSNkZWZpbmUgQVQ5MV9CQVNFX1VTMAkJMHhmZmZjMDAwMAotI2RlZmluZSBBVDkxX0JBU0VfVVMxCQkweGZmZmM0MDAwCi0jZGVmaW5lIEFUOTFfQkFTRV9VUzIJCTB4ZmZmYzgwMDAKLSNkZWZpbmUgQVQ5MV9CQVNFX1VTMwkJMHhmZmZjYzAwMAotI2RlZmluZSBBVDkxX0JBU0VfU1NDMAkJMHhmZmZkMDAwMAotI2RlZmluZSBBVDkxX0JBU0VfU1NDMQkJMHhmZmZkNDAwMAotI2RlZmluZSBBVDkxX0JBU0VfU1NDMgkJMHhmZmZkODAwMAotI2RlZmluZSBBVDkxX0JBU0VfU1BJCQkweGZmZmUwMDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9UQ0IwCTB4ZmZmYTAwMDAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX1RDMAkweGZmZmEwMDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9UQzEJMHhmZmZhMDA0MAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfVEMyCTB4ZmZmYTAwODAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX1RDQjEJMHhmZmZhNDAwMAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfVEMzCTB4ZmZmYTQwMDAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX1RDNAkweGZmZmE0MDQwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9UQzUJMHhmZmZhNDA4MAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfVURQCTB4ZmZmYjAwMDAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX01DSQkweGZmZmI0MDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9UV0kJMHhmZmZiODAwMAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfRU1BQwkweGZmZmJjMDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9VUzAJMHhmZmZjMDAwMAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfVVMxCTB4ZmZmYzQwMDAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX1VTMgkweGZmZmM4MDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9VUzMJMHhmZmZjYzAwMAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfU1NDMAkweGZmZmQwMDAwCisjZGVmaW5lIEFUOTFSTTkyMDBfQkFTRV9TU0MxCTB4ZmZmZDQwMDAKKyNkZWZpbmUgQVQ5MVJNOTIwMF9CQVNFX1NTQzIJMHhmZmZkODAwMAorI2RlZmluZSBBVDkxUk05MjAwX0JBU0VfU1BJCTB4ZmZmZTAwMDAKICNkZWZpbmUgQVQ5MV9CQVNFX1NZUwkJMHhmZmZmZjAwMAogCiAKIC8qCisgKiBJbnRlcm5hbCBNZW1vcnkuCisgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9ST01fQkFTRQkweDAwMTAwMDAwCS8qIEludGVybmFsIFJPTSBiYXNlIGFkZHJlc3MgKi8KKyNkZWZpbmUgQVQ5MVJNOTIwMF9ST01fU0laRQlTWl8xMjhLCQkvKiBJbnRlcm5hbCBST00gc2l6ZSAoMTI4S2IpICovCisKKyNkZWZpbmUgQVQ5MVJNOTIwMF9TUkFNX0JBU0UJMHgwMDIwMDAwMAkvKiBJbnRlcm5hbCBTUkFNIGJhc2UgYWRkcmVzcyAqLworI2RlZmluZSBBVDkxUk05MjAwX1NSQU1fU0laRQlTWl8xNksJCS8qIEludGVybmFsIFNSQU0gc2l6ZSAoMTZLYikgKi8KKworI2RlZmluZSBBVDkxUk05MjAwX1VIUF9CQVNFCTB4MDAzMDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAqLworCisKKyNpZiAwCisvKgogICogUElPIHBpbiBkZWZpbml0aW9ucyAocGVyaXBoZXJhbCBBL0IgbXVsdGlwbGV4aW5nKS4KICAqLwogI2RlZmluZSBBVDkxX1BBMF9NSVNPCQkoMSA8PCAgMCkJLyogQTogU1BJIE1hc3Rlci1JbiBTbGF2ZS1PdXQgKi8KQEAgLTI1Nyw1ICsyNzAsNiBAQAogI2RlZmluZSBBVDkxX1BEMjVfVFBLMTMJCSgxIDw8IDI1KQkvKiBCOiBFVE0gVHJhY2UgUGFja2V0IFBvcnQgMTMgKi8KICNkZWZpbmUgQVQ5MV9QRDI2X1RQSzE0CQkoMSA8PCAyNikJLyogQjogRVRNIFRyYWNlIFBhY2tldCBQb3J0IDE0ICovCiAjZGVmaW5lIEFUOTFfUEQyN19UUEsxNQkJKDEgPDwgMjcpCS8qIEI6IEVUTSBUcmFjZSBQYWNrZXQgUG9ydCAxNSAqLworI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3N5cy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3N5cy5oCmluZGV4IDBmNGMxMmQuLjczNjkzZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF9zeXMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfc3lzLmgKQEAgLTgwLDYgKzgwLDkgQEAKICNkZWZpbmUJCUFUOTFfQ0lEUl9OVlBUWVAJKDcgICAgPDwgMjgpCQkvKiBOb252b2xhdGlsZSBQcm9ncmFtIE1lbW9yeSBUeXBlICovCiAjZGVmaW5lCQlBVDkxX0NJRFJfRVhUCQkoMSAgICA8PCAzMSkJCS8qIEV4dGVuc2lvbiBGbGFnICovCiAKKyNkZWZpbmUgQVQ5MV9BSUNfRkZFUgkJKEFUOTFfQUlDICsgMHgxNDApCS8qIEZhc3QgRm9yY2luZyBFbmFibGUgUmVnaXN0ZXIgW1NBTTkgb25seV0gKi8KKyNkZWZpbmUgQVQ5MV9BSUNfRkZEUgkJKEFUOTFfQUlDICsgMHgxNDQpCS8qIEZhc3QgRm9yY2luZyBEaXNhYmxlIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCisjZGVmaW5lIEFUOTFfQUlDX0ZGU1IJCShBVDkxX0FJQyArIDB4MTQ4KQkvKiBGYXN0IEZvcmNpbmcgU3RhdHVzIFJlZ2lzdGVyIFtTQU05IG9ubHldICovCiAKIC8qCiAgKiBQSU8gQ29udHJvbGxlcnMuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfdHdpLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2F0OTFybTkyMDBfdHdpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM1NDdkNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvYXQ5MXJtOTIwMF90d2kuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9hdDkxcm05MjAwX3R3aS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA1IEl2YW4gS29rc2hheXNreQorICogQ29weXJpZ2h0IChDKSBTQU4gUGVvcGxlCisgKgorICogVHdvLXdpcmUgSW50ZXJmYWNlIChUV0kpIHJlZ2lzdGVycy4KKyAqIEJhc2VkIG9uIEFUOTFSTTkyMDAgZGF0YXNoZWV0IHJldmlzaW9uIEUuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaWZuZGVmIEFUOTFSTTkyMDBfVFdJX0gKKyNkZWZpbmUgQVQ5MVJNOTIwMF9UV0lfSAorCisjZGVmaW5lCUFUOTFfVFdJX0NSCQkweDAwCQkvKiBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1RXSV9TVEFSVAkJKDEgPDwgIDApCS8qIFNlbmQgYSBTdGFydCBDb25kaXRpb24gKi8KKyNkZWZpbmUJCUFUOTFfVFdJX1NUT1AJCSgxIDw8ICAxKQkvKiBTZW5kIGEgU3RvcCBDb25kaXRpb24gKi8KKyNkZWZpbmUJCUFUOTFfVFdJX01TRU4JCSgxIDw8ICAyKQkvKiBNYXN0ZXIgVHJhbnNmZXIgRW5hYmxlICovCisjZGVmaW5lCQlBVDkxX1RXSV9NU0RJUwkJKDEgPDwgIDMpCS8qIE1hc3RlciBUcmFuc2ZlciBEaXNhYmxlICovCisjZGVmaW5lCQlBVDkxX1RXSV9TV1JTVAkJKDEgPDwgIDcpCS8qIFNvZnR3YXJlIFJlc2V0ICovCisKKyNkZWZpbmUJQVQ5MV9UV0lfTU1SCQkweDA0CQkvKiBNYXN0ZXIgTW9kZSBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9UV0lfSUFEUlNaCQkoMyAgICA8PCAgOCkJLyogSW50ZXJuYWwgRGV2aWNlIEFkZHJlc3MgU2l6ZSAqLworI2RlZmluZQkJCUFUOTFfVFdJX0lBRFJTWl9OTwkJKDAgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1RXSV9JQURSU1pfMQkJKDEgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1RXSV9JQURSU1pfMgkJKDIgPDwgOCkKKyNkZWZpbmUJCQlBVDkxX1RXSV9JQURSU1pfMwkJKDMgPDwgOCkKKyNkZWZpbmUJCUFUOTFfVFdJX01SRUFECQkoMSAgICA8PCAxMikJLyogTWFzdGVyIFJlYWQgRGlyZWN0aW9uICovCisjZGVmaW5lCQlBVDkxX1RXSV9EQURSCQkoMHg3ZiA8PCAxNikJLyogRGV2aWNlIEFkZHJlc3MgKi8KKworI2RlZmluZQlBVDkxX1RXSV9JQURSCQkweDBjCQkvKiBJbnRlcm5hbCBBZGRyZXNzIFJlZ2lzdGVyICovCisKKyNkZWZpbmUJQVQ5MV9UV0lfQ1dHUgkJMHgxMAkJLyogQ2xvY2sgV2F2ZWZvcm0gR2VuZXJhdG9yIFJlZ2lzdGVyICovCisjZGVmaW5lCQlBVDkxX1RXSV9DTERJVgkJKDB4ZmYgPDwgIDApCS8qIENsb2NrIExvdyBEaXZpc29yICovCisjZGVmaW5lCQlBVDkxX1RXSV9DSERJVgkJKDB4ZmYgPDwgIDgpCS8qIENsb2NrIEhpZ2ggRGl2aXNvciAqLworI2RlZmluZQkJQVQ5MV9UV0lfQ0tESVYJCSg3ICAgIDw8IDE2KQkvKiBDbG9jayBEaXZpZGVyICovCisKKyNkZWZpbmUJQVQ5MV9UV0lfU1IJCTB4MjAJCS8qIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZQkJQVQ5MV9UV0lfVFhDT01QCQkoMSA8PCAgMCkJLyogVHJhbnNtaXNzaW9uIENvbXBsZXRlICovCisjZGVmaW5lCQlBVDkxX1RXSV9SWFJEWQkJKDEgPDwgIDEpCS8qIFJlY2VpdmUgSG9sZGluZyBSZWdpc3RlciBSZWFkeSAqLworI2RlZmluZQkJQVQ5MV9UV0lfVFhSRFkJCSgxIDw8ICAyKQkvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyIFJlYWR5ICovCisjZGVmaW5lCQlBVDkxX1RXSV9PVlJFCQkoMSA8PCAgNikJLyogT3ZlcnJ1biBFcnJvciAqLworI2RlZmluZQkJQVQ5MV9UV0lfVU5SRQkJKDEgPDwgIDcpCS8qIFVuZGVycnVuIEVycm9yICovCisjZGVmaW5lCQlBVDkxX1RXSV9OQUNLCQkoMSA8PCAgOCkJLyogTm90IEFja25vd2xlZGdlZCAqLworCisjZGVmaW5lCUFUOTFfVFdJX0lFUgkJMHgyNAkJLyogSW50ZXJydXB0IEVuYWJsZSBSZWdpc3RlciAqLworI2RlZmluZQlBVDkxX1RXSV9JRFIJCTB4MjgJCS8qIEludGVycnVwdCBEaXNhYmxlIFJlZ2lzdGVyICovCisjZGVmaW5lCUFUOTFfVFdJX0lNUgkJMHgyYwkJLyogSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9UV0lfUkhSCQkweDMwCQkvKiBSZWNlaXZlIEhvbGRpbmcgUmVnaXN0ZXIgKi8KKyNkZWZpbmUJQVQ5MV9UV0lfVEhSCQkweDM0CQkvKiBUcmFuc21pdCBIb2xkaW5nIFJlZ2lzdGVyICovCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2dwaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCmluZGV4IGRiZGUxYmEuLmEwMTFkMjcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvZ3Bpby5oCkBAIC0xNywxMCArMTcsOSBAQAogCiAjZGVmaW5lIFBJTl9CQVNFCQlOUl9BSUNfSVJRUwogCi0jZGVmaW5lIFBRRlBfR1BJT19CQU5LUwkJMwkvKiBQUUZQIHBhY2thZ2UgaGFzIDMgYmFua3MgKi8KLSNkZWZpbmUgQkdBX0dQSU9fQkFOS1MJCTQJLyogQkdBIHBhY2thZ2UgaGFzIDQgYmFua3MgKi8KKyNkZWZpbmUgTUFYX0dQSU9fQkFOS1MJCTQKIAotLyogdGhlc2UgcGluIG51bWJlcnMgZG91YmxlIGFzIElSUSBudW1iZXJzLCBsaWtlIEFUOTFfSURfKiB2YWx1ZXMgKi8KKy8qIHRoZXNlIHBpbiBudW1iZXJzIGRvdWJsZSBhcyBJUlEgbnVtYmVycywgbGlrZSBBVDkxeHh4X0lEXyogdmFsdWVzICovCiAKICNkZWZpbmUJQVQ5MV9QSU5fUEEwCShQSU5fQkFTRSArIDB4MDAgKyAwKQogI2RlZmluZQlBVDkxX1BJTl9QQTEJKFBJTl9CQVNFICsgMHgwMCArIDEpCkBAIC0xODAsMTcgKzE3OSwxOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogLyogc2V0dXAgc2V0dXAgcm91dGluZXMsIGNhbGxlZCBmcm9tIGJvYXJkIGluaXQgb3IgZHJpdmVyIHByb2JlKCkgKi8KLWV4dGVybiBpbnQgYXQ5MV9zZXRfQV9wZXJpcGgodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCk7Ci1leHRlcm4gaW50IGF0OTFfc2V0X0JfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwotZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX2lucHV0KHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOwotZXh0ZXJuIGludCBhdDkxX3NldF9ncGlvX291dHB1dCh1bnNpZ25lZCBwaW4sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKLWV4dGVybiBpbnQgYXQ5MV9zZXRfbXVsdGlfZHJpdmUodW5zaWduZWQgcGluLCBpbnQgaXNfb24pOworZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0FfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOworZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X0JfcGVyaXBoKHVuc2lnbmVkIHBpbiwgaW50IHVzZV9wdWxsdXApOworZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2dwaW9faW5wdXQodW5zaWduZWQgcGluLCBpbnQgdXNlX3B1bGx1cCk7CitleHRlcm4gaW50IF9faW5pdF9vcl9tb2R1bGUgYXQ5MV9zZXRfZ3Bpb19vdXRwdXQodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOworZXh0ZXJuIGludCBfX2luaXRfb3JfbW9kdWxlIGF0OTFfc2V0X2RlZ2xpdGNoKHVuc2lnbmVkIHBpbiwgaW50IGlzX29uKTsKK2V4dGVybiBpbnQgX19pbml0X29yX21vZHVsZSBhdDkxX3NldF9tdWx0aV9kcml2ZSh1bnNpZ25lZCBwaW4sIGludCBpc19vbik7CiAKIC8qIGNhbGxhYmxlIGF0IGFueSB0aW1lICovCiBleHRlcm4gaW50IGF0OTFfc2V0X2dwaW9fdmFsdWUodW5zaWduZWQgcGluLCBpbnQgdmFsdWUpOwogZXh0ZXJuIGludCBhdDkxX2dldF9ncGlvX3ZhbHVlKHVuc2lnbmVkIHBpbik7CiAKKy8qIGNhbGxhYmxlIG9ubHkgZnJvbSBjb3JlIHBvd2VyLW1hbmFnZW1lbnQgY29kZSAqLwogZXh0ZXJuIHZvaWQgYXQ5MV9ncGlvX3N1c3BlbmQodm9pZCk7CiBleHRlcm4gdm9pZCBhdDkxX2dwaW9fcmVzdW1lKHZvaWQpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2hhcmR3YXJlLmgKaW5kZXggMjM1ZDM5ZC4uNjU1MWI0ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtYXQ5MXJtOTIwMC9oYXJkd2FyZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaGFyZHdhcmUuaApAQCAtMzQsMjcgKzM0LDE0IEBACiAgKiBWaXJ0dWFsIHRvIFBoeXNpY2FsIEFkZHJlc3MgbWFwcGluZyBmb3IgSU8gZGV2aWNlcy4KICAqLwogI2RlZmluZSBBVDkxX1ZBX0JBU0VfU1lTCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9TWVMpCi0jZGVmaW5lIEFUOTFfVkFfQkFTRV9TUEkJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1NQSSkKLSNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NTQzIJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1NTQzIpCi0jZGVmaW5lIEFUOTFfVkFfQkFTRV9TU0MxCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9TU0MxKQotI2RlZmluZSBBVDkxX1ZBX0JBU0VfU1NDMAlBVDkxX0lPX1AyVihBVDkxX0JBU0VfU1NDMCkKLSNkZWZpbmUgQVQ5MV9WQV9CQVNFX1VTMwlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVVMzKQotI2RlZmluZSBBVDkxX1ZBX0JBU0VfVVMyCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9VUzIpCi0jZGVmaW5lIEFUOTFfVkFfQkFTRV9VUzEJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1VTMSkKLSNkZWZpbmUgQVQ5MV9WQV9CQVNFX1VTMAlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVVMwKQotI2RlZmluZSBBVDkxX1ZBX0JBU0VfRU1BQwlBVDkxX0lPX1AyVihBVDkxX0JBU0VfRU1BQykKLSNkZWZpbmUgQVQ5MV9WQV9CQVNFX1RXSQlBVDkxX0lPX1AyVihBVDkxX0JBU0VfVFdJKQotI2RlZmluZSBBVDkxX1ZBX0JBU0VfTUNJCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9NQ0kpCi0jZGVmaW5lIEFUOTFfVkFfQkFTRV9VRFAJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1VEUCkKLSNkZWZpbmUgQVQ5MV9WQV9CQVNFX1RDQjEJQVQ5MV9JT19QMlYoQVQ5MV9CQVNFX1RDQjEpCi0jZGVmaW5lIEFUOTFfVkFfQkFTRV9UQ0IwCUFUOTFfSU9fUDJWKEFUOTFfQkFTRV9UQ0IwKQotCi0vKiBJbnRlcm5hbCBTUkFNICovCi0jZGVmaW5lIEFUOTFfU1JBTV9CQVNFCQkweDAwMjAwMDAwCS8qIEludGVybmFsIFNSQU0gYmFzZSBhZGRyZXNzICovCi0jZGVmaW5lIEFUOTFfU1JBTV9TSVpFCQkweDAwMDA0MDAwCS8qIEludGVybmFsIFNSQU0gU0laRSAoMTZLYikgKi8KKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1NQSQlBVDkxX0lPX1AyVihBVDkxUk05MjAwX0JBU0VfU1BJKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfRU1BQwlBVDkxX0lPX1AyVihBVDkxUk05MjAwX0JBU0VfRU1BQykKKyNkZWZpbmUgQVQ5MV9WQV9CQVNFX1RXSQlBVDkxX0lPX1AyVihBVDkxUk05MjAwX0JBU0VfVFdJKQorI2RlZmluZSBBVDkxX1ZBX0JBU0VfTUNJCUFUOTFfSU9fUDJWKEFUOTFSTTkyMDBfQkFTRV9NQ0kpCisjZGVmaW5lIEFUOTFfVkFfQkFTRV9VRFAJQVQ5MV9JT19QMlYoQVQ5MVJNOTIwMF9CQVNFX1VEUCkKIAogIC8qIEludGVybmFsIFNSQU0gaXMgbWFwcGVkIGJlbG93IHRoZSBJTyBkZXZpY2VzICovCi0jZGVmaW5lIEFUOTFfU1JBTV9WSVJUX0JBU0UJKEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MV9TUkFNX1NJWkUpCisjZGVmaW5lIEFUOTFfU1JBTV9WSVJUX0JBU0UJKEFUOTFfSU9fVklSVF9CQVNFIC0gQVQ5MVJNOTIwMF9TUkFNX1NJWkUpCiAKIC8qIFNlcmlhbCBwb3J0cyAqLwogI2RlZmluZSBBVDkxX05SX1VBUlQJCTUJCS8qIDQgVVNBUlQzJ3MgYW5kIG9uZSBEQkdVIHBvcnQgKi8KQEAgLTcxLDkgKzU4LDYgQEAKIC8qIENvbXBhY3QgRmxhc2ggKi8KICNkZWZpbmUgQVQ5MV9DRl9CQVNFCQkweDUwMDAwMDAwCS8qIE5DUzQtTkNTNjogQ29tcGFjdCBGbGFzaCBwaHlzaWNhbCBiYXNlIGFkZHJlc3MgKi8KIAotLyogTXVsdGktTWFzdGVyIE1lbW9yeSBjb250cm9sbGVyICovCi0jZGVmaW5lIEFUOTFfVUhQX0JBU0UJCTB4MDAzMDAwMDAJLyogVVNCIEhvc3QgY29udHJvbGxlciAqLwotCiAvKiBDbG9ja3MgKi8KICNkZWZpbmUgQVQ5MV9TTE9XX0NMT0NLCQkzMjc2OAkJLyogc2xvdyBjbG9jayAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1hdDkxcm05MjAwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oCmluZGV4IGY2Mzg0MmMuLjc2M2NiOTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWF0OTFybTkyMDAvaXJxcy5oCkBAIC0zMiw3ICszMiw3IEBACiAKIAogLyoKLSAqIElSUSBpbnRlcnJ1cHQgc3ltYm9scyBhcmUgdGhlIEFUOTFfSURfKiBzeW1ib2xzIGluIGF0OTFybTkyMDAuaAorICogSVJRIGludGVycnVwdCBzeW1ib2xzIGFyZSB0aGUgQVQ5MXh4eF9JRF8qIHN5bWJvbHMKICAqIGZvciBJUlFzIGhhbmRsZWQgZGlyZWN0bHkgdGhyb3VnaCB0aGUgQUlDLCBvciBlbHNlIHRoZSBBVDkxX1BJTl8qCiAgKiBzeW1ib2xzIGluIGdwaW8uaCBmb3Igb25lcyBoYW5kbGVkIGluZGlyZWN0bHkgYXMgR1BJT3MuCiAgKiBXZSBtYWtlIHByb3Zpc2lvbiBmb3IgNCBiYW5rcyBvZiBHUElPLgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtY2xwczcxMXgvdGltZS5oCmluZGV4IDljYjI3Y2QuLjBlNGEzOTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWNscHM3MTF4L3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1jbHBzNzExeC90aW1lLmgKQEAgLTI5LDcgKzI5LDcgQEAKIHA3MjB0X3RpbWVyX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCWRvX2xlZHMoKTsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyMmI2OAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQltb3YJXHJ4LCAjMHhmZTAwMDAwMAlAIHBoeXNpY2FsIGFzIHdlbGwgYXMgdmlydHVhbAorCQlvcnIJXHJ4LCBccngsICMweDAwODAwMDAwCUAgbG9jYXRpb24gb2YgdGhlIFVBUlQKKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTAKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggNzElCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kbWEuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2RtYS5oCmluZGV4IDFlODA4ZGIuLmU5NzdhOWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZG1hLmgKQEAgLTEsNyArMSw3IEBACiAvKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZG1hLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEludGVsIENvcnAuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9lbnRyeS1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2VudHJ5LW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUwMGNiYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9lbnRyeS1tYWNyby5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvZW50cnktbWFjcm8uUworICoKKyAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgSU9QMzJ4LWJhc2VkIHBsYXRmb3JtcworICoKKyAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55CisgKiB3YXJyYW50eSBvZiBhbnkga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKi8KKyNpbmNsdWRlIDxhc20vYXJjaC9pb3AzMnguaD4KKworCQkubWFjcm8JZGlzYWJsZV9maXEKKwkJLmVuZG0KKworCQkubWFjcm8JZ2V0X2lycW5yX2FuZF9iYXNlLCBpcnFuciwgaXJxc3RhdCwgYmFzZSwgdG1wCisJCWxkcglcYmFzZSwgPUlPUDNYWF9SRUdfQUREUigweDA3RDgpCisJCWxkcglcaXJxc3RhdCwgW1xiYXNlXQkJQCBSZWFkIElJTlRTUkMKKwkJY21wCVxpcnFzdGF0LCAjMAorCQljbHpuZQlcaXJxbnIsIFxpcnFzdGF0CisJCXJzYm5lCVxpcnFuciwgXGlycW5yLCAjMzEKKwkJLmVuZG0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9nbGFudGFuay5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2dsYW50YW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwNjU2MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9nbGFudGFuay5oCkBAIC0wLDAgKzEsMTMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS9hcmNoLWlvcDMyeC9nbGFudGFuay5oCisgKgorICogSU8tRGF0YSBHTEFOIFRhbmsgYm9hcmQgcmVnaXN0ZXJzCisgKi8KKworI2lmbmRlZiBfX0dMQU5UQU5LX0gKKyNkZWZpbmUgX19HTEFOVEFOS19ICisKKyNkZWZpbmUgR0xBTlRBTktfVUFSVAkJMHhmZTgwMDAwMAkvKiBVQVJUICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaGFyZHdhcmUuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9oYXJkd2FyZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NTZlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaGFyZHdhcmUuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2hhcmR3YXJlLmgKKyAqLworCisjaWZuZGVmIF9fSEFSRFdBUkVfSAorI2RlZmluZSBfX0hBUkRXQVJFX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisvKgorICogTm90ZSBhYm91dCBQQ0kgSU8gc3BhY2UgbWFwcGluZ3MKKyAqCisgKiBUbyBtYWtlIElPIHNwYWNlIGFjY2Vzc2VzIGVmZmljaWVudCwgd2Ugc3RvcmUgdmlydHVhbCBhZGRyZXNzZXMgaW4KKyAqIHRoZSBJTyByZXNvdXJjZXMuCisgKgorICogVGhlIFBDSSBJTyBzcGFjZSBpcyBsb2NhdGVkIGF0IHZpcnR1YWwgMHhmZTAwMDAwMCBmcm9tIHBoeXNpY2FsCisgKiAweDkwMDAwMDAwLiBUaGUgUENJIEJBUnMgbXVzdCBiZSBwcm9ncmFtbWVkIHdpdGggcGh5c2ljYWwgYWRkcmVzc2VzLAorICogYnV0IHdoZW4gd2UgcmVhZCB0aGVtLCB3ZSBjb252ZXJ0IHRoZW0gdG8gdmlydHVhbCBhZGRyZXNzZXMuIFNlZQorICogYXJjaC9hcm0vcGxhdC1pb3AvcGNpLmMuCisgKi8KKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpIDEKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MDAwMDAwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAwMDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIGlvcDMyeF9pbml0X2lycSh2b2lkKTsKKyNlbmRpZgorCisKKy8qCisgKiBHZW5lcmljIGNoaXBzZXQgYml0cworICovCisjaW5jbHVkZSAiaW9wMzJ4LmgiCisKKy8qCisgKiBCb2FyZCBzcGVjaWZpYyBiaXRzCisgKi8KKyNpbmNsdWRlICJnbGFudGFuay5oIgorI2luY2x1ZGUgImlxODAzMjEuaCIKKyNpbmNsdWRlICJpcTMxMjQ0LmgiCisjaW5jbHVkZSAibjIxMDAuaCIKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKc2ltaWxhcml0eSBpbmRleCA2MiUKY29weSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oCmNvcHkgdG8gaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKaW5kZXggMzZhZGJkZi4uMTJkOWVlMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKQEAgLTEsMjEgKzEsMjIgQEAKIC8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW8uaAorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvLmgKICAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxICBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDEgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNpZm5kZWYgX19JT19ICisjZGVmaW5lIF9fSU9fSAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgorI2RlZmluZSBJT19TUEFDRV9MSU1JVAkJMHhmZmZmZmZmZgogCiAjZGVmaW5lIF9faW8ocCkJCQkoKHZvaWQgX19pb21lbSAqKShwKSkKICNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKIAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pb3AzMnguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pb3AzMnguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YmJkODVmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lvcDMyeC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaW9wMzJ4LmgKKyAqCisgKiBJbnRlbCBJT1AzMlggQ2hpcCBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0lPUDMyWF9ICisjZGVmaW5lIF9fSU9QMzJYX0gKKworLyoKKyAqIFBlcmlwaGVyYWxzIHRoYXQgYXJlIHNoYXJlZCBiZXR3ZWVuIHRoZSBpb3AzMnggYW5kIGlvcDMzeCBidXQKKyAqIGxvY2F0ZWQgYXQgZGlmZmVyZW50IGFkZHJlc3Nlcy4KKyAqLworI2RlZmluZSBJT1AzWFhfR1BJT19SRUcocmVnKQkoSU9QM1hYX1BFUklQSEVSQUxfVklSVF9CQVNFICsgMHgwN2MwICsgKHJlZykpCisjZGVmaW5lIElPUDNYWF9USU1FUl9SRUcocmVnKQkoSU9QM1hYX1BFUklQSEVSQUxfVklSVF9CQVNFICsgMHgwN2UwICsgKHJlZykpCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvaW9wM3h4Lmg+CisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaXEzMTI0NC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lxMzEyNDQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmY0ZWFmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lxMzEyNDQuaApAQCAtMCwwICsxLDE3IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lxMzEyNDQuaAorICoKKyAqIEludGVsIElRMzEyNDQgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9fSVEzMTI0NF9ICisjZGVmaW5lIF9fSVEzMTI0NF9ICisKKyNkZWZpbmUgSVEzMTI0NF9VQVJUCQkweGZlODAwMDAwCS8qIFVBUlQgIzEgKi8KKyNkZWZpbmUgSVEzMTI0NF83U0VHXzEJCTB4ZmU4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLworI2RlZmluZSBJUTMxMjQ0XzdTRUdfMAkJMHhmZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KKyNkZWZpbmUgSVEzMTI0NF9ST1RBUllfU1cJMHhmZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCisjZGVmaW5lIElRMzEyNDRfQkFUVF9TVEFUCTB4ZmU4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pcTgwMzIxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaXE4MDMyMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNjlkYjkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaXE4MDMyMS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvaXE4MDMyMS5oCisgKgorICogSW50ZWwgSVE4MDMyMSBldmFsdWF0aW9uIGJvYXJkIHJlZ2lzdGVycworICovCisKKyNpZm5kZWYgX19JUTgwMzIxX0gKKyNkZWZpbmUgX19JUTgwMzIxX0gKKworI2RlZmluZSBJUTgwMzIxX1VBUlQJCTB4ZmU4MDAwMDAJLyogVUFSVCAjMSAqLworI2RlZmluZSBJUTgwMzIxXzdTRUdfMQkJMHhmZTg0MDAwMAkvKiA3LVNlZ21lbnQgTVNCICovCisjZGVmaW5lIElRODAzMjFfN1NFR18wCQkweGZlODUwMDAwCS8qIDctU2VnbWVudCBMU0IgKFdPKSAqLworI2RlZmluZSBJUTgwMzIxX1JPVEFSWV9TVwkweGZlOGQwMDAwCS8qIFJvdGFyeSBTd2l0Y2ggKi8KKyNkZWZpbmUgSVE4MDMyMV9CQVRUX1NUQVQJMHhmZThmMDAwMAkvKiBCYXR0ZXJ5IFN0YXR1cyAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pcnFzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhZWY4NwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pcnFzLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9pcnFzLmgKKyAqCisgKiBBdXRob3I6CVJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+CisgKiBDb3B5cmlnaHQ6CShDKSAyMDAyIFJvcnkgQm9sdAorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0lSUVNfSAorI2RlZmluZSBfX0lSUVNfSAorCisvKgorICogSU9QODAzMjEgY2hpcHNldCBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgSVJRX0lPUDMyWF9ETUEwX0VPVAkwCisjZGVmaW5lIElSUV9JT1AzMlhfRE1BMF9FT0MJMQorI2RlZmluZSBJUlFfSU9QMzJYX0RNQTFfRU9UCTIKKyNkZWZpbmUgSVJRX0lPUDMyWF9ETUExX0VPQwkzCisjZGVmaW5lIElSUV9JT1AzMlhfQUFfRU9UCTYKKyNkZWZpbmUgSVJRX0lPUDMyWF9BQV9FT0MJNworI2RlZmluZSBJUlFfSU9QMzJYX0NPUkVfUE1PTgk4CisjZGVmaW5lIElSUV9JT1AzMlhfVElNRVIwCTkKKyNkZWZpbmUgSVJRX0lPUDMyWF9USU1FUjEJMTAKKyNkZWZpbmUgSVJRX0lPUDMyWF9JMkNfMAkxMQorI2RlZmluZSBJUlFfSU9QMzJYX0kyQ18xCTEyCisjZGVmaW5lIElSUV9JT1AzMlhfTUVTU0FHSU5HCTEzCisjZGVmaW5lIElSUV9JT1AzMlhfQVRVX0JJU1QJMTQKKyNkZWZpbmUgSVJRX0lPUDMyWF9QRVJGTU9OCTE1CisjZGVmaW5lIElSUV9JT1AzMlhfQ09SRV9QTVUJMTYKKyNkZWZpbmUgSVJRX0lPUDMyWF9CSVVfRVJSCTE3CisjZGVmaW5lIElSUV9JT1AzMlhfQVRVX0VSUgkxOAorI2RlZmluZSBJUlFfSU9QMzJYX01DVV9FUlIJMTkKKyNkZWZpbmUgSVJRX0lPUDMyWF9ETUEwX0VSUgkyMAorI2RlZmluZSBJUlFfSU9QMzJYX0RNQTFfRVJSCTIxCisjZGVmaW5lIElSUV9JT1AzMlhfQUFfRVJSCTIzCisjZGVmaW5lIElSUV9JT1AzMlhfTVNHX0VSUgkyNAorI2RlZmluZSBJUlFfSU9QMzJYX1NTUAkJMjUKKyNkZWZpbmUgSVJRX0lPUDMyWF9YSU5UMAkyNworI2RlZmluZSBJUlFfSU9QMzJYX1hJTlQxCTI4CisjZGVmaW5lIElSUV9JT1AzMlhfWElOVDIJMjkKKyNkZWZpbmUgSVJRX0lPUDMyWF9YSU5UMwkzMAorI2RlZmluZSBJUlFfSU9QMzJYX0hQSQkJMzEKKworI2RlZmluZSBOUl9JUlFTCQkJMzIKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjRjZDNmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L21lbW9yeS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvbWVtb3J5LmgKKyAqLworCisjaWZuZGVmIF9fTUVNT1JZX0gKKyNkZWZpbmUgX19NRU1PUllfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweGEwMDAwMDAwKQorCisvKgorICogVmlydHVhbCB2aWV3IDwtPiBQQ0kgRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKChfX3ZpcnRfdG9fcGh5cyh4KSkgJiB+KCpJT1AzWFhfSUFUVlIyKSkgfCAoKCpJT1AzWFhfSUFCQVIyKSAmIDB4ZmZmZmZmZjApKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCShfX3BoeXNfdG9fdmlydCgoKHgpICYgfigqSU9QM1hYX0lBTFIyKSkgfCAoICpJT1AzWFhfSUFUVlIyKSkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvbjIxMDAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9uMjEwMC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlZDMxYTYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvbjIxMDAuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogaW5jbHVkZS9hc20vYXJjaC1pb3AzMngvbjIxMDAuaAorICoKKyAqIFRoZWN1cyBOMjEwMCBib2FyZCByZWdpc3RlcnMKKyAqLworCisjaWZuZGVmIF9fTjIxMDBfSAorI2RlZmluZSBfX04yMTAwX0gKKworI2RlZmluZSBOMjEwMF9VQVJUCQkweGZlODAwMDAwCS8qIFVBUlQgKi8KKworI2RlZmluZSBOMjEwMF9DT1BZX0JVVFRPTglJT1AzWFhfR1BJT19MSU5FKDApCisjZGVmaW5lIE4yMTAwX1BDQTk1MzJfUkVTRVQJSU9QM1hYX0dQSU9fTElORSgyKQorI2RlZmluZSBOMjEwMF9SRVNFVF9CVVRUT04JSU9QM1hYX0dQSU9fTElORSgzKQorI2RlZmluZSBOMjEwMF9IQVJEV0FSRV9SRVNFVAlJT1AzWFhfR1BJT19MSU5FKDQpCisjZGVmaW5lIE4yMTAwX1BPV0VSX0JVVFRPTglJT1AzWFhfR1BJT19MSU5FKDUpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiN2ViNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC9zeXN0ZW0uaApAQCAtMCwwICsxLDMzIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9pZGxlKHZvaWQpCit7CisJY3B1X2RvX2lkbGUoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGFyY2hfcmVzZXQoY2hhciBtb2RlKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwlpZiAobWFjaGluZV9pc19uMjEwMCgpKSB7CisJCWdwaW9fbGluZV9zZXQoTjIxMDBfSEFSRFdBUkVfUkVTRVQsIEdQSU9fTE9XKTsKKwkJZ3Bpb19saW5lX2NvbmZpZyhOMjEwMF9IQVJEV0FSRV9SRVNFVCwgR1BJT19PVVQpOworCQl3aGlsZSAoMSkKKwkJCTsKKwl9CisKKwkqSU9QM1hYX1BDU1IgPSAweDMwOworCisJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KKwljcHVfcmVzZXQoMCk7Cit9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC90aW1leC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5MzRiMDgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdGltZXguaApAQCAtMCwwICsxLDkgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdGltZXguaAorICoKKyAqIElPUDMyeCBhcmNoaXRlY3R1cmUgdGltZXggc3BlY2lmaWNhdGlvbnMKKyAqLworCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKyNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkoMTAwICogSFopCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdW5jb21wcmVzcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L3VuY29tcHJlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjRmNTJiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L3VuY29tcHJlc3MuaApAQCAtMCwwICsxLDM5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzJ4L3VuY29tcHJlc3MuaAorICovCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbWFjaC10eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcmlhbF9yZWcuaD4KKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworc3RhdGljIHZvbGF0aWxlIHU4ICp1YXJ0X2Jhc2U7CisKKyNkZWZpbmUgVFhfRE9ORQkJKFVBUlRfTFNSX1RFTVQgfCBVQVJUX0xTUl9USFJFKQorCitzdGF0aWMgaW5saW5lIHZvaWQgcHV0YyhjaGFyIGMpCit7CisJd2hpbGUgKCh1YXJ0X2Jhc2VbVUFSVF9MU1JdICYgVFhfRE9ORSkgIT0gVFhfRE9ORSkKKwkJYmFycmllcigpOworCXVhcnRfYmFzZVtVQVJUX1RYXSA9IGM7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQoreworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXJjaF9kZWNvbXBfc2V0dXAodW5zaWduZWQgbG9uZyBhcmNoX2lkKQoreworCWlmIChtYWNoaW5lX2lzX2lxODAzMjEoKSkKKwkJdWFydF9iYXNlID0gKHZvbGF0aWxlIHU4ICopSVE4MDMyMV9VQVJUOworCWVsc2UgaWYgKG1hY2hpbmVfaXNfaXEzMTI0NCgpKQorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTggKilJUTMxMjQ0X1VBUlQ7CisJZWxzZQorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTggKikweGZlODAwMDAwOworfQorCisvKgorICogbm90aGluZyB0byBkbworICovCisjZGVmaW5lIGFyY2hfZGVjb21wX3NldHVwKCkJX19hcmNoX2RlY29tcF9zZXR1cChhcmNoX2lkKQorI2RlZmluZSBhcmNoX2RlY29tcF93ZG9nKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC92bWFsbG9jLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdm1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNzBiYWEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzMngvdm1hbGxvYy5oCkBAIC0wLDAgKzEsNSBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMyeC92bWFsbG9jLmgKKyAqLworCisjZGVmaW5lIFZNQUxMT0NfRU5ECTB4ZmUwMDAwMDAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9kZWJ1Zy1tYWNyby5TIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2RlYnVnLW1hY3JvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWU3MTMyZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9kZWJ1Zy1tYWNyby5TCkBAIC0wLDAgKzEsMjQgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZGVidWctbWFjcm8uUworICoKKyAqIERlYnVnZ2luZyBtYWNybyBpbmNsdWRlIGhlYWRlcgorICoKKyAqIENvcHlyaWdodCAoQykgMTk5NC0xOTk5IFJ1c3NlbGwgS2luZworICogTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKwkJLm1hY3JvCWFkZHJ1YXJ0LCByeAorCQltcmMJcDE1LCAwLCBccngsIGMxLCBjMAorCQl0c3QJXHJ4LCAjMQkJCUAgbW11IGVuYWJsZWQ/CisJCW1vdmVxCVxyeCwgIzB4ZmYwMDAwMDAJQCBwaHlzaWNhbAorCQltb3ZuZQlccngsICMweGZlMDAwMDAwCUAgdmlydHVhbAorCQlvcnIJXHJ4LCBccngsICMweDAwZmYwMDAwCisJCW9ycglccngsIFxyeCwgIzB4MDAwMGY3MDAKKwkJLmVuZG0KKworI2RlZmluZSBVQVJUX1NISUZUCTIKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2RtYS5oCnNpbWlsYXJpdHkgaW5kZXggNzElCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZG1hLmgKY29weSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZG1hLmgKaW5kZXggMWU4MDhkYi4uYjc3NzVmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9kbWEuaApAQCAtMSw3ICsxLDcgQEAKIC8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZG1hLmgKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9kbWEuaAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvZW50cnktbWFjcm8uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MmI3OTE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2VudHJ5LW1hY3JvLlMKQEAgLTAsMCArMSwyMiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9lbnRyeS1tYWNyby5TCisgKgorICogTG93LWxldmVsIElSUSBoZWxwZXIgbWFjcm9zIGZvciBJT1AzM3gtYmFzZWQgcGxhdGZvcm1zCisgKgorICogVGhpcyBmaWxlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIHZlcnNpb24gMi4gVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dCBhbnkKKyAqIHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworI2luY2x1ZGUgPGFzbS9hcmNoL2lvcDMzeC5oPgorCisJCS5tYWNybwlkaXNhYmxlX2ZpcQorCQkuZW5kbQorCisJCS5tYWNybwlnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKKwkJbGRyCVxiYXNlLCA9SU9QM1hYX1JFR19BRERSKDB4MDdDOCkKKwkJbGRyCVxpcnFzdGF0LCBbXGJhc2VdCQlAIFJlYWQgSUlOVFZFQworCQljbXAJXGlycXN0YXQsICMwCisJCWxkcmVxCVxpcnFzdGF0LCBbXGJhc2VdCQlAIGVycmF0dW0gNjMgd29ya2Fyb3VuZAorCQlhZGRzCVxpcnFuciwgXGlycXN0YXQsICMxCisJCW1vdm5lCVxpcnFuciwgXGlycXN0YXQsIGxzciAjMgorCQkuZW5kbQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjU5Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2hhcmR3YXJlLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9oYXJkd2FyZS5oCisgKi8KKworI2lmbmRlZiBfX0hBUkRXQVJFX0gKKyNkZWZpbmUgX19IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworLyoKKyAqIE5vdGUgYWJvdXQgUENJIElPIHNwYWNlIG1hcHBpbmdzCisgKgorICogVG8gbWFrZSBJTyBzcGFjZSBhY2Nlc3NlcyBlZmZpY2llbnQsIHdlIHN0b3JlIHZpcnR1YWwgYWRkcmVzc2VzIGluCisgKiB0aGUgSU8gcmVzb3VyY2VzLgorICoKKyAqIFRoZSBQQ0kgSU8gc3BhY2UgaXMgbG9jYXRlZCBhdCB2aXJ0dWFsIDB4ZmUwMDAwMDAgZnJvbSBwaHlzaWNhbAorICogMHg5MDAwMDAwMC4gIFRoZSBQQ0kgQkFScyBtdXN0IGJlIHByb2dyYW1tZWQgd2l0aCBwaHlzaWNhbCBhZGRyZXNzZXMsCisgKiBidXQgd2hlbiB3ZSByZWFkIHRoZW0sIHdlIGNvbnZlcnQgdGhlbSB0byB2aXJ0dWFsIGFkZHJlc3Nlcy4gIFNlZQorICogYXJjaC9hcm0vbWFjaC1pb3AzeHgvaW9wM3h4LXBjaS5jCisgKi8KKyNkZWZpbmUgcGNpYmlvc19hc3NpZ25fYWxsX2J1c3NlcygpCTEKKyNkZWZpbmUgUENJQklPU19NSU5fSU8JCTB4MDAwMDAwMDAKKyNkZWZpbmUgUENJQklPU19NSU5fTUVNCQkweDAwMDAwMDAwCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCit2b2lkIGlvcDMzeF9pbml0X2lycSh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wMzN4X3VhcnQwX2RldmljZTsKK2V4dGVybiBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGlvcDMzeF91YXJ0MV9kZXZpY2U7CisjZW5kaWYKKworCisvKgorICogR2VuZXJpYyBjaGlwc2V0IGJpdHMKKyAqCisgKi8KKyNpbmNsdWRlICJpb3AzM3guaCIKKworLyoKKyAqIEJvYXJkIHNwZWNpZmljIGJpdHMKKyAqLworI2luY2x1ZGUgImlxODAzMzEuaCIKKyNpbmNsdWRlICJpcTgwMzMyLmgiCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pby5oCnNpbWlsYXJpdHkgaW5kZXggNjIlCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaAppbmRleCAzNmFkYmRmLi5jMDE3NDAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaApAQCAtMSwyMSArMSwyMSBAQAogLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pby5oCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW8uaAogICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDEgIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwMSAgTW9udGFWaXN0YSBTb2Z0d2FyZSwgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwogICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAgKi8KIAotI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICi0jZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKyNpZm5kZWYgX19JT19ICisjZGVmaW5lIF9fSU9fSAogCiAjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CiAKLSNkZWZpbmUgSU9fU1BBQ0VfTElNSVQgMHhmZmZmZmZmZgotCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUCQkweGZmZmZmZmZmCiAjZGVmaW5lIF9faW8ocCkJCQkoKHZvaWQgX19pb21lbSAqKShwKSkKICNkZWZpbmUgX19tZW1fcGNpKGEpCQkoYSkKIAorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pb3AzM3guaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pb3AzM3guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM2ZTkzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lvcDMzeC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaW9wMzN4LmgKKyAqCisgKiBJbnRlbCBJT1AzM1ggQ2hpcCBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogRGF2ZSBKaWFuZyAoZGF2ZS5qaWFuZ0BpbnRlbC5jb20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQgSW50ZWwgQ29ycC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKKyNpZm5kZWYgX19JT1AzM1hfSAorI2RlZmluZSBfX0lPUDMzWF9ICisKKy8qCisgKiBQZXJpcGhlcmFscyB0aGF0IGFyZSBzaGFyZWQgYmV0d2VlbiB0aGUgaW9wMzJ4IGFuZCBpb3AzM3ggYnV0CisgKiBsb2NhdGVkIGF0IGRpZmZlcmVudCBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUgSU9QM1hYX0dQSU9fUkVHKHJlZykJKElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSArIDB4MTc4MCArIChyZWcpKQorI2RlZmluZSBJT1AzWFhfVElNRVJfUkVHKHJlZykJKElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSArIDB4MDdkMCArIChyZWcpKQorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlL2lvcDN4eC5oPgorCisvKiBVQVJUcyAgKi8KKyNkZWZpbmUgSU9QMzNYX1VBUlQwX1BIWVMJKElPUDNYWF9QRVJJUEhFUkFMX1BIWVNfQkFTRSArIDB4MTcwMCkKKyNkZWZpbmUgSU9QMzNYX1VBUlQwX1ZJUlQJKElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSArIDB4MTcwMCkKKyNkZWZpbmUgSU9QMzNYX1VBUlQxX1BIWVMJKElPUDNYWF9QRVJJUEhFUkFMX1BIWVNfQkFTRSArIDB4MTc0MCkKKyNkZWZpbmUgSU9QMzNYX1VBUlQxX1ZJUlQJKElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRSArIDB4MTc0MCkKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pcTgwMzMxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaXE4MDMzMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YjkzMDIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaXE4MDMzMS5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaXE4MDMzMS5oCisgKgorICogSW50ZWwgSVE4MDMzMSBldmFsdWF0aW9uIGJvYXJkIHJlZ2lzdGVycworICovCisKKyNpZm5kZWYgX19JUTgwMzMxX0gKKyNkZWZpbmUgX19JUTgwMzMxX0gKKworI2RlZmluZSBJUTgwMzMxXzdTRUdfMQkJMHhjZTg0MDAwMAkvKiA3LVNlZ21lbnQgTVNCICovCisjZGVmaW5lIElRODAzMzFfN1NFR18wCQkweGNlODUwMDAwCS8qIDctU2VnbWVudCBMU0IgKFdPKSAqLworI2RlZmluZSBJUTgwMzMxX1JPVEFSWV9TVwkweGNlOGQwMDAwCS8qIFJvdGFyeSBTd2l0Y2ggKi8KKyNkZWZpbmUgSVE4MDMzMV9CQVRUX1NUQVQJMHhjZThmMDAwMAkvKiBCYXR0ZXJ5IFN0YXR1cyAqLworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lxODAzMzIuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pcTgwMzMyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzMTY1NgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pcTgwMzMyLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9pcTgwMzMyLmgKKyAqCisgKiBJbnRlbCBJUTgwMzMyIGV2YWx1YXRpb24gYm9hcmQgcmVnaXN0ZXJzCisgKi8KKworI2lmbmRlZiBfX0lRODAzMzJfSAorI2RlZmluZSBfX0lRODAzMzJfSAorCisjZGVmaW5lIElRODAzMzJfN1NFR18xCQkweGNlODQwMDAwCS8qIDctU2VnbWVudCBNU0IgKi8KKyNkZWZpbmUgSVE4MDMzMl83U0VHXzAJCTB4Y2U4NTAwMDAJLyogNy1TZWdtZW50IExTQiAoV08pICovCisjZGVmaW5lIElRODAzMzJfUk9UQVJZX1NXCTB4Y2U4ZDAwMDAJLyogUm90YXJ5IFN3aXRjaCAqLworI2RlZmluZSBJUTgwMzMyX0JBVFRfU1RBVAkweGNlOGYwMDAwCS8qIEJhdHRlcnkgU3RhdHVzICovCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDQ1Zjg0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lycXMuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L2lycXMuaAorICoKKyAqIEF1dGhvcjoJRGF2ZSBKaWFuZyAoZGF2ZS5qaWFuZ0BpbnRlbC5jb20pCisgKiBDb3B5cmlnaHQ6CShDKSAyMDAzIEludGVsIENvcnAuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaWZuZGVmIF9fSVJRU19ICisjZGVmaW5lIF9fSVJRU19ICisKKy8qCisgKiBJT1A4MDMzMSBjaGlwc2V0IGludGVycnVwdHMKKyAqLworI2RlZmluZSBJUlFfSU9QMzNYX0RNQTBfRU9UCTAKKyNkZWZpbmUgSVJRX0lPUDMzWF9ETUEwX0VPQwkxCisjZGVmaW5lIElSUV9JT1AzM1hfRE1BMV9FT1QJMgorI2RlZmluZSBJUlFfSU9QMzNYX0RNQTFfRU9DCTMKKyNkZWZpbmUgSVJRX0lPUDMzWF9BQV9FT1QJNgorI2RlZmluZSBJUlFfSU9QMzNYX0FBX0VPQwk3CisjZGVmaW5lIElSUV9JT1AzM1hfVElNRVIwCTgKKyNkZWZpbmUgSVJRX0lPUDMzWF9USU1FUjEJOQorI2RlZmluZSBJUlFfSU9QMzNYX0kyQ18wCTEwCisjZGVmaW5lIElSUV9JT1AzM1hfSTJDXzEJMTEKKyNkZWZpbmUgSVJRX0lPUDMzWF9NU0cJCTEyCisjZGVmaW5lIElSUV9JT1AzM1hfTVNHSUJRCTEzCisjZGVmaW5lIElSUV9JT1AzM1hfQVRVX0JJU1QJMTQKKyNkZWZpbmUgSVJRX0lPUDMzWF9QRVJGTU9OCTE1CisjZGVmaW5lIElSUV9JT1AzM1hfQ09SRV9QTVUJMTYKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMAkyNAorI2RlZmluZSBJUlFfSU9QMzNYX1hJTlQxCTI1CisjZGVmaW5lIElSUV9JT1AzM1hfWElOVDIJMjYKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMwkyNworI2RlZmluZSBJUlFfSU9QMzNYX1hJTlQ4CTMyCisjZGVmaW5lIElSUV9JT1AzM1hfWElOVDkJMzMKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTAJMzQKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTEJMzUKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTIJMzYKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTMJMzcKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTQJMzgKKyNkZWZpbmUgSVJRX0lPUDMzWF9YSU5UMTUJMzkKKyNkZWZpbmUgSVJRX0lPUDMzWF9VQVJUMAk1MQorI2RlZmluZSBJUlFfSU9QMzNYX1VBUlQxCTUyCisjZGVmaW5lIElSUV9JT1AzM1hfUEJJRQkJNTMKKyNkZWZpbmUgSVJRX0lPUDMzWF9BVFVfQ1JXCTU0CisjZGVmaW5lIElSUV9JT1AzM1hfQVRVX0VSUgk1NQorI2RlZmluZSBJUlFfSU9QMzNYX01DVV9FUlIJNTYKKyNkZWZpbmUgSVJRX0lPUDMzWF9ETUEwX0VSUgk1NworI2RlZmluZSBJUlFfSU9QMzNYX0RNQTFfRVJSCTU4CisjZGVmaW5lIElSUV9JT1AzM1hfQUFfRVJSCTYwCisjZGVmaW5lIElSUV9JT1AzM1hfTVNHX0VSUgk2MgorI2RlZmluZSBJUlFfSU9QMzNYX0hQSQkJNjMKKworI2RlZmluZSBOUl9JUlFTCQkJNjQKKworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDM5MTM5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L21lbW9yeS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvbWVtb3J5LmgKKyAqLworCisjaWZuZGVmIF9fTUVNT1JZX0gKKyNkZWZpbmUgX19NRU1PUllfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKKy8qCisgKiBQaHlzaWNhbCBEUkFNIG9mZnNldC4KKyAqLworI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQorCisvKgorICogVmlydHVhbCB2aWV3IDwtPiBQQ0kgRE1BIHZpZXcgbWVtb3J5IGFkZHJlc3MgdHJhbnNsYXRpb25zCisgKiB2aXJ0X3RvX2J1czogVXNlZCB0byB0cmFuc2xhdGUgdGhlIHZpcnR1YWwgYWRkcmVzcyB0byBhbgorICoJCWFkZHJlc3Mgc3VpdGFibGUgdG8gYmUgcGFzc2VkIHRvIHNldF9kbWFfYWRkcgorICogYnVzX3RvX3ZpcnQ6IFVzZWQgdG8gY29udmVydCBhbiBhZGRyZXNzIGZvciBETUEgb3BlcmF0aW9ucworICoJCXRvIGFuIGFkZHJlc3MgdGhhdCB0aGUga2VybmVsIGNhbiB1c2UuCisgKi8KKyNkZWZpbmUgX192aXJ0X3RvX2J1cyh4KQkoKChfX3ZpcnRfdG9fcGh5cyh4KSkgJiB+KCpJT1AzWFhfSUFUVlIyKSkgfCAoKCpJT1AzWFhfSUFCQVIyKSAmIDB4ZmZmZmZmZjApKQorI2RlZmluZSBfX2J1c190b192aXJ0KHgpCShfX3BoeXNfdG9fdmlydCgoKHgpICYgfigqSU9QM1hYX0lBTFIyKSkgfCAoICpJT1AzWFhfSUFUVlIyKSkpCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBkZDA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC9zeXN0ZW0uaApAQCAtMCwwICsxLDIyIEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3N5c3RlbS5oCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKK3sKKwljcHVfZG9faWRsZSgpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9yZXNldChjaGFyIG1vZGUpCit7CisJKklPUDNYWF9QQ1NSID0gMHgzMDsKKworCS8qIEp1bXAgaW50byBST00gYXQgYWRkcmVzcyAwICovCisJY3B1X3Jlc2V0KDApOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3RpbWV4LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTNlMWUzCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3RpbWV4LmgKQEAgLTAsMCArMSw5IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3RpbWV4LmgKKyAqCisgKiBJT1AzeHggYXJjaGl0ZWN0dXJlIHRpbWV4IHNwZWNpZmljYXRpb25zCisgKi8KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkJKDEwMCAqIEhaKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC91bmNvbXByZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE3ZmJjMAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC91bmNvbXByZXNzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIGluY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDMzeC91bmNvbXByZXNzLmgKKyAqLworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+CisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisKK3N0YXRpYyB2b2xhdGlsZSB1MzIgKnVhcnRfYmFzZTsKKworI2RlZmluZSBUWF9ET05FCQkoVUFSVF9MU1JfVEVNVCB8IFVBUlRfTFNSX1RIUkUpCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKK3sKKwl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQorCQliYXJyaWVyKCk7CisJdWFydF9iYXNlW1VBUlRfVFhdID0gYzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoKHZvaWQpCit7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgX19hcmNoX2RlY29tcF9zZXR1cCh1bnNpZ25lZCBsb25nIGFyY2hfaWQpCit7CisJaWYgKG1hY2hpbmVfaXNfaXE4MDMzMSgpIHx8IG1hY2hpbmVfaXNfaXE4MDMzMigpKQorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTMyICopSU9QMzNYX1VBUlQwX1BIWVM7CisJZWxzZQorCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgdTMyICopMHhmZTgwMDAwMDsKK30KKworLyoKKyAqIG5vdGhpbmcgdG8gZG8KKyAqLworI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKKyNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3ZtYWxsb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmY1NDVhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wMzN4L3ZtYWxsb2MuaApAQCAtMCwwICsxLDUgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzM3gvdm1hbGxvYy5oCisgKi8KKworI2RlZmluZSBWTUFMTE9DX0VORAkweGZlMDAwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZGVidWctbWFjcm8uUyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjZTAwN2U1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9kZWJ1Zy1tYWNyby5TCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2RlYnVnLW1hY3JvLlMKLSAqCi0gKiBEZWJ1Z2dpbmcgbWFjcm8gaW5jbHVkZSBoZWFkZXIKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAxOTk0LTE5OTkgUnVzc2VsbCBLaW5nCi0gKiAgTW92ZWQgZnJvbSBsaW51eC9hcmNoL2FybS9rZXJuZWwvZGVidWcuUyBieSBCZW4gRG9va3MKLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICoKLSovCi0KLQkJLm1hY3JvCWFkZHJ1YXJ0LHJ4Ci0JCW1vdglccngsICMweGZlMDAwMDAwCUAgcGh5c2ljYWwKLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMjEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfSVEzMTI0NCkKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMDgwMDAwMAlAIGxvY2F0aW9uIG9mIHRoZSBVQVJUCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKLQkJbXJjCXAxNSwgMCwgXHJ4LCBjMSwgYzAKLQkJdHN0CVxyeCwgIzEJCQlAIE1NVSBlbmFibGVkPwotCQltb3ZlcQlccngsICMweDAwMGZlMDAwCUAgUGh5c2ljYWwgQmFzZQotCQltb3ZuZQlccngsICMwCi0JCW9ycglccngsIFxyeCwgIzB4ZmUwMDAwMDAKLQkJb3JyCVxyeCwgXHJ4LCAjMHgwMGYwMDAwMAlAIFZpcnR1YWwgQmFzZQotCQlvcnIJXHJ4LCBccngsICMweDAwMDAxNzAwICAgQCBsb2NhdGlvbiBvZiB0aGUgVUFSVAotI2Vsc2UKLSNlcnJvciBVbmtub3duIElPUDNYWCBpbXBsZW1lbnRhdGlvbgotI2VuZGlmCi0JCS5lbmRtCi0KLSNpZiAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzIxKSB8fCAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTMxMjQ0KSB8fCAhZGVmaW5lZChDT05GSUdfQVJDSF9JUTgwMzMxKQotI2RlZmluZSBGTE9XX0NPTlRST0wKLSNlbmRpZgotI2RlZmluZSBVQVJUX1NISUZUCTAKLSNpbmNsdWRlIDxhc20vaGFyZHdhcmUvZGVidWctODI1MC5TPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2VudHJ5LW1hY3JvLlMgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZW50cnktbWFjcm8uUwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTI2NjY4Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZW50cnktbWFjcm8uUworKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvZW50cnktbWFjcm8uUwotICoKLSAqIExvdy1sZXZlbCBJUlEgaGVscGVyIG1hY3JvcyBmb3IgSU9QM3h4LWJhc2VkIHBsYXRmb3JtcwotICoKLSAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciAgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UgdmVyc2lvbiAyLiBUaGlzIHByb2dyYW0gaXMgbGljZW5zZWQgImFzIGlzIiB3aXRob3V0IGFueQotICogd2FycmFudHkgb2YgYW55IGtpbmQsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgotICovCi0jaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgotCi0jaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMjEpCi0JCS5tYWNybyAgZGlzYWJsZV9maXEKLQkJLmVuZG0KLQotCQkvKgotCQkgKiBOb3RlOiBvbmx5IGRlYWwgd2l0aCBub3JtYWwgaW50ZXJydXB0cywgbm90IEZJUQotCQkgKi8KLQkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbW92ICAgICBcaXJxbnIsICMwCi0JCW1yYyAgICAgcDYsIDAsIFxpcnFzdGF0LCBjOCwgYzAsIDAgICAgICBAIFJlYWQgSUlOVFNSQwotCQljbXAgICAgIFxpcnFzdGF0LCAjMAotCQliZXEgICAgIDEwMDFmCi0JCWNseiAgICAgXGlycW5yLCBcaXJxc3RhdAotCQltb3YgICAgIFxiYXNlLCAjMzEKLQkJc3VicyAgICBcaXJxbnIsXGJhc2UsXGlycW5yCi0JCWFkZCAgICAgXGlycW5yLFxpcnFuciwjSVJRX0lPUDMyMV9ETUEwX0VPVAotMTAwMToKLQkJLmVuZG0KLQotI2VsaWYgZGVmaW5lZChDT05GSUdfQVJDSF9JT1AzMzEpCi0JCS5tYWNybyAgZGlzYWJsZV9maXEKLQkJLmVuZG0KLQotCQkvKgotCQkgKiBOb3RlOiBvbmx5IGRlYWwgd2l0aCBub3JtYWwgaW50ZXJydXB0cywgbm90IEZJUQotCQkgKi8KLQkJLm1hY3JvICBnZXRfaXJxbnJfYW5kX2Jhc2UsIGlycW5yLCBpcnFzdGF0LCBiYXNlLCB0bXAKLQkJbW92ICAgICBcaXJxbnIsICMwCi0JCW1yYyAgICAgcDYsIDAsIFxpcnFzdGF0LCBjNCwgYzAsIDAgICAgICBAIFJlYWQgSUlOVFNSQzAKLQkJY21wICAgICBcaXJxc3RhdCwgIzAKLQkJYm5lICAgICAxMDAyZgotCQltcmMgICAgIHA2LCAwLCBcaXJxc3RhdCwgYzUsIGMwLCAwICAgICAgQCBSZWFkIElJTlRTUkMxCi0JCWNtcAlcaXJxc3RhdCwgIzAKLQkJYmVxCTEwMDFmCi0JCWNseglcaXJxbnIsIFxpcnFzdGF0Ci0JCXJzYnMgICAgXGlycW5yLFxpcnFuciwjMzEgICBAIHJlY29tbWVuZCBieSBSTUsKLQkJYWRkCVxpcnFucixcaXJxbnIsI0lSUV9JT1AzMzFfWElOVDgKLQkJYgkxMDAxZgotMTAwMjoJY2x6ICAgICBcaXJxbnIsIFxpcnFzdGF0Ci0JCXJzYnMgICAgXGlycW5yLFxpcnFuciwjMzEgICBAIHJlY29tbWVuZCBieSBSTUsKLQkJYWRkICAgICBcaXJxbnIsXGlycW5yLCNJUlFfSU9QMzMxX0RNQTBfRU9UCi0xMDAxOgotCQkuZW5kbQotCi0jZW5kaWYKLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2hhcmR3YXJlLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaGFyZHdhcmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2IxMzgxNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaGFyZHdhcmUuaAorKysgL2Rldi9udWxsCkBAIC0xLDU3ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaGFyZHdhcmUuaAotICovCi0jaWZuZGVmIF9fQVNNX0FSQ0hfSEFSRFdBUkVfSAotI2RlZmluZSBfX0FTTV9BUkNIX0hBUkRXQVJFX0gKLQotI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0vKgotICogTm90ZSBhYm91dCBQQ0kgSU8gc3BhY2UgbWFwcGluZ3MKLSAqCi0gKiBUbyBtYWtlIElPIHNwYWNlIGFjY2Vzc2VzIGVmZmljaWVudCwgd2Ugc3RvcmUgdmlydHVhbCBhZGRyZXNzZXMgaW4KLSAqIHRoZSBJTyByZXNvdXJjZXMuCi0gKgotICogVGhlIFBDSSBJTyBzcGFjZSBpcyBsb2NhdGVkIGF0IHZpcnR1YWwgMHhmZTAwMDAwMCBmcm9tIHBoeXNpY2FsCi0gKiAweDkwMDAwMDAwLiAgVGhlIFBDSSBCQVJzIG11c3QgYmUgcHJvZ3JhbW1lZCB3aXRoIHBoeXNpY2FsIGFkZHJlc3NlcywKLSAqIGJ1dCB3aGVuIHdlIHJlYWQgdGhlbSwgd2UgY29udmVydCB0aGVtIHRvIHZpcnR1YWwgYWRkcmVzc2VzLiAgU2VlCi0gKiBhcmNoL2FybS9tYWNoLWlvcDN4eC9pb3AzeHgtcGNpLmMKLSAqLwotCi0jZGVmaW5lIHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXMoKSAxCi0KLQotLyoKLSAqIFRoZSBtaW4gUENJIEkvTyBhbmQgTUVNIHNwYWNlIGFyZSBkZXBlbmRlbnQgb24gd2hhdCBzcGVjaWZpYwotICogY2hpcHNldC9wbGF0Zm9ybSB3ZSBhcmUgcnVubmluZyBvbiwgc28gaW5zdGVhZCBvZiBoYXJkY29kaW5nIHdpdGgKLSAqICNpZmRlZnMsIHdlIGp1c3QgZmlsbCB0aGVzZSBpbiB0aGUgcGxhdGZvcm0gbGV2ZWwgUENJIGluaXQgY29kZS4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB1bnNpZ25lZCBsb25nIGlvcDN4eF9wY2liaW9zX21pbl9pbzsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGlvcDN4eF9wY2liaW9zX21pbl9tZW07Ci0KLWV4dGVybiB1bnNpZ25lZCBpbnQgcHJvY2Vzc29yX2lkOwotI2VuZGlmCi0KLS8qCi0gKiBXZSBqdXN0IHNldCB0aGVzZSB0byB6ZXJvIHNpbmNlIHRoZXkgYXJlIHJlYWxseSBib2d1cyBhbnl3YXlzCi0gKi8KLSNkZWZpbmUgUENJQklPU19NSU5fSU8gICAgICAoaW9wM3h4X3BjaWJpb3NfbWluX2lvKQotI2RlZmluZSBQQ0lCSU9TX01JTl9NRU0gICAgIChpb3AzeHhfcGNpYmlvc19taW5fbWVtKQotCi0vKgotICogR2VuZXJpYyBjaGlwc2V0IGJpdHMKLSAqCi0gKi8KLSNpbmNsdWRlICJpb3AzMjEuaCIKLSNpbmNsdWRlICJpb3AzMzEuaCIKLQotLyoKLSAqIEJvYXJkIHNwZWNpZmljIGJpdHMKLSAqLwotI2luY2x1ZGUgImlxODAzMjEuaCIKLSNpbmNsdWRlICJpcTMxMjQ0LmgiCi0jaW5jbHVkZSAiaXE4MDMzMS5oIgotI2luY2x1ZGUgImlxODAzMzIuaCIKLQotI2VuZGlmICAvKiBfQVNNX0FSQ0hfSEFSRFdBUkVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMyMS1pcnFzLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLWlycXMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZjYzE2NS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLWlycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDEwMCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lycXMuaAotICoKLSAqIEF1dGhvcjoJUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KLSAqIENvcHlyaWdodDoJKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqCi0gKi8KLSNpZm5kZWYgX0lPUDMyMV9JUlFTX0hfCi0jZGVmaW5lIF9JT1AzMjFfSVJRU19IXwotCi0vKgotICogSU9QODAzMjEgY2hpcHNldCBpbnRlcnJ1cHRzCi0gKi8KLSNkZWZpbmUgSU9QMzIxX0lSUV9PRlMJCTAKLSNkZWZpbmUgSU9QMzIxX0lSUSh4KQkJKElPUDMyMV9JUlFfT0ZTICsgKHgpKQotCi0vKgotICogT24gSVJRIG9yIEZJUSByZWdpc3RlcgotICovCi0jZGVmaW5lIElSUV9JT1AzMjFfRE1BMF9FT1QJSU9QMzIxX0lSUSgwKQotI2RlZmluZSBJUlFfSU9QMzIxX0RNQTBfRU9DCUlPUDMyMV9JUlEoMSkKLSNkZWZpbmUgSVJRX0lPUDMyMV9ETUExX0VPVAlJT1AzMjFfSVJRKDIpCi0jZGVmaW5lIElSUV9JT1AzMjFfRE1BMV9FT0MJSU9QMzIxX0lSUSgzKQotI2RlZmluZSBJUlFfSU9QMzIxX1JTVkRfNAlJT1AzMjFfSVJRKDQpCi0jZGVmaW5lIElSUV9JT1AzMjFfUlNWRF81CUlPUDMyMV9JUlEoNSkKLSNkZWZpbmUgSVJRX0lPUDMyMV9BQV9FT1QJSU9QMzIxX0lSUSg2KQotI2RlZmluZSBJUlFfSU9QMzIxX0FBX0VPQwlJT1AzMjFfSVJRKDcpCi0jZGVmaW5lIElSUV9JT1AzMjFfQ09SRV9QTU9OCUlPUDMyMV9JUlEoOCkKLSNkZWZpbmUgSVJRX0lPUDMyMV9USU1FUjAJSU9QMzIxX0lSUSg5KQotI2RlZmluZSBJUlFfSU9QMzIxX1RJTUVSMQlJT1AzMjFfSVJRKDEwKQotI2RlZmluZSBJUlFfSU9QMzIxX0kyQ18wCUlPUDMyMV9JUlEoMTEpCi0jZGVmaW5lIElSUV9JT1AzMjFfSTJDXzEJSU9QMzIxX0lSUSgxMikKLSNkZWZpbmUgSVJRX0lPUDMyMV9NRVNTQUdJTkcJSU9QMzIxX0lSUSgxMykKLSNkZWZpbmUgSVJRX0lPUDMyMV9BVFVfQklTVAlJT1AzMjFfSVJRKDE0KQotI2RlZmluZSBJUlFfSU9QMzIxX1BFUkZNT04JSU9QMzIxX0lSUSgxNSkKLSNkZWZpbmUgSVJRX0lPUDMyMV9DT1JFX1BNVQlJT1AzMjFfSVJRKDE2KQotI2RlZmluZSBJUlFfSU9QMzIxX0JJVV9FUlIJSU9QMzIxX0lSUSgxNykKLSNkZWZpbmUgSVJRX0lPUDMyMV9BVFVfRVJSCUlPUDMyMV9JUlEoMTgpCi0jZGVmaW5lIElSUV9JT1AzMjFfTUNVX0VSUglJT1AzMjFfSVJRKDE5KQotI2RlZmluZSBJUlFfSU9QMzIxX0RNQTBfRVJSCUlPUDMyMV9JUlEoMjApCi0jZGVmaW5lIElSUV9JT1AzMjFfRE1BMV9FUlIJSU9QMzIxX0lSUSgyMSkKLSNkZWZpbmUgSVJRX0lPUDMyMV9SU1ZEXzIyCUlPUDMyMV9JUlEoMjIpCi0jZGVmaW5lIElSUV9JT1AzMjFfQUFfRVJSCUlPUDMyMV9JUlEoMjMpCi0jZGVmaW5lIElSUV9JT1AzMjFfTVNHX0VSUglJT1AzMjFfSVJRKDI0KQotI2RlZmluZSBJUlFfSU9QMzIxX1NTUAkJSU9QMzIxX0lSUSgyNSkKLSNkZWZpbmUgSVJRX0lPUDMyMV9SU1ZEXzI2CUlPUDMyMV9JUlEoMjYpCi0jZGVmaW5lIElSUV9JT1AzMjFfWElOVDAJSU9QMzIxX0lSUSgyNykKLSNkZWZpbmUgSVJRX0lPUDMyMV9YSU5UMQlJT1AzMjFfSVJRKDI4KQotI2RlZmluZSBJUlFfSU9QMzIxX1hJTlQyCUlPUDMyMV9JUlEoMjkpCi0jZGVmaW5lIElSUV9JT1AzMjFfWElOVDMJSU9QMzIxX0lSUSgzMCkKLSNkZWZpbmUgSVJRX0lPUDMyMV9IUEkJCUlPUDMyMV9JUlEoMzEpCi0KLSNkZWZpbmUgTlJfSU9QMzIxX0lSUVMJCShJT1AzMjFfSVJRKDMxKSArIDEpCi0KLSNkZWZpbmUgTlJfSVJRUwkJCU5SX0lPUDMyMV9JUlFTCi0KLQotLyoKLSAqIEludGVycnVwdHMgYXZhaWxhYmxlIG9uIHRoZSBJUTgwMzIxIGJvYXJkCi0gKi8KLQotLyoKLSAqIE9uIGJvYXJkIGRldmljZXMKLSAqLwotI2RlZmluZQlJUlFfSVE4MDMyMV9JODI1NDQJSVJRX0lPUDMyMV9YSU5UMAotI2RlZmluZSBJUlFfSVE4MDMyMV9VQVJUCUlSUV9JT1AzMjFfWElOVDEKLQotLyoKLSAqIFBDSSBpbnRlcnJ1cHRzCi0gKi8KLSNkZWZpbmUJSVJRX0lRODAzMjFfSU5UQQlJUlFfSU9QMzIxX1hJTlQwCi0jZGVmaW5lCUlSUV9JUTgwMzIxX0lOVEIJSVJRX0lPUDMyMV9YSU5UMQotI2RlZmluZQlJUlFfSVE4MDMyMV9JTlRDCUlSUV9JT1AzMjFfWElOVDIKLSNkZWZpbmUJSVJRX0lRODAzMjFfSU5URAlJUlFfSU9QMzIxX1hJTlQzCi0KLS8qCi0gKiBJbnRlcnJ1cHRzIG9uIHRoZSBJUTMxMjQ0IGJvYXJkCi0gKi8KLQotLyoKLSAqIE9uIGJvYXJkIGRldmljZXMKLSAqLwotI2RlZmluZSBJUlFfSVEzMTI0NF9VQVJUCUlSUV9JT1AzMjFfWElOVDEKLSNkZWZpbmUJSVJRX0lRMzEyNDRfSTgyNTQ2CUlSUV9JT1AzMjFfWElOVDAKLSNkZWZpbmUgSVJRX0lRMzEyNDRfU0FUQQlJUlFfSU9QMzIxX1hJTlQyCi0jZGVmaW5lCUlSUV9JUTMxMjQ0X1BDSVhfU0xPVAlJUlFfSU9QMzIxX1hJTlQzCi0KLS8qCi0gKiBQQ0kgaW50ZXJydXB0cwotICovCi0jZGVmaW5lCUlSUV9JUTMxMjQ0X0lOVEEJSVJRX0lPUDMyMV9YSU5UMAotI2RlZmluZQlJUlFfSVEzMTI0NF9JTlRCCUlSUV9JT1AzMjFfWElOVDEKLSNkZWZpbmUJSVJRX0lRMzEyNDRfSU5UQwlJUlFfSU9QMzIxX1hJTlQyCi0jZGVmaW5lCUlSUV9JUTMxMjQ0X0lOVEQJSVJRX0lPUDMyMV9YSU5UMwotCi0jZW5kaWYgLy8gX0lPUDMyMV9JUlFfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMjEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMjEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjhkZjc3OC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzIxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNDUgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lvcDMyMS5oCi0gKgotICogSW50ZWwgSU9QMzIxIENoaXAgZGVmaW5pdGlvbnMKLSAqCi0gKiBBdXRob3I6IFJvcnkgQm9sdCA8cm9yeWJvbHRAcGFjYmVsbC5uZXQ+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDIgUm9yeSBCb2x0Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMDQgSW50ZWwgQ29ycC4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLSNpZm5kZWYgX0lPUDMyMV9IV19IXwotI2RlZmluZSBfSU9QMzIxX0hXX0hfCi0KLQotLyoKLSAqIFRoaXMgaXMgbmVlZGVkIGZvciBtaXhlZCBkcml2ZXJzIHRoYXQgbmVlZCB0byB3b3JrIG9uIGFsbAotICogSU9QM3h4IHZhcmlhbnRzIGJ1dCBiZWhhdmUgc2xpZ2h0bHkgZGlmZmVyZW50bHkgb24gZWFjaC4KLSAqLwotI2lmbmRlZiBfX0FTU0VNQkxZX18KLSNpZmRlZglDT05GSUdfQVJDSF9JT1AzMjEKLSNkZWZpbmUgaW9wX2lzXzMyMSgpICgoKHByb2Nlc3Nvcl9pZCAmIDB4ZmZmZmY1ZTApID09IDB4NjkwNTI0MjApKQotI2Vsc2UKLSNkZWZpbmUJaW9wX2lzXzMyMSgpCTAKLSNlbmRpZgotI2VuZGlmCi0KLS8qCi0gKiBJT1AzMjEgSS9PIGFuZCBNZW0gc3BhY2UgcmVnaW9ucyBmb3IgUENJIGF1dG9jb25maWd1cmF0aW9uCi0gKi8KLSNkZWZpbmUgSU9QMzIxX1BDSV9JT19XSU5ET1dfU0laRSAgIDB4MDAwMTAwMDAKLSNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19QQSAgICAgIDB4OTAwMDAwMDAKLSNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19WQSAgICAgIDB4ZmUwMDAwMDAKLSNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9JT19CQSAgICAgICgqSU9QMzIxX09JT1dUVlIpCi0jZGVmaW5lIElPUDMyMV9QQ0lfVVBQRVJfSU9fUEEgICAgICAoSU9QMzIxX1BDSV9MT1dFUl9JT19QQSArIElPUDMyMV9QQ0lfSU9fV0lORE9XX1NJWkUgLSAxKQotI2RlZmluZSBJT1AzMjFfUENJX1VQUEVSX0lPX1ZBICAgICAgKElPUDMyMV9QQ0lfTE9XRVJfSU9fVkEgKyBJT1AzMjFfUENJX0lPX1dJTkRPV19TSVpFIC0gMSkKLSNkZWZpbmUgSU9QMzIxX1BDSV9VUFBFUl9JT19CQSAgICAgIChJT1AzMjFfUENJX0xPV0VSX0lPX0JBICsgSU9QMzIxX1BDSV9JT19XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMyMV9QQ0lfSU9fT0ZGU0VUICAgICAgICAoSU9QMzIxX1BDSV9MT1dFUl9JT19WQSAtIElPUDMyMV9QQ0lfTE9XRVJfSU9fQkEpCi0KLS8qICNkZWZpbmUgSU9QMzIxX1BDSV9NRU1fV0lORE9XX1NJWkUgICh+KklPUDMyMV9JQUxSMSArIDEpICovCi0jZGVmaW5lIElPUDMyMV9QQ0lfTUVNX1dJTkRPV19TSVpFICAweDA0MDAwMDAwIC8qIDY0TSBvdXRib3VuZCB3aW5kb3cgKi8KLSNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9NRU1fUEEgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSU9QMzIxX1BDSV9MT1dFUl9NRU1fQkEgICAgICgqSU9QMzIxX09NV1RWUjApCi0jZGVmaW5lIElPUDMyMV9QQ0lfVVBQRVJfTUVNX1BBICAgICAoSU9QMzIxX1BDSV9MT1dFUl9NRU1fUEEgKyBJT1AzMjFfUENJX01FTV9XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMyMV9QQ0lfVVBQRVJfTUVNX0JBICAgICAoSU9QMzIxX1BDSV9MT1dFUl9NRU1fQkEgKyBJT1AzMjFfUENJX01FTV9XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMyMV9QQ0lfTUVNX09GRlNFVCAgICAgICAoSU9QMzIxX1BDSV9MT1dFUl9NRU1fUEEgLSBJT1AzMjFfUENJX0xPV0VSX01FTV9CQSkKLQotCi0vKgotICogSU9QMzIxIGNoaXBzZXQgcmVnaXN0ZXJzCi0gKi8KLSNkZWZpbmUgSU9QMzIxX1ZJUlRfTUVNX0JBU0UgMHhmZWZmZTAwMCAgLyogY2hpcCB2aXJ0dWFsIG1lbSBhZGRyZXNzKi8KLSNkZWZpbmUgSU9QMzIxX1BIWVNfTUVNX0JBU0UgMHhmZmZmZTAwMCAgLyogY2hpcCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyAqLwotI2RlZmluZSBJT1AzMjFfUkVHX0FERFIocmVnKSAoSU9QMzIxX1ZJUlRfTUVNX0JBU0UgfCAocmVnKSkKLQotLyogUmVzZXJ2ZWQgMHgwMDAwMDAwMCB0aHJvdWdoIDB4MDAwMDAwRkYgKi8KLQotLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBVbml0IDB4MDAwMDAxMDAgdGhyb3VnaCAweDAwMDAwMUZGICovCi0jZGVmaW5lIElPUDMyMV9BVFVWSUQgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgSU9QMzIxX0FUVURJRCAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTAyKQotI2RlZmluZSBJT1AzMjFfQVRVQ01EICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMDQpCi0jZGVmaW5lIElPUDMyMV9BVFVTUiAgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwNikKLSNkZWZpbmUgSU9QMzIxX0FUVVJJRCAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTA4KQotI2RlZmluZSBJT1AzMjFfQVRVQ0NSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMDkpCi0jZGVmaW5lIElPUDMyMV9BVFVDTFNSICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwQykKLSNkZWZpbmUgSU9QMzIxX0FUVUxUICAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTBEKQotI2RlZmluZSBJT1AzMjFfQVRVSFRSICAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMEUpCi0jZGVmaW5lIElPUDMyMV9BVFVCSVNUICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEwRikKLSNkZWZpbmUgSU9QMzIxX0lBQkFSMCAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTEwKQotI2RlZmluZSBJT1AzMjFfSUFVQkFSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMTQpCi0jZGVmaW5lIElPUDMyMV9JQUJBUjEgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDExOCkKLSNkZWZpbmUgSU9QMzIxX0lBVUJBUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTFDKQotI2RlZmluZSBJT1AzMjFfSUFCQVIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMjApCi0jZGVmaW5lIElPUDMyMV9JQVVCQVIyICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEyNCkKLSNkZWZpbmUgSU9QMzIxX0FTVklSICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTJDKQotI2RlZmluZSBJT1AzMjFfQVNJUiAgICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxMkUpCi0jZGVmaW5lIElPUDMyMV9FUkJBUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEzMCkKLS8qIFJlc2VydmVkIDB4MDAwMDAxMzQgdGhyb3VnaCAweDAwMDAwMTNCICovCi0jZGVmaW5lIElPUDMyMV9BVFVJTFIgICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEzQykKLSNkZWZpbmUgSU9QMzIxX0FUVUlQUiAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTNEKQotI2RlZmluZSBJT1AzMjFfQVRVTUdOVCAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxM0UpCi0jZGVmaW5lIElPUDMyMV9BVFVNTEFUICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDEzRikKLSNkZWZpbmUgSU9QMzIxX0lBTFIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTQwKQotI2RlZmluZSBJT1AzMjFfSUFUVlIwICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNDQpCi0jZGVmaW5lIElPUDMyMV9FUkxSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE0OCkKLSNkZWZpbmUgSU9QMzIxX0VSVFZSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTRDKQotI2RlZmluZSBJT1AzMjFfSUFMUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNTApCi0jZGVmaW5lIElPUDMyMV9JQUxSMiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE1NCkKLSNkZWZpbmUgSU9QMzIxX0lBVFZSMiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTU4KQotI2RlZmluZSBJT1AzMjFfT0lPV1RWUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNUMpCi0jZGVmaW5lIElPUDMyMV9PTVdUVlIwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE2MCkKLSNkZWZpbmUgSU9QMzIxX09VTVdUVlIwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTY0KQotI2RlZmluZSBJT1AzMjFfT01XVFZSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxNjgpCi0jZGVmaW5lIElPUDMyMV9PVU1XVFZSMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE2QykKLS8qIFJlc2VydmVkIDB4MDAwMDAxNzAgdGhyb3VnaCAweDAwMDAwMTc3Ki8KLSNkZWZpbmUgSU9QMzIxX09VRFdUVlIgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTc4KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDE3QyB0aHJvdWdoIDB4MDAwMDAxN0YqLwotI2RlZmluZSBJT1AzMjFfQVRVQ1IgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxODApCi0jZGVmaW5lIElPUDMyMV9QQ1NSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE4NCkKLSNkZWZpbmUgSU9QMzIxX0FUVUlTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTg4KQotI2RlZmluZSBJT1AzMjFfQVRVSU1SICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxOEMpCi0jZGVmaW5lIElPUDMyMV9JQUJBUjMgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE5MCkKLSNkZWZpbmUgSU9QMzIxX0lBVUJBUjMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMTk0KQotI2RlZmluZSBJT1AzMjFfSUFMUjMgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxOTgpCi0jZGVmaW5lIElPUDMyMV9JQVRWUjMgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDE5QykKLS8qIFJlc2VydmVkIDB4MDAwMDAxQTAgdGhyb3VnaCAweDAwMDAwMUEzKi8KLSNkZWZpbmUgSU9QMzIxX09DQ0FSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUE0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDFBOCB0aHJvdWdoIDB4MDAwMDAxQUIqLwotI2RlZmluZSBJT1AzMjFfT0NDRFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxQUMpCi0vKiBSZXNlcnZlZCAweDAwMDAwMUIwIHRocm91Z2ggMHgwMDAwMDFCQiovCi0jZGVmaW5lIElPUDMyMV9QRFNDUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFCQykKLSNkZWZpbmUgSU9QMzIxX1BNQ0FQSUQgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUMwKQotI2RlZmluZSBJT1AzMjFfUE1ORVhUICAgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxQzEpCi0jZGVmaW5lIElPUDMyMV9BUE1DUiAgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFDMikKLSNkZWZpbmUgSU9QMzIxX0FQTUNTUiAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUM0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDFDNiB0aHJvdWdoIDB4MDAwMDAxREYgKi8KLSNkZWZpbmUgSU9QMzIxX1BDSVhDQVBJRCAgKHZvbGF0aWxlIHU4ICAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUUwKQotI2RlZmluZSBJT1AzMjFfUENJWE5FWFQgICAodm9sYXRpbGUgdTggICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxRTEpCi0jZGVmaW5lIElPUDMyMV9QQ0lYQ01EICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDFFMikKLSNkZWZpbmUgSU9QMzIxX1BDSVhTUiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMUU0KQotI2RlZmluZSBJT1AzMjFfUENJSVJTUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAxRUMpCi0KLS8qIE1lc3NhZ2luZyBVbml0IDB4MDAwMDAzMDAgdGhyb3VnaCAweDAwMDAwM0ZGICovCi0KLS8qIFJlc2VydmVkIDB4MDAwMDAzMDAgdGhyb3VnaCAweDAwMDAwMzBjICovCi0jZGVmaW5lIElPUDMyMV9JTVIwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMxMCkKLSNkZWZpbmUgSU9QMzIxX0lNUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzE0KQotI2RlZmluZSBJT1AzMjFfT01SMCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMTgpCi0jZGVmaW5lIElPUDMyMV9PTVIxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMxQykKLSNkZWZpbmUgSU9QMzIxX0lEUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzIwKQotI2RlZmluZSBJT1AzMjFfSUlTUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMjQpCi0jZGVmaW5lIElPUDMyMV9JSU1SICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMyOCkKLSNkZWZpbmUgSU9QMzIxX09EUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzJDKQotI2RlZmluZSBJT1AzMjFfT0lTUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzMzApCi0jZGVmaW5lIElPUDMyMV9PSU1SICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDMzNCkKLS8qIFJlc2VydmVkIDB4MDAwMDAzMzggdGhyb3VnaCAweDAwMDAwMzRGICovCi0jZGVmaW5lIElPUDMyMV9NVUNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM1MCkKLSNkZWZpbmUgSU9QMzIxX1FCQVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzU0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDM1OCB0aHJvdWdoIDB4MDAwMDAzNUMgKi8KLSNkZWZpbmUgSU9QMzIxX0lGSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzYwKQotI2RlZmluZSBJT1AzMjFfSUZUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNjQpCi0jZGVmaW5lIElPUDMyMV9JUEhQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM2OCkKLSNkZWZpbmUgSU9QMzIxX0lQVFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzZDKQotI2RlZmluZSBJT1AzMjFfT0ZIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzNzApCi0jZGVmaW5lIElPUDMyMV9PRlRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM3NCkKLSNkZWZpbmUgSU9QMzIxX09QSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwMzc4KQotI2RlZmluZSBJT1AzMjFfT1BUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDAzN0MpCi0jZGVmaW5lIElPUDMyMV9JQVIgICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDM4MCkKLQotI2RlZmluZSBJT1AzMjFfSUl4Ul9NQVNLCTB4N2YgLyogbWFza3MgYWxsICovCi0jZGVmaW5lIElPUDMyMV9JSXhSX0lSSQkJMHg0MCAvKiBSQyBJbmRleCBSZWdpc3RlciBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSU9QMzIxX0lJeFJfT0ZRRgkweDIwIC8qIFJDIE91dHB1dCBGcmVlIFEgRnVsbCAoRVJST1IpICovCi0jZGVmaW5lIElPUDMyMV9JSXhSX2lwcQkJMHgxMCAvKiBSQyBJbmJvdW5kIFBvc3QgUSAocG9zdCkgKi8KLSNkZWZpbmUgSU9QMzIxX0lJeFJfRVJSREkJMHgwOCAvKiBSTyBFcnJvciBEb29yYmVsbCBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSU9QMzIxX0lJeFJfSURJCQkweDA0IC8qIFJPIEluYm91bmQgRG9vcmJlbGwgSW50ZXJydXB0ICovCi0jZGVmaW5lIElPUDMyMV9JSXhSX0lNMQkJMHgwMiAvKiBSQyBJbmJvdW5kIE1lc3NhZ2UgMSBJbnRlcnJ1cHQgKi8KLSNkZWZpbmUgSU9QMzIxX0lJeFJfSU0wCQkweDAxIC8qIFJDIEluYm91bmQgTWVzc2FnZSAwIEludGVycnVwdCAqLwotCi0vKiBSZXNlcnZlZCAweDAwMDAwMzg0IHRocm91Z2ggMHgwMDAwMDNGRiAqLwotCi0vKiBETUEgQ29udHJvbGxlciAweDAwMDAwNDAwIHRocm91Z2ggMHgwMDAwMDRGRiAqLwotI2RlZmluZSBJT1AzMjFfRE1BMF9DQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0MDApCi0jZGVmaW5lIElPUDMyMV9ETUEwX0NTUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQwNCkKLSNkZWZpbmUgSU9QMzIxX0RNQTBfREFSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDBDKQotI2RlZmluZSBJT1AzMjFfRE1BMF9OREFSICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0MTApCi0jZGVmaW5lIElPUDMyMV9ETUEwX1BBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQxNCkKLSNkZWZpbmUgSU9QMzIxX0RNQTBfUFVBRFIgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDE4KQotI2RlZmluZSBJT1AzMjFfRE1BMF9MQURSICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDBYMDAwMDA0MUMpCi0jZGVmaW5lIElPUDMyMV9ETUEwX0JDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQyMCkKLSNkZWZpbmUgSU9QMzIxX0RNQTBfRENSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDI0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDQyOCB0aHJvdWdoIDB4MDAwMDA0M0MgKi8KLSNkZWZpbmUgSU9QMzIxX0RNQTFfQ0NSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDQwKQotI2RlZmluZSBJT1AzMjFfRE1BMV9DU1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NDQpCi0jZGVmaW5lIElPUDMyMV9ETUExX0RBUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ0QykKLSNkZWZpbmUgSU9QMzIxX0RNQTFfTkRBUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDUwKQotI2RlZmluZSBJT1AzMjFfRE1BMV9QQURSICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NTQpCi0jZGVmaW5lIElPUDMyMV9ETUExX1BVQURSICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ1OCkKLSNkZWZpbmUgSU9QMzIxX0RNQTFfTEFEUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNDVDKQotI2RlZmluZSBJT1AzMjFfRE1BMV9CQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA0NjApCi0jZGVmaW5lIElPUDMyMV9ETUExX0RDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDQ2NCkKLS8qIFJlc2VydmVkIDB4MDAwMDA0NjggdGhyb3VnaCAweDAwMDAwNEZGICovCi0KLS8qIE1lbW9yeSBjb250cm9sbGVyIDB4MDAwMDA1MDAgdGhyb3VnaCAweDAwMDVGRiAqLwotCi0vKiBQZXJpcGhlcmFsIGJ1cyBpbnRlcmZhY2UgdW5pdCAweDAwMDAwNjgwIHRocm91Z2ggMHgwMDA2RkYgKi8KLSNkZWZpbmUgSU9QMzIxX1BCQ1IgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNjgwKQotI2RlZmluZSBJT1AzMjFfUEJJU1IgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2ODQpCi0jZGVmaW5lIElPUDMyMV9QQkJBUjAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDY4OCkKLSNkZWZpbmUgSU9QMzIxX1BCTFIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNjhDKQotI2RlZmluZSBJT1AzMjFfUEJCQVIxICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2OTApCi0jZGVmaW5lIElPUDMyMV9QQkxSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDY5NCkKLSNkZWZpbmUgSU9QMzIxX1BCQkFSMiAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNjk4KQotI2RlZmluZSBJT1AzMjFfUEJMUjIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2OUMpCi0jZGVmaW5lIElPUDMyMV9QQkJBUjMgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZBMCkKLSNkZWZpbmUgSU9QMzIxX1BCTFIzICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkE0KQotI2RlZmluZSBJT1AzMjFfUEJCQVI0ICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2QTgpCi0jZGVmaW5lIElPUDMyMV9QQkxSNCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZBQykKLSNkZWZpbmUgSU9QMzIxX1BCQkFSNSAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkIwKQotI2RlZmluZSBJT1AzMjFfUEJMUjUgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2QjQpCi0jZGVmaW5lIElPUDMyMV9QQkRTQ1IgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDZCOCkKLS8qIFJlc2VydmVkIDB4MDAwMDA2QkMgKi8KLSNkZWZpbmUgSU9QMzIxX1BNQlIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkMwKQotLyogUmVzZXJ2ZWQgMHgwMDAwMDZDNCB0aHJvdWdoIDB4MDAwMDA2REMgKi8KLSNkZWZpbmUgSU9QMzIxX1BNQlIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNkUwKQotI2RlZmluZSBJT1AzMjFfUE1CUjIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA2RTQpCi0KLSNkZWZpbmUgSU9QMzIxX1BCQ1JfRU4gICAgMHgxCi0KLSNkZWZpbmUgSU9QMzIxX1BCSVNSX0JPT1JfRVJSIDB4MQotCi0vKiBQZXJpcGhlcmFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAweDAwMDAwNzAwIHRocm91Z2ggMHgwMDA3N0YgKi8KLSNkZWZpbmUgSU9QMzIxX0dUTVIJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzAwKQotI2RlZmluZSBJT1AzMjFfRVNSCSh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDcwNCkKLSNkZWZpbmUgSU9QMzIxX0VNSVNSCSh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDcwOCkKLS8qIHJlc2VydmVkIDB4MDAwMDAwNzBjICovCi0jZGVmaW5lIElPUDMyMV9HVFNSCSh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDcxMCkKLS8qIFBFUkMwIERPRVNOJ1QgRVhJU1QgLSBpbmRleCBmcm9tIDEhICovCi0jZGVmaW5lIElPUDMyMV9QRVJDUjAJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzEwKQotCi0jZGVmaW5lIElPUDMyMV9HVE1SX05HQ0UJMHgwNCAvKiAoTm90KSBHbG9iYWwgQ291bnRlciBFbmFibGUgKi8KLQotLyogSW50ZXJuYWwgYXJiaXRyYXRpb24gdW5pdCAweDAwMDAwNzgwIHRocm91Z2ggMHgwMDA3QkYgKi8KLSNkZWZpbmUgSU9QMzIxX0lBQ1IJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzgwKQotI2RlZmluZSBJT1AzMjFfTVRUUjEJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzg0KQotI2RlZmluZSBJT1AzMjFfTVRUUjIJKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwNzg4KQotCi0vKiBHZW5lcmFsIFB1cnBvc2UgSS9PIFJlZ2lzdGVycyAqLwotI2RlZmluZSBJT1AzMjFfR1BPRSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3QzQpCi0jZGVmaW5lIElPUDMyMV9HUElEICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdDOCkKLSNkZWZpbmUgSU9QMzIxX0dQT0QgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0NDKQotCi0vKiBJbnRlcnJ1cHQgQ29udHJvbGxlciAqLwotI2RlZmluZSBJT1AzMjFfSU5UQ1RMICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RDApCi0jZGVmaW5lIElPUDMyMV9JTlRTVFIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdENCkKLSNkZWZpbmUgSU9QMzIxX0lJTlRTUkMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0Q4KQotI2RlZmluZSBJT1AzMjFfRklOVFNSQyAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3REMpCi0KLS8qIFRpbWVycyAqLwotCi0jZGVmaW5lIElPUDMyMV9UVV9UTVIwCQkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RTApCi0jZGVmaW5lIElPUDMyMV9UVV9UTVIxCQkodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RTQpCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9JUTgwMzIxCi0jZGVmaW5lCUlPUDMyMV9USUNLX1JBVEUJMjAwMDAwMDAwCS8qIDIwMCBNSHogY2xvY2sgKi8KLSNlbGlmIGRlZmluZWQoQ09ORklHX0FSQ0hfSVEzMTI0NCkKLSNkZWZpbmUgSU9QMzIxX1RJQ0tfUkFURQkxOTgwMDAwMDAJLyogMzMuMDAwIE1IeiBjcnlzdGFsICovCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX0VQODAyMTkKLSN1bmRlZiBJT1AzMjFfVElDS19SQVRFCi0jZGVmaW5lIElPUDMyMV9USUNLX1JBVEUgMjAwMDAwMDAwIC8qIDMzLjMzMzMzMyBNaHogY3J5c3RhbCAqLwotI2VuZGlmCi0KLSNkZWZpbmUgSU9QMzIxX1RNUl9UQwkJMHgwMQotI2RlZmluZQlJT1AzMjFfVE1SX0VOCQkweDAyCi0jZGVmaW5lIElPUDMyMV9UTVJfUkVMT0FECTB4MDQKLSNkZWZpbmUJSU9QMzIxX1RNUl9QUklWSUxFR0VECTB4MDkKLQotI2RlZmluZQlJT1AzMjFfVE1SX1JBVElPXzFfMQkweDAwCi0jZGVmaW5lCUlPUDMyMV9UTVJfUkFUSU9fNF8xCTB4MTAKLSNkZWZpbmUJSU9QMzIxX1RNUl9SQVRJT184XzEJMHgyMAotI2RlZmluZQlJT1AzMjFfVE1SX1JBVElPXzE2XzEJMHgzMAotCi0jZGVmaW5lIElPUDMyMV9UVV9UQ1IwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdFOCkKLSNkZWZpbmUgSU9QMzIxX1RVX1RDUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0VDKQotI2RlZmluZSBJT1AzMjFfVFVfVFJSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RjApCi0jZGVmaW5lIElPUDMyMV9UVV9UUlIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDdGNCkKLSNkZWZpbmUgSU9QMzIxX1RVX1RJU1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAwN0Y4KQotI2RlZmluZSBJT1AzMjFfVFVfV0RUQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDA3RkMpCi0KLS8qIEFwcGxpY2F0aW9uIGFjY2VsZXJhdG9yIHVuaXQgMHgwMDAwMDgwMCAtIDB4MDAwMDA4RkYgKi8KLSNkZWZpbmUgSU9QMzIxX0FBVV9BQ1IgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgwMCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9BU1IgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgwNCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9BREFSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgwOCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9BTkRBUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgwQykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgxMCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgxNCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIzICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgxOCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI0ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgxQykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI1ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgyQykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI2ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgzMCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI3ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgzNCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI4ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgzOCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVI5ICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg0MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxMCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg0NCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg0OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxMiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg0QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxMyAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg1MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxNCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg1NCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxNSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg1OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxNiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg1QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxNyAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg2NCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxOCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg2OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIxOSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg2QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyMCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg3MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg3NCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyMiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg3OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyMyAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg3QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyNCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg4MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyNSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg4OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyNiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg4QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyNyAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg5MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyOCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg5NCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIyOSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg5OCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIzMCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg5QykKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIzMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDhBMCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9TQVIzMiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDhBNCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9EQVIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgyMCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9BQkNSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgyNCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9BRENSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgyOCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9FRENSMCAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDgzYykKLSNkZWZpbmUgSU9QMzIxX0FBVV9FRENSMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg2MCkKLSNkZWZpbmUgSU9QMzIxX0FBVV9FRENSMiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMDg4NCkKLQotCi0vKiBTU1Agc2VyaWFsIHBvcnQgdW5pdCAweDAwMDAxNjAwIC0gMHgwMDAwMTY3RiAqLwotLyogSTJDIGJ1cyBpbnRlcmZhY2UgdW5pdCAweDAwMDAxNjgwIC0gMHgwMDAwMTZGRiAqLwotI2RlZmluZSBJT1AzMjFfSUNSMCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2ODApCi0jZGVmaW5lIElPUDMyMV9JU1IwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTY4NCkKLSNkZWZpbmUgSU9QMzIxX0lTQVIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNjg4KQotI2RlZmluZSBJT1AzMjFfSURCUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2OEMpCi0vKiBSZXNlcnZlZCAweDAwMDAxNjkwICovCi0jZGVmaW5lIElPUDMyMV9JQk1SMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTY5NCkKLS8qIFJlc2VydmVkIDB4MDAwMDE2OTggKi8KLS8qIFJlc2VydmVkIDB4MDAwMDE2OUMgKi8KLSNkZWZpbmUgSU9QMzIxX0lDUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNkEwKQotI2RlZmluZSBJT1AzMjFfSVNSMSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2QTQpCi0jZGVmaW5lIElPUDMyMV9JU0FSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMjFfUkVHX0FERFIoMHgwMDAwMTZBOCkKLSNkZWZpbmUgSU9QMzIxX0lEQlIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMyMV9SRUdfQUREUigweDAwMDAxNkFDKQotI2RlZmluZSBJT1AzMjFfSUJNUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzIxX1JFR19BRERSKDB4MDAwMDE2QjQpCi0vKiBSZXNlcnZlZCAweDAwMDAxNkI4IHRocm91Z2ggMHgwMDAwMTZGQyAqLwotCi0vKiBmb3IgSTJDIGJpdCBkZWZzIHNlZSBkcml2ZXJzL2kyYy9pMmMtaW9wM3h4LmggKi8KLQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgaW9wMzIxX21hcF9pbyh2b2lkKTsKLWV4dGVybiB2b2lkIGlvcDMyMV9pbml0X2lycSh2b2lkKTsKLWV4dGVybiB2b2lkIGlvcDMyMV90aW1lX2luaXQodm9pZCk7Ci0jZW5kaWYKLQotI2VuZGlmIC8vIF9JT1AzMjFfSFdfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEtaXJxcy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcxMzVhZDcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lvcDMzMS1pcnFzLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMzIgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKLSAqCi0gKiBBdXRob3I6CURhdmUgSmlhbmcgKGRhdmUuamlhbmdAaW50ZWwuY29tKQotICogQ29weXJpZ2h0OgkoQykgMjAwMyBJbnRlbCBDb3JwLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0jaWZuZGVmIF9JT1AzMzFfSVJRU19IXwotI2RlZmluZSBfSU9QMzMxX0lSUVNfSF8KLQotLyoKLSAqIElPUDgwMzMxIGNoaXBzZXQgaW50ZXJydXB0cwotICovCi0jZGVmaW5lIElPUDMzMV9JUlFfT0ZTCQkwCi0jZGVmaW5lIElPUDMzMV9JUlEoeCkJCShJT1AzMzFfSVJRX09GUyArICh4KSkKLQotLyoKLSAqIE9uIElSUSBvciBGSVEgcmVnaXN0ZXIKLSAqLwotI2RlZmluZSBJUlFfSU9QMzMxX0RNQTBfRU9UCUlPUDMzMV9JUlEoMCkKLSNkZWZpbmUgSVJRX0lPUDMzMV9ETUEwX0VPQwlJT1AzMzFfSVJRKDEpCi0jZGVmaW5lIElSUV9JT1AzMzFfRE1BMV9FT1QJSU9QMzMxX0lSUSgyKQotI2RlZmluZSBJUlFfSU9QMzMxX0RNQTFfRU9DCUlPUDMzMV9JUlEoMykKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzQJSU9QMzMxX0lSUSg0KQotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNQlJT1AzMzFfSVJRKDUpCi0jZGVmaW5lIElSUV9JT1AzMzFfQUFfRU9UCUlPUDMzMV9JUlEoNikKLSNkZWZpbmUgSVJRX0lPUDMzMV9BQV9FT0MJSU9QMzMxX0lSUSg3KQotI2RlZmluZSBJUlFfSU9QMzMxX1RJTUVSMAlJT1AzMzFfSVJRKDgpCi0jZGVmaW5lIElSUV9JT1AzMzFfVElNRVIxCUlPUDMzMV9JUlEoOSkKLSNkZWZpbmUgSVJRX0lPUDMzMV9JMkNfMAlJT1AzMzFfSVJRKDEwKQotI2RlZmluZSBJUlFfSU9QMzMxX0kyQ18xCUlPUDMzMV9JUlEoMTEpCi0jZGVmaW5lIElSUV9JT1AzMzFfTVNHCSAgICBJT1AzMzFfSVJRKDEyKQotI2RlZmluZSBJUlFfSU9QMzMxX01TR0lCUSAgIElPUDMzMV9JUlEoMTMpCi0jZGVmaW5lIElSUV9JT1AzMzFfQVRVX0JJU1QJSU9QMzMxX0lSUSgxNCkKLSNkZWZpbmUgSVJRX0lPUDMzMV9QRVJGTU9OCUlPUDMzMV9JUlEoMTUpCi0jZGVmaW5lIElSUV9JT1AzMzFfQ09SRV9QTVUJSU9QMzMxX0lSUSgxNikKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzE3CUlPUDMzMV9JUlEoMTcpCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8xOAlJT1AzMzFfSVJRKDE4KQotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMTkJSU9QMzMxX0lSUSgxOSkKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzIwCUlPUDMzMV9JUlEoMjApCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8yMQlJT1AzMzFfSVJRKDIxKQotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMjIJSU9QMzMxX0lSUSgyMikKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzIzCUlPUDMzMV9JUlEoMjMpCi0jZGVmaW5lIElSUV9JT1AzMzFfWElOVDAJSU9QMzMxX0lSUSgyNCkKLSNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMQlJT1AzMzFfSVJRKDI1KQotI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQyCUlPUDMzMV9JUlEoMjYpCi0jZGVmaW5lIElSUV9JT1AzMzFfWElOVDMJSU9QMzMxX0lSUSgyNykKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzI4ICBJT1AzMzFfSVJRKDI4KQotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfMjkgIElPUDMzMV9JUlEoMjkpCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF8zMCAgSU9QMzMxX0lSUSgzMCkKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzMxICBJT1AzMzFfSVJRKDMxKQotI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQ4ICAgIElPUDMzMV9JUlEoMzIpICAvLyAwCi0jZGVmaW5lIElSUV9JT1AzMzFfWElOVDkgICAgSU9QMzMxX0lSUSgzMykgIC8vIDEKLSNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMTAgICBJT1AzMzFfSVJRKDM0KSAgLy8gMgotI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQxMSAgIElPUDMzMV9JUlEoMzUpICAvLyAzCi0jZGVmaW5lIElSUV9JT1AzMzFfWElOVDEyICAgSU9QMzMxX0lSUSgzNikgIC8vIDQKLSNkZWZpbmUgSVJRX0lPUDMzMV9YSU5UMTMgICBJT1AzMzFfSVJRKDM3KSAgLy8gNQotI2RlZmluZSBJUlFfSU9QMzMxX1hJTlQxNCAgIElPUDMzMV9JUlEoMzgpICAvLyA2Ci0jZGVmaW5lIElSUV9JT1AzMzFfWElOVDE1ICAgSU9QMzMxX0lSUSgzOSkgIC8vIDcKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzQwICBJT1AzMzFfSVJRKDQwKSAgLy8gOAotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNDEgIElPUDMzMV9JUlEoNDEpICAvLyA5Ci0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80MiAgSU9QMzMxX0lSUSg0MikgIC8vIDEwCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80MyAgSU9QMzMxX0lSUSg0MykgIC8vIDExCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80NCAgSU9QMzMxX0lSUSg0NCkgIC8vIDEyCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80NSAgSU9QMzMxX0lSUSg0NSkgIC8vIDEzCi0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80NiAgSU9QMzMxX0lSUSg0NikgIC8vIDE0Ci0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80NyAgSU9QMzMxX0lSUSg0NykgIC8vIDE1Ci0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80OCAgSU9QMzMxX0lSUSg0OCkgIC8vIDE2Ci0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF80OSAgSU9QMzMxX0lSUSg0OSkgIC8vIDE3Ci0jZGVmaW5lIElSUV9JT1AzMzFfUlNWRF81MCAgSU9QMzMxX0lSUSg1MCkgIC8vIDE4Ci0jZGVmaW5lIElSUV9JT1AzMzFfVUFSVDAgICAgSU9QMzMxX0lSUSg1MSkgIC8vIDE5Ci0jZGVmaW5lIElSUV9JT1AzMzFfVUFSVDEgICAgSU9QMzMxX0lSUSg1MikgIC8vIDIwCi0jZGVmaW5lIElSUV9JT1AzMzFfUEJJRSAgICAgSU9QMzMxX0lSUSg1MykgIC8vIDIxCi0jZGVmaW5lIElSUV9JT1AzMzFfQVRVX0NSVyAgSU9QMzMxX0lSUSg1NCkgIC8vIDIyCi0jZGVmaW5lIElSUV9JT1AzMzFfQVRVX0VSUglJT1AzMzFfSVJRKDU1KSAgLy8gMjMKLSNkZWZpbmUgSVJRX0lPUDMzMV9NQ1VfRVJSCUlPUDMzMV9JUlEoNTYpICAvLyAyNAotI2RlZmluZSBJUlFfSU9QMzMxX0RNQTBfRVJSCUlPUDMzMV9JUlEoNTcpICAvLyAyNQotI2RlZmluZSBJUlFfSU9QMzMxX0RNQTFfRVJSCUlPUDMzMV9JUlEoNTgpICAvLyAyNgotI2RlZmluZSBJUlFfSU9QMzMxX1JTVkRfNTkgIElPUDMzMV9JUlEoNTkpICAvLyAyNwotI2RlZmluZSBJUlFfSU9QMzMxX0FBX0VSUglJT1AzMzFfSVJRKDYwKSAgLy8gMjgKLSNkZWZpbmUgSVJRX0lPUDMzMV9SU1ZEXzYxICBJT1AzMzFfSVJRKDYxKSAgLy8gMjkKLSNkZWZpbmUgSVJRX0lPUDMzMV9NU0dfRVJSCUlPUDMzMV9JUlEoNjIpICAvLyAzMAotI2RlZmluZSBJUlFfSU9QMzMxX0hQSQkJSU9QMzMxX0lSUSg2MykgIC8vIDMxCi0KLSNkZWZpbmUgTlJfSU9QMzMxX0lSUVMJCShJT1AzMzFfSVJRKDYzKSArIDEpCi0KLSNkZWZpbmUgTlJfSVJRUwkJCU5SX0lPUDMzMV9JUlFTCi0KLQotLyoKLSAqIEludGVycnVwdHMgYXZhaWxhYmxlIG9uIHRoZSBJUTgwMzMxIGJvYXJkCi0gKi8KLQotLyoKLSAqIE9uIGJvYXJkIGRldmljZXMKLSAqLwotI2RlZmluZQlJUlFfSVE4MDMzMV9JODI1NDQJSVJRX0lPUDMzMV9YSU5UMAotI2RlZmluZSBJUlFfSVE4MDMzMV9VQVJUMAlJUlFfSU9QMzMxX1VBUlQwCi0jZGVmaW5lIElSUV9JUTgwMzMxX1VBUlQxCUlSUV9JT1AzMzFfVUFSVDEKLQotLyoKLSAqIFBDSSBpbnRlcnJ1cHRzCi0gKi8KLSNkZWZpbmUJSVJRX0lRODAzMzFfSU5UQQlJUlFfSU9QMzMxX1hJTlQwCi0jZGVmaW5lCUlSUV9JUTgwMzMxX0lOVEIJSVJRX0lPUDMzMV9YSU5UMQotI2RlZmluZQlJUlFfSVE4MDMzMV9JTlRDCUlSUV9JT1AzMzFfWElOVDIKLSNkZWZpbmUJSVJRX0lRODAzMzFfSU5URAlJUlFfSU9QMzMxX1hJTlQzCi0KLS8qCi0gKiBJbnRlcnJ1cHRzIGF2YWlsYWJsZSBvbiB0aGUgSVE4MDMzMiBib2FyZAotICovCi0KLS8qCi0gKiBPbiBib2FyZCBkZXZpY2VzCi0gKi8KLSNkZWZpbmUJSVJRX0lRODAzMzJfSTgyNTQ0CUlSUV9JT1AzMzFfWElOVDAKLSNkZWZpbmUgSVJRX0lRODAzMzJfVUFSVDAJSVJRX0lPUDMzMV9VQVJUMAotI2RlZmluZSBJUlFfSVE4MDMzMl9VQVJUMQlJUlFfSU9QMzMxX1VBUlQxCi0KLS8qCi0gKiBQQ0kgaW50ZXJydXB0cwotICovCi0jZGVmaW5lCUlSUV9JUTgwMzMyX0lOVEEJSVJRX0lPUDMzMV9YSU5UMAotI2RlZmluZQlJUlFfSVE4MDMzMl9JTlRCCUlSUV9JT1AzMzFfWElOVDEKLSNkZWZpbmUJSVJRX0lRODAzMzJfSU5UQwlJUlFfSU9QMzMxX1hJTlQyCi0jZGVmaW5lCUlSUV9JUTgwMzMyX0lOVEQJSVJRX0lPUDMzMV9YSU5UMwotCi0jZW5kaWYgLy8gX0lPUDMzMV9JUlFfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pb3AzMzEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmJmMGNjMS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaW9wMzMxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzNjMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lvcDMzMS5oCi0gKgotICogSW50ZWwgSU9QMzMxIENoaXAgZGVmaW5pdGlvbnMKLSAqCi0gKiBBdXRob3I6IERhdmUgSmlhbmcgKGRhdmUuamlhbmdAaW50ZWwuY29tKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0IEludGVsIENvcnAuCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCi0gKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KLSAqLwotCi0jaWZuZGVmIF9JT1AzMzFfSFdfSF8KLSNkZWZpbmUgX0lPUDMzMV9IV19IXwotCi0KLS8qCi0gKiBUaGlzIGlzIG5lZWRlZCBmb3IgbWl4ZWQgZHJpdmVycyB0aGF0IG5lZWQgdG8gd29yayBvbiBhbGwKLSAqIElPUDN4eCB2YXJpYW50cyBidXQgYmVoYXZlIHNsaWdodGx5IGRpZmZlcmVudGx5IG9uIGVhY2guCi0gKi8KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaWZkZWYJQ09ORklHX0FSQ0hfSU9QMzMxCi0vKiNkZWZpbmUJaW9wX2lzXzMzMSgpCSgocHJvY2Vzc29yX2lkICYgMHhmZmZmZmZiMCkgPT0gMHg2OTA1NDA5MCkgKi8KLSNkZWZpbmUJaW9wX2lzXzMzMSgpCSgocHJvY2Vzc29yX2lkICYgMHhmZmZmZmYzMCkgPT0gMHg2OTA1NDAxMCkKLSNlbHNlCi0jZGVmaW5lCWlvcF9pc18zMzEoKQkwCi0jZW5kaWYKLSNlbmRpZgotCi0vKgotICogSU9QMzMxIEkvTyBhbmQgTWVtIHNwYWNlIHJlZ2lvbnMgZm9yIFBDSSBhdXRvY29uZmlndXJhdGlvbgotICovCi0jZGVmaW5lIElPUDMzMV9QQ0lfSU9fV0lORE9XX1NJWkUgICAweDAwMDEwMDAwCi0jZGVmaW5lIElPUDMzMV9QQ0lfTE9XRVJfSU9fUEEgICAgICAweDkwMDAwMDAwCi0jZGVmaW5lIElPUDMzMV9QQ0lfTE9XRVJfSU9fVkEgICAgICAweGZlMDAwMDAwCi0jZGVmaW5lIElPUDMzMV9QQ0lfTE9XRVJfSU9fQkEgICAgICAoKklPUDMzMV9PSU9XVFZSKQotI2RlZmluZSBJT1AzMzFfUENJX1VQUEVSX0lPX1BBICAgICAgKElPUDMzMV9QQ0lfTE9XRVJfSU9fUEEgKyBJT1AzMzFfUENJX0lPX1dJTkRPV19TSVpFIC0gMSkKLSNkZWZpbmUgSU9QMzMxX1BDSV9VUFBFUl9JT19WQSAgICAgIChJT1AzMzFfUENJX0xPV0VSX0lPX1ZBICsgSU9QMzMxX1BDSV9JT19XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMzMV9QQ0lfVVBQRVJfSU9fQkEgICAgICAoSU9QMzMxX1BDSV9MT1dFUl9JT19CQSArIElPUDMzMV9QQ0lfSU9fV0lORE9XX1NJWkUgLSAxKQotI2RlZmluZSBJT1AzMzFfUENJX0lPX09GRlNFVCAgICAgICAgKElPUDMzMV9QQ0lfTE9XRVJfSU9fVkEgLSBJT1AzMzFfUENJX0xPV0VSX0lPX0JBKQotCi0vKiB0aGlzIGNhbiBiZSAxMjhNIGlmIE9NV1RWUjEgaXMgc2V0ICovCi0jZGVmaW5lIElPUDMzMV9QQ0lfTUVNX1dJTkRPV19TSVpFCTB4MDQwMDAwMDAgLyogNjRNIG91dGJvdW5kIHdpbmRvdyAqLwotLyogI2RlZmluZSBJT1AzMzFfUENJX01FTV9XSU5ET1dfU0laRSAgKH4qSU9QMzMxX0lBTFIxICsgMSkgKi8KLSNkZWZpbmUgSU9QMzMxX1BDSV9MT1dFUl9NRU1fUEEgICAgIDB4ODAwMDAwMDAKLSNkZWZpbmUgSU9QMzMxX1BDSV9MT1dFUl9NRU1fQkEgICAgICgqSU9QMzMxX09NV1RWUjApCi0jZGVmaW5lIElPUDMzMV9QQ0lfVVBQRVJfTUVNX1BBICAgICAoSU9QMzMxX1BDSV9MT1dFUl9NRU1fUEEgKyBJT1AzMzFfUENJX01FTV9XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMzMV9QQ0lfVVBQRVJfTUVNX0JBICAgICAoSU9QMzMxX1BDSV9MT1dFUl9NRU1fQkEgKyBJT1AzMzFfUENJX01FTV9XSU5ET1dfU0laRSAtIDEpCi0jZGVmaW5lIElPUDMzMV9QQ0lfTUVNX09GRlNFVCAgICAgICAoSU9QMzMxX1BDSV9MT1dFUl9NRU1fUEEgLSBJT1AzMzFfUENJX0xPV0VSX01FTV9CQSkKLQotLyoKLSAqIElPUDMzMSBjaGlwc2V0IHJlZ2lzdGVycwotICovCi0jZGVmaW5lIElPUDMzMV9WSVJUX01FTV9CQVNFICAweGZlZmZlMDAwICAvKiBjaGlwIHZpcnR1YWwgbWVtIGFkZHJlc3MqLwotI2RlZmluZSBJT1AzMzFfUEhZU19NRU1fQkFTRSAgMHhmZmZmZTAwMCAgLyogY2hpcCBwaHlzaWNhbCBtZW1vcnkgYWRkcmVzcyAqLwotI2RlZmluZSBJT1AzMzFfUkVHX0FERFIocmVnKSAoSU9QMzMxX1ZJUlRfTUVNX0JBU0UgfCAocmVnKSkKLQotLyogUmVzZXJ2ZWQgMHgwMDAwMDAwMCB0aHJvdWdoIDB4MDAwMDAwRkYgKi8KLQotLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBVbml0IDB4MDAwMDAxMDAgdGhyb3VnaCAweDAwMDAwMUZGICovCi0jZGVmaW5lIElPUDMzMV9BVFVWSUQgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwMCkKLSNkZWZpbmUgSU9QMzMxX0FUVURJRCAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTAyKQotI2RlZmluZSBJT1AzMzFfQVRVQ01EICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMDQpCi0jZGVmaW5lIElPUDMzMV9BVFVTUiAgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwNikKLSNkZWZpbmUgSU9QMzMxX0FUVVJJRCAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTA4KQotI2RlZmluZSBJT1AzMzFfQVRVQ0NSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMDkpCi0jZGVmaW5lIElPUDMzMV9BVFVDTFNSICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwQykKLSNkZWZpbmUgSU9QMzMxX0FUVUxUICAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTBEKQotI2RlZmluZSBJT1AzMzFfQVRVSFRSICAgICAodm9sYXRpbGUgdTggICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMEUpCi0jZGVmaW5lIElPUDMzMV9BVFVCSVNUICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEwRikKLSNkZWZpbmUgSU9QMzMxX0lBQkFSMCAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTEwKQotI2RlZmluZSBJT1AzMzFfSUFVQkFSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMTQpCi0jZGVmaW5lIElPUDMzMV9JQUJBUjEgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDExOCkKLSNkZWZpbmUgSU9QMzMxX0lBVUJBUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTFDKQotI2RlZmluZSBJT1AzMzFfSUFCQVIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMjApCi0jZGVmaW5lIElPUDMzMV9JQVVCQVIyICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEyNCkKLSNkZWZpbmUgSU9QMzMxX0FTVklSICAgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTJDKQotI2RlZmluZSBJT1AzMzFfQVNJUiAgICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxMkUpCi0jZGVmaW5lIElPUDMzMV9FUkJBUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEzMCkKLSNkZWZpbmUgSU9QMzMxX0FUVV9DQVBQVFIgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTM0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDEzOCB0aHJvdWdoIDB4MDAwMDAxM0IgKi8KLSNkZWZpbmUgSU9QMzMxX0FUVUlMUiAgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTNDKQotI2RlZmluZSBJT1AzMzFfQVRVSVBSICAgICAodm9sYXRpbGUgdTggICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxM0QpCi0jZGVmaW5lIElPUDMzMV9BVFVNR05UICAgICh2b2xhdGlsZSB1OCAgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDEzRSkKLSNkZWZpbmUgSU9QMzMxX0FUVU1MQVQgICAgKHZvbGF0aWxlIHU4ICAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTNGKQotI2RlZmluZSBJT1AzMzFfSUFMUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNDApCi0jZGVmaW5lIElPUDMzMV9JQVRWUjAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE0NCkKLSNkZWZpbmUgSU9QMzMxX0VSTFIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTQ4KQotI2RlZmluZSBJT1AzMzFfRVJUVlIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNEMpCi0jZGVmaW5lIElPUDMzMV9JQUxSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE1MCkKLSNkZWZpbmUgSU9QMzMxX0lBTFIyICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTU0KQotI2RlZmluZSBJT1AzMzFfSUFUVlIyICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNTgpCi0jZGVmaW5lIElPUDMzMV9PSU9XVFZSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE1QykKLSNkZWZpbmUgSU9QMzMxX09NV1RWUjAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTYwKQotI2RlZmluZSBJT1AzMzFfT1VNV1RWUjAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNjQpCi0jZGVmaW5lIElPUDMzMV9PTVdUVlIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE2OCkKLSNkZWZpbmUgSU9QMzMxX09VTVdUVlIxICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTZDKQotLyogUmVzZXJ2ZWQgMHgwMDAwMDE3MCB0aHJvdWdoIDB4MDAwMDAxNzcqLwotI2RlZmluZSBJT1AzMzFfT1VEV1RWUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxNzgpCi0vKiBSZXNlcnZlZCAweDAwMDAwMTdDIHRocm91Z2ggMHgwMDAwMDE3RiovCi0jZGVmaW5lIElPUDMzMV9BVFVDUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE4MCkKLSNkZWZpbmUgSU9QMzMxX1BDU1IgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTg0KQotI2RlZmluZSBJT1AzMzFfQVRVSVNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxODgpCi0jZGVmaW5lIElPUDMzMV9BVFVJTVIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE4QykKLSNkZWZpbmUgSU9QMzMxX0lBQkFSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTkwKQotI2RlZmluZSBJT1AzMzFfSUFVQkFSMyAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxOTQpCi0jZGVmaW5lIElPUDMzMV9JQUxSMyAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDE5OCkKLSNkZWZpbmUgSU9QMzMxX0lBVFZSMyAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMTlDKQotLyogUmVzZXJ2ZWQgMHgwMDAwMDFBMCB0aHJvdWdoIDB4MDAwMDAxQTMqLwotI2RlZmluZSBJT1AzMzFfT0NDQVIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQTQpCi0vKiBSZXNlcnZlZCAweDAwMDAwMUE4IHRocm91Z2ggMHgwMDAwMDFBQiovCi0jZGVmaW5lIElPUDMzMV9PQ0NEUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFBQykKLS8qIFJlc2VydmVkIDB4MDAwMDAxQjAgdGhyb3VnaCAweDAwMDAwMUJCKi8KLSNkZWZpbmUgSU9QMzMxX1ZQRENBUElEICAgKHZvbGF0aWxlIHU4ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQjgpCi0jZGVmaW5lIElPUDMzMV9WUEROWFRQICAgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUI5KQotI2RlZmluZSBJT1AzMzFfVlBEQVIJICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQkEpCi0jZGVmaW5lIElPUDMzMV9WUEREUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFCQykKLSNkZWZpbmUgSU9QMzMxX1BNQ0FQSUQgICAgKHZvbGF0aWxlIHU4ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQzApCi0jZGVmaW5lIElPUDMzMV9QTU5FWFQgICAgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUMxKQotI2RlZmluZSBJT1AzMzFfQVBNQ1IgICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxQzIpCi0jZGVmaW5lIElPUDMzMV9BUE1DU1IgICAgICh2b2xhdGlsZSB1MTYgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFDNCkKLS8qIFJlc2VydmVkIDB4MDAwMDAxQzYgdGhyb3VnaCAweDAwMDAwMUNGICovCi0jZGVmaW5lIElPUDMzMV9NU0lDQVBJRCAgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUQwKQotI2RlZmluZSBJT1AzMzFfTVNJTlhUUAkgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUQxKQotI2RlZmluZSBJT1AzMzFfTVNJTUNSICAgICAodm9sYXRpbGUgdTE2ICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRDIpCi0jZGVmaW5lIElPUDMzMV9NU0lNQVIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFENCkKLSNkZWZpbmUgSU9QMzMxX01TSU1VQVIJICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRDgpCi0jZGVmaW5lIElPUDMzMV9NU0lNRFIJICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxREMpCi0jZGVmaW5lIElPUDMzMV9QQ0lYQ0FQSUQgICh2b2xhdGlsZSB1OCAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUUwKQotI2RlZmluZSBJT1AzMzFfUENJWE5FWFQgICAodm9sYXRpbGUgdTggKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFFMSkKLSNkZWZpbmUgSU9QMzMxX1BDSVhDTUQgICAgKHZvbGF0aWxlIHUxNiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMUUyKQotI2RlZmluZSBJT1AzMzFfUENJWFNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAxRTQpCi0jZGVmaW5lIElPUDMzMV9QQ0lJUlNSICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDFFQykKLQotLyogTWVzc2FnaW5nIFVuaXQgMHgwMDAwMDMwMCB0aHJvdWdoIDB4MDAwMDAzRkYgKi8KLQotLyogUmVzZXJ2ZWQgMHgwMDAwMDMwMCB0aHJvdWdoIDB4MDAwMDAzMGMgKi8KLSNkZWZpbmUgSU9QMzMxX0lNUjAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzEwKQotI2RlZmluZSBJT1AzMzFfSU1SMSAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMTQpCi0jZGVmaW5lIElPUDMzMV9PTVIwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMxOCkKLSNkZWZpbmUgSU9QMzMxX09NUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzFDKQotI2RlZmluZSBJT1AzMzFfSURSICAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMjApCi0jZGVmaW5lIElPUDMzMV9JSVNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMyNCkKLSNkZWZpbmUgSU9QMzMxX0lJTVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzI4KQotI2RlZmluZSBJT1AzMzFfT0RSICAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzMkMpCi0jZGVmaW5lIElPUDMzMV9PSVNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDMzMCkKLSNkZWZpbmUgSU9QMzMxX09JTVIgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzM0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMDMzOCB0aHJvdWdoIDB4MDAwMDAzNEYgKi8KLSNkZWZpbmUgSU9QMzMxX01VQ1IgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzUwKQotI2RlZmluZSBJT1AzMzFfUUJBUiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNTQpCi0vKiBSZXNlcnZlZCAweDAwMDAwMzU4IHRocm91Z2ggMHgwMDAwMDM1QyAqLwotI2RlZmluZSBJT1AzMzFfSUZIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNjApCi0jZGVmaW5lIElPUDMzMV9JRlRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM2NCkKLSNkZWZpbmUgSU9QMzMxX0lQSFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzY4KQotI2RlZmluZSBJT1AzMzFfSVBUUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNkMpCi0jZGVmaW5lIElPUDMzMV9PRkhQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM3MCkKLSNkZWZpbmUgSU9QMzMxX09GVFBSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzc0KQotI2RlZmluZSBJT1AzMzFfT1BIUFIgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDAzNzgpCi0jZGVmaW5lIElPUDMzMV9PUFRQUiAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDM3QykKLSNkZWZpbmUgSU9QMzMxX0lBUiAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwMzgwKQotLyogUmVzZXJ2ZWQgMHgwMDAwMDM4NCB0aHJvdWdoIDB4MDAwMDAzRkYgKi8KLQotLyogRE1BIENvbnRyb2xsZXIgMHgwMDAwMDQwMCB0aHJvdWdoIDB4MDAwMDA0RkYgKi8KLSNkZWZpbmUgSU9QMzMxX0RNQTBfQ0NSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDAwKQotI2RlZmluZSBJT1AzMzFfRE1BMF9DU1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MDQpCi0jZGVmaW5lIElPUDMzMV9ETUEwX0RBUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQwQykKLSNkZWZpbmUgSU9QMzMxX0RNQTBfTkRBUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDEwKQotI2RlZmluZSBJT1AzMzFfRE1BMF9QQURSICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MTQpCi0jZGVmaW5lIElPUDMzMV9ETUEwX1BVQURSICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQxOCkKLSNkZWZpbmUgSU9QMzMxX0RNQTBfTEFEUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigwWDAwMDAwNDFDKQotI2RlZmluZSBJT1AzMzFfRE1BMF9CQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0MjApCi0jZGVmaW5lIElPUDMzMV9ETUEwX0RDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQyNCkKLS8qIFJlc2VydmVkIDB4MDAwMDA0MjggdGhyb3VnaCAweDAwMDAwNDNDICovCi0jZGVmaW5lIElPUDMzMV9ETUExX0NDUiAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ0MCkKLSNkZWZpbmUgSU9QMzMxX0RNQTFfQ1NSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDQ0KQotI2RlZmluZSBJT1AzMzFfRE1BMV9EQVIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NEMpCi0jZGVmaW5lIElPUDMzMV9ETUExX05EQVIgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ1MCkKLSNkZWZpbmUgSU9QMzMxX0RNQTFfUEFEUiAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDU0KQotI2RlZmluZSBJT1AzMzFfRE1BMV9QVUFEUiAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NTgpCi0jZGVmaW5lIElPUDMzMV9ETUExX0xBRFIgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDQ1QykKLSNkZWZpbmUgSU9QMzMxX0RNQTFfQkNSICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNDYwKQotI2RlZmluZSBJT1AzMzFfRE1BMV9EQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA0NjQpCi0vKiBSZXNlcnZlZCAweDAwMDAwNDY4IHRocm91Z2ggMHgwMDAwMDRGRiAqLwotCi0vKiBNZW1vcnkgY29udHJvbGxlciAweDAwMDAwNTAwIHRocm91Z2ggMHgwMDA1RkYgKi8KLQotLyogUGVyaXBoZXJhbCBidXMgaW50ZXJmYWNlIHVuaXQgMHgwMDAwMDY4MCB0aHJvdWdoIDB4MDAwNkZGICovCi0jZGVmaW5lIElPUDMzMV9QQkNSICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY4MCkKLSNkZWZpbmUgSU9QMzMxX1BCSVNSICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNjg0KQotI2RlZmluZSBJT1AzMzFfUEJCQVIwICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2ODgpCi0jZGVmaW5lIElPUDMzMV9QQkxSMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY4QykKLSNkZWZpbmUgSU9QMzMxX1BCQkFSMSAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNjkwKQotI2RlZmluZSBJT1AzMzFfUEJMUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2OTQpCi0jZGVmaW5lIElPUDMzMV9QQkJBUjIgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDY5OCkKLSNkZWZpbmUgSU9QMzMxX1BCTFIyICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNjlDKQotI2RlZmluZSBJT1AzMzFfUEJCQVIzICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QTApCi0jZGVmaW5lIElPUDMzMV9QQkxSMyAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZBNCkKLSNkZWZpbmUgSU9QMzMxX1BCQkFSNCAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkE4KQotI2RlZmluZSBJT1AzMzFfUEJMUjQgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QUMpCi0jZGVmaW5lIElPUDMzMV9QQkJBUjUgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZCMCkKLSNkZWZpbmUgSU9QMzMxX1BCTFI1ICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkI0KQotI2RlZmluZSBJT1AzMzFfUEJEU0NSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA2QjgpCi0vKiBSZXNlcnZlZCAweDAwMDAwNkJDICovCi0jZGVmaW5lIElPUDMzMV9QTUJSMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZDMCkKLS8qIFJlc2VydmVkIDB4MDAwMDA2QzQgdGhyb3VnaCAweDAwMDAwNkRDICovCi0jZGVmaW5lIElPUDMzMV9QTUJSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDZFMCkKLSNkZWZpbmUgSU9QMzMxX1BNQlIyICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNkU0KQotCi0jZGVmaW5lIElPUDMzMV9QQkNSX0VOICAgIDB4MQotCi0jZGVmaW5lIElPUDMzMV9QQklTUl9CT09SX0VSUiAweDEKLQotCi0KLS8qIFBlcmlwaGVyYWwgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1bml0IDB4MDAwMDA3MDAgdGhyb3VnaCAweDAwMDc3RiAqLwotLyogSW50ZXJuYWwgYXJiaXRyYXRpb24gdW5pdCAweDAwMDAwNzgwIHRocm91Z2ggMHgwMDA3QkYgKi8KLQotLyogSW50ZXJydXB0IENvbnRyb2xsZXIgKi8KLSNkZWZpbmUgSU9QMzMxX0lOVENUTDAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNzkwKQotI2RlZmluZSBJT1AzMzFfSU5UQ1RMMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3OTQpCi0jZGVmaW5lIElPUDMzMV9JTlRTVFIwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDc5OCkKLSNkZWZpbmUgSU9QMzMxX0lOVFNUUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwNzlDKQotI2RlZmluZSBJT1AzMzFfSUlOVFNSQzAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QTApCi0jZGVmaW5lIElPUDMzMV9JSU5UU1JDMSAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdBNCkKLSNkZWZpbmUgSU9QMzMxX0ZJTlRTUkMwICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0E4KQotI2RlZmluZSBJT1AzMzFfRklOVFNSQzEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QUMpCi0jZGVmaW5lIElPUDMzMV9JUFIwICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdCMCkKLSNkZWZpbmUgSU9QMzMxX0lQUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0I0KQotI2RlZmluZSBJT1AzMzFfSVBSMiAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QjgpCi0jZGVmaW5lIElPUDMzMV9JUFIzICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdCQykKLSNkZWZpbmUgSU9QMzMxX0lOVEJBU0UgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0MwKQotI2RlZmluZSBJT1AzMzFfSU5UU0laRSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3QzQpCi0jZGVmaW5lIElPUDMzMV9JSU5UVkVDICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdDOCkKLSNkZWZpbmUgSU9QMzMxX0ZJTlRWRUMgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0NDKQotCi0KLS8qIFRpbWVycyAqLwotCi0jZGVmaW5lIElPUDMzMV9UVV9UTVIwCQkodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RDApCi0jZGVmaW5lIElPUDMzMV9UVV9UTVIxCQkodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RDQpCi0KLSNkZWZpbmUgSU9QMzMxX1RNUl9UQwkJMHgwMQotI2RlZmluZQlJT1AzMzFfVE1SX0VOCQkweDAyCi0jZGVmaW5lIElPUDMzMV9UTVJfUkVMT0FECTB4MDQKLSNkZWZpbmUJSU9QMzMxX1RNUl9QUklWSUxFR0VECTB4MDkKLQotI2RlZmluZQlJT1AzMzFfVE1SX1JBVElPXzFfMQkweDAwCi0jZGVmaW5lCUlPUDMzMV9UTVJfUkFUSU9fNF8xCTB4MTAKLSNkZWZpbmUJSU9QMzMxX1RNUl9SQVRJT184XzEJMHgyMAotI2RlZmluZQlJT1AzMzFfVE1SX1JBVElPXzE2XzEJMHgzMAotCi0jZGVmaW5lIElPUDMzMV9UVV9UQ1IwICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdEOCkKLSNkZWZpbmUgSU9QMzMxX1RVX1RDUjEgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0RDKQotI2RlZmluZSBJT1AzMzFfVFVfVFJSMCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RTApCi0jZGVmaW5lIElPUDMzMV9UVV9UUlIxICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMDdFNCkKLSNkZWZpbmUgSU9QMzMxX1RVX1RJU1IgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAwN0U4KQotI2RlZmluZSBJT1AzMzFfVFVfV0RUQ1IgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA3RUMpCi0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKLSNkZWZpbmUJSU9QMzMxX1RJQ0tfUkFURQkyNjYwMDAwMDAJLyogMjY2IE1IeiBJQiBjbG9jayAqLwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKENPTkZJR19JT1AzMzFfU1RFUEQpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfSVE4MDMzMykKLSN1bmRlZiBJT1AzMzFfVElDS19SQVRFCi0jZGVmaW5lIElPUDMzMV9USUNLX1JBVEUJMzMzMDAwMDAwCS8qIDMzMyBNaHogSUIgY2xvY2sgKi8KLSNlbmRpZgotCi0vKiBBcHBsaWNhdGlvbiBhY2NlbGVyYXRvciB1bml0IDB4MDAwMDA4MDAgLSAweDAwMDAwOEZGICovCi0jZGVmaW5lIElPUDMzMV9BQVVfQUNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MDApCi0jZGVmaW5lIElPUDMzMV9BQVVfQVNSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MDQpCi0jZGVmaW5lIElPUDMzMV9BQVVfQURBUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MDgpCi0jZGVmaW5lIElPUDMzMV9BQVVfQU5EQVIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MEMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MTApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MTQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMyAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MTgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSNCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MUMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSNSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MkMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSNiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MzApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSNyAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MzQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSOCAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MzgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSOSAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NDApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NDQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NDgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NEMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTMgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NTApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTQgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NTQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTUgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NTgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTYgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NUMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTcgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NjQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTggICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NjgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMTkgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NkMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NzApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NzQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NzgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjMgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4N0MpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjQgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4ODApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjUgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4ODgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjYgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4OEMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjcgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4OTApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjggICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4OTQpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMjkgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4OTgpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMzAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4OUMpCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMzEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4QTApCi0jZGVmaW5lIElPUDMzMV9BQVVfU0FSMzIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4QTQpCi0jZGVmaW5lIElPUDMzMV9BQVVfREFSICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MjApCi0jZGVmaW5lIElPUDMzMV9BQVVfQUJDUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MjQpCi0jZGVmaW5lIElPUDMzMV9BQVVfQURDUiAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4MjgpCi0jZGVmaW5lIElPUDMzMV9BQVVfRURDUjAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4M2MpCi0jZGVmaW5lIElPUDMzMV9BQVVfRURDUjEgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4NjApCi0jZGVmaW5lIElPUDMzMV9BQVVfRURDUjIgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDA4ODQpCi0KLQotI2RlZmluZSBJT1AzMzFfU1BEU0NSCSAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNUMwKQotI2RlZmluZSBJT1AzMzFfUFBEU0NSCSAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNUM4KQotLyogU1NQIHNlcmlhbCBwb3J0IHVuaXQgMHgwMDAwMTYwMCAtIDB4MDAwMDE2N0YgKi8KLQotLyogSTJDIGJ1cyBpbnRlcmZhY2UgdW5pdCAweDAwMDAxNjgwIC0gMHgwMDAwMTZGRiAqLwotLyogZm9yIEkyQyBiaXQgZGVmcyBzZWUgZHJpdmVycy9pMmMvaTJjLWlvcDN4eC5oICovCi0KLSNkZWZpbmUgSU9QMzMxX0lDUjAgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNjgwKQotI2RlZmluZSBJT1AzMzFfSVNSMCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2ODQpCi0jZGVmaW5lIElPUDMzMV9JU0FSMCAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTY4OCkKLSNkZWZpbmUgSU9QMzMxX0lEQlIwICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNjhDKQotLyogUmVzZXJ2ZWQgMHgwMDAwMTY5MCAqLwotI2RlZmluZSBJT1AzMzFfSUJNUjAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2OTQpCi0vKiBSZXNlcnZlZCAweDAwMDAxNjk4ICovCi0vKiBSZXNlcnZlZCAweDAwMDAxNjlDICovCi0jZGVmaW5lIElPUDMzMV9JQ1IxICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTZBMCkKLSNkZWZpbmUgSU9QMzMxX0lTUjEgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNkE0KQotI2RlZmluZSBJT1AzMzFfSVNBUjEgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE2QTgpCi0jZGVmaW5lIElPUDMzMV9JREJSMSAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTZBQykKLSNkZWZpbmUgSU9QMzMxX0lCTVIxICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNkI0KQotLyogUmVzZXJ2ZWQgMHgwMDAwMTZCOCB0aHJvdWdoIDB4MDAwMDE2RkYgKi8KLQotLyogMHgwMDAwMTcwMCB0aHJvdWdoIDB4MDAwMDE3MkMgIFVBUlQgMCAqLwotCi0vKiBSZXNlcnZlZCAweDAwMDAxNzMwIHRocm91Z2ggMHgwMDAwMTczRiAqLwotCi0vKiAweDAwMDAxNzQwIHRocm91Z2ggMHgwMDAwMTc2QyBVQVJUIDEgKi8KLQotI2RlZmluZSBJT1AzMzFfVUFSVDBfUEhZUyAgKElPUDMzMV9QSFlTX01FTV9CQVNFIHwgMHgwMDAwMTcwMCkJLyogVUFSVCAjMSBwaHlzaWNhbCAqLwotI2RlZmluZSBJT1AzMzFfVUFSVDFfUEhZUyAgKElPUDMzMV9QSFlTX01FTV9CQVNFIHwgMHgwMDAwMTc0MCkJLyogVUFSVCAjMiBwaHlzaWNhbCAqLwotI2RlZmluZSBJT1AzMzFfVUFSVDBfVklSVCAgKElPUDMzMV9WSVJUX01FTV9CQVNFIHwgMHgwMDAwMTcwMCkgLyogVUFSVCAjMSB2aXJ0dWFsIGFkZHIgKi8KLSNkZWZpbmUgSU9QMzMxX1VBUlQxX1ZJUlQgIChJT1AzMzFfVklSVF9NRU1fQkFTRSB8IDB4MDAwMDE3NDApIC8qIFVBUlQgIzIgdmlydHVhbCBhZGRyICovCi0KLS8qIFJlc2VydmVkIDB4MDAwMDE3NzAgdGhyb3VnaCAweDAwMDAxNzdGICovCi0KLS8qIEdlbmVyYWwgUHVycG9zZSBJL08gUmVnaXN0ZXJzICovCi0jZGVmaW5lIElPUDMzMV9HUE9FICAgICAgICh2b2xhdGlsZSB1MzIgKilJT1AzMzFfUkVHX0FERFIoMHgwMDAwMTc4MCkKLSNkZWZpbmUgSU9QMzMxX0dQSUQgICAgICAgKHZvbGF0aWxlIHUzMiAqKUlPUDMzMV9SRUdfQUREUigweDAwMDAxNzg0KQotI2RlZmluZSBJT1AzMzFfR1BPRCAgICAgICAodm9sYXRpbGUgdTMyICopSU9QMzMxX1JFR19BRERSKDB4MDAwMDE3ODgpCi0KLS8qIFJlc2VydmVkIDB4MDAwMDE3OGMgdGhyb3VnaCAweDAwMDAxOWZmICovCi0KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIGlvcDMzMV9tYXBfaW8odm9pZCk7Ci1leHRlcm4gdm9pZCBpb3AzMzFfaW5pdF9pcnEodm9pZCk7Ci1leHRlcm4gdm9pZCBpb3AzMzFfdGltZV9pbml0KHZvaWQpOwotI2VuZGlmCi0KLSNlbmRpZiAvLyBfSU9QMzMxX0hXX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXEzMTI0NC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxMzEyNDQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDE3N2NmYS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXEzMTI0NC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxMzEyNDQuaAotICoKLSAqIEludGVsIElRMzEyNDQgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKLSAqLwotCi0jaWZuZGVmIF9JUTMxMjQ0X0hfCi0jZGVmaW5lIF9JUTMxMjQ0X0hfCi0KLSNkZWZpbmUJSVEzMTI0NF9GTEFTSEJBU0UJMHhmMDAwMDAwMAkvKiBGbGFzaCAqLwotI2RlZmluZQlJUTMxMjQ0X0ZMQVNIU0laRQkweDAwODAwMDAwCi0jZGVmaW5lCUlRMzEyNDRfRkxBU0hXSURUSAkyCi0KLSNkZWZpbmUgSVEzMTI0NF9VQVJUCQkweGZlODAwMDAwCS8qIFVBUlQgIzEgKi8KLSNkZWZpbmUgSVEzMTI0NF83U0VHXzEJCTB4ZmU4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLwotI2RlZmluZSBJUTMxMjQ0XzdTRUdfMAkJMHhmZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KLSNkZWZpbmUgSVEzMTI0NF9ST1RBUllfU1cJMHhmZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCi0jZGVmaW5lIElRMzEyNDRfQkFUVF9TVEFUCTB4ZmU4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIGlxMzEyNDRfbWFwX2lvKHZvaWQpOwotI2VuZGlmCi0KLSNlbmRpZgkvLyBfSVEzMTI0NF9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMjEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzIxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiODcyNTkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMjEuaAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS9hcmNoLWlvcDN4eC9pcTgwMzIxLmgKLSAqCi0gKiBJbnRlbCBJUTgwMzIxIGV2YWx1YXRpb24gYm9hcmQgcmVnaXN0ZXJzCi0gKi8KLQotI2lmbmRlZiBfSVE4MDMyMV9IXwotI2RlZmluZSBfSVE4MDMyMV9IXwotCi0jZGVmaW5lCUlRODAzMjFfRkxBU0hCQVNFCTB4ZjAwMDAwMDAJLyogRmxhc2ggKi8KLSNkZWZpbmUJSVE4MDMyMV9GTEFTSFNJWkUJMHgwMDgwMDAwMAotI2RlZmluZQlJUTgwMzIxX0ZMQVNIV0lEVEgJMQotCi0jZGVmaW5lIElRODAzMjFfVUFSVAkJMHhmZTgwMDAwMAkvKiBVQVJUICMxICovCi0jZGVmaW5lIElRODAzMjFfN1NFR18xCQkweGZlODQwMDAwCS8qIDctU2VnbWVudCBNU0IgKi8KLSNkZWZpbmUgSVE4MDMyMV83U0VHXzAJCTB4ZmU4NTAwMDAJLyogNy1TZWdtZW50IExTQiAoV08pICovCi0jZGVmaW5lIElRODAzMjFfUk9UQVJZX1NXCTB4ZmU4ZDAwMDAJLyogUm90YXJ5IFN3aXRjaCAqLwotI2RlZmluZSBJUTgwMzIxX0JBVFRfU1RBVAkweGZlOGYwMDAwCS8qIEJhdHRlcnkgU3RhdHVzICovCi0KLSNpZm5kZWYgX19BU1NFTUJMWV9fCi1leHRlcm4gdm9pZCBpcTgwMzIxX21hcF9pbyh2b2lkKTsKLSNlbmRpZgotCi0jZW5kaWYJLy8gX0lRODAzMjFfSF8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMxLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXE4MDMzMS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNjY4ZTc4Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcTgwMzMxLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyMyArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20vYXJjaC1pb3AzeHgvaXE4MDMzMS5oCi0gKgotICogSW50ZWwgSVE4MDMzMSBldmFsdWF0aW9uIGJvYXJkIHJlZ2lzdGVycwotICovCi0KLSNpZm5kZWYgX0lRODAzMzFfSF8KLSNkZWZpbmUgX0lRODAzMzFfSF8KLQotI2RlZmluZQlJUTgwMzMxX0ZMQVNIQkFTRQkweGMwMDAwMDAwCS8qIEZsYXNoICovCi0jZGVmaW5lCUlRODAzMzFfRkxBU0hTSVpFCTB4MDA4MDAwMDAKLSNkZWZpbmUJSVE4MDMzMV9GTEFTSFdJRFRICTEKLQotI2RlZmluZSBJUTgwMzMxXzdTRUdfMQkJMHhjZTg0MDAwMAkvKiA3LVNlZ21lbnQgTVNCICovCi0jZGVmaW5lIElRODAzMzFfN1NFR18wCQkweGNlODUwMDAwCS8qIDctU2VnbWVudCBMU0IgKFdPKSAqLwotI2RlZmluZSBJUTgwMzMxX1JPVEFSWV9TVwkweGNlOGQwMDAwCS8qIFJvdGFyeSBTd2l0Y2ggKi8KLSNkZWZpbmUgSVE4MDMzMV9CQVRUX1NUQVQJMHhjZThmMDAwMAkvKiBCYXR0ZXJ5IFN0YXR1cyAqLwotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotZXh0ZXJuIHZvaWQgaXE4MDMzMV9tYXBfaW8odm9pZCk7Ci0jZW5kaWYKLQotI2VuZGlmCS8vIF9JUTgwMzMxX0hfCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXE4MDMzMi5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lxODAzMzIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTVmZmYxNy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXE4MDMzMi5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtL2FyY2gtaW9wM3h4L2lxODAzMzIuaAotICoKLSAqIEludGVsIElRODAzMzIgZXZhbHVhdGlvbiBib2FyZCByZWdpc3RlcnMKLSAqLwotCi0jaWZuZGVmIF9JUTgwMzMyX0hfCi0jZGVmaW5lIF9JUTgwMzMyX0hfCi0KLSNkZWZpbmUJSVE4MDMzMl9GTEFTSEJBU0UJMHhjMDAwMDAwMAkvKiBGbGFzaCAqLwotI2RlZmluZQlJUTgwMzMyX0ZMQVNIU0laRQkweDAwODAwMDAwCi0jZGVmaW5lCUlRODAzMzJfRkxBU0hXSURUSAkxCi0KLSNkZWZpbmUgSVE4MDMzMl83U0VHXzEJCTB4Y2U4NDAwMDAJLyogNy1TZWdtZW50IE1TQiAqLwotI2RlZmluZSBJUTgwMzMyXzdTRUdfMAkJMHhjZTg1MDAwMAkvKiA3LVNlZ21lbnQgTFNCIChXTykgKi8KLSNkZWZpbmUgSVE4MDMzMl9ST1RBUllfU1cJMHhjZThkMDAwMAkvKiBSb3RhcnkgU3dpdGNoICovCi0jZGVmaW5lIElRODAzMzJfQkFUVF9TVEFUCTB4Y2U4ZjAwMDAJLyogQmF0dGVyeSBTdGF0dXMgKi8KLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLWV4dGVybiB2b2lkIGlxODAzMzJfbWFwX2lvKHZvaWQpOwotI2VuZGlmCi0KLSNlbmRpZgkvLyBfSVE4MDMzMl9IXwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9pcnFzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIyYzAzZjQuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L2lycXMuaAorKysgL2Rldi9udWxsCkBAIC0xLDIxICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvaXJxcy5oCi0gKgotICogQ29weXJpZ2h0OgkoQykgMjAwMS0yMDAzIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcwotICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICovCi0KLS8qCi0gKiBDaGlwc2V0LXNwZWNpZmljIGJpdHMKLSAqLwotI2lmZGVmIENPTkZJR19BUkNIX0lPUDMyMQotI2luY2x1ZGUgImlvcDMyMS1pcnFzLmgiCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19BUkNIX0lPUDMzMQotI2luY2x1ZGUgImlvcDMzMS1pcnFzLmgiCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9tZW1vcnkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTQzZWJkOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvbWVtb3J5LmgKKysrIC9kZXYvbnVsbApAQCAtMSwzOCArMCwwIEBACi0vKgotICogbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L21lbW9yeS5oCi0gKi8KLQotI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICi0jZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKLQotI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgotCi0vKgotICogUGh5c2ljYWwgRFJBTSBvZmZzZXQuCi0gKi8KLSNpZm5kZWYgQ09ORklHX0FSQ0hfSU9QMzMxCi0jZGVmaW5lIFBIWVNfT0ZGU0VUCVVMKDB4YTAwMDAwMDApCi0jZWxzZQotI2RlZmluZSBQSFlTX09GRlNFVAlVTCgweDAwMDAwMDAwKQotI2VuZGlmCi0KLS8qCi0gKiBWaXJ0dWFsIHZpZXcgPC0+IFBDSSBETUEgdmlldyBtZW1vcnkgYWRkcmVzcyB0cmFuc2xhdGlvbnMKLSAqIHZpcnRfdG9fYnVzOiBVc2VkIHRvIHRyYW5zbGF0ZSB0aGUgdmlydHVhbCBhZGRyZXNzIHRvIGFuCi0gKgkJYWRkcmVzcyBzdWl0YWJsZSB0byBiZSBwYXNzZWQgdG8gc2V0X2RtYV9hZGRyCi0gKiBidXNfdG9fdmlydDogVXNlZCB0byBjb252ZXJ0IGFuIGFkZHJlc3MgZm9yIERNQSBvcGVyYXRpb25zCi0gKgkJdG8gYW4gYWRkcmVzcyB0aGF0IHRoZSBrZXJuZWwgY2FuIHVzZS4KLSAqLwotI2lmIGRlZmluZWQoQ09ORklHX0FSQ0hfSU9QMzIxKQotCi0jZGVmaW5lIF9fdmlydF90b19idXMoeCkJKCgoX192aXJ0X3RvX3BoeXMoeCkpICYgfigqSU9QMzIxX0lBVFZSMikpIHwgKCgqSU9QMzIxX0lBQkFSMikgJiAweGZmZmZmZmYwKSkKLSNkZWZpbmUgX19idXNfdG9fdmlydCh4KSAgICAoX19waHlzX3RvX3ZpcnQoKCh4KSAmIH4oKklPUDMyMV9JQUxSMikpIHwgKCAqSU9QMzIxX0lBVFZSMikpKQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKLQotI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpCSgoKF9fdmlydF90b19waHlzKHgpKSAmIH4oKklPUDMzMV9JQVRWUjIpKSB8ICgoKklPUDMzMV9JQUJBUjIpICYgMHhmZmZmZmZmMCkpCi0jZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgICAgKF9fcGh5c190b192aXJ0KCgoeCkgJiB+KCpJT1AzMzFfSUFMUjIpKSB8ICggKklPUDMzMV9JQVRWUjIpKSkKLQotI2VuZGlmCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3N5c3RlbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhZjZhZThjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC9zeXN0ZW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDM1ICswLDAgQEAKLS8qCi0gKiBsaW51eC9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvc3lzdGVtLmgKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAxIE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKLSAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgotICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2lkbGUodm9pZCkKLXsKLQljcHVfZG9faWRsZSgpOwotfQotCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX3Jlc2V0KGNoYXIgbW9kZSkKLXsKLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKLSAgICAqSU9QMzIxX1BDU1IgPSAweDMwOwotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMzEKLSAgICAqSU9QMzMxX1BDU1IgPSAweDMwOwotI2VuZGlmCi0KLQlpZiAoIDEgJiYgbW9kZSA9PSAncycpIHsKLQkJLyogSnVtcCBpbnRvIFJPTSBhdCBhZGRyZXNzIDAgKi8KLQkJY3B1X3Jlc2V0KDApOwotCX0gZWxzZSB7Ci0JCS8qIE5vIG9uLWNoaXAgcmVzZXQgY2FwYWJpbGl0eSAqLwotCQljcHVfcmVzZXQoMCk7Ci0JfQotfQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdGltZXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGNhOGQwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC90aW1leC5oCi0gKgotICogSU9QM3h4IGFyY2hpdGVjdHVyZSB0aW1leCBzcGVjaWZpY2F0aW9ucwotICovCi0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLSNpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMjEpIHx8IGRlZmluZWQoQ09ORklHX0FSQ0hfSVEzMTI0NCkKLQotI2RlZmluZSBDTE9DS19USUNLX1JBVEUgSU9QMzIxX1RJQ0tfUkFURQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lRODAzMzEpIHx8IGRlZmluZWQoQ09ORklHX01BQ0hfSVE4MDMzMikKLQotI2RlZmluZSBDTE9DS19USUNLX1JBVEUgSU9QMzMxX1RJQ0tfUkFURQotCi0jZWxzZQotCi0jZXJyb3IgIk5vIElPUDN4eCB0aW1leCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBhcmNoaXRlY3R1cmUiCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC91bmNvbXByZXNzLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGZiZGQ1YWYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiAgbGludXgvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3VuY29tcHJlc3MuaAotICovCi0jaW5jbHVkZSA8YXNtL3R5cGVzLmg+Ci0jaW5jbHVkZSA8YXNtL21hY2gtdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC9zZXJpYWxfcmVnLmg+Ci0jaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+Ci0KLSNpZmRlZiBDT05GSUdfQVJDSF9JT1AzMjEKLSNkZWZpbmUgVVRZUEUgdW5zaWduZWQgY2hhciAqCi0jZWxpZiBkZWZpbmVkKENPTkZJR19BUkNIX0lPUDMzMSkKLSNkZWZpbmUgVVRZUEUgdTMyICoKLSNlbHNlCi0jZXJyb3IgIk1pc3NpbmcgSU9QM3h4IGFyY2ggdHlwZSBkZWYiCi0jZW5kaWYKLQotc3RhdGljIHZvbGF0aWxlIFVUWVBFIHVhcnRfYmFzZTsKLQotI2RlZmluZSBUWF9ET05FIChVQVJUX0xTUl9URU1UfFVBUlRfTFNSX1RIUkUpCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRjKGNoYXIgYykKLXsKLQl3aGlsZSAoKHVhcnRfYmFzZVtVQVJUX0xTUl0gJiBUWF9ET05FKSAhPSBUWF9ET05FKQotCQliYXJyaWVyKCk7Ci0JKnVhcnRfYmFzZSA9IGM7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaCh2b2lkKQotewotfQotCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fYXJjaF9kZWNvbXBfc2V0dXAodW5zaWduZWQgbG9uZyBhcmNoX2lkKQotewotICAgICAgICBpZihtYWNoaW5lX2lzX2lxODAzMjEoKSkKLQkJCXVhcnRfYmFzZSA9ICh2b2xhdGlsZSBVVFlQRSlJUTgwMzIxX1VBUlQ7Ci0JCWVsc2UgaWYobWFjaGluZV9pc19pcTMxMjQ0KCkpCi0JCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgVVRZUEUpSVEzMTI0NF9VQVJUOwotCQllbHNlIGlmKG1hY2hpbmVfaXNfaXE4MDMzMSgpIHx8IG1hY2hpbmVfaXNfaXE4MDMzMigpKQotCQkJdWFydF9iYXNlID0gKHZvbGF0aWxlIFVUWVBFKUlPUDMzMV9VQVJUMF9QSFlTOwotCQllbHNlCi0JCQl1YXJ0X2Jhc2UgPSAodm9sYXRpbGUgVVRZUEUpMHhmZTgwMDAwMDsKLX0KLQotLyoKLSAqIG5vdGhpbmcgdG8gZG8KLSAqLwotI2RlZmluZSBhcmNoX2RlY29tcF9zZXR1cCgpCV9fYXJjaF9kZWNvbXBfc2V0dXAoYXJjaF9pZCkKLSNkZWZpbmUgYXJjaF9kZWNvbXBfd2RvZygpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtaW9wM3h4L3ZtYWxsb2MuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMGYyZjY4NC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1pb3AzeHgvdm1hbGxvYy5oCisrKyAvZGV2L251bGwKQEAgLTEsMTYgKzAsMCBAQAotLyoKLSAqIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLWlvcDN4eC92bWFsbG9jLmgKLSAqLwotCi0vKgotICogSnVzdCBhbnkgYXJiaXRyYXJ5IG9mZnNldCB0byB0aGUgc3RhcnQgb2YgdGhlIHZtYWxsb2MgVk0gYXJlYTogdGhlCi0gKiBjdXJyZW50IDhNQiB2YWx1ZSBqdXN0IG1lYW5zIHRoYXQgdGhlcmUgd2lsbCBiZSBhIDhNQiAiaG9sZSIgYWZ0ZXIgdGhlCi0gKiBwaHlzaWNhbCBtZW1vcnkgdW50aWwgdGhlIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBzdGFydHMuICBUaGF0IG1lYW5zIHRoYXQKLSAqIGFueSBvdXQtb2YtYm91bmRzIG1lbW9yeSBhY2Nlc3NlcyB3aWxsIGhvcGVmdWxseSBiZSBjYXVnaHQuCi0gKiBUaGUgdm1hbGxvYygpIHJvdXRpbmVzIGxlYXZlcyBhIGhvbGUgb2YgNGtCIGJldHdlZW4gZWFjaCB2bWFsbG9jZWQKLSAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKLSAqLwotLy8jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGU4MDAwMDAwKQotLyogaW5jcmVhc2UgdXNhYmxlIHBoeXNpY2FsIFJBTSB0byB+OTkyTSBwZXIgUk1LICovCi0jZGVmaW5lIFZNQUxMT0NfRU5EICAgICAgICgweGZlMDAwMDAwKQotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1peHA0eHgvcGxhdGZvcm0uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCmluZGV4IDEzYWVlMTcuLjhkMTBhOTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWl4cDR4eC9wbGF0Zm9ybS5oCkBAIC05MCw2ICs5MCwxMSBAQAogc3RydWN0IHN5c190aW1lcjsKIAogLyoKKyAqIEZyZXF1ZW5jeSBvZiBjbG9jayB1c2VkIGZvciBwcmltYXJ5IGNsb2Nrc291cmNlCisgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIGl4cDR4eF90aW1lcl9mcmVxOworCisvKgogICogRnVuY3Rpb25zIHVzZWQgYnkgcGxhdGZvcm0tbGV2ZWwgc2V0dXAgY29kZQogICovCiBleHRlcm4gdm9pZCBpeHA0eHhfbWFwX2lvKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL2lvLmgKaW5kZXggY2QwODBkOC4uZDc0NGQ5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC9pby5oCkBAIC0zMSw5ICszMSw5IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBfX2FyY2hfZ2V0dyh1bnNpZ25lZCBsb25nIGEpCiB7CiAJdW5zaWduZWQgaW50IHZhbHVlOwotCV9fYXNtX18gX192b2xhdGlsZV9fKCJsZHIlP2ggICAgJTAsIFslMSwgIzBdICAgIEAgZ2V0dyIKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygibGRyaCAgICAlMCwgWyUxLCAjMF0gICAgQCBnZXR3IgogCQk6ICI9JnIiICh2YWx1ZSkKLQkJOiAiciIgKGEpKTsKKwkJOiAiciIgKGEpIDogImNjIik7CiAJcmV0dXJuIHZhbHVlOwogfQogCkBAIC00Miw4ICs0Miw4IEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX2FyY2hfcHV0dyh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgYSkKIHsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0ciU/aCAgICAlMCwgWyUxLCAjMF0gICAgQCBwdXR3IgotICAgICAgICAgICAgICAgIDogOiAiciIgKHZhbHVlKSwgInIiIChhKSk7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHJoICAgICUwLCBbJTEsICMwXSAgICBAIHB1dHciCisgICAgICAgICAgICAgICAgOiA6ICJyIiAodmFsdWUpLCAiciIgKGEpIDogImNjIik7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC90aW1lLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1sNzIwMC90aW1lLmgKaW5kZXggN2I5OGI1My4uYzY5Y2I1MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtbDcyMDAvdGltZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLWw3MjAwL3RpbWUuaApAQCAtNDUsNyArNDUsNyBAQAogc3RhdGljIGlycXJldHVybl90CiB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlkb190aW1lcihyZWdzKTsKKwlkb190aW1lcigxKTsKICNpZm5kZWYgQ09ORklHX1NNUAogCXVwZGF0ZV9wcm9jZXNzX3RpbWVzKHVzZXJfbW9kZShyZWdzKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYW1zLWRlbHRhLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2JvYXJkLWFtcy1kZWx0YS5oCmluZGV4IDAwNzBmNmQuLjlhZWUxNWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvYm9hcmQtYW1zLWRlbHRhLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ib2FyZC1hbXMtZGVsdGEuaApAQCAtNTAsOSArNTAsMjAgQEAKICNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9OQU5EX05XRQkweDAwMjAKICNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9OQU5EX0FMRQkweDAwNDAKICNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9OQU5EX0NMRQkweDAwODAKKyNkZWZpbmUgQU1EX0RFTFRBX0xBVENIMl9LRVlCUkRfUFdSCTB4MDEwMAorI2RlZmluZSBBTURfREVMVEFfTEFUQ0gyX0tFWUJSRF9EQVRBCTB4MDIwMAorI2RlZmluZSBBTURfREVMVEFfTEFUQ0gyX1NDQVJEX1JTVElOCTB4MDQwMAorI2RlZmluZSBBTURfREVMVEFfTEFUQ0gyX1NDQVJEX0NNRFZDQwkweDA4MDAKICNkZWZpbmUgQU1TX0RFTFRBX0xBVENIMl9NT0RFTV9OUkVTRVQJMHgxMDAwCiAjZGVmaW5lIEFNU19ERUxUQV9MQVRDSDJfTU9ERU1fQ09ERUMJMHgyMDAwCiAKKyNkZWZpbmUgQU1TX0RFTFRBX0dQSU9fUElOX0tFWUJSRF9EQVRBCTAKKyNkZWZpbmUgQU1TX0RFTFRBX0dQSU9fUElOX0tFWUJSRF9DTEsJMQorI2RlZmluZSBBTVNfREVMVEFfR1BJT19QSU5fTU9ERU1fSVJRCTIKKyNkZWZpbmUgQU1TX0RFTFRBX0dQSU9fUElOX0hPT0tfU1dJVENICTQKKyNkZWZpbmUgQU1TX0RFTFRBX0dQSU9fUElOX1NDQVJEX05PRkYJNgorI2RlZmluZSBBTVNfREVMVEFfR1BJT19QSU5fU0NBUkRfSU8JNworI2RlZmluZSBBTVNfREVMVEFfR1BJT19QSU5fQ09ORklHCTExCiAjZGVmaW5lIEFNU19ERUxUQV9HUElPX1BJTl9OQU5EX1JCCTEyCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2Nsb2NrLmgKaW5kZXggZjgzMDAzZi4uZmE2ODgxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9jbG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvY2xvY2suaApAQCAtNDUsNiArNDUsNyBAQAogCXN0cnVjdCBjbGsgKgkoKmNsa19nZXRfcGFyZW50KShzdHJ1Y3QgY2xrICpjbGspOwogCXZvaWQJCSgqY2xrX2FsbG93X2lkbGUpKHN0cnVjdCBjbGsgKmNsayk7CiAJdm9pZAkJKCpjbGtfZGVueV9pZGxlKShzdHJ1Y3QgY2xrICpjbGspOworCXZvaWQJCSgqY2xrX2Rpc2FibGVfdW51c2VkKShzdHJ1Y3QgY2xrICpjbGspOwogfTsKIAogZXh0ZXJuIHVuc2lnbmVkIGludCBtcHVyYXRlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZG1hLmgKaW5kZXggMWIxYjAyMy4uZDU5MWQwNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtYS5oCkBAIC0zMzEsNiArMzMxLDEyIEBACiAJT01BUF9ETUFfVFJBTlNQQVJFTlRfQ09QWQogfTsKIAorZW51bSBvbWFwX2RtYV93cml0ZV9tb2RlIHsKKwlPTUFQX0RNQV9XUklURV9OT05fUE9TVEVEID0gMCwKKwlPTUFQX0RNQV9XUklURV9QT1NURUQsCisJT01BUF9ETUFfV1JJVEVfTEFTVF9OT05fUE9TVEVECit9OworCiBzdHJ1Y3Qgb21hcF9kbWFfY2hhbm5lbF9wYXJhbXMgewogCWludCBkYXRhX3R5cGU7CQkvKiBkYXRhIHR5cGUgOCwxNiwzMiAqLwogCWludCBlbGVtX2NvdW50OwkJLyogbnVtYmVyIG9mIGVsZW1lbnRzIGluIGEgZnJhbWUgKi8KQEAgLTMzOCwxMyArMzQ0LDEzIEBACiAKIAlpbnQgc3JjX3BvcnQ7CQkvKiBPbmx5IG9uIE9NQVAxIFJFVklTSVQ6IElzIHRoaXMgbmVlZGVkPyAqLwogCWludCBzcmNfYW1vZGU7CQkvKiBjb25zdGFudCAsIHBvc3QgaW5jcmVtZW50LCBpbmRleGVkICwgZG91YmxlIGluZGV4ZWQgKi8KLQlpbnQgc3JjX3N0YXJ0OwkJLyogc291cmNlIGFkZHJlc3MgOiBwaHlzaWNhbCAqLworCXVuc2lnbmVkIGxvbmcgc3JjX3N0YXJ0OwkvKiBzb3VyY2UgYWRkcmVzcyA6IHBoeXNpY2FsICovCiAJaW50IHNyY19laTsJCS8qIHNvdXJjZSBlbGVtZW50IGluZGV4ICovCiAJaW50IHNyY19maTsJCS8qIHNvdXJjZSBmcmFtZSBpbmRleCAqLwogCiAJaW50IGRzdF9wb3J0OwkJLyogT25seSBvbiBPTUFQMSBSRVZJU0lUOiBJcyB0aGlzIG5lZWRlZD8gKi8KIAlpbnQgZHN0X2Ftb2RlOwkJLyogY29uc3RhbnQgLCBwb3N0IGluY3JlbWVudCwgaW5kZXhlZCAsIGRvdWJsZSBpbmRleGVkICovCi0JaW50IGRzdF9zdGFydDsJCS8qIHNvdXJjZSBhZGRyZXNzIDogcGh5c2ljYWwgKi8KKwl1bnNpZ25lZCBsb25nIGRzdF9zdGFydDsJLyogc291cmNlIGFkZHJlc3MgOiBwaHlzaWNhbCAqLwogCWludCBkc3RfZWk7CQkvKiBzb3VyY2UgZWxlbWVudCBpbmRleCAqLwogCWludCBkc3RfZmk7CQkvKiBzb3VyY2UgZnJhbWUgaW5kZXggKi8KIApAQCAtMzU2LDcgKzM2Miw3IEBACiB9OwogCiAKLWV4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV9wcmlvcml0eShpbnQgZHN0X3BvcnQsIGludCBwcmlvcml0eSk7CitleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfcHJpb3JpdHkoaW50IGxjaCwgaW50IGRzdF9wb3J0LCBpbnQgcHJpb3JpdHkpOwogZXh0ZXJuIGludCBvbWFwX3JlcXVlc3RfZG1hKGludCBkZXZfaWQsIGNvbnN0IGNoYXIgKmRldl9uYW1lLAogCQkJICAgIHZvaWQgKCogY2FsbGJhY2spKGludCBsY2gsIHUxNiBjaF9zdGF0dXMsIHZvaWQgKmRhdGEpLAogCQkJICAgIHZvaWQgKmRhdGEsIGludCAqZG1hX2NoKTsKQEAgLTM3MSw2ICszNzcsNyBAQAogCQkJCQkgaW50IGRtYV90cmlnZ2VyLCBpbnQgc3JjX29yX2RzdF9zeW5jaCk7CiBleHRlcm4gdm9pZCBvbWFwX3NldF9kbWFfY29sb3JfbW9kZShpbnQgbGNoLCBlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgbW9kZSwKIAkJCQkgICAgdTMyIGNvbG9yKTsKK2V4dGVybiB2b2lkIG9tYXBfc2V0X2RtYV93cml0ZV9tb2RlKGludCBsY2gsIGVudW0gb21hcF9kbWFfd3JpdGVfbW9kZSBtb2RlKTsKIAogZXh0ZXJuIHZvaWQgb21hcF9zZXRfZG1hX3NyY19wYXJhbXMoaW50IGxjaCwgaW50IHNyY19wb3J0LCBpbnQgc3JjX2Ftb2RlLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIHNyY19zdGFydCwKQEAgLTM5NCw2ICs0MDEsOSBAQAogZXh0ZXJuIHZvaWQgb21hcF9kbWFfbGlua19sY2ggKGludCBsY2hfaGVhZCwgaW50IGxjaF9xdWV1ZSk7CiBleHRlcm4gdm9pZCBvbWFwX2RtYV91bmxpbmtfbGNoIChpbnQgbGNoX2hlYWQsIGludCBsY2hfcXVldWUpOwogCitleHRlcm4gaW50IG9tYXBfc2V0X2RtYV9jYWxsYmFjayhpbnQgbGNoLAorCQkJdm9pZCAoKiBjYWxsYmFjaykoaW50IGxjaCwgdTE2IGNoX3N0YXR1cywgdm9pZCAqZGF0YSksCisJCQl2b2lkICpkYXRhKTsKIGV4dGVybiBkbWFfYWRkcl90IG9tYXBfZ2V0X2RtYV9zcmNfcG9zKGludCBsY2gpOwogZXh0ZXJuIGRtYV9hZGRyX3Qgb21hcF9nZXRfZG1hX2RzdF9wb3MoaW50IGxjaCk7CiBleHRlcm4gaW50IG9tYXBfZ2V0X2RtYV9zcmNfYWRkcl9jb3VudGVyKGludCBsY2gpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9kbXRpbWVyLmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaAppbmRleCA3YTI4OWZmLi5iNWYzYTcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2RtdGltZXIuaApAQCAtNTIsNiArNTIsOCBAQAogc3RydWN0IG9tYXBfZG1fdGltZXIgKm9tYXBfZG1fdGltZXJfcmVxdWVzdCh2b2lkKTsKIHN0cnVjdCBvbWFwX2RtX3RpbWVyICpvbWFwX2RtX3RpbWVyX3JlcXVlc3Rfc3BlY2lmaWMoaW50IHRpbWVyX2lkKTsKIHZvaWQgb21hcF9kbV90aW1lcl9mcmVlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Cit2b2lkIG9tYXBfZG1fdGltZXJfZW5hYmxlKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7Cit2b2lkIG9tYXBfZG1fdGltZXJfZGlzYWJsZShzdHJ1Y3Qgb21hcF9kbV90aW1lciAqdGltZXIpOwogCiBpbnQgb21hcF9kbV90aW1lcl9nZXRfaXJxKHN0cnVjdCBvbWFwX2RtX3RpbWVyICp0aW1lcik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvZ3BtYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKaW5kZXggMWEwYTUyMC4uN2MwM2VmNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9ncG1jLmgKQEAgLTg1LDcgKzg1LDcgQEAKIGV4dGVybiB1MzIgZ3BtY19jc19yZWFkX3JlZyhpbnQgY3MsIGludCBpZHgpOwogZXh0ZXJuIGludCBncG1jX2NzX2NhbGNfZGl2aWRlcihpbnQgY3MsIHVuc2lnbmVkIGludCBzeW5jX2Nsayk7CiBleHRlcm4gaW50IGdwbWNfY3Nfc2V0X3RpbWluZ3MoaW50IGNzLCBjb25zdCBzdHJ1Y3QgZ3BtY190aW1pbmdzICp0KTsKLWV4dGVybiB1bnNpZ25lZCBsb25nIGdwbWNfY3NfZ2V0X2Jhc2VfYWRkcihpbnQgY3MpOwotCitleHRlcm4gaW50IGdwbWNfY3NfcmVxdWVzdChpbnQgY3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyAqYmFzZSk7CitleHRlcm4gdm9pZCBncG1jX2NzX2ZyZWUoaW50IGNzKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2lycXMuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCmluZGV4IDI1NDI0OTUuLmM1YmIwNWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvaXJxcy5oCkBAIC0yMzcsNiArMjM3LDcgQEAKICNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExCTEzCiAjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMgkxNAogI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTMJMTUKKyNkZWZpbmUgSU5UXzI0WFhfQ0FNX0lSUQkyNAogI2RlZmluZSBJTlRfMjRYWF9EU1NfSVJRCTI1CiAjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzEJMjkKICNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMgkzMApAQCAtMjYxLDYgKzI2Miw3IEBACiAjZGVmaW5lIElOVF8yNFhYX1VBUlQxX0lSUQk3MgogI2RlZmluZSBJTlRfMjRYWF9VQVJUMl9JUlEJNzMKICNkZWZpbmUgSU5UXzI0WFhfVUFSVDNfSVJRCTc0CisjZGVmaW5lIElOVF8yNFhYX01NQ19JUlEJODMKIAogLyogTWF4LiAxMjggbGV2ZWwgMiBJUlFzIChPTUFQMTYxMCksIDE5MiBHUElPcyAoT01BUDczMCkgYW5kCiAgKiAxNiBNUFVJTyBsaW5lcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9rZXlwYWQuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAva2V5cGFkLmgKaW5kZXggOGEwMjNhOS4uYjdmODMwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9rZXlwYWQuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL2tleXBhZC5oCkBAIC0xNCw3ICsxNCwxMCBAQAogCWludCByb3dzOwogCWludCBjb2xzOwogCWludCAqa2V5bWFwOworCXVuc2lnbmVkIGludCBrZXltYXBzaXplOwogCXVuc2lnbmVkIGludCByZXA6MTsKKwl1bnNpZ25lZCBsb25nIGRlbGF5OworCXVuc2lnbmVkIGludCBkYm91bmNlOjE7CiAJLyogc3BlY2lmaWMgdG8gT01BUDI0MngqLwogCXVuc2lnbmVkIGludCAqcm93X2dwaW9zOwogCXVuc2lnbmVkIGludCAqY29sX2dwaW9zOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLW9tYXAvbXV4LmgKaW5kZXggNjc5ODY5Yy4uODI4Y2M1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtb21hcC9tdXguaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1vbWFwL211eC5oCkBAIC0zMjAsNiArMzIwLDE3IEBACiAJUDE1XzE2MTBfVVdJUkVfQ1MzLAogCU4xNV8xNjEwX1VXSVJFX0NTMSwKIAorCS8qIE9NQVAtMTYxMCBTUEkgKi8KKwlVMTlfMTYxMF9TUElGX1NDSywKKwlVMThfMTYxMF9TUElGX0RJTiwKKwlQMjBfMTYxMF9TUElGX0RJTiwKKwlXMjFfMTYxMF9TUElGX0RPVVQsCisJUjE4XzE2MTBfU1BJRl9ET1VULAorCU4xNF8xNjEwX1NQSUZfQ1MwLAorCU4xNV8xNjEwX1NQSUZfQ1MxLAorCVQxOV8xNjEwX1NQSUZfQ1MyLAorCVAxNV8xNjEwX1NQSUZfQ1MzLAorCiAJLyogT01BUC0xNjEwIEZsYXNoICovCiAJTDNfMTYxMF9GTEFTSF9DUzJCX09FLAogCU04XzE2MTBfRkxBU0hfQ1MyQl9XRSwKQEAgLTQ2MSw2ICs0NzIsMjAgQEAKIAlLMTVfMjRYWF9VQVJUM19UWCwKIAlLMTRfMjRYWF9VQVJUM19SWCwKIAorCS8qIE1NQy9TRElPICovCisJRzE5XzI0WFhfTU1DX0NMS08sCisJSDE4XzI0WFhfTU1DX0NNRCwKKwlGMjBfMjRYWF9NTUNfREFUMCwKKwlIMTRfMjRYWF9NTUNfREFUMSwKKwlFMTlfMjRYWF9NTUNfREFUMiwKKwlEMTlfMjRYWF9NTUNfREFUMywKKwlGMTlfMjRYWF9NTUNfREFUX0RJUjAsCisJRTIwXzI0WFhfTU1DX0RBVF9ESVIxLAorCUYxOF8yNFhYX01NQ19EQVRfRElSMiwKKwlFMThfMjRYWF9NTUNfREFUX0RJUjMsCisJRzE4XzI0WFhfTU1DX0NNRF9ESVIsCisJSDE1XzI0WFhfTU1DX0NMS0ksCisKIAkvKiBLZXlwYWQgR1BJTyovCiAJVDE5XzI0WFhfS0JSMCwKIAlSMTlfMjRYWF9LQlIxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtcHhhL3VkYy5oCmluZGV4IDMwNTQ4YTMuLjEyMWNkMjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXB4YS91ZGMuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1weGEvdWRjLmgKQEAgLTEyLDYgKzEyLDE0IEBACiAgICAgICAgIHZvaWQgKCp1ZGNfY29tbWFuZCkoaW50IGNtZCk7CiAjZGVmaW5lCVBYQTJYWF9VRENfQ01EX0NPTk5FQ1QJCTAJLyogbGV0IGhvc3Qgc2VlIHVzICovCiAjZGVmaW5lCVBYQTJYWF9VRENfQ01EX0RJU0NPTk5FQ1QJMQkvKiBzbyBob3N0IHdvbid0IHNlZSB1cyAqLworCisJLyogQm9hcmRzIGZvbGxvd2luZyB0aGUgZGVzaWduIGd1aWRlbGluZXMgaW4gdGhlIGRldmVsb3BlcidzIG1hbnVhbCwKKwkgKiB3aXRoIG9uLWNoaXAgR1BJT3Mgbm90IEx1YmJvY2sncyB3aWVyZCBoYXJkd2FyZSwgY2FuIGhhdmUgYSBzYW5lCisJICogVkJVUyBJUlEgYW5kIG9taXQgdGhlIG1ldGhvZHMgYWJvdmUuICBTdG9yZSB0aGUgR1BJTyBudW1iZXIKKwkgKiBoZXJlOyBmb3IgR1BJTyAwLCBhbHNvIG1hc2sgaW4gb25lIG9mIHRoZSBweGFfZ3Bpb19tb2RlKCkgYml0cy4KKwkgKi8KKwl1MTYJZ3Bpb192YnVzOwkJCS8qIGhpZ2ggPT0gdmJ1cyBwcmVzZW50ICovCisJdTE2CWdwaW9fcHVsbHVwOwkJCS8qIGhpZ2ggPT0gcHVsbHVwIGFjdGl2YXRlZCAqLwogfTsKIAogZXh0ZXJuIHZvaWQgcHhhX3NldF91ZGNfaW5mbyhzdHJ1Y3QgcHhhMnh4X3VkY19tYWNoX2luZm8gKmluZm8pOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvZG1hLmgKaW5kZXggMzY2MWU0Ni4uN2FjMjI0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9kbWEuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL2RtYS5oCkBAIC0yMyw2ICsyMywzOSBAQAogI2RlZmluZSBNQVhfRE1BX0FERFJFU1MJCTB4NDAwMDAwMDAKICNkZWZpbmUgTUFYX0RNQV9UUkFOU0ZFUl9TSVpFICAgMHgxMDAwMDAgLyogRGF0YSBVbml0IGlzIGhhbGYgd29yZCAgKi8KIAorLyogV2UgdXNlIGB2aXJ0dWFsYCBkbWEgY2hhbm5lbHMgdG8gaGlkZSB0aGUgZmFjdCB3ZSBoYXZlIG9ubHkgYSBsaW1pdGVkCisgKiBudW1iZXIgb2YgRE1BIGNoYW5uZWxzLCBhbmQgbm90IG9mIGFsbCBvZiB0aGVtIChkZXBlbmRhbnQgb24gdGhlIGRldmljZSkKKyAqIGNhbiBiZSBhdHRhY2hlZCB0byBhbnkgRE1BIHNvdXJjZS4gV2UgdGhlcmVmb3JlIGxldCB0aGUgRE1BIGNvcmUgaGFuZGxlCisgKiB0aGUgYWxsb2NhdGlvbiBvZiBoYXJkd2FyZSBjaGFubmVscyB0byBjbGllbnRzLgorKi8KKworZW51bSBkbWFfY2ggeworCURNQUNIX1hEMCwKKwlETUFDSF9YRDEsCisJRE1BQ0hfU0RJLAorCURNQUNIX1NQSTAsCisJRE1BQ0hfU1BJMSwKKwlETUFDSF9VQVJUMCwKKwlETUFDSF9VQVJUMSwKKwlETUFDSF9VQVJUMiwKKwlETUFDSF9USU1FUiwKKwlETUFDSF9JMlNfSU4sCisJRE1BQ0hfSTJTX09VVCwKKwlETUFDSF9QQ01fSU4sCisJRE1BQ0hfUENNX09VVCwKKwlETUFDSF9NSUNfSU4sCisJRE1BQ0hfVVNCX0VQMSwKKwlETUFDSF9VU0JfRVAyLAorCURNQUNIX1VTQl9FUDMsCisJRE1BQ0hfVVNCX0VQNCwKKwlETUFDSF9VQVJUMF9TUkMyLAkvKiBzM2MyNDEyIHNlY29uZCB1YXJ0IHNvdXJjZXMgKi8KKwlETUFDSF9VQVJUMV9TUkMyLAorCURNQUNIX1VBUlQyX1NSQzIsCisJRE1BQ0hfTUFYLAkJLyogdGhlIGVuZCBlbnRyeSAqLworfTsKKworI2RlZmluZSBETUFDSF9MT1dfTEVWRUwJKDE8PDI4KQkvKiB1c2UgdGhpcyB0byBzcGVjaWZpeSBoYXJkd2FyZSBjaCBubyAqLworCiAvKiB3ZSBoYXZlIDQgZG1hIGNoYW5uZWxzICovCiAjZGVmaW5lIFMzQzI0MTBfRE1BX0NIQU5ORUxTICAgICAgICAoNCkKIApAQCAtMTQ5LDYgKzE4Miw4IEBACiAJdW5zaWduZWQgbG9uZwkJdGltZW91dF9mYWlsZWQ7CiB9OwogCitzdHJ1Y3QgczNjMjQxMF9kbWFfbWFwOworCiAvKiBzdHJ1Y3QgczNjMjQxMF9kbWFfY2hhbgogICoKICAqIGZ1bGwgc3RhdGUgaW5mb3JtYXRpb24gZm9yIGVhY2ggRE1BIGNoYW5uZWwKQEAgLTE3NCw2ICsyMDksOCBAQAogCXVuc2lnbmVkIGxvbmcJCSBsb2FkX3RpbWVvdXQ7CiAJdW5zaWduZWQgaW50CQkgZmxhZ3M7CQkvKiBjaGFubmVsIGZsYWdzICovCiAKKwlzdHJ1Y3QgczNjMjR4eF9kbWFfbWFwCSptYXA7CQkvKiBjaGFubmVsIGh3IG1hcHMgKi8KKwogCS8qIGNoYW5uZWwncyBoYXJkd2FyZSBwb3NpdGlvbiBhbmQgY29uZmlndXJhdGlvbiAqLwogCXZvaWQgX19pb21lbQkJKnJlZ3M7CQkvKiBjaGFubmVscyByZWdpc3RlcnMgKi8KIAl2b2lkIF9faW9tZW0JCSphZGRyX3JlZzsJLyogZGF0YSBhZGRyZXNzIHJlZ2lzdGVyICovCkBAIC0yODMsNiArMzIwLDcgQEAKICNkZWZpbmUgUzNDMjQxMF9ETUFfRENTUkMgICAgICAgKDB4MTgpCiAjZGVmaW5lIFMzQzI0MTBfRE1BX0RDRFNUICAgICAgICgweDFDKQogI2RlZmluZSBTM0MyNDEwX0RNQV9ETUFTS1RSSUcgICAoMHgyMCkKKyNkZWZpbmUgUzNDMjQxMl9ETUFfRE1BUkVRU0VMCSgweDI0KQogCiAjZGVmaW5lIFMzQzI0MTBfRElTUkNDX0lOQwkoMTw8MCkKICNkZWZpbmUgUzNDMjQxMF9ESVNSQ0NfQVBCCSgxPDwxKQpAQCAtMzQ5LDQgKzM4NywzMiBAQAogI2RlZmluZSBTM0MyNDQwX0RDT05fQ0gzX1BDTU9VVAkoNjw8MjQpCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19DUFVfUzNDMjQxMgorCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX1NSQyh4KQkoKHgpPDwxKQorCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX0hXCQkoMSkKKworI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9TUEkwVFgJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDApCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX1NQSTBSWAlTM0MyNDEyX0RNQVJFUVNFTF9TUkMoMSkKKyNkZWZpbmUgUzNDMjQxMl9ETUFSRVFTRUxfU1BJMVRYCVMzQzI0MTJfRE1BUkVRU0VMX1NSQygyKQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9TUEkxUlgJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDMpCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX0kyU1RYCQlTM0MyNDEyX0RNQVJFUVNFTF9TUkMoNCkKKyNkZWZpbmUgUzNDMjQxMl9ETUFSRVFTRUxfSTJTUlgJCVMzQzI0MTJfRE1BUkVRU0VMX1NSQyg1KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9USU1FUgkJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDkpCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX1NESQkJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDEwKQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VU0JFUDEJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDEzKQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VU0JFUDIJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDE0KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VU0JFUDMJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDE1KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VU0JFUDQJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDE2KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9YRFJFUTAJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDE3KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9YRFJFUTEJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDE4KQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMF8wCVMzQzI0MTJfRE1BUkVRU0VMX1NSQygxOSkKKyNkZWZpbmUgUzNDMjQxMl9ETUFSRVFTRUxfVUFSVDBfMQlTM0MyNDEyX0RNQVJFUVNFTF9TUkMoMjApCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX1VBUlQxXzAJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDIxKQorI2RlZmluZSBTM0MyNDEyX0RNQVJFUVNFTF9VQVJUMV8xCVMzQzI0MTJfRE1BUkVRU0VMX1NSQygyMikKKyNkZWZpbmUgUzNDMjQxMl9ETUFSRVFTRUxfVUFSVDJfMAlTM0MyNDEyX0RNQVJFUVNFTF9TUkMoMjMpCisjZGVmaW5lIFMzQzI0MTJfRE1BUkVRU0VMX1VBUlQyXzEJUzNDMjQxMl9ETUFSRVFTRUxfU1JDKDI0KQorCisjZW5kaWYKICNlbmRpZiAvKiBfX0FTTV9BUkNIX0RNQV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9tYXAuaAppbmRleCAyN2JhMGFjLi43ODk1MDQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL21hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvbWFwLmgKQEAgLTE2MCw2ICsxNjAsMTEgQEAKICNkZWZpbmUgUzNDMjQ0MF9QQV9DQU1JRiAgICgweDRGMDAwMDAwKQogI2RlZmluZSBTM0MyNDQwX1NaX0NBTUlGICAgU1pfMU0KIAorLyogQUM5NyAqLworCisjZGVmaW5lIFMzQzI0NDBfUEFfQUM5NwkgICAoMHg1QjAwMDAwMCkKKyNkZWZpbmUgUzNDMjQ0MF9TWl9BQzk3CSAgIFNaXzFNCisKIC8qIElTQSBzdHlsZSBJTywgZm9yIGVhY2ggbWFjaGluZSB0byBzb3J0IG91dCBtYXBwaW5ncyBmb3IsIGlmIGl0CiAgKiBpbXBsZW1lbnRzIGl0LiBXZSByZXNlcnZlIHR3byAxNk0gcmVnaW9ucyBmb3IgSVNBLgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL29zaXJpcy1tYXAuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oCmluZGV4IGUyZDQwNjIuLmExNDE2NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvb3NpcmlzLW1hcC5oCkBAIC0xOCwyMiArMTgsMjIgQEAKIAogLyogc3RhcnQgcGVyaXBoZXJhbHMgb2ZmIGFmdGVyIHRoZSBTM0MyNDEwICovCiAKLSNkZWZpbmUgT1NJUklTX0lPQUREUih4KQkoUzNDMjQxMF9BRERSKCh4KSArIDB4MDUwMDAwMDApKQorI2RlZmluZSBPU0lSSVNfSU9BRERSKHgpCShTM0MyNDEwX0FERFIoKHgpICsgMHgwNDAwMDAwMCkpCiAKLSNkZWZpbmUgT1NJUklTX1BBX0NQTEQJCShTM0MyNDEwX0NTMSB8ICgzPDwyNSkpCisjZGVmaW5lIE9TSVJJU19QQV9DUExECQkoUzNDMjQxMF9DUzEgfCAoMTw8MjYpKQogCiAvKiB3ZSBwdXQgdGhlIENQTEQgcmVnaXN0ZXJzIG5leHQsIHRvIGdldCB0aGVtIG91dCBvZiB0aGUgd2F5ICovCiAKLSNkZWZpbmUgT1NJUklTX1ZBX0NUUkwxCSAgICBPU0lSSVNfSU9BRERSKDB4MDAwMDAwMDApCSAvKiAweDAxMzAwMDAwICovCisjZGVmaW5lIE9TSVJJU19WQV9DVFJMMQkgICAgT1NJUklTX0lPQUREUigweDAwMDAwMDAwKQogI2RlZmluZSBPU0lSSVNfUEFfQ1RSTDEJICAgIChPU0lSSVNfUEFfQ1BMRCkKIAotI2RlZmluZSBPU0lSSVNfVkFfQ1RSTDIJICAgIE9TSVJJU19JT0FERFIoMHgwMDEwMDAwMCkJIC8qIDB4MDE0MDAwMDAgKi8KLSNkZWZpbmUgT1NJUklTX1BBX0NUUkwyCSAgICAoT1NJUklTX1BBX0NQTEQgKyAoMTw8MjQpKQorI2RlZmluZSBPU0lSSVNfVkFfQ1RSTDIJICAgIE9TSVJJU19JT0FERFIoMHgwMDEwMDAwMCkKKyNkZWZpbmUgT1NJUklTX1BBX0NUUkwyCSAgICAoT1NJUklTX1BBX0NQTEQgKyAoMTw8MjMpKQogCi0jZGVmaW5lIE9TSVJJU19WQV9DVFJMMwkgICAgT1NJUklTX0lPQUREUigweDAwMjAwMDAwKQkgLyogMHgwMTUwMDAwMCAqLwotI2RlZmluZSBPU0lSSVNfUEFfQ1RSTDMJICAgIChPU0lSSVNfUEFfQ1BMRCArICgyPDwyNCkpCisjZGVmaW5lIE9TSVJJU19WQV9DVFJMMwkgICAgT1NJUklTX0lPQUREUigweDAwMjAwMDAwKQorI2RlZmluZSBPU0lSSVNfUEFfQ1RSTDMJICAgIChPU0lSSVNfUEFfQ1BMRCArICgyPDwyMykpCiAKLSNkZWZpbmUgT1NJUklTX1ZBX0NUUkw0CSAgICBPU0lSSVNfSU9BRERSKDB4MDAzMDAwMDApCSAvKiAweDAxNjAwMDAwICovCi0jZGVmaW5lIE9TSVJJU19QQV9DVFJMNAkgICAgKE9TSVJJU19QQV9DUExEICsgKDM8PDI0KSkKKyNkZWZpbmUgT1NJUklTX1ZBX0NUUkw0CSAgICBPU0lSSVNfSU9BRERSKDB4MDAzMDAwMDApCisjZGVmaW5lIE9TSVJJU19QQV9DVFJMNAkgICAgKE9TSVJJU19QQV9DUExEICsgKDM8PDIzKSkKIAogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfT1NJUklTTUFQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1hYzk3LmggYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWM5Ny5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDZhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtYWM5Ny5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGxpbnV4L2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1hYzk3LmgKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDYgU2ltdGVjIEVsZWN0cm9uaWNzIDxsaW51eEBzaW10ZWMuY28udWs+CisgKgkJaHR0cDovL3d3dy5zaW10ZWMuY28udWsvcHJvZHVjdHMvU1dMSU5VWC8KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIgYXMKKyAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFMzQzI0NDAgQUM5NyBDb250cm9sbGVyCisqLworCisjaWZuZGVmIF9fQVNNX0FSQ0hfUkVHU19BQzk3X0gKKyNkZWZpbmUgX19BU01fQVJDSF9SRUdTX0FDOTdfSCBfX0ZJTEVfXworCisjZGVmaW5lIFMzQ19BQzk3X0dMQkNUUkwJKDB4MDApCisjZGVmaW5lIFMzQ19BQzk3X0dMQlNUQVQJKDB4MDQpCisjZGVmaW5lIFMzQ19BQzk3X0NPREVDX0NNRAkoMHgwOCkKKyNkZWZpbmUgUzNDX0FDOTdfUENNX0FERFIJKDB4MTApCisjZGVmaW5lIFMzQ19BQzk3X1BDTV9EQVRBCSgweDE4KQorI2RlZmluZSBTM0NfQUM5N19NSUNfREFUQQkoMHgxQykKKworI2VuZGlmIC8qIF9fQVNNX0FSQ0hfUkVHU19BQzk3X0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1sY2QuaCBiL2luY2x1ZGUvYXNtLWFybS9hcmNoLXMzYzI0MTAvcmVncy1sY2QuaAppbmRleCBiMzA2ZDZlLi42ZDc4ODFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYXJjaC1zM2MyNDEwL3JlZ3MtbGNkLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2FyY2gtczNjMjQxMC9yZWdzLWxjZC5oCkBAIC02Myw2ICs2Myw4IEBACiAjZGVmaW5lIFMzQzI0MTBfTENEQ09OM19HRVRfSEJQRCh4KSAoICgoeCkgPj4gMTkpICYgMHg3RikKICNkZWZpbmUgUzNDMjQxMF9MQ0RDT04zX0dFVF9IRlBEKHgpICggKCh4KSA+PiAgMCkgJiAweEZGKQogCisvKiBMRENDT040IGNoYW5nZXMgZm9yIFNUTiBtb2RlIG9uIHRoZSBTM0MyNDEyICovCisKICNkZWZpbmUgUzNDMjQxMF9MQ0RDT040X01WQUwoeCkJICAgICgoeCkgPDwgOCkKICNkZWZpbmUgUzNDMjQxMF9MQ0RDT040X0hTUFcoeCkJICAgICgoeCkgPDwgMCkKICNkZWZpbmUgUzNDMjQxMF9MQ0RDT040X1dMSCh4KQkgICAgKCh4KSA8PCAwKQpAQCAtMTEzLDEwICsxMTUsMzggQEAKICNkZWZpbmUJUzNDMjQxMF9MQ0RJTlRfRlJTWU5DCSgxPDwxKQogI2RlZmluZSBTM0MyNDEwX0xDRElOVF9GSUNOVAkoMTw8MCkKIAorLyogczNjMjQ0MiBleHRyYSBzdG4gcmVnaXN0ZXJzICovCisKKyNkZWZpbmUgUzNDMjQ0Ml9SRURMVVQJCVMzQzI0MTBfTENEUkVHKDB4MjApCisjZGVmaW5lIFMzQzI0NDJfR1JFRU5MVVQJUzNDMjQxMF9MQ0RSRUcoMHgyNCkKKyNkZWZpbmUgUzNDMjQ0Ml9CTFVFTFVUCQlTM0MyNDEwX0xDRFJFRygweDI4KQorI2RlZmluZSBTM0MyNDQyX0RJVEhNT0RFCVMzQzI0MTBfTENEUkVHKDB4MjApCisKICNkZWZpbmUgUzNDMjQxMF9MUENTRUwJICAgUzNDMjQxMF9MQ0RSRUcoMHg2MCkKIAogI2RlZmluZSBTM0MyNDEwX1RGVFBBTCh4KSAgUzNDMjQxMF9MQ0RSRUcoKDB4NDAwICsgKHgpKjQpKQogCisvKiBTM0MyNDEyIHJlZ2lzdGVycyAqLworCisjZGVmaW5lIFMzQzI0MTJfVFBBTAkJUzNDMjQxMF9MQ0RSRUcoMHgyMCkKKworI2RlZmluZSBTM0MyNDEyX0xDRElOVFBORAlTM0MyNDEwX0xDRFJFRygweDI0KQorI2RlZmluZSBTM0MyNDEyX0xDRFNSQ1BORAlTM0MyNDEwX0xDRFJFRygweDI4KQorI2RlZmluZSBTM0MyNDEyX0xDRElOVE1TSwlTM0MyNDEwX0xDRFJFRygweDJDKQorCisjZGVmaW5lIFMzQzI0MTJfVENPTlNFTAkJUzNDMjQxMF9MQ0RSRUcoMHgzMCkKKworI2RlZmluZSBTM0MyNDEyX0xDRENPTjYJCVMzQzI0MTBfTENEUkVHKDB4MzQpCisjZGVmaW5lIFMzQzI0MTJfTENEQ09ONwkJUzNDMjQxMF9MQ0RSRUcoMHgzOCkKKyNkZWZpbmUgUzNDMjQxMl9MQ0RDT044CQlTM0MyNDEwX0xDRFJFRygweDNDKQorI2RlZmluZSBTM0MyNDEyX0xDRENPTjkJCVMzQzI0MTBfTENEUkVHKDB4NDApCisKKyNkZWZpbmUgUzNDMjQxMl9SRURMVVQoeCkJUzNDMjQxMF9MQ0RSRUcoMHg0NCArICgoeCkqNCkpCisjZGVmaW5lIFMzQzI0MTJfR1JFRU5MVVQoeCkJUzNDMjQxMF9MQ0RSRUcoMHg2MCArICgoeCkqNCkpCisjZGVmaW5lIFMzQzI0MTJfQkxVRUxVVCh4KQlTM0MyNDEwX0xDRFJFRygweDk4ICsgKCh4KSo0KSkKKworI2RlZmluZSBTM0MyNDEyX0ZSQ1BBVCh4KQlTM0MyNDEwX0xDRFJFRygweEI0ICsgKCh4KSo0KSkKKwogI2VuZGlmIC8qIF9fX0FTTV9BUkNIX1JFR1NfTENEX0ggKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmggYi9pbmNsdWRlL2FzbS1hcm0vYXRvbWljLmgKaW5kZXggNGIwY2UzZS4uZWE4OGFhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2F0b21pYy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9hdG9taWMuaApAQCAtMTI4LDEwICsxMjgsMTAgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCB2YWw7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAl2YWwgPSB2LT5jb3VudGVyOwogCXYtPmNvdW50ZXIgPSB2YWwgKz0gaTsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiB2YWw7CiB9CkBAIC0xNDEsMTAgKzE0MSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHZhbDsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXZhbCA9IHYtPmNvdW50ZXI7CiAJdi0+Y291bnRlciA9IHZhbCAtPSBpOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHZhbDsKIH0KQEAgLTE1NCwxMSArMTU0LDExIEBACiAJaW50IHJldDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmV0ID0gdi0+Y291bnRlcjsKIAlpZiAobGlrZWx5KHJldCA9PSBvbGQpKQogCQl2LT5jb3VudGVyID0gbmV3OwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTE2Nyw5ICsxNjcsOSBAQAogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkqYWRkciAmPSB+bWFzazsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogI2VuZGlmIC8qIF9fTElOVVhfQVJNX0FSQ0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCmluZGV4IDBhYzU0YjEuLmI0MTgzMWI2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vYml0b3BzLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2JpdG9wcy5oCkBAIC0zNyw5ICszNyw5IEBACiAKIAlwICs9IGJpdCA+PiA1OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKnAgfD0gbWFzazsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fX19hdG9taWNfY2xlYXJfYml0KHVuc2lnbmVkIGludCBiaXQsIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgKnApCkBAIC00OSw5ICs0OSw5IEBACiAKIAlwICs9IGJpdCA+PiA1OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKnAgJj0gfm1hc2s7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBfX19fYXRvbWljX2NoYW5nZV9iaXQodW5zaWduZWQgaW50IGJpdCwgdm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqcCkKQEAgLTYxLDkgKzYxLDkgQEAKIAogCXAgKz0gYml0ID4+IDU7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkqcCBePSBtYXNrOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCiBzdGF0aWMgaW5saW5lIGludApAQCAtNzUsMTAgKzc1LDEwIEBACiAKIAlwICs9IGJpdCA+PiA1OwogCi0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJcmVzID0gKnA7CiAJKnAgPSByZXMgfCBtYXNrOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHJlcyAmIG1hc2s7CiB9CkBAIC05MiwxMCArOTIsMTAgQEAKIAogCXAgKz0gYml0ID4+IDU7CiAKLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlyZXMgPSAqcDsKIAkqcCA9IHJlcyAmIH5tYXNrOwotCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCiAJcmV0dXJuIHJlcyAmIG1hc2s7CiB9CkBAIC0xMDksMTAgKzEwOSwxMCBAQAogCiAJcCArPSBiaXQgPj4gNTsKIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXJlcyA9ICpwOwogCSpwID0gcmVzIF4gbWFzazsKLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIAogCXJldHVybiByZXMgJiBtYXNrOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLWFybS9jYWNoZWZsdXNoLmgKaW5kZXggZTRhMjU2OS4uZjA4NDU2NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2NhY2hlZmx1c2guaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vY2FjaGVmbHVzaC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjdW5kZWYgX0NBQ0hFCiAjdW5kZWYgTVVMVElfQ0FDSEUKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9BUk02MTApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9BUk03MTApCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1YzKQogIyBpZmRlZiBfQ0FDSEUKICMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCiAjIGVsc2UKQEAgLTMzLDcgKzMzLDcgQEAKICMgZW5kaWYKICNlbmRpZgogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX0FSTTcyMFQpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX0NBQ0hFX1Y0KQogIyBpZmRlZiBfQ0FDSEUKICMgIGRlZmluZSBNVUxUSV9DQUNIRSAxCiAjIGVsc2UKQEAgLTU0LDcgKzU0LDIzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TQTExMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NBMTEwMCkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTQwVCkKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIGFybTk0MAorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQVJNOTQ2RSkKKyMgaWZkZWYgX0NBQ0hFCisjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQorIyBlbHNlCisjICBkZWZpbmUgX0NBQ0hFIGFybTk0NgorIyBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfQ0FDSEVfVjRXQikKICMgaWZkZWYgX0NBQ0hFCiAjICBkZWZpbmUgTVVMVElfQ0FDSEUgMQogIyBlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vZmxhdC5oIGIvaW5jbHVkZS9hc20tYXJtL2ZsYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjY5NDY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tYXJtL2ZsYXQuaApAQCAtMCwwICsxLDE2IEBACisvKgorICogaW5jbHVkZS9hc20tYXJtL2ZsYXQuaCAtLSB1Q2xpbnV4IGZsYXQtZm9ybWF0IGV4ZWN1dGFibGVzCisgKi8KKworI2lmbmRlZiBfX0FSTV9GTEFUX0hfXworI2RlZmluZSBfX0FSTV9GTEFUX0hfXworCisjZGVmaW5lCWZsYXRfc3RhY2tfYWxpZ24oc3ApCQkJLyogbm90aGluZyBuZWVkZWQgKi8KKyNkZWZpbmUJZmxhdF9hcmd2cF9lbnZwX29uX3N0YWNrKCkJCTEKKyNkZWZpbmUJZmxhdF9vbGRfcmFtX2ZsYWcoZmxhZ3MpCQkoZmxhZ3MpCisjZGVmaW5lCWZsYXRfcmVsb2NfdmFsaWQocmVsb2MsIHNpemUpCQkoKHJlbG9jKSA8PSAoc2l6ZSkpCisjZGVmaW5lCWZsYXRfZ2V0X2FkZHJfZnJvbV9ycChycCwgcmVsdmFsLCBmbGFncykgZ2V0X3VuYWxpZ25lZChycCkKKyNkZWZpbmUJZmxhdF9wdXRfYWRkcl9hdF9ycChycCwgdmFsLCByZWx2YWwpCXB1dF91bmFsaWduZWQodmFsLHJwKQorI2RlZmluZQlmbGF0X2dldF9yZWxvY2F0ZV9hZGRyKHJlbCkJCShyZWwpCisKKyNlbmRpZiAvKiBfX0FSTV9GTEFUX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2lvcDN4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwMThhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LmgKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiBpbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvaW9wM3h4LmgKKyAqCisgKiBJbnRlbCBJT1AzMlggYW5kIElPUDMzWCByZWdpc3RlciBkZWZpbml0aW9ucworICoKKyAqIEF1dGhvcjogUm9yeSBCb2x0IDxyb3J5Ym9sdEBwYWNiZWxsLm5ldD4KKyAqIENvcHlyaWdodCAoQykgMjAwMiBSb3J5IEJvbHQKKyAqIENvcHlyaWdodCAoQykgMjAwNCBJbnRlbCBDb3JwLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2lmbmRlZiBfX0lPUDNYWF9ICisjZGVmaW5lIF9fSU9QM1hYX0gKKworLyoKKyAqIElPUDNYWCBHUElPIGhhbmRsaW5nCisgKi8KKyNkZWZpbmUgR1BJT19JTgkJCTAKKyNkZWZpbmUgR1BJT19PVVQJCTEKKyNkZWZpbmUgR1BJT19MT1cJCTAKKyNkZWZpbmUgR1BJT19ISUdICQkxCisjZGVmaW5lIElPUDNYWF9HUElPX0xJTkUoeCkJKHgpCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCitleHRlcm4gdm9pZCBncGlvX2xpbmVfY29uZmlnKGludCBsaW5lLCBpbnQgZGlyZWN0aW9uKTsKK2V4dGVybiBpbnQgIGdwaW9fbGluZV9nZXQoaW50IGxpbmUpOworZXh0ZXJuIHZvaWQgZ3Bpb19saW5lX3NldChpbnQgbGluZSwgaW50IHZhbHVlKTsKKyNlbmRpZgorCisKKy8qCisgKiBJT1AzWFggcHJvY2Vzc29yIHJlZ2lzdGVycworICovCisjZGVmaW5lIElPUDNYWF9QRVJJUEhFUkFMX1BIWVNfQkFTRQkweGZmZmZlMDAwCisjZGVmaW5lIElPUDNYWF9QRVJJUEhFUkFMX1ZJUlRfQkFTRQkweGZlZmZlMDAwCisjZGVmaW5lIElPUDNYWF9QRVJJUEhFUkFMX1NJWkUJCTB4MDAwMDIwMDAKKyNkZWZpbmUgSU9QM1hYX1JFR19BRERSKHJlZykJCShJT1AzWFhfUEVSSVBIRVJBTF9WSVJUX0JBU0UgKyAocmVnKSkKKworLyogQWRkcmVzcyBUcmFuc2xhdGlvbiBVbml0ICAqLworI2RlZmluZSBJT1AzWFhfQVRVVklECQkodm9sYXRpbGUgdTE2ICopSU9QM1hYX1JFR19BRERSKDB4MDEwMCkKKyNkZWZpbmUgSU9QM1hYX0FUVURJRAkJKHZvbGF0aWxlIHUxNiAqKUlPUDNYWF9SRUdfQUREUigweDAxMDIpCisjZGVmaW5lIElPUDNYWF9BVFVDTUQJCSh2b2xhdGlsZSB1MTYgKilJT1AzWFhfUkVHX0FERFIoMHgwMTA0KQorI2RlZmluZSBJT1AzWFhfQVRVU1IJCSh2b2xhdGlsZSB1MTYgKilJT1AzWFhfUkVHX0FERFIoMHgwMTA2KQorI2RlZmluZSBJT1AzWFhfQVRVUklECQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEwOCkKKyNkZWZpbmUgSU9QM1hYX0FUVUNDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxMDkpCisjZGVmaW5lIElPUDNYWF9BVFVDTFNSCQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEwYykKKyNkZWZpbmUgSU9QM1hYX0FUVUxUCQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEwZCkKKyNkZWZpbmUgSU9QM1hYX0FUVUhUUgkJKHZvbGF0aWxlIHU4ICAqKUlPUDNYWF9SRUdfQUREUigweDAxMGUpCisjZGVmaW5lIElPUDNYWF9BVFVCSVNUCQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEwZikKKyNkZWZpbmUgSU9QM1hYX0lBQkFSMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxMTApCisjZGVmaW5lIElPUDNYWF9JQVVCQVIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDExNCkKKyNkZWZpbmUgSU9QM1hYX0lBQkFSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxMTgpCisjZGVmaW5lIElPUDNYWF9JQVVCQVIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDExYykKKyNkZWZpbmUgSU9QM1hYX0lBQkFSMgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxMjApCisjZGVmaW5lIElPUDNYWF9JQVVCQVIyCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDEyNCkKKyNkZWZpbmUgSU9QM1hYX0FTVklSCQkodm9sYXRpbGUgdTE2ICopSU9QM1hYX1JFR19BRERSKDB4MDEyYykKKyNkZWZpbmUgSU9QM1hYX0FTSVIJCSh2b2xhdGlsZSB1MTYgKilJT1AzWFhfUkVHX0FERFIoMHgwMTJlKQorI2RlZmluZSBJT1AzWFhfRVJCQVIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTMwKQorI2RlZmluZSBJT1AzWFhfQVRVSUxSCQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEzYykKKyNkZWZpbmUgSU9QM1hYX0FUVUlQUgkJKHZvbGF0aWxlIHU4ICAqKUlPUDNYWF9SRUdfQUREUigweDAxM2QpCisjZGVmaW5lIElPUDNYWF9BVFVNR05UCQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDEzZSkKKyNkZWZpbmUgSU9QM1hYX0FUVU1MQVQJCSh2b2xhdGlsZSB1OCAgKilJT1AzWFhfUkVHX0FERFIoMHgwMTNmKQorI2RlZmluZSBJT1AzWFhfSUFMUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTQwKQorI2RlZmluZSBJT1AzWFhfSUFUVlIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE0NCkKKyNkZWZpbmUgSU9QM1hYX0VSTFIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTQ4KQorI2RlZmluZSBJT1AzWFhfRVJUVlIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTRjKQorI2RlZmluZSBJT1AzWFhfSUFMUjEJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTUwKQorI2RlZmluZSBJT1AzWFhfSUFMUjIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTU0KQorI2RlZmluZSBJT1AzWFhfSUFUVlIyCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE1OCkKKyNkZWZpbmUgSU9QM1hYX09JT1dUVlIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTVjKQorI2RlZmluZSBJT1AzWFhfT01XVFZSMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxNjApCisjZGVmaW5lIElPUDNYWF9PVU1XVFZSMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxNjQpCisjZGVmaW5lIElPUDNYWF9PTVdUVlIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE2OCkKKyNkZWZpbmUgSU9QM1hYX09VTVdUVlIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE2YykKKyNkZWZpbmUgSU9QM1hYX09VRFdUVlIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTc4KQorI2RlZmluZSBJT1AzWFhfQVRVQ1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTgwKQorI2RlZmluZSBJT1AzWFhfUENTUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxODQpCisjZGVmaW5lIElPUDNYWF9BVFVJU1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMTg4KQorI2RlZmluZSBJT1AzWFhfQVRVSU1SCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE4YykKKyNkZWZpbmUgSU9QM1hYX0lBQkFSMwkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxOTApCisjZGVmaW5lIElPUDNYWF9JQVVCQVIzCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE5NCkKKyNkZWZpbmUgSU9QM1hYX0lBTFIzCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDE5OCkKKyNkZWZpbmUgSU9QM1hYX0lBVFZSMwkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxOWMpCisjZGVmaW5lIElPUDNYWF9PQ0NBUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxYTQpCisjZGVmaW5lIElPUDNYWF9PQ0NEUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxYWMpCisjZGVmaW5lIElPUDNYWF9QRFNDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxYmMpCisjZGVmaW5lIElPUDNYWF9QTUNBUElECQkodm9sYXRpbGUgdTggICopSU9QM1hYX1JFR19BRERSKDB4MDFjMCkKKyNkZWZpbmUgSU9QM1hYX1BNTkVYVAkJKHZvbGF0aWxlIHU4ICAqKUlPUDNYWF9SRUdfQUREUigweDAxYzEpCisjZGVmaW5lIElPUDNYWF9BUE1DUgkJKHZvbGF0aWxlIHUxNiAqKUlPUDNYWF9SRUdfQUREUigweDAxYzIpCisjZGVmaW5lIElPUDNYWF9BUE1DU1IJCSh2b2xhdGlsZSB1MTYgKilJT1AzWFhfUkVHX0FERFIoMHgwMWM0KQorI2RlZmluZSBJT1AzWFhfUENJWENBUElECSh2b2xhdGlsZSB1OCAgKilJT1AzWFhfUkVHX0FERFIoMHgwMWUwKQorI2RlZmluZSBJT1AzWFhfUENJWE5FWFQJCSh2b2xhdGlsZSB1OCAgKilJT1AzWFhfUkVHX0FERFIoMHgwMWUxKQorI2RlZmluZSBJT1AzWFhfUENJWENNRAkJKHZvbGF0aWxlIHUxNiAqKUlPUDNYWF9SRUdfQUREUigweDAxZTIpCisjZGVmaW5lIElPUDNYWF9QQ0lYU1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMWU0KQorI2RlZmluZSBJT1AzWFhfUENJSVJTUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAxZWMpCisKKy8qIE1lc3NhZ2luZyBVbml0ICAqLworI2RlZmluZSBJT1AzWFhfSU1SMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzMTApCisjZGVmaW5lIElPUDNYWF9JTVIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDMxNCkKKyNkZWZpbmUgSU9QM1hYX09NUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMzE4KQorI2RlZmluZSBJT1AzWFhfT01SMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzMWMpCisjZGVmaW5lIElPUDNYWF9JRFIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMzIwKQorI2RlZmluZSBJT1AzWFhfSUlTUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzMjQpCisjZGVmaW5lIElPUDNYWF9JSU1SCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDMyOCkKKyNkZWZpbmUgSU9QM1hYX09EUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzMmMpCisjZGVmaW5lIElPUDNYWF9PSVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDMzMCkKKyNkZWZpbmUgSU9QM1hYX09JTVIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwMzM0KQorI2RlZmluZSBJT1AzWFhfTVVDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzNTApCisjZGVmaW5lIElPUDNYWF9RQkFSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM1NCkKKyNkZWZpbmUgSU9QM1hYX0lGSFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM2MCkKKyNkZWZpbmUgSU9QM1hYX0lGVFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM2NCkKKyNkZWZpbmUgSU9QM1hYX0lQSFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM2OCkKKyNkZWZpbmUgSU9QM1hYX0lQVFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM2YykKKyNkZWZpbmUgSU9QM1hYX09GSFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM3MCkKKyNkZWZpbmUgSU9QM1hYX09GVFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM3NCkKKyNkZWZpbmUgSU9QM1hYX09QSFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM3OCkKKyNkZWZpbmUgSU9QM1hYX09QVFBSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDM3YykKKyNkZWZpbmUgSU9QM1hYX0lBUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDAzODApCisKKy8qIERNQSBDb250cm9sbGVyICAqLworI2RlZmluZSBJT1AzWFhfRE1BMF9DQ1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNDAwKQorI2RlZmluZSBJT1AzWFhfRE1BMF9DU1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNDA0KQorI2RlZmluZSBJT1AzWFhfRE1BMF9EQVIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNDBjKQorI2RlZmluZSBJT1AzWFhfRE1BMF9OREFSCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNDEwKQorI2RlZmluZSBJT1AzWFhfRE1BMF9QQURSCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNDE0KQorI2RlZmluZSBJT1AzWFhfRE1BMF9QVUFEUgkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQxOCkKKyNkZWZpbmUgSU9QM1hYX0RNQTBfTEFEUgkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQxYykKKyNkZWZpbmUgSU9QM1hYX0RNQTBfQkNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQyMCkKKyNkZWZpbmUgSU9QM1hYX0RNQTBfRENSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQyNCkKKyNkZWZpbmUgSU9QM1hYX0RNQTFfQ0NSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQ0MCkKKyNkZWZpbmUgSU9QM1hYX0RNQTFfQ1NSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQ0NCkKKyNkZWZpbmUgSU9QM1hYX0RNQTFfREFSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQ0YykKKyNkZWZpbmUgSU9QM1hYX0RNQTFfTkRBUgkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQ1MCkKKyNkZWZpbmUgSU9QM1hYX0RNQTFfUEFEUgkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDQ1NCkKKyNkZWZpbmUgSU9QM1hYX0RNQTFfUFVBRFIJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA0NTgpCisjZGVmaW5lIElPUDNYWF9ETUExX0xBRFIJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA0NWMpCisjZGVmaW5lIElPUDNYWF9ETUExX0JDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA0NjApCisjZGVmaW5lIElPUDNYWF9ETUExX0RDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA0NjQpCisKKy8qIFBlcmlwaGVyYWwgYnVzIGludGVyZmFjZSAgKi8KKyNkZWZpbmUgSU9QM1hYX1BCQ1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNjgwKQorI2RlZmluZSBJT1AzWFhfUEJJU1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNjg0KQorI2RlZmluZSBJT1AzWFhfUEJCQVIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDY4OCkKKyNkZWZpbmUgSU9QM1hYX1BCTFIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDY4YykKKyNkZWZpbmUgSU9QM1hYX1BCQkFSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA2OTApCisjZGVmaW5lIElPUDNYWF9QQkxSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA2OTQpCisjZGVmaW5lIElPUDNYWF9QQkJBUjIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNjk4KQorI2RlZmluZSBJT1AzWFhfUEJMUjIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNjljKQorI2RlZmluZSBJT1AzWFhfUEJCQVIzCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDZhMCkKKyNkZWZpbmUgSU9QM1hYX1BCTFIzCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDZhNCkKKyNkZWZpbmUgSU9QM1hYX1BCQkFSNAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA2YTgpCisjZGVmaW5lIElPUDNYWF9QQkxSNAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA2YWMpCisjZGVmaW5lIElPUDNYWF9QQkJBUjUJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNmIwKQorI2RlZmluZSBJT1AzWFhfUEJMUjUJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNmI0KQorI2RlZmluZSBJT1AzWFhfUE1CUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNmMwKQorI2RlZmluZSBJT1AzWFhfUE1CUjEJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNmUwKQorI2RlZmluZSBJT1AzWFhfUE1CUjIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNmU0KQorCisvKiBQZXJpcGhlcmFsIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAgKi8KKyNkZWZpbmUgSU9QM1hYX0dUTVIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNzAwKQorI2RlZmluZSBJT1AzWFhfRVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDcwNCkKKyNkZWZpbmUgSU9QM1hYX0VNSVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDcwOCkKKyNkZWZpbmUgSU9QM1hYX0dUU1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNzEwKQorLyogUEVSQ1IwIERPRVNOJ1QgRVhJU1QgLSBpbmRleCBmcm9tIDEhICovCisjZGVmaW5lIElPUDNYWF9QRVJDUjAJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwNzEwKQorCisvKiBHZW5lcmFsIFB1cnBvc2UgSS9PICAqLworI2RlZmluZSBJT1AzWFhfR1BPRQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9HUElPX1JFRygweDAwMDQpCisjZGVmaW5lIElPUDNYWF9HUElECQkodm9sYXRpbGUgdTMyICopSU9QM1hYX0dQSU9fUkVHKDB4MDAwOCkKKyNkZWZpbmUgSU9QM1hYX0dQT0QJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfR1BJT19SRUcoMHgwMDBjKQorCisvKiBUaW1lcnMgICovCisjZGVmaW5lIElPUDNYWF9UVV9UTVIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMDApCisjZGVmaW5lIElPUDNYWF9UVV9UTVIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMDQpCisjZGVmaW5lIElPUDNYWF9UVV9UQ1IwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMDgpCisjZGVmaW5lIElPUDNYWF9UVV9UQ1IxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMGMpCisjZGVmaW5lIElPUDNYWF9UVV9UUlIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMTApCisjZGVmaW5lIElPUDNYWF9UVV9UUlIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMTQpCisjZGVmaW5lIElPUDNYWF9UVV9USVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1RJTUVSX1JFRygweDAwMTgpCisjZGVmaW5lIElPUDNYWF9UVV9XRFRDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9USU1FUl9SRUcoMHgwMDFjKQorI2RlZmluZSBJT1AzWFhfVE1SX1RDCQkweDAxCisjZGVmaW5lIElPUDNYWF9UTVJfRU4JCTB4MDIKKyNkZWZpbmUgSU9QM1hYX1RNUl9SRUxPQUQJMHgwNAorI2RlZmluZSBJT1AzWFhfVE1SX1BSSVZJTEVHRUQJMHgwOQorI2RlZmluZSBJT1AzWFhfVE1SX1JBVElPXzFfMQkweDAwCisjZGVmaW5lIElPUDNYWF9UTVJfUkFUSU9fNF8xCTB4MTAKKyNkZWZpbmUgSU9QM1hYX1RNUl9SQVRJT184XzEJMHgyMAorI2RlZmluZSBJT1AzWFhfVE1SX1JBVElPXzE2XzEJMHgzMAorCisvKiBBcHBsaWNhdGlvbiBhY2NlbGVyYXRvciB1bml0ICAqLworI2RlZmluZSBJT1AzWFhfQUFVX0FDUgkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDA4MDApCisjZGVmaW5lIElPUDNYWF9BQVVfQVNSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgwNCkKKyNkZWZpbmUgSU9QM1hYX0FBVV9BREFSCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgwOCkKKyNkZWZpbmUgSU9QM1hYX0FBVV9BTkRBUgkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgwYykKKyNkZWZpbmUgSU9QM1hYX0FBVV9TQVIxCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgxMCkKKyNkZWZpbmUgSU9QM1hYX0FBVV9TQVIyCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgxNCkKKyNkZWZpbmUgSU9QM1hYX0FBVV9TQVIzCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgxOCkKKyNkZWZpbmUgSU9QM1hYX0FBVV9TQVI0CQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MDgxYykKKyNkZWZpbmUgSU9QM1hYX0FBVV9EQVIJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODIwKQorI2RlZmluZSBJT1AzWFhfQUFVX0FCQ1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODI0KQorI2RlZmluZSBJT1AzWFhfQUFVX0FEQ1IJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODI4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjUJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODJjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjYJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODMwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjcJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODM0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjgJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODM4KQorI2RlZmluZSBJT1AzWFhfQUFVX0VEQ1IwCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODNjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjkJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODQwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjEwCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODQ0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjExCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODQ4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjEyCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODRjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjEzCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODUwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE0CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODU0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE1CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODU4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE2CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODVjKQorI2RlZmluZSBJT1AzWFhfQUFVX0VEQ1IxCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODYwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE3CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODY0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE4CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODY4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjE5CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODZjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjIwCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODcwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjIxCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODc0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjIyCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODc4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjIzCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODdjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI0CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODgwKQorI2RlZmluZSBJT1AzWFhfQUFVX0VEQ1IyCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODg0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI1CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODg4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI2CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODhjKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI3CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODkwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI4CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODk0KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjI5CSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODk4KQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjMwCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwODljKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjMxCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwOGEwKQorI2RlZmluZSBJT1AzWFhfQUFVX1NBUjMyCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgwOGE0KQorCisvKiBJMkMgYnVzIGludGVyZmFjZSB1bml0ICAqLworI2RlZmluZSBJT1AzWFhfSUNSMAkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDE2ODApCisjZGVmaW5lIElPUDNYWF9JU1IwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MTY4NCkKKyNkZWZpbmUgSU9QM1hYX0lTQVIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MTY4OCkKKyNkZWZpbmUgSU9QM1hYX0lEQlIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MTY4YykKKyNkZWZpbmUgSU9QM1hYX0lCTVIwCQkodm9sYXRpbGUgdTMyICopSU9QM1hYX1JFR19BRERSKDB4MTY5NCkKKyNkZWZpbmUgSU9QM1hYX0lDUjEJCSh2b2xhdGlsZSB1MzIgKilJT1AzWFhfUkVHX0FERFIoMHgxNmEwKQorI2RlZmluZSBJT1AzWFhfSVNSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDE2YTQpCisjZGVmaW5lIElPUDNYWF9JU0FSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDE2YTgpCisjZGVmaW5lIElPUDNYWF9JREJSMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDE2YWMpCisjZGVmaW5lIElPUDNYWF9JQk1SMQkJKHZvbGF0aWxlIHUzMiAqKUlPUDNYWF9SRUdfQUREUigweDE2YjQpCisKKworLyoKKyAqIElPUDNYWCBJL08gYW5kIE1lbSBzcGFjZSByZWdpb25zIGZvciBQQ0kgYXV0b2NvbmZpZ3VyYXRpb24KKyAqLworI2RlZmluZSBJT1AzWFhfUENJX01FTV9XSU5ET1dfU0laRQkweDA0MDAwMDAwCisjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfTUVNX1BBCQkweDgwMDAwMDAwCisjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfTUVNX0JBCQkoKklPUDNYWF9PTVdUVlIwKQorCisjZGVmaW5lIElPUDNYWF9QQ0lfSU9fV0lORE9XX1NJWkUJMHgwMDAxMDAwMAorI2RlZmluZSBJT1AzWFhfUENJX0xPV0VSX0lPX1BBCQkweDkwMDAwMDAwCisjZGVmaW5lIElPUDNYWF9QQ0lfTE9XRVJfSU9fVkEJCTB4ZmUwMDAwMDAKKyNkZWZpbmUgSU9QM1hYX1BDSV9MT1dFUl9JT19CQQkJKCpJT1AzWFhfT0lPV1RWUikKKworCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordm9pZCBpb3AzeHhfbWFwX2lvKHZvaWQpOwordm9pZCBpb3AzeHhfaW5pdF90aW1lKHVuc2lnbmVkIGxvbmcpOwordW5zaWduZWQgbG9uZyBpb3AzeHhfZ2V0dGltZW9mZnNldCh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wM3h4X2kyYzBfZGV2aWNlOworZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgaW9wM3h4X2kyYzFfZGV2aWNlOworCitleHRlcm4gaW5saW5lIHZvaWQgaW9wM3h4X2NwNl9lbmFibGUodm9pZCkKK3sKKwl1MzIgdGVtcDsKKworCWFzbSB2b2xhdGlsZSAoCisJCSJtcmMJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCSJvcnIJJTAsICUwLCAjKDEgPDwgNilcblx0IgorCQkibWNyCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCQkibXJjCXAxNSwgMCwgJTAsIGMxNSwgYzEsIDBcblx0IgorCQkibW92CSUwLCAlMFxuXHQiCisJCSJzdWIJcGMsIHBjLCAjNFxuXHQiCisJCTogIj1yIiAodGVtcCkgKTsKK30KKworZXh0ZXJuIGlubGluZSB2b2lkIGlvcDN4eF9jcDZfZGlzYWJsZSh2b2lkKQoreworCXUzMiB0ZW1wOworCisJYXNtIHZvbGF0aWxlICgKKwkJIm1yYwlwMTUsIDAsICUwLCBjMTUsIGMxLCAwXG5cdCIKKwkJImJpYwklMCwgJTAsICMoMSA8PCA2KVxuXHQiCisJCSJtY3IJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCSJtcmMJcDE1LCAwLCAlMCwgYzE1LCBjMSwgMFxuXHQiCisJCSJtb3YJJTAsICUwXG5cdCIKKwkJInN1YglwYywgcGMsICM0XG5cdCIKKwkJOiAiPXIiICh0ZW1wKSApOworfQorI2VuZGlmCisKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvbG9jb21vLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvbG9jb21vLmgKaW5kZXggMjJkZmIxNy4uYWRhYjc3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL2xvY29tby5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9sb2NvbW8uaApAQCAtNTQsMTcgKzU0LDE4IEBACiAjZGVmaW5lCUxPQ09NT19EQUNfU0RBT0VCCTB4MDEJLyogU0RBIHBpbiBvdXRwdXQgZGF0YSAgICAgICAqLwogCiAvKiBTUEkgaW50ZXJmYWNlICovCi0jZGVmaW5lIExPQ09NT19TUElNRAkweDYwCQkvKiBTUEkgbW9kZSBzZXR0aW5nICovCi0jZGVmaW5lIExPQ09NT19TUElDVAkweDY0CQkvKiBTUEkgbW9kZSBjb250cm9sICovCi0jZGVmaW5lIExPQ09NT19TUElTVAkweDY4CQkvKiBTUEkgc3RhdHVzICovCi0jZGVmaW5lIExPQ09NT19TUElJUwkweDcwCQkvKiBTUEkgaW50ZXJydXB0IHN0YXR1cyAqLwotI2RlZmluZSBMT0NPTU9fU1BJV0UJMHg3NAkJLyogU1BJIGludGVycnVwdCBzdGF0dXMgd3JpdGUgZW5hYmxlICovCi0jZGVmaW5lIExPQ09NT19TUElJRQkweDc4CQkvKiBTUEkgaW50ZXJydXB0IGVuYWJsZSAqLwotI2RlZmluZSBMT0NPTU9fU1BJSVIJMHg3YwkJLyogU1BJIGludGVycnVwdCByZXF1ZXN0ICovCi0jZGVmaW5lIExPQ09NT19TUElURAkweDgwCQkvKiBTUEkgdHJhbnNmZXIgZGF0YSB3cml0ZSAqLwotI2RlZmluZSBMT0NPTU9fU1BJUkQJMHg4NAkJLyogU1BJIHJlY2VpdmUgZGF0YSByZWFkICovCi0jZGVmaW5lIExPQ09NT19TUElUUwkweDg4CQkvKiBTUEkgdHJhbnNmZXIgZGF0YSBzaGlmdCAqLwotI2RlZmluZSBMT0NPTU9fU1BJUlMJMHg4QwkJLyogU1BJIHJlY2VpdmUgZGF0YSBzaGlmdCAqLworI2RlZmluZSBMT0NPTU9fU1BJCTB4NjAKKyNkZWZpbmUgTE9DT01PX1NQSU1ECTB4MDAJCS8qIFNQSSBtb2RlIHNldHRpbmcgKi8KKyNkZWZpbmUgTE9DT01PX1NQSUNUCTB4MDQJCS8qIFNQSSBtb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgTE9DT01PX1NQSVNUCTB4MDgJCS8qIFNQSSBzdGF0dXMgKi8KKyNkZWZpbmUgTE9DT01PX1NQSUlTCTB4MTAJCS8qIFNQSSBpbnRlcnJ1cHQgc3RhdHVzICovCisjZGVmaW5lIExPQ09NT19TUElXRQkweDE0CQkvKiBTUEkgaW50ZXJydXB0IHN0YXR1cyB3cml0ZSBlbmFibGUgKi8KKyNkZWZpbmUgTE9DT01PX1NQSUlFCTB4MTgJCS8qIFNQSSBpbnRlcnJ1cHQgZW5hYmxlICovCisjZGVmaW5lIExPQ09NT19TUElJUgkweDFjCQkvKiBTUEkgaW50ZXJydXB0IHJlcXVlc3QgKi8KKyNkZWZpbmUgTE9DT01PX1NQSVRECTB4MjAJCS8qIFNQSSB0cmFuc2ZlciBkYXRhIHdyaXRlICovCisjZGVmaW5lIExPQ09NT19TUElSRAkweDI0CQkvKiBTUEkgcmVjZWl2ZSBkYXRhIHJlYWQgKi8KKyNkZWZpbmUgTE9DT01PX1NQSVRTCTB4MjgJCS8qIFNQSSB0cmFuc2ZlciBkYXRhIHNoaWZ0ICovCisjZGVmaW5lIExPQ09NT19TUElSUwkweDJDCQkvKiBTUEkgcmVjZWl2ZSBkYXRhIHNoaWZ0ICovCiAjZGVmaW5lCUxPQ09NT19TUElfVEVORAkoMSA8PCAzKQkvKiBUcmFuc2ZlciBlbmQgYml0ICovCiAjZGVmaW5lCUxPQ09NT19TUElfT1ZSTgkoMSA8PCAyKQkvKiBPdmVyIFJ1biBiaXQgKi8KICNkZWZpbmUJTE9DT01PX1NQSV9SRlcJKDEgPDwgMSkJLyogd3JpdGUgYnVmZmVyIGJpdCAqLwpAQCAtMTYxLDYgKzE2Miw3IEBACiAjZGVmaW5lIExPQ09NT19ERVZJRF9BVURJTwkzCiAjZGVmaW5lIExPQ09NT19ERVZJRF9MRUQJNAogI2RlZmluZSBMT0NPTU9fREVWSURfVUFSVAk1CisjZGVmaW5lIExPQ09NT19ERVZJRF9TUEkJCTYKIAogc3RydWN0IGxvY29tb19kZXYgewogCXN0cnVjdCBkZXZpY2UJZGV2OwpAQCAtMTk3LDEwICsxOTksMTEgQEAKIHZvaWQgbG9jb21vX2RyaXZlcl91bnJlZ2lzdGVyKHN0cnVjdCBsb2NvbW9fZHJpdmVyICopOwogCiAvKiBHUElPIGNvbnRyb2wgZnVuY3Rpb25zICovCi12b2lkIGxvY29tb19ncGlvX3NldF9kaXIoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyKTsKLXVuc2lnbmVkIGludCBsb2NvbW9fZ3Bpb19yZWFkX2xldmVsKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgYml0cyk7Ci11bnNpZ25lZCBpbnQgbG9jb21vX2dwaW9fcmVhZF9vdXRwdXQoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzKTsKLXZvaWQgbG9jb21vX2dwaW9fd3JpdGUoc3RydWN0IGxvY29tb19kZXYgKmxkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KTsKK3ZvaWQgbG9jb21vX2dwaW9fc2V0X2RpcihzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGlyKTsKK2ludCBsb2NvbW9fZ3Bpb19yZWFkX2xldmVsKHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdHMpOworaW50IGxvY29tb19ncGlvX3JlYWRfb3V0cHV0KHN0cnVjdCBkZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IGJpdHMpOwordm9pZCBsb2NvbW9fZ3Bpb193cml0ZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCBiaXRzLCB1bnNpZ25lZCBpbnQgc2V0KTsKKwogCiAvKiBNNjIzMzIgY29udHJvbCBmdW5jdGlvbiAqLwogdm9pZCBsb2NvbW9fbTYyMzMyX3NlbmRkYXRhKHN0cnVjdCBsb2NvbW9fZGV2ICpsZGV2LCB1bnNpZ25lZCBpbnQgZGFjX2RhdGEsIGludCBjaGFubmVsKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zaGFycHNsX3BtLmggYi9pbmNsdWRlL2FzbS1hcm0vaGFyZHdhcmUvc2hhcnBzbF9wbS5oCmluZGV4IGVjZjE1YjguLmE4MzZlNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9oYXJkd2FyZS9zaGFycHNsX3BtLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2hhcmR3YXJlL3NoYXJwc2xfcG0uaApAQCAtMjUsNiArMjUsNyBAQAogCXZvaWQgKCptZWFzdXJlX3RlbXApKGludCk7CiAJdm9pZCAoKnByZXN1c3BlbmQpKHZvaWQpOwogCXZvaWQgKCpwb3N0c3VzcGVuZCkodm9pZCk7CisJdm9pZCAoKmVhcmx5cmVzdW1lKSh2b2lkKTsKIAl1bnNpZ25lZCBsb25nICgqcmVhZF9kZXZkYXRhKShpbnQpOwogI2RlZmluZSBTSEFSUFNMX0JBVFRfVk9MVCAgICAgICAxCiAjZGVmaW5lIFNIQVJQU0xfQkFUVF9URU1QICAgICAgIDIKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9pby5oIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKaW5kZXggYmY3YjlkZS4uODA3NmE4NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL2lvLmgKQEAgLTI4MCw2ICsyODAsMTAgQEAKICNkZWZpbmUgQklPVkVDX01FUkdFQUJMRSh2ZWMxLCB2ZWMyKQlcCiAJKChidmVjX3RvX3BoeXMoKHZlYzEpKSArICh2ZWMxKS0+YnZfbGVuKSA9PSBidmVjX3RvX3BoeXMoKHZlYzIpKSkKIAorI2RlZmluZSBBUkNIX0hBU19WQUxJRF9QSFlTX0FERFJfUkFOR0UKK2V4dGVybiBpbnQgdmFsaWRfcGh5c19hZGRyX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCB2YWxpZF9tbWFwX3BoeXNfYWRkcl9yYW5nZSh1bnNpZ25lZCBsb25nIHBmbiwgc2l6ZV90IHNpemUpOworCiAvKgogICogQ29udmVydCBhIHBoeXNpY2FsIHBvaW50ZXIgdG8gYSB2aXJ0dWFsIGtlcm5lbCBwb2ludGVyIGZvciAvZGV2L21lbQogICogYWNjZXNzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vaXJxZmxhZ3MuaCBiL2luY2x1ZGUvYXNtLWFybS9pcnFmbGFncy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMDk5NzQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vaXJxZmxhZ3MuaApAQCAtMCwwICsxLDEzMiBAQAorI2lmbmRlZiBfX0FTTV9BUk1fSVJRRkxBR1NfSAorI2RlZmluZSBfX0FTTV9BUk1fSVJRRkxBR1NfSAorCisjaWZkZWYgX19LRVJORUxfXworCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCisvKgorICogQ1BVIGludGVycnVwdCBtYXNrIGhhbmRsaW5nLgorICovCisjaWYgX19MSU5VWF9BUk1fQVJDSF9fID49IDYKKworI2RlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9pcnFfc2F2ZVxuIglcCisJImNwc2lkCWkiCQkJCQkJXAorCTogIj1yIiAoeCkgOiA6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAorCX0pCisKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKSAgX19hc21fXygiY3BzaWUgaQlAIF9fc3RpIiA6IDogOiAibWVtb3J5IiwgImNjIikKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkgX19hc21fXygiY3BzaWQgaQlAIF9fY2xpIiA6IDogOiAibWVtb3J5IiwgImNjIikKKyNkZWZpbmUgbG9jYWxfZmlxX2VuYWJsZSgpICBfX2FzbV9fKCJjcHNpZSBmCUAgX19zdGYiIDogOiA6ICJtZW1vcnkiLCAiY2MiKQorI2RlZmluZSBsb2NhbF9maXFfZGlzYWJsZSgpIF9fYXNtX18oImNwc2lkIGYJQCBfX2NsZiIgOiA6IDogIm1lbW9yeSIsICJjYyIpCisKKyNlbHNlCisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdGUgJiBkaXNhYmxlIElSUXMKKyAqLworI2RlZmluZSByYXdfbG9jYWxfaXJxX3NhdmUoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAorCQkodm9pZCkgKCZ0ZW1wID09ICZ4KTsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX3NhdmVcbiIJXAorIglvcnIJJTEsICUwLCAjMTI4XG4iCQkJCQlcCisiCW1zcgljcHNyX2MsICUxIgkJCQkJXAorCTogIj1yIiAoeCksICI9ciIgKHRlbXApCQkJCQlcCisJOgkJCQkJCQlcCisJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCisJfSkKKwkKKy8qCisgKiBFbmFibGUgSVJRcworICovCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZW5hYmxlKCkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX2VuYWJsZVxuIglcCisiCWJpYwklMCwgJTAsICMxMjhcbiIJCQkJCVwKKyIJbXNyCWNwc3JfYywgJTAiCQkJCQlcCisJOiAiPXIiICh0ZW1wKQkJCQkJCVwKKwk6CQkJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKKwl9KQorCisvKgorICogRGlzYWJsZSBJUlFzCisgKi8KKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9kaXNhYmxlKCkJCQkJCVwKKwkoewkJCQkJCQlcCisJCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX2Rpc2FibGVcbiIJXAorIglvcnIJJTAsICUwLCAjMTI4XG4iCQkJCQlcCisiCW1zcgljcHNyX2MsICUwIgkJCQkJXAorCTogIj1yIiAodGVtcCkJCQkJCQlcCisJOgkJCQkJCQlcCisJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCisJfSkKKworLyoKKyAqIEVuYWJsZSBGSVFzCisgKi8KKyNkZWZpbmUgbG9jYWxfZmlxX2VuYWJsZSgpCQkJCQlcCisJKHsJCQkJCQkJXAorCQl1bnNpZ25lZCBsb25nIHRlbXA7CQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibXJzCSUwLCBjcHNyCQlAIHN0ZlxuIgkJXAorIgliaWMJJTAsICUwLCAjNjRcbiIJCQkJCVwKKyIJbXNyCWNwc3JfYywgJTAiCQkJCQlcCisJOiAiPXIiICh0ZW1wKQkJCQkJCVwKKwk6CQkJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKKwl9KQorCisvKgorICogRGlzYWJsZSBGSVFzCisgKi8KKyNkZWZpbmUgbG9jYWxfZmlxX2Rpc2FibGUoKQkJCQkJXAorCSh7CQkJCQkJCVwKKwkJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBjbGZcbiIJCVwKKyIJb3JyCSUwLCAlMCwgIzY0XG4iCQkJCQlcCisiCW1zcgljcHNyX2MsICUwIgkJCQkJXAorCTogIj1yIiAodGVtcCkJCQkJCQlcCisJOgkJCQkJCQlcCisJOiAibWVtb3J5IiwgImNjIik7CQkJCQlcCisJfSkKKworI2VuZGlmCisKKy8qCisgKiBTYXZlIHRoZSBjdXJyZW50IGludGVycnVwdCBlbmFibGUgc3RhdGUuCisgKi8KKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCVwKKwkoewkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCisJIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9zYXZlX2ZsYWdzIglcCisJOiAiPXIiICh4KSA6IDogIm1lbW9yeSIsICJjYyIpOwkJCQlcCisJfSkKKworLyoKKyAqIHJlc3RvcmUgc2F2ZWQgSVJRICYgRklRIHN0YXRlCisgKi8KKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHgpCQkJCVwKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKKwkibXNyCWNwc3JfYywgJTAJCUAgbG9jYWxfaXJxX3Jlc3RvcmVcbiIJXAorCToJCQkJCQkJXAorCTogInIiICh4KQkJCQkJCVwKKwk6ICJtZW1vcnkiLCAiY2MiKQorCisjZGVmaW5lIHJhd19pcnFzX2Rpc2FibGVkX2ZsYWdzKGZsYWdzKQlcCisoewkJCQkJXAorCShpbnQpKChmbGFncykgJiBQU1JfSV9CSVQpOwlcCit9KQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvcGNpLmggYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaAppbmRleCA5MjNlMGNhLi4yNDYyMWM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC9wY2kuaApAQCAtNTIsMTMgKzUyLDkgQEAKIC8qCiAgKiBQQ0kgY29udHJvbGxlcnMKICAqLwotZXh0ZXJuIGludCBpb3AzMjFfc2V0dXAoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOwotZXh0ZXJuIHN0cnVjdCBwY2lfYnVzICppb3AzMjFfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOwotZXh0ZXJuIHZvaWQgaW9wMzIxX2luaXQodm9pZCk7Ci0KLWV4dGVybiBpbnQgaW9wMzMxX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKLWV4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqaW9wMzMxX3NjYW5fYnVzKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKLWV4dGVybiB2b2lkIGlvcDMzMV9pbml0KHZvaWQpOworZXh0ZXJuIGludCBpb3AzeHhfcGNpX3NldHVwKGludCBuciwgc3RydWN0IHBjaV9zeXNfZGF0YSAqKTsKK2V4dGVybiBzdHJ1Y3QgcGNpX2J1cyAqaW9wM3h4X3BjaV9zY2FuX2J1cyhpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CitleHRlcm4gdm9pZCBpb3AzeHhfcGNpX3ByZWluaXQodm9pZCk7CiAKIGV4dGVybiBpbnQgZGMyMTI4NV9zZXR1cChpbnQgbnIsIHN0cnVjdCBwY2lfc3lzX2RhdGEgKik7CiBleHRlcm4gc3RydWN0IHBjaV9idXMgKmRjMjEyODVfc2Nhbl9idXMoaW50IG5yLCBzdHJ1Y3QgcGNpX3N5c19kYXRhICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oIGIvaW5jbHVkZS9hc20tYXJtL21hY2gvdGltZS5oCmluZGV4IGRlZTBiYzMuLjFlYjkzZjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9tYWNoL3RpbWUuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vbWFjaC90aW1lLmgKQEAgLTM4LDcgKzM4LDkgQEAKIAl2b2lkCQkJKCppbml0KSh2b2lkKTsKIAl2b2lkCQkJKCpzdXNwZW5kKSh2b2lkKTsKIAl2b2lkCQkJKCpyZXN1bWUpKHZvaWQpOworI2lmbmRlZiBDT05GSUdfR0VORVJJQ19USU1FCiAJdW5zaWduZWQgbG9uZwkJKCpvZmZzZXQpKHZvaWQpOworI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfTk9fSURMRV9IWgogCXN0cnVjdCBkeW5fdGlja190aW1lcgkqZHluX3RpY2s7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BhZ2UuaAppbmRleCAwMmJkM2VlLi43ZTg1ZGI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGFnZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wYWdlLmgKQEAgLTE3NCw5ICsxNzQsNiBAQAogCiAjZW5kaWYgLyogU1RSSUNUX01NX1RZUEVDSEVDS1MgKi8KIAotLyogdGhlIHVwcGVyLW1vc3QgcGFnZSB0YWJsZSBwb2ludGVyICovCi1leHRlcm4gcG1kX3QgKnRvcF9wbWQ7Ci0KICNlbmRpZiAvKiBDT05GSUdfTU1VICovCiAKICNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20tYXJtL3BndGFibGUuaAppbmRleCA0ZDEwZDMxLi5lZDhjYjU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wZ3RhYmxlLmgKQEAgLTEzNiw2ICsxMzYsMTMgQEAKICNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QJKChUQVNLX1NJWkUvUEdESVJfU0laRSkgLSBGSVJTVF9VU0VSX1BHRF9OUikKIAogLyoKKyAqIHNlY3Rpb24gYWRkcmVzcyBtYXNrIGFuZCBzaXplIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIFNFQ1RJT05fU0hJRlQJCTIwCisjZGVmaW5lIFNFQ1RJT05fU0laRQkJKDFVTCA8PCBTRUNUSU9OX1NISUZUKQorI2RlZmluZSBTRUNUSU9OX01BU0sJCSh+KFNFQ1RJT05fU0laRS0xKSkKKworLyoKICAqIEFSTXY2IHN1cGVyc2VjdGlvbiBhZGRyZXNzIG1hc2sgYW5kIHNpemUgZGVmaW5pdGlvbnMuCiAgKi8KICNkZWZpbmUgU1VQRVJTRUNUSU9OX1NISUZUCTI0CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vcHJvYy1mbnMuaCBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCmluZGV4IDFiZGU5MmMuLmVhN2U1NGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS9wcm9jLWZucy5oCkBAIC0zMyw2ICszMywxNCBAQAogIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNgogIyAgZW5kaWYKICMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk03VERNSQorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtN3RkbWkKKyMgIGVuZGlmCisjIGVuZGlmCiAjIGlmZGVmIENPTkZJR19DUFVfQVJNNzEwCiAjICBpZmRlZiBDUFVfTkFNRQogIyAgIHVuZGVmICBNVUxUSV9DUFUKQEAgLTQ5LDYgKzU3LDIyIEBACiAjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm03MjAKICMgIGVuZGlmCiAjIGVuZGlmCisjIGlmZGVmIENPTkZJR19DUFVfQVJNNzQwVAorIyAgaWZkZWYgQ1BVX05BTUUKKyMgICB1bmRlZiAgTVVMVElfQ1BVCisjICAgZGVmaW5lIE1VTFRJX0NQVQorIyAgZWxzZQorIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtNzQwCisjICBlbmRpZgorIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTlURE1JCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05dGRtaQorIyAgZW5kaWYKKyMgZW5kaWYKICMgaWZkZWYgQ09ORklHX0NQVV9BUk05MjBUCiAjICBpZmRlZiBDUFVfTkFNRQogIyAgIHVuZGVmICBNVUxUSV9DUFUKQEAgLTgxLDYgKzEwNSwyMiBAQAogIyAgIGRlZmluZSBDUFVfTkFNRSBjcHVfYXJtOTI2CiAjICBlbmRpZgogIyBlbmRpZgorIyBpZmRlZiBDT05GSUdfQ1BVX0FSTTk0MFQKKyMgIGlmZGVmIENQVV9OQU1FCisjICAgdW5kZWYgIE1VTFRJX0NQVQorIyAgIGRlZmluZSBNVUxUSV9DUFUKKyMgIGVsc2UKKyMgICBkZWZpbmUgQ1BVX05BTUUgY3B1X2FybTk0MAorIyAgZW5kaWYKKyMgZW5kaWYKKyMgaWZkZWYgQ09ORklHX0NQVV9BUk05NDZFCisjICBpZmRlZiBDUFVfTkFNRQorIyAgIHVuZGVmICBNVUxUSV9DUFUKKyMgICBkZWZpbmUgTVVMVElfQ1BVCisjICBlbHNlCisjICAgZGVmaW5lIENQVV9OQU1FIGNwdV9hcm05NDYKKyMgIGVuZGlmCisjIGVuZGlmCiAjIGlmZGVmIENPTkZJR19DUFVfU0ExMTAKICMgIGlmZGVmIENQVV9OQU1FCiAjICAgdW5kZWYgIE1VTFRJX0NQVQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3NldHVwLmggYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAppbmRleCBlYTNlZDI0Li5hYTRiNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc2V0dXAuaApAQCAtMTk0LDEzICsxOTQsMTUgQEAKICMgZGVmaW5lIE5SX0JBTktTIDgKICNlbmRpZgogCitzdHJ1Y3QgbWVtYmFuayB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJaW50ICAgICAgICAgICBub2RlOworfTsKKwogc3RydWN0IG1lbWluZm8gewogCWludCBucl9iYW5rczsKLQlzdHJ1Y3QgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0OwotCQl1bnNpZ25lZCBsb25nIHNpemU7Ci0JCWludCAgICAgICAgICAgbm9kZTsKLQl9IGJhbmtbTlJfQkFOS1NdOworCXN0cnVjdCBtZW1iYW5rIGJhbmtbTlJfQkFOS1NdOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKaW5kZXggMDFiN2MyNi4uODYxMDkyZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3NwaW5sb2NrLmgKQEAgLTIxOCw0ICsyMTgsOCBAQAogLyogcmVhZF9jYW5fbG9jayAtIHdvdWxkIHJlYWRfdHJ5bG9jaygpIHN1Y2NlZWQ/ICovCiAjZGVmaW5lIF9fcmF3X3JlYWRfY2FuX2xvY2soeCkJCSgoeCktPmxvY2sgPCAweDgwMDAwMDAwKQogCisjZGVmaW5lIF9yYXdfc3Bpbl9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorCiAjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tYXJtL3N5c3RlbS5oCmluZGV4IDA5NDdjYmYuLmYwNWZiZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybS9zeXN0ZW0uaAorKysgYi9pbmNsdWRlL2FzbS1hcm0vc3lzdGVtLmgKQEAgLTQ2LDYgKzQ2LDcgQEAKICNkZWZpbmUgQ1BVSURfVENNCTIKICNkZWZpbmUgQ1BVSURfVExCVFlQRQkzCiAKKyNpZmRlZiBDT05GSUdfQ1BVX0NQMTUKICNkZWZpbmUgcmVhZF9jcHVpZChyZWcpCQkJCQkJCVwKIAkoewkJCQkJCQkJXAogCQl1bnNpZ25lZCBpbnQgX192YWw7CQkJCQlcCkBAIC01NSw2ICs1Niw5IEBACiAJCSAgICA6ICJjYyIpOwkJCQkJCVwKIAkJX192YWw7CQkJCQkJCVwKIAl9KQorI2Vsc2UKKyNkZWZpbmUgcmVhZF9jcHVpZChyZWcpIChwcm9jZXNzb3JfaWQpCisjZW5kaWYKIAogLyoKICAqIFRoaXMgaXMgdXNlZCB0byBlbnN1cmUgdGhlIGNvbXBpbGVyIGRpZCBhY3R1YWxseSBhbGxvY2F0ZSB0aGUgcmVnaXN0ZXIgd2UKQEAgLTIwNywxMzAgKzIxMSw3IEBACiB7CiB9CiAKLS8qCi0gKiBDUFUgaW50ZXJydXB0IG1hc2sgaGFuZGxpbmcuCi0gKi8KLSNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPj0gNgotCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCQkJCQlcCi0JKHsJCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX3NhdmVcbiIJXAotCSJjcHNpZAlpIgkJCQkJCVwKLQk6ICI9ciIgKHgpIDogOiAibWVtb3J5IiwgImNjIik7CQkJCVwKLQl9KQotCi0jZGVmaW5lIGxvY2FsX2lycV9lbmFibGUoKSAgX19hc21fXygiY3BzaWUgaQlAIF9fc3RpIiA6IDogOiAibWVtb3J5IiwgImNjIikKLSNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKSBfX2FzbV9fKCJjcHNpZCBpCUAgX19jbGkiIDogOiA6ICJtZW1vcnkiLCAiY2MiKQotI2RlZmluZSBsb2NhbF9maXFfZW5hYmxlKCkgIF9fYXNtX18oImNwc2llIGYJQCBfX3N0ZiIgOiA6IDogIm1lbW9yeSIsICJjYyIpCi0jZGVmaW5lIGxvY2FsX2ZpcV9kaXNhYmxlKCkgX19hc21fXygiY3BzaWQgZglAIF9fY2xmIiA6IDogOiAibWVtb3J5IiwgImNjIikKLQotI2Vsc2UKLQotLyoKLSAqIFNhdmUgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVuYWJsZSBzdGF0ZSAmIGRpc2FibGUgSVJRcwotICovCi0jZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCQkJCQlcCi0JKHsJCQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIHRlbXA7CQkJCVwKLQkJKHZvaWQpICgmdGVtcCA9PSAmeCk7CQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkibXJzCSUwLCBjcHNyCQlAIGxvY2FsX2lycV9zYXZlXG4iCVwKLSIJb3JyCSUxLCAlMCwgIzEyOFxuIgkJCQkJXAotIgltc3IJY3Bzcl9jLCAlMSIJCQkJCVwKLQk6ICI9ciIgKHgpLCAiPXIiICh0ZW1wKQkJCQkJXAotCToJCQkJCQkJXAotCTogIm1lbW9yeSIsICJjYyIpOwkJCQkJXAotCX0pCi0JCi0vKgotICogRW5hYmxlIElSUXMKLSAqLwotI2RlZmluZSBsb2NhbF9pcnFfZW5hYmxlKCkJCQkJCVwKLQkoewkJCQkJCQlcCi0JCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfaXJxX2VuYWJsZVxuIglcCi0iCWJpYwklMCwgJTAsICMxMjhcbiIJCQkJCVwKLSIJbXNyCWNwc3JfYywgJTAiCQkJCQlcCi0JOiAiPXIiICh0ZW1wKQkJCQkJCVwKLQk6CQkJCQkJCVwKLQk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKLQl9KQotCi0vKgotICogRGlzYWJsZSBJUlFzCi0gKi8KLSNkZWZpbmUgbG9jYWxfaXJxX2Rpc2FibGUoKQkJCQkJXAotCSh7CQkJCQkJCVwKLQkJdW5zaWduZWQgbG9uZyB0ZW1wOwkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIm1ycwklMCwgY3BzcgkJQCBsb2NhbF9pcnFfZGlzYWJsZVxuIglcCi0iCW9ycgklMCwgJTAsICMxMjhcbiIJCQkJCVwKLSIJbXNyCWNwc3JfYywgJTAiCQkJCQlcCi0JOiAiPXIiICh0ZW1wKQkJCQkJCVwKLQk6CQkJCQkJCVwKLQk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKLQl9KQotCi0vKgotICogRW5hYmxlIEZJUXMKLSAqLwotI2RlZmluZSBsb2NhbF9maXFfZW5hYmxlKCkJCQkJCVwKLQkoewkJCQkJCQlcCi0JCXVuc2lnbmVkIGxvbmcgdGVtcDsJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCSJtcnMJJTAsIGNwc3IJCUAgc3RmXG4iCQlcCi0iCWJpYwklMCwgJTAsICM2NFxuIgkJCQkJXAotIgltc3IJY3Bzcl9jLCAlMCIJCQkJCVwKLQk6ICI9ciIgKHRlbXApCQkJCQkJXAotCToJCQkJCQkJXAotCTogIm1lbW9yeSIsICJjYyIpOwkJCQkJXAotCX0pCi0KLS8qCi0gKiBEaXNhYmxlIEZJUXMKLSAqLwotI2RlZmluZSBsb2NhbF9maXFfZGlzYWJsZSgpCQkJCQlcCi0JKHsJCQkJCQkJXAotCQl1bnNpZ25lZCBsb25nIHRlbXA7CQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCVwKLQkibXJzCSUwLCBjcHNyCQlAIGNsZlxuIgkJXAotIglvcnIJJTAsICUwLCAjNjRcbiIJCQkJCVwKLSIJbXNyCWNwc3JfYywgJTAiCQkJCQlcCi0JOiAiPXIiICh0ZW1wKQkJCQkJCVwKLQk6CQkJCQkJCVwKLQk6ICJtZW1vcnkiLCAiY2MiKTsJCQkJCVwKLQl9KQotCi0jZW5kaWYKLQotLyoKLSAqIFNhdmUgdGhlIGN1cnJlbnQgaW50ZXJydXB0IGVuYWJsZSBzdGF0ZS4KLSAqLwotI2RlZmluZSBsb2NhbF9zYXZlX2ZsYWdzKHgpCQkJCQlcCi0JKHsJCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAotCSJtcnMJJTAsIGNwc3IJCUAgbG9jYWxfc2F2ZV9mbGFncyIJXAotCTogIj1yIiAoeCkgOiA6ICJtZW1vcnkiLCAiY2MiKTsJCQkJXAotCX0pCi0KLS8qCi0gKiByZXN0b3JlIHNhdmVkIElSUSAmIEZJUSBzdGF0ZQotICovCi0jZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQlcCi0JIm1zcgljcHNyX2MsICUwCQlAIGxvY2FsX2lycV9yZXN0b3JlXG4iCVwKLQk6CQkJCQkJCVwKLQk6ICJyIiAoeCkJCQkJCQlcCi0JOiAibWVtb3J5IiwgImNjIikKLQotI2RlZmluZSBpcnFzX2Rpc2FibGVkKCkJCQlcCi0oewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCi0JbG9jYWxfc2F2ZV9mbGFncyhmbGFncyk7CVwKLQkoaW50KShmbGFncyAmIFBTUl9JX0JJVCk7CVwKLX0pCisjaW5jbHVkZSA8bGludXgvaXJxZmxhZ3MuaD4KIAogI2lmZGVmIENPTkZJR19TTVAKIApAQCAtNDA1LDE3ICsyODYsMTcgQEAKICNlcnJvciBTTVAgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtCiAjZW5kaWYKIAljYXNlIDE6Ci0JCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwkJcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkJcmV0ID0gKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopcHRyOwogCQkqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilwdHIgPSB4OwotCQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisJCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiAJCWJyZWFrOwogCiAJY2FzZSA0OgotCQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJCXJldCA9ICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyAqKXB0cjsKIAkJKih2b2xhdGlsZSB1bnNpZ25lZCBsb25nICopcHRyID0geDsKLQkJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCQlyYXdfbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCQlicmVhazsKICNlbHNlCiAJY2FzZSAxOgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tYXJtL3RpbWVvZmRheS5oIGIvaW5jbHVkZS9hc20tYXJtL3RpbWVvZmRheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3MjU0YmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1hcm0vdGltZW9mZGF5LmgKQEAgLTAsMCArMSw0IEBACisjaWZuZGVmIF9BU01fQVJNX1RJTUVPRkRBWV9ICisjZGVmaW5lIF9BU01fQVJNX1RJTUVPRkRBWV9ICisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvdGltZW9mZGF5Lmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWFybS90bGJmbHVzaC5oIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKaW5kZXggZDk3ZmM3Ni4uY2QxMGEwYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tYXJtL3RsYmZsdXNoLmgKQEAgLTI0NywxNiArMjQ3LDE2IEBACiAJY29uc3QgdW5zaWduZWQgaW50IF9fdGxiX2ZsYWcgPSBfX2NwdV90bGJfZmxhZ3M7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1dCKSkKLQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAKIAlpZiAodGxiX2ZsYWcoVExCX1YzX0ZVTEwpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAoemVybykpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNF9VX0ZVTEwgfCBUTEJfVjZfVV9GVUxMKSkKLQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDAiIDogOiAiciIgKHplcm8pKTsKKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCWlmICh0bGJfZmxhZyhUTEJfVjRfRF9GVUxMIHwgVExCX1Y2X0RfRlVMTCkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAwIiA6IDogInIiICh6ZXJvKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNiwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCB8IFRMQl9WNl9JX0ZVTEwpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBsb2NhbF9mbHVzaF90bGJfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pCkBAIC0yNjYsMjUgKzI2NiwyNSBAQAogCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCiAJaWYgKGNwdV9pc3NldChzbXBfcHJvY2Vzc29yX2lkKCksIG1tLT5jcHVfdm1fbWFzaykpIHsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WM19GVUxMKSkKLQkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiICh6ZXJvKSk7CisJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9GVUxMKSkKLQkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM3LCAwIiA6IDogInIiICh6ZXJvKSk7CisJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzcsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfRF9GVUxMKSkKLQkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM2LCAwIiA6IDogInIiICh6ZXJvKSk7CisJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzYsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfSV9GVUxMKSkKLQkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSk7CisJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDAiIDogOiAiciIgKHplcm8pIDogImNjIik7CiAJfQogCiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX0FTSUQpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNywgMiIgOiA6ICJyIiAoYXNpZCkpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzcsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9EX0FTSUQpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNiwgMiIgOiA6ICJyIiAoYXNpZCkpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzYsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9JX0FTSUQpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMiIgOiA6ICJyIiAoYXNpZCkpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDIiIDogOiAiciIgKGFzaWQpIDogImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjk2LDI3ICsyOTYsMjcgQEAKIAl1YWRkciA9ICh1YWRkciAmIFBBR0VfTUFTSykgfCBBU0lEKHZtYS0+dm1fbW0pOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSk7CiAKIAlpZiAoY3B1X2lzc2V0KHNtcF9wcm9jZXNzb3JfaWQoKSwgdm1hLT52bV9tbS0+Y3B1X3ZtX21hc2spKSB7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjNfUEFHRSkpCi0JCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAodWFkZHIpKTsKKwkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM2LCBjMCwgMCIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CiAJCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9QQUdFKSkKLQkJCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM3LCAxIiA6IDogInIiICh1YWRkcikpOworCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM3LCAxIiA6IDogInIiICh1YWRkcikgOiAiY2MiKTsKIAkJaWYgKHRsYl9mbGFnKFRMQl9WNF9EX1BBR0UpKQotCQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzYsIDEiIDogOiAiciIgKHVhZGRyKSk7CisJCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzYsIDEiIDogOiAiciIgKHVhZGRyKSA6ICJjYyIpOwogCQlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfUEFHRSkpCi0JCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpKTsKKwkJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMSIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CiAJCWlmICghdGxiX2ZsYWcoVExCX1Y0X0lfUEFHRSkgJiYgdGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCi0JCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykpOworCQkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogCX0KIAogCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9QQUdFKSkKLQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDEiIDogOiAiciIgKHVhZGRyKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMSIgOiA6ICJyIiAodWFkZHIpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9EX1BBR0UpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNiwgMSIgOiA6ICJyIiAodWFkZHIpKTsKKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiICh1YWRkcikgOiAiY2MiKTsKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiICh1YWRkcikpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKHVhZGRyKSA6ICJjYyIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfZmx1c2hfdGxiX2tlcm5lbF9wYWdlKHVuc2lnbmVkIGxvbmcga2FkZHIpCkBAIC0zMjcsMzEgKzMyNywzMSBAQAogCWthZGRyICY9IFBBR0VfTUFTSzsKIAogCWlmICh0bGJfZmxhZyhUTEJfV0IpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM3LCBjMTAsIDQiIDogOiAiciIgKHplcm8pKTsKKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjNfUEFHRSkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzYsIGMwLCAwIiA6IDogInIiIChrYWRkcikpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNiwgYzAsIDAiIDogOiAiciIgKGthZGRyKSA6ICJjYyIpOwogCWlmICh0bGJfZmxhZyhUTEJfVjRfVV9QQUdFKSkKLQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDEiIDogOiAiciIgKGthZGRyKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMSIgOiA6ICJyIiAoa2FkZHIpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNF9EX1BBR0UpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNiwgMSIgOiA6ICJyIiAoa2FkZHIpKTsKKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiIChrYWRkcikgOiAiY2MiKTsKIAlpZiAodGxiX2ZsYWcoVExCX1Y0X0lfUEFHRSkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiIChrYWRkcikpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKGthZGRyKSA6ICJjYyIpOwogCWlmICghdGxiX2ZsYWcoVExCX1Y0X0lfUEFHRSkgJiYgdGxiX2ZsYWcoVExCX1Y0X0lfRlVMTCkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAwIiA6IDogInIiICh6ZXJvKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNSwgMCIgOiA6ICJyIiAoemVybykgOiAiY2MiKTsKIAogCWlmICh0bGJfZmxhZyhUTEJfVjZfVV9QQUdFKSkKLQkJYXNtKCJtY3IlPyBwMTUsIDAsICUwLCBjOCwgYzcsIDEiIDogOiAiciIgKGthZGRyKSk7CisJCWFzbSgibWNyIHAxNSwgMCwgJTAsIGM4LCBjNywgMSIgOiA6ICJyIiAoa2FkZHIpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9EX1BBR0UpKQotCQlhc20oIm1jciU/IHAxNSwgMCwgJTAsIGM4LCBjNiwgMSIgOiA6ICJyIiAoa2FkZHIpKTsKKwkJYXNtKCJtY3IgcDE1LCAwLCAlMCwgYzgsIGM2LCAxIiA6IDogInIiIChrYWRkcikgOiAiY2MiKTsKIAlpZiAodGxiX2ZsYWcoVExCX1Y2X0lfUEFHRSkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzgsIGM1LCAxIiA6IDogInIiIChrYWRkcikpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjOCwgYzUsIDEiIDogOiAiciIgKGthZGRyKSA6ICJjYyIpOwogCiAJLyogVGhlIEFSTSBBUk0gc3RhdGVzIHRoYXQgdGhlIGNvbXBsZXRpb24gb2YgYSBUTEIgbWFpbnRlbmFuY2UKIAkgKiBvcGVyYXRpb24gaXMgb25seSBndWFyYW50ZWVkIGJ5IGEgRFNCIGluc3RydWN0aW9uCiAJICovCiAJaWYgKHRsYl9mbGFnKFRMQl9WNl9VX1BBR0UgfCBUTEJfVjZfRF9QQUdFIHwgVExCX1Y2X0lfUEFHRSkpCi0JCWFzbSgibWNyJT8gcDE1LCAwLCAlMCwgYzcsIGMxMCwgNCIgOiA6ICJyIiAoemVybykpOworCQlhc20oIm1jciBwMTUsIDAsICUwLCBjNywgYzEwLCA0IiA6IDogInIiICh6ZXJvKSA6ICJjYyIpOwogfQogCiAvKgpAQCAtMzczLDExICszNzMsMTEgQEAKIAljb25zdCB1bnNpZ25lZCBpbnQgX190bGJfZmxhZyA9IF9fY3B1X3RsYl9mbGFnczsKIAogCWlmICh0bGJfZmxhZyhUTEJfRENMRUFOKSkKLQkJYXNtKCJtY3IlPwlwMTUsIDAsICUwLCBjNywgYzEwLCAxCUAgZmx1c2hfcG1kIgotCQkJOiA6ICJyIiAocG1kKSk7CisJCWFzbSgibWNyCXAxNSwgMCwgJTAsIGM3LCBjMTAsIDEJQCBmbHVzaF9wbWQiCisJCQk6IDogInIiIChwbWQpIDogImNjIik7CiAJaWYgKHRsYl9mbGFnKFRMQl9XQikpCi0JCWFzbSgibWNyJT8JcDE1LCAwLCAlMCwgYzcsIGMxMCwgNAlAIGZsdXNoX3BtZCIKLQkJCTogOiAiciIgKHplcm8pKTsKKwkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgNAlAIGZsdXNoX3BtZCIKKwkJCTogOiAiciIgKHplcm8pIDogImNjIik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhbl9wbWRfZW50cnkocG1kX3QgKnBtZCkKQEAgLTM4NSw4ICszODUsOCBAQAogCWNvbnN0IHVuc2lnbmVkIGludCBfX3RsYl9mbGFnID0gX19jcHVfdGxiX2ZsYWdzOwogCiAJaWYgKHRsYl9mbGFnKFRMQl9EQ0xFQU4pKQotCQlhc20oIm1jciU/CXAxNSwgMCwgJTAsIGM3LCBjMTAsIDEJQCBmbHVzaF9wbWQiCi0JCQk6IDogInIiIChwbWQpKTsKKwkJYXNtKCJtY3IJcDE1LCAwLCAlMCwgYzcsIGMxMCwgMQlAIGZsdXNoX3BtZCIKKwkJCTogOiAiciIgKHBtZCkgOiAiY2MiKTsKIH0KIAogI3VuZGVmIHRsYl9mbGFnCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5hbGlnbmVkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5hbGlnbmVkLmgKaW5kZXggMWIzOWMyZi4uNzk1YjllNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3VuYWxpZ25lZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmFsaWduZWQuaApAQCAtMyw3ICszLDcgQEAKIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1leHRlcm4gaW50IF9fYnVnX3VuYWxpZ25lZF94KHZvaWQgKnB0cik7CitleHRlcm4gaW50IF9fYnVnX3VuYWxpZ25lZF94KGNvbnN0IHZvaWQgKnB0cik7CiAKIC8qCiAgKiBXaGF0IGlzIHRoZSBtb3N0IGVmZmljaWVudCB3YXkgb2YgbG9hZGluZy9zdG9yaW5nIGFuIHVuYWxpZ25lZCB2YWx1ZT8KQEAgLTUxLDQ0ICs1MSwzMiBAQAogI2RlZmluZSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApCQkJCQlcCiAJKF9fcFswXSA8PCAyNCB8IF9fcFsxXSA8PCAxNiB8IF9fcFsyXSA8PCA4IHwgX19wWzNdKQogCi0jZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9sZShwdHIpCQkJCQlcCi0JKHsJCQkJCQkJXAotCQlfX3R5cGVvZl9fKCoocHRyKSkgX192OwkJCQlcCi0JCV9fdTggKl9fcCA9IChfX3U4ICopKHB0cik7CQkJXAotCQlzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7CQkJXAotCQljYXNlIDE6CV9fdiA9ICoocHRyKTsJCQlicmVhazsJXAotCQljYXNlIDI6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCk7CWJyZWFrOwlcCi0JCWNhc2UgNDogX192ID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKTsJYnJlYWs7CVwKLQkJY2FzZSA4OiB7CQkJCQlcCi0JCQkJdW5zaWduZWQgaW50IF9fdjEsIF9fdjI7CVwKLQkJCQlfX3YyID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoKF9fcCs0KSk7IFwKLQkJCQlfX3YxID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKTsJXAotCQkJCV9fdiA9ICgodW5zaWduZWQgbG9uZyBsb25nKV9fdjIgPDwgMzIgfCBfX3YxKTsJXAotCQkJfQkJCQkJXAotCQkJYnJlYWs7CQkJCQlcCi0JCWRlZmF1bHQ6IF9fdiA9IF9fYnVnX3VuYWxpZ25lZF94KF9fcCk7CWJyZWFrOwlcCi0JCX0JCQkJCQlcCi0JCV9fdjsJCQkJCQlcCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF84X2xlKF9fcCkJCQkJCVwKKwkoKHVuc2lnbmVkIGxvbmcgbG9uZylfX2dldF91bmFsaWduZWRfNF9sZSgoX19wKzQpKSA8PCAzMiB8CVwKKwkJX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKSkKKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfOF9iZShfX3ApCQkJCQlcCisJKCh1bnNpZ25lZCBsb25nIGxvbmcpX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKSA8PCAzMiB8CQlcCisJCV9fZ2V0X3VuYWxpZ25lZF80X2JlKChfX3ArNCkpKQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9sZShwdHIpCQkJCQkJXAorCSh7CQkJCQkJCQlcCisJCWNvbnN0IF9fdTggKl9fcCA9IChjb25zdCBfX3U4ICopKHB0cik7CQkJXAorCQlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gMSwgKl9fcCwJXAorCQkgIF9fYnVpbHRpbl9jaG9vc2VfZXhwcihzaXplb2YoKihwdHIpKSA9PSAyLCBfX2dldF91bmFsaWduZWRfMl9sZShfX3ApLAlcCisJCSAgX19idWlsdGluX2Nob29zZV9leHByKHNpemVvZigqKHB0cikpID09IDQsIF9fZ2V0X3VuYWxpZ25lZF80X2xlKF9fcCksCVwKKwkJICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gOCwgX19nZXRfdW5hbGlnbmVkXzhfbGUoX19wKSwJXAorCQkgICAgKHZvaWQpX19idWdfdW5hbGlnbmVkX3goX19wKSkpKSk7CQkJXAogCX0pCiAKLSNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2JlKHB0cikJCQkJCVwKLQkoewkJCQkJCQlcCi0JCV9fdHlwZW9mX18oKihwdHIpKSBfX3Y7CQkJCVwKLQkJX191OCAqX19wID0gKF9fdTggKikocHRyKTsJCQlcCi0JCXN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsJCQlcCi0JCWNhc2UgMToJX192ID0gKihwdHIpOwkJCWJyZWFrOwlcCi0JCWNhc2UgMjogX192ID0gX19nZXRfdW5hbGlnbmVkXzJfYmUoX19wKTsJYnJlYWs7CVwKLQkJY2FzZSA0OiBfX3YgPSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApOwlicmVhazsJXAotCQljYXNlIDg6IHsJCQkJCVwKLQkJCQl1bnNpZ25lZCBpbnQgX192MSwgX192MjsJXAotCQkJCV9fdjIgPSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApOyBcCi0JCQkJX192MSA9IF9fZ2V0X3VuYWxpZ25lZF80X2JlKChfX3ArNCkpOwlcCi0JCQkJX192ID0gKCh1bnNpZ25lZCBsb25nIGxvbmcpX192MiA8PCAzMiB8IF9fdjEpOwlcCi0JCQl9CQkJCQlcCi0JCQlicmVhazsJCQkJCVwKLQkJZGVmYXVsdDogX192ID0gX19idWdfdW5hbGlnbmVkX3goX19wKTsJYnJlYWs7CVwKLQkJfQkJCQkJCVwKLQkJX192OwkJCQkJCVwKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkX2JlKHB0cikJCQkJCQlcCisJKHsJCQkJCQkJCVwKKwkJY29uc3QgX191OCAqX19wID0gKGNvbnN0IF9fdTggKikocHRyKTsJCQlcCisJCV9fYnVpbHRpbl9jaG9vc2VfZXhwcihzaXplb2YoKihwdHIpKSA9PSAxLCAqX19wLAlcCisJCSAgX19idWlsdGluX2Nob29zZV9leHByKHNpemVvZigqKHB0cikpID09IDIsIF9fZ2V0X3VuYWxpZ25lZF8yX2JlKF9fcCksCVwKKwkJICBfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKCoocHRyKSkgPT0gNCwgX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKSwJXAorCQkgIF9fYnVpbHRpbl9jaG9vc2VfZXhwcihzaXplb2YoKihwdHIpKSA9PSA4LCBfX2dldF91bmFsaWduZWRfOF9iZShfX3ApLAlcCisJCSAgICAodm9pZClfX2J1Z191bmFsaWduZWRfeChfX3ApKSkpKTsJCQlcCiAJfSkKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgKaW5kZXggMWU4OTFmOC4uMmFiNDA3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tYXJtL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaApAQCAtMzc3LDYgKzM3Nyw3IEBACiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAKICNkZWZpbmUgX19zeXMyKHgpICN4CkBAIC0zOTYsNyArMzk3LDcgQEAKIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykJCQkJCVwKIGRvIHsJCQkJCQkJCQlcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI5KSkgewkJXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLU1BWF9FUlJOTykpIHsJXAogCQllcnJubyA9IC0ocmVzKTsJCQkJCQlcCiAJCXJlcyA9IC0xOwkJCQkJCVwKIAl9CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1hcm0yNi91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCmluZGV4IDcwZWI2ZDkuLmM2ZDI0MzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWFybTI2L3VuaXN0ZC5oCkBAIC0zMTEsNiArMzExLDcgQEAKICNkZWZpbmUgX19BUk1fTlJfdXNyMjYJCQkoX19BUk1fTlJfQkFTRSszKQogCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KIAogI2RlZmluZSBfX3N5czIoeCkgI3gKQEAgLTMyMiw3ICszMjMsNyBAQAogCiAjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCQkJXAogZG8gewkJCQkJCQkJCVwKLQlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC0xMjUpKSB7CQlcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKS1NQVhfRVJSTk8pIHsJXAogCQllcnJubyA9IC0ocmVzKTsJCQkJCQlcCiAJCXJlcyA9IC0xOwkJCQkJCVwKIAl9CQkJCQkJCQlcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1jcmlzL2FyY2gtdjMyL3NwaW5sb2NrLmgKaW5kZXggNTJkZjcyYS4uNWY0M2RmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tY3Jpcy9hcmNoLXYzMi9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWNyaXMvYXJjaC12MzIvc3BpbmxvY2suaApAQCAtMTYwLDQgKzE2MCw4IEBACiAJcmV0dXJuIHJ3LT5jb3VudGVyIDwgMDsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qIF9fQVNNX0FSQ0hfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLWZydi9wZ3RhYmxlLmgKaW5kZXggMmZiM2M2Zi4uYmExYjM3ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1mcnYvcGd0YWJsZS5oCkBAIC0xNzYsOCArMTc2LDYgQEAKIH0gd2hpbGUoMCkKICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCi0jZGVmaW5lIHNldF9wdGVfYXRvbWljKHB0ZXB0ciwgcHRldmFsKQkJc2V0X3B0ZSgocHRlcHRyKSwgKHB0ZXZhbCkpCi0KIC8qCiAgKiBwZ2Rfb2Zmc2V0KCkgcmV0dXJucyBhIChwZ2RfdCAqKQogICogcGdkX2luZGV4KCkgaXMgdXNlZCBnZXQgdGhlIG9mZnNldCBpbnRvIHRoZSBwZ2QgcGFnZSdzIGFycmF5IG9mIHBnZF90J3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdGltZXguaCBiL2luY2x1ZGUvYXNtLWZydi90aW1leC5oCmluZGV4IDJhYTU2MmYuLmE4OWJkZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWZydi90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi90aW1leC5oCkBAIC02LDExICs2LDYgQEAKICNkZWZpbmUgQ0xPQ0tfVElDS19SQVRFCQkxMTkzMTgwIC8qIFVuZGVybHlpbmcgSFogKi8KICNkZWZpbmUgQ0xPQ0tfVElDS19GQUNUT1IJMjAJLyogRmFjdG9yIG9mIGJvdGggMTAwMDAwMCBhbmQgQ0xPQ0tfVElDS19SQVRFICovCiAKLSNkZWZpbmUgRklORVRVTkUJCQkJCQkJXAotKCgoKCgobG9uZylMQVRDSCAqIEhaIC0gQ0xPQ0tfVElDS19SQVRFKSA8PCBTSElGVF9IWikgKgkJCVwKLSAgICgxMDAwMDAwL0NMT0NLX1RJQ0tfRkFDVE9SKSAvIChDTE9DS19USUNLX1JBVEUvQ0xPQ0tfVElDS19GQUNUT1IpKQlcCi0gIDw8IChTSElGVF9TQ0FMRS1TSElGVF9IWikpIC8gSFopCi0KIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBjeWNsZXNfdDsKIAogc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1mcnYvdW5pc3RkLmgKaW5kZXggYjgwZGJkOC4uZDEwNGQxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZnJ2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWZydi91bmlzdGQuaApAQCAtMzIwLDYgKzMyMCw3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDMxMAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAvKgogICogcHJvY2VzcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGEgc3lzY2FsbCwgY29uc2lnbmluZyBpdCB0byBvbmUgb2YgdHdvIHBvc3NpYmxlIGZhdGVzCkBAIC0zMjksNyArMzMwLDcgQEAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpCQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogICAgICAgICB1bnNpZ25lZCBsb25nIF9fc3IyID0gKHJlcyk7CQkJCQlcCi0JaWYgKF9fYnVpbHRpbl9leHBlY3QoX19zcjIgPj0gKHVuc2lnbmVkIGxvbmcpKC00MDk1KSwgMCkpIHsJXAorCWlmIChfX2J1aWx0aW5fZXhwZWN0KF9fc3IyID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSwgMCkpIHsgXAogCQllcnJubyA9ICgtX19zcjIpOwkJCQkJXAogCQlfX3NyMiA9IH4wVUw7CQkJCQkJXAogCX0JCQkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL2J1Zy5oCmluZGV4IDhjZWFiN2IuLmE1MjUwODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9idWcuaApAQCAtMTYsMTIgKzE2LDE1IEBACiAjZW5kaWYKIAogI2lmbmRlZiBIQVZFX0FSQ0hfV0FSTl9PTgotI2RlZmluZSBXQVJOX09OKGNvbmRpdGlvbikgZG8geyBcCi0JaWYgKHVubGlrZWx5KChjb25kaXRpb24pIT0wKSkgeyBcCi0JCXByaW50aygiQlVHOiB3YXJuaW5nIGF0ICVzOiVkLyVzKClcbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAotCQlkdW1wX3N0YWNrKCk7IFwKLQl9IFwKLX0gd2hpbGUgKDApCisjZGVmaW5lIFdBUk5fT04oY29uZGl0aW9uKSAoewkJCQkJCVwKKwl0eXBlb2YoY29uZGl0aW9uKSBfX3JldF93YXJuX29uID0gKGNvbmRpdGlvbik7CQkJXAorCWlmICh1bmxpa2VseShfX3JldF93YXJuX29uKSkgewkJCQkJXAorCQlwcmludGsoIkJVRzogd2FybmluZyBhdCAlczolZC8lcygpXG4iLCBfX0ZJTEVfXywJXAorCQkJX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CQkJXAorCQlkdW1wX3N0YWNrKCk7CQkJCQkJXAorCX0JCQkJCQkJCVwKKwl1bmxpa2VseShfX3JldF93YXJuX29uKTsJCQkJCVwKK30pCiAjZW5kaWYKIAogI2Vsc2UgLyogIUNPTkZJR19CVUcgKi8KQEAgLTM0LDIxICszNywxOCBAQAogI2VuZGlmCiAKICNpZm5kZWYgSEFWRV9BUkNIX1dBUk5fT04KLSNkZWZpbmUgV0FSTl9PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgOyB9IHdoaWxlKDApCisjZGVmaW5lIFdBUk5fT04oY29uZGl0aW9uKSB1bmxpa2VseSgoY29uZGl0aW9uKSkKICNlbmRpZgogI2VuZGlmCiAKLSNkZWZpbmUgV0FSTl9PTl9PTkNFKGNvbmRpdGlvbikJCQkJXAotKHsJCQkJCQkJXAorI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKQkoewkJCVwKIAlzdGF0aWMgaW50IF9fd2Fybl9vbmNlID0gMTsJCQlcCi0JaW50IF9fcmV0ID0gMDsJCQkJCVwKKwl0eXBlb2YoY29uZGl0aW9uKSBfX3JldF93YXJuX29uY2UgPSAoY29uZGl0aW9uKTtcCiAJCQkJCQkJXAotCWlmICh1bmxpa2VseSgoY29uZGl0aW9uKSAmJiBfX3dhcm5fb25jZSkpIHsJXAotCQlfX3dhcm5fb25jZSA9IDA7CQkJXAotCQlXQVJOX09OKDEpOwkJCQlcCi0JCV9fcmV0ID0gMTsJCQkJXAotCX0JCQkJCQlcCi0JX19yZXQ7CQkJCQkJXAorCWlmIChsaWtlbHkoX193YXJuX29uY2UpKQkJCVwKKwkJaWYgKFdBUk5fT04oX19yZXRfd2Fybl9vbmNlKSkgCQlcCisJCQlfX3dhcm5fb25jZSA9IDA7CQlcCisJdW5saWtlbHkoX19yZXRfd2Fybl9vbmNlKTsJCQlcCiB9KQogCiAjaWZkZWYgQ09ORklHX1NNUApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAppbmRleCAzNDkyNjBjLi45ZDc3NGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaApAQCAtMTUsMTkgKzE1LDExIEBACiAgKiBOb3RlOiB0aGUgb2xkIHB0ZSBpcyBrbm93biB0byBub3QgYmUgd3JpdGFibGUsIHNvIHdlIGRvbid0IG5lZWQgdG8KICAqIHdvcnJ5IGFib3V0IGRpcnR5IGJpdHMgZXRjIGdldHRpbmcgbG9zdC4KICAqLwotI2lmbmRlZiBfX0hBVkVfQVJDSF9TRVRfUFRFX0FUT01JQwogI2RlZmluZSBwdGVwX2VzdGFibGlzaChfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnkpCQlcCiBkbyB7CQkJCSAgCQkJCQlcCiAJc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksIF9fcHRlcCwgX19lbnRyeSk7CVwKIAlmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsJCQkJXAogfSB3aGlsZSAoMCkKLSNlbHNlIC8qIF9fSEFWRV9BUkNIX1NFVF9QVEVfQVRPTUlDICovCi0jZGVmaW5lIHB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSkJCVwKLWRvIHsJCQkJICAJCQkJCVwKLQlzZXRfcHRlX2F0b21pYyhfX3B0ZXAsIF9fZW50cnkpOwkJCQlcCi0JZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7CQkJCVwKLX0gd2hpbGUgKDApCi0jZW5kaWYgLyogX19IQVZFX0FSQ0hfU0VUX1BURV9BVE9NSUMgKi8KICNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwpAQCAtMTEyLDggKzEwNCwxMyBAQAogfSkKICNlbmRpZgogCi0jaWZuZGVmIF9fSEFWRV9BUkNIX1BURV9DTEVBUl9GVUxMCi0jZGVmaW5lIHB0ZV9jbGVhcl9mdWxsKF9fbW0sIF9fYWRkcmVzcywgX19wdGVwLCBfX2Z1bGwpCQkJXAorLyoKKyAqIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgYmUgYWJsZSB0byBhdm9pZCBleHBlbnNpdmUgc3luY2hyb25pemF0aW9uCisgKiBwcmltaXRpdmVzIHdoZW4gbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSB0byBQVEUncyB3aGljaCBhcmUgYWxyZWFkeQorICogbm90IHByZXNlbnQsIG9yIGluIHRoZSBwcm9jZXNzIG9mIGFuIGFkZHJlc3Mgc3BhY2UgZGVzdHJ1Y3Rpb24uCisgKi8KKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX0NMRUFSX05PVF9QUkVTRU5UX0ZVTEwKKyNkZWZpbmUgcHRlX2NsZWFyX25vdF9wcmVzZW50X2Z1bGwoX19tbSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZnVsbCkJXAogZG8gewkJCQkJCQkJCVwKIAlwdGVfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOwkJCVwKIH0gd2hpbGUgKDApCkBAIC0xNjYsNiArMTYzLDI2IEBACiAjZW5kaWYKIAogLyoKKyAqIEEgZmFjaWxpdHkgdG8gcHJvdmlkZSBsYXp5IE1NVSBiYXRjaGluZy4gIFRoaXMgYWxsb3dzIFBURSB1cGRhdGVzIGFuZAorICogcGFnZSBpbnZhbGlkYXRpb25zIHRvIGJlIGRlbGF5ZWQgdW50aWwgYSBjYWxsIHRvIGxlYXZlIGxhenkgTU1VIG1vZGUKKyAqIGlzIGlzc3VlZC4gIFNvbWUgYXJjaGl0ZWN0dXJlcyBtYXkgYmVuZWZpdCBmcm9tIGRvaW5nIHRoaXMsIGFuZCBpdCBpcworICogYmVuZWZpY2lhbCBmb3IgYm90aCBzaGFkb3cgYW5kIGRpcmVjdCBtb2RlIGh5cGVydmlzb3JzLCB3aGljaCBtYXkgYmF0Y2gKKyAqIHRoZSBQVEUgdXBkYXRlcyB3aGljaCBoYXBwZW4gZHVyaW5nIHRoaXMgd2luZG93LiAgTm90ZSB0aGF0IHVzaW5nIHRoaXMKKyAqIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IHJlYWQgaGF6YXJkcyBiZSByZW1vdmVkIGZyb20gdGhlIGNvZGUuICBBIHJlYWQKKyAqIGhhemFyZCBjb3VsZCByZXN1bHQgaW4gdGhlIGRpcmVjdCBtb2RlIGh5cGVydmlzb3IgY2FzZSwgc2luY2UgdGhlIGFjdHVhbAorICogd3JpdGUgdG8gdGhlIHBhZ2UgdGFibGVzIG1heSBub3QgeWV0IGhhdmUgdGFrZW4gcGxhY2UsIHNvIHJlYWRzIHRob3VnaAorICogYSByYXcgUFRFIHBvaW50ZXIgYWZ0ZXIgaXQgaGFzIGJlZW4gbW9kaWZpZWQgYXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlCisgKiB1cCB0byBkYXRlLiAgVGhpcyBtb2RlIGNhbiBvbmx5IGJlIGVudGVyZWQgYW5kIGxlZnQgdW5kZXIgdGhlIHByb3RlY3Rpb24gb2YKKyAqIHRoZSBwYWdlIHRhYmxlIGxvY2tzIGZvciBhbGwgcGFnZSB0YWJsZXMgd2hpY2ggbWF5IGJlIG1vZGlmaWVkLiAgSW4gdGhlIFVQCisgKiBjYXNlLCB0aGlzIGlzIHJlcXVpcmVkIHNvIHRoYXQgcHJlZW1wdGlvbiBpcyBkaXNhYmxlZCwgYW5kIGluIHRoZSBTTVAgY2FzZSwKKyAqIGl0IG11c3Qgc3luY2hyb25pemUgdGhlIGRlbGF5ZWQgcGFnZSB0YWJsZSB3cml0ZXMgcHJvcGVybHkgb24gb3RoZXIgQ1BVcy4KKyAqLworI2lmbmRlZiBfX0hBVkVfQVJDSF9FTlRFUl9MQVpZX01NVV9NT0RFCisjZGVmaW5lIGFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisvKgogICogV2hlbiB3YWxraW5nIHBhZ2UgdGFibGVzLCBnZXQgdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgYm91bmRhcnksCiAgKiBvciB0aGUgZW5kIGFkZHJlc3Mgb2YgdGhlIHJhbmdlIGlmIHRoYXQgY29tZXMgZWFybGllci4gIEFsdGhvdWdoIG5vCiAgKiB2bWEgZW5kIHdyYXBzIHRvIDAsIHJvdW5kZWQgdXAgX19ib3VuZGFyeSBtYXkgd3JhcCB0byAwIHRocm91Z2hvdXQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3ZtbGludXgubGRzLmgKaW5kZXggMjUzYWUxMy4uNjkyNDBiNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy92bWxpbnV4Lmxkcy5oCisrKyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvdm1saW51eC5sZHMuaApAQCAtMTE4LDE1ICsxMTgsMTUgQEAKICAgICAgICAgX19rc3ltdGFiX3N0cmluZ3MgOiBBVChBRERSKF9fa3N5bXRhYl9zdHJpbmdzKSAtIExPQURfT0ZGU0VUKSB7CVwKIAkJKihfX2tzeW10YWJfc3RyaW5ncykJCQkJCVwKIAl9CQkJCQkJCQlcCi0JX19lbmRfcm9kYXRhID0gLjsJCQkJCQlcCi0JLiA9IEFMSUdOKDQwOTYpOwkJCQkJCVwKIAkJCQkJCQkJCVwKIAkvKiBCdWlsdC1pbiBtb2R1bGUgcGFyYW1ldGVycy4gKi8JCQkJXAogCV9fcGFyYW0gOiBBVChBRERSKF9fcGFyYW0pIC0gTE9BRF9PRkZTRVQpIHsJCQlcCiAJCVZNTElOVVhfU1lNQk9MKF9fc3RhcnRfX19wYXJhbSkgPSAuOwkJCVwKIAkJKihfX3BhcmFtKQkJCQkJCVwKIAkJVk1MSU5VWF9TWU1CT0woX19zdG9wX19fcGFyYW0pID0gLjsJCQlcCi0JfQorCX0JCQkJCQkJCVwKKwlfX2VuZF9yb2RhdGEgPSAuOwkJCQkJCVwKKwkuID0gQUxJR04oNDA5Nik7CiAKICNkZWZpbmUgU0VDVVJJVFlfSU5JVAkJCQkJCQlcCiAJLnNlY3VyaXR5X2luaXRjYWxsLmluaXQgOiBBVChBRERSKC5zZWN1cml0eV9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmggYi9pbmNsdWRlL2FzbS1oODMwMC9rZXlib2FyZC5oCmluZGV4IGZiYWQ2NWUuLjkwZWZiZDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL2tleWJvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20taDgzMDAva2V5Ym9hcmQuaApAQCAtMTgsMTQgKzE4LDYgQEAKICNkZWZpbmUga2JkX2VuYWJsZV9pcnEoeC4uLikJZG8gezt9IHdoaWxlICgwKQogI2RlZmluZSBrYmRfZGlzYWJsZV9pcnEoeC4uLikJZG8gezt9IHdoaWxlICgwKQogCi0KLS8qIG5lZWRlZCBpZiBNQUdJQ19TWVNSUSBpcyBlbmFibGVkIGZvciBzZXJpYWwgY29uc29sZSAqLwotI2lmbmRlZiBTWVNSUV9LRVkKLSNkZWZpbmUgU1lTUlFfS0VZCQkoKHVuc2lnbmVkIGNoYXIpKC0xKSkKLSNkZWZpbmUga2JkX3N5c3JxX3hsYXRlICAgICAgICAgKCh1bnNpZ25lZCBjaGFyICopTlVMTCkKLSNlbmRpZgotCi0KICNlbmRpZiAgLyogX0g4MzAwX0tFWUJPQVJEX0ggKi8KIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1oODMwMC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCmluZGV4IDIyNmRkNTkuLmEyZGQ5MDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWg4MzAwL3VuaXN0ZC5oCkBAIC0yOTUsMTQgKzI5NSwxNCBAQAogI2lmZGVmIF9fS0VSTkVMX18KIAogI2RlZmluZSBOUl9zeXNjYWxscyAyODkKKyNpbmNsdWRlIDxsaW51eC9lcnIuaD4KIAotCi0vKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzogc2VlCiAgICA8YXNtLW02OGsvZXJybm8uaD4gKi8KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAogZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSkgeyBcCiAJLyogYXZvaWQgdXNpbmcgcmVzIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIGQwOyBcCiAJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKIAkJaW50IF9fZXJyID0gLShyZXMpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2FzbS1pMzg2L2RtYS1tYXBwaW5nLmgKaW5kZXggNTc2YWUwMS4uODE5OTlhMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvZG1hLW1hcHBpbmcuaApAQCAtMjEsNyArMjEsNyBAQAogZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwogCVdBUk5fT04oc2l6ZSA9PSAwKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiAJcmV0dXJuIHZpcnRfdG9fcGh5cyhwdHIpOwpAQCAtMzEsNyArMzEsNyBAQAogZG1hX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHNpemVfdCBzaXplLAogCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTQwLDcgKzQwLDcgQEAKIHsKIAlpbnQgaTsKIAotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKIAlXQVJOX09OKG5lbnRzID09IDAgfHwgc2dbMF0ubGVuZ3RoID09IDApOwogCiAJZm9yIChpID0gMDsgaSA8IG5lbnRzOyBpKysgKSB7CkBAIC01Nyw3ICs1Nyw3IEBACiBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQsCiAJICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKIAlyZXR1cm4gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OwogfQogCkBAIC02NSw3ICs2NSw3IEBACiBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHJlc3MsIHNpemVfdCBzaXplLAogCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXJlY3Rpb24pCiB7Ci0JQlVHX09OKGRpcmVjdGlvbiA9PSBETUFfTk9ORSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwogfQogCiAKQEAgLTczLDcgKzczLDcgQEAKIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuaHdlbnRyaWVzLAogCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyZWN0aW9uKQogewotCUJVR19PTihkaXJlY3Rpb24gPT0gRE1BX05PTkUpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oIGIvaW5jbHVkZS9hc20taTM4Ni9tYWNoLWRlZmF1bHQvZG9fdGltZXIuaAppbmRleCA2MzEyYzNlLi40MTgyYzM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtZGVmYXVsdC9kb190aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1kZWZhdWx0L2RvX3RpbWVyLmgKQEAgLTE2LDcgKzE2LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlX3ZtKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC1zdW1taXQvbWFjaF9hcGljLmgKaW5kZXggYTgxYjA1OS4uMjU0YTBmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXN1bW1pdC9tYWNoX2FwaWMuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtc3VtbWl0L21hY2hfYXBpYy5oCkBAIC04OCw3ICs4OCw3IEBACiAKIHN0YXRpYyBpbmxpbmUgaW50IGFwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCkKIHsKLQlyZXR1cm4gbG9naWNhbF9hcGljaWQgPj4gNTsgICAgICAgICAgLyogMiBjbHVzdGVyaWRzIHBlciBDRUMgKi8KKwlyZXR1cm4gYXBpY2lkXzJfbm9kZVtsb2dpY2FsX2FwaWNpZF07CiB9CiAKIC8qIE1hcHBpbmcgZnJvbSBjcHUgbnVtYmVyIHRvIGxvZ2ljYWwgYXBpY2lkICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12aXN3cy9kb190aW1lci5oCmluZGV4IDk1NTY4ZTYuLjhkYjYxOGM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZG9fdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdmlzd3MvZG9fdGltZXIuaApAQCAtOSw3ICs5LDcgQEAKIAkvKiBDbGVhciB0aGUgaW50ZXJydXB0ICovCiAJY29fY3B1X3dyaXRlKENPX0NQVV9TVEFULGNvX2NwdV9yZWFkKENPX0NQVV9TVEFUKSAmIH5DT19TVEFUX1RJTUVJTlRSKTsKIAotCWRvX3RpbWVyKHJlZ3MpOworCWRvX3RpbWVyKDEpOwogI2lmbmRlZiBDT05GSUdfU01QCiAJdXBkYXRlX3Byb2Nlc3NfdGltZXModXNlcl9tb2RlX3ZtKHJlZ3MpKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaCBiL2luY2x1ZGUvYXNtLWkzODYvbWFjaC12b3lhZ2VyL2RvX3RpbWVyLmgKaW5kZXggZWFmNTE4MC4uMDk5ZmU5ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9tYWNoLXZveWFnZXIvZG9fdGltZXIuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L21hY2gtdm95YWdlci9kb190aW1lci5oCkBAIC0zLDcgKzMsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZG9fdGltZXJfaW50ZXJydXB0X2hvb2soc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7Ci0JZG9fdGltZXIocmVncyk7CisJZG9fdGltZXIoMSk7CiAjaWZuZGVmIENPTkZJR19TTVAKIAl1cGRhdGVfcHJvY2Vzc190aW1lcyh1c2VyX21vZGVfdm0ocmVncykpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L25taS5oIGIvaW5jbHVkZS9hc20taTM4Ni9ubWkuaAppbmRleCAzMDNiY2Q0Li4yNjlkMzE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L25taS5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvbm1pLmgKQEAgLTM2LDQgKzM2LDEwIEBACiAjZGVmaW5lIE5NSV9MT0NBTF9BUElDCTIKICNkZWZpbmUgTk1JX0lOVkFMSUQJMwogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGZpbGU7CitleHRlcm4gaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLCBzdHJ1Y3QgZmlsZSAqLAorCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKK2V4dGVybiBpbnQgdW5rbm93bl9ubWlfcGFuaWM7CisKICNlbmRpZiAvKiBBU01fTk1JX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaCBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0ybGV2ZWwuaAppbmRleCAyMDFjODZhLi44ZDhkM2I5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtMmxldmVsLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTJsZXZlbC5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgqKHB0ZXB0cikgPSBwdGV2YWwpCiAjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKICNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpIHNldF9wdGUocHRlcHRyLHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9wcmVzZW50KG1tLGFkZHIscHRlcCxwdGV2YWwpIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkKICNkZWZpbmUgc2V0X3BtZChwbWRwdHIsIHBtZHZhbCkgKCoocG1kcHRyKSA9IChwbWR2YWwpKQogCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmggYi9pbmNsdWRlL2FzbS1pMzg2L3BndGFibGUtM2xldmVsLmgKaW5kZXggMGQ4OTkxNy4uYzJkNzAxZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLTNsZXZlbC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS0zbGV2ZWwuaApAQCAtNTgsNyArNTgsMjEgQEAKIH0KICNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQogCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1NFVF9QVEVfQVRPTUlDCisvKgorICogU2luY2UgdGhpcyBpcyBvbmx5IGNhbGxlZCBvbiB1c2VyIFBURXMsIGFuZCB0aGUgcGFnZSBmYXVsdCBoYW5kbGVyCisgKiBtdXN0IGhhbmRsZSB0aGUgYWxyZWFkeSByYWN5IHNpdHVhdGlvbiBvZiBzaW11bHRhbmVvdXMgcGFnZSBmYXVsdHMsCisgKiB3ZSBhcmUganVzdGlmaWVkIGluIG1lcmVseSBjbGVhcmluZyB0aGUgUFRFIHByZXNlbnQgYml0LCBmb2xsb3dlZAorICogYnkgYSBzZXQuICBUaGUgb3JkZXJpbmcgaGVyZSBpcyBpbXBvcnRhbnQuCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKK3sKKwlwdGVwLT5wdGVfbG93ID0gMDsKKwlzbXBfd21iKCk7CisJcHRlcC0+cHRlX2hpZ2ggPSBwdGUucHRlX2hpZ2g7CisJc21wX3dtYigpOworCXB0ZXAtPnB0ZV9sb3cgPSBwdGUucHRlX2xvdzsKK30KKwogI2RlZmluZSBzZXRfcHRlX2F0b21pYyhwdGVwdHIscHRldmFsKSBcCiAJCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB0ZXB0cikscHRlX3ZhbChwdGV2YWwpKQogI2RlZmluZSBzZXRfcG1kKHBtZHB0cixwbWR2YWwpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWkzODYvcGd0YWJsZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKaW5kZXggNTQxYjNlMi4uN2QzOThmNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20taTM4Ni9wZ3RhYmxlLmgKQEAgLTI0Nyw2ICsyNDcsMjMgQEAKICNlbmRpZgogCiAvKgorICogUnVsZXMgZm9yIHVzaW5nIHB0ZV91cGRhdGUgLSBpdCBtdXN0IGJlIGNhbGxlZCBhZnRlciBhbnkgUFRFIHVwZGF0ZSB3aGljaAorICogaGFzIG5vdCBiZWVuIGRvbmUgdXNpbmcgdGhlIHNldF9wdGUgLyBjbGVhcl9wdGUgaW50ZXJmYWNlcy4gIEl0IGlzIHVzZWQgYnkKKyAqIHNoYWRvdyBtb2RlIGh5cGVydmlzb3JzIHRvIHJlc3luY2hyb25pemUgdGhlIHNoYWRvdyBwYWdlIHRhYmxlcy4gIEtlcm5lbCBQVEUKKyAqIHVwZGF0ZXMgc2hvdWxkIGVpdGhlciBiZSBzZXRzLCBjbGVhcnMsIG9yIHNldF9wdGVfYXRvbWljIGZvciBQLT5QCisgKiB0cmFuc2l0aW9ucywgd2hpY2ggbWVhbnMgdGhpcyBob29rIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgdXNlciBQVEVzLgorICogVGhpcyBob29rIGltcGxpZXMgYSBQLT5QIHByb3RlY3Rpb24gb3IgYWNjZXNzIGNoYW5nZSBoYXMgdGFrZW4gcGxhY2UsIHdoaWNoCisgKiByZXF1aXJlcyBhIHN1YnNlcXVlbnQgVExCIGZsdXNoLiAgVGhlIG5vdGlmaWNhdGlvbiBjYW4gb3B0aW9uYWxseSBiZSBkZWxheWVkCisgKiB1bnRpbCB0aGUgVExCIGZsdXNoIGV2ZW50IGJ5IHVzaW5nIHRoZSBwdGVfdXBkYXRlX2RlZmVyIGZvcm0gb2YgdGhlCisgKiBpbnRlcmZhY2UsIGJ1dCBjYXJlIG11c3QgYmUgdGFrZW4gdG8gYXNzdXJlIHRoYXQgdGhlIGZsdXNoIGhhcHBlbnMgd2hpbGUKKyAqIHN0aWxsIGhvbGRpbmcgdGhlIHNhbWUgcGFnZSB0YWJsZSBsb2NrIHNvIHRoYXQgdGhlIHNoYWRvdyBhbmQgcHJpbWFyeSBwYWdlcworICogZG8gbm90IGJlY29tZSBvdXQgb2Ygc3luYyBvbiBTTVAuCisgKi8KKyNkZWZpbmUgcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHRlX3VwZGF0ZV9kZWZlcihtbSwgYWRkciwgcHRlcCkJZG8geyB9IHdoaWxlICgwKQorCisKKy8qCiAgKiBXZSBvbmx5IHVwZGF0ZSB0aGUgZGlydHkvYWNjZXNzZWQgc3RhdGUgaWYgd2Ugc2V0CiAgKiB0aGUgZGlydHkgYml0IGJ5IGhhbmQgaW4gdGhlIGtlcm5lbCwgc2luY2UgdGhlIGhhcmR3YXJlCiAgKiB3aWxsIGRvIHRoZSBhY2Nlc3NlZCBiaXQgZm9yIHVzLCBhbmQgd2UgZG9uJ3Qgd2FudCB0bwpAQCAtMjU4LDI1ICsyNzUsNTQgQEAKIGRvIHsJCQkJCQkJCQlcCiAJaWYgKGRpcnR5KSB7CQkJCQkJCVwKIAkJKHB0ZXApLT5wdGVfbG93ID0gKGVudHJ5KS5wdGVfbG93OwkJCVwKKwkJcHRlX3VwZGF0ZV9kZWZlcigodm1hKS0+dm1fbW0sIChhZGRyKSwgKHB0ZXApKTsJCVwKIAkJZmx1c2hfdGxiX3BhZ2Uodm1hLCBhZGRyZXNzKTsJCQkJXAogCX0JCQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKKy8qCisgKiBXZSBkb24ndCBhY3R1YWxseSBoYXZlIHRoZXNlLCBidXQgd2Ugd2FudCB0byBhZHZlcnRpc2UgdGhlbSBzbyB0aGF0CisgKiB3ZSBjYW4gZW5jb21wYXNzIHRoZSBmbHVzaCBoZXJlLgorICovCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfRElSVFkKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JaWYgKCFwdGVfZGlydHkoKnB0ZXApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9ESVJUWSwgJnB0ZXAtPnB0ZV9sb3cpOwotfQotCiAjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKLXN0YXRpYyBpbmxpbmUgaW50IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCi17Ci0JaWYgKCFwdGVfeW91bmcoKnB0ZXApKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gdGVzdF9hbmRfY2xlYXJfYml0KF9QQUdFX0JJVF9BQ0NFU1NFRCwgJnB0ZXAtPnB0ZV9sb3cpOwotfQorCisvKgorICogUnVsZXMgZm9yIHVzaW5nIHB0ZXBfZXN0YWJsaXNoOiB0aGUgcHRlIE1VU1QgYmUgYSB1c2VyIHB0ZSwgYW5kCisgKiBtdXN0IGJlIGEgcHJlc2VudC0+cHJlc2VudCB0cmFuc2l0aW9uLgorICovCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfRVNUQUJMSVNICisjZGVmaW5lIHB0ZXBfZXN0YWJsaXNoKHZtYSwgYWRkcmVzcywgcHRlcCwgcHRldmFsKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJc2V0X3B0ZV9wcmVzZW50KCh2bWEpLT52bV9tbSwgYWRkcmVzcywgcHRlcCwgcHRldmFsKTsJCVwKKwlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX0RJUlRZX0ZMVVNICisjZGVmaW5lIHB0ZXBfY2xlYXJfZmx1c2hfZGlydHkodm1hLCBhZGRyZXNzLCBwdGVwKQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX2RpcnR5OwkJCQkJCQlcCisJX19kaXJ0eSA9IHB0ZV9kaXJ0eSgqKHB0ZXApKTsJCQkJCVwKKwlpZiAoX19kaXJ0eSkgewkJCQkJCQlcCisJCWNsZWFyX2JpdChfUEFHRV9CSVRfRElSVFksICYocHRlcCktPnB0ZV9sb3cpOwkJXAorCQlwdGVfdXBkYXRlX2RlZmVyKCh2bWEpLT52bV9tbSwgKGFkZHIpLCAocHRlcCkpOwkJXAorCQlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwkJCQlcCisJfQkJCQkJCQkJXAorCV9fZGlydHk7CQkJCQkJCVwKK30pCisKKyNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKHZtYSwgYWRkcmVzcywgcHRlcCkJCQlcCisoewkJCQkJCQkJCVwKKwlpbnQgX195b3VuZzsJCQkJCQkJXAorCV9feW91bmcgPSBwdGVfeW91bmcoKihwdGVwKSk7CQkJCQlcCisJaWYgKF9feW91bmcpIHsJCQkJCQkJXAorCQljbGVhcl9iaXQoX1BBR0VfQklUX0FDQ0VTU0VELCAmKHB0ZXApLT5wdGVfbG93KTsJXAorCQlwdGVfdXBkYXRlX2RlZmVyKCh2bWEpLT52bV9tbSwgKGFkZHIpLCAocHRlcCkpOwkJXAorCQlmbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwkJCQlcCisJfQkJCQkJCQkJXAorCV9feW91bmc7CQkJCQkJCVwKK30pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9HRVRfQU5EX0NMRUFSX0ZVTEwKIHN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsIGludCBmdWxsKQpAQCAtMjk1LDYgKzM0MSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlcF9zZXRfd3Jwcm90ZWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwKQogewogCWNsZWFyX2JpdChfUEFHRV9CSVRfUlcsICZwdGVwLT5wdGVfbG93KTsKKwlwdGVfdXBkYXRlKG1tLCBhZGRyLCBwdGVwKTsKIH0KIAogLyoKQEAgLTQyNiw2ICs0NzMsMTMgQEAKICNkZWZpbmUgcHRlX3VubWFwX25lc3RlZChwdGUpIGRvIHsgfSB3aGlsZSAoMCkKICNlbmRpZgogCisvKiBDbGVhciBhIGtlcm5lbCBQVEUgYW5kIGZsdXNoIGl0IGZyb20gdGhlIFRMQiAqLworI2RlZmluZSBrcHRlX2NsZWFyX2ZsdXNoKHB0ZXAsIHZhZGRyKQkJCQkJXAorZG8gewkJCQkJCQkJCVwKKwlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGVwKTsJCQkJXAorCV9fZmx1c2hfdGxiX29uZSh2YWRkcik7CQkJCQkJXAorfSB3aGlsZSAoMCkKKwogLyoKICAqIFRoZSBpMzg2IGRvZXNuJ3QgaGF2ZSBhbnkgZXh0ZXJuYWwgTU1VIGluZm86IHRoZSBrZXJuZWwgcGFnZQogICogdGFibGVzIGNvbnRhaW4gYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oIGIvaW5jbHVkZS9hc20taTM4Ni9zZW1hcGhvcmUuaAppbmRleCBlNjNiNmE2OC4uNGUzNGE0NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1pMzg2L3NlbWFwaG9yZS5oCkBAIC0xMjYsNyArMTI2LDcgQEAKIAkJImxlYSAlMSwlJWVheFxuXHQiCiAJCSJjYWxsIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuIgogCQkiMjoiCi0JCToiPWEiIChyZXN1bHQpLCAiK20iIChzZW0tPmNvdW50KQorCQk6Ij0mYSIgKHJlc3VsdCksICIrbSIgKHNlbS0+Y291bnQpCiAJCToKIAkJOiJtZW1vcnkiKTsKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTQ4LDcgKzE0OCw3IEBACiAJCSJsZWEgJTEsJSVlYXhcblx0IgogCQkiY2FsbCBfX2Rvd25fZmFpbGVkX3RyeWxvY2tcblx0IgogCQkiMjpcbiIKLQkJOiI9YSIgKHJlc3VsdCksICIrbSIgKHNlbS0+Y291bnQpCisJCToiPSZhIiAocmVzdWx0KSwgIittIiAoc2VtLT5jb3VudCkKIAkJOgogCQk6Im1lbW9yeSIpOwogCXJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oIGIvaW5jbHVkZS9hc20taTM4Ni9zbXAuaAppbmRleCAzMmFjOGM5Li42YWExMjA2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc21wLmgKQEAgLTQ2LDYgKzQ2LDggQEAKIAogI2RlZmluZSBjcHVfcGh5c2ljYWxfaWQoY3B1KQl4ODZfY3B1X3RvX2FwaWNpZFtjcHVdCiAKK2V4dGVybiB1OCBhcGljaWRfMl9ub2RlW107CisKICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIGV4dGVybiB2b2lkIGNwdV9leGl0X2NsZWFyKHZvaWQpOwogZXh0ZXJuIHZvaWQgY3B1X3VuaW5pdCh2b2lkKTsKQEAgLTgyLDYgKzg0LDcgQEAKICNlbmRpZgogI2VuZGlmCiAKK2V4dGVybiBpbnQgc2FmZV9zbXBfcHJvY2Vzc29yX2lkKHZvaWQpOwogZXh0ZXJuIGludCBfX2NwdV9kaXNhYmxlKHZvaWQpOwogZXh0ZXJuIHZvaWQgX19jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpOwogZXh0ZXJuIHVuc2lnbmVkIGludCBudW1fcHJvY2Vzc29yczsKQEAgLTkwLDYgKzkzLDcgQEAKIAogI2Vsc2UgLyogQ09ORklHX1NNUCAqLwogCisjZGVmaW5lIHNhZmVfc21wX3Byb2Nlc3Nvcl9pZCgpCQkwCiAjZGVmaW5lIGNwdV9waHlzaWNhbF9pZChjcHUpCQlib290X2NwdV9waHlzaWNhbF9hcGljaWQKIAogI2RlZmluZSBOT19QUk9DX0lECQkweEZGCQkvKiBObyBwcm9jZXNzb3IgbWFnaWMgbWFya2VyICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1pMzg2L3NwaW5sb2NrLmgKaW5kZXggYjBiMzA0My4uYzE4YjcxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taTM4Ni9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvc3BpbmxvY2suaApAQCAtMjA1LDQgKzIwNSw4IEBACiAJCQkJIDogIittIiAocnctPmxvY2spIDogOiAibWVtb3J5Iik7CiB9CiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKICNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaAppbmRleCA1NjVkMDg5Li5iZDk5ODcwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgKQEAgLTMyOCwxNCArMzI4LDE1IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDMxOQorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCiAvKgotICogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC0xMjg6IHNlZQorICogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC1NQVhfRVJSTk86IHNlZQogICogPGFzbS1pMzg2L2Vycm5vLmg+CiAgKi8KICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKIGRvIHsgXAotCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLSgxMjggKyAxKSkpIHsgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLU1BWF9FUlJOTykpIHsgXAogCQllcnJubyA9IC0ocmVzKTsgXAogCQlyZXMgPSAtMTsgXAogCX0gXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9lc2kuaCBiL2luY2x1ZGUvYXNtLWlhNjQvZXNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRhYWMwZQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZXNpLmgKQEAgLTAsMCArMSwzMCBAQAorLyoKKyAqIEVTSSBzZXJ2aWNlIGNhbGxzLgorICoKKyAqIENvcHlyaWdodCAoYykgQ29weXJpZ2h0IDIwMDUtMjAwNiBIZXdsZXR0LVBhY2thcmQgRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLgorICogCUFsZXggV2lsbGlhbXNvbiA8YWxleC53aWxsaWFtc29uQGhwLmNvbT4KKyAqLworI2lmbmRlZiBlc2lfaAorI2RlZmluZSBlc2lfaAorCisjaW5jbHVkZSA8bGludXgvZWZpLmg+CisKKyNkZWZpbmUgRVNJX1FVRVJZCQkJMHgwMDAwMDAwMQorI2RlZmluZSBFU0lfT1BFTl9IQU5ETEUJCQkweDAyMDAwMDAwCisjZGVmaW5lIEVTSV9DTE9TRV9IQU5ETEUJCTB4MDIwMDAwMDEKKworZW51bSBlc2lfcHJvY190eXBlIHsKKwlFU0lfUFJPQ19TRVJJQUxJWkVELAkvKiBjYWxscyBuZWVkIHRvIGJlIHNlcmlhbGl6ZWQgKi8KKwlFU0lfUFJPQ19NUF9TQUZFLAkvKiBNUC1zYWZlLCBidXQgbm90IHJlZW50cmFudCAqLworCUVTSV9QUk9DX1JFRU5UUkFOVAkvKiBNUC1zYWZlIGFuZCByZWVudHJhbnQgKi8KK307CisKK2V4dGVybiBpbnQgaWE2NF9lc2lfaW5pdCAodm9pZCk7CitleHRlcm4gc3RydWN0IGlhNjRfc2FsX3JldHZhbCBlc2lfY2FsbF9waHlzICh2b2lkICosIHU2NCAqKTsKK2V4dGVybiBpbnQgaWE2NF9lc2lfY2FsbChlZmlfZ3VpZF90LCBzdHJ1Y3QgaWE2NF9zYWxfcmV0dmFsICosCisJCQkgZW51bSBlc2lfcHJvY190eXBlLAorCQkJIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKK2V4dGVybiBpbnQgaWE2NF9lc2lfY2FsbF9waHlzKGVmaV9ndWlkX3QsIHN0cnVjdCBpYTY0X3NhbF9yZXR2YWwgKiwgdTY0LCB1NjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1NjQsIHU2NCwgdTY0LCB1NjQsIHU2NCwgdTY0KTsKKworI2VuZGlmIC8qIGVzaV9oICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmggYi9pbmNsdWRlL2FzbS1pYTY0L2Z1dGV4LmgKaW5kZXggNmEzMzJhOS4uMDdkNzdmMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9mdXRleC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvZnV0ZXguaApAQCAtMSw2ICsxLDEyNCBAQAogI2lmbmRlZiBfQVNNX0ZVVEVYX0gKICNkZWZpbmUgX0FTTV9GVVRFWF9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy9mdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2Z1dGV4Lmg+CisjaW5jbHVkZSA8YXNtL2Vycm5vLmg+CisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLSNlbmRpZgorI2RlZmluZSBfX2Z1dGV4X2F0b21pY19vcDEoaW5zbiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZykgXAorZG8gewkJCQkJCQkJCVwKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHI4IF9fYXNtICgicjgiKSA9IDA7CQkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKKwkJIgltZjs7CQkJCQlcbiIJXAorCQkiWzE6XSAiCWluc24gIjs7CQkJCVxuIglcCisJCSIJLnhkYXRhNCBcIl9fZXhfdGFibGVcIiwgMWItLiwgMmYtLglcbiIJXAorCQkiWzI6XSIJCQkJCQkJXAorCQk6ICIrciIgKHI4KSwgIj1yIiAob2xkdmFsKQkJCQlcCisJCTogInIiICh1YWRkciksICJyIiAob3BhcmcpCQkJCVwKKwkJOiAibWVtb3J5Iik7CQkJCQkJXAorCXJldCA9IHI4OwkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fZnV0ZXhfYXRvbWljX29wMihpbnNuLCByZXQsIG9sZHZhbCwgdWFkZHIsIG9wYXJnKSBcCitkbyB7CQkJCQkJCQkJXAorCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcjggX19hc20gKCJyOCIpID0gMDsJCQlcCisJaW50IHZhbCwgbmV3dmFsOwkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJXAorCQkJIgltZjs7CQkJCSAgXG4iCVwKKwkJCSJbMTpdCWxkNCAlMz1bJTRdOzsJCQkgIFxuIglcCisJCQkiCW1vdiAlMj0lMwkJCSAgXG4iCVwKKwkJCQlpbnNuCSI7OwkJCSAgXG4iCVwKKwkJCSIJbW92IGFyLmNjdj0lMjs7CQkJICBcbiIJXAorCQkJIlsyOl0JY21weGNoZzQuYWNxICUxPVslNF0sJTMsYXIuY2N2OzsgIFxuIglcCisJCQkiCS54ZGF0YTQgXCJfX2V4X3RhYmxlXCIsIDFiLS4sIDNmLS5cbiIJXAorCQkJIgkueGRhdGE0IFwiX19leF90YWJsZVwiLCAyYi0uLCAzZi0uXG4iCVwKKwkJCSJbMzpdIgkJCQkJCVwKKwkJCTogIityIiAocjgpLCAiPXIiICh2YWwpLCAiPSZyIiAob2xkdmFsKSwJXAorCQkJICAgIj0mciIgKG5ld3ZhbCkJCQkJXAorCQkJOiAiciIgKHVhZGRyKSwgInIiIChvcGFyZykJCQlcCisJCQk6ICJtZW1vcnkiKTsJCQkJCVwKKwkJaWYgKHVubGlrZWx5IChyOCkpCQkJCQlcCisJCQlicmVhazsJCQkJCQlcCisJfSB3aGlsZSAodW5saWtlbHkgKHZhbCAhPSBvbGR2YWwpKTsJCQkJXAorCXJldCA9IHI4OwkJCQkJCQlcCit9IHdoaWxlICgwKQorCitzdGF0aWMgaW5saW5lIGludAorZnV0ZXhfYXRvbWljX29wX2ludXNlciAoaW50IGVuY29kZWRfb3AsIGludCBfX3VzZXIgKnVhZGRyKQoreworCWludCBvcCA9IChlbmNvZGVkX29wID4+IDI4KSAmIDc7CisJaW50IGNtcCA9IChlbmNvZGVkX29wID4+IDI0KSAmIDE1OworCWludCBvcGFyZyA9IChlbmNvZGVkX29wIDw8IDgpID4+IDIwOworCWludCBjbXBhcmcgPSAoZW5jb2RlZF9vcCA8PCAyMCkgPj4gMjA7CisJaW50IG9sZHZhbCA9IDAsIHJldDsKKwlpZiAoZW5jb2RlZF9vcCAmIChGVVRFWF9PUF9PUEFSR19TSElGVCA8PCAyOCkpCisJCW9wYXJnID0gMSA8PCBvcGFyZzsKKworCWlmICghIGFjY2Vzc19vayAoVkVSSUZZX1dSSVRFLCB1YWRkciwgc2l6ZW9mKGludCkpKQorCQlyZXR1cm4gLUVGQVVMVDsKKworCWluY19wcmVlbXB0X2NvdW50KCk7CisKKwlzd2l0Y2ggKG9wKSB7CisJY2FzZSBGVVRFWF9PUF9TRVQ6CisJCV9fZnV0ZXhfYXRvbWljX29wMSgieGNoZzQgJTE9WyUyXSwlMyIsIHJldCwgb2xkdmFsLCB1YWRkciwKKwkJCQkgICBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQUREOgorCQlfX2Z1dGV4X2F0b21pY19vcDIoImFkZCAlMz0lMywlNSIsIHJldCwgb2xkdmFsLCB1YWRkciwgb3BhcmcpOworCQlicmVhazsKKwljYXNlIEZVVEVYX09QX09SOgorCQlfX2Z1dGV4X2F0b21pY19vcDIoIm9yICUzPSUzLCU1IiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWNhc2UgRlVURVhfT1BfQU5ETjoKKwkJX19mdXRleF9hdG9taWNfb3AyKCJhbmQgJTM9JTMsJTUiLCByZXQsIG9sZHZhbCwgdWFkZHIsCisJCQkJICAgfm9wYXJnKTsKKwkJYnJlYWs7CisJY2FzZSBGVVRFWF9PUF9YT1I6CisJCV9fZnV0ZXhfYXRvbWljX29wMigieG9yICUzPSUzLCU1IiwgcmV0LCBvbGR2YWwsIHVhZGRyLCBvcGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FTk9TWVM7CisJfQorCisJZGVjX3ByZWVtcHRfY291bnQoKTsKKworCWlmICghcmV0KSB7CisJCXN3aXRjaCAoY21wKSB7CisJCWNhc2UgRlVURVhfT1BfQ01QX0VROiByZXQgPSAob2xkdmFsID09IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9ORTogcmV0ID0gKG9sZHZhbCAhPSBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfTFQ6IHJldCA9IChvbGR2YWwgPCBjbXBhcmcpOyBicmVhazsKKwkJY2FzZSBGVVRFWF9PUF9DTVBfR0U6IHJldCA9IChvbGR2YWwgPj0gY21wYXJnKTsgYnJlYWs7CisJCWNhc2UgRlVURVhfT1BfQ01QX0xFOiByZXQgPSAob2xkdmFsIDw9IGNtcGFyZyk7IGJyZWFrOworCQljYXNlIEZVVEVYX09QX0NNUF9HVDogcmV0ID0gKG9sZHZhbCA+IGNtcGFyZyk7IGJyZWFrOworCQlkZWZhdWx0OiByZXQgPSAtRU5PU1lTOworCQl9CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitmdXRleF9hdG9taWNfY21weGNoZ19pbmF0b21pYyhpbnQgX191c2VyICp1YWRkciwgaW50IG9sZHZhbCwgaW50IG5ld3ZhbCkKK3sKKwlpZiAoIWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIHVhZGRyLCBzaXplb2YoaW50KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJeworCQlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHI4IF9fYXNtICgicjgiKTsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCQkiCW1mOzsJCQkJCVxuIgorCQkJIgltb3YgYXIuY2N2PSUzOzsJCQkJXG4iCisJCQkiWzE6XQljbXB4Y2hnNC5hY3EgJTA9WyUxXSwlMixhci5jY3YJCVxuIgorCQkJIgkueGRhdGE0IFwiX19leF90YWJsZVwiLCAxYi0uLCAyZi0uCVxuIgorCQkJIlsyOl0iCisJCQk6ICI9ciIgKHI4KQorCQkJOiAiciIgKHVhZGRyKSwgInIiIChuZXd2YWwpLAorCQkJICAick8iICgobG9uZykgKHVuc2lnbmVkKSBvbGR2YWwpCisJCQk6ICJtZW1vcnkiKTsKKwkJcmV0dXJuIHI4OworCX0KK30KKworI2VuZGlmIC8qIF9BU01fRlVURVhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9rcHJvYmVzLmggYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAppbmRleCA5Mzg5MDQ5Li4xYjQ1YjcxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L2twcm9iZXMuaApAQCAtMjksNyArMjksOCBAQAogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgogI2luY2x1ZGUgPGFzbS9icmVhay5oPgogCi0jZGVmaW5lIE1BWF9JTlNOX1NJWkUgICAxNgorI2RlZmluZSBfX0FSQ0hfV0FOVF9LUFJPQkVTX0lOU05fU0xPVAorI2RlZmluZSBNQVhfSU5TTl9TSVpFICAgMQogI2RlZmluZSBCUkVBS19JTlNUCShsb25nKShfX0lBNjRfQlJFQUtfS1BST0JFIDw8IDYpCiAKIHR5cGVkZWYgdW5pb24gY21wX2luc3QgewpAQCAtOTQsNyArOTUsNyBAQAogI2RlZmluZSBJUF9SRUxBVElWRV9QUkVESUNUX09QQ09ERQkoNykKICNkZWZpbmUgTE9OR19CUkFOQ0hfT1BDT0RFCQkoMHhDKQogI2RlZmluZSBMT05HX0NBTExfT1BDT0RFCQkoMHhEKQotI2RlZmluZSBhcmNoX3JlbW92ZV9rcHJvYmUocCkJCWRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pbnNuX3Nsb3QocCkJCWRvIHsgfSB3aGlsZSAoMCkKIAogdHlwZWRlZiBzdHJ1Y3Qga3Byb2JlX29wY29kZSB7CiAJYnVuZGxlX3QgYnVuZGxlOwpAQCAtMTA4LDcgKzEwOSw3IEBACiAvKiBBcmNoaXRlY3R1cmUgc3BlY2lmaWMgY29weSBvZiBvcmlnaW5hbCBpbnN0cnVjdGlvbiovCiBzdHJ1Y3QgYXJjaF9zcGVjaWZpY19pbnNuIHsKIAkvKiBjb3B5IG9mIHRoZSBpbnN0cnVjdGlvbiB0byBiZSBlbXVsYXRlZCAqLwotCWtwcm9iZV9vcGNvZGVfdCBpbnNuOworCWtwcm9iZV9vcGNvZGVfdCAqaW5zbjsKICAjZGVmaW5lIElOU1RfRkxBR19GSVhfUkVMQVRJVkVfSVBfQUREUgkJMQogICNkZWZpbmUgSU5TVF9GTEFHX0ZJWF9CUkFOQ0hfUkVHCQkyCiAgI2RlZmluZSBJTlNUX0ZMQUdfQlJFQUtfSU5TVAkJCTQKQEAgLTEyNSw2ICsxMjYsNiBAQAogfQogZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9zdGFja2VkX3JlZ3Modm9pZCk7CiBleHRlcm4gdm9pZCBmbHVzaF9yZWdpc3Rlcl9zdGFjayh2b2lkKTsKLWV4dGVybiB2b2lkIGZsdXNoX2luc25fc2xvdChzdHJ1Y3Qga3Byb2JlICpwKTsKK2V4dGVybiB2b2lkIGFyY2hfcmVtb3ZlX2twcm9iZShzdHJ1Y3Qga3Byb2JlICpwKTsKIAogI2VuZGlmCQkJCS8qIF9BU01fS1BST0JFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L21jYV9hc20uaCBiL2luY2x1ZGUvYXNtLWlhNjQvbWNhX2FzbS5oCmluZGV4IDI3YzkyMDMuLjc2MjAzZjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvbWNhX2FzbS5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvbWNhX2FzbS5oCkBAIC0xOTcsOSArMTk3LDkgQEAKIAltb3ZsCXRlbXAyID0gc3RhcnRfYWRkcjsJCQkJXAogCTs7CQkJCQkJCVwKIAltb3YJY3IuaWlwID0gdGVtcDI7CQkJCQlcCisJbW92bAlncCA9IF9fZ3AJCQkJCVwKIAk7OwkJCQkJCQlcCiAJREFUQV9QQV9UT19WQShzcCwgdGVtcDEpOwkJCQlcCi0JREFUQV9QQV9UT19WQShncCwgdGVtcDIpOwkJCQlcCiAJc3Jsei5pOwkJCQkJCQlcCiAJOzsJCQkJCQkJXAogCW5vcAkxOwkJCQkJCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvbWVtaW5pdC5oIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKaW5kZXggNmEzM2EwNy4uYzNiMWY4NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9tZW1pbml0LmgKQEAgLTU1LDYgKzU1LDcgQEAKICAgZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm1hbGxvY19lbmQ7CiAgIGV4dGVybiBzdHJ1Y3QgcGFnZSAqdm1lbV9tYXA7CiAgIGV4dGVybiBpbnQgZmluZF9sYXJnZXN0X2hvbGUgKHU2NCBzdGFydCwgdTY0IGVuZCwgdm9pZCAqYXJnKTsKKyAgZXh0ZXJuIGludCByZWdpc3Rlcl9hY3RpdmVfcmFuZ2VzICh1NjQgc3RhcnQsIHU2NCBlbmQsIHZvaWQgKmFyZyk7CiAgIGV4dGVybiBpbnQgY3JlYXRlX21lbV9tYXBfcGFnZV90YWJsZSAodTY0IHN0YXJ0LCB1NjQgZW5kLCB2b2lkICphcmcpOwogICBleHRlcm4gaW50IHZtZW1tYXBfZmluZF9uZXh0X3ZhbGlkX3BmbihpbnQsIGludCk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9udW1hLmggYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAppbmRleCBlMGExZDE3Li43ZDVlMmNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L251bWEuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L251bWEuaApAQCAtNjksNiArNjksOCBAQAogCiAKICNlbHNlIC8qICFDT05GSUdfTlVNQSAqLworI2RlZmluZSBtYXBfY3B1X3RvX25vZGUoY3B1LCBuaWQpCWRve313aGlsZSgwKQorI2RlZmluZSB1bm1hcF9jcHVfZnJvbV9ub2RlKGNwdSwgbmlkKQlkb3t9d2hpbGUoMCkKIAogI2RlZmluZSBwYWRkcl90b19uaWQoYWRkcikJMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oIGIvaW5jbHVkZS9hc20taWE2NC9wYWwuaAppbmRleCAyMGE4ZDYxLi4yYzhmZDkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1pYTY0L3BhbC5oCisrKyBiL2luY2x1ZGUvYXNtLWlhNjQvcGFsLmgKQEAgLTc4LDYgKzc4LDcgQEAKICNkZWZpbmUgUEFMX1ZNX1RSX1JFQUQJCTI2MQkvKiByZWFkIGNvbnRlbnRzIG9mIHRyYW5zbGF0aW9uIHJlZ2lzdGVyICovCiAjZGVmaW5lIFBBTF9HRVRfUFNUQVRFCQkyNjIJLyogZ2V0IHRoZSBjdXJyZW50IFAtc3RhdGUgKi8KICNkZWZpbmUgUEFMX1NFVF9QU1RBVEUJCTI2MwkvKiBzZXQgdGhlIFAtc3RhdGUgKi8KKyNkZWZpbmUgUEFMX0JSQU5EX0lORk8JCTI3NAkvKiBQcm9jZXNzb3IgYnJhbmRpbmcgaW5mb3JtYXRpb24gKi8KIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIApAQCAtOTYzLDcgKzk2NCw4IEBACiBpYTY0X3BhbF9jYWNoZV9yZWFkIChwYWxfY2FjaGVfbGluZV9pZF91X3QgbGluZV9pZCwgdTY0IHBoeXNpY2FsX2FkZHIpCiB7CiAJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OwotCVBBTF9DQUxMKGlwcnYsIFBBTF9DQUNIRV9SRUFELCBsaW5lX2lkLnBjbGlkX2RhdGEsIHBoeXNpY2FsX2FkZHIsIDApOworCVBBTF9DQUxMX1BIWVNfU1RLKGlwcnYsIFBBTF9DQUNIRV9SRUFELCBsaW5lX2lkLnBjbGlkX2RhdGEsCisJCQkJcGh5c2ljYWxfYWRkciwgMCk7CiAJcmV0dXJuIGlwcnYuc3RhdHVzOwogfQogCkBAIC05ODUsNyArOTg3LDggQEAKIGlhNjRfcGFsX2NhY2hlX3dyaXRlIChwYWxfY2FjaGVfbGluZV9pZF91X3QgbGluZV9pZCwgdTY0IHBoeXNpY2FsX2FkZHIsIHU2NCBkYXRhKQogewogCXN0cnVjdCBpYTY0X3BhbF9yZXR2YWwgaXBydjsKLQlQQUxfQ0FMTChpcHJ2LCBQQUxfQ0FDSEVfV1JJVEUsIGxpbmVfaWQucGNsaWRfZGF0YSwgcGh5c2ljYWxfYWRkciwgZGF0YSk7CisJUEFMX0NBTExfUEhZU19TVEsoaXBydiwgUEFMX0NBQ0hFX1dSSVRFLCBsaW5lX2lkLnBjbGlkX2RhdGEsCisJCQkJcGh5c2ljYWxfYWRkciwgZGF0YSk7CiAJcmV0dXJuIGlwcnYuc3RhdHVzOwogfQogCkBAIC0xMTMzLDYgKzExMzYsMTUgQEAKIAlyZXR1cm4gaXBydi5zdGF0dXM7CiB9CiAKKy8qIFByb2Nlc3NvciBicmFuZGluZyBpbmZvcm1hdGlvbiovCitzdGF0aWMgaW5saW5lIHM2NAoraWE2NF9wYWxfZ2V0X2JyYW5kX2luZm8gKGNoYXIgKmJyYW5kX2luZm8pCit7CisJc3RydWN0IGlhNjRfcGFsX3JldHZhbCBpcHJ2OworCVBBTF9DQUxMX1NUSyhpcHJ2LCBQQUxfQlJBTkRfSU5GTywgMCwgKHU2NClicmFuZF9pbmZvLCAwKTsKKwlyZXR1cm4gaXBydi5zdGF0dXM7Cit9CisKIC8qIENhdXNlIHRoZSBwcm9jZXNzb3IgdG8gZW50ZXIgTElHSFQgSEFMVCBzdGF0ZSwgd2hlcmUgcHJlZmV0Y2hpbmcgYW5kIGV4ZWN1dGlvbiBhcmUKICAqIHN1c3BlbmRlZCwgYnV0IGNhY2hlIGFuZCBUTEIgY29oZXJlbmN5IGlzIG1haW50YWluZWQuCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1pYTY0L3Byb2Nlc3Nvci5oCmluZGV4IDI2NWY0ODIuLjU4MzBkMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvcHJvY2Vzc29yLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9wcm9jZXNzb3IuaApAQCAtMjAsMTIgKzIwLDYgQEAKICNpbmNsdWRlIDxhc20vdXN0YWNrLmg+CiAKICNkZWZpbmUgSUE2NF9OVU1fREJHX1JFR1MJOAotLyoKLSAqIExpbWl0cyBmb3IgUE1DIGFuZCBQTUQgYXJlIHNldCB0byBsZXNzIHRoYW4gbWF4aW11bSBhcmNoaXRlY3RlZCB2YWx1ZXMKLSAqIGJ1dCBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYSB3aGlsZQotICovCi0jZGVmaW5lIElBNjRfTlVNX1BNQ19SRUdTCTY0Ci0jZGVmaW5lIElBNjRfTlVNX1BNRF9SRUdTCTY0CiAKICNkZWZpbmUgREVGQVVMVF9NQVBfQkFTRQlfX0lBNjRfVUxfQ09OU1QoMHgyMDAwMDAwMDAwMDAwMDAwKQogI2RlZmluZSBERUZBVUxUX1RBU0tfU0laRQlfX0lBNjRfVUxfQ09OU1QoMHhhMDAwMDAwMDAwMDAwMDAwKQpAQCAtMTYzLDYgKzE1Nyw3IEBACiAJX191OCBmYW1pbHk7CiAJX191OCBhcmNocmV2OwogCWNoYXIgdmVuZG9yWzE2XTsKKwljaGFyICptb2RlbF9uYW1lOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIAlzdHJ1Y3QgaWE2NF9ub2RlX2RhdGEgKm5vZGVfZGF0YTsKQEAgLTI2MiwxMyArMjU3LDkgQEAKICMgZGVmaW5lIElOSVRfVEhSRUFEX0lBMzIKICNlbmRpZiAvKiBDT05GSUdfSUEzMl9TVVBQT1JUICovCiAjaWZkZWYgQ09ORklHX1BFUkZNT04KLQlfX3U2NCBwbWNzW0lBNjRfTlVNX1BNQ19SRUdTXTsKLQlfX3U2NCBwbWRzW0lBNjRfTlVNX1BNRF9SRUdTXTsKIAl2b2lkICpwZm1fY29udGV4dDsJCSAgICAgLyogcG9pbnRlciB0byBkZXRhaWxlZCBQTVUgY29udGV4dCAqLwogCXVuc2lnbmVkIGxvbmcgcGZtX25lZWRzX2NoZWNraW5nOyAgICAvKiB3aGVuID4wLCBwZW5kaW5nIHBlcmZtb24gd29yayBvbiBrZXJuZWwgZXhpdCAqLwotIyBkZWZpbmUgSU5JVF9USFJFQURfUE0JCS5wbWNzID0JCQl7MFVMLCB9LCAgXAotCQkJCS5wbWRzID0JCQl7MFVMLCB9LCAgXAotCQkJCS5wZm1fY29udGV4dCA9CQlOVUxMLCAgICAgXAorIyBkZWZpbmUgSU5JVF9USFJFQURfUE0JCS5wZm1fY29udGV4dCA9CQlOVUxMLCAgICAgXAogCQkJCS5wZm1fbmVlZHNfY2hlY2tpbmcgPQkwVUwsCiAjZWxzZQogIyBkZWZpbmUgSU5JVF9USFJFQURfUE0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmggYi9pbmNsdWRlL2FzbS1pYTY0L3NtcC5oCmluZGV4IDc0YmRlMWMuLjYwZmQ0YWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc21wLmgKKysrIGIvaW5jbHVkZS9hc20taWE2NC9zbXAuaApAQCAtMTI2LDYgKzEyNiw3IEBACiBleHRlcm4gdm9pZCBsb2NrX2lwaV9jYWxsbG9jayh2b2lkKTsKIGV4dGVybiB2b2lkIHVubG9ja19pcGlfY2FsbGxvY2sodm9pZCk7CiBleHRlcm4gdm9pZCBpZGVudGlmeV9zaWJsaW5ncyAoc3RydWN0IGNwdWluZm9faWE2NCAqKTsKK2V4dGVybiBpbnQgaXNfbXVsdGl0aHJlYWRpbmdfZW5hYmxlZCh2b2lkKTsKIAogI2Vsc2UKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC9zcGlubG9jay5oIGIvaW5jbHVkZS9hc20taWE2NC9zcGlubG9jay5oCmluZGV4IDllODMyMTAuLmZmODU3ZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWlhNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3NwaW5sb2NrLmgKQEAgLTIxMyw0ICsyMTMsOCBAQAogCXJldHVybiAodTMyKWlhNjRfY21weGNoZzRfYWNxKChfX3UzMiAqKSh4KSwgbmV3LndvcmQsIG9sZC53b3JkKSA9PSBvbGQud29yZDsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qICBfQVNNX0lBNjRfU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaCBiL2luY2x1ZGUvYXNtLWlhNjQvdW5pc3RkLmgKaW5kZXggZjU4MTY2Mi4uYmIwZWI3MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20taWE2NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1pYTY0L3VuaXN0ZC5oCkBAIC0yODYsNyArMjg2LDggQEAKIC8qIDEyOTQsIDEyOTUgcmVzZXJ2ZWQgZm9yIHBzZWxlY3QvcHBvbGwgKi8KICNkZWZpbmUgX19OUl91bnNoYXJlCQkJMTI5NgogI2RlZmluZSBfX05SX3NwbGljZQkJCTEyOTcKLS8qIDEyOTgsIDEyOTkgcmVzZXJ2ZWQgZm9yIHNldF9yb2J1c3RfbGlzdC9nZXRfcm9idXN0X2xpc3QgKi8KKyNkZWZpbmUgX19OUl9zZXRfcm9idXN0X2xpc3QJCTEyOTgKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCTEyOTkKICNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJCTEzMDAKICNkZWZpbmUgX19OUl90ZWUJCQkxMzAxCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkxMzAyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmggYi9pbmNsdWRlL2FzbS1tMzJyL3BndGFibGUtMmxldmVsLmgKaW5kZXggNmE2NzRlMy4uODQxNTI3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvcGd0YWJsZS0ybGV2ZWwuaApAQCAtNDQsNyArNDQsNyBAQAogICovCiAjZGVmaW5lIHNldF9wdGUocHRlcHRyLCBwdGV2YWwpICgqKHB0ZXB0cikgPSBwdGV2YWwpCiAjZGVmaW5lIHNldF9wdGVfYXQobW0sYWRkcixwdGVwLHB0ZXZhbCkgc2V0X3B0ZShwdGVwLHB0ZXZhbCkKLSNkZWZpbmUgc2V0X3B0ZV9hdG9taWMocHRlcHRyLCBwdGV2YWwpCXNldF9wdGUocHRlcHRyLCBwdGV2YWwpCisKIC8qCiAgKiAocG1kcyBhcmUgZm9sZGVkIGludG8gcGdkcyBzbyB0aGlzIGRvZXNudCBnZXQgYWN0dWFsbHkgY2FsbGVkLAogICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLW0zMnIvc3BpbmxvY2suaAppbmRleCBmOTRjMWE2Li5mNWNmYmE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci9zcGlubG9jay5oCkBAIC0yOTgsNyArMjk4LDE0IEBACiAJKTsKIH0KIAotI2RlZmluZSBfX3Jhd19yZWFkX3RyeWxvY2sobG9jaykgZ2VuZXJpY19fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKQorc3RhdGljIGlubGluZSBpbnQgX19yYXdfcmVhZF90cnlsb2NrKHJhd19yd2xvY2tfdCAqbG9jaykKK3sKKwlhdG9taWNfdCAqY291bnQgPSAoYXRvbWljX3QqKWxvY2s7CisJaWYgKGF0b21pY19kZWNfcmV0dXJuKGNvdW50KSA+PSAwKQorCQlyZXR1cm4gMTsKKwlhdG9taWNfaW5jKGNvdW50KTsKKwlyZXR1cm4gMDsKK30KIAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfd3JpdGVfdHJ5bG9jayhyYXdfcndsb2NrX3QgKmxvY2spCiB7CkBAIC0zMDksNCArMzE2LDggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmCS8qIF9BU01fTTMyUl9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tbTMyci9zeXN0ZW0uaAppbmRleCA5ZTYxOGFmLi40Y2UwNjE5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1tMzJyL3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvc3lzdGVtLmgKQEAgLTMyOCwxNSArMzI4LDE1IEBACiAjZGVmaW5lIHNtcF9ybWIoKQlybWIoKQogI2RlZmluZSBzbXBfd21iKCkJd21iKCkKICNkZWZpbmUgc21wX3JlYWRfYmFycmllcl9kZXBlbmRzKCkJcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQorI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyAodm9pZCkgeGNoZygmdmFyLCB2YWx1ZSk7IH0gd2hpbGUgKDApCiAjZWxzZQogI2RlZmluZSBzbXBfbWIoKQliYXJyaWVyKCkKICNkZWZpbmUgc21wX3JtYigpCWJhcnJpZXIoKQogI2RlZmluZSBzbXBfd21iKCkJYmFycmllcigpCiAjZGVmaW5lIHNtcF9yZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X21iKHZhciwgdmFsdWUpIGRvIHsgdmFyID0gdmFsdWU7IGJhcnJpZXIoKTsgfSB3aGlsZSAoMCkKICNlbmRpZgogCi0jZGVmaW5lIHNldF9tYih2YXIsIHZhbHVlKSBkbyB7IHhjaGcoJnZhciwgdmFsdWUpOyB9IHdoaWxlICgwKQotCiAjZGVmaW5lIGFyY2hfYWxpZ25fc3RhY2soeCkgKHgpCiAKICNlbmRpZiAgLyogX0FTTV9NMzJSX1NZU1RFTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1tMzJyL3RpbWV4LmgKaW5kZXggZTg5YmZkMS4uMDE5NDQxYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTMyci90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLW0zMnIvdGltZXguaApAQCAtMTIsOSArMTIsNiBAQAogCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURQkoQ09ORklHX0JVU19DTE9DSyAvIENPTkZJR19USU1FUl9ESVZJREUpCiAjZGVmaW5lIENMT0NLX1RJQ0tfRkFDVE9SCTIwCS8qIEZhY3RvciBvZiBib3RoIDEwMDAwMDAgYW5kIENMT0NLX1RJQ0tfUkFURSAqLwotI2RlZmluZSBGSU5FVFVORSAoKCgoKChsb25nKUxBVENIICogSFogLSBDTE9DS19USUNLX1JBVEUpIDw8IFNISUZUX0haKSAqIFwKLQkoMTAwMDAwMC9DTE9DS19USUNLX0ZBQ1RPUikgLyAoQ0xPQ0tfVElDS19SQVRFL0NMT0NLX1RJQ0tfRkFDVE9SKSkgXAotCQk8PCAoU0hJRlRfU0NBTEUtU0hJRlRfSFopKSAvIEhaKQogCiAjaWZkZWYgX19LRVJORUxfXwogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tMzJyL3VuaXN0ZC5oCmluZGV4IDg5ZjM3NmUuLjVjNmE5YWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW0zMnIvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTMyci91bmlzdGQuaApAQCAtMjk2LDggKzI5Niw5IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIE5SX3N5c2NhbGxzIDI4NQorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCi0vKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyNDogc2VlCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzogc2VlCiAgKiA8YXNtLW0zMnIvZXJybm8uaD4KICAqLwogCkBAIC0zMDUsNyArMzA2LDcgQEAKIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAogZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtKDEyNCArIDEpKSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSkgeyBcCiAJLyogQXZvaWQgdXNpbmcgInJlcyIgd2hpY2ggaXMgZGVjbGFyZWQgdG8gYmUgaW4gcmVnaXN0ZXIgcjA7IFwKIAkgICBlcnJubyBtaWdodCBleHBhbmQgdG8gYSBmdW5jdGlvbiBjYWxsIGFuZCBjbG9iYmVyIGl0LiAgKi8gXAogCQlpbnQgX19lcnIgPSAtKHJlcyk7IFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrL3VuaXN0ZC5oCmluZGV4IDdjMGI2MjkuLjc1MTYzMmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW02OGsvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tbTY4ay91bmlzdGQuaApAQCAtMjg4LDEzICsyODgsMTQgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNkZWZpbmUgTlJfc3lzY2FsbHMJCTI4MgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCi0vKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyNDogc2VlCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzogc2VlCiAgICA8YXNtLW02OGsvZXJybm8uaD4gKi8KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAogZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSkgeyBcCiAJLyogYXZvaWQgdXNpbmcgcmVzIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIGQwOyBcCiAJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKIAkJaW50IF9fZXJyID0gLShyZXMpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1tNjhrbm9tbXUvdW5pc3RkLmgKaW5kZXggMWIyYWJkZi4uMjFmZGMzNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbTY4a25vbW11L3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW02OGtub21tdS91bmlzdGQuaApAQCAtMjg5LDEzICsyODksMTQgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNkZWZpbmUgTlJfc3lzY2FsbHMJCTI4MgorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgogCi0vKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyMjogc2VlCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzogc2VlCiAgICA8YXNtLW02OGsvZXJybm8uaD4gKi8KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAogZG8geyBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSkgeyBcCiAJLyogYXZvaWQgdXNpbmcgcmVzIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIGQwOyBcCiAJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKIAkJaW50IF9fZXJyID0gLShyZXMpOyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL0tidWlsZCBiL2luY2x1ZGUvYXNtLW1pcHMvS2J1aWxkCmluZGV4IGM2OGUxNjguLjc4OTdmMDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvS2J1aWxkCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvS2J1aWxkCkBAIC0xICsxLDMgQEAKIGluY2x1ZGUgaW5jbHVkZS9hc20tZ2VuZXJpYy9LYnVpbGQuYXNtCisKK2hlYWRlci15ICs9IGNhY2hlY3RsLmggc2dpZGVmcy5oIHN5c21pcHMuaApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oIGIvaW5jbHVkZS9hc20tbWlwcy9ib290aW5mby5oCmluZGV4IDNiNzQ1ZTcuLjc4YzM1ZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvYm9vdGluZm8uaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL2Jvb3RpbmZvLmgKQEAgLTExMiw4ICsxMTIsNyBAQAogICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIEdBTElMRU8KICAqLwogI2RlZmluZSBNQUNIX0dST1VQX0dBTElMRU8gICAgIDExCS8qIEdhbGlsZW8gRXZhbCBCb2FyZHMJCSovCi0jZGVmaW5lICBNQUNIX0VWOTYxMDAJCTAJLyogRVY5NjEwMCAqLwotI2RlZmluZSAgTUFDSF9FVjY0MTIwQQkJMQkvKiBFVjY0MTIwQSAqLworI2RlZmluZSAgTUFDSF9FVjY0MTIwQQkJMAkvKiBFVjY0MTIwQSAqLwogCiAvKgogICogVmFsaWQgbWFjaHR5cGUgZm9yIGdyb3VwIE1PTUVOQ08KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKaW5kZXggNDdiYzhmNi4uMzY0MTZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9jYWNoZWZsdXNoLmgKQEAgLTIxLDcgKzIxLDYgQEAKICAqICAtIGZsdXNoX2NhY2hlX3JhbmdlKHZtYSwgc3RhcnQsIGVuZCkgZmx1c2hlcyBhIHJhbmdlIG9mIHBhZ2VzCiAgKiAgLSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkgZmx1c2ggYSByYW5nZSBvZiBpbnN0cnVjdGlvbnMKICAqICAtIGZsdXNoX2RjYWNoZV9wYWdlKHBnKSBmbHVzaGVzKHdiYWNrJmludmFsaWRhdGVzKSBhIHBhZ2UgZm9yIGRjYWNoZQotICogIC0gZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwZykgZmx1c2hlcyhpbnZhbGlkYXRlcykgYSBwYWdlIGZvciBpY2FjaGUKICAqCiAgKiBNSVBTIHNwZWNpZmljIGZsdXNoIG9wZXJhdGlvbnM6CiAgKgpAQCAtMzksNyArMzgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfZGNhY2hlX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaWYgKGNwdV9oYXNfZGNfYWxpYXNlcykKKwlpZiAoY3B1X2hhc19kY19hbGlhc2VzIHx8ICFjcHVfaGFzX2ljX2ZpbGxzX2ZfZGMpCiAJCV9fZmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7CiAKIH0KQEAgLTQ3LDggKzQ2LDEzIEBACiAjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfdW5sb2NrKG1hcHBpbmcpCWRvIHsgfSB3aGlsZSAoMCkKIAotZXh0ZXJuIHZvaWQgKCpmbHVzaF9pY2FjaGVfcGFnZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCitleHRlcm4gdm9pZCAoKl9fZmx1c2hfaWNhY2hlX3BhZ2UpKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBwYWdlICpwYWdlKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9pY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKKwlzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKK30KKwogZXh0ZXJuIHZvaWQgKCpmbHVzaF9pY2FjaGVfcmFuZ2UpKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKICNkZWZpbmUgZmx1c2hfY2FjaGVfdm1hcChzdGFydCwgZW5kKQkJZmx1c2hfY2FjaGVfYWxsKCkKICNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpCQlmbHVzaF9jYWNoZV9hbGwoKQpAQCAtNjAsNyArNjQsNyBAQAogCWlmIChjcHVfaGFzX2RjX2FsaWFzZXMpCiAJCWZsdXNoX2NhY2hlX3BhZ2Uodm1hLCB2YWRkciwgcGFnZV90b19wZm4ocGFnZSkpOwogCW1lbWNweShkc3QsIHNyYywgbGVuKTsKLQlmbHVzaF9pY2FjaGVfcGFnZSh2bWEsIHBhZ2UpOworCV9fZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLCBwYWdlKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGNvcHlfZnJvbV91c2VyX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmggYi9pbmNsdWRlL2FzbS1taXBzL2ZjbnRsLmgKaW5kZXggNzg3MjIwZS4uMDBhNTBlYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9mY250bC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvZmNudGwuaApAQCAtMjUsOCArMjUsNiBAQAogCiAjZGVmaW5lIEZfU0VUT1dOCTI0CS8qICBmb3Igc29ja2V0cy4gKi8KICNkZWZpbmUgRl9HRVRPV04JMjMJLyogIGZvciBzb2NrZXRzLiAqLwotI2RlZmluZSBGX1NFVFNJRwkxMAkvKiAgZm9yIHNvY2tldHMuICovCi0jZGVmaW5lIEZfR0VUU0lHCTExCS8qICBmb3Igc29ja2V0cy4gKi8KIAogI2lmbmRlZiBfX21pcHM2NAogI2RlZmluZSBGX0dFVExLNjQJMzMJLyogIHVzaW5nICdzdHJ1Y3QgZmxvY2s2NCcgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvZ2FsaWxlby1ib2FyZHMvZ3Q5NjEwMC5oIGIvaW5jbHVkZS9hc20tbWlwcy9nYWxpbGVvLWJvYXJkcy9ndDk2MTAwLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFhYmQxYjYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9nYWxpbGVvLWJvYXJkcy9ndDk2MTAwLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MjcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAyMDAwIE1vbnRhVmlzdGEgU29mdHdhcmUgSW5jLgotICogQXV0aG9yOiBNb250YVZpc3RhIFNvZnR3YXJlLCBJbmMuCi0gKiAgICAgICAgIAlzdGV2ZWxAbXZpc3RhLmNvbSBvciBzb3VyY2VAbXZpc3RhLmNvbQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLSAqICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChWZXJzaW9uIDIpIGFzCi0gKiAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKLSAqICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKLSAqICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZwotICogIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCi0gKiAgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24gTUEgMDIxMTEtMTMwNywgVVNBLgotICoKLSAqIFJlZ2lzdGVyIG9mZnNldHMgb2YgdGhlIE1JUFMgR1Q5NjEwMCBBZHZhbmNlZCBDb21tdW5pY2F0aW9uIENvbnRyb2xsZXIuCi0gKi8KLSNpZm5kZWYgX0dUOTYxMDBfSAotI2RlZmluZSBfR1Q5NjEwMF9ICi0KLS8qCi0gKiBHYWxpbGVvIEdUOTYxMDAgaW50ZXJuYWwgcmVnaXN0ZXIgYmFzZS4KLSAqLwotI2RlZmluZSBNSVBTX0dUOTYxMDBfQkFTRSAoS1NFRzFBRERSKDB4MTQwMDAwMDApKQotCi0jZGVmaW5lIEdUOTYxMDBfV1JJVEUob2ZzLCBkYXRhKSBcCi0gICAgKih2b2xhdGlsZSB1MzIgKikoTUlQU19HVDk2MTAwX0JBU0Urb2ZzKSA9IGNwdV90b19sZTMyKGRhdGEpCi0jZGVmaW5lIEdUOTYxMDBfUkVBRChvZnMpIFwKLSAgICBsZTMyX3RvX2NwdSgqKHZvbGF0aWxlIHUzMiAqKShNSVBTX0dUOTYxMDBfQkFTRStvZnMpKQotCi0jZGVmaW5lIEdUOTYxMDBfRVRIX0lPX1NJWkUgMHg0MDAwCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqICBSZWdpc3RlciBvZmZzZXQgYWRkcmVzc2VzIGZvbGxvdwotICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotLyogQ1BVIEludGVyZmFjZSBDb250cm9sIFJlZ2lzdGVycyAqLwotI2RlZmluZSBHVDk2MTAwX0NQVV9JTlRFUkZfQ09ORklHIDB4MDAwMDAwCi0KLS8qIEV0aGVybmV0IFBvcnRzICovCi0jZGVmaW5lIEdUOTYxMDBfRVRIX1BIWV9BRERSX1JFRyAgICAgICAgICAgICAweDA4MDgwMAotI2RlZmluZSBHVDk2MTAwX0VUSF9TTUlfUkVHICAgICAgICAgICAgICAgICAgMHgwODA4MTAKLS8qCi0gIFRoZXNlIGFyZSBvZmZzZXRzIHRvIHBvcnQgMCByZWdpc3RlcnMuIEFkZCBHVDk2MTAwX0VUSF9JT19TSVpFIHRvCi0gIGdldCBvZmZzZXRzIHRvIHBvcnQgMSByZWdpc3RlcnMuCi0qLwotI2RlZmluZSBHVDk2MTAwX0VUSF9QT1JUX0NPTkZJRyAgICAgICAgICAweDA4NDgwMAotI2RlZmluZSBHVDk2MTAwX0VUSF9QT1JUX0NPTkZJR19FWFQgICAgICAweDA4NDgwOAotI2RlZmluZSBHVDk2MTAwX0VUSF9QT1JUX0NPTU0gICAgICAgICAgICAweDA4NDgxMAotI2RlZmluZSBHVDk2MTAwX0VUSF9QT1JUX1NUQVRVUyAgICAgICAgICAweDA4NDgxOAotI2RlZmluZSBHVDk2MTAwX0VUSF9TRVJfUEFSQU0gICAgICAgICAgICAweDA4NDgyMAotI2RlZmluZSBHVDk2MTAwX0VUSF9IQVNIX1RCTF9QVFIgICAgICAgICAweDA4NDgyOAotI2RlZmluZSBHVDk2MTAwX0VUSF9GTE9XX0NOVFJMX1NSQ19BRERSX0wgICAgMHgwODQ4MzAKLSNkZWZpbmUgR1Q5NjEwMF9FVEhfRkxPV19DTlRSTF9TUkNfQUREUl9IICAgIDB4MDg0ODM4Ci0jZGVmaW5lIEdUOTYxMDBfRVRIX1NETUFfQ09ORklHICAgICAgICAgIDB4MDg0ODQwCi0jZGVmaW5lIEdUOTYxMDBfRVRIX1NETUFfQ09NTSAgICAgICAgICAgIDB4MDg0ODQ4Ci0jZGVmaW5lIEdUOTYxMDBfRVRIX0lOVF9DQVVTRSAgICAgICAgICAgIDB4MDg0ODUwCi0jZGVmaW5lIEdUOTYxMDBfRVRIX0lOVF9NQVNLICAgICAgICAgICAgIDB4MDg0ODU4Ci0jZGVmaW5lIEdUOTYxMDBfRVRIXzFTVF9SWF9ERVNDX1BUUjAgICAgICAgICAweDA4NDg4MAotI2RlZmluZSBHVDk2MTAwX0VUSF8xU1RfUlhfREVTQ19QVFIxICAgICAgICAgMHgwODQ4ODQKLSNkZWZpbmUgR1Q5NjEwMF9FVEhfMVNUX1JYX0RFU0NfUFRSMiAgICAgICAgIDB4MDg0ODg4Ci0jZGVmaW5lIEdUOTYxMDBfRVRIXzFTVF9SWF9ERVNDX1BUUjMgICAgICAgICAweDA4NDg4QwotI2RlZmluZSBHVDk2MTAwX0VUSF9DVVJSX1JYX0RFU0NfUFRSMCAgICAgICAgMHgwODQ4QTAKLSNkZWZpbmUgR1Q5NjEwMF9FVEhfQ1VSUl9SWF9ERVNDX1BUUjEgICAgICAgIDB4MDg0OEE0Ci0jZGVmaW5lIEdUOTYxMDBfRVRIX0NVUlJfUlhfREVTQ19QVFIyICAgICAgICAweDA4NDhBOAotI2RlZmluZSBHVDk2MTAwX0VUSF9DVVJSX1JYX0RFU0NfUFRSMyAgICAgICAgMHgwODQ4QUMKLSNkZWZpbmUgR1Q5NjEwMF9FVEhfQ1VSUl9UWF9ERVNDX1BUUjAgICAgICAgIDB4MDg0OEUwCi0jZGVmaW5lIEdUOTYxMDBfRVRIX0NVUlJfVFhfREVTQ19QVFIxICAgICAgICAweDA4NDhFNAotI2RlZmluZSBHVDk2MTAwX0VUSF9NSUJfQ09VTlRfQkFTRSAgICAgICAgICAgMHgwODU4MDAKLQotLyogU0RNQXMgKi8KLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0dST1VQX0NPTkZJRyAgICAgICAgICAgMHgxMDFBRjAKLS8qIFNETUEgR3JvdXAgMCAqLwotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfQ09ORklHICAgICAgICAweDAwMDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfQ09NTSAgICAgICAgICAweDAwMDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfUlhfREVTQ19CQVNFICAgICAgMHgwMDg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4wX0NVUlJfUlhfREVTQ19QVFIgIDB4MDA4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMF9UWF9ERVNDX0JBU0UgICAgICAweDAwQzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjBfQ1VSUl9UWF9ERVNDX1BUUiAgMHgwMEM5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4wXzFTVF9UWF9ERVNDX1BUUiAgIDB4MDBDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV9DT05GSUcgICAgICAgIDB4MDEwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV9DT01NICAgICAgICAgIDB4MDEwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV9SWF9ERVNDX0JBU0UgICAgICAweDAxODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjFfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwMTg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4xX1RYX0RFU0NfQkFTRSAgICAgIDB4MDFDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMV9DVVJSX1RYX0RFU0NfUFRSICAweDAxQzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjFfMVNUX1RYX0RFU0NfUFRSICAgMHgwMUM5MTQKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yX0NPTkZJRyAgICAgICAgMHgwMjA5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yX0NPTU0gICAgICAgICAgMHgwMjA5MDgKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yX1JYX0RFU0NfQkFTRSAgICAgIDB4MDI4OTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMl9DVVJSX1JYX0RFU0NfUFRSICAweDAyODkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjJfVFhfREVTQ19CQVNFICAgICAgMHgwMkM5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4yX0NVUlJfVFhfREVTQ19QVFIgIDB4MDJDOTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOMl8xU1RfVFhfREVTQ19QVFIgICAweDAyQzkxNAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfQ09ORklHICAgICAgICAweDAzMDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfQ09NTSAgICAgICAgICAweDAzMDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfUlhfREVTQ19CQVNFICAgICAgMHgwMzg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4zX0NVUlJfUlhfREVTQ19QVFIgIDB4MDM4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFOM19UWF9ERVNDX0JBU0UgICAgICAweDAzQzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjNfQ1VSUl9UWF9ERVNDX1BUUiAgMHgwM0M5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU4zXzFTVF9UWF9ERVNDX1BUUiAgIDB4MDNDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF9DT05GSUcgICAgICAgIDB4MDQwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF9DT01NICAgICAgICAgIDB4MDQwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF9SWF9ERVNDX0JBU0UgICAgICAweDA0ODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjRfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwNDg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU40X1RYX0RFU0NfQkFTRSAgICAgIDB4MDRDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONF9DVVJSX1RYX0RFU0NfUFRSICAweDA0QzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjRfMVNUX1RYX0RFU0NfUFRSICAgMHgwNEM5MTQKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41X0NPTkZJRyAgICAgICAgMHgwNTA5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41X0NPTU0gICAgICAgICAgMHgwNTA5MDgKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41X1JYX0RFU0NfQkFTRSAgICAgIDB4MDU4OTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONV9DVVJSX1JYX0RFU0NfUFRSICAweDA1ODkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjVfVFhfREVTQ19CQVNFICAgICAgMHgwNUM5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU41X0NVUlJfVFhfREVTQ19QVFIgIDB4MDVDOTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONV8xU1RfVFhfREVTQ19QVFIgICAweDA1QzkxNAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfQ09ORklHICAgICAgICAweDA2MDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfQ09NTSAgICAgICAgICAweDA2MDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfUlhfREVTQ19CQVNFICAgICAgMHgwNjg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU42X0NVUlJfUlhfREVTQ19QVFIgIDB4MDY4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFONl9UWF9ERVNDX0JBU0UgICAgICAweDA2QzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjZfQ1VSUl9UWF9ERVNDX1BUUiAgMHgwNkM5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU42XzFTVF9UWF9ERVNDX1BUUiAgIDB4MDZDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON19DT05GSUcgICAgICAgIDB4MDcwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON19DT01NICAgICAgICAgIDB4MDcwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON19SWF9ERVNDX0JBU0UgICAgICAweDA3ODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjdfQ1VSUl9SWF9ERVNDX1BUUiAgMHgwNzg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cwX0NIQU43X1RYX0RFU0NfQkFTRSAgICAgIDB4MDdDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMF9DSEFON19DVVJSX1RYX0RFU0NfUFRSICAweDA3QzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzBfQ0hBTjdfMVNUX1RYX0RFU0NfUFRSICAgMHgwN0M5MTQKLS8qIFNETUEgR3JvdXAgMSAqLwotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfQ09ORklHICAgICAgICAweDEwMDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfQ09NTSAgICAgICAgICAweDEwMDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfUlhfREVTQ19CQVNFICAgICAgMHgxMDg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4wX0NVUlJfUlhfREVTQ19QVFIgIDB4MTA4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMF9UWF9ERVNDX0JBU0UgICAgICAweDEwQzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjBfQ1VSUl9UWF9ERVNDX1BUUiAgMHgxMEM5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4wXzFTVF9UWF9ERVNDX1BUUiAgIDB4MTBDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV9DT05GSUcgICAgICAgIDB4MTEwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV9DT01NICAgICAgICAgIDB4MTEwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV9SWF9ERVNDX0JBU0UgICAgICAweDExODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjFfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxMTg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4xX1RYX0RFU0NfQkFTRSAgICAgIDB4MTFDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMV9DVVJSX1RYX0RFU0NfUFRSICAweDExQzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjFfMVNUX1RYX0RFU0NfUFRSICAgMHgxMUM5MTQKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yX0NPTkZJRyAgICAgICAgMHgxMjA5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yX0NPTU0gICAgICAgICAgMHgxMjA5MDgKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yX1JYX0RFU0NfQkFTRSAgICAgIDB4MTI4OTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMl9DVVJSX1JYX0RFU0NfUFRSICAweDEyODkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjJfVFhfREVTQ19CQVNFICAgICAgMHgxMkM5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4yX0NVUlJfVFhfREVTQ19QVFIgIDB4MTJDOTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOMl8xU1RfVFhfREVTQ19QVFIgICAweDEyQzkxNAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfQ09ORklHICAgICAgICAweDEzMDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfQ09NTSAgICAgICAgICAweDEzMDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfUlhfREVTQ19CQVNFICAgICAgMHgxMzg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4zX0NVUlJfUlhfREVTQ19QVFIgIDB4MTM4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFOM19UWF9ERVNDX0JBU0UgICAgICAweDEzQzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjNfQ1VSUl9UWF9ERVNDX1BUUiAgMHgxM0M5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU4zXzFTVF9UWF9ERVNDX1BUUiAgIDB4MTNDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF9DT05GSUcgICAgICAgIDB4MTQwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF9DT01NICAgICAgICAgIDB4MTQwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF9SWF9ERVNDX0JBU0UgICAgICAweDE0ODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjRfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxNDg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU40X1RYX0RFU0NfQkFTRSAgICAgIDB4MTRDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONF9DVVJSX1RYX0RFU0NfUFRSICAweDE0QzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjRfMVNUX1RYX0RFU0NfUFRSICAgMHgxNEM5MTQKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41X0NPTkZJRyAgICAgICAgMHgxNTA5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41X0NPTU0gICAgICAgICAgMHgxNTA5MDgKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41X1JYX0RFU0NfQkFTRSAgICAgIDB4MTU4OTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONV9DVVJSX1JYX0RFU0NfUFRSICAweDE1ODkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjVfVFhfREVTQ19CQVNFICAgICAgMHgxNUM5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU41X0NVUlJfVFhfREVTQ19QVFIgIDB4MTVDOTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONV8xU1RfVFhfREVTQ19QVFIgICAweDE1QzkxNAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfQ09ORklHICAgICAgICAweDE2MDkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfQ09NTSAgICAgICAgICAweDE2MDkwOAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfUlhfREVTQ19CQVNFICAgICAgMHgxNjg5MDAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU42X0NVUlJfUlhfREVTQ19QVFIgIDB4MTY4OTEwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFONl9UWF9ERVNDX0JBU0UgICAgICAweDE2QzkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjZfQ1VSUl9UWF9ERVNDX1BUUiAgMHgxNkM5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU42XzFTVF9UWF9ERVNDX1BUUiAgIDB4MTZDOTE0Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON19DT05GSUcgICAgICAgIDB4MTcwOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON19DT01NICAgICAgICAgIDB4MTcwOTA4Ci0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON19SWF9ERVNDX0JBU0UgICAgICAweDE3ODkwMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjdfQ1VSUl9SWF9ERVNDX1BUUiAgMHgxNzg5MTAKLSNkZWZpbmUgR1Q5NjEwMF9TRE1BX0cxX0NIQU43X1RYX0RFU0NfQkFTRSAgICAgIDB4MTdDOTAwCi0jZGVmaW5lIEdUOTYxMDBfU0RNQV9HMV9DSEFON19DVVJSX1RYX0RFU0NfUFRSICAweDE3QzkxMAotI2RlZmluZSBHVDk2MTAwX1NETUFfRzFfQ0hBTjdfMVNUX1RYX0RFU0NfUFRSICAgMHgxN0M5MTQKLS8qICBNUFNDcyAgKi8KLSNkZWZpbmUgR1Q5NjEwMF9NUFNDMF9NQUlOX0NPTkZJR19MT1cgICAweDAwMEEwMAotI2RlZmluZSBHVDk2MTAwX01QU0MwX01BSU5fQ09ORklHX0hJR0ggIDB4MDAwQTA0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzBfUFJPVE9DT0xfQ09ORklHICAgMHgwMDBBMDgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzEgICAgICAgICAweDAwMEEwQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHMiAgICAgICAgIDB4MDAwQTEwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUczICAgICAgICAgMHgwMDBBMTQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzQgICAgICAgICAweDAwMEExOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHNSAgICAgICAgIDB4MDAwQTFDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUc2ICAgICAgICAgMHgwMDBBMjAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzcgICAgICAgICAweDAwMEEyNAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHOCAgICAgICAgIDB4MDAwQTI4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMF9SRUc5ICAgICAgICAgMHgwMDBBMkMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4wX1JFRzEwICAgICAgICAweDAwMEEzMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjBfUkVHMTEgICAgICAgIDB4MDAwQTM0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzFfTUFJTl9DT05GSUdfTE9XICAgMHgwMDhBMDAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDMV9NQUlOX0NPTkZJR19ISUdIICAweDAwOEEwNAotI2RlZmluZSBHVDk2MTAwX01QU0MxX1BST1RPQ09MX0NPTkZJRyAgIDB4MDA4QTA4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUcxICAgICAgICAgMHgwMDhBMEMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzIgICAgICAgICAweDAwOEExMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHMyAgICAgICAgIDB4MDA4QTE0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUc0ICAgICAgICAgMHgwMDhBMTgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzUgICAgICAgICAweDAwOEExQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHNiAgICAgICAgIDB4MDA4QTIwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUc3ICAgICAgICAgMHgwMDhBMjQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzggICAgICAgICAweDAwOEEyOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjFfUkVHOSAgICAgICAgIDB4MDA4QTJDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMV9SRUcxMCAgICAgICAgMHgwMDhBMzAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4xX1JFRzExICAgICAgICAweDAwOEEzNAotI2RlZmluZSBHVDk2MTAwX01QU0MyX01BSU5fQ09ORklHX0xPVyAgIDB4MDEwQTAwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQzJfTUFJTl9DT05GSUdfSElHSCAgMHgwMTBBMDQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDMl9QUk9UT0NPTF9DT05GSUcgICAweDAxMEEwOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHMSAgICAgICAgIDB4MDEwQTBDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUcyICAgICAgICAgMHgwMTBBMTAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzMgICAgICAgICAweDAxMEExNAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHNCAgICAgICAgIDB4MDEwQTE4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUc1ICAgICAgICAgMHgwMTBBMUMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzYgICAgICAgICAweDAxMEEyMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHNyAgICAgICAgIDB4MDEwQTI0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUc4ICAgICAgICAgMHgwMTBBMjgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4yX1JFRzkgICAgICAgICAweDAxMEEyQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjJfUkVHMTAgICAgICAgIDB4MDEwQTMwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOMl9SRUcxMSAgICAgICAgMHgwMTBBMzQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDM19NQUlOX0NPTkZJR19MT1cgICAweDAxOEEwMAotI2RlZmluZSBHVDk2MTAwX01QU0MzX01BSU5fQ09ORklHX0hJR0ggIDB4MDE4QTA0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzNfUFJPVE9DT0xfQ09ORklHICAgMHgwMThBMDgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzEgICAgICAgICAweDAxOEEwQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHMiAgICAgICAgIDB4MDE4QTEwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUczICAgICAgICAgMHgwMThBMTQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzQgICAgICAgICAweDAxOEExOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHNSAgICAgICAgIDB4MDE4QTFDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUc2ICAgICAgICAgMHgwMThBMjAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzcgICAgICAgICAweDAxOEEyNAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHOCAgICAgICAgIDB4MDE4QTI4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFOM19SRUc5ICAgICAgICAgMHgwMThBMkMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU4zX1JFRzEwICAgICAgICAweDAxOEEzMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjNfUkVHMTEgICAgICAgIDB4MDE4QTM0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzRfTUFJTl9DT05GSUdfTE9XICAgMHgwMjBBMDAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDNF9NQUlOX0NPTkZJR19ISUdIICAweDAyMEEwNAotI2RlZmluZSBHVDk2MTAwX01QU0M0X1BST1RPQ09MX0NPTkZJRyAgIDB4MDIwQTA4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUcxICAgICAgICAgMHgwMjBBMEMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzIgICAgICAgICAweDAyMEExMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHMyAgICAgICAgIDB4MDIwQTE0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUc0ICAgICAgICAgMHgwMjBBMTgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzUgICAgICAgICAweDAyMEExQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHNiAgICAgICAgIDB4MDIwQTIwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUc3ICAgICAgICAgMHgwMjBBMjQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzggICAgICAgICAweDAyMEEyOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjRfUkVHOSAgICAgICAgIDB4MDIwQTJDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONF9SRUcxMCAgICAgICAgMHgwMjBBMzAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU40X1JFRzExICAgICAgICAweDAyMEEzNAotI2RlZmluZSBHVDk2MTAwX01QU0M1X01BSU5fQ09ORklHX0xPVyAgIDB4MDI4QTAwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQzVfTUFJTl9DT05GSUdfSElHSCAgMHgwMjhBMDQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDNV9QUk9UT0NPTF9DT05GSUcgICAweDAyOEEwOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHMSAgICAgICAgIDB4MDI4QTBDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUcyICAgICAgICAgMHgwMjhBMTAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzMgICAgICAgICAweDAyOEExNAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHNCAgICAgICAgIDB4MDI4QTE4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUc1ICAgICAgICAgMHgwMjhBMUMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzYgICAgICAgICAweDAyOEEyMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHNyAgICAgICAgIDB4MDI4QTI0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUc4ICAgICAgICAgMHgwMjhBMjgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU41X1JFRzkgICAgICAgICAweDAyOEEyQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjVfUkVHMTAgICAgICAgIDB4MDI4QTMwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONV9SRUcxMSAgICAgICAgMHgwMjhBMzQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDNl9NQUlOX0NPTkZJR19MT1cgICAweDAzMEEwMAotI2RlZmluZSBHVDk2MTAwX01QU0M2X01BSU5fQ09ORklHX0hJR0ggIDB4MDMwQTA0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzZfUFJPVE9DT0xfQ09ORklHICAgMHgwMzBBMDgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzEgICAgICAgICAweDAzMEEwQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHMiAgICAgICAgIDB4MDMwQTEwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUczICAgICAgICAgMHgwMzBBMTQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzQgICAgICAgICAweDAzMEExOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHNSAgICAgICAgIDB4MDMwQTFDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUc2ICAgICAgICAgMHgwMzBBMjAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzcgICAgICAgICAweDAzMEEyNAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHOCAgICAgICAgIDB4MDMwQTI4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFONl9SRUc5ICAgICAgICAgMHgwMzBBMkMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU42X1JFRzEwICAgICAgICAweDAzMEEzMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjZfUkVHMTEgICAgICAgIDB4MDMwQTM0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQzdfTUFJTl9DT05GSUdfTE9XICAgMHgwMzhBMDAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDN19NQUlOX0NPTkZJR19ISUdIICAweDAzOEEwNAotI2RlZmluZSBHVDk2MTAwX01QU0M3X1BST1RPQ09MX0NPTkZJRyAgIDB4MDM4QTA4Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUcxICAgICAgICAgMHgwMzhBMEMKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzIgICAgICAgICAweDAzOEExMAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHMyAgICAgICAgIDB4MDM4QTE0Ci0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUc0ICAgICAgICAgMHgwMzhBMTgKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzUgICAgICAgICAweDAzOEExQwotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHNiAgICAgICAgIDB4MDM4QTIwCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUc3ICAgICAgICAgMHgwMzhBMjQKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzggICAgICAgICAweDAzOEEyOAotI2RlZmluZSBHVDk2MTAwX01QU0NfQ0hBTjdfUkVHOSAgICAgICAgIDB4MDM4QTJDCi0jZGVmaW5lIEdUOTYxMDBfTVBTQ19DSEFON19SRUcxMCAgICAgICAgMHgwMzhBMzAKLSNkZWZpbmUgR1Q5NjEwMF9NUFNDX0NIQU43X1JFRzExICAgICAgICAweDAzOEEzNAotLyogIEZsZXhURE1zICAqLwotLyogVERQUjAgLSBUcmFuc21pdCBEdWFsIFBvcnQgUkFNLiBibG9jayBzaXplIDB4ZmYgKi8KLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfVERQUjBfQkxLMF9CQVNFICAweDAwMEIwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9URFBSMF9CTEsxX0JBU0UgIDB4MDAxQjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0wX1REUFIwX0JMSzJfQkFTRSAgMHgwMDJCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfVERQUjBfQkxLM19CQVNFICAweDAwM0IwMAotLyogUkRQUjAgLSBSZWNlaXZlIER1YWwgUG9ydCBSQU0uIGJsb2NrIHNpemUgMHhmZiAqLwotI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9SRFBSMF9CTEswX0JBU0UgIDB4MDA0QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0wX1JEUFIwX0JMSzFfQkFTRSAgMHgwMDVCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfUkRQUjBfQkxLMl9CQVNFICAweDAwNkIwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9SRFBSMF9CTEszX0JBU0UgIDB4MDA3QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0wX1RYX1JFQURfUFRSICAgICAgMHgwMDhCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfUlhfUkVBRF9QVFIgICAgICAweDAwOEIwNAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9DT05GSUcgICAgICAgMHgwMDhCMDgKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfQVVYX0NIQU5BX1RYIDB4MDA4QjBDCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0wX0FVWF9DSEFOQV9SWCAweDAwOEIxMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMF9BVVhfQ0hBTkJfVFggMHgwMDhCMTQKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTBfQVVYX0NIQU5CX1JYIDB4MDA4QjE4Ci0jZGVmaW5lIEdUOTYxMDBfRlhURE0xX1REUFIxX0JMSzBfQkFTRSAgMHgwMTBCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfVERQUjFfQkxLMV9CQVNFICAweDAxMUIwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9URFBSMV9CTEsyX0JBU0UgIDB4MDEyQjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0xX1REUFIxX0JMSzNfQkFTRSAgMHgwMTNCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfUkRQUjFfQkxLMF9CQVNFICAweDAxNEIwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9SRFBSMV9CTEsxX0JBU0UgIDB4MDE1QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0xX1JEUFIxX0JMSzJfQkFTRSAgMHgwMTZCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfUkRQUjFfQkxLM19CQVNFICAweDAxN0IwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9UWF9SRUFEX1BUUiAgICAgIDB4MDE4QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0xX1JYX1JFQURfUFRSICAgICAgMHgwMThCMDQKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTFfQ09ORklHICAgICAgIDB4MDE4QjA4Ci0jZGVmaW5lIEdUOTYxMDBfRlhURE0xX0FVWF9DSEFOQV9UWCAweDAxOEIwQwotI2RlZmluZSBHVDk2MTAwX0ZYVERNMV9BVVhfQ0hBTkFfUlggMHgwMThCMTAKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTFfQVVYX0NIQU5CX1RYIDB4MDE4QjE0Ci0jZGVmaW5lIEdUOTYxMDBfRkxURE0xX0FVWF9DSEFOQl9SWCAweDAxOEIxOAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9URFBSMl9CTEswX0JBU0UgIDB4MDIwQjAwCi0jZGVmaW5lIEdUOTYxMDBfRkxURE0yX1REUFIyX0JMSzFfQkFTRSAgMHgwMjFCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfVERQUjJfQkxLMl9CQVNFICAweDAyMkIwMAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9URFBSMl9CTEszX0JBU0UgIDB4MDIzQjAwCi0jZGVmaW5lIEdUOTYxMDBfRkxURE0yX1JEUFIyX0JMSzBfQkFTRSAgMHgwMjRCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfUkRQUjJfQkxLMV9CQVNFICAweDAyNUIwMAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9SRFBSMl9CTEsyX0JBU0UgIDB4MDI2QjAwCi0jZGVmaW5lIEdUOTYxMDBfRkxURE0yX1JEUFIyX0JMSzNfQkFTRSAgMHgwMjdCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfVFhfUkVBRF9QVFIgICAgICAweDAyOEIwMAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9SWF9SRUFEX1BUUiAgICAgIDB4MDI4QjA0Ci0jZGVmaW5lIEdUOTYxMDBfRkxURE0yX0NPTkZJRyAgICAgICAweDAyOEIwOAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9BVVhfQ0hBTkFfVFggMHgwMjhCMEMKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTJfQVVYX0NIQU5BX1JYIDB4MDI4QjEwCi0jZGVmaW5lIEdUOTYxMDBfRkxURE0yX0FVWF9DSEFOQl9UWCAweDAyOEIxNAotI2RlZmluZSBHVDk2MTAwX0ZMVERNMl9BVVhfQ0hBTkJfUlggMHgwMjhCMTgKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTNfVERQUjNfQkxLMF9CQVNFICAweDAzMEIwMAotI2RlZmluZSBHVDk2MTAwX0ZMVERNM19URFBSM19CTEsxX0JBU0UgIDB4MDMxQjAwCi0jZGVmaW5lIEdUOTYxMDBfRkxURE0zX1REUFIzX0JMSzJfQkFTRSAgMHgwMzJCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GTFRETTNfVERQUjNfQkxLM19CQVNFICAweDAzM0IwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNM19SRFBSM19CTEswX0JBU0UgIDB4MDM0QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0zX1JEUFIzX0JMSzFfQkFTRSAgMHgwMzVCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfUkRQUjNfQkxLMl9CQVNFICAweDAzNkIwMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNM19SRFBSM19CTEszX0JBU0UgIDB4MDM3QjAwCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0zX1RYX1JFQURfUFRSICAgICAgMHgwMzhCMDAKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfUlhfUkVBRF9QVFIgICAgICAweDAzOEIwNAotI2RlZmluZSBHVDk2MTAwX0ZYVERNM19DT05GSUcgICAgICAgMHgwMzhCMDgKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfQVVYX0NIQU5BX1RYIDB4MDM4QjBDCi0jZGVmaW5lIEdUOTYxMDBfRlhURE0zX0FVWF9DSEFOQV9SWCAweDAzOEIxMAotI2RlZmluZSBHVDk2MTAwX0ZYVERNM19BVVhfQ0hBTkJfVFggMHgwMzhCMTQKLSNkZWZpbmUgR1Q5NjEwMF9GWFRETTNfQVVYX0NIQU5CX1JYIDB4MDM4QjE4Ci0vKiAgQmF1ZCBSYXRlIEdlbmVyYXRvcnMgICovCi0jZGVmaW5lIEdUOTYxMDBfQlJHMF9DT05GSUcgICAgIDB4MTAyQTAwCi0jZGVmaW5lIEdUOTYxMDBfQlJHMF9CQVVEX1RVTkUgIDB4MTAyQTA0Ci0jZGVmaW5lIEdUOTYxMDBfQlJHMV9DT05GSUcgICAgIDB4MTAyQTA4Ci0jZGVmaW5lIEdUOTYxMDBfQlJHMV9CQVVEX1RVTkUgIDB4MTAyQTBDCi0jZGVmaW5lIEdUOTYxMDBfQlJHMl9DT05GSUcgICAgIDB4MTAyQTEwCi0jZGVmaW5lIEdUOTYxMDBfQlJHMl9CQVVEX1RVTkUgIDB4MTAyQTE0Ci0jZGVmaW5lIEdUOTYxMDBfQlJHM19DT05GSUcgICAgIDB4MTAyQTE4Ci0jZGVmaW5lIEdUOTYxMDBfQlJHM19CQVVEX1RVTkUgIDB4MTAyQTFDCi0jZGVmaW5lIEdUOTYxMDBfQlJHNF9DT05GSUcgICAgIDB4MTAyQTIwCi0jZGVmaW5lIEdUOTYxMDBfQlJHNF9CQVVEX1RVTkUgIDB4MTAyQTI0Ci0jZGVmaW5lIEdUOTYxMDBfQlJHNV9DT05GSUcgICAgIDB4MTAyQTI4Ci0jZGVmaW5lIEdUOTYxMDBfQlJHNV9CQVVEX1RVTkUgIDB4MTAyQTJDCi0jZGVmaW5lIEdUOTYxMDBfQlJHNl9DT05GSUcgICAgIDB4MTAyQTMwCi0jZGVmaW5lIEdUOTYxMDBfQlJHNl9CQVVEX1RVTkUgIDB4MTAyQTM0Ci0jZGVmaW5lIEdUOTYxMDBfQlJHN19DT05GSUcgICAgIDB4MTAyQTM4Ci0jZGVmaW5lIEdUOTYxMDBfQlJHN19CQVVEX1RVTkUgIDB4MTAyQTNDCi0vKiAgUm91dGluZyBSZWdpc3RlcnMgICovCi0jZGVmaW5lIEdUOTYxMDBfUk9VVEVfTUFJTiAgICAgIDB4MTAxQTAwCi0jZGVmaW5lIEdUOTYxMDBfUk9VVEVfUlhfQ0xPQ0sgIDB4MTAxQTEwCi0jZGVmaW5lIEdUOTYxMDBfUk9VVEVfVFhfQ0xPQ0sgIDB4MTAxQTIwCi0vKiAgR2VuZXJhbCBQdXJwb3NlIFBvcnRzICAqLwotI2RlZmluZSBHVDk2MTAwX0dQUF9DT05GSUcwICAgICAweDEwMEEwMAotI2RlZmluZSBHVDk2MTAwX0dQUF9DT05GSUcxICAgICAweDEwMEEwNAotI2RlZmluZSBHVDk2MTAwX0dQUF9DT05GSUcyICAgICAweDEwMEEwOAotI2RlZmluZSBHVDk2MTAwX0dQUF9DT05GSUczICAgICAweDEwMEEwQwotI2RlZmluZSBHVDk2MTAwX0dQUF9JTzAgICAgICAgICAweDEwMEEyMAotI2RlZmluZSBHVDk2MTAwX0dQUF9JTzEgICAgICAgICAweDEwMEEyNAotI2RlZmluZSBHVDk2MTAwX0dQUF9JTzIgICAgICAgICAweDEwMEEyOAotI2RlZmluZSBHVDk2MTAwX0dQUF9JTzMgICAgICAgICAweDEwMEEyQwotI2RlZmluZSBHVDk2MTAwX0dQUF9EQVRBMCAgICAgICAweDEwMEE0MAotI2RlZmluZSBHVDk2MTAwX0dQUF9EQVRBMSAgICAgICAweDEwMEE0NAotI2RlZmluZSBHVDk2MTAwX0dQUF9EQVRBMiAgICAgICAweDEwMEE0OAotI2RlZmluZSBHVDk2MTAwX0dQUF9EQVRBMyAgICAgICAweDEwMEE0QwotI2RlZmluZSBHVDk2MTAwX0dQUF9MRVZFTDAgICAgICAweDEwMEE2MAotI2RlZmluZSBHVDk2MTAwX0dQUF9MRVZFTDEgICAgICAweDEwMEE2NAotI2RlZmluZSBHVDk2MTAwX0dQUF9MRVZFTDIgICAgICAweDEwMEE2OAotI2RlZmluZSBHVDk2MTAwX0dQUF9MRVZFTDMgICAgICAweDEwMEE2QwotLyogIFdhdGNoZG9nICAqLwotI2RlZmluZSBHVDk2MTAwX1dEX0NPTkZJRyAgIDB4MTAxQTgwCi0jZGVmaW5lIEdUOTYxMDBfV0RfVkFMVUUgICAgMHgxMDFBODQKLS8qIENvbW11bmljYXRpb24gVW5pdCBBcmJpdGVyICAqLwotI2RlZmluZSBHVDk2MTAwX0NPTU1fVU5JVF9BUkJUUl9DT05GSUcgMHgxMDFBQzAKLS8qICBQQ0kgQXJiaXRlcnMgICovCi0jZGVmaW5lIEdUOTYxMDBfUENJMF9BUkJUUl9DT05GSUcgMHgxMDFBRTAKLSNkZWZpbmUgR1Q5NjEwMF9QQ0kxX0FSQlRSX0NPTkZJRyAweDEwMUFFNAotLyogQ0lVIEFyYml0ZXIgKi8KLSNkZWZpbmUgR1Q5NjEwMF9DSVVfQVJCSVRFUl9DT05GSUcgMHgxMDFBQzAKLS8qIEludGVycnVwdCBDb250cm9sbGVyICovCi0jZGVmaW5lIEdUOTYxMDBfTUFJTl9DQVVTRSAgICAgMHgwMDBDMTgKLSNkZWZpbmUgR1Q5NjEwMF9JTlQwX01BSU5fTUFTSyAweDAwMEMxQwotI2RlZmluZSBHVDk2MTAwX0lOVDFfTUFJTl9NQVNLIDB4MDAwQzI0Ci0jZGVmaW5lIEdUOTYxMDBfSElHSF9DQVVTRSAgICAgMHgwMDBDOTgKLSNkZWZpbmUgR1Q5NjEwMF9JTlQwX0hJR0hfTUFTSyAweDAwMEM5QwotI2RlZmluZSBHVDk2MTAwX0lOVDFfSElHSF9NQVNLIDB4MDAwQ0E0Ci0jZGVmaW5lIEdUOTYxMDBfSU5UMF9TRUxFQ1QgICAgMHgwMDBDNzAKLSNkZWZpbmUgR1Q5NjEwMF9JTlQxX1NFTEVDVCAgICAweDAwMEM3NAotI2RlZmluZSBHVDk2MTAwX1NFUklBTF9DQVVTRSAgIDB4MTAzQTAwCi0jZGVmaW5lIEdUOTYxMDBfU0VSSU5UMF9NQVNLICAgMHgxMDNBODAKLSNkZWZpbmUgR1Q5NjEwMF9TRVJJTlQxX01BU0sgICAweDEwM0E4OAotCi0jZW5kaWYgLyogIF9HVDk2MTAwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaGF6YXJkcy5oIGIvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKaW5kZXggMjVmNWU4YS4uMGZlMDI5NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9oYXphcmRzLmgKQEAgLTEyLDI1MiArMTIsNTMgQEAKIAogCiAjaWZkZWYgX19BU1NFTUJMWV9fCi0KLQkubWFjcm8JX3Nzbm9wCi0Jc2xsCSQwLCAkMCwgMQotCS5lbmRtCi0KLQkubWFjcm8JX2VoYgotCXNsbAkkMCwgJDAsIDMKLQkuZW5kbQotCi0vKgotICogUk05MDAwIGhhemFyZHMuICBXaGVuIHRoZSBKVExCIGlzIHVwZGF0ZWQgYnkgdGxid2kgb3IgdGxid3IsIGEgc3Vic2VxdWVudAotICogdXNlIG9mIHRoZSBKVExCIGZvciBpbnN0cnVjdGlvbnMgc2hvdWxkIG5vdCBvY2N1ciBmb3IgNCBjcHUgY3ljbGVzIGFuZCB1c2UKLSAqIGZvciBkYXRhIHRyYW5zbGF0aW9ucyBzaG91bGQgbm90IG9jY3VyIGZvciAzIGNwdSBjeWNsZXMuCi0gKi8KLSNpZmRlZiBDT05GSUdfQ1BVX1JNOTAwMAotCi0JLm1hY3JvCW10YzBfdGxid19oYXphcmQKLQkuc2V0CXB1c2gKLQkuc2V0CW1pcHMzMgotCV9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAotCS5zZXQJcG9wCi0JLmVuZG0KLQotCS5tYWNybwl0bGJ3X2VyZXRfaGF6YXJkCi0JLnNldAlwdXNoCi0JLnNldAltaXBzMzIKLQlfc3Nub3A7IF9zc25vcDsgX3Nzbm9wOyBfc3Nub3AKLQkuc2V0CXBvcAotCS5lbmRtCi0KKyNkZWZpbmUgQVNNTUFDUk8obmFtZSwgY29kZS4uLikgLm1hY3JvIG5hbWU7IGNvZGU7IC5lbmRtCiAjZWxzZQogCi0vKgotICogVGhlIHRha2VuIGJyYW5jaCB3aWxsIHJlc3VsdCBpbiBhIHR3byBjeWNsZSBwZW5hbHR5IGZvciB0aGUgdHdvIGtpbGxlZAotICogaW5zdHJ1Y3Rpb25zIG9uIFI0MDAwIC8gUjQ0MDAuICBPdGhlciBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBhIHNpbmdsZSBjeWNsZQotICogaGF6YXJkIHNvIHRoaXMgaXMgbmljZSB0cmljayB0byBoYXZlIGFuIG9wdGltYWwgY29kZSBmb3IgYSByYW5nZSBvZgotICogcHJvY2Vzc29ycy4KLSAqLwotCS5tYWNybwltdGMwX3RsYndfaGF6YXJkCi0JYgkuICsgOAotCS5lbmRtCisjZGVmaW5lIEFTTU1BQ1JPKG5hbWUsIGNvZGUuLi4pCQkJCQkJXAorX19hc21fXygiLm1hY3JvICIgI25hbWUgIjsgIiAjY29kZSAiOyAuZW5kbSIpOwkJCQlcCisJCQkJCQkJCQlcCitzdGF0aWMgaW5saW5lIHZvaWQgbmFtZSh2b2lkKQkJCQkJCVwKK3sJCQkJCQkJCQlcCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKCNuYW1lKTsJCQkJCVwKK30KIAotCS5tYWNybwl0bGJ3X2VyZXRfaGF6YXJkCi0JLmVuZG0KICNlbmRpZgogCitBU01NQUNSTyhfc3Nub3AsCisJIHNsbAkkMCwgJDAsIDEKKwkpCisKK0FTTU1BQ1JPKF9laGIsCisJIHNsbAkkMCwgJDAsIDMKKwkpCisKIC8qCi0gKiBtdGMwLT5tZmMwIGhhemFyZAotICogVGhlIDI0SyBoYXMgYSAyIGN5Y2xlIG10YzAvbWZjMCBleGVjdXRpb24gaGF6YXJkLgotICogSXQgaXMgYSBNSVBTMzJSMiBwcm9jZXNzb3Igc28gZWhiIHdpbGwgY2xlYXIgdGhlIGhhemFyZC4KKyAqIFRMQiBoYXphcmRzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IyKQorCisvKgorICogTUlQU1IyIGRlZmluZXMgZWhiIGZvciBoYXphcmQgYXZvaWRhbmNlCiAgKi8KIAotI2lmZGVmIENPTkZJR19DUFVfTUlQU1IyCi0vKgotICogVXNlIGEgbWFjcm8gZm9yIGVoYiB1bmxlc3MgZXhwbGljaXQgc3VwcG9ydCBmb3IgTUlQU1IyIGlzIGVuYWJsZWQKLSAqLwotCi0jZGVmaW5lIGlycV9lbmFibGVfaGF6YXJkCQkJCQkJXAorQVNNTUFDUk8obXRjMF90bGJ3X2hhemFyZCwKKwkgX2VoYgorCSkKK0FTTU1BQ1JPKHRsYndfdXNlX2hhemFyZCwKKwkgX2VoYgorCSkKK0FTTU1BQ1JPKHRsYl9wcm9iZV9oYXphcmQsCisJIF9laGIKKwkpCitBU01NQUNSTyhpcnFfZW5hYmxlX2hhemFyZCwKKwkpCitBU01NQUNSTyhpcnFfZGlzYWJsZV9oYXphcmQsCiAJX2VoYgotCi0jZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZAkJCQkJCVwKLQlfZWhiCi0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCi0KLS8qCi0gKiBSMTAwMDAgcm9ja3MgLSBhbGwgaGF6YXJkcyBoYW5kbGVkIGluIGhhcmR3YXJlLCBzbyB0aGlzIGJlY29tZXMgYSBub2JyYWluZXIuCi0gKi8KLQotI2RlZmluZSBpcnFfZW5hYmxlX2hhemFyZAotCi0jZGVmaW5lIGlycV9kaXNhYmxlX2hhemFyZAotCi0jZWxzZQotCi0vKgotICogQ2xhc3NpYyBNSVBTIG5lZWRzIDEgLSAzIG5vcHMgb3Igc3Nub3BzCi0gKi8KLSNkZWZpbmUgaXJxX2VuYWJsZV9oYXphcmQKLSNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkCQkJCQkJXAotCV9zc25vcDsgX3Nzbm9wOyBfc3Nub3AKLQotI2VuZGlmCi0KLSNlbHNlIC8qIF9fQVNTRU1CTFlfXyAqLwotCi1fX2FzbV9fKAotCSIJLm1hY3JvCV9zc25vcAkJCQkJXG4iCi0JIglzbGwJJDAsICQwLCAxCQkJCVxuIgotCSIJLmVuZG0JCQkJCQlcbiIKLQkiCQkJCQkJCVxuIgotCSIJLm1hY3JvCV9laGIJCQkJCVxuIgotCSIJc2xsCSQwLCAkMCwgMwkJCQlcbiIKLQkiCS5lbmRtCQkJCQkJXG4iKTsKLQotI2lmZGVmIENPTkZJR19DUFVfUk05MDAwCi0KLS8qCi0gKiBSTTkwMDAgaGF6YXJkcy4gIFdoZW4gdGhlIEpUTEIgaXMgdXBkYXRlZCBieSB0bGJ3aSBvciB0bGJ3ciwgYSBzdWJzZXF1ZW50Ci0gKiB1c2Ugb2YgdGhlIEpUTEIgZm9yIGluc3RydWN0aW9ucyBzaG91bGQgbm90IG9jY3VyIGZvciA0IGNwdSBjeWNsZXMgYW5kIHVzZQotICogZm9yIGRhdGEgdHJhbnNsYXRpb25zIHNob3VsZCBub3Qgb2NjdXIgZm9yIDMgY3B1IGN5Y2xlcy4KLSAqLwotCi0jZGVmaW5lIG10YzBfdGxid19oYXphcmQoKQkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygJCQkJCQlcCi0JIgkuc2V0CW1pcHMzMgkJCQkJXG4iCVwKLQkiCV9zc25vcAkJCQkJCVxuIglcCi0JIglfc3Nub3AJCQkJCQlcbiIJXAotCSIJX3Nzbm9wCQkJCQkJXG4iCVwKLQkiCV9zc25vcAkJCQkJCVxuIglcCi0JIgkuc2V0CW1pcHMwCQkJCQlcbiIpCi0KLSNkZWZpbmUgdGxid191c2VfaGF6YXJkKCkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCSIJLnNldAltaXBzMzIJCQkJCVxuIglcCi0JIglfc3Nub3AJCQkJCQlcbiIJXAotCSIJX3Nzbm9wCQkJCQkJXG4iCVwKLQkiCV9zc25vcAkJCQkJCVxuIglcCi0JIglfc3Nub3AJCQkJCQlcbiIJXAotCSIJLnNldAltaXBzMAkJCQkJXG4iKQotCi0jZWxzZQotCi0vKgotICogT3ZlcmtpbGwgd2FybmluZyAuLi4KLSAqLwotI2RlZmluZSBtdGMwX3RsYndfaGF6YXJkKCkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCQkJCQkJXAotCSIJLnNldAlub3Jlb3JkZXIJCQkJXG4iCVwKLQkiCW5vcAkJCQkJCVxuIglcCi0JIglub3AJCQkJCQlcbiIJXAotCSIJbm9wCQkJCQkJXG4iCVwKLQkiCW5vcAkJCQkJCVxuIglcCi0JIglub3AJCQkJCQlcbiIJXAotCSIJbm9wCQkJCQkJXG4iCVwKLQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iKQotCi0jZGVmaW5lIHRsYndfdXNlX2hhemFyZCgpCQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQkJCVwKLQkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIglcCi0JIglub3AJCQkJCQlcbiIJXAotCSIJbm9wCQkJCQkJXG4iCVwKLQkiCW5vcAkJCQkJCVxuIglcCi0JIglub3AJCQkJCQlcbiIJXAotCSIJbm9wCQkJCQkJXG4iCVwKLQkiCW5vcAkJCQkJCVxuIglcCi0JIgkuc2V0CXJlb3JkZXIJCQkJCVxuIikKLQotI2VuZGlmCi0KLS8qCi0gKiBJbnRlcnJ1cHQgZW5hYmxlL2Rpc2FibGUgaGF6YXJkcwotICogU29tZSBwcm9jZXNzb3JzIGhhdmUgaGF6YXJkcyB3aGVuIG1vZGlmeWluZwotICogdGhlIHN0YXR1cyByZWdpc3RlciB0byBjaGFuZ2UgdGhlIGludGVycnVwdCBzdGF0ZQotICovCi0KLSNpZmRlZiBDT05GSUdfQ1BVX01JUFNSMgotCi1fX2FzbV9fKCIJLm1hY3JvCWlycV9lbmFibGVfaGF6YXJkCQkJXG4iCi0JIglfZWhiCQkJCQkJXG4iCi0JIgkuZW5kbQkJCQkJCVxuIgotCSIJCQkJCQkJXG4iCi0JIgkubWFjcm8JaXJxX2Rpc2FibGVfaGF6YXJkCQkJXG4iCi0JIglfZWhiCQkJCQkJXG4iCi0JIgkuZW5kbQkJCQkJCVxuIik7Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCi0KLS8qCi0gKiBSMTAwMDAgcm9ja3MgLSBhbGwgaGF6YXJkcyBoYW5kbGVkIGluIGhhcmR3YXJlLCBzbyB0aGlzIGJlY29tZXMgYSBub2JyYWluZXIuCi0gKi8KLQotX19hc21fXygKLQkiCS5tYWNybwlpcnFfZW5hYmxlX2hhemFyZAkJCVxuIgotCSIJLmVuZG0JCQkJCQlcbiIKLQkiCQkJCQkJCVxuIgotCSIJLm1hY3JvCWlycV9kaXNhYmxlX2hhemFyZAkJCVxuIgotCSIJLmVuZG0JCQkJCQlcbiIpOwotCi0jZWxzZQotCi0vKgotICogRGVmYXVsdCBmb3IgY2xhc3NpYyBNSVBTIHByb2Nlc3NvcnMuICBBc3N1bWUgd29yc3QgY2FzZSBoYXphcmRzIGJ1dCBkb24ndAotICogY2FyZSBhYm91dCB0aGUgaXJxX2VuYWJsZV9oYXphcmQgLSBzb29uZXIgb3IgbGF0ZXIgdGhlIGhhcmR3YXJlIHdpbGwKLSAqIGVuYWJsZSBpdCBhbmQgd2UgZG9uJ3QgY2FyZSB3aGVuIGV4YWN0bHkuCi0gKi8KLQotX19hc21fXygKLQkiCSMJCQkJCQlcbiIKLQkiCSMgVGhlcmUgaXMgYSBoYXphcmQgYnV0IHdlIGRvIG5vdCBjYXJlCQlcbiIKLQkiCSMJCQkJCQlcbiIKLQkiCS5tYWNyb1x0aXJxX2VuYWJsZV9oYXphcmQJCQlcbiIKLQkiCS5lbmRtCQkJCQkJXG4iCi0JIgkJCQkJCQlcbiIKLQkiCS5tYWNyb1x0aXJxX2Rpc2FibGVfaGF6YXJkCQkJXG4iCi0JIglfc3Nub3AJCQkJCQlcbiIKLQkiCV9zc25vcAkJCQkJCVxuIgotCSIJX3Nzbm9wCQkJCQkJXG4iCi0JIgkuZW5kbQkJCQkJCVxuIik7Ci0KLSNlbmRpZgotCi0jZGVmaW5lIGlycV9lbmFibGVfaGF6YXJkKCkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImlycV9lbmFibGVfaGF6YXJkIikKLSNkZWZpbmUgaXJxX2Rpc2FibGVfaGF6YXJkKCkJCQkJCQlcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oImlycV9kaXNhYmxlX2hhemFyZCIpCi0KLQotLyoKLSAqIEJhY2stdG8tYmFjayBoYXphcmRzIC0KLSAqCi0gKiBXaGF0IGlzIG5lZWRlZCB0byBzZXBhcmF0ZSBhIG1vdmUgdG8gY3AwIGZyb20gYSBzdWJzZXF1ZW50IHJlYWQgZnJvbSB0aGUKLSAqIHNhbWUgY3AwIHJlZ2lzdGVyPwotICovCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKLQotX19hc21fXygiCS5tYWNybwliYWNrX3RvX2JhY2tfYzBfaGF6YXJkCQkJXG4iCi0JIglfZWhiCQkJCQkJXG4iCi0JIgkuZW5kbQkJCQkJCVxuIik7Ci0KLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9SMTAwMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TQjEpCi0KLV9fYXNtX18oIgkubWFjcm8JYmFja190b19iYWNrX2MwX2hhemFyZAkJCVxuIgotCSIJLmVuZG0JCQkJCQlcbiIpOwotCi0jZWxzZQotCi1fX2FzbV9fKCIJLm1hY3JvCWJhY2tfdG9fYmFja19jMF9oYXphcmQJCQlcbiIKLQkiCS5zZXQJbm9yZW9yZGVyCQkJCVxuIgotCSIJX3Nzbm9wCQkJCQkJXG4iCi0JIglfc3Nub3AJCQkJCQlcbiIKLQkiCV9zc25vcAkJCQkJCVxuIgotCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKLQkiCS5lbmRtIik7Ci0KLSNlbmRpZgotCi0jZGVmaW5lIGJhY2tfdG9fYmFja19jMF9oYXphcmQoKQkJCQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCJiYWNrX3RvX2JhY2tfYzBfaGF6YXJkIikKLQotCi0vKgotICogSW5zdHJ1Y3Rpb24gZXhlY3V0aW9uIGhhemFyZAotICovCi0jaWZkZWYgQ09ORklHX0NQVV9NSVBTUjIKKwkpCitBU01NQUNSTyhiYWNrX3RvX2JhY2tfYzBfaGF6YXJkLAorCSBfZWhiCisJKQogLyoKICAqIGdjYyBoYXMgYSB0cmFkaXRpb24gb2YgbWlzc2NvbXBpbGluZyB0aGUgcHJldmlvdXMgY29uc3RydWN0IHVzaW5nIHRoZQogICogYWRkcmVzcyBvZiBhIGxhYmVsIGFzIGFyZ3VtZW50IHRvIGlubGluZSBhc3NlbWJsZXIuICBHYXMgb3RvaCBoYXMgdGhlCkBAIC0yNzksMTIgKzgwLDEwMSBAQAogCTogIj1yIiAodG1wKSk7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNlbHNlCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfUjEwMDAwKQorCisvKgorICogUjEwMDAwIHJvY2tzIC0gYWxsIGhhemFyZHMgaGFuZGxlZCBpbiBoYXJkd2FyZSwgc28gdGhpcyBiZWNvbWVzIGEgbm9icmFpbmVyLgorICovCisKK0FTTU1BQ1JPKG10YzBfdGxid19oYXphcmQsCisJKQorQVNNTUFDUk8odGxid191c2VfaGF6YXJkLAorCSkKK0FTTU1BQ1JPKHRsYl9wcm9iZV9oYXphcmQsCisJKQorQVNNTUFDUk8oaXJxX2VuYWJsZV9oYXphcmQsCisJKQorQVNNTUFDUk8oaXJxX2Rpc2FibGVfaGF6YXJkLAorCSkKK0FTTU1BQ1JPKGJhY2tfdG9fYmFja19jMF9oYXphcmQsCisJKQogI2RlZmluZSBpbnN0cnVjdGlvbl9oYXphcmQoKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9STTkwMDApCisKKy8qCisgKiBSTTkwMDAgaGF6YXJkcy4gIFdoZW4gdGhlIEpUTEIgaXMgdXBkYXRlZCBieSB0bGJ3aSBvciB0bGJ3ciwgYSBzdWJzZXF1ZW50CisgKiB1c2Ugb2YgdGhlIEpUTEIgZm9yIGluc3RydWN0aW9ucyBzaG91bGQgbm90IG9jY3VyIGZvciA0IGNwdSBjeWNsZXMgYW5kIHVzZQorICogZm9yIGRhdGEgdHJhbnNsYXRpb25zIHNob3VsZCBub3Qgb2NjdXIgZm9yIDMgY3B1IGN5Y2xlcy4KKyAqLworCitBU01NQUNSTyhtdGMwX3RsYndfaGF6YXJkLAorCSBfc3Nub3A7IF9zc25vcDsgX3Nzbm9wOyBfc3Nub3AKKwkpCitBU01NQUNSTyh0bGJ3X3VzZV9oYXphcmQsCisJIF9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAorCSkKK0FTTU1BQ1JPKHRsYl9wcm9iZV9oYXphcmQsCisJIF9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7IF9zc25vcAorCSkKK0FTTU1BQ1JPKGlycV9lbmFibGVfaGF6YXJkLAorCSkKK0FTTU1BQ1JPKGlycV9kaXNhYmxlX2hhemFyZCwKKwkpCitBU01NQUNSTyhiYWNrX3RvX2JhY2tfYzBfaGF6YXJkLAorCSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25faGF6YXJkKCkgZG8geyB9IHdoaWxlICgwKQorCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0IxKQorCisvKgorICogTW9zdGx5IGxpa2UgUjQwMDAgZm9yIGhpc3RvcmljIHJlYXNvbnMKKyAqLworQVNNTUFDUk8obXRjMF90bGJ3X2hhemFyZCwKKwkpCitBU01NQUNSTyh0bGJ3X3VzZV9oYXphcmQsCisJKQorQVNNTUFDUk8odGxiX3Byb2JlX2hhemFyZCwKKwkpCitBU01NQUNSTyhpcnFfZW5hYmxlX2hhemFyZCwKKwkpCitBU01NQUNSTyhpcnFfZGlzYWJsZV9oYXphcmQsCisJIF9zc25vcDsgX3Nzbm9wOyBfc3Nub3AKKwkpCitBU01NQUNSTyhiYWNrX3RvX2JhY2tfYzBfaGF6YXJkLAorCSkKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25faGF6YXJkKCkgZG8geyB9IHdoaWxlICgwKQorCisjZWxzZQorCisvKgorICogRmluYWxseSB0aGUgY2F0Y2hhbGwgY2FzZSBmb3IgYWxsIG90aGVyIHByb2Nlc3NvcnMgaW5jbHVkaW5nIFI0MDAwLCBSNDQwMCwKKyAqIFI0NjAwLCBSNDcwMCwgUjUwMDAsIFJNNzAwMCwgTkVDIFZSNDF4eCBldGMuCisgKgorICogVGhlIHRha2VuIGJyYW5jaCB3aWxsIHJlc3VsdCBpbiBhIHR3byBjeWNsZSBwZW5hbHR5IGZvciB0aGUgdHdvIGtpbGxlZAorICogaW5zdHJ1Y3Rpb25zIG9uIFI0MDAwIC8gUjQ0MDAuICBPdGhlciBwcm9jZXNzb3JzIG9ubHkgaGF2ZSBhIHNpbmdsZSBjeWNsZQorICogaGF6YXJkIHNvIHRoaXMgaXMgbmljZSB0cmljayB0byBoYXZlIGFuIG9wdGltYWwgY29kZSBmb3IgYSByYW5nZSBvZgorICogcHJvY2Vzc29ycy4KKyAqLworQVNNTUFDUk8obXRjMF90bGJ3X2hhemFyZCwKKwlub3AKKwkpCitBU01NQUNSTyh0bGJ3X3VzZV9oYXphcmQsCisJbm9wOyBub3A7IG5vcAorCSkKK0FTTU1BQ1JPKHRsYl9wcm9iZV9oYXphcmQsCisJIG5vcDsgbm9wOyBub3AKKwkpCitBU01NQUNSTyhpcnFfZW5hYmxlX2hhemFyZCwKKwkpCitBU01NQUNSTyhpcnFfZGlzYWJsZV9oYXphcmQsCisJbm9wOyBub3A7IG5vcAorCSkKK0FTTU1BQ1JPKGJhY2tfdG9fYmFja19jMF9oYXphcmQsCisJIF9zc25vcDsgX3Nzbm9wOyBfc3Nub3A7CisJKQorI2RlZmluZSBpbnN0cnVjdGlvbl9oYXphcmQoKSBkbyB7IH0gd2hpbGUgKDApCisKICNlbmRpZgogCi1leHRlcm4gdm9pZCBtaXBzX2loYih2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCiAjZW5kaWYgLyogX0FTTV9IQVpBUkRTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmggYi9pbmNsdWRlL2FzbS1taXBzL2lycS5oCmluZGV4IDg5NjU1MGIuLmQzNWM2MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9pcnEuaApAQCAtNzYsOCArNzYsNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGh3bWFzayk7CiAjZW5kaWYgLyogQ09ORklHX01JUFNfTVRfU01UQyAqLwogCi0jaWZkZWYgQ09ORklHX1NNUAotI2RlZmluZSBBUkNIX0hBU19JUlFfUEVSX0NQVQotI2VuZGlmCi0KICNlbmRpZiAvKiBfQVNNX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtYXRsYXMvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdGxhcy9tYzE0NjgxOHJ0Yy5oCmluZGV4IDM5NzUyMmUuLmE3M2E1NjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdGxhcy9tYzE0NjgxOHJ0Yy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1hdGxhcy9tYzE0NjgxOHJ0Yy5oCkBAIC0yOCwxMCArMjgsMTIgQEAKICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvYXRsYXMuaD4KICNpbmNsdWRlIDxhc20vbWlwcy1ib2FyZHMvYXRsYXNpbnQuaD4KIAorI2RlZmluZSBBUkNIX1JUQ19MT0NBVElPTgorCiAjZGVmaW5lIFJUQ19QT1JUKHgpCShBVExBU19SVENfQURSX1JFRyArICh4KSAqIDgpCiAjZGVmaW5lIFJUQ19JT19FWFRFTlQJMHgxMDAKICNkZWZpbmUgUlRDX0lPTUFQUEVECTAKLSNkZWZpbmUgUlRDX0lSUQkJQVRMQVNJTlRfUlRDCisjZGVmaW5lIFJUQ19JUlEJCUFUTEFTX0lOVF9SVEMKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyIENNT1NfUkVBRCh1bnNpZ25lZCBsb25nIGFkZHIpCiB7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXY5NjEwMC9tYWNoLWd0NjQxMjAuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ldjk2MTAwL21hY2gtZ3Q2NDEyMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZWYxZTZjLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1ldjk2MTAwL21hY2gtZ3Q2NDEyMC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDYgKzAsMCBAQAotLyoKLSAqICBUaGlzIGlzIGEgZGlyZWN0IGNvcHkgb2YgdGhlIGV2OTYxMDAuaCBmaWxlLCB3aXRoIGEgZ2xvYmFsCi0gKiBzZWFyY2ggYW5kIHJlcGxhY2UuICBUaGUgbnVtYmVycyBhcmUgdGhlIHNhbWUuCi0gKgotICogIFRoZSByZWFzb24gSSdtIGR1cGxpY2F0aW5nIHRoaXMgaXMgc28gdGhhdCB0aGUgNjQxMjAvOTYxMDAKLSAqIGRlZmluZXMgd29uJ3QgYmUgY29uZnVzaW5nIGluIHRoZSBzb3VyY2UgY29kZS4KLSAqLwotI2lmbmRlZiBfQVNNX0dUNjQxMjBfRVY5NjEwMF9HVDY0MTIwX0RFUF9ICi0jZGVmaW5lIF9BU01fR1Q2NDEyMF9FVjk2MTAwX0dUNjQxMjBfREVQX0gKLQotLyoKLSAqICAgR1Q5NjEwMCBjb25maWcgc3BhY2UgYmFzZSBhZGRyZXNzCi0gKi8KLSNkZWZpbmUgR1Q2NDEyMF9CQVNFCShLU0VHMUFERFIoMHgxNDAwMDAwMCkpCi0KLS8qCi0gKiAgIFBDSSBCdXMgYWxsb2NhdGlvbgotICoKLSAqICAgKEd1ZXNzaW5nIC4uLikKLSAqLwotI2RlZmluZSBHVF9QQ0lfTUVNX0JBU0UJMHgxMjAwMDAwMFVMCi0jZGVmaW5lIEdUX1BDSV9NRU1fU0laRQkweDAyMDAwMDAwVUwKLSNkZWZpbmUgR1RfUENJX0lPX0JBU0UJMHgxMDAwMDAwMFVMCi0jZGVmaW5lIEdUX1BDSV9JT19TSVpFCTB4MDIwMDAwMDBVTAotI2RlZmluZSBHVF9JU0FfSU9fQkFTRQlQQ0lfSU9fQkFTRQotCi0vKgotICogICBEdWFydCBJL08gcG9ydHMuCi0gKi8KLSNkZWZpbmUgRVY5NjEwMF9DT00xX0JBU0VfQUREUgkoMHhCRDAwMDAwMCArIDB4MjApCi0jZGVmaW5lIEVWOTYxMDBfQ09NMl9CQVNFX0FERFIJKDB4QkQwMDAwMDAgKyAweDAwKQotCi0KLS8qCi0gKiAgIEVWOTYxMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4KLSAqLwotI2RlZmluZSBFVjk2MTAwX0lDVFJMX1JFR1NfQkFTRQkoS1NFRzFBRERSKDB4MWYwMDAwMDApKQotCi0vKgotICogICBFVjk2MTAwIFVBUlQgcmVnaXN0ZXIgYmFzZS4KLSAqLwotI2RlZmluZSBFVjk2MTAwX1VBUlQwX1JFR1NfQkFTRQlFVjk2MTAwX0NPTTFfQkFTRV9BRERSCi0jZGVmaW5lIEVWOTYxMDBfVUFSVDFfUkVHU19CQVNFCUVWOTYxMDBfQ09NMl9CQVNFX0FERFIKLSNkZWZpbmUgRVY5NjEwMF9CQVNFX0JBVUQJKCAzNjg2NDAwIC8gMTYgKQotCi0jZW5kaWYgLyogX0FTTV9HVDY0MTIwX0VWOTYxMDBfR1Q2NDEyMF9ERVBfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGUuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvZXhjaXRlLmgKaW5kZXggMTMwYmQ0Yi4uNGMyOWJhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGUuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21hY2gtZXhjaXRlL2V4Y2l0ZS5oCkBAIC03LDcgKzcsNyBAQAogCiAjZGVmaW5lIEVYQ0lURV9DUFVfRVhUX0NMT0NLIDEwMDAwMDAwMAogCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMRVJfXykKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiB2b2lkIF9faW5pdCBleGNpdGVfa2dkYl9pbml0KHZvaWQpOwogdm9pZCBleGNpdGVfcHJvY2ZzX2luaXQodm9pZCk7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBtZW1zaXplOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2ZwZ2EuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1leGNpdGUvZXhjaXRlX2ZwZ2EuaApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gYXJjaC9taXBzL2Jhc2xlci9leGNpdGUvZXhjaXRlX2ZwZ2EuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tbWlwcy9tYWNoLWV4Y2l0ZS9leGNpdGVfZnBnYS5oCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL21hY2gtcWVtdS9jcHUtZmVhdHVyZS1vdmVycmlkZXMuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1xZW11L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCmluZGV4IGY0ZTM3MGUuLjUyOTQ0NWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1xZW11L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvbWFjaC1xZW11L2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCkBAIC0yMCw3ICsyMCw3IEBACiAKICNkZWZpbmUgY3B1X2hhc19sbHNjCQkxCiAjZGVmaW5lIGNwdV9oYXNfdnRhZ19pY2FjaGUJMAotI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJKFBBR0VfU0laRSA8IDB4NDAwMCkKKyNkZWZpbmUgY3B1X2hhc19kY19hbGlhc2VzCTAKICNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCTAKIAogI2RlZmluZSBjcHVfaGFzX2RzcAkJMApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oIGIvaW5jbHVkZS9hc20tbWlwcy9taXBzLWJvYXJkcy9hdGxhc2ludC5oCmluZGV4IGZkN2ViYzUuLmIxNWU0ZWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvbWlwcy1ib2FyZHMvYXRsYXNpbnQuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL21pcHMtYm9hcmRzL2F0bGFzaW50LmgKQEAgLTEsNiArMSw3IEBACiAvKgotICogQ2Fyc3RlbiBMYW5nZ2FhcmQsIGNhcnN0ZW5sQG1pcHMuY29tCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTUlQUyBUZWNobm9sb2dpZXMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDYgIE1JUFMgVGVjaG5vbG9naWVzLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoJQXV0aG9yczogQ2Fyc3RlbiBMYW5nZ2FhcmQgPGNhcnN0ZW5sQG1pcHMuY29tPgorICoJCSBNYWNpZWogVy4gUm96eWNraSA8bWFjcm9AbWlwcy5jb20+CiAgKgogICogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAgKgpAQCAtMjUsNDEgKzI2LDg4IEBACiAjaWZuZGVmIF9NSVBTX0FUTEFTSU5UX0gKICNkZWZpbmUgX01JUFNfQVRMQVNJTlRfSAogCi0jZGVmaW5lIEFUTEFTSU5UX0JBU0UJCTEKLSNkZWZpbmUgQVRMQVNJTlRfVUFSVAkJKEFUTEFTSU5UX0JBU0UrMCkKLSNkZWZpbmUgQVRMQVNJTlRfVElNMAkJKEFUTEFTSU5UX0JBU0UrMSkKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMgkJKEFUTEFTSU5UX0JBU0UrMikKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMwkJKEFUTEFTSU5UX0JBU0UrMykKLSNkZWZpbmUgQVRMQVNJTlRfUlRDCQkoQVRMQVNJTlRfQkFTRSs0KQotI2RlZmluZSBBVExBU0lOVF9DT1JFSEkJCShBVExBU0lOVF9CQVNFKzUpCi0jZGVmaW5lIEFUTEFTSU5UX0NPUkVMTwkJKEFUTEFTSU5UX0JBU0UrNikKLSNkZWZpbmUgQVRMQVNJTlRfUkVTNwkJKEFUTEFTSU5UX0JBU0UrNykKLSNkZWZpbmUgQVRMQVNJTlRfUENJQQkJKEFUTEFTSU5UX0JBU0UrOCkKLSNkZWZpbmUgQVRMQVNJTlRfUENJQgkJKEFUTEFTSU5UX0JBU0UrOSkKLSNkZWZpbmUgQVRMQVNJTlRfUENJQwkJKEFUTEFTSU5UX0JBU0UrMTApCi0jZGVmaW5lIEFUTEFTSU5UX1BDSUQJCShBVExBU0lOVF9CQVNFKzExKQotI2RlZmluZSBBVExBU0lOVF9FTlVNCQkoQVRMQVNJTlRfQkFTRSsxMikKLSNkZWZpbmUgQVRMQVNJTlRfREVHCQkoQVRMQVNJTlRfQkFTRSsxMykKLSNkZWZpbmUgQVRMQVNJTlRfQVRYRkFJTAkoQVRMQVNJTlRfQkFTRSsxNCkKLSNkZWZpbmUgQVRMQVNJTlRfSU5UQQkJKEFUTEFTSU5UX0JBU0UrMTUpCi0jZGVmaW5lIEFUTEFTSU5UX0lOVEIJCShBVExBU0lOVF9CQVNFKzE2KQotI2RlZmluZSBBVExBU0lOVF9FVEgJCUFUTEFTSU5UX0lOVEIKLSNkZWZpbmUgQVRMQVNJTlRfSU5UQwkJKEFUTEFTSU5UX0JBU0UrMTcpCi0jZGVmaW5lIEFUTEFTSU5UX1NDU0kJCUFUTEFTSU5UX0lOVEMKLSNkZWZpbmUgQVRMQVNJTlRfSU5URAkJKEFUTEFTSU5UX0JBU0UrMTgpCi0jZGVmaW5lIEFUTEFTSU5UX1NFUlIJCShBVExBU0lOVF9CQVNFKzE5KQotI2RlZmluZSBBVExBU0lOVF9SRVMyMAkJKEFUTEFTSU5UX0JBU0UrMjApCi0jZGVmaW5lIEFUTEFTSU5UX1JFUzIxCQkoQVRMQVNJTlRfQkFTRSsyMSkKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMjIJCShBVExBU0lOVF9CQVNFKzIyKQotI2RlZmluZSBBVExBU0lOVF9SRVMyMwkJKEFUTEFTSU5UX0JBU0UrMjMpCi0jZGVmaW5lIEFUTEFTSU5UX1JFUzI0CQkoQVRMQVNJTlRfQkFTRSsyNCkKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMjUJCShBVExBU0lOVF9CQVNFKzI1KQotI2RlZmluZSBBVExBU0lOVF9SRVMyNgkJKEFUTEFTSU5UX0JBU0UrMjYpCi0jZGVmaW5lIEFUTEFTSU5UX1JFUzI3CQkoQVRMQVNJTlRfQkFTRSsyNykKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMjgJCShBVExBU0lOVF9CQVNFKzI4KQotI2RlZmluZSBBVExBU0lOVF9SRVMyOQkJKEFUTEFTSU5UX0JBU0UrMjkpCi0jZGVmaW5lIEFUTEFTSU5UX1JFUzMwCQkoQVRMQVNJTlRfQkFTRSszMCkKLSNkZWZpbmUgQVRMQVNJTlRfUkVTMzEJCShBVExBU0lOVF9CQVNFKzMxKQotI2RlZmluZSBBVExBU0lOVF9FTkQJCShBVExBU0lOVF9CQVNFKzMxKQorLyoKKyAqIEludGVycnVwdHMgMC4uNyBhcmUgdXNlZCBmb3IgQXRsYXMgQ1BVIGludGVycnVwdHMgKG5vbkVJQyBtb2RlKQorICovCisjZGVmaW5lIE1JUFNDUFVfSU5UX0JBU0UJMAorCisvKiBDUFUgaW50ZXJydXB0IG9mZnNldHMgKi8KKyNkZWZpbmUgTUlQU0NQVV9JTlRfU1cwCQkwCisjZGVmaW5lIE1JUFNDUFVfSU5UX1NXMQkJMQorI2RlZmluZSBNSVBTQ1BVX0lOVF9NQjAJCTIKKyNkZWZpbmUgTUlQU0NQVV9JTlRfQVRMQVMJTUlQU0NQVV9JTlRfTUIwCisjZGVmaW5lIE1JUFNDUFVfSU5UX01CMQkJMworI2RlZmluZSBNSVBTQ1BVX0lOVF9NQjIJCTQKKyNkZWZpbmUgTUlQU0NQVV9JTlRfTUIzCQk1CisjZGVmaW5lIE1JUFNDUFVfSU5UX01CNAkJNgorI2RlZmluZSBNSVBTQ1BVX0lOVF9DUFVDVFIJNworCisvKgorICogSW50ZXJydXB0cyA4Li4zOSBhcmUgdXNlZCBmb3IgQXRsYXMgaW50ZXJydXB0IGNvbnRyb2xsZXIgaW50ZXJydXB0cworICovCisjZGVmaW5lIEFUTEFTX0lOVF9CQVNFCQk4CisjZGVmaW5lIEFUTEFTX0lOVF9VQVJUCQkoQVRMQVNfSU5UX0JBU0UgKyAwKQorI2RlZmluZSBBVExBU19JTlRfVElNMAkJKEFUTEFTX0lOVF9CQVNFICsgMSkKKyNkZWZpbmUgQVRMQVNfSU5UX1JFUzIJCShBVExBU19JTlRfQkFTRSArIDIpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMzCQkoQVRMQVNfSU5UX0JBU0UgKyAzKQorI2RlZmluZSBBVExBU19JTlRfUlRDCQkoQVRMQVNfSU5UX0JBU0UgKyA0KQorI2RlZmluZSBBVExBU19JTlRfQ09SRUhJCShBVExBU19JTlRfQkFTRSArIDUpCisjZGVmaW5lIEFUTEFTX0lOVF9DT1JFTE8JKEFUTEFTX0lOVF9CQVNFICsgNikKKyNkZWZpbmUgQVRMQVNfSU5UX1JFUzcJCShBVExBU19JTlRfQkFTRSArIDcpCisjZGVmaW5lIEFUTEFTX0lOVF9QQ0lBCQkoQVRMQVNfSU5UX0JBU0UgKyA4KQorI2RlZmluZSBBVExBU19JTlRfUENJQgkJKEFUTEFTX0lOVF9CQVNFICsgOSkKKyNkZWZpbmUgQVRMQVNfSU5UX1BDSUMJCShBVExBU19JTlRfQkFTRSArIDEwKQorI2RlZmluZSBBVExBU19JTlRfUENJRAkJKEFUTEFTX0lOVF9CQVNFICsgMTEpCisjZGVmaW5lIEFUTEFTX0lOVF9FTlVNCQkoQVRMQVNfSU5UX0JBU0UgKyAxMikKKyNkZWZpbmUgQVRMQVNfSU5UX0RFRwkJKEFUTEFTX0lOVF9CQVNFICsgMTMpCisjZGVmaW5lIEFUTEFTX0lOVF9BVFhGQUlMCShBVExBU19JTlRfQkFTRSArIDE0KQorI2RlZmluZSBBVExBU19JTlRfSU5UQQkJKEFUTEFTX0lOVF9CQVNFICsgMTUpCisjZGVmaW5lIEFUTEFTX0lOVF9JTlRCCQkoQVRMQVNfSU5UX0JBU0UgKyAxNikKKyNkZWZpbmUgQVRMQVNfSU5UX0VUSAkJQVRMQVNfSU5UX0lOVEIKKyNkZWZpbmUgQVRMQVNfSU5UX0lOVEMJCShBVExBU19JTlRfQkFTRSArIDE3KQorI2RlZmluZSBBVExBU19JTlRfU0NTSQkJQVRMQVNfSU5UX0lOVEMKKyNkZWZpbmUgQVRMQVNfSU5UX0lOVEQJCShBVExBU19JTlRfQkFTRSArIDE4KQorI2RlZmluZSBBVExBU19JTlRfU0VSUgkJKEFUTEFTX0lOVF9CQVNFICsgMTkpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyMAkJKEFUTEFTX0lOVF9CQVNFICsgMjApCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyMQkJKEFUTEFTX0lOVF9CQVNFICsgMjEpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyMgkJKEFUTEFTX0lOVF9CQVNFICsgMjIpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyMwkJKEFUTEFTX0lOVF9CQVNFICsgMjMpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyNAkJKEFUTEFTX0lOVF9CQVNFICsgMjQpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyNQkJKEFUTEFTX0lOVF9CQVNFICsgMjUpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyNgkJKEFUTEFTX0lOVF9CQVNFICsgMjYpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyNwkJKEFUTEFTX0lOVF9CQVNFICsgMjcpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyOAkJKEFUTEFTX0lOVF9CQVNFICsgMjgpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMyOQkJKEFUTEFTX0lOVF9CQVNFICsgMjkpCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMzMAkJKEFUTEFTX0lOVF9CQVNFICsgMzApCisjZGVmaW5lIEFUTEFTX0lOVF9SRVMzMQkJKEFUTEFTX0lOVF9CQVNFICsgMzEpCisjZGVmaW5lIEFUTEFTX0lOVF9FTkQJCShBVExBU19JTlRfQkFTRSArIDMxKQorCisvKgorICogSW50ZXJydXB0cyA2NC4uMTI3IGFyZSB1c2VkIGZvciBTb2MtaXQgQ2xhc3NpYyBpbnRlcnJ1cHRzCisgKi8KKyNkZWZpbmUgTVNDMDFDX0lOVF9CQVNFCQk2NAorCisvKiBTT0MtaXQgQ2xhc3NpYyBpbnRlcnJ1cHQgb2Zmc2V0cyAqLworI2RlZmluZSBNU0MwMUNfSU5UX1RNUgkJMAorI2RlZmluZSBNU0MwMUNfSU5UX1BDSQkJMQorCisvKgorICogSW50ZXJydXB0cyA2NC4uMTI3IGFyZSB1c2VkIGZvciBTb2MtaXQgRUlDIGludGVycnVwdHMKKyAqLworI2RlZmluZSBNU0MwMUVfSU5UX0JBU0UJCTY0CisKKy8qIFNPQy1pdCBFSUMgaW50ZXJydXB0IG9mZnNldHMgKi8KKyNkZWZpbmUJTVNDMDFFX0lOVF9TVzAJCTEKKyNkZWZpbmUJTVNDMDFFX0lOVF9TVzEJCTIKKyNkZWZpbmUJTVNDMDFFX0lOVF9NQjAJCTMKKyNkZWZpbmUJTVNDMDFFX0lOVF9BVExBUwlNU0MwMUVfSU5UX01CMAorI2RlZmluZQlNU0MwMUVfSU5UX01CMQkJNAorI2RlZmluZQlNU0MwMUVfSU5UX01CMgkJNQorI2RlZmluZQlNU0MwMUVfSU5UX01CMwkJNgorI2RlZmluZQlNU0MwMUVfSU5UX01CNAkJNworI2RlZmluZQlNU0MwMUVfSU5UX1RNUgkJOAorI2RlZmluZQlNU0MwMUVfSU5UX1BDSQkJOQorI2RlZmluZQlNU0MwMUVfSU5UX1BFUkZDVFIJMTAKKyNkZWZpbmUJTVNDMDFFX0lOVF9DUFVDVFIJMTEKIAogI2VuZGlmIC8qICEoX01JUFNfQVRMQVNJTlRfSCkgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLW1pcHMvbW11X2NvbnRleHQuaAppbmRleCAxOGI2OWRlLi5mZTA2NWQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9tbXVfY29udGV4dC5oCkBAIC0yNjIsMTAgKzI2MiwxMCBAQAogCQkvKiBTZWUgY29tbWVudHMgZm9yIHNpbWlsYXIgY29kZSBhYm92ZSAqLwogCQlwcmV2dnBlID0gZHZwZSgpOwogCQlvbGRhc2lkID0gKHJlYWRfYzBfZW50cnloaSgpICYgQVNJRF9NQVNLKTsKLQkJaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdKSB7Ci0JCSAgc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdICY9IH4oMHgxIDw8IGNwdSk7Ci0JCSAgaWYoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdID09IDApCi0JCQlzbXRjX2ZsdXNoX3RsYl9hc2lkKG9sZGFzaWQpOworCQlpZiAoc210Y19saXZlX2FzaWRbbXl0bGJdW29sZGFzaWRdKSB7CisJCQlzbXRjX2xpdmVfYXNpZFtteXRsYl1bb2xkYXNpZF0gJj0gfigweDEgPDwgY3B1KTsKKwkJCWlmKHNtdGNfbGl2ZV9hc2lkW215dGxiXVtvbGRhc2lkXSA9PSAwKQorCQkJCXNtdGNfZmx1c2hfdGxiX2FzaWQob2xkYXNpZCk7CiAJCX0KIAkJLyogU2VlIGNvbW1lbnRzIGZvciBzaW1pbGFyIGNvZGUgYWJvdmUgKi8KIAkJd3JpdGVfYzBfZW50cnloaSgocmVhZF9jMF9lbnRyeWhpKCkgJiB+SFdfQVNJRF9NQVNLKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wYWdlLmggYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAppbmRleCAyMTlkMzU5Li44NWIyNThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3BhZ2UuaApAQCAtMzQsNiArMzQsOCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisjaW5jbHVkZSA8YXNtL2NwdS1mZWF0dXJlcy5oPgorCiBleHRlcm4gdm9pZCBjbGVhcl9wYWdlKHZvaWQgKiBwYWdlKTsKIGV4dGVybiB2b2lkIGNvcHlfcGFnZSh2b2lkICogdG8sIHZvaWQgKiBmcm9tKTsKIApAQCAtNTMsNyArNTUsNyBAQAogCWV4dGVybiB2b2lkICgqZmx1c2hfZGF0YV9jYWNoZV9wYWdlKSh1bnNpZ25lZCBsb25nIGFkZHIpOwogCiAJY2xlYXJfcGFnZShhZGRyKTsKLQlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpIGFkZHIsIHZhZGRyKSkKKwlpZiAocGFnZXNfZG9fYWxpYXMoKHVuc2lnbmVkIGxvbmcpIGFkZHIsIHZhZGRyICYgUEFHRV9NQVNLKSkKIAkJZmx1c2hfZGF0YV9jYWNoZV9wYWdlKCh1bnNpZ25lZCBsb25nKWFkZHIpOwogfQogCkBAIC02Myw3ICs2NSw4IEBACiAJZXh0ZXJuIHZvaWQgKCpmbHVzaF9kYXRhX2NhY2hlX3BhZ2UpKHVuc2lnbmVkIGxvbmcgYWRkcik7CiAKIAljb3B5X3BhZ2UodnRvLCB2ZnJvbSk7Ci0JaWYgKHBhZ2VzX2RvX2FsaWFzKCh1bnNpZ25lZCBsb25nKXZ0bywgdmFkZHIpKQorCWlmICghY3B1X2hhc19pY19maWxsc19mX2RjIHx8CisJICAgIHBhZ2VzX2RvX2FsaWFzKCh1bnNpZ25lZCBsb25nKXZ0bywgdmFkZHIgJiBQQUdFX01BU0spKQogCQlmbHVzaF9kYXRhX2NhY2hlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpdnRvKTsKIH0KIApAQCAtNzQsMTUgKzc3LDE3IEBACiAgICNpZmRlZiBDT05GSUdfQ1BVX01JUFMzMgogICAgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwdGVfbG93LCBwdGVfaGlnaDsgfSBwdGVfdDsKICAgICAjZGVmaW5lIHB0ZV92YWwoeCkgICAgKCh4KS5wdGVfbG93IHwgKCh1bnNpZ25lZCBsb25nIGxvbmcpKHgpLnB0ZV9oaWdoIDw8IDMyKSkKKyAgICAjZGVmaW5lIF9fcHRlKHgpICAgICAgKHsgcHRlX3QgX19wdGUgPSB7KHgpLCAoKHVuc2lnbmVkIGxvbmcgbG9uZykoeCkpID4+IDMyfTsgX19wdGU7IH0pCiAgICNlbHNlCiAgICAgIHR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBsb25nIHB0ZTsgfSBwdGVfdDsKICAgICAgI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQorICAgICAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQogICAjZW5kaWYKICNlbHNlCiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcHRlOyB9IHB0ZV90OwogI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQotI2VuZGlmCiAjZGVmaW5lIF9fcHRlKHgpCSgocHRlX3QpIHsgKHgpIH0gKQorI2VuZGlmCiAKIC8qCiAgKiBGb3IgMy1sZXZlbCBwYWdldGFibGVzIHdlIGRlZmluZXMgdGhlc2Ugb3Vyc2VsdmVzLCBmb3IgMi1sZXZlbCB0aGUKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvcGd0YWJsZS02NC5oIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKaW5kZXggYzU5YTFlMi4uZDA1ZmI2ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9wZ3RhYmxlLTY0LmgKQEAgLTkzLDggKzkzLDEyIEBACiAjZGVmaW5lIFBUUlNfUEVSX1BNRAkoKFBBR0VfU0laRSA8PCBQTURfT1JERVIpIC8gc2l6ZW9mKHBtZF90KSkKICNkZWZpbmUgUFRSU19QRVJfUFRFCSgoUEFHRV9TSVpFIDw8IFBURV9PUkRFUikgLyBzaXplb2YocHRlX3QpKQogCisjaWYgUEdESVJfU0laRSA+PSBUQVNLX1NJWkUKKyNkZWZpbmUgVVNFUl9QVFJTX1BFUl9QR0QgICAgICAgKDEpCisjZWxzZQogI2RlZmluZSBVU0VSX1BUUlNfUEVSX1BHRAkoVEFTS19TSVpFIC8gUEdESVJfU0laRSkKLSNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKKyNlbmRpZgorI2RlZmluZSBGSVJTVF9VU0VSX0FERFJFU1MJMFVMCiAKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkJTUFQX0JBU0UKICNkZWZpbmUgVk1BTExPQ19FTkQJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaCBiL2luY2x1ZGUvYXNtLW1pcHMvcHRyYWNlLmgKaW5kZXggNDExMzMxNi4uNGZiMGZjNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9wdHJhY2UuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3B0cmFjZS5oCkBAIC0xMCw4ICsxMCw2IEBACiAjZGVmaW5lIF9BU01fUFRSQUNFX0gKIAogCi0jaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgotCiAvKiAwIC0gMzEgYXJlIGludGVnZXIgcmVnaXN0ZXJzLCAzMiAtIDYzIGFyZSBmcCByZWdpc3RlcnMuICAqLwogI2RlZmluZSBGUFJfQkFTRQkzMgogI2RlZmluZSBQQwkJNjQKQEAgLTczLDYgKzcxLDcgQEAKICNpZmRlZiBfX0tFUk5FTF9fCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8YXNtL2lzYWRlcC5oPgogCiAvKgogICogRG9lcyB0aGUgcHJvY2VzcyBhY2NvdW50IGZvciB1c2VyIG9yIGZvciBzeXN0ZW0gdGltZT8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmggYi9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCmluZGV4IDU4NGJkOWMwLi4wMzU2MzdjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3NlcmlhbC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2VyaWFsLmgKQEAgLTUyLDkgKzUyLDkgQEAKICNlbmRpZgogCiAvKgotICogQm90aCBHYWxpbGVvIGJvYXJkcyBoYXZlIHRoZSBzYW1lIFVBUlQgbWFwcGluZ3MuCisgKiBHYWxpbGVvIEVWNjQxMjAgZXZhbHVhdGlvbiBib2FyZAogICovCi0jaWYgZGVmaW5lZCAoQ09ORklHX01JUFNfRVY5NjEwMCkgfHwgZGVmaW5lZCAoQ09ORklHX01JUFNfRVY2NDEyMCkKKyNpZmRlZiBDT05GSUdfTUlQU19FVjY0MTIwCiAjaW5jbHVkZSA8YXNtL2dhbGlsZW8tYm9hcmRzL2V2OTYxMDAuaD4KICNpbmNsdWRlIDxhc20vZ2FsaWxlby1ib2FyZHMvZXY5NjEwMGludC5oPgogI2RlZmluZSBFVjk2MTAwX1NFUklBTF9QT1JUX0RFRk5TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9kZWZzLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfZGVmcy5oCmluZGV4IDMzNWRiYWYuLmE4ODU0OTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9kZWZzLmgKKysrIGIvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX2RlZnMuaApAQCAtMjEyLDcgKzIxMiw3IEBACiAgKiBOb3RlOiB5b3UnbGwgbmVlZCB0byBkZWZpbmUgdWludDMyX3QgYW5kIHVpbnQ2NF90IGluIHlvdXIgaGVhZGVycy4KICAqLwogCi0jaWYgIWRlZmluZWQoX19BU1NFTUJMRVJfXykKKyNpZiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAjZGVmaW5lIF9TQl9NQUtFNjQoeCkgKCh1aW50NjRfdCkoeCkpCiAjZGVmaW5lIF9TQl9NQUtFMzIoeCkgKCh1aW50MzJfdCkoeCkpCiAjZWxzZQpAQCAtMjUxLDkgKzI1MSw5IEBACiAgKi8KIAogCi0jaWYgZGVmaW5lZChfX21pcHM2NCkgJiYgIWRlZmluZWQoX19BU1NFTUJMRVJfXykKKyNpZiBkZWZpbmVkKF9fbWlwczY0KSAmJiAhZGVmaW5lZChfX0FTU0VNQkxZX18pCiAjZGVmaW5lIFNCV1JJVEVDU1IoY3NyLHZhbCkgKigodm9sYXRpbGUgdWludDY0X3QgKikgUEhZU19UT19LMShjc3IpKSA9ICh2YWwpCiAjZGVmaW5lIFNCUkVBRENTUihjc3IpICgqKCh2b2xhdGlsZSB1aW50NjRfdCAqKSBQSFlTX1RPX0sxKGNzcikpKQotI2VuZGlmIC8qIF9fQVNTRU1CTEVSX18gKi8KKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmggYi9pbmNsdWRlL2FzbS1taXBzL3NpYnl0ZS9zYjEyNTBfc2NkLmgKaW5kZXggZjQxNzhiZC4uN2VkMGJiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWJ5dGUvc2IxMjUwX3NjZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc2lieXRlL3NiMTI1MF9zY2QuaApAQCAtMTQ5LDcgKzE0OSw3IEBACiAgKiAoRm9yIHRoZSBhc3NlbWJsZXIgdmVyc2lvbiwgc3lzcmV2IGFuZCBkZXN0IG1heSBiZSB0aGUgc2FtZSByZWdpc3Rlci4KICAqIEFsc28sIGl0IGNsb2JiZXJzIEFULikKICAqLwotI2lmZGVmIF9fQVNTRU1CTEVSX18KKyNpZmRlZiBfX0FTU0VNQkxZX18KICNkZWZpbmUgU1lTX1NPQ19UWVBFKGRlc3QsIHN5c3JldikJCQkJCVwKIAkuc2V0IHB1c2ggOwkJCQkJCQlcCiAJLnNldCByZW9yZGVyIDsJCQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaCBiL2luY2x1ZGUvYXNtLW1pcHMvc2lnbmFsLmgKaW5kZXggODdhMWRmZi4uOGIzOTFhMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zaWduYWwuaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3NpZ25hbC5oCkBAIC0xMDgsMTcgKzEwOCw4IEBACiAjZGVmaW5lIFNJR19CTE9DSwkxCS8qIGZvciBibG9ja2luZyBzaWduYWxzICovCiAjZGVmaW5lIFNJR19VTkJMT0NLCTIJLyogZm9yIHVuYmxvY2tpbmcgc2lnbmFscyAqLwogI2RlZmluZSBTSUdfU0VUTUFTSwkzCS8qIGZvciBzZXR0aW5nIHRoZSBzaWduYWwgbWFzayAqLwotI2RlZmluZSBTSUdfU0VUTUFTSzMyCTI1NgkvKiBHb29kaWUgZnJvbSBTR0kgZm9yIEJTRCBjb21wYXRpYmlsaXR5OgotCQkJCSAgIHNldCBvbmx5IHRoZSBsb3cgMzIgYml0IG9mIHRoZSBzaWdzZXQuICAqLwogCi0vKiBUeXBlIG9mIGEgc2lnbmFsIGhhbmRsZXIuICAqLwotdHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwotdHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKLQotLyogRmFrZSBzaWduYWwgZnVuY3Rpb25zICovCi0jZGVmaW5lIFNJR19ERkwJKChfX3NpZ2hhbmRsZXJfdCkwKQkvKiBkZWZhdWx0IHNpZ25hbCBoYW5kbGluZyAqLwotI2RlZmluZSBTSUdfSUdOCSgoX19zaWdoYW5kbGVyX3QpMSkJLyogaWdub3JlIHNpZ25hbCAqLwotI2RlZmluZSBTSUdfRVJSCSgoX19zaWdoYW5kbGVyX3QpLTEpCS8qIGVycm9yIHJldHVybiBmcm9tIHNpZ25hbCAqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3NpZ25hbC5oPgogCiBzdHJ1Y3Qgc2lnYWN0aW9uIHsKIAl1bnNpZ25lZCBpbnQJc2FfZmxhZ3M7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1taXBzL3NwaW5sb2NrLmgKaW5kZXggNjY5YjhlMy4uYzhkNTU4NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tbWlwcy9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvc3BpbmxvY2suaApAQCAtMjM5LDcgKzIzOSw1MSBAQAogCTogIm1lbW9yeSIpOwogfQogCi0jZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSBnZW5lcmljX19yYXdfcmVhZF90cnlsb2NrKGxvY2spCitzdGF0aWMgaW5saW5lIGludCBfX3Jhd19yZWFkX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKK3sKKwl1bnNpZ25lZCBpbnQgdG1wOworCWludCByZXQ7CisKKwlpZiAoUjEwMDAwX0xMU0NfV0FSKSB7CisJCV9fYXNtX18gX192b2xhdGlsZV9fKAorCQkiCS5zZXQJbm9yZW9yZGVyCSMgX19yYXdfcmVhZF90cnlsb2NrCVxuIgorCQkiCWxpCSUyLCAwCQkJCQlcbiIKKwkJIjE6CWxsCSUxLCAlMwkJCQkJXG4iCisJCSIJYm5legklMSwgMmYJCQkJCVxuIgorCQkiCSBhZGR1CSUxLCAxCQkJCQlcbiIKKwkJIglzYwklMSwgJTAJCQkJCVxuIgorCQkiCWJlcXpsCSUxLCAxYgkJCQkJXG4iCisJCSIJLnNldAlyZW9yZGVyCQkJCQlcbiIKKyNpZmRlZiBDT05GSUdfU01QCisJCSIJIHN5bmMJCQkJCQlcbiIKKyNlbmRpZgorCQkiCWxpCSUyLCAxCQkJCQlcbiIKKwkJIjI6CQkJCQkJCVxuIgorCQk6ICI9bSIgKHJ3LT5sb2NrKSwgIj0mciIgKHRtcCksICI9JnIiIChyZXQpCisJCTogIm0iIChydy0+bG9jaykKKwkJOiAibWVtb3J5Iik7CisJfSBlbHNlIHsKKwkJX19hc21fXyBfX3ZvbGF0aWxlX18oCisJCSIJLnNldAlub3Jlb3JkZXIJIyBfX3Jhd19yZWFkX3RyeWxvY2sJXG4iCisJCSIJbGkJJTIsIDAJCQkJCVxuIgorCQkiMToJbGwJJTEsICUzCQkJCQlcbiIKKwkJIglibmV6CSUxLCAyZgkJCQkJXG4iCisJCSIJIGFkZHUJJTEsIDEJCQkJCVxuIgorCQkiCXNjCSUxLCAlMAkJCQkJXG4iCisJCSIJYmVxegklMSwgMWIJCQkJCVxuIgorCQkiCS5zZXQJcmVvcmRlcgkJCQkJXG4iCisjaWZkZWYgQ09ORklHX1NNUAorCQkiCSBzeW5jCQkJCQkJXG4iCisjZW5kaWYKKwkJIglsaQklMiwgMQkJCQkJXG4iCisJCSIyOgkJCQkJCQlcbiIKKwkJOiAiPW0iIChydy0+bG9jayksICI9JnIiICh0bXApLCAiPSZyIiAocmV0KQorCQk6ICJtIiAocnctPmxvY2spCisJCTogIm1lbW9yeSIpOworCX0KKworCXJldHVybiByZXQ7Cit9CiAKIHN0YXRpYyBpbmxpbmUgaW50IF9fcmF3X3dyaXRlX3RyeWxvY2socmF3X3J3bG9ja190ICpydykKIHsKQEAgLTI4Myw0ICszMjcsOSBAQAogCXJldHVybiByZXQ7CiB9CiAKKworI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qIF9BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tbWlwcy90aW1leC5oIGIvaW5jbHVkZS9hc20tbWlwcy90aW1leC5oCmluZGV4IDk4YWE3MzcuLmI4MGRlOGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1taXBzL3RpbWV4LmgKQEAgLTgsNiArOCw4IEBACiAjaWZuZGVmIF9BU01fVElNRVhfSAogI2RlZmluZSBfQVNNX1RJTUVYX0gKIAorI2lmZGVmIF9fS0VSTkVMX18KKwogI2luY2x1ZGUgPGFzbS9taXBzcmVncy5oPgogCiAvKgpAQCAtNTEsNCArNTMsNiBAQAogCXJldHVybiByZWFkX2MwX2NvdW50KCk7CiB9CiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiAgX0FTTV9USU1FWF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tbWlwcy91bmlzdGQuaAppbmRleCA2MTBjY2I4Li5jMzkxNDI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1taXBzL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdW5pc3RkLmgKQEAgLTMxMyw3ICszMTMsNyBAQAogI2RlZmluZSBfX05SX21rbm9kYXQJCQkoX19OUl9MaW51eCArIDI5MCkKICNkZWZpbmUgX19OUl9mY2hvd25hdAkJCShfX05SX0xpbnV4ICsgMjkxKQogI2RlZmluZSBfX05SX2Z1dGltZXNhdAkJCShfX05SX0xpbnV4ICsgMjkyKQotI2RlZmluZSBfX05SX2ZzdGF0YXQJCQkoX19OUl9MaW51eCArIDI5MykKKyNkZWZpbmUgX19OUl9mc3RhdGF0NjQJCQkoX19OUl9MaW51eCArIDI5MykKICNkZWZpbmUgX19OUl91bmxpbmthdAkJCShfX05SX0xpbnV4ICsgMjk0KQogI2RlZmluZSBfX05SX3JlbmFtZWF0CQkJKF9fTlJfTGludXggKyAyOTUpCiAjZGVmaW5lIF9fTlJfbGlua2F0CQkJKF9fTlJfTGludXggKyAyOTYpCkBAIC0zMjksMTYgKzMyOSwxOCBAQAogI2RlZmluZSBfX05SX3RlZQkJCShfX05SX0xpbnV4ICsgMzA2KQogI2RlZmluZSBfX05SX3Ztc3BsaWNlCQkJKF9fTlJfTGludXggKyAzMDcpCiAjZGVmaW5lIF9fTlJfbW92ZV9wYWdlcwkJCShfX05SX0xpbnV4ICsgMzA4KQorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkJKF9fTlJfTGludXggKyAzMDkpCisjZGVmaW5lIF9fTlJfZ2V0X3JvYnVzdF9saXN0CQkoX19OUl9MaW51eCArIDMxMCkKIAogLyoKICAqIE9mZnNldCBvZiB0aGUgbGFzdCBMaW51eCBvMzIgZmxhdm91cmVkIHN5c2NhbGwKICAqLwotI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkzMDgKKyNkZWZpbmUgX19OUl9MaW51eF9zeXNjYWxscwkJMzEwCiAKICNlbmRpZiAvKiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX0FCSTMyICovCiAKICNkZWZpbmUgX19OUl9PMzJfTGludXgJCQk0MDAwCi0jZGVmaW5lIF9fTlJfTzMyX0xpbnV4X3N5c2NhbGxzCQkzMDgKKyNkZWZpbmUgX19OUl9PMzJfTGludXhfc3lzY2FsbHMJCTMxMAogCiAjaWYgX01JUFNfU0lNID09IF9NSVBTX1NJTV9BQkk2NAogCkBAIC01OTgsNyArNjAwLDcgQEAKICNkZWZpbmUgX19OUl9ta25vZGF0CQkJKF9fTlJfTGludXggKyAyNDkpCiAjZGVmaW5lIF9fTlJfZmNob3duYXQJCQkoX19OUl9MaW51eCArIDI1MCkKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCQkoX19OUl9MaW51eCArIDI1MSkKLSNkZWZpbmUgX19OUl9mc3RhdGF0CQkJKF9fTlJfTGludXggKyAyNTIpCisjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdAkJCShfX05SX0xpbnV4ICsgMjUyKQogI2RlZmluZSBfX05SX3VubGlua2F0CQkJKF9fTlJfTGludXggKyAyNTMpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCQkoX19OUl9MaW51eCArIDI1NCkKICNkZWZpbmUgX19OUl9saW5rYXQJCQkoX19OUl9MaW51eCArIDI1NSkKQEAgLTYxNCwxNiArNjE2LDE4IEBACiAjZGVmaW5lIF9fTlJfdGVlCQkJKF9fTlJfTGludXggKyAyNjUpCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkoX19OUl9MaW51eCArIDI2NikKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJKF9fTlJfTGludXggKyAyNjcpCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkoX19OUl9MaW51eCArIDI2OCkKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCShfX05SX0xpbnV4ICsgMjY5KQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IExpbnV4IDY0LWJpdCBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI2NworI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNjkKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fQUJJNjQgKi8KIAogI2RlZmluZSBfX05SXzY0X0xpbnV4CQkJNTAwMAotI2RlZmluZSBfX05SXzY0X0xpbnV4X3N5c2NhbGxzCQkyNjcKKyNkZWZpbmUgX19OUl82NF9MaW51eF9zeXNjYWxscwkJMjY5CiAKICNpZiBfTUlQU19TSU0gPT0gX01JUFNfU0lNX05BQkkzMgogCkBAIC04ODcsNyArODkxLDcgQEAKICNkZWZpbmUgX19OUl9ta25vZGF0CQkJKF9fTlJfTGludXggKyAyNTMpCiAjZGVmaW5lIF9fTlJfZmNob3duYXQJCQkoX19OUl9MaW51eCArIDI1NCkKICNkZWZpbmUgX19OUl9mdXRpbWVzYXQJCQkoX19OUl9MaW51eCArIDI1NSkKLSNkZWZpbmUgX19OUl9mc3RhdGF0CQkJKF9fTlJfTGludXggKyAyNTYpCisjZGVmaW5lIF9fTlJfbmV3ZnN0YXRhdAkJCShfX05SX0xpbnV4ICsgMjU2KQogI2RlZmluZSBfX05SX3VubGlua2F0CQkJKF9fTlJfTGludXggKyAyNTcpCiAjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCQkoX19OUl9MaW51eCArIDI1OCkKICNkZWZpbmUgX19OUl9saW5rYXQJCQkoX19OUl9MaW51eCArIDI1OSkKQEAgLTkwMywxNiArOTA3LDE4IEBACiAjZGVmaW5lIF9fTlJfdGVlCQkJKF9fTlJfTGludXggKyAyNjkpCiAjZGVmaW5lIF9fTlJfdm1zcGxpY2UJCQkoX19OUl9MaW51eCArIDI3MCkKICNkZWZpbmUgX19OUl9tb3ZlX3BhZ2VzCQkJKF9fTlJfTGludXggKyAyNzEpCisjZGVmaW5lIF9fTlJfc2V0X3JvYnVzdF9saXN0CQkoX19OUl9MaW51eCArIDI3MikKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJCShfX05SX0xpbnV4ICsgMjczKQogCiAvKgogICogT2Zmc2V0IG9mIHRoZSBsYXN0IE4zMiBmbGF2b3VyZWQgc3lzY2FsbAogICovCi0jZGVmaW5lIF9fTlJfTGludXhfc3lzY2FsbHMJCTI3MQorI2RlZmluZSBfX05SX0xpbnV4X3N5c2NhbGxzCQkyNzMKIAogI2VuZGlmIC8qIF9NSVBTX1NJTSA9PSBfTUlQU19TSU1fTkFCSTMyICovCiAKICNkZWZpbmUgX19OUl9OMzJfTGludXgJCQk2MDAwCi0jZGVmaW5lIF9fTlJfTjMyX0xpbnV4X3N5c2NhbGxzCQkyNzEKKyNkZWZpbmUgX19OUl9OMzJfTGludXhfc3lzY2FsbHMJCTI3MwogCiAjaWZkZWYgX19LRVJORUxfXwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1taXBzL3VzZXIuaCBiL2luY2x1ZGUvYXNtLW1pcHMvdXNlci5oCmluZGV4IDg5YmY4YjQuLjYxZjJhMDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLW1pcHMvdXNlci5oCisrKyBiL2luY2x1ZGUvYXNtLW1pcHMvdXNlci5oCkBAIC04LDYgKzgsOCBAQAogI2lmbmRlZiBfQVNNX1VTRVJfSAogI2RlZmluZSBfQVNNX1VTRVJfSAogCisjaWZkZWYgX19LRVJORUxfXworCiAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcmVnLmg+CiAKQEAgLTU1LDQgKzU3LDYgQEAKICNkZWZpbmUgSE9TVF9EQVRBX1NUQVJUX0FERFIJKHUuc3RhcnRfZGF0YSkKICNkZWZpbmUgSE9TVF9TVEFDS19FTkRfQUREUgkodS5zdGFydF9zdGFjayArIHUudV9zc2l6ZSAqIE5CUEcpCiAKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisKICNlbmRpZiAvKiBfQVNNX1VTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcGFyaXNjL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2suaAppbmRleCBhOTM5NjBlLi5lMTgyNTUzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1wYXJpc2Mvc3BpbmxvY2suaApAQCAtMTUyLDQgKzE1Miw4IEBACiAJcmV0dXJuICFydy0+Y291bnRlcjsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmggYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2J1Zy5oCmluZGV4IGY0NGI1MjkuLjk3OGIyYzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvYnVnLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9idWcuaApAQCAtNzAsOSArNzAsMTAgQEAKIAkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCiB9IHdoaWxlICgwKQogCi0jZGVmaW5lIFdBUk5fT04oeCkgZG8gewkJCQkJCVwKLQlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoeCkpIHsJCQkJXAotCQlpZiAoeCkJCQkJCQlcCisjZGVmaW5lIFdBUk5fT04oeCkgKHsJCQkJCQlcCisJdHlwZW9mKHgpIF9fcmV0X3dhcm5fb24gPSAoeCk7CQkJCVwKKwlpZiAoX19idWlsdGluX2NvbnN0YW50X3AoX19yZXRfd2Fybl9vbikpIHsJCVwKKwkJaWYgKF9fcmV0X3dhcm5fb24pCQkJCVwKIAkJCV9fV0FSTigpOwkJCQlcCiAJfSBlbHNlIHsJCQkJCQlcCiAJCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCkBAIC04MCwxMSArODEsMTIgQEAKIAkJIi5zZWN0aW9uIF9fYnVnX3RhYmxlLFwiYVwiXG4iCQkJXAogCQkiXHQiUFBDX0xPTkciCTFiLCUxLCUyLCUzXG4iCQkJXAogCQkiLnByZXZpb3VzIgkJCQkJXAotCQk6IDogInIiICgobG9uZykoeCkpLAkJCQlcCisJCTogOiAiciIgKF9fcmV0X3dhcm5fb24pLAkJCVwKIAkJICAgICJpIiAoX19MSU5FX18gKyBCVUdfV0FSTklOR19UUkFQKSwJCVwKIAkJICAgICJpIiAoX19GSUxFX18pLCAiaSIgKF9fRlVOQ1RJT05fXykpOwlcCiAJfQkJCQkJCQlcCi19IHdoaWxlICgwKQorCXVubGlrZWx5KF9fcmV0X3dhcm5fb24pOwkJCQlcCit9KQogCiAjZGVmaW5lIEhBVkVfQVJDSF9CVUcKICNkZWZpbmUgSEFWRV9BUkNIX0JVR19PTgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9pby5oCmluZGV4IDQ2YmFlMWMuLjE5YjJlYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBvd2VycGMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1wb3dlcnBjL2lvLmgKQEAgLTExLDYgKzExLDggQEAKIAogLyogQ2hlY2sgb2YgZXhpc3RlbmNlIG9mIGxlZ2FjeSBkZXZpY2VzICovCiBleHRlcm4gaW50IGNoZWNrX2xlZ2FjeV9pb3BvcnQodW5zaWduZWQgbG9uZyBiYXNlX3BvcnQpOworI2RlZmluZSBQQVJBTExFTF9CQVNFCTB4Mzc4CisjZGVmaW5lIFBOUEJJT1NfQkFTRQkweGYwMDAJLyogb25seSByZWxldmFudCBmb3IgUFJlUCAqLwogCiAjaWZuZGVmIENPTkZJR19QUEM2NAogI2luY2x1ZGUgPGFzbS1wcGMvaW8uaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXBvd2VycGMvc3BpbmxvY2suaAppbmRleCBjMzFlNDM4Li5jYzRjZmNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1wb3dlcnBjL3NwaW5sb2NrLmgKKysrIGIvaW5jbHVkZS9hc20tcG93ZXJwYy9zcGlubG9jay5oCkBAIC0yODUsNSArMjg1LDkgQEAKIAlydy0+bG9jayA9IDA7CiB9CiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCV9fc3Bpbl95aWVsZChsb2NrKQorI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJX19yd195aWVsZChsb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCV9fcndfeWllbGQobG9jaykKKwogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1wcGMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXBwYy9zcGlubG9jay5oCmluZGV4IDVjNjRiNzUuLmZjY2FmNTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXBwYy9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXBwYy9zcGlubG9jay5oCkBAIC0xNjEsNCArMTYxLDggQEAKIAlydy0+bG9jayA9IDA7CiB9CiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKICNlbmRpZiAvKiBfX0FTTV9TUElOTE9DS19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2FwcGxkYXRhLmggYi9pbmNsdWRlL2FzbS1zMzkwL2FwcGxkYXRhLmgKaW5kZXggYjE3NzA3MC4uNzkyODNkYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9hcHBsZGF0YS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYXBwbGRhdGEuaApAQCAtODAsNyArODAsNyBAQAogCXBhcm1fbGlzdC5wcm9kdWN0X2lkX2FkZHIgPSAodW5zaWduZWQgbG9uZykgaWQ7CiAJcGFybV9saXN0LmJ1ZmZlcl9hZGRyID0gdmlydF90b19waHlzKGJ1ZmZlcik7CiAJYXNtIHZvbGF0aWxlKAotCQkiZGlhZyAlMSwlMCwweGRjIgorCQkiCWRpYWcJJTEsJTAsMHhkYyIKIAkJOiAiPWQiIChyeSkKIAkJOiAiZCIgKCZwYXJtX2xpc3QpLCAibSIgKHBhcm1fbGlzdCksICJtIiAoKmlkKQogCQk6ICJjYyIpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvYXRvbWljLmgKaW5kZXggMzk5YmYwMi4uYWYyMGM3NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9hdG9taWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2F0b21pYy5oCkBAIC0zMCwyMCArMzAsNDMgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCisKICNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKIAl0eXBlb2YocHRyLT5jb3VudGVyKSBvbGRfdmFsLCBuZXdfdmFsOwkJCQlcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIgICBsICAgICAlMCwwKCUzKVxuIgkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjA6IGxyICAgICUxLCUwXG4iCQkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Bfc3RyaW5nICIgICUxLCU0XG4iCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgY3MgICAgJTAsJTEsMCglMylcbiIJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBqbCAgICAwYiIJCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLAlcCi0JCQkgICAgICAgIj1tIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJXAotCQkJICAgICA6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCVwKLQkJCSAgICAgICAibSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCVwKLQkJCSAgICAgOiAiY2MiLCAibWVtb3J5IiApOwkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJIglsCSUwLCUyXG4iCQkJCVwKKwkJIjA6CWxyCSUxLCUwXG4iCQkJCVwKKwkJb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQkJXAorCQkiCWNzCSUwLCUxLCUyXG4iCQkJCVwKKwkJIglqbAkwYiIJCQkJCVwKKwkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwJCQlcCisJCSAgIj1RIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJCQlcCisJCTogImQiIChvcF92YWwpLAkgIlEiICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQlcCisJCTogImNjIiwgIm1lbW9yeSIpOwkJCQkJXAogCW5ld192YWw7CQkJCQkJCVwKIH0pCisKKyNlbHNlIC8qIF9fR05VQ19fICovCisKKyNkZWZpbmUgX19DU19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKKwl0eXBlb2YocHRyLT5jb3VudGVyKSBvbGRfdmFsLCBuZXdfdmFsOwkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCSIJbAklMCwwKCUzKVxuIgkJCQlcCisJCSIwOglscgklMSwlMFxuIgkJCQlcCisJCW9wX3N0cmluZyAiCSUxLCU0XG4iCQkJCVwKKwkJIgljcwklMCwlMSwwKCUzKVxuIgkJCQlcCisJCSIJamwJMGIiCQkJCQlcCisJCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAorCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAorCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCisJCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKKwkJOiAiY2MiLCAibWVtb3J5Iik7CQkJCQlcCisJbmV3X3ZhbDsJCQkJCQkJXAorfSkKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKICNkZWZpbmUgYXRvbWljX3JlYWQodikgICAgICAgICAgKCh2KS0+Y291bnRlcikKICNkZWZpbmUgYXRvbWljX3NldCh2LGkpICAgICAgICAgKCgodiktPmNvdW50ZXIpID0gKGkpKQogCkBAIC04MSwxMCArMTA0LDE5IEBACiAKIHN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfY21weGNoZyhhdG9taWNfdCAqdiwgaW50IG9sZCwgaW50IG5ldykKIHsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygiICBjcyAgICUwLCUzLDAoJTIpXG4iCi0JCQkgICAgIDogIitkIiAob2xkKSwgIj1tIiAodi0+Y291bnRlcikKLQkJCSAgICAgOiAiYSIgKHYpLCAiZCIgKG5ldyksICJtIiAodi0+Y291bnRlcikKLQkJCSAgICAgOiAiY2MiLCAibWVtb3J5IiApOworI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCisJYXNtIHZvbGF0aWxlKAorCQkiCWNzCSUwLCUyLCUxIgorCQk6ICIrZCIgKG9sZCksICI9USIgKHYtPmNvdW50ZXIpCisJCTogImQiIChuZXcpLCAiUSIgKHYtPmNvdW50ZXIpCisJCTogImNjIiwgIm1lbW9yeSIpOworI2Vsc2UgLyogX19HTlVDX18gKi8KKwlhc20gdm9sYXRpbGUoCisJCSIJY3MJJTAsJTMsMCglMikiCisJCTogIitkIiAob2xkKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiYSIgKHYpLCAiZCIgKG5ldyksICJtIiAodi0+Y291bnRlcikKKwkJOiAiY2MiLCAibWVtb3J5Iik7CisjZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gb2xkOwogfQogCkBAIC0xMTMsMjAgKzE0NSw0MyBAQAogfSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKSBhdG9taWM2NF90OwogI2RlZmluZSBBVE9NSUM2NF9JTklUKGkpICB7IChpKSB9CiAKKyNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQorCiAjZGVmaW5lIF9fQ1NHX0xPT1AocHRyLCBvcF92YWwsIG9wX3N0cmluZykgKHsJCQkJXAogCXR5cGVvZihwdHItPmNvdW50ZXIpIG9sZF92YWwsIG5ld192YWw7CQkJCVwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiAgIGxnICAgICUwLDAoJTMpXG4iCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMDogbGdyICAgJTEsJTBcbiIJCQkJXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcF9zdHJpbmcgIiAgJTEsJTRcbiIJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICBjc2cgICAlMCwlMSwwKCUzKVxuIgkJCVwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGpsICAgIDBiIgkJCQlcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCVwKLQkJCSAgICAgICAiPW0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQlcCi0JCQkgICAgIDogImEiIChwdHIpLCAiZCIgKG9wX3ZhbCksCQkJXAotCQkJICAgICAgICJtIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJXAotCQkJICAgICA6ICJjYyIsICJtZW1vcnkiICk7CQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAorCQkiCWxnCSUwLCUyXG4iCQkJCVwKKwkJIjA6CWxncgklMSwlMFxuIgkJCQlcCisJCW9wX3N0cmluZyAiCSUxLCUzXG4iCQkJCVwKKwkJIgljc2cJJTAsJTEsJTJcbiIJCQkJXAorCQkiCWpsCTBiIgkJCQkJXAorCQk6ICI9JmQiIChvbGRfdmFsKSwgIj0mZCIgKG5ld192YWwpLAkJCVwKKwkJICAiPVEiICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKKwkJOiAiZCIgKG9wX3ZhbCksCSJRIiAoKChhdG9taWNfdCAqKShwdHIpKS0+Y291bnRlcikJXAorCQk6ICJjYyIsICJtZW1vcnkiICk7CQkJCQlcCiAJbmV3X3ZhbDsJCQkJCQkJXAogfSkKKworI2Vsc2UgLyogX19HTlVDX18gKi8KKworI2RlZmluZSBfX0NTR19MT09QKHB0ciwgb3BfdmFsLCBvcF9zdHJpbmcpICh7CQkJCVwKKwl0eXBlb2YocHRyLT5jb3VudGVyKSBvbGRfdmFsLCBuZXdfdmFsOwkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCSIJbGcJJTAsMCglMylcbiIJCQkJXAorCQkiMDoJbGdyCSUxLCUwXG4iCQkJCVwKKwkJb3Bfc3RyaW5nICIJJTEsJTRcbiIJCQkJXAorCQkiCWNzZwklMCwlMSwwKCUzKVxuIgkJCQlcCisJCSIJamwJMGIiCQkJCQlcCisJCTogIj0mZCIgKG9sZF92YWwpLCAiPSZkIiAobmV3X3ZhbCksCQkJXAorCQkgICI9bSIgKCgoYXRvbWljX3QgKikocHRyKSktPmNvdW50ZXIpCQkJXAorCQk6ICJhIiAocHRyKSwgImQiIChvcF92YWwpLAkJCQlcCisJCSAgIm0iICgoKGF0b21pY190ICopKHB0cikpLT5jb3VudGVyKQkJCVwKKwkJOiAiY2MiLCAibWVtb3J5IiApOwkJCQkJXAorCW5ld192YWw7CQkJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCiAjZGVmaW5lIGF0b21pYzY0X3JlYWQodikgICAgICAgICAgKCh2KS0+Y291bnRlcikKICNkZWZpbmUgYXRvbWljNjRfc2V0KHYsaSkgICAgICAgICAoKCh2KS0+Y291bnRlcikgPSAoaSkpCiAKQEAgLTE2MywxMCArMjE4LDE5IEBACiBzdGF0aWMgX19pbmxpbmVfXyBsb25nIGxvbmcgYXRvbWljNjRfY21weGNoZyhhdG9taWM2NF90ICp2LAogCQkJCQkgICAgIGxvbmcgbG9uZyBvbGQsIGxvbmcgbG9uZyBuZXcpCiB7Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18oIiAgY3NnICAlMCwlMywwKCUyKVxuIgotCQkJICAgICA6ICIrZCIgKG9sZCksICI9bSIgKHYtPmNvdW50ZXIpCi0JCQkgICAgIDogImEiICh2KSwgImQiIChuZXcpLCAibSIgKHYtPmNvdW50ZXIpCi0JCQkgICAgIDogImNjIiwgIm1lbW9yeSIgKTsKKyNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQorCWFzbSB2b2xhdGlsZSgKKwkJIgljc2cJJTAsJTIsJTEiCisJCTogIitkIiAob2xkKSwgIj1RIiAodi0+Y291bnRlcikKKwkJOiAiZCIgKG5ldyksICJRIiAodi0+Y291bnRlcikKKwkJOiAiY2MiLCAibWVtb3J5Iik7CisjZWxzZSAvKiBfX0dOVUNfXyAqLworCWFzbSB2b2xhdGlsZSgKKwkJIgljc2cJJTAsJTMsMCglMikiCisJCTogIitkIiAob2xkKSwgIj1tIiAodi0+Y291bnRlcikKKwkJOiAiYSIgKHYpLCAiZCIgKG5ldyksICJtIiAodi0+Y291bnRlcikKKwkJOiAiY2MiLCAibWVtb3J5Iik7CisjZW5kaWYgLyogX19HTlVDX18gKi8KIAlyZXR1cm4gb2xkOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oIGIvaW5jbHVkZS9hc20tczM5MC9iaXRvcHMuaAppbmRleCAwZGRjZGJhLi5mNzljOWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2JpdG9wcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYml0b3BzLmgKQEAgLTY3LDE2ICs2NywzNSBAQAogI2RlZmluZSBfX0JJVE9QU19BTkQJCSJuciIKICNkZWZpbmUgX19CSVRPUFNfWE9SCQkieHIiCiAKLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCIgICBsICAgJTAsMCglNClcbiIJCQlcCi0JCQkgICAgICIwOiBsciAgJTEsJTBcbiIJCQkJXAotCQkJICAgICBfX29wX3N0cmluZyAiICAlMSwlM1xuIgkJCVwKLQkJCSAgICAgIiAgIGNzICAlMCwlMSwwKCU0KVxuIgkJCVwKLQkJCSAgICAgIiAgIGpsICAwYiIJCQkJXAotCQkJICAgICA6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCSAgICAgICAJXAotCQkJICAgICAgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCi0JCQkgICAgIDogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCVwKLQkJCSAgICAgICAibSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpIDogImNjIiApOworI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCisKKyNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIglsCSUwLCUyXG4iCQkJXAorCQkiMDoJbHIJJTEsJTBcbiIJCQlcCisJCV9fb3Bfc3RyaW5nICIJJTEsJTNcbiIJCQlcCisJCSIJY3MJJTAsJTEsJTJcbiIJCQlcCisJCSIJamwJMGIiCQkJCVwKKwkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKKwkJICAiPVEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAorCQk6ICJkIiAoX192YWwpLCAiUSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCVwKKwkJOiAiY2MiKTsKKworI2Vsc2UgLyogX19HTlVDX18gKi8KKworI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWwJJTAsMCglNClcbiIJCQlcCisJCSIwOglscgklMSwlMFxuIgkJCVwKKwkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKKwkJIgljcwklMCwlMSwwKCU0KVxuIgkJCVwKKwkJIglqbAkwYiIJCQkJXAorCQk6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCQkJXAorCQkgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCisJCTogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCQlcCisJCSAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIpOworCisjZW5kaWYgLyogX19HTlVDX18gKi8KIAogI2Vsc2UgLyogX19zMzkweF9fICovCiAKQEAgLTg2LDIxICsxMDUsNDEgQEAKICNkZWZpbmUgX19CSVRPUFNfQU5ECQkibmdyIgogI2RlZmluZSBfX0JJVE9QU19YT1IJCSJ4Z3IiCiAKLSNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQkJXAotCV9fYXNtX18gX192b2xhdGlsZV9fKCIgICBsZyAgJTAsMCglNClcbiIJCQlcCi0JCQkgICAgICIwOiBsZ3IgJTEsJTBcbiIJCQkJXAotCQkJICAgICBfX29wX3N0cmluZyAiICAlMSwlM1xuIgkJCVwKLQkJCSAgICAgIiAgIGNzZyAlMCwlMSwwKCU0KVxuIgkJCVwKLQkJCSAgICAgIiAgIGpsICAwYiIJCQkJXAotCQkJICAgICA6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCSAgICAgICAJXAotCQkJICAgICAgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCi0JCQkgICAgIDogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCVwKLQkJCSAgICAgICAibSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpIDogImNjIiApOworI2lmIF9fR05VQ19fID4gMyB8fCAoX19HTlVDX18gPT0gMyAmJiBfX0dOVUNfTUlOT1JfXyA+IDIpCisKKyNkZWZpbmUgX19CSVRPUFNfTE9PUChfX29sZCwgX19uZXcsIF9fYWRkciwgX192YWwsIF9fb3Bfc3RyaW5nKQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIglsZwklMCwlMlxuIgkJCVwKKwkJIjA6CWxncgklMSwlMFxuIgkJCVwKKwkJX19vcF9zdHJpbmcgIgklMSwlM1xuIgkJCVwKKwkJIgljc2cJJTAsJTEsJTJcbiIJCQlcCisJCSIJamwJMGIiCQkJCVwKKwkJOiAiPSZkIiAoX19vbGQpLCAiPSZkIiAoX19uZXcpLAkJCVwKKwkJICAiPVEiICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKQkJXAorCQk6ICJkIiAoX192YWwpLCAiUSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCVwKKwkJOiAiY2MiKTsKKworI2Vsc2UgLyogX19HTlVDX18gKi8KKworI2RlZmluZSBfX0JJVE9QU19MT09QKF9fb2xkLCBfX25ldywgX19hZGRyLCBfX3ZhbCwgX19vcF9zdHJpbmcpCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWxnCSUwLDAoJTQpXG4iCQkJXAorCQkiMDoJbGdyCSUxLCUwXG4iCQkJXAorCQlfX29wX3N0cmluZyAiCSUxLCUzXG4iCQkJXAorCQkiCWNzZwklMCwlMSwwKCU0KVxuIgkJCVwKKwkJIglqbAkwYiIJCQkJXAorCQk6ICI9JmQiIChfX29sZCksICI9JmQiIChfX25ldyksCQkJXAorCQkgICI9bSIgKCoodW5zaWduZWQgbG9uZyAqKSBfX2FkZHIpCQlcCisJCTogImQiIChfX3ZhbCksICJhIiAoX19hZGRyKSwJCQlcCisJCSAgIm0iICgqKHVuc2lnbmVkIGxvbmcgKikgX19hZGRyKSA6ICJjYyIpOworCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLwogCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKICNkZWZpbmUgX19CSVRPUFNfV09SRFMoYml0cykgKCgoYml0cykrX19CSVRPUFNfV09SRFNJWkUtMSkvX19CSVRPUFNfV09SRFNJWkUpCi0jZGVmaW5lIF9fQklUT1BTX0JBUlJJRVIoKSBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoICIiIDogOiA6ICJtZW1vcnkiICkKKyNkZWZpbmUgX19CSVRPUFNfQkFSUklFUigpIGFzbSB2b2xhdGlsZSgiIiA6IDogOiAibWVtb3J5IikKIAogI2lmZGVmIENPTkZJR19TTVAKIC8qCkBAIC0yMTcsMTAgKzI1NiwxMCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKLSAgICAgICAgYXNtIHZvbGF0aWxlKCJvYyAwKDEsJTEpLDAoJTIpIgotCQkgICAgIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCSAgICAgOiAiYSIgKGFkZHIpLCAiYSIgKF9vaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgICAgICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJb2MJMCgxLCUxKSwwKCUyKSIKKwkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikgOiAiYSIgKGFkZHIpLAorCQkgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTIyOSw0MCArMjY4LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlhZGRyID0gKCh1bnNpZ25lZCBsb25nKSBwdHIpICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKLQlzd2l0Y2ggKG5yJjcpIHsKLQljYXNlIDA6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDEiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDIiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDQiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MDgiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MTAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4MjAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4NDAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCWFzbSB2b2xhdGlsZSAoIm9pIDAoJTEpLDB4ODAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQl9CisJKih1bnNpZ25lZCBjaGFyICopIGFkZHIgfD0gMSA8PCAobnIgJiA3KTsKIH0KIAogI2RlZmluZSBzZXRfYml0X3NpbXBsZShucixhZGRyKSBcCkBAIC0yNzksMTAgKzI4NSwxMCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKLSAgICAgICAgYXNtIHZvbGF0aWxlKCJuYyAwKDEsJTEpLDAoJTIpIgotCQkgICAgIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCSAgICAgOiAiYSIgKGFkZHIpLCAiYSIgKF9uaV9iaXRtYXAgKyAobnIgJiA3KSksCi0JCSAgICAgICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJbmMJMCgxLCUxKSwwKCUyKSIKKwkJOiAiPW0iICgqKGNoYXIgKikgYWRkcikJOiAiYSIgKGFkZHIpLAorCQkgICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIApAQCAtMjkxLDQwICsyOTcsNyBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSAoKHVuc2lnbmVkIGxvbmcpIHB0cikgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwotCXN3aXRjaCAobnImNykgewotCWNhc2UgMDoKLQkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhGRSIgOiAiPW0iICgqKGNoYXIgKikgYWRkcikKLQkJCSAgICAgIDogImEiIChhZGRyKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJYXNtIHZvbGF0aWxlICgibmkgMCglMSksMHhGRCI6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweEZCIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweEY3IiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweEVGIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweERGIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSA2OgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweEJGIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JY2FzZSA3OgotCQlhc20gdm9sYXRpbGUgKCJuaSAwKCUxKSwweDdGIiA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkJICAgICAgOiAiYSIgKGFkZHIpLCAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIgKTsKLQkJYnJlYWs7Ci0JfQorCSoodW5zaWduZWQgY2hhciAqKSBhZGRyICY9IH4oMSA8PCAobnIgJiA3KSk7CiB9CiAKICNkZWZpbmUgY2xlYXJfYml0X3NpbXBsZShucixhZGRyKSBcCkBAIC0zNDAsMTAgKzMxMywxMCBAQAogCXVuc2lnbmVkIGxvbmcgYWRkcjsKIAogCWFkZHIgPSAodW5zaWduZWQgbG9uZykgcHRyICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKLSAgICAgICAgYXNtIHZvbGF0aWxlKCJ4YyAwKDEsJTEpLDAoJTIpIgotCQkgICAgIDogICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiCXhjCTAoMSwlMSksMCglMikiCisJCTogICI9bSIgKCooY2hhciAqKSBhZGRyKSA6ICJhIiAoYWRkciksCisJCSAgICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiICk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCAKQEAgLTM1Miw0MCArMzI1LDcgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAKIAlhZGRyID0gKCh1bnNpZ25lZCBsb25nKSBwdHIpICsgKChuciBeIChfX0JJVE9QU19XT1JEU0laRSAtIDgpKSA+PiAzKTsKLQlzd2l0Y2ggKG5yJjcpIHsKLQljYXNlIDA6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MDEiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDE6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MDIiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MDQiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDM6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MDgiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MTAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDU6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4MjAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDY6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4NDAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQljYXNlIDc6Ci0JCWFzbSB2b2xhdGlsZSAoInhpIDAoJTEpLDB4ODAiIDogIj1tIiAoKihjaGFyICopIGFkZHIpCi0JCQkgICAgICA6ICJhIiAoYWRkciksICJtIiAoKihjaGFyICopIGFkZHIpIDogImNjIiApOwotCQlicmVhazsKLQl9CisJKih1bnNpZ25lZCBjaGFyICopIGFkZHIgXj0gMSA8PCAobnIgJiA3KTsKIH0KIAogI2RlZmluZSBjaGFuZ2VfYml0X3NpbXBsZShucixhZGRyKSBcCkBAIC00MDQsMTAgKzM0NCwxMSBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0gICAgICAgIGFzbSB2b2xhdGlsZSgib2MgMCgxLCUxKSwwKCUyKSIKLQkJICAgICA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglvYwkwKDEsJTEpLDAoJTIpIgorCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQk6ICJhIiAoYWRkciksICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwKKwkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfc2V0X2JpdChYLFkpCQl0ZXN0X2FuZF9zZXRfYml0X3NpbXBsZShYLFkpCkBAIC00MjMsMTAgKzM2NCwxMSBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0gICAgICAgIGFzbSB2b2xhdGlsZSgibmMgMCgxLCUxKSwwKCUyKSIKLQkJICAgICA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfbmlfYml0bWFwICsgKG5yICYgNykpLAotCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgluYwkwKDEsJTEpLDAoJTIpIgorCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQk6ICJhIiAoYWRkciksICJhIiAoX25pX2JpdG1hcCArIChuciAmIDcpKSwKKwkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2xlYXJfYml0KFgsWSkJdGVzdF9hbmRfY2xlYXJfYml0X3NpbXBsZShYLFkpCkBAIC00NDIsMTAgKzM4NCwxMSBAQAogCiAJYWRkciA9ICh1bnNpZ25lZCBsb25nKSBwdHIgKyAoKG5yIF4gKF9fQklUT1BTX1dPUkRTSVpFIC0gOCkpID4+IDMpOwogCWNoID0gKih1bnNpZ25lZCBjaGFyICopIGFkZHI7Ci0gICAgICAgIGFzbSB2b2xhdGlsZSgieGMgMCgxLCUxKSwwKCUyKSIKLQkJICAgICA6ICI9bSIgKCooY2hhciAqKSBhZGRyKQotCQkgICAgIDogImEiIChhZGRyKSwgImEiIChfb2lfYml0bWFwICsgKG5yICYgNykpLAotCQkgICAgICAgIm0iICgqKGNoYXIgKikgYWRkcikgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgl4YwkwKDEsJTEpLDAoJTIpIgorCQk6ICI9bSIgKCooY2hhciAqKSBhZGRyKQorCQk6ICJhIiAoYWRkciksICJhIiAoX29pX2JpdG1hcCArIChuciAmIDcpKSwKKwkJICAibSIgKCooY2hhciAqKSBhZGRyKSA6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gKGNoID4+IChuciAmIDcpKSAmIDE7CiB9CiAjZGVmaW5lIF9fdGVzdF9hbmRfY2hhbmdlX2JpdChYLFkpCXRlc3RfYW5kX2NoYW5nZV9iaXRfc2ltcGxlKFgsWSkKQEAgLTU1NywzNSArNTAwLDM2IEBACiAKICAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBfX2FzbV9fKCIgICBsaGkgICUxLC0xXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxyICAgJTIsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgc2xyICAlMCwlMFxuIgotICAgICAgICAgICAgICAgICIgICBhaGkgICUyLDMxXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsNVxuIgotICAgICAgICAgICAgICAgICIwOiBjICAgICUxLDAoJTAsJTQpXG4iCi0gICAgICAgICAgICAgICAgIiAgIGpuZSAgMWZcbiIKLSAgICAgICAgICAgICAgICAiICAgbGEgICAlMCw0KCUwKVxuIgotICAgICAgICAgICAgICAgICIgICBicmN0ICUyLDBiXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxyICAgJTAsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgaiAgICA0ZlxuIgotICAgICAgICAgICAgICAgICIxOiBsICAgICUyLDAoJTAsJTQpXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNsbCAgJTAsM1xuIgotICAgICAgICAgICAgICAgICIgICBsaGkgICUxLDB4ZmZcbiIKLSAgICAgICAgICAgICAgICAiICAgdG1sICAlMiwweGZmZmZcbiIKLSAgICAgICAgICAgICAgICAiICAgam5vICAyZlxuIgotICAgICAgICAgICAgICAgICIgICBhaGkgICUwLDE2XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsMTZcbiIKLSAgICAgICAgICAgICAgICAiMjogdG1sICAlMiwweDAwZmZcbiIKLSAgICAgICAgICAgICAgICAiICAgam5vICAzZlxuIgotICAgICAgICAgICAgICAgICIgICBhaGkgICUwLDhcbiIKLSAgICAgICAgICAgICAgICAiICAgc3JsICAlMiw4XG4iCi0gICAgICAgICAgICAgICAgIjM6IG5yICAgJTIsJTFcbiIKLSAgICAgICAgICAgICAgICAiICAgaWMgICAlMiwwKCUyLCU1KVxuIgotICAgICAgICAgICAgICAgICIgICBhbHIgICUwLCUyXG4iCi0gICAgICAgICAgICAgICAgIjQ6IgotICAgICAgICAgICAgICAgIDogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCi0gICAgICAgICAgICAgICAgOiAiYSIgKHNpemUpLCAiYSIgKGFkZHIpLCAiYSIgKCZfemJfZmluZG1hcCksCi0JCSAgIm0iICgqKGFkZHJ0eXBlICopIGFkZHIpIDogImNjIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglsaGkJJTEsLTFcbiIKKwkJIglscgklMiwlM1xuIgorCQkiCXNscgklMCwlMFxuIgorCQkiCWFoaQklMiwzMVxuIgorCQkiCXNybAklMiw1XG4iCisJCSIwOgljCSUxLDAoJTAsJTQpXG4iCisJCSIJam5lCTFmXG4iCisJCSIJbGEJJTAsNCglMClcbiIKKwkJIglicmN0CSUyLDBiXG4iCisJCSIJbHIJJTAsJTNcbiIKKwkJIglqCTRmXG4iCisJCSIxOglsCSUyLDAoJTAsJTQpXG4iCisJCSIJc2xsCSUwLDNcbiIKKwkJIglsaGkJJTEsMHhmZlxuIgorCQkiCXRtbAklMiwweGZmZmZcbiIKKwkJIglqbm8JMmZcbiIKKwkJIglhaGkJJTAsMTZcbiIKKwkJIglzcmwJJTIsMTZcbiIKKwkJIjI6CXRtbAklMiwweDAwZmZcbiIKKwkJIglqbm8JM2ZcbiIKKwkJIglhaGkJJTAsOFxuIgorCQkiCXNybAklMiw4XG4iCisJCSIzOglucgklMiwlMVxuIgorCQkiCWljCSUyLDAoJTIsJTUpXG4iCisJCSIJYWxyCSUwLCUyXG4iCisJCSI0OiIKKwkJOiAiPSZhIiAocmVzKSwgIj0mZCIgKGNtcCksICI9JmEiIChjb3VudCkKKwkJOiAiYSIgKHNpemUpLCAiYSIgKGFkZHIpLCAiYSIgKCZfemJfZmluZG1hcCksCisJCSAgIm0iICgqKGFkZHJ0eXBlICopIGFkZHIpIDogImNjIik7CiAgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOwogfQogCkBAIC01OTgsMzUgKzU0MiwzNiBAQAogCiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgX19hc21fXygiICAgc2xyICAlMSwlMVxuIgotICAgICAgICAgICAgICAgICIgICBsciAgICUyLCUzXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNsciAgJTAsJTBcbiIKLSAgICAgICAgICAgICAgICAiICAgYWhpICAlMiwzMVxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICUyLDVcbiIKLSAgICAgICAgICAgICAgICAiMDogYyAgICAlMSwwKCUwLCU0KVxuIgotICAgICAgICAgICAgICAgICIgICBqbmUgIDFmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxhICAgJTAsNCglMClcbiIKLSAgICAgICAgICAgICAgICAiICAgYnJjdCAlMiwwYlxuIgotICAgICAgICAgICAgICAgICIgICBsciAgICUwLCUzXG4iCi0gICAgICAgICAgICAgICAgIiAgIGogICAgNGZcbiIKLSAgICAgICAgICAgICAgICAiMTogbCAgICAlMiwwKCUwLCU0KVxuIgotICAgICAgICAgICAgICAgICIgICBzbGwgICUwLDNcbiIKLSAgICAgICAgICAgICAgICAiICAgbGhpICAlMSwweGZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIHRtbCAgJTIsMHhmZmZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGpueiAgMmZcbiIKLSAgICAgICAgICAgICAgICAiICAgYWhpICAlMCwxNlxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICUyLDE2XG4iCi0gICAgICAgICAgICAgICAgIjI6IHRtbCAgJTIsMHgwMGZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGpueiAgM2ZcbiIKLSAgICAgICAgICAgICAgICAiICAgYWhpICAlMCw4XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsOFxuIgotICAgICAgICAgICAgICAgICIzOiBuciAgICUyLCUxXG4iCi0gICAgICAgICAgICAgICAgIiAgIGljICAgJTIsMCglMiwlNSlcbiIKLSAgICAgICAgICAgICAgICAiICAgYWxyICAlMCwlMlxuIgotICAgICAgICAgICAgICAgICI0OiIKLSAgICAgICAgICAgICAgICA6ICI9JmEiIChyZXMpLCAiPSZkIiAoY21wKSwgIj0mYSIgKGNvdW50KQotICAgICAgICAgICAgICAgIDogImEiIChzaXplKSwgImEiIChhZGRyKSwgImEiICgmX3NiX2ZpbmRtYXApLAotCQkgICJtIiAoKihhZGRydHlwZSAqKSBhZGRyKSA6ICJjYyIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJc2xyCSUxLCUxXG4iCisJCSIJbHIJJTIsJTNcbiIKKwkJIglzbHIJJTAsJTBcbiIKKwkJIglhaGkJJTIsMzFcbiIKKwkJIglzcmwJJTIsNVxuIgorCQkiMDoJYwklMSwwKCUwLCU0KVxuIgorCQkiCWpuZQkxZlxuIgorCQkiCWxhCSUwLDQoJTApXG4iCisJCSIJYnJjdAklMiwwYlxuIgorCQkiCWxyCSUwLCUzXG4iCisJCSIJagk0ZlxuIgorCQkiMToJbAklMiwwKCUwLCU0KVxuIgorCQkiCXNsbAklMCwzXG4iCisJCSIJbGhpCSUxLDB4ZmZcbiIKKwkJIgl0bWwJJTIsMHhmZmZmXG4iCisJCSIJam56CTJmXG4iCisJCSIJYWhpCSUwLDE2XG4iCisJCSIJc3JsCSUyLDE2XG4iCisJCSIyOgl0bWwJJTIsMHgwMGZmXG4iCisJCSIJam56CTNmXG4iCisJCSIJYWhpCSUwLDhcbiIKKwkJIglzcmwJJTIsOFxuIgorCQkiMzoJbnIJJTIsJTFcbiIKKwkJIglpYwklMiwwKCUyLCU1KVxuIgorCQkiCWFscgklMCwlMlxuIgorCQkiNDoiCisJCTogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisJCTogImEiIChzaXplKSwgImEiIChhZGRyKSwgImEiICgmX3NiX2ZpbmRtYXApLAorCQkgICJtIiAoKihhZGRydHlwZSAqKSBhZGRyKSA6ICJjYyIpOwogICAgICAgICByZXR1cm4gKHJlcyA8IHNpemUpID8gcmVzIDogc2l6ZTsKIH0KIApAQCAtNjQwLDM5ICs1ODUsNDAgQEAKIAogICAgICAgICBpZiAoIXNpemUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIF9fYXNtX18oIiAgIGxnaGkgICUxLC0xXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxnciAgICUyLCUzXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNsZ3IgICUwLCUwXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFnaGkgICUyLDYzXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybGcgICUyLCUyLDZcbiIKLSAgICAgICAgICAgICAgICAiMDogY2cgICAgJTEsMCglMCwlNClcbiIKLSAgICAgICAgICAgICAgICAiICAgam5lICAgMWZcbiIKLSAgICAgICAgICAgICAgICAiICAgbGEgICAgJTAsOCglMClcbiIKLSAgICAgICAgICAgICAgICAiICAgYnJjdCAgJTIsMGJcbiIKLSAgICAgICAgICAgICAgICAiICAgbGdyICAgJTAsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgaiAgICAgNWZcbiIKLSAgICAgICAgICAgICAgICAiMTogbGcgICAgJTIsMCglMCwlNClcbiIKLSAgICAgICAgICAgICAgICAiICAgc2xsZyAgJTAsJTAsM1xuIgotICAgICAgICAgICAgICAgICIgICBjbHIgICAlMiwlMVxuIgotCQkiICAgam5lICAgMmZcbiIKLQkJIiAgIGFnaGkgICUwLDMyXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybGcgICUyLCUyLDMyXG4iCi0JCSIyOiBsZ2hpICAlMSwweGZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIHRtbGwgICUyLDB4ZmZmZlxuIgotICAgICAgICAgICAgICAgICIgICBqbm8gICAzZlxuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwxNlxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiwxNlxuIgotICAgICAgICAgICAgICAgICIzOiB0bWxsICAlMiwweDAwZmZcbiIKLSAgICAgICAgICAgICAgICAiICAgam5vICAgNGZcbiIKLSAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTAsOFxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiw4XG4iCi0gICAgICAgICAgICAgICAgIjQ6IG5nciAgICUyLCUxXG4iCi0gICAgICAgICAgICAgICAgIiAgIGljICAgICUyLDAoJTIsJTUpXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFsZ3IgICUwLCUyXG4iCi0gICAgICAgICAgICAgICAgIjU6IgotICAgICAgICAgICAgICAgIDogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisJYXNtIHZvbGF0aWxlKAorCQkiCWxnaGkJJTEsLTFcbiIKKwkJIglsZ3IJJTIsJTNcbiIKKwkJIglzbGdyCSUwLCUwXG4iCisJCSIJYWdoaQklMiw2M1xuIgorCQkiCXNybGcJJTIsJTIsNlxuIgorCQkiMDoJY2cJJTEsMCglMCwlNClcbiIKKwkJIglqbmUJMWZcbiIKKwkJIglsYQklMCw4KCUwKVxuIgorCQkiCWJyY3QJJTIsMGJcbiIKKwkJIglsZ3IJJTAsJTNcbiIKKwkJIglqCTVmXG4iCisJCSIxOglsZwklMiwwKCUwLCU0KVxuIgorCQkiCXNsbGcJJTAsJTAsM1xuIgorCQkiCWNscgklMiwlMVxuIgorCQkiCWpuZQkyZlxuIgorCQkiCWFnaGkJJTAsMzJcbiIKKwkJIglzcmxnCSUyLCUyLDMyXG4iCisJCSIyOglsZ2hpCSUxLDB4ZmZcbiIKKwkJIgl0bWxsCSUyLDB4ZmZmZlxuIgorCQkiCWpubwkzZlxuIgorCQkiCWFnaGkJJTAsMTZcbiIKKwkJIglzcmwJJTIsMTZcbiIKKwkJIjM6CXRtbGwJJTIsMHgwMGZmXG4iCisJCSIJam5vCTRmXG4iCisJCSIJYWdoaQklMCw4XG4iCisJCSIJc3JsCSUyLDhcbiIKKwkJIjQ6CW5ncgklMiwlMVxuIgorCQkiCWljCSUyLDAoJTIsJTUpXG4iCisJCSIJYWxncgklMCwlMlxuIgorCQkiNToiCisJCTogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCiAJCTogImEiIChzaXplKSwgImEiIChhZGRyKSwgImEiICgmX3piX2ZpbmRtYXApLAotCQkgICJtIiAoKihhZGRydHlwZSAqKSBhZGRyKSA6ICJjYyIgKTsKKwkJICAibSIgKCooYWRkcnR5cGUgKikgYWRkcikgOiAiY2MiKTsKICAgICAgICAgcmV0dXJuIChyZXMgPCBzaXplKSA/IHJlcyA6IHNpemU7CiB9CiAKQEAgLTY4NCwzOSArNjMwLDQwIEBACiAKICAgICAgICAgaWYgKCFzaXplKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICBfX2FzbV9fKCIgICBzbGdyICAlMSwlMVxuIgotICAgICAgICAgICAgICAgICIgICBsZ3IgICAlMiwlM1xuIgotICAgICAgICAgICAgICAgICIgICBzbGdyICAlMCwlMFxuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMiw2M1xuIgotICAgICAgICAgICAgICAgICIgICBzcmxnICAlMiwlMiw2XG4iCi0gICAgICAgICAgICAgICAgIjA6IGNnICAgICUxLDAoJTAsJTQpXG4iCi0gICAgICAgICAgICAgICAgIiAgIGpuZSAgIDFmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFnaGkgICUwLDhcbiIKLSAgICAgICAgICAgICAgICAiICAgYnJjdCAgJTIsMGJcbiIKLSAgICAgICAgICAgICAgICAiICAgbGdyICAgJTAsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgaiAgICAgNWZcbiIKLSAgICAgICAgICAgICAgICAiMTogbGcgICAgJTIsMCglMCwlNClcbiIKLSAgICAgICAgICAgICAgICAiICAgc2xsZyAgJTAsJTAsM1xuIgotICAgICAgICAgICAgICAgICIgICBjbHIgICAlMiwlMVxuIgotCQkiICAgam5lICAgMmZcbiIKLQkJIiAgIGFnaGkgICUwLDMyXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybGcgICUyLCUyLDMyXG4iCi0JCSIyOiBsZ2hpICAlMSwweGZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIHRtbGwgICUyLDB4ZmZmZlxuIgotICAgICAgICAgICAgICAgICIgICBqbnogICAzZlxuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwxNlxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiwxNlxuIgotICAgICAgICAgICAgICAgICIzOiB0bWxsICAlMiwweDAwZmZcbiIKLSAgICAgICAgICAgICAgICAiICAgam56ICAgNGZcbiIKLSAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTAsOFxuIgotICAgICAgICAgICAgICAgICIgICBzcmwgICAlMiw4XG4iCi0gICAgICAgICAgICAgICAgIjQ6IG5nciAgICUyLCUxXG4iCi0gICAgICAgICAgICAgICAgIiAgIGljICAgICUyLDAoJTIsJTUpXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFsZ3IgICUwLCUyXG4iCi0gICAgICAgICAgICAgICAgIjU6IgotICAgICAgICAgICAgICAgIDogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisJYXNtIHZvbGF0aWxlKAorCQkiCXNsZ3IJJTEsJTFcbiIKKwkJIglsZ3IJJTIsJTNcbiIKKwkJIglzbGdyCSUwLCUwXG4iCisJCSIJYWdoaQklMiw2M1xuIgorCQkiCXNybGcJJTIsJTIsNlxuIgorCQkiMDoJY2cJJTEsMCglMCwlNClcbiIKKwkJIglqbmUJMWZcbiIKKwkJIglhZ2hpCSUwLDhcbiIKKwkJIglicmN0CSUyLDBiXG4iCisJCSIJbGdyCSUwLCUzXG4iCisJCSIJagk1ZlxuIgorCQkiMToJbGcJJTIsMCglMCwlNClcbiIKKwkJIglzbGxnCSUwLCUwLDNcbiIKKwkJIgljbHIJJTIsJTFcbiIKKwkJIglqbmUJMmZcbiIKKwkJIglhZ2hpCSUwLDMyXG4iCisJCSIJc3JsZwklMiwlMiwzMlxuIgorCQkiMjoJbGdoaQklMSwweGZmXG4iCisJCSIJdG1sbAklMiwweGZmZmZcbiIKKwkJIglqbnoJM2ZcbiIKKwkJIglhZ2hpCSUwLDE2XG4iCisJCSIJc3JsCSUyLDE2XG4iCisJCSIzOgl0bWxsCSUyLDB4MDBmZlxuIgorCQkiCWpuegk0ZlxuIgorCQkiCWFnaGkJJTAsOFxuIgorCQkiCXNybAklMiw4XG4iCisJCSI0OgluZ3IJJTIsJTFcbiIKKwkJIglpYwklMiwwKCUyLCU1KVxuIgorCQkiCWFsZ3IJJTAsJTJcbiIKKwkJIjU6IgorCQk6ICI9JmEiIChyZXMpLCAiPSZkIiAoY21wKSwgIj0mYSIgKGNvdW50KQogCQk6ICJhIiAoc2l6ZSksICJhIiAoYWRkciksICJhIiAoJl9zYl9maW5kbWFwKSwKLQkJICAibSIgKCooYWRkcnR5cGUgKikgYWRkcikgOiAiY2MiICk7CisJCSAgIm0iICgqKGFkZHJ0eXBlICopIGFkZHIpIDogImNjIik7CiAgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOwogfQogCkBAIC04MzIsMzYgKzc3OSwzNyBAQAogCiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgX19hc21fXygiICAgbGhpICAlMSwtMVxuIgotICAgICAgICAgICAgICAgICIgICBsciAgICUyLCUzXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFoaSAgJTIsMzFcbiIKLSAgICAgICAgICAgICAgICAiICAgc3JsICAlMiw1XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNsciAgJTAsJTBcbiIKLSAgICAgICAgICAgICAgICAiMDogY2wgICAlMSwwKCUwLCU0KVxuIgotICAgICAgICAgICAgICAgICIgICBqbmUgIDFmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsNFxuIgotICAgICAgICAgICAgICAgICIgICBicmN0ICUyLDBiXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxyICAgJTAsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgaiAgICA0ZlxuIgotICAgICAgICAgICAgICAgICIxOiBsICAgICUyLDAoJTAsJTQpXG4iCi0gICAgICAgICAgICAgICAgIiAgIHNsbCAgJTAsM1xuIgotICAgICAgICAgICAgICAgICIgICBhaGkgICUwLDI0XG4iCi0gICAgICAgICAgICAgICAgIiAgIGxoaSAgJTEsMHhmZlxuIgotICAgICAgICAgICAgICAgICIgICB0bWggICUyLDB4ZmZmZlxuIgotICAgICAgICAgICAgICAgICIgICBqbyAgIDJmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFoaSAgJTAsLTE2XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsMTZcbiIKLSAgICAgICAgICAgICAgICAiMjogdG1sICAlMiwweGZmMDBcbiIKLSAgICAgICAgICAgICAgICAiICAgam8gICAzZlxuIgotICAgICAgICAgICAgICAgICIgICBhaGkgICUwLC04XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgJTIsOFxuIgotICAgICAgICAgICAgICAgICIzOiBuciAgICUyLCUxXG4iCi0gICAgICAgICAgICAgICAgIiAgIGljICAgJTIsMCglMiwlNSlcbiIKLSAgICAgICAgICAgICAgICAiICAgYWxyICAlMCwlMlxuIgotICAgICAgICAgICAgICAgICI0OiIKLSAgICAgICAgICAgICAgICA6ICI9JmEiIChyZXMpLCAiPSZkIiAoY21wKSwgIj0mYSIgKGNvdW50KQotICAgICAgICAgICAgICAgIDogImEiIChzaXplKSwgImEiICh2YWRkciksICJhIiAoJl96Yl9maW5kbWFwKSwKLQkJICAibSIgKCooYWRkcnR5cGUgKikgdmFkZHIpIDogImNjIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglsaGkJJTEsLTFcbiIKKwkJIglscgklMiwlM1xuIgorCQkiCWFoaQklMiwzMVxuIgorCQkiCXNybAklMiw1XG4iCisJCSIJc2xyCSUwLCUwXG4iCisJCSIwOgljbAklMSwwKCUwLCU0KVxuIgorCQkiCWpuZQkxZlxuIgorCQkiCWFoaQklMCw0XG4iCisJCSIJYnJjdAklMiwwYlxuIgorCQkiCWxyCSUwLCUzXG4iCisJCSIJagk0ZlxuIgorCQkiMToJbAklMiwwKCUwLCU0KVxuIgorCQkiCXNsbAklMCwzXG4iCisJCSIJYWhpCSUwLDI0XG4iCisJCSIJbGhpCSUxLDB4ZmZcbiIKKwkJIgl0bWgJJTIsMHhmZmZmXG4iCisJCSIJam8JMmZcbiIKKwkJIglhaGkJJTAsLTE2XG4iCisJCSIJc3JsCSUyLDE2XG4iCisJCSIyOgl0bWwJJTIsMHhmZjAwXG4iCisJCSIJam8JM2ZcbiIKKwkJIglhaGkJJTAsLThcbiIKKwkJIglzcmwJJTIsOFxuIgorCQkiMzoJbnIJJTIsJTFcbiIKKwkJIglpYwklMiwwKCUyLCU1KVxuIgorCQkiCWFscgklMCwlMlxuIgorCQkiNDoiCisJCTogIj0mYSIgKHJlcyksICI9JmQiIChjbXApLCAiPSZhIiAoY291bnQpCisJCTogImEiIChzaXplKSwgImEiICh2YWRkciksICJhIiAoJl96Yl9maW5kbWFwKSwKKwkJICAibSIgKCooYWRkcnR5cGUgKikgdmFkZHIpIDogImNjIik7CiAgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOwogfQogCkBAIC04NzUsMzkgKzgyMyw0MCBAQAogCiAgICAgICAgIGlmICghc2l6ZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgX19hc21fXygiICAgbGdoaSAgJTEsLTFcbiIKLSAgICAgICAgICAgICAgICAiICAgbGdyICAgJTIsJTNcbiIKLSAgICAgICAgICAgICAgICAiICAgYWdoaSAgJTIsNjNcbiIKLSAgICAgICAgICAgICAgICAiICAgc3JsZyAgJTIsJTIsNlxuIgotICAgICAgICAgICAgICAgICIgICBzbGdyICAlMCwlMFxuIgotICAgICAgICAgICAgICAgICIwOiBjbGcgICAlMSwwKCUwLCU0KVxuIgotICAgICAgICAgICAgICAgICIgICBqbmUgICAxZlxuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCw4XG4iCi0gICAgICAgICAgICAgICAgIiAgIGJyY3QgICUyLDBiXG4iCi0gICAgICAgICAgICAgICAgIiAgIGxnciAgICUwLCUzXG4iCi0gICAgICAgICAgICAgICAgIiAgIGogICAgIDVmXG4iCi0gICAgICAgICAgICAgICAgIjE6IGNsICAgICUxLDAoJTAsJTQpXG4iCi0JCSIgICBqbmUgICAyZlxuIgotCQkiICAgYWdoaSAgJTAsNFxuIgotCQkiMjogbCAgICAgJTIsMCglMCwlNClcbiIKLSAgICAgICAgICAgICAgICAiICAgc2xsZyAgJTAsJTAsM1xuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwyNFxuIgotICAgICAgICAgICAgICAgICIgICBsZ2hpICAlMSwweGZmXG4iCi0gICAgICAgICAgICAgICAgIiAgIHRtbGggICUyLDB4ZmZmZlxuIgotICAgICAgICAgICAgICAgICIgICBqbyAgICAzZlxuIgotICAgICAgICAgICAgICAgICIgICBhZ2hpICAlMCwtMTZcbiIKLSAgICAgICAgICAgICAgICAiICAgc3JsICAgJTIsMTZcbiIKLSAgICAgICAgICAgICAgICAiMzogdG1sbCAgJTIsMHhmZjAwXG4iCi0gICAgICAgICAgICAgICAgIiAgIGpvICAgIDRmXG4iCi0gICAgICAgICAgICAgICAgIiAgIGFnaGkgICUwLC04XG4iCi0gICAgICAgICAgICAgICAgIiAgIHNybCAgICUyLDhcbiIKLSAgICAgICAgICAgICAgICAiNDogbmdyICAgJTIsJTFcbiIKLSAgICAgICAgICAgICAgICAiICAgaWMgICAgJTIsMCglMiwlNSlcbiIKLSAgICAgICAgICAgICAgICAiICAgYWxnciAgJTAsJTJcbiIKLSAgICAgICAgICAgICAgICAiNToiCi0gICAgICAgICAgICAgICAgOiAiPSZhIiAocmVzKSwgIj0mZCIgKGNtcCksICI9JmEiIChjb3VudCkKKwlhc20gdm9sYXRpbGUoCisJCSIJbGdoaQklMSwtMVxuIgorCQkiCWxncgklMiwlM1xuIgorCQkiCWFnaGkJJTIsNjNcbiIKKwkJIglzcmxnCSUyLCUyLDZcbiIKKwkJIglzbGdyCSUwLCUwXG4iCisJCSIwOgljbGcJJTEsMCglMCwlNClcbiIKKwkJIglqbmUJMWZcbiIKKwkJIglhZ2hpCSUwLDhcbiIKKwkJIglicmN0CSUyLDBiXG4iCisJCSIJbGdyCSUwLCUzXG4iCisJCSIJagk1ZlxuIgorCQkiMToJY2wJJTEsMCglMCwlNClcbiIKKwkJIglqbmUJMmZcbiIKKwkJIglhZ2hpCSUwLDRcbiIKKwkJIjI6CWwJJTIsMCglMCwlNClcbiIKKwkJIglzbGxnCSUwLCUwLDNcbiIKKwkJIglhZ2hpCSUwLDI0XG4iCisJCSIJbGdoaQklMSwweGZmXG4iCisJCSIJdG1saAklMiwweGZmZmZcbiIKKwkJIglqbwkzZlxuIgorCQkiCWFnaGkJJTAsLTE2XG4iCisJCSIJc3JsCSUyLDE2XG4iCisJCSIzOgl0bWxsCSUyLDB4ZmYwMFxuIgorCQkiCWpvCTRmXG4iCisJCSIJYWdoaQklMCwtOFxuIgorCQkiCXNybAklMiw4XG4iCisJCSI0OgluZ3IJJTIsJTFcbiIKKwkJIglpYwklMiwwKCUyLCU1KVxuIgorCQkiCWFsZ3IJJTAsJTJcbiIKKwkJIjU6IgorCQk6ICI9JmEiIChyZXMpLCAiPSZkIiAoY21wKSwgIj0mYSIgKGNvdW50KQogCQk6ICJhIiAoc2l6ZSksICJhIiAodmFkZHIpLCAiYSIgKCZfemJfZmluZG1hcCksCi0JCSAgIm0iICgqKGFkZHJ0eXBlICopIHZhZGRyKSA6ICJjYyIgKTsKKwkJICAibSIgKCooYWRkcnR5cGUgKikgdmFkZHIpIDogImNjIik7CiAgICAgICAgIHJldHVybiAocmVzIDwgc2l6ZSkgPyByZXMgOiBzaXplOwogfQogCkBAIC05MjcsMTMgKzg3NiwxNiBAQAogCXAgPSBhZGRyICsgb2Zmc2V0IC8gX19CSVRPUFNfV09SRFNJWkU7CiAgICAgICAgIGlmIChiaXQpIHsKICNpZm5kZWYgX19zMzkweF9fCi0gICAgICAgICAgICAgICAgYXNtKCIgICBpYyAgICUwLDAoJTEpXG4iCi0JCSAgICAiICAgaWNtICAlMCwyLDEoJTEpXG4iCi0JCSAgICAiICAgaWNtICAlMCw0LDIoJTEpXG4iCi0JCSAgICAiICAgaWNtICAlMCw4LDMoJTEpIgotCQkgICAgOiAiPSZhIiAod29yZCkgOiAiYSIgKHApLCAibSIgKCpwKSA6ICJjYyIgKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJIglpYwklMCwwKCUxKVxuIgorCQkJIglpY20JJTAsMiwxKCUxKVxuIgorCQkJIglpY20JJTAsNCwyKCUxKVxuIgorCQkJIglpY20JJTAsOCwzKCUxKSIKKwkJCTogIj0mYSIgKHdvcmQpIDogImEiIChwKSwgIm0iICgqcCkgOiAiY2MiKTsKICNlbHNlCi0gICAgICAgICAgICAgICAgYXNtKCIgICBscnZnICUwLCUxIiA6ICI9YSIgKHdvcmQpIDogIm0iICgqcCkgKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJIglscnZnCSUwLCUxIgorCQkJOiAiPWEiICh3b3JkKSA6ICJtIiAoKnApICk7CiAjZW5kaWYKIAkJLyoKIAkJICogczM5MCB2ZXJzaW9uIG9mIGZmeiByZXR1cm5zIF9fQklUT1BTX1dPUkRTSVpFCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2J5dGVvcmRlci5oIGIvaW5jbHVkZS9hc20tczM5MC9ieXRlb3JkZXIuaAppbmRleCAyY2MzNWEwLi4xZmUyNDkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2J5dGVvcmRlci5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvYnl0ZW9yZGVyLmgKQEAgLTE0LDYwICsxNCw1NCBAQAogI2lmZGVmIF9fR05VQ19fCiAKICNpZmRlZiBfX3MzOTB4X18KLXN0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fX2FyY2hfX3N3YWI2NHAoY29uc3QgX191NjQgKngpCitzdGF0aWMgaW5saW5lIF9fdTY0IF9fX2FyY2hfX3N3YWI2NHAoY29uc3QgX191NjQgKngpCiB7CiAJX191NjQgcmVzdWx0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgbHJ2ZyAlMCwlMSIKLQkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkgKTsKKwlhc20gdm9sYXRpbGUoImxydmcgJTAsJTEiIDogIj1kIiAocmVzdWx0KSA6ICJtIiAoKngpKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBfX3U2NCBfX19hcmNoX19zd2FiNjQoX191NjQgeCkKK3N0YXRpYyBpbmxpbmUgX191NjQgX19fYXJjaF9fc3dhYjY0KF9fdTY0IHgpCiB7CiAJX191NjQgcmVzdWx0OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgbHJ2Z3IgJTAsJTEiCi0JCTogIj1kIiAocmVzdWx0KSA6ICJkIiAoeCkgKTsKKwlhc20gdm9sYXRpbGUoImxydmdyICUwLCUxIiA6ICI9ZCIgKHJlc3VsdCkgOiAiZCIgKHgpKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fX2FyY2hfX3N3YWI2NHMoX191NjQgKngpCitzdGF0aWMgaW5saW5lIHZvaWQgX19fYXJjaF9fc3dhYjY0cyhfX3U2NCAqeCkKIHsKIAkqeCA9IF9fX2FyY2hfX3N3YWI2NHAoeCk7CiB9CiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKLXN0YXRpYyBfX2lubGluZV9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMnAoY29uc3QgX191MzIgKngpCitzdGF0aWMgaW5saW5lIF9fdTMyIF9fX2FyY2hfX3N3YWIzMnAoY29uc3QgX191MzIgKngpCiB7CiAJX191MzIgcmVzdWx0OwogCQotCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiICAgICAgICBpY20gICAlMCw4LDMoJTEpXG4iCi0JCSIgICAgICAgIGljbSAgICUwLDQsMiglMSlcbiIKLQkJIiAgICAgICAgaWNtICAgJTAsMiwxKCUxKVxuIgotCQkiICAgICAgICBpYyAgICAlMCwwKCUxKSIKLQkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIiApOworCQkiCWljbQklMCw4LDMoJTEpXG4iCisJCSIJaWNtCSUwLDQsMiglMSlcbiIKKwkJIglpY20JJTAsMiwxKCUxKVxuIgorCQkiCWljCSUwLDAoJTEpIgorCQk6ICI9JmQiIChyZXN1bHQpIDogImEiICh4KSwgIm0iICgqeCkgOiAiY2MiKTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiICAgbHJ2ICAlMCwlMSIKLQkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkgKTsKKwkJIglscnYJJTAsJTEiCisJCTogIj1kIiAocmVzdWx0KSA6ICJtIiAoKngpKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBfX3UzMiBfX19hcmNoX19zd2FiMzIoX191MzIgeCkKK3N0YXRpYyBpbmxpbmUgX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCiB7CiAjaWZuZGVmIF9fczM5MHhfXwogCXJldHVybiBfX19hcmNoX19zd2FiMzJwKCZ4KTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwogCV9fdTMyIHJlc3VsdDsKIAkKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0JCSIgICBscnZyICAlMCwlMSIKLQkJOiAiPWQiIChyZXN1bHQpIDogImQiICh4KSApOworCWFzbSB2b2xhdGlsZSgibHJ2ciAgJTAsJTEiIDogIj1kIiAocmVzdWx0KSA6ICJkIiAoeCkpOwogCXJldHVybiByZXN1bHQ7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiB9CkBAIC04MSwxNCArNzUsMTQgQEAKIHsKIAlfX3UxNiByZXN1bHQ7CiAJCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICAgICAgIGljbSAgICUwLDIsMSglMSlcbiIKLQkJIiAgICAgICAgaWMgICAgJTAsMCglMSlcbiIKLQkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIiApOworCQkiCWljbQklMCwyLDEoJTEpXG4iCisJCSIJaWMJJTAsMCglMSlcbiIKKwkJOiAiPSZkIiAocmVzdWx0KSA6ICJhIiAoeCksICJtIiAoKngpIDogImNjIik7CiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIiAgIGxydmggJTAsJTEiCi0JCTogIj1kIiAocmVzdWx0KSA6ICJtIiAoKngpICk7CisJCSIJbHJ2aAklMCwlMSIKKwkJOiAiPWQiIChyZXN1bHQpIDogIm0iICgqeCkpOwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCXJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2NoZWNrc3VtLmggYi9pbmNsdWRlL2FzbS1zMzkwL2NoZWNrc3VtLmgKaW5kZXggNDcxZjJhZi4uMzdjMzYyZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvY2hlY2tzdW0uaApAQCAtMzAsNTcgKzMwLDEzIEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogY3N1bV9wYXJ0aWFsKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWZmLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQogewotCS8qCi0JICogRXhwZXJpbWVudHMgd2l0aCBldGhlcm5ldCBhbmQgc2xpcCBjb25uZWN0aW9ucyBzaG93IHRoYXQgYnVmCi0JICogaXMgYWxpZ25lZCBvbiBlaXRoZXIgYSAyLWJ5dGUgb3IgNC1ieXRlIGJvdW5kYXJ5LgotCSAqLwotI2lmbmRlZiBfX3MzOTB4X18KLQlyZWdpc3Rlcl9wYWlyIHJwOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMiBhc20oIjIiKSA9ICh1bnNpZ25lZCBsb25nKSBidWZmOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMyBhc20oIjMiKSA9ICh1bnNpZ25lZCBsb25nKSBsZW47CiAKLQlycC5zdWJyZWcuZXZlbiA9ICh1bnNpZ25lZCBsb25nKSBidWZmOwotCXJwLnN1YnJlZy5vZGQgPSAodW5zaWduZWQgbG9uZykgbGVuOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIjA6ICBja3NtICUwLCUxXG4iCS8qIGRvIGNoZWNrc3VtIG9uIGxvbmdzICovCi0JCSIgICAgam8gICAwYlxuIgotCQk6ICIrJmQiIChzdW0pLCAiKyZhIiAocnApIDogOiAiY2MiLCAibWVtb3J5IiApOwotI2Vsc2UgLyogX19zMzkweF9fICovCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAiICAgIGxnciAgMiwlMVxuIiAgICAvKiBhZGRyZXNzIGluIGdwciAyICovCi0gICAgICAgICAgICAgICAgIiAgICBsZ2ZyIDMsJTJcbiIgICAgLyogbGVuZ3RoIGluIGdwciAzICovCi0gICAgICAgICAgICAgICAgIjA6ICBja3NtICUwLDJcbiIgICAgLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KLSAgICAgICAgICAgICAgICAiICAgIGpvICAgMGJcbiIKLSAgICAgICAgICAgICAgICA6ICIrJmQiIChzdW0pCi0gICAgICAgICAgICAgICAgOiAiZCIgKGJ1ZmYpLCAiZCIgKGxlbikKLSAgICAgICAgICAgICAgICA6ICJjYyIsICJtZW1vcnkiLCAiMiIsICIzIiApOwotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCXJldHVybiBzdW07Ci19Ci0KLS8qCi0gKiBjc3VtX3BhcnRpYWwgYXMgYW4gaW5saW5lIGZ1bmN0aW9uCi0gKi8KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IAotY3N1bV9wYXJ0aWFsX2lubGluZShjb25zdCB1bnNpZ25lZCBjaGFyICogYnVmZiwgaW50IGxlbiwgdW5zaWduZWQgaW50IHN1bSkKLXsKLSNpZm5kZWYgX19zMzkweF9fCi0JcmVnaXN0ZXJfcGFpciBycDsKLQotCXJwLnN1YnJlZy5ldmVuID0gKHVuc2lnbmVkIGxvbmcpIGJ1ZmY7Ci0JcnAuc3VicmVnLm9kZCA9ICh1bnNpZ25lZCBsb25nKSBsZW47Ci0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiMDogIGNrc20gJTAsJTFcbiIgICAgLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KLQkJIiAgICBqbyAgIDBiXG4iCi0gICAgICAgICAgICAgICAgOiAiKyZkIiAoc3VtKSwgIismYSIgKHJwKSA6IDogImNjIiwgIm1lbW9yeSIgKTsKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgICBsZ3IgIDIsJTFcbiIgICAgLyogYWRkcmVzcyBpbiBncHIgMiAqLwotCQkiICAgIGxnZnIgMywlMlxuIiAgICAvKiBsZW5ndGggaW4gZ3ByIDMgKi8KLQkJIjA6ICBja3NtICUwLDJcbiIgICAgLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KLQkJIiAgICBqbyAgIDBiXG4iCi0gICAgICAgICAgICAgICAgOiAiKyZkIiAoc3VtKQotCQk6ICJkIiAoYnVmZiksICJkIiAobGVuKQotICAgICAgICAgICAgICAgIDogImNjIiwgIm1lbW9yeSIsICIyIiwgIjMiICk7Ci0jZW5kaWYgLyogX19zMzkweF9fICovCisJYXNtIHZvbGF0aWxlKAorCQkiMDoJY2tzbQklMCwlMVxuIgkvKiBkbyBjaGVja3N1bSBvbiBsb25ncyAqLworCQkiCWpvCTBiXG4iCisJCTogIitkIiAoc3VtKSwgIitkIiAocmVnMiksICIrZCIgKHJlZzMpIDogOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIHN1bTsKIH0KIApAQCAtMTE0LDcgKzcwLDcgQEAKIGNzdW1fcGFydGlhbF9jb3B5X25vY2hlY2sgKGNvbnN0IGNoYXIgKnNyYywgY2hhciAqZHN0LCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgc3VtKQogewogICAgICAgICBtZW1jcHkoZHN0LHNyYyxsZW4pOwotICAgICAgICByZXR1cm4gY3N1bV9wYXJ0aWFsX2lubGluZShkc3QsIGxlbiwgc3VtKTsKKwlyZXR1cm4gY3N1bV9wYXJ0aWFsKGRzdCwgbGVuLCBzdW0pOwogfQogCiAvKgpAQCAtMTI2LDIyICs4MiwyMiBAQAogI2lmbmRlZiBfX3MzOTB4X18KIAlyZWdpc3Rlcl9wYWlyIHJwOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgIHNsciAgJU4xLCVOMVxuIiAvKiAlMCA9IEggTCAqLwotCQkiICAgIGxyICAgJTEsJTBcbiIgICAvKiAlMCA9IEggTCwgJTEgPSBIIEwgMCAwICovCi0JCSIgICAgc3JkbCAlMSwxNlxuIiAgIC8qICUwID0gSCBMLCAlMSA9IDAgSCBMIDAgKi8KLQkJIiAgICBhbHIgICUxLCVOMVxuIiAgLyogJTAgPSBIIEwsICUxID0gTCBIIEwgMCAqLwotCQkiICAgIGFsciAgJTAsJTFcbiIgICAvKiAlMCA9IEgrTCtDIEwrSCAqLwotCQkiICAgIHNybCAgJTAsMTZcbiIgICAvKiAlMCA9IEgrTCtDICovCi0JCTogIismZCIgKHN1bSksICI9ZCIgKHJwKSA6IDogImNjIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglzbHIJJU4xLCVOMVxuIgkvKiAlMCA9IEggTCAqLworCQkiCWxyCSUxLCUwXG4iCS8qICUwID0gSCBMLCAlMSA9IEggTCAwIDAgKi8KKwkJIglzcmRsCSUxLDE2XG4iCS8qICUwID0gSCBMLCAlMSA9IDAgSCBMIDAgKi8KKwkJIglhbHIJJTEsJU4xXG4iCS8qICUwID0gSCBMLCAlMSA9IEwgSCBMIDAgKi8KKwkJIglhbHIJJTAsJTFcbiIJLyogJTAgPSBIK0wrQyBMK0ggKi8KKwkJIglzcmwJJTAsMTZcbiIJLyogJTAgPSBIK0wrQyAqLworCQk6ICIrJmQiIChzdW0pLCAiPWQiIChycCkgOiA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgIHNyICAgMywzXG4iICAgLyogJTAgPSBIKjY1NTM2ICsgTCAqLwotCQkiICAgIGxyICAgMiwlMFxuIiAgLyogJTAgPSBIIEwsIFIyL1IzID0gSCBMIC8gMCAwICovCi0JCSIgICAgc3JkbCAyLDE2XG4iICAvKiAlMCA9IEggTCwgUjIvUjMgPSAwIEggLyBMIDAgKi8KLQkJIiAgICBhbHIgIDIsM1xuIiAgIC8qICUwID0gSCBMLCBSMi9SMyA9IEwgSCAvIEwgMCAqLwotCQkiICAgIGFsciAgJTAsMlxuIiAgLyogJTAgPSBIK0wrQyBMK0ggKi8KLSAgICAgICAgICAgICAgICAiICAgIHNybCAgJTAsMTZcbiIgLyogJTAgPSBIK0wrQyAqLworCWFzbSB2b2xhdGlsZSgKKwkJIglzcgkzLDNcbiIJCS8qICUwID0gSCo2NTUzNiArIEwgKi8KKwkJIglscgkyLCUwXG4iCQkvKiAlMCA9IEggTCwgMi8zID0gSCBMIC8gMCAwICovCisJCSIJc3JkbAkyLDE2XG4iCQkvKiAlMCA9IEggTCwgMi8zID0gMCBIIC8gTCAwICovCisJCSIJYWxyCTIsM1xuIgkJLyogJTAgPSBIIEwsIDIvMyA9IEwgSCAvIEwgMCAqLworCQkiCWFscgklMCwyXG4iCQkvKiAlMCA9IEgrTCtDIEwrSCAqLworCQkiCXNybAklMCwxNlxuIgkvKiAlMCA9IEgrTCtDICovCiAJCTogIismZCIgKHN1bSkgOiA6ICJjYyIsICIyIiwgIjMiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAlyZXR1cm4gKCh1bnNpZ25lZCBzaG9ydCkgfnN1bSk7CkBAIC0xNTUsMjkgKzExMSw3IEBACiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0CiBpcF9mYXN0X2NzdW0odW5zaWduZWQgY2hhciAqaXBoLCB1bnNpZ25lZCBpbnQgaWhsKQogewotCXVuc2lnbmVkIGxvbmcgc3VtOwotI2lmbmRlZiBfX3MzOTB4X18KLQlyZWdpc3Rlcl9wYWlyIHJwOwotCi0JcnAuc3VicmVnLmV2ZW4gPSAodW5zaWduZWQgbG9uZykgaXBoOwotCXJwLnN1YnJlZy5vZGQgPSAodW5zaWduZWQgbG9uZykgaWhsKjQ7Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgICBzciAgICUwLCUwXG4iICAgLyogc2V0IHN1bSB0byB6ZXJvICovCi0gICAgICAgICAgICAgICAgIjA6ICBja3NtICUwLCUxXG4iICAgLyogZG8gY2hlY2tzdW0gb24gbG9uZ3MgKi8KLSAgICAgICAgICAgICAgICAiICAgIGpvICAgMGJcbiIKLSAgICAgICAgICAgICAgICA6ICI9JmQiIChzdW0pLCAiKyZhIiAocnApIDogOiAiY2MiLCAibWVtb3J5IiApOwotI2Vsc2UgLyogX19zMzkweF9fICovCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJIiAgICBzbGdyICUwLCUwXG4iICAgLyogc2V0IHN1bSB0byB6ZXJvICovCi0gICAgICAgICAgICAgICAgIiAgICBsZ3IgIDIsJTFcbiIgICAgLyogYWRkcmVzcyBpbiBncHIgMiAqLwotICAgICAgICAgICAgICAgICIgICAgbGdmciAzLCUyXG4iICAgIC8qIGxlbmd0aCBpbiBncHIgMyAqLwotICAgICAgICAgICAgICAgICIwOiAgY2tzbSAlMCwyXG4iICAgIC8qIGRvIGNoZWNrc3VtIG9uIGludHMgKi8KLSAgICAgICAgICAgICAgICAiICAgIGpvICAgMGJcbiIKLSAgICAgICAgICAgICAgICA6ICI9JmQiIChzdW0pCi0gICAgICAgICAgICAgICAgOiAiZCIgKGlwaCksICJkIiAoaWhsKjQpCi0gICAgICAgICAgICAgICAgOiAiY2MiLCAibWVtb3J5IiwgIjIiLCAiMyIgKTsKLSNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLSAgICAgICAgcmV0dXJuIGNzdW1fZm9sZChzdW0pOworCXJldHVybiBjc3VtX2ZvbGQoY3N1bV9wYXJ0aWFsKGlwaCwgaWhsKjQsIDApKTsKIH0KIAogLyoKQEAgLTE5MCw0NyArMTI0LDQ3IEBACiAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHN1bSkKIHsKICNpZm5kZWYgX19zMzkweF9fCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotICAgICAgICAgICAgICAgICIgICAgYWxyICAgJTAsJTFcbiIgIC8qIHN1bSArPSBzYWRkciAqLwotICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsMGZcbiIKLQkJIiAgICBhaGkgICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCisJYXNtIHZvbGF0aWxlKAorCQkiCWFscgklMCwlMVxuIiAvKiBzdW0gKz0gc2FkZHIgKi8KKwkJIglicmMJMTIsMGZcbiIKKwkJIglhaGkJJTAsMVxuIiAgLyogYWRkIGNhcnJ5ICovCiAJCSIwOiIKLQkJOiAiKyZkIiAoc3VtKSA6ICJkIiAoc2FkZHIpIDogImNjIiApOwotCV9fYXNtX18gX192b2xhdGlsZV9fICgKLSAgICAgICAgICAgICAgICAiICAgIGFsciAgICUwLCUxXG4iICAvKiBzdW0gKz0gZGFkZHIgKi8KLSAgICAgICAgICAgICAgICAiICAgIGJyYyAgIDEyLDFmXG4iCi0gICAgICAgICAgICAgICAgIiAgICBhaGkgICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCisJCTogIismZCIgKHN1bSkgOiAiZCIgKHNhZGRyKSA6ICJjYyIpOworCWFzbSB2b2xhdGlsZSgKKwkJIglhbHIJJTAsJTFcbiIgLyogc3VtICs9IGRhZGRyICovCisJCSIJYnJjCTEyLDFmXG4iCisJCSIJYWhpCSUwLDFcbiIgIC8qIGFkZCBjYXJyeSAqLwogCQkiMToiCi0JCTogIismZCIgKHN1bSkgOiAiZCIgKGRhZGRyKSA6ICJjYyIgKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgIiAgICBhbHIgICAlMCwlMVxuIiAgLyogc3VtICs9IChsZW48PDE2KSArIChwcm90bzw8OCkgKi8KLQkJIiAgICBicmMgICAxMiwyZlxuIgotCQkiICAgIGFoaSAgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJOiAiKyZkIiAoc3VtKSA6ICJkIiAoZGFkZHIpIDogImNjIik7CisJYXNtIHZvbGF0aWxlKAorCQkiCWFscgklMCwlMVxuIiAvKiBzdW0gKz0gKGxlbjw8MTYpICsgKHByb3RvPDw4KSAqLworCQkiCWJyYwkxMiwyZlxuIgorCQkiCWFoaQklMCwxXG4iICAvKiBhZGQgY2FycnkgKi8KIAkJIjI6IgogCQk6ICIrJmQiIChzdW0pCiAJCTogImQiICgoKHVuc2lnbmVkIGludCkgbGVuPDwxNikgKyAodW5zaWduZWQgaW50KSBwcm90bykKLQkJOiAiY2MiICk7CisJCTogImNjIik7CiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCi0gICAgICAgICAgICAgICAgIiAgICBsZ2ZyICAlMCwlMFxuIgotICAgICAgICAgICAgICAgICIgICAgYWxnciAgJTAsJTFcbiIgIC8qIHN1bSArPSBzYWRkciAqLwotICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsMGZcbiIKLQkJIiAgICBhZ2hpICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCi0JCSIwOiAgYWxnciAgJTAsJTJcbiIgIC8qIHN1bSArPSBkYWRkciAqLwotICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsMWZcbiIKLSAgICAgICAgICAgICAgICAiICAgIGFnaGkgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KLQkJIjE6ICBhbGdmciAlMCwlM1xuIiAgLyogc3VtICs9IChsZW48PDE2KSArIHByb3RvICovCi0JCSIgICAgYnJjICAgMTIsMmZcbiIKLQkJIiAgICBhZ2hpICAlMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCi0JCSIyOiAgc3JsZyAgMCwlMCwzMlxuIgotICAgICAgICAgICAgICAgICIgICAgYWxyICAgJTAsMFxuIiAgIC8qIGZvbGQgdG8gMzIgYml0cyAqLwotICAgICAgICAgICAgICAgICIgICAgYnJjICAgMTIsM2ZcbiIKLSAgICAgICAgICAgICAgICAiICAgIGFoaSAgICUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KLSAgICAgICAgICAgICAgICAiMzogIGxsZ2ZyICUwLCUwIgorCWFzbSB2b2xhdGlsZSgKKwkJIglsZ2ZyCSUwLCUwXG4iCisJCSIJYWxncgklMCwlMVxuIiAgLyogc3VtICs9IHNhZGRyICovCisJCSIJYnJjCTEyLDBmXG4iCisJCSIJYWdoaQklMCwxXG4iICAgLyogYWRkIGNhcnJ5ICovCisJCSIwOglhbGdyCSUwLCUyXG4iICAvKiBzdW0gKz0gZGFkZHIgKi8KKwkJIglicmMJMTIsMWZcbiIKKwkJIglhZ2hpCSUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJIjE6CWFsZ2ZyCSUwLCUzXG4iICAvKiBzdW0gKz0gKGxlbjw8MTYpICsgcHJvdG8gKi8KKwkJIglicmMJMTIsMmZcbiIKKwkJIglhZ2hpCSUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJIjI6CXNybGcJMCwlMCwzMlxuIgorCQkiCWFscgklMCwwXG4iICAgLyogZm9sZCB0byAzMiBiaXRzICovCisJCSIJYnJjCTEyLDNmXG4iCisJCSIJYWhpCSUwLDFcbiIgICAvKiBhZGQgY2FycnkgKi8KKwkJIjM6CWxsZ2ZyCSUwLCUwIgogCQk6ICIrJmQiIChzdW0pCiAJCTogImQiIChzYWRkciksICJkIiAoZGFkZHIpLAogCQkgICJkIiAoKCh1bnNpZ25lZCBpbnQpIGxlbjw8MTYpICsgKHVuc2lnbmVkIGludCkgcHJvdG8pCi0JCTogImNjIiwgIjAiICk7CisJCTogImNjIiwgIjAiKTsKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIAlyZXR1cm4gc3VtOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9kaXY2NC5oIGIvaW5jbHVkZS9hc20tczM5MC9kaXY2NC5oCmluZGV4IGFmMDk4ZGMuLjZjZDk3OGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvZGl2NjQuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2RpdjY0LmgKQEAgLTEsNDkgKzEgQEAKLSNpZm5kZWYgX19TMzkwX0RJVjY0Ci0jZGVmaW5lIF9fUzM5MF9ESVY2NAotCi0jaWZuZGVmIF9fczM5MHhfXwotCi0vKiBmb3IgZG9fZGl2ICJiYXNlIiBuZWVkcyB0byBiZSBzbWFsbGVyIHRoYW4gMl4zMS0xICovCi0jZGVmaW5lIGRvX2RpdihuLCBiYXNlKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXVuc2lnbmVkIGxvbmcgbG9uZyBfX24gPSAobik7CQkJCVwKLQl1bnNpZ25lZCBsb25nIF9fcjsJCQkJCVwKLQkJCQkJCQkJXAotCWFzbSAoIiAgIHNsciAgMCwwXG4iCQkJCQlcCi0JICAgICAiICAgbCAgICAxLCUxXG4iCQkJCQlcCi0JICAgICAiICAgc3JkbCAwLDFcbiIJCQkJCVwKLQkgICAgICIgICBkciAgIDAsJTJcbiIJCQkJCVwKLQkgICAgICIgICBhbHIgIDEsMVxuIgkJCQkJXAotCSAgICAgIiAgIGFsciAgMCwwXG4iCQkJCQlcCi0JICAgICAiICAgbGhpICAyLDFcbiIJCQkJCVwKLQkgICAgICIgICBuICAgIDIsJTFcbiIJCQkJCVwKLQkgICAgICIgICBhbHIgIDAsMlxuIgkJCQkJXAotCSAgICAgIiAgIGNsciAgMCwlMlxuIgkJCQkJXAotCSAgICAgIiAgIGpsICAgMGZcbiIJCQkJCVwKLQkgICAgICIgICBzbHIgIDAsJTJcbiIJCQkJCVwKLSAgICAgICAgICAgICAiICAgYWhpICAxLDFcbiIJCQkJCVwKLQkgICAgICIwOiBzdCAgIDEsJTFcbiIJCQkJCVwKLQkgICAgICIgICBsICAgIDEsNCslMVxuIgkJCQkJXAotCSAgICAgIiAgIHNyZGwgMCwxXG4iCQkJCQlcCi0gICAgICAgICAgICAgIiAgIGRyICAgMCwlMlxuIgkJCQkJXAotCSAgICAgIiAgIGFsciAgMSwxXG4iCQkJCQlcCi0JICAgICAiICAgYWxyICAwLDBcbiIJCQkJCVwKLQkgICAgICIgICBsaGkgIDIsMVxuIgkJCQkJXAotCSAgICAgIiAgIG4gICAgMiw0KyUxXG4iCQkJCQlcCi0JICAgICAiICAgYWxyICAwLDJcbiIJCQkJCVwKLQkgICAgICIgICBjbHIgIDAsJTJcbiIJCQkJCVwKLSAgICAgICAgICAgICAiICAgamwgICAxZlxuIgkJCQkJXAotCSAgICAgIiAgIHNsciAgMCwlMlxuIgkJCQkJXAotCSAgICAgIiAgIGFoaSAgMSwxXG4iCQkJCQlcCi0JICAgICAiMTogc3QgICAxLDQrJTFcbiIJCQkJCVwKLSAgICAgICAgICAgICAiICAgbHIgICAlMCwwIgkJCQkJXAotCSAgICAgOiAiPWQiIChfX3IpLCAiPW0iIChfX24pCQkJCVwKLQkgICAgIDogImQiIChiYXNlKSwgIm0iIChfX24pIDogIjAiLCAiMSIsICIyIiwgImNjIiApOwlcCi0JKG4pID0gKF9fbik7CQkJCQkJXAotICAgICAgICBfX3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCi0KLSNlbHNlIC8qIF9fczM5MHhfXyAqLwogI2luY2x1ZGUgPGFzbS1nZW5lcmljL2RpdjY0Lmg+Ci0jZW5kaWYgLyogX19zMzkweF9fICovCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaCBiL2luY2x1ZGUvYXNtLXMzOTAvZWJjZGljLmgKaW5kZXggMTVmZDJlZC4uN2Y2ZjY0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9lYmNkaWMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL2ViY2RpYy5oCkBAIC0yNiwxNiArMjYsMTYgQEAKIHsKIAlpZiAobnItLSA8PSAwKQogCQlyZXR1cm47Ci0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAotCQkiICAgYnJhcyAxLDFmXG4iCi0JCSIgICB0ciAgIDAoMSwlMCksMCglMilcbiIKLSAgICAgICAgICAgICAgICAiMDogdHIgICAwKDI1NiwlMCksMCglMilcbiIKLQkJIiAgIGxhICAgJTAsMjU2KCUwKVxuIgotCQkiMTogYWhpICAlMSwtMjU2XG4iCi0JCSIgICBqbm0gIDBiXG4iCi0JCSIgICBleCAgICUxLDAoMSkiCi0gICAgICAgICAgICAgICAgOiAiKyZhIiAoYWRkciksICIrJmEiIChucikKLSAgICAgICAgICAgICAgICA6ICJhIiAoY29kZXBhZ2UpIDogImNjIiwgIm1lbW9yeSIsICIxIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglicmFzCTEsMWZcbiIKKwkJIgl0cgkwKDEsJTApLDAoJTIpXG4iCisJCSIwOgl0cgkwKDI1NiwlMCksMCglMilcbiIKKwkJIglsYQklMCwyNTYoJTApXG4iCisJCSIxOglhaGkJJTEsLTI1NlxuIgorCQkiCWpubQkwYlxuIgorCQkiCWV4CSUxLDAoMSkiCisJCTogIismYSIgKGFkZHIpLCAiKyZhIiAobnIpCisJCTogImEiIChjb2RlcGFnZSkgOiAiY2MiLCAibWVtb3J5IiwgIjEiKTsKIH0KIAogI2RlZmluZSBBU0NFQkMoYWRkcixucikgY29kZXBhZ2VfY29udmVydChfYXNjZWJjLCBhZGRyLCBucikKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvaW8uaCBiL2luY2x1ZGUvYXNtLXMzOTAvaW8uaAppbmRleCBhNmNjMjdlLi42M2M3OGI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9pby5oCkBAIC0yNywxOCArMjcsMTYgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB2aXJ0X3RvX3BoeXModm9sYXRpbGUgdm9pZCAqIGFkZHJlc3MpCiB7CiAJdW5zaWduZWQgbG9uZyByZWFsX2FkZHJlc3M7Ci0JX19hc21fXyAoCisJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJICIgICBscmEgICAgJTAsMCglMSlcbiIKLSAgICAgICAgICAgICAgICAgIiAgIGp6ICAgICAwZlxuIgotICAgICAgICAgICAgICAgICAiICAgc3IgICAgICUwLCUwXG4iCisJCSAiCWxyYQklMCwwKCUxKVxuIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSAiICAgbHJhZyAgICUwLDAoJTEpXG4iCi0gICAgICAgICAgICAgICAgICIgICBqeiAgICAgMGZcbiIKLSAgICAgICAgICAgICAgICAgIiAgIHNsZ3IgICAlMCwlMFxuIgorCQkgIglscmFnCSUwLDAoJTEpXG4iCiAjZW5kaWYgLyogX19zMzkweF9fICovCisJCSAiCWp6CTBmXG4iCisJCSAiCWxhCSUwLDBcbiIKICAgICAgICAgICAgICAgICAgIjA6IgotICAgICAgICAgICAgICAgICA6ICI9YSIgKHJlYWxfYWRkcmVzcykgOiAiYSIgKGFkZHJlc3MpIDogImNjIiApOworCQkgOiAiPWEiIChyZWFsX2FkZHJlc3MpIDogImEiIChhZGRyZXNzKSA6ICJjYyIpOwogICAgICAgICByZXR1cm4gcmVhbF9hZGRyZXNzOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2lycS5oIGIvaW5jbHVkZS9hc20tczM5MC9pcnEuaAppbmRleCBiZDFhNzIxLi43ZGE5OTFhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL2lycS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaXJxLmgKQEAgLTE5LDggKzE5LDUgQEAKIAlOUl9JUlFTLAogfTsKIAotI2RlZmluZSB0b3VjaF9ubWlfd2F0Y2hkb2coKSBkbyB7IH0gd2hpbGUoMCkKLQogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2lycWZsYWdzLmggYi9pbmNsdWRlL2FzbS1zMzkwL2lycWZsYWdzLmgKaW5kZXggM2I1NjZhNS4uM2YyNjEzMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9pcnFmbGFncy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvaXJxZmxhZ3MuaApAQCAtMTAsNDMgKzEwLDkzIEBACiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLS8qIGludGVycnVwdCBjb250cm9sLi4gKi8KLSNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKSAoeyBcCi0JdW5zaWduZWQgbG9uZyAgX19kdW1teTsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICggXAotCQkic3Rvc20gMCglMSksMHgwMyIgXAotCQk6ICI9bSIgKF9fZHVtbXkpIDogImEiICgmX19kdW1teSkgOiAibWVtb3J5IiApOyBcCi0JfSkKKyNpZiBfX0dOVUNfXyA+IDMgfHwgKF9fR05VQ19fID09IDMgJiYgX19HTlVDX01JTk9SX18gPiAyKQogCi0jZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpICh7IFwKLQl1bnNpZ25lZCBsb25nIF9fZmxhZ3M7IFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIFwKLQkJInN0bnNtIDAoJTEpLDB4ZmMiIDogIj1tIiAoX19mbGFncykgOiAiYSIgKCZfX2ZsYWdzKSApOyBcCi0JX19mbGFnczsgXAotCX0pCi0KLSNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCQkJXAotZG8gewkJCQkJCQkJCQlcCi0JdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIHgpOwkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3Rvc20gMCglMSksMCIgOiAiPW0iICh4KSA6ICJhIiAoJngpLCAibSIgKHgpICk7CVwKLX0gd2hpbGUgKDApCi0KLSNkZWZpbmUgcmF3X2xvY2FsX2lycV9yZXN0b3JlKHgpCQkJCQkJXAotZG8gewkJCQkJCQkJCQlcCi0JdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIHgpOwkJCQkJCVwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygic3NtICAgMCglMCkiIDogOiAiYSIgKCZ4KSwgIm0iICh4KSA6ICJtZW1vcnkiKTsJXAotfSB3aGlsZSAoMCkKLQotI2RlZmluZSByYXdfaXJxc19kaXNhYmxlZCgpCQlcCi0oewkJCQkJXAotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CQlcCi0JcmF3X2xvY2FsX3NhdmVfZmxhZ3MoZmxhZ3MpOwlcCi0JISgoZmxhZ3MgPj4gX19GTEFHX1NISUZUKSAmIDMpOwlcCisvKiBzdG9yZSB0aGVuIG9yIHN5c3RlbSBtYXNrLiAqLworI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Rvc20oX19vcikJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX19tYXNrOwkJCQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJIglzdG9zbQklMCwlMSIJCQkJCVwKKwkJOiAiPVEiIChfX21hc2spIDogImkiIChfX29yKSA6ICJtZW1vcnkiKTsJCVwKKwlfX21hc2s7CQkJCQkJCQlcCiB9KQogCisvKiBzdG9yZSB0aGVuIGFuZCBzeXN0ZW0gbWFzay4gKi8KKyNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3N0bnNtKF9fYW5kKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAorCQkiCXN0bnNtCSUwLCUxIgkJCQkJXAorCQk6ICI9USIgKF9fbWFzaykgOiAiaSIgKF9fYW5kKSA6ICJtZW1vcnkiKTsJCVwKKwlfX21hc2s7CQkJCQkJCQlcCit9KQorCisvKiBzZXQgc3lzdGVtIG1hc2suICovCisjZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zc20oX19tYXNrKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJYXNtIHZvbGF0aWxlKCJzc20gICAlMCIgOiA6ICJRIiAoX19tYXNrKSA6ICJtZW1vcnkiKTsJCVwKK30pCisKKyNlbHNlIC8qIF9fR05VQ19fICovCisKKy8qIHN0b3JlIHRoZW4gb3Igc3lzdGVtIG1hc2suICovCisjZGVmaW5lIF9fcmF3X2xvY2FsX2lycV9zdG9zbShfX29yKQkJCQkJXAorKHsJCQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX21hc2s7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQkJXAorCQkiCXN0b3NtCTAoJTEpLCUyIgkJCQlcCisJCTogIj1tIiAoX19tYXNrKQkJCQkJCVwKKwkJOiAiYSIgKCZfX21hc2spLCAiaSIgKF9fb3IpIDogIm1lbW9yeSIpOwkJXAorCV9fbWFzazsJCQkJCQkJCVwKK30pCisKKy8qIHN0b3JlIHRoZW4gYW5kIHN5c3RlbSBtYXNrLiAqLworI2RlZmluZSBfX3Jhd19sb2NhbF9pcnFfc3Ruc20oX19hbmQpCQkJCQlcCisoewkJCQkJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fbWFzazsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCQlcCisJCSIJc3Ruc20JMCglMSksJTIiCQkJCVwKKwkJOiAiPW0iIChfX21hc2spCQkJCQkJXAorCQk6ICJhIiAoJl9fbWFzayksICJpIiAoX19hbmQpIDogIm1lbW9yeSIpOwkJXAorCV9fbWFzazsJCQkJCQkJCVwKK30pCisKKy8qIHNldCBzeXN0ZW0gbWFzay4gKi8KKyNkZWZpbmUgX19yYXdfbG9jYWxfaXJxX3NzbShfX21hc2spCQkJCQlcCisoewkJCQkJCQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJCVwKKwkJIglzc20JMCglMCkiCQkJCQlcCisJCTogOiAiYSIgKCZfX21hc2spLCAibSIgKF9fbWFzaykgOiAibWVtb3J5Iik7CQlcCit9KQorCisjZW5kaWYgLyogX19HTlVDX18gKi8KKworLyogaW50ZXJydXB0IGNvbnRyb2wuLiAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJhd19sb2NhbF9pcnFfZW5hYmxlKHZvaWQpCit7CisJcmV0dXJuIF9fcmF3X2xvY2FsX2lycV9zdG9zbSgweDAzKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHJhd19sb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQoreworCXJldHVybiBfX3Jhd19sb2NhbF9pcnFfc3Ruc20oMHhmYyk7Cit9CisKKyNkZWZpbmUgcmF3X2xvY2FsX3NhdmVfZmxhZ3MoeCkJCQkJCQlcCitkbyB7CQkJCQkJCQkJXAorCXR5cGVjaGVjayh1bnNpZ25lZCBsb25nLCB4KTsJCQkJCVwKKwkoeCkgPSBfX3Jhd19sb2NhbF9pcnFfc3Rvc20oMHgwMCk7CQkJCVwKK30gd2hpbGUgKDApCisKK3N0YXRpYyBpbmxpbmUgdm9pZCByYXdfbG9jYWxfaXJxX3Jlc3RvcmUodW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlfX3Jhd19sb2NhbF9pcnFfc3NtKGZsYWdzKTsKK30KKwogc3RhdGljIGlubGluZSBpbnQgcmF3X2lycXNfZGlzYWJsZWRfZmxhZ3ModW5zaWduZWQgbG9uZyBmbGFncykKIHsKLQlyZXR1cm4gISgoZmxhZ3MgPj4gX19GTEFHX1NISUZUKSAmIDMpOworCXJldHVybiAhKGZsYWdzICYgKDNVTCA8PCAoQklUU19QRVJfTE9ORyAtIDgpKSk7CiB9CiAKIC8qIEZvciBzcGlubG9ja3MgZXRjICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL2xvd2NvcmUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCmluZGV4IDE4Njk1ZDEuLjA2NTgzZWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvbG93Y29yZS5oCkBAIC0zNTksNyArMzU5LDcgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIHNldF9wcmVmaXgoX191MzIgYWRkcmVzcykKIHsKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzcHggJTAiIDogOiAibSIgKGFkZHJlc3MpIDogIm1lbW9yeSIgKTsKKwlhc20gdm9sYXRpbGUoInNweCAlMCIgOiA6ICJtIiAoYWRkcmVzcykgOiAibWVtb3J5Iik7CiB9CiAKICNkZWZpbmUgX19QQU5JQ19NQUdJQyAgICAgICAgICAgMHhERUFEQzBERQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wYWdlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAppbmRleCBiMjYyOGRjLi43OTZjNDAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BhZ2UuaApAQCAtMjIsODkgKzIyLDQ1IEBACiAjaW5jbHVkZSA8YXNtL3NldHVwLmg+CiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCi0jaWZuZGVmIF9fczM5MHhfXwotCiBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfcGFnZSh2b2lkICpwYWdlKQogewotCXJlZ2lzdGVyX3BhaXIgcnA7Ci0KLQlycC5zdWJyZWcuZXZlbiA9ICh1bnNpZ25lZCBsb25nKSBwYWdlOwotCXJwLnN1YnJlZy5vZGQgPSAodW5zaWduZWQgbG9uZykgNDA5NjsKLSAgICAgICAgYXNtIHZvbGF0aWxlICgiICAgc2xyICAxLDFcbiIKLQkJICAgICAgIiAgIG12Y2wgJTAsMCIKLQkJICAgICAgOiAiKyZhIiAocnApIDogOiAibWVtb3J5IiwgImNjIiwgIjEiICk7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWcxIGFzbSAoIjEiKSA9IDA7CisJcmVnaXN0ZXIgdm9pZCAqcmVnMiBhc20gKCIyIikgPSBwYWdlOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMyBhc20gKCIzIikgPSA0MDk2OworCWFzbSB2b2xhdGlsZSgKKwkJIgltdmNsCTIsMCIKKwkJOiAiK2QiIChyZWcyKSwgIitkIiAocmVnMykgOiAiZCIgKHJlZzEpIDogIm1lbW9yeSIsICJjYyIpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgY29weV9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tKQogewotICAgICAgICBpZiAoTUFDSElORV9IQVNfTVZQRykKLQkJYXNtIHZvbGF0aWxlICgiICAgc3IgICAwLDBcbiIKLQkJCSAgICAgICIgICBtdnBnICUwLCUxIgotCQkJICAgICAgOiA6ICJhIiAoKHZvaWQgKikodG8pKSwgImEiICgodm9pZCAqKShmcm9tKSkKLQkJCSAgICAgIDogIm1lbW9yeSIsICJjYyIsICIwIiApOwotCWVsc2UKLQkJYXNtIHZvbGF0aWxlICgiICAgbXZjICAwKDI1NiwlMCksMCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDI1NigyNTYsJTApLDI1NiglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDUxMigyNTYsJTApLDUxMiglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDc2OCgyNTYsJTApLDc2OCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDEwMjQoMjU2LCUwKSwxMDI0KCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMTI4MCgyNTYsJTApLDEyODAoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAxNTM2KDI1NiwlMCksMTUzNiglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDE3OTIoMjU2LCUwKSwxNzkyKCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMjA0OCgyNTYsJTApLDIwNDgoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAyMzA0KDI1NiwlMCksMjMwNCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDI1NjAoMjU2LCUwKSwyNTYwKCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMjgxNigyNTYsJTApLDI4MTYoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAzMDcyKDI1NiwlMCksMzA3MiglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDMzMjgoMjU2LCUwKSwzMzI4KCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMzU4NCgyNTYsJTApLDM1ODQoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAzODQwKDI1NiwlMCksMzg0MCglMSlcbiIKLQkJCSAgICAgIDogOiAiYSIoKHZvaWQgKikodG8pKSwiYSIoKHZvaWQgKikoZnJvbSkpIAotCQkJICAgICAgOiAibWVtb3J5IiApOworCWlmIChNQUNISU5FX0hBU19NVlBHKSB7CisJCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMCBhc20gKCIwIikgPSAwOworCQlhc20gdm9sYXRpbGUoCisJCQkiCW12cGcJJTAsJTEiCisJCQk6IDogImEiICh0byksICJhIiAoZnJvbSksICJkIiAocmVnMCkKKwkJCTogIm1lbW9yeSIsICJjYyIpOworCX0gZWxzZQorCQlhc20gdm9sYXRpbGUoCisJCQkiCW12YwkwKDI1NiwlMCksMCglMSlcbiIKKwkJCSIJbXZjCTI1NigyNTYsJTApLDI1NiglMSlcbiIKKwkJCSIJbXZjCTUxMigyNTYsJTApLDUxMiglMSlcbiIKKwkJCSIJbXZjCTc2OCgyNTYsJTApLDc2OCglMSlcbiIKKwkJCSIJbXZjCTEwMjQoMjU2LCUwKSwxMDI0KCUxKVxuIgorCQkJIgltdmMJMTI4MCgyNTYsJTApLDEyODAoJTEpXG4iCisJCQkiCW12YwkxNTM2KDI1NiwlMCksMTUzNiglMSlcbiIKKwkJCSIJbXZjCTE3OTIoMjU2LCUwKSwxNzkyKCUxKVxuIgorCQkJIgltdmMJMjA0OCgyNTYsJTApLDIwNDgoJTEpXG4iCisJCQkiCW12YwkyMzA0KDI1NiwlMCksMjMwNCglMSlcbiIKKwkJCSIJbXZjCTI1NjAoMjU2LCUwKSwyNTYwKCUxKVxuIgorCQkJIgltdmMJMjgxNigyNTYsJTApLDI4MTYoJTEpXG4iCisJCQkiCW12YwkzMDcyKDI1NiwlMCksMzA3MiglMSlcbiIKKwkJCSIJbXZjCTMzMjgoMjU2LCUwKSwzMzI4KCUxKVxuIgorCQkJIgltdmMJMzU4NCgyNTYsJTApLDM1ODQoJTEpXG4iCisJCQkiCW12YwkzODQwKDI1NiwlMCksMzg0MCglMSlcbiIKKwkJCTogOiAiYSIgKHRvKSwgImEiIChmcm9tKSA6ICJtZW1vcnkiKTsKIH0KIAotI2Vsc2UgLyogX19zMzkweF9fICovCi0KLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9wYWdlKHZvaWQgKnBhZ2UpCi17Ci0gICAgICAgIGFzbSB2b2xhdGlsZSAoIiAgIGxnciAgMiwlMFxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICBsZ2hpIDMsNDA5NlxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICBzbGdyIDEsMVxuIgotICAgICAgICAgICAgICAgICAgICAgICIgICBtdmNsIDIsMCIKLSAgICAgICAgICAgICAgICAgICAgICA6IDogImEiICgodm9pZCAqKSAocGFnZSkpCi0JCSAgICAgIDogIm1lbW9yeSIsICJjYyIsICIxIiwgIjIiLCAiMyIgKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGNvcHlfcGFnZSh2b2lkICp0bywgdm9pZCAqZnJvbSkKLXsKLSAgICAgICAgaWYgKE1BQ0hJTkVfSEFTX01WUEcpCi0JCWFzbSB2b2xhdGlsZSAoIiAgIHNnciAgMCwwXG4iCi0JCQkgICAgICAiICAgbXZwZyAlMCwlMSIKLQkJCSAgICAgIDogOiAiYSIgKCh2b2lkICopKHRvKSksICJhIiAoKHZvaWQgKikoZnJvbSkpCi0JCQkgICAgICA6ICJtZW1vcnkiLCAiY2MiLCAiMCIgKTsKLQllbHNlCi0JCWFzbSB2b2xhdGlsZSAoIiAgIG12YyAgMCgyNTYsJTApLDAoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAyNTYoMjU2LCUwKSwyNTYoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICA1MTIoMjU2LCUwKSw1MTIoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICA3NjgoMjU2LCUwKSw3NjgoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAxMDI0KDI1NiwlMCksMTAyNCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDEyODAoMjU2LCUwKSwxMjgwKCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMTUzNigyNTYsJTApLDE1MzYoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAxNzkyKDI1NiwlMCksMTc5MiglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDIwNDgoMjU2LCUwKSwyMDQ4KCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMjMwNCgyNTYsJTApLDIzMDQoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAyNTYwKDI1NiwlMCksMjU2MCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDI4MTYoMjU2LCUwKSwyODE2KCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMzA3MigyNTYsJTApLDMwNzIoJTEpXG4iCi0JCQkgICAgICAiICAgbXZjICAzMzI4KDI1NiwlMCksMzMyOCglMSlcbiIKLQkJCSAgICAgICIgICBtdmMgIDM1ODQoMjU2LCUwKSwzNTg0KCUxKVxuIgotCQkJICAgICAgIiAgIG12YyAgMzg0MCgyNTYsJTApLDM4NDAoJTEpXG4iCi0JCQkgICAgICA6IDogImEiKCh2b2lkICopKHRvKSksImEiKCh2b2lkICopKGZyb20pKSAKLQkJCSAgICAgIDogIm1lbW9yeSIgKTsKLX0KLQotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCiAjZGVmaW5lIGNsZWFyX3VzZXJfcGFnZShwYWdlLCB2YWRkciwgcGcpCWNsZWFyX3BhZ2UocGFnZSkKICNkZWZpbmUgY29weV91c2VyX3BhZ2UodG8sIGZyb20sIHZhZGRyLCBwZykJY29weV9wYWdlKHRvLCBmcm9tKQogCkBAIC0xNTksNyArMTE1LDcgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZAogcGFnZV9zZXRfc3RvcmFnZV9rZXkodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBpbnQgc2tleSkKIHsKLQlhc20gdm9sYXRpbGUgKCAic3NrZSAlMCwlMSIgOiA6ICJkIiAoc2tleSksICJhIiAoYWRkcikgKTsKKwlhc20gdm9sYXRpbGUoInNza2UgJTAsJTEiIDogOiAiZCIgKHNrZXkpLCAiYSIgKGFkZHIpKTsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKQEAgLTE2Nyw4ICsxMjMsNyBAQAogewogCXVuc2lnbmVkIGludCBza2V5OwogCi0JYXNtIHZvbGF0aWxlICggImlza2UgJTAsJTEiIDogIj1kIiAoc2tleSkgOiAiYSIgKGFkZHIpLCAiMCIgKDApICk7Ci0KKwlhc20gdm9sYXRpbGUoImlza2UgJTAsJTEiIDogIj1kIiAoc2tleSkgOiAiYSIgKGFkZHIpLCAiMCIgKDApKTsKIAlyZXR1cm4gc2tleTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAppbmRleCBlOTY1MzA5Li5lY2RmZjEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3BndGFibGUuaApAQCAtMzEsOSArMzEsOSBAQAogICogdGhlIFMzOTAgcGFnZSB0YWJsZSB0cmVlLgogICovCiAjaWZuZGVmIF9fQVNTRU1CTFlfXworI2luY2x1ZGUgPGxpbnV4L21tX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL2J1Zy5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CiAKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsgLyogZm9yd2FyZCBkZWNsYXJhdGlvbiAoaW5jbHVkZS9saW51eC9tbS5oKSAqLwogc3RydWN0IG1tX3N0cnVjdDsKQEAgLTU1NCw5ICs1NTQsMTAgQEAKIAkJLyogaXB0ZSBpbiB6YXJjaCBtb2RlIGNhbiBkbyB0aGUgbWF0aCAqLwogCQlwdGVfdCAqcHRvID0gcHRlcDsKICNlbmRpZgotCQlhc20gdm9sYXRpbGUgKCJpcHRlICUyLCUzIgotCQkJICAgICAgOiAiPW0iICgqcHRlcCkgOiAibSIgKCpwdGVwKSwKLQkJCQkiYSIgKHB0byksICJhIiAoYWRkcmVzcykgKTsKKwkJYXNtIHZvbGF0aWxlKAorCQkJIglpcHRlCSUyLCUzIgorCQkJOiAiPW0iICgqcHRlcCkgOiAibSIgKCpwdGVwKSwKKwkJCSAgImEiIChwdG8pLCAiYSIgKGFkZHJlc3MpKTsKIAl9CiAJcHRlX3ZhbCgqcHRlcCkgPSBfUEFHRV9UWVBFX0VNUFRZOwogfQpAQCAtNTk2LDMwICs1OTcsMzEgQEAKICAqIHNob3VsZCB0aGVyZWZvcmUgb25seSBiZSBjYWxsZWQgaWYgaXQgaXMgbm90IG1hcHBlZCBpbiBhbnkKICAqIGFkZHJlc3Mgc3BhY2UuCiAgKi8KLSNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShfcGFnZSkJCQkJICBcCi0oewkJCQkJCQkJCSAgXAotCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAoX3BhZ2UpOwkJCQkJICBcCi0JdW5zaWduZWQgbG9uZyBfX3BoeXNwYWdlID0gX19wYSgoX19wYWdlLW1lbV9tYXApIDw8IFBBR0VfU0hJRlQpOyAgXAotCWludCBfX3NrZXkgPSBwYWdlX2dldF9zdG9yYWdlX2tleShfX3BoeXNwYWdlKTsJCQkgIFwKLQlpZiAoX19za2V5ICYgX1BBR0VfQ0hBTkdFRCkJCQkJCSAgXAotCQlwYWdlX3NldF9zdG9yYWdlX2tleShfX3BoeXNwYWdlLCBfX3NrZXkgJiB+X1BBR0VfQ0hBTkdFRCk7XAotCShfX3NrZXkgJiBfUEFHRV9DSEFOR0VEKTsJCQkJCSAgXAotfSkKK3N0YXRpYyBpbmxpbmUgaW50IHBhZ2VfdGVzdF9hbmRfY2xlYXJfZGlydHkoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJdW5zaWduZWQgbG9uZyBwaHlzcGFnZSA9IF9fcGEoKHBhZ2UgLSBtZW1fbWFwKSA8PCBQQUdFX1NISUZUKTsKKwlpbnQgc2tleSA9IHBhZ2VfZ2V0X3N0b3JhZ2Vfa2V5KHBoeXNwYWdlKTsKKworCWlmIChza2V5ICYgX1BBR0VfQ0hBTkdFRCkKKwkJcGFnZV9zZXRfc3RvcmFnZV9rZXkocGh5c3BhZ2UsIHNrZXkgJiB+X1BBR0VfQ0hBTkdFRCk7CisJcmV0dXJuIHNrZXkgJiBfUEFHRV9DSEFOR0VEOworfQogCiAvKgogICogVGVzdCBhbmQgY2xlYXIgcmVmZXJlbmNlZCBiaXQgaW4gc3RvcmFnZSBrZXkuCiAgKi8KLSNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlKQkJCQkJICBcCi0oewkJCQkJCQkJCSAgXAotCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAocGFnZSk7CQkJCQkgIFwKLQl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChfX3BhZ2UtbWVtX21hcCkgPDwgUEFHRV9TSElGVCk7ICBcCi0JaW50IF9fY2NvZGU7CQkJCQkJCSAgXAotCWFzbSB2b2xhdGlsZSAoInJyYmUgMCwlMVxuXHQiCQkJCQkgIFwKLQkJICAgICAgImlwbSAgJTBcblx0IgkJCQkJICBcCi0JCSAgICAgICJzcmwgICUwLDI4XG5cdCIgCQkJCQkgIFwKLSAgICAgICAgICAgICAgICAgICAgICA6ICI9ZCIgKF9fY2NvZGUpIDogImEiIChfX3BoeXNwYWdlKSA6ICJjYyIgKTsJICBcCi0JKF9fY2NvZGUgJiAyKTsJCQkJCQkJICBcCi19KQorc3RhdGljIGlubGluZSBpbnQgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3QgcGFnZSAqcGFnZSkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNwYWdlID0gX19wYSgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpOworCWludCBjY29kZTsKKworCWFzbSB2b2xhdGlsZSAoCisJCSJycmJlIDAsJTFcbiIKKwkJImlwbSAgJTBcbiIKKwkJInNybCAgJTAsMjhcbiIKKwkJOiAiPWQiIChjY29kZSkgOiAiYSIgKHBoeXNwYWdlKSA6ICJjYyIgKTsKKwlyZXR1cm4gY2NvZGUgJiAyOworfQogCiAvKgogICogQ29udmVyc2lvbiBmdW5jdGlvbnM6IGNvbnZlcnQgYSBwYWdlIGFuZCBwcm90ZWN0aW9uIHRvIGEgcGFnZSBlbnRyeSwKQEAgLTYzMiwzMiArNjM0LDI4IEBACiAJcmV0dXJuIF9fcHRlOwogfQogCi0jZGVmaW5lIG1rX3B0ZShwZywgcGdwcm90KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXN0cnVjdCBwYWdlICpfX3BhZ2UgPSAocGcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlwZ3Byb3RfdCBfX3BncHJvdCA9IChwZ3Byb3QpOwkJCQkJICBcCi0JdW5zaWduZWQgbG9uZyBfX3BoeXNwYWdlID0gX19wYSgoX19wYWdlLW1lbV9tYXApIDw8IFBBR0VfU0hJRlQpOyAgXAotCXB0ZV90IF9fcHRlID0gbWtfcHRlX3BoeXMoX19waHlzcGFnZSwgX19wZ3Byb3QpOyAgICAgICAgICAgICAgICAgIFwKLQlfX3B0ZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19KQorc3RhdGljIGlubGluZSBwdGVfdCBta19wdGUoc3RydWN0IHBhZ2UgKnBhZ2UsIHBncHJvdF90IHBncHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNwYWdlID0gX19wYSgocGFnZSAtIG1lbV9tYXApIDw8IFBBR0VfU0hJRlQpOwogCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwZ3Byb3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXBncHJvdF90IF9fcGdwcm90ID0gKHBncHJvdCk7CQkJCQkgIFwKLQl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChwZm4pIDw8IFBBR0VfU0hJRlQpOyAgICAgICAgICAgICBcCi0JcHRlX3QgX19wdGUgPSBta19wdGVfcGh5cyhfX3BoeXNwYWdlLCBfX3BncHJvdCk7ICAgICAgICAgICAgICAgICAgXAotCV9fcHRlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCisJcmV0dXJuIG1rX3B0ZV9waHlzKHBoeXNwYWdlLCBwZ3Byb3QpOworfQorCitzdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNwYWdlID0gX19wYSgocGZuKSA8PCBQQUdFX1NISUZUKTsKKworCXJldHVybiBta19wdGVfcGh5cyhwaHlzcGFnZSwgcGdwcm90KTsKK30KIAogI2lmZGVmIF9fczM5MHhfXwogCi0jZGVmaW5lIHBmbl9wbWQocGZuLCBwZ3Byb3QpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCXBncHJvdF90IF9fcGdwcm90ID0gKHBncHJvdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQl1bnNpZ25lZCBsb25nIF9fcGh5c3BhZ2UgPSBfX3BhKChwZm4pIDw8IFBBR0VfU0hJRlQpOyAgICAgICAgICAgICBcCi0JcG1kX3QgX19wbWQgPSBfX3BtZChfX3BoeXNwYWdlICsgcGdwcm90X3ZhbChfX3BncHJvdCkpOyAgICAgICAgICAgXAotCV9fcG1kOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0pCitzdGF0aWMgaW5saW5lIHBtZF90IHBmbl9wbWQodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKK3sKKwl1bnNpZ25lZCBsb25nIHBoeXNwYWdlID0gX19wYSgocGZuKSA8PCBQQUdFX1NISUZUKTsKKworCXJldHVybiBfX3BtZChwaHlzcGFnZSArIHBncHJvdF92YWwocGdwcm90KSk7Cit9CiAKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaCBiL2luY2x1ZGUvYXNtLXMzOTAvcHJvY2Vzc29yLmgKaW5kZXggNTc4YzIyMC4uY2JiZWRjNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3Byb2Nlc3Nvci5oCkBAIC0xMyw3ICsxMyw2IEBACiAjaWZuZGVmIF9fQVNNX1MzOTBfUFJPQ0VTU09SX0gKICNkZWZpbmUgX19BU01fUzM5MF9QUk9DRVNTT1JfSAogCi0jaW5jbHVkZSA8YXNtL3BhZ2UuaD4KICNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CiAKICNpZmRlZiBfX0tFUk5FTF9fCkBAIC0yMSw3ICsyMCw3IEBACiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CiAgKiBpbnN0cnVjdGlvbiBwb2ludGVyICgicHJvZ3JhbSBjb3VudGVyIikuCiAgKi8KLSNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyB2b2lkICpwYzsgX19hc21fXygiYmFzciAlMCwwIjoiPWEiKHBjKSk7IHBjOyB9KQorI2RlZmluZSBjdXJyZW50X3RleHRfYWRkcigpICh7IHZvaWQgKnBjOyBhc20oImJhc3IgJTAsMCIgOiAiPWEiIChwYykpOyBwYzsgfSkKIAogLyoKICAqICBDUFUgdHlwZSBhbmQgaGFyZHdhcmUgYnVnIGZsYWdzLiBLZXB0IHNlcGFyYXRlbHkgZm9yIGVhY2ggQ1BVLgpAQCAtMjAyLDcgKzIwMSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgY3B1X3JlbGF4KHZvaWQpCiB7CiAJaWYgKE1BQ0hJTkVfSEFTX0RJQUc0NCkKLQkJYXNtIHZvbGF0aWxlICgiZGlhZyAwLDAsNjgiIDogOiA6ICJtZW1vcnkiKTsKKwkJYXNtIHZvbGF0aWxlKCJkaWFnIDAsMCw2OCIgOiA6IDogIm1lbW9yeSIpOwogCWVsc2UKIAkJYmFycmllcigpOwogfQpAQCAtMjEzLDkgKzIxMiw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgX19sb2FkX3Bzdyhwc3dfdCBwc3cpCiB7CiAjaWZuZGVmIF9fczM5MHhfXwotCWFzbSB2b2xhdGlsZSAoImxwc3cgIDAoJTApIiA6IDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogImNjIiApOworCWFzbSB2b2xhdGlsZSgibHBzdyAgMCglMCkiIDogOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAiY2MiKTsKICNlbHNlCi0JYXNtIHZvbGF0aWxlICgibHBzd2UgMCglMCkiIDogOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAiY2MiICk7CisJYXNtIHZvbGF0aWxlKCJscHN3ZSAwKCUwKSIgOiA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJjYyIpOwogI2VuZGlmCiB9CiAKQEAgLTIzMiwyMCArMjMxLDIwIEBACiAJcHN3Lm1hc2sgPSBtYXNrOwogCiAjaWZuZGVmIF9fczM5MHhfXwotCWFzbSB2b2xhdGlsZSAoCi0JCSIgICAgYmFzciAlMCwwXG4iCi0JCSIwOiAgYWhpICAlMCwxZi0wYlxuIgotCQkiICAgIHN0CSAgJTAsNCglMSlcbiIKLQkJIiAgICBscHN3IDAoJTEpXG4iCisJYXNtIHZvbGF0aWxlKAorCQkiCWJhc3IJJTAsMFxuIgorCQkiMDoJYWhpCSUwLDFmLTBiXG4iCisJCSIJc3QJJTAsNCglMSlcbiIKKwkJIglscHN3CTAoJTEpXG4iCiAJCSIxOiIKLQkJOiAiPSZkIiAoYWRkcikgOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAibWVtb3J5IiwgImNjIiApOworCQk6ICI9JmQiIChhZGRyKSA6ICJhIiAoJnBzdyksICJtIiAocHN3KSA6ICJtZW1vcnkiLCAiY2MiKTsKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCWFzbSB2b2xhdGlsZSAoCi0JCSIgICAgbGFybCAgJTAsMWZcbiIKLQkJIiAgICBzdGcgICAlMCw4KCUxKVxuIgotCQkiICAgIGxwc3dlIDAoJTEpXG4iCisJYXNtIHZvbGF0aWxlKAorCQkiCWxhcmwJJTAsMWZcbiIKKwkJIglzdGcJJTAsOCglMSlcbiIKKwkJIglscHN3ZQkwKCUxKVxuIgogCQkiMToiCi0JCTogIj0mZCIgKGFkZHIpIDogImEiICgmcHN3KSwgIm0iIChwc3cpIDogIm1lbW9yeSIsICJjYyIgKTsKKwkJOiAiPSZkIiAoYWRkcikgOiAiYSIgKCZwc3cpLCAibSIgKHBzdykgOiAibWVtb3J5IiwgImNjIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiB9CiAgCkBAIC0yNzQsNTYgKzI3Myw1NyBAQAogICAgICAgICAgKiB0aGUgcHJvY2Vzc29yIGlzIGRlYWQgYWZ0ZXJ3YXJkcwogICAgICAgICAgKi8KICNpZm5kZWYgX19zMzkweF9fCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoIiAgICBzdGN0bCAwLDAsMCglMilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG5pICAgIDAoJTIpLDB4ZWZcbiIgLyogc3dpdGNoIG9mZiBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBsY3RsICAwLDAsMCglMilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0cHQgIDB4ZDhcbiIgICAgICAgLyogc3RvcmUgdGltZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0Y2tjIDB4ZTBcbiIgICAgICAgLyogc3RvcmUgY2xvY2sgY29tcGFyYXRvciAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RweCAgMHgxMDhcbiIgICAgICAvKiBzdG9yZSBwcmVmaXggcmVnaXN0ZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0YW0gIDAsMTUsMHgxMjBcbiIgLyogc3RvcmUgYWNjZXNzIHJlZ2lzdGVycyAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMCwweDE2MFxuIiAgICAvKiBzdG9yZSBmMCAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMiwweDE2OFxuIiAgICAvKiBzdG9yZSBmMiAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNCwweDE3MFxuIiAgICAvKiBzdG9yZSBmNCAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgNiwweDE3OFxuIiAgICAvKiBzdG9yZSBmNiAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RtICAgMCwxNSwweDE4MFxuIiAvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RjdGwgMCwxNSwweDFjMFxuIiAvKiBzdG9yZSBjb250cm9sIHJlZ2lzdGVycyAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgb2kgICAgMHgxYzAsMHgxMFxuIiAvKiBmYWtlIHByb3RlY3Rpb24gYml0ICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBscHN3IDAoJTEpIgotICAgICAgICAgICAgICAgICAgICAgIDogIj1tIiAoY3RsX2J1ZikKLQkJICAgICAgOiAiYSIgKCZkd19wc3cpLCAiYSIgKCZjdGxfYnVmKSwgIm0iIChkd19wc3cpIDogImNjIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGN0bAkwLDAsMCglMilcbiIKKwkJIgluaQkwKCUyKSwweGVmXG4iCS8qIHN3aXRjaCBvZmYgcHJvdGVjdGlvbiAqLworCQkiCWxjdGwJMCwwLDAoJTIpXG4iCisJCSIJc3RwdAkweGQ4XG4iCQkvKiBzdG9yZSB0aW1lciAqLworCQkiCXN0Y2tjCTB4ZTBcbiIJCS8qIHN0b3JlIGNsb2NrIGNvbXBhcmF0b3IgKi8KKwkJIglzdHB4CTB4MTA4XG4iCS8qIHN0b3JlIHByZWZpeCByZWdpc3RlciAqLworCQkiCXN0YW0JMCwxNSwweDEyMFxuIgkvKiBzdG9yZSBhY2Nlc3MgcmVnaXN0ZXJzICovCisJCSIJc3RkCTAsMHgxNjBcbiIJLyogc3RvcmUgZjAgKi8KKwkJIglzdGQJMiwweDE2OFxuIgkvKiBzdG9yZSBmMiAqLworCQkiCXN0ZAk0LDB4MTcwXG4iCS8qIHN0b3JlIGY0ICovCisJCSIJc3RkCTYsMHgxNzhcbiIJLyogc3RvcmUgZjYgKi8KKwkJIglzdG0JMCwxNSwweDE4MFxuIgkvKiBzdG9yZSBnZW5lcmFsIHJlZ2lzdGVycyAqLworCQkiCXN0Y3RsCTAsMTUsMHgxYzBcbiIJLyogc3RvcmUgY29udHJvbCByZWdpc3RlcnMgKi8KKwkJIglvaQkweDFjMCwweDEwXG4iCS8qIGZha2UgcHJvdGVjdGlvbiBiaXQgKi8KKwkJIglscHN3CTAoJTEpIgorCQk6ICI9bSIgKGN0bF9idWYpCisJCTogImEiICgmZHdfcHN3KSwgImEiICgmY3RsX2J1ZiksICJtIiAoZHdfcHN3KSA6ICJjYyIpOwogI2Vsc2UgLyogX19zMzkweF9fICovCi0gICAgICAgIGFzbSB2b2xhdGlsZSAoIiAgICBzdGN0ZyAwLDAsMCglMilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG5pICAgIDQoJTIpLDB4ZWZcbiIgLyogc3dpdGNoIG9mZiBwcm90ZWN0aW9uICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBsY3RsZyAwLDAsMCglMilcbiIKLSAgICAgICAgICAgICAgICAgICAgICAiICAgIGxnaGkgIDEsMHgxMDAwXG4iCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBzdHB0ICAweDMyOCgxKVxuIiAgICAgIC8qIHN0b3JlIHRpbWVyICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGNrYyAweDMzMCgxKVxuIiAgICAgIC8qIHN0b3JlIGNsb2NrIGNvbXBhcmF0b3IgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0cHggIDB4MzE4KDEpXG4iICAgICAgLyogc3RvcmUgcHJlZml4IHJlZ2lzdGVyICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGFtICAwLDE1LDB4MzQwKDEpXG4iIC8qIHN0b3JlIGFjY2VzcyByZWdpc3RlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZnBjIDB4MzFjKDEpXG4iICAgICAgLyogc3RvcmUgZnB1IGNvbnRyb2wgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDAsMHgyMDAoMSlcbiIgICAgLyogc3RvcmUgZjAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDEsMHgyMDgoMSlcbiIgICAgLyogc3RvcmUgZjEgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDIsMHgyMTAoMSlcbiIgICAgLyogc3RvcmUgZjIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDMsMHgyMTgoMSlcbiIgICAgLyogc3RvcmUgZjMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDQsMHgyMjAoMSlcbiIgICAgLyogc3RvcmUgZjQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDUsMHgyMjgoMSlcbiIgICAgLyogc3RvcmUgZjUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDYsMHgyMzAoMSlcbiIgICAgLyogc3RvcmUgZjYgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDcsMHgyMzgoMSlcbiIgICAgLyogc3RvcmUgZjcgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDgsMHgyNDAoMSlcbiIgICAgLyogc3RvcmUgZjggKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDksMHgyNDgoMSlcbiIgICAgLyogc3RvcmUgZjkgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDEwLDB4MjUwKDEpXG4iICAgLyogc3RvcmUgZjEwICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGQgICAxMSwweDI1OCgxKVxuIiAgIC8qIHN0b3JlIGYxMSAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMTIsMHgyNjAoMSlcbiIgICAvKiBzdG9yZSBmMTIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0ZCAgIDEzLDB4MjY4KDEpXG4iICAgLyogc3RvcmUgZjEzICovCi0gICAgICAgICAgICAgICAgICAgICAgIiAgICBzdGQgICAxNCwweDI3MCgxKVxuIiAgIC8qIHN0b3JlIGYxNCAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgc3RkICAgMTUsMHgyNzgoMSlcbiIgICAvKiBzdG9yZSBmMTUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0bWcgIDAsMTUsMHgyODAoMSlcbiIgLyogc3RvcmUgZ2VuZXJhbCByZWdpc3RlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIHN0Y3RnIDAsMTUsMHgzODAoMSlcbiIgLyogc3RvcmUgY29udHJvbCByZWdpc3RlcnMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAiICAgIG9pICAgIDB4Mzg0KDEpLDB4MTBcbiIgLyogZmFrZSBwcm90ZWN0aW9uIGJpdCAqLwotICAgICAgICAgICAgICAgICAgICAgICIgICAgbHBzd2UgMCglMSkiCi0gICAgICAgICAgICAgICAgICAgICAgOiAiPW0iIChjdGxfYnVmKQotCQkgICAgICA6ICJhIiAoJmR3X3BzdyksICJhIiAoJmN0bF9idWYpLAotCQkgICAgICAgICJtIiAoZHdfcHN3KSA6ICJjYyIsICIwIiwgIjEiKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJc3RjdGcJMCwwLDAoJTIpXG4iCisJCSIJbmkJNCglMiksMHhlZlxuIgkvKiBzd2l0Y2ggb2ZmIHByb3RlY3Rpb24gKi8KKwkJIglsY3RsZwkwLDAsMCglMilcbiIKKwkJIglsZ2hpCTEsMHgxMDAwXG4iCisJCSIJc3RwdAkweDMyOCgxKVxuIgkvKiBzdG9yZSB0aW1lciAqLworCQkiCXN0Y2tjCTB4MzMwKDEpXG4iCS8qIHN0b3JlIGNsb2NrIGNvbXBhcmF0b3IgKi8KKwkJIglzdHB4CTB4MzE4KDEpXG4iCS8qIHN0b3JlIHByZWZpeCByZWdpc3RlciAqLworCQkiCXN0YW0JMCwxNSwweDM0MCgxKVxuIi8qIHN0b3JlIGFjY2VzcyByZWdpc3RlcnMgKi8KKwkJIglzdGZwYwkweDMxYygxKVxuIgkvKiBzdG9yZSBmcHUgY29udHJvbCAqLworCQkiCXN0ZAkwLDB4MjAwKDEpXG4iCS8qIHN0b3JlIGYwICovCisJCSIJc3RkCTEsMHgyMDgoMSlcbiIJLyogc3RvcmUgZjEgKi8KKwkJIglzdGQJMiwweDIxMCgxKVxuIgkvKiBzdG9yZSBmMiAqLworCQkiCXN0ZAkzLDB4MjE4KDEpXG4iCS8qIHN0b3JlIGYzICovCisJCSIJc3RkCTQsMHgyMjAoMSlcbiIJLyogc3RvcmUgZjQgKi8KKwkJIglzdGQJNSwweDIyOCgxKVxuIgkvKiBzdG9yZSBmNSAqLworCQkiCXN0ZAk2LDB4MjMwKDEpXG4iCS8qIHN0b3JlIGY2ICovCisJCSIJc3RkCTcsMHgyMzgoMSlcbiIJLyogc3RvcmUgZjcgKi8KKwkJIglzdGQJOCwweDI0MCgxKVxuIgkvKiBzdG9yZSBmOCAqLworCQkiCXN0ZAk5LDB4MjQ4KDEpXG4iCS8qIHN0b3JlIGY5ICovCisJCSIJc3RkCTEwLDB4MjUwKDEpXG4iCS8qIHN0b3JlIGYxMCAqLworCQkiCXN0ZAkxMSwweDI1OCgxKVxuIgkvKiBzdG9yZSBmMTEgKi8KKwkJIglzdGQJMTIsMHgyNjAoMSlcbiIJLyogc3RvcmUgZjEyICovCisJCSIJc3RkCTEzLDB4MjY4KDEpXG4iCS8qIHN0b3JlIGYxMyAqLworCQkiCXN0ZAkxNCwweDI3MCgxKVxuIgkvKiBzdG9yZSBmMTQgKi8KKwkJIglzdGQJMTUsMHgyNzgoMSlcbiIJLyogc3RvcmUgZjE1ICovCisJCSIJc3RtZwkwLDE1LDB4MjgwKDEpXG4iLyogc3RvcmUgZ2VuZXJhbCByZWdpc3RlcnMgKi8KKwkJIglzdGN0ZwkwLDE1LDB4MzgwKDEpXG4iLyogc3RvcmUgY29udHJvbCByZWdpc3RlcnMgKi8KKwkJIglvaQkweDM4NCgxKSwweDEwXG4iLyogZmFrZSBwcm90ZWN0aW9uIGJpdCAqLworCQkiCWxwc3dlCTAoJTEpIgorCQk6ICI9bSIgKGN0bF9idWYpCisJCTogImEiICgmZHdfcHN3KSwgImEiICgmY3RsX2J1ZiksICJtIiAoZHdfcHN3KSA6ICJjYyIsICIwIik7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmggYi9pbmNsdWRlL2FzbS1zMzkwL3B0cmFjZS5oCmluZGV4IDRkNzVkNzcuLjhkMmJmNjUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvcHRyYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9wdHJhY2UuaApAQCAtNDc5LDcgKzQ3OSw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIHBzd19zZXRfa2V5KHVuc2lnbmVkIGludCBrZXkpCiB7Ci0JYXNtIHZvbGF0aWxlICggInNwa2EgMCglMCkiIDogOiAiZCIgKGtleSkgKTsKKwlhc20gdm9sYXRpbGUoInNwa2EgMCglMCkiIDogOiAiZCIgKGtleSkpOwogfQogCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3J3c2VtLmggYi9pbmNsdWRlL2FzbS1zMzkwL3J3c2VtLmgKaW5kZXggMTNlYzE2OS4uOTBmNGVjYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9yd3NlbS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvcndzZW0uaApAQCAtMTIyLDIzICsxMjIsMjMgQEAKIHsKIAlzaWduZWQgbG9uZyBvbGQsIG5ldzsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICBsICAgICUwLDAoJTMpXG4iCi0JCSIwOiBsciAgICUxLCUwXG4iCi0JCSIgICBhaGkgICUxLCU1XG4iCi0JCSIgICBjcyAgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWwJJTAsMCglMylcbiIKKwkJIjA6CWxyCSUxLCUwXG4iCisJCSIJYWhpCSUxLCU1XG4iCisJCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiICAgbGcgICAlMCwwKCUzKVxuIgotCQkiMDogbGdyICAlMSwlMFxuIgotCQkiICAgYWdoaSAlMSwlNVxuIgotCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYiIKKwkJIglsZwklMCwwKCUzKVxuIgorCQkiMDoJbGdyCSUxLCUwXG4iCisJCSIJYWdoaQklMSwlNVxuIgorCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotICAgICAgICAgICAgICAgIDogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKIAkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIgKTsKKwkJICAiaSIgKFJXU0VNX0FDVElWRV9SRUFEX0JJQVMpIDogImNjIiwgIm1lbW9yeSIpOwogCWlmIChvbGQgPCAwKQogCQlyd3NlbV9kb3duX3JlYWRfZmFpbGVkKHNlbSk7CiB9CkBAIC0xNTAsMjcgKzE1MCwyNyBAQAogewogCXNpZ25lZCBsb25nIG9sZCwgbmV3OwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18oCisJYXNtIHZvbGF0aWxlKAogI2lmbmRlZiBfX3MzOTB4X18KLQkJIiAgIGwgICAgJTAsMCglMylcbiIKLQkJIjA6IGx0ciAgJTEsJTBcbiIKLQkJIiAgIGptICAgMWZcbiIKLQkJIiAgIGFoaSAgJTEsJTVcbiIKLQkJIiAgIGNzICAgJTAsJTEsMCglMylcbiIKLQkJIiAgIGpsICAgMGJcbiIKKwkJIglsCSUwLDAoJTMpXG4iCisJCSIwOglsdHIJJTEsJTBcbiIKKwkJIglqbQkxZlxuIgorCQkiCWFoaQklMSwlNVxuIgorCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGJcbiIKIAkJIjE6IgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIgICBsZyAgICUwLDAoJTMpXG4iCi0JCSIwOiBsdGdyICUxLCUwXG4iCi0JCSIgICBqbSAgIDFmXG4iCi0JCSIgICBhZ2hpICUxLCU1XG4iCi0JCSIgICBjc2cgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiXG4iCisJCSIJbGcJJTAsMCglMylcbiIKKwkJIjA6CWx0Z3IJJTEsJTBcbiIKKwkJIglqbQkxZlxuIgorCQkiCWFnaGkJJTEsJTVcbiIKKwkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglqbAkwYlxuIgogCQkiMToiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQogCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLAotCQkgICJpIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUykgOiAiY2MiLCAibWVtb3J5IiApOworCQkgICJpIiAoUldTRU1fQUNUSVZFX1JFQURfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIG9sZCA+PSAwID8gMSA6IDA7CiB9CiAKQEAgLTE4MiwyMyArMTgyLDIzIEBACiAJc2lnbmVkIGxvbmcgb2xkLCBuZXcsIHRtcDsKIAogCXRtcCA9IFJXU0VNX0FDVElWRV9XUklURV9CSUFTOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICBsICAgICUwLDAoJTMpXG4iCi0JCSIwOiBsciAgICUxLCUwXG4iCi0JCSIgICBhICAgICUxLCU1XG4iCi0JCSIgICBjcyAgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWwJJTAsMCglMylcbiIKKwkJIjA6CWxyCSUxLCUwXG4iCisJCSIJYQklMSwlNVxuIgorCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIiAgIGxnICAgJTAsMCglMylcbiIKLQkJIjA6IGxnciAgJTEsJTBcbiIKLQkJIiAgIGFnICAgJTEsJTVcbiIKLQkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKLQkJIiAgIGpsICAgMGIiCisJCSIJbGcJJTAsMCglMylcbiIKKwkJIjA6CWxncgklMSwlMFxuIgorCQkiCWFnCSUxLCU1XG4iCisJCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQogCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKLQkJOiAiY2MiLCAibWVtb3J5IiApOworCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAob2xkICE9IDApCiAJCXJ3c2VtX2Rvd25fd3JpdGVfZmFpbGVkKHNlbSk7CiB9CkBAIC0yMTUsMjQgKzIxNSwyNCBAQAogewogCXNpZ25lZCBsb25nIG9sZDsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICBsICAgICUwLDAoJTIpXG4iCi0JCSIwOiBsdHIgICUwLCUwXG4iCi0JCSIgICBqbnogIDFmXG4iCi0JCSIgICBjcyAgICUwLCU0LDAoJTIpXG4iCi0JCSIgICBqbCAgIDBiXG4iCisJCSIJbAklMCwwKCUyKVxuIgorCQkiMDoJbHRyCSUwLCUwXG4iCisJCSIJam56CTFmXG4iCisJCSIJY3MJJTAsJTQsMCglMilcbiIKKwkJIglqbAkwYlxuIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIgICBsZyAgICUwLDAoJTIpXG4iCi0JCSIwOiBsdGdyICUwLCUwXG4iCi0JCSIgICBqbnogIDFmXG4iCi0JCSIgICBjc2cgICUwLCU0LDAoJTIpXG4iCi0JCSIgICBqbCAgIDBiXG4iCisJCSIJbGcJJTAsMCglMilcbiIKKwkJIjA6CWx0Z3IJJTAsJTBcbiIKKwkJIglqbnoJMWZcbiIKKwkJIgljc2cJJTAsJTQsMCglMilcbiIKKwkJIglqbAkwYlxuIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCQkiMToiCi0gICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiPSZkIiAob2xkKSwgIj1tIiAoc2VtLT5jb3VudCkKIAkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwKLQkJICAiZCIgKFJXU0VNX0FDVElWRV9XUklURV9CSUFTKSA6ICJjYyIsICJtZW1vcnkiICk7CisJCSAgImQiIChSV1NFTV9BQ1RJVkVfV1JJVEVfQklBUykgOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIChvbGQgPT0gUldTRU1fVU5MT0NLRURfVkFMVUUpID8gMSA6IDA7CiB9CiAKQEAgLTI0MywyNCArMjQzLDI0IEBACiB7CiAJc2lnbmVkIGxvbmcgb2xkLCBuZXc7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiICAgbCAgICAlMCwwKCUzKVxuIgotCQkiMDogbHIgICAlMSwlMFxuIgotCQkiICAgYWhpICAlMSwlNVxuIgotCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYiIKKwkJIglsCSUwLDAoJTMpXG4iCisJCSIwOglscgklMSwlMFxuIgorCQkiCWFoaQklMSwlNVxuIgorCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIiAgIGxnICAgJTAsMCglMylcbiIKLQkJIjA6IGxnciAgJTEsJTBcbiIKLQkJIiAgIGFnaGkgJTEsJTVcbiIKLQkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKLQkJIiAgIGpsICAgMGIiCisJCSIJbGcJJTAsMCglMylcbiIKKwkJIjA6CWxncgklMSwlMFxuIgorCQkiCWFnaGkJJTEsJTVcbiIKKwkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLSAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCiAJCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksCiAJCSAgImkiICgtUldTRU1fQUNUSVZFX1JFQURfQklBUykKLQkJOiAiY2MiLCAibWVtb3J5IiApOworCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAobmV3IDwgMCkKIAkJaWYgKChuZXcgJiBSV1NFTV9BQ1RJVkVfTUFTSykgPT0gMCkKIAkJCXJ3c2VtX3dha2Uoc2VtKTsKQEAgLTI3NCwyMyArMjc0LDIzIEBACiAJc2lnbmVkIGxvbmcgb2xkLCBuZXcsIHRtcDsKIAogCXRtcCA9IC1SV1NFTV9BQ1RJVkVfV1JJVEVfQklBUzsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiICAgbCAgICAlMCwwKCUzKVxuIgotCQkiMDogbHIgICAlMSwlMFxuIgotCQkiICAgYSAgICAlMSwlNVxuIgotCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYiIKKwkJIglsCSUwLDAoJTMpXG4iCisJCSIwOglscgklMSwlMFxuIgorCQkiCWEJJTEsJTVcbiIKKwkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIgICBsZyAgICUwLDAoJTMpXG4iCi0JCSIwOiBsZ3IgICUxLCUwXG4iCi0JCSIgICBhZyAgICUxLCU1XG4iCi0JCSIgICBjc2cgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIwOglsZ3IJJTEsJTBcbiIKKwkJIglhZwklMSwlNVxuIgorCQkiCWNzZwklMCwlMSwwKCUzKVxuIgorCQkiCWpsCTBiIgogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotICAgICAgICAgICAgICAgIDogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQorCQk6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKIAkJOiAiYSIgKCZzZW0tPmNvdW50KSwgIm0iIChzZW0tPmNvdW50KSwgIm0iICh0bXApCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJaWYgKG5ldyA8IDApCiAJCWlmICgobmV3ICYgUldTRU1fQUNUSVZFX01BU0spID09IDApCiAJCQlyd3NlbV93YWtlKHNlbSk7CkBAIC0zMDQsMjMgKzMwNCwyMyBAQAogCXNpZ25lZCBsb25nIG9sZCwgbmV3LCB0bXA7CiAKIAl0bXAgPSAtUldTRU1fV0FJVElOR19CSUFTOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICBsICAgICUwLDAoJTMpXG4iCi0JCSIwOiBsciAgICUxLCUwXG4iCi0JCSIgICBhICAgICUxLCU1XG4iCi0JCSIgICBjcyAgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWwJJTAsMCglMylcbiIKKwkJIjA6CWxyCSUxLCUwXG4iCisJCSIJYQklMSwlNVxuIgorCQkiCWNzCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KLQkJIiAgIGxnICAgJTAsMCglMylcbiIKLQkJIjA6IGxnciAgJTEsJTBcbiIKLQkJIiAgIGFnICAgJTEsJTVcbiIKLQkJIiAgIGNzZyAgJTAsJTEsMCglMylcbiIKLQkJIiAgIGpsICAgMGIiCisJCSIJbGcJJTAsMCglMylcbiIKKwkJIjA6CWxncgklMSwlMFxuIgorCQkiCWFnCSUxLCU1XG4iCisJCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQogCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAibSIgKHRtcCkKLQkJOiAiY2MiLCAibWVtb3J5IiApOworCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlpZiAobmV3ID4gMSkKIAkJcndzZW1fZG93bmdyYWRlX3dha2Uoc2VtKTsKIH0KQEAgLTMzMiwyMyArMzMyLDIzIEBACiB7CiAJc2lnbmVkIGxvbmcgb2xkLCBuZXc7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKKwlhc20gdm9sYXRpbGUoCiAjaWZuZGVmIF9fczM5MHhfXwotCQkiICAgbCAgICAlMCwwKCUzKVxuIgotCQkiMDogbHIgICAlMSwlMFxuIgotCQkiICAgYXIgICAlMSwlNVxuIgotCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYiIKKwkJIglsCSUwLDAoJTMpXG4iCisJCSIwOglscgklMSwlMFxuIgorCQkiCWFyCSUxLCU1XG4iCisJCSIJY3MJJTAsJTEsMCglMylcbiIKKwkJIglqbAkwYiIKICNlbHNlIC8qIF9fczM5MHhfXyAqLwotCQkiICAgbGcgICAlMCwwKCUzKVxuIgotCQkiMDogbGdyICAlMSwlMFxuIgotCQkiICAgYWdyICAlMSwlNVxuIgotCQkiICAgY3NnICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYiIKKwkJIglsZwklMCwwKCUzKVxuIgorCQkiMDoJbGdyCSUxLCUwXG4iCisJCSIJYWdyCSUxLCU1XG4iCisJCSIJY3NnCSUwLCUxLDAoJTMpXG4iCisJCSIJamwJMGIiCiAjZW5kaWYgLyogX19zMzkweF9fICovCi0gICAgICAgICAgICAgICAgOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCisJCTogIj0mZCIgKG9sZCksICI9JmQiIChuZXcpLCAiPW0iIChzZW0tPmNvdW50KQogCQk6ICJhIiAoJnNlbS0+Y291bnQpLCAibSIgKHNlbS0+Y291bnQpLCAiZCIgKGRlbHRhKQotCQk6ICJjYyIsICJtZW1vcnkiICk7CisJCTogImNjIiwgIm1lbW9yeSIpOwogfQogCiAvKgpAQCAtMzU4LDIzICszNTgsMjMgQEAKIHsKIAlzaWduZWQgbG9uZyBvbGQsIG5ldzsKIAotCV9fYXNtX18gX192b2xhdGlsZV9fKAorCWFzbSB2b2xhdGlsZSgKICNpZm5kZWYgX19zMzkweF9fCi0JCSIgICBsICAgICUwLDAoJTMpXG4iCi0JCSIwOiBsciAgICUxLCUwXG4iCi0JCSIgICBhciAgICUxLCU1XG4iCi0JCSIgICBjcyAgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWwJJTAsMCglMylcbiIKKwkJIjA6CWxyCSUxLCUwXG4iCisJCSIJYXIJJTEsJTVcbiIKKwkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWpsCTBiIgogI2Vsc2UgLyogX19zMzkweF9fICovCi0JCSIgICBsZyAgICUwLDAoJTMpXG4iCi0JCSIwOiBsZ3IgICUxLCUwXG4iCi0JCSIgICBhZ3IgICUxLCU1XG4iCi0JCSIgICBjc2cgICUwLCUxLDAoJTMpXG4iCi0JCSIgICBqbCAgIDBiIgorCQkiCWxnCSUwLDAoJTMpXG4iCisJCSIwOglsZ3IJJTEsJTBcbiIKKwkJIglhZ3IJJTEsJTVcbiIKKwkJIgljc2cJJTAsJTEsMCglMylcbiIKKwkJIglqbAkwYiIKICNlbmRpZiAvKiBfX3MzOTB4X18gKi8KLSAgICAgICAgICAgICAgICA6ICI9JmQiIChvbGQpLCAiPSZkIiAobmV3KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiAiPSZkIiAob2xkKSwgIj0mZCIgKG5ldyksICI9bSIgKHNlbS0+Y291bnQpCiAJCTogImEiICgmc2VtLT5jb3VudCksICJtIiAoc2VtLT5jb3VudCksICJkIiAoZGVsdGEpCi0JCTogImNjIiwgIm1lbW9yeSIgKTsKKwkJOiAiY2MiLCAibWVtb3J5Iik7CiAJcmV0dXJuIG5ldzsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2VtYXBob3JlLmgKaW5kZXggMzJjZGM2OS4uZGJjZTA1OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zZW1hcGhvcmUuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NlbWFwaG9yZS5oCkBAIC04NSwxNyArODUsMTcgQEAKIAkgKiAgICAgICBzZW0tPmNvdW50LmNvdW50ZXIgPSAtLW5ld192YWw7CiAJICogSW4gdGhlIHBwYyBjb2RlIHRoaXMgaXMgY2FsbGVkIGF0b21pY19kZWNfaWZfcG9zaXRpdmUuCiAJICovCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKAotCQkiICAgbCAgICAlMCwwKCUzKVxuIgotCQkiMDogbHRyICAlMSwlMFxuIgotCQkiICAgamxlICAxZlxuIgotCQkiICAgYWhpICAlMSwtMVxuIgotCQkiICAgY3MgICAlMCwlMSwwKCUzKVxuIgotCQkiICAgamwgICAwYlxuIgorCWFzbSB2b2xhdGlsZSgKKwkJIglsCSUwLDAoJTMpXG4iCisJCSIwOglsdHIJJTEsJTBcbiIKKwkJIglqbGUJMWZcbiIKKwkJIglhaGkJJTEsLTFcbiIKKwkJIgljcwklMCwlMSwwKCUzKVxuIgorCQkiCWpsCTBiXG4iCiAJCSIxOiIKIAkJOiAiPSZkIiAob2xkX3ZhbCksICI9JmQiIChuZXdfdmFsKSwgIj1tIiAoc2VtLT5jb3VudC5jb3VudGVyKQogCQk6ICJhIiAoJnNlbS0+Y291bnQuY291bnRlciksICJtIiAoc2VtLT5jb3VudC5jb3VudGVyKQotCQk6ICJjYyIsICJtZW1vcnkiICk7CisJCTogImNjIiwgIm1lbW9yeSIpOwogCXJldHVybiBvbGRfdmFsIDw9IDA7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaCBiL2luY2x1ZGUvYXNtLXMzOTAvc2V0dXAuaAppbmRleCBmMTk1OTczLi41ZDcyZWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NldHVwLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zZXR1cC5oCkBAIC0zOSw2ICszOSw3IEBACiAjZGVmaW5lIE1BQ0hJTkVfSVNfUDM5MAkJKG1hY2hpbmVfZmxhZ3MgJiA0KQogI2RlZmluZSBNQUNISU5FX0hBU19NVlBHCShtYWNoaW5lX2ZsYWdzICYgMTYpCiAjZGVmaW5lIE1BQ0hJTkVfSEFTX0lEVEUJKG1hY2hpbmVfZmxhZ3MgJiAxMjgpCisjZGVmaW5lIE1BQ0hJTkVfSEFTX0RJQUc5QwkobWFjaGluZV9mbGFncyAmIDI1NikKIAogI2lmbmRlZiBfX3MzOTB4X18KICNkZWZpbmUgTUFDSElORV9IQVNfSUVFRQkobWFjaGluZV9mbGFncyAmIDIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NmcC1tYWNoaW5lLmgKaW5kZXggZGU2OWRmYS4uOGNhOGM3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zZnAtbWFjaGluZS5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc2ZwLW1hY2hpbmUuaApAQCAtNzYsMjEgKzc2LDIzIEBACiAJdW5zaWduZWQgaW50IF9fcjIgPSAoeDIpICsgKHkyKTsJCQlcCiAJdW5zaWduZWQgaW50IF9fcjEgPSAoeDEpOwkJCQlcCiAJdW5zaWduZWQgaW50IF9fcjAgPSAoeDApOwkJCQlcCi0JX19hc21fXyAoIiAgIGFsciAlMiwlM1xuIgkJCQlcCi0JCSAiICAgYnJjIDEyLDBmXG4iCQkJCVwKLQkJICIgICBsaGkgMCwxXG4iCQkJCQlcCi0JCSAiICAgYWxyICUxLDBcbiIJCQkJXAotCQkgIiAgIGJyYyAxMiwwZlxuIgkJCQlcCi0JCSAiICAgYWxyICUwLDBcbiIJCQkJXAotCQkgIjA6IgkJCQkJCVwKLQkJIDogIismZCIgKF9fcjIpLCAiKyZkIiAoX19yMSksICIrJmQiIChfX3IwKQlcCi0JCSA6ICJkIiAoeTApLCAiaSIgKDEpIDogImNjIiwgIjAiICk7CQlcCi0JX19hc21fXyAoIiAgIGFsciAlMSwlMlxuIgkJCQlcCi0JCSAiICAgYnJjIDEyLDBmXG4iCQkJCVwKLQkJICIgICBhaGkgJTAsMVxuIgkJCQlcCi0JCSAiMDoiCQkJCQkJXAotCQkgOiAiKyZkIiAoX19yMiksICIrJmQiIChfX3IxKQkJCVwKLQkJIDogImQiICh5MSkgOiAiY2MiICk7CQkJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWFscgklMiwlM1xuIgkJCVwKKwkJIglicmMJMTIsMGZcbiIJCQlcCisJCSIJbGhpCTAsMVxuIgkJCQlcCisJCSIJYWxyCSUxLDBcbiIJCQkJXAorCQkiCWJyYwkxMiwwZlxuIgkJCVwKKwkJIglhbHIJJTAsMFxuIgkJCQlcCisJCSIwOiIJCQkJCQlcCisJCTogIismZCIgKF9fcjIpLCAiKyZkIiAoX19yMSksICIrJmQiIChfX3IwKQlcCisJCTogImQiICh5MCksICJpIiAoMSkgOiAiY2MiLCAiMCIgKTsJCVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWFscgklMSwlMlxuIgkJCVwKKwkJIglicmMJMTIsMGZcbiIJCQlcCisJCSIJYWhpCSUwLDFcbiIJCQkJXAorCQkiMDoiCQkJCQkJXAorCQk6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpCQkJXAorCQk6ICJkIiAoeTEpIDogImNjIik7CQkJCVwKIAkocjIpID0gX19yMjsJCQkJCQlcCiAJKHIxKSA9IF9fcjE7CQkJCQkJXAogCShyMCkgPSBfX3IwOwkJCQkJCVwKQEAgLTEwMCwyMSArMTAyLDIzIEBACiAJdW5zaWduZWQgaW50IF9fcjIgPSAoeDIpIC0gKHkyKTsJCQlcCiAJdW5zaWduZWQgaW50IF9fcjEgPSAoeDEpOwkJCQlcCiAJdW5zaWduZWQgaW50IF9fcjAgPSAoeDApOwkJCQlcCi0JX19hc21fXyAoIiAgIHNsciAlMiwlM1xuIgkJCQlcCi0JCSAiICAgYnJjIDMsMGZcbiIJCQkJXAotCQkgIiAgIGxoaSAwLDFcbiIJCQkJCVwKLQkJICIgICBzbHIgJTEsMFxuIgkJCQlcCi0JCSAiICAgYnJjIDMsMGZcbiIJCQkJXAotCQkgIiAgIHNsciAlMCwwXG4iCQkJCVwKLQkJICIwOiIJCQkJCQlcCi0JCSA6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpLCAiKyZkIiAoX19yMCkJXAotCQkgOiAiZCIgKHkwKSA6ICJjYyIsICIwIiApOwkJCVwKLQlfX2FzbV9fICgiICAgc2xyICUxLCUyXG4iCQkJCVwKLQkJICIgICBicmMgMywwZlxuIgkJCQlcCi0JCSAiICAgYWhpICUwLC0xXG4iCQkJCVwKLQkJICIwOiIJCQkJCQlcCi0JCSA6ICIrJmQiIChfX3IyKSwgIismZCIgKF9fcjEpCQkJXAotCQkgOiAiZCIgKHkxKSA6ICJjYyIgKTsJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJc2xyICAgJTIsJTNcbiIJCQkJXAorCQkiCWJyYwkzLDBmXG4iCQkJCVwKKwkJIglsaGkJMCwxXG4iCQkJCVwKKwkJIglzbHIJJTEsMFxuIgkJCQlcCisJCSIJYnJjCTMsMGZcbiIJCQkJXAorCQkiCXNscgklMCwwXG4iCQkJCVwKKwkJIjA6IgkJCQkJCVwKKwkJOiAiKyZkIiAoX19yMiksICIrJmQiIChfX3IxKSwgIismZCIgKF9fcjApCVwKKwkJOiAiZCIgKHkwKSA6ICJjYyIsICIwIik7CQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJc2xyCSUxLCUyXG4iCQkJXAorCQkiCWJyYwkzLDBmXG4iCQkJCVwKKwkJIglhaGkJJTAsLTFcbiIJCQlcCisJCSIwOiIJCQkJCQlcCisJCTogIismZCIgKF9fcjIpLCAiKyZkIiAoX19yMSkJCQlcCisJCTogImQiICh5MSkgOiAiY2MiKTsJCQkJXAogCShyMikgPSBfX3IyOwkJCQkJCVwKIAkocjEpID0gX19yMTsJCQkJCQlcCiAJKHIwKSA9IF9fcjA7CQkJCQkJXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zaWdwLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaAppbmRleCBmYzU2NDU4Li5lMTZkNTZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NpZ3AuaApAQCAtNzAsMTYgKzcwLDE2IEBACiBzdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKIHNpZ25hbF9wcm9jZXNzb3IoX191MTYgY3B1X2FkZHIsIHNpZ3Bfb3JkZXJfY29kZSBvcmRlcl9jb2RlKQogeworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnMSBhc20gKCIxIikgPSAwOwogCXNpZ3BfY2NvZGUgY2NvZGU7CiAKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgICBzciAgICAgMSwxXG4iICAgICAgICAvKiBwYXJhbWV0ZXI9MCBpbiBncHIgMSAqLwotCQkiICAgIHNpZ3AgICAxLCUxLDAoJTIpXG4iCi0JCSIgICAgaXBtICAgICUwXG4iCi0JCSIgICAgc3JsICAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2NvZGUpCi0JCTogImQiIChfX2NwdV9sb2dpY2FsX21hcFtjcHVfYWRkcl0pLCAiYSIgKG9yZGVyX2NvZGUpCi0JCTogImNjIiAsICJtZW1vcnkiLCAiMSIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJc2lncAklMSwlMiwwKCUzKVxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgorCQk6CSI9ZCIJKGNjb2RlKQorCQk6ICJkIiAocmVnMSksICJkIiAoX19jcHVfbG9naWNhbF9tYXBbY3B1X2FkZHJdKSwKKwkJICAiYSIgKG9yZGVyX2NvZGUpIDogImNjIiAsICJtZW1vcnkiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKQEAgLTg3LDIwICs4NywxOCBAQAogICogU2lnbmFsIHByb2Nlc3NvciB3aXRoIHBhcmFtZXRlcgogICovCiBzdGF0aWMgaW5saW5lIHNpZ3BfY2NvZGUKLXNpZ25hbF9wcm9jZXNzb3JfcChfX3UzMiBwYXJhbWV0ZXIsIF9fdTE2IGNwdV9hZGRyLAotCQkgICBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKK3NpZ25hbF9wcm9jZXNzb3JfcChfX3UzMiBwYXJhbWV0ZXIsIF9fdTE2IGNwdV9hZGRyLCBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVnMSBhc20gKCIxIikgPSBwYXJhbWV0ZXI7CiAJc2lncF9jY29kZSBjY29kZTsKLQkKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgICBsciAgICAgMSwlMVxuIiAgICAgICAvKiBwYXJhbWV0ZXIgaW4gZ3ByIDEgKi8KLQkJIiAgICBzaWdwICAgMSwlMiwwKCUzKVxuIgotCQkiICAgIGlwbSAgICAlMFxuIgotCQkiICAgIHNybCAgICAlMCwyOFxuIgorCisJYXNtIHZvbGF0aWxlKAorCQkiCXNpZ3AJJTEsJTIsMCglMylcbiIKKwkJIglpcG0JJTBcbiIKKwkJIglzcmwJJTAsMjhcbiIKIAkJOiAiPWQiIChjY29kZSkKLQkJOiAiZCIgKHBhcmFtZXRlciksICJkIiAoX19jcHVfbG9naWNhbF9tYXBbY3B1X2FkZHJdKSwKLSAgICAgICAgICAgICAgICAgICJhIiAob3JkZXJfY29kZSkKLQkJOiAiY2MiICwgIm1lbW9yeSIsICIxIiApOworCQk6ICJkIiAocmVnMSksICJkIiAoX19jcHVfbG9naWNhbF9tYXBbY3B1X2FkZHJdKSwKKwkJICAiYSIgKG9yZGVyX2NvZGUpIDogImNjIiAsICJtZW1vcnkiKTsKIAlyZXR1cm4gY2NvZGU7CiB9CiAKQEAgLTEwOCwyNCArMTA2LDIxIEBACiAgKiBTaWduYWwgcHJvY2Vzc29yIHdpdGggcGFyYW1ldGVyIGFuZCByZXR1cm4gc3RhdHVzCiAgKi8KIHN0YXRpYyBpbmxpbmUgc2lncF9jY29kZQotc2lnbmFsX3Byb2Nlc3Nvcl9wcyhfX3UzMiAqc3RhdHVzcHRyLCBfX3UzMiBwYXJhbWV0ZXIsCi0JCSAgICBfX3UxNiBjcHVfYWRkciwgc2lncF9vcmRlcl9jb2RlIG9yZGVyX2NvZGUpCitzaWduYWxfcHJvY2Vzc29yX3BzKF9fdTMyICpzdGF0dXNwdHIsIF9fdTMyIHBhcmFtZXRlciwgX191MTYgY3B1X2FkZHIsCisJCSAgICBzaWdwX29yZGVyX2NvZGUgb3JkZXJfY29kZSkKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBpbnQgcmVnMSBhc20gKCIxIikgPSBwYXJhbWV0ZXI7CiAJc2lncF9jY29kZSBjY29kZTsKLQkKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXygKLQkJIiAgICBzciAgICAgMiwyXG4iICAgICAgICAvKiBjbGVhciBzdGF0dXMgKi8KLQkJIiAgICBsciAgICAgMywlMlxuIiAgICAgICAvKiBwYXJhbWV0ZXIgaW4gZ3ByIDMgKi8KLQkJIiAgICBzaWdwICAgMiwlMywwKCU0KVxuIgotCQkiICAgIHN0ICAgICAyLCUxXG4iCi0JCSIgICAgaXBtICAgICUwXG4iCi0JCSIgICAgc3JsICAgICUwLDI4XG4iCi0JCTogIj1kIiAoY2NvZGUpLCAiPW0iICgqc3RhdHVzcHRyKQotCQk6ICJkIiAocGFyYW1ldGVyKSwgImQiIChfX2NwdV9sb2dpY2FsX21hcFtjcHVfYWRkcl0pLAotICAgICAgICAgICAgICAgICAgImEiIChvcmRlcl9jb2RlKQotCQk6ICJjYyIgLCAibWVtb3J5IiwgIjIiICwgIjMiCi0JCSk7Ci0gICByZXR1cm4gY2NvZGU7CisKKwlhc20gdm9sYXRpbGUoCisJCSIJc2lncAklMSwlMiwwKCUzKVxuIgorCQkiCWlwbQklMFxuIgorCQkiCXNybAklMCwyOFxuIgorCQk6ICI9ZCIgKGNjb2RlKSwgIitkIiAocmVnMSkKKwkJOiAiZCIgKF9fY3B1X2xvZ2ljYWxfbWFwW2NwdV9hZGRyXSksICJhIiAob3JkZXJfY29kZSkKKwkJOiAiY2MiICwgIm1lbW9yeSIpOworCSpzdGF0dXNwdHIgPSByZWcxOworCXJldHVybiBjY29kZTsKIH0KIAogI2VuZGlmIC8qIF9fU0lHUF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oIGIvaW5jbHVkZS9hc20tczM5MC9zbXAuaAppbmRleCA5ZmIwMmU5Li5jM2NmMDMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3NtcC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc21wLmgKQEAgLTU2LDcgKzU2LDcgQEAKIHsKICAgICAgICAgX191MTYgY3B1X2FkZHJlc3M7CiAgCi0gICAgICAgIF9fYXNtX18gKCJzdGFwICUwXG4iIDogIj1tIiAoY3B1X2FkZHJlc3MpKTsKKwlhc20gdm9sYXRpbGUoInN0YXAgJTAiIDogIj1tIiAoY3B1X2FkZHJlc3MpKTsKICAgICAgICAgcmV0dXJuIGNwdV9hZGRyZXNzOwogfQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zMzkwL3NwaW5sb2NrLmgKaW5kZXggMjczZGJlYy4uNmI3OGFmMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3BpbmxvY2suaApAQCAtMTEsMTcgKzExLDM4IEBACiAjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX0gKICNkZWZpbmUgX19BU01fU1BJTkxPQ0tfSAogCisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKKworI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorCiBzdGF0aWMgaW5saW5lIGludAogX3Jhd19jb21wYXJlX2FuZF9zd2FwKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqbG9jaywKIAkJICAgICAgdW5zaWduZWQgaW50IG9sZCwgdW5zaWduZWQgaW50IG5ldykKIHsKLQlhc20gdm9sYXRpbGUgKCJjcyAlMCwlMywwKCU0KSIKLQkJICAgICAgOiAiPWQiIChvbGQpLCAiPW0iICgqbG9jaykKLQkJICAgICAgOiAiMCIgKG9sZCksICJkIiAobmV3KSwgImEiIChsb2NrKSwgIm0iICgqbG9jaykKLQkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIgljcwklMCwlMywlMSIKKwkJOiAiPWQiIChvbGQpLCAiPVEiICgqbG9jaykKKwkJOiAiMCIgKG9sZCksICJkIiAobmV3KSwgIlEiICgqbG9jaykKKwkJOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiBvbGQ7CiB9CiAKKyNlbHNlIC8qIF9fR05VQ19fICovCisKK3N0YXRpYyBpbmxpbmUgaW50CitfcmF3X2NvbXBhcmVfYW5kX3N3YXAodm9sYXRpbGUgdW5zaWduZWQgaW50ICpsb2NrLAorCQkgICAgICB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQoreworCWFzbSB2b2xhdGlsZSgKKwkJIgljcwklMCwlMywwKCU0KSIKKwkJOiAiPWQiIChvbGQpLCAiPW0iICgqbG9jaykKKwkJOiAiMCIgKG9sZCksICJkIiAobmV3KSwgImEiIChsb2NrKSwgIm0iICgqbG9jaykKKwkJOiAiY2MiLCAibWVtb3J5IiApOworCXJldHVybiBvbGQ7Cit9CisKKyNlbmRpZiAvKiBfX0dOVUNfXyAqLworCiAvKgogICogU2ltcGxlIHNwaW4gbG9jayBvcGVyYXRpb25zLiAgVGhlcmUgYXJlIHR3byB2YXJpYW50cywgb25lIGNsZWFycyBJUlEncwogICogb24gdGhlIGxvY2FsIHByb2Nlc3Nvciwgb25lIGRvZXMgbm90LgpAQCAtMzEsMzQgKzUyLDQ2IEBACiAgKiAodGhlIHR5cGUgZGVmaW5pdGlvbnMgYXJlIGluIGFzbS9zcGlubG9ja190eXBlcy5oKQogICovCiAKLSNkZWZpbmUgX19yYXdfc3Bpbl9pc19sb2NrZWQoeCkgKCh4KS0+bG9jayAhPSAwKQorI2RlZmluZSBfX3Jhd19zcGluX2lzX2xvY2tlZCh4KSAoKHgpLT5vd25lcl9jcHUgIT0gMCkKICNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrX2ZsYWdzKGxvY2ssIGZsYWdzKSBfX3Jhd19zcGluX2xvY2sobG9jaykKICNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBcCi0JZG8geyB3aGlsZSAoX19yYXdfc3Bpbl9pc19sb2NrZWQobG9jaykpIGNwdV9yZWxheCgpOyB9IHdoaWxlICgwKQorCWRvIHsgd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKSBcCisJCSBfcmF3X3NwaW5fcmVsYXgobG9jayk7IH0gd2hpbGUgKDApCiAKLWV4dGVybiB2b2lkIF9yYXdfc3Bpbl9sb2NrX3dhaXQocmF3X3NwaW5sb2NrX3QgKmxwLCB1bnNpZ25lZCBpbnQgcGMpOwotZXh0ZXJuIGludCBfcmF3X3NwaW5fdHJ5bG9ja19yZXRyeShyYXdfc3BpbmxvY2tfdCAqbHAsIHVuc2lnbmVkIGludCBwYyk7CitleHRlcm4gdm9pZCBfcmF3X3NwaW5fbG9ja193YWl0KHJhd19zcGlubG9ja190ICosIHVuc2lnbmVkIGludCBwYyk7CitleHRlcm4gaW50IF9yYXdfc3Bpbl90cnlsb2NrX3JldHJ5KHJhd19zcGlubG9ja190ICosIHVuc2lnbmVkIGludCBwYyk7CitleHRlcm4gdm9pZCBfcmF3X3NwaW5fcmVsYXgocmF3X3NwaW5sb2NrX3QgKmxvY2spOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19yYXdfc3Bpbl9sb2NrKHJhd19zcGlubG9ja190ICpscCkKIHsKIAl1bnNpZ25lZCBsb25nIHBjID0gMSB8ICh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJaW50IG9sZDsKIAotCWlmICh1bmxpa2VseShfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5sb2NrLCAwLCBwYykgIT0gMCkpCi0JCV9yYXdfc3Bpbl9sb2NrX3dhaXQobHAsIHBjKTsKKwlvbGQgPSBfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIDAsIH5zbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChsaWtlbHkob2xkID09IDApKSB7CisJCWxwLT5vd25lcl9wYyA9IHBjOworCQlyZXR1cm47CisJfQorCV9yYXdfc3Bpbl9sb2NrX3dhaXQobHAsIHBjKTsKIH0KIAogc3RhdGljIGlubGluZSBpbnQgX19yYXdfc3Bpbl90cnlsb2NrKHJhd19zcGlubG9ja190ICpscCkKIHsKIAl1bnNpZ25lZCBsb25nIHBjID0gMSB8ICh1bnNpZ25lZCBsb25nKSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CisJaW50IG9sZDsKIAotCWlmIChsaWtlbHkoX3Jhd19jb21wYXJlX2FuZF9zd2FwKCZscC0+bG9jaywgMCwgcGMpID09IDApKQorCW9sZCA9IF9yYXdfY29tcGFyZV9hbmRfc3dhcCgmbHAtPm93bmVyX2NwdSwgMCwgfnNtcF9wcm9jZXNzb3JfaWQoKSk7CisJaWYgKGxpa2VseShvbGQgPT0gMCkpIHsKKwkJbHAtPm93bmVyX3BjID0gcGM7CiAJCXJldHVybiAxOworCX0KIAlyZXR1cm4gX3Jhd19zcGluX3RyeWxvY2tfcmV0cnkobHAsIHBjKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIF9fcmF3X3NwaW5fdW5sb2NrKHJhd19zcGlubG9ja190ICpscCkKIHsKLQlfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5sb2NrLCBscC0+bG9jaywgMCk7CisJbHAtPm93bmVyX3BjID0gMDsKKwlfcmF3X2NvbXBhcmVfYW5kX3N3YXAoJmxwLT5vd25lcl9jcHUsIGxwLT5vd25lcl9jcHUsIDApOwogfQogCQkKIC8qCkBAIC0xMzUsNCArMTY4LDcgQEAKIAlyZXR1cm4gX3Jhd193cml0ZV90cnlsb2NrX3JldHJ5KHJ3KTsKIH0KIAorI2RlZmluZSBfcmF3X3JlYWRfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd193cml0ZV9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorCiAjZW5kaWYgLyogX19BU01fU1BJTkxPQ0tfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tczM5MC9zcGlubG9ja190eXBlcy5oIGIvaW5jbHVkZS9hc20tczM5MC9zcGlubG9ja190eXBlcy5oCmluZGV4IGY3OWEyMjEuLmI3YWMxM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc3BpbmxvY2tfdHlwZXMuaAorKysgYi9pbmNsdWRlL2FzbS1zMzkwL3NwaW5sb2NrX3R5cGVzLmgKQEAgLTYsMTYgKzYsMTYgQEAKICNlbmRpZgogCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7CisJdm9sYXRpbGUgdW5zaWduZWQgaW50IG93bmVyX2NwdTsKKwl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgb3duZXJfcGM7CiB9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICg0KSkpIHJhd19zcGlubG9ja190OwogCiAjZGVmaW5lIF9fUkFXX1NQSU5fTE9DS19VTkxPQ0tFRAl7IDAgfQogCiB0eXBlZGVmIHN0cnVjdCB7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50IGxvY2s7Ci0Jdm9sYXRpbGUgdW5zaWduZWQgaW50IG93bmVyX3BjOwogfSByYXdfcndsb2NrX3Q7CiAKLSNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwLCAwIH0KKyNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRAkJeyAwIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3N0cmluZy5oIGIvaW5jbHVkZS9hc20tczM5MC9zdHJpbmcuaAppbmRleCAyM2E0YzM5Li5kMDc0NjczIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3N0cmluZy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvc3RyaW5nLmgKQEAgLTYwLDEyICs2MCwxMyBAQAogCXJlZ2lzdGVyIGludCByMCBhc20oIjAiKSA9IChjaGFyKSBjOwogCWNvbnN0IHZvaWQgKnJldCA9IHMgKyBuOwogCi0JYXNtIHZvbGF0aWxlICgiMDogc3JzdCAgJTAsJTFcbiIKLQkJICAgICAgIiAgIGpvICAgIDBiXG4iCi0JCSAgICAgICIgICBqbAkxZlxuIgotCQkgICAgICAiICAgbGEgICAgJTAsMFxuIgotCQkgICAgICAiMToiCi0JCSAgICAgIDogIithIiAocmV0KSwgIismYSIgKHMpIDogImQiIChyMCkgOiAiY2MiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiMDoJc3JzdAklMCwlMVxuIgorCQkiCWpvCTBiXG4iCisJCSIJamwJMWZcbiIKKwkJIglsYQklMCwwXG4iCisJCSIxOiIKKwkJOiAiK2EiIChyZXQpLCAiKyZhIiAocykgOiAiZCIgKHIwKSA6ICJjYyIpOwogCXJldHVybiAodm9pZCAqKSByZXQ7CiB9CiAKQEAgLTc0LDkgKzc1LDEwIEBACiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gKGNoYXIpIGM7CiAJY29uc3Qgdm9pZCAqcmV0ID0gcyArIG47CiAKLQlhc20gdm9sYXRpbGUgKCIwOiBzcnN0ICAlMCwlMVxuIgotCQkgICAgICAiICAgam8gICAgMGJcbiIKLQkJICAgICAgOiAiK2EiIChyZXQpLCAiKyZhIiAocykgOiAiZCIgKHIwKSA6ICJjYyIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIwOglzcnN0CSUwLCUxXG4iCisJCSIJam8JMGJcbiIKKwkJOiAiK2EiIChyZXQpLCAiKyZhIiAocykgOiAiZCIgKHIwKSA6ICJjYyIpOwogCXJldHVybiAodm9pZCAqKSByZXQ7CiB9CiAKQEAgLTg2LDEyICs4OCwxMyBAQAogCXVuc2lnbmVkIGxvbmcgZHVtbXk7CiAJY2hhciAqcmV0ID0gZHN0OwogCi0JYXNtIHZvbGF0aWxlICgiMDogc3JzdCAgJTAsJTFcbiIKLQkJICAgICAgIiAgIGpvICAgIDBiXG4iCi0JCSAgICAgICIxOiBtdnN0ICAlMCwlMlxuIgotCQkgICAgICAiICAgam8gICAgMWIiCi0JCSAgICAgIDogIj0mYSIgKGR1bW15KSwgIithIiAoZHN0KSwgIithIiAoc3JjKQotCQkgICAgICA6ICJkIiAocjApLCAiMCIgKDApIDogImNjIiwgIm1lbW9yeSIgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIwOglzcnN0CSUwLCUxXG4iCisJCSIJam8JMGJcbiIKKwkJIjE6CW12c3QJJTAsJTJcbiIKKwkJIglqbwkxYiIKKwkJOiAiPSZhIiAoZHVtbXkpLCAiK2EiIChkc3QpLCAiK2EiIChzcmMpCisJCTogImQiIChyMCksICIwIiAoMCkgOiAiY2MiLCAibWVtb3J5IiApOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTEwMCwxMCArMTAzLDExIEBACiAJcmVnaXN0ZXIgaW50IHIwIGFzbSgiMCIpID0gMDsKIAljaGFyICpyZXQgPSBkc3Q7CiAKLQlhc20gdm9sYXRpbGUgKCIwOiBtdnN0ICAlMCwlMVxuIgotCQkgICAgICAiICAgam8gICAgMGIiCi0JCSAgICAgIDogIismYSIgKGRzdCksICIrJmEiIChzcmMpIDogImQiIChyMCkKLQkJICAgICAgOiAiY2MiLCAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CW12c3QJJTAsJTFcbiIKKwkJIglqbwkwYiIKKwkJOiAiKyZhIiAoZHN0KSwgIismYSIgKHNyYykgOiAiZCIgKHIwKQorCQk6ICJjYyIsICJtZW1vcnkiKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0xMTIsOSArMTE2LDEwIEBACiAJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByMCBhc20oIjAiKSA9IDA7CiAJY29uc3QgY2hhciAqdG1wID0gczsKIAotCWFzbSB2b2xhdGlsZSAoIjA6IHNyc3QgICUwLCUxXG4iCi0JCSAgICAgICIgICBqbyAgICAwYiIKLQkJICAgICAgOiAiK2QiIChyMCksICIrYSIgKHRtcCkgOiAgOiAiY2MiICk7CisJYXNtIHZvbGF0aWxlKAorCQkiMDoJc3JzdAklMCwlMVxuIgorCQkiCWpvCTBiIgorCQk6ICIrZCIgKHIwKSwgIithIiAodG1wKSA6ICA6ICJjYyIpOwogCXJldHVybiByMCAtICh1bnNpZ25lZCBsb25nKSBzOwogfQogCkBAIC0xMjQsOSArMTI5LDEwIEBACiAJY29uc3QgY2hhciAqdG1wID0gczsKIAljb25zdCBjaGFyICplbmQgPSBzICsgbjsKIAotCWFzbSB2b2xhdGlsZSAoIjA6IHNyc3QgICUwLCUxXG4iCi0JCSAgICAgICIgICBqbyAgICAwYiIKLQkJICAgICAgOiAiK2EiIChlbmQpLCAiK2EiICh0bXApIDogImQiIChyMCkgIDogImNjIiApOworCWFzbSB2b2xhdGlsZSgKKwkJIjA6CXNyc3QJJTAsJTFcbiIKKwkJIglqbwkwYiIKKwkJOiAiK2EiIChlbmQpLCAiK2EiICh0bXApIDogImQiIChyMCkgIDogImNjIik7CiAJcmV0dXJuIGVuZCAtIHM7CiB9CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmggYi9pbmNsdWRlL2FzbS1zMzkwL3N5c3RlbS5oCmluZGV4IDE2MDQwMDQuLmNjYmFmZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tczM5MC9zeXN0ZW0uaApAQCAtMjMsNzQgKzIzLDY4IEBACiAKIGV4dGVybiBzdHJ1Y3QgdGFza19zdHJ1Y3QgKl9fc3dpdGNoX3RvKHZvaWQgKiwgdm9pZCAqKTsKIAotI2lmZGVmIF9fczM5MHhfXwotI2RlZmluZSBfX0ZMQUdfU0hJRlQgNTYKLSNlbHNlIC8qICEgX19zMzkweF9fICovCi0jZGVmaW5lIF9fRkxBR19TSElGVCAyNAotI2VuZGlmIC8qICEgX19zMzkweF9fICovCi0KIHN0YXRpYyBpbmxpbmUgdm9pZCBzYXZlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7Ci0JYXNtIHZvbGF0aWxlICgKLQkJIiAgIHN0ZCAgIDAsOCglMSlcbiIKLQkJIiAgIHN0ZCAgIDIsMjQoJTEpXG4iCi0JCSIgICBzdGQgICA0LDQwKCUxKVxuIgotCQkiICAgc3RkICAgNiw1NiglMSkiCi0JCTogIj1tIiAoKmZwcmVncykgOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgOiAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgKKwkJIglzdGQJMCw4KCUxKVxuIgorCQkiCXN0ZAkyLDI0KCUxKVxuIgorCQkiCXN0ZAk0LDQwKCUxKVxuIgorCQkiCXN0ZAk2LDU2KCUxKSIKKwkJOiAiPW0iICgqZnByZWdzKSA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSA6ICJtZW1vcnkiKTsKIAlpZiAoIU1BQ0hJTkVfSEFTX0lFRUUpCiAJCXJldHVybjsKIAlhc20gdm9sYXRpbGUoCi0JCSIgICBzdGZwYyAwKCUxKVxuIgotCQkiICAgc3RkICAgMSwxNiglMSlcbiIKLQkJIiAgIHN0ZCAgIDMsMzIoJTEpXG4iCi0JCSIgICBzdGQgICA1LDQ4KCUxKVxuIgotCQkiICAgc3RkICAgNyw2NCglMSlcbiIKLQkJIiAgIHN0ZCAgIDgsNzIoJTEpXG4iCi0JCSIgICBzdGQgICA5LDgwKCUxKVxuIgotCQkiICAgc3RkICAgMTAsODgoJTEpXG4iCi0JCSIgICBzdGQgICAxMSw5NiglMSlcbiIKLQkJIiAgIHN0ZCAgIDEyLDEwNCglMSlcbiIKLQkJIiAgIHN0ZCAgIDEzLDExMiglMSlcbiIKLQkJIiAgIHN0ZCAgIDE0LDEyMCglMSlcbiIKLQkJIiAgIHN0ZCAgIDE1LDEyOCglMSlcbiIKLQkJOiAiPW0iICgqZnByZWdzKSA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSA6ICJtZW1vcnkiICk7CisJCSIJc3RmcGMJMCglMSlcbiIKKwkJIglzdGQJMSwxNiglMSlcbiIKKwkJIglzdGQJMywzMiglMSlcbiIKKwkJIglzdGQJNSw0OCglMSlcbiIKKwkJIglzdGQJNyw2NCglMSlcbiIKKwkJIglzdGQJOCw3MiglMSlcbiIKKwkJIglzdGQJOSw4MCglMSlcbiIKKwkJIglzdGQJMTAsODgoJTEpXG4iCisJCSIJc3RkCTExLDk2KCUxKVxuIgorCQkiCXN0ZAkxMiwxMDQoJTEpXG4iCisJCSIJc3RkCTEzLDExMiglMSlcbiIKKwkJIglzdGQJMTQsMTIwKCUxKVxuIgorCQkiCXN0ZAkxNSwxMjgoJTEpXG4iCisJCTogIj1tIiAoKmZwcmVncykgOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgOiAibWVtb3J5Iik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCByZXN0b3JlX2ZwX3JlZ3MoczM5MF9mcF9yZWdzICpmcHJlZ3MpCiB7Ci0JYXNtIHZvbGF0aWxlICgKLQkJIiAgIGxkICAgIDAsOCglMClcbiIKLQkJIiAgIGxkICAgIDIsMjQoJTApXG4iCi0JCSIgICBsZCAgICA0LDQwKCUwKVxuIgotCQkiICAgbGQgICAgNiw1NiglMCkiCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgKTsKKwlhc20gdm9sYXRpbGUoCisJCSIJbGQJMCw4KCUwKVxuIgorCQkiCWxkCTIsMjQoJTApXG4iCisJCSIJbGQJNCw0MCglMClcbiIKKwkJIglsZAk2LDU2KCUwKSIKKwkJOiA6ICJhIiAoZnByZWdzKSwgIm0iICgqZnByZWdzKSk7CiAJaWYgKCFNQUNISU5FX0hBU19JRUVFKQogCQlyZXR1cm47CiAJYXNtIHZvbGF0aWxlKAotCQkiICAgbGZwYyAgMCglMClcbiIKLQkJIiAgIGxkICAgIDEsMTYoJTApXG4iCi0JCSIgICBsZCAgICAzLDMyKCUwKVxuIgotCQkiICAgbGQgICAgNSw0OCglMClcbiIKLQkJIiAgIGxkICAgIDcsNjQoJTApXG4iCi0JCSIgICBsZCAgICA4LDcyKCUwKVxuIgotCQkiICAgbGQgICAgOSw4MCglMClcbiIKLQkJIiAgIGxkICAgIDEwLDg4KCUwKVxuIgotCQkiICAgbGQgICAgMTEsOTYoJTApXG4iCi0JCSIgICBsZCAgICAxMiwxMDQoJTApXG4iCi0JCSIgICBsZCAgICAxMywxMTIoJTApXG4iCi0JCSIgICBsZCAgICAxNCwxMjAoJTApXG4iCi0JCSIgICBsZCAgICAxNSwxMjgoJTApXG4iCi0JCTogOiAiYSIgKGZwcmVncyksICJtIiAoKmZwcmVncykgKTsKKwkJIglsZnBjCTAoJTApXG4iCisJCSIJbGQJMSwxNiglMClcbiIKKwkJIglsZAkzLDMyKCUwKVxuIgorCQkiCWxkCTUsNDgoJTApXG4iCisJCSIJbGQJNyw2NCglMClcbiIKKwkJIglsZAk4LDcyKCUwKVxuIgorCQkiCWxkCTksODAoJTApXG4iCisJCSIJbGQJMTAsODgoJTApXG4iCisJCSIJbGQJMTEsOTYoJTApXG4iCisJCSIJbGQJMTIsMTA0KCUwKVxuIgorCQkiCWxkCTEzLDExMiglMClcbiIKKwkJIglsZAkxNCwxMjAoJTApXG4iCisJCSIJbGQJMTUsMTI4KCUwKVxuIgorCQk6IDogImEiIChmcHJlZ3MpLCAibSIgKCpmcHJlZ3MpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHNhdmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSAoInN0YW0gMCwxNSwwKCUwKSIgOiA6ICJhIiAoYWNycykgOiAibWVtb3J5IiApOworCWFzbSB2b2xhdGlsZSgic3RhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSA6ICJtZW1vcnkiKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHJlc3RvcmVfYWNjZXNzX3JlZ3ModW5zaWduZWQgaW50ICphY3JzKQogewotCWFzbSB2b2xhdGlsZSAoImxhbSAwLDE1LDAoJTApIiA6IDogImEiIChhY3JzKSApOworCWFzbSB2b2xhdGlsZSgibGFtIDAsMTUsMCglMCkiIDogOiAiYSIgKGFjcnMpKTsKIH0KIAogI2RlZmluZSBzd2l0Y2hfdG8ocHJldixuZXh0LGxhc3QpIGRvIHsJCQkJCSAgICAgXApAQCAtMTI2LDcgKzEyMCw3IEBACiAJYWNjb3VudF92dGltZShwcmV2KTsJCQkJCQkgICAgIFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgbm9wKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3AiKQorI2RlZmluZSBub3AoKSBhc20gdm9sYXRpbGUoIm5vcCIpCiAKICNkZWZpbmUgeGNoZyhwdHIseCkJCQkJCQkJICBcCiAoewkJCQkJCQkJCSAgXApAQCAtMTQ3LDE1ICsxNDEsMTUgQEAKIAkJc2hpZnQgPSAoMyBeIChhZGRyICYgMykpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDM7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIgICAgbCAgICUwLDAoJTQpXG4iCi0JCQkiMDogIGxyICAwLCUwXG4iCi0JCQkiICAgIG5yICAwLCUzXG4iCi0JCQkiICAgIG9yICAwLCUyXG4iCi0JCQkiICAgIGNzICAlMCwwLDAoJTQpXG4iCi0JCQkiICAgIGpsICAwYlxuIgorCQkJIglsCSUwLDAoJTQpXG4iCisJCQkiMDoJbHIJMCwlMFxuIgorCQkJIglucgkwLCUzXG4iCisJCQkiCW9yCTAsJTJcbiIKKwkJCSIJY3MJJTAsMCwwKCU0KVxuIgorCQkJIglqbAkwYlxuIgogCQkJOiAiPSZkIiAob2xkKSwgIj1tIiAoKihpbnQgKikgYWRkcikKIAkJCTogImQiICh4IDw8IHNoaWZ0KSwgImQiICh+KDI1NSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIiApOworCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CiAJCXggPSBvbGQgPj4gc2hpZnQ7CiAJCWJyZWFrOwogCWNhc2UgMjoKQEAgLTE2MywzNiArMTU3LDM2IEBACiAJCXNoaWZ0ID0gKDIgXiAoYWRkciAmIDIpKSA8PCAzOwogCQlhZGRyIF49IGFkZHIgJiAyOwogCQlhc20gdm9sYXRpbGUoCi0JCQkiICAgIGwgICAlMCwwKCU0KVxuIgotCQkJIjA6ICBsciAgMCwlMFxuIgotCQkJIiAgICBuciAgMCwlM1xuIgotCQkJIiAgICBvciAgMCwlMlxuIgotCQkJIiAgICBjcyAgJTAsMCwwKCU0KVxuIgotCQkJIiAgICBqbCAgMGJcbiIKKwkJCSIJbAklMCwwKCU0KVxuIgorCQkJIjA6CWxyCTAsJTBcbiIKKwkJCSIJbnIJMCwlM1xuIgorCQkJIglvcgkwLCUyXG4iCisJCQkiCWNzCSUwLDAsMCglNClcbiIKKwkJCSIJamwJMGJcbiIKIAkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIGFkZHIpCiAJCQk6ICJkIiAoeCA8PCBzaGlmdCksICJkIiAofig2NTUzNSA8PCBzaGlmdCkpLCAiYSIgKGFkZHIpLAotCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIiApOworCQkJICAibSIgKCooaW50ICopIGFkZHIpIDogIm1lbW9yeSIsICJjYyIsICIwIik7CiAJCXggPSBvbGQgPj4gc2hpZnQ7CiAJCWJyZWFrOwogCWNhc2UgNDoKLQkJYXNtIHZvbGF0aWxlICgKLQkJCSIgICAgbCAgICUwLDAoJTMpXG4iCi0JCQkiMDogIGNzICAlMCwlMiwwKCUzKVxuIgotCQkJIiAgICBqbCAgMGJcbiIKKwkJYXNtIHZvbGF0aWxlKAorCQkJIglsCSUwLDAoJTMpXG4iCisJCQkiMDoJY3MJJTAsJTIsMCglMylcbiIKKwkJCSIJamwJMGJcbiIKIAkJCTogIj0mZCIgKG9sZCksICI9bSIgKCooaW50ICopIHB0cikKIAkJCTogImQiICh4KSwgImEiIChwdHIpLCAibSIgKCooaW50ICopIHB0cikKLQkJCTogIm1lbW9yeSIsICJjYyIgKTsKKwkJCTogIm1lbW9yeSIsICJjYyIpOwogCQl4ID0gb2xkOwogCQlicmVhazsKICNpZmRlZiBfX3MzOTB4X18KIAljYXNlIDg6Ci0JCWFzbSB2b2xhdGlsZSAoCi0JCQkiICAgIGxnICAlMCwwKCUzKVxuIgotCQkJIjA6ICBjc2cgJTAsJTIsMCglMylcbiIKLQkJCSIgICAgamwgIDBiXG4iCisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJbGcJJTAsMCglMylcbiIKKwkJCSIwOgljc2cJJTAsJTIsMCglMylcbiIKKwkJCSIJamwJMGJcbiIKIAkJCTogIj0mZCIgKG9sZCksICI9bSIgKCoobG9uZyAqKSBwdHIpCiAJCQk6ICJkIiAoeCksICJhIiAocHRyKSwgIm0iICgqKGxvbmcgKikgcHRyKQotCQkJOiAibWVtb3J5IiwgImNjIiApOworCQkJOiAibWVtb3J5IiwgImNjIik7CiAJCXggPSBvbGQ7CiAJCWJyZWFrOwogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwpAQCAtMjI0LDU1ICsyMTgsNTUgQEAKIAkJc2hpZnQgPSAoMyBeIChhZGRyICYgMykpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDM7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIgICAgbCAgICUwLDAoJTQpXG4iCi0JCQkiMDogIG5yICAlMCwlNVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBsciAgJTEsJTBcbiIKLQkJCSIgICAgb3IgICUwLCUyXG4iCi0JCQkiICAgIG9yICAlMSwlM1xuIgotCQkJIiAgICBjcyAgJTAsJTEsMCglNClcbiIKLQkJCSIgICAgam5sIDFmXG4iCi0JCQkiICAgIHhyICAlMSwlMFxuIgotCQkJIiAgICBuciAgJTEsJTVcbiIKLQkJCSIgICAgam56IDBiXG4iCisJCQkiCWwJJTAsMCglNClcbiIKKwkJCSIwOglucgklMCwlNVxuIgorCQkJIglscgklMSwlMFxuIgorCQkJIglvcgklMCwlMlxuIgorCQkJIglvcgklMSwlM1xuIgorCQkJIgljcwklMCwlMSwwKCU0KVxuIgorCQkJIglqbmwJMWZcbiIKKwkJCSIJeHIJJTEsJTBcbiIKKwkJCSIJbnIJJTEsJTVcbiIKKwkJCSIJam56CTBiXG4iCiAJCQkiMToiCiAJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKIAkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKIAkJCSAgImQiICh+KDI1NSA8PCBzaGlmdCkpCi0JCQk6ICJtZW1vcnkiLCAiY2MiICk7CisJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXYgPj4gc2hpZnQ7CiAJY2FzZSAyOgogCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpIHB0cjsKIAkJc2hpZnQgPSAoMiBeIChhZGRyICYgMikpIDw8IDM7CiAJCWFkZHIgXj0gYWRkciAmIDI7CiAJCWFzbSB2b2xhdGlsZSgKLQkJCSIgICAgbCAgICUwLDAoJTQpXG4iCi0JCQkiMDogIG5yICAlMCwlNVxuIgotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICBsciAgJTEsJTBcbiIKLQkJCSIgICAgb3IgICUwLCUyXG4iCi0JCQkiICAgIG9yICAlMSwlM1xuIgotCQkJIiAgICBjcyAgJTAsJTEsMCglNClcbiIKLQkJCSIgICAgam5sIDFmXG4iCi0JCQkiICAgIHhyICAlMSwlMFxuIgotCQkJIiAgICBuciAgJTEsJTVcbiIKLQkJCSIgICAgam56IDBiXG4iCisJCQkiCWwJJTAsMCglNClcbiIKKwkJCSIwOglucgklMCwlNVxuIgorCQkJIglscgklMSwlMFxuIgorCQkJIglvcgklMCwlMlxuIgorCQkJIglvcgklMSwlM1xuIgorCQkJIgljcwklMCwlMSwwKCU0KVxuIgorCQkJIglqbmwJMWZcbiIKKwkJCSIJeHIJJTEsJTBcbiIKKwkJCSIJbnIJJTEsJTVcbiIKKwkJCSIJam56CTBiXG4iCiAJCQkiMToiCiAJCQk6ICI9JmQiIChwcmV2KSwgIj0mZCIgKHRtcCkKIAkJCTogImQiIChvbGQgPDwgc2hpZnQpLCAiZCIgKG5ldyA8PCBzaGlmdCksICJhIiAocHRyKSwKIAkJCSAgImQiICh+KDY1NTM1IDw8IHNoaWZ0KSkKLQkJCTogIm1lbW9yeSIsICJjYyIgKTsKKwkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldiA+PiBzaGlmdDsKIAljYXNlIDQ6Ci0JCWFzbSB2b2xhdGlsZSAoCi0JCQkiICAgIGNzICAlMCwlMiwwKCUzKVxuIgorCQlhc20gdm9sYXRpbGUoCisJCQkiCWNzCSUwLCUyLDAoJTMpXG4iCiAJCQk6ICI9JmQiIChwcmV2KSA6ICIwIiAob2xkKSwgImQiIChuZXcpLCAiYSIgKHB0cikKLQkJCTogIm1lbW9yeSIsICJjYyIgKTsKKwkJCTogIm1lbW9yeSIsICJjYyIpOwogCQlyZXR1cm4gcHJldjsKICNpZmRlZiBfX3MzOTB4X18KIAljYXNlIDg6Ci0JCWFzbSB2b2xhdGlsZSAoCi0JCQkiICAgIGNzZyAlMCwlMiwwKCUzKVxuIgorCQlhc20gdm9sYXRpbGUoCisJCQkiCWNzZwklMCwlMiwwKCUzKVxuIgogCQkJOiAiPSZkIiAocHJldikgOiAiMCIgKG9sZCksICJkIiAobmV3KSwgImEiIChwdHIpCi0JCQk6ICJtZW1vcnkiLCAiY2MiICk7CisJCQk6ICJtZW1vcnkiLCAiY2MiKTsKIAkJcmV0dXJuIHByZXY7CiAjZW5kaWYgLyogX19zMzkweF9fICovCiAgICAgICAgIH0KQEAgLTI4OSw4ICsyODMsOCBAQAogICogYWxsIG1lbW9yeSBvcHMgaGF2ZSBjb21wbGV0ZWQgd3J0IG90aGVyIENQVSdzICggc2VlIDctMTUgUE9QICBESkIgKS4KICAqLwogCi0jZGVmaW5lIGVpZWlvKCkgIF9fYXNtX18gX192b2xhdGlsZV9fICggImJjciAxNSwwIiA6IDogOiAibWVtb3J5IiApIAotIyBkZWZpbmUgU1lOQ19PVEhFUl9DT1JFUyh4KSAgIGVpZWlvKCkgCisjZGVmaW5lIGVpZWlvKCkJYXNtIHZvbGF0aWxlKCJiY3IgMTUsMCIgOiA6IDogIm1lbW9yeSIpCisjZGVmaW5lIFNZTkNfT1RIRVJfQ09SRVMoeCkgICBlaWVpbygpCiAjZGVmaW5lIG1iKCkgICAgZWllaW8oKQogI2RlZmluZSBybWIoKSAgIGVpZWlvKCkKICNkZWZpbmUgd21iKCkgICBlaWVpbygpCkBAIC0zMDcsMTE3ICszMDEsNTYgQEAKIAogI2lmZGVmIF9fczM5MHhfXwogCi0jZGVmaW5lIF9fY3RsX2xvYWQoYXJyYXksIGxvdywgaGlnaCkgKHsgXAotCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOyBcCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0JCSIgICBicmFzICAxLDBmXG4iIFwKLSAgICAgICAgICAgICAgICAiICAgbGN0bGcgMCwwLDAoJTApXG4iIFwKLQkJIjA6IGV4ICAgICUxLDAoMSkiIFwKLQkJOiA6ICJhIiAoJmFycmF5KSwgImEiICgoKGxvdyk8PDQpKyhoaWdoKSksIFwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKShhcnJheSkpIDogIjEiICk7IFwKKyNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWxjdGxnCSUxLCUyLDAoJTApXG4iCQkJXAorCQk6IDogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCksCVwKKwkJICAgICJtIiAoKihhZGRydHlwZSAqKShhcnJheSkpKTsJCVwKIAl9KQogCi0jZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7IFwKLQl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICggXAotCQkiICAgYnJhcyAgMSwwZlxuIiBcCi0JCSIgICBzdGN0ZyAwLDAsMCglMSlcbiIgXAotCQkiMDogZXggICAgJTIsMCgxKSIgXAotCQk6ICI9bSIgKCooYWRkcnR5cGUgKikoYXJyYXkpKSBcCi0JCTogImEiICgmYXJyYXkpLCAiYSIgKCgobG93KTw8NCkrKGhpZ2gpKSA6ICIxIiApOyBcCisjZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7CQkJXAorCXR5cGVkZWYgc3RydWN0IHsgY2hhciBfW3NpemVvZihhcnJheSldOyB9IGFkZHJ0eXBlOwlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIglzdGN0ZwklMiwlMywwKCUxKVxuIgkJCVwKKwkJOiAiPW0iICgqKGFkZHJ0eXBlICopKGFycmF5KSkJCQlcCisJCTogImEiICgmYXJyYXkpLCAiaSIgKGxvdyksICJpIiAoaGlnaCkpOwkJXAogCX0pCiAKLSNkZWZpbmUgX19jdGxfc2V0X2JpdChjciwgYml0KSAoeyBcCi0gICAgICAgIF9fdTggX19kdW1teVsyNF07IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0gICAgICAgICAgICAgICAgIiAgICBicmFzICAxLDBmXG4iICAgICAgIC8qIHNraXAgaW5kaXJlY3QgaW5zbnMgKi8gXAotICAgICAgICAgICAgICAgICIgICAgc3RjdGcgMCwwLDAoJTEpXG4iIFwKLSAgICAgICAgICAgICAgICAiICAgIGxjdGxnIDAsMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIjA6ICBleCAgICAlMiwwKDEpXG4iICAgIC8qIGV4ZWN1dGUgc3RjdGwgKi8gXAotICAgICAgICAgICAgICAgICIgICAgbGcgICAgMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIiAgICBvZ3IgICAwLCUzXG4iICAgICAgIC8qIHNldCB0aGUgYml0ICovIFwKLSAgICAgICAgICAgICAgICAiICAgIHN0ZyAgIDAsMCglMSlcbiIgXAotICAgICAgICAgICAgICAgICIxOiAgZXggICAgJTIsNigxKSIgICAgICAvKiBleGVjdXRlIGxjdGwgKi8gXAotICAgICAgICAgICAgICAgIDogIj1tIiAoX19kdW1teSkgXAotCQk6ICJhIiAoKCgodW5zaWduZWQgbG9uZykgJl9fZHVtbXkpICsgNykgJiB+N1VMKSwgXAotCQkgICJhIiAoY3IqMTcpLCAiYSIgKDFMPDwoYml0KSkgXAotICAgICAgICAgICAgICAgIDogImNjIiwgIjAiLCAiMSIgKTsgXAotICAgICAgICB9KQotCi0jZGVmaW5lIF9fY3RsX2NsZWFyX2JpdChjciwgYml0KSAoeyBcCi0gICAgICAgIF9fdTggX19kdW1teVsxNl07IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0gICAgICAgICAgICAgICAgIiAgICBicmFzICAxLDBmXG4iICAgICAgIC8qIHNraXAgaW5kaXJlY3QgaW5zbnMgKi8gXAotICAgICAgICAgICAgICAgICIgICAgc3RjdGcgMCwwLDAoJTEpXG4iIFwKLSAgICAgICAgICAgICAgICAiICAgIGxjdGxnIDAsMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIjA6ICBleCAgICAlMiwwKDEpXG4iICAgIC8qIGV4ZWN1dGUgc3RjdGwgKi8gXAotICAgICAgICAgICAgICAgICIgICAgbGcgICAgMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIiAgICBuZ3IgICAwLCUzXG4iICAgICAgIC8qIHNldCB0aGUgYml0ICovIFwKLSAgICAgICAgICAgICAgICAiICAgIHN0ZyAgIDAsMCglMSlcbiIgXAotICAgICAgICAgICAgICAgICIxOiAgZXggICAgJTIsNigxKSIgICAgICAvKiBleGVjdXRlIGxjdGwgKi8gXAotICAgICAgICAgICAgICAgIDogIj1tIiAoX19kdW1teSkgXAotCQk6ICJhIiAoKCgodW5zaWduZWQgbG9uZykgJl9fZHVtbXkpICsgNykgJiB+N1VMKSwgXAotCQkgICJhIiAoY3IqMTcpLCAiYSIgKH4oMUw8PChiaXQpKSkgXAotICAgICAgICAgICAgICAgIDogImNjIiwgIjAiLCAiMSIgKTsgXAotICAgICAgICB9KQotCiAjZWxzZSAvKiBfX3MzOTB4X18gKi8KIAotI2RlZmluZSBfX2N0bF9sb2FkKGFycmF5LCBsb3csIGhpZ2gpICh7IFwKLQl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICggXAotCQkiICAgYnJhcyAgMSwwZlxuIiBcCi0gICAgICAgICAgICAgICAgIiAgIGxjdGwgMCwwLDAoJTApXG4iIFwKLQkJIjA6IGV4ICAgICUxLDAoMSkiIFwKLQkJOiA6ICJhIiAoJmFycmF5KSwgImEiICgoKGxvdyk8PDQpKyhoaWdoKSksIFwKLQkJICAgICJtIiAoKihhZGRydHlwZSAqKShhcnJheSkpIDogIjEiICk7IFwKKyNkZWZpbmUgX19jdGxfbG9hZChhcnJheSwgbG93LCBoaWdoKSAoewkJCQlcCisJdHlwZWRlZiBzdHJ1Y3QgeyBjaGFyIF9bc2l6ZW9mKGFycmF5KV07IH0gYWRkcnR5cGU7CVwKKwlhc20gdm9sYXRpbGUoCQkJCQkJXAorCQkiCWxjdGwJJTEsJTIsMCglMClcbiIJCQlcCisJCTogOiAiYSIgKCZhcnJheSksICJpIiAobG93KSwgImkiIChoaWdoKSwJXAorCQkgICAgIm0iICgqKGFkZHJ0eXBlICopKGFycmF5KSkpOwkJXAorfSkKKworI2RlZmluZSBfX2N0bF9zdG9yZShhcnJheSwgbG93LCBoaWdoKSAoewkJCVwKKwl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJc3RjdGwJJTIsJTMsMCglMSlcbiIJCQlcCisJCTogIj1tIiAoKihhZGRydHlwZSAqKShhcnJheSkpCQkJXAorCQk6ICJhIiAoJmFycmF5KSwgImkiIChsb3cpLCAiaSIgKGhpZ2gpKTsJCVwKIAl9KQogCi0jZGVmaW5lIF9fY3RsX3N0b3JlKGFycmF5LCBsb3csIGhpZ2gpICh7IFwKLQl0eXBlZGVmIHN0cnVjdCB7IGNoYXIgX1tzaXplb2YoYXJyYXkpXTsgfSBhZGRydHlwZTsgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICggXAotCQkiICAgYnJhcyAgMSwwZlxuIiBcCi0JCSIgICBzdGN0bCAwLDAsMCglMSlcbiIgXAotCQkiMDogZXggICAgJTIsMCgxKSIgXAotCQk6ICI9bSIgKCooYWRkcnR5cGUgKikoYXJyYXkpKSBcCi0JCTogImEiICgmYXJyYXkpLCAiYSIgKCgobG93KTw8NCkrKGhpZ2gpKTogIjEiICk7IFwKLQl9KQotCi0jZGVmaW5lIF9fY3RsX3NldF9iaXQoY3IsIGJpdCkgKHsgXAotICAgICAgICBfX3U4IF9fZHVtbXlbMTZdOyBcCi0gICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICggXAotICAgICAgICAgICAgICAgICIgICAgYnJhcyAgMSwwZlxuIiAgICAgICAvKiBza2lwIGluZGlyZWN0IGluc25zICovIFwKLSAgICAgICAgICAgICAgICAiICAgIHN0Y3RsIDAsMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIiAgICBsY3RsICAwLDAsMCglMSlcbiIgXAotICAgICAgICAgICAgICAgICIwOiAgZXggICAgJTIsMCgxKVxuIiAgICAvKiBleGVjdXRlIHN0Y3RsICovIFwKLSAgICAgICAgICAgICAgICAiICAgIGwgICAgIDAsMCglMSlcbiIgXAotICAgICAgICAgICAgICAgICIgICAgb3IgICAgMCwlM1xuIiAgICAgICAvKiBzZXQgdGhlIGJpdCAqLyBcCi0gICAgICAgICAgICAgICAgIiAgICBzdCAgICAwLDAoJTEpXG4iIFwKLSAgICAgICAgICAgICAgICAiMTogIGV4ICAgICUyLDQoMSkiICAgICAgLyogZXhlY3V0ZSBsY3RsICovIFwKLSAgICAgICAgICAgICAgICA6ICI9bSIgKF9fZHVtbXkpIFwKLQkJOiAiYSIgKCgoKHVuc2lnbmVkIGxvbmcpICZfX2R1bW15KSArIDcpICYgfjdVTCksIFwKLQkJICAiYSIgKGNyKjE3KSwgImEiICgxPDwoYml0KSkgXAotICAgICAgICAgICAgICAgIDogImNjIiwgIjAiLCAiMSIgKTsgXAotICAgICAgICB9KQotCi0jZGVmaW5lIF9fY3RsX2NsZWFyX2JpdChjciwgYml0KSAoeyBcCi0gICAgICAgIF9fdTggX19kdW1teVsxNl07IFwKLSAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCBcCi0gICAgICAgICAgICAgICAgIiAgICBicmFzICAxLDBmXG4iICAgICAgIC8qIHNraXAgaW5kaXJlY3QgaW5zbnMgKi8gXAotICAgICAgICAgICAgICAgICIgICAgc3RjdGwgMCwwLDAoJTEpXG4iIFwKLSAgICAgICAgICAgICAgICAiICAgIGxjdGwgIDAsMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIjA6ICBleCAgICAlMiwwKDEpXG4iICAgIC8qIGV4ZWN1dGUgc3RjdGwgKi8gXAotICAgICAgICAgICAgICAgICIgICAgbCAgICAgMCwwKCUxKVxuIiBcCi0gICAgICAgICAgICAgICAgIiAgICBuciAgICAwLCUzXG4iICAgICAgIC8qIHNldCB0aGUgYml0ICovIFwKLSAgICAgICAgICAgICAgICAiICAgIHN0ICAgIDAsMCglMSlcbiIgXAotICAgICAgICAgICAgICAgICIxOiAgZXggICAgJTIsNCgxKSIgICAgICAvKiBleGVjdXRlIGxjdGwgKi8gXAotICAgICAgICAgICAgICAgIDogIj1tIiAoX19kdW1teSkgXAotCQk6ICJhIiAoKCgodW5zaWduZWQgbG9uZykgJl9fZHVtbXkpICsgNykgJiB+N1VMKSwgXAotCQkgICJhIiAoY3IqMTcpLCAiYSIgKH4oMTw8KGJpdCkpKSBcCi0gICAgICAgICAgICAgICAgOiAiY2MiLCAiMCIsICIxIiApOyBcCi0gICAgICAgIH0pCiAjZW5kaWYgLyogX19zMzkweF9fICovCiAKKyNkZWZpbmUgX19jdGxfc2V0X2JpdChjciwgYml0KSAoewlcCisJdW5zaWduZWQgbG9uZyBfX2R1bW15OwkJXAorCV9fY3RsX3N0b3JlKF9fZHVtbXksIGNyLCBjcik7CVwKKwlfX2R1bW15IHw9IDFVTCA8PCAoYml0KTsJXAorCV9fY3RsX2xvYWQoX19kdW1teSwgY3IsIGNyKTsJXAorfSkKKworI2RlZmluZSBfX2N0bF9jbGVhcl9iaXQoY3IsIGJpdCkgKHsJXAorCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCVwKKwlfX2N0bF9zdG9yZShfX2R1bW15LCBjciwgY3IpOwlcCisJX19kdW1teSAmPSB+KDFVTCA8PCAoYml0KSk7CVwKKwlfX2N0bF9sb2FkKF9fZHVtbXksIGNyLCBjcik7CVwKK30pCisKICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgogCiAvKgpAQCAtNDI3LDggKzM2MCw3IEBACiBzdGF0aWMgaW5saW5lIHZvaWQKIF9fc2V0X3Bzd19tYXNrKHVuc2lnbmVkIGxvbmcgbWFzaykKIHsKLQlsb2NhbF9zYXZlX2ZsYWdzKG1hc2spOwotCV9fbG9hZF9wc3dfbWFzayhtYXNrKTsKKwlfX2xvYWRfcHN3X21hc2sobWFzayB8IChfX3Jhd19sb2NhbF9pcnFfc3Rvc20oMHgwMCkgJiB+KC0xVUwgPj4gOCkpKTsKIH0KIAogI2RlZmluZSBsb2NhbF9tY2NrX2VuYWJsZSgpICBfX3NldF9wc3dfbWFzayhQU1dfS0VSTkVMX0JJVFMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3RpbWV4LmggYi9pbmNsdWRlL2FzbS1zMzkwL3RpbWV4LmgKaW5kZXggNWQwMzMyYS4uNGRmNGE0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC90aW1leC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGltZXguaApAQCAtMTUsMjAgKzE1LDIxIEBACiAKIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGN5Y2xlc190OwogCi1zdGF0aWMgaW5saW5lIGN5Y2xlc190IGdldF9jeWNsZXModm9pZCkKLXsKLQljeWNsZXNfdCBjeWNsZXM7Ci0KLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInN0Y2sgMCglMSkiIDogIj1tIiAoY3ljbGVzKSA6ICJhIiAoJmN5Y2xlcykgOiAiY2MiKTsKLQlyZXR1cm4gY3ljbGVzID4+IDI7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGdldF9jbG9jayAodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIGxvbmcgY2xrOwogCi0JX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzdGNrIDAoJTEpIiA6ICI9bSIgKGNsaykgOiAiYSIgKCZjbGspIDogImNjIik7CisjaWYgX19HTlVDX18gPiAzIHx8IChfX0dOVUNfXyA9PSAzICYmIF9fR05VQ19NSU5PUl9fID4gMikKKwlhc20gdm9sYXRpbGUoInN0Y2sgJTAiIDogIj1RIiAoY2xrKSA6IDogImNjIik7CisjZWxzZSAvKiBfX0dOVUNfXyAqLworCWFzbSB2b2xhdGlsZSgic3RjayAwKCUxKSIgOiAiPW0iIChjbGspIDogImEiICgmY2xrKSA6ICJjYyIpOworI2VuZGlmIC8qIF9fR05VQ19fICovCiAJcmV0dXJuIGNsazsKIH0KIAorc3RhdGljIGlubGluZSBjeWNsZXNfdCBnZXRfY3ljbGVzKHZvaWQpCit7CisJcmV0dXJuIChjeWNsZXNfdCkgZ2V0X2Nsb2NrKCkgPj4gMjsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmggYi9pbmNsdWRlL2FzbS1zMzkwL3RsYmZsdXNoLmgKaW5kZXggNzNjZDg1Yi4uZmE0ZGM5MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tczM5MC90bGJmbHVzaC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdGxiZmx1c2guaApAQCAtMjUsNyArMjUsNyBAQAogICovCiAKICNkZWZpbmUgbG9jYWxfZmx1c2hfdGxiKCkgXAotZG8geyAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB0bGIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApCitkbyB7ICBhc20gdm9sYXRpbGUoInB0bGIiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApCiAKICNpZm5kZWYgQ09ORklHX1NNUAogCkBAIC02OCwyNCArNjgsMjQgQEAKIAogc3RhdGljIGlubGluZSB2b2lkIGdsb2JhbF9mbHVzaF90bGIodm9pZCkKIHsKKwlyZWdpc3RlciB1bnNpZ25lZCBsb25nIHJlZzIgYXNtKCIyIik7CisJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyByZWczIGFzbSgiMyIpOworCXJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgcmVnNCBhc20oIjQiKTsKKwlsb25nIGR1bW15OworCiAjaWZuZGVmIF9fczM5MHhfXwogCWlmICghTUFDSElORV9IQVNfQ1NQKSB7CiAJCXNtcF9wdGxiX2FsbCgpOwogCQlyZXR1cm47CiAJfQogI2VuZGlmIC8qIF9fczM5MHhfXyAqLwotCXsKLQkJcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBhZGRyIGFzbSgiNCIpOwotCQlsb25nIGR1bW15OwogCi0JCWR1bW15ID0gMDsKLQkJYWRkciA9ICgodW5zaWduZWQgbG9uZykgJmR1bW15KSArIDE7Ci0JCV9fYXNtX18gX192b2xhdGlsZV9fICgKLQkJCSIgICAgc2xyICAyLDJcbiIKLQkJCSIgICAgc2xyICAzLDNcbiIKLQkJCSIgICAgY3NwICAyLCUwIgotCQkJOiA6ICJhIiAoYWRkciksICJtIiAoZHVtbXkpIDogImNjIiwgIjIiLCAiMyIgKTsKLQl9CisJZHVtbXkgPSAwOworCXJlZzIgPSByZWczID0gMDsKKwlyZWc0ID0gKCh1bnNpZ25lZCBsb25nKSAmZHVtbXkpICsgMTsKKwlhc20gdm9sYXRpbGUoCisJCSIJY3NwCSUwLCUyIgorCQk6IDogImQiIChyZWcyKSwgImQiIChyZWczKSwgImQiIChyZWc0KSwgIm0iIChkdW1teSkgOiAiY2MiICk7CiB9CiAKIC8qCkBAIC0xMDIsOSArMTAyLDkgQEAKIAlpZiAodW5saWtlbHkoY3B1c19lbXB0eShtbS0+Y3B1X3ZtX21hc2spKSkKIAkJcmV0dXJuOwogCWlmIChNQUNISU5FX0hBU19JRFRFKSB7Ci0JCWFzbSB2b2xhdGlsZSAoIi5pbnNuIHJyZiwweGI5OGUwMDAwLDAsJTAsJTEsMCIKLQkJCSAgICAgIDogOiAiYSIgKDIwNDgpLAotCQkJICAgICAgImEiIChfX3BhKG1tLT5wZ2QpJlBBR0VfTUFTSykgOiAiY2MiICk7CisJCWFzbSB2b2xhdGlsZSgKKwkJCSIJLmluc24JcnJmLDB4Yjk4ZTAwMDAsMCwlMCwlMSwwIgorCQkJOiA6ICJhIiAoMjA0OCksICJhIiAoX19wYShtbS0+cGdkKSZQQUdFX01BU0spIDogImNjIik7CiAJCXJldHVybjsKIAl9CiAJcHJlZW1wdF9kaXNhYmxlKCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VhY2Nlc3MuaCBiL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCmluZGV4IGUyMDQ3YjAuLjcyYWU0ZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdWFjY2Vzcy5oCkBAIC0zOCwyNSArMzgsMTQgQEAKICNkZWZpbmUgZ2V0X2RzKCkgICAgICAgIChLRVJORUxfRFMpCiAjZGVmaW5lIGdldF9mcygpICAgICAgICAoY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQpCiAKLSNpZmRlZiBfX3MzOTB4X18KICNkZWZpbmUgc2V0X2ZzKHgpIFwKICh7CQkJCQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19wdG87CQkJCQkJXAogCWN1cnJlbnQtPnRocmVhZC5tbV9zZWdtZW50ID0gKHgpOwkJCQlcCiAJX19wdG8gPSBjdXJyZW50LT50aHJlYWQubW1fc2VnbWVudC5hcjQgPwkJCVwKIAkJUzM5MF9sb3djb3JlLnVzZXJfYXNjZSA6IFMzOTBfbG93Y29yZS5rZXJuZWxfYXNjZTsJXAotCWFzbSB2b2xhdGlsZSAoImxjdGxnIDcsNywlMCIgOiA6ICJtIiAoX19wdG8pICk7CQkJXAorCV9fY3RsX2xvYWQoX19wdG8sIDcsIDcpOwkJCQkJXAogfSkKLSNlbHNlIC8qIF9fczM5MHhfXyAqLwotI2RlZmluZSBzZXRfZnMoeCkgXAotKHsJCQkJCQkJCQlcCi0JdW5zaWduZWQgbG9uZyBfX3B0bzsJCQkJCQlcCi0JY3VycmVudC0+dGhyZWFkLm1tX3NlZ21lbnQgPSAoeCk7CQkJCVwKLQlfX3B0byA9IGN1cnJlbnQtPnRocmVhZC5tbV9zZWdtZW50LmFyNCA/CQkJXAotCQlTMzkwX2xvd2NvcmUudXNlcl9hc2NlIDogUzM5MF9sb3djb3JlLmtlcm5lbF9hc2NlOwlcCi0JYXNtIHZvbGF0aWxlICgibGN0bCAgNyw3LCUwIiA6IDogIm0iIChfX3B0bykgKTsJCQlcCi19KQotI2VuZGlmIC8qIF9fczM5MHhfXyAqLwogCiAjZGVmaW5lIHNlZ21lbnRfZXEoYSxiKSAoKGEpLmFyNCA9PSAoYikuYXI0KQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tczM5MC91bmlzdGQuaAppbmRleCAwMmI5NDJkLi4wMzYxYWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zMzkwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXMzOTAvdW5pc3RkLmgKQEAgLTM0Miw5ICszNDIsMTEgQEAKIAogI2lmZGVmIF9fS0VSTkVMX18KIAorI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCiAjZGVmaW5lIF9fc3lzY2FsbF9yZXR1cm4odHlwZSwgcmVzKQkJCSAgICAgXAogZG8gewkJCQkJCQkgICAgIFwKLQlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC00MDk1KSkge1wKKwlpZiAoKHVuc2lnbmVkIGxvbmcpKHJlcykgPj0gKHVuc2lnbmVkIGxvbmcpKC1NQVhfRVJSTk8pKSB7IFwKIAkJZXJybm8gPSAtKHJlcyk7CQkJCSAgICAgXAogCQlyZXMgPSAtMTsJCQkJICAgICBcCiAJfQkJCQkJCSAgICAgXApAQCAtMzUzLDE0NSArMzU1LDE0NSBAQAogCiAjZGVmaW5lIF9zdmNfY2xvYmJlciAiMSIsICJjYyIsICJtZW1vcnkiCiAKLSNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkJCQkJICAgICBcCi10eXBlIG5hbWUodm9pZCkgewkJCQkJICAgICBcCi0JcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAotCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAotCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCi0JCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCi0JCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKLQkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKLQkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAotCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAotCQk6ICJpIiAoX19OUl8jI25hbWUpCQkJICAgICBcCi0JCTogX3N2Y19jbG9iYmVyICk7CQkJICAgICBcCi0JX19yZXMgPSBfX3N2Y3JlczsJCQkJICAgICBcCi0JX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKKyNkZWZpbmUgX3N5c2NhbGwwKHR5cGUsbmFtZSkJCQkJCVwKK3R5cGUgbmFtZSh2b2lkKSB7CQkJCQkJXAorCXJlZ2lzdGVyIGxvbmcgX19zdmNyZXMgYXNtKCIyIik7CQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJLmlmCSUxIDwgMjU2XG4iCQkJXAorCQkiCXN2YwklYjFcbiIJCQkJXAorCQkiCS5lbHNlXG4iCQkJCVwKKwkJIglsYQklJXIxLCUxXG4iCQkJXAorCQkiCXN2YwkwXG4iCQkJCVwKKwkJIgkuZW5kaWYiCQkJCQlcCisJCTogIj1kIiAoX19zdmNyZXMpCQkJCVwKKwkJOiAiaSIgKF9fTlJfIyNuYW1lKQkJCQlcCisJCTogX3N2Y19jbG9iYmVyKTsJCQkJXAorCV9fcmVzID0gX19zdmNyZXM7CQkJCQlcCisJX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJXAogfQogCi0jZGVmaW5lIF9zeXNjYWxsMSh0eXBlLG5hbWUsdHlwZTEsYXJnMSkJCQkgICAgIFwKLXR5cGUgbmFtZSh0eXBlMSBhcmcxKSB7CQkJCQkgICAgIFwKLQlyZWdpc3RlciB0eXBlMSBfX2FyZzEgYXNtKCIyIikgPSBhcmcxOwkJICAgICBcCi0JcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAotCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAotCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCi0JCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCi0JCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKLQkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKLQkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAotCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAotCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCSAgICAgXAotCQkgICIwIiAoX19hcmcxKQkJCQkgICAgIFwKLQkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKLQlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKLQlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorI2RlZmluZSBfc3lzY2FsbDEodHlwZSxuYW1lLHR5cGUxLGFyZzEpCQkJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxKSB7CQkJCQkJXAorCXJlZ2lzdGVyIHR5cGUxIF9fYXJnMSBhc20oIjIiKSA9IGFyZzE7CQkJXAorCXJlZ2lzdGVyIGxvbmcgX19zdmNyZXMgYXNtKCIyIik7CQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJLmlmCSUxIDwgMjU2XG4iCQkJXAorCQkiCXN2YwklYjFcbiIJCQkJXAorCQkiCS5lbHNlXG4iCQkJCVwKKwkJIglsYQklJXIxLCUxXG4iCQkJXAorCQkiCXN2YwkwXG4iCQkJCVwKKwkJIgkuZW5kaWYiCQkJCQlcCisJCTogIj1kIiAoX19zdmNyZXMpCQkJCVwKKwkJOiAiaSIgKF9fTlJfIyNuYW1lKSwJCQkJXAorCQkgICIwIiAoX19hcmcxKQkJCQkJXAorCQk6IF9zdmNfY2xvYmJlcik7CQkJCVwKKwlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkJXAorCV9fc3lzY2FsbF9yZXR1cm4odHlwZSxfX3Jlcyk7CQkJCVwKIH0KIAotI2RlZmluZSBfc3lzY2FsbDIodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMikJICAgICBcCi10eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikgewkJCSAgICAgXAotCXJlZ2lzdGVyIHR5cGUxIF9fYXJnMSBhc20oIjIiKSA9IGFyZzE7CQkgICAgIFwKLQlyZWdpc3RlciB0eXBlMiBfX2FyZzIgYXNtKCIzIikgPSBhcmcyOwkJICAgICBcCi0JcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAotCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAotCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCi0JCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCi0JCSIgICAgbGEgJSVyMSwlMVxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAwXG4iCQkJCSAgICAgXAotCQkiICAgIC5lbmRpZiIJCQkJICAgICBcCi0JCTogIj1kIiAoX19zdmNyZXMpCQkJICAgICBcCi0JCTogImkiIChfX05SXyMjbmFtZSksCQkJICAgICBcCi0JCSAgIjAiIChfX2FyZzEpLAkJCQkgICAgIFwKLQkJICAiZCIgKF9fYXJnMikJCQkJICAgICBcCi0JCTogX3N2Y19jbG9iYmVyICk7CQkJICAgICBcCi0JX19yZXMgPSBfX3N2Y3JlczsJCQkJICAgICBcCi0JX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKKyNkZWZpbmUgX3N5c2NhbGwyKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIpCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMikgewkJCQlcCisJcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCQlcCisJcmVnaXN0ZXIgdHlwZTIgX19hcmcyIGFzbSgiMyIpID0gYXJnMjsJCQlcCisJcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCQlcCisJbG9uZyBfX3JlczsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIgkuaWYJJTEgPCAyNTZcbiIJCQlcCisJCSIJc3ZjCSViMVxuIgkJCQlcCisJCSIJLmVsc2VcbiIJCQkJXAorCQkiCWxhCSUlcjEsJTFcbiIJCQlcCisJCSIJc3ZjCTBcbiIJCQkJXAorCQkiCS5lbmRpZiIJCQkJCVwKKwkJOiAiPWQiIChfX3N2Y3JlcykJCQkJXAorCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCQlcCisJCSAgIjAiIChfX2FyZzEpLAkJCQkJXAorCQkgICJkIiAoX19hcmcyKQkJCQkJXAorCQk6IF9zdmNfY2xvYmJlciApOwkJCQlcCisJX19yZXMgPSBfX3N2Y3JlczsJCQkJCVwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQlcCiB9CiAKLSNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMylcCi10eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMykgewkJICAgICBcCi0JcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCSAgICAgXAotCXJlZ2lzdGVyIHR5cGUyIF9fYXJnMiBhc20oIjMiKSA9IGFyZzI7CQkgICAgIFwKLQlyZWdpc3RlciB0eXBlMyBfX2FyZzMgYXNtKCI0IikgPSBhcmczOwkJICAgICBcCi0JcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAotCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAotCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCi0JCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCi0JCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKLQkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKLQkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAotCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAotCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCSAgICAgXAotCQkgICIwIiAoX19hcmcxKSwJCQkJICAgICBcCi0JCSAgImQiIChfX2FyZzIpLAkJCQkgICAgIFwKLQkJICAiZCIgKF9fYXJnMykJCQkJICAgICBcCi0JCTogX3N2Y19jbG9iYmVyICk7CQkJICAgICBcCi0JX19yZXMgPSBfX3N2Y3JlczsJCQkJICAgICBcCi0JX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKKyNkZWZpbmUgX3N5c2NhbGwzKHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMykJXAordHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMpIHsJCQlcCisJcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCQlcCisJcmVnaXN0ZXIgdHlwZTIgX19hcmcyIGFzbSgiMyIpID0gYXJnMjsJCQlcCisJcmVnaXN0ZXIgdHlwZTMgX19hcmczIGFzbSgiNCIpID0gYXJnMzsJCQlcCisJcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCQlcCisJbG9uZyBfX3JlczsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIgkuaWYJJTEgPCAyNTZcbiIJCQlcCisJCSIJc3ZjCSViMVxuIgkJCQlcCisJCSIJLmVsc2VcbiIJCQkJXAorCQkiCWxhCSUlcjEsJTFcbiIJCQlcCisJCSIJc3ZjCTBcbiIJCQkJXAorCQkiCS5lbmRpZiIJCQkJCVwKKwkJOiAiPWQiIChfX3N2Y3JlcykJCQkJXAorCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCQlcCisJCSAgIjAiIChfX2FyZzEpLAkJCQkJXAorCQkgICJkIiAoX19hcmcyKSwJCQkJCVwKKwkJICAiZCIgKF9fYXJnMykJCQkJCVwKKwkJOiBfc3ZjX2Nsb2JiZXIpOwkJCQlcCisJX19yZXMgPSBfX3N2Y3JlczsJCQkJCVwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQlcCiB9CiAKLSNkZWZpbmUgX3N5c2NhbGw0KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMyxcCi0JCSAgdHlwZTQsbmFtZTQpCQkJCSAgICAgXAotdHlwZSBuYW1lKHR5cGUxIGFyZzEsIHR5cGUyIGFyZzIsIHR5cGUzIGFyZzMsIHR5cGU0IGFyZzQpIHsgIFwKLQlyZWdpc3RlciB0eXBlMSBfX2FyZzEgYXNtKCIyIikgPSBhcmcxOwkJICAgICBcCi0JcmVnaXN0ZXIgdHlwZTIgX19hcmcyIGFzbSgiMyIpID0gYXJnMjsJCSAgICAgXAotCXJlZ2lzdGVyIHR5cGUzIF9fYXJnMyBhc20oIjQiKSA9IGFyZzM7CQkgICAgIFwKLQlyZWdpc3RlciB0eXBlNCBfX2FyZzQgYXNtKCI1IikgPSBhcmc0OwkJICAgICBcCi0JcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCSAgICAgXAotCWxvbmcgX19yZXM7CQkJCQkgICAgIFwKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCQkJCSAgICAgXAotCQkiICAgIC5pZiAlMSA8IDI1NlxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAlYjFcbiIJCQkJICAgICBcCi0JCSIgICAgLmVsc2VcbiIJCQkJICAgICBcCi0JCSIgICAgbGEgICUlcjEsJTFcbiIJCQkgICAgIFwKLQkJIiAgICBzdmMgMFxuIgkJCQkgICAgIFwKLQkJIiAgICAuZW5kaWYiCQkJCSAgICAgXAotCQk6ICI9ZCIgKF9fc3ZjcmVzKQkJCSAgICAgXAotCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCSAgICAgXAotCQkgICIwIiAoX19hcmcxKSwJCQkJICAgICBcCi0JCSAgImQiIChfX2FyZzIpLAkJCQkgICAgIFwKLQkJICAiZCIgKF9fYXJnMyksCQkJCSAgICAgXAotCQkgICJkIiAoX19hcmc0KQkJCQkgICAgIFwKLQkJOiBfc3ZjX2Nsb2JiZXIgKTsJCQkgICAgIFwKLQlfX3JlcyA9IF9fc3ZjcmVzOwkJCQkgICAgIFwKLQlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCSAgICAgXAorI2RlZmluZSBfc3lzY2FsbDQodHlwZSxuYW1lLHR5cGUxLGFyZzEsdHlwZTIsYXJnMix0eXBlMyxhcmczLAlcCisJCSAgdHlwZTQsbmFtZTQpCQkJCQlcCit0eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCkgewlcCisJcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCQlcCisJcmVnaXN0ZXIgdHlwZTIgX19hcmcyIGFzbSgiMyIpID0gYXJnMjsJCQlcCisJcmVnaXN0ZXIgdHlwZTMgX19hcmczIGFzbSgiNCIpID0gYXJnMzsJCQlcCisJcmVnaXN0ZXIgdHlwZTQgX19hcmc0IGFzbSgiNSIpID0gYXJnNDsJCQlcCisJcmVnaXN0ZXIgbG9uZyBfX3N2Y3JlcyBhc20oIjIiKTsJCQlcCisJbG9uZyBfX3JlczsJCQkJCQlcCisJYXNtIHZvbGF0aWxlKAkJCQkJCVwKKwkJIgkuaWYJJTEgPCAyNTZcbiIJCQlcCisJCSIJc3ZjCSViMVxuIgkJCQlcCisJCSIJLmVsc2VcbiIJCQkJXAorCQkiCWxhCSUlcjEsJTFcbiIJCQlcCisJCSIJc3ZjCTBcbiIJCQkJXAorCQkiCS5lbmRpZiIJCQkJCVwKKwkJOiAiPWQiIChfX3N2Y3JlcykJCQkJXAorCQk6ICJpIiAoX19OUl8jI25hbWUpLAkJCQlcCisJCSAgIjAiIChfX2FyZzEpLAkJCQkJXAorCQkgICJkIiAoX19hcmcyKSwJCQkJCVwKKwkJICAiZCIgKF9fYXJnMyksCQkJCQlcCisJCSAgImQiIChfX2FyZzQpCQkJCQlcCisJCTogX3N2Y19jbG9iYmVyKTsJCQkJXAorCV9fcmVzID0gX19zdmNyZXM7CQkJCQlcCisJX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkJXAogfQogCi0jZGVmaW5lIF9zeXNjYWxsNSh0eXBlLG5hbWUsdHlwZTEsYXJnMSx0eXBlMixhcmcyLHR5cGUzLGFyZzMsXAotCQkgIHR5cGU0LG5hbWU0LHR5cGU1LG5hbWU1KQkJICAgICBcCi10eXBlIG5hbWUodHlwZTEgYXJnMSwgdHlwZTIgYXJnMiwgdHlwZTMgYXJnMywgdHlwZTQgYXJnNCwgICAgXAotCSAgdHlwZTUgYXJnNSkgewkJCQkJICAgICBcCi0JcmVnaXN0ZXIgdHlwZTEgX19hcmcxIGFzbSgiMiIpID0gYXJnMTsJCSAgICAgXAotCXJlZ2lzdGVyIHR5cGUyIF9fYXJnMiBhc20oIjMiKSA9IGFyZzI7CQkgICAgIFwKLQlyZWdpc3RlciB0eXBlMyBfX2FyZzMgYXNtKCI0IikgPSBhcmczOwkJICAgICBcCi0JcmVnaXN0ZXIgdHlwZTQgX19hcmc0IGFzbSgiNSIpID0gYXJnNDsJCSAgICAgXAotCXJlZ2lzdGVyIHR5cGU1IF9fYXJnNSBhc20oIjYiKSA9IGFyZzU7CQkgICAgIFwKLQlyZWdpc3RlciBsb25nIF9fc3ZjcmVzIGFzbSgiMiIpOwkJICAgICBcCi0JbG9uZyBfX3JlczsJCQkJCSAgICAgXAotCV9fYXNtX18gX192b2xhdGlsZV9fICgJCQkJICAgICBcCi0JCSIgICAgLmlmICUxIDwgMjU2XG4iCQkJICAgICBcCi0JCSIgICAgc3ZjICViMVxuIgkJCQkgICAgIFwKLQkJIiAgICAuZWxzZVxuIgkJCQkgICAgIFwKLQkJIiAgICBsYSAgJSVyMSwlMVxuIgkJCSAgICAgXAotCQkiICAgIHN2YyAwXG4iCQkJCSAgICAgXAotCQkiICAgIC5lbmRpZiIJCQkJICAgICBcCi0JCTogIj1kIiAoX19zdmNyZXMpCQkJICAgICBcCi0JCTogImkiIChfX05SXyMjbmFtZSksCQkJICAgICBcCi0JCSAgIjAiIChfX2FyZzEpLAkJCQkgICAgIFwKLQkJICAiZCIgKF9fYXJnMiksCQkJCSAgICAgXAotCQkgICJkIiAoX19hcmczKSwJCQkJICAgICBcCi0JCSAgImQiIChfX2FyZzQpLAkJCQkgICAgIFwKLQkJICAiZCIgKF9fYXJnNSkJCQkJICAgICBcCi0JCTogX3N2Y19jbG9iYmVyICk7CQkJICAgICBcCi0JX19yZXMgPSBfX3N2Y3JlczsJCQkJICAgICBcCi0JX19zeXNjYWxsX3JldHVybih0eXBlLF9fcmVzKTsJCQkgICAgIFwKKyNkZWZpbmUgX3N5c2NhbGw1KHR5cGUsbmFtZSx0eXBlMSxhcmcxLHR5cGUyLGFyZzIsdHlwZTMsYXJnMywJXAorCQkgIHR5cGU0LG5hbWU0LHR5cGU1LG5hbWU1KQkJCVwKK3R5cGUgbmFtZSh0eXBlMSBhcmcxLCB0eXBlMiBhcmcyLCB0eXBlMyBhcmczLCB0eXBlNCBhcmc0LAlcCisJICB0eXBlNSBhcmc1KSB7CQkJCQkJXAorCXJlZ2lzdGVyIHR5cGUxIF9fYXJnMSBhc20oIjIiKSA9IGFyZzE7CQkJXAorCXJlZ2lzdGVyIHR5cGUyIF9fYXJnMiBhc20oIjMiKSA9IGFyZzI7CQkJXAorCXJlZ2lzdGVyIHR5cGUzIF9fYXJnMyBhc20oIjQiKSA9IGFyZzM7CQkJXAorCXJlZ2lzdGVyIHR5cGU0IF9fYXJnNCBhc20oIjUiKSA9IGFyZzQ7CQkJXAorCXJlZ2lzdGVyIHR5cGU1IF9fYXJnNSBhc20oIjYiKSA9IGFyZzU7CQkJXAorCXJlZ2lzdGVyIGxvbmcgX19zdmNyZXMgYXNtKCIyIik7CQkJXAorCWxvbmcgX19yZXM7CQkJCQkJXAorCWFzbSB2b2xhdGlsZSgJCQkJCQlcCisJCSIJLmlmCSUxIDwgMjU2XG4iCQkJXAorCQkiCXN2YwklYjFcbiIJCQkJXAorCQkiCS5lbHNlXG4iCQkJCVwKKwkJIglsYQklJXIxLCUxXG4iCQkJXAorCQkiCXN2YwkwXG4iCQkJCVwKKwkJIgkuZW5kaWYiCQkJCQlcCisJCTogIj1kIiAoX19zdmNyZXMpCQkJCVwKKwkJOiAiaSIgKF9fTlJfIyNuYW1lKSwJCQkJXAorCQkgICIwIiAoX19hcmcxKSwJCQkJCVwKKwkJICAiZCIgKF9fYXJnMiksCQkJCQlcCisJCSAgImQiIChfX2FyZzMpLAkJCQkJXAorCQkgICJkIiAoX19hcmc0KSwJCQkJCVwKKwkJICAiZCIgKF9fYXJnNSkJCQkJCVwKKwkJOiBfc3ZjX2Nsb2JiZXIpOwkJCQlcCisJX19yZXMgPSBfX3N2Y3JlczsJCQkJCVwKKwlfX3N5c2NhbGxfcmV0dXJuKHR5cGUsX19yZXMpOwkJCQlcCiB9CiAKICNkZWZpbmUgX19BUkNIX1dBTlRfSVBDX1BBUlNFX1ZFUlNJT04KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tc2gvYWRkcnNwYWNlLmgKaW5kZXggNzIwYWZjMS4uYjg2MDIxOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYWRkcnNwYWNlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYWRkcnNwYWNlLmgKQEAgLTE0LDExICsxNCwxOSBAQAogI2luY2x1ZGUgPGFzbS9jcHUvYWRkcnNwYWNlLmg+CiAKIC8qIE1lbW9yeSBzZWdtZW50cyAoMzJiaXQgUHJpdmlsZWdlZCBtb2RlIGFkZHJlc3NlcykgICovCisjaWZuZGVmIENPTkZJR19DUFVfU0gyQQogI2RlZmluZSBQMFNFRwkJMHgwMDAwMDAwMAogI2RlZmluZSBQMVNFRwkJMHg4MDAwMDAwMAogI2RlZmluZSBQMlNFRwkJMHhhMDAwMDAwMAogI2RlZmluZSBQM1NFRwkJMHhjMDAwMDAwMAogI2RlZmluZSBQNFNFRwkJMHhlMDAwMDAwMAorI2Vsc2UKKyNkZWZpbmUgUDBTRUcJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUDFTRUcJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUDJTRUcJCTB4MjAwMDAwMDAKKyNkZWZpbmUgUDNTRUcJCTB4MDAwMDAwMDAKKyNkZWZpbmUgUDRTRUcgCQkweDgwMDAwMDAwCisjZW5kaWYKIAogLyogUmV0dXJucyB0aGUgcHJpdmlsZWdlZCBzZWdtZW50IGJhc2Ugb2YgYSBnaXZlbiBhZGRyZXNzICAqLwogI2RlZmluZSBQWFNFRyhhKQkoKCh1bnNpZ25lZCBsb25nKShhKSkgJiAweGUwMDAwMDAwKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYWR4L2lvLmggYi9pbmNsdWRlL2FzbS1zaC9hZHgvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWIxMjI1Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9hZHgvaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDg2ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9pb19hZHguaAotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMSBBJkQgQ28uLCBMdGQuCi0gKgotICogVGhpcyBmaWxlIG1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKLSAqIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBJTyBmdW5jdGlvbnMgZm9yIGFuIEEmRCBBRFggQm9hcmQKLSAqLwotCi0jaWZuZGVmIF9BU01fU0hfSU9fQURYX0gKLSNkZWZpbmUgX0FTTV9TSF9JT19BRFhfSAotCi0jaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgYWR4X2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGFkeF9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgYWR4X2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBhZHhfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgYWR4X291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBhZHhfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGFkeF9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgYWR4X291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBhZHhfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgYWR4X2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIGFkeF9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBhZHhfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIGFkeF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgYWR4X291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGFkeF9yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGFkeF9yZWFkdyh1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBhZHhfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIGFkeF93cml0ZWIodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHZvaWQgYWR4X3dyaXRldyh1bnNpZ25lZCBzaG9ydCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHZvaWQgYWR4X3dyaXRlbCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQotZXh0ZXJuIHZvaWQgKiBhZHhfaW9yZW1hcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKLWV4dGVybiB2b2lkIGFkeF9pb3VubWFwKHZvaWQgKmFkZHIpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBhZHhfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX2FkeCh2b2lkKTsKLWV4dGVybiB2b2lkIGluaXRfYWR4X0lSUSh2b2lkKTsKLQotI2lmZGVmIF9fV0FOVF9JT19ERUYKLQotI2RlZmluZSBfX2luYgkJYWR4X2luYgotI2RlZmluZSBfX2ludwkJYWR4X2ludwotI2RlZmluZSBfX2lubAkJYWR4X2lubAotI2RlZmluZSBfX291dGIJCWFkeF9vdXRiCi0jZGVmaW5lIF9fb3V0dwkJYWR4X291dHcKLSNkZWZpbmUgX19vdXRsCQlhZHhfb3V0bAotCi0jZGVmaW5lIF9faW5iX3AJCWFkeF9pbmJfcAotI2RlZmluZSBfX2lud19wCQlhZHhfaW53Ci0jZGVmaW5lIF9faW5sX3AJCWFkeF9pbmwKLSNkZWZpbmUgX19vdXRiX3AJYWR4X291dGJfcAotI2RlZmluZSBfX291dHdfcAlhZHhfb3V0dwotI2RlZmluZSBfX291dGxfcAlhZHhfb3V0bAotCi0jZGVmaW5lIF9faW5zYgkJYWR4X2luc2IKLSNkZWZpbmUgX19pbnN3CQlhZHhfaW5zdwotI2RlZmluZSBfX2luc2wJCWFkeF9pbnNsCi0jZGVmaW5lIF9fb3V0c2IJCWFkeF9vdXRzYgotI2RlZmluZSBfX291dHN3CQlhZHhfb3V0c3cKLSNkZWZpbmUgX19vdXRzbAkJYWR4X291dHNsCi0KLSNkZWZpbmUgX19yZWFkYgkJYWR4X3JlYWRiCi0jZGVmaW5lIF9fcmVhZHcJCWFkeF9yZWFkdwotI2RlZmluZSBfX3JlYWRsCQlhZHhfcmVhZGwKLSNkZWZpbmUgX193cml0ZWIJYWR4X3dyaXRlYgotI2RlZmluZSBfX3dyaXRldwlhZHhfd3JpdGV3Ci0jZGVmaW5lIF9fd3JpdGVsCWFkeF93cml0ZWwKLQotI2RlZmluZSBfX2lzYV9wb3J0MmFkZHIJYWR4X2lzYV9wb3J0MmFkZHIKLSNkZWZpbmUgX19pb3JlbWFwCWFkeF9pb3JlbWFwCi0jZGVmaW5lIF9faW91bm1hcAlhZHhfaW91bm1hcAotCi0jZW5kaWYKLQotI2VuZGlmIC8qIF9BU01fU0hfSU9fQUFORERfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYXBtLmggYi9pbmNsdWRlL2FzbS1zaC9hcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA5MWU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvYXBtLmgKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2IChjKSBBbmRyaXkgU2t1bHlzaCA8YXNrdWx5c2hAZ21haWwuY29tPgorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX0FQTV9ICisjZGVmaW5lIF9fQVNNX1NIX0FQTV9ICisKKyNkZWZpbmUgQVBNX0FDX09GRkxJTkUJCQkwCisjZGVmaW5lIEFQTV9BQ19PTkxJTkUJCQkxCisjZGVmaW5lIEFQTV9BQ19CQUNLVVAJCQkyCisjZGVmaW5lIEFQTV9BQ19VTktOT1dOCQkJMHhmZgorCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19ISUdICQkwCisjZGVmaW5lIEFQTV9CQVRURVJZX1NUQVRVU19MT1cJCTEKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX0NSSVRJQ0FMCTIKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX0NIQVJHSU5HCTMKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX05PVF9QUkVTRU5UCTQKKyNkZWZpbmUgQVBNX0JBVFRFUllfU1RBVFVTX1VOS05PV04JMHhmZgorCisjZGVmaW5lIEFQTV9CQVRURVJZX0xJRkVfVU5LTk9XTgkweEZGRkYKKyNkZWZpbmUgQVBNX0JBVFRFUllfTElGRV9NSU5VVEVTCTB4ODAwMAorI2RlZmluZSBBUE1fQkFUVEVSWV9MSUZFX1ZBTFVFX01BU0sJMHg3RkZGCisKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19ISUdICQkoMSA8PCAwKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0xPVwkJKDEgPDwgMSkKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19DUklUSUNBTAkoMSA8PCAyKQorI2RlZmluZSBBUE1fQkFUVEVSWV9GTEFHX0NIQVJHSU5HCSgxIDw8IDMpCisjZGVmaW5lIEFQTV9CQVRURVJZX0ZMQUdfTk9UX1BSRVNFTlQJKDEgPDwgNykKKyNkZWZpbmUgQVBNX0JBVFRFUllfRkxBR19VTktOT1dOCTB4ZmYKKworI2RlZmluZSBBUE1fVU5JVFNfTUlOUwkJCTAKKyNkZWZpbmUgQVBNX1VOSVRTX1NFQ1MJCQkxCisjZGVmaW5lIEFQTV9VTklUU19VTktOT1dOCQktMQorCisKK2V4dGVybiBpbnQgKCphcG1fZ2V0X2luZm8pKGNoYXIgKmJ1ZiwgY2hhciAqKnN0YXJ0LCBvZmZfdCBmcG9zLCBpbnQgbGVuZ3RoKTsKK2V4dGVybiBpbnQgYXBtX3N1c3BlbmRlZDsKKwordm9pZCBhcG1fcXVldWVfZXZlbnQoYXBtX2V2ZW50X3QgZXZlbnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2F0b21pYy5oIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKaW5kZXggZmI2MjdkZS4uOGJkYzFiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvYXRvbWljLmgKQEAgLTE0LDYgKzE0LDcgQEAKICNkZWZpbmUgYXRvbWljX3JlYWQodikJCSgodiktPmNvdW50ZXIpCiAjZGVmaW5lIGF0b21pY19zZXQodixpKQkJKCh2KS0+Y291bnRlciA9IChpKSkKIAorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgogCiAvKgpAQCAtMjEsNDkgKzIyLDExMCBAQAogICogZm9yd2FyZCB0byBjb2RlIGF0IHRoZSBlbmQgb2YgdGhpcyBvYmplY3QncyAudGV4dCBzZWN0aW9uLCB0aGVuCiAgKiBicmFuY2ggYmFjayB0byByZXN0YXJ0IHRoZSBvcGVyYXRpb24uCiAgKi8KLQotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfYWRkKGludCBpLCBhdG9taWNfdCAqIHYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX2FkZChpbnQgaSwgYXRvbWljX3QgKnYpCiB7CisjaWZkZWYgQ09ORklHX0NQVV9TSDRBCisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbW92bGkubCBAJTMsICUwCQkhIGF0b21pY19hZGQJXG4iCisiCWFkZAklMiwgJTAJCQkJXG4iCisiCW1vdmNvLmwJJTAsIEAlMwkJCQlcbiIKKyIJYmYJMWIJCQkJXG4iCisJOiAiPSZ6IiAodG1wKSwgIj1yIiAoJnYtPmNvdW50ZXIpCisJOiAiciIgKGkpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogInQiKTsKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkqKGxvbmcgKil2ICs9IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCitzdGF0aWMgaW5saW5lIHZvaWQgYXRvbWljX3N1YihpbnQgaSwgYXRvbWljX3QgKnYpCiB7CisjaWZkZWYgQ09ORklHX0NQVV9TSDRBCisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbW92bGkubCBAJTMsICUwCQkhIGF0b21pY19zdWIJXG4iCisiCXN1YgklMiwgJTAJCQkJXG4iCisiCW1vdmNvLmwJJTAsIEAlMwkJCQlcbiIKKyIJYmYJMWIJCQkJXG4iCisJOiAiPSZ6IiAodG1wKSwgIj1yIiAoJnYtPmNvdW50ZXIpCisJOiAiciIgKGkpLCAiciIgKCZ2LT5jb3VudGVyKQorCTogInQiKTsKKyNlbHNlCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAkqKGxvbmcgKil2IC09IGk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfYWRkX3JldHVybihpbnQgaSwgYXRvbWljX3QgKiB2KQorLyoKKyAqIFNILTRBIG5vdGU6CisgKgorICogV2UgYmFzaWNhbGx5IGdldCBhdG9taWNfeHh4X3JldHVybigpIGZvciBmcmVlIGNvbXBhcmVkIHdpdGgKKyAqIGF0b21pY194eHgoKS4gbW92bGkubC9tb3Zjby5sIHJlcXVpcmUgcjAgZHVlIHRvIHRoZSBpbnN0cnVjdGlvbgorICogZW5jb2RpbmcsIHNvIHRoZSByZXR2YWwgaXMgYXV0b21hdGljYWxseSBzZXQgd2l0aG91dCBoYXZpbmcgdG8KKyAqIGRvIGFueSBzcGVjaWFsIHdvcmsuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGF0b21pY19hZGRfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqdikKIHsKLQl1bnNpZ25lZCBsb25nIHRlbXAsIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgdGVtcDsKKworI2lmZGVmIENPTkZJR19DUFVfU0g0QQorCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOgltb3ZsaS5sIEAlMywgJTAJCSEgYXRvbWljX2FkZF9yZXR1cm4JXG4iCisiCWFkZAklMiwgJTAJCQkJCVxuIgorIgltb3Zjby5sCSUwLCBAJTMJCQkJCVxuIgorIgliZgkxYgkJCQkJXG4iCisiCXN5bmNvCQkJCQkJXG4iCisJOiAiPSZ6IiAodGVtcCksICI9ciIgKCZ2LT5jb3VudGVyKQorCTogInIiIChpKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJ0Iik7CisjZWxzZQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJdGVtcCA9ICoobG9uZyAqKXY7CiAJdGVtcCArPSBpOwogCSoobG9uZyAqKXYgPSB0ZW1wOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNlbmRpZgogCiAJcmV0dXJuIHRlbXA7CiB9CiAKICNkZWZpbmUgYXRvbWljX2FkZF9uZWdhdGl2ZShhLCB2KQkoYXRvbWljX2FkZF9yZXR1cm4oKGEpLCAodikpIDwgMCkKIAotc3RhdGljIF9faW5saW5lX18gaW50IGF0b21pY19zdWJfcmV0dXJuKGludCBpLCBhdG9taWNfdCAqIHYpCitzdGF0aWMgaW5saW5lIGludCBhdG9taWNfc3ViX3JldHVybihpbnQgaSwgYXRvbWljX3QgKnYpCiB7Ci0JdW5zaWduZWQgbG9uZyB0ZW1wLCBmbGFnczsKKwl1bnNpZ25lZCBsb25nIHRlbXA7CisKKyNpZmRlZiBDT05GSUdfQ1BVX1NINEEKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbW92bGkubCBAJTMsICUwCQkhIGF0b21pY19zdWJfcmV0dXJuCVxuIgorIglzdWIJJTIsICUwCQkJCQlcbiIKKyIJbW92Y28ubAklMCwgQCUzCQkJCQlcbiIKKyIJYmYJMWIJCQkJCVxuIgorIglzeW5jbwkJCQkJCVxuIgorCTogIj0meiIgKHRlbXApLCAiPXIiICgmdi0+Y291bnRlcikKKwk6ICJyIiAoaSksICJyIiAoJnYtPmNvdW50ZXIpCisJOiAidCIpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCXRlbXAgPSAqKGxvbmcgKil2OwogCXRlbXAgLT0gaTsKIAkqKGxvbmcgKil2ID0gdGVtcDsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKIAogCXJldHVybiB0ZW1wOwogfQpAQCAtMTE4LDIyICsxODAsNDggQEAKIH0KICNkZWZpbmUgYXRvbWljX2luY19ub3RfemVybyh2KSBhdG9taWNfYWRkX3VubGVzcygodiksIDEsIDApCiAKLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2NsZWFyX21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19jbGVhcl9tYXNrKHVuc2lnbmVkIGludCBtYXNrLCBhdG9taWNfdCAqdikKIHsKKyNpZmRlZiBDT05GSUdfQ1BVX1NINEEKKwl1bnNpZ25lZCBsb25nIHRtcDsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgKKyIxOgltb3ZsaS5sIEAlMywgJTAJCSEgYXRvbWljX2NsZWFyX21hc2sJXG4iCisiCWFuZAklMiwgJTAJCQkJCVxuIgorIgltb3Zjby5sCSUwLCBAJTMJCQkJCVxuIgorIgliZgkxYgkJCQkJXG4iCisJOiAiPSZ6IiAodG1wKSwgIj1yIiAoJnYtPmNvdW50ZXIpCisJOiAiciIgKH5tYXNrKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJ0Iik7CisjZWxzZQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKihsb25nICopdiAmPSB+bWFzazsKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CisjZW5kaWYKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfc2V0X21hc2sodW5zaWduZWQgaW50IG1hc2ssIGF0b21pY190ICp2KQorc3RhdGljIGlubGluZSB2b2lkIGF0b21pY19zZXRfbWFzayh1bnNpZ25lZCBpbnQgbWFzaywgYXRvbWljX3QgKnYpCiB7CisjaWZkZWYgQ09ORklHX0NQVV9TSDRBCisJdW5zaWduZWQgbG9uZyB0bXA7CisKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCisiMToJbW92bGkubCBAJTMsICUwCQkhIGF0b21pY19zZXRfbWFzawlcbiIKKyIJb3IJJTIsICUwCQkJCQlcbiIKKyIJbW92Y28ubAklMCwgQCUzCQkJCQlcbiIKKyIJYmYJMWIJCQkJCVxuIgorCTogIj0meiIgKHRtcCksICI9ciIgKCZ2LT5jb3VudGVyKQorCTogInIiIChtYXNrKSwgInIiICgmdi0+Y291bnRlcikKKwk6ICJ0Iik7CisjZWxzZQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJKihsb25nICopdiB8PSBtYXNrOwogCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKyNlbmRpZgogfQogCiAvKiBBdG9taWMgb3BlcmF0aW9ucyBhcmUgYWxyZWFkeSBzZXJpYWxpemluZyBvbiBTSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYXV4dmVjLmggYi9pbmNsdWRlL2FzbS1zaC9hdXh2ZWMuaAppbmRleCBmYzIxZTRkLi4xYjY5MTZlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9hdXh2ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9hdXh2ZWMuaApAQCAtMSw0ICsxLDE4IEBACiAjaWZuZGVmIF9fQVNNX1NIX0FVWFZFQ19ICiAjZGVmaW5lIF9fQVNNX1NIX0FVWFZFQ19ICiAKKy8qCisgKiBBcmNoaXRlY3R1cmUtbmV1dHJhbCBBVF8gdmFsdWVzIGluIDAtMTcsIGxlYXZlIHNvbWUgcm9vbQorICogZm9yIG1vcmUgb2YgdGhlbS4KKyAqLworCisjaWZkZWYgQ09ORklHX1ZTWVNDQUxMCisvKgorICogT25seSBkZWZpbmUgdGhpcyBpbiB0aGUgdnN5c2NhbGwgY2FzZSwgdGhlIGVudHJ5IHBvaW50IHRvCisgKiB0aGUgdnN5c2NhbGwgcGFnZSBnZXRzIHBsYWNlZCBoZXJlLiBUaGUga2VybmVsIHdpbGwgYXR0ZW1wdAorICogdG8gYnVpbGQgYSBnYXRlIFZNQSB3ZSBkb24ndCBjYXJlIGFib3V0IG90aGVyd2lzZS4uCisgKi8KKyNkZWZpbmUgQVRfU1lTSU5GT19FSERSCQkzMworI2VuZGlmCisKICNlbmRpZiAvKiBfX0FTTV9TSF9BVVhWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYml0b3BzLmggYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaAppbmRleCBlMzRmODI1Li4xYzE2NzkyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9iaXRvcHMuaApAQCAtNiw3ICs2LDcgQEAKIC8qIEZvciBfX3N3YWIzMiAqLwogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KICNkZWZpbmUgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCkJYmFycmllcigpCiAjZGVmaW5lIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCkJYmFycmllcigpCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewogCWludAltYXNrOwogCXZvbGF0aWxlIHVuc2lnbmVkIGludCAqYSA9IGFkZHI7CkBAIC0zNyw3ICszNyw3IEBACiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGNoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgdm9pZCBjaGFuZ2VfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCiB7CiAJaW50CW1hc2s7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTUwLDcgKzUwLDcgQEAKIAlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCitzdGF0aWMgaW5saW5lIGludCB0ZXN0X2FuZF9zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCiB7CiAJaW50CW1hc2ssIHJldHZhbDsKIAl2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKmEgPSBhZGRyOwpAQCAtNjYsNyArNjYsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIGludCB0ZXN0X2FuZF9jbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewogCWludAltYXNrLCByZXR2YWw7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTgyLDcgKzgyLDcgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQorc3RhdGljIGlubGluZSBpbnQgdGVzdF9hbmRfY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQogewogCWludAltYXNrLCByZXR2YWw7CiAJdm9sYXRpbGUgdW5zaWduZWQgaW50ICphID0gYWRkcjsKQEAgLTEwMCw3ICsxMDAsNyBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaD4KIAotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGZmeih1bnNpZ25lZCBsb25nIHdvcmQpCiB7CiAJdW5zaWduZWQgbG9uZyByZXN1bHQ7CiAKQEAgLTEyMCw3ICsxMjAsNyBAQAogICoKICAqIFVuZGVmaW5lZCBpZiBubyBiaXQgZXhpc3RzLCBzbyBjb2RlIHNob3VsZCBjaGVjayBhZ2FpbnN0IDAgZmlyc3QuCiAgKi8KLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX19mZnModW5zaWduZWQgbG9uZyB3b3JkKQorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fZmZzKHVuc2lnbmVkIGxvbmcgd29yZCkKIHsKIAl1bnNpZ25lZCBsb25nIHJlc3VsdDsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvYnVncy5oIGIvaW5jbHVkZS9hc20tc2gvYnVncy5oCmluZGV4IGE2ZGUzZDAuLmI0MDAwYzggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2J1Z3MuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9idWdzLmgKQEAgLTMyLDYgKzMyLDEwIEBACiAJY2FzZSBDUFVfU0g3NzUwIC4uLiBDUFVfU0g0XzUwMToKIAkJKnArKyA9ICc0JzsKIAkJYnJlYWs7CisJY2FzZSBDUFVfU0g3NzcwIC4uLiBDUFVfU0g3NzgxOgorCQkqcCsrID0gJzQnOworCQkqcCsrID0gJ2EnOworCQlicmVhazsKIAlkZWZhdWx0OgogCQkqcCsrID0gJz8nOwogCQkqcCsrID0gJyEnOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNoL2NhY2hlLmgKaW5kZXggNjU2ZmRmZS4uZTNhMTgwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY2FjaGUuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jYWNoZS5oCkBAIC0xMCw3ICsxMCw2IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8YXNtL2NwdS9jYWNoZS5oPgotI2luY2x1ZGUgPGFzbS9jcHUvY2FjaGVmbHVzaC5oPgogCiAjZGVmaW5lIFNIX0NBQ0hFX1ZBTElECQkxCiAjZGVmaW5lIFNIX0NBQ0hFX1VQREFURUQJMgpAQCAtMjMsMjQgKzIyLDMxIEBACiAjZGVmaW5lIEwxX0NBQ0hFX0FMSUdOKHgpCSgoKHgpKyhMMV9DQUNIRV9CWVRFUy0xKSkmfihMMV9DQUNIRV9CWVRFUy0xKSkKIAogc3RydWN0IGNhY2hlX2luZm8gewotCXVuc2lnbmVkIGludCB3YXlzOwotCXVuc2lnbmVkIGludCBzZXRzOwotCXVuc2lnbmVkIGludCBsaW5lc3o7CisJdW5zaWduZWQgaW50IHdheXM7CQkvKiBOdW1iZXIgb2YgY2FjaGUgd2F5cyAqLworCXVuc2lnbmVkIGludCBzZXRzOwkJLyogTnVtYmVyIG9mIGNhY2hlIHNldHMgKi8KKwl1bnNpZ25lZCBpbnQgbGluZXN6OwkJLyogQ2FjaGUgbGluZSBzaXplIChieXRlcykgKi8KIAorCXVuc2lnbmVkIGludCB3YXlfc2l6ZTsJCS8qIHNldHMgKiBsaW5lIHNpemUgKi8KKworCS8qCisJICogd2F5X2luY3IgaXMgdGhlIGFkZHJlc3Mgb2Zmc2V0IGZvciBhY2Nlc3NpbmcgdGhlIG5leHQgd2F5CisJICogaW4gbWVtb3J5IG1hcHBlZCBjYWNoZSBhcnJheSBvcHMuCisJICovCiAJdW5zaWduZWQgaW50IHdheV9pbmNyOwotCiAJdW5zaWduZWQgaW50IGVudHJ5X3NoaWZ0OwogCXVuc2lnbmVkIGludCBlbnRyeV9tYXNrOwogCisJLyoKKwkgKiBDb21wdXRlIGEgbWFzayB3aGljaCBzZWxlY3RzIHRoZSBhZGRyZXNzIGJpdHMgd2hpY2ggb3ZlcmxhcCBiZXR3ZWVuCisJICogMS4gdGhvc2UgdXNlZCB0byBzZWxlY3QgdGhlIGNhY2hlIHNldCBkdXJpbmcgaW5kZXhpbmcKKwkgKiAyLiB0aG9zZSBpbiB0aGUgcGh5c2ljYWwgcGFnZSBudW1iZXIuCisJICovCisJdW5zaWduZWQgaW50IGFsaWFzX21hc2s7CisKKwl1bnNpZ25lZCBpbnQgbl9hbGlhc2VzOwkJLyogTnVtYmVyIG9mIGFsaWFzZXMgKi8KKwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCi0vKiBGbHVzaCAod3JpdGUtYmFjayBvbmx5KSBhIHJlZ2lvbiAoc21hbGxlciB0aGFuIGEgcGFnZSkgKi8KLWV4dGVybiB2b2lkIF9fZmx1c2hfd2JhY2tfcmVnaW9uKHZvaWQgKnN0YXJ0LCBpbnQgc2l6ZSk7Ci0vKiBGbHVzaCAod3JpdGUtYmFjayAmIGludmFsaWRhdGUpIGEgcmVnaW9uIChzbWFsbGVyIHRoYW4gYSBwYWdlKSAqLwotZXh0ZXJuIHZvaWQgX19mbHVzaF9wdXJnZV9yZWdpb24odm9pZCAqc3RhcnQsIGludCBzaXplKTsKLS8qIEZsdXNoIChpbnZhbGlkYXRlIG9ubHkpIGEgcmVnaW9uIChzbWFsbGVyIHRoYW4gYSBwYWdlKSAqLwotZXh0ZXJuIHZvaWQgX19mbHVzaF9pbnZhbGlkYXRlX3JlZ2lvbih2b2lkICpzdGFydCwgaW50IHNpemUpOwotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX0NBQ0hFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NhY2hlZmx1c2guaCBiL2luY2x1ZGUvYXNtLXNoL2NhY2hlZmx1c2guaAppbmRleCA5ZGZiMzNlLi4wN2Y2MmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY2FjaGVmbHVzaC5oCkBAIC0yLDYgKzIsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9DQUNIRUZMVVNIX0gKICNpZmRlZiBfX0tFUk5FTF9fCiAKKyNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGFzbS9jcHUvY2FjaGVmbHVzaC5oPgogCiAvKiBGbHVzaCAod3JpdGUtYmFjayBvbmx5KSBhIHJlZ2lvbiAoc21hbGxlciB0aGFuIGEgcGFnZSkgKi8KQEAgLTI3LDUgKzI4LDcgQEAKIAkJbWVtY3B5KGRzdCwgc3JjLCBsZW4pOwkJCQlcCiAJfSB3aGlsZSAoMCkKIAorI2RlZmluZSBIQVZFX0FSQ0hfVU5NQVBQRURfQVJFQQorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX0NBQ0hFRkxVU0hfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY2F0Njg3MDEvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2NhdDY4NzAxL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc1M2I4NDYuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvY2F0Njg3MDEvaW8uaAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9pb19jYXQ2ODcwMS5oCi0gKgotICogQ29weXJpZ2h0IDIwMDAgU3R1YXJ0IE1lbmVmeSAoc3R1YXJ0Lm1lbmVmeUBzdC5jb20pCi0gKiAgICAgICAgICAgMjAwMSBZdXRhcm91IEViaWhhciAoZWJpaGFyYUBzaS1saW51eC5jb20pCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLgotICoKLSAqIElPIGZ1bmN0aW9ucyBmb3IgYW4gQU9ORSBDb3JwLiBDQVQtNjg3MDEgU0g3NzA4IEJvcmFkCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NIX0lPX0NBVDY4NzAxX0gKLSNkZWZpbmUgX0FTTV9TSF9JT19DQVQ2ODcwMV9ICi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIGNhdDY4NzAxX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOwotZXh0ZXJuIGludCBjYXQ2ODcwMV9pcnFfZGVtdXgoaW50IGlycSk7Ci0KLWV4dGVybiB2b2lkIGluaXRfY2F0Njg3MDFfSVJRKHZvaWQpOwotZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X2NhdDY4NzAxKHZvaWQpOwotCi0jZW5kaWYgLyogX0FTTV9TSF9JT19DQVQ2ODcwMV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oIGIvaW5jbHVkZS9hc20tc2gvY2hlY2tzdW0uaAppbmRleCBmYTAzYjMwLi4wODE2OGFmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jaGVja3N1bS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NoZWNrc3VtLmgKQEAgLTE1OSw2ICsxNTksNyBAQAogfQogCiAjZGVmaW5lIF9IQVZFX0FSQ0hfSVBWNl9DU1VNCisjaWZkZWYgQ09ORklHX0lQVjYKIHN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIHNob3J0IGludCBjc3VtX2lwdjZfbWFnaWMoc3RydWN0IGluNl9hZGRyICpzYWRkciwKIAkJCQkJCSAgICAgc3RydWN0IGluNl9hZGRyICpkYWRkciwKIAkJCQkJCSAgICAgX191MzIgbGVuLApAQCAtMTk0LDYgKzE5NSw3IEBACiAKIAlyZXR1cm4gY3N1bV9mb2xkKHN1bSk7CiB9CisjZW5kaWYKIAogLyogCiAgKglDb3B5IGFuZCBjaGVja3N1bSB0byB1c2VyCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtZmVhdHVyZXMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1mZWF0dXJlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiY2NkN2MwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LWZlYXR1cmVzLmgKQEAgLTAsMCArMSwyNCBAQAorI2lmbmRlZiBfX0FTTV9TSF9DUFVfRkVBVFVSRVNfSAorI2RlZmluZSBfX0FTTV9TSF9DUFVfRkVBVFVSRVNfSAorCisvKgorICogUHJvY2Vzc29yIGZsYWdzCisgKgorICogTm90ZTogV2hlbiBhZGRpbmcgYSBuZXcgZmxhZywga2VlcCBjcHVfZmxhZ3NbXSBpbgorICogYXJjaC9zaC9rZXJuZWwvc2V0dXAuYyBpbiBzeW5jIHNvIHN5bWJvbGljIG5hbWUKKyAqIG1hcHBpbmcgb2YgdGhlIHByb2Nlc3NvciBmbGFncyBoYXMgYSBjaGFuY2Ugb2YgYmVpbmcKKyAqIHJlYXNvbmFibHkgYWNjdXJhdGUuCisgKgorICogVGhlc2UgZmxhZ3MgYXJlIGFsc28gYXZhaWxhYmxlIHRocm91Z2ggdGhlIEVMRgorICogYXV4aWxpYXJ5IHZlY3RvciBhcyBBVF9IV0NBUC4KKyAqLworI2RlZmluZSBDUFVfSEFTX0ZQVQkJMHgwMDAxCS8qIEhhcmR3YXJlIEZQVSBzdXBwb3J0ICovCisjZGVmaW5lIENQVV9IQVNfUDJfRkxVU0hfQlVHCTB4MDAwMgkvKiBOZWVkIHRvIGZsdXNoIHRoZSBjYWNoZSBpbiBQMiBhcmVhICovCisjZGVmaW5lIENQVV9IQVNfTU1VX1BBR0VfQVNTT0MJMHgwMDA0CS8qIFNIMzogVExCIHdheSBzZWxlY3Rpb24gYml0IHN1cHBvcnQgKi8KKyNkZWZpbmUgQ1BVX0hBU19EU1AJCTB4MDAwOAkvKiBTSC1EU1A6IERTUCBzdXBwb3J0ICovCisjZGVmaW5lIENQVV9IQVNfUEVSRl9DT1VOVEVSCTB4MDAxMAkvKiBIYXJkd2FyZSBwZXJmb3JtYW5jZSBjb3VudGVycyAqLworI2RlZmluZSBDUFVfSEFTX1BURUEJCTB4MDAyMAkvKiBQVEVBIHJlZ2lzdGVyICovCisjZGVmaW5lIENQVV9IQVNfTExTQwkJMHgwMDQwCS8qIG1vdmxpLmwvbW92Y28ubCAqLworI2RlZmluZSBDUFVfSEFTX0wyX0NBQ0hFCTB4MDA4MAkvKiBTZWNvbmRhcnkgY2FjaGUgLyBVUkFNICovCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9DUFVfRkVBVFVSRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMi9zaG1wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MTdjMTgyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDIvc2htcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gyL3NobXBhcmFtLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgIFBhdWwgTXVuZHQKLSAqCi0gKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMgYXJjaGl2ZQotICogZm9yIG1vcmUgZGV0YWlscy4KLSAqLwotI2lmbmRlZiBfX0FTTV9DUFVfU0gyX1NITVBBUkFNX0gKLSNkZWZpbmUgX19BU01fQ1BVX1NIMl9TSE1QQVJBTV9ICi0KLSNkZWZpbmUJU0hNTEJBIFBBR0VfU0laRQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLwotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NIMl9TSE1QQVJBTV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGUuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGUuaAppbmRleCA0MDZhYThkLi5mZmUwOGQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2NhY2hlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZS5oCkBAIC0yNiwxMiArMjYsMTAgQEAKICNkZWZpbmUgQ0NSX0NBQ0hFX0VOQUJMRQlDQ1JfQ0FDSEVfQ0UKICNkZWZpbmUgQ0NSX0NBQ0hFX0lOVkFMSURBVEUJQ0NSX0NBQ0hFX0NGCiAKLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiAjZGVmaW5lIENDUjMJMHhhNDAwMDBiNAogI2RlZmluZSBDQ1JfQ0FDSEVfMTZLQiAgMHgwMDAxMDAwMAogI2RlZmluZSBDQ1JfQ0FDSEVfMzJLQgkweDAwMDIwMDAwCiAjZW5kaWYKIAotCiAjZW5kaWYgLyogX19BU01fQ1BVX1NIM19DQUNIRV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZWZsdXNoLmgKaW5kZXggZjUxYWVkMC4uMDNmZGU5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9jYWNoZWZsdXNoLmgKQEAgLTEwLDcgKzEwLDcgQEAKICNpZm5kZWYgX19BU01fQ1BVX1NIM19DQUNIRUZMVVNIX0gKICNkZWZpbmUgX19BU01fQ1BVX1NIM19DQUNIRUZMVVNIX0gKIAotLyogCisvKgogICogQ2FjaGUgZmx1c2hpbmc6CiAgKgogICogIC0gZmx1c2hfY2FjaGVfYWxsKCkgZmx1c2hlcyBlbnRpcmUgY2FjaGUKQEAgLTM1LDUzICszNSwzMyBAQAogIC8qIDMyS0IgY2FjaGUsIDRrYiBQQUdFIHNpemVzIG5lZWQgdG8gY2hlY2sgYml0IDEyICovCiAjZGVmaW5lIENBQ0hFX0FMSUFTIDB4MDAwMDEwMDAKIAotc3RydWN0IHBhZ2U7Ci1zdHJ1Y3QgbW1fc3RydWN0Owotc3RydWN0IHZtX2FyZWFfc3RydWN0OworI2RlZmluZSBQR19tYXBwZWQJUEdfYXJjaF8xCiAKLWV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKLWV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKLWV4dGVybiB2b2lkIGZsdXNoX2NhY2hlX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LAordm9pZCBmbHVzaF9jYWNoZV9hbGwodm9pZCk7Cit2b2lkIGZsdXNoX2NhY2hlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKK3ZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGVuZCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwZyk7Ci1leHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotZXh0ZXJuIHZvaWQgZmx1c2hfaWNhY2hlX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlKTsKK3ZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHBmbik7Cit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwZyk7Cit2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Cit2b2lkIGZsdXNoX2ljYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CisjZWxzZQorI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBmbHVzaF9pY2FjaGVfcmFuZ2Uoc3RhcnQsIGVuZCkJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBnKQkJZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQogCiAvKiBTSDMgaGFzIHVuaWZpZWQgY2FjaGUgc28gbm8gc3BlY2lhbCBhY3Rpb24gbmVlZGVkIGhlcmUgKi8KICNkZWZpbmUgZmx1c2hfY2FjaGVfc2lndHJhbXAodmFkZHIpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX3BhZ2VfdG9fcmFtKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9pY2FjaGVfdXNlcl9yYW5nZSh2bWEscGcsYWRyLGxlbikJZG8geyB9IHdoaWxlICgwKQogCiAjZGVmaW5lIHAzX2NhY2hlX2luaXQoKQkJCQlkbyB7IH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgUEdfbWFwcGVkCVBHX2FyY2hfMQotCi0vKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gYXZvaWQgY2FjaGUgYWxpYXMgaXNzdWUgKi8KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLQotI2Vsc2UKLQotI2RlZmluZSBmbHVzaF9jYWNoZV9hbGwoKQkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfbW0obW0pCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9jYWNoZV9yYW5nZSh2bWEsIHN0YXJ0LCBlbmQpCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgZmx1c2hfY2FjaGVfcGFnZSh2bWEsIHZtYWRkciwgcGZuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF9sb2NrKG1hcHBpbmcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzdGFydCwgZW5kKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBmbHVzaF9pY2FjaGVfcGFnZSh2bWEscGcpCQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwZyxhZHIsbGVuKQlkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIGZsdXNoX2NhY2hlX3NpZ3RyYW1wKHZhZGRyKQkJZG8geyB9IHdoaWxlICgwKQotCi0jZGVmaW5lIHAzX2NhY2hlX2luaXQoKQkJCQlkbyB7IH0gd2hpbGUgKDApCi0KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTTV9DUFVfU0gzX0NBQ0hFRkxVU0hfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL2ZyZXEuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZnJlcS5oCmluZGV4IGI2MWI2ZTMuLjI3M2YzMjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZnJlcS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvZnJlcS5oCkBAIC0xOCw1ICsxOCw5IEBACiAjZGVmaW5lIE1JTl9ESVZJU09SX05SCQkwCiAjZGVmaW5lIE1BWF9ESVZJU09SX05SCQk0CiAKKyNkZWZpbmUgRlJRQ1JfQ0tPRU4JMHgwMTAwCisjZGVmaW5lIEZSUUNSX1BMTEVOCTB4MDA4MAorI2RlZmluZSBGUlFDUl9QU1RCWQkweDAwNDAKKwogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfRlJFUV9IICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvbW11X2NvbnRleHQuaAppbmRleCBhODQ0ZWEwLi5iY2NiN2RkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL21tdV9jb250ZXh0LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9tbXVfY29udGV4dC5oCkBAIC0yNyw4ICsyNywxMiBAQAogI2RlZmluZSBUUkEJMHhmZmZmZmZkMAogI2RlZmluZSBFWFBFVlQJMHhmZmZmZmZkNAogCi0jaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA3KSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKLSAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMDApIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDUpIHx8IFwKKyAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiAjZGVmaW5lIElOVEVWVAkweGE0MDAwMDAwCS8qIElOVEVWVEUyKDB4YTQwMDAwMDApICovCiAjZWxzZQogI2RlZmluZSBJTlRFVlQJMHhmZmZmZmZkOApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9zaG1wYXJhbS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy9zaG1wYXJhbS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTViNWVlLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvc2htcGFyYW0uaAorKysgL2Rldi9udWxsCkBAIC0xLDE2ICswLDAgQEAKLS8qCi0gKiBpbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3NobXBhcmFtLmgKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCi0gKgotICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKLSAqIGZvciBtb3JlIGRldGFpbHMuCi0gKi8KLSNpZm5kZWYgX19BU01fQ1BVX1NIM19TSE1QQVJBTV9ICi0jZGVmaW5lIF9fQVNNX0NQVV9TSDNfU0hNUEFSQU1fSAotCi0jZGVmaW5lCVNITUxCQSBQQUdFX1NJWkUJCSAvKiBhdHRhY2ggYWRkciBhIG11bHRpcGxlIG9mIHRoaXMgKi8KLQotI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDNfU0hNUEFSQU1fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3RpbWVyLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3RpbWVyLmgKaW5kZXggM2Q4ZTk1ZS4uYjIzOTRjZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy90aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvdGltZXIuaApAQCAtMjAsOSArMjAsMTQgQEAKICAqCVNINzcxMAogICoJU0g3NzIwCiAgKglTSDczMDAKKyAqCVNINzcxMAogICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKi8KIAorI2lmICFkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MjcpCisjZGVmaW5lIFRNVV9UT0NSCTB4ZmZmZmZlOTAJLyogQnl0ZSBhY2Nlc3MgKi8KKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiAjZGVmaW5lIFRNVV9UU1RSCTB4YTQxMmZlOTIJLyogQnl0ZSBhY2Nlc3MgKi8KIApAQCAtMzksOSArNDQsNiBAQAogI2RlZmluZSBUTVUyX1RDUgkweGE0MTJmZWI0CS8qIFdvcmQgYWNjZXNzICovCiAKICNlbHNlCi0jaWYgIWRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcyNykKLSNkZWZpbmUgVE1VX1RPQ1IJMHhmZmZmZmU5MAkvKiBCeXRlIGFjY2VzcyAqLwotI2VuZGlmCiAjZGVmaW5lIFRNVV9UU1RSCTB4ZmZmZmZlOTIJLyogQnl0ZSBhY2Nlc3MgKi8KIAogI2RlZmluZSBUTVUwX1RDT1IJMHhmZmZmZmU5NAkvKiBMb25nIGFjY2VzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDMvdWJjLmgKaW5kZXggMGY4MDlkZS4uOWQzMDhjYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoMy91YmMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2gzL3ViYy5oCkBAIC0xMSw2ICsxMSwxOSBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0gzX1VCQ19ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDNfVUJDX0gKIAorI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKyNkZWZpbmUgVUJDX0JBUkEJCTB4YTRmZmZmYjAKKyNkZWZpbmUgVUJDX0JBTVJBCQkweGE0ZmZmZmI0CisjZGVmaW5lIFVCQ19CQlJBCQkweGE0ZmZmZmI4CisjZGVmaW5lIFVCQ19CQVNSQQkJMHhmZmZmZmZlNAorI2RlZmluZSBVQkNfQkFSQgkJMHhhNGZmZmZhMAorI2RlZmluZSBVQkNfQkFNUkIJCTB4YTRmZmZmYTQKKyNkZWZpbmUgVUJDX0JCUkIJCTB4YTRmZmZmYTgKKyNkZWZpbmUgVUJDX0JBU1JCCQkweGZmZmZmZmU4CisjZGVmaW5lIFVCQ19CRFJCCQkweGE0ZmZmZjkwCisjZGVmaW5lIFVCQ19CRE1SQgkJMHhhNGZmZmY5NAorI2RlZmluZSBVQkNfQlJDUgkJMHhhNGZmZmY5OAorI2Vsc2UKICNkZWZpbmUgVUJDX0JBUkEgICAgICAgICAgICAgICAgMHhmZmZmZmZiMAogI2RlZmluZSBVQkNfQkFNUkEgICAgICAgICAgICAgICAweGZmZmZmZmI0CiAjZGVmaW5lIFVCQ19CQlJBICAgICAgICAgICAgICAgIDB4ZmZmZmZmYjgKQEAgLTIyLDYgKzM1LDYgQEAKICNkZWZpbmUgVUJDX0JEUkIgICAgICAgICAgICAgICAgMHhmZmZmZmY5MAogI2RlZmluZSBVQkNfQkRNUkIgICAgICAgICAgICAgICAweGZmZmZmZjk0CiAjZGVmaW5lIFVCQ19CUkNSICAgICAgICAgICAgICAgIDB4ZmZmZmZmOTgKKyNlbmRpZgogCiAjZW5kaWYgLyogX19BU01fQ1BVX1NIM19VQkNfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2FkZHJzcGFjZS5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9hZGRyc3BhY2UuaAppbmRleCA3Mjc2MzRkLi5iYjJlMWIwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2FkZHJzcGFjZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvYWRkcnNwYWNlLmgKQEAgLTIyLDUgKzIyLDggQEAKICNkZWZpbmUgUDRTRUdfVExCX0RBVEEJMHhmNzAwMDAwMAogI2RlZmluZSBQNFNFR19SRUdfQkFTRQkweGZmMDAwMDAwCiAKKyNkZWZpbmUgUEFfQVJFQTVfSU8JMHhiNDAwMDAwMAkvKiBBcmVhIDUgSU8gTWVtb3J5ICovCisjZGVmaW5lIFBBX0FSRUE2X0lPCTB4YjgwMDAwMDAJLyogQXJlYSA2IElPIE1lbW9yeSAqLworCiAjZW5kaWYgLyogX19BU01fQ1BVX1NINF9BRERSU1BBQ0VfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2NhY2hlLmgKaW5kZXggMWZlMjAzNS4uNmU5YzdlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGUuaApAQCAtMjIsNyArMjIsOSBAQAogI2RlZmluZSBDQ1JfQ0FDSEVfSUNFCTB4MDEwMAkvKiBJbnN0cnVjdGlvbiBDYWNoZSBFbmFibGUgKi8KICNkZWZpbmUgQ0NSX0NBQ0hFX0lDSQkweDA4MDAJLyogSUMgSW52YWxpZGF0ZSAqLwogI2RlZmluZSBDQ1JfQ0FDSEVfSUlYCTB4ODAwMAkvKiBJQyBJbmRleCBFbmFibGUgKi8KKyNpZm5kZWYgQ09ORklHX0NQVV9TVUJUWVBFX1NINzc4MAogI2RlZmluZSBDQ1JfQ0FDSEVfRU1PREUJMHg4MDAwMDAwMAkvKiBFTU9ERSBFbmFibGUgKi8KKyNlbmRpZgogCiAvKiBEZWZhdWx0IENDUiBzZXR1cDogOGsrMTZrLWJ5dGUgY2FjaGUsUDEtd2IsZW5hYmxlICovCiAjZGVmaW5lIENDUl9DQUNIRV9FTkFCTEUJKENDUl9DQUNIRV9PQ0V8Q0NSX0NBQ0hFX0lDRSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvY2FjaGVmbHVzaC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKaW5kZXggZjMyMzU2Ny4uNTE1ZmQ1NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9jYWNoZWZsdXNoLmgKQEAgLTE2LDQwICsxNiwyOSBAQAogICogIGNhY2hpbmc7IGluIHdoaWNoIGNhc2UgdGhleSdyZSBvbmx5IHNlbWktYnJva2VuKSwKICAqICBzbyB3ZSBuZWVkIHRoZW0uCiAgKi8KLQotLyogUGFnZSBpcyA0SywgT0Mgc2l6ZSBpcyAxNkssIHRoZXJlIGFyZSBmb3VyIGxpbmVzLiAqLwotI2RlZmluZSBDQUNIRV9BTElBUyAweDAwMDAzMDAwCi0KLXN0cnVjdCBwYWdlOwotc3RydWN0IG1tX3N0cnVjdDsKLXN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKLQotZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfYWxsKHZvaWQpOwotZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwotZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCk7Ci1leHRlcm4gdm9pZCBmbHVzaF9jYWNoZV9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGZuKTsKLWV4dGVybiB2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwZyk7Cit2b2lkIGZsdXNoX2NhY2hlX2FsbCh2b2lkKTsKK3ZvaWQgZmx1c2hfY2FjaGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pOwordm9pZCBmbHVzaF9jYWNoZV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKTsKK3ZvaWQgZmx1c2hfY2FjaGVfcGFnZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkgICAgICB1bnNpZ25lZCBsb25nIHBmbik7Cit2b2lkIGZsdXNoX2RjYWNoZV9wYWdlKHN0cnVjdCBwYWdlICpwZyk7CiAKICNkZWZpbmUgZmx1c2hfZGNhY2hlX21tYXBfbG9jayhtYXBwaW5nKQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBmbHVzaF9kY2FjaGVfbW1hcF91bmxvY2sobWFwcGluZykJZG8geyB9IHdoaWxlICgwKQogCi1leHRlcm4gdm9pZCBmbHVzaF9pY2FjaGVfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpOwotZXh0ZXJuIHZvaWQgZmx1c2hfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCSAgICBpbnQgbGVuKTsKK3ZvaWQgZmx1c2hfaWNhY2hlX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKTsKK3ZvaWQgZmx1c2hfY2FjaGVfc2lndHJhbXAodW5zaWduZWQgbG9uZyBhZGRyKTsKK3ZvaWQgZmx1c2hfaWNhY2hlX3VzZXJfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIsIGludCBsZW4pOwogCiAjZGVmaW5lIGZsdXNoX2ljYWNoZV9wYWdlKHZtYSxwZykJCWRvIHsgfSB3aGlsZSAoMCkKIAogLyogSW5pdGlhbGl6YXRpb24gb2YgUDMgYXJlYSBmb3IgY29weV91c2VyX3BhZ2UgKi8KLWV4dGVybiB2b2lkIHAzX2NhY2hlX2luaXQodm9pZCk7Cit2b2lkIHAzX2NhY2hlX2luaXQodm9pZCk7CiAKICNkZWZpbmUgUEdfbWFwcGVkCVBHX2FyY2hfMQogCi0vKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkX2FyZWEgdG8gYXZvaWQgY2FjaGUgYWxpYXMgaXNzdWUgKi8KLSNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKLQogI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiBpbnQgcmVtYXBfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLAogCQkJICAgIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9uZyBmbGFncyk7CkBAIC02MSw0ICs1MCwzIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfQ0FDSEVGTFVTSF9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLXNoNzc4MC5oIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEtc2g3NzgwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM5MGQyOAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLXNoNzc4MC5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKyNkZWZpbmUgX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0gKKworI2RlZmluZSBSRVFfSEUJMHgwMDAwMDBDMAorI2RlZmluZSBSRVFfSAkweDAwMDAwMDgwCisjZGVmaW5lIFJFUV9MRQkweDAwMDAwMDQwCisjZGVmaW5lIFRNX0JVUlNUIDB4MDAwMDAyMAorI2RlZmluZSBUU184CTB4MDAwMDAwMDAKKyNkZWZpbmUgVFNfMTYJMHgwMDAwMDAwOAorI2RlZmluZSBUU18zMgkweDAwMDAwMDEwCisjZGVmaW5lIFRTXzE2QkxLCTB4MDAwMDAwMTgKKyNkZWZpbmUgVFNfMzJCTEsJMHgwMDEwMDAwMAorCisvKgorICogVGhlIFN1cGVySCBETUFDIHN1cHBvcnRzIGEgbnVtYmVyIG9mIHRyYW5zbWl0IHNpemVzLCB3ZSBsaXN0IHRoZW0gaGVyZSwKKyAqIHdpdGggdGhlaXIgcmVzcGVjdGl2ZSB2YWx1ZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIENIQ1IgcmVnaXN0ZXJzLgorICoKKyAqIERlZmF1bHRzIHRvIGEgNjQtYml0IHRyYW5zZmVyIHNpemUuCisgKi8KK2VudW0geworCVhNSVRfU1pfOEJJVCwKKwlYTUlUX1NaXzE2QklULAorCVhNSVRfU1pfMzJCSVQsCisJWE1JVF9TWl8xMjhCSVQsCisJWE1JVF9TWl8yNTZCSVQsCit9OworCisvKgorICogVGhlIERNQSBjb3VudCBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgYnl0ZXMgdG8gdHJhbnNmZXIuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgX19hdHRyaWJ1dGVfXyAoKHVzZWQpKSB0c19zaGlmdFtdID0geworCVtYTUlUX1NaXzhCSVRdCQk9IDAsCisJW1hNSVRfU1pfMTZCSVRdCQk9IDEsCisJW1hNSVRfU1pfMzJCSVRdCQk9IDIsCisJW1hNSVRfU1pfMTI4QklUXQk9IDQsCisJW1hNSVRfU1pfMjU2QklUXQk9IDUsCit9OworCisjZW5kaWYgLyogX19BU01fU0hfQ1BVX1NINF9ETUFfU0g3NzgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmggYi9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L2RtYS5oCmluZGV4IDBkZmU2MWYuLjNlNGIzZTYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvZG1hLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9kbWEuaApAQCAtMSwxMSArMSwxNyBAQAogI2lmbmRlZiBfX0FTTV9DUFVfU0g0X0RNQV9ICiAjZGVmaW5lIF9fQVNNX0NQVV9TSDRfRE1BX0gKIAorI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKKwogI2lmZGVmIENPTkZJR19DUFVfU0g0QQogI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmYzgwODAyMAorCisjZGVmaW5lIENIQ1JfVFNfTUFTSwkweDE4CisjZGVmaW5lIENIQ1JfVFNfU0hJRlQJMworCisjaW5jbHVkZSA8YXNtL2NwdS9kbWEtc2g3NzgwLmg+CiAjZWxzZQogI2RlZmluZSBTSF9ETUFDX0JBU0UJMHhmZmEwMDAwMAotI2VuZGlmCiAKIC8qIERlZmluaXRpb25zIGZvciB0aGUgU3VwZXJIIERNQUMgKi8KICNkZWZpbmUgVE1fQlVSU1QJMHgwMDAwMDgwCkBAIC0xOSw4ICsyNSw2IEBACiAKICNkZWZpbmUgRE1BT1JfQ09ECTB4MDAwMDAwMDgKIAotI2RlZmluZSBETUFPUl9JTklUCSggMHg4MDAwIHwgRE1BT1JfRE1FICkKLQogLyoKICAqIFRoZSBTdXBlckggRE1BQyBzdXBwb3J0cyBhIG51bWJlciBvZiB0cmFuc21pdCBzaXplcywgd2UgbGlzdCB0aGVtIGhlcmUsCiAgKiB3aXRoIHRoZWlyIHJlc3BlY3RpdmUgdmFsdWVzIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBDSENSIHJlZ2lzdGVycy4KQEAgLTQ1LDUgKzQ5LDYgQEAKIAlbWE1JVF9TWl8zMkJJVF0JCT0gMiwKIAlbWE1JVF9TWl8yNTZCSVRdCT0gNSwKIH07CisjZW5kaWYKIAogI2VuZGlmIC8qIF9fQVNNX0NQVV9TSDRfRE1BX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc2htcGFyYW0uaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc2htcGFyYW0uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhMGFhOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NobXBhcmFtLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxOSArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zaG1wYXJhbS5oCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk5IE5paWJlIFl1dGFrYQotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX0NQVV9TSDRfU0hNUEFSQU1fSAotI2RlZmluZSBfX0FTTV9DUFVfU0g0X1NITVBBUkFNX0gKLQotLyoKLSAqIFNILTQgaGFzIEQtY2FjaGUgYWxpYXMgaXNzdWUKLSAqLwotI2RlZmluZQlTSE1MQkEgKFBBR0VfU0laRSo0KQkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLwotCi0jZW5kaWYgLyogX19BU01fQ1BVX1NINF9TSE1QQVJBTV9IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc3EuaCBiL2luY2x1ZGUvYXNtLXNoL2NwdS1zaDQvc3EuaAppbmRleCAzNjZiMDkxLi41ODZkNjQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9jcHUtc2g0L3NxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvY3B1LXNoNC9zcS5oCkBAIC0xNyw3ICsxNyw3IEBACiAgKiBTdG9yZSBxdWV1ZXMgcmFuZ2UgZnJvbSBlMDAwMDAwMC1lM2ZmZmZmYywgYWxsb3dpbmcgYXBwcm94LiA2NE1CIHRvIGJlCiAgKiBtYXBwZWQgdG8gYW55IHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuIFNpbmNlIGRhdGEgaXMgd3JpdHRlbiAoYW5kIGFsaWduZWQpCiAgKiB0byAzMi1ieXRlIGJvdW5kYXJpZXMsIHdlIG5lZWQgdG8gYmUgc3VyZSB0aGF0IGFsbCBhbGxvY2F0aW9ucyBhcmUgYWxpZ25lZC4KLSAqLyAKKyAqLwogI2RlZmluZSBTUV9TSVpFICAgICAgICAgICAgICAgICAzMgogI2RlZmluZSBTUV9BTElHTl9NQVNLICAgICAgICAgICAofihTUV9TSVpFIC0gMSkpCiAjZGVmaW5lIFNRX0FMSUdOKGFkZHIpICAgICAgICAgICgoKGFkZHIpK1NRX1NJWkUtMSkgJiBTUV9BTElHTl9NQVNLKQpAQCAtMjYsMjMgKzI2LDEwIEBACiAjZGVmaW5lIFNRX1FBQ1IxCQkoUDRTRUdfUkVHX0JBU0UgICsgMHgzYykKICNkZWZpbmUgU1FfQUREUk1BWCAgICAgICAgICAgICAgKFA0U0VHX1NUT1JFX1FVRSArIDB4MDQwMDAwMDApCiAKLXN0cnVjdCBzcV9tYXBwaW5nIHsKLQljb25zdCBjaGFyICpuYW1lOwotCi0JdW5zaWduZWQgbG9uZyBzcV9hZGRyOwotCXVuc2lnbmVkIGxvbmcgYWRkcjsKLQl1bnNpZ25lZCBpbnQgc2l6ZTsKLQotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLX07Ci0KIC8qIGFyY2gvc2gva2VybmVsL2NwdS9zaDQvc3EuYyAqLwotZXh0ZXJuIHN0cnVjdCBzcV9tYXBwaW5nICpzcV9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGludCBzaXplLCBjb25zdCBjaGFyICpuYW1lKTsKLWV4dGVybiB2b2lkIHNxX3VubWFwKHN0cnVjdCBzcV9tYXBwaW5nICptYXApOwotCi1leHRlcm4gdm9pZCBzcV9jbGVhcih1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGludCBsZW4pOwotZXh0ZXJuIHZvaWQgc3FfZmx1c2godm9pZCAqYWRkcik7Ci1leHRlcm4gdm9pZCBzcV9mbHVzaF9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBpbnQgbGVuKTsKK3Vuc2lnbmVkIGxvbmcgc3FfcmVtYXAodW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBpbnQgc2l6ZSwKKwkJICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordm9pZCBzcV91bm1hcCh1bnNpZ25lZCBsb25nIHZhZGRyKTsKK3ZvaWQgc3FfZmx1c2hfcmFuZ2UodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgaW50IGxlbik7CiAKICNlbmRpZiAvKiBfX0FTTV9DUFVfU0g0X1NRX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvY3FyZWVrL2NxcmVlay5oIGIvaW5jbHVkZS9hc20tc2gvY3FyZWVrL2NxcmVlay5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwOWFlY2MwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2NxcmVlay9jcXJlZWsuaAorKysgL2Rldi9udWxsCkBAIC0xLDI3ICswLDAgQEAKLSNpZm5kZWYgX19BU01fU0hfQ1FSRUVLX0NRUkVFS19ICi0jZGVmaW5lIF9fQVNNX1NIX0NRUkVFS19DUVJFRUtfSAotCi0jZGVmaW5lIEJSSURHRV9GRUFUVVJFCQkweDAwMDIKLQotI2RlZmluZSBCUklER0VfSURFX0NUUkwJCTB4MDAxOAotI2RlZmluZSBCUklER0VfSURFX0lOVFJfTFZMICAgIAkweDAwMUEKLSNkZWZpbmUgQlJJREdFX0lERV9JTlRSX01BU0sJMHgwMDFDCi0jZGVmaW5lIEJSSURHRV9JREVfSU5UUl9TVEFUCTB4MDAxRQotCi0jZGVmaW5lIEJSSURHRV9JU0FfQ1RSTAkJMHgwMDI4Ci0jZGVmaW5lIEJSSURHRV9JU0FfSU5UUl9MVkwgICAgCTB4MDAyQQotI2RlZmluZSBCUklER0VfSVNBX0lOVFJfTUFTSwkweDAwMkMKLSNkZWZpbmUgQlJJREdFX0lTQV9JTlRSX1NUQVQJMHgwMDJFCi0KLS8qIGFyY2gvc2gvYm9hcmRzL2NxcmVlay9zZXR1cC5jICovCi1leHRlcm4gdm9pZCBzZXR1cF9jcXJlZWsodm9pZCk7Ci0KLS8qIGFyY2gvc2gvYm9hcmRzL2NxcmVlay9pcnEuYyAqLwotZXh0ZXJuIGludCBjcXJlZWtfaGFzX2lkZSwgY3FyZWVrX2hhc19pc2E7Ci1leHRlcm4gdm9pZCBpbml0X2NxcmVla19JUlEodm9pZCk7Ci0KLS8qIGFyY2gvc2gvYm9hcmRzL2NxcmVlay9pby5jICovCi1leHRlcm4gdW5zaWduZWQgbG9uZyBjcXJlZWtfcG9ydDJhZGRyKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9DUVJFRUtfQ1FSRUVLX0ggKi8KLQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKaW5kZXggMTI0OTY4ZjkuLjU2Y2Q0YjkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZG1hLW1hcHBpbmcuaApAQCAtMTQxLDI1ICsxNDEsMzUgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQotCV9fYXR0cmlidXRlX18gKChhbGlhcygiZG1hX3N5bmNfc2luZ2xlIikpKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlkbWFfc3luY19zaW5nbGUoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXIpOworfQogCi1zdGF0aWMgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3N5bmNfc2luZ2xlKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAogCQkJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi0JX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zaW5nbGUiKSkpOworeworCWRtYV9zeW5jX3NnKGRldiwgc2csIG5lbGVtcywgZGlyKTsKK30KIAotc3RhdGljIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCi0JX19hdHRyaWJ1dGVfXyAoKGFsaWFzKCJkbWFfc3luY19zZyIpKSk7CitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKKwkJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJZG1hX3N5bmNfc2coZGV2LCBzZywgbmVsZW1zLCBkaXIpOworfQogCi1zdGF0aWMgdm9pZCBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKLQlfX2F0dHJpYnV0ZV9fICgoYWxpYXMoImRtYV9zeW5jX3NnIikpKTsKIAogc3RhdGljIGlubGluZSBpbnQgZG1hX2dldF9jYWNoZV9hbGlnbm1lbnQodm9pZCkKIHsKQEAgLTE3NCw2ICsxODQsNCBAQAogewogCXJldHVybiBkbWFfYWRkciA9PSAwOwogfQotCiAjZW5kaWYgLyogX19BU01fU0hfRE1BX01BUFBJTkdfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9kbWEuaCBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCmluZGV4IGU2MmE2ZDAuLmQ5ZGFhMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtYS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2RtYS5oCkBAIC04OSw2ICs4OSw3IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdF9xdWV1ZTsKIAogCXN0cnVjdCBzeXNfZGV2aWNlIGRldjsKKwljaGFyICpuYW1lOwogfTsKIAogc3RydWN0IGRtYV9pbmZvIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2RtaWRhL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9kbWlkYS9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMWJkNDE2Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2RtaWRhL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMCArMCwwIEBACi0jaWZuZGVmIF9fQVNNX1NIX0RNSURBX0lPX0gKLSNkZWZpbmUgX19BU01fU0hfRE1JREFfSU9fSAotCi0vKgotICogTm90aGluZyBzcGVjaWFsIGhlcmUuLiBqdXN0IHVzZSB0aGUgZ2VuZXJpYyBjY2hpcCBpbyByb3V0aW5lcy4KLSAqLwotI2luY2x1ZGUgPGFzbS9oZDY0NDY1L2lvLmg+Ci0KLSNlbmRpZiAvKiBfX0FTTV9TSF9ETUlEQV9JT19IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2VjMzEwNC9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2tleWJvYXJkLmgKaW5kZXggMGRlZTdiMC4uYzEyNTNhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2tleWJvYXJkLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvZWMzMTA0L2tleWJvYXJkLmgKQEAgLTYsOCArNiw2IEBACiBleHRlcm4gdm9pZCBlYzMxMDRfa2JkX2xlZHModW5zaWduZWQgY2hhcik7CiBleHRlcm4gdm9pZCBlYzMxMDRfa2JkX2luaXRfaHcodm9pZCk7CiAKLSNkZWZpbmUgU1lTUlFfS0VZIDB4NTQKLQogI2RlZmluZSBrYmRfc3lzcnFfeGxhdGUgZWMzMTA0X2tiZF9zeXNycV94bGF0ZQogI2RlZmluZSBrYmRfc2V0a2V5Y29kZSBlYzMxMDRfa2JkX3NldGtleWNvZGUKICNkZWZpbmUga2JkX2dldGtleWNvZGUgZWMzMTA0X2tiZF9nZXRrZXljb2RlCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9lbGYuaCBiL2luY2x1ZGUvYXNtLXNoL2VsZi5oCmluZGV4IDFiNjNkZmUuLjNhMDdhYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2VsZi5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2VsZi5oCkBAIC0xLDYgKzEsMTEgQEAKICNpZm5kZWYgX19BU01fU0hfRUxGX0gKICNkZWZpbmUgX19BU01fU0hfRUxGX0gKIAorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisKIC8qIFNIIHJlbG9jYXRpb24gdHlwZXMgICovCiAjZGVmaW5lCVJfU0hfTk9ORQkJMAogI2RlZmluZQlSX1NIX0RJUjMyCQkxCkBAIC00Niw5ICs1MSw2IEBACiAgKiBFTEYgcmVnaXN0ZXIgZGVmaW5pdGlvbnMuLgogICovCiAKLSNpbmNsdWRlIDxhc20vcHRyYWNlLmg+Ci0jaW5jbHVkZSA8YXNtL3VzZXIuaD4KLQogdHlwZWRlZiB1bnNpZ25lZCBsb25nIGVsZl9ncmVnX3Q7CiAKICNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKQEAgLTkxLDcgKzkzLDcgQEAKICAgIGluc3RydWN0aW9uIHNldCB0aGlzIENQVSBzdXBwb3J0cy4gIFRoaXMgY291bGQgYmUgZG9uZSBpbiB1c2VyIHNwYWNlLAogICAgYnV0IGl0J3Mgbm90IGVhc3ksIGFuZCB3ZSd2ZSBhbHJlYWR5IGRvbmUgaXQgaGVyZS4gICovCiAKLSNkZWZpbmUgRUxGX0hXQ0FQCSgwKQorI2RlZmluZSBFTEZfSFdDQVAJKGJvb3RfY3B1X2RhdGEuZmxhZ3MpCiAKIC8qIFRoaXMgeWllbGRzIGEgc3RyaW5nIHRoYXQgbGQuc28gd2lsbCB1c2UgdG8gbG9hZCBpbXBsZW1lbnRhdGlvbgogICAgc3BlY2lmaWMgbGlicmFyaWVzIGZvciBvcHRpbWl6YXRpb24uICBUaGlzIGlzIG1vcmUgc3BlY2lmaWMgaW4KQEAgLTExOSw0ICsxMjEsMjQgQEAKICNkZWZpbmUgRUxGX0NPUkVfQ09QWV9GUFJFR1ModHNrLCBlbGZfZnByZWdzKSBkdW1wX3Rhc2tfZnB1KHRzaywgZWxmX2ZwcmVncykKICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1ZTWVNDQUxMCisvKiB2RFNPIGhhcyBhcmNoX3NldHVwX2FkZGl0aW9uYWxfcGFnZXMgKi8KKyNkZWZpbmUgQVJDSF9IQVNfU0VUVVBfQURESVRJT05BTF9QQUdFUworc3RydWN0IGxpbnV4X2JpbnBybTsKK2V4dGVybiBpbnQgYXJjaF9zZXR1cF9hZGRpdGlvbmFsX3BhZ2VzKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sCisJCQkJICAgICAgIGludCBleGVjdXRhYmxlX3N0YWNrKTsKKworZXh0ZXJuIHVuc2lnbmVkIGludCB2ZHNvX2VuYWJsZWQ7CitleHRlcm4gdm9pZCBfX2tlcm5lbF92c3lzY2FsbDsKKworI2RlZmluZSBWRFNPX0JBU0UJCSgodW5zaWduZWQgbG9uZyljdXJyZW50LT5tbS0+Y29udGV4dC52ZHNvKQorI2RlZmluZSBWRFNPX1NZTSh4KQkJKFZEU09fQkFTRSArICh1bnNpZ25lZCBsb25nKSh4KSkKKworI2RlZmluZSBBUkNIX0RMSU5GTwkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKwlpZiAodmRzb19lbmFibGVkKQkJCQkJXAorCQlORVdfQVVYX0VOVChBVF9TWVNJTkZPX0VIRFIsIFZEU09fQkFTRSk7CVwKK30gd2hpbGUgKDApCisjZW5kaWYgLyogQ09ORklHX1ZTWVNDQUxMICovCisKICNlbmRpZiAvKiBfX0FTTV9TSF9FTEZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvZml4bWFwLmggYi9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaAppbmRleCA0MTJiY2NhLi40NThlOWZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9maXhtYXAuaApAQCAtMjUsNyArMjUsNyBAQAogICogYWRkcmVzc2VzLiBUaGUgcG9pbnQgaXMgdG8gaGF2ZSBhIGNvbnN0YW50IGFkZHJlc3MgYXQKICAqIGNvbXBpbGUgdGltZSwgYnV0IHRvIHNldCB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvbmx5CiAgKiBpbiB0aGUgYm9vdCBwcm9jZXNzLiBXZSBhbGxvY2F0ZSB0aGVzZSBzcGVjaWFsICBhZGRyZXNzZXMKLSAqIGZyb20gdGhlIGVuZCBvZiB2aXJ0dWFsIG1lbW9yeSAoMHhmZmZmZjAwMCkgYmFja3dhcmRzLgorICogZnJvbSB0aGUgZW5kIG9mIFAzIGJhY2t3YXJkcy4KICAqIEFsc28gdGhpcyBsZXRzIHVzIGRvIGZhaWwtc2FmZSB2bWFsbG9jKCksIHdlCiAgKiBjYW4gZ3VhcmFudGVlIHRoYXQgdGhlc2Ugc3BlY2lhbCBhZGRyZXNzZXMgYW5kCiAgKiB2bWFsbG9jKCktZWQgYWRkcmVzc2VzIG5ldmVyIG92ZXJsYXAuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9mbGF0LmggYi9pbmNsdWRlL2FzbS1zaC9mbGF0LmgKaW5kZXggZjI5MDcyZS4uMGQ1Y2MwNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvZmxhdC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2ZsYXQuaApAQCAtMTMsNyArMTMsNyBAQAogI2RlZmluZSBfX0FTTV9TSF9GTEFUX0gKIAogI2RlZmluZQlmbGF0X3N0YWNrX2FsaWduKHNwKQkJCS8qIG5vdGhpbmcgbmVlZGVkICovCi0jZGVmaW5lCWZsYXRfYXJndnBfZW52cF9vbl9zdGFjaygpCQkxCisjZGVmaW5lCWZsYXRfYXJndnBfZW52cF9vbl9zdGFjaygpCQkwCiAjZGVmaW5lCWZsYXRfb2xkX3JhbV9mbGFnKGZsYWdzKQkJKGZsYWdzKQogI2RlZmluZQlmbGF0X3JlbG9jX3ZhbGlkKHJlbG9jLCBzaXplKQkJKChyZWxvYykgPD0gKHNpemUpKQogI2RlZmluZQlmbGF0X2dldF9hZGRyX2Zyb21fcnAocnAsIHJlbHZhbCwgZmxhZ3MpCWdldF91bmFsaWduZWQocnApCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oYXJwL2hhcnAuaCBiL2luY2x1ZGUvYXNtLXNoL2hhcnAvaGFycC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmZiY2ZhLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL2hhcnAvaGFycC5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyogCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDEgRGF2aWQgSi4gTWNrYXkgKGRhdmlkLm1ja2F5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgIAotICoKLSAqIERlZmludGlvbnMgYXBwbGljYWJsZSB0byB0aGUgU1RNaWNyb2VsZWN0cm9uaWNzIFNUNDBTVEIxIEhBUlAgYW5kCi0gKiBjb21wYXRpYmxlIGJvYXJkcy4KLSAqLwotCi0jaWYgZGVmaW5lZChDT05GSUdfU0hfU1RCMV9IQVJQKQotCi0jZGVmaW5lIEVQTERfQkFTRSAgICAgMHhhMDgwMDAwMAotCi0jZGVmaW5lIEVQTERfTEVEICAgICAgKEVQTERfQkFTRSsweDAwMGMwMDAwKQotI2RlZmluZSBFUExEX0lOVFNUQVQwIChFUExEX0JBU0UrMHgwMDIwMDAwMCkKLSNkZWZpbmUgRVBMRF9JTlRTVEFUMSAoRVBMRF9CQVNFKzB4MDAyNDAwMDApCi0jZGVmaW5lIEVQTERfSU5UTUFTSzAgKEVQTERfQkFTRSsweDAwMjgwMDAwKQotI2RlZmluZSBFUExEX0lOVE1BU0sxIChFUExEX0JBU0UrMHgwMDJjMDAwMCkKLSNkZWZpbmUgRVBMRF9QQUdFQUREUiAoRVBMRF9CQVNFKzB4MDAzMDAwMDApCi0jZGVmaW5lIEVQTERfUkVWSUQxICAgKEVQTERfQkFTRSsweDAwMzgwMDAwKQotI2RlZmluZSBFUExEX1JFVklEMiAgIChFUExEX0JBU0UrMHgwMDNjMDAwMCkKLQotI2RlZmluZSBFUExEX0xFRF9PTiAgMQotI2RlZmluZSBFUExEX0xFRF9PRkYgMAotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TSF9TVEIxX09WRVJEUklWRSkKLQotI2RlZmluZSBFUExEX0JBU0UgICAgIDB4YTcwMDAwMDAKLQotI2RlZmluZSBFUExEX1JFVklEICAgIChFUExEX0JBU0UrMHgwMDAwMDAwMCkKLSNkZWZpbmUgRVBMRF9MRUQgICAgICAoRVBMRF9CQVNFKzB4MDAwNDAwMDApCi0jZGVmaW5lIEVQTERfSU5UTUFTSzAgKEVQTERfQkFTRSsweDAwMWMwMDAwKQotI2RlZmluZSBFUExEX0lOVE1BU0sxIChFUExEX0JBU0UrMHgwMDIwMDAwMCkKLSNkZWZpbmUgRVBMRF9JTlRTVEFUMCAoRVBMRF9CQVNFKzB4MDAyNDAwMDApCi0jZGVmaW5lIEVQTERfSU5UU1RBVDEgKEVQTERfQkFTRSsweDAwMjgwMDAwKQotCi0jZGVmaW5lIEVQTERfTEVEX09OICAwCi0jZGVmaW5lIEVQTERfTEVEX09GRiAxCi0KLSNlbHNlCi0jZXJyb3IgVW5rbm93biBib2FyZAotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oYXJwL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9oYXJwL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4ZjM5ZTAuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvaGFycC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTAgKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9IQVJQX0lPX0gKLSNkZWZpbmUgX19BU01fU0hfSEFSUF9JT19ICi0KLS8qCi0gKiBOb3RoaW5nIHNwZWNpYWwgaGVyZS4uIGp1c3QgdXNlIHRoZSBnZW5lcmljIGNjaGlwIGlvIHJvdXRpbmVzLgotICovCi0jaW5jbHVkZSA8YXNtL2hkNjQ0NjUvaW8uaD4KLQotI2VuZGlmIC8qIF9fQVNNX1NIX0hBUlBfSU9fSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaCBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEuaApzaW1pbGFyaXR5IGluZGV4IDg0JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2hkNjQ0NjEuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS5oCmluZGV4IDg3ZjEzZDIuLjI3ZTVjMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEvaGQ2NDQ2MS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hkNjQ0NjEuaApAQCAtNDAsNyArNDAsMTIgQEAKICNkZWZpbmUgSEQ2NDQ2MV9MQ0RDQkFSCQkweDExMDAwCiAjZGVmaW5lIEhENjQ0NjFfTENEQ0xPUgkJMHgxMTAwMgogI2RlZmluZSBIRDY0NDYxX0xDRENDUgkJMHgxMTAwNAotI2RlZmluZSBIRDY0NDYxX0xDRENDUl9NT0ZGCTB4ODAKKyNkZWZpbmUgSEQ2NDQ2MV9MQ0RDQ1JfU1RCQUNLCTB4MDQwMAorI2RlZmluZSBIRDY0NDYxX0xDRENDUl9TVFJFUQkweDAxMDAKKyNkZWZpbmUgSEQ2NDQ2MV9MQ0RDQ1JfTU9GRgkweDAwODAKKyNkZWZpbmUgSEQ2NDQ2MV9MQ0RDQ1JfUkVGU0VMCTB4MDA0MAorI2RlZmluZSBIRDY0NDYxX0xDRENDUl9FUE9OCTB4MDAyMAorI2RlZmluZSBIRDY0NDYxX0xDRENDUl9TUE9OCTB4MDAxMAogCiAjZGVmaW5lCUhENjQ0NjFfTERSMQkJMHgxMTAxMAogI2RlZmluZQlIRDY0NDYxX0xEUjFfRE9OCTB4MDEKQEAgLTU0LDkgKzU5LDkgQEAKICNkZWZpbmUgSEQ2NDQ2MV9MRFZTUFIJCTB4MTEwMWMKICNkZWZpbmUgSEQ2NDQ2MV9MRFIzCQkweDExMDFlCiAKLSNkZWZpbmUgSEQ2NDQ2MV9DUFRXQVIJCTB4MTEwMzAJCisjZGVmaW5lIEhENjQ0NjFfQ1BUV0FSCQkweDExMDMwCiAjZGVmaW5lIEhENjQ0NjFfQ1BUV0RSCQkweDExMDMyCi0jZGVmaW5lIEhENjQ0NjFfQ1BUUkFSCQkweDExMDM0CQorI2RlZmluZSBIRDY0NDYxX0NQVFJBUgkJMHgxMTAzNAogI2RlZmluZSBIRDY0NDYxX0NQVFJEUgkJMHgxMTAzNgogCiAjZGVmaW5lIEhENjQ0NjFfR1JET1IJCTB4MTEwNDAKQEAgLTExMSw3ICsxMTYsNyBAQAogI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkQxCQkweDAxCS8qIGJhdHRlcnkgMSAqLwogCiAjZGVmaW5lIEhENjQ0NjFfUENDSVNSX1BDRF9NQVNLCQkweDBjICAgIC8qIGNhcmQgZGV0ZWN0ICovCi0jZGVmaW5lIEhENjQ0NjFfUENDSVNSX0JWRF9NQVNLCTB4MDMgICAgLyogYmF0dGVyeSB2b2x0YWdlICovCisjZGVmaW5lIEhENjQ0NjFfUENDSVNSX0JWRF9NQVNLCQkweDAzICAgIC8qIGJhdHRlcnkgdm9sdGFnZSAqLwogI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkRfQkFUR09PRAkweDAzICAgIC8qIGJhdHRlcnkgZ29vZCAqLwogI2RlZmluZSBIRDY0NDYxX1BDQ0lTUl9CVkRfQkFUV0FSTgkweDAxICAgIC8qIGJhdHRlcnkgbG93IHdhcm5pbmcgKi8KICNkZWZpbmUgSEQ2NDQ2MV9QQ0NJU1JfQlZEX0JBVERFQUQxCTB4MDIgICAgLyogYmF0dGVyeSBkZWFkICovCkBAIC0xMzksMTEgKzE0NCwxMSBAQAogCiAvKiBQQ0MgQ2FyZCBTdGF0dXMgQ2hhbmdlIEludGVycnVwdCBFbmFibGUgUmVnaXN0ZXIgKi8KICNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfQ1JFCQkweDgwICAgIC8qIGNoYW5nZSByZXNldCBlbmFibGUgKi8KLSNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfTUFTSyAgIAkweDYwICAgLyogSVJFUSBlbmFibGUgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfTUFTSwkweDYwICAgLyogSVJFUSBlbmFibGUgKi8KICNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfRElTQUJMRUQJMHgwMCAgIC8qIElSRVEgZGlzYWJsZWQgKi8KLSNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfTEVWRUwgIAkweDIwICAgLyogSVJFUSBsZXZlbC10cmlnZ2VyZWQgKi8KKyNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfTEVWRUwJMHgyMCAgIC8qIElSRVEgbGV2ZWwtdHJpZ2dlcmVkICovCiAjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX0lSRVFFX0ZBTExJTkcJMHg0MCAgIC8qIElSRVEgZmFsbGluZy1lZGdlLXRyaWcgKi8KLSNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfSVJFUUVfUklTSU5HIAkweDYwICAgLyogSVJFUSByaXNpbmctZWRnZS10cmlnICovCisjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX0lSRVFFX1JJU0lORwkweDYwICAgLyogSVJFUSByaXNpbmctZWRnZS10cmlnICovCiAKICNkZWZpbmUgSEQ2NDQ2MV9QQ0NDU0NJRVJfU0NFCQkweDEwICAgIC8qIHN0YXR1cyBjaGFuZ2UgZW5hYmxlICovCiAjZGVmaW5lIEhENjQ0NjFfUENDQ1NDSUVSX0NERQkJMHgwOCAgICAvKiBjYXJkIGRldGVjdCBjaGFuZ2UgZW5hYmxlICovCkBAIC0xNTUsNyArMTYwLDYgQEAKICNkZWZpbmUgSEQ2NDQ2MV9QQ0NTQ1JfVkNDMQkJMHgwMgkvKiB2b2x0YWdlIGNvbnRyb2wgcGluIDEgKi8KICNkZWZpbmUgSEQ2NDQ2MV9QQ0NTQ1JfU1dQCQkweDAxICAgIC8qIHdyaXRlIHByb3RlY3QgKi8KIAotCiAjZGVmaW5lIEhENjQ0NjFfUDBPQ1IgICAgICAgICAgIDB4MTIwMmEKICNkZWZpbmUgSEQ2NDQ2MV9QMU9DUiAgICAgICAgICAgMHgxMjAyYwogI2RlZmluZSBIRDY0NDYxX1BHQ1IgICAgICAgICAgICAweDEyMDJlCkBAIC0xODAsMjMgKzE4NCwyNSBAQAogI2RlZmluZSBIRDY0NDYxX05JUlIJCTB4MTUwMDAKICNkZWZpbmUgSEQ2NDQ2MV9OSU1SCQkweDE1MDAyCiAKLSNpZm5kZWYgQ09ORklHX0hENjQ0NjFfSU9CQVNFCi0jZGVmaW5lIENPTkZJR19IRDY0NDYxX0lPQkFTRQkweGIwMDAwMDAwCi0jZW5kaWYKLSNpZm5kZWYgQ09ORklHX0hENjQ0NjFfSVJRCi0jZGVmaW5lIENPTkZJR19IRDY0NDYxX0lSUQkzNgotI2VuZGlmCi0KICNkZWZpbmUgSEQ2NDQ2MV9JUlFCQVNFCQlPRkZDSElQX0lSUV9CQVNFCi0jZGVmaW5lIEhENjQ0NjFfSVJRX05VTSAJMTYKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFfTlVNCQkxNgogCi0jZGVmaW5lIEhENjQ0NjFfSVJRX1VBUlQgICAgCShIRDY0NDYxX0lSUUJBU0UrNSkKLSNkZWZpbmUgSEQ2NDQ2MV9JUlFfSVJEQSAgICAJKEhENjQ0NjFfSVJRQkFTRSs2KQotI2RlZmluZSBIRDY0NDYxX0lSUV9UTVUxICAgCShIRDY0NDYxX0lSUUJBU0UrOSkKLSNkZWZpbmUgSEQ2NDQ2MV9JUlFfVE1VMCAgCShIRDY0NDYxX0lSUUJBU0UrMTApCi0jZGVmaW5lIEhENjQ0NjFfSVJRX0dQSU8gICAgCShIRDY0NDYxX0lSUUJBU0UrMTEpCi0jZGVmaW5lIEhENjQ0NjFfSVJRX0FGRSAgICAgCShIRDY0NDYxX0lSUUJBU0UrMTIpCi0jZGVmaW5lIEhENjQ0NjFfSVJRX1BDQzEgCShIRDY0NDYxX0lSUUJBU0UrMTMpCi0jZGVmaW5lIEhENjQ0NjFfSVJRX1BDQzAgCShIRDY0NDYxX0lSUUJBU0UrMTQpCisjZGVmaW5lIEhENjQ0NjFfSVJRX1VBUlQJKEhENjQ0NjFfSVJRQkFTRSs1KQorI2RlZmluZSBIRDY0NDYxX0lSUV9JUkRBCShIRDY0NDYxX0lSUUJBU0UrNikKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFfVE1VMQkoSEQ2NDQ2MV9JUlFCQVNFKzkpCisjZGVmaW5lIEhENjQ0NjFfSVJRX1RNVTAJKEhENjQ0NjFfSVJRQkFTRSsxMCkKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFfR1BJTwkoSEQ2NDQ2MV9JUlFCQVNFKzExKQorI2RlZmluZSBIRDY0NDYxX0lSUV9BRkUJCShIRDY0NDYxX0lSUUJBU0UrMTIpCisjZGVmaW5lIEhENjQ0NjFfSVJRX1BDQzEJKEhENjQ0NjFfSVJRQkFTRSsxMykKKyNkZWZpbmUgSEQ2NDQ2MV9JUlFfUENDMAkoSEQ2NDQ2MV9JUlFCQVNFKzE0KQorCisjZGVmaW5lIF9fSU9fUFJFRklYCWhkNjQ0NjEKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCisvKiBhcmNoL3NoL2NjaGlwcy9oZDY0NDZ4L2hkNjQ0NjEvc2V0dXAuYyAqLworaW50IGhkNjQ0NjFfaXJxX2RlbXV4KGludCBpcnEpOwordm9pZCBoZDY0NDYxX3JlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxLAorCQkJCWludCAoKmRlbXV4KSAoaW50IGlycSwgdm9pZCAqZGV2KSwgdm9pZCAqZGV2KTsKK3ZvaWQgaGQ2NDQ2MV91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2lvLmggYi9pbmNsdWRlL2FzbS1zaC9oZDY0NDYxL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3ZjI0ODkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvaGQ2NDQ2MS9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsNDMgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2lvX2hkNjQ0NjEuaAotICoKLSAqIENvcHlyaWdodCAyMDAwIFN0dWFydCBNZW5lZnkgKHN0dWFydC5tZW5lZnlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBJTyBmdW5jdGlvbnMgZm9yIGFuIEhENjQ0NjEKLSAqLwotCi0jaWZuZGVmIF9BU01fU0hfSU9fSEQ2NDQ2MV9ICi0jZGVmaW5lIF9BU01fU0hfSU9fSEQ2NDQ2MV9ICi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIGhkNjQ0NjFfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgaGQ2NDQ2MV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgaGQ2NDQ2MV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBoZDY0NDYxX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBoZDY0NDYxX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciBoZDY0NDYxX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBoZDY0NDYxX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBoZDY0NDYxX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIGhkNjQ0NjFfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0KLWV4dGVybiB2b2lkIGhkNjQ0NjFfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICpidWZmZXIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgaGQ2NDQ2MV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBoZDY0NDYxX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYnVmZmVyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGhkNjQ0NjFfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIGhkNjQ0NjFfd3JpdGV3KHVuc2lnbmVkIHNob3J0IGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7Ci0KLQotZXh0ZXJuIGludCBoZDY0NDYxX2lycV9kZW11eChpbnQgaXJxKTsKLWV4dGVybiB2b2lkIGhkNjQ0NjFfcmVnaXN0ZXJfaXJxX2RlbXV4KGludCBpcnEsCi0JCWludCAoKmRlbXV4KShpbnQgaXJxLCB2b2lkICpkZXYpLCB2b2lkICpkZXYpOwotZXh0ZXJuIHZvaWQgaGQ2NDQ2MV91bnJlZ2lzdGVyX2lycV9kZW11eChpbnQgaXJxKTsKLQotI2VuZGlmIC8qIF9BU01fU0hfSU9fSEQ2NDQ2MV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9ocDZ4eC5oIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaHA2eHguaAppbmRleCBhMjYyNDdmLi5mMzUxMzRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9ocDZ4eC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2hwNnh4LmgKQEAgLTIsMTYgKzIsMzMgQEAKICNkZWZpbmUgX19BU01fU0hfSFA2WFhfSAogCiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzICBBbmRyaXkgU2t1bHlzaAorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1ICBBbmRyaXkgU2t1bHlzaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICoKICAqLwogCi0jZGVmaW5lIEhQNjgwX1RTX0lSUSBJUlEzX0lSUQorI2RlZmluZSBIUDY4MF9CVE5fSVJRCQlJUlEwX0lSUQorI2RlZmluZSBIUDY4MF9UU19JUlEJCUlSUTNfSVJRCisjZGVmaW5lIEhQNjgwX0hENjQ0NjFfSVJRCUlSUTRfSVJRCiAKICNkZWZpbmUgREFDX0xDRF9CUklHSFRORVNTCTAKICNkZWZpbmUgREFDX1NQRUFLRVJfVk9MVU1FCTEKIAorI2RlZmluZSBQR0RSX09QRU5FRAkJMHgwMQorI2RlZmluZSBQR0RSX01BSU5fQkFUVEVSWV9PVVQJMHgwNAorI2RlZmluZSBQR0RSX1BMQVlfQlVUVE9OCTB4MDgKKyNkZWZpbmUgUEdEUl9SRVdJTkRfQlVUVE9OCTB4MTAKKyNkZWZpbmUgUEdEUl9SRUNPUkRfQlVUVE9OCTB4MjAKKwogI2RlZmluZSBQSERSX1RTX1BFTl9ET1dOCTB4MDgKIAorI2RlZmluZSBQSkRSX0xFRF9CTElOSwkJMHgwMgorCisjZGVmaW5lIFBLRFJfTEVEX0dSRUVOCQkweDEwCisKICNkZWZpbmUgU0NQRFJfVFNfU0NBTl9FTkFCTEUJMHgyMAogI2RlZmluZSBTQ1BEUl9UU19TQ0FOX1kJCTB4MDIKICNkZWZpbmUgU0NQRFJfVFNfU0NBTl9YCQkweDAxCkBAIC0yMSwxMSArMzgsNDMgQEAKIAogI2RlZmluZSBBRENfQ0hBTk5FTF9UU19ZCTEKICNkZWZpbmUgQURDX0NIQU5ORUxfVFNfWAkyCisjZGVmaW5lIEFEQ19DSEFOTkVMX0JBVFRFUlkJMworI2RlZmluZSBBRENfQ0hBTk5FTF9CQUNLVVAJNAorI2RlZmluZSBBRENfQ0hBTk5FTF9DSEFSR0UJNQogCiAjZGVmaW5lIEhENjQ0NjFfR1BBRFJfU1BFQUtFUgkweDAxCiAjZGVmaW5lIEhENjQ0NjFfR1BBRFJfUENNQ0lBMAkoMHgwMnwweDA4KQorCiAjZGVmaW5lIEhENjQ0NjFfR1BCRFJfTENET0ZGCTB4MDEKKyNkZWZpbmUgSEQ2NDQ2MV9HUEJEUl9MQ0RfQ09OVFJBU1RfTUFTSwkweDc4CiAjZGVmaW5lIEhENjQ0NjFfR1BCRFJfTEVEX1JFRAkweDgwCiAKKyNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjZGVmaW5lIFBKRFIJMHhhNDAwMDEzMAorI2RlZmluZSBQS0RSCTB4YTQwMDAxMzIKKworc3RhdGljIGlubGluZSB2b2lkIGhwNnh4X2xlZF9yZWQoaW50IG9uKQoreworCXUxNiB2MTY7CisJdjE2ID0gY3RybF9pbncoQ09ORklHX0hENjQ0NjFfSU9CQVNFICsgSEQ2NDQ2MV9HUEJEUiAtIDB4MTAwMDApOworCWlmIChvbikKKwkgICAgY3RybF9vdXR3KHYxNiAmICh+SEQ2NDQ2MV9HUEJEUl9MRURfUkVEKSwgQ09ORklHX0hENjQ0NjFfSU9CQVNFICsgSEQ2NDQ2MV9HUEJEUiAtIDB4MTAwMDApOworCWVsc2UKKwkgICAgY3RybF9vdXR3KHYxNiB8IEhENjQ0NjFfR1BCRFJfTEVEX1JFRCwgQ09ORklHX0hENjQ0NjFfSU9CQVNFICsgSEQ2NDQ2MV9HUEJEUiAtIDB4MTAwMDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaHA2eHhfbGVkX2dyZWVuKGludCBvbikKK3sKKwl1OCB2ODsKKworCXY4ID0gY3RybF9pbmIoUEtEUik7CisJaWYgKG9uKQorCSAgICBjdHJsX291dGIodjggJiAoflBLRFJfTEVEX0dSRUVOKSwgUEtEUik7CisJZWxzZQorCSAgICBjdHJsX291dGIodjggfCBQS0RSX0xFRF9HUkVFTiwgUEtEUik7Cit9CisKIAogI2VuZGlmIC8qIF9fQVNNX1NIX0hQNlhYX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2lvLmggYi9pbmNsdWRlL2FzbS1zaC9ocDZ4eC9pby5oCmluZGV4IDczMTc5ODAuLjIwNDQ0NzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2hwNnh4L2lvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaHA2eHgvaW8uaApAQCAtNCw3ICs0LDcgQEAKIC8qCiAgKiBOb3RoaW5nIHNwZWNpYWwgaGVyZS4uIGp1c3QgdXNlIHRoZSBnZW5lcmljIGNjaGlwIGlvIHJvdXRpbmVzLgogICovCi0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaW8uaD4KKyNpbmNsdWRlIDxhc20vaGQ2NDQ2MS5oPgogCiAjZW5kaWYgLyogX19BU01fU0hfSFA2WFhfSU9fSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oIGIvaW5jbHVkZS9hc20tc2gvaHM3NzUxcnZvaXAvaHM3NzUxcnZvaXAuaAppbmRleCA1Zjk5NWY5Li5jNGNmZjlkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9oczc3NTFydm9pcC9oczc3NTFydm9pcC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2hzNzc1MXJ2b2lwL2hzNzc1MXJ2b2lwLmgKQEAgLTE5LDggKzE5LDYgQEAKICNkZWZpbmUgUEFfT1VUUE9SVFIJMHhhNDAwMDAwZQkvKiBPdXRwdXQgUG9ydCBSZWd1c3RlciAqLwogI2RlZmluZSBQQV9WRVJSRUcJMHhhNDAwMDAxNAkvKiBGUEdBIFZlcnNpb24gUmVnaXN0ZXIgKi8KIAotI2RlZmluZSBQQV9BUkVBNV9JTwkweGI0MDAwMDAwCS8qIEFyZWEgNSBJTyBNZW1vcnkgKi8KLSNkZWZpbmUgUEFfQVJFQTZfSU8JMHhiODAwMDAwMAkvKiBBcmVhIDYgSU8gTWVtb3J5ICovCiAjZGVmaW5lIFBBX0lERV9PRkZTRVQJMHgxZjAJCS8qIENGIElERSBPZmZzZXQgKi8KIAogI2RlZmluZSBJUkxDTlRSMQkoUEFfQkNSICsgMCkJLyogSW50ZXJydXB0IENvbnRyb2wgUmVnaXN0ZXIxICovCkBAIC00NCw0ICs0MiwxMyBAQAogI2RlZmluZQlJUlFfUklOR0lORwk0CQkvKiBSaW5naW5nIElSUSAqLwogI2RlZmluZQlJUlFfQ09ERUMJNQkJLyogQ09ERUMgSVJRICovCiAKKyNkZWZpbmUgX19JT19QUkVGSVgJaHM3NzUxcnZvaXAKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCisvKiBhcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lycS5jICovCit2b2lkIGluaXRfaHM3NzUxcnZvaXBfSVJRKHZvaWQpOworCisvKiBhcmNoL3NoL2JvYXJkcy9yZW5lc2FzL2hzNzc1MXJ2b2lwL2lvLmMgKi8KK3ZvaWQgKmhzNzc1MXJ2b2lwX2lvcmVtYXAodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CisKICNlbmRpZiAgLyogX19BU01fU0hfUkVORVNBU19IUzc3NTFSVk9JUCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL2lvLmgKaW5kZXggODk0ZTY0Yi4uZWQxMmQzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9pby5oCkBAIC0xMDcsNiArMTA3LDkgQEAKICNkZWZpbmUgX19yYXdfd3JpdGV3KHYsIGEpCV9fd3JpdGV3KHYsICh2b2lkIF9faW9tZW0gKikoYSkpCiAjZGVmaW5lIF9fcmF3X3dyaXRlbCh2LCBhKQlfX3dyaXRlbCh2LCAodm9pZCBfX2lvbWVtICopKGEpKQogCit2b2lkIF9fcmF3X3dyaXRlc2wodW5zaWduZWQgbG9uZyBhZGRyLCBjb25zdCB2b2lkICpkYXRhLCBpbnQgbG9uZ2xlbik7Cit2b2lkIF9fcmF3X3JlYWRzbCh1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEsIGludCBsb25nbGVuKTsKKwogLyoKICAqIFRoZSBwbGF0Zm9ybSBoZWFkZXIgZmlsZXMgbWF5IGRlZmluZSBzb21lIG9mIHRoZXNlIG1hY3JvcyB0byB1c2UKICAqIHRoZSBpbmxpbmVkIHZlcnNpb25zIHdoZXJlIGFwcHJvcHJpYXRlLiAgVGhlc2UgbWFjcm9zIG1heSBhbHNvIGJlCkBAIC0xMzIsNiArMTM1LDkgQEAKICMgZGVmaW5lIHdyaXRlbCh2LGEpCSh7IF9fcmF3X3dyaXRlbCgodiksKGEpKTsgbWIoKTsgfSkKICNlbmRpZgogCisjZGVmaW5lIHdyaXRlc2wgX19yYXdfd3JpdGVzbAorI2RlZmluZSByZWFkc2wgIF9fcmF3X3JlYWRzbAorCiAjZGVmaW5lIHJlYWRiX3JlbGF4ZWQoYSkgcmVhZGIoYSkKICNkZWZpbmUgcmVhZHdfcmVsYXhlZChhKSByZWFkdyhhKQogI2RlZmluZSByZWFkbF9yZWxheGVkKGEpIHJlYWRsKGEpCkBAIC0yMDksOCArMjE1LDE0IEBACiAgICAgICAgICoodm9sYXRpbGUgdW5zaWduZWQgbG9uZyopYWRkciA9IGI7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHJsX2RlbGF5KHZvaWQpCit7CisJY3RybF9pbncoUDJTRUcpOworfQorCiAjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKIAorI2lmZGVmIENPTkZJR19NTVUKIC8qCiAgKiBDaGFuZ2UgdmlydHVhbCBhZGRyZXNzZXMgdG8gcGh5c2ljYWwgYWRkcmVzc2VzIGFuZCB2di4KICAqIFRoZXNlIGFyZSB0cml2aWFsIG9uIHRoZSAxOjEgTGludXgvU3VwZXJIIG1hcHBpbmcKQEAgLTIyNCw2ICsyMzYsMTAgQEAKIHsKIAlyZXR1cm4gKHZvaWQgKilQMVNFR0FERFIoYWRkcmVzcyk7CiB9CisjZWxzZQorI2RlZmluZSBwaHlzX3RvX3ZpcnQoYWRkcmVzcykJKCh2b2lkICopKGFkZHJlc3MpKQorI2RlZmluZSB2aXJ0X3RvX3BoeXMoYWRkcmVzcykJKCh1bnNpZ25lZCBsb25nKShhZGRyZXNzKSkKKyNlbmRpZgogCiAjZGVmaW5lIHZpcnRfdG9fYnVzIHZpcnRfdG9fcGh5cwogI2RlZmluZSBidXNfdG9fdmlydCBwaHlzX3RvX3ZpcnQKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS1zaDczMTgwLmggYi9pbmNsdWRlL2FzbS1zaC9pcnEtc2g3MzE4MC5oCmluZGV4IGQ3MDUyNTIuLmIyOGFmOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL2lycS1zaDczMTgwLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzMxODAuaApAQCAtMzExLDYgKzMxMSw0IEBACiAjZGVmaW5lIElSUTZfUFJJT1JJVFkJMQogI2RlZmluZSBJUlE3X1BSSU9SSVRZCTEKIAotaW50IHNobXNlX2lycV9kZW11eChpbnQgaXJxKTsKLQogI2VuZGlmIC8qIF9fQVNNX1NIX0lSUV9TSDczMTgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS1zaDczNDMuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS1zaDczNDMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDE1NDE5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzM0My5oCkBAIC0wLDAgKzEsMzE3IEBACisjaWZuZGVmIF9fQVNNX1NIX0lSUV9TSDczNDNfSAorI2RlZmluZSBfX0FTTV9TSF9JUlFfU0g3MzQzX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL2lycS1zaDczNDMuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBLZW5hdGkgVGVjaG5vbG9naWVzIEluYy4KKyAqIEFuZHJlIE1jY3VyZHkgPGFuZHJlQGtlbmF0aS5jb20+CisgKiBSYW5qaXQgRGVzaHBhbmRlIDxyYW5qaXRAa2VuYXRpLmNvbT4KKyAqLworCisjdW5kZWYgSU5UQ19JUFJBCisjdW5kZWYgSU5UQ19JUFJCCisjdW5kZWYgSU5UQ19JUFJDCisjdW5kZWYgSU5UQ19JUFJECisKKyN1bmRlZiBETVRFMF9JUlEKKyN1bmRlZiBETVRFMV9JUlEKKyN1bmRlZiBETVRFMl9JUlEKKyN1bmRlZiBETVRFM19JUlEKKyN1bmRlZiBETVRFNF9JUlEKKyN1bmRlZiBETVRFNV9JUlEKKyN1bmRlZiBETVRFNl9JUlEKKyN1bmRlZiBETVRFN19JUlEKKyN1bmRlZiBETUFFX0lSUQorI3VuZGVmIERNQV9JUFJfQUREUgorI3VuZGVmIERNQV9JUFJfUE9TCisjdW5kZWYgRE1BX1BSSU9SSVRZCisKKyN1bmRlZiBJTlRDX0lNQ1IwCisjdW5kZWYgSU5UQ19JTUNSMQorI3VuZGVmIElOVENfSU1DUjIKKyN1bmRlZiBJTlRDX0lNQ1IzCisjdW5kZWYgSU5UQ19JTUNSNAorI3VuZGVmIElOVENfSU1DUjUKKyN1bmRlZiBJTlRDX0lNQ1I2CisjdW5kZWYgSU5UQ19JTUNSNworI3VuZGVmIElOVENfSU1DUjgKKyN1bmRlZiBJTlRDX0lNQ1I5CisjdW5kZWYgSU5UQ19JTUNSMTAKKworCisjZGVmaW5lIElOVENfSVBSQSAgCTB4QTQwODAwMDBVTAorI2RlZmluZSBJTlRDX0lQUkIgIAkweEE0MDgwMDA0VUwKKyNkZWZpbmUgSU5UQ19JUFJDICAJMHhBNDA4MDAwOFVMCisjZGVmaW5lIElOVENfSVBSRCAgCTB4QTQwODAwMENVTAorI2RlZmluZSBJTlRDX0lQUkUgIAkweEE0MDgwMDEwVUwKKyNkZWZpbmUgSU5UQ19JUFJGICAJMHhBNDA4MDAxNFVMCisjZGVmaW5lIElOVENfSVBSRyAgCTB4QTQwODAwMThVTAorI2RlZmluZSBJTlRDX0lQUkggIAkweEE0MDgwMDFDVUwKKyNkZWZpbmUgSU5UQ19JUFJJICAJMHhBNDA4MDAyMFVMCisjZGVmaW5lIElOVENfSVBSSiAgCTB4QTQwODAwMjRVTAorI2RlZmluZSBJTlRDX0lQUksgIAkweEE0MDgwMDI4VUwKKyNkZWZpbmUgSU5UQ19JUFJMICAJMHhBNDA4MDAyQ1VMCisKKyNkZWZpbmUgSU5UQ19JTVIwCTB4QTQwODAwODBVTAorI2RlZmluZSBJTlRDX0lNUjEJMHhBNDA4MDA4NFVMCisjZGVmaW5lIElOVENfSU1SMgkweEE0MDgwMDg4VUwKKyNkZWZpbmUgSU5UQ19JTVIzCTB4QTQwODAwOENVTAorI2RlZmluZSBJTlRDX0lNUjQJMHhBNDA4MDA5MFVMCisjZGVmaW5lIElOVENfSU1SNQkweEE0MDgwMDk0VUwKKyNkZWZpbmUgSU5UQ19JTVI2CTB4QTQwODAwOThVTAorI2RlZmluZSBJTlRDX0lNUjcJMHhBNDA4MDA5Q1VMCisjZGVmaW5lIElOVENfSU1SOAkweEE0MDgwMEEwVUwKKyNkZWZpbmUgSU5UQ19JTVI5CTB4QTQwODAwQTRVTAorI2RlZmluZSBJTlRDX0lNUjEwCTB4QTQwODAwQThVTAorI2RlZmluZSBJTlRDX0lNUjExCTB4QTQwODAwQUNVTAorCisjZGVmaW5lIElOVENfSU1DUjAJMHhBNDA4MDBDMFVMCisjZGVmaW5lIElOVENfSU1DUjEJMHhBNDA4MDBDNFVMCisjZGVmaW5lIElOVENfSU1DUjIJMHhBNDA4MDBDOFVMCisjZGVmaW5lIElOVENfSU1DUjMJMHhBNDA4MDBDQ1VMCisjZGVmaW5lIElOVENfSU1DUjQJMHhBNDA4MDBEMFVMCisjZGVmaW5lIElOVENfSU1DUjUJMHhBNDA4MDBENFVMCisjZGVmaW5lIElOVENfSU1DUjYJMHhBNDA4MDBEOFVMCisjZGVmaW5lIElOVENfSU1DUjcJMHhBNDA4MDBEQ1VMCisjZGVmaW5lIElOVENfSU1DUjgJMHhBNDA4MDBFMFVMCisjZGVmaW5lIElOVENfSU1DUjkJMHhBNDA4MDBFNFVMCisjZGVmaW5lIElOVENfSU1DUjEwCTB4QTQwODAwRThVTAorI2RlZmluZSBJTlRDX0lNQ1IxMQkweEE0MDgwMEVDVUwKKworI2RlZmluZSBJTlRDX0lDUjAJMHhBNDE0MDAwMFVMCisjZGVmaW5lIElOVENfSUNSMQkweEE0MTQwMDFDVUwKKworI2RlZmluZSBJTlRNU0swCQkweGE0MTQwMDQ0CisjZGVmaW5lIElOVE1TS0NMUjAJMHhhNDE0MDA2NAorI2RlZmluZSBJTlRDX0lOVFBSSTAJMHhhNDE0MDAxMAorCisvKgorICBOT1RFOgorCisgICpfSVJRID0gKElOVEVWVDIgLSAweDIwMCkvMHgyMAorKi8KKworLyogVE1VMCAqLworI2RlZmluZSBUTVUwX0lSUQkxNgorI2RlZmluZSBUTVUwX0lQUl9BRERSCUlOVENfSVBSQQorI2RlZmluZSBUTVUwX0lQUl9QT1MJIDMKKyNkZWZpbmUgVE1VMF9QUklPUklUWQkgMgorCisjZGVmaW5lIFRJTUVSX0lSUSAgICAgICAxNgorI2RlZmluZSBUSU1FUl9JUFJfQUREUiAgSU5UQ19JUFJBCisjZGVmaW5lIFRJTUVSX0lQUl9QT1MgICAgMworI2RlZmluZSBUSU1FUl9QUklPUklUWSAgIDIKKworLyogVE1VMSAqLworI2RlZmluZSBUTVUxX0lSUQkxNworI2RlZmluZSBUTVUxX0lQUl9BRERSCUlOVENfSVBSQQorI2RlZmluZSBUTVUxX0lQUl9QT1MJIDIKKyNkZWZpbmUgVE1VMV9QUklPUklUWQkgMgorCisvKiBUTVUyICovCisjZGVmaW5lIFRNVTJfSVJRCTE4CisjZGVmaW5lIFRNVTJfSVBSX0FERFIJSU5UQ19JUFJBCisjZGVmaW5lIFRNVTJfSVBSX1BPUwkgMQorI2RlZmluZSBUTVUyX1BSSU9SSVRZCSAyCisKKy8qIExDREMgKi8KKyNkZWZpbmUgTENEQ19JUlEJMjgKKyNkZWZpbmUgTENEQ19JUFJfQUREUglJTlRDX0lQUkIKKyNkZWZpbmUgTENEQ19JUFJfUE9TCSAyCisjZGVmaW5lIExDRENfUFJJT1JJVFkJIDIKKworLyogVklPIChWaWRlbyBJL08pICovCisjZGVmaW5lIENFVV9JUlEJCTUyCisjZGVmaW5lIEJFVV9JUlEJCTUzCisjZGVmaW5lIFZFVV9JUlEJCTU0CisjZGVmaW5lIFZPVV9JUlEJCTU1CisjZGVmaW5lIFZJT19JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgVklPX0lQUl9QT1MJIDIKKyNkZWZpbmUgVklPX1BSSU9SSVRZCSAyCisKKy8qIE1GSSAoTXVsdGkgRnVuY3Rpb25hbCBJbnRlcmZhY2UpICovCisjZGVmaW5lIE1GSV9JUlEJCTU2CisjZGVmaW5lIE1GSV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgTUZJX0lQUl9QT1MJIDEKKyNkZWZpbmUgTUZJX1BSSU9SSVRZCSAyCisKKy8qIFZQVSAoVmlkZW8gUHJvY2Vzc2luZyBVbml0KSAqLworI2RlZmluZSBWUFVfSVJRCQk2MAorI2RlZmluZSBWUFVfSVBSX0FERFIJSU5UQ19JUFJFCisjZGVmaW5lIFZQVV9JUFJfUE9TCSAwCisjZGVmaW5lIFZQVV9QUklPUklUWQkgMgorCisvKiAzREcgKi8KKyNkZWZpbmUgVERHX0lSUQkJNjMKKyNkZWZpbmUgVERHX0lQUl9BRERSCUlOVENfSVBSSgorI2RlZmluZSBUREdfSVBSX1BPUwkgMgorI2RlZmluZSBUREdfUFJJT1JJVFkJIDIKKworLyogRE1BQygxKSAqLworI2RlZmluZSBETVRFMF9JUlEJNDgKKyNkZWZpbmUgRE1URTFfSVJRCTQ5CisjZGVmaW5lIERNVEUyX0lSUQk1MAorI2RlZmluZSBETVRFM19JUlEJNTEKKyNkZWZpbmUgRE1BMV9JUFJfQUREUglJTlRDX0lQUkUKKyNkZWZpbmUgRE1BMV9JUFJfUE9TCTMKKyNkZWZpbmUgRE1BMV9QUklPUklUWQk3CisKKy8qIERNQUMoMikgKi8KKyNkZWZpbmUgRE1URTRfSVJRCTc2CisjZGVmaW5lIERNVEU1X0lSUQk3NworI2RlZmluZSBETUEyX0lQUl9BRERSCUlOVENfSVBSRgorI2RlZmluZSBETUEyX0lQUl9QT1MJMgorI2RlZmluZSBETUEyX1BSSU9SSVRZCTcKKworLyogU0NJRjAgKi8KKyNkZWZpbmUgU0NJRl9FUklfSVJRCTgwCisjZGVmaW5lIFNDSUZfUlhJX0lSUQk4MQorI2RlZmluZSBTQ0lGX0JSSV9JUlEJODIKKyNkZWZpbmUgU0NJRl9UWElfSVJRCTgzCisjZGVmaW5lIFNDSUZfSVBSX0FERFIJSU5UQ19JUFJHCisjZGVmaW5lIFNDSUZfSVBSX1BPUwkzCisjZGVmaW5lIFNDSUZfUFJJT1JJVFkJMworCisvKiBTSU9GMCAqLworI2RlZmluZSBTSU9GMF9JUlEJODQKKyNkZWZpbmUgU0lPRjBfSVBSX0FERFIJSU5UQ19JUFJICisjZGVmaW5lIFNJT0YwX0lQUl9QT1MJMworI2RlZmluZSBTSU9GMF9QUklPUklUWQkzCisKKy8qIEZMQ1RMIChGbGFzaCBNZW1vcnkgQ29udHJvbGxlcikgKi8KKyNkZWZpbmUgRkxTVEVfSVJRCTkyCisjZGVmaW5lIEZMVEVORF9JUlEJOTMKKyNkZWZpbmUgRkxUUlEwX0lSUQk5NAorI2RlZmluZSBGTFRSUTFfSVJRCTk1CisjZGVmaW5lIEZMQ1RMX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBGTENUTF9JUFJfUE9TCTEKKyNkZWZpbmUgRkxDVExfUFJJT1JJVFkJMworCisvKiBJSUMoMCkgKElJQyBCdXMgSW50ZXJmYWNlKSAqLworI2RlZmluZSBJSUMwX0FMSV9JUlEJOTYKKyNkZWZpbmUgSUlDMF9UQUNLSV9JUlEJOTcKKyNkZWZpbmUgSUlDMF9XQUlUSV9JUlEJOTgKKyNkZWZpbmUgSUlDMF9EVEVJX0lSUQk5OQorI2RlZmluZSBJSUMwX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBJSUMwX0lQUl9QT1MJMAorI2RlZmluZSBJSUMwX1BSSU9SSVRZCTMKKworLyogSUlDKDEpIChJSUMgQnVzIEludGVyZmFjZSkgKi8KKyNkZWZpbmUgSUlDMV9BTElfSVJRCTQ0CisjZGVmaW5lIElJQzFfVEFDS0lfSVJRCTQ1CisjZGVmaW5lIElJQzFfV0FJVElfSVJRCTQ2CisjZGVmaW5lIElJQzFfRFRFSV9JUlEJNDcKKyNkZWZpbmUgSUlDMV9JUFJfQUREUglJTlRDX0lQUkkKKyNkZWZpbmUgSUlDMV9JUFJfUE9TCTAKKyNkZWZpbmUgSUlDMV9QUklPUklUWQkzCisKKy8qIFNJTzAgKi8KKyNkZWZpbmUgU0lPMF9JUlEJODgKKyNkZWZpbmUgU0lPMF9JUFJfQUREUglJTlRDX0lQUkkKKyNkZWZpbmUgU0lPMF9JUFJfUE9TCTMKKyNkZWZpbmUgU0lPMF9QUklPUklUWQkzCisKKy8qIFNESEkgKi8KKyNkZWZpbmUgU0RISV9TREhJSTBfSVJRCTEwMAorI2RlZmluZSBTREhJX1NESElJMV9JUlEJMTAxCisjZGVmaW5lIFNESElfU0RISUkyX0lSUQkxMDIKKyNkZWZpbmUgU0RISV9TREhJSTNfSVJRCTEwMworI2RlZmluZSBTREhJX0lQUl9BRERSCUlOVENfSVBSSworI2RlZmluZSBTREhJX0lQUl9QT1MJMAorI2RlZmluZSBTREhJX1BSSU9SSVRZCTMKKworLyogU0lVIChTb3VuZCBJbnRlcmZhY2UgVW5pdCkgKi8KKyNkZWZpbmUgU0lVX0lSUQkJMTA4CisjZGVmaW5lIFNJVV9JUFJfQUREUglJTlRDX0lQUkoKKyNkZWZpbmUgU0lVX0lQUl9QT1MJMQorI2RlZmluZSBTSVVfUFJJT1JJVFkJMworCisjZGVmaW5lIFBPUlRfUEFDUgkweEE0MDUwMTAwVUwKKyNkZWZpbmUgUE9SVF9QQkNSCTB4QTQwNTAxMDJVTAorI2RlZmluZSBQT1JUX1BDQ1IJMHhBNDA1MDEwNFVMCisjZGVmaW5lIFBPUlRfUERDUgkweEE0MDUwMTA2VUwKKyNkZWZpbmUgUE9SVF9QRUNSCTB4QTQwNTAxMDhVTAorI2RlZmluZSBQT1JUX1BGQ1IJMHhBNDA1MDEwQVVMCisjZGVmaW5lIFBPUlRfUEdDUgkweEE0MDUwMTBDVUwKKyNkZWZpbmUgUE9SVF9QSENSCTB4QTQwNTAxMEVVTAorI2RlZmluZSBQT1JUX1BKQ1IJMHhBNDA1MDExMFVMCisjZGVmaW5lIFBPUlRfUEtDUgkweEE0MDUwMTEyVUwKKyNkZWZpbmUgUE9SVF9QTENSCTB4QTQwNTAxMTRVTAorI2RlZmluZSBQT1JUX1NDUENSCTB4QTQwNTAxMTZVTAorI2RlZmluZSBQT1JUX1BNQ1IJMHhBNDA1MDExOFVMCisjZGVmaW5lIFBPUlRfUE5DUgkweEE0MDUwMTFBVUwKKyNkZWZpbmUgUE9SVF9QUUNSCTB4QTQwNTAxMUNVTAorI2RlZmluZSBQT1JUX1BSQ1IJMHhBNDA1MDExRVVMCisjZGVmaW5lIFBPUlRfUFRDUgkweEE0MDUwMTRDVUwKKyNkZWZpbmUgUE9SVF9QVUNSCTB4QTQwNTAxNEVVTAorI2RlZmluZSBQT1JUX1BWQ1IJMHhBNDA1MDE1MFVMCisKKyNkZWZpbmUgUE9SVF9QU0VMQQkweEE0MDUwMTQwVUwKKyNkZWZpbmUgUE9SVF9QU0VMQgkweEE0MDUwMTQyVUwKKyNkZWZpbmUgUE9SVF9QU0VMQwkweEE0MDUwMTQ0VUwKKyNkZWZpbmUgUE9SVF9QU0VMRQkweEE0MDUwMTU4VUwKKworI2RlZmluZSBQT1JUX0hJWkNSQQkweEE0MDUwMTQ2VUwKKyNkZWZpbmUgUE9SVF9ISVpDUkIJMHhBNDA1MDE0OFVMCisjZGVmaW5lIFBPUlRfRFJWQ1IJMHhBNDA1MDE0QVVMCisKKyNkZWZpbmUgUE9SVF9QQURSICAJMHhBNDA1MDEyMFVMCisjZGVmaW5lIFBPUlRfUEJEUiAgCTB4QTQwNTAxMjJVTAorI2RlZmluZSBQT1JUX1BDRFIgIAkweEE0MDUwMTI0VUwKKyNkZWZpbmUgUE9SVF9QRERSICAJMHhBNDA1MDEyNlVMCisjZGVmaW5lIFBPUlRfUEVEUiAgCTB4QTQwNTAxMjhVTAorI2RlZmluZSBQT1JUX1BGRFIgIAkweEE0MDUwMTJBVUwKKyNkZWZpbmUgUE9SVF9QR0RSICAJMHhBNDA1MDEyQ1VMCisjZGVmaW5lIFBPUlRfUEhEUiAgCTB4QTQwNTAxMkVVTAorI2RlZmluZSBQT1JUX1BKRFIgIAkweEE0MDUwMTMwVUwKKyNkZWZpbmUgUE9SVF9QS0RSICAJMHhBNDA1MDEzMlVMCisjZGVmaW5lIFBPUlRfUExEUiAgCTB4QTQwNTAxMzRVTAorI2RlZmluZSBQT1JUX1NDUERSICAJMHhBNDA1MDEzNlVMCisjZGVmaW5lIFBPUlRfUE1EUiAgCTB4QTQwNTAxMzhVTAorI2RlZmluZSBQT1JUX1BORFIgIAkweEE0MDUwMTNBVUwKKyNkZWZpbmUgUE9SVF9QUURSICAJMHhBNDA1MDEzQ1VMCisjZGVmaW5lIFBPUlRfUFJEUiAgCTB4QTQwNTAxM0VVTAorI2RlZmluZSBQT1JUX1BURFIgIAkweEE0MDUwMTZDVUwKKyNkZWZpbmUgUE9SVF9QVURSICAJMHhBNDA1MDE2RVVMCisjZGVmaW5lIFBPUlRfUFZEUiAgCTB4QTQwNTAxNzBVTAorCisjZGVmaW5lIElSUTBfSVJRCTMyCisjZGVmaW5lIElSUTFfSVJRCTMzCisjZGVmaW5lIElSUTJfSVJRCTM0CisjZGVmaW5lIElSUTNfSVJRCTM1CisjZGVmaW5lIElSUTRfSVJRCTM2CisjZGVmaW5lIElSUTVfSVJRCTM3CisjZGVmaW5lIElSUTZfSVJRCTM4CisjZGVmaW5lIElSUTdfSVJRCTM5CisKKyNkZWZpbmUgSU5UUFJJMDAJMHhBNDE0MDAxMFVMCisKKyNkZWZpbmUgSVJRMF9JUFJfQUREUglJTlRQUkkwMAorI2RlZmluZSBJUlExX0lQUl9BRERSCUlOVFBSSTAwCisjZGVmaW5lIElSUTJfSVBSX0FERFIJSU5UUFJJMDAKKyNkZWZpbmUgSVJRM19JUFJfQUREUglJTlRQUkkwMAorI2RlZmluZSBJUlE0X0lQUl9BRERSCUlOVFBSSTAwCisjZGVmaW5lIElSUTVfSVBSX0FERFIJSU5UUFJJMDAKKyNkZWZpbmUgSVJRNl9JUFJfQUREUglJTlRQUkkwMAorI2RlZmluZSBJUlE3X0lQUl9BRERSCUlOVFBSSTAwCisKKyNkZWZpbmUgSVJRMF9JUFJfUE9TCTcKKyNkZWZpbmUgSVJRMV9JUFJfUE9TCTYKKyNkZWZpbmUgSVJRMl9JUFJfUE9TCTUKKyNkZWZpbmUgSVJRM19JUFJfUE9TCTQKKyNkZWZpbmUgSVJRNF9JUFJfUE9TCTMKKyNkZWZpbmUgSVJRNV9JUFJfUE9TCTIKKyNkZWZpbmUgSVJRNl9JUFJfUE9TCTEKKyNkZWZpbmUgSVJRN19JUFJfUE9TCTAKKworI2RlZmluZSBJUlEwX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRMV9QUklPUklUWQkxCisjZGVmaW5lIElSUTJfUFJJT1JJVFkJMQorI2RlZmluZSBJUlEzX1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRNF9QUklPUklUWQkxCisjZGVmaW5lIElSUTVfUFJJT1JJVFkJMQorI2RlZmluZSBJUlE2X1BSSU9SSVRZCTEKKyNkZWZpbmUgSVJRN19QUklPUklUWQkxCisKKyNlbmRpZiAvKiBfX0FTTV9TSF9JUlFfU0g3MzQzX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS1zaDc3ODAuaCBiL2luY2x1ZGUvYXNtLXNoL2lycS1zaDc3ODAuaAppbmRleCA3ZjkwMzE1Li44OTVjNTc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9pcnEtc2g3NzgwLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLXNoNzc4MC5oCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAjZGVmaW5lCVRNVV9DSDVfSVBSX1BPUwkJMQogI2RlZmluZSBUTVVfQ0g1X1BSSU9SSVRZCTIKIAotI2RlZmluZQlSVENfSVJRCQkyMgotI2RlZmluZQlSVENfSVBSX0FERFIJSU5UQ19JTlQyUFJJMQotI2RlZmluZQlSVENfSVBSX1BPUwkwCi0jZGVmaW5lCVJUQ19QUklPUklUWQlUSU1FUl9QUklPUklUWQotCiAvKiBTQ0lGMCAqLwogI2RlZmluZSBTQ0lGMF9FUklfSVJRCTQwCiAjZGVmaW5lIFNDSUYwX1JYSV9JUlEJNDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2lycS5oIGIvaW5jbHVkZS9hc20tc2gvaXJxLmgKaW5kZXggNjExZTY3Yy4uMGU1ZjM2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvaXJxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvaXJxLmgKQEAgLTE5Miw3ICsxOTIsNyBAQAogCiAjaWYgZGVmaW5lZCAoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgZGVmaW5lZCAoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOCkgfHwgXAogICAgIGRlZmluZWQgKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDkpIHx8IGRlZmluZWQgKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApIHx8IFwKLSAgICBkZWZpbmVkIChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQorICAgIGRlZmluZWQgKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTEpIHx8IGRlZmluZWQgKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpCiAjZGVmaW5lIFNDSV9FUklfSVJRCTIzCiAjZGVmaW5lIFNDSV9SWElfSVJRCTI0CiAjZGVmaW5lIFNDSV9UWElfSVJRCTI1CkBAIC0yMDcsNiArMjA3LDcgQEAKICNkZWZpbmUgU0NJRjBfSVBSX1BPUwkzCiAjZGVmaW5lIFNDSUYwX1BSSU9SSVRZCTMKICNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA2KSB8fCBcCiAgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDcpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwOSkKICNkZWZpbmUgU0NJRl9FUklfSVJRCTU2CkBAIC0yNjEsOSArMjYyLDEyIEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDgpCiAjIGRlZmluZSBPTkNISVBfTlJfSVJRUyAzMgogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNSkKICMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDY0CS8vIEFjdHVhbGx5IDYxCiAjIGRlZmluZSBQSU5UX05SX0lSUVMgICAxNgorI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzEwKQorIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTA0CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3NTApCiAjIGRlZmluZSBPTkNISVBfTlJfSVJRUyA0OAkvLyBBY3R1YWxseSA0NAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzUxKQpAQCAtMjc1LDcgKzI3OSw4IEBACiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TVDQwU1RCMSkKICMgZGVmaW5lIE9OQ0hJUF9OUl9JUlFTIDE0NAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzAwKSB8fCBcCi0gICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDczMTgwKQorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkgfHwgXAorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQogIyBkZWZpbmUgT05DSElQX05SX0lSUVMgMTA5CiAjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3ODApCiAjIGRlZmluZSBPTkNISVBfTlJfSVJRUyAxMTEKQEAgLTMxMSw2ICszMTYsOCBAQAogIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDQKICNlbGlmIGRlZmluZWQoQ09ORklHX1NIX1I3NzgwUlApCiAjIGRlZmluZSBPRkZDSElQX05SX0lSUVMgMTYKKyNlbGlmIGRlZmluZWQoQ09ORklHX1NIXzczNDNfU09MVVRJT05fRU5HSU5FKQorIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDEyCiAjZWxpZiBkZWZpbmVkKENPTkZJR19TSF9VTktOT1dOKQogIyBkZWZpbmUgT0ZGQ0hJUF9OUl9JUlFTIDE2CS8qIE11c3QgYWxzbyBiZSBsYXN0ICovCiAjZWxzZQpAQCAtMzM1LDYgKzM0MiwxMSBAQAogZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICppcnFfbWFza19yZWdpc3RlcjsKIAogLyoKKyAqIFBJTlQgSVJRcworICovCit2b2lkIGluaXRfSVJRX3BpbnQodm9pZCk7CisKKy8qCiAgKiBGdW5jdGlvbiBmb3IgIm9uIGNoaXAgc3VwcG9ydCBtb2R1bGVzIi4KICAqLwogZXh0ZXJuIHZvaWQgbWFrZV9pcHJfaXJxKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBhZGRyLApAQCAtNDcxLDggKzQ4MywxMCBAQAogCiAjZGVmaW5lIElOVENfSUNSCTB4ZmZmZmZlZTBVTAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA1KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MDYpIHx8IFwKICAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcwNykgfHwgXAotICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KQorICAgICAgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzA5KSB8fCBcCisgICAgICBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCiAjZGVmaW5lIElOVENfSVJSMAkweGE0MDAwMDA0VUwKICNkZWZpbmUgSU5UQ19JUlIxCTB4YTQwMDAwMDZVTAogI2RlZmluZSBJTlRDX0lSUjIJMHhhNDAwMDAwOFVMCkBAIC00OTEsOCArNTA1LDEwNSBAQAogI2RlZmluZSBJTlRDX0lQUkYJMHhhNDA4MDAwMFVMCiAjZGVmaW5lIElOVENfSVBSRwkweGE0MDgwMDAyVUwKICNkZWZpbmUgSU5UQ19JUFJICTB4YTQwODAwMDRVTAotI2VuZGlmCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTApCisvKiBJbnRlcnJ1cHQgQ29udHJvbGxlciBSZWdpc3RlcnMgKi8KKyN1bmRlZiBJTlRDX0lQUkEKKyN1bmRlZiBJTlRDX0lQUkIKKyNkZWZpbmUgSU5UQ19JUFJBICAJMHhBNDE0RkVFMlVMCisjZGVmaW5lIElOVENfSVBSQiAgCTB4QTQxNEZFRTRVTAorI2RlZmluZSBJTlRDX0lQUkYgIAkweEE0MDgwMDAwVUwKKyNkZWZpbmUgSU5UQ19JUFJHICAJMHhBNDA4MDAwMlVMCisjZGVmaW5lIElOVENfSVBSSCAgCTB4QTQwODAwMDRVTAorI2RlZmluZSBJTlRDX0lQUkkgIAkweEE0MDgwMDA2VUwKIAorI3VuZGVmIElOVENfSUNSMAorI3VuZGVmIElOVENfSUNSMQorI2RlZmluZSBJTlRDX0lDUjAJMHhBNDE0RkVFMFVMCisjZGVmaW5lIElOVENfSUNSMQkweEE0MTQwMDEwVUwKKworI2RlZmluZSBJTlRDX0lSUjAJMHhhNDAwMDAwNFVMCisjZGVmaW5lIElOVENfSVJSMQkweGE0MDAwMDA2VUwKKyNkZWZpbmUgSU5UQ19JUlIyCTB4YTQwMDAwMDhVTAorI2RlZmluZSBJTlRDX0lSUjMJMHhhNDAwMDAwQVVMCisjZGVmaW5lIElOVENfSVJSNAkweGE0MDAwMDBDVUwKKyNkZWZpbmUgSU5UQ19JUlI1CTB4YTQwODAwMjBVTAorI2RlZmluZSBJTlRDX0lSUjcJMHhhNDA4MDAyNFVMCisjZGVmaW5lIElOVENfSVJSOAkweGE0MDgwMDI2VUwKKworLyogSW50ZXJydXB0IG51bWJlcnMgKi8KKyNkZWZpbmUgVElNRVIyX0lSUSAgICAgIDE4CisjZGVmaW5lIFRJTUVSMl9JUFJfQUREUiBJTlRDX0lQUkEKKyNkZWZpbmUgVElNRVIyX0lQUl9QT1MgICAxCisjZGVmaW5lIFRJTUVSMl9QUklPUklUWSAgMgorCisvKiBXRFQgKi8KKyNkZWZpbmUgV0RUX0lSUQkJMjcKKyNkZWZpbmUgV0RUX0lQUl9BRERSCUlOVENfSVBSQgorI2RlZmluZSBXRFRfSVBSX1BPUwkgMworI2RlZmluZSBXRFRfUFJJT1JJVFkJIDIKKworI2RlZmluZSBTQ0lGMF9FUklfSVJRCTUyCisjZGVmaW5lIFNDSUYwX1JYSV9JUlEJNTMKKyNkZWZpbmUgU0NJRjBfQlJJX0lSUQk1NAorI2RlZmluZSBTQ0lGMF9UWElfSVJRCTU1CisjZGVmaW5lIFNDSUYwX0lQUl9BRERSCUlOVENfSVBSRQorI2RlZmluZSBTQ0lGMF9JUFJfUE9TCTIKKyNkZWZpbmUgU0NJRjBfUFJJT1JJVFkJMworCisjZGVmaW5lIERNVEU0X0lSUQk3NgorI2RlZmluZSBETVRFNV9JUlEJNzcKKyNkZWZpbmUgRE1BMl9JUFJfQUREUglJTlRDX0lQUkYKKyNkZWZpbmUgRE1BMl9JUFJfUE9TCTIKKyNkZWZpbmUgRE1BMl9QUklPUklUWQk3CisKKyNkZWZpbmUgSVBTRUNfSVJRCTc5CisjZGVmaW5lIElQU0VDX0lQUl9BRERSCUlOVENfSVBSRgorI2RlZmluZSBJUFNFQ19JUFJfUE9TCTMKKyNkZWZpbmUgSVBTRUNfUFJJT1JJVFkJMworCisvKiBFRE1BQyAqLworI2RlZmluZSBFRE1BQzBfSVJRCTgwCisjZGVmaW5lIEVETUFDMF9JUFJfQUREUglJTlRDX0lQUkcKKyNkZWZpbmUgRURNQUMwX0lQUl9QT1MJMworI2RlZmluZSBFRE1BQzBfUFJJT1JJVFkJMworCisjZGVmaW5lIEVETUFDMV9JUlEJODEKKyNkZWZpbmUgRURNQUMxX0lQUl9BRERSCUlOVENfSVBSRworI2RlZmluZSBFRE1BQzFfSVBSX1BPUwkyCisjZGVmaW5lIEVETUFDMV9QUklPUklUWQkzCisKKyNkZWZpbmUgRURNQUMyX0lSUQk4MgorI2RlZmluZSBFRE1BQzJfSVBSX0FERFIJSU5UQ19JUFJHCisjZGVmaW5lIEVETUFDMl9JUFJfUE9TCTEKKyNkZWZpbmUgRURNQUMyX1BSSU9SSVRZCTMKKworLyogU0lPRiAqLworI2RlZmluZSBTSU9GMF9FUklfSVJRCTk2CisjZGVmaW5lIFNJT0YwX1RYSV9JUlEJOTcKKyNkZWZpbmUgU0lPRjBfUlhJX0lSUQk5OAorI2RlZmluZSBTSU9GMF9DQ0lfSVJRCTk5CisjZGVmaW5lIFNJT0YwX0lQUl9BRERSCUlOVENfSVBSSAorI2RlZmluZSBTSU9GMF9JUFJfUE9TCTAKKyNkZWZpbmUgU0lPRjBfUFJJT1JJVFkJNworCisjZGVmaW5lIFNJT0YxX0VSSV9JUlEJMTAwCisjZGVmaW5lIFNJT0YxX1RYSV9JUlEJMTAxCisjZGVmaW5lIFNJT0YxX1JYSV9JUlEJMTAyCisjZGVmaW5lIFNJT0YxX0NDSV9JUlEJMTAzCisjZGVmaW5lIFNJT0YxX0lQUl9BRERSCUlOVENfSVBSSQorI2RlZmluZSBTSU9GMV9JUFJfUE9TCTEKKyNkZWZpbmUgU0lPRjFfUFJJT1JJVFkJNworI2VuZGlmIC8qIENPTkZJR19DUFVfU1VCVFlQRV9TSDc3MTAgKi8KKworI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TVUJUWVBFX1NINzcxMCkKKyNkZWZpbmUgUE9SVF9QQUNSCTB4YTQwNTAxMDBVTAorI2RlZmluZSBQT1JUX1BCQ1IJMHhhNDA1MDEwMlVMCisjZGVmaW5lIFBPUlRfUENDUgkweGE0MDUwMTA0VUwKKyNkZWZpbmUgUE9SVF9QRVRDUgkweGE0MDUwMTA2VUwKKyNkZWZpbmUgUE9SVF9QQURSICAJMHhhNDA1MDEyMFVMCisjZGVmaW5lIFBPUlRfUEJEUiAgCTB4YTQwNTAxMjJVTAorI2RlZmluZSBQT1JUX1BDRFIgIAkweGE0MDUwMTI0VUwKKyNlbHNlCiAjZGVmaW5lIFBPUlRfUEFDUgkweGE0MDAwMTAwVUwKICNkZWZpbmUgUE9SVF9QQkNSCTB4YTQwMDAxMDJVTAogI2RlZmluZSBQT1JUX1BDQ1IJMHhhNDAwMDEwNFVMCkBAIC01MDEsNiArNjEyLDcgQEAKICNkZWZpbmUgUE9SVF9QQkRSICAJMHhhNDAwMDEyMlVMCiAjZGVmaW5lIFBPUlRfUENEUiAgCTB4YTQwMDAxMjRVTAogI2RlZmluZSBQT1JUX1BGRFIgIAkweGE0MDAwMTJhVUwKKyNlbmRpZgogCiAjZGVmaW5lIElSUTBfSVJRCTMyCiAjZGVmaW5lIElSUTFfSVJRCTMzCkBAIC01NzcsNyArNjg5LDcgQEAKICNkZWZpbmUgTlJfSU5UQzJfSVJRUwk2NAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwKQogI2RlZmluZSBJTlRDMl9CQVNFCTB4ZmZkNDAwMDAKLSNkZWZpbmUgSU5UQzJfRklSU1RfSVJRCTIyCisjZGVmaW5lIElOVEMyX0ZJUlNUX0lSUQkyMQogI2RlZmluZSBJTlRDMl9JTlRNU0tfT0ZGU0VUCSgweDM4KQogI2RlZmluZSBJTlRDMl9JTlRNU0tDTFJfT0ZGU0VUCSgweDNjKQogI2RlZmluZSBOUl9JTlRDMl9JUlFTCTYwCkBAIC01OTQsNiArNzA2LDggQEAKIAogI2VuZGlmCiAKK2V4dGVybiBpbnQgc2htc2VfaXJxX2RlbXV4KGludCBpcnEpOworCiBzdGF0aWMgaW5saW5lIGludCBnZW5lcmljX2lycV9kZW11eChpbnQgaXJxKQogewogCXJldHVybiBpcnE7CkBAIC02MDUsOCArNzE5LDIxIEBACiAjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaXJxKQkoaXJxKQogI2RlZmluZSBpcnFfZGVtdXgoaXJxKQkJX19pcnFfZGVtdXgoc2hfbXYubXZfaXJxX2RlbXV4KGlycSkpCiAKKyNpZmRlZiBDT05GSUdfNEtTVEFDS1MKK2V4dGVybiB2b2lkIGlycV9jdHhfaW5pdChpbnQgY3B1KTsKK2V4dGVybiB2b2lkIGlycV9jdHhfZXhpdChpbnQgY3B1KTsKKyMgZGVmaW5lIF9fQVJDSF9IQVNfRE9fU09GVElSUQorI2Vsc2UKKyMgZGVmaW5lIGlycV9jdHhfaW5pdChjcHUpIGRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGlycV9jdHhfZXhpdChjcHUpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzE4MCkKICNpbmNsdWRlIDxhc20vaXJxLXNoNzMxODAuaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NVQlRZUEVfU0g3MzQzKQorI2luY2x1ZGUgPGFzbS9pcnEtc2g3MzQzLmg+CisjZW5kaWYKKwogI2VuZGlmIC8qIF9fQVNNX1NIX0lSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rZXhlYy5oIGIvaW5jbHVkZS9hc20tc2gva2V4ZWMuaAppbmRleCA5ZGZlNTlmNi4uOWQyMzVhZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gva2V4ZWMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9rZXhlYy5oCkBAIC0yMywxMSArMjMsMTAgQEAKIC8qIFRoZSBuYXRpdmUgYXJjaGl0ZWN0dXJlICovCiAjZGVmaW5lIEtFWEVDX0FSQ0ggS0VYRUNfQVJDSF9TSAogCi0jaWZuZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBNQVhfTk9URV9CWVRFUyAxMDI0CiAKLWV4dGVybiB2b2lkIG1hY2hpbmVfc2h1dGRvd24odm9pZCk7Ci1leHRlcm4gdm9pZCAqY3Jhc2hfbm90ZXM7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKy8qIFByb3ZpZGUgYSBkdW1teSBkZWZpbml0aW9uIHRvIGF2b2lkIGJ1aWxkIGZhaWx1cmVzLiAqLworc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX3NldHVwX3JlZ3Moc3RydWN0IHB0X3JlZ3MgKm5ld3JlZ3MsCisJCQkJCXN0cnVjdCBwdF9yZWdzICpvbGRyZWdzKSB7IH0KIAogI2VuZGlmIC8qIF9TSF9LRVhFQ19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9rZ2RiLmggYi9pbmNsdWRlL2FzbS1zaC9rZ2RiLmgKaW5kZXggMTY1M2ZmYi4uN2IyNmY1MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gva2dkYi5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL2tnZGIuaApAQCAtMTI4LDQgKzEyOCwxOSBAQAogI2RlZmluZSBLR0RCX0FTU0VSVChjb25kaXRpb24sIG1lc3NhZ2UpCiAjZW5kaWYKIAorLyogVGFrZW4gZnJvbSBzaC1zdHViLmMgb2YgR0RCIDQuMTggKi8KK3N0YXRpYyBjb25zdCBjaGFyIGhleGNoYXJzW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisKKy8qIEdldCBoaWdoIGhleCBiaXRzICovCitzdGF0aWMgaW5saW5lIGNoYXIgaGlnaGhleChjb25zdCBpbnQgeCkKK3sKKwlyZXR1cm4gaGV4Y2hhcnNbKHggPj4gNCkgJiAweGZdOworfQorCisvKiBHZXQgbG93IGhleCBiaXRzICovCitzdGF0aWMgaW5saW5lIGNoYXIgbG93aGV4KGNvbnN0IGludCB4KQoreworCXJldHVybiBoZXhjaGFyc1t4ICYgMHhmXTsKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2dpby5oIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9naW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmNlNGM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9naW8uaApAQCAtMCwwICsxLDQ1IEBACisjaWZuZGVmIF9fQVNNX1NIX0xBTkRJU0tfR0lPX0gKKyNkZWZpbmUgX19BU01fU0hfTEFORElTS19HSU9fSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogdmVyc2lvbiAqLworI2RlZmluZSBWRVJTSU9OX1NUUgkiMS4wMCIKKworLyogRHJpdmVyIG5hbWUgKi8KKyNkZWZpbmUgR0lPX0RSSVZFUl9OQU1FCQkiL2Rldi9naW9kcnYiCisKKy8qIFVzZSAnaycgYXMgbWFnaWMgbnVtYmVyICovCisjZGVmaW5lIEdJT0RSVl9JT0NfTUFHSUMgICdrJworCisjZGVmaW5lIEdJT0RSVl9JT0NSRVNFVCAgICBfSU8oR0lPRFJWX0lPQ19NQUdJQywgMCkKKy8qCisgKiBTIG1lYW5zICJTZXQiIHRocm91Z2ggYSBwdHIsCisgKiBUIG1lYW5zICJUZWxsIiBkaXJlY3RseQorICogRyBtZWFucyAiR2V0IiAodG8gYSBwb2ludGVkIHZhcikKKyAqIFEgbWVhbnMgIlF1ZXJ5IiwgcmVzcG9uc2UgaXMgb24gdGhlIHJldHVybiB2YWx1ZQorICogWCBtZWFucyAiZVhjaGFuZ2UiOiBHIGFuZCBTIGF0b21pY2FsbHkKKyAqIEggbWVhbnMgInNIaWZ0IjogVCBhbmQgUSBhdG9taWNhbGx5CisgKi8KKyNkZWZpbmUgR0lPRFJWX0lPQ1NHSU9EQVRBMSAgIF9JT1coR0lPRFJWX0lPQ19NQUdJQywgIDEsIHVuc2lnbmVkIGNoYXIgKikKKyNkZWZpbmUgR0lPRFJWX0lPQ0dHSU9EQVRBMSAgIF9JT1IoR0lPRFJWX0lPQ19NQUdJQywgIDIsIHVuc2lnbmVkIGNoYXIgKikKKyNkZWZpbmUgR0lPRFJWX0lPQ1NHSU9EQVRBMiAgIF9JT1coR0lPRFJWX0lPQ19NQUdJQywgIDMsIHVuc2lnbmVkIHNob3J0ICopCisjZGVmaW5lIEdJT0RSVl9JT0NHR0lPREFUQTIgICBfSU9SKEdJT0RSVl9JT0NfTUFHSUMsICA0LCB1bnNpZ25lZCBzaG9ydCAqKQorI2RlZmluZSBHSU9EUlZfSU9DU0dJT0RBVEE0ICAgX0lPVyhHSU9EUlZfSU9DX01BR0lDLCAgNSwgdW5zaWduZWQgbG9uZyAqKQorI2RlZmluZSBHSU9EUlZfSU9DR0dJT0RBVEE0ICAgX0lPUihHSU9EUlZfSU9DX01BR0lDLCAgNiwgdW5zaWduZWQgbG9uZyAqKQorI2RlZmluZSBHSU9EUlZfSU9DU0dJT1NFVEFERFIgX0lPVyhHSU9EUlZfSU9DX01BR0lDLCAgNywgdW5zaWduZWQgbG9uZyAqKQorI2RlZmluZSBHSU9EUlZfSU9DSEFSRFJFU0VUICAgX0lPKEdJT0RSVl9JT0NfTUFHSUMsIDgpIC8qIGRlYnVnZ2luZyB0b29sICovCisKKyNkZWZpbmUgR0lPRFJWX0lPQ1NHSU9fTEVEICAgIF9JT1coR0lPRFJWX0lPQ19NQUdJQywgIDksIHVuc2lnbmVkIGxvbmcgKikKKyNkZWZpbmUgR0lPRFJWX0lPQ0dHSU9fTEVEICAgIF9JT1IoR0lPRFJWX0lPQ19NQUdJQywgIDEwLCB1bnNpZ25lZCBsb25nICopCisjZGVmaW5lIEdJT0RSVl9JT0NTR0lPX0JVWlpFUiBfSU9XKEdJT0RSVl9JT0NfTUFHSUMsICAxMSwgdW5zaWduZWQgbG9uZyAqKQorI2RlZmluZSBHSU9EUlZfSU9DR0dJT19MQU5ESVNLIF9JT1IoR0lPRFJWX0lPQ19NQUdJQywgIDE0LCB1bnNpZ25lZCBsb25nICopCisjZGVmaW5lIEdJT0RSVl9JT0NHR0lPX0JUTiBfSU9SKEdJT0RSVl9JT0NfTUFHSUMsICAyMiwgdW5zaWduZWQgbG9uZyAqKQorI2RlZmluZSBHSU9EUlZfSU9DU0dJT19CVE5QSUQgX0lPVyhHSU9EUlZfSU9DX01BR0lDLCAgMjMsIHVuc2lnbmVkIGxvbmcgKikKKyNkZWZpbmUgR0lPRFJWX0lPQ0dHSU9fQlROUElEIF9JT1IoR0lPRFJWX0lPQ19NQUdJQywgIDI0LCB1bnNpZ25lZCBsb25nICopCisKKyNkZWZpbmUgR0lPRFJWX0lPQ19NQVhOUiA4CisjZGVmaW5lIEdJT19SRUFEIDB4MDAwMDAwMDAKKyNkZWZpbmUgR0lPX1dSSVRFIDB4MDAwMDAwMDEKKworI2VuZGlmIC8qIF9fQVNNX1NIX0xBTkRJU0tfR0lPX0ggICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2lkZS5oIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDkwZTI4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9pZGUuaApAQCAtMCwwICsxLDE0IEBACisvKgorICogbW9kaWZlZCBieSBrb2dpaWRlbmEKKyAqIDIwMDUuMDMuMDMKKyAqLworCisjaWZuZGVmIF9fQVNNX1NIX0xBTkRJU0tfSURFX0gKKyNkZWZpbmUgX19BU01fU0hfTEFORElTS19JREVfSAorCisvKiBOb3RoaW5nIHRvIHNlZSBoZXJlLi4gKi8KKyNpbmNsdWRlIDxhc20vbGFuZGlzay9pb2RhdGFfbGFuZGlzay5oPgorI2RlZmluZSBJUlFfQ0ZDQVJECUlSUV9GQVRBCS8qIENGIENhcmQgSVJRICovCisjZGVmaW5lIElSUV9QQ01DSUEJSVJRX0FUQQkJLyogUENNQ0lBIElSUSAqLworCisjZW5kaWYgLyogX19BU01fU0hfTEFORElTS19JREVfSCAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaCBiL2luY2x1ZGUvYXNtLXNoL2xhbmRpc2svaW9kYXRhX2xhbmRpc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzRkM2M3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvbGFuZGlzay9pb2RhdGFfbGFuZGlzay5oCkBAIC0wLDAgKzEsNzkgQEAKKyNpZm5kZWYgX19BU01fU0hfSU9EQVRBX0xBTkRJU0tfSAorI2RlZmluZSBfX0FTTV9TSF9JT0RBVEFfTEFORElTS19ICisKKy8qCisgKiBsaW51eC9pbmNsdWRlL2FzbS1zaC9sYW5kaXNrL2lvZGF0YV9sYW5kaXNrLmgKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgIEF0b20gQ3JlYXRlIEVuZ2luZWVyaW5nIENvLiwgTHRkLgorICoKKyAqIElPLURBVEEgTEFORElTSyBzdXBwb3J0CisgKi8KKworLyogQm94IHNwZWNpZmljIGFkZHJlc3Nlcy4gICovCisKKyNkZWZpbmUgUEFfVVNCCQkweGE0MDAwMDAwCS8qIFVTQiBDb250cm9sbGVyIE02NjU5MCAqLworCisjZGVmaW5lIFBBX0FUQVJTVAkweGIwMDAwMDAwCS8qIEFUQS9GQVRBIEFjY2VzcyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIFBBX0xFRAkJMHhiMDAwMDAwMQkvKiBMRUQgQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQQV9TVEFUVVMJMHhiMDAwMDAwMgkvKiBTd2l0Y2ggU3RhdHVzIFJlZ2lzdGVyICovCisjZGVmaW5lIFBBX1NIVVRET1dOCTB4YjAwMDAwMDMJLyogU2h1dGRvd24gQ29udHJvbCBSZWdpc3RlciAqLworI2RlZmluZSBQQV9QQ0lQTUUJMHhiMDAwMDAwNAkvKiBQQ0kgUE1FIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBQQV9JTUFTSwkweGIwMDAwMDA1CS8qIEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovCisvKiAyMDAzLjEwLjMxIEktTyBEQVRBIE5TRCBOV0cJYWRkLglmb3Igc2h1dGRvd24gcG9ydCBjbGVhciAqLworI2RlZmluZSBQQV9QV1JJTlRfQ0xSCTB4YjAwMDAwMDYJLyogU2h1dGRvd24gSW50ZXJydXB0IGNsZWFyIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEFfTENEX0NMUkRTUAkweDAwCQkvKiBMQ0QgQ2xlYXIgRGlzcGxheSBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX1JUTkhPTUUJMHgwMAkJLyogTENEIFJldHVybiBIb21lIE9mZnNldCAqLworI2RlZmluZSBQQV9MQ0RfRU5UTU9ERQkweDAwCQkvKiBMQ0QgRW50cnkgTW9kZSBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX0RTUENUTAkweDAwCQkvKiBMQ0QgRGlzcGxheSBPTi9PRkYgQ29udHJvbCBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX0ZVTkMJMHgwMAkJLyogTENEIEZ1bmN0aW9uIFNldCBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX0NHUkFNCTB4MDAJCS8qIExDRCBTZXQgQ0dSQU0gQWRkcmVzcyBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX0REUkFNCTB4MDAJCS8qIExDRCBTZXQgRERSQU0gQWRkcmVzcyBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX1JERkxBRwkweDAxCQkvKiBMQ0QgUmVhZCBCdXN5IEZsYWcgT2Zmc2V0ICovCisjZGVmaW5lIFBBX0xDRF9XVERBVEEJMHgwMgkJLyogTENEIFdyaXRlIERhdGF0IHRvIFJBTSBPZmZzZXQgKi8KKyNkZWZpbmUgUEFfTENEX1JEREFUQQkweDAzCQkvKiBMQ0QgUmVhZCBEYXRhIGZyb20gUkFNIE9mZnNldCAqLworI2RlZmluZSBQQV9QSURFX09GRlNFVAkweDQwCQkvKiBDRiBJREUgT2Zmc2V0ICovCisjZGVmaW5lIFBBX1NJREVfT0ZGU0VUCTB4NDAJCS8qIEhERCBJREUgT2Zmc2V0ICovCisKKyNkZWZpbmUgSVJRX1BDSUlOVEEJNQkJLyogUENJIElOVEEgSVJRICovCisjZGVmaW5lIElSUV9QQ0lJTlRCCTYJCS8qIFBDSSBJTlRCIElSUSAqLworI2RlZmluZSBJUlFfUENJSU5EQwk3CQkvKiBQQ0kgSU5UQyBJUlEgKi8KKyNkZWZpbmUgSVJRX1BDSUlOVEQJOAkJLyogUENJIElOVEQgSVJRICovCisjZGVmaW5lIElSUV9BVEEJCTkJCS8qIEFUQSBJUlEgKi8KKyNkZWZpbmUgSVJRX0ZBVEEJMTAJCS8qIEZBVEEgSVJRICovCisjZGVmaW5lIElSUV9QT1dFUgkxMQkJLyogUG93ZXIgU3dpdGNoIElSUSAqLworI2RlZmluZSBJUlFfQlVUVE9OCTEyCQkvKiBVU0wtNVAgQnV0dG9uIElSUSAqLworI2RlZmluZSBJUlFfRkFVTFQJMTMJCS8qIFVTTC01UCBGYXVsdCAgSVJRICovCisKKyNkZWZpbmUgU0hVVERPV05fQlROX01BSk9SCTk5CS8qIFNodXRkb3duIGJ1dHRvbiBkZXZpY2UgbWFqb3Igbm8uICovCisKKyNkZWZpbmUgU0hVVERPV05fTE9PUF9DTlQJNQkvKiBTaHV0ZG93biBidXR0b24gRGV0ZWN0aW9uIGxvb3AgKi8KKyNkZWZpbmUgU0hVVERPV05fREVMQVkJCTIwMAkvKiBTaHV0ZG93biBidXR0b24gZGVsYXkgdmFsdWUobXMpICovCisKKworLyogYWRkZWQgYnkga29naWlkZW5hICovCisvKgorICogIGxhbmRpc2tfbGVkcGFyYW0KKyAqCisgKiBsZWQgIC0tLS0tLTEwIC02NTQzMjEwIC02NTQzMjEwIC02NTQzMjEwCisgKiAgICAgfDAwMDAwMC4ufDAuLi4uLi4ufDAuLi4uLi4ufFUuLi4uLi4ufAorICogICAgIHwgIEhBUkQgIHxmYXN0Ymxpa3wgYmxpbmsgIHwgICBvbiAgIHwKKyAqCisgKiAgIGxlZDA6IHBvd2VyICAgICAgIFU6dXBkYXRlIGZsYWcKKyAqICAgbGVkMTogZXJyb3IKKyAqICAgbGVkMjogdXNiMQorICogICBsZWQzOiB1c2IyCisgKiAgIGxlZDQ6IHVzYjMKKyAqICAgbGVkNTogdXNiNAorICogICBsZWQ2OiB1c2I1CisgKgorICovCitleHRlcm4gaW50IGxhbmRpc2tfbGVkcGFyYW07ICAgIC8qIGZyb20gc2V0dXAuYyAqLworZXh0ZXJuIGludCBsYW5kaXNrX2J1enplcnBhcmFtOyAvKiBmcm9tIHNldHVwLmMgKi8KK2V4dGVybiBpbnQgbGFuZGlza19hcmNoOyAgICAgICAgLyogZnJvbSBzZXR1cC5jICovCisKKyNkZWZpbmUgX19JT19QUkVGSVggbGFuZGlzaworI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CisKKyNlbmRpZiAgLyogX19BU01fU0hfSU9EQVRBX0xBTkRJU0tfSCAqLworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmggYi9pbmNsdWRlL2FzbS1zaC9tYWNodmVjLmgKaW5kZXggNTUwNTAxZi4uNzAzODliNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbWFjaHZlYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL21hY2h2ZWMuaApAQCAtOCwxNyArOCwxOCBAQAogICovCiAKICNpZm5kZWYgX0FTTV9TSF9NQUNIVkVDX0gKLSNkZWZpbmUgX0FTTV9TSF9NQUNIVkVDX0ggMQorI2RlZmluZSBfQVNNX1NIX01BQ0hWRUNfSAogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lLmg+Ci0KICNpbmNsdWRlIDxhc20vbWFjaHR5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL21hY2h2ZWNfaW5pdC5oPgogCiBzdHJ1Y3QgZGV2aWNlOwogCiBzdHJ1Y3Qgc2hfbWFjaGluZV92ZWN0b3IgeworCXZvaWQgKCptdl9zZXR1cCkoY2hhciAqKmNtZGxpbmVfcCk7CisJY29uc3QgY2hhciAqbXZfbmFtZTsKIAlpbnQgbXZfbnJfaXJxczsKIAogCXU4ICgqbXZfaW5iKSh1bnNpZ25lZCBsb25nKTsKQEAgLTY1LDQgKzY2LDYgQEAKIAogZXh0ZXJuIHN0cnVjdCBzaF9tYWNoaW5lX3ZlY3RvciBzaF9tdjsKIAorI2RlZmluZSBnZXRfc3lzdGVtX3R5cGUoKQlzaF9tdi5tdl9uYW1lCisKICNlbmRpZiAvKiBfQVNNX1NIX01BQ0hWRUNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbWMxNDY4MThydGMuaCBiL2luY2x1ZGUvYXNtLXNoL21jMTQ2ODE4cnRjLmgKaW5kZXggMTcwN2NmYi4uMGFlZTk2YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbWMxNDY4MThydGMuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tYzE0NjgxOHJ0Yy5oCkBAIC00LDE3MyArNCw0IEBACiAjaWZuZGVmIF9BU01fTUMxNDY4MThSVENfSAogI2RlZmluZSBfQVNNX01DMTQ2ODE4UlRDX0gKIAotI2lmZGVmIENPTkZJR19TSF9NUEMxMjExCi0jdW5kZWYgIF9BU01fTUMxNDY4MThSVENfSAotI3VuZGVmICBSVENfSVJRCi0jaW5jbHVkZSA8YXNtL21wYzEyMTEvbWMxNDY4MThydGMuaD4KLSNlbHNlCi0KLSNpbmNsdWRlIDxhc20vcnRjLmg+Ci0KLSNkZWZpbmUgUlRDX0FMV0FZU19CQ0QJMQotCi0vKiBGSVhNRTpSVEMgSW50ZXJydXB0IGZlYXR1cmUgaXMgbm90IGltcGxlbWVudGVkIHlldC4gKi8KLSN1bmRlZiAgUlRDX0lSUQotI2RlZmluZSBSVENfSVJRCQkwCi0KLSNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gzKQotI2RlZmluZSBSVENfUE9SVChuKQkJKFI2NENOVCsobikqMikKLSNkZWZpbmUgQ01PU19SRUFEKGFkZHIpCQlfX0NNT1NfUkVBRChhZGRyLGIpCi0jZGVmaW5lIENNT1NfV1JJVEUodmFsLGFkZHIpCV9fQ01PU19XUklURSh2YWwsYWRkcixiKQotCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TSF9TRUNVUkVFREdFNTQxMCkKLSNpbmNsdWRlIDxhc20vc25hcGdlYXIvaW8uaD4KLQotI2RlZmluZSBSVENfUE9SVChuKSAgICAgICAgICAgICBTRUNVUkVFREdFX0lPUE9SVF9BRERSCi0jZGVmaW5lIENNT1NfUkVBRChhZGRyKSAgICAgICAgIHNlY3VyZWVkZ2U1NDEwX2Ntb3NfcmVhZChhZGRyKQotI2RlZmluZSBDTU9TX1dSSVRFKHZhbCxhZGRyKSAgICBzZWN1cmVlZGdlNTQxMF9jbW9zX3dyaXRlKHZhbCxhZGRyKQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2VjdXJlZWRnZTU0MTBfY21vc19yZWFkKGludCBhZGRyKTsKLWV4dGVybiB2b2lkIHNlY3VyZWVkZ2U1NDEwX2Ntb3Nfd3JpdGUodW5zaWduZWQgY2hhciB2YWwsIGludCBhZGRyKTsKLQotI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NINCkKLSNkZWZpbmUgUlRDX1BPUlQobikJCShSNjRDTlQrKG4pKjQpCi0jZGVmaW5lIENNT1NfUkVBRChhZGRyKQkJX19DTU9TX1JFQUQoYWRkcix3KQotI2RlZmluZSBDTU9TX1dSSVRFKHZhbCxhZGRyKQlfX0NNT1NfV1JJVEUodmFsLGFkZHIsdykKLSNlbmRpZgotCi0jZGVmaW5lIF9fQ01PU19SRUFEKGFkZHIsIHMpICh7CQkJCQkJXAotCXVuc2lnbmVkIGNoYXIgdmFsPTAsIHJjcjEsIHJjcjIsIHI2NGNudCwgcmV0cnk7CQkJXAotCXN3aXRjaChhZGRyKSB7CQkJCQkJCVwKLQkJY2FzZSBSVENfU0VDT05EUzoJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJTRUNDTlQpOwkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfU0VDT05EU19BTEFSTToJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJTRUNBUik7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfTUlOVVRFUzoJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJNSU5DTlQpOwkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfTUlOVVRFU19BTEFSTToJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJNSU5BUik7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfSE9VUlM6CQkJCQkJXAotCQkJdmFsID0gY3RybF9pbmIoUkhSQ05UKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19IT1VSU19BTEFSTToJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJIUkFSKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19EQVlfT0ZfV0VFSzoJCQkJCVwKLQkJCXZhbCA9IGN0cmxfaW5iKFJXS0NOVCk7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfREFZX09GX01PTlRIOgkJCQkJXAotCQkJdmFsID0gY3RybF9pbmIoUkRBWUNOVCk7CQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19NT05USDoJCQkJCQlcCi0JCQl2YWwgPSBjdHJsX2luYihSTU9OQ05UKTsJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgUlRDX1lFQVI6CQkJCQkJXAotCQkJdmFsID0gY3RybF9pbiMjcyhSWVJDTlQpOwkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfUkVHX0E6IC8qIFJUQ19GUkVRX1NFTEVDVCAqLwkJCVwKLQkJCXJjcjIgPSBjdHJsX2luYihSQ1IyKTsJCQkJXAotCQkJdmFsID0gKHJjcjIgJiBSQ1IyX1BFU01BU0spID4+IDQ7CQlcCi0JCQlyY3IxID0gY3RybF9pbmIoUkNSMSk7CQkJCVwKLQkJCXJjcjEgPSAocmNyMSAmIChSQ1IxX0NJRSB8IFJDUjFfQUlFKSkgfCBSQ1IxX0FGO1wKLQkJCXJldHJ5ID0gMDsJCQkJCVwKLQkJCWRvIHsJCQkJCQlcCi0JCQkJY3RybF9vdXRiKHJjcjEsIFJDUjEpOyAvKiBjbGVhciBDRiAqLwlcCi0JCQkJcjY0Y250ID0gY3RybF9pbmIoUjY0Q05UKTsJCVwKLQkJCX0gd2hpbGUoKGN0cmxfaW5iKFJDUjEpICYgUkNSMV9DRikgJiYgcmV0cnkrKyA8IDEwMDApO1wKLQkJCXI2NGNudCBePSBSVENfQklUX0lOVkVSVEVEOwkJCVwKLQkJCWlmKHI2NGNudCA9PSAweDdmIHx8IHI2NGNudCA9PSAwKQkJXAotCQkJCXZhbCB8PSBSVENfVUlQOwkJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgUlRDX1JFR19COgkvKiBSVENfQ09OVFJPTCAqLwkJCVwKLQkJCXJjcjEgPSBjdHJsX2luYihSQ1IxKTsJCQkJXAotCQkJcmNyMiA9IGN0cmxfaW5iKFJDUjIpOwkJCQlcCi0JCQlpZihyY3IxICYgUkNSMV9DSUUpCXZhbCB8PSBSVENfVUlFOwkJXAotCQkJaWYocmNyMSAmIFJDUjFfQUlFKQl2YWwgfD0gUlRDX0FJRTsJCVwKLQkJCWlmKHJjcjIgJiBSQ1IyX1BFU01BU0spCXZhbCB8PSBSVENfUElFOwkJXAotCQkJaWYoIShyY3IyICYgUkNSMl9TVEFSVCkpdmFsIHw9IFJUQ19TRVQ7CQlcCi0JCQl2YWwgfD0gUlRDXzI0SDsJCQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfUkVHX0M6CS8qIFJUQ19JTlRSX0ZMQUdTICovCQkJXAotCQkJcmNyMSA9IGN0cmxfaW5iKFJDUjEpOwkJCQlcCi0JCQlyY3IxICY9IH4oUkNSMV9DRiB8IFJDUjFfQUYpOwkJCVwKLQkJCWN0cmxfb3V0YihyY3IxLCBSQ1IxKTsJCQkJXAotCQkJcmNyMiA9IGN0cmxfaW5iKFJDUjIpOwkJCQlcCi0JCQlyY3IyICY9IH5SQ1IyX1BFRjsJCQkJXAotCQkJY3RybF9vdXRiKHJjcjIsIFJDUjIpOwkJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgUlRDX1JFR19EOgkvKiBSVENfVkFMSUQgKi8JCQkJXAotCQkJLyogQWx3YXlzIHZhbGlkIC4uLiAqLwkJCQlcCi0JCQl2YWwgPSBSVENfVlJUOwkJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlkZWZhdWx0OgkJCQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi0JdmFsOwkJCQkJCQkJXAotfSkKLQotI2RlZmluZSBfX0NNT1NfV1JJVEUodmFsLCBhZGRyLCBzKSAoewkJCQkJXAotCXVuc2lnbmVkIGNoYXIgcmNyMSxyY3IyOwkJCQkJXAotCXN3aXRjaChhZGRyKSB7CQkJCQkJCVwKLQkJY2FzZSBSVENfU0VDT05EUzoJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJTRUNDTlQpOwkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfU0VDT05EU19BTEFSTToJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJTRUNBUik7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfTUlOVVRFUzoJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJNSU5DTlQpOwkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfTUlOVVRFU19BTEFSTToJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJNSU5BUik7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfSE9VUlM6CQkJCQkJXAotCQkJY3RybF9vdXRiKHZhbCwgUkhSQ05UKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19IT1VSU19BTEFSTToJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJIUkFSKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19EQVlfT0ZfV0VFSzoJCQkJCVwKLQkJCWN0cmxfb3V0Yih2YWwsIFJXS0NOVCk7CQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQkJY2FzZSBSVENfREFZX09GX01PTlRIOgkJCQkJXAotCQkJY3RybF9vdXRiKHZhbCwgUkRBWUNOVCk7CQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19NT05USDoJCQkJCQlcCi0JCQljdHJsX291dGIodmFsLCBSTU9OQ05UKTsJCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgUlRDX1lFQVI6CQkJCQkJXAotCQkJY3RybF9vdXQjI3MoKGN0cmxfaW4jI3MoUllSQ05UKSAmIDB4ZmYwMCkgfCAodmFsICYgMHhmZiksIFJZUkNOVCk7XAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19SRUdfQTogLyogUlRDX0ZSRVFfU0VMRUNUICovCQkJXAotCQkJcmNyMiA9IGN0cmxfaW5iKFJDUjIpOwkJCQlcCi0JCQlpZigodmFsICYgUlRDX0RJVl9DVEwpID09IFJUQ19ESVZfUkVTRVQyKQlcCi0JCQkJcmNyMiB8PSBSQ1IyX1JFU0VUOwkJCVwKLQkJCWN0cmxfb3V0YihyY3IyLCBSQ1IyKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19SRUdfQjoJLyogUlRDX0NPTlRST0wgKi8JCQlcCi0JCQlyY3IxID0gKGN0cmxfaW5iKFJDUjEpICYgMHg5OSkgfCBSQ1IxX0FGOwlcCi0JCQlpZih2YWwgJiBSVENfQUlFKSByY3IxIHw9IFJDUjFfQUlFOwkJXAotCQkJZWxzZSAgICAgICAgICAgICAgcmNyMSAmPSB+UkNSMV9BSUU7CQlcCi0JCQlpZih2YWwgJiBSVENfVUlFKSByY3IxIHw9IFJDUjFfQ0lFOwkJXAotCQkJZWxzZSAgICAgICAgICAgICAgcmNyMSAmPSB+UkNSMV9DSUU7CQlcCi0JCQljdHJsX291dGIocmNyMSwgUkNSMSk7CQkJCVwKLQkJCXJjcjIgPSBjdHJsX2luYihSQ1IyKTsJCQkJXAotCQkJaWYodmFsICYgUlRDX1NFVCkgcmNyMiAmPSB+UkNSMl9TVEFSVDsJCVwKLQkJCWVsc2UgICAgICAgICAgICAgIHJjcjIgfD0gUkNSMl9TVEFSVDsJCVwKLQkJCWN0cmxfb3V0YihyY3IyLCBSQ1IyKTsJCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQljYXNlIFJUQ19SRUdfQzoJLyogUlRDX0lOVFJfRkxBR1MgKi8JCQlcCi0JCQlicmVhazsJCQkJCQlcCi0JCWNhc2UgUlRDX1JFR19EOgkvKiBSVENfVkFMSUQgKi8JCQkJXAotCQkJYnJlYWs7CQkJCQkJXAotCQlkZWZhdWx0OgkJCQkJCVwKLQkJCWJyZWFrOwkJCQkJCVwKLQl9CQkJCQkJCQlcCi19KQotCi0jZW5kaWYgLyogQ09ORklHX1NIX01QQzEyMTEgKi8KICNlbmRpZiAvKiBfQVNNX01DMTQ2ODE4UlRDX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL21tdS5oIGIvaW5jbHVkZS9hc20tc2gvbW11LmgKaW5kZXggNzJmMDdiZS4uY2Y0N2RmNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbW11LmgKKysrIGIvaW5jbHVkZS9hc20tc2gvbW11LmgKQEAgLTMsMjcgKzMsNzYgQEAKIAogI2lmICFkZWZpbmVkKENPTkZJR19NTVUpCiAKLXN0cnVjdCBtbV9yYmxvY2tfc3RydWN0IHsKLQlpbnQJc2l6ZTsKLQlpbnQJcmVmY291bnQ7Ci0Jdm9pZAkqa2Jsb2NrOwotfTsKLQotc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgewotCXN0cnVjdCBtbV9yYmxvY2tfc3RydWN0ICpyYmxvY2s7Ci0Jc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgKm5leHQ7Ci19OwotCiB0eXBlZGVmIHN0cnVjdCB7Ci0Jc3RydWN0IG1tX3RibG9ja19zdHJ1Y3QgdGJsb2NrOworCXN0cnVjdCB2bV9saXN0X3N0cnVjdAkqdm1saXN0OwogCXVuc2lnbmVkIGxvbmcJCWVuZF9icms7CiB9IG1tX2NvbnRleHRfdDsKIAogI2Vsc2UKIAogLyogRGVmYXVsdCAidW5zaWduZWQgbG9uZyIgY29udGV4dCAqLwotdHlwZWRlZiB1bnNpZ25lZCBsb25nIG1tX2NvbnRleHRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBtbV9jb250ZXh0X2lkX3Q7CisKK3R5cGVkZWYgc3RydWN0IHsKKwltbV9jb250ZXh0X2lkX3QgaWQ7CisJdm9pZCAqdmRzbzsKK30gbW1fY29udGV4dF90OwogCiAjZW5kaWYgLyogQ09ORklHX01NVSAqLwotI2VuZGlmIC8qIF9fTU1IX0ggKi8KKworLyoKKyAqIFByaXZpbGVnZWQgU3BhY2UgTWFwcGluZyBCdWZmZXIgKFBNQikgZGVmaW5pdGlvbnMKKyAqLworI2RlZmluZSBQTUJfUEFTQ1IJCTB4ZmYwMDAwNzAKKyNkZWZpbmUgUE1CX0lSTUNSCQkweGZmMDAwMDc4CisKKyNkZWZpbmUgUE1CX0FERFIJCTB4ZjYxMDAwMDAKKyNkZWZpbmUgUE1CX0RBVEEJCTB4ZjcxMDAwMDAKKyNkZWZpbmUgUE1CX0VOVFJZX01BWAkJMTYKKyNkZWZpbmUgUE1CX0VfTUFTSwkJMHgwMDAwMDAwZgorI2RlZmluZSBQTUJfRV9TSElGVAkJOAorCisjZGVmaW5lIFBNQl9TWl8xNk0JCTB4MDAwMDAwMDAKKyNkZWZpbmUgUE1CX1NaXzY0TQkJMHgwMDAwMDAxMAorI2RlZmluZSBQTUJfU1pfMTI4TQkJMHgwMDAwMDA4MAorI2RlZmluZSBQTUJfU1pfNTEyTQkJMHgwMDAwMDA5MAorI2RlZmluZSBQTUJfU1pfTUFTSwkJUE1CX1NaXzUxMk0KKyNkZWZpbmUgUE1CX0MJCQkweDAwMDAwMDA4CisjZGVmaW5lIFBNQl9XVAkJCTB4MDAwMDAwMDEKKyNkZWZpbmUgUE1CX1VCCQkJMHgwMDAwMDIwMAorI2RlZmluZSBQTUJfVgkJCTB4MDAwMDAxMDAKKworI2RlZmluZSBQTUJfTk9fRU5UUlkJCSgtMSkKKworc3RydWN0IHBtYl9lbnRyeTsKKworc3RydWN0IHBtYl9lbnRyeSB7CisJdW5zaWduZWQgbG9uZyB2cG47CisJdW5zaWduZWQgbG9uZyBwcG47CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qCisJICogMCAuLiBOUl9QTUJfRU5UUklFUyBmb3Igc3BlY2lmaWMgZW50cnkgc2VsZWN0aW9uLCBvcgorCSAqIFBNQl9OT19FTlRSWSB0byBzZWFyY2ggZm9yIGEgZnJlZSBvbmUKKwkgKi8KKwlpbnQgZW50cnk7CisKKwlzdHJ1Y3QgcG1iX2VudHJ5ICpuZXh0OworCS8qIEFkamFjZW50IGVudHJ5IGxpbmsgZm9yIGNvbnRpZ3VvdXMgbXVsdGktZW50cnkgbWFwcGluZ3MgKi8KKwlzdHJ1Y3QgcG1iX2VudHJ5ICpsaW5rOworfTsKKworLyogYXJjaC9zaC9tbS9wbWIuYyAqLworaW50IF9fc2V0X3BtYl9lbnRyeSh1bnNpZ25lZCBsb25nIHZwbiwgdW5zaWduZWQgbG9uZyBwcG4sCisJCSAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgKmVudHJ5KTsKK2ludCBzZXRfcG1iX2VudHJ5KHN0cnVjdCBwbWJfZW50cnkgKnBtYmUpOwordm9pZCBjbGVhcl9wbWJfZW50cnkoc3RydWN0IHBtYl9lbnRyeSAqcG1iZSk7CitzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJfYWxsb2ModW5zaWduZWQgbG9uZyB2cG4sIHVuc2lnbmVkIGxvbmcgcHBuLAorCQkJICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordm9pZCBwbWJfZnJlZShzdHJ1Y3QgcG1iX2VudHJ5ICpwbWJlKTsKK2xvbmcgcG1iX3JlbWFwKHVuc2lnbmVkIGxvbmcgdmlydCwgdW5zaWduZWQgbG9uZyBwaHlzLAorCSAgICAgICB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOwordm9pZCBwbWJfdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyKTsKKworI2VuZGlmIC8qIF9fTU1VX0ggKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbW11X2NvbnRleHQuaCBiL2luY2x1ZGUvYXNtLXNoL21tdV9jb250ZXh0LmgKaW5kZXggNjc2MGQwNi4uYzcwODhlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvbW11X2NvbnRleHQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tbXVfY29udGV4dC5oCkBAIC00OSw3ICs0OSw3IEBACiAJdW5zaWduZWQgbG9uZyBtYyA9IG1tdV9jb250ZXh0X2NhY2hlOwogCiAJLyogQ2hlY2sgaWYgd2UgaGF2ZSBvbGQgdmVyc2lvbiBvZiBjb250ZXh0LiAqLwotCWlmICgoKG1tLT5jb250ZXh0IF4gbWMpICYgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLKSA9PSAwKQorCWlmICgoKG1tLT5jb250ZXh0LmlkIF4gbWMpICYgTU1VX0NPTlRFWFRfVkVSU0lPTl9NQVNLKSA9PSAwKQogCQkvKiBJdCdzIHVwIHRvIGRhdGUsIGRvIG5vdGhpbmcgKi8KIAkJcmV0dXJuOwogCkBAIC02OCw3ICs2OCw3IEBACiAJCWlmICghbWMpCiAJCQltbXVfY29udGV4dF9jYWNoZSA9IG1jID0gTU1VX0NPTlRFWFRfRklSU1RfVkVSU0lPTjsKIAl9Ci0JbW0tPmNvbnRleHQgPSBtYzsKKwltbS0+Y29udGV4dC5pZCA9IG1jOwogfQogCiAvKgpAQCAtNzgsNyArNzgsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGluaXRfbmV3X2NvbnRleHQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssCiAJCQkJICAgICAgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCW1tLT5jb250ZXh0ID0gTk9fQ09OVEVYVDsKKwltbS0+Y29udGV4dC5pZCA9IE5PX0NPTlRFWFQ7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEyMyw3ICsxMjMsNyBAQAogc3RhdGljIF9faW5saW5lX18gdm9pZCBhY3RpdmF0ZV9jb250ZXh0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCWdldF9tbXVfY29udGV4dChtbSk7Ci0Jc2V0X2FzaWQobW0tPmNvbnRleHQgJiBNTVVfQ09OVEVYVF9BU0lEX01BU0spOworCXNldF9hc2lkKG1tLT5jb250ZXh0LmlkICYgTU1VX0NPTlRFWFRfQVNJRF9NQVNLKTsKIH0KIAogLyogTU1VX1RUQiBjYW4gYmUgdXNlZCBmb3Igb3B0aW1pemluZyB0aGUgZmF1bHQgaGFuZGxpbmcuCkBAIC0xNzQsOSArMTc0LDcgQEAKIHsKIAkvKiBFbmFibGUgTU1VICovCiAJY3RybF9vdXRsKE1NVV9DT05UUk9MX0lOSVQsIE1NVUNSKTsKLQotCS8qIFRoZSBtYW51YWwgc3VnZ2VzdHMgZG9pbmcgc29tZSBub3BzIGFmdGVyIHR1cm5pbmcgb24gdGhlIE1NVSAqLwotCV9fYXNtX18gX192b2xhdGlsZV9fICgibm9wO25vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcFxuXHQiKTsKKwljdHJsX2JhcnJpZXIoKTsKIAogCWlmIChtbXVfY29udGV4dF9jYWNoZSA9PSBOT19DT05URVhUKQogCQltbXVfY29udGV4dF9jYWNoZSA9IE1NVV9DT05URVhUX0ZJUlNUX1ZFUlNJT047CkBAIC0xOTEsNyArMTg5LDggQEAKIAljciA9IGN0cmxfaW5sKE1NVUNSKTsKIAljciAmPSB+TU1VX0NPTlRST0xfSU5JVDsKIAljdHJsX291dGwoY3IsIE1NVUNSKTsKLQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3Bcblx0Iik7CisKKwljdHJsX2JhcnJpZXIoKTsKIH0KICNlbHNlCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9rZXlib2FyZC5oIGIvaW5jbHVkZS9hc20tc2gvbXBjMTIxMS9rZXlib2FyZC5oCmluZGV4IDcxZWY0Y2YuLjkwMjBmZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL21wYzEyMTEva2V5Ym9hcmQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9tcGMxMjExL2tleWJvYXJkLmgKQEAgLTI0LDcgKzI0LDYgQEAKIGV4dGVybiB2b2lkIHBja2JkX2luaXRfaHcodm9pZCk7CiBleHRlcm4gaW50IHBja2JkX3BtX3Jlc3VtZShzdHJ1Y3QgcG1fZGV2ICosIHBtX3JlcXVlc3RfdCwgdm9pZCAqKTsKIGV4dGVybiBwbV9jYWxsYmFjayBwbV9rYmRfcmVxdWVzdF9vdmVycmlkZTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIHBja2JkX3N5c3JxX3hsYXRlWzEyOF07CiAKICNkZWZpbmUga2JkX3NldGtleWNvZGUJCXBja2JkX3NldGtleWNvZGUKICNkZWZpbmUga2JkX2dldGtleWNvZGUJCXBja2JkX2dldGtleWNvZGUKQEAgLTMyLDkgKzMxLDYgQEAKICNkZWZpbmUga2JkX3VuZXhwZWN0ZWRfdXAJcGNrYmRfdW5leHBlY3RlZF91cAogI2RlZmluZSBrYmRfbGVkcwkJcGNrYmRfbGVkcwogI2RlZmluZSBrYmRfaW5pdF9odwkJcGNrYmRfaW5pdF9odwotI2RlZmluZSBrYmRfc3lzcnFfeGxhdGUJCXBja2JkX3N5c3JxX3hsYXRlCi0KLSNkZWZpbmUgU1lTUlFfS0VZIDB4NTQKIAogLyogcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogI2RlZmluZSBrYmRfcmVxdWVzdF9yZWdpb24oKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2ZwZ2EuaCBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9mcGdhLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFjZDg3OTkuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2ZwZ2EuaAorKysgL2Rldi9udWxsCkBAIC0xLDE1ICswLDAgQEAKLS8qIAotICogQ29weXJpZ2h0IChDKSAyMDAwIERhdmlkIEouIE1ja2F5IChkYXZpZC5tY2theUBzdC5jb20pCi0gKgotICogTWF5IGJlIGNvcGllZCBvciBtb2RpZmllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotICogTGljZW5zZS4gIFNlZSBsaW51eC9DT1BZSU5HIGZvciBtb3JlIGluZm9ybWF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAqCi0gKi8KLQotI2lmbmRlZiBfX0ZQR0FfT0RfSF9fCi0jZGVmaW5lIF9fRlBHQV9PRF9IX18KLQotLyogVGhpcyByb3V0aW5lIHdpbGwgcHJvZ3JhbSB1cCB0aGUgZnBnYSB3aGljaCBpbnRlcmZhY2VzIHRvIHRoZSBnYWxpbGVvICovCi1pbnQgaW5pdF9vdmVyZHJpdmVfZnBnYSh2b2lkKTsKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvZ3Q2NDExMS5oIGIvaW5jbHVkZS9hc20tc2gvb3ZlcmRyaXZlL2d0NjQxMTEuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDFkNThiYy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvZ3Q2NDExMS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTA5ICswLDAgQEAKLSNpZm5kZWYgX0dUNjQxMTFfSF8KLSNkZWZpbmUgX0dUNjQxMTFfSF8KLQotI2RlZmluZSBNQVNURVJfSU5URVJGQUNFICAgICAgICAgMHgwCi0jZGVmaW5lIFJBUzEwX0xPX0RFQ19BRFIgICAgICAgICAweDggICAgICAgIAotI2RlZmluZSBSQVMxMF9ISV9ERUNfQURSICAgICAgICAgMHgxMAotI2RlZmluZSBSQVMzMl9MT19ERUNfQURSICAgICAgICAgMHgxOAotI2RlZmluZSBSQVMzMl9ISV9ERUNfQURSICAgICAgICAgMHgyMAotI2RlZmluZSBDUzIwX0xPX0RFQ19BRFIgICAgICAgICAgMHgyOAotI2RlZmluZSBDUzIwX0hJX0RFQ19BRFIgICAgICAgICAgMHgzMAotI2RlZmluZSBDUzNfTE9fREVDX0FEUiAgICAgICAgICAgMHgzOAotI2RlZmluZSBDUzNfSElfREVDX0FEUiAgICAgICAgICAgMHg0MAotI2RlZmluZSBQQ0lfSU9fTE9fREVDX0FEUiAgICAgICAgMHg0OAotI2RlZmluZSBQQ0lfSU9fSElfREVDX0FEUiAgICAgICAgMHg1MAotI2RlZmluZSBQQ0lfTUVNMF9MT19ERUNfQURSICAgICAgMHg1OAotI2RlZmluZSBQQ0lfTUVNMF9ISV9ERUNfQURSICAgICAgMHg2MAotI2RlZmluZSBJTlRFUk5BTF9TUEFDRV9ERUMgICAgICAgMHg2OAotI2RlZmluZSBCVVNfRVJSX0FEUl9MT19DUFUgICAgICAgMHg3MAotI2RlZmluZSBSRUFET05MWTAgICAgICAgICAgICAgICAgMHg3OAotI2RlZmluZSBQQ0lfTUVNMV9MT19ERUNfQURSICAgICAgMHg4MAotI2RlZmluZSBQQ0lfTUVNMV9ISV9ERUNfQURSICAgICAgMHg4OAotI2RlZmluZSBSQVMwX0xPX0RFQ19BRFIgICAgICAgICAgMHg0MDAgICAKLSNkZWZpbmUgUkFTMF9ISV9ERUNfQURSICAgICAgICAgIDB4NDA0Ci0jZGVmaW5lIFJBUzFfTE9fREVDX0FEUiAgICAgICAgICAweDQwOAotI2RlZmluZSBSQVMxX0hJX0RFQ19BRFIgICAgICAgICAgMHg0MGMKLSNkZWZpbmUgUkFTMl9MT19ERUNfQURSICAgICAgICAgIDB4NDEwCi0jZGVmaW5lIFJBUzJfSElfREVDX0FEUiAgICAgICAgICAweDQxNAotI2RlZmluZSBSQVMzX0xPX0RFQ19BRFIgICAgICAgICAgMHg0MTgKLSNkZWZpbmUgUkFTM19ISV9ERUNfQURSICAgICAgICAgIDB4NDFjCi0jZGVmaW5lIERFVl9DUzBfTE9fREVDX0FEUiAgICAgICAweDQyMAotI2RlZmluZSBERVZfQ1MwX0hJX0RFQ19BRFIgICAgICAgMHg0MjQKLSNkZWZpbmUgREVWX0NTMV9MT19ERUNfQURSICAgICAgIDB4NDI4Ci0jZGVmaW5lIERFVl9DUzFfSElfREVDX0FEUiAgICAgICAweDQyYwotI2RlZmluZSBERVZfQ1MyX0xPX0RFQ19BRFIgICAgICAgMHg0MzAKLSNkZWZpbmUgREVWX0NTMl9ISV9ERUNfQURSICAgICAgIDB4NDM0Ci0jZGVmaW5lIERFVl9DUzNfTE9fREVDX0FEUiAgICAgICAweDQzOAotI2RlZmluZSBERVZfQ1MzX0hJX0RFQ19BRFIgICAgICAgMHg0M2MKLSNkZWZpbmUgREVWX0JPT1RDU19MT19ERUNfQURSICAgIDB4NDQwCi0jZGVmaW5lIERFVl9CT09UQ1NfSElfREVDX0FEUiAgICAweDQ0NAotI2RlZmluZSBERVZfQURSX0RFQ19FUlIgICAgICAgICAgMHg0NzAKLSNkZWZpbmUgRFJBTV9DRkcgICAgICAgICAgICAgICAgIDB4NDQ4ICAgCi0jZGVmaW5lIERSQU1fQkFOSzBfUEFSTVMgICAgICAgICAweDQ0YyAgIAotI2RlZmluZSBEUkFNX0JBTksxX1BBUk1TICAgICAgICAgMHg0NTAKLSNkZWZpbmUgRFJBTV9CQU5LMl9QQVJNUyAgICAgICAgIDB4NDU0Ci0jZGVmaW5lIERSQU1fQkFOSzNfUEFSTVMgICAgICAgICAweDQ1OAotI2RlZmluZSBERVZfQkFOSzBfUEFSTVMgICAgICAgICAgMHg0NWMKLSNkZWZpbmUgREVWX0JBTksxX1BBUk1TICAgICAgICAgIDB4NDYwCi0jZGVmaW5lIERFVl9CQU5LMl9QQVJNUyAgICAgICAgICAweDQ2NAotI2RlZmluZSBERVZfQkFOSzNfUEFSTVMgICAgICAgICAgMHg0NjgKLSNkZWZpbmUgREVWX0JPT1RfQkFOS19QQVJNUyAgICAgIDB4NDZjCi0jZGVmaW5lIENIMF9ETUFfQllURUNPVU5UICAgICAgICAweDgwMAotI2RlZmluZSBDSDFfRE1BX0JZVEVDT1VOVCAgICAgICAgMHg4MDQKLSNkZWZpbmUgQ0gyX0RNQV9CWVRFQ09VTlQgICAgICAgIDB4ODA4Ci0jZGVmaW5lIENIM19ETUFfQllURUNPVU5UICAgICAgICAweDgwYwotI2RlZmluZSBDSDBfRE1BX1NSQ19BRFIgICAgICAgICAgMHg4MTAKLSNkZWZpbmUgQ0gxX0RNQV9TUkNfQURSICAgICAgICAgIDB4ODE0Ci0jZGVmaW5lIENIMl9ETUFfU1JDX0FEUiAgICAgICAgICAweDgxOAotI2RlZmluZSBDSDNfRE1BX1NSQ19BRFIgICAgICAgICAgMHg4MWMKLSNkZWZpbmUgQ0gwX0RNQV9EU1RfQURSICAgICAgICAgIDB4ODIwCi0jZGVmaW5lIENIMV9ETUFfRFNUX0FEUiAgICAgICAgICAweDgyNAotI2RlZmluZSBDSDJfRE1BX0RTVF9BRFIgICAgICAgICAgMHg4MjgKLSNkZWZpbmUgQ0gzX0RNQV9EU1RfQURSICAgICAgICAgIDB4ODJjCi0jZGVmaW5lIENIMF9ORVhUX1JFQ19QVFIgICAgICAgICAweDgzMAotI2RlZmluZSBDSDFfTkVYVF9SRUNfUFRSICAgICAgICAgMHg4MzQKLSNkZWZpbmUgQ0gyX05FWFRfUkVDX1BUUiAgICAgICAgIDB4ODM4Ci0jZGVmaW5lIENIM19ORVhUX1JFQ19QVFIgICAgICAgICAweDgzYwotI2RlZmluZSBDSDBfQ1RSTCAgICAgICAgICAgICAgICAgMHg4NDAKLSNkZWZpbmUgQ0gxX0NUUkwgICAgICAgICAgICAgICAgIDB4ODQ0Ci0jZGVmaW5lIENIMl9DVFJMICAgICAgICAgICAgICAgICAweDg0OAotI2RlZmluZSBDSDNfQ1RSTCAgICAgICAgICAgICAgICAgMHg4NGMKLSNkZWZpbmUgRE1BX0FSQklURVIgICAgICAgICAgICAgIDB4ODYwCi0jZGVmaW5lIFRJTUVSMCAgICAgICAgICAgICAgICAgICAweDg1MAotI2RlZmluZSBUSU1FUjEgICAgICAgICAgICAgICAgICAgMHg4NTQKLSNkZWZpbmUgVElNRVIyICAgICAgICAgICAgICAgICAgIDB4ODU4Ci0jZGVmaW5lIFRJTUVSMyAgICAgICAgICAgICAgICAgICAweDg1YwotI2RlZmluZSBUSU1FUl9DVFJMICAgICAgICAgICAgICAgMHg4NjQKLSNkZWZpbmUgUENJX0NNRCAgICAgICAgICAgICAgICAgIDB4YzAwCi0jZGVmaW5lIFBDSV9USU1FT1VUICAgICAgICAgICAgICAweGMwNAotI2RlZmluZSBQQ0lfUkFTMTBfQkFOS19TSVpFICAgICAgMHhjMDgKLSNkZWZpbmUgUENJX1JBUzMyX0JBTktfU0laRSAgICAgIDB4YzBjCi0jZGVmaW5lIFBDSV9DUzIwX0JBTktfU0laRSAgICAgICAweGMxMAotI2RlZmluZSBQQ0lfQ1MzX0JBTktfU0laRSAgICAgICAgMHhjMTQKLSNkZWZpbmUgUENJX1NFUlJNQVNLICAgICAgICAgICAgIDB4YzI4Ci0jZGVmaW5lIFBDSV9JTlRBQ0sgICAgICAgICAgICAgICAweGMzNAotI2RlZmluZSBQQ0lfQkFSX0VOICAgICAgICAgICAgICAgMHhjM2MKLSNkZWZpbmUgUENJX0NGR19BRFIgICAgICAgICAgICAgIDB4Y2Y4Ci0jZGVmaW5lIFBDSV9DRkdfREFUQSAgICAgICAgICAgICAweGNmYwotI2RlZmluZSBQQ0lfSU5UQ0FVU0UgICAgICAgICAgICAgMHhjMTgKLSNkZWZpbmUgUENJX01BU1RfTUFTSyAgICAgICAgICAgIDB4YzFjCi0jZGVmaW5lIFBDSV9QQ0lNQVNLICAgICAgICAgICAgICAweGMyNAotI2RlZmluZSBCQVJfRU5BQkxFX0FEUiAgICAgICAgICAgMHhjM2MKLQotLyogVGhlc2UgYXJlIGNvbmZpZyByZWdpc3RlcnMsIGFjY2Vzc2libGUgdmlhIFBDSSBzcGFjZSAqLwotI2RlZmluZSBQQ0lfQ09ORklHX1JBUzEwX0JBU0VfQURSICAgMHgwMTAKLSNkZWZpbmUgUENJX0NPTkZJR19SQVMzMl9CQVNFX0FEUiAgIDB4MDE0Ci0jZGVmaW5lIFBDSV9DT05GSUdfQ1MyMF9CQVNFX0FEUiAgICAweDAxOAotI2RlZmluZSBQQ0lfQ09ORklHX0NTM19CQVNFX0FEUiAgICAgMHgwMWMKLSNkZWZpbmUgUENJX0NPTkZJR19JTlRfUkVHX01NX0FEUiAgIDB4MDIwCi0jZGVmaW5lIFBDSV9DT05GSUdfSU5UX1JFR19JT19BRFIgICAweDAyNAotI2RlZmluZSBQQ0lfQ09ORklHX0JPQVJEX1ZFTkRPUiAgICAgMHgwMmMKLSNkZWZpbmUgUENJX0NPTkZJR19ST01fQURSICAgICAgICAgIDB4MDMwCi0jZGVmaW5lIFBDSV9DT05GSUdfSU5UX1BJTl9MSU5FICAgICAweDAzYwotCi0KLQotCi0KLSNlbmRpZgotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwZGJhNzAwLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2lvX29kLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSU8gZnVuY3Rpb25zIGZvciBhbiBTVE1pY3JvZWxlY3Ryb25pY3MgT3ZlcmRyaXZlCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NIX0lPX09EX0gKLSNkZWZpbmUgX0FTTV9TSF9JT19PRF9ICi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIG9kX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG9kX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBvZF9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHZvaWQgb2Rfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgb2Rfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIG9kX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciBvZF9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IG9kX2lud19wKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IG9kX2lubF9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBvZF9vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIG9kX291dHdfcCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIG9kX291dGxfcCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIG9kX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIG9kX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIG9kX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIG9kX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBvZF9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgb2Rfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgb2RfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1NIX0lPX09EX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaCBiL2luY2x1ZGUvYXNtLXNoL292ZXJkcml2ZS9vdmVyZHJpdmUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmM3NDZjMi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9vdmVyZHJpdmUvb3ZlcmRyaXZlLmgKKysrIC9kZXYvbnVsbApAQCAtMSw4OCArMCwwIEBACi0vKiAKLSAqIENvcHlyaWdodCAoQykgMjAwMCBEYXZpZCBKLiBNY2theSAoZGF2aWQubWNrYXlAc3QuY29tKQotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gKgotICovCi0KLQotI2lmbmRlZiBfX09WRVJEUklWRV9IX18KLSNkZWZpbmUgX19PVkVSRFJJVkVfSF9fCi0KLSNkZWZpbmUgT1ZFUkRSSVZFX0lOVF9DVCAweGEzYTAwMDAwCi0jZGVmaW5lIE9WRVJEUklWRV9JTlRfRFQgMHhhM2IwMDAwMAotCi0jZGVmaW5lIE9WRVJEUklWRV9DVFJMICAgIDB4YTMwMDAwMDAKLQotLyogU2hvdmluZyBhbGwgdGhlc2UgYml0cyBpbnRvIHRoZSBzYW1lIHJlZ2lzdGVyIGlzIG5vdCBhIGdvb2QgaWRlYS4gCi0gKiBBcyBzb29uIGFzIEkgZ2V0IGEgc3BhcmUgbW9tZW50LCBJJ2xsIGNoYW5nZSB0aGUgRlBHQSBhbmQgcHV0IGVhY2ggCi0gKiBiaXQgaW4gYSBzZXBhcmF0ZSByZWdpc3RlcgotICovCi0KLSNkZWZpbmUgVkFMSURfQ1RSTF9CSVRTCQkgICAgICAgICAgMHgxZgotCi0jZGVmaW5lIEVOQUJMRV9SUzIzMl9NQVNLCSAgCSAgMHgxZQotI2RlZmluZSBESVNBQkxFX1JTMjMyX0JJVAkJICAweDAxCi0KLSNkZWZpbmUgRU5BQkxFX05NSV9NQVNLCQkJICAweDFkCi0jZGVmaW5lIERJU0FCTEVfTk1JX0JJVAkJCSAgMHgwMgotCi0jZGVmaW5lIFJFU0VUX1BDSV9NQVNLCQkJICAweDFiCi0jZGVmaW5lIEVOQUJMRV9QQ0lfQklUCQkJICAweDA0Ci0KLSNkZWZpbmUgRU5BQkxFX0xFRF9NQVNLCQkJICAweDE3Ci0jZGVmaW5lIERJU0FCTEVfTEVEX0JJVAkJCSAgMHgwOAotCi0jZGVmaW5lIFJFU0VUX0ZQR0FfTUFTSwkJCSAgMHgwZgotI2RlZmluZSBFTkFCTEVfRlBHQV9CSVQJCQkgIDB4MTAKLQotCi0jZGVmaW5lIEZQR0FfRENMS19BRERSRVNTICAgICAgICAgICAweEEzQzAwMDAwCi0KLSNkZWZpbmUgRlBHQV9EQVRBICAgICAgICAweDAxCS8qICAgVyAqLwotI2RlZmluZSBGUEdBX0NPTkZET05FICAgIDB4MDIJLyogUiAgICovCi0jZGVmaW5lIEZQR0FfTk9UX1NUQVRVUyAgMHgwNAkvKiBSICAgKi8KLSNkZWZpbmUgRlBHQV9JTklURE9ORSAgICAweDA4CS8qIFIgICAqLwotCi0jZGVmaW5lIEZQR0FfVElNRU9VVCAgICAgMTAwMDAwCi0KLQotLyogSW50ZXJydXB0cyBmb3IgdGhlIG92ZXJkcml2ZS4gTm90ZSB0aGF0IHRoZXNlIG51bWJlcnMgaGF2ZSAKLSAqIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGUgYWN0dWFsIElSUSBudW1iZXJzIHRoZXkgYXBwZWFyIG9uLCAKLSAqIHRoaXMgaXMgYWxsIHByb2dyYW1tYWJsZS4gVGhpcyBpcyBzaW1wbHkgdGhlIHBvc2l0aW9uIGluIHRoZSAKLSAqIElOVF9DVCByZWdpc3Rlci4KLSAqLwotCi0jZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5UQSAgICAgICAgICAgICAgMAotI2RlZmluZSBPVkVSRFJJVkVfUENJX0lOVEIgICAgICAgICAgICAgIDEKLSNkZWZpbmUgT1ZFUkRSSVZFX1BDSV9JTlRDICAgICAgICAgICAgICAyCi0jZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5URCAgICAgICAgICAgICAgMwotI2RlZmluZSBPVkVSRFJJVkVfR0FMSUxFT19JTlQgICAgICAgICAgIDQKLSNkZWZpbmUgT1ZFUkRSSVZFX0dBTElMRU9fTE9DQUxfSU5UICAgICA1Ci0jZGVmaW5lIE9WRVJEUklWRV9BVURJT19JTlQgICAgICAgICAgICAgNgotI2RlZmluZSBPVkVSRFJJVkVfS0VZQk9BUkRfSU5UICAgICAgICAgIDcKLQotLyogV2hpY2ggTGludXggSVJRIHNob3VsZCB3ZSBhc3NpZ24gdG8gZWFjaCBpbnRlcnJ1cHQgc291cmNlPyAqLwotI2RlZmluZSBPVkVSRFJJVkVfUENJX0lSUTEgICAgICAgICAgICAgIDIKLSNpZmRlZiBDT05GSUdfSEFDS0VEX05FMksKLSNkZWZpbmUgT1ZFUkRSSVZFX1BDSV9JUlEyICAgICAgICAgICAgICA3Ci0jZWxzZQotI2RlZmluZSBPVkVSRFJJVkVfUENJX0lSUTIgICAgICAgICAgICAgIDIKLSN1bmRlZiBPVkVSRFJJVkVfUENJX0lOVEIgCi0jZGVmaW5lIE9WRVJEUklWRV9QQ0lfSU5UQiBPVkVSRFJJVkVfUENJX0lOVEEKLQotI2VuZGlmCi0KLS8qIFB1dCB0aGUgRVNTIHNvbG8gYXVkaW8gY2hpcCBvbiBJUlEgNCAqLwotI2RlZmluZSBPVkVSRFJJVkVfRVNTX0lSUSAgICAgICAgICAgICAgIDQKLQotLyogV2hlcmUgdGhlIG1lbW9yeSBiZWhpbmQgdGhlIFBDSSBidXMgYXBwZWFycyAqLwotI2RlZmluZSBQQ0lfRFJBTV9CQVNFICAgMHhiNzAwMDAwMAotI2RlZmluZSBQQ0lfRFJBTV9TSVpFICgxNioxMDI0KjEwMjQpCi0jZGVmaW5lIFBDSV9EUkFNX0ZJTklTSCAoUENJX0RSQU1fQkFTRStQQ0lfRFJBTV9TSVpFLTEpCi0KLS8qIFdoZXJlIHRoZSBJTyByZWdpb24gYXBwZWFycyBpbiB0aGUgbWVtb3J5ICovCi0jZGVmaW5lIFBDSV9HVElPX0JBU0UgICAweGI4MDAwMDAwCi0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGFnZS5oIGIvaW5jbHVkZS9hc20tc2gvcGFnZS5oCmluZGV4IDZmN2ViOGEuLmNhOGIyNmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3BhZ2UuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wYWdlLmgKQEAgLTE2LDcgKzE2LDEzIEBACiAKIC8qIFBBR0VfU0hJRlQgZGV0ZXJtaW5lcyB0aGUgcGFnZSBzaXplICovCiAjZGVmaW5lIFBBR0VfU0hJRlQJMTIKKworI2lmZGVmIF9fQVNTRU1CTFlfXworI2RlZmluZSBQQUdFX1NJWkUJKDEgPDwgUEFHRV9TSElGVCkKKyNlbHNlCiAjZGVmaW5lIFBBR0VfU0laRQkoMVVMIDw8IFBBR0VfU0hJRlQpCisjZW5kaWYKKwogI2RlZmluZSBQQUdFX01BU0sJKH4oUEFHRV9TSVpFLTEpKQogI2RlZmluZSBQVEVfTUFTSwlQQUdFX01BU0sKIApAQCAtMzAsNyArMzYsNiBAQAogI2RlZmluZSBIUEFHRV9TSVpFCQkoMVVMIDw8IEhQQUdFX1NISUZUKQogI2RlZmluZSBIUEFHRV9NQVNLCQkofihIUEFHRV9TSVpFLTEpKQogI2RlZmluZSBIVUdFVExCX1BBR0VfT1JERVIJKEhQQUdFX1NISUZULVBBR0VfU0hJRlQpCi0jZGVmaW5lIEFSQ0hfSEFTX1NFVENMRUFSX0hVR0VfUFRFCiAjZW5kaWYKIAogI2lmZGVmIF9fS0VSTkVMX18KQEAgLTM5LDEwICs0NCwxOCBAQAogZXh0ZXJuIHZvaWQgKCpjbGVhcl9wYWdlKSh2b2lkICp0byk7CiBleHRlcm4gdm9pZCAoKmNvcHlfcGFnZSkodm9pZCAqdG8sIHZvaWQgKmZyb20pOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBzaG1fYWxpZ25fbWFzazsKKworI2lmZGVmIENPTkZJR19NTVUKIGV4dGVybiB2b2lkIGNsZWFyX3BhZ2Vfc2xvdyh2b2lkICp0byk7CiBleHRlcm4gdm9pZCBjb3B5X3BhZ2Vfc2xvdyh2b2lkICp0bywgdm9pZCAqZnJvbSk7CisjZWxzZQorZXh0ZXJuIHZvaWQgY2xlYXJfcGFnZV9ub21tdSh2b2lkICp0byk7CitleHRlcm4gdm9pZCBjb3B5X3BhZ2Vfbm9tbXUodm9pZCAqdG8sIHZvaWQgKmZyb20pOworI2VuZGlmCiAKLSNpZiBkZWZpbmVkKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikgJiYgZGVmaW5lZChDT05GSUdfTU1VKQorI2lmIGRlZmluZWQoQ09ORklHX01NVSkgJiYgKGRlZmluZWQoQ09ORklHX0NQVV9TSDQpIHx8IFwKKwlkZWZpbmVkKENPTkZJR19TSDc3MDVfQ0FDSEVfMzJLQikpCiBzdHJ1Y3QgcGFnZTsKIGV4dGVybiB2b2lkIGNsZWFyX3VzZXJfcGFnZSh2b2lkICp0bywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBzdHJ1Y3QgcGFnZSAqcGcpOwogZXh0ZXJuIHZvaWQgY29weV91c2VyX3BhZ2Uodm9pZCAqdG8sIHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHBhZ2UgKnBnKTsKQEAgLTUxLDI5ICs2NCwyMCBAQAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1NIMikgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgIWRlZmluZWQoQ09ORklHX01NVSkKICNkZWZpbmUgY2xlYXJfdXNlcl9wYWdlKHBhZ2UsIHZhZGRyLCBwZykJY2xlYXJfcGFnZShwYWdlKQogI2RlZmluZSBjb3B5X3VzZXJfcGFnZSh0bywgZnJvbSwgdmFkZHIsIHBnKQljb3B5X3BhZ2UodG8sIGZyb20pCi0jZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfU0g0KQotc3RydWN0IHBhZ2U7Ci1leHRlcm4gdm9pZCBjbGVhcl91c2VyX3BhZ2Uodm9pZCAqdG8sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgc3RydWN0IHBhZ2UgKnBnKTsKLWV4dGVybiB2b2lkIGNvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHN0cnVjdCBwYWdlICpwZyk7Ci1leHRlcm4gdm9pZCBfX2NsZWFyX3VzZXJfcGFnZSh2b2lkICp0bywgdm9pZCAqb3JpZ190byk7Ci1leHRlcm4gdm9pZCBfX2NvcHlfdXNlcl9wYWdlKHZvaWQgKnRvLCB2b2lkICpmcm9tLCB2b2lkICpvcmlnX3RvKTsKICNlbmRpZgogCiAvKgogICogVGhlc2UgYXJlIHVzZWQgdG8gbWFrZSB1c2Ugb2YgQyB0eXBlLWNoZWNraW5nLi4KICAqLwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZTsgfSBwdGVfdDsKLXR5cGVkZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CiB0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVkIGxvbmcgcGdkOyB9IHBnZF90OwogdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHBncHJvdDsgfSBwZ3Byb3RfdDsKIAogI2RlZmluZSBwdGVfdmFsKHgpCSgoeCkucHRlKQotI2RlZmluZSBwbWRfdmFsKHgpCSgoeCkucG1kKQogI2RlZmluZSBwZ2RfdmFsKHgpCSgoeCkucGdkKQogI2RlZmluZSBwZ3Byb3RfdmFsKHgpCSgoeCkucGdwcm90KQogCiAjZGVmaW5lIF9fcHRlKHgpICgocHRlX3QpIHsgKHgpIH0gKQotI2RlZmluZSBfX3BtZCh4KSAoKHBtZF90KSB7ICh4KSB9ICkKICNkZWZpbmUgX19wZ2QoeCkgKChwZ2RfdCkgeyAoeCkgfSApCiAjZGVmaW5lIF9fcGdwcm90KHgpCSgocGdwcm90X3QpIHsgKHgpIH0gKQogCkBAIC05Myw3ICs5Nyw3IEBACiAjZGVmaW5lIF9fTUVNT1JZX1NUQVJUCQlDT05GSUdfTUVNT1JZX1NUQVJUCiAjZGVmaW5lIF9fTUVNT1JZX1NJWkUJCUNPTkZJR19NRU1PUllfU0laRQogCi0jZGVmaW5lIFBBR0VfT0ZGU0VUCQkoMHg4MDAwMDAwMFVMKQorI2RlZmluZSBQQUdFX09GRlNFVAkJQ09ORklHX1BBR0VfT0ZGU0VUCiAjZGVmaW5lIF9fcGEoeCkJCQkoKHVuc2lnbmVkIGxvbmcpKHgpLVBBR0VfT0ZGU0VUKQogI2RlZmluZSBfX3ZhKHgpCQkJKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKSh4KStQQUdFX09GRlNFVCkpCiAKQEAgLTExNSw1ICsxMTksMTAgQEAKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wYWdlLmg+CiAKKy8qIHZEU08gc3VwcG9ydCAqLworI2lmZGVmIENPTkZJR19WU1lTQ0FMTAorI2RlZmluZSBfX0hBVkVfQVJDSF9HQVRFX0FSRUEKKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcGNpLmggYi9pbmNsdWRlL2FzbS1zaC9wY2kuaAppbmRleCAwYTUyM2M4Li42Y2NjOTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wY2kuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wY2kuaApAQCAtMzIsNiArMzIsMzQgQEAKICNkZWZpbmUgUENJQklPU19NSU5fSU8JCWJvYXJkX3BjaV9jaGFubmVscy0+aW9fcmVzb3VyY2UtPnN0YXJ0CiAjZGVmaW5lIFBDSUJJT1NfTUlOX01FTQkJYm9hcmRfcGNpX2NoYW5uZWxzLT5tZW1fcmVzb3VyY2UtPnN0YXJ0CiAKKy8qCisgKiBJL08gcm91dGluZSBoZWxwZXJzCisgKi8KKyNpZmRlZiBDT05GSUdfQ1BVX1NVQlRZUEVfU0g3NzgwCisjZGVmaW5lIFBDSV9JT19BUkVBCQkweEZFNDAwMDAwCisjZGVmaW5lIFBDSV9JT19TSVpFCQkweDAwNDAwMDAwCisjZWxzZQorI2RlZmluZSBQQ0lfSU9fQVJFQQkJMHhGRTI0MDAwMAorI2RlZmluZSBQQ0lfSU9fU0laRQkJMFgwMDA0MDAwMAorI2VuZGlmCisKKyNkZWZpbmUgUENJX01FTV9TSVpFCQkweDAxMDAwMDAwCisKKyNkZWZpbmUgU0g0X1BDSUlPQlJfTUFTSwkweEZGRkMwMDAwCisjZGVmaW5lIHBjaV9pb2FkZHIoYWRkcikJKFBDSV9JT19BUkVBICsgKGFkZHIgJiB+U0g0X1BDSUlPQlJfTUFTSykpCisKKyNpZiBkZWZpbmVkKENPTkZJR19QQ0kpCisjZGVmaW5lIGlzX3BjaV9pb2FkZHIocG9ydCkJCVwKKwkoKChwb3J0KSA+PSBQQ0lCSU9TX01JTl9JTykgJiYJXAorCSAoKHBvcnQpIDwgKFBDSUJJT1NfTUlOX0lPICsgUENJX0lPX1NJWkUpKSkKKyNkZWZpbmUgaXNfcGNpX21lbWFkZHIocG9ydCkJCVwKKwkoKChwb3J0KSA+PSBQQ0lCSU9TX01JTl9NRU0pICYmCVwKKwkgKChwb3J0KSA8IChQQ0lCSU9TX01JTl9NRU0gKyBQQ0lfTUVNX1NJWkUpKSkKKyNlbHNlCisjZGVmaW5lIGlzX3BjaV9pb2FkZHIocG9ydCkJKDApCisjZGVmaW5lIGlzX3BjaV9tZW1hZGRyKHBvcnQpCSgwKQorI2VuZGlmCisKIHN0cnVjdCBwY2lfZGV2OwogCiBleHRlcm4gdm9pZCBwY2liaW9zX3NldF9tYXN0ZXIoc3RydWN0IHBjaV9kZXYgKmRldik7CkBAIC04NywxNSArMTE1LDYgQEAKICAqLwogI2RlZmluZSBwY2lfZGFjX2RtYV9zdXBwb3J0ZWQocGNpX2RldiwgbWFzaykgKDApCiAKLS8qIFRoZXNlIG1hY3JvcyBzaG91bGQgYmUgdXNlZCBhZnRlciBhIHBjaV9tYXBfc2cgY2FsbCBoYXMgYmVlbiBkb25lCi0gKiB0byBnZXQgYnVzIGFkZHJlc3NlcyBvZiBlYWNoIG9mIHRoZSBTRyBlbnRyaWVzIGFuZCB0aGVpciBsZW5ndGhzLgotICogWW91IHNob3VsZCBvbmx5IHdvcmsgd2l0aCB0aGUgbnVtYmVyIG9mIHNnIGVudHJpZXMgcGNpX21hcF9zZwotICogcmV0dXJucywgb3IgYWx0ZXJuYXRpdmVseSBzdG9wIG9uIHRoZSBmaXJzdCBzZ19kbWFfbGVuKHNnKSB3aGljaAotICogaXMgMC4KLSAqLwotI2RlZmluZSBzZ19kbWFfYWRkcmVzcyhzZykJKHZpcnRfdG9fYnVzKChzZyktPmRtYV9hZGRyZXNzKSkKLSNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCi0KICNpZmRlZiBDT05GSUdfUENJCiBzdGF0aWMgaW5saW5lIHZvaWQgcGNpX2RtYV9idXJzdF9hZHZpY2Uoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkJCWVudW0gcGNpX2RtYV9idXJzdF9zdHJhdGVneSAqc3RyYXQsCkBAIC0xMDcsMTEgKzEyNiwxMiBAQAogI2VuZGlmCiAKIC8qIEJvYXJkLXNwZWNpZmljIGZpeHVwIHJvdXRpbmVzLiAqLwotZXh0ZXJuIHZvaWQgcGNpYmlvc19maXh1cCh2b2lkKTsKLWV4dGVybiB2b2lkIHBjaWJpb3NfZml4dXBfaXJxcyh2b2lkKTsKK3ZvaWQgcGNpYmlvc19maXh1cCh2b2lkKTsKK2ludCBwY2liaW9zX2luaXRfcGxhdGZvcm0odm9pZCk7CitpbnQgcGNpYmlvc19tYXBfcGxhdGZvcm1faXJxKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHU4IHNsb3QsIHU4IHBpbik7CiAKICNpZmRlZiBDT05GSUdfUENJX0FVVE8KLWV4dGVybiBpbnQgcGNpYXV0b19hc3NpZ25fcmVzb3VyY2VzKGludCBidXNubywgc3RydWN0IHBjaV9jaGFubmVsICpob3NlKTsKK2ludCBwY2lhdXRvX2Fzc2lnbl9yZXNvdXJjZXMoaW50IGJ1c25vLCBzdHJ1Y3QgcGNpX2NoYW5uZWwgKmhvc2UpOwogI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwY2liaW9zX2FkZF9wbGF0Zm9ybV9lbnRyaWVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wZ2FsbG9jLmggYi9pbmNsdWRlL2FzbS1zaC9wZ2FsbG9jLmgKaW5kZXggZjRmMjMzZi4uZTg0MTQ2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcGdhbGxvYy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3BnYWxsb2MuaApAQCAtMSwxNSArMSw2IEBACiAjaWZuZGVmIF9fQVNNX1NIX1BHQUxMT0NfSAogI2RlZmluZSBfX0FTTV9TSF9QR0FMTE9DX0gKIAotI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvbW0uaD4KLQotI2RlZmluZSBwZ2RfcXVpY2tsaXN0ICgodW5zaWduZWQgbG9uZyAqKTApCi0jZGVmaW5lIHBtZF9xdWlja2xpc3QgKCh1bnNpZ25lZCBsb25nICopMCkKLSNkZWZpbmUgcHRlX3F1aWNrbGlzdCAoKHVuc2lnbmVkIGxvbmcgKikwKQotI2RlZmluZSBwZ3RhYmxlX2NhY2hlX3NpemUgMEwKLQogI2RlZmluZSBwbWRfcG9wdWxhdGVfa2VybmVsKG1tLCBwbWQsIHB0ZSkgXAogCQlzZXRfcG1kKHBtZCwgX19wbWQoX1BBR0VfVEFCTEUgKyBfX3BhKHB0ZSkpKQogCkBAIC0yNCwzOCArMTUsMjQgQEAKICAqLwogc3RhdGljIGlubGluZSBwZ2RfdCAqcGdkX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewotCXVuc2lnbmVkIGludCBwZ2Rfc2l6ZSA9IChVU0VSX1BUUlNfUEVSX1BHRCAqIHNpemVvZihwZ2RfdCkpOwotCXBnZF90ICpwZ2QgPSAocGdkX3QgKilrbWFsbG9jKHBnZF9zaXplLCBHRlBfS0VSTkVMKTsKLQotCWlmIChwZ2QpCi0JCW1lbXNldChwZ2QsIDAsIHBnZF9zaXplKTsKLQotCXJldHVybiBwZ2Q7CisJcmV0dXJuIChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTyk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfZnJlZShwZ2RfdCAqcGdkKQogewotCWtmcmVlKHBnZCk7CisJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKXBnZCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmVfa2VybmVsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlwdGVfdCAqcHRlOwotCi0JcHRlID0gKHB0ZV90ICopIF9fZ2V0X2ZyZWVfcGFnZShHRlBfS0VSTkVMIHwgX19HRlBfUkVQRUFUIHwgX19HRlBfWkVSTyk7Ci0KLQlyZXR1cm4gcHRlOworCXJldHVybiAocHRlX3QgKilfX2dldF9mcmVlX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8pOwogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdlICpwdGVfYWxsb2Nfb25lKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogCQkJCQkgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewotCXN0cnVjdCBwYWdlICpwdGU7Ci0KLSAgIAlwdGUgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMfF9fR0ZQX1JFUEVBVHxfX0dGUF9aRVJPLCAwKTsKLQotCXJldHVybiBwdGU7CisJcmV0dXJuIGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1JFUEVBVCB8IF9fR0ZQX1pFUk8pOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcHRlX2ZyZWVfa2VybmVsKHB0ZV90ICpwdGUpCkBAIC03NSwxNCArNTIsOCBAQAogICogaW5zaWRlIHRoZSBwZ2QsIHNvIGhhcyBubyBleHRyYSBtZW1vcnkgYXNzb2NpYXRlZCB3aXRoIGl0LgogICovCiAKLSNkZWZpbmUgcG1kX2FsbG9jX29uZShtbSwgYWRkcikJCSh7IEJVRygpOyAoKHBtZF90ICopMik7IH0pCiAjZGVmaW5lIHBtZF9mcmVlKHgpCQkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBfX3BtZF9mcmVlX3RsYih0bGIseCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSkJQlVHKCkKICNkZWZpbmUgY2hlY2tfcGd0X2NhY2hlKCkJCWRvIHsgfSB3aGlsZSAoMCkKIAotI2lmZGVmIENPTkZJR19DUFVfU0g0Ci0jZGVmaW5lIFBHX21hcHBlZAkJCVBHX2FyY2hfMQotI2VuZGlmCi0KICNlbmRpZiAvKiBfX0FTTV9TSF9QR0FMTE9DX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaCBiL2luY2x1ZGUvYXNtLXNoL3BndGFibGUuaAppbmRleCA0MGQ0MWE3Li4yYzg2ODJhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wZ3RhYmxlLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcGd0YWJsZS5oCkBAIC0xLDQyICsxLDQyIEBACisvKgorICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBmdW5jdGlvbnMgYW5kIGRlZmluZXMgbmVjZXNzYXJ5IHRvIG1vZGlmeSBhbmQKKyAqIHVzZSB0aGUgU3VwZXJIIHBhZ2UgdGFibGUgdHJlZS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTmlpYmUgWXV0YWthCisgKiBDb3B5cmlnaHQgKEMpIDIwMDIgLSAyMDA1IFBhdWwgTXVuZHQKKyAqCisgKiBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsCisgKiBQdWJsaWMgTGljZW5zZS4gIFNlZSB0aGUgZmlsZSAiQ09QWUlORyIgaW4gdGhlIG1haW4gZGlyZWN0b3J5IG9mIHRoaXMKKyAqIGFyY2hpdmUgZm9yIG1vcmUgZGV0YWlscy4KKyAqLwogI2lmbmRlZiBfX0FTTV9TSF9QR1RBQkxFX0gKICNkZWZpbmUgX19BU01fU0hfUEdUQUJMRV9ICiAKLSNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KIAotLyoKLSAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKLSAqIENvcHlyaWdodCAoQykgMjAwMiwgMjAwMywgMjAwNCBQYXVsIE11bmR0Ci0gKi8KKyNkZWZpbmUgUFRSU19QRVJfUEdECQkxMDI0CiAKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS0ybGV2ZWwuaD4KLQotLyoKLSAqIFRoaXMgZmlsZSBjb250YWlucyB0aGUgZnVuY3Rpb25zIGFuZCBkZWZpbmVzIG5lY2Vzc2FyeSB0byBtb2RpZnkgYW5kIHVzZQotICogdGhlIFN1cGVySCBwYWdlIHRhYmxlIHRyZWUuCi0gKi8KICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hZGRyc3BhY2UuaD4KICNpbmNsdWRlIDxhc20vZml4bWFwLmg+Ci0jaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgogCiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTsKIGV4dGVybiB2b2lkIHBhZ2luZ19pbml0KHZvaWQpOwogCiAvKgotICogQmFzaWNhbGx5IHdlIGhhdmUgdGhlIHNhbWUgdHdvLWxldmVsICh3aGljaCBpcyB0aGUgbG9naWNhbCB0aHJlZSBsZXZlbAotICogTGludXggcGFnZSB0YWJsZSBsYXlvdXQgZm9sZGVkKSBwYWdlIHRhYmxlcyBhcyB0aGUgaTM4Ni4KLSAqLwotCi0vKgogICogWkVST19QQUdFIGlzIGEgZ2xvYmFsIHNoYXJlZCBwYWdlIHRoYXQgaXMgYWx3YXlzIHplcm86IHVzZWQKICAqIGZvciB6ZXJvLW1hcHBlZCBtZW1vcnkgYXJlYXMgZXRjLi4KICAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlWzEwMjRdOworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZW1wdHlfemVyb19wYWdlW1BBR0VfU0laRSAvIHNpemVvZih1bnNpZ25lZCBsb25nKV07CiAjZGVmaW5lIFpFUk9fUEFHRSh2YWRkcikgKHZpcnRfdG9fcGFnZShlbXB0eV96ZXJvX3BhZ2UpKQogCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCisvKiB0cmFkaXRpb25hbCB0d28tbGV2ZWwgcGFnaW5nIHN0cnVjdHVyZSAqLworI2RlZmluZSBQR0RJUl9TSElGVAkyMgorI2RlZmluZSBQVFJTX1BFUl9QTUQJMQorI2RlZmluZSBQVFJTX1BFUl9QVEUJMTAyNAogI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKICNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCiAjZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKQEAgLTQ3LDcgKzQ3LDYgQEAKIAogI2RlZmluZSBQVEVfUEhZU19NQVNLCTB4MWZmZmYwMDAKIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCiAgKiBGaXJzdCAxTUIgbWFwIGlzIHVzZWQgYnkgZml4ZWQgcHVycG9zZS4KICAqIEN1cnJlbnRseSBvbmx5IDQtZW50eSAoMTZrQikgaXMgdXNlZCAoc2VlIGFyY2gvc2gvbW0vY2FjaGUuYykKQEAgLTU1LDIwICs1NCw0MSBAQAogI2RlZmluZSBWTUFMTE9DX1NUQVJUCShQM1NFRysweDAwMTAwMDAwKQogI2RlZmluZSBWTUFMTE9DX0VORAkoRklYQUREUl9TVEFSVC0yKlBBR0VfU0laRSkKIAotI2RlZmluZQlfUEFHRV9XVAkweDAwMSAgLyogV1QtYml0IG9uIFNILTQsIDAgb24gU0gtMyAqLwotI2RlZmluZSBfUEFHRV9IV19TSEFSRUQJMHgwMDIgIC8qIFNILWJpdCAgOiBwYWdlIGlzIHNoYXJlZCBhbW9uZyBwcm9jZXNzZXMgKi8KLSNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDQgIC8qIEQtYml0ICAgOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfQ0FDSEFCTEUJMHgwMDggIC8qIEMtYml0ICAgOiBjYWNoYWJsZSAqLwotI2RlZmluZSBfUEFHRV9TWjAJMHgwMTAgIC8qIFNaMC1iaXQgOiBTaXplIG9mIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHgwMjAgIC8qIFBSMC1iaXQgOiB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9VU0VSCTB4MDQwICAvKiBQUjEtYml0IDogdXNlciBzcGFjZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9TWjEJMHgwODAgIC8qIFNaMS1iaXQgOiBTaXplIG9mIHBhZ2UgKG9uIFNILTQpICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgxMDAgIC8qIFYtYml0ICAgOiBwYWdlIGlzIHZhbGlkICovCi0jZGVmaW5lIF9QQUdFX1BST1ROT05FCTB4MjAwICAvKiBzb2Z0d2FyZTogaWYgbm90IHByZXNlbnQgICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VEIAkweDQwMCAgLyogc29mdHdhcmU6IHBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9VMF9TSEFSRUQgMHg4MDAgIC8qIHNvZnR3YXJlOiBwYWdlIGlzIHNoYXJlZCBpbiB1c2VyIHNwYWNlICovCi0KLSNkZWZpbmUJX1BBR0VfRklMRQlfUEFHRV9XVCAgLyogc29mdHdhcmU6IHBhZ2VjYWNoZSBvciBzd2FwPyAqLworLyoKKyAqIExpbnV4IFBURUwgZW5jb2RpbmcuCisgKgorICogSGFyZHdhcmUgYW5kIHNvZnR3YXJlIGJpdCBkZWZpbml0aW9ucyBmb3IgdGhlIFBURUwgdmFsdWU6CisgKgorICogLSBCaXRzIDAgYW5kIDcgYXJlIHJlc2VydmVkIG9uIFNILTMgKF9QQUdFX1dUIGFuZCBfUEFHRV9TWjEgb24gU0gtNCkuCisgKgorICogLSBCaXQgMSBpcyB0aGUgU0gtYml0LCBidXQgaXMgdW51c2VkIG9uIFNILTMgZHVlIHRvIGFuIE1NVSBidWcgKHRoZQorICogICBoYXJkd2FyZSBQVEVMIHZhbHVlIGNhbid0IGhhdmUgdGhlIFNILWJpdCBzZXQgd2hlbiBNTVVDUi5JWCBpcyBzZXQsCisgKiAgIHdoaWNoIGlzIHRoZSBkZWZhdWx0IGluIGNwdS1zaDMvbW11X2NvbnRleHQuaDpNTVVfQ09OVFJPTF9JTklUKS4KKyAqCisgKiAgIEluIG9yZGVyIHRvIGtlZXAgdGhpcyByZWxhdGl2ZWx5IGNsZWFuLCBkbyBub3QgdXNlIHRoZXNlIGZvciBkZWZpbmluZworICogICBTSC0zIHNwZWNpZmljIGZsYWdzIHVudGlsIGFsbCBvZiB0aGUgb3RoZXIgdW51c2VkIGJpdHMgaGF2ZSBiZWVuCisgKiAgIGV4aGF1c3RlZC4KKyAqCisgKiAtIEJpdCA5IGlzIHJlc2VydmVkIGJ5IGV2ZXJ5b25lIGFuZCB1c2VkIGJ5IF9QQUdFX1BST1ROT05FLgorICoKKyAqIC0gQml0cyAxMCBhbmQgMTEgYXJlIGxvdyBiaXRzIG9mIHRoZSBQUE4gdGhhdCBhcmUgcmVzZXJ2ZWQgb24gPj0gNEsgcGFnZXMuCisgKiAgIEJpdCAxMCBpcyB1c2VkIGZvciBfUEFHRV9BQ0NFU1NFRCwgYml0IDExIHJlbWFpbnMgdW51c2VkLgorICoKKyAqIC0gQml0cyAzMSwgMzAsIGFuZCAyOSByZW1haW4gdW51c2VkIGJ5IGV2ZXJ5b25lIGFuZCBjYW4gYmUgdXNlZCBmb3IgZnV0dXJlCisgKiAgIHNvZnR3YXJlIGZsYWdzLCBhbHRob3VnaCBjYXJlIG11c3QgYmUgdGFrZW4gdG8gdXBkYXRlIF9QQUdFX0NMRUFSX0ZMQUdTLgorICovCisjZGVmaW5lCV9QQUdFX1dUCTB4MDAxCQkvKiBXVC1iaXQgb24gU0gtNCwgMCBvbiBTSC0zICovCisjZGVmaW5lIF9QQUdFX0hXX1NIQVJFRAkweDAwMgkJLyogU0gtYml0ICA6IHNoYXJlZCBhbW9uZyBwcm9jZXNzZXMgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDQJCS8qIEQtYml0ICAgOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfQ0FDSEFCTEUJMHgwMDgJCS8qIEMtYml0ICAgOiBjYWNoYWJsZSAqLworI2RlZmluZSBfUEFHRV9TWjAJMHgwMTAJCS8qIFNaMC1iaXQgOiBTaXplIG9mIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMjAJCS8qIFBSMC1iaXQgOiB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDQwCQkvKiBQUjEtYml0IDogdXNlciBzcGFjZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9TWjEJMHgwODAJCS8qIFNaMS1iaXQgOiBTaXplIG9mIHBhZ2UgKG9uIFNILTQpICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgxMDAJCS8qIFYtYml0ICAgOiBwYWdlIGlzIHZhbGlkICovCisjZGVmaW5lIF9QQUdFX1BST1ROT05FCTB4MjAwCQkvKiBzb2Z0d2FyZTogaWYgbm90IHByZXNlbnQgICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4NDAwCQkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJX1BBR0VfV1QJLyogc29mdHdhcmU6IHBhZ2VjYWNoZSBvciBzd2FwPyAqLwogCiAvKiBzb2Z0d2FyZTogbW92ZXMgdG8gUFRFQS5UQyAoVGltaW5nIENvbnRyb2wpICovCiAjZGVmaW5lIF9QQUdFX1BDQ19BUkVBNQkweDAwMDAwMDAwCS8qIHVzZSBCU0MgcmVnaXN0ZXJzIGZvciBhcmVhNSAqLwpAQCAtODMsMjMgKzEwMywxNyBAQAogI2RlZmluZSBfUEFHRV9QQ0NfQVRSOAkweDYwMDAwMDAwCS8qIEF0dHJpYnV0ZSBNZW1vcnkgc3BhY2UsIDggYml0IGJ1cyAqLwogI2RlZmluZSBfUEFHRV9QQ0NfQVRSMTYJMHg2MDAwMDAwMQkvKiBBdHRyaWJ1dGUgTWVtb3J5IHNwYWNlLCA2IGJpdCBidXMgKi8KIAotCi0vKiBNYXNrIHdoaWNoIGRyb3Agc29mdHdhcmUgZmxhZ3MKLSAqIFdlIGFsc28gZHJvcCBXVCBiaXQgc2luY2UgaXQgaXMgdXNlZCBmb3IgX1BBR0VfRklMRQotICogYml0IGluIHRoaXMgaW1wbGVtZW50YXRpb24uCi0gKi8KLSNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1dUIHwgX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1UwX1NIQVJFRCkKLQotI2lmIGRlZmluZWQoQ09ORklHX0NQVV9TSDMpCi0vKgotICogTU1VIG9uIFNILTMgaGFzIGJ1ZyBvbiBTSC1iaXQ6IFdlIGNhbid0IHVzZSBpdCBpZiBNTVVDUi5JWD0xLgotICogV29yayBhcm91bmQ6IEp1c3QgZHJvcCBTSC1iaXQuCi0gKi8KLSNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkoMHgxZmZmZmZmZiAmIH4oX1BBR0VfQ0xFQVJfRkxBR1MgfCBfUEFHRV9IV19TSEFSRUQpKQorLyogTWFzayB3aGljaCBkcm9wcyB1bnVzZWQgYml0cyBmcm9tIHRoZSBQVEVMIHZhbHVlICovCisjaWZkZWYgQ09ORklHX0NQVV9TSDMKKyNkZWZpbmUgX1BBR0VfQ0xFQVJfRkxBR1MJKF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQUNDRVNTRUR8IFwKKwkJCQkgX1BBR0VfRklMRQl8IF9QQUdFX1NaMQl8IFwKKwkJCQkgX1BBR0VfSFdfU0hBUkVEKQogI2Vsc2UKLSNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRFdBUkVfTUFTSwkoMHgxZmZmZmZmZiAmIH4oX1BBR0VfQ0xFQVJfRkxBR1MpKQorI2RlZmluZSBfUEFHRV9DTEVBUl9GTEFHUwkoX1BBR0VfUFJPVE5PTkUgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0ZJTEUpCiAjZW5kaWYKIAorI2RlZmluZSBfUEFHRV9GTEFHU19IQVJEV0FSRV9NQVNLCSgweDFmZmZmZmZmICYgfihfUEFHRV9DTEVBUl9GTEFHUykpCisKIC8qIEhhcmR3YXJlIGZsYWdzOiBTWjA9MSAoNGstYnl0ZSkgKi8KICNkZWZpbmUgX1BBR0VfRkxBR1NfSEFSRAlfUEFHRV9TWjAKIApAQCAtMTA5LDE1ICsxMjMsMTUgQEAKICNkZWZpbmUgX1BBR0VfU1pIVUdFCShfUEFHRV9TWjAgfCBfUEFHRV9TWjEpCiAjZW5kaWYKIAotI2RlZmluZSBfUEFHRV9TSEFSRUQJX1BBR0VfVTBfU0hBUkVECi0KICNkZWZpbmUgX1BBR0VfVEFCTEUJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQogI2RlZmluZSBfS0VSTlBHX1RBQkxFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZKQotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NBQ0hBQkxFIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9TSEFSRUQpCisjZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQVEVfTUFTSyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ0FDSEFCTEUgfCBfUEFHRV9ESVJUWSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KIAogI2lmZGVmIENPTkZJR19NTVUKICNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BST1ROT05FIHwgX1BBR0VfQ0FDSEFCTEUgfF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRkxBR1NfSEFSRCkKLSNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0NBQ0hBQkxFIHxfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1NIQVJFRCB8IF9QQUdFX0ZMQUdTX0hBUkQpCisjZGVmaW5lIFBBR0VfU0hBUkVECV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9DQUNIQUJMRSB8X1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9GTEFHU19IQVJEKQogI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1VTRVIgfCBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRkxBR1NfSEFSRCkKICNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0NBQ0hBQkxFIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9GTEFHU19IQVJEKQogI2RlZmluZSBQQUdFX0tFUk5FTAlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfCBfUEFHRV9DQUNIQUJMRSB8IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9IV19TSEFSRUQgfCBfUEFHRV9GTEFHU19IQVJEKQpAQCAtMTM3LDEyICsxNTEsMTMgQEAKICNkZWZpbmUgUEFHRV9LRVJORUxfUENDCQlfX3BncHJvdCgwKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKwogLyoKICAqIEFzIGkzODYgYW5kIE1JUFMsIFN1cGVySCBjYW4ndCBkbyBwYWdlIHByb3RlY3Rpb24gZm9yIGV4ZWN1dGUsIGFuZAogICogY29uc2lkZXJzIHRoYXQgdGhlIHNhbWUgYXMgYSByZWFkLiAgQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkKLSAqIHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uICAKKyAqIHJlYWQgcGVybWlzc2lvbnMuIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCiAgKi8KLQogI2RlZmluZSBfX1AwMDAJUEFHRV9OT05FCiAjZGVmaW5lIF9fUDAwMQlQQUdFX1JFQURPTkxZCiAjZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKQEAgLTE2MSw2ICsxNzYsMjYgQEAKICNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECiAjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRAogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisvKgorICogQ2VydGFpbiBhcmNoaXRlY3R1cmVzIG5lZWQgdG8gZG8gc3BlY2lhbCB0aGluZ3Mgd2hlbiBQVEVzCisgKiB3aXRoaW4gYSBwYWdlIHRhYmxlIGFyZSBkaXJlY3RseSBtb2RpZmllZC4gIFRodXMsIHRoZSBmb2xsb3dpbmcKKyAqIGhvb2sgaXMgbWFkZSBhdmFpbGFibGUuCisgKi8KKyNkZWZpbmUgc2V0X3B0ZShwdGVwdHIsIHB0ZXZhbCkgKCoocHRlcHRyKSA9IHB0ZXZhbCkKKyNkZWZpbmUgc2V0X3B0ZV9hdChtbSxhZGRyLHB0ZXAscHRldmFsKSBzZXRfcHRlKHB0ZXAscHRldmFsKQorCisvKgorICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsCisgKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQorICovCisjZGVmaW5lIHNldF9wbWQocG1kcHRyLCBwbWR2YWwpICgqKHBtZHB0cikgPSBwbWR2YWwpCisKKyNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgoKHgpLnB0ZSA+PiBQQUdFX1NISUZUKSkpCisjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHBmbikgPDwgUEFHRV9TSElGVCkgfCBwZ3Byb3RfdmFsKHByb3QpKQorI2RlZmluZSBwZm5fcG1kKHBmbiwgcHJvdCkJX19wbWQoKChwZm4pIDw8IFBBR0VfU0hJRlQpIHwgcGdwcm90X3ZhbChwcm90KSkKKwogI2RlZmluZSBwdGVfbm9uZSh4KQkoIXB0ZV92YWwoeCkpCiAjZGVmaW5lIHB0ZV9wcmVzZW50KHgpCShwdGVfdmFsKHgpICYgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9QUk9UTk9ORSkpCiAjZGVmaW5lIHB0ZV9jbGVhcihtbSxhZGRyLHhwKQlkbyB7IHNldF9wdGVfYXQobW0sIGFkZHIsIHhwLCBfX3B0ZSgwKSk7IH0gd2hpbGUgKDApCkBAIC0xNzEsNyArMjA2LDcgQEAKICNkZWZpbmUJcG1kX2JhZCh4KQkoKHBtZF92YWwoeCkgJiAoflBBR0VfTUFTSyAmIH5fUEFHRV9VU0VSKSkgIT0gX0tFUk5QR19UQUJMRSkKIAogI2RlZmluZSBwYWdlc190b19tYih4KQkoKHgpID4+ICgyMC1QQUdFX1NISUZUKSkKLSNkZWZpbmUgcHRlX3BhZ2UoeCkgCXBoeXNfdG9fcGFnZShwdGVfdmFsKHgpJlBURV9QSFlTX01BU0spCisjZGVmaW5lIHB0ZV9wYWdlKHgpCXBoeXNfdG9fcGFnZShwdGVfdmFsKHgpJlBURV9QSFlTX01BU0spCiAKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpIGlzIHRydWUuCkBAIC0yNDgsNiArMjgzLDExIEBACiAjZGVmaW5lIHB0ZV91bm1hcChwdGUpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHB0ZV91bm1hcF9uZXN0ZWQocHRlKQlkbyB7IH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgcHRlX0VSUk9SKGUpIFwKKwlwcmludGsoIiVzOiVkOiBiYWQgcHRlICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdGVfdmFsKGUpKQorI2RlZmluZSBwZ2RfRVJST1IoZSkgXAorCXByaW50aygiJXM6JWQ6IGJhZCBwZ2QgJTA4bHguXG4iLCBfX0ZJTEVfXywgX19MSU5FX18sIHBnZF92YWwoZSkpCisKIHN0cnVjdCB2bV9hcmVhX3N0cnVjdDsKIGV4dGVybiB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLAogCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIHB0ZV90IHB0ZSk7CkBAIC0yNzIsOCArMzEyLDYgQEAKIAogdHlwZWRlZiBwdGVfdCAqcHRlX2FkZHJfdDsKIAotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQogI2RlZmluZSBrZXJuX2FkZHJfdmFsaWQoYWRkcikJKDEpCiAKICNkZWZpbmUgaW9fcmVtYXBfcGZuX3JhbmdlKHZtYSwgdmFkZHIsIHBmbiwgc2l6ZSwgcHJvdCkJCVwKQEAgLTMwMSw1ICszMzksNSBAQAogCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZS5oPgogCisjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BBR0VfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9wbS5oIGIvaW5jbHVkZS9hc20tc2gvcG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmZkYmQ2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcG0uaApAQCAtMCwwICsxLDE3IEBACisvKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogQ29weXJpZ2h0IDIwMDYgKGMpIEFuZHJpeSBTa3VseXNoIDxhc2t1bHlzaEBnbWFpbC5jb20+CisgKgorICovCisjaWZuZGVmIF9fQVNNX1NIX1BNX0gKKyNkZWZpbmUgX19BU01fU0hfUE1fSAorCitleHRlcm4gdTggd2FrZXVwX3N0YXJ0OworZXh0ZXJuIHU4IHdha2V1cF9lbmQ7CisKK3ZvaWQgcG1fZW50ZXIodm9pZCk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcHJvY2Vzc29yLmggYi9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaAppbmRleCBlZWIwZjQ4Li40NzQ3NzM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9wcm9jZXNzb3IuaApAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vY3B1LWZlYXR1cmVzLmg+CiAKIC8qCiAgKiBEZWZhdWx0IGltcGxlbWVudGF0aW9uIG9mIG1hY3JvIHRoYXQgcmV0dXJucyBjdXJyZW50CkBAIC0zOCwyNyArMzksMzAgQEAKIAlDUFVfU0g3NjA0LAogCiAJLyogU0gtMyB0eXBlcyAqLwotCUNQVV9TSDc3MDUsIENQVV9TSDc3MDcsICBDUFVfU0g3NzA4LCBDUFVfU0g3NzA4UywgQ1BVX1NINzcwOFIsCi0JQ1BVX1NINzcwOSwgQ1BVX1NINzcwOUEsIENQVV9TSDc3MjksIENQVV9TSDczMDAsCisJQ1BVX1NINzcwNSwgQ1BVX1NINzcwNiwgQ1BVX1NINzcwNywKKwlDUFVfU0g3NzA4LCBDUFVfU0g3NzA4UywgQ1BVX1NINzcwOFIsCisJQ1BVX1NINzcwOSwgQ1BVX1NINzcwOUEsIENQVV9TSDc3MTAsCisJQ1BVX1NINzcyOSwgQ1BVX1NINzMwMCwKIAogCS8qIFNILTQgdHlwZXMgKi8KIAlDUFVfU0g3NzUwLCBDUFVfU0g3NzUwUywgQ1BVX1NINzc1MFIsIENQVV9TSDc3NTEsIENQVV9TSDc3NTFSLAogCUNQVV9TSDc3NjAsIENQVV9TVDQwUkEsIENQVV9TVDQwR1gxLCBDUFVfU0g0XzIwMiwgQ1BVX1NINF81MDEsCi0JQ1BVX1NINzMxODAsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsCisJQ1BVX1NINzMxODAsIENQVV9TSDczNDMsIENQVV9TSDc3NzAsIENQVV9TSDc3ODAsIENQVV9TSDc3ODEsCiAKIAkvKiBVbmtub3duIHN1YnR5cGUgKi8KIAlDUFVfU0hfTk9ORQogfTsKIAogc3RydWN0IHNoX2NwdWluZm8gewotCWVudW0gY3B1X3R5cGUgdHlwZTsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKIAl1bnNpZ25lZCBsb25nIGxvb3BzX3Blcl9qaWZmeTsKIAotCXN0cnVjdCBjYWNoZV9pbmZvIGljYWNoZTsKLQlzdHJ1Y3QgY2FjaGVfaW5mbyBkY2FjaGU7CisJc3RydWN0IGNhY2hlX2luZm8gaWNhY2hlOwkvKiBQcmltYXJ5IEktY2FjaGUgKi8KKwlzdHJ1Y3QgY2FjaGVfaW5mbyBkY2FjaGU7CS8qIFByaW1hcnkgRC1jYWNoZSAqLworCXN0cnVjdCBjYWNoZV9pbmZvIHNjYWNoZTsJLyogU2Vjb25kYXJ5IGNhY2hlICovCiAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotfTsKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoU01QX0NBQ0hFX0JZVEVTKSkpOwogCiBleHRlcm4gc3RydWN0IHNoX2NwdWluZm8gYm9vdF9jcHVfZGF0YTsKIApAQCAtMTI1LDE3ICsxMjksNiBAQAogCXN0cnVjdCBzaF9mcHVfc29mdF9zdHJ1Y3Qgc29mdDsKIH07CiAKLS8qCi0gKiBQcm9jZXNzb3IgZmxhZ3MKLSAqLwotCi0jZGVmaW5lIENQVV9IQVNfRlBVCQkweDAwMDEJLyogSGFyZHdhcmUgRlBVIHN1cHBvcnQgKi8KLSNkZWZpbmUgQ1BVX0hBU19QMl9GTFVTSF9CVUcJMHgwMDAyCS8qIE5lZWQgdG8gZmx1c2ggdGhlIGNhY2hlIGluIFAyIGFyZWEgKi8KLSNkZWZpbmUgQ1BVX0hBU19NTVVfUEFHRV9BU1NPQwkweDAwMDQJLyogU0gzOiBUTEIgd2F5IHNlbGVjdGlvbiBiaXQgc3VwcG9ydCAqLwotI2RlZmluZSBDUFVfSEFTX0RTUAkJMHgwMDA4CS8qIFNILURTUDogRFNQIHN1cHBvcnQgKi8KLSNkZWZpbmUgQ1BVX0hBU19QRVJGX0NPVU5URVIJMHgwMDEwCS8qIEhhcmR3YXJlIHBlcmZvcm1hbmNlIGNvdW50ZXJzICovCi0jZGVmaW5lIENQVV9IQVNfUFRFQQkJMHgwMDIwCS8qIFBURUEgcmVnaXN0ZXIgKi8KLQogc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgc3A7CiAJdW5zaWduZWQgbG9uZyBwYzsKQEAgLTE0OSw2ICsxNDIsMTAgQEAKIAl1bmlvbiBzaF9mcHVfdW5pb24gZnB1OwogfTsKIAordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgc2VnOworfSBtbV9zZWdtZW50X3Q7CisKIC8qIENvdW50IG9mIGFjdGl2ZSB0YXNrcyB3aXRoIFVCQyBzZXR0aW5ncyAqLwogZXh0ZXJuIGludCB1YmNfdXNlcmNudDsKIApAQCAtMjY2LDUgKzI2MywyNCBAQAogI2RlZmluZSBjcHVfc2xlZXAoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInNsZWVwIiA6IDogOiAibWVtb3J5IikKICNkZWZpbmUgY3B1X3JlbGF4KCkJYmFycmllcigpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19DUFVfU0gyQSkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX1NIMykgfHwgXAorICAgIGRlZmluZWQoQ09ORklHX0NQVV9TSDQpCisjZGVmaW5lIFBSRUZFVENIX1NUUklERQkJTDFfQ0FDSEVfQllURVMKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0gKKyNkZWZpbmUgQVJDSF9IQVNfUFJFRkVUQ0hXCitzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2godm9pZCAqeCkKK3sKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInByZWYgQCUwXG5cdCIgOiA6ICJyIiAoeCkgOiAibWVtb3J5Iik7Cit9CisKKyNkZWZpbmUgcHJlZmV0Y2h3KHgpCXByZWZldGNoKHgpCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19WU1lTQ0FMTAorZXh0ZXJuIGludCB2c3lzY2FsbF9pbml0KHZvaWQpOworI2Vsc2UKKyNkZWZpbmUgdnN5c2NhbGxfaW5pdCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIF9fQVNNX1NIX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwL2lkZS5oIGIvaW5jbHVkZS9hc20tc2gvcjc3ODBycC9pZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWVkNzhlCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcjc3ODBycC9pZGUuaApAQCAtMCwwICsxLDggQEAKKyNpZm5kZWYgX19BU01fU0hfUjc3ODBSUF9JREVfSAorI2RlZmluZSBfX0FTTV9TSF9SNzc4MFJQX0lERV9ICisKKy8qIE5vdGhpbmcgdG8gc2VlIGhlcmUuLiAqLworI2luY2x1ZGUgPGFzbS9tYWNoL3I3NzgwcnAuaD4KKworI2VuZGlmIC8qIF9fQVNNX1NIX1I3NzgwUlBfSURFX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcjc3ODBycC9yNzc4MHJwLmggYi9pbmNsdWRlL2FzbS1zaC9yNzc4MHJwL3I3NzgwcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTVkOWRiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvcjc3ODBycC9yNzc4MHJwLmgKQEAgLTAsMCArMSwxNzcgQEAKKyNpZm5kZWYgX19BU01fU0hfUkVORVNBU19SNzc4MFJQX0gKKyNkZWZpbmUgX19BU01fU0hfUkVORVNBU19SNzc4MFJQX0gKKworLyoKKyAqIGxpbnV4L2luY2x1ZGUvYXNtLXNoL3I3NzgwcnAuaAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCAgQXRvbSBDcmVhdGUgRW5naW5lZXJpbmcgQ28uLCBMdGQuCisgKgorICogUmVuZXNhcyBTb2x1dGlvbnMgSGlnaGxhbmRlciBSNzc4MFJQIHN1cHBvcnQKKyAqLworCisvKiBCb3ggc3BlY2lmaWMgYWRkcmVzc2VzLiAgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19TSF9SNzc4ME1QKQorI2RlZmluZSBQQV9CQ1IgICAgICAgICAgMHhhNDAwMDAwMCAgICAgIC8qIEZQR0EgKi8KKyNkZWZpbmUgUEFfSVJMTVNLICAgICAgIChQQV9CQ1IrMHgwMDAwKSAvKiBJbnRlcnJ1cHQgTWFzayBjb250cm9sICovCisjZGVmaW5lIFBBX0lSTE1PTiAgICAgICAoUEFfQkNSKzB4MDAwMikgLyogSW50ZXJydXB0IFN0YXR1cyBjb250cm9sICovCisjZGVmaW5lIFBBX0lSTFBSSTEgICAgICAoUEFfQkNSKzB4MDAwNCkgLyogSW50ZXJydXB0IFByaW9ydHkgMSAqLworI2RlZmluZSBQQV9JUkxQUkkyICAgICAgKFBBX0JDUisweDAwMDYpIC8qIEludGVycnVwdCBQcmlvcnR5IDIgKi8KKyNkZWZpbmUgUEFfSVJMUFJJMyAgICAgIChQQV9CQ1IrMHgwMDA4KSAvKiBJbnRlcnJ1cHQgUHJpb3J0eSAzICovCisjZGVmaW5lIFBBX0lSTFBSSTQgICAgICAoUEFfQkNSKzB4MDAwYSkgLyogSW50ZXJydXB0IFByaW9ydHkgNCAqLworI2RlZmluZSBQQV9SU1RDVEwgICAgICAgKFBBX0JDUisweDAwMGMpIC8qIFJlc2V0IENvbnRyb2wgKi8KKyNkZWZpbmUgUEFfUENJQkQgICAgICAgIChQQV9CQ1IrMHgwMDBlKSAvKiBQQ0kgQm9hcmQgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfUENJQ0QgICAgICAgIChQQV9CQ1IrMHgwMDEwKSAvKiBQQ0kgQ29uZWN0b3IgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRVhUR0lPICAgICAgIChQQV9CQ1IrMHgwMDE2KSAvKiBFeHRlbnNpb24gR1BJTyBDb250cm9sICovCisjZGVmaW5lIFBBX0lWRFJNT04gICAgICAoUEFfQkNSKzB4MDAxOCkgLyogaVZEUiBNb25pdGVyIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfSVZEUkNUTCAgICAgIChQQV9CQ1IrMHgwMDFhKSAvKiBpVkRSIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfT0JMRUQgICAgICAgIChQQV9CQ1IrMHgwMDFjKSAvKiBPbiBCb2FyZCBMRUQgY29udHJvbCAqLworI2RlZmluZSBQQV9PQlNXICAgICAgICAgKFBBX0JDUisweDAwMWUpIC8qIE9uIEJvYXJkIFN3aXRjaCBjb250cm9sICovCisjZGVmaW5lIFBBX0FVRElPU0VMICAgICAoUEFfQkNSKzB4MDAyMCkgLyogU291bmQgSW50ZXJmYWNlIFNlbGVjdCBjb250cm9sICovCisjZGVmaW5lIFBBX0VYVFBMUiAgICAgICAoUEFfQkNSKzB4MDAxZSkgLyogRXh0ZW50aW9uIFBpbiBQb2xhcml0eSBjb250cm9sICovCisjZGVmaW5lIFBBX1RQQ1RMICAgICAgICAoUEFfQkNSKzB4MDEwMCkgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVFBEQ0tDVEwgICAgIChQQV9CQ1IrMHgwMTAyKSAvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1RQQ1RMQ0xSICAgICAoUEFfQkNSKzB4MDEwNCkgLyogVG91Y2ggUGFuZWwgQWNjZXNzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVFBYUE9TICAgICAgIChQQV9CQ1IrMHgwMTA2KSAvKiBUb3VjaCBQYW5lbCBYIHBvc2l0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVFBZUE9TICAgICAgIChQQV9CQ1IrMHgwMTA4KSAvKiBUb3VjaCBQYW5lbCBZIHBvc2l0aW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREJTVyAgICAgICAgIChQQV9CQ1IrMHgwMjAwKSAvKiBEZWJ1ZyBCb2FyZCBTd2l0Y2ggY29udHJvbCAqLworI2RlZmluZSBQQV9DRkNUTCAgICAgICAgKFBBX0JDUisweDAzMDApIC8qIENGIFRpbWluZyBjb250cm9sICovCisjZGVmaW5lIFBBX0NGUE9XICAgICAgICAoUEFfQkNSKzB4MDMwMikgLyogQ0YgUG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQQV9DRkNESU5UQ0xSICAgKFBBX0JDUisweDAzMDQpIC8qIENGIEluc2VydCBJbnRlcnJ1cHQgY2xlYXIgKi8KKyNkZWZpbmUgUEFfU0NTTVIwICAgICAgIChQQV9CQ1IrMHgwNDAwKSAvKiBTQ0lGMCBTZXJpYWwgbW9kZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDQlJSMCAgICAgICAoUEFfQkNSKzB4MDQwNCkgLyogU0NJRjAgQml0IHJhdGUgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NDUjAgICAgICAgKFBBX0JDUisweDA0MDgpIC8qIFNDSUYwIFNlcmlhbCBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlREUjAgICAgICAoUEFfQkNSKzB4MDQwYykgLyogU0NJRjAgU2VuZCBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGU1IwICAgICAgIChQQV9CQ1IrMHgwNDEwKSAvKiBTQ0lGMCBTZXJpYWwgc3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGUkRSMCAgICAgIChQQV9CQ1IrMHgwNDE0KSAvKiBTQ0lGMCBSZWNlaXZlIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZDUjAgICAgICAgKFBBX0JDUisweDA0MTgpIC8qIFNDSUYwIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1RGRFIwICAgICAgKFBBX0JDUisweDA0MWMpIC8qIFNDSUYwIFNlbmQgRklGTyBkYXRhIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NSRkRSMCAgICAgIChQQV9CQ1IrMHgwNDIwKSAvKiBTQ0lGMCBSZWNlaXZlIEZJRk8gZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDU1BUUjAgICAgICAoUEFfQkNSKzB4MDQyNCkgLyogU0NJRjAgU2VyaWFsIFBvcnQgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0xTUjAgICAgICAgKFBBX0JDUisweDA0MjgpIC8qIFNDSUYwIExpbmUgU3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NSRVIwICAgICAgIChQQV9CQ1IrMHgwNDJjKSAvKiBTQ0lGMCBTZXJpYWwgRXJyb3IgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NNUjEgICAgICAgKFBBX0JDUisweDA1MDApIC8qIFNDSUYxIFNlcmlhbCBtb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NCUlIxICAgICAgIChQQV9CQ1IrMHgwNTA0KSAvKiBTQ0lGMSBCaXQgcmF0ZSBjb250cm9sICovCisjZGVmaW5lIFBBX1NDU0NSMSAgICAgICAoUEFfQkNSKzB4MDUwOCkgLyogU0NJRjEgU2VyaWFsIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGVERSMSAgICAgIChQQV9CQ1IrMHgwNTBjKSAvKiBTQ0lGMSBTZW5kIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZTUjEgICAgICAgKFBBX0JDUisweDA1MTApIC8qIFNDSUYxIFNlcmlhbCBzdGF0dXMgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZSRFIxICAgICAgKFBBX0JDUisweDA1MTQpIC8qIFNDSUYxIFJlY2VpdmUgRklGTyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRkNSMSAgICAgICAoUEFfQkNSKzB4MDUxOCkgLyogU0NJRjEgRklGTyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDVEZEUjEgICAgICAoUEFfQkNSKzB4MDUxYykgLyogU0NJRjEgU2VuZCBGSUZPIGRhdGEgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1JGRFIxICAgICAgKFBBX0JDUisweDA1MjApIC8qIFNDSUYxIFJlY2VpdmUgRklGTyBkYXRhIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NTUFRSMSAgICAgIChQQV9CQ1IrMHgwNTI0KSAvKiBTQ0lGMSBTZXJpYWwgUG9ydCBjb250cm9sICovCisjZGVmaW5lIFBBX1NDTFNSMSAgICAgICAoUEFfQkNSKzB4MDUyOCkgLyogU0NJRjEgTGluZSBTdGF0dXMgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1JFUjEgICAgICAgKFBBX0JDUisweDA1MmMpIC8qIFNDSUYxIFNlcmlhbCBFcnJvciBjb250cm9sICovCisjZGVmaW5lIFBBX0lDQ1IgICAgICAgICAoUEFfQkNSKzB4MDYwMCkgLyogU2VyaWFsIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0FSICAgICAgICAgIChQQV9CQ1IrMHgwNjAyKSAvKiBTZXJpYWwgU2xhdmUgY29udHJvbCAqLworI2RlZmluZSBQQV9NRFIgICAgICAgICAgKFBBX0JDUisweDA2MDQpIC8qIFNlcmlhbCBNb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfQURSMSAgICAgICAgIChQQV9CQ1IrMHgwNjA2KSAvKiBTZXJpYWwgQWRkcmVzczEgY29udHJvbCAqLworI2RlZmluZSBQQV9EQVIxICAgICAgICAgKFBBX0JDUisweDA2NDYpIC8qIFNlcmlhbCBEYXRhMSBjb250cm9sICovCisjZGVmaW5lIFBBX1ZFUlJFRyAgICAgICAoUEFfQkNSKzB4MDcwMCkgLyogRlBHQSBWZXJzaW9uIFJlZ2lzdGVyICovCisjZGVmaW5lIFBBX1BPRkYgICAgICAgICAoUEFfQkNSKzB4MDgwMCkgLyogU3lzdGVtIFBvd2VyIE9mZiBjb250cm9sICovCisjZGVmaW5lIFBBX1BNUiAgICAgICAgICAoUEFfQkNSKzB4MDkwMCkgLyogICovCisKKyNkZWZpbmUgUEFfQVg4ODc5NkwgICAgIDB4YTQxMDA0MDAgICAgICAvKiBBWDg4Nzk2TCBBcmVhICovCisjZGVmaW5lIFBBX1NDMTYwMkJTTEIgICAweGE2MDAwMDAwICAgICAgLyogU0MxNjAyQlNMQiBBcmVhICovCisjZGVmaW5lIFBBX0FSRUE1X0lPICAgICAweGI0MDAwMDAwICAgICAgLyogQXJlYSA1IElPIE1lbW9yeSAqLworI2RlZmluZSBQQV9BUkVBNl9JTyAgICAgMHhiODAwMDAwMCAgICAgIC8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KKyNkZWZpbmUgUEFfSURFX09GRlNFVCAgIDB4MWYwICAgICAgICAgICAvKiBDRiBJREUgT2Zmc2V0ICovCisjZGVmaW5lIEFYODg3OTZMX0lPX0JBU0UgICAgICAgIDB4MTAwMCAgLyogQVg4ODc5NkwgSU8gQmFzZSBBZGRyZXNzICovCisKKyNkZWZpbmUgSVJMQ05UUjEgICAgICAgIChQQV9CQ1IgKyAwKSAgICAvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjEgKi8KKworI2RlZmluZSBJUlFfUENJU0xPVDEgICAgNjUgICAgICAgICAgICAgIC8qIFBDSSBTbG90ICMxIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVDIgICAgNjYgICAgICAgICAgICAgIC8qIFBDSSBTbG90ICMyIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVDMgICAgNjcgICAgICAgICAgICAgIC8qIFBDSSBTbG90ICMzIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVDQgICAgNjggICAgICAgICAgICAgIC8qIFBDSSBTbG90ICM0IElSUSAqLworI2RlZmluZSBJUlFfQ0ZDQVJEICAgICAgMSAgICAgICAgICAgICAgIC8qIENGIENhcmQgSVJRICovCisvLyAjZGVmaW5lIElSUV9DRklOU1QgICAwICAgICAgICAgICAgICAgLyogQ0YgQ2FyZCBJbnNlcnQgSVJRICovCisjZGVmaW5lIElSUV9UUCAgICAgICAgICAyICAgICAgICAgICAgICAgLyogVG91Y2ggUGFuZWwgSVJRICovCisjZGVmaW5lIElSUV9TQ0kxICAgICAgICAzICAgICAgICAgICAgICAgLyogU0NJMSBJUlEgKi8KKyNkZWZpbmUgSVJRX1NDSTAgICAgICAgIDQgICAgICAgICAgICAgICAvKiBTQ0kwIElSUSAqLworI2RlZmluZSBJUlFfMlNFUklBTCAgICAgNSAgICAgICAgICAgICAgIC8qIFNlcmlhbCBJUlEgKi8KKyNkZWZpbmUgSVJRX1JUQyAgICAgICAgIDYgICAgICAgICAgICAgICAvKiBSVEMgQSAvIEIgSVJRICovCisjZGVmaW5lIElSUV9FWFRFTlRJT042ICA3ICAgICAgICAgICAgICAgLyogRVhUNm4gSVJRICovCisjZGVmaW5lIElSUV9FWFRFTlRJT041ICA4ICAgICAgICAgICAgICAgLyogRVhUNW4gSVJRICovCisjZGVmaW5lIElSUV9FWFRFTlRJT040ICA5ICAgICAgICAgICAgICAgLyogRVhUNG4gSVJRICovCisjZGVmaW5lIElSUV9FWFRFTlRJT04yICAxMCAgICAgICAgICAgICAgLyogRVhUMm4gSVJRICovCisjZGVmaW5lIElSUV9FWFRFTlRJT04xICAxMSAgICAgICAgICAgICAgLyogRVhUMW4gSVJRICovCisjZGVmaW5lIElSUV9PTkVUSCAgICAgICAxMyAgICAgICAgICAgICAgLyogT24gYm9hcmQgRXRoZXJuZXQgSVJRICovCisjZGVmaW5lIElSUV9QU1cgICAgICAgICAxNCAgICAgICAgICAgICAgLyogUHVzaCBTd2l0Y2ggSVJRICovCisKKyNlbHNlIC8qIFI3NzgwUlAgKi8KKworI2RlZmluZSBQQV9CQ1IJCTB4YTUwMDAwMDAJLyogRlBHQSAqLworI2RlZmluZQlQQV9JUkxNU0sJKFBBX0JDUisweDAwMDApCS8qIEludGVycnVwdCBNYXNrIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfSVJMTU9OCShQQV9CQ1IrMHgwMDAyKQkvKiBJbnRlcnJ1cHQgU3RhdHVzIGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfU0RQT1cJKFBBX0JDUisweDAwMDQpCS8qIFNEIFBvd2VyIGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfUlNUQ1RMCShQQV9CQ1IrMHgwMDA2KQkvKiBEZXZpY2UgUmVzZXQgY29udHJvbCAqLworI2RlZmluZQlQQV9QQ0lCRAkoUEFfQkNSKzB4MDAwOCkJLyogUENJIEJvYXJkIGRldGVjdCBjb250cm9sICovCisjZGVmaW5lCVBBX1BDSUNECShQQV9CQ1IrMHgwMDBhKQkvKiBQQ0kgQ29uZWN0b3IgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUJUEFfWklHSU8xCShQQV9CQ1IrMHgwMDBjKQkvKiBaaWdiZWUgSU8gY29udHJvbCAxICovCisjZGVmaW5lCVBBX1pJR0lPMgkoUEFfQkNSKzB4MDAwZSkJLyogWmlnYmVlIElPIGNvbnRyb2wgMiAqLworI2RlZmluZQlQQV9aSUdJTzMJKFBBX0JDUisweDAwMTApCS8qIFppZ2JlZSBJTyBjb250cm9sIDMgKi8KKyNkZWZpbmUJUEFfWklHSU80CShQQV9CQ1IrMHgwMDEyKQkvKiBaaWdiZWUgSU8gY29udHJvbCA0ICovCisjZGVmaW5lCVBBX0lWRFJNT04JKFBBX0JDUisweDAwMTQpCS8qIGlWRFIgTW9uaXRlciBjb250cm9sICovCisjZGVmaW5lCVBBX0lWRFJDVEwJKFBBX0JDUisweDAwMTYpCS8qIGlWRFIgY29udHJvbCAqLworI2RlZmluZSBQQV9PQkxFRAkoUEFfQkNSKzB4MDAxOCkJLyogT24gQm9hcmQgTEVEIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfT0JTVwkJKFBBX0JDUisweDAwMWEpCS8qIE9uIEJvYXJkIFN3aXRjaCBjb250cm9sICovCisjZGVmaW5lIFBBX0FVRElPU0VMCShQQV9CQ1IrMHgwMDFjKQkvKiBTb3VuZCBJbnRlcmZhY2UgU2VsZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfRVhUUExSCShQQV9CQ1IrMHgwMDFlKQkvKiBFeHRlbnRpb24gUGluIFBvbGFyaXR5IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfVFBDVEwJKFBBX0JDUisweDAxMDApCS8qIFRvdWNoIFBhbmVsIEFjY2VzcyBjb250cm9sICovCisjZGVmaW5lIFBBX1RQRENLQ1RMCShQQV9CQ1IrMHgwMTAyKQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgZGF0YSBjb250cm9sICovCisjZGVmaW5lIFBBX1RQQ1RMQ0xSCShQQV9CQ1IrMHgwMTA0KQkvKiBUb3VjaCBQYW5lbCBBY2Nlc3MgY29udHJvbCAqLworI2RlZmluZSBQQV9UUFhQT1MJKFBBX0JDUisweDAxMDYpCS8qIFRvdWNoIFBhbmVsIFggcG9zaXRpb24gY29udHJvbCAqLworI2RlZmluZSBQQV9UUFlQT1MJKFBBX0JDUisweDAxMDgpCS8qIFRvdWNoIFBhbmVsIFkgcG9zaXRpb24gY29udHJvbCAqLworI2RlZmluZSBQQV9EQkRFVAkoUEFfQkNSKzB4MDIwMCkJLyogRGVidWcgQm9hcmQgZGV0ZWN0IGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREJESVNQQ1RMCShQQV9CQ1IrMHgwMjAyKQkvKiBEZWJ1ZyBCb2FyZCBEb3QgdGltaW5nIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREJTVwkJKFBBX0JDUisweDAyMDQpCS8qIERlYnVnIEJvYXJkIFN3aXRjaCBjb250cm9sICovCisjZGVmaW5lIFBBX0NGQ1RMCShQQV9CQ1IrMHgwMzAwKQkvKiBDRiBUaW1pbmcgY29udHJvbCAqLworI2RlZmluZSBQQV9DRlBPVwkoUEFfQkNSKzB4MDMwMikJLyogQ0YgUG93ZXIgY29udHJvbCAqLworI2RlZmluZSBQQV9DRkNESU5UQ0xSCShQQV9CQ1IrMHgwMzA0KQkvKiBDRiBJbnNlcnQgSW50ZXJydXB0IGNsZWFyICovCisjZGVmaW5lIFBBX1NDU01SCShQQV9CQ1IrMHgwNDAwKQkvKiBTQ0lGIFNlcmlhbCBtb2RlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NCUlIJKFBBX0JDUisweDA0MDIpCS8qIFNDSUYgQml0IHJhdGUgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ1NDUgkoUEFfQkNSKzB4MDQwNCkJLyogU0NJRiBTZXJpYWwgY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZEVFIJKFBBX0JDUisweDA0MDYpCS8qIFNDSUYgU2VuZCBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGU1IJKFBBX0JDUisweDA0MDgpCS8qIFNDSUYgU2VyaWFsIHN0YXR1cyBjb250cm9sICovCisjZGVmaW5lIFBBX1NDRlJEUgkoUEFfQkNSKzB4MDQwYSkJLyogU0NJRiBSZWNlaXZlIEZJRk8gY29udHJvbCAqLworI2RlZmluZSBQQV9TQ0ZDUgkoUEFfQkNSKzB4MDQwYykJLyogU0NJRiBGSUZPIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NGRFIJKFBBX0JDUisweDA0MGUpCS8qIFNDSUYgRklGTyBkYXRhIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0NMU1IJKFBBX0JDUisweDA0MTIpCS8qIFNDSUYgTGluZSBTdGF0dXMgY29udHJvbCAqLworI2RlZmluZSBQQV9JQ0NSCQkoUEFfQkNSKzB4MDUwMCkJLyogU2VyaWFsIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfU0FSCQkoUEFfQkNSKzB4MDUwMikJLyogU2VyaWFsIFNsYXZlIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfTURSCQkoUEFfQkNSKzB4MDUwNCkJLyogU2VyaWFsIE1vZGUgY29udHJvbCAqLworI2RlZmluZSBQQV9BRFIxCQkoUEFfQkNSKzB4MDUwNikJLyogU2VyaWFsIEFkZHJlc3MxIGNvbnRyb2wgKi8KKyNkZWZpbmUgUEFfREFSMQkJKFBBX0JDUisweDA1NDYpCS8qIFNlcmlhbCBEYXRhMSBjb250cm9sICovCisjZGVmaW5lIFBBX1ZFUlJFRwkoUEFfQkNSKzB4MDYwMCkJLyogRlBHQSBWZXJzaW9uIFJlZ2lzdGVyICovCisKKyNkZWZpbmUgUEFfQVg4ODc5NkwJMHhhNTgwMDQwMAkvKiBBWDg4Nzk2TCBBcmVhICovCisjZGVmaW5lIFBBX1NDMTYwMkJTTEIJMHhhNjAwMDAwMAkvKiBTQzE2MDJCU0xCIEFyZWEgKi8KKyNkZWZpbmUgUEFfQVJFQTVfSU8JMHhiNDAwMDAwMAkvKiBBcmVhIDUgSU8gTWVtb3J5ICovCisjZGVmaW5lIFBBX0FSRUE2X0lPCTB4YjgwMDAwMDAJLyogQXJlYSA2IElPIE1lbW9yeSAqLworI2RlZmluZSBQQV9JREVfT0ZGU0VUCTB4MWYwCQkvKiBDRiBJREUgT2Zmc2V0ICovCisjZGVmaW5lIEFYODg3OTZMX0lPX0JBU0UJMHgxMDAwCS8qIEFYODg3OTZMIElPIEJhc2UgQWRkcmVzcyAqLworCisjZGVmaW5lIElSTENOVFIxCShQQV9CQ1IgKyAwKQkvKiBJbnRlcnJ1cHQgQ29udHJvbCBSZWdpc3RlcjEgKi8KKworI2RlZmluZSBJUlFfUENJU0xPVDEJMAkJLyogUENJIFNsb3QgIzEgSVJRICovCisjZGVmaW5lIElSUV9QQ0lTTE9UMgkxCQkvKiBQQ0kgU2xvdCAjMiBJUlEgKi8KKyNkZWZpbmUgSVJRX1BDSVNMT1QzCTIJCS8qIFBDSSBTbG90ICMzIElSUSAqLworI2RlZmluZSBJUlFfUENJU0xPVDQJMwkJLyogUENJIFNsb3QgIzQgSVJRICovCisjZGVmaW5lIElSUV9DRkNBUkQJNAkJLyogQ0YgQ2FyZCBJUlEgKi8KKyNkZWZpbmUgSVJRX0NGSU5TVAk1CQkvKiBDRiBDYXJkIEluc2VydCBJUlEgKi8KKyNkZWZpbmUgSVJRX002NjU5Ngk2CQkvKiBNNjY1OTYgSVJRICovCisjZGVmaW5lIElSUV9TRENBUkQJNwkJLyogU0QgQ2FyZCBJUlEgKi8KKyNkZWZpbmUgSVJRX1RVQ0hQQU5FTAk4CQkvKiBUb3VjaCBQYW5lbCBJUlEgKi8KKyNkZWZpbmUgSVJRX1NDSQkJOQkJLyogU0NJIElSUSAqLworI2RlZmluZSBJUlFfMlNFUklBTAkxMAkJLyogU2VyaWFsIElSUSAqLworI2RlZmluZQlJUlFfRVhURU5USU9OCTExCQkvKiBFWFRuIElSUSAqLworI2RlZmluZSBJUlFfT05FVEgJMTIJCS8qIE9uIGJvYXJkIEV0aGVybmV0IElSUSAqLworI2RlZmluZSBJUlFfUFNXCQkxMwkJLyogUHVzaCBTd2l0Y2ggSVJRICovCisjZGVmaW5lIElSUV9aSUdCRUUJMTQJCS8qIFppZ2diZWUgSU8gSVJRICovCisKKyNlbmRpZiAgLyogQ09ORklHX1NIX1I3NzgwTVAgKi8KKworI2RlZmluZSBfX0lPX1BSRUZJWAlyNzc4MHJwCisjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KKworI2VuZGlmICAvKiBfX0FTTV9TSF9SRU5FU0FTX1I3NzgwUlAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3J0Yy5oIGIvaW5jbHVkZS9hc20tc2gvcnRjLmgKaW5kZXggY2VhOWNkZi4uOTFhYWNjOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcnRjLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvcnRjLmgKQEAgLTEsMjkgKzEsOCBAQAogI2lmbmRlZiBfQVNNX1JUQ19ICiAjZGVmaW5lIF9BU01fUlRDX0gKLSNpZmRlZiBfX0tFUk5FTF9fCiAKLSNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgotI2luY2x1ZGUgPGFzbS9jcHUvcnRjLmg+Ci0KLWV4dGVybiB2b2lkIHNoX3J0Y19nZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWVzcGVjICp0cyk7Ci1leHRlcm4gaW50IHNoX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3QgdGltZV90IHNlY3MpOwogZXh0ZXJuIHZvaWQgKCpib2FyZF90aW1lX2luaXQpKHZvaWQpOwotZXh0ZXJuIHZvaWQgKCpydGNfZ2V0X3RpbWUpKHN0cnVjdCB0aW1lc3BlYyAqKTsKLWV4dGVybiBpbnQgKCpydGNfc2V0X3RpbWUpKGNvbnN0IHRpbWVfdCk7CitleHRlcm4gdm9pZCAoKnJ0Y19zaF9nZXRfdGltZSkoc3RydWN0IHRpbWVzcGVjICopOworZXh0ZXJuIGludCAoKnJ0Y19zaF9zZXRfdGltZSkoY29uc3QgdGltZV90KTsKIAotLyogUkNSMSBCaXRzICovCi0jZGVmaW5lIFJDUjFfQ0YJCTB4ODAJLyogQ2FycnkgRmxhZyAgICAgICAgICAgICAqLwotI2RlZmluZSBSQ1IxX0NJRQkweDEwCS8qIENhcnJ5IEludGVycnVwdCBFbmFibGUgKi8KLSNkZWZpbmUgUkNSMV9BSUUJMHgwOAkvKiBBbGFybSBJbnRlcnJ1cHQgRW5hYmxlICovCi0jZGVmaW5lIFJDUjFfQUYJCTB4MDEJLyogQWxhcm0gRmxhZyAgICAgICAgICAgICAqLwotCi0vKiBSQ1IyIEJpdHMgKi8KLSNkZWZpbmUgUkNSMl9QRUYJMHg4MAkvKiBQRXJpb2RpYyBpbnRlcnJ1cHQgRmxhZyAqLwotI2RlZmluZSBSQ1IyX1BFU01BU0sJMHg3MAkvKiBQZXJpb2RpYyBpbnRlcnJ1cHQgU2V0ICAqLwotI2RlZmluZSBSQ1IyX1JUQ0VOCTB4MDgJLyogRU5hYmxlIFJUQyAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUkNSMl9BREoJMHgwNAkvKiBBREp1c3RtZW50ICgzMC1zZWNvbmQpICAqLwotI2RlZmluZSBSQ1IyX1JFU0VUCTB4MDIJLyogUmVzZXQgYml0ICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgUkNSMl9TVEFSVAkweDAxCS8qIFN0YXJ0IGJpdCAgICAgICAgICAgICAgICovCi0KLSNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX0FTTV9SVENfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC9ydHM3NzUxcjJkLmggYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaAppbmRleCA0ZTA5YmE1Li5iMTEyYWUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3J0czc3NTFyMmQuaApAQCAtNDEsOCArNDEsNiBAQAogCiAjZGVmaW5lIFBBX0FYODg3OTZMCTB4YWEwMDA0MDAJLyogQVg4ODc5NkwgQXJlYSAqLwogI2RlZmluZSBQQV9WT1lBR0VSCTB4YWIwMDAwMDAJLyogVk9ZQUdFUiBHWCBBcmVhICovCi0jZGVmaW5lIFBBX0FSRUE1X0lPCTB4YjQwMDAwMDAJLyogQXJlYSA1IElPIE1lbW9yeSAqLwotI2RlZmluZSBQQV9BUkVBNl9JTwkweGI4MDAwMDAwCS8qIEFyZWEgNiBJTyBNZW1vcnkgKi8KICNkZWZpbmUgUEFfSURFX09GRlNFVAkweDFmMAkJLyogQ0YgSURFIE9mZnNldCAqLwogI2RlZmluZSBBWDg4Nzk2TF9JT19CQVNFCTB4MTAwMAkvKiBBWDg4Nzk2TCBJTyBCYXNlIEFkZHJlc3MgKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2NhdHRlcmxpc3QuaCBiL2luY2x1ZGUvYXNtLXNoL3NjYXR0ZXJsaXN0LmgKaW5kZXggN2I5MWRmMS4uZDE5ZTdjZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2NhdHRlcmxpc3QuaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zY2F0dGVybGlzdC5oCkBAIC0xMCw0ICsxMCwxMyBAQAogCiAjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweDFmZmZmZmZmKQogCisvKiBUaGVzZSBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQgYWZ0ZXIgYSBwY2lfbWFwX3NnIGNhbGwgaGFzIGJlZW4gZG9uZQorICogdG8gZ2V0IGJ1cyBhZGRyZXNzZXMgb2YgZWFjaCBvZiB0aGUgU0cgZW50cmllcyBhbmQgdGhlaXIgbGVuZ3Rocy4KKyAqIFlvdSBzaG91bGQgb25seSB3b3JrIHdpdGggdGhlIG51bWJlciBvZiBzZyBlbnRyaWVzIHBjaV9tYXBfc2cKKyAqIHJldHVybnMsIG9yIGFsdGVybmF0aXZlbHkgc3RvcCBvbiB0aGUgZmlyc3Qgc2dfZG1hX2xlbihzZykgd2hpY2gKKyAqIGlzIDAuCisgKi8KKyNkZWZpbmUgc2dfZG1hX2FkZHJlc3Moc2cpCSgoc2cpLT5kbWFfYWRkcmVzcykKKyNkZWZpbmUgc2dfZG1hX2xlbihzZykJCSgoc2cpLT5sZW5ndGgpCisKICNlbmRpZiAvKiAhKF9fQVNNX1NIX1NDQVRURVJMSVNUX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zY2kuaCBiL2luY2x1ZGUvYXNtLXNoL3NjaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZTczNjYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2FzbS1zaC9zY2kuaApAQCAtMCwwICsxLDM0IEBACisjaWZuZGVmIF9fQVNNX1NIX1NDSV9ICisjZGVmaW5lIF9fQVNNX1NIX1NDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9zZXJpYWxfY29yZS5oPgorCisvKgorICogR2VuZXJpYyBoZWFkZXIgZm9yIFN1cGVySCBTQ0koRikKKyAqCisgKiBEbyBub3QgcGxhY2UgU0gtc3BlY2lmaWMgcGFydHMgaW4gaGVyZSwgc2g2NCBhbmQgaDgzMDAgZGVwZW5kIG9uIHRoaXMgdG9vLgorICovCisKKy8qIE9mZnNldHMgaW50byB0aGUgc2NpX3BvcnQtPmlycXMgYXJyYXkgKi8KK2VudW0geworCVNDSXhfRVJJX0lSUSwKKwlTQ0l4X1JYSV9JUlEsCisJU0NJeF9UWElfSVJRLAorCVNDSXhfQlJJX0lSUSwKKwlTQ0l4X05SX0lSUVMsCit9OworCisvKgorICogUGxhdGZvcm0gZGV2aWNlIHNwZWNpZmljIHBsYXRmb3JtX2RhdGEgc3RydWN0CisgKi8KK3N0cnVjdCBwbGF0X3NjaV9wb3J0IHsKKwl2b2lkIF9faW9tZW0JKm1lbWJhc2U7CQkvKiBpbyBjb29raWUgKi8KKwl1bnNpZ25lZCBsb25nCW1hcGJhc2U7CQkvKiByZXNvdXJjZSBiYXNlICovCisJdW5zaWduZWQgaW50CWlycXNbU0NJeF9OUl9JUlFTXTsJLyogRVJJLCBSWEksIFRYSSwgQlJJICovCisJdW5zaWduZWQgaW50CXR5cGU7CQkJLyogU0NJIC8gU0NJRiAvIElSREEgKi8KKwl1cGZfdAkJZmxhZ3M7CQkJLyogVVBGXyogZmxhZ3MgKi8KK307CisKK2ludCBlYXJseV9zY2lfc2V0dXAoc3RydWN0IHVhcnRfcG9ydCAqcG9ydCk7CisKKyNlbmRpZiAvKiBfX0FTTV9TSF9TQ0lfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2Uvc2UuaCBiL2luY2x1ZGUvYXNtLXNoL3NlLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvc2Uvc2UuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvc2UuaAppbmRleCA3OTFjNWRhLi5hMTgzMjE1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZS9zZS5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlLmgKQEAgLTc0LDQgKzc0LDcgQEAKICNkZWZpbmUgSVJRX1NUTklDCTEwCiAjZW5kaWYKIAorI2RlZmluZSBfX0lPX1BSRUZJWAlzZQorI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CisKICNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZS9pby5oIGIvaW5jbHVkZS9hc20tc2gvc2UvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWVlYjg2Yy4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZS9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMzUgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL2lvX3NlLmgKLSAqCi0gKiBDb3B5cmlnaHQgMjAwMCBTdHVhcnQgTWVuZWZ5IChzdHVhcnQubWVuZWZ5QHN0LmNvbSkKLSAqCi0gKiBNYXkgYmUgY29waWVkIG9yIG1vZGlmaWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIGxpbnV4L0NPUFlJTkcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi0gKgotICogSU8gZnVuY3Rpb25zIGZvciBhbiBIaXRhY2hpIFNvbHV0aW9uRW5naW5lCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NIX0lPX1NFX0gKLSNkZWZpbmUgX0FTTV9TSF9JT19TRV9ICi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHNlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzZV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHZvaWQgc2Vfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgc2Vfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciBzZV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgc2Vfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNlX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNlX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2VfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1NIX0lPX1NFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9zZTczMDAuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXNoL3NlNzMwMC9zZTczMDAuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvc2U3MzAwLmgKaW5kZXggM2VjMWRlZC4uNGUyNGVkYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2U3MzAwL3NlNzMwMC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC5oCkBAIC01OCw0ICs1OCw3IEBACiAjZGVmaW5lIFBBX0xDRDEJCTB4YjgwMDAwMDAKICNkZWZpbmUgUEFfTENEMgkJMHhiODgwMDAwMAogCisjZGVmaW5lIF9fSU9fUFJFRklYCXNoNzMwMHNlCisjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KKwogI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJX1NFNzMwMF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTczMDAvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9pby5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjNmFmODU1Li4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlNzMwMC9pby5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotLyoKLSAqIGluY2x1ZGUvYXNtLXNoL3NlNzMwMC9pby5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgotICogSU8gZnVuY3Rpb25zIGZvciBTSC1Nb2JpbGUoU0g3MzAwKSBTb2x1dGlvbkVuZ2luZQotICovCi0KLSNpZm5kZWYgX0FTTV9TSF9JT183MzAwU0VfSAotI2RlZmluZSBfQVNNX1NIX0lPXzczMDBTRV9ICi0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzMwMHNlX2luYih1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNoNzMwMHNlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzaDczMDBzZV9pbmwodW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHZvaWQgc2g3MzAwc2Vfb3V0Yih1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgc2g3MzAwc2Vfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzMwMHNlX291dGwodW5zaWduZWQgaW50IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdW5zaWduZWQgY2hhciBzaDczMDBzZV9pbmJfcCh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgc2g3MzAwc2Vfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNoNzMwMHNlX2luc2IodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzMwMHNlX2luc3codW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzMwMHNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzMwMHNlX291dHNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDczMDBzZV9vdXRzdyh1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2g3MzAwc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotI2VuZGlmIC8qIF9BU01fU0hfSU9fNzMwMFNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvc2U3MzE4MC5oIGIvaW5jbHVkZS9hc20tc2gvc2U3MzE4MC5oCnNpbWlsYXJpdHkgaW5kZXggOTclCnJlbmFtZSBmcm9tIGluY2x1ZGUvYXNtLXNoL3NlNzMxODAvc2U3MzE4MC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9zZTczMTgwLmgKaW5kZXggZjViOTNlMy4uM2E0YWNiMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2U3MzE4MC9zZTczMTgwLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc2U3MzE4MC5oCkBAIC01OSw0ICs1OSw3IEBACiAjZGVmaW5lIFBBX0xDRDEJCTB4YjgwMDAwMDAKICNkZWZpbmUgUEFfTENEMgkJMHhiODgwMDAwMAogCisjZGVmaW5lIF9fSU9fUFJFRklYCXNoNzMxODBzZQorI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CisKICNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczMTgwX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzljYjFiOS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvc2U3MzE4MC9pby5oCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAzIFRha2FzaGkgS3VzdWRhIDxrdXN1ZGEtdGFrYXNoaUBoaXRhY2hpLXVsLmNvLmpwPgotICogQmFzZWQgb24gaW5jbHVkZS9hc20tc2gvc2U3MzAwL2lvLmgKLSAqCi0gKiBJTyBmdW5jdGlvbnMgZm9yIFNILU1vYmlsZTMoU0g3MzE4MCkgU29sdXRpb25FbmdpbmUKLSAqCi0gKi8KLQotI2lmbmRlZiBfQVNNX1NIX0lPXzczMTgwU0VfSAotI2RlZmluZSBfQVNNX1NIX0lPXzczMTgwU0VfSAotCi1leHRlcm4gdW5zaWduZWQgY2hhciBzaDczMTgwc2VfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgc2g3MzE4MHNlX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzaDczMTgwc2VfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3MzE4MHNlX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNoNzMxODBzZV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDczMTgwc2VfaW5zdyh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2g3MzE4MHNlX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzMxODBzZV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2g3MzE4MHNlX291dHN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDczMTgwc2Vfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotI2VuZGlmIC8qIF9BU01fU0hfSU9fNzMxODBTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZTczMTgwL3NlNzMxODAuaCBiL2luY2x1ZGUvYXNtLXNoL3NlNzM0My5oCnNpbWlsYXJpdHkgaW5kZXggNjclCmNvcHkgZnJvbSBpbmNsdWRlL2FzbS1zaC9zZTczMTgwL3NlNzMxODAuaApjb3B5IHRvIGluY2x1ZGUvYXNtLXNoL3NlNzM0My5oCmluZGV4IGY1YjkzZTMuLmU3OTE0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NlNzMxODAvc2U3MzE4MC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NlNzM0My5oCkBAIC0xLDEyICsxLDEyIEBACi0jaWZuZGVmIF9fQVNNX1NIX0hJVEFDSElfU0U3MzE4MF9ICi0jZGVmaW5lIF9fQVNNX1NIX0hJVEFDSElfU0U3MzE4MF9ICisjaWZuZGVmIF9fQVNNX1NIX0hJVEFDSElfU0U3MzQzX0gKKyNkZWZpbmUgX19BU01fU0hfSElUQUNISV9TRTczNDNfSAogCiAvKgotICogaW5jbHVkZS9hc20tc2gvc2Uvc2U3MzE4MC5oCisgKiBpbmNsdWRlL2FzbS1zaC9zZS9zZTczNDMuaAogICoKICAqIENvcHlyaWdodCAoQykgMjAwMyBUYWthc2hpIEt1c3VkYSA8a3VzdWRhLXRha2FzaGlAaGl0YWNoaS11bC5jby5qcD4KICAqCi0gKiBTSC1Nb2JpbGUgU29sdXRpb25FbmdpbmUgNzMxODAgc3VwcG9ydAorICogU0gtTW9iaWxlIFNvbHV0aW9uRW5naW5lIDczNDMgc3VwcG9ydAogICovCiAKIC8qIEJveCBzcGVjaWZpYyBhZGRyZXNzZXMuICAqLwpAQCAtNDksOSArNDksOSBAQAogI2RlZmluZSBQQV9MRUQJCTB4YjBDMDAwMDAJLyogTEVEICovCiAjZGVmaW5lIExFRF9TSElGVCAgICAgICAwCiAjZGVmaW5lIFBBX0RJUFNXCTB4YjA5MDAwMDAJLyogRGlwIHN3aXRjaCAzMSAqLwotI2RlZmluZSBQQV9FUExEX01PREVTRVQJMHhiMGEwMDAwMAkvKiBGUEdBIE1vZGUgc2V0IHJlZ2lzdGVyICovCi0jZGVmaW5lIFBBX0VQTERfU1QxCTB4YjBhODAwMDAJLyogRlBHQSBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyMSAqLwotI2RlZmluZSBQQV9FUExEX1NUMgkweGIwYWMwMDAwCS8qIEZQR0EgSW50ZXJydXB0IHN0YXR1cyByZWdpc3RlcjIgKi8KKyNkZWZpbmUgUEFfQ1BMRF9NT0RFU0VUCTB4YjE0MDAwMDQJLyogQ1BMRCBNb2RlIHNldCByZWdpc3RlciAqLworI2RlZmluZSBQQV9DUExEX1NUCTB4YjE0MDAwMDgJLyogQ1BMRCBJbnRlcnJ1cHQgc3RhdHVzIHJlZ2lzdGVyICovCisjZGVmaW5lIFBBX0NQTERfSU1TSwkweGIxNDAwMDBhCS8qIENQTEQgSW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIgKi8KIC8qIEFyZWEgNSAqLwogI2RlZmluZSBQQV9FWFQ1CQkweDE0MDAwMDAwCiAjZGVmaW5lIFBBX0VYVDVfU0laRQkweDA0MDAwMDAwCkBAIC01OSw0ICs1OSwyNCBAQAogI2RlZmluZSBQQV9MQ0QxCQkweGI4MDAwMDAwCiAjZGVmaW5lIFBBX0xDRDIJCTB4Yjg4MDAwMDAKIAotI2VuZGlmICAvKiBfX0FTTV9TSF9ISVRBQ0hJX1NFNzMxODBfSCAqLworI2RlZmluZSBfX0lPX1BSRUZJWAlzaDczNDNzZQorI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CisKKy8qIEV4dGVybmFsIE11bHRpcGxleGVkIGludGVycnVwdHMgKi8KKyNkZWZpbmUgUENfSVJRMAkJT0ZGQ0hJUF9JUlFfQkFTRQorI2RlZmluZSBQQ19JUlExCQkoUENfSVJRMCArIDEpCisjZGVmaW5lIFBDX0lSUTIJCShQQ19JUlExICsgMSkKKyNkZWZpbmUgUENfSVJRMwkJKFBDX0lSUTIgKyAxKQorCisjZGVmaW5lIEVYVF9JUlEwCShQQ19JUlEzICsgMSkKKyNkZWZpbmUgRVhUX0lSUTEJKEVYVF9JUlEwICsgMSkKKyNkZWZpbmUgRVhUX0lSUTIJKEVYVF9JUlExICsgMSkKKyNkZWZpbmUgRVhUX0lSUTMJKEVYVF9JUlEyICsgMSkKKworI2RlZmluZSBVU0JfSVJRMAkoRVhUX0lSUTMgKyAxKQorI2RlZmluZSBVU0JfSVJRMQkoVVNCX0lSUTAgKyAxKQorCisjZGVmaW5lIFVBUlRfSVJRMAkoVVNCX0lSUTEgKyAxKQorI2RlZmluZSBVQVJUX0lSUTEJKFVBUlRfSVJRMCArIDEpCisKKyNlbmRpZiAgLyogX19BU01fU0hfSElUQUNISV9TRTczNDNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2U3NzUxL3NlNzc1MS5oIGIvaW5jbHVkZS9hc20tc2gvc2U3NzUxLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvc2U3NzUxL3NlNzc1MS5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9zZTc3NTEuaAppbmRleCA3MzhlMjJiLi44OGNkMzc5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZTc3NTEvc2U3NzUxLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc2U3NzUxLmgKQEAgLTY1LDQgKzY1LDcgQEAKIAogI2RlZmluZSBJUlFfNzlDOTczCTEzCiAKKyNkZWZpbmUgX19JT19QUkVGSVgJc2g3NzUxc2UKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCiAjZW5kaWYgIC8qIF9fQVNNX1NIX0hJVEFDSElfNzc1MVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NlNzc1MS9pby5oIGIvaW5jbHVkZS9hc20tc2gvc2U3NzUxL2lvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZDhmNTcuLjAwMDAwMDAKLS0tIGEvaW5jbHVkZS9hc20tc2gvc2U3NzUxL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvaW9fNzc1MXNlLmgKLSAqCi0gKiBNb2RpZmllZCB2ZXJzaW9uIG9mIGlvX3NlLmggZm9yIHRoZSA3NzUxc2Utc3BlY2lmaWMgZnVuY3Rpb25zLgotICoKLSAqIE1heSBiZSBjb3BpZWQgb3IgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKLSAqIExpY2Vuc2UuICBTZWUgbGludXgvQ09QWUlORyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLSAqCi0gKiBJTyBmdW5jdGlvbnMgZm9yIGFuIEhpdGFjaGkgU29sdXRpb25FbmdpbmUKLSAqLwotCi0jaWZuZGVmIF9BU01fU0hfSU9fNzc1MVNFX0gKLSNkZWZpbmUgX0FTTV9TSF9JT183NzUxU0VfSAotCi1leHRlcm4gdW5zaWduZWQgY2hhciBzaDc3NTFzZV9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBzaDc3NTFzZV9pbncodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc2g3NzUxc2VfaW5sKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNoNzc1MXNlX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzc1MXNlX291dHcodW5zaWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBzaDc3NTFzZV9vdXRsKHVuc2lnbmVkIGludCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3NzUxc2VfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzc1MXNlX291dGJfcCh1bnNpZ25lZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBzaDc3NTFzZV9pbnNiKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDc3NTFzZV9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDc3NTFzZV9pbnNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDc3NTFzZV9vdXRzYih1bnNpZ25lZCBsb25nIHBvcnQsIGNvbnN0IHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2g3NzUxc2Vfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzc1MXNlX291dHNsKHVuc2lnbmVkIGxvbmcgcG9ydCwgY29uc3Qgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzc1MXNlX3JlYWRiKHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgc2g3NzUxc2VfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc2g3NzUxc2VfcmVhZGwodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIHNoNzc1MXNlX3dyaXRlYih1bnNpZ25lZCBjaGFyIGIsIHVuc2lnbmVkIGxvbmcgYWRkcik7Ci1leHRlcm4gdm9pZCBzaDc3NTFzZV93cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIHNoNzc1MXNlX3dyaXRlbCh1bnNpZ25lZCBpbnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc2g3NzUxc2VfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLSNlbmRpZiAvKiBfQVNNX1NIX0lPXzc3NTFTRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZXR1cC5oIGIvaW5jbHVkZS9hc20tc2gvc2V0dXAuaAppbmRleCBkMTlkZTdjLi4zNGNhOGE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zZXR1cC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NldHVwLmgKQEAgLTQsNSArNCw3IEBACiAKICNkZWZpbmUgQ09NTUFORF9MSU5FX1NJWkUgMjU2CiAKK2ludCBzZXR1cF9lYXJseV9wcmludGsoY2hhciAqKTsKKwogI2VuZGlmIC8qIF9TSF9TRVRVUF9IICovCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2ZwLW1hY2hpbmUuaCBiL2luY2x1ZGUvYXNtLXNoL3NmcC1tYWNoaW5lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE2Mzk5YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvYXNtLXNoL3NmcC1tYWNoaW5lLmgKQEAgLTAsMCArMSw4NiBAQAorLyogTWFjaGluZS1kZXBlbmRlbnQgc29mdHdhcmUgZmxvYXRpbmctcG9pbnQgZGVmaW5pdGlvbnMuCisgICBTdXBlckgga2VybmVsIHZlcnNpb24uCisgICBDb3B5cmlnaHQgKEMpIDE5OTcsMTk5OCwxOTk5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEdOVSBDIExpYnJhcnkuCisgICBDb250cmlidXRlZCBieSBSaWNoYXJkIEhlbmRlcnNvbiAocnRoQGN5Z251cy5jb20pLAorCQkgIEpha3ViIEplbGluZWsgKGpqQHVsdHJhLmxpbnV4LmN6KSwKKwkJICBEYXZpZCBTLiBNaWxsZXIgKGRhdmVtQHJlZGhhdC5jb20pIGFuZAorCQkgIFBldGVyIE1heWRlbGwgKHBtYXlkZWxsQGNoaWFyay5ncmVlbmVuZC5vcmcudWspLgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZQorICAgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIEdOVSBDIExpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25nIHdpdGggdGhlIEdOVSBDIExpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmCisgICBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBLiAgKi8KKworI2lmbmRlZiBfU0ZQX01BQ0hJTkVfSAorI2RlZmluZSBfU0ZQX01BQ0hJTkVfSAorCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CisKKyNkZWZpbmUgX0ZQX1dfVFlQRV9TSVpFCQkzMgorI2RlZmluZSBfRlBfV19UWVBFCQl1bnNpZ25lZCBsb25nCisjZGVmaW5lIF9GUF9XU19UWVBFCQlzaWduZWQgbG9uZworI2RlZmluZSBfRlBfSV9UWVBFCQlsb25nCisKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1MoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8xX3dpZGUoX0ZQX1dGUkFDQklUU19TLFIsWCxZLHVtdWxfcHBtbSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX0QoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF8yX3dpZGUoX0ZQX1dGUkFDQklUU19ELFIsWCxZLHVtdWxfcHBtbSkKKyNkZWZpbmUgX0ZQX01VTF9NRUFUX1EoUixYLFkpCQkJCQlcCisgIF9GUF9NVUxfTUVBVF80X3dpZGUoX0ZQX1dGUkFDQklUU19RLFIsWCxZLHVtdWxfcHBtbSkKKworI2RlZmluZSBfRlBfRElWX01FQVRfUyhSLFgsWSkJX0ZQX0RJVl9NRUFUXzFfdWRpdihTLFIsWCxZKQorI2RlZmluZSBfRlBfRElWX01FQVRfRChSLFgsWSkJX0ZQX0RJVl9NRUFUXzJfdWRpdihELFIsWCxZKQorI2RlZmluZSBfRlBfRElWX01FQVRfUShSLFgsWSkJX0ZQX0RJVl9NRUFUXzRfdWRpdihRLFIsWCxZKQorCisjZGVmaW5lIF9GUF9OQU5GUkFDX1MJCSgoX0ZQX1FOQU5CSVRfUyA8PCAxKSAtIDEpCisjZGVmaW5lIF9GUF9OQU5GUkFDX0QJCSgoX0ZQX1FOQU5CSVRfRCA8PCAxKSAtIDEpLCAtMQorI2RlZmluZSBfRlBfTkFORlJBQ19RCQkoKF9GUF9RTkFOQklUX1EgPDwgMSkgLSAxKSwgLTEsIC0xLCAtMQorI2RlZmluZSBfRlBfTkFOU0lHTl9TCQkwCisjZGVmaW5lIF9GUF9OQU5TSUdOX0QJCTAKKyNkZWZpbmUgX0ZQX05BTlNJR05fUQkJMAorCisjZGVmaW5lIF9GUF9LRUVQTkFORlJBQ1AgMQorCisvKgorICogSWYgb25lIE5hTiBpcyBzaWduYWxpbmcgYW5kIHRoZSBvdGhlciBpcyBub3QsCisgKiB3ZSBjaG9vc2UgdGhhdCBvbmUsIG90aGVyd2lzZSB3ZSBjaG9vc2UgWC4KKyAqLworI2RlZmluZSBfRlBfQ0hPT1NFTkFOKGZzLCB3YywgUiwgWCwgWSwgT1ApICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChfRlBfRlJBQ19ISUdIX1JBV18jI2ZzKFgpICYgX0ZQX1FOQU5CSVRfIyNmcykgICAgICAgICAgXAorICAgICAgICAmJiAhKF9GUF9GUkFDX0hJR0hfUkFXXyMjZnMoWSkgJiBfRlBfUU5BTkJJVF8jI2ZzKSkgICAgIFwKKyAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIFIjI19zID0gWSMjX3M7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfRlBfRlJBQ19DT1BZXyMjd2MoUixZKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgUiMjX3MgPSBYIyNfczsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9GUF9GUkFDX0NPUFlfIyN3YyhSLFgpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBSIyNfYyA9IEZQX0NMU19OQU47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKy8vI2RlZmluZSBGUF9ST1VORE1PREUJCUZQU0NSX1JNCisjZGVmaW5lIEZQX0RFTk9STV9aRVJPCQkxLypGUFNDUl9ETiovCisKKy8qIEV4Y2VwdGlvbiBmbGFncy4gKi8KKyNkZWZpbmUgRlBfRVhfSU5WQUxJRAkJKDE8PDQpCisjZGVmaW5lIEZQX0VYX0RJVlpFUk8JCSgxPDwzKQorI2RlZmluZSBGUF9FWF9PVkVSRkxPVwkJKDE8PDIpCisjZGVmaW5lIEZQX0VYX1VOREVSRkxPVwkJKDE8PDEpCisjZGVmaW5lIEZQX0VYX0lORVhBQ1QJCSgxPDwwKQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2gwMy9pby5oIGIvaW5jbHVkZS9hc20tc2gvc2gwMy9pby5oCmluZGV4IDI1NzkyZTkuLmRmM2IxODcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NoMDMvaW8uaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zaDAzL2lvLmgKQEAgLTMzLDE0ICszMyw2IEBACiAjZGVmaW5lIElSTDNfSVBSX1BPUwkwCiAjZGVmaW5lIElSTDNfUFJJT1JJVFkJNAogCi0KLWV4dGVybiB1bnNpZ25lZCBsb25nIHNoMDNfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci0KLWV4dGVybiB2b2lkIHNldHVwX3NoMDModm9pZCk7Ci1leHRlcm4gdm9pZCBpbml0X3NoMDNfSVJRKHZvaWQpOwotZXh0ZXJuIHZvaWQgaGVhcnRiZWF0X3NoMDModm9pZCk7Ci0KLWV4dGVybiB2b2lkIHNoMDNfcnRjX2dldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZhbCAqdHYpOwotZXh0ZXJuIGludCBzaDAzX3J0Y19zZXR0aW1lb2ZkYXkoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KTsKK3ZvaWQgaGVhcnRiZWF0X3NoMDModm9pZCk7CiAKICNlbmRpZiAvKiBfQVNNX1NIX0lPX1NIMDNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc2gyMDAwL3NoMjAwMC5oIGIvaW5jbHVkZS9hc20tc2gvc2gyMDAwL3NoMjAwMC5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZDU0NzMyLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvYXNtLXNoL3NoMjAwMC9zaDIwMDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDggKzAsMCBAQAotI2lmbmRlZiBfX0FTTV9TSF9TSDIwMDBfU0gyMDAwX0gKLSNkZWZpbmUgX19BU01fU0hfU0gyMDAwX1NIMjAwMF9ICi0KLS8qIGFyY2gvc2gvYm9hcmRzL3NoMjAwMC9zZXR1cC5jICovCi1leHRlcm4gaW50IHNldHVwX3NoMjAwMCh2b2lkKTsKLQotI2VuZGlmIC8qIF9fQVNNX1NIX1NIMjAwMF9TSDIwMDBfSCAqLwotCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zaG1pbi9zaG1pbi5oIGIvaW5jbHVkZS9hc20tc2gvc2htaW4vc2htaW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmJhMTM4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvc2htaW4vc2htaW4uaApAQCAtMCwwICsxLDkgQEAKKyNpZm5kZWYgX19BU01fU0hfU0hNSU5fSAorI2RlZmluZSBfX0FTTV9TSF9TSE1JTl9ICisKKyNkZWZpbmUgU0hNSU5fSU9fQkFTRSAweGIwMDAwMDAwVUwKKworI2RlZmluZSBTSE1JTl9ORV9JUlEgSVJRMl9JUlEKKyNkZWZpbmUgU0hNSU5fTkVfQkFTRSAweDMwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NobXBhcmFtLmggYi9pbmNsdWRlL2FzbS1zaC9zaG1wYXJhbS5oCmluZGV4IDBhOTU2MDQuLmJhMTc1OGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NobXBhcmFtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc2htcGFyYW0uaApAQCAtMSw4ICsxLDIyIEBACisvKgorICogaW5jbHVkZS9hc20tc2gvc2htcGFyYW0uaAorICoKKyAqIENvcHlyaWdodCAoQykgMTk5OSBOaWliZSBZdXRha2EKKyAqIENvcHlyaWdodCAoQykgMjAwNiBQYXVsIE11bmR0CisgKgorICogVGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UuICBTZWUgdGhlIGZpbGUgIkNPUFlJTkciIGluIHRoZSBtYWluIGRpcmVjdG9yeSBvZiB0aGlzIGFyY2hpdmUKKyAqIGZvciBtb3JlIGRldGFpbHMuCisgKi8KICNpZm5kZWYgX19BU01fU0hfU0hNUEFSQU1fSAogI2RlZmluZSBfX0FTTV9TSF9TSE1QQVJBTV9ICi0jaWZkZWYgX19LRVJORUxfXwogCi0jaW5jbHVkZSA8YXNtL2NwdS9zaG1wYXJhbS5oPgorLyoKKyAqIFNILTQgYW5kIFNILTMgNzcwNSBoYXZlIGFuIGFsaWFzaW5nIGRjYWNoZS4gQnVtcCB0aGlzIHVwIHRvIGEgc2Vuc2libGUgdmFsdWUKKyAqIGZvciBldmVyeW9uZSwgYW5kIHdvcmsgb3V0IHRoZSBzcGVjaWZpY3MgZnJvbSB0aGUgcHJvYmVkIGNhY2hlIGRlc2NyaXB0b3IuCisgKi8KKyNkZWZpbmUJU0hNTEJBCTB4NDAwMAkJIC8qIGF0dGFjaCBhZGRyIGEgbXVsdGlwbGUgb2YgdGhpcyAqLwogCi0jZW5kaWYgLyogX19LRVJORUxfXyAqLworI2RlZmluZSBfX0FSQ0hfRk9SQ0VfU0hNTEJBCisKICNlbmRpZiAvKiBfX0FTTV9TSF9TSE1QQVJBTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zZS9zbWMzN2M5M3guaCBiL2luY2x1ZGUvYXNtLXNoL3NtYzM3YzkzeC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9zZS9zbWMzN2M5M3guaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvc21jMzdjOTN4LmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3NtcC5oIGIvaW5jbHVkZS9hc20tc2gvc21wLmgKaW5kZXggZjU3YzRmZS4uNzFlY2RkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc21wLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc21wLmgKQEAgLTE5LDExICsxOSw2IEBACiAjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgogI2luY2x1ZGUgPGFzbS9jdXJyZW50Lmg+CiAKLWV4dGVybiBjcHVtYXNrX3QgY3B1X29ubGluZV9tYXA7Ci1leHRlcm4gY3B1bWFza190IGNwdV9wb3NzaWJsZV9tYXA7Ci0KLSNkZWZpbmUgY3B1X29ubGluZShjcHUpCQljcHVfaXNzZXQoY3B1LCBjcHVfb25saW5lX21hcCkKLQogI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKIAogLyogSSd2ZSBubyBpZGVhIHdoYXQgdGhlIHJlYWwgbWVhbmluZyBvZiB0aGlzIGlzICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oIGIvaW5jbHVkZS9hc20tc2gvc25hcGdlYXIuaApzaW1pbGFyaXR5IGluZGV4IDYyJQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci9pby5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9zbmFwZ2Vhci5oCmluZGV4IGJmYTk3YWMuLjZiNWU0ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3NuYXBnZWFyL2lvLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc25hcGdlYXIuaApAQCAtNDAsMjEgKzQwLDggQEAKICNkZWZpbmUgSVJMM19QUklPUklUWQk0CiAjZW5kaWYKIAotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc25hcGdlYXJfaW5iKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgc2hvcnQgc25hcGdlYXJfaW53KHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdW5zaWduZWQgaW50IHNuYXBnZWFyX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBzbmFwZ2Vhcl9vdXRiKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBzbmFwZ2Vhcl9vdXR3KHVuc2lnbmVkIHNob3J0IHZhbHVlLCB1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHZvaWQgc25hcGdlYXJfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHNuYXBnZWFyX2luYl9wKHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci1leHRlcm4gdm9pZCBzbmFwZ2Vhcl9vdXRiX3AodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLQotZXh0ZXJuIHZvaWQgc25hcGdlYXJfaW5zbCh1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc25hcGdlYXJfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgc25hcGdlYXJfaXNhX3BvcnQyYWRkcih1bnNpZ25lZCBsb25nIG9mZnNldCk7CisjZGVmaW5lIF9fSU9fUFJFRklYCXNuYXBnZWFyCisjaW5jbHVkZSA8YXNtL2lvX2dlbmVyaWMuaD4KIAogI2lmZGVmIENPTkZJR19TSF9TRUNVUkVFREdFNTQxMAogLyoKQEAgLTc5LDE0ICs2NiwxNCBAQAogICogRDEyICAgICAgICAtICAgICAgICAgICAgICAgICAgICAgIFJUUyBSRVNFVAogICovCiAKLSAjZGVmaW5lIFNFQ1VSRUVER0VfSU9QT1JUX0FERFIgKCh2b2xhdGlsZSBzaG9ydCAqKSAweGIwMDAwMDAwKQotIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBzZWN1cmVlZGdlNTQxMF9pb3BvcnQ7CisjZGVmaW5lIFNFQ1VSRUVER0VfSU9QT1JUX0FERFIgKCh2b2xhdGlsZSBzaG9ydCAqKSAweGIwMDAwMDAwKQorZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNlY3VyZWVkZ2U1NDEwX2lvcG9ydDsKIAotICNkZWZpbmUgU0VDVVJFRURHRV9XUklURV9JT1BPUlQodmFsLCBtYXNrKSAoKlNFQ1VSRUVER0VfSU9QT1JUX0FERFIgPSBcCi0JCSAoc2VjdXJlZWRnZTU0MTBfaW9wb3J0ID0gXAotCQkgCQkoKHNlY3VyZWVkZ2U1NDEwX2lvcG9ydCAmIH4obWFzaykpIHwgKCh2YWwpICYgKG1hc2spKSkpKQotICNkZWZpbmUgU0VDVVJFRURHRV9SRUFEX0lPUE9SVCgpIFwKLSAJCSAoKCpTRUNVUkVFREdFX0lPUE9SVF9BRERSJjB4MDgxNykgfCAoc2VjdXJlZWRnZTU0MTBfaW9wb3J0Jn4weDA4MTcpKQorI2RlZmluZSBTRUNVUkVFREdFX1dSSVRFX0lPUE9SVCh2YWwsIG1hc2spICgqU0VDVVJFRURHRV9JT1BPUlRfQUREUiA9IFwKKwkgKHNlY3VyZWVkZ2U1NDEwX2lvcG9ydCA9IFwKKwkJCSgoc2VjdXJlZWRnZTU0MTBfaW9wb3J0ICYgfihtYXNrKSkgfCAoKHZhbCkgJiAobWFzaykpKSkpCisjZGVmaW5lIFNFQ1VSRUVER0VfUkVBRF9JT1BPUlQoKSBcCisJICgoKlNFQ1VSRUVER0VfSU9QT1JUX0FERFImMHgwODE3KSB8IChzZWN1cmVlZGdlNTQxMF9pb3BvcnQmfjB4MDgxNykpCiAjZW5kaWYKIAogI2VuZGlmIC8qIF9BU01fU0hfSU9fU05BUEdFQVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXNoL3NwaW5sb2NrLmgKaW5kZXggODQ2MzIyZC4uNTQ0NThmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zcGlubG9jay5oCkBAIC0xMDAsNCArMTAwLDggQEAKIAlyZXR1cm4gMDsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qIF9fQVNNX1NIX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbS5oIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKaW5kZXggYWQzNWFkNC4uNmMxZjhmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvc3lzdGVtLmgKQEAgLTYsNiArNiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDIgUGF1bCBNdW5kdAogICovCiAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KIAogLyoKICAqCXN3aXRjaF90bygpIHNob3VsZCBzd2l0Y2ggdGFza3MgdG8gdGFzayBuciBuLCBmaXJzdApAQCAtNjYsMTMgKzY3LDIwIEBACiB7CiB9CiAKLSNkZWZpbmUgbm9wKCkgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJub3AiKQorI2lmZGVmIENPTkZJR19DUFVfU0g0QQorI2RlZmluZSBfX2ljYmkoKQkJCVwKK3sJCQkJCVwKKwl1bnNpZ25lZCBsb25nIF9fYWRkcjsJCVwKKwlfX2FkZHIgPSAweGE4MDAwMDAwOwkJXAorCV9fYXNtX18gX192b2xhdGlsZV9fKAkJXAorCQkiaWNiaSAgICUwXG5cdCIJCVwKKwkJOiAvKiBubyBvdXRwdXQgKi8JXAorCQk6ICJtIiAoX19tKF9fYWRkcikpKTsJXAorfQorI2VuZGlmCiAKLQotI2RlZmluZSB4Y2hnKHB0cix4KSAoKF9fdHlwZW9mX18oKihwdHIpKSlfX3hjaGcoKHVuc2lnbmVkIGxvbmcpKHgpLChwdHIpLHNpemVvZigqKHB0cikpKSkKLQotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgbG9uZyB0YXModm9sYXRpbGUgaW50ICptKQoteyAvKiAjZGVmaW5lIHRhcyhwdHIpICh4Y2hnKChwdHIpLDEpKSAqLworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRhcyh2b2xhdGlsZSBpbnQgKm0pCit7CiAJdW5zaWduZWQgbG9uZyByZXR2YWw7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInRhcy5iCUAlMVxuXHQiCkBAIC04MSwxMiArODksMzMgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1leHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7Ci0KLSNkZWZpbmUgbWIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQotI2RlZmluZSBybWIoKQltYigpCi0jZGVmaW5lIHdtYigpCV9fYXNtX18gX192b2xhdGlsZV9fICgiIjogOiA6Im1lbW9yeSIpCisvKgorICogQSBicmllZiBub3RlIG9uIGN0cmxfYmFycmllcigpLCB0aGUgY29udHJvbCByZWdpc3RlciB3cml0ZSBiYXJyaWVyLgorICoKKyAqIExlZ2FjeSBTSCBjb3JlcyB0eXBpY2FsbHkgcmVxdWlyZSBhIHNlcXVlbmNlIG9mIDggbm9wcyBhZnRlcgorICogbW9kaWZpY2F0aW9uIG9mIGEgY29udHJvbCByZWdpc3RlciBpbiBvcmRlciBmb3IgdGhlIGNoYW5nZXMgdG8gdGFrZQorICogZWZmZWN0LiBPbiBuZXdlciBjb3JlcyAobGlrZSB0aGUgc2g0YSBhbmQgc2g1KSB0aGlzIGlzIGFjY29tcGxpc2hlZAorICogd2l0aCBpY2JpLgorICoKKyAqIEFsc28gbm90ZSB0aGF0IG9uIHNoNGEgaW4gdGhlIGljYmkgY2FzZSB3ZSBjYW4gZm9yZWdvIGEgc3luY28gZm9yIHRoZQorICogd3JpdGUgYmFycmllciwgYXMgaXQncyBub3QgbmVjZXNzYXJ5IGZvciBjb250cm9sIHJlZ2lzdGVycy4KKyAqCisgKiBIaXN0b3JpY2FsbHkgd2UgaGF2ZSBvbmx5IGRvbmUgdGhpcyB0eXBlIG9mIGJhcnJpZXIgZm9yIHRoZSBNTVVDUiwgYnV0CisgKiBpdCdzIGFsc28gbmVjZXNzYXJ5IGZvciB0aGUgQ0NSLCBzbyB3ZSBtYWtlIGl0IGdlbmVyaWMgaGVyZSBpbnN0ZWFkLgorICovCisjaWZkZWYgQ09ORklHX0NQVV9TSDRBCisjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgcm1iKCkJCW1iKCkKKyNkZWZpbmUgd21iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgic3luY28iOiA6IDoibWVtb3J5IikKKyNkZWZpbmUgY3RybF9iYXJyaWVyKCkJX19pY2JpKCkKICNkZWZpbmUgcmVhZF9iYXJyaWVyX2RlcGVuZHMoKQlkbyB7IH0gd2hpbGUoMCkKKyNlbHNlCisjZGVmaW5lIG1iKCkJCV9fYXNtX18gX192b2xhdGlsZV9fICgiIjogOiA6Im1lbW9yeSIpCisjZGVmaW5lIHJtYigpCQltYigpCisjZGVmaW5lIHdtYigpCQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIiI6IDogOiJtZW1vcnkiKQorI2RlZmluZSBjdHJsX2JhcnJpZXIoKQlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoIm5vcDtub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3AiKQorI2RlZmluZSByZWFkX2JhcnJpZXJfZGVwZW5kcygpCWRvIHsgfSB3aGlsZSgwKQorI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfU01QCiAjZGVmaW5lIHNtcF9tYigpCW1iKCkKQEAgLTEwMyw3ICsxMzIsOCBAQAogI2RlZmluZSBzZXRfbWIodmFyLCB2YWx1ZSkgZG8geyB4Y2hnKCZ2YXIsIHZhbHVlKTsgfSB3aGlsZSAoMCkKIAogLyogSW50ZXJydXB0IENvbnRyb2wgKi8KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQorI2lmZGVmIENPTkZJR19DUFVfSEFTX1NSX1JCCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2VuYWJsZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgX19kdW1teTAsIF9fZHVtbXkxOwogCkBAIC0xMTYsOCArMTQ2LDIyIEBACiAJCQkgICAgIDogIjEiICh+MHgwMDAwMDBmMCkKIAkJCSAgICAgOiAibWVtb3J5Iik7CiB9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIGxvY2FsX2lycV9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkwLCBfX2R1bW15MTsKIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBsb2NhbF9pcnFfZGlzYWJsZSh2b2lkKQorCV9fYXNtX18gX192b2xhdGlsZV9fICgKKwkJInN0YwlzciwgJTBcblx0IgorCQkiYW5kCSUxLCAlMFxuXHQiCisJCSJsZGMJJTAsIHNyXG5cdCIKKwkJOiAiPSZyIiAoX19kdW1teTApLCAiPXIiIChfX2R1bW15MSkKKwkJOiAiMSIgKH4weDAwMDAwMGYwKQorCQk6ICJtZW1vcnkiKTsKK30KKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9jYWxfaXJxX2Rpc2FibGUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIF9fZHVtbXk7CiAJX19hc21fXyBfX3ZvbGF0aWxlX18oInN0YwlzciwgJTBcblx0IgpAQCAtMTI4LDYgKzE3MiwzMSBAQAogCQkJICAgICA6ICJtZW1vcnkiKTsKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIHNldF9ibF9iaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkwLCBfX2R1bW15MTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RjCXNyLCAlMFxuXHQiCisJCQkgICAgICJvcgklMiwgJTBcblx0IgorCQkJICAgICAiYW5kCSUzLCAlMFxuXHQiCisJCQkgICAgICJsZGMJJTAsIHNyIgorCQkJICAgICA6ICI9JnIiIChfX2R1bW15MCksICI9ciIgKF9fZHVtbXkxKQorCQkJICAgICA6ICJyIiAoMHgxMDAwMDAwMCksICJyIiAoMHhmZmZmZmYwZikKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ibF9iaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIF9fZHVtbXkwLCBfX2R1bW15MTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fICgic3RjCXNyLCAlMFxuXHQiCisJCQkgICAgICJhbmQJJTIsICUwXG5cdCIKKwkJCSAgICAgImxkYwklMCwgc3IiCisJCQkgICAgIDogIj0mciIgKF9fZHVtbXkwKSwgIj1yIiAoX19kdW1teTEpCisJCQkgICAgIDogIjEiICh+MHgxMDAwMDAwMCkKKwkJCSAgICAgOiAibWVtb3J5Iik7Cit9CisKICNkZWZpbmUgbG9jYWxfc2F2ZV9mbGFncyh4KSBcCiAJX19hc21fXygic3RjIHNyLCAlMDsgYW5kICMweGYwLCAlMCIgOiAiPSZ6IiAoeCkgOi8qKi86ICJtZW1vcnkiICkKIApAQCAtMTM4LDcgKzIwNyw3IEBACiAJKGZsYWdzICE9IDApOwkJCVwKIH0pCiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgbG9jYWxfaXJxX3NhdmUodm9pZCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBsb2NhbF9pcnFfc2F2ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIF9fZHVtbXk7CiAKQEAgLTE1NCwzNSArMjIzLDkgQEAKIAlyZXR1cm4gZmxhZ3M7CiB9CiAKLSNpZmRlZiBERUJVR19DTElfU1RJCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkICBsb2NhbF9pcnFfcmVzdG9yZSh1bnNpZ25lZCBsb25nIHgpCi17Ci0JaWYgKCh4ICYgMHgwMDAwMDBmMCkgIT0gMHgwMDAwMDBmMCkKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCWVsc2UgewotCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCQlsb2NhbF9zYXZlX2ZsYWdzKGZsYWdzKTsKLQotCQlpZiAoZmxhZ3MgPT0gMCkgewotCQkJZXh0ZXJuIHZvaWQgZHVtcF9zdGFjayh2b2lkKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiQlVHIVxuIik7Ci0JCQlkdW1wX3N0YWNrKCk7Ci0JCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwotCQl9Ci0JfQotfQotI2Vsc2UKLSNkZWZpbmUgbG9jYWxfaXJxX3Jlc3RvcmUoeCkgZG8geyAJCQlcCisjZGVmaW5lIGxvY2FsX2lycV9yZXN0b3JlKHgpIGRvIHsJCQlcCiAJaWYgKCh4ICYgMHgwMDAwMDBmMCkgIT0gMHgwMDAwMDBmMCkJCVwKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwkJCQlcCi19IHdoaWxlICgwKQotI2VuZGlmCi0KLSNkZWZpbmUgcmVhbGx5X3Jlc3RvcmVfZmxhZ3MoeCkgZG8geyAJCQlcCi0JaWYgKCh4ICYgMHgwMDAwMDBmMCkgIT0gMHgwMDAwMDBmMCkJCVwKLQkJbG9jYWxfaXJxX2VuYWJsZSgpOwkJCQlcCi0JZWxzZQkJCQkJCVwKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsJCQkJXAorCQlsb2NhbF9pcnFfZW5hYmxlKCk7CQkJXAogfSB3aGlsZSAoMCkKIAogLyoKQEAgLTIxMCw4ICsyNTMsOCBAQAogI2RlZmluZSBiYWNrX3RvX1AxKCkJCQkJCVwKIGRvIHsJCQkJCQkJXAogCXVuc2lnbmVkIGxvbmcgX19kdW1teTsJCQkJXAorCWN0cmxfYmFycmllcigpOwkJCQkJXAogCV9fYXNtX18gX192b2xhdGlsZV9fKAkJCQlcCi0JCSJub3A7bm9wO25vcDtub3A7bm9wO25vcDtub3Bcblx0IglcCiAJCSJtb3YubAkxZiwgJTBcblx0IgkJCVwKIAkJImptcAlAJTBcblx0IgkJCVwKIAkJIiBub3Bcblx0IgkJCQlcCkBAIC0yMjQsNyArMjY3LDcgQEAKIC8qIEZvciBzcGlubG9ja3MgZXRjICovCiAjZGVmaW5lIGxvY2FsX2lycV9zYXZlKHgpCXggPSBsb2NhbF9pcnFfc2F2ZSgpCiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgeGNoZ191MzIodm9sYXRpbGUgaW50ICogbSwgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZ191MzIodm9sYXRpbGUgdTMyICptLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzLCByZXR2YWw7CiAKQEAgLTIzNSw3ICsyNzgsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgeGNoZ191OCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICogbSwgdW5zaWduZWQgbG9uZyB2YWwpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgeGNoZ191OCh2b2xhdGlsZSB1OCAqbSwgdW5zaWduZWQgbG9uZyB2YWwpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncywgcmV0dmFsOwogCkBAIC0yNDYsMjAgKzI4OSw3MCBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgX194Y2hnKHVuc2lnbmVkIGxvbmcgeCwgdm9sYXRpbGUgdm9pZCAqIHB0ciwgaW50IHNpemUpCitleHRlcm4gdm9pZCBfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIodm9pZCk7CisKKyNkZWZpbmUgX194Y2hnKHB0ciwgeCwgc2l6ZSkJCQkJXAorKHsJCQkJCQkJXAorCXVuc2lnbmVkIGxvbmcgX194Y2hnX19yZXM7CQkJXAorCXZvbGF0aWxlIHZvaWQgKl9feGNoZ19wdHIgPSAocHRyKTsJCVwKKwlzd2l0Y2ggKHNpemUpIHsJCQkJCVwKKwljYXNlIDQ6CQkJCQkJXAorCQlfX3hjaGdfX3JlcyA9IHhjaGdfdTMyKF9feGNoZ19wdHIsIHgpOwlcCisJCWJyZWFrOwkJCQkJXAorCWNhc2UgMToJCQkJCQlcCisJCV9feGNoZ19fcmVzID0geGNoZ191OChfX3hjaGdfcHRyLCB4KTsJXAorCQlicmVhazsJCQkJCVwKKwlkZWZhdWx0OgkJCQkJXAorCQlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsJXAorCQlfX3hjaGdfX3JlcyA9IHg7CQkJXAorCQlicmVhazsJCQkJCVwKKwl9CQkJCQkJXAorCQkJCQkJCVwKKwlfX3hjaGdfX3JlczsJCQkJCVwKK30pCisKKyNkZWZpbmUgeGNoZyhwdHIseCkJXAorCSgoX190eXBlb2ZfXygqKHB0cikpKV9feGNoZygocHRyKSwodW5zaWduZWQgbG9uZykoeCksIHNpemVvZigqKHB0cikpKSkKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZ191MzIodm9sYXRpbGUgaW50ICogbSwgdW5zaWduZWQgbG9uZyBvbGQsCisJdW5zaWduZWQgbG9uZyBuZXcpCit7CisJX191MzIgcmV0dmFsOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CisJcmV0dmFsID0gKm07CisJaWYgKHJldHZhbCA9PSBvbGQpCisJCSptID0gbmV3OworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgICAgICAgLyogaW1wbGllcyBtZW1vcnkgYmFycmllciAgKi8KKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGRvZXNuJ3QgZXhpc3QsIHNvIHlvdSdsbCBnZXQgYSBsaW5rZXIgZXJyb3IKKyAqIGlmIHNvbWV0aGluZyB0cmllcyB0byBkbyBhbiBpbnZhbGlkIGNtcHhjaGcoKS4gKi8KK2V4dGVybiB2b2lkIF9fY21weGNoZ19jYWxsZWRfd2l0aF9iYWRfcG9pbnRlcih2b2lkKTsKKworI2RlZmluZSBfX0hBVkVfQVJDSF9DTVBYQ0hHIDEKKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICogcHRyLCB1bnNpZ25lZCBsb25nIG9sZCwKKwkJdW5zaWduZWQgbG9uZyBuZXcsIGludCBzaXplKQogewogCXN3aXRjaCAoc2l6ZSkgewogCWNhc2UgNDoKLQkJcmV0dXJuIHhjaGdfdTMyKHB0ciwgeCk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcmV0dXJuIHhjaGdfdTgocHRyLCB4KTsKLQkJYnJlYWs7CisJCXJldHVybiBfX2NtcHhjaGdfdTMyKHB0ciwgb2xkLCBuZXcpOwogCX0KLQlfX3hjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKLQlyZXR1cm4geDsKKwlfX2NtcHhjaGdfY2FsbGVkX3dpdGhfYmFkX3BvaW50ZXIoKTsKKwlyZXR1cm4gb2xkOwogfQogCisjZGVmaW5lIGNtcHhjaGcocHRyLG8sbikJCQkJCQkgXAorICAoewkJCQkJCQkJCSBcCisgICAgIF9fdHlwZW9mX18oKihwdHIpKSBfb18gPSAobyk7CQkJCQkgXAorICAgICBfX3R5cGVvZl9fKCoocHRyKSkgX25fID0gKG4pOwkJCQkJIFwKKyAgICAgKF9fdHlwZW9mX18oKihwdHIpKSkgX19jbXB4Y2hnKChwdHIpLCAodW5zaWduZWQgbG9uZylfb18sCQkgXAorCQkJCSAgICAodW5zaWduZWQgbG9uZylfbl8sIHNpemVvZigqKHB0cikpKTsgXAorICB9KQorCiAvKiBYWFgKICAqIGRpc2FibGUgaGx0IGR1cmluZyBjZXJ0YWluIGNyaXRpY2FsIGkvbyBvcGVyYXRpb25zCiAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvaW8uaCBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvaW8uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMzI3ODQ5Yi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2FzbS1zaC9zeXN0ZW1oL2lvLmgKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0vKgotICogaW5jbHVkZS9hc20tc2gvc3lzdGVtaC9pby5oCi0gKgotICogU3R1cGlkIEkvTyBkZWZpbml0aW9ucyBmb3IgU3lzdGVtSCwgY2xvbmVkIGZyb20gU0U3NzUxLgotICoKLSAqIENvcHlyaWdodCAoQykgMjAwMyAgUGF1bCBNdW5kdAotICoKLSAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCi0gKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCi0gKiBmb3IgbW9yZSBkZXRhaWxzLgotICovCi0jaWZuZGVmIF9fQVNNX1NIX1NZU1RFTUhfSU9fSAotI2RlZmluZSBfX0FTTV9TSF9TWVNURU1IX0lPX0gKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3NzUxc3lzdGVtaF9pbmIodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB1bnNpZ25lZCBzaG9ydCBzaDc3NTFzeXN0ZW1oX2ludyh1bnNpZ25lZCBsb25nIHBvcnQpOwotZXh0ZXJuIHVuc2lnbmVkIGludCBzaDc3NTFzeXN0ZW1oX2lubCh1bnNpZ25lZCBsb25nIHBvcnQpOwotCi1leHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX291dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0dyh1bnNpZ25lZCBzaG9ydCB2YWx1ZSwgdW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0bCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB1bnNpZ25lZCBjaGFyIHNoNzc1MXN5c3RlbWhfaW5iX3AodW5zaWduZWQgbG9uZyBwb3J0KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0Yl9wKHVuc2lnbmVkIGNoYXIgdmFsdWUsIHVuc2lnbmVkIGxvbmcgcG9ydCk7Ci0KLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfaW5zYih1bnNpZ25lZCBsb25nIHBvcnQsIHZvaWQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpOwotZXh0ZXJuIHZvaWQgc2g3NzUxc3lzdGVtaF9pbnN3KHVuc2lnbmVkIGxvbmcgcG9ydCwgdm9pZCAqYWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCk7Ci1leHRlcm4gdm9pZCBzaDc3NTFzeXN0ZW1oX2luc2wodW5zaWduZWQgbG9uZyBwb3J0LCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0c2IodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0c3codW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfb3V0c2wodW5zaWduZWQgbG9uZyBwb3J0LCBjb25zdCB2b2lkICphZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KTsKLQotZXh0ZXJuIHVuc2lnbmVkIGNoYXIgc2g3NzUxc3lzdGVtaF9yZWFkYih1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0IHNoNzc1MXN5c3RlbWhfcmVhZHcodW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB1bnNpZ25lZCBpbnQgc2g3NzUxc3lzdGVtaF9yZWFkbCh1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHZvaWQgc2g3NzUxc3lzdGVtaF93cml0ZWIodW5zaWduZWQgY2hhciBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotZXh0ZXJuIHZvaWQgc2g3NzUxc3lzdGVtaF93cml0ZXcodW5zaWduZWQgc2hvcnQgYiwgdW5zaWduZWQgbG9uZyBhZGRyKTsKLWV4dGVybiB2b2lkIHNoNzc1MXN5c3RlbWhfd3JpdGVsKHVuc2lnbmVkIGludCBiLCB1bnNpZ25lZCBsb25nIGFkZHIpOwotCi1leHRlcm4gdW5zaWduZWQgbG9uZyBzaDc3NTFzeXN0ZW1oX2lzYV9wb3J0MmFkZHIodW5zaWduZWQgbG9uZyBvZmZzZXQpOwotCi0jZW5kaWYgLyogX19BU01fU0hfU1lTVEVNSF9JT19IICovCi0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvNzc1MXN5c3RlbWguaCBiL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWg3NzUxLmgKc2ltaWxhcml0eSBpbmRleCA5NiUKcmVuYW1lIGZyb20gaW5jbHVkZS9hc20tc2gvc3lzdGVtaC83NzUxc3lzdGVtaC5oCnJlbmFtZSB0byBpbmNsdWRlL2FzbS1zaC9zeXN0ZW1oNzc1MS5oCmluZGV4IDQxNzA1MzEuLmIxNDNiYjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3N5c3RlbWgvNzc1MXN5c3RlbWguaAorKysgYi9pbmNsdWRlL2FzbS1zaC9zeXN0ZW1oNzc1MS5oCkBAIC02NSw0ICs2NSw3IEBACiAKICNkZWZpbmUgSVJRXzc5Qzk3MwkxMwogCisjZGVmaW5lIF9fSU9fUFJFRklYCXNoNzc1MXN5c3RlbWgKKyNpbmNsdWRlIDxhc20vaW9fZ2VuZXJpYy5oPgorCiAjZW5kaWYgIC8qIF9fQVNNX1NIX1NZU1RFTUhfNzc1MVNZU1RFTUhfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaCBiL2luY2x1ZGUvYXNtLXNoL3RocmVhZF9pbmZvLmgKaW5kZXggNzM0NTM1MC4uM2ViYzNmOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdGhyZWFkX2luZm8uaAorKysgYi9pbmNsdWRlL2FzbS1zaC90aHJlYWRfaW5mby5oCkBAIC05LDggKzksOCBAQAogICogIENvcHlyaWdodCAoQykgMjAwMiAgRGF2aWQgSG93ZWxscyAoZGhvd2VsbHNAcmVkaGF0LmNvbSkKICAqICAtIEluY29ycG9yYXRpbmcgc3VnZ2VzdGlvbnMgbWFkZSBieSBMaW51cyBUb3J2YWxkcyBhbmQgRGF2ZSBNaWxsZXIKICAqLwotCiAjaWZkZWYgX19LRVJORUxfXworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtMjEsNyArMjEsMTAgQEAKIAl1bnNpZ25lZCBsb25nCQlmbGFnczsJCS8qIGxvdyBsZXZlbCBmbGFncyAqLwogCV9fdTMyCQkJY3B1OwogCWludAkJCXByZWVtcHRfY291bnQ7IC8qIDAgPT4gcHJlZW1wdGFibGUsIDwwID0+IEJVRyAqLworCW1tX3NlZ21lbnRfdAkJYWRkcl9saW1pdDsJLyogdGhyZWFkIGFkZHJlc3Mgc3BhY2UgKi8KIAlzdHJ1Y3QgcmVzdGFydF9ibG9jawlyZXN0YXJ0X2Jsb2NrOworCXVuc2lnbmVkIGxvbmcJCXByZXZpb3VzX3NwOwkvKiBzcCBvZiBwcmV2aW91cyBzdGFjayBpbiBjYXNlCisJCQkJCQkgICBvZiBuZXN0ZWQgSVJRIHN0YWNrcyAqLwogCV9fdTgJCQlzdXBlcnZpc29yX3N0YWNrWzBdOwogfTsKIApAQCAtMjksNiArMzIsMTMgQEAKIAogI2RlZmluZSBQUkVFTVBUX0FDVElWRQkJMHgxMDAwMDAwMAogCisjaWZkZWYgQ09ORklHXzRLU1RBQ0tTCisjZGVmaW5lIFRIUkVBRF9TSVpFCQkoUEFHRV9TSVpFKQorI2Vsc2UKKyNkZWZpbmUgVEhSRUFEX1NJWkUJCShQQUdFX1NJWkUgKiAyKQorI2VuZGlmCisjZGVmaW5lIFNUQUNLX1dBUk4JCShUSFJFQURfU0laRSAvIDgpCisKIC8qCiAgKiBtYWNyb3MvZnVuY3Rpb25zIGZvciBnYWluaW5nIGFjY2VzcyB0byB0aGUgdGhyZWFkIGluZm9ybWF0aW9uIHN0cnVjdHVyZQogICovCkBAIC00MCw2ICs1MCw3IEBACiAJLmZsYWdzCQk9IDAsCQkJXAogCS5jcHUJCT0gMCwJCQlcCiAJLnByZWVtcHRfY291bnQJPSAxLAkJCVwKKwkuYWRkcl9saW1pdAk9IEtFUk5FTF9EUywJCVwKIAkucmVzdGFydF9ibG9jawk9IHsJCQlcCiAJCS5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbCwJXAogCX0sCQkJCQlcCkBAIC00OCwyNCArNTksNDIgQEAKICNkZWZpbmUgaW5pdF90aHJlYWRfaW5mbwkoaW5pdF90aHJlYWRfdW5pb24udGhyZWFkX2luZm8pCiAjZGVmaW5lIGluaXRfc3RhY2sJCShpbml0X3RocmVhZF91bmlvbi5zdGFjaykKIAorLyogaG93IHRvIGdldCB0aGUgY3VycmVudCBzdGFjayBwb2ludGVyIGZyb20gQyAqLworcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBjdXJyZW50X3N0YWNrX3BvaW50ZXIgYXNtKCJyMTUiKSBfX2F0dHJpYnV0ZV91c2VkX187CisKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBDICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCB0aHJlYWRfaW5mbyAqY3VycmVudF90aHJlYWRfaW5mbyh2b2lkKQogewogCXN0cnVjdCB0aHJlYWRfaW5mbyAqdGk7CisjaWZkZWYgQ09ORklHX0NQVV9IQVNfU1JfUkIKIAlfX2FzbV9fKCJzdGMJcjdfYmFuaywgJTAiIDogIj1yIiAodGkpKTsKKyNlbHNlCisJdW5zaWduZWQgbG9uZyBfX2R1bW15OworCisJX19hc21fXyBfX3ZvbGF0aWxlX18gKAorCQkibW92CXIxNSwgJTBcblx0IgorCQkiYW5kCSUxLCAlMFxuXHQiCisJCTogIj0mciIgKHRpKSwgIj1yIiAoX19kdW1teSkKKwkJOiAiMSIgKH4oVEhSRUFEX1NJWkUgLSAxKSkKKwkJOiAibWVtb3J5Iik7CisjZW5kaWYKKwogCXJldHVybiB0aTsKIH0KIAogLyogdGhyZWFkIGluZm9ybWF0aW9uIGFsbG9jYXRpb24gKi8KLSNkZWZpbmUgVEhSRUFEX1NJWkUgKDIqUEFHRV9TSVpFKQotI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0aSkgKChzdHJ1Y3QgdGhyZWFkX2luZm8gKikgX19nZXRfZnJlZV9wYWdlcyhHRlBfS0VSTkVMLDEpKQotI2RlZmluZSBmcmVlX3RocmVhZF9pbmZvKHRpKSBmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSAodGkpLCAxKQorI2lmZGVmIENPTkZJR19ERUJVR19TVEFDS19VU0FHRQorI2RlZmluZSBhbGxvY190aHJlYWRfaW5mbyh0aSkJa3phbGxvYyhUSFJFQURfU0laRSwgR0ZQX0tFUk5FTCkKKyNlbHNlCisjZGVmaW5lIGFsbG9jX3RocmVhZF9pbmZvKHRpKQlrbWFsbG9jKFRIUkVBRF9TSVpFLCBHRlBfS0VSTkVMKQorI2VuZGlmCisjZGVmaW5lIGZyZWVfdGhyZWFkX2luZm8odGkpCWtmcmVlKHRpKQogCiAjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiAKIC8qIGhvdyB0byBnZXQgdGhlIHRocmVhZCBpbmZvcm1hdGlvbiBzdHJ1Y3QgZnJvbSBBU00gKi8KICNkZWZpbmUgR0VUX1RIUkVBRF9JTkZPKHJlZykgXAotCXN0YwlyN19iYW5rLCByZWcKKwlzdGMgICAgIHI3X2JhbmssIHJlZwogCiAjZW5kaWYKIApAQCAtNzksMTggKzEwOCwxOCBAQAogI2RlZmluZSBUSUZfTk9USUZZX1JFU1VNRQkxCS8qIHJlc3VtcHRpb24gbm90aWZpY2F0aW9uIHJlcXVlc3RlZCAqLwogI2RlZmluZSBUSUZfU0lHUEVORElORwkJMgkvKiBzaWduYWwgcGVuZGluZyAqLwogI2RlZmluZSBUSUZfTkVFRF9SRVNDSEVECTMJLyogcmVzY2hlZHVsaW5nIG5lY2Vzc2FyeSAqLworI2RlZmluZSBUSUZfUkVTVE9SRV9TSUdNQVNLCTQJLyogcmVzdG9yZSBzaWduYWwgbWFzayBpbiBkb19zaWduYWwoKSAqLwogI2RlZmluZSBUSUZfVVNFREZQVQkJMTYJLyogRlBVIHdhcyB1c2VkIGJ5IHRoaXMgdGFzayB0aGlzIHF1YW50dW0gKFNNUCkgKi8KICNkZWZpbmUgVElGX1BPTExJTkdfTlJGTEFHCTE3CS8qIHRydWUgaWYgcG9sbF9pZGxlKCkgaXMgcG9sbGluZyBUSUZfTkVFRF9SRVNDSEVEICovCiAjZGVmaW5lIFRJRl9NRU1ESUUJCTE4Ci0jZGVmaW5lIFRJRl9VU0VSU1BBQ0UJCTMxCS8qIHRydWUgaWYgRlMgc2V0cyB1c2Vyc3BhY2UgKi8KIAogI2RlZmluZSBfVElGX1NZU0NBTExfVFJBQ0UJKDE8PFRJRl9TWVNDQUxMX1RSQUNFKQogI2RlZmluZSBfVElGX05PVElGWV9SRVNVTUUJKDE8PFRJRl9OT1RJRllfUkVTVU1FKQogI2RlZmluZSBfVElGX1NJR1BFTkRJTkcJCSgxPDxUSUZfU0lHUEVORElORykKICNkZWZpbmUgX1RJRl9ORUVEX1JFU0NIRUQJKDE8PFRJRl9ORUVEX1JFU0NIRUQpCisjZGVmaW5lIF9USUZfUkVTVE9SRV9TSUdNQVNLCSgxPDxUSUZfUkVTVE9SRV9TSUdNQVNLKQogI2RlZmluZSBfVElGX1VTRURGUFUJCSgxPDxUSUZfVVNFREZQVSkKICNkZWZpbmUgX1RJRl9QT0xMSU5HX05SRkxBRwkoMTw8VElGX1BPTExJTkdfTlJGTEFHKQotI2RlZmluZSBfVElGX1VTRVJTUEFDRQkJKDE8PFRJRl9VU0VSU1BBQ0UpCiAKICNkZWZpbmUgX1RJRl9XT1JLX01BU0sJCTB4MDAwMDAwRkUJLyogd29yayB0byBkbyBvbiBpbnRlcnJ1cHQvZXhjZXB0aW9uIHJldHVybiAqLwogI2RlZmluZSBfVElGX0FMTFdPUktfTUFTSwkweDAwMDAwMEZGCS8qIHdvcmsgdG8gZG8gb24gYW55IHJldHVybiB0byB1LXNwYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90aW1lci5oIGIvaW5jbHVkZS9hc20tc2gvdGltZXIuaAppbmRleCBkZDY1NzljLi5jN2FiMjgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC90aW1lci5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3RpbWVyLmgKQEAgLTYsNiArNiw4IEBACiAKIHN0cnVjdCBzeXNfdGltZXJfb3BzIHsKIAlpbnQgKCppbml0KSh2b2lkKTsKKwlpbnQgKCpzdGFydCkodm9pZCk7CisJaW50ICgqc3RvcCkodm9pZCk7CiAJdW5zaWduZWQgbG9uZyAoKmdldF9vZmZzZXQpKHZvaWQpOwogCXVuc2lnbmVkIGxvbmcgKCpnZXRfZnJlcXVlbmN5KSh2b2lkKTsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaC90aXRhbi5oIGIvaW5jbHVkZS9hc20tc2gvdGl0YW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzBhNGY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9hc20tc2gvdGl0YW4uaApAQCAtMCwwICsxLDQzIEBACisvKgorICogUGxhdGZvcm0gZGVmaW50aW9ucyBmb3IgVGl0YW4KKyAqLworCisjaWZuZGVmIF9BU01fU0hfVElUQU5fVElUQU5fSAorI2RlZmluZSBfQVNNX1NIX1RJVEFOX1RJVEFOX0gKKworI2RlZmluZSBfX0lPX1BSRUZJWCB0aXRhbgorI2luY2x1ZGUgPGFzbS9pb19nZW5lcmljLmg+CisKKy8qIElSUSBhc3NpZ25tZW50cyAqLworI2RlZmluZSBUSVRBTl9JUlFfV0FOCQkyCS8qIGV0aDAgKFdBTikgKi8KKyNkZWZpbmUgVElUQU5fSVJRX0xBTgkJNQkvKiBldGgxIChMQU4pICovCisjZGVmaW5lIFRJVEFOX0lSUV9NUENJQQkJOAkvKiBtUENJIEEgKi8KKyNkZWZpbmUgVElUQU5fSVJRX01QQ0lCCQkxMQkvKiBtUENJIEIgKi8KKyNkZWZpbmUgVElUQU5fSVJRX1VTQgkJMTEJLyogVVNCICovCisKKy8qCisgKiBUaGUgZXh0ZXJuYWwgaW50ZXJydXB0IGxpbmVzLCB0aGVzZSB0YWtlIHVwIGludHMgMCAtIDE1IGluY2x1c2l2ZQorICogZGVwZW5kaW5nIG9uIHRoZSBwcmlvcml0eSBmb3IgdGhlIGludGVycnVwdC4gIEluIGZhY3QgdGhlIHByaW9yaXR5CisgKiBpcyB0aGUgaW50ZXJydXB0IDotKQorICovCisjZGVmaW5lIElSTDBfSVJRCTAKKyNkZWZpbmUgSVJMMF9JUFJfQUREUglJTlRDX0lQUkQKKyNkZWZpbmUgSVJMMF9JUFJfUE9TCTMKKyNkZWZpbmUgSVJMMF9QUklPUklUWQk4CisKKyNkZWZpbmUgSVJMMV9JUlEJMQorI2RlZmluZSBJUkwxX0lQUl9BRERSCUlOVENfSVBSRAorI2RlZmluZSBJUkwxX0lQUl9QT1MJMgorI2RlZmluZSBJUkwxX1BSSU9SSVRZCTgKKworI2RlZmluZSBJUkwyX0lSUQkyCisjZGVmaW5lIElSTDJfSVBSX0FERFIJSU5UQ19JUFJECisjZGVmaW5lIElSTDJfSVBSX1BPUwkxCisjZGVmaW5lIElSTDJfUFJJT1JJVFkJOAorCisjZGVmaW5lIElSTDNfSVJRCTMKKyNkZWZpbmUgSVJMM19JUFJfQUREUglJTlRDX0lQUkQKKyNkZWZpbmUgSVJMM19JUFJfUE9TCTAKKyNkZWZpbmUgSVJMM19QUklPUklUWQk4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdWFjY2Vzcy5oIGIvaW5jbHVkZS9hc20tc2gvdWFjY2Vzcy5oCmluZGV4IDJjYjAxODYxZS4uNWM0OWVkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvdWFjY2Vzcy5oCisrKyBiL2luY2x1ZGUvYXNtLXNoL3VhY2Nlc3MuaApAQCAtMTYsMjEgKzE2LDkgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKLS8qCi0gKiBOT1RFOiBNYWNyby9mdW5jdGlvbnMgaW4gdGhpcyBmaWxlIGRlcGVuZHMgb24gdGhyZWFkc19pbmZvLmggaW1wbGVtZW50YXRpb24uCi0gKiBBc3N1bWVzOgotICogVElfRkxBR1MgPT0gOAotICogVElGX1VTRVJTUEFDRSA9PSAzMQotICogVVNFUl9BRERSX0xJTUlUID09IDB4ODAwMDAwMDAKLSAqLwotCiAjZGVmaW5lIFZFUklGWV9SRUFEICAgIDAKICNkZWZpbmUgVkVSSUZZX1dSSVRFICAgMQogCi10eXBlZGVmIHN0cnVjdCB7Ci0JdW5zaWduZWQgaW50IGlzX3VzZXJfc3BhY2U7Ci19IG1tX3NlZ21lbnRfdDsKLQogLyoKICAqIFRoZSBmcyB2YWx1ZSBkZXRlcm1pbmVzIHdoZXRoZXIgYXJndW1lbnQgdmFsaWRpdHkgY2hlY2tpbmcgc2hvdWxkIGJlCiAgKiBwZXJmb3JtZWQgb3Igbm90LiAgSWYgZ2V0X2ZzKCkgPT0gVVNFUl9EUywgY2hlY2tpbmcgaXMgcGVyZm9ybWVkLCB3aXRoCkBAIC00MCwxNiArMjgsMTggQEAKICAqLwogCiAjZGVmaW5lIE1BS0VfTU1fU0VHKHMpCSgobW1fc2VnbWVudF90KSB7IChzKSB9KQotI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5pc191c2VyX3NwYWNlID09IChiKS5pc191c2VyX3NwYWNlKQogCi0jZGVmaW5lIFVTRVJfQUREUl9MSU1JVAkweDgwMDAwMDAwCisjZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygweEZGRkZGRkZGVUwpCisjZGVmaW5lIFVTRVJfRFMJCU1BS0VfTU1fU0VHKFBBR0VfT0ZGU0VUKQogCi0jZGVmaW5lIEtFUk5FTF9EUwlNQUtFX01NX1NFRygwKQotI2RlZmluZSBVU0VSX0RTCQlNQUtFX01NX1NFRygxKQorI2RlZmluZSBzZWdtZW50X2VxKGEsYikJKChhKS5zZWcgPT0gKGIpLnNlZykKIAogI2RlZmluZSBnZXRfZHMoKQkoS0VSTkVMX0RTKQogCiAjaWYgIWRlZmluZWQoQ09ORklHX01NVSkKKy8qIE5PTU1VIGlzIGFsd2F5cyB0cnVlICovCisjZGVmaW5lIF9fYWRkcl9vayhhZGRyKSAoMSkKKwogc3RhdGljIGlubGluZSBtbV9zZWdtZW50X3QgZ2V0X2ZzKHZvaWQpCiB7CiAJcmV0dXJuIFVTRVJfRFM7CkBAIC03NiwzMSArNjYsMTEgQEAKIAlyZXR1cm4gKChhZGRyID49IG1lbW9yeV9zdGFydCkgJiYgKChhZGRyICsgc2l6ZSkgPCBtZW1vcnlfZW5kKSk7CiB9CiAjZWxzZSAvKiBDT05GSUdfTU1VICovCi1zdGF0aWMgaW5saW5lIG1tX3NlZ21lbnRfdCBnZXRfZnModm9pZCkKLXsKLQlyZXR1cm4gTUFLRV9NTV9TRUcodGVzdF90aHJlYWRfZmxhZyhUSUZfVVNFUlNQQUNFKSk7Ci19CisjZGVmaW5lIF9fYWRkcl9vayhhZGRyKSBcCisJKCh1bnNpZ25lZCBsb25nKShhZGRyKSA8IChjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQuc2VnKSkKIAotc3RhdGljIGlubGluZSB2b2lkIHNldF9mcyhtbV9zZWdtZW50X3QgcykKLXsKLQl1bnNpZ25lZCBsb25nIHRpLCBmbGFnOwotCV9fYXNtX18gX192b2xhdGlsZV9fKAotCQkic3RjCXI3X2JhbmssICUwXG5cdCIKLQkJIm1vdi5sCUAoOCwlMCksICUxXG5cdCIKLQkJInNoYWwJJTFcblx0IgotCQkiY21wL3BsCSUyXG5cdCIKLQkJInJvdGNyCSUxXG5cdCIKLQkJIm1vdi5sCSUxLCBAKDgsJTApIgotCQk6ICI9JnIiICh0aSksICI9JnIiIChmbGFnKQotCQk6ICJyIiAocy5pc191c2VyX3NwYWNlKQotCQk6ICJ0Iik7Ci0vKioqKgotCWlmIChzLmlzX3VzZXJfc3BhY2UpCi0JCXNldF90aHJlYWRfZmxhZyhUSUZfVVNFUlNQQUNFKTsKLQllbHNlCi0JCWNsZWFyX3RocmVhZF9mbGFnKFRJRl9VU0VSU1BBQ0UpOwotKioqKi8KLX0KKyNkZWZpbmUgZ2V0X2ZzKCkJKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+YWRkcl9saW1pdCkKKyNkZWZpbmUgc2V0X2ZzKHgpCShjdXJyZW50X3RocmVhZF9pbmZvKCktPmFkZHJfbGltaXQgPSAoeCkpCiAKIC8qCiAgKiBfX2FjY2Vzc19vazogQ2hlY2sgaWYgYWRkcmVzcyB3aXRoIHNpemUgaXMgT0sgb3Igbm90LgpAQCAtMTA4LDcgKzc4LDcgQEAKICAqIFdlIGRvIHRocmVlIGNoZWNrczoKICAqICgxKSBpcyBpdCB1c2VyIHNwYWNlPyAKICAqICgyKSBhZGRyICsgc2l6ZSAtLT4gY2Fycnk/Ci0gKiAoMykgYWRkciArIHNpemUgPj0gMHg4MDAwMDAwMCAgKFVTRVJfQUREUl9MSU1JVCkKKyAqICgzKSBhZGRyICsgc2l6ZSA+PSAweDgwMDAwMDAwICAoUEFHRV9PRkZTRVQpCiAgKgogICogKDEpICgyKSAoMykgfCBSRVNVTFQKICAqICAwICAgMCAgIDAgIHwgIG9rCkBAIC0yMDEsNiArMTcxLDcgQEAKIAlfX2d1X2VycjsJCQkJCQlcCiB9KQogCisjaWZkZWYgQ09ORklHX01NVQogI2RlZmluZSBfX2dldF91c2VyX2NoZWNrKHgscHRyLHNpemUpCQkJCVwKICh7CQkJCQkJCQlcCiAJbG9uZyBfX2d1X2VyciwgX19ndV92YWw7CQkJCVwKQEAgLTI5MCw2ICsyNjEsMTggQEAKIAk6ICJyIiAoYWRkcikJCQkJXAogCTogInQiKTsJCQkJCVwKIH0pCisjZWxzZSAvKiBDT05GSUdfTU1VICovCisjZGVmaW5lIF9fZ2V0X3VzZXJfY2hlY2soeCxwdHIsc2l6ZSkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWxvbmcgX19ndV9lcnIsIF9fZ3VfdmFsOwkJCQkJXAorCWlmIChfX2FjY2Vzc19vaygodW5zaWduZWQgbG9uZykocHRyKSwgKHNpemUpKSkgewkJXAorCQlfX2dldF91c2VyX3NpemUoX19ndV92YWwsIChwdHIpLCAoc2l6ZSksIF9fZ3VfZXJyKTsJXAorCQkoeCkgPSAoX190eXBlb2ZfXygqKHB0cikpKV9fZ3VfdmFsOwkJCVwKKwl9IGVsc2UJCQkJCQkJCVwKKwkJX19ndV9lcnIgPSAtRUZBVUxUOwkJCQkJXAorCV9fZ3VfZXJyOwkJCQkJCQlcCit9KQorI2VuZGlmCiAKICNkZWZpbmUgX19nZXRfdXNlcl9hc20oeCwgYWRkciwgZXJyLCBpbnNuKSBcCiAoeyBcCkBAIC01NDEsNyArNTI0LDcgQEAKIAkJIjM6XG5cdCIKIAkJIm1vdi5sCTRmLCAlMVxuXHQiCiAJCSJqbXAJQCUxXG5cdCIKLQkJIiBtb3YJJTUsICUwXG4iCisJCSIgbW92CSMwLCAlMFxuIgogCQkiLmJhbGlnbiA0XG4iCiAJCSI0OgkubG9uZyAyYlxuIgogCQkiLnByZXZpb3VzXG4iCkBAIC01NTAsMjYgKzUzMywyMCBAQAogCQkiCS5sb25nIDFiLDNiXG4iCiAJCSIucHJldmlvdXMiCiAJCTogIj16IiAocmVzKSwgIj0mciIgKF9fZHVtbXkpCi0JCTogIjAiICgwKSwgInIiIChfX3MpLCAiciIgKF9fbiksICJpIiAoLUVGQVVMVCkKKwkJOiAiMCIgKDApLCAiciIgKF9fcyksICJyIiAoX19uKQogCQk6ICJ0Iik7CiAJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIF9faW5saW5lX18gbG9uZyBzdHJubGVuX3VzZXIoY29uc3QgY2hhciBfX3VzZXIgKnMsIGxvbmcgbikKIHsKLQlpZiAoIWFjY2Vzc19vayhWRVJJRllfUkVBRCwgcywgbikpCisJaWYgKCFfX2FkZHJfb2socykpCiAJCXJldHVybiAwOwogCWVsc2UKIAkJcmV0dXJuIF9fc3Rybmxlbl91c2VyKHMsIG4pOwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBsb25nIHN0cmxlbl91c2VyKGNvbnN0IGNoYXIgX191c2VyICpzKQotewotCWlmICghYWNjZXNzX29rKFZFUklGWV9SRUFELCBzLCAwKSkKLQkJcmV0dXJuIDA7Ci0JZWxzZQotCQlyZXR1cm4gX19zdHJubGVuX3VzZXIocywgfjBVTCA+PiAxKTsKLX0KKyNkZWZpbmUgc3RybGVuX3VzZXIoc3RyKQlzdHJubGVuX3VzZXIoc3RyLCB+MFVMID4+IDEpCiAKIC8qCiAgKiBUaGUgZXhjZXB0aW9uIHRhYmxlIGNvbnNpc3RzIG9mIHBhaXJzIG9mIGFkZHJlc3NlczogdGhlIGZpcnN0IGlzIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAppbmRleCA3NmI1NDMwLi41ZDVlOWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS1zaC91bmlzdGQuaApAQCAtMjkyLDI1ICsyOTIsNTEgQEAKICNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyICAgICAgKF9fTlJfbXFfb3Blbis1KQogI2RlZmluZSBfX05SX2tleGVjX2xvYWQJCTI4MwogI2RlZmluZSBfX05SX3dhaXRpZAkJMjg0Ci0jZGVmaW5lIF9fTlJfYWRkX2tleQkJMjg1Ci0jZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkJMjg2Ci0jZGVmaW5lIF9fTlJfa2V5Y3RsCQkyODcKLSNkZWZpbmUgX19OUl9pb3ByaW9fc2V0CQkyODgKLSNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0CQkyODkKLSNkZWZpbmUgX19OUl9pbm90aWZ5X2luaXQJMjkwCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2gJMjkxCi0jZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaAkyOTIKKy8qICNkZWZpbmUgX19OUl9zeXNfc2V0YWx0cm9vdAkyODUgKi8KKyNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKKyNkZWZpbmUgX19OUl9yZXF1ZXN0X2tleQkyODcKKyNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAorI2RlZmluZSBfX05SX2lvcHJpb19zZXQJCTI4OQorI2RlZmluZSBfX05SX2lvcHJpb19nZXQJCTI5MAorI2RlZmluZSBfX05SX2lub3RpZnlfaW5pdAkyOTEKKyNkZWZpbmUgX19OUl9pbm90aWZ5X2FkZF93YXRjaAkyOTIKKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoCTI5MworI2RlZmluZSBfX05SX21pZ3JhdGVfcGFnZXMJMjk0CisjZGVmaW5lIF9fTlJfb3BlbmF0CQkyOTUKKyNkZWZpbmUgX19OUl9ta2RpcmF0CQkyOTYKKyNkZWZpbmUgX19OUl9ta25vZGF0CQkyOTcKKyNkZWZpbmUgX19OUl9mY2hvd25hdAkJMjk4CisjZGVmaW5lIF9fTlJfZnV0aW1lc2F0CQkyOTkKKyNkZWZpbmUgX19OUl9uZXdmc3RhdGF0CQkzMDAKKyNkZWZpbmUgX19OUl91bmxpbmthdAkJMzAxCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQJCTMwMgorI2RlZmluZSBfX05SX2xpbmthdAkJMzAzCisjZGVmaW5lIF9fTlJfc3ltbGlua2F0CQkzMDQKKyNkZWZpbmUgX19OUl9yZWFkbGlua2F0CQkzMDUKKyNkZWZpbmUgX19OUl9mY2htb2RhdAkJMzA2CisjZGVmaW5lIF9fTlJfZmFjY2Vzc2F0CQkzMDcKKyNkZWZpbmUgX19OUl9wc2VsZWN0NgkJMzA4CisjZGVmaW5lIF9fTlJfcHBvbGwJCTMwOQorI2RlZmluZSBfX05SX3Vuc2hhcmUJCTMxMAorI2RlZmluZSBfX05SX3NldF9yb2J1c3RfbGlzdAkzMTEKKyNkZWZpbmUgX19OUl9nZXRfcm9idXN0X2xpc3QJMzEyCisjZGVmaW5lIF9fTlJfc3BsaWNlCQkzMTMKKyNkZWZpbmUgX19OUl9zeW5jX2ZpbGVfcmFuZ2UJMzE0CisjZGVmaW5lIF9fTlJfdGVlCQkzMTUKKyNkZWZpbmUgX19OUl92bXNwbGljZQkJMzE2CiAKLQotI2RlZmluZSBOUl9zeXNjYWxscyAyOTMKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMzE3CiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKLS8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI0OiBzZWUgPGFzbS1zaC9lcnJuby5oPiAqLworI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzoKKyAqIHNlZSA8YXNtLXNoL2Vycm5vLmg+ICovCiAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKIGRvIHsgXAotCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNCkpIHsgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLU1BWF9FUlJOTykpIHsgXAogCS8qIEF2b2lkIHVzaW5nICJyZXMiIHdoaWNoIGlzIGRlY2xhcmVkIHRvIGJlIGluIHJlZ2lzdGVyIHIwOyBcCiAJICAgZXJybm8gbWlnaHQgZXhwYW5kIHRvIGEgZnVuY3Rpb24gY2FsbCBhbmQgY2xvYmJlciBpdC4gICovIFwKIAkJaW50IF9fZXJyID0gLShyZXMpOyBcCkBAIC00NDQsNiArNDcwLDcgQEAKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BFTkRJTkcKICNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1NJR1BST0NNQVNLCiAjZGVmaW5lIF9fQVJDSF9XQU5UX1NZU19SVF9TSUdBQ1RJT04KKyNkZWZpbmUgX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQKIAogI2lmZGVmIF9fS0VSTkVMX1NZU0NBTExTX18KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC92b3lhZ2VyZ3hfcmVnLmggYi9pbmNsdWRlL2FzbS1zaC92b3lhZ2VyZ3guaApzaW1pbGFyaXR5IGluZGV4IDk4JQpyZW5hbWUgZnJvbSBpbmNsdWRlL2FzbS1zaC9ydHM3NzUxcjJkL3ZveWFnZXJneF9yZWcuaApyZW5hbWUgdG8gaW5jbHVkZS9hc20tc2gvdm95YWdlcmd4LmgKaW5kZXggZjAzMWI1ZC4uOTliMDgwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2gvcnRzNzc1MXIyZC92b3lhZ2VyZ3hfcmVnLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvdm95YWdlcmd4LmgKQEAgLTEsNSArMSw1IEBACiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotLyogdm95YWdlcmd4X3JlZy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qIHZveWFnZXJneC5oCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmggYi9pbmNsdWRlL2FzbS1zaC93YXRjaGRvZy5oCmluZGV4IDA5Y2E0MTkuLmQxOWVhNjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoL3dhdGNoZG9nLmgKKysrIGIvaW5jbHVkZS9hc20tc2gvd2F0Y2hkb2cuaApAQCAtNjIsNyArNjIsNiBAQAogCiAvKioKICAqIAlzaF93ZHRfcmVhZF9jbnQgLSBSZWFkIGZyb20gQ291bnRlcgotICoKICAqIAlSZWFkcyBiYWNrIHRoZSBXVENOVCB2YWx1ZS4KICAqLwogc3RhdGljIGlubGluZSBfX3U4IHNoX3dkdF9yZWFkX2NudCh2b2lkKQpAQCAtNzIsNyArNzEsNiBAQAogCiAvKioKICAqCXNoX3dkdF93cml0ZV9jbnQgLSBXcml0ZSB0byBDb3VudGVyCi0gKgogICoJQHZhbDogVmFsdWUgdG8gd3JpdGUKICAqCiAgKglXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIEB2YWwgdG8gdGhlIGxvd2VyIGJ5dGUgb2YgdGhlIHRpbWVyIGNvdW50ZXIuCkBAIC05NSw3ICs5Myw2IEBACiAKIC8qKgogICogCXNoX3dkdF93cml0ZV9jc3IgLSBXcml0ZSB0byBDb250cm9sL1N0YXR1cyBSZWdpc3RlcgotICoKICAqIAlAdmFsOiBWYWx1ZSB0byB3cml0ZQogICoKICAqIAlXcml0ZXMgdGhlIGdpdmVuIHZhbHVlIEB2YWwgdG8gdGhlIGxvd2VyIGJ5dGUgb2YgdGhlIGNvbnRyb2wvc3RhdHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zaDY0L2tleWJvYXJkLmggYi9pbmNsdWRlL2FzbS1zaDY0L2tleWJvYXJkLmgKaW5kZXggMWZhYjk2ZC4uMGIwMWMzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc2g2NC9rZXlib2FyZC5oCisrKyBiL2luY2x1ZGUvYXNtLXNoNjQva2V5Ym9hcmQuaApAQCAtMzAsNyArMzAsNiBAQAogZXh0ZXJuIGNoYXIgcGNrYmRfdW5leHBlY3RlZF91cCh1bnNpZ25lZCBjaGFyIGtleWNvZGUpOwogZXh0ZXJuIHZvaWQgcGNrYmRfbGVkcyh1bnNpZ25lZCBjaGFyIGxlZHMpOwogZXh0ZXJuIHZvaWQgcGNrYmRfaW5pdF9odyh2b2lkKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyIHBja2JkX3N5c3JxX3hsYXRlWzEyOF07CiAKICNkZWZpbmUga2JkX3NldGtleWNvZGUJCXBja2JkX3NldGtleWNvZGUKICNkZWZpbmUga2JkX2dldGtleWNvZGUJCXBja2JkX2dldGtleWNvZGUKQEAgLTM4LDkgKzM3LDYgQEAKICNkZWZpbmUga2JkX3VuZXhwZWN0ZWRfdXAJcGNrYmRfdW5leHBlY3RlZF91cAogI2RlZmluZSBrYmRfbGVkcwkJcGNrYmRfbGVkcwogI2RlZmluZSBrYmRfaW5pdF9odwkJcGNrYmRfaW5pdF9odwotI2RlZmluZSBrYmRfc3lzcnFfeGxhdGUJCXBja2JkX3N5c3JxX3hsYXRlCi0KLSNkZWZpbmUgU1lTUlFfS0VZIDB4NTQKIAogLyogcmVzb3VyY2UgYWxsb2NhdGlvbiAqLwogI2RlZmluZSBrYmRfcmVxdWVzdF9yZWdpb24oKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc2g2NC90aW1leC5oIGIvaW5jbHVkZS9hc20tc2g2NC90aW1leC5oCmluZGV4IGFmMGI3OTIuLjE2M2UyYjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS1zaDY0L3RpbWV4LmgKQEAgLTE3LDkgKzE3LDYgQEAKIAogI2RlZmluZSBDTE9DS19USUNLX1JBVEUJMTE5MzE4MCAvKiBVbmRlcmx5aW5nIEhaICovCiAjZGVmaW5lIENMT0NLX1RJQ0tfRkFDVE9SCTIwCS8qIEZhY3RvciBvZiBib3RoIDEwMDAwMDAgYW5kIENMT0NLX1RJQ0tfUkFURSAqLwotI2RlZmluZSBGSU5FVFVORSAoKCgoKChsb25nKUxBVENIICogSFogLSBDTE9DS19USUNLX1JBVEUpIDw8IFNISUZUX0haKSAqIFwKLQkoMTAwMDAwMC9DTE9DS19USUNLX0ZBQ1RPUikgLyAoQ0xPQ0tfVElDS19SQVRFL0NMT0NLX1RJQ0tfRkFDVE9SKSkgXAotCQk8PCAoU0hJRlRfU0NBTEUtU0hJRlRfSFopKSAvIEhaKQogCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmggYi9pbmNsdWRlL2FzbS1zaDY0L3VuaXN0ZC5oCmluZGV4IDlhMTU5MGYuLmMxMTM1NjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXNoNjQvdW5pc3RkLmgKKysrIGIvaW5jbHVkZS9hc20tc2g2NC91bmlzdGQuaApAQCAtMzQ3LDggKzM0NywxMCBAQAogI2lmZGVmIF9fS0VSTkVMX18gCiAKICNkZWZpbmUgTlJfc3lzY2FsbHMgMzIxCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKLS8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtMTI1OiBzZWUgPGFzbS1zaDY0L2Vycm5vLmg+ICovCisvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLU1BWF9FUlJOTzoKKyAqIHNlZSA8YXNtLXNoNjQvZXJybm8uaD4gKi8KIAogI2RlZmluZSBfX3N5c2NhbGxfcmV0dXJuKHR5cGUsIHJlcykgXAogZG8geyBcCkBAIC0zNTgsNyArMzYwLDcgQEAKIAkqKiAgICAgICBsaWZlIGVhc2llciBpbiB0aGUgc3lzdGVtIGNhbGwgZXBpbG9ndWUgKHNlZSBlbnRyeS5TKSAgICAgIFwKIAkqLwkJCQkJCQkJICAgIFwKICAgICAgICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBfX3NyMiBfX2FzbV9fICgicjIiKSA9IHJlczsJCSAgICBcCi0JaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSkgeyBcCisJaWYgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSkgewkgICAgXAogCQllcnJubyA9IC0ocmVzKTsJCQkJCQkgICAgXAogCQlfX3NyMiA9IC0xOyAJCQkJCQkgICAgXAogCX0gXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaCBiL2luY2x1ZGUvYXNtLXNwYXJjL3NwaW5sb2NrLmgKaW5kZXggMWM3NTQ3NC4uNTU3ZDA4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmMvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS1zcGFyYy9zcGlubG9jay5oCkBAIC0xNTQsNiArMTU0LDEwIEBACiAjZGVmaW5lIF9fcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgX19yYXdfc3Bpbl9sb2NrKGxvY2spCiAjZGVmaW5lIF9fcmF3X3JlYWRfdHJ5bG9jayhsb2NrKSBnZW5lcmljX19yYXdfcmVhZF90cnlsb2NrKGxvY2spCiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKICNkZWZpbmUgX19yYXdfcmVhZF9jYW5fbG9jayhydykgKCEoKHJ3KS0+bG9jayAmIDB4ZmYpKQogI2RlZmluZSBfX3Jhd193cml0ZV9jYW5fbG9jayhydykgKCEocncpLT5sb2NrKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS1zcGFyYzY0L3NwaW5sb2NrLmgKaW5kZXggYmQ1ZmZjNy4uMDAwNmZlOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tc3BhcmM2NC9zcGlubG9jay5oCisrKyBiL2luY2x1ZGUvYXNtLXNwYXJjNjQvc3BpbmxvY2suaApAQCAtMjQxLDYgKzI0MSwxMCBAQAogI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHJ3KQkJKCEoKHJ3KS0+bG9jayAmIDB4ODAwMDAwMDBVTCkpCiAjZGVmaW5lIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKHJ3KQkoIShydyktPmxvY2spCiAKKyNkZWZpbmUgX3Jhd19zcGluX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfcmVhZF9yZWxheChsb2NrKQljcHVfcmVsYXgoKQorI2RlZmluZSBfcmF3X3dyaXRlX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisKICNlbmRpZiAvKiAhKF9fQVNTRU1CTFlfXykgKi8KIAogI2VuZGlmIC8qICEoX19TUEFSQzY0X1NQSU5MT0NLX0gpICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmggYi9pbmNsdWRlL2FzbS11bS9wZ3RhYmxlLmgKaW5kZXggNDg2MmRhZi4uMTg4ZjcyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvYXNtLXVtL3BndGFibGUuaApAQCAtMjc0LDEyICsyNzQsNiBAQAogCXJldHVybihwdGVfbWtuZXdwcm90KHB0ZSkpOyAKIH0KIAotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90IHB0ZSkKLXsgCi0JcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfVVNFUik7Ci0JcmV0dXJuKHB0ZV9ta25ld3Byb3QocHRlKSk7IAotfQotCiBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2RpcnR5KHB0ZV90IHB0ZSkKIHsgCiAJcHRlX3NldF9iaXRzKHB0ZSwgX1BBR0VfRElSVFkpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaCBiL2luY2x1ZGUvYXNtLXVtL3Byb2Nlc3Nvci1nZW5lcmljLmgKaW5kZXggYWZhNGZlMS4uZDk5YmJkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tdW0vcHJvY2Vzc29yLWdlbmVyaWMuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wcm9jZXNzb3ItZ2VuZXJpYy5oCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSAiYXNtL3B0cmFjZS5oIgogI2luY2x1ZGUgImNob29zZS1tb2RlLmgiCiAjaW5jbHVkZSAicmVnaXN0ZXJzLmgiCisjaW5jbHVkZSAic3lzZGVwL2FyY2hzZXRqbXAuaCIKIAogc3RydWN0IG1tX3N0cnVjdDsKIApAQCAtNDMsOCArNDQsNyBAQAogI2VuZGlmCiAjaWZkZWYgQ09ORklHX01PREVfU0tBUwogCQlzdHJ1Y3QgewotCQkJdm9pZCAqc3dpdGNoX2J1ZjsKLQkJCXZvaWQgKmZvcmtfYnVmOworCQkJam1wX2J1ZiBzd2l0Y2hfYnVmOwogCQkJaW50IG1tX2NvdW50OwogCQl9IHNrYXM7CiAjZW5kaWYKQEAgLTEzOCw3ICsxMzgsNyBAQAogCiAjaWZkZWYgQ09ORklHX01PREVfU0tBUwogI2RlZmluZSBLU1RLX1JFRyh0c2ssIHJlZykgXAotCWdldF90aHJlYWRfcmVnKHJlZywgdHNrLT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpCisJZ2V0X3RocmVhZF9yZWcocmVnLCAmdHNrLT50aHJlYWQubW9kZS5za2FzLnN3aXRjaF9idWYpCiAjZWxzZQogI2RlZmluZSBLU1RLX1JFRyh0c2ssIHJlZykgKDB4YmFkYmFiZSkKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tdW0vcHRyYWNlLXg4Nl82NC5oIGIvaW5jbHVkZS9hc20tdW0vcHRyYWNlLXg4Nl82NC5oCmluZGV4IDIwNzQ0ODMuLjAzYjRhZjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXVtL3B0cmFjZS14ODZfNjQuaAorKysgYi9pbmNsdWRlL2FzbS11bS9wdHJhY2UteDg2XzY0LmgKQEAgLTE2LDEyICsxNiwxNSBAQAogCiAjZGVmaW5lIEhPU1RfQVVESVRfQVJDSCBBVURJVF9BUkNIX1g4Nl82NAogCisvKiBBbHNvIGRlZmluZWQgaW4gc3lzZGVwL3B0cmFjZS5oLCBzbyBtYXkgYWxyZWFkeSBiZSBkZWZpbmVkLiAqLworI2lmbmRlZiBGU19CQVNFCiAjZGVmaW5lIEZTX0JBU0UgKDIxICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogI2RlZmluZSBHU19CQVNFICgyMiAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKICNkZWZpbmUgRFMgKDIzICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQogI2RlZmluZSBFUyAoMjQgKiBzaXplb2YodW5zaWduZWQgbG9uZykpCiAjZGVmaW5lIEZTICgyNSAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkKICNkZWZpbmUgR1MgKDI2ICogc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2VuZGlmCiAKICNkZWZpbmUgUFRfUkVHU19SQlgocikgVVBUX1JCWCgmKHIpLT5yZWdzKQogI2RlZmluZSBQVF9SRUdTX1JDWChyKSBVUFRfUkNYKCYociktPnJlZ3MpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20tdjg1MC91bmlzdGQuaAppbmRleCBiY2I0NGJmLi41NTJiN2M4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS12ODUwL3VuaXN0ZC5oCisrKyBiL2luY2x1ZGUvYXNtLXY4NTAvdW5pc3RkLmgKQEAgLTIzOCwxMiArMjM4LDEzIEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8YXNtL2NsaW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpCQkJCQkgICAgICBcCiAgIGRvIHsJCQkJCQkJCQkgICAgICBcCi0JICAvKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTEyNDoJICAgICAgXAorCSAgLyogdXNlci12aXNpYmxlIGVycm9yIG51bWJlcnMgYXJlIGluIHRoZSByYW5nZSAtMSAtIC1NQVhfRVJSTk86ICAgICAgXAogCSAgICAgc2VlIDxhc20tdjg1MC9lcnJuby5oPiAqLwkJCQkJICAgICAgXAotCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtMTI1KSwgMCkpIHsgXAorCSAgaWYgKF9fYnVpbHRpbl9leHBlY3QgKCh1bnNpZ25lZCBsb25nKShyZXMpID49ICh1bnNpZ25lZCBsb25nKSgtTUFYX0VSUk5PKSwgMCkpIHsgXAogCQkgIGVycm5vID0gLShyZXMpOwkJCQkJICAgICAgXAogCQkgIHJlcyA9IC0xOwkJCQkJCSAgICAgIFwKIAkgIH0JCQkJCQkJCSAgICAgIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9kbWEtbWFwcGluZy5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKaW5kZXggYjZkYTgzZC4uMTAxNzRiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L2RtYS1tYXBwaW5nLmgKQEAgLTU1LDEzICs1NSw2IEBACiBleHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyogZG1hX29wczsKIGV4dGVybiBpbnQgaW9tbXVfbWVyZ2U7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2RtYV9kaXJlY3Rpb24oaW50IGRtYV9kaXJlY3Rpb24pCi17Ci0JcmV0dXJuICgoZG1hX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkgfHwKLQkJKGRtYV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgfHwKLQkJKGRtYV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBwaW5nX2Vycm9yKGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJaWYgKGRtYV9vcHMtPm1hcHBpbmdfZXJyb3IpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L2U4MjAuaAppbmRleCBlMTVkM2M4Li5mYTIwODY3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvZTgyMC5oCisrKyBiL2luY2x1ZGUvYXNtLXg4Nl82NC9lODIwLmgKQEAgLTQ3LDEwICs0Nyw5IEBACiBleHRlcm4gaW50IGU4MjBfYW55X21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CiBleHRlcm4gaW50IGU4MjBfYWxsX21hcHBlZCh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgdHlwZSk7CiAKLWV4dGVybiB2b2lkIGU4MjBfYm9vdG1lbV9mcmVlKHBnX2RhdGFfdCAqcGdkYXQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsdW5zaWduZWQgbG9uZyBlbmQpOwogZXh0ZXJuIHZvaWQgZTgyMF9zZXR1cF9nYXAodm9pZCk7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBlODIwX2hvbGVfc2l6ZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgICAgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKK2V4dGVybiB2b2lkIGU4MjBfcmVnaXN0ZXJfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwKKwkJCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIAogZXh0ZXJuIHZvaWQgZmluaXNoX2U4MjBfcGFyc2luZyh2b2lkKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L25taS5oIGIvaW5jbHVkZS9hc20teDg2XzY0L25taS5oCmluZGV4IGNiZjI2NjkuLmYzNjdkNDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC9ubWkuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvbm1pLmgKQEAgLTcwLDQgKzcwLDExIEBACiAjZGVmaW5lIE5NSV9MT0NBTF9BUElDCTIKICNkZWZpbmUgTk1JX0lOVkFMSUQJMwogCitzdHJ1Y3QgY3RsX3RhYmxlOworc3RydWN0IGZpbGU7CitleHRlcm4gaW50IHByb2Nfbm1pX2VuYWJsZWQoc3RydWN0IGN0bF90YWJsZSAqLCBpbnQgLCBzdHJ1Y3QgZmlsZSAqLAorCQkJdm9pZCBfX3VzZXIgKiwgc2l6ZV90ICosIGxvZmZfdCAqKTsKKworZXh0ZXJuIGludCB1bmtub3duX25taV9wYW5pYzsKKwogI2VuZGlmIC8qIEFTTV9OTUlfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3Byb3RvLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaAppbmRleCBiNzNkMGM3Li5jMjhmYzJkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvcHJvdG8uaApAQCAtMjQsOCArMjQsNiBAQAogI2RlZmluZSBtdHJyX2JwX2luaXQoKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgogZXh0ZXJuIHZvaWQgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCk7Ci1leHRlcm4gdm9pZCBzaXplX3pvbmVzKHVuc2lnbmVkIGxvbmcgKnosIHVuc2lnbmVkIGxvbmcgKmgsCi0JCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKIAogZXh0ZXJuIHZvaWQgc3lzdGVtX2NhbGwodm9pZCk7IAogZXh0ZXJuIGludCBrZXJuZWxfc3lzY2FsbCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC9zZW1hcGhvcmUuaCBiL2luY2x1ZGUvYXNtLXg4Nl82NC9zZW1hcGhvcmUuaAppbmRleCAxMDdiZDkwLi4xMTk0ODg4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc2VtYXBob3JlLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3NlbWFwaG9yZS5oCkBAIC0xMzIsNyArMTMyLDcgQEAKIAkJImpucyAyZlxuXHQiCiAJCSJjYWxsIF9fZG93bl9mYWlsZWRfaW50ZXJydXB0aWJsZVxuIgogCQkiMjpcbiIKLQkJOiI9YSIgKHJlc3VsdCksICI9bSIgKHNlbS0+Y291bnQpCisJCToiPSZhIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKIAkJOiJEIiAoc2VtKQogCQk6Im1lbW9yeSIpOwogCXJldHVybiByZXN1bHQ7CkBAIC0xNTMsNyArMTUzLDcgQEAKIAkJImpucyAyZlxuXHQiCiAJCSJjYWxsIF9fZG93bl9mYWlsZWRfdHJ5bG9ja1xuXHQiCiAJCSIyOlxuIgotCQk6Ij1hIiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKKwkJOiI9JmEiIChyZXN1bHQpLCAiPW0iIChzZW0tPmNvdW50KQogCQk6IkQiIChzZW0pCiAJCToibWVtb3J5IiwiY2MiKTsKIAlyZXR1cm4gcmVzdWx0OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3NwaW5sb2NrLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaAppbmRleCBiZTdhOWU2Li4wNWVmMDk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvc3BpbmxvY2suaApAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CiAjaW5jbHVkZSA8YXNtL3J3bG9jay5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogCiAvKgogICogWW91ciBiYXNpYyBTTVAgc3BpbmxvY2tzLCBhbGxvd2luZyBvbmx5IGEgc2luZ2xlIENQVSBhbnl3aGVyZQpAQCAtMTMyLDQgKzEzMyw4IEBACiAJCQkJOiAiPW0iIChydy0+bG9jaykgOiA6ICJtZW1vcnkiKTsKIH0KIAorI2RlZmluZSBfcmF3X3NwaW5fcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKyNkZWZpbmUgX3Jhd19yZWFkX3JlbGF4KGxvY2spCWNwdV9yZWxheCgpCisjZGVmaW5lIF9yYXdfd3JpdGVfcmVsYXgobG9jaykJY3B1X3JlbGF4KCkKKwogI2VuZGlmIC8qIF9fQVNNX1NQSU5MT0NLX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdWFjY2Vzcy5oCmluZGV4IGU4NTY1NzAuLjE5Zjk5MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC91YWNjZXNzLmgKKysrIGIvaW5jbHVkZS9hc20teDg2XzY0L3VhY2Nlc3MuaApAQCAtMzYxLDYgKzM2MSwxMSBAQAogX19tdXN0X2NoZWNrIHVuc2lnbmVkIGxvbmcgX19jbGVhcl91c2VyKHZvaWQgX191c2VyICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIAogX19tdXN0X2NoZWNrIGxvbmcgX19jb3B5X2Zyb21fdXNlcl9pbmF0b21pYyh2b2lkICpkc3QsIGNvbnN0IHZvaWQgX191c2VyICpzcmMsIHVuc2lnbmVkIHNpemUpOwotI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBjb3B5X3VzZXJfZ2VuZXJpYworCitzdGF0aWMgX19tdXN0X2NoZWNrIF9fYWx3YXlzX2lubGluZSBpbnQKK19fY29weV90b191c2VyX2luYXRvbWljKHZvaWQgX191c2VyICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgdW5zaWduZWQgc2l6ZSkKK3sKKwlyZXR1cm4gY29weV91c2VyX2dlbmVyaWMoKF9fZm9yY2Ugdm9pZCAqKWRzdCwgc3JjLCBzaXplKTsKK30KIAogI2VuZGlmIC8qIF9fWDg2XzY0X1VBQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oIGIvaW5jbHVkZS9hc20teDg2XzY0L3VuaXN0ZC5oCmluZGV4IGVlYjk4YzEuLjYxMzcxNDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLXg4Nl82NC91bmlzdGQuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdW5pc3RkLmgKQEAgLTYyMywxNiArNjIzLDE3IEBACiAjaWZkZWYgX19LRVJORUxfXwogCiAjZGVmaW5lIF9fTlJfc3lzY2FsbF9tYXggX19OUl9tb3ZlX3BhZ2VzCisjaW5jbHVkZSA8bGludXgvZXJyLmg+CiAKICNpZm5kZWYgX19OT19TVFVCUwogCi0vKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdlIC0xIC0gLTQwOTUgKi8KKy8qIHVzZXItdmlzaWJsZSBlcnJvciBudW1iZXJzIGFyZSBpbiB0aGUgcmFuZ2UgLTEgLSAtTUFYX0VSUk5PICovCiAKICNkZWZpbmUgX19zeXNjYWxsX2Nsb2JiZXIgInIxMSIsInJjeCIsIm1lbW9yeSIgCiAKICNkZWZpbmUgX19zeXNjYWxsX3JldHVybih0eXBlLCByZXMpIFwKIGRvIHsgXAotCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLTEyNykpIHsgXAorCWlmICgodW5zaWduZWQgbG9uZykocmVzKSA+PSAodW5zaWduZWQgbG9uZykoLU1BWF9FUlJOTykpIHsgXAogCQllcnJubyA9IC0ocmVzKTsgXAogCQlyZXMgPSAtMTsgXAogCX0gXApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teDg2XzY0L3ZzeXNjYWxsLmggYi9pbmNsdWRlL2FzbS14ODZfNjQvdnN5c2NhbGwuaAppbmRleCAyMjgxZTkzLi5mZDQ1MmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14ODZfNjQvdnN5c2NhbGwuaAorKysgYi9pbmNsdWRlL2FzbS14ODZfNjQvdnN5c2NhbGwuaApAQCAtMTcsNyArMTcsNiBAQAogCiAjZGVmaW5lIF9fc2VjdGlvbl92eHRpbWUgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIudnh0aW1lIiksIGFsaWduZWQoMTYpKSkKICNkZWZpbmUgX19zZWN0aW9uX3ZnZXRjcHVfbW9kZSBfX2F0dHJpYnV0ZV9fICgodW51c2VkLCBfX3NlY3Rpb25fXyAoIi52Z2V0Y3B1X21vZGUiKSwgYWxpZ25lZCgxNikpKQotI2RlZmluZSBfX3NlY3Rpb25fd2FsbF9qaWZmaWVzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLndhbGxfamlmZmllcyIpLCBhbGlnbmVkKDE2KSkpCiAjZGVmaW5lIF9fc2VjdGlvbl9qaWZmaWVzIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLmppZmZpZXMiKSwgYWxpZ25lZCgxNikpKQogI2RlZmluZSBfX3NlY3Rpb25fc3lzX3R6IF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fICgiLnN5c190eiIpLCBhbGlnbmVkKDE2KSkpCiAjZGVmaW5lIF9fc2VjdGlvbl9zeXNjdGxfdnN5c2NhbGwgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgX19zZWN0aW9uX18gKCIuc3lzY3RsX3ZzeXNjYWxsIiksIGFsaWduZWQoMTYpKSkKQEAgLTQ4LDE0ICs0NywxMiBAQAogZXh0ZXJuIGludCBfX3ZnZXRjcHVfbW9kZTsKIGV4dGVybiBzdHJ1Y3QgdGltZXNwZWMgX194dGltZTsKIGV4dGVybiB2b2xhdGlsZSB1bnNpZ25lZCBsb25nIF9famlmZmllczsKLWV4dGVybiB1bnNpZ25lZCBsb25nIF9fd2FsbF9qaWZmaWVzOwogZXh0ZXJuIHN0cnVjdCB0aW1lem9uZSBfX3N5c190ejsKIGV4dGVybiBzZXFsb2NrX3QgX194dGltZV9sb2NrOwogCiAvKiBrZXJuZWwgc3BhY2UgKHdyaXRlYWJsZSkgKi8KIGV4dGVybiBzdHJ1Y3Qgdnh0aW1lX2RhdGEgdnh0aW1lOwogZXh0ZXJuIGludCB2Z2V0Y3B1X21vZGU7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyB3YWxsX2ppZmZpZXM7CiBleHRlcm4gc3RydWN0IHRpbWV6b25lIHN5c190ejsKIGV4dGVybiBpbnQgc3lzY3RsX3ZzeXNjYWxsOwogZXh0ZXJuIHNlcWxvY2tfdCB4dGltZV9sb2NrOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20teHRlbnNhL3RpbWV4LmggYi9pbmNsdWRlL2FzbS14dGVuc2EvdGltZXguaAppbmRleCBkMTRhMzc1Li5jN2I3MDVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS14dGVuc2EvdGltZXguaAorKysgYi9pbmNsdWRlL2FzbS14dGVuc2EvdGltZXguaApAQCAtMzEsOSArMzEsNiBAQAogCiAjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAJMTE5MzE4MAkvKiAoZXZlcnlvbmUgaXMgdXNpbmcgdGhpcyB2YWx1ZSkgKi8KICNkZWZpbmUgQ0xPQ0tfVElDS19GQUNUT1IgICAgICAgMjAgLyogRmFjdG9yIG9mIGJvdGggMTBeNiBhbmQgQ0xPQ0tfVElDS19SQVRFICovCi0jZGVmaW5lIEZJTkVUVU5FICgoKCgoKGxvbmcpTEFUQ0ggKiBIWiAtIENMT0NLX1RJQ0tfUkFURSkgPDwgU0hJRlRfSFopICogXAotCSgxMDAwMDAwL0NMT0NLX1RJQ0tfRkFDVE9SKSAvIChDTE9DS19USUNLX1JBVEUvQ0xPQ0tfVElDS19GQUNUT1IpKSBcCi0JCTw8IChTSElGVF9TQ0FMRS1TSElGVF9IWikpIC8gSFopCiAKICNpZmRlZiBDT05GSUdfWFRFTlNBX0NBTElCUkFURV9DQ09VTlQKIGV4dGVybiB1bnNpZ25lZCBsb25nIGNjb3VudF9wZXJfamlmZnk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IDFkZjJhYzMuLmY3YTUyZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC01OCw2ICs1OCw3IEBACiBoZWFkZXIteSArPSBmYWR2aXNlLmgKIGhlYWRlci15ICs9IGZkLmgKIGhlYWRlci15ICs9IGZkcmVnLmgKK2hlYWRlci15ICs9IGZpYl9ydWxlcy5oCiBoZWFkZXIteSArPSBmdGFwZS1oZWFkZXItc2VnbWVudC5oCiBoZWFkZXIteSArPSBmdGFwZS12ZW5kb3JzLmgKIGhlYWRlci15ICs9IGZ1c2UuaApAQCAtNzAsNiArNzEsNyBAQAogaGVhZGVyLXkgKz0gaTJjLWRldi5oCiBoZWFkZXIteSArPSBpOGsuaAogaGVhZGVyLXkgKz0gaWNtcC5oCitoZWFkZXIteSArPSBpZl9hZGRyLmgKIGhlYWRlci15ICs9IGlmX2FyY25ldC5oCiBoZWFkZXIteSArPSBpZl9hcnAuaAogaGVhZGVyLXkgKz0gaWZfYm9uZGluZy5oCkBAIC03OSw2ICs4MSw3IEBACiBoZWFkZXIteSArPSBpZi5oCiBoZWFkZXIteSArPSBpZl9oaXBwaS5oCiBoZWFkZXIteSArPSBpZl9pbmZpbmliYW5kLmgKK2hlYWRlci15ICs9IGlmX2xpbmsuaAogaGVhZGVyLXkgKz0gaWZfcGFja2V0LmgKIGhlYWRlci15ICs9IGlmX3BsaXAuaAogaGVhZGVyLXkgKz0gaWZfcHBwLmgKQEAgLTExMCw2ICsxMTMsNyBAQAogaGVhZGVyLXkgKz0gbXF1ZXVlLmgKIGhlYWRlci15ICs9IG10aW8uaAogaGVhZGVyLXkgKz0gbmNwX25vLmgKK2hlYWRlci15ICs9IG5laWdoYm91ci5oCiBoZWFkZXIteSArPSBuZXRmaWx0ZXJfYXJwLmgKIGhlYWRlci15ICs9IG5ldHJvbS5oCiBoZWFkZXIteSArPSBuZnMyLmgKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWNjdC5oIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKaW5kZXggZTg2YmFlNy4uMDQ5NmQxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9hY2N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9hY2N0LmgKQEAgLTEyNCwxNiArMTI0LDEyIEBACiBleHRlcm4gdm9pZCBhY2N0X2luaXRfcGFjY3Qoc3RydWN0IHBhY2N0X3N0cnVjdCAqcGFjY3QpOwogZXh0ZXJuIHZvaWQgYWNjdF9jb2xsZWN0KGxvbmcgZXhpdGNvZGUsIGludCBncm91cF9kZWFkKTsKIGV4dGVybiB2b2lkIGFjY3RfcHJvY2Vzcyh2b2lkKTsKLWV4dGVybiB2b2lkIGFjY3RfdXBkYXRlX2ludGVncmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7Ci1leHRlcm4gdm9pZCBhY2N0X2NsZWFyX2ludGVncmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjZWxzZQogI2RlZmluZSBhY2N0X2F1dG9fY2xvc2VfbW50KHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWNjdF9hdXRvX2Nsb3NlKHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWNjdF9pbml0X3BhY2N0KHgpCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgYWNjdF9jb2xsZWN0KHgseSkJZG8geyB9IHdoaWxlICgwKQogI2RlZmluZSBhY2N0X3Byb2Nlc3MoKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoeCkJCWRvIHsgfSB3aGlsZSAoMCkKLSNkZWZpbmUgYWNjdF9jbGVhcl9pbnRlZ3JhbHModGFzaykJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Flci5oIGIvaW5jbHVkZS9saW51eC9hZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDJlMTc4Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9hZXIuaApAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEludGVsIENvcnAuCisgKiAgICAgVG9tIExvbmcgTmd1eWVuICh0b20ubC5uZ3V5ZW5AaW50ZWwuY29tKQorICogICAgIFpoYW5nIFlhbm1pbiAoeWFubWluLnpoYW5nQGludGVsLmNvbSkKKyAqLworCisjaWZuZGVmIF9BRVJfSF8KKyNkZWZpbmUgX0FFUl9IXworCisjaWYgZGVmaW5lZChDT05GSUdfUENJRUFFUikKKy8qIHBjaS1lIHBvcnQgZHJpdmVyIG5lZWRzIHRoaXMgZnVuY3Rpb24gdG8gZW5hYmxlIGFlciAqLworZXh0ZXJuIGludCBwY2lfZW5hYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworZXh0ZXJuIGludCBwY2lfZmluZF9hZXJfY2FwYWJpbGl0eShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiBpbnQgcGNpX2Rpc2FibGVfcGNpZV9lcnJvcl9yZXBvcnRpbmcoc3RydWN0IHBjaV9kZXYgKmRldik7CitleHRlcm4gaW50IHBjaV9jbGVhbnVwX2Flcl91bmNvcnJlY3RfZXJyb3Jfc3RhdHVzKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworI2Vsc2UKKyNkZWZpbmUgcGNpX2VuYWJsZV9wY2llX2Vycm9yX3JlcG9ydGluZyhkZXYpCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV9maW5kX2Flcl9jYXBhYmlsaXR5KGRldikJCQlkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHBjaV9kaXNhYmxlX3BjaWVfZXJyb3JfcmVwb3J0aW5nKGRldikJCWRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcGNpX2NsZWFudXBfYWVyX3VuY29ycmVjdF9lcnJvcl9zdGF0dXMoZGV2KQlkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2VuZGlmIC8vX0FFUl9IXworCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Fpby5oIGIvaW5jbHVkZS9saW51eC9haW8uaAppbmRleCAwMGM4ZWZhLi4wZDcxYzAwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Fpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYWlvLmgKQEAgLTQsOCArNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KICNpbmNsdWRlIDxsaW51eC9haW9fYWJpLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAKICNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8bGludXgvdWlvLmg+CiAKICNkZWZpbmUgQUlPX01BWFNFR1MJCTQKICNkZWZpbmUgQUlPX0tJT0dSUF9OUl9BVE9NSUMJOApAQCAtMTEwLDggKzExMiwxMCBAQAogCWNoYXIgCQkJX191c2VyICpraV9idWY7CS8qIHJlbWFpbmluZyBpb2NiLT5haW9fYnVmICovCiAJc2l6ZV90CQkJa2lfbGVmdDsgCS8qIHJlbWFpbmluZyBieXRlcyAqLwogCWxvbmcJCQlraV9yZXRyaWVkOyAJLyoganVzdCBmb3IgdGVzdGluZyAqLwotCWxvbmcJCQlraV9raWNrZWQ7IAkvKiBqdXN0IGZvciB0ZXN0aW5nICovCi0JbG9uZwkJCWtpX3F1ZXVlZDsgCS8qIGp1c3QgZm9yIHRlc3RpbmcgKi8KKwlzdHJ1Y3QgaW92ZWMJCWtpX2lubGluZV92ZWM7CS8qIGlubGluZSB2ZWN0b3IgKi8KKyAJc3RydWN0IGlvdmVjCQkqa2lfaW92ZWM7CisgCXVuc2lnbmVkIGxvbmcJCWtpX25yX3NlZ3M7CisgCXVuc2lnbmVkIGxvbmcJCWtpX2N1cl9zZWc7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWtpX2xpc3Q7CS8qIHRoZSBhaW8gY29yZSB1c2VzIHRoaXMKIAkJCQkJCSAqIGZvciBjYW5jZWxsYXRpb24gKi8KQEAgLTIxMywxMSArMjE3LDExIEBACiAJCQkJICBzdHJ1Y3QgaW9jYiAqaW9jYikpOwogCiAjZGVmaW5lIGdldF9pb2N0eChraW9jdHgpIGRvIHsJCQkJCQlcCi0JQlVHX09OKHVubGlrZWx5KGF0b21pY19yZWFkKCYoa2lvY3R4KS0+dXNlcnMpIDw9IDApKTsJCVwKKwlCVUdfT04oYXRvbWljX3JlYWQoJihraW9jdHgpLT51c2VycykgPD0gMCk7CQkJXAogCWF0b21pY19pbmMoJihraW9jdHgpLT51c2Vycyk7CQkJCQlcCiB9IHdoaWxlICgwKQogI2RlZmluZSBwdXRfaW9jdHgoa2lvY3R4KSBkbyB7CQkJCQkJXAotCUJVR19PTih1bmxpa2VseShhdG9taWNfcmVhZCgmKGtpb2N0eCktPnVzZXJzKSA8PSAwKSk7CQlcCisJQlVHX09OKGF0b21pY19yZWFkKCYoa2lvY3R4KS0+dXNlcnMpIDw9IDApOwkJCVwKIAlpZiAodW5saWtlbHkoYXRvbWljX2RlY19hbmRfdGVzdCgmKGtpb2N0eCktPnVzZXJzKSkpIAkJXAogCQlfX3B1dF9pb2N0eChraW9jdHgpOwkJCQkJXAogfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYWlvX2FiaS5oIGIvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKaW5kZXggMzBmZGNjOC4uMzQ2NmIxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKKysrIGIvaW5jbHVkZS9saW51eC9haW9fYWJpLmgKQEAgLTQxLDYgKzQxLDggQEAKIAkgKiBJT0NCX0NNRF9QT0xMID0gNSwKIAkgKi8KIAlJT0NCX0NNRF9OT09QID0gNiwKKwlJT0NCX0NNRF9QUkVBRFYgPSA3LAorCUlPQ0JfQ01EX1BXUklURVYgPSA4LAogfTsKIAogLyogcmVhZCgpIGZyb20gL2Rldi9haW8gcmV0dXJucyB0aGVzZSBzdHJ1Y3R1cmVzLiAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdGFsay5oIGIvaW5jbHVkZS9saW51eC9hdGFsay5oCmluZGV4IDZiYTNhYTguLjc1YjhiYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRhbGsuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F0YWxrLmgKQEAgLTg4LDE1ICs4OCw3IEBACiAjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgogCiBzdHJ1Y3QgZGRwZWhkciB7Ci0jaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECi0JX191MTYJZGVoX2xlbjoxMCwKLQkJZGVoX2hvcHM6NCwKLQkJZGVoX3BhZDoyOwotI2Vsc2UKLQlfX3UxNglkZWhfcGFkOjIsCi0JCWRlaF9ob3BzOjQsCi0JCWRlaF9sZW46MTA7Ci0jZW5kaWYKKwlfX2JlMTYJZGVoX2xlbl9ob3BzOwkvKiBsb3dlciAxMCBiaXRzIGFyZSBsZW5ndGgsIG5leHQgNCAtIGhvcHMgKi8KIAlfX2JlMTYJZGVoX3N1bTsKIAlfX2JlMTYJZGVoX2RuZXQ7CiAJX19iZTE2CWRlaF9zbmV0OwpAQCAtMTEyLDM2ICsxMDQsNiBAQAogCXJldHVybiAoc3RydWN0IGRkcGVoZHIgKilza2ItPmgucmF3OwogfQogCi0vKgotICoJRG9uJ3QgZHJvcCB0aGUgc3RydWN0IGludG8gdGhlIHN0cnVjdCBhYm92ZS4gIFlvdSdsbCBnZXQgc29tZQotICoJc3VycHJpc2UgcGFkZGluZy4KLSAqLwotc3RydWN0IGRkcGViaXRzIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKLQlfX3UxNglkZWhfbGVuOjEwLAotCQlkZWhfaG9wczo0LAotCQlkZWhfcGFkOjI7Ci0jZWxzZQotCV9fdTE2CWRlaF9wYWQ6MiwKLQkJZGVoX2hvcHM6NCwKLQkJZGVoX2xlbjoxMDsKLSNlbmRpZgotfTsKLQotLyogU2hvcnQgZm9ybSBoZWFkZXIgKi8KLXN0cnVjdCBkZHBzaGRyIHsKLSNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKLQlfX3UxNglkc2hfbGVuOjEwLAotCQlkc2hfcGFkOjY7Ci0jZWxzZQotCV9fdTE2CWRzaF9wYWQ6NiwKLQkJZHNoX2xlbjoxMDsKLSNlbmRpZgotCV9fdTgJZHNoX2Rwb3J0OwotCV9fdTgJZHNoX3Nwb3J0OwotCS8qIEFuZCBuZXRhdGFsayBhcHBzIGV4cGVjdCB0byBzdGljayB0aGUgdHlwZSBpbiB0aGVtc2VsdmVzICovCi19OwotCiAvKiBBcHBsZVRhbGsgQUFSUCBoZWFkZXJzICovCiBzdHJ1Y3QgZWxhcGFhcnAgewogCV9fYmUxNglod190eXBlOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdG1sZWMuaCBiL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKaW5kZXggZjI2N2YyNC4uNmY1YTFiYWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXRtbGVjLmgKKysrIGIvaW5jbHVkZS9saW51eC9hdG1sZWMuaApAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiAKLSAqIEFUTSBMYW4gRW11bGF0aW9uIERhZW1vbiB2cy4gZHJpdmVyIGludGVyZmFjZQorICogQVRNIExhbiBFbXVsYXRpb24gRGFlbW9uIGRyaXZlciBpbnRlcmZhY2UKICAqCi0gKiBta2lpc2tpbGFAeWFob28uY29tCi0gKgorICogTWFya28gS2lpc2tpbGEgPG1raWlza2lsYUB5YWhvby5jb20+CiAgKi8KIAogI2lmbmRlZiBfQVRNTEVDX0hfCkBAIC0xMyw3NiArMTEsODcgQEAKICNpbmNsdWRlIDxsaW51eC9hdG1pb2MuaD4KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorCiAvKiBBVE0gbGVjIGRhZW1vbiBjb250cm9sIHNvY2tldCAqLwotI2RlZmluZSBBVE1MRUNfQ1RSTCBfSU8oJ2EnLEFUTUlPQ19MQU5FKQotI2RlZmluZSBBVE1MRUNfREFUQSBfSU8oJ2EnLEFUTUlPQ19MQU5FKzEpCi0jZGVmaW5lIEFUTUxFQ19NQ0FTVCBfSU8oJ2EnLEFUTUlPQ19MQU5FKzIpCisjZGVmaW5lIEFUTUxFQ19DVFJMCV9JTygnYScsIEFUTUlPQ19MQU5FKQorI2RlZmluZSBBVE1MRUNfREFUQQlfSU8oJ2EnLCBBVE1JT0NfTEFORSsxKQorI2RlZmluZSBBVE1MRUNfTUNBU1QJX0lPKCdhJywgQVRNSU9DX0xBTkUrMikKIAogLyogTWF4aW11bSBudW1iZXIgb2YgTEVDIGludGVyZmFjZXMgKHR3ZWFrYWJsZSkgKi8KICNkZWZpbmUgTUFYX0xFQ19JVEYgNDgKIAotLyogRnJvbSB0aGUgdG90YWwgb2YgTUFYX0xFQ19JVEYsIGxhc3QgTlVNX1RSX0RFVlMgYXJlIHJlc2VydmVkIGZvciBUb2tlbiBSaW5nLgorLyoKKyAqIEZyb20gdGhlIHRvdGFsIG9mIE1BWF9MRUNfSVRGLCBsYXN0IE5VTV9UUl9ERVZTIGFyZSByZXNlcnZlZCBmb3IgVG9rZW4gUmluZy4KICAqIEUuZy4gaWYgTUFYX0xFQ19JVEYgPSA0OCBhbmQgTlVNX1RSX0RFVlMgPSA4LCB0aGVuIGxlYzAtbGVjMzkgYXJlIGZvcgogICogRXRoZXJuZXQgRUxBTnMgYW5kIGxlYzQwLWxlYzQ3IGFyZSBmb3IgVG9rZW4gUmluZyBFTEFOUy4KICAqLwogI2RlZmluZSBOVU1fVFJfREVWUyA4CiAKLXR5cGVkZWYgZW51bSB7IAotICAgICAgICBsX3NldF9tYWNfYWRkciwgICBsX2RlbF9tYWNfYWRkciwgCi0gICAgICAgIGxfc3ZjX3NldHVwLCAKLSAgICAgICAgbF9hZGRyX2RlbGV0ZSwgICAgbF90b3BvbG9neV9jaGFuZ2UsIAotICAgICAgICBsX2ZsdXNoX2NvbXBsZXRlLCBsX2FycF91cGRhdGUsCi0gICAgICAgIGxfbmFycF9yZXEsIC8qIExBTkUyIG1hbmRhdGVzIHRoZSB1c2Ugb2YgdGhpcyAqLwotICAgICAgICBsX2NvbmZpZywgICAgICAgICBsX2ZsdXNoX3RyYW5faWQsIAotICAgICAgICBsX3NldF9sZWNpZCwgICAgICBsX2FycF94bXQsCi0gICAgICAgIGxfcmRlc2NfYXJwX3htdCwKLSAgICAgICAgbF9hc3NvY2lhdGVfcmVxLAotICAgICAgICBsX3Nob3VsZF9icmlkZ2UgICAvKiBzaG91bGQgd2UgYnJpZGdlIHRoaXMgTUFDPyAqLwordHlwZWRlZiBlbnVtIHsKKwlsX3NldF9tYWNfYWRkciwKKwlsX2RlbF9tYWNfYWRkciwKKwlsX3N2Y19zZXR1cCwKKwlsX2FkZHJfZGVsZXRlLAorCWxfdG9wb2xvZ3lfY2hhbmdlLAorCWxfZmx1c2hfY29tcGxldGUsCisJbF9hcnBfdXBkYXRlLAorCWxfbmFycF9yZXEsCQkvKiBMQU5FMiBtYW5kYXRlcyB0aGUgdXNlIG9mIHRoaXMgKi8KKwlsX2NvbmZpZywKKwlsX2ZsdXNoX3RyYW5faWQsCisJbF9zZXRfbGVjaWQsCisJbF9hcnBfeG10LAorCWxfcmRlc2NfYXJwX3htdCwKKwlsX2Fzc29jaWF0ZV9yZXEsCisJbF9zaG91bGRfYnJpZGdlCQkvKiBzaG91bGQgd2UgYnJpZGdlIHRoaXMgTUFDPyAqLwogfSBhdG1sZWNfbXNnX3R5cGU7CiAKICNkZWZpbmUgQVRNTEVDX01TR19UWVBFX01BWCBsX3Nob3VsZF9icmlkZ2UKIAogc3RydWN0IGF0bWxlY19jb25maWdfbXNnIHsKLSAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudDsKLSAgICAgICAgdW5zaWduZWQgaW50IG1heF91bmtub3duX2ZyYW1lX3RpbWU7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1heF9yZXRyeV9jb3VudDsKLSAgICAgICAgdW5zaWduZWQgaW50IGFnaW5nX3RpbWU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBmb3J3YXJkX2RlbGF5X3RpbWU7Ci0gICAgICAgIHVuc2lnbmVkIGludCBhcnBfcmVzcG9uc2VfdGltZTsKLSAgICAgICAgdW5zaWduZWQgaW50IGZsdXNoX3RpbWVvdXQ7Ci0gICAgICAgIHVuc2lnbmVkIGludCBwYXRoX3N3aXRjaGluZ19kZWxheTsKLSAgICAgICAgdW5zaWduZWQgaW50ICBsYW5lX3ZlcnNpb247IC8qIExBTkUyOiAxIGZvciBMQU5FdjEsIDIgZm9yIExBTkV2MiAqLwotICAgICAgICBpbnQgbXR1OwotICAgICAgICBpbnQgaXNfcHJveHk7CisJdW5zaWduZWQgaW50IG1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudDsKKwl1bnNpZ25lZCBpbnQgbWF4X3Vua25vd25fZnJhbWVfdGltZTsKKwl1bnNpZ25lZCBzaG9ydCBtYXhfcmV0cnlfY291bnQ7CisJdW5zaWduZWQgaW50IGFnaW5nX3RpbWU7CisJdW5zaWduZWQgaW50IGZvcndhcmRfZGVsYXlfdGltZTsKKwl1bnNpZ25lZCBpbnQgYXJwX3Jlc3BvbnNlX3RpbWU7CisJdW5zaWduZWQgaW50IGZsdXNoX3RpbWVvdXQ7CisJdW5zaWduZWQgaW50IHBhdGhfc3dpdGNoaW5nX2RlbGF5OworCXVuc2lnbmVkIGludCBsYW5lX3ZlcnNpb247CS8qIExBTkUyOiAxIGZvciBMQU5FdjEsIDIgZm9yIExBTkV2MiAqLworCWludCBtdHU7CisJaW50IGlzX3Byb3h5OwogfTsKLSAKKwogc3RydWN0IGF0bWxlY19tc2cgewotICAgICAgICBhdG1sZWNfbXNnX3R5cGUgdHlwZTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHNpemVvZnRsdnM7ICAgICAgICAvKiBMQU5FMjogaWYgIT0gMCwgdGx2cyBmb2xsb3cgKi8gCi0gICAgICAgIHVuaW9uIHsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgewotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07Ci0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBmbGFnOy8qIFRvcG9sb2d5X2NoYW5nZSBmbGFnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVmbGFnLCBwZXJtYW5lbnQgZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWNpZCwgdHJhbnNhY3Rpb24gaWQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB0YXJnZXRsZXNzX2xlX2FycDsgLyogTEFORTIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBub19zb3VyY2VfbGVfbmFycDsgLyogTEFORTIgKi8KLSAgICAgICAgICAgICAgICB9IG5vcm1hbDsKLSAgICAgICAgICAgICAgICBzdHJ1Y3QgYXRtbGVjX2NvbmZpZ19tc2cgY29uZmlnOwotICAgICAgICAgICAgICAgIHN0cnVjdCB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZWNfaWQ7ICAgICAgICAgICAgICAgICAgICAgLyogcmVxdWVzdG9yIGxlY19pZCAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHRyYW5faWQ7ICAgICAgICAgICAgICAgICAgICAvKiB0cmFuc2FjdGlvbiBpZCAgICAqLwotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07ICAgIC8qIGRzdCBtYWMgYWRkciAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsgLyogcmVxZXN0b3IgQVRNIGFkZHIgKi8KLSAgICAgICAgICAgICAgICB9IHByb3h5OwotCQkgICAgIC8qIEZvciBtYXBwaW5nIExFX0FSUCByZXF1ZXN0cyB0byByZXNwb25zZXMuIEZpbGxlZCBieSAqLwotICAgICAgICB9IGNvbnRlbnQ7ICAgICAgIC8qIHplcHBlbGluLCByZXR1cm5lZCBieSBrZXJuZWwuIFVzZWQgb25seSB3aGVuIHByb3h5aW5nICovIAorCWF0bWxlY19tc2dfdHlwZSB0eXBlOworCWludCBzaXplb2Z0bHZzOwkJLyogTEFORTI6IGlmICE9IDAsIHRsdnMgZm9sbG93ICovCisJdW5pb24geworCQlzdHJ1Y3QgeworCQkJdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07CisJCQl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsKKwkJCXVuc2lnbmVkIGludCBmbGFnOwkvKgorCQkJCQkJICogVG9wb2xvZ3lfY2hhbmdlIGZsYWcsCisJCQkJCQkgKiByZW1vdGVmbGFnLCBwZXJtYW5lbnQgZmxhZywKKwkJCQkJCSAqIGxlY2lkLCB0cmFuc2FjdGlvbiBpZAorCQkJCQkJICovCisJCQl1bnNpZ25lZCBpbnQgdGFyZ2V0bGVzc19sZV9hcnA7CS8qIExBTkUyICovCisJCQl1bnNpZ25lZCBpbnQgbm9fc291cmNlX2xlX25hcnA7CS8qIExBTkUyICovCisJCX0gbm9ybWFsOworCQlzdHJ1Y3QgYXRtbGVjX2NvbmZpZ19tc2cgY29uZmlnOworCQlzdHJ1Y3QgeworCQkJdWludDE2X3QgbGVjX2lkOwkJCS8qIHJlcXVlc3RvciBsZWNfaWQgICovCisJCQl1aW50MzJfdCB0cmFuX2lkOwkJCS8qIHRyYW5zYWN0aW9uIGlkICAgICovCisJCQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogZHN0IG1hYyBhZGRyICAgICAgKi8KKwkJCXVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOwkvKiByZXFlc3RvciBBVE0gYWRkciAqLworCQl9IHByb3h5OwkvKgorCQkJCSAqIEZvciBtYXBwaW5nIExFX0FSUCByZXF1ZXN0cyB0byByZXNwb25zZXMuIEZpbGxlZCBieQorCQkJCSAqIHplcHBlbGluLCByZXR1cm5lZCBieSBrZXJuZWwuIFVzZWQgb25seSB3aGVuIHByb3h5aW5nCisJCQkJICovCisJfSBjb250ZW50OwogfSBfX0FUTV9BUElfQUxJR047CiAKIHN0cnVjdCBhdG1sZWNfaW9jIHsKLSAgICAgICAgaW50IGRldl9udW07Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgYXRtX2FkZHJbQVRNX0VTQV9MRU5dOwotICAgICAgICB1bnNpZ25lZCBjaGFyIHJlY2VpdmU7ICAgIC8qIDE9IHJlY2VpdmUgdmNjLCAwID0gc2VuZCB2Y2MgKi8KKwlpbnQgZGV2X251bTsKKwl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsKKwl1bnNpZ25lZCBjaGFyIHJlY2VpdmU7CS8qIDE9IHJlY2VpdmUgdmNjLCAwID0gc2VuZCB2Y2MgKi8KIH07CiAjZW5kaWYgLyogX0FUTUxFQ19IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9hdWRpdC5oIGIvaW5jbHVkZS9saW51eC9hdWRpdC5oCmluZGV4IDQwYTZjMjYuLmMzYWEwOTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYXVkaXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2F1ZGl0LmgKQEAgLTk1LDYgKzk1LDExIEBACiAjZGVmaW5lIEFVRElUX01BQ19QT0xJQ1lfTE9BRAkxNDAzCS8qIFBvbGljeSBmaWxlIGxvYWQgKi8KICNkZWZpbmUgQVVESVRfTUFDX1NUQVRVUwkxNDA0CS8qIENoYW5nZWQgZW5mb3JjaW5nLHBlcm1pc3NpdmUsb2ZmICovCiAjZGVmaW5lIEFVRElUX01BQ19DT05GSUdfQ0hBTkdFCTE0MDUJLyogQ2hhbmdlcyB0byBib29sZWFucyAqLworI2RlZmluZSBBVURJVF9NQUNfVU5MQkxfQUxMT1cJMTQwNgkvKiBOZXRMYWJlbDogYWxsb3cgdW5sYWJlbGVkIHRyYWZmaWMgKi8KKyNkZWZpbmUgQVVESVRfTUFDX0NJUFNPVjRfQURECTE0MDcJLyogTmV0TGFiZWw6IGFkZCBDSVBTT3Y0IERPSSBlbnRyeSAqLworI2RlZmluZSBBVURJVF9NQUNfQ0lQU09WNF9ERUwJMTQwOAkvKiBOZXRMYWJlbDogZGVsIENJUFNPdjQgRE9JIGVudHJ5ICovCisjZGVmaW5lIEFVRElUX01BQ19NQVBfQURECTE0MDkJLyogTmV0TGFiZWw6IGFkZCBMU00gZG9tYWluIG1hcHBpbmcgKi8KKyNkZWZpbmUgQVVESVRfTUFDX01BUF9ERUwJMTQxMAkvKiBOZXRMYWJlbDogZGVsIExTTSBkb21haW4gbWFwcGluZyAqLwogCiAjZGVmaW5lIEFVRElUX0ZJUlNUX0tFUk5fQU5PTV9NU0cgICAxNzAwCiAjZGVmaW5lIEFVRElUX0xBU1RfS0VSTl9BTk9NX01TRyAgICAxNzk5CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jpby5oIGIvaW5jbHVkZS9saW51eC9iaW8uaAppbmRleCA3NmJkYWVhLi43MTFjMzIxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jpby5oCisrKyBiL2luY2x1ZGUvbGludXgvYmlvLmgKQEAgLTE0OCw2ICsxNDgsNyBAQAogI2RlZmluZSBCSU9fUldfQkFSUklFUgkyCiAjZGVmaW5lIEJJT19SV19GQUlMRkFTVAkzCiAjZGVmaW5lIEJJT19SV19TWU5DCTQKKyNkZWZpbmUgQklPX1JXX01FVEEJNQogCiAvKgogICogdXBwZXIgMTYgYml0cyBvZiBiaV9ydyBkZWZpbmUgdGhlIGlvIHByaW9yaXR5IG9mIHRoaXMgYmlvCkBAIC0xNzgsNiArMTc5LDcgQEAKICNkZWZpbmUgYmlvX3N5bmMoYmlvKQkJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19TWU5DKSkKICNkZWZpbmUgYmlvX2ZhaWxmYXN0KGJpbykJKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19GQUlMRkFTVCkpCiAjZGVmaW5lIGJpb19yd19haGVhZChiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfQUhFQUQpKQorI2RlZmluZSBiaW9fcndfbWV0YShiaW8pCSgoYmlvKS0+YmlfcncgJiAoMSA8PCBCSU9fUldfTUVUQSkpCiAKIC8qCiAgKiB3aWxsIGRpZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaCBiL2luY2x1ZGUvbGludXgvYmxrZGV2LmgKaW5kZXggYzc3M2VlNS4uMWQ3OWI4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ibGtkZXYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Jsa2Rldi5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfQkxLREVWX0gKICNkZWZpbmUgX0xJTlVYX0JMS0RFVl9ICiAKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgogI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CiAjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CkBAIC0xNiw2ICsxNywyMiBAQAogCiAjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CiAKKyNpZmRlZiBDT05GSUdfTEJECisjIGluY2x1ZGUgPGFzbS9kaXY2NC5oPgorIyBkZWZpbmUgc2VjdG9yX2RpdihhLCBiKSBkb19kaXYoYSwgYikKKyNlbHNlCisjIGRlZmluZSBzZWN0b3JfZGl2KG4sIGIpKCBcCit7IFwKKwlpbnQgX3JlczsgXAorCV9yZXMgPSAobikgJSAoYik7IFwKKwkobikgLz0gKGIpOyBcCisJX3JlczsgXAorfSBcCispCisjZW5kaWYKKworI2lmZGVmIENPTkZJR19CTE9DSworCiBzdHJ1Y3Qgc2NzaV9pb2N0bF9jb21tYW5kOwogCiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKQEAgLTkwLDcgKzEwNyw3IEBACiAJYXRvbWljX3QgcmVmY291bnQ7CiAJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwogCi0JaW50ICgqc2V0X2lvcHJpbykoc3RydWN0IGlvX2NvbnRleHQgKiwgdW5zaWduZWQgaW50KTsKKwl1bnNpZ25lZCBpbnQgaW9wcmlvX2NoYW5nZWQ7CiAKIAkvKgogCSAqIEZvciByZXF1ZXN0IGJhdGNoaW5nCkBAIC0xMDQsOCArMTIxLDcgQEAKIAogdm9pZCBwdXRfaW9fY29udGV4dChzdHJ1Y3QgaW9fY29udGV4dCAqaW9jKTsKIHZvaWQgZXhpdF9pb19jb250ZXh0KHZvaWQpOwotc3RydWN0IGlvX2NvbnRleHQgKmN1cnJlbnRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MpOwotc3RydWN0IGlvX2NvbnRleHQgKmdldF9pb19jb250ZXh0KGdmcF90IGdmcF9mbGFncyk7CitzdHJ1Y3QgaW9fY29udGV4dCAqZ2V0X2lvX2NvbnRleHQoZ2ZwX3QgZ2ZwX2ZsYWdzLCBpbnQgbm9kZSk7CiB2b2lkIGNvcHlfaW9fY29udGV4dChzdHJ1Y3QgaW9fY29udGV4dCAqKnBkc3QsIHN0cnVjdCBpb19jb250ZXh0ICoqcHNyYyk7CiB2b2lkIHN3YXBfaW9fY29udGV4dChzdHJ1Y3QgaW9fY29udGV4dCAqKmlvYzEsIHN0cnVjdCBpb19jb250ZXh0ICoqaW9jMik7CiAKQEAgLTEyMCw2ICsxMzYsOTAgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0WzJdOwogfTsKIAorLyoKKyAqIHJlcXVlc3QgY29tbWFuZCB0eXBlcworICovCitlbnVtIHJxX2NtZF90eXBlX2JpdHMgeworCVJFUV9UWVBFX0ZTCQk9IDEsCS8qIGZzIHJlcXVlc3QgKi8KKwlSRVFfVFlQRV9CTE9DS19QQywJCS8qIHNjc2kgY29tbWFuZCAqLworCVJFUV9UWVBFX1NFTlNFLAkJCS8qIHNlbnNlIHJlcXVlc3QgKi8KKwlSRVFfVFlQRV9QTV9TVVNQRU5ELAkJLyogc3VzcGVuZCByZXF1ZXN0ICovCisJUkVRX1RZUEVfUE1fUkVTVU1FLAkJLyogcmVzdW1lIHJlcXVlc3QgKi8KKwlSRVFfVFlQRV9QTV9TSFVURE9XTiwJCS8qIHNodXRkb3duIHJlcXVlc3QgKi8KKwlSRVFfVFlQRV9GTFVTSCwJCQkvKiBmbHVzaCByZXF1ZXN0ICovCisJUkVRX1RZUEVfU1BFQ0lBTCwJCS8qIGRyaXZlciBkZWZpbmVkIHR5cGUgKi8KKwlSRVFfVFlQRV9MSU5VWF9CTE9DSywJCS8qIGdlbmVyaWMgYmxvY2sgbGF5ZXIgbWVzc2FnZSAqLworCS8qCisJICogZm9yIEFUQS9BVEFQSSBkZXZpY2VzLiB0aGlzIHJlYWxseSBkb2Vzbid0IGJlbG9uZyBoZXJlLCBpZGUgc2hvdWxkCisJICogdXNlIFJFUV9UWVBFX1NQRUNJQUwgYW5kIHVzZSBycS0+Y21kWzBdIHdpdGggdGhlIHJhbmdlIG9mIGRyaXZlcgorCSAqIHByaXZhdGUgUkVRX0xCIG9wY29kZXMgdG8gZGlmZmVyZW50aWF0ZSB3aGF0IHR5cGUgb2YgcmVxdWVzdCB0aGlzIGlzCisJICovCisJUkVRX1RZUEVfQVRBX0NNRCwKKwlSRVFfVFlQRV9BVEFfVEFTSywKKwlSRVFfVFlQRV9BVEFfVEFTS0ZJTEUsCit9OworCisvKgorICogRm9yIHJlcXVlc3Qgb2YgdHlwZSBSRVFfVFlQRV9MSU5VWF9CTE9DSywgcnEtPmNtZFswXSBpcyB0aGUgb3Bjb2RlIGJlaW5nCisgKiBzZW50IGRvd24gKHNpbWlsYXIgdG8gaG93IFJFUV9UWVBFX0JMT0NLX1BDIG1lYW5zIHRoYXQgLT5jbWRbXSBob2xkcyBhCisgKiBTQ1NJIGNkYi4KKyAqCisgKiAweDAwIC0+IDB4M2YgYXJlIGRyaXZlciBwcml2YXRlLCB0byBiZSB1c2VkIGZvciB3aGF0ZXZlciBwdXJwb3NlIHRoZXkgbmVlZCwKKyAqIHR5cGljYWxseSB0byBkaWZmZXJlbnRpYXRlIFJFUV9UWVBFX1NQRUNJQUwgcmVxdWVzdHMuCisgKgorICovCitlbnVtIHsKKwkvKgorCSAqIGp1c3QgZXhhbXBsZXMgZm9yIG5vdworCSAqLworCVJFUV9MQl9PUF9FSkVDVAk9IDB4NDAsCQkvKiBlamVjdCByZXF1ZXN0ICovCisJUkVRX0xCX09QX0ZMVVNIID0gMHg0MSwJCS8qIGZsdXNoIGRldmljZSAqLworfTsKKworLyoKKyAqIHJlcXVlc3QgdHlwZSBtb2RpZmllZCBiaXRzLiBmaXJzdCB0aHJlZSBiaXRzIG1hdGNoIEJJT19SVyogYml0cywgaW1wb3J0YW50CisgKi8KK2VudW0gcnFfZmxhZ19iaXRzIHsKKwlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KKwlfX1JFUV9GQUlMRkFTVCwJCS8qIG5vIGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcyAqLworCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLworCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLworCV9fUkVRX0hBUkRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBkcml2ZSBlaXRoZXIgKi8KKwlfX1JFUV9GVUEsCQkvKiBmb3JjZWQgdW5pdCBhY2Nlc3MgKi8KKwlfX1JFUV9OT01FUkdFLAkJLyogZG9uJ3QgdG91Y2ggdGhpcyBmb3IgbWVyZ2luZyAqLworCV9fUkVRX1NUQVJURUQsCQkvKiBkcml2ZSBhbHJlYWR5IG1heSBoYXZlIHN0YXJ0ZWQgdGhpcyBvbmUgKi8KKwlfX1JFUV9ET05UUFJFUCwJCS8qIGRvbid0IGNhbGwgcHJlcCBmb3IgdGhpcyBvbmUgKi8KKwlfX1JFUV9RVUVVRUQsCQkvKiB1c2VzIHF1ZXVlaW5nICovCisJX19SRVFfRUxWUFJJViwJCS8qIGVsZXZhdG9yIHByaXZhdGUgZGF0YSBhdHRhY2hlZCAqLworCV9fUkVRX0ZBSUxFRCwJCS8qIHNldCBpZiB0aGUgcmVxdWVzdCBmYWlsZWQgKi8KKwlfX1JFUV9RVUlFVCwJCS8qIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyAqLworCV9fUkVRX1BSRUVNUFQsCQkvKiBzZXQgZm9yICJpZGVfcHJlZW1wdCIgcmVxdWVzdHMgKi8KKwlfX1JFUV9PUkRFUkVEX0NPTE9SLAkvKiBpcyBiZWZvcmUgb3IgYWZ0ZXIgYmFycmllciAqLworCV9fUkVRX1JXX1NZTkMsCQkvKiByZXF1ZXN0IGlzIHN5bmMgKE9fRElSRUNUKSAqLworCV9fUkVRX0FMTE9DRUQsCQkvKiByZXF1ZXN0IGNhbWUgZnJvbSBvdXIgYWxsb2MgcG9vbCAqLworCV9fUkVRX1JXX01FVEEsCQkvKiBtZXRhZGF0YSBpbyByZXF1ZXN0ICovCisJX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KK307CisKKyNkZWZpbmUgUkVRX1JXCQkoMSA8PCBfX1JFUV9SVykKKyNkZWZpbmUgUkVRX0ZBSUxGQVNUCSgxIDw8IF9fUkVRX0ZBSUxGQVNUKQorI2RlZmluZSBSRVFfU09SVEVECSgxIDw8IF9fUkVRX1NPUlRFRCkKKyNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSCSgxIDw8IF9fUkVRX1NPRlRCQVJSSUVSKQorI2RlZmluZSBSRVFfSEFSREJBUlJJRVIJKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCisjZGVmaW5lIFJFUV9GVUEJCSgxIDw8IF9fUkVRX0ZVQSkKKyNkZWZpbmUgUkVRX05PTUVSR0UJKDEgPDwgX19SRVFfTk9NRVJHRSkKKyNkZWZpbmUgUkVRX1NUQVJURUQJKDEgPDwgX19SRVFfU1RBUlRFRCkKKyNkZWZpbmUgUkVRX0RPTlRQUkVQCSgxIDw8IF9fUkVRX0RPTlRQUkVQKQorI2RlZmluZSBSRVFfUVVFVUVECSgxIDw8IF9fUkVRX1FVRVVFRCkKKyNkZWZpbmUgUkVRX0VMVlBSSVYJKDEgPDwgX19SRVFfRUxWUFJJVikKKyNkZWZpbmUgUkVRX0ZBSUxFRAkoMSA8PCBfX1JFUV9GQUlMRUQpCisjZGVmaW5lIFJFUV9RVUlFVAkoMSA8PCBfX1JFUV9RVUlFVCkKKyNkZWZpbmUgUkVRX1BSRUVNUFQJKDEgPDwgX19SRVFfUFJFRU1QVCkKKyNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IJKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKKyNkZWZpbmUgUkVRX1JXX1NZTkMJKDEgPDwgX19SRVFfUldfU1lOQykKKyNkZWZpbmUgUkVRX0FMTE9DRUQJKDEgPDwgX19SRVFfQUxMT0NFRCkKKyNkZWZpbmUgUkVRX1JXX01FVEEJKDEgPDwgX19SRVFfUldfTUVUQSkKKwogI2RlZmluZSBCTEtfTUFYX0NEQgkxNgogCiAvKgpAQCAtMTI5LDMwICsyMjksNDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkIHF1ZXVlbGlzdDsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRvbmVsaXN0OwogCi0JdW5zaWduZWQgbG9uZyBmbGFnczsJCS8qIHNlZSBSRVFfIGJpdHMgYmVsb3cgKi8KKwlyZXF1ZXN0X3F1ZXVlX3QgKnE7CisKKwl1bnNpZ25lZCBpbnQgY21kX2ZsYWdzOworCWVudW0gcnFfY21kX3R5cGVfYml0cyBjbWRfdHlwZTsKIAogCS8qIE1haW50YWluIGJpbyB0cmF2ZXJzYWwgc3RhdGUgZm9yIHBhcnQgYnkgcGFydCBJL08gc3VibWlzc2lvbi4KIAkgKiBoYXJkXyogYXJlIGJsb2NrIGxheWVyIGludGVybmFscywgbm8gZHJpdmVyIHNob3VsZCB0b3VjaCB0aGVtIQogCSAqLwogCiAJc2VjdG9yX3Qgc2VjdG9yOwkJLyogbmV4dCBzZWN0b3IgdG8gc3VibWl0ICovCisJc2VjdG9yX3QgaGFyZF9zZWN0b3I7CQkvKiBuZXh0IHNlY3RvciB0byBjb21wbGV0ZSAqLwogCXVuc2lnbmVkIGxvbmcgbnJfc2VjdG9yczsJLyogbm8uIG9mIHNlY3RvcnMgbGVmdCB0byBzdWJtaXQgKi8KKwl1bnNpZ25lZCBsb25nIGhhcmRfbnJfc2VjdG9yczsJLyogbm8uIG9mIHNlY3RvcnMgbGVmdCB0byBjb21wbGV0ZSAqLwogCS8qIG5vLiBvZiBzZWN0b3JzIGxlZnQgdG8gc3VibWl0IGluIHRoZSBjdXJyZW50IHNlZ21lbnQgKi8KIAl1bnNpZ25lZCBpbnQgY3VycmVudF9ucl9zZWN0b3JzOwogCi0Jc2VjdG9yX3QgaGFyZF9zZWN0b3I7CQkvKiBuZXh0IHNlY3RvciB0byBjb21wbGV0ZSAqLwotCXVuc2lnbmVkIGxvbmcgaGFyZF9ucl9zZWN0b3JzOwkvKiBuby4gb2Ygc2VjdG9ycyBsZWZ0IHRvIGNvbXBsZXRlICovCiAJLyogbm8uIG9mIHNlY3RvcnMgbGVmdCB0byBjb21wbGV0ZSBpbiB0aGUgY3VycmVudCBzZWdtZW50ICovCiAJdW5zaWduZWQgaW50IGhhcmRfY3VyX3NlY3RvcnM7CiAKIAlzdHJ1Y3QgYmlvICpiaW87CiAJc3RydWN0IGJpbyAqYmlvdGFpbDsKIAotCXZvaWQgKmVsZXZhdG9yX3ByaXZhdGU7Ci0Jdm9pZCAqY29tcGxldGlvbl9kYXRhOworCXN0cnVjdCBobGlzdF9ub2RlIGhhc2g7CS8qIG1lcmdlIGhhc2ggKi8KKwkvKgorCSAqIFRoZSByYl9ub2RlIGlzIG9ubHkgdXNlZCBpbnNpZGUgdGhlIGlvIHNjaGVkdWxlciwgcmVxdWVzdHMKKwkgKiBhcmUgcHJ1bmVkIHdoZW4gbW92ZWQgdG8gdGhlIGRpc3BhdGNoIHF1ZXVlLiBTbyBsZXQgdGhlCisJICogY29tcGxldGlvbl9kYXRhIHNoYXJlIHNwYWNlIHdpdGggdGhlIHJiX25vZGUuCisJICovCisJdW5pb24geworCQlzdHJ1Y3QgcmJfbm9kZSByYl9ub2RlOwkvKiBzb3J0L2xvb2t1cCAqLworCQl2b2lkICpjb21wbGV0aW9uX2RhdGE7CisJfTsKIAotCWludCBycV9zdGF0dXM7CS8qIHNob3VsZCBzcGxpdCB0aGlzIGludG8gYSBmZXcgc3RhdHVzIGJpdHMgKi8KLQlpbnQgZXJyb3JzOworCS8qCisJICogdHdvIHBvaW50ZXJzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBJTyBzY2hlZHVsZXJzLCBpZiB0aGV5IG5lZWQKKwkgKiBtb3JlIHRoZXkgaGF2ZSB0byBkeW5hbWljYWxseSBhbGxvY2F0ZSBpdC4KKwkgKi8KKwl2b2lkICplbGV2YXRvcl9wcml2YXRlOworCXZvaWQgKmVsZXZhdG9yX3ByaXZhdGUyOworCiAJc3RydWN0IGdlbmRpc2sgKnJxX2Rpc2s7CiAJdW5zaWduZWQgbG9uZyBzdGFydF90aW1lOwogCkBAIC0xNzAsMTYgKzI4NiwxNCBAQAogCiAJdW5zaWduZWQgc2hvcnQgaW9wcmlvOwogCi0JaW50IHRhZzsKLQotCWludCByZWZfY291bnQ7Ci0JcmVxdWVzdF9xdWV1ZV90ICpxOwotCXN0cnVjdCByZXF1ZXN0X2xpc3QgKnJsOwotCi0Jc3RydWN0IGNvbXBsZXRpb24gKndhaXRpbmc7CiAJdm9pZCAqc3BlY2lhbDsKIAljaGFyICpidWZmZXI7CiAKKwlpbnQgdGFnOworCWludCBlcnJvcnM7CisKKwlpbnQgcmVmX2NvdW50OworCiAJLyoKIAkgKiB3aGVuIHJlcXVlc3QgaXMgdXNlZCBhcyBhIHBhY2tldCBjb21tYW5kIGNhcnJpZXIKIAkgKi8KQEAgLTE5NSw4MCArMzA5LDE0IEBACiAJaW50IHJldHJpZXM7CiAKIAkvKgotCSAqIGNvbXBsZXRpb24gY2FsbGJhY2suIGVuZF9pb19kYXRhIHNob3VsZCBiZSBmb2xkZWQgaW4gd2l0aCB3YWl0aW5nCisJICogY29tcGxldGlvbiBjYWxsYmFjay4KIAkgKi8KIAlycV9lbmRfaW9fZm4gKmVuZF9pbzsKIAl2b2lkICplbmRfaW9fZGF0YTsKIH07CiAKIC8qCi0gKiBmaXJzdCB0aHJlZSBiaXRzIG1hdGNoIEJJT19SVyogYml0cywgaW1wb3J0YW50Ci0gKi8KLWVudW0gcnFfZmxhZ19iaXRzIHsKLQlfX1JFUV9SVywJCS8qIG5vdCBzZXQsIHJlYWQuIHNldCwgd3JpdGUgKi8KLQlfX1JFUV9GQUlMRkFTVCwJCS8qIG5vIGxvdyBsZXZlbCBkcml2ZXIgcmV0cmllcyAqLwotCV9fUkVRX1NPUlRFRCwJCS8qIGVsZXZhdG9yIGtub3dzIGFib3V0IHRoaXMgcmVxdWVzdCAqLwotCV9fUkVRX1NPRlRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBpb3NjaGVkdWxlciAqLwotCV9fUkVRX0hBUkRCQVJSSUVSLAkvKiBtYXkgbm90IGJlIHBhc3NlZCBieSBkcml2ZSBlaXRoZXIgKi8KLQlfX1JFUV9GVUEsCQkvKiBmb3JjZWQgdW5pdCBhY2Nlc3MgKi8KLQlfX1JFUV9DTUQsCQkvKiBpcyBhIHJlZ3VsYXIgZnMgcncgcmVxdWVzdCAqLwotCV9fUkVRX05PTUVSR0UsCQkvKiBkb24ndCB0b3VjaCB0aGlzIGZvciBtZXJnaW5nICovCi0JX19SRVFfU1RBUlRFRCwJCS8qIGRyaXZlIGFscmVhZHkgbWF5IGhhdmUgc3RhcnRlZCB0aGlzIG9uZSAqLwotCV9fUkVRX0RPTlRQUkVQLAkJLyogZG9uJ3QgY2FsbCBwcmVwIGZvciB0aGlzIG9uZSAqLwotCV9fUkVRX1FVRVVFRCwJCS8qIHVzZXMgcXVldWVpbmcgKi8KLQlfX1JFUV9FTFZQUklWLAkJLyogZWxldmF0b3IgcHJpdmF0ZSBkYXRhIGF0dGFjaGVkICovCi0JLyoKLQkgKiBmb3IgQVRBL0FUQVBJIGRldmljZXMKLQkgKi8KLQlfX1JFUV9QQywJCS8qIHBhY2tldCBjb21tYW5kIChzcGVjaWFsKSAqLwotCV9fUkVRX0JMT0NLX1BDLAkJLyogcXVldWVkIGRvd24gcGMgZnJvbSBibG9jayBsYXllciAqLwotCV9fUkVRX1NFTlNFLAkJLyogc2Vuc2UgcmV0cml2YWwgKi8KLQotCV9fUkVRX0ZBSUxFRCwJCS8qIHNldCBpZiB0aGUgcmVxdWVzdCBmYWlsZWQgKi8KLQlfX1JFUV9RVUlFVCwJCS8qIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyAqLwotCV9fUkVRX1NQRUNJQUwsCQkvKiBkcml2ZXIgc3VwbGllZCBjb21tYW5kICovCi0JX19SRVFfRFJJVkVfQ01ELAotCV9fUkVRX0RSSVZFX1RBU0ssCi0JX19SRVFfRFJJVkVfVEFTS0ZJTEUsCi0JX19SRVFfUFJFRU1QVCwJCS8qIHNldCBmb3IgImlkZV9wcmVlbXB0IiByZXF1ZXN0cyAqLwotCV9fUkVRX1BNX1NVU1BFTkQsCS8qIHN1c3BlbmQgcmVxdWVzdCAqLwotCV9fUkVRX1BNX1JFU1VNRSwJLyogcmVzdW1lIHJlcXVlc3QgKi8KLQlfX1JFUV9QTV9TSFVURE9XTiwJLyogc2h1dGRvd24gcmVxdWVzdCAqLwotCV9fUkVRX09SREVSRURfQ09MT1IsCS8qIGlzIGJlZm9yZSBvciBhZnRlciBiYXJyaWVyICovCi0JX19SRVFfUldfU1lOQywJCS8qIHJlcXVlc3QgaXMgc3luYyAoT19ESVJFQ1QpICovCi0JX19SRVFfTlJfQklUUywJCS8qIHN0b3BzIGhlcmUgKi8KLX07Ci0KLSNkZWZpbmUgUkVRX1JXCQkoMSA8PCBfX1JFUV9SVykKLSNkZWZpbmUgUkVRX0ZBSUxGQVNUCSgxIDw8IF9fUkVRX0ZBSUxGQVNUKQotI2RlZmluZSBSRVFfU09SVEVECSgxIDw8IF9fUkVRX1NPUlRFRCkKLSNkZWZpbmUgUkVRX1NPRlRCQVJSSUVSCSgxIDw8IF9fUkVRX1NPRlRCQVJSSUVSKQotI2RlZmluZSBSRVFfSEFSREJBUlJJRVIJKDEgPDwgX19SRVFfSEFSREJBUlJJRVIpCi0jZGVmaW5lIFJFUV9GVUEJCSgxIDw8IF9fUkVRX0ZVQSkKLSNkZWZpbmUgUkVRX0NNRAkJKDEgPDwgX19SRVFfQ01EKQotI2RlZmluZSBSRVFfTk9NRVJHRQkoMSA8PCBfX1JFUV9OT01FUkdFKQotI2RlZmluZSBSRVFfU1RBUlRFRAkoMSA8PCBfX1JFUV9TVEFSVEVEKQotI2RlZmluZSBSRVFfRE9OVFBSRVAJKDEgPDwgX19SRVFfRE9OVFBSRVApCi0jZGVmaW5lIFJFUV9RVUVVRUQJKDEgPDwgX19SRVFfUVVFVUVEKQotI2RlZmluZSBSRVFfRUxWUFJJVgkoMSA8PCBfX1JFUV9FTFZQUklWKQotI2RlZmluZSBSRVFfUEMJCSgxIDw8IF9fUkVRX1BDKQotI2RlZmluZSBSRVFfQkxPQ0tfUEMJKDEgPDwgX19SRVFfQkxPQ0tfUEMpCi0jZGVmaW5lIFJFUV9TRU5TRQkoMSA8PCBfX1JFUV9TRU5TRSkKLSNkZWZpbmUgUkVRX0ZBSUxFRAkoMSA8PCBfX1JFUV9GQUlMRUQpCi0jZGVmaW5lIFJFUV9RVUlFVAkoMSA8PCBfX1JFUV9RVUlFVCkKLSNkZWZpbmUgUkVRX1NQRUNJQUwJKDEgPDwgX19SRVFfU1BFQ0lBTCkKLSNkZWZpbmUgUkVRX0RSSVZFX0NNRAkoMSA8PCBfX1JFUV9EUklWRV9DTUQpCi0jZGVmaW5lIFJFUV9EUklWRV9UQVNLCSgxIDw8IF9fUkVRX0RSSVZFX1RBU0spCi0jZGVmaW5lIFJFUV9EUklWRV9UQVNLRklMRQkoMSA8PCBfX1JFUV9EUklWRV9UQVNLRklMRSkKLSNkZWZpbmUgUkVRX1BSRUVNUFQJKDEgPDwgX19SRVFfUFJFRU1QVCkKLSNkZWZpbmUgUkVRX1BNX1NVU1BFTkQJKDEgPDwgX19SRVFfUE1fU1VTUEVORCkKLSNkZWZpbmUgUkVRX1BNX1JFU1VNRQkoMSA8PCBfX1JFUV9QTV9SRVNVTUUpCi0jZGVmaW5lIFJFUV9QTV9TSFVURE9XTgkoMSA8PCBfX1JFUV9QTV9TSFVURE9XTikKLSNkZWZpbmUgUkVRX09SREVSRURfQ09MT1IJKDEgPDwgX19SRVFfT1JERVJFRF9DT0xPUikKLSNkZWZpbmUgUkVRX1JXX1NZTkMJKDEgPDwgX19SRVFfUldfU1lOQykKLQotLyoKLSAqIFN0YXRlIGluZm9ybWF0aW9uIGNhcnJpZWQgZm9yIFJFUV9QTV9TVVNQRU5EIGFuZCBSRVFfUE1fUkVTVU1FCisgKiBTdGF0ZSBpbmZvcm1hdGlvbiBjYXJyaWVkIGZvciBSRVFfVFlQRV9QTV9TVVNQRU5EIGFuZCBSRVFfVFlQRV9QTV9SRVNVTUUKICAqIHJlcXVlc3RzLiBTb21lIHN0ZXAgdmFsdWVzIGNvdWxkIGV2ZW50dWFsbHkgYmUgbWFkZSBnZW5lcmljLgogICovCiBzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZQpAQCAtNDE3LDkgKzQ2NSw5IEBACiAJdW5zaWduZWQgaW50CQlzZ190aW1lb3V0OwogCXVuc2lnbmVkIGludAkJc2dfcmVzZXJ2ZWRfc2l6ZTsKIAlpbnQJCQlub2RlOwotCisjaWZkZWYgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UKIAlzdHJ1Y3QgYmxrX3RyYWNlCSpibGtfdHJhY2U7Ci0KKyNlbmRpZgogCS8qCiAJICogcmVzZXJ2ZWQgZm9yIGZsdXNoIG9wZXJhdGlvbnMKIAkgKi8KQEAgLTQzMiw5ICs0ODAsNiBAQAogCXN0cnVjdCBtdXRleAkJc3lzZnNfbG9jazsKIH07CiAKLSNkZWZpbmUgUlFfSU5BQ1RJVkUJCSgtMSkKLSNkZWZpbmUgUlFfQUNUSVZFCQkxCi0KICNkZWZpbmUgUVVFVUVfRkxBR19DTFVTVEVSCTAJLyogY2x1c3RlciBzZXZlcmFsIHNlZ21lbnRzIGludG8gMSAqLwogI2RlZmluZSBRVUVVRV9GTEFHX1FVRVVFRAkxCS8qIHVzZXMgZ2VuZXJpYyB0YWcgcXVldWVpbmcgKi8KICNkZWZpbmUgUVVFVUVfRkxBR19TVE9QUEVECTIJLyogcXVldWUgaXMgc3RvcHBlZCAqLwpAQCAtNDkwLDI1ICs1MzUsMzQgQEAKICNkZWZpbmUgYmxrX3F1ZXVlX3N0b3BwZWQocSkJdGVzdF9iaXQoUVVFVUVfRkxBR19TVE9QUEVELCAmKHEpLT5xdWV1ZV9mbGFncykKICNkZWZpbmUgYmxrX3F1ZXVlX2ZsdXNoaW5nKHEpCSgocSktPm9yZHNlcSkKIAotI2RlZmluZSBibGtfZnNfcmVxdWVzdChycSkJKChycSktPmZsYWdzICYgUkVRX0NNRCkKLSNkZWZpbmUgYmxrX3BjX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9CTE9DS19QQykKLSNkZWZpbmUgYmxrX25vcmV0cnlfcmVxdWVzdChycSkJKChycSktPmZsYWdzICYgUkVRX0ZBSUxGQVNUKQotI2RlZmluZSBibGtfcnFfc3RhcnRlZChycSkJKChycSktPmZsYWdzICYgUkVRX1NUQVJURUQpCisjZGVmaW5lIGJsa19mc19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisjZGVmaW5lIGJsa19wY19yZXF1ZXN0KHJxKQkoKHJxKS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQkxPQ0tfUEMpCisjZGVmaW5lIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9TUEVDSUFMKQorI2RlZmluZSBibGtfc2Vuc2VfcmVxdWVzdChycSkJKChycSktPmNtZF90eXBlID09IFJFUV9UWVBFX1NFTlNFKQorCisjZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRkFJTEZBU1QpCisjZGVmaW5lIGJsa19ycV9zdGFydGVkKHJxKQkoKHJxKS0+Y21kX2ZsYWdzICYgUkVRX1NUQVJURUQpCiAKICNkZWZpbmUgYmxrX2FjY291bnRfcnEocnEpCShibGtfcnFfc3RhcnRlZChycSkgJiYgYmxrX2ZzX3JlcXVlc3QocnEpKQogCi0jZGVmaW5lIGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9QTV9TVVNQRU5EKQotI2RlZmluZSBibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpCSgocnEpLT5mbGFncyAmIFJFUV9QTV9SRVNVTUUpCisjZGVmaW5lIGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9TVVNQRU5EKQorI2RlZmluZSBibGtfcG1fcmVzdW1lX3JlcXVlc3QocnEpCSgocnEpLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9QTV9SRVNVTUUpCiAjZGVmaW5lIGJsa19wbV9yZXF1ZXN0KHJxKQlcCi0JKChycSktPmZsYWdzICYgKFJFUV9QTV9TVVNQRU5EIHwgUkVRX1BNX1JFU1VNRSkpCisJKGJsa19wbV9zdXNwZW5kX3JlcXVlc3QocnEpIHx8IGJsa19wbV9yZXN1bWVfcmVxdWVzdChycSkpCiAKLSNkZWZpbmUgYmxrX3NvcnRlZF9ycShycSkJKChycSktPmZsYWdzICYgUkVRX1NPUlRFRCkKLSNkZWZpbmUgYmxrX2JhcnJpZXJfcnEocnEpCSgocnEpLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKLSNkZWZpbmUgYmxrX2Z1YV9ycShycSkJCSgocnEpLT5mbGFncyAmIFJFUV9GVUEpCisjZGVmaW5lIGJsa19zb3J0ZWRfcnEocnEpCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfU09SVEVEKQorI2RlZmluZSBibGtfYmFycmllcl9ycShycSkJKChycSktPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKyNkZWZpbmUgYmxrX2Z1YV9ycShycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfRlVBKQogCiAjZGVmaW5lIGxpc3RfZW50cnlfcnEocHRyKQlsaXN0X2VudHJ5KChwdHIpLCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQogCi0jZGVmaW5lIHJxX2RhdGFfZGlyKHJxKQkJKChycSktPmZsYWdzICYgMSkKKyNkZWZpbmUgcnFfZGF0YV9kaXIocnEpCQkoKHJxKS0+Y21kX2ZsYWdzICYgMSkKKworLyoKKyAqIFdlIHJlZ2FyZCBhIHJlcXVlc3QgYXMgc3luYywgaWYgaXQncyBhIFJFQUQgb3IgYSBTWU5DIHdyaXRlLgorICovCisjZGVmaW5lIHJxX2lzX3N5bmMocnEpCQkocnFfZGF0YV9kaXIoKHJxKSkgPT0gUkVBRCB8fCAocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUldfU1lOQykKKyNkZWZpbmUgcnFfaXNfbWV0YShycSkJCSgocnEpLT5jbWRfZmxhZ3MgJiBSRVFfUldfTUVUQSkKIAogc3RhdGljIGlubGluZSBpbnQgYmxrX3F1ZXVlX2Z1bGwoc3RydWN0IHJlcXVlc3RfcXVldWUgKnEsIGludCBydykKIHsKQEAgLTU0MSwxMyArNTk1LDcgQEAKICNkZWZpbmUgUlFfTk9NRVJHRV9GTEFHUwlcCiAJKFJFUV9OT01FUkdFIHwgUkVRX1NUQVJURUQgfCBSRVFfSEFSREJBUlJJRVIgfCBSRVFfU09GVEJBUlJJRVIpCiAjZGVmaW5lIHJxX21lcmdlYWJsZShycSkJXAotCSghKChycSktPmZsYWdzICYgUlFfTk9NRVJHRV9GTEFHUykgJiYgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpCi0KLS8qCi0gKiBub29wLCByZXF1ZXN0cyBhcmUgYXV0b21hZ2ljYWxseSBtYXJrZWQgYXMgYWN0aXZlL2luYWN0aXZlIGJ5IEkvTwotICogc2NoZWR1bGVyIC0tIHNlZSBlbHZfbmV4dF9yZXF1ZXN0Ci0gKi8KLSNkZWZpbmUgYmxrX3F1ZXVlX2hlYWRhY3RpdmUocSwgaGVhZF9hY3RpdmUpCisJKCEoKHJxKS0+Y21kX2ZsYWdzICYgUlFfTk9NRVJHRV9GTEFHUykgJiYgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpCiAKIC8qCiAgKiBxLT5wcmVwX3JxX2ZuIHJldHVybiB2YWx1ZXMKQEAgLTU4NiwxMSArNjM0LDYgQEAKIAlpZiAoKHJxLT5iaW8pKQkJCVwKIAkJZm9yIChfYmlvID0gKHJxKS0+YmlvOyBfYmlvOyBfYmlvID0gX2Jpby0+YmlfbmV4dCkKIAotc3RydWN0IHNlY19zaXplIHsKLQl1bnNpZ25lZCBibG9ja19zaXplOwotCXVuc2lnbmVkIGJsb2NrX3NpemVfYml0czsKLX07Ci0KIGV4dGVybiBpbnQgYmxrX3JlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIGJsa191bnJlZ2lzdGVyX3F1ZXVlKHN0cnVjdCBnZW5kaXNrICpkaXNrKTsKIGV4dGVybiB2b2lkIHJlZ2lzdGVyX2Rpc2soc3RydWN0IGdlbmRpc2sgKmRldik7CkBAIC02MTIsNiArNjU1LDcgQEAKIGV4dGVybiB2b2lkIGJsa19zeW5jX3F1ZXVlKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxKTsKIGV4dGVybiB2b2lkIF9fYmxrX3N0b3BfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKTsKIGV4dGVybiB2b2lkIGJsa19ydW5fcXVldWUocmVxdWVzdF9xdWV1ZV90ICopOworZXh0ZXJuIHZvaWQgYmxrX3N0YXJ0X3F1ZXVlaW5nKHJlcXVlc3RfcXVldWVfdCAqKTsKIGV4dGVybiB2b2lkIGJsa19xdWV1ZV9hY3Rpdml0eV9mbihyZXF1ZXN0X3F1ZXVlX3QgKiwgYWN0aXZpdHlfZm4gKiwgdm9pZCAqKTsKIGV4dGVybiBpbnQgYmxrX3JxX21hcF91c2VyKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB2b2lkIF9fdXNlciAqLCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGludCBibGtfcnFfdW5tYXBfdXNlcihzdHJ1Y3QgYmlvICosIHVuc2lnbmVkIGludCk7CkBAIC02NTUsMTYgKzY5OSw2IEBACiBleHRlcm4gdm9pZCBlbmRfcmVxdWVzdChzdHJ1Y3QgcmVxdWVzdCAqcmVxLCBpbnQgdXB0b2RhdGUpOwogZXh0ZXJuIHZvaWQgYmxrX2NvbXBsZXRlX3JlcXVlc3Qoc3RydWN0IHJlcXVlc3QgKik7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJxX2FsbF9kb25lKHN0cnVjdCByZXF1ZXN0ICpycSwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQotewotCWlmIChibGtfZnNfcmVxdWVzdChycSkpCi0JCXJldHVybiAobnJfYnl0ZXMgPj0gKHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOSkpOwotCWVsc2UgaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKLQkJcmV0dXJuIG5yX2J5dGVzID49IHJxLT5kYXRhX2xlbjsKLQotCXJldHVybiAwOwotfQotCiAvKgogICogZW5kX3RoYXRfcmVxdWVzdF9maXJzdC9jaHVuaygpIHRha2VzIGFuIHVwdG9kYXRlIGFyZ3VtZW50LiB3ZSBhY2NvdW50CiAgKiBhbnkgdmFsdWUgPD0gYXMgYW4gaW8gZXJyb3IuIDAgbWVhbnMgLUVJTyBmb3IgY29tcGF0YWJpbGl0eSByZWFzb25zLApAQCAtNjc5LDIxICs3MTMsNiBAQAogfQogCiAvKgotICogVGhpcyBzaG91bGQgYmUgaW4gZWxldmF0b3IuaCwgYnV0IHRoYXQgcmVxdWlyZXMgcHVsbGluZyBpbiBycSBhbmQgcQotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgZWx2X2Rpc3BhdGNoX2FkZF90YWlsKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLAotCQkJCQkgc3RydWN0IHJlcXVlc3QgKnJxKQotewotCWlmIChxLT5sYXN0X21lcmdlID09IHJxKQotCQlxLT5sYXN0X21lcmdlID0gTlVMTDsKLQlxLT5ucl9zb3J0ZWQtLTsKLQotCXEtPmVuZF9zZWN0b3IgPSBycV9lbmRfc2VjdG9yKHJxKTsKLQlxLT5ib3VuZGFyeV9ycSA9IHJxOwotCWxpc3RfYWRkX3RhaWwoJnJxLT5xdWV1ZWxpc3QsICZxLT5xdWV1ZV9oZWFkKTsKLX0KLQotLyoKICAqIEFjY2VzcyBmdW5jdGlvbnMgZm9yIG1hbmlwdWxhdGluZyBxdWV1ZSBwcm9wZXJ0aWVzCiAgKi8KIGV4dGVybiByZXF1ZXN0X3F1ZXVlX3QgKmJsa19pbml0X3F1ZXVlX25vZGUocmVxdWVzdF9mbl9wcm9jICpyZm4sCkBAIC03MzcsNyArNzU2LDcgQEAKICAqLwogI2RlZmluZSBibGtfcXVldWVfdGFnX2RlcHRoKHEpCQkoKHEpLT5xdWV1ZV90YWdzLT5idXN5KQogI2RlZmluZSBibGtfcXVldWVfdGFnX3F1ZXVlKHEpCQkoKHEpLT5xdWV1ZV90YWdzLT5idXN5IDwgKHEpLT5xdWV1ZV90YWdzLT5tYXhfZGVwdGgpCi0jZGVmaW5lIGJsa19ycV90YWdnZWQocnEpCQkoKHJxKS0+ZmxhZ3MgJiBSRVFfUVVFVUVEKQorI2RlZmluZSBibGtfcnFfdGFnZ2VkKHJxKQkJKChycSktPmNtZF9mbGFncyAmIFJFUV9RVUVVRUQpCiBleHRlcm4gaW50IGJsa19xdWV1ZV9zdGFydF90YWcocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICpibGtfcXVldWVfZmluZF90YWcocmVxdWVzdF9xdWV1ZV90ICosIGludCk7CiBleHRlcm4gdm9pZCBibGtfcXVldWVfZW5kX3RhZyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CkBAIC03ODcsMTQgKzgwNiw2IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYmRldl9kbWFfYWxpZ21lbnQoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikKLXsKLQlyZXR1cm4gcXVldWVfZG1hX2FsaWdubWVudChiZGV2X2dldF9xdWV1ZShiZGV2KSk7Ci19Ci0KLSNkZWZpbmUgYmxrX2ZpbmlzaGVkX2lvKG5zZWN0cykJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBibGtfc3RhcnRlZF9pbyhuc2VjdHMpCWRvIHsgfSB3aGlsZSAoMCkKLQogLyogYXNzdW1lcyBzaXplID4gMjU2ICovCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBibGtzaXplX2JpdHModW5zaWduZWQgaW50IHNpemUpCiB7CkBAIC04MjQsMjQgKzgzNSwzMiBAQAogaW50IGtibG9ja2Rfc2NoZWR1bGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogdm9pZCBrYmxvY2tkX2ZsdXNoKHZvaWQpOwogCi0jaWZkZWYgQ09ORklHX0xCRAotIyBpbmNsdWRlIDxhc20vZGl2NjQuaD4KLSMgZGVmaW5lIHNlY3Rvcl9kaXYoYSwgYikgZG9fZGl2KGEsIGIpCi0jZWxzZQotIyBkZWZpbmUgc2VjdG9yX2RpdihuLCBiKSggXAoteyBcCi0JaW50IF9yZXM7IFwKLQlfcmVzID0gKG4pICUgKGIpOyBcCi0JKG4pIC89IChiKTsgXAotCV9yZXM7IFwKLX0gXAotKQotI2VuZGlmIAotCiAjZGVmaW5lIE1PRFVMRV9BTElBU19CTE9DS0RFVihtYWpvcixtaW5vcikgXAogCU1PRFVMRV9BTElBUygiYmxvY2stbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKICNkZWZpbmUgTU9EVUxFX0FMSUFTX0JMT0NLREVWX01BSk9SKG1ham9yKSBcCiAJTU9EVUxFX0FMSUFTKCJibG9jay1tYWpvci0iIF9fc3RyaW5naWZ5KG1ham9yKSAiLSoiKQogCiAKKyNlbHNlIC8qIENPTkZJR19CTE9DSyAqLworLyoKKyAqIHN0dWJzIGZvciB3aGVuIHRoZSBibG9jayBsYXllciBpcyBjb25maWd1cmVkIG91dAorICovCisjZGVmaW5lIGJ1ZmZlcl9oZWFkc19vdmVyX2xpbWl0IDAKKworc3RhdGljIGlubGluZSBsb25nIGJsa19jb25nZXN0aW9uX3dhaXQoaW50IHJ3LCBsb25nIHRpbWVvdXQpCit7CisJcmV0dXJuIGlvX3NjaGVkdWxlX3RpbWVvdXQodGltZW91dCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyBucl9ibG9ja2Rldl9wYWdlcyh2b2lkKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZXhpdF9pb19jb250ZXh0KHZvaWQpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oIGIvaW5jbHVkZS9saW51eC9ibGt0cmFjZV9hcGkuaAppbmRleCA3NTIwY2MxLi5iOTlhNzE0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Jsa3RyYWNlX2FwaS5oCisrKyBiL2luY2x1ZGUvbGludXgvYmxrdHJhY2VfYXBpLmgKQEAgLTIwLDYgKzIwLDcgQEAKIAlCTEtfVENfUEMJPSAxIDw8IDksCS8qIHBjIHJlcXVlc3RzICovCiAJQkxLX1RDX05PVElGWQk9IDEgPDwgMTAsCS8qIHNwZWNpYWwgbWVzc2FnZSAqLwogCUJMS19UQ19BSEVBRAk9IDEgPDwgMTEsCS8qIHJlYWRhaGVhZCAqLworCUJMS19UQ19NRVRBCT0gMSA8PCAxMiwJLyogbWV0YWRhdGEgKi8KIAogCUJMS19UQ19FTkQJPSAxIDw8IDE1LAkvKiBvbmx5IDE2LWJpdHMsIHJlbWluZGVyICovCiB9OwpAQCAtMTQ4LDcgKzE0OSw3IEBACiAJCQkJICAgIHUzMiB3aGF0KQogewogCXN0cnVjdCBibGtfdHJhY2UgKmJ0ID0gcS0+YmxrX3RyYWNlOwotCWludCBydyA9IHJxLT5mbGFncyAmIDB4MDM7CisJaW50IHJ3ID0gcnEtPmNtZF9mbGFncyAmIDB4MDM7CiAKIAlpZiAobGlrZWx5KCFidCkpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaCBiL2luY2x1ZGUvbGludXgvYnVmZmVyX2hlYWQuaAppbmRleCA3MzdlNDA3Li4xMzFmZmQzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2J1ZmZlcl9oZWFkLmgKKysrIGIvaW5jbHVkZS9saW51eC9idWZmZXJfaGVhZC5oCkBAIC0xNCw2ICsxNCw4IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAorI2lmZGVmIENPTkZJR19CTE9DSworCiBlbnVtIGJoX3N0YXRlX2JpdHMgewogCUJIX1VwdG9kYXRlLAkvKiBDb250YWlucyB2YWxpZCBkYXRhICovCiAJQkhfRGlydHksCS8qIElzIGRpcnR5ICovCkBAIC0xOTAsOSArMTkyLDcgQEAKICAqIEdlbmVyaWMgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGltcGxlbWVudGF0aW9ucyBmb3IgYnVmZmVyX2hlYWQtYmFja2VkCiAgKiBhZGRyZXNzX3NwYWNlcy4KICAqLwotaW50IHRyeV90b19yZWxlYXNlX3BhZ2Uoc3RydWN0IHBhZ2UgKiBwYWdlLCBnZnBfdCBnZnBfbWFzayk7CiB2b2lkIGJsb2NrX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7Ci12b2lkIGRvX2ludmFsaWRhdGVwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCk7CiBpbnQgYmxvY2tfd3JpdGVfZnVsbF9wYWdlKHN0cnVjdCBwYWdlICpwYWdlLCBnZXRfYmxvY2tfdCAqZ2V0X2Jsb2NrLAogCQkJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBibG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CkBAIC0zMDIsNCArMzAyLDE5IEBACiAJCV9fbG9ja19idWZmZXIoYmgpOwogfQogCitleHRlcm4gaW50IF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycyhzdHJ1Y3QgcGFnZSAqcGFnZSk7CisKKyNlbHNlIC8qIENPTkZJR19CTE9DSyAqLworCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luaXQodm9pZCkge30KK3N0YXRpYyBpbmxpbmUgaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpIHsgcmV0dXJuIDE7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHN5bmNfYmxvY2tkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldikgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSBpbnQgaW5vZGVfaGFzX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkgeyByZXR1cm4gMDsgfQorc3RhdGljIGlubGluZSB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKSB7fQorc3RhdGljIGlubGluZSBpbnQgcmVtb3ZlX2lub2RlX2J1ZmZlcnMoc3RydWN0IGlub2RlICppbm9kZSkgeyByZXR1cm4gMTsgfQorc3RhdGljIGlubGluZSBpbnQgc3luY19tYXBwaW5nX2J1ZmZlcnMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpIHsgcmV0dXJuIDA7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpbnZhbGlkYXRlX2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgaW50IGRlc3Ryb3lfZGlydHlfYnVmZmVycykge30KKworCisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCiAjZW5kaWYgLyogX0xJTlVYX0JVRkZFUl9IRUFEX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY2Rldi5oIGIvaW5jbHVkZS9saW51eC9jZGV2LmgKaW5kZXggMjIxNjYzOC4uZWU1ZjUzZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9jZGV2LmgKKysrIGIvaW5jbHVkZS9saW51eC9jZGV2LmgKQEAgLTIzLDUgKzIzLDcgQEAKIAogdm9pZCBjZF9mb3JnZXQoc3RydWN0IGlub2RlICopOwogCitleHRlcm4gc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gZGlyZWN0bHlfbWFwcGFibGVfY2Rldl9iZGk7CisKICNlbmRpZgogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9jb21wYXRfaW9jdGwuaAppbmRleCBiZWEwMjU1Li5kNWI3YWJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBhdF9pb2N0bC5oCisrKyBiL2luY2x1ZGUvbGludXgvY29tcGF0X2lvY3RsLmgKQEAgLTkwLDYgKzkwLDcgQEAKIENPTVBBVElCTEVfSU9DVEwoRkRGTVRUUkspCiBDT01QQVRJQkxFX0lPQ1RMKEZEUkFXQ01EKQogLyogMHgxMiAqLworI2lmZGVmIENPTkZJR19CTE9DSwogQ09NUEFUSUJMRV9JT0NUTChCTEtSQVNFVCkKIENPTVBBVElCTEVfSU9DVEwoQkxLUk9TRVQpCiBDT01QQVRJQkxFX0lPQ1RMKEJMS1JPR0VUKQpAQCAtMTAzLDYgKzEwNCw3IEBACiBDT01QQVRJQkxFX0lPQ1RMKEJMS1RSQUNFVEVBUkRPV04pCiBVTE9OR19JT0NUTChCTEtSQVNFVCkKIFVMT05HX0lPQ1RMKEJMS0ZSQVNFVCkKKyNlbmRpZgogLyogUkFJRCAqLwogQ09NUEFUSUJMRV9JT0NUTChSQUlEX1ZFUlNJT04pCiBDT01QQVRJQkxFX0lPQ1RMKEdFVF9BUlJBWV9JTkZPKQpAQCAtMzk1LDEyICszOTcsNiBAQAogQ09NUEFUSUJMRV9JT0NUTChEVkRfQVVUSCkKIC8qIHBrdGNkdmQgKi8KIENPTVBBVElCTEVfSU9DVEwoUEFDS0VUX0NUUkxfQ01EKQotLyogQmlnIEwgKi8KLVVMT05HX0lPQ1RMKExPT1BfU0VUX0ZEKQotVUxPTkdfSU9DVEwoTE9PUF9DSEFOR0VfRkQpCi1DT01QQVRJQkxFX0lPQ1RMKExPT1BfQ0xSX0ZEKQotQ09NUEFUSUJMRV9JT0NUTChMT09QX0dFVF9TVEFUVVM2NCkKLUNPTVBBVElCTEVfSU9DVEwoTE9PUF9TRVRfU1RBVFVTNjQpCiAvKiBCaWcgQSAqLwogLyogc3BhcmMgb25seSAqLwogLyogQmlnIFEgZm9yIHNvdW5kL09TUyAqLwpAQCAtNTczLDE4ICs1NjksNiBAQAogQ09NUEFUSUJMRV9JT0NUTChSQVdfR0VUQklORCkKIC8qIFNNQiBpb2N0bHMgd2hpY2ggZG8gbm90IG5lZWQgYW55IHRyYW5zbGF0aW9ucyAqLwogQ09NUEFUSUJMRV9JT0NUTChTTUJfSU9DX05FV0NPTk4pCi0vKiBOQ1AgaW9jdGxzIHdoaWNoIGRvIG5vdCBuZWVkIGFueSB0cmFuc2xhdGlvbnMgKi8KLUNPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19DT05OX0xPR0dFRF9JTikKLUNPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19TSUdOX0lOSVQpCi1DT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfU0lHTl9XQU5URUQpCi1DT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfU0VUX1NJR05fV0FOVEVEKQotQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX0xPQ0tVTkxPQ0spCi1DT01QQVRJQkxFX0lPQ1RMKE5DUF9JT0NfR0VUUk9PVCkKLUNPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19TRVRST09UKQotQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX0dFVENIQVJTRVRTKQotQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX1NFVENIQVJTRVRTKQotQ09NUEFUSUJMRV9JT0NUTChOQ1BfSU9DX0dFVERFTlRSWVRUTCkKLUNPTVBBVElCTEVfSU9DVEwoTkNQX0lPQ19TRVRERU5UUllUVEwpCiAvKiBMaXR0bGUgYSAqLwogQ09NUEFUSUJMRV9JT0NUTChBVE1TSUdEX0NUUkwpCiBDT01QQVRJQkxFX0lPQ1RMKEFUTUFSUERfQ1RSTCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaCBiL2luY2x1ZGUvbGludXgvY29tcGlsZXIuaAppbmRleCAwNjBiOTYxLi41Mzg0MjNkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbXBpbGVyLmgKKysrIGIvaW5jbHVkZS9saW51eC9jb21waWxlci5oCkBAIC0xMCwxMSArMTAsMTEgQEAKICMgZGVmaW5lIF9fZm9yY2UJX19hdHRyaWJ1dGVfXygoZm9yY2UpKQogIyBkZWZpbmUgX19ub2Nhc3QJX19hdHRyaWJ1dGVfXygobm9jYXN0KSkKICMgZGVmaW5lIF9faW9tZW0JX19hdHRyaWJ1dGVfXygobm9kZXJlZiwgYWRkcmVzc19zcGFjZSgyKSkpCi0jIGRlZmluZSBfX2FjcXVpcmVzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoMCwxKSkpCi0jIGRlZmluZSBfX3JlbGVhc2VzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoMSwwKSkpCi0jIGRlZmluZSBfX2FjcXVpcmUoeCkJX19jb250ZXh0X18oMSkKLSMgZGVmaW5lIF9fcmVsZWFzZSh4KQlfX2NvbnRleHRfXygtMSkKLSMgZGVmaW5lIF9fY29uZF9sb2NrKHgpCSgoeCkgPyAoeyBfX2NvbnRleHRfXygxKTsgMTsgfSkgOiAwKQorIyBkZWZpbmUgX19hY3F1aXJlcyh4KQlfX2F0dHJpYnV0ZV9fKChjb250ZXh0KHgsMCwxKSkpCisjIGRlZmluZSBfX3JlbGVhc2VzKHgpCV9fYXR0cmlidXRlX18oKGNvbnRleHQoeCwxLDApKSkKKyMgZGVmaW5lIF9fYWNxdWlyZSh4KQlfX2NvbnRleHRfXyh4LDEpCisjIGRlZmluZSBfX3JlbGVhc2UoeCkJX19jb250ZXh0X18oeCwtMSkKKyMgZGVmaW5lIF9fY29uZF9sb2NrKHgsYykJKChjKSA/ICh7IF9fYWNxdWlyZSh4KTsgMTsgfSkgOiAwKQogZXh0ZXJuIHZvaWQgX19jaGtfdXNlcl9wdHIodm9pZCBfX3VzZXIgKik7CiBleHRlcm4gdm9pZCBfX2Noa19pb19wdHIodm9pZCBfX2lvbWVtICopOwogI2Vsc2UKQEAgLTMxLDcgKzMxLDcgQEAKICMgZGVmaW5lIF9fcmVsZWFzZXMoeCkKICMgZGVmaW5lIF9fYWNxdWlyZSh4KSAodm9pZCkwCiAjIGRlZmluZSBfX3JlbGVhc2UoeCkgKHZvaWQpMAotIyBkZWZpbmUgX19jb25kX2xvY2soeCkgKHgpCisjIGRlZmluZSBfX2NvbmRfbG9jayh4LGMpIChjKQogI2VuZGlmCiAKICNpZmRlZiBfX0tFUk5FTF9fCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oIGIvaW5jbHVkZS9saW51eC9jcHVzZXQuaAppbmRleCA5MzU0NzIyLi40ZDhhZGY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NwdXNldC5oCisrKyBiL2luY2x1ZGUvbGludXgvY3B1c2V0LmgKQEAgLTYzLDYgKzYzLDggQEAKIAlyZXR1cm4gY3VycmVudC0+ZmxhZ3MgJiBQRl9TUFJFQURfU0xBQjsKIH0KIAorZXh0ZXJuIHZvaWQgY3B1c2V0X3RyYWNrX29ubGluZV9ub2Rlcyh2b2lkKTsKKwogI2Vsc2UgLyogIUNPTkZJR19DUFVTRVRTICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGNwdXNldF9pbml0X2Vhcmx5KHZvaWQpIHsgcmV0dXJuIDA7IH0KQEAgLTEyNiw2ICsxMjgsOCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgY3B1c2V0X3RyYWNrX29ubGluZV9ub2Rlcyh2b2lkKSB7fQorCiAjZW5kaWYgLyogIUNPTkZJR19DUFVTRVRTICovCiAKICNlbmRpZiAvKiBfTElOVVhfQ1BVU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NyYW1mc19mcy5oCmluZGV4IGE0MWYzODQuLjFkYmE2ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3JhbWZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9jcmFtZnNfZnMuaApAQCAtODcsNiArODcsNiBAQAogLyogVW5jb21wcmVzc2lvbiBpbnRlcmZhY2VzIHRvIHRoZSB1bmRlcmx5aW5nIHpsaWIgKi8KIGludCBjcmFtZnNfdW5jb21wcmVzc19ibG9jayh2b2lkICpkc3QsIGludCBkc3RsZW4sIHZvaWQgKnNyYywgaW50IHNyY2xlbik7CiBpbnQgY3JhbWZzX3VuY29tcHJlc3NfaW5pdCh2b2lkKTsKLWludCBjcmFtZnNfdW5jb21wcmVzc19leGl0KHZvaWQpOwordm9pZCBjcmFtZnNfdW5jb21wcmVzc19leGl0KHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaCBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaAppbmRleCA2MzU2OTBjLi5mZjIwM2M0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0yNCw2ICsyNCwxMyBAQAogI2RlZmluZSBETUFfMjhCSVRfTUFTSwkweDAwMDAwMDAwMGZmZmZmZmZVTEwKICNkZWZpbmUgRE1BXzI0QklUX01BU0sJMHgwMDAwMDAwMDAwZmZmZmZmVUxMCiAKK3N0YXRpYyBpbmxpbmUgaW50IHZhbGlkX2RtYV9kaXJlY3Rpb24oaW50IGRtYV9kaXJlY3Rpb24pCit7CisJcmV0dXJuICgoZG1hX2RpcmVjdGlvbiA9PSBETUFfQklESVJFQ1RJT05BTCkgfHwKKwkJKGRtYV9kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgfHwKKwkJKGRtYV9kaXJlY3Rpb24gPT0gRE1BX0ZST01fREVWSUNFKSk7Cit9CisKICNpbmNsdWRlIDxhc20vZG1hLW1hcHBpbmcuaD4KIAogLyogQmFja3dhcmRzIGNvbXBhdCwgcmVtb3ZlIGluIDIuNy54ICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtaS5oIGIvaW5jbHVkZS9saW51eC9kbWkuaAppbmRleCBiMmNkMjA3Li4zOGRjNDAzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtaS5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1pLmgKQEAgLTI3LDcgKzI3LDggQEAKIAlETUlfREVWX1RZUEVfRVRIRVJORVQsCiAJRE1JX0RFVl9UWVBFX1RPS0VOUklORywKIAlETUlfREVWX1RZUEVfU09VTkQsCi0JRE1JX0RFVl9UWVBFX0lQTUkgPSAtMQorCURNSV9ERVZfVFlQRV9JUE1JID0gLTEsCisJRE1JX0RFVl9UWVBFX09FTV9TVFJJTkcgPSAtMgogfTsKIAogc3RydWN0IGRtaV9oZWFkZXIgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9laXNhLmggYi9pbmNsdWRlL2xpbnV4L2Vpc2EuaAppbmRleCA0MDc5MjQyLi4xZmY3YzEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Vpc2EuaAorKysgYi9pbmNsdWRlL2xpbnV4L2Vpc2EuaApAQCAtMyw4ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L21vZF9kZXZpY2V0YWJsZS5oPgogCi0jZGVmaW5lIEVJU0FfU0lHX0xFTiAgIDgKICNkZWZpbmUgRUlTQV9NQVhfU0xPVFMgOAogCiAjZGVmaW5lIEVJU0FfTUFYX1JFU09VUkNFUyA0CkBAIC0yNywxMiArMjcsNiBAQAogI2RlZmluZSBFSVNBX0NPTkZJR19FTkFCTEVEICAgICAgICAgMQogI2RlZmluZSBFSVNBX0NPTkZJR19GT1JDRUQgICAgICAgICAgMgogCi0vKiBUaGUgRUlTQSBzaWduYXR1cmUsIGluIEFTQ0lJIGZvcm0sIG51bGwgdGVybWluYXRlZCAqLwotc3RydWN0IGVpc2FfZGV2aWNlX2lkIHsKLQljaGFyICAgICAgICAgIHNpZ1tFSVNBX1NJR19MRU5dOwotCXVuc2lnbmVkIGxvbmcgZHJpdmVyX2RhdGE7Ci19OwotCiAvKiBUaGVyZSBpcyBub3QgbXVjaCB3ZSBjYW4gc2F5IGFib3V0IGFuIEVJU0EgZGV2aWNlLCBhcGFydCBmcm9tCiAgKiBzaWduYXR1cmUsIHNsb3QgbnVtYmVyLCBhbmQgYmFzZSBhZGRyZXNzLiBkbWFfbWFzayBpcyBzZXQgYnkKICAqIGRlZmF1bHQgdG8gcGFyZW50IGRldmljZSBtYXNrLi4qLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oIGIvaW5jbHVkZS9saW51eC9lbGV2YXRvci5oCmluZGV4IDE3MTNhY2UuLmIzMzcwZWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZWxldmF0b3IuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VsZXZhdG9yLmgKQEAgLTEsMTIgKzEsMTYgQEAKICNpZm5kZWYgX0xJTlVYX0VMRVZBVE9SX0gKICNkZWZpbmUgX0xJTlVYX0VMRVZBVE9SX0gKIAorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgorCisjaWZkZWYgQ09ORklHX0JMT0NLCisKIHR5cGVkZWYgaW50IChlbGV2YXRvcl9tZXJnZV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKiwKIAkJCQkgc3RydWN0IGJpbyAqKTsKIAogdHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiAKLXR5cGVkZWYgdm9pZCAoZWxldmF0b3JfbWVyZ2VkX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZWRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKIAogdHlwZWRlZiBpbnQgKGVsZXZhdG9yX2Rpc3BhdGNoX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGludCk7CiAKQEAgLTE0LDkgKzE4LDkgQEAKIHR5cGVkZWYgaW50IChlbGV2YXRvcl9xdWV1ZV9lbXB0eV9mbikgKHJlcXVlc3RfcXVldWVfdCAqKTsKIHR5cGVkZWYgc3RydWN0IHJlcXVlc3QgKihlbGV2YXRvcl9yZXF1ZXN0X2xpc3RfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci10eXBlZGVmIGludCAoZWxldmF0b3JfbWF5X3F1ZXVlX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGludCwgc3RydWN0IGJpbyAqKTsKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9tYXlfcXVldWVfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50KTsKIAotdHlwZWRlZiBpbnQgKGVsZXZhdG9yX3NldF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IGJpbyAqLCBnZnBfdCk7Cit0eXBlZGVmIGludCAoZWxldmF0b3Jfc2V0X3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBnZnBfdCk7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX3B1dF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiB0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FjdGl2YXRlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHR5cGVkZWYgdm9pZCAoZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CkBAIC04MiwxOSArODYsMjEgQEAKIAlzdHJ1Y3Qga29iamVjdCBrb2JqOwogCXN0cnVjdCBlbGV2YXRvcl90eXBlICplbGV2YXRvcl90eXBlOwogCXN0cnVjdCBtdXRleCBzeXNmc19sb2NrOworCXN0cnVjdCBobGlzdF9oZWFkICpoYXNoOwogfTsKIAogLyoKICAqIGJsb2NrIGVsZXZhdG9yIGludGVyZmFjZQogICovCiBleHRlcm4gdm9pZCBlbHZfZGlzcGF0Y2hfc29ydChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gdm9pZCBlbHZfZGlzcGF0Y2hfYWRkX3RhaWwocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIHZvaWQgZWx2X2FkZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIGludCk7CiBleHRlcm4gdm9pZCBfX2Vsdl9hZGRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50LCBpbnQpOwogZXh0ZXJuIHZvaWQgZWx2X2luc2VydChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgaW50KTsKIGV4dGVybiBpbnQgZWx2X21lcmdlKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKiwgc3RydWN0IGJpbyAqKTsKIGV4dGVybiB2b2lkIGVsdl9tZXJnZV9yZXF1ZXN0cyhyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwKIAkJCSAgICAgICBzdHJ1Y3QgcmVxdWVzdCAqKTsKLWV4dGVybiB2b2lkIGVsdl9tZXJnZWRfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gdm9pZCBlbHZfbWVyZ2VkX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCk7CiBleHRlcm4gdm9pZCBlbHZfZGVxdWV1ZV9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGV4dGVybiB2b2lkIGVsdl9yZXF1ZXVlX3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogZXh0ZXJuIGludCBlbHZfcXVldWVfZW1wdHkocmVxdWVzdF9xdWV1ZV90ICopOwpAQCAtMTAzLDkgKzEwOSw5IEBACiBleHRlcm4gc3RydWN0IHJlcXVlc3QgKmVsdl9sYXR0ZXJfcmVxdWVzdChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CiBleHRlcm4gaW50IGVsdl9yZWdpc3Rlcl9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKnEpOwogZXh0ZXJuIHZvaWQgZWx2X3VucmVnaXN0ZXJfcXVldWUocmVxdWVzdF9xdWV1ZV90ICpxKTsKLWV4dGVybiBpbnQgZWx2X21heV9xdWV1ZShyZXF1ZXN0X3F1ZXVlX3QgKiwgaW50LCBzdHJ1Y3QgYmlvICopOworZXh0ZXJuIGludCBlbHZfbWF5X3F1ZXVlKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgZWx2X2NvbXBsZXRlZF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLWV4dGVybiBpbnQgZWx2X3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgYmlvICosIGdmcF90KTsKK2V4dGVybiBpbnQgZWx2X3NldF9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBnZnBfdCk7CiBleHRlcm4gdm9pZCBlbHZfcHV0X3JlcXVlc3QocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiAvKgpAQCAtMTI1LDYgKzEzMSwxOSBAQAogZXh0ZXJuIGludCBlbHZfcnFfbWVyZ2Vfb2soc3RydWN0IHJlcXVlc3QgKiwgc3RydWN0IGJpbyAqKTsKIAogLyoKKyAqIEhlbHBlciBmdW5jdGlvbnMuCisgKi8KK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdCAqZWx2X3JiX2Zvcm1lcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK2V4dGVybiBzdHJ1Y3QgcmVxdWVzdCAqZWx2X3JiX2xhdHRlcl9yZXF1ZXN0KHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKworLyoKKyAqIHJiIHN1cHBvcnQgZnVuY3Rpb25zLgorICovCitleHRlcm4gc3RydWN0IHJlcXVlc3QgKmVsdl9yYl9hZGQoc3RydWN0IHJiX3Jvb3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitleHRlcm4gdm9pZCBlbHZfcmJfZGVsKHN0cnVjdCByYl9yb290ICosIHN0cnVjdCByZXF1ZXN0ICopOworZXh0ZXJuIHN0cnVjdCByZXF1ZXN0ICplbHZfcmJfZmluZChzdHJ1Y3QgcmJfcm9vdCAqLCBzZWN0b3JfdCk7CisKKy8qCiAgKiBSZXR1cm4gdmFsdWVzIGZyb20gZWxldmF0b3IgbWVyZ2VyCiAgKi8KICNkZWZpbmUgRUxFVkFUT1JfTk9fTUVSR0UJMApAQCAtMTQ5LDUgKzE2OCw0MiBAQAogfTsKIAogI2RlZmluZSBycV9lbmRfc2VjdG9yKHJxKQkoKHJxKS0+c2VjdG9yICsgKHJxKS0+bnJfc2VjdG9ycykKKyNkZWZpbmUgcmJfZW50cnlfcnEobm9kZSkJcmJfZW50cnkoKG5vZGUpLCBzdHJ1Y3QgcmVxdWVzdCwgcmJfbm9kZSkKIAorLyoKKyAqIEhhY2sgdG8gcmV1c2UgdGhlIGRvbmVsaXN0IGxpc3RfaGVhZCBhcyB0aGUgZmlmbyB0aW1lIGhvbGRlciB3aGlsZQorICogdGhlIHJlcXVlc3QgaXMgaW4gdGhlIGlvIHNjaGVkdWxlci4gU2F2ZXMgYW4gdW5zaWduZWQgbG9uZyBpbiBycS4KKyAqLworI2RlZmluZSBycV9maWZvX3RpbWUocnEpCSgodW5zaWduZWQgbG9uZykgKHJxKS0+ZG9uZWxpc3QubmV4dCkKKyNkZWZpbmUgcnFfc2V0X2ZpZm9fdGltZShycSxleHApCSgocnEpLT5kb25lbGlzdC5uZXh0ID0gKHZvaWQgKikgKGV4cCkpCisjZGVmaW5lIHJxX2VudHJ5X2ZpZm8ocHRyKQlsaXN0X2VudHJ5KChwdHIpLCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQorI2RlZmluZSBycV9maWZvX2NsZWFyKHJxKQlkbyB7CQlcCisJbGlzdF9kZWxfaW5pdCgmKHJxKS0+cXVldWVsaXN0KTsJXAorCUlOSVRfTElTVF9IRUFEKCYocnEpLT5kb25lbGlzdCk7CVwKKwl9IHdoaWxlICgwKQorCisvKgorICogaW8gY29udGV4dCBjb3VudCBhY2NvdW50aW5nCisgKi8KKyNkZWZpbmUgZWx2X2lvY19jb3VudF9tb2QobmFtZSwgX192YWwpCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJcHJlZW1wdF9kaXNhYmxlKCk7CQkJCVwKKwkJX19nZXRfY3B1X3ZhcihuYW1lKSArPSAoX192YWwpOwkJCVwKKwkJcHJlZW1wdF9lbmFibGUoKTsJCQkJXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZWx2X2lvY19jb3VudF9pbmMobmFtZSkJZWx2X2lvY19jb3VudF9tb2QobmFtZSwgMSkKKyNkZWZpbmUgZWx2X2lvY19jb3VudF9kZWMobmFtZSkJZWx2X2lvY19jb3VudF9tb2QobmFtZSwgLTEpCisKKyNkZWZpbmUgZWx2X2lvY19jb3VudF9yZWFkKG5hbWUpCQkJCVwKKyh7CQkJCQkJCQlcCisJdW5zaWduZWQgbG9uZyBfX3ZhbCA9IDA7CQkJCVwKKwlpbnQgX19jcHU7CQkJCQkJXAorCXNtcF93bWIoKTsJCQkJCQlcCisJZm9yX2VhY2hfcG9zc2libGVfY3B1KF9fY3B1KQkJCQlcCisJCV9fdmFsICs9IHBlcl9jcHUobmFtZSwgX19jcHUpOwkJCVwKKwlfX3ZhbDsJCQkJCQkJXAorfSkKKworI2VuZGlmIC8qIENPTkZJR19CTE9DSyAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Vyci5oIGIvaW5jbHVkZS9saW51eC9lcnIuaAppbmRleCBjZDNiMzY3Li4xYWIxZDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Vyci5oCisrKyBiL2luY2x1ZGUvbGludXgvZXJyLmgKQEAgLTE1LDYgKzE1LDggQEAKICAqLwogI2RlZmluZSBNQVhfRVJSTk8JNDA5NQogCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCiAjZGVmaW5lIElTX0VSUl9WQUxVRSh4KSB1bmxpa2VseSgoeCkgPj0gKHVuc2lnbmVkIGxvbmcpLU1BWF9FUlJOTykKIAogc3RhdGljIGlubGluZSB2b2lkICpFUlJfUFRSKGxvbmcgZXJyb3IpCkBAIC0zMiw0ICszNCw2IEBACiAJcmV0dXJuIElTX0VSUl9WQUxVRSgodW5zaWduZWQgbG9uZylwdHIpOwogfQogCisjZW5kaWYKKwogI2VuZGlmIC8qIF9MSU5VWF9FUlJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oIGIvaW5jbHVkZS9saW51eC9lcnJxdWV1ZS5oCmluZGV4IDQwODExOGEuLjkyZjhkNGYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXJycXVldWUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2VycnF1ZXVlLmgKQEAgLTM4LDcgKzM4LDcgQEAKIAl9IGhlYWRlcjsKIAlzdHJ1Y3Qgc29ja19leHRlbmRlZF9lcnIJZWU7CiAJdTE2CQkJCWFkZHJfb2Zmc2V0OwotCXUxNgkJCQlwb3J0OworCV9fYmUxNgkJCQlwb3J0OwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDJfZnMuaCBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCmluZGV4IDMzYTFhYTEuLjE1M2Q3NTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0Ml9mcy5oCkBAIC0xNjUsNDEgKzE2NSw0OSBAQAogI2RlZmluZQlFWFQyX05fQkxPQ0tTCQkJKEVYVDJfVElORF9CTE9DSyArIDEpCiAKIC8qCi0gKiBJbm9kZSBmbGFncworICogSW5vZGUgZmxhZ3MgKEdFVEZMQUdTL1NFVEZMQUdTKQogICovCi0jZGVmaW5lCUVYVDJfU0VDUk1fRkwJCQkweDAwMDAwMDAxIC8qIFNlY3VyZSBkZWxldGlvbiAqLwotI2RlZmluZQlFWFQyX1VOUk1fRkwJCQkweDAwMDAwMDAyIC8qIFVuZGVsZXRlICovCi0jZGVmaW5lCUVYVDJfQ09NUFJfRkwJCQkweDAwMDAwMDA0IC8qIENvbXByZXNzIGZpbGUgKi8KLSNkZWZpbmUgRVhUMl9TWU5DX0ZMCQkJMHgwMDAwMDAwOCAvKiBTeW5jaHJvbm91cyB1cGRhdGVzICovCi0jZGVmaW5lIEVYVDJfSU1NVVRBQkxFX0ZMCQkweDAwMDAwMDEwIC8qIEltbXV0YWJsZSBmaWxlICovCi0jZGVmaW5lIEVYVDJfQVBQRU5EX0ZMCQkJMHgwMDAwMDAyMCAvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KLSNkZWZpbmUgRVhUMl9OT0RVTVBfRkwJCQkweDAwMDAwMDQwIC8qIGRvIG5vdCBkdW1wIGZpbGUgKi8KLSNkZWZpbmUgRVhUMl9OT0FUSU1FX0ZMCQkJMHgwMDAwMDA4MCAvKiBkbyBub3QgdXBkYXRlIGF0aW1lICovCisjZGVmaW5lCUVYVDJfU0VDUk1fRkwJCQlGU19TRUNSTV9GTAkvKiBTZWN1cmUgZGVsZXRpb24gKi8KKyNkZWZpbmUJRVhUMl9VTlJNX0ZMCQkJRlNfVU5STV9GTAkvKiBVbmRlbGV0ZSAqLworI2RlZmluZQlFWFQyX0NPTVBSX0ZMCQkJRlNfQ09NUFJfRkwJLyogQ29tcHJlc3MgZmlsZSAqLworI2RlZmluZSBFWFQyX1NZTkNfRkwJCQlGU19TWU5DX0ZMCS8qIFN5bmNocm9ub3VzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgRVhUMl9JTU1VVEFCTEVfRkwJCUZTX0lNTVVUQUJMRV9GTAkvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBFWFQyX0FQUEVORF9GTAkJCUZTX0FQUEVORF9GTAkvKiB3cml0ZXMgdG8gZmlsZSBtYXkgb25seSBhcHBlbmQgKi8KKyNkZWZpbmUgRVhUMl9OT0RVTVBfRkwJCQlGU19OT0RVTVBfRkwJLyogZG8gbm90IGR1bXAgZmlsZSAqLworI2RlZmluZSBFWFQyX05PQVRJTUVfRkwJCQlGU19OT0FUSU1FX0ZMCS8qIGRvIG5vdCB1cGRhdGUgYXRpbWUgKi8KIC8qIFJlc2VydmVkIGZvciBjb21wcmVzc2lvbiB1c2FnZS4uLiAqLwotI2RlZmluZSBFWFQyX0RJUlRZX0ZMCQkJMHgwMDAwMDEwMAotI2RlZmluZSBFWFQyX0NPTVBSQkxLX0ZMCQkweDAwMDAwMjAwIC8qIE9uZSBvciBtb3JlIGNvbXByZXNzZWQgY2x1c3RlcnMgKi8KLSNkZWZpbmUgRVhUMl9OT0NPTVBfRkwJCQkweDAwMDAwNDAwIC8qIERvbid0IGNvbXByZXNzICovCi0jZGVmaW5lIEVYVDJfRUNPTVBSX0ZMCQkJMHgwMDAwMDgwMCAvKiBDb21wcmVzc2lvbiBlcnJvciAqLworI2RlZmluZSBFWFQyX0RJUlRZX0ZMCQkJRlNfRElSVFlfRkwKKyNkZWZpbmUgRVhUMl9DT01QUkJMS19GTAkJRlNfQ09NUFJCTEtfRkwJLyogT25lIG9yIG1vcmUgY29tcHJlc3NlZCBjbHVzdGVycyAqLworI2RlZmluZSBFWFQyX05PQ09NUF9GTAkJCUZTX05PQ09NUF9GTAkvKiBEb24ndCBjb21wcmVzcyAqLworI2RlZmluZSBFWFQyX0VDT01QUl9GTAkJCUZTX0VDT01QUl9GTAkvKiBDb21wcmVzc2lvbiBlcnJvciAqLwogLyogRW5kIGNvbXByZXNzaW9uIGZsYWdzIC0tLSBtYXliZSBub3QgYWxsIHVzZWQgKi8JCi0jZGVmaW5lIEVYVDJfQlRSRUVfRkwJCQkweDAwMDAxMDAwIC8qIGJ0cmVlIGZvcm1hdCBkaXIgKi8KLSNkZWZpbmUgRVhUMl9JTkRFWF9GTAkJCTB4MDAwMDEwMDAgLyogaGFzaC1pbmRleGVkIGRpcmVjdG9yeSAqLwotI2RlZmluZSBFWFQyX0lNQUdJQ19GTAkJCTB4MDAwMDIwMDAgLyogQUZTIGRpcmVjdG9yeSAqLwotI2RlZmluZSBFWFQyX0pPVVJOQUxfREFUQV9GTAkJMHgwMDAwNDAwMCAvKiBSZXNlcnZlZCBmb3IgZXh0MyAqLwotI2RlZmluZSBFWFQyX05PVEFJTF9GTAkJCTB4MDAwMDgwMDAgLyogZmlsZSB0YWlsIHNob3VsZCBub3QgYmUgbWVyZ2VkICovCi0jZGVmaW5lIEVYVDJfRElSU1lOQ19GTAkJCTB4MDAwMTAwMDAgLyogZGlyc3luYyBiZWhhdmlvdXIgKGRpcmVjdG9yaWVzIG9ubHkpICovCi0jZGVmaW5lIEVYVDJfVE9QRElSX0ZMCQkJMHgwMDAyMDAwMCAvKiBUb3Agb2YgZGlyZWN0b3J5IGhpZXJhcmNoaWVzKi8KLSNkZWZpbmUgRVhUMl9SRVNFUlZFRF9GTAkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KKyNkZWZpbmUgRVhUMl9CVFJFRV9GTAkJCUZTX0JUUkVFX0ZMCS8qIGJ0cmVlIGZvcm1hdCBkaXIgKi8KKyNkZWZpbmUgRVhUMl9JTkRFWF9GTAkJCUZTX0lOREVYX0ZMCS8qIGhhc2gtaW5kZXhlZCBkaXJlY3RvcnkgKi8KKyNkZWZpbmUgRVhUMl9JTUFHSUNfRkwJCQlGU19JTUFHSUNfRkwJLyogQUZTIGRpcmVjdG9yeSAqLworI2RlZmluZSBFWFQyX0pPVVJOQUxfREFUQV9GTAkJRlNfSk9VUk5BTF9EQVRBX0ZMIC8qIFJlc2VydmVkIGZvciBleHQzICovCisjZGVmaW5lIEVYVDJfTk9UQUlMX0ZMCQkJRlNfTk9UQUlMX0ZMCS8qIGZpbGUgdGFpbCBzaG91bGQgbm90IGJlIG1lcmdlZCAqLworI2RlZmluZSBFWFQyX0RJUlNZTkNfRkwJCQlGU19ESVJTWU5DX0ZMCS8qIGRpcnN5bmMgYmVoYXZpb3VyIChkaXJlY3RvcmllcyBvbmx5KSAqLworI2RlZmluZSBFWFQyX1RPUERJUl9GTAkJCUZTX1RPUERJUl9GTAkvKiBUb3Agb2YgZGlyZWN0b3J5IGhpZXJhcmNoaWVzKi8KKyNkZWZpbmUgRVhUMl9SRVNFUlZFRF9GTAkJRlNfUkVTRVJWRURfRkwJLyogcmVzZXJ2ZWQgZm9yIGV4dDIgbGliICovCiAKLSNkZWZpbmUgRVhUMl9GTF9VU0VSX1ZJU0lCTEUJCTB4MDAwM0RGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCi0jZGVmaW5lIEVYVDJfRkxfVVNFUl9NT0RJRklBQkxFCQkweDAwMDM4MEZGIC8qIFVzZXIgbW9kaWZpYWJsZSBmbGFncyAqLworI2RlZmluZSBFWFQyX0ZMX1VTRVJfVklTSUJMRQkJRlNfRkxfVVNFUl9WSVNJQkxFCS8qIFVzZXIgdmlzaWJsZSBmbGFncyAqLworI2RlZmluZSBFWFQyX0ZMX1VTRVJfTU9ESUZJQUJMRQkJRlNfRkxfVVNFUl9NT0RJRklBQkxFCS8qIFVzZXIgbW9kaWZpYWJsZSBmbGFncyAqLwogCiAvKgogICogaW9jdGwgY29tbWFuZHMKICAqLwotI2RlZmluZQlFWFQyX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxvbmcpCi0jZGVmaW5lCUVYVDJfSU9DX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgbG9uZykKLSNkZWZpbmUJRVhUMl9JT0NfR0VUVkVSU0lPTgkJX0lPUigndicsIDEsIGxvbmcpCi0jZGVmaW5lCUVYVDJfSU9DX1NFVFZFUlNJT04JCV9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZQlFWFQyX0lPQ19HRVRGTEFHUwkJRlNfSU9DX0dFVEZMQUdTCisjZGVmaW5lCUVYVDJfSU9DX1NFVEZMQUdTCQlGU19JT0NfU0VURkxBR1MKKyNkZWZpbmUJRVhUMl9JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUJRVhUMl9JT0NfU0VUVkVSU0lPTgkJRlNfSU9DX1NFVFZFUlNJT04KKworLyoKKyAqIGlvY3RsIGNvbW1hbmRzIGluIDMyIGJpdCBlbXVsYXRpb24KKyAqLworI2RlZmluZSBFWFQyX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUworI2RlZmluZSBFWFQyX0lPQzMyX1NFVEZMQUdTCQlGU19JT0MzMl9TRVRGTEFHUworI2RlZmluZSBFWFQyX0lPQzMyX0dFVFZFUlNJT04JCUZTX0lPQzMyX0dFVFZFUlNJT04KKyNkZWZpbmUgRVhUMl9JT0MzMl9TRVRWRVJTSU9OCQlGU19JT0MzMl9TRVRWRVJTSU9OCiAKIC8qCiAgKiBTdHJ1Y3R1cmUgb2YgYW4gaW5vZGUgb24gdGhlIGRpc2sKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXh0M19mcy5oIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKaW5kZXggMGVlZDkxOC4uMTFjY2ExYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9leHQzX2ZzLmgKQEAgLTIxNiwxNCArMjE2LDE0IEBACiAvKgogICogaW9jdGwgY29tbWFuZHMKICAqLwotI2RlZmluZQlFWFQzX0lPQ19HRVRGTEFHUwkJX0lPUignZicsIDEsIGxvbmcpCi0jZGVmaW5lCUVYVDNfSU9DX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgbG9uZykKKyNkZWZpbmUJRVhUM19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUworI2RlZmluZQlFWFQzX0lPQ19TRVRGTEFHUwkJRlNfSU9DX1NFVEZMQUdTCiAjZGVmaW5lCUVYVDNfSU9DX0dFVFZFUlNJT04JCV9JT1IoJ2YnLCAzLCBsb25nKQogI2RlZmluZQlFWFQzX0lPQ19TRVRWRVJTSU9OCQlfSU9XKCdmJywgNCwgbG9uZykKICNkZWZpbmUgRVhUM19JT0NfR1JPVVBfRVhURU5ECQlfSU9XKCdmJywgNywgdW5zaWduZWQgbG9uZykKICNkZWZpbmUgRVhUM19JT0NfR1JPVVBfQURECQlfSU9XKCdmJywgOCxzdHJ1Y3QgZXh0M19uZXdfZ3JvdXBfaW5wdXQpCi0jZGVmaW5lCUVYVDNfSU9DX0dFVFZFUlNJT05fT0xECQlfSU9SKCd2JywgMSwgbG9uZykKLSNkZWZpbmUJRVhUM19JT0NfU0VUVkVSU0lPTl9PTEQJCV9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZQlFWFQzX0lPQ19HRVRWRVJTSU9OX09MRAkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUJRVhUM19JT0NfU0VUVkVSU0lPTl9PTEQJCUZTX0lPQ19TRVRWRVJTSU9OCiAjaWZkZWYgQ09ORklHX0pCRF9ERUJVRwogI2RlZmluZSBFWFQzX0lPQ19XQUlUX0ZPUl9SRUFET05MWQlfSU9SKCdmJywgOTksIGxvbmcpCiAjZW5kaWYKQEAgLTIzMSw2ICsyMzEsMjMgQEAKICNkZWZpbmUgRVhUM19JT0NfU0VUUlNWU1oJCV9JT1coJ2YnLCA2LCBsb25nKQogCiAvKgorICogaW9jdGwgY29tbWFuZHMgaW4gMzIgYml0IGVtdWxhdGlvbgorICovCisjZGVmaW5lIEVYVDNfSU9DMzJfR0VURkxBR1MJCUZTX0lPQzMyX0dFVEZMQUdTCisjZGVmaW5lIEVYVDNfSU9DMzJfU0VURkxBR1MJCUZTX0lPQzMyX1NFVEZMQUdTCisjZGVmaW5lIEVYVDNfSU9DMzJfR0VUVkVSU0lPTgkJX0lPUignZicsIDMsIGludCkKKyNkZWZpbmUgRVhUM19JT0MzMl9TRVRWRVJTSU9OCQlfSU9XKCdmJywgNCwgaW50KQorI2RlZmluZSBFWFQzX0lPQzMyX0dFVFJTVlNaCQlfSU9SKCdmJywgNSwgaW50KQorI2RlZmluZSBFWFQzX0lPQzMyX1NFVFJTVlNaCQlfSU9XKCdmJywgNiwgaW50KQorI2RlZmluZSBFWFQzX0lPQzMyX0dST1VQX0VYVEVORAkJX0lPVygnZicsIDcsIHVuc2lnbmVkIGludCkKKyNpZmRlZiBDT05GSUdfSkJEX0RFQlVHCisjZGVmaW5lIEVYVDNfSU9DMzJfV0FJVF9GT1JfUkVBRE9OTFkJX0lPUignZicsIDk5LCBpbnQpCisjZW5kaWYKKyNkZWZpbmUgRVhUM19JT0MzMl9HRVRWRVJTSU9OX09MRAlGU19JT0MzMl9HRVRWRVJTSU9OCisjZGVmaW5lIEVYVDNfSU9DMzJfU0VUVkVSU0lPTl9PTEQJRlNfSU9DMzJfU0VUVkVSU0lPTgorCisKKy8qCiAgKiAgTW91bnQgb3B0aW9ucwogICovCiBzdHJ1Y3QgZXh0M19tb3VudF9vcHRpb25zIHsKQEAgLTQ2MCw3ICs0NzcsNyBAQAogCSAqLwogCV9fdTgJc19wcmVhbGxvY19ibG9ja3M7CS8qIE5yIG9mIGJsb2NrcyB0byB0cnkgdG8gcHJlYWxsb2NhdGUqLwogCV9fdTgJc19wcmVhbGxvY19kaXJfYmxvY2tzOwkvKiBOciB0byBwcmVhbGxvY2F0ZSBmb3IgZGlycyAqLwotCV9fdTE2CXNfcmVzZXJ2ZWRfZ2R0X2Jsb2NrczsJLyogUGVyIGdyb3VwIGRlc2MgZm9yIG9ubGluZSBncm93dGggKi8KKwlfX2xlMTYJc19yZXNlcnZlZF9nZHRfYmxvY2tzOwkvKiBQZXIgZ3JvdXAgZGVzYyBmb3Igb25saW5lIGdyb3d0aCAqLwogCS8qCiAJICogSm91cm5hbGluZyBzdXBwb3J0IHZhbGlkIGlmIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgc2V0LgogCSAqLwpAQCAtNDczLDcgKzQ5MCw3IEBACiAJX191OAlzX3Jlc2VydmVkX2NoYXJfcGFkOwogCV9fdTE2CXNfcmVzZXJ2ZWRfd29yZF9wYWQ7CiAJX19sZTMyCXNfZGVmYXVsdF9tb3VudF9vcHRzOwotCV9fbGUzMglzX2ZpcnN0X21ldGFfYmc7IAkvKiBGaXJzdCBtZXRhYmxvY2sgYmxvY2sgZ3JvdXAgKi8KKwlfX2xlMzIJc19maXJzdF9tZXRhX2JnOwkvKiBGaXJzdCBtZXRhYmxvY2sgYmxvY2sgZ3JvdXAgKi8KIAlfX3UzMglzX3Jlc2VydmVkWzE5MF07CS8qIFBhZGRpbmcgdG8gdGhlIGVuZCBvZiB0aGUgYmxvY2sgKi8KIH07CiAKQEAgLTgxMiw2ICs4MjksNyBAQAogLyogaW9jdGwuYyAqLwogZXh0ZXJuIGludCBleHQzX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LAogCQkgICAgICAgdW5zaWduZWQgbG9uZyk7CitleHRlcm4gbG9uZyBleHQzX2NvbXBhdF9pb2N0bCAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKIAogLyogbmFtZWkuYyAqLwogZXh0ZXJuIGludCBleHQzX29ycGhhbl9hZGQoaGFuZGxlX3QgKiwgc3RydWN0IGlub2RlICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvZXh0M19mc19pLmgKaW5kZXggMmYxOGI5NS4uNDM5NWU1MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L2V4dDNfZnNfaS5oCkBAIC0zNSw3ICszNSw3IEBACiB9OwogCiBzdHJ1Y3QgZXh0M19yZXNlcnZlX3dpbmRvd19ub2RlIHsKLQlzdHJ1Y3QgcmJfbm9kZQkgCXJzdl9ub2RlOworCXN0cnVjdCByYl9ub2RlCQlyc3Zfbm9kZTsKIAlfX3UzMgkJCXJzdl9nb2FsX3NpemU7CiAJX191MzIJCQlyc3ZfYWxsb2NfaGl0OwogCXN0cnVjdCBleHQzX3Jlc2VydmVfd2luZG93CXJzdl93aW5kb3c7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmggYi9pbmNsdWRlL2xpbnV4L2V4dDNfamJkLmgKaW5kZXggYzgzMDdjMC4uY2UwZTYxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leHQzX2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvZXh0M19qYmQuaApAQCAtMjMsNyArMjMsNyBAQAogCiAvKiBEZWZpbmUgdGhlIG51bWJlciBvZiBibG9ja3Mgd2UgbmVlZCB0byBhY2NvdW50IHRvIGEgdHJhbnNhY3Rpb24gdG8KICAqIG1vZGlmeSBvbmUgYmxvY2sgb2YgZGF0YS4KLSAqIAorICoKICAqIFdlIG1heSBoYXZlIHRvIHRvdWNoIG9uZSBpbm9kZSwgb25lIGJpdG1hcCBidWZmZXIsIHVwIHRvIHRocmVlCiAgKiBpbmRpcmVjdGlvbiBibG9ja3MsIHRoZSBncm91cCBhbmQgc3VwZXJibG9jayBzdW1tYXJpZXMsIGFuZCB0aGUgZGF0YQogICogYmxvY2sgdG8gY29tcGxldGUgdGhlIHRyYW5zYWN0aW9uLiAgKi8KQEAgLTg4LDE2ICs4OCwxNiBAQAogI2VuZGlmCiAKIGludAotZXh0M19tYXJrX2lsb2NfZGlydHkoaGFuZGxlX3QgKmhhbmRsZSwgCitleHQzX21hcmtfaWxvY19kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLAogCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAgICAgc3RydWN0IGV4dDNfaWxvYyAqaWxvYyk7CiAKLS8qIAorLyoKICAqIE9uIHN1Y2Nlc3MsIFdlIGVuZCB1cCB3aXRoIGFuIG91dHN0YW5kaW5nIHJlZmVyZW5jZSBjb3VudCBhZ2FpbnN0Ci0gKiBpbG9jLT5iaC4gIFRoaXMgX211c3RfIGJlIGNsZWFuZWQgdXAgbGF0ZXIuIAorICogaWxvYy0+YmguICBUaGlzIF9tdXN0XyBiZSBjbGVhbmVkIHVwIGxhdGVyLgogICovCiAKLWludCBleHQzX3Jlc2VydmVfaW5vZGVfd3JpdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwgCitpbnQgZXh0M19yZXNlcnZlX2lub2RlX3dyaXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlzdHJ1Y3QgZXh0M19pbG9jICppbG9jKTsKIAogaW50IGV4dDNfbWFya19pbm9kZV9kaXJ0eShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZmlsZS5oIGIvaW5jbHVkZS9saW51eC9maWxlLmgKaW5kZXggOWY3YzI1MS4uNzQxODNlNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9maWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9maWxlLmgKQEAgLTExMiw1ICsxMTIsNiBAQAogCiBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpnZXRfZmlsZXNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKIHZvaWQgRkFTVENBTEwocHV0X2ZpbGVzX3N0cnVjdChzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmcykpOwordm9pZCByZXNldF9maWxlc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKik7CiAKICNlbmRpZiAvKiBfX0xJTlVYX0ZJTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IDFkM2U2MDEuLjJlMjlhMmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTc5LDggKzc5LDggQEAKICNkZWZpbmUgV1JJVEUgMQogI2RlZmluZSBSRUFEQSAyCQkvKiByZWFkLWFoZWFkICAtIGRvbid0IGJsb2NrIGlmIG5vIHJlc291cmNlcyAqLwogI2RlZmluZSBTV1JJVEUgMwkvKiBmb3IgbGxfcndfYmxvY2soKSAtIHdhaXQgZm9yIGJ1ZmZlciBsb2NrICovCi0jZGVmaW5lIFNQRUNJQUwgNAkvKiBGb3Igbm9uLWJsb2NrZGV2aWNlIHJlcXVlc3RzIGluIHJlcXVlc3QgcXVldWUgKi8KICNkZWZpbmUgUkVBRF9TWU5DCShSRUFEIHwgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBSRUFEX01FVEEJKFJFQUQgfCAoMSA8PCBCSU9fUldfTUVUQSkpCiAjZGVmaW5lIFdSSVRFX1NZTkMJKFdSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkMpKQogI2RlZmluZSBXUklURV9CQVJSSUVSCSgoMSA8PCBCSU9fUlcpIHwgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQogCkBAIC0yMTcsNiArMjE3LDQ1IEBACiAjZGVmaW5lIEZJQk1BUAkgICBfSU8oMHgwMCwxKQkvKiBibWFwIGFjY2VzcyAqLwogI2RlZmluZSBGSUdFVEJTWiAgIF9JTygweDAwLDIpCS8qIGdldCB0aGUgYmxvY2sgc2l6ZSB1c2VkIGZvciBibWFwICovCiAKKyNkZWZpbmUJRlNfSU9DX0dFVEZMQUdTCQkJX0lPUignZicsIDEsIGxvbmcpCisjZGVmaW5lCUZTX0lPQ19TRVRGTEFHUwkJCV9JT1coJ2YnLCAyLCBsb25nKQorI2RlZmluZQlGU19JT0NfR0VUVkVSU0lPTgkJX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lCUZTX0lPQ19TRVRWRVJTSU9OCQlfSU9XKCd2JywgMiwgbG9uZykKKyNkZWZpbmUgRlNfSU9DMzJfR0VURkxBR1MJCV9JT1IoJ2YnLCAxLCBpbnQpCisjZGVmaW5lIEZTX0lPQzMyX1NFVEZMQUdTCQlfSU9XKCdmJywgMiwgaW50KQorI2RlZmluZSBGU19JT0MzMl9HRVRWRVJTSU9OCQlfSU9SKCd2JywgMSwgaW50KQorI2RlZmluZSBGU19JT0MzMl9TRVRWRVJTSU9OCQlfSU9XKCd2JywgMiwgaW50KQorCisvKgorICogSW5vZGUgZmxhZ3MgKEZTX0lPQ19HRVRGTEFHUyAvIEZTX0lPQ19TRVRGTEFHUykKKyAqLworI2RlZmluZQlGU19TRUNSTV9GTAkJCTB4MDAwMDAwMDEgLyogU2VjdXJlIGRlbGV0aW9uICovCisjZGVmaW5lCUZTX1VOUk1fRkwJCQkweDAwMDAwMDAyIC8qIFVuZGVsZXRlICovCisjZGVmaW5lCUZTX0NPTVBSX0ZMCQkJMHgwMDAwMDAwNCAvKiBDb21wcmVzcyBmaWxlICovCisjZGVmaW5lIEZTX1NZTkNfRkwJCQkweDAwMDAwMDA4IC8qIFN5bmNocm9ub3VzIHVwZGF0ZXMgKi8KKyNkZWZpbmUgRlNfSU1NVVRBQkxFX0ZMCQkJMHgwMDAwMDAxMCAvKiBJbW11dGFibGUgZmlsZSAqLworI2RlZmluZSBGU19BUFBFTkRfRkwJCQkweDAwMDAwMDIwIC8qIHdyaXRlcyB0byBmaWxlIG1heSBvbmx5IGFwcGVuZCAqLworI2RlZmluZSBGU19OT0RVTVBfRkwJCQkweDAwMDAwMDQwIC8qIGRvIG5vdCBkdW1wIGZpbGUgKi8KKyNkZWZpbmUgRlNfTk9BVElNRV9GTAkJCTB4MDAwMDAwODAgLyogZG8gbm90IHVwZGF0ZSBhdGltZSAqLworLyogUmVzZXJ2ZWQgZm9yIGNvbXByZXNzaW9uIHVzYWdlLi4uICovCisjZGVmaW5lIEZTX0RJUlRZX0ZMCQkJMHgwMDAwMDEwMAorI2RlZmluZSBGU19DT01QUkJMS19GTAkJCTB4MDAwMDAyMDAgLyogT25lIG9yIG1vcmUgY29tcHJlc3NlZCBjbHVzdGVycyAqLworI2RlZmluZSBGU19OT0NPTVBfRkwJCQkweDAwMDAwNDAwIC8qIERvbid0IGNvbXByZXNzICovCisjZGVmaW5lIEZTX0VDT01QUl9GTAkJCTB4MDAwMDA4MDAgLyogQ29tcHJlc3Npb24gZXJyb3IgKi8KKy8qIEVuZCBjb21wcmVzc2lvbiBmbGFncyAtLS0gbWF5YmUgbm90IGFsbCB1c2VkICovCisjZGVmaW5lIEZTX0JUUkVFX0ZMCQkJMHgwMDAwMTAwMCAvKiBidHJlZSBmb3JtYXQgZGlyICovCisjZGVmaW5lIEZTX0lOREVYX0ZMCQkJMHgwMDAwMTAwMCAvKiBoYXNoLWluZGV4ZWQgZGlyZWN0b3J5ICovCisjZGVmaW5lIEZTX0lNQUdJQ19GTAkJCTB4MDAwMDIwMDAgLyogQUZTIGRpcmVjdG9yeSAqLworI2RlZmluZSBGU19KT1VSTkFMX0RBVEFfRkwJCTB4MDAwMDQwMDAgLyogUmVzZXJ2ZWQgZm9yIGV4dDMgKi8KKyNkZWZpbmUgRlNfTk9UQUlMX0ZMCQkJMHgwMDAwODAwMCAvKiBmaWxlIHRhaWwgc2hvdWxkIG5vdCBiZSBtZXJnZWQgKi8KKyNkZWZpbmUgRlNfRElSU1lOQ19GTAkJCTB4MDAwMTAwMDAgLyogZGlyc3luYyBiZWhhdmlvdXIgKGRpcmVjdG9yaWVzIG9ubHkpICovCisjZGVmaW5lIEZTX1RPUERJUl9GTAkJCTB4MDAwMjAwMDAgLyogVG9wIG9mIGRpcmVjdG9yeSBoaWVyYXJjaGllcyovCisjZGVmaW5lIEZTX1JFU0VSVkVEX0ZMCQkJMHg4MDAwMDAwMCAvKiByZXNlcnZlZCBmb3IgZXh0MiBsaWIgKi8KKworI2RlZmluZSBGU19GTF9VU0VSX1ZJU0lCTEUJCTB4MDAwM0RGRkYgLyogVXNlciB2aXNpYmxlIGZsYWdzICovCisjZGVmaW5lIEZTX0ZMX1VTRVJfTU9ESUZJQUJMRQkJMHgwMDAzODBGRiAvKiBVc2VyIG1vZGlmaWFibGUgZmxhZ3MgKi8KKworCiAjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XQUlUX0JFRk9SRQkxCiAjZGVmaW5lIFNZTkNfRklMRV9SQU5HRV9XUklURQkJMgogI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUgk0CkBAIC01MTIsNyArNTUxLDYgQEAKIAlzdHJ1Y3QgdGltZXNwZWMJCWlfbXRpbWU7CiAJc3RydWN0IHRpbWVzcGVjCQlpX2N0aW1lOwogCXVuc2lnbmVkIGludAkJaV9ibGtiaXRzOwotCXVuc2lnbmVkIGxvbmcJCWlfYmxrc2l6ZTsKIAl1bnNpZ25lZCBsb25nCQlpX3ZlcnNpb247CiAJYmxrY250X3QJCWlfYmxvY2tzOwogCXVuc2lnbmVkIHNob3J0ICAgICAgICAgIGlfYnl0ZXM7CkBAIC01MjgsMTEgKzU2NiwxMiBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCXN0cnVjdCBkcXVvdAkJKmlfZHF1b3RbTUFYUVVPVEFTXTsKICNlbmRpZgotCS8qIFRoZXNlIHRocmVlIHNob3VsZCBwcm9iYWJseSBiZSBhIHVuaW9uICovCiAJc3RydWN0IGxpc3RfaGVhZAlpX2RldmljZXM7Ci0Jc3RydWN0IHBpcGVfaW5vZGVfaW5mbwkqaV9waXBlOwotCXN0cnVjdCBibG9ja19kZXZpY2UJKmlfYmRldjsKLQlzdHJ1Y3QgY2RldgkJKmlfY2RldjsKKwl1bmlvbiB7CisJCXN0cnVjdCBwaXBlX2lub2RlX2luZm8JKmlfcGlwZTsKKwkJc3RydWN0IGJsb2NrX2RldmljZQkqaV9iZGV2OworCQlzdHJ1Y3QgY2RldgkJKmlfY2RldjsKKwl9OwogCWludAkJCWlfY2luZGV4OwogCiAJX191MzIJCQlpX2dlbmVyYXRpb247CkBAIC01NTMsMTAgKzU5MiwxMCBAQAogCXVuc2lnbmVkIGludAkJaV9mbGFnczsKIAogCWF0b21pY190CQlpX3dyaXRlY291bnQ7CisjaWZkZWYgQ09ORklHX1NFQ1VSSVRZCiAJdm9pZAkJCSppX3NlY3VyaXR5OwotCXVuaW9uIHsKLQkJdm9pZAkJKmdlbmVyaWNfaXA7Ci0JfSB1OworI2VuZGlmCisJdm9pZAkJCSppX3ByaXZhdGU7IC8qIGZzIG9yIGRldmljZSBwcml2YXRlIHBvaW50ZXIgKi8KICNpZmRlZiBfX05FRURfSV9TSVpFX09SREVSRUQKIAlzZXFjb3VudF90CQlpX3NpemVfc2VxY291bnQ7CiAjZW5kaWYKQEAgLTY0Nyw3ICs2ODYsNiBAQAogCXJ3bG9ja190IGxvY2s7ICAgICAgICAgIC8qIHByb3RlY3RzIHBpZCwgdWlkLCBldWlkIGZpZWxkcyAqLwogCWludCBwaWQ7CQkvKiBwaWQgb3IgLXBncnAgd2hlcmUgU0lHSU8gc2hvdWxkIGJlIHNlbnQgKi8KIAl1aWRfdCB1aWQsIGV1aWQ7CS8qIHVpZC9ldWlkIG9mIHByb2Nlc3Mgc2V0dGluZyB0aGUgb3duZXIgKi8KLQl2b2lkICpzZWN1cml0eTsKIAlpbnQgc2lnbnVtOwkJLyogcG9zaXguMWIgcnQgc2lnbmFsIHRvIGJlIGRlbGl2ZXJlZCBvbiBJTyAqLwogfTsKIApAQCAtNjkwLDggKzcyOCw5IEBACiAJc3RydWN0IGZpbGVfcmFfc3RhdGUJZl9yYTsKIAogCXVuc2lnbmVkIGxvbmcJCWZfdmVyc2lvbjsKKyNpZmRlZiBDT05GSUdfU0VDVVJJVFkKIAl2b2lkCQkJKmZfc2VjdXJpdHk7Ci0KKyNlbmRpZgogCS8qIG5lZWRlZCBmb3IgdHR5IGRyaXZlciwgYW5kIG1heWJlIG90aGVycyAqLwogCXZvaWQJCQkqcHJpdmF0ZV9kYXRhOwogCkBAIC04NzksNyArOTE4LDkgQEAKIAlpbnQJCQlzX3N5bmNpbmc7CiAJaW50CQkJc19uZWVkX3N5bmNfZnM7CiAJYXRvbWljX3QJCXNfYWN0aXZlOworI2lmZGVmIENPTkZJR19TRUNVUklUWQogCXZvaWQgICAgICAgICAgICAgICAgICAgICpzX3NlY3VyaXR5OworI2VuZGlmCiAJc3RydWN0IHhhdHRyX2hhbmRsZXIJKipzX3hhdHRyOwogCiAJc3RydWN0IGxpc3RfaGVhZAlzX2lub2RlczsJLyogYWxsIGlub2RlcyAqLwpAQCAtMTA1Niw5ICsxMDk3LDkgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIGludCk7CiAJc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKLQlzc2l6ZV90ICgqYWlvX3JlYWQpIChzdHJ1Y3Qga2lvY2IgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOwogCXNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwotCXNzaXplX3QgKCphaW9fd3JpdGUpIChzdHJ1Y3Qga2lvY2IgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworCXNzaXplX3QgKCphaW9fcmVhZCkgKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKKwlzc2l6ZV90ICgqYWlvX3dyaXRlKSAoc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOwogCWludCAoKnJlYWRkaXIpIChzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CiAJdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqKTsKIAlpbnQgKCppb2N0bCkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwpAQCAtMTA3Miw4ICsxMTEzLDYgQEAKIAlpbnQgKCphaW9fZnN5bmMpIChzdHJ1Y3Qga2lvY2IgKiwgaW50IGRhdGFzeW5jKTsKIAlpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICosIGludCk7CiAJaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKLQlzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwotCXNzaXplX3QgKCp3cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogCXNzaXplX3QgKCpzZW5kZmlsZSkgKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCBzaXplX3QsIHJlYWRfYWN0b3JfdCwgdm9pZCAqKTsKIAlzc2l6ZV90ICgqc2VuZHBhZ2UpIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCBpbnQsIHNpemVfdCwgbG9mZl90ICosIGludCk7CiAJdW5zaWduZWQgbG9uZyAoKmdldF91bm1hcHBlZF9hcmVhKShzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKQEAgLTExMTEsNiArMTE1MCwxMSBAQAogCiBzdHJ1Y3Qgc2VxX2ZpbGU7CiAKK3NzaXplX3QgcndfY29weV9jaGVja191dmVjdG9yKGludCB0eXBlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgX191c2VyICogdXZlY3RvciwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIHVuc2lnbmVkIGxvbmcgZmFzdF9zZWdzLAorCQkJCXN0cnVjdCBpb3ZlYyAqZmFzdF9wb2ludGVyLAorCQkJCXN0cnVjdCBpb3ZlYyAqKnJldF9wb2ludGVyKTsKKwogZXh0ZXJuIHNzaXplX3QgdmZzX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiBleHRlcm4gc3NpemVfdCB2ZnNfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiBleHRlcm4gc3NpemVfdCB2ZnNfcmVhZHYoc3RydWN0IGZpbGUgKiwgY29uc3Qgc3RydWN0IGlvdmVjIF9fdXNlciAqLApAQCAtMTE0NSw5ICsxMTg5LDEwIEBACiAKIAlpbnQgKCpzaG93X29wdGlvbnMpKHN0cnVjdCBzZXFfZmlsZSAqLCBzdHJ1Y3QgdmZzbW91bnQgKik7CiAJaW50ICgqc2hvd19zdGF0cykoc3RydWN0IHNlcV9maWxlICosIHN0cnVjdCB2ZnNtb3VudCAqKTsKLQorI2lmZGVmIENPTkZJR19RVU9UQQogCXNzaXplX3QgKCpxdW90YV9yZWFkKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgaW50LCBjaGFyICosIHNpemVfdCwgbG9mZl90KTsKIAlzc2l6ZV90ICgqcXVvdGFfd3JpdGUpKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QpOworI2VuZGlmCiB9OwogCiAvKiBJbm9kZSBzdGF0ZSBiaXRzLiAgUHJvdGVjdGVkIGJ5IGlub2RlX2xvY2suICovCkBAIC0xMTc0LDE1ICsxMjE5LDMwIEBACiAJX19tYXJrX2lub2RlX2RpcnR5KGlub2RlLCBJX0RJUlRZX1NZTkMpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfaW5jX2xpbmtfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbmNfbmxpbmsoc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlpbm9kZS0+aV9ubGluaysrOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgaW5vZGVfaW5jX2xpbmtfY291bnQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbmNfbmxpbmsoaW5vZGUpOwogCW1hcmtfaW5vZGVfZGlydHkoaW5vZGUpOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9ubGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlub2RlLT5pX25saW5rLS07Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9ubGluayhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWlub2RlLT5pX25saW5rID0gMDsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGlub2RlX2RlY19saW5rX2NvdW50KHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JaW5vZGUtPmlfbmxpbmstLTsKKwlkcm9wX25saW5rKGlub2RlKTsKIAltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKIH0KIApAQCAtMTQ0MCw2ICsxNTAwLDcgQEAKIGV4dGVybiB2b2lkIHB1dG5hbWUoY29uc3QgY2hhciAqbmFtZSk7CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19CTE9DSwogZXh0ZXJuIGludCByZWdpc3Rlcl9ibGtkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2Jsa2Rldih1bnNpZ25lZCBpbnQsIGNvbnN0IGNoYXIgKik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRnZXQoZGV2X3QpOwpAQCAtMTQ0OCwxMSArMTUwOSwxNSBAQAogZXh0ZXJuIHZvaWQgYmRwdXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpvcGVuX2J5X2Rldm51bShkZXZfdCwgdW5zaWduZWQpOwogZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKm9wZW5fcGFydGl0aW9uX2J5X2Rldm51bShkZXZfdCwgdW5zaWduZWQpOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBhZGRyZXNzX3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiZF9mb3JnZXQoc3RydWN0IGlub2RlICppbm9kZSkge30KKyNlbmRpZgorZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Jsa19mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZGVmX2Nocl9mb3BzOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYmFkX3NvY2tfZm9wczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9maWZvX2ZvcHM7CisjaWZkZWYgQ09ORklHX0JMT0NLCiBleHRlcm4gaW50IGlvY3RsX2J5X2JkZXYoc3RydWN0IGJsb2NrX2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gaW50IGJsa2Rldl9pb2N0bChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGxvbmcgY29tcGF0X2Jsa2Rldl9pb2N0bChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CkBAIC0xNDY4LDYgKzE1MzMsNyBAQAogI2RlZmluZSBiZF9jbGFpbV9ieV9kaXNrKGJkZXYsIGhvbGRlciwgZGlzaykJYmRfY2xhaW0oYmRldiwgaG9sZGVyKQogI2RlZmluZSBiZF9yZWxlYXNlX2Zyb21fZGlzayhiZGV2LCBkaXNrKQliZF9yZWxlYXNlKGJkZXYpCiAjZW5kaWYKKyNlbmRpZgogCiAvKiBmcy9jaGFyX2Rldi5jICovCiAjZGVmaW5lIENIUkRFVl9NQUpPUl9IQVNIX1NJWkUJMjU1CkBAIC0xNDgxLDE0ICsxNTQ3LDE5IEBACiBleHRlcm4gdm9pZCBjaHJkZXZfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKixvZmZfdCk7CiAKIC8qIGZzL2Jsb2NrX2Rldi5jICovCi0jZGVmaW5lIEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUJMjU1CiAjZGVmaW5lIEJERVZOQU1FX1NJWkUJMzIJLyogTGFyZ2VzdCBzdHJpbmcgZm9yIGEgYmxvY2tkZXYgaWRlbnRpZmllciAqLworCisjaWZkZWYgQ09ORklHX0JMT0NLCisjZGVmaW5lIEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUJMjU1CiBleHRlcm4gY29uc3QgY2hhciAqX19iZGV2bmFtZShkZXZfdCwgY2hhciAqYnVmZmVyKTsKIGV4dGVybiBjb25zdCBjaGFyICpiZGV2bmFtZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCBjaGFyICpidWZmZXIpOwogZXh0ZXJuIHN0cnVjdCBibG9ja19kZXZpY2UgKmxvb2t1cF9iZGV2KGNvbnN0IGNoYXIgKik7CiBleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqb3Blbl9iZGV2X2V4Y2woY29uc3QgY2hhciAqLCBpbnQsIHZvaWQgKik7CiBleHRlcm4gdm9pZCBjbG9zZV9iZGV2X2V4Y2woc3RydWN0IGJsb2NrX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIGJsa2Rldl9zaG93KHN0cnVjdCBzZXFfZmlsZSAqLG9mZl90KTsKKyNlbHNlCisjZGVmaW5lIEJMS0RFVl9NQUpPUl9IQVNIX1NJWkUJMAorI2VuZGlmCiAKIGV4dGVybiB2b2lkIGluaXRfc3BlY2lhbF9pbm9kZShzdHJ1Y3QgaW5vZGUgKiwgdW1vZGVfdCwgZGV2X3QpOwogCkBAIC0xNTAyLDYgKzE1NzMsNyBAQAogCiBleHRlcm4gaW50IGZzX21heV9yZW1vdW50X3JvKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIAorI2lmZGVmIENPTkZJR19CTE9DSwogLyoKICAqIHJldHVybiBSRUFELCBSRUFEQSwgb3IgV1JJVEUKICAqLwpAQCAtMTUxMyw5ICsxNTg1LDEwIEBACiAjZGVmaW5lIGJpb19kYXRhX2RpcihiaW8pCSgoYmlvKS0+YmlfcncgJiAxKQogCiBleHRlcm4gaW50IGNoZWNrX2Rpc2tfY2hhbmdlKHN0cnVjdCBibG9ja19kZXZpY2UgKik7Ci1leHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBpbnQgX19pbnZhbGlkYXRlX2RldmljZShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOwogZXh0ZXJuIGludCBpbnZhbGlkYXRlX3BhcnRpdGlvbihzdHJ1Y3QgZ2VuZGlzayAqLCBpbnQpOworI2VuZGlmCitleHRlcm4gaW50IGludmFsaWRhdGVfaW5vZGVzKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIHVuc2lnbmVkIGxvbmcgaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCQkJCQlwZ29mZl90IHN0YXJ0LCBwZ29mZl90IGVuZCk7CiB1bnNpZ25lZCBsb25nIGludmFsaWRhdGVfaW5vZGVfcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwpAQCAtMTU0MywxMSArMTYxNiwxNCBAQAogZXh0ZXJuIGxvbmcgZG9fZnN5bmMoc3RydWN0IGZpbGUgKmZpbGUsIGludCBkYXRhc3luYyk7CiBleHRlcm4gdm9pZCBzeW5jX3N1cGVycyh2b2lkKTsKIGV4dGVybiB2b2lkIHN5bmNfZmlsZXN5c3RlbXMoaW50IHdhaXQpOworZXh0ZXJuIHZvaWQgX19mc3luY19zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGV4dGVybiB2b2lkIGVtZXJnZW5jeV9zeW5jKHZvaWQpOwogZXh0ZXJuIHZvaWQgZW1lcmdlbmN5X3JlbW91bnQodm9pZCk7CiBleHRlcm4gaW50IGRvX3JlbW91bnRfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGZsYWdzLAogCQkJIHZvaWQgKmRhdGEsIGludCBmb3JjZSk7CisjaWZkZWYgQ09ORklHX0JMT0NLCiBleHRlcm4gc2VjdG9yX3QgYm1hcChzdHJ1Y3QgaW5vZGUgKiwgc2VjdG9yX3QpOworI2VuZGlmCiBleHRlcm4gaW50IG5vdGlmeV9jaGFuZ2Uoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CiBleHRlcm4gaW50IHBlcm1pc3Npb24oc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IG5hbWVpZGF0YSAqKTsKIGV4dGVybiBpbnQgZ2VuZXJpY19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQsCkBAIC0xNTY1LDYgKzE2NDEsOSBAQAogCQlhdG9taWNfaW5jKCZmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZS0+aV93cml0ZWNvdW50KTsKIH0KIGV4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7CitleHRlcm4gc3RydWN0IGZpbGUgKmNyZWF0ZV9yZWFkX3BpcGUoc3RydWN0IGZpbGUgKmYpOworZXh0ZXJuIHN0cnVjdCBmaWxlICpjcmVhdGVfd3JpdGVfcGlwZSh2b2lkKTsKK2V4dGVybiB2b2lkIGZyZWVfd3JpdGVfcGlwZShzdHJ1Y3QgZmlsZSAqKTsKIAogZXh0ZXJuIGludCBvcGVuX25hbWVpKGludCBkZmQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVjdCBuYW1laWRhdGEgKik7CiBleHRlcm4gaW50IG1heV9vcGVuKHN0cnVjdCBuYW1laWRhdGEgKiwgaW50LCBpbnQpOwpAQCAtMTYzMCw5ICsxNzA5LDExIEBACiBleHRlcm4gc3RydWN0IGZpbGUgKiBnZXRfZW1wdHlfZmlscCh2b2lkKTsKIGV4dGVybiB2b2lkIGZpbGVfbW92ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCk7CiBleHRlcm4gdm9pZCBmaWxlX2tpbGwoc3RydWN0IGZpbGUgKmYpOworI2lmZGVmIENPTkZJR19CTE9DSwogc3RydWN0IGJpbzsKIGV4dGVybiB2b2lkIHN1Ym1pdF9iaW8oaW50LCBzdHJ1Y3QgYmlvICopOwogZXh0ZXJuIGludCBiZGV2X3JlYWRfb25seShzdHJ1Y3QgYmxvY2tfZGV2aWNlICopOworI2VuZGlmCiBleHRlcm4gaW50IHNldF9ibG9ja3NpemUoc3RydWN0IGJsb2NrX2RldmljZSAqLCBpbnQpOwogZXh0ZXJuIGludCBzYl9zZXRfYmxvY2tzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwogZXh0ZXJuIGludCBzYl9taW5fYmxvY2tzaXplKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbnQpOwpAQCAtMTY0MSwyMiArMTcyMiwxNyBAQAogZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfcmVhZG9ubHlfbW1hcChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiBleHRlcm4gaW50IGZpbGVfcmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRlc2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKIGV4dGVybiBpbnQgZmlsZV9zZW5kX2FjdG9yKHJlYWRfZGVzY3JpcHRvcl90ICogZGVzYywgc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiBpbnQgZ2VuZXJpY193cml0ZV9jaGVja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCAqcG9zLCBzaXplX3QgKmNvdW50LCBpbnQgaXNibGspOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90ICopOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCk7Ci1leHRlcm4gc3NpemVfdCBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCAqKTsKLWV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICosIGNvbnN0IGNoYXIgX191c2VyICosIHNpemVfdCwgbG9mZl90KTsKK2V4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCk7CitleHRlcm4gc3NpemVfdCBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90KTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKLQkJdW5zaWduZWQgbG9uZywgbG9mZl90ICopOworCQl1bnNpZ25lZCBsb25nLCBsb2ZmX3QpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKiwgY29uc3Qgc3RydWN0IGlvdmVjICosCiAJCXVuc2lnbmVkIGxvbmcgKiwgbG9mZl90LCBsb2ZmX3QgKiwgc2l6ZV90LCBzaXplX3QpOwogZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX2J1ZmZlcmVkX3dyaXRlKHN0cnVjdCBraW9jYiAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwKIAkJdW5zaWduZWQgbG9uZywgbG9mZl90LCBsb2ZmX3QgKiwgc2l6ZV90LCBzc2l6ZV90KTsKIGV4dGVybiBzc2l6ZV90IGRvX3N5bmNfcmVhZChzdHJ1Y3QgZmlsZSAqZmlscCwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGxlbiwgbG9mZl90ICpwcG9zKTsKIGV4dGVybiBzc2l6ZV90IGRvX3N5bmNfd3JpdGUoc3RydWN0IGZpbGUgKmZpbHAsIGNvbnN0IGNoYXIgX191c2VyICpidWYsIHNpemVfdCBsZW4sIGxvZmZfdCAqcHBvcyk7Ci1zc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKTsKIGV4dGVybiBzc2l6ZV90IGdlbmVyaWNfZmlsZV9zZW5kZmlsZShzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QgKiwgc2l6ZV90LCByZWFkX2FjdG9yX3QsIHZvaWQgKik7CiBleHRlcm4gdm9pZCBkb19nZW5lcmljX21hcHBpbmdfcmVhZChzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywKIAkJCQkgICAgc3RydWN0IGZpbGVfcmFfc3RhdGUgKiwgc3RydWN0IGZpbGUgKiwKQEAgLTE2NzQsMTAgKzE3NTAsNiBAQAogCiBleHRlcm4gdm9pZAogZmlsZV9yYV9zdGF0ZV9pbml0KHN0cnVjdCBmaWxlX3JhX3N0YXRlICpyYSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcpOwotZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCi0JdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpOwotc3NpemVfdCBnZW5lcmljX2ZpbGVfd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgCi0JCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcyk7CiBleHRlcm4gbG9mZl90IG5vX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CiBleHRlcm4gbG9mZl90IGdlbmVyaWNfZmlsZV9sbHNlZWsoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGludCBvcmlnaW4pOwogZXh0ZXJuIGxvZmZfdCByZW1vdGVfbGxzZWVrKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKQEAgLTE3MTMsNiArMTc4NSw3IEBACiAJCQkJYWN0b3IpOwogfQogCisjaWZkZWYgQ09ORklHX0JMT0NLCiBzc2l6ZV90IF9fYmxvY2tkZXZfZGlyZWN0X0lPKGludCBydywgc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXN0cnVjdCBibG9ja19kZXZpY2UgKmJkZXYsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBsb2ZmX3Qgb2Zmc2V0LAogCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgZ2V0X2Jsb2NrX3QgZ2V0X2Jsb2NrLCBkaW9faW9kb25lX3QgZW5kX2lvLApAQCAtMTc1MCw2ICsxODIzLDcgQEAKIAlyZXR1cm4gX19ibG9ja2Rldl9kaXJlY3RfSU8ocncsIGlvY2IsIGlub2RlLCBiZGV2LCBpb3YsIG9mZnNldCwKIAkJCQlucl9zZWdzLCBnZXRfYmxvY2ssIGVuZF9pbywgRElPX09XTl9MT0NLSU5HKTsKIH0KKyNlbmRpZgogCiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBnZW5lcmljX3JvX2ZvcHM7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaCBiL2luY2x1ZGUvbGludXgvZ2VuZXJpY19hY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDc2NGY0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9nZW5lcmljX2FjbC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBmcy9nZW5lcmljX2FjbC5jCisgKgorICogKEMpIDIwMDUgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2lmbmRlZiBHRU5FUklDX0FDTF9ICisjZGVmaW5lIEdFTkVSSUNfQUNMX0gKKworI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbF94YXR0ci5oPgorCisvKioKKyAqIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICAtICBmaWxlc3lzdGVtIG9wZXJhdGlvbnMKKyAqCisgKiBGaWxlc3lzdGVtcyBtdXN0IG1ha2UgdGhlc2Ugb3BlcmF0aW9ucyBhdmFpbGFibGUgdG8gdGhlIGdlbmVyaWMKKyAqIG9wZXJhdGlvbnMuCisgKi8KK3N0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zIHsKKwlzdHJ1Y3QgcG9zaXhfYWNsICooKmdldGFjbCkoc3RydWN0IGlub2RlICosIGludCk7CisJdm9pZCAoKnNldGFjbCkoc3RydWN0IGlub2RlICosIGludCwgc3RydWN0IHBvc2l4X2FjbCAqKTsKK307CisKK3NpemVfdCBnZW5lcmljX2FjbF9saXN0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqLCBpbnQsCisJCQljaGFyICosIHNpemVfdCk7CitpbnQgZ2VuZXJpY19hY2xfZ2V0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqLCBpbnQsCisJCSAgICB2b2lkICosIHNpemVfdCk7CitpbnQgZ2VuZXJpY19hY2xfc2V0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucyAqLCBpbnQsCisJCSAgICBjb25zdCB2b2lkICosIHNpemVfdCk7CitpbnQgZ2VuZXJpY19hY2xfaW5pdChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosCisJCSAgICAgc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgKik7CitpbnQgZ2VuZXJpY19hY2xfY2htb2Qoc3RydWN0IGlub2RlICosIHN0cnVjdCBnZW5lcmljX2FjbF9vcGVyYXRpb25zICopOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZ2VuaGQuaCBiL2luY2x1ZGUvbGludXgvZ2VuaGQuaAppbmRleCBlNGFmNTdlLi40MWYyNzZmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dlbmhkLmgKKysrIGIvaW5jbHVkZS9saW51eC9nZW5oZC5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCisjaWZkZWYgQ09ORklHX0JMT0NLCisKIGVudW0gewogLyogVGhlc2UgdGhyZWUgaGF2ZSBpZGVudGljYWwgYmVoYXZpb3VyOyB1c2UgdGhlIHNlY29uZCBvbmUgaWYgRE9TIEZESVNLIGdldHMKICAgIGNvbmZ1c2VkIGFib3V0IGV4dGVuZGVkL2xvZ2ljYWwgcGFydGl0aW9ucyBzdGFydGluZyBwYXN0IGN5bGluZGVyIDEwMjMuICovCkBAIC00MjAsMyArNDIyLDUgQEAKICNlbmRpZgogCiAjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2dldGNwdS5oIGIvaW5jbHVkZS9saW51eC9nZXRjcHUuaAppbmRleCAwMzFlZDM3Li5jNzM3MmQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2dldGNwdS5oCisrKyBiL2luY2x1ZGUvbGludXgvZ2V0Y3B1LmgKQEAgLTEsMTYgKzEsMTggQEAKICNpZm5kZWYgX0xJTlVYX0dFVENQVV9ICiAjZGVmaW5lIF9MSU5VWF9HRVRDUFVfSCAxCiAKLS8qIENhY2hlIGZvciBnZXRjcHUoKSB0byBzcGVlZCBpdCB1cC4gUmVzdWx0cyBtaWdodCBiZSB1cHRvIGEgamlmZmllCisvKiBDYWNoZSBmb3IgZ2V0Y3B1KCkgdG8gc3BlZWQgaXQgdXAuIFJlc3VsdHMgbWlnaHQgYmUgYSBzaG9ydCB0aW1lCiAgICBvdXQgb2YgZGF0ZSwgYnV0IHdpbGwgYmUgZmFzdGVyLgorCiAgICBVc2VyIHByb2dyYW1zIHNob3VsZCBub3QgcmVmZXIgdG8gdGhlIGNvbnRlbnRzIG9mIHRoaXMgc3RydWN0dXJlLgotICAgSXQgaXMgb25seSBhIGNhY2hlIGZvciB2Z2V0Y3B1KCkuIEl0IG1pZ2h0IGNoYW5nZSBpbiBmdXR1cmUga2VybmVscy4KKyAgIEkgcmVwZWF0IHRoZXkgc2hvdWxkIG5vdCByZWZlciB0byBpdC4gSWYgdGhleSBkbyB0aGV5IHdpbGwgYnJlYWsKKyAgIGluIGZ1dHVyZSBrZXJuZWxzLgorCisgICBJdCBpcyBvbmx5IGEgcHJpdmF0ZSBjYWNoZSBmb3IgdmdldGNwdSgpLiBJdCB3aWxsIGNoYW5nZSBpbiBmdXR1cmUga2VybmVscy4KICAgIFRoZSB1c2VyIHByb2dyYW0gbXVzdCBzdG9yZSB0aGlzIGluZm9ybWF0aW9uIHBlciB0aHJlYWQgKF9fdGhyZWFkKQogICAgSWYgeW91IHdhbnQgMTAwJSBhY2N1cmF0ZSBpbmZvcm1hdGlvbiBwYXNzIE5VTEwgaW5zdGVhZC4gKi8KIHN0cnVjdCBnZXRjcHVfY2FjaGUgewotCXVuc2lnbmVkIGxvbmcgdDA7Ci0JdW5zaWduZWQgbG9uZyB0MTsKLQl1bnNpZ25lZCBsb25nIHJlc1s0XTsKKwl1bnNpZ25lZCBsb25nIGJsb2JbMTI4IC8gc2l6ZW9mKGxvbmcpXTsKIH07CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9nZnAuaCBiL2luY2x1ZGUvbGludXgvZ2ZwLmgKaW5kZXggOGIzNGFhYi4uYmYyYjZiYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9nZnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2dmcC5oCkBAIC02Nyw3ICs2NywxMiBAQAogI2RlZmluZSBHRlBfSElHSFVTRVIJKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTIHwgX19HRlBfSEFSRFdBTEwgfCBcCiAJCQkgX19HRlBfSElHSE1FTSkKIAorI2lmZGVmIENPTkZJR19OVU1BCiAjZGVmaW5lIEdGUF9USElTTk9ERQkoX19HRlBfVEhJU05PREUgfCBfX0dGUF9OT1dBUk4gfCBfX0dGUF9OT1JFVFJZKQorI2Vsc2UKKyNkZWZpbmUgR0ZQX1RISVNOT0RFCTAKKyNlbmRpZgorCiAKIC8qIEZsYWcgLSBpbmRpY2F0ZXMgdGhhdCB0aGUgYnVmZmVyIHdpbGwgYmUgc3VpdGFibGUgZm9yIERNQS4gIElnbm9yZWQgb24gc29tZQogICAgcGxhdGZvcm1zLCB1c2VkIGFzIGFwcHJvcHJpYXRlIG9uIG90aGVycyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9oZGxjLmggYi9pbmNsdWRlL2xpbnV4L2hkbGMuaAppbmRleCBkNWViYmIyLi5kNGIzMzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2hkbGMuaAorKysgYi9pbmNsdWRlL2xpbnV4L2hkbGMuaApAQCAtMTEsOTUgKzExLDQ2IEBACiAjaWZuZGVmIF9fSERMQ19ICiAjZGVmaW5lIF9fSERMQ19ICiAKLSNkZWZpbmUgR0VORVJJQ19IRExDX1ZFUlNJT04gNAkvKiBGb3Igc3luY2hyb25pemF0aW9uIHdpdGggc2V0aGRsYyB1dGlsaXR5ICovCi0KLSNkZWZpbmUgQ0xPQ0tfREVGQVVMVCAgIDAJLyogRGVmYXVsdCBzZXR0aW5nICovCi0jZGVmaW5lIENMT0NLX0VYVAkxCS8qIEV4dGVybmFsIFRYIGFuZCBSWCBjbG9jayAtIERURSAqLwotI2RlZmluZSBDTE9DS19JTlQJMgkvKiBJbnRlcm5hbCBUWCBhbmQgUlggY2xvY2sgLSBEQ0UgKi8KLSNkZWZpbmUgQ0xPQ0tfVFhJTlQJMwkvKiBJbnRlcm5hbCBUWCBhbmQgZXh0ZXJuYWwgUlggY2xvY2sgKi8KLSNkZWZpbmUgQ0xPQ0tfVFhGUk9NUlgJNAkvKiBUWCBjbG9jayBkZXJpdmVkIGZyb20gZXh0ZXJuYWwgUlggY2xvY2sgKi8KLQotCi0jZGVmaW5lIEVOQ09ESU5HX0RFRkFVTFQJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KLSNkZWZpbmUgRU5DT0RJTkdfTlJaCQkxCi0jZGVmaW5lIEVOQ09ESU5HX05SWkkJCTIKLSNkZWZpbmUgRU5DT0RJTkdfRk1fTUFSSwkzCi0jZGVmaW5lIEVOQ09ESU5HX0ZNX1NQQUNFCTQKLSNkZWZpbmUgRU5DT0RJTkdfTUFOQ0hFU1RFUgk1Ci0KLQotI2RlZmluZSBQQVJJVFlfREVGQVVMVAkJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KLSNkZWZpbmUgUEFSSVRZX05PTkUJCTEgLyogTm8gcGFyaXR5ICovCi0jZGVmaW5lIFBBUklUWV9DUkMxNl9QUjAJMiAvKiBDUkMxNiwgaW5pdGlhbCB2YWx1ZSAweDAwMDAgKi8KLSNkZWZpbmUgUEFSSVRZX0NSQzE2X1BSMQkzIC8qIENSQzE2LCBpbml0aWFsIHZhbHVlIDB4RkZGRiAqLwotI2RlZmluZSBQQVJJVFlfQ1JDMTZfUFIwX0NDSVRUCTQgLyogQ1JDMTYsIGluaXRpYWwgMHgwMDAwLCBJVFUtVCB2ZXJzaW9uICovCi0jZGVmaW5lIFBBUklUWV9DUkMxNl9QUjFfQ0NJVFQJNSAvKiBDUkMxNiwgaW5pdGlhbCAweEZGRkYsIElUVS1UIHZlcnNpb24gKi8KLSNkZWZpbmUgUEFSSVRZX0NSQzMyX1BSMF9DQ0lUVAk2IC8qIENSQzMyLCBpbml0aWFsIHZhbHVlIDB4MDAwMDAwMDAgKi8KLSNkZWZpbmUgUEFSSVRZX0NSQzMyX1BSMV9DQ0lUVAk3IC8qIENSQzMyLCBpbml0aWFsIHZhbHVlIDB4RkZGRkZGRkYgKi8KLQotI2RlZmluZSBMTUlfREVGQVVMVAkJMCAvKiBEZWZhdWx0IHNldHRpbmcgKi8KLSNkZWZpbmUgTE1JX05PTkUJCTEgLyogTm8gTE1JLCBhbGwgUFZDcyBhcmUgc3RhdGljICovCi0jZGVmaW5lIExNSV9BTlNJCQkyIC8qIEFOU0kgQW5uZXggRCAqLwotI2RlZmluZSBMTUlfQ0NJVFQJCTMgLyogSVRVLVQgQW5uZXggQSAqLwotI2RlZmluZSBMTUlfQ0lTQ08JCTQgLyogVGhlICJvcmlnaW5hbCIgTE1JLCBha2EgR2FuZyBvZiBGb3VyICovCiAKICNkZWZpbmUgSERMQ19NQVhfTVRVIDE1MDAJLyogRXRoZXJuZXQgMTUwMCBieXRlcyAqLworI2lmIDAKICNkZWZpbmUgSERMQ19NQVhfTVJVIChIRExDX01BWF9NVFUgKyAxMCArIDE0ICsgNCkgLyogZm9yIEVUSCtWTEFOIG92ZXIgRlIgKi8KKyNlbHNlCisjZGVmaW5lIEhETENfTUFYX01SVSAxNjAwIC8qIGFzIHJlcXVpcmVkIGZvciBGUiBuZXR3b3JrICovCisjZW5kaWYKIAogCiAjaWZkZWYgX19LRVJORUxfXwogCiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bmV0L3N5bmNwcHAuaD4KICNpbmNsdWRlIDxsaW51eC9oZGxjL2lvY3RsLmg+CiAKIAotdHlwZWRlZiBzdHJ1Y3QgewkJLyogVXNlZCBpbiBDaXNjbyBhbmQgUFBQIG1vZGUgKi8KLQl1OCBhZGRyZXNzOwotCXU4IGNvbnRyb2w7Ci0JdTE2IHByb3RvY29sOwotfV9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBoZGxjX2hlYWRlcjsKLQotCi0KLXR5cGVkZWYgc3RydWN0IHsKLQl1MzIgdHlwZTsJCS8qIGNvZGUgKi8KLQl1MzIgcGFyMTsKLQl1MzIgcGFyMjsKLQl1MTYgcmVsOwkJLyogcmVsaWFiaWxpdHkgKi8KLQl1MzIgdGltZTsKLX1fX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgY2lzY29fcGFja2V0OwotI2RlZmluZQlDSVNDT19QQUNLRVRfTEVOCTE4Ci0jZGVmaW5lCUNJU0NPX0JJR19QQUNLRVRfTEVOCTIwCi0KLQotCi10eXBlZGVmIHN0cnVjdCBwdmNfZGV2aWNlX3N0cnVjdCB7Ci0Jc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlcjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqbWFpbjsKLQlzdHJ1Y3QgbmV0X2RldmljZSAqZXRoZXI7IC8qIGJyaWRnZWQgRXRoZXJuZXQgaW50ZXJmYWNlICovCi0Jc3RydWN0IHB2Y19kZXZpY2Vfc3RydWN0ICpuZXh0OwkvKiBTb3J0ZWQgaW4gYXNjZW5kaW5nIERMQ0kgb3JkZXIgKi8KLQlpbnQgZGxjaTsKLQlpbnQgb3Blbl9jb3VudDsKLQotCXN0cnVjdCB7Ci0JCXVuc2lnbmVkIGludCBuZXc6IDE7Ci0JCXVuc2lnbmVkIGludCBhY3RpdmU6IDE7Ci0JCXVuc2lnbmVkIGludCBleGlzdDogMTsKLQkJdW5zaWduZWQgaW50IGRlbGV0ZWQ6IDE7Ci0JCXVuc2lnbmVkIGludCBmZWNuOiAxOwotCQl1bnNpZ25lZCBpbnQgYmVjbjogMTsKLQkJdW5zaWduZWQgaW50IGJhbmR3aWR0aDsJLyogQ2lzY28gTE1JIHJlcG9ydGluZyBvbmx5ICovCi0JfXN0YXRlOwotfXB2Y19kZXZpY2U7Ci0KLQotCi10eXBlZGVmIHN0cnVjdCBoZGxjX2RldmljZV9zdHJ1Y3QgewotCS8qIFRvIGJlIGluaXRpYWxpemVkIGJ5IGhhcmR3YXJlIGRyaXZlciAqLworLyogVXNlZCBieSBhbGwgbmV0d29yayBkZXZpY2VzIGhlcmUsIHBvaW50ZWQgdG8gYnkgbmV0ZGV2X3ByaXYoZGV2KSAqLworc3RydWN0IGhkbGNfZGV2aWNlX2Rlc2MgeworCWludCAoKm5ldGlmX3J4KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIAlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKK307CiAKKy8qIFRoaXMgc3RydWN0dXJlIGlzIGEgcHJpdmF0ZSBwcm9wZXJ0eSBvZiBIRExDIHByb3RvY29scy4KKyAgIEhhcmR3YXJlIGRyaXZlcnMgaGF2ZSBubyBpbnRlcmVzdCBoZXJlICovCisKK3N0cnVjdCBoZGxjX3Byb3RvIHsKKwlpbnQgKCpvcGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwl2b2lkICgqY2xvc2UpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworCXZvaWQgKCpzdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7IC8qIGlmIG9wZW4gJiBEQ0QgKi8KKwl2b2lkICgqc3RvcCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7IC8qIGlmIG9wZW4gJiAhRENEICovCisJdm9pZCAoKmRldGFjaCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CisJaW50ICgqaW9jdGwpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKKwl1bnNpZ25lZCBzaG9ydCAoKnR5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsCisJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKKwlzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CisJc3RydWN0IGhkbGNfcHJvdG8gKm5leHQ7IC8qIG5leHQgcHJvdG9jb2wgaW4gdGhlIGxpc3QgKi8KK307CisKKwordHlwZWRlZiBzdHJ1Y3QgaGRsY19kZXZpY2UgewogCS8qIHVzZWQgYnkgSERMQyBsYXllciB0byB0YWtlIGNvbnRyb2wgb3ZlciBIRExDIGRldmljZSBmcm9tIGh3IGRyaXZlciovCiAJaW50ICgqYXR0YWNoKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkgICAgICB1bnNpZ25lZCBzaG9ydCBlbmNvZGluZywgdW5zaWduZWQgc2hvcnQgcGFyaXR5KTsKQEAgLTEwNyw4MiArNTgsMTggQEAKIAkvKiBoYXJkd2FyZSBkcml2ZXIgbXVzdCBoYW5kbGUgdGhpcyBpbnN0ZWFkIG9mIGRldi0+aGFyZF9zdGFydF94bWl0ICovCiAJaW50ICgqeG1pdCkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLQogCS8qIFRoaW5ncyBiZWxvdyBhcmUgZm9yIEhETEMgbGF5ZXIgaW50ZXJuYWwgdXNlIG9ubHkgKi8KLQlzdHJ1Y3QgewotCQlpbnQgKCpvcGVuKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQkJdm9pZCAoKmNsb3NlKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCQkvKiBpZiBvcGVuICYgRENEICovCi0JCXZvaWQgKCpzdGFydCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JCS8qIGlmIG9wZW4gJiAhRENEICovCi0JCXZvaWQgKCpzdG9wKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKLQotCQl2b2lkICgqZGV0YWNoKShzdHJ1Y3QgaGRsY19kZXZpY2Vfc3RydWN0ICpoZGxjKTsKLQkJaW50ICgqbmV0aWZfcngpKHN0cnVjdCBza19idWZmICpza2IpOwotCQl1bnNpZ25lZCBzaG9ydCAoKnR5cGVfdHJhbnMpKHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJCSAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0JCWludCBpZDsJCS8qIElGX1BST1RPX0hETEMvQ0lTQ08vRlIvZXRjLiAqLwotCX1wcm90bzsKLQorCWNvbnN0IHN0cnVjdCBoZGxjX3Byb3RvICpwcm90bzsKIAlpbnQgY2FycmllcjsKIAlpbnQgb3BlbjsKIAlzcGlubG9ja190IHN0YXRlX2xvY2s7Ci0KLQl1bmlvbiB7Ci0JCXN0cnVjdCB7Ci0JCQlmcl9wcm90byBzZXR0aW5nczsKLQkJCXB2Y19kZXZpY2UgKmZpcnN0X3B2YzsKLQkJCWludCBkY2VfcHZjX2NvdW50OwotCi0JCQlzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKLQkJCXVuc2lnbmVkIGxvbmcgbGFzdF9wb2xsOwotCQkJaW50IHJlbGlhYmxlOwotCQkJaW50IGRjZV9jaGFuZ2VkOwotCQkJaW50IHJlcXVlc3Q7Ci0JCQlpbnQgZnVsbHJlcF9zZW50OwotCQkJdTMyIGxhc3RfZXJyb3JzOyAvKiBsYXN0IGVycm9ycyBiaXQgbGlzdCAqLwotCQkJdTggbjM5MWNudDsKLQkJCXU4IHR4c2VxOyAvKiBUWCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJCXU4IHJ4c2VxOyAvKiBSWCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJfWZyOwotCi0JCXN0cnVjdCB7Ci0JCQljaXNjb19wcm90byBzZXR0aW5nczsKLQotCQkJc3RydWN0IHRpbWVyX2xpc3QgdGltZXI7Ci0JCQl1bnNpZ25lZCBsb25nIGxhc3RfcG9sbDsKLQkJCWludCB1cDsKLQkJCWludCByZXF1ZXN0X3NlbnQ7Ci0JCQl1MzIgdHhzZXE7IC8qIFRYIHNlcXVlbmNlIG51bWJlciAqLwotCQkJdTMyIHJ4c2VxOyAvKiBSWCBzZXF1ZW5jZSBudW1iZXIgKi8KLQkJfWNpc2NvOwotCi0JCXN0cnVjdCB7Ci0JCQlyYXdfaGRsY19wcm90byBzZXR0aW5nczsKLQkJfXJhd19oZGxjOwotCi0JCXN0cnVjdCB7Ci0JCQlzdHJ1Y3QgcHBwX2RldmljZSBwcHBkZXY7Ci0JCQlzdHJ1Y3QgcHBwX2RldmljZSAqc3luY3BwcF9wdHI7Ci0JCQlpbnQgKCpvbGRfY2hhbmdlX210dSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJCQkJICAgICAgaW50IG5ld19tdHUpOwotCQl9cHBwOwotCX1zdGF0ZTsKKwl2b2lkICpzdGF0ZTsKIAl2b2lkICpwcml2OwogfWhkbGNfZGV2aWNlOwogCiAKIAotaW50IGhkbGNfcmF3X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKLWludCBoZGxjX3Jhd19ldGhfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOwotaW50IGhkbGNfY2lzY29faW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIpOwotaW50IGhkbGNfcHBwX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKLWludCBoZGxjX2ZyX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyKTsKLWludCBoZGxjX3gyNV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmcik7Ci0KLQotLyogRXhwb3J0ZWQgZnJvbSBoZGxjLm8gKi8KKy8qIEV4cG9ydGVkIGZyb20gaGRsYyBtb2R1bGUgKi8KIAogLyogQ2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIGEgdXNlciByZXF1ZXN0cyBIRExDIHNlcnZpY2UgKi8KIGludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKTsKQEAgLTE5MSwxNyArNzgsMjEgQEAKICNkZWZpbmUgcmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KQlyZWdpc3Rlcl9uZXRkZXYoZGV2KQogdm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCisKK3ZvaWQgcmVnaXN0ZXJfaGRsY19wcm90b2NvbChzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8pOwordm9pZCB1bnJlZ2lzdGVyX2hkbGNfcHJvdG9jb2woc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvKTsKKwogc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2hkbGNkZXYodm9pZCAqcHJpdik7CiAKLXN0YXRpYyBfX2lubGluZV9fIGhkbGNfZGV2aWNlKiBkZXZfdG9faGRsYyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaGRsY19kZXZpY2VfZGVzYyogZGV2X3RvX2Rlc2Moc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KTsKIH0KIAotCi1zdGF0aWMgX19pbmxpbmVfXyBwdmNfZGV2aWNlKiBkZXZfdG9fcHZjKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgX19pbmxpbmVfXyBoZGxjX2RldmljZSogZGV2X3RvX2hkbGMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQlyZXR1cm4gKHB2Y19kZXZpY2UqKWRldi0+cHJpdjsKKwlyZXR1cm4gbmV0ZGV2X3ByaXYoZGV2KSArIHNpemVvZihzdHJ1Y3QgaGRsY19kZXZpY2VfZGVzYyk7CiB9CiAKIApAQCAtMjI1LDE4ICsxMTYsMTQgQEAKIC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCAqLwogdm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCitpbnQgYXR0YWNoX2hkbGNfcHJvdG9jb2woc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGhkbGNfcHJvdG8gKnByb3RvLAorCQkJIGludCAoKnJ4KShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSwgc2l6ZV90IHNpemUpOwogLyogTWF5IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHRvIGdhaW4gY29udHJvbCBvdmVyIEhETEMgZGV2aWNlICovCi1zdGF0aWMgX19pbmxpbmVfXyB2b2lkIGhkbGNfcHJvdG9fZGV0YWNoKGhkbGNfZGV2aWNlICpoZGxjKQotewotCWlmIChoZGxjLT5wcm90by5kZXRhY2gpCi0JCWhkbGMtPnByb3RvLmRldGFjaChoZGxjKTsKLQloZGxjLT5wcm90by5kZXRhY2ggPSBOVUxMOwotfQotCit2b2lkIGRldGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqaGRsY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXJldHVybiAmZGV2X3RvX2hkbGMoZGV2KS0+c3RhdHM7CisJcmV0dXJuICZkZXZfdG9fZGVzYyhkZXYpLT5zdGF0czsKIH0KIAogCkBAIC0yNDgsOCArMTM1LDggQEAKIAlza2ItPm1hYy5yYXcgID0gc2tiLT5kYXRhOwogCXNrYi0+ZGV2ICAgICAgPSBkZXY7CiAKLQlpZiAoaGRsYy0+cHJvdG8udHlwZV90cmFucykKLQkJcmV0dXJuIGhkbGMtPnByb3RvLnR5cGVfdHJhbnMoc2tiLCBkZXYpOworCWlmIChoZGxjLT5wcm90by0+dHlwZV90cmFucykKKwkJcmV0dXJuIGhkbGMtPnByb3RvLT50eXBlX3RyYW5zKHNrYiwgZGV2KTsKIAllbHNlCiAJCXJldHVybiBodG9ucyhFVEhfUF9IRExDKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaGRsYy9pb2N0bC5oIGIvaW5jbHVkZS9saW51eC9oZGxjL2lvY3RsLmgKaW5kZXggNzg0MzBiYS4uNTgzOTcyMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9oZGxjL2lvY3RsLmgKKysrIGIvaW5jbHVkZS9saW51eC9oZGxjL2lvY3RsLmgKQEAgLTEsNiArMSwzOSBAQAogI2lmbmRlZiBfX0hETENfSU9DVExfSF9fCiAjZGVmaW5lIF9fSERMQ19JT0NUTF9IX18KIAorCisjZGVmaW5lIEdFTkVSSUNfSERMQ19WRVJTSU9OIDQJLyogRm9yIHN5bmNocm9uaXphdGlvbiB3aXRoIHNldGhkbGMgdXRpbGl0eSAqLworCisjZGVmaW5lIENMT0NLX0RFRkFVTFQgICAwCS8qIERlZmF1bHQgc2V0dGluZyAqLworI2RlZmluZSBDTE9DS19FWFQJMQkvKiBFeHRlcm5hbCBUWCBhbmQgUlggY2xvY2sgLSBEVEUgKi8KKyNkZWZpbmUgQ0xPQ0tfSU5UCTIJLyogSW50ZXJuYWwgVFggYW5kIFJYIGNsb2NrIC0gRENFICovCisjZGVmaW5lIENMT0NLX1RYSU5UCTMJLyogSW50ZXJuYWwgVFggYW5kIGV4dGVybmFsIFJYIGNsb2NrICovCisjZGVmaW5lIENMT0NLX1RYRlJPTVJYCTQJLyogVFggY2xvY2sgZGVyaXZlZCBmcm9tIGV4dGVybmFsIFJYIGNsb2NrICovCisKKworI2RlZmluZSBFTkNPRElOR19ERUZBVUxUCTAgLyogRGVmYXVsdCBzZXR0aW5nICovCisjZGVmaW5lIEVOQ09ESU5HX05SWgkJMQorI2RlZmluZSBFTkNPRElOR19OUlpJCQkyCisjZGVmaW5lIEVOQ09ESU5HX0ZNX01BUksJMworI2RlZmluZSBFTkNPRElOR19GTV9TUEFDRQk0CisjZGVmaW5lIEVOQ09ESU5HX01BTkNIRVNURVIJNQorCisKKyNkZWZpbmUgUEFSSVRZX0RFRkFVTFQJCTAgLyogRGVmYXVsdCBzZXR0aW5nICovCisjZGVmaW5lIFBBUklUWV9OT05FCQkxIC8qIE5vIHBhcml0eSAqLworI2RlZmluZSBQQVJJVFlfQ1JDMTZfUFIwCTIgLyogQ1JDMTYsIGluaXRpYWwgdmFsdWUgMHgwMDAwICovCisjZGVmaW5lIFBBUklUWV9DUkMxNl9QUjEJMyAvKiBDUkMxNiwgaW5pdGlhbCB2YWx1ZSAweEZGRkYgKi8KKyNkZWZpbmUgUEFSSVRZX0NSQzE2X1BSMF9DQ0lUVAk0IC8qIENSQzE2LCBpbml0aWFsIDB4MDAwMCwgSVRVLVQgdmVyc2lvbiAqLworI2RlZmluZSBQQVJJVFlfQ1JDMTZfUFIxX0NDSVRUCTUgLyogQ1JDMTYsIGluaXRpYWwgMHhGRkZGLCBJVFUtVCB2ZXJzaW9uICovCisjZGVmaW5lIFBBUklUWV9DUkMzMl9QUjBfQ0NJVFQJNiAvKiBDUkMzMiwgaW5pdGlhbCB2YWx1ZSAweDAwMDAwMDAwICovCisjZGVmaW5lIFBBUklUWV9DUkMzMl9QUjFfQ0NJVFQJNyAvKiBDUkMzMiwgaW5pdGlhbCB2YWx1ZSAweEZGRkZGRkZGICovCisKKyNkZWZpbmUgTE1JX0RFRkFVTFQJCTAgLyogRGVmYXVsdCBzZXR0aW5nICovCisjZGVmaW5lIExNSV9OT05FCQkxIC8qIE5vIExNSSwgYWxsIFBWQ3MgYXJlIHN0YXRpYyAqLworI2RlZmluZSBMTUlfQU5TSQkJMiAvKiBBTlNJIEFubmV4IEQgKi8KKyNkZWZpbmUgTE1JX0NDSVRUCQkzIC8qIElUVS1UIEFubmV4IEEgKi8KKyNkZWZpbmUgTE1JX0NJU0NPCQk0IC8qIFRoZSAib3JpZ2luYWwiIExNSSwgYWthIEdhbmcgb2YgRm91ciAqLworCiB0eXBlZGVmIHN0cnVjdCB7IAogCXVuc2lnbmVkIGludCBjbG9ja19yYXRlOyAvKiBiaXRzIHBlciBzZWNvbmQgKi8KIAl1bnNpZ25lZCBpbnQgY2xvY2tfdHlwZTsgLyogaW50ZXJuYWwsIGV4dGVybmFsLCBUWC1pbnRlcm5hbCBldGMuICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2hydGltZXIuaCBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCmluZGV4IDRmYzM3OWQuLmZjYTkzMDIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCisrKyBiL2luY2x1ZGUvbGludXgvaHJ0aW1lci5oCkBAIC0xMzgsNiArMTM4LDcgQEAKIAkJCSAgICAgIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHAsCiAJCQkgICAgICBjb25zdCBlbnVtIGhydGltZXJfbW9kZSBtb2RlLAogCQkJICAgICAgY29uc3QgY2xvY2tpZF90IGNsb2NraWQpOworZXh0ZXJuIGxvbmcgaHJ0aW1lcl9uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jayk7CiAKIGV4dGVybiB2b2lkIGhydGltZXJfaW5pdF9zbGVlcGVyKHN0cnVjdCBocnRpbWVyX3NsZWVwZXIgKnNsLAogCQkJCSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1iaXQuaAppbmRleCBjMGU3ZmFiLi5jOGY4ZGYyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLWJpdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tYml0LmgKQEAgLTQwLDcgKzQwLDYgQEAKIAkvKiBsb2NhbCBzZXR0aW5ncyAqLwogCWludCB1ZGVsYXk7CQkvKiBoYWxmLWNsb2NrLWN5Y2xlIHRpbWUgaW4gbWljcm9zZWNzICovCiAJCQkJLyogaS5lLiBjbG9jayBpcyAoNTAwIC8gdWRlbGF5KSBLSHogKi8KLQlpbnQgbWRlbGF5OwkJLyogaW4gbWlsbGlzZWNzLCB1bnVzZWQgKi8KIAlpbnQgdGltZW91dDsJCS8qIGluIGppZmZpZXMgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmggYi9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXBjZi5oCmluZGV4IDE4YjBhZGYuLjk5MDhmM2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaTJjLWFsZ28tcGNmLmgKKysrIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1wY2YuaApAQCAtMzUsNyArMzUsNiBAQAogCiAJLyogbG9jYWwgc2V0dGluZ3MgKi8KIAlpbnQgdWRlbGF5OwotCWludCBtZGVsYXk7CiAJaW50IHRpbWVvdXQ7CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXNpYnl0ZS5oIGIvaW5jbHVkZS9saW51eC9pMmMtYWxnby1zaWJ5dGUuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM5MTRkZS4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1hbGdvLXNpYnl0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMSwyMDAyLDIwMDMgQnJvYWRjb20gQ29ycG9yYXRpb24KLSAqCi0gKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKLSAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KLSAqLwotCi0jaWZuZGVmIEkyQ19BTEdPX1NJQllURV9ICi0jZGVmaW5lIEkyQ19BTEdPX1NJQllURV9IIDEKLQotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCi1zdHJ1Y3QgaTJjX2FsZ29fc2lieXRlX2RhdGEgewotCXZvaWQgKmRhdGE7CQkvKiBwcml2YXRlIGRhdGEgKi8KLSAgICAgICAgaW50ICAgYnVzOwkJLyogd2hpY2ggYnVzICovCi0gICAgICAgIHZvaWQgKnJlZ19iYXNlOwkJLyogQ1NSIGJhc2UgKi8KLX07Ci0KLWludCBpMmNfc2lieXRlX2FkZF9idXMoc3RydWN0IGkyY19hZGFwdGVyICosIGludCBzcGVlZCk7Ci1pbnQgaTJjX3NpYnl0ZV9kZWxfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqKTsKLQotI2VuZGlmIC8qIEkyQ19BTEdPX1NJQllURV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCA5NDE4NTE5Li4wYThmNzUwYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pMmMtaWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCkBAIC0xOTMsNiArMTkzLDcgQEAKICNkZWZpbmUgSTJDX0hXX0JfUkFERU9OCQkweDAxMDAxZSAvKiByYWRlb24gZnJhbWVidWZmZXIgZHJpdmVyICovCiAjZGVmaW5lIEkyQ19IV19CX0VNMjhYWAkJMHgwMTAwMWYgLyogZW0yOHh4IHZpZGVvIGNhcHR1cmUgY2FyZHMgKi8KICNkZWZpbmUgSTJDX0hXX0JfQ1gyMzQxWAkweDAxMDAyMCAvKiBDb25leGFudCBDWDIzNDFYIE1QRUcgZW5jb2RlciBjYXJkcyAqLworI2RlZmluZSBJMkNfSFdfQl9JTlRFTEZCCTB4MDEwMDIxIC8qIGludGVsIGZyYW1lYnVmZmVyIGRyaXZlciAqLwogCiAvKiAtLS0gUENGIDg1ODQgYmFzZWQgYWxnb3JpdGhtcwkJCQkJKi8KICNkZWZpbmUgSTJDX0hXX1BfTFAJCTB4MDIwMDAwIC8qIFBhcmFsbGVsIHBvcnQgaW50ZXJmYWNlICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy5oIGIvaW5jbHVkZS9saW51eC9pMmMuaAppbmRleCBlYjA2MjhhLi45YjVkMDQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLmgKQEAgLTY0LDE0ICs2NCw2IEBACiAgKi8KIGV4dGVybiBpbnQgaTJjX3RyYW5zZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCwgc3RydWN0IGkyY19tc2cgKm1zZ3MsIGludCBudW0pOwogCi0vKgotICogU29tZSBhZGFwdGVyIHR5cGVzIChpLmUuIFBDRiA4NTg0IGJhc2VkIG9uZXMpIG1heSBzdXBwb3J0IHNsYXZlIGJlaGF2aXVvci4gCi0gKiBUaGlzIGlzIG5vdCB0ZXN0ZWQvaW1wbGVtZW50ZWQgeWV0IGFuZCB3aWxsIGNoYW5nZSBpbiB0aGUgZnV0dXJlLgotICovCi1leHRlcm4gaW50IGkyY19zbGF2ZV9zZW5kKHN0cnVjdCBpMmNfY2xpZW50ICosY2hhciosaW50KTsKLWV4dGVybiBpbnQgaTJjX3NsYXZlX3JlY3Yoc3RydWN0IGkyY19jbGllbnQgKixjaGFyKixpbnQpOwotCi0KIAogLyogVGhpcyBpcyB0aGUgdmVyeSBnZW5lcmFsaXplZCBTTUJ1cyBhY2Nlc3Mgcm91dGluZS4gWW91IHByb2JhYmx5IGRvIG5vdAogICAgd2FudCB0byB1c2UgdGhpcywgdGhvdWdoOyBvbmUgb2YgdGhlIGZ1bmN0aW9ucyBiZWxvdyBtYXkgYmUgbXVjaCBlYXNpZXIsCkBAIC0yMDEsMTAgKzE5Myw2IEBACiAJICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJlYWRfd3JpdGUsCiAJICAgICAgICAgICAgICAgICAgIHU4IGNvbW1hbmQsIGludCBzaXplLCB1bmlvbiBpMmNfc21idXNfZGF0YSAqIGRhdGEpOwogCi0JLyogLS0tIHRoZXNlIG9wdGlvbmFsL2Z1dHVyZSB1c2UgZm9yIHNvbWUgYWRhcHRlciB0eXBlcy4qLwotCWludCAoKnNsYXZlX3NlbmQpKHN0cnVjdCBpMmNfYWRhcHRlciAqLGNoYXIqLGludCk7Ci0JaW50ICgqc2xhdmVfcmVjdikoc3RydWN0IGkyY19hZGFwdGVyICosY2hhciosaW50KTsKLQogCS8qIC0tLSBpb2N0bCBsaWtlIGNhbGwgdG8gc2V0IGRpdi4gcGFyYW1ldGVycy4gKi8KIAlpbnQgKCphbGdvX2NvbnRyb2wpKHN0cnVjdCBpMmNfYWRhcHRlciAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOwogCkBAIC0yMjAsNyArMjA4LDcgQEAKIAlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAl1bnNpZ25lZCBpbnQgaWQ7CiAJdW5zaWduZWQgaW50IGNsYXNzOwotCXN0cnVjdCBpMmNfYWxnb3JpdGhtICphbGdvOy8qIHRoZSBhbGdvcml0aG0gdG8gYWNjZXNzIHRoZSBidXMJKi8KKwljb25zdCBzdHJ1Y3QgaTJjX2FsZ29yaXRobSAqYWxnbzsgLyogdGhlIGFsZ29yaXRobSB0byBhY2Nlc3MgdGhlIGJ1cyAqLwogCXZvaWQgKmFsZ29fZGF0YTsKIAogCS8qIC0tLSBhZG1pbmlzdHJhdGlvbiBzdHVmZi4gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWNtcC5oIGIvaW5jbHVkZS9saW51eC9pY21wLmgKaW5kZXggZjBiNTcxZi4uODc4Y2ZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pY21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9pY21wLmgKQEAgLTY4LDE2ICs2OCwxNiBAQAogc3RydWN0IGljbXBoZHIgewogICBfX3U4CQl0eXBlOwogICBfX3U4CQljb2RlOwotICBfX3UxNgkJY2hlY2tzdW07CisgIF9fYmUxNgljaGVja3N1bTsKICAgdW5pb24gewogCXN0cnVjdCB7Ci0JCV9fdTE2CWlkOwotCQlfX3UxNglzZXF1ZW5jZTsKKwkJX19iZTE2CWlkOworCQlfX2JlMTYJc2VxdWVuY2U7CiAJfSBlY2hvOwotCV9fdTMyCWdhdGV3YXk7CisJX19iZTMyCWdhdGV3YXk7CiAJc3RydWN0IHsKLQkJX191MTYJX191bnVzZWQ7Ci0JCV9fdTE2CW10dTsKKwkJX19iZTE2CV9fdW51c2VkOworCQlfX2JlMTYJbXR1OwogCX0gZnJhZzsKICAgfSB1bjsKIH07CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lmLmggYi9pbmNsdWRlL2xpbnV4L2lmLmgKaW5kZXggY2QwODBkNy4uMzJiZjQxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZi5oCisrKyBiL2luY2x1ZGUvbGludXgvaWYuaApAQCAtNTksNiArNTksOCBAQAogI2RlZmluZSBJRkZfU0xBVkVfSU5BQ1RJVkUJMHg0CS8qIGJvbmRpbmcgc2xhdmUgbm90IHRoZSBjdXJyLiBhY3RpdmUgKi8KICNkZWZpbmUgSUZGX01BU1RFUl84MDIzQUQJMHg4CS8qIGJvbmRpbmcgbWFzdGVyLCA4MDIuM2FkLiAJKi8KICNkZWZpbmUgSUZGX01BU1RFUl9BTEIJMHgxMAkJLyogYm9uZGluZyBtYXN0ZXIsIGJhbGFuY2UtYWxiLgkqLworI2RlZmluZSBJRkZfQk9ORElORwkweDIwCQkvKiBib25kaW5nIG1hc3RlciBvciBzbGF2ZQkqLworI2RlZmluZSBJRkZfU0xBVkVfTkVFREFSUCAweDQwCQkvKiBuZWVkIEFSUHMgZm9yIHZhbGlkYXRpb24JKi8KIAogI2RlZmluZSBJRl9HRVRfSUZBQ0UJMHgwMDAxCQkvKiBmb3IgcXVlcnlpbmcgb25seSAqLwogI2RlZmluZSBJRl9HRVRfUFJPVE8JMHgwMDAyCkBAIC0yMTIsMTM0ICsyMTQsNCBAQAogI2RlZmluZQlpZmNfYnVmCWlmY19pZmN1LmlmY3VfYnVmCQkvKiBidWZmZXIgYWRkcmVzcwkqLwogI2RlZmluZQlpZmNfcmVxCWlmY19pZmN1LmlmY3VfcmVxCQkvKiBhcnJheSBvZiBzdHJ1Y3R1cmVzCSovCiAKLS8qIFRoZSBzdHJ1Y3Qgc2hvdWxkIGJlIGluIHN5bmMgd2l0aCBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqLwotc3RydWN0IHJ0bmxfbGlua19zdGF0cwotewotCV9fdTMyCXJ4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHJlY2VpdmVkCSovCi0JX191MzIJdHhfcGFja2V0czsJCS8qIHRvdGFsIHBhY2tldHMgdHJhbnNtaXR0ZWQJKi8KLQlfX3UzMglyeF9ieXRlczsJCS8qIHRvdGFsIGJ5dGVzIHJlY2VpdmVkIAkqLwotCV9fdTMyCXR4X2J5dGVzOwkJLyogdG90YWwgYnl0ZXMgdHJhbnNtaXR0ZWQJKi8KLQlfX3UzMglyeF9lcnJvcnM7CQkvKiBiYWQgcGFja2V0cyByZWNlaXZlZAkJKi8KLQlfX3UzMgl0eF9lcnJvcnM7CQkvKiBwYWNrZXQgdHJhbnNtaXQgcHJvYmxlbXMJKi8KLQlfX3UzMglyeF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgaW4gbGludXggYnVmZmVycwkqLwotCV9fdTMyCXR4X2Ryb3BwZWQ7CQkvKiBubyBzcGFjZSBhdmFpbGFibGUgaW4gbGludXgJKi8KLQlfX3UzMgltdWx0aWNhc3Q7CQkvKiBtdWx0aWNhc3QgcGFja2V0cyByZWNlaXZlZAkqLwotCV9fdTMyCWNvbGxpc2lvbnM7Ci0KLQkvKiBkZXRhaWxlZCByeF9lcnJvcnM6ICovCi0JX191MzIJcnhfbGVuZ3RoX2Vycm9yczsKLQlfX3UzMglyeF9vdmVyX2Vycm9yczsJCS8qIHJlY2VpdmVyIHJpbmcgYnVmZiBvdmVyZmxvdwkqLwotCV9fdTMyCXJ4X2NyY19lcnJvcnM7CQkvKiByZWN2ZWQgcGt0IHdpdGggY3JjIGVycm9yCSovCi0JX191MzIJcnhfZnJhbWVfZXJyb3JzOwkvKiByZWN2J2QgZnJhbWUgYWxpZ25tZW50IGVycm9yICovCi0JX191MzIJcnhfZmlmb19lcnJvcnM7CQkvKiByZWN2J3IgZmlmbyBvdmVycnVuCQkqLwotCV9fdTMyCXJ4X21pc3NlZF9lcnJvcnM7CS8qIHJlY2VpdmVyIG1pc3NlZCBwYWNrZXQJKi8KLQotCS8qIGRldGFpbGVkIHR4X2Vycm9ycyAqLwotCV9fdTMyCXR4X2Fib3J0ZWRfZXJyb3JzOwotCV9fdTMyCXR4X2NhcnJpZXJfZXJyb3JzOwotCV9fdTMyCXR4X2ZpZm9fZXJyb3JzOwotCV9fdTMyCXR4X2hlYXJ0YmVhdF9lcnJvcnM7Ci0JX191MzIJdHhfd2luZG93X2Vycm9yczsKLQotCS8qIGZvciBjc2xpcCBldGMgKi8KLQlfX3UzMglyeF9jb21wcmVzc2VkOwotCV9fdTMyCXR4X2NvbXByZXNzZWQ7Ci19OwotCi0vKiBUaGUgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IGlmbWFwICovCi1zdHJ1Y3QgcnRubF9saW5rX2lmbWFwCi17Ci0JX191NjQJbWVtX3N0YXJ0OwotCV9fdTY0CW1lbV9lbmQ7Ci0JX191NjQJYmFzZV9hZGRyOwotCV9fdTE2CWlycTsKLQlfX3U4CWRtYTsKLQlfX3U4CXBvcnQ7Ci19OwotCi1lbnVtCi17Ci0JSUZMQV9VTlNQRUMsCi0JSUZMQV9BRERSRVNTLAotCUlGTEFfQlJPQURDQVNULAotCUlGTEFfSUZOQU1FLAotCUlGTEFfTVRVLAotCUlGTEFfTElOSywKLQlJRkxBX1FESVNDLAotCUlGTEFfU1RBVFMsCi0JSUZMQV9DT1NULAotI2RlZmluZSBJRkxBX0NPU1QgSUZMQV9DT1NUCi0JSUZMQV9QUklPUklUWSwKLSNkZWZpbmUgSUZMQV9QUklPUklUWSBJRkxBX1BSSU9SSVRZCi0JSUZMQV9NQVNURVIsCi0jZGVmaW5lIElGTEFfTUFTVEVSIElGTEFfTUFTVEVSCi0JSUZMQV9XSVJFTEVTUywJCS8qIFdpcmVsZXNzIEV4dGVuc2lvbiBldmVudCAtIHNlZSB3aXJlbGVzcy5oICovCi0jZGVmaW5lIElGTEFfV0lSRUxFU1MgSUZMQV9XSVJFTEVTUwotCUlGTEFfUFJPVElORk8sCQkvKiBQcm90b2NvbCBzcGVjaWZpYyBpbmZvcm1hdGlvbiBmb3IgYSBsaW5rICovCi0jZGVmaW5lIElGTEFfUFJPVElORk8gSUZMQV9QUk9USU5GTwotCUlGTEFfVFhRTEVOLAotI2RlZmluZSBJRkxBX1RYUUxFTiBJRkxBX1RYUUxFTgotCUlGTEFfTUFQLAotI2RlZmluZSBJRkxBX01BUCBJRkxBX01BUAotCUlGTEFfV0VJR0hULAotI2RlZmluZSBJRkxBX1dFSUdIVCBJRkxBX1dFSUdIVAotCUlGTEFfT1BFUlNUQVRFLAotCUlGTEFfTElOS01PREUsCi0JX19JRkxBX01BWAotfTsKLQotCi0jZGVmaW5lIElGTEFfTUFYIChfX0lGTEFfTUFYIC0gMSkKLQotLyogaWZpX2ZsYWdzLgotCi0gICBJRkZfKiBmbGFncy4KLQotICAgVGhlIG9ubHkgY2hhbmdlIGlzOgotICAgSUZGX0xPT1BCQUNLLCBJRkZfQlJPQURDQVNUIGFuZCBJRkZfUE9JTlRPUE9JTlQgYXJlCi0gICBtb3JlIG5vdCBjaGFuZ2VhYmxlIGJ5IHVzZXIuIFRoZXkgZGVzY3JpYmUgbGluayBtZWRpYQotICAgY2hhcmFjdGVyaXN0aWNzIGFuZCBzZXQgYnkgZGV2aWNlIGRyaXZlci4KLQotICAgQ29tbWVudHM6Ci0gICAtIENvbWJpbmF0aW9uIElGRl9CUk9BRENBU1R8SUZGX1BPSU5UT1BPSU5UIGlzIGludmFsaWQKLSAgIC0gSWYgbmVpdGhlciBvZiB0aGVzZSB0aHJlZSBmbGFncyBhcmUgc2V0OwotICAgICB0aGUgaW50ZXJmYWNlIGlzIE5CTUEuCi0KLSAgIC0gSUZGX01VTFRJQ0FTVCBkb2VzIG5vdCBtZWFuIGFueXRoaW5nIHNwZWNpYWw6Ci0gICBtdWx0aWNhc3RzIGNhbiBiZSB1c2VkIG9uIGFsbCBub3QtTkJNQSBsaW5rcy4KLSAgIElGRl9NVUxUSUNBU1QgbWVhbnMgdGhhdCB0aGlzIG1lZGlhIHVzZXMgc3BlY2lhbCBlbmNhcHN1bGF0aW9uCi0gICBmb3IgbXVsdGljYXN0IGZyYW1lcy4gQXBwYXJlbnRseSwgYWxsIElGRl9QT0lOVE9QT0lOVCBhbmQKLSAgIElGRl9CUk9BRENBU1QgZGV2aWNlcyBhcmUgYWJsZSB0byB1c2UgbXVsdGljYXN0cyB0b28uCi0gKi8KLQotLyogSUZMQV9MSU5LLgotICAgRm9yIHVzdWFsIGRldmljZXMgaXQgaXMgZXF1YWwgaWZpX2luZGV4LgotICAgSWYgaXQgaXMgYSAidmlydHVhbCBpbnRlcmZhY2UiIChmLmUuIHR1bm5lbCksIGlmaV9saW5rCi0gICBjYW4gcG9pbnQgdG8gcmVhbCBwaHlzaWNhbCBpbnRlcmZhY2UgKGYuZS4gZm9yIGJhbmR3aWR0aCBjYWxjdWxhdGlvbnMpLAotICAgb3IgbWF5YmUgMCwgd2hhdCBtZWFucywgdGhhdCByZWFsIG1lZGlhIGlzIHVua25vd24gKHVzdWFsCi0gICBmb3IgSVBJUCB0dW5uZWxzLCB3aGVuIHJvdXRlIHRvIGVuZHBvaW50IGlzIGFsbG93ZWQgdG8gY2hhbmdlKQotICovCi0KLS8qIFN1YnR5cGUgYXR0cmlidXRlcyBmb3IgSUZMQV9QUk9USU5GTyAqLwotZW51bQotewotCUlGTEFfSU5FVDZfVU5TUEVDLAotCUlGTEFfSU5FVDZfRkxBR1MsCS8qIGxpbmsgZmxhZ3MJCQkqLwotCUlGTEFfSU5FVDZfQ09ORiwJLyogc3lzY3RsIHBhcmFtZXRlcnMJCSovCi0JSUZMQV9JTkVUNl9TVEFUUywJLyogc3RhdGlzdGljcwkJCSovCi0JSUZMQV9JTkVUNl9NQ0FTVCwJLyogTUMgdGhpbmdzLiBXaGF0IG9mIHRoZW0/CSovCi0JSUZMQV9JTkVUNl9DQUNIRUlORk8sCS8qIHRpbWUgdmFsdWVzIGFuZCBtYXggcmVhc20gc2l6ZSAqLwotCV9fSUZMQV9JTkVUNl9NQVgKLX07Ci0KLSNkZWZpbmUgSUZMQV9JTkVUNl9NQVgJKF9fSUZMQV9JTkVUNl9NQVggLSAxKQotCi1zdHJ1Y3QgaWZsYV9jYWNoZWluZm8KLXsKLQlfX3UzMgltYXhfcmVhc21fbGVuOwotCV9fdTMyCXRzdGFtcDsJCS8qIGlwdjZJbnRlcmZhY2VUYWJsZSB1cGRhdGVkIHRpbWVzdGFtcCAqLwotCV9fdTMyCXJlYWNoYWJsZV90aW1lOwotCV9fdTMyCXJldHJhbnNfdGltZTsKLX07Ci0KICNlbmRpZiAvKiBfTElOVVhfSUZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9hcnAuaCBiL2luY2x1ZGUvbGludXgvaWZfYXJwLmgKaW5kZXggYThiMWEyMC4uN2Y1NzE0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pZl9hcnAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lmX2FycC5oCkBAIC0xMzAsMTEgKzEzMCwxMSBAQAogCiBzdHJ1Y3QgYXJwaGRyCiB7Ci0JdW5zaWduZWQgc2hvcnQJYXJfaHJkOwkJLyogZm9ybWF0IG9mIGhhcmR3YXJlIGFkZHJlc3MJKi8KLQl1bnNpZ25lZCBzaG9ydAlhcl9wcm87CQkvKiBmb3JtYXQgb2YgcHJvdG9jb2wgYWRkcmVzcwkqLworCV9fYmUxNgkJYXJfaHJkOwkJLyogZm9ybWF0IG9mIGhhcmR3YXJlIGFkZHJlc3MJKi8KKwlfX2JlMTYJCWFyX3BybzsJCS8qIGZvcm1hdCBvZiBwcm90b2NvbCBhZGRyZXNzCSovCiAJdW5zaWduZWQgY2hhcglhcl9obG47CQkvKiBsZW5ndGggb2YgaGFyZHdhcmUgYWRkcmVzcwkqLwogCXVuc2lnbmVkIGNoYXIJYXJfcGxuOwkJLyogbGVuZ3RoIG9mIHByb3RvY29sIGFkZHJlc3MJKi8KLQl1bnNpZ25lZCBzaG9ydAlhcl9vcDsJCS8qIEFSUCBvcGNvZGUgKGNvbW1hbmQpCQkqLworCV9fYmUxNgkJYXJfb3A7CQkvKiBBUlAgb3Bjb2RlIChjb21tYW5kKQkJKi8KIAogI2lmIDAKIAkgLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaWZfbGluay5oIGIvaW5jbHVkZS9saW51eC9pZl9saW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTk2M2EwNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvaWZfbGluay5oCkBAIC0wLDAgKzEsMTM2IEBACisjaWZuZGVmIF9MSU5VWF9JRl9MSU5LX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0xJTktfSAorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCisvKiBUaGUgc3RydWN0IHNob3VsZCBiZSBpbiBzeW5jIHdpdGggc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKi8KK3N0cnVjdCBydG5sX2xpbmtfc3RhdHMKK3sKKwlfX3UzMglyeF9wYWNrZXRzOwkJLyogdG90YWwgcGFja2V0cyByZWNlaXZlZAkqLworCV9fdTMyCXR4X3BhY2tldHM7CQkvKiB0b3RhbCBwYWNrZXRzIHRyYW5zbWl0dGVkCSovCisJX191MzIJcnhfYnl0ZXM7CQkvKiB0b3RhbCBieXRlcyByZWNlaXZlZCAJKi8KKwlfX3UzMgl0eF9ieXRlczsJCS8qIHRvdGFsIGJ5dGVzIHRyYW5zbWl0dGVkCSovCisJX191MzIJcnhfZXJyb3JzOwkJLyogYmFkIHBhY2tldHMgcmVjZWl2ZWQJCSovCisJX191MzIJdHhfZXJyb3JzOwkJLyogcGFja2V0IHRyYW5zbWl0IHByb2JsZW1zCSovCisJX191MzIJcnhfZHJvcHBlZDsJCS8qIG5vIHNwYWNlIGluIGxpbnV4IGJ1ZmZlcnMJKi8KKwlfX3UzMgl0eF9kcm9wcGVkOwkJLyogbm8gc3BhY2UgYXZhaWxhYmxlIGluIGxpbnV4CSovCisJX191MzIJbXVsdGljYXN0OwkJLyogbXVsdGljYXN0IHBhY2tldHMgcmVjZWl2ZWQJKi8KKwlfX3UzMgljb2xsaXNpb25zOworCisJLyogZGV0YWlsZWQgcnhfZXJyb3JzOiAqLworCV9fdTMyCXJ4X2xlbmd0aF9lcnJvcnM7CisJX191MzIJcnhfb3Zlcl9lcnJvcnM7CQkvKiByZWNlaXZlciByaW5nIGJ1ZmYgb3ZlcmZsb3cJKi8KKwlfX3UzMglyeF9jcmNfZXJyb3JzOwkJLyogcmVjdmVkIHBrdCB3aXRoIGNyYyBlcnJvcgkqLworCV9fdTMyCXJ4X2ZyYW1lX2Vycm9yczsJLyogcmVjdidkIGZyYW1lIGFsaWdubWVudCBlcnJvciAqLworCV9fdTMyCXJ4X2ZpZm9fZXJyb3JzOwkJLyogcmVjdidyIGZpZm8gb3ZlcnJ1bgkJKi8KKwlfX3UzMglyeF9taXNzZWRfZXJyb3JzOwkvKiByZWNlaXZlciBtaXNzZWQgcGFja2V0CSovCisKKwkvKiBkZXRhaWxlZCB0eF9lcnJvcnMgKi8KKwlfX3UzMgl0eF9hYm9ydGVkX2Vycm9yczsKKwlfX3UzMgl0eF9jYXJyaWVyX2Vycm9yczsKKwlfX3UzMgl0eF9maWZvX2Vycm9yczsKKwlfX3UzMgl0eF9oZWFydGJlYXRfZXJyb3JzOworCV9fdTMyCXR4X3dpbmRvd19lcnJvcnM7CisKKwkvKiBmb3IgY3NsaXAgZXRjICovCisJX191MzIJcnhfY29tcHJlc3NlZDsKKwlfX3UzMgl0eF9jb21wcmVzc2VkOworfTsKKworLyogVGhlIHN0cnVjdCBzaG91bGQgYmUgaW4gc3luYyB3aXRoIHN0cnVjdCBpZm1hcCAqLworc3RydWN0IHJ0bmxfbGlua19pZm1hcAoreworCV9fdTY0CW1lbV9zdGFydDsKKwlfX3U2NAltZW1fZW5kOworCV9fdTY0CWJhc2VfYWRkcjsKKwlfX3UxNglpcnE7CisJX191OAlkbWE7CisJX191OAlwb3J0OworfTsKKworZW51bQoreworCUlGTEFfVU5TUEVDLAorCUlGTEFfQUREUkVTUywKKwlJRkxBX0JST0FEQ0FTVCwKKwlJRkxBX0lGTkFNRSwKKwlJRkxBX01UVSwKKwlJRkxBX0xJTkssCisJSUZMQV9RRElTQywKKwlJRkxBX1NUQVRTLAorCUlGTEFfQ09TVCwKKyNkZWZpbmUgSUZMQV9DT1NUIElGTEFfQ09TVAorCUlGTEFfUFJJT1JJVFksCisjZGVmaW5lIElGTEFfUFJJT1JJVFkgSUZMQV9QUklPUklUWQorCUlGTEFfTUFTVEVSLAorI2RlZmluZSBJRkxBX01BU1RFUiBJRkxBX01BU1RFUgorCUlGTEFfV0lSRUxFU1MsCQkvKiBXaXJlbGVzcyBFeHRlbnNpb24gZXZlbnQgLSBzZWUgd2lyZWxlc3MuaCAqLworI2RlZmluZSBJRkxBX1dJUkVMRVNTIElGTEFfV0lSRUxFU1MKKwlJRkxBX1BST1RJTkZPLAkJLyogUHJvdG9jb2wgc3BlY2lmaWMgaW5mb3JtYXRpb24gZm9yIGEgbGluayAqLworI2RlZmluZSBJRkxBX1BST1RJTkZPIElGTEFfUFJPVElORk8KKwlJRkxBX1RYUUxFTiwKKyNkZWZpbmUgSUZMQV9UWFFMRU4gSUZMQV9UWFFMRU4KKwlJRkxBX01BUCwKKyNkZWZpbmUgSUZMQV9NQVAgSUZMQV9NQVAKKwlJRkxBX1dFSUdIVCwKKyNkZWZpbmUgSUZMQV9XRUlHSFQgSUZMQV9XRUlHSFQKKwlJRkxBX09QRVJTVEFURSwKKwlJRkxBX0xJTktNT0RFLAorCV9fSUZMQV9NQVgKK307CisKKworI2RlZmluZSBJRkxBX01BWCAoX19JRkxBX01BWCAtIDEpCisKKy8qIGlmaV9mbGFncy4KKworICAgSUZGXyogZmxhZ3MuCisKKyAgIFRoZSBvbmx5IGNoYW5nZSBpczoKKyAgIElGRl9MT09QQkFDSywgSUZGX0JST0FEQ0FTVCBhbmQgSUZGX1BPSU5UT1BPSU5UIGFyZQorICAgbW9yZSBub3QgY2hhbmdlYWJsZSBieSB1c2VyLiBUaGV5IGRlc2NyaWJlIGxpbmsgbWVkaWEKKyAgIGNoYXJhY3RlcmlzdGljcyBhbmQgc2V0IGJ5IGRldmljZSBkcml2ZXIuCisKKyAgIENvbW1lbnRzOgorICAgLSBDb21iaW5hdGlvbiBJRkZfQlJPQURDQVNUfElGRl9QT0lOVE9QT0lOVCBpcyBpbnZhbGlkCisgICAtIElmIG5laXRoZXIgb2YgdGhlc2UgdGhyZWUgZmxhZ3MgYXJlIHNldDsKKyAgICAgdGhlIGludGVyZmFjZSBpcyBOQk1BLgorCisgICAtIElGRl9NVUxUSUNBU1QgZG9lcyBub3QgbWVhbiBhbnl0aGluZyBzcGVjaWFsOgorICAgbXVsdGljYXN0cyBjYW4gYmUgdXNlZCBvbiBhbGwgbm90LU5CTUEgbGlua3MuCisgICBJRkZfTVVMVElDQVNUIG1lYW5zIHRoYXQgdGhpcyBtZWRpYSB1c2VzIHNwZWNpYWwgZW5jYXBzdWxhdGlvbgorICAgZm9yIG11bHRpY2FzdCBmcmFtZXMuIEFwcGFyZW50bHksIGFsbCBJRkZfUE9JTlRPUE9JTlQgYW5kCisgICBJRkZfQlJPQURDQVNUIGRldmljZXMgYXJlIGFibGUgdG8gdXNlIG11bHRpY2FzdHMgdG9vLgorICovCisKKy8qIElGTEFfTElOSy4KKyAgIEZvciB1c3VhbCBkZXZpY2VzIGl0IGlzIGVxdWFsIGlmaV9pbmRleC4KKyAgIElmIGl0IGlzIGEgInZpcnR1YWwgaW50ZXJmYWNlIiAoZi5lLiB0dW5uZWwpLCBpZmlfbGluaworICAgY2FuIHBvaW50IHRvIHJlYWwgcGh5c2ljYWwgaW50ZXJmYWNlIChmLmUuIGZvciBiYW5kd2lkdGggY2FsY3VsYXRpb25zKSwKKyAgIG9yIG1heWJlIDAsIHdoYXQgbWVhbnMsIHRoYXQgcmVhbCBtZWRpYSBpcyB1bmtub3duICh1c3VhbAorICAgZm9yIElQSVAgdHVubmVscywgd2hlbiByb3V0ZSB0byBlbmRwb2ludCBpcyBhbGxvd2VkIHRvIGNoYW5nZSkKKyAqLworCisvKiBTdWJ0eXBlIGF0dHJpYnV0ZXMgZm9yIElGTEFfUFJPVElORk8gKi8KK2VudW0KK3sKKwlJRkxBX0lORVQ2X1VOU1BFQywKKwlJRkxBX0lORVQ2X0ZMQUdTLAkvKiBsaW5rIGZsYWdzCQkJKi8KKwlJRkxBX0lORVQ2X0NPTkYsCS8qIHN5c2N0bCBwYXJhbWV0ZXJzCQkqLworCUlGTEFfSU5FVDZfU1RBVFMsCS8qIHN0YXRpc3RpY3MJCQkqLworCUlGTEFfSU5FVDZfTUNBU1QsCS8qIE1DIHRoaW5ncy4gV2hhdCBvZiB0aGVtPwkqLworCUlGTEFfSU5FVDZfQ0FDSEVJTkZPLAkvKiB0aW1lIHZhbHVlcyBhbmQgbWF4IHJlYXNtIHNpemUgKi8KKwlfX0lGTEFfSU5FVDZfTUFYCit9OworCisjZGVmaW5lIElGTEFfSU5FVDZfTUFYCShfX0lGTEFfSU5FVDZfTUFYIC0gMSkKKworc3RydWN0IGlmbGFfY2FjaGVpbmZvCit7CisJX191MzIJbWF4X3JlYXNtX2xlbjsKKwlfX3UzMgl0c3RhbXA7CQkvKiBpcHY2SW50ZXJmYWNlVGFibGUgdXBkYXRlZCB0aW1lc3RhbXAgKi8KKwlfX3UzMglyZWFjaGFibGVfdGltZTsKKwlfX3UzMglyZXRyYW5zX3RpbWU7Cit9OworCisjZW5kaWYgLyogX0xJTlVYX0lGX0xJTktfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZ21wLmggYi9pbmNsdWRlL2xpbnV4L2lnbXAuaAppbmRleCA4OTljM2Q0Li4wM2Y0M2UyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lnbXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lnbXAuaApAQCAtMzAsOCArMzAsOCBAQAogewogCV9fdTggdHlwZTsKIAlfX3U4IGNvZGU7CQkvKiBGb3IgbmV3ZXIgSUdNUCAqLwotCV9fdTE2IGNzdW07Ci0JX191MzIgZ3JvdXA7CisJX19iZTE2IGNzdW07CisJX19iZTMyIGdyb3VwOwogfTsKIAogLyogVjMgZ3JvdXAgcmVjb3JkIHR5cGVzIFtncmVjX3R5cGVdICovCkBAIC00NSwyNSArNDUsMjUgQEAKIHN0cnVjdCBpZ21wdjNfZ3JlYyB7CiAJX191OAlncmVjX3R5cGU7CiAJX191OAlncmVjX2F1eHdvcmRzOwotCV9fdTE2CWdyZWNfbnNyY3M7Ci0JX191MzIJZ3JlY19tY2E7Ci0JX191MzIJZ3JlY19zcmNbMF07CisJX19iZTE2CWdyZWNfbnNyY3M7CisJX19iZTMyCWdyZWNfbWNhOworCV9fYmUzMglncmVjX3NyY1swXTsKIH07CiAKIHN0cnVjdCBpZ21wdjNfcmVwb3J0IHsKIAlfX3U4IHR5cGU7CiAJX191OCByZXN2MTsKLQlfX3UxNiBjc3VtOwotCV9fdTE2IHJlc3YyOwotCV9fdTE2IG5ncmVjOworCV9fYmUxNiBjc3VtOworCV9fYmUxNiByZXN2MjsKKwlfX2JlMTYgbmdyZWM7CiAJc3RydWN0IGlnbXB2M19ncmVjIGdyZWNbMF07CiB9OwogCiBzdHJ1Y3QgaWdtcHYzX3F1ZXJ5IHsKIAlfX3U4IHR5cGU7CiAJX191OCBjb2RlOwotCV9fdTE2IGNzdW07Ci0JX191MzIgZ3JvdXA7CisJX19iZTE2IGNzdW07CisJX19iZTMyIGdyb3VwOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCV9fdTggcXJ2OjMsCiAJICAgICBzdXBwcmVzczoxLApAQCAtNzYsOCArNzYsOCBAQAogI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgogI2VuZGlmCiAJX191OCBxcWljOwotCV9fdTE2IG5zcmNzOwotCV9fdTMyIHNyY3NbMF07CisJX19iZTE2IG5zcmNzOworCV9fYmUzMiBzcmNzWzBdOwogfTsKIAogI2RlZmluZSBJR01QX0hPU1RfTUVNQkVSU0hJUF9RVUVSWQkweDExCS8qIEZyb20gUkZDMTExMiAqLwpAQCAtMTM2LDExICsxMzYsMTEgQEAKIHsKIAl1bnNpZ25lZCBpbnQJCXNsX21heDsKIAl1bnNpZ25lZCBpbnQJCXNsX2NvdW50OwotCV9fdTMyCQkJc2xfYWRkclswXTsKKwlfX2JlMzIJCQlzbF9hZGRyWzBdOwogfTsKIAogI2RlZmluZSBJUF9TRkxTSVpFKGNvdW50KQkoc2l6ZW9mKHN0cnVjdCBpcF9zZl9zb2NrbGlzdCkgKyBcCi0JKGNvdW50KSAqIHNpemVvZihfX3UzMikpCisJKGNvdW50KSAqIHNpemVvZihfX2JlMzIpKQogCiAjZGVmaW5lIElQX1NGQkxPQ0sJMTAJLyogYWxsb2NhdGUgdGhpcyBtYW55IGF0IG9uY2UgKi8KIApAQCAtMTU5LDcgKzE1OSw3IEBACiBzdHJ1Y3QgaXBfc2ZfbGlzdAogewogCXN0cnVjdCBpcF9zZl9saXN0CSpzZl9uZXh0OwotCV9fdTMyCQkJc2ZfaW5hZGRyOworCV9fYmUzMgkJCXNmX2luYWRkcjsKIAl1bnNpZ25lZCBsb25nCQlzZl9jb3VudFsyXTsJLyogaW5jbHVkZS9leGNsdWRlIGNvdW50cyAqLwogCXVuc2lnbmVkIGNoYXIJCXNmX2dzcmVzcDsJLyogaW5jbHVkZSBpbiBnICYgcyByZXNwb25zZT8gKi8KIAl1bnNpZ25lZCBjaGFyCQlzZl9vbGRpbjsJLyogY2hhbmdlIHN0YXRlICovCkBAIC0xOTcsNyArMTk3LDcgQEAKICNkZWZpbmUgSUdNUFYzX1FRSUModmFsdWUpIElHTVBWM19FWFAoMHg4MCwgNCwgMywgdmFsdWUpCiAjZGVmaW5lIElHTVBWM19NUkModmFsdWUpIElHTVBWM19FWFAoMHg4MCwgNCwgMywgdmFsdWUpCiAKLWV4dGVybiBpbnQgaXBfY2hlY2tfbWMoc3RydWN0IGluX2RldmljZSAqZGV2LCB1MzIgbWNfYWRkciwgdTMyIHNyY19hZGRyLCB1MTYgcHJvdG8pOworZXh0ZXJuIGludCBpcF9jaGVja19tYyhzdHJ1Y3QgaW5fZGV2aWNlICpkZXYsIF9fYmUzMiBtY19hZGRyLCBfX2JlMzIgc3JjX2FkZHIsIHUxNiBwcm90byk7CiBleHRlcm4gaW50IGlnbXBfcmN2KHN0cnVjdCBza19idWZmICopOwogZXh0ZXJuIGludCBpcF9tY19qb2luX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIpOwogZXh0ZXJuIGludCBpcF9tY19sZWF2ZV9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yKTsKQEAgLTIwOSwxMyArMjA5LDEzIEBACiAJCXN0cnVjdCBpcF9tc2ZpbHRlciBfX3VzZXIgKm9wdHZhbCwgaW50IF9fdXNlciAqb3B0bGVuKTsKIGV4dGVybiBpbnQgaXBfbWNfZ3NmZ2V0KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGdyb3VwX2ZpbHRlciAqZ3NmLAogCQlzdHJ1Y3QgZ3JvdXBfZmlsdGVyIF9fdXNlciAqb3B0dmFsLCBpbnQgX191c2VyICpvcHRsZW4pOwotZXh0ZXJuIGludCBpcF9tY19zZl9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIHUzMiBsb2NhbCwgdTMyIHJtdCwgaW50IGRpZik7CitleHRlcm4gaW50IGlwX21jX3NmX2FsbG93KHN0cnVjdCBzb2NrICpzaywgX19iZTMyIGxvY2FsLCBfX2JlMzIgcm10LCBpbnQgZGlmKTsKIGV4dGVybiB2b2lkIGlwX21yX2luaXQodm9pZCk7CiBleHRlcm4gdm9pZCBpcF9tY19pbml0X2RldihzdHJ1Y3QgaW5fZGV2aWNlICopOwogZXh0ZXJuIHZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqKTsKIGV4dGVybiB2b2lkIGlwX21jX3VwKHN0cnVjdCBpbl9kZXZpY2UgKik7CiBleHRlcm4gdm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKik7Ci1leHRlcm4gdm9pZCBpcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYWRkcik7Ci1leHRlcm4gdm9pZCBpcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYWRkcik7CitleHRlcm4gdm9pZCBpcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcik7CitleHRlcm4gdm9pZCBpcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcik7CiAjZW5kaWYKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbi5oIGIvaW5jbHVkZS9saW51eC9pbi5oCmluZGV4IGJjYWNhODMuLmQ3OWZjNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW4uaAorKysgYi9pbmNsdWRlL2xpbnV4L2luLmgKQEAgLTEyMywxNyArMTIzLDE3IEBACiB9OwogCiBzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgewotCV9fdTMyCQlpbXJfbXVsdGlhZGRyOwotCV9fdTMyCQlpbXJfaW50ZXJmYWNlOwotCV9fdTMyCQlpbXJfc291cmNlYWRkcjsKKwlfX2JlMzIJCWltcl9tdWx0aWFkZHI7CisJX19iZTMyCQlpbXJfaW50ZXJmYWNlOworCV9fYmUzMgkJaW1yX3NvdXJjZWFkZHI7CiB9OwogCiBzdHJ1Y3QgaXBfbXNmaWx0ZXIgewotCV9fdTMyCQlpbXNmX211bHRpYWRkcjsKLQlfX3UzMgkJaW1zZl9pbnRlcmZhY2U7CisJX19iZTMyCQlpbXNmX211bHRpYWRkcjsKKwlfX2JlMzIJCWltc2ZfaW50ZXJmYWNlOwogCV9fdTMyCQlpbXNmX2Ztb2RlOwogCV9fdTMyCQlpbXNmX251bXNyYzsKLQlfX3UzMgkJaW1zZl9zbGlzdFsxXTsKKwlfX2JlMzIJCWltc2Zfc2xpc3RbMV07CiB9OwogCiAjZGVmaW5lIElQX01TRklMVEVSX1NJWkUobnVtc3JjKSBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luNi5oIGIvaW5jbHVkZS9saW51eC9pbjYuaAppbmRleCBkNzc2ODI5Li45YmU2YTQ3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luNi5oCisrKyBiL2luY2x1ZGUvbGludXgvaW42LmgKQEAgLTMyLDggKzMyLDggQEAKIAl1bmlvbiAKIAl7CiAJCV9fdTgJCXU2X2FkZHI4WzE2XTsKLQkJX191MTYJCXU2X2FkZHIxNls4XTsKLQkJX191MzIJCXU2X2FkZHIzMls0XTsKKwkJX19iZTE2CQl1Nl9hZGRyMTZbOF07CisJCV9fYmUzMgkJdTZfYWRkcjMyWzRdOwogCX0gaW42X3U7CiAjZGVmaW5lIHM2X2FkZHIJCQlpbjZfdS51Nl9hZGRyOAogI2RlZmluZSBzNl9hZGRyMTYJCWluNl91LnU2X2FkZHIxNgpAQCAtNTMsNyArNTMsNyBAQAogCiBzdHJ1Y3Qgc29ja2FkZHJfaW42IHsKIAl1bnNpZ25lZCBzaG9ydCBpbnQJc2luNl9mYW1pbHk7ICAgIC8qIEFGX0lORVQ2ICovCi0JX191MTYJCQlzaW42X3BvcnQ7ICAgICAgLyogVHJhbnNwb3J0IGxheWVyIHBvcnQgIyAqLworCV9fYmUxNgkJCXNpbjZfcG9ydDsgICAgICAvKiBUcmFuc3BvcnQgbGF5ZXIgcG9ydCAjICovCiAJX191MzIJCQlzaW42X2Zsb3dpbmZvOyAgLyogSVB2NiBmbG93IGluZm9ybWF0aW9uICovCiAJc3RydWN0IGluNl9hZGRyCQlzaW42X2FkZHI7ICAgICAgLyogSVB2NiBhZGRyZXNzICovCiAJX191MzIJCQlzaW42X3Njb3BlX2lkOyAgLyogc2NvcGUgaWQgKG5ldyBpbiBSRkMyNTUzKSAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaCBiL2luY2x1ZGUvbGludXgvaW5ldF9kaWFnLmgKaW5kZXggYTQ2MDZlNS4uNmU4YmM1NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbmV0X2RpYWcuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRfZGlhZy5oCkBAIC05LDEwICs5LDEwIEBACiAKIC8qIFNvY2tldCBpZGVudGl0eSAqLwogc3RydWN0IGluZXRfZGlhZ19zb2NraWQgewotCV9fdTE2CWlkaWFnX3Nwb3J0OwotCV9fdTE2CWlkaWFnX2Rwb3J0OwotCV9fdTMyCWlkaWFnX3NyY1s0XTsKLQlfX3UzMglpZGlhZ19kc3RbNF07CisJX19iZTE2CWlkaWFnX3Nwb3J0OworCV9fYmUxNglpZGlhZ19kcG9ydDsKKwlfX2JlMzIJaWRpYWdfc3JjWzRdOworCV9fYmUzMglpZGlhZ19kc3RbNF07CiAJX191MzIJaWRpYWdfaWY7CiAJX191MzIJaWRpYWdfY29va2llWzJdOwogI2RlZmluZSBJTkVUX0RJQUdfTk9DT09LSUUgKH4wVSkKQEAgLTY3LDcgKzY3LDcgQEAKIAlfX3U4CWZhbWlseTsKIAlfX3U4CXByZWZpeF9sZW47CiAJaW50CXBvcnQ7Ci0JX191MzIJYWRkclswXTsKKwlfX2JlMzIJYWRkclswXTsKIH07CiAKIC8qIEJhc2UgaW5mbyBzdHJ1Y3R1cmUuIEl0IGNvbnRhaW5zIHNvY2tldCBpZGVudGl0eSAoYWRkcnMvcG9ydHMvY29va2llKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAppbmRleCA5MjI5N2ZmLi41YTBhYjA0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L2luZXRkZXZpY2UuaApAQCAtOTAsMTEgKzkwLDExIEBACiAJc3RydWN0IGluX2lmYWRkcgkqaWZhX25leHQ7CiAJc3RydWN0IGluX2RldmljZQkqaWZhX2RldjsKIAlzdHJ1Y3QgcmN1X2hlYWQJCXJjdV9oZWFkOwotCXUzMgkJCWlmYV9sb2NhbDsKLQl1MzIJCQlpZmFfYWRkcmVzczsKLQl1MzIJCQlpZmFfbWFzazsKLQl1MzIJCQlpZmFfYnJvYWRjYXN0OwotCXUzMgkJCWlmYV9hbnljYXN0OworCV9fYmUzMgkJCWlmYV9sb2NhbDsKKwlfX2JlMzIJCQlpZmFfYWRkcmVzczsKKwlfX2JlMzIJCQlpZmFfbWFzazsKKwlfX2JlMzIJCQlpZmFfYnJvYWRjYXN0OworCV9fYmUzMgkJCWlmYV9hbnljYXN0OwogCXVuc2lnbmVkIGNoYXIJCWlmYV9zY29wZTsKIAl1bnNpZ25lZCBjaGFyCQlpZmFfZmxhZ3M7CiAJdW5zaWduZWQgY2hhcgkJaWZhX3ByZWZpeGxlbjsKQEAgLTEwNCwxOCArMTA0LDE4IEBACiBleHRlcm4gaW50IHJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogZXh0ZXJuIGludCB1bnJlZ2lzdGVyX2luZXRhZGRyX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpOwogCi1leHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgCSppcF9kZXZfZmluZCh1MzIgYWRkcik7Ci1leHRlcm4gaW50CQlpbmV0X2FkZHJfb25saW5rKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgdTMyIGEsIHUzMiBiKTsKK2V4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSAJKmlwX2Rldl9maW5kKF9fYmUzMiBhZGRyKTsKK2V4dGVybiBpbnQJCWluZXRfYWRkcl9vbmxpbmsoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYSwgX19iZTMyIGIpOwogZXh0ZXJuIGludAkJZGV2aW5ldF9pb2N0bCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkIF9fdXNlciAqKTsKIGV4dGVybiB2b2lkCQlkZXZpbmV0X2luaXQodm9pZCk7CiBleHRlcm4gc3RydWN0IGluX2RldmljZSAqaW5ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBpbl9kZXZpY2UJKmluZXRkZXZfYnlfaW5kZXgoaW50KTsKLWV4dGVybiB1MzIJCWluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIGRzdCwgaW50IHNjb3BlKTsKLWV4dGVybiB1MzIJCWluZXRfY29uZmlybV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkc3QsIHUzMiBsb2NhbCwgaW50IHNjb3BlKTsKLWV4dGVybiBzdHJ1Y3QgaW5faWZhZGRyICppbmV0X2lmYV9ieXByZWZpeChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBwcmVmaXgsIHUzMiBtYXNrKTsKK2V4dGVybiBfX2JlMzIJCWluZXRfc2VsZWN0X2FkZHIoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyIGRzdCwgaW50IHNjb3BlKTsKK2V4dGVybiBfX2JlMzIJCWluZXRfY29uZmlybV9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBkc3QsIF9fYmUzMiBsb2NhbCwgaW50IHNjb3BlKTsKK2V4dGVybiBzdHJ1Y3QgaW5faWZhZGRyICppbmV0X2lmYV9ieXByZWZpeChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBwcmVmaXgsIF9fYmUzMiBtYXNrKTsKIGV4dGVybiB2b2lkCQlpbmV0X2ZvcndhcmRfY2hhbmdlKHZvaWQpOwogCi1zdGF0aWMgX19pbmxpbmVfXyBpbnQgaW5ldF9pZmFfbWF0Y2godTMyIGFkZHIsIHN0cnVjdCBpbl9pZmFkZHIgKmlmYSkKK3N0YXRpYyBfX2lubGluZV9fIGludCBpbmV0X2lmYV9tYXRjaChfX2JlMzIgYWRkciwgc3RydWN0IGluX2lmYWRkciAqaWZhKQogewogCXJldHVybiAhKChhZGRyXmlmYS0+aWZhX2FkZHJlc3MpJmlmYS0+aWZhX21hc2spOwogfQpAQCAtMTgzLDcgKzE4Myw3IEBACiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAKLXN0YXRpYyBfX2lubGluZV9fIF9fdTMyIGluZXRfbWFrZV9tYXNrKGludCBsb2dtYXNrKQorc3RhdGljIF9faW5saW5lX18gX19iZTMyIGluZXRfbWFrZV9tYXNrKGludCBsb2dtYXNrKQogewogCWlmIChsb2dtYXNrKQogCQlyZXR1cm4gaHRvbmwofigoMTw8KDMyLWxvZ21hc2spKS0xKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2luaXQuaCBiL2luY2x1ZGUvbGludXgvaW5pdC5oCmluZGV4IDY2Njc3ODUuLmU5MmIxNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW5pdC5oCisrKyBiL2luY2x1ZGUvbGludXgvaW5pdC5oCkBAIC02OCw2ICs2OCw3IEBACiAKIC8qIERlZmluZWQgaW4gaW5pdC9tYWluLmMgKi8KIGV4dGVybiBjaGFyIHNhdmVkX2NvbW1hbmRfbGluZVtdOworZXh0ZXJuIHVuc2lnbmVkIGludCByZXNldF9kZXZpY2VzOwogCiAvKiB1c2VkIGJ5IGluaXQvbWFpbi5jICovCiBleHRlcm4gdm9pZCBzZXR1cF9hcmNoKGNoYXIgKiopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggZDVhZmVlOS4uMWY5N2UzZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0xMjMsNiArMTIzLDE0IEBACiAjZW5kaWYKIH0KIAorc3RhdGljIGlubGluZSB2b2lkIGRpc2FibGVfaXJxX25vc3luY19sb2NrZGVwX2lycXNhdmUodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJZGlzYWJsZV9pcnFfbm9zeW5jKGlycSk7CisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwlsb2NhbF9pcnFfc2F2ZSgqZmxhZ3MpOworI2VuZGlmCit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZCBkaXNhYmxlX2lycV9sb2NrZGVwKHVuc2lnbmVkIGludCBpcnEpCiB7CiAJZGlzYWJsZV9pcnEoaXJxKTsKQEAgLTEzOSw2ICsxNDcsMTQgQEAKIAllbmFibGVfaXJxKGlycSk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBlbmFibGVfaXJxX2xvY2tkZXBfaXJxcmVzdG9yZSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCWxvY2FsX2lycV9yZXN0b3JlKCpmbGFncyk7CisjZW5kaWYKKwllbmFibGVfaXJxKGlycSk7Cit9CisKIC8qIElSUSB3YWtldXAgKFBNKSBjb250cm9sOiAqLwogZXh0ZXJuIGludCBzZXRfaXJxX3dha2UodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgaW50IG9uKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pby5oIGIvaW5jbHVkZS9saW51eC9pby5oCmluZGV4IDQyMGUyZmQuLmFhM2Y1YWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW8uaAorKysgYi9pbmNsdWRlL2xpbnV4L2lvLmgKQEAgLTE5LDggKzE5LDEyIEBACiAjZGVmaW5lIF9MSU5VWF9JT19ICiAKICNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgogCiB2b2lkIF9faW93cml0ZTMyX2NvcHkodm9pZCBfX2lvbWVtICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IGNvdW50KTsKIHZvaWQgX19pb3dyaXRlNjRfY29weSh2b2lkIF9faW9tZW0gKnRvLCBjb25zdCB2b2lkICpmcm9tLCBzaXplX3QgY291bnQpOwogCitpbnQgaW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCk7CisKICNlbmRpZiAvKiBfTElOVVhfSU9fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcC5oIGIvaW5jbHVkZS9saW51eC9pcC5oCmluZGV4IDJmNDYwMDEuLjZiMjVkMzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwLmgKQEAgLTk2LDcgKzk2LDcgQEAKIAlfX2JlMTYJZnJhZ19vZmY7CiAJX191OAl0dGw7CiAJX191OAlwcm90b2NvbDsKLQlfX3UxNgljaGVjazsKKwlfX2JlMTYJY2hlY2s7CiAJX19iZTMyCXNhZGRyOwogCV9fYmUzMglkYWRkcjsKIAkvKlRoZSBvcHRpb25zIHN0YXJ0IGhlcmUuICovCkBAIC0xMDUsMjIgKzEwNSwyMiBAQAogc3RydWN0IGlwX2F1dGhfaGRyIHsKIAlfX3U4ICBuZXh0aGRyOwogCV9fdTggIGhkcmxlbjsJCS8qIFRoaXMgb25lIGlzIG1lYXN1cmVkIGluIDMyIGJpdCB1bml0cyEgKi8KLQlfX3UxNiByZXNlcnZlZDsKLQlfX3UzMiBzcGk7Ci0JX191MzIgc2VxX25vOwkJLyogU2VxdWVuY2UgbnVtYmVyICovCisJX19iZTE2IHJlc2VydmVkOworCV9fYmUzMiBzcGk7CisJX19iZTMyIHNlcV9ubzsJCS8qIFNlcXVlbmNlIG51bWJlciAqLwogCV9fdTggIGF1dGhfZGF0YVswXTsJLyogVmFyaWFibGUgbGVuIGJ1dCA+PTQuIE1pbmQgdGhlIDY0IGJpdCBhbGlnbm1lbnQhICovCiB9OwogCiBzdHJ1Y3QgaXBfZXNwX2hkciB7Ci0JX191MzIgc3BpOwotCV9fdTMyIHNlcV9ubzsJCS8qIFNlcXVlbmNlIG51bWJlciAqLworCV9fYmUzMiBzcGk7CisJX19iZTMyIHNlcV9ubzsJCS8qIFNlcXVlbmNlIG51bWJlciAqLwogCV9fdTggIGVuY19kYXRhWzBdOwkvKiBWYXJpYWJsZSBsZW4gYnV0ID49OC4gTWluZCB0aGUgNjQgYml0IGFsaWdubWVudCEgKi8KIH07CiAKIHN0cnVjdCBpcF9jb21wX2hkciB7CiAJX191OCBuZXh0aGRyOwogCV9fdTggZmxhZ3M7Ci0JX191MTYgY3BpOworCV9fYmUxNiBjcGk7CiB9OwogCiAjZW5kaWYJLyogX0xJTlVYX0lQX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXBtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pLmgKaW5kZXggZDA5ZmJlYS4uNzk2Y2EwMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pcG1pLmgKKysrIGIvaW5jbHVkZS9saW51eC9pcG1pLmgKQEAgLTE0OCw2ICsxNDgsMTMgQEAKICNkZWZpbmUgSVBNSV9CTUNfQ0hBTk5FTCAgMHhmCiAjZGVmaW5lIElQTUlfTlVNX0NIQU5ORUxTIDB4MTAKIAorLyoKKyAqIFVzZWQgdG8gc2lnbmlmeSBhbiAiYWxsIGNoYW5uZWwiIGJpdG1hc2suICBUaGlzIGlzIG1vcmUgdGhhbiB0aGUKKyAqIGFjdHVhbCBudW1iZXIgb2YgY2hhbm5lbHMgYmVjYXVzZSB0aGlzIGlzIHVzZWQgaW4gdXNlcmxhbmQgYW5kCisgKiB3aWxsIGNvdmVyIHVzIGlmIHRoZSBudW1iZXIgb2YgY2hhbm5lbHMgaXMgZXh0ZW5kZWQuCisgKi8KKyNkZWZpbmUgSVBNSV9DSEFOX0FMTCAgICAgKH4wKQorCiAKIC8qCiAgKiBBIHJhdyBJUE1JIG1lc3NhZ2Ugd2l0aG91dCBhbnkgYWRkcmVzc2luZy4gIFRoaXMgY292ZXJzIGJvdGgKQEAgLTM1MCwxOCArMzU3LDIxIEBACiAKIC8qCiAgKiBXaGVuIGNvbW1hbmRzIGNvbWUgaW4gdG8gdGhlIFNNUywgdGhlIHVzZXIgY2FuIHJlZ2lzdGVyIHRvIHJlY2VpdmUKLSAqIHRoZW0uICBPbmx5IG9uZSB1c2VyIGNhbiBiZSBsaXN0ZW5pbmcgb24gYSBzcGVjaWZpYyBuZXRmbi9jbWQgcGFpcgorICogdGhlbS4gIE9ubHkgb25lIHVzZXIgY2FuIGJlIGxpc3RlbmluZyBvbiBhIHNwZWNpZmljIG5ldGZuL2NtZC9jaGFuIHR1cGxlCiAgKiBhdCBhIHRpbWUsIHlvdSB3aWxsIGdldCBhbiBFQlVTWSBlcnJvciBpZiB0aGUgY29tbWFuZCBpcyBhbHJlYWR5CiAgKiByZWdpc3RlcmVkLiAgSWYgYSBjb21tYW5kIGlzIHJlY2VpdmVkIHRoYXQgZG9lcyBub3QgaGF2ZSBhIHVzZXIKICAqIHJlZ2lzdGVyZWQsIHRoZSBkcml2ZXIgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHVybiB0aGUgcHJvcGVyCi0gKiBlcnJvci4KKyAqIGVycm9yLiAgQ2hhbm5lbHMgYXJlIHNwZWNpZmllZCBhcyBhIGJpdGZpZWxkLCB1c2UgSVBNSV9DSEFOX0FMTCB0bworICogbWVhbiBhbGwgY2hhbm5lbHMuCiAgKi8KIGludCBpcG1pX3JlZ2lzdGVyX2Zvcl9jbWQoaXBtaV91c2VyX3QgICB1c2VyLAogCQkJICB1bnNpZ25lZCBjaGFyIG5ldGZuLAotCQkJICB1bnNpZ25lZCBjaGFyIGNtZCk7CisJCQkgIHVuc2lnbmVkIGNoYXIgY21kLAorCQkJICB1bnNpZ25lZCBpbnQgIGNoYW5zKTsKIGludCBpcG1pX3VucmVnaXN0ZXJfZm9yX2NtZChpcG1pX3VzZXJfdCAgIHVzZXIsCiAJCQkgICAgdW5zaWduZWQgY2hhciBuZXRmbiwKLQkJCSAgICB1bnNpZ25lZCBjaGFyIGNtZCk7CisJCQkgICAgdW5zaWduZWQgY2hhciBjbWQsCisJCQkgICAgdW5zaWduZWQgaW50ICBjaGFucyk7CiAKIC8qCiAgKiBBbGxvdyBydW4tdG8tY29tcGxldGlvbiBtb2RlIHRvIGJlIHNldCBmb3IgdGhlIGludGVyZmFjZSBvZgpAQCAtNTcxLDYgKzU4MSwzNiBAQAogI2RlZmluZSBJUE1JQ1RMX1VOUkVHSVNURVJfRk9SX0NNRAlfSU9SKElQTUlfSU9DX01BR0lDLCAxNSwJXAogCQkJCQkgICAgIHN0cnVjdCBpcG1pX2NtZHNwZWMpCiAKKy8qCisgKiBSZWdpc3RlciB0byBnZXQgY29tbWFuZHMgZnJvbSBvdGhlciBlbnRpdGllcyBvbiBzcGVjaWZpYyBjaGFubmVscy4KKyAqIFRoaXMgd2F5LCB5b3UgY2FuIG9ubHkgbGlzdGVuIG9uIHNwZWNpZmljIGNoYW5uZWxzLCBvciBoYXZlIG1lc3NhZ2VzCisgKiBmcm9tIHNvbWUgY2hhbm5lbHMgZ28gdG8gb25lIHBsYWNlIGFuZCBvdGhlciBjaGFubmVscyB0byBzb21lcGxhY2UKKyAqIGVsc2UuICBUaGUgY2hhbnMgZmllbGQgaXMgYSBiaXRtYXNrLCAoMSA8PCBjaGFubmVsKSBmb3IgZWFjaCBjaGFubmVsLgorICogSXQgbWF5IGJlIElQTUlfQ0hBTl9BTEwgZm9yIGFsbCBjaGFubmVscy4KKyAqLworc3RydWN0IGlwbWlfY21kc3BlY19jaGFucworeworCXVuc2lnbmVkIGludCBuZXRmbjsKKwl1bnNpZ25lZCBpbnQgY21kOworCXVuc2lnbmVkIGludCBjaGFuczsKK307CisKKy8qCisgKiBSZWdpc3RlciB0byByZWNlaXZlIGEgc3BlY2lmaWMgY29tbWFuZCBvbiBzcGVjaWZpYyBjaGFubmVscy4gIGVycm9yIHZhbHVlczoKKyAqICAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogICAtIEVCVVNZIC0gT25lIG9mIHRoZSBuZXRmbi9jbWQvY2hhbnMgc3VwcGxpZWQgd2FzIGFscmVhZHkgaW4gdXNlLgorICogICAtIEVOT01FTSAtIGNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBlbnRyeS4KKyAqLworI2RlZmluZSBJUE1JQ1RMX1JFR0lTVEVSX0ZPUl9DTURfQ0hBTlMJX0lPUihJUE1JX0lPQ19NQUdJQywgMjgsCVwKKwkJCQkJICAgICBzdHJ1Y3QgaXBtaV9jbWRzcGVjX2NoYW5zKQorLyoKKyAqIFVucmVnaXN0ZXIgc29tZSBuZXRmbi9jbWQvY2hhbnMuICBlcnJvciB2YWx1ZXM6CisgKiAgLSBFRkFVTFQgLSBhbiBhZGRyZXNzIHN1cHBsaWVkIHdhcyBpbnZhbGlkLgorICogIC0gRU5PRU5UIC0gTm9uZSBvZiB0aGUgbmV0Zm4vY21kL2NoYW5zIHdlcmUgZm91bmQgcmVnaXN0ZXJlZCBmb3IgdGhpcyB1c2VyLgorICovCisjZGVmaW5lIElQTUlDVExfVU5SRUdJU1RFUl9GT1JfQ01EX0NIQU5TIF9JT1IoSVBNSV9JT0NfTUFHSUMsIDI5LAlcCisJCQkJCSAgICAgc3RydWN0IGlwbWlfY21kc3BlY19jaGFucykKKwogLyogCiAgKiBTZXQgd2hldGhlciB0aGlzIGludGVyZmFjZSByZWNlaXZlcyBldmVudHMuICBOb3RlIHRoYXQgdGhlIGZpcnN0CiAgKiB1c2VyIHJlZ2lzdGVyZWQgZm9yIGV2ZW50cyB3aWxsIGdldCBhbGwgcGVuZGluZyBldmVudHMgZm9yIHRoZQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcHY2LmggYi9pbmNsdWRlL2xpbnV4L2lwdjYuaAppbmRleCBjYWNhNTdkLi40ZjQzNWM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lwdjYuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwdjYuaApAQCAtOTksMjIgKzk5LDIyIEBACiBzdHJ1Y3QgaXB2Nl9hdXRoX2hkciB7CiAJX191OCAgbmV4dGhkcjsKIAlfX3U4ICBoZHJsZW47ICAgICAgICAgICAvKiBUaGlzIG9uZSBpcyBtZWFzdXJlZCBpbiAzMiBiaXQgdW5pdHMhICovCi0JX191MTYgcmVzZXJ2ZWQ7Ci0JX191MzIgc3BpOwotCV9fdTMyIHNlcV9ubzsgICAgICAgICAgIC8qIFNlcXVlbmNlIG51bWJlciAqLworCV9fYmUxNiByZXNlcnZlZDsKKwlfX2JlMzIgc3BpOworCV9fYmUzMiBzZXFfbm87ICAgICAgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgKi8KIAlfX3U4ICBhdXRoX2RhdGFbMF07ICAgICAvKiBMZW5ndGggdmFyaWFibGUgYnV0ID49NC4gTWluZCB0aGUgNjQgYml0IGFsaWdubWVudCEgKi8KIH07CiAKIHN0cnVjdCBpcHY2X2VzcF9oZHIgewotCV9fdTMyIHNwaTsKLQlfX3UzMiBzZXFfbm87ICAgICAgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgKi8KKwlfX2JlMzIgc3BpOworCV9fYmUzMiBzZXFfbm87ICAgICAgICAgICAvKiBTZXF1ZW5jZSBudW1iZXIgKi8KIAlfX3U4ICBlbmNfZGF0YVswXTsgICAgICAvKiBMZW5ndGggdmFyaWFibGUgYnV0ID49OC4gTWluZCB0aGUgNjQgYml0IGFsaWdubWVudCEgKi8KIH07CiAKIHN0cnVjdCBpcHY2X2NvbXBfaGRyIHsKIAlfX3U4IG5leHRoZHI7CiAJX191OCBmbGFnczsKLQlfX3UxNiBjcGk7CisJX19iZTE2IGNwaTsKIH07CiAKIC8qCkBAIC0xMzYsNyArMTM2LDcgQEAKICNlbmRpZgogCV9fdTgJCQlmbG93X2xibFszXTsKIAotCV9fdTE2CQkJcGF5bG9hZF9sZW47CisJX19iZTE2CQkJcGF5bG9hZF9sZW47CiAJX191OAkJCW5leHRoZHI7CiAJX191OAkJCWhvcF9saW1pdDsKIApAQCAtNDYxLDcgKzQ2MSw3IEBACiAKICNkZWZpbmUgSU5FVDZfTUFUQ0goX19zaywgX19oYXNoLCBfX3NhZGRyLCBfX2RhZGRyLCBfX3BvcnRzLCBfX2RpZilcCiAJKCgoX19zayktPnNrX2hhc2ggPT0gKF9faGFzaCkpCQkJCSYmIFwKLQkgKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAgCSYmIFwKKwkgKCgqKChfX3BvcnRwYWlyICopJihpbmV0X3NrKF9fc2spLT5kcG9ydCkpKSA9PSAoX19wb3J0cykpICAJJiYgXAogCSAoKF9fc2spLT5za19mYW1pbHkJCT09IEFGX0lORVQ2KQkJJiYgXAogCSBpcHY2X2FkZHJfZXF1YWwoJmluZXQ2X3NrKF9fc2spLT5kYWRkciwgKF9fc2FkZHIpKQkmJiBcCiAJIGlwdjZfYWRkcl9lcXVhbCgmaW5ldDZfc2soX19zayktPnJjdl9zYWRkciwgKF9fZGFkZHIpKQkmJiBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2piZC5oIGIvaW5jbHVkZS9saW51eC9qYmQuaAppbmRleCBhMDRjMTU0Li5mZTg5NDQ0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2piZC5oCisrKyBiL2luY2x1ZGUvbGludXgvamJkLmgKQEAgLTEsNiArMSw2IEBACiAvKgogICogbGludXgvaW5jbHVkZS9saW51eC9qYmQuaAotICogCisgKgogICogV3JpdHRlbiBieSBTdGVwaGVuIEMuIFR3ZWVkaWUgPHNjdEByZWRoYXQuY29tPgogICoKICAqIENvcHlyaWdodCAxOTk4LTIwMDAgUmVkIEhhdCwgSW5jIC0tLSBBbGwgUmlnaHRzIFJlc2VydmVkCkBAIC02NCw3ICs2NCw3IEBACiAJCWlmICgobikgPD0gam91cm5hbF9lbmFibGVfZGVidWcpIHsJCQlcCiAJCQlwcmludGsgKEtFUk5fREVCVUcgIiglcywgJWQpOiAlczogIiwJCVwKIAkJCQlfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7CVwKLQkJICAJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAorCQkJcHJpbnRrIChmLCAjIyBhKTsJCQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogI2Vsc2UKQEAgLTk3LDggKzk3LDggQEAKICAqIG51bWJlciBvZiBvdXRzdGFuZGluZyBidWZmZXJzIHBvc3NpYmxlIGF0IGFueSB0aW1lLiAgV2hlbiB0aGUKICAqIG9wZXJhdGlvbiBjb21wbGV0ZXMsIGFueSBidWZmZXIgY3JlZGl0cyBub3QgdXNlZCBhcmUgY3JlZGl0ZWQgYmFjayB0bwogICogdGhlIHRyYW5zYWN0aW9uLCBzbyB0aGF0IGF0IGFsbCB0aW1lcyB3ZSBrbm93IGhvdyBtYW55IGJ1ZmZlcnMgdGhlCi0gKiBvdXRzdGFuZGluZyB1cGRhdGVzIG9uIGEgdHJhbnNhY3Rpb24gbWlnaHQgcG9zc2libHkgdG91Y2guIAotICogCisgKiBvdXRzdGFuZGluZyB1cGRhdGVzIG9uIGEgdHJhbnNhY3Rpb24gbWlnaHQgcG9zc2libHkgdG91Y2guCisgKgogICogVGhpcyBpcyBhbiBvcGFxdWUgZGF0YXR5cGUuCiAgKiovCiB0eXBlZGVmIHN0cnVjdCBoYW5kbGVfcwkJaGFuZGxlX3Q7CS8qIEF0b21pYyBvcGVyYXRpb24gdHlwZSAqLwpAQCAtMTA4LDcgKzEwOCw3IEBACiAgKiB0eXBlZGVmIGpvdXJuYWxfdCAtIFRoZSBqb3VybmFsX3QgbWFpbnRhaW5zIGFsbCBvZiB0aGUgam91cm5hbGluZyBzdGF0ZSBpbmZvcm1hdGlvbiBmb3IgYSBzaW5nbGUgZmlsZXN5c3RlbS4KICAqCiAgKiBqb3VybmFsX3QgaXMgbGlua2VkIHRvIGZyb20gdGhlIGZzIHN1cGVyYmxvY2sgc3RydWN0dXJlLgotICogCisgKgogICogV2UgdXNlIHRoZSBqb3VybmFsX3QgdG8ga2VlcCB0cmFjayBvZiBhbGwgb3V0c3RhbmRpbmcgdHJhbnNhY3Rpb24KICAqIGFjdGl2aXR5IG9uIHRoZSBmaWxlc3lzdGVtLCBhbmQgdG8gbWFuYWdlIHRoZSBzdGF0ZSBvZiB0aGUgbG9nCiAgKiB3cml0aW5nIHByb2Nlc3MuCkBAIC0xMjgsNyArMTI4LDcgQEAKICAqIE9uLWRpc2sgc3RydWN0dXJlcwogICovCiAKLS8qIAorLyoKICAqIERlc2NyaXB0b3IgYmxvY2sgdHlwZXM6CiAgKi8KIApAQCAtMTQ5LDggKzE0OSw4IEBACiB9IGpvdXJuYWxfaGVhZGVyX3Q7CiAKIAotLyogCi0gKiBUaGUgYmxvY2sgdGFnOiB1c2VkIHRvIGRlc2NyaWJlIGEgc2luZ2xlIGJ1ZmZlciBpbiB0aGUgam91cm5hbCAKKy8qCisgKiBUaGUgYmxvY2sgdGFnOiB1c2VkIHRvIGRlc2NyaWJlIGEgc2luZ2xlIGJ1ZmZlciBpbiB0aGUgam91cm5hbAogICovCiB0eXBlZGVmIHN0cnVjdCBqb3VybmFsX2Jsb2NrX3RhZ19zCiB7CkBAIC0xNTgsOSArMTU4LDkgQEAKIAlfX2JlMzIJCXRfZmxhZ3M7CS8qIFNlZSBiZWxvdyAqLwogfSBqb3VybmFsX2Jsb2NrX3RhZ190OwogCi0vKiAKKy8qCiAgKiBUaGUgcmV2b2tlIGRlc2NyaXB0b3I6IHVzZWQgb24gZGlzayB0byBkZXNjcmliZSBhIHNlcmllcyBvZiBibG9ja3MgdG8KLSAqIGJlIHJldm9rZWQgZnJvbSB0aGUgbG9nIAorICogYmUgcmV2b2tlZCBmcm9tIHRoZSBsb2cKICAqLwogdHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9yZXZva2VfaGVhZGVyX3MKIHsKQEAgLTIwMSw5ICsyMDEsOSBAQAogCiAvKiAweDAwMjQgKi8KIAkvKiBSZW1haW5pbmcgZmllbGRzIGFyZSBvbmx5IHZhbGlkIGluIGEgdmVyc2lvbi0yIHN1cGVyYmxvY2sgKi8KLQlfX2JlMzIJc19mZWF0dXJlX2NvbXBhdDsgCS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KLQlfX2JlMzIJc19mZWF0dXJlX2luY29tcGF0OyAJLyogaW5jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCi0JX19iZTMyCXNfZmVhdHVyZV9yb19jb21wYXQ7IAkvKiByZWFkb25seS1jb21wYXRpYmxlIGZlYXR1cmUgc2V0ICovCisJX19iZTMyCXNfZmVhdHVyZV9jb21wYXQ7CS8qIGNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX2JlMzIJc19mZWF0dXJlX2luY29tcGF0OwkvKiBpbmNvbXBhdGlibGUgZmVhdHVyZSBzZXQgKi8KKwlfX2JlMzIJc19mZWF0dXJlX3JvX2NvbXBhdDsJLyogcmVhZG9ubHktY29tcGF0aWJsZSBmZWF0dXJlIHNldCAqLwogLyogMHgwMDMwICovCiAJX191OAlzX3V1aWRbMTZdOwkJLyogMTI4LWJpdCB1dWlkIGZvciBqb3VybmFsICovCiAKQEAgLTM3NCwxMCArMzc0LDEwIEBACiAgKiovCiAKIC8qIERvY2Jvb2sgY2FuJ3QgeWV0IGNvcGUgd2l0aCB0aGUgYml0IGZpZWxkcywgYnV0IHdpbGwgbGVhdmUgdGhlIGRvY3VtZW50YXRpb24KLSAqIGluIHNvIGl0IGNhbiBiZSBmaXhlZCBsYXRlci4gCisgKiBpbiBzbyBpdCBjYW4gYmUgZml4ZWQgbGF0ZXIuCiAgKi8KIAotc3RydWN0IGhhbmRsZV9zIAorc3RydWN0IGhhbmRsZV9zCiB7CiAJLyogV2hpY2ggY29tcG91bmQgdHJhbnNhY3Rpb24gaXMgdGhpcyB1cGRhdGUgYSBwYXJ0IG9mPyAqLwogCXRyYW5zYWN0aW9uX3QJCSpoX3RyYW5zYWN0aW9uOwpAQCAtNDM1LDcgKzQzNSw3IEBACiAgKgogICovCiAKLXN0cnVjdCB0cmFuc2FjdGlvbl9zIAorc3RydWN0IHRyYW5zYWN0aW9uX3MKIHsKIAkvKiBQb2ludGVyIHRvIHRoZSBqb3VybmFsIGZvciB0aGlzIHRyYW5zYWN0aW9uLiBbbm8gbG9ja2luZ10gKi8KIAlqb3VybmFsX3QJCSp0X2pvdXJuYWw7CkBAIC00NTUsNyArNDU1LDcgQEAKIAkJVF9SVU5ET1dOLAogCQlUX0ZMVVNILAogCQlUX0NPTU1JVCwKLQkJVF9GSU5JU0hFRCAKKwkJVF9GSU5JU0hFRAogCX0JCQl0X3N0YXRlOwogCiAJLyoKQEAgLTU2OSw3ICs1NjksNyBAQAogICogICAgIGpvdXJuYWxfdC4KICAqIEBqX2ZsYWdzOiAgR2VuZXJhbCBqb3VybmFsaW5nIHN0YXRlIGZsYWdzCiAgKiBAal9lcnJubzogIElzIHRoZXJlIGFuIG91dHN0YW5kaW5nIHVuY2xlYXJlZCBlcnJvciBvbiB0aGUgam91cm5hbCAoZnJvbSBhCi0gKiAgICAgcHJpb3IgYWJvcnQpPyAKKyAqICAgICBwcmlvciBhYm9ydCk/CiAgKiBAal9zYl9idWZmZXI6IEZpcnN0IHBhcnQgb2Ygc3VwZXJibG9jayBidWZmZXIKICAqIEBqX3N1cGVyYmxvY2s6IFNlY29uZCBwYXJ0IG9mIHN1cGVyYmxvY2sgYnVmZmVyCiAgKiBAal9mb3JtYXRfdmVyc2lvbjogVmVyc2lvbiBvZiB0aGUgc3VwZXJibG9jayBmb3JtYXQKQEAgLTU4Myw3ICs1ODMsNyBAQAogICogQGpfd2FpdF90cmFuc2FjdGlvbl9sb2NrZWQ6IFdhaXQgcXVldWUgZm9yIHdhaXRpbmcgZm9yIGEgbG9ja2VkIHRyYW5zYWN0aW9uCiAgKiAgdG8gc3RhcnQgY29tbWl0dGluZywgb3IgZm9yIGEgYmFycmllciBsb2NrIHRvIGJlIHJlbGVhc2VkCiAgKiBAal93YWl0X2xvZ3NwYWNlOiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjaGVja3BvaW50aW5nIHRvIGNvbXBsZXRlCi0gKiBAal93YWl0X2RvbmVfY29tbWl0OiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjb21taXQgdG8gY29tcGxldGUgCisgKiBAal93YWl0X2RvbmVfY29tbWl0OiBXYWl0IHF1ZXVlIGZvciB3YWl0aW5nIGZvciBjb21taXQgdG8gY29tcGxldGUKICAqIEBqX3dhaXRfY2hlY2twb2ludDogIFdhaXQgcXVldWUgdG8gdHJpZ2dlciBjaGVja3BvaW50aW5nCiAgKiBAal93YWl0X2NvbW1pdDogV2FpdCBxdWV1ZSB0byB0cmlnZ2VyIGNvbW1pdAogICogQGpfd2FpdF91cGRhdGVzOiBXYWl0IHF1ZXVlIHRvIHdhaXQgZm9yIHVwZGF0ZXMgdG8gY29tcGxldGUKQEAgLTU5Miw3ICs1OTIsNyBAQAogICogQGpfdGFpbDogSm91cm5hbCB0YWlsIC0gaWRlbnRpZmllcyB0aGUgb2xkZXN0IHN0aWxsLXVzZWQgYmxvY2sgaW4gdGhlCiAgKiAgam91cm5hbC4KICAqIEBqX2ZyZWU6IEpvdXJuYWwgZnJlZSAtIGhvdyBtYW55IGZyZWUgYmxvY2tzIGFyZSB0aGVyZSBpbiB0aGUgam91cm5hbD8KLSAqIEBqX2ZpcnN0OiBUaGUgYmxvY2sgbnVtYmVyIG9mIHRoZSBmaXJzdCB1c2FibGUgYmxvY2sgCisgKiBAal9maXJzdDogVGhlIGJsb2NrIG51bWJlciBvZiB0aGUgZmlyc3QgdXNhYmxlIGJsb2NrCiAgKiBAal9sYXN0OiBUaGUgYmxvY2sgbnVtYmVyIG9uZSBiZXlvbmQgdGhlIGxhc3QgdXNhYmxlIGJsb2NrCiAgKiBAal9kZXY6IERldmljZSB3aGVyZSB3ZSBzdG9yZSB0aGUgam91cm5hbAogICogQGpfYmxvY2tzaXplOiBibG9ja3NpemUgZm9yIHRoZSBsb2NhdGlvbiB3aGVyZSB3ZSBzdG9yZSB0aGUgam91cm5hbC4KQEAgLTYwNCwxMiArNjA0LDEyIEBACiAgKiBAal9saXN0X2xvY2s6IFByb3RlY3RzIHRoZSBidWZmZXIgbGlzdHMgYW5kIGludGVybmFsIGJ1ZmZlciBzdGF0ZS4KICAqIEBqX2lub2RlOiBPcHRpb25hbCBpbm9kZSB3aGVyZSB3ZSBzdG9yZSB0aGUgam91cm5hbC4gIElmIHByZXNlbnQsIGFsbCBqb3VybmFsCiAgKiAgICAgYmxvY2sgbnVtYmVycyBhcmUgbWFwcGVkIGludG8gdGhpcyBpbm9kZSB2aWEgYm1hcCgpLgotICogQGpfdGFpbF9zZXF1ZW5jZTogIFNlcXVlbmNlIG51bWJlciBvZiB0aGUgb2xkZXN0IHRyYW5zYWN0aW9uIGluIHRoZSBsb2cgCisgKiBAal90YWlsX3NlcXVlbmNlOiAgU2VxdWVuY2UgbnVtYmVyIG9mIHRoZSBvbGRlc3QgdHJhbnNhY3Rpb24gaW4gdGhlIGxvZwogICogQGpfdHJhbnNhY3Rpb25fc2VxdWVuY2U6IFNlcXVlbmNlIG51bWJlciBvZiB0aGUgbmV4dCB0cmFuc2FjdGlvbiB0byBncmFudAogICogQGpfY29tbWl0X3NlcXVlbmNlOiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50bHkgY29tbWl0dGVkCiAgKiAgdHJhbnNhY3Rpb24KICAqIEBqX2NvbW1pdF9yZXF1ZXN0OiBTZXF1ZW5jZSBudW1iZXIgb2YgdGhlIG1vc3QgcmVjZW50IHRyYW5zYWN0aW9uIHdhbnRpbmcKLSAqICAgICBjb21taXQgCisgKiAgICAgY29tbWl0CiAgKiBAal91dWlkOiBVdWlkIG9mIGNsaWVudCBvYmplY3QuCiAgKiBAal90YXNrOiBQb2ludGVyIHRvIHRoZSBjdXJyZW50IGNvbW1pdCB0aHJlYWQgZm9yIHRoaXMgam91cm5hbAogICogQGpfbWF4X3RyYW5zYWN0aW9uX2J1ZmZlcnM6ICBNYXhpbXVtIG51bWJlciBvZiBtZXRhZGF0YSBidWZmZXJzIHRvIGFsbG93IGluIGEKQEAgLTY5OSw3ICs2OTksNyBAQAogCXdhaXRfcXVldWVfaGVhZF90CWpfd2FpdF91cGRhdGVzOwogCiAJLyogU2VtYXBob3JlIGZvciBsb2NraW5nIGFnYWluc3QgY29uY3VycmVudCBjaGVja3BvaW50cyAqLwotCXN0cnVjdCBtdXRleAkgCWpfY2hlY2twb2ludF9tdXRleDsKKwlzdHJ1Y3QgbXV0ZXgJCWpfY2hlY2twb2ludF9tdXRleDsKIAogCS8qCiAJICogSm91cm5hbCBoZWFkOiBpZGVudGlmaWVzIHRoZSBmaXJzdCB1bnVzZWQgYmxvY2sgaW4gdGhlIGpvdXJuYWwuCkBAIC03MzIsNyArNzMyLDcgQEAKIAkgKi8KIAlzdHJ1Y3QgYmxvY2tfZGV2aWNlCSpqX2RldjsKIAlpbnQJCQlqX2Jsb2Nrc2l6ZTsKLQl1bnNpZ25lZCBpbnQJCWpfYmxrX29mZnNldDsKKwl1bnNpZ25lZCBsb25nCQlqX2Jsa19vZmZzZXQ7CiAKIAkvKgogCSAqIERldmljZSB3aGljaCBob2xkcyB0aGUgY2xpZW50IGZzLiAgRm9yIGludGVybmFsIGpvdXJuYWwgdGhpcyB3aWxsIGJlCkBAIC04MjMsOCArODIzLDggQEAKIAl2b2lkICpqX3ByaXZhdGU7CiB9OwogCi0vKiAKLSAqIEpvdXJuYWwgZmxhZyBkZWZpbml0aW9ucyAKKy8qCisgKiBKb3VybmFsIGZsYWcgZGVmaW5pdGlvbnMKICAqLwogI2RlZmluZSBKRlNfVU5NT1VOVAkweDAwMQkvKiBKb3VybmFsIHRocmVhZCBpcyBiZWluZyBkZXN0cm95ZWQgKi8KICNkZWZpbmUgSkZTX0FCT1JUCTB4MDAyCS8qIEpvdXJuYWxpbmcgaGFzIGJlZW4gYWJvcnRlZCBmb3IgZXJyb3JzLiAqLwpAQCAtODMzLDcgKzgzMyw3IEBACiAjZGVmaW5lIEpGU19MT0FERUQJMHgwMTAJLyogVGhlIGpvdXJuYWwgc3VwZXJibG9jayBoYXMgYmVlbiBsb2FkZWQgKi8KICNkZWZpbmUgSkZTX0JBUlJJRVIJMHgwMjAJLyogVXNlIElERSBiYXJyaWVycyAqLwogCi0vKiAKKy8qCiAgKiBGdW5jdGlvbiBkZWNsYXJhdGlvbnMgZm9yIHRoZSBqb3VybmFsaW5nIHRyYW5zYWN0aW9uIGFuZCBidWZmZXIKICAqIG1hbmFnZW1lbnQKICAqLwpAQCAtODYyLDExICs4NjIsMTEgQEAKIHZvaWQgX19qb3VybmFsX2luc2VydF9jaGVja3BvaW50KHN0cnVjdCBqb3VybmFsX2hlYWQgKiwgdHJhbnNhY3Rpb25fdCAqKTsKIAogLyogQnVmZmVyIElPICovCi1leHRlcm4gaW50IAorZXh0ZXJuIGludAogam91cm5hbF93cml0ZV9tZXRhZGF0YV9idWZmZXIodHJhbnNhY3Rpb25fdAkgICp0cmFuc2FjdGlvbiwKIAkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgICpqaF9pbiwKIAkJCSAgICAgIHN0cnVjdCBqb3VybmFsX2hlYWQgKipqaF9vdXQsCi0JCQkgICAgICBpbnQJCSAgIGJsb2NrbnIpOworCQkJICAgICAgdW5zaWduZWQgbG9uZwkgICBibG9ja25yKTsKIAogLyogVHJhbnNhY3Rpb24gbG9ja2luZyAqLwogZXh0ZXJuIHZvaWQJCV9fd2FpdF9vbl9qb3VybmFsIChqb3VybmFsX3QgKik7CkBAIC04OTAsNyArODkwLDcgQEAKIC8qIFRoZSBqb3VybmFsaW5nIGNvZGUgdXNlciBpbnRlcmZhY2U6CiAgKgogICogQ3JlYXRlIGFuZCBkZXN0cm95IGhhbmRsZXMKLSAqIFJlZ2lzdGVyIGJ1ZmZlciBtb2RpZmljYXRpb25zIGFnYWluc3QgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uIAorICogUmVnaXN0ZXIgYnVmZmVyIG1vZGlmaWNhdGlvbnMgYWdhaW5zdCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbi4KICAqLwogCiBleHRlcm4gaGFuZGxlX3QgKmpvdXJuYWxfc3RhcnQoam91cm5hbF90ICosIGludCBuYmxvY2tzKTsKQEAgLTkxNywxMSArOTE3LDExIEBACiAJCQkJaW50IHN0YXJ0LCBpbnQgbGVuLCBpbnQgYnNpemUpOwogZXh0ZXJuIGpvdXJuYWxfdCAqIGpvdXJuYWxfaW5pdF9pbm9kZSAoc3RydWN0IGlub2RlICopOwogZXh0ZXJuIGludAkgICBqb3VybmFsX3VwZGF0ZV9mb3JtYXQgKGpvdXJuYWxfdCAqKTsKLWV4dGVybiBpbnQJICAgam91cm5hbF9jaGVja191c2VkX2ZlYXR1cmVzIAorZXh0ZXJuIGludAkgICBqb3VybmFsX2NoZWNrX3VzZWRfZmVhdHVyZXMKIAkJICAgKGpvdXJuYWxfdCAqLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBpbnQJICAgam91cm5hbF9jaGVja19hdmFpbGFibGVfZmVhdHVyZXMgCitleHRlcm4gaW50CSAgIGpvdXJuYWxfY2hlY2tfYXZhaWxhYmxlX2ZlYXR1cmVzCiAJCSAgIChqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Ci1leHRlcm4gaW50CSAgIGpvdXJuYWxfc2V0X2ZlYXR1cmVzIAorZXh0ZXJuIGludAkgICBqb3VybmFsX3NldF9mZWF0dXJlcwogCQkgICAoam91cm5hbF90ICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogZXh0ZXJuIGludAkgICBqb3VybmFsX2NyZWF0ZSAgICAgKGpvdXJuYWxfdCAqKTsKIGV4dGVybiBpbnQJICAgam91cm5hbF9sb2FkICAgICAgIChqb3VybmFsX3QgKmpvdXJuYWwpOwpAQCAtOTc3LDcgKzk3Nyw2IEBACiBleHRlcm4gaW50CWpvdXJuYWxfc2V0X3Jldm9rZShqb3VybmFsX3QgKiwgdW5zaWduZWQgbG9uZywgdGlkX3QpOwogZXh0ZXJuIGludAlqb3VybmFsX3Rlc3RfcmV2b2tlKGpvdXJuYWxfdCAqLCB1bnNpZ25lZCBsb25nLCB0aWRfdCk7CiBleHRlcm4gdm9pZAlqb3VybmFsX2NsZWFyX3Jldm9rZShqb3VybmFsX3QgKik7Ci1leHRlcm4gdm9pZAlqb3VybmFsX2JyZWxzZV9hcnJheShzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJbXSwgaW50IG4pOwogZXh0ZXJuIHZvaWQJam91cm5hbF9zd2l0Y2hfcmV2b2tlX3RhYmxlKGpvdXJuYWxfdCAqam91cm5hbCk7CiAKIC8qCkBAIC0xMDE1LDcgKzEwMTQsNyBAQAogICogYml0LCB3aGVuIHNldCwgaW5kaWNhdGVzIHRoYXQgd2UgaGF2ZSBoYWQgYSBmYXRhbCBlcnJvciBzb21ld2hlcmUsCiAgKiBlaXRoZXIgaW5zaWRlIHRoZSBqb3VybmFsaW5nIGxheWVyIG9yIGluZGljYXRlZCB0byB1cyBieSB0aGUgY2xpZW50CiAgKiAoZWcuIGV4dDMpLCBhbmQgdGhhdCB3ZSBhbmQgc2hvdWxkIG5vdCBjb21taXQgYW55IGZ1cnRoZXIKLSAqIHRyYW5zYWN0aW9ucy4gIAorICogdHJhbnNhY3Rpb25zLgogICovCiAKIHN0YXRpYyBpbmxpbmUgaW50IGlzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsX3QgKmpvdXJuYWwpCkBAIC0xMDgyLDcgKzEwODEsNyBAQAogI2RlZmluZSBCSl9SZXNlcnZlZAk3CS8qIEJ1ZmZlciBpcyByZXNlcnZlZCBmb3IgYWNjZXNzIGJ5IGpvdXJuYWwgKi8KICNkZWZpbmUgQkpfTG9ja2VkCTgJLyogTG9ja2VkIGZvciBJL08gZHVyaW5nIGNvbW1pdCAqLwogI2RlZmluZSBCSl9UeXBlcwk5Ci0gCisKIGV4dGVybiBpbnQgamJkX2Jsb2Nrc19wZXJfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogI2lmZGVmIF9fS0VSTkVMX18KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2VybmVsLmggYi9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCmluZGV4IDRmYTM3M2IuLjRkMDA5ODhkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5oCisrKyBiL2luY2x1ZGUvbGludXgva2VybmVsLmgKQEAgLTM1MCw0ICszNTAsMTEgQEAKIC8qIFRyYXAgcGFzdGVycyBvZiBfX0ZVTkNUSU9OX18gYXQgY29tcGlsZS10aW1lICovCiAjZGVmaW5lIF9fRlVOQ1RJT05fXyAoX19mdW5jX18pCiAKKy8qIFRoaXMgaGVscHMgdXMgdG8gYXZvaWQgI2lmZGVmIENPTkZJR19OVU1BICovCisjaWZkZWYgQ09ORklHX05VTUEKKyNkZWZpbmUgTlVNQV9CVUlMRCAxCisjZWxzZQorI2RlZmluZSBOVU1BX0JVSUxEIDAKKyNlbmRpZgorCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva21vZC5oIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKaW5kZXggMGRiMjJhMS4uMTBmNTA1YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9rbW9kLmgKKysrIGIvaW5jbHVkZS9saW51eC9rbW9kLmgKQEAgLTQ3LDQgKzQ3LDggQEAKIAogZXh0ZXJuIHZvaWQgdXNlcm1vZGVoZWxwZXJfaW5pdCh2b2lkKTsKIAorc3RydWN0IGZpbGU7CitleHRlcm4gaW50IGNhbGxfdXNlcm1vZGVoZWxwZXJfcGlwZShjaGFyICpwYXRoLCBjaGFyICphcmd2W10sIGNoYXIgKmVudnBbXSwKKwkJCQkgICAgc3RydWN0IGZpbGUgKipmaWxwKTsKKwogI2VuZGlmIC8qIF9fTElOVVhfS01PRF9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGF0ZW5jeS5oIGIvaW5jbHVkZS9saW51eC9sYXRlbmN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA4YjUyYgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbGludXgvbGF0ZW5jeS5oCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBsYXRlbmN5Lmg6IEV4cGxpY2l0IHN5c3RlbS13aWRlIGxhdGVuY3ktZXhwZWN0YXRpb24gaW5mcmFzdHJ1Y3R1cmUKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgorICoKKyAqLworCisjaWZuZGVmIF9JTkNMVURFX0dVQVJEX0xBVEVOQ1lfSF8KKyNkZWZpbmUgX0lOQ0xVREVfR1VBUkRfTEFURU5DWV9IXworCisjaW5jbHVkZSA8bGludXgvbm90aWZpZXIuaD4KKwordm9pZCBzZXRfYWNjZXB0YWJsZV9sYXRlbmN5KGNoYXIgKmlkZW50aWZpZXIsIGludCB1c2Vjcyk7Cit2b2lkIG1vZGlmeV9hY2NlcHRhYmxlX2xhdGVuY3koY2hhciAqaWRlbnRpZmllciwgaW50IHVzZWNzKTsKK3ZvaWQgcmVtb3ZlX2FjY2VwdGFibGVfbGF0ZW5jeShjaGFyICppZGVudGlmaWVyKTsKK3ZvaWQgc3luY2hyb25pemVfYWNjZXB0YWJsZV9sYXRlbmN5KHZvaWQpOworaW50IHN5c3RlbV9sYXRlbmN5X2NvbnN0cmFpbnQodm9pZCk7CisKK2ludCByZWdpc3Rlcl9sYXRlbmN5X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKTsKK2ludCB1bnJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICogbmIpOworCisjZGVmaW5lIElORklOSVRFX0xBVEVOQ1kgMTAwMDAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbGVkcy5oIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKaW5kZXggZGMyM2M3Yy4uODhhZmNlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9sZWRzLmgKKysrIGIvaW5jbHVkZS9saW51eC9sZWRzLmgKQEAgLTEyLDYgKzEyLDkgQEAKICNpZm5kZWYgX19MSU5VWF9MRURTX0hfSU5DTFVERUQKICNkZWZpbmUgX19MSU5VWF9MRURTX0hfSU5DTFVERUQKIAorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCiBzdHJ1Y3QgZGV2aWNlOwogc3RydWN0IGNsYXNzX2RldmljZTsKIC8qCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xpc3QuaCBiL2luY2x1ZGUvbGludXgvbGlzdC5oCmluZGV4IDY1YTViNWMuLmE5YzkwMjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbGlzdC5oCisrKyBiL2luY2x1ZGUvbGludXgvbGlzdC5oCkBAIC0zOSw2ICszOSw3IEBACiAgKiBUaGlzIGlzIG9ubHkgZm9yIGludGVybmFsIGxpc3QgbWFuaXB1bGF0aW9uIHdoZXJlIHdlIGtub3cKICAqIHRoZSBwcmV2L25leHQgZW50cmllcyBhbHJlYWR5IQogICovCisjaWZuZGVmIENPTkZJR19ERUJVR19MSVNUCiBzdGF0aWMgaW5saW5lIHZvaWQgX19saXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsCiAJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwcmV2LAogCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqbmV4dCkKQEAgLTQ4LDYgKzQ5LDExIEBACiAJbmV3LT5wcmV2ID0gcHJldjsKIAlwcmV2LT5uZXh0ID0gbmV3OwogfQorI2Vsc2UKK2V4dGVybiB2b2lkIF9fbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LAorCQkJICAgICAgc3RydWN0IGxpc3RfaGVhZCAqcHJldiwKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKm5leHQpOworI2VuZGlmCiAKIC8qKgogICogbGlzdF9hZGQgLSBhZGQgYSBuZXcgZW50cnkKQEAgLTU3LDEwICs2MywxNSBAQAogICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQgaGVhZC4KICAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KICAqLworI2lmbmRlZiBDT05GSUdfREVCVUdfTElTVAogc3RhdGljIGlubGluZSB2b2lkIGxpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKIHsKIAlfX2xpc3RfYWRkKG5ldywgaGVhZCwgaGVhZC0+bmV4dCk7CiB9CisjZWxzZQorZXh0ZXJuIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxpc3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKTsKKyNlbmRpZgorCiAKIC8qKgogICogbGlzdF9hZGRfdGFpbCAtIGFkZCBhIG5ldyBlbnRyeQpAQCAtMTUzLDEyICsxNjQsMTYgQEAKICAqIE5vdGU6IGxpc3RfZW1wdHkgb24gZW50cnkgZG9lcyBub3QgcmV0dXJuIHRydWUgYWZ0ZXIgdGhpcywgdGhlIGVudHJ5IGlzCiAgKiBpbiBhbiB1bmRlZmluZWQgc3RhdGUuCiAgKi8KKyNpZm5kZWYgQ09ORklHX0RFQlVHX0xJU1QKIHN0YXRpYyBpbmxpbmUgdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKIHsKIAlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CiAJZW50cnktPm5leHQgPSBMSVNUX1BPSVNPTjE7CiAJZW50cnktPnByZXYgPSBMSVNUX1BPSVNPTjI7CiB9CisjZWxzZQorZXh0ZXJuIHZvaWQgbGlzdF9kZWwoc3RydWN0IGxpc3RfaGVhZCAqZW50cnkpOworI2VuZGlmCiAKIC8qKgogICogbGlzdF9kZWxfcmN1IC0gZGVsZXRlcyBlbnRyeSBmcm9tIGxpc3Qgd2l0aG91dCByZS1pbml0aWFsaXphdGlvbgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCBjMDQwYThjLi4xMzE0Y2EwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtOCwxMyArOCwxMyBAQAogI2lmbmRlZiBfX0xJTlVYX0xPQ0tERVBfSAogI2RlZmluZSBfX0xJTlVYX0xPQ0tERVBfSAogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwogI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KICNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CiAKLSNpZmRlZiBDT05GSUdfTE9DS0RFUAotCiAvKgogICogTG9jay1jbGFzcyB1c2FnZS1zdGF0ZSBiaXRzOgogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2xvb3AuaCBiL2luY2x1ZGUvbGludXgvbG9vcC5oCmluZGV4IGU3NmM3NjEuLjE5MWE1OTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbG9vcC5oCisrKyBiL2luY2x1ZGUvbGludXgvbG9vcC5oCkBAIC01OSwxMCArNTksOSBAQAogCXN0cnVjdCBiaW8gCQkqbG9fYmlvOwogCXN0cnVjdCBiaW8JCSpsb19iaW90YWlsOwogCWludAkJCWxvX3N0YXRlOwotCXN0cnVjdCBjb21wbGV0aW9uCWxvX2RvbmU7Ci0Jc3RydWN0IGNvbXBsZXRpb24JbG9fYmhfZG9uZTsKIAlzdHJ1Y3QgbXV0ZXgJCWxvX2N0bF9tdXRleDsKLQlpbnQJCQlsb19wZW5kaW5nOworCXN0cnVjdCB0YXNrX3N0cnVjdAkqbG9fdGhyZWFkOworCXdhaXRfcXVldWVfaGVhZF90CWxvX2V2ZW50OwogCiAJcmVxdWVzdF9xdWV1ZV90CQkqbG9fcXVldWU7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5LmgKaW5kZXggOGYwNDE0My4uNjU0ZWY1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tZW1vcnkuaAorKysgYi9pbmNsdWRlL2xpbnV4L21lbW9yeS5oCkBAIC01Nyw3ICs1Nyw3IEBACiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CiBzdHJ1Y3QgbWVtX3NlY3Rpb247CiAKLSNpZm5kZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCisjaWZuZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UKIHN0YXRpYyBpbmxpbmUgaW50IG1lbW9yeV9kZXZfaW5pdCh2b2lkKQogewogCXJldHVybiAwOwpAQCAtNzgsNyArNzgsNyBAQAogI2RlZmluZSBDT05GSUdfTUVNX0JMT0NLX1NJWkUJKFBBR0VTX1BFUl9TRUNUSU9OPDxQQUdFX1NISUZUKQogCiAKLSNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFICovCiAKICNkZWZpbmUgaG90cGx1Z19tZW1vcnlfbm90aWZpZXIoZm4sIHByaSkgewkJCVwKIAlzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGZuIyNfbWVtX25iID0JCVwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaCBiL2luY2x1ZGUvbGludXgvbWVtb3J5X2hvdHBsdWcuaAppbmRleCAyMTg1MDFjLi43YjU0NjY2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21lbW9yeV9ob3RwbHVnLmgKKysrIGIvaW5jbHVkZS9saW51eC9tZW1vcnlfaG90cGx1Zy5oCkBAIC0xNzIsNSArMTcyLDcgQEAKIGV4dGVybiBpbnQgYWRkX21lbW9yeShpbnQgbmlkLCB1NjQgc3RhcnQsIHU2NCBzaXplKTsKIGV4dGVybiBpbnQgYXJjaF9hZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpOwogZXh0ZXJuIGludCByZW1vdmVfbWVtb3J5KHU2NCBzdGFydCwgdTY0IHNpemUpOworZXh0ZXJuIGludCBzcGFyc2VfYWRkX29uZV9zZWN0aW9uKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJCQkJaW50IG5yX3BhZ2VzKTsKIAogI2VuZGlmIC8qIF9fTElOVVhfTUVNT1JZX0hPVFBMVUdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbS5oIGIvaW5jbHVkZS9saW51eC9tbS5oCmluZGV4IDg1NmYwZWUuLmI3OTY2YWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW0uaAorKysgYi9pbmNsdWRlL2xpbnV4L21tLmgKQEAgLTE2LDYgKzE2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9tbV90eXBlcy5oPgogCiBzdHJ1Y3QgbWVtcG9saWN5Owogc3RydWN0IGFub25fdm1hOwpAQCAtMTk4LDYgKzE5OSw3IEBACiAJdm9pZCAoKm9wZW4pKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGFyZWEpOwogCXZvaWQgKCpjbG9zZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSk7CiAJc3RydWN0IHBhZ2UgKiAoKm5vcGFnZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgKnR5cGUpOworCXVuc2lnbmVkIGxvbmcgKCpub3Bmbikoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTsKIAlpbnQgKCpwb3B1bGF0ZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCB1bnNpZ25lZCBsb25nIGxlbiwgcGdwcm90X3QgcHJvdCwgdW5zaWduZWQgbG9uZyBwZ29mZiwgaW50IG5vbmJsb2NrKTsKIAogCS8qIG5vdGlmaWNhdGlvbiB0aGF0IGEgcHJldmlvdXNseSByZWFkLW9ubHkgcGFnZSBpcyBhYm91dCB0byBiZWNvbWUKQEAgLTIxNSw2MiArMjE3LDYgQEAKIHN0cnVjdCBtbXVfZ2F0aGVyOwogc3RydWN0IGlub2RlOwogCi0vKgotICogRWFjaCBwaHlzaWNhbCBwYWdlIGluIHRoZSBzeXN0ZW0gaGFzIGEgc3RydWN0IHBhZ2UgYXNzb2NpYXRlZCB3aXRoCi0gKiBpdCB0byBrZWVwIHRyYWNrIG9mIHdoYXRldmVyIGl0IGlzIHdlIGFyZSB1c2luZyB0aGUgcGFnZSBmb3IgYXQgdGhlCi0gKiBtb21lbnQuIE5vdGUgdGhhdCB3ZSBoYXZlIG5vIHdheSB0byB0cmFjayB3aGljaCB0YXNrcyBhcmUgdXNpbmcKLSAqIGEgcGFnZSwgdGhvdWdoIGlmIGl0IGlzIGEgcGFnZWNhY2hlIHBhZ2UsIHJtYXAgc3RydWN0dXJlcyBjYW4gdGVsbCB1cwotICogd2hvIGlzIG1hcHBpbmcgaXQuCi0gKi8KLXN0cnVjdCBwYWdlIHsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogQXRvbWljIGZsYWdzLCBzb21lIHBvc3NpYmx5Ci0JCQkJCSAqIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgKi8KLQlhdG9taWNfdCBfY291bnQ7CQkvKiBVc2FnZSBjb3VudCwgc2VlIGJlbG93LiAqLwotCWF0b21pY190IF9tYXBjb3VudDsJCS8qIENvdW50IG9mIHB0ZXMgbWFwcGVkIGluIG1tcywKLQkJCQkJICogdG8gc2hvdyB3aGVuIHBhZ2UgaXMgbWFwcGVkCi0JCQkJCSAqICYgbGltaXQgcmV2ZXJzZSBtYXAgc2VhcmNoZXMuCi0JCQkJCSAqLwotCXVuaW9uIHsKLQkgICAgc3RydWN0IHsKLQkJdW5zaWduZWQgbG9uZyBwcml2YXRlOwkJLyogTWFwcGluZy1wcml2YXRlIG9wYXF1ZSBkYXRhOgotCQkJCQkgCSAqIHVzdWFsbHkgdXNlZCBmb3IgYnVmZmVyX2hlYWRzCi0JCQkJCQkgKiBpZiBQYWdlUHJpdmF0ZSBzZXQ7IHVzZWQgZm9yCi0JCQkJCQkgKiBzd3BfZW50cnlfdCBpZiBQYWdlU3dhcENhY2hlOwotCQkJCQkJICogaW5kaWNhdGVzIG9yZGVyIGluIHRoZSBidWRkeQotCQkJCQkJICogc3lzdGVtIGlmIFBHX2J1ZGR5IGlzIHNldC4KLQkJCQkJCSAqLwotCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCi0JCQkJCQkgKiBpbm9kZSBhZGRyZXNzX3NwYWNlLCBvciBOVUxMLgotCQkJCQkJICogSWYgcGFnZSBtYXBwZWQgYXMgYW5vbnltb3VzCi0JCQkJCQkgKiBtZW1vcnksIGxvdyBiaXQgaXMgc2V0LCBhbmQKLQkJCQkJCSAqIGl0IHBvaW50cyB0byBhbm9uX3ZtYSBvYmplY3Q6Ci0JCQkJCQkgKiBzZWUgUEFHRV9NQVBQSU5HX0FOT04gYmVsb3cuCi0JCQkJCQkgKi8KLQkgICAgfTsKLSNpZiBOUl9DUFVTID49IENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUwotCSAgICBzcGlubG9ja190IHB0bDsKLSNlbmRpZgotCX07Ci0JcGdvZmZfdCBpbmRleDsJCQkvKiBPdXIgb2Zmc2V0IHdpdGhpbiBtYXBwaW5nLiAqLwotCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyogUGFnZW91dCBsaXN0LCBlZy4gYWN0aXZlX2xpc3QKLQkJCQkJICogcHJvdGVjdGVkIGJ5IHpvbmUtPmxydV9sb2NrICEKLQkJCQkJICovCi0JLyoKLQkgKiBPbiBtYWNoaW5lcyB3aGVyZSBhbGwgUkFNIGlzIG1hcHBlZCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLAotCSAqIHdlIGNhbiBzaW1wbHkgY2FsY3VsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIE9uIG1hY2hpbmVzIHdpdGgKLQkgKiBoaWdobWVtIHNvbWUgbWVtb3J5IGlzIG1hcHBlZCBpbnRvIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeQotCSAqIGR5bmFtaWNhbGx5LCBzbyB3ZSBuZWVkIGEgcGxhY2UgdG8gc3RvcmUgdGhhdCBhZGRyZXNzLgotCSAqIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGNvdWxkIGJlIDE2IGJpdHMgb24geDg2IC4uLiA7KQotCSAqCi0JICogQXJjaGl0ZWN0dXJlcyB3aXRoIHNsb3cgbXVsdGlwbGljYXRpb24gY2FuIGRlZmluZQotCSAqIFdBTlRfUEFHRV9WSVJUVUFMIGluIGFzbS9wYWdlLmgKLQkgKi8KLSNpZiBkZWZpbmVkKFdBTlRfUEFHRV9WSVJUVUFMKQotCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgotCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCi0jZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KLX07Ci0KICNkZWZpbmUgcGFnZV9wcml2YXRlKHBhZ2UpCQkoKHBhZ2UpLT5wcml2YXRlKQogI2RlZmluZSBzZXRfcGFnZV9wcml2YXRlKHBhZ2UsIHYpCSgocGFnZSktPnByaXZhdGUgPSAodikpCiAKQEAgLTUwMSw3ICs0NDcsMTEgQEAKIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHpvbmVfdG9fbmlkKHN0cnVjdCB6b25lICp6b25lKQogewotCXJldHVybiB6b25lLT56b25lX3BnZGF0LT5ub2RlX2lkOworI2lmZGVmIENPTkZJR19OVU1BCisJcmV0dXJuIHpvbmUtPm5vZGU7CisjZWxzZQorCXJldHVybiAwOworI2VuZGlmCiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlX3RvX25pZChzdHJ1Y3QgcGFnZSAqcGFnZSkKQEAgLTU0NiwxMSArNDk2LDYgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L3Ztc3RhdC5oPgogCi0jaWZuZGVmIENPTkZJR19ESVNDT05USUdNRU0KLS8qIFRoZSBhcnJheSBvZiBzdHJ1Y3QgcGFnZXMgLSBmb3IgZGlzY29udGlnbWVtIHVzZSBwZ2RhdC0+bG1lbV9tYXAgKi8KLWV4dGVybiBzdHJ1Y3QgcGFnZSAqbWVtX21hcDsKLSNlbmRpZgotCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKmxvd21lbV9wYWdlX2FkZHJlc3Moc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CiAJcmV0dXJuIF9fdmEocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCk7CkBAIC02NTAsNiArNTk1LDEyIEBACiAjZGVmaW5lIE5PUEFHRV9PT00JKChzdHJ1Y3QgcGFnZSAqKSAoLTEpKQogCiAvKgorICogRXJyb3IgcmV0dXJuIHZhbHVlcyBmb3IgdGhlICpfbm9wZm4gZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgTk9QRk5fU0lHQlVTCSgodW5zaWduZWQgbG9uZykgLTEpCisjZGVmaW5lIE5PUEZOX09PTQkoKHVuc2lnbmVkIGxvbmcpIC0yKQorCisvKgogICogRGlmZmVyZW50IGtpbmRzIG9mIGZhdWx0cywgYXMgcmV0dXJuZWQgYnkgaGFuZGxlX21tX2ZhdWx0KCkuCiAgKiBVc2VkIHRvIGRlY2lkZSB3aGV0aGVyIGEgcHJvY2VzcyBnZXRzIGRlbGl2ZXJlZCBTSUdCVVMgb3IKICAqIGp1c3QgZ2V0cyBtYWpvci9taW5vciBmYXVsdCBjb3VudGVycyBidW1wZWQgdXAuCkBAIC03OTIsNyArNzQzLDkgQEAKIAkJaW50IGxlbiwgaW50IHdyaXRlLCBpbnQgZm9yY2UsIHN0cnVjdCBwYWdlICoqcGFnZXMsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKnZtYXMpOwogdm9pZCBwcmludF9iYWRfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCBwdGVfdCwgdW5zaWduZWQgbG9uZyk7CiAKLWludCBfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnMoc3RydWN0IHBhZ2UgKnBhZ2UpOworZXh0ZXJuIGludCB0cnlfdG9fcmVsZWFzZV9wYWdlKHN0cnVjdCBwYWdlICogcGFnZSwgZ2ZwX3QgZ2ZwX21hc2spOworZXh0ZXJuIHZvaWQgZG9faW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KTsKKwogaW50IF9fc2V0X3BhZ2VfZGlydHlfbm9idWZmZXJzKHN0cnVjdCBwYWdlICpwYWdlKTsKIGludCByZWRpcnR5X3BhZ2VfZm9yX3dyaXRlcGFnZShzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYywKIAkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSk7CkBAIC05MzcsMTIgKzg5MCw2NCBAQAogZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQgbmlkLCBwZ19kYXRhX3QgKnBnZGF0LAogCXVuc2lnbmVkIGxvbmcgKiB6b25lc19zaXplLCB1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLCAKIAl1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSk7CisjaWZkZWYgQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisvKgorICogV2l0aCBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAgc2V0LCBhbiBhcmNoaXRlY3R1cmUgbWF5IGluaXRpYWxpc2UgaXRzCisgKiB6b25lcywgYWxsb2NhdGUgdGhlIGJhY2tpbmcgbWVtX21hcCBhbmQgYWNjb3VudCBmb3IgbWVtb3J5IGhvbGVzIGluIGEgbW9yZQorICogYXJjaGl0ZWN0dXJlIGluZGVwZW5kZW50IG1hbm5lci4gVGhpcyBpcyBhIHN1YnN0aXR1dGUgZm9yIGNyZWF0aW5nIHRoZQorICogem9uZV9zaXplc1tdIGFuZCB6aG9sZXNfc2l6ZVtdIGFycmF5cyBhbmQgcGFzc2luZyB0aGVtIHRvCisgKiBmcmVlX2FyZWFfaW5pdF9ub2RlKCkKKyAqCisgKiBBbiBhcmNoaXRlY3R1cmUgaXMgZXhwZWN0ZWQgdG8gcmVnaXN0ZXIgcmFuZ2Ugb2YgcGFnZSBmcmFtZXMgYmFja2VkIGJ5CisgKiBwaHlzaWNhbCBtZW1vcnkgd2l0aCBhZGRfYWN0aXZlX3JhbmdlKCkgYmVmb3JlIGNhbGxpbmcKKyAqIGZyZWVfYXJlYV9pbml0X25vZGVzKCkgcGFzc2luZyBpbiB0aGUgUEZOIGVhY2ggem9uZSBlbmRzIGF0LiBBdCBhIGJhc2ljCisgKiB1c2FnZSwgYW4gYXJjaGl0ZWN0dXJlIGlzIGV4cGVjdGVkIHRvIGRvIHNvbWV0aGluZyBsaWtlCisgKgorICogdW5zaWduZWQgbG9uZyBtYXhfem9uZV9wZm5zW01BWF9OUl9aT05FU10gPSB7bWF4X2RtYSwgbWF4X25vcm1hbF9wZm4sCisgKiAJCQkJCQkJIG1heF9oaWdobWVtX3Bmbn07CisgKiBmb3JfZWFjaF92YWxpZF9waHlzaWNhbF9wYWdlX3JhbmdlKCkKKyAqIAlhZGRfYWN0aXZlX3JhbmdlKG5vZGVfaWQsIHN0YXJ0X3BmbiwgZW5kX3BmbikKKyAqIGZyZWVfYXJlYV9pbml0X25vZGVzKG1heF96b25lX3BmbnMpOworICoKKyAqIElmIHRoZSBhcmNoaXRlY3R1cmUgZ3VhcmFudGVlcyB0aGF0IHRoZXJlIGFyZSBubyBob2xlcyBpbiB0aGUgcmFuZ2VzCisgKiByZWdpc3RlcmVkIHdpdGggYWRkX2FjdGl2ZV9yYW5nZSgpLCBmcmVlX2Jvb3RtZW1fYWN0aXZlX3JlZ2lvbnMoKQorICogd2lsbCBjYWxsIGZyZWVfYm9vdG1lbV9ub2RlKCkgZm9yIGVhY2ggcmVnaXN0ZXJlZCBwaHlzaWNhbCBwYWdlIHJhbmdlLgorICogU2ltaWxhcmx5IHNwYXJzZV9tZW1vcnlfcHJlc2VudF93aXRoX2FjdGl2ZV9yZWdpb25zKCkgY2FsbHMKKyAqIG1lbW9yeV9wcmVzZW50KCkgZm9yIGVhY2ggcmFuZ2Ugd2hlbiBTUEFSU0VNRU0gaXMgZW5hYmxlZC4KKyAqCisgKiBTZWUgbW0vcGFnZV9hbGxvYy5jIGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGVhY2ggZnVuY3Rpb24gZXhwb3NlZCBieQorICogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisgKi8KK2V4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0X25vZGVzKHVuc2lnbmVkIGxvbmcgKm1heF96b25lX3Bmbik7CitleHRlcm4gdm9pZCBhZGRfYWN0aXZlX3JhbmdlKHVuc2lnbmVkIGludCBuaWQsIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4pOworZXh0ZXJuIHZvaWQgc2hyaW5rX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIG9sZF9lbmRfcGZuLAorCQkJCQkJdW5zaWduZWQgbG9uZyBuZXdfZW5kX3Bmbik7CitleHRlcm4gdm9pZCBwdXNoX25vZGVfYm91bmRhcmllcyh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuKTsKK2V4dGVybiB2b2lkIHJlbW92ZV9hbGxfYWN0aXZlX3Jhbmdlcyh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFic2VudF9wYWdlc19pbl9yYW5nZSh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3Bmbik7CitleHRlcm4gdm9pZCBnZXRfcGZuX3JhbmdlX2Zvcl9uaWQodW5zaWduZWQgaW50IG5pZCwKKwkJCXVuc2lnbmVkIGxvbmcgKnN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyAqZW5kX3Bmbik7CitleHRlcm4gdW5zaWduZWQgbG9uZyBmaW5kX21pbl9wZm5fd2l0aF9hY3RpdmVfcmVnaW9ucyh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGZpbmRfbWF4X3Bmbl93aXRoX2FjdGl2ZV9yZWdpb25zKHZvaWQpOworZXh0ZXJuIHZvaWQgZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm4pOworZXh0ZXJuIHZvaWQgc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCk7CisjaWZuZGVmIENPTkZJR19IQVZFX0FSQ0hfRUFSTFlfUEZOX1RPX05JRAorZXh0ZXJuIGludCBlYXJseV9wZm5fdG9fbmlkKHVuc2lnbmVkIGxvbmcgcGZuKTsKKyNlbmRpZiAvKiBDT05GSUdfSEFWRV9BUkNIX0VBUkxZX1BGTl9UT19OSUQgKi8KKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAgKi8KK2V4dGVybiB2b2lkIHNldF9kbWFfcmVzZXJ2ZSh1bnNpZ25lZCBsb25nIG5ld19kbWFfcmVzZXJ2ZSk7CiBleHRlcm4gdm9pZCBtZW1tYXBfaW5pdF96b25lKHVuc2lnbmVkIGxvbmcsIGludCwgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CiBleHRlcm4gdm9pZCBzZXR1cF9wZXJfem9uZV9wYWdlc19taW4odm9pZCk7CiBleHRlcm4gdm9pZCBtZW1faW5pdCh2b2lkKTsKIGV4dGVybiB2b2lkIHNob3dfbWVtKHZvaWQpOwogZXh0ZXJuIHZvaWQgc2lfbWVtaW5mbyhzdHJ1Y3Qgc3lzaW5mbyAqIHZhbCk7CiBleHRlcm4gdm9pZCBzaV9tZW1pbmZvX25vZGUoc3RydWN0IHN5c2luZm8gKnZhbCwgaW50IG5pZCk7CitleHRlcm4gdm9pZCB6b25ldGFibGVfYWRkKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbmlkLCBlbnVtIHpvbmVfdHlwZSB6aWQsCisJCQkJCXVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUpOwogCiAjaWZkZWYgQ09ORklHX05VTUEKIGV4dGVybiB2b2lkIHNldHVwX3Blcl9jcHVfcGFnZXNldCh2b2lkKTsKQEAgLTExMzAsNyArMTEzNSw3IEBACiBleHRlcm4gaW50IHJhbmRvbWl6ZV92YV9zcGFjZTsKICNlbmRpZgogCi1jb25zdCBjaGFyICphcmNoX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK19fYXR0cmlidXRlX18oKHdlYWspKSBjb25zdCBjaGFyICphcmNoX3ZtYV9uYW1lKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfTElOVVhfTU1fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oIGIvaW5jbHVkZS9saW51eC9tbV90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzODUyZmQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgKQEAgLTAsMCArMSw2NyBAQAorI2lmbmRlZiBfTElOVVhfTU1fVFlQRVNfSAorI2RlZmluZSBfTElOVVhfTU1fVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisKK3N0cnVjdCBhZGRyZXNzX3NwYWNlOworCisvKgorICogRWFjaCBwaHlzaWNhbCBwYWdlIGluIHRoZSBzeXN0ZW0gaGFzIGEgc3RydWN0IHBhZ2UgYXNzb2NpYXRlZCB3aXRoCisgKiBpdCB0byBrZWVwIHRyYWNrIG9mIHdoYXRldmVyIGl0IGlzIHdlIGFyZSB1c2luZyB0aGUgcGFnZSBmb3IgYXQgdGhlCisgKiBtb21lbnQuIE5vdGUgdGhhdCB3ZSBoYXZlIG5vIHdheSB0byB0cmFjayB3aGljaCB0YXNrcyBhcmUgdXNpbmcKKyAqIGEgcGFnZSwgdGhvdWdoIGlmIGl0IGlzIGEgcGFnZWNhY2hlIHBhZ2UsIHJtYXAgc3RydWN0dXJlcyBjYW4gdGVsbCB1cworICogd2hvIGlzIG1hcHBpbmcgaXQuCisgKi8KK3N0cnVjdCBwYWdlIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwkJLyogQXRvbWljIGZsYWdzLCBzb21lIHBvc3NpYmx5CisJCQkJCSAqIHVwZGF0ZWQgYXN5bmNocm9ub3VzbHkgKi8KKwlhdG9taWNfdCBfY291bnQ7CQkvKiBVc2FnZSBjb3VudCwgc2VlIGJlbG93LiAqLworCWF0b21pY190IF9tYXBjb3VudDsJCS8qIENvdW50IG9mIHB0ZXMgbWFwcGVkIGluIG1tcywKKwkJCQkJICogdG8gc2hvdyB3aGVuIHBhZ2UgaXMgbWFwcGVkCisJCQkJCSAqICYgbGltaXQgcmV2ZXJzZSBtYXAgc2VhcmNoZXMuCisJCQkJCSAqLworCXVuaW9uIHsKKwkgICAgc3RydWN0IHsKKwkJdW5zaWduZWQgbG9uZyBwcml2YXRlOwkJLyogTWFwcGluZy1wcml2YXRlIG9wYXF1ZSBkYXRhOgorCQkJCQkgCSAqIHVzdWFsbHkgdXNlZCBmb3IgYnVmZmVyX2hlYWRzCisJCQkJCQkgKiBpZiBQYWdlUHJpdmF0ZSBzZXQ7IHVzZWQgZm9yCisJCQkJCQkgKiBzd3BfZW50cnlfdCBpZiBQYWdlU3dhcENhY2hlOworCQkJCQkJICogaW5kaWNhdGVzIG9yZGVyIGluIHRoZSBidWRkeQorCQkJCQkJICogc3lzdGVtIGlmIFBHX2J1ZGR5IGlzIHNldC4KKwkJCQkJCSAqLworCQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsJLyogSWYgbG93IGJpdCBjbGVhciwgcG9pbnRzIHRvCisJCQkJCQkgKiBpbm9kZSBhZGRyZXNzX3NwYWNlLCBvciBOVUxMLgorCQkJCQkJICogSWYgcGFnZSBtYXBwZWQgYXMgYW5vbnltb3VzCisJCQkJCQkgKiBtZW1vcnksIGxvdyBiaXQgaXMgc2V0LCBhbmQKKwkJCQkJCSAqIGl0IHBvaW50cyB0byBhbm9uX3ZtYSBvYmplY3Q6CisJCQkJCQkgKiBzZWUgUEFHRV9NQVBQSU5HX0FOT04gYmVsb3cuCisJCQkJCQkgKi8KKwkgICAgfTsKKyNpZiBOUl9DUFVTID49IENPTkZJR19TUExJVF9QVExPQ0tfQ1BVUworCSAgICBzcGlubG9ja190IHB0bDsKKyNlbmRpZgorCX07CisJcGdvZmZfdCBpbmRleDsJCQkvKiBPdXIgb2Zmc2V0IHdpdGhpbiBtYXBwaW5nLiAqLworCXN0cnVjdCBsaXN0X2hlYWQgbHJ1OwkJLyogUGFnZW91dCBsaXN0LCBlZy4gYWN0aXZlX2xpc3QKKwkJCQkJICogcHJvdGVjdGVkIGJ5IHpvbmUtPmxydV9sb2NrICEKKwkJCQkJICovCisJLyoKKwkgKiBPbiBtYWNoaW5lcyB3aGVyZSBhbGwgUkFNIGlzIG1hcHBlZCBpbnRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlLAorCSAqIHdlIGNhbiBzaW1wbHkgY2FsY3VsYXRlIHRoZSB2aXJ0dWFsIGFkZHJlc3MuIE9uIG1hY2hpbmVzIHdpdGgKKwkgKiBoaWdobWVtIHNvbWUgbWVtb3J5IGlzIG1hcHBlZCBpbnRvIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeQorCSAqIGR5bmFtaWNhbGx5LCBzbyB3ZSBuZWVkIGEgcGxhY2UgdG8gc3RvcmUgdGhhdCBhZGRyZXNzLgorCSAqIE5vdGUgdGhhdCB0aGlzIGZpZWxkIGNvdWxkIGJlIDE2IGJpdHMgb24geDg2IC4uLiA7KQorCSAqCisJICogQXJjaGl0ZWN0dXJlcyB3aXRoIHNsb3cgbXVsdGlwbGljYXRpb24gY2FuIGRlZmluZQorCSAqIFdBTlRfUEFHRV9WSVJUVUFMIGluIGFzbS9wYWdlLmgKKwkgKi8KKyNpZiBkZWZpbmVkKFdBTlRfUEFHRV9WSVJUVUFMKQorCXZvaWQgKnZpcnR1YWw7CQkJLyogS2VybmVsIHZpcnR1YWwgYWRkcmVzcyAoTlVMTCBpZgorCQkJCQkgICBub3Qga21hcHBlZCwgaWUuIGhpZ2htZW0pICovCisjZW5kaWYgLyogV0FOVF9QQUdFX1ZJUlRVQUwgKi8KK307CisKKyNlbmRpZiAvKiBfTElOVVhfTU1fVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oIGIvaW5jbHVkZS9saW51eC9tbWMvaG9zdC5oCmluZGV4IGJhMDk1YWUuLjU4NzI2NGEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW1jL2hvc3QuaAorKysgYi9pbmNsdWRlL2xpbnV4L21tYy9ob3N0LmgKQEAgLTg1LDYgKzg1LDggQEAKIAl1bnNpZ25lZCBsb25nCQljYXBzOwkJLyogSG9zdCBjYXBhYmlsaXRpZXMgKi8KIAogI2RlZmluZSBNTUNfQ0FQXzRfQklUX0RBVEEJKDEgPDwgMCkJLyogQ2FuIHRoZSBob3N0IGRvIDQgYml0IHRyYW5zZmVycyAqLworI2RlZmluZSBNTUNfQ0FQX01VTFRJV1JJVEUJKDEgPDwgMSkJLyogQ2FuIGFjY3VyYXRlbHkgcmVwb3J0IGJ5dGVzIHNlbnQgdG8gY2FyZCBvbiBlcnJvciAqLworI2RlZmluZSBNTUNfQ0FQX0JZVEVCTE9DSwkoMSA8PCAyKQkvKiBDYW4gZG8gbm9uLWxvZzIgYmxvY2sgc2l6ZXMgKi8KIAogCS8qIGhvc3Qgc3BlY2lmaWMgYmxvY2sgZGF0YSAqLwogCXVuc2lnbmVkIGludAkJbWF4X3NlZ19zaXplOwkvKiBzZWUgYmxrX3F1ZXVlX21heF9zZWdtZW50X3NpemUgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW1jL21tYy5oIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKaW5kZXggNjI3ZTJjMC4uYTM1OTRkZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbWMvbW1jLmgKQEAgLTY4LDcgKzY4LDYgQEAKIHN0cnVjdCBtbWNfZGF0YSB7CiAJdW5zaWduZWQgaW50CQl0aW1lb3V0X25zOwkvKiBkYXRhIHRpbWVvdXQgKGluIG5zLCBtYXggODBtcykgKi8KIAl1bnNpZ25lZCBpbnQJCXRpbWVvdXRfY2xrczsJLyogZGF0YSB0aW1lb3V0IChpbiBjbG9ja3MpICovCi0JdW5zaWduZWQgaW50CQlibGtzel9iaXRzOwkvKiBkYXRhIGJsb2NrIHNpemUgKi8KIAl1bnNpZ25lZCBpbnQJCWJsa3N6OwkJLyogZGF0YSBibG9jayBzaXplICovCiAJdW5zaWduZWQgaW50CQlibG9ja3M7CQkvKiBudW1iZXIgb2YgYmxvY2tzICovCiAJdW5zaWduZWQgaW50CQllcnJvcjsJCS8qIGRhdGEgZXJyb3IgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW16b25lLmggYi9pbmNsdWRlL2xpbnV4L21tem9uZS5oCmluZGV4IDM2OTNmMWEuLjU5ODU1YjggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW16b25lLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbXpvbmUuaApAQCAtNTgsNiArNTgsNyBAQAogCU5SX1dSSVRFQkFDSywKIAlOUl9VTlNUQUJMRV9ORlMsCS8qIE5GUyB1bnN0YWJsZSBwYWdlcyAqLwogCU5SX0JPVU5DRSwKKwlOUl9WTVNDQU5fV1JJVEUsCiAjaWZkZWYgQ09ORklHX05VTUEKIAlOVU1BX0hJVCwJCS8qIGFsbG9jYXRlZCBpbiBpbnRlbmRlZCBub2RlICovCiAJTlVNQV9NSVNTLAkJLyogYWxsb2NhdGVkIGluIG5vbiBpbnRlbmRlZCBub2RlICovCkBAIC0xNjcsNiArMTY4LDcgQEAKIAl1bnNpZ25lZCBsb25nCQlsb3dtZW1fcmVzZXJ2ZVtNQVhfTlJfWk9ORVNdOwogCiAjaWZkZWYgQ09ORklHX05VTUEKKwlpbnQgbm9kZTsKIAkvKgogCSAqIHpvbmUgcmVjbGFpbSBiZWNvbWVzIGFjdGl2ZSBpZiBtb3JlIHVubWFwcGVkIHBhZ2VzIGV4aXN0LgogCSAqLwpAQCAtMzA1LDYgKzMwNywxOCBAQAogCXN0cnVjdCB6b25lICp6b25lc1tNQVhfTlVNTk9ERVMgKiBNQVhfTlJfWk9ORVMgKyAxXTsgLy8gTlVMTCBkZWxpbWl0ZWQKIH07CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKK3N0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24geworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOworCXVuc2lnbmVkIGxvbmcgZW5kX3BmbjsKKwlpbnQgbmlkOworfTsKKyNlbmRpZiAvKiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAgKi8KKworI2lmbmRlZiBDT05GSUdfRElTQ09OVElHTUVNCisvKiBUaGUgYXJyYXkgb2Ygc3RydWN0IHBhZ2VzIC0gZm9yIGRpc2NvbnRpZ21lbSB1c2UgcGdkYXQtPmxtZW1fbWFwICovCitleHRlcm4gc3RydWN0IHBhZ2UgKm1lbV9tYXA7CisjZW5kaWYKIAogLyoKICAqIFRoZSBwZ19kYXRhX3Qgc3RydWN0dXJlIGlzIHVzZWQgaW4gbWFjaGluZXMgd2l0aCBDT05GSUdfRElTQ09OVElHTUVNCkBAIC01MTgsNyArNTMyLDggQEAKIAogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECisjaWYgIWRlZmluZWQoQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEKSAmJiBcCisJIWRlZmluZWQoQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQKQogI2RlZmluZSBlYXJseV9wZm5fdG9fbmlkKG5pZCkgICgwVUwpCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaCBiL2luY2x1ZGUvbGludXgvbW9kX2RldmljZXRhYmxlLmgKaW5kZXggZjdjYTBiMC4uZTBjMzkzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2RfZGV2aWNldGFibGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21vZF9kZXZpY2V0YWJsZS5oCkBAIC0zMDgsNCArMzA4LDE2IEBACiAJa2VybmVsX3Vsb25nX3QgZHJpdmVyX2luZm87CiB9OwogCisvKiBFSVNBICovCisKKyNkZWZpbmUgRUlTQV9TSUdfTEVOICAgOAorCisvKiBUaGUgRUlTQSBzaWduYXR1cmUsIGluIEFTQ0lJIGZvcm0sIG51bGwgdGVybWluYXRlZCAqLworc3RydWN0IGVpc2FfZGV2aWNlX2lkIHsKKwljaGFyICAgICAgICAgIHNpZ1tFSVNBX1NJR19MRU5dOworCWtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOworfTsKKworI2RlZmluZSBFSVNBX0RFVklDRV9NT0RBTElBU19GTVQgImVpc2E6cyVzIgorCiAjZW5kaWYgLyogTElOVVhfTU9EX0RFVklDRVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCmluZGV4IGQ0NDg2Y2MuLjJjNTk5MTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaApAQCAtMjMyLDE3ICsyMzIsMTcgQEAKIH07CiAKIC8qIFNpbWlsYXIgc3R1ZmYgZm9yIHNlY3Rpb24gYXR0cmlidXRlcy4gKi8KLSNkZWZpbmUgTU9EVUxFX1NFQ1RfTkFNRV9MRU4gMzIKIHN0cnVjdCBtb2R1bGVfc2VjdF9hdHRyCiB7CiAJc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgbWF0dHI7Ci0JY2hhciBuYW1lW01PRFVMRV9TRUNUX05BTUVfTEVOXTsKKwljaGFyICpuYW1lOwogCXVuc2lnbmVkIGxvbmcgYWRkcmVzczsKIH07CiAKIHN0cnVjdCBtb2R1bGVfc2VjdF9hdHRycwogewogCXN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgZ3JwOworCWludCBuc2VjdGlvbnM7CiAJc3RydWN0IG1vZHVsZV9zZWN0X2F0dHIgYXR0cnNbMF07CiB9OwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21wYWdlLmggYi9pbmNsdWRlL2xpbnV4L21wYWdlLmgKaW5kZXggM2NhODgwNC4uY2M1ZmI3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcGFnZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbXBhZ2UuaApAQCAtOSw2ICs5LDcgQEAKICAqIChBbmQgbm8sIGl0IGRvZXNuJ3QgZG8gdGhlICNpZmRlZiBfX01QQUdFX0ggdGhpbmcsIGFuZCBpdCBkb2Vzbid0IGRvCiAgKiBuZXN0ZWQgaW5jbHVkZXMuICBHZXQgaXQgcmlnaHQgaW4gdGhlIC5jIGZpbGUpLgogICovCisjaWZkZWYgQ09ORklHX0JMT0NLCiAKIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbDsKIHR5cGVkZWYgaW50ICh3cml0ZXBhZ2VfdCkoc3RydWN0IHBhZ2UgKnBhZ2UsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKQEAgLTIxLDggKzIyLDQgQEAKIGludCBtcGFnZV93cml0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIGdldF9ibG9ja190ICpnZXRfYmxvY2ssCiAJCXN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIAotc3RhdGljIGlubGluZSBpbnQKLWdlbmVyaWNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpCi17Ci0JcmV0dXJuIG1wYWdlX3dyaXRlcGFnZXMobWFwcGluZywgd2JjLCBOVUxMKTsKLX0KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tcm91dGUuaCBiL2luY2x1ZGUvbGludXgvbXJvdXRlLmgKaW5kZXggZTA1ZDU0YS4uN2RhMmNlZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tcm91dGUuaAorKysgYi9pbmNsdWRlL2xpbnV4L21yb3V0ZS5oCkBAIC0xNDIsNyArMTQyLDcgQEAKIAl1bnNpZ25lZCBsb25nCXJhdGVfbGltaXQ7CQkvKiBUcmFmZmljIHNoYXBpbmcgKE5JKSAJKi8KIAl1bnNpZ25lZCBjaGFyCXRocmVzaG9sZDsJCS8qIFRUTCB0aHJlc2hvbGQgCQkqLwogCXVuc2lnbmVkIHNob3J0CWZsYWdzOwkJCS8qIENvbnRyb2wgZmxhZ3MgCQkqLwotCV9fdTMyCQlsb2NhbCxyZW1vdGU7CQkvKiBBZGRyZXNzZXMocmVtb3RlIGZvciB0dW5uZWxzKSovCisJX19iZTMyCQlsb2NhbCxyZW1vdGU7CQkvKiBBZGRyZXNzZXMocmVtb3RlIGZvciB0dW5uZWxzKSovCiAJaW50CQlsaW5rOwkJCS8qIFBoeXNpY2FsIGludGVyZmFjZSBpbmRleAkqLwogfTsKIApAQCAtMTUxLDggKzE1MSw4IEBACiBzdHJ1Y3QgbWZjX2NhY2hlIAogewogCXN0cnVjdCBtZmNfY2FjaGUgKm5leHQ7CQkJLyogTmV4dCBlbnRyeSBvbiBjYWNoZSBsaW5lIAkqLwotCV9fdTMyIG1mY19tY2FzdGdycDsJCQkvKiBHcm91cCB0aGUgZW50cnkgYmVsb25ncyB0byAJKi8KLQlfX3UzMiBtZmNfb3JpZ2luOwkJCS8qIFNvdXJjZSBvZiBwYWNrZXQgCQkqLworCV9fYmUzMiBtZmNfbWNhc3RncnA7CQkJLyogR3JvdXAgdGhlIGVudHJ5IGJlbG9uZ3MgdG8gCSovCisJX19iZTMyIG1mY19vcmlnaW47CQkJLyogU291cmNlIG9mIHBhY2tldCAJCSovCiAJdmlmaV90IG1mY19wYXJlbnQ7CQkJLyogU291cmNlIGludGVyZmFjZQkJKi8KIAlpbnQgbWZjX2ZsYWdzOwkJCQkvKiBGbGFncyBvbiBsaW5lCQkqLwogCkBAIC0xNzksOSArMTc5LDkgQEAKICNkZWZpbmUgTUZDX0xJTkVTCQk2NAogCiAjaWZkZWYgX19CSUdfRU5ESUFOCi0jZGVmaW5lIE1GQ19IQVNIKGEsYikJKCgoKGEpPj4yNCleKChiKT4+MjYpKSYoTUZDX0xJTkVTLTEpKQorI2RlZmluZSBNRkNfSEFTSChhLGIpCSgoKCgoX19mb3JjZSB1MzIpKF9fYmUzMilhKT4+MjQpXigoKF9fZm9yY2UgdTMyKShfX2JlMzIpYik+PjI2KSkmKE1GQ19MSU5FUy0xKSkKICNlbHNlCi0jZGVmaW5lIE1GQ19IQVNIKGEsYikJKCgoYSleKChiKT4+MikpJihNRkNfTElORVMtMSkpCisjZGVmaW5lIE1GQ19IQVNIKGEsYikJKCgoKF9fZm9yY2UgdTMyKShfX2JlMzIpYSleKCgoX19mb3JjZSB1MzIpKF9fYmUzMiliKT4+MikpJihNRkNfTElORVMtMSkpCiAjZW5kaWYJCQogCiAjZW5kaWYKQEAgLTIxMyw4ICsyMTMsOCBAQAogewogCV9fdTgJdHlwZTsKIAlfX3U4CXJlc2VydmVkOwotCV9fdTE2CWNzdW07Ci0JX191MzIJZmxhZ3M7CisJX19iZTE2CWNzdW07CisJX19iZTMyCWZsYWdzOwogfTsKIAogZXh0ZXJuIGludCBwaW1fcmN2X3YxKHN0cnVjdCBza19idWZmICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oIGIvaW5jbHVkZS9saW51eC9tc2Rvc19mcy5oCmluZGV4IGJhZTYyZDYuLmNlNmM4NTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbXNkb3NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzLmgKQEAgLTIwNCw2ICsyMDQsNyBAQAogCQkgdW5pY29kZV94bGF0ZToxLCAvKiBjcmVhdGUgZXNjYXBlIHNlcXVlbmNlcyBmb3IgdW5oYW5kbGVkIFVuaWNvZGUgKi8KIAkJIG51bXRhaWw6MSwgICAgICAgLyogRG9lcyBmaXJzdCBhbGlhcyBoYXZlIGEgbnVtZXJpYyAnfjEnIHR5cGUgdGFpbD8gKi8KIAkJIGF0YXJpOjEsICAgICAgICAgLyogVXNlIEF0YXJpIEdFTURPUyB2YXJpYXRpb24gb2YgTVMtRE9TIGZzICovCisJCSBmbHVzaDoxLAkgIC8qIHdyaXRlIHRoaW5ncyBxdWlja2x5ICovCiAJCSBub2Nhc2U6MTsJICAvKiBEb2VzIHRoaXMgbmVlZCBjYXNlIGNvbnZlcnNpb24/IDA9bmVlZCBjYXNlIGNvbnZlcnNpb24qLwogfTsKIApAQCAtNDEyLDYgKzQxMyw4IEBACiBleHRlcm4gaW50IGZhdF9maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHZvaWQgKmRhdGEsIGludCBzaWxlbnQsCiAJCQlzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyAqZnNfZGlyX2lub2RlX29wcywgaW50IGlzdmZhdCk7CiAKK2V4dGVybiBpbnQgZmF0X2ZsdXNoX2lub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmkxLAorCQkgICAgICAgICAgICBzdHJ1Y3QgaW5vZGUgKmkyKTsKIC8qIGZhdC9taXNjLmMgKi8KIGV4dGVybiB2b2lkIGZhdF9mc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKIGV4dGVybiB2b2lkIGZhdF9jbHVzdGVyc19mbHVzaChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmFtZWkuaCBiL2luY2x1ZGUvbGludXgvbmFtZWkuaAppbmRleCA0NTUxMWE1Li5mNWYxOTYwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25hbWVpLmgKKysrIGIvaW5jbHVkZS9saW51eC9uYW1laS5oCkBAIC0xLDYgKzEsNyBAQAogI2lmbmRlZiBfTElOVVhfTkFNRUlfSAogI2RlZmluZSBfTElOVVhfTkFNRUlfSAogCisjaW5jbHVkZSA8bGludXgvZGNhY2hlLmg+CiAjaW5jbHVkZSA8bGludXgvbGlua2FnZS5oPgogCiBzdHJ1Y3QgdmZzbW91bnQ7CkBAIC01NCw2ICs1NSw3IEBACiAjZGVmaW5lIExPT0tVUF9PUEVOCQkoMHgwMTAwKQogI2RlZmluZSBMT09LVVBfQ1JFQVRFCQkoMHgwMjAwKQogI2RlZmluZSBMT09LVVBfQUNDRVNTCQkoMHgwNDAwKQorI2RlZmluZSBMT09LVVBfQ0hESVIJCSgweDA4MDApCiAKIGV4dGVybiBpbnQgRkFTVENBTEwoX191c2VyX3dhbGsoY29uc3QgY2hhciBfX3VzZXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1laWRhdGEgKikpOwogZXh0ZXJuIGludCBGQVNUQ0FMTChfX3VzZXJfd2Fsa19mZChpbnQgZGZkLCBjb25zdCBjaGFyIF9fdXNlciAqLCB1bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0YSAqKSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oIGIvaW5jbHVkZS9saW51eC9uY3BfZnMuaAppbmRleCAwMmUzNTJiLi4wZWE3Zjg5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25jcF9mcy5oCisrKyBiL2luY2x1ZGUvbGludXgvbmNwX2ZzLmgKQEAgLTIxMiw2ICsyMTIsNyBAQAogCiAvKiBsaW51eC9mcy9uY3Bmcy9pb2N0bC5jICovCiBpbnQgbmNwX2lvY3RsKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGxvbmcpOworbG9uZyBuY3BfY29tcGF0X2lvY3RsKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAKIC8qIGxpbnV4L2ZzL25jcGZzL3NvY2suYyAqLwogaW50IG5jcF9yZXF1ZXN0MihzdHJ1Y3QgbmNwX3NlcnZlciAqc2VydmVyLCBpbnQgZnVuY3Rpb24sCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA0MzI4OTEyLi45MjY0MTM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTE4Nyw3ICsxODcsNyBAQAogewogCXN0cnVjdCBoaF9jYWNoZSAqaGhfbmV4dDsJLyogTmV4dCBlbnRyeQkJCSAgICAgKi8KIAlhdG9taWNfdAloaF9yZWZjbnQ7CS8qIG51bWJlciBvZiB1c2VycyAgICAgICAgICAgICAgICAgICAqLwotCXVuc2lnbmVkIHNob3J0ICBoaF90eXBlOwkvKiBwcm90b2NvbCBpZGVudGlmaWVyLCBmLmUgRVRIX1BfSVAKKwlfX2JlMTYJCWhoX3R5cGU7CS8qIHByb3RvY29sIGlkZW50aWZpZXIsIGYuZSBFVEhfUF9JUAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBOT1RFOiAgRm9yIFZMQU5zLCB0aGlzIHdpbGwgYmUgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogIGVuY2FwdXNsYXRlZCB0eXBlLiAtLUJMRwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtMzM0LDcgKzMzNCw2IEBACiAKIAogCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKiAoKmdldF9zdGF0cykoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0Jc3RydWN0IGl3X3N0YXRpc3RpY3MqCSgqZ2V0X3dpcmVsZXNzX3N0YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIAogCS8qIExpc3Qgb2YgZnVuY3Rpb25zIHRvIGhhbmRsZSBXaXJlbGVzcyBFeHRlbnNpb25zIChpbnN0ZWFkIG9mIGlvY3RsKS4KIAkgKiBTZWUgPG5ldC9pd19oYW5kbGVyLmg+IGZvciBkZXRhaWxzLiBKZWFuIElJICovCkBAIC0xMDE2LDcgKzEwMTUsOCBAQAogfQogCiAvKiBPbiBib25kaW5nIHNsYXZlcyBvdGhlciB0aGFuIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNsYXZlLCBzdXBwcmVzcwotICogZHVwbGljYXRlcyBleGNlcHQgZm9yIDgwMi4zYWQgRVRIX1BfU0xPVyBhbmQgYWxiIG5vbi1tY2FzdC9iY2FzdC4KKyAqIGR1cGxpY2F0ZXMgZXhjZXB0IGZvciA4MDIuM2FkIEVUSF9QX1NMT1csIGFsYiBub24tbWNhc3QvYmNhc3QsIGFuZAorICogQVJQIG9uIGFjdGl2ZS1iYWNrdXAgc2xhdmVzIHdpdGggYXJwX3ZhbGlkYXRlIGVuYWJsZWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50IHNrYl9ib25kX3Nob3VsZF9kcm9wKHN0cnVjdCBza19idWZmICpza2IpCiB7CkBAIC0xMDI1LDYgKzEwMjUsMTAgQEAKIAogCWlmIChtYXN0ZXIgJiYKIAkgICAgKGRldi0+cHJpdl9mbGFncyAmIElGRl9TTEFWRV9JTkFDVElWRSkpIHsKKwkJaWYgKChkZXYtPnByaXZfZmxhZ3MgJiBJRkZfU0xBVkVfTkVFREFSUCkgJiYKKwkJICAgIHNrYi0+cHJvdG9jb2wgPT0gX19jb25zdGFudF9odG9ucyhFVEhfUF9BUlApKQorCQkJcmV0dXJuIDA7CisKIAkJaWYgKG1hc3Rlci0+cHJpdl9mbGFncyAmIElGRl9NQVNURVJfQUxCKSB7CiAJCQlpZiAoc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfQlJPQURDQVNUICYmCiAJCQkgICAgc2tiLT5wa3RfdHlwZSAhPSBQQUNLRVRfTVVMVElDQVNUKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKaW5kZXggMTQ5ZTg3Yy4uNDRlMzliNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9hcnAvYXJwX3RhYmxlcy5oCkBAIC00NiwxMSArNDYsMTEgQEAKIAlzdHJ1Y3QgYXJwdF9kZXZhZGRyX2luZm8gdGd0X2RldmFkZHI7CiAKIAkvKiBBUlAgb3BlcmF0aW9uIGNvZGUuICovCi0JdV9pbnQxNl90IGFycG9wLCBhcnBvcF9tYXNrOworCV9fYmUxNiBhcnBvcCwgYXJwb3BfbWFzazsKIAogCS8qIEFSUCBoYXJkd2FyZSBhZGRyZXNzIGFuZCBwcm90b2NvbCBhZGRyZXNzIGZvcm1hdC4gKi8KLQl1X2ludDE2X3QgYXJocmQsIGFyaHJkX21hc2s7Ci0JdV9pbnQxNl90IGFycHJvLCBhcnByb19tYXNrOworCV9fYmUxNiBhcmhyZCwgYXJocmRfbWFzazsKKwlfX2JlMTYgYXJwcm8sIGFycHJvX21hc2s7CiAKIAkvKiBUaGUgcHJvdG9jb2wgYWRkcmVzcyBsZW5ndGggaXMgb25seSBhY2NlcHRlZCBpZiBpdCBpcyA0CiAJICogc28gdGhlcmUgaXMgbm8gdXNlIGluIG9mZmVyaW5nIGEgd2F5IHRvIGRvIGZpbHRlcmluZyBvbiBpdC4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oCmluZGV4IDUxZGJlYzEuLjY0ZTg2ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaApAQCAtMTU3LDcgKzE1Nyw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAjaWZkZWYgQ09ORklHX0lQX05GX05BVF9ORUVERUQKLQl1X2ludDMyX3Qgc2F2ZWRfaXA7CisJX19iZTMyIHNhdmVkX2lwOwogCS8qIFRoaXMgaXMgdGhlIG9yaWdpbmFsIHBlci1wcm90byBwYXJ0LCB1c2VkIHRvIG1hcCB0aGUKIAkgKiBleHBlY3RlZCBjb25uZWN0aW9uIHRoZSB3YXkgdGhlIHJlY2lwaWVudCBleHBlY3RzLiAqLwogCXVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byBzYXZlZF9wcm90bzsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX2gzMjMuaAppbmRleCAzY2JmZjczLi45NDNjYzZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja19oMzIzLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfaDMyMy5oCkBAIC0zMCw3ICszMCw3IEBACiBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdDsKIAogZXh0ZXJuIGludCBnZXRfaDIyNV9hZGRyKHVuc2lnbmVkIGNoYXIgKmRhdGEsIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAotCQkJIHVfaW50MzJfdCAqIGlwLCB1X2ludDE2X3QgKiBwb3J0KTsKKwkJCSBfX2JlMzIgKiBpcCwgdV9pbnQxNl90ICogcG9ydCk7CiBleHRlcm4gdm9pZCBpcF9jb25udHJhY2tfaDI0NV9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqbmV3LAogCQkJCSAgICAgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKnRoaXMpOwogZXh0ZXJuIHZvaWQgaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0KHN0cnVjdCBpcF9jb25udHJhY2sgKm5ldywKQEAgLTM4LDExICszOCwxMSBAQAogZXh0ZXJuIGludCAoKnNldF9oMjQ1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCQkJICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCiAJCQkJICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAotCQkJCSAgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCk7CisJCQkJICBfX2JlMzIgaXAsIHVfaW50MTZfdCBwb3J0KTsKIGV4dGVybiBpbnQgKCpzZXRfaDIyNV9hZGRyX2hvb2spIChzdHJ1Y3Qgc2tfYnVmZiAqKiBwc2tiLAogCQkJCSAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAogCQkJCSAgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCQkJICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KTsKKwkJCQkgIF9fYmUzMiBpcCwgdV9pbnQxNl90IHBvcnQpOwogZXh0ZXJuIGludCAoKnNldF9zaWdfYWRkcl9ob29rKSAoc3RydWN0IHNrX2J1ZmYgKiogcHNrYiwKIAkJCQkgc3RydWN0IGlwX2Nvbm50cmFjayAqIGN0LAogCQkJCSBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCmluZGV4IDJmZGFiZGIuLmMyMjhiZGUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2tfdHVwbGUuaApAQCAtMjMsMTMgKzIzLDEzIEBACiAJCV9fYmUxNiBwb3J0OwogCX0gdGNwOwogCXN0cnVjdCB7Ci0JCXVfaW50MTZfdCBwb3J0OworCQlfX2JlMTYgcG9ydDsKIAl9IHVkcDsKIAlzdHJ1Y3QgewotCQl1X2ludDE2X3QgaWQ7CisJCV9fYmUxNiBpZDsKIAl9IGljbXA7CiAJc3RydWN0IHsKLQkJdV9pbnQxNl90IHBvcnQ7CisJCV9fYmUxNiBwb3J0OwogCX0gc2N0cDsKIAlzdHJ1Y3QgewogCQlfX2JlMTYga2V5OwkvKiBrZXkgaXMgMzJiaXQsIHBwdHAgb25seSB1c2VzIDE2ICovCkBAIC0zOSw3ICszOSw3IEBACiAvKiBUaGUgbWFuaXB1bGFibGUgcGFydCBvZiB0aGUgdHVwbGUuICovCiBzdHJ1Y3QgaXBfY29ubnRyYWNrX21hbmlwCiB7Ci0JdV9pbnQzMl90IGlwOworCV9fYmUzMiBpcDsKIAl1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gdTsKIH07CiAKQEAgLTUwLDIyICs1MCwyMiBAQAogCiAJLyogVGhlc2UgYXJlIHRoZSBwYXJ0cyBvZiB0aGUgdHVwbGUgd2hpY2ggYXJlIGZpeGVkLiAqLwogCXN0cnVjdCB7Ci0JCXVfaW50MzJfdCBpcDsKKwkJX19iZTMyIGlwOwogCQl1bmlvbiB7CiAJCQkvKiBBZGQgb3RoZXIgcHJvdG9jb2xzIGhlcmUuICovCiAJCQl1X2ludDE2X3QgYWxsOwogCiAJCQlzdHJ1Y3QgewotCQkJCXVfaW50MTZfdCBwb3J0OworCQkJCV9fYmUxNiBwb3J0OwogCQkJfSB0Y3A7CiAJCQlzdHJ1Y3QgewotCQkJCXVfaW50MTZfdCBwb3J0OworCQkJCV9fYmUxNiBwb3J0OwogCQkJfSB1ZHA7CiAJCQlzdHJ1Y3QgewogCQkJCXVfaW50OF90IHR5cGUsIGNvZGU7CiAJCQl9IGljbXA7CiAJCQlzdHJ1Y3QgewotCQkJCXVfaW50MTZfdCBwb3J0OworCQkJCV9fYmUxNiBwb3J0OwogCQkJfSBzY3RwOwogCQkJc3RydWN0IHsKIAkJCQlfX2JlMTYga2V5OwkvKiBrZXkgaXMgMzJiaXQsIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaCBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0LmgKaW5kZXggOThmODQwNy4uYmRmNTUzNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCkBAIC0zMyw3ICszMyw3IEBACiAJdW5zaWduZWQgaW50IGZsYWdzOwogCiAJLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyLiAqLwotCXVfaW50MzJfdCBtaW5faXAsIG1heF9pcDsKKwlfX2JlMzIgbWluX2lwLCBtYXhfaXA7CiAKIAkvKiBJbmNsdXNpdmU6IG5ldHdvcmsgb3JkZXIgKi8KIAl1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gbWluLCBtYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmggYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmgKaW5kZXggYWEwOGQ2OC4uYTAzNTA3ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfcXVldWUuaApAQCAtMjYsNyArMjYsNyBAQAogCXVuc2lnbmVkIGludCBob29rOwkJLyogTmV0ZmlsdGVyIGhvb2sgd2Ugcm9kZSBpbiBvbiAqLwogCWNoYXIgaW5kZXZfbmFtZVtJRk5BTVNJWl07CS8qIE5hbWUgb2YgaW5jb21pbmcgaW50ZXJmYWNlICovCiAJY2hhciBvdXRkZXZfbmFtZVtJRk5BTVNJWl07CS8qIE5hbWUgb2Ygb3V0Z29pbmcgaW50ZXJmYWNlICovCi0JdW5zaWduZWQgc2hvcnQgaHdfcHJvdG9jb2w7CS8qIEhhcmR3YXJlIHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLworCV9fYmUxNiBod19wcm90b2NvbDsJCS8qIEhhcmR3YXJlIHByb3RvY29sIChuZXR3b3JrIG9yZGVyKSAqLwogCXVuc2lnbmVkIHNob3J0IGh3X3R5cGU7CQkvKiBIYXJkd2FyZSB0eXBlICovCiAJdW5zaWduZWQgY2hhciBod19hZGRybGVuOwkvKiBIYXJkd2FyZSBhZGRyZXNzIGxlbmd0aCAqLwogCXVuc2lnbmVkIGNoYXIgaHdfYWRkcls4XTsJLyogSGFyZHdhcmUgYWRkcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oIGIvaW5jbHVkZS9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaXByYW5nZS5oCmluZGV4IDNlY2IzYmQuLjM0YWIwZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKQEAgLTgsNyArOCw3IEBACiAKIHN0cnVjdCBpcHRfaXByYW5nZSB7CiAJLyogSW5jbHVzaXZlOiBuZXR3b3JrIG9yZGVyLiAqLwotCXVfaW50MzJfdCBtaW5faXAsIG1heF9pcDsKKwlfX2JlMzIgbWluX2lwLCBtYXhfaXA7CiB9OwogCiBzdHJ1Y3QgaXB0X2lwcmFuZ2VfaW5mbwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvbmZzX2ZzLmgKaW5kZXggMzZmNWJjZi4uNzZmZjU0OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L25mc19mcy5oCkBAIC0zMTUsMTAgKzMxNSw2IEBACiBleHRlcm4gc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmdldF9uZnNfb3Blbl9jb250ZXh0KHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjdHgpOwogZXh0ZXJuIHZvaWQgcHV0X25mc19vcGVuX2NvbnRleHQoc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKmN0eCk7CiBleHRlcm4gc3RydWN0IG5mc19vcGVuX2NvbnRleHQgKm5mc19maW5kX29wZW5fY29udGV4dChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIGludCBtb2RlKTsKLWV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm5mc19kb19zdWJtb3VudChjb25zdCBzdHJ1Y3QgdmZzbW91bnQgKm1udF9wYXJlbnQsCi0JCQkJCWNvbnN0IHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJCQkJc3RydWN0IG5mc19maCAqZmgsCi0JCQkJCXN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyKTsKIAogLyogbGludXgvbmV0L2lwdjQvaXBjb25maWcuYzogdHJpbXMgaXAgYWRkciBvZmYgZnJvbnQgb2YgbmFtZSwgdG9vLiAqLwogZXh0ZXJuIHUzMiByb290X25mc19wYXJzZV9hZGRyKGNoYXIgKm5hbWUpOyAvKl9faW5pdCovCkBAIC0zNzEsMTAgKzM2NywxMiBAQAogICovCiBleHRlcm4gc3NpemVfdCBuZnNfZGlyZWN0X0lPKGludCwgc3RydWN0IGtpb2NiICosIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBsb2ZmX3QsCiAJCQl1bnNpZ25lZCBsb25nKTsKLWV4dGVybiBzc2l6ZV90IG5mc19maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCXNpemVfdCBjb3VudCwgbG9mZl90IHBvcyk7Ci1leHRlcm4gc3NpemVfdCBuZnNfZmlsZV9kaXJlY3Rfd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKTsKK2V4dGVybiBzc2l6ZV90IG5mc19maWxlX2RpcmVjdF9yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJCWNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsCisJCQlsb2ZmX3QgcG9zKTsKK2V4dGVybiBzc2l6ZV90IG5mc19maWxlX2RpcmVjdF93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsCisJCQljb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgdW5zaWduZWQgbG9uZyBucl9zZWdzLAorCQkJbG9mZl90IHBvcyk7CiAKIC8qCiAgKiBsaW51eC9mcy9uZnMvZGlyLmMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmZzZC9uZnNmaC5oIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKaW5kZXggZjllZGNkMi4uMzFhM2NiNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKKysrIGIvaW5jbHVkZS9saW51eC9uZnNkL25mc2ZoLmgKQEAgLTI2OSwxNCArMjY5LDggQEAKIAlmaHAtPmZoX3Bvc3RfdWlkCT0gaW5vZGUtPmlfdWlkOwogCWZocC0+ZmhfcG9zdF9naWQJPSBpbm9kZS0+aV9naWQ7CiAJZmhwLT5maF9wb3N0X3NpemUgICAgICAgPSBpbm9kZS0+aV9zaXplOwotCWlmIChpbm9kZS0+aV9ibGtzaXplKSB7Ci0JCWZocC0+ZmhfcG9zdF9ibGtzaXplICAgID0gaW5vZGUtPmlfYmxrc2l6ZTsKLQkJZmhwLT5maF9wb3N0X2Jsb2NrcyAgICAgPSBpbm9kZS0+aV9ibG9ja3M7Ci0JfSBlbHNlIHsKLQkJZmhwLT5maF9wb3N0X2Jsa3NpemUgICAgPSBCTE9DS19TSVpFOwotCQkvKiBob3cgbXVjaCBkbyB3ZSBjYXJlIGZvciBhY2N1cmFjeSB3aXRoIE1pbml4RlM/ICovCi0JCWZocC0+ZmhfcG9zdF9ibG9ja3MgICAgID0gKGlub2RlLT5pX3NpemUrNTExKSA+PiA5OwotCX0KKwlmaHAtPmZoX3Bvc3RfYmxrc2l6ZSAgICA9IEJMT0NLX1NJWkU7CisJZmhwLT5maF9wb3N0X2Jsb2NrcyAgICAgPSBpbm9kZS0+aV9ibG9ja3M7CiAJZmhwLT5maF9wb3N0X3JkZXZbMF0gICAgPSBodG9ubCgodTMyKWltYWpvcihpbm9kZSkpOwogCWZocC0+ZmhfcG9zdF9yZGV2WzFdICAgID0gaHRvbmwoKHUzMilpbWlub3IoaW5vZGUpKTsKIAlmaHAtPmZoX3Bvc3RfYXRpbWUgICAgICA9IGlub2RlLT5pX2F0aW1lOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ubWkuaCBiL2luY2x1ZGUvbGludXgvbm1pLmgKaW5kZXggYzhmNGQyZi4uZTE2OTA0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9ubWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L25taS5oCkBAIC00LDYgKzQsNyBAQAogI2lmbmRlZiBMSU5VWF9OTUlfSAogI2RlZmluZSBMSU5VWF9OTUlfSAogCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxhc20vaXJxLmg+CiAKIC8qKgpAQCAtMTYsNyArMTcsNyBAQAogI2lmZGVmIEFSQ0hfSEFTX05NSV9XQVRDSERPRwogZXh0ZXJuIHZvaWQgdG91Y2hfbm1pX3dhdGNoZG9nKHZvaWQpOwogI2Vsc2UKLSMgZGVmaW5lIHRvdWNoX25taV93YXRjaGRvZygpIGRvIHsgfSB3aGlsZSgwKQorIyBkZWZpbmUgdG91Y2hfbm1pX3dhdGNoZG9nKCkgdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpCiAjZW5kaWYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDlkNzkyMWQuLjQ4MzBhM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC0xMjgsMTIgKzEyOCwxMSBAQAogCiAjZGVmaW5lIFBhZ2VVcHRvZGF0ZShwYWdlKQl0ZXN0X2JpdChQR191cHRvZGF0ZSwgJihwYWdlKS0+ZmxhZ3MpCiAjaWZkZWYgQ09ORklHX1MzOTAKLSNkZWZpbmUgU2V0UGFnZVVwdG9kYXRlKF9wYWdlKSBcCi0JZG8gewkJCQkJCQkJICAgICAgXAotCQlzdHJ1Y3QgcGFnZSAqX19wYWdlID0gKF9wYWdlKTsJCQkJICAgICAgXAotCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoUEdfdXB0b2RhdGUsICZfX3BhZ2UtPmZsYWdzKSkJICAgICAgXAotCQkJcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShfcGFnZSk7CQkgICAgICBcCi0JfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBTZXRQYWdlVXB0b2RhdGUoc3RydWN0IHBhZ2UgKnBhZ2UpCit7CisJaWYgKCF0ZXN0X2FuZF9zZXRfYml0KFBHX3VwdG9kYXRlLCAmcGFnZS0+ZmxhZ3MpKQorCQlwYWdlX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHBhZ2UpOworfQogI2Vsc2UKICNkZWZpbmUgU2V0UGFnZVVwdG9kYXRlKHBhZ2UpCXNldF9iaXQoUEdfdXB0b2RhdGUsICYocGFnZSktPmZsYWdzKQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaS5oIGIvaW5jbHVkZS9saW51eC9wY2kuaAppbmRleCAzZWM3MjU1Li40NDMxY2U0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpLmgKQEAgLTM1Niw2ICszNTYsOCBAQAogCXN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgKmVycl9oYW5kbGVyOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWRyaXZlcjsKIAlzdHJ1Y3QgcGNpX2R5bmlkcyBkeW5pZHM7CisKKwlpbnQgbXVsdGl0aHJlYWRfcHJvYmU7CiB9OwogCiAjZGVmaW5lCXRvX3BjaV9kcml2ZXIoZHJ2KSBjb250YWluZXJfb2YoZHJ2LHN0cnVjdCBwY2lfZHJpdmVyLCBkcml2ZXIpCkBAIC00MzEsNyArNDMzLDcgQEAKIHN0cnVjdCBwY2lfZGV2ICogcGNpX3NjYW5fc2luZ2xlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCBpbnQgZGV2Zm4pOwogdm9pZCBwY2lfZGV2aWNlX2FkZChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgcGNpX2J1cyAqYnVzKTsKIHVuc2lnbmVkIGludCBwY2lfc2Nhbl9jaGlsZF9idXMoc3RydWN0IHBjaV9idXMgKmJ1cyk7Ci12b2lkIHBjaV9idXNfYWRkX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2ludCBfX211c3RfY2hlY2sgcGNpX2J1c19hZGRfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogdm9pZCBwY2lfcmVhZF9icmlkZ2VfYmFzZXMoc3RydWN0IHBjaV9idXMgKmNoaWxkKTsKIHN0cnVjdCByZXNvdXJjZSAqcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKIGludCBwY2lfZ2V0X2ludGVycnVwdF9waW4oc3RydWN0IHBjaV9kZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKipicmlkZ2UpOwpAQCAtNDM5LDYgKzQ0MSw3IEBACiBleHRlcm4gdm9pZCBwY2lfZGV2X3B1dChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIGV4dGVybiB2b2lkIHBjaV9yZW1vdmVfYnVzKHN0cnVjdCBwY2lfYnVzICpiKTsKIGV4dGVybiB2b2lkIHBjaV9yZW1vdmVfYnVzX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKK2V4dGVybiB2b2lkIHBjaV9zdG9wX2J1c19kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CiB2b2lkIHBjaV9zZXR1cF9jYXJkYnVzKHN0cnVjdCBwY2lfYnVzICpidXMpOwogCiAvKiBHZW5lcmljIFBDSSBmdW5jdGlvbnMgZXhwb3J0ZWQgdG8gY2FyZCBkcml2ZXJzICovCkBAIC03ODQsMTIgKzc4NywxMyBAQAogdm9pZCBwY2lfZml4dXBfZGV2aWNlKGVudW0gcGNpX2ZpeHVwX3Bhc3MgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldik7CiAKIGV4dGVybiBpbnQgcGNpX3BjaV9wcm9ibGVtczsKLSNkZWZpbmUgUENJUENJX0ZBSUwJCTEKKyNkZWZpbmUgUENJUENJX0ZBSUwJCTEJLyogTm8gUENJIFBDSSBETUEgKi8KICNkZWZpbmUgUENJUENJX1RSSVRPTgkJMgogI2RlZmluZSBQQ0lQQ0lfTkFUT01BCQk0CiAjZGVmaW5lIFBDSVBDSV9WSUFFVEJGCQk4CiAjZGVmaW5lIFBDSVBDSV9WU0ZYCQkxNgotI2RlZmluZSBQQ0lQQ0lfQUxJTUFHSUsJCTMyCisjZGVmaW5lIFBDSVBDSV9BTElNQUdJSwkJMzIJLyogTmVlZCBsb3cgbGF0ZW5jeSBzZXR0aW5nICovCisjZGVmaW5lIFBDSUFHUF9GQUlMCQk2NAkvKiBObyBQQ0kgdG8gQUdQIERNQSAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogI2VuZGlmIC8qIExJTlVYX1BDSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaCBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCmluZGV4IDZhMWUwOTguLmM5ZmZiYzMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCisrKyBiL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oCkBAIC00NzksNiArNDc5LDcgQEAKIAogI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FNRAkJMHgxMDIyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0s4X05CCQkweDExMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfSzhfTkJfTUlTQwkweDExMDMKICNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0UJCTB4MjAwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRV9IT01FCTB4MjAwMQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9TQ1NJCQkweDIwMjAKQEAgLTUwNiw2ICs1MDcsNyBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTUxXzAJMHg3NDU0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzFfQlJJREdFCTB4NzQ1MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0FQSUMJMHg3NDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMzJfQlJJREdFCTB4NzQ1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBICAgIDB4MjA5MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggIDB4MjA5MQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfQVVESU8gIDB4MjA5MwpAQCAtMTQxMSw2ICsxNDEzLDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19MRQkgIDB4MDAwOQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0dDTkJfTEUgMHgwMDE3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfRVBCCSAgMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfSFQyMDAwX1BDSUUJMHgwMTMyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfT1NCNAkgIDB4MDIwMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0NTQjUJICAweDAyMDEKICNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2ICAgIDB4MDIwMwpAQCAtMTQ4Miw5ICsxNDg1LDYgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQyNjAJMHg2NDMwCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9NVjY0MzYwCTB4NjQ2MAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDQ2MAkweDY0ODAKLSNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUOTYxMDAJMHg5NjUyCi0jZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDk2MTAwQQkweDk2NTMKLQogCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfVjMJCTB4MTFiMAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1YzX1Y5NjAJCTB4MDAwMQpAQCAtMTkwNSw2ICsxOTA1LDcgQEAKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNV8yCTB4MTY1NAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIwCTB4MTY1OAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIxCTB4MTY1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzIyCTB4MTY1YQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1TQkweDE2NWQKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNU1fMgkweDE2NWUKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcxNAkweDE2NjgKQEAgLTE5MTQsNiArMTkxNSw3IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVGCTB4MTY2ZQogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0TQkweDE2NzIKICNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0JMHgxNjczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTYJMHgxNjc0CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTAJMHgxNjc2CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTEJMHgxNjc3CiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTUJMHgxNjc4CkBAIC0xOTQzLDYgKzE5NDUsOCBAQAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181OTAxCTB4MTcwZAogI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMQkJMHgxNzBjCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU5MDFfMgkweDE3MGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwNgkweDE3MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwNk0JMHgxNzEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMQkJMHg0NDAxCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMUIwCQkweDQ0MDIKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oIGIvaW5jbHVkZS9saW51eC9wY2lfcmVncy5oCmluZGV4IDk2OTMwY2IuLjdkMGUyNmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpX3JlZ3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9yZWdzLmgKQEAgLTE5Niw3ICsxOTYsNyBAQAogI2RlZmluZSAgUENJX0NBUF9JRF9NU0kJCTB4MDUJLyogTWVzc2FnZSBTaWduYWxsZWQgSW50ZXJydXB0cyAqLwogI2RlZmluZSAgUENJX0NBUF9JRF9DSFNXUAkweDA2CS8qIENvbXBhY3RQQ0kgSG90U3dhcCAqLwogI2RlZmluZSAgUENJX0NBUF9JRF9QQ0lYCTB4MDcJLyogUENJLVggKi8KLSNkZWZpbmUgIFBDSV9DQVBfSURfSFRfSVJRQ09ORgkweDA4CS8qIEh5cGVyVHJhbnNwb3J0IElSUSBDb25maWd1cmF0aW9uICovCisjZGVmaW5lICBQQ0lfQ0FQX0lEX0hUCQkweDA4CS8qIEh5cGVyVHJhbnNwb3J0ICovCiAjZGVmaW5lICBQQ0lfQ0FQX0lEX1ZORFIJMHgwOQkvKiBWZW5kb3Igc3BlY2lmaWMgY2FwYWJpbGl0eSAqLwogI2RlZmluZSAgUENJX0NBUF9JRF9TSFBDIAkweDBDCS8qIFBDSSBTdGFuZGFyZCBIb3QtUGx1ZyBDb250cm9sbGVyICovCiAjZGVmaW5lICBQQ0lfQ0FQX0lEX0VYUCAJMHgxMAkvKiBQQ0kgRXhwcmVzcyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oIGIvaW5jbHVkZS9saW51eC9wY2llcG9ydF9pZi5oCmluZGV4IGI0NGUwMWEuLjZjZDkxZTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGNpZXBvcnRfaWYuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaWVwb3J0X2lmLmgKQEAgLTYyLDYgKzYyLDEyIEBACiAJaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogCWludCAoKnJlc3VtZSkgKHN0cnVjdCBwY2llX2RldmljZSAqZGV2KTsKIAorCS8qIFNlcnZpY2UgRXJyb3IgUmVjb3ZlcnkgSGFuZGxlciAqLworCXN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgKmVycl9oYW5kbGVyOworCisJLyogTGluayBSZXNldCBDYXBhYmlsaXR5IC0gQUVSIHNlcnZpY2UgZHJpdmVyIHNwZWNpZmljICovCisJcGNpX2Vyc19yZXN1bHRfdCAoKnJlc2V0X2xpbmspIChzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKKwogCWNvbnN0IHN0cnVjdCBwY2llX3BvcnRfc2VydmljZV9pZCAqaWRfdGFibGU7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmggYi9pbmNsdWRlL2xpbnV4L3BlcmNwdS5oCmluZGV4IDM4MzVhOTYuLjQ2ZWM3MmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGVyY3B1LmgKKysrIGIvaW5jbHVkZS9saW51eC9wZXJjcHUuaApAQCAtNzQsNyArNzQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgKl9fcGVyY3B1X2FsbG9jX21hc2soc2l6ZV90IHNpemUsIGdmcF90IGdmcCwgY3B1bWFza190ICptYXNrKQorc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX3BlcmNwdV9hbGxvY19tYXNrKHNpemVfdCBzaXplLCBnZnBfdCBnZnAsIGNwdW1hc2tfdCAqbWFzaykKIHsKIAlyZXR1cm4ga3phbGxvYyhzaXplLCBnZnApOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waWQuaCBiL2luY2x1ZGUvbGludXgvcGlkLmgKaW5kZXggMjk5NjBiMC4uOTNkYTdlMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BpZC5oCkBAIC03Niw2ICs3Niw4IEBACiAJCQkJZW51bSBwaWRfdHlwZSB0eXBlLCBpbnQgbnIpKTsKIAogZXh0ZXJuIHZvaWQgRkFTVENBTEwoZGV0YWNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssIGVudW0gcGlkX3R5cGUpKTsKK2V4dGVybiB2b2lkIEZBU1RDQUxMKHRyYW5zZmVyX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKm9sZCwKKwkJCQkgIHN0cnVjdCB0YXNrX3N0cnVjdCAqbmV3LCBlbnVtIHBpZF90eXBlKSk7CiAKIC8qCiAgKiBsb29rIHVwIGEgUElEIGluIHRoZSBoYXNoIHRhYmxlLiBNdXN0IGJlIGNhbGxlZCB3aXRoIHRoZSB0YXNrbGlzdF9sb2NrCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oIGIvaW5jbHVkZS9saW51eC9wb3NpeC10aW1lcnMuaAppbmRleCA5NTU3MmM0Li5hN2RkMzhmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Bvc2l4LXRpbWVycy5oCisrKyBiL2luY2x1ZGUvbGludXgvcG9zaXgtdGltZXJzLmgKQEAgLTcyLDYgKzcyLDcgQEAKIAlpbnQgKCp0aW1lcl9jcmVhdGUpIChzdHJ1Y3Qga19pdGltZXIgKnRpbWVyKTsKIAlpbnQgKCpuc2xlZXApIChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKIAkJICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqLCBzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopOworCWxvbmcgKCpuc2xlZXBfcmVzdGFydCkgKHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKTsKIAlpbnQgKCp0aW1lcl9zZXQpIChzdHJ1Y3Qga19pdGltZXIgKiB0aW1yLCBpbnQgZmxhZ3MsCiAJCQkgIHN0cnVjdCBpdGltZXJzcGVjICogbmV3X3NldHRpbmcsCiAJCQkgIHN0cnVjdCBpdGltZXJzcGVjICogb2xkX3NldHRpbmcpOwpAQCAtOTcsNiArOTgsNyBAQAogaW50IHBvc2l4X2NwdV90aW1lcl9jcmVhdGUoc3RydWN0IGtfaXRpbWVyICp0aW1lcik7CiBpbnQgcG9zaXhfY3B1X25zbGVlcChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKIAkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHApOworbG9uZyBwb3NpeF9jcHVfbnNsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2spOwogaW50IHBvc2l4X2NwdV90aW1lcl9zZXQoc3RydWN0IGtfaXRpbWVyICp0aW1lciwgaW50IGZsYWdzLAogCQkJc3RydWN0IGl0aW1lcnNwZWMgKm5ldywgc3RydWN0IGl0aW1lcnNwZWMgKm9sZCk7CiBpbnQgcG9zaXhfY3B1X3RpbWVyX2RlbChzdHJ1Y3Qga19pdGltZXIgKnRpbWVyKTsKQEAgLTExMSw0ICsxMTMsNiBAQAogdm9pZCBzZXRfcHJvY2Vzc19jcHVfdGltZXIoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCB1bnNpZ25lZCBpbnQgY2xvY2tfaWR4LAogCQkJICAgY3B1dGltZV90ICpuZXd2YWwsIGNwdXRpbWVfdCAqb2xkdmFsKTsKIAorbG9uZyBjbG9ja19uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jayk7CisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCAzNDM1Y2EzLi41N2Y3MGJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtMjY4LDcgKzI2OCw5IEBACiBzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgewogCXN0cnVjdCBwaWQgKnBpZDsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisjaWZkZWYgQ09ORklHX01NVQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdGFpbF92bWE7CisjZW5kaWYKIH07CiAKICNlbmRpZiAvKiBfTElOVVhfUFJPQ19GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9wdHJhY2UuaAppbmRleCA4YjI3NDlhLi5lZWIxOTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcHRyYWNlLmgKQEAgLTE2LDggKzE2LDggQEAKICNkZWZpbmUgUFRSQUNFX0tJTEwJCSAgIDgKICNkZWZpbmUgUFRSQUNFX1NJTkdMRVNURVAJICAgOQogCi0jZGVmaW5lIFBUUkFDRV9BVFRBQ0gJCTB4MTAKLSNkZWZpbmUgUFRSQUNFX0RFVEFDSAkJMHgxMQorI2RlZmluZSBQVFJBQ0VfQVRUQUNICQkgIDE2CisjZGVmaW5lIFBUUkFDRV9ERVRBQ0gJCSAgMTcKIAogI2RlZmluZSBQVFJBQ0VfU1lTQ0FMTAkJICAyNAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JhaWQvbWQuaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCmluZGV4IGViM2U1NDcuLmM1ODg3MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCisrKyBiL2luY2x1ZGUvbGludXgvcmFpZC9tZC5oCkBAIC01Myw2ICs1Myw4IEBACiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CiAjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9rLmg+CiAKKyNpZmRlZiBDT05GSUdfTUQKKwogLyoKICAqIERpZmZlcmVudCBtYWpvciB2ZXJzaW9ucyBhcmUgbm90IGNvbXBhdGlibGUuCiAgKiBEaWZmZXJlbnQgbWlub3IgdmVyc2lvbnMgYXJlIG9ubHkgZG93bndhcmQgY29tcGF0aWJsZS4KQEAgLTk1LDUgKzk3LDYgQEAKIAogZXh0ZXJuIHZvaWQgbWRfdXBkYXRlX3NiKG1kZGV2X3QgKiBtZGRldik7CiAKKyNlbmRpZiAvKiBDT05GSUdfTUQgKi8KICNlbmRpZiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaCBiL2luY2x1ZGUvbGludXgvcmFpZC9tZF9rLmgKaW5kZXggZDI4ODkwMi4uOTIwYjk0ZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yYWlkL21kX2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3JhaWQvbWRfay5oCkBAIC0xOCw2ICsxOCw4IEBACiAvKiBhbmQgZG0tYmlvLWxpc3QuaCBpcyBub3QgdW5kZXIgaW5jbHVkZS9saW51eCBiZWNhdXNlLi4uLiA/Pz8gKi8KICNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgiCiAKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKwogI2RlZmluZQlMRVZFTF9NVUxUSVBBVEgJCSgtNCkKICNkZWZpbmUJTEVWRUxfTElORUFSCQkoLTEpCiAjZGVmaW5lCUxFVkVMX0ZBVUxUWQkJKC01KQpAQCAtMzYyLDUgKzM2NCw2IEBACiAJaWYgKHApIHB1dF9wYWdlKHApOwogfQogCisjZW5kaWYgLyogQ09ORklHX0JMT0NLICovCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yYW1mcy5oIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCmluZGV4IDAwYjM0MGIuLmIxNjBmYjE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JhbWZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYW1mcy5oCkBAIC0xNyw1ICsxNyw2IEBACiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJhbWZzX2ZpbGVfb3BlcmF0aW9uczsKIGV4dGVybiBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgZ2VuZXJpY19maWxlX3ZtX29wczsKK2V4dGVybiBpbnQgX19pbml0IGluaXRfcm9vdGZzKHZvaWQpOwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmggYi9pbmNsdWRlL2xpbnV4L3JidHJlZS5oCmluZGV4IDhkNTM4MmUuLjM0NGJjMzQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmJ0cmVlLmgKKysrIGIvaW5jbHVkZS9saW51eC9yYnRyZWUuaApAQCAtMTMzLDcgKzEzMyw3IEBACiAjZGVmaW5lCXJiX2VudHJ5KHB0ciwgdHlwZSwgbWVtYmVyKSBjb250YWluZXJfb2YocHRyLCB0eXBlLCBtZW1iZXIpCiAKICNkZWZpbmUgUkJfRU1QVFlfUk9PVChyb290KQkoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCi0jZGVmaW5lIFJCX0VNUFRZX05PREUobm9kZSkJKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQorI2RlZmluZSBSQl9FTVBUWV9OT0RFKG5vZGUpCShyYl9wYXJlbnQobm9kZSkgPT0gbm9kZSkKICNkZWZpbmUgUkJfQ0xFQVJfTk9ERShub2RlKQkocmJfc2V0X3BhcmVudChub2RlLCBub2RlKSkKIAogZXh0ZXJuIHZvaWQgcmJfaW5zZXJ0X2NvbG9yKHN0cnVjdCByYl9ub2RlICosIHN0cnVjdCByYl9yb290ICopOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKaW5kZXggODA2ZWM1Yi4uZmUwMGY3OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCkBAIC01Niw2ICs1NiwxNiBAQAogZXh0ZXJuIGludCByZWlzZXJmc194YXR0cl9wb3NpeF9hY2xfZXhpdCh2b2lkKTsKIGV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOwogZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKKworc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCVJFSVNFUkZTX0koaW5vZGUpLT5pX2FjbF9hY2Nlc3MgPSBOVUxMOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCVJFSVNFUkZTX0koaW5vZGUpLT5pX2FjbF9kZWZhdWx0ID0gTlVMTDsKK30KICNlbHNlCiAKICNkZWZpbmUgcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woaW5vZGUpIDAKQEAgLTg3LDQgKzk3LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSkKK3sKK30KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCmluZGV4IDI4NDkzZmYuLjdiYzZiZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKQEAgLTgwNywyMSArODA3LDE5IEBACiAjZGVmaW5lIHNldF9zZF92MV9maXJzdF9kaXJlY3RfYnl0ZShzZHAsdikgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHNkcCktPnNkX2ZpcnN0X2RpcmVjdF9ieXRlID0gY3B1X3RvX2xlMzIodikpCiAKLSNpbmNsdWRlIDxsaW51eC9leHQyX2ZzLmg+Ci0KIC8qIGlub2RlIGZsYWdzIHN0b3JlZCBpbiBzZF9hdHRycyAobmVlIHNkX3Jlc2VydmVkKSAqLwogCiAvKiB3ZSB3YW50IGNvbW1vbiBmbGFncyB0byBoYXZlIHRoZSBzYW1lIHZhbHVlcyBhcyBpbiBleHQyLAogICAgc28gY2hhdHRyKDEpIHdpbGwgd29yayB3aXRob3V0IHByb2JsZW1zICovCi0jZGVmaW5lIFJFSVNFUkZTX0lNTVVUQUJMRV9GTCBFWFQyX0lNTVVUQUJMRV9GTAotI2RlZmluZSBSRUlTRVJGU19BUFBFTkRfRkwgICAgRVhUMl9BUFBFTkRfRkwKLSNkZWZpbmUgUkVJU0VSRlNfU1lOQ19GTCAgICAgIEVYVDJfU1lOQ19GTAotI2RlZmluZSBSRUlTRVJGU19OT0FUSU1FX0ZMICAgRVhUMl9OT0FUSU1FX0ZMCi0jZGVmaW5lIFJFSVNFUkZTX05PRFVNUF9GTCAgICBFWFQyX05PRFVNUF9GTAotI2RlZmluZSBSRUlTRVJGU19TRUNSTV9GTCAgICAgRVhUMl9TRUNSTV9GTAotI2RlZmluZSBSRUlTRVJGU19VTlJNX0ZMICAgICAgRVhUMl9VTlJNX0ZMCi0jZGVmaW5lIFJFSVNFUkZTX0NPTVBSX0ZMICAgICBFWFQyX0NPTVBSX0ZMCi0jZGVmaW5lIFJFSVNFUkZTX05PVEFJTF9GTCAgICBFWFQyX05PVEFJTF9GTAorI2RlZmluZSBSRUlTRVJGU19JTU1VVEFCTEVfRkwgRlNfSU1NVVRBQkxFX0ZMCisjZGVmaW5lIFJFSVNFUkZTX0FQUEVORF9GTCAgICBGU19BUFBFTkRfRkwKKyNkZWZpbmUgUkVJU0VSRlNfU1lOQ19GTCAgICAgIEZTX1NZTkNfRkwKKyNkZWZpbmUgUkVJU0VSRlNfTk9BVElNRV9GTCAgIEZTX05PQVRJTUVfRkwKKyNkZWZpbmUgUkVJU0VSRlNfTk9EVU1QX0ZMICAgIEZTX05PRFVNUF9GTAorI2RlZmluZSBSRUlTRVJGU19TRUNSTV9GTCAgICAgRlNfU0VDUk1fRkwKKyNkZWZpbmUgUkVJU0VSRlNfVU5STV9GTCAgICAgIEZTX1VOUk1fRkwKKyNkZWZpbmUgUkVJU0VSRlNfQ09NUFJfRkwgICAgIEZTX0NPTVBSX0ZMCisjZGVmaW5lIFJFSVNFUkZTX05PVEFJTF9GTCAgICBGU19OT1RBSUxfRkwKIAogLyogcGVyc2lzdGVudCBmbGFncyB0aGF0IGZpbGUgaW5oZXJpdHMgZnJvbSB0aGUgcGFyZW50IGRpcmVjdG9yeSAqLwogI2RlZmluZSBSRUlTRVJGU19JTkhFUklUX01BU0sgKCBSRUlTRVJGU19JTU1VVEFCTEVfRkwgfAlcCkBAIC0yMDc1LDYgKzIwNzMsMTAgQEAKICAqLwogX19sZTMyIHJlaXNlcmZzX2Nob29zZV9wYWNraW5nKHN0cnVjdCBpbm9kZSAqZGlyKTsKIAoraW50IHJlaXNlcmZzX2luaXRfYml0bWFwX2NhY2hlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwordm9pZCByZWlzZXJmc19mcmVlX2JpdG1hcF9jYWNoZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKK3ZvaWQgcmVpc2VyZnNfY2FjaGVfYml0bWFwX21ldGFkYXRhKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfaW5mbyAqaW5mbyk7CitzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlaXNlcmZzX3JlYWRfYml0bWFwX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGludCBiaXRtYXApOwogaW50IGlzX3JldXNhYmxlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgYl9ibG9ja25yX3QgYmxvY2ssIGludCBiaXRfdmFsdWUpOwogdm9pZCByZWlzZXJmc19mcmVlX2Jsb2NrKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKiwKIAkJCSBiX2Jsb2NrbnJfdCwgaW50IGZvcl91bmZvcm1hdHRlZCk7CkBAIC0yMTYzLDE1ICsyMTY1LDI0IEBACiAvKiBwcm90b3R5cGVzIGZyb20gaW9jdGwuYyAqLwogaW50IHJlaXNlcmZzX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7Citsb25nIHJlaXNlcmZzX2NvbXBhdF9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpOwogCiAvKiBpb2N0bCdzIGNvbW1hbmQgKi8KICNkZWZpbmUgUkVJU0VSRlNfSU9DX1VOUEFDSwkJX0lPVygweENELDEsbG9uZykKIC8qIGRlZmluZSBmb2xsb3dpbmcgZmxhZ3MgdG8gYmUgdGhlIHNhbWUgYXMgaW4gZXh0Miwgc28gdGhhdCBjaGF0dHIoMSksCiAgICBsc2F0dHIoMSkgd2lsbCB3b3JrIHdpdGggdXMuICovCi0jZGVmaW5lIFJFSVNFUkZTX0lPQ19HRVRGTEFHUwkJRVhUMl9JT0NfR0VURkxBR1MKLSNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVEZMQUdTCQlFWFQyX0lPQ19TRVRGTEFHUwotI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRVhUMl9JT0NfR0VUVkVSU0lPTgotI2RlZmluZSBSRUlTRVJGU19JT0NfU0VUVkVSU0lPTgkJRVhUMl9JT0NfU0VUVkVSU0lPTgorI2RlZmluZSBSRUlTRVJGU19JT0NfR0VURkxBR1MJCUZTX0lPQ19HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfU0VURkxBR1MJCUZTX0lPQ19TRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0NfR0VUVkVSU0lPTgkJRlNfSU9DX0dFVFZFUlNJT04KKyNkZWZpbmUgUkVJU0VSRlNfSU9DX1NFVFZFUlNJT04JCUZTX0lPQ19TRVRWRVJTSU9OCisKKy8qIHRoZSAzMiBiaXQgY29tcGF0IGRlZmluaXRpb25zIHdpdGggaW50IGFyZ3VtZW50ICovCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1VOUEFDSwkJX0lPVygweENELCAxLCBpbnQpCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX0dFVEZMQUdTCQlGU19JT0MzMl9HRVRGTEFHUworI2RlZmluZSBSRUlTRVJGU19JT0MzMl9TRVRGTEFHUwkJRlNfSU9DMzJfU0VURkxBR1MKKyNkZWZpbmUgUkVJU0VSRlNfSU9DMzJfR0VUVkVSU0lPTglGU19JT0MzMl9HRVRWRVJTSU9OCisjZGVmaW5lIFJFSVNFUkZTX0lPQzMyX1NFVFZFUlNJT04JRlNfSU9DMzJfU0VUVkVSU0lPTgogCiAvKiBMb2NraW5nIHByaW1pdGl2ZXMgKi8KIC8qIFJpZ2h0IG5vdyB3ZSBhcmUgc3RpbGwgZmFsbGluZyBiYWNrIHRvICh1bilsb2NrX2tlcm5lbCwgYnV0IGV2ZW50dWFsbHkgdGhhdApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19pLmggYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaAppbmRleCAxNDliZThkLi41YjNiMjk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaApAQCAtNTIsMTAgKzUyLDEzIEBACiAJICoqIGZsdXNoZWQgKi8KIAl1bnNpZ25lZCBsb25nIGlfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqaV9qbDsKLQorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKIAlzdHJ1Y3QgcG9zaXhfYWNsICppX2FjbF9hY2Nlc3M7CiAJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgogCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOworI2VuZGlmCiAJc3RydWN0IGlub2RlIHZmc19pbm9kZTsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAppbmRleCAzMWI0YzBiLi43M2UwYmVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCkBAIC0yNjcsNyArMjY3LDYgQEAKIAkvLyBGSVhNRTogV29uJ3Qgd29yayB3aXRoIGJsb2NrIHNpemVzID4gOEsKIAlfX3UxNiBmaXJzdF96ZXJvX2hpbnQ7CiAJX191MTYgZnJlZV9jb3VudDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwkvKiB0aGUgYWN0dWFsIGJpdG1hcCAqLwogfTsKIAogc3RydWN0IHByb2NfZGlyX2VudHJ5OwpAQCAtNDE0LDYgKzQxMyw3IEBACiAvKiBEZWZpbml0aW9ucyBvZiByZWlzZXJmcyBvbi1kaXNrIHByb3BlcnRpZXM6ICovCiAjZGVmaW5lIFJFSVNFUkZTXzNfNSAwCiAjZGVmaW5lIFJFSVNFUkZTXzNfNiAxCisjZGVmaW5lIFJFSVNFUkZTX09MRF9GT1JNQVQgMgogCiBlbnVtIHJlaXNlcmZzX21vdW50X29wdGlvbnMgewogLyogTW91bnQgb3B0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCmluZGV4IDVlOTYxMDMuLjk2NmMzNTggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKQEAgLTk3LDYgKzk3LDExIEBACiAJaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworfQorCiAjZWxzZQogCiAjZGVmaW5lIGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSAwCkBAIC0xMjksNiArMTM0LDkgQEAKIAlzYi0+c19mbGFncyA9IChzYi0+c19mbGFncyAmIH5NU19QT1NJWEFDTCk7CS8qIHRvIGJlIHN1cmUgKi8KIAlyZXR1cm4gMDsKIH07CitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworfQogI2VuZGlmCiAKICNlbmRpZgkJCQkvKiBfX0tFUk5FTF9fICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J0Yy5oIGIvaW5jbHVkZS9saW51eC9ydGMuaAppbmRleCA1MzcxZTRlLi5iODlmMDkzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3J0Yy5oCisrKyBiL2luY2x1ZGUvbGludXgvcnRjLmgKQEAgLTE0MSw3ICsxNDEsNyBAQAogCWludCBpZDsKIAljaGFyIG5hbWVbUlRDX0RFVklDRV9OQU1FX1NJWkVdOwogCi0Jc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wczsKKwljb25zdCBzdHJ1Y3QgcnRjX2NsYXNzX29wcyAqb3BzOwogCXN0cnVjdCBtdXRleCBvcHNfbG9jazsKIAogCXN0cnVjdCBjbGFzc19kZXZpY2UgKnJ0Y19kZXY7CkBAIC0xNzIsNyArMTcyLDcgQEAKIAogZXh0ZXJuIHN0cnVjdCBydGNfZGV2aWNlICpydGNfZGV2aWNlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkJCXN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcywKKwkJCQkJY29uc3Qgc3RydWN0IHJ0Y19jbGFzc19vcHMgKm9wcywKIAkJCQkJc3RydWN0IG1vZHVsZSAqb3duZXIpOwogZXh0ZXJuIHZvaWQgcnRjX2RldmljZV91bnJlZ2lzdGVyKHN0cnVjdCBydGNfZGV2aWNlICpyZGV2KTsKIGV4dGVybiBpbnQgcnRjX2ludGVyZmFjZV9yZWdpc3RlcihzdHJ1Y3QgY2xhc3NfaW50ZXJmYWNlICppbnRmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oCmluZGV4IDljOTJkYzguLjNhMThhZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaApAQCAtMiw3ICsyLDcgQEAKICNkZWZpbmUgX19MSU5VWF9SVE5FVExJTktfSAogCiAjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgogCiAvKioqKgogICoJCVJvdXRpbmcvbmVpZ2hib3VyIGRpc2NvdmVyeSBtZXNzYWdlcy4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaAppbmRleCA5ZDRhYTdmLi43ZWY4OTljIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCkBAIC0xNDgsNiArMTQ4LDcgQEAKICNkZWZpbmUgRVhJVF9ERUFECQkzMgogLyogaW4gdHNrLT5zdGF0ZSBhZ2FpbiAqLwogI2RlZmluZSBUQVNLX05PTklOVEVSQUNUSVZFCTY0CisjZGVmaW5lIFRBU0tfREVBRAkJMTI4CiAKICNkZWZpbmUgX19zZXRfdGFza19zdGF0ZSh0c2ssIHN0YXRlX3ZhbHVlKQkJXAogCWRvIHsgKHRzayktPnN0YXRlID0gKHN0YXRlX3ZhbHVlKTsgfSB3aGlsZSAoMCkKQEAgLTUwNCw4ICs1MDUsOCBAQAogI2RlZmluZSBydF9wcmlvKHByaW8pCQl1bmxpa2VseSgocHJpbykgPCBNQVhfUlRfUFJJTykKICNkZWZpbmUgcnRfdGFzayhwKQkJcnRfcHJpbygocCktPnByaW8pCiAjZGVmaW5lIGJhdGNoX3Rhc2socCkJCSh1bmxpa2VseSgocCktPnBvbGljeSA9PSBTQ0hFRF9CQVRDSCkpCi0jZGVmaW5lIGhhc19ydF9wb2xpY3kocCkgXAotCXVubGlrZWx5KChwKS0+cG9saWN5ICE9IFNDSEVEX05PUk1BTCAmJiAocCktPnBvbGljeSAhPSBTQ0hFRF9CQVRDSCkKKyNkZWZpbmUgaXNfcnRfcG9saWN5KHApCQkoKHApICE9IFNDSEVEX05PUk1BTCAmJiAocCkgIT0gU0NIRURfQkFUQ0gpCisjZGVmaW5lIGhhc19ydF9wb2xpY3kocCkJdW5saWtlbHkoaXNfcnRfcG9saWN5KChwKS0+cG9saWN5KSkKIAogLyoKICAqIFNvbWUgZGF5IHRoaXMgd2lsbCBiZSBhIGZ1bGwtZmxlZGdlZCB1c2VyIHRyYWNraW5nIHN5c3RlbS4uCkBAIC03MDksNyArNzEwLDYgQEAKIAogCiBzdHJ1Y3QgaW9fY29udGV4dDsJCQkvKiBTZWUgYmxrZGV2LmggKi8KLXZvaWQgZXhpdF9pb19jb250ZXh0KHZvaWQpOwogc3RydWN0IGNwdXNldDsKIAogI2RlZmluZSBOR1JPVVBTX1NNQUxMCQkzMgpAQCAtNzg0LDggKzc4NCw5IEBACiAJc3RydWN0IHByaW9fYXJyYXkgKmFycmF5OwogCiAJdW5zaWduZWQgc2hvcnQgaW9wcmlvOworI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCiAJdW5zaWduZWQgaW50IGJ0cmFjZV9zZXE7Ci0KKyNlbmRpZgogCXVuc2lnbmVkIGxvbmcgc2xlZXBfYXZnOwogCXVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lc3RhbXAsIGxhc3RfcmFuOwogCXVuc2lnbmVkIGxvbmcgbG9uZyBzY2hlZF90aW1lOyAvKiBzY2hlZF9jbG9jayB0aW1lIHNwZW50IHJ1bm5pbmcgKi8KQEAgLTg4Niw4ICs4ODcsMTAgQEAKIAkJCQkgICAgIC0gaW5pdGlhbGl6ZWQgbm9ybWFsbHkgYnkgZmx1c2hfb2xkX2V4ZWMgKi8KIC8qIGZpbGUgc3lzdGVtIGluZm8gKi8KIAlpbnQgbGlua19jb3VudCwgdG90YWxfbGlua19jb3VudDsKKyNpZmRlZiBDT05GSUdfU1lTVklQQwogLyogaXBjIHN0dWZmICovCiAJc3RydWN0IHN5c3Zfc2VtIHN5c3ZzZW07CisjZW5kaWYKIC8qIENQVS1zcGVjaWZpYyBzdGF0ZSBvZiB0aGlzIHRhc2sgKi8KIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCB0aHJlYWQ7CiAvKiBmaWxlc3lzdGVtIGluZm9ybWF0aW9uICovCkBAIC05NzgsMTAgKzk4MSwxMCBAQAogCXdhaXRfcXVldWVfdCAqaW9fd2FpdDsKIC8qIGkvbyBjb3VudGVycyhieXRlcyByZWFkL3dyaXR0ZW4sICNzeXNjYWxscyAqLwogCXU2NCByY2hhciwgd2NoYXIsIHN5c2NyLCBzeXNjdzsKLSNpZiBkZWZpbmVkKENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUKQorI2lmIGRlZmluZWQoQ09ORklHX1RBU0tfWEFDQ1QpCiAJdTY0IGFjY3RfcnNzX21lbTE7CS8qIGFjY3VtdWxhdGVkIHJzcyB1c2FnZSAqLwogCXU2NCBhY2N0X3ZtX21lbTE7CS8qIGFjY3VtdWxhdGVkIHZpcnR1YWwgbWVtb3J5IHVzYWdlICovCi0JY2xvY2tfdCBhY2N0X3N0aW1leHBkOwkvKiBjbG9ja190LWNvbnZlcnRlZCBzdGltZSBzaW5jZSBsYXN0IHVwZGF0ZSAqLworCWNwdXRpbWVfdCBhY2N0X3N0aW1leHBkOy8qIHN0aW1lIHNpbmNlIGxhc3QgdXBkYXRlICovCiAjZW5kaWYKICNpZmRlZiBDT05GSUdfTlVNQQogICAJc3RydWN0IG1lbXBvbGljeSAqbWVtcG9saWN5OwpAQCAtMTAzMCw2ICsxMDMzLDE2IEBACiAJcmV0dXJuIHAtPnBpZHNbUElEVFlQRV9QSURdLnBpZCAhPSBOVUxMOwogfQogCisvKioKKyAqIGlzX2luaXQgLSBjaGVjayBpZiBhIHRhc2sgc3RydWN0dXJlIGlzIHRoZSBmaXJzdCB1c2VyIHNwYWNlCisgKgkgICAgIHRhc2sgdGhlIGtlcm5lbCBjcmVhdGVkLgorICogQHA6IFRhc2sgc3RydWN0dXJlIHRvIGJlIGNoZWNrZWQuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IGlzX2luaXQoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7CisJcmV0dXJuIHRzay0+cGlkID09IDE7Cit9CisKIGV4dGVybiB2b2lkIGZyZWVfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzayk7CiAjZGVmaW5lIGdldF90YXNrX3N0cnVjdCh0c2spIGRvIHsgYXRvbWljX2luYygmKHRzayktPnVzYWdlKTsgfSB3aGlsZSgwKQogCkBAIC0xMDQ4LDcgKzEwNjEsNiBAQAogCQkJCQkvKiBOb3QgaW1wbGVtZW50ZWQgeWV0LCBvbmx5IGZvciA0ODYqLwogI2RlZmluZSBQRl9TVEFSVElORwkweDAwMDAwMDAyCS8qIGJlaW5nIGNyZWF0ZWQgKi8KICNkZWZpbmUgUEZfRVhJVElORwkweDAwMDAwMDA0CS8qIGdldHRpbmcgc2h1dCBkb3duICovCi0jZGVmaW5lIFBGX0RFQUQJCTB4MDAwMDAwMDgJLyogRGVhZCAqLwogI2RlZmluZSBQRl9GT1JLTk9FWEVDCTB4MDAwMDAwNDAJLyogZm9ya2VkIGJ1dCBkaWRuJ3QgZXhlYyAqLwogI2RlZmluZSBQRl9TVVBFUlBSSVYJMHgwMDAwMDEwMAkvKiB1c2VkIHN1cGVyLXVzZXIgcHJpdmlsZWdlcyAqLwogI2RlZmluZSBQRl9EVU1QQ09SRQkweDAwMDAwMjAwCS8qIGR1bXBlZCBjb3JlICovCkBAIC0xMTkzLDcgKzEyMDUsNyBAQAogCiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KIAotZXh0ZXJuIHZvaWQgZG9fdGltZXIoc3RydWN0IHB0X3JlZ3MgKik7CitleHRlcm4gdm9pZCBkb190aW1lcih1bnNpZ25lZCBsb25nIHRpY2tzKTsKIAogZXh0ZXJuIGludCBGQVNUQ0FMTCh3YWtlX3VwX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRzaywgdW5zaWduZWQgaW50IHN0YXRlKSk7CiBleHRlcm4gaW50IEZBU1RDQUxMKHdha2VfdXBfcHJvY2VzcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKiB0c2spKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2N4MjAwX2dwaW8uaCBiL2luY2x1ZGUvbGludXgvc2N4MjAwX2dwaW8uaAppbmRleCA5MGRkMDY5Li4xYTgyZDMwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NjeDIwMF9ncGlvLmgKKysrIGIvaW5jbHVkZS9saW51eC9zY3gyMDBfZ3Bpby5oCkBAIC00LDYgKzQsNyBAQAogCiBleHRlcm4gdW5zaWduZWQgc2N4MjAwX2dwaW9fYmFzZTsKIGV4dGVybiBsb25nIHNjeDIwMF9ncGlvX3NoYWRvd1syXTsKK2V4dGVybiBzdHJ1Y3QgbnNjX2dwaW9fb3BzIHNjeDIwMF9ncGlvX29wczsKIAogI2RlZmluZSBzY3gyMDBfZ3Bpb19wcmVzZW50KCkgKHNjeDIwMF9ncGlvX2Jhc2UhPTApCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaCBiL2luY2x1ZGUvbGludXgvc2VjdXJpdHkuaAppbmRleCA5ZjU2ZmI4Li45YjVmZWE4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3NlY3VyaXR5LmgKKysrIGIvaW5jbHVkZS9saW51eC9zZWN1cml0eS5oCkBAIC0xNTk1LDYgKzE1OTUsNyBAQAogCiBzdGF0aWMgaW5saW5lIGludCBzZWN1cml0eV9pbm9kZV9hbGxvYyAoc3RydWN0IGlub2RlICppbm9kZSkKIHsKKwlpbm9kZS0+aV9zZWN1cml0eSA9IE5VTEw7CiAJcmV0dXJuIHNlY3VyaXR5X29wcy0+aW5vZGVfYWxsb2Nfc2VjdXJpdHkgKGlub2RlKTsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oIGIvaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oCmluZGV4IGMwNTdmMGIuLmYzYzUxODkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2htZW1fZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgKQEAgLTE5LDYgKzE5LDEwIEBACiAJc3dwX2VudHJ5X3QJCWlfZGlyZWN0W1NITUVNX05SX0RJUkVDVF07IC8qIGZpcnN0IGJsb2NrcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQJc3dhcGxpc3Q7CS8qIGNoYWluIG9mIG1heWJlcyBvbiBzd2FwICovCiAJc3RydWN0IGlub2RlCQl2ZnNfaW5vZGU7CisjaWZkZWYgQ09ORklHX1RNUEZTX1BPU0lYX0FDTAorCXN0cnVjdCBwb3NpeF9hY2wJKmlfYWNsOworCXN0cnVjdCBwb3NpeF9hY2wJKmlfZGVmYXVsdF9hY2w7CisjZW5kaWYKIH07CiAKIHN0cnVjdCBzaG1lbV9zYl9pbmZvIHsKQEAgLTM2LDQgKzQwLDI0IEBACiAJcmV0dXJuIGNvbnRhaW5lcl9vZihpbm9kZSwgc3RydWN0IHNobWVtX2lub2RlX2luZm8sIHZmc19pbm9kZSk7CiB9CiAKKyNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCitpbnQgc2htZW1fcGVybWlzc2lvbihzdHJ1Y3QgaW5vZGUgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworaW50IHNobWVtX2FjbF9pbml0KHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgaW5vZGUgKik7Cit2b2lkIHNobWVtX2FjbF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqKTsKKworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHNobWVtX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBzaG1lbV94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyOworCitleHRlcm4gc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgc2htZW1fYWNsX29wczsKKworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHNobWVtX2FjbF9pbml0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpbm9kZSAqZGlyKQoreworCXJldHVybiAwOworfQorc3RhdGljIGlubGluZSB2b2lkIHNobWVtX2FjbF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7Cit9CisjZW5kaWYgIC8qIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgKi8KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NsYWIuaCBiL2luY2x1ZGUvbGludXgvc2xhYi5oCmluZGV4IDY2ZDZlYjcuLmE5NmZkOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2xhYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc2xhYi5oCkBAIC02MCw3ICs2MCw3IEBACiBleHRlcm4ga21lbV9jYWNoZV90ICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nLAogCQkJCSAgICAgICB2b2lkICgqKSh2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKSwKIAkJCQkgICAgICAgdm9pZCAoKikodm9pZCAqLCBrbWVtX2NhY2hlX3QgKiwgdW5zaWduZWQgbG9uZykpOwotZXh0ZXJuIGludCBrbWVtX2NhY2hlX2Rlc3Ryb3koa21lbV9jYWNoZV90ICopOworZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9kZXN0cm95KGttZW1fY2FjaGVfdCAqKTsKIGV4dGVybiBpbnQga21lbV9jYWNoZV9zaHJpbmsoa21lbV9jYWNoZV90ICopOwogZXh0ZXJuIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moa21lbV9jYWNoZV90ICosIGdmcF90KTsKIGV4dGVybiB2b2lkICprbWVtX2NhY2hlX3phbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CkBAIC0yNDksNyArMjQ5LDcgQEAKIAl1bnNpZ25lZCBsb25nLAogCXZvaWQgKCopKHZvaWQgKiwgc3RydWN0IGttZW1fY2FjaGUgKiwgdW5zaWduZWQgbG9uZyksCiAJdm9pZCAoKikodm9pZCAqLCBzdHJ1Y3Qga21lbV9jYWNoZSAqLCB1bnNpZ25lZCBsb25nKSk7Ci1pbnQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjKTsKK3ZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjKTsKIHZvaWQgKmttZW1fY2FjaGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmMsIGdmcF90IGZsYWdzKTsKIHZvaWQgKmttZW1fY2FjaGVfemFsbG9jKHN0cnVjdCBrbWVtX2NhY2hlICosIGdmcF90KTsKIHZvaWQga21lbV9jYWNoZV9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpjLCB2b2lkICpiKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc21iLmggYi9pbmNsdWRlL2xpbnV4L3NtYi5oCmluZGV4IDZkZjNiMTUuLmYwOThkZmYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc21iLmgKKysrIGIvaW5jbHVkZS9saW51eC9zbWIuaApAQCAtODksNyArODksNiBAQAogCXN0cnVjdCB0aW1lc3BlYwlmX2F0aW1lOwogCXN0cnVjdCB0aW1lc3BlYyBmX210aW1lOwogCXN0cnVjdCB0aW1lc3BlYyBmX2N0aW1lOwotCXVuc2lnbmVkIGxvbmcJZl9ibGtzaXplOwogCXVuc2lnbmVkIGxvbmcJZl9ibG9ja3M7CiAJaW50CQlmX3VuaXg7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9jay5oCmluZGV4IDMxNDczZGIuLmI4MDBkMmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTE2Nyw5ICsxNjcsOSBAQAogICogcmVnYXJkbGVzcyBvZiB3aGV0aGVyIENPTkZJR19TTVAgb3IgQ09ORklHX1BSRUVNUFQgYXJlIHNldC4gVGhlIHZhcmlvdXMKICAqIG1ldGhvZHMgYXJlIGRlZmluZWQgYXMgbm9wcyBpbiB0aGUgY2FzZSB0aGV5IGFyZSBub3QgcmVxdWlyZWQuCiAgKi8KLSNkZWZpbmUgc3Bpbl90cnlsb2NrKGxvY2spCQlfX2NvbmRfbG9jayhfc3Bpbl90cnlsb2NrKGxvY2spKQotI2RlZmluZSByZWFkX3RyeWxvY2sobG9jaykJCV9fY29uZF9sb2NrKF9yZWFkX3RyeWxvY2sobG9jaykpCi0jZGVmaW5lIHdyaXRlX3RyeWxvY2sobG9jaykJCV9fY29uZF9sb2NrKF93cml0ZV90cnlsb2NrKGxvY2spKQorI2RlZmluZSBzcGluX3RyeWxvY2sobG9jaykJCV9fY29uZF9sb2NrKGxvY2ssIF9zcGluX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHJlYWRfdHJ5bG9jayhsb2NrKQkJX19jb25kX2xvY2sobG9jaywgX3JlYWRfdHJ5bG9jayhsb2NrKSkKKyNkZWZpbmUgd3JpdGVfdHJ5bG9jayhsb2NrKQkJX19jb25kX2xvY2sobG9jaywgX3dyaXRlX3RyeWxvY2sobG9jaykpCiAKICNkZWZpbmUgc3Bpbl9sb2NrKGxvY2spCQkJX3NwaW5fbG9jayhsb2NrKQogCkBAIC0yMzYsMTkgKzIzNiwxOSBAQAogCQkJCQlfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCiAjZGVmaW5lIHdyaXRlX3VubG9ja19iaChsb2NrKQkJX3dyaXRlX3VubG9ja19iaChsb2NrKQogCi0jZGVmaW5lIHNwaW5fdHJ5bG9ja19iaChsb2NrKQkJX19jb25kX2xvY2soX3NwaW5fdHJ5bG9ja19iaChsb2NrKSkKKyNkZWZpbmUgc3Bpbl90cnlsb2NrX2JoKGxvY2spCV9fY29uZF9sb2NrKGxvY2ssIF9zcGluX3RyeWxvY2tfYmgobG9jaykpCiAKICNkZWZpbmUgc3Bpbl90cnlsb2NrX2lycShsb2NrKSBcCiAoeyBcCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsgXAotCV9zcGluX3RyeWxvY2sobG9jaykgPyBcCisJc3Bpbl90cnlsb2NrKGxvY2spID8gXAogCTEgOiAoeyBsb2NhbF9pcnFfZW5hYmxlKCk7IDA7ICB9KTsgXAogfSkKIAogI2RlZmluZSBzcGluX3RyeWxvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgXAogKHsgXAogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsgXAotCV9zcGluX3RyeWxvY2sobG9jaykgPyBcCisJc3Bpbl90cnlsb2NrKGxvY2spID8gXAogCTEgOiAoeyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IDA7IH0pOyBcCiB9KQogCkBAIC0yNjQsNyArMjY0LDcgQEAKICAqLwogZXh0ZXJuIGludCBfYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWNfdCAqYXRvbWljLCBzcGlubG9ja190ICpsb2NrKTsKICNkZWZpbmUgYXRvbWljX2RlY19hbmRfbG9jayhhdG9taWMsIGxvY2spIFwKLQkJX19jb25kX2xvY2soX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSkKKwkJX19jb25kX2xvY2sobG9jaywgX2F0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSkKIAogLyoqCiAgKiBzcGluX2Nhbl9sb2NrIC0gd291bGQgc3Bpbl90cnlsb2NrKCkgc3VjY2VlZD8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKaW5kZXggYjJjNGY4Mi4uODgyOGI4MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKKysrIGIvaW5jbHVkZS9saW51eC9zcGlubG9ja19hcGlfc21wLmgKQEAgLTE5LDQxICsxOSw0MSBAQAogCiAjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZCh4KQlCVUdfT04oIXNwaW5faXNfbG9ja2VkKHgpKQogCi12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9jayhzcGlubG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhzcGlubG9ja190KTsKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl9sb2NrKHNwaW5sb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwogdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfbmVzdGVkKHNwaW5sb2NrX3QgKmxvY2ssIGludCBzdWJjbGFzcykKLQkJCQkJCQlfX2FjcXVpcmVzKHNwaW5sb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX2xvY2socndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfbG9jayhyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMoc3BpbmxvY2tfdCk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19iaChyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQkJX19hY3F1aXJlcyhyd2xvY2tfdCk7Ci12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnEoc3BpbmxvY2tfdCAqbG9jaykJX19hY3F1aXJlcyhzcGlubG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMocndsb2NrX3QpOworCQkJCQkJCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9jayhyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2socndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19iaChyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX2xvY2tfYmgocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9zcGluX2xvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCV9fYWNxdWlyZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfbG9ja19pcnEocndsb2NrX3QgKmxvY2spCQlfX2FjcXVpcmVzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJCV9fYWNxdWlyZXMobG9jayk7CiB1bnNpZ25lZCBsb25nIF9fbG9ja2Z1bmMgX3NwaW5fbG9ja19pcnFzYXZlKHNwaW5sb2NrX3QgKmxvY2spCi0JCQkJCQkJX19hY3F1aXJlcyhzcGlubG9ja190KTsKKwkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwogdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF9yZWFkX2xvY2tfaXJxc2F2ZShyd2xvY2tfdCAqbG9jaykKLQkJCQkJCQlfX2FjcXVpcmVzKHJ3bG9ja190KTsKKwkJCQkJCQlfX2FjcXVpcmVzKGxvY2spOwogdW5zaWduZWQgbG9uZyBfX2xvY2tmdW5jIF93cml0ZV9sb2NrX2lycXNhdmUocndsb2NrX3QgKmxvY2spCi0JCQkJCQkJX19hY3F1aXJlcyhyd2xvY2tfdCk7CisJCQkJCQkJX19hY3F1aXJlcyhsb2NrKTsKIGludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2soc3BpbmxvY2tfdCAqbG9jayk7CiBpbnQgX19sb2NrZnVuYyBfcmVhZF90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKIGludCBfX2xvY2tmdW5jIF93cml0ZV90cnlsb2NrKHJ3bG9ja190ICpsb2NrKTsKIGludCBfX2xvY2tmdW5jIF9zcGluX3RyeWxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jayk7Ci12b2lkIF9fbG9ja2Z1bmMgX3NwaW5fdW5sb2NrKHNwaW5sb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKHNwaW5sb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9jayhyd2xvY2tfdCAqbG9jaykJCV9fcmVsZWFzZXMocndsb2NrX3QpOwotdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKHJ3bG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfYmgoc3BpbmxvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhzcGlubG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfYmgocndsb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKHJ3bG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2JoKHJ3bG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKHJ3bG9ja190KTsKLXZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMoc3BpbmxvY2tfdCk7Ci12b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhyd2xvY2tfdCk7Ci12b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19pcnEocndsb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMocndsb2NrX3QpOwordm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9jayhzcGlubG9ja190ICpsb2NrKQkJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2socndsb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2socndsb2NrX3QgKmxvY2spCQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9zcGluX3VubG9ja19iaChzcGlubG9ja190ICpsb2NrKQlfX3JlbGVhc2VzKGxvY2spOwordm9pZCBfX2xvY2tmdW5jIF9yZWFkX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykJCV9fcmVsZWFzZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3dyaXRlX3VubG9ja19iaChyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxKHNwaW5sb2NrX3QgKmxvY2spCV9fcmVsZWFzZXMobG9jayk7Cit2b2lkIF9fbG9ja2Z1bmMgX3JlYWRfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKK3ZvaWQgX19sb2NrZnVuYyBfd3JpdGVfdW5sb2NrX2lycShyd2xvY2tfdCAqbG9jaykJX19yZWxlYXNlcyhsb2NrKTsKIHZvaWQgX19sb2NrZnVuYyBfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShzcGlubG9ja190ICpsb2NrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQotCQkJCQkJCV9fcmVsZWFzZXMoc3BpbmxvY2tfdCk7CisJCQkJCQkJX19yZWxlYXNlcyhsb2NrKTsKIHZvaWQgX19sb2NrZnVuYyBfcmVhZF91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKLQkJCQkJCQlfX3JlbGVhc2VzKHJ3bG9ja190KTsKKwkJCQkJCQlfX3JlbGVhc2VzKGxvY2spOwogdm9pZCBfX2xvY2tmdW5jIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShyd2xvY2tfdCAqbG9jaywgdW5zaWduZWQgbG9uZyBmbGFncykKLQkJCQkJCQlfX3JlbGVhc2VzKHJ3bG9ja190KTsKKwkJCQkJCQlfX3JlbGVhc2VzKGxvY2spOwogCiAjZW5kaWYgLyogX19MSU5VWF9TUElOTE9DS19BUElfU01QX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3RkZGVmLmggYi9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5oCmluZGV4IGVhNjVkZmIuLjZhNDBjNzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3RkZGVmLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdGRkZWYuaApAQCAtMTEsNiArMTEsMTIgQEAKICNlbmRpZgogCiAjaWZkZWYgX19LRVJORUxfXworCitlbnVtIHsKKwlmYWxzZQk9IDAsCisJdHJ1ZQk9IDEKK307CisKICN1bmRlZiBvZmZzZXRvZgogI2lmZGVmIF9fY29tcGlsZXJfb2Zmc2V0b2YKICNkZWZpbmUgb2Zmc2V0b2YoVFlQRSxNRU1CRVIpIF9fY29tcGlsZXJfb2Zmc2V0b2YoVFlQRSxNRU1CRVIpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIGIvaW5jbHVkZS9saW51eC9zdHJpbmcuaAppbmRleCBlNGM3NTU4Li40ZjY5ZWY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvc3RyaW5nLmgKQEAgLTk5LDYgKzk5LDcgQEAKICNlbmRpZgogCiBleHRlcm4gY2hhciAqa3N0cmR1cChjb25zdCBjaGFyICpzLCBnZnBfdCBnZnApOworZXh0ZXJuIHZvaWQgKmttZW1kdXAoY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbGVuLCBnZnBfdCBnZnApOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaAppbmRleCBhNmRlMzMyLi44NjJjMGQ4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMvYXV0aC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL2F1dGguaApAQCAtMTA5LDEzICsxMDksMTMgQEAKIAl2b2lkCQkJKCpjcmRlc3Ryb3kpKHN0cnVjdCBycGNfY3JlZCAqKTsKIAogCWludAkJCSgqY3JtYXRjaCkoc3RydWN0IGF1dGhfY3JlZCAqLCBzdHJ1Y3QgcnBjX2NyZWQgKiwgaW50KTsKLQl1MzIgKgkJCSgqY3JtYXJzaGFsKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgdTMyICopOworCV9fYmUzMiAqCQkoKmNybWFyc2hhbCkoc3RydWN0IHJwY190YXNrICosIF9fYmUzMiAqKTsKIAlpbnQJCQkoKmNycmVmcmVzaCkoc3RydWN0IHJwY190YXNrICopOwotCXUzMiAqCQkJKCpjcnZhbGlkYXRlKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgdTMyICopOworCV9fYmUzMiAqCQkoKmNydmFsaWRhdGUpKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7CiAJaW50CQkJKCpjcndyYXBfcmVxKShzdHJ1Y3QgcnBjX3Rhc2sgKiwga3hkcnByb2NfdCwKLQkJCQkJCXZvaWQgKiwgdTMyICosIHZvaWQgKik7CisJCQkJCQl2b2lkICosIF9fYmUzMiAqLCB2b2lkICopOwogCWludAkJCSgqY3J1bndyYXBfcmVzcCkoc3RydWN0IHJwY190YXNrICosIGt4ZHJwcm9jX3QsCi0JCQkJCQl2b2lkICosIHUzMiAqLCB2b2lkICopOworCQkJCQkJdm9pZCAqLCBfX2JlMzIgKiwgdm9pZCAqKTsKIH07CiAKIGV4dGVybiBzdHJ1Y3QgcnBjX2F1dGhvcHMJYXV0aHVuaXhfb3BzOwpAQCAtMTM0LDEwICsxMzQsMTAgQEAKIHZvaWQJCQlycGNhdXRoX2hvbGRjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKIHZvaWQJCQlwdXRfcnBjY3JlZChzdHJ1Y3QgcnBjX2NyZWQgKik7CiB2b2lkCQkJcnBjYXV0aF91bmJpbmRjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKLXUzMiAqCQkJcnBjYXV0aF9tYXJzaGNyZWQoc3RydWN0IHJwY190YXNrICosIHUzMiAqKTsKLXUzMiAqCQkJcnBjYXV0aF9jaGVja3ZlcmYoc3RydWN0IHJwY190YXNrICosIHUzMiAqKTsKLWludAkJCXJwY2F1dGhfd3JhcF9yZXEoc3RydWN0IHJwY190YXNrICp0YXNrLCBreGRycHJvY190IGVuY29kZSwgdm9pZCAqcnFzdHAsIHUzMiAqZGF0YSwgdm9pZCAqb2JqKTsKLWludAkJCXJwY2F1dGhfdW53cmFwX3Jlc3Aoc3RydWN0IHJwY190YXNrICp0YXNrLCBreGRycHJvY190IGRlY29kZSwgdm9pZCAqcnFzdHAsIHUzMiAqZGF0YSwgdm9pZCAqb2JqKTsKK19fYmUzMiAqCQlycGNhdXRoX21hcnNoY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKiwgX19iZTMyICopOworX19iZTMyICoJCXJwY2F1dGhfY2hlY2t2ZXJmKHN0cnVjdCBycGNfdGFzayAqLCBfX2JlMzIgKik7CitpbnQJCQlycGNhdXRoX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaik7CitpbnQJCQlycGNhdXRoX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaik7CiBpbnQJCQlycGNhdXRoX3JlZnJlc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqKTsKIHZvaWQJCQlycGNhdXRoX2ludmFsY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKik7CiBpbnQJCQlycGNhdXRoX3VwdG9kYXRlY3JlZChzdHJ1Y3QgcnBjX3Rhc2sgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaAppbmRleCBmNDNmMjM3Li5kOWY1OTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL21zZ19wcm90LmgKQEAgLTk1LDcgKzk1LDcgQEAKICAqIDJHQi4KICAqLwogCi10eXBlZGVmIHUzMglycGNfZnJhZ2hkcjsKK3R5cGVkZWYgX19iZTMyCXJwY19mcmFnaGRyOwogCiAjZGVmaW5lCVJQQ19MQVNUX1NUUkVBTV9GUkFHTUVOVAkoMVUgPDwgMzEpCiAjZGVmaW5lCVJQQ19GUkFHTUVOVF9TSVpFX01BU0sJCSh+UlBDX0xBU1RfU1RSRUFNX0ZSQUdNRU5UKQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjLmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAppbmRleCA3YjI3YzA5Li43MzE0MGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmMuaApAQCAtNzgsMjggKzc4LDQ1IEBACiAgKi8KICNkZWZpbmUgUlBDU1ZDX01BWFBBR0VTCQkoKFJQQ1NWQ19NQVhQQVlMT0FEK1BBR0VfU0laRS0xKS9QQUdFX1NJWkUgKyAyKQogCi1zdGF0aWMgaW5saW5lIHUzMiBzdmNfZ2V0dTMyKHN0cnVjdCBrdmVjICppb3YpCitzdGF0aWMgaW5saW5lIHUzMiBzdmNfZ2V0bmwoc3RydWN0IGt2ZWMgKmlvdikKIHsKLQl1MzIgdmFsLCAqdnA7CisJX19iZTMyIHZhbCwgKnZwOwogCXZwID0gaW92LT5pb3ZfYmFzZTsKIAl2YWwgPSAqdnArKzsKIAlpb3YtPmlvdl9iYXNlID0gKHZvaWQqKXZwOwotCWlvdi0+aW92X2xlbiAtPSBzaXplb2YodTMyKTsKKwlpb3YtPmlvdl9sZW4gLT0gc2l6ZW9mKF9fYmUzMik7CisJcmV0dXJuIG50b2hsKHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdmNfcHV0bmwoc3RydWN0IGt2ZWMgKmlvdiwgdTMyIHZhbCkKK3sKKwlfX2JlMzIgKnZwID0gaW92LT5pb3ZfYmFzZSArIGlvdi0+aW92X2xlbjsKKwkqdnAgPSBodG9ubCh2YWwpOworCWlvdi0+aW92X2xlbiArPSBzaXplb2YoX19iZTMyKTsKK30KKworc3RhdGljIGlubGluZSBfX2JlMzIgc3ZjX2dldHUzMihzdHJ1Y3Qga3ZlYyAqaW92KQoreworCV9fYmUzMiB2YWwsICp2cDsKKwl2cCA9IGlvdi0+aW92X2Jhc2U7CisJdmFsID0gKnZwKys7CisJaW92LT5pb3ZfYmFzZSA9ICh2b2lkKil2cDsKKwlpb3YtPmlvdl9sZW4gLT0gc2l6ZW9mKF9fYmUzMik7CiAJcmV0dXJuIHZhbDsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIHN2Y191bmdldHUzMihzdHJ1Y3Qga3ZlYyAqaW92KQogewotCXUzMiAqdnAgPSAodTMyICopaW92LT5pb3ZfYmFzZTsKKwlfX2JlMzIgKnZwID0gKF9fYmUzMiAqKWlvdi0+aW92X2Jhc2U7CiAJaW92LT5pb3ZfYmFzZSA9ICh2b2lkICopKHZwIC0gMSk7CiAJaW92LT5pb3ZfbGVuICs9IHNpemVvZigqdnApOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgc3ZjX3B1dHUzMihzdHJ1Y3Qga3ZlYyAqaW92LCB1MzIgdmFsKQorc3RhdGljIGlubGluZSB2b2lkIHN2Y19wdXR1MzIoc3RydWN0IGt2ZWMgKmlvdiwgX19iZTMyIHZhbCkKIHsKLQl1MzIgKnZwID0gaW92LT5pb3ZfYmFzZSArIGlvdi0+aW92X2xlbjsKKwlfX2JlMzIgKnZwID0gaW92LT5pb3ZfYmFzZSArIGlvdi0+aW92X2xlbjsKIAkqdnAgPSB2YWw7Ci0JaW92LT5pb3ZfbGVuICs9IHNpemVvZih1MzIpOworCWlvdi0+aW92X2xlbiArPSBzaXplb2YoX19iZTMyKTsKIH0KIAogCQpAQCAtMTMwLDcgKzE0Nyw3IEBACiAJc2hvcnQJCQlycV9hcmdoaTsJLyogcGFnZXMgYXZhaWxhYmxlIGluIGFyZ3VtZW50IHBhZ2UgbGlzdCAqLwogCXNob3J0CQkJcnFfcmVzdXNlZDsJLyogcGFnZXMgdXNlZCBmb3IgcmVzdWx0ICovCiAKLQl1MzIJCQlycV94aWQ7CQkvKiB0cmFuc21pc3Npb24gaWQgKi8KKwlfX2JlMzIJCQlycV94aWQ7CQkvKiB0cmFuc21pc3Npb24gaWQgKi8KIAl1MzIJCQlycV9wcm9nOwkvKiBwcm9ncmFtIG51bWJlciAqLwogCXUzMgkJCXJxX3ZlcnM7CS8qIHByb2dyYW0gdmVyc2lvbiAqLwogCXUzMgkJCXJxX3Byb2M7CS8qIHByb2NlZHVyZSBudW1iZXIgKi8KQEAgLTEzOSw3ICsxNTYsNyBAQAogCQkJCXJxX3NlY3VyZSAgOiAxOwkvKiBzZWN1cmUgcG9ydCAqLwogCiAKLQlfX3UzMgkJCXJxX2RhZGRyOwkvKiBkZXN0IGFkZHIgb2YgcmVxdWVzdCAtIHJlcGx5IGZyb20gaGVyZSAqLworCV9fYmUzMgkJCXJxX2RhZGRyOwkvKiBkZXN0IGFkZHIgb2YgcmVxdWVzdCAtIHJlcGx5IGZyb20gaGVyZSAqLwogCiAJdm9pZCAqCQkJcnFfYXJncDsJLyogZGVjb2RlZCBhcmd1bWVudHMgKi8KIAl2b2lkICoJCQlycV9yZXNwOwkvKiB4ZHInZCByZXN1bHRzICovCkBAIC0xNjksNyArMTg2LDcgQEAKICAqIENoZWNrIGJ1ZmZlciBib3VuZHMgYWZ0ZXIgZGVjb2RpbmcgYXJndW1lbnRzCiAgKi8KIHN0YXRpYyBpbmxpbmUgaW50Ci14ZHJfYXJnc2l6ZV9jaGVjayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCB1MzIgKnApCit4ZHJfYXJnc2l6ZV9jaGVjayhzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKnApCiB7CiAJY2hhciAqY3AgPSAoY2hhciAqKXA7CiAJc3RydWN0IGt2ZWMgKnZlYyA9ICZycXN0cC0+cnFfYXJnLmhlYWRbMF07CkBAIC0xNzgsNyArMTk1LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBpbnQKLXhkcl9yZXNzaXplX2NoZWNrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqcCkKK3hkcl9yZXNzaXplX2NoZWNrKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCkKIHsKIAlzdHJ1Y3Qga3ZlYyAqdmVjID0gJnJxc3RwLT5ycV9yZXMuaGVhZFswXTsKIAljaGFyICpjcCA9IChjaGFyKilwOwpAQCAtMjQ5LDEwICsyNjYsMTAgQEAKIAl1MzIJCQlwcm90OwkvKiBwcm90b2NvbCAoVURQIG9yIFRDUCkgKi8KIAlzdHJ1Y3Qgc29ja2FkZHJfaW4JYWRkcjsKIAlzdHJ1Y3Qgc3ZjX3NvY2sJCSpzdnNrOwkvKiB3aGVyZSByZXBseSBtdXN0IGdvICovCi0JdTMyCQkJZGFkZHI7CS8qIHdoZXJlIHJlcGx5IG11c3QgY29tZSBmcm9tICovCisJX19iZTMyCQkJZGFkZHI7CS8qIHdoZXJlIHJlcGx5IG11c3QgY29tZSBmcm9tICovCiAJc3RydWN0IGNhY2hlX2RlZmVycmVkX3JlcSBoYW5kbGU7CiAJaW50CQkJYXJnc2xlbjsKLQl1MzIJCQlhcmdzWzBdOworCV9fYmUzMgkJCWFyZ3NbMF07CiB9OwogCiAvKgpAQCAtMjg0LDcgKzMwMSw3IEBACiAJICogQSByZXR1cm4gdmFsdWUgb2YgMCBtZWFucyBkcm9wIHRoZSByZXF1ZXN0LiAKIAkgKiB2c19kaXNwYXRjaCA9PSBOVUxMIG1lYW5zIHVzZSBkZWZhdWx0IGRpc3BhdGNoZXIuCiAJICovCi0JaW50CQkJKCp2c19kaXNwYXRjaCkoc3RydWN0IHN2Y19ycXN0ICosIHUzMiAqKTsKKwlpbnQJCQkoKnZzX2Rpc3BhdGNoKShzdHJ1Y3Qgc3ZjX3Jxc3QgKiwgX19iZTMyICopOwogfTsKIAogLyoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3N2Y2F1dGguaAppbmRleCAyZmUyMDg3Li5hNjYwMTY1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy9zdmNhdXRoLmgKKysrIGIvaW5jbHVkZS9saW51eC9zdW5ycGMvc3ZjYXV0aC5oCkBAIC05NSw3ICs5NSw3IEBACiAJY2hhciAqCW5hbWU7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJaW50CWZsYXZvdXI7Ci0JaW50CSgqYWNjZXB0KShzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxLCB1MzIgKmF1dGhwKTsKKwlpbnQJKCphY2NlcHQpKHN0cnVjdCBzdmNfcnFzdCAqcnEsIF9fYmUzMiAqYXV0aHApOwogCWludAkoKnJlbGVhc2UpKHN0cnVjdCBzdmNfcnFzdCAqcnEpOwogCXZvaWQJKCpkb21haW5fcmVsZWFzZSkoc3RydWN0IGF1dGhfZG9tYWluICopOwogCWludAkoKnNldF9jbGllbnQpKHN0cnVjdCBzdmNfcnFzdCAqcnEpOwpAQCAtMTEyLDcgKzExMiw3IEBACiAjZGVmaW5lCVNWQ19DT01QTEVURQk5CiAKIAotZXh0ZXJuIGludAlzdmNfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqYXV0aHApOworZXh0ZXJuIGludAlzdmNfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqYXV0aHApOwogZXh0ZXJuIGludAlzdmNfYXV0aG9yaXNlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApOwogZXh0ZXJuIGludAlzdmNfc2V0X2NsaWVudChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwKTsKIGV4dGVybiBpbnQJc3ZjX2F1dGhfcmVnaXN0ZXIocnBjX2F1dGhmbGF2b3JfdCBmbGF2b3IsIHN0cnVjdCBhdXRoX29wcyAqYW9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94ZHIuaCBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCmluZGV4IGU2ZDNkMzQuLjk1MzcyM2IgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hkci5oCkBAIC0zMiw3ICszMiw3IEBACiAgKiBzaWRlKSBvciBzdmNfcnFzdCBwb2ludGVyIChzZXJ2ZXIgc2lkZSkuCiAgKiBFbmNvZGUgZnVuY3Rpb25zIGFsd2F5cyBhc3N1bWUgdGhlcmUncyBlbm91Z2ggcm9vbSBpbiB0aGUgYnVmZmVyLgogICovCi10eXBlZGVmIGludAkoKmt4ZHJwcm9jX3QpKHZvaWQgKnJxc3RwLCB1MzIgKmRhdGEsIHZvaWQgKm9iaik7Cit0eXBlZGVmIGludAkoKmt4ZHJwcm9jX3QpKHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaik7CiAKIC8qCiAgKiBCYXNpYyBzdHJ1Y3R1cmUgZm9yIHRyYW5zbWlzc2lvbi9yZWNlcHRpb24gb2YgYSBjbGllbnQgWERSIG1lc3NhZ2UuCkBAIC04OCwxOSArODgsMTkgQEAKIC8qCiAgKiBNaXNjZWxsYW5lb3VzIFhEUiBoZWxwZXIgZnVuY3Rpb25zCiAgKi8KLXUzMiAqCXhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHUzMiAqcCwgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKLXUzMiAqCXhkcl9lbmNvZGVfb3BhcXVlKHUzMiAqcCwgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKLXUzMiAqCXhkcl9lbmNvZGVfc3RyaW5nKHUzMiAqcCwgY29uc3QgY2hhciAqcyk7Ci11MzIgKgl4ZHJfZGVjb2RlX3N0cmluZ19pbnBsYWNlKHUzMiAqcCwgY2hhciAqKnNwLCBpbnQgKmxlbnAsIGludCBtYXhsZW4pOwotdTMyICoJeGRyX2VuY29kZV9uZXRvYmoodTMyICpwLCBjb25zdCBzdHJ1Y3QgeGRyX25ldG9iaiAqKTsKLXUzMiAqCXhkcl9kZWNvZGVfbmV0b2JqKHUzMiAqcCwgc3RydWN0IHhkcl9uZXRvYmogKik7CitfX2JlMzIgKnhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKF9fYmUzMiAqcCwgY29uc3Qgdm9pZCAqcHRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKK19fYmUzMiAqeGRyX2VuY29kZV9vcGFxdWUoX19iZTMyICpwLCBjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBsZW4pOworX19iZTMyICp4ZHJfZW5jb2RlX3N0cmluZyhfX2JlMzIgKnAsIGNvbnN0IGNoYXIgKnMpOworX19iZTMyICp4ZHJfZGVjb2RlX3N0cmluZ19pbnBsYWNlKF9fYmUzMiAqcCwgY2hhciAqKnNwLCBpbnQgKmxlbnAsIGludCBtYXhsZW4pOworX19iZTMyICp4ZHJfZW5jb2RlX25ldG9iaihfX2JlMzIgKnAsIGNvbnN0IHN0cnVjdCB4ZHJfbmV0b2JqICopOworX19iZTMyICp4ZHJfZGVjb2RlX25ldG9iaihfX2JlMzIgKnAsIHN0cnVjdCB4ZHJfbmV0b2JqICopOwogCiB2b2lkCXhkcl9lbmNvZGVfcGFnZXMoc3RydWN0IHhkcl9idWYgKiwgc3RydWN0IHBhZ2UgKiosIHVuc2lnbmVkIGludCwKIAkJCSB1bnNpZ25lZCBpbnQpOwogdm9pZAl4ZHJfaW5saW5lX3BhZ2VzKHN0cnVjdCB4ZHJfYnVmICosIHVuc2lnbmVkIGludCwKIAkJCSBzdHJ1Y3QgcGFnZSAqKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBpbnQpOwogCi1zdGF0aWMgaW5saW5lIHUzMiAqeGRyX2VuY29kZV9hcnJheSh1MzIgKnAsIGNvbnN0IHZvaWQgKnMsIHVuc2lnbmVkIGludCBsZW4pCitzdGF0aWMgaW5saW5lIF9fYmUzMiAqeGRyX2VuY29kZV9hcnJheShfX2JlMzIgKnAsIGNvbnN0IHZvaWQgKnMsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJcmV0dXJuIHhkcl9lbmNvZGVfb3BhcXVlKHAsIHMsIGxlbik7CiB9CkBAIC0xMDgsMTYgKzEwOCwxNiBAQAogLyoKICAqIERlY29kZSA2NGJpdCBxdWFudGl0aWVzIChORlN2MyBzdXBwb3J0KQogICovCi1zdGF0aWMgaW5saW5lIHUzMiAqCi14ZHJfZW5jb2RlX2h5cGVyKHUzMiAqcCwgX191NjQgdmFsKQorc3RhdGljIGlubGluZSBfX2JlMzIgKgoreGRyX2VuY29kZV9oeXBlcihfX2JlMzIgKnAsIF9fdTY0IHZhbCkKIHsKIAkqcCsrID0gaHRvbmwodmFsID4+IDMyKTsKIAkqcCsrID0gaHRvbmwodmFsICYgMHhGRkZGRkZGRik7CiAJcmV0dXJuIHA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyICoKLXhkcl9kZWNvZGVfaHlwZXIodTMyICpwLCBfX3U2NCAqdmFscCkKK3N0YXRpYyBpbmxpbmUgX19iZTMyICoKK3hkcl9kZWNvZGVfaHlwZXIoX19iZTMyICpwLCBfX3U2NCAqdmFscCkKIHsKIAkqdmFscCAgPSAoKF9fdTY0KSBudG9obCgqcCsrKSkgPDwgMzI7CiAJKnZhbHAgfD0gbnRvaGwoKnArKyk7CkBAIC0xMjgsNyArMTI4LDcgQEAKICAqIEFkanVzdCBrdmVjIHRvIHJlZmxlY3QgZW5kIG9mIHhkcidlZCBkYXRhIChSUEMgY2xpZW50IFhEUikKICAqLwogc3RhdGljIGlubGluZSBpbnQKLXhkcl9hZGp1c3RfaW92ZWMoc3RydWN0IGt2ZWMgKmlvdiwgdTMyICpwKQoreGRyX2FkanVzdF9pb3ZlYyhzdHJ1Y3Qga3ZlYyAqaW92LCBfX2JlMzIgKnApCiB7CiAJcmV0dXJuIGlvdi0+aW92X2xlbiA9ICgodTggKikgcCAtICh1OCAqKSBpb3YtPmlvdl9iYXNlKTsKIH0KQEAgLTE4MCwxOSArMTgwLDE5IEBACiAgKiBQcm92aWRlIHNvbWUgc2ltcGxlIHRvb2xzIGZvciBYRFIgYnVmZmVyIG92ZXJmbG93LWNoZWNraW5nIGV0Yy4KICAqLwogc3RydWN0IHhkcl9zdHJlYW0gewotCXVpbnQzMl90ICpwOwkJLyogc3RhcnQgb2YgYXZhaWxhYmxlIGJ1ZmZlciAqLworCV9fYmUzMiAqcDsJCS8qIHN0YXJ0IG9mIGF2YWlsYWJsZSBidWZmZXIgKi8KIAlzdHJ1Y3QgeGRyX2J1ZiAqYnVmOwkvKiBYRFIgYnVmZmVyIHRvIHJlYWQvd3JpdGUgKi8KIAotCXVpbnQzMl90ICplbmQ7CQkvKiBlbmQgb2YgYXZhaWxhYmxlIGJ1ZmZlciBzcGFjZSAqLworCV9fYmUzMiAqZW5kOwkJLyogZW5kIG9mIGF2YWlsYWJsZSBidWZmZXIgc3BhY2UgKi8KIAlzdHJ1Y3Qga3ZlYyAqaW92OwkvKiBwb2ludGVyIHRvIHRoZSBjdXJyZW50IGt2ZWMgKi8KIH07CiAKLWV4dGVybiB2b2lkIHhkcl9pbml0X2VuY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1aW50MzJfdCAqcCk7Ci1leHRlcm4gdWludDMyX3QgKnhkcl9yZXNlcnZlX3NwYWNlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpOworZXh0ZXJuIHZvaWQgeGRyX2luaXRfZW5jb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCB4ZHJfYnVmICpidWYsIF9fYmUzMiAqcCk7CitleHRlcm4gX19iZTMyICp4ZHJfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXplX3QgbmJ5dGVzKTsKIGV4dGVybiB2b2lkIHhkcl93cml0ZV9wYWdlcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLAogCQl1bnNpZ25lZCBpbnQgYmFzZSwgdW5zaWduZWQgaW50IGxlbik7Ci1leHRlcm4gdm9pZCB4ZHJfaW5pdF9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc3RydWN0IHhkcl9idWYgKmJ1ZiwgdWludDMyX3QgKnApOwotZXh0ZXJuIHVpbnQzMl90ICp4ZHJfaW5saW5lX2RlY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXplX3QgbmJ5dGVzKTsKK2V4dGVybiB2b2lkIHhkcl9pbml0X2RlY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCBfX2JlMzIgKnApOworZXh0ZXJuIF9fYmUzMiAqeGRyX2lubGluZV9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcyk7CiBleHRlcm4gdm9pZCB4ZHJfcmVhZF9wYWdlcyhzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCB1bnNpZ25lZCBpbnQgbGVuKTsKIGV4dGVybiB2b2lkIHhkcl9lbnRlcl9wYWdlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHVuc2lnbmVkIGludCBsZW4pOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9pbmNsdWRlL2xpbnV4L3N1bnJwYy94cHJ0LmgKaW5kZXggYmRlYmE4NS4uNmNmNjI2NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zdW5ycGMveHBydC5oCisrKyBiL2luY2x1ZGUvbGludXgvc3VucnBjL3hwcnQuaApAQCAtNzksNyArNzksNyBAQAogCSAqIFRoaXMgaXMgdGhlIHByaXZhdGUgcGFydAogCSAqLwogCXN0cnVjdCBycGNfdGFzayAqCXJxX3Rhc2s7CS8qIFJQQyB0YXNrIGRhdGEgKi8KLQlfX3UzMgkJCXJxX3hpZDsJCS8qIHJlcXVlc3QgWElEICovCisJX19iZTMyCQkJcnFfeGlkOwkJLyogcmVxdWVzdCBYSUQgKi8KIAlpbnQJCQlycV9jb25nOwkvKiBoYXMgaW5jcmVtZW50ZWQgeHBydC0+Y29uZyAqLwogCWludAkJCXJxX3JlY2VpdmVkOwkvKiByZWNlaXZlIGNvbXBsZXRlZCAqLwogCXUzMgkJCXJxX3NlcW5vOwkvKiBnc3Mgc2VxIG5vLiB1c2VkIG9uIHJlcS4gKi8KQEAgLTE3MSw5ICsxNzEsOSBAQAogCS8qCiAJICogU3RhdGUgb2YgVENQIHJlcGx5IHJlY2VpdmUgc3R1ZmYKIAkgKi8KLQl1MzIJCQl0Y3BfcmVjbSwJLyogRnJhZ21lbnQgaGVhZGVyICovCi0JCQkJdGNwX3hpZCwJLyogQ3VycmVudCBYSUQgKi8KLQkJCQl0Y3BfcmVjbGVuLAkvKiBmcmFnbWVudCBsZW5ndGggKi8KKwlfX2JlMzIJCQl0Y3BfcmVjbSwJLyogRnJhZ21lbnQgaGVhZGVyICovCisJCQkJdGNwX3hpZDsJLyogQ3VycmVudCBYSUQgKi8KKwl1MzIJCQl0Y3BfcmVjbGVuLAkvKiBmcmFnbWVudCBsZW5ndGggKi8KIAkJCQl0Y3Bfb2Zmc2V0OwkvKiBmcmFnbWVudCBvZmZzZXQgKi8KIAl1bnNpZ25lZCBsb25nCQl0Y3BfY29waWVkLAkvKiBjb3BpZWQgdG8gcmVxdWVzdCAqLwogCQkJCXRjcF9mbGFnczsKQEAgLTI1Myw3ICsyNTMsNyBAQAogc3RydWN0IHJwY194cHJ0ICoJeHBydF9nZXQoc3RydWN0IHJwY194cHJ0ICp4cHJ0KTsKIHZvaWQJCQl4cHJ0X3B1dChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOwogCi1zdGF0aWMgaW5saW5lIHUzMiAqeHBydF9za2lwX3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCB1MzIgKnApCitzdGF0aWMgaW5saW5lIF9fYmUzMiAqeHBydF9za2lwX3RyYW5zcG9ydF9oZWFkZXIoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgKnApCiB7CiAJcmV0dXJuIHAgKyB4cHJ0LT50c2hfc2l6ZTsKIH0KQEAgLTI2OCw3ICsyNjgsNyBAQAogdm9pZAkJCXhwcnRfd3JpdGVfc3BhY2Uoc3RydWN0IHJwY194cHJ0ICp4cHJ0KTsKIHZvaWQJCQl4cHJ0X3VwZGF0ZV9ydHQoc3RydWN0IHJwY190YXNrICp0YXNrKTsKIHZvaWQJCQl4cHJ0X2FkanVzdF9jd25kKHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IHJlc3VsdCk7Ci1zdHJ1Y3QgcnBjX3Jxc3QgKgl4cHJ0X2xvb2t1cF9ycXN0KHN0cnVjdCBycGNfeHBydCAqeHBydCwgdTMyIHhpZCk7CitzdHJ1Y3QgcnBjX3Jxc3QgKgl4cHJ0X2xvb2t1cF9ycXN0KHN0cnVjdCBycGNfeHBydCAqeHBydCwgX19iZTMyIHhpZCk7CiB2b2lkCQkJeHBydF9jb21wbGV0ZV9ycXN0KHN0cnVjdCBycGNfdGFzayAqdGFzaywgaW50IGNvcGllZCk7CiB2b2lkCQkJeHBydF9yZWxlYXNlX3Jxc3RfY29uZyhzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogdm9pZAkJCXhwcnRfZGlzY29ubmVjdChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeW5jbGluay5oIGIvaW5jbHVkZS9saW51eC9zeW5jbGluay5oCmluZGV4IDA1NzdmNTIuLmM4YjA0MjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3luY2xpbmsuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5bmNsaW5rLmgKQEAgLTEsNyArMSw3IEBACiAvKgogICogU3luY0xpbmsgTXVsdGlwcm90b2NvbCBTZXJpYWwgQWRhcHRlciBEcml2ZXIKICAqCi0gKiAkSWQ6IHN5bmNsaW5rLmgsdiAzLjEzIDIwMDYvMDUvMjMgMTg6MjU6MDYgcGF1bGtmIEV4cCAkCisgKiAkSWQ6IHN5bmNsaW5rLmgsdiAzLjE0IDIwMDYvMDcvMTcgMjA6MTU6NDMgcGF1bGtmIEV4cCAkCiAgKgogICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDAgYnkgTWljcm9nYXRlIENvcnBvcmF0aW9uCiAgKgpAQCAtMTI0LDYgKzEyNCw4IEBACiAKICNkZWZpbmUgTUdTTF9NT0RFX0FTWU5DCQkxCiAjZGVmaW5lIE1HU0xfTU9ERV9IRExDCQkyCisjZGVmaW5lIE1HU0xfTU9ERV9NT05PU1lOQwkzCisjZGVmaW5lIE1HU0xfTU9ERV9CSVNZTkMJNAogI2RlZmluZSBNR1NMX01PREVfUkFXCQk2CiAKICNkZWZpbmUgTUdTTF9CVVNfVFlQRV9JU0EJMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCmluZGV4IDNmMGY3MTYuLjJkMWMzZDVjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3N5c2NhbGxzLmgKKysrIGIvaW5jbHVkZS9saW51eC9zeXNjYWxscy5oCkBAIC01OTcsNiArNTk3LDYgQEAKIAkJCQkgICAgc2l6ZV90IF9fdXNlciAqbGVuX3B0cik7CiBhc21saW5rYWdlIGxvbmcgc3lzX3NldF9yb2J1c3RfbGlzdChzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCBfX3VzZXIgKmhlYWQsCiAJCQkJICAgIHNpemVfdCBsZW4pOwotYXNtbGlua2FnZSBsb25nIHN5c19nZXRjcHUodW5zaWduZWQgKmNwdSwgdW5zaWduZWQgKm5vZGUsIHN0cnVjdCBnZXRjcHVfY2FjaGUgKmNhY2hlKTsKK2FzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0Y3B1KHVuc2lnbmVkIF9fdXNlciAqY3B1LCB1bnNpZ25lZCBfX3VzZXIgKm5vZGUsIHN0cnVjdCBnZXRjcHVfY2FjaGUgX191c2VyICpjYWNoZSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zeXNycS5oIGIvaW5jbHVkZS9saW51eC9zeXNycS5oCmluZGV4IDQ4MTJmZjYuLmU2NTdlNTIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3lzcnEuaAorKysgYi9pbmNsdWRlL2xpbnV4L3N5c3JxLmgKQEAgLTExLDYgKzExLDggQEAKICAqCWJhc2VkIHVwb24gZGlzY3VzaW9ucyBpbiBpcmM6Ly9pcmMub3BlbnByb2plY3RzLm5ldC8ja2VybmVsbmV3YmllcwogICovCiAKKyNpZm5kZWYgX0xJTlVYX1NZU1JRX0gKKyNkZWZpbmUgX0xJTlVYX1NZU1JRX0gKIAogc3RydWN0IHB0X3JlZ3M7CiBzdHJ1Y3QgdHR5X3N0cnVjdDsKQEAgLTU3LDMgKzU5LDUgQEAKICNkZWZpbmUgdW5yZWdpc3Rlcl9zeXNycV9rZXkoaWcsbm9yZSkgX19yZXRlcnIoKQogCiAjZW5kaWYKKworI2VuZGlmIC8qIF9MSU5VWF9TWVNSUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0cy5oIGIvaW5jbHVkZS9saW51eC90YXNrc3RhdHMuaAppbmRleCBmMWNiNmNkLi40NTI0ODgwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Rhc2tzdGF0cy5oCisrKyBiL2luY2x1ZGUvbGludXgvdGFza3N0YXRzLmgKQEAgLTIsNiArMiw3IEBACiAgKgogICogQ29weXJpZ2h0IChDKSBTaGFpbGFiaCBOYWdhciwgSUJNIENvcnAuIDIwMDYKICAqICAgICAgICAgICAoQykgQmFsYmlyIFNpbmdoLCAgIElCTSBDb3JwLiAyMDA2CisgKiAgICAgICAgICAgKEMpIEpheSBMYW4sICAgICAgICBTR0ksIDIwMDYKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgdGhlIHRlcm1zIG9mIHZlcnNpb24gMi4xIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTI5LDE2ICszMCwyNSBAQAogICoJYykgYWRkIG5ldyBmaWVsZHMgYWZ0ZXIgdmVyc2lvbiBjb21tZW50OyBtYWludGFpbiA2NC1iaXQgYWxpZ25tZW50CiAgKi8KIAotI2RlZmluZSBUQVNLU1RBVFNfVkVSU0lPTgkxCisKKyNkZWZpbmUgVEFTS1NUQVRTX1ZFUlNJT04JMgorI2RlZmluZSBUU19DT01NX0xFTgkJMzIJLyogc2hvdWxkIGJlID49IFRBU0tfQ09NTV9MRU4KKwkJCQkJICogaW4gbGludXgvc2NoZWQuaCAqLwogCiBzdHJ1Y3QgdGFza3N0YXRzIHsKIAotCS8qIFZlcnNpb24gMSAqLworCS8qIFRoZSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIHN0cnVjdC4gVGhpcyBmaWVsZCBpcyBhbHdheXMgc2V0IHRvCisJICogVEFLU1RBVFNfVkVSU0lPTiwgd2hpY2ggaXMgZGVmaW5lZCBpbiA8bGludXgvdGFza3N0YXRzLmg+LgorCSAqIEVhY2ggdGltZSB0aGUgc3RydWN0IGlzIGNoYW5nZWQsIHRoZSB2YWx1ZSBzaG91bGQgYmUgaW5jcmVtZW50ZWQuCisJICovCiAJX191MTYJdmVyc2lvbjsKLQlfX3UxNglwYWRkaW5nWzNdOwkvKiBVc2Vyc3BhY2Ugc2hvdWxkIG5vdCBpbnRlcnByZXQgdGhlIHBhZGRpbmcKLQkJCQkgKiBmaWVsZCB3aGljaCBjYW4gYmUgcmVwbGFjZWQgYnkgdXNlZnVsCi0JCQkJICogZmllbGRzIGlmIHN0cnVjdCB0YXNrc3RhdHMgaXMgZXh0ZW5kZWQuCi0JCQkJICovCisJX191MzIJYWNfZXhpdGNvZGU7CQkvKiBFeGl0IHN0YXR1cyAqLworCisJLyogVGhlIGFjY291bnRpbmcgZmxhZ3Mgb2YgYSB0YXNrIGFzIGRlZmluZWQgaW4gPGxpbnV4L2FjY3QuaD4KKwkgKiBEZWZpbmVkIHZhbHVlcyBhcmUgQUZPUkssIEFTVSwgQUNPTVBBVCwgQUNPUkUsIGFuZCBBWFNJRy4KKwkgKi8KKwlfX3U4CWFjX2ZsYWc7CQkvKiBSZWNvcmQgZmxhZ3MgKi8KKwlfX3U4CWFjX25pY2U7CQkvKiB0YXNrX25pY2UgKi8KIAogCS8qIERlbGF5IGFjY291bnRpbmcgZmllbGRzIHN0YXJ0CiAJICoKQEAgLTg4LDYgKzk4LDQ4IEBACiAJX191NjQJY3B1X3J1bl92aXJ0dWFsX3RvdGFsOwogCS8qIERlbGF5IGFjY291bnRpbmcgZmllbGRzIGVuZCAqLwogCS8qIHZlcnNpb24gMSBlbmRzIGhlcmUgKi8KKworCS8qIEJhc2ljIEFjY291bnRpbmcgRmllbGRzIHN0YXJ0ICovCisJY2hhcglhY19jb21tW1RTX0NPTU1fTEVOXTsJLyogQ29tbWFuZCBuYW1lICovCisJX191OAlhY19zY2hlZDsJCS8qIFNjaGVkdWxpbmcgZGlzY2lwbGluZSAqLworCV9fdTgJYWNfcGFkWzNdOworCV9fdTMyCWFjX3VpZDsJCQkvKiBVc2VyIElEICovCisJX191MzIJYWNfZ2lkOwkJCS8qIEdyb3VwIElEICovCisJX191MzIJYWNfcGlkOwkJCS8qIFByb2Nlc3MgSUQgKi8KKwlfX3UzMglhY19wcGlkOwkJLyogUGFyZW50IHByb2Nlc3MgSUQgKi8KKwlfX3UzMglhY19idGltZTsJCS8qIEJlZ2luIHRpbWUgW3NlYyBzaW5jZSAxOTcwXSAqLworCV9fdTY0CWFjX2V0aW1lOwkJLyogRWxhcHNlZCB0aW1lIFt1c2VjXSAqLworCV9fdTY0CWFjX3V0aW1lOwkJLyogVXNlciBDUFUgdGltZSBbdXNlY10gKi8KKwlfX3U2NAlhY19zdGltZTsJCS8qIFNZc3RlbSBDUFUgdGltZSBbdXNlY10gKi8KKwlfX3U2NAlhY19taW5mbHQ7CQkvKiBNaW5vciBQYWdlIEZhdWx0IENvdW50ICovCisJX191NjQJYWNfbWFqZmx0OwkJLyogTWFqb3IgUGFnZSBGYXVsdCBDb3VudCAqLworCS8qIEJhc2ljIEFjY291bnRpbmcgRmllbGRzIGVuZCAqLworCisgCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIHN0YXJ0ICovCisJLyogQWNjdW11bGF0ZWQgUlNTIHVzYWdlIGluIGR1cmF0aW9uIG9mIGEgdGFzaywgaW4gTUJ5dGVzLXVzZWNzLgorCSAqIFRoZSBjdXJyZW50IHJzcyB1c2FnZSBpcyBhZGRlZCB0byB0aGlzIGNvdW50ZXIgZXZlcnkgdGltZQorCSAqIGEgdGljayBpcyBjaGFyZ2VkIHRvIGEgdGFzaydzIHN5c3RlbSB0aW1lLiBTbywgYXQgdGhlIGVuZCB3ZQorCSAqIHdpbGwgaGF2ZSBtZW1vcnkgdXNhZ2UgbXVsdGlwbGllZCBieSBzeXN0ZW0gdGltZS4gVGh1cyBhbgorCSAqIGF2ZXJhZ2UgdXNhZ2UgcGVyIHN5c3RlbSB0aW1lIHVuaXQgY2FuIGJlIGNhbGN1bGF0ZWQuCisJICovCisgCV9fdTY0CWNvcmVtZW07CQkvKiBhY2N1bXVsYXRlZCBSU1MgdXNhZ2UgaW4gTUItdXNlYyAqLworCS8qIEFjY3VtdWxhdGVkIHZpcnR1YWwgbWVtb3J5IHVzYWdlIGluIGR1cmF0aW9uIG9mIGEgdGFzay4KKwkgKiBTYW1lIGFzIGFjY3RfcnNzX21lbTEgYWJvdmUgZXhjZXB0IHRoYXQgd2Uga2VlcCB0cmFjayBvZiBWTSB1c2FnZS4KKwkgKi8KKyAJX191NjQJdmlydG1lbTsJCS8qIGFjY3VtdWxhdGVkIFZNICB1c2FnZSBpbiBNQi11c2VjICovCisKKwkvKiBIaWdoIHdhdGVybWFyayBvZiBSU1MgYW5kIHZpcnR1YWwgbWVtb3J5IHVzYWdlIGluIGR1cmF0aW9uIG9mCisJICogYSB0YXNrLCBpbiBLQnl0ZXMuCisJICovCisgCV9fdTY0CWhpd2F0ZXJfcnNzOwkJLyogSGlnaC13YXRlcm1hcmsgb2YgUlNTIHVzYWdlLCBpbiBLQiAqLworIAlfX3U2NAloaXdhdGVyX3ZtOwkJLyogSGlnaC13YXRlciBWTSB1c2FnZSwgaW4gS0IgKi8KKworCS8qIFRoZSBmb2xsb3dpbmcgZm91ciBmaWVsZHMgYXJlIEkvTyBzdGF0aXN0aWNzIG9mIGEgdGFzay4gKi8KKyAJX191NjQJcmVhZF9jaGFyOwkJLyogYnl0ZXMgcmVhZCAqLworIAlfX3U2NAl3cml0ZV9jaGFyOwkJLyogYnl0ZXMgd3JpdHRlbiAqLworIAlfX3U2NAlyZWFkX3N5c2NhbGxzOwkJLyogcmVhZCBzeXNjYWxscyAqLworIAlfX3U2NAl3cml0ZV9zeXNjYWxsczsJCS8qIHdyaXRlIHN5c2NhbGxzICovCisgCS8qIEV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzIGVuZCAqLwogfTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RjcC5oIGIvaW5jbHVkZS9saW51eC90Y3AuaAppbmRleCA4ZWJmNDk3Li4wZTA1OGEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RjcC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGNwLmgKQEAgLTIxLDEwICsyMSwxMCBAQAogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KIAogc3RydWN0IHRjcGhkciB7Ci0JX191MTYJc291cmNlOwotCV9fdTE2CWRlc3Q7Ci0JX191MzIJc2VxOwotCV9fdTMyCWFja19zZXE7CisJX19iZTE2CXNvdXJjZTsKKwlfX2JlMTYJZGVzdDsKKwlfX2JlMzIJc2VxOworCV9fYmUzMglhY2tfc2VxOwogI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQogCV9fdTE2CXJlczE6NCwKIAkJZG9mZjo0LApAQCAtNTAsOSArNTAsOSBAQAogI2Vsc2UKICNlcnJvcgkiQWRqdXN0IHlvdXIgPGFzbS9ieXRlb3JkZXIuaD4gZGVmaW5lcyIKICNlbmRpZgkKLQlfX3UxNgl3aW5kb3c7Ci0JX191MTYJY2hlY2s7Ci0JX191MTYJdXJnX3B0cjsKKwlfX2JlMTYJd2luZG93OworCV9fYmUxNgljaGVjazsKKwlfX2JlMTYJdXJnX3B0cjsKIH07CiAKIC8qCkBAIC02Miw3ICs2Miw3IEBACiAgKi8KIHVuaW9uIHRjcF93b3JkX2hkciB7IAogCXN0cnVjdCB0Y3BoZHIgaGRyOwotCV9fdTMyIAkJICB3b3Jkc1s1XTsKKwlfX2JlMzIgCQkgIHdvcmRzWzVdOwogfTsgCiAKICNkZWZpbmUgdGNwX2ZsYWdfd29yZCh0cCkgKCAoKHVuaW9uIHRjcF93b3JkX2hkciAqKSh0cCkpLT53b3JkcyBbM10pIApAQCAtMTY2LDYgKzE2NiwxMSBAQAogI2luY2x1ZGUgPG5ldC9pbmV0X3RpbWV3YWl0X3NvY2suaD4KIAogLyogVGhpcyBkZWZpbmVzIGEgc2VsZWN0aXZlIGFja25vd2xlZGdlbWVudCBibG9jay4gKi8KK3N0cnVjdCB0Y3Bfc2Fja19ibG9ja193aXJlIHsKKwlfX2JlMzIJc3RhcnRfc2VxOworCV9fYmUzMgllbmRfc2VxOworfTsKKwogc3RydWN0IHRjcF9zYWNrX2Jsb2NrIHsKIAlfX3UzMglzdGFydF9zZXE7CiAJX191MzIJZW5kX3NlcTsKQEAgLTIxMSw3ICsyMTYsNyBAQAogICoJSGVhZGVyIHByZWRpY3Rpb24gZmxhZ3MKICAqCTB4NT8xMCA8PCAxNiArIHNuZF93bmQgaW4gbmV0IGJ5dGUgb3JkZXIKICAqLwotCV9fdTMyCXByZWRfZmxhZ3M7CisJX19iZTMyCXByZWRfZmxhZ3M7CiAKIC8qCiAgKglSRkM3OTMgdmFyaWFibGVzIGJ5IHRoZWlyIHByb3BlciBuYW1lcy4gVGhpcyBtZWFucyB5b3UgY2FuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3RpbWV4LmggYi9pbmNsdWRlL2xpbnV4L3RpbWV4LmgKaW5kZXggZDU0M2QzOC4uMDQ5ZGZlNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90aW1leC5oCisrKyBiL2luY2x1ZGUvbGludXgvdGltZXguaApAQCAtNjksMzQgKzY5LDI4IEBACiAgKiB6ZXJvIHRvIE1BWFRDLCB0aGUgUExMIHdpbGwgY29udmVyZ2UgaW4gMTUgbWludXRlcyB0byAxNiBob3VycywKICAqIHJlc3BlY3RpdmVseS4KICAqLwotI2RlZmluZSBTSElGVF9LRyA2CQkvKiBwaGFzZSBmYWN0b3IgKHNoaWZ0KSAqLwotI2RlZmluZSBTSElGVF9LRiAxNgkJLyogUExMIGZyZXF1ZW5jeSBmYWN0b3IgKHNoaWZ0KSAqLwotI2RlZmluZSBTSElGVF9LSCAyCQkvKiBGTEwgZnJlcXVlbmN5IGZhY3RvciAoc2hpZnQpICovCi0jZGVmaW5lIE1BWFRDIDYJCQkvKiBtYXhpbXVtIHRpbWUgY29uc3RhbnQgKHNoaWZ0KSAqLworI2RlZmluZSBTSElGVF9QTEwJNAkvKiBQTEwgZnJlcXVlbmN5IGZhY3RvciAoc2hpZnQpICovCisjZGVmaW5lIFNISUZUX0ZMTAkyCS8qIEZMTCBmcmVxdWVuY3kgZmFjdG9yIChzaGlmdCkgKi8KKyNkZWZpbmUgTUFYVEMJCTEwCS8qIG1heGltdW0gdGltZSBjb25zdGFudCAoc2hpZnQpICovCiAKIC8qCi0gKiBUaGUgU0hJRlRfU0NBTEUgZGVmaW5lIGVzdGFibGlzaGVzIHRoZSBkZWNpbWFsIHBvaW50IG9mIHRoZSB0aW1lX3BoYXNlCi0gKiB2YXJpYWJsZSB3aGljaCBzZXJ2ZXMgYXMgYW4gZXh0ZW5zaW9uIHRvIHRoZSBsb3ctb3JkZXIgYml0cyBvZiB0aGUKLSAqIHN5c3RlbSBjbG9jayB2YXJpYWJsZS4gVGhlIFNISUZUX1VQREFURSBkZWZpbmUgZXN0YWJsaXNoZXMgdGhlIGRlY2ltYWwKLSAqIHBvaW50IG9mIHRoZSB0aW1lX29mZnNldCB2YXJpYWJsZSB3aGljaCByZXByZXNlbnRzIHRoZSBjdXJyZW50IG9mZnNldAotICogd2l0aCByZXNwZWN0IHRvIHN0YW5kYXJkIHRpbWUuIFRoZSBGSU5FTlNFQyBkZWZpbmUgcmVwcmVzZW50cyAxIG5zZWMgaW4KLSAqIHNjYWxlZCB1bml0cy4KKyAqIFRoZSBTSElGVF9VUERBVEUgZGVmaW5lIGVzdGFibGlzaGVzIHRoZSBkZWNpbWFsIHBvaW50IG9mIHRoZQorICogdGltZV9vZmZzZXQgdmFyaWFibGUgd2hpY2ggcmVwcmVzZW50cyB0aGUgY3VycmVudCBvZmZzZXQgd2l0aAorICogcmVzcGVjdCB0byBzdGFuZGFyZCB0aW1lLgogICoKICAqIFNISUZUX1VTRUMgZGVmaW5lcyB0aGUgc2NhbGluZyAoc2hpZnQpIG9mIHRoZSB0aW1lX2ZyZXEgYW5kCiAgKiB0aW1lX3RvbGVyYW5jZSB2YXJpYWJsZXMsIHdoaWNoIHJlcHJlc2VudCB0aGUgY3VycmVudCBmcmVxdWVuY3kKICAqIG9mZnNldCBhbmQgbWF4aW11bSBmcmVxdWVuY3kgdG9sZXJhbmNlLgotICoKLSAqIEZJTkVOU0VDIGlzIDEgbnMgaW4gU0hJRlRfVVBEQVRFIHVuaXRzIG9mIHRoZSB0aW1lX3BoYXNlIHZhcmlhYmxlLgogICovCi0jZGVmaW5lIFNISUZUX1NDQUxFIDIyCQkvKiBwaGFzZSBzY2FsZSAoc2hpZnQpICovCi0jZGVmaW5lIFNISUZUX1VQREFURSAoU0hJRlRfS0cgKyBNQVhUQykgLyogdGltZSBvZmZzZXQgc2NhbGUgKHNoaWZ0KSAqLworI2RlZmluZSBTSElGVF9VUERBVEUgKFNISUZUX0haICsgMSkgLyogdGltZSBvZmZzZXQgc2NhbGUgKHNoaWZ0KSAqLwogI2RlZmluZSBTSElGVF9VU0VDIDE2CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IHNjYWxlIChzaGlmdCkgKi8KLSNkZWZpbmUgRklORU5TRUMgKDFMIDw8IChTSElGVF9TQ0FMRSAtIDEwKSkgLyogfjEgbnMgaW4gcGhhc2UgdW5pdHMgKi8KKyNkZWZpbmUgU0hJRlRfTlNFQyAxMgkJLyoga2VybmVsIGZyZXF1ZW5jeSBvZmZzZXQgc2NhbGUgKi8KIAogI2RlZmluZSBNQVhQSEFTRSA1MTIwMDBMICAgICAgICAvKiBtYXggcGhhc2UgZXJyb3IgKHVzKSAqLwogI2RlZmluZSBNQVhGUkVRICg1MTJMIDw8IFNISUZUX1VTRUMpICAvKiBtYXggZnJlcXVlbmN5IGVycm9yIChwcG0pICovCi0jZGVmaW5lIE1JTlNFQyAxNkwgICAgICAgICAgICAgIC8qIG1pbiBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKHMpICovCi0jZGVmaW5lIE1BWFNFQyAxMjAwTCAgICAgICAgICAgIC8qIG1heCBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKHMpICovCisjZGVmaW5lIE1BWEZSRVFfTlNFQyAoNTEyMDAwTCA8PCBTSElGVF9OU0VDKSAvKiBtYXggZnJlcXVlbmN5IGVycm9yIChwcGIpICovCisjZGVmaW5lIE1JTlNFQyAyNTYJCS8qIG1pbiBpbnRlcnZhbCBiZXR3ZWVuIHVwZGF0ZXMgKHMpICovCisjZGVmaW5lIE1BWFNFQyAyMDQ4CQkvKiBtYXggaW50ZXJ2YWwgYmV0d2VlbiB1cGRhdGVzIChzKSAqLwogI2RlZmluZQlOVFBfUEhBU0VfTElNSVQJKE1BWFBIQVNFIDw8IDUpCS8qIGJleW9uZCBtYXguIGRpc3BlcnNpb24gKi8KIAogLyoKQEAgLTIwNCwzMyArMTk4LDE1IEBACiAvKgogICogcGhhc2UtbG9jayBsb29wIHZhcmlhYmxlcwogICovCi1leHRlcm4gaW50IHRpbWVfc3RhdGU7CQkvKiBjbG9jayBzdGF0dXMgKi8KIGV4dGVybiBpbnQgdGltZV9zdGF0dXM7CQkvKiBjbG9jayBzeW5jaHJvbml6YXRpb24gc3RhdHVzIGJpdHMgKi8KLWV4dGVybiBsb25nIHRpbWVfb2Zmc2V0OwkvKiB0aW1lIGFkanVzdG1lbnQgKHVzKSAqLwotZXh0ZXJuIGxvbmcgdGltZV9jb25zdGFudDsJLyogcGxsIHRpbWUgY29uc3RhbnQgKi8KLWV4dGVybiBsb25nIHRpbWVfdG9sZXJhbmNlOwkvKiBmcmVxdWVuY3kgdG9sZXJhbmNlIChwcG0pICovCi1leHRlcm4gbG9uZyB0aW1lX3ByZWNpc2lvbjsJLyogY2xvY2sgcHJlY2lzaW9uICh1cykgKi8KIGV4dGVybiBsb25nIHRpbWVfbWF4ZXJyb3I7CS8qIG1heGltdW0gZXJyb3IgKi8KIGV4dGVybiBsb25nIHRpbWVfZXN0ZXJyb3I7CS8qIGVzdGltYXRlZCBlcnJvciAqLwogCiBleHRlcm4gbG9uZyB0aW1lX2ZyZXE7CQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgcHBtKSAqLwotZXh0ZXJuIGxvbmcgdGltZV9yZWZ0aW1lOwkvKiB0aW1lIGF0IGxhc3QgYWRqdXN0bWVudCAocykgKi8KIAogZXh0ZXJuIGxvbmcgdGltZV9hZGp1c3Q7CS8qIFRoZSBhbW91bnQgb2YgYWRqdGltZSBsZWZ0ICovCi1leHRlcm4gbG9uZyB0aW1lX25leHRfYWRqdXN0OwkvKiBWYWx1ZSBmb3IgdGltZV9hZGp1c3QgYXQgbmV4dCB0aWNrICovCiAKLS8qKgotICogbnRwX2NsZWFyIC0gQ2xlYXJzIHRoZSBOVFAgc3RhdGUgdmFyaWFibGVzCi0gKgotICogTXVzdCBiZSBjYWxsZWQgd2hpbGUgaG9sZGluZyBhIHdyaXRlIG9uIHRoZSB4dGltZV9sb2NrCi0gKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCBudHBfY2xlYXIodm9pZCkKLXsKLQl0aW1lX2FkanVzdCA9IDA7CQkvKiBzdG9wIGFjdGl2ZSBhZGp0aW1lKCkgKi8KLQl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOwotCXRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7Ci0JdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKLX0KK2V4dGVybiB2b2lkIG50cF9jbGVhcih2b2lkKTsKIAogLyoqCiAgKiBudHBfc3luY2VkIC0gUmV0dXJucyAxIGlmIHRoZSBOVFAgc3RhdHVzIGlzIG5vdCBVTlNZTkMKQEAgLTI5NCwxMSArMjcwLDE1IEBACiBleHRlcm4gdm9pZCB1bnJlZ2lzdGVyX3RpbWVfaW50ZXJwb2xhdG9yKHN0cnVjdCB0aW1lX2ludGVycG9sYXRvciAqKTsKIGV4dGVybiB2b2lkIHRpbWVfaW50ZXJwb2xhdG9yX3Jlc2V0KHZvaWQpOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdGltZV9pbnRlcnBvbGF0b3JfZ2V0X29mZnNldCh2b2lkKTsKK2V4dGVybiB2b2lkIHRpbWVfaW50ZXJwb2xhdG9yX3VwZGF0ZShsb25nIGRlbHRhX25zZWMpOwogCiAjZWxzZSAvKiAhQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTiAqLwogCi1zdGF0aWMgaW5saW5lIHZvaWQKLXRpbWVfaW50ZXJwb2xhdG9yX3Jlc2V0KHZvaWQpCitzdGF0aWMgaW5saW5lIHZvaWQgdGltZV9pbnRlcnBvbGF0b3JfcmVzZXQodm9pZCkKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIHRpbWVfaW50ZXJwb2xhdG9yX3VwZGF0ZShsb25nIGRlbHRhX25zZWMpCiB7CiB9CiAKQEAgLTMwOSw2ICsyODksOCBAQAogLyogUmV0dXJucyBob3cgbG9uZyB0aWNrcyBhcmUgYXQgcHJlc2VudCwgaW4gbnMgLyAyXihTSElGVF9TQ0FMRS0xMCkuICovCiBleHRlcm4gdTY0IGN1cnJlbnRfdGlja19sZW5ndGgodm9pZCk7CiAKK2V4dGVybiB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKTsKK2V4dGVybiB2b2lkIHVwZGF0ZV9udHBfb25lX3RpY2sodm9pZCk7CiBleHRlcm4gaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqKTsKIAogI2VuZGlmIC8qIEtFUk5FTCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC90cmRldmljZS5oIGIvaW5jbHVkZS9saW51eC90cmRldmljZS5oCmluZGV4IDk5ZTAyZWYuLmJmYzg0YTcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHJkZXZpY2UuaAorKysgYi9pbmNsdWRlL2xpbnV4L3RyZGV2aWNlLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl90ci5oPgogCiAjaWZkZWYgX19LRVJORUxfXwotZXh0ZXJuIHVuc2lnbmVkIHNob3J0CXRyX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gX19iZTE2IHRyX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZCB0cl9zb3VyY2Vfcm91dGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRyaF9oZHIgKnRyaCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX3RyZGV2KGludCBzaXplb2ZfcHJpdik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHNhY2N0X2tlcm4uaCBiL2luY2x1ZGUvbGludXgvdHNhY2N0X2tlcm4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZTUwYWM3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC90c2FjY3Rfa2Vybi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiB0c2FjY3Rfa2Vybi5oIC0ga2VybmVsIGhlYWRlciBmb3Igc3lzdGVtIGFjY291bnRpbmcgb3ZlciB0YXNrc3RhdHMgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSBKYXkgTGFuCVNHSQorICovCisKKyNpZm5kZWYgX0xJTlVYX1RTQUNDVF9LRVJOX0gKKyNkZWZpbmUgX0xJTlVYX1RTQUNDVF9LRVJOX0gKKworI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0cy5oPgorCisjaWZkZWYgQ09ORklHX1RBU0tTVEFUUworZXh0ZXJuIHZvaWQgYmFjY3RfYWRkX3RzayhzdHJ1Y3QgdGFza3N0YXRzICpzdGF0cywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBiYWNjdF9hZGRfdHNrKHN0cnVjdCB0YXNrc3RhdHMgKnN0YXRzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3t9CisjZW5kaWYgLyogQ09ORklHX1RBU0tTVEFUUyAqLworCisjaWZkZWYgQ09ORklHX1RBU0tfWEFDQ1QKK2V4dGVybiB2b2lkIHhhY2N0X2FkZF90c2soc3RydWN0IHRhc2tzdGF0cyAqc3RhdHMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CitleHRlcm4gdm9pZCBhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworZXh0ZXJuIHZvaWQgYWNjdF9jbGVhcl9pbnRlZ3JhbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCB4YWNjdF9hZGRfdHNrKHN0cnVjdCB0YXNrc3RhdHMgKnN0YXRzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCit7fQorc3RhdGljIGlubGluZSB2b2lkIGFjY3RfdXBkYXRlX2ludGVncmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3t9CitzdGF0aWMgaW5saW5lIHZvaWQgYWNjdF9jbGVhcl9pbnRlZ3JhbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCit7fQorI2VuZGlmIC8qIENPTkZJR19UQVNLX1hBQ0NUICovCisKKyNlbmRpZgorCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdHR5LmggYi9pbmNsdWRlL2xpbnV4L3R0eS5oCmluZGV4IDA0ODI3Y2EuLjQ0MDkxYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdHR5LmgKKysrIGIvaW5jbHVkZS9saW51eC90dHkuaApAQCAtMTc0LDcgKzE3NCw3IEBACiAJc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlcjsKIAlpbnQgaW5kZXg7CiAJc3RydWN0IHR0eV9sZGlzYyBsZGlzYzsKLQlzdHJ1Y3Qgc2VtYXBob3JlIHRlcm1pb3Nfc2VtOworCXN0cnVjdCBtdXRleCB0ZXJtaW9zX211dGV4OwogCXN0cnVjdCB0ZXJtaW9zICp0ZXJtaW9zLCAqdGVybWlvc19sb2NrZWQ7CiAJY2hhciBuYW1lWzY0XTsKIAlpbnQgcGdycDsKQEAgLTE5MCw3ICsxOTAsNiBAQAogCXN0cnVjdCB0dHlfc3RydWN0ICpsaW5rOwogCXN0cnVjdCBmYXN5bmNfc3RydWN0ICpmYXN5bmM7CiAJc3RydWN0IHR0eV9idWZoZWFkIGJ1ZjsKLQlpbnQgbWF4X2ZsaXBfY250OwogCWludCBhbHRfc3BlZWQ7CQkvKiBGb3IgbWFnaWMgc3Vic3RpdHV0aW9uIG9mIDM4NDAwIGJwcyAqLwogCXdhaXRfcXVldWVfaGVhZF90IHdyaXRlX3dhaXQ7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OwpAQCAtMzA4LDYgKzMwNyw5IEBACiBleHRlcm4gdm9pZCB0dHlfd2FrZXVwKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogZXh0ZXJuIHZvaWQgdHR5X2xkaXNjX2ZsdXNoKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogCitleHRlcm4gaW50IHR0eV9pb2N0bChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwKKwkJICAgICB1bnNpZ25lZCBsb25nIGFyZyk7CisKIGV4dGVybiBzdHJ1Y3QgbXV0ZXggdHR5X211dGV4OwogCiAvKiBuX3R0eS5jICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3R5cGVzLmggYi9pbmNsdWRlL2xpbnV4L3R5cGVzLmgKaW5kZXggM2YyMzU2Ni4uNDA2ZDRhZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC90eXBlcy5oCisrKyBiL2luY2x1ZGUvbGludXgvdHlwZXMuaApAQCAtMzMsNiArMzMsOCBAQAogdHlwZWRlZiBfX2tlcm5lbF9tcWRfdAkJbXFkX3Q7CiAKICNpZmRlZiBfX0tFUk5FTF9fCit0eXBlZGVmIF9Cb29sCQkJYm9vbDsKKwogdHlwZWRlZiBfX2tlcm5lbF91aWQzMl90CXVpZF90OwogdHlwZWRlZiBfX2tlcm5lbF9naWQzMl90CWdpZF90OwogdHlwZWRlZiBfX2tlcm5lbF91aWQxNl90ICAgICAgICB1aWQxNl90OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91YWNjZXNzLmggYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAppbmRleCAzOTFlN2VkLi5hNDhkN2YxIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VhY2Nlc3MuaApAQCAtMTksNCArMTksMjYgQEAKIAogI2VuZGlmCQkvKiBBUkNIX0hBU19OT0NBQ0hFX1VBQ0NFU1MgKi8KIAorLyoqCisgKiBwcm9iZV9rZXJuZWxfYWRkcmVzcygpOiBzYWZlbHkgYXR0ZW1wdCB0byByZWFkIGZyb20gYSBsb2NhdGlvbgorICogQGFkZHI6IGFkZHJlc3MgdG8gcmVhZCBmcm9tIC0gaXRzIHR5cGUgaXMgdHlwZSB0eXBlb2YocmV0dmFsKSoKKyAqIEByZXR2YWw6IHJlYWQgaW50byB0aGlzIHZhcmlhYmxlCisgKgorICogU2FmZWx5IHJlYWQgZnJvbSBhZGRyZXNzIEBhZGRyIGludG8gdmFyaWFibGUgQHJldnRhbC4gIElmIGEga2VybmVsIGZhdWx0CisgKiBoYXBwZW5zLCBoYW5kbGUgdGhhdCBhbmQgcmV0dXJuIC1FRkFVTFQuCisgKiBXZSBlbnN1cmUgdGhhdCB0aGUgX19nZXRfdXNlcigpIGlzIGV4ZWN1dGVkIGluIGF0b21pYyBjb250ZXh0IHNvIHRoYXQKKyAqIGRvX3BhZ2VfZmF1bHQoKSBkb2Vzbid0IGF0dGVtcHQgdG8gdGFrZSBtbWFwX3NlbS4gIFRoaXMgbWFrZXMKKyAqIHByb2JlX2tlcm5lbF9hZGRyZXNzKCkgc3VpdGFibGUgZm9yIHVzZSB3aXRoaW4gcmVnaW9ucyB3aGVyZSB0aGUgY2FsbGVyCisgKiBhbHJlYWR5IGhvbGRzIG1tYXBfc2VtLCBvciBvdGhlciBsb2NrcyB3aGljaCBuZXN0IGluc2lkZSBtbWFwX3NlbS4KKyAqLworI2RlZmluZSBwcm9iZV9rZXJuZWxfYWRkcmVzcyhhZGRyLCByZXR2YWwpCQlcCisJKHsJCQkJCQlcCisJCWxvbmcgcmV0OwkJCQlcCisJCQkJCQkJXAorCQlpbmNfcHJlZW1wdF9jb3VudCgpOwkJCVwKKwkJcmV0ID0gX19nZXRfdXNlcihyZXR2YWwsIGFkZHIpOwkJXAorCQlkZWNfcHJlZW1wdF9jb3VudCgpOwkJCVwKKwkJcmV0OwkJCQkJXAorCX0pCisKICNlbmRpZgkJLyogX19MSU5VWF9VQUNDRVNTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91ZHAuaCBiL2luY2x1ZGUvbGludXgvdWRwLmgKaW5kZXggOTAyMjNmMC4uMDE0YjQxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91ZHAuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VkcC5oCkBAIC0yMCwxMCArMjAsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogCiBzdHJ1Y3QgdWRwaGRyIHsKLQlfX3UxNglzb3VyY2U7Ci0JX191MTYJZGVzdDsKLQlfX3UxNglsZW47Ci0JX191MTYJY2hlY2s7CisJX19iZTE2CXNvdXJjZTsKKwlfX2JlMTYJZGVzdDsKKwlfX2JlMTYJbGVuOworCV9fYmUxNgljaGVjazsKIH07CiAKIC8qIFVEUCBzb2NrZXQgb3B0aW9ucyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91bndpbmQuaCBiL2luY2x1ZGUvbGludXgvdW53aW5kLmgKaW5kZXggY2U0OGUyYy4uNzNlMTc1MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91bndpbmQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Vud2luZC5oCkBAIC0xMiw4ICsxMiw2IEBACiAgKiBpcyBub3QgbXVjaCBwb2ludCBpbiBpbXBsZW1lbnRpbmcgdGhlIGZ1bGwgRHdhcmYyIHVud2luZCBBUEkuCiAgKi8KIAotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgotCiBzdHJ1Y3QgbW9kdWxlOwogCiAjaWZkZWYgQ09ORklHX1NUQUNLX1VOV0lORApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IuaCBiL2luY2x1ZGUvbGludXgvdXNiLmgKaW5kZXggZDJiZDBjOC4uMTkwY2MxYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2IuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi5oCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZnMuaD4JCS8qIGZvciBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICovCiAjaW5jbHVkZSA8bGludXgvY29tcGxldGlvbi5oPgkvKiBmb3Igc3RydWN0IGNvbXBsZXRpb24gKi8KICNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgkvKiBmb3IgY3VycmVudCAmJiBzY2hlZHVsZV90aW1lb3V0ICovCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4JLyogZm9yIHN0cnVjdCBtdXRleCAqLwogCiBzdHJ1Y3QgdXNiX2RldmljZTsKIHN0cnVjdCB1c2JfZHJpdmVyOwpAQCAtMTAyLDggKzEwMywxMyBAQAogICoJbnVtYmVyIGZyb20gdGhlIFVTQiBjb3JlIGJ5IGNhbGxpbmcgdXNiX3JlZ2lzdGVyX2RldigpLgogICogQGNvbmRpdGlvbjogYmluZGluZyBzdGF0ZSBvZiB0aGUgaW50ZXJmYWNlOiBub3QgYm91bmQsIGJpbmRpbmcKICAqCShpbiBwcm9iZSgpKSwgYm91bmQgdG8gYSBkcml2ZXIsIG9yIHVuYmluZGluZyAoaW4gZGlzY29ubmVjdCgpKQorICogQGlzX2FjdGl2ZTogZmxhZyBzZXQgd2hlbiB0aGUgaW50ZXJmYWNlIGlzIGJvdW5kIGFuZCBub3Qgc3VzcGVuZGVkLgorICogQG5lZWRzX3JlbW90ZV93YWtldXA6IGZsYWcgc2V0IHdoZW4gdGhlIGRyaXZlciByZXF1aXJlcyByZW1vdGUtd2FrZXVwCisgKgljYXBhYmlsaXR5IGR1cmluZyBhdXRvc3VzcGVuZC4KICAqIEBkZXY6IGRyaXZlciBtb2RlbCdzIHZpZXcgb2YgdGhpcyBkZXZpY2UKICAqIEBjbGFzc19kZXY6IGRyaXZlciBtb2RlbCdzIGNsYXNzIHZpZXcgb2YgdGhpcyBkZXZpY2UuCisgKiBAcG1fdXNhZ2VfY250OiBQTSB1c2FnZSBjb3VudGVyIGZvciB0aGlzIGludGVyZmFjZTsgYXV0b3N1c3BlbmQgaXMgbm90CisgKglhbGxvd2VkIHVubGVzcyB0aGUgY291bnRlciBpcyAwLgogICoKICAqIFVTQiBkZXZpY2UgZHJpdmVycyBhdHRhY2ggdG8gaW50ZXJmYWNlcyBvbiBhIHBoeXNpY2FsIGRldmljZS4gIEVhY2gKICAqIGludGVyZmFjZSBlbmNhcHN1bGF0ZXMgYSBzaW5nbGUgaGlnaCBsZXZlbCBmdW5jdGlvbiwgc3VjaCBhcyBmZWVkaW5nCkBAIC0xNDIsOCArMTQ4LDEyIEBACiAJaW50IG1pbm9yOwkJCS8qIG1pbm9yIG51bWJlciB0aGlzIGludGVyZmFjZSBpcwogCQkJCQkgKiBib3VuZCB0byAqLwogCWVudW0gdXNiX2ludGVyZmFjZV9jb25kaXRpb24gY29uZGl0aW9uOwkJLyogc3RhdGUgb2YgYmluZGluZyAqLworCXVuc2lnbmVkIGlzX2FjdGl2ZToxOwkJLyogdGhlIGludGVyZmFjZSBpcyBub3Qgc3VzcGVuZGVkICovCisJdW5zaWduZWQgbmVlZHNfcmVtb3RlX3dha2V1cDoxOwkvKiBkcml2ZXIgcmVxdWlyZXMgcmVtb3RlIHdha2V1cCAqLworCiAJc3RydWN0IGRldmljZSBkZXY7CQkvKiBpbnRlcmZhY2Ugc3BlY2lmaWMgZGV2aWNlIGluZm8gKi8KIAlzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc19kZXY7CisJaW50IHBtX3VzYWdlX2NudDsJCS8qIHVzYWdlIGNvdW50ZXIgZm9yIGF1dG9zdXNwZW5kICovCiB9OwogI2RlZmluZQl0b191c2JfaW50ZXJmYWNlKGQpIGNvbnRhaW5lcl9vZihkLCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSwgZGV2KQogI2RlZmluZQlpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpIFwKQEAgLTI1NCw4ICsyNjQsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdHJ1Y3QgdXNiX29wZXJhdGlvbnM7Ci0KIC8qIFVTQiBkZXZpY2UgbnVtYmVyIGFsbG9jYXRpb24gYml0bWFwICovCiBzdHJ1Y3QgdXNiX2Rldm1hcCB7CiAJdW5zaWduZWQgbG9uZyBkZXZpY2VtYXBbMTI4IC8gKDgqc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKV07CkBAIC0yNjgsNiArMjc2LDcgQEAKIAlzdHJ1Y3QgZGV2aWNlICpjb250cm9sbGVyOwkvKiBob3N0L21hc3RlciBzaWRlIGhhcmR3YXJlICovCiAJaW50IGJ1c251bTsJCQkvKiBCdXMgbnVtYmVyIChpbiBvcmRlciBvZiByZWcpICovCiAJY2hhciAqYnVzX25hbWU7CQkJLyogc3RhYmxlIGlkIChQQ0kgc2xvdF9uYW1lIGV0YykgKi8KKwl1OCB1c2VzX2RtYTsJCQkvKiBEb2VzIHRoZSBob3N0IGNvbnRyb2xsZXIgdXNlIERNQT8gKi8KIAl1OCBvdGdfcG9ydDsJCQkvKiAwLCBvciBudW1iZXIgb2YgT1RHL0hOUCBwb3J0ICovCiAJdW5zaWduZWQgaXNfYl9ob3N0OjE7CQkvKiB0cnVlIGR1cmluZyBzb21lIEhOUCByb2xlc3dpdGNoZXMgKi8KIAl1bnNpZ25lZCBiX2hucF9lbmFibGU6MTsJLyogT1RHOiBkaWQgQS1Ib3N0IGVuYWJsZSBITlA/ICovCkBAIC0yNzYsMTAgKzI4NSw4IEBACiAJCQkJCSAqIHJvdW5kLXJvYmluIGFsbG9jYXRpb24gKi8KIAogCXN0cnVjdCB1c2JfZGV2bWFwIGRldm1hcDsJLyogZGV2aWNlIGFkZHJlc3MgYWxsb2NhdGlvbiBtYXAgKi8KLQlzdHJ1Y3QgdXNiX29wZXJhdGlvbnMgKm9wOwkvKiBPcGVyYXRpb25zIChzcGVjaWZpYyB0byB0aGUgSEMpICovCiAJc3RydWN0IHVzYl9kZXZpY2UgKnJvb3RfaHViOwkvKiBSb290IGh1YiAqLwogCXN0cnVjdCBsaXN0X2hlYWQgYnVzX2xpc3Q7CS8qIGxpc3Qgb2YgYnVzc2VzICovCi0Jdm9pZCAqaGNwcml2OyAgICAgICAgICAgICAgICAgICAvKiBIb3N0IENvbnRyb2xsZXIgcHJpdmF0ZSBkYXRhICovCiAKIAlpbnQgYmFuZHdpZHRoX2FsbG9jYXRlZDsJLyogb24gdGhpcyBidXM6IGhvdyBtdWNoIG9mIHRoZSB0aW1lCiAJCQkJCSAqIHJlc2VydmVkIGZvciBwZXJpb2RpYyAoaW50ci9pc28pCkBAIC0yOTQsOCArMzAxLDYgQEAKIAlzdHJ1Y3QgZGVudHJ5ICp1c2Jmc19kZW50cnk7CS8qIHVzYmZzIGRlbnRyeSBlbnRyeSBmb3IgdGhlIGJ1cyAqLwogCiAJc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3NfZGV2OwkvKiBjbGFzcyBkZXZpY2UgZm9yIHRoaXMgYnVzICovCi0Jc3RydWN0IGtyZWYga3JlZjsJCS8qIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgdGhpcyBidXMgKi8KLQl2b2lkICgqcmVsZWFzZSkoc3RydWN0IHVzYl9idXMgKmJ1cyk7CiAKICNpZiBkZWZpbmVkKENPTkZJR19VU0JfTU9OKQogCXN0cnVjdCBtb25fYnVzICptb25fYnVzOwkvKiBub24tbnVsbCB3aGVuIGFzc29jaWF0ZWQgKi8KQEAgLTM1MCw2ICszNTUsNyBAQAogCiAJdW5zaWduZWQgc2hvcnQgYnVzX21BOwkJLyogQ3VycmVudCBhdmFpbGFibGUgZnJvbSB0aGUgYnVzICovCiAJdTggcG9ydG51bTsJCQkvKiBQYXJlbnQgcG9ydCBudW1iZXIgKG9yaWdpbiAxKSAqLworCXU4IGxldmVsOwkJCS8qIE51bWJlciBvZiBVU0IgaHViIGFuY2VzdG9ycyAqLwogCiAJaW50IGhhdmVfbGFuZ2lkOwkJLyogd2hldGhlciBzdHJpbmdfbGFuZ2lkIGlzIHZhbGlkICovCiAJaW50IHN0cmluZ19sYW5naWQ7CQkvKiBsYW5ndWFnZSBJRCBmb3Igc3RyaW5ncyAqLwpAQCAtMzczLDYgKzM3OSwxNSBAQAogCiAJaW50IG1heGNoaWxkOwkJCS8qIE51bWJlciBvZiBwb3J0cyBpZiBodWIgKi8KIAlzdHJ1Y3QgdXNiX2RldmljZSAqY2hpbGRyZW5bVVNCX01BWENISUxEUkVOXTsKKworCWludCBwbV91c2FnZV9jbnQ7CQkvKiB1c2FnZSBjb3VudGVyIGZvciBhdXRvc3VzcGVuZCAqLworI2lmZGVmIENPTkZJR19QTQorCXN0cnVjdCB3b3JrX3N0cnVjdCBhdXRvc3VzcGVuZDsJLyogZm9yIGRlbGF5ZWQgYXV0b3N1c3BlbmRzICovCisJc3RydWN0IG11dGV4IHBtX211dGV4OwkJLyogcHJvdGVjdHMgUE0gb3BlcmF0aW9ucyAqLworCisJdW5zaWduZWQgYXV0b19wbToxOwkJLyogYXV0b3N1c3BlbmQvcmVzdW1lIGluIHByb2dyZXNzICovCisJdW5zaWduZWQgZG9fcmVtb3RlX3dha2V1cDoxOwkvKiByZW1vdGUgd2FrZXVwIHNob3VsZCBiZSBlbmFibGVkICovCisjZW5kaWYKIH07CiAjZGVmaW5lCXRvX3VzYl9kZXZpY2UoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCB1c2JfZGV2aWNlLCBkZXYpCiAKQEAgLTM4NCw3ICszOTksNyBAQAogI2RlZmluZSB1c2JfdW5sb2NrX2RldmljZSh1ZGV2KQkJdXAoJih1ZGV2KS0+ZGV2LnNlbSkKICNkZWZpbmUgdXNiX3RyeWxvY2tfZGV2aWNlKHVkZXYpCWRvd25fdHJ5bG9jaygmKHVkZXYpLT5kZXYuc2VtKQogZXh0ZXJuIGludCB1c2JfbG9ja19kZXZpY2VfZm9yX3Jlc2V0KHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LAotCQlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaWZhY2UpOworCQkJCSAgICAgY29uc3Qgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmlmYWNlKTsKIAogLyogVVNCIHBvcnQgcmVzZXQgZm9yIGRldmljZSByZWluaXRpYWxpemF0aW9uICovCiBleHRlcm4gaW50IHVzYl9yZXNldF9kZXZpY2Uoc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CkBAIC0zOTMsNiArNDA4LDE3IEBACiAKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2ZpbmRfZGV2aWNlKHUxNiB2ZW5kb3JfaWQsIHUxNiBwcm9kdWN0X2lkKTsKIAorLyogVVNCIGF1dG9zdXNwZW5kIGFuZCBhdXRvcmVzdW1lICovCisjaWZkZWYgQ09ORklHX1VTQl9TVVNQRU5ECitleHRlcm4gaW50IHVzYl9hdXRvcG1fZ2V0X2ludGVyZmFjZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50Zik7CitleHRlcm4gdm9pZCB1c2JfYXV0b3BtX3B1dF9pbnRlcmZhY2Uoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpOworCisjZWxzZQorI2RlZmluZSB1c2JfYXV0b3BtX2dldF9pbnRlcmZhY2UoaW50ZikJCTAKKyNkZWZpbmUgdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKGludGYpCQlkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKIC8qIGZvciBkcml2ZXJzIHVzaW5nIGlzbyBlbmRwb2ludHMgKi8KQEAgLTQyMywxMCArNDQ5LDEwIEBACiAKIGV4dGVybiBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ZpbmRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZHJpdmVyICpkcnYsCiAJCWludCBtaW5vcik7Ci1leHRlcm4gc3RydWN0IHVzYl9pbnRlcmZhY2UgKnVzYl9pZm51bV90b19pZihzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAorZXh0ZXJuIHN0cnVjdCB1c2JfaW50ZXJmYWNlICp1c2JfaWZudW1fdG9faWYoY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwKIAkJdW5zaWduZWQgaWZudW0pOwogZXh0ZXJuIHN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKnVzYl9hbHRudW1fdG9fYWx0c2V0dGluZygKLQkJc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIHVuc2lnbmVkIGludCBhbHRudW0pOworCQljb25zdCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgdW5zaWduZWQgaW50IGFsdG51bSk7CiAKIAogLyoqCkBAIC00NjQsNiArNDkwLDIwIEBACiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK2V4dGVybiBpbnQgdXNiX2VuZHBvaW50X2Rpcl9pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF9kaXJfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKTsKK2V4dGVybiBpbnQgdXNiX2VuZHBvaW50X3hmZXJfYnVsayhjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF94ZmVyX2ludChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF94ZmVyX2lzb2MoY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpOworZXh0ZXJuIGludCB1c2JfZW5kcG9pbnRfaXNfYnVsa19pbihjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF9pc19idWxrX291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF9pc19pbnRfaW4oY29uc3Qgc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplcGQpOworZXh0ZXJuIGludCB1c2JfZW5kcG9pbnRfaXNfaW50X291dChjb25zdCBzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgKmVwZCk7CitleHRlcm4gaW50IHVzYl9lbmRwb2ludF9pc19pc29jX2luKGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKTsKK2V4dGVybiBpbnQgdXNiX2VuZHBvaW50X2lzX2lzb2Nfb3V0KGNvbnN0IHN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZXBkKTsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwogI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRSBcCiAJCShVU0JfREVWSUNFX0lEX01BVENIX1ZFTkRPUiB8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkKICNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfUkFOR0UgXApAQCAtNTQwLDcgKzU4MCwxNyBAQAogfTsKIAogLyoqCi0gKiBzdHJ1Y3QgdXNiX2RyaXZlciAtIGlkZW50aWZpZXMgVVNCIGRyaXZlciB0byB1c2Jjb3JlCisgKiBzdHJ1Y3QgdXNiZHJ2X3dyYXAgLSB3cmFwcGVyIGZvciBkcml2ZXItbW9kZWwgc3RydWN0dXJlCisgKiBAZHJpdmVyOiBUaGUgZHJpdmVyLW1vZGVsIGNvcmUgZHJpdmVyIHN0cnVjdHVyZS4KKyAqIEBmb3JfZGV2aWNlczogTm9uLXplcm8gZm9yIGRldmljZSBkcml2ZXJzLCAwIGZvciBpbnRlcmZhY2UgZHJpdmVycy4KKyAqLworc3RydWN0IHVzYmRydl93cmFwIHsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciBkcml2ZXI7CisJaW50IGZvcl9kZXZpY2VzOworfTsKKworLyoqCisgKiBzdHJ1Y3QgdXNiX2RyaXZlciAtIGlkZW50aWZpZXMgVVNCIGludGVyZmFjZSBkcml2ZXIgdG8gdXNiY29yZQogICogQG5hbWU6IFRoZSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIFVTQiBkcml2ZXJzLAogICoJYW5kIHNob3VsZCBub3JtYWxseSBiZSB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuCiAgKiBAcHJvYmU6IENhbGxlZCB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyB3aWxsaW5nIHRvIG1hbmFnZSBhIHBhcnRpY3VsYXIKQEAgLTU2NywxMiArNjE3LDE0IEBACiAgKglvciB5b3VyIGRyaXZlcidzIHByb2JlIGZ1bmN0aW9uIHdpbGwgbmV2ZXIgZ2V0IGNhbGxlZC4KICAqIEBkeW5pZHM6IHVzZWQgaW50ZXJuYWxseSB0byBob2xkIHRoZSBsaXN0IG9mIGR5bmFtaWNhbGx5IGFkZGVkIGRldmljZQogICoJaWRzIGZvciB0aGlzIGRyaXZlci4KLSAqIEBkcml2ZXI6IHRoZSBkcml2ZXIgbW9kZWwgY29yZSBkcml2ZXIgc3RydWN0dXJlLgorICogQGRydndyYXA6IERyaXZlci1tb2RlbCBjb3JlIHN0cnVjdHVyZSB3cmFwcGVyLgogICogQG5vX2R5bmFtaWNfaWQ6IGlmIHNldCB0byAxLCB0aGUgVVNCIGNvcmUgd2lsbCBub3QgYWxsb3cgZHluYW1pYyBpZHMgdG8gYmUKICAqCWFkZGVkIHRvIHRoaXMgZHJpdmVyIGJ5IHByZXZlbnRpbmcgdGhlIHN5c2ZzIGZpbGUgZnJvbSBiZWluZyBjcmVhdGVkLgorICogQHN1cHBvcnRzX2F1dG9zdXNwZW5kOiBpZiBzZXQgdG8gMCwgdGhlIFVTQiBjb3JlIHdpbGwgbm90IGFsbG93IGF1dG9zdXNwZW5kCisgKglmb3IgaW50ZXJmYWNlcyBib3VuZCB0byB0aGlzIGRyaXZlci4KICAqCi0gKiBVU0IgZHJpdmVycyBtdXN0IHByb3ZpZGUgYSBuYW1lLCBwcm9iZSgpIGFuZCBkaXNjb25uZWN0KCkgbWV0aG9kcywKLSAqIGFuZCBhbiBpZF90YWJsZS4gIE90aGVyIGRyaXZlciBmaWVsZHMgYXJlIG9wdGlvbmFsLgorICogVVNCIGludGVyZmFjZSBkcml2ZXJzIG11c3QgcHJvdmlkZSBhIG5hbWUsIHByb2JlKCkgYW5kIGRpc2Nvbm5lY3QoKQorICogbWV0aG9kcywgYW5kIGFuIGlkX3RhYmxlLiAgT3RoZXIgZHJpdmVyIGZpZWxkcyBhcmUgb3B0aW9uYWwuCiAgKgogICogVGhlIGlkX3RhYmxlIGlzIHVzZWQgaW4gaG90cGx1Z2dpbmcuICBJdCBob2xkcyBhIHNldCBvZiBkZXNjcmlwdG9ycywKICAqIGFuZCBzcGVjaWFsaXplZCBkYXRhIG1heSBiZSBhc3NvY2lhdGVkIHdpdGggZWFjaCBlbnRyeS4gIFRoYXQgdGFibGUKQEAgLTYwNiwxMCArNjU4LDQ0IEBACiAJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkX3RhYmxlOwogCiAJc3RydWN0IHVzYl9keW5pZHMgZHluaWRzOwotCXN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKKwlzdHJ1Y3QgdXNiZHJ2X3dyYXAgZHJ2d3JhcDsKIAl1bnNpZ25lZCBpbnQgbm9fZHluYW1pY19pZDoxOworCXVuc2lnbmVkIGludCBzdXBwb3J0c19hdXRvc3VzcGVuZDoxOwogfTsKLSNkZWZpbmUJdG9fdXNiX2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9kcml2ZXIsIGRyaXZlcikKKyNkZWZpbmUJdG9fdXNiX2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9kcml2ZXIsIGRydndyYXAuZHJpdmVyKQorCisvKioKKyAqIHN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAtIGlkZW50aWZpZXMgVVNCIGRldmljZSBkcml2ZXIgdG8gdXNiY29yZQorICogQG5hbWU6IFRoZSBkcml2ZXIgbmFtZSBzaG91bGQgYmUgdW5pcXVlIGFtb25nIFVTQiBkcml2ZXJzLAorICoJYW5kIHNob3VsZCBub3JtYWxseSBiZSB0aGUgc2FtZSBhcyB0aGUgbW9kdWxlIG5hbWUuCisgKiBAcHJvYmU6IENhbGxlZCB0byBzZWUgaWYgdGhlIGRyaXZlciBpcyB3aWxsaW5nIHRvIG1hbmFnZSBhIHBhcnRpY3VsYXIKKyAqCWRldmljZS4gIElmIGl0IGlzLCBwcm9iZSByZXR1cm5zIHplcm8gYW5kIHVzZXMgZGV2X3NldF9kcnZkYXRhKCkKKyAqCXRvIGFzc29jaWF0ZSBkcml2ZXItc3BlY2lmaWMgZGF0YSB3aXRoIHRoZSBkZXZpY2UuICBJZiB1bndpbGxpbmcKKyAqCXRvIG1hbmFnZSB0aGUgZGV2aWNlLCByZXR1cm4gYSBuZWdhdGl2ZSBlcnJubyB2YWx1ZS4KKyAqIEBkaXNjb25uZWN0OiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIG5vIGxvbmdlciBhY2Nlc3NpYmxlLCB1c3VhbGx5CisgKgliZWNhdXNlIGl0IGhhcyBiZWVuIChvciBpcyBiZWluZykgZGlzY29ubmVjdGVkIG9yIHRoZSBkcml2ZXIncworICoJbW9kdWxlIGlzIGJlaW5nIHVubG9hZGVkLgorICogQHN1c3BlbmQ6IENhbGxlZCB3aGVuIHRoZSBkZXZpY2UgaXMgZ29pbmcgdG8gYmUgc3VzcGVuZGVkIGJ5IHRoZSBzeXN0ZW0uCisgKiBAcmVzdW1lOiBDYWxsZWQgd2hlbiB0aGUgZGV2aWNlIGlzIGJlaW5nIHJlc3VtZWQgYnkgdGhlIHN5c3RlbS4KKyAqIEBkcnZ3cmFwOiBEcml2ZXItbW9kZWwgY29yZSBzdHJ1Y3R1cmUgd3JhcHBlci4KKyAqIEBzdXBwb3J0c19hdXRvc3VzcGVuZDogaWYgc2V0IHRvIDAsIHRoZSBVU0IgY29yZSB3aWxsIG5vdCBhbGxvdyBhdXRvc3VzcGVuZAorICoJZm9yIGRldmljZXMgYm91bmQgdG8gdGhpcyBkcml2ZXIuCisgKgorICogVVNCIGRyaXZlcnMgbXVzdCBwcm92aWRlIGFsbCB0aGUgZmllbGRzIGxpc3RlZCBhYm92ZSBleGNlcHQgZHJ2d3JhcC4KKyAqLworc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyIHsKKwljb25zdCBjaGFyICpuYW1lOworCisJaW50ICgqcHJvYmUpIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CisJdm9pZCAoKmRpc2Nvbm5lY3QpIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CisKKwlpbnQgKCpzdXNwZW5kKSAoc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYsIHBtX21lc3NhZ2VfdCBtZXNzYWdlKTsKKwlpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgdXNiX2RldmljZSAqdWRldik7CisJc3RydWN0IHVzYmRydl93cmFwIGRydndyYXA7CisJdW5zaWduZWQgaW50IHN1cHBvcnRzX2F1dG9zdXNwZW5kOjE7Cit9OworI2RlZmluZQl0b191c2JfZGV2aWNlX2RyaXZlcihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IHVzYl9kZXZpY2VfZHJpdmVyLCBcCisJCWRydndyYXAuZHJpdmVyKQogCiBleHRlcm4gc3RydWN0IGJ1c190eXBlIHVzYl9idXNfdHlwZTsKIApAQCAtNjMzLDEzICs3MTksMTcgQEAKICAqIHVzZSB0aGVzZSBpbiBtb2R1bGVfaW5pdCgpL21vZHVsZV9leGl0KCkKICAqIGFuZCBkb24ndCBmb3JnZXQgTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIC4uLikKICAqLwotaW50IHVzYl9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IHVzYl9kcml2ZXIgKiwgc3RydWN0IG1vZHVsZSAqKTsKK2V4dGVybiBpbnQgdXNiX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdXNiX2RyaXZlciAqLCBzdHJ1Y3QgbW9kdWxlICopOwogc3RhdGljIGlubGluZSBpbnQgdXNiX3JlZ2lzdGVyKHN0cnVjdCB1c2JfZHJpdmVyICpkcml2ZXIpCiB7CiAJcmV0dXJuIHVzYl9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyLCBUSElTX01PRFVMRSk7CiB9CiBleHRlcm4gdm9pZCB1c2JfZGVyZWdpc3RlcihzdHJ1Y3QgdXNiX2RyaXZlciAqKTsKIAorZXh0ZXJuIGludCB1c2JfcmVnaXN0ZXJfZGV2aWNlX2RyaXZlcihzdHJ1Y3QgdXNiX2RldmljZV9kcml2ZXIgKiwKKwkJCXN0cnVjdCBtb2R1bGUgKik7CitleHRlcm4gdm9pZCB1c2JfZGVyZWdpc3Rlcl9kZXZpY2VfZHJpdmVyKHN0cnVjdCB1c2JfZGV2aWNlX2RyaXZlciAqKTsKKwogZXh0ZXJuIGludCB1c2JfcmVnaXN0ZXJfZGV2KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJICAgIHN0cnVjdCB1c2JfY2xhc3NfZHJpdmVyICpjbGFzc19kcml2ZXIpOwogZXh0ZXJuIHZvaWQgdXNiX2RlcmVnaXN0ZXJfZGV2KHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLApAQCAtODg1LDcgKzk3NSw3IEBACiAgKiBAc2V0dXBfcGFja2V0OiBwb2ludGVyIHRvIHRoZSBzZXR1cF9wYWNrZXQgYnVmZmVyCiAgKiBAdHJhbnNmZXJfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSB0cmFuc2ZlciBidWZmZXIKICAqIEBidWZmZXJfbGVuZ3RoOiBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcgotICogQGNvbXBsZXRlOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgorICogQGNvbXBsZXRlX2ZuOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgogICogQGNvbnRleHQ6IHdoYXQgdG8gc2V0IHRoZSB1cmIgY29udGV4dCB0by4KICAqCiAgKiBJbml0aWFsaXplcyBhIGNvbnRyb2wgdXJiIHdpdGggdGhlIHByb3BlciBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3VibWl0CkBAIC04OTcsNyArOTg3LDcgQEAKIAkJCQkJIHVuc2lnbmVkIGNoYXIgKnNldHVwX3BhY2tldCwKIAkJCQkJIHZvaWQgKnRyYW5zZmVyX2J1ZmZlciwKIAkJCQkJIGludCBidWZmZXJfbGVuZ3RoLAotCQkJCQkgdXNiX2NvbXBsZXRlX3QgY29tcGxldGUsCisJCQkJCSB1c2JfY29tcGxldGVfdCBjb21wbGV0ZV9mbiwKIAkJCQkJIHZvaWQgKmNvbnRleHQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CkBAIC05MDYsNyArOTk2LDcgQEAKIAl1cmItPnNldHVwX3BhY2tldCA9IHNldHVwX3BhY2tldDsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHRyYW5zZmVyX2J1ZmZlcjsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOwotCXVyYi0+Y29tcGxldGUgPSBjb21wbGV0ZTsKKwl1cmItPmNvbXBsZXRlID0gY29tcGxldGVfZm47CiAJdXJiLT5jb250ZXh0ID0gY29udGV4dDsKIH0KIApAQCAtOTE3LDcgKzEwMDcsNyBAQAogICogQHBpcGU6IHRoZSBlbmRwb2ludCBwaXBlCiAgKiBAdHJhbnNmZXJfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSB0cmFuc2ZlciBidWZmZXIKICAqIEBidWZmZXJfbGVuZ3RoOiBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcgotICogQGNvbXBsZXRlOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgorICogQGNvbXBsZXRlX2ZuOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgogICogQGNvbnRleHQ6IHdoYXQgdG8gc2V0IHRoZSB1cmIgY29udGV4dCB0by4KICAqCiAgKiBJbml0aWFsaXplcyBhIGJ1bGsgdXJiIHdpdGggdGhlIHByb3BlciBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gc3VibWl0IGl0CkBAIC05MjgsNyArMTAxOCw3IEBACiAJCQkJICAgICAgdW5zaWduZWQgaW50IHBpcGUsCiAJCQkJICAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLAogCQkJCSAgICAgIGludCBidWZmZXJfbGVuZ3RoLAotCQkJCSAgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlLAorCQkJCSAgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLAogCQkJCSAgICAgIHZvaWQgKmNvbnRleHQpCiB7CiAJc3Bpbl9sb2NrX2luaXQoJnVyYi0+bG9jayk7CkBAIC05MzYsNyArMTAyNiw3IEBACiAJdXJiLT5waXBlID0gcGlwZTsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlciA9IHRyYW5zZmVyX2J1ZmZlcjsKIAl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGggPSBidWZmZXJfbGVuZ3RoOwotCXVyYi0+Y29tcGxldGUgPSBjb21wbGV0ZTsKKwl1cmItPmNvbXBsZXRlID0gY29tcGxldGVfZm47CiAJdXJiLT5jb250ZXh0ID0gY29udGV4dDsKIH0KIApAQCAtOTQ3LDcgKzEwMzcsNyBAQAogICogQHBpcGU6IHRoZSBlbmRwb2ludCBwaXBlCiAgKiBAdHJhbnNmZXJfYnVmZmVyOiBwb2ludGVyIHRvIHRoZSB0cmFuc2ZlciBidWZmZXIKICAqIEBidWZmZXJfbGVuZ3RoOiBsZW5ndGggb2YgdGhlIHRyYW5zZmVyIGJ1ZmZlcgotICogQGNvbXBsZXRlOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgorICogQGNvbXBsZXRlX2ZuOiBwb2ludGVyIHRvIHRoZSB1c2JfY29tcGxldGVfdCBmdW5jdGlvbgogICogQGNvbnRleHQ6IHdoYXQgdG8gc2V0IHRoZSB1cmIgY29udGV4dCB0by4KICAqIEBpbnRlcnZhbDogd2hhdCB0byBzZXQgdGhlIHVyYiBpbnRlcnZhbCB0bywgZW5jb2RlZCBsaWtlCiAgKgl0aGUgZW5kcG9pbnQgZGVzY3JpcHRvcidzIGJJbnRlcnZhbCB2YWx1ZS4KQEAgLTk2Myw3ICsxMDUzLDcgQEAKIAkJCQkgICAgIHVuc2lnbmVkIGludCBwaXBlLAogCQkJCSAgICAgdm9pZCAqdHJhbnNmZXJfYnVmZmVyLAogCQkJCSAgICAgaW50IGJ1ZmZlcl9sZW5ndGgsCi0JCQkJICAgICB1c2JfY29tcGxldGVfdCBjb21wbGV0ZSwKKwkJCQkgICAgIHVzYl9jb21wbGV0ZV90IGNvbXBsZXRlX2ZuLAogCQkJCSAgICAgdm9pZCAqY29udGV4dCwKIAkJCQkgICAgIGludCBpbnRlcnZhbCkKIHsKQEAgLTk3Miw3ICsxMDYyLDcgQEAKIAl1cmItPnBpcGUgPSBwaXBlOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyID0gdHJhbnNmZXJfYnVmZmVyOwogCXVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCA9IGJ1ZmZlcl9sZW5ndGg7Ci0JdXJiLT5jb21wbGV0ZSA9IGNvbXBsZXRlOworCXVyYi0+Y29tcGxldGUgPSBjb21wbGV0ZV9mbjsKIAl1cmItPmNvbnRleHQgPSBjb250ZXh0OwogCWlmIChkZXYtPnNwZWVkID09IFVTQl9TUEVFRF9ISUdIKQogCQl1cmItPmludGVydmFsID0gMSA8PCAoaW50ZXJ2YWwgLSAxKTsKQEAgLTk5MCw3ICsxMDgwLDYgQEAKIGV4dGVybiBpbnQgdXNiX3VubGlua191cmIoc3RydWN0IHVyYiAqdXJiKTsKIGV4dGVybiB2b2lkIHVzYl9raWxsX3VyYihzdHJ1Y3QgdXJiICp1cmIpOwogCi0jZGVmaW5lIEhBVkVfVVNCX0JVRkZFUlMKIHZvaWQgKnVzYl9idWZmZXJfYWxsb2MgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCWdmcF90IG1lbV9mbGFncywgZG1hX2FkZHJfdCAqZG1hKTsKIHZvaWQgdXNiX2J1ZmZlcl9mcmVlIChzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKQEAgLTEwMDMsMTQgKzEwOTIsMTQgQEAKICNlbmRpZgogCiBzdHJ1Y3Qgc2NhdHRlcmxpc3Q7Ci1pbnQgdXNiX2J1ZmZlcl9tYXBfc2cgKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIHVuc2lnbmVkIHBpcGUsCi0JCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cyk7CitpbnQgdXNiX2J1ZmZlcl9tYXBfc2coY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzKTsKICNpZiAwCi12b2lkIHVzYl9idWZmZXJfZG1hc3luY19zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cyk7Cit2b2lkIHVzYl9idWZmZXJfZG1hc3luY19zZyhjb25zdCBzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LCB1bnNpZ25lZCBwaXBlLAorCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cyk7CiAjZW5kaWYKLXZvaWQgdXNiX2J1ZmZlcl91bm1hcF9zZyAoc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKLQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5faHdfZW50cyk7Cit2b2lkIHVzYl9idWZmZXJfdW5tYXBfc2coY29uc3Qgc3RydWN0IHVzYl9kZXZpY2UgKmRldiwgdW5zaWduZWQgcGlwZSwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbl9od19lbnRzKTsKIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKgogICogICAgICAgICAgICAgICAgICAgICAgICAgU1lOQ0hST05PVVMgQ0FMTCBTVVBQT1JUICAgICAgICAgICAgICAgICAgKgpAQCAtMTAzOCw2ICsxMTI3LDkgQEAKIGV4dGVybiBpbnQgdXNiX3Jlc2V0X2NvbmZpZ3VyYXRpb24oc3RydWN0IHVzYl9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IHVzYl9zZXRfaW50ZXJmYWNlKHN0cnVjdCB1c2JfZGV2aWNlICpkZXYsIGludCBpZm51bSwgaW50IGFsdGVybmF0ZSk7CiAKKy8qIHRoaXMgcmVxdWVzdCBpc24ndCByZWFsbHkgc3luY2hyb25vdXMsIGJ1dCBpdCBiZWxvbmdzIHdpdGggdGhlIG90aGVycyAqLworZXh0ZXJuIGludCB1c2JfZHJpdmVyX3NldF9jb25maWd1cmF0aW9uKHN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2LCBpbnQgY29uZmlnKTsKKwogLyoKICAqIHRpbWVvdXRzLCBpbiBtaWxsaXNlY29uZHMsIHVzZWQgZm9yIHNlbmRpbmcvcmVjZWl2aW5nIGNvbnRyb2wgbWVzc2FnZXMKICAqIHRoZXkgdHlwaWNhbGx5IGNvbXBsZXRlIHdpdGhpbiBhIGZldyBmcmFtZXMgKG1zZWMpIGFmdGVyIHRoZXkncmUgaXNzdWVkCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9hdWRpby5oIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YmQyMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC91c2IvYXVkaW8uaApAQCAtMCwwICsxLDUzIEBACisvKgorICogPGxpbnV4L3VzYi9hdWRpby5oPiAtLSBVU0IgQXVkaW8gZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRodW10cm9uaWNzIFB0eSBMdGQuCisgKiBEZXZlbG9wZWQgZm9yIFRodW10cm9uaWNzIGJ5IEdyZXkgSW5ub3ZhdGlvbgorICogQmVuIFdpbGxpYW1zb24gPGJlbi53aWxsaWFtc29uQGdyZXlpbm5vdmF0aW9uLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcyBkZWZpbmVkCisgKiBieSB0aGUgVVNCIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBBdWRpbyBEZXZpY2VzLgorICogQ29tbWVudHMgYmVsb3cgcmVmZXJlbmNlIHJlbGV2YW50IHNlY3Rpb25zIG9mIHRoYXQgZG9jdW1lbnQ6CisgKgorICogaHR0cDovL3d3dy51c2Iub3JnL2RldmVsb3BlcnMvZGV2Y2xhc3NfZG9jcy9hdWRpbzEwLnBkZgorICovCisKKyNpZm5kZWYgX19MSU5VWF9VU0JfQVVESU9fSAorI2RlZmluZSBfX0xJTlVYX1VTQl9BVURJT19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiBBLjIgQXVkaW8gSW50ZXJmYWNlIFN1YmNsYXNzIENvZGVzICovCisjZGVmaW5lIFVTQl9TVUJDTEFTU19BVURJT0NPTlRST0wJMHgwMQorI2RlZmluZSBVU0JfU1VCQ0xBU1NfQVVESU9TVFJFQU1JTkcJMHgwMgorI2RlZmluZSBVU0JfU1VCQ0xBU1NfTUlESVNUUkVBTUlORwkweDAzCisKKy8qIDQuMy4yICBDbGFzcy1TcGVjaWZpYyBBQyBJbnRlcmZhY2UgRGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9hY19oZWFkZXJfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsJCQkvLyA4K24KKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvLyBVU0JfRFRfQ1NfSU5URVJGQUNFCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkvLyBVU0JfTVNfSEVBREVSCisJX19sZTE2IGJjZEFEQzsJCQkvLyAweDAxMDAKKwlfX2xlMTYgd1RvdGFsTGVuZ3RoOwkJLy8gaW5jbHVkZXMgVW5pdCBhbmQgVGVybWluYWwgZGVzYy4KKwlfX3U4ICBiSW5Db2xsZWN0aW9uOwkJLy8gbgorCV9fdTggIGJhSW50ZXJmYWNlTnJbXTsJCS8vIFtuXQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0FDX0hFQURFUl9TSVpFKG4pCSg4KyhuKSkKKworLyogQXMgYWJvdmUsIGJ1dCBtb3JlIHVzZWZ1bCBmb3IgZGVmaW5pbmcgeW91ciBvd24gZGVzY3JpcHRvcnM6ICovCisjZGVmaW5lIERFQ0xBUkVfVVNCX0FDX0hFQURFUl9ERVNDUklQVE9SKG4pIAkJCVwKK3N0cnVjdCB1c2JfYWNfaGVhZGVyX2Rlc2NyaXB0b3JfIyNuIHsJCQkJXAorCV9fdTggIGJMZW5ndGg7CQkJCQkJXAorCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CQkJCVwKKwlfX2xlMTYgYmNkQURDOwkJCQkJCVwKKwlfX2xlMTYgd1RvdGFsTGVuZ3RoOwkJCQkJXAorCV9fdTggIGJJbkNvbGxlY3Rpb247CQkJCQlcCisJX191OCAgYmFJbnRlcmZhY2VOcltuXTsJCQkJCVwKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oIGIvaW5jbHVkZS9saW51eC91c2IvbWlkaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExYTk3ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9taWRpLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiA8bGludXgvdXNiL21pZGkuaD4gLS0gVVNCIE1JREkgZGVmaW5pdGlvbnMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFRodW10cm9uaWNzIFB0eSBMdGQuCisgKiBEZXZlbG9wZWQgZm9yIFRodW10cm9uaWNzIGJ5IEdyZXkgSW5ub3ZhdGlvbgorICogQmVuIFdpbGxpYW1zb24gPGJlbi53aWxsaWFtc29uQGdyZXlpbm5vdmF0aW9uLmNvbT4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlICgiR1BMIikgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlzIGZpbGUgaG9sZHMgVVNCIGNvbnN0YW50cyBhbmQgc3RydWN0dXJlcyBkZWZpbmVkCisgKiBieSB0aGUgVVNCIERldmljZSBDbGFzcyBEZWZpbml0aW9uIGZvciBNSURJIERldmljZXMuCisgKiBDb21tZW50cyBiZWxvdyByZWZlcmVuY2UgcmVsZXZhbnQgc2VjdGlvbnMgb2YgdGhhdCBkb2N1bWVudDoKKyAqCisgKiBodHRwOi8vd3d3LnVzYi5vcmcvZGV2ZWxvcGVycy9kZXZjbGFzc19kb2NzL21pZGkxMC5wZGYKKyAqLworCisjaWZuZGVmIF9fTElOVVhfVVNCX01JRElfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9NSURJX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIEEuMSAgTVMgQ2xhc3MtU3BlY2lmaWMgSW50ZXJmYWNlIERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVVNCX01TX0hFQURFUgkJMHgwMQorI2RlZmluZSBVU0JfTVNfTUlESV9JTl9KQUNLCTB4MDIKKyNkZWZpbmUgVVNCX01TX01JRElfT1VUX0pBQ0sJMHgwMworI2RlZmluZSBVU0JfTVNfRUxFTUVOVAkJMHgwNAorCisvKiBBLjIgIE1TIENsYXNzLVNwZWNpZmljIEVuZHBvaW50IERlc2NyaXB0b3IgU3VidHlwZXMgKi8KKyNkZWZpbmUgVVNCX01TX0dFTkVSQUwJCTB4MDEKKworLyogQS4zICBNUyBNSURJIElOIGFuZCBPVVQgSmFjayBUeXBlcyAqLworI2RlZmluZSBVU0JfTVNfRU1CRURERUQJCTB4MDEKKyNkZWZpbmUgVVNCX01TX0VYVEVSTkFMCQkweDAyCisKKy8qIDYuMS4yLjEgIENsYXNzLVNwZWNpZmljIE1TIEludGVyZmFjZSBIZWFkZXIgRGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9tc19oZWFkZXJfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOworCV9fbGUxNiBiY2RNU0M7CisJX19sZTE2IHdUb3RhbExlbmd0aDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9NU19IRUFERVJfU0laRQk3CisKKy8qIDYuMS4yLjIgIE1JREkgSU4gSmFjayBEZXNjcmlwdG9yICovCitzdHJ1Y3QgdXNiX21pZGlfaW5famFja19kZXNjcmlwdG9yIHsKKwlfX3U4ICBiTGVuZ3RoOworCV9fdTggIGJEZXNjcmlwdG9yVHlwZTsJCS8vIFVTQl9EVF9DU19JTlRFUkZBQ0UKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8vIFVTQl9NU19NSURJX0lOX0pBQ0sKKwlfX3U4ICBiSmFja1R5cGU7CQkvLyBVU0JfTVNfRU1CRURERUQvRVhURVJOQUwKKwlfX3U4ICBiSmFja0lEOworCV9fdTggIGlKYWNrOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX01JRElfSU5fU0laRQk2CisKK3N0cnVjdCB1c2JfbWlkaV9zb3VyY2VfcGluIHsKKwlfX3U4ICBiYVNvdXJjZUlEOworCV9fdTggIGJhU291cmNlUGluOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKy8qIDYuMS4yLjMgIE1JREkgT1VUIEphY2sgRGVzY3JpcHRvciAqLworc3RydWN0IHVzYl9taWRpX291dF9qYWNrX2Rlc2NyaXB0b3IgeworCV9fdTggIGJMZW5ndGg7CisJX191OCAgYkRlc2NyaXB0b3JUeXBlOwkJLy8gVVNCX0RUX0NTX0lOVEVSRkFDRQorCV9fdTggIGJEZXNjcmlwdG9yU3VidHlwZTsJLy8gVVNCX01TX01JRElfT1VUX0pBQ0sKKwlfX3U4ICBiSmFja1R5cGU7CQkvLyBVU0JfTVNfRU1CRURERUQvRVhURVJOQUwKKwlfX3U4ICBiSmFja0lEOworCV9fdTggIGJOcklucHV0UGluczsJCS8vIHAKKwlzdHJ1Y3QgdXNiX21pZGlfc291cmNlX3BpbiBwaW5zW107IC8vIFtwXQorCS8qX191OCAgaUphY2s7ICAtLSBvbW1pdHRlZCBkdWUgdG8gdmFyaWFibGUtc2l6ZWQgcGluc1tdICovCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfTUlESV9PVVRfU0laRShwKQkoNyArIDIgKiAocCkpCisKKy8qIEFzIGFib3ZlLCBidXQgbW9yZSB1c2VmdWwgZm9yIGRlZmluaW5nIHlvdXIgb3duIGRlc2NyaXB0b3JzOiAqLworI2RlZmluZSBERUNMQVJFX1VTQl9NSURJX09VVF9KQUNLX0RFU0NSSVBUT1IocCkJCQlcCitzdHJ1Y3QgdXNiX21pZGlfb3V0X2phY2tfZGVzY3JpcHRvcl8jI3AgewkJCVwKKwlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCisJX191OCAgYkphY2tUeXBlOwkJCQkJXAorCV9fdTggIGJKYWNrSUQ7CQkJCQkJXAorCV9fdTggIGJOcklucHV0UGluczsJCQkJCVwKKwlzdHJ1Y3QgdXNiX21pZGlfc291cmNlX3BpbiBwaW5zW3BdOwkJCVwKKwlfX3U4ICBpSmFjazsJCQkJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisvKiA2LjIuMiAgQ2xhc3MtU3BlY2lmaWMgTVMgQnVsayBEYXRhIEVuZHBvaW50IERlc2NyaXB0b3IgKi8KK3N0cnVjdCB1c2JfbXNfZW5kcG9pbnRfZGVzY3JpcHRvciB7CisJX191OCAgYkxlbmd0aDsJCQkvLyA0K24KKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkvLyBVU0JfRFRfQ1NfRU5EUE9JTlQKKwlfX3U4ICBiRGVzY3JpcHRvclN1YnR5cGU7CS8vIFVTQl9NU19HRU5FUkFMCisJX191OCAgYk51bUVtYk1JRElKYWNrOwkJLy8gbgorCV9fdTggIGJhQXNzb2NKYWNrSURbXTsJCS8vIFtuXQorfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX01TX0VORFBPSU5UX1NJWkUobikJKDQgKyAobikpCisKKy8qIEFzIGFib3ZlLCBidXQgbW9yZSB1c2VmdWwgZm9yIGRlZmluaW5nIHlvdXIgb3duIGRlc2NyaXB0b3JzOiAqLworI2RlZmluZSBERUNMQVJFX1VTQl9NU19FTkRQT0lOVF9ERVNDUklQVE9SKG4pCQkJXAorc3RydWN0IHVzYl9tc19lbmRwb2ludF9kZXNjcmlwdG9yXyMjbiB7CQkJCVwKKwlfX3U4ICBiTGVuZ3RoOwkJCQkJCVwKKwlfX3U4ICBiRGVzY3JpcHRvclR5cGU7CQkJCQlcCisJX191OCAgYkRlc2NyaXB0b3JTdWJ0eXBlOwkJCQlcCisJX191OCAgYk51bUVtYk1JRElKYWNrOwkJCQkJXAorCV9fdTggIGJhQXNzb2NKYWNrSURbbl07CQkJCQlcCit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXNiX290Zy5oIGIvaW5jbHVkZS9saW51eC91c2Ivb3RnLmgKc2ltaWxhcml0eSBpbmRleCA5NyUKcmVuYW1lIGZyb20gaW5jbHVkZS9saW51eC91c2Jfb3RnLmgKcmVuYW1lIHRvIGluY2x1ZGUvbGludXgvdXNiL290Zy5oCmluZGV4IGY4MjdmNmUuLjk4OTdmN2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvdXNiX290Zy5oCisrKyBiL2luY2x1ZGUvbGludXgvdXNiL290Zy5oCkBAIC0xLDQgKzEsNCBAQAotLy8gaW5jbHVkZS9saW51eC91c2Jfb3RnLmggCisvLyBpbmNsdWRlL2xpbnV4L3VzYi9vdGcuaAogCiAvKgogICogVGhlc2UgQVBJcyBtYXkgYmUgdXNlZCBiZXR3ZWVuIFVTQiBjb250cm9sbGVycy4gIFVTQiBkZXZpY2UgZHJpdmVycwpAQCAtNTIsNyArNTIsNyBAQAogCXUxNgkJCXBvcnRfY2hhbmdlOwogCiAJLyogYmluZC91bmJpbmQgdGhlIGhvc3QgY29udHJvbGxlciAqLwotCWludCAJKCpzZXRfaG9zdCkoc3RydWN0IG90Z190cmFuc2NlaXZlciAqb3RnLAorCWludAkoKnNldF9ob3N0KShzdHJ1Y3Qgb3RnX3RyYW5zY2VpdmVyICpvdGcsCiAJCQkJc3RydWN0IHVzYl9idXMgKmhvc3QpOwogCiAJLyogYmluZC91bmJpbmQgdGhlIHBlcmlwaGVyYWwgY29udHJvbGxlciAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaCBiL2luY2x1ZGUvbGludXgvdXNiX3VzdWFsLmgKaW5kZXggZTdmYzVmZS4uMmFlNzZmZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC91c2JfdXN1YWwuaAorKysgYi9pbmNsdWRlL2xpbnV4L3VzYl91c3VhbC5oCkBAIC0xMDgsNiArMTA4LDkgQEAKICNpZmRlZiBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBCiAjZGVmaW5lIFVTX1BSX0FMQVVEQSAgICAweGY0CQkvKiBBbGF1ZGEgY2hpcHNldHMgKi8KICNlbmRpZgorI2lmZGVmIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQQorI2RlZmluZSBVU19QUl9LQVJNQSAgICAgMHhmNQkJLyogUmlvIEthcm1hICovCisjZW5kaWYKIAogI2RlZmluZSBVU19QUl9ERVZJQ0UJMHhmZgkJLyogVXNlIGRldmljZSdzIHZhbHVlICovCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdXRpbWUuaCBiL2luY2x1ZGUvbGludXgvdXRpbWUuaAppbmRleCBjNmJmMjdiLi42NDBiZTZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3V0aW1lLmgKKysrIGIvaW5jbHVkZS9saW51eC91dGltZS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBfTElOVVhfVVRJTUVfSAogI2RlZmluZSBfTElOVVhfVVRJTUVfSAogCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogc3RydWN0IHV0aW1idWYgewogCXRpbWVfdCBhY3RpbWU7CiAJdGltZV90IG1vZHRpbWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCBlMzcxNWQ3Li40NGM1OWRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTExMzUsNyArMTEzNSw4IEBACiAJCQkJIChlcXVhbHMgZnJhbWUgbGluZXMgMzEzLTMzNiBmb3IgNjI1IGxpbmUgdmlkZW8KIAkJCQkgIHN0YW5kYXJkcywgMjYzLTI4NiBmb3IgNTI1IGxpbmUgc3RhbmRhcmRzKSAqLwogCV9fdTE2ICAgc2VydmljZV9saW5lc1syXVsyNF07Ci0JX191MzIgICByZXNlcnZlZFs0XTsgICAgLyogbXVzdCBiZSAwICovCisJZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisJX191MzIgICByZXNlcnZlZFszXTsgICAgLyogbXVzdCBiZSAwICovCiB9OwogCiBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEKQEAgLTEyNDIsNyArMTI0Myw3IEBACiAjZGVmaW5lIFZJRElPQ19HX1BSSU9SSVRZICAgICAgIF9JT1IgICgnVicsIDY3LCBlbnVtIHY0bDJfcHJpb3JpdHkpCiAjZGVmaW5lIFZJRElPQ19TX1BSSU9SSVRZICAgICAgIF9JT1cgICgnVicsIDY4LCBlbnVtIHY0bDJfcHJpb3JpdHkpCiAjaWYgMQotI2RlZmluZSBWSURJT0NfR19TTElDRURfVkJJX0NBUCBfSU9SICAoJ1YnLCA2OSwgc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXApCisjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1dSICgnVicsIDY5LCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCkKICNlbmRpZgogI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyAgICAgICBfSU8gICAoJ1YnLCA3MCkKICNkZWZpbmUgVklESU9DX0dfRVhUX0NUUkxTCV9JT1dSICgnVicsIDcxLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMpCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCBiL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oCmluZGV4IGRlZTg4YzZiLi5jZTVmMTQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaAorKysgYi9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaApAQCAtNjIsNyArNjIsNiBAQAogZXh0ZXJuIHN0cnVjdCB2bV9zdHJ1Y3QgKmdldF92bV9hcmVhX25vZGUodW5zaWduZWQgbG9uZyBzaXplLAogCQkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCBpbnQgbm9kZSk7CiBleHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqcmVtb3ZlX3ZtX2FyZWEodm9pZCAqYWRkcik7Ci1leHRlcm4gc3RydWN0IHZtX3N0cnVjdCAqX19yZW1vdmVfdm1fYXJlYSh2b2lkICphZGRyKTsKIGV4dGVybiBpbnQgbWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSwgcGdwcm90X3QgcHJvdCwKIAkJCXN0cnVjdCBwYWdlICoqKnBhZ2VzKTsKIGV4dGVybiB2b2lkIHVubWFwX3ZtX2FyZWEoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oIGIvaW5jbHVkZS9saW51eC92bXN0YXQuaAppbmRleCAxNzZjN2Y3Li5jODlkZjU1IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Ztc3RhdC5oCisrKyBiL2luY2x1ZGUvbGludXgvdm1zdGF0LmgKQEAgLTMsNyArMyw2IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS5oPgotI2luY2x1ZGUgPGxpbnV4L2NvbmZpZy5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92dF9rZXJuLmggYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAppbmRleCA5MThhMjk3Li4xMDA5ZDNmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaAorKysgYi9pbmNsdWRlL2xpbnV4L3Z0X2tlcm4uaApAQCAtMzMsNyArMzMsOCBAQAogaW50IHZjX2FsbG9jYXRlKHVuc2lnbmVkIGludCBjb25zb2xlKTsKIGludCB2Y19jb25zX2FsbG9jYXRlZCh1bnNpZ25lZCBpbnQgY29uc29sZSk7CiBpbnQgdmNfcmVzaXplKHN0cnVjdCB2Y19kYXRhICp2YywgdW5zaWduZWQgaW50IGNvbHMsIHVuc2lnbmVkIGludCBsaW5lcyk7Ci12b2lkIHZjX2Rpc2FsbG9jYXRlKHVuc2lnbmVkIGludCBjb25zb2xlKTsKK2ludCB2Y19sb2NrX3Jlc2l6ZShzdHJ1Y3QgdmNfZGF0YSAqdmMsIHVuc2lnbmVkIGludCBjb2xzLCB1bnNpZ25lZCBpbnQgbGluZXMpOwordm9pZCB2Y19kZWFsbG9jYXRlKHVuc2lnbmVkIGludCBjb25zb2xlKTsKIHZvaWQgcmVzZXRfcGFsZXR0ZShzdHJ1Y3QgdmNfZGF0YSAqdmMpOwogdm9pZCBkb19ibGFua19zY3JlZW4oaW50IGVudGVyaW5nX2dmeCk7CiB2b2lkIGRvX3VuYmxhbmtfc2NyZWVuKGludCBsZWF2aW5nX2dmeCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmggYi9pbmNsdWRlL2xpbnV4L3dpcmVsZXNzLmgKaW5kZXggMTM1ODg1Ni4uYTUwYTAxMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93aXJlbGVzcy5oCisrKyBiL2luY2x1ZGUvbGludXgvd2lyZWxlc3MuaApAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiBUaGlzIGZpbGUgZGVmaW5lIGEgc2V0IG9mIHN0YW5kYXJkIHdpcmVsZXNzIGV4dGVuc2lvbnMKICAqCi0gKiBWZXJzaW9uIDoJMjAJMTcuMi4wNgorICogVmVyc2lvbiA6CTIxCTE0LjMuMDYKICAqCiAgKiBBdXRob3JzIDoJSmVhbiBUb3VycmlsaGVzIC0gSFBMIC0gPGp0QGhwbC5ocC5jb20+CiAgKiBDb3B5cmlnaHQgKGMpIDE5OTctMjAwNiBKZWFuIFRvdXJyaWxoZXMsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCkBAIC02OSw5ICs2OSwxNCBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogSU5DTFVERVMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKy8qIFRoaXMgaGVhZGVyIGlzIHVzZWQgaW4gdXNlci1zcGFjZSwgdGhlcmVmb3JlIG5lZWQgdG8gYmUgc2FuaXRpc2VkCisgKiBmb3IgdGhhdCBwdXJwb3NlLiBUaG9zZSBpbmNsdWRlcyBhcmUgdXN1YWxseSBub3QgY29tcGF0aWJsZSB3aXRoIGdsaWJjLgorICogVG8ga25vdyB3aGljaCBpbmNsdWRlcyB0byB1c2UgaW4gdXNlci1zcGFjZSwgY2hlY2sgaXdsaWIuaC4gKi8KKyNpZmRlZiBfX0tFUk5FTF9fCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4JCS8qIGZvciAiY2FkZHJfdCIgZXQgYWwJCSovCiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CQkvKiBmb3IgInN0cnVjdCBzb2NrYWRkciIgZXQgYWwJKi8KICNpbmNsdWRlIDxsaW51eC9pZi5oPgkJCS8qIGZvciBJRk5BTVNJWiBhbmQgY28uLi4gKi8KKyNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBWRVJTSU9OICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoKQEAgLTgwLDcgKzg1LDcgQEAKICAqICh0aGVyZSBpcyBzb21lIHN0dWZmIHRoYXQgd2lsbCBiZSBhZGRlZCBpbiB0aGUgZnV0dXJlLi4uKQogICogSSBqdXN0IHBsYW4gdG8gaW5jcmVtZW50IHdpdGggZWFjaCBuZXcgdmVyc2lvbi4KICAqLwotI2RlZmluZSBXSVJFTEVTU19FWFQJMjAKKyNkZWZpbmUgV0lSRUxFU1NfRVhUCTIxCiAKIC8qCiAgKiBDaGFuZ2VzIDoKQEAgLTIwOCw2ICsyMTMsMTQgQEAKICAqIFYxOSB0byBWMjAKICAqIC0tLS0tLS0tLS0KICAqCS0gUnROZXRsaW5rIHJlcXVlc3RzIHN1cHBvcnQgKFNFVC9HRVQpCisgKgorICogVjIwIHRvIFYyMQorICogLS0tLS0tLS0tLQorICoJLSBSZW1vdmUgKHN0cnVjdCBuZXRfZGV2aWNlICopLT5nZXRfd2lyZWxlc3Nfc3RhdHMoKQorICoJLSBDaGFuZ2UgbGVuZ3RoIGluIEVTU0lEIGFuZCBOSUNLIHRvIHN0cmxlbigpIGluc3RlYWQgb2Ygc3RybGVuKCkrMQorICoJLSBBZGQgSVdfUkVUUllfU0hPUlQvSVdfUkVUUllfTE9ORyByZXRyeSBtb2RpZmllcnMKKyAqCS0gUG93ZXIvUmV0cnkgcmVsYXRpdmUgdmFsdWVzIG5vIGxvbmdlciAqIDEwMDAwMAorICoJLSBBZGQgZXhwbGljaXQgZmxhZyB0byB0ZWxsIHN0YXRzIGFyZSBpbiA4MDIuMTFrIFJDUEkgOiBJV19RVUFMX1JDUEkKICAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKiBDT05TVEFOVFMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTQ0OCw2ICs0NjEsNyBAQAogI2RlZmluZSBJV19RVUFMX1FVQUxfSU5WQUxJRAkweDEwCS8qIERyaXZlciBkb2Vzbid0IHByb3ZpZGUgdmFsdWUgKi8KICNkZWZpbmUgSVdfUVVBTF9MRVZFTF9JTlZBTElECTB4MjAKICNkZWZpbmUgSVdfUVVBTF9OT0lTRV9JTlZBTElECTB4NDAKKyNkZWZpbmUgSVdfUVVBTF9SQ1BJCQkweDgwCS8qIExldmVsICsgTm9pc2UgYXJlIDgwMi4xMWsgUkNQSSAqLwogI2RlZmluZSBJV19RVUFMX0FMTF9JTlZBTElECTB4NzAKIAogLyogRnJlcXVlbmN5IGZsYWdzICovCkBAIC01MDAsMTAgKzUxNCwxMiBAQAogI2RlZmluZSBJV19SRVRSWV9UWVBFCQkweEYwMDAJLyogVHlwZSBvZiBwYXJhbWV0ZXIgKi8KICNkZWZpbmUgSVdfUkVUUllfTElNSVQJCTB4MTAwMAkvKiBNYXhpbXVtIG51bWJlciBvZiByZXRyaWVzKi8KICNkZWZpbmUgSVdfUkVUUllfTElGRVRJTUUJMHgyMDAwCS8qIE1heGltdW0gZHVyYXRpb24gb2YgcmV0cmllcyBpbiB1cyAqLwotI2RlZmluZSBJV19SRVRSWV9NT0RJRklFUgkweDAwMEYJLyogTW9kaWZ5IGEgcGFyYW1ldGVyICovCisjZGVmaW5lIElXX1JFVFJZX01PRElGSUVSCTB4MDBGRgkvKiBNb2RpZnkgYSBwYXJhbWV0ZXIgKi8KICNkZWZpbmUgSVdfUkVUUllfTUlOCQkweDAwMDEJLyogVmFsdWUgaXMgYSBtaW5pbXVtICAqLwogI2RlZmluZSBJV19SRVRSWV9NQVgJCTB4MDAwMgkvKiBWYWx1ZSBpcyBhIG1heGltdW0gKi8KICNkZWZpbmUgSVdfUkVUUllfUkVMQVRJVkUJMHgwMDA0CS8qIFZhbHVlIGlzIG5vdCBpbiBzZWNvbmRzL21zL3VzICovCisjZGVmaW5lIElXX1JFVFJZX1NIT1JUCQkweDAwMTAJLyogVmFsdWUgaXMgZm9yIHNob3J0IHBhY2tldHMgICovCisjZGVmaW5lIElXX1JFVFJZX0xPTkcJCTB4MDAyMAkvKiBWYWx1ZSBpcyBmb3IgbG9uZyBwYWNrZXRzICovCiAKIC8qIFNjYW5uaW5nIHJlcXVlc3QgZmxhZ3MgKi8KICNkZWZpbmUgSVdfU0NBTl9ERUZBVUxUCQkweDAwMDAJLyogRGVmYXVsdCBzY2FuIG9mIHRoZSBkcml2ZXIgKi8KQEAgLTEwMTcsNyArMTAzMyw3IEBACiAJLyogTm90ZSA6IHRoaXMgZnJlcXVlbmN5IGxpc3QgZG9lc24ndCBuZWVkIHRvIGZpdCBjaGFubmVsIG51bWJlcnMsCiAJICogYmVjYXVzZSBlYWNoIGVudHJ5IGNvbnRhaW4gaXRzIGNoYW5uZWwgaW5kZXggKi8KIAotCV9fdTMyCQllbmNfY2FwYTsgLyogSVdfRU5DX0NBUEFfKiBiaXQgZmllbGQgKi8KKwlfX3UzMgkJZW5jX2NhcGE7CS8qIElXX0VOQ19DQVBBXyogYml0IGZpZWxkICovCiB9OwogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaCBiL2luY2x1ZGUvbGludXgvd3JpdGViYWNrLmgKaW5kZXggNTZhMjNhMC4uNGY0ZDk4YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC93cml0ZWJhY2suaAorKysgYi9pbmNsdWRlL2xpbnV4L3dyaXRlYmFjay5oCkBAIC0xMTEsMTIgKzExMSwxNSBAQAogfQogCiBpbnQgcGRmbHVzaF9vcGVyYXRpb24odm9pZCAoKmZuKSh1bnNpZ25lZCBsb25nKSwgdW5zaWduZWQgbG9uZyBhcmcwKTsKK2V4dGVybiBpbnQgZ2VuZXJpY193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAorCQkJICAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOwogaW50IGRvX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKTsKIGludCBzeW5jX3BhZ2VfcmFuZ2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQlsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpOwogaW50IHN5bmNfcGFnZV9yYW5nZV9ub2xvY2soc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICBsb2ZmX3QgcG9zLCBsb2ZmX3QgY291bnQpOwogdm9pZCBzZXRfcGFnZV9kaXJ0eV9iYWxhbmNlKHN0cnVjdCBwYWdlICpwYWdlKTsKK3ZvaWQgd3JpdGViYWNrX3NldF9yYXRlbGltaXQodm9pZCk7CiAKIC8qIHBkZmx1c2guYyAqLwogZXh0ZXJuIGludCBucl9wZGZsdXNoX3RocmVhZHM7CS8qIEdsb2JhbCBzbyBpdCBjYW4gYmUgZXhwb3J0ZWQgdG8gc3lzY3RsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3hmcm0uaCBiL2luY2x1ZGUvbGludXgveGZybS5oCmluZGV4IDE0ZWNkMTkuLjQzMGFmZDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgveGZybS5oCisrKyBiL2luY2x1ZGUvbGludXgveGZybS5oCkBAIC0xMiw4ICsxMiw4IEBACiAgKi8KIHR5cGVkZWYgdW5pb24KIHsKLQlfX3UzMgkJYTQ7Ci0JX191MzIJCWE2WzRdOworCV9fYmUzMgkJYTQ7CisJX19iZTMyCQlhNls0XTsKIH0geGZybV9hZGRyZXNzX3Q7CiAKIC8qIElkZW50IG9mIGEgc3BlY2lmaWMgeGZybV9zdGF0ZS4gSXQgaXMgdXNlZCBvbiBpbnB1dCB0byBsb29rdXAKQEAgLTIzLDcgKzIzLDcgQEAKIHN0cnVjdCB4ZnJtX2lkCiB7CiAJeGZybV9hZGRyZXNzX3QJZGFkZHI7Ci0JX191MzIJCXNwaTsKKwlfX2JlMzIJCXNwaTsKIAlfX3U4CQlwcm90bzsKIH07CiAKQEAgLTQ5LDEwICs0OSwxMCBAQAogewogCXhmcm1fYWRkcmVzc190CWRhZGRyOwogCXhmcm1fYWRkcmVzc190CXNhZGRyOwotCV9fdTE2CWRwb3J0OwotCV9fdTE2CWRwb3J0X21hc2s7Ci0JX191MTYJc3BvcnQ7Ci0JX191MTYJc3BvcnRfbWFzazsKKwlfX2JlMTYJZHBvcnQ7CisJX19iZTE2CWRwb3J0X21hc2s7CisJX19iZTE2CXNwb3J0OworCV9fYmUxNglzcG9ydF9tYXNrOwogCV9fdTE2CWZhbWlseTsKIAlfX3U4CXByZWZpeGxlbl9kOwogCV9fdTgJcHJlZml4bGVuX3M7CkBAIC0yODEsNyArMjgxLDcgQEAKIAogc3RydWN0IHhmcm1fdXNlcnNhX2lkIHsKIAl4ZnJtX2FkZHJlc3NfdAkJCWRhZGRyOwotCV9fdTMyCQkJCXNwaTsKKwlfX2JlMzIJCQkJc3BpOwogCV9fdTE2CQkJCWZhbWlseTsKIAlfX3U4CQkJCXByb3RvOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmggYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCmluZGV4IDdiYWIwOWIuLjhmNTg0MDYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaApAQCAtOTAsNiArOTAsOCBAQAogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3Bpbm5hY2xlX2NvbG9yW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19ucGd0ZWNoW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19ub3J3b29kW0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19wcm90ZXVzXzIzMDlbSVJfS0VZVEFCX1NJWkVdOwogCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oIGIvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oCmluZGV4IDNjNDNiOTVmNC4uMzdkYWQwNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS90dW5lci10eXBlcy5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdHVuZXItdHlwZXMuaApAQCAtNzIsNiArNzIsOSBAQAogCXVuc2lnbmVkIGludCBwb3J0Ml9pbnZlcnRfZm9yX3NlY2FtX2xjOjE7CiAJLyogU29tZSBjYXJkcyByZXF1aXJlIFBPUlQxIHRvIGJlIDEgZm9yIG1vbm8gUmFkaW8gRk0gYW5kIDAgZm9yIHN0ZXJlby4gKi8KIAl1bnNpZ25lZCBpbnQgcG9ydDFfc2V0X2Zvcl9mbV9tb25vOjE7CisJLyogU2VsZWN0IDE4JSAob3IgYWNjb3JkaW5nIHRvIGRhdGFzaGVldCAwJSkgTCBzdGFuZGFyZCBQTEwgZ2F0aW5nLAorCSAgIHZzIHRoZSBkcml2ZXIgZGVmYXVsdCBvZiAzNiUuICovCisJdW5zaWduZWQgaW50IGRlZmF1bHRfcGxsX2dhdGluZ18xODoxOwogCS8qIERlZmF1bHQgdGRhOTg4NyBUT1AgdmFsdWUgaW4gZEIgZm9yIHRoZSBsb3cgYmFuZC4gRGVmYXVsdCBpcyAwLgogCSAgIFJhbmdlOiAtMTY6KzE1ICovCiAJc2lnbmVkIGludCBkZWZhdWx0X3RvcF9sb3c6NTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdHVuZXIuaCBiL2luY2x1ZGUvbWVkaWEvdHVuZXIuaAppbmRleCAyZjdiMDBiLi4zMTE2ZTc1IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3R1bmVyLmgKKysrIGIvaW5jbHVkZS9tZWRpYS90dW5lci5oCkBAIC0xNDQsNiArMTQ0LDcgQEAKICNkZWZpbmUgVERBOTg4N19ERUVNUEhBU0lTXzUwIAkJKDI8PDE2KQogI2RlZmluZSBUREE5ODg3X0RFRU1QSEFTSVNfNzUgCQkoMzw8MTYpCiAjZGVmaW5lIFREQTk4ODdfQVVUT01VVEUgCQkoMTw8MTgpCisjZGVmaW5lIFREQTk4ODdfR0FUSU5HXzE4CQkoMTw8MTkpCiAKICNpZmRlZiBfX0tFUk5FTF9fCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCA1NTY0ZGIxLi5hZWNjOTQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0xMjEsMTAgKzEyMSwxNyBAQAogCS8qIGdlbmVyYWwgaWRlbnRzOiByZXNlcnZlZCByYW5nZSAwLTQ5ICovCiAJVjRMMl9JREVOVF9VTktOT1dOID0gMCwKIAotCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDAtMTQ5ICovCisJLyogbW9kdWxlIHNhYTcxMTA6IGp1c3QgaWRlbnQ9IDEwMCAqLworCVY0TDJfSURFTlRfU0FBNzExMCA9IDEwMCwKKworCS8qIG1vZHVsZSBzYWE3MTExOiBqdXN0IGlkZW50PSAxMDEgKi8KKwlWNEwyX0lERU5UX1NBQTcxMTEgPSAxMDEsCisKKwkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAyLTE0OSAqLwogCVY0TDJfSURFTlRfU0FBNzExMyA9IDEwMywKIAlWNEwyX0lERU5UX1NBQTcxMTQgPSAxMDQsCiAJVjRMMl9JREVOVF9TQUE3MTE1ID0gMTA1LAorCVY0TDJfSURFTlRfU0FBNzExOCA9IDEwOCwKIAogCS8qIG1vZHVsZSBzYWE3MTI3OiByZXNlcnZlZCByYW5nZSAxNTAtMTk5ICovCiAJVjRMMl9JREVOVF9TQUE3MTI3ID0gMTU3LApAQCAtMTY2LDExICsxNzMsMTIgQEAKICNkZWZpbmUgVklESU9DX0lOVF9TX1NUQU5EQlkgCSAgICAgX0lPVygnZCcsIDk0LCB1MzIpCiAKIC8qIG9ubHkgaW1wbGVtZW50ZWQgaWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRyBpcyBkZWZpbmVkICovCi0jZGVmaW5lCVZJRElPQ19JTlRfU19SRUdJU1RFUiAJCV9JT1IgKCdkJywgMTAwLCBzdHJ1Y3QgdjRsMl9yZWdpc3RlcikKKyNkZWZpbmUJVklESU9DX0lOVF9TX1JFR0lTVEVSIAkJX0lPVyAoJ2QnLCAxMDAsIHN0cnVjdCB2NGwyX3JlZ2lzdGVyKQogI2RlZmluZQlWSURJT0NfSU5UX0dfUkVHSVNURVIgCQlfSU9XUignZCcsIDEwMSwgc3RydWN0IHY0bDJfcmVnaXN0ZXIpCiAKLS8qIFJlc2V0IHRoZSBJMkMgY2hpcCAqLwotI2RlZmluZSBWSURJT0NfSU5UX1JFU0VUICAgICAgICAgICAgCV9JTyAgKCdkJywgMTAyKQorLyogR2VuZXJpYyByZXNldCBjb21tYW5kLiBUaGUgYXJndW1lbnQgc2VsZWN0cyB3aGljaCBzdWJzeXN0ZW1zIHRvIHJlc2V0LgorICAgUGFzc2luZyAwIHdpbGwgYWx3YXlzIHJlc2V0IHRoZSB3aG9sZSBjaGlwLiAqLworI2RlZmluZSBWSURJT0NfSU5UX1JFU0VUICAgICAgICAgICAgCV9JT1cgKCdkJywgMTAyLCB1MzIpCiAKIC8qIFNldCB0aGUgZnJlcXVlbmN5IChpbiBIeikgb2YgdGhlIGF1ZGlvIGNsb2NrIG91dHB1dC4KICAgIFVzZWQgdG8gc2xhdmUgYW4gYXVkaW8gcHJvY2Vzc29yIHRvIHRoZSB2aWRlbyBkZWNvZGVyLCBlbnN1cmluZyB0aGF0IGF1ZGlvCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKaW5kZXggYmI0OTViNy4uNmExMWQ3NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaApAQCAtOSw3ICs5LDggQEAKICNpZm5kZWYgX1Y0TDJfREVWX0gKICNkZWZpbmUgX1Y0TDJfREVWX0gKIAotI2RlZmluZSBPQlNPTEVURV9PV05FUiAxIC8qIHRvIGJlIHJlbW92ZWQgc29vbiAqLworI2RlZmluZSBPQlNPTEVURV9PV05FUiAgIDEgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCisjZGVmaW5lIE9CU09MRVRFX0RFVkRBVEEgMSAvKiB0byBiZSByZW1vdmVkIHNvb24gKi8KIAogI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgpAQCAtMzM4LDggKzMzOSw2IEBACiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCiAjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotZXh0ZXJuIHN0cnVjdCB2aWRlb19kZXZpY2UqIHZpZGVvX2RldmRhdGEoc3RydWN0IGZpbGUqKTsKLQogI2RlZmluZSB0b192aWRlb19kZXZpY2UoY2QpIGNvbnRhaW5lcl9vZihjZCwgc3RydWN0IHZpZGVvX2RldmljZSwgY2xhc3NfZGV2KQogc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrCiB2aWRlb19kZXZpY2VfY3JlYXRlX2ZpbGUoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkLApAQCAtMzcwLDkgKzM2OSwxNCBAQAogewogCWRldi0+cHJpdiA9IGRhdGE7CiB9CisKICNlbmRpZgogCisjaWZkZWYgT0JTT0xFVEVfREVWREFUQSAvKiB0byBiZSByZW1vdmVkIHNvb24gKi8KKy8qIE9ic29sZXRlIHN0dWZmIC0gU3RpbGwgbmVlZGVkIGZvciByYWRpbyBkZXZpY2VzIGFuZCBvYnNvbGV0ZSBkcml2ZXJzICovCitleHRlcm4gc3RydWN0IHZpZGVvX2RldmljZSogdmlkZW9fZGV2ZGF0YShzdHJ1Y3QgZmlsZSopOwogZXh0ZXJuIGludCB2aWRlb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CiBleHRlcm4gaW50IHZpZGVvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKTsKKyNlbmRpZgogCiAjZW5kaWYgLyogX1Y0TDJfREVWX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2FycC5oIGIvaW5jbHVkZS9uZXQvYXJwLmgKaW5kZXggNjQzYmRlZC4uNmEzZDlhNyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQvYXJwLmgKQEAgLTEyLDE1ICsxMiwxNSBAQAogZXh0ZXJuIHZvaWQJYXJwX2luaXQodm9pZCk7CiBleHRlcm4gaW50CWFycF9maW5kKHVuc2lnbmVkIGNoYXIgKmhhZGRyLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIGV4dGVybiBpbnQJYXJwX2lvY3RsKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgX191c2VyICphcmcpOwotZXh0ZXJuIHZvaWQgICAgIGFycF9zZW5kKGludCB0eXBlLCBpbnQgcHR5cGUsIHUzMiBkZXN0X2lwLCAKLQkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgc3JjX2lwLCAKK2V4dGVybiB2b2lkICAgICBhcnBfc2VuZChpbnQgdHlwZSwgaW50IHB0eXBlLCBfX2JlMzIgZGVzdF9pcCwKKwkJCSBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgc3JjX2lwLAogCQkJIHVuc2lnbmVkIGNoYXIgKmRlc3RfaHcsIHVuc2lnbmVkIGNoYXIgKnNyY19odywgdW5zaWduZWQgY2hhciAqdGgpOwogZXh0ZXJuIGludAlhcnBfYmluZF9uZWlnaGJvdXIoc3RydWN0IGRzdF9lbnRyeSAqZHN0KTsKIGV4dGVybiBpbnQJYXJwX21jX21hcCh1MzIgYWRkciwgdTggKmhhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZGlyKTsKIGV4dGVybiB2b2lkCWFycF9pZmRvd24oc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiAKLWV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqYXJwX2NyZWF0ZShpbnQgdHlwZSwgaW50IHB0eXBlLCB1MzIgZGVzdF9pcCwKLQkJCQkgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzcmNfaXAsCitleHRlcm4gc3RydWN0IHNrX2J1ZmYgKmFycF9jcmVhdGUoaW50IHR5cGUsIGludCBwdHlwZSwgX19iZTMyIGRlc3RfaXAsCisJCQkJICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgc3JjX2lwLAogCQkJCSAgdW5zaWduZWQgY2hhciAqZGVzdF9odywgdW5zaWduZWQgY2hhciAqc3JjX2h3LAogCQkJCSAgdW5zaWduZWQgY2hhciAqdGFyZ2V0X2h3KTsKIGV4dGVybiB2b2lkIGFycF94bWl0KHN0cnVjdCBza19idWZmICpza2IpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oIGIvaW5jbHVkZS9uZXQvYmx1ZXRvb3RoL2hjaS5oCmluZGV4IGIyYmRiMWEuLjEwYTNlZWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2kuaAorKysgYi9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpLmgKQEAgLTQ0LDEyICs0NCwxMyBAQAogI2RlZmluZSBIQ0lfTk9USUZZX1ZPSUNFX1NFVFRJTkcJMwogCiAvKiBIQ0kgZGV2aWNlIHR5cGVzICovCi0jZGVmaW5lIEhDSV9WSENJCTAKKyNkZWZpbmUgSENJX1ZJUlRVQUwJMAogI2RlZmluZSBIQ0lfVVNCCQkxCiAjZGVmaW5lIEhDSV9QQ0NBUkQJMgogI2RlZmluZSBIQ0lfVUFSVAkzCiAjZGVmaW5lIEhDSV9SUzIzMgk0CiAjZGVmaW5lIEhDSV9QQ0kJCTUKKyNkZWZpbmUgSENJX1NESU8JNgogCiAvKiBIQ0kgZGV2aWNlIHF1aXJrcyAqLwogZW51bSB7CkBAIC0yOTYsNiArMjk3LDcgQEAKIAogLyogTGluayBDb250cm9sICovCiAjZGVmaW5lIE9HRl9MSU5LX0NUTAkweDAxIAorCiAjZGVmaW5lIE9DRl9DUkVBVEVfQ09OTgkJMHgwMDA1CiBzdHJ1Y3QgaGNpX2NwX2NyZWF0ZV9jb25uIHsKIAliZGFkZHJfdCBiZGFkZHI7CkBAIC0zMDYsNiArMzA4LDExIEBACiAJX191OCAgICAgcm9sZV9zd2l0Y2g7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAorI2RlZmluZSBPQ0ZfQ1JFQVRFX0NPTk5fQ0FOQ0VMCTB4MDAwOAorc3RydWN0IGhjaV9jcF9jcmVhdGVfY29ubl9jYW5jZWwgeworCWJkYWRkcl90IGJkYWRkcjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCiAjZGVmaW5lIE9DRl9BQ0NFUFRfQ09OTl9SRVEJMHgwMDA5CiBzdHJ1Y3QgaGNpX2NwX2FjY2VwdF9jb25uX3JlcSB7CiAJYmRhZGRyX3QgYmRhZGRyOwpAQCAtMzM5LDYgKzM0Niw4IEBACiAKICNkZWZpbmUgT0NGX0lOUVVJUllfQ0FOQ0VMCTB4MDAwMgogCisjZGVmaW5lIE9DRl9FWElUX1BFUklPRElDX0lOUQkweDAwMDQKKwogI2RlZmluZSBPQ0ZfTElOS19LRVlfUkVQTFkJMHgwMDBCCiBzdHJ1Y3QgaGNpX2NwX2xpbmtfa2V5X3JlcGx5IHsKIAliZGFkZHJfdCBiZGFkZHI7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuaCBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCmluZGV4IGQ4NDg1NWYuLmRmMjJlZmMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCisrKyBiL2luY2x1ZGUvbmV0L2JsdWV0b290aC9oY2lfY29yZS5oCkBAIC03Miw2ICs3Miw5IEBACiAJX191OAkJdHlwZTsKIAliZGFkZHJfdAliZGFkZHI7CiAJX191OAkJZmVhdHVyZXNbOF07CisJX191OAkJaGNpX3ZlcjsKKwlfX3UxNgkJaGNpX3JldjsKKwlfX3UxNgkJbWFudWZhY3R1cmVyOwogCV9fdTE2CQl2b2ljZV9zZXR0aW5nOwogCiAJX191MTYJCXBrdF90eXBlOwpAQCAtMTY1LDYgKzE2OCwxMCBAQAogCXN0cnVjdCB0aW1lcl9saXN0IGRpc2NfdGltZXI7CiAJc3RydWN0IHRpbWVyX2xpc3QgaWRsZV90aW1lcjsKIAorCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCisJc3RydWN0IGRldmljZQlkZXY7CisKIAlzdHJ1Y3QgaGNpX2RldgkqaGRldjsKIAl2b2lkCQkqbDJjYXBfZGF0YTsKIAl2b2lkCQkqc2NvX2RhdGE7CkBAIC0zMDksMTAgKzMxNiwxMyBAQAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0KCZjb25uLT5yZWZjbnQpKSB7CiAJCXVuc2lnbmVkIGxvbmcgdGltZW87CiAJCWlmIChjb25uLT50eXBlID09IEFDTF9MSU5LKSB7Ci0JCQl0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoSENJX0RJU0NPTk5fVElNRU9VVCk7Ci0JCQlpZiAoIWNvbm4tPm91dCkKLQkJCQl0aW1lbyAqPSAyOwogCQkJZGVsX3RpbWVyKCZjb25uLT5pZGxlX3RpbWVyKTsKKwkJCWlmIChjb25uLT5zdGF0ZSA9PSBCVF9DT05ORUNURUQpIHsKKwkJCQl0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoSENJX0RJU0NPTk5fVElNRU9VVCk7CisJCQkJaWYgKCFjb25uLT5vdXQpCisJCQkJCXRpbWVvICo9IDI7CisJCQl9IGVsc2UKKwkJCQl0aW1lbyA9IG1zZWNzX3RvX2ppZmZpZXMoMTApOwogCQl9IGVsc2UKIAkJCXRpbWVvID0gbXNlY3NfdG9famlmZmllcygxMCk7CiAJCW1vZF90aW1lcigmY29ubi0+ZGlzY190aW1lciwgamlmZmllcyArIHRpbWVvKTsKQEAgLTQxMiw2ICs0MjIsOCBAQAogCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KTsKIHZvaWQgaGNpX3VucmVnaXN0ZXJfc3lzZnMoc3RydWN0IGhjaV9kZXYgKmhkZXYpOwordm9pZCBoY2lfY29ubl9hZGRfc3lzZnMoc3RydWN0IGhjaV9jb25uICpjb25uKTsKK3ZvaWQgaGNpX2Nvbm5fZGVsX3N5c2ZzKHN0cnVjdCBoY2lfY29ubiAqY29ubik7CiAKICNkZWZpbmUgU0VUX0hDSURFVl9ERVYoaGRldiwgcGRldikgKChoZGV2KS0+cGFyZW50ID0gKHBkZXYpKQogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmggYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKaW5kZXggMmQ3MjQ5NmMuLjcxOGI0ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2NpcHNvX2lwdjQuaAorKysgYi9pbmNsdWRlL25ldC9jaXBzb19pcHY0LmgKQEAgLTEyOCw3ICsxMjgsOSBAQAogCiAjaWZkZWYgQ09ORklHX05FVExBQkVMCiBpbnQgY2lwc29fdjRfZG9pX2FkZChzdHJ1Y3QgY2lwc29fdjRfZG9pICpkb2lfZGVmKTsKLWludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKTsKK2ludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksCisJCQlzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvLAorCQkJdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IHJjdV9oZWFkICogaGVhZCkpOwogc3RydWN0IGNpcHNvX3Y0X2RvaSAqY2lwc29fdjRfZG9pX2dldGRlZih1MzIgZG9pKTsKIGludCBjaXBzb192NF9kb2lfd2Fsayh1MzIgKnNraXBfY250LAogCQkgICAgIGludCAoKmNhbGxiYWNrKSAoc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiwgdm9pZCAqYXJnKSwKQEAgLTE0Myw2ICsxNDUsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIGludCBjaXBzb192NF9kb2lfcmVtb3ZlKHUzMiBkb2ksCisJCQkJICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8sCiAJCQkJICAgIHZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKQogewogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHN0LmggYi9pbmNsdWRlL25ldC9kc3QuaAppbmRleCBhOGQ4MjVmLi5lMTU2ZTM4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9kc3QuaAorKysgYi9pbmNsdWRlL25ldC9kc3QuaApAQCAtODQsNyArODQsNyBAQAogc3RydWN0IGRzdF9vcHMKIHsKIAl1bnNpZ25lZCBzaG9ydAkJZmFtaWx5OwotCXVuc2lnbmVkIHNob3J0CQlwcm90b2NvbDsKKwlfX2JlMTYJCQlwcm90b2NvbDsKIAl1bnNpZ25lZAkJZ2NfdGhyZXNoOwogCiAJaW50CQkJKCpnYykodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9mbG93LmggYi9pbmNsdWRlL25ldC9mbG93LmgKaW5kZXggM2NhMjEwZS4uZGRmNWYzYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZmxvdy5oCisrKyBiL2luY2x1ZGUvbmV0L2Zsb3cuaApAQCAtMTYsOCArMTYsOCBAQAogCiAJdW5pb24gewogCQlzdHJ1Y3QgewotCQkJX191MzIJCQlkYWRkcjsKLQkJCV9fdTMyCQkJc2FkZHI7CisJCQlfX2JlMzIJCQlkYWRkcjsKKwkJCV9fYmUzMgkJCXNhZGRyOwogCQkJX191MzIJCQlmd21hcms7CiAJCQlfX3U4CQkJdG9zOwogCQkJX191OAkJCXNjb3BlOwpAQCAtNTYsOCArNTYsOCBAQAogI2RlZmluZSBGTE9XSV9GTEFHX01VTFRJUEFUSE9MRFJPVVRFIDB4MDEKIAl1bmlvbiB7CiAJCXN0cnVjdCB7Ci0JCQlfX3UxNglzcG9ydDsKLQkJCV9fdTE2CWRwb3J0OworCQkJX19iZTE2CXNwb3J0OworCQkJX19iZTE2CWRwb3J0OwogCQl9IHBvcnRzOwogCiAJCXN0cnVjdCB7CkBAIC03Myw3ICs3Myw3IEBACiAJCQlfX3U4CW9iam5hbWVbMTZdOyAvKiBOb3QgemVybyB0ZXJtaW5hdGVkICovCiAJCX0gZG5wb3J0czsKIAotCQlfX3UzMgkJc3BpOworCQlfX2JlMzIJCXNwaTsKIAogI2lmZGVmIENPTkZJR19JUFY2X01JUDYKIAkJc3RydWN0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2dlbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKaW5kZXggNGEzOGQ4NS4uYjYxOTMxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKKysrIGIvaW5jbHVkZS9uZXQvZ2VuZXRsaW5rLmgKQEAgLTE2OSw0ICsxNjksMjIgQEAKIAlyZXR1cm4gKG5saC0+bmxtc2dfbGVuIC0gR0VOTF9IRFJMRU4gLSBOTE1TR19IRFJMRU4pOwogfQogCisvKioKKyAqIGdlbmxtc2dfbXNnX3NpemUgLSBsZW5ndGggb2YgZ2VuZXRsaW5rIG1lc3NhZ2Ugbm90IGluY2x1ZGluZyBwYWRkaW5nCisgKiBAcGF5bG9hZDogbGVuZ3RoIG9mIG1lc3NhZ2UgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX21zZ19zaXplKGludCBwYXlsb2FkKQoreworCXJldHVybiBHRU5MX0hEUkxFTiArIHBheWxvYWQ7Cit9CisKKy8qKgorICogZ2VubG1zZ190b3RhbF9zaXplIC0gbGVuZ3RoIG9mIGdlbmV0bGluayBtZXNzYWdlIGluY2x1ZGluZyBwYWRkaW5nCisgKiBAcGF5bG9hZDogbGVuZ3RoIG9mIG1lc3NhZ2UgcGF5bG9hZAorICovCitzdGF0aWMgaW5saW5lIGludCBnZW5sbXNnX3RvdGFsX3NpemUoaW50IHBheWxvYWQpCit7CisJcmV0dXJuIE5MTVNHX0FMSUdOKGdlbmxtc2dfbXNnX3NpemUocGF5bG9hZCkpOworfQorCiAjZW5kaWYJLyogX19ORVRfR0VORVJJQ19ORVRMSU5LX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2ljbXAuaCBiL2luY2x1ZGUvbmV0L2ljbXAuaAppbmRleCAwNWY4ZmY3Li5kYzA5NDc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pY21wLmgKKysrIGIvaW5jbHVkZS9uZXQvaWNtcC5oCkBAIC0zOCw3ICszOCw3IEBACiBzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseTsKIHN0cnVjdCBza19idWZmOwogCi1leHRlcm4gdm9pZAlpY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgIGludCB0eXBlLCBpbnQgY29kZSwgdTMyIGluZm8pOworZXh0ZXJuIHZvaWQJaWNtcF9zZW5kKHN0cnVjdCBza19idWZmICpza2JfaW4sICBpbnQgdHlwZSwgaW50IGNvZGUsIF9fYmUzMiBpbmZvKTsKIGV4dGVybiBpbnQJaWNtcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50CWljbXBfaW9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBleHRlcm4gdm9pZAlpY21wX2luaXQoc3RydWN0IG5ldF9wcm90b19mYW1pbHkgKm9wcyk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAppbmRleCBkZTRlODNiNi4uMGJjZjlmMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9jb25uZWN0aW9uX3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X2Nvbm5lY3Rpb25fc29jay5oCkBAIC0yMzgsOSArMjM4LDkgQEAKIAogZXh0ZXJuIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfY3NrX3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkJc3RydWN0IHJlcXVlc3Rfc29jayAqKipwcmV2cCwKLQkJCQkJCWNvbnN0IF9fdTE2IHJwb3J0LAotCQkJCQkJY29uc3QgX191MzIgcmFkZHIsCi0JCQkJCQljb25zdCBfX3UzMiBsYWRkcik7CisJCQkJCQljb25zdCBfX2JlMTYgcnBvcnQsCisJCQkJCQljb25zdCBfX2JlMzIgcmFkZHIsCisJCQkJCQljb25zdCBfX2JlMzIgbGFkZHIpOwogZXh0ZXJuIGludCBpbmV0X2Nza19iaW5kX2NvbmZsaWN0KGNvbnN0IHN0cnVjdCBzb2NrICpzaywKIAkJCQkgIGNvbnN0IHN0cnVjdCBpbmV0X2JpbmRfYnVja2V0ICp0Yik7CiBleHRlcm4gaW50IGluZXRfY3NrX2dldF9wb3J0KHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfaGFzaHRhYmxlcy5oIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKaW5kZXggYjQ0OTFjOS4uYTllYjJlYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9oYXNodGFibGVzLmgKQEAgLTI3Miw0MiArMjcyLDU2IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3Qgc29jayAqX19pbmV0X2xvb2t1cF9saXN0ZW5lcihzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJCSAgIGNvbnN0IHUzMiBkYWRkciwKKwkJCQkJICAgY29uc3QgX19iZTMyIGRhZGRyLAogCQkJCQkgICBjb25zdCB1bnNpZ25lZCBzaG9ydCBobnVtLAogCQkJCQkgICBjb25zdCBpbnQgZGlmKTsKIAogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqaW5ldF9sb29rdXBfbGlzdGVuZXIoc3RydWN0IGluZXRfaGFzaGluZm8gKmhhc2hpbmZvLAotCQkJCQkJdTMyIGRhZGRyLCB1MTYgZHBvcnQsIGludCBkaWYpCisJCQkJCQlfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCwgaW50IGRpZikKIHsKIAlyZXR1cm4gX19pbmV0X2xvb2t1cF9saXN0ZW5lcihoYXNoaW5mbywgZGFkZHIsIG50b2hzKGRwb3J0KSwgZGlmKTsKIH0KIAogLyogU29ja2V0IGRlbXV4IGVuZ2luZSB0b3lzLiAqLworLyogV2hhdCBoYXBwZW5zIGhlcmUgaXMgdWdseTsgdGhlcmUncyBhIHBhaXIgb2YgYWRqYWNlbnQgZmllbGRzIGluCisgICBzdHJ1Y3QgaW5ldF9zb2NrOyBfX2JlMTYgZHBvcnQgZm9sbG93ZWQgYnkgX191MTYgbnVtLiAgV2Ugd2FudCB0bworICAgc2VhcmNoIGJ5IHBhaXIsIHNvIHdlIGNvbWJpbmUgdGhlIGtleXMgaW50byBhIHNpbmdsZSAzMmJpdCB2YWx1ZQorICAgYW5kIGNvbXBhcmUgd2l0aCAzMmJpdCB2YWx1ZSByZWFkIGZyb20gJi4uLi0+ZHBvcnQuICBMZXQncyBhdCBsZWFzdAorICAgbWFrZSBzdXJlIHRoYXQgaXQncyBub3QgbWl4ZWQgd2l0aCBhbnl0aGluZyBlbHNlLi4uCisgICBPbiA2NGJpdCB0YXJnZXRzIHdlIGNvbWJpbmUgY29tcGFyaXNvbnMgd2l0aCBwYWlyIG9mIGFkamFjZW50IF9fYmUzMgorICAgZmllbGRzIGluIHRoZSBzYW1lIHdheS4KKyovCit0eXBlZGVmIF9fdTMyIF9fYml0d2lzZSBfX3BvcnRwYWlyOwogI2lmZGVmIF9fQklHX0VORElBTgogI2RlZmluZSBJTkVUX0NPTUJJTkVEX1BPUlRTKF9fc3BvcnQsIF9fZHBvcnQpIFwKLQkoKChfX3UzMikoX19zcG9ydCkgPDwgMTYpIHwgKF9fdTMyKShfX2Rwb3J0KSkKKwkoKF9fZm9yY2UgX19wb3J0cGFpcikoKChfX2ZvcmNlIF9fdTMyKShfX2JlMTYpKF9fc3BvcnQpIDw8IDE2KSB8IChfX3UzMikoX19kcG9ydCkpKQogI2Vsc2UgLyogX19MSVRUTEVfRU5ESUFOICovCiAjZGVmaW5lIElORVRfQ09NQklORURfUE9SVFMoX19zcG9ydCwgX19kcG9ydCkgXAotCSgoKF9fdTMyKShfX2Rwb3J0KSA8PCAxNikgfCAoX191MzIpKF9fc3BvcnQpKQorCSgoX19mb3JjZSBfX3BvcnRwYWlyKSgoKF9fdTMyKShfX2Rwb3J0KSA8PCAxNikgfCAoX19mb3JjZSBfX3UzMikoX19iZTE2KShfX3Nwb3J0KSkpCiAjZW5kaWYKIAogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQordHlwZWRlZiBfX3U2NCBfX2JpdHdpc2UgX19hZGRycGFpcjsKICNpZmRlZiBfX0JJR19FTkRJQU4KICNkZWZpbmUgSU5FVF9BRERSX0NPT0tJRShfX25hbWUsIF9fc2FkZHIsIF9fZGFkZHIpIFwKLQljb25zdCBfX3U2NCBfX25hbWUgPSAoKChfX3U2NCkoX19zYWRkcikpIDw8IDMyKSB8ICgoX191NjQpKF9fZGFkZHIpKTsKKwljb25zdCBfX2FkZHJwYWlyIF9fbmFtZSA9IChfX2ZvcmNlIF9fYWRkcnBhaXIpICggXAorCQkJCSAgICgoKF9fZm9yY2UgX191NjQpKF9fYmUzMikoX19zYWRkcikpIDw8IDMyKSB8IFwKKwkJCQkgICAoKF9fZm9yY2UgX191NjQpKF9fYmUzMikoX19kYWRkcikpKTsKICNlbHNlIC8qIF9fTElUVExFX0VORElBTiAqLwogI2RlZmluZSBJTkVUX0FERFJfQ09PS0lFKF9fbmFtZSwgX19zYWRkciwgX19kYWRkcikgXAotCWNvbnN0IF9fdTY0IF9fbmFtZSA9ICgoKF9fdTY0KShfX2RhZGRyKSkgPDwgMzIpIHwgKChfX3U2NCkoX19zYWRkcikpOworCWNvbnN0IF9fYWRkcnBhaXIgX19uYW1lID0gKF9fZm9yY2UgX19hZGRycGFpcikgKCBcCisJCQkJICAgKCgoX19mb3JjZSBfX3U2NCkoX19iZTMyKShfX2RhZGRyKSkgPDwgMzIpIHwgXAorCQkJCSAgICgoX19mb3JjZSBfX3U2NCkoX19iZTMyKShfX3NhZGRyKSkpOwogI2VuZGlmIC8qIF9fQklHX0VORElBTiAqLwogI2RlZmluZSBJTkVUX01BVENIKF9fc2ssIF9faGFzaCwgX19jb29raWUsIF9fc2FkZHIsIF9fZGFkZHIsIF9fcG9ydHMsIF9fZGlmKVwKIAkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkJCQkJJiYJXAotCSAoKCooKF9fdTY0ICopJihpbmV0X3NrKF9fc2spLT5kYWRkcikpKSA9PSAoX19jb29raWUpKQkmJglcCi0JICgoKigoX191MzIgKikmKGluZXRfc2soX19zayktPmRwb3J0KSkpID09IChfX3BvcnRzKSkJJiYJXAorCSAoKCooKF9fYWRkcnBhaXIgKikmKGluZXRfc2soX19zayktPmRhZGRyKSkpID09IChfX2Nvb2tpZSkpCSYmCVwKKwkgKCgqKChfX3BvcnRwYWlyICopJihpbmV0X3NrKF9fc2spLT5kcG9ydCkpKSA9PSAoX19wb3J0cykpCSYmCVwKIAkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCiAjZGVmaW5lIElORVRfVFdfTUFUQ0goX19zaywgX19oYXNoLCBfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpXAogCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKQkJCQkmJglcCi0JICgoKigoX191NjQgKikmKGluZXRfdHdzayhfX3NrKS0+dHdfZGFkZHIpKSkgPT0gKF9fY29va2llKSkgJiYJXAotCSAoKCooKF9fdTMyICopJihpbmV0X3R3c2soX19zayktPnR3X2Rwb3J0KSkpID09IChfX3BvcnRzKSkgJiYJXAorCSAoKCooKF9fYWRkcnBhaXIgKikmKGluZXRfdHdzayhfX3NrKS0+dHdfZGFkZHIpKSkgPT0gKF9fY29va2llKSkgJiYJXAorCSAoKCooKF9fcG9ydHBhaXIgKikmKGluZXRfdHdzayhfX3NrKS0+dHdfZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAmJglcCiAJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQogI2Vsc2UgLyogMzItYml0IGFyY2ggKi8KICNkZWZpbmUgSU5FVF9BRERSX0NPT0tJRShfX25hbWUsIF9fc2FkZHIsIF9fZGFkZHIpCkBAIC0zMTUsMTMgKzMyOSwxMyBAQAogCSgoKF9fc2spLT5za19oYXNoID09IChfX2hhc2gpKQkJCQkmJglcCiAJIChpbmV0X3NrKF9fc2spLT5kYWRkcgkJPT0gKF9fc2FkZHIpKQkJJiYJXAogCSAoaW5ldF9zayhfX3NrKS0+cmN2X3NhZGRyCT09IChfX2RhZGRyKSkJCSYmCVwKLQkgKCgqKChfX3UzMiAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKQkmJglcCisJICgoKigoX19wb3J0cGFpciAqKSYoaW5ldF9zayhfX3NrKS0+ZHBvcnQpKSkgPT0gKF9fcG9ydHMpKQkmJglcCiAJICghKChfX3NrKS0+c2tfYm91bmRfZGV2X2lmKSB8fCAoKF9fc2spLT5za19ib3VuZF9kZXZfaWYgPT0gKF9fZGlmKSkpKQogI2RlZmluZSBJTkVUX1RXX01BVENIKF9fc2ssIF9faGFzaCxfX2Nvb2tpZSwgX19zYWRkciwgX19kYWRkciwgX19wb3J0cywgX19kaWYpCVwKIAkoKChfX3NrKS0+c2tfaGFzaCA9PSAoX19oYXNoKSkJCQkJJiYJXAogCSAoaW5ldF90d3NrKF9fc2spLT50d19kYWRkcgk9PSAoX19zYWRkcikpCQkmJglcCiAJIChpbmV0X3R3c2soX19zayktPnR3X3Jjdl9zYWRkcgk9PSAoX19kYWRkcikpCQkmJglcCi0JICgoKigoX191MzIgKikmKGluZXRfdHdzayhfX3NrKS0+dHdfZHBvcnQpKSkgPT0gKF9fcG9ydHMpKSAmJglcCisJICgoKigoX19wb3J0cGFpciAqKSYoaW5ldF90d3NrKF9fc2spLT50d19kcG9ydCkpKSA9PSAoX19wb3J0cykpICYmCVwKIAkgKCEoKF9fc2spLT5za19ib3VuZF9kZXZfaWYpIHx8ICgoX19zayktPnNrX2JvdW5kX2Rldl9pZiA9PSAoX19kaWYpKSkpCiAjZW5kaWYgLyogNjQtYml0IGFyY2ggKi8KIApAQCAtMzMzLDEyICszNDcsMTIgQEAKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3Qgc29jayAqCiAJX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJICBjb25zdCB1MzIgc2FkZHIsIGNvbnN0IHUxNiBzcG9ydCwKLQkJCQkgIGNvbnN0IHUzMiBkYWRkciwgY29uc3QgdTE2IGhudW0sCisJCQkJICBjb25zdCBfX2JlMzIgc2FkZHIsIGNvbnN0IF9fYmUxNiBzcG9ydCwKKwkJCQkgIGNvbnN0IF9fYmUzMiBkYWRkciwgY29uc3QgdTE2IGhudW0sCiAJCQkJICBjb25zdCBpbnQgZGlmKQogewogCUlORVRfQUREUl9DT09LSUUoYWNvb2tpZSwgc2FkZHIsIGRhZGRyKQotCWNvbnN0IF9fdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhzcG9ydCwgaG51bSk7CisJY29uc3QgX19wb3J0cGFpciBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOwogCXN0cnVjdCBzb2NrICpzazsKIAljb25zdCBzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKIAkvKiBPcHRpbWl6ZSBoZXJlIGZvciBkaXJlY3QgaGl0LCBvbmx5IGxpc3RlbmluZyBjb25uZWN0aW9ucyBjYW4KQEAgLTM3MCw4ICszODQsOCBAQAogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICoKIAlpbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJY29uc3QgdTMyIHNhZGRyLCBjb25zdCB1MTYgc3BvcnQsCi0JCQkJY29uc3QgdTMyIGRhZGRyLCBjb25zdCB1MTYgZHBvcnQsCisJCQkJY29uc3QgX19iZTMyIHNhZGRyLCBjb25zdCBfX2JlMTYgc3BvcnQsCisJCQkJY29uc3QgX19iZTMyIGRhZGRyLCBjb25zdCBfX2JlMTYgZHBvcnQsCiAJCQkJY29uc3QgaW50IGRpZikKIHsKIAlyZXR1cm4gX19pbmV0X2xvb2t1cF9lc3RhYmxpc2hlZChoYXNoaW5mbywgc2FkZHIsIHNwb3J0LCBkYWRkciwKQEAgLTM3OSw4ICszOTMsOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICpfX2luZXRfbG9va3VwKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKLQkJCQkJIGNvbnN0IHUzMiBzYWRkciwgY29uc3QgdTE2IHNwb3J0LAotCQkJCQkgY29uc3QgdTMyIGRhZGRyLCBjb25zdCB1MTYgZHBvcnQsCisJCQkJCSBjb25zdCBfX2JlMzIgc2FkZHIsIGNvbnN0IF9fYmUxNiBzcG9ydCwKKwkJCQkJIGNvbnN0IF9fYmUzMiBkYWRkciwgY29uc3QgX19iZTE2IGRwb3J0LAogCQkJCQkgY29uc3QgaW50IGRpZikKIHsKIAl1MTYgaG51bSA9IG50b2hzKGRwb3J0KTsKQEAgLTM5MCw4ICs0MDQsOCBAQAogfQogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NrICppbmV0X2xvb2t1cChzdHJ1Y3QgaW5ldF9oYXNoaW5mbyAqaGFzaGluZm8sCi0JCQkJICAgICAgIGNvbnN0IHUzMiBzYWRkciwgY29uc3QgdTE2IHNwb3J0LAotCQkJCSAgICAgICBjb25zdCB1MzIgZGFkZHIsIGNvbnN0IHUxNiBkcG9ydCwKKwkJCQkgICAgICAgY29uc3QgX19iZTMyIHNhZGRyLCBjb25zdCBfX2JlMTYgc3BvcnQsCisJCQkJICAgICAgIGNvbnN0IF9fYmUzMiBkYWRkciwgY29uc3QgX19iZTE2IGRwb3J0LAogCQkJCSAgICAgICBjb25zdCBpbnQgZGlmKQogewogCXN0cnVjdCBzb2NrICpzazsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRfc29jay5oIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKaW5kZXggZjYyNDI3MS4uY2U2ZGE5NyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldF9zb2NrLmgKQEAgLTM2LDcgKzM2LDcgQEAKICAqIEB0c19uZWVkYWRkciAtIE5lZWQgdG8gcmVjb3JkIGFkZHIgb2Ygb3V0Z29pbmcgZGV2CiAgKi8KIHN0cnVjdCBpcF9vcHRpb25zIHsKLQlfX3UzMgkJZmFkZHI7CisJX19iZTMyCQlmYWRkcjsKIAl1bnNpZ25lZCBjaGFyCW9wdGxlbjsKIAl1bnNpZ25lZCBjaGFyCXNycjsKIAl1bnNpZ25lZCBjaGFyCXJyOwpAQCAtNjIsOSArNjIsOSBAQAogCXUxNgkJCWluZXQ2X3Jza19vZmZzZXQ7CiAJLyogMiBieXRlcyBob2xlLCB0cnkgdG8gcGFjayAqLwogI2VuZGlmCi0JdTMyCQkJbG9jX2FkZHI7Ci0JdTMyCQkJcm10X2FkZHI7Ci0JdTE2CQkJcm10X3BvcnQ7CisJX19iZTMyCQkJbG9jX2FkZHI7CisJX19iZTMyCQkJcm10X2FkZHI7CisJX19iZTE2CQkJcm10X3BvcnQ7CiAJdTE2CQkJc25kX3dzY2FsZSA6IDQsIAogCQkJCXJjdl93c2NhbGUgOiA0LCAKIAkJCQl0c3RhbXBfb2sgIDogMSwKQEAgLTExMCwxNSArMTEwLDE1IEBACiAJc3RydWN0IGlwdjZfcGluZm8JKnBpbmV0NjsKICNlbmRpZgogCS8qIFNvY2tldCBkZW11bHRpcGxleCBjb21wYXJpc29ucyBvbiBpbmNvbWluZyBwYWNrZXRzLiAqLwotCV9fdTMyCQkJZGFkZHI7Ci0JX191MzIJCQlyY3Zfc2FkZHI7Ci0JX191MTYJCQlkcG9ydDsKKwlfX2JlMzIJCQlkYWRkcjsKKwlfX2JlMzIJCQlyY3Zfc2FkZHI7CisJX19iZTE2CQkJZHBvcnQ7CiAJX191MTYJCQludW07Ci0JX191MzIJCQlzYWRkcjsKKwlfX2JlMzIJCQlzYWRkcjsKIAlfX3MxNgkJCXVjX3R0bDsKIAlfX3UxNgkJCWNtc2dfZmxhZ3M7CiAJc3RydWN0IGlwX29wdGlvbnMJKm9wdDsKLQlfX3UxNgkJCXNwb3J0OworCV9fYmUxNgkJCXNwb3J0OwogCV9fdTE2CQkJaWQ7CiAJX191OAkJCXRvczsKIAlfX3U4CQkJbWNfdHRsOwpAQCAtMTI5LDcgKzEyOSw3IEBACiAJCQkJaGRyaW5jbDoxLAogCQkJCW1jX2xvb3A6MTsKIAlpbnQJCQltY19pbmRleDsKLQlfX3UzMgkJCW1jX2FkZHI7CisJX19iZTMyCQkJbWNfYWRkcjsKIAlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QJKm1jX2xpc3Q7CiAJc3RydWN0IHsKIAkJdW5zaWduZWQgaW50CQlmbGFnczsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQlzdHJ1Y3QgaXBfb3B0aW9ucwkqb3B0OwogCQlzdHJ1Y3QgcnRhYmxlCQkqcnQ7CiAJCWludAkJCWxlbmd0aDsgLyogVG90YWwgbGVuZ3RoIG9mIGFsbCBmcmFtZXMgKi8KLQkJdTMyCQkJYWRkcjsKKwkJX19iZTMyCQkJYWRkcjsKIAkJc3RydWN0IGZsb3dpCQlmbDsKIAl9IGNvcms7CiB9OwpAQCAtMTY3LDEwICsxNjcsMTAgQEAKIAogZXh0ZXJuIGludCBpbmV0X3NrX3JlYnVpbGRfaGVhZGVyKHN0cnVjdCBzb2NrICpzayk7CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXRfZWhhc2hmbihjb25zdCBfX3UzMiBsYWRkciwgY29uc3QgX191MTYgbHBvcnQsCi0JCQkJCWNvbnN0IF9fdTMyIGZhZGRyLCBjb25zdCBfX3UxNiBmcG9ydCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGluZXRfZWhhc2hmbihjb25zdCBfX2JlMzIgbGFkZHIsIGNvbnN0IF9fdTE2IGxwb3J0LAorCQkJCQljb25zdCBfX2JlMzIgZmFkZHIsIGNvbnN0IF9fYmUxNiBmcG9ydCkKIHsKLQl1bnNpZ25lZCBpbnQgaCA9IChsYWRkciBeIGxwb3J0KSBeIChmYWRkciBeIGZwb3J0KTsKKwl1bnNpZ25lZCBpbnQgaCA9ICgoX19mb3JjZSBfX3UzMilsYWRkciBeIGxwb3J0KSBeICgoX19mb3JjZSBfX3UzMilmYWRkciBeIChfX2ZvcmNlIF9fdTMyKWZwb3J0KTsKIAloIF49IGggPj4gMTY7CiAJaCBePSBoID4+IDg7CiAJcmV0dXJuIGg7CkBAIC0xNzksMTAgKzE3OSwxMCBAQAogc3RhdGljIGlubGluZSBpbnQgaW5ldF9za19laGFzaGZuKGNvbnN0IHN0cnVjdCBzb2NrICpzaykKIHsKIAljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JY29uc3QgX191MzIgbGFkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CisJY29uc3QgX19iZTMyIGxhZGRyID0gaW5ldC0+cmN2X3NhZGRyOwogCWNvbnN0IF9fdTE2IGxwb3J0ID0gaW5ldC0+bnVtOwotCWNvbnN0IF9fdTMyIGZhZGRyID0gaW5ldC0+ZGFkZHI7Ci0JY29uc3QgX191MTYgZnBvcnQgPSBpbmV0LT5kcG9ydDsKKwljb25zdCBfX2JlMzIgZmFkZHIgPSBpbmV0LT5kYWRkcjsKKwljb25zdCBfX2JlMTYgZnBvcnQgPSBpbmV0LT5kcG9ydDsKIAogCXJldHVybiBpbmV0X2VoYXNoZm4obGFkZHIsIGxwb3J0LCBmYWRkciwgZnBvcnQpOwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaW5ldF90aW1ld2FpdF9zb2NrLmggYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAppbmRleCA2MDBjYjU0Li42ZDE0YzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaAorKysgYi9pbmNsdWRlL25ldC9pbmV0X3RpbWV3YWl0X3NvY2suaApAQCAtMTIwLDEwICsxMjAsMTAgQEAKIAl1bnNpZ25lZCBjaGFyCQl0d19yY3Zfd3NjYWxlOwogCS8qIFNvY2tldCBkZW11bHRpcGxleCBjb21wYXJpc29ucyBvbiBpbmNvbWluZyBwYWNrZXRzLiAqLwogCS8qIHRoZXNlIGZpdmUgYXJlIGluIGluZXRfc29jayAqLwotCV9fdTE2CQkJdHdfc3BvcnQ7Ci0JX191MzIJCQl0d19kYWRkciBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKElORVRfVElNRVdBSVRfQUREUkNNUF9BTElHTl9CWVRFUykpKTsKLQlfX3UzMgkJCXR3X3Jjdl9zYWRkcjsKLQlfX3UxNgkJCXR3X2Rwb3J0OworCV9fYmUxNgkJCXR3X3Nwb3J0OworCV9fYmUzMgkJCXR3X2RhZGRyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoSU5FVF9USU1FV0FJVF9BRERSQ01QX0FMSUdOX0JZVEVTKSkpOworCV9fYmUzMgkJCXR3X3Jjdl9zYWRkcjsKKwlfX2JlMTYJCQl0d19kcG9ydDsKIAlfX3UxNgkJCXR3X251bTsKIAkvKiBBbmQgdGhlc2UgYXJlIG91cnMuICovCiAJX191OAkJCXR3X2lwdjZvbmx5OjE7CkBAIC0xODYsNyArMTg2LDcgQEAKIAlyZXR1cm4gKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKilzazsKIH0KIAotc3RhdGljIGlubGluZSB1MzIgaW5ldF9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBfX2JlMzIgaW5ldF9yY3Zfc2FkZHIoY29uc3Qgc3RydWN0IHNvY2sgKnNrKQogewogCXJldHVybiBsaWtlbHkoc2stPnNrX3N0YXRlICE9IFRDUF9USU1FX1dBSVQpID8KIAkJaW5ldF9zayhzayktPnJjdl9zYWRkciA6IGluZXRfdHdzayhzayktPnR3X3Jjdl9zYWRkcjsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmggYi9pbmNsdWRlL25ldC9pbmV0cGVlci5oCmluZGV4IDA5NjU1MTUuLjkyNTU3M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2luZXRwZWVyLmgKKysrIGIvaW5jbHVkZS9uZXQvaW5ldHBlZXIuaApAQCAtMjIsNyArMjIsNyBAQAogCXVuc2lnbmVkIGxvbmcJCWR0aW1lOwkJLyogdGhlIHRpbWUgb2YgbGFzdCB1c2Ugb2Ygbm90CiAJCQkJCQkgKiByZWZlcmVuY2VkIGVudHJpZXMgKi8KIAlhdG9taWNfdAkJcmVmY250OwotCV9fdTMyCQkJdjRkYWRkcjsJLyogcGVlcidzIGFkZHJlc3MgKi8KKwlfX2JlMzIJCQl2NGRhZGRyOwkvKiBwZWVyJ3MgYWRkcmVzcyAqLwogCV9fdTE2CQkJYXZsX2hlaWdodDsKIAlfX3UxNgkJCWlwX2lkX2NvdW50OwkvKiBJUCBJRCBmb3IgdGhlIG5leHQgcGFja2V0ICovCiAJYXRvbWljX3QJCXJpZDsJCS8qIEZyYWcgcmVjZXB0aW9uIGNvdW50ZXIgKi8KQEAgLTMzLDcgKzMzLDcgQEAKIHZvaWQJCQlpbmV0X2luaXRwZWVycyh2b2lkKSBfX2luaXQ7CiAKIC8qIGNhbiBiZSBjYWxsZWQgd2l0aCBvciB3aXRob3V0IGxvY2FsIEJIIGJlaW5nIGRpc2FibGVkICovCi1zdHJ1Y3QgaW5ldF9wZWVyCSppbmV0X2dldHBlZXIoX191MzIgZGFkZHIsIGludCBjcmVhdGUpOworc3RydWN0IGluZXRfcGVlcgkqaW5ldF9nZXRwZWVyKF9fYmUzMiBkYWRkciwgaW50IGNyZWF0ZSk7CiAKIGV4dGVybiBzcGlubG9ja190IGluZXRfcGVlcl91bnVzZWRfbG9jazsKIGV4dGVybiBzdHJ1Y3QgaW5ldF9wZWVyICoqaW5ldF9wZWVyX3VudXNlZF90YWlscDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwLmggYi9pbmNsdWRlL25ldC9pcC5oCmluZGV4IDk4ZjkwODQuLmI2ZDk1ZTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwLmgKKysrIGIvaW5jbHVkZS9uZXQvaXAuaApAQCAtNDUsNyArNDUsNyBAQAogCiBzdHJ1Y3QgaXBjbV9jb29raWUKIHsKLQl1MzIJCQlhZGRyOworCV9fYmUzMgkJCWFkZHI7CiAJaW50CQkJb2lmOwogCXN0cnVjdCBpcF9vcHRpb25zCSpvcHQ7CiB9OwpAQCAtODYsNyArODYsNyBAQAogICovCiAKIGV4dGVybiBpbnQJCWlwX2J1aWxkX2FuZF9zZW5kX3BrdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgc29jayAqc2ssCi0JCQkJCSAgICAgIHUzMiBzYWRkciwgdTMyIGRhZGRyLAorCQkJCQkgICAgICBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkciwKIAkJCQkJICAgICAgc3RydWN0IGlwX29wdGlvbnMgKm9wdCk7CiBleHRlcm4gaW50CQlpcF9yY3Yoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgICAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnB0LCBzdHJ1Y3QgbmV0X2RldmljZSAqb3JpZ19kZXYpOwpAQCAtMzM1LDcgKzMzNSw3IEBACiAgKglGdW5jdGlvbnMgcHJvdmlkZWQgYnkgaXBfb3B0aW9ucy5jCiAgKi8KICAKLWV4dGVybiB2b2lkIGlwX29wdGlvbnNfYnVpbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgdTMyIGRhZGRyLCBzdHJ1Y3QgcnRhYmxlICpydCwgaW50IGlzX2ZyYWcpOworZXh0ZXJuIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgaXBfb3B0aW9ucyAqb3B0LCBfX2JlMzIgZGFkZHIsIHN0cnVjdCBydGFibGUgKnJ0LCBpbnQgaXNfZnJhZyk7CiBleHRlcm4gaW50IGlwX29wdGlvbnNfZWNobyhzdHJ1Y3QgaXBfb3B0aW9ucyAqZG9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gdm9pZCBpcF9vcHRpb25zX2ZyYWdtZW50KHN0cnVjdCBza19idWZmICpza2IpOwogZXh0ZXJuIGludCBpcF9vcHRpb25zX2NvbXBpbGUoc3RydWN0IGlwX29wdGlvbnMgKm9wdCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CkBAIC0zNjMsOCArMzYzLDggQEAKIAogZXh0ZXJuIGludCAJaXBfcmVjdl9lcnJvcihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBtc2doZHIgKm1zZywgaW50IGxlbik7CiBleHRlcm4gdm9pZAlpcF9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVyciwgCi0JCQkgICAgICB1MTYgcG9ydCwgdTMyIGluZm8sIHU4ICpwYXlsb2FkKTsKLWV4dGVybiB2b2lkCWlwX2xvY2FsX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgaW50IGVyciwgdTMyIGRhZGRyLCB1MTYgZHBvcnQsCisJCQkgICAgICBfX2JlMTYgcG9ydCwgdTMyIGluZm8sIHU4ICpwYXlsb2FkKTsKK2V4dGVybiB2b2lkCWlwX2xvY2FsX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgaW50IGVyciwgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQsCiAJCQkgICAgICAgdTMyIGluZm8pOwogCiAvKiBzeXNjdGwgaGVscGVycyAtIGFueSBzeXNjdGwgd2hpY2ggaG9sZHMgYSB2YWx1ZSB0aGF0IGVuZHMgdXAgYmVpbmcKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX2ZpYi5oIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKaW5kZXggZmNjMTU5YS4uODIyMjkxNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQvaXBfZmliLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfZmliLmgKQEAgLTMwLDEzICszMCwxMyBAQAogCXU4CQkJZmNfdHlwZTsKIAkvKiAxIGJ5dGUgdW51c2VkICovCiAJdTMyCQkJZmNfdGFibGU7Ci0JdTMyCQkJZmNfZHN0OwotCXUzMgkJCWZjX3NyYzsKLQl1MzIJCQlmY19ndzsKKwlfX2JlMzIJCQlmY19kc3Q7CisJX19iZTMyCQkJZmNfc3JjOworCV9fYmUzMgkJCWZjX2d3OwogCWludAkJCWZjX29pZjsKIAl1MzIJCQlmY19mbGFnczsKIAl1MzIJCQlmY19wcmlvcml0eTsKLQl1MzIJCQlmY19wcmVmc3JjOworCV9fYmUzMgkJCWZjX3ByZWZzcmM7CiAJc3RydWN0IG5sYXR0cgkJKmZjX214OwogCXN0cnVjdCBydG5leHRob3AJKmZjX21wOwogCWludAkJCWZjX214X2xlbjsKQEAgLTYzLDcgKzYzLDcgQEAKIAlfX3UzMgkJCW5oX3RjbGFzc2lkOwogI2VuZGlmCiAJaW50CQkJbmhfb2lmOwotCXUzMgkJCW5oX2d3OworCV9fYmUzMgkJCW5oX2d3OwogfTsKIAogLyoKQEAgLTc4LDcgKzc4LDcgQEAKIAlpbnQJCQlmaWJfZGVhZDsKIAl1bnNpZ25lZAkJZmliX2ZsYWdzOwogCWludAkJCWZpYl9wcm90b2NvbDsKLQl1MzIJCQlmaWJfcHJlZnNyYzsKKwlfX2JlMzIJCQlmaWJfcHJlZnNyYzsKIAl1MzIJCQlmaWJfcHJpb3JpdHk7CiAJdTMyCQkJZmliX21ldHJpY3NbUlRBWF9NQVhdOwogI2RlZmluZSBmaWJfbXR1IGZpYl9tZXRyaWNzW1JUQVhfTVRVLTFdCkBAIC0xMDcsOCArMTA3LDggQEAKIAl1bnNpZ25lZCBjaGFyCXR5cGU7CiAJdW5zaWduZWQgY2hhcglzY29wZTsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAotCV9fdTMyICAgICAgICAgICBuZXR3b3JrOwotCV9fdTMyICAgICAgICAgICBuZXRtYXNrOworCV9fYmUzMiAgICAgICAgICBuZXR3b3JrOworCV9fYmUzMiAgICAgICAgICBuZXRtYXNrOwogI2VuZGlmCiAJc3RydWN0IGZpYl9pbmZvICpmaTsKICNpZmRlZiBDT05GSUdfSVBfTVVMVElQTEVfVEFCTEVTCkBAIC0xMTcsNyArMTE3LDcgQEAKIH07CiAKIHN0cnVjdCBmaWJfcmVzdWx0X25sIHsKLQl1MzIJCWZsX2FkZHI7ICAgLyogVG8gYmUgbG9va2VkIHVwKi8gCisJX19iZTMyCQlmbF9hZGRyOyAgIC8qIFRvIGJlIGxvb2tlZCB1cCovCiAJdTMyCQlmbF9md21hcms7IAogCXVuc2lnbmVkIGNoYXIJZmxfdG9zOwogCXVuc2lnbmVkIGNoYXIgICBmbF9zY29wZTsKQEAgLTIyMiwxNyArMjIyLDE3IEBACiBleHRlcm4gaW50IGluZXRfcnRtX25ld3JvdXRlKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBubG1zZ2hkciogbmxoLCB2b2lkICphcmcpOwogZXh0ZXJuIGludCBpbmV0X3J0bV9nZXRyb3V0ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3Qgbmxtc2doZHIqIG5saCwgdm9pZCAqYXJnKTsKIGV4dGVybiBpbnQgaW5ldF9kdW1wX2ZpYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwotZXh0ZXJuIGludCBmaWJfdmFsaWRhdGVfc291cmNlKHUzMiBzcmMsIHUzMiBkc3QsIHU4IHRvcywgaW50IG9pZiwKLQkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgKnNwZWNfZHN0LCB1MzIgKml0YWcpOworZXh0ZXJuIGludCBmaWJfdmFsaWRhdGVfc291cmNlKF9fYmUzMiBzcmMsIF9fYmUzMiBkc3QsIHU4IHRvcywgaW50IG9pZiwKKwkJCSAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgKnNwZWNfZHN0LCB1MzIgKml0YWcpOwogZXh0ZXJuIHZvaWQgZmliX3NlbGVjdF9tdWx0aXBhdGgoY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpOwogCiBzdHJ1Y3QgcnRlbnRyeTsKIAogLyogRXhwb3J0ZWQgYnkgZmliX3NlbWFudGljcy5jICovCi1leHRlcm4gaW50IGlwX2ZpYl9jaGVja19kZWZhdWx0KHUzMiBndywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gaW50IGZpYl9zeW5jX2Rvd24odTMyIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpOworZXh0ZXJuIGludCBpcF9maWJfY2hlY2tfZGVmYXVsdChfX2JlMzIgZ3csIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCBmaWJfc3luY19kb3duKF9fYmUzMiBsb2NhbCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IGZvcmNlKTsKIGV4dGVybiBpbnQgZmliX3N5bmNfdXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci1leHRlcm4gdTMyICBfX2ZpYl9yZXNfcHJlZnNyYyhzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKTsKK2V4dGVybiBfX2JlMzIgIF9fZmliX3Jlc19wcmVmc3JjKHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMpOwogCiAvKiBFeHBvcnRlZCBieSBmaWJfaGFzaC5jICovCiBleHRlcm4gc3RydWN0IGZpYl90YWJsZSAqZmliX2hhc2hfaW5pdCh1MzIgaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXBfbXBfYWxnLmggYi9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaAppbmRleCBhYzc0N2I2Li5iZWZmZGQ2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaAorKysgYi9pbmNsdWRlL25ldC9pcF9tcF9hbGcuaApAQCAtMTcsNyArMTcsNyBAQAogCXZvaWQJKCptcF9hbGdfc2VsZWN0X3JvdXRlKShjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCwKIAkJCQkgICAgICAgc3RydWN0IHJ0YWJsZSAqcnRoLCBzdHJ1Y3QgcnRhYmxlICoqcnApOwogCXZvaWQJKCptcF9hbGdfZmx1c2gpKHZvaWQpOwotCXZvaWQJKCptcF9hbGdfc2V0X25oaW5mbykoX191MzIgbmV0d29yaywgX191MzIgbmV0bWFzaywKKwl2b2lkCSgqbXBfYWxnX3NldF9uaGluZm8pKF9fYmUzMiBuZXR3b3JrLCBfX2JlMzIgbmV0bWFzaywKIAkJCQkgICAgIHVuc2lnbmVkIGNoYXIgcHJlZml4bGVuLAogCQkJCSAgICAgY29uc3Qgc3RydWN0IGZpYl9uaCAqbmgpOwogCXZvaWQJKCptcF9hbGdfcmVtb3ZlKShzdHJ1Y3QgcnRhYmxlICpydGgpOwpAQCAtNTksNyArNTksNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgbXVsdGlwYXRoX3NldF9uaGluZm8oc3RydWN0IHJ0YWJsZSAqcnRoLAotCQkJCQlfX3UzMiBuZXR3b3JrLCBfX3UzMiBuZXRtYXNrLAorCQkJCQlfX2JlMzIgbmV0d29yaywgX19iZTMyIG5ldG1hc2ssCiAJCQkJCXVuc2lnbmVkIGNoYXIgcHJlZml4bGVuLAogCQkJCQljb25zdCBzdHJ1Y3QgZmliX25oICpuaCkKIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lwX3ZzLmggYi9pbmNsdWRlL25ldC9pcF92cy5oCmluZGV4IDNiNTdiMTUuLjQ5YzcxN2UgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwX3ZzLmgKKysrIGIvaW5jbHVkZS9uZXQvaXBfdnMuaApAQCAtMTAwLDIyICsxMDAsMjIgQEAKIHN0cnVjdCBpcF92c19zZXJ2aWNlX3VzZXIgewogCS8qIHZpcnR1YWwgc2VydmljZSBhZGRyZXNzZXMgKi8KIAl1X2ludDE2X3QJCXByb3RvY29sOwotCXVfaW50MzJfdAkJYWRkcjsJCS8qIHZpcnR1YWwgaXAgYWRkcmVzcyAqLwotCXVfaW50MTZfdAkJcG9ydDsKKwlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBpcCBhZGRyZXNzICovCisJX19iZTE2CQkJcG9ydDsKIAl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiB2aXJ0dWFsIHNlcnZpY2Ugb3B0aW9ucyAqLwogCWNoYXIJCQlzY2hlZF9uYW1lW0lQX1ZTX1NDSEVETkFNRV9NQVhMRU5dOwogCXVuc2lnbmVkCQlmbGFnczsJCS8qIHZpcnR1YWwgc2VydmljZSBmbGFncyAqLwogCXVuc2lnbmVkCQl0aW1lb3V0OwkvKiBwZXJzaXN0ZW50IHRpbWVvdXQgaW4gc2VjICovCi0JdV9pbnQzMl90CQluZXRtYXNrOwkvKiBwZXJzaXN0ZW50IG5ldG1hc2sgKi8KKwlfX2JlMzIJCQluZXRtYXNrOwkvKiBwZXJzaXN0ZW50IG5ldG1hc2sgKi8KIH07CiAKIAogc3RydWN0IGlwX3ZzX2Rlc3RfdXNlciB7CiAJLyogZGVzdGluYXRpb24gc2VydmVyIGFkZHJlc3MgKi8KLQl1X2ludDMyX3QJCWFkZHI7Ci0JdV9pbnQxNl90CQlwb3J0OworCV9fYmUzMgkJCWFkZHI7CisJX19iZTE2CQkJcG9ydDsKIAogCS8qIHJlYWwgc2VydmVyIG9wdGlvbnMgKi8KIAl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLwpAQCAtMTYzLDE1ICsxNjMsMTUgQEAKIHN0cnVjdCBpcF92c19zZXJ2aWNlX2VudHJ5IHsKIAkvKiB3aGljaCBzZXJ2aWNlOiB1c2VyIGZpbGxzIGluIHRoZXNlICovCiAJdV9pbnQxNl90CQlwcm90b2NvbDsKLQl1X2ludDMyX3QJCWFkZHI7CQkvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQl1X2ludDE2X3QJCXBvcnQ7CisJX19iZTMyCQkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLworCV9fYmUxNgkJCXBvcnQ7CiAJdV9pbnQzMl90CQlmd21hcms7CQkvKiBmaXJ3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogCiAJLyogc2VydmljZSBvcHRpb25zICovCiAJY2hhcgkJCXNjaGVkX25hbWVbSVBfVlNfU0NIRUROQU1FX01BWExFTl07CiAJdW5zaWduZWQJCWZsYWdzOyAgICAgICAgICAvKiB2aXJ0dWFsIHNlcnZpY2UgZmxhZ3MgKi8KIAl1bnNpZ25lZAkJdGltZW91dDsJLyogcGVyc2lzdGVudCB0aW1lb3V0ICovCi0JdV9pbnQzMl90CQluZXRtYXNrOwkvKiBwZXJzaXN0ZW50IG5ldG1hc2sgKi8KKwlfX2JlMzIJCQluZXRtYXNrOwkvKiBwZXJzaXN0ZW50IG5ldG1hc2sgKi8KIAogCS8qIG51bWJlciBvZiByZWFsIHNlcnZlcnMgKi8KIAl1bnNpZ25lZCBpbnQJCW51bV9kZXN0czsKQEAgLTE4Miw4ICsxODIsOCBAQAogCiAKIHN0cnVjdCBpcF92c19kZXN0X2VudHJ5IHsKLQl1X2ludDMyX3QJCWFkZHI7CQkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JdV9pbnQxNl90CQlwb3J0OworCV9fYmUzMgkJCWFkZHI7CQkvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJX19iZTE2CQkJcG9ydDsKIAl1bnNpZ25lZAkJY29ubl9mbGFnczsJLyogY29ubmVjdGlvbiBmbGFncyAqLwogCWludAkJCXdlaWdodDsJCS8qIGRlc3RpbmF0aW9uIHdlaWdodCAqLwogCkBAIC0yMDMsOCArMjAzLDggQEAKIHN0cnVjdCBpcF92c19nZXRfZGVzdHMgewogCS8qIHdoaWNoIHNlcnZpY2U6IHVzZXIgZmlsbHMgaW4gdGhlc2UgKi8KIAl1X2ludDE2X3QJCXByb3RvY29sOwotCXVfaW50MzJfdAkJYWRkcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCXVfaW50MTZfdAkJcG9ydDsKKwlfX2JlMzIJCQlhZGRyOwkJLyogdmlydHVhbCBhZGRyZXNzICovCisJX19iZTE2CQkJcG9ydDsKIAl1X2ludDMyX3QJCWZ3bWFyazsJCS8qIGZpcndhbGwgbWFyayBvZiBzZXJ2aWNlICovCiAKIAkvKiBudW1iZXIgb2YgcmVhbCBzZXJ2ZXJzICovCkBAIC01MDIsMTIgKzUwMiwxMiBAQAogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgIGNfbGlzdDsgICAgICAgICAvKiBoYXNoZWQgbGlzdCBoZWFkcyAqLwogCiAJLyogUHJvdG9jb2wsIGFkZHJlc3NlcyBhbmQgcG9ydCBudW1iZXJzICovCi0JX191MzIgICAgICAgICAgICAgICAgICAgY2FkZHI7ICAgICAgICAgIC8qIGNsaWVudCBhZGRyZXNzICovCi0JX191MzIgICAgICAgICAgICAgICAgICAgdmFkZHI7ICAgICAgICAgIC8qIHZpcnR1YWwgYWRkcmVzcyAqLwotCV9fdTMyICAgICAgICAgICAgICAgICAgIGRhZGRyOyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCi0JX191MTYgICAgICAgICAgICAgICAgICAgY3BvcnQ7Ci0JX191MTYgICAgICAgICAgICAgICAgICAgdnBvcnQ7Ci0JX191MTYgICAgICAgICAgICAgICAgICAgZHBvcnQ7CisJX19iZTMyICAgICAgICAgICAgICAgICAgIGNhZGRyOyAgICAgICAgICAvKiBjbGllbnQgYWRkcmVzcyAqLworCV9fYmUzMiAgICAgICAgICAgICAgICAgICB2YWRkcjsgICAgICAgICAgLyogdmlydHVhbCBhZGRyZXNzICovCisJX19iZTMyICAgICAgICAgICAgICAgICAgIGRhZGRyOyAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJX19iZTE2ICAgICAgICAgICAgICAgICAgIGNwb3J0OworCV9fYmUxNiAgICAgICAgICAgICAgICAgICB2cG9ydDsKKwlfX2JlMTYgICAgICAgICAgICAgICAgICAgZHBvcnQ7CiAJX191MTYgICAgICAgICAgICAgICAgICAgcHJvdG9jb2w7ICAgICAgIC8qIFdoaWNoIHByb3RvY29sIChUQ1AvVURQKSAqLwogCiAJLyogY291bnRlciBhbmQgdGltZXIgKi8KQEAgLTU1NCwxMiArNTU0LDEyIEBACiAJYXRvbWljX3QJCXVzZWNudDsgICAvKiB1c2UgY291bnRlciAqLwogCiAJX191MTYJCQlwcm90b2NvbDsgLyogd2hpY2ggcHJvdG9jb2wgKFRDUC9VRFApICovCi0JX191MzIJCQlhZGRyOwkgIC8qIElQIGFkZHJlc3MgZm9yIHZpcnR1YWwgc2VydmljZSAqLwotCV9fdTE2CQkJcG9ydDsJICAvKiBwb3J0IG51bWJlciBmb3IgdGhlIHNlcnZpY2UgKi8KKwlfX2JlMzIJCQlhZGRyOwkgIC8qIElQIGFkZHJlc3MgZm9yIHZpcnR1YWwgc2VydmljZSAqLworCV9fYmUxNgkJCXBvcnQ7CSAgLyogcG9ydCBudW1iZXIgZm9yIHRoZSBzZXJ2aWNlICovCiAJX191MzIgICAgICAgICAgICAgICAgICAgZndtYXJrOyAgIC8qIGZpcmV3YWxsIG1hcmsgb2YgdGhlIHNlcnZpY2UgKi8KIAl1bnNpZ25lZAkJZmxhZ3M7CSAgLyogc2VydmljZSBzdGF0dXMgZmxhZ3MgKi8KIAl1bnNpZ25lZAkJdGltZW91dDsgIC8qIHBlcnNpc3RlbnQgdGltZW91dCBpbiB0aWNrcyAqLwotCV9fdTMyCQkJbmV0bWFzazsgIC8qIGdyb3VwaW5nIGdyYW51bGFyaXR5ICovCisJX19iZTMyCQkJbmV0bWFzazsgIC8qIGdyb3VwaW5nIGdyYW51bGFyaXR5ICovCiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWRlc3RpbmF0aW9uczsgIC8qIHJlYWwgc2VydmVyIGQtbGlua2VkIGxpc3QgKi8KIAlfX3UzMgkJCW51bV9kZXN0czsgICAgIC8qIG51bWJlciBvZiBzZXJ2ZXJzICovCkBAIC01ODEsOCArNTgxLDggQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCW5fbGlzdDsgICAvKiBmb3IgdGhlIGRlc3RzIGluIHRoZSBzZXJ2aWNlICovCiAJc3RydWN0IGxpc3RfaGVhZAlkX2xpc3Q7ICAgLyogZm9yIHRhYmxlIHdpdGggYWxsIHRoZSBkZXN0cyAqLwogCi0JX191MzIJCQlhZGRyOwkJLyogSVAgYWRkcmVzcyBvZiB0aGUgc2VydmVyICovCi0JX191MTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLworCV9fYmUzMgkJCWFkZHI7CQkvKiBJUCBhZGRyZXNzIG9mIHRoZSBzZXJ2ZXIgKi8KKwlfX2JlMTYJCQlwb3J0OwkJLyogcG9ydCBudW1iZXIgb2YgdGhlIHNlcnZlciAqLwogCXZvbGF0aWxlIHVuc2lnbmVkCWZsYWdzOwkJLyogZGVzdCBzdGF0dXMgZmxhZ3MgKi8KIAlhdG9taWNfdAkJY29ubl9mbGFnczsJLyogZmxhZ3MgdG8gY29weSB0byBjb25uICovCiAJYXRvbWljX3QJCXdlaWdodDsJCS8qIHNlcnZlciB3ZWlnaHQgKi8KQEAgLTYwNSw4ICs2MDUsOCBAQAogCS8qIGZvciB2aXJ0dWFsIHNlcnZpY2UgKi8KIAlzdHJ1Y3QgaXBfdnNfc2VydmljZQkqc3ZjOwkJLyogc2VydmljZSBpdCBiZWxvbmdzIHRvICovCiAJX191MTYJCQlwcm90b2NvbDsJLyogd2hpY2ggcHJvdG9jb2wgKFRDUC9VRFApICovCi0JX191MzIJCQl2YWRkcjsJCS8qIHZpcnR1YWwgSVAgYWRkcmVzcyAqLwotCV9fdTE2CQkJdnBvcnQ7CQkvKiB2aXJ0dWFsIHBvcnQgbnVtYmVyICovCisJX19iZTMyCQkJdmFkZHI7CQkvKiB2aXJ0dWFsIElQIGFkZHJlc3MgKi8KKwlfX2JlMTYJCQl2cG9ydDsJCS8qIHZpcnR1YWwgcG9ydCBudW1iZXIgKi8KIAlfX3UzMgkJCXZmd21hcms7CS8qIGZpcmV3YWxsIG1hcmsgb2Ygc2VydmljZSAqLwogfTsKIApAQCAtNjQ4LDcgKzY0OCw3IEBACiAJLyogbWVtYmVycyBmb3IgYXBwbGljYXRpb24gaW5jYXJuYXRpb25zICovCiAJc3RydWN0IGxpc3RfaGVhZAlwX2xpc3Q7CQkvKiBtZW1iZXIgaW4gcHJvdG8gYXBwIGxpc3QgKi8KIAlzdHJ1Y3QgaXBfdnNfYXBwCSphcHA7CQkvKiBpdHMgcmVhbCBhcHBsaWNhdGlvbiAqLwotCV9fdTE2CQkJcG9ydDsJCS8qIHBvcnQgbnVtYmVyIGluIG5ldCBvcmRlciAqLworCV9fYmUxNgkJCXBvcnQ7CQkvKiBwb3J0IG51bWJlciBpbiBuZXQgb3JkZXIgKi8KIAlhdG9taWNfdAkJdXNlY250OwkJLyogdXNhZ2UgY291bnRlciAqLwogCiAJLyogb3V0cHV0IGhvb2s6IHJldHVybiBmYWxzZSBpZiBjYW4ndCBsaW5lYXJpemUuIGRpZmYgc2V0IGZvciBUQ1AuICAqLwpAQCAtNzQwLDExICs3NDAsMTEgQEAKIH07CiAKIGV4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9pbl9nZXQKLShpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCk7CisoaW50IHByb3RvY29sLCBfX2JlMzIgc19hZGRyLCBfX2JlMTYgc19wb3J0LCBfX2JlMzIgZF9hZGRyLCBfX2JlMTYgZF9wb3J0KTsKIGV4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0Ci0oaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpOworKGludCBwcm90b2NvbCwgX19iZTMyIHNfYWRkciwgX19iZTE2IHNfcG9ydCwgX19iZTMyIGRfYWRkciwgX19iZTE2IGRfcG9ydCk7CiBleHRlcm4gc3RydWN0IGlwX3ZzX2Nvbm4gKmlwX3ZzX2Nvbm5fb3V0X2dldAotKGludCBwcm90b2NvbCwgX191MzIgc19hZGRyLCBfX3UxNiBzX3BvcnQsIF9fdTMyIGRfYWRkciwgX191MTYgZF9wb3J0KTsKKyhpbnQgcHJvdG9jb2wsIF9fYmUzMiBzX2FkZHIsIF9fYmUxNiBzX3BvcnQsIF9fYmUzMiBkX2FkZHIsIF9fYmUxNiBkX3BvcnQpOwogCiAvKiBwdXQgYmFjayB0aGUgY29ubiB3aXRob3V0IHJlc3RhcnRpbmcgaXRzIHRpbWVyICovCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pcF92c19jb25uX3B1dChzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApCkBAIC03NTIsMTEgKzc1MiwxMSBAQAogCWF0b21pY19kZWMoJmNwLT5yZWZjbnQpOwogfQogZXh0ZXJuIHZvaWQgaXBfdnNfY29ubl9wdXQoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKTsKLWV4dGVybiB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fdTE2IGNwb3J0KTsKK2V4dGVybiB2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCk7CiAKIGV4dGVybiBzdHJ1Y3QgaXBfdnNfY29ubiAqCi1pcF92c19jb25uX25ldyhpbnQgcHJvdG8sIF9fdTMyIGNhZGRyLCBfX3UxNiBjcG9ydCwgX191MzIgdmFkZHIsIF9fdTE2IHZwb3J0LAotCSAgICAgICBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQsIHVuc2lnbmVkIGZsYWdzLAoraXBfdnNfY29ubl9uZXcoaW50IHByb3RvLCBfX2JlMzIgY2FkZHIsIF9fYmUxNiBjcG9ydCwgX19iZTMyIHZhZGRyLCBfX2JlMTYgdnBvcnQsCisJICAgICAgIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBmbGFncywKIAkgICAgICAgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpOwogZXh0ZXJuIHZvaWQgaXBfdnNfY29ubl9leHBpcmVfbm93KHN0cnVjdCBpcF92c19jb25uICpjcCk7CiAKQEAgLTg4Nyw3ICs4ODcsNyBAQAogZXh0ZXJuIHN0cnVjdCBpcF92c19zdGF0cyBpcF92c19zdGF0czsKIAogZXh0ZXJuIHN0cnVjdCBpcF92c19zZXJ2aWNlICoKLWlwX3ZzX3NlcnZpY2VfZ2V0KF9fdTMyIGZ3bWFyaywgX191MTYgcHJvdG9jb2wsIF9fdTMyIHZhZGRyLCBfX3UxNiB2cG9ydCk7CitpcF92c19zZXJ2aWNlX2dldChfX3UzMiBmd21hcmssIF9fdTE2IHByb3RvY29sLCBfX2JlMzIgdmFkZHIsIF9fYmUxNiB2cG9ydCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zZXJ2aWNlX3B1dChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjKQogewpAQCAtODk1LDcgKzg5NSw3IEBACiB9CiAKIGV4dGVybiBzdHJ1Y3QgaXBfdnNfZGVzdCAqCi1pcF92c19sb29rdXBfcmVhbF9zZXJ2aWNlKF9fdTE2IHByb3RvY29sLCBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQpOworaXBfdnNfbG9va3VwX3JlYWxfc2VydmljZShfX3UxNiBwcm90b2NvbCwgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQpOwogZXh0ZXJuIGludCBpcF92c191c2VfY291bnRfaW5jKHZvaWQpOwogZXh0ZXJuIHZvaWQgaXBfdnNfdXNlX2NvdW50X2RlYyh2b2lkKTsKIGV4dGVybiBpbnQgaXBfdnNfY29udHJvbF9pbml0KHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXB2Ni5oIGIvaW5jbHVkZS9uZXQvaXB2Ni5oCmluZGV4IDcyYmY0N2IuLjgyMjNjNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lwdjYuaAorKysgYi9pbmNsdWRlL25ldC9pcHY2LmgKQEAgLTMxOCw4ICszMTgsOCBAQAogCiAjaWZuZGVmIF9fSEFWRV9BUkNIX0FERFJfU0VUCiBzdGF0aWMgaW5saW5lIHZvaWQgaXB2Nl9hZGRyX3NldChzdHJ1Y3QgaW42X2FkZHIgKmFkZHIsIAotCQkJCSAgICAgX191MzIgdzEsIF9fdTMyIHcyLAotCQkJCSAgICAgX191MzIgdzMsIF9fdTMyIHc0KQorCQkJCSAgICAgX19iZTMyIHcxLCBfX2JlMzIgdzIsCisJCQkJICAgICBfX2JlMzIgdzMsIF9fYmUzMiB3NCkKIHsKIAlhZGRyLT5zNl9hZGRyMzJbMF0gPSB3MTsKIAlhZGRyLT5zNl9hZGRyMzJbMV0gPSB3MjsKQEAgLTMzNyw3ICszMzcsNyBAQAogCQlhMS0+czZfYWRkcjMyWzNdID09IGEyLT5zNl9hZGRyMzJbM10pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBfX2lwdjZfcHJlZml4X2VxdWFsKGNvbnN0IHUzMiAqYTEsIGNvbnN0IHUzMiAqYTIsCitzdGF0aWMgaW5saW5lIGludCBfX2lwdjZfcHJlZml4X2VxdWFsKGNvbnN0IF9fYmUzMiAqYTEsIGNvbnN0IF9fYmUzMiAqYTIsCiAJCQkJICAgICAgdW5zaWduZWQgaW50IHByZWZpeGxlbikKIHsKIAl1bnNpZ25lZCBwZHcsIHBiaTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY29tbW9uLmggYi9pbmNsdWRlL25ldC9pcmRhL2lybGFuX2NvbW1vbi5oCmluZGV4IDFjNzNiZGIuLjk1OTJjMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYW5fY29tbW9uLmgKKysrIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhbl9jb21tb24uaApAQCAtOTgsNyArOTgsMTUgQEAKICNkZWZpbmUgSVJMQU5fU0hPUlQgIDEKICNkZWZpbmUgSVJMQU5fQVJSQVkgIDIKIAotI2RlZmluZSBJUkxBTl9NQVhfSEVBREVSIChUVFBfSEVBREVSK0xNUF9IRUFERVIrTEFQX01BWF9IRUFERVIpCisvKiBJckxBTiBzaXRzIG9uIHRvcCBpZiBJclRUUCAqLworI2RlZmluZSBJUkxBTl9NQVhfSEVBREVSIChUVFBfSEVBREVSK0xNUF9IRUFERVIpCisvKiAxIGJ5dGUgZm9yIHRoZSBjb21tYW5kIGNvZGUgYW5kIDEgYnl0ZSBmb3IgdGhlIHBhcmFtZXRlciBjb3VudCAqLworI2RlZmluZSBJUkxBTl9DTURfSEVBREVSIDIKKworI2RlZmluZSBJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTihuYW1lLCB2YWx1ZSkgKDEgKyBzdHJsZW4oKG5hbWUpKSArIDIgXAorCQkJCQkJKyBzdHJsZW4gKCh2YWx1ZSkpKQorI2RlZmluZSBJUkxBTl9CWVRFX1BBUkFNRVRFUl9MRU4obmFtZSkgICAgICAgICAgKDEgKyBzdHJsZW4oKG5hbWUpKSArIDIgKyAxKQorI2RlZmluZSBJUkxBTl9TSE9SVF9QQVJBTUVURVJfTEVOKG5hbWUpICAgICAgICAgKDEgKyBzdHJsZW4oKG5hbWUpKSArIDIgKyAyKQogCiAvKgogICogIElyTEFOIGNsaWVudApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxhcF9mcmFtZS5oCmluZGV4IDM0NTJhZTIuLjlkZDU0YTUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsYXBfZnJhbWUuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybGFwX2ZyYW1lLmgKQEAgLTc0LDYgKzc0LDE5IEBACiAKICNkZWZpbmUgUEZfQklUICAgIDB4MTAgLyogUG9sbC9maW5hbCBiaXQgKi8KIAorLyogU29tZSBJckxBUCBmaWVsZCBsZW5ndGhzICovCisvKgorICogT25seSBiYXVkIHJhdGUgdHJpcGxldCBpcyA0IGJ5dGVzIChQViBjYW4gYmUgMiBieXRlcykuCisgKiBBbGwgb3RoZXJzIHBhcmFtcyAoNykgYXJlIDMgYnl0ZXMsIHNvIHRoYXQncyA3KjMgKyAxKjQgYnl0ZXMuCisgKi8KKyNkZWZpbmUgSVJMQVBfTkVHT0NJQVRJT05fUEFSQU1TX0xFTiAyNQorI2RlZmluZSBJUkxBUF9ESVNDT1ZFUllfSU5GT19MRU4gICAgIDMyCisKK3N0cnVjdCBkaXNjX2ZyYW1lIHsKKwlfX3U4IGNhZGRyOyAgICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4IGNvbnRyb2w7Cit9IElSREFfUEFDSzsKKwogc3RydWN0IHhpZF9mcmFtZSB7CiAJX191OCAgY2FkZHI7IC8qIENvbm5lY3Rpb24gYWRkcmVzcyAqLwogCV9fdTggIGNvbnRyb2w7CkBAIC05NSwxMSArMTA4LDI1IEBACiBzdHJ1Y3QgdWFfZnJhbWUgewogCV9fdTggY2FkZHI7CiAJX191OCBjb250cm9sOwotCiAJX191MzIgc2FkZHI7IC8qIFNvdXJjZSBkZXZpY2UgYWRkcmVzcyAqLwogCV9fdTMyIGRhZGRyOyAvKiBEZXN0IGRldmljZSBhZGRyZXNzICovCiB9IElSREFfUEFDSzsKLQkKKworc3RydWN0IGRtX2ZyYW1lIHsKKwlfX3U4IGNhZGRyOyAgICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4IGNvbnRyb2w7Cit9IElSREFfUEFDSzsKKworc3RydWN0IHJkX2ZyYW1lIHsKKwlfX3U4IGNhZGRyOyAgICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4IGNvbnRyb2w7Cit9IElSREFfUEFDSzsKKworc3RydWN0IHJyX2ZyYW1lIHsKKwlfX3U4IGNhZGRyOyAgICAgICAgICAvKiBDb25uZWN0aW9uIGFkZHJlc3MgKi8KKwlfX3U4IGNvbnRyb2w7Cit9IElSREFfUEFDSzsKKwogc3RydWN0IGlfZnJhbWUgewogCV9fdTggY2FkZHI7CiAJX191OCBjb250cm9sOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oIGIvaW5jbHVkZS9uZXQvaXJkYS9pcmxtcC5oCmluZGV4IDExZWNmYTUuLmUyMTJiOWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2lyZGEvaXJsbXAuaAorKysgYi9pbmNsdWRlL25ldC9pcmRhL2lybG1wLmgKQEAgLTQ4LDcgKzQ4LDcgQEAKICNkZWZpbmUgREVWX0FERFJfQU5ZICAweGZmZmZmZmZmCiAKICNkZWZpbmUgTE1QX0hFQURFUiAgICAgICAgICAyICAgIC8qIERlc3QgTFNBUCArIFNvdXJjZSBMU0FQICovCi0jZGVmaW5lIExNUF9DT05UUk9MX0hFQURFUiAgNAorI2RlZmluZSBMTVBfQ09OVFJPTF9IRUFERVIgIDQgICAgLyogTE1QX0hFQURFUiArIG9wY29kZSArIHBhcmFtZXRlciAqLwogI2RlZmluZSBMTVBfUElEX0hFQURFUiAgICAgIDEgICAgLyogVXNlZCBieSBVbHRyYSAqLwogI2RlZmluZSBMTVBfTUFYX0hFQURFUiAgICAgIChMTVBfQ09OVFJPTF9IRUFERVIrTEFQX01BWF9IRUFERVIpCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L25ldGxhYmVsLmggYi9pbmNsdWRlL25ldC9uZXRsYWJlbC5oCmluZGV4IDY2OTI0MzAuLmM2M2E1ODAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxhYmVsLmgKKysrIGIvaW5jbHVkZS9uZXQvbmV0bGFiZWwuaApAQCAtOTIsMTEgKzkyLDE3IEBACiAgKgogICovCiAKKy8qIE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uICovCitzdHJ1Y3QgbmV0bGJsX2F1ZGl0IHsKKwl1MzIgc2VjaWQ7CisJdWlkX3QgbG9naW51aWQ7Cit9OworCiAvKiBEb21haW4gbWFwcGluZyBkZWZpbml0aW9uIHN0cnVjdCAqLwogc3RydWN0IG5ldGxibF9kb21fbWFwOwogCiAvKiBEb21haW4gbWFwcGluZyBvcGVyYXRpb25zICovCi1pbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmUoY29uc3QgY2hhciAqZG9tYWluKTsKK2ludCBuZXRsYmxfZG9taHNoX3JlbW92ZShjb25zdCBjaGFyICpkb21haW4sIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pOwogCiAvKiBMU00gc2VjdXJpdHkgYXR0cmlidXRlcyAqLwogc3RydWN0IG5ldGxibF9sc21fY2FjaGUgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbmV0bGluay5oIGIvaW5jbHVkZS9uZXQvbmV0bGluay5oCmluZGV4IDRhYjY4YTcuLmNlNWNiYTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L25ldGxpbmsuaAorKysgYi9pbmNsdWRlL25ldC9uZXRsaW5rLmgKQEAgLTgzMSw2ICs4MzEsOSBAQAogI2RlZmluZSBOTEFfUFVUX1UzMihza2IsIGF0dHJ0eXBlLCB2YWx1ZSkgXAogCU5MQV9QVVRfVFlQRShza2IsIHUzMiwgYXR0cnR5cGUsIHZhbHVlKQogCisjZGVmaW5lIE5MQV9QVVRfQkUzMihza2IsIGF0dHJ0eXBlLCB2YWx1ZSkgXAorCU5MQV9QVVRfVFlQRShza2IsIF9fYmUzMiwgYXR0cnR5cGUsIHZhbHVlKQorCiAjZGVmaW5lIE5MQV9QVVRfVTY0KHNrYiwgYXR0cnR5cGUsIHZhbHVlKSBcCiAJTkxBX1BVVF9UWVBFKHNrYiwgdTY0LCBhdHRydHlwZSwgdmFsdWUpCiAKQEAgLTg1Myw2ICs4NTYsMTUgQEAKIH0KIAogLyoqCisgKiBubGFfZ2V0X2JlMzIgLSByZXR1cm4gcGF5bG9hZCBvZiBfX2JlMzIgYXR0cmlidXRlCisgKiBAbmxhOiBfX2JlMzIgbmV0bGluayBhdHRyaWJ1dGUKKyAqLworc3RhdGljIGlubGluZSBfX2JlMzIgbmxhX2dldF9iZTMyKHN0cnVjdCBubGF0dHIgKm5sYSkKK3sKKwlyZXR1cm4gKihfX2JlMzIgKikgbmxhX2RhdGEobmxhKTsKK30KKworLyoqCiAgKiBubGFfZ2V0X3UxNiAtIHJldHVybiBwYXlsb2FkIG9mIHUxNiBhdHRyaWJ1dGUKICAqIEBubGE6IHUxNiBuZXRsaW5rIGF0dHJpYnV0ZQogICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9yb3V0ZS5oIGIvaW5jbHVkZS9uZXQvcm91dGUuaAppbmRleCA3ZjkzYWMwLi40ODZlMzdhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0L3JvdXRlLmgKQEAgLTYyLDE4ICs2MiwxOCBAQAogCV9fdTE2CQkJcnRfdHlwZTsKIAlfX3UxNgkJCXJ0X211bHRpcGF0aF9hbGc7CiAKLQlfX3UzMgkJCXJ0X2RzdDsJLyogUGF0aCBkZXN0aW5hdGlvbgkqLwotCV9fdTMyCQkJcnRfc3JjOwkvKiBQYXRoIHNvdXJjZQkJKi8KKwlfX2JlMzIJCQlydF9kc3Q7CS8qIFBhdGggZGVzdGluYXRpb24JKi8KKwlfX2JlMzIJCQlydF9zcmM7CS8qIFBhdGggc291cmNlCQkqLwogCWludAkJCXJ0X2lpZjsKIAogCS8qIEluZm8gb24gbmVpZ2hib3VyICovCi0JX191MzIJCQlydF9nYXRld2F5OworCV9fYmUzMgkJCXJ0X2dhdGV3YXk7CiAKIAkvKiBDYWNoZSBsb29rdXAga2V5cyAqLwogCXN0cnVjdCBmbG93aQkJZmw7CiAKIAkvKiBNaXNjZWxsYW5lb3VzIGNhY2hlZCBpbmZvcm1hdGlvbiAqLwotCV9fdTMyCQkJcnRfc3BlY19kc3Q7IC8qIFJGQzExMjIgc3BlY2lmaWMgZGVzdGluYXRpb24gKi8KKwlfX2JlMzIJCQlydF9zcGVjX2RzdDsgLyogUkZDMTEyMiBzcGVjaWZpYyBkZXN0aW5hdGlvbiAqLwogCXN0cnVjdCBpbmV0X3BlZXIJKnBlZXI7IC8qIGxvbmctbGl2aW5nIHBlZXIgaW5mbyAqLwogfTsKIApAQCAtMTA5LDE4ICsxMDksMTggQEAKIAogc3RydWN0IGluX2RldmljZTsKIGV4dGVybiBpbnQJCWlwX3J0X2luaXQodm9pZCk7Ci1leHRlcm4gdm9pZAkJaXBfcnRfcmVkaXJlY3QodTMyIG9sZF9ndywgdTMyIGRzdCwgdTMyIG5ld19ndywKLQkJCQkgICAgICAgdTMyIHNyYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZAkJaXBfcnRfcmVkaXJlY3QoX19iZTMyIG9sZF9ndywgX19iZTMyIGRzdCwgX19iZTMyIG5ld19ndywKKwkJCQkgICAgICAgX19iZTMyIHNyYywgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBleHRlcm4gdm9pZAkJaXBfcnRfYWR2aWNlKHN0cnVjdCBydGFibGUgKipycCwgaW50IGFkdmljZSk7CiBleHRlcm4gdm9pZAkJcnRfY2FjaGVfZmx1c2goaW50IGhvdyk7CiBleHRlcm4gaW50CQlfX2lwX3JvdXRlX291dHB1dF9rZXkoc3RydWN0IHJ0YWJsZSAqKiwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHApOwogZXh0ZXJuIGludAkJaXBfcm91dGVfb3V0cHV0X2tleShzdHJ1Y3QgcnRhYmxlICoqLCBzdHJ1Y3QgZmxvd2kgKmZscCk7CiBleHRlcm4gaW50CQlpcF9yb3V0ZV9vdXRwdXRfZmxvdyhzdHJ1Y3QgcnRhYmxlICoqcnAsIHN0cnVjdCBmbG93aSAqZmxwLCBzdHJ1Y3Qgc29jayAqc2ssIGludCBmbGFncyk7Ci1leHRlcm4gaW50CQlpcF9yb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiosIHUzMiBkc3QsIHUzMiBzcmMsIHU4IHRvcywgc3RydWN0IG5ldF9kZXZpY2UgKmRldmluKTsKK2V4dGVybiBpbnQJCWlwX3JvdXRlX2lucHV0KHN0cnVjdCBza19idWZmKiwgX19iZTMyIGRzdCwgX19iZTMyIHNyYywgdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2aW4pOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0CWlwX3J0X2ZyYWdfbmVlZGVkKHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBzaG9ydCBuZXdfbXR1KTsKIGV4dGVybiB2b2lkCQlpcF9ydF9zZW5kX3JlZGlyZWN0KHN0cnVjdCBza19idWZmICpza2IpOwogCi1leHRlcm4gdW5zaWduZWQJCWluZXRfYWRkcl90eXBlKHUzMiBhZGRyKTsKK2V4dGVybiB1bnNpZ25lZAkJaW5ldF9hZGRyX3R5cGUoX19iZTMyIGFkZHIpOwogZXh0ZXJuIHZvaWQJCWlwX3J0X211bHRpY2FzdF9ldmVudChzdHJ1Y3QgaW5fZGV2aWNlICopOwogZXh0ZXJuIGludAkJaXBfcnRfaW9jdGwodW5zaWduZWQgaW50IGNtZCwgdm9pZCBfX3VzZXIgKmFyZyk7CiBleHRlcm4gdm9pZAkJaXBfcnRfZ2V0X3NvdXJjZSh1OCAqc3JjLCBzdHJ1Y3QgcnRhYmxlICpydCk7CkBAIC0xNDQsOSArMTQ0LDkgQEAKIAlyZXR1cm4gaXBfdG9zMnByaW9bSVBUT1NfVE9TKHRvcyk+PjFdOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBpcF9yb3V0ZV9jb25uZWN0KHN0cnVjdCBydGFibGUgKipycCwgdTMyIGRzdCwKLQkJCQkgICB1MzIgc3JjLCB1MzIgdG9zLCBpbnQgb2lmLCB1OCBwcm90b2NvbCwKLQkJCQkgICB1MTYgc3BvcnQsIHUxNiBkcG9ydCwgc3RydWN0IHNvY2sgKnNrKQorc3RhdGljIGlubGluZSBpbnQgaXBfcm91dGVfY29ubmVjdChzdHJ1Y3QgcnRhYmxlICoqcnAsIF9fYmUzMiBkc3QsCisJCQkJICAgX19iZTMyIHNyYywgdTMyIHRvcywgaW50IG9pZiwgdTggcHJvdG9jb2wsCisJCQkJICAgX19iZTE2IHNwb3J0LCBfX2JlMTYgZHBvcnQsIHN0cnVjdCBzb2NrICpzaykKIHsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5vaWYgPSBvaWYsCiAJCQkgICAgLm5sX3UgPSB7IC5pcDRfdSA9IHsgLmRhZGRyID0gZHN0LApAQCAtMTcyLDcgKzE3Miw3IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGlwX3JvdXRlX25ld3BvcnRzKHN0cnVjdCBydGFibGUgKipycCwgdTggcHJvdG9jb2wsCi0JCQkJICAgIHUxNiBzcG9ydCwgdTE2IGRwb3J0LCBzdHJ1Y3Qgc29jayAqc2spCisJCQkJICAgIF9fYmUxNiBzcG9ydCwgX19iZTE2IGRwb3J0LCBzdHJ1Y3Qgc29jayAqc2spCiB7CiAJaWYgKHNwb3J0ICE9ICgqcnApLT5mbC5mbF9pcF9zcG9ydCB8fAogCSAgICBkcG9ydCAhPSAoKnJwKS0+ZmwuZmxfaXBfZHBvcnQpIHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3NvY2suaCBiL2luY2x1ZGUvbmV0L3NvY2suaAppbmRleCBlZGQ0ZDczLi40MGJiOTBlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9zb2NrLmgKKysrIGIvaW5jbHVkZS9uZXQvc29jay5oCkBAIC02NjUsNyArNjY1LDYgQEAKIAlzdHJ1Y3Qgc29jawkJKnNrOwogCXN0cnVjdCBzY21fY29va2llCSpzY207CiAJc3RydWN0IG1zZ2hkcgkJKm1zZywgYXN5bmNfbXNnOwotCXN0cnVjdCBpb3ZlYwkJYXN5bmNfaW92OwogCXN0cnVjdCBraW9jYgkJKmtpb2NiOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQveGZybS5oIGIvaW5jbHVkZS9uZXQveGZybS5oCmluZGV4IDExZTBiMWQuLjFlMmE0ZGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L3hmcm0uaAorKysgYi9pbmNsdWRlL25ldC94ZnJtLmgKQEAgLTQzNyw4ICs0MzcsOCBAQAogCiBzdGF0aWMgX19pbmxpbmVfXyBpbnQgYWRkcl9tYXRjaCh2b2lkICp0b2tlbjEsIHZvaWQgKnRva2VuMiwgaW50IHByZWZpeGxlbikKIHsKLQlfX3UzMiAqYTEgPSB0b2tlbjE7Ci0JX191MzIgKmEyID0gdG9rZW4yOworCV9fYmUzMiAqYTEgPSB0b2tlbjE7CisJX19iZTMyICphMiA9IHRva2VuMjsKIAlpbnQgcGR3OwogCWludCBwYmk7CiAKQEAgLTQ1MCw3ICs0NTAsNyBAQAogCQkJcmV0dXJuIDA7CiAKIAlpZiAocGJpKSB7Ci0JCV9fdTMyIG1hc2s7CisJCV9fYmUzMiBtYXNrOwogCiAJCW1hc2sgPSBodG9ubCgoMHhmZmZmZmZmZikgPDwgKDMyIC0gcGJpKSk7CiAKQEAgLTQ2Miw5ICs0NjIsOSBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXwotdTE2IHhmcm1fZmxvd2lfc3BvcnQoc3RydWN0IGZsb3dpICpmbCkKK19fYmUxNiB4ZnJtX2Zsb3dpX3Nwb3J0KHN0cnVjdCBmbG93aSAqZmwpCiB7Ci0JdTE2IHBvcnQ7CisJX19iZTE2IHBvcnQ7CiAJc3dpdGNoKGZsLT5wcm90bykgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJY2FzZSBJUFBST1RPX1VEUDoKQEAgLTQ4Nyw5ICs0ODcsOSBAQAogfQogCiBzdGF0aWMgX19pbmxpbmVfXwotdTE2IHhmcm1fZmxvd2lfZHBvcnQoc3RydWN0IGZsb3dpICpmbCkKK19fYmUxNiB4ZnJtX2Zsb3dpX2Rwb3J0KHN0cnVjdCBmbG93aSAqZmwpCiB7Ci0JdTE2IHBvcnQ7CisJX19iZTE2IHBvcnQ7CiAJc3dpdGNoKGZsLT5wcm90bykgewogCWNhc2UgSVBQUk9UT19UQ1A6CiAJY2FzZSBJUFBST1RPX1VEUDoKQEAgLTkxMiw3ICs5MTIsNyBAQAogZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9pbnNlcnQoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogZXh0ZXJuIGludCB4ZnJtX3N0YXRlX2FkZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCk7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfdXBkYXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4KTsKLWV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXAoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCB1MzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKK2V4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXAoeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKIGV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9zdGF0ZV9sb29rdXBfYnlhZGRyKHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5KTsKICNpZmRlZiBDT05GSUdfWEZSTV9TVUJfUE9MSUNZCiBleHRlcm4gaW50IHhmcm1fdG1wbF9zb3J0KHN0cnVjdCB4ZnJtX3RtcGwgKipkc3QsIHN0cnVjdCB4ZnJtX3RtcGwgKipzcmMsCkBAIC05MzUsOCArOTM1LDggQEAKIGV4dGVybiBzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV9maW5kX2FjcV9ieXNlcSh1MzIgc2VxKTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9kZWxldGUoc3RydWN0IHhmcm1fc3RhdGUgKngpOwogZXh0ZXJuIHZvaWQgeGZybV9zdGF0ZV9mbHVzaCh1OCBwcm90byk7Ci1leHRlcm4gaW50IHhmcm1fcmVwbGF5X2NoZWNrKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgc2VxKTsKLWV4dGVybiB2b2lkIHhmcm1fcmVwbGF5X2FkdmFuY2Uoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBzZXEpOworZXh0ZXJuIGludCB4ZnJtX3JlcGxheV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgX19iZTMyIHNlcSk7CitleHRlcm4gdm9pZCB4ZnJtX3JlcGxheV9hZHZhbmNlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBfX2JlMzIgc2VxKTsKIGV4dGVybiB2b2lkIHhmcm1fcmVwbGF5X25vdGlmeShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IGV2ZW50KTsKIGV4dGVybiBpbnQgeGZybV9zdGF0ZV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm1fc3RhdGVfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgbXR1KTsKQEAgLTk0NSw3ICs5NDUsNyBAQAogZXh0ZXJuIGludCB4ZnJtNF9vdXRwdXQoc3RydWN0IHNrX2J1ZmYgKnNrYik7CiBleHRlcm4gaW50IHhmcm00X3R1bm5lbF9yZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIpOwogZXh0ZXJuIGludCB4ZnJtNF90dW5uZWxfZGVyZWdpc3RlcihzdHJ1Y3QgeGZybV90dW5uZWwgKmhhbmRsZXIpOwotZXh0ZXJuIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzcGkpOworZXh0ZXJuIGludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcGkpOwogZXh0ZXJuIGludCB4ZnJtNl9yY3Yoc3RydWN0IHNrX2J1ZmYgKipwc2tiKTsKIGV4dGVybiBpbnQgeGZybTZfaW5wdXRfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsCiAJCQkgICAgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCB1OCBwcm90byk7CkBAIC05ODksNyArOTg5LDcgQEAKIHN0cnVjdCB4ZnJtX3BvbGljeSAqeGZybV9wb2xpY3lfYnlpZCh1OCwgaW50IGRpciwgdTMyIGlkLCBpbnQgZGVsZXRlKTsKIHZvaWQgeGZybV9wb2xpY3lfZmx1c2godTggdHlwZSk7CiB1MzIgeGZybV9nZXRfYWNxc2VxKHZvaWQpOwotdm9pZCB4ZnJtX2FsbG9jX3NwaShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIG1pbnNwaSwgdTMyIG1heHNwaSk7Cit2b2lkIHhmcm1fYWxsb2Nfc3BpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBfX2JlMzIgbWluc3BpLCBfX2JlMzIgbWF4c3BpKTsKIHN0cnVjdCB4ZnJtX3N0YXRlICogeGZybV9maW5kX2FjcSh1OCBtb2RlLCB1MzIgcmVxaWQsIHU4IHByb3RvLCAKIAkJCQkgIHhmcm1fYWRkcmVzc190ICpkYWRkciwgeGZybV9hZGRyZXNzX3QgKnNhZGRyLCAKIAkJCQkgIGludCBjcmVhdGUsIHVuc2lnbmVkIHNob3J0IGZhbWlseSk7CkBAIC0xMDA0LDcgKzEwMDQsNyBAQAogZXh0ZXJuIGludCBrbV9yZXBvcnQodTggcHJvdG8sIHN0cnVjdCB4ZnJtX3NlbGVjdG9yICpzZWwsIHhmcm1fYWRkcmVzc190ICphZGRyKTsKIAogZXh0ZXJuIHZvaWQgeGZybV9pbnB1dF9pbml0KHZvaWQpOwotZXh0ZXJuIGludCB4ZnJtX3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCB1MzIgKnNwaSwgdTMyICpzZXEpOworZXh0ZXJuIGludCB4ZnJtX3BhcnNlX3NwaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBuZXh0aGRyLCBfX2JlMzIgKnNwaSwgX19iZTMyICpzZXEpOwogCiBleHRlcm4gdm9pZCB4ZnJtX3Byb2JlX2FsZ3Modm9pZCk7CiBleHRlcm4gaW50IHhmcm1fY291bnRfYXV0aF9zdXBwb3J0ZWQodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV9kZXZpY2UuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCmluZGV4IDg5NWQyMTIuLmI0MDFjODIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCisrKyBiL2luY2x1ZGUvc2NzaS9zY3NpX2RldmljZS5oCkBAIC0yOTgsOSArMjk4LDkgQEAKIAkJCSAgICAgIHZvaWQgKCpkb25lKSh2b2lkICosIGNoYXIgKiwgaW50LCBpbnQpLAogCQkJICAgICAgZ2ZwX3QgZ2ZwKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHNjc2lfZGV2aWNlX3JlcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQorc3RhdGljIGlubGluZSBpbnQgX19tdXN0X2NoZWNrIHNjc2lfZGV2aWNlX3JlcHJvYmUoc3RydWN0IHNjc2lfZGV2aWNlICpzZGV2KQogewotCWRldmljZV9yZXByb2JlKCZzZGV2LT5zZGV2X2dlbmRldik7CisJcmV0dXJuIGRldmljZV9yZXByb2JlKCZzZGV2LT5zZGV2X2dlbmRldik7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNkZXZfY2hhbm5lbChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaCBiL2luY2x1ZGUvc2NzaS9zY3NpX3RjcS5oCmluZGV4IGQwNGQwNWEuLmMyNDdhMjgyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaAorKysgYi9pbmNsdWRlL3Njc2kvc2NzaV90Y3EuaApAQCAtNiw3ICs2LDYgQEAKICNpbmNsdWRlIDxzY3NpL3Njc2lfZGV2aWNlLmg+CiAjaW5jbHVkZSA8c2NzaS9zY3NpX2hvc3QuaD4KIAotCiAjZGVmaW5lIE1TR19TSU1QTEVfVEFHCTB4MjAKICNkZWZpbmUgTVNHX0hFQURfVEFHCTB4MjEKICNkZWZpbmUgTVNHX09SREVSRURfVEFHCTB4MjIKQEAgLTE0LDYgKzEzLDcgQEAKICNkZWZpbmUgU0NTSV9OT19UQUcJKC0xKSAgICAvKiBpZGVudGlmeSBubyB0YWcgaW4gdXNlICovCiAKIAorI2lmZGVmIENPTkZJR19CTE9DSwogCiAvKioKICAqIHNjc2lfZ2V0X3RhZ190eXBlIC0gZ2V0IHRoZSB0eXBlIG9mIHRhZyB0aGUgZGV2aWNlIHN1cHBvcnRzCkBAIC0xMDAsNyArMTAwLDcgQEAKIAlzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYgPSBjbWQtPmRldmljZTsKIAogICAgICAgICBpZiAoYmxrX3JxX3RhZ2dlZChyZXEpKSB7Ci0JCWlmIChzZGV2LT5vcmRlcmVkX3RhZ3MgJiYgcmVxLT5mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKKwkJaWYgKHNkZXYtPm9yZGVyZWRfdGFncyAmJiByZXEtPmNtZF9mbGFncyAmIFJFUV9IQVJEQkFSUklFUikKICAgICAgICAgCSAgICAgICAgKm1zZysrID0gTVNHX09SREVSRURfVEFHOwogICAgICAgICAJZWxzZQogICAgICAgICAJICAgICAgICAqbXNnKysgPSBNU0dfU0lNUExFX1RBRzsKQEAgLTE0NCw0ICsxNDQsNSBAQAogCXJldHVybiBzaG9zdC0+YnF0ID8gMCA6IC1FTk9NRU07CiB9CiAKKyNlbmRpZiAvKiBDT05GSUdfQkxPQ0sgKi8KICNlbmRpZiAvKiBfU0NTSV9TQ1NJX1RDUV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL3NvdW5kL3BjbS5oIGIvaW5jbHVkZS9zb3VuZC9wY20uaAppbmRleCA2MGQ0MGIzLi5hZmFmM2U4IDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3BjbS5oCisrKyBiL2luY2x1ZGUvc291bmQvcGNtLmgKQEAgLTM0Nyw2ICszNDcsNyBAQAogCWludCBudW1iZXI7CiAJY2hhciBuYW1lWzMyXTsJCQkvKiBzdWJzdHJlYW0gbmFtZSAqLwogCWludCBzdHJlYW07CQkJLyogc3RyZWFtIChkaXJlY3Rpb24pICovCisJY2hhciBsYXRlbmN5X2lkWzIwXTsJCS8qIGxhdGVuY3kgaWRlbnRpZmllciAqLwogCXNpemVfdCBidWZmZXJfYnl0ZXNfbWF4OwkvKiBsaW1pdCByaW5nIGJ1ZmZlciBzaXplICovCiAJc3RydWN0IHNuZF9kbWFfYnVmZmVyIGRtYV9idWZmZXI7CiAJdW5zaWduZWQgaW50IGRtYV9idWZfaWQ7CmRpZmYgLS1naXQgYS9pbml0L0tjb25maWcgYi9pbml0L0tjb25maWcKaW5kZXggOWE3NjU2Zi4uZjdhMDRkMCAxMDA2NDQKLS0tIGEvaW5pdC9LY29uZmlnCisrKyBiL2luaXQvS2NvbmZpZwpAQCAtOTIsNyArOTIsNyBAQAogCiBjb25maWcgU1dBUAogCWJvb2wgIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKSIKLQlkZXBlbmRzIG9uIE1NVQorCWRlcGVuZHMgb24gTU1VICYmIEJMT0NLCiAJZGVmYXVsdCB5CiAJaGVscAogCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnQKQEAgLTIwMiw3ICsyMDIsNyBAQAogCSAgZW5zdXJlIHRoYXQgSU5PVElGWSBpcyBjb25maWd1cmVkLgogCiBjb25maWcgSUtDT05GSUcKLQlib29sICJLZXJuZWwgLmNvbmZpZyBzdXBwb3J0IgorCXRyaXN0YXRlICJLZXJuZWwgLmNvbmZpZyBzdXBwb3J0IgogCS0tLWhlbHAtLS0KIAkgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIGNvbXBsZXRlIExpbnV4IGtlcm5lbCAiLmNvbmZpZyIgZmlsZQogCSAgY29udGVudHMgdG8gYmUgc2F2ZWQgaW4gdGhlIGtlcm5lbC4gSXQgcHJvdmlkZXMgZG9jdW1lbnRhdGlvbgpAQCAtMjU3LDYgKzI1NywxOCBAQAogCiAJICBJZiB1bnN1cmUsIHNheSBOLgogCitjb25maWcgVEFTS19YQUNDVAorCWJvb2wgIkVuYWJsZSBleHRlbmRlZCBhY2NvdW50aW5nIG92ZXIgdGFza3N0YXRzIChFWFBFUklNRU5UQUwpIgorCWRlcGVuZHMgb24gVEFTS1NUQVRTCisJaGVscAorCSAgQ29sbGVjdCBleHRlbmRlZCB0YXNrIGFjY291bnRpbmcgZGF0YSBhbmQgc2VuZCB0aGUgZGF0YQorCSAgdG8gdXNlcmxhbmQgZm9yIHByb2Nlc3Npbmcgb3ZlciB0aGUgdGFza3N0YXRzIGludGVyZmFjZS4KKworCSAgU2F5IE4gaWYgdW5zdXJlLgorCitjb25maWcgU1lTQ1RMCisJYm9vbAorCiBtZW51Y29uZmlnIEVNQkVEREVECiAJYm9vbCAiQ29uZmlndXJlIHN0YW5kYXJkIGtlcm5lbCBmZWF0dXJlcyAoZm9yIHNtYWxsIHN5c3RlbXMpIgogCWhlbHAKQEAgLTI3MiwyMiArMjg0LDIyIEBACiAJaGVscAogCSAgVGhpcyBlbmFibGVzIHRoZSBsZWdhY3kgMTYtYml0IFVJRCBzeXNjYWxsIHdyYXBwZXJzLgogCi1jb25maWcgU1lTQ1RMCi0JYm9vbCAiU3lzY3RsIHN1cHBvcnQiIGlmIEVNQkVEREVECi0JZGVmYXVsdCB5Citjb25maWcgU1lTQ1RMX1NZU0NBTEwKKwlib29sICJTeXNjdGwgc3lzY2FsbCBzdXBwb3J0IiBpZiBFTUJFRERFRAorCWRlZmF1bHQgbgorCXNlbGVjdCBTWVNDVEwKIAktLS1oZWxwLS0tCi0JICBUaGUgc3lzY3RsIGludGVyZmFjZSBwcm92aWRlcyBhIG1lYW5zIG9mIGR5bmFtaWNhbGx5IGNoYW5naW5nCi0JICBjZXJ0YWluIGtlcm5lbCBwYXJhbWV0ZXJzIGFuZCB2YXJpYWJsZXMgb24gdGhlIGZseSB3aXRob3V0IHJlcXVpcmluZwotCSAgYSByZWNvbXBpbGUgb2YgdGhlIGtlcm5lbCBvciByZWJvb3Qgb2YgdGhlIHN5c3RlbS4gIFRoZSBwcmltYXJ5Ci0JICBpbnRlcmZhY2UgY29uc2lzdHMgb2YgYSBzeXN0ZW0gY2FsbCwgYnV0IGlmIHlvdSBzYXkgWSB0byAiL3Byb2MKLQkgIGZpbGUgc3lzdGVtIHN1cHBvcnQiLCBhIHRyZWUgb2YgbW9kaWZpYWJsZSBzeXNjdGwgZW50cmllcyB3aWxsIGJlCi0JICBnZW5lcmF0ZWQgYmVuZWF0aCB0aGUgL3Byb2Mvc3lzIGRpcmVjdG9yeS4gVGhleSBhcmUgZXhwbGFpbmVkIGluIHRoZQotCSAgZmlsZXMgaW4gPGZpbGU6RG9jdW1lbnRhdGlvbi9zeXNjdGwvPi4gIE5vdGUgdGhhdCBlbmFibGluZyB0aGlzCi0JICBvcHRpb24gd2lsbCBlbmxhcmdlIHRoZSBrZXJuZWwgYnkgYXQgbGVhc3QgOCBLQi4KKwkgIEVuYWJsZSB0aGUgZGVwcmVjYXRlZCBzeXNjdGwgc3lzdGVtIGNhbGwuICBzeXNfc3lzY3RsIHVzZXMKKwkgIGJpbmFyeSBwYXRocyB0aGF0IGhhdmUgYmVlbiBmb3VuZCB0byBiZSBhIG1ham9yIHBhaW4gdG8gbWFpbnRhaW4KKwkgIGFuZCB1c2UuICBUaGUgaW50ZXJmYWNlIGluIC9wcm9jL3N5cyBpcyBub3cgdGhlIHByaW1hcnkgYW5kIHdoYXQKKwkgIGV2ZXJ5b25lIHVzZXMuCiAKLQkgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3MKLQkgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5Ci0JICBsaW1pdGVkIGluIG1lbW9yeS4KKwkgIE5vdGhpbmcgaGFzIGJlZW4gdXNpbmcgdGhlIGJpbmFyeSBzeXNjdGwgaW50ZXJmYWNlIGZvciBzb21lCisJICB0aW1lIG5vdyBzbyBub3RoaW5nIHNob3VsZCBicmVhayBpZiB5b3UgZGlzYWJsZSBzeXNjdGwgc3lzY2FsbAorCSAgc3VwcG9ydCwgYW5kIHlvdXIga2VybmVsIHdpbGwgZ2V0IG1hcmdpbmFsbHkgc21hbGxlci4KKworCSAgVW5sZXNzIHlvdSBoYXZlIGFuIGFwcGxpY2F0aW9uIHRoYXQgdXNlcyB0aGUgc3lzX3N5c2N0bCBpbnRlcmZhY2UKKyAJICB5b3Ugc2hvdWxkIHByb2JhYmx5IHNheSBOIGhlcmUuCiAKIGNvbmZpZyBLQUxMU1lNUwogCSBib29sICJMb2FkIGFsbCBzeW1ib2xzIGZvciBkZWJ1Z2dpbmcva2tzeW1vb3BzIiBpZiBFTUJFRERFRApkaWZmIC0tZ2l0IGEvaW5pdC9kb19tb3VudHMuYyBiL2luaXQvZG9fbW91bnRzLmMKaW5kZXggYjI5MGFhZC4uZGMxZWMwOCAxMDA2NDQKLS0tIGEvaW5pdC9kb19tb3VudHMuYworKysgYi9pbml0L2RvX21vdW50cy5jCkBAIC0yODUsNyArMjg1LDExIEBACiB7CiAJY2hhciAqZnNfbmFtZXMgPSBfX2dldG5hbWUoKTsKIAljaGFyICpwOworI2lmZGVmIENPTkZJR19CTE9DSwogCWNoYXIgYltCREVWTkFNRV9TSVpFXTsKKyNlbHNlCisJY29uc3QgY2hhciAqYiA9IG5hbWU7CisjZW5kaWYKIAogCWdldF9mc19uYW1lcyhmc19uYW1lcyk7CiByZXRyeToKQEAgLTMwNCw3ICszMDgsOSBAQAogCQkgKiBBbGxvdyB0aGUgdXNlciB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGZhaWxlZCBzeXNfb3BlbgogCQkgKiBhbmQgYmFkIHN1cGVyYmxvY2sgb24gcm9vdCBkZXZpY2UuCiAJCSAqLworI2lmZGVmIENPTkZJR19CTE9DSwogCQlfX2JkZXZuYW1lKFJPT1RfREVWLCBiKTsKKyNlbmRpZgogCQlwcmludGsoIlZGUzogQ2Fubm90IG9wZW4gcm9vdCBkZXZpY2UgXCIlc1wiIG9yICVzXG4iLAogCQkJCXJvb3RfZGV2aWNlX25hbWUsIGIpOwogCQlwcmludGsoIlBsZWFzZSBhcHBlbmQgYSBjb3JyZWN0IFwicm9vdD1cIiBib290IG9wdGlvblxuIik7CkBAIC0zMTYsNyArMzIyLDEwIEBACiAJZm9yIChwID0gZnNfbmFtZXM7ICpwOyBwICs9IHN0cmxlbihwKSsxKQogCQlwcmludGsoIiAlcyIsIHApOwogCXByaW50aygiXG4iKTsKLQlwYW5pYygiVkZTOiBVbmFibGUgdG8gbW91bnQgcm9vdCBmcyBvbiAlcyIsIF9fYmRldm5hbWUoUk9PVF9ERVYsIGIpKTsKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKwlfX2JkZXZuYW1lKFJPT1RfREVWLCBiKTsKKyNlbmRpZgorCXBhbmljKCJWRlM6IFVuYWJsZSB0byBtb3VudCByb290IGZzIG9uICVzIiwgYik7CiBvdXQ6CiAJcHV0bmFtZShmc19uYW1lcyk7CiB9CkBAIC0zODcsOCArMzk2LDEwIEBACiAJCQljaGFuZ2VfZmxvcHB5KCJyb290IGZsb3BweSIpOwogCX0KICNlbmRpZgorI2lmZGVmIENPTkZJR19CTE9DSwogCWNyZWF0ZV9kZXYoIi9kZXYvcm9vdCIsIFJPT1RfREVWKTsKIAltb3VudF9ibG9ja19yb290KCIvZGV2L3Jvb3QiLCByb290X21vdW50ZmxhZ3MpOworI2VuZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9pbml0L21haW4uYyBiL2luaXQvbWFpbi5jCmluZGV4IDkxM2U0OGQuLjA3NjZlNjkgMTAwNjQ0Ci0tLSBhL2luaXQvbWFpbi5jCisrKyBiL2luaXQvbWFpbi5jCkBAIC0xMjgsNiArMTI4LDE4IEBACiBzdGF0aWMgdW5zaWduZWQgaW50IG1heF9jcHVzID0gTlJfQ1BVUzsKIAogLyoKKyAqIElmIHNldCwgdGhpcyBpcyBhbiBpbmRpY2F0aW9uIHRvIHRoZSBkcml2ZXJzIHRoYXQgcmVzZXQgdGhlIHVuZGVybHlpbmcKKyAqIGRldmljZSBiZWZvcmUgZ29pbmcgYWhlYWQgd2l0aCB0aGUgaW5pdGlhbGl6YXRpb24gb3RoZXJ3aXNlIGRyaXZlciBtaWdodAorICogcmVseSBvbiB0aGUgQklPUyBhbmQgc2tpcCB0aGUgcmVzZXQgb3BlcmF0aW9uLgorICoKKyAqIFRoaXMgaXMgdXNlZnVsIGlmIGtlcm5lbCBpcyBib290aW5nIGluIGFuIHVucmVsaWFibGUgZW52aXJvbm1lbnQuCisgKiBGb3IgZXguIGtkdW1wIHNpdHVhaXRvbiB3aGVyZSBwcmV2aW91cyBrZXJuZWwgaGFzIGNyYXNoZWQsIEJJT1MgaGFzIGJlZW4KKyAqIHNraXBwZWQgYW5kIGRldmljZXMgd2lsbCBiZSBpbiB1bmtub3duIHN0YXRlLgorICovCit1bnNpZ25lZCBpbnQgcmVzZXRfZGV2aWNlczsKK0VYUE9SVF9TWU1CT0wocmVzZXRfZGV2aWNlcyk7CisKKy8qCiAgKiBTZXR1cCByb3V0aW5lIGZvciBjb250cm9sbGluZyBTTVAgYWN0aXZhdGlvbgogICoKICAqIENvbW1hbmQtbGluZSBvcHRpb24gb2YgIm5vc21wIiBvciAibWF4Y3B1cz0wIiB3aWxsIGRpc2FibGUgU01QCkBAIC0xNTMsNiArMTY1LDE0IEBACiAKIF9fc2V0dXAoIm1heGNwdXM9IiwgbWF4Y3B1cyk7CiAKK3N0YXRpYyBpbnQgX19pbml0IHNldF9yZXNldF9kZXZpY2VzKGNoYXIgKnN0cikKK3sKKwlyZXNldF9kZXZpY2VzID0gMTsKKwlyZXR1cm4gMTsKK30KKworX19zZXR1cCgicmVzZXRfZGV2aWNlcyIsIHNldF9yZXNldF9kZXZpY2VzKTsKKwogc3RhdGljIGNoYXIgKiBhcmd2X2luaXRbTUFYX0lOSVRfQVJHUysyXSA9IHsgImluaXQiLCBOVUxMLCB9OwogY2hhciAqIGVudnBfaW5pdFtNQVhfSU5JVF9FTlZTKzJdID0geyAiSE9NRT0vIiwgIlRFUk09bGludXgiLCBOVUxMLCB9Owogc3RhdGljIGNvbnN0IGNoYXIgKnBhbmljX2xhdGVyLCAqcGFuaWNfcGFyYW07CmRpZmYgLS1naXQgYS9pcGMvbXF1ZXVlLmMgYi9pcGMvbXF1ZXVlLmMKaW5kZXggMDJlNmY2Ny4uZDc1ZDBiYSAxMDA2NDQKLS0tIGEvaXBjL21xdWV1ZS5jCisrKyBiL2lwYy9tcXVldWUuYwpAQCAtMTE1LDcgKzExNSw2IEBACiAJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5mc3VpZDsKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfY3RpbWUgPSBpbm9kZS0+aV9hdGltZSA9CiAJCQkJQ1VSUkVOVF9USU1FOwpAQCAtMTY5LDcgKzE2OCw3IEBACiAJCQkvKiBhbGwgaXMgb2sgKi8KIAkJCWluZm8tPnVzZXIgPSBnZXRfdWlkKHUpOwogCQl9IGVsc2UgaWYgKFNfSVNESVIobW9kZSkpIHsKLQkJCWlub2RlLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsoaW5vZGUpOwogCQkJLyogU29tZSB0aGluZ3MgbWlzYmVoYXZlIGlmIHNpemUgPT0gMCBvbiBhIGRpcmVjdG9yeSAqLwogCQkJaW5vZGUtPmlfc2l6ZSA9IDIgKiBESVJFTlRfU0laRTsKIAkJCWlub2RlLT5pX29wID0gJm1xdWV1ZV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTMwOCw3ICszMDcsNyBAQAogCiAJZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gZGlyLT5pX2F0aW1lID0gQ1VSUkVOVF9USU1FOwogCWRpci0+aV9zaXplIC09IERJUkVOVF9TSVpFOwotICAJaW5vZGUtPmlfbmxpbmstLTsKKyAgCWRyb3BfbmxpbmsoaW5vZGUpOwogICAJZHB1dChkZW50cnkpOwogICAJcmV0dXJuIDA7CiB9CkBAIC0xMjc1LDEwICsxMjc0LDcgQEAKIG91dF9zeXNjdGw6CiAJaWYgKG1xX3N5c2N0bF90YWJsZSkKIAkJdW5yZWdpc3Rlcl9zeXNjdGxfdGFibGUobXFfc3lzY3RsX3RhYmxlKTsKLQlpZiAoa21lbV9jYWNoZV9kZXN0cm95KG1xdWV1ZV9pbm9kZV9jYWNoZXApKSB7Ci0JCXByaW50ayhLRVJOX0lORk8KLQkJCSJtcXVldWVfaW5vZGVfY2FjaGU6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKLQl9CisJa21lbV9jYWNoZV9kZXN0cm95KG1xdWV1ZV9pbm9kZV9jYWNoZXApOwogCXJldHVybiBlcnJvcjsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL01ha2VmaWxlIGIva2VybmVsL01ha2VmaWxlCmluZGV4IGQ2MmVjNjYuLmFhY2FhZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9NYWtlZmlsZQorKysgYi9rZXJuZWwvTWFrZWZpbGUKQEAgLTgsNyArOCw3IEBACiAJICAgIHNpZ25hbC5vIHN5cy5vIGttb2QubyB3b3JrcXVldWUubyBwaWQubyBcCiAJICAgIHJjdXBkYXRlLm8gZXh0YWJsZS5vIHBhcmFtcy5vIHBvc2l4LXRpbWVycy5vIFwKIAkgICAga3RocmVhZC5vIHdhaXQubyBrZmlmby5vIHN5c19uaS5vIHBvc2l4LWNwdS10aW1lcnMubyBtdXRleC5vIFwKLQkgICAgaHJ0aW1lci5vIHJ3c2VtLm8KKwkgICAgaHJ0aW1lci5vIHJ3c2VtLm8gbGF0ZW5jeS5vCiAKIG9iai0kKENPTkZJR19TVEFDS1RSQUNFKSArPSBzdGFja3RyYWNlLm8KIG9iai15ICs9IHRpbWUvCkBAIC00OSw3ICs0OSw3IEBACiBvYmotJChDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCkgKz0gcmN1dG9ydHVyZS5vCiBvYmotJChDT05GSUdfUkVMQVkpICs9IHJlbGF5Lm8KIG9iai0kKENPTkZJR19UQVNLX0RFTEFZX0FDQ1QpICs9IGRlbGF5YWNjdC5vCi1vYmotJChDT05GSUdfVEFTS1NUQVRTKSArPSB0YXNrc3RhdHMubworb2JqLSQoQ09ORklHX1RBU0tTVEFUUykgKz0gdGFza3N0YXRzLm8gdHNhY2N0Lm8KIAogaWZuZXEgKCQoQ09ORklHX1NDSEVEX05PX05PX09NSVRfRlJBTUVfUE9JTlRFUikseSkKICMgQWNjb3JkaW5nIHRvIEFsYW4gTW9kcmEgPGFsYW5AbGludXhjYXJlLmNvbS5hdT4sIHRoZSAtZm5vLW9taXQtZnJhbWUtcG9pbnRlciBpcwpkaWZmIC0tZ2l0IGEva2VybmVsL2FjY3QuYyBiL2tlcm5lbC9hY2N0LmMKaW5kZXggMmE3YzkzMy4uMGFhZDVjYSAxMDA2NDQKLS0tIGEva2VybmVsL2FjY3QuYworKysgYi9rZXJuZWwvYWNjdC5jCkBAIC00ODMsMTAgKzQ4MywxNCBAQAogCWFjLmFjX3BwaWQgPSBjdXJyZW50LT5wYXJlbnQtPnRnaWQ7CiAjZW5kaWYKIAotCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CS8qIHBpbiBjdXJyZW50LT5zaWduYWwgKi8KKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOworCS8qIEZJWE1FOiBXaG9ldmVyIGlzIHJlc3BvbnNpYmxlIGZvciBjdXJyZW50LT5zaWduYWwgbG9ja2luZyBuZWVkcworCSAgIHRvIHVzZSB0aGUgc2FtZSBsb2NraW5nIGFsbCBvdmVyIHRoZSBrZXJuZWwgYW5kIGRvY3VtZW50IGl0ICovCisJcmVhZF9sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlhYy5hY190dHkgPSBjdXJyZW50LT5zaWduYWwtPnR0eSA/CiAJCW9sZF9lbmNvZGVfZGV2KHR0eV9kZXZudW0oY3VycmVudC0+c2lnbmFsLT50dHkpKSA6IDA7CiAJcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmdHR5X211dGV4KTsKIAogCXNwaW5fbG9ja19pcnEoJmN1cnJlbnQtPnNpZ2hhbmQtPnNpZ2xvY2spOwogCWFjLmFjX3V0aW1lID0gZW5jb2RlX2NvbXBfdChqaWZmaWVzX3RvX0FIWihjcHV0aW1lX3RvX2ppZmZpZXMocGFjY3QtPmFjX3V0aW1lKSkpOwpAQCAtNTk4LDMzICs2MDIsMyBAQAogCWRvX2FjY3RfcHJvY2VzcyhmaWxlKTsKIAlmcHV0KGZpbGUpOwogfQotCi0KLS8qKgotICogYWNjdF91cGRhdGVfaW50ZWdyYWxzIC0gdXBkYXRlIG1tIGludGVncmFsIGZpZWxkcyBpbiB0YXNrX3N0cnVjdAotICogQHRzazogdGFza19zdHJ1Y3QgZm9yIGFjY291bnRpbmcKLSAqLwotdm9pZCBhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCi17Ci0JaWYgKGxpa2VseSh0c2stPm1tKSkgewotCQlsb25nIGRlbHRhID0KLQkJCWNwdXRpbWVfdG9famlmZmllcyh0c2stPnN0aW1lKSAtIHRzay0+YWNjdF9zdGltZXhwZDsKLQotCQlpZiAoZGVsdGEgPT0gMCkKLQkJCXJldHVybjsKLQkJdHNrLT5hY2N0X3N0aW1leHBkID0gdHNrLT5zdGltZTsKLQkJdHNrLT5hY2N0X3Jzc19tZW0xICs9IGRlbHRhICogZ2V0X21tX3Jzcyh0c2stPm1tKTsKLQkJdHNrLT5hY2N0X3ZtX21lbTEgKz0gZGVsdGEgKiB0c2stPm1tLT50b3RhbF92bTsKLQl9Ci19Ci0KLS8qKgotICogYWNjdF9jbGVhcl9pbnRlZ3JhbHMgLSBjbGVhciB0aGUgbW0gaW50ZWdyYWwgZmllbGRzIGluIHRhc2tfc3RydWN0Ci0gKiBAdHNrOiB0YXNrX3N0cnVjdCB3aG9zZSBhY2NvdW50aW5nIGZpZWxkcyBhcmUgY2xlYXJlZAotICovCi12b2lkIGFjY3RfY2xlYXJfaW50ZWdyYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQotewotCXRzay0+YWNjdF9zdGltZXhwZCA9IDA7Ci0JdHNrLT5hY2N0X3Jzc19tZW0xID0gMDsKLQl0c2stPmFjY3Rfdm1fbWVtMSA9IDA7Ci19CmRpZmYgLS1naXQgYS9rZXJuZWwvYXVkaXRzYy5jIGIva2VybmVsL2F1ZGl0c2MuYwppbmRleCBmYjgzYzVjLi4xMDUxNDc2IDEwMDY0NAotLS0gYS9rZXJuZWwvYXVkaXRzYy5jCisrKyBiL2tlcm5lbC9hdWRpdHNjLmMKQEAgLTgxNyw2ICs4MTcsOCBAQAogCQlhdWRpdF9sb2dfZm9ybWF0KGFiLCAiIHN1Y2Nlc3M9JXMgZXhpdD0lbGQiLCAKIAkJCQkgKGNvbnRleHQtPnJldHVybl92YWxpZD09QVVESVRTQ19TVUNDRVNTKT8ieWVzIjoibm8iLAogCQkJCSBjb250ZXh0LT5yZXR1cm5fY29kZSk7CisKKwltdXRleF9sb2NrKCZ0dHlfbXV0ZXgpOwogCWlmICh0c2stPnNpZ25hbCAmJiB0c2stPnNpZ25hbC0+dHR5ICYmIHRzay0+c2lnbmFsLT50dHktPm5hbWUpCiAJCXR0eSA9IHRzay0+c2lnbmFsLT50dHktPm5hbWU7CiAJZWxzZQpAQCAtODM4LDYgKzg0MCw5IEBACiAJCSAgY29udGV4dC0+Z2lkLAogCQkgIGNvbnRleHQtPmV1aWQsIGNvbnRleHQtPnN1aWQsIGNvbnRleHQtPmZzdWlkLAogCQkgIGNvbnRleHQtPmVnaWQsIGNvbnRleHQtPnNnaWQsIGNvbnRleHQtPmZzZ2lkLCB0dHkpOworCisJbXV0ZXhfdW5sb2NrKCZ0dHlfbXV0ZXgpOworCiAJYXVkaXRfbG9nX3Rhc2tfaW5mbyhhYiwgdHNrKTsKIAlpZiAoY29udGV4dC0+ZmlsdGVya2V5KSB7CiAJCWF1ZGl0X2xvZ19mb3JtYXQoYWIsICIga2V5PSIpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2NhcGFiaWxpdHkuYyBiL2tlcm5lbC9jYXBhYmlsaXR5LmMKaW5kZXggYzc2ODVhZC4uZWRiODQ1YSAxMDA2NDQKLS0tIGEva2VybmVsL2NhcGFiaWxpdHkuYworKysgYi9rZXJuZWwvY2FwYWJpbGl0eS5jCkBAIC0xMzMsNyArMTMzLDcgQEAKICAgICAgaW50IGZvdW5kID0gMDsKIAogICAgICBkb19lYWNoX3RocmVhZChnLCB0YXJnZXQpIHsKLSAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGN1cnJlbnQgfHwgdGFyZ2V0LT5waWQgPT0gMSkKKyAgICAgICAgICAgICBpZiAodGFyZ2V0ID09IGN1cnJlbnQgfHwgaXNfaW5pdCh0YXJnZXQpKQogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgZm91bmQgPSAxOwogCSAgICAgaWYgKHNlY3VyaXR5X2NhcHNldF9jaGVjayh0YXJnZXQsIGVmZmVjdGl2ZSwgaW5oZXJpdGFibGUsCmRpZmYgLS1naXQgYS9rZXJuZWwvY29tcGF0LmMgYi9rZXJuZWwvY29tcGF0LmMKaW5kZXggMTI2ZGVlOS4uYjRmYmQ4MyAxMDA2NDQKLS0tIGEva2VybmVsL2NvbXBhdC5jCisrKyBiL2tlcm5lbC9jb21wYXQuYwpAQCAtMjIsOSArMjIsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbWlncmF0ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4LXRpbWVycy5oPgogCiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAorZXh0ZXJuIHZvaWQgc2lnc2V0X2Zyb21fY29tcGF0KHNpZ3NldF90ICpzZXQsIGNvbXBhdF9zaWdzZXRfdCAqY29tcGF0KTsKKwogaW50IGdldF9jb21wYXRfdGltZXNwZWMoc3RydWN0IHRpbWVzcGVjICp0cywgY29uc3Qgc3RydWN0IGNvbXBhdF90aW1lc3BlYyBfX3VzZXIgKmN0cykKIHsKIAlyZXR1cm4gKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGN0cywgc2l6ZW9mKCpjdHMpKSB8fApAQCAtNjAxLDYgKzYwNCwzMCBAQAogCXJldHVybiBlcnI7CiB9IAogCitzdGF0aWMgbG9uZyBjb21wYXRfY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCit7CisJbG9uZyBlcnI7CisJbW1fc2VnbWVudF90IG9sZGZzOworCXN0cnVjdCB0aW1lc3BlYyB0dTsKKwlzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjICpybXRwID0gKHN0cnVjdCBjb21wYXRfdGltZXNwZWMgKikocmVzdGFydC0+YXJnMSk7CisKKwlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpICZ0dTsKKwlvbGRmcyA9IGdldF9mcygpOworCXNldF9mcyhLRVJORUxfRFMpOworCWVyciA9IGNsb2NrX25hbm9zbGVlcF9yZXN0YXJ0KHJlc3RhcnQpOworCXNldF9mcyhvbGRmcyk7CisKKwlpZiAoKGVyciA9PSAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLKSAmJiBybXRwICYmCisJICAgIHB1dF9jb21wYXRfdGltZXNwZWMoJnR1LCBybXRwKSkKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlpZiAoZXJyID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKKwkJcmVzdGFydC0+Zm4gPSBjb21wYXRfY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQ7CisJCXJlc3RhcnQtPmFyZzEgPSAodW5zaWduZWQgbG9uZykgcm10cDsKKwl9CisJcmV0dXJuIGVycjsKK30KKwogbG9uZyBjb21wYXRfc3lzX2Nsb2NrX25hbm9zbGVlcChjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKIAkJCSAgICBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqcnF0cCwKIAkJCSAgICBzdHJ1Y3QgY29tcGF0X3RpbWVzcGVjIF9fdXNlciAqcm10cCkKQEAgLTYwOCw2ICs2MzUsNyBAQAogCWxvbmcgZXJyOwogCW1tX3NlZ21lbnRfdCBvbGRmczsKIAlzdHJ1Y3QgdGltZXNwZWMgaW4sIG91dDsgCisJc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQ7CiAKIAlpZiAoZ2V0X2NvbXBhdF90aW1lc3BlYygmaW4sIHJxdHApKSAKIAkJcmV0dXJuIC1FRkFVTFQ7CkBAIC02MTgsOSArNjQ2LDE2IEBACiAJCQkJICAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmaW4sCiAJCQkJICAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSAmb3V0KTsKIAlzZXRfZnMob2xkZnMpOworCiAJaWYgKChlcnIgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgJiYgcm10cCAmJgogCSAgICBwdXRfY29tcGF0X3RpbWVzcGVjKCZvdXQsIHJtdHApKQogCQlyZXR1cm4gLUVGQVVMVDsKKworCWlmIChlcnIgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgeworCQlyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKKwkJcmVzdGFydC0+Zm4gPSBjb21wYXRfY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQ7CisJCXJlc3RhcnQtPmFyZzEgPSAodW5zaWduZWQgbG9uZykgcm10cDsKKwl9CiAJcmV0dXJuIGVycjsJCiB9IAogCmRpZmYgLS1naXQgYS9rZXJuZWwvY3B1c2V0LmMgYi9rZXJuZWwvY3B1c2V0LmMKaW5kZXggY2ZmNDE1MS4uOWQ4NTBhZSAxMDA2NDQKLS0tIGEva2VybmVsL2NwdXNldC5jCisrKyBiL2tlcm5lbC9jcHVzZXQuYwpAQCAtMjQwLDcgKzI0MCw3IEBACiAgKiBBIGNwdXNldCBjYW4gb25seSBiZSBkZWxldGVkIGlmIGJvdGggaXRzICdjb3VudCcgb2YgdXNpbmcgdGFza3MKICAqIGlzIHplcm8sIGFuZCBpdHMgbGlzdCBvZiAnY2hpbGRyZW4nIGNwdXNldHMgaXMgZW1wdHkuICBTaW5jZSBhbGwKICAqIHRhc2tzIGluIHRoZSBzeXN0ZW0gdXNlIF9zb21lXyBjcHVzZXQsIGFuZCBzaW5jZSB0aGVyZSBpcyBhbHdheXMgYXQKLSAqIGxlYXN0IG9uZSB0YXNrIGluIHRoZSBzeXN0ZW0gKGluaXQsIHBpZCA9PSAxKSwgdGhlcmVmb3JlLCB0b3BfY3B1c2V0CisgKiBsZWFzdCBvbmUgdGFzayBpbiB0aGUgc3lzdGVtIChpbml0KSwgdGhlcmVmb3JlLCB0b3BfY3B1c2V0CiAgKiBhbHdheXMgaGFzIGVpdGhlciBjaGlsZHJlbiBjcHVzZXRzIGFuZC9vciB1c2luZyB0YXNrcy4gIFNvIHdlIGRvbid0CiAgKiBuZWVkIGEgc3BlY2lhbCBoYWNrIHRvIGVuc3VyZSB0aGF0IHRvcF9jcHVzZXQgY2Fubm90IGJlIGRlbGV0ZWQuCiAgKgpAQCAtMjg5LDcgKzI4OSw2IEBACiAJCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCQlpbm9kZS0+aV91aWQgPSBjdXJyZW50LT5mc3VpZDsKIAkJaW5vZGUtPmlfZ2lkID0gY3VycmVudC0+ZnNnaWQ7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZjcHVzZXRfYmFja2luZ19kZXZfaW5mbzsKQEAgLTM3OCw3ICszNzcsNyBAQAogCQlpbm9kZS0+aV9vcCA9ICZzaW1wbGVfZGlyX2lub2RlX29wZXJhdGlvbnM7CiAJCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAJCS8qIGRpcmVjdG9yaWVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKGlub2RlKTsKIAl9IGVsc2UgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC05MTMsNiArOTEyLDEwIEBACiAJaW50IGZ1ZGdlOwogCWludCByZXR2YWw7CiAKKwkvKiB0b3BfY3B1c2V0Lm1lbXNfYWxsb3dlZCB0cmFja3Mgbm9kZV9vbmxpbmVfbWFwOyBpdCdzIHJlYWQtb25seSAqLworCWlmIChjcyA9PSAmdG9wX2NwdXNldCkKKwkJcmV0dXJuIC1FQUNDRVM7CisKIAl0cmlhbGNzID0gKmNzOwogCXJldHZhbCA9IG5vZGVsaXN0X3BhcnNlKGJ1ZiwgdHJpYWxjcy5tZW1zX2FsbG93ZWQpOwogCWlmIChyZXR2YWwgPCAwKQpAQCAtMTIyMiw3ICsxMjI1LDEyIEBACiAKIAl0YXNrX2xvY2sodHNrKTsKIAlvbGRjcyA9IHRzay0+Y3B1c2V0OwotCWlmICghb2xkY3MpIHsKKwkvKgorCSAqIEFmdGVyIGdldHRpbmcgJ29sZGNzJyBjcHVzZXQgcHRyLCBiZSBzdXJlIHN0aWxsIG5vdCBleGl0aW5nLgorCSAqIElmICdvbGRjcycgbWlnaHQgYmUgdGhlIHRvcF9jcHVzZXQgZHVlIHRvIHRoZV90b3BfY3B1c2V0X2hhY2sKKwkgKiB0aGVuIGZhaWwgdGhpcyBhdHRhY2hfdGFzaygpLCB0byBhdm9pZCBicmVha2luZyB0b3BfY3B1c2V0LmNvdW50LgorCSAqLworCWlmICh0c2stPmZsYWdzICYgUEZfRVhJVElORykgewogCQl0YXNrX3VubG9jayh0c2spOwogCQltdXRleF91bmxvY2soJmNhbGxiYWNrX211dGV4KTsKIAkJcHV0X3Rhc2tfc3RydWN0KHRzayk7CkBAIC0xNTU3LDcgKzE1NjUsNyBAQAogCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCiAJCS8qIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJaW5jX25saW5rKGlub2RlKTsKIAl9IGVsc2UgaWYgKFNfSVNSRUcobW9kZSkpIHsKIAkJaW5vZGUtPmlfc2l6ZSA9IDA7CiAJCWlub2RlLT5pX2ZvcCA9ICZjcHVzZXRfZmlsZV9vcGVyYXRpb25zOwpAQCAtMTU5MCw3ICsxNTk4LDcgQEAKIAllcnJvciA9IGNwdXNldF9jcmVhdGVfZmlsZShkZW50cnksIFNfSUZESVIgfCBtb2RlKTsKIAlpZiAoIWVycm9yKSB7CiAJCWRlbnRyeS0+ZF9mc2RhdGEgPSBjczsKLQkJcGFyZW50LT5kX2lub2RlLT5pX25saW5rKys7CisJCWluY19ubGluayhwYXJlbnQtPmRfaW5vZGUpOwogCQljcy0+ZGVudHJ5ID0gZGVudHJ5OwogCX0KIAlkcHV0KGRlbnRyeSk7CkBAIC0yMDI1LDcgKzIwMzMsNyBAQAogCX0KIAlyb290ID0gY3B1c2V0X21vdW50LT5tbnRfc2ItPnNfcm9vdDsKIAlyb290LT5kX2ZzZGF0YSA9ICZ0b3BfY3B1c2V0OwotCXJvb3QtPmRfaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsocm9vdC0+ZF9pbm9kZSk7CiAJdG9wX2NwdXNldC5kZW50cnkgPSByb290OwogCXJvb3QtPmRfaW5vZGUtPmlfb3AgPSAmY3B1c2V0X2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCW51bWJlcl9vZl9jcHVzZXRzID0gMTsKQEAgLTIwMzcsMzMgKzIwNDUsMTA0IEBACiAJcmV0dXJuIGVycjsKIH0KIAorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSB8fCBkZWZpbmVkKENPTkZJR19NRU1PUllfSE9UUExVRykKKy8qCisgKiBJZiBjb21tb25fY3B1X21lbV9ob3RwbHVnX3VucGx1ZygpLCBiZWxvdywgdW5wbHVncyBhbnkgQ1BVcworICogb3IgbWVtb3J5IG5vZGVzLCB3ZSBuZWVkIHRvIHdhbGsgb3ZlciB0aGUgY3B1c2V0IGhpZXJhcmNoeSwKKyAqIHJlbW92aW5nIHRoYXQgQ1BVIG9yIG5vZGUgZnJvbSBhbGwgY3B1c2V0cy4gIElmIHRoaXMgcmVtb3ZlcyB0aGUKKyAqIGxhc3QgQ1BVIG9yIG5vZGUgZnJvbSBhIGNwdXNldCwgdGhlbiB0aGUgZ3VhcmFudGVlX29ubGluZV9jcHVzKCkKKyAqIG9yIGd1YXJhbnRlZV9vbmxpbmVfbWVtcygpIGNvZGUgd2lsbCB1c2UgdGhhdCBlbXB0aWVkIGNwdXNldHMKKyAqIHBhcmVudCBvbmxpbmUgQ1BVcyBvciBub2Rlcy4gIENwdXNldHMgdGhhdCB3ZXJlIGFscmVhZHkgZW1wdHkgb2YKKyAqIENQVXMgb3Igbm9kZXMgYXJlIGxlZnQgZW1wdHkuCisgKgorICogVGhpcyByb3V0aW5lIGlzIGludGVudGlvbmFsbHkgaW5lZmZpY2llbnQgaW4gYSBjb3VwbGUgb2YgcmVnYXJkcy4KKyAqIEl0IHdpbGwgY2hlY2sgYWxsIGNwdXNldHMgaW4gYSBzdWJ0cmVlIGV2ZW4gaWYgdGhlIHRvcCBjcHVzZXQgb2YKKyAqIHRoZSBzdWJ0cmVlIGhhcyBubyBvZmZsaW5lIENQVXMgb3Igbm9kZXMuICBJdCBjaGVja3MgYm90aCBDUFVzIGFuZAorICogbm9kZXMsIGV2ZW4gdGhvdWdoIHRoZSBjYWxsZXIgY291bGQgaGF2ZSBiZWVuIGNvZGVkIHRvIGtub3cgdGhhdAorICogb25seSBvbmUgb2YgQ1BVcyBvciBub2RlcyBuZWVkZWQgdG8gYmUgY2hlY2tlZCBvbiBhIGdpdmVuIGNhbGwuCisgKiBUaGlzIHdhcyBkb25lIHRvIG1pbmltaXplIHRleHQgc2l6ZSByYXRoZXIgdGhhbiBjcHUgY3ljbGVzLgorICoKKyAqIENhbGwgd2l0aCBib3RoIG1hbmFnZV9tdXRleCBhbmQgY2FsbGJhY2tfbXV0ZXggaGVsZC4KKyAqCisgKiBSZWN1cnNpdmUsIG9uIGRlcHRoIG9mIGNwdXNldCBzdWJ0cmVlLgorICovCisKK3N0YXRpYyB2b2lkIGd1YXJhbnRlZV9vbmxpbmVfY3B1c19tZW1zX2luX3N1YnRyZWUoY29uc3Qgc3RydWN0IGNwdXNldCAqY3VyKQoreworCXN0cnVjdCBjcHVzZXQgKmM7CisKKwkvKiBFYWNoIG9mIG91ciBjaGlsZCBjcHVzZXRzIG1lbXMgbXVzdCBiZSBvbmxpbmUgKi8KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZjdXItPmNoaWxkcmVuLCBzaWJsaW5nKSB7CisJCWd1YXJhbnRlZV9vbmxpbmVfY3B1c19tZW1zX2luX3N1YnRyZWUoYyk7CisJCWlmICghY3B1c19lbXB0eShjLT5jcHVzX2FsbG93ZWQpKQorCQkJZ3VhcmFudGVlX29ubGluZV9jcHVzKGMsICZjLT5jcHVzX2FsbG93ZWQpOworCQlpZiAoIW5vZGVzX2VtcHR5KGMtPm1lbXNfYWxsb3dlZCkpCisJCQlndWFyYW50ZWVfb25saW5lX21lbXMoYywgJmMtPm1lbXNfYWxsb3dlZCk7CisJfQorfQorCisvKgorICogVGhlIGNwdXNfYWxsb3dlZCBhbmQgbWVtc19hbGxvd2VkIG5vZGVtYXNrcyBpbiB0aGUgdG9wX2NwdXNldCB0cmFjaworICogY3B1X29ubGluZV9tYXAgYW5kIG5vZGVfb25saW5lX21hcC4gIEZvcmNlIHRoZSB0b3AgY3B1c2V0IHRvIHRyYWNrCisgKiB3aGF0cyBvbmxpbmUgYWZ0ZXIgYW55IENQVSBvciBtZW1vcnkgbm9kZSBob3RwbHVnIG9yIHVucGx1ZyBldmVudC4KKyAqCisgKiBUbyBlbnN1cmUgdGhhdCB3ZSBkb24ndCByZW1vdmUgYSBDUFUgb3Igbm9kZSBmcm9tIHRoZSB0b3AgY3B1c2V0CisgKiB0aGF0IGlzIGN1cnJlbnRseSBpbiB1c2UgYnkgYSBjaGlsZCBjcHVzZXQgKHdoaWNoIHdvdWxkIHZpb2xhdGUKKyAqIHRoZSBydWxlIHRoYXQgY3B1c2V0cyBtdXN0IGJlIHN1YnNldHMgb2YgdGhlaXIgcGFyZW50KSwgd2UgZmlyc3QKKyAqIGNhbGwgdGhlIHJlY3Vyc2l2ZSByb3V0aW5lIGd1YXJhbnRlZV9vbmxpbmVfY3B1c19tZW1zX2luX3N1YnRyZWUoKS4KKyAqCisgKiBTaW5jZSB0aGVyZSBhcmUgdHdvIGNhbGxlcnMgb2YgdGhpcyByb3V0aW5lLCBvbmUgZm9yIENQVSBob3RwbHVnCisgKiBldmVudHMgYW5kIG9uZSBmb3IgbWVtb3J5IG5vZGUgaG90cGx1ZyBldmVudHMsIHdlIGNvdWxkIGhhdmUgY29kZWQKKyAqIHR3byBzZXBhcmF0ZSByb3V0aW5lcyBoZXJlLiAgV2UgY29kZSBpdCBhcyBhIHNpbmdsZSBjb21tb24gcm91dGluZQorICogaW4gb3JkZXIgdG8gbWluaW1pemUgdGV4dCBzaXplLgorICovCisKK3N0YXRpYyB2b2lkIGNvbW1vbl9jcHVfbWVtX2hvdHBsdWdfdW5wbHVnKHZvaWQpCit7CisJbXV0ZXhfbG9jaygmbWFuYWdlX211dGV4KTsKKwltdXRleF9sb2NrKCZjYWxsYmFja19tdXRleCk7CisKKwlndWFyYW50ZWVfb25saW5lX2NwdXNfbWVtc19pbl9zdWJ0cmVlKCZ0b3BfY3B1c2V0KTsKKwl0b3BfY3B1c2V0LmNwdXNfYWxsb3dlZCA9IGNwdV9vbmxpbmVfbWFwOworCXRvcF9jcHVzZXQubWVtc19hbGxvd2VkID0gbm9kZV9vbmxpbmVfbWFwOworCisJbXV0ZXhfdW5sb2NrKCZjYWxsYmFja19tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZtYW5hZ2VfbXV0ZXgpOworfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfSE9UUExVR19DUFUKIC8qCiAgKiBUaGUgdG9wX2NwdXNldCB0cmFja3Mgd2hhdCBDUFVzIGFuZCBNZW1vcnkgTm9kZXMgYXJlIG9ubGluZSwKICAqIHBlcmlvZC4gIFRoaXMgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIG1ha2UgY3B1c2V0cyB0cmFuc3BhcmVudAogICogKG9mIG5vIGFmZmVjdCkgb24gc3lzdGVtcyB0aGF0IGFyZSBhY3RpdmVseSB1c2luZyBDUFUgaG90cGx1ZwogICogYnV0IG1ha2luZyBubyBhY3RpdmUgdXNlIG9mIGNwdXNldHMuCiAgKgotICogVGhpcyBoYW5kbGVzIENQVSBob3RwbHVnIChjcHVocCkgZXZlbnRzLiAgSWYgc29tZWRheSBNZW1vcnkKLSAqIE5vZGVzIGNhbiBiZSBob3RwbHVnZ2VkIChkeW5hbWljYWxseSBjaGFuZ2luZyBub2RlX29ubGluZV9tYXApCi0gKiB0aGVuIHdlIHNob3VsZCBoYW5kbGUgdGhhdCB0b28sIHBlcmhhcHMgaW4gYSBzaW1pbGFyIHdheS4KKyAqIFRoaXMgcm91dGluZSBlbnN1cmVzIHRoYXQgdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgdHJhY2tzCisgKiBjcHVfb25saW5lX21hcCBvbiBlYWNoIENQVSBob3RwbHVnIChjcHVocCkgZXZlbnQuCiAgKi8KIAotI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVQogc3RhdGljIGludCBjcHVzZXRfaGFuZGxlX2NwdWhwKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCiAJCQkJdW5zaWduZWQgbG9uZyBwaGFzZSwgdm9pZCAqY3B1KQogewotCW11dGV4X2xvY2soJm1hbmFnZV9tdXRleCk7Ci0JbXV0ZXhfbG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCi0JdG9wX2NwdXNldC5jcHVzX2FsbG93ZWQgPSBjcHVfb25saW5lX21hcDsKLQotCW11dGV4X3VubG9jaygmY2FsbGJhY2tfbXV0ZXgpOwotCW11dGV4X3VubG9jaygmbWFuYWdlX211dGV4KTsKLQorCWNvbW1vbl9jcHVfbWVtX2hvdHBsdWdfdW5wbHVnKCk7CiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVRworLyoKKyAqIEtlZXAgdG9wX2NwdXNldC5tZW1zX2FsbG93ZWQgdHJhY2tpbmcgbm9kZV9vbmxpbmVfbWFwLgorICogQ2FsbCB0aGlzIHJvdXRpbmUgYW55dGltZSBhZnRlciB5b3UgY2hhbmdlIG5vZGVfb25saW5lX21hcC4KKyAqIFNlZSBhbHNvIHRoZSBwcmV2aW91cyByb3V0aW5lIGNwdXNldF9oYW5kbGVfY3B1aHAoKS4KKyAqLworCit2b2lkIGNwdXNldF90cmFja19vbmxpbmVfbm9kZXMoKQoreworCWNvbW1vbl9jcHVfbWVtX2hvdHBsdWdfdW5wbHVnKCk7Cit9CisjZW5kaWYKKwogLyoqCiAgKiBjcHVzZXRfaW5pdF9zbXAgLSBpbml0aWFsaXplIGNwdXNfYWxsb3dlZAogICoKZGlmZiAtLWdpdCBhL2tlcm5lbC9leGl0LmMgYi9rZXJuZWwvZXhpdC5jCmluZGV4IGQ4OTE4ODMuLjNiNDdmMjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9leGl0LmMKKysrIGIva2VybmVsL2V4aXQuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlY3VyaXR5Lmg+CiAjaW5jbHVkZSA8bGludXgvY3B1Lmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KQEAgLTM4LDYgKzM5LDcgQEAKICNpbmNsdWRlIDxsaW51eC9waXBlX2ZzX2kuaD4KICNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPiAvKiBmb3IgYXVkaXRfZnJlZSgpICovCiAjaW5jbHVkZSA8bGludXgvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtkZXYuaD4KIAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8YXNtL3VuaXN0ZC5oPgpAQCAtMjE5LDcgKzIyMSw3IEBACiAJZG9fZWFjaF90YXNrX3BpZChwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKIAkJaWYgKHAgPT0gaWdub3JlZF90YXNrCiAJCQkJfHwgcC0+ZXhpdF9zdGF0ZQotCQkJCXx8IHAtPnJlYWxfcGFyZW50LT5waWQgPT0gMSkKKwkJCQl8fCBpc19pbml0KHAtPnJlYWxfcGFyZW50KSkKIAkJCWNvbnRpbnVlOwogCQlpZiAocHJvY2Vzc19ncm91cChwLT5yZWFsX3BhcmVudCkgIT0gcGdycAogCQkJICAgICYmIHAtPnJlYWxfcGFyZW50LT5zaWduYWwtPnNlc3Npb24gPT0gcC0+c2lnbmFsLT5zZXNzaW9uKSB7CkBAIC0yNDksMTcgKzI1MSw2IEBACiAJZG9fZWFjaF90YXNrX3BpZChwZ3JwLCBQSURUWVBFX1BHSUQsIHApIHsKIAkJaWYgKHAtPnN0YXRlICE9IFRBU0tfU1RPUFBFRCkKIAkJCWNvbnRpbnVlOwotCi0JCS8qIElmIHAgaXMgc3RvcHBlZCBieSBhIGRlYnVnZ2VyIG9uIGEgc2lnbmFsIHRoYXQgd29uJ3QKLQkJICAgc3RvcCBpdCwgdGhlbiBkb24ndCBjb3VudCBwIGFzIHN0b3BwZWQuICBUaGlzIGlzbid0Ci0JCSAgIHBlcmZlY3QgYnV0IGl0J3MgYSBnb29kIGFwcHJveGltYXRpb24uICAqLwotCQlpZiAodW5saWtlbHkgKHAtPnB0cmFjZSkKLQkJICAgICYmIHAtPmV4aXRfY29kZSAhPSBTSUdTVE9QCi0JCSAgICAmJiBwLT5leGl0X2NvZGUgIT0gU0lHVFNUUAotCQkgICAgJiYgcC0+ZXhpdF9jb2RlICE9IFNJR1RUT1UKLQkJICAgICYmIHAtPmV4aXRfY29kZSAhPSBTSUdUVElOKQotCQkJY29udGludWU7Ci0KIAkJcmV0dmFsID0gMTsKIAkJYnJlYWs7CiAJfSB3aGlsZV9lYWNoX3Rhc2tfcGlkKHBncnAsIFBJRFRZUEVfUEdJRCwgcCk7CkBAIC0yOTIsOSArMjgzLDcgQEAKIAkvKiBTZXQgdGhlIGV4aXQgc2lnbmFsIHRvIFNJR0NITEQgc28gd2Ugc2lnbmFsIGluaXQgb24gZXhpdCAqLwogCWN1cnJlbnQtPmV4aXRfc2lnbmFsID0gU0lHQ0hMRDsKIAotCWlmICgoY3VycmVudC0+cG9saWN5ID09IFNDSEVEX05PUk1BTCB8fAotCQkJY3VycmVudC0+cG9saWN5ID09IFNDSEVEX0JBVENIKQotCQkJCSYmICh0YXNrX25pY2UoY3VycmVudCkgPCAwKSkKKwlpZiAoIWhhc19ydF9wb2xpY3koY3VycmVudCkgJiYgKHRhc2tfbmljZShjdXJyZW50KSA8IDApKQogCQlzZXRfdXNlcl9uaWNlKGN1cnJlbnQsIDApOwogCS8qIGNwdXNfYWxsb3dlZD8gKi8KIAkvKiBydF9wcmlvcml0eT8gKi8KQEAgLTQ4Nyw2ICs0NzYsMTggQEAKIAogRVhQT1JUX1NZTUJPTChwdXRfZmlsZXNfc3RydWN0KTsKIAordm9pZCByZXNldF9maWxlc19zdHJ1Y3Qoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzKQoreworCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKm9sZDsKKworCW9sZCA9IHRzay0+ZmlsZXM7CisJdGFza19sb2NrKHRzayk7CisJdHNrLT5maWxlcyA9IGZpbGVzOworCXRhc2tfdW5sb2NrKHRzayk7CisJcHV0X2ZpbGVzX3N0cnVjdChvbGQpOworfQorRVhQT1JUX1NZTUJPTChyZXNldF9maWxlc19zdHJ1Y3QpOworCiBzdGF0aWMgaW5saW5lIHZvaWQgX19leGl0X2ZpbGVzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQogewogCXN0cnVjdCBmaWxlc19zdHJ1Y3QgKiBmaWxlcyA9IHRzay0+ZmlsZXM7CkBAIC05NTQsMTUgKzk1NSwxNSBAQAogCWlmICh0c2stPnNwbGljZV9waXBlKQogCQlfX2ZyZWVfcGlwZV9pbmZvKHRzay0+c3BsaWNlX3BpcGUpOwogCi0JLyogUEZfREVBRCBjYXVzZXMgZmluYWwgcHV0X3Rhc2tfc3RydWN0IGFmdGVyIHdlIHNjaGVkdWxlLiAqLwogCXByZWVtcHRfZGlzYWJsZSgpOwotCUJVR19PTih0c2stPmZsYWdzICYgUEZfREVBRCk7Ci0JdHNrLT5mbGFncyB8PSBQRl9ERUFEOworCS8qIGNhdXNlcyBmaW5hbCBwdXRfdGFza19zdHJ1Y3QgaW4gZmluaXNoX3Rhc2tfc3dpdGNoKCkuICovCisJdHNrLT5zdGF0ZSA9IFRBU0tfREVBRDsKIAogCXNjaGVkdWxlKCk7CiAJQlVHKCk7CiAJLyogQXZvaWQgIm5vcmV0dXJuIGZ1bmN0aW9uIGRvZXMgcmV0dXJuIi4gICovCi0JZm9yICg7OykgOworCWZvciAoOzspCisJCWNwdV9yZWxheCgpOwkvKiBGb3Igd2hlbiBCVUcgaXMgbnVsbCAqLwogfQogCiBFWFBPUlRfU1lNQk9MX0dQTChkb19leGl0KTsKQEAgLTk3MSw3ICs5NzIsNyBAQAogewogCWlmIChjb21wKQogCQljb21wbGV0ZShjb21wKTsKLQkKKwogCWRvX2V4aXQoY29kZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IGEwZGFkODQuLjg5ZjY2NjQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKKysrIGIva2VybmVsL2ZvcmsuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Byb2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9ybWFwLmg+CiAjaW5jbHVkZSA8bGludXgvYWNjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3RzYWNjdF9rZXJuLmg+CiAjaW5jbHVkZSA8bGludXgvY25fcHJvYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5YWNjdC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0c19rZXJuLmg+CkBAIC0xODMsNyArMTg0LDkgQEAKIAkvKiBPbmUgZm9yIHVzLCBvbmUgZm9yIHdob2V2ZXIgZG9lcyB0aGUgInJlbGVhc2VfdGFzaygpIiAodXN1YWxseSBwYXJlbnQpICovCiAJYXRvbWljX3NldCgmdHNrLT51c2FnZSwyKTsKIAlhdG9taWNfc2V0KCZ0c2stPmZzX2V4Y2wsIDApOworI2lmZGVmIENPTkZJR19CTEtfREVWX0lPX1RSQUNFCiAJdHNrLT5idHJhY2Vfc2VxID0gMDsKKyNlbmRpZgogCXRzay0+c3BsaWNlX3BpcGUgPSBOVUxMOwogCXJldHVybiB0c2s7CiB9CkBAIC0xMDYxLDcgKzEwNjQsMTEgQEAKICNlbmRpZgogI2lmZGVmIENPTkZJR19UUkFDRV9JUlFGTEFHUwogCXAtPmlycV9ldmVudHMgPSAwOworI2lmZGVmIF9fQVJDSF9XQU5UX0lOVEVSUlVQVFNfT05fQ1RYU1cKKwlwLT5oYXJkaXJxc19lbmFibGVkID0gMTsKKyNlbHNlCiAJcC0+aGFyZGlycXNfZW5hYmxlZCA9IDA7CisjZW5kaWYKIAlwLT5oYXJkaXJxX2VuYWJsZV9pcCA9IDA7CiAJcC0+aGFyZGlycV9lbmFibGVfZXZlbnQgPSAwOwogCXAtPmhhcmRpcnFfZGlzYWJsZV9pcCA9IF9USElTX0lQXzsKQEAgLTExNDQsNyArMTE1MSw2IEBACiAKIAkvKiBPdXIgcGFyZW50IGV4ZWN1dGlvbiBkb21haW4gYmVjb21lcyBjdXJyZW50IGRvbWFpbgogCSAgIFRoZXNlIG11c3QgbWF0Y2ggZm9yIHRocmVhZCBzaWduYWxsaW5nIHRvIGFwcGx5ICovCi0JICAgCiAJcC0+cGFyZW50X2V4ZWNfaWQgPSBwLT5zZWxmX2V4ZWNfaWQ7CiAKIAkvKiBvaywgbm93IHdlIHNob3VsZCBiZSBzZXQgdXAuLiAqLwpAQCAtMTE2Nyw2ICsxMTczLDkgQEAKIAkvKiBOZWVkIHRhc2tsaXN0IGxvY2sgZm9yIHBhcmVudCBldGMgaGFuZGxpbmchICovCiAJd3JpdGVfbG9ja19pcnEoJnRhc2tsaXN0X2xvY2spOwogCisJLyogZm9yIHN5c19pb3ByaW9fc2V0KElPUFJJT19XSE9fUEdSUCkgKi8KKwlwLT5pb3ByaW8gPSBjdXJyZW50LT5pb3ByaW87CisKIAkvKgogCSAqIFRoZSB0YXNrIGhhc24ndCBiZWVuIGF0dGFjaGVkIHlldCwgc28gaXRzIGNwdXNfYWxsb3dlZCBtYXNrIHdpbGwKIAkgKiBub3QgYmUgY2hhbmdlZCwgbm9yIHdpbGwgaXRzIGFzc2lnbmVkIENQVS4KQEAgLTEyMjYsMTEgKzEyMzUsNiBAQAogCQl9CiAJfQogCi0JLyoKLQkgKiBpbmhlcml0IGlvcHJpbwotCSAqLwotCXAtPmlvcHJpbyA9IGN1cnJlbnQtPmlvcHJpbzsKLQogCWlmIChsaWtlbHkocC0+cGlkKSkgewogCQlhZGRfcGFyZW50KHApOwogCQlpZiAodW5saWtlbHkocC0+cHRyYWNlICYgUFRfUFRSQUNFRCkpCmRpZmYgLS1naXQgYS9rZXJuZWwvZnV0ZXguYyBiL2tlcm5lbC9mdXRleC5jCmluZGV4IDlkMjYwZTguLjRiNjc3MGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mdXRleC5jCisrKyBiL2tlcm5lbC9mdXRleC5jCkBAIC0zODksNyArMzg5LDcgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKLQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX2xvY2soKTsKIAlwID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwogCWlmICghcCkKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtNDAzLDcgKzQwMyw3IEBACiAJfQogCWdldF90YXNrX3N0cnVjdChwKTsKIG91dF91bmxvY2s6Ci0JcmVhZF91bmxvY2soJnRhc2tsaXN0X2xvY2spOworCXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIHA7CiB9CkBAIC0xNjI0LDcgKzE2MjQsNyBAQAogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKIAkJcmV0ID0gLUVTUkNIOwotCQlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOworCQlyY3VfcmVhZF9sb2NrKCk7CiAJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CiAJCWlmICghcCkKIAkJCWdvdG8gZXJyX3VubG9jazsKQEAgLTE2MzMsNyArMTYzMyw3IEBACiAJCQkJIWNhcGFibGUoQ0FQX1NZU19QVFJBQ0UpKQogCQkJZ290byBlcnJfdW5sb2NrOwogCQloZWFkID0gcC0+cm9idXN0X2xpc3Q7Ci0JCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJfQogCiAJaWYgKHB1dF91c2VyKHNpemVvZigqaGVhZCksIGxlbl9wdHIpKQpAQCAtMTY0MSw3ICsxNjQxLDcgQEAKIAlyZXR1cm4gcHV0X3VzZXIoaGVhZCwgaGVhZF9wdHIpOwogCiBlcnJfdW5sb2NrOgotCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXQ7CiB9CmRpZmYgLS1naXQgYS9rZXJuZWwvaHJ0aW1lci5jIGIva2VybmVsL2hydGltZXIuYwppbmRleCAyMWMzOGE3Li5kMGJhMTkwIDEwMDY0NAotLS0gYS9rZXJuZWwvaHJ0aW1lci5jCisrKyBiL2tlcm5lbC9ocnRpbWVyLmMKQEAgLTY5Myw3ICs2OTMsNyBAQAogCXJldHVybiB0LT50YXNrID09IE5VTEw7CiB9CiAKLXN0YXRpYyBsb25nIF9fc2NoZWQgbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnQpCitsb25nIF9fc2NoZWQgaHJ0aW1lcl9uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydCkKIHsKIAlzdHJ1Y3QgaHJ0aW1lcl9zbGVlcGVyIHQ7CiAJc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqcm10cDsKQEAgLTcwMiwxMyArNzAyLDEzIEBACiAKIAlyZXN0YXJ0LT5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKIAotCWhydGltZXJfaW5pdCgmdC50aW1lciwgcmVzdGFydC0+YXJnMywgSFJUSU1FUl9BQlMpOwotCXQudGltZXIuZXhwaXJlcy50djY0ID0gKCh1NjQpcmVzdGFydC0+YXJnMSA8PCAzMikgfCAodTY0KSByZXN0YXJ0LT5hcmcwOworCWhydGltZXJfaW5pdCgmdC50aW1lciwgcmVzdGFydC0+YXJnMCwgSFJUSU1FUl9BQlMpOworCXQudGltZXIuZXhwaXJlcy50djY0ID0gKCh1NjQpcmVzdGFydC0+YXJnMyA8PCAzMikgfCAodTY0KSByZXN0YXJ0LT5hcmcyOwogCiAJaWYgKGRvX25hbm9zbGVlcCgmdCwgSFJUSU1FUl9BQlMpKQogCQlyZXR1cm4gMDsKIAotCXJtdHAgPSAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSByZXN0YXJ0LT5hcmcyOworCXJtdHAgPSAoc3RydWN0IHRpbWVzcGVjIF9fdXNlciAqKSByZXN0YXJ0LT5hcmcxOwogCWlmIChybXRwKSB7CiAJCXRpbWUgPSBrdGltZV9zdWIodC50aW1lci5leHBpcmVzLCB0LnRpbWVyLmJhc2UtPmdldF90aW1lKCkpOwogCQlpZiAodGltZS50djY0IDw9IDApCkBAIC03MTgsNyArNzE4LDcgQEAKIAkJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCXJlc3RhcnQtPmZuID0gbmFub3NsZWVwX3Jlc3RhcnQ7CisJcmVzdGFydC0+Zm4gPSBocnRpbWVyX25hbm9zbGVlcF9yZXN0YXJ0OwogCiAJLyogVGhlIG90aGVyIHZhbHVlcyBpbiByZXN0YXJ0IGFyZSBhbHJlYWR5IGZpbGxlZCBpbiAqLwogCXJldHVybiAtRVJFU1RBUlRfUkVTVEFSVEJMT0NLOwpAQCAtNzUxLDExICs3NTEsMTEgQEAKIAl9CiAKIAlyZXN0YXJ0ID0gJmN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cmVzdGFydF9ibG9jazsKLQlyZXN0YXJ0LT5mbiA9IG5hbm9zbGVlcF9yZXN0YXJ0OwotCXJlc3RhcnQtPmFyZzAgPSB0LnRpbWVyLmV4cGlyZXMudHY2NCAmIDB4RkZGRkZGRkY7Ci0JcmVzdGFydC0+YXJnMSA9IHQudGltZXIuZXhwaXJlcy50djY0ID4+IDMyOwotCXJlc3RhcnQtPmFyZzIgPSAodW5zaWduZWQgbG9uZykgcm10cDsKLQlyZXN0YXJ0LT5hcmczID0gKHVuc2lnbmVkIGxvbmcpIHQudGltZXIuYmFzZS0+aW5kZXg7CisJcmVzdGFydC0+Zm4gPSBocnRpbWVyX25hbm9zbGVlcF9yZXN0YXJ0OworCXJlc3RhcnQtPmFyZzAgPSAodW5zaWduZWQgbG9uZykgdC50aW1lci5iYXNlLT5pbmRleDsKKwlyZXN0YXJ0LT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpIHJtdHA7CisJcmVzdGFydC0+YXJnMiA9IHQudGltZXIuZXhwaXJlcy50djY0ICYgMHhGRkZGRkZGRjsKKwlyZXN0YXJ0LT5hcmczID0gdC50aW1lci5leHBpcmVzLnR2NjQgPj4gMzI7CiAKIAlyZXR1cm4gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvY2hpcC5jIGIva2VybmVsL2lycS9jaGlwLmMKaW5kZXggYWMxZjg1MC4uNzM2Y2IwYiAxMDA2NDQKLS0tIGEva2VybmVsL2lycS9jaGlwLmMKKysrIGIva2VybmVsL2lycS9jaGlwLmMKQEAgLTQwLDEwICs0MCw2IEBACiAJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAlpcnFfY2hpcF9zZXRfZGVmYXVsdHMoY2hpcCk7CiAJZGVzYy0+Y2hpcCA9IGNoaXA7Ci0JLyoKLQkgKiBGb3IgY29tcGF0aWJpbGl0eSBvbmx5OgotCSAqLwotCWRlc2MtPmNoaXAgPSBjaGlwOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwpAQCAtMTQ2LDcgKzE0Miw3IEBACiAJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX2Rlc2MgKyBpcnE7CiAKIAlpZiAoIShkZXNjLT5zdGF0dXMgJiBJUlFfREVMQVlFRF9ESVNBQkxFKSkKLQkJaXJxX2Rlc2NbaXJxXS5jaGlwLT5tYXNrKGlycSk7CisJCWRlc2MtPmNoaXAtPm1hc2soaXJxKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2tlcm5lbC9rZXhlYy5jIGIva2VybmVsL2tleGVjLmMKaW5kZXggNTAwODdlYy4uZmNkZDVkMiAxMDA2NDQKLS0tIGEva2VybmVsL2tleGVjLmMKKysrIGIva2VybmVsL2tleGVjLmMKQEAgLTQwLDcgKzQwLDcgQEAKIAogaW50IGtleGVjX3Nob3VsZF9jcmFzaChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiB7Ci0JaWYgKGluX2ludGVycnVwdCgpIHx8ICFwLT5waWQgfHwgcC0+cGlkID09IDEgfHwgcGFuaWNfb25fb29wcykKKwlpZiAoaW5faW50ZXJydXB0KCkgfHwgIXAtPnBpZCB8fCBpc19pbml0KHApIHx8IHBhbmljX29uX29vcHMpCiAJCXJldHVybiAxOwogCXJldHVybiAwOwogfQpAQCAtOTk1LDcgKzk5NSw4IEBACiAJaW1hZ2UgPSB4Y2hnKGRlc3RfaW1hZ2UsIGltYWdlKTsKIAogb3V0OgotCXhjaGcoJmtleGVjX2xvY2ssIDApOyAvKiBSZWxlYXNlIHRoZSBtdXRleCAqLworCWxvY2tlZCA9IHhjaGcoJmtleGVjX2xvY2ssIDApOyAvKiBSZWxlYXNlIHRoZSBtdXRleCAqLworCUJVR19PTighbG9ja2VkKTsKIAlraW1hZ2VfZnJlZShpbWFnZSk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTA2MSw3ICsxMDYyLDggQEAKIAkJCW1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oJmZpeGVkX3JlZ3MpOwogCQkJbWFjaGluZV9rZXhlYyhrZXhlY19jcmFzaF9pbWFnZSk7CiAJCX0KLQkJeGNoZygma2V4ZWNfbG9jaywgMCk7CisJCWxvY2tlZCA9IHhjaGcoJmtleGVjX2xvY2ssIDApOworCQlCVUdfT04oIWxvY2tlZCk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9rZXJuZWwva2ZpZm8uYyBiL2tlcm5lbC9rZmlmby5jCmluZGV4IDY0YWIwNDUuLjVkMWQ5MDczIDEwMDY0NAotLS0gYS9rZXJuZWwva2ZpZm8uYworKysgYi9rZXJuZWwva2ZpZm8uYwpAQCAtMTIyLDYgKzEyMiwxMyBAQAogCiAJbGVuID0gbWluKGxlbiwgZmlmby0+c2l6ZSAtIGZpZm8tPmluICsgZmlmby0+b3V0KTsKIAorCS8qCisJICogRW5zdXJlIHRoYXQgd2Ugc2FtcGxlIHRoZSBmaWZvLT5vdXQgaW5kZXggLWJlZm9yZS0gd2UKKwkgKiBzdGFydCBwdXR0aW5nIGJ5dGVzIGludG8gdGhlIGtmaWZvLgorCSAqLworCisJc21wX21iKCk7CisKIAkvKiBmaXJzdCBwdXQgdGhlIGRhdGEgc3RhcnRpbmcgZnJvbSBmaWZvLT5pbiB0byBidWZmZXIgZW5kICovCiAJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSAoZmlmby0+aW4gJiAoZmlmby0+c2l6ZSAtIDEpKSk7CiAJbWVtY3B5KGZpZm8tPmJ1ZmZlciArIChmaWZvLT5pbiAmIChmaWZvLT5zaXplIC0gMSkpLCBidWZmZXIsIGwpOwpAQCAtMTI5LDYgKzEzNiwxMyBAQAogCS8qIHRoZW4gcHV0IHRoZSByZXN0IChpZiBhbnkpIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJ1ZmZlciAqLwogCW1lbWNweShmaWZvLT5idWZmZXIsIGJ1ZmZlciArIGwsIGxlbiAtIGwpOwogCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB3ZSBhZGQgdGhlIGJ5dGVzIHRvIHRoZSBrZmlmbyAtYmVmb3JlLQorCSAqIHdlIHVwZGF0ZSB0aGUgZmlmby0+aW4gaW5kZXguCisJICovCisKKwlzbXBfd21iKCk7CisKIAlmaWZvLT5pbiArPSBsZW47CiAKIAlyZXR1cm4gbGVuOwpAQCAtMTU0LDYgKzE2OCwxMyBAQAogCiAJbGVuID0gbWluKGxlbiwgZmlmby0+aW4gLSBmaWZvLT5vdXQpOwogCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB3ZSBzYW1wbGUgdGhlIGZpZm8tPmluIGluZGV4IC1iZWZvcmUtIHdlCisJICogc3RhcnQgcmVtb3ZpbmcgYnl0ZXMgZnJvbSB0aGUga2ZpZm8uCisJICovCisKKwlzbXBfcm1iKCk7CisKIAkvKiBmaXJzdCBnZXQgdGhlIGRhdGEgZnJvbSBmaWZvLT5vdXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgYnVmZmVyICovCiAJbCA9IG1pbihsZW4sIGZpZm8tPnNpemUgLSAoZmlmby0+b3V0ICYgKGZpZm8tPnNpemUgLSAxKSkpOwogCW1lbWNweShidWZmZXIsIGZpZm8tPmJ1ZmZlciArIChmaWZvLT5vdXQgJiAoZmlmby0+c2l6ZSAtIDEpKSwgbCk7CkBAIC0xNjEsNiArMTgyLDEzIEBACiAJLyogdGhlbiBnZXQgdGhlIHJlc3QgKGlmIGFueSkgZnJvbSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIgKi8KIAltZW1jcHkoYnVmZmVyICsgbCwgZmlmby0+YnVmZmVyLCBsZW4gLSBsKTsKIAorCS8qCisJICogRW5zdXJlIHRoYXQgd2UgcmVtb3ZlIHRoZSBieXRlcyBmcm9tIHRoZSBrZmlmbyAtYmVmb3JlLQorCSAqIHdlIHVwZGF0ZSB0aGUgZmlmby0+b3V0IGluZGV4LgorCSAqLworCisJc21wX21iKCk7CisKIAlmaWZvLT5vdXQgKz0gbGVuOwogCiAJcmV0dXJuIGxlbjsKZGlmZiAtLWdpdCBhL2tlcm5lbC9rbW9kLmMgYi9rZXJuZWwva21vZC5jCmluZGV4IDVjNDcwYzUuLmY4MTIxYjkgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rbW9kLmMKKysrIGIva2VybmVsL2ttb2QuYwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAogZXh0ZXJuIGludCBtYXhfdGhyZWFkczsKQEAgLTEyMiw2ICsxMjMsNyBAQAogCXN0cnVjdCBrZXkgKnJpbmc7CiAJaW50IHdhaXQ7CiAJaW50IHJldHZhbDsKKwlzdHJ1Y3QgZmlsZSAqc3RkaW47CiB9OwogCiAvKgpAQCAtMTQ1LDEyICsxNDcsMjkgQEAKIAogCWtleV9wdXQob2xkX3Nlc3Npb24pOwogCisJLyogSW5zdGFsbCBpbnB1dCBwaXBlIHdoZW4gbmVlZGVkICovCisJaWYgKHN1Yl9pbmZvLT5zdGRpbikgeworCQlzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmID0gY3VycmVudC0+ZmlsZXM7CisJCXN0cnVjdCBmZHRhYmxlICpmZHQ7CisJCS8qIG5vIHJhY2VzIGJlY2F1c2UgZmlsZXMgc2hvdWxkIGJlIHByaXZhdGUgaGVyZSAqLworCQlzeXNfY2xvc2UoMCk7CisJCWZkX2luc3RhbGwoMCwgc3ViX2luZm8tPnN0ZGluKTsKKwkJc3Bpbl9sb2NrKCZmLT5maWxlX2xvY2spOworCQlmZHQgPSBmaWxlc19mZHRhYmxlKGYpOworCQlGRF9TRVQoMCwgZmR0LT5vcGVuX2Zkcyk7CisJCUZEX0NMUigwLCBmZHQtPmNsb3NlX29uX2V4ZWMpOworCQlzcGluX3VubG9jaygmZi0+ZmlsZV9sb2NrKTsKKworCQkvKiBhbmQgZGlzYWxsb3cgY29yZSBmaWxlcyB0b28gKi8KKwkJY3VycmVudC0+c2lnbmFsLT5ybGltW1JMSU1JVF9DT1JFXSA9IChzdHJ1Y3QgcmxpbWl0KXswLCAwfTsKKwl9CisKIAkvKiBXZSBjYW4gcnVuIGFueXdoZXJlLCB1bmxpa2Ugb3VyIHBhcmVudCBrZXZlbnRkKCkuICovCiAJc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBDUFVfTUFTS19BTEwpOwogCiAJcmV0dmFsID0gLUVQRVJNOwogCWlmIChjdXJyZW50LT5mcy0+cm9vdCkKLQkJcmV0dmFsID0gZXhlY3ZlKHN1Yl9pbmZvLT5wYXRoLCBzdWJfaW5mby0+YXJndixzdWJfaW5mby0+ZW52cCk7CisJCXJldHZhbCA9IGV4ZWN2ZShzdWJfaW5mby0+cGF0aCwgc3ViX2luZm8tPmFyZ3YsIHN1Yl9pbmZvLT5lbnZwKTsKIAogCS8qIEV4ZWMgZmFpbGVkPyAqLwogCXN1Yl9pbmZvLT5yZXR2YWwgPSByZXR2YWw7CkBAIC0xNzYsNiArMTk1LDggQEAKIAlpZiAocGlkIDwgMCkgewogCQlzdWJfaW5mby0+cmV0dmFsID0gcGlkOwogCX0gZWxzZSB7CisJCWludCByZXQ7CisKIAkJLyoKIAkJICogTm9ybWFsbHkgaXQgaXMgYm9ndXMgdG8gY2FsbCB3YWl0NCgpIGZyb20gaW4ta2VybmVsIGJlY2F1c2UKIAkJICogd2FpdDQoKSB3YW50cyB0byB3cml0ZSB0aGUgZXhpdCBjb2RlIHRvIGEgdXNlcnNwYWNlIGFkZHJlc3MuCkBAIC0xODUsNyArMjA2LDE1IEBACiAJCSAqCiAJCSAqIFRodXMgdGhlIF9fdXNlciBwb2ludGVyIGNhc3QgaXMgdmFsaWQgaGVyZS4KIAkJICovCi0JCXN5c193YWl0NChwaWQsIChpbnQgX191c2VyICopICZzdWJfaW5mby0+cmV0dmFsLCAwLCBOVUxMKTsKKwkJc3lzX3dhaXQ0KHBpZCwgKGludCBfX3VzZXIgKikmcmV0LCAwLCBOVUxMKTsKKworCQkvKgorCQkgKiBJZiByZXQgaXMgMCwgZWl0aGVyIF9fX19jYWxsX3VzZXJtb2RlaGVscGVyIGZhaWxlZCBhbmQgdGhlCisJCSAqIHJlYWwgZXJyb3IgY29kZSBpcyBhbHJlYWR5IGluIHN1Yl9pbmZvLT5yZXR2YWwgb3IKKwkJICogc3ViX2luZm8tPnJldHZhbCBpcyAwIGFueXdheSwgc28gZG9uJ3QgbWVzcyB3aXRoIGl0IHRoZW4uCisJCSAqLworCQlpZiAocmV0KQorCQkJc3ViX2luZm8tPnJldHZhbCA9IHJldDsKIAl9CiAKIAljb21wbGV0ZShzdWJfaW5mby0+Y29tcGxldGUpOwpAQCAtMjU4LDYgKzI4Nyw0NCBAQAogfQogRVhQT1JUX1NZTUJPTChjYWxsX3VzZXJtb2RlaGVscGVyX2tleXMpOwogCitpbnQgY2FsbF91c2VybW9kZWhlbHBlcl9waXBlKGNoYXIgKnBhdGgsIGNoYXIgKiphcmd2LCBjaGFyICoqZW52cCwKKwkJCSAgICAgc3RydWN0IGZpbGUgKipmaWxwKQoreworCURFQ0xBUkVfQ09NUExFVElPTihkb25lKTsKKwlzdHJ1Y3Qgc3VicHJvY2Vzc19pbmZvIHN1Yl9pbmZvID0geworCQkuY29tcGxldGUJPSAmZG9uZSwKKwkJLnBhdGgJCT0gcGF0aCwKKwkJLmFyZ3YJCT0gYXJndiwKKwkJLmVudnAJCT0gZW52cCwKKwkJLnJldHZhbAkJPSAwLAorCX07CisJc3RydWN0IGZpbGUgKmY7CisJREVDTEFSRV9XT1JLKHdvcmssIF9fY2FsbF91c2VybW9kZWhlbHBlciwgJnN1Yl9pbmZvKTsKKworCWlmICgha2hlbHBlcl93cSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCWlmIChwYXRoWzBdID09ICdcMCcpCisJCXJldHVybiAwOworCisJZiA9IGNyZWF0ZV93cml0ZV9waXBlKCk7CisJaWYgKCFmKQorCQlyZXR1cm4gLUVOT01FTTsKKwkqZmlscCA9IGY7CisKKwlmID0gY3JlYXRlX3JlYWRfcGlwZShmKTsKKwlpZiAoIWYpIHsKKwkJZnJlZV93cml0ZV9waXBlKCpmaWxwKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCXN1Yl9pbmZvLnN0ZGluID0gZjsKKworCXF1ZXVlX3dvcmsoa2hlbHBlcl93cSwgJndvcmspOworCXdhaXRfZm9yX2NvbXBsZXRpb24oJmRvbmUpOworCXJldHVybiBzdWJfaW5mby5yZXR2YWw7Cit9CitFWFBPUlRfU1lNQk9MKGNhbGxfdXNlcm1vZGVoZWxwZXJfcGlwZSk7CisKIHZvaWQgX19pbml0IHVzZXJtb2RlaGVscGVyX2luaXQodm9pZCkKIHsKIAlraGVscGVyX3dxID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoImtoZWxwZXIiKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9sYXRlbmN5LmMgYi9rZXJuZWwvbGF0ZW5jeS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI1OGYyNTUKLS0tIC9kZXYvbnVsbAorKysgYi9rZXJuZWwvbGF0ZW5jeS5jCkBAIC0wLDAgKzEsMjc5IEBACisvKgorICogbGF0ZW5jeS5jOiBFeHBsaWNpdCBzeXN0ZW0td2lkZSBsYXRlbmN5LWV4cGVjdGF0aW9uIGluZnJhc3RydWN0dXJlCisgKgorICogVGhlIHB1cnBvc2Ugb2YgdGhpcyBpbmZyYXN0cnVjdHVyZSBpcyB0byBhbGxvdyBkZXZpY2UgZHJpdmVycyB0byBzZXQKKyAqIGxhdGVuY3kgY29uc3RyYWludCB0aGV5IGhhdmUgYW5kIHRvIGNvbGxlY3QgYW5kIHN1bW1hcml6ZSB0aGVzZQorICogZXhwZWN0YXRpb25zIGdsb2JhbGx5LiBUaGUgY3VtbXVsYXRlZCByZXN1bHQgY2FuIHRoZW4gYmUgdXNlZCBieQorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc2ltaWxhciB1c2VycyB0byBtYWtlIGRlY2lzaW9ucyB0aGF0IGhhdmUKKyAqIHRyYWRvZmZzIHdpdGggYSBsYXRlbmN5IGNvbXBvbmVudC4KKyAqCisgKiBBbiBleGFtcGxlIHVzZXIgb2YgdGhpcyBhcmUgdGhlIHg4NiBDLXN0YXRlczsgZWFjaCBoaWdoZXIgQyBzdGF0ZSBzYXZlcworICogbW9yZSBwb3dlciwgYnV0IGhhcyBhIGhpZ2hlciBleGl0IGxhdGVuY3kuIEZvciB0aGUgaWRsZSBsb29wIHBvd2VyCisgKiBjb2RlIHRvIG1ha2UgYSBnb29kIGRlY2lzaW9uIHdoaWNoIEMtc3RhdGUgdG8gdXNlLCBpbmZvcm1hdGlvbiBhYm91dAorICogYWNjZXB0YWJsZSBsYXRlbmNpZXMgaXMgcmVxdWlyZWQuCisgKgorICogQW4gZXhhbXBsZSBhbm5vdW5jZXIgb2YgbGF0ZW5jeSBpcyBhbiBhdWRpbyBkcml2ZXIgdGhhdCBrbm93bnMgaXQKKyAqIHdpbGwgZ2V0IGFuIGludGVycnVwdCB3aGVuIHRoZSBoYXJkd2FyZSBoYXMgMjAwIHVzZWMgb2Ygc2FtcGxlcworICogbGVmdCBpbiB0aGUgRE1BIGJ1ZmZlcjsgaW4gdGhhdCBjYXNlIHRoZSBkcml2ZXIgY2FuIHNldCBhIGxhdGVuY3kKKyAqIGNvbnN0cmFpbnQgb2YsIHNheSwgMTUwIHVzZWMuCisgKgorICogTXVsdGlwbGUgZHJpdmVycyBjYW4gZWFjaCBhbm5vdW5jZSB0aGVpciBtYXhpbXVtIGFjY2VwdGVkIGxhdGVuY3ksCisgKiB0byBrZWVwIHRoZXNlIGFwcGFydCwgYSBzdHJpbmcgYmFzZWQgaWRlbnRpZmllciBpcyB1c2VkLgorICoKKyAqCisgKiAoQykgQ29weXJpZ2h0IDIwMDYgSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQXJqYW4gdmFuIGRlIFZlbiA8YXJqYW5AbGludXguaW50ZWwuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyCisgKiBvZiB0aGUgTGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbGF0ZW5jeS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9ub3RpZmllci5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IGxhdGVuY3lfaW5mbyB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCWludCB1c2VjczsKKwljaGFyICppZGVudGlmaWVyOworfTsKKworLyoKKyAqIGxvY2tpbmcgcnVsZTogYWxsIG1vZGlmaWNhdGlvbnMgdG8gY3VycmVudF9tYXhfbGF0ZW5jeSBhbmQKKyAqIGxhdGVuY3lfbGlzdCBuZWVkIHRvIGJlIGRvbmUgd2hpbGUgaG9sZGluZyB0aGUgbGF0ZW5jeV9sb2NrLgorICogbGF0ZW5jeV9sb2NrIG5lZWRzIHRvIGJlIHRha2VuIF9pcnFzYXZlLgorICovCitzdGF0aWMgYXRvbWljX3QgY3VycmVudF9tYXhfbGF0ZW5jeTsKK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0sobGF0ZW5jeV9sb2NrKTsKKworc3RhdGljIExJU1RfSEVBRChsYXRlbmN5X2xpc3QpOworc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQobGF0ZW5jeV9ub3RpZmllcik7CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIG1heGltdW0gbGF0ZW5jeSBhbGxvd2VkLCB3aGljaAorICogaGFwcGVucyB0byBiZSB0aGUgbWluaW11bSBvZiBhbGwgbWF4aW11bSBsYXRlbmNpZXMgb24gdGhlCisgKiBsaXN0LgorICovCitzdGF0aWMgaW50IF9fZmluZF9tYXhfbGF0ZW5jeSh2b2lkKQoreworCWludCBtaW4gPSBJTkZJTklURV9MQVRFTkNZOworCXN0cnVjdCBsYXRlbmN5X2luZm8gKmluZm87CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGluZm8sICZsYXRlbmN5X2xpc3QsIGxpc3QpIHsKKwkJaWYgKGluZm8tPnVzZWNzIDwgbWluKQorCQkJbWluID0gaW5mby0+dXNlY3M7CisJfQorCXJldHVybiBtaW47Cit9CisKKy8qKgorICogc2V0X2FjY2VwdGFibGVfbGF0ZW5jeSAtIHNldHMgdGhlIG1heGltdW0gbGF0ZW5jeSBhY2NlcHRhYmxlCisgKiBAaWRlbnRpZmllcjogc3RyaW5nIHRoYXQgaWRlbnRpZmllcyB0aGlzIGRyaXZlcgorICogQHVzZWNzOiBtYXhpbXVtIGFjY2VwdGFibGUgbGF0ZW5jeSBmb3IgdGhpcyBkcml2ZXIKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGluZm9ybXMgdGhlIGtlcm5lbCB0aGF0IHRoaXMgZGV2aWNlKGRyaXZlcikKKyAqIGNhbiBhY2NlcHQgYXQgbW9zdCB1c2VjcyBsYXRlbmN5LiBUaGlzIHNldHRpbmcgaXMgdXNlZCBmb3IKKyAqIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHNpbWlsYXIgdHJhZGVvZmZzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2xlZXBzIGFuZCBjYW4gb25seSBiZSBjYWxsZWQgZnJvbSBwcm9jZXNzCisgKiBjb250ZXh0LgorICogQ2FsbGluZyB0aGlzIGZ1bmN0aW9uIHdpdGggYW4gZXhpc3RpbmcgaWRlbnRpZmllciBpcyB2YWxpZAorICogYW5kIHdpbGwgY2F1c2UgdGhlIGV4aXN0aW5nIGxhdGVuY3kgc2V0dGluZyB0byBiZSBjaGFuZ2VkLgorICovCit2b2lkIHNldF9hY2NlcHRhYmxlX2xhdGVuY3koY2hhciAqaWRlbnRpZmllciwgaW50IHVzZWNzKQoreworCXN0cnVjdCBsYXRlbmN5X2luZm8gKmluZm8sICppdGVyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGZvdW5kX29sZCA9IDA7CisKKwlpbmZvID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxhdGVuY3lfaW5mbyksIEdGUF9LRVJORUwpOworCWlmICghaW5mbykKKwkJcmV0dXJuOworCWluZm8tPnVzZWNzID0gdXNlY3M7CisJaW5mby0+aWRlbnRpZmllciA9IGtzdHJkdXAoaWRlbnRpZmllciwgR0ZQX0tFUk5FTCk7CisJaWYgKCFpbmZvLT5pZGVudGlmaWVyKQorCQlnb3RvIGZyZWVfaW5mbzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsYXRlbmN5X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZsYXRlbmN5X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChpdGVyLT5pZGVudGlmaWVyLCBpZGVudGlmaWVyKT09MCkgeworCQkJZm91bmRfb2xkID0gMTsKKwkJCWl0ZXItPnVzZWNzID0gdXNlY3M7CisJCQlicmVhazsKKwkJfQorCX0KKwlpZiAoIWZvdW5kX29sZCkKKwkJbGlzdF9hZGQoJmluZm8tPmxpc3QsICZsYXRlbmN5X2xpc3QpOworCisJaWYgKHVzZWNzIDwgYXRvbWljX3JlYWQoJmN1cnJlbnRfbWF4X2xhdGVuY3kpKQorCQlhdG9taWNfc2V0KCZjdXJyZW50X21heF9sYXRlbmN5LCB1c2Vjcyk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXRlbmN5X2xvY2ssIGZsYWdzKTsKKworCWJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJmxhdGVuY3lfbm90aWZpZXIsCisJCWF0b21pY19yZWFkKCZjdXJyZW50X21heF9sYXRlbmN5KSwgTlVMTCk7CisKKwkvKgorCSAqIGlmIHdlIGluc2VydGVkIHRoZSBuZXcgb25lLCB3ZSdyZSBkb25lOyBvdGhlcndpc2UgdGhlcmUgd2FzCisJICogYW4gZXhpc3Rpbmcgb25lIHNvIHdlIG5lZWQgdG8gZnJlZSB0aGUgcmVkdW5kYW50IGRhdGEKKwkgKi8KKwlpZiAoIWZvdW5kX29sZCkKKwkJcmV0dXJuOworCisJa2ZyZWUoaW5mby0+aWRlbnRpZmllcik7CitmcmVlX2luZm86CisJa2ZyZWUoaW5mbyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzZXRfYWNjZXB0YWJsZV9sYXRlbmN5KTsKKworLyoqCisgKiBtb2RpZnlfYWNjZXB0YWJsZV9sYXRlbmN5IC0gY2hhbmdlcyB0aGUgbWF4aW11bSBsYXRlbmN5IGFjY2VwdGFibGUKKyAqIEBpZGVudGlmaWVyOiBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoaXMgZHJpdmVyCisgKiBAdXNlY3M6IG1heGltdW0gYWNjZXB0YWJsZSBsYXRlbmN5IGZvciB0aGlzIGRyaXZlcgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW5mb3JtcyB0aGUga2VybmVsIHRoYXQgdGhpcyBkZXZpY2UoZHJpdmVyKQorICogY2FuIGFjY2VwdCBhdCBtb3N0IHVzZWNzIGxhdGVuY3kuIFRoaXMgc2V0dGluZyBpcyB1c2VkIGZvcgorICogcG93ZXIgbWFuYWdlbWVudCBhbmQgc2ltaWxhciB0cmFkZW9mZnMuCisgKgorICogVGhpcyBmdW5jdGlvbiBkb2VzIG5vdCBzbGVlcCBhbmQgY2FuIGJlIGNhbGxlZCBpbiBhbnkgY29udGV4dC4KKyAqIFRyeWluZyB0byB1c2UgYSBub24tZXhpc3RpbmcgaWRlbnRpZmllciBzaWxlbnRseSBnZXRzIGlnbm9yZWQuCisgKgorICogRHVlIHRvIHRoZSBhdG9taWMgbmF0dXJlIG9mIHRoaXMgZnVuY3Rpb24sIHRoZSBtb2RpZmllZCBsYXRlbmN5CisgKiB2YWx1ZSB3aWxsIG9ubHkgYmUgdXNlZCBmb3IgZnV0dXJlIGRlY2lzaW9uczsgcGFzdCBkZWNpc2lvbnMKKyAqIGNhbiBzdGlsbCBsZWFkIHRvIGxvbmdlciBsYXRlbmNpZXMgaW4gdGhlIG5lYXIgZnV0dXJlLgorICovCit2b2lkIG1vZGlmeV9hY2NlcHRhYmxlX2xhdGVuY3koY2hhciAqaWRlbnRpZmllciwgaW50IHVzZWNzKQoreworCXN0cnVjdCBsYXRlbmN5X2luZm8gKml0ZXI7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsYXRlbmN5X2xvY2ssIGZsYWdzKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGl0ZXIsICZsYXRlbmN5X2xpc3QsIGxpc3QpIHsKKwkJaWYgKHN0cmNtcChpdGVyLT5pZGVudGlmaWVyLCBpZGVudGlmaWVyKSA9PSAwKSB7CisJCQlpdGVyLT51c2VjcyA9IHVzZWNzOworCQkJYnJlYWs7CisJCX0KKwl9CisJaWYgKHVzZWNzIDwgYXRvbWljX3JlYWQoJmN1cnJlbnRfbWF4X2xhdGVuY3kpKQorCQlhdG9taWNfc2V0KCZjdXJyZW50X21heF9sYXRlbmN5LCB1c2Vjcyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbGF0ZW5jeV9sb2NrLCBmbGFncyk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChtb2RpZnlfYWNjZXB0YWJsZV9sYXRlbmN5KTsKKworLyoqCisgKiByZW1vdmVfYWNjZXB0YWJsZV9sYXRlbmN5IC0gcmVtb3ZlcyB0aGUgbWF4aW11bSBsYXRlbmN5IGFjY2VwdGFibGUKKyAqIEBpZGVudGlmaWVyOiBzdHJpbmcgdGhhdCBpZGVudGlmaWVzIHRoaXMgZHJpdmVyCisgKgorICogVGhpcyBmdW5jdGlvbiByZW1vdmVzIGEgcHJldmlvdXNseSBzZXQgbWF4aW11bSBsYXRlbmN5IHNldHRpbmcKKyAqIGZvciB0aGUgZHJpdmVyIGFuZCBmcmVlcyB1cCBhbnkgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGUKKyAqIGJvb2trZWVwaW5nIG5lZWRlZCBmb3IgdGhpcy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IHNsZWVwIGFuZCBjYW4gYmUgY2FsbGVkIGluIGFueSBjb250ZXh0LgorICogVHJ5aW5nIHRvIHVzZSBhIG5vbi1leGlzdGluZyBpZGVudGlmaWVyIHNpbGVudGx5IGdldHMgaWdub3JlZC4KKyAqLwordm9pZCByZW1vdmVfYWNjZXB0YWJsZV9sYXRlbmN5KGNoYXIgKmlkZW50aWZpZXIpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgbmV3bWF4ID0gMDsKKwlzdHJ1Y3QgbGF0ZW5jeV9pbmZvICppdGVyLCAqdGVtcDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZsYXRlbmN5X2xvY2ssIGZsYWdzKTsKKworCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShpdGVyLCAgdGVtcCwgJmxhdGVuY3lfbGlzdCwgbGlzdCkgeworCQlpZiAoc3RyY21wKGl0ZXItPmlkZW50aWZpZXIsIGlkZW50aWZpZXIpID09IDApIHsKKwkJCWxpc3RfZGVsKCZpdGVyLT5saXN0KTsKKwkJCW5ld21heCA9IGl0ZXItPnVzZWNzOworCQkJa2ZyZWUoaXRlci0+aWRlbnRpZmllcik7CisJCQlrZnJlZShpdGVyKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJLyogSWYgd2UganVzdCBkZWxldGVkIHRoZSBzeXN0ZW0gd2lkZSB2YWx1ZSwgd2UgbmVlZCB0bworCSAqIHJlY2FsY3VsYXRlIHdpdGggYSBmdWxsIHNlYXJjaAorCSAqLworCWlmIChuZXdtYXggPT0gYXRvbWljX3JlYWQoJmN1cnJlbnRfbWF4X2xhdGVuY3kpKSB7CisJCW5ld21heCA9IF9fZmluZF9tYXhfbGF0ZW5jeSgpOworCQlhdG9taWNfc2V0KCZjdXJyZW50X21heF9sYXRlbmN5LCBuZXdtYXgpOworCX0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZsYXRlbmN5X2xvY2ssIGZsYWdzKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlbW92ZV9hY2NlcHRhYmxlX2xhdGVuY3kpOworCisvKioKKyAqIHN5c3RlbV9sYXRlbmN5X2NvbnN0cmFpbnQgLSBxdWVyaWVzIHRoZSBzeXN0ZW0gd2lkZSBsYXRlbmN5IG1heGltdW0KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHN5c3RlbSB3aWRlIG1heGltdW0gbGF0ZW5jeSBpbgorICogbWljcm9zZWNvbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gZG9lcyBub3Qgc2xlZXAgYW5kIGNhbiBiZSBjYWxsZWQgaW4gYW55IGNvbnRleHQuCisgKi8KK2ludCBzeXN0ZW1fbGF0ZW5jeV9jb25zdHJhaW50KHZvaWQpCit7CisJcmV0dXJuIGF0b21pY19yZWFkKCZjdXJyZW50X21heF9sYXRlbmN5KTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5c3RlbV9sYXRlbmN5X2NvbnN0cmFpbnQpOworCisvKioKKyAqIHN5bmNocm9uaXplX2FjY2VwdGFibGVfbGF0ZW5jeSAtIHJlY2FsY3VsYXRlcyBhbGwgbGF0ZW5jeSBkZWNpc2lvbnMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2F1c2UgYSBjYWxsYmFjayB0byB2YXJpb3VzIGtlcm5lbCBwaWVjZXMgdGhhdAorICogd2lsbCBtYWtlIHRob3NlIHBpZWNlcyByZXRoaW5rIHRoZWlyIGxhdGVuY3kgZGVjaXNpb25zLiBUaGlzIGltcGxpZXMKKyAqIHRoYXQgaWYgdGhlcmUgYXJlIG92ZXJsb25nIGxhdGVuY2llcyBpbiBoYXJkd2FyZSBzdGF0ZSBhbHJlYWR5LCB0aG9zZQorICogbGF0ZW5jaWVzIGdldCB0YWtlbiByaWdodCBub3cuIFdoZW4gdGhpcyBjYWxsIGNvbXBsZXRlcyBubyBvdmVybG9uZworICogbGF0ZW5jeSBkZWNpc2lvbnMgc2hvdWxkIGJlIGFjdGl2ZSBhbnltb3JlLgorICoKKyAqIFR5cGljYWwgdXNlY2FzZSBvZiB0aGlzIGlzIGFmdGVyIGEgbW9kaWZ5X2FjY2VwdGFibGVfbGF0ZW5jeSgpIGNhbGwsCisgKiB3aGljaCBpbiBpdHNlbGYgaXMgbm9uLWJsb2NraW5nIGFuZCBub24tc3luY2hyb25pemluZy4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGJsb2NrcyBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgd2l0aCBsb2NrcyBoZWxkLgorICovCisKK3ZvaWQgc3luY2hyb25pemVfYWNjZXB0YWJsZV9sYXRlbmN5KHZvaWQpCit7CisJYmxvY2tpbmdfbm90aWZpZXJfY2FsbF9jaGFpbigmbGF0ZW5jeV9ub3RpZmllciwKKwkJYXRvbWljX3JlYWQoJmN1cnJlbnRfbWF4X2xhdGVuY3kpLCBOVUxMKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHN5bmNocm9uaXplX2FjY2VwdGFibGVfbGF0ZW5jeSk7CisKKy8qCisgKiBMYXRlbmN5IG5vdGlmaWVyOiB0aGlzIG5vdGlmaWVyIGdldHMgY2FsbGVkIHdoZW4gYSBub24tYXRvbWljIG5ldworICogbGF0ZW5jeSB2YWx1ZSBnZXRzIHNldC4gVGhlIGV4cGVjdGF0aW9uIG5vZiB0aGUgY2FsbGVyIG9mIHRoZQorICogbm9uLWF0b21pYyBzZXQgaXMgdGhhdCB3aGVuIHRoZSBjYWxsIHJldHVybnMsIGZ1dHVyZSBsYXRlbmNpZXMKKyAqIGFyZSB3aXRoaW4gYm91bmRzLCBzbyB0aGUgZnVuY3Rpb25zIG9uIHRoZSBub3RpZmllciBsaXN0IGFyZQorICogZXhwZWN0ZWQgdG8gdGFrZSB0aGUgb3ZlcmxvbmcgbGF0ZW5jaWVzIGltbWVkaWF0ZWx5LCBpbnNpZGUgdGhlCisgKiBjYWxsYmFjaywgYW5kIG5vdCBtYWtlIGEgb3ZlcmxvbmcgbGF0ZW5jeSBkZWNpc2lvbiBhbnltb3JlLgorICoKKyAqIFRoZSBjYWxsYmFjayBnZXRzIGNhbGxlZCB3aGVuIHRoZSBuZXcgbGF0ZW5jeSB2YWx1ZSBpcyBtYWRlCisgKiBhY3RpdmUgc28gc3lzdGVtX2xhdGVuY3lfY29uc3RyYWludCgpIHJldHVybnMgdGhlIG5ldyBsYXRlbmN5LgorICovCitpbnQgcmVnaXN0ZXJfbGF0ZW5jeV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiBuYikKK3sKKwlyZXR1cm4gYmxvY2tpbmdfbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoJmxhdGVuY3lfbm90aWZpZXIsIG5iKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIpOworCitpbnQgdW5yZWdpc3Rlcl9sYXRlbmN5X25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqIG5iKQoreworCXJldHVybiBibG9ja2luZ19ub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKCZsYXRlbmN5X25vdGlmaWVyLCBuYik7Cit9CitFWFBPUlRfU1lNQk9MX0dQTCh1bnJlZ2lzdGVyX2xhdGVuY3lfbm90aWZpZXIpOworCitzdGF0aWMgX19pbml0IGludCBsYXRlbmN5X2luaXQodm9pZCkKK3sKKwlhdG9taWNfc2V0KCZjdXJyZW50X21heF9sYXRlbmN5LCBJTkZJTklURV9MQVRFTkNZKTsKKwkvKgorCSAqIHdlIGRvbid0IHdhbnQgYnkgZGVmYXVsdCB0byBoYXZlIGxvbmdlciBsYXRlbmNpZXMgdGhhbiAyIHRpY2tzLAorCSAqIHNpbmNlIHRoYXQgd291bGQgY2F1c2UgbG9zdCB0aWNrcworCSAqLworCXNldF9hY2NlcHRhYmxlX2xhdGVuY3koImtlcm5lbCIsIDIqMTAwMDAwMC9IWik7CisJcmV0dXJuIDA7Cit9CisKK21vZHVsZV9pbml0KGxhdGVuY3lfaW5pdCk7CmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tkZXAuYwppbmRleCBjMDg4ZTU1Li5lNTk2NTI1IDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcC5jCisrKyBiL2tlcm5lbC9sb2NrZGVwLmMKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KICNpbmNsdWRlIDxsaW51eC9pcnFmbGFncy5oPgorI2luY2x1ZGUgPGxpbnV4L3V0c25hbWUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCkBAIC0xMjEsOCArMTIyLDggQEAKICAqIHVuaXF1ZS4KICAqLwogI2RlZmluZSBpdGVyYXRlX2NoYWluX2tleShrZXkxLCBrZXkyKSBcCi0JKCgoa2V5MSkgPDwgTUFYX0xPQ0tERVBfS0VZU19CSVRTLzIpIF4gXAotCSgoa2V5MSkgPj4gKDY0LU1BWF9MT0NLREVQX0tFWVNfQklUUy8yKSkgXiBcCisJKCgoa2V5MSkgPDwgTUFYX0xPQ0tERVBfS0VZU19CSVRTKSBeIFwKKwkoKGtleTEpID4+ICg2NC1NQVhfTE9DS0RFUF9LRVlTX0JJVFMpKSBeIFwKIAkoa2V5MikpCiAKIHZvaWQgbG9ja2RlcF9vZmYodm9pZCkKQEAgLTUxNSw2ICs1MTYsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgcHJpbnRfa2VybmVsX3ZlcnNpb24odm9pZCkKK3sKKwlwcmludGsoIiVzICUuKnNcbiIsIHN5c3RlbV91dHNuYW1lLnJlbGVhc2UsCisJCShpbnQpc3RyY3NwbihzeXN0ZW1fdXRzbmFtZS52ZXJzaW9uLCAiICIpLAorCQlzeXN0ZW1fdXRzbmFtZS52ZXJzaW9uKTsKK30KKwogLyoKICAqIFdoZW4gYSBjaXJjdWxhciBkZXBlbmRlbmN5IGlzIGRldGVjdGVkLCBwcmludCB0aGUKICAqIGhlYWRlciBmaXJzdDoKQEAgLTUzMSw2ICs1MzksNyBAQAogCiAJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiIpOwogCXByaW50ayggICJbIElORk86IHBvc3NpYmxlIGNpcmN1bGFyIGxvY2tpbmcgZGVwZW5kZW5jeSBkZXRlY3RlZCBdXG4iKTsKKwlwcmludF9rZXJuZWxfdmVyc2lvbigpOwogCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoIiVzLyVkIGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6XG4iLAogCQljdXJyLT5jb21tLCBjdXJyLT5waWQpOwpAQCAtNzEyLDYgKzcyMSw3IEBACiAJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAJcHJpbnRrKCAgIlsgSU5GTzogJXMtc2FmZSAtPiAlcy11bnNhZmUgbG9jayBvcmRlciBkZXRlY3RlZCBdXG4iLAogCQlpcnFjbGFzcywgaXJxY2xhc3MpOworCXByaW50X2tlcm5lbF92ZXJzaW9uKCk7CiAJcHJpbnRrKCAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIik7CiAJcHJpbnRrKCIlcy8lZCBbSEMldVslbHVdOlNDJXVbJWx1XTpIRSV1OlNFJXVdIGlzIHRyeWluZyB0byBhY3F1aXJlOlxuIiwKIAkJY3Vyci0+Y29tbSwgY3Vyci0+cGlkLApAQCAtNzkzLDYgKzgwMyw3IEBACiAKIAlwcmludGsoIlxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsKIAlwcmludGsoICAiWyBJTkZPOiBwb3NzaWJsZSByZWN1cnNpdmUgbG9ja2luZyBkZXRlY3RlZCBdXG4iKTsKKwlwcmludF9rZXJuZWxfdmVyc2lvbigpOwogCXByaW50ayggICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIpOwogCXByaW50aygiJXMvJWQgaXMgdHJ5aW5nIHRvIGFjcXVpcmUgbG9jazpcbiIsCiAJCWN1cnItPmNvbW0sIGN1cnItPnBpZCk7CkBAIC0xMzc1LDYgKzEzODYsNyBAQAogCiAJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAJcHJpbnRrKCAgIlsgSU5GTzogcG9zc2libGUgaXJxIGxvY2sgaW52ZXJzaW9uIGRlcGVuZGVuY3kgZGV0ZWN0ZWQgXVxuIik7CisJcHJpbnRfa2VybmVsX3ZlcnNpb24oKTsKIAlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAlwcmludGsoIiVzLyVkIGp1c3QgY2hhbmdlZCB0aGUgc3RhdGUgb2YgbG9jazpcbiIsCiAJCWN1cnItPmNvbW0sIGN1cnItPnBpZCk7CkBAIC0xNDY5LDYgKzE0ODEsNyBAQAogCiAJcHJpbnRrKCJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7CiAJcHJpbnRrKCAgIlsgSU5GTzogaW5jb25zaXN0ZW50IGxvY2sgc3RhdGUgXVxuIik7CisJcHJpbnRfa2VybmVsX3ZlcnNpb24oKTsKIAlwcmludGsoICAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKIAogCXByaW50aygiaW5jb25zaXN0ZW50IHslc30gLT4geyVzfSB1c2FnZS5cbiIsCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlLmMgYi9rZXJuZWwvbW9kdWxlLmMKaW5kZXggYjdmZTZlOC4uMDU2MjVkNSAxMDA2NDQKLS0tIGEva2VybmVsL21vZHVsZS5jCisrKyBiL2tlcm5lbC9tb2R1bGUuYwpAQCAtOTMzLDYgKzkzMywxNSBAQAogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIjB4JWx4XG4iLCBzYXR0ci0+YWRkcmVzcyk7CiB9CiAKK3N0YXRpYyB2b2lkIGZyZWVfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlX3NlY3RfYXR0cnMgKnNlY3RfYXR0cnMpCit7CisJaW50IHNlY3Rpb247CisKKwlmb3IgKHNlY3Rpb24gPSAwOyBzZWN0aW9uIDwgc2VjdF9hdHRycy0+bnNlY3Rpb25zOyBzZWN0aW9uKyspCisJCWtmcmVlKHNlY3RfYXR0cnMtPmF0dHJzW3NlY3Rpb25dLm5hbWUpOworCWtmcmVlKHNlY3RfYXR0cnMpOworfQorCiBzdGF0aWMgdm9pZCBhZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGludCBuc2VjdCwKIAkJY2hhciAqc2Vjc3RyaW5ncywgRWxmX1NoZHIgKnNlY2hkcnMpCiB7CkBAIC05NDksMjEgKzk1OCwyNiBAQAogCQkJKyBubG9hZGVkICogc2l6ZW9mKHNlY3RfYXR0cnMtPmF0dHJzWzBdKSwKIAkJCXNpemVvZihzZWN0X2F0dHJzLT5ncnAuYXR0cnNbMF0pKTsKIAlzaXplWzFdID0gKG5sb2FkZWQgKyAxKSAqIHNpemVvZihzZWN0X2F0dHJzLT5ncnAuYXR0cnNbMF0pOwotCWlmICghIChzZWN0X2F0dHJzID0ga21hbGxvYyhzaXplWzBdICsgc2l6ZVsxXSwgR0ZQX0tFUk5FTCkpKQorCXNlY3RfYXR0cnMgPSBremFsbG9jKHNpemVbMF0gKyBzaXplWzFdLCBHRlBfS0VSTkVMKTsKKwlpZiAoc2VjdF9hdHRycyA9PSBOVUxMKQogCQlyZXR1cm47CiAKIAkvKiBTZXR1cCBzZWN0aW9uIGF0dHJpYnV0ZXMuICovCiAJc2VjdF9hdHRycy0+Z3JwLm5hbWUgPSAic2VjdGlvbnMiOwogCXNlY3RfYXR0cnMtPmdycC5hdHRycyA9ICh2b2lkICopc2VjdF9hdHRycyArIHNpemVbMF07CiAKKwlzZWN0X2F0dHJzLT5uc2VjdGlvbnMgPSAwOwogCXNhdHRyID0gJnNlY3RfYXR0cnMtPmF0dHJzWzBdOwogCWdhdHRyID0gJnNlY3RfYXR0cnMtPmdycC5hdHRyc1swXTsKIAlmb3IgKGkgPSAwOyBpIDwgbnNlY3Q7IGkrKykgewogCQlpZiAoISAoc2VjaGRyc1tpXS5zaF9mbGFncyAmIFNIRl9BTExPQykpCiAJCQljb250aW51ZTsKIAkJc2F0dHItPmFkZHJlc3MgPSBzZWNoZHJzW2ldLnNoX2FkZHI7Ci0JCXN0cmxjcHkoc2F0dHItPm5hbWUsIHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsCi0JCQlNT0RVTEVfU0VDVF9OQU1FX0xFTik7CisJCXNhdHRyLT5uYW1lID0ga3N0cmR1cChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLAorCQkJCQlHRlBfS0VSTkVMKTsKKwkJaWYgKHNhdHRyLT5uYW1lID09IE5VTEwpCisJCQlnb3RvIG91dDsKKwkJc2VjdF9hdHRycy0+bnNlY3Rpb25zKys7CiAJCXNhdHRyLT5tYXR0ci5zaG93ID0gbW9kdWxlX3NlY3Rfc2hvdzsKIAkJc2F0dHItPm1hdHRyLnN0b3JlID0gTlVMTDsKIAkJc2F0dHItPm1hdHRyLmF0dHIubmFtZSA9IHNhdHRyLT5uYW1lOwpAQCAtOTc5LDcgKzk5Myw3IEBACiAJbW9kLT5zZWN0X2F0dHJzID0gc2VjdF9hdHRyczsKIAlyZXR1cm47CiAgIG91dDoKLQlrZnJlZShzZWN0X2F0dHJzKTsKKwlmcmVlX3NlY3RfYXR0cnMoc2VjdF9hdHRycyk7CiB9CiAKIHN0YXRpYyB2b2lkIHJlbW92ZV9zZWN0X2F0dHJzKHN0cnVjdCBtb2R1bGUgKm1vZCkKQEAgLTk4OSwxMyArMTAwMywxMyBAQAogCQkJCSAgICZtb2QtPnNlY3RfYXR0cnMtPmdycCk7CiAJCS8qIFdlIGFyZSBwb3NpdGl2ZSB0aGF0IG5vIG9uZSBpcyB1c2luZyBhbnkgc2VjdCBhdHRycwogCQkgKiBhdCB0aGlzIHBvaW50LiAgRGVhbGxvY2F0ZSBpbW1lZGlhdGVseS4gKi8KLQkJa2ZyZWUobW9kLT5zZWN0X2F0dHJzKTsKKwkJZnJlZV9zZWN0X2F0dHJzKG1vZC0+c2VjdF9hdHRycyk7CiAJCW1vZC0+c2VjdF9hdHRycyA9IE5VTEw7CiAJfQogfQogCi0KICNlbHNlCisKIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfc2VjdF9hdHRycyhzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGludCBuc2VjdCwKIAkJY2hhciAqc2VjdHN0cmluZ3MsIEVsZl9TaGRyICpzZWNoZHJzKQogewpkaWZmIC0tZ2l0IGEva2VybmVsL3BhbmljLmMgYi9rZXJuZWwvcGFuaWMuYwppbmRleCA2Y2ViNjY0Li41MjVlMzY1IDEwMDY0NAotLS0gYS9rZXJuZWwvcGFuaWMuYworKysgYi9rZXJuZWwvcGFuaWMuYwpAQCAtMjEsNyArMjEsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnX2xvY2tzLmg+CiAKIGludCBwYW5pY19vbl9vb3BzOwotaW50IHBhbmljX29uX3VucmVjb3ZlcmVkX25taTsKIGludCB0YWludGVkOwogc3RhdGljIGludCBwYXVzZV9vbl9vb3BzOwogc3RhdGljIGludCBwYXVzZV9vbl9vb3BzX2ZsYWc7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGFyYW1zLmMgYi9rZXJuZWwvcGFyYW1zLmMKaW5kZXggOTFhZWE3YWEuLmY0MDY2NTUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wYXJhbXMuYworKysgYi9rZXJuZWwvcGFyYW1zLmMKQEAgLTU0Nyw2ICs1NDcsNyBAQAogCQkJCQkgICAgdW5zaWduZWQgaW50IG5hbWVfc2tpcCkKIHsKIAlzdHJ1Y3QgbW9kdWxlX2tvYmplY3QgKm1rOworCWludCByZXQ7CiAKIAltayA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBtb2R1bGVfa29iamVjdCksIEdGUF9LRVJORUwpOwogCUJVR19PTighbWspOwpAQCAtNTU0LDcgKzU1NSw4IEBACiAJbWstPm1vZCA9IFRISVNfTU9EVUxFOwogCWtvYmpfc2V0X2tzZXRfcyhtaywgbW9kdWxlX3N1YnN5cyk7CiAJa29iamVjdF9zZXRfbmFtZSgmbWstPmtvYmosIG5hbWUpOwotCWtvYmplY3RfcmVnaXN0ZXIoJm1rLT5rb2JqKTsKKwlyZXQgPSBrb2JqZWN0X3JlZ2lzdGVyKCZtay0+a29iaik7CisJQlVHX09OKHJldCA8IDApOwogCiAJLyogbm8gbmVlZCB0byBrZWVwIHRoZSBrb2JqZWN0IGlmIG5vIHBhcmFtZXRlciBpcyBleHBvcnRlZCAqLwogCWlmICghcGFyYW1fc3lzZnNfc2V0dXAobWssIGtwYXJhbSwgbnVtX3BhcmFtcywgbmFtZV9za2lwKSkgewpAQCAtNjg0LDEzICs2ODYsMjAgQEAKICAqLwogc3RhdGljIGludCBfX2luaXQgcGFyYW1fc3lzZnNfaW5pdCh2b2lkKQogewotCXN1YnN5c3RlbV9yZWdpc3RlcigmbW9kdWxlX3N1YnN5cyk7CisJaW50IHJldDsKKworCXJldCA9IHN1YnN5c3RlbV9yZWdpc3RlcigmbW9kdWxlX3N1YnN5cyk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXMgKCVkKTogc3Vic3lzdGVtX3JlZ2lzdGVyIGVycm9yOiAlZFxuIiwKKwkJCV9fRklMRV9fLCBfX0xJTkVfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CiAKIAlwYXJhbV9zeXNmc19idWlsdGluKCk7CiAKIAlyZXR1cm4gMDsKIH0KLV9faW5pdGNhbGwocGFyYW1fc3lzZnNfaW5pdCk7CitzdWJzeXNfaW5pdGNhbGwocGFyYW1fc3lzZnNfaW5pdCk7CiAKIEVYUE9SVF9TWU1CT0wocGFyYW1fc2V0X2J5dGUpOwogRVhQT1JUX1NZTUJPTChwYXJhbV9nZXRfYnl0ZSk7CmRpZmYgLS1naXQgYS9rZXJuZWwvcGlkLmMgYi9rZXJuZWwvcGlkLmMKaW5kZXggOTNlMjEyZi4uODM4N2U4YyAxMDA2NDQKLS0tIGEva2VybmVsL3BpZC5jCisrKyBiL2tlcm5lbC9waWQuYwpAQCAtMjIzLDkgKzIyMyw2IEBACiAJc3RydWN0IHBpZF9saW5rICpsaW5rOwogCXN0cnVjdCBwaWQgKnBpZDsKIAotCVdBUk5fT04oIXRhc2stPnBpZCk7IC8qIHRvIGJlIHJlbW92ZWQgc29vbiAqLwotCVdBUk5fT04oIW5yKTsgLyogdG8gYmUgcmVtb3ZlZCBzb29uICovCi0KIAlsaW5rID0gJnRhc2stPnBpZHNbdHlwZV07CiAJbGluay0+cGlkID0gcGlkID0gZmluZF9waWQobnIpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmbGluay0+bm9kZSwgJnBpZC0+dGFza3NbdHlwZV0pOwpAQCAtMjUyLDYgKzI0OSwxNSBAQAogCWZyZWVfcGlkKHBpZCk7CiB9CiAKKy8qIHRyYW5zZmVyX3BpZCBpcyBhbiBvcHRpbWl6YXRpb24gb2YgYXR0YWNoX3BpZChuZXcpLCBkZXRhY2hfcGlkKG9sZCkgKi8KK3ZvaWQgZmFzdGNhbGwgdHJhbnNmZXJfcGlkKHN0cnVjdCB0YXNrX3N0cnVjdCAqb2xkLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKm5ldywKKwkJCSAgIGVudW0gcGlkX3R5cGUgdHlwZSkKK3sKKwluZXctPnBpZHNbdHlwZV0ucGlkID0gb2xkLT5waWRzW3R5cGVdLnBpZDsKKwlobGlzdF9yZXBsYWNlX3JjdSgmb2xkLT5waWRzW3R5cGVdLm5vZGUsICZuZXctPnBpZHNbdHlwZV0ubm9kZSk7CisJb2xkLT5waWRzW3R5cGVdLnBpZCA9IE5VTEw7Cit9CisKIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGZhc3RjYWxsIHBpZF90YXNrKHN0cnVjdCBwaWQgKnBpZCwgZW51bSBwaWRfdHlwZSB0eXBlKQogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqcmVzdWx0ID0gTlVMTDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMgYi9rZXJuZWwvcG9zaXgtY3B1LXRpbWVycy5jCmluZGV4IGQzOGQ5ZWMuLjQ3OWIxNmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3NpeC1jcHUtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LWNwdS10aW1lcnMuYwpAQCAtMTM5MywyNSArMTM5MywxMyBAQAogCX0KIH0KIAotc3RhdGljIGxvbmcgcG9zaXhfY3B1X2Nsb2NrX25hbm9zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICopOwotCi1pbnQgcG9zaXhfY3B1X25zbGVlcChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKLQkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHApCitzdGF0aWMgaW50IGRvX2NwdV9uYW5vc2xlZXAoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLCBpbnQgZmxhZ3MsCisJCQkgICAgc3RydWN0IHRpbWVzcGVjICpycXRwLCBzdHJ1Y3QgaXRpbWVyc3BlYyAqaXQpCiB7Ci0Jc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2sgPQotCSAgICAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOwogCXN0cnVjdCBrX2l0aW1lciB0aW1lcjsKIAlpbnQgZXJyb3I7CiAKIAkvKgotCSAqIERpYWdub3NlIHJlcXVpcmVkIGVycm9ycyBmaXJzdC4KLQkgKi8KLQlpZiAoQ1BVQ0xPQ0tfUEVSVEhSRUFEKHdoaWNoX2Nsb2NrKSAmJgotCSAgICAoQ1BVQ0xPQ0tfUElEKHdoaWNoX2Nsb2NrKSA9PSAwIHx8Ci0JICAgICBDUFVDTE9DS19QSUQod2hpY2hfY2xvY2spID09IGN1cnJlbnQtPnBpZCkpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JLyoKIAkgKiBTZXQgdXAgYSB0ZW1wb3JhcnkgdGltZXIgYW5kIHRoZW4gd2FpdCBmb3IgaXQgdG8gZ28gb2ZmLgogCSAqLwogCW1lbXNldCgmdGltZXIsIDAsIHNpemVvZiB0aW1lcik7CkBAIC0xNDIyLDExICsxNDEwLDEyIEBACiAJdGltZXIuaXRfcHJvY2VzcyA9IGN1cnJlbnQ7CiAJaWYgKCFlcnJvcikgewogCQlzdGF0aWMgc3RydWN0IGl0aW1lcnNwZWMgemVyb19pdDsKLQkJc3RydWN0IGl0aW1lcnNwZWMgaXQgPSB7IC5pdF92YWx1ZSA9ICpycXRwLAotCQkJCQkgLml0X2ludGVydmFsID0ge30gfTsKKworCQltZW1zZXQoaXQsIDAsIHNpemVvZiAqaXQpOworCQlpdC0+aXRfdmFsdWUgPSAqcnF0cDsKIAogCQlzcGluX2xvY2tfaXJxKCZ0aW1lci5pdF9sb2NrKTsKLQkJZXJyb3IgPSBwb3NpeF9jcHVfdGltZXJfc2V0KCZ0aW1lciwgZmxhZ3MsICZpdCwgTlVMTCk7CisJCWVycm9yID0gcG9zaXhfY3B1X3RpbWVyX3NldCgmdGltZXIsIGZsYWdzLCBpdCwgTlVMTCk7CiAJCWlmIChlcnJvcikgewogCQkJc3Bpbl91bmxvY2tfaXJxKCZ0aW1lci5pdF9sb2NrKTsKIAkJCXJldHVybiBlcnJvcjsKQEAgLTE0NTQsNDkgKzE0NDMsODkgQEAKIAkJICogV2Ugd2VyZSBpbnRlcnJ1cHRlZCBieSBhIHNpZ25hbC4KIAkJICovCiAJCXNhbXBsZV90b190aW1lc3BlYyh3aGljaF9jbG9jaywgdGltZXIuaXQuY3B1LmV4cGlyZXMsIHJxdHApOwotCQlwb3NpeF9jcHVfdGltZXJfc2V0KCZ0aW1lciwgMCwgJnplcm9faXQsICZpdCk7CisJCXBvc2l4X2NwdV90aW1lcl9zZXQoJnRpbWVyLCAwLCAmemVyb19pdCwgaXQpOwogCQlzcGluX3VubG9ja19pcnEoJnRpbWVyLml0X2xvY2spOwogCi0JCWlmICgoaXQuaXRfdmFsdWUudHZfc2VjIHwgaXQuaXRfdmFsdWUudHZfbnNlYykgPT0gMCkgeworCQlpZiAoKGl0LT5pdF92YWx1ZS50dl9zZWMgfCBpdC0+aXRfdmFsdWUudHZfbnNlYykgPT0gMCkgewogCQkJLyoKIAkJCSAqIEl0IGFjdHVhbGx5IGRpZCBmaXJlIGFscmVhZHkuCiAJCQkgKi8KIAkJCXJldHVybiAwOwogCQl9CiAKLQkJLyoKLQkJICogUmVwb3J0IGJhY2sgdG8gdGhlIHVzZXIgdGhlIHRpbWUgc3RpbGwgcmVtYWluaW5nLgotCQkgKi8KLQkJaWYgKHJtdHAgIT0gTlVMTCAmJiAhKGZsYWdzICYgVElNRVJfQUJTVElNRSkgJiYKLQkJICAgIGNvcHlfdG9fdXNlcihybXRwLCAmaXQuaXRfdmFsdWUsIHNpemVvZiAqcm10cCkpCi0JCQlyZXR1cm4gLUVGQVVMVDsKLQotCQlyZXN0YXJ0X2Jsb2NrLT5mbiA9IHBvc2l4X2NwdV9jbG9ja19uYW5vc2xlZXBfcmVzdGFydDsKLQkJLyogQ2FsbGVyIGFscmVhZHkgc2V0IHJlc3RhcnRfYmxvY2stPmFyZzEgKi8KLQkJcmVzdGFydF9ibG9jay0+YXJnMCA9IHdoaWNoX2Nsb2NrOwotCQlyZXN0YXJ0X2Jsb2NrLT5hcmcxID0gKHVuc2lnbmVkIGxvbmcpIHJtdHA7Ci0JCXJlc3RhcnRfYmxvY2stPmFyZzIgPSBycXRwLT50dl9zZWM7Ci0JCXJlc3RhcnRfYmxvY2stPmFyZzMgPSBycXRwLT50dl9uc2VjOwotCiAJCWVycm9yID0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSzsKIAl9CiAKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXN0YXRpYyBsb25nCi1wb3NpeF9jcHVfY2xvY2tfbmFub3NsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2spCitpbnQgcG9zaXhfY3B1X25zbGVlcChjb25zdCBjbG9ja2lkX3Qgd2hpY2hfY2xvY2ssIGludCBmbGFncywKKwkJICAgICBzdHJ1Y3QgdGltZXNwZWMgKnJxdHAsIHN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHApCit7CisJc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2sgPQorCSAgICAmY3VycmVudF90aHJlYWRfaW5mbygpLT5yZXN0YXJ0X2Jsb2NrOworCXN0cnVjdCBpdGltZXJzcGVjIGl0OworCWludCBlcnJvcjsKKworCS8qCisJICogRGlhZ25vc2UgcmVxdWlyZWQgZXJyb3JzIGZpcnN0LgorCSAqLworCWlmIChDUFVDTE9DS19QRVJUSFJFQUQod2hpY2hfY2xvY2spICYmCisJICAgIChDUFVDTE9DS19QSUQod2hpY2hfY2xvY2spID09IDAgfHwKKwkgICAgIENQVUNMT0NLX1BJRCh3aGljaF9jbG9jaykgPT0gY3VycmVudC0+cGlkKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwllcnJvciA9IGRvX2NwdV9uYW5vc2xlZXAod2hpY2hfY2xvY2ssIGZsYWdzLCBycXRwLCAmaXQpOworCisJaWYgKGVycm9yID09IC1FUkVTVEFSVF9SRVNUQVJUQkxPQ0spIHsKKworCSAgICAgICAJaWYgKGZsYWdzICYgVElNRVJfQUJTVElNRSkKKwkJCXJldHVybiAtRVJFU1RBUlROT0hBTkQ7CisJCS8qCisJIAkgKiBSZXBvcnQgYmFjayB0byB0aGUgdXNlciB0aGUgdGltZSBzdGlsbCByZW1haW5pbmcuCisJIAkgKi8KKwkJaWYgKHJtdHAgIT0gTlVMTCAmJiBjb3B5X3RvX3VzZXIocm10cCwgJml0Lml0X3ZhbHVlLCBzaXplb2YgKnJtdHApKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJcmVzdGFydF9ibG9jay0+Zm4gPSBwb3NpeF9jcHVfbnNsZWVwX3Jlc3RhcnQ7CisJCXJlc3RhcnRfYmxvY2stPmFyZzAgPSB3aGljaF9jbG9jazsKKwkJcmVzdGFydF9ibG9jay0+YXJnMSA9ICh1bnNpZ25lZCBsb25nKSBybXRwOworCQlyZXN0YXJ0X2Jsb2NrLT5hcmcyID0gcnF0cC0+dHZfc2VjOworCQlyZXN0YXJ0X2Jsb2NrLT5hcmczID0gcnF0cC0+dHZfbnNlYzsKKwl9CisJcmV0dXJuIGVycm9yOworfQorCitsb25nIHBvc2l4X2NwdV9uc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jaykKIHsKIAljbG9ja2lkX3Qgd2hpY2hfY2xvY2sgPSByZXN0YXJ0X2Jsb2NrLT5hcmcwOwogCXN0cnVjdCB0aW1lc3BlYyBfX3VzZXIgKnJtdHA7CiAJc3RydWN0IHRpbWVzcGVjIHQ7CisJc3RydWN0IGl0aW1lcnNwZWMgaXQ7CisJaW50IGVycm9yOwogCiAJcm10cCA9IChzdHJ1Y3QgdGltZXNwZWMgX191c2VyICopIHJlc3RhcnRfYmxvY2stPmFyZzE7CiAJdC50dl9zZWMgPSByZXN0YXJ0X2Jsb2NrLT5hcmcyOwogCXQudHZfbnNlYyA9IHJlc3RhcnRfYmxvY2stPmFyZzM7CiAKIAlyZXN0YXJ0X2Jsb2NrLT5mbiA9IGRvX25vX3Jlc3RhcnRfc3lzY2FsbDsKLQlyZXR1cm4gcG9zaXhfY3B1X25zbGVlcCh3aGljaF9jbG9jaywgVElNRVJfQUJTVElNRSwgJnQsIHJtdHApOworCWVycm9yID0gZG9fY3B1X25hbm9zbGVlcCh3aGljaF9jbG9jaywgVElNRVJfQUJTVElNRSwgJnQsICZpdCk7CisKKwlpZiAoZXJyb3IgPT0gLUVSRVNUQVJUX1JFU1RBUlRCTE9DSykgeworCQkvKgorCSAJICogUmVwb3J0IGJhY2sgdG8gdGhlIHVzZXIgdGhlIHRpbWUgc3RpbGwgcmVtYWluaW5nLgorCSAJICovCisJCWlmIChybXRwICE9IE5VTEwgJiYgY29weV90b191c2VyKHJtdHAsICZpdC5pdF92YWx1ZSwgc2l6ZW9mICpybXRwKSkKKwkJCXJldHVybiAtRUZBVUxUOworCisJCXJlc3RhcnRfYmxvY2stPmZuID0gcG9zaXhfY3B1X25zbGVlcF9yZXN0YXJ0OworCQlyZXN0YXJ0X2Jsb2NrLT5hcmcwID0gd2hpY2hfY2xvY2s7CisJCXJlc3RhcnRfYmxvY2stPmFyZzEgPSAodW5zaWduZWQgbG9uZykgcm10cDsKKwkJcmVzdGFydF9ibG9jay0+YXJnMiA9IHQudHZfc2VjOworCQlyZXN0YXJ0X2Jsb2NrLT5hcmczID0gdC50dl9uc2VjOworCX0KKwlyZXR1cm4gZXJyb3I7CisKIH0KIAogCkBAIC0xNTI0LDYgKzE1NTMsMTAgQEAKIHsKIAlyZXR1cm4gcG9zaXhfY3B1X25zbGVlcChQUk9DRVNTX0NMT0NLLCBmbGFncywgcnF0cCwgcm10cCk7CiB9CitzdGF0aWMgbG9uZyBwcm9jZXNzX2NwdV9uc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jaykKK3sKKwlyZXR1cm4gLUVJTlZBTDsKK30KIHN0YXRpYyBpbnQgdGhyZWFkX2NwdV9jbG9ja19nZXRyZXMoY29uc3QgY2xvY2tpZF90IHdoaWNoX2Nsb2NrLAogCQkJCSAgIHN0cnVjdCB0aW1lc3BlYyAqdHApCiB7CkBAIC0xNTQ0LDYgKzE1NzcsMTAgQEAKIHsKIAlyZXR1cm4gLUVJTlZBTDsKIH0KK3N0YXRpYyBsb25nIHRocmVhZF9jcHVfbnNsZWVwX3Jlc3RhcnQoc3RydWN0IHJlc3RhcnRfYmxvY2sgKnJlc3RhcnRfYmxvY2spCit7CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKIHN0YXRpYyBfX2luaXQgaW50IGluaXRfcG9zaXhfY3B1X3RpbWVycyh2b2lkKQogewpAQCAtMTU1Myw2ICsxNTkwLDcgQEAKIAkJLmNsb2NrX3NldCA9IGRvX3Bvc2l4X2Nsb2NrX25vc2V0dGltZSwKIAkJLnRpbWVyX2NyZWF0ZSA9IHByb2Nlc3NfY3B1X3RpbWVyX2NyZWF0ZSwKIAkJLm5zbGVlcCA9IHByb2Nlc3NfY3B1X25zbGVlcCwKKwkJLm5zbGVlcF9yZXN0YXJ0ID0gcHJvY2Vzc19jcHVfbnNsZWVwX3Jlc3RhcnQsCiAJfTsKIAlzdHJ1Y3Qga19jbG9jayB0aHJlYWQgPSB7CiAJCS5jbG9ja19nZXRyZXMgPSB0aHJlYWRfY3B1X2Nsb2NrX2dldHJlcywKQEAgLTE1NjAsNiArMTU5OCw3IEBACiAJCS5jbG9ja19zZXQgPSBkb19wb3NpeF9jbG9ja19ub3NldHRpbWUsCiAJCS50aW1lcl9jcmVhdGUgPSB0aHJlYWRfY3B1X3RpbWVyX2NyZWF0ZSwKIAkJLm5zbGVlcCA9IHRocmVhZF9jcHVfbnNsZWVwLAorCQkubnNsZWVwX3Jlc3RhcnQgPSB0aHJlYWRfY3B1X25zbGVlcF9yZXN0YXJ0LAogCX07CiAKIAlyZWdpc3Rlcl9wb3NpeF9jbG9jayhDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZwcm9jZXNzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3NpeC10aW1lcnMuYyBiL2tlcm5lbC9wb3NpeC10aW1lcnMuYwppbmRleCBhYzZkYzg3Li5lNWViY2MxIDEwMDY0NAotLS0gYS9rZXJuZWwvcG9zaXgtdGltZXJzLmMKKysrIGIva2VybmVsL3Bvc2l4LXRpbWVycy5jCkBAIC05NzMsMyArOTczLDI0IEBACiAJcmV0dXJuIENMT0NLX0RJU1BBVENIKHdoaWNoX2Nsb2NrLCBuc2xlZXAsCiAJCQkgICAgICAod2hpY2hfY2xvY2ssIGZsYWdzLCAmdCwgcm10cCkpOwogfQorCisvKgorICogbmFub3NsZWVwX3Jlc3RhcnQgZm9yIG1vbm90b25pYyBhbmQgcmVhbHRpbWUgY2xvY2tzCisgKi8KK3N0YXRpYyBpbnQgY29tbW9uX25zbGVlcF9yZXN0YXJ0KHN0cnVjdCByZXN0YXJ0X2Jsb2NrICpyZXN0YXJ0X2Jsb2NrKQoreworCXJldHVybiBocnRpbWVyX25hbm9zbGVlcF9yZXN0YXJ0KHJlc3RhcnRfYmxvY2spOworfQorCisvKgorICogVGhpcyB3aWxsIHJlc3RhcnQgY2xvY2tfbmFub3NsZWVwLiBUaGlzIGlzIHJlcXVpcmVkIG9ubHkgYnkKKyAqIGNvbXBhdF9jbG9ja19uYW5vc2xlZXBfcmVzdGFydCBmb3Igbm93LgorICovCitsb25nCitjbG9ja19uYW5vc2xlZXBfcmVzdGFydChzdHJ1Y3QgcmVzdGFydF9ibG9jayAqcmVzdGFydF9ibG9jaykKK3sKKwljbG9ja2lkX3Qgd2hpY2hfY2xvY2sgPSByZXN0YXJ0X2Jsb2NrLT5hcmcwOworCisJcmV0dXJuIENMT0NLX0RJU1BBVENIKHdoaWNoX2Nsb2NrLCBuc2xlZXBfcmVzdGFydCwKKwkJCSAgICAgIChyZXN0YXJ0X2Jsb2NrKSk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvcHRyYWNlLmMgYi9rZXJuZWwvcHRyYWNlLmMKaW5kZXggOWExMTFmNy4uNGQ1MGUwNiAxMDA2NDQKLS0tIGEva2VybmVsL3B0cmFjZS5jCisrKyBiL2tlcm5lbC9wdHJhY2UuYwpAQCAtMjQxLDYwICsyNDEsNiBAQAogCXJldHVybiAwOwogfQogCi0vKgotICogQWNjZXNzIGFub3RoZXIgcHJvY2VzcycgYWRkcmVzcyBzcGFjZS4KLSAqIFNvdXJjZS90YXJnZXQgYnVmZmVyIG11c3QgYmUga2VybmVsIHNwYWNlLCAKLSAqIERvIG5vdCB3YWxrIHRoZSBwYWdlIHRhYmxlIGRpcmVjdGx5LCB1c2UgZ2V0X3VzZXJfcGFnZXMKLSAqLwotCi1pbnQgYWNjZXNzX3Byb2Nlc3Nfdm0oc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVkIGxvbmcgYWRkciwgdm9pZCAqYnVmLCBpbnQgbGVuLCBpbnQgd3JpdGUpCi17Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW07Ci0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jdm9pZCAqb2xkX2J1ZiA9IGJ1ZjsKLQotCW1tID0gZ2V0X3Rhc2tfbW0odHNrKTsKLQlpZiAoIW1tKQotCQlyZXR1cm4gMDsKLQotCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKLQkvKiBpZ25vcmUgZXJyb3JzLCBqdXN0IGNoZWNrIGhvdyBtdWNoIHdhcyBzdWNlc3NmdWxseSB0cmFuc2ZlcmVkICovCi0Jd2hpbGUgKGxlbikgewotCQlpbnQgYnl0ZXMsIHJldCwgb2Zmc2V0OwotCQl2b2lkICptYWRkcjsKLQotCQlyZXQgPSBnZXRfdXNlcl9wYWdlcyh0c2ssIG1tLCBhZGRyLCAxLAotCQkJCXdyaXRlLCAxLCAmcGFnZSwgJnZtYSk7Ci0JCWlmIChyZXQgPD0gMCkKLQkJCWJyZWFrOwotCi0JCWJ5dGVzID0gbGVuOwotCQlvZmZzZXQgPSBhZGRyICYgKFBBR0VfU0laRS0xKTsKLQkJaWYgKGJ5dGVzID4gUEFHRV9TSVpFLW9mZnNldCkKLQkJCWJ5dGVzID0gUEFHRV9TSVpFLW9mZnNldDsKLQotCQltYWRkciA9IGttYXAocGFnZSk7Ci0JCWlmICh3cml0ZSkgewotCQkJY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCBhZGRyLAotCQkJCQkgIG1hZGRyICsgb2Zmc2V0LCBidWYsIGJ5dGVzKTsKLQkJCXNldF9wYWdlX2RpcnR5X2xvY2socGFnZSk7Ci0JCX0gZWxzZSB7Ci0JCQljb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkciwKLQkJCQkJICAgIGJ1ZiwgbWFkZHIgKyBvZmZzZXQsIGJ5dGVzKTsKLQkJfQotCQlrdW5tYXAocGFnZSk7Ci0JCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKLQkJbGVuIC09IGJ5dGVzOwotCQlidWYgKz0gYnl0ZXM7Ci0JCWFkZHIgKz0gYnl0ZXM7Ci0JfQotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JbW1wdXQobW0pOwotCQotCXJldHVybiBidWYgLSBvbGRfYnVmOwotfQotCiBpbnQgcHRyYWNlX3JlYWRkYXRhKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIHNyYywgY2hhciBfX3VzZXIgKmRzdCwgaW50IGxlbikKIHsKIAlpbnQgY29waWVkID0gMDsKQEAgLTQ5NCw2ICs0NDAsNyBAQAogCWNoaWxkID0gZmluZF90YXNrX2J5X3BpZChwaWQpOwogCWlmIChjaGlsZCkKIAkJZ2V0X3Rhc2tfc3RydWN0KGNoaWxkKTsKKwogCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKIAlpZiAoIWNoaWxkKQogCQlyZXR1cm4gRVJSX1BUUigtRVNSQ0gpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3JjdXRvcnR1cmUuYyBiL2tlcm5lbC9yY3V0b3J0dXJlLmMKaW5kZXggNGQxYzNkMi4uNGYyYzQyNyAxMDA2NDQKLS0tIGEva2VybmVsL3JjdXRvcnR1cmUuYworKysgYi9rZXJuZWwvcmN1dG9ydHVyZS5jCkBAIC0xOTIsMTMgKzE5MiwxMyBAQAogICogRGVmaW5pdGlvbnMgZm9yIHJjdSB0b3J0dXJlIHRlc3RpbmcuCiAgKi8KIAotc3RhdGljIGludCByY3VfdG9ydHVyZV9yZWFkX2xvY2sodm9pZCkKK3N0YXRpYyBpbnQgcmN1X3RvcnR1cmVfcmVhZF9sb2NrKHZvaWQpIF9fYWNxdWlyZXMoUkNVKQogewogCXJjdV9yZWFkX2xvY2soKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgcmN1X3RvcnR1cmVfcmVhZF91bmxvY2soaW50IGlkeCkKK3N0YXRpYyB2b2lkIHJjdV90b3J0dXJlX3JlYWRfdW5sb2NrKGludCBpZHgpIF9fcmVsZWFzZXMoUkNVKQogewogCXJjdV9yZWFkX3VubG9jaygpOwogfQpAQCAtMjUwLDEzICsyNTAsMTMgQEAKICAqIERlZmluaXRpb25zIGZvciByY3VfYmggdG9ydHVyZSB0ZXN0aW5nLgogICovCiAKLXN0YXRpYyBpbnQgcmN1X2JoX3RvcnR1cmVfcmVhZF9sb2NrKHZvaWQpCitzdGF0aWMgaW50IHJjdV9iaF90b3J0dXJlX3JlYWRfbG9jayh2b2lkKSBfX2FjcXVpcmVzKFJDVV9CSCkKIHsKIAlyY3VfcmVhZF9sb2NrX2JoKCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHJjdV9iaF90b3J0dXJlX3JlYWRfdW5sb2NrKGludCBpZHgpCitzdGF0aWMgdm9pZCByY3VfYmhfdG9ydHVyZV9yZWFkX3VubG9jayhpbnQgaWR4KSBfX3JlbGVhc2VzKFJDVV9CSCkKIHsKIAlyY3VfcmVhZF91bmxvY2tfYmgoKTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9yZWxheS5jIGIva2VybmVsL3JlbGF5LmMKaW5kZXggMzMzNDVlNy4uMWQ2M2VjZCAxMDA2NDQKLS0tIGEva2VybmVsL3JlbGF5LmMKKysrIGIva2VybmVsL3JlbGF5LmMKQEAgLTk1LDcgKzk1LDcgQEAKICAqCUBidWY6IHRoZSBidWZmZXIgc3RydWN0CiAgKglAc2l6ZTogdG90YWwgc2l6ZSBvZiB0aGUgYnVmZmVyCiAgKgotICoJUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIHJlc3VsdGluZyBidWZmZXIsIE5VTEwgaWYgdW5zdWNjZXNzZnVsLiBUaGUKKyAqCVJldHVybnMgYSBwb2ludGVyIHRvIHRoZSByZXN1bHRpbmcgYnVmZmVyLCAlTlVMTCBpZiB1bnN1Y2Nlc3NmdWwuIFRoZQogICoJcGFzc2VkIGluIHNpemUgd2lsbCBnZXQgcGFnZSBhbGlnbmVkLCBpZiBpdCBpc24ndCBhbHJlYWR5LgogICovCiBzdGF0aWMgdm9pZCAqcmVsYXlfYWxsb2NfYnVmKHN0cnVjdCByY2hhbl9idWYgKmJ1Ziwgc2l6ZV90ICpzaXplKQpAQCAtMTMyLDEwICsxMzIsOSBAQAogCiAvKioKICAqCXJlbGF5X2NyZWF0ZV9idWYgLSBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSBhIGNoYW5uZWwgYnVmZmVyCi0gKglAYWxsb2Nfc2l6ZTogc2l6ZSBvZiB0aGUgYnVmZmVyIHRvIGFsbG9jYXRlCi0gKglAbl9zdWJidWZzOiBudW1iZXIgb2Ygc3ViLWJ1ZmZlcnMgaW4gdGhlIGNoYW5uZWwKKyAqCUBjaGFuOiB0aGUgcmVsYXkgY2hhbm5lbAogICoKLSAqCVJldHVybnMgY2hhbm5lbCBidWZmZXIgaWYgc3VjY2Vzc2Z1bCwgTlVMTCBvdGhlcndpc2UKKyAqCVJldHVybnMgY2hhbm5lbCBidWZmZXIgaWYgc3VjY2Vzc2Z1bCwgJU5VTEwgb3RoZXJ3aXNlLgogICovCiBzdHJ1Y3QgcmNoYW5fYnVmICpyZWxheV9jcmVhdGVfYnVmKHN0cnVjdCByY2hhbiAqY2hhbikKIHsKQEAgLTE2Myw2ICsxNjIsNyBAQAogCiAvKioKICAqCXJlbGF5X2Rlc3Ryb3lfY2hhbm5lbCAtIGZyZWUgdGhlIGNoYW5uZWwgc3RydWN0CisgKglAa3JlZjogdGFyZ2V0IGtlcm5lbCByZWZlcmVuY2UgdGhhdCBjb250YWlucyB0aGUgcmVsYXkgY2hhbm5lbAogICoKICAqCVNob3VsZCBvbmx5IGJlIGNhbGxlZCBmcm9tIGtyZWZfcHV0KCkuCiAgKi8KQEAgLTE5NCw2ICsxOTQsNyBAQAogCiAvKioKICAqCXJlbGF5X3JlbW92ZV9idWYgLSByZW1vdmUgYSBjaGFubmVsIGJ1ZmZlcgorICoJQGtyZWY6IHRhcmdldCBrZXJuZWwgcmVmZXJlbmNlIHRoYXQgY29udGFpbnMgdGhlIHJlbGF5IGJ1ZmZlcgogICoKICAqCVJlbW92ZXMgdGhlIGZpbGUgZnJvbSB0aGUgZmlsZXlzdGVtLCB3aGljaCBhbHNvIGZyZWVzIHRoZQogICoJcmNoYW5fYnVmX3N0cnVjdCBhbmQgdGhlIGNoYW5uZWwgYnVmZmVyLiAgU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZyb20KQEAgLTM3NCw3ICszNzUsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwocmVsYXlfcmVzZXQpOwogCi0vKioKKy8qCiAgKglyZWxheV9vcGVuX2J1ZiAtIGNyZWF0ZSBhIG5ldyByZWxheSBjaGFubmVsIGJ1ZmZlcgogICoKICAqCUludGVybmFsIC0gdXNlZCBieSByZWxheV9vcGVuKCkuCkBAIC00NDgsMTIgKzQ0OSwxMiBAQAogLyoqCiAgKglyZWxheV9vcGVuIC0gY3JlYXRlIGEgbmV3IHJlbGF5IGNoYW5uZWwKICAqCUBiYXNlX2ZpbGVuYW1lOiBiYXNlIG5hbWUgb2YgZmlsZXMgdG8gY3JlYXRlCi0gKglAcGFyZW50OiBkZW50cnkgb2YgcGFyZW50IGRpcmVjdG9yeSwgTlVMTCBmb3Igcm9vdCBkaXJlY3RvcnkKKyAqCUBwYXJlbnQ6IGRlbnRyeSBvZiBwYXJlbnQgZGlyZWN0b3J5LCAlTlVMTCBmb3Igcm9vdCBkaXJlY3RvcnkKICAqCUBzdWJidWZfc2l6ZTogc2l6ZSBvZiBzdWItYnVmZmVycwogICoJQG5fc3ViYnVmczogbnVtYmVyIG9mIHN1Yi1idWZmZXJzCiAgKglAY2I6IGNsaWVudCBjYWxsYmFjayBmdW5jdGlvbnMKICAqCi0gKglSZXR1cm5zIGNoYW5uZWwgcG9pbnRlciBpZiBzdWNjZXNzZnVsLCBOVUxMIG90aGVyd2lzZS4KKyAqCVJldHVybnMgY2hhbm5lbCBwb2ludGVyIGlmIHN1Y2Nlc3NmdWwsICVOVUxMIG90aGVyd2lzZS4KICAqCiAgKglDcmVhdGVzIGEgY2hhbm5lbCBidWZmZXIgZm9yIGVhY2ggY3B1IHVzaW5nIHRoZSBzaXplcyBhbmQKICAqCWF0dHJpYnV0ZXMgc3BlY2lmaWVkLiAgVGhlIGNyZWF0ZWQgY2hhbm5lbCBidWZmZXIgZmlsZXMKQEAgLTU4NSw3ICs1ODYsNyBAQAogICoJc3ViYnVmc19jb25zdW1lZCBzaG91bGQgYmUgdGhlIG51bWJlciBvZiBzdWItYnVmZmVycyBuZXdseSBjb25zdW1lZCwKICAqCW5vdCB0aGUgdG90YWwgY29uc3VtZWQuCiAgKgotICoJTk9URToga2VybmVsIGNsaWVudHMgZG9uJ3QgbmVlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gaWYgdGhlIGNoYW5uZWwKKyAqCU5PVEU6IEtlcm5lbCBjbGllbnRzIGRvbid0IG5lZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uIGlmIHRoZSBjaGFubmVsCiAgKgltb2RlIGlzICdvdmVyd3JpdGUnLgogICovCiB2b2lkIHJlbGF5X3N1YmJ1ZnNfY29uc3VtZWQoc3RydWN0IHJjaGFuICpjaGFuLApAQCAtNjQxLDcgKzY0Miw3IEBACiAgKglyZWxheV9mbHVzaCAtIGNsb3NlIHRoZSBjaGFubmVsCiAgKglAY2hhbjogdGhlIGNoYW5uZWwKICAqCi0gKglGbHVzaGVzIGFsbCBjaGFubmVsIGJ1ZmZlcnMgaS5lLiBmb3JjZXMgYnVmZmVyIHN3aXRjaC4KKyAqCUZsdXNoZXMgYWxsIGNoYW5uZWwgYnVmZmVycywgaS5lLiBmb3JjZXMgYnVmZmVyIHN3aXRjaC4KICAqLwogdm9pZCByZWxheV9mbHVzaChzdHJ1Y3QgcmNoYW4gKmNoYW4pCiB7CkBAIC02NjksNyArNjcwLDcgQEAKICAqLwogc3RhdGljIGludCByZWxheV9maWxlX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IHJjaGFuX2J1ZiAqYnVmID0gaW5vZGUtPnUuZ2VuZXJpY19pcDsKKwlzdHJ1Y3QgcmNoYW5fYnVmICpidWYgPSBpbm9kZS0+aV9wcml2YXRlOwogCWtyZWZfZ2V0KCZidWYtPmtyZWYpOwogCWZpbHAtPnByaXZhdGVfZGF0YSA9IGJ1ZjsKIApAQCAtNzI5LDcgKzczMCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qKgorLyoKICAqCXJlbGF5X2ZpbGVfcmVhZF9jb25zdW1lIC0gdXBkYXRlIHRoZSBjb25zdW1lZCBjb3VudCBmb3IgdGhlIGJ1ZmZlcgogICovCiBzdGF0aWMgdm9pZCByZWxheV9maWxlX3JlYWRfY29uc3VtZShzdHJ1Y3QgcmNoYW5fYnVmICpidWYsCkBAIC03NTYsNyArNzU3LDcgQEAKIAl9CiB9CiAKLS8qKgorLyoKICAqCXJlbGF5X2ZpbGVfcmVhZF9hdmFpbCAtIGJvb2xlYW4sIGFyZSB0aGVyZSB1bmNvbnN1bWVkIGJ5dGVzIGF2YWlsYWJsZT8KICAqLwogc3RhdGljIGludCByZWxheV9maWxlX3JlYWRfYXZhaWwoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLCBzaXplX3QgcmVhZF9wb3MpCkBAIC03OTMsNiArNzk0LDggQEAKIAogLyoqCiAgKglyZWxheV9maWxlX3JlYWRfc3ViYnVmX2F2YWlsIC0gcmV0dXJuIGJ5dGVzIGF2YWlsYWJsZSBpbiBzdWItYnVmZmVyCisgKglAcmVhZF9wb3M6IGZpbGUgcmVhZCBwb3NpdGlvbgorICoJQGJ1ZjogcmVsYXkgY2hhbm5lbCBidWZmZXIKICAqLwogc3RhdGljIHNpemVfdCByZWxheV9maWxlX3JlYWRfc3ViYnVmX2F2YWlsKHNpemVfdCByZWFkX3BvcywKIAkJCQkJICAgc3RydWN0IHJjaGFuX2J1ZiAqYnVmKQpAQCAtODE4LDYgKzgyMSw4IEBACiAKIC8qKgogICoJcmVsYXlfZmlsZV9yZWFkX3N0YXJ0X3BvcyAtIGZpbmQgdGhlIGZpcnN0IGF2YWlsYWJsZSBieXRlIHRvIHJlYWQKKyAqCUByZWFkX3BvczogZmlsZSByZWFkIHBvc2l0aW9uCisgKglAYnVmOiByZWxheSBjaGFubmVsIGJ1ZmZlcgogICoKICAqCUlmIHRoZSByZWFkX3BvcyBpcyBpbiB0aGUgbWlkZGxlIG9mIHBhZGRpbmcsIHJldHVybiB0aGUKICAqCXBvc2l0aW9uIG9mIHRoZSBmaXJzdCBhY3R1YWxseSBhdmFpbGFibGUgYnl0ZSwgb3RoZXJ3aXNlCkBAIC04NDQsNiArODQ5LDkgQEAKIAogLyoqCiAgKglyZWxheV9maWxlX3JlYWRfZW5kX3BvcyAtIHJldHVybiB0aGUgbmV3IHJlYWQgcG9zaXRpb24KKyAqCUByZWFkX3BvczogZmlsZSByZWFkIHBvc2l0aW9uCisgKglAYnVmOiByZWxheSBjaGFubmVsIGJ1ZmZlcgorICoJQGNvdW50OiBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgcmVhZAogICovCiBzdGF0aWMgc2l6ZV90IHJlbGF5X2ZpbGVfcmVhZF9lbmRfcG9zKHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKIAkJCQkgICAgICBzaXplX3QgcmVhZF9wb3MsCkBAIC04NjUsNyArODczLDcgQEAKIAlyZXR1cm4gZW5kX3BvczsKIH0KIAotLyoqCisvKgogICoJc3ViYnVmX3JlYWRfYWN0b3IgLSByZWFkIHVwIHRvIG9uZSBzdWJidWYncyB3b3J0aCBvZiBkYXRhCiAgKi8KIHN0YXRpYyBpbnQgc3ViYnVmX3JlYWRfYWN0b3Ioc2l6ZV90IHJlYWRfc3RhcnQsCkBAIC04OTAsNyArODk4LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioKKy8qCiAgKglzdWJidWZfc2VuZF9hY3RvciAtIHNlbmQgdXAgdG8gb25lIHN1YmJ1ZidzIHdvcnRoIG9mIGRhdGEKICAqLwogc3RhdGljIGludCBzdWJidWZfc2VuZF9hY3RvcihzaXplX3QgcmVhZF9zdGFydCwKQEAgLTkzMyw3ICs5NDEsNyBAQAogCQkJICAgICAgIHJlYWRfZGVzY3JpcHRvcl90ICpkZXNjLAogCQkJICAgICAgIHJlYWRfYWN0b3JfdCBhY3Rvcik7CiAKLS8qKgorLyoKICAqCXJlbGF5X2ZpbGVfcmVhZF9zdWJidWZzIC0gcmVhZCBjb3VudCBieXRlcywgYnJpZGdpbmcgc3ViYnVmIGJvdW5kYXJpZXMKICAqLwogc3RhdGljIGlubGluZSBzc2l6ZV90IHJlbGF5X2ZpbGVfcmVhZF9zdWJidWZzKHN0cnVjdCBmaWxlICpmaWxwLApkaWZmIC0tZ2l0IGEva2VybmVsL3Jlc291cmNlLmMgYi9rZXJuZWwvcmVzb3VyY2UuYwppbmRleCA0NjI4NjQzLi45ZGIzOGExIDEwMDY0NAotLS0gYS9rZXJuZWwvcmVzb3VyY2UuYworKysgYi9rZXJuZWwvcmVzb3VyY2UuYwpAQCAtMzQ0LDEyICszNDQsMTEgQEAKICAqCiAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVCVVNZIGlmIHRoZSByZXNvdXJjZSBjYW4ndCBiZSBpbnNlcnRlZC4KICAqCi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgb2YgcmVxdWVzdF9yZXNvdXJjZSB3aGVuIG5vIGNvbmZsaWN0CisgKiBUaGlzIGZ1bmN0aW9uIGlzIGVxdWl2YWxlbnQgdG8gcmVxdWVzdF9yZXNvdXJjZSB3aGVuIG5vIGNvbmZsaWN0CiAgKiBoYXBwZW5zLiBJZiBhIGNvbmZsaWN0IGhhcHBlbnMsIGFuZCB0aGUgY29uZmxpY3RpbmcgcmVzb3VyY2VzCiAgKiBlbnRpcmVseSBmaXQgd2l0aGluIHRoZSByYW5nZSBvZiB0aGUgbmV3IHJlc291cmNlLCB0aGVuIHRoZSBuZXcKLSAqIHJlc291cmNlIGlzIGluc2VydGVkIGFuZCB0aGUgY29uZmxpY3RpbmcgcmVzb3VyY2VzIGJlY29tZSBjaGlsZHMgb2YKLSAqIHRoZSBuZXcgcmVzb3VyY2UuICBPdGhlcndpc2UgdGhlIG5ldyByZXNvdXJjZSBiZWNvbWVzIHRoZSBjaGlsZCBvZgotICogdGhlIGNvbmZsaWN0aW5nIHJlc291cmNlCisgKiByZXNvdXJjZSBpcyBpbnNlcnRlZCBhbmQgdGhlIGNvbmZsaWN0aW5nIHJlc291cmNlcyBiZWNvbWUgY2hpbGRyZW4gb2YKKyAqIHRoZSBuZXcgcmVzb3VyY2UuCiAgKi8KIGludCBpbnNlcnRfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpwYXJlbnQsIHN0cnVjdCByZXNvdXJjZSAqbmV3KQogewpAQCAtMzU3LDIwICszNTYsMjEgQEAKIAlzdHJ1Y3QgcmVzb3VyY2UgKmZpcnN0LCAqbmV4dDsKIAogCXdyaXRlX2xvY2soJnJlc291cmNlX2xvY2spOwotIGJlZ2luOgotIAlyZXN1bHQgPSAwOwotCWZpcnN0ID0gX19yZXF1ZXN0X3Jlc291cmNlKHBhcmVudCwgbmV3KTsKLQlpZiAoIWZpcnN0KQotCQlnb3RvIG91dDsKIAotCXJlc3VsdCA9IC1FQlVTWTsKLQlpZiAoZmlyc3QgPT0gcGFyZW50KQotCQlnb3RvIG91dDsKKwlmb3IgKDs7IHBhcmVudCA9IGZpcnN0KSB7CisJIAlyZXN1bHQgPSAwOworCQlmaXJzdCA9IF9fcmVxdWVzdF9yZXNvdXJjZShwYXJlbnQsIG5ldyk7CisJCWlmICghZmlyc3QpCisJCQlnb3RvIG91dDsKIAotCS8qIFJlc291cmNlIGZ1bGx5IGNvbnRhaW5lZCBieSB0aGUgY2xhc2hpbmcgcmVzb3VyY2U/IFJlY3Vyc2UgaW50byBpdCAqLwotCWlmIChmaXJzdC0+c3RhcnQgPD0gbmV3LT5zdGFydCAmJiBmaXJzdC0+ZW5kID49IG5ldy0+ZW5kKSB7Ci0JCXBhcmVudCA9IGZpcnN0OwotCQlnb3RvIGJlZ2luOworCQlyZXN1bHQgPSAtRUJVU1k7CisJCWlmIChmaXJzdCA9PSBwYXJlbnQpCisJCQlnb3RvIG91dDsKKworCQlpZiAoKGZpcnN0LT5zdGFydCA+IG5ldy0+c3RhcnQpIHx8IChmaXJzdC0+ZW5kIDwgbmV3LT5lbmQpKQorCQkJYnJlYWs7CisJCWlmICgoZmlyc3QtPnN0YXJ0ID09IG5ldy0+c3RhcnQpICYmIChmaXJzdC0+ZW5kID09IG5ldy0+ZW5kKSkKKwkJCWJyZWFrOwogCX0KIAogCWZvciAobmV4dCA9IGZpcnN0OyA7IG5leHQgPSBuZXh0LT5zaWJsaW5nKSB7CmRpZmYgLS1naXQgYS9rZXJuZWwvcnRtdXRleC5jIGIva2VybmVsL3J0bXV0ZXguYwppbmRleCAzZTEzYTFlLi40YWIxN2RhIDEwMDY0NAotLS0gYS9rZXJuZWwvcnRtdXRleC5jCisrKyBiL2tlcm5lbC9ydG11dGV4LmMKQEAgLTI1MSw2ICsyNTEsNyBAQAogCiAJLyogR3JhYiB0aGUgbmV4dCB0YXNrICovCiAJdGFzayA9IHJ0X211dGV4X293bmVyKGxvY2spOworCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCiAJaWYgKHdhaXRlciA9PSBydF9tdXRleF90b3Bfd2FpdGVyKGxvY2spKSB7CkBAIC0yNjksNyArMjcwLDYgQEAKIAkJX19ydF9tdXRleF9hZGp1c3RfcHJpbyh0YXNrKTsKIAl9CiAKLQlnZXRfdGFza19zdHJ1Y3QodGFzayk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdGFzay0+cGlfbG9jaywgZmxhZ3MpOwogCiAJdG9wX3dhaXRlciA9IHJ0X211dGV4X3RvcF93YWl0ZXIobG9jayk7CkBAIC00MDksNyArNDA5LDcgQEAKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm93bmVyID0gcnRfbXV0ZXhfb3duZXIobG9jayk7CiAJc3RydWN0IHJ0X211dGV4X3dhaXRlciAqdG9wX3dhaXRlciA9IHdhaXRlcjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCBib29zdCA9IDAsIHJlczsKKwlpbnQgY2hhaW5fd2FsayA9IDAsIHJlczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZjdXJyZW50LT5waV9sb2NrLCBmbGFncyk7CiAJX19ydF9tdXRleF9hZGp1c3RfcHJpbyhjdXJyZW50KTsKQEAgLTQzMywyNSArNDMzLDIzIEBACiAJCXBsaXN0X2FkZCgmd2FpdGVyLT5waV9saXN0X2VudHJ5LCAmb3duZXItPnBpX3dhaXRlcnMpOwogCiAJCV9fcnRfbXV0ZXhfYWRqdXN0X3ByaW8ob3duZXIpOwotCQlpZiAob3duZXItPnBpX2Jsb2NrZWRfb24pIHsKLQkJCWJvb3N0ID0gMTsKLQkJCS8qIGdldHMgZHJvcHBlZCBpbiBydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbigpISAqLwotCQkJZ2V0X3Rhc2tfc3RydWN0KG93bmVyKTsKLQkJfQorCQlpZiAob3duZXItPnBpX2Jsb2NrZWRfb24pCisJCQljaGFpbl93YWxrID0gMTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAl9Ci0JZWxzZSBpZiAoZGVidWdfcnRfbXV0ZXhfZGV0ZWN0X2RlYWRsb2NrKHdhaXRlciwgZGV0ZWN0X2RlYWRsb2NrKSkgewotCQlzcGluX2xvY2tfaXJxc2F2ZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKLQkJaWYgKG93bmVyLT5waV9ibG9ja2VkX29uKSB7Ci0JCQlib29zdCA9IDE7Ci0JCQkvKiBnZXRzIGRyb3BwZWQgaW4gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4oKSEgKi8KLQkJCWdldF90YXNrX3N0cnVjdChvd25lcik7Ci0JCX0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKLQl9Ci0JaWYgKCFib29zdCkKKwllbHNlIGlmIChkZWJ1Z19ydF9tdXRleF9kZXRlY3RfZGVhZGxvY2sod2FpdGVyLCBkZXRlY3RfZGVhZGxvY2spKQorCQljaGFpbl93YWxrID0gMTsKKworCWlmICghY2hhaW5fd2FsaykKIAkJcmV0dXJuIDA7CiAKKwkvKgorCSAqIFRoZSBvd25lciBjYW4ndCBkaXNhcHBlYXIgd2hpbGUgaG9sZGluZyBhIGxvY2ssCisJICogc28gdGhlIG93bmVyIHN0cnVjdCBpcyBwcm90ZWN0ZWQgYnkgd2FpdF9sb2NrLgorCSAqIEdldHMgZHJvcHBlZCBpbiBydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbigpIQorCSAqLworCWdldF90YXNrX3N0cnVjdChvd25lcik7CisKIAlzcGluX3VubG9jaygmbG9jay0+d2FpdF9sb2NrKTsKIAogCXJlcyA9IHJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKG93bmVyLCBkZXRlY3RfZGVhZGxvY2ssIGxvY2ssIHdhaXRlciwKQEAgLTUzMiw3ICs1MzAsNyBAQAogCWludCBmaXJzdCA9ICh3YWl0ZXIgPT0gcnRfbXV0ZXhfdG9wX3dhaXRlcihsb2NrKSk7CiAJc3RydWN0IHRhc2tfc3RydWN0ICpvd25lciA9IHJ0X211dGV4X293bmVyKGxvY2spOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGJvb3N0ID0gMDsKKwlpbnQgY2hhaW5fd2FsayA9IDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmY3VycmVudC0+cGlfbG9jaywgZmxhZ3MpOwogCXBsaXN0X2RlbCgmd2FpdGVyLT5saXN0X2VudHJ5LCAmbG9jay0+d2FpdF9saXN0KTsKQEAgLTU1NCwxOSArNTUyLDIwIEBACiAJCX0KIAkJX19ydF9tdXRleF9hZGp1c3RfcHJpbyhvd25lcik7CiAKLQkJaWYgKG93bmVyLT5waV9ibG9ja2VkX29uKSB7Ci0JCQlib29zdCA9IDE7Ci0JCQkvKiBnZXRzIGRyb3BwZWQgaW4gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4oKSEgKi8KLQkJCWdldF90YXNrX3N0cnVjdChvd25lcik7Ci0JCX0KKwkJaWYgKG93bmVyLT5waV9ibG9ja2VkX29uKQorCQkJY2hhaW5fd2FsayA9IDE7CisKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmb3duZXItPnBpX2xvY2ssIGZsYWdzKTsKIAl9CiAKIAlXQVJOX09OKCFwbGlzdF9ub2RlX2VtcHR5KCZ3YWl0ZXItPnBpX2xpc3RfZW50cnkpKTsKIAotCWlmICghYm9vc3QpCisJaWYgKCFjaGFpbl93YWxrKQogCQlyZXR1cm47CiAKKwkvKiBnZXRzIGRyb3BwZWQgaW4gcnRfbXV0ZXhfYWRqdXN0X3ByaW9fY2hhaW4oKSEgKi8KKwlnZXRfdGFza19zdHJ1Y3Qob3duZXIpOworCiAJc3Bpbl91bmxvY2soJmxvY2stPndhaXRfbG9jayk7CiAKIAlydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbihvd25lciwgMCwgbG9jaywgTlVMTCwgY3VycmVudCk7CkBAIC01OTIsMTAgKzU5MSwxMCBAQAogCQlyZXR1cm47CiAJfQogCi0JLyogZ2V0cyBkcm9wcGVkIGluIHJ0X211dGV4X2FkanVzdF9wcmlvX2NoYWluKCkhICovCi0JZ2V0X3Rhc2tfc3RydWN0KHRhc2spOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhc2stPnBpX2xvY2ssIGZsYWdzKTsKIAorCS8qIGdldHMgZHJvcHBlZCBpbiBydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbigpISAqLworCWdldF90YXNrX3N0cnVjdCh0YXNrKTsKIAlydF9tdXRleF9hZGp1c3RfcHJpb19jaGFpbih0YXNrLCAwLCBOVUxMLCBOVUxMLCB0YXNrKTsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkLmMgYi9rZXJuZWwvc2NoZWQuYwppbmRleCA1Yzg0OGZkLi4yYmJkOTQ4IDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQuYworKysgYi9rZXJuZWwvc2NoZWQuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CiAjaW5jbHVkZSA8bGludXgvc3lzY2FsbHMuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lcy5oPgotI2luY2x1ZGUgPGxpbnV4L2FjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KICNpbmNsdWRlIDxhc20vdGxiLmg+CkBAIC0xNzU1LDI3ICsxNzU1LDI3IEBACiAJX19yZWxlYXNlcyhycS0+bG9jaykKIHsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHJxLT5wcmV2X21tOwotCXVuc2lnbmVkIGxvbmcgcHJldl90YXNrX2ZsYWdzOworCWxvbmcgcHJldl9zdGF0ZTsKIAogCXJxLT5wcmV2X21tID0gTlVMTDsKIAogCS8qCiAJICogQSB0YXNrIHN0cnVjdCBoYXMgb25lIHJlZmVyZW5jZSBmb3IgdGhlIHVzZSBhcyAiY3VycmVudCIuCi0JICogSWYgYSB0YXNrIGRpZXMsIHRoZW4gaXQgc2V0cyBFWElUX1pPTUJJRSBpbiB0c2stPmV4aXRfc3RhdGUgYW5kCi0JICogY2FsbHMgc2NoZWR1bGUgb25lIGxhc3QgdGltZS4gVGhlIHNjaGVkdWxlIGNhbGwgd2lsbCBuZXZlciByZXR1cm4sCi0JICogYW5kIHRoZSBzY2hlZHVsZWQgdGFzayBtdXN0IGRyb3AgdGhhdCByZWZlcmVuY2UuCi0JICogVGhlIHRlc3QgZm9yIEVYSVRfWk9NQklFIG11c3Qgb2NjdXIgd2hpbGUgdGhlIHJ1bnF1ZXVlIGxvY2tzIGFyZQorCSAqIElmIGEgdGFzayBkaWVzLCB0aGVuIGl0IHNldHMgVEFTS19ERUFEIGluIHRzay0+c3RhdGUgYW5kIGNhbGxzCisJICogc2NoZWR1bGUgb25lIGxhc3QgdGltZS4gVGhlIHNjaGVkdWxlIGNhbGwgd2lsbCBuZXZlciByZXR1cm4sIGFuZAorCSAqIHRoZSBzY2hlZHVsZWQgdGFzayBtdXN0IGRyb3AgdGhhdCByZWZlcmVuY2UuCisJICogVGhlIHRlc3QgZm9yIFRBU0tfREVBRCBtdXN0IG9jY3VyIHdoaWxlIHRoZSBydW5xdWV1ZSBsb2NrcyBhcmUKIAkgKiBzdGlsbCBoZWxkLCBvdGhlcndpc2UgcHJldiBjb3VsZCBiZSBzY2hlZHVsZWQgb24gYW5vdGhlciBjcHUsIGRpZQogCSAqIHRoZXJlIGJlZm9yZSB3ZSBsb29rIGF0IHByZXYtPnN0YXRlLCBhbmQgdGhlbiB0aGUgcmVmZXJlbmNlIHdvdWxkCiAJICogYmUgZHJvcHBlZCB0d2ljZS4KIAkgKgkJTWFuZnJlZCBTcHJhdWwgPG1hbmZyZWRAY29sb3JmdWxsaWZlLmNvbT4KIAkgKi8KLQlwcmV2X3Rhc2tfZmxhZ3MgPSBwcmV2LT5mbGFnczsKKwlwcmV2X3N0YXRlID0gcHJldi0+c3RhdGU7CiAJZmluaXNoX2FyY2hfc3dpdGNoKHByZXYpOwogCWZpbmlzaF9sb2NrX3N3aXRjaChycSwgcHJldik7CiAJaWYgKG1tKQogCQltbWRyb3AobW0pOwotCWlmICh1bmxpa2VseShwcmV2X3Rhc2tfZmxhZ3MgJiBQRl9ERUFEKSkgeworCWlmICh1bmxpa2VseShwcmV2X3N0YXRlID09IFRBU0tfREVBRCkpIHsKIAkJLyoKIAkJICogUmVtb3ZlIGZ1bmN0aW9uLXJldHVybiBwcm9iZSBpbnN0YW5jZXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMKIAkJICogdGFzayBhbmQgcHV0IHRoZW0gYmFjayBvbiB0aGUgZnJlZSBsaXN0LgpAQCAtMzM0OCw5ICszMzQ4LDYgQEAKIAogCXNwaW5fbG9ja19pcnEoJnJxLT5sb2NrKTsKIAotCWlmICh1bmxpa2VseShwcmV2LT5mbGFncyAmIFBGX0RFQUQpKQotCQlwcmV2LT5zdGF0ZSA9IEVYSVRfREVBRDsKLQogCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5uaXZjc3c7CiAJaWYgKHByZXYtPnN0YXRlICYmICEocHJlZW1wdF9jb3VudCgpICYgUFJFRU1QVF9BQ1RJVkUpKSB7CiAJCXN3aXRjaF9jb3VudCA9ICZwcmV2LT5udmNzdzsKQEAgLTQwODAsNiArNDA3Nyw4IEBACiAgKiBAcDogdGhlIHRhc2sgaW4gcXVlc3Rpb24uCiAgKiBAcG9saWN5OiBuZXcgcG9saWN5LgogICogQHBhcmFtOiBzdHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgbmV3IFJUIHByaW9yaXR5LgorICoKKyAqIE5PVEU6IHRoZSB0YXNrIG1heSBiZSBhbHJlYWR5IGRlYWQKICAqLwogaW50IHNjaGVkX3NldHNjaGVkdWxlcihzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBwb2xpY3ksCiAJCSAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKQpAQCAtNDEwNywyOCArNDEwNiwzMiBAQAogCSAgICAocC0+bW0gJiYgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4gTUFYX1VTRVJfUlRfUFJJTy0xKSB8fAogCSAgICAoIXAtPm1tICYmIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA+IE1BWF9SVF9QUklPLTEpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoKHBvbGljeSA9PSBTQ0hFRF9OT1JNQUwgfHwgcG9saWN5ID09IFNDSEVEX0JBVENIKQotCQkJCQkhPSAocGFyYW0tPnNjaGVkX3ByaW9yaXR5ID09IDApKQorCWlmIChpc19ydF9wb2xpY3kocG9saWN5KSAhPSAocGFyYW0tPnNjaGVkX3ByaW9yaXR5ICE9IDApKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qCiAJICogQWxsb3cgdW5wcml2aWxlZ2VkIFJUIHRhc2tzIHRvIGRlY3JlYXNlIHByaW9yaXR5OgogCSAqLwogCWlmICghY2FwYWJsZShDQVBfU1lTX05JQ0UpKSB7Ci0JCS8qCi0JCSAqIGNhbid0IGNoYW5nZSBwb2xpY3ksIGV4Y2VwdCBiZXR3ZWVuIFNDSEVEX05PUk1BTAotCQkgKiBhbmQgU0NIRURfQkFUQ0g6Ci0JCSAqLwotCQlpZiAoKChwb2xpY3kgIT0gU0NIRURfTk9STUFMICYmIHAtPnBvbGljeSAhPSBTQ0hFRF9CQVRDSCkgJiYKLQkJCShwb2xpY3kgIT0gU0NIRURfQkFUQ0ggJiYgcC0+cG9saWN5ICE9IFNDSEVEX05PUk1BTCkpICYmCi0JCQkJIXAtPnNpZ25hbC0+cmxpbVtSTElNSVRfUlRQUklPXS5ybGltX2N1cikKLQkJCXJldHVybiAtRVBFUk07Ci0JCS8qIGNhbid0IGluY3JlYXNlIHByaW9yaXR5ICovCi0JCWlmICgocG9saWN5ICE9IFNDSEVEX05PUk1BTCAmJiBwb2xpY3kgIT0gU0NIRURfQkFUQ0gpICYmCi0JCSAgICBwYXJhbS0+c2NoZWRfcHJpb3JpdHkgPiBwLT5ydF9wcmlvcml0eSAmJgotCQkgICAgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4KLQkJCQlwLT5zaWduYWwtPnJsaW1bUkxJTUlUX1JUUFJJT10ucmxpbV9jdXIpCi0JCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoaXNfcnRfcG9saWN5KHBvbGljeSkpIHsKKwkJCXVuc2lnbmVkIGxvbmcgcmxpbV9ydHByaW87CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJCQlpZiAoIWxvY2tfdGFza19zaWdoYW5kKHAsICZmbGFncykpCisJCQkJcmV0dXJuIC1FU1JDSDsKKwkJCXJsaW1fcnRwcmlvID0gcC0+c2lnbmFsLT5ybGltW1JMSU1JVF9SVFBSSU9dLnJsaW1fY3VyOworCQkJdW5sb2NrX3Rhc2tfc2lnaGFuZChwLCAmZmxhZ3MpOworCisJCQkvKiBjYW4ndCBzZXQvY2hhbmdlIHRoZSBydCBwb2xpY3kgKi8KKwkJCWlmIChwb2xpY3kgIT0gcC0+cG9saWN5ICYmICFybGltX3J0cHJpbykKKwkJCQlyZXR1cm4gLUVQRVJNOworCisJCQkvKiBjYW4ndCBpbmNyZWFzZSBwcmlvcml0eSAqLworCQkJaWYgKHBhcmFtLT5zY2hlZF9wcmlvcml0eSA+IHAtPnJ0X3ByaW9yaXR5ICYmCisJCQkgICAgcGFyYW0tPnNjaGVkX3ByaW9yaXR5ID4gcmxpbV9ydHByaW8pCisJCQkJcmV0dXJuIC1FUEVSTTsKKwkJfQorCiAJCS8qIGNhbid0IGNoYW5nZSBvdGhlciB1c2VyJ3MgcHJpb3JpdGllcyAqLwogCQlpZiAoKGN1cnJlbnQtPmV1aWQgIT0gcC0+ZXVpZCkgJiYKIAkJICAgIChjdXJyZW50LT5ldWlkICE9IHAtPnVpZCkpCkBAIC00MTkzLDE0ICs0MTk2LDEzIEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjb3B5X2Zyb21fdXNlcigmbHBhcmFtLCBwYXJhbSwgc2l6ZW9mKHN0cnVjdCBzY2hlZF9wYXJhbSkpKQogCQlyZXR1cm4gLUVGQVVMVDsKLQlyZWFkX2xvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKworCXJjdV9yZWFkX2xvY2soKTsKKwlyZXR2YWwgPSAtRVNSQ0g7CiAJcCA9IGZpbmRfcHJvY2Vzc19ieV9waWQocGlkKTsKLQlpZiAoIXApIHsKLQkJcmVhZF91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKLQkJcmV0dXJuIC1FU1JDSDsKLQl9Ci0JcmV0dmFsID0gc2NoZWRfc2V0c2NoZWR1bGVyKHAsIHBvbGljeSwgJmxwYXJhbSk7Ci0JcmVhZF91bmxvY2tfaXJxKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZiAocCAhPSBOVUxMKQorCQlyZXR2YWwgPSBzY2hlZF9zZXRzY2hlZHVsZXIocCwgcG9saWN5LCAmbHBhcmFtKTsKKwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiByZXR2YWw7CiB9CkBAIC01MTUxLDcgKzUxNTMsNyBAQAogCUJVR19PTihwLT5leGl0X3N0YXRlICE9IEVYSVRfWk9NQklFICYmIHAtPmV4aXRfc3RhdGUgIT0gRVhJVF9ERUFEKTsKIAogCS8qIENhbm5vdCBoYXZlIGRvbmUgZmluYWwgc2NoZWR1bGUgeWV0OiB3b3VsZCBoYXZlIHZhbmlzaGVkLiAqLwotCUJVR19PTihwLT5mbGFncyAmIFBGX0RFQUQpOworCUJVR19PTihwLT5zdGF0ZSA9PSBUQVNLX0RFQUQpOwogCiAJZ2V0X3Rhc2tfc3RydWN0KHApOwogCkBAIC01MjcyLDkgKzUyNzQsMTEgQEAKIGludCBfX2luaXQgbWlncmF0aW9uX2luaXQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgZXJyOwogCiAJLyogU3RhcnQgb25lIGZvciB0aGUgYm9vdCBDUFU6ICovCi0JbWlncmF0aW9uX2NhbGwoJm1pZ3JhdGlvbl9ub3RpZmllciwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CisJZXJyID0gbWlncmF0aW9uX2NhbGwoJm1pZ3JhdGlvbl9ub3RpZmllciwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CisJQlVHX09OKGVyciA9PSBOT1RJRllfQkFEKTsKIAltaWdyYXRpb25fY2FsbCgmbWlncmF0aW9uX25vdGlmaWVyLCBDUFVfT05MSU5FLCBjcHUpOwogCXJlZ2lzdGVyX2NwdV9ub3RpZmllcigmbWlncmF0aW9uX25vdGlmaWVyKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NpZ25hbC5jIGIva2VybmVsL3NpZ25hbC5jCmluZGV4IGJmZGI1Njg2Li5mYjVkYTZkIDEwMDY0NAotLS0gYS9rZXJuZWwvc2lnbmFsLmMKKysrIGIva2VybmVsL3NpZ25hbC5jCkBAIC00MTcsOSArNDE3LDggQEAKIHN0YXRpYyBpbnQgX19kZXF1ZXVlX3NpZ25hbChzdHJ1Y3Qgc2lncGVuZGluZyAqcGVuZGluZywgc2lnc2V0X3QgKm1hc2ssCiAJCQlzaWdpbmZvX3QgKmluZm8pCiB7Ci0JaW50IHNpZyA9IDA7CisJaW50IHNpZyA9IG5leHRfc2lnbmFsKHBlbmRpbmcsIG1hc2spOwogCi0Jc2lnID0gbmV4dF9zaWduYWwocGVuZGluZywgbWFzayk7CiAJaWYgKHNpZykgewogCQlpZiAoY3VycmVudC0+bm90aWZpZXIpIHsKIAkJCWlmIChzaWdpc21lbWJlcihjdXJyZW50LT5ub3RpZmllcl9tYXNrLCBzaWcpKSB7CkBAIC00MzIsOSArNDMxLDcgQEAKIAogCQlpZiAoIWNvbGxlY3Rfc2lnbmFsKHNpZywgcGVuZGluZywgaW5mbykpCiAJCQlzaWcgPSAwOwotCQkJCQogCX0KLQlyZWNhbGNfc2lncGVuZGluZygpOwogCiAJcmV0dXJuIHNpZzsKIH0KQEAgLTQ1MSw2ICs0NDgsNyBAQAogCWlmICghc2lnbnIpCiAJCXNpZ25yID0gX19kZXF1ZXVlX3NpZ25hbCgmdHNrLT5zaWduYWwtPnNoYXJlZF9wZW5kaW5nLAogCQkJCQkgbWFzaywgaW5mbyk7CisJcmVjYWxjX3NpZ3BlbmRpbmdfdHNrKHRzayk7CiAgCWlmIChzaWduciAmJiB1bmxpa2VseShzaWdfa2VybmVsX3N0b3Aoc2lnbnIpKSkgewogIAkJLyoKICAJCSAqIFNldCBhIG1hcmtlciB0aGF0IHdlIGhhdmUgZGVxdWV1ZWQgYSBzdG9wIHNpZ25hbC4gIE91cgpAQCAtMjU3Nyw2ICsyNTc1LDExIEBACiB9CiAjZW5kaWYgLyogX19BUkNIX1dBTlRfU1lTX1JUX1NJR1NVU1BFTkQgKi8KIAorX19hdHRyaWJ1dGVfXygod2VhaykpIGNvbnN0IGNoYXIgKmFyY2hfdm1hX25hbWUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKIHZvaWQgX19pbml0IHNpZ25hbHNfaW5pdCh2b2lkKQogewogCXNpZ3F1ZXVlX2NhY2hlcCA9CmRpZmYgLS1naXQgYS9rZXJuZWwvc29mdGlycS5jIGIva2VybmVsL3NvZnRpcnEuYwppbmRleCAzNzg5Y2E5Li5iZjI1MDE1IDEwMDY0NAotLS0gYS9rZXJuZWwvc29mdGlycS5jCisrKyBiL2tlcm5lbC9zb2Z0aXJxLmMKQEAgLTYxMiw3ICs2MTIsOSBAQAogX19pbml0IGludCBzcGF3bl9rc29mdGlycWQodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKLQljcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOworCWludCBlcnIgPSBjcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9VUF9QUkVQQVJFLCBjcHUpOworCisJQlVHX09OKGVyciA9PSBOT1RJRllfQkFEKTsKIAljcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9PTkxJTkUsIGNwdSk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfbmZiKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMgYi9rZXJuZWwvc29mdGxvY2t1cC5jCmluZGV4IDAzZTZhMmIuLjUwYWZlYjggMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zb2Z0bG9ja3VwLmMKKysrIGIva2VybmVsL3NvZnRsb2NrdXAuYwpAQCAtMTQ5LDggKzE0OSw5IEBACiBfX2luaXQgdm9pZCBzcGF3bl9zb2Z0bG9ja3VwX3Rhc2sodm9pZCkKIHsKIAl2b2lkICpjcHUgPSAodm9pZCAqKShsb25nKXNtcF9wcm9jZXNzb3JfaWQoKTsKKwlpbnQgZXJyID0gY3B1X2NhbGxiYWNrKCZjcHVfbmZiLCBDUFVfVVBfUFJFUEFSRSwgY3B1KTsKIAotCWNwdV9jYWxsYmFjaygmY3B1X25mYiwgQ1BVX1VQX1BSRVBBUkUsIGNwdSk7CisJQlVHX09OKGVyciA9PSBOT1RJRllfQkFEKTsKIAljcHVfY2FsbGJhY2soJmNwdV9uZmIsIENQVV9PTkxJTkUsIGNwdSk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZjcHVfbmZiKTsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3NwaW5sb2NrLmMgYi9rZXJuZWwvc3BpbmxvY2suYwppbmRleCA5NjQ0YTQxLi40NzZjMzc0IDEwMDY0NAotLS0gYS9rZXJuZWwvc3BpbmxvY2suYworKysgYi9rZXJuZWwvc3BpbmxvY2suYwpAQCAtMjEsMTcgKzIxLDYgQEAKICNpbmNsdWRlIDxsaW51eC9kZWJ1Z19sb2Nrcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogCi0vKgotICogR2VuZXJpYyBkZWNsYXJhdGlvbiBvZiB0aGUgcmF3IHJlYWRfdHJ5bG9jaygpIGZ1bmN0aW9uLAotICogYXJjaGl0ZWN0dXJlcyBhcmUgc3VwcG9zZWQgdG8gb3B0aW1pemUgdGhpczoKLSAqLwotaW50IF9fbG9ja2Z1bmMgZ2VuZXJpY19fcmF3X3JlYWRfdHJ5bG9jayhyYXdfcndsb2NrX3QgKmxvY2spCi17Ci0JX19yYXdfcmVhZF9sb2NrKGxvY2spOwotCXJldHVybiAxOwotfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX19yYXdfcmVhZF90cnlsb2NrKTsKLQogaW50IF9fbG9ja2Z1bmMgX3NwaW5fdHJ5bG9jayhzcGlubG9ja190ICpsb2NrKQogewogCXByZWVtcHRfZGlzYWJsZSgpOwpAQCAtMjI2LDcgKzIxNSw3IEBACiAJCWlmICghKGxvY2spLT5icmVha19sb2NrKQkJCQlcCiAJCQkobG9jayktPmJyZWFrX2xvY2sgPSAxOwkJCQlcCiAJCXdoaWxlICghb3AjI19jYW5fbG9jayhsb2NrKSAmJiAobG9jayktPmJyZWFrX2xvY2spCVwKLQkJCWNwdV9yZWxheCgpOwkJCQkJXAorCQkJX3Jhd18jI29wIyNfcmVsYXgoJmxvY2stPnJhd19sb2NrKTsJCVwKIAl9CQkJCQkJCQlcCiAJKGxvY2spLT5icmVha19sb2NrID0gMDsJCQkJCQlcCiB9CQkJCQkJCQkJXApAQCAtMjQ4LDcgKzIzNyw3IEBACiAJCWlmICghKGxvY2spLT5icmVha19sb2NrKQkJCQlcCiAJCQkobG9jayktPmJyZWFrX2xvY2sgPSAxOwkJCQlcCiAJCXdoaWxlICghb3AjI19jYW5fbG9jayhsb2NrKSAmJiAobG9jayktPmJyZWFrX2xvY2spCVwKLQkJCWNwdV9yZWxheCgpOwkJCQkJXAorCQkJX3Jhd18jI29wIyNfcmVsYXgoJmxvY2stPnJhd19sb2NrKTsJCVwKIAl9CQkJCQkJCQlcCiAJKGxvY2spLT5icmVha19sb2NrID0gMDsJCQkJCQlcCiAJcmV0dXJuIGZsYWdzOwkJCQkJCQlcCmRpZmYgLS1naXQgYS9rZXJuZWwvc3RvcF9tYWNoaW5lLmMgYi9rZXJuZWwvc3RvcF9tYWNoaW5lLmMKaW5kZXggNTFjYWNkMS4uMTI0NTgwNCAxMDA2NDQKLS0tIGEva2VybmVsL3N0b3BfbWFjaGluZS5jCisrKyBiL2tlcm5lbC9zdG9wX21hY2hpbmUuYwpAQCAtMSwzICsxLDYgQEAKKy8qIENvcHlyaWdodCAyMDA1IFJ1c3R5IFJ1c3NlbGwgcnVzdHlAcnVzdGNvcnAuY29tLmF1IElCTSBDb3Jwb3JhdGlvbi4KKyAqIEdQTCB2MiBhbmQgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KICNpbmNsdWRlIDxsaW51eC9zdG9wX21hY2hpbmUuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuYwppbmRleCAzZjg5NDc3Li4yNDYwNTgxIDEwMDY0NAotLS0gYS9rZXJuZWwvc3lzLmMKKysrIGIva2VybmVsL3N5cy5jCkBAIC02MDcsMTIgKzYwNywxMCBAQAogdm9pZCBrZXJuZWxfcmVzdGFydChjaGFyICpjbWQpCiB7CiAJa2VybmVsX3Jlc3RhcnRfcHJlcGFyZShjbWQpOwotCWlmICghY21kKSB7CisJaWYgKCFjbWQpCiAJCXByaW50ayhLRVJOX0VNRVJHICJSZXN0YXJ0aW5nIHN5c3RlbS5cbiIpOwotCX0gZWxzZSB7CisJZWxzZQogCQlwcmludGsoS0VSTl9FTUVSRyAiUmVzdGFydGluZyBzeXN0ZW0gd2l0aCBjb21tYW5kICclcycuXG4iLCBjbWQpOwotCX0KLQlwcmludGsoIi5cbiIpOwogCW1hY2hpbmVfcmVzdGFydChjbWQpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoa2VybmVsX3Jlc3RhcnQpOwpAQCAtNjI4LDkgKzYyNiw4IEBACiAjaWZkZWYgQ09ORklHX0tFWEVDCiAJc3RydWN0IGtpbWFnZSAqaW1hZ2U7CiAJaW1hZ2UgPSB4Y2hnKCZrZXhlY19pbWFnZSwgTlVMTCk7Ci0JaWYgKCFpbWFnZSkgeworCWlmICghaW1hZ2UpCiAJCXJldHVybjsKLQl9CiAJa2VybmVsX3Jlc3RhcnRfcHJlcGFyZShOVUxMKTsKIAlwcmludGsoS0VSTl9FTUVSRyAiU3RhcnRpbmcgbmV3IGtlcm5lbFxuIik7CiAJbWFjaGluZV9zaHV0ZG93bigpOwpAQCAtODI0LDEyICs4MjEsMTAgQEAKIAkJICAgIChjdXJyZW50LT5zZ2lkID09IGVnaWQpIHx8CiAJCSAgICBjYXBhYmxlKENBUF9TRVRHSUQpKQogCQkJbmV3X2VnaWQgPSBlZ2lkOwotCQllbHNlIHsKKwkJZWxzZQogCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQogCX0KLQlpZiAobmV3X2VnaWQgIT0gb2xkX2VnaWQpCi0JeworCWlmIChuZXdfZWdpZCAhPSBvbGRfZWdpZCkgewogCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSBzdWlkX2R1bXBhYmxlOwogCQlzbXBfd21iKCk7CiAJfQpAQCAtODU4LDE5ICs4NTMsMTQgQEAKIAlpZiAocmV0dmFsKQogCQlyZXR1cm4gcmV0dmFsOwogCi0JaWYgKGNhcGFibGUoQ0FQX1NFVEdJRCkpCi0JewotCQlpZihvbGRfZWdpZCAhPSBnaWQpCi0JCXsKKwlpZiAoY2FwYWJsZShDQVBfU0VUR0lEKSkgeworCQlpZiAob2xkX2VnaWQgIT0gZ2lkKSB7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSBzdWlkX2R1bXBhYmxlOwogCQkJc21wX3dtYigpOwogCQl9CiAJCWN1cnJlbnQtPmdpZCA9IGN1cnJlbnQtPmVnaWQgPSBjdXJyZW50LT5zZ2lkID0gY3VycmVudC0+ZnNnaWQgPSBnaWQ7Ci0JfQotCWVsc2UgaWYgKChnaWQgPT0gY3VycmVudC0+Z2lkKSB8fCAoZ2lkID09IGN1cnJlbnQtPnNnaWQpKQotCXsKLQkJaWYob2xkX2VnaWQgIT0gZ2lkKQotCQl7CisJfSBlbHNlIGlmICgoZ2lkID09IGN1cnJlbnQtPmdpZCkgfHwgKGdpZCA9PSBjdXJyZW50LT5zZ2lkKSkgeworCQlpZiAob2xkX2VnaWQgIT0gZ2lkKSB7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSBzdWlkX2R1bXBhYmxlOwogCQkJc21wX3dtYigpOwogCQl9CkBAIC05MDEsOCArODkxLDcgQEAKIAogCXN3aXRjaF91aWQobmV3X3VzZXIpOwogCi0JaWYoZHVtcGNsZWFyKQotCXsKKwlpZiAoZHVtcGNsZWFyKSB7CiAJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IHN1aWRfZHVtcGFibGU7CiAJCXNtcF93bWIoKTsKIAl9CkBAIC05NTgsOCArOTQ3LDcgQEAKIAlpZiAobmV3X3J1aWQgIT0gb2xkX3J1aWQgJiYgc2V0X3VzZXIobmV3X3J1aWQsIG5ld19ldWlkICE9IG9sZF9ldWlkKSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCi0JaWYgKG5ld19ldWlkICE9IG9sZF9ldWlkKQotCXsKKwlpZiAobmV3X2V1aWQgIT0gb2xkX2V1aWQpIHsKIAkJY3VycmVudC0+bW0tPmR1bXBhYmxlID0gc3VpZF9kdW1wYWJsZTsKIAkJc21wX3dtYigpOwogCX0KQEAgLTEwMDksOCArOTk3LDcgQEAKIAl9IGVsc2UgaWYgKCh1aWQgIT0gY3VycmVudC0+dWlkKSAmJiAodWlkICE9IG5ld19zdWlkKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAotCWlmIChvbGRfZXVpZCAhPSB1aWQpCi0JeworCWlmIChvbGRfZXVpZCAhPSB1aWQpIHsKIAkJY3VycmVudC0+bW0tPmR1bXBhYmxlID0gc3VpZF9kdW1wYWJsZTsKIAkJc21wX3dtYigpOwogCX0KQEAgLTEwNTUsOCArMTA0Miw3IEBACiAJCQlyZXR1cm4gLUVBR0FJTjsKIAl9CiAJaWYgKGV1aWQgIT0gKHVpZF90KSAtMSkgewotCQlpZiAoZXVpZCAhPSBjdXJyZW50LT5ldWlkKQotCQl7CisJCWlmIChldWlkICE9IGN1cnJlbnQtPmV1aWQpIHsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IHN1aWRfZHVtcGFibGU7CiAJCQlzbXBfd21iKCk7CiAJCX0KQEAgLTExMDYsOCArMTA5Miw3IEBACiAJCQlyZXR1cm4gLUVQRVJNOwogCX0KIAlpZiAoZWdpZCAhPSAoZ2lkX3QpIC0xKSB7Ci0JCWlmIChlZ2lkICE9IGN1cnJlbnQtPmVnaWQpCi0JCXsKKwkJaWYgKGVnaWQgIT0gY3VycmVudC0+ZWdpZCkgewogCQkJY3VycmVudC0+bW0tPmR1bXBhYmxlID0gc3VpZF9kdW1wYWJsZTsKIAkJCXNtcF93bWIoKTsKIAkJfQpAQCAtMTE1MiwxMCArMTEzNyw4IEBACiAKIAlpZiAodWlkID09IGN1cnJlbnQtPnVpZCB8fCB1aWQgPT0gY3VycmVudC0+ZXVpZCB8fAogCSAgICB1aWQgPT0gY3VycmVudC0+c3VpZCB8fCB1aWQgPT0gY3VycmVudC0+ZnN1aWQgfHwgCi0JICAgIGNhcGFibGUoQ0FQX1NFVFVJRCkpCi0JewotCQlpZiAodWlkICE9IG9sZF9mc3VpZCkKLQkJeworCSAgICBjYXBhYmxlKENBUF9TRVRVSUQpKSB7CisJCWlmICh1aWQgIT0gb2xkX2ZzdWlkKSB7CiAJCQljdXJyZW50LT5tbS0+ZHVtcGFibGUgPSBzdWlkX2R1bXBhYmxlOwogCQkJc21wX3dtYigpOwogCQl9CkBAIC0xMTgzLDEwICsxMTY2LDggQEAKIAogCWlmIChnaWQgPT0gY3VycmVudC0+Z2lkIHx8IGdpZCA9PSBjdXJyZW50LT5lZ2lkIHx8CiAJICAgIGdpZCA9PSBjdXJyZW50LT5zZ2lkIHx8IGdpZCA9PSBjdXJyZW50LT5mc2dpZCB8fCAKLQkgICAgY2FwYWJsZShDQVBfU0VUR0lEKSkKLQl7Ci0JCWlmIChnaWQgIT0gb2xkX2ZzZ2lkKQotCQl7CisJICAgIGNhcGFibGUoQ0FQX1NFVEdJRCkpIHsKKwkJaWYgKGdpZCAhPSBvbGRfZnNnaWQpIHsKIAkJCWN1cnJlbnQtPm1tLT5kdW1wYWJsZSA9IHN1aWRfZHVtcGFibGU7CiAJCQlzbXBfd21iKCk7CiAJCX0KQEAgLTEzMjIsOSArMTMwMyw5IEBACiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfZ2V0cGdpZChwaWRfdCBwaWQpCiB7Ci0JaWYgKCFwaWQpIHsKKwlpZiAoIXBpZCkKIAkJcmV0dXJuIHByb2Nlc3NfZ3JvdXAoY3VycmVudCk7Ci0JfSBlbHNlIHsKKwllbHNlIHsKIAkJaW50IHJldHZhbDsKIAkJc3RydWN0IHRhc2tfc3RydWN0ICpwOwogCkBAIC0xMzU0LDkgKzEzMzUsOSBAQAogCiBhc21saW5rYWdlIGxvbmcgc3lzX2dldHNpZChwaWRfdCBwaWQpCiB7Ci0JaWYgKCFwaWQpIHsKKwlpZiAoIXBpZCkKIAkJcmV0dXJuIGN1cnJlbnQtPnNpZ25hbC0+c2Vzc2lvbjsKLQl9IGVsc2UgeworCWVsc2UgewogCQlpbnQgcmV0dmFsOwogCQlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnA7CiAKQEAgLTEzNjQsNyArMTM0NSw3IEBACiAJCXAgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CiAKIAkJcmV0dmFsID0gLUVTUkNIOwotCQlpZihwKSB7CisJCWlmIChwKSB7CiAJCQlyZXR2YWwgPSBzZWN1cml0eV90YXNrX2dldHNpZChwKTsKIAkJCWlmICghcmV0dmFsKQogCQkJCXJldHZhbCA9IHAtPnNpZ25hbC0+c2Vzc2lvbjsKQEAgLTE0MzIsOSArMTQxMyw5IEBACiAJZ3JvdXBfaW5mby0+bmJsb2NrcyA9IG5ibG9ja3M7CiAJYXRvbWljX3NldCgmZ3JvdXBfaW5mby0+dXNhZ2UsIDEpOwogCi0JaWYgKGdpZHNldHNpemUgPD0gTkdST1VQU19TTUFMTCkgeworCWlmIChnaWRzZXRzaXplIDw9IE5HUk9VUFNfU01BTEwpCiAJCWdyb3VwX2luZm8tPmJsb2Nrc1swXSA9IGdyb3VwX2luZm8tPnNtYWxsX2Jsb2NrOwotCX0gZWxzZSB7CisJZWxzZSB7CiAJCWZvciAoaSA9IDA7IGkgPCBuYmxvY2tzOyBpKyspIHsKIAkJCWdpZF90ICpiOwogCQkJYiA9ICh2b2lkICopX19nZXRfZnJlZV9wYWdlKEdGUF9VU0VSKTsKQEAgLTE0OTAsNyArMTQ3MSw3IEBACiAvKiBmaWxsIGEgZ3JvdXBfaW5mbyBmcm9tIGEgdXNlci1zcGFjZSBhcnJheSAtIGl0IG11c3QgYmUgYWxsb2NhdGVkIGFscmVhZHkgKi8KIHN0YXRpYyBpbnQgZ3JvdXBzX2Zyb21fdXNlcihzdHJ1Y3QgZ3JvdXBfaW5mbyAqZ3JvdXBfaW5mbywKICAgICBnaWRfdCBfX3VzZXIgKmdyb3VwbGlzdCkKLSB7Cit7CiAJaW50IGk7CiAJaW50IGNvdW50ID0gZ3JvdXBfaW5mby0+bmdyb3VwczsKIApAQCAtMTY0OCw5ICsxNjI5LDggQEAKIGludCBpbl9ncm91cF9wKGdpZF90IGdycCkKIHsKIAlpbnQgcmV0dmFsID0gMTsKLQlpZiAoZ3JwICE9IGN1cnJlbnQtPmZzZ2lkKSB7CisJaWYgKGdycCAhPSBjdXJyZW50LT5mc2dpZCkKIAkJcmV0dmFsID0gZ3JvdXBzX3NlYXJjaChjdXJyZW50LT5ncm91cF9pbmZvLCBncnApOwotCX0KIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNjU5LDkgKzE2MzksOCBAQAogaW50IGluX2Vncm91cF9wKGdpZF90IGdycCkKIHsKIAlpbnQgcmV0dmFsID0gMTsKLQlpZiAoZ3JwICE9IGN1cnJlbnQtPmVnaWQpIHsKKwlpZiAoZ3JwICE9IGN1cnJlbnQtPmVnaWQpCiAJCXJldHZhbCA9IGdyb3Vwc19zZWFyY2goY3VycmVudC0+Z3JvdXBfaW5mbywgZ3JwKTsKLQl9CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTc3Niw5ICsxNzU1LDkgQEAKIAl0YXNrX2xvY2soY3VycmVudC0+Z3JvdXBfbGVhZGVyKTsKIAl4ID0gY3VycmVudC0+c2lnbmFsLT5ybGltW3Jlc291cmNlXTsKIAl0YXNrX3VubG9jayhjdXJyZW50LT5ncm91cF9sZWFkZXIpOwotCWlmKHgucmxpbV9jdXIgPiAweDdGRkZGRkZGKQorCWlmICh4LnJsaW1fY3VyID4gMHg3RkZGRkZGRikKIAkJeC5ybGltX2N1ciA9IDB4N0ZGRkZGRkY7Ci0JaWYoeC5ybGltX21heCA+IDB4N0ZGRkZGRkYpCisJaWYgKHgucmxpbV9tYXggPiAweDdGRkZGRkZGKQogCQl4LnJsaW1fbWF4ID0gMHg3RkZGRkZGRjsKIAlyZXR1cm4gY29weV90b191c2VyKHJsaW0sICZ4LCBzaXplb2YoeCkpPy1FRkFVTFQ6MDsKIH0KQEAgLTIwODQsMTIgKzIwNjMsMTIgQEAKIAkJICogcGFkZGluZwogCQkgKi8KIAkJdW5zaWduZWQgbG9uZyB0MCwgdDE7Ci0JCWdldF91c2VyKHQwLCAmY2FjaGUtPnQwKTsKLQkJZ2V0X3VzZXIodDEsICZjYWNoZS0+dDEpOworCQlnZXRfdXNlcih0MCwgJmNhY2hlLT5ibG9iWzBdKTsKKwkJZ2V0X3VzZXIodDEsICZjYWNoZS0+YmxvYlsxXSk7CiAJCXQwKys7CiAJCXQxKys7Ci0JCXB1dF91c2VyKHQwLCAmY2FjaGUtPnQwKTsKLQkJcHV0X3VzZXIodDEsICZjYWNoZS0+dDEpOworCQlwdXRfdXNlcih0MCwgJmNhY2hlLT5ibG9iWzBdKTsKKwkJcHV0X3VzZXIodDEsICZjYWNoZS0+YmxvYlsxXSk7CiAJfQogCXJldHVybiBlcnIgPyAtRUZBVUxUIDogMDsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXNfbmkuYyBiL2tlcm5lbC9zeXNfbmkuYwppbmRleCA2OTkxYmVjLi43YTNiMmU3NSAxMDA2NDQKLS0tIGEva2VybmVsL3N5c19uaS5jCisrKyBiL2tlcm5lbC9zeXNfbmkuYwpAQCAtMTM0LDMgKzEzNCw4IEBACiBjb25kX3N5c2NhbGwoc3lzX21yZW1hcCk7CiBjb25kX3N5c2NhbGwoc3lzX3JlbWFwX2ZpbGVfcGFnZXMpOwogY29uZF9zeXNjYWxsKGNvbXBhdF9zeXNfbW92ZV9wYWdlcyk7CisKKy8qIGJsb2NrLWxheWVyIGRlcGVuZGVudCAqLworY29uZF9zeXNjYWxsKHN5c19iZGZsdXNoKTsKK2NvbmRfc3lzY2FsbChzeXNfaW9wcmlvX3NldCk7Citjb25kX3N5c2NhbGwoc3lzX2lvcHJpb19nZXQpOwpkaWZmIC0tZ2l0IGEva2VybmVsL3N5c2N0bC5jIGIva2VybmVsL3N5c2N0bC5jCmluZGV4IGJjYjNhMTguLmJhNDI2OTQgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXNjdGwuYworKysgYi9rZXJuZWwvc3lzY3RsLmMKQEAgLTUyLDYgKzUyLDEwIEBACiBleHRlcm4gaW50IHByb2NfbnJfZmlsZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKICAgICAgICAgICAgICAgICAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKIAorI2lmZGVmIENPTkZJR19YODYKKyNpbmNsdWRlIDxhc20vbm1pLmg+CisjZW5kaWYKKwogI2lmIGRlZmluZWQoQ09ORklHX1NZU0NUTCkKIAogLyogRXh0ZXJuYWwgdmFyaWFibGVzIG5vdCBpbiBhIGhlYWRlciBmaWxlLiAqLwpAQCAtNzQsMTMgKzc4LDYgQEAKIGV4dGVybiBpbnQgcGVyY3B1X3BhZ2VsaXN0X2ZyYWN0aW9uOwogZXh0ZXJuIGludCBjb21wYXRfbG9nOwogCi0jaWYgZGVmaW5lZChDT05GSUdfWDg2X0xPQ0FMX0FQSUMpICYmIGRlZmluZWQoQ09ORklHX1g4NikKLWludCB1bmtub3duX25taV9wYW5pYzsKLWludCBubWlfd2F0Y2hkb2dfZW5hYmxlZDsKLWV4dGVybiBpbnQgcHJvY19ubWlfZW5hYmxlZChzdHJ1Y3QgY3RsX3RhYmxlICosIGludCAsIHN0cnVjdCBmaWxlICosCi0JCQl2b2lkIF9fdXNlciAqLCBzaXplX3QgKiwgbG9mZl90ICopOwotI2VuZGlmCi0KIC8qIHRoaXMgaXMgbmVlZGVkIGZvciB0aGUgcHJvY19kb2ludHZlY19taW5tYXggZm9yIFtmc19db3ZlcmZsb3cgVUlEIGFuZCBHSUQgKi8KIHN0YXRpYyBpbnQgbWF4b2xkdWlkID0gNjU1MzU7CiBzdGF0aWMgaW50IG1pbm9sZHVpZDsKQEAgLTEzNyw4ICsxMzQsMTEgQEAKIGV4dGVybiBpbnQgbWF4X2xvY2tfZGVwdGg7CiAjZW5kaWYKIAotc3RhdGljIGludCBwYXJzZV90YWJsZShpbnQgX191c2VyICosIGludCwgdm9pZCBfX3VzZXIgKiwgc2l6ZV90IF9fdXNlciAqLCB2b2lkIF9fdXNlciAqLCBzaXplX3QsCi0JCSAgICAgICBjdGxfdGFibGUgKiwgdm9pZCAqKik7CisjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCitzdGF0aWMgaW50IHBhcnNlX3RhYmxlKGludCBfX3VzZXIgKiwgaW50LCB2b2lkIF9fdXNlciAqLCBzaXplX3QgX191c2VyICosCisJCXZvaWQgX191c2VyICosIHNpemVfdCwgY3RsX3RhYmxlICosIHZvaWQgKiopOworI2VuZGlmCisKIHN0YXRpYyBpbnQgcHJvY19kb3V0c3N0cmluZyhjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAogCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKTsKIApAQCAtMTY1LDcgKzE2NSw3IEBACiAKIC8qIC9wcm9jIGRlY2xhcmF0aW9uczogKi8KIAotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAKIHN0YXRpYyBzc2l6ZV90IHByb2NfcmVhZHN5cyhzdHJ1Y3QgZmlsZSAqLCBjaGFyIF9fdXNlciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKIHN0YXRpYyBzc2l6ZV90IHByb2Nfd3JpdGVzeXMoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciBfX3VzZXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CkBAIC0yOTQsNyArMjk0LDcgQEAKIAkJLmN0bF9uYW1lCT0gS0VSTl9DT1JFX1BBVFRFUk4sCiAJCS5wcm9jbmFtZQk9ICJjb3JlX3BhdHRlcm4iLAogCQkuZGF0YQkJPSBjb3JlX3BhdHRlcm4sCi0JCS5tYXhsZW4JCT0gNjQsCisJCS5tYXhsZW4JCT0gMTI4LAogCQkubW9kZQkJPSAwNjQ0LAogCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9zdHJpbmcsCiAJCS5zdHJhdGVneQk9ICZzeXNjdGxfc3RyaW5nLApAQCAtMTE2NiwxMiArMTE2NiwxMyBAQAogCiB2b2lkIF9faW5pdCBzeXNjdGxfaW5pdCh2b2lkKQogewotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAJcmVnaXN0ZXJfcHJvY190YWJsZShyb290X3RhYmxlLCBwcm9jX3N5c19yb290LCAmcm9vdF90YWJsZV9oZWFkZXIpOwogCWluaXRfaXJxX3Byb2MoKTsKICNlbmRpZgogfQogCisjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCiBpbnQgZG9fc3lzY3RsKGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLCB2b2lkIF9fdXNlciAqb2xkdmFsLCBzaXplX3QgX191c2VyICpvbGRsZW5wLAogCSAgICAgICB2b2lkIF9fdXNlciAqbmV3dmFsLCBzaXplX3QgbmV3bGVuKQogewpAQCAtMTIyNSw2ICsxMjI2LDcgQEAKIAl1bmxvY2tfa2VybmVsKCk7CiAJcmV0dXJuIGVycm9yOwogfQorI2VuZGlmIC8qIENPTkZJR19TWVNDVExfU1lTQ0FMTCAqLwogCiAvKgogICogY3RsX3Blcm0gZG9lcyBOT1QgZ3JhbnQgdGhlIHN1cGVydXNlciBhbGwgcmlnaHRzIGF1dG9tYXRpY2FsbHksIGJlY2F1c2UKQEAgLTEyNTEsNiArMTI1Myw3IEBACiAJcmV0dXJuIHRlc3RfcGVybSh0YWJsZS0+bW9kZSwgb3ApOwogfQogCisjaWZkZWYgQ09ORklHX1NZU0NUTF9TWVNDQUxMCiBzdGF0aWMgaW50IHBhcnNlX3RhYmxlKGludCBfX3VzZXIgKm5hbWUsIGludCBubGVuLAogCQkgICAgICAgdm9pZCBfX3VzZXIgKm9sZHZhbCwgc2l6ZV90IF9fdXNlciAqb2xkbGVucCwKIAkJICAgICAgIHZvaWQgX191c2VyICpuZXd2YWwsIHNpemVfdCBuZXdsZW4sCkBAIC0xMzQwLDYgKzEzNDMsNyBAQAogCX0KIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwgKi8KIAogLyoqCiAgKiByZWdpc3Rlcl9zeXNjdGxfdGFibGUgLSByZWdpc3RlciBhIHN5c2N0bCBoaWVyYXJjaHkKQEAgLTE0MjcsNyArMTQzMSw3IEBACiAJZWxzZQogCQlsaXN0X2FkZF90YWlsKCZ0bXAtPmN0bF9lbnRyeSwgJnJvb3RfdGFibGVfaGVhZGVyLmN0bF9lbnRyeSk7CiAJc3Bpbl91bmxvY2soJnN5c2N0bF9sb2NrKTsKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCXJlZ2lzdGVyX3Byb2NfdGFibGUodGFibGUsIHByb2Nfc3lzX3Jvb3QsIHRtcCk7CiAjZW5kaWYKIAlyZXR1cm4gdG1wOwpAQCAtMTQ0NSwxOCArMTQ0OSwzMSBAQAogCW1pZ2h0X3NsZWVwKCk7CiAJc3Bpbl9sb2NrKCZzeXNjdGxfbG9jayk7CiAJc3RhcnRfdW5yZWdpc3RlcmluZyhoZWFkZXIpOwotI2lmZGVmIENPTkZJR19QUk9DX0ZTCisjaWZkZWYgQ09ORklHX1BST0NfU1lTQ1RMCiAJdW5yZWdpc3Rlcl9wcm9jX3RhYmxlKGhlYWRlci0+Y3RsX3RhYmxlLCBwcm9jX3N5c19yb290KTsKICNlbmRpZgogCXNwaW5fdW5sb2NrKCZzeXNjdGxfbG9jayk7CiAJa2ZyZWUoaGVhZGVyKTsKIH0KIAorI2Vsc2UgLyogIUNPTkZJR19TWVNDVEwgKi8KK3N0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGN0bF90YWJsZSAqIHRhYmxlLAorCQkJCQkJaW50IGluc2VydF9hdF9oZWFkKQoreworCXJldHVybiBOVUxMOworfQorCit2b2lkIHVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogdGFibGUpCit7Cit9CisKKyNlbmRpZiAvKiBDT05GSUdfU1lTQ1RMICovCisKIC8qCiAgKiAvcHJvYy9zeXMgc3VwcG9ydAogICovCiAKLSNpZmRlZiBDT05GSUdfUFJPQ19GUworI2lmZGVmIENPTkZJR19QUk9DX1NZU0NUTAogCiAvKiBTY2FuIHRoZSBzeXNjdGwgZW50cmllcyBpbiB0YWJsZSBhbmQgYWRkIHRoZW0gYWxsIGludG8gL3Byb2MgKi8KIHN0YXRpYyB2b2lkIHJlZ2lzdGVyX3Byb2NfdGFibGUoY3RsX3RhYmxlICogdGFibGUsIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcm9vdCwgdm9pZCAqc2V0KQpAQCAtMTg5NSw3ICsxOTEyLDcgQEAKIAkJcmV0dXJuIC1FUEVSTTsKIAl9CiAKLQlvcCA9IChjdXJyZW50LT5waWQgPT0gMSkgPyBPUF9TRVQgOiBPUF9BTkQ7CisJb3AgPSBpc19pbml0KGN1cnJlbnQpID8gT1BfU0VUIDogT1BfQU5EOwogCXJldHVybiBkb19wcm9jX2RvaW50dmVjKHRhYmxlLHdyaXRlLGZpbHAsYnVmZmVyLGxlbnAscHBvcywKIAkJCQlkb19wcm9jX2RvaW50dmVjX2JzZXRfY29udiwmb3ApOwogfQpAQCAtMjMxOCw2ICsyMzM1LDcgQEAKICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAqLwogCiAKKyNpZmRlZiBDT05GSUdfU1lTQ1RMX1NZU0NBTEwKIC8qCiAgKiBHZW5lcmFsIHN5c2N0bCBzdXBwb3J0IHJvdXRpbmVzIAogICovCkBAIC0yNDYwLDExICsyNDc4LDE5IEBACiAJcmV0dXJuIDE7CiB9CiAKLSNlbHNlIC8qIENPTkZJR19TWVNDVEwgKi8KKyNlbHNlIC8qIENPTkZJR19TWVNDVExfU1lTQ0FMTCAqLwogCiAKIGFzbWxpbmthZ2UgbG9uZyBzeXNfc3lzY3RsKHN0cnVjdCBfX3N5c2N0bF9hcmdzIF9fdXNlciAqYXJncykKIHsKKwlzdGF0aWMgaW50IG1zZ19jb3VudDsKKworCWlmIChtc2dfY291bnQgPCA1KSB7CisJCW1zZ19jb3VudCsrOworCQlwcmludGsoS0VSTl9JTkZPCisJCQkid2FybmluZzogcHJvY2VzcyBgJXMnIHVzZWQgdGhlIHJlbW92ZWQgc3lzY3RsICIKKwkJCSJzeXN0ZW0gY2FsbFxuIiwgY3VycmVudC0+Y29tbSk7CisJfQogCXJldHVybiAtRU5PU1lTOwogfQogCkBAIC0yNDk2LDczICsyNTIyLDcgQEAKIAlyZXR1cm4gLUVOT1NZUzsKIH0KIAotaW50IHByb2NfZG9zdHJpbmcoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotaW50IHByb2NfZG9pbnR2ZWMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJICB2b2lkIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgKmxlbnAsIGxvZmZfdCAqcHBvcykKLXsKLQlyZXR1cm4gLUVOT1NZUzsKLX0KLQotaW50IHByb2NfZG9pbnR2ZWNfYnNldChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWludCBwcm9jX2RvaW50dmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWludCBwcm9jX2RvaW50dmVjX2ppZmZpZXMoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLCBzdHJ1Y3QgZmlsZSAqZmlscCwKLQkJCSAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWludCBwcm9jX2RvaW50dmVjX3VzZXJoel9qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCi1pbnQgcHJvY19kb2ludHZlY19tc19qaWZmaWVzKGN0bF90YWJsZSAqdGFibGUsIGludCB3cml0ZSwgc3RydWN0IGZpbGUgKmZpbHAsCi0JCQkgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQotewotCXJldHVybiAtRU5PU1lTOwotfQotCi1pbnQgcHJvY19kb3Vsb25ndmVjX21pbm1heChjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAotCQkgICAgdm9pZCBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCi17Ci0JcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLWludCBwcm9jX2RvdWxvbmd2ZWNfbXNfamlmZmllc19taW5tYXgoY3RsX3RhYmxlICp0YWJsZSwgaW50IHdyaXRlLAotCQkJCSAgICAgIHN0cnVjdCBmaWxlICpmaWxwLAotCQkJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsCi0JCQkJICAgICAgc2l6ZV90ICpsZW5wLCBsb2ZmX3QgKnBwb3MpCi17Ci0gICAgcmV0dXJuIC1FTk9TWVM7Ci19Ci0KLXN0cnVjdCBjdGxfdGFibGVfaGVhZGVyICogcmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGN0bF90YWJsZSAqIHRhYmxlLCAKLQkJCQkJCWludCBpbnNlcnRfYXRfaGVhZCkKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQotdm9pZCB1bnJlZ2lzdGVyX3N5c2N0bF90YWJsZShzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqIHRhYmxlKQotewotfQotCi0jZW5kaWYgLyogQ09ORklHX1NZU0NUTCAqLworI2VuZGlmIC8qIENPTkZJR19TWVNDVExfU1lTQ0FMTCAqLwogCiAvKgogICogTm8gc2Vuc2UgcHV0dGluZyB0aGlzIGFmdGVyIGVhY2ggc3ltYm9sIGRlZmluaXRpb24sIHR3aWNlLApkaWZmIC0tZ2l0IGEva2VybmVsL3Rhc2tzdGF0cy5jIGIva2VybmVsL3Rhc2tzdGF0cy5jCmluZGV4IDJlZDQwNDAuLjVkNmE4YzUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90YXNrc3RhdHMuYworKysgYi9rZXJuZWwvdGFza3N0YXRzLmMKQEAgLTE4LDcgKzE4LDkgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L3Rhc2tzdGF0c19rZXJuLmg+CisjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheWFjY3QuaD4KKyNpbmNsdWRlIDxsaW51eC90c2FjY3Rfa2Vybi5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxuZXQvZ2VuZXRsaW5rLmg+CkBAIC03NSw3ICs3Nyw3IEBACiAJLyoKIAkgKiBJZiBuZXcgYXR0cmlidXRlcyBhcmUgYWRkZWQsIHBsZWFzZSByZXZpc2l0IHRoaXMgYWxsb2NhdGlvbgogCSAqLwotCXNrYiA9IG5sbXNnX25ldyhzaXplLCBHRlBfS0VSTkVMKTsKKwlza2IgPSBubG1zZ19uZXcoZ2VubG1zZ190b3RhbF9zaXplKHNpemUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTE5OCw3ICsyMDAsMTMgQEAKIAkgKi8KIAogCWRlbGF5YWNjdF9hZGRfdHNrKHN0YXRzLCB0c2spOworCisJLyogZmlsbCBpbiBiYXNpYyBhY2N0IGZpZWxkcyAqLwogCXN0YXRzLT52ZXJzaW9uID0gVEFTS1NUQVRTX1ZFUlNJT047CisJYmFjY3RfYWRkX3RzayhzdGF0cywgdHNrKTsKKworCS8qIGZpbGwgaW4gZXh0ZW5kZWQgYWNjdCBmaWVsZHMgKi8KKwl4YWNjdF9hZGRfdHNrKHN0YXRzLCB0c2spOwogCiAJLyogRGVmaW5lIGVycjogbGFiZWwgaGVyZSBpZiBuZWVkZWQgKi8KIAlwdXRfdGFza19zdHJ1Y3QodHNrKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lLmMgYi9rZXJuZWwvdGltZS5jCmluZGV4IDViZDQ4OTcuLjBlMDE3YmZmIDEwMDY0NAotLS0gYS9rZXJuZWwvdGltZS5jCisrKyBiL2tlcm5lbC90aW1lLmMKQEAgLTIwMiwxNzkgKzIwMiw2IEBACiAJcmV0dXJuIGRvX3N5c19zZXR0aW1lb2ZkYXkodHYgPyAmbmV3X3RzIDogTlVMTCwgdHogPyAmbmV3X3R6IDogTlVMTCk7CiB9CiAKLS8qIHdlIGNhbGwgdGhpcyB0byBub3RpZnkgdGhlIGFyY2ggd2hlbiB0aGUgY2xvY2sgaXMgYmVpbmcKLSAqIGNvbnRyb2xsZWQuICBJZiBubyBzdWNoIGFyY2ggcm91dGluZSwgZG8gbm90aGluZy4KLSAqLwotdm9pZCBfX2F0dHJpYnV0ZV9fICgod2VhaykpIG5vdGlmeV9hcmNoX2Ntb3NfdGltZXIodm9pZCkKLXsKLQlyZXR1cm47Ci19Ci0KLS8qIGFkanRpbWV4IG1haW5seSBhbGxvd3MgcmVhZGluZyAoYW5kIHdyaXRpbmcsIGlmIHN1cGVydXNlcikgb2YKLSAqIGtlcm5lbCB0aW1lLWtlZXBpbmcgdmFyaWFibGVzLiB1c2VkIGJ5IHhudHBkLgotICovCi1pbnQgZG9fYWRqdGltZXgoc3RydWN0IHRpbWV4ICp0eGMpCi17Ci0gICAgICAgIGxvbmcgbHRlbXAsIG10ZW1wLCBzYXZlX2FkanVzdDsKLQlpbnQgcmVzdWx0OwotCi0JLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KLQlpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQotCQlyZXR1cm4gLUVQRVJNOwotCQkKLQkvKiBOb3cgd2UgdmFsaWRhdGUgdGhlIGRhdGEgYmVmb3JlIGRpc2FibGluZyBpbnRlcnJ1cHRzICovCi0KLQlpZiAoKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpID09IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkKLQkgIC8qIHNpbmdsZXNob3QgbXVzdCBub3QgYmUgdXNlZCB3aXRoIGFueSBvdGhlciBtb2RlIGJpdHMgKi8KLQkJaWYgKHR4Yy0+bW9kZXMgIT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAodHhjLT5tb2RlcyAhPSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QgJiYgKHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUKSkKLQkgIC8qIGFkanVzdG1lbnQgT2Zmc2V0IGxpbWl0ZWQgdG8gKy0gLjUxMiBzZWNvbmRzICovCi0JCWlmICh0eGMtPm9mZnNldCA8PSAtIE1BWFBIQVNFIHx8IHR4Yy0+b2Zmc2V0ID49IE1BWFBIQVNFICkKLQkJCXJldHVybiAtRUlOVkFMOwkKLQotCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmcgISAqLwotCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCi0JCWlmICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKLQkJICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikKLQkJCXJldHVybiAtRUlOVkFMOwotCi0Jd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOwotCXJlc3VsdCA9IHRpbWVfc3RhdGU7CS8qIG1vc3RseSBgVElNRV9PSycgKi8KLQotCS8qIFNhdmUgZm9yIGxhdGVyIC0gc2VtYW50aWNzIG9mIGFkanRpbWUgaXMgdG8gcmV0dXJuIG9sZCB2YWx1ZSAqLwotCXNhdmVfYWRqdXN0ID0gdGltZV9uZXh0X2FkanVzdCA/IHRpbWVfbmV4dF9hZGp1c3QgOiB0aW1lX2FkanVzdDsKLQotI2lmIDAJLyogU1RBX0NMT0NLRVJSIGlzIG5ldmVyIHNldCB5ZXQgKi8KLQl0aW1lX3N0YXR1cyAmPSB+U1RBX0NMT0NLRVJSOwkJLyogcmVzZXQgU1RBX0NMT0NLRVJSICovCi0jZW5kaWYKLQkvKiBJZiB0aGVyZSBhcmUgaW5wdXQgcGFyYW1ldGVycywgdGhlbiBwcm9jZXNzIHRoZW0gKi8KLQlpZiAodHhjLT5tb2RlcykKLQl7Ci0JICAgIGlmICh0eGMtPm1vZGVzICYgQURKX1NUQVRVUykJLyogb25seSBzZXQgYWxsb3dlZCBiaXRzICovCi0JCXRpbWVfc3RhdHVzID0gICh0eGMtPnN0YXR1cyAmIH5TVEFfUk9OTFkpIHwKLQkJCSAgICAgICh0aW1lX3N0YXR1cyAmIFNUQV9ST05MWSk7Ci0KLQkgICAgaWYgKHR4Yy0+bW9kZXMgJiBBREpfRlJFUVVFTkNZKSB7CS8qIHAuIDIyICovCi0JCWlmICh0eGMtPmZyZXEgPiBNQVhGUkVRIHx8IHR4Yy0+ZnJlcSA8IC1NQVhGUkVRKSB7Ci0JCSAgICByZXN1bHQgPSAtRUlOVkFMOwotCQkgICAgZ290byBsZWF2ZTsKLQkJfQotCQl0aW1lX2ZyZXEgPSB0eGMtPmZyZXE7Ci0JICAgIH0KLQotCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9NQVhFUlJPUikgewotCQlpZiAodHhjLT5tYXhlcnJvciA8IDAgfHwgdHhjLT5tYXhlcnJvciA+PSBOVFBfUEhBU0VfTElNSVQpIHsKLQkJICAgIHJlc3VsdCA9IC1FSU5WQUw7Ci0JCSAgICBnb3RvIGxlYXZlOwotCQl9Ci0JCXRpbWVfbWF4ZXJyb3IgPSB0eGMtPm1heGVycm9yOwotCSAgICB9Ci0KLQkgICAgaWYgKHR4Yy0+bW9kZXMgJiBBREpfRVNURVJST1IpIHsKLQkJaWYgKHR4Yy0+ZXN0ZXJyb3IgPCAwIHx8IHR4Yy0+ZXN0ZXJyb3IgPj0gTlRQX1BIQVNFX0xJTUlUKSB7Ci0JCSAgICByZXN1bHQgPSAtRUlOVkFMOwotCQkgICAgZ290byBsZWF2ZTsKLQkJfQotCQl0aW1lX2VzdGVycm9yID0gdHhjLT5lc3RlcnJvcjsKLQkgICAgfQotCi0JICAgIGlmICh0eGMtPm1vZGVzICYgQURKX1RJTUVDT05TVCkgewkvKiBwLiAyNCAqLwotCQlpZiAodHhjLT5jb25zdGFudCA8IDApIHsJLyogTlRQIHY0IHVzZXMgdmFsdWVzID4gNiAqLwotCQkgICAgcmVzdWx0ID0gLUVJTlZBTDsKLQkJICAgIGdvdG8gbGVhdmU7Ci0JCX0KLQkJdGltZV9jb25zdGFudCA9IHR4Yy0+Y29uc3RhbnQ7Ci0JICAgIH0KLQotCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpIHsJLyogdmFsdWVzIGNoZWNrZWQgZWFybGllciAqLwotCQlpZiAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHsKLQkJICAgIC8qIGFkanRpbWUoKSBpcyBpbmRlcGVuZGVudCBmcm9tIG50cF9hZGp0aW1lKCkgKi8KLQkJICAgIGlmICgodGltZV9uZXh0X2FkanVzdCA9IHR4Yy0+b2Zmc2V0KSA9PSAwKQotCQkJIHRpbWVfYWRqdXN0ID0gMDsKLQkJfQotCQllbHNlIGlmICh0aW1lX3N0YXR1cyAmIFNUQV9QTEwpIHsKLQkJICAgIGx0ZW1wID0gdHhjLT5vZmZzZXQ7Ci0KLQkJICAgIC8qCi0JCSAgICAgKiBTY2FsZSB0aGUgcGhhc2UgYWRqdXN0bWVudCBhbmQKLQkJICAgICAqIGNsYW1wIHRvIHRoZSBvcGVyYXRpbmcgcmFuZ2UuCi0JCSAgICAgKi8KLQkJICAgIGlmIChsdGVtcCA+IE1BWFBIQVNFKQotCQkgICAgICAgIHRpbWVfb2Zmc2V0ID0gTUFYUEhBU0UgPDwgU0hJRlRfVVBEQVRFOwotCQkgICAgZWxzZSBpZiAobHRlbXAgPCAtTUFYUEhBU0UpCi0JCQl0aW1lX29mZnNldCA9IC0oTUFYUEhBU0UgPDwgU0hJRlRfVVBEQVRFKTsKLQkJICAgIGVsc2UKLQkJICAgICAgICB0aW1lX29mZnNldCA9IGx0ZW1wIDw8IFNISUZUX1VQREFURTsKLQotCQkgICAgLyoKLQkJICAgICAqIFNlbGVjdCB3aGV0aGVyIHRoZSBmcmVxdWVuY3kgaXMgdG8gYmUgY29udHJvbGxlZAotCQkgICAgICogYW5kIGluIHdoaWNoIG1vZGUgKFBMTCBvciBGTEwpLiBDbGFtcCB0byB0aGUgb3BlcmF0aW5nCi0JCSAgICAgKiByYW5nZS4gVWdseSBtdWx0aXBseS9kaXZpZGUgc2hvdWxkIGJlIHJlcGxhY2VkIHNvbWVkYXkuCi0JCSAgICAgKi8KLQotCQkgICAgaWYgKHRpbWVfc3RhdHVzICYgU1RBX0ZSRVFIT0xEIHx8IHRpbWVfcmVmdGltZSA9PSAwKQotCQkgICAgICAgIHRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKLQkJICAgIG10ZW1wID0geHRpbWUudHZfc2VjIC0gdGltZV9yZWZ0aW1lOwotCQkgICAgdGltZV9yZWZ0aW1lID0geHRpbWUudHZfc2VjOwotCQkgICAgaWYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCkgewotCQkgICAgICAgIGlmIChtdGVtcCA+PSBNSU5TRUMpIHsKLQkJCSAgICBsdGVtcCA9ICh0aW1lX29mZnNldCAvIG10ZW1wKSA8PCAoU0hJRlRfVVNFQyAtCi0JCQkJCQkJICAgICAgU0hJRlRfVVBEQVRFKTsKLQkJCSAgICB0aW1lX2ZyZXEgKz0gc2hpZnRfcmlnaHQobHRlbXAsIFNISUZUX0tIKTsKLQkJCX0gZWxzZSAvKiBjYWxpYnJhdGlvbiBpbnRlcnZhbCB0b28gc2hvcnQgKHAuIDEyKSAqLwotCQkJCXJlc3VsdCA9IFRJTUVfRVJST1I7Ci0JCSAgICB9IGVsc2UgewkvKiBQTEwgbW9kZSAqLwotCQkgICAgICAgIGlmIChtdGVtcCA8IE1BWFNFQykgewotCQkJICAgIGx0ZW1wICo9IG10ZW1wOwotCQkJICAgIHRpbWVfZnJlcSArPSBzaGlmdF9yaWdodChsdGVtcCwodGltZV9jb25zdGFudCArCi0JCQkJCQkgICAgICAgdGltZV9jb25zdGFudCArCi0JCQkJCQkgICAgICAgU0hJRlRfS0YgLSBTSElGVF9VU0VDKSk7Ci0JCQl9IGVsc2UgLyogY2FsaWJyYXRpb24gaW50ZXJ2YWwgdG9vIGxvbmcgKHAuIDEyKSAqLwotCQkJCXJlc3VsdCA9IFRJTUVfRVJST1I7Ci0JCSAgICB9Ci0JCSAgICB0aW1lX2ZyZXEgPSBtaW4odGltZV9mcmVxLCB0aW1lX3RvbGVyYW5jZSk7Ci0JCSAgICB0aW1lX2ZyZXEgPSBtYXgodGltZV9mcmVxLCAtdGltZV90b2xlcmFuY2UpOwotCQl9IC8qIFNUQV9QTEwgKi8KLQkgICAgfSAvKiB0eGMtPm1vZGVzICYgQURKX09GRlNFVCAqLwotCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9USUNLKSB7Ci0JCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKLQkJdGlja19uc2VjID0gVElDS19VU0VDX1RPX05TRUModGlja191c2VjKTsKLQkgICAgfQotCX0gLyogdHhjLT5tb2RlcyAqLwotbGVhdmU6CWlmICgodGltZV9zdGF0dXMgJiAoU1RBX1VOU1lOQ3xTVEFfQ0xPQ0tFUlIpKSAhPSAwKQotCQlyZXN1bHQgPSBUSU1FX0VSUk9SOwotCQotCWlmICgodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKQotCSAgICB0eGMtPm9mZnNldAkgICA9IHNhdmVfYWRqdXN0OwotCWVsc2UgewotCSAgICB0eGMtPm9mZnNldCA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9VUERBVEUpOwotCX0KLQl0eGMtPmZyZXEJICAgPSB0aW1lX2ZyZXE7Ci0JdHhjLT5tYXhlcnJvcgkgICA9IHRpbWVfbWF4ZXJyb3I7Ci0JdHhjLT5lc3RlcnJvcgkgICA9IHRpbWVfZXN0ZXJyb3I7Ci0JdHhjLT5zdGF0dXMJICAgPSB0aW1lX3N0YXR1czsKLQl0eGMtPmNvbnN0YW50CSAgID0gdGltZV9jb25zdGFudDsKLQl0eGMtPnByZWNpc2lvbgkgICA9IHRpbWVfcHJlY2lzaW9uOwotCXR4Yy0+dG9sZXJhbmNlCSAgID0gdGltZV90b2xlcmFuY2U7Ci0JdHhjLT50aWNrCSAgID0gdGlja191c2VjOwotCi0JLyogUFBTIGlzIG5vdCBpbXBsZW1lbnRlZCwgc28gdGhlc2UgYXJlIHplcm8gKi8KLQl0eGMtPnBwc2ZyZXEJICAgPSAwOwotCXR4Yy0+aml0dGVyCSAgID0gMDsKLQl0eGMtPnNoaWZ0CSAgID0gMDsKLQl0eGMtPnN0YWJpbAkgICA9IDA7Ci0JdHhjLT5qaXRjbnQJICAgPSAwOwotCXR4Yy0+Y2FsY250CSAgID0gMDsKLQl0eGMtPmVycmNudAkgICA9IDA7Ci0JdHhjLT5zdGJjbnQJICAgPSAwOwotCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOwotCWRvX2dldHRpbWVvZmRheSgmdHhjLT50aW1lKTsKLQlub3RpZnlfYXJjaF9jbW9zX3RpbWVyKCk7Ci0JcmV0dXJuKHJlc3VsdCk7Ci19Ci0KIGFzbWxpbmthZ2UgbG9uZyBzeXNfYWRqdGltZXgoc3RydWN0IHRpbWV4IF9fdXNlciAqdHhjX3ApCiB7CiAJc3RydWN0IHRpbWV4IHR4YzsJCS8qIExvY2FsIGNvcHkgb2YgcGFyYW1ldGVyICovCmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZS9NYWtlZmlsZSBiL2tlcm5lbC90aW1lL01ha2VmaWxlCmluZGV4IGUxZGZkOGUuLjYxYTM5MDcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lL01ha2VmaWxlCisrKyBiL2tlcm5lbC90aW1lL01ha2VmaWxlCkBAIC0xICsxIEBACi1vYmoteSArPSBjbG9ja3NvdXJjZS5vIGppZmZpZXMubworb2JqLXkgKz0gbnRwLm8gY2xvY2tzb3VyY2UubyBqaWZmaWVzLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lL250cC5jIGIva2VybmVsL3RpbWUvbnRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcxOTVmYQotLS0gL2Rldi9udWxsCisrKyBiL2tlcm5lbC90aW1lL250cC5jCkBAIC0wLDAgKzEsMzUwIEBACisvKgorICogbGludXgva2VybmVsL3RpbWUvbnRwLmMKKyAqCisgKiBOVFAgc3RhdGUgbWFjaGluZSBpbnRlcmZhY2VzIGFuZCBsb2dpYy4KKyAqCisgKiBUaGlzIGNvZGUgd2FzIG1haW5seSBtb3ZlZCBmcm9tIGtlcm5lbC90aW1lci5jIGFuZCBrZXJuZWwvdGltZS5jCisgKiBQbGVhc2Ugc2VlIHRob3NlIGZpbGVzIGZvciByZWxldmFudCBjb3B5cmlnaHQgaW5mbyBhbmQgaGlzdG9yaWNhbAorICogY2hhbmdlbG9ncy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXguaD4KKworI2luY2x1ZGUgPGFzbS9kaXY2NC5oPgorI2luY2x1ZGUgPGFzbS90aW1leC5oPgorCisvKgorICogVGltZWtlZXBpbmcgdmFyaWFibGVzCisgKi8KK3Vuc2lnbmVkIGxvbmcgdGlja191c2VjID0gVElDS19VU0VDOyAJCS8qIFVTRVJfSFogcGVyaW9kICh1c2VjKSAqLwordW5zaWduZWQgbG9uZyB0aWNrX25zZWM7CQkJLyogQUNUSFogcGVyaW9kIChuc2VjKSAqLworc3RhdGljIHU2NCB0aWNrX2xlbmd0aCwgdGlja19sZW5ndGhfYmFzZTsKKworI2RlZmluZSBNQVhfVElDS0FESgkJNTAwCQkvKiBtaWNyb3NlY3MgKi8KKyNkZWZpbmUgTUFYX1RJQ0tBREpfU0NBTEVECSgoKHU2NCkoTUFYX1RJQ0tBREogKiBOU0VDX1BFUl9VU0VDKSA8PCBcCisJCQkJICBUSUNLX0xFTkdUSF9TSElGVCkgLyBIWikKKworLyoKKyAqIHBoYXNlLWxvY2sgbG9vcCB2YXJpYWJsZXMKKyAqLworLyogVElNRV9FUlJPUiBwcmV2ZW50cyBvdmVyd3JpdGluZyB0aGUgQ01PUyBjbG9jayAqLworc3RhdGljIGludCB0aW1lX3N0YXRlID0gVElNRV9PSzsJLyogY2xvY2sgc3luY2hyb25pemF0aW9uIHN0YXR1cwkqLworaW50IHRpbWVfc3RhdHVzID0gU1RBX1VOU1lOQzsJCS8qIGNsb2NrIHN0YXR1cyBiaXRzCQkqLworc3RhdGljIGxvbmcgdGltZV9vZmZzZXQ7CQkvKiB0aW1lIGFkanVzdG1lbnQgKG5zKQkJKi8KK3N0YXRpYyBsb25nIHRpbWVfY29uc3RhbnQgPSAyOwkJLyogcGxsIHRpbWUgY29uc3RhbnQJCSovCitsb25nIHRpbWVfbWF4ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIG1heGltdW0gZXJyb3IgKHVzKQkJKi8KK2xvbmcgdGltZV9lc3RlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsJLyogZXN0aW1hdGVkIGVycm9yICh1cykJCSovCitsb25nIHRpbWVfZnJlcTsJCQkJLyogZnJlcXVlbmN5IG9mZnNldCAoc2NhbGVkIHBwbSkqLworc3RhdGljIGxvbmcgdGltZV9yZWZ0aW1lOwkJLyogdGltZSBhdCBsYXN0IGFkanVzdG1lbnQgKHMpCSovCitsb25nIHRpbWVfYWRqdXN0OworCisjZGVmaW5lIENMT0NLX1RJQ0tfT1ZFUkZMT1cJKExBVENIICogSFogLSBDTE9DS19USUNLX1JBVEUpCisjZGVmaW5lIENMT0NLX1RJQ0tfQURKVVNUCSgoKHM2NClDTE9DS19USUNLX09WRVJGTE9XICogTlNFQ19QRVJfU0VDKSAvIFwKKwkJCQkJKHM2NClDTE9DS19USUNLX1JBVEUpCisKK3N0YXRpYyB2b2lkIG50cF91cGRhdGVfZnJlcXVlbmN5KHZvaWQpCit7CisJdGlja19sZW5ndGhfYmFzZSA9ICh1NjQpKHRpY2tfdXNlYyAqIE5TRUNfUEVSX1VTRUMgKiBVU0VSX0haKSA8PCBUSUNLX0xFTkdUSF9TSElGVDsKKwl0aWNrX2xlbmd0aF9iYXNlICs9IChzNjQpQ0xPQ0tfVElDS19BREpVU1QgPDwgVElDS19MRU5HVEhfU0hJRlQ7CisJdGlja19sZW5ndGhfYmFzZSArPSAoczY0KXRpbWVfZnJlcSA8PCAoVElDS19MRU5HVEhfU0hJRlQgLSBTSElGVF9OU0VDKTsKKworCWRvX2Rpdih0aWNrX2xlbmd0aF9iYXNlLCBIWik7CisKKwl0aWNrX25zZWMgPSB0aWNrX2xlbmd0aF9iYXNlID4+IFRJQ0tfTEVOR1RIX1NISUZUOworfQorCisvKioKKyAqIG50cF9jbGVhciAtIENsZWFycyB0aGUgTlRQIHN0YXRlIHZhcmlhYmxlcworICoKKyAqIE11c3QgYmUgY2FsbGVkIHdoaWxlIGhvbGRpbmcgYSB3cml0ZSBvbiB0aGUgeHRpbWVfbG9jaworICovCit2b2lkIG50cF9jbGVhcih2b2lkKQoreworCXRpbWVfYWRqdXN0ID0gMDsJCS8qIHN0b3AgYWN0aXZlIGFkanRpbWUoKSAqLworCXRpbWVfc3RhdHVzIHw9IFNUQV9VTlNZTkM7CisJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwl0aW1lX2VzdGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOworCisJbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKKworCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKKwl0aW1lX29mZnNldCA9IDA7Cit9CisKKy8qCisgKiB0aGlzIHJvdXRpbmUgaGFuZGxlcyB0aGUgb3ZlcmZsb3cgb2YgdGhlIG1pY3Jvc2Vjb25kIGZpZWxkCisgKgorICogVGhlIHRyaWNreSBiaXRzIG9mIGNvZGUgdG8gaGFuZGxlIHRoZSBhY2N1cmF0ZSBjbG9jayBzdXBwb3J0CisgKiB3ZXJlIHByb3ZpZGVkIGJ5IERhdmUgTWlsbHMgKE1pbGxzQFVERUwuRURVKSBvZiBOVFAgZmFtZS4KKyAqIFRoZXkgd2VyZSBvcmlnaW5hbGx5IGRldmVsb3BlZCBmb3IgU1VOIGFuZCBERUMga2VybmVscy4KKyAqIEFsbCB0aGUga3Vkb3Mgc2hvdWxkIGdvIHRvIERhdmUgZm9yIHRoaXMgc3R1ZmYuCisgKi8KK3ZvaWQgc2Vjb25kX292ZXJmbG93KHZvaWQpCit7CisJbG9uZyB0aW1lX2FkajsKKworCS8qIEJ1bXAgdGhlIG1heGVycm9yIGZpZWxkICovCisJdGltZV9tYXhlcnJvciArPSBNQVhGUkVRID4+IFNISUZUX1VTRUM7CisJaWYgKHRpbWVfbWF4ZXJyb3IgPiBOVFBfUEhBU0VfTElNSVQpIHsKKwkJdGltZV9tYXhlcnJvciA9IE5UUF9QSEFTRV9MSU1JVDsKKwkJdGltZV9zdGF0dXMgfD0gU1RBX1VOU1lOQzsKKwl9CisKKwkvKgorCSAqIExlYXAgc2Vjb25kIHByb2Nlc3NpbmcuIElmIGluIGxlYXAtaW5zZXJ0IHN0YXRlIGF0IHRoZSBlbmQgb2YgdGhlCisJICogZGF5LCB0aGUgc3lzdGVtIGNsb2NrIGlzIHNldCBiYWNrIG9uZSBzZWNvbmQ7IGlmIGluIGxlYXAtZGVsZXRlCisJICogc3RhdGUsIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc2V0IGFoZWFkIG9uZSBzZWNvbmQuIFRoZSBtaWNyb3RpbWUoKQorCSAqIHJvdXRpbmUgb3IgZXh0ZXJuYWwgY2xvY2sgZHJpdmVyIHdpbGwgaW5zdXJlIHRoYXQgcmVwb3J0ZWQgdGltZSBpcworCSAqIGFsd2F5cyBtb25vdG9uaWMuIFRoZSB1Z2x5IGRpdmlkZXMgc2hvdWxkIGJlIHJlcGxhY2VkLgorCSAqLworCXN3aXRjaCAodGltZV9zdGF0ZSkgeworCWNhc2UgVElNRV9PSzoKKwkJaWYgKHRpbWVfc3RhdHVzICYgU1RBX0lOUykKKwkJCXRpbWVfc3RhdGUgPSBUSU1FX0lOUzsKKwkJZWxzZSBpZiAodGltZV9zdGF0dXMgJiBTVEFfREVMKQorCQkJdGltZV9zdGF0ZSA9IFRJTUVfREVMOworCQlicmVhazsKKwljYXNlIFRJTUVfSU5TOgorCQlpZiAoeHRpbWUudHZfc2VjICUgODY0MDAgPT0gMCkgeworCQkJeHRpbWUudHZfc2VjLS07CisJCQl3YWxsX3RvX21vbm90b25pYy50dl9zZWMrKzsKKwkJCS8qCisJCQkgKiBUaGUgdGltZXIgaW50ZXJwb2xhdG9yIHdpbGwgbWFrZSB0aW1lIGNoYW5nZQorCQkJICogZ3JhZHVhbGx5IGluc3RlYWQgb2YgYW4gaW1tZWRpYXRlIGp1bXAgYnkgb25lIHNlY29uZAorCQkJICovCisJCQl0aW1lX2ludGVycG9sYXRvcl91cGRhdGUoLU5TRUNfUEVSX1NFQyk7CisJCQl0aW1lX3N0YXRlID0gVElNRV9PT1A7CisJCQljbG9ja193YXNfc2V0KCk7CisJCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNsb2NrOiBpbnNlcnRpbmcgbGVhcCBzZWNvbmQgIgorCQkJCQkiMjM6NTk6NjAgVVRDXG4iKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRJTUVfREVMOgorCQlpZiAoKHh0aW1lLnR2X3NlYyArIDEpICUgODY0MDAgPT0gMCkgeworCQkJeHRpbWUudHZfc2VjKys7CisJCQl3YWxsX3RvX21vbm90b25pYy50dl9zZWMtLTsKKwkJCS8qCisJCQkgKiBVc2Ugb2YgdGltZSBpbnRlcnBvbGF0b3IgZm9yIGEgZ3JhZHVhbCBjaGFuZ2Ugb2YKKwkJCSAqIHRpbWUKKwkJCSAqLworCQkJdGltZV9pbnRlcnBvbGF0b3JfdXBkYXRlKE5TRUNfUEVSX1NFQyk7CisJCQl0aW1lX3N0YXRlID0gVElNRV9XQUlUOworCQkJY2xvY2tfd2FzX3NldCgpOworCQkJcHJpbnRrKEtFUk5fTk9USUNFICJDbG9jazogZGVsZXRpbmcgbGVhcCBzZWNvbmQgIgorCQkJCQkiMjM6NTk6NTkgVVRDXG4iKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFRJTUVfT09QOgorCQl0aW1lX3N0YXRlID0gVElNRV9XQUlUOworCQlicmVhazsKKwljYXNlIFRJTUVfV0FJVDoKKwkJaWYgKCEodGltZV9zdGF0dXMgJiAoU1RBX0lOUyB8IFNUQV9ERUwpKSkKKwkJdGltZV9zdGF0ZSA9IFRJTUVfT0s7CisJfQorCisJLyoKKwkgKiBDb21wdXRlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGZvciB0aGUgbmV4dCBzZWNvbmQuIFRoZSBvZmZzZXQgaXMKKwkgKiByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LgorCSAqLworCXRpY2tfbGVuZ3RoID0gdGlja19sZW5ndGhfYmFzZTsKKwl0aW1lX2FkaiA9IHNoaWZ0X3JpZ2h0KHRpbWVfb2Zmc2V0LCBTSElGVF9QTEwgKyB0aW1lX2NvbnN0YW50KTsKKwl0aW1lX29mZnNldCAtPSB0aW1lX2FkajsKKwl0aWNrX2xlbmd0aCArPSAoczY0KXRpbWVfYWRqIDw8IChUSUNLX0xFTkdUSF9TSElGVCAtIFNISUZUX1VQREFURSk7CisKKwlpZiAodW5saWtlbHkodGltZV9hZGp1c3QpKSB7CisJCWlmICh0aW1lX2FkanVzdCA+IE1BWF9USUNLQURKKSB7CisJCQl0aW1lX2FkanVzdCAtPSBNQVhfVElDS0FESjsKKwkJCXRpY2tfbGVuZ3RoICs9IE1BWF9USUNLQURKX1NDQUxFRDsKKwkJfSBlbHNlIGlmICh0aW1lX2FkanVzdCA8IC1NQVhfVElDS0FESikgeworCQkJdGltZV9hZGp1c3QgKz0gTUFYX1RJQ0tBREo7CisJCQl0aWNrX2xlbmd0aCAtPSBNQVhfVElDS0FESl9TQ0FMRUQ7CisJCX0gZWxzZSB7CisJCQl0aW1lX2FkanVzdCA9IDA7CisJCQl0aWNrX2xlbmd0aCArPSAoczY0KSh0aW1lX2FkanVzdCAqIE5TRUNfUEVSX1VTRUMgLworCQkJCQkgICAgIEhaKSA8PCBUSUNLX0xFTkdUSF9TSElGVDsKKwkJfQorCX0KK30KKworLyoKKyAqIFJldHVybiBob3cgbG9uZyB0aWNrcyBhcmUgYXQgdGhlIG1vbWVudCwgdGhhdCBpcywgaG93IG11Y2ggdGltZQorICogdXBkYXRlX3dhbGxfdGltZV9vbmVfdGljayB3aWxsIGFkZCB0byB4dGltZSBuZXh0IHRpbWUgd2UgY2FsbCBpdAorICogKGFzc3VtaW5nIG5vIGNhbGxzIHRvIGRvX2FkanRpbWV4IGluIHRoZSBtZWFudGltZSkuCisgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGluIGZpeGVkLXBvaW50IG5hbm9zZWNvbmRzIHNoaWZ0ZWQgYnkgdGhlCisgKiBzcGVjaWZpZWQgbnVtYmVyIG9mIGJpdHMgdG8gdGhlIHJpZ2h0IG9mIHRoZSBiaW5hcnkgcG9pbnQuCisgKiBUaGlzIGZ1bmN0aW9uIGhhcyBubyBzaWRlLWVmZmVjdHMuCisgKi8KK3U2NCBjdXJyZW50X3RpY2tfbGVuZ3RoKHZvaWQpCit7CisJcmV0dXJuIHRpY2tfbGVuZ3RoOworfQorCisKK3ZvaWQgX19hdHRyaWJ1dGVfXyAoKHdlYWspKSBub3RpZnlfYXJjaF9jbW9zX3RpbWVyKHZvaWQpCit7CisJcmV0dXJuOworfQorCisvKiBhZGp0aW1leCBtYWlubHkgYWxsb3dzIHJlYWRpbmcgKGFuZCB3cml0aW5nLCBpZiBzdXBlcnVzZXIpIG9mCisgKiBrZXJuZWwgdGltZS1rZWVwaW5nIHZhcmlhYmxlcy4gdXNlZCBieSB4bnRwZC4KKyAqLworaW50IGRvX2FkanRpbWV4KHN0cnVjdCB0aW1leCAqdHhjKQoreworCWxvbmcgbHRlbXAsIG10ZW1wLCBzYXZlX2FkanVzdDsKKwlzNjQgZnJlcV9hZGosIHRlbXA2NDsKKwlpbnQgcmVzdWx0OworCisJLyogSW4gb3JkZXIgdG8gbW9kaWZ5IGFueXRoaW5nLCB5b3UgZ290dGEgYmUgc3VwZXItdXNlciEgKi8KKwlpZiAodHhjLT5tb2RlcyAmJiAhY2FwYWJsZShDQVBfU1lTX1RJTUUpKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogTm93IHdlIHZhbGlkYXRlIHRoZSBkYXRhIGJlZm9yZSBkaXNhYmxpbmcgaW50ZXJydXB0cyAqLworCisJaWYgKCh0eGMtPm1vZGVzICYgQURKX09GRlNFVF9TSU5HTEVTSE9UKSA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpCisJICAvKiBzaW5nbGVzaG90IG11c3Qgbm90IGJlIHVzZWQgd2l0aCBhbnkgb3RoZXIgbW9kZSBiaXRzICovCisJCWlmICh0eGMtPm1vZGVzICE9IEFESl9PRkZTRVRfU0lOR0xFU0hPVCkKKwkJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHR4Yy0+bW9kZXMgIT0gQURKX09GRlNFVF9TSU5HTEVTSE9UICYmICh0eGMtPm1vZGVzICYgQURKX09GRlNFVCkpCisJICAvKiBhZGp1c3RtZW50IE9mZnNldCBsaW1pdGVkIHRvICstIC41MTIgc2Vjb25kcyAqLworCQlpZiAodHhjLT5vZmZzZXQgPD0gLSBNQVhQSEFTRSB8fCB0eGMtPm9mZnNldCA+PSBNQVhQSEFTRSApCisJCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIGlmIHRoZSBxdWFydHogaXMgb2ZmIGJ5IG1vcmUgdGhhbiAxMCUgc29tZXRoaW5nIGlzIFZFUlkgd3JvbmcgISAqLworCWlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCisJCWlmICh0eGMtPnRpY2sgPCAgOTAwMDAwL1VTRVJfSFogfHwKKwkJICAgIHR4Yy0+dGljayA+IDExMDAwMDAvVVNFUl9IWikKKwkJCXJldHVybiAtRUlOVkFMOworCisJd3JpdGVfc2VxbG9ja19pcnEoJnh0aW1lX2xvY2spOworCXJlc3VsdCA9IHRpbWVfc3RhdGU7CS8qIG1vc3RseSBgVElNRV9PSycgKi8KKworCS8qIFNhdmUgZm9yIGxhdGVyIC0gc2VtYW50aWNzIG9mIGFkanRpbWUgaXMgdG8gcmV0dXJuIG9sZCB2YWx1ZSAqLworCXNhdmVfYWRqdXN0ID0gdGltZV9hZGp1c3Q7CisKKyNpZiAwCS8qIFNUQV9DTE9DS0VSUiBpcyBuZXZlciBzZXQgeWV0ICovCisJdGltZV9zdGF0dXMgJj0gflNUQV9DTE9DS0VSUjsJCS8qIHJlc2V0IFNUQV9DTE9DS0VSUiAqLworI2VuZGlmCisJLyogSWYgdGhlcmUgYXJlIGlucHV0IHBhcmFtZXRlcnMsIHRoZW4gcHJvY2VzcyB0aGVtICovCisJaWYgKHR4Yy0+bW9kZXMpCisJeworCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9TVEFUVVMpCS8qIG9ubHkgc2V0IGFsbG93ZWQgYml0cyAqLworCQl0aW1lX3N0YXR1cyA9ICAodHhjLT5zdGF0dXMgJiB+U1RBX1JPTkxZKSB8CisJCQkgICAgICAodGltZV9zdGF0dXMgJiBTVEFfUk9OTFkpOworCisJICAgIGlmICh0eGMtPm1vZGVzICYgQURKX0ZSRVFVRU5DWSkgewkvKiBwLiAyMiAqLworCQlpZiAodHhjLT5mcmVxID4gTUFYRlJFUSB8fCB0eGMtPmZyZXEgPCAtTUFYRlJFUSkgeworCQkgICAgcmVzdWx0ID0gLUVJTlZBTDsKKwkJICAgIGdvdG8gbGVhdmU7CisJCX0KKwkJdGltZV9mcmVxID0gKChzNjQpdHhjLT5mcmVxICogTlNFQ19QRVJfVVNFQykgPj4gKFNISUZUX1VTRUMgLSBTSElGVF9OU0VDKTsKKwkgICAgfQorCisJICAgIGlmICh0eGMtPm1vZGVzICYgQURKX01BWEVSUk9SKSB7CisJCWlmICh0eGMtPm1heGVycm9yIDwgMCB8fCB0eGMtPm1heGVycm9yID49IE5UUF9QSEFTRV9MSU1JVCkgeworCQkgICAgcmVzdWx0ID0gLUVJTlZBTDsKKwkJICAgIGdvdG8gbGVhdmU7CisJCX0KKwkJdGltZV9tYXhlcnJvciA9IHR4Yy0+bWF4ZXJyb3I7CisJICAgIH0KKworCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9FU1RFUlJPUikgeworCQlpZiAodHhjLT5lc3RlcnJvciA8IDAgfHwgdHhjLT5lc3RlcnJvciA+PSBOVFBfUEhBU0VfTElNSVQpIHsKKwkJICAgIHJlc3VsdCA9IC1FSU5WQUw7CisJCSAgICBnb3RvIGxlYXZlOworCQl9CisJCXRpbWVfZXN0ZXJyb3IgPSB0eGMtPmVzdGVycm9yOworCSAgICB9CisKKwkgICAgaWYgKHR4Yy0+bW9kZXMgJiBBREpfVElNRUNPTlNUKSB7CS8qIHAuIDI0ICovCisJCWlmICh0eGMtPmNvbnN0YW50IDwgMCkgewkvKiBOVFAgdjQgdXNlcyB2YWx1ZXMgPiA2ICovCisJCSAgICByZXN1bHQgPSAtRUlOVkFMOworCQkgICAgZ290byBsZWF2ZTsKKwkJfQorCQl0aW1lX2NvbnN0YW50ID0gbWluKHR4Yy0+Y29uc3RhbnQgKyA0LCAobG9uZylNQVhUQyk7CisJICAgIH0KKworCSAgICBpZiAodHhjLT5tb2RlcyAmIEFESl9PRkZTRVQpIHsJLyogdmFsdWVzIGNoZWNrZWQgZWFybGllciAqLworCQlpZiAodHhjLT5tb2RlcyA9PSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QpIHsKKwkJICAgIC8qIGFkanRpbWUoKSBpcyBpbmRlcGVuZGVudCBmcm9tIG50cF9hZGp0aW1lKCkgKi8KKwkJICAgIHRpbWVfYWRqdXN0ID0gdHhjLT5vZmZzZXQ7CisJCX0KKwkJZWxzZSBpZiAodGltZV9zdGF0dXMgJiBTVEFfUExMKSB7CisJCSAgICBsdGVtcCA9IHR4Yy0+b2Zmc2V0ICogTlNFQ19QRVJfVVNFQzsKKworCQkgICAgLyoKKwkJICAgICAqIFNjYWxlIHRoZSBwaGFzZSBhZGp1c3RtZW50IGFuZAorCQkgICAgICogY2xhbXAgdG8gdGhlIG9wZXJhdGluZyByYW5nZS4KKwkJICAgICAqLworCQkgICAgdGltZV9vZmZzZXQgPSBtaW4obHRlbXAsIE1BWFBIQVNFICogTlNFQ19QRVJfVVNFQyk7CisJCSAgICB0aW1lX29mZnNldCA9IG1heCh0aW1lX29mZnNldCwgLU1BWFBIQVNFICogTlNFQ19QRVJfVVNFQyk7CisKKwkJICAgIC8qCisJCSAgICAgKiBTZWxlY3Qgd2hldGhlciB0aGUgZnJlcXVlbmN5IGlzIHRvIGJlIGNvbnRyb2xsZWQKKwkJICAgICAqIGFuZCBpbiB3aGljaCBtb2RlIChQTEwgb3IgRkxMKS4gQ2xhbXAgdG8gdGhlIG9wZXJhdGluZworCQkgICAgICogcmFuZ2UuIFVnbHkgbXVsdGlwbHkvZGl2aWRlIHNob3VsZCBiZSByZXBsYWNlZCBzb21lZGF5LgorCQkgICAgICovCisKKwkJICAgIGlmICh0aW1lX3N0YXR1cyAmIFNUQV9GUkVRSE9MRCB8fCB0aW1lX3JlZnRpbWUgPT0gMCkKKwkJICAgICAgICB0aW1lX3JlZnRpbWUgPSB4dGltZS50dl9zZWM7CisJCSAgICBtdGVtcCA9IHh0aW1lLnR2X3NlYyAtIHRpbWVfcmVmdGltZTsKKwkJICAgIHRpbWVfcmVmdGltZSA9IHh0aW1lLnR2X3NlYzsKKworCQkgICAgZnJlcV9hZGogPSAoczY0KXRpbWVfb2Zmc2V0ICogbXRlbXA7CisJCSAgICBmcmVxX2FkaiA9IHNoaWZ0X3JpZ2h0KGZyZXFfYWRqLCB0aW1lX2NvbnN0YW50ICogMiArCisJCQkJCSAgIChTSElGVF9QTEwgKyAyKSAqIDIgLSBTSElGVF9OU0VDKTsKKwkJICAgIGlmIChtdGVtcCA+PSBNSU5TRUMgJiYgKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCB8fCBtdGVtcCA+IE1BWFNFQykpIHsKKwkJCXRlbXA2NCA9IChzNjQpdGltZV9vZmZzZXQgPDwgKFNISUZUX05TRUMgLSBTSElGVF9GTEwpOworCQkJaWYgKHRpbWVfb2Zmc2V0IDwgMCkgeworCQkJICAgIHRlbXA2NCA9IC10ZW1wNjQ7CisJCQkgICAgZG9fZGl2KHRlbXA2NCwgbXRlbXApOworCQkJICAgIGZyZXFfYWRqIC09IHRlbXA2NDsKKwkJCX0gZWxzZSB7CisJCQkgICAgZG9fZGl2KHRlbXA2NCwgbXRlbXApOworCQkJICAgIGZyZXFfYWRqICs9IHRlbXA2NDsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGZyZXFfYWRqICs9IHRpbWVfZnJlcTsKKwkJICAgIGZyZXFfYWRqID0gbWluKGZyZXFfYWRqLCAoczY0KU1BWEZSRVFfTlNFQyk7CisJCSAgICB0aW1lX2ZyZXEgPSBtYXgoZnJlcV9hZGosIChzNjQpLU1BWEZSRVFfTlNFQyk7CisJCSAgICB0aW1lX29mZnNldCA9ICh0aW1lX29mZnNldCAvIEhaKSA8PCBTSElGVF9VUERBVEU7CisJCX0gLyogU1RBX1BMTCAqLworCSAgICB9IC8qIHR4Yy0+bW9kZXMgJiBBREpfT0ZGU0VUICovCisJICAgIGlmICh0eGMtPm1vZGVzICYgQURKX1RJQ0spCisJCXRpY2tfdXNlYyA9IHR4Yy0+dGljazsKKworCSAgICBpZiAodHhjLT5tb2RlcyAmIChBREpfVElDS3xBREpfRlJFUVVFTkNZfEFESl9PRkZTRVQpKQorCQkgICAgbnRwX3VwZGF0ZV9mcmVxdWVuY3koKTsKKwl9IC8qIHR4Yy0+bW9kZXMgKi8KK2xlYXZlOglpZiAoKHRpbWVfc3RhdHVzICYgKFNUQV9VTlNZTkN8U1RBX0NMT0NLRVJSKSkgIT0gMCkKKwkJcmVzdWx0ID0gVElNRV9FUlJPUjsKKworCWlmICgodHhjLT5tb2RlcyAmIEFESl9PRkZTRVRfU0lOR0xFU0hPVCkgPT0gQURKX09GRlNFVF9TSU5HTEVTSE9UKQorCSAgICB0eGMtPm9mZnNldAkgICA9IHNhdmVfYWRqdXN0OworCWVsc2UKKwkgICAgdHhjLT5vZmZzZXQgICAgPSBzaGlmdF9yaWdodCh0aW1lX29mZnNldCwgU0hJRlRfVVBEQVRFKSAqIEhaIC8gMTAwMDsKKwl0eGMtPmZyZXEJICAgPSAodGltZV9mcmVxIC8gTlNFQ19QRVJfVVNFQykgPDwgKFNISUZUX1VTRUMgLSBTSElGVF9OU0VDKTsKKwl0eGMtPm1heGVycm9yCSAgID0gdGltZV9tYXhlcnJvcjsKKwl0eGMtPmVzdGVycm9yCSAgID0gdGltZV9lc3RlcnJvcjsKKwl0eGMtPnN0YXR1cwkgICA9IHRpbWVfc3RhdHVzOworCXR4Yy0+Y29uc3RhbnQJICAgPSB0aW1lX2NvbnN0YW50OworCXR4Yy0+cHJlY2lzaW9uCSAgID0gMTsKKwl0eGMtPnRvbGVyYW5jZQkgICA9IE1BWEZSRVE7CisJdHhjLT50aWNrCSAgID0gdGlja191c2VjOworCisJLyogUFBTIGlzIG5vdCBpbXBsZW1lbnRlZCwgc28gdGhlc2UgYXJlIHplcm8gKi8KKwl0eGMtPnBwc2ZyZXEJICAgPSAwOworCXR4Yy0+aml0dGVyCSAgID0gMDsKKwl0eGMtPnNoaWZ0CSAgID0gMDsKKwl0eGMtPnN0YWJpbAkgICA9IDA7CisJdHhjLT5qaXRjbnQJICAgPSAwOworCXR4Yy0+Y2FsY250CSAgID0gMDsKKwl0eGMtPmVycmNudAkgICA9IDA7CisJdHhjLT5zdGJjbnQJICAgPSAwOworCXdyaXRlX3NlcXVubG9ja19pcnEoJnh0aW1lX2xvY2spOworCWRvX2dldHRpbWVvZmRheSgmdHhjLT50aW1lKTsKKwlub3RpZnlfYXJjaF9jbW9zX3RpbWVyKCk7CisJcmV0dXJuKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwvdGltZXIuYyBiL2tlcm5lbC90aW1lci5jCmluZGV4IDFkN2RkNjIuLmMxYzdmYmMgMTAwNjQ0Ci0tLSBhL2tlcm5lbC90aW1lci5jCisrKyBiL2tlcm5lbC90aW1lci5jCkBAIC00MSwxMiArNDEsNiBAQAogI2luY2x1ZGUgPGFzbS90aW1leC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi0jaWZkZWYgQ09ORklHX1RJTUVfSU5URVJQT0xBVElPTgotc3RhdGljIHZvaWQgdGltZV9pbnRlcnBvbGF0b3JfdXBkYXRlKGxvbmcgZGVsdGFfbnNlYyk7Ci0jZWxzZQotI2RlZmluZSB0aW1lX2ludGVycG9sYXRvcl91cGRhdGUoeCkKLSNlbmRpZgotCiB1NjQgamlmZmllc182NCBfX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcCA9IElOSVRJQUxfSklGRklFUzsKIAogRVhQT1JUX1NZTUJPTChqaWZmaWVzXzY0KTsKQEAgLTEzNiw3ICsxMzAsNyBAQAogCWxpc3RfYWRkX3RhaWwoJnRpbWVyLT5lbnRyeSwgdmVjKTsKIH0KIAotLyoqKgorLyoqCiAgKiBpbml0X3RpbWVyIC0gaW5pdGlhbGl6ZSBhIHRpbWVyLgogICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgaW5pdGlhbGl6ZWQKICAqCkBAIC0xNzUsNiArMTY5LDcgQEAKICAqLwogc3RhdGljIHR2ZWNfYmFzZV90ICpsb2NrX3RpbWVyX2Jhc2Uoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJCQl1bnNpZ25lZCBsb25nICpmbGFncykKKwlfX2FjcXVpcmVzKHRpbWVyLT5iYXNlLT5sb2NrKQogewogCXR2ZWNfYmFzZV90ICpiYXNlOwogCkBAIC0yMzUsNyArMjMwLDcgQEAKIAogRVhQT1JUX1NZTUJPTChfX21vZF90aW1lcik7CiAKLS8qKioKKy8qKgogICogYWRkX3RpbWVyX29uIC0gc3RhcnQgYSB0aW1lciBvbiBhIHBhcnRpY3VsYXIgQ1BVCiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBhZGRlZAogICogQGNwdTogdGhlIENQVSB0byBzdGFydCBpdCBvbgpAQCAtMjU1LDkgKzI1MCwxMCBAQAogfQogCiAKLS8qKioKKy8qKgogICogbW9kX3RpbWVyIC0gbW9kaWZ5IGEgdGltZXIncyB0aW1lb3V0CiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBtb2RpZmllZAorICogQGV4cGlyZXM6IG5ldyB0aW1lb3V0IGluIGppZmZpZXMKICAqCiAgKiBtb2RfdGltZXIgaXMgYSBtb3JlIGVmZmljaWVudCB3YXkgdG8gdXBkYXRlIHRoZSBleHBpcmUgZmllbGQgb2YgYW4KICAqIGFjdGl2ZSB0aW1lciAoaWYgdGhlIHRpbWVyIGlzIGluYWN0aXZlIGl0IHdpbGwgYmUgYWN0aXZhdGVkKQpAQCAtMjkxLDcgKzI4Nyw3IEBACiAKIEVYUE9SVF9TWU1CT0wobW9kX3RpbWVyKTsKIAotLyoqKgorLyoqCiAgKiBkZWxfdGltZXIgLSBkZWFjdGl2ZSBhIHRpbWVyLgogICogQHRpbWVyOiB0aGUgdGltZXIgdG8gYmUgZGVhY3RpdmF0ZWQKICAqCkBAIC0zMjMsNyArMzE5LDEwIEBACiBFWFBPUlRfU1lNQk9MKGRlbF90aW1lcik7CiAKICNpZmRlZiBDT05GSUdfU01QCi0vKgorLyoqCisgKiB0cnlfdG9fZGVsX3RpbWVyX3N5bmMgLSBUcnkgdG8gZGVhY3RpdmF0ZSBhIHRpbWVyCisgKiBAdGltZXI6IHRpbWVyIGRvIGRlbAorICoKICAqIFRoaXMgZnVuY3Rpb24gdHJpZXMgdG8gZGVhY3RpdmF0ZSBhIHRpbWVyLiBVcG9uIHN1Y2Nlc3NmdWwgKHJldCA+PSAwKQogICogZXhpdCB0aGUgdGltZXIgaXMgbm90IHF1ZXVlZCBhbmQgdGhlIGhhbmRsZXIgaXMgbm90IHJ1bm5pbmcgb24gYW55IENQVS4KICAqCkBAIC0zNTEsNyArMzUwLDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi0vKioqCisvKioKICAqIGRlbF90aW1lcl9zeW5jIC0gZGVhY3RpdmF0ZSBhIHRpbWVyIGFuZCB3YWl0IGZvciB0aGUgaGFuZGxlciB0byBmaW5pc2guCiAgKiBAdGltZXI6IHRoZSB0aW1lciB0byBiZSBkZWFjdGl2YXRlZAogICoKQEAgLTQwMSwxNSArNDAwLDE1IEBACiAJcmV0dXJuIGluZGV4OwogfQogCi0vKioqCisjZGVmaW5lIElOREVYKE4pICgoYmFzZS0+dGltZXJfamlmZmllcyA+PiAoVFZSX0JJVFMgKyAoTikgKiBUVk5fQklUUykpICYgVFZOX01BU0spCisKKy8qKgogICogX19ydW5fdGltZXJzIC0gcnVuIGFsbCBleHBpcmVkIHRpbWVycyAoaWYgYW55KSBvbiB0aGlzIENQVS4KICAqIEBiYXNlOiB0aGUgdGltZXIgdmVjdG9yIHRvIGJlIHByb2Nlc3NlZC4KICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhc2NhZGVzIGFsbCB2ZWN0b3JzIGFuZCBleGVjdXRlcyBhbGwgZXhwaXJlZCB0aW1lcgogICogdmVjdG9ycy4KICAqLwotI2RlZmluZSBJTkRFWChOKSAoKGJhc2UtPnRpbWVyX2ppZmZpZXMgPj4gKFRWUl9CSVRTICsgKE4pICogVFZOX0JJVFMpKSAmIFRWTl9NQVNLKQotCiBzdGF0aWMgaW5saW5lIHZvaWQgX19ydW5fdGltZXJzKHR2ZWNfYmFzZV90ICpiYXNlKQogewogCXN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcjsKQEAgLTU2MywxMiArNTYyLDYgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIFRpbWVrZWVwaW5nIHZhcmlhYmxlcwotICovCi11bnNpZ25lZCBsb25nIHRpY2tfdXNlYyA9IFRJQ0tfVVNFQzsgCQkvKiBVU0VSX0haIHBlcmlvZCAodXNlYykgKi8KLXVuc2lnbmVkIGxvbmcgdGlja19uc2VjID0gVElDS19OU0VDOwkJLyogQUNUSFogcGVyaW9kIChuc2VjKSAqLwotCiAvKiAKICAqIFRoZSBjdXJyZW50IHRpbWUgCiAgKiB3YWxsX3RvX21vbm90b25pYyBpcyB3aGF0IHdlIG5lZWQgdG8gYWRkIHRvIHh0aW1lIChvciB4dGltZSBjb3JyZWN0ZWQgCkBAIC01ODIsMjA5ICs1NzUsNiBAQAogCiBFWFBPUlRfU1lNQk9MKHh0aW1lKTsKIAotLyogRG9uJ3QgY29tcGxldGVseSBmYWlsIGZvciBIWiA+IDUwMC4gICovCi1pbnQgdGlja2FkaiA9IDUwMC9IWiA/IDogMTsJCS8qIG1pY3Jvc2VjcyAqLwotCi0KLS8qCi0gKiBwaGFzZS1sb2NrIGxvb3AgdmFyaWFibGVzCi0gKi8KLS8qIFRJTUVfRVJST1IgcHJldmVudHMgb3ZlcndyaXRpbmcgdGhlIENNT1MgY2xvY2sgKi8KLWludCB0aW1lX3N0YXRlID0gVElNRV9PSzsJCS8qIGNsb2NrIHN5bmNocm9uaXphdGlvbiBzdGF0dXMJKi8KLWludCB0aW1lX3N0YXR1cyA9IFNUQV9VTlNZTkM7CQkvKiBjbG9jayBzdGF0dXMgYml0cwkJKi8KLWxvbmcgdGltZV9vZmZzZXQ7CQkJLyogdGltZSBhZGp1c3RtZW50ICh1cykJCSovCi1sb25nIHRpbWVfY29uc3RhbnQgPSAyOwkJCS8qIHBsbCB0aW1lIGNvbnN0YW50CQkqLwotbG9uZyB0aW1lX3RvbGVyYW5jZSA9IE1BWEZSRVE7CQkvKiBmcmVxdWVuY3kgdG9sZXJhbmNlIChwcG0pCSovCi1sb25nIHRpbWVfcHJlY2lzaW9uID0gMTsJCS8qIGNsb2NrIHByZWNpc2lvbiAodXMpCQkqLwotbG9uZyB0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwkvKiBtYXhpbXVtIGVycm9yICh1cykJCSovCi1sb25nIHRpbWVfZXN0ZXJyb3IgPSBOVFBfUEhBU0VfTElNSVQ7CS8qIGVzdGltYXRlZCBlcnJvciAodXMpCQkqLwotbG9uZyB0aW1lX2ZyZXEgPSAoKChOU0VDX1BFUl9TRUMgKyBIWi8yKSAlIEhaIC0gSFovMikgPDwgU0hJRlRfVVNFQykgLyBOU0VDX1BFUl9VU0VDOwotCQkJCQkvKiBmcmVxdWVuY3kgb2Zmc2V0IChzY2FsZWQgcHBtKSovCi1zdGF0aWMgbG9uZyB0aW1lX2FkajsJCQkvKiB0aWNrIGFkanVzdCAoc2NhbGVkIDEgLyBIWikJKi8KLWxvbmcgdGltZV9yZWZ0aW1lOwkJCS8qIHRpbWUgYXQgbGFzdCBhZGp1c3RtZW50IChzKQkqLwotbG9uZyB0aW1lX2FkanVzdDsKLWxvbmcgdGltZV9uZXh0X2FkanVzdDsKLQotLyoKLSAqIHRoaXMgcm91dGluZSBoYW5kbGVzIHRoZSBvdmVyZmxvdyBvZiB0aGUgbWljcm9zZWNvbmQgZmllbGQKLSAqCi0gKiBUaGUgdHJpY2t5IGJpdHMgb2YgY29kZSB0byBoYW5kbGUgdGhlIGFjY3VyYXRlIGNsb2NrIHN1cHBvcnQKLSAqIHdlcmUgcHJvdmlkZWQgYnkgRGF2ZSBNaWxscyAoTWlsbHNAVURFTC5FRFUpIG9mIE5UUCBmYW1lLgotICogVGhleSB3ZXJlIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGZvciBTVU4gYW5kIERFQyBrZXJuZWxzLgotICogQWxsIHRoZSBrdWRvcyBzaG91bGQgZ28gdG8gRGF2ZSBmb3IgdGhpcyBzdHVmZi4KLSAqCi0gKi8KLXN0YXRpYyB2b2lkIHNlY29uZF9vdmVyZmxvdyh2b2lkKQotewotCWxvbmcgbHRlbXA7Ci0KLQkvKiBCdW1wIHRoZSBtYXhlcnJvciBmaWVsZCAqLwotCXRpbWVfbWF4ZXJyb3IgKz0gdGltZV90b2xlcmFuY2UgPj4gU0hJRlRfVVNFQzsKLQlpZiAodGltZV9tYXhlcnJvciA+IE5UUF9QSEFTRV9MSU1JVCkgewotCQl0aW1lX21heGVycm9yID0gTlRQX1BIQVNFX0xJTUlUOwotCQl0aW1lX3N0YXR1cyB8PSBTVEFfVU5TWU5DOwotCX0KLQotCS8qCi0JICogTGVhcCBzZWNvbmQgcHJvY2Vzc2luZy4gSWYgaW4gbGVhcC1pbnNlcnQgc3RhdGUgYXQgdGhlIGVuZCBvZiB0aGUKLQkgKiBkYXksIHRoZSBzeXN0ZW0gY2xvY2sgaXMgc2V0IGJhY2sgb25lIHNlY29uZDsgaWYgaW4gbGVhcC1kZWxldGUKLQkgKiBzdGF0ZSwgdGhlIHN5c3RlbSBjbG9jayBpcyBzZXQgYWhlYWQgb25lIHNlY29uZC4gVGhlIG1pY3JvdGltZSgpCi0JICogcm91dGluZSBvciBleHRlcm5hbCBjbG9jayBkcml2ZXIgd2lsbCBpbnN1cmUgdGhhdCByZXBvcnRlZCB0aW1lIGlzCi0JICogYWx3YXlzIG1vbm90b25pYy4gVGhlIHVnbHkgZGl2aWRlcyBzaG91bGQgYmUgcmVwbGFjZWQuCi0JICovCi0Jc3dpdGNoICh0aW1lX3N0YXRlKSB7Ci0JY2FzZSBUSU1FX09LOgotCQlpZiAodGltZV9zdGF0dXMgJiBTVEFfSU5TKQotCQkJdGltZV9zdGF0ZSA9IFRJTUVfSU5TOwotCQllbHNlIGlmICh0aW1lX3N0YXR1cyAmIFNUQV9ERUwpCi0JCQl0aW1lX3N0YXRlID0gVElNRV9ERUw7Ci0JCWJyZWFrOwotCWNhc2UgVElNRV9JTlM6Ci0JCWlmICh4dGltZS50dl9zZWMgJSA4NjQwMCA9PSAwKSB7Ci0JCQl4dGltZS50dl9zZWMtLTsKLQkJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYysrOwotCQkJLyoKLQkJCSAqIFRoZSB0aW1lciBpbnRlcnBvbGF0b3Igd2lsbCBtYWtlIHRpbWUgY2hhbmdlCi0JCQkgKiBncmFkdWFsbHkgaW5zdGVhZCBvZiBhbiBpbW1lZGlhdGUganVtcCBieSBvbmUgc2Vjb25kCi0JCQkgKi8KLQkJCXRpbWVfaW50ZXJwb2xhdG9yX3VwZGF0ZSgtTlNFQ19QRVJfU0VDKTsKLQkJCXRpbWVfc3RhdGUgPSBUSU1FX09PUDsKLQkJCWNsb2NrX3dhc19zZXQoKTsKLQkJCXByaW50ayhLRVJOX05PVElDRSAiQ2xvY2s6IGluc2VydGluZyBsZWFwIHNlY29uZCAiCi0JCQkJCSIyMzo1OTo2MCBVVENcbiIpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVElNRV9ERUw6Ci0JCWlmICgoeHRpbWUudHZfc2VjICsgMSkgJSA4NjQwMCA9PSAwKSB7Ci0JCQl4dGltZS50dl9zZWMrKzsKLQkJCXdhbGxfdG9fbW9ub3RvbmljLnR2X3NlYy0tOwotCQkJLyoKLQkJCSAqIFVzZSBvZiB0aW1lIGludGVycG9sYXRvciBmb3IgYSBncmFkdWFsIGNoYW5nZSBvZgotCQkJICogdGltZQotCQkJICovCi0JCQl0aW1lX2ludGVycG9sYXRvcl91cGRhdGUoTlNFQ19QRVJfU0VDKTsKLQkJCXRpbWVfc3RhdGUgPSBUSU1FX1dBSVQ7Ci0JCQljbG9ja193YXNfc2V0KCk7Ci0JCQlwcmludGsoS0VSTl9OT1RJQ0UgIkNsb2NrOiBkZWxldGluZyBsZWFwIHNlY29uZCAiCi0JCQkJCSIyMzo1OTo1OSBVVENcbiIpOwotCQl9Ci0JCWJyZWFrOwotCWNhc2UgVElNRV9PT1A6Ci0JCXRpbWVfc3RhdGUgPSBUSU1FX1dBSVQ7Ci0JCWJyZWFrOwotCWNhc2UgVElNRV9XQUlUOgotCQlpZiAoISh0aW1lX3N0YXR1cyAmIChTVEFfSU5TIHwgU1RBX0RFTCkpKQotCQl0aW1lX3N0YXRlID0gVElNRV9PSzsKLQl9Ci0KLQkvKgotCSAqIENvbXB1dGUgdGhlIHBoYXNlIGFkanVzdG1lbnQgZm9yIHRoZSBuZXh0IHNlY29uZC4gSW4gUExMIG1vZGUsIHRoZQotCSAqIG9mZnNldCBpcyByZWR1Y2VkIGJ5IGEgZml4ZWQgZmFjdG9yIHRpbWVzIHRoZSB0aW1lIGNvbnN0YW50LiBJbiBGTEwKLQkgKiBtb2RlIHRoZSBvZmZzZXQgaXMgdXNlZCBkaXJlY3RseS4gSW4gZWl0aGVyIG1vZGUsIHRoZSBtYXhpbXVtIHBoYXNlCi0JICogYWRqdXN0bWVudCBmb3IgZWFjaCBzZWNvbmQgaXMgY2xhbXBlZCBzbyBhcyB0byBzcHJlYWQgdGhlIGFkanVzdG1lbnQKLQkgKiBvdmVyIG5vdCBtb3JlIHRoYW4gdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gdXBkYXRlcy4KLQkgKi8KLQlsdGVtcCA9IHRpbWVfb2Zmc2V0OwotCWlmICghKHRpbWVfc3RhdHVzICYgU1RBX0ZMTCkpCi0JCWx0ZW1wID0gc2hpZnRfcmlnaHQobHRlbXAsIFNISUZUX0tHICsgdGltZV9jb25zdGFudCk7Ci0JbHRlbXAgPSBtaW4obHRlbXAsIChNQVhQSEFTRSAvIE1JTlNFQykgPDwgU0hJRlRfVVBEQVRFKTsKLQlsdGVtcCA9IG1heChsdGVtcCwgLShNQVhQSEFTRSAvIE1JTlNFQykgPDwgU0hJRlRfVVBEQVRFKTsKLQl0aW1lX29mZnNldCAtPSBsdGVtcDsKLQl0aW1lX2FkaiA9IGx0ZW1wIDw8IChTSElGVF9TQ0FMRSAtIFNISUZUX0haIC0gU0hJRlRfVVBEQVRFKTsKLQotCS8qCi0JICogQ29tcHV0ZSB0aGUgZnJlcXVlbmN5IGVzdGltYXRlIGFuZCBhZGRpdGlvbmFsIHBoYXNlIGFkanVzdG1lbnQgZHVlCi0JICogdG8gZnJlcXVlbmN5IGVycm9yIGZvciB0aGUgbmV4dCBzZWNvbmQuCi0JICovCi0JbHRlbXAgPSB0aW1lX2ZyZXE7Ci0JdGltZV9hZGogKz0gc2hpZnRfcmlnaHQobHRlbXAsKFNISUZUX1VTRUMgKyBTSElGVF9IWiAtIFNISUZUX1NDQUxFKSk7Ci0KLSNpZiBIWiA9PSAxMDAKLQkvKgotCSAqIENvbXBlbnNhdGUgZm9yIChIWj09MTAwKSAhPSAoMSA8PCBTSElGVF9IWikuICBBZGQgMjUlIGFuZCAzLjEyNSUgdG8KLQkgKiBnZXQgMTI4LjEyNTsgPT4gb25seSAwLjEyNSUgZXJyb3IgKHAuIDE0KQotCSAqLwotCXRpbWVfYWRqICs9IHNoaWZ0X3JpZ2h0KHRpbWVfYWRqLCAyKSArIHNoaWZ0X3JpZ2h0KHRpbWVfYWRqLCA1KTsKLSNlbmRpZgotI2lmIEhaID09IDI1MAotCS8qCi0JICogQ29tcGVuc2F0ZSBmb3IgKEhaPT0yNTApICE9ICgxIDw8IFNISUZUX0haKS4gIEFkZCAxLjU2MjUlIGFuZAotCSAqIDAuNzgxMjUlIHRvIGdldCAyNTUuODU5Mzg7ID0+IG9ubHkgMC4wNSUgZXJyb3IgKHAuIDE0KQotCSAqLwotCXRpbWVfYWRqICs9IHNoaWZ0X3JpZ2h0KHRpbWVfYWRqLCA2KSArIHNoaWZ0X3JpZ2h0KHRpbWVfYWRqLCA3KTsKLSNlbmRpZgotI2lmIEhaID09IDEwMDAKLQkvKgotCSAqIENvbXBlbnNhdGUgZm9yIChIWj09MTAwMCkgIT0gKDEgPDwgU0hJRlRfSFopLiAgQWRkIDEuNTYyNSUgYW5kCi0JICogMC43ODEyNSUgdG8gZ2V0IDEwMjMuNDM3NTsgPT4gb25seSAwLjA1JSBlcnJvciAocC4gMTQpCi0JICovCi0JdGltZV9hZGogKz0gc2hpZnRfcmlnaHQodGltZV9hZGosIDYpICsgc2hpZnRfcmlnaHQodGltZV9hZGosIDcpOwotI2VuZGlmCi19Ci0KLS8qCi0gKiBSZXR1cm5zIGhvdyBtYW55IG1pY3Jvc2Vjb25kcyB3ZSBuZWVkIHRvIGFkZCB0byB4dGltZSB0aGlzIHRpY2sKLSAqIGluIGRvaW5nIGFuIGFkanVzdG1lbnQgcmVxdWVzdGVkIHdpdGggYWRqdGltZS4KLSAqLwotc3RhdGljIGxvbmcgYWRqdGltZV9hZGp1c3RtZW50KHZvaWQpCi17Ci0JbG9uZyB0aW1lX2FkanVzdF9zdGVwOwotCi0JdGltZV9hZGp1c3Rfc3RlcCA9IHRpbWVfYWRqdXN0OwotCWlmICh0aW1lX2FkanVzdF9zdGVwKSB7Ci0JCS8qCi0JCSAqIFdlIGFyZSBkb2luZyBhbiBhZGp0aW1lIHRoaW5nLiAgUHJlcGFyZSB0aW1lX2FkanVzdF9zdGVwIHRvCi0JCSAqIGJlIHdpdGhpbiBib3VuZHMuICBOb3RlIHRoYXQgYSBwb3NpdGl2ZSB0aW1lX2FkanVzdCBtZWFucyB3ZQotCQkgKiB3YW50IHRoZSBjbG9jayB0byBydW4gZmFzdGVyLgotCQkgKgotCQkgKiBMaW1pdCB0aGUgYW1vdW50IG9mIHRoZSBzdGVwIHRvIGJlIGluIHRoZSByYW5nZQotCQkgKiAtdGlja2FkaiAuLiArdGlja2FkagotCQkgKi8KLQkJdGltZV9hZGp1c3Rfc3RlcCA9IG1pbih0aW1lX2FkanVzdF9zdGVwLCAobG9uZyl0aWNrYWRqKTsKLQkJdGltZV9hZGp1c3Rfc3RlcCA9IG1heCh0aW1lX2FkanVzdF9zdGVwLCAobG9uZyktdGlja2Fkaik7Ci0JfQotCXJldHVybiB0aW1lX2FkanVzdF9zdGVwOwotfQotCi0vKiBpbiB0aGUgTlRQIHJlZmVyZW5jZSB0aGlzIGlzIGNhbGxlZCAiaGFyZGNsb2NrKCkiICovCi1zdGF0aWMgdm9pZCB1cGRhdGVfbnRwX29uZV90aWNrKHZvaWQpCi17Ci0JbG9uZyB0aW1lX2FkanVzdF9zdGVwOwotCi0JdGltZV9hZGp1c3Rfc3RlcCA9IGFkanRpbWVfYWRqdXN0bWVudCgpOwotCWlmICh0aW1lX2FkanVzdF9zdGVwKQotCQkvKiBSZWR1Y2UgYnkgdGhpcyBzdGVwIHRoZSBhbW91bnQgb2YgdGltZSBsZWZ0ICAqLwotCQl0aW1lX2FkanVzdCAtPSB0aW1lX2FkanVzdF9zdGVwOwotCi0JLyogQ2hhbmdlcyBieSBhZGp0aW1lKCkgZG8gbm90IHRha2UgZWZmZWN0IHRpbGwgbmV4dCB0aWNrLiAqLwotCWlmICh0aW1lX25leHRfYWRqdXN0ICE9IDApIHsKLQkJdGltZV9hZGp1c3QgPSB0aW1lX25leHRfYWRqdXN0OwotCQl0aW1lX25leHRfYWRqdXN0ID0gMDsKLQl9Ci19Ci0KLS8qCi0gKiBSZXR1cm4gaG93IGxvbmcgdGlja3MgYXJlIGF0IHRoZSBtb21lbnQsIHRoYXQgaXMsIGhvdyBtdWNoIHRpbWUKLSAqIHVwZGF0ZV93YWxsX3RpbWVfb25lX3RpY2sgd2lsbCBhZGQgdG8geHRpbWUgbmV4dCB0aW1lIHdlIGNhbGwgaXQKLSAqIChhc3N1bWluZyBubyBjYWxscyB0byBkb19hZGp0aW1leCBpbiB0aGUgbWVhbnRpbWUpLgotICogVGhlIHJldHVybiB2YWx1ZSBpcyBpbiBmaXhlZC1wb2ludCBuYW5vc2Vjb25kcyBzaGlmdGVkIGJ5IHRoZQotICogc3BlY2lmaWVkIG51bWJlciBvZiBiaXRzIHRvIHRoZSByaWdodCBvZiB0aGUgYmluYXJ5IHBvaW50LgotICogVGhpcyBmdW5jdGlvbiBoYXMgbm8gc2lkZS1lZmZlY3RzLgotICovCi11NjQgY3VycmVudF90aWNrX2xlbmd0aCh2b2lkKQotewotCWxvbmcgZGVsdGFfbnNlYzsKLQl1NjQgcmV0OwotCi0JLyogY2FsY3VsYXRlIHRoZSBmaW5lc3QgaW50ZXJ2YWwgTlRQIHdpbGwgYWxsb3cuCi0JICogICAgaWU6IG5hbm9zZWNvbmQgdmFsdWUgc2hpZnRlZCBieSAoU0hJRlRfU0NBTEUgLSAxMCkKLQkgKi8KLQlkZWx0YV9uc2VjID0gdGlja19uc2VjICsgYWRqdGltZV9hZGp1c3RtZW50KCkgKiAxMDAwOwotCXJldCA9ICh1NjQpZGVsdGFfbnNlYyA8PCBUSUNLX0xFTkdUSF9TSElGVDsKLQlyZXQgKz0gKHM2NCl0aW1lX2FkaiA8PCAoVElDS19MRU5HVEhfU0hJRlQgLSAoU0hJRlRfU0NBTEUgLSAxMCkpOwotCi0JcmV0dXJuIHJldDsKLX0KIAogLyogWFhYIC0gYWxsIG9mIHRoaXMgdGltZWtlZXBpbmcgY29kZSBzaG91bGQgYmUgbGF0ZXIgbW92ZWQgdG8gdGltZS5jICovCiAjaW5jbHVkZSA8bGludXgvY2xvY2tzb3VyY2UuaD4KQEAgLTk2MSwyMSArNzUxLDI0IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXdyaXRlX3NlcWxvY2tfaXJxc2F2ZSgmeHRpbWVfbG9jaywgZmxhZ3MpOworCisJbnRwX2NsZWFyKCk7CisKIAljbG9jayA9IGNsb2Nrc291cmNlX2dldF9uZXh0KCk7CiAJY2xvY2tzb3VyY2VfY2FsY3VsYXRlX2ludGVydmFsKGNsb2NrLCB0aWNrX25zZWMpOwogCWNsb2NrLT5jeWNsZV9sYXN0ID0gY2xvY2tzb3VyY2VfcmVhZChjbG9jayk7Ci0JbnRwX2NsZWFyKCk7CisKIAl3cml0ZV9zZXF1bmxvY2tfaXJxcmVzdG9yZSgmeHRpbWVfbG9jaywgZmxhZ3MpOwogfQogCiAKIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfc3VzcGVuZGVkOwotLyoKKy8qKgogICogdGltZWtlZXBpbmdfcmVzdW1lIC0gUmVzdW1lcyB0aGUgZ2VuZXJpYyB0aW1la2VlcGluZyBzdWJzeXN0ZW0uCiAgKiBAZGV2Ogl1bnVzZWQKICAqCiAgKiBUaGlzIGlzIGZvciB0aGUgZ2VuZXJpYyBjbG9ja3NvdXJjZSB0aW1la2VlcGluZy4KLSAqIHh0aW1lL3dhbGxfdG9fbW9ub3RvbmljL2ppZmZpZXMvd2FsbF9qaWZmaWVzL2V0YyBhcmUKKyAqIHh0aW1lL3dhbGxfdG9fbW9ub3RvbmljL2ppZmZpZXMvZXRjIGFyZQogICogc3RpbGwgbWFuYWdlZCBieSBhcmNoIHNwZWNpZmljIHN1c3BlbmQvcmVzdW1lIGNvZGUuCiAgKi8KIHN0YXRpYyBpbnQgdGltZWtlZXBpbmdfcmVzdW1lKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYpCkBAIC0xMTA2LDcgKzg5OSw3IEBACiAJY2xvY2stPmVycm9yIC09IChpbnRlcnZhbCAtIG9mZnNldCkgPDwgKFRJQ0tfTEVOR1RIX1NISUZUIC0gY2xvY2stPnNoaWZ0KTsKIH0KIAotLyoKKy8qKgogICogdXBkYXRlX3dhbGxfdGltZSAtIFVzZXMgdGhlIGN1cnJlbnQgY2xvY2tzb3VyY2UgdG8gaW5jcmVtZW50IHRoZSB3YWxsIHRpbWUKICAqCiAgKiBDYWxsZWQgZnJvbSB0aGUgdGltZXIgaW50ZXJydXB0LCBtdXN0IGhvbGQgYSB3cml0ZSBvbiB4dGltZV9sb2NrLgpAQCAtMTE0NCw4ICs5MzcsNiBAQAogCQkvKiBpbnRlcnBvbGF0b3IgYml0cyAqLwogCQl0aW1lX2ludGVycG9sYXRvcl91cGRhdGUoY2xvY2stPnh0aW1lX2ludGVydmFsCiAJCQkJCQk+PiBjbG9jay0+c2hpZnQpOwotCQkvKiBpbmNyZW1lbnQgdGhlIE5UUCBzdGF0ZSBtYWNoaW5lICovCi0JCXVwZGF0ZV9udHBfb25lX3RpY2soKTsKIAogCQkvKiBhY2N1bXVsYXRlIGVycm9yIGJldHdlZW4gTlRQIGFuZCBjbG9jayBpbnRlcnZhbCAqLwogCQljbG9jay0+ZXJyb3IgKz0gY3VycmVudF90aWNrX2xlbmd0aCgpOwpAQCAtMTIxNywxOSArMTAwOCwxNCBAQAogCXVuc2lnbmVkIGxvbmcgYWN0aXZlX3Rhc2tzOyAvKiBmaXhlZC1wb2ludCAqLwogCXN0YXRpYyBpbnQgY291bnQgPSBMT0FEX0ZSRVE7CiAKLQljb3VudCAtPSB0aWNrczsKLQlpZiAoY291bnQgPCAwKSB7Ci0JCWNvdW50ICs9IExPQURfRlJFUTsKLQkJYWN0aXZlX3Rhc2tzID0gY291bnRfYWN0aXZlX3Rhc2tzKCk7CisJYWN0aXZlX3Rhc2tzID0gY291bnRfYWN0aXZlX3Rhc2tzKCk7CisJZm9yIChjb3VudCAtPSB0aWNrczsgY291bnQgPCAwOyBjb3VudCArPSBMT0FEX0ZSRVEpIHsKIAkJQ0FMQ19MT0FEKGF2ZW5ydW5bMF0sIEVYUF8xLCBhY3RpdmVfdGFza3MpOwogCQlDQUxDX0xPQUQoYXZlbnJ1blsxXSwgRVhQXzUsIGFjdGl2ZV90YXNrcyk7CiAJCUNBTENfTE9BRChhdmVucnVuWzJdLCBFWFBfMTUsIGFjdGl2ZV90YXNrcyk7CiAJfQogfQogCi0vKiBqaWZmaWVzIGF0IHRoZSBtb3N0IHJlY2VudCB1cGRhdGUgb2Ygd2FsbCB0aW1lICovCi11bnNpZ25lZCBsb25nIHdhbGxfamlmZmllcyA9IElOSVRJQUxfSklGRklFUzsKLQogLyoKICAqIFRoaXMgcmVhZC13cml0ZSBzcGlubG9jayBwcm90ZWN0cyB1cyBmcm9tIHJhY2VzIGluIFNNUCB3aGlsZQogICogcGxheWluZyB3aXRoIHh0aW1lIGFuZCBhdmVucnVuLgpAQCAtMTI2NSwxMiArMTA1MSw4IEBACiAgKiBDYWxsZWQgYnkgdGhlIHRpbWVyIGludGVycnVwdC4geHRpbWVfbG9jayBtdXN0IGFscmVhZHkgYmUgdGFrZW4KICAqIGJ5IHRoZSB0aW1lciBJUlEhCiAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfdGltZXModm9pZCkKK3N0YXRpYyBpbmxpbmUgdm9pZCB1cGRhdGVfdGltZXModW5zaWduZWQgbG9uZyB0aWNrcykKIHsKLQl1bnNpZ25lZCBsb25nIHRpY2tzOwotCi0JdGlja3MgPSBqaWZmaWVzIC0gd2FsbF9qaWZmaWVzOwotCXdhbGxfamlmZmllcyArPSB0aWNrczsKIAl1cGRhdGVfd2FsbF90aW1lKCk7CiAJY2FsY19sb2FkKHRpY2tzKTsKIH0KQEAgLTEyODEsMTIgKzEwNjMsMTAgQEAKICAqIGppZmZpZXMgaXMgZGVmaW5lZCBpbiB0aGUgbGlua2VyIHNjcmlwdC4uLgogICovCiAKLXZvaWQgZG9fdGltZXIoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit2b2lkIGRvX3RpbWVyKHVuc2lnbmVkIGxvbmcgdGlja3MpCiB7Ci0JamlmZmllc182NCsrOwotCS8qIHByZXZlbnQgbG9hZGluZyBqaWZmaWVzIGJlZm9yZSBzdG9yaW5nIG5ldyBqaWZmaWVzXzY0IHZhbHVlLiAqLwotCWJhcnJpZXIoKTsKLQl1cGRhdGVfdGltZXMoKTsKKwlqaWZmaWVzXzY0ICs9IHRpY2tzOworCXVwZGF0ZV90aW1lcyh0aWNrcyk7CiB9CiAKICNpZmRlZiBfX0FSQ0hfV0FOVF9TWVNfQUxBUk0KQEAgLTE0NzAsOCArMTI1MCw5IEBACiAJcmV0dXJuIGN1cnJlbnQtPnBpZDsKIH0KIAotLyoKKy8qKgogICogc3lzX3N5c2luZm8gLSBmaWxsIGluIHN5c2luZm8gc3RydWN0CisgKiBAaW5mbzogcG9pbnRlciB0byBidWZmZXIgdG8gZmlsbAogICovIAogYXNtbGlua2FnZSBsb25nIHN5c19zeXNpbmZvKHN0cnVjdCBzeXNpbmZvIF9fdXNlciAqaW5mbykKIHsKQEAgLTE2ODgsOCArMTQ2OSwxMCBAQAogCiB2b2lkIF9faW5pdCBpbml0X3RpbWVycyh2b2lkKQogewotCXRpbWVyX2NwdV9ub3RpZnkoJnRpbWVyc19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCisJaW50IGVyciA9IHRpbWVyX2NwdV9ub3RpZnkoJnRpbWVyc19uYiwgKHVuc2lnbmVkIGxvbmcpQ1BVX1VQX1BSRVBBUkUsCiAJCQkJKHZvaWQgKikobG9uZylzbXBfcHJvY2Vzc29yX2lkKCkpOworCisJQlVHX09OKGVyciA9PSBOT1RJRllfQkFEKTsKIAlyZWdpc3Rlcl9jcHVfbm90aWZpZXIoJnRpbWVyc19uYik7CiAJb3Blbl9zb2Z0aXJxKFRJTUVSX1NPRlRJUlEsIHJ1bl90aW1lcl9zb2Z0aXJxLCBOVUxMKTsKIH0KQEAgLTE3NzQsNyArMTU1Nyw3IEBACiAjZGVmaW5lIElOVEVSUE9MQVRPUl9BREpVU1QgNjU1MzYKICNkZWZpbmUgSU5URVJQT0xBVE9SX01BWF9TS0lQIDEwKklOVEVSUE9MQVRPUl9BREpVU1QKIAotc3RhdGljIHZvaWQgdGltZV9pbnRlcnBvbGF0b3JfdXBkYXRlKGxvbmcgZGVsdGFfbnNlYykKK3ZvaWQgdGltZV9pbnRlcnBvbGF0b3JfdXBkYXRlKGxvbmcgZGVsdGFfbnNlYykKIHsKIAl1NjQgY291bnRlcjsKIAl1bnNpZ25lZCBsb25nIG9mZnNldDsKZGlmZiAtLWdpdCBhL2tlcm5lbC90c2FjY3QuYyBiL2tlcm5lbC90c2FjY3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjQ0MzIyCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL3RzYWNjdC5jCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogdHNhY2N0LmMgLSBTeXN0ZW0gYWNjb3VudGluZyBvdmVyIHRhc2tzdGF0cyBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIEpheSBMYW4sCTxqbGFuQHNnaS5jb20+CisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvdHNhY2N0X2tlcm4uaD4KKyNpbmNsdWRlIDxsaW51eC9hY2N0Lmg+CisjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgorCisKKyNkZWZpbmUgVVNFQ19QRVJfVElDSwkoVVNFQ19QRVJfU0VDL0haKQorLyoKKyAqIGZpbGwgaW4gYmFzaWMgYWNjb3VudGluZyBmaWVsZHMKKyAqLwordm9pZCBiYWNjdF9hZGRfdHNrKHN0cnVjdCB0YXNrc3RhdHMgKnN0YXRzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lLCB0czsKKwlzNjQgYWNfZXRpbWU7CisKKwlCVUlMRF9CVUdfT04oVFNfQ09NTV9MRU4gPCBUQVNLX0NPTU1fTEVOKTsKKworCS8qIGNhbGN1bGF0ZSB0YXNrIGVsYXBzZWQgdGltZSBpbiB0aW1lc3BlYyAqLworCWRvX3Bvc2l4X2Nsb2NrX21vbm90b25pY19nZXR0aW1lKCZ1cHRpbWUpOworCXRzID0gdGltZXNwZWNfc3ViKHVwdGltZSwgY3VycmVudC0+Z3JvdXBfbGVhZGVyLT5zdGFydF90aW1lKTsKKwkvKiByZWJhc2UgZWxhcHNlZCB0aW1lIHRvIHVzZWMgKi8KKwlhY19ldGltZSA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CisJZG9fZGl2KGFjX2V0aW1lLCBOU0VDX1BFUl9VU0VDKTsKKwlzdGF0cy0+YWNfZXRpbWUgPSBhY19ldGltZTsKKwlzdGF0cy0+YWNfYnRpbWUgPSB4dGltZS50dl9zZWMgLSB0cy50dl9zZWM7CisJaWYgKHRocmVhZF9ncm91cF9sZWFkZXIodHNrKSkgeworCQlzdGF0cy0+YWNfZXhpdGNvZGUgPSB0c2stPmV4aXRfY29kZTsKKwkJaWYgKHRzay0+ZmxhZ3MgJiBQRl9GT1JLTk9FWEVDKQorCQkJc3RhdHMtPmFjX2ZsYWcgfD0gQUZPUks7CisJfQorCWlmICh0c2stPmZsYWdzICYgUEZfU1VQRVJQUklWKQorCQlzdGF0cy0+YWNfZmxhZyB8PSBBU1U7CisJaWYgKHRzay0+ZmxhZ3MgJiBQRl9EVU1QQ09SRSkKKwkJc3RhdHMtPmFjX2ZsYWcgfD0gQUNPUkU7CisJaWYgKHRzay0+ZmxhZ3MgJiBQRl9TSUdOQUxFRCkKKwkJc3RhdHMtPmFjX2ZsYWcgfD0gQVhTSUc7CisJc3RhdHMtPmFjX25pY2UJID0gdGFza19uaWNlKHRzayk7CisJc3RhdHMtPmFjX3NjaGVkCSA9IHRzay0+cG9saWN5OworCXN0YXRzLT5hY191aWQJID0gdHNrLT51aWQ7CisJc3RhdHMtPmFjX2dpZAkgPSB0c2stPmdpZDsKKwlzdGF0cy0+YWNfcGlkCSA9IHRzay0+cGlkOworCXN0YXRzLT5hY19wcGlkCSA9ICh0c2stPnBhcmVudCkgPyB0c2stPnBhcmVudC0+cGlkIDogMDsKKwlzdGF0cy0+YWNfdXRpbWUJID0gY3B1dGltZV90b19tc2Vjcyh0c2stPnV0aW1lKSAqIFVTRUNfUEVSX01TRUM7CisJc3RhdHMtPmFjX3N0aW1lCSA9IGNwdXRpbWVfdG9fbXNlY3ModHNrLT5zdGltZSkgKiBVU0VDX1BFUl9NU0VDOworCXN0YXRzLT5hY19taW5mbHQgPSB0c2stPm1pbl9mbHQ7CisJc3RhdHMtPmFjX21hamZsdCA9IHRzay0+bWFqX2ZsdDsKKworCXN0cm5jcHkoc3RhdHMtPmFjX2NvbW0sIHRzay0+Y29tbSwgc2l6ZW9mKHN0YXRzLT5hY19jb21tKSk7Cit9CisKKworI2lmZGVmIENPTkZJR19UQVNLX1hBQ0NUCisKKyNkZWZpbmUgS0IgMTAyNAorI2RlZmluZSBNQiAoMTAyNCpLQikKKy8qCisgKiBmaWxsIGluIGV4dGVuZGVkIGFjY291bnRpbmcgZmllbGRzCisgKi8KK3ZvaWQgeGFjY3RfYWRkX3RzayhzdHJ1Y3QgdGFza3N0YXRzICpzdGF0cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKQoreworCS8qIGNvbnZlcnQgcGFnZXMtamlmZmllcyB0byBNYnl0ZS11c2VjICovCisJc3RhdHMtPmNvcmVtZW0gPSBqaWZmaWVzX3RvX3VzZWNzKHAtPmFjY3RfcnNzX21lbTEpICogUEFHRV9TSVpFIC8gTUI7CisJc3RhdHMtPnZpcnRtZW0gPSBqaWZmaWVzX3RvX3VzZWNzKHAtPmFjY3Rfdm1fbWVtMSkgKiBQQUdFX1NJWkUgLyBNQjsKKwlpZiAocC0+bW0pIHsKKwkJLyogYWRqdXN0IHRvIEtCIHVuaXQgKi8KKwkJc3RhdHMtPmhpd2F0ZXJfcnNzICAgPSBwLT5tbS0+aGl3YXRlcl9yc3MgKiBQQUdFX1NJWkUgLyBLQjsKKwkJc3RhdHMtPmhpd2F0ZXJfdm0gICAgPSBwLT5tbS0+aGl3YXRlcl92bSAqIFBBR0VfU0laRSAvIEtCOworCX0KKwlzdGF0cy0+cmVhZF9jaGFyCT0gcC0+cmNoYXI7CisJc3RhdHMtPndyaXRlX2NoYXIJPSBwLT53Y2hhcjsKKwlzdGF0cy0+cmVhZF9zeXNjYWxscwk9IHAtPnN5c2NyOworCXN0YXRzLT53cml0ZV9zeXNjYWxscwk9IHAtPnN5c2N3OworfQorI3VuZGVmIEtCCisjdW5kZWYgTUIKKworLyoqCisgKiBhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMgLSB1cGRhdGUgbW0gaW50ZWdyYWwgZmllbGRzIGluIHRhc2tfc3RydWN0CisgKiBAdHNrOiB0YXNrX3N0cnVjdCBmb3IgYWNjb3VudGluZworICovCit2b2lkIGFjY3RfdXBkYXRlX2ludGVncmFscyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaykKK3sKKwlpZiAobGlrZWx5KHRzay0+bW0pKSB7CisJCWxvbmcgZGVsdGEgPSBjcHV0aW1lX3RvX2ppZmZpZXMoCisJCQljcHV0aW1lX3N1Yih0c2stPnN0aW1lLCB0c2stPmFjY3Rfc3RpbWV4cGQpKTsKKworCQlpZiAoZGVsdGEgPT0gMCkKKwkJCXJldHVybjsKKwkJdHNrLT5hY2N0X3N0aW1leHBkID0gdHNrLT5zdGltZTsKKwkJdHNrLT5hY2N0X3Jzc19tZW0xICs9IGRlbHRhICogZ2V0X21tX3Jzcyh0c2stPm1tKTsKKwkJdHNrLT5hY2N0X3ZtX21lbTEgKz0gZGVsdGEgKiB0c2stPm1tLT50b3RhbF92bTsKKwl9Cit9CisKKy8qKgorICogYWNjdF9jbGVhcl9pbnRlZ3JhbHMgLSBjbGVhciB0aGUgbW0gaW50ZWdyYWwgZmllbGRzIGluIHRhc2tfc3RydWN0CisgKiBAdHNrOiB0YXNrX3N0cnVjdCB3aG9zZSBhY2NvdW50aW5nIGZpZWxkcyBhcmUgY2xlYXJlZAorICovCit2b2lkIGFjY3RfY2xlYXJfaW50ZWdyYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXRzay0+YWNjdF9zdGltZXhwZCA9IDA7CisJdHNrLT5hY2N0X3Jzc19tZW0xID0gMDsKKwl0c2stPmFjY3Rfdm1fbWVtMSA9IDA7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2tlcm5lbC91bndpbmQuYyBiL2tlcm5lbC91bndpbmQuYwppbmRleCAzNDMwNDc1Li4yZTIzNjg2IDEwMDY0NAotLS0gYS9rZXJuZWwvdW53aW5kLmMKKysrIGIva2VybmVsL3Vud2luZC5jCkBAIC0xMDIsNyArMTAyLDcgQEAKIAl1bnNpZ25lZCBsb25nIHNpemU7CiAJc3RydWN0IHVud2luZF90YWJsZSAqbGluazsKIAljb25zdCBjaGFyICpuYW1lOwotfSByb290X3RhYmxlLCAqbGFzdF90YWJsZTsKK30gcm9vdF90YWJsZTsKIAogc3RydWN0IHVud2luZF9pdGVtIHsKIAllbnVtIGl0ZW1fbG9jYXRpb24gewpAQCAtMTc0LDYgKzE3NCw4IEBACiAKICNpZmRlZiBDT05GSUdfTU9EVUxFUwogCitzdGF0aWMgc3RydWN0IHVud2luZF90YWJsZSAqbGFzdF90YWJsZTsKKwogLyogTXVzdCBiZSBjYWxsZWQgd2l0aCBtb2R1bGVfbXV0ZXggaGVsZC4gKi8KIHZvaWQgKnVud2luZF9hZGRfdGFibGUoc3RydWN0IG1vZHVsZSAqbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp0YWJsZV9zdGFydCwKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggZjFhYzMxOC4uZjlhZTc1YyAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTI4NCw3ICsyODQsNyBAQAogY29uZmlnIERFQlVHX0JVR1ZFUkJPU0UKIAlib29sICJWZXJib3NlIEJVRygpIHJlcG9ydGluZyAoYWRkcyA3MEspIiBpZiBERUJVR19LRVJORUwgJiYgRU1CRURERUQKIAlkZXBlbmRzIG9uIEJVRwotCWRlcGVuZHMgb24gQVJNIHx8IEFSTTI2IHx8IEFWUjMyIHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgWDg2XzMyIHx8IEZSVgorCWRlcGVuZHMgb24gQVJNIHx8IEFSTTI2IHx8IEFWUjMyIHx8IE0zMlIgfHwgTTY4SyB8fCBTUEFSQzMyIHx8IFNQQVJDNjQgfHwgWDg2XzMyIHx8IEZSViB8fCBTVVBFUkgKIAlkZWZhdWx0ICFFTUJFRERFRAogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gbWFrZSBCVUcoKSBwYW5pY3Mgb3V0cHV0IHRoZSBmaWxlIG5hbWUgYW5kIGxpbmUgbnVtYmVyCkBAIC0zMjAsOSArMzIwLDE4IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKK2NvbmZpZyBERUJVR19MSVNUCisJYm9vbCAiRGVidWcgbGlua2VkIGxpc3QgbWFuaXB1bGF0aW9uIgorCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMCisJaGVscAorCSAgRW5hYmxlIHRoaXMgdG8gdHVybiBvbiBleHRlbmRlZCBjaGVja3MgaW4gdGhlIGxpbmtlZC1saXN0CisJICB3YWxraW5nIHJvdXRpbmVzLgorCisJICBJZiB1bnN1cmUsIHNheSBOLgorCiBjb25maWcgRlJBTUVfUE9JTlRFUgogCWJvb2wgIkNvbXBpbGUgdGhlIGtlcm5lbCB3aXRoIGZyYW1lIHBvaW50ZXJzIgotCWRlcGVuZHMgb24gREVCVUdfS0VSTkVMICYmIChYODYgfHwgQ1JJUyB8fCBNNjhLIHx8IE02OEtOT01NVSB8fCBGUlYgfHwgVU1MIHx8IFMzOTAgfHwgQVZSMzIpCisJZGVwZW5kcyBvbiBERUJVR19LRVJORUwgJiYgKFg4NiB8fCBDUklTIHx8IE02OEsgfHwgTTY4S05PTU1VIHx8IEZSViB8fCBVTUwgfHwgUzM5MCB8fCBBVlIzMiB8fCBTVVBFUkgpCiAJZGVmYXVsdCB5IGlmIERFQlVHX0lORk8gJiYgVU1MCiAJaGVscAogCSAgSWYgeW91IHNheSBZIGhlcmUgdGhlIHJlc3VsdGluZyBrZXJuZWwgaW1hZ2Ugd2lsbCBiZSBzbGlnaHRseSBsYXJnZXIKZGlmZiAtLWdpdCBhL2xpYi9NYWtlZmlsZSBiL2xpYi9NYWtlZmlsZQppbmRleCBlZjFkMzdhLi5kZGYzZTY3IDEwMDY0NAotLS0gYS9saWIvTWFrZWZpbGUKKysrIGIvbGliL01ha2VmaWxlCkBAIC03LDYgKzcsNyBAQAogCSBpZHIubyBkaXY2NC5vIGludF9zcXJ0Lm8gYml0bWFwLm8gZXh0YWJsZS5vIHByaW9fdHJlZS5vIFwKIAkgc2hhMS5vCiAKK2xpYi0kKENPTkZJR19NTVUpICs9IGlvcmVtYXAubwogbGliLSQoQ09ORklHX1NNUCkgKz0gY3B1bWFzay5vCiAKIGxpYi15CSs9IGtvYmplY3QubyBrcmVmLm8ga29iamVjdF91ZXZlbnQubyBrbGlzdC5vCkBAIC0yOCw2ICsyOSw3IEBACiBvYmotJChDT05GSUdfTE9DS19LRVJORUwpICs9IGtlcm5lbF9sb2NrLm8KIG9iai0kKENPTkZJR19QTElTVCkgKz0gcGxpc3Qubwogb2JqLSQoQ09ORklHX0RFQlVHX1BSRUVNUFQpICs9IHNtcF9wcm9jZXNzb3JfaWQubworb2JqLSQoQ09ORklHX0RFQlVHX0xJU1QpICs9IGxpc3RfZGVidWcubwogCiBpZm5lcSAoJChDT05GSUdfSEFWRV9ERUNfTE9DSykseSkKICAgbGliLXkgKz0gZGVjX2FuZF9sb2NrLm8KZGlmZiAtLWdpdCBhL2xpYi9pb3JlbWFwLmMgYi9saWIvaW9yZW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZmEyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWIvaW9yZW1hcC5jCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBSZS1tYXAgSU8gbWVtb3J5IHRvIGtlcm5lbCBhZGRyZXNzIHNwYWNlIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyBpdC4KKyAqIFRoaXMgaXMgbmVlZGVkIGZvciBoaWdoIFBDSSBhZGRyZXNzZXMgdGhhdCBhcmVuJ3QgbWFwcGVkIGluIHRoZQorICogNjQway0xTUIgSU8gbWVtb3J5IGFyZWEgb24gUEMncworICoKKyAqIChDKSBDb3B5cmlnaHQgMTk5NSAxOTk2IExpbnVzIFRvcnZhbGRzCisgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgorCitzdGF0aWMgaW50IGlvcmVtYXBfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KQoreworCXB0ZV90ICpwdGU7CisJdW5zaWduZWQgbG9uZyBwZm47CisKKwlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKKwlwdGUgPSBwdGVfYWxsb2Nfa2VybmVsKHBtZCwgYWRkcik7CisJaWYgKCFwdGUpCisJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CisJCXNldF9wdGVfYXQoJmluaXRfbW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKKwkJcGZuKys7CisJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlvcmVtYXBfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJdW5zaWduZWQgbG9uZyBlbmQsIHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCBwZ3Byb3RfdCBwcm90KQoreworCXBtZF90ICpwbWQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCisJcGh5c19hZGRyIC09IGFkZHI7CisJcG1kID0gcG1kX2FsbG9jKCZpbml0X21tLCBwdWQsIGFkZHIpOworCWlmICghcG1kKQorCQlyZXR1cm4gLUVOT01FTTsKKwlkbyB7CisJCW5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJaWYgKGlvcmVtYXBfcHRlX3JhbmdlKHBtZCwgYWRkciwgbmV4dCwgcGh5c19hZGRyICsgYWRkciwgcHJvdCkpCisJCQlyZXR1cm4gLUVOT01FTTsKKwl9IHdoaWxlIChwbWQrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgaW9yZW1hcF9wdWRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIGVuZCwgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIsIHBncHJvdF90IHByb3QpCit7CisJcHVkX3QgKnB1ZDsKKwl1bnNpZ25lZCBsb25nIG5leHQ7CisKKwlwaHlzX2FkZHIgLT0gYWRkcjsKKwlwdWQgPSBwdWRfYWxsb2MoJmluaXRfbW0sIHBnZCwgYWRkcik7CisJaWYgKCFwdWQpCisJCXJldHVybiAtRU5PTUVNOworCWRvIHsKKwkJbmV4dCA9IHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpOworCQlpZiAoaW9yZW1hcF9wbWRfcmFuZ2UocHVkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIgKyBhZGRyLCBwcm90KSkKKwkJCXJldHVybiAtRU5PTUVNOworCX0gd2hpbGUgKHB1ZCsrLCBhZGRyID0gbmV4dCwgYWRkciAhPSBlbmQpOworCXJldHVybiAwOworfQorCitpbnQgaW9yZW1hcF9wYWdlX3JhbmdlKHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZW5kLCB1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgcGdwcm90X3QgcHJvdCkKK3sKKwlwZ2RfdCAqcGdkOworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBuZXh0OworCWludCBlcnI7CisKKwlCVUdfT04oYWRkciA+PSBlbmQpOworCisJc3RhcnQgPSBhZGRyOworCXBoeXNfYWRkciAtPSBhZGRyOworCXBnZCA9IHBnZF9vZmZzZXRfayhhZGRyKTsKKwlkbyB7CisJCW5leHQgPSBwZ2RfYWRkcl9lbmQoYWRkciwgZW5kKTsKKwkJZXJyID0gaW9yZW1hcF9wdWRfcmFuZ2UocGdkLCBhZGRyLCBuZXh0LCBwaHlzX2FkZHIrYWRkciwgcHJvdCk7CisJCWlmIChlcnIpCisJCQlicmVhazsKKwl9IHdoaWxlIChwZ2QrKywgYWRkciA9IG5leHQsIGFkZHIgIT0gZW5kKTsKKworCWZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCk7CisKKwlyZXR1cm4gZXJyOworfQpkaWZmIC0tZ2l0IGEvbGliL2xpc3RfZGVidWcuYyBiL2xpYi9saXN0X2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhOWQ4MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9saXN0X2RlYnVnLmMKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAyMDA2LCBSZWQgSGF0LCBJbmMuLCBEYXZlIEpvbmVzCisgKiBSZWxlYXNlZCB1bmRlciB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgdGhlIGxpbmtlZCBsaXN0IGltcGxlbWVudGF0aW9ucyBmb3IKKyAqIERFQlVHX0xJU1QuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworLyoKKyAqIEluc2VydCBhIG5ldyBlbnRyeSBiZXR3ZWVuIHR3byBrbm93biBjb25zZWN1dGl2ZSBlbnRyaWVzLgorICoKKyAqIFRoaXMgaXMgb25seSBmb3IgaW50ZXJuYWwgbGlzdCBtYW5pcHVsYXRpb24gd2hlcmUgd2Uga25vdworICogdGhlIHByZXYvbmV4dCBlbnRyaWVzIGFscmVhZHkhCisgKi8KKwordm9pZCBfX2xpc3RfYWRkKHN0cnVjdCBsaXN0X2hlYWQgKm5ldywKKwkJCSAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnByZXYsCisJCQkgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpuZXh0KQoreworCWlmICh1bmxpa2VseShuZXh0LT5wcmV2ICE9IHByZXYpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlzdF9hZGQgY29ycnVwdGlvbi4gbmV4dC0+cHJldiBzaG91bGQgYmUgJXAsIGJ1dCB3YXMgJXBcbiIsCisJCQlwcmV2LCBuZXh0LT5wcmV2KTsKKwkJQlVHKCk7CisJfQorCWlmICh1bmxpa2VseShwcmV2LT5uZXh0ICE9IG5leHQpKSB7CisJCXByaW50ayhLRVJOX0VSUiAibGlzdF9hZGQgY29ycnVwdGlvbi4gcHJldi0+bmV4dCBzaG91bGQgYmUgJXAsIGJ1dCB3YXMgJXBcbiIsCisJCQluZXh0LCBwcmV2LT5uZXh0KTsKKwkJQlVHKCk7CisJfQorCW5leHQtPnByZXYgPSBuZXc7CisJbmV3LT5uZXh0ID0gbmV4dDsKKwluZXctPnByZXYgPSBwcmV2OworCXByZXYtPm5leHQgPSBuZXc7Cit9CitFWFBPUlRfU1lNQk9MKF9fbGlzdF9hZGQpOworCisvKioKKyAqIGxpc3RfYWRkIC0gYWRkIGEgbmV3IGVudHJ5CisgKiBAbmV3OiBuZXcgZW50cnkgdG8gYmUgYWRkZWQKKyAqIEBoZWFkOiBsaXN0IGhlYWQgdG8gYWRkIGl0IGFmdGVyCisgKgorICogSW5zZXJ0IGEgbmV3IGVudHJ5IGFmdGVyIHRoZSBzcGVjaWZpZWQgaGVhZC4KKyAqIFRoaXMgaXMgZ29vZCBmb3IgaW1wbGVtZW50aW5nIHN0YWNrcy4KKyAqLwordm9pZCBsaXN0X2FkZChzdHJ1Y3QgbGlzdF9oZWFkICpuZXcsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpCit7CisJX19saXN0X2FkZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOworfQorRVhQT1JUX1NZTUJPTChsaXN0X2FkZCk7CisKKy8qKgorICogbGlzdF9kZWwgLSBkZWxldGVzIGVudHJ5IGZyb20gbGlzdC4KKyAqIEBlbnRyeTogdGhlIGVsZW1lbnQgdG8gZGVsZXRlIGZyb20gdGhlIGxpc3QuCisgKiBOb3RlOiBsaXN0X2VtcHR5IG9uIGVudHJ5IGRvZXMgbm90IHJldHVybiB0cnVlIGFmdGVyIHRoaXMsIHRoZSBlbnRyeSBpcworICogaW4gYW4gdW5kZWZpbmVkIHN0YXRlLgorICovCit2b2lkIGxpc3RfZGVsKHN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5KQoreworCWlmICh1bmxpa2VseShlbnRyeS0+cHJldi0+bmV4dCAhPSBlbnRyeSkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJsaXN0X2RlbCBjb3JydXB0aW9uLiBwcmV2LT5uZXh0IHNob3VsZCBiZSAlcCwgIgorCQkJCSJidXQgd2FzICVwXG4iLCBlbnRyeSwgZW50cnktPnByZXYtPm5leHQpOworCQlCVUcoKTsKKwl9CisJaWYgKHVubGlrZWx5KGVudHJ5LT5uZXh0LT5wcmV2ICE9IGVudHJ5KSkgeworCQlwcmludGsoS0VSTl9FUlIgImxpc3RfZGVsIGNvcnJ1cHRpb24uIG5leHQtPnByZXYgc2hvdWxkIGJlICVwLCAiCisJCQkJImJ1dCB3YXMgJXBcbiIsIGVudHJ5LCBlbnRyeS0+bmV4dC0+cHJldik7CisJCUJVRygpOworCX0KKwlfX2xpc3RfZGVsKGVudHJ5LT5wcmV2LCBlbnRyeS0+bmV4dCk7CisJZW50cnktPm5leHQgPSBMSVNUX1BPSVNPTjE7CisJZW50cnktPnByZXYgPSBMSVNUX1BPSVNPTjI7Cit9CitFWFBPUlRfU1lNQk9MKGxpc3RfZGVsKTsKZGlmZiAtLWdpdCBhL2xpYi9yYnRyZWUuYyBiL2xpYi9yYnRyZWUuYwppbmRleCAxZTU1YmExLi40ODQ5OWMyIDEwMDY0NAotLS0gYS9saWIvcmJ0cmVlLmMKKysrIGIvbGliL3JidHJlZS5jCkBAIC0zMjIsNiArMzIyLDkgQEAKIHsKIAlzdHJ1Y3QgcmJfbm9kZSAqcGFyZW50OwogCisJaWYgKHJiX3BhcmVudChub2RlKSA9PSBub2RlKQorCQlyZXR1cm4gTlVMTDsKKwogCS8qIElmIHdlIGhhdmUgYSByaWdodC1oYW5kIGNoaWxkLCBnbyBkb3duIGFuZCB0aGVuIGxlZnQgYXMgZmFyCiAJICAgYXMgd2UgY2FuLiAqLwogCWlmIChub2RlLT5yYl9yaWdodCkgewpAQCAtMzQ4LDYgKzM1MSw5IEBACiB7CiAJc3RydWN0IHJiX25vZGUgKnBhcmVudDsKIAorCWlmIChyYl9wYXJlbnQobm9kZSkgPT0gbm9kZSkKKwkJcmV0dXJuIE5VTEw7CisKIAkvKiBJZiB3ZSBoYXZlIGEgbGVmdC1oYW5kIGNoaWxkLCBnbyBkb3duIGFuZCB0aGVuIHJpZ2h0IGFzIGZhcgogCSAgIGFzIHdlIGNhbi4gKi8KIAlpZiAobm9kZS0+cmJfbGVmdCkgewpkaWZmIC0tZ2l0IGEvbGliL3J3c2VtLmMgYi9saWIvcndzZW0uYwppbmRleCBiMzIyNDIxLi45MDFkMGU3IDEwMDY0NAotLS0gYS9saWIvcndzZW0uYworKysgYi9saWIvcndzZW0uYwpAQCAtMTQ2LDcgKzE0Niw3IEBACiAvKgogICogd2FpdCBmb3IgYSBsb2NrIHRvIGJlIGdyYW50ZWQKICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKK3N0YXRpYyBzdHJ1Y3Qgcndfc2VtYXBob3JlICoKIHJ3c2VtX2Rvd25fZmFpbGVkX2NvbW1vbihzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0sCiAJCQlzdHJ1Y3QgcndzZW1fd2FpdGVyICp3YWl0ZXIsIHNpZ25lZCBsb25nIGFkanVzdG1lbnQpCiB7CmRpZmYgLS1naXQgYS9saWIvc3BpbmxvY2tfZGVidWcuYyBiL2xpYi9zcGlubG9ja19kZWJ1Zy5jCmluZGV4IDU4YzU3N2QuLmRhZmFmMWQgMTAwNjQ0Ci0tLSBhL2xpYi9zcGlubG9ja19kZWJ1Zy5jCisrKyBiL2xpYi9zcGlubG9ja19kZWJ1Zy5jCkBAIC05OSwxMSArOTksMTIgQEAKIAogc3RhdGljIHZvaWQgX19zcGluX2xvY2tfZGVidWcoc3BpbmxvY2tfdCAqbG9jaykKIHsKLQlpbnQgcHJpbnRfb25jZSA9IDE7CiAJdTY0IGk7CisJdTY0IGxvb3BzID0gbG9vcHNfcGVyX2ppZmZ5ICogSFo7CisJaW50IHByaW50X29uY2UgPSAxOwogCiAJZm9yICg7OykgewotCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHNfcGVyX2ppZmZ5ICogSFo7IGkrKykgeworCQlmb3IgKGkgPSAwOyBpIDwgbG9vcHM7IGkrKykgewogCQkJaWYgKF9fcmF3X3NwaW5fdHJ5bG9jaygmbG9jay0+cmF3X2xvY2spKQogCQkJCXJldHVybjsKIAkJCV9fZGVsYXkoMSk7CkBAIC0xNjUsMTEgKzE2NiwxMiBAQAogI2lmIDAJCS8qIF9fd3JpdGVfbG9ja19kZWJ1ZygpIGNhbiBsb2NrIHVwIC0gbWF5YmUgdGhpcyBjYW4gdG9vPyAqLwogc3RhdGljIHZvaWQgX19yZWFkX2xvY2tfZGVidWcocndsb2NrX3QgKmxvY2spCiB7Ci0JaW50IHByaW50X29uY2UgPSAxOwogCXU2NCBpOworCXU2NCBsb29wcyA9IGxvb3BzX3Blcl9qaWZmeSAqIEhaOworCWludCBwcmludF9vbmNlID0gMTsKIAogCWZvciAoOzspIHsKLQkJZm9yIChpID0gMDsgaSA8IGxvb3BzX3Blcl9qaWZmeSAqIEhaOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKIAkJCWlmIChfX3Jhd19yZWFkX3RyeWxvY2soJmxvY2stPnJhd19sb2NrKSkKIAkJCQlyZXR1cm47CiAJCQlfX2RlbGF5KDEpOwpAQCAtMjM5LDExICsyNDEsMTIgQEAKICNpZiAwCQkvKiBUaGlzIGNhbiBjYXVzZSBsb2NrdXBzICovCiBzdGF0aWMgdm9pZCBfX3dyaXRlX2xvY2tfZGVidWcocndsb2NrX3QgKmxvY2spCiB7Ci0JaW50IHByaW50X29uY2UgPSAxOwogCXU2NCBpOworCXU2NCBsb29wcyA9IGxvb3BzX3Blcl9qaWZmeSAqIEhaOworCWludCBwcmludF9vbmNlID0gMTsKIAogCWZvciAoOzspIHsKLQkJZm9yIChpID0gMDsgaSA8IGxvb3BzX3Blcl9qaWZmeSAqIEhaOyBpKyspIHsKKwkJZm9yIChpID0gMDsgaSA8IGxvb3BzOyBpKyspIHsKIAkJCWlmIChfX3Jhd193cml0ZV90cnlsb2NrKCZsb2NrLT5yYXdfbG9jaykpCiAJCQkJcmV0dXJuOwogCQkJX19kZWxheSgxKTsKZGlmZiAtLWdpdCBhL2xpYi90c19mc20uYyBiL2xpYi90c19mc20uYwppbmRleCA4Nzg0N2MyLi5hZjU3NWI2IDEwMDY0NAotLS0gYS9saWIvdHNfZnNtLmMKKysrIGIvbGliL3RzX2ZzbS5jCkBAIC0xMiwxMyArMTIsMTMgQEAKICAqCiAgKiAgIEEgZmluaXRlIHN0YXRlIG1hY2hpbmUgY29uc2lzdHMgb2YgbiBzdGF0ZXMgKHN0cnVjdCB0c19mc21fdG9rZW4pCiAgKiAgIHJlcHJlc2VudGluZyB0aGUgcGF0dGVybiBhcyBhIGZpbml0ZSBhdXRvbWF0aW9uLiBUaGUgZGF0YSBpcyByZWFkCi0gKiAgIHNlcXVlbnRpYWxseSBvbiBhIG9jdGV0IGJhc2lzLiBFdmVyeSBzdGF0ZSB0b2tlbiBzcGVjaWZpZXMgdGhlIG51bWJlcgorICogICBzZXF1ZW50aWFsbHkgb24gYW4gb2N0ZXQgYmFzaXMuIEV2ZXJ5IHN0YXRlIHRva2VuIHNwZWNpZmllcyB0aGUgbnVtYmVyCiAgKiAgIG9mIHJlY3VycmVuY2VzIGFuZCB0aGUgdHlwZSBvZiB2YWx1ZSBhY2NlcHRlZCB3aGljaCBjYW4gYmUgZWl0aGVyIGEKICAqICAgc3BlY2lmaWMgY2hhcmFjdGVyIG9yIGN0eXBlIGJhc2VkIHNldCBvZiBjaGFyYWN0ZXJzLiBUaGUgYXZhaWxhYmxlCiAgKiAgIHR5cGUgb2YgcmVjdXJyZW5jZXMgaW5jbHVkZSAxLCAoMHwxKSwgWzAgbl0sIGFuZCBbMSBuXS4KICAqCi0gKiAgIFRoZSBhbGdvcml0aG0gZGlmZmVycyBiZXR3ZWVuIHN0cmljdC9ub24tc3RyaWN0IG1vZGUgc3BlY3lmaW5nCi0gKiAgIHdoZXRoZXIgdGhlIHBhdHRlcm4gaGFzIHRvIHN0YXJ0IGF0IHRoZSBmaXJzdCBvY3RlY3QuIFN0cmljdCBtb2RlCisgKiAgIFRoZSBhbGdvcml0aG0gZGlmZmVycyBiZXR3ZWVuIHN0cmljdC9ub24tc3RyaWN0IG1vZGUgc3BlY2lmeWluZworICogICB3aGV0aGVyIHRoZSBwYXR0ZXJuIGhhcyB0byBzdGFydCBhdCB0aGUgZmlyc3Qgb2N0ZXQuIFN0cmljdCBtb2RlCiAgKiAgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBhbmQgY2FuIGJlIGRpc2FibGVkIGJ5IGluc2VydGluZwogICogICBUU19GU01fSEVBRF9JR05PUkUgYXMgdGhlIGZpcnN0IHRva2VuIGluIHRoZSBjaGFpbi4KICAqCkBAIC00NCw3ICs0NCw3IEBACiAjZGVmaW5lIF9XCQkweDIwMCAvKiB3aWxkY2FyZCAqLwogCiAvKiBNYXAgdG8gX2N0eXBlIGZsYWdzIGFuZCBzb21lIG1hZ2ljIG51bWJlcnMgKi8KLXN0YXRpYyB1MTYgdG9rZW5fbWFwW1RTX0ZTTV9UWVBFX01BWCsxXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgdG9rZW5fbWFwW1RTX0ZTTV9UWVBFX01BWCsxXSA9IHsKIAlbVFNfRlNNX1NQRUNJRklDXSA9IDAsCiAJW1RTX0ZTTV9XSUxEQ0FSRF0gPSBfVywKIAlbVFNfRlNNX0NOVFJMXQkgID0gX0MsCkBAIC02MSw3ICs2MSw3IEBACiAJW1RTX0ZTTV9BU0NJSV0JICA9IF9BLAogfTsKIAotc3RhdGljIHUxNiB0b2tlbl9sb29rdXBfdGJsWzI1Nl0gPSB7CitzdGF0aWMgY29uc3QgdTE2IHRva2VuX2xvb2t1cF90YmxbMjU2XSA9IHsKIF9XfF9BfF9DLCAgICAgIF9XfF9BfF9DLCAgICAgX1d8X0F8X0MsICAgICBfV3xfQXxfQywJCS8qICAgMC0gIDMgKi8KIF9XfF9BfF9DLCAgICAgIF9XfF9BfF9DLCAgICAgX1d8X0F8X0MsICAgICBfV3xfQXxfQywJCS8qICAgNC0gIDcgKi8KIF9XfF9BfF9DLCAgICAgIF9XfF9BfF9DfF9TLCAgX1d8X0F8X0N8X1MsICBfV3xfQXxfQ3xfUywJCS8qICAgOC0gMTEgKi8KZGlmZiAtLWdpdCBhL21tL0tjb25maWcgYi9tbS9LY29uZmlnCmluZGV4IDhmNWI0NTYuLjVkODg0ODkgMTAwNjQ0Ci0tLSBhL21tL0tjb25maWcKKysrIGIvbW0vS2NvbmZpZwpAQCAtMTE1LDEyICsxMTUsMTcgQEAKICMgZXZlbnR1YWxseSwgd2UgY2FuIGhhdmUgdGhpcyBvcHRpb24ganVzdCAnc2VsZWN0IFNQQVJTRU1FTScKIGNvbmZpZyBNRU1PUllfSE9UUExVRwogCWJvb2wgIkFsbG93IGZvciBtZW1vcnkgaG90LWFkZCIKLQlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmICFTT0ZUV0FSRV9TVVNQRU5EICYmIEFSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHCisJZGVwZW5kcyBvbiBTUEFSU0VNRU0gfHwgWDg2XzY0X0FDUElfTlVNQQorCWRlcGVuZHMgb24gSE9UUExVRyAmJiAhU09GVFdBUkVfU1VTUEVORCAmJiBBUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRwogCWRlcGVuZHMgb24gKElBNjQgfHwgWDg2IHx8IFBQQzY0KQogCiBjb21tZW50ICJNZW1vcnkgaG90cGx1ZyBpcyBjdXJyZW50bHkgaW5jb21wYXRpYmxlIHdpdGggU29mdHdhcmUgU3VzcGVuZCIKIAlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBIT1RQTFVHICYmIFNPRlRXQVJFX1NVU1BFTkQKIAorY29uZmlnIE1FTU9SWV9IT1RQTFVHX1NQQVJTRQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIFNQQVJTRU1FTSAmJiBNRU1PUllfSE9UUExVRworCiAjIEhlYXZpbHkgdGhyZWFkZWQgYXBwbGljYXRpb25zIG1heSBiZW5lZml0IGZyb20gc3BsaXR0aW5nIHRoZSBtbS13aWRlCiAjIHBhZ2VfdGFibGVfbG9jaywgc28gdGhhdCBmYXVsdHMgb24gZGlmZmVyZW50IHBhcnRzIG9mIHRoZSB1c2VyIGFkZHJlc3MKICMgc3BhY2UgY2FuIGJlIGhhbmRsZWQgd2l0aCBsZXNzIGNvbnRlbnRpb246IHNwbGl0IGl0IGF0IHRoaXMgTlJfQ1BVUy4KZGlmZiAtLWdpdCBhL21tL01ha2VmaWxlIGIvbW0vTWFrZWZpbGUKaW5kZXggNjBjNTZjMC4uMTJiM2E0ZSAxMDA2NDQKLS0tIGEvbW0vTWFrZWZpbGUKKysrIGIvbW0vTWFrZWZpbGUKQEAgLTEyLDExICsxMiwxNSBAQAogCQkJICAgcmVhZGFoZWFkLm8gc3dhcC5vIHRydW5jYXRlLm8gdm1zY2FuLm8gXAogCQkJICAgcHJpb190cmVlLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vICQobW11LXkpCiAKK2lmZXEgKCQoQ09ORklHX01NVSkkKENPTkZJR19CTE9DSykseXkpCitvYmoteQkJCSs9IGJvdW5jZS5vCitlbmRpZgogb2JqLSQoQ09ORklHX1NXQVApCSs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUubyB0aHJhc2gubwogb2JqLSQoQ09ORklHX0hVR0VUTEJGUykJKz0gaHVnZXRsYi5vCiBvYmotJChDT05GSUdfTlVNQSkgCSs9IG1lbXBvbGljeS5vCiBvYmotJChDT05GSUdfU1BBUlNFTUVNKQkrPSBzcGFyc2Uubwogb2JqLSQoQ09ORklHX1NITUVNKSArPSBzaG1lbS5vCitvYmotJChDT05GSUdfVE1QRlNfUE9TSVhfQUNMKSArPSBzaG1lbV9hY2wubwogb2JqLSQoQ09ORklHX1RJTllfU0hNRU0pICs9IHRpbnktc2htZW0ubwogb2JqLSQoQ09ORklHX1NMT0IpICs9IHNsb2Iubwogb2JqLSQoQ09ORklHX1NMQUIpICs9IHNsYWIubwpkaWZmIC0tZ2l0IGEvbW0vYm91bmNlLmMgYi9tbS9ib3VuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGI2MmQyCi0tLSAvZGV2L251bGwKKysrIGIvbW0vYm91bmNlLmMKQEAgLTAsMCArMSwzMDIgQEAKKy8qIGJvdW5jZSBidWZmZXIgaGFuZGxpbmcgZm9yIGJsb2NrIGRldmljZXMKKyAqCisgKiAtIFNwbGl0IGZyb20gaGlnaG1lbS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvc3dhcC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvYmxrdHJhY2VfYXBpLmg+CisjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CisKKyNkZWZpbmUgUE9PTF9TSVpFCTY0CisjZGVmaW5lIElTQV9QT09MX1NJWkUJMTYKKworc3RhdGljIG1lbXBvb2xfdCAqcGFnZV9wb29sLCAqaXNhX3BhZ2VfcG9vbDsKKworI2lmZGVmIENPTkZJR19ISUdITUVNCitzdGF0aWMgX19pbml0IGludCBpbml0X2VtZXJnZW5jeV9wb29sKHZvaWQpCit7CisJc3RydWN0IHN5c2luZm8gaTsKKwlzaV9tZW1pbmZvKCZpKTsKKwlzaV9zd2FwaW5mbygmaSk7CisKKwlpZiAoIWkudG90YWxoaWdoKQorCQlyZXR1cm4gMDsKKworCXBhZ2VfcG9vbCA9IG1lbXBvb2xfY3JlYXRlX3BhZ2VfcG9vbChQT09MX1NJWkUsIDApOworCUJVR19PTighcGFnZV9wb29sKTsKKwlwcmludGsoImhpZ2htZW0gYm91bmNlIHBvb2wgc2l6ZTogJWQgcGFnZXNcbiIsIFBPT0xfU0laRSk7CisKKwlyZXR1cm4gMDsKK30KKworX19pbml0Y2FsbChpbml0X2VtZXJnZW5jeV9wb29sKTsKKworLyoKKyAqIGhpZ2htZW0gdmVyc2lvbiwgbWFwIGluIHRvIHZlYworICovCitzdGF0aWMgdm9pZCBib3VuY2VfY29weV92ZWMoc3RydWN0IGJpb192ZWMgKnRvLCB1bnNpZ25lZCBjaGFyICp2ZnJvbSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGNoYXIgKnZ0bzsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl2dG8gPSBrbWFwX2F0b21pYyh0by0+YnZfcGFnZSwgS01fQk9VTkNFX1JFQUQpOworCW1lbWNweSh2dG8gKyB0by0+YnZfb2Zmc2V0LCB2ZnJvbSwgdG8tPmJ2X2xlbik7CisJa3VubWFwX2F0b21pYyh2dG8sIEtNX0JPVU5DRV9SRUFEKTsKKwlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKKyNlbHNlIC8qIENPTkZJR19ISUdITUVNICovCisKKyNkZWZpbmUgYm91bmNlX2NvcHlfdmVjKHRvLCB2ZnJvbSkJXAorCW1lbWNweShwYWdlX2FkZHJlc3MoKHRvKS0+YnZfcGFnZSkgKyAodG8pLT5idl9vZmZzZXQsIHZmcm9tLCAodG8pLT5idl9sZW4pCisKKyNlbmRpZiAvKiBDT05GSUdfSElHSE1FTSAqLworCisvKgorICogYWxsb2NhdGUgcGFnZXMgaW4gdGhlIERNQSByZWdpb24gZm9yIHRoZSBJU0EgcG9vbAorICovCitzdGF0aWMgdm9pZCAqbWVtcG9vbF9hbGxvY19wYWdlc19pc2EoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIG1lbXBvb2xfYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBHRlBfRE1BLCBkYXRhKTsKK30KKworLyoKKyAqIGdldHMgY2FsbGVkICJldmVyeSIgdGltZSBzb21lb25lIGluaXQncyBhIHF1ZXVlIHdpdGggQkxLX0JPVU5DRV9JU0EKKyAqIGFzIHRoZSBtYXggYWRkcmVzcywgc28gY2hlY2sgaWYgdGhlIHBvb2wgaGFzIGFscmVhZHkgYmVlbiBjcmVhdGVkLgorICovCitpbnQgaW5pdF9lbWVyZ2VuY3lfaXNhX3Bvb2wodm9pZCkKK3sKKwlpZiAoaXNhX3BhZ2VfcG9vbCkKKwkJcmV0dXJuIDA7CisKKwlpc2FfcGFnZV9wb29sID0gbWVtcG9vbF9jcmVhdGUoSVNBX1BPT0xfU0laRSwgbWVtcG9vbF9hbGxvY19wYWdlc19pc2EsCisJCQkJICAgICAgIG1lbXBvb2xfZnJlZV9wYWdlcywgKHZvaWQgKikgMCk7CisJQlVHX09OKCFpc2FfcGFnZV9wb29sKTsKKworCXByaW50aygiaXNhIGJvdW5jZSBwb29sIHNpemU6ICVkIHBhZ2VzXG4iLCBJU0FfUE9PTF9TSVpFKTsKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIFNpbXBsZSBib3VuY2UgYnVmZmVyIHN1cHBvcnQgZm9yIGhpZ2htZW0gcGFnZXMuIERlcGVuZGluZyBvbiB0aGUKKyAqIHF1ZXVlIGdmcCBtYXNrIHNldCwgKnRvIG1heSBvciBtYXkgbm90IGJlIGEgaGlnaG1lbSBwYWdlLiBrbWFwIGl0CisgKiBhbHdheXMsIGl0IHdpbGwgZG8gdGhlIFJpZ2h0IFRoaW5nCisgKi8KK3N0YXRpYyB2b2lkIGNvcHlfdG9faGlnaF9iaW9faXJxKHN0cnVjdCBiaW8gKnRvLCBzdHJ1Y3QgYmlvICpmcm9tKQoreworCXVuc2lnbmVkIGNoYXIgKnZmcm9tOworCXN0cnVjdCBiaW9fdmVjICp0b3ZlYywgKmZyb212ZWM7CisJaW50IGk7CisKKwlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KHRvdmVjLCB0bywgaSwgMCkgeworCQlmcm9tdmVjID0gZnJvbS0+YmlfaW9fdmVjICsgaTsKKworCQkvKgorCQkgKiBub3QgYm91bmNlZAorCQkgKi8KKwkJaWYgKHRvdmVjLT5idl9wYWdlID09IGZyb212ZWMtPmJ2X3BhZ2UpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBmcm9tdmVjLT5idl9vZmZzZXQgYW5kIGZyb212ZWMtPmJ2X2xlbiBtaWdodCBoYXZlIGJlZW4KKwkJICogbW9kaWZpZWQgYnkgdGhlIGJsb2NrIGxheWVyLCBzbyB1c2UgdGhlIG9yaWdpbmFsIGNvcHksCisJCSAqIGJvdW5jZV9jb3B5X3ZlYyBhbHJlYWR5IHVzZXMgdG92ZWMtPmJ2X2xlbgorCQkgKi8KKwkJdmZyb20gPSBwYWdlX2FkZHJlc3MoZnJvbXZlYy0+YnZfcGFnZSkgKyB0b3ZlYy0+YnZfb2Zmc2V0OworCisJCWZsdXNoX2RjYWNoZV9wYWdlKHRvdmVjLT5idl9wYWdlKTsKKwkJYm91bmNlX2NvcHlfdmVjKHRvdmVjLCB2ZnJvbSk7CisJfQorfQorCitzdGF0aWMgdm9pZCBib3VuY2VfZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgbWVtcG9vbF90ICpwb29sLCBpbnQgZXJyKQoreworCXN0cnVjdCBiaW8gKmJpb19vcmlnID0gYmlvLT5iaV9wcml2YXRlOworCXN0cnVjdCBiaW9fdmVjICpidmVjLCAqb3JnX3ZlYzsKKwlpbnQgaTsKKworCWlmICh0ZXN0X2JpdChCSU9fRU9QTk9UU1VQUCwgJmJpby0+YmlfZmxhZ3MpKQorCQlzZXRfYml0KEJJT19FT1BOT1RTVVBQLCAmYmlvX29yaWctPmJpX2ZsYWdzKTsKKworCS8qCisJICogZnJlZSB1cCBib3VuY2UgaW5kaXJlY3QgcGFnZXMgdXNlZAorCSAqLworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZlYywgYmlvLCBpLCAwKSB7CisJCW9yZ192ZWMgPSBiaW9fb3JpZy0+YmlfaW9fdmVjICsgaTsKKwkJaWYgKGJ2ZWMtPmJ2X3BhZ2UgPT0gb3JnX3ZlYy0+YnZfcGFnZSkKKwkJCWNvbnRpbnVlOworCisJCWRlY196b25lX3BhZ2Vfc3RhdGUoYnZlYy0+YnZfcGFnZSwgTlJfQk9VTkNFKTsKKwkJbWVtcG9vbF9mcmVlKGJ2ZWMtPmJ2X3BhZ2UsIHBvb2wpOworCX0KKworCWJpb19lbmRpbyhiaW9fb3JpZywgYmlvX29yaWctPmJpX3NpemUsIGVycik7CisJYmlvX3B1dChiaW8pOworfQorCitzdGF0aWMgaW50IGJvdW5jZV9lbmRfaW9fd3JpdGUoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycikKK3sKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCWJvdW5jZV9lbmRfaW8oYmlvLCBwYWdlX3Bvb2wsIGVycik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYm91bmNlX2VuZF9pb193cml0ZV9pc2Eoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycikKK3sKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCWJvdW5jZV9lbmRfaW8oYmlvLCBpc2FfcGFnZV9wb29sLCBlcnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2JvdW5jZV9lbmRfaW9fcmVhZChzdHJ1Y3QgYmlvICpiaW8sIG1lbXBvb2xfdCAqcG9vbCwgaW50IGVycikKK3sKKwlzdHJ1Y3QgYmlvICpiaW9fb3JpZyA9IGJpby0+YmlfcHJpdmF0ZTsKKworCWlmICh0ZXN0X2JpdChCSU9fVVBUT0RBVEUsICZiaW8tPmJpX2ZsYWdzKSkKKwkJY29weV90b19oaWdoX2Jpb19pcnEoYmlvX29yaWcsIGJpbyk7CisKKwlib3VuY2VfZW5kX2lvKGJpbywgcG9vbCwgZXJyKTsKK30KKworc3RhdGljIGludCBib3VuY2VfZW5kX2lvX3JlYWQoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycikKK3sKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCV9fYm91bmNlX2VuZF9pb19yZWFkKGJpbywgcGFnZV9wb29sLCBlcnIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJvdW5jZV9lbmRfaW9fcmVhZF9pc2Eoc3RydWN0IGJpbyAqYmlvLCB1bnNpZ25lZCBpbnQgYnl0ZXNfZG9uZSwgaW50IGVycikKK3sKKwlpZiAoYmlvLT5iaV9zaXplKQorCQlyZXR1cm4gMTsKKworCV9fYm91bmNlX2VuZF9pb19yZWFkKGJpbywgaXNhX3BhZ2VfcG9vbCwgZXJyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgX19ibGtfcXVldWVfYm91bmNlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqKmJpb19vcmlnLAorCQkJICAgICAgIG1lbXBvb2xfdCAqcG9vbCkKK3sKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlzdHJ1Y3QgYmlvICpiaW8gPSBOVUxMOworCWludCBpLCBydyA9IGJpb19kYXRhX2RpcigqYmlvX29yaWcpOworCXN0cnVjdCBiaW9fdmVjICp0bywgKmZyb207CisKKwliaW9fZm9yX2VhY2hfc2VnbWVudChmcm9tLCAqYmlvX29yaWcsIGkpIHsKKwkJcGFnZSA9IGZyb20tPmJ2X3BhZ2U7CisKKwkJLyoKKwkJICogaXMgZGVzdGluYXRpb24gcGFnZSBiZWxvdyBib3VuY2UgcGZuPworCQkgKi8KKwkJaWYgKHBhZ2VfdG9fcGZuKHBhZ2UpIDwgcS0+Ym91bmNlX3BmbikKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIGlyaywgYm91bmNlIGl0CisJCSAqLworCQlpZiAoIWJpbykKKwkJCWJpbyA9IGJpb19hbGxvYyhHRlBfTk9JTywgKCpiaW9fb3JpZyktPmJpX3ZjbnQpOworCisJCXRvID0gYmlvLT5iaV9pb192ZWMgKyBpOworCisJCXRvLT5idl9wYWdlID0gbWVtcG9vbF9hbGxvYyhwb29sLCBxLT5ib3VuY2VfZ2ZwKTsKKwkJdG8tPmJ2X2xlbiA9IGZyb20tPmJ2X2xlbjsKKwkJdG8tPmJ2X29mZnNldCA9IGZyb20tPmJ2X29mZnNldDsKKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZSh0by0+YnZfcGFnZSwgTlJfQk9VTkNFKTsKKworCQlpZiAocncgPT0gV1JJVEUpIHsKKwkJCWNoYXIgKnZ0bywgKnZmcm9tOworCisJCQlmbHVzaF9kY2FjaGVfcGFnZShmcm9tLT5idl9wYWdlKTsKKwkJCXZ0byA9IHBhZ2VfYWRkcmVzcyh0by0+YnZfcGFnZSkgKyB0by0+YnZfb2Zmc2V0OworCQkJdmZyb20gPSBrbWFwKGZyb20tPmJ2X3BhZ2UpICsgZnJvbS0+YnZfb2Zmc2V0OworCQkJbWVtY3B5KHZ0bywgdmZyb20sIHRvLT5idl9sZW4pOworCQkJa3VubWFwKGZyb20tPmJ2X3BhZ2UpOworCQl9CisJfQorCisJLyoKKwkgKiBubyBwYWdlcyBib3VuY2VkCisJICovCisJaWYgKCFiaW8pCisJCXJldHVybjsKKworCS8qCisJICogYXQgbGVhc3Qgb25lIHBhZ2Ugd2FzIGJvdW5jZWQsIGZpbGwgaW4gcG9zc2libGUgbm9uLWhpZ2htZW0KKwkgKiBwYWdlcworCSAqLworCV9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoZnJvbSwgKmJpb19vcmlnLCBpLCAwKSB7CisJCXRvID0gYmlvX2lvdmVjX2lkeChiaW8sIGkpOworCQlpZiAoIXRvLT5idl9wYWdlKSB7CisJCQl0by0+YnZfcGFnZSA9IGZyb20tPmJ2X3BhZ2U7CisJCQl0by0+YnZfbGVuID0gZnJvbS0+YnZfbGVuOworCQkJdG8tPmJ2X29mZnNldCA9IGZyb20tPmJ2X29mZnNldDsKKwkJfQorCX0KKworCWJpby0+YmlfYmRldiA9ICgqYmlvX29yaWcpLT5iaV9iZGV2OworCWJpby0+YmlfZmxhZ3MgfD0gKDEgPDwgQklPX0JPVU5DRUQpOworCWJpby0+Ymlfc2VjdG9yID0gKCpiaW9fb3JpZyktPmJpX3NlY3RvcjsKKwliaW8tPmJpX3J3ID0gKCpiaW9fb3JpZyktPmJpX3J3OworCisJYmlvLT5iaV92Y250ID0gKCpiaW9fb3JpZyktPmJpX3ZjbnQ7CisJYmlvLT5iaV9pZHggPSAoKmJpb19vcmlnKS0+YmlfaWR4OworCWJpby0+Ymlfc2l6ZSA9ICgqYmlvX29yaWcpLT5iaV9zaXplOworCisJaWYgKHBvb2wgPT0gcGFnZV9wb29sKSB7CisJCWJpby0+YmlfZW5kX2lvID0gYm91bmNlX2VuZF9pb193cml0ZTsKKwkJaWYgKHJ3ID09IFJFQUQpCisJCQliaW8tPmJpX2VuZF9pbyA9IGJvdW5jZV9lbmRfaW9fcmVhZDsKKwl9IGVsc2UgeworCQliaW8tPmJpX2VuZF9pbyA9IGJvdW5jZV9lbmRfaW9fd3JpdGVfaXNhOworCQlpZiAocncgPT0gUkVBRCkKKwkJCWJpby0+YmlfZW5kX2lvID0gYm91bmNlX2VuZF9pb19yZWFkX2lzYTsKKwl9CisKKwliaW8tPmJpX3ByaXZhdGUgPSAqYmlvX29yaWc7CisJKmJpb19vcmlnID0gYmlvOworfQorCit2b2lkIGJsa19xdWV1ZV9ib3VuY2UocmVxdWVzdF9xdWV1ZV90ICpxLCBzdHJ1Y3QgYmlvICoqYmlvX29yaWcpCit7CisJbWVtcG9vbF90ICpwb29sOworCisJLyoKKwkgKiBmb3Igbm9uLWlzYSBib3VuY2UgY2FzZSwganVzdCBjaGVjayBpZiB0aGUgYm91bmNlIHBmbiBpcyBlcXVhbAorCSAqIHRvIG9yIGJpZ2dlciB0aGFuIHRoZSBoaWdoZXN0IHBmbiBpbiB0aGUgc3lzdGVtIC0tIGluIHRoYXQgY2FzZSwKKwkgKiBkb24ndCB3YXN0ZSB0aW1lIGl0ZXJhdGluZyBvdmVyIGJpbyBzZWdtZW50cworCSAqLworCWlmICghKHEtPmJvdW5jZV9nZnAgJiBHRlBfRE1BKSkgeworCQlpZiAocS0+Ym91bmNlX3BmbiA+PSBibGtfbWF4X3BmbikKKwkJCXJldHVybjsKKwkJcG9vbCA9IHBhZ2VfcG9vbDsKKwl9IGVsc2UgeworCQlCVUdfT04oIWlzYV9wYWdlX3Bvb2wpOworCQlwb29sID0gaXNhX3BhZ2VfcG9vbDsKKwl9CisKKwlibGtfYWRkX3RyYWNlX2JpbyhxLCAqYmlvX29yaWcsIEJMS19UQV9CT1VOQ0UpOworCisJLyoKKwkgKiBzbG93IHBhdGgKKwkgKi8KKwlfX2Jsa19xdWV1ZV9ib3VuY2UocSwgYmlvX29yaWcsIHBvb2wpOworfQorCitFWFBPUlRfU1lNQk9MKGJsa19xdWV1ZV9ib3VuY2UpOwpkaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jCmluZGV4IGFmY2RjNzIuLmVjNDY5MjM1OSAxMDA2NDQKLS0tIGEvbW0vZmlsZW1hcC5jCisrKyBiL21tL2ZpbGVtYXAuYwpAQCAtMTE0OSwxMyArMTE0OSwxNCBAQAogICogdGhhdCBjYW4gdXNlIHRoZSBwYWdlIGNhY2hlIGRpcmVjdGx5LgogICovCiBzc2l6ZV90Ci1fX2dlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKK2dlbmVyaWNfZmlsZV9haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbHAgPSBpb2NiLT5raV9maWxwOwogCXNzaXplX3QgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgc2VnOwogCXNpemVfdCBjb3VudDsKKwlsb2ZmX3QgKnBwb3MgPSAmaW9jYi0+a2lfcG9zOwogCiAJY291bnQgPSAwOwogCWZvciAoc2VnID0gMDsgc2VnIDwgbnJfc2Vnczsgc2VnKyspIHsKQEAgLTExNzksNyArMTE4MCw3IEBACiAKIAkvKiBjb2FsZXNjZSB0aGUgaW92ZWNzIGFuZCBnbyBkaXJlY3QtdG8tQklPIGZvciBPX0RJUkVDVCAqLwogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19ESVJFQ1QpIHsKLQkJbG9mZl90IHBvcyA9ICpwcG9zLCBzaXplOworCQlsb2ZmX3Qgc2l6ZTsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAKQEAgLTEyMjMsMzMgKzEyMjQsOCBAQAogb3V0OgogCXJldHVybiByZXR2YWw7CiB9Ci1FWFBPUlRfU1lNQk9MKF9fZ2VuZXJpY19maWxlX2Fpb19yZWFkKTsKLQotc3NpemVfdAotZ2VuZXJpY19maWxlX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQotewotCXN0cnVjdCBpb3ZlYyBsb2NhbF9pb3YgPSB7IC5pb3ZfYmFzZSA9IGJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OwotCi0JQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwotCXJldHVybiBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZChpb2NiLCAmbG9jYWxfaW92LCAxLCAmaW9jYi0+a2lfcG9zKTsKLX0KIEVYUE9SVF9TWU1CT0woZ2VuZXJpY19maWxlX2Fpb19yZWFkKTsKIAotc3NpemVfdAotZ2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBpb3ZlYyBsb2NhbF9pb3YgPSB7IC5pb3ZfYmFzZSA9IGJ1ZiwgLmlvdl9sZW4gPSBjb3VudCB9OwotCXN0cnVjdCBraW9jYiBraW9jYjsKLQlzc2l6ZV90IHJldDsKLQotCWluaXRfc3luY19raW9jYigma2lvY2IsIGZpbHApOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb19yZWFkKCZraW9jYiwgJmxvY2FsX2lvdiwgMSwgcHBvcyk7Ci0JaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCi0JCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9yZWFkKTsKLQogaW50IGZpbGVfc2VuZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRlc2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQogewogCXNzaXplX3Qgd3JpdHRlbjsKQEAgLTE0NzEsNyArMTQ0Nyw3IEBACiAJICogYWNjZXNzaWJsZS4uCiAJICovCiAJaWYgKGFyZWEtPnZtX21tID09IGN1cnJlbnQtPm1tKQotCQlyZXR1cm4gTlVMTDsKKwkJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CiAJLyogRmFsbCB0aHJvdWdoIHRvIHRoZSBub24tcmVhZC1haGVhZCBjYXNlICovCiBub19jYWNoZWRfcGFnZToKIAkvKgpAQCAtMTQ5Niw3ICsxNDcyLDcgQEAKIAkgKi8KIAlpZiAoZXJyb3IgPT0gLUVOT01FTSkKIAkJcmV0dXJuIE5PUEFHRV9PT007Ci0JcmV0dXJuIE5VTEw7CisJcmV0dXJuIE5PUEFHRV9TSUdCVVM7CiAKIHBhZ2Vfbm90X3VwdG9kYXRlOgogCWlmICghZGlkX3JlYWRhcm91bmQpIHsKQEAgLTE1NjUsNyArMTU0MSw3IEBACiAJICovCiAJc2hyaW5rX3JlYWRhaGVhZF9zaXplX2VpbyhmaWxlLCByYSk7CiAJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwotCXJldHVybiBOVUxMOworCXJldHVybiBOT1BBR0VfU0lHQlVTOwogfQogRVhQT1JUX1NZTUJPTChmaWxlbWFwX25vcGFnZSk7CiAKQEAgLTIwMjAsNiArMTk5Niw3IEBACiAJCWlmICh1bmxpa2VseSgqcG9zICsgKmNvdW50ID4gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMpKQogCQkJKmNvdW50ID0gaW5vZGUtPmlfc2ItPnNfbWF4Ynl0ZXMgLSAqcG9zOwogCX0gZWxzZSB7CisjaWZkZWYgQ09ORklHX0JMT0NLCiAJCWxvZmZfdCBpc2l6ZTsKIAkJaWYgKGJkZXZfcmVhZF9vbmx5KElfQkRFVihpbm9kZSkpKQogCQkJcmV0dXJuIC1FUEVSTTsKQEAgLTIwMzEsNiArMjAwOCw5IEBACiAKIAkJaWYgKCpwb3MgKyAqY291bnQgPiBpc2l6ZSkKIAkJCSpjb3VudCA9IGlzaXplIC0gKnBvczsKKyNlbHNlCisJCXJldHVybiAtRVBFUk07CisjZW5kaWYKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0yMzExLDIyICsyMjkxLDIyIEBACiAJY3VycmVudC0+YmFja2luZ19kZXZfaW5mbyA9IE5VTEw7CiAJcmV0dXJuIHdyaXR0ZW4gPyB3cml0dGVuIDogZXJyOwogfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayk7CiAKLXNzaXplX3QKLWdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCitzc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGVfbm9sb2NrKHN0cnVjdCBraW9jYiAqaW9jYiwKKwkJY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90IHBvcykKIHsKIAlzdHJ1Y3QgZmlsZSAqZmlsZSA9IGlvY2ItPmtpX2ZpbHA7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBmaWxlLT5mX21hcHBpbmc7CiAJc3RydWN0IGlub2RlICppbm9kZSA9IG1hcHBpbmctPmhvc3Q7CiAJc3NpemVfdCByZXQ7Ci0JbG9mZl90IHBvcyA9ICpwcG9zOwogCi0JcmV0ID0gX19nZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayhpb2NiLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOworCUJVR19PTihpb2NiLT5raV9wb3MgIT0gcG9zKTsKKworCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLAorCQkJJmlvY2ItPmtpX3Bvcyk7CiAKIAlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewotCQlpbnQgZXJyOworCQlzc2l6ZV90IGVycjsKIAogCQllcnIgPSBzeW5jX3BhZ2VfcmFuZ2Vfbm9sb2NrKGlub2RlLCBtYXBwaW5nLCBwb3MsIHJldCk7CiAJCWlmIChlcnIgPCAwKQpAQCAtMjMzNCw1MSArMjMxNCwyMSBAQAogCX0KIAlyZXR1cm4gcmV0OwogfQorRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jayk7CiAKLXN0YXRpYyBzc2l6ZV90Ci1fX2dlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2soc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJCXVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBraW9jYiBraW9jYjsKLQlzc2l6ZV90IHJldDsKLQotCWluaXRfc3luY19raW9jYigma2lvY2IsIGZpbGUpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soJmtpb2NiLCBpb3YsIG5yX3NlZ3MsIHBwb3MpOwotCWlmIChyZXQgPT0gLUVJT0NCUVVFVUVEKQotCQlyZXQgPSB3YWl0X29uX3N5bmNfa2lvY2IoJmtpb2NiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zc2l6ZV90Ci1nZW5lcmljX2ZpbGVfd3JpdGVfbm9sb2NrKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qga2lvY2Iga2lvY2I7Ci0Jc3NpemVfdCByZXQ7Ci0KLQlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxlKTsKLQlyZXQgPSBnZW5lcmljX2ZpbGVfYWlvX3dyaXRlX25vbG9jaygma2lvY2IsIGlvdiwgbnJfc2VncywgcHBvcyk7Ci0JaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCi0JCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2spOwotCi1zc2l6ZV90IGdlbmVyaWNfZmlsZV9haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmLAotCQkJICAgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK3NzaXplX3QgZ2VuZXJpY19maWxlX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGUgPSBpb2NiLT5raV9maWxwOwogCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwogCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwogCXNzaXplX3QgcmV0OwotCXN0cnVjdCBpb3ZlYyBsb2NhbF9pb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwKLQkJCQkJLmlvdl9sZW4gPSBjb3VudCB9OwogCiAJQlVHX09OKGlvY2ItPmtpX3BvcyAhPSBwb3MpOwogCiAJbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgJmxvY2FsX2lvdiwgMSwKLQkJCQkJCSZpb2NiLT5raV9wb3MpOworCXJldCA9IF9fZ2VuZXJpY19maWxlX2Fpb193cml0ZV9ub2xvY2soaW9jYiwgaW92LCBucl9zZWdzLAorCQkJJmlvY2ItPmtpX3Bvcyk7CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAKIAlpZiAocmV0ID4gMCAmJiAoKGZpbGUtPmZfZmxhZ3MgJiBPX1NZTkMpIHx8IElTX1NZTkMoaW5vZGUpKSkgewpAQCAtMjM5Miw2NiArMjM0Miw2IEBACiB9CiBFWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9haW9fd3JpdGUpOwogCi1zc2l6ZV90IGdlbmVyaWNfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gZmlsZS0+Zl9tYXBwaW5nOwotCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBtYXBwaW5nLT5ob3N0OwotCXNzaXplX3QJcmV0OwotCXN0cnVjdCBpb3ZlYyBsb2NhbF9pb3YgPSB7IC5pb3ZfYmFzZSA9ICh2b2lkIF9fdXNlciAqKWJ1ZiwKLQkJCQkJLmlvdl9sZW4gPSBjb3VudCB9OwotCi0JbXV0ZXhfbG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldCA9IF9fZ2VuZXJpY19maWxlX3dyaXRlX25vbG9jayhmaWxlLCAmbG9jYWxfaW92LCAxLCBwcG9zKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7Ci0JCXNzaXplX3QgZXJyOwotCi0JCWVyciA9IHN5bmNfcGFnZV9yYW5nZShpbm9kZSwgbWFwcGluZywgKnBwb3MgLSByZXQsIHJldCk7Ci0JCWlmIChlcnIgPCAwKQotCQkJcmV0ID0gZXJyOwotCX0KLQlyZXR1cm4gcmV0OwotfQotRVhQT1JUX1NZTUJPTChnZW5lcmljX2ZpbGVfd3JpdGUpOwotCi1zc2l6ZV90IGdlbmVyaWNfZmlsZV9yZWFkdihzdHJ1Y3QgZmlsZSAqZmlscCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3Qga2lvY2Iga2lvY2I7Ci0Jc3NpemVfdCByZXQ7Ci0KLQlpbml0X3N5bmNfa2lvY2IoJmtpb2NiLCBmaWxwKTsKLQlyZXQgPSBfX2dlbmVyaWNfZmlsZV9haW9fcmVhZCgma2lvY2IsIGlvdiwgbnJfc2VncywgcHBvcyk7Ci0JaWYgKC1FSU9DQlFVRVVFRCA9PSByZXQpCi0JCXJldCA9IHdhaXRfb25fc3luY19raW9jYigma2lvY2IpOwotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV9yZWFkdik7Ci0KLXNzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRldihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCAqcHBvcykKLXsKLQlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGZpbGUtPmZfbWFwcGluZzsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy0+aG9zdDsKLQlzc2l6ZV90IHJldDsKLQotCW11dGV4X2xvY2soJmlub2RlLT5pX211dGV4KTsKLQlyZXQgPSBfX2dlbmVyaWNfZmlsZV93cml0ZV9ub2xvY2soZmlsZSwgaW92LCBucl9zZWdzLCBwcG9zKTsKLQltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKLQotCWlmIChyZXQgPiAwICYmICgoZmlsZS0+Zl9mbGFncyAmIE9fU1lOQykgfHwgSVNfU1lOQyhpbm9kZSkpKSB7Ci0JCWludCBlcnI7Ci0KLQkJZXJyID0gc3luY19wYWdlX3JhbmdlKGlub2RlLCBtYXBwaW5nLCAqcHBvcyAtIHJldCwgcmV0KTsKLQkJaWYgKGVyciA8IDApCi0JCQlyZXQgPSBlcnI7Ci0JfQotCXJldHVybiByZXQ7Ci19Ci1FWFBPUlRfU1lNQk9MKGdlbmVyaWNfZmlsZV93cml0ZXYpOwotCiAvKgogICogQ2FsbGVkIHVuZGVyIGlfbXV0ZXggZm9yIHdyaXRlcyB0byBTX0lTUkVHIGZpbGVzLiAgIFJldHVybnMgLUVJTyBpZiBzb21ldGhpbmcKICAqIHdlbnQgd3JvbmcgZHVyaW5nIHBhZ2VjYWNoZSBzaG9vdGRvd24uCkBAIC0yNDkxLDMgKzIzODEsMzMgQEAKIAl9CiAJcmV0dXJuIHJldHZhbDsKIH0KKworLyoqCisgKiB0cnlfdG9fcmVsZWFzZV9wYWdlKCkgLSByZWxlYXNlIG9sZCBmcy1zcGVjaWZpYyBtZXRhZGF0YSBvbiBhIHBhZ2UKKyAqCisgKiBAcGFnZTogdGhlIHBhZ2Ugd2hpY2ggdGhlIGtlcm5lbCBpcyB0cnlpbmcgdG8gZnJlZQorICogQGdmcF9tYXNrOiBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyAoYW5kIEkvTyBtb2RlKQorICoKKyAqIFRoZSBhZGRyZXNzX3NwYWNlIGlzIHRvIHRyeSB0byByZWxlYXNlIGFueSBkYXRhIGFnYWluc3QgdGhlIHBhZ2UKKyAqIChwcmVzdW1hYmx5IGF0IHBhZ2UtPnByaXZhdGUpLiAgSWYgdGhlIHJlbGVhc2Ugd2FzIHN1Y2Nlc3NmdWwsIHJldHVybiBgMScuCisgKiBPdGhlcndpc2UgcmV0dXJuIHplcm8uCisgKgorICogVGhlIEBnZnBfbWFzayBhcmd1bWVudCBzcGVjaWZpZXMgd2hldGhlciBJL08gbWF5IGJlIHBlcmZvcm1lZCB0byByZWxlYXNlCisgKiB0aGlzIHBhZ2UgKF9fR0ZQX0lPKSwgYW5kIHdoZXRoZXIgdGhlIGNhbGwgbWF5IGJsb2NrIChfX0dGUF9XQUlUKS4KKyAqCisgKiBOT1RFOiBAZ2ZwX21hc2sgbWF5IGdvIGF3YXksIGFuZCB0aGlzIGZ1bmN0aW9uIG1heSBiZWNvbWUgbm9uLWJsb2NraW5nLgorICovCitpbnQgdHJ5X3RvX3JlbGVhc2VfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgZ2ZwX3QgZ2ZwX21hc2spCit7CisJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiBjb25zdCBtYXBwaW5nID0gcGFnZS0+bWFwcGluZzsKKworCUJVR19PTighUGFnZUxvY2tlZChwYWdlKSk7CisJaWYgKFBhZ2VXcml0ZWJhY2socGFnZSkpCisJCXJldHVybiAwOworCisJaWYgKG1hcHBpbmcgJiYgbWFwcGluZy0+YV9vcHMtPnJlbGVhc2VwYWdlKQorCQlyZXR1cm4gbWFwcGluZy0+YV9vcHMtPnJlbGVhc2VwYWdlKHBhZ2UsIGdmcF9tYXNrKTsKKwlyZXR1cm4gdHJ5X3RvX2ZyZWVfYnVmZmVycyhwYWdlKTsKK30KKworRVhQT1JUX1NZTUJPTCh0cnlfdG9fcmVsZWFzZV9wYWdlKTsKZGlmZiAtLWdpdCBhL21tL2ZyZW1hcC5jIGIvbW0vZnJlbWFwLmMKaW5kZXggYWEzMDYxOC4uN2E5ZDBmNSAxMDA2NDQKLS0tIGEvbW0vZnJlbWFwLmMKKysrIGIvbW0vZnJlbWFwLmMKQEAgLTM5LDcgKzM5LDcgQEAKIAl9IGVsc2UgewogCQlpZiAoIXB0ZV9maWxlKHB0ZSkpCiAJCQlmcmVlX3N3YXBfYW5kX2NhY2hlKHB0ZV90b19zd3BfZW50cnkocHRlKSk7Ci0JCXB0ZV9jbGVhcihtbSwgYWRkciwgcHRlcCk7CisJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGVwLCAwKTsKIAl9CiAJcmV0dXJuICEhcGFnZTsKIH0KZGlmZiAtLWdpdCBhL21tL2hpZ2htZW0uYyBiL21tL2hpZ2htZW0uYwppbmRleCBlZTU1MTliLi4wMjA2ZTdlIDEwMDY0NAotLS0gYS9tbS9oaWdobWVtLmMKKysrIGIvbW0vaGlnaG1lbS5jCkBAIC0yOSwxMyArMjksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2Jsa3RyYWNlX2FwaS5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1zdGF0aWMgbWVtcG9vbF90ICpwYWdlX3Bvb2wsICppc2FfcGFnZV9wb29sOwotCi1zdGF0aWMgdm9pZCAqbWVtcG9vbF9hbGxvY19wYWdlc19pc2EoZ2ZwX3QgZ2ZwX21hc2ssIHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIG1lbXBvb2xfYWxsb2NfcGFnZXMoZ2ZwX21hc2sgfCBHRlBfRE1BLCBkYXRhKTsKLX0KLQogLyoKICAqIFZpcnR1YWxfY291bnQgaXMgbm90IGEgcHVyZSAiY291bnQiLgogICogIDAgbWVhbnMgdGhhdCBpdCBpcyBub3QgbWFwcGVkLCBhbmQgaGFzIG5vdCBiZWVuIG1hcHBlZApAQCAtMjE3LDI4MiArMjEwLDggQEAKIH0KIAogRVhQT1JUX1NZTUJPTChrdW5tYXBfaGlnaCk7Ci0KLSNkZWZpbmUgUE9PTF9TSVpFCTY0Ci0KLXN0YXRpYyBfX2luaXQgaW50IGluaXRfZW1lcmdlbmN5X3Bvb2wodm9pZCkKLXsKLQlzdHJ1Y3Qgc3lzaW5mbyBpOwotCXNpX21lbWluZm8oJmkpOwotCXNpX3N3YXBpbmZvKCZpKTsKLSAgICAgICAgCi0JaWYgKCFpLnRvdGFsaGlnaCkKLQkJcmV0dXJuIDA7Ci0KLQlwYWdlX3Bvb2wgPSBtZW1wb29sX2NyZWF0ZV9wYWdlX3Bvb2woUE9PTF9TSVpFLCAwKTsKLQlCVUdfT04oIXBhZ2VfcG9vbCk7Ci0JcHJpbnRrKCJoaWdobWVtIGJvdW5jZSBwb29sIHNpemU6ICVkIHBhZ2VzXG4iLCBQT09MX1NJWkUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLV9faW5pdGNhbGwoaW5pdF9lbWVyZ2VuY3lfcG9vbCk7Ci0KLS8qCi0gKiBoaWdobWVtIHZlcnNpb24sIG1hcCBpbiB0byB2ZWMKLSAqLwotc3RhdGljIHZvaWQgYm91bmNlX2NvcHlfdmVjKHN0cnVjdCBiaW9fdmVjICp0bywgdW5zaWduZWQgY2hhciAqdmZyb20pCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQl1bnNpZ25lZCBjaGFyICp2dG87Ci0KLQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7Ci0JdnRvID0ga21hcF9hdG9taWModG8tPmJ2X3BhZ2UsIEtNX0JPVU5DRV9SRUFEKTsKLQltZW1jcHkodnRvICsgdG8tPmJ2X29mZnNldCwgdmZyb20sIHRvLT5idl9sZW4pOwotCWt1bm1hcF9hdG9taWModnRvLCBLTV9CT1VOQ0VfUkVBRCk7Ci0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwotfQotCi0jZWxzZSAvKiBDT05GSUdfSElHSE1FTSAqLwotCi0jZGVmaW5lIGJvdW5jZV9jb3B5X3ZlYyh0bywgdmZyb20pCVwKLQltZW1jcHkocGFnZV9hZGRyZXNzKCh0byktPmJ2X3BhZ2UpICsgKHRvKS0+YnZfb2Zmc2V0LCB2ZnJvbSwgKHRvKS0+YnZfbGVuKQotCiAjZW5kaWYKIAotI2RlZmluZSBJU0FfUE9PTF9TSVpFCTE2Ci0KLS8qCi0gKiBnZXRzIGNhbGxlZCAiZXZlcnkiIHRpbWUgc29tZW9uZSBpbml0J3MgYSBxdWV1ZSB3aXRoIEJMS19CT1VOQ0VfSVNBCi0gKiBhcyB0aGUgbWF4IGFkZHJlc3MsIHNvIGNoZWNrIGlmIHRoZSBwb29sIGhhcyBhbHJlYWR5IGJlZW4gY3JlYXRlZC4KLSAqLwotaW50IGluaXRfZW1lcmdlbmN5X2lzYV9wb29sKHZvaWQpCi17Ci0JaWYgKGlzYV9wYWdlX3Bvb2wpCi0JCXJldHVybiAwOwotCi0JaXNhX3BhZ2VfcG9vbCA9IG1lbXBvb2xfY3JlYXRlKElTQV9QT09MX1NJWkUsIG1lbXBvb2xfYWxsb2NfcGFnZXNfaXNhLAotCQkJCSAgICAgICBtZW1wb29sX2ZyZWVfcGFnZXMsICh2b2lkICopIDApOwotCUJVR19PTighaXNhX3BhZ2VfcG9vbCk7Ci0KLQlwcmludGsoImlzYSBib3VuY2UgcG9vbCBzaXplOiAlZCBwYWdlc1xuIiwgSVNBX1BPT0xfU0laRSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qCi0gKiBTaW1wbGUgYm91bmNlIGJ1ZmZlciBzdXBwb3J0IGZvciBoaWdobWVtIHBhZ2VzLiBEZXBlbmRpbmcgb24gdGhlCi0gKiBxdWV1ZSBnZnAgbWFzayBzZXQsICp0byBtYXkgb3IgbWF5IG5vdCBiZSBhIGhpZ2htZW0gcGFnZS4ga21hcCBpdAotICogYWx3YXlzLCBpdCB3aWxsIGRvIHRoZSBSaWdodCBUaGluZwotICovCi1zdGF0aWMgdm9pZCBjb3B5X3RvX2hpZ2hfYmlvX2lycShzdHJ1Y3QgYmlvICp0bywgc3RydWN0IGJpbyAqZnJvbSkKLXsKLQl1bnNpZ25lZCBjaGFyICp2ZnJvbTsKLQlzdHJ1Y3QgYmlvX3ZlYyAqdG92ZWMsICpmcm9tdmVjOwotCWludCBpOwotCi0JX19iaW9fZm9yX2VhY2hfc2VnbWVudCh0b3ZlYywgdG8sIGksIDApIHsKLQkJZnJvbXZlYyA9IGZyb20tPmJpX2lvX3ZlYyArIGk7Ci0KLQkJLyoKLQkJICogbm90IGJvdW5jZWQKLQkJICovCi0JCWlmICh0b3ZlYy0+YnZfcGFnZSA9PSBmcm9tdmVjLT5idl9wYWdlKQotCQkJY29udGludWU7Ci0KLQkJLyoKLQkJICogZnJvbXZlYy0+YnZfb2Zmc2V0IGFuZCBmcm9tdmVjLT5idl9sZW4gbWlnaHQgaGF2ZSBiZWVuCi0JCSAqIG1vZGlmaWVkIGJ5IHRoZSBibG9jayBsYXllciwgc28gdXNlIHRoZSBvcmlnaW5hbCBjb3B5LAotCQkgKiBib3VuY2VfY29weV92ZWMgYWxyZWFkeSB1c2VzIHRvdmVjLT5idl9sZW4KLQkJICovCi0JCXZmcm9tID0gcGFnZV9hZGRyZXNzKGZyb212ZWMtPmJ2X3BhZ2UpICsgdG92ZWMtPmJ2X29mZnNldDsKLQotCQlmbHVzaF9kY2FjaGVfcGFnZSh0b3ZlYy0+YnZfcGFnZSk7Ci0JCWJvdW5jZV9jb3B5X3ZlYyh0b3ZlYywgdmZyb20pOwotCX0KLX0KLQotc3RhdGljIHZvaWQgYm91bmNlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIG1lbXBvb2xfdCAqcG9vbCwgaW50IGVycikKLXsKLQlzdHJ1Y3QgYmlvICpiaW9fb3JpZyA9IGJpby0+YmlfcHJpdmF0ZTsKLQlzdHJ1Y3QgYmlvX3ZlYyAqYnZlYywgKm9yZ192ZWM7Ci0JaW50IGk7Ci0KLQlpZiAodGVzdF9iaXQoQklPX0VPUE5PVFNVUFAsICZiaW8tPmJpX2ZsYWdzKSkKLQkJc2V0X2JpdChCSU9fRU9QTk9UU1VQUCwgJmJpb19vcmlnLT5iaV9mbGFncyk7Ci0KLQkvKgotCSAqIGZyZWUgdXAgYm91bmNlIGluZGlyZWN0IHBhZ2VzIHVzZWQKLQkgKi8KLQlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGJ2ZWMsIGJpbywgaSwgMCkgewotCQlvcmdfdmVjID0gYmlvX29yaWctPmJpX2lvX3ZlYyArIGk7Ci0JCWlmIChidmVjLT5idl9wYWdlID09IG9yZ192ZWMtPmJ2X3BhZ2UpCi0JCQljb250aW51ZTsKLQotCQlkZWNfem9uZV9wYWdlX3N0YXRlKGJ2ZWMtPmJ2X3BhZ2UsIE5SX0JPVU5DRSk7Ci0JCW1lbXBvb2xfZnJlZShidmVjLT5idl9wYWdlLCBwb29sKTsKLQl9Ci0KLQliaW9fZW5kaW8oYmlvX29yaWcsIGJpb19vcmlnLT5iaV9zaXplLCBlcnIpOwotCWJpb19wdXQoYmlvKTsKLX0KLQotc3RhdGljIGludCBib3VuY2VfZW5kX2lvX3dyaXRlKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnIpCi17Ci0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlib3VuY2VfZW5kX2lvKGJpbywgcGFnZV9wb29sLCBlcnIpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGJvdW5jZV9lbmRfaW9fd3JpdGVfaXNhKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnIpCi17Ci0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlib3VuY2VfZW5kX2lvKGJpbywgaXNhX3BhZ2VfcG9vbCwgZXJyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgX19ib3VuY2VfZW5kX2lvX3JlYWQoc3RydWN0IGJpbyAqYmlvLCBtZW1wb29sX3QgKnBvb2wsIGludCBlcnIpCi17Ci0Jc3RydWN0IGJpbyAqYmlvX29yaWcgPSBiaW8tPmJpX3ByaXZhdGU7Ci0KLQlpZiAodGVzdF9iaXQoQklPX1VQVE9EQVRFLCAmYmlvLT5iaV9mbGFncykpCi0JCWNvcHlfdG9faGlnaF9iaW9faXJxKGJpb19vcmlnLCBiaW8pOwotCi0JYm91bmNlX2VuZF9pbyhiaW8sIHBvb2wsIGVycik7Ci19Ci0KLXN0YXRpYyBpbnQgYm91bmNlX2VuZF9pb19yZWFkKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnIpCi17Ci0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlfX2JvdW5jZV9lbmRfaW9fcmVhZChiaW8sIHBhZ2VfcG9vbCwgZXJyKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBib3VuY2VfZW5kX2lvX3JlYWRfaXNhKHN0cnVjdCBiaW8gKmJpbywgdW5zaWduZWQgaW50IGJ5dGVzX2RvbmUsIGludCBlcnIpCi17Ci0JaWYgKGJpby0+Ymlfc2l6ZSkKLQkJcmV0dXJuIDE7Ci0KLQlfX2JvdW5jZV9lbmRfaW9fcmVhZChiaW8sIGlzYV9wYWdlX3Bvb2wsIGVycik7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fYmxrX3F1ZXVlX2JvdW5jZShyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKipiaW9fb3JpZywKLQkJCSAgICAgICBtZW1wb29sX3QgKnBvb2wpCi17Ci0Jc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IGJpbyAqYmlvID0gTlVMTDsKLQlpbnQgaSwgcncgPSBiaW9fZGF0YV9kaXIoKmJpb19vcmlnKTsKLQlzdHJ1Y3QgYmlvX3ZlYyAqdG8sICpmcm9tOwotCi0JYmlvX2Zvcl9lYWNoX3NlZ21lbnQoZnJvbSwgKmJpb19vcmlnLCBpKSB7Ci0JCXBhZ2UgPSBmcm9tLT5idl9wYWdlOwotCi0JCS8qCi0JCSAqIGlzIGRlc3RpbmF0aW9uIHBhZ2UgYmVsb3cgYm91bmNlIHBmbj8KLQkJICovCi0JCWlmIChwYWdlX3RvX3BmbihwYWdlKSA8IHEtPmJvdW5jZV9wZm4pCi0JCQljb250aW51ZTsKLQotCQkvKgotCQkgKiBpcmssIGJvdW5jZSBpdAotCQkgKi8KLQkJaWYgKCFiaW8pCi0JCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PSU8sICgqYmlvX29yaWcpLT5iaV92Y250KTsKLQotCQl0byA9IGJpby0+YmlfaW9fdmVjICsgaTsKLQotCQl0by0+YnZfcGFnZSA9IG1lbXBvb2xfYWxsb2MocG9vbCwgcS0+Ym91bmNlX2dmcCk7Ci0JCXRvLT5idl9sZW4gPSBmcm9tLT5idl9sZW47Ci0JCXRvLT5idl9vZmZzZXQgPSBmcm9tLT5idl9vZmZzZXQ7Ci0JCWluY196b25lX3BhZ2Vfc3RhdGUodG8tPmJ2X3BhZ2UsIE5SX0JPVU5DRSk7Ci0KLQkJaWYgKHJ3ID09IFdSSVRFKSB7Ci0JCQljaGFyICp2dG8sICp2ZnJvbTsKLQotCQkJZmx1c2hfZGNhY2hlX3BhZ2UoZnJvbS0+YnZfcGFnZSk7Ci0JCQl2dG8gPSBwYWdlX2FkZHJlc3ModG8tPmJ2X3BhZ2UpICsgdG8tPmJ2X29mZnNldDsKLQkJCXZmcm9tID0ga21hcChmcm9tLT5idl9wYWdlKSArIGZyb20tPmJ2X29mZnNldDsKLQkJCW1lbWNweSh2dG8sIHZmcm9tLCB0by0+YnZfbGVuKTsKLQkJCWt1bm1hcChmcm9tLT5idl9wYWdlKTsKLQkJfQotCX0KLQotCS8qCi0JICogbm8gcGFnZXMgYm91bmNlZAotCSAqLwotCWlmICghYmlvKQotCQlyZXR1cm47Ci0KLQkvKgotCSAqIGF0IGxlYXN0IG9uZSBwYWdlIHdhcyBib3VuY2VkLCBmaWxsIGluIHBvc3NpYmxlIG5vbi1oaWdobWVtCi0JICogcGFnZXMKLQkgKi8KLQlfX2Jpb19mb3JfZWFjaF9zZWdtZW50KGZyb20sICpiaW9fb3JpZywgaSwgMCkgewotCQl0byA9IGJpb19pb3ZlY19pZHgoYmlvLCBpKTsKLQkJaWYgKCF0by0+YnZfcGFnZSkgewotCQkJdG8tPmJ2X3BhZ2UgPSBmcm9tLT5idl9wYWdlOwotCQkJdG8tPmJ2X2xlbiA9IGZyb20tPmJ2X2xlbjsKLQkJCXRvLT5idl9vZmZzZXQgPSBmcm9tLT5idl9vZmZzZXQ7Ci0JCX0KLQl9Ci0KLQliaW8tPmJpX2JkZXYgPSAoKmJpb19vcmlnKS0+YmlfYmRldjsKLQliaW8tPmJpX2ZsYWdzIHw9ICgxIDw8IEJJT19CT1VOQ0VEKTsKLQliaW8tPmJpX3NlY3RvciA9ICgqYmlvX29yaWcpLT5iaV9zZWN0b3I7Ci0JYmlvLT5iaV9ydyA9ICgqYmlvX29yaWcpLT5iaV9ydzsKLQotCWJpby0+YmlfdmNudCA9ICgqYmlvX29yaWcpLT5iaV92Y250OwotCWJpby0+YmlfaWR4ID0gKCpiaW9fb3JpZyktPmJpX2lkeDsKLQliaW8tPmJpX3NpemUgPSAoKmJpb19vcmlnKS0+Ymlfc2l6ZTsKLQotCWlmIChwb29sID09IHBhZ2VfcG9vbCkgewotCQliaW8tPmJpX2VuZF9pbyA9IGJvdW5jZV9lbmRfaW9fd3JpdGU7Ci0JCWlmIChydyA9PSBSRUFEKQotCQkJYmlvLT5iaV9lbmRfaW8gPSBib3VuY2VfZW5kX2lvX3JlYWQ7Ci0JfSBlbHNlIHsKLQkJYmlvLT5iaV9lbmRfaW8gPSBib3VuY2VfZW5kX2lvX3dyaXRlX2lzYTsKLQkJaWYgKHJ3ID09IFJFQUQpCi0JCQliaW8tPmJpX2VuZF9pbyA9IGJvdW5jZV9lbmRfaW9fcmVhZF9pc2E7Ci0JfQotCi0JYmlvLT5iaV9wcml2YXRlID0gKmJpb19vcmlnOwotCSpiaW9fb3JpZyA9IGJpbzsKLX0KLQotdm9pZCBibGtfcXVldWVfYm91bmNlKHJlcXVlc3RfcXVldWVfdCAqcSwgc3RydWN0IGJpbyAqKmJpb19vcmlnKQotewotCW1lbXBvb2xfdCAqcG9vbDsKLQotCS8qCi0JICogZm9yIG5vbi1pc2EgYm91bmNlIGNhc2UsIGp1c3QgY2hlY2sgaWYgdGhlIGJvdW5jZSBwZm4gaXMgZXF1YWwKLQkgKiB0byBvciBiaWdnZXIgdGhhbiB0aGUgaGlnaGVzdCBwZm4gaW4gdGhlIHN5c3RlbSAtLSBpbiB0aGF0IGNhc2UsCi0JICogZG9uJ3Qgd2FzdGUgdGltZSBpdGVyYXRpbmcgb3ZlciBiaW8gc2VnbWVudHMKLQkgKi8KLQlpZiAoIShxLT5ib3VuY2VfZ2ZwICYgR0ZQX0RNQSkpIHsKLQkJaWYgKHEtPmJvdW5jZV9wZm4gPj0gYmxrX21heF9wZm4pCi0JCQlyZXR1cm47Ci0JCXBvb2wgPSBwYWdlX3Bvb2w7Ci0JfSBlbHNlIHsKLQkJQlVHX09OKCFpc2FfcGFnZV9wb29sKTsKLQkJcG9vbCA9IGlzYV9wYWdlX3Bvb2w7Ci0JfQotCi0JYmxrX2FkZF90cmFjZV9iaW8ocSwgKmJpb19vcmlnLCBCTEtfVEFfQk9VTkNFKTsKLQotCS8qCi0JICogc2xvdyBwYXRoCi0JICovCi0JX19ibGtfcXVldWVfYm91bmNlKHEsIGJpb19vcmlnLCBwb29sKTsKLX0KLQotRVhQT1JUX1NZTUJPTChibGtfcXVldWVfYm91bmNlKTsKLQogI2lmIGRlZmluZWQoSEFTSEVEX1BBR0VfVklSVFVBTCkKIAogI2RlZmluZSBQQV9IQVNIX09SREVSCTcKZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKaW5kZXggOTJhM2ViZC4uOWNmM2YzNCAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5LmMKKysrIGIvbW0vbWVtb3J5LmMKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCSAqLwogCWlmIChpc19jb3dfbWFwcGluZyh2bV9mbGFncykpIHsKIAkJcHRlcF9zZXRfd3Jwcm90ZWN0KHNyY19tbSwgYWRkciwgc3JjX3B0ZSk7Ci0JCXB0ZSA9ICpzcmNfcHRlOworCQlwdGUgPSBwdGVfd3Jwcm90ZWN0KHB0ZSk7CiAJfQogCiAJLyoKQEAgLTUwNiw2ICs1MDYsNyBAQAogCXNyY19wdGUgPSBwdGVfb2Zmc2V0X21hcF9uZXN0ZWQoc3JjX3BtZCwgYWRkcik7CiAJc3JjX3B0bCA9IHB0ZV9sb2NrcHRyKHNyY19tbSwgc3JjX3BtZCk7CiAJc3Bpbl9sb2NrX25lc3RlZChzcmNfcHRsLCBTSU5HTEVfREVQVEhfTkVTVElORyk7CisJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAKIAlkbyB7CiAJCS8qCkBAIC01MjcsNiArNTI4LDcgQEAKIAkJcHJvZ3Jlc3MgKz0gODsKIAl9IHdoaWxlIChkc3RfcHRlKyssIHNyY19wdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKIAorCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXNwaW5fdW5sb2NrKHNyY19wdGwpOwogCXB0ZV91bm1hcF9uZXN0ZWQoc3JjX3B0ZSAtIDEpOwogCWFkZF9tbV9yc3MoZHN0X21tLCByc3NbMF0sIHJzc1sxXSk7CkBAIC02MjgsNiArNjMwLDcgQEAKIAlpbnQgYW5vbl9yc3MgPSAwOwogCiAJcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCAmcHRsKTsKKwlhcmNoX2VudGVyX2xhenlfbW11X21vZGUoKTsKIAlkbyB7CiAJCXB0ZV90IHB0ZW50ID0gKnB0ZTsKIAkJaWYgKHB0ZV9ub25lKHB0ZW50KSkgewpAQCAtNjkwLDEwICs2OTMsMTEgQEAKIAkJCWNvbnRpbnVlOwogCQlpZiAoIXB0ZV9maWxlKHB0ZW50KSkKIAkJCWZyZWVfc3dhcF9hbmRfY2FjaGUocHRlX3RvX3N3cF9lbnRyeShwdGVudCkpOwotCQlwdGVfY2xlYXJfZnVsbChtbSwgYWRkciwgcHRlLCB0bGItPmZ1bGxtbSk7CisJCXB0ZV9jbGVhcl9ub3RfcHJlc2VudF9mdWxsKG1tLCBhZGRyLCBwdGUsIHRsYi0+ZnVsbG1tKTsKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIChhZGRyICE9IGVuZCAmJiAqemFwX3dvcmsgPiAwKSk7CiAKIAlhZGRfbW1fcnNzKG1tLCBmaWxlX3JzcywgYW5vbl9yc3MpOworCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIAogCXJldHVybiBhZGRyOwpAQCAtMTEwOSw2ICsxMTEzLDcgQEAKIAlwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7CiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOworCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCWRvIHsKIAkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBaRVJPX1BBR0UoYWRkcik7CiAJCXB0ZV90IHplcm9fcHRlID0gcHRlX3dycHJvdGVjdChta19wdGUocGFnZSwgcHJvdCkpOwpAQCAtMTExOCw2ICsxMTIzLDcgQEAKIAkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CiAJCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgemVyb19wdGUpOwogCX0gd2hpbGUgKHB0ZSsrLCBhZGRyICs9IFBBR0VfU0laRSwgYWRkciAhPSBlbmQpOworCWFyY2hfbGVhdmVfbGF6eV9tbXVfbW9kZSgpOwogCXB0ZV91bm1hcF91bmxvY2socHRlIC0gMSwgcHRsKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTEyNzUsMTEgKzEyODEsMTMgQEAKIAlwdGUgPSBwdGVfYWxsb2NfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7CiAJaWYgKCFwdGUpCiAJCXJldHVybiAtRU5PTUVNOworCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCWRvIHsKIAkJQlVHX09OKCFwdGVfbm9uZSgqcHRlKSk7CiAJCXNldF9wdGVfYXQobW0sIGFkZHIsIHB0ZSwgcGZuX3B0ZShwZm4sIHByb3QpKTsKIAkJcGZuKys7CiAJfSB3aGlsZSAocHRlKyssIGFkZHIgKz0gUEFHRV9TSVpFLCBhZGRyICE9IGVuZCk7CisJYXJjaF9sZWF2ZV9sYXp5X21tdV9tb2RlKCk7CiAJcHRlX3VubWFwX3VubG9jayhwdGUgLSAxLCBwdGwpOwogCXJldHVybiAwOwogfQpAQCAtMTU3Nyw3ICsxNTg1LDE0IEBACiAJCWVudHJ5ID0gbWtfcHRlKG5ld19wYWdlLCB2bWEtPnZtX3BhZ2VfcHJvdCk7CiAJCWVudHJ5ID0gbWF5YmVfbWt3cml0ZShwdGVfbWtkaXJ0eShlbnRyeSksIHZtYSk7CiAJCWxhenlfbW11X3Byb3RfdXBkYXRlKGVudHJ5KTsKLQkJcHRlcF9lc3RhYmxpc2godm1hLCBhZGRyZXNzLCBwYWdlX3RhYmxlLCBlbnRyeSk7CisJCS8qCisJCSAqIENsZWFyIHRoZSBwdGUgZW50cnkgYW5kIGZsdXNoIGl0IGZpcnN0LCBiZWZvcmUgdXBkYXRpbmcgdGhlCisJCSAqIHB0ZSB3aXRoIHRoZSBuZXcgZW50cnkuIFRoaXMgd2lsbCBhdm9pZCBhIHJhY2UgY29uZGl0aW9uCisJCSAqIHNlZW4gaW4gdGhlIHByZXNlbmNlIG9mIG9uZSB0aHJlYWQgZG9pbmcgU01DIGFuZCBhbm90aGVyCisJCSAqIHRocmVhZCBkb2luZyBDT1cuCisJCSAqLworCQlwdGVwX2NsZWFyX2ZsdXNoKHZtYSwgYWRkcmVzcywgcGFnZV90YWJsZSk7CisJCXNldF9wdGVfYXQobW0sIGFkZHJlc3MsIHBhZ2VfdGFibGUsIGVudHJ5KTsKIAkJdXBkYXRlX21tdV9jYWNoZSh2bWEsIGFkZHJlc3MsIGVudHJ5KTsKIAkJbHJ1X2NhY2hlX2FkZF9hY3RpdmUobmV3X3BhZ2UpOwogCQlwYWdlX2FkZF9uZXdfYW5vbl9ybWFwKG5ld19wYWdlLCB2bWEsIGFkZHJlc3MpOwpAQCAtMjI1Niw2ICsyMjcxLDU0IEBACiB9CiAKIC8qCisgKiBkb19ub19wZm4oKSB0cmllcyB0byBjcmVhdGUgYSBuZXcgcGFnZSBtYXBwaW5nIGZvciBhIHBhZ2Ugd2l0aG91dAorICogYSBzdHJ1Y3RfcGFnZSBiYWNraW5nIGl0CisgKgorICogQXMgdGhpcyBpcyBjYWxsZWQgb25seSBmb3IgcGFnZXMgdGhhdCBkbyBub3QgY3VycmVudGx5IGV4aXN0LCB3ZQorICogZG8gbm90IG5lZWQgdG8gZmx1c2ggb2xkIHZpcnR1YWwgY2FjaGVzIG9yIHRoZSBUTEIuCisgKgorICogV2UgZW50ZXIgd2l0aCBub24tZXhjbHVzaXZlIG1tYXBfc2VtICh0byBleGNsdWRlIHZtYSBjaGFuZ2VzLAorICogYnV0IGFsbG93IGNvbmN1cnJlbnQgZmF1bHRzKSwgYW5kIHB0ZSBtYXBwZWQgYnV0IG5vdCB5ZXQgbG9ja2VkLgorICogV2UgcmV0dXJuIHdpdGggbW1hcF9zZW0gc3RpbGwgaGVsZCwgYnV0IHB0ZSB1bm1hcHBlZCBhbmQgdW5sb2NrZWQuCisgKgorICogSXQgaXMgZXhwZWN0ZWQgdGhhdCB0aGUgLT5ub3BmbiBoYW5kbGVyIGFsd2F5cyByZXR1cm5zIHRoZSBzYW1lIHBmbgorICogZm9yIGEgZ2l2ZW4gdmlydHVhbCBtYXBwaW5nLgorICoKKyAqIE1hcmsgdGhpcyBgbm9pbmxpbmUnIHRvIHByZXZlbnQgaXQgZnJvbSBibG9hdGluZyB0aGUgbWFpbiBwYWdlZmF1bHQgY29kZS4KKyAqLworc3RhdGljIG5vaW5saW5lIGludCBkb19ub19wZm4oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgcHRlX3QgKnBhZ2VfdGFibGUsIHBtZF90ICpwbWQsCisJCSAgICAgaW50IHdyaXRlX2FjY2VzcykKK3sKKwlzcGlubG9ja190ICpwdGw7CisJcHRlX3QgZW50cnk7CisJdW5zaWduZWQgbG9uZyBwZm47CisJaW50IHJldCA9IFZNX0ZBVUxUX01JTk9SOworCisJcHRlX3VubWFwKHBhZ2VfdGFibGUpOworCUJVR19PTighKHZtYS0+dm1fZmxhZ3MgJiBWTV9QRk5NQVApKTsKKwlCVUdfT04oaXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykpOworCisJcGZuID0gdm1hLT52bV9vcHMtPm5vcGZuKHZtYSwgYWRkcmVzcyAmIFBBR0VfTUFTSyk7CisJaWYgKHBmbiA9PSBOT1BGTl9PT00pCisJCXJldHVybiBWTV9GQVVMVF9PT007CisJaWYgKHBmbiA9PSBOT1BGTl9TSUdCVVMpCisJCXJldHVybiBWTV9GQVVMVF9TSUdCVVM7CisKKwlwYWdlX3RhYmxlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyZXNzLCAmcHRsKTsKKworCS8qIE9ubHkgZ28gdGhyb3VnaCBpZiB3ZSBkaWRuJ3QgcmFjZSB3aXRoIGFueWJvZHkgZWxzZS4uLiAqLworCWlmIChwdGVfbm9uZSgqcGFnZV90YWJsZSkpIHsKKwkJZW50cnkgPSBwZm5fcHRlKHBmbiwgdm1hLT52bV9wYWdlX3Byb3QpOworCQlpZiAod3JpdGVfYWNjZXNzKQorCQkJZW50cnkgPSBtYXliZV9ta3dyaXRlKHB0ZV9ta2RpcnR5KGVudHJ5KSwgdm1hKTsKKwkJc2V0X3B0ZV9hdChtbSwgYWRkcmVzcywgcGFnZV90YWJsZSwgZW50cnkpOworCX0KKwlwdGVfdW5tYXBfdW5sb2NrKHBhZ2VfdGFibGUsIHB0bCk7CisJcmV0dXJuIHJldDsKK30KKworLyoKICAqIEZhdWx0IG9mIGEgcHJldmlvdXNseSBleGlzdGluZyBuYW1lZCBtYXBwaW5nLiBSZXBvcHVsYXRlIHRoZSBwdGUKICAqIGZyb20gdGhlIGVuY29kZWQgZmlsZV9wdGUgaWYgcG9zc2libGUuIFRoaXMgZW5hYmxlcyBzd2FwcGFibGUKICAqIG5vbmxpbmVhciB2bWFzLgpAQCAtMjMxNywxMSArMjM4MCwxNyBAQAogCW9sZF9lbnRyeSA9IGVudHJ5ID0gKnB0ZTsKIAlpZiAoIXB0ZV9wcmVzZW50KGVudHJ5KSkgewogCQlpZiAocHRlX25vbmUoZW50cnkpKSB7Ci0JCQlpZiAoIXZtYS0+dm1fb3BzIHx8ICF2bWEtPnZtX29wcy0+bm9wYWdlKQotCQkJCXJldHVybiBkb19hbm9ueW1vdXNfcGFnZShtbSwgdm1hLCBhZGRyZXNzLAotCQkJCQlwdGUsIHBtZCwgd3JpdGVfYWNjZXNzKTsKLQkJCXJldHVybiBkb19ub19wYWdlKG1tLCB2bWEsIGFkZHJlc3MsCi0JCQkJCXB0ZSwgcG1kLCB3cml0ZV9hY2Nlc3MpOworCQkJaWYgKHZtYS0+dm1fb3BzKSB7CisJCQkJaWYgKHZtYS0+dm1fb3BzLT5ub3BhZ2UpCisJCQkJCXJldHVybiBkb19ub19wYWdlKG1tLCB2bWEsIGFkZHJlc3MsCisJCQkJCQkJICBwdGUsIHBtZCwKKwkJCQkJCQkgIHdyaXRlX2FjY2Vzcyk7CisJCQkJaWYgKHVubGlrZWx5KHZtYS0+dm1fb3BzLT5ub3BmbikpCisJCQkJCXJldHVybiBkb19ub19wZm4obW0sIHZtYSwgYWRkcmVzcywgcHRlLAorCQkJCQkJCSBwbWQsIHdyaXRlX2FjY2Vzcyk7CisJCQl9CisJCQlyZXR1cm4gZG9fYW5vbnltb3VzX3BhZ2UobW0sIHZtYSwgYWRkcmVzcywKKwkJCQkJCSBwdGUsIHBtZCwgd3JpdGVfYWNjZXNzKTsKIAkJfQogCQlpZiAocHRlX2ZpbGUoZW50cnkpKQogCQkJcmV0dXJuIGRvX2ZpbGVfcGFnZShtbSwgdm1hLCBhZGRyZXNzLApAQCAtMjU1MCwzICsyNjE5LDU2IEBACiB9CiAKICNlbmRpZgkvKiBfX0hBVkVfQVJDSF9HQVRFX0FSRUEgKi8KKworLyoKKyAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuCisgKiBTb3VyY2UvdGFyZ2V0IGJ1ZmZlciBtdXN0IGJlIGtlcm5lbCBzcGFjZSwKKyAqIERvIG5vdCB3YWxrIHRoZSBwYWdlIHRhYmxlIGRpcmVjdGx5LCB1c2UgZ2V0X3VzZXJfcGFnZXMKKyAqLworaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKQoreworCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXN0cnVjdCBwYWdlICpwYWdlOworCXZvaWQgKm9sZF9idWYgPSBidWY7CisKKwltbSA9IGdldF90YXNrX21tKHRzayk7CisJaWYgKCFtbSkKKwkJcmV0dXJuIDA7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisJLyogaWdub3JlIGVycm9ycywganVzdCBjaGVjayBob3cgbXVjaCB3YXMgc3VjZXNzZnVsbHkgdHJhbnNmZXJlZCAqLworCXdoaWxlIChsZW4pIHsKKwkJaW50IGJ5dGVzLCByZXQsIG9mZnNldDsKKwkJdm9pZCAqbWFkZHI7CisKKwkJcmV0ID0gZ2V0X3VzZXJfcGFnZXModHNrLCBtbSwgYWRkciwgMSwKKwkJCQl3cml0ZSwgMSwgJnBhZ2UsICZ2bWEpOworCQlpZiAocmV0IDw9IDApCisJCQlicmVhazsKKworCQlieXRlcyA9IGxlbjsKKwkJb2Zmc2V0ID0gYWRkciAmIChQQUdFX1NJWkUtMSk7CisJCWlmIChieXRlcyA+IFBBR0VfU0laRS1vZmZzZXQpCisJCQlieXRlcyA9IFBBR0VfU0laRS1vZmZzZXQ7CisKKwkJbWFkZHIgPSBrbWFwKHBhZ2UpOworCQlpZiAod3JpdGUpIHsKKwkJCWNvcHlfdG9fdXNlcl9wYWdlKHZtYSwgcGFnZSwgYWRkciwKKwkJCQkJICBtYWRkciArIG9mZnNldCwgYnVmLCBieXRlcyk7CisJCQlzZXRfcGFnZV9kaXJ0eV9sb2NrKHBhZ2UpOworCQl9IGVsc2UgeworCQkJY29weV9mcm9tX3VzZXJfcGFnZSh2bWEsIHBhZ2UsIGFkZHIsCisJCQkJCSAgICBidWYsIG1hZGRyICsgb2Zmc2V0LCBieXRlcyk7CisJCX0KKwkJa3VubWFwKHBhZ2UpOworCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CisJCWxlbiAtPSBieXRlczsKKwkJYnVmICs9IGJ5dGVzOworCQlhZGRyICs9IGJ5dGVzOworCX0KKwl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOworCW1tcHV0KG1tKTsKKworCXJldHVybiBidWYgLSBvbGRfYnVmOworfQpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5X2hvdHBsdWcuYyBiL21tL21lbW9yeV9ob3RwbHVnLmMKaW5kZXggYzM3MzE5NS4uZmQ2NzhhNiAxMDA2NDQKLS0tIGEvbW0vbWVtb3J5X2hvdHBsdWcuYworKysgYi9tbS9tZW1vcnlfaG90cGx1Zy5jCkBAIC0xMyw2ICsxMyw3IEBACiAjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CisjaW5jbHVkZSA8bGludXgvd3JpdGViYWNrLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgpAQCAtMjEsMTEgKzIyLDQxIEBACiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVzZXQuaD4KIAogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogCi1leHRlcm4gdm9pZCB6b25ldGFibGVfYWRkKHN0cnVjdCB6b25lICp6b25lLCBpbnQgbmlkLCBpbnQgemlkLCB1bnNpZ25lZCBsb25nIHBmbiwKLQkJCSAgdW5zaWduZWQgbG9uZyBzaXplKTsKKy8qIGFkZCB0aGlzIG1lbW9yeSB0byBpb21lbSByZXNvdXJjZSAqLworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqcmVnaXN0ZXJfbWVtb3J5X3Jlc291cmNlKHU2NCBzdGFydCwgdTY0IHNpemUpCit7CisJc3RydWN0IHJlc291cmNlICpyZXM7CisJcmVzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHJlc291cmNlKSwgR0ZQX0tFUk5FTCk7CisJQlVHX09OKCFyZXMpOworCisJcmVzLT5uYW1lID0gIlN5c3RlbSBSQU0iOworCXJlcy0+c3RhcnQgPSBzdGFydDsKKwlyZXMtPmVuZCA9IHN0YXJ0ICsgc2l6ZSAtIDE7CisJcmVzLT5mbGFncyA9IElPUkVTT1VSQ0VfTUVNOworCWlmIChyZXF1ZXN0X3Jlc291cmNlKCZpb21lbV9yZXNvdXJjZSwgcmVzKSA8IDApIHsKKwkJcHJpbnRrKCJTeXN0ZW0gUkFNIHJlc291cmNlICVsbHggLSAlbGx4IGNhbm5vdCBiZSBhZGRlZFxuIiwKKwkJKHVuc2lnbmVkIGxvbmcgbG9uZylyZXMtPnN0YXJ0LCAodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+ZW5kKTsKKwkJa2ZyZWUocmVzKTsKKwkJcmVzID0gTlVMTDsKKwl9CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIHZvaWQgcmVsZWFzZV9tZW1vcnlfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyZXMpCit7CisJaWYgKCFyZXMpCisJCXJldHVybjsKKwlyZWxlYXNlX3Jlc291cmNlKHJlcyk7CisJa2ZyZWUocmVzKTsKKwlyZXR1cm47Cit9CisKKworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19TUEFSU0UKIHN0YXRpYyBpbnQgX19hZGRfem9uZShzdHJ1Y3Qgem9uZSAqem9uZSwgdW5zaWduZWQgbG9uZyBwaHlzX3N0YXJ0X3BmbikKIHsKIAlzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gem9uZS0+em9uZV9wZ2RhdDsKQEAgLTQ1LDggKzc2LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotZXh0ZXJuIGludCBzcGFyc2VfYWRkX29uZV9zZWN0aW9uKHN0cnVjdCB6b25lICp6b25lLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKLQkJCQkgIGludCBucl9wYWdlcyk7CiBzdGF0aWMgaW50IF9fYWRkX3NlY3Rpb24oc3RydWN0IHpvbmUgKnpvbmUsIHVuc2lnbmVkIGxvbmcgcGh5c19zdGFydF9wZm4pCiB7CiAJaW50IG5yX3BhZ2VzID0gUEFHRVNfUEVSX1NFQ1RJT047CkBAIC0xOTEsOCArMjIwLDEwIEBACiAJaWYgKG5lZWRfem9uZWxpc3RzX3JlYnVpbGQpCiAJCWJ1aWxkX2FsbF96b25lbGlzdHMoKTsKIAl2bV90b3RhbF9wYWdlcyA9IG5yX2ZyZWVfcGFnZWNhY2hlX3BhZ2VzKCk7CisJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAlyZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfU1BBUlNFICovCiAKIHN0YXRpYyBwZ19kYXRhX3QgKmhvdGFkZF9uZXdfcGdkYXQoaW50IG5pZCwgdTY0IHN0YXJ0KQogewpAQCAtMjIyLDM2ICsyNTMsNiBAQAogCXJldHVybjsKIH0KIAotLyogYWRkIHRoaXMgbWVtb3J5IHRvIGlvbWVtIHJlc291cmNlICovCi1zdGF0aWMgc3RydWN0IHJlc291cmNlICpyZWdpc3Rlcl9tZW1vcnlfcmVzb3VyY2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSkKLXsKLQlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKLQlyZXMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgcmVzb3VyY2UpLCBHRlBfS0VSTkVMKTsKLQlCVUdfT04oIXJlcyk7Ci0KLQlyZXMtPm5hbWUgPSAiU3lzdGVtIFJBTSI7Ci0JcmVzLT5zdGFydCA9IHN0YXJ0OwotCXJlcy0+ZW5kID0gc3RhcnQgKyBzaXplIC0gMTsKLQlyZXMtPmZsYWdzID0gSU9SRVNPVVJDRV9NRU07Ci0JaWYgKHJlcXVlc3RfcmVzb3VyY2UoJmlvbWVtX3Jlc291cmNlLCByZXMpIDwgMCkgewotCQlwcmludGsoIlN5c3RlbSBSQU0gcmVzb3VyY2UgJWxseCAtICVsbHggY2Fubm90IGJlIGFkZGVkXG4iLAotCQkodW5zaWduZWQgbG9uZyBsb25nKXJlcy0+c3RhcnQsICh1bnNpZ25lZCBsb25nIGxvbmcpcmVzLT5lbmQpOwotCQlrZnJlZShyZXMpOwotCQlyZXMgPSBOVUxMOwotCX0KLQlyZXR1cm4gcmVzOwotfQotCi1zdGF0aWMgdm9pZCByZWxlYXNlX21lbW9yeV9yZXNvdXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJlcykKLXsKLQlpZiAoIXJlcykKLQkJcmV0dXJuOwotCXJlbGVhc2VfcmVzb3VyY2UocmVzKTsKLQlrZnJlZShyZXMpOwotCXJldHVybjsKLX0KLQotCiAKIGludCBhZGRfbWVtb3J5KGludCBuaWQsIHU2NCBzdGFydCwgdTY0IHNpemUpCiB7CkBAIC0yODMsNiArMjg0LDggQEAKIAkvKiB3ZSBvbmxpbmUgbm9kZSBoZXJlLiB3ZSBjYW4ndCByb2xsIGJhY2sgZnJvbSBoZXJlLiAqLwogCW5vZGVfc2V0X29ubGluZShuaWQpOwogCisJY3B1c2V0X3RyYWNrX29ubGluZV9ub2RlcygpOworCiAJaWYgKG5ld19wZ2RhdCkgewogCQlyZXQgPSByZWdpc3Rlcl9vbmVfbm9kZShuaWQpOwogCQkvKgpkaWZmIC0tZ2l0IGEvbW0vbWVtcG9saWN5LmMgYi9tbS9tZW1wb2xpY3kuYwppbmRleCAzOGY4OTY1Li4yNTc4OGIxIDEwMDY0NAotLS0gYS9tbS9tZW1wb2xpY3kuYworKysgYi9tbS9tZW1wb2xpY3kuYwpAQCAtMTEzNiw3ICsxMTM2LDkgQEAKICAqLwogdW5zaWduZWQgc2xhYl9ub2RlKHN0cnVjdCBtZW1wb2xpY3kgKnBvbGljeSkKIHsKLQlzd2l0Y2ggKHBvbGljeS0+cG9saWN5KSB7CisJaW50IHBvbCA9IHBvbGljeSA/IHBvbGljeS0+cG9saWN5IDogTVBPTF9ERUZBVUxUOworCisJc3dpdGNoIChwb2wpIHsKIAljYXNlIE1QT0xfSU5URVJMRUFWRToKIAkJcmV0dXJuIGludGVybGVhdmVfbm9kZXMocG9saWN5KTsKIApAQCAtMTMyMiwxMiArMTMyNCwxMSBAQAogCWF0b21pY19zZXQoJm5ldy0+cmVmY250LCAxKTsKIAlpZiAobmV3LT5wb2xpY3kgPT0gTVBPTF9CSU5EKSB7CiAJCWludCBzeiA9IGtzaXplKG9sZC0+di56b25lbGlzdCk7Ci0JCW5ldy0+di56b25lbGlzdCA9IGttYWxsb2Moc3osIFNMQUJfS0VSTkVMKTsKKwkJbmV3LT52LnpvbmVsaXN0ID0ga21lbWR1cChvbGQtPnYuem9uZWxpc3QsIHN6LCBTTEFCX0tFUk5FTCk7CiAJCWlmICghbmV3LT52LnpvbmVsaXN0KSB7CiAJCQlrbWVtX2NhY2hlX2ZyZWUocG9saWN5X2NhY2hlLCBuZXcpOwogCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiAJCX0KLQkJbWVtY3B5KG5ldy0+di56b25lbGlzdCwgb2xkLT52LnpvbmVsaXN0LCBzeik7CiAJfQogCXJldHVybiBuZXc7CiB9CmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmMKaW5kZXggMjBhOGMyNi4uYmEyNDUzZiAxMDA2NDQKLS0tIGEvbW0vbWlncmF0ZS5jCisrKyBiL21tL21pZ3JhdGUuYwpAQCAtNDA5LDYgKzQwOSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKG1pZ3JhdGVfcGFnZSk7CiAKKyNpZmRlZiBDT05GSUdfQkxPQ0sKIC8qCiAgKiBNaWdyYXRpb24gZnVuY3Rpb24gZm9yIHBhZ2VzIHdpdGggYnVmZmVycy4gVGhpcyBmdW5jdGlvbiBjYW4gb25seSBiZSB1c2VkCiAgKiBpZiB0aGUgdW5kZXJseWluZyBmaWxlc3lzdGVtIGd1YXJhbnRlZXMgdGhhdCBubyBvdGhlciByZWZlcmVuY2VzIHRvICJwYWdlIgpAQCAtNDY2LDYgKzQ2Nyw3IEBACiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MKGJ1ZmZlcl9taWdyYXRlX3BhZ2UpOworI2VuZGlmCiAKIC8qCiAgKiBXcml0ZWJhY2sgYSBwYWdlIHRvIGNsZWFuIHRoZSBkaXJ0eSBzdGF0ZQpAQCAtNTI1LDcgKzUyNyw3IEBACiAJICogQnVmZmVycyBtYXkgYmUgbWFuYWdlZCBpbiBhIGZpbGVzeXN0ZW0gc3BlY2lmaWMgd2F5LgogCSAqIFdlIG11c3QgaGF2ZSBubyBidWZmZXJzIG9yIGRyb3AgdGhlbS4KIAkgKi8KLQlpZiAocGFnZV9oYXNfYnVmZmVycyhwYWdlKSAmJgorCWlmIChQYWdlUHJpdmF0ZShwYWdlKSAmJgogCSAgICAhdHJ5X3RvX3JlbGVhc2VfcGFnZShwYWdlLCBHRlBfS0VSTkVMKSkKIAkJcmV0dXJuIC1FQUdBSU47CiAKZGlmZiAtLWdpdCBhL21tL21wcm90ZWN0LmMgYi9tbS9tcHJvdGVjdC5jCmluZGV4IDk1NWY5ZDAuLjNiOGYzYzAgMTAwNjQ0Ci0tLSBhL21tL21wcm90ZWN0LmMKKysrIGIvbW0vbXByb3RlY3QuYwpAQCAtMzQsNiArMzQsNyBAQAogCXNwaW5sb2NrX3QgKnB0bDsKIAogCXB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sobW0sIHBtZCwgYWRkciwgJnB0bCk7CisJYXJjaF9lbnRlcl9sYXp5X21tdV9tb2RlKCk7CiAJZG8gewogCQlvbGRwdGUgPSAqcHRlOwogCQlpZiAocHRlX3ByZXNlbnQob2xkcHRlKSkgewpAQCAtNzAsNiArNzEsNyBAQAogCQl9CiAKIAl9IHdoaWxlIChwdGUrKywgYWRkciArPSBQQUdFX1NJWkUsIGFkZHIgIT0gZW5kKTsKKwlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlwdGVfdW5tYXBfdW5sb2NrKHB0ZSAtIDEsIHB0bCk7CiB9CiAKZGlmZiAtLWdpdCBhL21tL21yZW1hcC5jIGIvbW0vbXJlbWFwLmMKaW5kZXggN2MxNWNmMy4uOWM3NjlmYSAxMDA2NDQKLS0tIGEvbW0vbXJlbWFwLmMKKysrIGIvbW0vbXJlbWFwLmMKQEAgLTk4LDYgKzk4LDcgQEAKIAluZXdfcHRsID0gcHRlX2xvY2twdHIobW0sIG5ld19wbWQpOwogCWlmIChuZXdfcHRsICE9IG9sZF9wdGwpCiAJCXNwaW5fbG9ja19uZXN0ZWQobmV3X3B0bCwgU0lOR0xFX0RFUFRIX05FU1RJTkcpOworCWFyY2hfZW50ZXJfbGF6eV9tbXVfbW9kZSgpOwogCiAJZm9yICg7IG9sZF9hZGRyIDwgb2xkX2VuZDsgb2xkX3B0ZSsrLCBvbGRfYWRkciArPSBQQUdFX1NJWkUsCiAJCQkJICAgbmV3X3B0ZSsrLCBuZXdfYWRkciArPSBQQUdFX1NJWkUpIHsKQEAgLTEwOSw2ICsxMTAsNyBAQAogCQlzZXRfcHRlX2F0KG1tLCBuZXdfYWRkciwgbmV3X3B0ZSwgcHRlKTsKIAl9CiAKKwlhcmNoX2xlYXZlX2xhenlfbW11X21vZGUoKTsKIAlpZiAobmV3X3B0bCAhPSBvbGRfcHRsKQogCQlzcGluX3VubG9jayhuZXdfcHRsKTsKIAlwdGVfdW5tYXBfbmVzdGVkKG5ld19wdGUgLSAxKTsKZGlmZiAtLWdpdCBhL21tL25vbW11LmMgYi9tbS9ub21tdS5jCmluZGV4IGQ5OWRlYTMuLjM2NTAxOTUgMTAwNjQ0Ci0tLSBhL21tL25vbW11LmMKKysrIGIvbW0vbm9tbXUuYwpAQCAtMTIyLDI2ICsxMjIsNTAgQEAKIH0KIAogLyoKLSAqIFRoZSBub21tdSBkb2RneSB2ZXJzaW9uIDotKQorICogZ2V0IGEgbGlzdCBvZiBwYWdlcyBpbiBhbiBhZGRyZXNzIHJhbmdlIGJlbG9uZ2luZyB0byB0aGUgc3BlY2lmaWVkIHByb2Nlc3MKKyAqIGFuZCBpbmRpY2F0ZSB0aGUgVk1BIHRoYXQgY292ZXJzIGVhY2ggcGFnZQorICogLSB0aGlzIGlzIHBvdGVudGlhbGx5IGRvZGd5IGFzIHdlIG1heSBlbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIGNvdW50IG9mIGEKKyAqICAgc2xhYiBwYWdlIG9yIGEgc2Vjb25kYXJ5IHBhZ2UgZnJvbSBhIGNvbXBvdW5kIHBhZ2UKKyAqIC0gZG9uJ3QgcGVybWl0IGFjY2VzcyB0byBWTUFzIHRoYXQgZG9uJ3Qgc3VwcG9ydCBpdCwgc3VjaCBhcyBJL08gbWFwcGluZ3MKICAqLwogaW50IGdldF91c2VyX3BhZ2VzKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKIAl1bnNpZ25lZCBsb25nIHN0YXJ0LCBpbnQgbGVuLCBpbnQgd3JpdGUsIGludCBmb3JjZSwKIAlzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKip2bWFzKQogeworCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CiAJaW50IGk7Ci0Jc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCBkdW1teV92bWE7CisKKwkvKiBjYWxjdWxhdGUgcmVxdWlyZWQgcmVhZCBvciB3cml0ZSBwZXJtaXNzaW9ucy4KKwkgKiAtIGlmICdmb3JjZScgaXMgc2V0LCB3ZSBvbmx5IHJlcXVpcmUgdGhlICJNQVkiIGZsYWdzLgorCSAqLworCXZtX2ZsYWdzICA9IHdyaXRlID8gKFZNX1dSSVRFIHwgVk1fTUFZV1JJVEUpIDogKFZNX1JFQUQgfCBWTV9NQVlSRUFEKTsKKwl2bV9mbGFncyAmPSBmb3JjZSA/IChWTV9NQVlSRUFEIHwgVk1fTUFZV1JJVEUpIDogKFZNX1JFQUQgfCBWTV9XUklURSk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJdm1hID0gZmluZF92bWEobW0sIHN0YXJ0KTsKKwkJaWYgKCF2bWEpCisJCQlnb3RvIGZpbmlzaF9vcl9mYXVsdDsKKworCQkvKiBwcm90ZWN0IHdoYXQgd2UgY2FuLCBpbmNsdWRpbmcgY2hhcmRldnMgKi8KKwkJaWYgKHZtYS0+dm1fZmxhZ3MgJiAoVk1fSU8gfCBWTV9QRk5NQVApIHx8CisJCSAgICAhKHZtX2ZsYWdzICYgdm1hLT52bV9mbGFncykpCisJCQlnb3RvIGZpbmlzaF9vcl9mYXVsdDsKKwogCQlpZiAocGFnZXMpIHsKIAkJCXBhZ2VzW2ldID0gdmlydF90b19wYWdlKHN0YXJ0KTsKIAkJCWlmIChwYWdlc1tpXSkKIAkJCQlwYWdlX2NhY2hlX2dldChwYWdlc1tpXSk7CiAJCX0KIAkJaWYgKHZtYXMpCi0JCQl2bWFzW2ldID0gJmR1bW15X3ZtYTsKKwkJCXZtYXNbaV0gPSB2bWE7CiAJCXN0YXJ0ICs9IFBBR0VfU0laRTsKIAl9Ci0JcmV0dXJuKGkpOworCisJcmV0dXJuIGk7CisKK2ZpbmlzaF9vcl9mYXVsdDoKKwlyZXR1cm4gaSA/IDogLUVGQVVMVDsKIH0KIAogRVhQT1JUX1NZTUJPTChnZXRfdXNlcl9wYWdlcyk7CkBAIC0yODYsNiArMzEwLDc3IEBACiB9CiAjZW5kaWYgLyogREVCVUcgKi8KIAorLyoKKyAqIGFkZCBhIFZNQSBpbnRvIGEgcHJvY2VzcydzIG1tX3N0cnVjdCBpbiB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIGxpc3QKKyAqIC0gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG1tLT5tbWFwX3NlbSBoZWxkIHdyaXRlbG9ja2VkCisgKi8KK3N0YXRpYyB2b2lkIGFkZF92bWFfdG9fbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sKQoreworCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqKnBwdjsKKworCWZvciAocHB2ID0gJmN1cnJlbnQtPm1tLT5jb250ZXh0LnZtbGlzdDsgKnBwdjsgcHB2ID0gJigqcHB2KS0+bmV4dCkKKwkJaWYgKCgqcHB2KS0+dm1hLT52bV9zdGFydCA+IHZtbC0+dm1hLT52bV9zdGFydCkKKwkJCWJyZWFrOworCisJdm1sLT5uZXh0ID0gKnBwdjsKKwkqcHB2ID0gdm1sOworfQorCisvKgorICogbG9vayB1cCB0aGUgZmlyc3QgVk1BIGluIHdoaWNoIGFkZHIgcmVzaWRlcywgTlVMTCBpZiBub25lCisgKiAtIHNob3VsZCBiZSBjYWxsZWQgd2l0aCBtbS0+bW1hcF9zZW0gYXQgbGVhc3QgaGVsZCByZWFkbG9ja2VkCisgKi8KK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QgKmxvb3AsICp2bWw7CisKKwkvKiBzZWFyY2ggdGhlIHZtX3N0YXJ0IG9yZGVyZWQgbGlzdCAqLworCXZtbCA9IE5VTEw7CisJZm9yIChsb29wID0gbW0tPmNvbnRleHQudm1saXN0OyBsb29wOyBsb29wID0gbG9vcC0+bmV4dCkgeworCQlpZiAobG9vcC0+dm1hLT52bV9zdGFydCA+IGFkZHIpCisJCQlicmVhazsKKwkJdm1sID0gbG9vcDsKKwl9CisKKwlpZiAodm1sICYmIHZtbC0+dm1hLT52bV9lbmQgPiBhZGRyKQorCQlyZXR1cm4gdm1sLT52bWE7CisKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woZmluZF92bWEpOworCisvKgorICogZmluZCBhIFZNQQorICogLSB3ZSBkb24ndCBleHRlbmQgc3RhY2sgVk1BcyB1bmRlciBOT01NVSBjb25kaXRpb25zCisgKi8KK3N0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9leHRlbmRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCit7CisJcmV0dXJuIGZpbmRfdm1hKG1tLCBhZGRyKTsKK30KKworLyoKKyAqIGxvb2sgdXAgdGhlIGZpcnN0IFZNQSBleGFjdGx5IHRoYXQgZXhhY3RseSBtYXRjaGVzIGFkZHIKKyAqIC0gc2hvdWxkIGJlIGNhbGxlZCB3aXRoIG1tLT5tbWFwX3NlbSBhdCBsZWFzdCBoZWxkIHJlYWRsb2NrZWQKKyAqLworc3RhdGljIGlubGluZSBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hX2V4YWN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAorCQkJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKKwlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QgKnZtbDsKKworCS8qIHNlYXJjaCB0aGUgdm1fc3RhcnQgb3JkZXJlZCBsaXN0ICovCisJZm9yICh2bWwgPSBtbS0+Y29udGV4dC52bWxpc3Q7IHZtbDsgdm1sID0gdm1sLT5uZXh0KSB7CisJCWlmICh2bWwtPnZtYS0+dm1fc3RhcnQgPT0gYWRkcikKKwkJCXJldHVybiB2bWwtPnZtYTsKKwkJaWYgKHZtbC0+dm1hLT52bV9zdGFydCA+IGFkZHIpCisJCQlicmVhazsKKwl9CisKKwlyZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIGZpbmQgYSBWTUEgaW4gdGhlIGdsb2JhbCB0cmVlCisgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX25vbW11X3ZtYSh1bnNpZ25lZCBsb25nIHN0YXJ0KQogewogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwpAQCAtMzA1LDYgKzQwMCw5IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBhZGQgYSBWTUEgaW4gdGhlIGdsb2JhbCB0cmVlCisgKi8KIHN0YXRpYyB2b2lkIGFkZF9ub21tdV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwdm1hOwpAQCAtMzUxLDYgKzQ0OSw5IEBACiAJcmJfaW5zZXJ0X2NvbG9yKCZ2bWEtPnZtX3JiLCAmbm9tbXVfdm1hX3RyZWUpOwogfQogCisvKgorICogZGVsZXRlIGEgVk1BIGZyb20gdGhlIGdsb2JhbCBsaXN0CisgKi8KIHN0YXRpYyB2b2lkIGRlbGV0ZV9ub21tdV92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CkBAIC04MjgsOCArOTI5LDcgQEAKIAlyZWFsYWxsb2MgKz0ga29ianNpemUodm1sKTsKIAlhc2tlZGFsbG9jICs9IHNpemVvZigqdm1sKTsKIAotCXZtbC0+bmV4dCA9IGN1cnJlbnQtPm1tLT5jb250ZXh0LnZtbGlzdDsKLQljdXJyZW50LT5tbS0+Y29udGV4dC52bWxpc3QgPSB2bWw7CisJYWRkX3ZtYV90b19tbShjdXJyZW50LT5tbSwgdm1sKTsKIAogCXVwX3dyaXRlKCZub21tdV92bWFfc2VtKTsKIApAQCAtODQ4LDcgKzk0OCw4IEBACiAJdXBfd3JpdGUoJm5vbW11X3ZtYV9zZW0pOwogCWtmcmVlKHZtbCk7CiAJaWYgKHZtYSkgewotCQlmcHV0KHZtYS0+dm1fZmlsZSk7CisJCWlmICh2bWEtPnZtX2ZpbGUpCisJCQlmcHV0KHZtYS0+dm1fZmlsZSk7CiAJCWtmcmVlKHZtYSk7CiAJfQogCXJldHVybiByZXQ7CkBAIC05MDgsNiArMTAwOSwxMSBAQAogCX0KIH0KIAorLyoKKyAqIHJlbGVhc2UgYSBtYXBwaW5nCisgKiAtIHVuZGVyIE5PTU1VIGNvbmRpdGlvbnMgdGhlIHBhcmFtZXRlcnMgbXVzdCBtYXRjaCBleGFjdGx5IHRvIHRoZSBtYXBwaW5nIHRvCisgKiAgIGJlIHJlbW92ZWQKKyAqLwogaW50IGRvX211bm1hcChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuKQogewogCXN0cnVjdCB2bV9saXN0X3N0cnVjdCAqdm1sLCAqKnBhcmVudDsKQEAgLTkxNywxMCArMTAyMywxMyBAQAogCXByaW50aygiZG9fbXVubWFwOlxuIik7CiAjZW5kaWYKIAotCWZvciAocGFyZW50ID0gJm1tLT5jb250ZXh0LnZtbGlzdDsgKnBhcmVudDsgcGFyZW50ID0gJigqcGFyZW50KS0+bmV4dCkKKwlmb3IgKHBhcmVudCA9ICZtbS0+Y29udGV4dC52bWxpc3Q7ICpwYXJlbnQ7IHBhcmVudCA9ICYoKnBhcmVudCktPm5leHQpIHsKKwkJaWYgKCgqcGFyZW50KS0+dm1hLT52bV9zdGFydCA+IGFkZHIpCisJCQlicmVhazsKIAkJaWYgKCgqcGFyZW50KS0+dm1hLT52bV9zdGFydCA9PSBhZGRyICYmCiAJCSAgICAoKGxlbiA9PSAwKSB8fCAoKCpwYXJlbnQpLT52bWEtPnZtX2VuZCA9PSBlbmQpKSkKIAkJCWdvdG8gZm91bmQ7CisJfQogCiAJcHJpbnRrKCJtdW5tYXAgb2Ygbm9uLW1tYXBlZCBtZW1vcnkgYnkgcHJvY2VzcyAlZCAoJXMpOiAlcFxuIiwKIAkgICAgICAgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tLCAodm9pZCAqKSBhZGRyKTsKQEAgLTk0Niw3ICsxMDU1LDIwIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIFJlbGVhc2UgYWxsIG1tYXBzLiAqLworYXNtbGlua2FnZSBsb25nIHN5c19tdW5tYXAodW5zaWduZWQgbG9uZyBhZGRyLCBzaXplX3QgbGVuKQoreworCWludCByZXQ7CisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsKKworCWRvd25fd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0ID0gZG9fbXVubWFwKG1tLCBhZGRyLCBsZW4pOworCXVwX3dyaXRlKCZtbS0+bW1hcF9zZW0pOworCXJldHVybiByZXQ7Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbCBtYXBwaW5ncworICovCiB2b2lkIGV4aXRfbW1hcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCiB7CiAJc3RydWN0IHZtX2xpc3Rfc3RydWN0ICp0bXA7CkBAIC05NzMsMzcgKzEwOTUsMjYgQEAKIAl9CiB9CiAKLWFzbWxpbmthZ2UgbG9uZyBzeXNfbXVubWFwKHVuc2lnbmVkIGxvbmcgYWRkciwgc2l6ZV90IGxlbikKLXsKLQlpbnQgcmV0OwotCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC0+bW07Ci0KLQlkb3duX3dyaXRlKCZtbS0+bW1hcF9zZW0pOwotCXJldCA9IGRvX211bm1hcChtbSwgYWRkciwgbGVuKTsKLQl1cF93cml0ZSgmbW0tPm1tYXBfc2VtKTsKLQlyZXR1cm4gcmV0OwotfQotCiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuKQogewogCXJldHVybiAtRU5PTUVNOwogfQogCiAvKgotICogRXhwYW5kIChvciBzaHJpbmspIGFuIGV4aXN0aW5nIG1hcHBpbmcsIHBvdGVudGlhbGx5IG1vdmluZyBpdCBhdCB0aGUKLSAqIHNhbWUgdGltZSAoY29udHJvbGxlZCBieSB0aGUgTVJFTUFQX01BWU1PVkUgZmxhZyBhbmQgYXZhaWxhYmxlIFZNIHNwYWNlKQorICogZXhwYW5kIChvciBzaHJpbmspIGFuIGV4aXN0aW5nIG1hcHBpbmcsIHBvdGVudGlhbGx5IG1vdmluZyBpdCBhdCB0aGUgc2FtZQorICogdGltZSAoY29udHJvbGxlZCBieSB0aGUgTVJFTUFQX01BWU1PVkUgZmxhZyBhbmQgYXZhaWxhYmxlIFZNIHNwYWNlKQogICoKLSAqIE1SRU1BUF9GSVhFRCBvcHRpb24gYWRkZWQgNS1EZWMtMTk5OSBieSBCZW5qYW1pbiBMYUhhaXNlCi0gKiBUaGlzIG9wdGlvbiBpbXBsaWVzIE1SRU1BUF9NQVlNT1ZFLgorICogdW5kZXIgTk9NTVUgY29uZGl0aW9ucywgd2Ugb25seSBwZXJtaXQgY2hhbmdpbmcgYSBtYXBwaW5nJ3Mgc2l6ZSwgYW5kIG9ubHkKKyAqIGFzIGxvbmcgYXMgaXQgc3RheXMgd2l0aGluIHRoZSBob2xlIGFsbG9jYXRlZCBieSB0aGUga21hbGxvYygpIGNhbGwgaW4KKyAqIGRvX21tYXBfcGdvZmYoKSBhbmQgdGhlIGJsb2NrIGlzIG5vdCBzaGFyZWFibGUKICAqCi0gKiBvbiB1Q2xpbnV4LCB3ZSBvbmx5IHBlcm1pdCBjaGFuZ2luZyBhIG1hcHBpbmcncyBzaXplLCBhbmQgb25seSBhcyBsb25nIGFzIGl0IHN0YXlzIHdpdGhpbiB0aGUKLSAqIGhvbGUgYWxsb2NhdGVkIGJ5IHRoZSBrbWFsbG9jKCkgY2FsbCBpbiBkb19tbWFwX3Bnb2ZmKCkgYW5kIHRoZSBibG9jayBpcyBub3Qgc2hhcmVhYmxlCisgKiBNUkVNQVBfRklYRUQgaXMgbm90IHN1cHBvcnRlZCB1bmRlciBOT01NVSBjb25kaXRpb25zCiAgKi8KIHVuc2lnbmVkIGxvbmcgZG9fbXJlbWFwKHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCXVuc2lnbmVkIGxvbmcgb2xkX2xlbiwgdW5zaWduZWQgbG9uZyBuZXdfbGVuLAogCQkJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBuZXdfYWRkcikKIHsKLQlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QgKnZtbCA9IE5VTEw7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKIAkvKiBpbnNhbml0eSBjaGVja3MgZmlyc3QgKi8KIAlpZiAobmV3X2xlbiA9PSAwKQpAQCAtMTAxMiw1OCArMTEyMyw0NiBAQAogCWlmIChmbGFncyAmIE1SRU1BUF9GSVhFRCAmJiBuZXdfYWRkciAhPSBhZGRyKQogCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7CiAKLQlmb3IgKHZtbCA9IGN1cnJlbnQtPm1tLT5jb250ZXh0LnZtbGlzdDsgdm1sOyB2bWwgPSB2bWwtPm5leHQpCi0JCWlmICh2bWwtPnZtYS0+dm1fc3RhcnQgPT0gYWRkcikKLQkJCWdvdG8gZm91bmQ7CisJdm1hID0gZmluZF92bWFfZXhhY3QoY3VycmVudC0+bW0sIGFkZHIpOworCWlmICghdm1hKQorCQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7CiAKLQlyZXR1cm4gKHVuc2lnbmVkIGxvbmcpIC1FSU5WQUw7Ci0KLSBmb3VuZDoKLQlpZiAodm1sLT52bWEtPnZtX2VuZCAhPSB2bWwtPnZtYS0+dm1fc3RhcnQgKyBvbGRfbGVuKQorCWlmICh2bWEtPnZtX2VuZCAhPSB2bWEtPnZtX3N0YXJ0ICsgb2xkX2xlbikKIAkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRUZBVUxUOwogCi0JaWYgKHZtbC0+dm1hLT52bV9mbGFncyAmIFZNX01BWVNIQVJFKQorCWlmICh2bWEtPnZtX2ZsYWdzICYgVk1fTUFZU0hBUkUpCiAJCXJldHVybiAodW5zaWduZWQgbG9uZykgLUVQRVJNOwogCiAJaWYgKG5ld19sZW4gPiBrb2Jqc2l6ZSgodm9pZCAqKSBhZGRyKSkKIAkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSAtRU5PTUVNOwogCiAJLyogYWxsIGNoZWNrcyBjb21wbGV0ZSAtIGRvIGl0ICovCi0Jdm1sLT52bWEtPnZtX2VuZCA9IHZtbC0+dm1hLT52bV9zdGFydCArIG5ld19sZW47CisJdm1hLT52bV9lbmQgPSB2bWEtPnZtX3N0YXJ0ICsgbmV3X2xlbjsKIAogCWFza2VkYWxsb2MgLT0gb2xkX2xlbjsKIAlhc2tlZGFsbG9jICs9IG5ld19sZW47CiAKLQlyZXR1cm4gdm1sLT52bWEtPnZtX3N0YXJ0OworCXJldHVybiB2bWEtPnZtX3N0YXJ0OwogfQogCi0vKgotICogTG9vayB1cCB0aGUgZmlyc3QgVk1BIHdoaWNoIHNhdGlzZmllcyAgYWRkciA8IHZtX2VuZCwgIE5VTEwgaWYgbm9uZQotICovCi1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCithc21saW5rYWdlIHVuc2lnbmVkIGxvbmcgc3lzX21yZW1hcCh1bnNpZ25lZCBsb25nIGFkZHIsCisJdW5zaWduZWQgbG9uZyBvbGRfbGVuLCB1bnNpZ25lZCBsb25nIG5ld19sZW4sCisJdW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBuZXdfYWRkcikKIHsKLQlzdHJ1Y3Qgdm1fbGlzdF9zdHJ1Y3QgKnZtbDsKKwl1bnNpZ25lZCBsb25nIHJldDsKIAotCWZvciAodm1sID0gbW0tPmNvbnRleHQudm1saXN0OyB2bWw7IHZtbCA9IHZtbC0+bmV4dCkKLQkJaWYgKGFkZHIgPj0gdm1sLT52bWEtPnZtX3N0YXJ0ICYmIGFkZHIgPCB2bWwtPnZtYS0+dm1fZW5kKQotCQkJcmV0dXJuIHZtbC0+dm1hOwotCi0JcmV0dXJuIE5VTEw7CisJZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBkb19tcmVtYXAoYWRkciwgb2xkX2xlbiwgbmV3X2xlbiwgZmxhZ3MsIG5ld19hZGRyKTsKKwl1cF93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKKwlyZXR1cm4gcmV0OwogfQogCi1FWFBPUlRfU1lNQk9MKGZpbmRfdm1hKTsKLQogc3RydWN0IHBhZ2UgKmZvbGxvd19wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQl1bnNpZ25lZCBpbnQgZm9sbF9mbGFncykKIHsKIAlyZXR1cm4gTlVMTDsKIH0KIAotc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gTlVMTDsKLX0KLQogaW50IHJlbWFwX3Bmbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBmcm9tLAogCQl1bnNpZ25lZCBsb25nIHRvLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CkBAIC0xMjA2LDMgKzEzMDUsNDQgQEAKIAlCVUcoKTsKIAlyZXR1cm4gTlVMTDsKIH0KKworLyoKKyAqIEFjY2VzcyBhbm90aGVyIHByb2Nlc3MnIGFkZHJlc3Mgc3BhY2UuCisgKiAtIHNvdXJjZS90YXJnZXQgYnVmZmVyIG11c3QgYmUga2VybmVsIHNwYWNlCisgKi8KK2ludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSkKK3sKKwlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKKwlzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKworCWlmIChhZGRyICsgbGVuIDwgYWRkcikKKwkJcmV0dXJuIDA7CisKKwltbSA9IGdldF90YXNrX21tKHRzayk7CisJaWYgKCFtbSkKKwkJcmV0dXJuIDA7CisKKwlkb3duX3JlYWQoJm1tLT5tbWFwX3NlbSk7CisKKwkvKiB0aGUgYWNjZXNzIG11c3Qgc3RhcnQgd2l0aGluIG9uZSBvZiB0aGUgdGFyZ2V0IHByb2Nlc3MncyBtYXBwaW5ncyAqLworCXZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTsKKwlpZiAodm1hKSB7CisJCS8qIGRvbid0IG92ZXJydW4gdGhpcyBtYXBwaW5nICovCisJCWlmIChhZGRyICsgbGVuID49IHZtYS0+dm1fZW5kKQorCQkJbGVuID0gdm1hLT52bV9lbmQgLSBhZGRyOworCisJCS8qIG9ubHkgcmVhZCBvciB3cml0ZSBtYXBwaW5ncyB3aGVyZSBpdCBpcyBwZXJtaXR0ZWQgKi8KKwkJaWYgKHdyaXRlICYmIHZtYS0+dm1fZmxhZ3MgJiBWTV9NQVlXUklURSkKKwkJCWxlbiAtPSBjb3B5X3RvX3VzZXIoKHZvaWQgKikgYWRkciwgYnVmLCBsZW4pOworCQllbHNlIGlmICghd3JpdGUgJiYgdm1hLT52bV9mbGFncyAmIFZNX01BWVJFQUQpCisJCQlsZW4gLT0gY29weV9mcm9tX3VzZXIoYnVmLCAodm9pZCAqKSBhZGRyLCBsZW4pOworCQllbHNlCisJCQlsZW4gPSAwOworCX0gZWxzZSB7CisJCWxlbiA9IDA7CisJfQorCisJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwltbXB1dChtbSk7CisJcmV0dXJuIGxlbjsKK30KZGlmZiAtLWdpdCBhL21tL29vbV9raWxsLmMgYi9tbS9vb21fa2lsbC5jCmluZGV4IGJhZGEzZDAuLjIwZjQxYjAgMTAwNjQ0Ci0tLSBhL21tL29vbV9raWxsLmMKKysrIGIvbW0vb29tX2tpbGwuYwpAQCAtMjA0LDE2ICsyMDQsMzAgQEAKIAlkb19wb3NpeF9jbG9ja19tb25vdG9uaWNfZ2V0dGltZSgmdXB0aW1lKTsKIAlkb19lYWNoX3RocmVhZChnLCBwKSB7CiAJCXVuc2lnbmVkIGxvbmcgcG9pbnRzOwotCQlpbnQgcmVsZWFzaW5nOwogCi0JCS8qIHNraXAga2VybmVsIHRocmVhZHMgKi8KKwkJLyoKKwkJICogc2tpcCBrZXJuZWwgdGhyZWFkcyBhbmQgdGFza3Mgd2hpY2ggaGF2ZSBhbHJlYWR5IHJlbGVhc2VkCisJCSAqIHRoZWlyIG1tLgorCQkgKi8KIAkJaWYgKCFwLT5tbSkKIAkJCWNvbnRpbnVlOwotCQkvKiBza2lwIHRoZSBpbml0IHRhc2sgd2l0aCBwaWQgPT0gMSAqLwotCQlpZiAocC0+cGlkID09IDEpCisJCS8qIHNraXAgdGhlIGluaXQgdGFzayAqLworCQlpZiAoaXNfaW5pdChwKSkKIAkJCWNvbnRpbnVlOwogCiAJCS8qCisJCSAqIFRoaXMgdGFzayBhbHJlYWR5IGhhcyBhY2Nlc3MgdG8gbWVtb3J5IHJlc2VydmVzIGFuZCBpcworCQkgKiBiZWluZyBraWxsZWQuIERvbid0IGFsbG93IGFueSBvdGhlciB0YXNrIGFjY2VzcyB0byB0aGUKKwkJICogbWVtb3J5IHJlc2VydmUuCisJCSAqCisJCSAqIE5vdGU6IHRoaXMgbWF5IGhhdmUgYSBjaGFuY2Ugb2YgZGVhZGxvY2sgaWYgaXQgZ2V0cworCQkgKiBibG9ja2VkIHdhaXRpbmcgZm9yIGFub3RoZXIgdGFzayB3aGljaCBpdHNlbGYgaXMgd2FpdGluZworCQkgKiBmb3IgbWVtb3J5LiBJcyB0aGVyZSBhIGJldHRlciBhbHRlcm5hdGl2ZT8KKwkJICovCisJCWlmICh0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKSkKKwkJCXJldHVybiBFUlJfUFRSKC0xVUwpOworCisJCS8qCiAJCSAqIFRoaXMgaXMgaW4gdGhlIHByb2Nlc3Mgb2YgcmVsZWFzaW5nIG1lbW9yeSBzbyB3YWl0IGZvciBpdAogCQkgKiB0byBmaW5pc2ggYmVmb3JlIGtpbGxpbmcgc29tZSBvdGhlciB0YXNrIGJ5IG1pc3Rha2UuCiAJCSAqCkBAIC0yMjEsMjEgKzIzNSwxNiBAQAogCQkgKiBnbyBhaGVhZCBpZiBpdCBpcyBleGl0aW5nOiB0aGlzIHdpbGwgc2ltcGx5IHNldCBUSUZfTUVNRElFLAogCQkgKiB3aGljaCB3aWxsIGFsbG93IGl0IHRvIGdhaW4gYWNjZXNzIHRvIG1lbW9yeSByZXNlcnZlcyBpbgogCQkgKiB0aGUgcHJvY2VzcyBvZiBleGl0aW5nIGFuZCByZWxlYXNpbmcgaXRzIHJlc291cmNlcy4KLQkJICogT3RoZXJ3aXNlIHdlIGNvdWxkIGdldCBhbiBPT00gZGVhZGxvY2suCisJCSAqIE90aGVyd2lzZSB3ZSBjb3VsZCBnZXQgYW4gZWFzeSBPT00gZGVhZGxvY2suCiAJCSAqLwotCQlyZWxlYXNpbmcgPSB0ZXN0X3Rza190aHJlYWRfZmxhZyhwLCBUSUZfTUVNRElFKSB8fAotCQkJCQkJcC0+ZmxhZ3MgJiBQRl9FWElUSU5HOwotCQlpZiAocmVsZWFzaW5nKSB7Ci0JCQkvKiBQRl9ERUFEIHRhc2tzIGhhdmUgYWxyZWFkeSByZWxlYXNlZCB0aGVpciBtbSAqLwotCQkJaWYgKHAtPmZsYWdzICYgUEZfREVBRCkKLQkJCQljb250aW51ZTsKLQkJCWlmIChwLT5mbGFncyAmIFBGX0VYSVRJTkcgJiYgcCA9PSBjdXJyZW50KSB7Ci0JCQkJY2hvc2VuID0gcDsKLQkJCQkqcHBvaW50cyA9IFVMT05HX01BWDsKLQkJCQlicmVhazsKLQkJCX0KLQkJCXJldHVybiBFUlJfUFRSKC0xVUwpOworCQlpZiAocC0+ZmxhZ3MgJiBQRl9FWElUSU5HKSB7CisJCQlpZiAocCAhPSBjdXJyZW50KQorCQkJCXJldHVybiBFUlJfUFRSKC0xVUwpOworCisJCQljaG9zZW4gPSBwOworCQkJKnBwb2ludHMgPSBVTE9OR19NQVg7CiAJCX0KKwogCQlpZiAocC0+b29ta2lsbGFkaiA9PSBPT01fRElTQUJMRSkKIAkJCWNvbnRpbnVlOwogCkBAIC0yNDUsNiArMjU0LDcgQEAKIAkJCSpwcG9pbnRzID0gcG9pbnRzOwogCQl9CiAJfSB3aGlsZV9lYWNoX3RocmVhZChnLCBwKTsKKwogCXJldHVybiBjaG9zZW47CiB9CiAKQEAgLTI1NSwyMCArMjY1LDE3IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fb29tX2tpbGxfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCiB7Ci0JaWYgKHAtPnBpZCA9PSAxKSB7CisJaWYgKGlzX2luaXQocCkpIHsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidHJpZWQgdG8ga2lsbCBpbml0IVxuIik7CiAJCXJldHVybjsKIAl9CiAKLQl0YXNrX2xvY2socCk7Ci0JaWYgKCFwLT5tbSB8fCBwLT5tbSA9PSAmaW5pdF9tbSkgeworCWlmICghcC0+bW0pIHsKIAkJV0FSTl9PTigxKTsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidHJpZWQgdG8ga2lsbCBhbiBtbS1sZXNzIHRhc2shXG4iKTsKLQkJdGFza191bmxvY2socCk7CiAJCXJldHVybjsKIAl9Ci0JdGFza191bmxvY2socCk7CiAKIAlpZiAobWVzc2FnZSkgewogCQlwcmludGsoS0VSTl9FUlIgIiVzOiBLaWxsZWQgcHJvY2VzcyAlZCAoJXMpLlxuIiwKQEAgLTMwMiw3ICszMDksNyBAQAogCSAqIEhvd2V2ZXIsIHRoaXMgaXMgb2Ygbm8gY29uY2VybiB0byB1cy4KIAkgKi8KIAotCWlmIChtbSA9PSBOVUxMIHx8IG1tID09ICZpbml0X21tKQorCWlmIChtbSA9PSBOVUxMKQogCQlyZXR1cm4gMTsKIAogCV9fb29tX2tpbGxfdGFzayhwLCBtZXNzYWdlKTsKZGlmZiAtLWdpdCBhL21tL3BhZ2Utd3JpdGViYWNrLmMgYi9tbS9wYWdlLXdyaXRlYmFjay5jCmluZGV4IDU1NTc1MjkuLmMwZDRjZTEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2Utd3JpdGViYWNrLmMKKysrIGIvbW0vcGFnZS13cml0ZWJhY2suYwpAQCAtMzAsNiArMzAsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3N5c2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgogI2luY2x1ZGUgPGxpbnV4L3N5c2NhbGxzLmg+CisjaW5jbHVkZSA8bGludXgvYnVmZmVyX2hlYWQuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdldmVjLmg+CiAKIC8qCiAgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgcGFnZXMgdG8gd3JpdGVvdXQgaW4gYSBzaW5nbGUgYmRmbHVzaC9rdXBkYXRlCkBAIC00Niw3ICs0OCw2IEBACiAgKi8KIHN0YXRpYyBsb25nIHJhdGVsaW1pdF9wYWdlcyA9IDMyOwogCi1zdGF0aWMgbG9uZyB0b3RhbF9wYWdlczsJLyogVGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgbWFjaGluZS4gKi8KIHN0YXRpYyBpbnQgZGlydHlfZXhjZWVkZWQgX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CS8qIERpcnR5IG1lbSBtYXkgYmUgb3ZlciBsaW1pdCAqLwogCiAvKgpAQCAtMTI2LDcgKzEyNyw3IEBACiAJaW50IHVubWFwcGVkX3JhdGlvOwogCWxvbmcgYmFja2dyb3VuZDsKIAlsb25nIGRpcnR5OwotCXVuc2lnbmVkIGxvbmcgYXZhaWxhYmxlX21lbW9yeSA9IHRvdGFsX3BhZ2VzOworCXVuc2lnbmVkIGxvbmcgYXZhaWxhYmxlX21lbW9yeSA9IHZtX3RvdGFsX3BhZ2VzOwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOwogCiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTE0MSw3ICsxNDIsNyBAQAogCiAJdW5tYXBwZWRfcmF0aW8gPSAxMDAgLSAoKGdsb2JhbF9wYWdlX3N0YXRlKE5SX0ZJTEVfTUFQUEVEKSArCiAJCQkJZ2xvYmFsX3BhZ2Vfc3RhdGUoTlJfQU5PTl9QQUdFUykpICogMTAwKSAvCi0JCQkJCXRvdGFsX3BhZ2VzOworCQkJCQl2bV90b3RhbF9wYWdlczsKIAogCWRpcnR5X3JhdGlvID0gdm1fZGlydHlfcmF0aW87CiAJaWYgKGRpcnR5X3JhdGlvID4gdW5tYXBwZWRfcmF0aW8gLyAyKQpAQCAtNTAyLDkgKzUwMyw5IEBACiAgKiB3aWxsIHdyaXRlIHNpeCBtZWdhYnl0ZSBjaHVua3MsIG1heC4KICAqLwogCi1zdGF0aWMgdm9pZCBzZXRfcmF0ZWxpbWl0KHZvaWQpCit2b2lkIHdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KHZvaWQpCiB7Ci0JcmF0ZWxpbWl0X3BhZ2VzID0gdG90YWxfcGFnZXMgLyAobnVtX29ubGluZV9jcHVzKCkgKiAzMik7CisJcmF0ZWxpbWl0X3BhZ2VzID0gdm1fdG90YWxfcGFnZXMgLyAobnVtX29ubGluZV9jcHVzKCkgKiAzMik7CiAJaWYgKHJhdGVsaW1pdF9wYWdlcyA8IDE2KQogCQlyYXRlbGltaXRfcGFnZXMgPSAxNjsKIAlpZiAocmF0ZWxpbWl0X3BhZ2VzICogUEFHRV9DQUNIRV9TSVpFID4gNDA5NiAqIDEwMjQpCkBAIC01MTQsNyArNTE1LDcgQEAKIHN0YXRpYyBpbnQgX19jcHVpbml0CiByYXRlbGltaXRfaGFuZGxlcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcgdSwgdm9pZCAqdikKIHsKLQlzZXRfcmF0ZWxpbWl0KCk7CisJd3JpdGViYWNrX3NldF9yYXRlbGltaXQoKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTMzLDkgKzUzNCw3IEBACiAJbG9uZyBidWZmZXJfcGFnZXMgPSBucl9mcmVlX2J1ZmZlcl9wYWdlcygpOwogCWxvbmcgY29ycmVjdGlvbjsKIAotCXRvdGFsX3BhZ2VzID0gbnJfZnJlZV9wYWdlY2FjaGVfcGFnZXMoKTsKLQotCWNvcnJlY3Rpb24gPSAoMTAwICogNCAqIGJ1ZmZlcl9wYWdlcykgLyB0b3RhbF9wYWdlczsKKwljb3JyZWN0aW9uID0gKDEwMCAqIDQgKiBidWZmZXJfcGFnZXMpIC8gdm1fdG90YWxfcGFnZXM7CiAKIAlpZiAoY29ycmVjdGlvbiA8IDEwMCkgewogCQlkaXJ0eV9iYWNrZ3JvdW5kX3JhdGlvICo9IGNvcnJlY3Rpb247CkBAIC01NDksMTAgKzU0OCwxNDMgQEAKIAkJCXZtX2RpcnR5X3JhdGlvID0gMTsKIAl9CiAJbW9kX3RpbWVyKCZ3Yl90aW1lciwgamlmZmllcyArIGRpcnR5X3dyaXRlYmFja19pbnRlcnZhbCk7Ci0Jc2V0X3JhdGVsaW1pdCgpOworCXdyaXRlYmFja19zZXRfcmF0ZWxpbWl0KCk7CiAJcmVnaXN0ZXJfY3B1X25vdGlmaWVyKCZyYXRlbGltaXRfbmIpOwogfQogCisvKioKKyAqIGdlbmVyaWNfd3JpdGVwYWdlcyAtIHdhbGsgdGhlIGxpc3Qgb2YgZGlydHkgcGFnZXMgb2YgdGhlIGdpdmVuCisgKiAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzIHNwYWNlIGFuZCB3cml0ZXBhZ2UoKSBhbGwgb2YgdGhlbS4KKyAqCisgKiBAbWFwcGluZzogYWRkcmVzcyBzcGFjZSBzdHJ1Y3R1cmUgdG8gd3JpdGUKKyAqIEB3YmM6IHN1YnRyYWN0IHRoZSBudW1iZXIgb2Ygd3JpdHRlbiBwYWdlcyBmcm9tICpAd2JjLT5ucl90b193cml0ZQorICoKKyAqIFRoaXMgaXMgYSBsaWJyYXJ5IGZ1bmN0aW9uLCB3aGljaCBpbXBsZW1lbnRzIHRoZSB3cml0ZXBhZ2VzKCkKKyAqIGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uLgorICoKKyAqIElmIGEgcGFnZSBpcyBhbHJlYWR5IHVuZGVyIEkvTywgZ2VuZXJpY193cml0ZXBhZ2VzKCkgc2tpcHMgaXQsIGV2ZW4KKyAqIGlmIGl0J3MgZGlydHkuICBUaGlzIGlzIGRlc2lyYWJsZSBiZWhhdmlvdXIgZm9yIG1lbW9yeS1jbGVhbmluZyB3cml0ZWJhY2ssCisgKiBidXQgaXQgaXMgSU5DT1JSRUNUIGZvciBkYXRhLWludGVncml0eSBzeXN0ZW0gY2FsbHMgc3VjaCBhcyBmc3luYygpLiAgZnN5bmMoKQorICogYW5kIG1zeW5jKCkgbmVlZCB0byBndWFyYW50ZWUgdGhhdCBhbGwgdGhlIGRhdGEgd2hpY2ggd2FzIGRpcnR5IGF0IHRoZSB0aW1lCisgKiB0aGUgY2FsbCB3YXMgbWFkZSBnZXQgbmV3IEkvTyBzdGFydGVkIGFnYWluc3QgdGhlbS4gIElmIHdiYy0+c3luY19tb2RlIGlzCisgKiBXQl9TWU5DX0FMTCB0aGVuIHdlIHdlcmUgY2FsbGVkIGZvciBkYXRhIGludGVncml0eSBhbmQgd2UgbXVzdCB3YWl0IGZvcgorICogZXhpc3RpbmcgSU8gdG8gY29tcGxldGUuCisgKgorICogRGVyaXZlZCBmcm9tIG1wYWdlX3dyaXRlcGFnZXMoKSAtIGlmIHlvdSBmaXggdGhpcyB5b3Ugc2hvdWxkIGNoZWNrIHRoYXQKKyAqIGFsc28hCisgKi8KK2ludCBnZW5lcmljX3dyaXRlcGFnZXMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCisJCSAgICAgICBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKK3sKKwlzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqYmRpID0gbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgZG9uZSA9IDA7CisJaW50ICgqd3JpdGVwYWdlKShzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpOworCXN0cnVjdCBwYWdldmVjIHB2ZWM7CisJaW50IG5yX3BhZ2VzOworCXBnb2ZmX3QgaW5kZXg7CisJcGdvZmZfdCBlbmQ7CQkvKiBJbmNsdXNpdmUgKi8KKwlpbnQgc2Nhbm5lZCA9IDA7CisJaW50IHJhbmdlX3dob2xlID0gMDsKKworCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgeworCQl3YmMtPmVuY291bnRlcmVkX2Nvbmdlc3Rpb24gPSAxOworCQlyZXR1cm4gMDsKKwl9CisKKwl3cml0ZXBhZ2UgPSBtYXBwaW5nLT5hX29wcy0+d3JpdGVwYWdlOworCisJLyogZGVhbCB3aXRoIGNoYXJkZXZzIGFuZCBvdGhlciBzcGVjaWFsIGZpbGUgKi8KKwlpZiAoIXdyaXRlcGFnZSkKKwkJcmV0dXJuIDA7CisKKwlwYWdldmVjX2luaXQoJnB2ZWMsIDApOworCWlmICh3YmMtPnJhbmdlX2N5Y2xpYykgeworCQlpbmRleCA9IG1hcHBpbmctPndyaXRlYmFja19pbmRleDsgLyogU3RhcnQgZnJvbSBwcmV2IG9mZnNldCAqLworCQllbmQgPSAtMTsKKwl9IGVsc2UgeworCQlpbmRleCA9IHdiYy0+cmFuZ2Vfc3RhcnQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJZW5kID0gd2JjLT5yYW5nZV9lbmQgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwkJaWYgKHdiYy0+cmFuZ2Vfc3RhcnQgPT0gMCAmJiB3YmMtPnJhbmdlX2VuZCA9PSBMTE9OR19NQVgpCisJCQlyYW5nZV93aG9sZSA9IDE7CisJCXNjYW5uZWQgPSAxOworCX0KK3JldHJ5OgorCXdoaWxlICghZG9uZSAmJiAoaW5kZXggPD0gZW5kKSAmJgorCSAgICAgICAobnJfcGFnZXMgPSBwYWdldmVjX2xvb2t1cF90YWcoJnB2ZWMsIG1hcHBpbmcsICZpbmRleCwKKwkJCQkJICAgICAgUEFHRUNBQ0hFX1RBR19ESVJUWSwKKwkJCQkJICAgICAgbWluKGVuZCAtIGluZGV4LCAocGdvZmZfdClQQUdFVkVDX1NJWkUtMSkgKyAxKSkpIHsKKwkJdW5zaWduZWQgaTsKKworCQlzY2FubmVkID0gMTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspIHsKKwkJCXN0cnVjdCBwYWdlICpwYWdlID0gcHZlYy5wYWdlc1tpXTsKKworCQkJLyoKKwkJCSAqIEF0IHRoaXMgcG9pbnQgd2UgaG9sZCBuZWl0aGVyIG1hcHBpbmctPnRyZWVfbG9jayBub3IKKwkJCSAqIGxvY2sgb24gdGhlIHBhZ2UgaXRzZWxmOiB0aGUgcGFnZSBtYXkgYmUgdHJ1bmNhdGVkIG9yCisJCQkgKiBpbnZhbGlkYXRlZCAoY2hhbmdpbmcgcGFnZS0+bWFwcGluZyB0byBOVUxMKSwgb3IgZXZlbgorCQkJICogc3dpenpsZWQgYmFjayBmcm9tIHN3YXBwZXJfc3BhY2UgdG8gdG1wZnMgZmlsZQorCQkJICogbWFwcGluZworCQkJICovCisJCQlsb2NrX3BhZ2UocGFnZSk7CisKKwkJCWlmICh1bmxpa2VseShwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpKSB7CisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmICghd2JjLT5yYW5nZV9jeWNsaWMgJiYgcGFnZS0+aW5kZXggPiBlbmQpIHsKKwkJCQlkb25lID0gMTsKKwkJCQl1bmxvY2tfcGFnZShwYWdlKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJaWYgKHdiYy0+c3luY19tb2RlICE9IFdCX1NZTkNfTk9ORSkKKwkJCQl3YWl0X29uX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOworCisJCQlpZiAoUGFnZVdyaXRlYmFjayhwYWdlKSB8fAorCQkJICAgICFjbGVhcl9wYWdlX2RpcnR5X2Zvcl9pbyhwYWdlKSkgeworCQkJCXVubG9ja19wYWdlKHBhZ2UpOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQlyZXQgPSAoKndyaXRlcGFnZSkocGFnZSwgd2JjKTsKKwkJCWlmIChyZXQpIHsKKwkJCQlpZiAocmV0ID09IC1FTk9TUEMpCisJCQkJCXNldF9iaXQoQVNfRU5PU1BDLCAmbWFwcGluZy0+ZmxhZ3MpOworCQkJCWVsc2UKKwkJCQkJc2V0X2JpdChBU19FSU8sICZtYXBwaW5nLT5mbGFncyk7CisJCQl9CisKKwkJCWlmICh1bmxpa2VseShyZXQgPT0gQU9QX1dSSVRFUEFHRV9BQ1RJVkFURSkpCisJCQkJdW5sb2NrX3BhZ2UocGFnZSk7CisJCQlpZiAocmV0IHx8ICgtLSh3YmMtPm5yX3RvX3dyaXRlKSA8PSAwKSkKKwkJCQlkb25lID0gMTsKKwkJCWlmICh3YmMtPm5vbmJsb2NraW5nICYmIGJkaV93cml0ZV9jb25nZXN0ZWQoYmRpKSkgeworCQkJCXdiYy0+ZW5jb3VudGVyZWRfY29uZ2VzdGlvbiA9IDE7CisJCQkJZG9uZSA9IDE7CisJCQl9CisJCX0KKwkJcGFnZXZlY19yZWxlYXNlKCZwdmVjKTsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorCWlmICghc2Nhbm5lZCAmJiAhZG9uZSkgeworCQkvKgorCQkgKiBXZSBoaXQgdGhlIGxhc3QgcGFnZSBhbmQgdGhlcmUgaXMgbW9yZSB3b3JrIHRvIGJlIGRvbmU6IHdyYXAKKwkJICogYmFjayB0byB0aGUgc3RhcnQgb2YgdGhlIGZpbGUKKwkJICovCisJCXNjYW5uZWQgPSAxOworCQlpbmRleCA9IDA7CisJCWdvdG8gcmV0cnk7CisJfQorCWlmICh3YmMtPnJhbmdlX2N5Y2xpYyB8fCAocmFuZ2Vfd2hvbGUgJiYgd2JjLT5ucl90b193cml0ZSA+IDApKQorCQltYXBwaW5nLT53cml0ZWJhY2tfaW5kZXggPSBpbmRleDsKKwlyZXR1cm4gcmV0OworfQorCitFWFBPUlRfU1lNQk9MKGdlbmVyaWNfd3JpdGVwYWdlcyk7CisKIGludCBkb193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYykKIHsKIAlpbnQgcmV0OwpAQCAtNjc1LDkgKzgwNywxMSBAQAogCiAJaWYgKGxpa2VseShtYXBwaW5nKSkgewogCQlpbnQgKCpzcGQpKHN0cnVjdCBwYWdlICopID0gbWFwcGluZy0+YV9vcHMtPnNldF9wYWdlX2RpcnR5OwotCQlpZiAoc3BkKQotCQkJcmV0dXJuICgqc3BkKShwYWdlKTsKLQkJcmV0dXJuIF9fc2V0X3BhZ2VfZGlydHlfYnVmZmVycyhwYWdlKTsKKyNpZmRlZiBDT05GSUdfQkxPQ0sKKwkJaWYgKCFzcGQpCisJCQlzcGQgPSBfX3NldF9wYWdlX2RpcnR5X2J1ZmZlcnM7CisjZW5kaWYKKwkJcmV0dXJuICgqc3BkKShwYWdlKTsKIAl9CiAJaWYgKCFQYWdlRGlydHkocGFnZSkpIHsKIAkJaWYgKCFUZXN0U2V0UGFnZURpcnR5KHBhZ2UpKQpkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDk4MTBmMGEuLjRmNTlkOTAgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAjaW5jbHVkZSA8bGludXgvbWVtcG9saWN5Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RvcF9tYWNoaW5lLmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorI2luY2x1ZGUgPGxpbnV4L3Bmbi5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CkBAIC0xMDIsNiArMTA0LDM4IEBACiAKIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBucl9rZXJuZWxfcGFnZXM7CiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgbnJfYWxsX3BhZ2VzOworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBkbWFfcmVzZXJ2ZTsKKworI2lmZGVmIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUAorICAvKgorICAgKiBNQVhfQUNUSVZFX1JFR0lPTlMgZGV0ZXJtaW5lcyB0aGUgbWF4bWltdW0gbnVtYmVyIG9mIGRpc3RpbmN0CisgICAqIHJhbmdlcyBvZiBtZW1vcnkgKFJBTSkgdGhhdCBtYXkgYmUgcmVnaXN0ZXJlZCB3aXRoIGFkZF9hY3RpdmVfcmFuZ2UoKS4KKyAgICogUmFuZ2VzIHBhc3NlZCB0byBhZGRfYWN0aXZlX3JhbmdlKCkgd2lsbCBiZSBtZXJnZWQgaWYgcG9zc2libGUKKyAgICogc28gdGhlIG51bWJlciBvZiB0aW1lcyBhZGRfYWN0aXZlX3JhbmdlKCkgY2FuIGJlIGNhbGxlZCBpcworICAgKiByZWxhdGVkIHRvIHRoZSBudW1iZXIgb2Ygbm9kZXMgYW5kIHRoZSBudW1iZXIgb2YgaG9sZXMKKyAgICovCisgICNpZmRlZiBDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TCisgICAgLyogQWxsb3cgYW4gYXJjaGl0ZWN0dXJlIHRvIHNldCBNQVhfQUNUSVZFX1JFR0lPTlMgdG8gc2F2ZSBtZW1vcnkgKi8KKyAgICAjZGVmaW5lIE1BWF9BQ1RJVkVfUkVHSU9OUyBDT05GSUdfTUFYX0FDVElWRV9SRUdJT05TCisgICNlbHNlCisgICAgI2lmIE1BWF9OVU1OT0RFUyA+PSAzMgorICAgICAgLyogSWYgdGhlcmUgY2FuIGJlIG1hbnkgbm9kZXMsIGFsbG93IHVwIHRvIDUwIGhvbGVzIHBlciBub2RlICovCisgICAgICAjZGVmaW5lIE1BWF9BQ1RJVkVfUkVHSU9OUyAoTUFYX05VTU5PREVTKjUwKQorICAgICNlbHNlCisgICAgICAvKiBCeSBkZWZhdWx0LCBhbGxvdyB1cCB0byAyNTYgZGlzdGluY3QgcmVnaW9ucyAqLworICAgICAgI2RlZmluZSBNQVhfQUNUSVZFX1JFR0lPTlMgMjU2CisgICAgI2VuZGlmCisgICNlbmRpZgorCisgIHN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gX19pbml0ZGF0YSBlYXJseV9ub2RlX21hcFtNQVhfQUNUSVZFX1JFR0lPTlNdOworICBpbnQgX19pbml0ZGF0YSBucl9ub2RlbWFwX2VudHJpZXM7CisgIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBhcmNoX3pvbmVfbG93ZXN0X3Bvc3NpYmxlX3BmbltNQVhfTlJfWk9ORVNdOworICB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW01BWF9OUl9aT05FU107CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1JFU0VSVkUKKyAgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIG5vZGVfYm91bmRhcnlfc3RhcnRfcGZuW01BWF9OVU1OT0RFU107CisgIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBub2RlX2JvdW5kYXJ5X2VuZF9wZm5bTUFYX05VTU5PREVTXTsKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfUkVTRVJWRSAqLworI2VuZGlmIC8qIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUCAqLwogCiAjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCiBzdGF0aWMgaW50IHBhZ2Vfb3V0c2lkZV96b25lX2JvdW5kYXJpZXMoc3RydWN0IHpvbmUgKnpvbmUsIHN0cnVjdCBwYWdlICpwYWdlKQpAQCAtOTA4LDcgKzk0Miw3IEBACiAJICovCiAJZG8gewogCQl6b25lID0gKno7Ci0JCWlmICh1bmxpa2VseSgoZ2ZwX21hc2sgJiBfX0dGUF9USElTTk9ERSkgJiYKKwkJaWYgKHVubGlrZWx5KE5VTUFfQlVJTEQgJiYgKGdmcF9tYXNrICYgX19HRlBfVEhJU05PREUpICYmCiAJCQl6b25lLT56b25lX3BnZGF0ICE9IHpvbmVsaXN0LT56b25lc1swXS0+em9uZV9wZ2RhdCkpCiAJCQkJYnJlYWs7CiAJCWlmICgoYWxsb2NfZmxhZ3MgJiBBTExPQ19DUFVTRVQpICYmCkBAIC0xMjIyLDE0ICsxMjU2LDEyIEBACiB7CiAJcmV0dXJuIG5yX2ZyZWVfem9uZV9wYWdlcyhnZnBfem9uZShHRlBfSElHSFVTRVIpKTsKIH0KLSNpZmRlZiBDT05GSUdfTlVNQQotc3RhdGljIHZvaWQgc2hvd19ub2RlKHN0cnVjdCB6b25lICp6b25lKQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2hvd19ub2RlKHN0cnVjdCB6b25lICp6b25lKQogewotCXByaW50aygiTm9kZSAlbGQgIiwgem9uZV90b19uaWQoem9uZSkpOworCWlmIChOVU1BX0JVSUxEKQorCQlwcmludGsoIk5vZGUgJWxkICIsIHpvbmVfdG9fbmlkKHpvbmUpKTsKIH0KLSNlbHNlCi0jZGVmaW5lIHNob3dfbm9kZSh6b25lKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKIAogdm9pZCBzaV9tZW1pbmZvKHN0cnVjdCBzeXNpbmZvICp2YWwpCiB7CkBAIC0xMjcxLDM0ICsxMzAzLDMwIEBACiAgKi8KIHZvaWQgc2hvd19mcmVlX2FyZWFzKHZvaWQpCiB7Ci0JaW50IGNwdSwgdGVtcGVyYXR1cmU7CisJaW50IGNwdTsKIAl1bnNpZ25lZCBsb25nIGFjdGl2ZTsKIAl1bnNpZ25lZCBsb25nIGluYWN0aXZlOwogCXVuc2lnbmVkIGxvbmcgZnJlZTsKIAlzdHJ1Y3Qgem9uZSAqem9uZTsKIAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewotCQlzaG93X25vZGUoem9uZSk7Ci0JCXByaW50aygiJXMgcGVyLWNwdToiLCB6b25lLT5uYW1lKTsKLQotCQlpZiAoIXBvcHVsYXRlZF96b25lKHpvbmUpKSB7Ci0JCQlwcmludGsoIiBlbXB0eVxuIik7CisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCiAJCQljb250aW51ZTsKLQkJfSBlbHNlCi0JCQlwcmludGsoIlxuIik7CisKKwkJc2hvd19ub2RlKHpvbmUpOworCQlwcmludGsoIiVzIHBlci1jcHU6XG4iLCB6b25lLT5uYW1lKTsKIAogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgewogCQkJc3RydWN0IHBlcl9jcHVfcGFnZXNldCAqcGFnZXNldDsKIAogCQkJcGFnZXNldCA9IHpvbmVfcGNwKHpvbmUsIGNwdSk7CiAKLQkJCWZvciAodGVtcGVyYXR1cmUgPSAwOyB0ZW1wZXJhdHVyZSA8IDI7IHRlbXBlcmF0dXJlKyspCi0JCQkJcHJpbnRrKCJjcHUgJWQgJXM6IGhpZ2ggJWQsIGJhdGNoICVkIHVzZWQ6JWRcbiIsCi0JCQkJCWNwdSwKLQkJCQkJdGVtcGVyYXR1cmUgPyAiY29sZCIgOiAiaG90IiwKLQkJCQkJcGFnZXNldC0+cGNwW3RlbXBlcmF0dXJlXS5oaWdoLAotCQkJCQlwYWdlc2V0LT5wY3BbdGVtcGVyYXR1cmVdLmJhdGNoLAotCQkJCQlwYWdlc2V0LT5wY3BbdGVtcGVyYXR1cmVdLmNvdW50KTsKKwkJCXByaW50aygiQ1BVICU0ZDogSG90OiBoaTolNWQsIGJ0Y2g6JTRkIHVzZDolNGQgICAiCisJCQkgICAgICAgIkNvbGQ6IGhpOiU1ZCwgYnRjaDolNGQgdXNkOiU0ZFxuIiwKKwkJCSAgICAgICBjcHUsIHBhZ2VzZXQtPnBjcFswXS5oaWdoLAorCQkJICAgICAgIHBhZ2VzZXQtPnBjcFswXS5iYXRjaCwgcGFnZXNldC0+cGNwWzBdLmNvdW50LAorCQkJICAgICAgIHBhZ2VzZXQtPnBjcFsxXS5oaWdoLCBwYWdlc2V0LT5wY3BbMV0uYmF0Y2gsCisJCQkgICAgICAgcGFnZXNldC0+cGNwWzFdLmNvdW50KTsKIAkJfQogCX0KIApAQCAtMTMyMCw2ICsxMzQ4LDkgQEAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKIAkJaW50IGk7CiAKKwkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKKwkJCWNvbnRpbnVlOworCiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlcyIKIAkJCSIgZnJlZTolbHVrQiIKQEAgLTEzNTIsMTIgKzEzODMsMTEgQEAKIAlmb3JfZWFjaF96b25lKHpvbmUpIHsKICAJCXVuc2lnbmVkIGxvbmcgbnJbTUFYX09SREVSXSwgZmxhZ3MsIG9yZGVyLCB0b3RhbCA9IDA7CiAKKwkJaWYgKCFwb3B1bGF0ZWRfem9uZSh6b25lKSkKKwkJCWNvbnRpbnVlOworCiAJCXNob3dfbm9kZSh6b25lKTsKIAkJcHJpbnRrKCIlczogIiwgem9uZS0+bmFtZSk7Ci0JCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpIHsKLQkJCXByaW50aygiZW1wdHlcbiIpOwotCQkJY29udGludWU7Ci0JCX0KIAogCQlzcGluX2xvY2tfaXJxc2F2ZSgmem9uZS0+bG9jaywgZmxhZ3MpOwogCQlmb3IgKG9yZGVyID0gMDsgb3JkZXIgPCBNQVhfT1JERVI7IG9yZGVyKyspIHsKQEAgLTE1NjEsNyArMTU5MSw3IEBACiB2b2lkIF9fbWVtaW5pdCBidWlsZF9hbGxfem9uZWxpc3RzKHZvaWQpCiB7CiAJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORykgewotCQlfX2J1aWxkX2FsbF96b25lbGlzdHMoMCk7CisJCV9fYnVpbGRfYWxsX3pvbmVsaXN0cyhOVUxMKTsKIAkJY3B1c2V0X2luaXRfY3VycmVudF9tZW1zX2FsbG93ZWQoKTsKIAl9IGVsc2UgewogCQkvKiB3ZSBoYXZlIHRvIHN0b3AgYWxsIGNwdXMgdG8gZ3VhcmFubnRlZSB0aGVyZSBpcyBubyB1c2VyCkBAIC0xNjQyLDI1ICsxNjcyLDYgQEAKIAogI2RlZmluZSBMT05HX0FMSUdOKHgpICgoKHgpKyhzaXplb2YobG9uZykpLTEpJn4oKHNpemVvZihsb25nKSktMSkpCiAKLXN0YXRpYyB2b2lkIF9faW5pdCBjYWxjdWxhdGVfem9uZV90b3RhbHBhZ2VzKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsCi0JCXVuc2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgKnpob2xlc19zaXplKQotewotCXVuc2lnbmVkIGxvbmcgcmVhbHRvdGFscGFnZXMsIHRvdGFscGFnZXMgPSAwOwotCWVudW0gem9uZV90eXBlIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspCi0JCXRvdGFscGFnZXMgKz0gem9uZXNfc2l6ZVtpXTsKLQlwZ2RhdC0+bm9kZV9zcGFubmVkX3BhZ2VzID0gdG90YWxwYWdlczsKLQotCXJlYWx0b3RhbHBhZ2VzID0gdG90YWxwYWdlczsKLQlpZiAoemhvbGVzX3NpemUpCi0JCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKLQkJCXJlYWx0b3RhbHBhZ2VzIC09IHpob2xlc19zaXplW2ldOwotCXBnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgPSByZWFsdG90YWxwYWdlczsKLQlwcmludGsoS0VSTl9ERUJVRyAiT24gbm9kZSAlZCB0b3RhbHBhZ2VzOiAlbHVcbiIsIHBnZGF0LT5ub2RlX2lkLCByZWFsdG90YWxwYWdlcyk7Ci19Ci0KLQogLyoKICAqIEluaXRpYWxseSBhbGwgcGFnZXMgYXJlIHJlc2VydmVkIC0gZnJlZSBvbmVzIGFyZSBmcmVlZAogICogdXAgYnkgZnJlZV9hbGxfYm9vdG1lbSgpIG9uY2UgdGhlIGVhcmx5IGJvb3QgcHJvY2VzcyBpcwpAQCAtMTgxOCw2ICsxODI5LDkgQEAKIAogCWZvcl9lYWNoX3pvbmUoem9uZSkgewogCisJCWlmICghcG9wdWxhdGVkX3pvbmUoem9uZSkpCisJCQljb250aW51ZTsKKwogCQl6b25lX3BjcCh6b25lLCBjcHUpID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgcGVyX2NwdV9wYWdlc2V0KSwKIAkJCQkJIEdGUF9LRVJORUwsIGNwdV90b19ub2RlKGNwdSkpOwogCQlpZiAoIXpvbmVfcGNwKHpvbmUsIGNwdSkpCkBAIC0xOTc3LDYgKzE5OTEsMzY2IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVAKKy8qCisgKiBCYXNpYyBpdGVyYXRvciBzdXBwb3J0LiBSZXR1cm4gdGhlIGZpcnN0IHJhbmdlIG9mIFBGTnMgZm9yIGEgbm9kZQorICogTm90ZTogbmlkID09IE1BWF9OVU1OT0RFUyByZXR1cm5zIGZpcnN0IHJlZ2lvbiByZWdhcmRsZXNzIG9mIG5vZGUKKyAqLworc3RhdGljIGludCBfX2luaXQgZmlyc3RfYWN0aXZlX3JlZ2lvbl9pbmRleF9pbl9uaWQoaW50IG5pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlbWFwX2VudHJpZXM7IGkrKykKKwkJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMgfHwgZWFybHlfbm9kZV9tYXBbaV0ubmlkID09IG5pZCkKKwkJCXJldHVybiBpOworCisJcmV0dXJuIC0xOworfQorCisvKgorICogQmFzaWMgaXRlcmF0b3Igc3VwcG9ydC4gUmV0dXJuIHRoZSBuZXh0IGFjdGl2ZSByYW5nZSBvZiBQRk5zIGZvciBhIG5vZGUKKyAqIE5vdGU6IG5pZCA9PSBNQVhfTlVNTk9ERVMgcmV0dXJucyBuZXh0IHJlZ2lvbiByZWdhcmRsZXMgb2Ygbm9kZQorICovCitzdGF0aWMgaW50IF9faW5pdCBuZXh0X2FjdGl2ZV9yZWdpb25faW5kZXhfaW5fbmlkKGludCBpbmRleCwgaW50IG5pZCkKK3sKKwlmb3IgKGluZGV4ID0gaW5kZXggKyAxOyBpbmRleCA8IG5yX25vZGVtYXBfZW50cmllczsgaW5kZXgrKykKKwkJaWYgKG5pZCA9PSBNQVhfTlVNTk9ERVMgfHwgZWFybHlfbm9kZV9tYXBbaW5kZXhdLm5pZCA9PSBuaWQpCisJCQlyZXR1cm4gaW5kZXg7CisKKwlyZXR1cm4gLTE7Cit9CisKKyNpZm5kZWYgQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklECisvKgorICogUmVxdWlyZWQgYnkgU1BBUlNFTUVNLiBHaXZlbiBhIFBGTiwgcmV0dXJuIHdoYXQgbm9kZSB0aGUgUEZOIGlzIG9uLgorICogQXJjaGl0ZWN0dXJlcyBtYXkgaW1wbGVtZW50IHRoZWlyIG93biB2ZXJzaW9uIGJ1dCBpZiBhZGRfYWN0aXZlX3JhbmdlKCkKKyAqIHdhcyB1c2VkIGFuZCB0aGVyZSBhcmUgbm8gc3BlY2lhbCByZXF1aXJlbWVudHMsIHRoaXMgaXMgYSBjb252ZW5pZW50CisgKiBhbHRlcm5hdGl2ZQorICovCitpbnQgX19pbml0IGVhcmx5X3Bmbl90b19uaWQodW5zaWduZWQgbG9uZyBwZm4pCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfbm9kZW1hcF9lbnRyaWVzOyBpKyspIHsKKwkJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4gPSBlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm47CisJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbiA9IGVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm47CisKKwkJaWYgKHN0YXJ0X3BmbiA8PSBwZm4gJiYgcGZuIDwgZW5kX3BmbikKKwkJCXJldHVybiBlYXJseV9ub2RlX21hcFtpXS5uaWQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9FQVJMWV9QRk5fVE9fTklEICovCisKKy8qIEJhc2ljIGl0ZXJhdG9yIHN1cHBvcnQgdG8gd2FsayBlYXJseV9ub2RlX21hcFtdICovCisjZGVmaW5lIGZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKSBcCisJZm9yIChpID0gZmlyc3RfYWN0aXZlX3JlZ2lvbl9pbmRleF9pbl9uaWQobmlkKTsgaSAhPSAtMTsgXAorCQkJCWkgPSBuZXh0X2FjdGl2ZV9yZWdpb25faW5kZXhfaW5fbmlkKGksIG5pZCkpCisKKy8qKgorICogZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMgLSBDYWxsIGZyZWVfYm9vdG1lbV9ub2RlIGZvciBlYWNoIGFjdGl2ZSByYW5nZQorICogQG5pZDogVGhlIG5vZGUgdG8gZnJlZSBtZW1vcnkgb24uIElmIE1BWF9OVU1OT0RFUywgYWxsIG5vZGVzIGFyZSBmcmVlZAorICogQG1heF9sb3dfcGZuOiBUaGUgaGlnaGVzdCBQRk4gdGhhdCB0aWxsIGJlIHBhc3NlZCB0byBmcmVlX2Jvb3RtZW1fbm9kZQorICoKKyAqIElmIGFuIGFyY2hpdGVjdHVyZSBndWFyYW50ZWVzIHRoYXQgYWxsIHJhbmdlcyByZWdpc3RlcmVkIHdpdGgKKyAqIGFkZF9hY3RpdmVfcmFuZ2VzKCkgY29udGFpbiBubyBob2xlcyBhbmQgbWF5IGJlIGZyZWVkLCB0aGlzCisgKiB0aGlzIGZ1bmN0aW9uIG1heSBiZSB1c2VkIGluc3RlYWQgb2YgY2FsbGluZyBmcmVlX2Jvb3RtZW0oKSBtYW51YWxseS4KKyAqLwordm9pZCBfX2luaXQgZnJlZV9ib290bWVtX3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgbWF4X2xvd19wZm4pCit7CisJaW50IGk7CisKKwlmb3JfZWFjaF9hY3RpdmVfcmFuZ2VfaW5kZXhfaW5fbmlkKGksIG5pZCkgeworCQl1bnNpZ25lZCBsb25nIHNpemVfcGFnZXMgPSAwOworCQl1bnNpZ25lZCBsb25nIGVuZF9wZm4gPSBlYXJseV9ub2RlX21hcFtpXS5lbmRfcGZuOworCisJCWlmIChlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4gPj0gbWF4X2xvd19wZm4pCisJCQljb250aW51ZTsKKworCQlpZiAoZW5kX3BmbiA+IG1heF9sb3dfcGZuKQorCQkJZW5kX3BmbiA9IG1heF9sb3dfcGZuOworCisJCXNpemVfcGFnZXMgPSBlbmRfcGZuIC0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuOworCQlmcmVlX2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoZWFybHlfbm9kZV9tYXBbaV0ubmlkKSwKKwkJCQlQRk5fUEhZUyhlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4pLAorCQkJCXNpemVfcGFnZXMgPDwgUEFHRV9TSElGVCk7CisJfQorfQorCisvKioKKyAqIHNwYXJzZV9tZW1vcnlfcHJlc2VudF93aXRoX2FjdGl2ZV9yZWdpb25zIC0gQ2FsbCBtZW1vcnlfcHJlc2VudCBmb3IgZWFjaCBhY3RpdmUgcmFuZ2UKKyAqIEBuaWQ6IFRoZSBub2RlIHRvIGNhbGwgbWVtb3J5X3ByZXNlbnQgZm9yLiBJZiBNQVhfTlVNTk9ERVMsIGFsbCBub2RlcyB3aWxsIGJlIHVzZWQKKyAqCisgKiBJZiBhbiBhcmNoaXRlY3R1cmUgZ3VhcmFudGVlcyB0aGF0IGFsbCByYW5nZXMgcmVnaXN0ZXJlZCB3aXRoCisgKiBhZGRfYWN0aXZlX3JhbmdlcygpIGNvbnRhaW4gbm8gaG9sZXMgYW5kIG1heSBiZSBmcmVlZCwgdGhpcworICogdGhpcyBmdW5jdGlvbiBtYXkgYmUgdXNlZCBpbnN0ZWFkIG9mIGNhbGxpbmcgbWVtb3J5X3ByZXNlbnQoKSBtYW51YWxseS4KKyAqLwordm9pZCBfX2luaXQgc3BhcnNlX21lbW9yeV9wcmVzZW50X3dpdGhfYWN0aXZlX3JlZ2lvbnMoaW50IG5pZCkKK3sKKwlpbnQgaTsKKworCWZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKQorCQltZW1vcnlfcHJlc2VudChlYXJseV9ub2RlX21hcFtpXS5uaWQsCisJCQkJZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuLAorCQkJCWVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm4pOworfQorCisvKioKKyAqIHB1c2hfbm9kZV9ib3VuZGFyaWVzIC0gUHVzaCBub2RlIGJvdW5kYXJpZXMgdG8gYXQgbGVhc3QgdGhlIHJlcXVlc3RlZCBib3VuZGFyeQorICogQG5pZDogVGhlIG5pZCBvZiB0aGUgbm9kZSB0byBwdXNoIHRoZSBib3VuZGFyeSBmb3IKKyAqIEBzdGFydF9wZm46IFRoZSBzdGFydCBwZm4gb2YgdGhlIG5vZGUKKyAqIEBlbmRfcGZuOiBUaGUgZW5kIHBmbiBvZiB0aGUgbm9kZQorICoKKyAqIEluIHJlc2VydmUtYmFzZWQgaG90LWFkZCwgbWVtX21hcCBpcyBhbGxvY2F0ZWQgdGhhdCBpcyB1bnVzZWQgdW50aWwgaG90YWRkCisgKiB0aW1lLiBTcGVjaWZpY2FsbHksIG9uIHg4Nl82NCwgU1JBVCB3aWxsIHJlcG9ydCByYW5nZXMgdGhhdCBjYW4gcG90ZW50aWFsbHkKKyAqIGJlIGhvdHBsdWdnZWQgZXZlbiB0aG91Z2ggbm8gcGh5c2ljYWwgbWVtb3J5IGV4aXN0cy4gVGhpcyBmdW5jdGlvbiBhbGxvd3MKKyAqIGFuIGFyY2ggdG8gcHVzaCBvdXQgdGhlIG5vZGUgYm91bmRhcmllcyBzbyBtZW1fbWFwIGlzIGFsbG9jYXRlZCB0aGF0IGNhbgorICogYmUgdXNlZCBsYXRlci4KKyAqLworI2lmZGVmIENPTkZJR19NRU1PUllfSE9UUExVR19SRVNFUlZFCit2b2lkIF9faW5pdCBwdXNoX25vZGVfYm91bmRhcmllcyh1bnNpZ25lZCBpbnQgbmlkLAorCQl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCXByaW50ayhLRVJOX0RFQlVHICJFbnRlcmluZyBwdXNoX25vZGVfYm91bmRhcmllcygldSwgJWx1LCAlbHUpXG4iLAorCQkJbmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOworCisJLyogSW5pdGlhbGlzZSB0aGUgYm91bmRhcnkgZm9yIHRoaXMgbm9kZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobm9kZV9ib3VuZGFyeV9lbmRfcGZuW25pZF0gPT0gMCkKKwkJbm9kZV9ib3VuZGFyeV9zdGFydF9wZm5bbmlkXSA9IC0xVUw7CisKKwkvKiBVcGRhdGUgdGhlIGJvdW5kYXJpZXMgKi8KKwlpZiAobm9kZV9ib3VuZGFyeV9zdGFydF9wZm5bbmlkXSA+IHN0YXJ0X3BmbikKKwkJbm9kZV9ib3VuZGFyeV9zdGFydF9wZm5bbmlkXSA9IHN0YXJ0X3BmbjsKKwlpZiAobm9kZV9ib3VuZGFyeV9lbmRfcGZuW25pZF0gPCBlbmRfcGZuKQorCQlub2RlX2JvdW5kYXJ5X2VuZF9wZm5bbmlkXSA9IGVuZF9wZm47Cit9CisKKy8qIElmIG5lY2Vzc2FyeSwgcHVzaCB0aGUgbm9kZSBib3VuZGFyeSBvdXQgZm9yIHJlc2VydmUgaG90YWRkICovCitzdGF0aWMgdm9pZCBfX2luaXQgYWNjb3VudF9ub2RlX2JvdW5kYXJ5KHVuc2lnbmVkIGludCBuaWQsCisJCXVuc2lnbmVkIGxvbmcgKnN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyAqZW5kX3BmbikKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiRW50ZXJpbmcgYWNjb3VudF9ub2RlX2JvdW5kYXJ5KCV1LCAlbHUsICVsdSlcbiIsCisJCQluaWQsICpzdGFydF9wZm4sICplbmRfcGZuKTsKKworCS8qIFJldHVybiBpZiBib3VuZGFyeSBpbmZvcm1hdGlvbiBoYXMgbm90IGJlZW4gcHJvdmlkZWQgKi8KKwlpZiAobm9kZV9ib3VuZGFyeV9lbmRfcGZuW25pZF0gPT0gMCkKKwkJcmV0dXJuOworCisJLyogQ2hlY2sgdGhlIGJvdW5kYXJpZXMgYW5kIHVwZGF0ZSBpZiBuZWNlc3NhcnkgKi8KKwlpZiAobm9kZV9ib3VuZGFyeV9zdGFydF9wZm5bbmlkXSA8ICpzdGFydF9wZm4pCisJCSpzdGFydF9wZm4gPSBub2RlX2JvdW5kYXJ5X3N0YXJ0X3BmbltuaWRdOworCWlmIChub2RlX2JvdW5kYXJ5X2VuZF9wZm5bbmlkXSA+ICplbmRfcGZuKQorCQkqZW5kX3BmbiA9IG5vZGVfYm91bmRhcnlfZW5kX3BmbltuaWRdOworfQorI2Vsc2UKK3ZvaWQgX19pbml0IHB1c2hfbm9kZV9ib3VuZGFyaWVzKHVuc2lnbmVkIGludCBuaWQsCisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4pIHt9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBhY2NvdW50X25vZGVfYm91bmRhcnkodW5zaWduZWQgaW50IG5pZCwKKwkJdW5zaWduZWQgbG9uZyAqc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nICplbmRfcGZuKSB7fQorI2VuZGlmCisKKworLyoqCisgKiBnZXRfcGZuX3JhbmdlX2Zvcl9uaWQgLSBSZXR1cm4gdGhlIHN0YXJ0IGFuZCBlbmQgcGFnZSBmcmFtZXMgZm9yIGEgbm9kZQorICogQG5pZDogVGhlIG5pZCB0byByZXR1cm4gdGhlIHJhbmdlIGZvci4gSWYgTUFYX05VTU5PREVTLCB0aGUgbWluIGFuZCBtYXggUEZOIGFyZSByZXR1cm5lZAorICogQHN0YXJ0X3BmbjogUGFzc2VkIGJ5IHJlZmVyZW5jZS4gT24gcmV0dXJuLCBpdCB3aWxsIGhhdmUgdGhlIG5vZGUgc3RhcnRfcGZuCisgKiBAZW5kX3BmbjogUGFzc2VkIGJ5IHJlZmVyZW5jZS4gT24gcmV0dXJuLCBpdCB3aWxsIGhhdmUgdGhlIG5vZGUgZW5kX3BmbgorICoKKyAqIEl0IHJldHVybnMgdGhlIHN0YXJ0IGFuZCBlbmQgcGFnZSBmcmFtZSBvZiBhIG5vZGUgYmFzZWQgb24gaW5mb3JtYXRpb24KKyAqIHByb3ZpZGVkIGJ5IGFuIGFyY2ggY2FsbGluZyBhZGRfYWN0aXZlX3JhbmdlKCkuIElmIGNhbGxlZCBmb3IgYSBub2RlCisgKiB3aXRoIG5vIGF2YWlsYWJsZSBtZW1vcnksIGEgd2FybmluZyBpcyBwcmludGVkIGFuZCB0aGUgc3RhcnQgYW5kIGVuZAorICogUEZOcyB3aWxsIGJlIDAKKyAqLwordm9pZCBfX2luaXQgZ2V0X3Bmbl9yYW5nZV9mb3JfbmlkKHVuc2lnbmVkIGludCBuaWQsCisJCQl1bnNpZ25lZCBsb25nICpzdGFydF9wZm4sIHVuc2lnbmVkIGxvbmcgKmVuZF9wZm4pCit7CisJaW50IGk7CisJKnN0YXJ0X3BmbiA9IC0xVUw7CisJKmVuZF9wZm4gPSAwOworCisJZm9yX2VhY2hfYWN0aXZlX3JhbmdlX2luZGV4X2luX25pZChpLCBuaWQpIHsKKwkJKnN0YXJ0X3BmbiA9IG1pbigqc3RhcnRfcGZuLCBlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4pOworCQkqZW5kX3BmbiA9IG1heCgqZW5kX3BmbiwgZWFybHlfbm9kZV9tYXBbaV0uZW5kX3Bmbik7CisJfQorCisJaWYgKCpzdGFydF9wZm4gPT0gLTFVTCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJOb2RlICV1IGFjdGl2ZSB3aXRoIG5vIG1lbW9yeVxuIiwgbmlkKTsKKwkJKnN0YXJ0X3BmbiA9IDA7CisJfQorCisJLyogUHVzaCB0aGUgbm9kZSBib3VuZGFyaWVzIG91dCBpZiByZXF1ZXN0ZWQgKi8KKwlhY2NvdW50X25vZGVfYm91bmRhcnkobmlkLCBzdGFydF9wZm4sIGVuZF9wZm4pOworfQorCisvKgorICogUmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYSB6b25lIHNwYW5zIGluIGEgbm9kZSwgaW5jbHVkaW5nIGhvbGVzCisgKiBwcmVzZW50X3BhZ2VzID0gem9uZV9zcGFubmVkX3BhZ2VzX2luX25vZGUoKSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUoKQorICovCit1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLAorCQkJCQl1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqaWdub3JlZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfcGZuLCBub2RlX2VuZF9wZm47CisJdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3Bmbiwgem9uZV9lbmRfcGZuOworCisJLyogR2V0IHRoZSBzdGFydCBhbmQgZW5kIG9mIHRoZSBub2RlIGFuZCB6b25lICovCisJZ2V0X3Bmbl9yYW5nZV9mb3JfbmlkKG5pZCwgJm5vZGVfc3RhcnRfcGZuLCAmbm9kZV9lbmRfcGZuKTsKKwl6b25lX3N0YXJ0X3BmbiA9IGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07CisJem9uZV9lbmRfcGZuID0gYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV07CisKKwkvKiBDaGVjayB0aGF0IHRoaXMgbm9kZSBoYXMgcGFnZXMgd2l0aGluIHRoZSB6b25lJ3MgcmVxdWlyZWQgcmFuZ2UgKi8KKwlpZiAoem9uZV9lbmRfcGZuIDwgbm9kZV9zdGFydF9wZm4gfHwgem9uZV9zdGFydF9wZm4gPiBub2RlX2VuZF9wZm4pCisJCXJldHVybiAwOworCisJLyogTW92ZSB0aGUgem9uZSBib3VuZGFyaWVzIGluc2lkZSB0aGUgbm9kZSBpZiBuZWNlc3NhcnkgKi8KKwl6b25lX2VuZF9wZm4gPSBtaW4oem9uZV9lbmRfcGZuLCBub2RlX2VuZF9wZm4pOworCXpvbmVfc3RhcnRfcGZuID0gbWF4KHpvbmVfc3RhcnRfcGZuLCBub2RlX3N0YXJ0X3Bmbik7CisKKwkvKiBSZXR1cm4gdGhlIHNwYW5uZWQgcGFnZXMgKi8KKwlyZXR1cm4gem9uZV9lbmRfcGZuIC0gem9uZV9zdGFydF9wZm47Cit9CisKKy8qCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBob2xlcyBpbiBhIHJhbmdlIG9uIGEgbm9kZS4gSWYgbmlkIGlzIE1BWF9OVU1OT0RFUywKKyAqIHRoZW4gYWxsIGhvbGVzIGluIHRoZSByZXF1ZXN0ZWQgcmFuZ2Ugd2lsbCBiZSBhY2NvdW50ZWQgZm9yCisgKi8KK3Vuc2lnbmVkIGxvbmcgX19pbml0IF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKGludCBuaWQsCisJCQkJdW5zaWduZWQgbG9uZyByYW5nZV9zdGFydF9wZm4sCisJCQkJdW5zaWduZWQgbG9uZyByYW5nZV9lbmRfcGZuKQoreworCWludCBpID0gMDsKKwl1bnNpZ25lZCBsb25nIHByZXZfZW5kX3BmbiA9IDAsIGhvbGVfcGFnZXMgPSAwOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuOworCisJLyogRmluZCB0aGUgZW5kX3BmbiBvZiB0aGUgZmlyc3QgYWN0aXZlIHJhbmdlIG9mIHBmbnMgaW4gdGhlIG5vZGUgKi8KKwlpID0gZmlyc3RfYWN0aXZlX3JlZ2lvbl9pbmRleF9pbl9uaWQobmlkKTsKKwlpZiAoaSA9PSAtMSkKKwkJcmV0dXJuIDA7CisKKwkvKiBBY2NvdW50IGZvciByYW5nZXMgYmVmb3JlIHBoeXNpY2FsIG1lbW9yeSBvbiB0aGlzIG5vZGUgKi8KKwlpZiAoZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuID4gcmFuZ2Vfc3RhcnRfcGZuKQorCQlob2xlX3BhZ2VzID0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuIC0gcmFuZ2Vfc3RhcnRfcGZuOworCisJcHJldl9lbmRfcGZuID0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuOworCisJLyogRmluZCBhbGwgaG9sZXMgZm9yIHRoZSB6b25lIHdpdGhpbiB0aGUgbm9kZSAqLworCWZvciAoOyBpICE9IC0xOyBpID0gbmV4dF9hY3RpdmVfcmVnaW9uX2luZGV4X2luX25pZChpLCBuaWQpKSB7CisKKwkJLyogTm8gbmVlZCB0byBjb250aW51ZSBpZiBwcmV2X2VuZF9wZm4gaXMgb3V0c2lkZSB0aGUgem9uZSAqLworCQlpZiAocHJldl9lbmRfcGZuID49IHJhbmdlX2VuZF9wZm4pCisJCQlicmVhazsKKworCQkvKiBNYWtlIHN1cmUgdGhlIGVuZCBvZiB0aGUgem9uZSBpcyBub3Qgd2l0aGluIHRoZSBob2xlICovCisJCXN0YXJ0X3BmbiA9IG1pbihlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4sIHJhbmdlX2VuZF9wZm4pOworCQlwcmV2X2VuZF9wZm4gPSBtYXgocHJldl9lbmRfcGZuLCByYW5nZV9zdGFydF9wZm4pOworCisJCS8qIFVwZGF0ZSB0aGUgaG9sZSBzaXplIGNvdW5kIGFuZCBtb3ZlIG9uICovCisJCWlmIChzdGFydF9wZm4gPiByYW5nZV9zdGFydF9wZm4pIHsKKwkJCUJVR19PTihwcmV2X2VuZF9wZm4gPiBzdGFydF9wZm4pOworCQkJaG9sZV9wYWdlcyArPSBzdGFydF9wZm4gLSBwcmV2X2VuZF9wZm47CisJCX0KKwkJcHJldl9lbmRfcGZuID0gZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbjsKKwl9CisKKwkvKiBBY2NvdW50IGZvciByYW5nZXMgcGFzdCBwaHlzaWNhbCBtZW1vcnkgb24gdGhpcyBub2RlICovCisJaWYgKHJhbmdlX2VuZF9wZm4gPiBwcmV2X2VuZF9wZm4pCisJCWhvbGVfcGFnZXMgPSByYW5nZV9lbmRfcGZuIC0KKwkJCQltYXgocmFuZ2Vfc3RhcnRfcGZuLCBwcmV2X2VuZF9wZm4pOworCisJcmV0dXJuIGhvbGVfcGFnZXM7Cit9CisKKy8qKgorICogYWJzZW50X3BhZ2VzX2luX3JhbmdlIC0gUmV0dXJuIG51bWJlciBvZiBwYWdlIGZyYW1lcyBpbiBob2xlcyB3aXRoaW4gYSByYW5nZQorICogQHN0YXJ0X3BmbjogVGhlIHN0YXJ0IFBGTiB0byBzdGFydCBzZWFyY2hpbmcgZm9yIGhvbGVzCisgKiBAZW5kX3BmbjogVGhlIGVuZCBQRk4gdG8gc3RvcCBzZWFyY2hpbmcgZm9yIGhvbGVzCisgKgorICogSXQgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHBhZ2VzIGZyYW1lcyBpbiBtZW1vcnkgaG9sZXMgd2l0aGluIGEgcmFuZ2UKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgYWJzZW50X3BhZ2VzX2luX3JhbmdlKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAorCQkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbikKK3sKKwlyZXR1cm4gX19hYnNlbnRfcGFnZXNfaW5fcmFuZ2UoTUFYX05VTU5PREVTLCBzdGFydF9wZm4sIGVuZF9wZm4pOworfQorCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlIGZyYW1lcyBpbiBob2xlcyBpbiBhIHpvbmUgb24gYSBub2RlICovCit1bnNpZ25lZCBsb25nIF9faW5pdCB6b25lX2Fic2VudF9wYWdlc19pbl9ub2RlKGludCBuaWQsCisJCQkJCXVuc2lnbmVkIGxvbmcgem9uZV90eXBlLAorCQkJCQl1bnNpZ25lZCBsb25nICppZ25vcmVkKQoreworCXVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wZm4sIG5vZGVfZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIHpvbmVfc3RhcnRfcGZuLCB6b25lX2VuZF9wZm47CisKKwlnZXRfcGZuX3JhbmdlX2Zvcl9uaWQobmlkLCAmbm9kZV9zdGFydF9wZm4sICZub2RlX2VuZF9wZm4pOworCXpvbmVfc3RhcnRfcGZuID0gbWF4KGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuW3pvbmVfdHlwZV0sCisJCQkJCQkJbm9kZV9zdGFydF9wZm4pOworCXpvbmVfZW5kX3BmbiA9IG1pbihhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5bem9uZV90eXBlXSwKKwkJCQkJCQlub2RlX2VuZF9wZm4pOworCisJcmV0dXJuIF9fYWJzZW50X3BhZ2VzX2luX3JhbmdlKG5pZCwgem9uZV9zdGFydF9wZm4sIHpvbmVfZW5kX3Bmbik7Cit9CisKKy8qIFJldHVybiB0aGUgem9uZSBpbmRleCBhIFBGTiBpcyBpbiAqLworaW50IG1lbW1hcF96b25lX2lkeChzdHJ1Y3QgcGFnZSAqbG1lbV9tYXApCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBwaHlzX2FkZHIgPSB2aXJ0X3RvX3BoeXMobG1lbV9tYXApOworCXVuc2lnbmVkIGxvbmcgcGZuID0gcGh5c19hZGRyID4+IFBBR0VfU0hJRlQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspCisJCWlmIChwZm4gPCBhcmNoX3pvbmVfaGlnaGVzdF9wb3NzaWJsZV9wZm5baV0pCisJCQlicmVhazsKKworCXJldHVybiBpOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLAorCQkJCQl1bnNpZ25lZCBsb25nIHpvbmVfdHlwZSwKKwkJCQkJdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSkKK3sKKwlyZXR1cm4gem9uZXNfc2l6ZVt6b25lX3R5cGVdOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShpbnQgbmlkLAorCQkJCQkJdW5zaWduZWQgbG9uZyB6b25lX3R5cGUsCisJCQkJCQl1bnNpZ25lZCBsb25nICp6aG9sZXNfc2l6ZSkKK3sKKwlpZiAoIXpob2xlc19zaXplKQorCQlyZXR1cm4gMDsKKworCXJldHVybiB6aG9sZXNfc2l6ZVt6b25lX3R5cGVdOworfQorCitzdGF0aWMgaW5saW5lIGludCBtZW1tYXBfem9uZV9pZHgoc3RydWN0IHBhZ2UgKmxtZW1fbWFwKQoreworCXJldHVybiBNQVhfTlJfWk9ORVM7Cit9CisjZW5kaWYKKworc3RhdGljIHZvaWQgX19pbml0IGNhbGN1bGF0ZV9ub2RlX3RvdGFscGFnZXMoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKKwkJdW5zaWduZWQgbG9uZyAqem9uZXNfc2l6ZSwgdW5zaWduZWQgbG9uZyAqemhvbGVzX3NpemUpCit7CisJdW5zaWduZWQgbG9uZyByZWFsdG90YWxwYWdlcywgdG90YWxwYWdlcyA9IDA7CisJZW51bSB6b25lX3R5cGUgaTsKKworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKKwkJdG90YWxwYWdlcyArPSB6b25lX3NwYW5uZWRfcGFnZXNfaW5fbm9kZShwZ2RhdC0+bm9kZV9pZCwgaSwKKwkJCQkJCQkJem9uZXNfc2l6ZSk7CisJcGdkYXQtPm5vZGVfc3Bhbm5lZF9wYWdlcyA9IHRvdGFscGFnZXM7CisKKwlyZWFsdG90YWxwYWdlcyA9IHRvdGFscGFnZXM7CisJZm9yIChpID0gMDsgaSA8IE1BWF9OUl9aT05FUzsgaSsrKQorCQlyZWFsdG90YWxwYWdlcyAtPQorCQkJem9uZV9hYnNlbnRfcGFnZXNfaW5fbm9kZShwZ2RhdC0+bm9kZV9pZCwgaSwKKwkJCQkJCQkJemhvbGVzX3NpemUpOworCXBnZGF0LT5ub2RlX3ByZXNlbnRfcGFnZXMgPSByZWFsdG90YWxwYWdlczsKKwlwcmludGsoS0VSTl9ERUJVRyAiT24gbm9kZSAlZCB0b3RhbHBhZ2VzOiAlbHVcbiIsIHBnZGF0LT5ub2RlX2lkLAorCQkJCQkJCXJlYWx0b3RhbHBhZ2VzKTsKK30KKwogLyoKICAqIFNldCB1cCB0aGUgem9uZSBkYXRhIHN0cnVjdHVyZXM6CiAgKiAgIC0gbWFyayBhbGwgcGFnZXMgcmVzZXJ2ZWQKQEAgLTE5OTgsMTEgKzIzNzIsMzQgQEAKIAkKIAlmb3IgKGogPSAwOyBqIDwgTUFYX05SX1pPTkVTOyBqKyspIHsKIAkJc3RydWN0IHpvbmUgKnpvbmUgPSBwZ2RhdC0+bm9kZV96b25lcyArIGo7Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemU7CisJCXVuc2lnbmVkIGxvbmcgc2l6ZSwgcmVhbHNpemUsIG1lbW1hcF9wYWdlczsKIAotCQlyZWFsc2l6ZSA9IHNpemUgPSB6b25lc19zaXplW2pdOwotCQlpZiAoemhvbGVzX3NpemUpCi0JCQlyZWFsc2l6ZSAtPSB6aG9sZXNfc2l6ZVtqXTsKKwkJc2l6ZSA9IHpvbmVfc3Bhbm5lZF9wYWdlc19pbl9ub2RlKG5pZCwgaiwgem9uZXNfc2l6ZSk7CisJCXJlYWxzaXplID0gc2l6ZSAtIHpvbmVfYWJzZW50X3BhZ2VzX2luX25vZGUobmlkLCBqLAorCQkJCQkJCQl6aG9sZXNfc2l6ZSk7CisKKwkJLyoKKwkJICogQWRqdXN0IHJlYWxzaXplIHNvIHRoYXQgaXQgYWNjb3VudHMgZm9yIGhvdyBtdWNoIG1lbW9yeQorCQkgKiBpcyB1c2VkIGJ5IHRoaXMgem9uZSBmb3IgbWVtbWFwLiBUaGlzIGFmZmVjdHMgdGhlIHdhdGVybWFyaworCQkgKiBhbmQgcGVyLWNwdSBpbml0aWFsaXNhdGlvbnMKKwkJICovCisJCW1lbW1hcF9wYWdlcyA9IChzaXplICogc2l6ZW9mKHN0cnVjdCBwYWdlKSkgPj4gUEFHRV9TSElGVDsKKwkJaWYgKHJlYWxzaXplID49IG1lbW1hcF9wYWdlcykgeworCQkJcmVhbHNpemUgLT0gbWVtbWFwX3BhZ2VzOworCQkJcHJpbnRrKEtFUk5fREVCVUcKKwkJCQkiICAlcyB6b25lOiAlbHUgcGFnZXMgdXNlZCBmb3IgbWVtbWFwXG4iLAorCQkJCXpvbmVfbmFtZXNbal0sIG1lbW1hcF9wYWdlcyk7CisJCX0gZWxzZQorCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSIgICVzIHpvbmU6ICVsdSBwYWdlcyBleGNlZWRzIHJlYWxzaXplICVsdVxuIiwKKwkJCQl6b25lX25hbWVzW2pdLCBtZW1tYXBfcGFnZXMsIHJlYWxzaXplKTsKKworCQkvKiBBY2NvdW50IGZvciByZXNlcnZlZCBETUEgcGFnZXMgKi8KKwkJaWYgKGogPT0gWk9ORV9ETUEgJiYgcmVhbHNpemUgPiBkbWFfcmVzZXJ2ZSkgeworCQkJcmVhbHNpemUgLT0gZG1hX3Jlc2VydmU7CisJCQlwcmludGsoS0VSTl9ERUJVRyAiICBETUEgem9uZTogJWx1IHBhZ2VzIHJlc2VydmVkXG4iLAorCQkJCQkJCQlkbWFfcmVzZXJ2ZSk7CisJCX0KIAogCQlpZiAoIWlzX2hpZ2htZW1faWR4KGopKQogCQkJbnJfa2VybmVsX3BhZ2VzICs9IHJlYWxzaXplOwpAQCAtMjAxMSw2ICsyNDA4LDcgQEAKIAkJem9uZS0+c3Bhbm5lZF9wYWdlcyA9IHNpemU7CiAJCXpvbmUtPnByZXNlbnRfcGFnZXMgPSByZWFsc2l6ZTsKICNpZmRlZiBDT05GSUdfTlVNQQorCQl6b25lLT5ub2RlID0gbmlkOwogCQl6b25lLT5taW5fdW5tYXBwZWRfcGFnZXMgPSAocmVhbHNpemUqc3lzY3RsX21pbl91bm1hcHBlZF9yYXRpbykKIAkJCQkJCS8gMTAwOwogCQl6b25lLT5taW5fc2xhYl9wYWdlcyA9IChyZWFsc2l6ZSAqIHN5c2N0bF9taW5fc2xhYl9yYXRpbykgLyAxMDA7CkBAIC0yMDczLDggKzI0NzEsMTMgQEAKIAkvKgogCSAqIFdpdGggbm8gRElTQ09OVElHLCB0aGUgZ2xvYmFsIG1lbV9tYXAgaXMganVzdCBzZXQgYXMgbm9kZSAwJ3MKIAkgKi8KLQlpZiAocGdkYXQgPT0gTk9ERV9EQVRBKDApKQorCWlmIChwZ2RhdCA9PSBOT0RFX0RBVEEoMCkpIHsKIAkJbWVtX21hcCA9IE5PREVfREFUQSgwKS0+bm9kZV9tZW1fbWFwOworI2lmZGVmIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUAorCQlpZiAocGFnZV90b19wZm4obWVtX21hcCkgIT0gcGdkYXQtPm5vZGVfc3RhcnRfcGZuKQorCQkJbWVtX21hcCAtPSBwZ2RhdC0+bm9kZV9zdGFydF9wZm47CisjZW5kaWYgLyogQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQICovCisJfQogI2VuZGlmCiAjZW5kaWYgLyogQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQICovCiB9CkBAIC0yMDg1LDEzICsyNDg4LDI1NSBAQAogewogCXBnZGF0LT5ub2RlX2lkID0gbmlkOwogCXBnZGF0LT5ub2RlX3N0YXJ0X3BmbiA9IG5vZGVfc3RhcnRfcGZuOwotCWNhbGN1bGF0ZV96b25lX3RvdGFscGFnZXMocGdkYXQsIHpvbmVzX3NpemUsIHpob2xlc19zaXplKTsKKwljYWxjdWxhdGVfbm9kZV90b3RhbHBhZ2VzKHBnZGF0LCB6b25lc19zaXplLCB6aG9sZXNfc2l6ZSk7CiAKIAlhbGxvY19ub2RlX21lbV9tYXAocGdkYXQpOwogCiAJZnJlZV9hcmVhX2luaXRfY29yZShwZ2RhdCwgem9uZXNfc2l6ZSwgemhvbGVzX3NpemUpOwogfQogCisjaWZkZWYgQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQCisvKioKKyAqIGFkZF9hY3RpdmVfcmFuZ2UgLSBSZWdpc3RlciBhIHJhbmdlIG9mIFBGTnMgYmFja2VkIGJ5IHBoeXNpY2FsIG1lbW9yeQorICogQG5pZDogVGhlIG5vZGUgSUQgdGhlIHJhbmdlIHJlc2lkZXMgb24KKyAqIEBzdGFydF9wZm46IFRoZSBzdGFydCBQRk4gb2YgdGhlIGF2YWlsYWJsZSBwaHlzaWNhbCBtZW1vcnkKKyAqIEBlbmRfcGZuOiBUaGUgZW5kIFBGTiBvZiB0aGUgYXZhaWxhYmxlIHBoeXNpY2FsIG1lbW9yeQorICoKKyAqIFRoZXNlIHJhbmdlcyBhcmUgc3RvcmVkIGluIGFuIGVhcmx5X25vZGVfbWFwW10gYW5kIGxhdGVyIHVzZWQgYnkKKyAqIGZyZWVfYXJlYV9pbml0X25vZGVzKCkgdG8gY2FsY3VsYXRlIHpvbmUgc2l6ZXMgYW5kIGhvbGVzLiBJZiB0aGUKKyAqIHJhbmdlIHNwYW5zIGEgbWVtb3J5IGhvbGUsIGl0IGlzIHVwIHRvIHRoZSBhcmNoaXRlY3R1cmUgdG8gZW5zdXJlCisgKiB0aGUgbWVtb3J5IGlzIG5vdCBmcmVlZCBieSB0aGUgYm9vdG1lbSBhbGxvY2F0b3IuIElmIHBvc3NpYmxlCisgKiB0aGUgcmFuZ2UgYmVpbmcgcmVnaXN0ZXJlZCB3aWxsIGJlIG1lcmdlZCB3aXRoIGV4aXN0aW5nIHJhbmdlcy4KKyAqLwordm9pZCBfX2luaXQgYWRkX2FjdGl2ZV9yYW5nZSh1bnNpZ25lZCBpbnQgbmlkLCB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgZW5kX3BmbikKK3sKKwlpbnQgaTsKKworCXByaW50ayhLRVJOX0RFQlVHICJFbnRlcmluZyBhZGRfYWN0aXZlX3JhbmdlKCVkLCAlbHUsICVsdSkgIgorCQkJICAiJWQgZW50cmllcyBvZiAlZCB1c2VkXG4iLAorCQkJICBuaWQsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCSAgbnJfbm9kZW1hcF9lbnRyaWVzLCBNQVhfQUNUSVZFX1JFR0lPTlMpOworCisJLyogTWVyZ2Ugd2l0aCBleGlzdGluZyBhY3RpdmUgcmVnaW9ucyBpZiBwb3NzaWJsZSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlbWFwX2VudHJpZXM7IGkrKykgeworCQlpZiAoZWFybHlfbm9kZV9tYXBbaV0ubmlkICE9IG5pZCkKKwkJCWNvbnRpbnVlOworCisJCS8qIFNraXAgaWYgYW4gZXhpc3RpbmcgcmVnaW9uIGNvdmVycyB0aGlzIG5ldyBvbmUgKi8KKwkJaWYgKHN0YXJ0X3BmbiA+PSBlYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4gJiYKKwkJCQllbmRfcGZuIDw9IGVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm4pCisJCQlyZXR1cm47CisKKwkJLyogTWVyZ2UgZm9yd2FyZCBpZiBzdWl0YWJsZSAqLworCQlpZiAoc3RhcnRfcGZuIDw9IGVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm4gJiYKKwkJCQllbmRfcGZuID4gZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbikgeworCQkJZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbiA9IGVuZF9wZm47CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBNZXJnZSBiYWNrd2FyZCBpZiBzdWl0YWJsZSAqLworCQlpZiAoc3RhcnRfcGZuIDwgZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbiAmJgorCQkJCWVuZF9wZm4gPj0gZWFybHlfbm9kZV9tYXBbaV0uc3RhcnRfcGZuKSB7CisJCQllYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4gPSBzdGFydF9wZm47CisJCQlyZXR1cm47CisJCX0KKwl9CisKKwkvKiBDaGVjayB0aGF0IGVhcmx5X25vZGVfbWFwIGlzIGxhcmdlIGVub3VnaCAqLworCWlmIChpID49IE1BWF9BQ1RJVkVfUkVHSU9OUykgeworCQlwcmludGsoS0VSTl9DUklUICJNb3JlIHRoYW4gJWQgbWVtb3J5IHJlZ2lvbnMsIHRydW5jYXRpbmdcbiIsCisJCQkJCQkJTUFYX0FDVElWRV9SRUdJT05TKTsKKwkJcmV0dXJuOworCX0KKworCWVhcmx5X25vZGVfbWFwW2ldLm5pZCA9IG5pZDsKKwllYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4gPSBzdGFydF9wZm47CisJZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbiA9IGVuZF9wZm47CisJbnJfbm9kZW1hcF9lbnRyaWVzID0gaSArIDE7Cit9CisKKy8qKgorICogc2hyaW5rX2FjdGl2ZV9yYW5nZSAtIFNocmluayBhbiBleGlzdGluZyByZWdpc3RlcmVkIHJhbmdlIG9mIFBGTnMKKyAqIEBuaWQ6IFRoZSBub2RlIGlkIHRoZSByYW5nZSBpcyBvbiB0aGF0IHNob3VsZCBiZSBzaHJ1bmsKKyAqIEBvbGRfZW5kX3BmbjogVGhlIG9sZCBlbmQgUEZOIG9mIHRoZSByYW5nZQorICogQG5ld19lbmRfcGZuOiBUaGUgbmV3IFBGTiBvZiB0aGUgcmFuZ2UKKyAqCisgKiBpMzg2IHdpdGggTlVNQSB1c2UgYWxsb2NfcmVtYXAoKSB0byBzdG9yZSBhIG5vZGVfbWVtX21hcCBvbiBhIGxvY2FsIG5vZGUuCisgKiBUaGUgbWFwIGlzIGtlcHQgYXQgdGhlIGVuZCBwaHlzaWNhbCBwYWdlIHJhbmdlIHRoYXQgaGFzIGFscmVhZHkgYmVlbgorICogcmVnaXN0ZXJlZCB3aXRoIGFkZF9hY3RpdmVfcmFuZ2UoKS4gVGhpcyBmdW5jdGlvbiBhbGxvd3MgYW4gYXJjaCB0byBzaHJpbmsKKyAqIGFuIGV4aXN0aW5nIHJlZ2lzdGVyZWQgcmFuZ2UuCisgKi8KK3ZvaWQgX19pbml0IHNocmlua19hY3RpdmVfcmFuZ2UodW5zaWduZWQgaW50IG5pZCwgdW5zaWduZWQgbG9uZyBvbGRfZW5kX3BmbiwKKwkJCQkJCXVuc2lnbmVkIGxvbmcgbmV3X2VuZF9wZm4pCit7CisJaW50IGk7CisKKwkvKiBGaW5kIHRoZSBvbGQgYWN0aXZlIHJlZ2lvbiBlbmQgYW5kIHNocmluayAqLworCWZvcl9lYWNoX2FjdGl2ZV9yYW5nZV9pbmRleF9pbl9uaWQoaSwgbmlkKQorCQlpZiAoZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbiA9PSBvbGRfZW5kX3BmbikgeworCQkJZWFybHlfbm9kZV9tYXBbaV0uZW5kX3BmbiA9IG5ld19lbmRfcGZuOworCQkJYnJlYWs7CisJCX0KK30KKworLyoqCisgKiByZW1vdmVfYWxsX2FjdGl2ZV9yYW5nZXMgLSBSZW1vdmUgYWxsIGN1cnJlbnRseSByZWdpc3RlcmVkIHJlZ2lvbnMKKyAqIER1cmluZyBkaXNjb3ZlcnksIGl0IG1heSBiZSBmb3VuZCB0aGF0IGEgdGFibGUgbGlrZSBTUkFUIGlzIGludmFsaWQKKyAqIGFuZCBhbiBhbHRlcm5hdGl2ZSBkaXNjb3ZlcnkgbWV0aG9kIG11c3QgYmUgdXNlZC4gVGhpcyBmdW5jdGlvbiByZW1vdmVzCisgKiBhbGwgY3VycmVudGx5IHJlZ2lzdGVyZWQgcmVnaW9ucy4KKyAqLwordm9pZCBfX2luaXQgcmVtb3ZlX2FsbF9hY3RpdmVfcmFuZ2VzKCkKK3sKKwltZW1zZXQoZWFybHlfbm9kZV9tYXAsIDAsIHNpemVvZihlYXJseV9ub2RlX21hcCkpOworCW5yX25vZGVtYXBfZW50cmllcyA9IDA7CisjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHX1JFU0VSVkUKKwltZW1zZXQobm9kZV9ib3VuZGFyeV9zdGFydF9wZm4sIDAsIHNpemVvZihub2RlX2JvdW5kYXJ5X3N0YXJ0X3BmbikpOworCW1lbXNldChub2RlX2JvdW5kYXJ5X2VuZF9wZm4sIDAsIHNpemVvZihub2RlX2JvdW5kYXJ5X2VuZF9wZm4pKTsKKyNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUdfUkVTRVJWRSAqLworfQorCisvKiBDb21wYXJlIHR3byBhY3RpdmUgbm9kZV9hY3RpdmVfcmVnaW9ucyAqLworc3RhdGljIGludCBfX2luaXQgY21wX25vZGVfYWN0aXZlX3JlZ2lvbihjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQoreworCXN0cnVjdCBub2RlX2FjdGl2ZV9yZWdpb24gKmFyYW5nZSA9IChzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uICopYTsKKwlzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uICpicmFuZ2UgPSAoc3RydWN0IG5vZGVfYWN0aXZlX3JlZ2lvbiAqKWI7CisKKwkvKiBEb25lIHRoaXMgd2F5IHRvIGF2b2lkIG92ZXJmbG93cyAqLworCWlmIChhcmFuZ2UtPnN0YXJ0X3BmbiA+IGJyYW5nZS0+c3RhcnRfcGZuKQorCQlyZXR1cm4gMTsKKwlpZiAoYXJhbmdlLT5zdGFydF9wZm4gPCBicmFuZ2UtPnN0YXJ0X3BmbikKKwkJcmV0dXJuIC0xOworCisJcmV0dXJuIDA7Cit9CisKKy8qIHNvcnQgdGhlIG5vZGVfbWFwIGJ5IHN0YXJ0X3BmbiAqLworc3RhdGljIHZvaWQgX19pbml0IHNvcnRfbm9kZV9tYXAodm9pZCkKK3sKKwlzb3J0KGVhcmx5X25vZGVfbWFwLCAoc2l6ZV90KW5yX25vZGVtYXBfZW50cmllcywKKwkJCXNpemVvZihzdHJ1Y3Qgbm9kZV9hY3RpdmVfcmVnaW9uKSwKKwkJCWNtcF9ub2RlX2FjdGl2ZV9yZWdpb24sIE5VTEwpOworfQorCisvKiBGaW5kIHRoZSBsb3dlc3QgcGZuIGZvciBhIG5vZGUuIFRoaXMgZGVwZW5kcyBvbiBhIHNvcnRlZCBlYXJseV9ub2RlX21hcCAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9taW5fcGZuX2Zvcl9ub2RlKHVuc2lnbmVkIGxvbmcgbmlkKQoreworCWludCBpOworCisJLyogQXNzdW1pbmcgYSBzb3J0ZWQgbWFwLCB0aGUgZmlyc3QgcmFuZ2UgZm91bmQgaGFzIHRoZSBzdGFydGluZyBwZm4gKi8KKwlmb3JfZWFjaF9hY3RpdmVfcmFuZ2VfaW5kZXhfaW5fbmlkKGksIG5pZCkKKwkJcmV0dXJuIGVhcmx5X25vZGVfbWFwW2ldLnN0YXJ0X3BmbjsKKworCXByaW50ayhLRVJOX1dBUk5JTkcgIkNvdWxkIG5vdCBmaW5kIHN0YXJ0X3BmbiBmb3Igbm9kZSAlbHVcbiIsIG5pZCk7CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogZmluZF9taW5fcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnMgLSBGaW5kIHRoZSBtaW5pbXVtIFBGTiByZWdpc3RlcmVkCisgKgorICogSXQgcmV0dXJucyB0aGUgbWluaW11bSBQRk4gYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgdmlhCisgKiBhZGRfYWN0aXZlX3JhbmdlKCkKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9taW5fcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnModm9pZCkKK3sKKwlyZXR1cm4gZmluZF9taW5fcGZuX2Zvcl9ub2RlKE1BWF9OVU1OT0RFUyk7Cit9CisKKy8qKgorICogZmluZF9tYXhfcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnMgLSBGaW5kIHRoZSBtYXhpbXVtIFBGTiByZWdpc3RlcmVkCisgKgorICogSXQgcmV0dXJucyB0aGUgbWF4aW11bSBQRk4gYmFzZWQgb24gaW5mb3JtYXRpb24gcHJvdmlkZWQgdmlhCisgKiBhZGRfYWN0aXZlX3JhbmdlKCkKKyAqLwordW5zaWduZWQgbG9uZyBfX2luaXQgZmluZF9tYXhfcGZuX3dpdGhfYWN0aXZlX3JlZ2lvbnModm9pZCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIG1heF9wZm4gPSAwOworCisJZm9yIChpID0gMDsgaSA8IG5yX25vZGVtYXBfZW50cmllczsgaSsrKQorCQltYXhfcGZuID0gbWF4KG1heF9wZm4sIGVhcmx5X25vZGVfbWFwW2ldLmVuZF9wZm4pOworCisJcmV0dXJuIG1heF9wZm47Cit9CisKKy8qKgorICogZnJlZV9hcmVhX2luaXRfbm9kZXMgLSBJbml0aWFsaXNlIGFsbCBwZ19kYXRhX3QgYW5kIHpvbmUgZGF0YQorICogQGFyY2hfbWF4X2RtYV9wZm46IFRoZSBtYXhpbXVtIFBGTiB1c2FibGUgZm9yIFpPTkVfRE1BCisgKiBAYXJjaF9tYXhfZG1hMzJfcGZuOiBUaGUgbWF4aW11bSBQRk4gdXNhYmxlIGZvciBaT05FX0RNQTMyCisgKiBAYXJjaF9tYXhfbG93X3BmbjogVGhlIG1heGltdW0gUEZOIHVzYWJsZSBmb3IgWk9ORV9OT1JNQUwKKyAqIEBhcmNoX21heF9oaWdoX3BmbjogVGhlIG1heGltdW0gUEZOIHVzYWJsZSBmb3IgWk9ORV9ISUdITUVNCisgKgorICogVGhpcyB3aWxsIGNhbGwgZnJlZV9hcmVhX2luaXRfbm9kZSgpIGZvciBlYWNoIGFjdGl2ZSBub2RlIGluIHRoZSBzeXN0ZW0uCisgKiBVc2luZyB0aGUgcGFnZSByYW5nZXMgcHJvdmlkZWQgYnkgYWRkX2FjdGl2ZV9yYW5nZSgpLCB0aGUgc2l6ZSBvZiBlYWNoCisgKiB6b25lIGluIGVhY2ggbm9kZSBhbmQgdGhlaXIgaG9sZXMgaXMgY2FsY3VsYXRlZC4gSWYgdGhlIG1heGltdW0gUEZOCisgKiBiZXR3ZWVuIHR3byBhZGphY2VudCB6b25lcyBtYXRjaCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoZSB6b25lIGlzIGVtcHR5LgorICogRm9yIGV4YW1wbGUsIGlmIGFyY2hfbWF4X2RtYV9wZm4gPT0gYXJjaF9tYXhfZG1hMzJfcGZuLCBpdCBpcyBhc3N1bWVkCisgKiB0aGF0IGFyY2hfbWF4X2RtYTMyX3BmbiBoYXMgbm8gcGFnZXMuIEl0IGlzIGFsc28gYXNzdW1lZCB0aGF0IGEgem9uZQorICogc3RhcnRzIHdoZXJlIHRoZSBwcmV2aW91cyBvbmUgZW5kZWQuIEZvciBleGFtcGxlLCBaT05FX0RNQTMyIHN0YXJ0cworICogYXQgYXJjaF9tYXhfZG1hX3Bmbi4KKyAqLwordm9pZCBfX2luaXQgZnJlZV9hcmVhX2luaXRfbm9kZXModW5zaWduZWQgbG9uZyAqbWF4X3pvbmVfcGZuKQoreworCXVuc2lnbmVkIGxvbmcgbmlkOworCWVudW0gem9uZV90eXBlIGk7CisKKwkvKiBSZWNvcmQgd2hlcmUgdGhlIHpvbmUgYm91bmRhcmllcyBhcmUgKi8KKwltZW1zZXQoYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm4sIDAsCisJCQkJc2l6ZW9mKGFyY2hfem9uZV9sb3dlc3RfcG9zc2libGVfcGZuKSk7CisJbWVtc2V0KGFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbiwgMCwKKwkJCQlzaXplb2YoYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuKSk7CisJYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5bMF0gPSBmaW5kX21pbl9wZm5fd2l0aF9hY3RpdmVfcmVnaW9ucygpOworCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmblswXSA9IG1heF96b25lX3BmblswXTsKKwlmb3IgKGkgPSAxOyBpIDwgTUFYX05SX1pPTkVTOyBpKyspIHsKKwkJYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5baV0gPQorCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ktMV07CisJCWFyY2hfem9uZV9oaWdoZXN0X3Bvc3NpYmxlX3BmbltpXSA9CisJCQltYXgobWF4X3pvbmVfcGZuW2ldLCBhcmNoX3pvbmVfbG93ZXN0X3Bvc3NpYmxlX3BmbltpXSk7CisJfQorCisJLyogUmVnaW9ucyBpbiB0aGUgZWFybHlfbm9kZV9tYXAgY2FuIGJlIGluIGFueSBvcmRlciAqLworCXNvcnRfbm9kZV9tYXAoKTsKKworCS8qIFByaW50IG91dCB0aGUgem9uZSByYW5nZXMgKi8KKwlwcmludGsoIlpvbmUgUEZOIHJhbmdlczpcbiIpOworCWZvciAoaSA9IDA7IGkgPCBNQVhfTlJfWk9ORVM7IGkrKykKKwkJcHJpbnRrKCIgICUtOHMgJThsdSAtPiAlOGx1XG4iLAorCQkJCXpvbmVfbmFtZXNbaV0sCisJCQkJYXJjaF96b25lX2xvd2VzdF9wb3NzaWJsZV9wZm5baV0sCisJCQkJYXJjaF96b25lX2hpZ2hlc3RfcG9zc2libGVfcGZuW2ldKTsKKworCS8qIFByaW50IG91dCB0aGUgZWFybHlfbm9kZV9tYXBbXSAqLworCXByaW50aygiZWFybHlfbm9kZV9tYXBbJWRdIGFjdGl2ZSBQRk4gcmFuZ2VzXG4iLCBucl9ub2RlbWFwX2VudHJpZXMpOworCWZvciAoaSA9IDA7IGkgPCBucl9ub2RlbWFwX2VudHJpZXM7IGkrKykKKwkJcHJpbnRrKCIgICUzZDogJThsdSAtPiAlOGx1XG4iLCBlYXJseV9ub2RlX21hcFtpXS5uaWQsCisJCQkJCQllYXJseV9ub2RlX21hcFtpXS5zdGFydF9wZm4sCisJCQkJCQllYXJseV9ub2RlX21hcFtpXS5lbmRfcGZuKTsKKworCS8qIEluaXRpYWxpc2UgZXZlcnkgbm9kZSAqLworCWZvcl9lYWNoX29ubGluZV9ub2RlKG5pZCkgeworCQlwZ19kYXRhX3QgKnBnZGF0ID0gTk9ERV9EQVRBKG5pZCk7CisJCWZyZWVfYXJlYV9pbml0X25vZGUobmlkLCBwZ2RhdCwgTlVMTCwKKwkJCQlmaW5kX21pbl9wZm5fZm9yX25vZGUobmlkKSwgTlVMTCk7CisJfQorfQorI2VuZGlmIC8qIENPTkZJR19BUkNIX1BPUFVMQVRFU19OT0RFX01BUCAqLworCisvKioKKyAqIHNldF9kbWFfcmVzZXJ2ZSAtIEFjY291bnQgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgcGFnZXMgcmVzZXJ2ZWQgaW4gWk9ORV9ETUEKKyAqIEBuZXdfZG1hX3Jlc2VydmUgLSBUaGUgbnVtYmVyIG9mIHBhZ2VzIHRvIG1hcmsgcmVzZXJ2ZWQKKyAqCisgKiBUaGUgcGVyLWNwdSBiYXRjaHNpemUgYW5kIHpvbmUgd2F0ZXJtYXJrcyBhcmUgZGV0ZXJtaW5lZCBieSBwcmVzZW50X3BhZ2VzLgorICogSW4gdGhlIERNQSB6b25lLCBhIHNpZ25pZmljYW50IHBlcmNlbnRhZ2UgbWF5IGJlIGNvbnN1bWVkIGJ5IGtlcm5lbCBpbWFnZQorICogYW5kIG90aGVyIHVuZnJlZWFibGUgYWxsb2NhdGlvbnMgd2hpY2ggY2FuIHNrZXcgdGhlIHdhdGVybWFya3MgYmFkbHkuIFRoaXMKKyAqIGZ1bmN0aW9uIG1heSBvcHRpb25hbGx5IGJlIHVzZWQgdG8gYWNjb3VudCBmb3IgdW5mcmVlYWJsZSBwYWdlcyBpbgorICogWk9ORV9ETUEuIFRoZSBlZmZlY3Qgd2lsbCBiZSBsb3dlciB3YXRlcm1hcmtzIGFuZCBzbWFsbGVyIHBlci1jcHUgYmF0Y2hzaXplCisgKi8KK3ZvaWQgX19pbml0IHNldF9kbWFfcmVzZXJ2ZSh1bnNpZ25lZCBsb25nIG5ld19kbWFfcmVzZXJ2ZSkKK3sKKwlkbWFfcmVzZXJ2ZSA9IG5ld19kbWFfcmVzZXJ2ZTsKK30KKwogI2lmbmRlZiBDT05GSUdfTkVFRF9NVUxUSVBMRV9OT0RFUwogc3RhdGljIGJvb3RtZW1fZGF0YV90IGNvbnRpZ19ib290bWVtX2RhdGE7CiBzdHJ1Y3QgcGdsaXN0X2RhdGEgY29udGlnX3BhZ2VfZGF0YSA9IHsgLmJkYXRhID0gJmNvbnRpZ19ib290bWVtX2RhdGEgfTsKZGlmZiAtLWdpdCBhL21tL3NobWVtLmMgYi9tbS9zaG1lbS5jCmluZGV4IDg2MzFiZTQuLmJiOGNhN2UgMTAwNjQ0Ci0tLSBhL21tL3NobWVtLmMKKysrIGIvbW0vc2htZW0uYwpAQCAtMjYsNiArMjYsOCBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuZXJpY19hY2wuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CkBAIC0xNzcsNiArMTc5LDcgQEAKIHN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHNobWVtX2ZpbGVfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9pbm9kZV9vcGVyYXRpb25zOwogc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX2Rpcl9pbm9kZV9vcGVyYXRpb25zOworc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgc2htZW1fdm1fb3BzOwogCiBzdGF0aWMgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gc2htZW1fYmFja2luZ19kZXZfaW5mbyAgX19yZWFkX21vc3RseSA9IHsKQEAgLTYzNyw3ICs2NDAsNyBAQAogCXN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDsKIAlpbnQgZXJyb3I7CiAKLQlpZiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpIHsKKwlpZiAoU19JU1JFRyhpbm9kZS0+aV9tb2RlKSAmJiAoYXR0ci0+aWFfdmFsaWQgJiBBVFRSX1NJWkUpKSB7CiAJCWlmIChhdHRyLT5pYV9zaXplIDwgaW5vZGUtPmlfc2l6ZSkgewogCQkJLyoKIAkJCSAqIElmIHRydW5jYXRpbmcgZG93biB0byBhIHBhcnRpYWwgcGFnZSwgdGhlbgpAQCAtNjcwLDYgKzY3MywxMCBAQAogCWVycm9yID0gaW5vZGVfY2hhbmdlX29rKGlub2RlLCBhdHRyKTsKIAlpZiAoIWVycm9yKQogCQllcnJvciA9IGlub2RlX3NldGF0dHIoaW5vZGUsIGF0dHIpOworI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKKwlpZiAoIWVycm9yICYmIChhdHRyLT5pYV92YWxpZCAmIEFUVFJfTU9ERSkpCisJCWVycm9yID0gZ2VuZXJpY19hY2xfY2htb2QoaW5vZGUsICZzaG1lbV9hY2xfb3BzKTsKKyNlbmRpZgogCWlmIChwYWdlKQogCQlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CiAJcmV0dXJuIGVycm9yOwpAQCAtMTM1MSw3ICsxMzU4LDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IGN1cnJlbnQtPmZzdWlkOwogCQlpbm9kZS0+aV9naWQgPSBjdXJyZW50LT5mc2dpZDsKLQkJaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJaW5vZGUtPmlfYmxvY2tzID0gMDsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YV9vcHMgPSAmc2htZW1fYW9wczsKIAkJaW5vZGUtPmlfbWFwcGluZy0+YmFja2luZ19kZXZfaW5mbyA9ICZzaG1lbV9iYWNraW5nX2Rldl9pbmZvOwpAQCAtMTM2Myw2ICsxMzY5LDcgQEAKIAogCQlzd2l0Y2ggKG1vZGUgJiBTX0lGTVQpIHsKIAkJZGVmYXVsdDoKKwkJCWlub2RlLT5pX29wID0gJnNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9uczsKIAkJCWluaXRfc3BlY2lhbF9pbm9kZShpbm9kZSwgbW9kZSwgZGV2KTsKIAkJCWJyZWFrOwogCQljYXNlIFNfSUZSRUc6CkBAIC0xMzcyLDcgKzEzNzksNyBAQAogCQkJCQkJCSZzYmluZm8tPnBvbGljeV9ub2Rlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBTX0lGRElSOgotCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhpbm9kZSk7CiAJCQkvKiBTb21lIHRoaW5ncyBtaXNiZWhhdmUgaWYgc2l6ZSA9PSAwIG9uIGEgZGlyZWN0b3J5ICovCiAJCQlpbm9kZS0+aV9zaXplID0gMiAqIEJPR09fRElSRU5UX1NJWkU7CiAJCQlpbm9kZS0+aV9vcCA9ICZzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9uczsKQEAgLTE2ODMsNyArMTY5MCwxMSBAQAogCQkJCWlwdXQoaW5vZGUpOwogCQkJCXJldHVybiBlcnJvcjsKIAkJCX0KLQkJCWVycm9yID0gMDsKKwkJfQorCQllcnJvciA9IHNobWVtX2FjbF9pbml0KGlub2RlLCBkaXIpOworCQlpZiAoZXJyb3IpIHsKKwkJCWlwdXQoaW5vZGUpOworCQkJcmV0dXJuIGVycm9yOwogCQl9CiAJCWlmIChkaXItPmlfbW9kZSAmIFNfSVNHSUQpIHsKIAkJCWlub2RlLT5pX2dpZCA9IGRpci0+aV9naWQ7CkBAIC0xNzA0LDcgKzE3MTUsNyBAQAogCiAJaWYgKChlcnJvciA9IHNobWVtX21rbm9kKGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRkRJUiwgMCkpKQogCQlyZXR1cm4gZXJyb3I7Ci0JZGlyLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MzksNyArMTc1MCw3IEBACiAKIAlkaXItPmlfc2l6ZSArPSBCT0dPX0RJUkVOVF9TSVpFOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwotCWlub2RlLT5pX25saW5rKys7CisJaW5jX25saW5rKGlub2RlKTsKIAlhdG9taWNfaW5jKCZpbm9kZS0+aV9jb3VudCk7CS8qIE5ldyBkZW50cnkgcmVmZXJlbmNlICovCiAJZGdldChkZW50cnkpOwkJLyogRXh0cmEgcGlubmluZyBjb3VudCBmb3IgdGhlIGNyZWF0ZWQgZGVudHJ5ICovCiAJZF9pbnN0YW50aWF0ZShkZW50cnksIGlub2RlKTsKQEAgLTE3NjEsNyArMTc3Miw3IEBACiAKIAlkaXItPmlfc2l6ZSAtPSBCT0dPX0RJUkVOVF9TSVpFOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FOwotCWlub2RlLT5pX25saW5rLS07CisJZHJvcF9ubGluayhpbm9kZSk7CiAJZHB1dChkZW50cnkpOwkvKiBVbmRvIHRoZSBjb3VudCBmcm9tICJjcmVhdGUiIC0gdGhpcyBkb2VzIGFsbCB0aGUgd29yayAqLwogCXJldHVybiAwOwogfQpAQCAtMTc3MSw4ICsxNzgyLDggQEAKIAlpZiAoIXNpbXBsZV9lbXB0eShkZW50cnkpKQogCQlyZXR1cm4gLUVOT1RFTVBUWTsKIAotCWRlbnRyeS0+ZF9pbm9kZS0+aV9ubGluay0tOwotCWRpci0+aV9ubGluay0tOworCWRyb3BfbmxpbmsoZGVudHJ5LT5kX2lub2RlKTsKKwlkcm9wX25saW5rKGRpcik7CiAJcmV0dXJuIHNobWVtX3VubGluayhkaXIsIGRlbnRyeSk7CiB9CiAKQEAgLTE3OTMsMTAgKzE4MDQsMTAgQEAKIAlpZiAobmV3X2RlbnRyeS0+ZF9pbm9kZSkgewogCQkodm9pZCkgc2htZW1fdW5saW5rKG5ld19kaXIsIG5ld19kZW50cnkpOwogCQlpZiAodGhleV9hcmVfZGlycykKLQkJCW9sZF9kaXItPmlfbmxpbmstLTsKKwkJCWRyb3Bfbmxpbmsob2xkX2Rpcik7CiAJfSBlbHNlIGlmICh0aGV5X2FyZV9kaXJzKSB7Ci0JCW9sZF9kaXItPmlfbmxpbmstLTsKLQkJbmV3X2Rpci0+aV9ubGluaysrOworCQlkcm9wX25saW5rKG9sZF9kaXIpOworCQlpbmNfbmxpbmsobmV3X2Rpcik7CiAJfQogCiAJb2xkX2Rpci0+aV9zaXplIC09IEJPR09fRElSRU5UX1NJWkU7CkBAIC0xODk4LDYgKzE5MDksNTMgQEAKIAkucHV0X2xpbmsJPSBzaG1lbV9wdXRfbGluaywKIH07CiAKKyNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCisvKioKKyAqIFN1cGVyYmxvY2tzIHdpdGhvdXQgeGF0dHIgaW5vZGUgb3BlcmF0aW9ucyB3aWxsIGdldCBzZWN1cml0eS4qIHhhdHRyCisgKiBzdXBwb3J0IGZyb20gdGhlIFZGUyAiZm9yIGZyZWUiLiBBcyBzb29uIGFzIHdlIGhhdmUgYW55IG90aGVyIHhhdHRycworICogbGlrZSBBQ0xzLCB3ZSBhbHNvIG5lZWQgdG8gaW1wbGVtZW50IHRoZSBzZWN1cml0eS4qIGhhbmRsZXJzIGF0CisgKiBmaWxlc3lzdGVtIGxldmVsLCB0aG91Z2guCisgKi8KKworc3RhdGljIHNpemVfdCBzaG1lbV94YXR0cl9zZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsCisJCQkJCXNpemVfdCBsaXN0X2xlbiwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc2l6ZV90IG5hbWVfbGVuKQoreworCXJldHVybiBzZWN1cml0eV9pbm9kZV9saXN0c2VjdXJpdHkoaW5vZGUsIGxpc3QsIGxpc3RfbGVuKTsKK30KKworc3RhdGljIGludCBzaG1lbV94YXR0cl9zZWN1cml0eV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICIiKSA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gc2VjdXJpdHlfaW5vZGVfZ2V0c2VjdXJpdHkoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwKKwkJCQkJICAtRU9QTk9UU1VQUCk7Cit9CisKK3N0YXRpYyBpbnQgc2htZW1feGF0dHJfc2VjdXJpdHlfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGNvbnN0IHZvaWQgKnZhbHVlLCBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKQoreworCWlmIChzdHJjbXAobmFtZSwgIiIpID09IDApCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiBzZWN1cml0eV9pbm9kZV9zZXRzZWN1cml0eShpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIGZsYWdzKTsKK30KKworc3RydWN0IHhhdHRyX2hhbmRsZXIgc2htZW1feGF0dHJfc2VjdXJpdHlfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gWEFUVFJfU0VDVVJJVFlfUFJFRklYLAorCS5saXN0ICAgPSBzaG1lbV94YXR0cl9zZWN1cml0eV9saXN0LAorCS5nZXQgICAgPSBzaG1lbV94YXR0cl9zZWN1cml0eV9nZXQsCisJLnNldCAgICA9IHNobWVtX3hhdHRyX3NlY3VyaXR5X3NldCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqc2htZW1feGF0dHJfaGFuZGxlcnNbXSA9IHsKKwkmc2htZW1feGF0dHJfYWNsX2FjY2Vzc19oYW5kbGVyLAorCSZzaG1lbV94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyLAorCSZzaG1lbV94YXR0cl9zZWN1cml0eV9oYW5kbGVyLAorCU5VTEwKK307CisjZW5kaWYKKwogc3RhdGljIGludCBzaG1lbV9wYXJzZV9vcHRpb25zKGNoYXIgKm9wdGlvbnMsIGludCAqbW9kZSwgdWlkX3QgKnVpZCwKIAlnaWRfdCAqZ2lkLCB1bnNpZ25lZCBsb25nICpibG9ja3MsIHVuc2lnbmVkIGxvbmcgKmlub2RlcywKIAlpbnQgKnBvbGljeSwgbm9kZW1hc2tfdCAqcG9saWN5X25vZGVzKQpAQCAtMjA5NSw2ICsyMTUzLDEwIEBACiAJc2ItPnNfbWFnaWMgPSBUTVBGU19NQUdJQzsKIAlzYi0+c19vcCA9ICZzaG1lbV9vcHM7CiAJc2ItPnNfdGltZV9ncmFuID0gMTsKKyNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCisJc2ItPnNfeGF0dHIgPSBzaG1lbV94YXR0cl9oYW5kbGVyczsKKwlzYi0+c19mbGFncyB8PSBNU19QT1NJWEFDTDsKKyNlbmRpZgogCiAJaW5vZGUgPSBzaG1lbV9nZXRfaW5vZGUoc2IsIFNfSUZESVIgfCBtb2RlLCAwKTsKIAlpZiAoIWlub2RlKQpAQCAtMjEzMSw2ICsyMTkzLDcgQEAKIAkJLyogb25seSBzdHJ1Y3QgaW5vZGUgaXMgdmFsaWQgaWYgaXQncyBhbiBpbmxpbmUgc3ltbGluayAqLwogCQltcG9sX2ZyZWVfc2hhcmVkX3BvbGljeSgmU0hNRU1fSShpbm9kZSktPnBvbGljeSk7CiAJfQorCXNobWVtX2FjbF9kZXN0cm95X2lub2RlKGlub2RlKTsKIAlrbWVtX2NhY2hlX2ZyZWUoc2htZW1faW5vZGVfY2FjaGVwLCBTSE1FTV9JKGlub2RlKSk7CiB9CiAKQEAgLTIxNDIsNiArMjIwNSwxMCBAQAogCWlmICgoZmxhZ3MgJiAoU0xBQl9DVE9SX1ZFUklGWXxTTEFCX0NUT1JfQ09OU1RSVUNUT1IpKSA9PQogCSAgICBTTEFCX0NUT1JfQ09OU1RSVUNUT1IpIHsKIAkJaW5vZGVfaW5pdF9vbmNlKCZwLT52ZnNfaW5vZGUpOworI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKKwkJcC0+aV9hY2wgPSBOVUxMOworCQlwLT5pX2RlZmF1bHRfYWNsID0gTlVMTDsKKyNlbmRpZgogCX0KIH0KIApAQCAtMjE1Nyw4ICsyMjI0LDcgQEAKIAogc3RhdGljIHZvaWQgZGVzdHJveV9pbm9kZWNhY2hlKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShzaG1lbV9pbm9kZV9jYWNoZXApKQotCQlwcmludGsoS0VSTl9JTkZPICJzaG1lbV9pbm9kZV9jYWNoZTogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOworCWttZW1fY2FjaGVfZGVzdHJveShzaG1lbV9pbm9kZV9jYWNoZXApOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBzaG1lbV9hb3BzID0gewpAQCAtMjE4Niw2ICsyMjUyLDE0IEBACiAJLnRydW5jYXRlCT0gc2htZW1fdHJ1bmNhdGUsCiAJLnNldGF0dHIJPSBzaG1lbV9ub3RpZnlfY2hhbmdlLAogCS50cnVuY2F0ZV9yYW5nZQk9IHNobWVtX3RydW5jYXRlX3JhbmdlLAorI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKKwkuc2V0eGF0dHIJPSBnZW5lcmljX3NldHhhdHRyLAorCS5nZXR4YXR0cgk9IGdlbmVyaWNfZ2V0eGF0dHIsCisJLmxpc3R4YXR0cgk9IGdlbmVyaWNfbGlzdHhhdHRyLAorCS5yZW1vdmV4YXR0cgk9IGdlbmVyaWNfcmVtb3ZleGF0dHIsCisJLnBlcm1pc3Npb24JPSBzaG1lbV9wZXJtaXNzaW9uLAorI2VuZGlmCisKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzaG1lbV9kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHsKQEAgLTIyMDAsNiArMjI3NCwyNSBAQAogCS5ta25vZAkJPSBzaG1lbV9ta25vZCwKIAkucmVuYW1lCQk9IHNobWVtX3JlbmFtZSwKICNlbmRpZgorI2lmZGVmIENPTkZJR19UTVBGU19QT1NJWF9BQ0wKKwkuc2V0YXR0cgk9IHNobWVtX25vdGlmeV9jaGFuZ2UsCisJLnNldHhhdHRyCT0gZ2VuZXJpY19zZXR4YXR0ciwKKwkuZ2V0eGF0dHIJPSBnZW5lcmljX2dldHhhdHRyLAorCS5saXN0eGF0dHIJPSBnZW5lcmljX2xpc3R4YXR0ciwKKwkucmVtb3ZleGF0dHIJPSBnZW5lcmljX3JlbW92ZXhhdHRyLAorCS5wZXJtaXNzaW9uCT0gc2htZW1fcGVybWlzc2lvbiwKKyNlbmRpZgorfTsKKworc3RhdGljIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNobWVtX3NwZWNpYWxfaW5vZGVfb3BlcmF0aW9ucyA9IHsKKyNpZmRlZiBDT05GSUdfVE1QRlNfUE9TSVhfQUNMCisJLnNldGF0dHIJPSBzaG1lbV9ub3RpZnlfY2hhbmdlLAorCS5zZXR4YXR0cgk9IGdlbmVyaWNfc2V0eGF0dHIsCisJLmdldHhhdHRyCT0gZ2VuZXJpY19nZXR4YXR0ciwKKwkubGlzdHhhdHRyCT0gZ2VuZXJpY19saXN0eGF0dHIsCisJLnJlbW92ZXhhdHRyCT0gZ2VuZXJpY19yZW1vdmV4YXR0ciwKKwkucGVybWlzc2lvbgk9IHNobWVtX3Blcm1pc3Npb24sCisjZW5kaWYKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBzaG1lbV9vcHMgPSB7CmRpZmYgLS1naXQgYS9tbS9zaG1lbV9hY2wuYyBiL21tL3NobWVtX2FjbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NDZiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9tbS9zaG1lbV9hY2wuYwpAQCAtMCwwICsxLDE5NyBAQAorLyoKKyAqIG1tL3NobWVtX2FjbC5jCisgKgorICogKEMpIDIwMDUgQW5kcmVhcyBHcnVlbmJhY2hlciA8YWdydWVuQHN1c2UuZGU+CisgKgorICogVGhpcyBmaWxlIGlzIHJlbGVhc2VkIHVuZGVyIHRoZSBHUEwuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CisjaW5jbHVkZSA8bGludXgvc2htZW1fZnMuaD4KKyNpbmNsdWRlIDxsaW51eC94YXR0ci5oPgorI2luY2x1ZGUgPGxpbnV4L2dlbmVyaWNfYWNsLmg+CisKKy8qKgorICogc2htZW1fZ2V0X2FjbCAgLSAgIGdlbmVyaWNfYWNsX29wZXJhdGlvbnMtPmdldGFjbCgpIG9wZXJhdGlvbgorICovCitzdGF0aWMgc3RydWN0IHBvc2l4X2FjbCAqCitzaG1lbV9nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKQoreworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbCA9IE5VTEw7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXN3aXRjaCh0eXBlKSB7CisJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQkJYWNsID0gcG9zaXhfYWNsX2R1cChTSE1FTV9JKGlub2RlKS0+aV9hY2wpOworCQkJYnJlYWs7CisKKwkJY2FzZSBBQ0xfVFlQRV9ERUZBVUxUOgorCQkJYWNsID0gcG9zaXhfYWNsX2R1cChTSE1FTV9JKGlub2RlKS0+aV9kZWZhdWx0X2FjbCk7CisJCQlicmVhazsKKwl9CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworCisJcmV0dXJuIGFjbDsKK30KKworLyoqCisgKiBzaG1lbV9nZXRfYWNsICAtICAgZ2VuZXJpY19hY2xfb3BlcmF0aW9ucy0+c2V0YWNsKCkgb3BlcmF0aW9uCisgKi8KK3N0YXRpYyB2b2lkCitzaG1lbV9zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqZnJlZSA9IE5VTEw7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCXN3aXRjaCh0eXBlKSB7CisJCWNhc2UgQUNMX1RZUEVfQUNDRVNTOgorCQkJZnJlZSA9IFNITUVNX0koaW5vZGUpLT5pX2FjbDsKKwkJCVNITUVNX0koaW5vZGUpLT5pX2FjbCA9IHBvc2l4X2FjbF9kdXAoYWNsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgQUNMX1RZUEVfREVGQVVMVDoKKwkJCWZyZWUgPSBTSE1FTV9JKGlub2RlKS0+aV9kZWZhdWx0X2FjbDsKKwkJCVNITUVNX0koaW5vZGUpLT5pX2RlZmF1bHRfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOworCQkJYnJlYWs7CisJfQorCXNwaW5fdW5sb2NrKCZpbm9kZS0+aV9sb2NrKTsKKwlwb3NpeF9hY2xfcmVsZWFzZShmcmVlKTsKK30KKworc3RydWN0IGdlbmVyaWNfYWNsX29wZXJhdGlvbnMgc2htZW1fYWNsX29wcyA9IHsKKwkuZ2V0YWNsID0gc2htZW1fZ2V0X2FjbCwKKwkuc2V0YWNsID0gc2htZW1fc2V0X2FjbCwKK307CisKKy8qKgorICogc2htZW1fbGlzdF9hY2xfYWNjZXNzLCBzaG1lbV9nZXRfYWNsX2FjY2Vzcywgc2htZW1fc2V0X2FjbF9hY2Nlc3MsCisgKiBzaG1lbV94YXR0cl9hY2xfYWNjZXNzX2hhbmRsZXIgIC0gIHBsdW1iaW5nIGNvZGUgdG8gaW1wbGVtZW50IHRoZQorICogc3lzdGVtLnBvc2l4X2FjbF9hY2Nlc3MgeGF0dHIgdXNpbmcgdGhlIGdlbmVyaWMgYWNsIGZ1bmN0aW9ucy4KKyAqLworCitzdGF0aWMgc2l6ZV90CitzaG1lbV9saXN0X2FjbF9hY2Nlc3Moc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3Rfc2l6ZSwKKwkJICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCXJldHVybiBnZW5lcmljX2FjbF9saXN0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfQUNDRVNTLAorCQkJCWxpc3QsIGxpc3Rfc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NobWVtX2dldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKKwkJICAgICBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZ2VuZXJpY19hY2xfZ2V0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfQUNDRVNTLCBidWZmZXIsCisJCQkgICAgICAgc2l6ZSk7Cit9CisKK3N0YXRpYyBpbnQKK3NobWVtX3NldF9hY2xfYWNjZXNzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAorCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbmVyaWNfYWNsX3NldChpbm9kZSwgJnNobWVtX2FjbF9vcHMsIEFDTF9UWVBFX0FDQ0VTUywgdmFsdWUsCisJCQkgICAgICAgc2l6ZSk7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHNobWVtX3hhdHRyX2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKKwkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKKwkubGlzdAk9IHNobWVtX2xpc3RfYWNsX2FjY2VzcywKKwkuZ2V0CT0gc2htZW1fZ2V0X2FjbF9hY2Nlc3MsCisJLnNldAk9IHNobWVtX3NldF9hY2xfYWNjZXNzLAorfTsKKworLyoqCisgKiBzaG1lbV9saXN0X2FjbF9kZWZhdWx0LCBzaG1lbV9nZXRfYWNsX2RlZmF1bHQsIHNobWVtX3NldF9hY2xfZGVmYXVsdCwKKyAqIHNobWVtX3hhdHRyX2FjbF9kZWZhdWx0X2hhbmRsZXIgIC0gIHBsdW1iaW5nIGNvZGUgdG8gaW1wbGVtZW50IHRoZQorICogc3lzdGVtLnBvc2l4X2FjbF9kZWZhdWx0IHhhdHRyIHVzaW5nIHRoZSBnZW5lcmljIGFjbCBmdW5jdGlvbnMuCisgKi8KKworc3RhdGljIHNpemVfdAorc2htZW1fbGlzdF9hY2xfZGVmYXVsdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQoreworCXJldHVybiBnZW5lcmljX2FjbF9saXN0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfREVGQVVMVCwKKwkJCQlsaXN0LCBsaXN0X3NpemUpOworfQorCitzdGF0aWMgaW50CitzaG1lbV9nZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAorCQkgICAgICBzaXplX3Qgc2l6ZSkKK3sKKwlpZiAoc3RyY21wKG5hbWUsICIiKSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gZ2VuZXJpY19hY2xfZ2V0KGlub2RlLCAmc2htZW1fYWNsX29wcywgQUNMX1RZUEVfREVGQVVMVCwgYnVmZmVyLAorCQkJICAgICAgIHNpemUpOworfQorCitzdGF0aWMgaW50CitzaG1lbV9zZXRfYWNsX2RlZmF1bHQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqdmFsdWUsCisJCSAgICAgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCit7CisJaWYgKHN0cmNtcChuYW1lLCAiIikgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGdlbmVyaWNfYWNsX3NldChpbm9kZSwgJnNobWVtX2FjbF9vcHMsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLAorCQkJICAgICAgIHNpemUpOworfQorCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciBzaG1lbV94YXR0cl9hY2xfZGVmYXVsdF9oYW5kbGVyID0geworCS5wcmVmaXggPSBQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCwKKwkubGlzdAk9IHNobWVtX2xpc3RfYWNsX2RlZmF1bHQsCisJLmdldAk9IHNobWVtX2dldF9hY2xfZGVmYXVsdCwKKwkuc2V0CT0gc2htZW1fc2V0X2FjbF9kZWZhdWx0LAorfTsKKworLyoqCisgKiBzaG1lbV9hY2xfaW5pdCAgLSAgSW5pemlhbGl6ZSB0aGUgYWNsKHMpIG9mIGEgbmV3IGlub2RlCisgKi8KK2ludAorc2htZW1fYWNsX2luaXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlub2RlICpkaXIpCit7CisJcmV0dXJuIGdlbmVyaWNfYWNsX2luaXQoaW5vZGUsIGRpciwgJnNobWVtX2FjbF9vcHMpOworfQorCisvKioKKyAqIHNobWVtX2FjbF9kZXN0cm95X2lub2RlICAtICBkZXN0cm95IGFjbHMgaGFuZ2luZyBvZmYgdGhlIGluLW1lbW9yeSBpbm9kZQorICoKKyAqIFRoaXMgaXMgZG9uZSBiZWZvcmUgZGVzdHJveWluZyB0aGUgYWN0dWFsIGlub2RlLgorICovCisKK3ZvaWQKK3NobWVtX2FjbF9kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCit7CisJaWYgKFNITUVNX0koaW5vZGUpLT5pX2FjbCkKKwkJcG9zaXhfYWNsX3JlbGVhc2UoU0hNRU1fSShpbm9kZSktPmlfYWNsKTsKKwlTSE1FTV9JKGlub2RlKS0+aV9hY2wgPSBOVUxMOworCWlmIChTSE1FTV9JKGlub2RlKS0+aV9kZWZhdWx0X2FjbCkKKwkJcG9zaXhfYWNsX3JlbGVhc2UoU0hNRU1fSShpbm9kZSktPmlfZGVmYXVsdF9hY2wpOworCVNITUVNX0koaW5vZGUpLT5pX2RlZmF1bHRfYWNsID0gTlVMTDsKK30KKworLyoqCisgKiBzaG1lbV9jaGVja19hY2wgIC0gIGNoZWNrX2FjbCgpIGNhbGxiYWNrIGZvciBnZW5lcmljX3Blcm1pc3Npb24oKQorICovCitzdGF0aWMgaW50CitzaG1lbV9jaGVja19hY2woc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gc2htZW1fZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKKworCWlmIChhY2wpIHsKKwkJaW50IGVycm9yID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5vZGUsIGFjbCwgbWFzayk7CisJCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CisJCXJldHVybiBlcnJvcjsKKwl9CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKy8qKgorICogc2htZW1fcGVybWlzc2lvbiAgLSAgcGVybWlzc2lvbigpIGlub2RlIG9wZXJhdGlvbgorICovCitpbnQKK3NobWVtX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2ssIHN0cnVjdCBuYW1laWRhdGEgKm5kKQoreworCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIHNobWVtX2NoZWNrX2FjbCk7Cit9CmRpZmYgLS1naXQgYS9tbS9zbGFiLmMgYi9tbS9zbGFiLmMKaW5kZXggN2E0OGViMS4uM2RiZDZmNCAxMDA2NDQKLS0tIGEvbW0vc2xhYi5jCisrKyBiL21tL3NsYWIuYwpAQCAtOTcyLDcgKzk3MiwzOSBAQAogCXJldHVybiBucjsKIH0KIAotI2lmZGVmIENPTkZJR19OVU1BCisjaWZuZGVmIENPTkZJR19OVU1BCisKKyNkZWZpbmUgZHJhaW5fYWxpZW5fY2FjaGUoY2FjaGVwLCBhbGllbikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByZWFwX2FsaWVuKGNhY2hlcCwgbDMpIGRvIHsgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgYXJyYXlfY2FjaGUgKiphbGxvY19hbGllbl9jYWNoZShpbnQgbm9kZSwgaW50IGxpbWl0KQoreworCXJldHVybiAoc3RydWN0IGFycmF5X2NhY2hlICoqKUJBRF9BTElFTl9NQUdJQzsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYWxpZW5fY2FjaGUoc3RydWN0IGFycmF5X2NhY2hlICoqYWNfcHRyKQoreworfQorCitzdGF0aWMgaW5saW5lIGludCBjYWNoZV9mcmVlX2FsaWVuKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIHZvaWQgKm9ianApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqYWx0ZXJuYXRlX25vZGVfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwKKwkJZ2ZwX3QgZmxhZ3MpCit7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCAqX19jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsCisJCSBnZnBfdCBmbGFncywgaW50IG5vZGVpZCkKK3sKKwlyZXR1cm4gTlVMTDsKK30KKworI2Vsc2UJLyogQ09ORklHX05VTUEgKi8KKwogc3RhdGljIHZvaWQgKl9fY2FjaGVfYWxsb2Nfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCwgaW50KTsKIHN0YXRpYyB2b2lkICphbHRlcm5hdGVfbm9kZV9hbGxvYyhzdHJ1Y3Qga21lbV9jYWNoZSAqLCBnZnBfdCk7CiAKQEAgLTExMDEsMjYgKzExMzMsNiBAQAogCX0KIAlyZXR1cm4gMTsKIH0KLQotI2Vsc2UKLQotI2RlZmluZSBkcmFpbl9hbGllbl9jYWNoZShjYWNoZXAsIGFsaWVuKSBkbyB7IH0gd2hpbGUgKDApCi0jZGVmaW5lIHJlYXBfYWxpZW4oY2FjaGVwLCBsMykgZG8geyB9IHdoaWxlICgwKQotCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBhcnJheV9jYWNoZSAqKmFsbG9jX2FsaWVuX2NhY2hlKGludCBub2RlLCBpbnQgbGltaXQpCi17Ci0JcmV0dXJuIChzdHJ1Y3QgYXJyYXlfY2FjaGUgKiopQkFEX0FMSUVOX01BR0lDOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9hbGllbl9jYWNoZShzdHJ1Y3QgYXJyYXlfY2FjaGUgKiphY19wdHIpCi17Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGNhY2hlX2ZyZWVfYWxpZW4oc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlcCwgdm9pZCAqb2JqcCkKLXsKLQlyZXR1cm4gMDsKLX0KLQogI2VuZGlmCiAKIHN0YXRpYyBpbnQgX19jcHVpbml0IGNwdXVwX2NhbGxiYWNrKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmZiLApAQCAtMTU2NCw3ICsxNTc2LDEzIEBACiAJICovCiAJZmxhZ3MgfD0gX19HRlBfQ09NUDsKICNlbmRpZgotCWZsYWdzIHw9IGNhY2hlcC0+Z2ZwZmxhZ3M7CisKKwkvKgorCSAqIFVuZGVyIE5VTUEgd2Ugd2FudCBtZW1vcnkgb24gdGhlIGluZGljYXRlZCBub2RlLiBXZSB3aWxsIGhhbmRsZQorCSAqIHRoZSBuZWVkZWQgZmFsbGJhY2sgb3Vyc2VsdmVzIHNpbmNlIHdlIHdhbnQgdG8gc2VydmUgZnJvbSBvdXIKKwkgKiBwZXIgbm9kZSBvYmplY3QgbGlzdHMgZmlyc3QgZm9yIG90aGVyIG5vZGVzLgorCSAqLworCWZsYWdzIHw9IGNhY2hlcC0+Z2ZwZmxhZ3MgfCBHRlBfVEhJU05PREU7CiAKIAlwYWdlID0gYWxsb2NfcGFnZXNfbm9kZShub2RlaWQsIGZsYWdzLCBjYWNoZXAtPmdmcG9yZGVyKTsKIAlpZiAoIXBhZ2UpCkBAIC0xNjY1LDEwICsxNjgzLDMyIEBACiBzdGF0aWMgdm9pZCBkdW1wX2xpbmUoY2hhciAqZGF0YSwgaW50IG9mZnNldCwgaW50IGxpbWl0KQogewogCWludCBpOworCXVuc2lnbmVkIGNoYXIgZXJyb3IgPSAwOworCWludCBiYWRfY291bnQgPSAwOworCiAJcHJpbnRrKEtFUk5fRVJSICIlMDN4OiIsIG9mZnNldCk7Ci0JZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspCisJZm9yIChpID0gMDsgaSA8IGxpbWl0OyBpKyspIHsKKwkJaWYgKGRhdGFbb2Zmc2V0ICsgaV0gIT0gUE9JU09OX0ZSRUUpIHsKKwkJCWVycm9yID0gZGF0YVtvZmZzZXQgKyBpXTsKKwkJCWJhZF9jb3VudCsrOworCQl9CiAJCXByaW50aygiICUwMngiLCAodW5zaWduZWQgY2hhcilkYXRhW29mZnNldCArIGldKTsKKwl9CiAJcHJpbnRrKCJcbiIpOworCisJaWYgKGJhZF9jb3VudCA9PSAxKSB7CisJCWVycm9yIF49IFBPSVNPTl9GUkVFOworCQlpZiAoIShlcnJvciAmIChlcnJvciAtIDEpKSkgeworCQkJcHJpbnRrKEtFUk5fRVJSICJTaW5nbGUgYml0IGVycm9yIGRldGVjdGVkLiBQcm9iYWJseSAiCisJCQkJCSJiYWQgUkFNLlxuIik7CisjaWZkZWYgQ09ORklHX1g4NgorCQkJcHJpbnRrKEtFUk5fRVJSICJSdW4gbWVtdGVzdDg2KyBvciBhIHNpbWlsYXIgbWVtb3J5ICIKKwkJCQkJInRlc3QgdG9vbC5cbiIpOworI2Vsc2UKKwkJCXByaW50ayhLRVJOX0VSUiAiUnVuIGEgbWVtb3J5IHRlc3QgdG9vbC5cbiIpOworI2VuZGlmCisJCX0KKwl9CiB9CiAjZW5kaWYKIApAQCAtMjQ0Miw3ICsyNDgyLDYgQEAKICAqIEBjYWNoZXA6IHRoZSBjYWNoZSB0byBkZXN0cm95CiAgKgogICogUmVtb3ZlIGEgc3RydWN0IGttZW1fY2FjaGUgb2JqZWN0IGZyb20gdGhlIHNsYWIgY2FjaGUuCi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy4KICAqCiAgKiBJdCBpcyBleHBlY3RlZCB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJ5IGEgbW9kdWxlIHdoZW4gaXQgaXMKICAqIHVubG9hZGVkLiAgVGhpcyB3aWxsIHJlbW92ZSB0aGUgY2FjaGUgY29tcGxldGVseSwgYW5kIGF2b2lkIGEgZHVwbGljYXRlCkBAIC0yNDU0LDcgKzI0OTMsNyBAQAogICogVGhlIGNhbGxlciBtdXN0IGd1YXJhbnRlZSB0aGF0IG5vb25lIHdpbGwgYWxsb2NhdGUgbWVtb3J5IGZyb20gdGhlIGNhY2hlCiAgKiBkdXJpbmcgdGhlIGttZW1fY2FjaGVfZGVzdHJveSgpLgogICovCi1pbnQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXApCit2b2lkIGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqY2FjaGVwKQogewogCUJVR19PTighY2FjaGVwIHx8IGluX2ludGVycnVwdCgpKTsKIApAQCAtMjQ3NSw3ICsyNTE0LDcgQEAKIAkJbGlzdF9hZGQoJmNhY2hlcC0+bmV4dCwgJmNhY2hlX2NoYWluKTsKIAkJbXV0ZXhfdW5sb2NrKCZjYWNoZV9jaGFpbl9tdXRleCk7CiAJCXVubG9ja19jcHVfaG90cGx1ZygpOwotCQlyZXR1cm4gMTsKKwkJcmV0dXJuOwogCX0KIAogCWlmICh1bmxpa2VseShjYWNoZXAtPmZsYWdzICYgU0xBQl9ERVNUUk9ZX0JZX1JDVSkpCkBAIC0yNDgzLDcgKzI1MjIsNiBAQAogCiAJX19rbWVtX2NhY2hlX2Rlc3Ryb3koY2FjaGVwKTsKIAl1bmxvY2tfY3B1X2hvdHBsdWcoKTsKLQlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTsKIApAQCAtMzAzMCwxNCArMzA2OCw2IEBACiAJdm9pZCAqb2JqcDsKIAlzdHJ1Y3QgYXJyYXlfY2FjaGUgKmFjOwogCi0jaWZkZWYgQ09ORklHX05VTUEKLQlpZiAodW5saWtlbHkoY3VycmVudC0+ZmxhZ3MgJiAoUEZfU1BSRUFEX1NMQUIgfCBQRl9NRU1QT0xJQ1kpKSkgewotCQlvYmpwID0gYWx0ZXJuYXRlX25vZGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7Ci0JCWlmIChvYmpwICE9IE5VTEwpCi0JCQlyZXR1cm4gb2JqcDsKLQl9Ci0jZW5kaWYKLQogCWNoZWNrX2lycV9vZmYoKTsKIAlhYyA9IGNwdV9jYWNoZV9nZXQoY2FjaGVwKTsKIAlpZiAobGlrZWx5KGFjLT5hdmFpbCkpIHsKQEAgLTMwNTUsMTIgKzMwODUsMjQgQEAKIAkJCQkJCWdmcF90IGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwotCXZvaWQgKm9ianA7CisJdm9pZCAqb2JqcCA9IE5VTEw7CiAKIAljYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2JlZm9yZShjYWNoZXAsIGZsYWdzKTsKIAogCWxvY2FsX2lycV9zYXZlKHNhdmVfZmxhZ3MpOwotCW9ianAgPSBfX19fY2FjaGVfYWxsb2MoY2FjaGVwLCBmbGFncyk7CisKKwlpZiAodW5saWtlbHkoTlVNQV9CVUlMRCAmJgorCQkJY3VycmVudC0+ZmxhZ3MgJiAoUEZfU1BSRUFEX1NMQUIgfCBQRl9NRU1QT0xJQ1kpKSkKKwkJb2JqcCA9IGFsdGVybmF0ZV9ub2RlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworCisJaWYgKCFvYmpwKQorCQlvYmpwID0gX19fX2NhY2hlX2FsbG9jKGNhY2hlcCwgZmxhZ3MpOworCS8qCisJICogV2UgbWF5IGp1c3QgaGF2ZSBydW4gb3V0IG9mIG1lbW9yeSBvbiB0aGUgbG9jYWwgbm9kZS4KKwkgKiBfX2NhY2hlX2FsbG9jX25vZGUoKSBrbm93cyBob3cgdG8gbG9jYXRlIG1lbW9yeSBvbiBvdGhlciBub2RlcworCSAqLworIAlpZiAoTlVNQV9CVUlMRCAmJiAhb2JqcCkKKyAJCW9ianAgPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGVwLCBmbGFncywgbnVtYV9ub2RlX2lkKCkpOwogCWxvY2FsX2lycV9yZXN0b3JlKHNhdmVfZmxhZ3MpOwogCW9ianAgPSBjYWNoZV9hbGxvY19kZWJ1Z2NoZWNrX2FmdGVyKGNhY2hlcCwgZmxhZ3MsIG9ianAsCiAJCQkJCSAgICBjYWxsZXIpOwpAQCAtMzA3OSw3ICszMTIxLDcgQEAKIHsKIAlpbnQgbmlkX2FsbG9jLCBuaWRfaGVyZTsKIAotCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwlpZiAoaW5faW50ZXJydXB0KCkgfHwgKGZsYWdzICYgX19HRlBfVEhJU05PREUpKQogCQlyZXR1cm4gTlVMTDsKIAluaWRfYWxsb2MgPSBuaWRfaGVyZSA9IG51bWFfbm9kZV9pZCgpOwogCWlmIChjcHVzZXRfZG9fc2xhYl9tZW1fc3ByZWFkKCkgJiYgKGNhY2hlcC0+ZmxhZ3MgJiBTTEFCX01FTV9TUFJFQUQpKQpAQCAtMzA5Miw2ICszMTM0LDI4IEBACiB9CiAKIC8qCisgKiBGYWxsYmFjayBmdW5jdGlvbiBpZiB0aGVyZSB3YXMgbm8gbWVtb3J5IGF2YWlsYWJsZSBhbmQgbm8gb2JqZWN0cyBvbiBhCisgKiBjZXJ0YWluIG5vZGUgYW5kIHdlIGFyZSBhbGxvd2VkIHRvIGZhbGwgYmFjay4gV2UgbWltaWNrIHRoZSBiZWhhdmlvciBvZgorICogdGhlIHBhZ2UgYWxsb2NhdG9yLiBXZSBmYWxsIGJhY2sgYWNjb3JkaW5nIHRvIGEgem9uZWxpc3QgZGV0ZXJtaW5lZCBieQorICogdGhlIHBvbGljeSBsYXllciB3aGlsZSBvYmV5aW5nIGNwdXNldCBjb25zdHJhaW50cy4KKyAqLwordm9pZCAqZmFsbGJhY2tfYWxsb2Moc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCBnZnBfdCBmbGFncykKK3sKKwlzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0ID0gJk5PREVfREFUQShzbGFiX25vZGUoY3VycmVudC0+bWVtcG9saWN5KSkKKwkJCQkJLT5ub2RlX3pvbmVsaXN0c1tnZnBfem9uZShmbGFncyldOworCXN0cnVjdCB6b25lICoqejsKKwl2b2lkICpvYmogPSBOVUxMOworCisJZm9yICh6ID0gem9uZWxpc3QtPnpvbmVzOyAqeiAmJiAhb2JqOyB6KyspCisJCWlmICh6b25lX2lkeCgqeikgPD0gWk9ORV9OT1JNQUwgJiYKKwkJCQljcHVzZXRfem9uZV9hbGxvd2VkKCp6LCBmbGFncykpCisJCQlvYmogPSBfX2NhY2hlX2FsbG9jX25vZGUoY2FjaGUsCisJCQkJCWZsYWdzIHwgX19HRlBfVEhJU05PREUsCisJCQkJCXpvbmVfdG9fbmlkKCp6KSk7CisJcmV0dXJuIG9iajsKK30KKworLyoKICAqIEEgaW50ZXJmYWNlIHRvIGVuYWJsZSBzbGFiIGNyZWF0aW9uIG9uIG5vZGVpZAogICovCiBzdGF0aWMgdm9pZCAqX19jYWNoZV9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpjYWNoZXAsIGdmcF90IGZsYWdzLApAQCAtMzE0NCwxMSArMzIwOCwxNSBAQAogbXVzdF9ncm93OgogCXNwaW5fdW5sb2NrKCZsMy0+bGlzdF9sb2NrKTsKIAl4ID0gY2FjaGVfZ3JvdyhjYWNoZXAsIGZsYWdzLCBub2RlaWQpOworCWlmICh4KQorCQlnb3RvIHJldHJ5OwogCi0JaWYgKCF4KQotCQlyZXR1cm4gTlVMTDsKKwlpZiAoIShmbGFncyAmIF9fR0ZQX1RISVNOT0RFKSkKKwkJLyogVW5hYmxlIHRvIGdyb3cgdGhlIGNhY2hlLiBGYWxsIGJhY2sgdG8gb3RoZXIgbm9kZXMuICovCisJCXJldHVybiBmYWxsYmFja19hbGxvYyhjYWNoZXAsIGZsYWdzKTsKIAotCWdvdG8gcmV0cnk7CisJcmV0dXJuIE5VTEw7CisKIGRvbmU6CiAJcmV0dXJuIG9iajsKIH0KZGlmZiAtLWdpdCBhL21tL3Nsb2IuYyBiL21tL3Nsb2IuYwppbmRleCAyMDE4ODYyLi41NDIzOTQxIDEwMDY0NAotLS0gYS9tbS9zbG9iLmMKKysrIGIvbW0vc2xvYi5jCkBAIC0yNzAsMTAgKzI3MCw5IEBACiB9CiBFWFBPUlRfU1lNQk9MKGttZW1fY2FjaGVfY3JlYXRlKTsKIAotaW50IGttZW1fY2FjaGVfZGVzdHJveShzdHJ1Y3Qga21lbV9jYWNoZSAqYykKK3ZvaWQga21lbV9jYWNoZV9kZXN0cm95KHN0cnVjdCBrbWVtX2NhY2hlICpjKQogewogCXNsb2JfZnJlZShjLCBzaXplb2Yoc3RydWN0IGttZW1fY2FjaGUpKTsKLQlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0woa21lbV9jYWNoZV9kZXN0cm95KTsKIApkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggZjFmNWVjNy4uYTE1ZGVmNiAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYworKysgYi9tbS9zd2FwZmlsZS5jCkBAIC0xNzIzLDEzICsxNzIzLDE0IEBACiAgKi8KIGludCB2YWxpZF9zd2FwaGFuZGxlcyhzd3BfZW50cnlfdCBlbnRyeSwgdW5zaWduZWQgbG9uZyAqb2Zmc2V0KQogewotCWludCByZXQgPSAwLCBpID0gMSA8PCBwYWdlX2NsdXN0ZXI7CisJaW50IG91cl9wYWdlX2NsdXN0ZXIgPSBwYWdlX2NsdXN0ZXI7CisJaW50IHJldCA9IDAsIGkgPSAxIDw8IG91cl9wYWdlX2NsdXN0ZXI7CiAJdW5zaWduZWQgbG9uZyB0b2ZmOwogCXN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzd2FwZGV2ID0gc3dwX3R5cGUoZW50cnkpICsgc3dhcF9pbmZvOwogCi0JaWYgKCFwYWdlX2NsdXN0ZXIpCS8qIG5vIHJlYWRhaGVhZCAqLworCWlmICghb3VyX3BhZ2VfY2x1c3RlcikJLyogbm8gcmVhZGFoZWFkICovCiAJCXJldHVybiAwOwotCXRvZmYgPSAoc3dwX29mZnNldChlbnRyeSkgPj4gcGFnZV9jbHVzdGVyKSA8PCBwYWdlX2NsdXN0ZXI7CisJdG9mZiA9IChzd3Bfb2Zmc2V0KGVudHJ5KSA+PiBvdXJfcGFnZV9jbHVzdGVyKSA8PCBvdXJfcGFnZV9jbHVzdGVyOwogCWlmICghdG9mZikJCS8qIGZpcnN0IHBhZ2UgaXMgc3dhcCBoZWFkZXIgKi8KIAkJdG9mZisrLCBpLS07CiAJKm9mZnNldCA9IHRvZmY7CmRpZmYgLS1naXQgYS9tbS90cnVuY2F0ZS5jIGIvbW0vdHJ1bmNhdGUuYwppbmRleCBjNmFiNTVlLi5mNGVkYmMxIDEwMDY0NAotLS0gYS9tbS90cnVuY2F0ZS5jCisrKyBiL21tL3RydW5jYXRlLmMKQEAgLTksNiArOSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3N3YXAuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CiAjaW5jbHVkZSA8bGludXgvcGFnZXZlYy5oPgpAQCAtMTYsNiArMTcsMzIgQEAKIAkJCQkgICBkb19pbnZhbGlkYXRlcGFnZSAqLwogCiAKKy8qKgorICogZG9faW52YWxpZGF0ZXBhZ2UgLSBpbnZhbGlkYXRlIHBhcnQgb2YgYWxsIG9mIGEgcGFnZQorICogQHBhZ2U6IHRoZSBwYWdlIHdoaWNoIGlzIGFmZmVjdGVkCisgKiBAb2Zmc2V0OiB0aGUgaW5kZXggb2YgdGhlIHRydW5jYXRpb24gcG9pbnQKKyAqCisgKiBkb19pbnZhbGlkYXRlcGFnZSgpIGlzIGNhbGxlZCB3aGVuIGFsbCBvciBwYXJ0IG9mIHRoZSBwYWdlIGhhcyBiZWNvbWUKKyAqIGludmFsaWRhdGVkIGJ5IGEgdHJ1bmNhdGUgb3BlcmF0aW9uLgorICoKKyAqIGRvX2ludmFsaWRhdGVwYWdlKCkgZG9lcyBub3QgaGF2ZSB0byByZWxlYXNlIGFsbCBidWZmZXJzLCBidXQgaXQgbXVzdAorICogZW5zdXJlIHRoYXQgbm8gZGlydHkgYnVmZmVyIGlzIGxlZnQgb3V0c2lkZSBAb2Zmc2V0IGFuZCB0aGF0IG5vIEkvTworICogaXMgdW5kZXJ3YXkgYWdhaW5zdCBhbnkgb2YgdGhlIGJsb2NrcyB3aGljaCBhcmUgb3V0c2lkZSB0aGUgdHJ1bmNhdGlvbgorICogcG9pbnQuICBCZWNhdXNlIHRoZSBjYWxsZXIgaXMgYWJvdXQgdG8gZnJlZSAoYW5kIHBvc3NpYmx5IHJldXNlKSB0aG9zZQorICogYmxvY2tzIG9uLWRpc2suCisgKi8KK3ZvaWQgZG9faW52YWxpZGF0ZXBhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQoreworCXZvaWQgKCppbnZhbGlkYXRlcGFnZSkoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgbG9uZyk7CisJaW52YWxpZGF0ZXBhZ2UgPSBwYWdlLT5tYXBwaW5nLT5hX29wcy0+aW52YWxpZGF0ZXBhZ2U7CisjaWZkZWYgQ09ORklHX0JMT0NLCisJaWYgKCFpbnZhbGlkYXRlcGFnZSkKKwkJaW52YWxpZGF0ZXBhZ2UgPSBibG9ja19pbnZhbGlkYXRlcGFnZTsKKyNlbmRpZgorCWlmIChpbnZhbGlkYXRlcGFnZSkKKwkJKCppbnZhbGlkYXRlcGFnZSkocGFnZSwgb2Zmc2V0KTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIHRydW5jYXRlX3BhcnRpYWxfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgcGFydGlhbCkKIHsKIAltZW1jbGVhcl9oaWdocGFnZV9mbHVzaChwYWdlLCBwYXJ0aWFsLCBQQUdFX0NBQ0hFX1NJWkUtcGFydGlhbCk7CkBAIC01MiwzNiArNzksMjYgQEAKIC8qCiAgKiBUaGlzIGlzIGZvciBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKCkuICBUaGF0IGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYXQKICAqIGFueSB0aW1lLCBhbmQgaXMgbm90IHN1cHBvc2VkIHRvIHRocm93IGF3YXkgZGlydHkgcGFnZXMuICBCdXQgcGFnZXMgY2FuCi0gKiBiZSBtYXJrZWQgZGlydHkgYXQgYW55IHRpbWUgdG9vLiAgU28gd2UgcmUtY2hlY2sgdGhlIGRpcnRpbmVzcyBpbnNpZGUKLSAqIC0+dHJlZV9sb2NrLiAgVGhhdCBwcm92aWRlcyBleGNsdXNpb24gYWdhaW5zdCB0aGUgX19zZXRfcGFnZV9kaXJ0eQotICogZnVuY3Rpb25zLgorICogYmUgbWFya2VkIGRpcnR5IGF0IGFueSB0aW1lIHRvbywgc28gdXNlIHJlbW92ZV9tYXBwaW5nIHdoaWNoIHNhZmVseQorICogZGlzY2FyZHMgY2xlYW4sIHVudXNlZCBwYWdlcy4KICAqCiAgKiBSZXR1cm5zIG5vbi16ZXJvIGlmIHRoZSBwYWdlIHdhcyBzdWNjZXNzZnVsbHkgaW52YWxpZGF0ZWQuCiAgKi8KIHN0YXRpYyBpbnQKIGludmFsaWRhdGVfY29tcGxldGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CisJaW50IHJldDsKKwogCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpCiAJCXJldHVybiAwOwogCiAJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQogCQlyZXR1cm4gMDsKIAotCXdyaXRlX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOwotCWlmIChQYWdlRGlydHkocGFnZSkpCi0JCWdvdG8gZmFpbGVkOwotCWlmIChwYWdlX2NvdW50KHBhZ2UpICE9IDIpCS8qIGNhbGxlcidzIHJlZiArIHBhZ2VjYWNoZSByZWYgKi8KLQkJZ290byBmYWlsZWQ7Ci0KLQlCVUdfT04oUGFnZVByaXZhdGUocGFnZSkpOwotCV9fcmVtb3ZlX2Zyb21fcGFnZV9jYWNoZShwYWdlKTsKLQl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCXJldCA9IHJlbW92ZV9tYXBwaW5nKG1hcHBpbmcsIHBhZ2UpOwogCUNsZWFyUGFnZVVwdG9kYXRlKHBhZ2UpOwotCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsJLyogcGFnZWNhY2hlIHJlZiAqLwotCXJldHVybiAxOwotZmFpbGVkOgotCXdyaXRlX3VubG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0JcmV0dXJuIDA7CisKKwlyZXR1cm4gcmV0OwogfQogCiAvKioKQEAgLTI3MCw5ICsyODcsMzkgQEAKIHsKIAlyZXR1cm4gaW52YWxpZGF0ZV9tYXBwaW5nX3BhZ2VzKG1hcHBpbmcsIDAsIH4wVUwpOwogfQotCiBFWFBPUlRfU1lNQk9MKGludmFsaWRhdGVfaW5vZGVfcGFnZXMpOwogCisvKgorICogVGhpcyBpcyBsaWtlIGludmFsaWRhdGVfY29tcGxldGVfcGFnZSgpLCBleGNlcHQgaXQgaWdub3JlcyB0aGUgcGFnZSdzCisgKiByZWZjb3VudC4gIFdlIGRvIHRoaXMgYmVjYXVzZSBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzMigpIG5lZWRzIHN0cm9uZ2VyCisgKiBpbnZhbGlkYXRpb24gZ3VhcmFudGVlcywgYW5kIGNhbm5vdCBhZmZvcmQgdG8gbGVhdmUgcGFnZXMgYmVoaW5kIGJlY2F1c2UKKyAqIHNocmlua19saXN0KCkgaGFzIGEgdGVtcCByZWYgb24gdGhlbSwgb3IgYmVjYXVzZSB0aGV5J3JlIHRyYW5zaWVudGx5IHNpdHRpbmcKKyAqIGluIHRoZSBscnVfY2FjaGVfYWRkKCkgcGFnZXZlY3MuCisgKi8KK3N0YXRpYyBpbnQKK2ludmFsaWRhdGVfY29tcGxldGVfcGFnZTIoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHN0cnVjdCBwYWdlICpwYWdlKQoreworCWlmIChwYWdlLT5tYXBwaW5nICE9IG1hcHBpbmcpCisJCXJldHVybiAwOworCisJaWYgKFBhZ2VQcml2YXRlKHBhZ2UpICYmICF0cnlfdG9fcmVsZWFzZV9wYWdlKHBhZ2UsIDApKQorCQlyZXR1cm4gMDsKKworCXdyaXRlX2xvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCWlmIChQYWdlRGlydHkocGFnZSkpCisJCWdvdG8gZmFpbGVkOworCisJQlVHX09OKFBhZ2VQcml2YXRlKHBhZ2UpKTsKKwlfX3JlbW92ZV9mcm9tX3BhZ2VfY2FjaGUocGFnZSk7CisJd3JpdGVfdW5sb2NrX2lycSgmbWFwcGluZy0+dHJlZV9sb2NrKTsKKwlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKKwlwYWdlX2NhY2hlX3JlbGVhc2UocGFnZSk7CS8qIHBhZ2VjYWNoZSByZWYgKi8KKwlyZXR1cm4gMTsKK2ZhaWxlZDoKKwl3cml0ZV91bmxvY2tfaXJxKCZtYXBwaW5nLT50cmVlX2xvY2spOworCXJldHVybiAwOworfQorCiAvKioKICAqIGludmFsaWRhdGVfaW5vZGVfcGFnZXMyX3JhbmdlIC0gcmVtb3ZlIHJhbmdlIG9mIHBhZ2VzIGZyb20gYW4gYWRkcmVzc19zcGFjZQogICogQG1hcHBpbmc6IHRoZSBhZGRyZXNzX3NwYWNlCkBAIC0zMzksNyArMzg2LDcgQEAKIAkJCQl9CiAJCQl9CiAJCQl3YXNfZGlydHkgPSB0ZXN0X2NsZWFyX3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlpZiAoIWludmFsaWRhdGVfY29tcGxldGVfcGFnZShtYXBwaW5nLCBwYWdlKSkgeworCQkJaWYgKCFpbnZhbGlkYXRlX2NvbXBsZXRlX3BhZ2UyKG1hcHBpbmcsIHBhZ2UpKSB7CiAJCQkJaWYgKHdhc19kaXJ0eSkKIAkJCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7CiAJCQkJcmV0ID0gLUVJTzsKZGlmZiAtLWdpdCBhL21tL3V0aWwuYyBiL21tL3V0aWwuYwppbmRleCA3MzY4NDc5Mi4uZTE0ZmE4NCAxMDA2NDQKLS0tIGEvbW0vdXRpbC5jCisrKyBiL21tL3V0aWwuYwpAQCAtNDAsNiArNDAsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0woa3N0cmR1cCk7CiAKKy8qKgorICoga21lbWR1cCAtIGR1cGxpY2F0ZSByZWdpb24gb2YgbWVtb3J5CisgKgorICogQHNyYzogbWVtb3J5IHJlZ2lvbiB0byBkdXBsaWNhdGUKKyAqIEBsZW46IG1lbW9yeSByZWdpb24gbGVuZ3RoCisgKiBAZ2ZwOiBHRlAgbWFzayB0byB1c2UKKyAqLwordm9pZCAqa21lbWR1cChjb25zdCB2b2lkICpzcmMsIHNpemVfdCBsZW4sIGdmcF90IGdmcCkKK3sKKwl2b2lkICpwOworCisJcCA9IF9fX19rbWFsbG9jKGxlbiwgZ2ZwKTsKKwlpZiAocCkKKwkJbWVtY3B5KHAsIHNyYywgbGVuKTsKKwlyZXR1cm4gcDsKK30KK0VYUE9SVF9TWU1CT0woa21lbWR1cCk7CisKIC8qCiAgKiBzdHJuZHVwX3VzZXIgLSBkdXBsaWNhdGUgYW4gZXhpc3Rpbmcgc3RyaW5nIGZyb20gdXNlciBzcGFjZQogICoKZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuYwppbmRleCA5YWFkOGIwLi4xYWMxOTFjIDEwMDY0NAotLS0gYS9tbS92bWFsbG9jLmMKKysrIGIvbW0vdm1hbGxvYy5jCkBAIC0yNDEsNyArMjQxLDYgQEAKIAogLyoqCiAgKglnZXRfdm1fYXJlYSAgLSAgcmVzZXJ2ZSBhIGNvbnRpbmdvdXMga2VybmVsIHZpcnR1YWwgYXJlYQotICoKICAqCUBzaXplOgkJc2l6ZSBvZiB0aGUgYXJlYQogICoJQGZsYWdzOgkJJVZNX0lPUkVNQVAgZm9yIEkvTyBtYXBwaW5ncyBvciBWTV9BTExPQwogICoKQEAgLTI3Myw3ICsyNzIsNyBAQAogfQogCiAvKiBDYWxsZXIgbXVzdCBob2xkIHZtbGlzdF9sb2NrICovCi1zdHJ1Y3Qgdm1fc3RydWN0ICpfX3JlbW92ZV92bV9hcmVhKHZvaWQgKmFkZHIpCitzdGF0aWMgc3RydWN0IHZtX3N0cnVjdCAqX19yZW1vdmVfdm1fYXJlYSh2b2lkICphZGRyKQogewogCXN0cnVjdCB2bV9zdHJ1Y3QgKipwLCAqdG1wOwogCkBAIC0yOTYsNyArMjk1LDYgQEAKIAogLyoqCiAgKglyZW1vdmVfdm1fYXJlYSAgLSAgZmluZCBhbmQgcmVtb3ZlIGEgY29udGluZ291cyBrZXJuZWwgdmlydHVhbCBhcmVhCi0gKgogICoJQGFkZHI6CQliYXNlIGFkZHJlc3MKICAqCiAgKglTZWFyY2ggZm9yIHRoZSBrZXJuZWwgVk0gYXJlYSBzdGFydGluZyBhdCBAYWRkciwgYW5kIHJlbW92ZSBpdC4KQEAgLTM1NSw3ICszNTMsNiBAQAogCiAvKioKICAqCXZmcmVlICAtICByZWxlYXNlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgdm1hbGxvYygpCi0gKgogICoJQGFkZHI6CQltZW1vcnkgYmFzZSBhZGRyZXNzCiAgKgogICoJRnJlZSB0aGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGFyZWEgc3RhcnRpbmcgYXQgQGFkZHIsIGFzCkBAIC0zNzMsNyArMzcwLDYgQEAKIAogLyoqCiAgKgl2dW5tYXAgIC0gIHJlbGVhc2UgdmlydHVhbCBtYXBwaW5nIG9idGFpbmVkIGJ5IHZtYXAoKQotICoKICAqCUBhZGRyOgkJbWVtb3J5IGJhc2UgYWRkcmVzcwogICoKICAqCUZyZWUgdGhlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeSBhcmVhIHN0YXJ0aW5nIGF0IEBhZGRyLApAQCAtMzkwLDcgKzM4Niw2IEBACiAKIC8qKgogICoJdm1hcCAgLSAgbWFwIGFuIGFycmF5IG9mIHBhZ2VzIGludG8gdmlydHVhbGx5IGNvbnRpZ3VvdXMgc3BhY2UKLSAqCiAgKglAcGFnZXM6CQlhcnJheSBvZiBwYWdlIHBvaW50ZXJzCiAgKglAY291bnQ6CQludW1iZXIgb2YgcGFnZXMgdG8gbWFwCiAgKglAZmxhZ3M6CQl2bV9hcmVhLT5mbGFncwpAQCAtNDcxLDcgKzQ2Niw2IEBACiAKIC8qKgogICoJX192bWFsbG9jX25vZGUgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeQotICoKICAqCUBzaXplOgkJYWxsb2NhdGlvbiBzaXplCiAgKglAZ2ZwX21hc2s6CWZsYWdzIGZvciB0aGUgcGFnZSBsZXZlbCBhbGxvY2F0b3IKICAqCUBwcm90OgkJcHJvdGVjdGlvbiBtYXNrIGZvciB0aGUgYWxsb2NhdGVkIHBhZ2VzCkBAIC01MDUsOSArNDk5LDcgQEAKIAogLyoqCiAgKgl2bWFsbG9jICAtICBhbGxvY2F0ZSB2aXJ0dWFsbHkgY29udGlndW91cyBtZW1vcnkKLSAqCiAgKglAc2l6ZToJCWFsbG9jYXRpb24gc2l6ZQotICoKICAqCUFsbG9jYXRlIGVub3VnaCBwYWdlcyB0byBjb3ZlciBAc2l6ZSBmcm9tIHRoZSBwYWdlIGxldmVsCiAgKglhbGxvY2F0b3IgYW5kIG1hcCB0aGVtIGludG8gY29udGlndW91cyBrZXJuZWwgdmlydHVhbCBzcGFjZS4KICAqCkBAIC01MjEsMTEgKzUxMywxMSBAQAogRVhQT1JUX1NZTUJPTCh2bWFsbG9jKTsKIAogLyoqCi0gKgl2bWFsbG9jX3VzZXIgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeSB3aGljaCBoYXMKLSAqCQkJICAgYmVlbiB6ZXJvZWQgc28gaXQgY2FuIGJlIG1hcHBlZCB0byB1c2Vyc3BhY2Ugd2l0aG91dAotICoJCQkgICBsZWFraW5nIGRhdGEuCisgKiB2bWFsbG9jX3VzZXIgLSBhbGxvY2F0ZSB6ZXJvZWQgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5IGZvciB1c2Vyc3BhY2UKKyAqIEBzaXplOiBhbGxvY2F0aW9uIHNpemUKICAqCi0gKglAc2l6ZToJCWFsbG9jYXRpb24gc2l6ZQorICogVGhlIHJlc3VsdGluZyBtZW1vcnkgYXJlYSBpcyB6ZXJvZWQgc28gaXQgY2FuIGJlIG1hcHBlZCB0byB1c2Vyc3BhY2UKKyAqIHdpdGhvdXQgbGVha2luZyBkYXRhLgogICovCiB2b2lkICp2bWFsbG9jX3VzZXIodW5zaWduZWQgbG9uZyBzaXplKQogewpAQCAtNTQ0LDcgKzUzNiw2IEBACiAKIC8qKgogICoJdm1hbGxvY19ub2RlICAtICBhbGxvY2F0ZSBtZW1vcnkgb24gYSBzcGVjaWZpYyBub2RlCi0gKgogICoJQHNpemU6CQlhbGxvY2F0aW9uIHNpemUKICAqCUBub2RlOgkJbnVtYSBub2RlCiAgKgpAQCAtNTY2LDcgKzU1Nyw2IEBACiAKIC8qKgogICoJdm1hbGxvY19leGVjICAtICBhbGxvY2F0ZSB2aXJ0dWFsbHkgY29udGlndW91cywgZXhlY3V0YWJsZSBtZW1vcnkKLSAqCiAgKglAc2l6ZToJCWFsbG9jYXRpb24gc2l6ZQogICoKICAqCUtlcm5lbC1pbnRlcm5hbCBmdW5jdGlvbiB0byBhbGxvY2F0ZSBlbm91Z2ggcGFnZXMgdG8gY292ZXIgQHNpemUKQEAgLTU4NCw3ICs1NzQsNiBAQAogCiAvKioKICAqCXZtYWxsb2NfMzIgIC0gIGFsbG9jYXRlIHZpcnR1YWxseSBjb250aWd1b3VzIG1lbW9yeSAoMzJiaXQgYWRkcmVzc2FibGUpCi0gKgogICoJQHNpemU6CQlhbGxvY2F0aW9uIHNpemUKICAqCiAgKglBbGxvY2F0ZSBlbm91Z2ggMzJiaXQgUEEgYWRkcmVzc2FibGUgcGFnZXMgdG8gY292ZXIgQHNpemUgZnJvbSB0aGUKQEAgLTU5NywxMSArNTg2LDExIEBACiBFWFBPUlRfU1lNQk9MKHZtYWxsb2NfMzIpOwogCiAvKioKLSAqCXZtYWxsb2NfMzJfdXNlciAgLSAgYWxsb2NhdGUgdmlydHVhbGx5IGNvbnRpZ3VvdXMgbWVtb3J5ICgzMmJpdAotICoJCQkgICAgICBhZGRyZXNzYWJsZSkgd2hpY2ggaXMgemVyb2VkIHNvIGl0IGNhbiBiZQotICoJCQkgICAgICBtYXBwZWQgdG8gdXNlcnNwYWNlIHdpdGhvdXQgbGVha2luZyBkYXRhLgotICoKKyAqIHZtYWxsb2NfMzJfdXNlciAtIGFsbG9jYXRlIHplcm9lZCB2aXJ0dWFsbHkgY29udGlndW91cyAzMmJpdCBtZW1vcnkKICAqCUBzaXplOgkJYWxsb2NhdGlvbiBzaXplCisgKgorICogVGhlIHJlc3VsdGluZyBtZW1vcnkgYXJlYSBpcyAzMmJpdCBhZGRyZXNzYWJsZSBhbmQgemVyb2VkIHNvIGl0IGNhbiBiZQorICogbWFwcGVkIHRvIHVzZXJzcGFjZSB3aXRob3V0IGxlYWtpbmcgZGF0YS4KICAqLwogdm9pZCAqdm1hbGxvY18zMl91c2VyKHVuc2lnbmVkIGxvbmcgc2l6ZSkKIHsKQEAgLTY5NSw3ICs2ODQsNiBAQAogCiAvKioKICAqCXJlbWFwX3ZtYWxsb2NfcmFuZ2UgIC0gIG1hcCB2bWFsbG9jIHBhZ2VzIHRvIHVzZXJzcGFjZQotICoKICAqCUB2bWE6CQl2bWEgdG8gY292ZXIgKG1hcCBmdWxsIHJhbmdlIG9mIHZtYSkKICAqCUBhZGRyOgkJdm1hbGxvYyBtZW1vcnkKICAqCUBwZ29mZjoJCW51bWJlciBvZiBwYWdlcyBpbnRvIGFkZHIgYmVmb3JlIGZpcnN0IHBhZ2UgdG8gbWFwCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDg3Nzc5ZGQuLmVjYTcwMzEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xOSw2ICsxOSw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvdm1zdGF0Lmg+CiAjaW5jbHVkZSA8bGludXgvZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3dyaXRlYmFjay5oPgogI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgpAQCAtMzcwLDcgKzM3MSw3IEBACiAJCQkvKiBzeW5jaHJvbm91cyB3cml0ZSBvciBicm9rZW4gYV9vcHM/ICovCiAJCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwogCQl9Ci0KKwkJaW5jX3pvbmVfcGFnZV9zdGF0ZShwYWdlLCBOUl9WTVNDQU5fV1JJVEUpOwogCQlyZXR1cm4gUEFHRV9TVUNDRVNTOwogCX0KIApAQCAtMzgzLDExICszODQsMzAgQEAKIAlCVUdfT04obWFwcGluZyAhPSBwYWdlX21hcHBpbmcocGFnZSkpOwogCiAJd3JpdGVfbG9ja19pcnEoJm1hcHBpbmctPnRyZWVfbG9jayk7Ci0KIAkvKgotCSAqIFRoZSBub24tcmFjeSBjaGVjayBmb3IgYnVzeSBwYWdlLiAgSXQgaXMgY3JpdGljYWwgdG8gY2hlY2sKLQkgKiBQYWdlRGlydHkgX2FmdGVyXyBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIGlzIGZyZWVhYmxlIGFuZAotCSAqIG5vdCBpbiB1c2UgYnkgYW55Ym9keS4gCShwYWdlY2FjaGUgKyB1cyA9PSAyKQorCSAqIFRoZSBub24gcmFjeSBjaGVjayBmb3IgYSBidXN5IHBhZ2UuCisJICoKKwkgKiBNdXN0IGJlIGNhcmVmdWwgd2l0aCB0aGUgb3JkZXIgb2YgdGhlIHRlc3RzLiBXaGVuIHNvbWVvbmUgaGFzCisJICogYSByZWYgdG8gdGhlIHBhZ2UsIGl0IG1heSBiZSBwb3NzaWJsZSB0aGF0IHRoZXkgZGlydHkgaXQgdGhlbgorCSAqIGRyb3AgdGhlIHJlZmVyZW5jZS4gU28gaWYgUGFnZURpcnR5IGlzIHRlc3RlZCBiZWZvcmUgcGFnZV9jb3VudAorCSAqIGhlcmUsIHRoZW4gdGhlIGZvbGxvd2luZyByYWNlIG1heSBvY2N1cjoKKwkgKgorCSAqIGdldF91c2VyX3BhZ2VzKCZwYWdlKTsKKwkgKiBbdXNlciBtYXBwaW5nIGdvZXMgYXdheV0KKwkgKiB3cml0ZV90byhwYWdlKTsKKwkgKgkJCQkhUGFnZURpcnR5KHBhZ2UpICAgIFtnb29kXQorCSAqIFNldFBhZ2VEaXJ0eShwYWdlKTsKKwkgKiBwdXRfcGFnZShwYWdlKTsKKwkgKgkJCQkhcGFnZV9jb3VudChwYWdlKSAgIFtnb29kLCBkaXNjYXJkIGl0XQorCSAqCisJICogW29vcHMsIG91ciB3cml0ZV90byBkYXRhIGlzIGxvc3RdCisJICoKKwkgKiBSZXZlcnNpbmcgdGhlIG9yZGVyIG9mIHRoZSB0ZXN0cyBlbnN1cmVzIHN1Y2ggYSBzaXR1YXRpb24gY2Fubm90CisJICogZXNjYXBlIHVubm90aWNlZC4gVGhlIHNtcF9ybWIgaXMgbmVlZGVkIHRvIGVuc3VyZSB0aGUgcGFnZS0+ZmxhZ3MKKwkgKiBsb2FkIGlzIG5vdCBzYXRpc2ZpZWQgYmVmb3JlIHRoYXQgb2YgcGFnZS0+X2NvdW50LgorCSAqCisJICogTm90ZSB0aGF0IGlmIFNldFBhZ2VEaXJ0eSBpcyBhbHdheXMgcGVyZm9ybWVkIHZpYSBzZXRfcGFnZV9kaXJ0eSwKKwkgKiBhbmQgdGh1cyB1bmRlciB0cmVlX2xvY2ssIHRoZW4gdGhpcyBvcmRlcmluZyBpcyBub3QgcmVxdWlyZWQuCiAJICovCiAJaWYgKHVubGlrZWx5KHBhZ2VfY291bnQocGFnZSkgIT0gMikpCiAJCWdvdG8gY2Fubm90X2ZyZWU7CmRpZmYgLS1naXQgYS9tbS92bXN0YXQuYyBiL21tL3Ztc3RhdC5jCmluZGV4IDQ5MGQ4YzEuLmEyYjZhOWYgMTAwNjQ0Ci0tLSBhL21tL3Ztc3RhdC5jCisrKyBiL21tL3Ztc3RhdC5jCkBAIC0zNzEsNyArMzcxLDcgQEAKIAkJX19pbmNfem9uZV9zdGF0ZSh6LCBOVU1BX01JU1MpOwogCQlfX2luY196b25lX3N0YXRlKHpvbmVsaXN0LT56b25lc1swXSwgTlVNQV9GT1JFSUdOKTsKIAl9Ci0JaWYgKHotPnpvbmVfcGdkYXQgPT0gTk9ERV9EQVRBKG51bWFfbm9kZV9pZCgpKSkKKwlpZiAoei0+bm9kZSA9PSBudW1hX25vZGVfaWQoKSkKIAkJX19pbmNfem9uZV9zdGF0ZSh6LCBOVU1BX0xPQ0FMKTsKIAllbHNlCiAJCV9faW5jX3pvbmVfc3RhdGUoeiwgTlVNQV9PVEhFUik7CkBAIC00NjUsNiArNDY1LDcgQEAKIAkibnJfd3JpdGViYWNrIiwKIAkibnJfdW5zdGFibGUiLAogCSJucl9ib3VuY2UiLAorCSJucl92bXNjYW5fd3JpdGUiLAogCiAjaWZkZWYgQ09ORklHX05VTUEKIAkibnVtYV9oaXQiLApkaWZmIC0tZ2l0IGEvbmV0LzgwMi90ci5jIGIvbmV0LzgwMi90ci5jCmluZGV4IGQ3ZDhmNDAuLjgyOWRlYjQgMTAwNjQ0Ci0tLSBhL25ldC84MDIvdHIuYworKysgYi9uZXQvODAyL3RyLmMKQEAgLTE2NCw3ICsxNjQsNyBAQAogCSAqLwogCSAKIAlpZih0cmxsYy0+ZXRoZXJ0eXBlICE9IGh0b25zKEVUSF9QX0lQKSkgewotCQlwcmludGsoInRyX3JlYnVpbGRfaGVhZGVyOiBEb24ndCBrbm93IGhvdyB0byByZXNvbHZlIHR5cGUgJTA0WCBhZGRyZXNzZXMgP1xuIiwodW5zaWduZWQgaW50KWh0b25zKHRybGxjLT5ldGhlcnR5cGUpKTsKKwkJcHJpbnRrKCJ0cl9yZWJ1aWxkX2hlYWRlcjogRG9uJ3Qga25vdyBob3cgdG8gcmVzb2x2ZSB0eXBlICUwNFggYWRkcmVzc2VzID9cbiIsIG50b2hzKHRybGxjLT5ldGhlcnR5cGUpKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0xODYsNyArMTg2LDcgQEAKICAqCWl0IHZpYSBTTkFQLgogICovCiAgCi11bnNpZ25lZCBzaG9ydCB0cl90eXBlX3RyYW5zKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpIAorX19iZTE2IHRyX3R5cGVfdHJhbnMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAogCXN0cnVjdCB0cmhfaGRyICp0cmg9KHN0cnVjdCB0cmhfaGRyICopc2tiLT5kYXRhOwpAQCAtMjI5LDE1ICsyMjksMTUgQEAKIAkgKi8KIAogCWlmICh0cmxsYy0+ZHNhcCA9PSBFWFRFTkRFRF9TQVAgJiYKLQkgICAgKHRybGxjLT5ldGhlcnR5cGUgPT0gbnRvaHMoRVRIX1BfSVApIHx8Ci0JICAgICB0cmxsYy0+ZXRoZXJ0eXBlID09IG50b2hzKEVUSF9QX0lQVjYpIHx8Ci0JICAgICB0cmxsYy0+ZXRoZXJ0eXBlID09IG50b2hzKEVUSF9QX0FSUCkpKQorCSAgICAodHJsbGMtPmV0aGVydHlwZSA9PSBodG9ucyhFVEhfUF9JUCkgfHwKKwkgICAgIHRybGxjLT5ldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfSVBWNikgfHwKKwkgICAgIHRybGxjLT5ldGhlcnR5cGUgPT0gaHRvbnMoRVRIX1BfQVJQKSkpCiAJewogCQlza2JfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgdHJsbGMpKTsKIAkJcmV0dXJuIHRybGxjLT5ldGhlcnR5cGU7CiAJfQogCi0JcmV0dXJuIG50b2hzKEVUSF9QX1RSXzgwMl8yKTsKKwlyZXR1cm4gaHRvbnMoRVRIX1BfVFJfODAyXzIpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L0tjb25maWcgYi9uZXQvS2NvbmZpZwppbmRleCA2NTI4YTkzNS4uYTgxYWNhNCAxMDA2NDQKLS0tIGEvbmV0L0tjb25maWcKKysrIGIvbmV0L0tjb25maWcKQEAgLTIzMSw3ICsyMzEsNyBAQAogCVRDUCBjb25nZXN0aW9uIGF2b2lkYW5jZSBtb2R1bGVzLiBJZiB5b3UgZG9uJ3QgdW5kZXJzdGFuZAogCXdoYXQgd2FzIGp1c3Qgc2FpZCwgeW91IGRvbid0IG5lZWQgaXQ6IHNheSBOLgogCi0JRG9jdW1lbnRhdGlvbiBvbiBob3cgdG8gdXNlIHRoZSBwYWNrZXQgZ2VuZXJhdG9yIGNhbiBiZSBmb3VuZAorCURvY3VtZW50YXRpb24gb24gaG93IHRvIHVzZSBUQ1AgY29ubmVjdGlvbiBwcm9iaW5nIGNhbiBiZSBmb3VuZAogCWF0IGh0dHA6Ly9saW51eC1uZXQub3NkbC5vcmcvaW5kZXgucGhwL1RjcFByb2JlCiAKIAlUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCmRpZmYgLS1naXQgYS9uZXQvYXBwbGV0YWxrL2RkcC5jIGIvbmV0L2FwcGxldGFsay9kZHAuYwppbmRleCA5NmRjNmJiLi43MDhlMmUwIDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2RkcC5jCisrKyBiL25ldC9hcHBsZXRhbGsvZGRwLmMKQEAgLTEwMDIsNyArMTAwMiw3IEBACiAJcmV0dXJuIHN1bTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGF0YWxrX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCitzdGF0aWMgX19iZTE2IGF0YWxrX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBzdW07CiAKQEAgLTEwMTAsNyArMTAxMCw3IEBACiAJc3VtID0gYXRhbGtfc3VtX3NrYihza2IsIDQsIGxlbi00LCAwKTsKIAogCS8qIFVzZSAweEZGRkYgZm9yIDAuIDAgaXRzZWxmIG1lYW5zIG5vbmUgKi8KLQlyZXR1cm4gc3VtID8gaHRvbnMoKHVuc2lnbmVkIHNob3J0KXN1bSkgOiAweEZGRkY7CisJcmV0dXJuIHN1bSA/IGh0b25zKCh1bnNpZ25lZCBzaG9ydClzdW0pIDogaHRvbnMoMHhGRkZGKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwcm90byBkZHBfcHJvdG8gPSB7CkBAIC0xMjg5LDcgKzEyODksNyBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkIGF0YWxrX3JvdXRlX3BhY2tldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAotCQkJICAgICAgIHN0cnVjdCBkZHBlaGRyICpkZHAsIHN0cnVjdCBkZHBlYml0cyAqZGRwaHYsCisJCQkgICAgICAgc3RydWN0IGRkcGVoZHIgKmRkcCwgX191MTYgbGVuX2hvcHMsCiAJCQkgICAgICAgaW50IG9yaWdsZW4pCiB7CiAJc3RydWN0IGF0YWxrX3JvdXRlICpydDsKQEAgLTEzMTcsMTAgKzEzMTcsMTIgQEAKIAogCS8qIFJvdXRlIHRoZSBwYWNrZXQgKi8KIAlydCA9IGF0cnRyX2ZpbmQoJnRhKTsKLQlpZiAoIXJ0IHx8IGRkcGh2LT5kZWhfaG9wcyA9PSBERFBfTUFYSE9QUykKKwkvKiBpbmNyZW1lbnQgaG9wcyBjb3VudCAqLworCWxlbl9ob3BzICs9IDEgPDwgMTA7CisJaWYgKCFydCB8fCAhKGxlbl9ob3BzICYgKDE1IDw8IDEwKSkpCiAJCWdvdG8gZnJlZV9pdDsKKwogCS8qIEZJWE1FOiB1c2Ugc2tiLT5jYiB0byBiZSBhYmxlIHRvIHVzZSBzaGFyZWQgc2ticyAqLwotCWRkcGh2LT5kZWhfaG9wcysrOwogCiAJLyoKIAkgKiBSb3V0ZSBnb2VzIHRocm91Z2ggYW5vdGhlciBnYXRld2F5LCBzbyBzZXQgdGhlIHRhcmdldCB0byB0aGUKQEAgLTEzMzUsMTEgKzEzMzcsMTAgQEAKICAgICAgICAgLyogRml4IHVwIHNrYi0+bGVuIGZpZWxkICovCiAgICAgICAgIHNrYl90cmltKHNrYiwgbWluX3QodW5zaWduZWQgaW50LCBvcmlnbGVuLAogCQkJICAgIChydC0+ZGV2LT5oYXJkX2hlYWRlcl9sZW4gKwotCQkJICAgICBkZHBfZGwtPmhlYWRlcl9sZW5ndGggKyBkZHBodi0+ZGVoX2xlbikpKTsKKwkJCSAgICAgZGRwX2RsLT5oZWFkZXJfbGVuZ3RoICsgKGxlbl9ob3BzICYgMTAyMykpKSk7CiAKLQkvKiBNZW5kIHRoZSBieXRlIG9yZGVyICovCiAJLyogRklYTUU6IHVzZSBza2ItPmNiIHRvIGJlIGFibGUgdG8gdXNlIHNoYXJlZCBza2JzICovCi0JKigoX191MTYgKilkZHApID0gbnRvaHMoKigoX191MTYgKilkZHBodikpOworCWRkcC0+ZGVoX2xlbl9ob3BzID0gaHRvbnMobGVuX2hvcHMpOwogCiAJLyoKIAkgKiBTZW5kIHRoZSBidWZmZXIgb253YXJkcwpAQCAtMTM5NCw3ICsxMzk1LDcgQEAKIAlzdHJ1Y3QgYXRhbGtfaWZhY2UgKmF0aWY7CiAJc3RydWN0IHNvY2thZGRyX2F0IHRvc2F0OwogICAgICAgICBpbnQgb3JpZ2xlbjsKLSAgICAgICAgc3RydWN0IGRkcGViaXRzIGRkcGh2OworCV9fdTE2IGxlbl9ob3BzOwogCiAJLyogRG9uJ3QgbWFuZ2xlIGJ1ZmZlciBpZiBzaGFyZWQgKi8KIAlpZiAoIShza2IgPSBza2Jfc2hhcmVfY2hlY2soc2tiLCBHRlBfQVRPTUlDKSkpIApAQCAtMTQwNiwxNiArMTQwNywxMSBAQAogCiAJZGRwID0gZGRwX2hkcihza2IpOwogCi0JLyoKLQkgKglGaXggdXAgdGhlIGxlbmd0aCBmaWVsZAlbT2sgdGhpcyBpcyBob3JyaWJsZSBidXQgb3RoZXJ3aXNlCi0JICoJSSBlbmQgdXAgd2l0aCB1bmlvbnMgb2YgYml0IGZpZWxkcyBhbmQgbWVzc3kgYml0IGZpZWxkIG9yZGVyCi0JICoJY29tcGlsZXIvZW5kaWFuIGRlcGVuZGVuY2llcy4uXQotCSAqLwotCSooKF9fdTE2ICopJmRkcGh2KSA9IG50b2hzKCooKF9fdTE2ICopZGRwKSk7CisJbGVuX2hvcHMgPSBudG9ocyhkZHAtPmRlaF9sZW5faG9wcyk7CiAKIAkvKiBUcmltIGJ1ZmZlciBpbiBjYXNlIG9mIHN0cmF5IHRyYWlsaW5nIGRhdGEgKi8KIAlvcmlnbGVuID0gc2tiLT5sZW47Ci0Jc2tiX3RyaW0oc2tiLCBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi0+bGVuLCBkZHBodi5kZWhfbGVuKSk7CisJc2tiX3RyaW0oc2tiLCBtaW5fdCh1bnNpZ25lZCBpbnQsIHNrYi0+bGVuLCBsZW5faG9wcyAmIDEwMjMpKTsKIAogCS8qCiAJICogU2l6ZSBjaGVjayB0byBzZWUgaWYgZGRwLT5kZWhfbGVuIHdhcyBjcmFwCkBAIC0xNDMwLDcgKzE0MjYsNyBAQAogCSAqIHZhbGlkIGZvciBuZXQgYnl0ZSBvcmRlcnMgYWxsIG92ZXIgdGhlIG5ldHdvcmtpbmcgY29kZS4uLgogCSAqLwogCWlmIChkZHAtPmRlaF9zdW0gJiYKLQkgICAgYXRhbGtfY2hlY2tzdW0oc2tiLCBkZHBodi5kZWhfbGVuKSAhPSBkZHAtPmRlaF9zdW0pCisJICAgIGF0YWxrX2NoZWNrc3VtKHNrYiwgbGVuX2hvcHMgJiAxMDIzKSAhPSBkZHAtPmRlaF9zdW0pCiAJCS8qIE5vdCBhIHZhbGlkIEFwcGxlVGFsayBmcmFtZSAtIGR1c3RiaW4gdGltZSAqLwogCQlnb3RvIGZyZWVpdDsKIApAQCAtMTQ0NCw3ICsxNDQwLDcgQEAKIAkJLyogTm90IG91cnMsIHNvIHdlIHJvdXRlIHRoZSBwYWNrZXQgdmlhIHRoZSBjb3JyZWN0CiAJCSAqIEFwcGxlVGFsayBpZmFjZQogCQkgKi8KLQkJYXRhbGtfcm91dGVfcGFja2V0KHNrYiwgZGV2LCBkZHAsICZkZHBodiwgb3JpZ2xlbik7CisJCWF0YWxrX3JvdXRlX3BhY2tldChza2IsIGRldiwgZGRwLCBsZW5faG9wcywgb3JpZ2xlbik7CiAJCWdvdG8gb3V0OwogCX0KIApAQCAtMTQ4OSw3ICsxNDg1LDcgQEAKIAkJLyogRmluZCBvdXIgYWRkcmVzcyAqLwogCQlzdHJ1Y3QgYXRhbGtfYWRkciAqYXAgPSBhdGFsa19maW5kX2Rldl9hZGRyKGRldik7CiAKLQkJaWYgKCFhcCB8fCBza2ItPmxlbiA8IHNpemVvZihzdHJ1Y3QgZGRwc2hkcikpCisJCWlmICghYXAgfHwgc2tiLT5sZW4gPCBzaXplb2YoX19iZTE2KSB8fCBza2ItPmxlbiA+IDEwMjMpCiAJCQlnb3RvIGZyZWVpdDsKIAogCQkvKiBEb24ndCBtYW5nbGUgYnVmZmVyIGlmIHNoYXJlZCAqLwpAQCAtMTUxOSwxMSArMTUxNSw4IEBACiAJCS8qCiAJCSAqIE5vdCBzdXJlIGFib3V0IHRoaXMgYml0Li4uCiAJCSAqLwotCQlkZHAtPmRlaF9sZW4gICA9IHNrYi0+bGVuOwotCQlkZHAtPmRlaF9ob3BzICA9IEREUF9NQVhIT1BTOwkvKiBOb24gcm91dGFibGUsIHNvIGZvcmNlIGEgZHJvcAotCQkJCQkJICAgaWYgd2Ugc2xpcCB1cCBsYXRlciAqLwotCQkvKiBNZW5kIHRoZSBieXRlIG9yZGVyICovCi0JCSooKF9fdTE2ICopZGRwKSA9IGh0b25zKCooKF9fdTE2ICopZGRwKSk7CisJCS8qIE5vbiByb3V0YWJsZSwgc28gZm9yY2UgYSBkcm9wIGlmIHdlIHNsaXAgdXAgbGF0ZXIgKi8KKwkJZGRwLT5kZWhfbGVuX2hvcHMgPSBodG9ucyhza2ItPmxlbiArIChERFBfTUFYSE9QUyA8PCAxMCkpOwogCX0KIAlza2ItPmgucmF3ID0gc2tiLT5kYXRhOwogCkBAIC0xNjIyLDE2ICsxNjE1LDcgQEAKIAlTT0NLX0RFQlVHKHNrLCAiU0sgJXA6IEJlZ2luIGJ1aWxkLlxuIiwgc2spOwogCiAJZGRwID0gKHN0cnVjdCBkZHBlaGRyICopc2tiX3B1dChza2IsIHNpemVvZihzdHJ1Y3QgZGRwZWhkcikpOwotCWRkcC0+ZGVoX3BhZCAgPSAwOwotCWRkcC0+ZGVoX2hvcHMgPSAwOwotCWRkcC0+ZGVoX2xlbiAgPSBsZW4gKyBzaXplb2YoKmRkcCk7Ci0JLyoKLQkgKiBGaXggdXAgdGhlIGxlbmd0aCBmaWVsZCBbT2sgdGhpcyBpcyBob3JyaWJsZSBidXQgb3RoZXJ3aXNlCi0JICogSSBlbmQgdXAgd2l0aCB1bmlvbnMgb2YgYml0IGZpZWxkcyBhbmQgbWVzc3kgYml0IGZpZWxkIG9yZGVyCi0JICogY29tcGlsZXIvZW5kaWFuIGRlcGVuZGVuY2llcy4uCi0JICovCi0JKigoX191MTYgKilkZHApID0gbnRvaHMoKigoX191MTYgKilkZHApKTsKLQorCWRkcC0+ZGVoX2xlbl9ob3BzICA9IGh0b25zKGxlbiArIHNpemVvZigqZGRwKSk7CiAJZGRwLT5kZWhfZG5ldCAgPSB1c2F0LT5zYXRfYWRkci5zX25ldDsKIAlkZHAtPmRlaF9zbmV0ICA9IGF0LT5zcmNfbmV0OwogCWRkcC0+ZGVoX2Rub2RlID0gdXNhdC0+c2F0X2FkZHIuc19ub2RlOwpAQCAtMTcxMiw4ICsxNjk2LDggQEAKIAlzdHJ1Y3Qgc29ja2FkZHJfYXQgKnNhdCA9IChzdHJ1Y3Qgc29ja2FkZHJfYXQgKiltc2ctPm1zZ19uYW1lOwogCXN0cnVjdCBkZHBlaGRyICpkZHA7CiAJaW50IGNvcGllZCA9IDA7CisJaW50IG9mZnNldCA9IDA7CiAJaW50IGVyciA9IDA7Ci0gICAgICAgIHN0cnVjdCBkZHBlYml0cyBkZHBodjsKIAlzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzICYgfk1TR19ET05UV0FJVCwKIAkJCQkJCWZsYWdzICYgTVNHX0RPTlRXQUlULCAmZXJyKTsKIAlpZiAoIXNrYikKQEAgLTE3MjEsMjYgKzE3MDUsMTkgQEAKIAogCS8qIEZJWE1FOiB1c2Ugc2tiLT5jYiB0byBiZSBhYmxlIHRvIHVzZSBzaGFyZWQgc2ticyAqLwogCWRkcCA9IGRkcF9oZHIoc2tiKTsKLQkqKChfX3UxNiAqKSZkZHBodikgPSBudG9ocygqKChfX3UxNiAqKWRkcCkpOworCWNvcGllZCA9IG50b2hzKGRkcC0+ZGVoX2xlbl9ob3BzKSAmIDEwMjM7CiAKLQlpZiAoc2stPnNrX3R5cGUgPT0gU09DS19SQVcpIHsKLQkJY29waWVkID0gZGRwaHYuZGVoX2xlbjsKLQkJaWYgKGNvcGllZCA+IHNpemUpIHsKLQkJCWNvcGllZCA9IHNpemU7Ci0JCQltc2ctPm1zZ19mbGFncyB8PSBNU0dfVFJVTkM7Ci0JCX0KLQotCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIDAsIG1zZy0+bXNnX2lvdiwgY29waWVkKTsKLQl9IGVsc2UgewotCQljb3BpZWQgPSBkZHBodi5kZWhfbGVuIC0gc2l6ZW9mKCpkZHApOwotCQlpZiAoY29waWVkID4gc2l6ZSkgewotCQkJY29waWVkID0gc2l6ZTsKLQkJCW1zZy0+bXNnX2ZsYWdzIHw9IE1TR19UUlVOQzsKLQkJfQotCQllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIHNpemVvZigqZGRwKSwKLQkJCQkJICAgICAgbXNnLT5tc2dfaW92LCBjb3BpZWQpOworCWlmIChzay0+c2tfdHlwZSAhPSBTT0NLX1JBVykgeworCQlvZmZzZXQgPSBzaXplb2YoKmRkcCk7CisJCWNvcGllZCAtPSBvZmZzZXQ7CiAJfQogCisJaWYgKGNvcGllZCA+IHNpemUpIHsKKwkJY29waWVkID0gc2l6ZTsKKwkJbXNnLT5tc2dfZmxhZ3MgfD0gTVNHX1RSVU5DOworCX0KKwllcnIgPSBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhza2IsIG9mZnNldCwgbXNnLT5tc2dfaW92LCBjb3BpZWQpOworCiAJaWYgKCFlcnIpIHsKIAkJaWYgKHNhdCkgewogCQkJc2F0LT5zYXRfZmFtaWx5ICAgICAgPSBBRl9BUFBMRVRBTEs7CmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlYy5jIGIvbmV0L2F0bS9sZWMuYwppbmRleCBiNGFhNDg5Li42NmM1N2MxIDEwMDY0NAotLS0gYS9uZXQvYXRtL2xlYy5jCisrKyBiL25ldC9hdG0vbGVjLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogbGVjLmM6IExhbiBFbXVsYXRpb24gZHJpdmVyIAotICogTWFya28gS2lpc2tpbGEgbWtpaXNraWxhQHlhaG9vLmNvbQogICoKKyAqIE1hcmtvIEtpaXNraWxhIDxta2lpc2tpbGFAeWFob28uY29tPgogICovCiAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KQEAgLTM4LDcgKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9pZl9icmlkZ2UuaD4KICNpbmNsdWRlICIuLi9icmlkZ2UvYnJfcHJpdmF0ZS5oIgogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBicmlkZ2VfdWxhX2xlY1tdID0gezB4MDEsIDB4ODAsIDB4YzIsIDB4MDAsIDB4MDB9Oworc3RhdGljIHVuc2lnbmVkIGNoYXIgYnJpZGdlX3VsYV9sZWNbXSA9IHsgMHgwMSwgMHg4MCwgMHhjMiwgMHgwMCwgMHgwMCB9OwogI2VuZGlmCiAKIC8qIE1vZHVsYXIgdG9vICovCkBAIC01NSwzOCArNTUsNDEgQEAKICNkZWZpbmUgRFBSSU5USyhmb3JtYXQsYXJncy4uLikKICNlbmRpZgogCi0jZGVmaW5lIERVTVBfUEFDS0VUUyAwIC8qIDAgPSBOb25lLAotICAgICAgICAgICAgICAgICAgICAgICAgKiAxID0gMzAgZmlyc3QgYnl0ZXMKLSAgICAgICAgICAgICAgICAgICAgICAgICogMiA9IFdob2xlIHBhY2tldAotICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRFVNUF9QQUNLRVRTIDAJCS8qCisJCQkJICogMCA9IE5vbmUsCisJCQkJICogMSA9IDMwIGZpcnN0IGJ5dGVzCisJCQkJICogMiA9IFdob2xlIHBhY2tldAorCQkJCSAqLwogCi0jZGVmaW5lIExFQ19VTlJFU19RVUVfTEVOIDggLyogbnVtYmVyIG9mIHR4IHBhY2tldHMgdG8gcXVldWUgZm9yIGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5nbGUgZGVzdGluYXRpb24gd2hpbGUgd2FpdGluZyBmb3IgU1ZDICovCisjZGVmaW5lIExFQ19VTlJFU19RVUVfTEVOIDgJLyoKKwkJCQkgKiBudW1iZXIgb2YgdHggcGFja2V0cyB0byBxdWV1ZSBmb3IgYQorCQkJCSAqIHNpbmdsZSBkZXN0aW5hdGlvbiB3aGlsZSB3YWl0aW5nIGZvciBTVkMKKwkJCQkgKi8KIAogc3RhdGljIGludCBsZWNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBpbnQgbGVjX3N0YXJ0X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBzdGF0aWMgaW50IGxlY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqbGVjX2dldF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIHN0YXRpYyB2b2lkIGxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwotc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlKiBsZWNfYXJwX2ZpbmQoc3RydWN0IGxlY19wcml2ICpwcml2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICptYWNfYWRkcik7CitzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpOwogc3RhdGljIGludCBsZWNfYXJwX3JlbW92ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0JCQkJICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fcmVtb3ZlKTsKKwkJCSAgc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX3JlbW92ZSk7CiAvKiBMQU5FMiBmdW5jdGlvbnMgKi8KLXN0YXRpYyB2b2lkIGxhbmUyX2Fzc29jaWF0ZV9pbmQgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICptYWNfYWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKK3N0YXRpYyB2b2lkIGxhbmUyX2Fzc29jaWF0ZV9pbmQoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hY19hZGRyZXNzLAorCQkJCXU4ICp0bHZzLCB1MzIgc2l6ZW9mdGx2cyk7CiBzdGF0aWMgaW50IGxhbmUyX3Jlc29sdmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKLSAgICAgICAgICAgICAgICAgIHU4ICoqdGx2cywgdTMyICpzaXplb2Z0bHZzKTsKLXN0YXRpYyBpbnQgbGFuZTJfYXNzb2NpYXRlX3JlcSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKKwkJCSB1OCAqKnRsdnMsIHUzMiAqc2l6ZW9mdGx2cyk7CitzdGF0aWMgaW50IGxhbmUyX2Fzc29jaWF0ZV9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCisJCQkgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKIAotc3RhdGljIGludCBsZWNfYWRkcl9kZWxldGUoc3RydWN0IGxlY19wcml2ICpwcml2LCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgCitzdGF0aWMgaW50IGxlY19hZGRyX2RlbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAogCQkJICAgdW5zaWduZWQgbG9uZyBwZXJtYW5lbnQpOwogc3RhdGljIHZvaWQgbGVjX2FycF9jaGVja19lbXB0aWVzKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCQkgIHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwogc3RhdGljIHZvaWQgbGVjX2FycF9kZXN0cm95KHN0cnVjdCBsZWNfcHJpdiAqcHJpdik7CiBzdGF0aWMgdm9pZCBsZWNfYXJwX2luaXQoc3RydWN0IGxlY19wcml2ICpwcml2KTsKLXN0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyogbGVjX2FycF9yZXNvbHZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKK3N0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqbGVjX2FycF9yZXNvbHZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKIAkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsCiAJCQkJICAgICAgIGludCBpc19yZGVzYywKIAkJCQkgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKipyZXRfZW50cnkpOwpAQCAtMTAwLDE2ICsxMDMsMzAgQEAKIAkJCQkgIHVuc2lnbmVkIGxvbmcgdHJhbl9pZCk7CiBzdGF0aWMgdm9pZCBsZWNfdmNjX2FkZGVkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bWxlY19pb2MgKmlvY19kYXRhLAogCQkJICBzdHJ1Y3QgYXRtX3ZjYyAqdmNjLAotCQkJICB2b2lkICgqb2xkX3B1c2gpKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpKTsKKwkJCSAgdm9pZCAoKm9sZF9wdXNoKSAoc3RydWN0IGF0bV92Y2MgKnZjYywKKwkJCQkJICAgIHN0cnVjdCBza19idWZmICpza2IpKTsKIHN0YXRpYyB2b2lkIGxlY192Y2NfY2xvc2Uoc3RydWN0IGxlY19wcml2ICpwcml2LCBzdHJ1Y3QgYXRtX3ZjYyAqdmNjKTsKIAorLyogbXVzdCBiZSBkb25lIHVuZGVyIGxlY19hcnBfbG9jayAqLworc3RhdGljIGlubGluZSB2b2lkIGxlY19hcnBfaG9sZChzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnkpCit7CisJYXRvbWljX2luYygmZW50cnktPnVzYWdlKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGxlY19hcnBfcHV0KHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSkKK3sKKwlpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmZW50cnktPnVzYWdlKSkKKwkJa2ZyZWUoZW50cnkpOworfQorCisKIHN0YXRpYyBzdHJ1Y3QgbGFuZTJfb3BzIGxhbmUyX29wcyA9IHsKLQlsYW5lMl9yZXNvbHZlLCAgICAgICAgIC8qIHJlc29sdmUsICAgICAgICAgICAgIHNwZWMgMy4xLjMgKi8KLQlsYW5lMl9hc3NvY2lhdGVfcmVxLCAgIC8qIGFzc29jaWF0ZV9yZXEsICAgICAgIHNwZWMgMy4xLjQgKi8KLQlOVUxMICAgICAgICAgICAgICAgICAgLyogYXNzb2NpYXRlIGluZGljYXRvciwgc3BlYyAzLjEuNSAqLworCWxhbmUyX3Jlc29sdmUsCQkvKiByZXNvbHZlLCAgICAgICAgICAgICBzcGVjIDMuMS4zICovCisJbGFuZTJfYXNzb2NpYXRlX3JlcSwJLyogYXNzb2NpYXRlX3JlcSwgICAgICAgc3BlYyAzLjEuNCAqLworCU5VTEwJCQkvKiBhc3NvY2lhdGUgaW5kaWNhdG9yLCBzcGVjIDMuMS41ICovCiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBidXNfbWFjW0VUSF9BTEVOXSA9IHsweGZmLDB4ZmYsMHhmZiwweGZmLDB4ZmYsMHhmZn07CitzdGF0aWMgdW5zaWduZWQgY2hhciBidXNfbWFjW0VUSF9BTEVOXSA9IHsgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwogCiAvKiBEZXZpY2Ugc3RydWN0dXJlcyAqLwogc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfbGVjW01BWF9MRUNfSVRGXTsKQEAgLTExNywzNiArMTM0LDM5IEBACiAjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19CUklER0VfTU9EVUxFKQogc3RhdGljIHZvaWQgbGVjX2hhbmRsZV9icmlkZ2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgc3RydWN0IGV0aGhkciAqZXRoOwotICAgICAgICBjaGFyICpidWZmOwotICAgICAgICBzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CisJc3RydWN0IGV0aGhkciAqZXRoOworCWNoYXIgKmJ1ZmY7CisJc3RydWN0IGxlY19wcml2ICpwcml2OwogCi0gICAgICAgIC8qIENoZWNrIGlmIHRoaXMgaXMgYSBCUERVLiBJZiBzbywgYXNrIHplcHBlbGluIHRvIHNlbmQKLSAgICAgICAgICogTEVfVE9QT0xPR1lfUkVRVUVTVCB3aXRoIHRoZSBzYW1lIHZhbHVlIG9mIFRvcG9sb2d5IENoYW5nZSBiaXQKLSAgICAgICAgICogYXMgdGhlIENvbmZpZyBCUERVIGhhcyAqLwotICAgICAgICBldGggPSAoc3RydWN0IGV0aGhkciAqKXNrYi0+ZGF0YTsKLSAgICAgICAgYnVmZiA9IHNrYi0+ZGF0YSArIHNrYi0+ZGV2LT5oYXJkX2hlYWRlcl9sZW47Ci0gICAgICAgIGlmICgqYnVmZisrID09IDB4NDIgJiYgKmJ1ZmYrKyA9PSAweDQyICYmICpidWZmKysgPT0gMHgwMykgeworCS8qCisJICogQ2hlY2sgaWYgdGhpcyBpcyBhIEJQRFUuIElmIHNvLCBhc2sgemVwcGVsaW4gdG8gc2VuZAorCSAqIExFX1RPUE9MT0dZX1JFUVVFU1Qgd2l0aCB0aGUgc2FtZSB2YWx1ZSBvZiBUb3BvbG9neSBDaGFuZ2UgYml0CisJICogYXMgdGhlIENvbmZpZyBCUERVIGhhcworCSAqLworCWV0aCA9IChzdHJ1Y3QgZXRoaGRyICopc2tiLT5kYXRhOworCWJ1ZmYgPSBza2ItPmRhdGEgKyBza2ItPmRldi0+aGFyZF9oZWFkZXJfbGVuOworCWlmICgqYnVmZisrID09IDB4NDIgJiYgKmJ1ZmYrKyA9PSAweDQyICYmICpidWZmKysgPT0gMHgwMykgewogCQlzdHJ1Y3Qgc29jayAqc2s7Ci0gICAgICAgICAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjI7Ci0gICAgICAgICAgICAgICAgc3RydWN0IGF0bWxlY19tc2cgKm1lc2c7CisJCXN0cnVjdCBza19idWZmICpza2IyOworCQlzdHJ1Y3QgYXRtbGVjX21zZyAqbWVzZzsKIAotICAgICAgICAgICAgICAgIHNrYjIgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwgR0ZQX0FUT01JQyk7Ci0gICAgICAgICAgICAgICAgaWYgKHNrYjIgPT0gTlVMTCkgcmV0dXJuOwotICAgICAgICAgICAgICAgIHNrYjItPmxlbiA9IHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyk7Ci0gICAgICAgICAgICAgICAgbWVzZyA9IChzdHJ1Y3QgYXRtbGVjX21zZyAqKXNrYjItPmRhdGE7Ci0gICAgICAgICAgICAgICAgbWVzZy0+dHlwZSA9IGxfdG9wb2xvZ3lfY2hhbmdlOwotICAgICAgICAgICAgICAgIGJ1ZmYgKz0gNDsKLSAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnID0gKmJ1ZmYgJiAweDAxOyAvKiAweDAxIGlzIHRvcG9sb2d5IGNoYW5nZSAqLworCQlza2IyID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyksIEdGUF9BVE9NSUMpOworCQlpZiAoc2tiMiA9PSBOVUxMKQorCQkJcmV0dXJuOworCQlza2IyLT5sZW4gPSBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpOworCQltZXNnID0gKHN0cnVjdCBhdG1sZWNfbXNnICopc2tiMi0+ZGF0YTsKKwkJbWVzZy0+dHlwZSA9IGxfdG9wb2xvZ3lfY2hhbmdlOworCQlidWZmICs9IDQ7CisJCW1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcgPSAqYnVmZiAmIDB4MDE7CS8qIDB4MDEgaXMgdG9wb2xvZ3kgY2hhbmdlICovCiAKLSAgICAgICAgICAgICAgICBwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKLSAgICAgICAgICAgICAgICBhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYjItPnRydWVzaXplKTsKKwkJcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7CisJCWF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgc2tiMi0+dHJ1ZXNpemUpOwogCQlzayA9IHNrX2F0bShwcml2LT5sZWNkKTsKLSAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYjIpOwotICAgICAgICAgICAgICAgIHNrLT5za19kYXRhX3JlYWR5KHNrLCBza2IyLT5sZW4pOwotICAgICAgICB9CisJCXNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiMik7CisJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2IyLT5sZW4pOworCX0KIAotICAgICAgICByZXR1cm47CisJcmV0dXJuOwogfQogI2VuZGlmIC8qIGRlZmluZWQoQ09ORklHX0JSSURHRSkgfHwgZGVmaW5lZChDT05GSUdfQlJJREdFX01PRFVMRSkgKi8KIApAQCAtMTYyLDM2ICsxODIsMzUgQEAKICNpZmRlZiBDT05GSUdfVFIKIHN0YXRpYyB1bnNpZ25lZCBjaGFyICpnZXRfdHJfZHN0KHVuc2lnbmVkIGNoYXIgKnBhY2tldCwgdW5zaWduZWQgY2hhciAqcmRlc2MpCiB7Ci0gICAgICAgIHN0cnVjdCB0cmhfaGRyICp0cmg7Ci0gICAgICAgIGludCByaWZsZW4sIG51bV9yZHNjOwotICAgICAgICAKLSAgICAgICAgdHJoID0gKHN0cnVjdCB0cmhfaGRyICopcGFja2V0OwotICAgICAgICBpZiAodHJoLT5kYWRkclswXSAmICh1aW50OF90KTB4ODApCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJ1c19tYWM7IC8qIG11bHRpY2FzdCAqLworCXN0cnVjdCB0cmhfaGRyICp0cmg7CisJaW50IHJpZmxlbiwgbnVtX3Jkc2M7CiAKLSAgICAgICAgaWYgKHRyaC0+c2FkZHJbMF0gJiBUUl9SSUkpIHsKLSAgICAgICAgICAgICAgICByaWZsZW4gPSAobnRvaHModHJoLT5yY2YpICYgVFJfUkNGX0xFTl9NQVNLKSA+PiA4OwotICAgICAgICAgICAgICAgIGlmICgobnRvaHModHJoLT5yY2YpID4+IDEzKSAhPSAwKQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJ1c19tYWM7IC8qIEFSRSBvciBTVEUgKi8KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRyaC0+ZGFkZHI7IC8qIG5vdCBzb3VyY2Ugcm91dGVkICovCisJdHJoID0gKHN0cnVjdCB0cmhfaGRyICopcGFja2V0OworCWlmICh0cmgtPmRhZGRyWzBdICYgKHVpbnQ4X3QpIDB4ODApCisJCXJldHVybiBidXNfbWFjOwkvKiBtdWx0aWNhc3QgKi8KIAotICAgICAgICBpZiAocmlmbGVuIDwgNikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJoLT5kYWRkcjsgLyogbGFzdCBob3AsIHNvdXJjZSByb3V0ZWQgKi8KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgLyogcmlmbGVuIGlzIDYgb3IgbW9yZSwgcGFja2V0IGhhcyBtb3JlIHRoYW4gb25lIHJvdXRlIGRlc2NyaXB0b3IgKi8KLSAgICAgICAgbnVtX3Jkc2MgPSAocmlmbGVuLzIpIC0gMTsKLSAgICAgICAgbWVtc2V0KHJkZXNjLCAwLCBFVEhfQUxFTik7Ci0gICAgICAgIC8qIG9mZnNldCA0IGNvbWVzIGZyb20gTEFOIGRlc3RpbmF0aW9uIGZpZWxkIGluIExFIGNvbnRyb2wgZnJhbWVzICovCi0gICAgICAgIGlmICh0cmgtPnJjZiAmIGh0b25zKCh1aW50MTZfdClUUl9SQ0ZfRElSX0JJVCkpCi0gICAgICAgICAgICAgICAgbWVtY3B5KCZyZGVzY1s0XSwgJnRyaC0+cnNlZ1tudW1fcmRzYy0yXSwgc2l6ZW9mKHVpbnQxNl90KSk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIG1lbWNweSgmcmRlc2NbNF0sICZ0cmgtPnJzZWdbMV0sIHNpemVvZih1aW50MTZfdCkpOwotICAgICAgICAgICAgICAgIHJkZXNjWzVdID0gKChudG9ocyh0cmgtPnJzZWdbMF0pICYgMHgwMDBmKSB8IChyZGVzY1s1XSAmIDB4ZjApKTsKLSAgICAgICAgfQorCWlmICh0cmgtPnNhZGRyWzBdICYgVFJfUklJKSB7CisJCXJpZmxlbiA9IChudG9ocyh0cmgtPnJjZikgJiBUUl9SQ0ZfTEVOX01BU0spID4+IDg7CisJCWlmICgobnRvaHModHJoLT5yY2YpID4+IDEzKSAhPSAwKQorCQkJcmV0dXJuIGJ1c19tYWM7CS8qIEFSRSBvciBTVEUgKi8KKwl9IGVsc2UKKwkJcmV0dXJuIHRyaC0+ZGFkZHI7CS8qIG5vdCBzb3VyY2Ugcm91dGVkICovCiAKLSAgICAgICAgcmV0dXJuIE5VTEw7CisJaWYgKHJpZmxlbiA8IDYpCisJCXJldHVybiB0cmgtPmRhZGRyOwkvKiBsYXN0IGhvcCwgc291cmNlIHJvdXRlZCAqLworCisJLyogcmlmbGVuIGlzIDYgb3IgbW9yZSwgcGFja2V0IGhhcyBtb3JlIHRoYW4gb25lIHJvdXRlIGRlc2NyaXB0b3IgKi8KKwludW1fcmRzYyA9IChyaWZsZW4gLyAyKSAtIDE7CisJbWVtc2V0KHJkZXNjLCAwLCBFVEhfQUxFTik7CisJLyogb2Zmc2V0IDQgY29tZXMgZnJvbSBMQU4gZGVzdGluYXRpb24gZmllbGQgaW4gTEUgY29udHJvbCBmcmFtZXMgKi8KKwlpZiAodHJoLT5yY2YgJiBodG9ucygodWludDE2X3QpIFRSX1JDRl9ESVJfQklUKSkKKwkJbWVtY3B5KCZyZGVzY1s0XSwgJnRyaC0+cnNlZ1tudW1fcmRzYyAtIDJdLCBzaXplb2YodWludDE2X3QpKTsKKwllbHNlIHsKKwkJbWVtY3B5KCZyZGVzY1s0XSwgJnRyaC0+cnNlZ1sxXSwgc2l6ZW9mKHVpbnQxNl90KSk7CisJCXJkZXNjWzVdID0gKChudG9ocyh0cmgtPnJzZWdbMF0pICYgMHgwMDBmKSB8IChyZGVzY1s1XSAmIDB4ZjApKTsKKwl9CisKKwlyZXR1cm4gTlVMTDsKIH0KICNlbmRpZiAvKiBDT05GSUdfVFIgKi8KIApAQCAtMjA0LDE1ICsyMjMsMTQgQEAKICAqIHRoZXJlIGlzIG5vbi1yZWJvb3Qgd2F5IHRvIHJlY292ZXIgaWYgc29tZXRoaW5nIGdvZXMgd3JvbmcuCiAgKi8KIAotc3RhdGljIGludCAKLWxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGxlY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0gICAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7Ci0gICAgICAgIAorCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7CisKIAluZXRpZl9zdGFydF9xdWV1ZShkZXYpOwotICAgICAgICBtZW1zZXQoJnByaXYtPnN0YXRzLDAsc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzKSk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gMDsKKwltZW1zZXQoJnByaXYtPnN0YXRzLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMpKTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgX19pbmxpbmVfXyB2b2lkCkBAIC0yMzEsMTYwICsyNDksMTY2IEBACiAJcHJpdi0+c3RhdHMudHhfYnl0ZXMgKz0gc2tiLT5sZW47CiB9CiAKLXN0YXRpYyB2b2lkCi1sZWNfdHhfdGltZW91dChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgbGVjX3R4X3RpbWVvdXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlwcmludGsoS0VSTl9JTkZPICIlczogdHggdGltZW91dFxuIiwgZGV2LT5uYW1lKTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKIAluZXRpZl93YWtlX3F1ZXVlKGRldik7CiB9CiAKLXN0YXRpYyBpbnQgCi1sZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBsZWNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKLSAgICAgICAgc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKLSAgICAgICAgc3RydWN0IGxlY2RhdGFoZHJfODAyMyAqbGVjX2g7Ci0gICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2M7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjI7CisJc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKKwlzdHJ1Y3QgbGVjZGF0YWhkcl84MDIzICpsZWNfaDsKKwlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKLSAgICAgICAgdW5zaWduZWQgY2hhciAqZHN0OworCXVuc2lnbmVkIGNoYXIgKmRzdDsKIAlpbnQgbWluX2ZyYW1lX3NpemU7CiAjaWZkZWYgQ09ORklHX1RSCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgcmRlc2NbRVRIX0FMRU5dOyAvKiBUb2tlbiBSaW5nIHJvdXRlIGRlc2NyaXB0b3IgKi8KKwl1bnNpZ25lZCBjaGFyIHJkZXNjW0VUSF9BTEVOXTsJLyogVG9rZW4gUmluZyByb3V0ZSBkZXNjcmlwdG9yICovCiAjZW5kaWYKLSAgICAgICAgaW50IGlzX3JkZXNjOworCWludCBpc19yZGVzYzsKICNpZiBEVU1QX1BBQ0tFVFMgPiAwCi0gICAgICAgIGNoYXIgYnVmWzMwMF07Ci0gICAgICAgIGludCBpPTA7CisJY2hhciBidWZbMzAwXTsKKwlpbnQgaSA9IDA7CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID4wICovCi0gICAgICAgIAotICAgICAgICBEUFJJTlRLKCJsZWNfc3RhcnRfeG1pdCBjYWxsZWRcbiIpOyAgCi0gICAgICAgIGlmICghcHJpdi0+bGVjZCkgewotICAgICAgICAgICAgICAgIHByaW50aygiJXM6Tm8gbGVjZCBhdHRhY2hlZFxuIixkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnR4X2Vycm9ycysrOwotICAgICAgICAgICAgICAgIG5ldGlmX3N0b3BfcXVldWUoZGV2KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVVTkFUQ0g7Ci0gICAgICAgIH0gCiAKLSAgICAgICAgRFBSSU5USygic2tidWZmIGhlYWQ6JWx4IGRhdGE6JWx4IHRhaWw6JWx4IGVuZDolbHhcbiIsCi0gICAgICAgICAgICAgICAgKGxvbmcpc2tiLT5oZWFkLCAobG9uZylza2ItPmRhdGEsIChsb25nKXNrYi0+dGFpbCwKLSAgICAgICAgICAgICAgICAobG9uZylza2ItPmVuZCk7CisJRFBSSU5USygibGVjX3N0YXJ0X3htaXQgY2FsbGVkXG4iKTsKKwlpZiAoIXByaXYtPmxlY2QpIHsKKwkJcHJpbnRrKCIlczpObyBsZWNkIGF0dGFjaGVkXG4iLCBkZXYtPm5hbWUpOworCQlwcml2LT5zdGF0cy50eF9lcnJvcnMrKzsKKwkJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCQlyZXR1cm4gLUVVTkFUQ0g7CisJfQorCisJRFBSSU5USygic2tidWZmIGhlYWQ6JWx4IGRhdGE6JWx4IHRhaWw6JWx4IGVuZDolbHhcbiIsCisJCShsb25nKXNrYi0+aGVhZCwgKGxvbmcpc2tiLT5kYXRhLCAobG9uZylza2ItPnRhaWwsCisJCShsb25nKXNrYi0+ZW5kKTsKICNpZiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQoQ09ORklHX0JSSURHRV9NT0RVTEUpCi0gICAgICAgIGlmIChtZW1jbXAoc2tiLT5kYXRhLCBicmlkZ2VfdWxhX2xlYywgc2l6ZW9mKGJyaWRnZV91bGFfbGVjKSkgPT0gMCkKLSAgICAgICAgICAgICAgICBsZWNfaGFuZGxlX2JyaWRnZShza2IsIGRldik7CisJaWYgKG1lbWNtcChza2ItPmRhdGEsIGJyaWRnZV91bGFfbGVjLCBzaXplb2YoYnJpZGdlX3VsYV9sZWMpKSA9PSAwKQorCQlsZWNfaGFuZGxlX2JyaWRnZShza2IsIGRldik7CiAjZW5kaWYKIAotICAgICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSByb29tIGZvciBsZWNfaWQgKi8KLSAgICAgICAgaWYgKHNrYl9oZWFkcm9vbShza2IpIDwgMikgeworCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHJvb20gZm9yIGxlY19pZCAqLworCWlmIChza2JfaGVhZHJvb20oc2tiKSA8IDIpIHsKIAotICAgICAgICAgICAgICAgIERQUklOVEsoImxlY19zdGFydF94bWl0OiByZWFsbG9jYXRpbmcgc2tiXG4iKTsKLSAgICAgICAgICAgICAgICBza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMRUNfSEVBREVSX0xFTik7Ci0gICAgICAgICAgICAgICAga2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgICAgICAgICAgaWYgKHNrYjIgPT0gTlVMTCkgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgc2tiID0gc2tiMjsKLSAgICAgICAgfQotICAgICAgICBza2JfcHVzaChza2IsIDIpOworCQlEUFJJTlRLKCJsZWNfc3RhcnRfeG1pdDogcmVhbGxvY2F0aW5nIHNrYlxuIik7CisJCXNrYjIgPSBza2JfcmVhbGxvY19oZWFkcm9vbShza2IsIExFQ19IRUFERVJfTEVOKTsKKwkJa2ZyZWVfc2tiKHNrYik7CisJCWlmIChza2IyID09IE5VTEwpCisJCQlyZXR1cm4gMDsKKwkJc2tiID0gc2tiMjsKKwl9CisJc2tiX3B1c2goc2tiLCAyKTsKIAotICAgICAgICAvKiBQdXQgbGUgaGVhZGVyIHRvIHBsYWNlLCB3b3JrcyBmb3IgVG9rZW5SaW5nIHRvbyAqLwotICAgICAgICBsZWNfaCA9IChzdHJ1Y3QgbGVjZGF0YWhkcl84MDIzKilza2ItPmRhdGE7Ci0gICAgICAgIGxlY19oLT5sZV9oZWFkZXIgPSBodG9ucyhwcml2LT5sZWNpZCk7IAorCS8qIFB1dCBsZSBoZWFkZXIgdG8gcGxhY2UsIHdvcmtzIGZvciBUb2tlblJpbmcgdG9vICovCisJbGVjX2ggPSAoc3RydWN0IGxlY2RhdGFoZHJfODAyMyAqKXNrYi0+ZGF0YTsKKwlsZWNfaC0+bGVfaGVhZGVyID0gaHRvbnMocHJpdi0+bGVjaWQpOwogCiAjaWZkZWYgQ09ORklHX1RSCi0gICAgICAgIC8qIFVnbHkuIFVzZSB0aGlzIHRvIHJlYWxpZ24gVG9rZW4gUmluZyBwYWNrZXRzIGZvcgotICAgICAgICAgKiBlLmcuIFBDQS0yMDBFIGRyaXZlci4gKi8KLSAgICAgICAgaWYgKHByaXYtPmlzX3RyZGV2KSB7Ci0gICAgICAgICAgICAgICAgc2tiMiA9IHNrYl9yZWFsbG9jX2hlYWRyb29tKHNrYiwgTEVDX0hFQURFUl9MRU4pOwotICAgICAgICAgICAgICAgIGtmcmVlX3NrYihza2IpOwotICAgICAgICAgICAgICAgIGlmIChza2IyID09IE5VTEwpIHJldHVybiAwOwotICAgICAgICAgICAgICAgIHNrYiA9IHNrYjI7Ci0gICAgICAgIH0KKwkvKgorCSAqIFVnbHkuIFVzZSB0aGlzIHRvIHJlYWxpZ24gVG9rZW4gUmluZyBwYWNrZXRzIGZvcgorCSAqIGUuZy4gUENBLTIwMEUgZHJpdmVyLgorCSAqLworCWlmIChwcml2LT5pc190cmRldikgeworCQlza2IyID0gc2tiX3JlYWxsb2NfaGVhZHJvb20oc2tiLCBMRUNfSEVBREVSX0xFTik7CisJCWtmcmVlX3NrYihza2IpOworCQlpZiAoc2tiMiA9PSBOVUxMKQorCQkJcmV0dXJuIDA7CisJCXNrYiA9IHNrYjI7CisJfQogI2VuZGlmCiAKICNpZiBEVU1QX1BBQ0tFVFMgPiAwCi0gICAgICAgIHByaW50aygiJXM6IHNlbmQgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsIGRldi0+bmFtZSwKLSAgICAgICAgICAgICAgIHNrYi0+bGVuLCBwcml2LT5sZWNpZCk7CisJcHJpbnRrKCIlczogc2VuZCBkYXRhbGVuOiVsZCBsZWNpZDolNC40eFxuIiwgZGV2LT5uYW1lLAorCSAgICAgICBza2ItPmxlbiwgcHJpdi0+bGVjaWQpOwogI2lmIERVTVBfUEFDS0VUUyA+PSAyCi0gICAgICAgIGZvcihpPTA7aTxza2ItPmxlbiAmJiBpIDw5OTtpKyspIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZitpKjMsIiUyLjJ4ICIsMHhmZiZza2ItPmRhdGFbaV0pOwotICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuICYmIGkgPCA5OTsgaSsrKSB7CisJCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKKwl9CiAjZWxpZiBEVU1QX1BBQ0tFVFMgPj0gMQotICAgICAgICBmb3IoaT0wO2k8c2tiLT5sZW4gJiYgaSA8IDMwO2krKykgewotICAgICAgICAgICAgICAgIHNwcmludGYoYnVmK2kqMywiJTIuMnggIiwgMHhmZiZza2ItPmRhdGFbaV0pOwotICAgICAgICB9CisJZm9yIChpID0gMDsgaSA8IHNrYi0+bGVuICYmIGkgPCAzMDsgaSsrKSB7CisJCXNwcmludGYoYnVmICsgaSAqIDMsICIlMi4yeCAiLCAweGZmICYgc2tiLT5kYXRhW2ldKTsKKwl9CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID49IDEgKi8KLSAgICAgICAgaWYgKGk9PXNrYi0+bGVuKQotICAgICAgICAgICAgICAgIHByaW50aygiJXNcbiIsYnVmKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50aygiJXMuLi5cbiIsYnVmKTsKKwlpZiAoaSA9PSBza2ItPmxlbikKKwkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwllbHNlCisJCXByaW50aygiJXMuLi5cbiIsIGJ1Zik7CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID4gMCAqLwogCi0gICAgICAgIC8qIE1pbmltdW0gZXRoZXJuZXQtZnJhbWUgc2l6ZSAqLworCS8qIE1pbmltdW0gZXRoZXJuZXQtZnJhbWUgc2l6ZSAqLwogI2lmZGVmIENPTkZJR19UUgotICAgICAgICBpZiAocHJpdi0+aXNfdHJkZXYpCi0gICAgICAgICAgICAgICAgbWluX2ZyYW1lX3NpemUgPSBMRUNfTUlOSU1VTV84MDI1X1NJWkU7CisJaWYgKHByaXYtPmlzX3RyZGV2KQorCQltaW5fZnJhbWVfc2l6ZSA9IExFQ19NSU5JTVVNXzgwMjVfU0laRTsKIAllbHNlCiAjZW5kaWYKLSAgICAgICAgbWluX2ZyYW1lX3NpemUgPSBMRUNfTUlOSU1VTV84MDIzX1NJWkU7Ci0gICAgICAgIGlmIChza2ItPmxlbiA8IG1pbl9mcmFtZV9zaXplKSB7Ci0gICAgICAgICAgICAgICAgaWYgKChza2ItPmxlbiArIHNrYl90YWlscm9vbShza2IpKSA8IG1pbl9mcmFtZV9zaXplKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fZnJhbWVfc2l6ZSAtIHNrYi0+dHJ1ZXNpemUsIEdGUF9BVE9NSUMpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2tiMiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2IgPSBza2IyOwotICAgICAgICAgICAgICAgIH0KKwkJbWluX2ZyYW1lX3NpemUgPSBMRUNfTUlOSU1VTV84MDIzX1NJWkU7CisJaWYgKHNrYi0+bGVuIDwgbWluX2ZyYW1lX3NpemUpIHsKKwkJaWYgKChza2ItPmxlbiArIHNrYl90YWlscm9vbShza2IpKSA8IG1pbl9mcmFtZV9zaXplKSB7CisJCQlza2IyID0gc2tiX2NvcHlfZXhwYW5kKHNrYiwgMCwKKwkJCQkJICAgICAgIG1pbl9mcmFtZV9zaXplIC0gc2tiLT50cnVlc2l6ZSwKKwkJCQkJICAgICAgIEdGUF9BVE9NSUMpOworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJaWYgKHNrYjIgPT0gTlVMTCkgeworCQkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXNrYiA9IHNrYjI7CisJCX0KIAkJc2tiX3B1dChza2IsIG1pbl9mcmFtZV9zaXplIC0gc2tiLT5sZW4pOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKiBTZW5kIHRvIHJpZ2h0IHZjYyAqLwotICAgICAgICBpc19yZGVzYyA9IDA7Ci0gICAgICAgIGRzdCA9IGxlY19oLT5oX2Rlc3Q7CisJfQorCisJLyogU2VuZCB0byByaWdodCB2Y2MgKi8KKwlpc19yZGVzYyA9IDA7CisJZHN0ID0gbGVjX2gtPmhfZGVzdDsKICNpZmRlZiBDT05GSUdfVFIKLSAgICAgICAgaWYgKHByaXYtPmlzX3RyZGV2KSB7Ci0gICAgICAgICAgICAgICAgZHN0ID0gZ2V0X3RyX2RzdChza2ItPmRhdGErMiwgcmRlc2MpOwotICAgICAgICAgICAgICAgIGlmIChkc3QgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgZHN0ID0gcmRlc2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpc19yZGVzYyA9IDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJaWYgKHByaXYtPmlzX3RyZGV2KSB7CisJCWRzdCA9IGdldF90cl9kc3Qoc2tiLT5kYXRhICsgMiwgcmRlc2MpOworCQlpZiAoZHN0ID09IE5VTEwpIHsKKwkJCWRzdCA9IHJkZXNjOworCQkJaXNfcmRlc2MgPSAxOworCQl9CisJfQogI2VuZGlmCi0gICAgICAgIGVudHJ5ID0gTlVMTDsKLSAgICAgICAgdmNjID0gbGVjX2FycF9yZXNvbHZlKHByaXYsIGRzdCwgaXNfcmRlc2MsICZlbnRyeSk7Ci0gICAgICAgIERQUklOVEsoIiVzOnZjYzolcCB2Y2NfZmxhZ3M6JXgsIGVudHJ5OiVwXG4iLCBkZXYtPm5hbWUsCi0gICAgICAgICAgICAgICAgdmNjLCB2Y2M/dmNjLT5mbGFnczowLCBlbnRyeSk7Ci0gICAgICAgIGlmICghdmNjIHx8ICF0ZXN0X2JpdChBVE1fVkZfUkVBRFksJnZjYy0+ZmxhZ3MpKSB7ICAgIAotICAgICAgICAgICAgICAgIGlmIChlbnRyeSAmJiAoZW50cnktPnR4X3dhaXQucWxlbiA8IExFQ19VTlJFU19RVUVfTEVOKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgRFBSSU5USygiJXM6bGVjX3N0YXJ0X3htaXQ6IHF1ZXVpbmcgcGFja2V0LCAiLCBkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgICAgICAgICAgRFBSSU5USygiTUFDIGFkZHJlc3MgMHglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVjX2gtPmhfZGVzdFswXSwgbGVjX2gtPmhfZGVzdFsxXSwgbGVjX2gtPmhfZGVzdFsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVjX2gtPmhfZGVzdFszXSwgbGVjX2gtPmhfZGVzdFs0XSwgbGVjX2gtPmhfZGVzdFs1XSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2JfcXVldWVfdGFpbCgmZW50cnktPnR4X3dhaXQsIHNrYik7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIiVzOmxlY19zdGFydF94bWl0OiB0eCBxdWV1ZSBmdWxsIG9yIG5vIGFycCBlbnRyeSwgZHJvcHBpbmcsICIsIGRldi0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBEUFJJTlRLKCJNQUMgYWRkcmVzcyAweCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWNfaC0+aF9kZXN0WzBdLCBsZWNfaC0+aF9kZXN0WzFdLCBsZWNfaC0+aF9kZXN0WzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWNfaC0+aF9kZXN0WzNdLCBsZWNfaC0+aF9kZXN0WzRdLCBsZWNfaC0+aF9kZXN0WzVdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSNpZiBEVU1QX1BBQ0tFVFMgPiAwICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgcHJpbnRrKCIlczpzZW5kaW5nIHRvIHZwaTolZCB2Y2k6JWRcbiIsIGRldi0+bmFtZSwKLSAgICAgICAgICAgICAgIHZjYy0+dnBpLCB2Y2MtPnZjaSk7ICAgICAgIAorCWVudHJ5ID0gTlVMTDsKKwl2Y2MgPSBsZWNfYXJwX3Jlc29sdmUocHJpdiwgZHN0LCBpc19yZGVzYywgJmVudHJ5KTsKKwlEUFJJTlRLKCIlczp2Y2M6JXAgdmNjX2ZsYWdzOiV4LCBlbnRyeTolcFxuIiwgZGV2LT5uYW1lLAorCQl2Y2MsIHZjYyA/IHZjYy0+ZmxhZ3MgOiAwLCBlbnRyeSk7CisJaWYgKCF2Y2MgfHwgIXRlc3RfYml0KEFUTV9WRl9SRUFEWSwgJnZjYy0+ZmxhZ3MpKSB7CisJCWlmIChlbnRyeSAmJiAoZW50cnktPnR4X3dhaXQucWxlbiA8IExFQ19VTlJFU19RVUVfTEVOKSkgeworCQkJRFBSSU5USygiJXM6bGVjX3N0YXJ0X3htaXQ6IHF1ZXVpbmcgcGFja2V0LCAiLAorCQkJCWRldi0+bmFtZSk7CisJCQlEUFJJTlRLKCJNQUMgYWRkcmVzcyAweCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCWxlY19oLT5oX2Rlc3RbMF0sIGxlY19oLT5oX2Rlc3RbMV0sCisJCQkJbGVjX2gtPmhfZGVzdFsyXSwgbGVjX2gtPmhfZGVzdFszXSwKKwkJCQlsZWNfaC0+aF9kZXN0WzRdLCBsZWNfaC0+aF9kZXN0WzVdKTsKKwkJCXNrYl9xdWV1ZV90YWlsKCZlbnRyeS0+dHhfd2FpdCwgc2tiKTsKKwkJfSBlbHNlIHsKKwkJCURQUklOVEsKKwkJCSAgICAoIiVzOmxlY19zdGFydF94bWl0OiB0eCBxdWV1ZSBmdWxsIG9yIG5vIGFycCBlbnRyeSwgZHJvcHBpbmcsICIsCisJCQkgICAgIGRldi0+bmFtZSk7CisJCQlEUFJJTlRLKCJNQUMgYWRkcmVzcyAweCUwMng6JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4XG4iLAorCQkJCWxlY19oLT5oX2Rlc3RbMF0sIGxlY19oLT5oX2Rlc3RbMV0sCisJCQkJbGVjX2gtPmhfZGVzdFsyXSwgbGVjX2gtPmhfZGVzdFszXSwKKwkJCQlsZWNfaC0+aF9kZXN0WzRdLCBsZWNfaC0+aF9kZXN0WzVdKTsKKwkJCXByaXYtPnN0YXRzLnR4X2Ryb3BwZWQrKzsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJfQorCQlnb3RvIG91dDsKKwl9CisjaWYgRFVNUF9QQUNLRVRTID4gMAorCXByaW50aygiJXM6c2VuZGluZyB0byB2cGk6JWQgdmNpOiVkXG4iLCBkZXYtPm5hbWUsIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CiAjZW5kaWYgLyogRFVNUF9QQUNLRVRTID4gMCAqLwotICAgICAgICAgICAgICAgIAotICAgICAgICB3aGlsZSAoZW50cnkgJiYgKHNrYjIgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSkgewotICAgICAgICAgICAgICAgIERQUklOVEsoImxlYy5jOiBlbXB0eWluZyB0eCBxdWV1ZSwgIik7Ci0gICAgICAgICAgICAgICAgRFBSSU5USygiTUFDIGFkZHJlc3MgMHglMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlY19oLT5oX2Rlc3RbMF0sIGxlY19oLT5oX2Rlc3RbMV0sIGxlY19oLT5oX2Rlc3RbMl0sCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfaC0+aF9kZXN0WzNdLCBsZWNfaC0+aF9kZXN0WzRdLCBsZWNfaC0+aF9kZXN0WzVdKTsKKworCXdoaWxlIChlbnRyeSAmJiAoc2tiMiA9IHNrYl9kZXF1ZXVlKCZlbnRyeS0+dHhfd2FpdCkpKSB7CisJCURQUklOVEsoImxlYy5jOiBlbXB0eWluZyB0eCBxdWV1ZSwgIik7CisJCURQUklOVEsoIk1BQyBhZGRyZXNzIDB4JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQlsZWNfaC0+aF9kZXN0WzBdLCBsZWNfaC0+aF9kZXN0WzFdLCBsZWNfaC0+aF9kZXN0WzJdLAorCQkJbGVjX2gtPmhfZGVzdFszXSwgbGVjX2gtPmhfZGVzdFs0XSwgbGVjX2gtPmhfZGVzdFs1XSk7CiAJCWxlY19zZW5kKHZjYywgc2tiMiwgcHJpdik7Ci0gICAgICAgIH0KKwl9CiAKIAlsZWNfc2VuZCh2Y2MsIHNrYiwgcHJpdik7CiAKQEAgLTQwNCwyMTAgKzQyOCwyMTkgQEAKIAkJCW5ldGlmX3dha2VfcXVldWUoZGV2KTsKIAl9CiAKK291dDoKKwlpZiAoZW50cnkpCisJCWxlY19hcnBfcHV0KGVudHJ5KTsKIAlkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmllczsKLSAgICAgICAgcmV0dXJuIDA7CisJcmV0dXJuIDA7CiB9CiAKIC8qIFRoZSBpbnZlcnNlIHJvdXRpbmUgdG8gbmV0X29wZW4oKS4gKi8KLXN0YXRpYyBpbnQgCi1sZWNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikgCitzdGF0aWMgaW50IGxlY19jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgICAgICBuZXRpZl9zdG9wX3F1ZXVlKGRldik7Ci0gICAgICAgIHJldHVybiAwOworCW5ldGlmX3N0b3BfcXVldWUoZGV2KTsKKwlyZXR1cm4gMDsKIH0KIAogLyoKICAqIEdldCB0aGUgY3VycmVudCBzdGF0aXN0aWNzLgogICogVGhpcyBtYXkgYmUgY2FsbGVkIHdpdGggdGhlIGNhcmQgb3BlbiBvciBjbG9zZWQuCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyAqCi1sZWNfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKmxlY19nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLSAgICAgICAgcmV0dXJuICYoKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdiktPnN0YXRzOworCXJldHVybiAmKChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXYpLT5zdGF0czsKIH0KIAotc3RhdGljIGludCAKLWxlY19hdG1fc2VuZChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQorc3RhdGljIGludCBsZWNfYXRtX3NlbmQoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlKil2Y2MtPnByb3RvX2RhdGE7Ci0gICAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYqKWRldi0+cHJpdjsKLSAgICAgICAgc3RydWN0IGF0bWxlY19tc2cgKm1lc2c7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIGNoYXIgKnRtcDsgLyogRklYTUUgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopdmNjLT5wcm90b19kYXRhOworCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7CisJc3RydWN0IGF0bWxlY19tc2cgKm1lc2c7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCWludCBpOworCWNoYXIgKnRtcDsJCS8qIEZJWE1FICovCiAKIAlhdG9taWNfc3ViKHNrYi0+dHJ1ZXNpemUsICZza19hdG0odmNjKS0+c2tfd21lbV9hbGxvYyk7Ci0gICAgICAgIG1lc2cgPSAoc3RydWN0IGF0bWxlY19tc2cgKilza2ItPmRhdGE7Ci0gICAgICAgIHRtcCA9IHNrYi0+ZGF0YTsKLSAgICAgICAgdG1wICs9IHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyk7Ci0gICAgICAgIERQUklOVEsoIiVzOiBtc2cgZnJvbSB6ZXBwZWxpbjolZFxuIiwgZGV2LT5uYW1lLCBtZXNnLT50eXBlKTsKLSAgICAgICAgc3dpdGNoKG1lc2ctPnR5cGUpIHsKLSAgICAgICAgY2FzZSBsX3NldF9tYWNfYWRkcjoKLSAgICAgICAgICAgICAgICBmb3IgKGk9MDtpPDY7aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZXYtPmRldl9hZGRyW2ldID0gbWVzZy0+Y29udGVudC5ub3JtYWwubWFjX2FkZHJbaV07Ci0gICAgICAgICAgICAgICAgfSAgICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX2RlbF9tYWNfYWRkcjoKLSAgICAgICAgICAgICAgICBmb3IoaT0wO2k8NjtpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldi0+ZGV2X2FkZHJbaV0gPSAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX2FkZHJfZGVsZXRlOgotICAgICAgICAgICAgICAgIGxlY19hZGRyX2RlbGV0ZShwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5hdG1fYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIGxfdG9wb2xvZ3lfY2hhbmdlOgotICAgICAgICAgICAgICAgIHByaXYtPnRvcG9sb2d5X2NoYW5nZSA9IG1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWc7ICAKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX2ZsdXNoX2NvbXBsZXRlOgotICAgICAgICAgICAgICAgIGxlY19mbHVzaF9jb21wbGV0ZShwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX25hcnBfcmVxOiAvKiBMQU5FMjogc2VlIDcuMS4zNSBpbiB0aGUgbGFuZTIgc3BlYyAqLworCW1lc2cgPSAoc3RydWN0IGF0bWxlY19tc2cgKilza2ItPmRhdGE7CisJdG1wID0gc2tiLT5kYXRhOworCXRtcCArPSBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpOworCURQUklOVEsoIiVzOiBtc2cgZnJvbSB6ZXBwZWxpbjolZFxuIiwgZGV2LT5uYW1lLCBtZXNnLT50eXBlKTsKKwlzd2l0Y2ggKG1lc2ctPnR5cGUpIHsKKwljYXNlIGxfc2V0X21hY19hZGRyOgorCQlmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CisJCQlkZXYtPmRldl9hZGRyW2ldID0gbWVzZy0+Y29udGVudC5ub3JtYWwubWFjX2FkZHJbaV07CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsX2RlbF9tYWNfYWRkcjoKKwkJZm9yIChpID0gMDsgaSA8IDY7IGkrKykgeworCQkJZGV2LT5kZXZfYWRkcltpXSA9IDA7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsX2FkZHJfZGVsZXRlOgorCQlsZWNfYWRkcl9kZWxldGUocHJpdiwgbWVzZy0+Y29udGVudC5ub3JtYWwuYXRtX2FkZHIsCisJCQkJbWVzZy0+Y29udGVudC5ub3JtYWwuZmxhZyk7CisJCWJyZWFrOworCWNhc2UgbF90b3BvbG9neV9jaGFuZ2U6CisJCXByaXYtPnRvcG9sb2d5X2NoYW5nZSA9IG1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWc7CisJCWJyZWFrOworCWNhc2UgbF9mbHVzaF9jb21wbGV0ZToKKwkJbGVjX2ZsdXNoX2NvbXBsZXRlKHByaXYsIG1lc2ctPmNvbnRlbnQubm9ybWFsLmZsYWcpOworCQlicmVhazsKKwljYXNlIGxfbmFycF9yZXE6CS8qIExBTkUyOiBzZWUgNy4xLjM1IGluIHRoZSBsYW5lMiBzcGVjICovCiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5tYWNfYWRkcik7Ci0gICAgICAgICAgICAgICAgbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOworCQllbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5tYWNfYWRkcik7CisJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAKLSAgICAgICAgICAgICAgICBpZiAobWVzZy0+Y29udGVudC5ub3JtYWwubm9fc291cmNlX2xlX25hcnApCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAvKiBGQUxMIFRIUk9VR0ggKi8KLSAgICAgICAgY2FzZSBsX2FycF91cGRhdGU6Ci0gICAgICAgICAgICAgICAgbGVjX2FycF91cGRhdGUocHJpdiwgbWVzZy0+Y29udGVudC5ub3JtYWwubWFjX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzZy0+Y29udGVudC5ub3JtYWwuYXRtX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzZy0+Y29udGVudC5ub3JtYWwuZmxhZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC50YXJnZXRsZXNzX2xlX2FycCk7Ci0gICAgICAgICAgICAgICAgRFBSSU5USygibGVjOiBpbiBsX2FycF91cGRhdGVcbiIpOwotICAgICAgICAgICAgICAgIGlmIChtZXNnLT5zaXplb2Z0bHZzICE9IDApIHsgLyogTEFORTIgMy4xLjUgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoImxlYzogTEFORTIgMy4xLjUsIGdvdCB0bHZzLCBzaXplICVkXG4iLCBtZXNnLT5zaXplb2Z0bHZzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxhbmUyX2Fzc29jaWF0ZV9pbmQoZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5tYWNfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLCBtZXNnLT5zaXplb2Z0bHZzKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgbF9jb25maWc6Ci0gICAgICAgICAgICAgICAgcHJpdi0+bWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50ID0gCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50LmNvbmZpZy5tYXhpbXVtX3Vua25vd25fZnJhbWVfY291bnQ7Ci0gICAgICAgICAgICAgICAgcHJpdi0+bWF4X3Vua25vd25fZnJhbWVfdGltZSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKG1lc2ctPmNvbnRlbnQuY29uZmlnLm1heF91bmtub3duX2ZyYW1lX3RpbWUqSFopOwotICAgICAgICAgICAgICAgIHByaXYtPm1heF9yZXRyeV9jb3VudCA9IAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzZy0+Y29udGVudC5jb25maWcubWF4X3JldHJ5X2NvdW50OwotICAgICAgICAgICAgICAgIHByaXYtPmFnaW5nX3RpbWUgPSAobWVzZy0+Y29udGVudC5jb25maWcuYWdpbmdfdGltZSpIWik7Ci0gICAgICAgICAgICAgICAgcHJpdi0+Zm9yd2FyZF9kZWxheV90aW1lID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAobWVzZy0+Y29udGVudC5jb25maWcuZm9yd2FyZF9kZWxheV90aW1lKkhaKTsKLSAgICAgICAgICAgICAgICBwcml2LT5hcnBfcmVzcG9uc2VfdGltZSA9IAotICAgICAgICAgICAgICAgICAgICAgICAgKG1lc2ctPmNvbnRlbnQuY29uZmlnLmFycF9yZXNwb25zZV90aW1lKkhaKTsKLSAgICAgICAgICAgICAgICBwcml2LT5mbHVzaF90aW1lb3V0ID0gKG1lc2ctPmNvbnRlbnQuY29uZmlnLmZsdXNoX3RpbWVvdXQqSFopOwotICAgICAgICAgICAgICAgIHByaXYtPnBhdGhfc3dpdGNoaW5nX2RlbGF5ID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAobWVzZy0+Y29udGVudC5jb25maWcucGF0aF9zd2l0Y2hpbmdfZGVsYXkqSFopOwotICAgICAgICAgICAgICAgIHByaXYtPmxhbmVfdmVyc2lvbiA9IG1lc2ctPmNvbnRlbnQuY29uZmlnLmxhbmVfdmVyc2lvbjsgLyogTEFORTIgKi8KKwkJaWYgKG1lc2ctPmNvbnRlbnQubm9ybWFsLm5vX3NvdXJjZV9sZV9uYXJwKQorCQkJYnJlYWs7CisJCS8qIEZBTEwgVEhST1VHSCAqLworCWNhc2UgbF9hcnBfdXBkYXRlOgorCQlsZWNfYXJwX3VwZGF0ZShwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5tYWNfYWRkciwKKwkJCSAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5hdG1fYWRkciwKKwkJCSAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnLAorCQkJICAgICAgIG1lc2ctPmNvbnRlbnQubm9ybWFsLnRhcmdldGxlc3NfbGVfYXJwKTsKKwkJRFBSSU5USygibGVjOiBpbiBsX2FycF91cGRhdGVcbiIpOworCQlpZiAobWVzZy0+c2l6ZW9mdGx2cyAhPSAwKSB7CS8qIExBTkUyIDMuMS41ICovCisJCQlEUFJJTlRLKCJsZWM6IExBTkUyIDMuMS41LCBnb3QgdGx2cywgc2l6ZSAlZFxuIiwKKwkJCQltZXNnLT5zaXplb2Z0bHZzKTsKKwkJCWxhbmUyX2Fzc29jaWF0ZV9pbmQoZGV2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5tYWNfYWRkciwKKwkJCQkJICAgIHRtcCwgbWVzZy0+c2l6ZW9mdGx2cyk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBsX2NvbmZpZzoKKwkJcHJpdi0+bWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50ID0KKwkJICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudDsKKwkJcHJpdi0+bWF4X3Vua25vd25fZnJhbWVfdGltZSA9CisJCSAgICAobWVzZy0+Y29udGVudC5jb25maWcubWF4X3Vua25vd25fZnJhbWVfdGltZSAqIEhaKTsKKwkJcHJpdi0+bWF4X3JldHJ5X2NvdW50ID0gbWVzZy0+Y29udGVudC5jb25maWcubWF4X3JldHJ5X2NvdW50OworCQlwcml2LT5hZ2luZ190aW1lID0gKG1lc2ctPmNvbnRlbnQuY29uZmlnLmFnaW5nX3RpbWUgKiBIWik7CisJCXByaXYtPmZvcndhcmRfZGVsYXlfdGltZSA9CisJCSAgICAobWVzZy0+Y29udGVudC5jb25maWcuZm9yd2FyZF9kZWxheV90aW1lICogSFopOworCQlwcml2LT5hcnBfcmVzcG9uc2VfdGltZSA9CisJCSAgICAobWVzZy0+Y29udGVudC5jb25maWcuYXJwX3Jlc3BvbnNlX3RpbWUgKiBIWik7CisJCXByaXYtPmZsdXNoX3RpbWVvdXQgPSAobWVzZy0+Y29udGVudC5jb25maWcuZmx1c2hfdGltZW91dCAqIEhaKTsKKwkJcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkgPQorCQkgICAgKG1lc2ctPmNvbnRlbnQuY29uZmlnLnBhdGhfc3dpdGNoaW5nX2RlbGF5ICogSFopOworCQlwcml2LT5sYW5lX3ZlcnNpb24gPSBtZXNnLT5jb250ZW50LmNvbmZpZy5sYW5lX3ZlcnNpb247CS8qIExBTkUyICovCiAJCXByaXYtPmxhbmUyX29wcyA9IE5VTEw7CiAJCWlmIChwcml2LT5sYW5lX3ZlcnNpb24gPiAxKQogCQkJcHJpdi0+bGFuZTJfb3BzID0gJmxhbmUyX29wczsKIAkJaWYgKGRldi0+Y2hhbmdlX210dShkZXYsIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSkpCiAJCQlwcmludGsoIiVzOiBjaGFuZ2VfbXR1IHRvICVkIGZhaWxlZFxuIiwgZGV2LT5uYW1lLAotCQkJICAgIG1lc2ctPmNvbnRlbnQuY29uZmlnLm10dSk7CisJCQkgICAgICAgbWVzZy0+Y29udGVudC5jb25maWcubXR1KTsKIAkJcHJpdi0+aXNfcHJveHkgPSBtZXNnLT5jb250ZW50LmNvbmZpZy5pc19wcm94eTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX2ZsdXNoX3RyYW5faWQ6Ci0gICAgICAgICAgICAgICAgbGVjX3NldF9mbHVzaF90cmFuX2lkKHByaXYsIG1lc2ctPmNvbnRlbnQubm9ybWFsLmF0bV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX3NldF9sZWNpZDoKLSAgICAgICAgICAgICAgICBwcml2LT5sZWNpZD0odW5zaWduZWQgc2hvcnQpKDB4ZmZmZiZtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBsX3Nob3VsZF9icmlkZ2U6IHsKKwkJYnJlYWs7CisJY2FzZSBsX2ZsdXNoX3RyYW5faWQ6CisJCWxlY19zZXRfZmx1c2hfdHJhbl9pZChwcml2LCBtZXNnLT5jb250ZW50Lm5vcm1hbC5hdG1fYWRkciwKKwkJCQkgICAgICBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBsX3NldF9sZWNpZDoKKwkJcHJpdi0+bGVjaWQgPQorCQkgICAgKHVuc2lnbmVkIHNob3J0KSgweGZmZmYgJiBtZXNnLT5jb250ZW50Lm5vcm1hbC5mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBsX3Nob3VsZF9icmlkZ2U6CiAjaWYgZGVmaW5lZChDT05GSUdfQlJJREdFKSB8fCBkZWZpbmVkKENPTkZJR19CUklER0VfTU9EVUxFKQotICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqZjsKKwkJeworCQkJc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmOwogCi0gICAgICAgICAgICAgICAgRFBSSU5USygiJXM6IGJyaWRnZSB6ZXBwZWxpbiBhc2tzIGFib3V0IDB4JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICBtZXNnLT5jb250ZW50LnByb3h5Lm1hY19hZGRyWzBdLCBtZXNnLT5jb250ZW50LnByb3h5Lm1hY19hZGRyWzFdLAotICAgICAgICAgICAgICAgICAgICAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclsyXSwgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclszXSwKLSAgICAgICAgICAgICAgICAgICAgICAgIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbNF0sIG1lc2ctPmNvbnRlbnQucHJveHkubWFjX2FkZHJbNV0pOworCQkJRFBSSU5USworCQkJICAgICgiJXM6IGJyaWRnZSB6ZXBwZWxpbiBhc2tzIGFib3V0IDB4JTAyeDolMDJ4OiUwMng6JTAyeDolMDJ4OiUwMnhcbiIsCisJCQkgICAgIGRldi0+bmFtZSwgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclswXSwKKwkJCSAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclsxXSwKKwkJCSAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclsyXSwKKwkJCSAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkclszXSwKKwkJCSAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcls0XSwKKwkJCSAgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcls1XSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoYnJfZmRiX2dldF9ob29rID09IE5VTEwgfHwgZGV2LT5icl9wb3J0ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKwkJCWlmIChicl9mZGJfZ2V0X2hvb2sgPT0gTlVMTCB8fCBkZXYtPmJyX3BvcnQgPT0gTlVMTCkKKwkJCQlicmVhazsKIAotICAgICAgICAgICAgICAgIGYgPSBicl9mZGJfZ2V0X2hvb2soZGV2LT5icl9wb3J0LT5iciwgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcik7Ci0gICAgICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgICAgICBmLT5kc3QtPmRldiAhPSBkZXYgJiYKLSAgICAgICAgICAgICAgICAgICAgZi0+ZHN0LT5zdGF0ZSA9PSBCUl9TVEFURV9GT1JXQVJESU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhpdCBmcm9tIGJyaWRnZSB0YWJsZSwgc2VuZCBMRV9BUlBfUkVTUE9OU0UgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpza2IyOwotCQkJc3RydWN0IHNvY2sgKnNrOworCQkJZiA9IGJyX2ZkYl9nZXRfaG9vayhkZXYtPmJyX3BvcnQtPmJyLAorCQkJCQkgICAgbWVzZy0+Y29udGVudC5wcm94eS5tYWNfYWRkcik7CisJCQlpZiAoZiAhPSBOVUxMICYmIGYtPmRzdC0+ZGV2ICE9IGRldgorCQkJICAgICYmIGYtPmRzdC0+c3RhdGUgPT0gQlJfU1RBVEVfRk9SV0FSRElORykgeworCQkJCS8qIGhpdCBmcm9tIGJyaWRnZSB0YWJsZSwgc2VuZCBMRV9BUlBfUkVTUE9OU0UgKi8KKwkJCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiMjsKKwkJCQlzdHJ1Y3Qgc29jayAqc2s7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIiVzOiBlbnRyeSBmb3VuZCwgcmVzcG9uZGluZyB0byB6ZXBwZWxpblxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrYjIgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwgR0ZQX0FUT01JQyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2tiMiA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyX2ZkYl9wdXRfaG9vayhmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBza2IyLT5sZW4gPSBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpOwotICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHNrYjItPmRhdGEsIG1lc2csIHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZykpOwotICAgICAgICAgICAgICAgICAgICAgICAgYXRtX2ZvcmNlX2NoYXJnZShwcml2LT5sZWNkLCBza2IyLT50cnVlc2l6ZSk7Ci0JCQlzayA9IHNrX2F0bShwcml2LT5sZWNkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiMik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiMi0+bGVuKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGYgIT0gTlVMTCkgYnJfZmRiX3B1dF9ob29rKGYpOworCQkJCURQUklOVEsKKwkJCQkgICAgKCIlczogZW50cnkgZm91bmQsIHJlc3BvbmRpbmcgdG8gemVwcGVsaW5cbiIsCisJCQkJICAgICBkZXYtPm5hbWUpOworCQkJCXNrYjIgPQorCQkJCSAgICBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBhdG1sZWNfbXNnKSwKKwkJCQkJICAgICAgR0ZQX0FUT01JQyk7CisJCQkJaWYgKHNrYjIgPT0gTlVMTCkgeworCQkJCQlicl9mZGJfcHV0X2hvb2soZik7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlza2IyLT5sZW4gPSBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpOworCQkJCW1lbWNweShza2IyLT5kYXRhLCBtZXNnLAorCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpKTsKKwkJCQlhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYjItPnRydWVzaXplKTsKKwkJCQlzayA9IHNrX2F0bShwcml2LT5sZWNkKTsKKwkJCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYjIpOworCQkJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2IyLT5sZW4pOworCQkJfQorCQkJaWYgKGYgIT0gTlVMTCkKKwkJCQlicl9mZGJfcHV0X2hvb2soZik7CisJCX0KICNlbmRpZiAvKiBkZWZpbmVkKENPTkZJR19CUklER0UpIHx8IGRlZmluZWQoQ09ORklHX0JSSURHRV9NT0RVTEUpICovCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50aygiJXM6IFVua25vd24gbWVzc2FnZSB0eXBlICVkXG4iLCBkZXYtPm5hbWUsIG1lc2ctPnR5cGUpOwotICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgfQotICAgICAgICBkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgIHJldHVybiAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIiVzOiBVbmtub3duIG1lc3NhZ2UgdHlwZSAlZFxuIiwgZGV2LT5uYW1lLCBtZXNnLT50eXBlKTsKKwkJZGV2X2tmcmVlX3NrYihza2IpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZGV2X2tmcmVlX3NrYihza2IpOworCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCAKLWxlY19hdG1fY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYykKK3N0YXRpYyB2b2lkIGxlY19hdG1fY2xvc2Uoc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKLSAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXZjYy0+cHJvdG9fZGF0YTsKLSAgICAgICAgc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKil2Y2MtPnByb3RvX2RhdGE7CisJc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKIAotICAgICAgICBwcml2LT5sZWNkID0gTlVMTDsKLSAgICAgICAgLyogRG8gc29tZXRoaW5nIG5lZWRmdWw/ICovCisJcHJpdi0+bGVjZCA9IE5VTEw7CisJLyogRG8gc29tZXRoaW5nIG5lZWRmdWw/ICovCiAKLSAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwotICAgICAgICBsZWNfYXJwX2Rlc3Ryb3kocHJpdik7CisJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOworCWxlY19hcnBfZGVzdHJveShwcml2KTsKIAotICAgICAgICBpZiAoc2tiX3BlZWsoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKSkKKwlpZiAoc2tiX3BlZWsoJnNrX2F0bSh2Y2MpLT5za19yZWNlaXZlX3F1ZXVlKSkKIAkJcHJpbnRrKCIlcyBsZWNfYXRtX2Nsb3NlOiBjbG9zaW5nIHdpdGggbWVzc2FnZXMgcGVuZGluZ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lKTsKLSAgICAgICAgd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmc2tfYXRtKHZjYyktPnNrX3JlY2VpdmVfcXVldWUpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOworCQkgICAgICAgZGV2LT5uYW1lKTsKKwl3aGlsZSAoKHNrYiA9IHNrYl9kZXF1ZXVlKCZza19hdG0odmNjKS0+c2tfcmVjZWl2ZV9xdWV1ZSkpICE9IE5VTEwpIHsKKwkJYXRtX3JldHVybih2Y2MsIHNrYi0+dHJ1ZXNpemUpOwogCQlkZXZfa2ZyZWVfc2tiKHNrYik7Ci0gICAgICAgIH0KLSAgCisJfQorCiAJcHJpbnRrKCIlczogU2h1dCBkb3duIVxuIiwgZGV2LT5uYW1lKTsKLSAgICAgICAgbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CisJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYXRtZGV2X29wcyBsZWNkZXZfb3BzID0gewotICAgICAgICAuY2xvc2UJPSBsZWNfYXRtX2Nsb3NlLAotICAgICAgICAuc2VuZAk9IGxlY19hdG1fc2VuZAorCS5jbG9zZSA9IGxlY19hdG1fY2xvc2UsCisJLnNlbmQgPSBsZWNfYXRtX3NlbmQKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgYXRtX2RldiBsZWNhdG1fZGV2ID0gewotCS5vcHMJPSAmbGVjZGV2X29wcywKLQkudHlwZQk9ICJsZWMiLAotCS5udW1iZXIJPSA5OTksCS8qIGR1bW15IGRldmljZSBudW1iZXIgKi8KLQkubG9jawk9IFNQSU5fTE9DS19VTkxPQ0tFRAorCS5vcHMgPSAmbGVjZGV2X29wcywKKwkudHlwZSA9ICJsZWMiLAorCS5udW1iZXIgPSA5OTksCQkvKiBkdW1teSBkZXZpY2UgbnVtYmVyICovCisJLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQKIH07CiAKIC8qCiAgKiBMQU5FMjogbmV3IGFyZ3VtZW50IHN0cnVjdCBza19idWZmICpkYXRhIGNvbnRhaW5zCiAgKiB0aGUgTEVfQVJQIGJhc2VkIFRMVnMgaW50cm9kdWNlZCBpbiB0aGUgTEFORTIgc3BlYwogICovCi1zdGF0aWMgaW50IAotc2VuZF90b19sZWNkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgYXRtbGVjX21zZ190eXBlIHR5cGUsIAotICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyLCB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwKLSAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZGF0YSkKK3N0YXRpYyBpbnQKK3NlbmRfdG9fbGVjZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIGF0bWxlY19tc2dfdHlwZSB0eXBlLAorCSAgICAgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAorCSAgICAgc3RydWN0IHNrX2J1ZmYgKmRhdGEpCiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC02MjEsMTg3ICs2NTQsMTkzIEBACiAJCXJldHVybiAtMTsKIAlza2ItPmxlbiA9IHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZyk7CiAJbWVzZyA9IChzdHJ1Y3QgYXRtbGVjX21zZyAqKXNrYi0+ZGF0YTsKLSAgICAgICAgbWVtc2V0KG1lc2csIDAsIHNpemVvZihzdHJ1Y3QgYXRtbGVjX21zZykpOworCW1lbXNldChtZXNnLCAwLCBzaXplb2Yoc3RydWN0IGF0bWxlY19tc2cpKTsKIAltZXNnLT50eXBlID0gdHlwZTsKLSAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBtZXNnLT5zaXplb2Z0bHZzID0gZGF0YS0+bGVuOworCWlmIChkYXRhICE9IE5VTEwpCisJCW1lc2ctPnNpemVvZnRsdnMgPSBkYXRhLT5sZW47CiAJaWYgKG1hY19hZGRyKQogCQltZW1jcHkoJm1lc2ctPmNvbnRlbnQubm9ybWFsLm1hY19hZGRyLCBtYWNfYWRkciwgRVRIX0FMRU4pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbWVzZy0+Y29udGVudC5ub3JtYWwudGFyZ2V0bGVzc19sZV9hcnAgPSAxOworCWVsc2UKKwkJbWVzZy0+Y29udGVudC5ub3JtYWwudGFyZ2V0bGVzc19sZV9hcnAgPSAxOwogCWlmIChhdG1fYWRkcikKIAkJbWVtY3B5KCZtZXNnLT5jb250ZW50Lm5vcm1hbC5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKTsKIAotICAgICAgICBhdG1fZm9yY2VfY2hhcmdlKHByaXYtPmxlY2QsIHNrYi0+dHJ1ZXNpemUpOworCWF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgc2tiLT50cnVlc2l6ZSk7CiAJc2sgPSBza19hdG0ocHJpdi0+bGVjZCk7CiAJc2tiX3F1ZXVlX3RhaWwoJnNrLT5za19yZWNlaXZlX3F1ZXVlLCBza2IpOwotICAgICAgICBzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOworCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CiAKLSAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIERQUklOVEsoImxlYzogYWJvdXQgdG8gc2VuZCAlZCBieXRlcyBvZiBkYXRhXG4iLCBkYXRhLT5sZW4pOwotICAgICAgICAgICAgICAgIGF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgZGF0YS0+dHJ1ZXNpemUpOwotICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgZGF0YSk7Ci0gICAgICAgICAgICAgICAgc2stPnNrX2RhdGFfcmVhZHkoc2ssIHNrYi0+bGVuKTsKLSAgICAgICAgfQorCWlmIChkYXRhICE9IE5VTEwpIHsKKwkJRFBSSU5USygibGVjOiBhYm91dCB0byBzZW5kICVkIGJ5dGVzIG9mIGRhdGFcbiIsIGRhdGEtPmxlbik7CisJCWF0bV9mb3JjZV9jaGFyZ2UocHJpdi0+bGVjZCwgZGF0YS0+dHJ1ZXNpemUpOworCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIGRhdGEpOworCQlzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOworCX0KIAotICAgICAgICByZXR1cm4gMDsKKwlyZXR1cm4gMDsKIH0KIAogLyogc2hhbWVsZXNzbHkgc3RvbGVuIGZyb20gZHJpdmVycy9uZXQvbmV0X2luaXQuYyAqLwogc3RhdGljIGludCBsZWNfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSkKIHsKLSAgICAgICAgaWYgKChuZXdfbXR1IDwgNjgpIHx8IChuZXdfbXR1ID4gMTgxOTApKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICBkZXYtPm10dSA9IG5ld19tdHU7Ci0gICAgICAgIHJldHVybiAwOworCWlmICgobmV3X210dSA8IDY4KSB8fCAobmV3X210dSA+IDE4MTkwKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZGV2LT5tdHUgPSBuZXdfbXR1OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBsZWNfc2V0X211bHRpY2FzdF9saXN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7Ci0JLyogYnkgZGVmYXVsdCwgYWxsIG11bHRpY2FzdCBmcmFtZXMgYXJyaXZlIG92ZXIgdGhlIGJ1cy4KLSAgICAgICAgICogZXZlbnR1YWxseSBzdXBwb3J0IHNlbGVjdGl2ZSBtdWx0aWNhc3Qgc2VydmljZQotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuOworCS8qCisJICogYnkgZGVmYXVsdCwgYWxsIG11bHRpY2FzdCBmcmFtZXMgYXJyaXZlIG92ZXIgdGhlIGJ1cy4KKwkgKiBldmVudHVhbGx5IHN1cHBvcnQgc2VsZWN0aXZlIG11bHRpY2FzdCBzZXJ2aWNlCisJICovCisJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCAKLWxlY19pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBsZWNfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotICAgICAgICBkZXYtPmNoYW5nZV9tdHUgPSBsZWNfY2hhbmdlX210dTsKLSAgICAgICAgZGV2LT5vcGVuID0gbGVjX29wZW47Ci0gICAgICAgIGRldi0+c3RvcCA9IGxlY19jbG9zZTsKLSAgICAgICAgZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsZWNfc3RhcnRfeG1pdDsKKwlkZXYtPmNoYW5nZV9tdHUgPSBsZWNfY2hhbmdlX210dTsKKwlkZXYtPm9wZW4gPSBsZWNfb3BlbjsKKwlkZXYtPnN0b3AgPSBsZWNfY2xvc2U7CisJZGV2LT5oYXJkX3N0YXJ0X3htaXQgPSBsZWNfc3RhcnRfeG1pdDsKIAlkZXYtPnR4X3RpbWVvdXQgPSBsZWNfdHhfdGltZW91dDsKIAotICAgICAgICBkZXYtPmdldF9zdGF0cyA9IGxlY19nZXRfc3RhdHM7Ci0gICAgICAgIGRldi0+c2V0X211bHRpY2FzdF9saXN0ID0gbGVjX3NldF9tdWx0aWNhc3RfbGlzdDsKLSAgICAgICAgZGV2LT5kb19pb2N0bCAgPSBOVUxMOwotICAgICAgICBwcmludGsoIiVzOiBJbml0aWFsaXplZCFcbiIsZGV2LT5uYW1lKTsKLSAgICAgICAgcmV0dXJuOworCWRldi0+Z2V0X3N0YXRzID0gbGVjX2dldF9zdGF0czsKKwlkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9IGxlY19zZXRfbXVsdGljYXN0X2xpc3Q7CisJZGV2LT5kb19pb2N0bCA9IE5VTEw7CisJcHJpbnRrKCIlczogSW5pdGlhbGl6ZWQhXG4iLCBkZXYtPm5hbWUpOworCXJldHVybjsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGNoYXIgbGVjX2N0cmxfbWFnaWNbXSA9IHsKLSAgICAgICAgMHhmZiwKLSAgICAgICAgMHgwMCwKLSAgICAgICAgMHgwMSwKLSAgICAgICAgMHgwMSB9OworCTB4ZmYsCisJMHgwMCwKKwkweDAxLAorCTB4MDEKK307CiAKICNkZWZpbmUgTEVDX0RBVEFfRElSRUNUXzgwMjMgIDIKICNkZWZpbmUgTEVDX0RBVEFfRElSRUNUXzgwMjUgIDMKIAogc3RhdGljIGludCBsZWNfaXNfZGF0YV9kaXJlY3Qoc3RydWN0IGF0bV92Y2MgKnZjYykKLXsgCit7CiAJcmV0dXJuICgodmNjLT5zYXAuYmxsaVswXS5sMy50cjk1Nzcuc25hcFs0XSA9PSBMRUNfREFUQV9ESVJFQ1RfODAyMykgfHwKIAkJKHZjYy0+c2FwLmJsbGlbMF0ubDMudHI5NTc3LnNuYXBbNF0gPT0gTEVDX0RBVEFfRElSRUNUXzgwMjUpKTsKLX0gCit9CiAKLXN0YXRpYyB2b2lkIAotbGVjX3B1c2goc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKK3N0YXRpYyB2b2lkIGxlY19wdXNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXZjYy0+cHJvdG9fZGF0YTsKLSAgICAgICAgc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsgCisJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IChzdHJ1Y3QgbmV0X2RldmljZSAqKXZjYy0+cHJvdG9fZGF0YTsKKwlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSAoc3RydWN0IGxlY19wcml2ICopZGV2LT5wcml2OwogCiAjaWYgRFVNUF9QQUNLRVRTID4wCi0gICAgICAgIGludCBpPTA7Ci0gICAgICAgIGNoYXIgYnVmWzMwMF07CisJaW50IGkgPSAwOworCWNoYXIgYnVmWzMwMF07CiAKLSAgICAgICAgcHJpbnRrKCIlczogbGVjX3B1c2ggdmNjIHZwaTolZCB2Y2k6JWRcbiIsIGRldi0+bmFtZSwKLSAgICAgICAgICAgICAgIHZjYy0+dnBpLCB2Y2MtPnZjaSk7CisJcHJpbnRrKCIlczogbGVjX3B1c2ggdmNjIHZwaTolZCB2Y2k6JWRcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgdmNjLT52cGksIHZjYy0+dmNpKTsKICNlbmRpZgotICAgICAgICBpZiAoIXNrYikgewotICAgICAgICAgICAgICAgIERQUklOVEsoIiVzOiBudWxsIHNrYlxuIixkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIGxlY192Y2NfY2xvc2UocHJpdiwgdmNjKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKwlpZiAoIXNrYikgeworCQlEUFJJTlRLKCIlczogbnVsbCBza2JcbiIsIGRldi0+bmFtZSk7CisJCWxlY192Y2NfY2xvc2UocHJpdiwgdmNjKTsKKwkJcmV0dXJuOworCX0KICNpZiBEVU1QX1BBQ0tFVFMgPiAwCi0gICAgICAgIHByaW50aygiJXM6IHJjdiBkYXRhbGVuOiVsZCBsZWNpZDolNC40eFxuIiwgZGV2LT5uYW1lLAotICAgICAgICAgICAgICAgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKKwlwcmludGsoIiVzOiByY3YgZGF0YWxlbjolbGQgbGVjaWQ6JTQuNHhcbiIsIGRldi0+bmFtZSwKKwkgICAgICAgc2tiLT5sZW4sIHByaXYtPmxlY2lkKTsKICNpZiBEVU1QX1BBQ0tFVFMgPj0gMgotICAgICAgICBmb3IoaT0wO2k8c2tiLT5sZW4gJiYgaSA8OTk7aSsrKSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihidWYraSozLCIlMi4yeCAiLDB4ZmYmc2tiLT5kYXRhW2ldKTsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgOTk7IGkrKykgeworCQlzcHJpbnRmKGJ1ZiArIGkgKiAzLCAiJTIuMnggIiwgMHhmZiAmIHNrYi0+ZGF0YVtpXSk7CisJfQogI2VsaWYgRFVNUF9QQUNLRVRTID49IDEKLSAgICAgICAgZm9yKGk9MDtpPHNrYi0+bGVuICYmIGkgPCAzMDtpKyspIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGJ1ZitpKjMsIiUyLjJ4ICIsIDB4ZmYmc2tiLT5kYXRhW2ldKTsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBza2ItPmxlbiAmJiBpIDwgMzA7IGkrKykgeworCQlzcHJpbnRmKGJ1ZiArIGkgKiAzLCAiJTIuMnggIiwgMHhmZiAmIHNrYi0+ZGF0YVtpXSk7CisJfQogI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+PSAxICovCi0gICAgICAgIGlmIChpPT1za2ItPmxlbikKLSAgICAgICAgICAgICAgICBwcmludGsoIiVzXG4iLGJ1Zik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmludGsoIiVzLi4uXG4iLGJ1Zik7CisJaWYgKGkgPT0gc2tiLT5sZW4pCisJCXByaW50aygiJXNcbiIsIGJ1Zik7CisJZWxzZQorCQlwcmludGsoIiVzLi4uXG4iLCBidWYpOwogI2VuZGlmIC8qIERVTVBfUEFDS0VUUyA+IDAgKi8KLSAgICAgICAgaWYgKG1lbWNtcChza2ItPmRhdGEsIGxlY19jdHJsX21hZ2ljLCA0KSA9PTApIHsgLyogQ29udHJvbCBmcmFtZSwgdG8gZGFlbW9uKi8KKwlpZiAobWVtY21wKHNrYi0+ZGF0YSwgbGVjX2N0cmxfbWFnaWMsIDQpID09IDApIHsJLyogQ29udHJvbCBmcmFtZSwgdG8gZGFlbW9uICovCiAJCXN0cnVjdCBzb2NrICpzayA9IHNrX2F0bSh2Y2MpOwogCi0gICAgICAgICAgICAgICAgRFBSSU5USygiJXM6IFRvIGRhZW1vblxuIixkZXYtPm5hbWUpOwotICAgICAgICAgICAgICAgIHNrYl9xdWV1ZV90YWlsKCZzay0+c2tfcmVjZWl2ZV9xdWV1ZSwgc2tiKTsKLSAgICAgICAgICAgICAgICBzay0+c2tfZGF0YV9yZWFkeShzaywgc2tiLT5sZW4pOwotICAgICAgICB9IGVsc2UgeyAvKiBEYXRhIGZyYW1lLCBxdWV1ZSB0byBwcm90b2NvbCBoYW5kbGVycyAqLworCQlEUFJJTlRLKCIlczogVG8gZGFlbW9uXG4iLCBkZXYtPm5hbWUpOworCQlza2JfcXVldWVfdGFpbCgmc2stPnNrX3JlY2VpdmVfcXVldWUsIHNrYik7CisJCXNrLT5za19kYXRhX3JlYWR5KHNrLCBza2ItPmxlbik7CisJfSBlbHNlIHsJCS8qIERhdGEgZnJhbWUsIHF1ZXVlIHRvIHByb3RvY29sIGhhbmRsZXJzICovCiAJCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpzcmMsICpkc3Q7CisJCXVuc2lnbmVkIGNoYXIgKnNyYywgKmRzdDsKIAotICAgICAgICAgICAgICAgIGF0bV9yZXR1cm4odmNjLHNrYi0+dHJ1ZXNpemUpOwotICAgICAgICAgICAgICAgIGlmICgqKHVpbnQxNl90ICopc2tiLT5kYXRhID09IGh0b25zKHByaXYtPmxlY2lkKSB8fAotICAgICAgICAgICAgICAgICAgICAhcHJpdi0+bGVjZCB8fAotICAgICAgICAgICAgICAgICAgICAhKGRldi0+ZmxhZ3MgJiBJRkZfVVApKSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgLyogUHJvYmFibHkgbG9vcGluZyBiYWNrLCBvciBpZiBsZWNkIGlzIG1pc3NpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBsZWNkIGhhcyBnb25lIGRvd24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIklnbm9yaW5nIGZyYW1lLi4uXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGRldl9rZnJlZV9za2Ioc2tiKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9CisJCWF0bV9yZXR1cm4odmNjLCBza2ItPnRydWVzaXplKTsKKwkJaWYgKCoodWludDE2X3QgKikgc2tiLT5kYXRhID09IGh0b25zKHByaXYtPmxlY2lkKSB8fAorCQkgICAgIXByaXYtPmxlY2QgfHwgIShkZXYtPmZsYWdzICYgSUZGX1VQKSkgeworCQkJLyoKKwkJCSAqIFByb2JhYmx5IGxvb3BpbmcgYmFjaywgb3IgaWYgbGVjZCBpcyBtaXNzaW5nLAorCQkJICogbGVjZCBoYXMgZ29uZSBkb3duCisJCQkgKi8KKwkJCURQUklOVEsoIklnbm9yaW5nIGZyYW1lLi4uXG4iKTsKKwkJCWRldl9rZnJlZV9za2Ioc2tiKTsKKwkJCXJldHVybjsKKwkJfQogI2lmZGVmIENPTkZJR19UUgotICAgICAgICAgICAgICAgIGlmIChwcml2LT5pc190cmRldikKLQkJCWRzdCA9ICgoc3RydWN0IGxlY2RhdGFoZHJfODAyNSAqKSBza2ItPmRhdGEpLT5oX2Rlc3Q7Ci0gICAgICAgICAgICAgICAgZWxzZQorCQlpZiAocHJpdi0+aXNfdHJkZXYpCisJCQlkc3QgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjUgKilza2ItPmRhdGEpLT5oX2Rlc3Q7CisJCWVsc2UKICNlbmRpZgotCQlkc3QgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjMgKikgc2tiLT5kYXRhKS0+aF9kZXN0OworCQkJZHN0ID0gKChzdHJ1Y3QgbGVjZGF0YWhkcl84MDIzICopc2tiLT5kYXRhKS0+aF9kZXN0OwogCi0JCS8qIElmIHRoaXMgaXMgYSBEYXRhIERpcmVjdCBWQ0MsIGFuZCB0aGUgVkNDIGRvZXMgbm90IG1hdGNoCisJCS8qCisJCSAqIElmIHRoaXMgaXMgYSBEYXRhIERpcmVjdCBWQ0MsIGFuZCB0aGUgVkNDIGRvZXMgbm90IG1hdGNoCiAJCSAqIHRoZSBMRV9BUlAgY2FjaGUgZW50cnksIGRlbGV0ZSB0aGUgTEVfQVJQIGNhY2hlIGVudHJ5LgogCQkgKi8KIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCQlpZiAobGVjX2lzX2RhdGFfZGlyZWN0KHZjYykpIHsKICNpZmRlZiBDT05GSUdfVFIKIAkJCWlmIChwcml2LT5pc190cmRldikKLQkJCQlzcmMgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjUgKikgc2tiLT5kYXRhKS0+aF9zb3VyY2U7CisJCQkJc3JjID0KKwkJCQkgICAgKChzdHJ1Y3QgbGVjZGF0YWhkcl84MDI1ICopc2tiLT5kYXRhKS0+CisJCQkJICAgIGhfc291cmNlOwogCQkJZWxzZQogI2VuZGlmCi0JCQlzcmMgPSAoKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjMgKikgc2tiLT5kYXRhKS0+aF9zb3VyY2U7CisJCQkJc3JjID0KKwkJCQkgICAgKChzdHJ1Y3QgbGVjZGF0YWhkcl84MDIzICopc2tiLT5kYXRhKS0+CisJCQkJICAgIGhfc291cmNlOwogCQkJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgc3JjKTsKIAkJCWlmIChlbnRyeSAmJiBlbnRyeS0+dmNjICE9IHZjYykgewogCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKLQkJCQlrZnJlZShlbnRyeSk7CisJCQkJbGVjX2FycF9wdXQoZW50cnkpOwogCQkJfQogCQl9CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogCi0gICAgICAgICAgICAgICAgaWYgKCEoZHN0WzBdJjB4MDEpICYmICAgLyogTmV2ZXIgZmlsdGVyIE11bHRpL0Jyb2FkY2FzdCAqLwotICAgICAgICAgICAgICAgICAgICAhcHJpdi0+aXNfcHJveHkgJiYgIC8qIFByb3h5IHdhbnRzIGFsbCB0aGUgcGFja2V0cyAqLworCQlpZiAoIShkc3RbMF0gJiAweDAxKSAmJgkvKiBOZXZlciBmaWx0ZXIgTXVsdGkvQnJvYWRjYXN0ICovCisJCSAgICAhcHJpdi0+aXNfcHJveHkgJiYJLyogUHJveHkgd2FudHMgYWxsIHRoZSBwYWNrZXRzICovCiAJCSAgICBtZW1jbXAoZHN0LCBkZXYtPmRldl9hZGRyLCBkZXYtPmFkZHJfbGVuKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYihza2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAocHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX2NoZWNrX2VtcHRpZXMocHJpdiwgdmNjLCBza2IpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBza2ItPmRldiA9IGRldjsKLSAgICAgICAgICAgICAgICBza2JfcHVsbChza2IsIDIpOyAvKiBza2lwIGxlY19pZCAqLworCQkJZGV2X2tmcmVlX3NrYihza2IpOworCQkJcmV0dXJuOworCQl9CisJCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcykpIHsKKwkJCWxlY19hcnBfY2hlY2tfZW1wdGllcyhwcml2LCB2Y2MsIHNrYik7CisJCX0KKwkJc2tiLT5kZXYgPSBkZXY7CisJCXNrYl9wdWxsKHNrYiwgMik7CS8qIHNraXAgbGVjX2lkICovCiAjaWZkZWYgQ09ORklHX1RSCi0gICAgICAgICAgICAgICAgaWYgKHByaXYtPmlzX3RyZGV2KSBza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRldik7Ci0gICAgICAgICAgICAgICAgZWxzZQorCQlpZiAocHJpdi0+aXNfdHJkZXYpCisJCQlza2ItPnByb3RvY29sID0gdHJfdHlwZV90cmFucyhza2IsIGRldik7CisJCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIHNrYi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIGRldik7Ci0gICAgICAgICAgICAgICAgcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOwotICAgICAgICAgICAgICAgIHByaXYtPnN0YXRzLnJ4X2J5dGVzICs9IHNrYi0+bGVuOwotICAgICAgICAgICAgICAgIG1lbXNldChBVE1fU0tCKHNrYiksIDAsIHNpemVvZihzdHJ1Y3QgYXRtX3NrYl9kYXRhKSk7Ci0gICAgICAgICAgICAgICAgbmV0aWZfcngoc2tiKTsKLSAgICAgICAgfQorCQkJc2tiLT5wcm90b2NvbCA9IGV0aF90eXBlX3RyYW5zKHNrYiwgZGV2KTsKKwkJcHJpdi0+c3RhdHMucnhfcGFja2V0cysrOworCQlwcml2LT5zdGF0cy5yeF9ieXRlcyArPSBza2ItPmxlbjsKKwkJbWVtc2V0KEFUTV9TS0Ioc2tiKSwgMCwgc2l6ZW9mKHN0cnVjdCBhdG1fc2tiX2RhdGEpKTsKKwkJbmV0aWZfcngoc2tiKTsKKwl9CiB9CiAKLXN0YXRpYyB2b2lkCi1sZWNfcG9wKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdm9pZCBsZWNfcG9wKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGxlY192Y2NfcHJpdiAqdnByaXYgPSBMRUNfVkNDX1BSSVYodmNjKTsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc2tiLT5kZXY7CkBAIC04MjAsMTIzICs4NTksMTIxIEBACiAJfQogfQogCi1zdGF0aWMgaW50IAotbGVjX3ZjY19hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgdm9pZCBfX3VzZXIgKmFyZykKK3N0YXRpYyBpbnQgbGVjX3ZjY19hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgdm9pZCBfX3VzZXIgKmFyZykKIHsKIAlzdHJ1Y3QgbGVjX3ZjY19wcml2ICp2cHJpdjsKLSAgICAgICAgaW50IGJ5dGVzX2xlZnQ7Ci0gICAgICAgIHN0cnVjdCBhdG1sZWNfaW9jIGlvY19kYXRhOworCWludCBieXRlc19sZWZ0OworCXN0cnVjdCBhdG1sZWNfaW9jIGlvY19kYXRhOwogCi0gICAgICAgIC8qIExlY2QgbXVzdCBiZSB1cCBpbiB0aGlzIGNhc2UgKi8KLSAgICAgICAgYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKCZpb2NfZGF0YSwgYXJnLCBzaXplb2Yoc3RydWN0IGF0bWxlY19pb2MpKTsKLSAgICAgICAgaWYgKGJ5dGVzX2xlZnQgIT0gMCkgewotICAgICAgICAgICAgICAgIHByaW50aygibGVjOiBsZWNfdmNjX2F0dGFjaCwgY29weSBmcm9tIHVzZXIgZmFpbGVkIGZvciAlZCBieXRlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNfbGVmdCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlvY19kYXRhLmRldl9udW0gPCAwIHx8IGlvY19kYXRhLmRldl9udW0gPj0gTUFYX0xFQ19JVEYgfHwgCi0gICAgICAgICAgICAhZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXSkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKwkvKiBMZWNkIG11c3QgYmUgdXAgaW4gdGhpcyBjYXNlICovCisJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKCZpb2NfZGF0YSwgYXJnLCBzaXplb2Yoc3RydWN0IGF0bWxlY19pb2MpKTsKKwlpZiAoYnl0ZXNfbGVmdCAhPSAwKSB7CisJCXByaW50aworCQkgICAgKCJsZWM6IGxlY192Y2NfYXR0YWNoLCBjb3B5IGZyb20gdXNlciBmYWlsZWQgZm9yICVkIGJ5dGVzXG4iLAorCQkgICAgIGJ5dGVzX2xlZnQpOworCX0KKwlpZiAoaW9jX2RhdGEuZGV2X251bSA8IDAgfHwgaW9jX2RhdGEuZGV2X251bSA+PSBNQVhfTEVDX0lURiB8fAorCSAgICAhZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXSkKKwkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKCEodnByaXYgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX3ZjY19wcml2KSwgR0ZQX0tFUk5FTCkpKQogCQlyZXR1cm4gLUVOT01FTTsKIAl2cHJpdi0+eG9mZiA9IDA7CiAJdnByaXYtPm9sZF9wb3AgPSB2Y2MtPnBvcDsKIAl2Y2MtPnVzZXJfYmFjayA9IHZwcml2OwogCXZjYy0+cG9wID0gbGVjX3BvcDsKLSAgICAgICAgbGVjX3ZjY19hZGRlZChkZXZfbGVjW2lvY19kYXRhLmRldl9udW1dLT5wcml2LCAKLSAgICAgICAgICAgICAgICAgICAgICAmaW9jX2RhdGEsIHZjYywgdmNjLT5wdXNoKTsKLSAgICAgICAgdmNjLT5wcm90b19kYXRhID0gZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXTsKLSAgICAgICAgdmNjLT5wdXNoID0gbGVjX3B1c2g7Ci0gICAgICAgIHJldHVybiAwOworCWxlY192Y2NfYWRkZWQoZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXS0+cHJpdiwKKwkJICAgICAgJmlvY19kYXRhLCB2Y2MsIHZjYy0+cHVzaCk7CisJdmNjLT5wcm90b19kYXRhID0gZGV2X2xlY1tpb2NfZGF0YS5kZXZfbnVtXTsKKwl2Y2MtPnB1c2ggPSBsZWNfcHVzaDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCAKLWxlY19tY2FzdF9hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IGFyZykKK3N0YXRpYyBpbnQgbGVjX21jYXN0X2F0dGFjaChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBpbnQgYXJnKQogewotICAgICAgICBpZiAoYXJnIDwwIHx8IGFyZyA+PSBNQVhfTEVDX0lURiB8fCAhZGV2X2xlY1thcmddKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB2Y2MtPnByb3RvX2RhdGEgPSBkZXZfbGVjW2FyZ107Ci0gICAgICAgIHJldHVybiAobGVjX21jYXN0X21ha2UoKHN0cnVjdCBsZWNfcHJpdiopZGV2X2xlY1thcmddLT5wcml2LCB2Y2MpKTsKKwlpZiAoYXJnIDwgMCB8fCBhcmcgPj0gTUFYX0xFQ19JVEYgfHwgIWRldl9sZWNbYXJnXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJdmNjLT5wcm90b19kYXRhID0gZGV2X2xlY1thcmddOworCXJldHVybiAobGVjX21jYXN0X21ha2UoKHN0cnVjdCBsZWNfcHJpdiAqKWRldl9sZWNbYXJnXS0+cHJpdiwgdmNjKSk7CiB9CiAKIC8qIEluaXRpYWxpemUgZGV2aWNlLiAqLwotc3RhdGljIGludCAKLWxlY2RfYXR0YWNoKHN0cnVjdCBhdG1fdmNjICp2Y2MsIGludCBhcmcpCi17ICAKLSAgICAgICAgaW50IGk7Ci0gICAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdjsKK3N0YXRpYyBpbnQgbGVjZF9hdHRhY2goc3RydWN0IGF0bV92Y2MgKnZjYywgaW50IGFyZykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CiAKLSAgICAgICAgaWYgKGFyZzwwKQotICAgICAgICAgICAgICAgIGkgPSAwOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgaSA9IGFyZzsKKwlpZiAoYXJnIDwgMCkKKwkJaSA9IDA7CisJZWxzZQorCQlpID0gYXJnOwogI2lmZGVmIENPTkZJR19UUgotICAgICAgICBpZiAoYXJnID49IE1BWF9MRUNfSVRGKQotICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotI2Vsc2UgLyogUmVzZXJ2ZSB0aGUgdG9wIE5VTV9UUl9ERVZTIGZvciBUUiAqLwotICAgICAgICBpZiAoYXJnID49IChNQVhfTEVDX0lURi1OVU1fVFJfREVWUykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisJaWYgKGFyZyA+PSBNQVhfTEVDX0lURikKKwkJcmV0dXJuIC1FSU5WQUw7CisjZWxzZQkJCQkvKiBSZXNlcnZlIHRoZSB0b3AgTlVNX1RSX0RFVlMgZm9yIFRSICovCisJaWYgKGFyZyA+PSAoTUFYX0xFQ19JVEYgLSBOVU1fVFJfREVWUykpCisJCXJldHVybiAtRUlOVkFMOwogI2VuZGlmCi0gICAgICAgIGlmICghZGV2X2xlY1tpXSkgewotICAgICAgICAgICAgICAgIGludCBpc190cmRldiwgc2l6ZTsKKwlpZiAoIWRldl9sZWNbaV0pIHsKKwkJaW50IGlzX3RyZGV2LCBzaXplOwogCi0gICAgICAgICAgICAgICAgaXNfdHJkZXYgPSAwOwotICAgICAgICAgICAgICAgIGlmIChpID49IChNQVhfTEVDX0lURiAtIE5VTV9UUl9ERVZTKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzX3RyZGV2ID0gMTsKKwkJaXNfdHJkZXYgPSAwOworCQlpZiAoaSA+PSAoTUFYX0xFQ19JVEYgLSBOVU1fVFJfREVWUykpCisJCQlpc190cmRldiA9IDE7CiAKLSAgICAgICAgICAgICAgICBzaXplID0gc2l6ZW9mKHN0cnVjdCBsZWNfcHJpdik7CisJCXNpemUgPSBzaXplb2Yoc3RydWN0IGxlY19wcml2KTsKICNpZmRlZiBDT05GSUdfVFIKLSAgICAgICAgICAgICAgICBpZiAoaXNfdHJkZXYpCi0gICAgICAgICAgICAgICAgICAgICAgICBkZXZfbGVjW2ldID0gYWxsb2NfdHJkZXYoc2l6ZSk7Ci0gICAgICAgICAgICAgICAgZWxzZQorCQlpZiAoaXNfdHJkZXYpCisJCQlkZXZfbGVjW2ldID0gYWxsb2NfdHJkZXYoc2l6ZSk7CisJCWVsc2UKICNlbmRpZgotICAgICAgICAgICAgICAgIGRldl9sZWNbaV0gPSBhbGxvY19ldGhlcmRldihzaXplKTsKLSAgICAgICAgICAgICAgICBpZiAoIWRldl9sZWNbaV0pCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKLSAgICAgICAgICAgICAgICBzbnByaW50ZihkZXZfbGVjW2ldLT5uYW1lLCBJRk5BTVNJWiwgImxlYyVkIiwgaSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlZ2lzdGVyX25ldGRldihkZXZfbGVjW2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9uZXRkZXYoZGV2X2xlY1tpXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICB9CisJCQlkZXZfbGVjW2ldID0gYWxsb2NfZXRoZXJkZXYoc2l6ZSk7CisJCWlmICghZGV2X2xlY1tpXSkKKwkJCXJldHVybiAtRU5PTUVNOworCQlzbnByaW50ZihkZXZfbGVjW2ldLT5uYW1lLCBJRk5BTVNJWiwgImxlYyVkIiwgaSk7CisJCWlmIChyZWdpc3Rlcl9uZXRkZXYoZGV2X2xlY1tpXSkpIHsKKwkJCWZyZWVfbmV0ZGV2KGRldl9sZWNbaV0pOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KIAotICAgICAgICAgICAgICAgIHByaXYgPSBkZXZfbGVjW2ldLT5wcml2OwotICAgICAgICAgICAgICAgIHByaXYtPmlzX3RyZGV2ID0gaXNfdHJkZXY7Ci0gICAgICAgICAgICAgICAgbGVjX2luaXQoZGV2X2xlY1tpXSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpdiA9IGRldl9sZWNbaV0tPnByaXY7Ci0gICAgICAgICAgICAgICAgaWYgKHByaXYtPmxlY2QpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVBRERSSU5VU0U7Ci0gICAgICAgIH0KLSAgICAgICAgbGVjX2FycF9pbml0KHByaXYpOwotCXByaXYtPml0Zm51bSA9IGk7ICAvKiBMQU5FMiBhZGRpdGlvbiAqLwotICAgICAgICBwcml2LT5sZWNkID0gdmNjOwotICAgICAgICB2Y2MtPmRldiA9ICZsZWNhdG1fZGV2OwotICAgICAgICB2Y2NfaW5zZXJ0X3NvY2tldChza19hdG0odmNjKSk7Ci0gICAgICAgIAotICAgICAgICB2Y2MtPnByb3RvX2RhdGEgPSBkZXZfbGVjW2ldOwotCXNldF9iaXQoQVRNX1ZGX01FVEEsJnZjYy0+ZmxhZ3MpOwotCXNldF9iaXQoQVRNX1ZGX1JFQURZLCZ2Y2MtPmZsYWdzKTsKKwkJcHJpdiA9IGRldl9sZWNbaV0tPnByaXY7CisJCXByaXYtPmlzX3RyZGV2ID0gaXNfdHJkZXY7CisJCWxlY19pbml0KGRldl9sZWNbaV0pOworCX0gZWxzZSB7CisJCXByaXYgPSBkZXZfbGVjW2ldLT5wcml2OworCQlpZiAocHJpdi0+bGVjZCkKKwkJCXJldHVybiAtRUFERFJJTlVTRTsKKwl9CisJbGVjX2FycF9pbml0KHByaXYpOworCXByaXYtPml0Zm51bSA9IGk7CS8qIExBTkUyIGFkZGl0aW9uICovCisJcHJpdi0+bGVjZCA9IHZjYzsKKwl2Y2MtPmRldiA9ICZsZWNhdG1fZGV2OworCXZjY19pbnNlcnRfc29ja2V0KHNrX2F0bSh2Y2MpKTsKIAotICAgICAgICAvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlc2UgdmFyaWFibGVzICovCi0gICAgICAgIHByaXYtPm1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudCA9IDE7Ci0gICAgICAgIHByaXYtPm1heF91bmtub3duX2ZyYW1lX3RpbWUgPSAoMSpIWik7Ci0gICAgICAgIHByaXYtPnZjY190aW1lb3V0X3BlcmlvZCA9ICgxMjAwKkhaKTsKLSAgICAgICAgcHJpdi0+bWF4X3JldHJ5X2NvdW50ID0gMTsKLSAgICAgICAgcHJpdi0+YWdpbmdfdGltZSA9ICgzMDAqSFopOwotICAgICAgICBwcml2LT5mb3J3YXJkX2RlbGF5X3RpbWUgPSAoMTUqSFopOwotICAgICAgICBwcml2LT50b3BvbG9neV9jaGFuZ2UgPSAwOwotICAgICAgICBwcml2LT5hcnBfcmVzcG9uc2VfdGltZSA9ICgxKkhaKTsKLSAgICAgICAgcHJpdi0+Zmx1c2hfdGltZW91dCA9ICg0KkhaKTsKLSAgICAgICAgcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkgPSAoNipIWik7CisJdmNjLT5wcm90b19kYXRhID0gZGV2X2xlY1tpXTsKKwlzZXRfYml0KEFUTV9WRl9NRVRBLCAmdmNjLT5mbGFncyk7CisJc2V0X2JpdChBVE1fVkZfUkVBRFksICZ2Y2MtPmZsYWdzKTsKIAotICAgICAgICBpZiAoZGV2X2xlY1tpXS0+ZmxhZ3MgJiBJRkZfVVApIHsKLSAgICAgICAgICAgICAgICBuZXRpZl9zdGFydF9xdWV1ZShkZXZfbGVjW2ldKTsKLSAgICAgICAgfQotICAgICAgICBfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOwotICAgICAgICByZXR1cm4gaTsKKwkvKiBTZXQgZGVmYXVsdCB2YWx1ZXMgdG8gdGhlc2UgdmFyaWFibGVzICovCisJcHJpdi0+bWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50ID0gMTsKKwlwcml2LT5tYXhfdW5rbm93bl9mcmFtZV90aW1lID0gKDEgKiBIWik7CisJcHJpdi0+dmNjX3RpbWVvdXRfcGVyaW9kID0gKDEyMDAgKiBIWik7CisJcHJpdi0+bWF4X3JldHJ5X2NvdW50ID0gMTsKKwlwcml2LT5hZ2luZ190aW1lID0gKDMwMCAqIEhaKTsKKwlwcml2LT5mb3J3YXJkX2RlbGF5X3RpbWUgPSAoMTUgKiBIWik7CisJcHJpdi0+dG9wb2xvZ3lfY2hhbmdlID0gMDsKKwlwcml2LT5hcnBfcmVzcG9uc2VfdGltZSA9ICgxICogSFopOworCXByaXYtPmZsdXNoX3RpbWVvdXQgPSAoNCAqIEhaKTsKKwlwcml2LT5wYXRoX3N3aXRjaGluZ19kZWxheSA9ICg2ICogSFopOworCisJaWYgKGRldl9sZWNbaV0tPmZsYWdzICYgSUZGX1VQKSB7CisJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldl9sZWNbaV0pOworCX0KKwlfX21vZHVsZV9nZXQoVEhJU19NT0RVTEUpOworCXJldHVybiBpOwogfQogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKLXN0YXRpYyBjaGFyKiBsZWNfYXJwX2dldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3RhdHVzKQorc3RhdGljIGNoYXIgKmxlY19hcnBfZ2V0X3N0YXR1c19zdHJpbmcodW5zaWduZWQgY2hhciBzdGF0dXMpCiB7CiAJc3RhdGljIGNoYXIgKmxlY19hcnBfc3RhdHVzX3N0cmluZ1tdID0gewogCQkiRVNJX1VOS05PV04gICAgICAgIiwKQEAgLTk2Niw1MiArMTAwMyw1NCBAQAogCWlmIChlbnRyeS0+dmNjKQogCQlzZXFfcHJpbnRmKHNlcSwgIiUzZCAlM2QgIiwgZW50cnktPnZjYy0+dnBpLCBlbnRyeS0+dmNjLT52Y2kpOwogCWVsc2UKLQkgICAgICAgIHNlcV9wcmludGYoc2VxLCAiICAgICAgICAiKTsKKwkJc2VxX3ByaW50ZihzZXEsICIgICAgICAgICIpOwogCWlmIChlbnRyeS0+cmVjdl92Y2MpIHsKIAkJc2VxX3ByaW50ZihzZXEsICIgICAgICUzZCAlM2QiLCBlbnRyeS0+cmVjdl92Y2MtPnZwaSwKIAkJCSAgIGVudHJ5LT5yZWN2X3ZjYy0+dmNpKTsKLSAgICAgICAgfQotICAgICAgICBzZXFfcHV0YyhzZXEsICdcbicpOworCX0KKwlzZXFfcHV0YyhzZXEsICdcbicpOwogfQogCi0KIHN0cnVjdCBsZWNfc3RhdGUgewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGxlY19wcml2ICpsb2NrZWQ7Ci0Jc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7CiAJaW50IGl0ZjsKIAlpbnQgYXJwX3RhYmxlOwogCWludCBtaXNjX3RhYmxlOwogfTsKIAotc3RhdGljIHZvaWQgKmxlY190Ymxfd2FsayhzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZSwgc3RydWN0IGxlY19hcnBfdGFibGUgKnRibCwKK3N0YXRpYyB2b2lkICpsZWNfdGJsX3dhbGsoc3RydWN0IGxlY19zdGF0ZSAqc3RhdGUsIHN0cnVjdCBobGlzdF9oZWFkICp0YmwsCiAJCQkgIGxvZmZfdCAqbCkKIHsKLQlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZSA9IHN0YXRlLT5lbnRyeTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqZSA9IHN0YXRlLT5ub2RlOworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICp0bXA7CiAKIAlpZiAoIWUpCi0JCWUgPSB0Ymw7CisJCWUgPSB0YmwtPmZpcnN0OwogCWlmIChlID09ICh2b2lkICopMSkgewotCQllID0gdGJsOworCQllID0gdGJsLT5maXJzdDsKIAkJLS0qbDsKIAl9Ci0JZm9yICg7IGU7IGUgPSBlLT5uZXh0KSB7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9mcm9tKHRtcCwgZSwgbmV4dCkgewogCQlpZiAoLS0qbCA8IDApCiAJCQlicmVhazsKIAl9Ci0Jc3RhdGUtPmVudHJ5ID0gZTsKKwlzdGF0ZS0+bm9kZSA9IGU7CisKIAlyZXR1cm4gKCpsIDwgMCkgPyBzdGF0ZSA6IE5VTEw7CiB9CiAKIHN0YXRpYyB2b2lkICpsZWNfYXJwX3dhbGsoc3RydWN0IGxlY19zdGF0ZSAqc3RhdGUsIGxvZmZfdCAqbCwKLQkJCSAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKKwkJCSAgc3RydWN0IGxlY19wcml2ICpwcml2KQogewogCXZvaWQgKnYgPSBOVUxMOwogCWludCBwOwogCiAJZm9yIChwID0gc3RhdGUtPmFycF90YWJsZTsgcCA8IExFQ19BUlBfVEFCTEVfU0laRTsgcCsrKSB7Ci0JCXYgPSBsZWNfdGJsX3dhbGsoc3RhdGUsIHByaXYtPmxlY19hcnBfdGFibGVzW3BdLCBsKTsKKwkJdiA9IGxlY190Ymxfd2FsayhzdGF0ZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW3BdLCBsKTsKIAkJaWYgKHYpCiAJCQlicmVhazsKIAl9CkBAIC0xMDIyLDEwICsxMDYxLDEwIEBACiBzdGF0aWMgdm9pZCAqbGVjX21pc2Nfd2FsayhzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZSwgbG9mZl90ICpsLAogCQkJICAgc3RydWN0IGxlY19wcml2ICpwcml2KQogewotCXN0cnVjdCBsZWNfYXJwX3RhYmxlICpsZWNfbWlzY190YWJsZXNbXSA9IHsKLQkJcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLAotCQlwcml2LT5sZWNfbm9fZm9yd2FyZCwKLQkJcHJpdi0+bWNhc3RfZndkcworCXN0cnVjdCBobGlzdF9oZWFkICpsZWNfbWlzY190YWJsZXNbXSA9IHsKKwkJJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywKKwkJJnByaXYtPmxlY19ub19mb3J3YXJkLAorCQkmcHJpdi0+bWNhc3RfZndkcwogCX07CiAJdm9pZCAqdiA9IE5VTEw7CiAJaW50IHE7CkBAIC0xMDQ2LDggKzEwODUsNyBAQAogCQlzdGF0ZS0+bG9ja2VkID0gcHJpdjsKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgc3RhdGUtPmZsYWdzKTsKIAl9Ci0JaWYgKCFsZWNfYXJwX3dhbGsoc3RhdGUsIGwsIHByaXYpICYmCi0JICAgICFsZWNfbWlzY193YWxrKHN0YXRlLCBsLCBwcml2KSkgeworCWlmICghbGVjX2FycF93YWxrKHN0YXRlLCBsLCBwcml2KSAmJiAhbGVjX21pc2Nfd2FsayhzdGF0ZSwgbCwgcHJpdikpIHsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBzdGF0ZS0+ZmxhZ3MpOwogCQlzdGF0ZS0+bG9ja2VkID0gTlVMTDsKIAkJLyogUGFydGlhbCBzdGF0ZSByZXNldCBmb3IgdGhlIG5leHQgdGltZSB3ZSBnZXQgY2FsbGVkICovCkBAIC0xMDgxLDcgKzExMTksNyBAQAogCQlpZiAodikKIAkJCWJyZWFrOwogCX0KLQlyZXR1cm4gdjsgCisJcmV0dXJuIHY7CiB9CiAKIHN0YXRpYyB2b2lkICpsZWNfc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBsb2ZmX3QgKnBvcykKQEAgLTEwOTMsOSArMTEzMSw5IEBACiAJc3RhdGUtPmxvY2tlZCA9IE5VTEw7CiAJc3RhdGUtPmFycF90YWJsZSA9IDA7CiAJc3RhdGUtPm1pc2NfdGFibGUgPSAwOwotCXN0YXRlLT5lbnRyeSA9ICh2b2lkICopMTsKKwlzdGF0ZS0+bm9kZSA9ICh2b2lkICopMTsKIAotCXJldHVybiAqcG9zID8gbGVjX2dldF9pZHgoc3RhdGUsICpwb3MpIDogKHZvaWQqKTE7CisJcmV0dXJuICpwb3MgPyBsZWNfZ2V0X2lkeChzdGF0ZSwgKnBvcykgOiAodm9pZCAqKTE7CiB9CiAKIHN0YXRpYyB2b2lkIGxlY19zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKQEAgLTExMjAsMjcgKzExNTgsMjggQEAKIAogc3RhdGljIGludCBsZWNfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCiB7Ci0Jc3RhdGljIGNoYXIgbGVjX2Jhbm5lcltdID0gIkl0ZiAgTUFDICAgICAgICAgIEFUTSBkZXN0aW5hdGlvbiIgCi0JCSIgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgICAgICAgICAgIEZsYWdzICIKLQkJIlZQSS9WQ0kgUmVjdiBWUEkvVkNJXG4iOworCXN0YXRpYyBjaGFyIGxlY19iYW5uZXJbXSA9ICJJdGYgIE1BQyAgICAgICAgICBBVE0gZGVzdGluYXRpb24iCisJICAgICIgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1cyAgICAgICAgICAgIEZsYWdzICIKKwkgICAgIlZQSS9WQ0kgUmVjdiBWUEkvVkNJXG4iOwogCiAJaWYgKHYgPT0gKHZvaWQgKikxKQogCQlzZXFfcHV0cyhzZXEsIGxlY19iYW5uZXIpOwogCWVsc2UgewogCQlzdHJ1Y3QgbGVjX3N0YXRlICpzdGF0ZSA9IHNlcS0+cHJpdmF0ZTsKLQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHN0YXRlLT5kZXY7IAorCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gc3RhdGUtPmRldjsKKwkJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5ID0gaGxpc3RfZW50cnkoc3RhdGUtPm5vZGUsIHN0cnVjdCBsZWNfYXJwX3RhYmxlLCBuZXh0KTsKIAogCQlzZXFfcHJpbnRmKHNlcSwgIiVzICIsIGRldi0+bmFtZSk7Ci0JCWxlY19pbmZvKHNlcSwgc3RhdGUtPmVudHJ5KTsKKwkJbGVjX2luZm8oc2VxLCBlbnRyeSk7CiAJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgc3RydWN0IHNlcV9vcGVyYXRpb25zIGxlY19zZXFfb3BzID0gewotCS5zdGFydAk9IGxlY19zZXFfc3RhcnQsCi0JLm5leHQJPSBsZWNfc2VxX25leHQsCi0JLnN0b3AJPSBsZWNfc2VxX3N0b3AsCi0JLnNob3cJPSBsZWNfc2VxX3Nob3csCisJLnN0YXJ0ID0gbGVjX3NlcV9zdGFydCwKKwkubmV4dCA9IGxlY19zZXFfbmV4dCwKKwkuc3RvcCA9IGxlY19zZXFfc3RvcCwKKwkuc2hvdyA9IGxlY19zZXFfc2hvdywKIH07CiAKIHN0YXRpYyBpbnQgbGVjX3NlcV9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQpAQCAtMTE3NCwxMSArMTIxMywxMSBAQAogfQogCiBzdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBsZWNfc2VxX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuCQk9IGxlY19zZXFfb3BlbiwKLQkucmVhZAkJPSBzZXFfcmVhZCwKLQkubGxzZWVrCQk9IHNlcV9sc2VlaywKLQkucmVsZWFzZQk9IGxlY19zZXFfcmVsZWFzZSwKKwkub3duZXIgPSBUSElTX01PRFVMRSwKKwkub3BlbiA9IGxlY19zZXFfb3BlbiwKKwkucmVhZCA9IHNlcV9yZWFkLAorCS5sbHNlZWsgPSBzZXFfbHNlZWssCisJLnJlbGVhc2UgPSBsZWNfc2VxX3JlbGVhc2UsCiB9OwogI2VuZGlmCiAKQEAgLTExODYsMzggKzEyMjUsMzggQEAKIHsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjID0gQVRNX1NEKHNvY2spOwogCWludCBlcnIgPSAwOwotCQorCiAJc3dpdGNoIChjbWQpIHsKLQkJY2FzZSBBVE1MRUNfQ1RSTDogCi0JCWNhc2UgQVRNTEVDX01DQVNUOgotCQljYXNlIEFUTUxFQ19EQVRBOgotCQkJaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQkJCXJldHVybiAtRVBFUk07Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7CisJY2FzZSBBVE1MRUNfQ1RSTDoKKwljYXNlIEFUTUxFQ19NQ0FTVDoKKwljYXNlIEFUTUxFQ19EQVRBOgorCQlpZiAoIWNhcGFibGUoQ0FQX05FVF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwogCX0KIAogCXN3aXRjaCAoY21kKSB7Ci0JCWNhc2UgQVRNTEVDX0NUUkw6Ci0JCQllcnIgPSBsZWNkX2F0dGFjaCh2Y2MsIChpbnQpIGFyZyk7Ci0JCQlpZiAoZXJyID49IDApCi0JCQkJc29jay0+c3RhdGUgPSBTU19DT05ORUNURUQ7Ci0JCQlicmVhazsKLQkJY2FzZSBBVE1MRUNfTUNBU1Q6Ci0JCQllcnIgPSBsZWNfbWNhc3RfYXR0YWNoKHZjYywgKGludCkgYXJnKTsKLQkJCWJyZWFrOwotCQljYXNlIEFUTUxFQ19EQVRBOgotCQkJZXJyID0gbGVjX3ZjY19hdHRhY2godmNjLCAodm9pZCBfX3VzZXIgKikgYXJnKTsKLQkJCWJyZWFrOworCWNhc2UgQVRNTEVDX0NUUkw6CisJCWVyciA9IGxlY2RfYXR0YWNoKHZjYywgKGludClhcmcpOworCQlpZiAoZXJyID49IDApCisJCQlzb2NrLT5zdGF0ZSA9IFNTX0NPTk5FQ1RFRDsKKwkJYnJlYWs7CisJY2FzZSBBVE1MRUNfTUNBU1Q6CisJCWVyciA9IGxlY19tY2FzdF9hdHRhY2godmNjLCAoaW50KWFyZyk7CisJCWJyZWFrOworCWNhc2UgQVRNTEVDX0RBVEE6CisJCWVyciA9IGxlY192Y2NfYXR0YWNoKHZjYywgKHZvaWQgX191c2VyICopYXJnKTsKKwkJYnJlYWs7CiAJfQogCiAJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHN0cnVjdCBhdG1faW9jdGwgbGFuZV9pb2N0bF9vcHMgPSB7Ci0JLm93bmVyICA9IFRISVNfTU9EVUxFLAotCS5pb2N0bCAgPSBsYW5lX2lvY3RsLAorCS5vd25lciA9IFRISVNfTU9EVUxFLAorCS5pb2N0bCA9IGxhbmVfaW9jdGwsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBsYW5lX21vZHVsZV9pbml0KHZvaWQpCkBAIC0xMjMxLDI5ICsxMjcwLDI5IEBACiAjZW5kaWYKIAogCXJlZ2lzdGVyX2F0bV9pb2N0bCgmbGFuZV9pb2N0bF9vcHMpOwotICAgICAgICBwcmludGsoImxlYy5jOiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiIGluaXRpYWxpemVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7CisJcHJpbnRrKCJsZWMuYzogIiBfX0RBVEVfXyAiICIgX19USU1FX18gIiBpbml0aWFsaXplZFxuIik7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBsYW5lX21vZHVsZV9jbGVhbnVwKHZvaWQpCiB7Ci0gICAgICAgIGludCBpOwotICAgICAgICBzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CisJaW50IGk7CisJc3RydWN0IGxlY19wcml2ICpwcml2OwogCiAJcmVtb3ZlX3Byb2NfZW50cnkoImxlYyIsIGF0bV9wcm9jX3Jvb3QpOwogCiAJZGVyZWdpc3Rlcl9hdG1faW9jdGwoJmxhbmVfaW9jdGxfb3BzKTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0xFQ19JVEY7IGkrKykgewotICAgICAgICAgICAgICAgIGlmIChkZXZfbGVjW2ldICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYgPSAoc3RydWN0IGxlY19wcml2ICopZGV2X2xlY1tpXS0+cHJpdjsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0xFQ19JVEY7IGkrKykgeworCQlpZiAoZGV2X2xlY1tpXSAhPSBOVUxMKSB7CisJCQlwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldl9sZWNbaV0tPnByaXY7CiAJCQl1bnJlZ2lzdGVyX25ldGRldihkZXZfbGVjW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfbmV0ZGV2KGRldl9sZWNbaV0pOwotICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2xlY1tpXSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJCQlmcmVlX25ldGRldihkZXZfbGVjW2ldKTsKKwkJCWRldl9sZWNbaV0gPSBOVUxMOworCQl9CisJfQogCi0gICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwlyZXR1cm47CiB9CiAKIG1vZHVsZV9pbml0KGxhbmVfbW9kdWxlX2luaXQpOwpAQCAtMTI2NywzNCArMTMwNiwzNCBAQAogICogSWYgZHN0X21hYyA9PSBOVUxMLCB0YXJnZXRsZXNzIExFX0FSUCB3aWxsIGJlIHNlbnQKICAqLwogc3RhdGljIGludCBsYW5lMl9yZXNvbHZlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpkc3RfbWFjLCBpbnQgZm9yY2UsCi0gICAgdTggKip0bHZzLCB1MzIgKnNpemVvZnRsdnMpCisJCQkgdTggKip0bHZzLCB1MzIgKnNpemVvZnRsdnMpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKWRldi0+cHJpdjsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKnRhYmxlOwotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBpbnQgcmV0dmFsOworCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKnRhYmxlOworCXN0cnVjdCBza19idWZmICpza2I7CisJaW50IHJldHZhbDsKIAotICAgICAgICBpZiAoZm9yY2UgPT0gMCkgeworCWlmIChmb3JjZSA9PSAwKSB7CiAJCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgICAgICAgICB0YWJsZSA9IGxlY19hcnBfZmluZChwcml2LCBkc3RfbWFjKTsKKwkJdGFibGUgPSBsZWNfYXJwX2ZpbmQocHJpdiwgZHN0X21hYyk7CiAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICAgICAgICAgIGlmKHRhYmxlID09IE5VTEwpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgKnRsdnMgPSBrbWFsbG9jKHRhYmxlLT5zaXplb2Z0bHZzLCBHRlBfQVRPTUlDKTsKLSAgICAgICAgICAgICAgICBpZiAoKnRsdnMgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtZW1jcHkoKnRsdnMsIHRhYmxlLT50bHZzLCB0YWJsZS0+c2l6ZW9mdGx2cyk7Ci0gICAgICAgICAgICAgICAgKnNpemVvZnRsdnMgPSB0YWJsZS0+c2l6ZW9mdGx2czsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorCQlpZiAodGFibGUgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQkqdGx2cyA9IGttYWxsb2ModGFibGUtPnNpemVvZnRsdnMsIEdGUF9BVE9NSUMpOworCQlpZiAoKnRsdnMgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKworCQltZW1jcHkoKnRsdnMsIHRhYmxlLT50bHZzLCB0YWJsZS0+c2l6ZW9mdGx2cyk7CisJCSpzaXplb2Z0bHZzID0gdGFibGUtPnNpemVvZnRsdnM7CisKKwkJcmV0dXJuIDA7CisJfQogCiAJaWYgKHNpemVvZnRsdnMgPT0gTlVMTCkKIAkJcmV0dmFsID0gc2VuZF90b19sZWNkKHByaXYsIGxfYXJwX3htdCwgZHN0X21hYywgTlVMTCwgTlVMTCk7Ci0JCQorCiAJZWxzZSB7CiAJCXNrYiA9IGFsbG9jX3NrYigqc2l6ZW9mdGx2cywgR0ZQX0FUT01JQyk7CiAJCWlmIChza2IgPT0gTlVMTCkKQEAgLTEzMDMsOSArMTM0Miw4IEBACiAJCW1lbWNweShza2ItPmRhdGEsICp0bHZzLCAqc2l6ZW9mdGx2cyk7CiAJCXJldHZhbCA9IHNlbmRfdG9fbGVjZChwcml2LCBsX2FycF94bXQsIGRzdF9tYWMsIE5VTEwsIHNrYik7CiAJfQotICAgICAgICByZXR1cm4gcmV0dmFsOwotfSAgICAgICAgCi0KKwlyZXR1cm4gcmV0dmFsOworfQogCiAvKgogICogTEFORTI6IDMuMS40LCBMRV9BU1NPQ0lBVEUucmVxdWVzdApAQCAtMTMxNCw4MCArMTM1Miw4NSBAQAogICogUmV0dXJucyAxIGZvciBzdWNjZXNzLCAwIGZvciBmYWlsdXJlIChvdXQgb2YgbWVtb3J5KQogICoKICAqLwotc3RhdGljIGludCBsYW5lMl9hc3NvY2lhdGVfcmVxIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbGFuX2RzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICB1OCAqdGx2cywgdTMyIHNpemVvZnRsdnMpCitzdGF0aWMgaW50IGxhbmUyX2Fzc29jaWF0ZV9yZXEoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCisJCQkgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQogewotICAgICAgICBpbnQgcmV0dmFsOwotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwotICAgICAgICBzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSAoc3RydWN0IGxlY19wcml2KilkZXYtPnByaXY7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOworCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7CiAKLSAgICAgICAgaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihsYW5fZHN0LCBkZXYtPmRldl9hZGRyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gKDApOyAgICAgICAvKiBub3Qgb3VyIG1hYyBhZGRyZXNzICovCisJaWYgKGNvbXBhcmVfZXRoZXJfYWRkcihsYW5fZHN0LCBkZXYtPmRldl9hZGRyKSkKKwkJcmV0dXJuICgwKTsJLyogbm90IG91ciBtYWMgYWRkcmVzcyAqLwogCi0gICAgICAgIGtmcmVlKHByaXYtPnRsdnMpOyAvKiBOVUxMIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhc3NvY2lhdGlvbiAqLworCWtmcmVlKHByaXYtPnRsdnMpOwkvKiBOVUxMIGlmIHRoZXJlIHdhcyBubyBwcmV2aW91cyBhc3NvY2lhdGlvbiAqLwogCi0gICAgICAgIHByaXYtPnRsdnMgPSBrbWFsbG9jKHNpemVvZnRsdnMsIEdGUF9LRVJORUwpOwotICAgICAgICBpZiAocHJpdi0+dGx2cyA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgICAgIHByaXYtPnNpemVvZnRsdnMgPSBzaXplb2Z0bHZzOwotICAgICAgICBtZW1jcHkocHJpdi0+dGx2cywgdGx2cywgc2l6ZW9mdGx2cyk7CisJcHJpdi0+dGx2cyA9IGttYWxsb2Moc2l6ZW9mdGx2cywgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYtPnRsdnMgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKwlwcml2LT5zaXplb2Z0bHZzID0gc2l6ZW9mdGx2czsKKwltZW1jcHkocHJpdi0+dGx2cywgdGx2cywgc2l6ZW9mdGx2cyk7CiAKLSAgICAgICAgc2tiID0gYWxsb2Nfc2tiKHNpemVvZnRsdnMsIEdGUF9BVE9NSUMpOwotICAgICAgICBpZiAoc2tiID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIHNrYi0+bGVuID0gc2l6ZW9mdGx2czsKLSAgICAgICAgbWVtY3B5KHNrYi0+ZGF0YSwgdGx2cywgc2l6ZW9mdGx2cyk7Ci0gICAgICAgIHJldHZhbCA9IHNlbmRfdG9fbGVjZChwcml2LCBsX2Fzc29jaWF0ZV9yZXEsIE5VTEwsIE5VTEwsIHNrYik7Ci0gICAgICAgIGlmIChyZXR2YWwgIT0gMCkKLSAgICAgICAgICAgICAgICBwcmludGsoImxlYy5jOiBsYW5lMl9hc3NvY2lhdGVfcmVxKCkgZmFpbGVkXG4iKTsKLSAgICAgICAgLyogSWYgdGhlIHByZXZpb3VzIGFzc29jaWF0aW9uIGhhcyBjaGFuZ2VkIHdlIG11c3QKLSAgICAgICAgICogc29tZWhvdyBub3RpZnkgb3RoZXIgTEFORSBlbnRpdGllcyBhYm91dCB0aGUgY2hhbmdlCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gKDEpOworCXNrYiA9IGFsbG9jX3NrYihzaXplb2Z0bHZzLCBHRlBfQVRPTUlDKTsKKwlpZiAoc2tiID09IE5VTEwpCisJCXJldHVybiAwOworCXNrYi0+bGVuID0gc2l6ZW9mdGx2czsKKwltZW1jcHkoc2tiLT5kYXRhLCB0bHZzLCBzaXplb2Z0bHZzKTsKKwlyZXR2YWwgPSBzZW5kX3RvX2xlY2QocHJpdiwgbF9hc3NvY2lhdGVfcmVxLCBOVUxMLCBOVUxMLCBza2IpOworCWlmIChyZXR2YWwgIT0gMCkKKwkJcHJpbnRrKCJsZWMuYzogbGFuZTJfYXNzb2NpYXRlX3JlcSgpIGZhaWxlZFxuIik7CisJLyoKKwkgKiBJZiB0aGUgcHJldmlvdXMgYXNzb2NpYXRpb24gaGFzIGNoYW5nZWQgd2UgbXVzdAorCSAqIHNvbWVob3cgbm90aWZ5IG90aGVyIExBTkUgZW50aXRpZXMgYWJvdXQgdGhlIGNoYW5nZQorCSAqLworCXJldHVybiAoMSk7CiB9CiAKIC8qCiAgKiBMQU5FMjogMy4xLjUsIExFX0FTU09DSUFURS5pbmRpY2F0aW9uCiAgKgogICovCi1zdGF0aWMgdm9pZCBsYW5lMl9hc3NvY2lhdGVfaW5kIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbWFjX2FkZHIsCi0gICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQorc3RhdGljIHZvaWQgbGFuZTJfYXNzb2NpYXRlX2luZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1OCAqbWFjX2FkZHIsCisJCQkJdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKQogewogI2lmIDAKLSAgICAgICAgaW50IGkgPSAwOworCWludCBpID0gMDsKICNlbmRpZgogCXN0cnVjdCBsZWNfcHJpdiAqcHJpdiA9IChzdHJ1Y3QgbGVjX3ByaXYgKilkZXYtPnByaXY7Ci0jaWYgMCAvKiBXaHkgaGF2ZSB0aGUgVExWcyBpbiBMRV9BUlAgZW50cmllcyBzaW5jZSB3ZSBkbyBub3QgdXNlIHRoZW0/IFdoZW4geW91Ci0gICAgICAgICB1bmNvbW1lbnQgdGhpcyBjb2RlLCBtYWtlIHN1cmUgdGhlIFRMVnMgZ2V0IGZyZWVkIHdoZW4gZW50cnkgaXMga2lsbGVkICovCi0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfYWRkcik7CisjaWYgMAkJCQkvKgorCQkJCSAqIFdoeSBoYXZlIHRoZSBUTFZzIGluIExFX0FSUCBlbnRyaWVzCisJCQkJICogc2luY2Ugd2UgZG8gbm90IHVzZSB0aGVtPyBXaGVuIHlvdQorCQkJCSAqIHVuY29tbWVudCB0aGlzIGNvZGUsIG1ha2Ugc3VyZSB0aGUKKwkJCQkgKiBUTFZzIGdldCBmcmVlZCB3aGVuIGVudHJ5IGlzIGtpbGxlZAorCQkJCSAqLworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfYWRkcik7CiAKLSAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOyAgICAgLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KKwlpZiAoZW50cnkgPT0gTlVMTCkKKwkJcmV0dXJuOwkJLyogc2hvdWxkIG5vdCBoYXBwZW4gKi8KIAotICAgICAgICBrZnJlZShlbnRyeS0+dGx2cyk7CisJa2ZyZWUoZW50cnktPnRsdnMpOwogCi0gICAgICAgIGVudHJ5LT50bHZzID0ga21hbGxvYyhzaXplb2Z0bHZzLCBHRlBfS0VSTkVMKTsKLSAgICAgICAgaWYgKGVudHJ5LT50bHZzID09IE5VTEwpCi0gICAgICAgICAgICAgICAgcmV0dXJuOworCWVudHJ5LT50bHZzID0ga21hbGxvYyhzaXplb2Z0bHZzLCBHRlBfS0VSTkVMKTsKKwlpZiAoZW50cnktPnRsdnMgPT0gTlVMTCkKKwkJcmV0dXJuOwogCi0gICAgICAgIGVudHJ5LT5zaXplb2Z0bHZzID0gc2l6ZW9mdGx2czsKLSAgICAgICAgbWVtY3B5KGVudHJ5LT50bHZzLCB0bHZzLCBzaXplb2Z0bHZzKTsKKwllbnRyeS0+c2l6ZW9mdGx2cyA9IHNpemVvZnRsdnM7CisJbWVtY3B5KGVudHJ5LT50bHZzLCB0bHZzLCBzaXplb2Z0bHZzKTsKICNlbmRpZgogI2lmIDAKLSAgICAgICAgcHJpbnRrKCJsZWMuYzogbGFuZTJfYXNzb2NpYXRlX2luZCgpXG4iKTsKLSAgICAgICAgcHJpbnRrKCJkdW1wIG9mIHRsdnMsIHNpemVvZnRsdnM9JWRcbiIsIHNpemVvZnRsdnMpOwotICAgICAgICB3aGlsZSAoaSA8IHNpemVvZnRsdnMpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCIlMDJ4ICIsIHRsdnNbaSsrXSk7Ci0gICAgICAgIAotICAgICAgICBwcmludGsoIlxuIik7CisJcHJpbnRrKCJsZWMuYzogbGFuZTJfYXNzb2NpYXRlX2luZCgpXG4iKTsKKwlwcmludGsoImR1bXAgb2YgdGx2cywgc2l6ZW9mdGx2cz0lZFxuIiwgc2l6ZW9mdGx2cyk7CisJd2hpbGUgKGkgPCBzaXplb2Z0bHZzKQorCQlwcmludGsoIiUwMnggIiwgdGx2c1tpKytdKTsKKworCXByaW50aygiXG4iKTsKICNlbmRpZgogCi0gICAgICAgIC8qIHRlbGwgTVBPQSBhYm91dCB0aGUgVExWcyB3ZSBzYXcgKi8KLSAgICAgICAgaWYgKHByaXYtPmxhbmUyX29wcyAmJiBwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9pbmRpY2F0b3IpIHsKLSAgICAgICAgICAgICAgICBwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9pbmRpY2F0b3IoZGV2LCBtYWNfYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGx2cywgc2l6ZW9mdGx2cyk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOworCS8qIHRlbGwgTVBPQSBhYm91dCB0aGUgVExWcyB3ZSBzYXcgKi8KKwlpZiAocHJpdi0+bGFuZTJfb3BzICYmIHByaXYtPmxhbmUyX29wcy0+YXNzb2NpYXRlX2luZGljYXRvcikgeworCQlwcml2LT5sYW5lMl9vcHMtPmFzc29jaWF0ZV9pbmRpY2F0b3IoZGV2LCBtYWNfYWRkciwKKwkJCQkJCSAgICAgdGx2cywgc2l6ZW9mdGx2cyk7CisJfQorCXJldHVybjsKIH0KIAogLyoKQEAgLTEzOTUsNyArMTQzOCw2IEBACiAgKgogICogbGVjX2FycGMuYyB3YXMgYWRkZWQgaGVyZSB3aGVuIG1ha2luZwogICogbGFuZSBjbGllbnQgbW9kdWxhci4gT2N0b2JlciAxOTk3Ci0gKgogICovCiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTQwNiw3ICsxNDQ4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CiAKLQogI2lmIDAKICNkZWZpbmUgRFBSSU5USyhmb3JtYXQsYXJncy4uLikKIC8qCkBAIC0xNDE3LDcgKzE0NTgsNyBAQAogCiAjZGVmaW5lIExFQ19BUlBfUkVGUkVTSF9JTlRFUlZBTCAoMypIWikKIAotc3RhdGljIHZvaWQgbGVjX2FycF9jaGVja19leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKTsKK3N0YXRpYyB2b2lkIGxlY19hcnBfY2hlY2tfZXhwaXJlKHZvaWQgKmRhdGEpOwogc3RhdGljIHZvaWQgbGVjX2FycF9leHBpcmVfYXJwKHVuc2lnbmVkIGxvbmcgZGF0YSk7CiAKIC8qIApAQCAtMTQyOSw0NzQgKzE0NzAsMzk3IEBACiAvKgogICogSW5pdGlhbGl6YXRpb24gb2YgYXJwLWNhY2hlCiAgKi8KLXN0YXRpYyB2b2lkIAotbGVjX2FycF9pbml0KHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGxlY19hcnBfaW5pdChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCiB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IGk7CisJdW5zaWduZWQgc2hvcnQgaTsKIAotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLSAgICAgICAgICAgICAgICBwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSA9IE5VTEw7Ci0gICAgICAgIH0gICAgICAgIAorCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQlJTklUX0hMSVNUX0hFQUQoJnByaXYtPmxlY19hcnBfdGFibGVzW2ldKTsKKwl9CisgICAgICAgIElOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKTsKKyAgICAgICAgSU5JVF9ITElTVF9IRUFEKCZwcml2LT5sZWNfbm9fZm9yd2FyZCk7CisgICAgICAgIElOSVRfSExJU1RfSEVBRCgmcHJpdi0+bWNhc3RfZndkcyk7CiAJc3Bpbl9sb2NrX2luaXQoJnByaXYtPmxlY19hcnBfbG9jayk7Ci0gICAgICAgIGluaXRfdGltZXIoJnByaXYtPmxlY19hcnBfdGltZXIpOwotICAgICAgICBwcml2LT5sZWNfYXJwX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgTEVDX0FSUF9SRUZSRVNIX0lOVEVSVkFMOwotICAgICAgICBwcml2LT5sZWNfYXJwX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylwcml2OwotICAgICAgICBwcml2LT5sZWNfYXJwX3RpbWVyLmZ1bmN0aW9uID0gbGVjX2FycF9jaGVja19leHBpcmU7Ci0gICAgICAgIGFkZF90aW1lcigmcHJpdi0+bGVjX2FycF90aW1lcik7CisJSU5JVF9XT1JLKCZwcml2LT5sZWNfYXJwX3dvcmssIGxlY19hcnBfY2hlY2tfZXhwaXJlLCBwcml2KTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmxlY19hcnBfd29yaywgTEVDX0FSUF9SRUZSRVNIX0lOVEVSVkFMKTsKIH0KIAotc3RhdGljIHZvaWQKLWxlY19hcnBfY2xlYXJfdmNjcyhzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnkpCitzdGF0aWMgdm9pZCBsZWNfYXJwX2NsZWFyX3ZjY3Moc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5KQogewotICAgICAgICBpZiAoZW50cnktPnZjYykgeworCWlmIChlbnRyeS0+dmNjKSB7CiAJCXN0cnVjdCBhdG1fdmNjICp2Y2MgPSBlbnRyeS0+dmNjOwogCQlzdHJ1Y3QgbGVjX3ZjY19wcml2ICp2cHJpdiA9IExFQ19WQ0NfUFJJVih2Y2MpOwotCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlKikgdmNjLT5wcm90b19kYXRhOworCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gKHN0cnVjdCBuZXRfZGV2aWNlICopdmNjLT5wcm90b19kYXRhOwogCi0gICAgICAgICAgICAgICAgdmNjLT5wb3AgPSB2cHJpdi0+b2xkX3BvcDsKKwkJdmNjLT5wb3AgPSB2cHJpdi0+b2xkX3BvcDsKIAkJaWYgKHZwcml2LT54b2ZmKQogCQkJbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogCQlrZnJlZSh2cHJpdik7CiAJCXZjYy0+dXNlcl9iYWNrID0gTlVMTDsKLSAgICAgICAgICAgICAgICB2Y2MtPnB1c2ggPSBlbnRyeS0+b2xkX3B1c2g7CisJCXZjYy0+cHVzaCA9IGVudHJ5LT5vbGRfcHVzaDsKIAkJdmNjX3JlbGVhc2VfYXN5bmModmNjLCAtRVBJUEUpOwotICAgICAgICAgICAgICAgIHZjYyA9IE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGVudHJ5LT5yZWN2X3ZjYykgewotICAgICAgICAgICAgICAgIGVudHJ5LT5yZWN2X3ZjYy0+cHVzaCA9IGVudHJ5LT5vbGRfcmVjdl9wdXNoOworCQllbnRyeS0+dmNjID0gTlVMTDsKKwl9CisJaWYgKGVudHJ5LT5yZWN2X3ZjYykgeworCQllbnRyeS0+cmVjdl92Y2MtPnB1c2ggPSBlbnRyeS0+b2xkX3JlY3ZfcHVzaDsKIAkJdmNjX3JlbGVhc2VfYXN5bmMoZW50cnktPnJlY3ZfdmNjLCAtRVBJUEUpOwotICAgICAgICAgICAgICAgIGVudHJ5LT5yZWN2X3ZjYyA9IE5VTEw7Ci0gICAgICAgIH0gICAgICAgIAorCQllbnRyeS0+cmVjdl92Y2MgPSBOVUxMOworCX0KIH0KIAogLyoKICAqIEluc2VydCBlbnRyeSB0byBsZWNfYXJwX3RhYmxlCiAgKiBMQU5FMjogQWRkIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QgdG8gc2F0aXNmeSA4LjEuMTMKICAqLwotc3RhdGljIGlubGluZSB2b2lkIAotbGVjX2FycF9hZGQoc3RydWN0IGxlY19wcml2ICpwcml2LCBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fYWRkKQorc3RhdGljIGlubGluZSB2b2lkCitsZWNfYXJwX2FkZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeSkKIHsKLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGxhY2U7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICp0bXA7CisJc3RydWN0IGhsaXN0X2hlYWQgKnRtcDsKIAotICAgICAgICBwbGFjZSA9IEhBU0godG9fYWRkLT5tYWNfYWRkcltFVEhfQUxFTi0xXSk7Ci0gICAgICAgIHRtcCA9IHByaXYtPmxlY19hcnBfdGFibGVzW3BsYWNlXTsKLSAgICAgICAgdG9fYWRkLT5uZXh0ID0gTlVMTDsKLSAgICAgICAgaWYgKHRtcCA9PSBOVUxMKQotICAgICAgICAgICAgICAgIHByaXYtPmxlY19hcnBfdGFibGVzW3BsYWNlXSA9IHRvX2FkZDsKLSAgCi0gICAgICAgIGVsc2UgeyAgLyogYWRkIHRvIHRoZSBlbmQgKi8KLSAgICAgICAgICAgICAgICB3aGlsZSAodG1wLT5uZXh0KQotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0OwotICAgICAgICAgICAgICAgIHRtcC0+bmV4dCA9IHRvX2FkZDsKLSAgICAgICAgfQorCXRtcCA9ICZwcml2LT5sZWNfYXJwX3RhYmxlc1tIQVNIKGVudHJ5LT5tYWNfYWRkcltFVEhfQUxFTiAtIDFdKV07CisJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5uZXh0LCB0bXApOwogCi0gICAgICAgIERQUklOVEsoIkxFQ19BUlA6IEFkZGVkIGVudHJ5OiUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4XG4iLAotICAgICAgICAgICAgICAgIDB4ZmYmdG9fYWRkLT5tYWNfYWRkclswXSwgMHhmZiZ0b19hZGQtPm1hY19hZGRyWzFdLAotICAgICAgICAgICAgICAgIDB4ZmYmdG9fYWRkLT5tYWNfYWRkclsyXSwgMHhmZiZ0b19hZGQtPm1hY19hZGRyWzNdLAotICAgICAgICAgICAgICAgIDB4ZmYmdG9fYWRkLT5tYWNfYWRkcls0XSwgMHhmZiZ0b19hZGQtPm1hY19hZGRyWzVdKTsKKwlEUFJJTlRLKCJMRUNfQVJQOiBBZGRlZCBlbnRyeTolMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeFxuIiwKKwkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkclswXSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkclsxXSwKKwkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkclsyXSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkclszXSwKKwkJMHhmZiAmIGVudHJ5LT5tYWNfYWRkcls0XSwgMHhmZiAmIGVudHJ5LT5tYWNfYWRkcls1XSk7CiB9CiAKIC8qCiAgKiBSZW1vdmUgZW50cnkgZnJvbSBsZWNfYXJwX3RhYmxlCiAgKi8KLXN0YXRpYyBpbnQgCi1sZWNfYXJwX3JlbW92ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0gICAgICAgICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fcmVtb3ZlKQorc3RhdGljIGludAorbGVjX2FycF9yZW1vdmUoc3RydWN0IGxlY19wcml2ICpwcml2LCBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fcmVtb3ZlKQogewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwbGFjZTsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKnRtcDsKLSAgICAgICAgaW50IHJlbW92ZV92Y2M9MTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CisJaW50IGksIHJlbW92ZV92Y2MgPSAxOwogCi0gICAgICAgIGlmICghdG9fcmVtb3ZlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHBsYWNlID0gSEFTSCh0b19yZW1vdmUtPm1hY19hZGRyW0VUSF9BTEVOLTFdKTsKLSAgICAgICAgdG1wID0gcHJpdi0+bGVjX2FycF90YWJsZXNbcGxhY2VdOwotICAgICAgICBpZiAodG1wID09IHRvX3JlbW92ZSkgewotICAgICAgICAgICAgICAgIHByaXYtPmxlY19hcnBfdGFibGVzW3BsYWNlXSA9IHRtcC0+bmV4dDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICB3aGlsZSh0bXAgJiYgdG1wLT5uZXh0ICE9IHRvX3JlbW92ZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gdG1wLT5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBpZiAoIXRtcCkgey8qIEVudHJ5IHdhcyBub3QgZm91bmQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgdG1wLT5uZXh0ID0gdG9fcmVtb3ZlLT5uZXh0OwotICAgICAgICBkZWxfdGltZXIoJnRvX3JlbW92ZS0+dGltZXIpOwotICAKLSAgICAgICAgLyogSWYgdGhpcyBpcyB0aGUgb25seSBNQUMgY29ubmVjdGVkIHRvIHRoaXMgVkNDLCBhbHNvIHRlYXIgZG93bgotICAgICAgICAgICB0aGUgVkNDICovCi0gICAgICAgIGlmICh0b19yZW1vdmUtPnN0YXR1cyA+PSBFU0lfRkxVU0hfUEVORElORykgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogRVNJX0ZMVVNIX1BFTkRJTkcsIEVTSV9GT1JXQVJEX0RJUkVDVAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGZvcihwbGFjZSA9IDA7IHBsYWNlIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBwbGFjZSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3IodG1wID0gcHJpdi0+bGVjX2FycF90YWJsZXNbcGxhY2VdOyB0bXAgIT0gTlVMTDsgdG1wID0gdG1wLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1jbXAodG1wLT5hdG1fYWRkciwgdG9fcmVtb3ZlLT5hdG1fYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE1fRVNBX0xFTik9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVfdmNjPTA7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHJlbW92ZV92Y2MpCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX2NsZWFyX3ZjY3ModG9fcmVtb3ZlKTsKLSAgICAgICAgfQotICAgICAgICBza2JfcXVldWVfcHVyZ2UoJnRvX3JlbW92ZS0+dHhfd2FpdCk7IC8qIEZJWE1FOiBnb29kIHBsYWNlIGZvciB0aGlzPyAqLworCWlmICghdG9fcmVtb3ZlKSB7CisJCXJldHVybiAtMTsKKwl9CiAKLSAgICAgICAgRFBSSU5USygiTEVDX0FSUDogUmVtb3ZlZCBlbnRyeTolMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeCAlMi4yeFxuIiwKLSAgICAgICAgICAgICAgICAweGZmJnRvX3JlbW92ZS0+bWFjX2FkZHJbMF0sIDB4ZmYmdG9fcmVtb3ZlLT5tYWNfYWRkclsxXSwKLSAgICAgICAgICAgICAgICAweGZmJnRvX3JlbW92ZS0+bWFjX2FkZHJbMl0sIDB4ZmYmdG9fcmVtb3ZlLT5tYWNfYWRkclszXSwKLSAgICAgICAgICAgICAgICAweGZmJnRvX3JlbW92ZS0+bWFjX2FkZHJbNF0sIDB4ZmYmdG9fcmVtb3ZlLT5tYWNfYWRkcls1XSk7Ci0gICAgICAgIHJldHVybiAwOworCWhsaXN0X2RlbCgmdG9fcmVtb3ZlLT5uZXh0KTsKKwlkZWxfdGltZXIoJnRvX3JlbW92ZS0+dGltZXIpOworCisJLyogSWYgdGhpcyBpcyB0aGUgb25seSBNQUMgY29ubmVjdGVkIHRvIHRoaXMgVkNDLCBhbHNvIHRlYXIgZG93biB0aGUgVkNDICovCisJaWYgKHRvX3JlbW92ZS0+c3RhdHVzID49IEVTSV9GTFVTSF9QRU5ESU5HKSB7CisJCS8qCisJCSAqIEVTSV9GTFVTSF9QRU5ESU5HLCBFU0lfRk9SV0FSRF9ESVJFQ1QKKwkJICovCisJCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJCWlmIChtZW1jbXAodG9fcmVtb3ZlLT5hdG1fYWRkciwKKwkJCQkJICAgZW50cnktPmF0bV9hZGRyLCBBVE1fRVNBX0xFTikgPT0gMCkgeworCQkJCQlyZW1vdmVfdmNjID0gMDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQl9CisJCWlmIChyZW1vdmVfdmNjKQorCQkJbGVjX2FycF9jbGVhcl92Y2NzKHRvX3JlbW92ZSk7CisJfQorCXNrYl9xdWV1ZV9wdXJnZSgmdG9fcmVtb3ZlLT50eF93YWl0KTsJLyogRklYTUU6IGdvb2QgcGxhY2UgZm9yIHRoaXM/ICovCisKKwlEUFJJTlRLKCJMRUNfQVJQOiBSZW1vdmVkIGVudHJ5OiUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4XG4iLAorCQkweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkclswXSwgMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbMV0sCisJCTB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzJdLCAweGZmICYgdG9fcmVtb3ZlLT5tYWNfYWRkclszXSwKKwkJMHhmZiAmIHRvX3JlbW92ZS0+bWFjX2FkZHJbNF0sIDB4ZmYgJiB0b19yZW1vdmUtPm1hY19hZGRyWzVdKTsKKwlyZXR1cm4gMDsKIH0KIAogI2lmIERFQlVHX0FSUF9UQUJMRQotc3RhdGljIGNoYXIqCi1nZXRfc3RhdHVzX3N0cmluZyh1bnNpZ25lZCBjaGFyIHN0KQorc3RhdGljIGNoYXIgKmdldF9zdGF0dXNfc3RyaW5nKHVuc2lnbmVkIGNoYXIgc3QpCiB7Ci0gICAgICAgIHN3aXRjaChzdCkgewotICAgICAgICBjYXNlIEVTSV9VTktOT1dOOgotICAgICAgICAgICAgICAgIHJldHVybiAiRVNJX1VOS05PV04iOwotICAgICAgICBjYXNlIEVTSV9BUlBfUEVORElORzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIkVTSV9BUlBfUEVORElORyI7Ci0gICAgICAgIGNhc2UgRVNJX1ZDX1BFTkRJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFU0lfVkNfUEVORElORyI7Ci0gICAgICAgIGNhc2UgRVNJX0ZMVVNIX1BFTkRJTkc6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICJFU0lfRkxVU0hfUEVORElORyI7Ci0gICAgICAgIGNhc2UgRVNJX0ZPUldBUkRfRElSRUNUOgotICAgICAgICAgICAgICAgIHJldHVybiAiRVNJX0ZPUldBUkRfRElSRUNUIjsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICByZXR1cm4gIjxVTktOT1dOPiI7Ci0gICAgICAgIH0KKwlzd2l0Y2ggKHN0KSB7CisJY2FzZSBFU0lfVU5LTk9XTjoKKwkJcmV0dXJuICJFU0lfVU5LTk9XTiI7CisJY2FzZSBFU0lfQVJQX1BFTkRJTkc6CisJCXJldHVybiAiRVNJX0FSUF9QRU5ESU5HIjsKKwljYXNlIEVTSV9WQ19QRU5ESU5HOgorCQlyZXR1cm4gIkVTSV9WQ19QRU5ESU5HIjsKKwljYXNlIEVTSV9GTFVTSF9QRU5ESU5HOgorCQlyZXR1cm4gIkVTSV9GTFVTSF9QRU5ESU5HIjsKKwljYXNlIEVTSV9GT1JXQVJEX0RJUkVDVDoKKwkJcmV0dXJuICJFU0lfRk9SV0FSRF9ESVJFQ1QiOworCWRlZmF1bHQ6CisJCXJldHVybiAiPFVOS05PV04+IjsKKwl9CiB9Ci0jZW5kaWYKIAotc3RhdGljIHZvaWQKLWR1bXBfYXJwX3RhYmxlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGR1bXBfYXJwX3RhYmxlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKIHsKLSNpZiBERUJVR19BUlBfVEFCTEUKLSAgICAgICAgaW50IGksaiwgb2Zmc2V0OwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqcnVsbGE7Ci0gICAgICAgIGNoYXIgYnVmWzEwMjRdOwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKmxlY19hcnBfdGFibGVzID0KLSAgICAgICAgICAgICAgICAoc3RydWN0IGxlY19hcnBfdGFibGUgKiopcHJpdi0+bGVjX2FycF90YWJsZXM7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICpsZWNfYXJwX2VtcHR5X29uZXMgPQotICAgICAgICAgICAgICAgIChzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKXByaXYtPmxlY19hcnBfZW1wdHlfb25lczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19ub19mb3J3YXJkID0KLSAgICAgICAgICAgICAgICAoc3RydWN0IGxlY19hcnBfdGFibGUgKilwcml2LT5sZWNfbm9fZm9yd2FyZDsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKm1jYXN0X2Z3ZHMgPSBwcml2LT5tY2FzdF9md2RzOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICpydWxsYTsKKwljaGFyIGJ1ZlsyNTZdOworCWludCBpLCBqLCBvZmZzZXQ7CiAKKwlwcmludGsoIkR1bXAgJXA6XG4iLCBwcml2KTsKKwlmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJb2Zmc2V0ID0gMDsKKwkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiwgIiVkOiAlcFxuIiwgaSwgcnVsbGEpOworCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiIpOworCQkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKKwkJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsCisJCQkJCQkgICIlMi4yeCAiLAorCQkJCQkJICBydWxsYS0+bWFjX2FkZHJbal0gJiAweGZmKTsKKwkJCX0KKwkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIkF0bToiKTsKKwkJCWZvciAoaiA9IDA7IGogPCBBVE1fRVNBX0xFTjsgaisrKSB7CisJCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LAorCQkJCQkJICAiJTIuMnggIiwKKwkJCQkJCSAgcnVsbGEtPmF0bV9hZGRyW2pdICYgMHhmZik7CisJCQl9CisJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsCisJCQkJCSAgIlZjYyB2cGk6JWQgdmNpOiVkLCBSZWN2X3ZjYyB2cGk6JWQgdmNpOiVkIExhc3RfdXNlZDolbHgsIFRpbWVzdGFtcDolbHgsIE5vX3RyaWVzOiVkICIsCisJCQkJCSAgcnVsbGEtPnZjYyA/IHJ1bGxhLT52Y2MtPnZwaSA6IDAsCisJCQkJCSAgcnVsbGEtPnZjYyA/IHJ1bGxhLT52Y2MtPnZjaSA6IDAsCisJCQkJCSAgcnVsbGEtPnJlY3ZfdmNjID8gcnVsbGEtPnJlY3ZfdmNjLT4KKwkJCQkJICB2cGkgOiAwLAorCQkJCQkgIHJ1bGxhLT5yZWN2X3ZjYyA/IHJ1bGxhLT5yZWN2X3ZjYy0+CisJCQkJCSAgdmNpIDogMCwgcnVsbGEtPmxhc3RfdXNlZCwKKwkJCQkJICBydWxsYS0+dGltZXN0YW1wLCBydWxsYS0+bm9fdHJpZXMpOworCQkJb2Zmc2V0ICs9CisJCQkgICAgc3ByaW50ZihidWYgKyBvZmZzZXQsCisJCQkJICAgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCisJCQkJICAgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKKwkJCQkgICAgZ2V0X3N0YXR1c19zdHJpbmcocnVsbGEtPnN0YXR1cykpOworCQkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwkJfQorCX0KIAotICAgICAgICBwcmludGsoIkR1bXAgJXA6XG4iLHByaXYpOwotICAgICAgICBmb3IgKGk9MDtpPExFQ19BUlBfVEFCTEVfU0laRTtpKyspIHsKLSAgICAgICAgICAgICAgICBydWxsYSA9IGxlY19hcnBfdGFibGVzW2ldOwotICAgICAgICAgICAgICAgIG9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNwcmludGYoYnVmLCIlZDogJXBcbiIsaSwgcnVsbGEpOwotICAgICAgICAgICAgICAgIHdoaWxlIChydWxsYSkgewotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNwcmludGYoYnVmK29mZnNldCwiTWFjOiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGo9MDtqPEVUSF9BTEVOO2orKykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMi4yeCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPm1hY19hZGRyW2pdJjB4ZmYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9c3ByaW50ZihidWYrb2Zmc2V0LCJBdG06Iik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8QVRNX0VTQV9MRU47aisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUyLjJ4ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+YXRtX2FkZHJbal0mMHhmZik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgCi0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVmNjIHZwaTolZCB2Y2k6JWQsIFJlY3ZfdmNjIHZwaTolZCB2Y2k6JWQgTGFzdF91c2VkOiVseCwgVGltZXN0YW1wOiVseCwgTm9fdHJpZXM6JWQgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+dmNjP3J1bGxhLT52Y2MtPnZwaTowLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+dmNjP3J1bGxhLT52Y2MtPnZjaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5yZWN2X3ZjYz9ydWxsYS0+cmVjdl92Y2MtPnZwaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5yZWN2X3ZjYz9ydWxsYS0+cmVjdl92Y2MtPnZjaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5sYXN0X3VzZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPnRpbWVzdGFtcCwgcnVsbGEtPm5vX3RyaWVzKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPmZsYWdzLCBydWxsYS0+cGFja2V0c19mbG9vZGVkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfc3RhdHVzX3N0cmluZyhydWxsYS0+c3RhdHVzKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwiLT4lcFxuIixydWxsYS0+bmV4dCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBydWxsYSA9IHJ1bGxhLT5uZXh0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwcmludGsoIiVzIixidWYpOwotICAgICAgICB9Ci0gICAgICAgIHJ1bGxhID0gbGVjX25vX2ZvcndhcmQ7Ci0gICAgICAgIGlmIChydWxsYSkKLSAgICAgICAgICAgICAgICBwcmludGsoIk5vIGZvcndhcmRcbiIpOyAgCi0gICAgICAgIHdoaWxlKHJ1bGxhKSB7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0PTA7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9IHNwcmludGYoYnVmK29mZnNldCwiTWFjOiIpOwotICAgICAgICAgICAgICAgIGZvcihqPTA7ajxFVEhfQUxFTjtqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LCIlMi4yeCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5tYWNfYWRkcltqXSYweGZmKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgb2Zmc2V0ICs9c3ByaW50ZihidWYrb2Zmc2V0LCJBdG06Iik7Ci0gICAgICAgICAgICAgICAgZm9yKGo9MDtqPEFUTV9FU0FfTEVOO2orKykgewotICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0Kz1zcHJpbnRmKGJ1ZitvZmZzZXQsIiUyLjJ4ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPmF0bV9hZGRyW2pdJjB4ZmYpOwotICAgICAgICAgICAgICAgIH0gICAgICAKLSAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlZjYyB2cGk6JWQgdmNpOiVkLCBSZWN2X3ZjYyB2cGk6JWQgdmNpOiVkIExhc3RfdXNlZDolbHgsIFRpbWVzdGFtcDolbHgsIE5vX3RyaWVzOiVkICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT52Y2M/cnVsbGEtPnZjYy0+dnBpOjAsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+dmNjP3J1bGxhLT52Y2MtPnZjaTowLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPnJlY3ZfdmNjP3J1bGxhLT5yZWN2X3ZjYy0+dnBpOjAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5yZWN2X3ZjYz9ydWxsYS0+cmVjdl92Y2MtPnZjaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+bGFzdF91c2VkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPnRpbWVzdGFtcCwgcnVsbGEtPm5vX3RyaWVzKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZsYWdzOiV4LCBQYWNrZXRzX2Zsb29kZWQ6JXgsIFN0YXR1czogJXMgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPmZsYWdzLCBydWxsYS0+cGFja2V0c19mbG9vZGVkLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0X3N0YXR1c19zdHJpbmcocnVsbGEtPnN0YXR1cykpOwotICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LCItPiVseFxuIiwobG9uZylydWxsYS0+bmV4dCk7Ci0gICAgICAgICAgICAgICAgcnVsbGEgPSBydWxsYS0+bmV4dDsKLSAgICAgICAgICAgICAgICBwcmludGsoIiVzIixidWYpOwotICAgICAgICB9Ci0gICAgICAgIHJ1bGxhID0gbGVjX2FycF9lbXB0eV9vbmVzOwotICAgICAgICBpZiAocnVsbGEpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJFbXB0eSBvbmVzXG4iKTsgIAotICAgICAgICB3aGlsZShydWxsYSkgewotICAgICAgICAgICAgICAgIG9mZnNldD0wOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBzcHJpbnRmKGJ1ZitvZmZzZXQsIk1hYzoiKTsKLSAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8RVRIX0FMRU47aisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwiJTIuMnggIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+bWFjX2FkZHJbal0mMHhmZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9mZnNldCArPXNwcmludGYoYnVmK29mZnNldCwiQXRtOiIpOwotICAgICAgICAgICAgICAgIGZvcihqPTA7ajxBVE1fRVNBX0xFTjtqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LCIlMi4yeCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5hdG1fYWRkcltqXSYweGZmKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgCi0gICAgICAgICAgICAgICAgb2Zmc2V0Kz1zcHJpbnRmKGJ1ZitvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWY2MgdnBpOiVkIHZjaTolZCwgUmVjdl92Y2MgdnBpOiVkIHZjaTolZCBMYXN0X3VzZWQ6JWx4LCBUaW1lc3RhbXA6JWx4LCBOb190cmllczolZCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+dmNjP3J1bGxhLT52Y2MtPnZwaTowLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPnZjYz9ydWxsYS0+dmNjLT52Y2k6MCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5yZWN2X3ZjYz9ydWxsYS0+cmVjdl92Y2MtPnZwaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+cmVjdl92Y2M/cnVsbGEtPnJlY3ZfdmNjLT52Y2k6MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPmxhc3RfdXNlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT50aW1lc3RhbXAsIHJ1bGxhLT5ub190cmllcyk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0Kz1zcHJpbnRmKGJ1ZitvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwiLT4lbHhcbiIsKGxvbmcpcnVsbGEtPm5leHQpOwotICAgICAgICAgICAgICAgIHJ1bGxhID0gcnVsbGEtPm5leHQ7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCIlcyIsYnVmKTsKLSAgICAgICAgfQorCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19ub19mb3J3YXJkKSkKKwkJcHJpbnRrKCJObyBmb3J3YXJkXG4iKTsKKwlobGlzdF9mb3JfZWFjaF9lbnRyeShydWxsYSwgbm9kZSwgJnByaXYtPmxlY19ub19mb3J3YXJkLCBuZXh0KSB7CisJCW9mZnNldCA9IDA7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIk1hYzoiKTsKKwkJZm9yIChqID0gMDsgaiA8IEVUSF9BTEVOOyBqKyspIHsKKwkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCisJCQkJCSAgcnVsbGEtPm1hY19hZGRyW2pdICYgMHhmZik7CisJCX0KKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiQXRtOiIpOworCQlmb3IgKGogPSAwOyBqIDwgQVRNX0VTQV9MRU47IGorKykgeworCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiJTIuMnggIiwKKwkJCQkJICBydWxsYS0+YXRtX2FkZHJbal0gJiAweGZmKTsKKwkJfQorCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsCisJCQkJICAiVmNjIHZwaTolZCB2Y2k6JWQsIFJlY3ZfdmNjIHZwaTolZCB2Y2k6JWQgTGFzdF91c2VkOiVseCwgVGltZXN0YW1wOiVseCwgTm9fdHJpZXM6JWQgIiwKKwkJCQkgIHJ1bGxhLT52Y2MgPyBydWxsYS0+dmNjLT52cGkgOiAwLAorCQkJCSAgcnVsbGEtPnZjYyA/IHJ1bGxhLT52Y2MtPnZjaSA6IDAsCisJCQkJICBydWxsYS0+cmVjdl92Y2MgPyBydWxsYS0+cmVjdl92Y2MtPnZwaSA6IDAsCisJCQkJICBydWxsYS0+cmVjdl92Y2MgPyBydWxsYS0+cmVjdl92Y2MtPnZjaSA6IDAsCisJCQkJICBydWxsYS0+bGFzdF91c2VkLAorCQkJCSAgcnVsbGEtPnRpbWVzdGFtcCwgcnVsbGEtPm5vX3RyaWVzKTsKKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LAorCQkJCSAgIkZsYWdzOiV4LCBQYWNrZXRzX2Zsb29kZWQ6JXgsIFN0YXR1czogJXMgIiwKKwkJCQkgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwKKwkJCQkgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKKwkJcHJpbnRrKCIlc1xuIiwgYnVmKTsKKwl9CiAKLSAgICAgICAgcnVsbGEgPSBtY2FzdF9md2RzOwotICAgICAgICBpZiAocnVsbGEpCi0gICAgICAgICAgICAgICAgcHJpbnRrKCJNdWx0aWNhc3QgRm9yd2FyZCBWQ0NzXG4iKTsgIAotICAgICAgICB3aGlsZShydWxsYSkgewotICAgICAgICAgICAgICAgIG9mZnNldD0wOwotICAgICAgICAgICAgICAgIG9mZnNldCArPSBzcHJpbnRmKGJ1ZitvZmZzZXQsIk1hYzoiKTsKLSAgICAgICAgICAgICAgICBmb3Ioaj0wO2o8RVRIX0FMRU47aisrKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwiJTIuMnggIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+bWFjX2FkZHJbal0mMHhmZik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9mZnNldCArPXNwcmludGYoYnVmK29mZnNldCwiQXRtOiIpOwotICAgICAgICAgICAgICAgIGZvcihqPTA7ajxBVE1fRVNBX0xFTjtqKyspIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCs9c3ByaW50ZihidWYrb2Zmc2V0LCIlMi4yeCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5hdG1fYWRkcltqXSYweGZmKTsKLSAgICAgICAgICAgICAgICB9ICAgICAgCi0gICAgICAgICAgICAgICAgb2Zmc2V0Kz1zcHJpbnRmKGJ1ZitvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJWY2MgdnBpOiVkIHZjaTolZCwgUmVjdl92Y2MgdnBpOiVkIHZjaTolZCBMYXN0X3VzZWQ6JWx4LCBUaW1lc3RhbXA6JWx4LCBOb190cmllczolZCAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+dmNjP3J1bGxhLT52Y2MtPnZwaTowLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPnZjYz9ydWxsYS0+dmNjLT52Y2k6MCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5yZWN2X3ZjYz9ydWxsYS0+cmVjdl92Y2MtPnZwaTowLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBydWxsYS0+cmVjdl92Y2M/cnVsbGEtPnJlY3ZfdmNjLT52Y2k6MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVsbGEtPmxhc3RfdXNlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT50aW1lc3RhbXAsIHJ1bGxhLT5ub190cmllcyk7Ci0gICAgICAgICAgICAgICAgb2Zmc2V0Kz1zcHJpbnRmKGJ1ZitvZmZzZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1bGxhLT5mbGFncywgcnVsbGEtPnBhY2tldHNfZmxvb2RlZCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF9zdGF0dXNfc3RyaW5nKHJ1bGxhLT5zdGF0dXMpKTsKLSAgICAgICAgICAgICAgICBvZmZzZXQrPXNwcmludGYoYnVmK29mZnNldCwiLT4lbHhcbiIsKGxvbmcpcnVsbGEtPm5leHQpOwotICAgICAgICAgICAgICAgIHJ1bGxhID0gcnVsbGEtPm5leHQ7Ci0gICAgICAgICAgICAgICAgcHJpbnRrKCIlcyIsYnVmKTsKLSAgICAgICAgfQorCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcykpCisJCXByaW50aygiRW1wdHkgb25lc1xuIik7CisJaGxpc3RfZm9yX2VhY2hfZW50cnkocnVsbGEsIG5vZGUsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKKwkJb2Zmc2V0ID0gMDsKKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiTWFjOiIpOworCQlmb3IgKGogPSAwOyBqIDwgRVRIX0FMRU47IGorKykgeworCQkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LCAiJTIuMnggIiwKKwkJCQkJICBydWxsYS0+bWFjX2FkZHJbal0gJiAweGZmKTsKKwkJfQorCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJBdG06Iik7CisJCWZvciAoaiA9IDA7IGogPCBBVE1fRVNBX0xFTjsgaisrKSB7CisJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAorCQkJCQkgIHJ1bGxhLT5hdG1fYWRkcltqXSAmIDB4ZmYpOworCQl9CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwKKwkJCQkgICJWY2MgdnBpOiVkIHZjaTolZCwgUmVjdl92Y2MgdnBpOiVkIHZjaTolZCBMYXN0X3VzZWQ6JWx4LCBUaW1lc3RhbXA6JWx4LCBOb190cmllczolZCAiLAorCQkJCSAgcnVsbGEtPnZjYyA/IHJ1bGxhLT52Y2MtPnZwaSA6IDAsCisJCQkJICBydWxsYS0+dmNjID8gcnVsbGEtPnZjYy0+dmNpIDogMCwKKwkJCQkgIHJ1bGxhLT5yZWN2X3ZjYyA/IHJ1bGxhLT5yZWN2X3ZjYy0+dnBpIDogMCwKKwkJCQkgIHJ1bGxhLT5yZWN2X3ZjYyA/IHJ1bGxhLT5yZWN2X3ZjYy0+dmNpIDogMCwKKwkJCQkgIHJ1bGxhLT5sYXN0X3VzZWQsCisJCQkJICBydWxsYS0+dGltZXN0YW1wLCBydWxsYS0+bm9fdHJpZXMpOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsCisJCQkJICAiRmxhZ3M6JXgsIFBhY2tldHNfZmxvb2RlZDoleCwgU3RhdHVzOiAlcyAiLAorCQkJCSAgcnVsbGEtPmZsYWdzLCBydWxsYS0+cGFja2V0c19mbG9vZGVkLAorCQkJCSAgZ2V0X3N0YXR1c19zdHJpbmcocnVsbGEtPnN0YXR1cykpOworCQlwcmludGsoIiVzIiwgYnVmKTsKKwl9CiAKLSNlbmRpZgorCWlmICghaGxpc3RfZW1wdHkoJnByaXYtPm1jYXN0X2Z3ZHMpKQorCQlwcmludGsoIk11bHRpY2FzdCBGb3J3YXJkIFZDQ3NcbiIpOworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHJ1bGxhLCBub2RlLCAmcHJpdi0+bWNhc3RfZndkcywgbmV4dCkgeworCQlvZmZzZXQgPSAwOworCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICJNYWM6Iik7CisJCWZvciAoaiA9IDA7IGogPCBFVEhfQUxFTjsgaisrKSB7CisJCQlvZmZzZXQgKz0gc3ByaW50ZihidWYgKyBvZmZzZXQsICIlMi4yeCAiLAorCQkJCQkgIHJ1bGxhLT5tYWNfYWRkcltqXSAmIDB4ZmYpOworCQl9CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIkF0bToiKTsKKwkJZm9yIChqID0gMDsgaiA8IEFUTV9FU0FfTEVOOyBqKyspIHsKKwkJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwgIiUyLjJ4ICIsCisJCQkJCSAgcnVsbGEtPmF0bV9hZGRyW2pdICYgMHhmZik7CisJCX0KKwkJb2Zmc2V0ICs9IHNwcmludGYoYnVmICsgb2Zmc2V0LAorCQkJCSAgIlZjYyB2cGk6JWQgdmNpOiVkLCBSZWN2X3ZjYyB2cGk6JWQgdmNpOiVkIExhc3RfdXNlZDolbHgsIFRpbWVzdGFtcDolbHgsIE5vX3RyaWVzOiVkICIsCisJCQkJICBydWxsYS0+dmNjID8gcnVsbGEtPnZjYy0+dnBpIDogMCwKKwkJCQkgIHJ1bGxhLT52Y2MgPyBydWxsYS0+dmNjLT52Y2kgOiAwLAorCQkJCSAgcnVsbGEtPnJlY3ZfdmNjID8gcnVsbGEtPnJlY3ZfdmNjLT52cGkgOiAwLAorCQkJCSAgcnVsbGEtPnJlY3ZfdmNjID8gcnVsbGEtPnJlY3ZfdmNjLT52Y2kgOiAwLAorCQkJCSAgcnVsbGEtPmxhc3RfdXNlZCwKKwkJCQkgIHJ1bGxhLT50aW1lc3RhbXAsIHJ1bGxhLT5ub190cmllcyk7CisJCW9mZnNldCArPSBzcHJpbnRmKGJ1ZiArIG9mZnNldCwKKwkJCQkgICJGbGFnczoleCwgUGFja2V0c19mbG9vZGVkOiV4LCBTdGF0dXM6ICVzICIsCisJCQkJICBydWxsYS0+ZmxhZ3MsIHJ1bGxhLT5wYWNrZXRzX2Zsb29kZWQsCisJCQkJICBnZXRfc3RhdHVzX3N0cmluZyhydWxsYS0+c3RhdHVzKSk7CisJCXByaW50aygiJXNcbiIsIGJ1Zik7CisJfQorCiB9CisjZWxzZQorI2RlZmluZSBkdW1wX2FycF90YWJsZShwcml2KSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKIAogLyoKICAqIERlc3RydWN0aW9uIG9mIGFycC1jYWNoZQogICovCi1zdGF0aWMgdm9pZAotbGVjX2FycF9kZXN0cm95KHN0cnVjdCBsZWNfcHJpdiAqcHJpdikKK3N0YXRpYyB2b2lkIGxlY19hcnBfZGVzdHJveShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqbmV4dDsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGUsICpuZXh0OworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKKwlpbnQgaTsKIAotICAgICAgICBkZWxfdGltZXJfc3luYygmcHJpdi0+bGVjX2FycF90aW1lcik7Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBSZW1vdmUgYWxsIGVudHJpZXMKLSAgICAgICAgICovCisJY2FuY2VsX3JlYXJtaW5nX2RlbGF5ZWRfd29yaygmcHJpdi0+bGVjX2FycF93b3JrKTsKKworCS8qCisJICogUmVtb3ZlIGFsbCBlbnRyaWVzCisJICovCiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotICAgICAgICAgICAgICAgIGZvcihlbnRyeSA9IHByaXYtPmxlY19hcnBfdGFibGVzW2ldOyBlbnRyeSAhPSBOVUxMOyBlbnRyeT1uZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX3JlbW92ZShwcml2LCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVudHJ5ID0gcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzOwotICAgICAgICB3aGlsZShlbnRyeSkgewotICAgICAgICAgICAgICAgIG5leHQgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICBkZWxfdGltZXJfc3luYygmZW50cnktPnRpbWVyKTsKLSAgICAgICAgICAgICAgICBsZWNfYXJwX2NsZWFyX3ZjY3MoZW50cnkpOwotICAgICAgICAgICAgICAgIGtmcmVlKGVudHJ5KTsKLSAgICAgICAgICAgICAgICBlbnRyeSA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzID0gTlVMTDsKLSAgICAgICAgZW50cnkgPSBwcml2LT5sZWNfbm9fZm9yd2FyZDsKLSAgICAgICAgd2hpbGUoZW50cnkpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgZGVsX3RpbWVyX3N5bmMoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgICAgICAgICAgbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKLSAgICAgICAgICAgICAgICBrZnJlZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBuZXh0OwotICAgICAgICB9Ci0gICAgICAgIHByaXYtPmxlY19ub19mb3J3YXJkID0gTlVMTDsKLSAgICAgICAgZW50cnkgPSBwcml2LT5tY2FzdF9md2RzOwotICAgICAgICB3aGlsZShlbnRyeSkgewotICAgICAgICAgICAgICAgIG5leHQgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICAvKiBObyB0aW1lciwgTEFORXYyIDcuMS4yMCBhbmQgMi4zLjUuMyAqLwotICAgICAgICAgICAgICAgIGxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7Ci0gICAgICAgICAgICAgICAga2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgICAgIGVudHJ5ID0gbmV4dDsKLSAgICAgICAgfQotICAgICAgICBwcml2LT5tY2FzdF9md2RzID0gTlVMTDsKLSAgICAgICAgcHJpdi0+bWNhc3RfdmNjID0gTlVMTDsKLSAgICAgICAgbWVtc2V0KHByaXYtPmxlY19hcnBfdGFibGVzLCAwLCAKLSAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKSAqIExFQ19BUlBfVEFCTEVfU0laRSk7CisJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOworCQkJbGVjX2FycF9wdXQoZW50cnkpOworCQl9CisJCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0pOworCX0KKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsIG5leHQpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmVudHJ5LT50aW1lcik7CisJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CisJCWhsaXN0X2RlbCgmZW50cnktPm5leHQpOworCQlsZWNfYXJwX3B1dChlbnRyeSk7CisJfQorCUlOSVRfSExJU1RfSEVBRCgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKTsKKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgeworCQlkZWxfdGltZXJfc3luYygmZW50cnktPnRpbWVyKTsKKwkJbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKKwkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CisJCWxlY19hcnBfcHV0KGVudHJ5KTsKKwl9CisJSU5JVF9ITElTVF9IRUFEKCZwcml2LT5sZWNfbm9fZm9yd2FyZCk7CisKKwlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bWNhc3RfZndkcywgbmV4dCkgeworCQkvKiBObyB0aW1lciwgTEFORXYyIDcuMS4yMCBhbmQgMi4zLjUuMyAqLworCQlsZWNfYXJwX2NsZWFyX3ZjY3MoZW50cnkpOworCQlobGlzdF9kZWwoJmVudHJ5LT5uZXh0KTsKKwkJbGVjX2FycF9wdXQoZW50cnkpOworCX0KKwlJTklUX0hMSVNUX0hFQUQoJnByaXYtPm1jYXN0X2Z3ZHMpOworCXByaXYtPm1jYXN0X3ZjYyA9IE5VTEw7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiB9CiAKLQogLyogCiAgKiBGaW5kIGVudHJ5IGJ5IG1hY19hZGRyZXNzCiAgKi8KLXN0YXRpYyBzdHJ1Y3QgbGVjX2FycF90YWJsZSoKLWxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0gICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCitzdGF0aWMgc3RydWN0IGxlY19hcnBfdGFibGUgKmxlY19hcnBfZmluZChzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCisJCQkJCSAgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCiB7Ci0gICAgICAgIHVuc2lnbmVkIHNob3J0IHBsYWNlOwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fcmV0dXJuOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBobGlzdF9oZWFkICpoZWFkOworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKIAotICAgICAgICBEUFJJTlRLKCJMRUNfQVJQOiBsZWNfYXJwX2ZpbmQgOiUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4XG4iLAotICAgICAgICAgICAgICAgIG1hY19hZGRyWzBdJjB4ZmYsIG1hY19hZGRyWzFdJjB4ZmYsIG1hY19hZGRyWzJdJjB4ZmYsIAotICAgICAgICAgICAgICAgIG1hY19hZGRyWzNdJjB4ZmYsIG1hY19hZGRyWzRdJjB4ZmYsIG1hY19hZGRyWzVdJjB4ZmYpOwotICAgICAgICBwbGFjZSA9IEhBU0gobWFjX2FkZHJbRVRIX0FMRU4tMV0pOwotICAKLSAgICAgICAgdG9fcmV0dXJuID0gcHJpdi0+bGVjX2FycF90YWJsZXNbcGxhY2VdOwotICAgICAgICB3aGlsZSh0b19yZXR1cm4pIHsKLSAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmVfZXRoZXJfYWRkcihtYWNfYWRkciwgdG9fcmV0dXJuLT5tYWNfYWRkcikpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b19yZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRvX3JldHVybiA9IHRvX3JldHVybi0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTlVMTDsKKwlEUFJJTlRLKCJMRUNfQVJQOiBsZWNfYXJwX2ZpbmQgOiUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4ICUyLjJ4XG4iLAorCQltYWNfYWRkclswXSAmIDB4ZmYsIG1hY19hZGRyWzFdICYgMHhmZiwgbWFjX2FkZHJbMl0gJiAweGZmLAorCQltYWNfYWRkclszXSAmIDB4ZmYsIG1hY19hZGRyWzRdICYgMHhmZiwgbWFjX2FkZHJbNV0gJiAweGZmKTsKKworCWhlYWQgPSAmcHJpdi0+bGVjX2FycF90YWJsZXNbSEFTSChtYWNfYWRkcltFVEhfQUxFTiAtIDFdKV07CisJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsIGhlYWQsIG5leHQpIHsKKwkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjX2FkZHIsIGVudHJ5LT5tYWNfYWRkcikpIHsKKwkJCXJldHVybiBlbnRyeTsKKwkJfQorCX0KKwlyZXR1cm4gTlVMTDsKIH0KIAotc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlKgotbWFrZV9lbnRyeShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKm1hY19hZGRyKQorc3RhdGljIHN0cnVjdCBsZWNfYXJwX3RhYmxlICptYWtlX2VudHJ5KHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKKwkJCQkJdW5zaWduZWQgY2hhciAqbWFjX2FkZHIpCiB7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICp0b19yZXR1cm47CisJc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX3JldHVybjsKIAotICAgICAgICB0b19yZXR1cm4gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbGVjX2FycF90YWJsZSksIEdGUF9BVE9NSUMpOwotICAgICAgICBpZiAoIXRvX3JldHVybikgewotICAgICAgICAgICAgICAgIHByaW50aygiTEVDOiBBcnAgZW50cnkga21hbGxvYyBmYWlsZWRcbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0b19yZXR1cm4tPm1hY19hZGRyLCBtYWNfYWRkciwgRVRIX0FMRU4pOwotICAgICAgICBpbml0X3RpbWVyKCZ0b19yZXR1cm4tPnRpbWVyKTsKLSAgICAgICAgdG9fcmV0dXJuLT50aW1lci5mdW5jdGlvbiA9IGxlY19hcnBfZXhwaXJlX2FycDsKLSAgICAgICAgdG9fcmV0dXJuLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpIHRvX3JldHVybjsKLSAgICAgICAgdG9fcmV0dXJuLT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotICAgICAgICB0b19yZXR1cm4tPnByaXYgPSBwcml2OwotICAgICAgICBza2JfcXVldWVfaGVhZF9pbml0KCZ0b19yZXR1cm4tPnR4X3dhaXQpOwotICAgICAgICByZXR1cm4gdG9fcmV0dXJuOworCXRvX3JldHVybiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWNfYXJwX3RhYmxlKSwgR0ZQX0FUT01JQyk7CisJaWYgKCF0b19yZXR1cm4pIHsKKwkJcHJpbnRrKCJMRUM6IEFycCBlbnRyeSBrbWFsbG9jIGZhaWxlZFxuIik7CisJCXJldHVybiBOVUxMOworCX0KKwltZW1jcHkodG9fcmV0dXJuLT5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwlJTklUX0hMSVNUX05PREUoJnRvX3JldHVybi0+bmV4dCk7CisJaW5pdF90aW1lcigmdG9fcmV0dXJuLT50aW1lcik7CisJdG9fcmV0dXJuLT50aW1lci5mdW5jdGlvbiA9IGxlY19hcnBfZXhwaXJlX2FycDsKKwl0b19yZXR1cm4tPnRpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZyl0b19yZXR1cm47CisJdG9fcmV0dXJuLT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCXRvX3JldHVybi0+cHJpdiA9IHByaXY7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmdG9fcmV0dXJuLT50eF93YWl0KTsKKwlhdG9taWNfc2V0KCZ0b19yZXR1cm4tPnVzYWdlLCAxKTsKKwlyZXR1cm4gdG9fcmV0dXJuOwogfQogCi0vKgotICoKLSAqIEFycCBzZW50IHRpbWVyIGV4cGlyZWQKLSAqCi0gKi8KLXN0YXRpYyB2b2lkCi1sZWNfYXJwX2V4cGlyZV9hcnAodW5zaWduZWQgbG9uZyBkYXRhKQorLyogQXJwIHNlbnQgdGltZXIgZXhwaXJlZCAqLworc3RhdGljIHZvaWQgbGVjX2FycF9leHBpcmVfYXJwKHVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKIAotICAgICAgICBlbnRyeSA9IChzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKWRhdGE7CisJZW50cnkgPSAoc3RydWN0IGxlY19hcnBfdGFibGUgKilkYXRhOwogCi0gICAgICAgIERQUklOVEsoImxlY19hcnBfZXhwaXJlX2FycFxuIik7Ci0gICAgICAgIGlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9BUlBfUEVORElORykgewotICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+bm9fdHJpZXMgPD0gZW50cnktPnByaXYtPm1heF9yZXRyeV9jb3VudCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5pc19yZGVzYykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19sZWNkKGVudHJ5LT5wcml2LCBsX3JkZXNjX2FycF94bXQsIGVudHJ5LT5tYWNfYWRkciwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfdG9fbGVjZChlbnRyeS0+cHJpdiwgbF9hcnBfeG10LCBlbnRyeS0+bWFjX2FkZHIsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5vX3RyaWVzKys7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1vZF90aW1lcigmZW50cnktPnRpbWVyLCBqaWZmaWVzICsgKDEqSFopKTsKLSAgICAgICAgfQorCURQUklOVEsoImxlY19hcnBfZXhwaXJlX2FycFxuIik7CisJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSB7CisJCWlmIChlbnRyeS0+bm9fdHJpZXMgPD0gZW50cnktPnByaXYtPm1heF9yZXRyeV9jb3VudCkgeworCQkJaWYgKGVudHJ5LT5pc19yZGVzYykKKwkJCQlzZW5kX3RvX2xlY2QoZW50cnktPnByaXYsIGxfcmRlc2NfYXJwX3htdCwKKwkJCQkJICAgICBlbnRyeS0+bWFjX2FkZHIsIE5VTEwsIE5VTEwpOworCQkJZWxzZQorCQkJCXNlbmRfdG9fbGVjZChlbnRyeS0+cHJpdiwgbF9hcnBfeG10LAorCQkJCQkgICAgIGVudHJ5LT5tYWNfYWRkciwgTlVMTCwgTlVMTCk7CisJCQllbnRyeS0+bm9fdHJpZXMrKzsKKwkJfQorCQltb2RfdGltZXIoJmVudHJ5LT50aW1lciwgamlmZmllcyArICgxICogSFopKTsKKwl9CiB9CiAKLS8qCi0gKgotICogVW5rbm93bi91bnVzZWQgdmNjIGV4cGlyZSwgcmVtb3ZlIGFzc29jaWF0ZWQgZW50cnkKLSAqCi0gKi8KLXN0YXRpYyB2b2lkCi1sZWNfYXJwX2V4cGlyZV92Y2ModW5zaWduZWQgbG9uZyBkYXRhKQorLyogVW5rbm93bi91bnVzZWQgdmNjIGV4cGlyZSwgcmVtb3ZlIGFzc29jaWF0ZWQgZW50cnkgKi8KK3N0YXRpYyB2b2lkIGxlY19hcnBfZXhwaXJlX3ZjYyh1bnNpZ25lZCBsb25nIGRhdGEpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX3JlbW92ZSA9IChzdHJ1Y3QgbGVjX2FycF90YWJsZSopZGF0YTsKLSAgICAgICAgc3RydWN0IGxlY19wcml2ICpwcml2ID0gKHN0cnVjdCBsZWNfcHJpdiAqKXRvX3JlbW92ZS0+cHJpdjsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5ID0gTlVMTDsKKwlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fcmVtb3ZlID0gKHN0cnVjdCBsZWNfYXJwX3RhYmxlICopZGF0YTsKKwlzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSAoc3RydWN0IGxlY19wcml2ICopdG9fcmVtb3ZlLT5wcml2OwogCi0gICAgICAgIGRlbF90aW1lcigmdG9fcmVtb3ZlLT50aW1lcik7CisJZGVsX3RpbWVyKCZ0b19yZW1vdmUtPnRpbWVyKTsKIAotICAgICAgICBEUFJJTlRLKCJMRUNfQVJQICVwICVwOiBsZWNfYXJwX2V4cGlyZV92Y2MgdnBpOiVkIHZjaTolZFxuIiwKLSAgICAgICAgICAgICAgICB0b19yZW1vdmUsIHByaXYsIAotICAgICAgICAgICAgICAgIHRvX3JlbW92ZS0+dmNjP3RvX3JlbW92ZS0+cmVjdl92Y2MtPnZwaTowLAotICAgICAgICAgICAgICAgIHRvX3JlbW92ZS0+dmNjP3RvX3JlbW92ZS0+cmVjdl92Y2MtPnZjaTowKTsKLSAgICAgICAgRFBSSU5USygiZW86JXAgbmY6JXBcbiIscHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLHByaXYtPmxlY19ub19mb3J3YXJkKTsKKwlEUFJJTlRLKCJMRUNfQVJQICVwICVwOiBsZWNfYXJwX2V4cGlyZV92Y2MgdnBpOiVkIHZjaTolZFxuIiwKKwkJdG9fcmVtb3ZlLCBwcml2LAorCQl0b19yZW1vdmUtPnZjYyA/IHRvX3JlbW92ZS0+cmVjdl92Y2MtPnZwaSA6IDAsCisJCXRvX3JlbW92ZS0+dmNjID8gdG9fcmVtb3ZlLT5yZWN2X3ZjYy0+dmNpIDogMCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGlmICh0b19yZW1vdmUgPT0gcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKQotICAgICAgICAgICAgICAgIHByaXYtPmxlY19hcnBfZW1wdHlfb25lcyA9IHRvX3JlbW92ZS0+bmV4dDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBwcml2LT5sZWNfYXJwX2VtcHR5X29uZXM7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LT5uZXh0ICE9IHRvX3JlbW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5KQotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQgPSB0b19yZW1vdmUtPm5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFlbnRyeSkgewotICAgICAgICAgICAgICAgIGlmICh0b19yZW1vdmUgPT0gcHJpdi0+bGVjX25vX2ZvcndhcmQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmxlY19ub19mb3J3YXJkID0gdG9fcmVtb3ZlLT5uZXh0OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSA9IHByaXYtPmxlY19ub19mb3J3YXJkOwotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LT5uZXh0ICE9IHRvX3JlbW92ZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQgPSB0b19yZW1vdmUtPm5leHQ7Ci0gICAgICAgICAgICAgICAgfQotCX0KKwlobGlzdF9kZWwoJnRvX3JlbW92ZS0+bmV4dCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAKLSAgICAgICAgbGVjX2FycF9jbGVhcl92Y2NzKHRvX3JlbW92ZSk7Ci0gICAgICAgIGtmcmVlKHRvX3JlbW92ZSk7CisJbGVjX2FycF9jbGVhcl92Y2NzKHRvX3JlbW92ZSk7CisJbGVjX2FycF9wdXQodG9fcmVtb3ZlKTsKIH0KIAogLyoKQEAgLTE5MTUsMTU4ICsxODc5LDE3MSBAQAogICogICAgICAgdG8gRVNJX0ZPUldBUkRfRElSRUNULiBUaGlzIGNhdXNlcyB0aGUgZmx1c2ggcGVyaW9kIHRvIGVuZAogICogICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIGZsdXNoIHByb3RvY29sLgogICovCi1zdGF0aWMgdm9pZAotbGVjX2FycF9jaGVja19leHBpcmUodW5zaWduZWQgbG9uZyBkYXRhKQorc3RhdGljIHZvaWQgbGVjX2FycF9jaGVja19leHBpcmUodm9pZCAqZGF0YSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdHJ1Y3QgbGVjX3ByaXYgKnByaXYgPSAoc3RydWN0IGxlY19wcml2ICopZGF0YTsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqbmV4dDsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBub3c7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZV90b19jaGVjazsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IGxlY19wcml2ICpwcml2ID0gZGF0YTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCXVuc2lnbmVkIGxvbmcgbm93OworCXVuc2lnbmVkIGxvbmcgdGltZV90b19jaGVjazsKKwlpbnQgaTsKIAotICAgICAgICBEUFJJTlRLKCJsZWNfYXJwX2NoZWNrX2V4cGlyZSAlcFxuIixwcml2KTsKLSAgICAgICAgRFBSSU5USygiZXhwaXJlOiBlbzolcCBuZjolcFxuIixwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMsCi0gICAgICAgICAgICAgICAgcHJpdi0+bGVjX25vX2ZvcndhcmQpOworCURQUklOVEsoImxlY19hcnBfY2hlY2tfZXhwaXJlICVwXG4iLCBwcml2KTsKIAlub3cgPSBqaWZmaWVzOworcmVzdGFydDoKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0JZm9yKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspIHsKLQkJZm9yKGVudHJ5ID0gcHJpdi0+bGVjX2FycF90YWJsZXNbaV07IGVudHJ5ICE9IE5VTEw7ICkgewotCQkJaWYgKChlbnRyeS0+ZmxhZ3MpICYgTEVDX1JFTU9URV9GTEFHICYmIAorCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWlmICgoZW50cnktPmZsYWdzKSAmIExFQ19SRU1PVEVfRkxBRyAmJgogCQkJICAgIHByaXYtPnRvcG9sb2d5X2NoYW5nZSkKIAkJCQl0aW1lX3RvX2NoZWNrID0gcHJpdi0+Zm9yd2FyZF9kZWxheV90aW1lOwogCQkJZWxzZQogCQkJCXRpbWVfdG9fY2hlY2sgPSBwcml2LT5hZ2luZ190aW1lOwogCiAJCQlEUFJJTlRLKCJBYm91dCB0byBleHBpcmU6ICVseCAtICVseCA+ICVseFxuIiwKLQkJCQlub3csZW50cnktPmxhc3RfdXNlZCwgdGltZV90b19jaGVjayk7Ci0JCQlpZiggdGltZV9hZnRlcihub3csIGVudHJ5LT5sYXN0X3VzZWQrCi0JCQkgICB0aW1lX3RvX2NoZWNrKSAmJiAKLQkJCSAgICAhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykgJiYKLQkJCSAgICAhKGVudHJ5LT5tYWNfYWRkclswXSAmIDB4MDEpICkgeyAvKiBMQU5FMjogNy4xLjIwICovCisJCQkJbm93LCBlbnRyeS0+bGFzdF91c2VkLCB0aW1lX3RvX2NoZWNrKTsKKwkJCWlmICh0aW1lX2FmdGVyKG5vdywgZW50cnktPmxhc3RfdXNlZCArIHRpbWVfdG9fY2hlY2spCisJCQkgICAgJiYgIShlbnRyeS0+ZmxhZ3MgJiBMRUNfUEVSTUFORU5UX0ZMQUcpCisJCQkgICAgJiYgIShlbnRyeS0+bWFjX2FkZHJbMF0gJiAweDAxKSkgewkvKiBMQU5FMjogNy4xLjIwICovCiAJCQkJLyogUmVtb3ZlIGVudHJ5ICovCiAJCQkJRFBSSU5USygiTEVDOkVudHJ5IHRpbWVkIG91dFxuIik7Ci0JCQkJbmV4dCA9IGVudHJ5LT5uZXh0OyAgICAgIAogCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKLQkJCQlrZnJlZShlbnRyeSk7Ci0JCQkJZW50cnkgPSBuZXh0OworCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKIAkJCX0gZWxzZSB7CiAJCQkJLyogU29tZXRoaW5nIGVsc2UgKi8KIAkJCQlpZiAoKGVudHJ5LT5zdGF0dXMgPT0gRVNJX1ZDX1BFTkRJTkcgfHwKLQkJCQkgICAgIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKSAKKwkJCQkgICAgIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HKQogCQkJCSAgICAmJiB0aW1lX2FmdGVyX2VxKG5vdywKLQkJCQkgICAgZW50cnktPnRpbWVzdGFtcCArCi0JCQkJICAgIHByaXYtPm1heF91bmtub3duX2ZyYW1lX3RpbWUpKSB7CisJCQkJCQkgICAgIGVudHJ5LT50aW1lc3RhbXAgKworCQkJCQkJICAgICBwcml2LT4KKwkJCQkJCSAgICAgbWF4X3Vua25vd25fZnJhbWVfdGltZSkpIHsKIAkJCQkJZW50cnktPnRpbWVzdGFtcCA9IGppZmZpZXM7CiAJCQkJCWVudHJ5LT5wYWNrZXRzX2Zsb29kZWQgPSAwOwogCQkJCQlpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfVkNfUEVORElORykKLQkJCQkJCXNlbmRfdG9fbGVjZChwcml2LCBsX3N2Y19zZXR1cCwgZW50cnktPm1hY19hZGRyLCBlbnRyeS0+YXRtX2FkZHIsIE5VTEwpOworCQkJCQkJc2VuZF90b19sZWNkKHByaXYsIGxfc3ZjX3NldHVwLAorCQkJCQkJCSAgICAgZW50cnktPm1hY19hZGRyLAorCQkJCQkJCSAgICAgZW50cnktPmF0bV9hZGRyLAorCQkJCQkJCSAgICAgTlVMTCk7CiAJCQkJfQotCQkJCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HIAotCQkJCSAgICYmCi0JCQkJICAgdGltZV9hZnRlcl9lcShub3csIGVudHJ5LT50aW1lc3RhbXArCi0JCQkJICAgcHJpdi0+cGF0aF9zd2l0Y2hpbmdfZGVsYXkpKSB7CisJCQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0ZMVVNIX1BFTkRJTkcKKwkJCQkgICAgJiYKKwkJCQkgICAgdGltZV9hZnRlcl9lcShub3csIGVudHJ5LT50aW1lc3RhbXAgKworCQkJCQkJICBwcml2LT5wYXRoX3N3aXRjaGluZ19kZWxheSkpIHsKIAkJCQkJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwkJCQkJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGVudHJ5LT52Y2M7CiAKKwkJCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKKwkJCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAJCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKLQkJCQkJCWxlY19zZW5kKGVudHJ5LT52Y2MsIHNrYiwgZW50cnktPnByaXYpOworCQkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKIAkJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7Ci0JCQkJCWVudHJ5LT5zdGF0dXMgPSAKLQkJCQkJCUVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCQkJbGVjX2FycF9wdXQoZW50cnkpOworCQkJCQlnb3RvIHJlc3RhcnQ7CiAJCQkJfQotCQkJCWVudHJ5ID0gZW50cnktPm5leHQ7CiAJCQl9CiAJCX0KIAl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiAKLSAgICAgICAgbW9kX3RpbWVyKCZwcml2LT5sZWNfYXJwX3RpbWVyLCBqaWZmaWVzICsgTEVDX0FSUF9SRUZSRVNIX0lOVEVSVkFMKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJnByaXYtPmxlY19hcnBfd29yaywgTEVDX0FSUF9SRUZSRVNIX0lOVEVSVkFMKTsKIH0KKwogLyoKICAqIFRyeSB0byBmaW5kIHZjYyB3aGVyZSBtYWNfYWRkcmVzcyBpcyBhdHRhY2hlZC4KICAqIAogICovCi1zdGF0aWMgc3RydWN0IGF0bV92Y2MqCi1sZWNfYXJwX3Jlc29sdmUoc3RydWN0IGxlY19wcml2ICpwcml2LCB1bnNpZ25lZCBjaGFyICptYWNfdG9fZmluZCwKLQkJaW50IGlzX3JkZXNjLCBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqKnJldF9lbnRyeSkKK3N0YXRpYyBzdHJ1Y3QgYXRtX3ZjYyAqbGVjX2FycF9yZXNvbHZlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKKwkJCQkgICAgICAgdW5zaWduZWQgY2hhciAqbWFjX3RvX2ZpbmQsIGludCBpc19yZGVzYywKKwkJCQkgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKipyZXRfZW50cnkpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKIAlzdHJ1Y3QgYXRtX3ZjYyAqZm91bmQ7CiAKLSAgICAgICAgaWYgKG1hY190b19maW5kWzBdICYgMHgwMSkgewotICAgICAgICAgICAgICAgIHN3aXRjaCAocHJpdi0+bGFuZV92ZXJzaW9uKSB7Ci0gICAgICAgICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByaXYtPm1jYXN0X3ZjYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgMjogIC8qIExBTkUyIHdhbnRzIGFycCBmb3IgbXVsdGljYXN0IGFkZHJlc3NlcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjX3RvX2ZpbmQsIGJ1c19tYWMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJpdi0+bWNhc3RfdmNjOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQorCWlmIChtYWNfdG9fZmluZFswXSAmIDB4MDEpIHsKKwkJc3dpdGNoIChwcml2LT5sYW5lX3ZlcnNpb24pIHsKKwkJY2FzZSAxOgorCQkJcmV0dXJuIHByaXYtPm1jYXN0X3ZjYzsKKwkJCWJyZWFrOworCQljYXNlIDI6CS8qIExBTkUyIHdhbnRzIGFycCBmb3IgbXVsdGljYXN0IGFkZHJlc3NlcyAqLworCQkJaWYgKCFjb21wYXJlX2V0aGVyX2FkZHIobWFjX3RvX2ZpbmQsIGJ1c19tYWMpKQorCQkJCXJldHVybiBwcml2LT5tY2FzdF92Y2M7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICBlbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfdG9fZmluZCk7Ci0gIAotICAgICAgICBpZiAoZW50cnkpIHsKLSAgICAgICAgICAgICAgICBpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfRk9SV0FSRF9ESVJFQ1QpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIENvbm5lY3Rpb24gT2sgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgKnJldF9lbnRyeSA9IGVudHJ5OwotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBlbnRyeS0+dmNjOworCWVudHJ5ID0gbGVjX2FycF9maW5kKHByaXYsIG1hY190b19maW5kKTsKKworCWlmIChlbnRyeSkgeworCQlpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfRk9SV0FSRF9ESVJFQ1QpIHsKKwkJCS8qIENvbm5lY3Rpb24gT2sgKi8KKwkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCQkJbGVjX2FycF9ob2xkKGVudHJ5KTsKKwkJCSpyZXRfZW50cnkgPSBlbnRyeTsKKwkJCWZvdW5kID0gZW50cnktPnZjYzsKIAkJCWdvdG8gb3V0OwotICAgICAgICAgICAgICAgIH0KLQkJLyogSWYgdGhlIExFX0FSUCBjYWNoZSBlbnRyeSBpcyBzdGlsbCBwZW5kaW5nLCByZXNldCBjb3VudCB0byAwCisJCX0KKwkJLyoKKwkJICogSWYgdGhlIExFX0FSUCBjYWNoZSBlbnRyeSBpcyBzdGlsbCBwZW5kaW5nLCByZXNldCBjb3VudCB0byAwCiAJCSAqIHNvIGFub3RoZXIgTEVfQVJQIHJlcXVlc3QgY2FuIGJlIG1hZGUgZm9yIHRoaXMgZnJhbWUuCiAJCSAqLwogCQlpZiAoZW50cnktPnN0YXR1cyA9PSBFU0lfQVJQX1BFTkRJTkcpIHsKIAkJCWVudHJ5LT5ub190cmllcyA9IDA7CiAJCX0KLSAgICAgICAgICAgICAgICAvKiBEYXRhIGRpcmVjdCBWQyBub3QgeWV0IHNldCB1cCwgY2hlY2sgdG8gc2VlIGlmIHRoZSB1bmtub3duCi0gICAgICAgICAgICAgICAgICAgZnJhbWUgY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdC4gSWYgdGhlIGxpbWl0IGhhcwotICAgICAgICAgICAgICAgICAgIG5vdCBiZWVuIHJlYWNoZWQsIGFsbG93IHRoZSBjYWxsZXIgdG8gc2VuZCBwYWNrZXQgdG8KLSAgICAgICAgICAgICAgICAgICBCVVMuICovCi0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5zdGF0dXMgIT0gRVNJX0ZMVVNIX1BFTkRJTkcgJiYKLSAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhY2tldHNfZmxvb2RlZDxwcml2LT5tYXhpbXVtX3Vua25vd25fZnJhbWVfY291bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWNrZXRzX2Zsb29kZWQrKzsKLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIkxFQ19BUlA6IEZsb29kaW5nLi5cbiIpOwotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBwcml2LT5tY2FzdF92Y2M7CisJCS8qCisJCSAqIERhdGEgZGlyZWN0IFZDIG5vdCB5ZXQgc2V0IHVwLCBjaGVjayB0byBzZWUgaWYgdGhlIHVua25vd24KKwkJICogZnJhbWUgY291bnQgaXMgZ3JlYXRlciB0aGFuIHRoZSBsaW1pdC4gSWYgdGhlIGxpbWl0IGhhcworCQkgKiBub3QgYmVlbiByZWFjaGVkLCBhbGxvdyB0aGUgY2FsbGVyIHRvIHNlbmQgcGFja2V0IHRvCisJCSAqIEJVUy4KKwkJICovCisJCWlmIChlbnRyeS0+c3RhdHVzICE9IEVTSV9GTFVTSF9QRU5ESU5HICYmCisJCSAgICBlbnRyeS0+cGFja2V0c19mbG9vZGVkIDwKKwkJICAgIHByaXYtPm1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudCkgeworCQkJZW50cnktPnBhY2tldHNfZmxvb2RlZCsrOworCQkJRFBSSU5USygiTEVDX0FSUDogRmxvb2RpbmcuLlxuIik7CisJCQlmb3VuZCA9IHByaXYtPm1jYXN0X3ZjYzsKIAkJCWdvdG8gb3V0OwotICAgICAgICAgICAgICAgIH0KLQkJLyogV2UgZ290IGhlcmUgYmVjYXVzZSBlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HCisJCX0KKwkJLyoKKwkJICogV2UgZ290IGhlcmUgYmVjYXVzZSBlbnRyeS0+c3RhdHVzID09IEVTSV9GTFVTSF9QRU5ESU5HCiAJCSAqIG9yIEJVUyBmbG9vZCBsaW1pdCB3YXMgcmVhY2hlZCBmb3IgYW4gZW50cnkgd2hpY2ggaXMKIAkJICogaW4gRVNJX0FSUF9QRU5ESU5HIG9yIEVTSV9WQ19QRU5ESU5HIHN0YXRlLgogCQkgKi8KLSAgICAgICAgICAgICAgICAqcmV0X2VudHJ5ID0gZW50cnk7Ci0gICAgICAgICAgICAgICAgRFBSSU5USygibGVjOiBlbnRyeS0+c3RhdHVzICVkIGVudHJ5LT52Y2MgJXBcbiIsIGVudHJ5LT5zdGF0dXMsIGVudHJ5LT52Y2MpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gTlVMTDsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKiBObyBtYXRjaGluZyBlbnRyeSB3YXMgZm91bmQgKi8KLSAgICAgICAgICAgICAgICBlbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgbWFjX3RvX2ZpbmQpOwotICAgICAgICAgICAgICAgIERQUklOVEsoIkxFQ19BUlA6IE1ha2luZyBlbnRyeVxuIik7Ci0gICAgICAgICAgICAgICAgaWYgKCFlbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZm91bmQgPSBwcml2LT5tY2FzdF92Y2M7CisJCWxlY19hcnBfaG9sZChlbnRyeSk7CisJCSpyZXRfZW50cnkgPSBlbnRyeTsKKwkJRFBSSU5USygibGVjOiBlbnRyeS0+c3RhdHVzICVkIGVudHJ5LT52Y2MgJXBcbiIsIGVudHJ5LT5zdGF0dXMsCisJCQllbnRyeS0+dmNjKTsKKwkJZm91bmQgPSBOVUxMOworCX0gZWxzZSB7CisJCS8qIE5vIG1hdGNoaW5nIGVudHJ5IHdhcyBmb3VuZCAqLworCQllbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgbWFjX3RvX2ZpbmQpOworCQlEUFJJTlRLKCJMRUNfQVJQOiBNYWtpbmcgZW50cnlcbiIpOworCQlpZiAoIWVudHJ5KSB7CisJCQlmb3VuZCA9IHByaXYtPm1jYXN0X3ZjYzsKIAkJCWdvdG8gb3V0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgLyogV2Ugd2FudCBhcnAtcmVxdWVzdChzKSB0byBiZSBzZW50ICovCi0gICAgICAgICAgICAgICAgZW50cnktPnBhY2tldHNfZmxvb2RlZCA9MTsKLSAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHVzID0gRVNJX0FSUF9QRU5ESU5HOwotICAgICAgICAgICAgICAgIGVudHJ5LT5ub190cmllcyA9IDE7Ci0gICAgICAgICAgICAgICAgZW50cnktPmxhc3RfdXNlZCA9IGVudHJ5LT50aW1lc3RhbXAgPSBqaWZmaWVzOwotICAgICAgICAgICAgICAgIGVudHJ5LT5pc19yZGVzYyA9IGlzX3JkZXNjOwotICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+aXNfcmRlc2MpCi0gICAgICAgICAgICAgICAgICAgICAgICBzZW5kX3RvX2xlY2QocHJpdiwgbF9yZGVzY19hcnBfeG10LCBtYWNfdG9fZmluZCwgTlVMTCwgTlVMTCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgc2VuZF90b19sZWNkKHByaXYsIGxfYXJwX3htdCwgbWFjX3RvX2ZpbmQsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgICAgIGVudHJ5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArICgxKkhaKTsKLSAgICAgICAgICAgICAgICBlbnRyeS0+dGltZXIuZnVuY3Rpb24gPSBsZWNfYXJwX2V4cGlyZV9hcnA7Ci0gICAgICAgICAgICAgICAgYWRkX3RpbWVyKCZlbnRyeS0+dGltZXIpOwotICAgICAgICAgICAgICAgIGZvdW5kID0gcHJpdi0+bWNhc3RfdmNjOwotICAgICAgICB9CisJCX0KKwkJbGVjX2FycF9hZGQocHJpdiwgZW50cnkpOworCQkvKiBXZSB3YW50IGFycC1yZXF1ZXN0KHMpIHRvIGJlIHNlbnQgKi8KKwkJZW50cnktPnBhY2tldHNfZmxvb2RlZCA9IDE7CisJCWVudHJ5LT5zdGF0dXMgPSBFU0lfQVJQX1BFTkRJTkc7CisJCWVudHJ5LT5ub190cmllcyA9IDE7CisJCWVudHJ5LT5sYXN0X3VzZWQgPSBlbnRyeS0+dGltZXN0YW1wID0gamlmZmllczsKKwkJZW50cnktPmlzX3JkZXNjID0gaXNfcmRlc2M7CisJCWlmIChlbnRyeS0+aXNfcmRlc2MpCisJCQlzZW5kX3RvX2xlY2QocHJpdiwgbF9yZGVzY19hcnBfeG10LCBtYWNfdG9fZmluZCwgTlVMTCwKKwkJCQkgICAgIE5VTEwpOworCQllbHNlCisJCQlzZW5kX3RvX2xlY2QocHJpdiwgbF9hcnBfeG10LCBtYWNfdG9fZmluZCwgTlVMTCwgTlVMTCk7CisJCWVudHJ5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArICgxICogSFopOworCQllbnRyeS0+dGltZXIuZnVuY3Rpb24gPSBsZWNfYXJwX2V4cGlyZV9hcnA7CisJCWFkZF90aW1lcigmZW50cnktPnRpbWVyKTsKKwkJZm91bmQgPSBwcml2LT5tY2FzdF92Y2M7CisJfQogCiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CkBAIC0yMDc0LDMwICsyMDUxLDMwIEBACiB9CiAKIHN0YXRpYyBpbnQKLWxlY19hZGRyX2RlbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLCAKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBlcm1hbmVudCkKK2xlY19hZGRyX2RlbGV0ZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHVuc2lnbmVkIGNoYXIgKmF0bV9hZGRyLAorCQl1bnNpZ25lZCBsb25nIHBlcm1hbmVudCkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnksICpuZXh0OwotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCWludCBpOwogCi0gICAgICAgIERQUklOVEsoImxlY19hZGRyX2RlbGV0ZVxuIik7CisJRFBSSU5USygibGVjX2FkZHJfZGVsZXRlXG4iKTsKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZm9yKGVudHJ5ID0gcHJpdi0+bGVjX2FycF90YWJsZXNbaV07IGVudHJ5ICE9IE5VTEw7IGVudHJ5ID0gbmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGVudHJ5LT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAoYXRtX2FkZHIsIGVudHJ5LT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKHBlcm1hbmVudCB8fCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShlbnRyeS0+ZmxhZ3MgJiBMRUNfUEVSTUFORU5UX0ZMQUcpKSkgeworCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWlmICghbWVtY21wKGF0bV9hZGRyLCBlbnRyeS0+YXRtX2FkZHIsIEFUTV9FU0FfTEVOKQorCQkJICAgICYmIChwZXJtYW5lbnQgfHwKKwkJCQkhKGVudHJ5LT5mbGFncyAmIExFQ19QRVJNQU5FTlRfRkxBRykpKSB7CiAJCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisJCQkJbGVjX2FycF9wdXQoZW50cnkpOworCQkJfQogCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KKwkJCXJldHVybiAwOworCQl9CisJfQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICByZXR1cm4gLTE7CisJcmV0dXJuIC0xOwogfQogCiAvKgpAQCAtMjEwNSwxMDkgKzIwODIsOTggQEAKICAqLwogc3RhdGljIHZvaWQKIGxlY19hcnBfdXBkYXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgY2hhciAqbWFjX2FkZHIsCi0gICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyByZW1vdGVmbGFnLAotICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHRhcmdldGxlc3NfbGVfYXJwKQorCSAgICAgICB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyByZW1vdGVmbGFnLAorCSAgICAgICB1bnNpZ25lZCBpbnQgdGFyZ2V0bGVzc19sZV9hcnApCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqdG1wOwotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqdG1wOworCWludCBpOwogCi0gICAgICAgIERQUklOVEsoImxlYzolcyIsICh0YXJnZXRsZXNzX2xlX2FycCkgPyAidGFyZ2V0bGVzcyAiOiAiICIpOwotICAgICAgICBEUFJJTlRLKCJsZWNfYXJwX3VwZGF0ZSBtYWM6JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4XG4iLAotICAgICAgICAgICAgICAgIG1hY19hZGRyWzBdLG1hY19hZGRyWzFdLG1hY19hZGRyWzJdLG1hY19hZGRyWzNdLAotICAgICAgICAgICAgICAgIG1hY19hZGRyWzRdLG1hY19hZGRyWzVdKTsKKwlEUFJJTlRLKCJsZWM6JXMiLCAodGFyZ2V0bGVzc19sZV9hcnApID8gInRhcmdldGxlc3MgIiA6ICIgIik7CisJRFBSSU5USygibGVjX2FycF91cGRhdGUgbWFjOiUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKKwkJbWFjX2FkZHJbMF0sIG1hY19hZGRyWzFdLCBtYWNfYWRkclsyXSwgbWFjX2FkZHJbM10sCisJCW1hY19hZGRyWzRdLCBtYWNfYWRkcls1XSk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGVudHJ5ID0gbGVjX2FycF9maW5kKHByaXYsIG1hY19hZGRyKTsKLSAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwgJiYgdGFyZ2V0bGVzc19sZV9hcnApCi0gICAgICAgICAgICAgICAgZ290byBvdXQ7ICAgLyogTEFORTI6IGlnbm9yZSB0YXJnZXRsZXNzIExFX0FSUHMgZm9yIHdoaWNoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogd2UgaGF2ZSBubyBlbnRyeSBpbiB0aGUgY2FjaGUuIDcuMS4zMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAocHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSB7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBwcml2LT5sZWNfYXJwX2VtcHR5X29uZXM7Ci0gICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAoZW50cnktPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUoZW50cnktPm5leHQgJiYgbWVtY21wKGVudHJ5LT5uZXh0LT5hdG1fYWRkciwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+bmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLT5uZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnkgPSBOVUxMOwotICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChlbnRyeSkgewotICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgdG1wID0gbGVjX2FycF9maW5kKHByaXYsIG1hY19hZGRyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZ0bXAtPnRpbWVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wLT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweSh0bXAtPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAtPnZjYyA9IGVudHJ5LT52Y2M7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+b2xkX3B1c2ggPSBlbnRyeS0+b2xkX3B1c2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcC0+bGFzdF91c2VkID0gamlmZmllczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5PXRtcDsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+bWFjX2FkZHIsIG1hY19hZGRyLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVtb3RlZmxhZykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmZsYWdzfD1MRUNfUkVNT1RFX0ZMQUc7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5mbGFncyY9fkxFQ19SRU1PVEVfRkxBRzsKLSAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIkFmdGVyIHVwZGF0ZVxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkdW1wX2FycF90YWJsZShwcml2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfYWRkcik7Ci0gICAgICAgIGlmICghZW50cnkpIHsKLSAgICAgICAgICAgICAgICBlbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgbWFjX2FkZHIpOwotICAgICAgICAgICAgICAgIGlmICghZW50cnkpCisJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgbWFjX2FkZHIpOworCWlmIChlbnRyeSA9PSBOVUxMICYmIHRhcmdldGxlc3NfbGVfYXJwKQorCQlnb3RvIG91dDsJLyoKKwkJCQkgKiBMQU5FMjogaWdub3JlIHRhcmdldGxlc3MgTEVfQVJQcyBmb3Igd2hpY2gKKwkJCQkgKiB3ZSBoYXZlIG5vIGVudHJ5IGluIHRoZSBjYWNoZS4gNy4xLjMwCisJCQkJICovCisJaWYgKCFobGlzdF9lbXB0eSgmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzKSkgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzLCBuZXh0KSB7CisJCQlpZiAobWVtY21wKGVudHJ5LT5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKSA9PSAwKSB7CisJCQkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CisJCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOworCQkJCXRtcCA9IGxlY19hcnBfZmluZChwcml2LCBtYWNfYWRkcik7CisJCQkJaWYgKHRtcCkgeworCQkJCQlkZWxfdGltZXIoJnRtcC0+dGltZXIpOworCQkJCQl0bXAtPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCQkJbWVtY3B5KHRtcC0+YXRtX2FkZHIsIGF0bV9hZGRyLCBBVE1fRVNBX0xFTik7CisJCQkJCXRtcC0+dmNjID0gZW50cnktPnZjYzsKKwkJCQkJdG1wLT5vbGRfcHVzaCA9IGVudHJ5LT5vbGRfcHVzaDsKKwkJCQkJdG1wLT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCQkJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CisJCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKKwkJCQkJZW50cnkgPSB0bXA7CisJCQkJfSBlbHNlIHsKKwkJCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCQkJbWVtY3B5KGVudHJ5LT5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSF9BTEVOKTsKKwkJCQkJZW50cnktPmxhc3RfdXNlZCA9IGppZmZpZXM7CisJCQkJCWxlY19hcnBfYWRkKHByaXYsIGVudHJ5KTsKKwkJCQl9CisJCQkJaWYgKHJlbW90ZWZsYWcpCisJCQkJCWVudHJ5LT5mbGFncyB8PSBMRUNfUkVNT1RFX0ZMQUc7CisJCQkJZWxzZQorCQkJCQllbnRyeS0+ZmxhZ3MgJj0gfkxFQ19SRU1PVEVfRkxBRzsKKwkJCQlEUFJJTlRLKCJBZnRlciB1cGRhdGVcbiIpOworCQkJCWR1bXBfYXJwX3RhYmxlKHByaXYpOworCQkJCWdvdG8gb3V0OworCQkJfQorCQl9CisJfQorCisJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgbWFjX2FkZHIpOworCWlmICghZW50cnkpIHsKKwkJZW50cnkgPSBtYWtlX2VudHJ5KHByaXYsIG1hY19hZGRyKTsKKwkJaWYgKCFlbnRyeSkKIAkJCWdvdG8gb3V0OwotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXMgPSBFU0lfVU5LTk9XTjsKLSAgICAgICAgICAgICAgICBsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7Ci0gICAgICAgICAgICAgICAgLyogVGVtcG9yYXJ5LCBjaGFuZ2VzIGJlZm9yZSBlbmQgb2YgZnVuY3Rpb24gKi8KLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoZW50cnktPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pOwotICAgICAgICBkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgIGZvcihpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZm9yKHRtcCA9IHByaXYtPmxlY19hcnBfdGFibGVzW2ldOyB0bXA7IHRtcD10bXAtPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeSAhPSB0bXAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAhbWVtY21wKHRtcC0+YXRtX2FkZHIsIGF0bV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRNX0VTQV9MRU4pKSB7IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBWY2MgdG8gdGhpcyBob3N0IGV4aXN0cyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wLT5zdGF0dXMgPiBFU0lfVkNfUEVORElORykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRVNJX0ZMVVNIX1BFTkRJTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogRVNJX0ZPUldBUkRfRElSRUNUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnZjYyA9IHRtcC0+dmNjOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5vbGRfcHVzaD10bXAtPm9sZF9wdXNoOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXM9dG1wLT5zdGF0dXM7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAocmVtb3RlZmxhZykKLSAgICAgICAgICAgICAgICBlbnRyeS0+ZmxhZ3N8PUxFQ19SRU1PVEVfRkxBRzsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGVudHJ5LT5mbGFncyY9fkxFQ19SRU1PVEVfRkxBRzsKLSAgICAgICAgaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX0FSUF9QRU5ESU5HIHx8Ci0gICAgICAgICAgICBlbnRyeS0+c3RhdHVzID09IEVTSV9VTktOT1dOKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXR1cyA9IEVTSV9WQ19QRU5ESU5HOwotICAgICAgICAgICAgICAgIHNlbmRfdG9fbGVjZChwcml2LCBsX3N2Y19zZXR1cCwgZW50cnktPm1hY19hZGRyLCBhdG1fYWRkciwgTlVMTCk7Ci0gICAgICAgIH0KLSAgICAgICAgRFBSSU5USygiQWZ0ZXIgdXBkYXRlMlxuIik7Ci0gICAgICAgIGR1bXBfYXJwX3RhYmxlKHByaXYpOworCQllbnRyeS0+c3RhdHVzID0gRVNJX1VOS05PV047CisJCWxlY19hcnBfYWRkKHByaXYsIGVudHJ5KTsKKwkJLyogVGVtcG9yYXJ5LCBjaGFuZ2VzIGJlZm9yZSBlbmQgb2YgZnVuY3Rpb24gKi8KKwl9CisJbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgYXRtX2FkZHIsIEFUTV9FU0FfTEVOKTsKKwlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CisJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KHRtcCwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCQlpZiAoZW50cnkgIT0gdG1wICYmCisJCQkgICAgIW1lbWNtcCh0bXAtPmF0bV9hZGRyLCBhdG1fYWRkciwgQVRNX0VTQV9MRU4pKSB7CisJCQkJLyogVmNjIHRvIHRoaXMgaG9zdCBleGlzdHMgKi8KKwkJCQlpZiAodG1wLT5zdGF0dXMgPiBFU0lfVkNfUEVORElORykgeworCQkJCQkvKgorCQkJCQkgKiBFU0lfRkxVU0hfUEVORElORywKKwkJCQkJICogRVNJX0ZPUldBUkRfRElSRUNUCisJCQkJCSAqLworCQkJCQllbnRyeS0+dmNjID0gdG1wLT52Y2M7CisJCQkJCWVudHJ5LT5vbGRfcHVzaCA9IHRtcC0+b2xkX3B1c2g7CisJCQkJfQorCQkJCWVudHJ5LT5zdGF0dXMgPSB0bXAtPnN0YXR1czsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwlpZiAocmVtb3RlZmxhZykKKwkJZW50cnktPmZsYWdzIHw9IExFQ19SRU1PVEVfRkxBRzsKKwllbHNlCisJCWVudHJ5LT5mbGFncyAmPSB+TEVDX1JFTU9URV9GTEFHOworCWlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9BUlBfUEVORElORyB8fCBlbnRyeS0+c3RhdHVzID09IEVTSV9VTktOT1dOKSB7CisJCWVudHJ5LT5zdGF0dXMgPSBFU0lfVkNfUEVORElORzsKKwkJc2VuZF90b19sZWNkKHByaXYsIGxfc3ZjX3NldHVwLCBlbnRyeS0+bWFjX2FkZHIsIGF0bV9hZGRyLCBOVUxMKTsKKwl9CisJRFBSSU5USygiQWZ0ZXIgdXBkYXRlMlxuIik7CisJZHVtcF9hcnBfdGFibGUocHJpdik7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiB9CkBAIC0yMjE3LDI5OSArMjE4MywyOTkgQEAKICAqLwogc3RhdGljIHZvaWQKIGxlY192Y2NfYWRkZWQoc3RydWN0IGxlY19wcml2ICpwcml2LCBzdHJ1Y3QgYXRtbGVjX2lvYyAqaW9jX2RhdGEsCi0gICAgICAgICAgICAgIHN0cnVjdCBhdG1fdmNjICp2Y2MsCi0gICAgICAgICAgICAgIHZvaWQgKCpvbGRfcHVzaCkoc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikpCisJICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYywKKwkgICAgICB2b2lkICgqb2xkX3B1c2gpIChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7Ci0gICAgICAgIGludCBpLCBmb3VuZF9lbnRyeT0wOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOworCXN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKKwlpbnQgaSwgZm91bmRfZW50cnkgPSAwOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICBpZiAoaW9jX2RhdGEtPnJlY2VpdmUgPT0gMikgewotICAgICAgICAgICAgICAgIC8qIFZjYyBmb3IgTXVsdGljYXN0IEZvcndhcmQuIE5vIHRpbWVyLCBMQU5FdjIgNy4xLjIwIGFuZCAyLjMuNS4zICovCisJaWYgKGlvY19kYXRhLT5yZWNlaXZlID09IDIpIHsKKwkJLyogVmNjIGZvciBNdWx0aWNhc3QgRm9yd2FyZC4gTm8gdGltZXIsIExBTkV2MiA3LjEuMjAgYW5kIDIuMy41LjMgKi8KIAotICAgICAgICAgICAgICAgIERQUklOVEsoIkxFQ19BUlA6IEF0dGFjaGluZyBtY2FzdCBmb3J3YXJkXG4iKTsKKwkJRFBSSU5USygiTEVDX0FSUDogQXR0YWNoaW5nIG1jYXN0IGZvcndhcmRcbiIpOwogI2lmIDAKLSAgICAgICAgICAgICAgICBlbnRyeSA9IGxlY19hcnBfZmluZChwcml2LCBidXNfbWFjKTsKLSAgICAgICAgICAgICAgICBpZiAoIWVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoIkxFQ19BUlA6IE11bHRpY2FzdCBlbnRyeSBub3QgZm91bmQhXG4iKTsKKwkJZW50cnkgPSBsZWNfYXJwX2ZpbmQocHJpdiwgYnVzX21hYyk7CisJCWlmICghZW50cnkpIHsKKwkJCXByaW50aygiTEVDX0FSUDogTXVsdGljYXN0IGVudHJ5IG5vdCBmb3VuZCFcbiIpOwogCQkJZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+YXRtX2FkZHIsIGlvY19kYXRhLT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pOwotICAgICAgICAgICAgICAgIGVudHJ5LT5yZWN2X3ZjYyA9IHZjYzsKLSAgICAgICAgICAgICAgICBlbnRyeS0+b2xkX3JlY3ZfcHVzaCA9IG9sZF9wdXNoOworCQl9CisJCW1lbWNweShlbnRyeS0+YXRtX2FkZHIsIGlvY19kYXRhLT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pOworCQllbnRyeS0+cmVjdl92Y2MgPSB2Y2M7CisJCWVudHJ5LT5vbGRfcmVjdl9wdXNoID0gb2xkX3B1c2g7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBlbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgYnVzX21hYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJCWVudHJ5ID0gbWFrZV9lbnRyeShwcml2LCBidXNfbWFjKTsKKwkJaWYgKGVudHJ5ID09IE5VTEwpCiAJCQlnb3RvIG91dDsKLSAgICAgICAgICAgICAgICBkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7Ci0gICAgICAgICAgICAgICAgZW50cnktPnJlY3ZfdmNjID0gdmNjOwotICAgICAgICAgICAgICAgIGVudHJ5LT5vbGRfcmVjdl9wdXNoID0gb2xkX3B1c2g7Ci0gICAgICAgICAgICAgICAgZW50cnktPm5leHQgPSBwcml2LT5tY2FzdF9md2RzOwotICAgICAgICAgICAgICAgIHByaXYtPm1jYXN0X2Z3ZHMgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfSBlbHNlIGlmIChpb2NfZGF0YS0+cmVjZWl2ZSA9PSAxKSB7Ci0gICAgICAgICAgICAgICAgLyogVmNjIHdoaWNoIHdlIGRvbid0IHdhbnQgdG8gbWFrZSBkZWZhdWx0IHZjYywgYXR0YWNoIGl0Ci0gICAgICAgICAgICAgICAgICAgYW55d2F5LiAqLwotICAgICAgICAgICAgICAgIERQUklOVEsoIkxFQ19BUlA6QXR0YWNoaW5nIGRhdGEgZGlyZWN0LCBub3QgZGVmYXVsdCA6JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvY19kYXRhLT5hdG1fYWRkclswXSxpb2NfZGF0YS0+YXRtX2FkZHJbMV0sCi0gICAgICAgICAgICAgICAgICAgICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMl0saW9jX2RhdGEtPmF0bV9hZGRyWzNdLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzRdLGlvY19kYXRhLT5hdG1fYWRkcls1XSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlvY19kYXRhLT5hdG1fYWRkcls2XSxpb2NfZGF0YS0+YXRtX2FkZHJbN10sCi0gICAgICAgICAgICAgICAgICAgICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbOF0saW9jX2RhdGEtPmF0bV9hZGRyWzldLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEwXSxpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEyXSxpb2NfZGF0YS0+YXRtX2FkZHJbMTNdLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE0XSxpb2NfZGF0YS0+YXRtX2FkZHJbMTVdLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE2XSxpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAotICAgICAgICAgICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE4XSxpb2NfZGF0YS0+YXRtX2FkZHJbMTldKTsKLSAgICAgICAgICAgICAgICBlbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgYnVzX21hYyk7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKKwkJbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7CisJCWVudHJ5LT5yZWN2X3ZjYyA9IHZjYzsKKwkJZW50cnktPm9sZF9yZWN2X3B1c2ggPSBvbGRfcHVzaDsKKwkJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5uZXh0LCAmcHJpdi0+bWNhc3RfZndkcyk7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoaW9jX2RhdGEtPnJlY2VpdmUgPT0gMSkgeworCQkvKgorCQkgKiBWY2Mgd2hpY2ggd2UgZG9uJ3Qgd2FudCB0byBtYWtlIGRlZmF1bHQgdmNjLAorCQkgKiBhdHRhY2ggaXQgYW55d2F5LgorCQkgKi8KKwkJRFBSSU5USworCQkgICAgKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgbm90IGRlZmF1bHQ6ICIKKwkJICAgICAiJTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeFxuIiwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxXSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMl0sIGlvY19kYXRhLT5hdG1fYWRkclszXSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNF0sIGlvY19kYXRhLT5hdG1fYWRkcls1XSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNl0sIGlvY19kYXRhLT5hdG1fYWRkcls3XSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbOF0sIGlvY19kYXRhLT5hdG1fYWRkcls5XSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTFdLAorCQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxMl0sIGlvY19kYXRhLT5hdG1fYWRkclsxM10sCisJCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE0XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE1XSwKKwkJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTddLAorCQkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxOF0sIGlvY19kYXRhLT5hdG1fYWRkclsxOV0pOworCQllbnRyeSA9IG1ha2VfZW50cnkocHJpdiwgYnVzX21hYyk7CisJCWlmIChlbnRyeSA9PSBOVUxMKQogCQkJZ290byBvdXQ7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7Ci0gICAgICAgICAgICAgICAgbWVtc2V0KGVudHJ5LT5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOwotICAgICAgICAgICAgICAgIGVudHJ5LT5yZWN2X3ZjYyA9IHZjYzsKLSAgICAgICAgICAgICAgICBlbnRyeS0+b2xkX3JlY3ZfcHVzaCA9IG9sZF9wdXNoOwotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXMgPSBFU0lfVU5LTk9XTjsKLSAgICAgICAgICAgICAgICBlbnRyeS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBwcml2LT52Y2NfdGltZW91dF9wZXJpb2Q7Ci0gICAgICAgICAgICAgICAgZW50cnktPnRpbWVyLmZ1bmN0aW9uID0gbGVjX2FycF9leHBpcmVfdmNjOwotICAgICAgICAgICAgICAgIGFkZF90aW1lcigmZW50cnktPnRpbWVyKTsKLSAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9IHByaXYtPmxlY19ub19mb3J3YXJkOwotICAgICAgICAgICAgICAgIHByaXYtPmxlY19ub19mb3J3YXJkID0gZW50cnk7CisJCW1lbWNweShlbnRyeS0+YXRtX2FkZHIsIGlvY19kYXRhLT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pOworCQltZW1zZXQoZW50cnktPm1hY19hZGRyLCAwLCBFVEhfQUxFTik7CisJCWVudHJ5LT5yZWN2X3ZjYyA9IHZjYzsKKwkJZW50cnktPm9sZF9yZWN2X3B1c2ggPSBvbGRfcHVzaDsKKwkJZW50cnktPnN0YXR1cyA9IEVTSV9VTktOT1dOOworCQllbnRyeS0+dGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBwcml2LT52Y2NfdGltZW91dF9wZXJpb2Q7CisJCWVudHJ5LT50aW1lci5mdW5jdGlvbiA9IGxlY19hcnBfZXhwaXJlX3ZjYzsKKwkJaGxpc3RfYWRkX2hlYWQoJmVudHJ5LT5uZXh0LCAmcHJpdi0+bGVjX25vX2ZvcndhcmQpOworCQlhZGRfdGltZXIoJmVudHJ5LT50aW1lcik7CiAJCWR1bXBfYXJwX3RhYmxlKHByaXYpOwogCQlnb3RvIG91dDsKLSAgICAgICAgfQotICAgICAgICBEUFJJTlRLKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgZGVmYXVsdDolMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4XG4iLAotICAgICAgICAgICAgICAgIGlvY19kYXRhLT5hdG1fYWRkclswXSxpb2NfZGF0YS0+YXRtX2FkZHJbMV0sCi0gICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzJdLGlvY19kYXRhLT5hdG1fYWRkclszXSwKLSAgICAgICAgICAgICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNF0saW9jX2RhdGEtPmF0bV9hZGRyWzVdLAotICAgICAgICAgICAgICAgIGlvY19kYXRhLT5hdG1fYWRkcls2XSxpb2NfZGF0YS0+YXRtX2FkZHJbN10sCi0gICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzhdLGlvY19kYXRhLT5hdG1fYWRkcls5XSwKLSAgICAgICAgICAgICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTBdLGlvY19kYXRhLT5hdG1fYWRkclsxMV0sCi0gICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEyXSxpb2NfZGF0YS0+YXRtX2FkZHJbMTNdLAotICAgICAgICAgICAgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxNF0saW9jX2RhdGEtPmF0bV9hZGRyWzE1XSwKLSAgICAgICAgICAgICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTZdLGlvY19kYXRhLT5hdG1fYWRkclsxN10sCi0gICAgICAgICAgICAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE4XSxpb2NfZGF0YS0+YXRtX2FkZHJbMTldKTsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgZm9yIChlbnRyeSA9IHByaXYtPmxlY19hcnBfdGFibGVzW2ldOyBlbnRyeTsgZW50cnk9ZW50cnktPm5leHQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZW1jbXAoaW9jX2RhdGEtPmF0bV9hZGRyLCBlbnRyeS0+YXRtX2FkZHIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBVE1fRVNBX0xFTik9PTApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBSSU5USygiTEVDX0FSUDogQXR0YWNoaW5nIGRhdGEgZGlyZWN0XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBSSU5USygiQ3VycmVudGx5IC0+IFZjYzogJWQsIFJ2Y2M6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnZjYz9lbnRyeS0+dmNjLT52Y2k6MCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cmVjdl92Y2M/ZW50cnktPnJlY3ZfdmNjLT52Y2k6MCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX2VudHJ5PTE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnZjYyA9IHZjYzsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm9sZF9wdXNoID0gb2xkX3B1c2g7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbnRyeS0+c3RhdHVzID09IEVTSV9WQ19QRU5ESU5HKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocHJpdi0+bWF4aW11bV91bmtub3duX2ZyYW1lX2NvdW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0wKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXR1cyA9IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFU0lfRk9SV0FSRF9ESVJFQ1Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+dGltZXN0YW1wID0gamlmZmllczsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXMgPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVNJX0ZMVVNIX1BFTkRJTkc7CisJfQorCURQUklOVEsKKwkgICAgKCJMRUNfQVJQOkF0dGFjaGluZyBkYXRhIGRpcmVjdCwgZGVmYXVsdDogIgorCSAgICAgIiUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnglMi4yeCUyLjJ4JTIuMnhcbiIsCisJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMF0sIGlvY19kYXRhLT5hdG1fYWRkclsxXSwKKwkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsyXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzNdLAorCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbNV0sCisJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbNl0sIGlvY19kYXRhLT5hdG1fYWRkcls3XSwKKwkgICAgIGlvY19kYXRhLT5hdG1fYWRkcls4XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzldLAorCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzEwXSwgaW9jX2RhdGEtPmF0bV9hZGRyWzExXSwKKwkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxMl0sIGlvY19kYXRhLT5hdG1fYWRkclsxM10sCisJICAgICBpb2NfZGF0YS0+YXRtX2FkZHJbMTRdLCBpb2NfZGF0YS0+YXRtX2FkZHJbMTVdLAorCSAgICAgaW9jX2RhdGEtPmF0bV9hZGRyWzE2XSwgaW9jX2RhdGEtPmF0bV9hZGRyWzE3XSwKKwkgICAgIGlvY19kYXRhLT5hdG1fYWRkclsxOF0sIGlvY19kYXRhLT5hdG1fYWRkclsxOV0pOworCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgbm9kZSwgJnByaXYtPmxlY19hcnBfdGFibGVzW2ldLCBuZXh0KSB7CisJCQlpZiAobWVtY21wCisJCQkgICAgKGlvY19kYXRhLT5hdG1fYWRkciwgZW50cnktPmF0bV9hZGRyLAorCQkJICAgICBBVE1fRVNBX0xFTikgPT0gMCkgeworCQkJCURQUklOVEsoIkxFQ19BUlA6IEF0dGFjaGluZyBkYXRhIGRpcmVjdFxuIik7CisJCQkJRFBSSU5USygiQ3VycmVudGx5IC0+IFZjYzogJWQsIFJ2Y2M6JWRcbiIsCisJCQkJCWVudHJ5LT52Y2MgPyBlbnRyeS0+dmNjLT52Y2kgOiAwLAorCQkJCQllbnRyeS0+cmVjdl92Y2MgPyBlbnRyeS0+cmVjdl92Y2MtPgorCQkJCQl2Y2kgOiAwKTsKKwkJCQlmb3VuZF9lbnRyeSA9IDE7CisJCQkJZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOworCQkJCWVudHJ5LT52Y2MgPSB2Y2M7CisJCQkJZW50cnktPm9sZF9wdXNoID0gb2xkX3B1c2g7CisJCQkJaWYgKGVudHJ5LT5zdGF0dXMgPT0gRVNJX1ZDX1BFTkRJTkcpIHsKKwkJCQkJaWYgKHByaXYtPm1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudAorCQkJCQkgICAgPT0gMCkKKwkJCQkJCWVudHJ5LT5zdGF0dXMgPQorCQkJCQkJICAgIEVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCQkJZWxzZSB7CisJCQkJCQllbnRyeS0+dGltZXN0YW1wID0gamlmZmllczsKKwkJCQkJCWVudHJ5LT5zdGF0dXMgPQorCQkJCQkJICAgIEVTSV9GTFVTSF9QRU5ESU5HOwogI2lmIDAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfdG9fbGVjZChwcml2LGxfZmx1c2hfeG10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmF0bV9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCQkJCQkJc2VuZF90b19sZWNkKHByaXYsIGxfZmx1c2hfeG10LAorCQkJCQkJCSAgICAgTlVMTCwKKwkJCQkJCQkgICAgIGVudHJ5LT5hdG1fYWRkciwKKwkJCQkJCQkgICAgIE5VTEwpOwogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXkgd2VyZSBmb3JtaW5nIGEgY29ubmVjdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHVzLCBhbmQgd2UgdG8gdGhlbS4gT3VyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVRNIGFkZHJlc3MgaXMgbnVtZXJpY2FsbHkgbG93ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIHRoZWlycywgc28gd2UgbWFrZSBjb25uZWN0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2UgZm9ybWVkIGludG8gZGVmYXVsdCBWQ0MgKDguMS4xMSkuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29ubmVjdGlvbiB0aGV5IG1hZGUgZ2V0cyB0b3JuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93bi4gVGhpcyBtaWdodCBjb25mdXNlIHNvbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGllbnRzLiBDYW4gYmUgY2hhbmdlZCBpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvbWVvbmUgcmVwb3J0cyB0cm91YmxlLi4uICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGlmIChmb3VuZF9lbnRyeSkgewotICAgICAgICAgICAgICAgIERQUklOVEsoIkFmdGVyIHZjYyB3YXMgYWRkZWRcbiIpOwotICAgICAgICAgICAgICAgIGR1bXBfYXJwX3RhYmxlKHByaXYpOworCQkJCQl9CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogVGhleSB3ZXJlIGZvcm1pbmcgYSBjb25uZWN0aW9uCisJCQkJCSAqIHRvIHVzLCBhbmQgd2UgdG8gdGhlbS4gT3VyCisJCQkJCSAqIEFUTSBhZGRyZXNzIGlzIG51bWVyaWNhbGx5IGxvd2VyCisJCQkJCSAqIHRoYW4gdGhlaXJzLCBzbyB3ZSBtYWtlIGNvbm5lY3Rpb24KKwkJCQkJICogd2UgZm9ybWVkIGludG8gZGVmYXVsdCBWQ0MgKDguMS4xMSkuCisJCQkJCSAqIENvbm5lY3Rpb24gdGhleSBtYWRlIGdldHMgdG9ybgorCQkJCQkgKiBkb3duLiBUaGlzIG1pZ2h0IGNvbmZ1c2Ugc29tZQorCQkJCQkgKiBjbGllbnRzLiBDYW4gYmUgY2hhbmdlZCBpZgorCQkJCQkgKiBzb21lb25lIHJlcG9ydHMgdHJvdWJsZS4uLgorCQkJCQkgKi8KKwkJCQkJOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKwlpZiAoZm91bmRfZW50cnkpIHsKKwkJRFBSSU5USygiQWZ0ZXIgdmNjIHdhcyBhZGRlZFxuIik7CisJCWR1bXBfYXJwX3RhYmxlKHByaXYpOwogCQlnb3RvIG91dDsKLSAgICAgICAgfQotICAgICAgICAvKiBOb3QgZm91bmQsIHNuYXRjaCBhZGRyZXNzIGZyb20gZmlyc3QgZGF0YSBwYWNrZXQgdGhhdCBhcnJpdmVzIGZyb20KLSAgICAgICAgICAgdGhpcyB2Y2MgKi8KLSAgICAgICAgZW50cnkgPSBtYWtlX2VudHJ5KHByaXYsIGJ1c19tYWMpOwotICAgICAgICBpZiAoIWVudHJ5KQorCX0KKwkvKgorCSAqIE5vdCBmb3VuZCwgc25hdGNoIGFkZHJlc3MgZnJvbSBmaXJzdCBkYXRhIHBhY2tldCB0aGF0IGFycml2ZXMKKwkgKiBmcm9tIHRoaXMgdmNjCisJICovCisJZW50cnkgPSBtYWtlX2VudHJ5KHByaXYsIGJ1c19tYWMpOworCWlmICghZW50cnkpCiAJCWdvdG8gb3V0OwotICAgICAgICBlbnRyeS0+dmNjID0gdmNjOwotICAgICAgICBlbnRyeS0+b2xkX3B1c2ggPSBvbGRfcHVzaDsKLSAgICAgICAgbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7Ci0gICAgICAgIG1lbXNldChlbnRyeS0+bWFjX2FkZHIsIDAsIEVUSF9BTEVOKTsKLSAgICAgICAgZW50cnktPnN0YXR1cyA9IEVTSV9VTktOT1dOOwotICAgICAgICBlbnRyeS0+bmV4dCA9IHByaXYtPmxlY19hcnBfZW1wdHlfb25lczsKLSAgICAgICAgcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzID0gZW50cnk7Ci0gICAgICAgIGVudHJ5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHByaXYtPnZjY190aW1lb3V0X3BlcmlvZDsKLSAgICAgICAgZW50cnktPnRpbWVyLmZ1bmN0aW9uID0gbGVjX2FycF9leHBpcmVfdmNjOwotICAgICAgICBhZGRfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgIERQUklOVEsoIkFmdGVyIHZjYyB3YXMgYWRkZWRcbiIpOworCWVudHJ5LT52Y2MgPSB2Y2M7CisJZW50cnktPm9sZF9wdXNoID0gb2xkX3B1c2g7CisJbWVtY3B5KGVudHJ5LT5hdG1fYWRkciwgaW9jX2RhdGEtPmF0bV9hZGRyLCBBVE1fRVNBX0xFTik7CisJbWVtc2V0KGVudHJ5LT5tYWNfYWRkciwgMCwgRVRIX0FMRU4pOworCWVudHJ5LT5zdGF0dXMgPSBFU0lfVU5LTk9XTjsKKwlobGlzdF9hZGRfaGVhZCgmZW50cnktPm5leHQsICZwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMpOworCWVudHJ5LT50aW1lci5leHBpcmVzID0gamlmZmllcyArIHByaXYtPnZjY190aW1lb3V0X3BlcmlvZDsKKwllbnRyeS0+dGltZXIuZnVuY3Rpb24gPSBsZWNfYXJwX2V4cGlyZV92Y2M7CisJYWRkX3RpbWVyKCZlbnRyeS0+dGltZXIpOworCURQUklOVEsoIkFmdGVyIHZjYyB3YXMgYWRkZWRcbiIpOwogCWR1bXBfYXJwX3RhYmxlKHByaXYpOwogb3V0OgogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwogfQogCi1zdGF0aWMgdm9pZAotbGVjX2ZsdXNoX2NvbXBsZXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyB0cmFuX2lkKQorc3RhdGljIHZvaWQgbGVjX2ZsdXNoX2NvbXBsZXRlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgdW5zaWduZWQgbG9uZyB0cmFuX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKLSAgICAgICAgaW50IGk7Ci0gIAotICAgICAgICBEUFJJTlRLKCJMRUM6bGVjX2ZsdXNoX2NvbXBsZXRlICVseFxuIix0cmFuX2lkKTsKLQlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgewotICAgICAgICAgICAgICAgIGZvciAoZW50cnkgPSBwcml2LT5sZWNfYXJwX3RhYmxlc1tpXTsgZW50cnk7IGVudHJ5PWVudHJ5LT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmZsdXNoX3RyYW5faWQgPT0gdHJhbl9pZCAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0dXMgPT0gRVNJX0ZMVVNIX1BFTkRJTkcpIHsKLQkJCSAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKKwlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnk7CisJaW50IGk7CiAKLSAJCQkJd2hpbGUgKChza2IgPSBza2JfZGVxdWV1ZSgmZW50cnktPnR4X3dhaXQpKSAhPSBOVUxMKQotCQkJCQlsZWNfc2VuZChlbnRyeS0+dmNjLCBza2IsIGVudHJ5LT5wcml2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRFBSSU5USygiTEVDX0FSUDogRmx1c2hlZFxuIik7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICB9CisJRFBSSU5USygiTEVDOmxlY19mbHVzaF9jb21wbGV0ZSAlbHhcbiIsIHRyYW5faWQpOworcmVzdGFydDoKKwlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CisJZm9yIChpID0gMDsgaSA8IExFQ19BUlBfVEFCTEVfU0laRTsgaSsrKSB7CisJCWhsaXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCBub2RlLCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWlmIChlbnRyeS0+Zmx1c2hfdHJhbl9pZCA9PSB0cmFuX2lkCisJCQkgICAgJiYgZW50cnktPnN0YXR1cyA9PSBFU0lfRkxVU0hfUEVORElORykgeworCQkJCXN0cnVjdCBza19idWZmICpza2I7CisJCQkJc3RydWN0IGF0bV92Y2MgKnZjYyA9IGVudHJ5LT52Y2M7CisKKwkJCQlsZWNfYXJwX2hvbGQoZW50cnkpOworCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOworCQkJCXdoaWxlICgoc2tiID0gc2tiX2RlcXVldWUoJmVudHJ5LT50eF93YWl0KSkgIT0gTlVMTCkKKwkJCQkJbGVjX3NlbmQodmNjLCBza2IsIGVudHJ5LT5wcml2KTsKKwkJCQllbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKKwkJCQllbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOworCQkJCWxlY19hcnBfcHV0KGVudHJ5KTsKKwkJCQlEUFJJTlRLKCJMRUNfQVJQOiBGbHVzaGVkXG4iKTsKKwkJCQlnb3RvIHJlc3RhcnQ7CisJCQl9CisJCX0KKwl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGR1bXBfYXJwX3RhYmxlKHByaXYpOworCWR1bXBfYXJwX3RhYmxlKHByaXYpOwogfQogCiBzdGF0aWMgdm9pZAogbGVjX3NldF9mbHVzaF90cmFuX2lkKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwKLSAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyB0cmFuX2lkKQorCQkgICAgICB1bnNpZ25lZCBjaGFyICphdG1fYWRkciwgdW5zaWduZWQgbG9uZyB0cmFuX2lkKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICplbnRyeTsKLSAgICAgICAgaW50IGk7CisJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCWludCBpOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgTEVDX0FSUF9UQUJMRV9TSVpFOyBpKyspCi0gICAgICAgICAgICAgICAgZm9yKGVudHJ5ID0gcHJpdi0+bGVjX2FycF90YWJsZXNbaV07IGVudHJ5OyBlbnRyeT1lbnRyeS0+bmV4dCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVtY21wKGF0bV9hZGRyLCBlbnRyeS0+YXRtX2FkZHIsIEFUTV9FU0FfTEVOKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+Zmx1c2hfdHJhbl9pZCA9IHRyYW5faWQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERQUklOVEsoIlNldCBmbHVzaCB0cmFuc2FjdGlvbiBpZCB0byAlbHggZm9yICVwXG4iLHRyYW5faWQsZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykKKwkJaGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIG5vZGUsICZwcml2LT5sZWNfYXJwX3RhYmxlc1tpXSwgbmV4dCkgeworCQkJaWYgKCFtZW1jbXAoYXRtX2FkZHIsIGVudHJ5LT5hdG1fYWRkciwgQVRNX0VTQV9MRU4pKSB7CisJCQkJZW50cnktPmZsdXNoX3RyYW5faWQgPSB0cmFuX2lkOworCQkJCURQUklOVEsoIlNldCBmbHVzaCB0cmFuc2FjdGlvbiBpZCB0byAlbHggZm9yICVwXG4iLAorCQkJCSAgICAgICAgdHJhbl9pZCwgZW50cnkpOworCQkJfQorCQl9CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgCi1sZWNfbWNhc3RfbWFrZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHN0cnVjdCBhdG1fdmNjICp2Y2MpCitzdGF0aWMgaW50IGxlY19tY2FzdF9tYWtlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICB1bnNpZ25lZCBjaGFyIG1hY19hZGRyW10gPSB7Ci0gICAgICAgICAgICAgICAgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiB9OwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqdG9fYWRkOworCXVuc2lnbmVkIGNoYXIgbWFjX2FkZHJbXSA9IHsKKwkJMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZiwgMHhmZgorCX07CisJc3RydWN0IGxlY19hcnBfdGFibGUgKnRvX2FkZDsKIAlzdHJ1Y3QgbGVjX3ZjY19wcml2ICp2cHJpdjsKIAlpbnQgZXJyID0gMDsKLSAgCisKIAlpZiAoISh2cHJpdiA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsZWNfdmNjX3ByaXYpLCBHRlBfS0VSTkVMKSkpCiAJCXJldHVybiAtRU5PTUVNOwogCXZwcml2LT54b2ZmID0gMDsKIAl2cHJpdi0+b2xkX3BvcCA9IHZjYy0+cG9wOwogCXZjYy0+dXNlcl9iYWNrID0gdnByaXY7Ci0gICAgICAgIHZjYy0+cG9wID0gbGVjX3BvcDsKKwl2Y2MtPnBvcCA9IGxlY19wb3A7CiAJc3Bpbl9sb2NrX2lycXNhdmUoJnByaXYtPmxlY19hcnBfbG9jaywgZmxhZ3MpOwotICAgICAgICB0b19hZGQgPSBtYWtlX2VudHJ5KHByaXYsIG1hY19hZGRyKTsKLSAgICAgICAgaWYgKCF0b19hZGQpIHsKKwl0b19hZGQgPSBtYWtlX2VudHJ5KHByaXYsIG1hY19hZGRyKTsKKwlpZiAoIXRvX2FkZCkgewogCQl2Y2MtPnBvcCA9IHZwcml2LT5vbGRfcG9wOwogCQlrZnJlZSh2cHJpdik7Ci0gICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsKKwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHRvX2FkZC0+YXRtX2FkZHIsIHZjYy0+cmVtb3RlLnNhc19hZGRyLnBydiwgQVRNX0VTQV9MRU4pOwotICAgICAgICB0b19hZGQtPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKLSAgICAgICAgdG9fYWRkLT5mbGFncyB8PSBMRUNfUEVSTUFORU5UX0ZMQUc7Ci0gICAgICAgIHRvX2FkZC0+dmNjID0gdmNjOwotICAgICAgICB0b19hZGQtPm9sZF9wdXNoID0gdmNjLT5wdXNoOwotICAgICAgICB2Y2MtPnB1c2ggPSBsZWNfcHVzaDsKLSAgICAgICAgcHJpdi0+bWNhc3RfdmNjID0gdmNjOwotICAgICAgICBsZWNfYXJwX2FkZChwcml2LCB0b19hZGQpOworCX0KKwltZW1jcHkodG9fYWRkLT5hdG1fYWRkciwgdmNjLT5yZW1vdGUuc2FzX2FkZHIucHJ2LCBBVE1fRVNBX0xFTik7CisJdG9fYWRkLT5zdGF0dXMgPSBFU0lfRk9SV0FSRF9ESVJFQ1Q7CisJdG9fYWRkLT5mbGFncyB8PSBMRUNfUEVSTUFORU5UX0ZMQUc7CisJdG9fYWRkLT52Y2MgPSB2Y2M7CisJdG9fYWRkLT5vbGRfcHVzaCA9IHZjYy0+cHVzaDsKKwl2Y2MtPnB1c2ggPSBsZWNfcHVzaDsKKwlwcml2LT5tY2FzdF92Y2MgPSB2Y2M7CisJbGVjX2FycF9hZGQocHJpdiwgdG9fYWRkKTsKIG91dDoKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgcmV0dXJuIGVycjsKKwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgdm9pZAotbGVjX3ZjY19jbG9zZShzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsIHN0cnVjdCBhdG1fdmNjICp2Y2MpCitzdGF0aWMgdm9pZCBsZWNfdmNjX2Nsb3NlKHN0cnVjdCBsZWNfcHJpdiAqcHJpdiwgc3RydWN0IGF0bV92Y2MgKnZjYykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnksICpuZXh0OwotICAgICAgICBpbnQgaTsKKwlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZSwgKm5leHQ7CisJc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5OworCWludCBpOwogCi0gICAgICAgIERQUklOVEsoIkxFQ19BUlA6IGxlY192Y2NfY2xvc2UgdnBpOiVkIHZjaTolZFxuIix2Y2MtPnZwaSx2Y2MtPnZjaSk7Ci0gICAgICAgIGR1bXBfYXJwX3RhYmxlKHByaXYpOworCURQUklOVEsoIkxFQ19BUlA6IGxlY192Y2NfY2xvc2UgdnBpOiVkIHZjaTolZFxuIiwgdmNjLT52cGksIHZjYy0+dmNpKTsKKwlkdW1wX2FycF90YWJsZShwcml2KTsKKwogCXNwaW5fbG9ja19pcnFzYXZlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKLSAgICAgICAgZm9yKGk9MDtpPExFQ19BUlBfVEFCTEVfU0laRTtpKyspIHsKLSAgICAgICAgICAgICAgICBmb3IoZW50cnkgPSBwcml2LT5sZWNfYXJwX3RhYmxlc1tpXTtlbnRyeTsgZW50cnk9bmV4dCkgewotICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGVudHJ5LT5uZXh0OwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZjYyA9PSBlbnRyeS0+dmNjKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJpdi0+bWNhc3RfdmNjID09IHZjYykgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1jYXN0X3ZjYyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KIAotICAgICAgICBlbnRyeSA9IHByaXYtPmxlY19hcnBfZW1wdHlfb25lczsKLSAgICAgICAgcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzID0gTlVMTDsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LT52Y2MgPT0gdmNjKSB7IC8qIGxlYXZlIGl0IG91dCBmcm9tIHRoZSBsaXN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX2NsZWFyX3ZjY3MoZW50cnkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZGVsX3RpbWVyKCZlbnRyeS0+dGltZXIpOwotICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAgIC8qIHB1dCBpdCBiYWNrIHRvIHRoZSBsaXN0ICovCi0gICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmV4dCA9IHByaXYtPmxlY19hcnBfZW1wdHlfb25lczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmxlY19hcnBfZW1wdHlfb25lcyA9IGVudHJ5OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbnRyeSA9IG5leHQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGVudHJ5ID0gcHJpdi0+bGVjX25vX2ZvcndhcmQ7Ci0gICAgICAgIHByaXYtPmxlY19ub19mb3J3YXJkID0gTlVMTDsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5yZWN2X3ZjYyA9PSB2Y2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBrZnJlZShlbnRyeSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm5leHQgPSBwcml2LT5sZWNfbm9fZm9yd2FyZDsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPmxlY19ub19mb3J3YXJkID0gZW50cnk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGVudHJ5ID0gbmV4dDsKLSAgICAgICAgfQorCWZvciAoaSA9IDA7IGkgPCBMRUNfQVJQX1RBQkxFX1NJWkU7IGkrKykgeworCQlobGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGVudHJ5LCBub2RlLCBuZXh0LCAmcHJpdi0+bGVjX2FycF90YWJsZXNbaV0sIG5leHQpIHsKKwkJCWlmICh2Y2MgPT0gZW50cnktPnZjYykgeworCQkJCWxlY19hcnBfcmVtb3ZlKHByaXYsIGVudHJ5KTsKKwkJCQlsZWNfYXJwX3B1dChlbnRyeSk7CisJCQkJaWYgKHByaXYtPm1jYXN0X3ZjYyA9PSB2Y2MpIHsKKwkJCQkJcHJpdi0+bWNhc3RfdmNjID0gTlVMTDsKKwkJCQl9CisJCQl9CisJCX0KKwl9CiAKLSAgICAgICAgZW50cnkgPSBwcml2LT5tY2FzdF9md2RzOwotICAgICAgICBwcml2LT5tY2FzdF9md2RzID0gTlVMTDsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBuZXh0ID0gZW50cnktPm5leHQ7Ci0gICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5yZWN2X3ZjYyA9PSB2Y2MpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvKiBObyB0aW1lciwgTEFORXYyIDcuMS4yMCBhbmQgMi4zLjUuMyAqLwotICAgICAgICAgICAgICAgICAgICAgICAga2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5uZXh0ID0gcHJpdi0+bWNhc3RfZndkczsKLSAgICAgICAgICAgICAgICAgICAgICAgIHByaXYtPm1jYXN0X2Z3ZHMgPSBlbnRyeTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBuZXh0OwotICAgICAgICB9CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgeworCQlpZiAoZW50cnktPnZjYyA9PSB2Y2MpIHsKKwkJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CisJCQlkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7CisJCQlobGlzdF9kZWwoJmVudHJ5LT5uZXh0KTsKKwkJCWxlY19hcnBfcHV0KGVudHJ5KTsKKwkJfQorCX0KKworCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5vZGUsIG5leHQsICZwcml2LT5sZWNfbm9fZm9yd2FyZCwgbmV4dCkgeworCQlpZiAoZW50cnktPnJlY3ZfdmNjID09IHZjYykgeworCQkJbGVjX2FycF9jbGVhcl92Y2NzKGVudHJ5KTsKKwkJCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKKwkJCWhsaXN0X2RlbCgmZW50cnktPm5leHQpOworCQkJbGVjX2FycF9wdXQoZW50cnkpOworCQl9CisJfQorCisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPm1jYXN0X2Z3ZHMsIG5leHQpIHsKKwkJaWYgKGVudHJ5LT5yZWN2X3ZjYyA9PSB2Y2MpIHsKKwkJCWxlY19hcnBfY2xlYXJfdmNjcyhlbnRyeSk7CisJCQkvKiBObyB0aW1lciwgTEFORXYyIDcuMS4yMCBhbmQgMi4zLjUuMyAqLworCQkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CisJCQlsZWNfYXJwX3B1dChlbnRyeSk7CisJCX0KKwl9CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZwcml2LT5sZWNfYXJwX2xvY2ssIGZsYWdzKTsKIAlkdW1wX2FycF90YWJsZShwcml2KTsKQEAgLTI1MTcsNTcgKzI0ODMsNDIgQEAKIAogc3RhdGljIHZvaWQKIGxlY19hcnBfY2hlY2tfZW1wdGllcyhzdHJ1Y3QgbGVjX3ByaXYgKnByaXYsCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKKwkJICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKLSAgICAgICAgc3RydWN0IGxlY19hcnBfdGFibGUgKmVudHJ5LCAqcHJldjsKLSAgICAgICAgc3RydWN0IGxlY2RhdGFoZHJfODAyMyAqaGRyID0gKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjMgKilza2ItPmRhdGE7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgKnNyYzsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCBobGlzdF9ub2RlICpub2RlLCAqbmV4dDsKKwlzdHJ1Y3QgbGVjX2FycF90YWJsZSAqZW50cnksICp0bXA7CisJc3RydWN0IGxlY2RhdGFoZHJfODAyMyAqaGRyID0gKHN0cnVjdCBsZWNkYXRhaGRyXzgwMjMgKilza2ItPmRhdGE7CisJdW5zaWduZWQgY2hhciAqc3JjOwogI2lmZGVmIENPTkZJR19UUgotICAgICAgICBzdHJ1Y3QgbGVjZGF0YWhkcl84MDI1ICp0cl9oZHIgPSAoc3RydWN0IGxlY2RhdGFoZHJfODAyNSAqKXNrYi0+ZGF0YTsKKwlzdHJ1Y3QgbGVjZGF0YWhkcl84MDI1ICp0cl9oZHIgPSAoc3RydWN0IGxlY2RhdGFoZHJfODAyNSAqKXNrYi0+ZGF0YTsKIAotICAgICAgICBpZiAocHJpdi0+aXNfdHJkZXYpIHNyYyA9IHRyX2hkci0+aF9zb3VyY2U7Ci0gICAgICAgIGVsc2UKKwlpZiAocHJpdi0+aXNfdHJkZXYpCisJCXNyYyA9IHRyX2hkci0+aF9zb3VyY2U7CisJZWxzZQogI2VuZGlmCi0gICAgICAgIHNyYyA9IGhkci0+aF9zb3VyY2U7CisJCXNyYyA9IGhkci0+aF9zb3VyY2U7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7Ci0gICAgICAgIGVudHJ5ID0gcHJpdi0+bGVjX2FycF9lbXB0eV9vbmVzOwotICAgICAgICBpZiAodmNjID09IGVudHJ5LT52Y2MpIHsKLSAgICAgICAgICAgICAgICBkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5tYWNfYWRkciwgc3JjLCBFVEhfQUxFTik7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKLSAgICAgICAgICAgICAgICBlbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKLSAgICAgICAgICAgICAgICBwcml2LT5sZWNfYXJwX2VtcHR5X29uZXMgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgICAgICAgICAvKiBXZSBtaWdodCBoYXZlIGdvdCBhbiBlbnRyeSAqLwotICAgICAgICAgICAgICAgIGlmICgocHJldiA9IGxlY19hcnBfZmluZChwcml2LHNyYykpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBsZWNfYXJwX3JlbW92ZShwcml2LCBwcmV2KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGtmcmVlKHByZXYpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7Ci0JCWdvdG8gb3V0OwotICAgICAgICB9Ci0gICAgICAgIHByZXYgPSBlbnRyeTsKLSAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgd2hpbGUgKGVudHJ5ICYmIGVudHJ5LT52Y2MgIT0gdmNjKSB7Ci0gICAgICAgICAgICAgICAgcHJldj0gZW50cnk7Ci0gICAgICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICBpZiAoIWVudHJ5KSB7Ci0gICAgICAgICAgICAgICAgRFBSSU5USygiTEVDX0FSUDogQXJwX2NoZWNrX2VtcHRpZXM6IGVudHJ5IG5vdCBmb3VuZCFcbiIpOwotCQlnb3RvIG91dDsKLSAgICAgICAgfQotICAgICAgICBkZWxfdGltZXIoJmVudHJ5LT50aW1lcik7Ci0gICAgICAgIG1lbWNweShlbnRyeS0+bWFjX2FkZHIsIHNyYywgRVRIX0FMRU4pOwotICAgICAgICBlbnRyeS0+c3RhdHVzID0gRVNJX0ZPUldBUkRfRElSRUNUOwotICAgICAgICBlbnRyeS0+bGFzdF91c2VkID0gamlmZmllczsKLSAgICAgICAgcHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OwotICAgICAgICBpZiAoKHByZXYgPSBsZWNfYXJwX2ZpbmQocHJpdiwgc3JjKSkpIHsKLSAgICAgICAgICAgICAgICBsZWNfYXJwX3JlbW92ZShwcml2LCBwcmV2KTsKLSAgICAgICAgICAgICAgICBrZnJlZShwcmV2KTsKLSAgICAgICAgfQotICAgICAgICBsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7CisJaGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShlbnRyeSwgbm9kZSwgbmV4dCwgJnByaXYtPmxlY19hcnBfZW1wdHlfb25lcywgbmV4dCkgeworCQlpZiAodmNjID09IGVudHJ5LT52Y2MpIHsKKwkJCWRlbF90aW1lcigmZW50cnktPnRpbWVyKTsKKwkJCW1lbWNweShlbnRyeS0+bWFjX2FkZHIsIHNyYywgRVRIX0FMRU4pOworCQkJZW50cnktPnN0YXR1cyA9IEVTSV9GT1JXQVJEX0RJUkVDVDsKKwkJCWVudHJ5LT5sYXN0X3VzZWQgPSBqaWZmaWVzOworCQkJLyogV2UgbWlnaHQgaGF2ZSBnb3QgYW4gZW50cnkgKi8KKwkJCWlmICgodG1wID0gbGVjX2FycF9maW5kKHByaXYsIHNyYykpKSB7CisJCQkJbGVjX2FycF9yZW1vdmUocHJpdiwgdG1wKTsKKwkJCQlsZWNfYXJwX3B1dCh0bXApOworCQkJfQorCQkJaGxpc3RfZGVsKCZlbnRyeS0+bmV4dCk7CisJCQlsZWNfYXJwX2FkZChwcml2LCBlbnRyeSk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKwlEUFJJTlRLKCJMRUNfQVJQOiBBcnBfY2hlY2tfZW1wdGllczogZW50cnkgbm90IGZvdW5kIVxuIik7CiBvdXQ6CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcHJpdi0+bGVjX2FycF9sb2NrLCBmbGFncyk7CiB9CisKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbGVjLmggYi9uZXQvYXRtL2xlYy5oCmluZGV4IGMyMmE4YmYuLjhhYzZiNzMgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbGVjLmgKKysrIGIvbmV0L2F0bS9sZWMuaApAQCAtMSwxNCArMSwxMyBAQAogLyoKLSAqCiAgKiBMYW4gRW11bGF0aW9uIGNsaWVudCBoZWFkZXIgZmlsZQogICoKLSAqIE1hcmtvIEtpaXNraWxhIG1raWlza2lsYUB5YWhvby5jb20KLSAqCisgKiBNYXJrbyBLaWlza2lsYSA8bWtpaXNraWxhQHlhaG9vLmNvbT4KICAqLwogCiAjaWZuZGVmIF9MRUNfSF8KICNkZWZpbmUgX0xFQ19IXwogCisjaW5jbHVkZSA8bGludXgvY29uZmlnLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtZGV2Lmg+CiAjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvYXRtbGVjLmg+CkBAIC0xNiwxOCArMTUsMTggQEAKICNkZWZpbmUgTEVDX0hFQURFUl9MRU4gMTYKIAogc3RydWN0IGxlY2RhdGFoZHJfODAyMyB7Ci0gIHVuc2lnbmVkIHNob3J0IGxlX2hlYWRlcjsKLSAgdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOwotICB1bnNpZ25lZCBjaGFyIGhfc291cmNlW0VUSF9BTEVOXTsKLSAgdW5zaWduZWQgc2hvcnQgaF90eXBlOworCXVuc2lnbmVkIHNob3J0IGxlX2hlYWRlcjsKKwl1bnNpZ25lZCBjaGFyIGhfZGVzdFtFVEhfQUxFTl07CisJdW5zaWduZWQgY2hhciBoX3NvdXJjZVtFVEhfQUxFTl07CisJdW5zaWduZWQgc2hvcnQgaF90eXBlOwogfTsKIAogc3RydWN0IGxlY2RhdGFoZHJfODAyNSB7Ci0gIHVuc2lnbmVkIHNob3J0IGxlX2hlYWRlcjsKLSAgdW5zaWduZWQgY2hhciBhY19wYWQ7Ci0gIHVuc2lnbmVkIGNoYXIgZmM7Ci0gIHVuc2lnbmVkIGNoYXIgaF9kZXN0W0VUSF9BTEVOXTsKLSAgdW5zaWduZWQgY2hhciBoX3NvdXJjZVtFVEhfQUxFTl07CisJdW5zaWduZWQgc2hvcnQgbGVfaGVhZGVyOworCXVuc2lnbmVkIGNoYXIgYWNfcGFkOworCXVuc2lnbmVkIGNoYXIgZmM7CisJdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOworCXVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOwogfTsKIAogI2RlZmluZSBMRUNfTUlOSU1VTV84MDIzX1NJWkUgICA2MgpAQCAtNDQsMTcgKzQzLDE4IEBACiAgKgogICovCiBzdHJ1Y3QgbGFuZTJfb3BzIHsKLQlpbnQgICgqcmVzb2x2ZSkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHU4ICoqdGx2cywgdTMyICpzaXplb2Z0bHZzKTsKLSAgICAgICAgaW50ICAoKmFzc29jaWF0ZV9yZXEpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHU4ICpsYW5fZHN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKLQl2b2lkICgqYXNzb2NpYXRlX2luZGljYXRvcikoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hY19hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKKwlpbnQgKCpyZXNvbHZlKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmRzdF9tYWMsIGludCBmb3JjZSwKKwkJCXU4ICoqdGx2cywgdTMyICpzaXplb2Z0bHZzKTsKKwlpbnQgKCphc3NvY2lhdGVfcmVxKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKmxhbl9kc3QsCisJCQkgICAgICB1OCAqdGx2cywgdTMyIHNpemVvZnRsdnMpOworCXZvaWQgKCphc3NvY2lhdGVfaW5kaWNhdG9yKSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTggKm1hY19hZGRyLAorCQkJCSAgICAgdTggKnRsdnMsIHUzMiBzaXplb2Z0bHZzKTsKIH07CiAKIC8qCiAgKiBBVE0gTEFOIEVtdWxhdGlvbiBzdXBwb3J0cyBib3RoIExMQyAmIERpeCBFdGhlcm5ldCBFdGhlclR5cGUKICAqIGZyYW1lcy4gCisgKgogICogMS4gRGl4IEV0aGVybmV0IEV0aGVyVHlwZSBmcmFtZXMgZW5jb2RlZCBieSBwbGFjaW5nIEV0aGVyVHlwZQogICogICAgZmllbGQgaW4gaF90eXBlIGZpZWxkLiBEYXRhIGZvbGxvd3MgaW1tZWRpYXRlbGx5IGFmdGVyIGhlYWRlci4KICAqIDIuIExMQyBEYXRhIGZyYW1lcyB3aG9zZSB0b3RhbCBsZW5ndGgsIGluY2x1ZGluZyBMTEMgZmllbGQgYW5kIGRhdGEsCkBAIC03MCw3MiArNzAsODggQEAKICNkZWZpbmUgTEVDX0FSUF9UQUJMRV9TSVpFIDE2CiAKIHN0cnVjdCBsZWNfcHJpdiB7Ci0gICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIHN0YXRzOwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBsZWNpZDsgICAgICAvKiBMZWNpZCBvZiB0aGlzIGNsaWVudCAqLwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF9lbXB0eV9vbmVzOwotICAgICAgICAvKiBVc2VkIGZvciBzdG9yaW5nIFZDQydzIHRoYXQgZG9uJ3QgaGF2ZSBhIE1BQyBhZGRyZXNzIGF0dGFjaGVkIHlldCAqLwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX2FycF90YWJsZXNbTEVDX0FSUF9UQUJMRV9TSVpFXTsKLSAgICAgICAgLyogQWN0dWFsIExFIEFSUCB0YWJsZSAqLwotICAgICAgICBzdHJ1Y3QgbGVjX2FycF90YWJsZSAqbGVjX25vX2ZvcndhcmQ7Ci0gICAgICAgIC8qIFVzZWQgZm9yIHN0b3JpbmcgVkNDJ3MgKGFuZCBmb3J3YXJkIHBhY2tldHMgZnJvbSkgd2hpY2ggYXJlIHRvCi0gICAgICAgICAgIGFnZSBvdXQgYnkgbm90IHVzaW5nIHRoZW0gdG8gZm9yd2FyZCBwYWNrZXRzLiAKLSAgICAgICAgICAgVGhpcyBpcyBiZWNhdXNlIHRvIHNvbWUgTEUgY2xpZW50cyB0aGVyZSB3aWxsIGJlIDIgVkNDcy4gT25seQotICAgICAgICAgICBvbmUgb2YgdGhlbSBnZXRzIHVzZWQuICovCi0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICptY2FzdF9md2RzOwotICAgICAgICAvKiBXaXRoIExBTkV2MiBpdCBpcyBwb3NzaWJsZSB0aGF0IEJVUyAob3IgYSBzcGVjaWFsIG11bHRpY2FzdCBzZXJ2ZXIpCi0gICAgICAgICAgIGVzdGFibGlzaGVzIG11bHRpcGxlIE11bHRpY2FzdCBGb3J3YXJkIFZDQ3MgdG8gdXMuIFRoaXMgbGlzdAotICAgICAgICAgICBjb2xsZWN0cyBhbGwgdGhvc2UgVkNDcy4gTEFORXYxIGNsaWVudCBoYXMgb25seSBvbmUgaXRlbSBpbiB0aGlzCi0gICAgICAgICAgIGxpc3QuIFRoZXNlIGVudHJpZXMgYXJlIG5vdCBhZ2VkIG91dC4gKi8KLSAgICAgICAgc3BpbmxvY2tfdCBsZWNfYXJwX2xvY2s7Ci0gICAgICAgIHN0cnVjdCBhdG1fdmNjICptY2FzdF92Y2M7IC8qIERlZmF1bHQgTXVsdGljYXN0IFNlbmQgVkNDICovCi0gICAgICAgIHN0cnVjdCBhdG1fdmNjICpsZWNkOwotICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCBsZWNfYXJwX3RpbWVyOwotICAgICAgICAvKiBDMTAgKi8KLSAgICAgICAgdW5zaWduZWQgaW50IG1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudDsKLS8qIFdpdGhpbiB0aGUgcGVyaW9kIG9mIHRpbWUgZGVmaW5lZCBieSB0aGlzIHZhcmlhYmxlLCB0aGUgY2xpZW50IHdpbGwgc2VuZCAKLSAgIG5vIG1vcmUgdGhhbiBDMTAgZnJhbWVzIHRvIEJVUyBmb3IgYSBnaXZlbiB1bmljYXN0IGRlc3RpbmF0aW9uLiAoQzExKSAqLwotICAgICAgICB1bnNpZ25lZCBsb25nIG1heF91bmtub3duX2ZyYW1lX3RpbWU7Ci0vKiBJZiBubyB0cmFmZmljIGhhcyBiZWVuIHNlbnQgaW4gdGhpcyB2Y2MgZm9yIHRoaXMgcGVyaW9kIG9mIHRpbWUsCi0gICB2Y2Mgd2lsbCBiZSB0b3JuIGRvd24gKEMxMikqLwotICAgICAgICB1bnNpZ25lZCBsb25nIHZjY190aW1lb3V0X3BlcmlvZDsKLS8qIEFuIExFIENsaWVudCBNVVNUIG5vdCByZXRyeSBhbiBMRV9BUlBfUkVRVUVTVCBmb3IgYSAKLSAgIGdpdmVuIGZyYW1lJ3MgTEFOIERlc3RpbmF0aW9uIG1vcmUgdGhhbiBtYXhpbXVtIHJldHJ5IGNvdW50IHRpbWVzLAotICAgYWZ0ZXIgdGhlIGZpcnN0IExFQ19BUlBfUkVRVUVTVCAoQzEzKSovCi0gICAgICAgIHVuc2lnbmVkIHNob3J0IG1heF9yZXRyeV9jb3VudDsKLS8qIE1heCB0aW1lIHRoZSBjbGllbnQgd2lsbCBtYWludGFpbiBhbiBlbnRyeSBpbiBpdHMgYXJwIGNhY2hlIGluCi0gICBhYnNlbmNlIG9mIGEgdmVyaWZpY2F0aW9uIG9mIHRoYXQgcmVsYXRpb25zaGlwIChDMTcpKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBhZ2luZ190aW1lOwotLyogTWF4IHRpbWUgdGhlIGNsaWVudCB3aWxsIG1haW50YWluIGFuIGVudHJ5IGluIGNhY2hlIHdoZW4KLSAgIHRvcG9sb2d5IGNoYW5nZSBmbGFnIGlzIHRydWUgKEMxOCkgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBmb3J3YXJkX2RlbGF5X3RpbWU7Ci0vKiBUb3BvbG9neSBjaGFuZ2UgZmxhZyAgKEMxOSkqLwotICAgICAgICBpbnQgdG9wb2xvZ3lfY2hhbmdlOwotLyogTWF4IHRpbWUgdGhlIGNsaWVudCBleHBlY3RzIGFuIExFX0FSUF9SRVFVRVNUL0xFX0FSUF9SRVNQT05TRQotICAgY3ljbGUgdG8gdGFrZSAoQzIwKSovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgYXJwX3Jlc3BvbnNlX3RpbWU7Ci0vKiBUaW1lIGxpbWl0IG90IHdhaXQgdG8gcmVjZWl2ZSBhbiBMRV9GTFVTSF9SRVNQT05TRSBhZnRlciB0aGUKLSAgIExFX0ZMVVNIX1JFUVVFU1QgaGFzIGJlZW4gc2VudCBiZWZvcmUgdGFraW5nIHJlY292ZXIgYWN0aW9uLiAoQzIxKSovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmx1c2hfdGltZW91dDsKLS8qIFRoZSB0aW1lIHNpbmNlIHNlbmRpbmcgYSBmcmFtZSB0byB0aGUgYnVzIGFmdGVyIHdoaWNoIHRoZQotICAgTEUgQ2xpZW50IG1heSBhc3N1bWUgdGhhdCB0aGUgZnJhbWUgaGFzIGJlZW4gZWl0aGVyIGRpc2NhcmRlZCBvcgotICAgZGVsaXZlcmVkIHRvIHRoZSByZWNpcGllbnQgKEMyMikgKi8KLSAgICAgICAgdW5zaWduZWQgbG9uZyBwYXRoX3N3aXRjaGluZ19kZWxheTsKKwlzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cyBzdGF0czsKKwl1bnNpZ25lZCBzaG9ydCBsZWNpZDsJCQkvKiBMZWNpZCBvZiB0aGlzIGNsaWVudCAqLworCXN0cnVjdCBobGlzdF9oZWFkIGxlY19hcnBfZW1wdHlfb25lczsKKwkJCQkJCS8qIFVzZWQgZm9yIHN0b3JpbmcgVkNDJ3MgdGhhdCBkb24ndCBoYXZlIGEgTUFDIGFkZHJlc3MgYXR0YWNoZWQgeWV0ICovCisJc3RydWN0IGhsaXN0X2hlYWQgbGVjX2FycF90YWJsZXNbTEVDX0FSUF9UQUJMRV9TSVpFXTsKKwkJCQkJCS8qIEFjdHVhbCBMRSBBUlAgdGFibGUgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBsZWNfbm9fZm9yd2FyZDsKKwkJCQkJCS8qCisJCQkJCQkgKiBVc2VkIGZvciBzdG9yaW5nIFZDQydzIChhbmQgZm9yd2FyZCBwYWNrZXRzIGZyb20pIHdoaWNoIGFyZSB0bworCQkJCQkJICogYWdlIG91dCBieSBub3QgdXNpbmcgdGhlbSB0byBmb3J3YXJkIHBhY2tldHMuCisJCQkJCQkgKiBUaGlzIGlzIGJlY2F1c2UgdG8gc29tZSBMRSBjbGllbnRzIHRoZXJlIHdpbGwgYmUgMiBWQ0NzLiBPbmx5CisJCQkJCQkgKiBvbmUgb2YgdGhlbSBnZXRzIHVzZWQuCisJCQkJCQkgKi8KKwlzdHJ1Y3QgaGxpc3RfaGVhZCBtY2FzdF9md2RzOworCQkJCQkJLyoKKwkJCQkJCSAqIFdpdGggTEFORXYyIGl0IGlzIHBvc3NpYmxlIHRoYXQgQlVTIChvciBhIHNwZWNpYWwgbXVsdGljYXN0IHNlcnZlcikKKwkJCQkJCSAqIGVzdGFibGlzaGVzIG11bHRpcGxlIE11bHRpY2FzdCBGb3J3YXJkIFZDQ3MgdG8gdXMuIFRoaXMgbGlzdAorCQkJCQkJICogY29sbGVjdHMgYWxsIHRob3NlIFZDQ3MuIExBTkV2MSBjbGllbnQgaGFzIG9ubHkgb25lIGl0ZW0gaW4gdGhpcworCQkJCQkJICogbGlzdC4gVGhlc2UgZW50cmllcyBhcmUgbm90IGFnZWQgb3V0LgorCQkJCQkJICovCisJc3BpbmxvY2tfdCBsZWNfYXJwX2xvY2s7CisJc3RydWN0IGF0bV92Y2MgKm1jYXN0X3ZjYzsJCS8qIERlZmF1bHQgTXVsdGljYXN0IFNlbmQgVkNDICovCisJc3RydWN0IGF0bV92Y2MgKmxlY2Q7CisJc3RydWN0IHdvcmtfc3RydWN0IGxlY19hcnBfd29yazsJLyogQzEwICovCisJdW5zaWduZWQgaW50IG1heGltdW1fdW5rbm93bl9mcmFtZV9jb3VudDsKKwkJCQkJCS8qCisJCQkJCQkgKiBXaXRoaW4gdGhlIHBlcmlvZCBvZiB0aW1lIGRlZmluZWQgYnkgdGhpcyB2YXJpYWJsZSwgdGhlIGNsaWVudCB3aWxsIHNlbmQKKwkJCQkJCSAqIG5vIG1vcmUgdGhhbiBDMTAgZnJhbWVzIHRvIEJVUyBmb3IgYSBnaXZlbiB1bmljYXN0IGRlc3RpbmF0aW9uLiAoQzExKQorCQkJCQkJICovCisJdW5zaWduZWQgbG9uZyBtYXhfdW5rbm93bl9mcmFtZV90aW1lOworCQkJCQkJLyoKKwkJCQkJCSAqIElmIG5vIHRyYWZmaWMgaGFzIGJlZW4gc2VudCBpbiB0aGlzIHZjYyBmb3IgdGhpcyBwZXJpb2Qgb2YgdGltZSwKKwkJCQkJCSAqIHZjYyB3aWxsIGJlIHRvcm4gZG93biAoQzEyKQorCQkJCQkJICovCisJdW5zaWduZWQgbG9uZyB2Y2NfdGltZW91dF9wZXJpb2Q7CisJCQkJCQkvKgorCQkJCQkJICogQW4gTEUgQ2xpZW50IE1VU1Qgbm90IHJldHJ5IGFuIExFX0FSUF9SRVFVRVNUIGZvciBhCisJCQkJCQkgKiBnaXZlbiBmcmFtZSdzIExBTiBEZXN0aW5hdGlvbiBtb3JlIHRoYW4gbWF4aW11bSByZXRyeSBjb3VudCB0aW1lcywKKwkJCQkJCSAqIGFmdGVyIHRoZSBmaXJzdCBMRUNfQVJQX1JFUVVFU1QgKEMxMykKKwkJCQkJCSAqLworCXVuc2lnbmVkIHNob3J0IG1heF9yZXRyeV9jb3VudDsKKwkJCQkJCS8qCisJCQkJCQkgKiBNYXggdGltZSB0aGUgY2xpZW50IHdpbGwgbWFpbnRhaW4gYW4gZW50cnkgaW4gaXRzIGFycCBjYWNoZSBpbgorCQkJCQkJICogYWJzZW5jZSBvZiBhIHZlcmlmaWNhdGlvbiBvZiB0aGF0IHJlbGF0aW9uc2hpcCAoQzE3KQorCQkJCQkJICovCisJdW5zaWduZWQgbG9uZyBhZ2luZ190aW1lOworCQkJCQkJLyoKKwkJCQkJCSAqIE1heCB0aW1lIHRoZSBjbGllbnQgd2lsbCBtYWludGFpbiBhbiBlbnRyeSBpbiBjYWNoZSB3aGVuCisJCQkJCQkgKiB0b3BvbG9neSBjaGFuZ2UgZmxhZyBpcyB0cnVlIChDMTgpCisJCQkJCQkgKi8KKwl1bnNpZ25lZCBsb25nIGZvcndhcmRfZGVsYXlfdGltZTsJLyogVG9wb2xvZ3kgY2hhbmdlIGZsYWcgKEMxOSkgKi8KKwlpbnQgdG9wb2xvZ3lfY2hhbmdlOworCQkJCQkJLyoKKwkJCQkJCSAqIE1heCB0aW1lIHRoZSBjbGllbnQgZXhwZWN0cyBhbiBMRV9BUlBfUkVRVUVTVC9MRV9BUlBfUkVTUE9OU0UKKwkJCQkJCSAqIGN5Y2xlIHRvIHRha2UgKEMyMCkKKwkJCQkJCSAqLworCXVuc2lnbmVkIGxvbmcgYXJwX3Jlc3BvbnNlX3RpbWU7CisJCQkJCQkvKgorCQkJCQkJICogVGltZSBsaW1pdCBvdCB3YWl0IHRvIHJlY2VpdmUgYW4gTEVfRkxVU0hfUkVTUE9OU0UgYWZ0ZXIgdGhlCisJCQkJCQkgKiBMRV9GTFVTSF9SRVFVRVNUIGhhcyBiZWVuIHNlbnQgYmVmb3JlIHRha2luZyByZWNvdmVyIGFjdGlvbi4gKEMyMSkKKwkJCQkJCSAqLworCXVuc2lnbmVkIGxvbmcgZmx1c2hfdGltZW91dDsKKwkJCQkJCS8qIFRoZSB0aW1lIHNpbmNlIHNlbmRpbmcgYSBmcmFtZSB0byB0aGUgYnVzIGFmdGVyIHdoaWNoIHRoZQorCQkJCQkJICogTEUgQ2xpZW50IG1heSBhc3N1bWUgdGhhdCB0aGUgZnJhbWUgaGFzIGJlZW4gZWl0aGVyIGRpc2NhcmRlZCBvcgorCQkJCQkJICogZGVsaXZlcmVkIHRvIHRoZSByZWNpcGllbnQgKEMyMikKKwkJCQkJCSAqLworCXVuc2lnbmVkIGxvbmcgcGF0aF9zd2l0Y2hpbmdfZGVsYXk7CiAKLSAgICAgICAgdTggKnRsdnM7ICAgICAgICAgIC8qIExBTkUyOiBUTFZzIGFyZSBuZXcgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgdTMyIHNpemVvZnRsdnM7ICAgIC8qIFRoZSBzaXplIG9mIHRoZSB0bHYgYXJyYXkgaW4gYnl0ZXMgKi8KLSAgICAgICAgaW50IGxhbmVfdmVyc2lvbjsgIC8qIExBTkUyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLQlpbnQgaXRmbnVtOyAgICAgICAgLyogZS5nLiAyIGZvciBsZWMyLCA1IGZvciBsZWM1ICAgICAgICAqLwotICAgICAgICBzdHJ1Y3QgbGFuZTJfb3BzICpsYW5lMl9vcHM7IC8qIGNhbiBiZSBOVUxMIGZvciBMQU5FIHYxICAqLwotICAgICAgICBpbnQgaXNfcHJveHk7ICAgICAgLyogYnJpZGdlIGJldHdlZW4gQVRNIGFuZCBFdGhlcm5ldCAgICAqLwotICAgICAgICBpbnQgaXNfdHJkZXY7ICAgICAgLyogRGV2aWNlIHR5cGUsIDAgPSBFdGhlcm5ldCwgMSA9IFRva2VuUmluZyAqLworCXU4ICp0bHZzOwkJCQkvKiBMQU5FMjogVExWcyBhcmUgbmV3ICovCisJdTMyIHNpemVvZnRsdnM7CQkJCS8qIFRoZSBzaXplIG9mIHRoZSB0bHYgYXJyYXkgaW4gYnl0ZXMgKi8KKwlpbnQgbGFuZV92ZXJzaW9uOwkJCS8qIExBTkUyICovCisJaW50IGl0Zm51bTsJCQkJLyogZS5nLiAyIGZvciBsZWMyLCA1IGZvciBsZWM1ICovCisJc3RydWN0IGxhbmUyX29wcyAqbGFuZTJfb3BzOwkJLyogY2FuIGJlIE5VTEwgZm9yIExBTkUgdjEgKi8KKwlpbnQgaXNfcHJveHk7CQkJCS8qIGJyaWRnZSBiZXR3ZWVuIEFUTSBhbmQgRXRoZXJuZXQgKi8KKwlpbnQgaXNfdHJkZXY7CQkJCS8qIERldmljZSB0eXBlLCAwID0gRXRoZXJuZXQsIDEgPSBUb2tlblJpbmcgKi8KIH07CiAKIHN0cnVjdCBsZWNfdmNjX3ByaXYgewotCXZvaWQgKCpvbGRfcG9wKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwl2b2lkICgqb2xkX3BvcCkgKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwogCWludCB4b2ZmOwogfTsKIAogI2RlZmluZSBMRUNfVkNDX1BSSVYodmNjKQkoKHN0cnVjdCBsZWNfdmNjX3ByaXYgKikoKHZjYyktPnVzZXJfYmFjaykpCiAKLSNlbmRpZiAvKiBfTEVDX0hfICovCi0KKyNlbmRpZgkJCQkvKiBfTEVDX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL2xlY19hcnBjLmggYi9uZXQvYXRtL2xlY19hcnBjLmgKaW5kZXggMzk3NDQ4MC4uZWM2NzQzNSAxMDA2NDQKLS0tIGEvbmV0L2F0bS9sZWNfYXJwYy5oCisrKyBiL25ldC9hdG0vbGVjX2FycGMuaApAQCAtMSw5MiArMSw5NiBAQAogLyoKICAqIExlYyBhcnAgY2FjaGUKLSAqIE1hcmtvIEtpaXNraWxhIG1raWlza2lsYUB5YWhvby5jb20KICAqCisgKiBNYXJrbyBLaWlza2lsYSA8bWtpaXNraWxhQHlhaG9vLmNvbT4KICAqLwotI2lmbmRlZiBfTEVDX0FSUF9ICi0jZGVmaW5lIF9MRUNfQVJQX0gKKyNpZm5kZWYgX0xFQ19BUlBfSF8KKyNkZWZpbmUgX0xFQ19BUlBfSF8KICNpbmNsdWRlIDxsaW51eC9hdG0uaD4KICNpbmNsdWRlIDxsaW51eC9hdG1kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgogI2luY2x1ZGUgPGxpbnV4L2F0bWxlYy5oPgogCiBzdHJ1Y3QgbGVjX2FycF90YWJsZSB7Ci0gICAgICAgIHN0cnVjdCBsZWNfYXJwX3RhYmxlICpuZXh0OyAgICAgICAgICAvKiBMaW5rZWQgZW50cnkgbGlzdCAqLwotICAgICAgICB1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsgLyogQXRtIGFkZHJlc3MgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciBtYWNfYWRkcltFVEhfQUxFTl07ICAgIC8qIE1hYyBhZGRyZXNzICovCi0gICAgICAgIGludCBpc19yZGVzYzsgICAgICAgICAgICAgICAgICAgICAgICAvKiBNYWMgYWRkcmVzcyBpcyBhIHJvdXRlIGRlc2NyaXB0b3IgKi8KLSAgICAgICAgc3RydWN0IGF0bV92Y2MgKnZjYzsgICAgICAgICAgICAgICAgIC8qIFZjYyB0aGlzIGVudHJ5IGlzIGF0dGFjaGVkICovCi0gICAgICAgIHN0cnVjdCBhdG1fdmNjICpyZWN2X3ZjYzsgICAgICAgICAgICAvKiBWY2Mgd2UgcmVjZWl2ZSBkYXRhIGZyb20gKi8KLSAgICAgICAgdm9pZCAoKm9sZF9wdXNoKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjLHN0cnVjdCBza19idWZmICpza2IpOyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFB1c2ggdGhhdCBsZWFkcyB0byBkYWVtb24gKi8KLSAgICAgICAgdm9pZCAoKm9sZF9yZWN2X3B1c2gpKHN0cnVjdCBhdG1fdmNjICp2Y2MsIHN0cnVjdCBza19idWZmICpza2IpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUHVzaCB0aGF0IGxlYWRzIHRvIGRhZW1vbiAqLwotICAgICAgICB2b2lkICgqb2xkX2Nsb3NlKShzdHJ1Y3QgYXRtX3ZjYyAqdmNjKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIHdhbnQgdG8gc2VlIHdoZW4gdGhpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdmNjIGdldHMgY2xvc2VkICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgbGFzdF91c2VkOyAgICAgICAgICAgICAvKiBGb3IgZXhwaXJ5ICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZXN0YW1wOyAgICAgICAgICAgICAvKiBVc2VkIGZvciB2YXJpb3VzIHRpbWVzdGFtcGluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhpbmdzOgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogMS4gRkxVU0ggc3RhcnRlZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIChzdGF0dXM9RVNJX0ZMVVNIX1BFTkRJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAyLiBDb3VudGluZyB0byAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIG1heF91bmtub3duX2ZyYW1lX3RpbWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgIChzdGF0dXM9RVNJX0FSUF9QRU5ESU5HfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICBzdGF0dXM9RVNJX1ZDX1BFTkRJTkcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgdW5zaWduZWQgY2hhciBub190cmllczsgICAgICAgICAgICAgIC8qIE5vIG9mIHRpbWVzIGFycCByZXRyeSBoYXMgYmVlbiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaWVkICovCi0gICAgICAgIHVuc2lnbmVkIGNoYXIgc3RhdHVzOyAgICAgICAgICAgICAgICAvKiBTdGF0dXMgb2YgdGhpcyBlbnRyeSAqLwotICAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFnczsgICAgICAgICAgICAgICAgLyogRmxhZ3MgZm9yIHRoaXMgZW50cnkgKi8KLSAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFja2V0c19mbG9vZGVkOyAgICAgIC8qIERhdGEgcGFja2V0cyBmbG9vZGVkICovCi0gICAgICAgIHVuc2lnbmVkIGxvbmcgZmx1c2hfdHJhbl9pZDsgICAgICAgICAvKiBUcmFuc2FjdGlvbiBpZCBpbiBmbHVzaCBwcm90b2NvbCAqLwotICAgICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsgICAgICAgICAgICAgLyogQXJwaW5nIHRpbWVyICovCi0gICAgICAgIHN0cnVjdCBsZWNfcHJpdiAqcHJpdjsgICAgICAgICAgICAgICAvKiBQb2ludGVyIGJhY2sgKi8KKwlzdHJ1Y3QgaGxpc3Rfbm9kZSBuZXh0OwkJLyogTGlua2VkIGVudHJ5IGxpc3QgKi8KKwl1bnNpZ25lZCBjaGFyIGF0bV9hZGRyW0FUTV9FU0FfTEVOXTsJLyogQXRtIGFkZHJlc3MgKi8KKwl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsJLyogTWFjIGFkZHJlc3MgKi8KKwlpbnQgaXNfcmRlc2M7CQkJLyogTWFjIGFkZHJlc3MgaXMgYSByb3V0ZSBkZXNjcmlwdG9yICovCisJc3RydWN0IGF0bV92Y2MgKnZjYzsJCS8qIFZjYyB0aGlzIGVudHJ5IGlzIGF0dGFjaGVkICovCisJc3RydWN0IGF0bV92Y2MgKnJlY3ZfdmNjOwkvKiBWY2Mgd2UgcmVjZWl2ZSBkYXRhIGZyb20gKi8KIAotICAgICAgICB1OCAgKnRsdnM7ICAgICAgICAgICAgIC8qIExBTkUyOiBFYWNoIE1BQyBhZGRyZXNzIGNhbiBoYXZlIFRMVnMgICAgKi8KLSAgICAgICAgdTMyIHNpemVvZnRsdnM7ICAgICAgICAvKiBhc3NvY2lhdGVkIHdpdGggaXQuIHNpemVvZnRsdnMgdGVsbHMgdGhlICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIGxlbmd0aCBvZiB0aGUgdGx2cyBhcnJheSAgICAgICAgICAgICAqLwotICAgICAgICBzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3dhaXQ7IC8qIHdhaXQgcXVldWUgZm9yIG91dGdvaW5nIHBhY2tldHMgICAgKi8KKwl2b2lkICgqb2xkX3B1c2gpIChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwkJCQkJLyogUHVzaCB0aGF0IGxlYWRzIHRvIGRhZW1vbiAqLworCisJdm9pZCAoKm9sZF9yZWN2X3B1c2gpIChzdHJ1Y3QgYXRtX3ZjYyAqdmNjLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKwkJCQkJLyogUHVzaCB0aGF0IGxlYWRzIHRvIGRhZW1vbiAqLworCisJdW5zaWduZWQgbG9uZyBsYXN0X3VzZWQ7CS8qIEZvciBleHBpcnkgKi8KKwl1bnNpZ25lZCBsb25nIHRpbWVzdGFtcDsJLyogVXNlZCBmb3IgdmFyaW91cyB0aW1lc3RhbXBpbmcgdGhpbmdzOgorCQkJCQkgKiAxLiBGTFVTSCBzdGFydGVkCisJCQkJCSAqICAgIChzdGF0dXM9RVNJX0ZMVVNIX1BFTkRJTkcpCisJCQkJCSAqIDIuIENvdW50aW5nIHRvCisJCQkJCSAqICAgIG1heF91bmtub3duX2ZyYW1lX3RpbWUKKwkJCQkJICogICAgKHN0YXR1cz1FU0lfQVJQX1BFTkRJTkd8fAorCQkJCQkgKiAgICAgc3RhdHVzPUVTSV9WQ19QRU5ESU5HKQorCQkJCQkgKi8KKwl1bnNpZ25lZCBjaGFyIG5vX3RyaWVzOwkJLyogTm8gb2YgdGltZXMgYXJwIHJldHJ5IGhhcyBiZWVuIHRyaWVkICovCisJdW5zaWduZWQgY2hhciBzdGF0dXM7CQkvKiBTdGF0dXMgb2YgdGhpcyBlbnRyeSAqLworCXVuc2lnbmVkIHNob3J0IGZsYWdzOwkJLyogRmxhZ3MgZm9yIHRoaXMgZW50cnkgKi8KKwl1bnNpZ25lZCBzaG9ydCBwYWNrZXRzX2Zsb29kZWQ7CS8qIERhdGEgcGFja2V0cyBmbG9vZGVkICovCisJdW5zaWduZWQgbG9uZyBmbHVzaF90cmFuX2lkOwkvKiBUcmFuc2FjdGlvbiBpZCBpbiBmbHVzaCBwcm90b2NvbCAqLworCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOwkvKiBBcnBpbmcgdGltZXIgKi8KKwlzdHJ1Y3QgbGVjX3ByaXYgKnByaXY7CQkvKiBQb2ludGVyIGJhY2sgKi8KKwl1OCAqdGx2czsKKwl1MzIgc2l6ZW9mdGx2czsJCQkvKgorCQkJCQkgKiBMQU5FMjogRWFjaCBNQUMgYWRkcmVzcyBjYW4gaGF2ZSBUTFZzCisJCQkJCSAqIGFzc29jaWF0ZWQgd2l0aCBpdC4gIHNpemVvZnRsdnMgdGVsbHMgdGhlCisJCQkJCSAqIHRoZSBsZW5ndGggb2YgdGhlIHRsdnMgYXJyYXkKKwkJCQkJICovCisJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF93YWl0OwkvKiB3YWl0IHF1ZXVlIGZvciBvdXRnb2luZyBwYWNrZXRzICovCisJYXRvbWljX3QgdXNhZ2U7CQkJLyogdXNhZ2UgY291bnQgKi8KIH07CiAKLXN0cnVjdCB0bHYgeyAgICAgICAgICAgICAgICAgICAvKiBMQU5FMjogVGVtcGxhdGUgdGx2IHN0cnVjdCBmb3IgYWNjZXNzaW5nICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGhlIHRsdnMgaW4gdGhlIGxlY19hcnBfdGFibGUtPnRsdnMgYXJyYXkqLwotICAgICAgICB1MzIgdHlwZTsKLSAgICAgICAgdTggIGxlbmd0aDsKLSAgICAgICAgdTggIHZhbHVlWzI1NV07CisvKgorICogTEFORTI6IFRlbXBsYXRlIHRsdiBzdHJ1Y3QgZm9yIGFjY2Vzc2luZworICogdGhlIHRsdnMgaW4gdGhlIGxlY19hcnBfdGFibGUtPnRsdnMgYXJyYXkKKyAqLworc3RydWN0IHRsdiB7CisJdTMyIHR5cGU7CisJdTggbGVuZ3RoOworCXU4IHZhbHVlWzI1NV07CiB9OwogCiAvKiBTdGF0dXMgZmllbGRzICovCi0jZGVmaW5lIEVTSV9VTktOT1dOIDAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBOZXh0IHBhY2tldCBzZW50IHRvIHRoaXMgbWFjIGFkZHJlc3MKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBjYXVzZXMgQVJQLXJlcXVlc3QgdG8gYmUgc2VudCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRVNJX0FSUF9QRU5ESU5HIDEgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIEFUTSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogNDgtYml0IGFkZHJlc3MuICBUaGUgTEUtQVJQIHByb3RvY29sIGlzIGluCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvZ3Jlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVTSV9WQ19QRU5ESU5HIDIgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBUaGVyZSBpcyBhIHZhbGlkIEFUTSBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGlzIDQ4LWJpdCBhZGRyZXNzIGJ1dCB0aGVyZSBpcyBubyBWQyBzZXQgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXAgdG8gdGhhdCBBVE0gYWRkcmVzcy4gIFRoZSBzaWduYWxpbmcgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcHJvdG9jb2wgaXMgaW4gcHJvY2Vzcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNkZWZpbmUgRVNJX0ZMVVNIX1BFTkRJTkcgNCAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIFRoZSBMRUMgaGFzIGJlZW4gbm90aWZpZWQgb2YgdGhlIEZMVVNIX1NUQVJUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RhdHVzIGFuZCBpdCBpcyBhc3N1bWVkIHRoYXQgdGhlIGZsdXNoIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHByb3RvY29sIGlzIGluIHByb2Nlc3MuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0jZGVmaW5lIEVTSV9GT1JXQVJEX0RJUkVDVCA1IC8qCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEVpdGhlciB0aGUgUGF0aCBTd2l0Y2hpbmcgRGVsYXkgKEMyMikgaGFzIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBlbGFwc2VkIG9yIHRoZSBMRUMgaGFzIG5vdGlmaWVkIHRoZSBNYXBwaW5nIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGF0IHRoZSBmbHVzaCBwcm90b2NvbCBoYXMgY29tcGxldGVkLiAgSW4gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVpdGhlciBjYXNlLCBpdCBpcyBzYWZlIHRvIGZvcndhcmQgcGFja2V0cyAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdG8gdGhpcyBhZGRyZXNzIHZpYSB0aGUgZGF0YSBkaXJlY3QgVkMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBFU0lfVU5LTk9XTiAwCQkvKgorCQkJCSAqIE5leHQgcGFja2V0IHNlbnQgdG8gdGhpcyBtYWMgYWRkcmVzcworCQkJCSAqIGNhdXNlcyBBUlAtcmVxdWVzdCB0byBiZSBzZW50CisJCQkJICovCisjZGVmaW5lIEVTSV9BUlBfUEVORElORyAxCS8qCisJCQkJICogVGhlcmUgaXMgbm8gQVRNIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIHRoaXMKKwkJCQkgKiA0OC1iaXQgYWRkcmVzcy4gIFRoZSBMRS1BUlAgcHJvdG9jb2wgaXMgaW4KKwkJCQkgKiBwcm9ncmVzcy4KKwkJCQkgKi8KKyNkZWZpbmUgRVNJX1ZDX1BFTkRJTkcgMgkvKgorCQkJCSAqIFRoZXJlIGlzIGEgdmFsaWQgQVRNIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoCisJCQkJICogdGhpcyA0OC1iaXQgYWRkcmVzcyBidXQgdGhlcmUgaXMgbm8gVkMgc2V0CisJCQkJICogdXAgdG8gdGhhdCBBVE0gYWRkcmVzcy4gIFRoZSBzaWduYWxpbmcKKwkJCQkgKiBwcm90b2NvbCBpcyBpbiBwcm9jZXNzLgorCQkJCSAqLworI2RlZmluZSBFU0lfRkxVU0hfUEVORElORyA0CS8qCisJCQkJICogVGhlIExFQyBoYXMgYmVlbiBub3RpZmllZCBvZiB0aGUgRkxVU0hfU1RBUlQKKwkJCQkgKiBzdGF0dXMgYW5kIGl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgZmx1c2gKKwkJCQkgKiBwcm90b2NvbCBpcyBpbiBwcm9jZXNzLgorCQkJCSAqLworI2RlZmluZSBFU0lfRk9SV0FSRF9ESVJFQ1QgNQkvKgorCQkJCSAqIEVpdGhlciB0aGUgUGF0aCBTd2l0Y2hpbmcgRGVsYXkgKEMyMikgaGFzCisJCQkJICogZWxhcHNlZCBvciB0aGUgTEVDIGhhcyBub3RpZmllZCB0aGUgTWFwcGluZworCQkJCSAqIHRoYXQgdGhlIGZsdXNoIHByb3RvY29sIGhhcyBjb21wbGV0ZWQuICBJbgorCQkJCSAqIGVpdGhlciBjYXNlLCBpdCBpcyBzYWZlIHRvIGZvcndhcmQgcGFja2V0cworCQkJCSAqIHRvIHRoaXMgYWRkcmVzcyB2aWEgdGhlIGRhdGEgZGlyZWN0IFZDLgorCQkJCSAqLwogCiAvKiBGbGFnIHZhbHVlcyAqLwogI2RlZmluZSBMRUNfUkVNT1RFX0ZMQUcgICAgICAweDAwMDEKICNkZWZpbmUgTEVDX1BFUk1BTkVOVF9GTEFHICAgMHgwMDAyCiAKLSNlbmRpZgorI2VuZGlmIC8qIF9MRUNfQVJQX0hfICovCmRpZmYgLS1naXQgYS9uZXQvYXRtL21wYy5jIGIvbmV0L2F0bS9tcGMuYwppbmRleCBiODdjMmE4Li4wZDJiOTk0IDEwMDY0NAotLS0gYS9uZXQvYXRtL21wYy5jCisrKyBiL25ldC9hdG0vbXBjLmMKQEAgLTU2MCw3ICs1NjAsNiBAQAogCXN0cnVjdCBhdG1tcGNfaW9jIGlvY19kYXRhOwogCWluX2NhY2hlX2VudHJ5ICppbl9lbnRyeTsKIAl1aW50MzJfdCAgaXBhZGRyOwotCXVuc2lnbmVkIGNoYXIgKmlwOwogCiAJYnl0ZXNfbGVmdCA9IGNvcHlfZnJvbV91c2VyKCZpb2NfZGF0YSwgYXJnLCBzaXplb2Yoc3RydWN0IGF0bW1wY19pb2MpKTsKIAlpZiAoYnl0ZXNfbGVmdCAhPSAwKSB7CkBAIC01ODMsOSArNTgyLDggQEAKIAkJCWlmIChpbl9lbnRyeSAhPSBOVUxMKSBtcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWlwID0gKHVuc2lnbmVkIGNoYXIqKSZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcDsKIAkJcHJpbnRrKCJtcG9hOiAoJXMpIG1wY192Y2NfYXR0YWNoOiBhdHRhY2hpbmcgaW5ncmVzcyBTVkMsIGVudHJ5ID0gJXUuJXUuJXUuJXVcbiIsCi0JCSAgICAgICBtcGMtPmRldi0+bmFtZSwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworCQkgICAgICAgbXBjLT5kZXYtPm5hbWUsIE5JUFFVQUQoaW5fZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXApKTsKIAkJaW5fZW50cnktPnNob3J0Y3V0ID0gdmNjOwogCQltcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKIAl9IGVsc2UgewpAQCAtNjE2LDEwICs2MTQsOCBAQAogCWRwcmludGsoIm1wb2E6ICglcykgbXBjX3ZjY19jbG9zZTpcbiIsIGRldi0+bmFtZSk7CiAJaW5fZW50cnkgPSBtcGMtPmluX29wcy0+Z2V0X2J5X3ZjYyh2Y2MsIG1wYyk7CiAJaWYgKGluX2VudHJ5KSB7Ci0JCXVuc2lnbmVkIGNoYXIgKmlwIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9Ci0JCSAgICAodW5zaWduZWQgY2hhciAqKSZpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcDsKIAkJZHByaW50aygibXBvYTogKCVzKSBtcGNfdmNjX2Nsb3NlOiBpbmdyZXNzIFNWQyBjbG9zZWQgaXAgPSAldS4ldS4ldS4ldVxuIiwKLQkJICAgICAgIG1wYy0+ZGV2LT5uYW1lLCBpcFswXSwgaXBbMV0sIGlwWzJdLCBpcFszXSk7CisJCSAgICAgICBtcGMtPmRldi0+bmFtZSwgTklQUVVBRChpbl9lbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCkpOwogCQlpbl9lbnRyeS0+c2hvcnRjdXQgPSBOVUxMOwogCQltcGMtPmluX29wcy0+cHV0KGluX2VudHJ5KTsKIAl9CkBAIC0xMTU0LDE4ICsxMTUwLDE3IEBACiB7CiAJdWludDMyX3QgZHN0X2lwID0gbXNnLT5jb250ZW50LmluX2luZm8uaW5fZHN0X2lwOwogCXVpbnQzMl90IG1hc2sgPSBtc2ctPmlwX21hc2s7Ci0JdW5zaWduZWQgY2hhciAqaXAgPSAodW5zaWduZWQgY2hhciAqKSZkc3RfaXA7CiAJaW5fY2FjaGVfZW50cnkgKmVudHJ5ID0gbXBjLT5pbl9vcHMtPmdldF93aXRoX21hc2soZHN0X2lwLCBtcGMsIG1hc2spOwogCiAJaWYoZW50cnkgPT0gTlVMTCl7CiAJCXByaW50aygibXBvYTogKCVzKSBpbmdyZXNzX3B1cmdlX3JjdmQ6IHB1cmdlIGZvciBhIG5vbi1leGlzdGluZyBlbnRyeSwgIiwgbXBjLT5kZXYtPm5hbWUpOwotCQlwcmludGsoImlwID0gJXUuJXUuJXUuJXVcbiIsIGlwWzBdLCBpcFsxXSwgaXBbMl0sIGlwWzNdKTsKKwkJcHJpbnRrKCJpcCA9ICV1LiV1LiV1LiV1XG4iLCBOSVBRVUFEKGRzdF9pcCkpOwogCQlyZXR1cm47CiAJfQogCiAJZG8gewogCQlkcHJpbnRrKCJtcG9hOiAoJXMpIGluZ3Jlc3NfcHVyZ2VfcmN2ZDogcmVtb3ZpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAldS4ldS4ldS4ldVxuIiAsCi0JCQltcGMtPmRldi0+bmFtZSwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworCQkJbXBjLT5kZXYtPm5hbWUsIE5JUFFVQUQoZHN0X2lwKSk7CiAJCXdyaXRlX2xvY2tfYmgoJm1wYy0+aW5ncmVzc19sb2NrKTsKIAkJbXBjLT5pbl9vcHMtPnJlbW92ZV9lbnRyeShlbnRyeSwgbXBjKTsKIAkJd3JpdGVfdW5sb2NrX2JoKCZtcGMtPmluZ3Jlc3NfbG9jayk7CmRpZmYgLS1naXQgYS9uZXQvYXRtL21wb2FfY2FjaGVzLmMgYi9uZXQvYXRtL21wb2FfY2FjaGVzLmMKaW5kZXggNzgxZWQxYi4uZmJmMTNjZCAxMDA2NDQKLS0tIGEvbmV0L2F0bS9tcG9hX2NhY2hlcy5jCisrKyBiL25ldC9hdG0vbXBvYV9jYWNoZXMuYwpAQCAtODcsNyArODcsNiBAQAogc3RhdGljIGluX2NhY2hlX2VudHJ5ICppbl9jYWNoZV9hZGRfZW50cnkodWludDMyX3QgZHN0X2lwLAogCQkJCQkgIHN0cnVjdCBtcG9hX2NsaWVudCAqY2xpZW50KQogewotCXVuc2lnbmVkIGNoYXIgKmlwIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9ICh1bnNpZ25lZCBjaGFyICopJmRzdF9pcDsKIAlpbl9jYWNoZV9lbnRyeSogZW50cnkgPSBrbWFsbG9jKHNpemVvZihpbl9jYWNoZV9lbnRyeSksIEdGUF9LRVJORUwpOwogCiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKQEAgLTk1LDcgKzk0LDcgQEAKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogYWRkaW5nIGFuIGluZ3Jlc3MgZW50cnksIGlwID0gJXUuJXUuJXUuJXVcbiIsIGlwWzBdLCBpcFsxXSwgaXBbMl0sIGlwWzNdKTsKKwlkcHJpbnRrKCJtcG9hOiBtcG9hX2NhY2hlcy5jOiBhZGRpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAldS4ldS4ldS4ldVxuIiwgTklQUVVBRChkc3RfaXApKTsKIAltZW1zZXQoZW50cnksMCxzaXplb2YoaW5fY2FjaGVfZW50cnkpKTsKIAogCWF0b21pY19zZXQoJmVudHJ5LT51c2UsIDEpOwpAQCAtMTUyLDEwICsxNTEsNyBAQAogCiAJaWYoIGVudHJ5LT5jb3VudCA+IG1wYy0+cGFyYW1ldGVycy5tcGNfcDEgJiYKIAkgICAgZW50cnktPmVudHJ5X3N0YXRlID09IElOR1JFU1NfSU5WQUxJRCl7Ci0JCXVuc2lnbmVkIGNoYXIgKmlwIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSA9Ci0JCSAgICAodW5zaWduZWQgY2hhciAqKSZlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcDsKLQotCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wb2FfY2FjaGVzLmM6IHRocmVzaG9sZCBleGNlZWRlZCBmb3IgaXAgJXUuJXUuJXUuJXUsIHNlbmRpbmcgTVBPQSByZXMgcmVxXG4iLCBtcGMtPmRldi0+bmFtZSwgaXBbMF0sIGlwWzFdLCBpcFsyXSwgaXBbM10pOworCQlkcHJpbnRrKCJtcG9hOiAoJXMpIG1wb2FfY2FjaGVzLmM6IHRocmVzaG9sZCBleGNlZWRlZCBmb3IgaXAgJXUuJXUuJXUuJXUsIHNlbmRpbmcgTVBPQSByZXMgcmVxXG4iLCBtcGMtPmRldi0+bmFtZSwgTklQUVVBRChlbnRyeS0+Y3RybF9pbmZvLmluX2RzdF9pcCkpOwogCQllbnRyeS0+ZW50cnlfc3RhdGUgPSBJTkdSRVNTX1JFU09MVklORzsKIAkJbXNnLnR5cGUgPSAgU05EX01QT0FfUkVTX1JRU1Q7CiAJCW1lbWNweShtc2cuTVBTX2N0cmwsIG1wYy0+bXBzX2N0cmxfYWRkciwgQVRNX0VTQV9MRU4gKTsKQEAgLTE4NywxMSArMTgzLDkgQEAKIHsKIAlzdHJ1Y3QgYXRtX3ZjYyAqdmNjOwogCXN0cnVjdCBrX21lc3NhZ2UgbXNnOwotCXVuc2lnbmVkIGNoYXIgKmlwOwogCiAJdmNjID0gZW50cnktPnNob3J0Y3V0OwotCWlwID0gKHVuc2lnbmVkIGNoYXIgKikmZW50cnktPmN0cmxfaW5mby5pbl9kc3RfaXA7Ci0JZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogcmVtb3ZpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAldS4ldS4ldS4ldVxuIixpcFswXSwgaXBbMV0sIGlwWzJdLCBpcFszXSk7CisJZHByaW50aygibXBvYTogbXBvYV9jYWNoZXMuYzogcmVtb3ZpbmcgYW4gaW5ncmVzcyBlbnRyeSwgaXAgPSAldS4ldS4ldS4ldVxuIixOSVBRVUFEKGVudHJ5LT5jdHJsX2luZm8uaW5fZHN0X2lwKSk7CiAKIAlpZiAoZW50cnktPnByZXYgIT0gTlVMTCkKIAkJZW50cnktPnByZXYtPm5leHQgPSBlbnRyeS0+bmV4dDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMgYi9uZXQvYmx1ZXRvb3RoL2FmX2JsdWV0b290aC5jCmluZGV4IDc4OGVhN2EuLjMwNWEwOTkgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYWZfYmx1ZXRvb3RoLmMKKysrIGIvbmV0L2JsdWV0b290aC9hZl9ibHVldG9vdGguYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAKIAkJaWYgKCF0aW1lbykgewotCQkJZXJyID0gLUVBR0FJTjsKKwkJCWVyciA9IC1FSU5QUk9HUkVTUzsKIAkJCWJyZWFrOwogCQl9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL2JuZXAvY29yZS5jCmluZGV4IGU2MjAwNjEuLjIzMTJkMDUgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvYm5lcC9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9ibmVwL2NvcmUuYwpAQCAtNTEsNiArNTEsNyBAQAogI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvYmx1ZXRvb3RoLmg+CisjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9oY2lfY29yZS5oPgogI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvbDJjYXAuaD4KIAogI2luY2x1ZGUgImJuZXAuaCIKQEAgLTUxNSw2ICs1MTYsMjYgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHN0cnVjdCBkZXZpY2UgKmJuZXBfZ2V0X2RldmljZShzdHJ1Y3QgYm5lcF9zZXNzaW9uICpzZXNzaW9uKQoreworCWJkYWRkcl90ICpzcmMgPSAmYnRfc2soc2Vzc2lvbi0+c29jay0+c2spLT5zcmM7CisJYmRhZGRyX3QgKmRzdCA9ICZidF9zayhzZXNzaW9uLT5zb2NrLT5zayktPmRzdDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwloZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYyk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgZHN0KTsKKwlpZiAoIWNvbm4pCisJCXJldHVybiBOVUxMOworCisJaGNpX2Rldl9wdXQoaGRldik7CisKKwlyZXR1cm4gJmNvbm4tPmRldjsKK30KKwogaW50IGJuZXBfYWRkX2Nvbm5lY3Rpb24oc3RydWN0IGJuZXBfY29ubmFkZF9yZXEgKnJlcSwgc3RydWN0IHNvY2tldCAqc29jaykKIHsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwpAQCAtNTM0LDcgKzU1NSw2IEBACiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PTUVNOwogCi0KIAlkb3duX3dyaXRlKCZibmVwX3Nlc3Npb25fc2VtKTsKIAogCXNzID0gX19ibmVwX2dldF9zZXNzaW9uKGRzdCk7CkBAIC01NTEsNyArNTcxLDcgQEAKIAltZW1jcHkocy0+ZWguaF9zb3VyY2UsICZkc3QsIEVUSF9BTEVOKTsKIAltZW1jcHkoZGV2LT5kZXZfYWRkciwgcy0+ZWguaF9kZXN0LCBFVEhfQUxFTik7CiAKLQlzLT5kZXYgPSBkZXY7CisJcy0+ZGV2ICAgPSBkZXY7CiAJcy0+c29jayAgPSBzb2NrOwogCXMtPnJvbGUgID0gcmVxLT5yb2xlOwogCXMtPnN0YXRlID0gQlRfQ09OTkVDVEVEOwpAQCAtNTY4LDYgKzU4OCw4IEBACiAJYm5lcF9zZXRfZGVmYXVsdF9wcm90b19maWx0ZXIocyk7CiAjZW5kaWYKIAorCVNFVF9ORVRERVZfREVWKGRldiwgYm5lcF9nZXRfZGV2aWNlKHMpKTsKKwogCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOwogCWlmIChlcnIpIHsKIAkJZ290byBmYWlsZWQ7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9jb25uLmMKaW5kZXggNDIwZWQ0ZC4uOTBlM2EyOCAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9oY2lfY29ubi5jCisrKyBiL25ldC9ibHVldG9vdGgvaGNpX2Nvbm4uYwpAQCAtODQsNiArODQsMjAgQEAKIAloY2lfc2VuZF9jbWQoaGRldiwgT0dGX0xJTktfQ1RMLCBPQ0ZfQ1JFQVRFX0NPTk4sIHNpemVvZihjcCksICZjcCk7CiB9CiAKK3N0YXRpYyB2b2lkIGhjaV9hY2xfY29ubmVjdF9jYW5jZWwoc3RydWN0IGhjaV9jb25uICpjb25uKQoreworCXN0cnVjdCBoY2lfY3BfY3JlYXRlX2Nvbm5fY2FuY2VsIGNwOworCisJQlRfREJHKCIlcCIsIGNvbm4pOworCisJaWYgKGNvbm4tPmhkZXYtPmhjaV92ZXIgPCAyKQorCQlyZXR1cm47CisKKwliYWNweSgmY3AuYmRhZGRyLCAmY29ubi0+ZHN0KTsKKwloY2lfc2VuZF9jbWQoY29ubi0+aGRldiwgT0dGX0xJTktfQ1RMLAorCQkJCU9DRl9DUkVBVEVfQ09OTl9DQU5DRUwsIHNpemVvZihjcCksICZjcCk7Cit9CisKIHZvaWQgaGNpX2FjbF9kaXNjb25uKHN0cnVjdCBoY2lfY29ubiAqY29ubiwgX191OCByZWFzb24pCiB7CiAJc3RydWN0IGhjaV9jcF9kaXNjb25uZWN0IGNwOwpAQCAtOTQsNyArMTA4LDggQEAKIAogCWNwLmhhbmRsZSA9IF9fY3B1X3RvX2xlMTYoY29ubi0+aGFuZGxlKTsKIAljcC5yZWFzb24gPSByZWFzb247Ci0JaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIE9HRl9MSU5LX0NUTCwgT0NGX0RJU0NPTk5FQ1QsIHNpemVvZihjcCksICZjcCk7CisJaGNpX3NlbmRfY21kKGNvbm4tPmhkZXYsIE9HRl9MSU5LX0NUTCwKKwkJCQlPQ0ZfRElTQ09OTkVDVCwgc2l6ZW9mKGNwKSwgJmNwKTsKIH0KIAogdm9pZCBoY2lfYWRkX3NjbyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4sIF9fdTE2IGhhbmRsZSkKQEAgLTEyNCwxMiArMTM5LDIwIEBACiAJCXJldHVybjsKIAogCWhjaV9kZXZfbG9jayhoZGV2KTsKLSAJaWYgKGNvbm4tPnN0YXRlID09IEJUX0NPTk5FQ1RFRCkKKworCXN3aXRjaCAoY29ubi0+c3RhdGUpIHsKKwljYXNlIEJUX0NPTk5FQ1Q6CisJCWhjaV9hY2xfY29ubmVjdF9jYW5jZWwoY29ubik7CisJCWJyZWFrOworIAljYXNlIEJUX0NPTk5FQ1RFRDoKIAkJaGNpX2FjbF9kaXNjb25uKGNvbm4sIDB4MTMpOwotCWVsc2UKKwkJYnJlYWs7CisJZGVmYXVsdDoKIAkJY29ubi0+c3RhdGUgPSBCVF9DTE9TRUQ7CisJCWJyZWFrOworCX0KKwogCWhjaV9kZXZfdW5sb2NrKGhkZXYpOwotCXJldHVybjsKIH0KIAogc3RhdGljIHZvaWQgaGNpX2Nvbm5faWRsZSh1bnNpZ25lZCBsb25nIGFyZykKQEAgLTE3OSw2ICsyMDIsOCBAQAogCWlmIChoZGV2LT5ub3RpZnkpCiAJCWhkZXYtPm5vdGlmeShoZGV2LCBIQ0lfTk9USUZZX0NPTk5fQUREKTsKIAorCWhjaV9jb25uX2FkZF9zeXNmcyhjb25uKTsKKwogCXRhc2tsZXRfZW5hYmxlKCZoZGV2LT50eF90YXNrKTsKIAogCXJldHVybiBjb25uOwpAQCAtMjExLDYgKzIzNiw4IEBACiAKIAl0YXNrbGV0X2Rpc2FibGUoJmhkZXYtPnR4X3Rhc2spOwogCisJaGNpX2Nvbm5fZGVsX3N5c2ZzKGNvbm4pOworCiAJaGNpX2Nvbm5faGFzaF9kZWwoaGRldiwgY29ubik7CiAJaWYgKGhkZXYtPm5vdGlmeSkKIAkJaGRldi0+bm90aWZ5KGhkZXYsIEhDSV9OT1RJRllfQ09OTl9ERUwpOwpAQCAtMjIxLDcgKzI0OCw5IEBACiAKIAloY2lfZGV2X3B1dChoZGV2KTsKIAotCWtmcmVlKGNvbm4pOworCS8qIHdpbGwgZnJlZSB2aWEgZGV2aWNlIHJlbGVhc2UgKi8KKwlwdXRfZGV2aWNlKCZjb25uLT5kZXYpOworCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYyBiL25ldC9ibHVldG9vdGgvaGNpX2NvcmUuYwppbmRleCA1ZWQ0NzQyLi4zMzhhZTk3IDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfY29yZS5jCkBAIC0yMDYsNiArMjA2LDkgQEAKIAkvKiBSZWFkIExvY2FsIFN1cHBvcnRlZCBGZWF0dXJlcyAqLwogCWhjaV9zZW5kX2NtZChoZGV2LCBPR0ZfSU5GT19QQVJBTSwgT0NGX1JFQURfTE9DQUxfRkVBVFVSRVMsIDAsIE5VTEwpOwogCisJLyogUmVhZCBMb2NhbCBWZXJzaW9uICovCisJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9JTkZPX1BBUkFNLCBPQ0ZfUkVBRF9MT0NBTF9WRVJTSU9OLCAwLCBOVUxMKTsKKwogCS8qIFJlYWQgQnVmZmVyIFNpemUgKEFDTCBtdHUsIG1heCBwa3QsIGV0Yy4pICovCiAJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9JTkZPX1BBUkFNLCBPQ0ZfUkVBRF9CVUZGRVJfU0laRSwgMCwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9ldmVudC5jCmluZGV4IDM4OTZkYWIuLmQ0M2QwYzggMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX2V2ZW50LmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfZXZlbnQuYwpAQCAtNjIsNiArNjIsNyBAQAogCiAJc3dpdGNoIChvY2YpIHsKIAljYXNlIE9DRl9JTlFVSVJZX0NBTkNFTDoKKwljYXNlIE9DRl9FWElUX1BFUklPRElDX0lOUToKIAkJc3RhdHVzID0gKigoX191OCAqKSBza2ItPmRhdGEpOwogCiAJCWlmIChzdGF0dXMpIHsKQEAgLTI5Nyw2ICsyOTgsNyBAQAogLyogQ29tbWFuZCBDb21wbGV0ZSBPR0YgSU5GT19QQVJBTSAgKi8KIHN0YXRpYyB2b2lkIGhjaV9jY19pbmZvX3BhcmFtKHN0cnVjdCBoY2lfZGV2ICpoZGV2LCBfX3UxNiBvY2YsIHN0cnVjdCBza19idWZmICpza2IpCiB7CisJc3RydWN0IGhjaV9ycF9yZWFkX2xvY192ZXJzaW9uICpsdjsKIAlzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfZmVhdHVyZXMgKmxmOwogCXN0cnVjdCBoY2lfcnBfcmVhZF9idWZmZXJfc2l6ZSAqYnM7CiAJc3RydWN0IGhjaV9ycF9yZWFkX2JkX2FkZHIgKmJhOwpAQCAtMzA0LDYgKzMwNiwyMyBAQAogCUJUX0RCRygiJXMgb2NmIDB4JXgiLCBoZGV2LT5uYW1lLCBvY2YpOwogCiAJc3dpdGNoIChvY2YpIHsKKwljYXNlIE9DRl9SRUFEX0xPQ0FMX1ZFUlNJT046CisJCWx2ID0gKHN0cnVjdCBoY2lfcnBfcmVhZF9sb2NfdmVyc2lvbiAqKSBza2ItPmRhdGE7CisKKwkJaWYgKGx2LT5zdGF0dXMpIHsKKwkJCUJUX0RCRygiJXMgUkVBRF9MT0NBTF9WRVJTSU9OIGZhaWxlZCAlZCIsIGhkZXYtPm5hbWUsIGxmLT5zdGF0dXMpOworCQkJYnJlYWs7CisJCX0KKworCQloZGV2LT5oY2lfdmVyID0gbHYtPmhjaV92ZXI7CisJCWhkZXYtPmhjaV9yZXYgPSBidG9ocyhsdi0+aGNpX3Jldik7CisJCWhkZXYtPm1hbnVmYWN0dXJlciA9IGJ0b2hzKGx2LT5tYW51ZmFjdHVyZXIpOworCisJCUJUX0RCRygiJXM6IG1hbnVmYWN0dXJlciAlZCBoY2lfdmVyICVkIGhjaV9yZXYgJWQiLCBoZGV2LT5uYW1lLAorCQkJCWhkZXYtPm1hbnVmYWN0dXJlciwgaGRldi0+aGNpX3ZlciwgaGRldi0+aGNpX3Jldik7CisKKwkJYnJlYWs7CisKIAljYXNlIE9DRl9SRUFEX0xPQ0FMX0ZFQVRVUkVTOgogCQlsZiA9IChzdHJ1Y3QgaGNpX3JwX3JlYWRfbG9jYWxfZmVhdHVyZXMgKikgc2tiLT5kYXRhOwogCkBAIC0zMjgsNyArMzQ3LDggQEAKIAkJaWYgKGhkZXYtPmZlYXR1cmVzWzFdICYgTE1QX0hWMykKIAkJCWhkZXYtPnBrdF90eXBlIHw9IChIQ0lfSFYzKTsKIAotCQlCVF9EQkcoIiVzOiBmZWF0dXJlcyAweCV4IDB4JXggMHgleCIsIGhkZXYtPm5hbWUsIGxmLT5mZWF0dXJlc1swXSwgbGYtPmZlYXR1cmVzWzFdLCBsZi0+ZmVhdHVyZXNbMl0pOworCQlCVF9EQkcoIiVzOiBmZWF0dXJlcyAweCV4IDB4JXggMHgleCIsIGhkZXYtPm5hbWUsCisJCQkJbGYtPmZlYXR1cmVzWzBdLCBsZi0+ZmVhdHVyZXNbMV0sIGxmLT5mZWF0dXJlc1syXSk7CiAKIAkJYnJlYWs7CiAKQEAgLTc1Nyw2ICs3NzcsMTAgQEAKIAogCQkJaGNpX3NlbmRfY21kKGhkZXYsIE9HRl9MSU5LX0NUTCwKIAkJCQlPQ0ZfQ0hBTkdFX0NPTk5fUFRZUEUsIHNpemVvZihjcCksICZjcCk7CisJCX0gZWxzZSB7CisJCQkvKiBVcGRhdGUgZGlzY29ubmVjdCB0aW1lciAqLworCQkJaGNpX2Nvbm5faG9sZChjb25uKTsKKwkJCWhjaV9jb25uX3B1dChjb25uKTsKIAkJfQogCX0gZWxzZQogCQljb25uLT5zdGF0ZSA9IEJUX0NMT1NFRDsKZGlmZiAtLWdpdCBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMgYi9uZXQvYmx1ZXRvb3RoL2hjaV9zeXNmcy5jCmluZGV4IDM5ODdkMTYuLjk4OWIyMmQgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvaGNpX3N5c2ZzLmMKKysrIGIvbmV0L2JsdWV0b290aC9oY2lfc3lzZnMuYwpAQCAtMTMsMTYgKzEzLDMyIEBACiAjZGVmaW5lIEJUX0RCRyhELi4uKQogI2VuZGlmCiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCitzdGF0aWMgaW5saW5lIGNoYXIgKnR5cGV0b3N0cihpbnQgdHlwZSkKIHsKLQlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBoZGV2LT5uYW1lKTsKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEhDSV9WSVJUVUFMOgorCQlyZXR1cm4gIlZJUlRVQUwiOworCWNhc2UgSENJX1VTQjoKKwkJcmV0dXJuICJVU0IiOworCWNhc2UgSENJX1BDQ0FSRDoKKwkJcmV0dXJuICJQQ0NBUkQiOworCWNhc2UgSENJX1VBUlQ6CisJCXJldHVybiAiVUFSVCI7CisJY2FzZSBIQ0lfUlMyMzI6CisJCXJldHVybiAiUlMyMzIiOworCWNhc2UgSENJX1BDSToKKwkJcmV0dXJuICJQQ0kiOworCWNhc2UgSENJX1NESU86CisJCXJldHVybiAiU0RJTyI7CisJZGVmYXVsdDoKKwkJcmV0dXJuICJVTktOT1dOIjsKKwl9CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfdHlwZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+dHlwZSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJXNcbiIsIHR5cGV0b3N0cihoZGV2LT50eXBlKSk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfYWRkcmVzcyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCkBAIC0zMywxMCArNDksMjIgQEAKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlc1xuIiwgYmF0b3N0cigmYmRhZGRyKSk7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNob3dfZmxhZ3Moc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQorc3RhdGljIHNzaXplX3Qgc2hvd19tYW51ZmFjdHVyZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQogewogCXN0cnVjdCBoY2lfZGV2ICpoZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Ci0JcmV0dXJuIHNwcmludGYoYnVmLCAiMHglbHhcbiIsIGhkZXYtPmZsYWdzKTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+bWFudWZhY3R1cmVyKTsKK30KKworc3RhdGljIHNzaXplX3Qgc2hvd19oY2lfdmVyc2lvbihzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgaGRldi0+aGNpX3Zlcik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfaGNpX3JldmlzaW9uKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBoZGV2LT5oY2lfcmV2KTsKIH0KIAogc3RhdGljIHNzaXplX3Qgc2hvd19pbnF1aXJ5X2NhY2hlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKQEAgLTE0MSwxMCArMTY5LDExIEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIobmFtZSwgU19JUlVHTywgc2hvd19uYW1lLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUih0eXBlLCBTX0lSVUdPLCBzaG93X3R5cGUsIE5VTEwpOwogc3RhdGljIERFVklDRV9BVFRSKGFkZHJlc3MsIFNfSVJVR08sIHNob3dfYWRkcmVzcywgTlVMTCk7Ci1zdGF0aWMgREVWSUNFX0FUVFIoZmxhZ3MsIFNfSVJVR08sIHNob3dfZmxhZ3MsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKG1hbnVmYWN0dXJlciwgU19JUlVHTywgc2hvd19tYW51ZmFjdHVyZXIsIE5VTEwpOworc3RhdGljIERFVklDRV9BVFRSKGhjaV92ZXJzaW9uLCBTX0lSVUdPLCBzaG93X2hjaV92ZXJzaW9uLCBOVUxMKTsKK3N0YXRpYyBERVZJQ0VfQVRUUihoY2lfcmV2aXNpb24sIFNfSVJVR08sIHNob3dfaGNpX3JldmlzaW9uLCBOVUxMKTsKIHN0YXRpYyBERVZJQ0VfQVRUUihpbnF1aXJ5X2NhY2hlLCBTX0lSVUdPLCBzaG93X2lucXVpcnlfY2FjaGUsIE5VTEwpOwogCiBzdGF0aWMgREVWSUNFX0FUVFIoaWRsZV90aW1lb3V0LCBTX0lSVUdPIHwgU19JV1VTUiwKQEAgLTE1NSwxMCArMTg0LDExIEBACiAJCQkJc2hvd19zbmlmZl9taW5faW50ZXJ2YWwsIHN0b3JlX3NuaWZmX21pbl9pbnRlcnZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYnRfYXR0cnNbXSA9IHsKLQkmZGV2X2F0dHJfbmFtZSwKIAkmZGV2X2F0dHJfdHlwZSwKIAkmZGV2X2F0dHJfYWRkcmVzcywKLQkmZGV2X2F0dHJfZmxhZ3MsCisJJmRldl9hdHRyX21hbnVmYWN0dXJlciwKKwkmZGV2X2F0dHJfaGNpX3ZlcnNpb24sCisJJmRldl9hdHRyX2hjaV9yZXZpc2lvbiwKIAkmZGV2X2F0dHJfaW5xdWlyeV9jYWNoZSwKIAkmZGV2X2F0dHJfaWRsZV90aW1lb3V0LAogCSZkZXZfYXR0cl9zbmlmZl9tYXhfaW50ZXJ2YWwsCkBAIC0xNjYsNiArMTk2LDMyIEBACiAJTlVMTAogfTsKIAorc3RhdGljIHNzaXplX3Qgc2hvd19jb25uX3R5cGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQoreworCXN0cnVjdCBoY2lfY29ubiAqY29ubiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBjb25uLT50eXBlID09IEFDTF9MSU5LID8gIkFDTCIgOiAiU0NPIik7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHNob3dfY29ubl9hZGRyZXNzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKK3sKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4gPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKKwliZGFkZHJfdCBiZGFkZHI7CisJYmFzd2FwKCZiZGFkZHIsICZjb25uLT5kc3QpOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVzXG4iLCBiYXRvc3RyKCZiZGFkZHIpKTsKK30KKworI2RlZmluZSBDT05OX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSBcCitzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBjb25uX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK3N0YXRpYyBDT05OX0FUVFIodHlwZSwgU19JUlVHTywgc2hvd19jb25uX3R5cGUsIE5VTEwpOworc3RhdGljIENPTk5fQVRUUihhZGRyZXNzLCBTX0lSVUdPLCBzaG93X2Nvbm5fYWRkcmVzcywgTlVMTCk7CisKK3N0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqY29ubl9hdHRyc1tdID0geworCSZjb25uX2F0dHJfdHlwZSwKKwkmY29ubl9hdHRyX2FkZHJlc3MsCisJTlVMTAorfTsKKwogc3RydWN0IGNsYXNzICpidF9jbGFzcyA9IE5VTEw7CiBFWFBPUlRfU1lNQk9MX0dQTChidF9jbGFzcyk7CiAKQEAgLTE3Nyw4ICsyMzMsNTcgQEAKIAogc3RhdGljIHZvaWQgYnRfcmVsZWFzZShzdHJ1Y3QgZGV2aWNlICpkZXYpCiB7Ci0Jc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQlrZnJlZShoZGV2KTsKKwl2b2lkICpkYXRhID0gZGV2X2dldF9kcnZkYXRhKGRldik7CisJa2ZyZWUoZGF0YSk7Cit9CisKK3N0YXRpYyB2b2lkIGFkZF9jb25uKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhjaV9jb25uICpjb25uID0gZGF0YTsKKwlpbnQgaTsKKworCWRldmljZV9yZWdpc3RlcigmY29ubi0+ZGV2KTsKKworCWZvciAoaSA9IDA7IGNvbm5fYXR0cnNbaV07IGkrKykKKwkJZGV2aWNlX2NyZWF0ZV9maWxlKCZjb25uLT5kZXYsIGNvbm5fYXR0cnNbaV0pOworfQorCit2b2lkIGhjaV9jb25uX2FkZF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJc3RydWN0IGhjaV9kZXYgKmhkZXYgPSBjb25uLT5oZGV2OworCWJkYWRkcl90ICpiYSA9ICZjb25uLT5kc3Q7CisKKwlCVF9EQkcoImNvbm4gJXAiLCBjb25uKTsKKworCWNvbm4tPmRldi5wYXJlbnQgID0gJmhkZXYtPmRldjsKKwljb25uLT5kZXYucmVsZWFzZSA9IGJ0X3JlbGVhc2U7CisKKwlzbnByaW50Zihjb25uLT5kZXYuYnVzX2lkLCBCVVNfSURfU0laRSwKKwkJCSIlcyUyLjJYJTIuMlglMi4yWCUyLjJYJTIuMlglMi4yWCIsCisJCQljb25uLT50eXBlID09IEFDTF9MSU5LID8gImFjbCIgOiAic2NvIiwKKwkJCWJhLT5iWzVdLCBiYS0+Yls0XSwgYmEtPmJbM10sCisJCQliYS0+YlsyXSwgYmEtPmJbMV0sIGJhLT5iWzBdKTsKKworCWRldl9zZXRfZHJ2ZGF0YSgmY29ubi0+ZGV2LCBjb25uKTsKKworCUlOSVRfV09SSygmY29ubi0+d29yaywgYWRkX2Nvbm4sICh2b2lkICopIGNvbm4pOworCisJc2NoZWR1bGVfd29yaygmY29ubi0+d29yayk7Cit9CisKK3N0YXRpYyB2b2lkIGRlbF9jb25uKHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGhjaV9jb25uICpjb25uID0gZGF0YTsKKwlkZXZpY2VfZGVsKCZjb25uLT5kZXYpOworfQorCit2b2lkIGhjaV9jb25uX2RlbF9zeXNmcyhzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm4pCit7CisJQlRfREJHKCJjb25uICVwIiwgY29ubik7CisKKwlJTklUX1dPUksoJmNvbm4tPndvcmssIGRlbF9jb25uLCAodm9pZCAqKSBjb25uKTsKKworCXNjaGVkdWxlX3dvcmsoJmNvbm4tPndvcmspOwogfQogCiBpbnQgaGNpX3JlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQpAQCAtMjE0LDExICszMTksOSBAQAogCiB2b2lkIGhjaV91bnJlZ2lzdGVyX3N5c2ZzKHN0cnVjdCBoY2lfZGV2ICpoZGV2KQogewotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZoZGV2LT5kZXY7Ci0KIAlCVF9EQkcoIiVwIG5hbWUgJXMgdHlwZSAlZCIsIGhkZXYsIGhkZXYtPm5hbWUsIGhkZXYtPnR5cGUpOwogCi0JZGV2aWNlX2RlbChkZXYpOworCWRldmljZV9kZWwoJmhkZXYtPmRldik7CiB9CiAKIGludCBfX2luaXQgYnRfc3lzZnNfaW5pdCh2b2lkKQpAQCAtMjQ1LDcgKzM0OCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgX19leGl0IGJ0X3N5c2ZzX2NsZWFudXAodm9pZCkKK3ZvaWQgYnRfc3lzZnNfY2xlYW51cCh2b2lkKQogewogCWNsYXNzX2Rlc3Ryb3koYnRfY2xhc3MpOwogCmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jIGIvbmV0L2JsdWV0b290aC9oaWRwL2NvcmUuYwppbmRleCBjNmUzYTJjLi4wM2I1ZGFkIDEwMDY0NAotLS0gYS9uZXQvYmx1ZXRvb3RoL2hpZHAvY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvaGlkcC9jb3JlLmMKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogCiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9ibHVldG9vdGguaD4KKyNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2hjaV9jb3JlLmg+CiAjaW5jbHVkZSA8bmV0L2JsdWV0b290aC9sMmNhcC5oPgogCiAjaW5jbHVkZSAiaGlkcC5oIgpAQCAtNTI4LDYgKzUyOSwyNiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgc3RydWN0IGRldmljZSAqaGlkcF9nZXRfZGV2aWNlKHN0cnVjdCBoaWRwX3Nlc3Npb24gKnNlc3Npb24pCit7CisJYmRhZGRyX3QgKnNyYyA9ICZidF9zayhzZXNzaW9uLT5jdHJsX3NvY2stPnNrKS0+c3JjOworCWJkYWRkcl90ICpkc3QgPSAmYnRfc2soc2Vzc2lvbi0+Y3RybF9zb2NrLT5zayktPmRzdDsKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwloZGV2ID0gaGNpX2dldF9yb3V0ZShkc3QsIHNyYyk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgZHN0KTsKKwlpZiAoIWNvbm4pCisJCXJldHVybiBOVUxMOworCisJaGNpX2Rldl9wdXQoaGRldik7CisKKwlyZXR1cm4gJmNvbm4tPmRldjsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIGhpZHBfc2V0dXBfaW5wdXQoc3RydWN0IGhpZHBfc2Vzc2lvbiAqc2Vzc2lvbiwgc3RydWN0IGhpZHBfY29ubmFkZF9yZXEgKnJlcSkKIHsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dCA9IHNlc3Npb24tPmlucHV0OwpAQCAtNTY2LDYgKzU4Nyw4IEBACiAJCWlucHV0LT5yZWxiaXRbMF0gfD0gQklUKFJFTF9XSEVFTCk7CiAJfQogCisJaW5wdXQtPmNkZXYuZGV2ID0gaGlkcF9nZXRfZGV2aWNlKHNlc3Npb24pOworCiAJaW5wdXQtPmV2ZW50ID0gaGlkcF9pbnB1dF9ldmVudDsKIAogCWlucHV0X3JlZ2lzdGVyX2RldmljZShpbnB1dCk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMgYi9uZXQvYmx1ZXRvb3RoL3JmY29tbS9jb3JlLmMKaW5kZXggMzMyZGQ4Zi4uNDY4ZGYzYiAxMDA2NDQKLS0tIGEvbmV0L2JsdWV0b290aC9yZmNvbW0vY29yZS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL2NvcmUuYwpAQCAtNjQ0LDcgKzY0NCw3IEBACiAJYWRkci5sMl9mYW1pbHkgPSBBRl9CTFVFVE9PVEg7CiAJYWRkci5sMl9wc20gICAgPSBodG9icyhSRkNPTU1fUFNNKTsKIAkqZXJyID0gc29jay0+b3BzLT5jb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsIHNpemVvZihhZGRyKSwgT19OT05CTE9DSyk7Ci0JaWYgKCplcnIgPT0gMCB8fCAqZXJyID09IC1FQUdBSU4pCisJaWYgKCplcnIgPT0gMCB8fCAqZXJyID09IC1FSU5QUk9HUkVTUykKIAkJcmV0dXJuIHM7CiAKIAlyZmNvbW1fc2Vzc2lvbl9kZWwocyk7CmRpZmYgLS1naXQgYS9uZXQvYmx1ZXRvb3RoL3JmY29tbS90dHkuYyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCmluZGV4IGJkOGQ2NzEuLjI2ZjMyMjcgMTAwNjQ0Ci0tLSBhL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCisrKyBiL25ldC9ibHVldG9vdGgvcmZjb21tL3R0eS5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CiAKICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL2JsdWV0b290aC5oPgorI2luY2x1ZGUgPG5ldC9ibHVldG9vdGgvaGNpX2NvcmUuaD4KICNpbmNsdWRlIDxuZXQvYmx1ZXRvb3RoL3JmY29tbS5oPgogCiAjaWZuZGVmIENPTkZJR19CVF9SRkNPTU1fREVCVUcKQEAgLTE2MSw2ICsxNjIsMjQgQEAKIAlyZXR1cm4gZGV2OwogfQogCitzdGF0aWMgc3RydWN0IGRldmljZSAqcmZjb21tX2dldF9kZXZpY2Uoc3RydWN0IHJmY29tbV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgaGNpX2RldiAqaGRldjsKKwlzdHJ1Y3QgaGNpX2Nvbm4gKmNvbm47CisKKwloZGV2ID0gaGNpX2dldF9yb3V0ZSgmZGV2LT5kc3QsICZkZXYtPnNyYyk7CisJaWYgKCFoZGV2KQorCQlyZXR1cm4gTlVMTDsKKworCWNvbm4gPSBoY2lfY29ubl9oYXNoX2xvb2t1cF9iYShoZGV2LCBBQ0xfTElOSywgJmRldi0+ZHN0KTsKKwlpZiAoIWNvbm4pCisJCXJldHVybiBOVUxMOworCisJaGNpX2Rldl9wdXQoaGRldik7CisKKwlyZXR1cm4gJmNvbm4tPmRldjsKK30KKwogc3RhdGljIGludCByZmNvbW1fZGV2X2FkZChzdHJ1Y3QgcmZjb21tX2Rldl9yZXEgKnJlcSwgc3RydWN0IHJmY29tbV9kbGMgKmRsYykKIHsKIAlzdHJ1Y3QgcmZjb21tX2RldiAqZGV2OwpAQCAtMjQ0LDcgKzI2Myw3IEBACiAJCXJldHVybiBlcnI7CiAJfQogCi0JdHR5X3JlZ2lzdGVyX2RldmljZShyZmNvbW1fdHR5X2RyaXZlciwgZGV2LT5pZCwgTlVMTCk7CisJdHR5X3JlZ2lzdGVyX2RldmljZShyZmNvbW1fdHR5X2RyaXZlciwgZGV2LT5pZCwgcmZjb21tX2dldF9kZXZpY2UoZGV2KSk7CiAKIAlyZXR1cm4gZGV2LT5pZDsKIH0KZGlmZiAtLWdpdCBhL25ldC9icmlkZ2UvbmV0ZmlsdGVyL2VidF9hcnByZXBseS5jIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycHJlcGx5LmMKaW5kZXggZDE5ZmM0Yi4uMGFhN2I5OSAxMDA2NDQKLS0tIGEvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycHJlcGx5LmMKKysrIGIvbmV0L2JyaWRnZS9uZXRmaWx0ZXIvZWJ0X2FycHJlcGx5LmMKQEAgLTIwLDcgKzIwLDcgQEAKICAgIGNvbnN0IHZvaWQgKmRhdGEsIHVuc2lnbmVkIGludCBkYXRhbGVuKQogewogCXN0cnVjdCBlYnRfYXJwcmVwbHlfaW5mbyAqaW5mbyA9IChzdHJ1Y3QgZWJ0X2FycHJlcGx5X2luZm8gKilkYXRhOwotCXUzMiBfc2lwLCAqc2lwdHIsIF9kaXAsICpkaXB0cjsKKwlfX2JlMzIgX3NpcCwgKnNpcHRyLCBfZGlwLCAqZGlwdHI7CiAJc3RydWN0IGFycGhkciBfYWgsICphcDsKIAl1bnNpZ25lZCBjaGFyIF9zaGFbRVRIX0FMRU5dLCAqc2hwOwogCXN0cnVjdCBza19idWZmICpza2IgPSAqcHNrYjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggMTRkZTI5Ny4uNGQ4OTFiZSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvZGV2LmMKKysrIGIvbmV0L2NvcmUvZGV2LmMKQEAgLTE0ODAsMTQgKzE0ODAsMTYgQEAKIAlpZiAocS0+ZW5xdWV1ZSkgewogCQkvKiBHcmFiIGRldmljZSBxdWV1ZSAqLwogCQlzcGluX2xvY2soJmRldi0+cXVldWVfbG9jayk7CisJCXEgPSBkZXYtPnFkaXNjOworCQlpZiAocS0+ZW5xdWV1ZSkgeworCQkJcmMgPSBxLT5lbnF1ZXVlKHNrYiwgcSk7CisJCQlxZGlzY19ydW4oZGV2KTsKKwkJCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOwogCi0JCXJjID0gcS0+ZW5xdWV1ZShza2IsIHEpOwotCi0JCXFkaXNjX3J1bihkZXYpOwotCisJCQlyYyA9IHJjID09IE5FVF9YTUlUX0JZUEFTUyA/IE5FVF9YTUlUX1NVQ0NFU1MgOiByYzsKKwkJCWdvdG8gb3V0OworCQl9CiAJCXNwaW5fdW5sb2NrKCZkZXYtPnF1ZXVlX2xvY2spOwotCQlyYyA9IHJjID09IE5FVF9YTUlUX0JZUEFTUyA/IE5FVF9YTUlUX1NVQ0NFU1MgOiByYzsKLQkJZ290byBvdXQ7CiAJfQogCiAJLyogVGhlIGRldmljZSBoYXMgbm8gcXVldWUuIENvbW1vbiBjYXNlIGZvciBzb2Z0d2FyZSBkZXZpY2VzOgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZXRodG9vbC5jIGIvbmV0L2NvcmUvZXRodG9vbC5jCmluZGV4IGUwY2EwNGYuLjg3ZGM1NTYgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL2V0aHRvb2wuYworKysgYi9uZXQvY29yZS9ldGh0b29sLmMKQEAgLTgwNiwxMyArODA2LDYgQEAKIAlpbnQgcmM7CiAJdW5zaWduZWQgbG9uZyBvbGRfZmVhdHVyZXM7CiAKLQkvKgotCSAqIFhYWDogVGhpcyBjYW4gYmUgcHVzaGVkIGRvd24gaW50byB0aGUgZXRodG9vbF8qIGhhbmRsZXJzIHRoYXQKLQkgKiBuZWVkIGl0LiAgS2VlcCBleGlzdGluZyBiZWhhdmlvdXIgZm9yIHRoZSBtb21lbnQuCi0JICovCi0JaWYgKCFjYXBhYmxlKENBUF9ORVRfQURNSU4pKQotCQlyZXR1cm4gLUVQRVJNOwotCiAJaWYgKCFkZXYgfHwgIW5ldGlmX2RldmljZV9wcmVzZW50KGRldikpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC04MjIsNiArODE1LDI3IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKCZldGhjbWQsIHVzZXJhZGRyLCBzaXplb2YgKGV0aGNtZCkpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAorCS8qIEFsbG93IHNvbWUgY29tbWFuZHMgdG8gYmUgZG9uZSBieSBhbnlvbmUgKi8KKwlzd2l0Y2goZXRoY21kKSB7CisJY2FzZSBFVEhUT09MX0dEUlZJTkZPOgorCWNhc2UgRVRIVE9PTF9HTVNHTFZMOgorCWNhc2UgRVRIVE9PTF9HQ09BTEVTQ0U6CisJY2FzZSBFVEhUT09MX0dSSU5HUEFSQU06CisJY2FzZSBFVEhUT09MX0dQQVVTRVBBUkFNOgorCWNhc2UgRVRIVE9PTF9HUlhDU1VNOgorCWNhc2UgRVRIVE9PTF9HVFhDU1VNOgorCWNhc2UgRVRIVE9PTF9HU0c6CisJY2FzZSBFVEhUT09MX0dTVFJJTkdTOgorCWNhc2UgRVRIVE9PTF9HVFNPOgorCWNhc2UgRVRIVE9PTF9HUEVSTUFERFI6CisJY2FzZSBFVEhUT09MX0dVRk86CisJY2FzZSBFVEhUT09MX0dHU086CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJCXJldHVybiAtRVBFUk07CisJfQorCiAJaWYoZGV2LT5ldGh0b29sX29wcy0+YmVnaW4pCiAJCWlmICgocmMgPSBkZXYtPmV0aHRvb2xfb3BzLT5iZWdpbihkZXYpKSA8IDApCiAJCQlyZXR1cm4gcmM7CkBAIC05NDcsNiArOTYxLDEwIEBACiAJcmV0dXJuIHJjOwogCiAgaW9jdGw6CisJLyogS2VlcCBleGlzdGluZyBiZWhhdmlvdXIgZm9yIHRoZSBtb21lbnQuCSAqLworCWlmICghY2FwYWJsZShDQVBfTkVUX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwogCWlmIChkZXYtPmRvX2lvY3RsKQogCQlyZXR1cm4gZGV2LT5kb19pb2N0bChkZXYsIGlmciwgU0lPQ0VUSFRPT0wpOwogCXJldHVybiAtRU9QTk9UU1VQUDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25laWdoYm91ci5jIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKaW5kZXggYjZjNjllMS4uOGNlOGM0NyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmVpZ2hib3VyLmMKKysrIGIvbmV0L2NvcmUvbmVpZ2hib3VyLmMKQEAgLTEwNzksNyArMTA3OSw3IEBACiB9CiAKIHN0YXRpYyB2b2lkIG5laWdoX2hoX2luaXQoc3RydWN0IG5laWdoYm91ciAqbiwgc3RydWN0IGRzdF9lbnRyeSAqZHN0LAotCQkJICB1MTYgcHJvdG9jb2wpCisJCQkgIF9fYmUxNiBwcm90b2NvbCkKIHsKIAlzdHJ1Y3QgaGhfY2FjaGUJKmhoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkc3QtPmRldjsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL25ldC1zeXNmcy5jIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKaW5kZXggMTM0NzI3Ni4uZjQ3ZjMxOSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKKysrIGIvbmV0L2NvcmUvbmV0LXN5c2ZzLmMKQEAgLTM0NCw4ICszNDQsNiBAQAogCQlpZihkZXYtPndpcmVsZXNzX2hhbmRsZXJzICYmCiAJCSAgIGRldi0+d2lyZWxlc3NfaGFuZGxlcnMtPmdldF93aXJlbGVzc19zdGF0cykKIAkJCWl3ID0gZGV2LT53aXJlbGVzc19oYW5kbGVycy0+Z2V0X3dpcmVsZXNzX3N0YXRzKGRldik7Ci0JCWVsc2UgaWYgKGRldi0+Z2V0X3dpcmVsZXNzX3N0YXRzKQotCQkJaXcgPSBkZXYtPmdldF93aXJlbGVzc19zdGF0cyhkZXYpOwogCQlpZiAoaXcgIT0gTlVMTCkKIAkJCXJldCA9ICgqZm9ybWF0KShpdywgYnVmKTsKIAl9CkBAIC00NjUsOCArNDYzLDcgQEAKIAkJKmdyb3VwcysrID0gJm5ldHN0YXRfZ3JvdXA7CiAKICNpZmRlZiBXSVJFTEVTU19FWFQKLQlpZiAobmV0LT5nZXRfd2lyZWxlc3Nfc3RhdHMKLQkgICAgfHwgKG5ldC0+d2lyZWxlc3NfaGFuZGxlcnMgJiYgbmV0LT53aXJlbGVzc19oYW5kbGVycy0+Z2V0X3dpcmVsZXNzX3N0YXRzKSkKKwlpZiAobmV0LT53aXJlbGVzc19oYW5kbGVycyAmJiBuZXQtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMpCiAJCSpncm91cHMrKyA9ICZ3aXJlbGVzc19ncm91cDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9uZXQvY29yZS9wa3RnZW4uYyBiL25ldC9jb3JlL3BrdGdlbi5jCmluZGV4IDcyMTQ1ZDQuLmRkMDIzZmQgMTAwNjQ0Ci0tLSBhL25ldC9jb3JlL3BrdGdlbi5jCisrKyBiL25ldC9jb3JlL3BrdGdlbi5jCkBAIC0xMDksNiArMTA5LDggQEAKICAqCiAgKiBNUExTIHN1cHBvcnQgYnkgU3RldmVuIFdoaXRlaG91c2UgPHN0ZXZlQGNoeWd3eW4uY29tPgogICoKKyAqIDgwMi4xUS9RLWluLVEgc3VwcG9ydCBieSBGcmFuY2VzY28gRm9uZGVsbGkgKEZGKSA8ZnJhbmNlc2NvLmZvbmRlbGxpQGdtYWlsLmNvbT4KKyAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9zeXMuaD4KICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgpAQCAtMTM3LDYgKzEzOSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5ldGRldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KICNpbmNsdWRlIDxsaW51eC9pbi5oPgogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bGludXgvaXB2Ni5oPgpAQCAtMTU3LDcgKzE2MCw3IEBACiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CQkvKiBkb19kaXYgKi8KICNpbmNsdWRlIDxhc20vdGltZXguaD4KIAotI2RlZmluZSBWRVJTSU9OICAicGt0Z2VuIHYyLjY3OiBQYWNrZXQgR2VuZXJhdG9yIGZvciBwYWNrZXQgcGVyZm9ybWFuY2UgdGVzdGluZy5cbiIKKyNkZWZpbmUgVkVSU0lPTiAgInBrdGdlbiB2Mi42ODogUGFja2V0IEdlbmVyYXRvciBmb3IgcGFja2V0IHBlcmZvcm1hbmNlIHRlc3RpbmcuXG4iCiAKIC8qICNkZWZpbmUgUEdfREVCVUcoYSkgYSAqLwogI2RlZmluZSBQR19ERUJVRyhhKQpAQCAtMTc4LDYgKzE4MSw4IEBACiAjZGVmaW5lIEZfVFhTSVpFX1JORCAgKDE8PDYpCS8qIFRyYW5zbWl0IHNpemUgaXMgcmFuZG9tICovCiAjZGVmaW5lIEZfSVBWNiAgICAgICAgKDE8PDcpCS8qIEludGVyZmFjZSBpbiBJUFY2IE1vZGUgKi8KICNkZWZpbmUgRl9NUExTX1JORCAgICAoMTw8OCkJLyogUmFuZG9tIE1QTFMgbGFiZWxzICovCisjZGVmaW5lIEZfVklEX1JORCAgICAgKDE8PDkpCS8qIFJhbmRvbSBWTEFOIElEICovCisjZGVmaW5lIEZfU1ZJRF9STkQgICAgKDE8PDEwKQkvKiBSYW5kb20gU1ZMQU4gSUQgKi8KIAogLyogVGhyZWFkIGNvbnRyb2wgZmxhZyBiaXRzICovCiAjZGVmaW5lIFRfVEVSTUlOQVRFICAgKDE8PDApCkBAIC0xOTgsNiArMjAzLDkgQEAKIAogI2RlZmluZSBNQVhfQ0ZMT1dTICA2NTUzNgogCisjZGVmaW5lIFZMQU5fVEFHX1NJWkUoeCkgKCh4KS0+dmxhbl9pZCA9PSAweGZmZmYgPyAwIDogNCkKKyNkZWZpbmUgU1ZMQU5fVEFHX1NJWkUoeCkgKCh4KS0+c3ZsYW5faWQgPT0gMHhmZmZmID8gMCA6IDQpCisKIHN0cnVjdCBmbG93X3N0YXRlIHsKIAlfX3UzMiBjdXJfZGFkZHI7CiAJaW50IGNvdW50OwpAQCAtMjg0LDEwICsyOTIsMjMgQEAKIAlfX3UxNiB1ZHBfZHN0X21pbjsJLyogaW5jbHVzaXZlLCBkZXN0IFVEUCBwb3J0ICovCiAJX191MTYgdWRwX2RzdF9tYXg7CS8qIGV4Y2x1c2l2ZSwgZGVzdCBVRFAgcG9ydCAqLwogCisJLyogRFNDUCArIEVDTiAqLworCV9fdTggdG9zOyAgICAgICAgICAgIC8qIHNpeCBtb3N0IHNpZ25pZmljYW50IGJpdHMgb2YgKGZvcm1lcikgSVB2NCBUT1MgYXJlIGZvciBkc2NwIGNvZGVwb2ludCAqLworCV9fdTggdHJhZmZpY19jbGFzczsgIC8qIGRpdHRvIGZvciB0aGUgKGZvcm1lcikgVHJhZmZpYyBDbGFzcyBpbiBJUHY2IChzZWUgUkZDIDMyNjAsIHNlYy4gNCkgKi8KKwogCS8qIE1QTFMgKi8KIAl1bnNpZ25lZCBucl9sYWJlbHM7CS8qIERlcHRoIG9mIHN0YWNrLCAwID0gbm8gTVBMUyAqLwogCV9fYmUzMiBsYWJlbHNbTUFYX01QTFNfTEFCRUxTXTsKIAorCS8qIFZMQU4vU1ZMQU4gKDgwMi4xUS9RLWluLVEpICovCisJX191OCAgdmxhbl9wOworCV9fdTggIHZsYW5fY2ZpOworCV9fdTE2IHZsYW5faWQ7ICAvKiAweGZmZmYgbWVhbnMgbm8gdmxhbiB0YWcgKi8KKworCV9fdTggIHN2bGFuX3A7CisJX191OCAgc3ZsYW5fY2ZpOworCV9fdTE2IHN2bGFuX2lkOyAvKiAweGZmZmYgbWVhbnMgbm8gc3ZsYW4gdGFnICovCisKIAlfX3UzMiBzcmNfbWFjX2NvdW50OwkvKiBIb3cgbWFueSBNQUNzIHRvIGl0ZXJhdGUgdGhyb3VnaCAqLwogCV9fdTMyIGRzdF9tYWNfY291bnQ7CS8qIEhvdyBtYW55IE1BQ3MgdG8gaXRlcmF0ZSB0aHJvdWdoICovCiAKQEAgLTY0NCw2ICs2NjUsMjQgQEAKIAkJCQkgICBpID09IHBrdF9kZXYtPm5yX2xhYmVscy0xID8gIlxuIiA6ICIsICIpOwogCX0KIAorCWlmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikgeworCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgdmxhbl9pZDogJXUgIHZsYW5fcDogJXUgIHZsYW5fY2ZpOiAldVxuIiwKKwkJCSAgIHBrdF9kZXYtPnZsYW5faWQsIHBrdF9kZXYtPnZsYW5fcCwgcGt0X2Rldi0+dmxhbl9jZmkpOworCX0KKworCWlmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpIHsKKwkJc2VxX3ByaW50ZihzZXEsICIgICAgIHN2bGFuX2lkOiAldSAgdmxhbl9wOiAldSAgdmxhbl9jZmk6ICV1XG4iLAorCQkJICAgcGt0X2Rldi0+c3ZsYW5faWQsIHBrdF9kZXYtPnN2bGFuX3AsIHBrdF9kZXYtPnN2bGFuX2NmaSk7CisJfQorCisJaWYgKHBrdF9kZXYtPnRvcykgeworCQlzZXFfcHJpbnRmKHNlcSwgIiAgICAgdG9zOiAweCUwMnhcbiIsIHBrdF9kZXYtPnRvcyk7CisJfQorCisJaWYgKHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpIHsKKwkJc2VxX3ByaW50ZihzZXEsICIgICAgIHRyYWZmaWNfY2xhc3M6IDB4JTAyeFxuIiwgcGt0X2Rldi0+dHJhZmZpY19jbGFzcyk7CisJfQorCiAJc2VxX3ByaW50ZihzZXEsICIgICAgIEZsYWdzOiAiKTsKIAogCWlmIChwa3RfZGV2LT5mbGFncyAmIEZfSVBWNikKQEAgLTY3Myw2ICs3MTIsMTIgQEAKIAlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX01BQ0RTVF9STkQpCiAJCXNlcV9wcmludGYoc2VxLCAiTUFDRFNUX1JORCAgIik7CiAKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX1ZJRF9STkQpCisJCXNlcV9wcmludGYoc2VxLCAiVklEX1JORCAgIik7CisKKwlpZiAocGt0X2Rldi0+ZmxhZ3MgJiBGX1NWSURfUk5EKQorCQlzZXFfcHJpbnRmKHNlcSwgIlNWSURfUk5EICAiKTsKKwogCXNlcV9wdXRzKHNlcSwgIlxuIik7CiAKIAlzYSA9IHBrdF9kZXYtPnN0YXJ0ZWRfYXQ7CkBAIC03MTUsMTIgKzc2MCwxMiBAQAogfQogCiAKLXN0YXRpYyBpbnQgaGV4MzJfYXJnKGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgX191MzIgKm51bSkKK3N0YXRpYyBpbnQgaGV4MzJfYXJnKGNvbnN0IGNoYXIgX191c2VyICp1c2VyX2J1ZmZlciwgdW5zaWduZWQgbG9uZyBtYXhsZW4sIF9fdTMyICpudW0pCiB7CiAJaW50IGkgPSAwOwogCSpudW0gPSAwOwogCi0JZm9yKDsgaSA8IDg7IGkrKykgeworCWZvcig7IGkgPCBtYXhsZW47IGkrKykgewogCQljaGFyIGM7CiAJCSpudW0gPDw9IDQ7CiAJCWlmIChnZXRfdXNlcihjLCAmdXNlcl9idWZmZXJbaV0pKQpAQCAtODE1LDcgKzg2MCw3IEBACiAJcGt0X2Rldi0+bnJfbGFiZWxzID0gMDsKIAlkbyB7CiAJCV9fdTMyIHRtcDsKLQkJbGVuID0gaGV4MzJfYXJnKCZidWZmZXJbaV0sICZ0bXApOworCQlsZW4gPSBoZXgzMl9hcmcoJmJ1ZmZlcltpXSwgOCwgJnRtcCk7CiAJCWlmIChsZW4gPD0gMCkKIAkJCXJldHVybiBsZW47CiAJCXBrdF9kZXYtPmxhYmVsc1tuXSA9IGh0b25sKHRtcCk7CkBAIC0xMTQwLDExICsxMTg1LDI3IEBACiAJCWVsc2UgaWYgKHN0cmNtcChmLCAiIU1QTFNfUk5EIikgPT0gMCkKIAkJCXBrdF9kZXYtPmZsYWdzICY9IH5GX01QTFNfUk5EOwogCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiVklEX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyB8PSBGX1ZJRF9STkQ7CisKKwkJZWxzZSBpZiAoc3RyY21wKGYsICIhVklEX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9WSURfUk5EOworCisJCWVsc2UgaWYgKHN0cmNtcChmLCAiU1ZJRF9STkQiKSA9PSAwKQorCQkJcGt0X2Rldi0+ZmxhZ3MgfD0gRl9TVklEX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIiFTVklEX1JORCIpID09IDApCisJCQlwa3RfZGV2LT5mbGFncyAmPSB+Rl9TVklEX1JORDsKKworCQllbHNlIGlmIChzdHJjbXAoZiwgIiFJUFY2IikgPT0gMCkKKwkJCXBrdF9kZXYtPmZsYWdzICY9IH5GX0lQVjY7CisKIAkJZWxzZSB7CiAJCQlzcHJpbnRmKHBnX3Jlc3VsdCwKIAkJCQkiRmxhZyAtOiVzOi0gdW5rbm93blxuQXZhaWxhYmxlIGZsYWdzLCAocHJlcGVuZCAhIHRvIHVuLXNldCBmbGFnKTpcbiVzIiwKIAkJCQlmLAotCQkJCSJJUFNSQ19STkQsIElQRFNUX1JORCwgVFhTSVpFX1JORCwgVURQU1JDX1JORCwgVURQRFNUX1JORCwgTUFDU1JDX1JORCwgTUFDRFNUX1JORFxuIik7CisJCQkJIklQU1JDX1JORCwgSVBEU1RfUk5ELCBVRFBTUkNfUk5ELCBVRFBEU1RfUk5ELCAiCisJCQkJIk1BQ1NSQ19STkQsIE1BQ0RTVF9STkQsIFRYU0laRV9STkQsIElQVjYsIE1QTFNfUk5ELCBWSURfUk5ELCBTVklEX1JORFxuIik7CiAJCQlyZXR1cm4gY291bnQ7CiAJCX0KIAkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogZmxhZ3M9MHgleCIsIHBrdF9kZXYtPmZsYWdzKTsKQEAgLTE0NDUsNiArMTUwNiwxNjAgQEAKIAkJCW9mZnNldCArPSBzcHJpbnRmKHBnX3Jlc3VsdCArIG9mZnNldCwKIAkJCQkJICAiJTA4eCVzIiwgbnRvaGwocGt0X2Rldi0+bGFiZWxzW25dKSwKIAkJCQkJICBuID09IHBrdF9kZXYtPm5yX2xhYmVscy0xID8gIiIgOiAiLCIpOworCisJCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMgJiYgcGt0X2Rldi0+dmxhbl9pZCAhPSAweGZmZmYpIHsKKwkJCXBrdF9kZXYtPnZsYW5faWQgPSAweGZmZmY7IC8qIHR1cm4gb2ZmIFZMQU4vU1ZMQU4gKi8KKwkJCXBrdF9kZXYtPnN2bGFuX2lkID0gMHhmZmZmOworCisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRrKCJwa3RnZW46IFZMQU4vU1ZMQU4gYXV0byB0dXJuZWQgb2ZmXG4iKTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCisJaWYgKCFzdHJjbXAobmFtZSwgInZsYW5faWQiKSkgeworCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgNCwgJnZhbHVlKTsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KKwkJaSArPSBsZW47CisJCWlmICh2YWx1ZSA8PSA0MDk1KSB7CisJCQlwa3RfZGV2LT52bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFZMQU4gKi8KKworCQkJaWYgKGRlYnVnKQorCQkJCXByaW50aygicGt0Z2VuOiBWTEFOIHR1cm5lZCBvblxuIik7CisKKwkJCWlmIChkZWJ1ZyAmJiBwa3RfZGV2LT5ucl9sYWJlbHMpCisJCQkJcHJpbnRrKCJwa3RnZW46IE1QTFMgYXV0byB0dXJuZWQgb2ZmXG4iKTsKKworCQkJcGt0X2Rldi0+bnJfbGFiZWxzID0gMDsgICAgLyogdHVybiBvZmYgTVBMUyAqLworCQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogdmxhbl9pZD0ldSIsIHBrdF9kZXYtPnZsYW5faWQpOworCQl9IGVsc2UgeworCQkJcGt0X2Rldi0+dmxhbl9pZCA9IDB4ZmZmZjsgLyogdHVybiBvZmYgVkxBTi9TVkxBTiAqLworCQkJcGt0X2Rldi0+c3ZsYW5faWQgPSAweGZmZmY7CisKKwkJCWlmIChkZWJ1ZykKKwkJCQlwcmludGsoInBrdGdlbjogVkxBTi9TVkxBTiB0dXJuZWQgb2ZmXG4iKTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCisJaWYgKCFzdHJjbXAobmFtZSwgInZsYW5fcCIpKSB7CisJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCAxLCAmdmFsdWUpOworCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlpICs9IGxlbjsKKwkJaWYgKCh2YWx1ZSA8PSA3KSAmJiAocGt0X2Rldi0+dmxhbl9pZCAhPSAweGZmZmYpKSB7CisJCQlwa3RfZGV2LT52bGFuX3AgPSB2YWx1ZTsKKwkJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHZsYW5fcD0ldSIsIHBrdF9kZXYtPnZsYW5fcCk7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIkVSUk9SOiB2bGFuX3AgbXVzdCBiZSAwLTciKTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCisJaWYgKCFzdHJjbXAobmFtZSwgInZsYW5fY2ZpIikpIHsKKwkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CisJCWkgKz0gbGVuOworCQlpZiAoKHZhbHVlIDw9IDEpICYmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikpIHsKKwkJCXBrdF9kZXYtPnZsYW5fY2ZpID0gdmFsdWU7CisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiB2bGFuX2NmaT0ldSIsIHBrdF9kZXYtPnZsYW5fY2ZpKTsKKwkJfSBlbHNlIHsKKwkJCXNwcmludGYocGdfcmVzdWx0LCAiRVJST1I6IHZsYW5fY2ZpIG11c3QgYmUgMC0xIik7CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KKworCWlmICghc3RyY21wKG5hbWUsICJzdmxhbl9pZCIpKSB7CisJCWxlbiA9IG51bV9hcmcoJnVzZXJfYnVmZmVyW2ldLCA0LCAmdmFsdWUpOworCQlpZiAobGVuIDwgMCkgeworCQkJcmV0dXJuIGxlbjsKKwkJfQorCQlpICs9IGxlbjsKKwkJaWYgKCh2YWx1ZSA8PSA0MDk1KSAmJiAoKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSkpIHsKKwkJCXBrdF9kZXYtPnN2bGFuX2lkID0gdmFsdWU7ICAvKiB0dXJuIG9uIFNWTEFOICovCisKKwkJCWlmIChkZWJ1ZykKKwkJCQlwcmludGsoInBrdGdlbjogU1ZMQU4gdHVybmVkIG9uXG4iKTsKKworCQkJaWYgKGRlYnVnICYmIHBrdF9kZXYtPm5yX2xhYmVscykKKwkJCQlwcmludGsoInBrdGdlbjogTVBMUyBhdXRvIHR1cm5lZCBvZmZcbiIpOworCisJCQlwa3RfZGV2LT5ucl9sYWJlbHMgPSAwOyAgICAvKiB0dXJuIG9mZiBNUExTICovCisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzdmxhbl9pZD0ldSIsIHBrdF9kZXYtPnN2bGFuX2lkKTsKKwkJfSBlbHNlIHsKKwkJCXBrdF9kZXYtPnZsYW5faWQgPSAweGZmZmY7IC8qIHR1cm4gb2ZmIFZMQU4vU1ZMQU4gKi8KKwkJCXBrdF9kZXYtPnN2bGFuX2lkID0gMHhmZmZmOworCisJCQlpZiAoZGVidWcpCisJCQkJcHJpbnRrKCJwa3RnZW46IFZMQU4vU1ZMQU4gdHVybmVkIG9mZlxuIik7CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KKworCWlmICghc3RyY21wKG5hbWUsICJzdmxhbl9wIikpIHsKKwkJbGVuID0gbnVtX2FyZygmdXNlcl9idWZmZXJbaV0sIDEsICZ2YWx1ZSk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CisJCWkgKz0gbGVuOworCQlpZiAoKHZhbHVlIDw9IDcpICYmIChwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpKSB7CisJCQlwa3RfZGV2LT5zdmxhbl9wID0gdmFsdWU7CisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIk9LOiBzdmxhbl9wPSV1IiwgcGt0X2Rldi0+c3ZsYW5fcCk7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIkVSUk9SOiBzdmxhbl9wIG11c3QgYmUgMC03Iik7CisJCX0KKwkJcmV0dXJuIGNvdW50OworCX0KKworCWlmICghc3RyY21wKG5hbWUsICJzdmxhbl9jZmkiKSkgeworCQlsZW4gPSBudW1fYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMSwgJnZhbHVlKTsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KKwkJaSArPSBsZW47CisJCWlmICgodmFsdWUgPD0gMSkgJiYgKHBrdF9kZXYtPnN2bGFuX2lkICE9IDB4ZmZmZikpIHsKKwkJCXBrdF9kZXYtPnN2bGFuX2NmaSA9IHZhbHVlOworCQkJc3ByaW50ZihwZ19yZXN1bHQsICJPSzogc3ZsYW5fY2ZpPSV1IiwgcGt0X2Rldi0+c3ZsYW5fY2ZpKTsKKwkJfSBlbHNlIHsKKwkJCXNwcmludGYocGdfcmVzdWx0LCAiRVJST1I6IHN2bGFuX2NmaSBtdXN0IGJlIDAtMSIpOworCQl9CisJCXJldHVybiBjb3VudDsKKwl9CisKKwlpZiAoIXN0cmNtcChuYW1lLCAidG9zIikpIHsKKwkJX191MzIgdG1wX3ZhbHVlID0gMDsKKwkJbGVuID0gaGV4MzJfYXJnKCZ1c2VyX2J1ZmZlcltpXSwgMiwgJnRtcF92YWx1ZSk7CisJCWlmIChsZW4gPCAwKSB7CisJCQlyZXR1cm4gbGVuOworCQl9CisJCWkgKz0gbGVuOworCQlpZiAobGVuID09IDIpIHsKKwkJCXBrdF9kZXYtPnRvcyA9IHRtcF92YWx1ZTsKKwkJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHRvcz0weCUwMngiLCBwa3RfZGV2LT50b3MpOworCQl9IGVsc2UgeworCQkJc3ByaW50ZihwZ19yZXN1bHQsICJFUlJPUjogdG9zIG11c3QgYmUgMDAtZmYiKTsKKwkJfQorCQlyZXR1cm4gY291bnQ7CisJfQorCisJaWYgKCFzdHJjbXAobmFtZSwgInRyYWZmaWNfY2xhc3MiKSkgeworCQlfX3UzMiB0bXBfdmFsdWUgPSAwOworCQlsZW4gPSBoZXgzMl9hcmcoJnVzZXJfYnVmZmVyW2ldLCAyLCAmdG1wX3ZhbHVlKTsKKwkJaWYgKGxlbiA8IDApIHsKKwkJCXJldHVybiBsZW47CisJCX0KKwkJaSArPSBsZW47CisJCWlmIChsZW4gPT0gMikgeworCQkJcGt0X2Rldi0+dHJhZmZpY19jbGFzcyA9IHRtcF92YWx1ZTsKKwkJCXNwcmludGYocGdfcmVzdWx0LCAiT0s6IHRyYWZmaWNfY2xhc3M9MHglMDJ4IiwgcGt0X2Rldi0+dHJhZmZpY19jbGFzcyk7CisJCX0gZWxzZSB7CisJCQlzcHJpbnRmKHBnX3Jlc3VsdCwgIkVSUk9SOiB0cmFmZmljX2NsYXNzIG11c3QgYmUgMDAtZmYiKTsKKwkJfQogCQlyZXR1cm4gY291bnQ7CiAJfQogCkBAIC0xOTQ5LDYgKzIxNjQsMTQgQEAKIAkJCQkJCSAgICAgIGh0b25sKDB4MDAwZmZmZmYpKTsKIAl9CiAKKwlpZiAoKHBrdF9kZXYtPmZsYWdzICYgRl9WSURfUk5EKSAmJiAocGt0X2Rldi0+dmxhbl9pZCAhPSAweGZmZmYpKSB7CisJCXBrdF9kZXYtPnZsYW5faWQgPSBwa3RnZW5fcmFuZG9tKCkgJSA0MDk2OworCX0KKworCWlmICgocGt0X2Rldi0+ZmxhZ3MgJiBGX1NWSURfUk5EKSAmJiAocGt0X2Rldi0+c3ZsYW5faWQgIT0gMHhmZmZmKSkgeworCQlwa3RfZGV2LT5zdmxhbl9pZCA9IHBrdGdlbl9yYW5kb20oKSAlIDQwOTY7CisJfQorCiAJaWYgKHBrdF9kZXYtPnVkcF9zcmNfbWluIDwgcGt0X2Rldi0+dWRwX3NyY19tYXgpIHsKIAkJaWYgKHBrdF9kZXYtPmZsYWdzICYgRl9VRFBTUkNfUk5EKQogCQkJcGt0X2Rldi0+Y3VyX3VkcF9zcmMgPQpAQCAtMjA5MiwxMCArMjMxNSwxOCBAQAogCXN0cnVjdCBwa3RnZW5faGRyICpwZ2ggPSBOVUxMOwogCV9fYmUxNiBwcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOwogCV9fYmUzMiAqbXBsczsKKwlfX2JlMTYgKnZsYW5fdGNpID0gTlVMTDsgICAgICAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRlcyBwcmlvcml0eSBhbmQgVkxBTiBJRCAqLworCV9fYmUxNiAqdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBOVUxMOyAgLyogcGFja2V0IHR5cGUgSUQgZmllbGQgKG9yIGxlbikgZm9yIFZMQU4gdGFnICovCisJX19iZTE2ICpzdmxhbl90Y2kgPSBOVUxMOyAgICAgICAgICAgICAgICAvKiBFbmNhcHN1bGF0ZXMgcHJpb3JpdHkgYW5kIFNWTEFOIElEICovCisJX19iZTE2ICpzdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBOVUxMOyAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSBmb3IgU1ZMQU4gdGFnICovCisKIAogCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpCiAJCXByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9NUExTX1VDKTsKIAorCWlmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikKKwkJcHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwogCS8qIFVwZGF0ZSBhbnkgb2YgdGhlIHZhbHVlcywgdXNlZCB3aGVuIHdlJ3JlIGluY3JlbWVudGluZyB2YXJpb3VzCiAJICogZmllbGRzLgogCSAqLwpAQCAtMjEwMyw3ICsyMzM0LDkgQEAKIAogCWRhdGFsZW4gPSAob2Rldi0+aGFyZF9oZWFkZXJfbGVuICsgMTYpICYgfjB4ZjsKIAlza2IgPSBhbGxvY19za2IocGt0X2Rldi0+Y3VyX3BrdF9zaXplICsgNjQgKyBkYXRhbGVuICsKLQkJCXBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisJCQlwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMikgKworCQkJVkxBTl9UQUdfU0laRShwa3RfZGV2KSArIFNWTEFOX1RBR19TSVpFKHBrdF9kZXYpLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJc3ByaW50Zihwa3RfZGV2LT5yZXN1bHQsICJObyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yMTE2LDYgKzIzNDksMjQgQEAKIAltcGxzID0gKF9fYmUzMiAqKXNrYl9wdXQoc2tiLCBwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKF9fdTMyKSk7CiAJaWYgKHBrdF9kZXYtPm5yX2xhYmVscykKIAkJbXBsc19wdXNoKG1wbHMsIHBrdF9kZXYpOworCisJaWYgKHBrdF9kZXYtPnZsYW5faWQgIT0gMHhmZmZmKSB7CisJCWlmKHBrdF9kZXYtPnN2bGFuX2lkICE9IDB4ZmZmZikgeworCQkJc3ZsYW5fdGNpID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CisJCQkqc3ZsYW5fdGNpID0gaHRvbnMocGt0X2Rldi0+c3ZsYW5faWQpOworCQkJKnN2bGFuX3RjaSB8PSBwa3RfZGV2LT5zdmxhbl9wIDw8IDU7CisJCQkqc3ZsYW5fdGNpIHw9IHBrdF9kZXYtPnN2bGFuX2NmaSA8PCA0OworCQkJc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CisJCQkqc3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gX19jb25zdGFudF9odG9ucyhFVEhfUF84MDIxUSk7CisJCX0KKwkJdmxhbl90Y2kgPSAoX19iZTE2ICopc2tiX3B1dChza2IsIHNpemVvZihfX2JlMTYpKTsKKwkJKnZsYW5fdGNpID0gaHRvbnMocGt0X2Rldi0+dmxhbl9pZCk7CisJCSp2bGFuX3RjaSB8PSBwa3RfZGV2LT52bGFuX3AgPDwgNTsKKwkJKnZsYW5fdGNpIHw9IHBrdF9kZXYtPnZsYW5fY2ZpIDw8IDQ7CisJCXZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CisJCSp2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVApOworCX0KKwogCWlwaCA9IChzdHJ1Y3QgaXBoZHIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCXVkcGggPSAoc3RydWN0IHVkcGhkciAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCkBAIC0yMTI0LDcgKzIzNzUsNyBAQAogCiAJLyogRXRoICsgSVBoICsgVURQaCArIG1wbHMgKi8KIAlkYXRhbGVuID0gcGt0X2Rldi0+Y3VyX3BrdF9zaXplIC0gMTQgLSAyMCAtIDggLQotCQkgIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKTsKKwkJICBwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMikgLSBWTEFOX1RBR19TSVpFKHBrdF9kZXYpIC0gU1ZMQU5fVEFHX1NJWkUocGt0X2Rldik7CiAJaWYgKGRhdGFsZW4gPCBzaXplb2Yoc3RydWN0IHBrdGdlbl9oZHIpKQogCQlkYXRhbGVuID0gc2l6ZW9mKHN0cnVjdCBwa3RnZW5faGRyKTsKIApAQCAtMjEzNiw3ICsyMzg3LDcgQEAKIAlpcGgtPmlobCA9IDU7CiAJaXBoLT52ZXJzaW9uID0gNDsKIAlpcGgtPnR0bCA9IDMyOwotCWlwaC0+dG9zID0gMDsKKwlpcGgtPnRvcyA9IHBrdF9kZXYtPnRvczsKIAlpcGgtPnByb3RvY29sID0gSVBQUk9UT19VRFA7CS8qIFVEUCAqLwogCWlwaC0+c2FkZHIgPSBwa3RfZGV2LT5jdXJfc2FkZHI7CiAJaXBoLT5kYWRkciA9IHBrdF9kZXYtPmN1cl9kYWRkcjsKQEAgLTIxNDYsNyArMjM5Nyw4IEBACiAJaXBoLT5jaGVjayA9IDA7CiAJaXBoLT5jaGVjayA9IGlwX2Zhc3RfY3N1bSgodm9pZCAqKWlwaCwgaXBoLT5paGwpOwogCXNrYi0+cHJvdG9jb2wgPSBwcm90b2NvbDsKLQlza2ItPm1hYy5yYXcgPSAoKHU4ICopIGlwaCkgLSAxNCAtIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKTsKKwlza2ItPm1hYy5yYXcgPSAoKHU4ICopIGlwaCkgLSAxNCAtIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKSAtCisJCVZMQU5fVEFHX1NJWkUocGt0X2RldikgLSBTVkxBTl9UQUdfU0laRShwa3RfZGV2KTsKIAlza2ItPmRldiA9IG9kZXY7CiAJc2tiLT5wa3RfdHlwZSA9IFBBQ0tFVF9IT1NUOwogCXNrYi0+bmguaXBoID0gaXBoOwpAQCAtMjIxOCw3ICsyNDcwLDYgQEAKIAkJcGdoLT50dl9zZWMgPSBodG9ubCh0aW1lc3RhbXAudHZfc2VjKTsKIAkJcGdoLT50dl91c2VjID0gaHRvbmwodGltZXN0YW1wLnR2X3VzZWMpOwogCX0KLQlwa3RfZGV2LT5zZXFfbnVtKys7CiAKIAlyZXR1cm4gc2tiOwogfQpAQCAtMjQwMiwxNyArMjY1MywyNiBAQAogCXN0cnVjdCBwa3RnZW5faGRyICpwZ2ggPSBOVUxMOwogCV9fYmUxNiBwcm90b2NvbCA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfSVBWNik7CiAJX19iZTMyICptcGxzOworCV9fYmUxNiAqdmxhbl90Y2kgPSBOVUxMOyAgICAgICAgICAgICAgICAgLyogRW5jYXBzdWxhdGVzIHByaW9yaXR5IGFuZCBWTEFOIElEICovCisJX19iZTE2ICp2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IE5VTEw7ICAvKiBwYWNrZXQgdHlwZSBJRCBmaWVsZCAob3IgbGVuKSBmb3IgVkxBTiB0YWcgKi8KKwlfX2JlMTYgKnN2bGFuX3RjaSA9IE5VTEw7ICAgICAgICAgICAgICAgIC8qIEVuY2Fwc3VsYXRlcyBwcmlvcml0eSBhbmQgU1ZMQU4gSUQgKi8KKwlfX2JlMTYgKnN2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IE5VTEw7IC8qIHBhY2tldCB0eXBlIElEIGZpZWxkIChvciBsZW4pIGZvciBTVkxBTiB0YWcgKi8KIAogCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpCiAJCXByb3RvY29sID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9NUExTX1VDKTsKIAorCWlmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikKKwkJcHJvdG9jb2wgPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QXzgwMjFRKTsKKwogCS8qIFVwZGF0ZSBhbnkgb2YgdGhlIHZhbHVlcywgdXNlZCB3aGVuIHdlJ3JlIGluY3JlbWVudGluZyB2YXJpb3VzCiAJICogZmllbGRzLgogCSAqLwogCW1vZF9jdXJfaGVhZGVycyhwa3RfZGV2KTsKIAogCXNrYiA9IGFsbG9jX3NrYihwa3RfZGV2LT5jdXJfcGt0X3NpemUgKyA2NCArIDE2ICsKLQkJCXBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKSwgR0ZQX0FUT01JQyk7CisJCQlwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMikgKworCQkJVkxBTl9UQUdfU0laRShwa3RfZGV2KSArIFNWTEFOX1RBR19TSVpFKHBrdF9kZXYpLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpIHsKIAkJc3ByaW50Zihwa3RfZGV2LT5yZXN1bHQsICJObyBtZW1vcnkiKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNDI1LDE2ICsyNjg1LDM0IEBACiAJbXBscyA9IChfX2JlMzIgKilza2JfcHV0KHNrYiwgcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZihfX3UzMikpOwogCWlmIChwa3RfZGV2LT5ucl9sYWJlbHMpCiAJCW1wbHNfcHVzaChtcGxzLCBwa3RfZGV2KTsKKworCWlmIChwa3RfZGV2LT52bGFuX2lkICE9IDB4ZmZmZikgeworCQlpZihwa3RfZGV2LT5zdmxhbl9pZCAhPSAweGZmZmYpIHsKKwkJCXN2bGFuX3RjaSA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOworCQkJKnN2bGFuX3RjaSA9IGh0b25zKHBrdF9kZXYtPnN2bGFuX2lkKTsKKwkJCSpzdmxhbl90Y2kgfD0gcGt0X2Rldi0+c3ZsYW5fcCA8PCA1OworCQkJKnN2bGFuX3RjaSB8PSBwa3RfZGV2LT5zdmxhbl9jZmkgPDwgNDsKKwkJCXN2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOworCQkJKnN2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IF9fY29uc3RhbnRfaHRvbnMoRVRIX1BfODAyMVEpOworCQl9CisJCXZsYW5fdGNpID0gKF9fYmUxNiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTE2KSk7CisJCSp2bGFuX3RjaSA9IGh0b25zKHBrdF9kZXYtPnZsYW5faWQpOworCQkqdmxhbl90Y2kgfD0gcGt0X2Rldi0+dmxhbl9wIDw8IDU7CisJCSp2bGFuX3RjaSB8PSBwa3RfZGV2LT52bGFuX2NmaSA8PCA0OworCQl2bGFuX2VuY2Fwc3VsYXRlZF9wcm90byA9IChfX2JlMTYgKilza2JfcHV0KHNrYiwgc2l6ZW9mKF9fYmUxNikpOworCQkqdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8gPSBfX2NvbnN0YW50X2h0b25zKEVUSF9QX0lQVjYpOworCX0KKwogCWlwaCA9IChzdHJ1Y3QgaXB2NmhkciAqKXNrYl9wdXQoc2tiLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAl1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKTsKIAogCW1lbWNweShldGgsIHBrdF9kZXYtPmhoLCAxMik7Ci0JKih1MTYgKikgJiBldGhbMTJdID0gX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KTsKKwkqKHUxNiAqKSAmIGV0aFsxMl0gPSBwcm90b2NvbDsKIAogCS8qIEV0aCArIElQaCArIFVEUGggKyBtcGxzICovCiAJZGF0YWxlbiA9IHBrdF9kZXYtPmN1cl9wa3Rfc2l6ZSAtIDE0IC0KIAkJICBzaXplb2Yoc3RydWN0IGlwdjZoZHIpIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpIC0KLQkJICBwa3RfZGV2LT5ucl9sYWJlbHMqc2l6ZW9mKHUzMik7CisJCSAgcGt0X2Rldi0+bnJfbGFiZWxzKnNpemVvZih1MzIpIC0gVkxBTl9UQUdfU0laRShwa3RfZGV2KSAtIFNWTEFOX1RBR19TSVpFKHBrdF9kZXYpOwogCiAJaWYgKGRhdGFsZW4gPCBzaXplb2Yoc3RydWN0IHBrdGdlbl9oZHIpKSB7CiAJCWRhdGFsZW4gPSBzaXplb2Yoc3RydWN0IHBrdGdlbl9oZHIpOwpAQCAtMjQ1MCw2ICsyNzI4LDExIEBACiAKIAkqKHUzMiAqKSBpcGggPSBfX2NvbnN0YW50X2h0b25sKDB4NjAwMDAwMDApOwkvKiBWZXJzaW9uICsgZmxvdyAqLwogCisJaWYgKHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MpIHsKKwkJLyogVmVyc2lvbiArIHRyYWZmaWMgY2xhc3MgKyBmbG93ICgwKSAqLworCQkqKHUzMiAqKWlwaCB8PSBodG9ubCgweDYwMDAwMDAwIHwgKHBrdF9kZXYtPnRyYWZmaWNfY2xhc3MgPDwgMjApKTsKKwl9CisKIAlpcGgtPmhvcF9saW1pdCA9IDMyOwogCiAJaXBoLT5wYXlsb2FkX2xlbiA9IGh0b25zKHNpemVvZihzdHJ1Y3QgdWRwaGRyKSArIGRhdGFsZW4pOwpAQCAtMjQ1OCw3ICsyNzQxLDggQEAKIAlpcHY2X2FkZHJfY29weSgmaXBoLT5kYWRkciwgJnBrdF9kZXYtPmN1cl9pbjZfZGFkZHIpOwogCWlwdjZfYWRkcl9jb3B5KCZpcGgtPnNhZGRyLCAmcGt0X2Rldi0+Y3VyX2luNl9zYWRkcik7CiAKLQlza2ItPm1hYy5yYXcgPSAoKHU4ICopIGlwaCkgLSAxNCAtIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKTsKKwlza2ItPm1hYy5yYXcgPSAoKHU4ICopIGlwaCkgLSAxNCAtIHBrdF9kZXYtPm5yX2xhYmVscypzaXplb2YodTMyKSAtCisJCVZMQU5fVEFHX1NJWkUocGt0X2RldikgLSBTVkxBTl9UQUdfU0laRShwa3RfZGV2KTsKIAlza2ItPnByb3RvY29sID0gcHJvdG9jb2w7CiAJc2tiLT5kZXYgPSBvZGV2OwogCXNrYi0+cGt0X3R5cGUgPSBQQUNLRVRfSE9TVDsKQEAgLTI1MzEsNyArMjgxNSw3IEBACiAJCXBnaC0+dHZfc2VjID0gaHRvbmwodGltZXN0YW1wLnR2X3NlYyk7CiAJCXBnaC0+dHZfdXNlYyA9IGh0b25sKHRpbWVzdGFtcC50dl91c2VjKTsKIAl9Ci0JcGt0X2Rldi0+c2VxX251bSsrOworCS8qIHBrdF9kZXYtPnNlcV9udW0rKzsgRkY6IHlvdSByZWFsbHkgbWVhbiB0aGlzPyAqLwogCiAJcmV0dXJuIHNrYjsKIH0KQEAgLTMxNzcsNiArMzQ2MSwxMyBAQAogCXBrdF9kZXYtPnVkcF9kc3RfbWluID0gOTsKIAlwa3RfZGV2LT51ZHBfZHN0X21heCA9IDk7CiAKKwlwa3RfZGV2LT52bGFuX3AgPSAwOworCXBrdF9kZXYtPnZsYW5fY2ZpID0gMDsKKwlwa3RfZGV2LT52bGFuX2lkID0gMHhmZmZmOworCXBrdF9kZXYtPnN2bGFuX3AgPSAwOworCXBrdF9kZXYtPnN2bGFuX2NmaSA9IDA7CisJcGt0X2Rldi0+c3ZsYW5faWQgPSAweGZmZmY7CisKIAlzdHJuY3B5KHBrdF9kZXYtPmlmbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CiAKIAlpZiAoIXBrdGdlbl9zZXR1cF9kZXYocGt0X2RldikpIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3J0bmV0bGluay5jIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKaW5kZXggZDhlMjVlMC4uMjIxZTQwMyAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcnRuZXRsaW5rLmMKKysrIGIvbmV0L2NvcmUvcnRuZXRsaW5rLmMKQEAgLTU2Miw3ICs1NjIsNyBAQAogCiAJZXJyID0gbmxtc2dfcGFyc2UobmxoLCBzaXplb2YoKmlmbSksIHRiLCBJRkxBX01BWCwgaWZsYV9wb2xpY3kpOwogCWlmIChlcnIgPCAwKQotCQlnb3RvIGVycm91dDsKKwkJcmV0dXJuIGVycjsKIAogCWlmbSA9IG5sbXNnX2RhdGEobmxoKTsKIAlpZiAoaWZtLT5pZmlfaW5kZXggPj0gMCkgewpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvdXRpbHMuYyBiL25ldC9jb3JlL3V0aWxzLmMKaW5kZXggMjY4MjQ5MC4uOTRjNWQ3NiAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvdXRpbHMuYworKysgYi9uZXQvY29yZS91dGlscy5jCkBAIC0zLDcgKzMsNyBAQAogICoKICAqCUF1dGhvcnM6CiAgKgluZXRfcmFuZG9tIEFsYW4gQ294Ci0gKgluZXRfcmF0ZWxpbWl0IEFuZHkgS2xlZW4KKyAqCW5ldF9yYXRlbGltaXQgQW5kaSBLbGVlbgogICoJaW57NCw2fV9wdG9uIFlPU0hJRlVKSSBIaWRlYWtpLCBDb3B5cmlnaHQgKEMpMjAwNiBVU0FHSS9XSURFIFByb2plY3QKICAqCiAgKglDcmVhdGVkIGJ5IEFsZXhleSBLdXpuZXRzb3YgPGt1em5ldEBtczIuaW5yLmFjLnJ1PgpkaWZmIC0tZ2l0IGEvbmV0L2NvcmUvd2lyZWxlc3MuYyBiL25ldC9jb3JlL3dpcmVsZXNzLmMKaW5kZXggMzE2OGZjYS4uZmZmZjBkYSAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvd2lyZWxlc3MuYworKysgYi9uZXQvY29yZS93aXJlbGVzcy5jCkBAIC02OCw2ICs2OCwxNCBAQAogICoKICAqIHY4IC0gMTcuMDIuMDYgLSBKZWFuIElJCiAgKglvIFJ0TmV0bGluayByZXF1ZXN0cyBzdXBwb3J0IChTRVQvR0VUKQorICoKKyAqIHY4YiAtIDAzLjA4LjA2IC0gSGVyYmVydCBYdQorICoJbyBGaXggV2lyZWxlc3MgRXZlbnQgbG9ja2luZyBpc3N1ZXMuCisgKgorICogdjkgLSAxNC4zLjA2IC0gSmVhbiBJSQorICoJbyBDaGFuZ2UgbGVuZ3RoIGluIEVTU0lEIGFuZCBOSUNLIHRvIHN0cmxlbigpIGluc3RlYWQgb2Ygc3RybGVuKCkrMQorICoJbyBNYWtlIHN0YW5kYXJkX2lvY3RsX251bSBhbmQgc3RhbmRhcmRfZXZlbnRfbnVtIHVuc2lnbmVkCisgKglvIFJlbW92ZSAoc3RydWN0IG5ldF9kZXZpY2UgKiktPmdldF93aXJlbGVzc19zdGF0cygpCiAgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqIElOQ0xVREVTICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpAQCAtMjM0LDI0ICsyNDIsMjQgQEAKIAlbU0lPQ1NJV0VTU0lECS0gU0lPQ0lXRklSU1RdID0gewogCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9QT0lOVCwKIAkJLnRva2VuX3NpemUJPSAxLAotCQkubWF4X3Rva2Vucwk9IElXX0VTU0lEX01BWF9TSVpFICsgMSwKKwkJLm1heF90b2tlbnMJPSBJV19FU1NJRF9NQVhfU0laRSwKIAkJLmZsYWdzCQk9IElXX0RFU0NSX0ZMQUdfRVZFTlQsCiAJfSwKIAlbU0lPQ0dJV0VTU0lECS0gU0lPQ0lXRklSU1RdID0gewogCQkuaGVhZGVyX3R5cGUJPSBJV19IRUFERVJfVFlQRV9QT0lOVCwKIAkJLnRva2VuX3NpemUJPSAxLAotCQkubWF4X3Rva2Vucwk9IElXX0VTU0lEX01BWF9TSVpFICsgMSwKKwkJLm1heF90b2tlbnMJPSBJV19FU1NJRF9NQVhfU0laRSwKIAkJLmZsYWdzCQk9IElXX0RFU0NSX0ZMQUdfRFVNUCwKIAl9LAogCVtTSU9DU0lXTklDS04JLSBTSU9DSVdGSVJTVF0gPSB7CiAJCS5oZWFkZXJfdHlwZQk9IElXX0hFQURFUl9UWVBFX1BPSU5ULAogCQkudG9rZW5fc2l6ZQk9IDEsCi0JCS5tYXhfdG9rZW5zCT0gSVdfRVNTSURfTUFYX1NJWkUgKyAxLAorCQkubWF4X3Rva2Vucwk9IElXX0VTU0lEX01BWF9TSVpFLAogCX0sCiAJW1NJT0NHSVdOSUNLTgktIFNJT0NJV0ZJUlNUXSA9IHsKIAkJLmhlYWRlcl90eXBlCT0gSVdfSEVBREVSX1RZUEVfUE9JTlQsCiAJCS50b2tlbl9zaXplCT0gMSwKLQkJLm1heF90b2tlbnMJPSBJV19FU1NJRF9NQVhfU0laRSArIDEsCisJCS5tYXhfdG9rZW5zCT0gSVdfRVNTSURfTUFYX1NJWkUsCiAJfSwKIAlbU0lPQ1NJV1JBVEUJLSBTSU9DSVdGSVJTVF0gPSB7CiAJCS5oZWFkZXJfdHlwZQk9IElXX0hFQURFUl9UWVBFX1BBUkFNLApAQCAtMzM4LDggKzM0Niw4IEBACiAJCS5tYXhfdG9rZW5zCT0gc2l6ZW9mKHN0cnVjdCBpd19wbWtzYSksCiAJfSwKIH07Ci1zdGF0aWMgY29uc3QgaW50IHN0YW5kYXJkX2lvY3RsX251bSA9IChzaXplb2Yoc3RhbmRhcmRfaW9jdGwpIC8KLQkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpd19pb2N0bF9kZXNjcmlwdGlvbikpOworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHN0YW5kYXJkX2lvY3RsX251bSA9IChzaXplb2Yoc3RhbmRhcmRfaW9jdGwpIC8KKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgaXdfaW9jdGxfZGVzY3JpcHRpb24pKTsKIAogLyoKICAqIE1ldGEtZGF0YSBhYm91dCBhbGwgdGhlIGFkZGl0aW9uYWwgc3RhbmRhcmQgV2lyZWxlc3MgRXh0ZW5zaW9uIGV2ZW50cwpAQCAtMzg5LDggKzM5Nyw4IEBACiAJCS5tYXhfdG9rZW5zCT0gc2l6ZW9mKHN0cnVjdCBpd19wbWtpZF9jYW5kKSwKIAl9LAogfTsKLXN0YXRpYyBjb25zdCBpbnQgc3RhbmRhcmRfZXZlbnRfbnVtID0gKHNpemVvZihzdGFuZGFyZF9ldmVudCkgLwotCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IGl3X2lvY3RsX2Rlc2NyaXB0aW9uKSk7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc3RhbmRhcmRfZXZlbnRfbnVtID0gKHNpemVvZihzdGFuZGFyZF9ldmVudCkgLworCQkJCQkgICAgc2l6ZW9mKHN0cnVjdCBpd19pb2N0bF9kZXNjcmlwdGlvbikpOwogCiAvKiBTaXplIChpbiBieXRlcykgb2YgdGhlIHZhcmlvdXMgcHJpdmF0ZSBkYXRhIHR5cGVzICovCiBzdGF0aWMgY29uc3QgY2hhciBpd19wcml2X3R5cGVfc2l6ZVtdID0gewpAQCAtNDY1LDE3ICs0NzMsNiBAQAogCSAgIChkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMgIT0gTlVMTCkpCiAJCXJldHVybiBkZXYtPndpcmVsZXNzX2hhbmRsZXJzLT5nZXRfd2lyZWxlc3Nfc3RhdHMoZGV2KTsKIAotCS8qIE9sZCBsb2NhdGlvbiwgZmllbGQgdG8gYmUgcmVtb3ZlZCBpbiBuZXh0IFdFICovCi0JaWYoZGV2LT5nZXRfd2lyZWxlc3Nfc3RhdHMpIHsKLQkJc3RhdGljIGludCBwcmludGVkX21lc3NhZ2U7Ci0KLQkJaWYgKCFwcmludGVkX21lc3NhZ2UrKykKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlcyAoV0UpIDogRHJpdmVyIHVzaW5nIG9sZCAvcHJvYy9uZXQvd2lyZWxlc3Mgc3VwcG9ydCwgcGxlYXNlIGZpeCBkcml2ZXIgIVxuIiwKLQkJCQlkZXYtPm5hbWUpOwotCi0JCXJldHVybiBkZXYtPmdldF93aXJlbGVzc19zdGF0cyhkZXYpOwotCX0KLQogCS8qIE5vdCBmb3VuZCAqLwogCXJldHVybiAoc3RydWN0IGl3X3N0YXRpc3RpY3MgKikgTlVMTDsKIH0KQEAgLTE4NDMsOCArMTg0MCwzMyBAQAogICovCiAKICNpZmRlZiBXRV9FVkVOVF9SVE5FVExJTksKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qCisgKiBMb2NraW5nLi4uCisgKiAtLS0tLS0tLS0tCisgKgorICogVGhhbmtzIHRvIEhlcmJlcnQgWHUgPGhlcmJlcnRAZ29uZG9yLmFwYW5hLm9yZy5hdT4gZm9yIGZpeGluZworICogdGhlIGxvY2tpbmcgaXNzdWUgaW4gaGVyZSBhbmQgaW1wbGVtZW50aW5nIHRoaXMgY29kZSAhCisgKgorICogVGhlIGlzc3VlIDogd2lyZWxlc3Nfc2VuZF9ldmVudCgpIGlzIG9mdGVuIGNhbGxlZCBpbiBpbnRlcnJ1cHQgY29udGV4dCwKKyAqIHdoaWxlIHRoZSBOZXRsaW5rIGxheWVyIGNhbiBuZXZlciBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuCisgKiBUaGUgZnVsbHkgZm9ybWVkIFJ0TmV0bGluayBldmVudHMgYXJlIHF1ZXVlZCwgYW5kIHRoZW4gYSB0YXNrbGV0IGlzIHJ1bgorICogdG8gZmVlZCB0aG9zZSB0byBOZXRsaW5rLgorICogVGhlIHNrYl9xdWV1ZSBpcyBpbnRlcnJ1cHQgc2FmZSwgYW5kIGl0cyBsb2NrIGlzIG5vdCBoZWxkIHdoaWxlIGNhbGxpbmcKKyAqIE5ldGxpbmssIHNvIHRoZXJlIGlzIG5vIHBvc3NpYmlsaXR5IG9mIGRlYWxvY2suCisgKiBKZWFuIElJCisgKi8KKwogc3RhdGljIHN0cnVjdCBza19idWZmX2hlYWQgd2lyZWxlc3NfbmxldmVudF9xdWV1ZTsKIAorc3RhdGljIGludCBfX2luaXQgd2lyZWxlc3NfbmxldmVudF9pbml0KHZvaWQpCit7CisJc2tiX3F1ZXVlX2hlYWRfaW5pdCgmd2lyZWxlc3NfbmxldmVudF9xdWV1ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N1YnN5c19pbml0Y2FsbCh3aXJlbGVzc19ubGV2ZW50X2luaXQpOworCiBzdGF0aWMgdm9pZCB3aXJlbGVzc19ubGV2ZW50X3Byb2Nlc3ModW5zaWduZWQgbG9uZyBkYXRhKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0xOTIxLDEzICsxOTQzLDYgQEAKIAl0YXNrbGV0X3NjaGVkdWxlKCZ3aXJlbGVzc19ubGV2ZW50X3Rhc2tsZXQpOwogfQogCi1zdGF0aWMgaW50IF9faW5pdCB3aXJlbGVzc19ubGV2ZW50X2luaXQodm9pZCkKLXsKLQlza2JfcXVldWVfaGVhZF9pbml0KCZ3aXJlbGVzc19ubGV2ZW50X3F1ZXVlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3Vic3lzX2luaXRjYWxsKHdpcmVsZXNzX25sZXZlbnRfaW5pdCk7CiAjZW5kaWYJLyogV0VfRVZFTlRfUlRORVRMSU5LICovCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL25ldC9kY2NwL2lwdjQuYyBiL25ldC9kY2NwL2lwdjQuYwppbmRleCA2NmJlMjliLi5iZjY5MmMxIDEwMDY0NAotLS0gYS9uZXQvZGNjcC9pcHY0LmMKKysrIGIvbmV0L2RjY3AvaXB2NC5jCkBAIC01MCw3ICs1MCw3IEBACiAJc3RydWN0IGRjY3Bfc29jayAqZHAgPSBkY2NwX3NrKHNrKTsKIAljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnVzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopdWFkZHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7Ci0JdTMyIGRhZGRyLCBuZXh0aG9wOworCV9fYmUzMiBkYWRkciwgbmV4dGhvcDsKIAlpbnQgdG1wOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL25ldC9ldGhlcm5ldC9ldGguYyBiL25ldC9ldGhlcm5ldC9ldGguYwppbmRleCA0Mzg2MzkzLi40YmQ3OGM4IDEwMDY0NAotLS0gYS9uZXQvZXRoZXJuZXQvZXRoLmMKKysrIGIvbmV0L2V0aGVybmV0L2V0aC5jCkBAIC0yMjMsNyArMjIzLDcgQEAKICAqLwogaW50IGV0aF9oZWFkZXJfY2FjaGUoc3RydWN0IG5laWdoYm91ciAqbmVpZ2gsIHN0cnVjdCBoaF9jYWNoZSAqaGgpCiB7Ci0JdW5zaWduZWQgc2hvcnQgdHlwZSA9IGhoLT5oaF90eXBlOworCV9fYmUxNiB0eXBlID0gaGgtPmhoX3R5cGU7CiAJc3RydWN0IGV0aGhkciAqZXRoOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZWlnaC0+ZGV2OwogCmRpZmYgLS1naXQgYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jIGIvbmV0L2llZWU4MDIxMS9zb2Z0bWFjL2llZWU4MDIxMXNvZnRtYWNfd3guYwppbmRleCA3NTMyMGI2Li4yYWE3NzlkIDEwMDY0NAotLS0gYS9uZXQvaWVlZTgwMjExL3NvZnRtYWMvaWVlZTgwMjExc29mdG1hY193eC5jCisrKyBiL25ldC9pZWVlODAyMTEvc29mdG1hYy9pZWVlODAyMTFzb2Z0bWFjX3d4LmMKQEAgLTgwLDEwICs4MCwxMCBAQAogCSAqIElmIGl0J3Mgb3VyIG5ldHdvcmssIGlnbm9yZSB0aGUgY2hhbmdlLCB3ZSdyZSBhbHJlYWR5IGRvaW5nIGl0IQogCSAqLwogCWlmKChzbS0+YXNzb2NpbmZvLmFzc29jaWF0aW5nIHx8IHNtLT5hc3NvY2lhdGVkKSAmJgotCSAgIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGggJiYgZXh0cmEpKSB7CisJICAgKGRhdGEtPmVzc2lkLmZsYWdzICYmIGRhdGEtPmVzc2lkLmxlbmd0aCkpIHsKIAkJLyogR2V0IHRoZSBhc3NvY2lhdGluZyBuZXR3b3JrICovCiAJCW4gPSBpZWVlODAyMTFzb2Z0bWFjX2dldF9uZXR3b3JrX2J5X2Jzc2lkKHNtLCBzbS0+YXNzb2NpbmZvLmJzc2lkKTsKLQkJaWYobiAmJiBuLT5lc3NpZC5sZW4gPT0gKGRhdGEtPmVzc2lkLmxlbmd0aCAtIDEpICYmCisJCWlmKG4gJiYgbi0+ZXNzaWQubGVuID09IGRhdGEtPmVzc2lkLmxlbmd0aCAmJgogCQkgICAhbWVtY21wKG4tPmVzc2lkLmRhdGEsIGV4dHJhLCBuLT5lc3NpZC5sZW4pKSB7CiAJCQlkcHJpbnRrKEtFUk5fSU5GTyBQRlggIkFscmVhZHkgYXNzb2NpYXRpbmcgb3IgYXNzb2NpYXRlZCB0byAiTUFDX0ZNVCJcbiIsCiAJCQkJTUFDX0FSRyhzbS0+YXNzb2NpbmZvLmJzc2lkKSk7CkBAIC0xMDksOCArMTA5LDggQEAKIAlzbS0+YXNzb2NpbmZvLnN0YXRpY19lc3NpZCA9IDA7CiAJc20tPmFzc29jaW5mby5hc3NvY193YWl0ID0gMDsKIAotCWlmIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGggJiYgZXh0cmEgLypyZXF1aXJlZD8qLykgewotCQlsZW5ndGggPSBtaW4oZGF0YS0+ZXNzaWQubGVuZ3RoIC0gMSwgSVdfRVNTSURfTUFYX1NJWkUpOworCWlmIChkYXRhLT5lc3NpZC5mbGFncyAmJiBkYXRhLT5lc3NpZC5sZW5ndGgpIHsKKwkJbGVuZ3RoID0gbWluKChpbnQpZGF0YS0+ZXNzaWQubGVuZ3RoLCBJV19FU1NJRF9NQVhfU0laRSk7CiAJCWlmIChsZW5ndGgpIHsKIAkJCW1lbWNweShzbS0+YXNzb2NpbmZvLnJlcV9lc3NpZC5kYXRhLCBleHRyYSwgbGVuZ3RoKTsKIAkJCXNtLT5hc3NvY2luZm8uc3RhdGljX2Vzc2lkID0gMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2FmX2luZXQuYyBiL25ldC9pcHY0L2FmX2luZXQuYwppbmRleCBmZGQ4OWUzLi5lZGNmMDkzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hZl9pbmV0LmMKKysrIGIvbmV0L2lwdjQvYWZfaW5ldC5jCkBAIC05OTYsNyArOTk2LDcgQEAKIAlzdHJ1Y3QgcnRhYmxlICpydDsKIAlfX3UzMiBvbGRfc2FkZHIgPSBpbmV0LT5zYWRkcjsKIAlfX3UzMiBuZXdfc2FkZHI7Ci0JX191MzIgZGFkZHIgPSBpbmV0LT5kYWRkcjsKKwlfX2JlMzIgZGFkZHIgPSBpbmV0LT5kYWRkcjsKIAogCWlmIChpbmV0LT5vcHQgJiYgaW5ldC0+b3B0LT5zcnIpCiAJCWRhZGRyID0gaW5ldC0+b3B0LT5mYWRkcjsKQEAgLTEwNDMsNyArMTA0Myw3IEBACiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilfX3NrX2RzdF9jaGVjayhzaywgMCk7Ci0JdTMyIGRhZGRyOworCV9fYmUzMiBkYWRkcjsKIAlpbnQgZXJyOwogCiAJLyogUm91dGUgaXMgT0ssIG5vdGhpbmcgdG8gZG8uICovCkBAIC0xMzQyLDEwICsxMzQyLDEwIEBACiAJcmMgPSAwOwogb3V0OgogCXJldHVybiByYzsKLW91dF91bnJlZ2lzdGVyX3RjcF9wcm90bzoKLQlwcm90b191bnJlZ2lzdGVyKCZ0Y3BfcHJvdCk7CiBvdXRfdW5yZWdpc3Rlcl91ZHBfcHJvdG86CiAJcHJvdG9fdW5yZWdpc3RlcigmdWRwX3Byb3QpOworb3V0X3VucmVnaXN0ZXJfdGNwX3Byb3RvOgorCXByb3RvX3VucmVnaXN0ZXIoJnRjcF9wcm90KTsKIAlnb3RvIG91dDsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvYXJwLmMgYi9uZXQvaXB2NC9hcnAuYwppbmRleCBjOGEzNzIzLi5jZmU1Yzg0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9hcnAuYworKysgYi9uZXQvaXB2NC9hcnAuYwpAQCAtMjM0LDcgKzIzNCw3IEBACiAKIHN0YXRpYyBpbnQgYXJwX2NvbnN0cnVjdG9yKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoKQogewotCXUzMiBhZGRyID0gKih1MzIqKW5laWdoLT5wcmltYXJ5X2tleTsKKwlfX2JlMzIgYWRkciA9ICooX19iZTMyKiluZWlnaC0+cHJpbWFyeV9rZXk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5laWdoLT5kZXY7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBuZWlnaF9wYXJtcyAqcGFybXM7CkBAIC0zMzAsMTAgKzMzMCwxMCBAQAogCiBzdGF0aWMgdm9pZCBhcnBfc29saWNpdChzdHJ1Y3QgbmVpZ2hib3VyICpuZWlnaCwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKLQl1MzIgc2FkZHIgPSAwOworCV9fYmUzMiBzYWRkciA9IDA7CiAJdTggICpkc3RfaGEgPSBOVUxMOwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBuZWlnaC0+ZGV2OwotCXUzMiB0YXJnZXQgPSAqKHUzMiopbmVpZ2gtPnByaW1hcnlfa2V5OworCV9fYmUzMiB0YXJnZXQgPSAqKF9fYmUzMiopbmVpZ2gtPnByaW1hcnlfa2V5OwogCWludCBwcm9iZXMgPSBhdG9taWNfcmVhZCgmbmVpZ2gtPnByb2Jlcyk7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOwogCkBAIC0zODUsNyArMzg1LDcgQEAKIH0KIAogc3RhdGljIGludCBhcnBfaWdub3JlKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKLQkJICAgICAgdTMyIHNpcCwgdTMyIHRpcCkKKwkJICAgICAgX19iZTMyIHNpcCwgX19iZTMyIHRpcCkKIHsKIAlpbnQgc2NvcGU7CiAKQEAgLTQyMCw3ICs0MjAsNyBAQAogCXJldHVybiAhaW5ldF9jb25maXJtX2FkZHIoZGV2LCBzaXAsIHRpcCwgc2NvcGUpOwogfQogCi1zdGF0aWMgaW50IGFycF9maWx0ZXIoX191MzIgc2lwLCBfX3UzMiB0aXAsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGFycF9maWx0ZXIoX19iZTMyIHNpcCwgX19iZTMyIHRpcCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPSB7IC5kYWRkciA9IHNpcCwKIAkJCQkJCSAuc2FkZHIgPSB0aXAgfSB9IH07CkBAIC00NDksNyArNDQ5LDcgQEAKICAqCWlzIGFsbG93ZWQgdG8gdXNlIHRoaXMgZnVuY3Rpb24sIGl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkLiAtLUFOSwogICovCiAKLXN0YXRpYyBpbnQgYXJwX3NldF9wcmVkZWZpbmVkKGludCBhZGRyX2hpbnQsIHVuc2lnbmVkIGNoYXIgKiBoYWRkciwgdTMyIHBhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKK3N0YXRpYyBpbnQgYXJwX3NldF9wcmVkZWZpbmVkKGludCBhZGRyX2hpbnQsIHVuc2lnbmVkIGNoYXIgKiBoYWRkciwgX19iZTMyIHBhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAlzd2l0Y2ggKGFkZHJfaGludCkgewogCWNhc2UgUlROX0xPQ0FMOgpAQCAtNDcwLDcgKzQ3MCw3IEBACiBpbnQgYXJwX2ZpbmQodW5zaWduZWQgY2hhciAqaGFkZHIsIHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHNrYi0+ZGV2OwotCXUzMiBwYWRkcjsKKwlfX2JlMzIgcGFkZHI7CiAJc3RydWN0IG5laWdoYm91ciAqbjsKIAogCWlmICghc2tiLT5kc3QpIHsKQEAgLTUxMSw3ICs1MTEsNyBAQAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG4gPT0gTlVMTCkgewotCQl1MzIgbmV4dGhvcCA9ICgoc3RydWN0IHJ0YWJsZSopZHN0KS0+cnRfZ2F0ZXdheTsKKwkJX19iZTMyIG5leHRob3AgPSAoKHN0cnVjdCBydGFibGUqKWRzdCktPnJ0X2dhdGV3YXk7CiAJCWlmIChkZXYtPmZsYWdzJihJRkZfTE9PUEJBQ0t8SUZGX1BPSU5UT1BPSU5UKSkKIAkJCW5leHRob3AgPSAwOwogCQluID0gX19uZWlnaF9sb29rdXBfZXJybm8oCkBAIC01NjAsOCArNTYwLDggQEAKICAqCUNyZWF0ZSBhbiBhcnAgcGFja2V0LiBJZiAoZGVzdF9odyA9PSBOVUxMKSwgd2UgY3JlYXRlIGEgYnJvYWRjYXN0CiAgKgltZXNzYWdlLgogICovCi1zdHJ1Y3Qgc2tfYnVmZiAqYXJwX2NyZWF0ZShpbnQgdHlwZSwgaW50IHB0eXBlLCB1MzIgZGVzdF9pcCwKLQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBzcmNfaXAsCitzdHJ1Y3Qgc2tfYnVmZiAqYXJwX2NyZWF0ZShpbnQgdHlwZSwgaW50IHB0eXBlLCBfX2JlMzIgZGVzdF9pcCwKKwkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBzcmNfaXAsCiAJCQkgICB1bnNpZ25lZCBjaGFyICpkZXN0X2h3LCB1bnNpZ25lZCBjaGFyICpzcmNfaHcsCiAJCQkgICB1bnNpZ25lZCBjaGFyICp0YXJnZXRfaHcpCiB7CkBAIC02NzUsOCArNjc1LDggQEAKIC8qCiAgKglDcmVhdGUgYW5kIHNlbmQgYW4gYXJwIHBhY2tldC4KICAqLwotdm9pZCBhcnBfc2VuZChpbnQgdHlwZSwgaW50IHB0eXBlLCB1MzIgZGVzdF9pcCwgCi0JICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyIHNyY19pcCwgCit2b2lkIGFycF9zZW5kKGludCB0eXBlLCBpbnQgcHR5cGUsIF9fYmUzMiBkZXN0X2lwLAorCSAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBzcmNfaXAsCiAJICAgICAgdW5zaWduZWQgY2hhciAqZGVzdF9odywgdW5zaWduZWQgY2hhciAqc3JjX2h3LAogCSAgICAgIHVuc2lnbmVkIGNoYXIgKnRhcmdldF9odykKIHsKQEAgLTcxMCw3ICs3MTAsNyBAQAogCXVuc2lnbmVkIGNoYXIgKmFycF9wdHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJdW5zaWduZWQgY2hhciAqc2hhLCAqdGhhOwotCXUzMiBzaXAsIHRpcDsKKwlfX2JlMzIgc2lwLCB0aXA7CiAJdTE2IGRldl90eXBlID0gZGV2LT50eXBlOwogCWludCBhZGRyX3R5cGU7CiAJc3RydWN0IG5laWdoYm91ciAqbjsKQEAgLTk2OSwxMyArOTY5LDEzIEBACiAKIHN0YXRpYyBpbnQgYXJwX3JlcV9zZXQoc3RydWN0IGFycHJlcSAqciwgc3RydWN0IG5ldF9kZXZpY2UgKiBkZXYpCiB7Ci0JdTMyIGlwID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnItPmFycF9wYSktPnNpbl9hZGRyLnNfYWRkcjsKKwlfX2JlMzIgaXAgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmci0+YXJwX3BhKS0+c2luX2FkZHIuc19hZGRyOwogCXN0cnVjdCBuZWlnaGJvdXIgKm5laWdoOwogCWludCBlcnI7CiAKIAlpZiAoci0+YXJwX2ZsYWdzJkFURl9QVUJMKSB7Ci0JCXUzMiBtYXNrID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnItPmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyOwotCQlpZiAobWFzayAmJiBtYXNrICE9IDB4RkZGRkZGRkYpCisJCV9fYmUzMiBtYXNrID0gKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJnItPmFycF9uZXRtYXNrKS0+c2luX2FkZHIuc19hZGRyOworCQlpZiAobWFzayAmJiBtYXNrICE9IGh0b25sKDB4RkZGRkZGRkYpKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmICghZGV2ICYmIChyLT5hcnBfZmxhZ3MgJiBBVEZfQ09NKSkgewogCQkJZGV2ID0gZGV2X2dldGJ5aHdhZGRyKHItPmFycF9oYS5zYV9mYW1pbHksIHItPmFycF9oYS5zYV9kYXRhKTsKQEAgLTEwNjMsNyArMTA2Myw3IEBACiAKIHN0YXRpYyBpbnQgYXJwX3JlcV9nZXQoc3RydWN0IGFycHJlcSAqciwgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl1MzIgaXAgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmci0+YXJwX3BhKS0+c2luX2FkZHIuc19hZGRyOworCV9fYmUzMiBpcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopICZyLT5hcnBfcGEpLT5zaW5fYWRkci5zX2FkZHI7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAJaW50IGVyciA9IC1FTlhJTzsKIApAQCAtMTA4NCwxMyArMTA4NCwxMyBAQAogc3RhdGljIGludCBhcnBfcmVxX2RlbGV0ZShzdHJ1Y3QgYXJwcmVxICpyLCBzdHJ1Y3QgbmV0X2RldmljZSAqIGRldikKIHsKIAlpbnQgZXJyOwotCXUzMiBpcCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopJnItPmFycF9wYSktPnNpbl9hZGRyLnNfYWRkcjsKKwlfX2JlMzIgaXAgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLT5hcnBfcGEpLT5zaW5fYWRkci5zX2FkZHI7CiAJc3RydWN0IG5laWdoYm91ciAqbmVpZ2g7CiAKIAlpZiAoci0+YXJwX2ZsYWdzICYgQVRGX1BVQkwpIHsKLQkJdTMyIG1hc2sgPQorCQlfX2JlMzIgbWFzayA9CiAJCSAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyLT5hcnBfbmV0bWFzayktPnNpbl9hZGRyLnNfYWRkcjsKLQkJaWYgKG1hc2sgPT0gMHhGRkZGRkZGRikKKwkJaWYgKG1hc2sgPT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCQlyZXR1cm4gcG5laWdoX2RlbGV0ZSgmYXJwX3RibCwgJmlwLCBkZXYpOwogCQlpZiAobWFzayA9PSAwKSB7CiAJCQlpZiAoZGV2ID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2NpcHNvX2lwdjQuYyBiL25ldC9pcHY0L2NpcHNvX2lwdjQuYwppbmRleCBlNmNlMGIzLi5hOGUyZTg3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9jaXBzb19pcHY0LmMKKysrIGIvbmV0L2lwdjQvY2lwc29faXB2NC5jCkBAIC00NzQsNiArNDc0LDcgQEAKIC8qKgogICogY2lwc29fdjRfZG9pX3JlbW92ZSAtIFJlbW92ZSBhbiBleGlzdGluZyBET0kgZnJvbSB0aGUgQ0lQU08gcHJvdG9jb2wgZW5naW5lCiAgKiBAZG9pOiB0aGUgRE9JIHZhbHVlCisgKiBAYXVkaXRfc2VjaWQ6IHRoZSBMU00gc2VjaWQgdG8gdXNlIGluIHRoZSBhdWRpdCBtZXNzYWdlCiAgKiBAY2FsbGJhY2s6IHRoZSBET0kgY2xlYW51cC9mcmVlIGNhbGxiYWNrCiAgKgogICogRGVzY3JpcHRpb246CkBAIC00ODMsNyArNDg0LDkgQEAKICAqIHN1Y2Nlc3MgYW5kIG5lZ2F0aXZlIHZhbHVlcyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IGNpcHNvX3Y0X2RvaV9yZW1vdmUodTMyIGRvaSwgdm9pZCAoKmNhbGxiYWNrKSAoc3RydWN0IHJjdV9oZWFkICogaGVhZCkpCitpbnQgY2lwc29fdjRfZG9pX3JlbW92ZSh1MzIgZG9pLAorCQkJc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbywKKwkJCXZvaWQgKCpjYWxsYmFjaykgKHN0cnVjdCByY3VfaGVhZCAqIGhlYWQpKQogewogCXN0cnVjdCBjaXBzb192NF9kb2kgKmRvaV9kZWY7CiAJc3RydWN0IGNpcHNvX3Y0X2RvbWhzaF9lbnRyeSAqZG9tX2l0ZXI7CkBAIC01MDIsNyArNTA1LDggQEAKIAkJc3Bpbl91bmxvY2soJmNpcHNvX3Y0X2RvaV9saXN0X2xvY2spOwogCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShkb21faXRlciwgJmRvaV9kZWYtPmRvbV9saXN0LCBsaXN0KQogCQkJaWYgKGRvbV9pdGVyLT52YWxpZCkKLQkJCQluZXRsYmxfZG9taHNoX3JlbW92ZShkb21faXRlci0+ZG9tYWluKTsKKwkJCQluZXRsYmxfZG9taHNoX3JlbW92ZShkb21faXRlci0+ZG9tYWluLAorCQkJCQkJICAgICBhdWRpdF9pbmZvKTsKIAkJY2lwc29fdjRfY2FjaGVfaW52YWxpZGF0ZSgpOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZGF0YWdyYW0uYyBiL25ldC9pcHY0L2RhdGFncmFtLmMKaW5kZXggZWM1ZGE0Zi4uN2IwNjhhOCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZGF0YWdyYW0uYworKysgYi9uZXQvaXB2NC9kYXRhZ3JhbS5jCkBAIC0yNSw3ICsyNSw3IEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgdWFkZHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQ7Ci0JdTMyIHNhZGRyOworCV9fYmUzMiBzYWRkcjsKIAlpbnQgb2lmOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2RldmluZXQuYyBiL25ldC9pcHY0L2RldmluZXQuYwppbmRleCA4ZThkMWYxLi43NjAyYzc5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9kZXZpbmV0LmMKKysrIGIvbmV0L2lwdjQvZGV2aW5ldC5jCkBAIC0yMjQsNyArMjI0LDcgQEAKIAljYWxsX3JjdSgmaW5fZGV2LT5yY3VfaGVhZCwgaW5fZGV2X3JjdV9wdXQpOwogfQogCi1pbnQgaW5ldF9hZGRyX29ubGluayhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBhLCB1MzIgYikKK2ludCBpbmV0X2FkZHJfb25saW5rKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGEsIF9fYmUzMiBiKQogewogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3JfcHJpbWFyeV9pZmEoaW5fZGV2KSB7CkBAIC00MjksOCArNDI5LDggQEAKIAogLyogQ2FsbGVkIG9ubHkgZnJvbSBSVE5MIHNlbWFwaG9yZWQgY29udGV4dC4gTm8gbG9ja3MuICovCiAKLXN0cnVjdCBpbl9pZmFkZHIgKmluZXRfaWZhX2J5cHJlZml4KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgdTMyIHByZWZpeCwKLQkJCQkgICAgdTMyIG1hc2spCitzdHJ1Y3QgaW5faWZhZGRyICppbmV0X2lmYV9ieXByZWZpeChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBwcmVmaXgsCisJCQkJICAgIF9fYmUzMiBtYXNrKQogewogCUFTU0VSVF9SVE5MKCk7CiAKQEAgLTQ2Nyw3ICs0NjcsNyBAQAogCWZvciAoaWZhcCA9ICZpbl9kZXYtPmlmYV9saXN0OyAoaWZhID0gKmlmYXApICE9IE5VTEw7CiAJICAgICBpZmFwID0gJmlmYS0+aWZhX25leHQpIHsKIAkJaWYgKHRiW0lGQV9MT0NBTF0gJiYKLQkJICAgIGlmYS0+aWZhX2xvY2FsICE9IG5sYV9nZXRfdTMyKHRiW0lGQV9MT0NBTF0pKQorCQkgICAgaWZhLT5pZmFfbG9jYWwgIT0gbmxhX2dldF9iZTMyKHRiW0lGQV9MT0NBTF0pKQogCQkJY29udGludWU7CiAKIAkJaWYgKHRiW0lGQV9MQUJFTF0gJiYgbmxhX3N0cmNtcCh0YltJRkFfTEFCRUxdLCBpZmEtPmlmYV9sYWJlbCkpCkBAIC00NzUsNyArNDc1LDcgQEAKIAogCQlpZiAodGJbSUZBX0FERFJFU1NdICYmCiAJCSAgICAoaWZtLT5pZmFfcHJlZml4bGVuICE9IGlmYS0+aWZhX3ByZWZpeGxlbiB8fAotCQkgICAgIWluZXRfaWZhX21hdGNoKG5sYV9nZXRfdTMyKHRiW0lGQV9BRERSRVNTXSksIGlmYSkpKQorCQkgICAgIWluZXRfaWZhX21hdGNoKG5sYV9nZXRfYmUzMih0YltJRkFfQUREUkVTU10pLCBpZmEpKSkKIAkJCWNvbnRpbnVlOwogCiAJCV9faW5ldF9kZWxfaWZhKGluX2RldiwgaWZhcCwgMSwgbmxoLCBORVRMSU5LX0NCKHNrYikucGlkKTsKQEAgLTU0MCwxNCArNTQwLDE0IEBACiAJaWZhLT5pZmFfc2NvcGUgPSBpZm0tPmlmYV9zY29wZTsKIAlpZmEtPmlmYV9kZXYgPSBpbl9kZXY7CiAKLQlpZmEtPmlmYV9sb2NhbCA9IG5sYV9nZXRfdTMyKHRiW0lGQV9MT0NBTF0pOwotCWlmYS0+aWZhX2FkZHJlc3MgPSBubGFfZ2V0X3UzMih0YltJRkFfQUREUkVTU10pOworCWlmYS0+aWZhX2xvY2FsID0gbmxhX2dldF9iZTMyKHRiW0lGQV9MT0NBTF0pOworCWlmYS0+aWZhX2FkZHJlc3MgPSBubGFfZ2V0X2JlMzIodGJbSUZBX0FERFJFU1NdKTsKIAogCWlmICh0YltJRkFfQlJPQURDQVNUXSkKLQkJaWZhLT5pZmFfYnJvYWRjYXN0ID0gbmxhX2dldF91MzIodGJbSUZBX0JST0FEQ0FTVF0pOworCQlpZmEtPmlmYV9icm9hZGNhc3QgPSBubGFfZ2V0X2JlMzIodGJbSUZBX0JST0FEQ0FTVF0pOwogCiAJaWYgKHRiW0lGQV9BTllDQVNUXSkKLQkJaWZhLT5pZmFfYW55Y2FzdCA9IG5sYV9nZXRfdTMyKHRiW0lGQV9BTllDQVNUXSk7CisJCWlmYS0+aWZhX2FueWNhc3QgPSBubGFfZ2V0X2JlMzIodGJbSUZBX0FOWUNBU1RdKTsKIAogCWlmICh0YltJRkFfTEFCRUxdKQogCQlubGFfc3RybGNweShpZmEtPmlmYV9sYWJlbCwgdGJbSUZBX0xBQkVMXSwgSUZOQU1TSVopOwpAQCAtODA1LDcgKzgwNSw3IEBACiAJCQlicmVhazsKIAkJcmV0ID0gMDsKIAkJaWYgKGlmYS0+aWZhX21hc2sgIT0gc2luLT5zaW5fYWRkci5zX2FkZHIpIHsKLQkJCXUzMiBvbGRfbWFzayA9IGlmYS0+aWZhX21hc2s7CisJCQlfX2JlMzIgb2xkX21hc2sgPSBpZmEtPmlmYV9tYXNrOwogCQkJaW5ldF9kZWxfaWZhKGluX2RldiwgaWZhcCwgMCk7CiAJCQlpZmEtPmlmYV9tYXNrID0gc2luLT5zaW5fYWRkci5zX2FkZHI7CiAJCQlpZmEtPmlmYV9wcmVmaXhsZW4gPSBpbmV0X21hc2tfbGVuKGlmYS0+aWZhX21hc2spOwpAQCAtODc2LDkgKzg3Niw5IEBACiAJcmV0dXJuIGRvbmU7CiB9CiAKLXUzMiBpbmV0X3NlbGVjdF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUzMiBkc3QsIGludCBzY29wZSkKK19fYmUzMiBpbmV0X3NlbGVjdF9hZGRyKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIF9fYmUzMiBkc3QsIGludCBzY29wZSkKIHsKLQl1MzIgYWRkciA9IDA7CisJX19iZTMyIGFkZHIgPSAwOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAogCXJjdV9yZWFkX2xvY2soKTsKQEAgLTkyNywxMSArOTI3LDExIEBACiAJcmV0dXJuIGFkZHI7CiB9CiAKLXN0YXRpYyB1MzIgY29uZmlybV9hZGRyX2luZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgdTMyIGRzdCwKLQkJCSAgICAgIHUzMiBsb2NhbCwgaW50IHNjb3BlKQorc3RhdGljIF9fYmUzMiBjb25maXJtX2FkZHJfaW5kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgZHN0LAorCQkJICAgICAgX19iZTMyIGxvY2FsLCBpbnQgc2NvcGUpCiB7CiAJaW50IHNhbWUgPSAwOwotCXUzMiBhZGRyID0gMDsKKwlfX2JlMzIgYWRkciA9IDA7CiAKIAlmb3JfaWZhKGluX2RldikgewogCQlpZiAoIWFkZHIgJiYKQEAgLTk3MSw5ICs5NzEsOSBAQAogICogLSBsb2NhbDogYWRkcmVzcywgMD1hdXRvc2VsZWN0IHRoZSBsb2NhbCBhZGRyZXNzCiAgKiAtIHNjb3BlOiBtYXhpbXVtIGFsbG93ZWQgc2NvcGUgdmFsdWUgZm9yIHRoZSBsb2NhbCBhZGRyZXNzCiAgKi8KLXUzMiBpbmV0X2NvbmZpcm1fYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MzIgZHN0LCB1MzIgbG9jYWwsIGludCBzY29wZSkKK19fYmUzMiBpbmV0X2NvbmZpcm1fYWRkcihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBfX2JlMzIgZHN0LCBfX2JlMzIgbG9jYWwsIGludCBzY29wZSkKIHsKLQl1MzIgYWRkciA9IDA7CisJX19iZTMyIGFkZHIgPSAwOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAogCWlmIChkZXYpIHsKQEAgLTExMzgsMTYgKzExMzgsMTYgQEAKIAlpZm0tPmlmYV9pbmRleCA9IGlmYS0+aWZhX2Rldi0+ZGV2LT5pZmluZGV4OwogCiAJaWYgKGlmYS0+aWZhX2FkZHJlc3MpCi0JCU5MQV9QVVRfVTMyKHNrYiwgSUZBX0FERFJFU1MsIGlmYS0+aWZhX2FkZHJlc3MpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBJRkFfQUREUkVTUywgaWZhLT5pZmFfYWRkcmVzcyk7CiAKIAlpZiAoaWZhLT5pZmFfbG9jYWwpCi0JCU5MQV9QVVRfVTMyKHNrYiwgSUZBX0xPQ0FMLCBpZmEtPmlmYV9sb2NhbCk7CisJCU5MQV9QVVRfQkUzMihza2IsIElGQV9MT0NBTCwgaWZhLT5pZmFfbG9jYWwpOwogCiAJaWYgKGlmYS0+aWZhX2Jyb2FkY2FzdCkKLQkJTkxBX1BVVF9VMzIoc2tiLCBJRkFfQlJPQURDQVNULCBpZmEtPmlmYV9icm9hZGNhc3QpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBJRkFfQlJPQURDQVNULCBpZmEtPmlmYV9icm9hZGNhc3QpOwogCiAJaWYgKGlmYS0+aWZhX2FueWNhc3QpCi0JCU5MQV9QVVRfVTMyKHNrYiwgSUZBX0FOWUNBU1QsIGlmYS0+aWZhX2FueWNhc3QpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBJRkFfQU5ZQ0FTVCwgaWZhLT5pZmFfYW55Y2FzdCk7CiAKIAlpZiAoaWZhLT5pZmFfbGFiZWxbMF0pCiAJCU5MQV9QVVRfU1RSSU5HKHNrYiwgSUZBX0xBQkVMLCBpZmEtPmlmYV9sYWJlbCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfZnJvbnRlbmQuYyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCmluZGV4IGNmYjUyN2MuLjljMzk5YTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCisrKyBiL25ldC9pcHY0L2ZpYl9mcm9udGVuZC5jCkBAIC0xMjIsNyArMTIyLDcgQEAKICAqCUZpbmQgdGhlIGZpcnN0IGRldmljZSB3aXRoIGEgZ2l2ZW4gc291cmNlIGFkZHJlc3MuCiAgKi8KIAotc3RydWN0IG5ldF9kZXZpY2UgKiBpcF9kZXZfZmluZCh1MzIgYWRkcikKK3N0cnVjdCBuZXRfZGV2aWNlICogaXBfZGV2X2ZpbmQoX19iZTMyIGFkZHIpCiB7CiAJc3RydWN0IGZsb3dpIGZsID0geyAubmxfdSA9IHsgLmlwNF91ID0geyAuZGFkZHIgPSBhZGRyIH0gfSB9OwogCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKQEAgLTE0Niw3ICsxNDYsNyBAQAogCXJldHVybiBkZXY7CiB9CiAKLXVuc2lnbmVkIGluZXRfYWRkcl90eXBlKHUzMiBhZGRyKQordW5zaWduZWQgaW5ldF9hZGRyX3R5cGUoX19iZTMyIGFkZHIpCiB7CiAJc3RydWN0IGZsb3dpCQlmbCA9IHsgLm5sX3UgPSB7IC5pcDRfdSA9IHsgLmRhZGRyID0gYWRkciB9IH0gfTsKIAlzdHJ1Y3QgZmliX3Jlc3VsdAlyZXM7CkBAIC0xODAsOCArMTgwLDggQEAKICAgIC0gY2hlY2ssIHRoYXQgcGFja2V0IGFycml2ZWQgZnJvbSBleHBlY3RlZCBwaHlzaWNhbCBpbnRlcmZhY2UuCiAgKi8KIAotaW50IGZpYl92YWxpZGF0ZV9zb3VyY2UodTMyIHNyYywgdTMyIGRzdCwgdTggdG9zLCBpbnQgb2lmLAotCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTMyICpzcGVjX2RzdCwgdTMyICppdGFnKQoraW50IGZpYl92YWxpZGF0ZV9zb3VyY2UoX19iZTMyIHNyYywgX19iZTMyIGRzdCwgdTggdG9zLCBpbnQgb2lmLAorCQkJc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgX19iZTMyICpzcGVjX2RzdCwgdTMyICppdGFnKQogewogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlzdHJ1Y3QgZmxvd2kgZmwgPSB7IC5ubF91ID0geyAuaXA0X3UgPQpAQCAtMjUzLDcgKzI1Myw3IEBACiAKICNpZm5kZWYgQ09ORklHX0lQX05PU0lPQ1JUCiAKLXN0YXRpYyBpbmxpbmUgdTMyIHNrX2V4dHJhY3RfYWRkcihzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIpCitzdGF0aWMgaW5saW5lIF9fYmUzMiBza19leHRyYWN0X2FkZHIoc3RydWN0IHNvY2thZGRyICphZGRyKQogewogCXJldHVybiAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRyKS0+c2luX2FkZHIuc19hZGRyOwogfQpAQCAtMjczLDcgKzI3Myw3IEBACiBzdGF0aWMgaW50IHJ0ZW50cnlfdG9fZmliX2NvbmZpZyhpbnQgY21kLCBzdHJ1Y3QgcnRlbnRyeSAqcnQsCiAJCQkJIHN0cnVjdCBmaWJfY29uZmlnICpjZmcpCiB7Ci0JdTMyIGFkZHI7CisJX19iZTMyIGFkZHI7CiAJaW50IHBsZW47CiAKIAltZW1zZXQoY2ZnLCAwLCBzaXplb2YoKmNmZykpOwpAQCAtMjkyLDcgKzI5Miw3IEBACiAJcGxlbiA9IDMyOwogCWFkZHIgPSBza19leHRyYWN0X2FkZHIoJnJ0LT5ydF9kc3QpOwogCWlmICghKHJ0LT5ydF9mbGFncyAmIFJURl9IT1NUKSkgewotCQl1MzIgbWFzayA9IHNrX2V4dHJhY3RfYWRkcigmcnQtPnJ0X2dlbm1hc2spOworCQlfX2JlMzIgbWFzayA9IHNrX2V4dHJhY3RfYWRkcigmcnQtPnJ0X2dlbm1hc2spOwogCiAJCWlmIChydC0+cnRfZ2VubWFzay5zYV9mYW1pbHkgIT0gQUZfSU5FVCkgewogCQkJaWYgKG1hc2sgfHwgcnQtPnJ0X2dlbm1hc2suc2FfZmFtaWx5KQpAQCAtNDk5LDIyICs0OTksMjIgQEAKIAlubG1zZ19mb3JfZWFjaF9hdHRyKGF0dHIsIG5saCwgc2l6ZW9mKHN0cnVjdCBydG1zZyksIHJlbWFpbmluZykgewogCQlzd2l0Y2ggKGF0dHItPm5sYV90eXBlKSB7CiAJCWNhc2UgUlRBX0RTVDoKLQkJCWNmZy0+ZmNfZHN0ID0gbmxhX2dldF91MzIoYXR0cik7CisJCQljZmctPmZjX2RzdCA9IG5sYV9nZXRfYmUzMihhdHRyKTsKIAkJCWJyZWFrOwogCQljYXNlIFJUQV9TUkM6Ci0JCQljZmctPmZjX3NyYyA9IG5sYV9nZXRfdTMyKGF0dHIpOworCQkJY2ZnLT5mY19zcmMgPSBubGFfZ2V0X2JlMzIoYXR0cik7CiAJCQlicmVhazsKIAkJY2FzZSBSVEFfT0lGOgogCQkJY2ZnLT5mY19vaWYgPSBubGFfZ2V0X3UzMihhdHRyKTsKIAkJCWJyZWFrOwogCQljYXNlIFJUQV9HQVRFV0FZOgotCQkJY2ZnLT5mY19ndyA9IG5sYV9nZXRfdTMyKGF0dHIpOworCQkJY2ZnLT5mY19ndyA9IG5sYV9nZXRfYmUzMihhdHRyKTsKIAkJCWJyZWFrOwogCQljYXNlIFJUQV9QUklPUklUWToKIAkJCWNmZy0+ZmNfcHJpb3JpdHkgPSBubGFfZ2V0X3UzMihhdHRyKTsKIAkJCWJyZWFrOwogCQljYXNlIFJUQV9QUkVGU1JDOgotCQkJY2ZnLT5mY19wcmVmc3JjID0gbmxhX2dldF91MzIoYXR0cik7CisJCQljZmctPmZjX3ByZWZzcmMgPSBubGFfZ2V0X2JlMzIoYXR0cik7CiAJCQlicmVhazsKIAkJY2FzZSBSVEFfTUVUUklDUzoKIAkJCWNmZy0+ZmNfbXggPSBubGFfZGF0YShhdHRyKTsKQEAgLTYyNyw4ICs2MjcsNyBAQAogICAgb25seSB3aGVuIG5ldGxpbmsgaXMgYWxyZWFkeSBsb2NrZWQuCiAgKi8KIAotc3RhdGljIHZvaWQgZmliX21hZ2ljKGludCBjbWQsIGludCB0eXBlLCB1MzIgZHN0LCBpbnQgZHN0X2xlbiwKLQkJICAgICAgc3RydWN0IGluX2lmYWRkciAqaWZhKQorc3RhdGljIHZvaWQgZmliX21hZ2ljKGludCBjbWQsIGludCB0eXBlLCBfX2JlMzIgZHN0LCBpbnQgZHN0X2xlbiwgc3RydWN0IGluX2lmYWRkciAqaWZhKQogewogCXN0cnVjdCBmaWJfdGFibGUgKnRiOwogCXN0cnVjdCBmaWJfY29uZmlnIGNmZyA9IHsKQEAgLTY2Nyw5ICs2NjYsOSBAQAogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGlmYS0+aWZhX2RldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5fZGV2LT5kZXY7CiAJc3RydWN0IGluX2lmYWRkciAqcHJpbSA9IGlmYTsKLQl1MzIgbWFzayA9IGlmYS0+aWZhX21hc2s7Ci0JdTMyIGFkZHIgPSBpZmEtPmlmYV9sb2NhbDsKLQl1MzIgcHJlZml4ID0gaWZhLT5pZmFfYWRkcmVzcyZtYXNrOworCV9fYmUzMiBtYXNrID0gaWZhLT5pZmFfbWFzazsKKwlfX2JlMzIgYWRkciA9IGlmYS0+aWZhX2xvY2FsOworCV9fYmUzMiBwcmVmaXggPSBpZmEtPmlmYV9hZGRyZXNzJm1hc2s7CiAKIAlpZiAoaWZhLT5pZmFfZmxhZ3MmSUZBX0ZfU0VDT05EQVJZKSB7CiAJCXByaW0gPSBpbmV0X2lmYV9ieXByZWZpeChpbl9kZXYsIHByZWZpeCwgbWFzayk7CkBAIC02ODUsNyArNjg0LDcgQEAKIAkJcmV0dXJuOwogCiAJLyogQWRkIGJyb2FkY2FzdCBhZGRyZXNzLCBpZiBpdCBpcyBleHBsaWNpdGx5IGFzc2lnbmVkLiAqLwotCWlmIChpZmEtPmlmYV9icm9hZGNhc3QgJiYgaWZhLT5pZmFfYnJvYWRjYXN0ICE9IDB4RkZGRkZGRkYpCisJaWYgKGlmYS0+aWZhX2Jyb2FkY2FzdCAmJiBpZmEtPmlmYV9icm9hZGNhc3QgIT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCWZpYl9tYWdpYyhSVE1fTkVXUk9VVEUsIFJUTl9CUk9BRENBU1QsIGlmYS0+aWZhX2Jyb2FkY2FzdCwgMzIsIHByaW0pOwogCiAJaWYgKCFaRVJPTkVUKHByZWZpeCkgJiYgIShpZmEtPmlmYV9mbGFncyZJRkFfRl9TRUNPTkRBUlkpICYmCkBAIC03MDcsOCArNzA2LDggQEAKIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gaW5fZGV2LT5kZXY7CiAJc3RydWN0IGluX2lmYWRkciAqaWZhMTsKIAlzdHJ1Y3QgaW5faWZhZGRyICpwcmltID0gaWZhOwotCXUzMiBicmQgPSBpZmEtPmlmYV9hZGRyZXNzfH5pZmEtPmlmYV9tYXNrOwotCXUzMiBhbnkgPSBpZmEtPmlmYV9hZGRyZXNzJmlmYS0+aWZhX21hc2s7CisJX19iZTMyIGJyZCA9IGlmYS0+aWZhX2FkZHJlc3N8fmlmYS0+aWZhX21hc2s7CisJX19iZTMyIGFueSA9IGlmYS0+aWZhX2FkZHJlc3MmaWZhLT5pZmFfbWFzazsKICNkZWZpbmUgTE9DQUxfT0sJMQogI2RlZmluZSBCUkRfT0sJCTIKICNkZWZpbmUgQlJEMF9PSwkJNApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX2hhc2guYyBiL25ldC9pcHY0L2ZpYl9oYXNoLmMKaW5kZXggODgxMzNiMy4uMTA3YmI2YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2hhc2guYworKysgYi9uZXQvaXB2NC9maWJfaGFzaC5jCkBAIC01MSw3ICs1MSw3IEBACiBzdHJ1Y3QgZmliX25vZGUgewogCXN0cnVjdCBobGlzdF9ub2RlCWZuX2hhc2g7CiAJc3RydWN0IGxpc3RfaGVhZAlmbl9hbGlhczsKLQl1MzIJCQlmbl9rZXk7CisJX19iZTMyCQkJZm5fa2V5OwogfTsKIAogc3RydWN0IGZuX3pvbmUgewpAQCAtNjQsNyArNjQsNyBAQAogI2RlZmluZSBGWl9IQVNITUFTSyhmeikJCSgoZnopLT5mel9oYXNobWFzaykKIAogCWludAkJCWZ6X29yZGVyOwkvKiBab25lIG9yZGVyCQkqLwotCXUzMgkJCWZ6X21hc2s7CisJX19iZTMyCQkJZnpfbWFzazsKICNkZWZpbmUgRlpfTUFTSyhmeikJCSgoZnopLT5mel9tYXNrKQogfTsKIApAQCAtNzcsNyArNzcsNyBAQAogCXN0cnVjdCBmbl96b25lCSpmbl96b25lX2xpc3Q7CiB9OwogCi1zdGF0aWMgaW5saW5lIHUzMiBmbl9oYXNoKHUzMiBrZXksIHN0cnVjdCBmbl96b25lICpmeikKK3N0YXRpYyBpbmxpbmUgdTMyIGZuX2hhc2goX19iZTMyIGtleSwgc3RydWN0IGZuX3pvbmUgKmZ6KQogewogCXUzMiBoID0gbnRvaGwoa2V5KT4+KDMyIC0gZnotPmZ6X29yZGVyKTsKIAloIF49IChoPj4yMCk7CkBAIC04Nyw3ICs4Nyw3IEBACiAJcmV0dXJuIGg7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIGZ6X2tleSh1MzIgZHN0LCBzdHJ1Y3QgZm5fem9uZSAqZnopCitzdGF0aWMgaW5saW5lIF9fYmUzMiBmel9rZXkoX19iZTMyIGRzdCwgc3RydWN0IGZuX3pvbmUgKmZ6KQogewogCXJldHVybiBkc3QgJiBGWl9NQVNLKGZ6KTsKIH0KQEAgLTI1NCw3ICsyNTQsNyBAQAogCQlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAkJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJCXN0cnVjdCBmaWJfbm9kZSAqZjsKLQkJdTMyIGsgPSBmel9rZXkoZmxwLT5mbDRfZHN0LCBmeik7CisJCV9fYmUzMiBrID0gZnpfa2V5KGZscC0+Zmw0X2RzdCwgZnopOwogCiAJCWhlYWQgPSAmZnotPmZ6X2hhc2hbZm5faGFzaChrLCBmeildOwogCQlobGlzdF9mb3JfZWFjaF9lbnRyeShmLCBub2RlLCBoZWFkLCBmbl9oYXNoKSB7CkBAIC0zNjUsNyArMzY1LDcgQEAKIH0KIAogLyogUmV0dXJuIHRoZSBub2RlIGluIEZaIG1hdGNoaW5nIEtFWS4gKi8KLXN0YXRpYyBzdHJ1Y3QgZmliX25vZGUgKmZpYl9maW5kX25vZGUoc3RydWN0IGZuX3pvbmUgKmZ6LCB1MzIga2V5KQorc3RhdGljIHN0cnVjdCBmaWJfbm9kZSAqZmliX2ZpbmRfbm9kZShzdHJ1Y3QgZm5fem9uZSAqZnosIF9fYmUzMiBrZXkpCiB7CiAJc3RydWN0IGhsaXN0X2hlYWQgKmhlYWQgPSAmZnotPmZ6X2hhc2hbZm5faGFzaChrZXksIGZ6KV07CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC0zODcsNyArMzg3LDcgQEAKIAlzdHJ1Y3QgZm5fem9uZSAqZno7CiAJc3RydWN0IGZpYl9pbmZvICpmaTsKIAl1OCB0b3MgPSBjZmctPmZjX3RvczsKLQl1MzIga2V5OworCV9fYmUzMiBrZXk7CiAJaW50IGVycjsKIAogCWlmIChjZmctPmZjX2RzdF9sZW4gPiAzMikKQEAgLTU0MSw3ICs1NDEsNyBAQAogCXN0cnVjdCBmaWJfbm9kZSAqZjsKIAlzdHJ1Y3QgZmliX2FsaWFzICpmYSwgKmZhX3RvX2RlbGV0ZTsKIAlzdHJ1Y3QgZm5fem9uZSAqZno7Ci0JdTMyIGtleTsKKwlfX2JlMzIga2V5OwogCiAJaWYgKGNmZy0+ZmNfZHN0X2xlbiA+IDMyKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTk2Niw3ICs5NjYsNyBAQAogCXJlYWRfdW5sb2NrKCZmaWJfaGFzaF9sb2NrKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGZpYl9mbGFnX3RyYW5zKGludCB0eXBlLCB1MzIgbWFzaywgc3RydWN0IGZpYl9pbmZvICpmaSkKK3N0YXRpYyB1bnNpZ25lZCBmaWJfZmxhZ190cmFucyhpbnQgdHlwZSwgX19iZTMyIG1hc2ssIHN0cnVjdCBmaWJfaW5mbyAqZmkpCiB7CiAJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHR5cGUyZmxhZ3NbUlROX01BWCArIDFdID0gewogCQlbN10gPSBSVEZfUkVKRUNULCBbOF0gPSBSVEZfUkVKRUNULApAQCAtOTc1LDcgKzk3NSw3IEBACiAKIAlpZiAoZmkgJiYgZmktPmZpYl9uaC0+bmhfZ3cpCiAJCWZsYWdzIHw9IFJURl9HQVRFV0FZOwotCWlmIChtYXNrID09IDB4RkZGRkZGRkYpCisJaWYgKG1hc2sgPT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCWZsYWdzIHw9IFJURl9IT1NUOwogCWZsYWdzIHw9IFJURl9VUDsKIAlyZXR1cm4gZmxhZ3M7CkBAIC05OTEsNyArOTkxLDcgQEAKIHsKIAlzdHJ1Y3QgZmliX2l0ZXJfc3RhdGUgKml0ZXI7CiAJY2hhciBiZlsxMjhdOwotCXUzMiBwcmVmaXgsIG1hc2s7CisJX19iZTMyIHByZWZpeCwgbWFzazsKIAl1bnNpZ25lZCBmbGFnczsKIAlzdHJ1Y3QgZmliX25vZGUgKmY7CiAJc3RydWN0IGZpYl9hbGlhcyAqZmE7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfbG9va3VwLmggYi9uZXQvaXB2NC9maWJfbG9va3VwLmgKaW5kZXggZmQ2Zjc3Ni4uMGU4YjcwYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX2xvb2t1cC5oCisrKyBiL25ldC9pcHY0L2ZpYl9sb29rdXAuaApAQCAtMjAsMTYgKzIwLDE2IEBACiAvKiBFeHBvcnRlZCBieSBmaWJfc2VtYW50aWNzLmMgKi8KIGV4dGVybiBpbnQgZmliX3NlbWFudGljX21hdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZscCwKLQkJCSAgICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIF9fdTMyIHpvbmUsIF9fdTMyIG1hc2ssCisJCQkgICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX2JlMzIgem9uZSwgX19iZTMyIG1hc2ssCiAJCQkJaW50IHByZWZpeGxlbik7CiBleHRlcm4gdm9pZCBmaWJfcmVsZWFzZV9pbmZvKHN0cnVjdCBmaWJfaW5mbyAqKTsKIGV4dGVybiBzdHJ1Y3QgZmliX2luZm8gKmZpYl9jcmVhdGVfaW5mbyhzdHJ1Y3QgZmliX2NvbmZpZyAqY2ZnKTsKIGV4dGVybiBpbnQgZmliX25oX21hdGNoKHN0cnVjdCBmaWJfY29uZmlnICpjZmcsIHN0cnVjdCBmaWJfaW5mbyAqZmkpOwogZXh0ZXJuIGludCBmaWJfZHVtcF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBwaWQsIHUzMiBzZXEsIGludCBldmVudCwKLQkJCSB1MzIgdGJfaWQsIHU4IHR5cGUsIHU4IHNjb3BlLCB1MzIgZHN0LAorCQkJIHUzMiB0Yl9pZCwgdTggdHlwZSwgdTggc2NvcGUsIF9fYmUzMiBkc3QsCiAJCQkgaW50IGRzdF9sZW4sIHU4IHRvcywgc3RydWN0IGZpYl9pbmZvICpmaSwKIAkJCSB1bnNpZ25lZCBpbnQpOwotZXh0ZXJuIHZvaWQgcnRtc2dfZmliKGludCBldmVudCwgdTMyIGtleSwgc3RydWN0IGZpYl9hbGlhcyAqZmEsCitleHRlcm4gdm9pZCBydG1zZ19maWIoaW50IGV2ZW50LCBfX2JlMzIga2V5LCBzdHJ1Y3QgZmliX2FsaWFzICpmYSwKIAkJICAgICAgaW50IGRzdF9sZW4sIHUzMiB0Yl9pZCwgc3RydWN0IG5sX2luZm8gKmluZm8pOwogZXh0ZXJuIHN0cnVjdCBmaWJfYWxpYXMgKmZpYl9maW5kX2FsaWFzKHN0cnVjdCBsaXN0X2hlYWQgKmZhaCwKIAkJCQkJdTggdG9zLCB1MzIgcHJpbyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9maWJfcnVsZXMuYyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCmluZGV4IDUyYjJhZGEuLjA4NTJiOWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2ZpYl9ydWxlcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9ydWxlcy5jCkBAIC00MCwxMCArNDAsMTAgQEAKIAl1OAkJCWRzdF9sZW47CiAJdTgJCQlzcmNfbGVuOwogCXU4CQkJdG9zOwotCXUzMgkJCXNyYzsKLQl1MzIJCQlzcmNtYXNrOwotCXUzMgkJCWRzdDsKLQl1MzIJCQlkc3RtYXNrOworCV9fYmUzMgkJCXNyYzsKKwlfX2JlMzIJCQlzcmNtYXNrOworCV9fYmUzMgkJCWRzdDsKKwlfX2JlMzIJCQlkc3RtYXNrOwogI2lmZGVmIENPTkZJR19JUF9ST1VURV9GV01BUksKIAl1MzIJCQlmd21hcms7CiAJdTMyCQkJZndtYXNrOwpAQCAtMTUwLDggKzE1MCw4IEBACiBzdGF0aWMgaW50IGZpYjRfcnVsZV9tYXRjaChzdHJ1Y3QgZmliX3J1bGUgKnJ1bGUsIHN0cnVjdCBmbG93aSAqZmwsIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZmliNF9ydWxlICpyID0gKHN0cnVjdCBmaWI0X3J1bGUgKikgcnVsZTsKLQl1MzIgZGFkZHIgPSBmbC0+Zmw0X2RzdDsKLQl1MzIgc2FkZHIgPSBmbC0+Zmw0X3NyYzsKKwlfX2JlMzIgZGFkZHIgPSBmbC0+Zmw0X2RzdDsKKwlfX2JlMzIgc2FkZHIgPSBmbC0+Zmw0X3NyYzsKIAogCWlmICgoKHNhZGRyIF4gci0+c3JjKSAmIHItPnNyY21hc2spIHx8CiAJICAgICgoZGFkZHIgXiByLT5kc3QpICYgci0+ZHN0bWFzaykpCkBAIC0yMTUsMTAgKzIxNSwxMCBAQAogCX0KIAogCWlmICh0YltGUkFfU1JDXSkKLQkJcnVsZTQtPnNyYyA9IG5sYV9nZXRfdTMyKHRiW0ZSQV9TUkNdKTsKKwkJcnVsZTQtPnNyYyA9IG5sYV9nZXRfYmUzMih0YltGUkFfU1JDXSk7CiAKIAlpZiAodGJbRlJBX0RTVF0pCi0JCXJ1bGU0LT5kc3QgPSBubGFfZ2V0X3UzMih0YltGUkFfRFNUXSk7CisJCXJ1bGU0LT5kc3QgPSBubGFfZ2V0X2JlMzIodGJbRlJBX0RTVF0pOwogCiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX0ZXTUFSSwogCWlmICh0YltGUkFfRldNQVJLXSkgewpAQCAtMjc3LDEwICsyNzcsMTAgQEAKIAkJcmV0dXJuIDA7CiAjZW5kaWYKIAotCWlmICh0YltGUkFfU1JDXSAmJiAocnVsZTQtPnNyYyAhPSBubGFfZ2V0X3UzMih0YltGUkFfU1JDXSkpKQorCWlmICh0YltGUkFfU1JDXSAmJiAocnVsZTQtPnNyYyAhPSBubGFfZ2V0X2JlMzIodGJbRlJBX1NSQ10pKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAodGJbRlJBX0RTVF0gJiYgKHJ1bGU0LT5kc3QgIT0gbmxhX2dldF91MzIodGJbRlJBX0RTVF0pKSkKKwlpZiAodGJbRlJBX0RTVF0gJiYgKHJ1bGU0LT5kc3QgIT0gbmxhX2dldF9iZTMyKHRiW0ZSQV9EU1RdKSkpCiAJCXJldHVybiAwOwogCiAJcmV0dXJuIDE7CkBAIC0zMDUsMTAgKzMwNSwxMCBAQAogI2VuZGlmCiAKIAlpZiAocnVsZTQtPmRzdF9sZW4pCi0JCU5MQV9QVVRfVTMyKHNrYiwgRlJBX0RTVCwgcnVsZTQtPmRzdCk7CisJCU5MQV9QVVRfQkUzMihza2IsIEZSQV9EU1QsIHJ1bGU0LT5kc3QpOwogCiAJaWYgKHJ1bGU0LT5zcmNfbGVuKQotCQlOTEFfUFVUX1UzMihza2IsIEZSQV9TUkMsIHJ1bGU0LT5zcmMpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBGUkFfU1JDLCBydWxlNC0+c3JjKTsKIAogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJaWYgKHJ1bGU0LT50Y2xhc3NpZCkKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwppbmRleCAyZWFkMDk1NC4uODg0ZDE3NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3NlbWFudGljcy5jCisrKyBiL25ldC9pcHY0L2ZpYl9zZW1hbnRpY3MuYwpAQCAtMjAzLDcgKzIwMyw3IEBACiAJdW5zaWduZWQgaW50IHZhbCA9IGZpLT5maWJfbmhzOwogCiAJdmFsIF49IGZpLT5maWJfcHJvdG9jb2w7Ci0JdmFsIF49IGZpLT5maWJfcHJlZnNyYzsKKwl2YWwgXj0gKF9fZm9yY2UgdTMyKWZpLT5maWJfcHJlZnNyYzsKIAl2YWwgXj0gZmktPmZpYl9wcmlvcml0eTsKIAogCXJldHVybiAodmFsIF4gKHZhbCA+PiA3KSBeICh2YWwgPj4gMTIpKSAmIG1hc2s7CkBAIC0yNDgsNyArMjQ4LDcgQEAKICAgIFVzZWQgb25seSBieSByZWRpcmVjdCBhY2NlcHQgcm91dGluZS4KICAqLwogCi1pbnQgaXBfZmliX2NoZWNrX2RlZmF1bHQodTMyIGd3LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQoraW50IGlwX2ZpYl9jaGVja19kZWZhdWx0KF9fYmUzMiBndywgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlzdHJ1Y3QgaGxpc3RfaGVhZCAqaGVhZDsKIAlzdHJ1Y3QgaGxpc3Rfbm9kZSAqbm9kZTsKQEAgLTI3Myw3ICsyNzMsNyBAQAogCXJldHVybiAtMTsKIH0KIAotdm9pZCBydG1zZ19maWIoaW50IGV2ZW50LCB1MzIga2V5LCBzdHJ1Y3QgZmliX2FsaWFzICpmYSwKK3ZvaWQgcnRtc2dfZmliKGludCBldmVudCwgX19iZTMyIGtleSwgc3RydWN0IGZpYl9hbGlhcyAqZmEsCiAJICAgICAgIGludCBkc3RfbGVuLCB1MzIgdGJfaWQsIHN0cnVjdCBubF9pbmZvICppbmZvKQogewogCXN0cnVjdCBza19idWZmICpza2I7CkBAIC0zNzQsNyArMzc0LDcgQEAKIAkJCXN0cnVjdCBubGF0dHIgKm5sYSwgKmF0dHJzID0gcnRuaF9hdHRycyhydG5oKTsKIAogCQkJbmxhID0gbmxhX2ZpbmQoYXR0cnMsIGF0dHJsZW4sIFJUQV9HQVRFV0FZKTsKLQkJCW5oLT5uaF9ndyA9IG5sYSA/IG5sYV9nZXRfdTMyKG5sYSkgOiAwOworCQkJbmgtPm5oX2d3ID0gbmxhID8gbmxhX2dldF9iZTMyKG5sYSkgOiAwOwogI2lmZGVmIENPTkZJR19ORVRfQ0xTX1JPVVRFCiAJCQlubGEgPSBubGFfZmluZChhdHRycywgYXR0cmxlbiwgUlRBX0ZMT1cpOwogCQkJbmgtPm5oX3RjbGFzc2lkID0gbmxhID8gbmxhX2dldF91MzIobmxhKSA6IDA7CkBAIC00MjcsNyArNDI3LDcgQEAKIAkJCXN0cnVjdCBubGF0dHIgKm5sYSwgKmF0dHJzID0gcnRuaF9hdHRycyhydG5oKTsKIAogCQkJbmxhID0gbmxhX2ZpbmQoYXR0cnMsIGF0dHJsZW4sIFJUQV9HQVRFV0FZKTsKLQkJCWlmIChubGEgJiYgbmxhX2dldF91MzIobmxhKSAhPSBuaC0+bmhfZ3cpCisJCQlpZiAobmxhICYmIG5sYV9nZXRfYmUzMihubGEpICE9IG5oLT5uaF9ndykKIAkJCQlyZXR1cm4gMTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQogCQkJbmxhID0gbmxhX2ZpbmQoYXR0cnMsIGF0dHJsZW4sIFJUQV9GTE9XKTsKQEAgLTU2OCwxMSArNTY4LDExIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZpYl9sYWRkcl9oYXNoZm4odTMyIHZhbCkKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZpYl9sYWRkcl9oYXNoZm4oX19iZTMyIHZhbCkKIHsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IChmaWJfaGFzaF9zaXplIC0gMSk7CiAKLQlyZXR1cm4gKHZhbCBeICh2YWwgPj4gNykgXiAodmFsID4+IDE0KSkgJiBtYXNrOworCXJldHVybiAoKF9fZm9yY2UgdTMyKXZhbCBeICgoX19mb3JjZSB1MzIpdmFsID4+IDcpIF4gKChfX2ZvcmNlIHUzMil2YWwgPj4gMTQpKSAmIG1hc2s7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaGxpc3RfaGVhZCAqZmliX2hhc2hfYWxsb2MoaW50IGJ5dGVzKQpAQCAtODQ3LDcgKzg0Nyw3IEBACiAKIC8qIE5vdGUhIGZpYl9zZW1hbnRpY19tYXRjaCBpbnRlbnRpb25hbGx5IHVzZXMgIFJDVSBsaXN0IGZ1bmN0aW9ucy4gKi8KIGludCBmaWJfc2VtYW50aWNfbWF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgY29uc3Qgc3RydWN0IGZsb3dpICpmbHAsCi0JCSAgICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzLCBfX3UzMiB6b25lLCBfX3UzMiBtYXNrLCAKKwkJICAgICAgIHN0cnVjdCBmaWJfcmVzdWx0ICpyZXMsIF9fYmUzMiB6b25lLCBfX2JlMzIgbWFzaywKIAkJCWludCBwcmVmaXhsZW4pCiB7CiAJc3RydWN0IGZpYl9hbGlhcyAqZmE7CkBAIC05MTQsOCArOTE0LDcgQEAKIAlyZXMtPmZpID0gZmEtPmZhX2luZm87CiAjaWZkZWYgQ09ORklHX0lQX1JPVVRFX01VTFRJUEFUSF9DQUNIRUQKIAlyZXMtPm5ldG1hc2sgPSBtYXNrOwotCXJlcy0+bmV0d29yayA9IHpvbmUgJgotCQkoMHhGRkZGRkZGRiA+PiAoMzIgLSBwcmVmaXhsZW4pKTsKKwlyZXMtPm5ldHdvcmsgPSB6b25lICYgaW5ldF9tYWtlX21hc2socHJlZml4bGVuKTsKICNlbmRpZgogCWF0b21pY19pbmMoJnJlcy0+ZmktPmZpYl9jbG50cmVmKTsKIAlyZXR1cm4gMDsKQEAgLTkyMywxMyArOTIyLDEzIEBACiAKIC8qIEZpbmQgYXBwcm9wcmlhdGUgc291cmNlIGFkZHJlc3MgdG8gdGhpcyBkZXN0aW5hdGlvbiAqLwogCi11MzIgX19maWJfcmVzX3ByZWZzcmMoc3RydWN0IGZpYl9yZXN1bHQgKnJlcykKK19fYmUzMiBfX2ZpYl9yZXNfcHJlZnNyYyhzdHJ1Y3QgZmliX3Jlc3VsdCAqcmVzKQogewogCXJldHVybiBpbmV0X3NlbGVjdF9hZGRyKEZJQl9SRVNfREVWKCpyZXMpLCBGSUJfUkVTX0dXKCpyZXMpLCByZXMtPnNjb3BlKTsKIH0KIAogaW50IGZpYl9kdW1wX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHBpZCwgdTMyIHNlcSwgaW50IGV2ZW50LAotCQkgIHUzMiB0Yl9pZCwgdTggdHlwZSwgdTggc2NvcGUsIHUzMiBkc3QsIGludCBkc3RfbGVuLCB1OCB0b3MsCisJCSAgdTMyIHRiX2lkLCB1OCB0eXBlLCB1OCBzY29wZSwgX19iZTMyIGRzdCwgaW50IGRzdF9sZW4sIHU4IHRvcywKIAkJICBzdHJ1Y3QgZmliX2luZm8gKmZpLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IG5sbXNnaGRyICpubGg7CkBAIC05NTIsNyArOTUxLDcgQEAKIAlydG0tPnJ0bV9wcm90b2NvbCA9IGZpLT5maWJfcHJvdG9jb2w7CiAKIAlpZiAocnRtLT5ydG1fZHN0X2xlbikKLQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfRFNULCBkc3QpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfRFNULCBkc3QpOwogCiAJaWYgKGZpLT5maWJfcHJpb3JpdHkpCiAJCU5MQV9QVVRfVTMyKHNrYiwgUlRBX1BSSU9SSVRZLCBmaS0+ZmliX3ByaW9yaXR5KTsKQEAgLTk2MSwxMSArOTYwLDExIEBACiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwogCiAJaWYgKGZpLT5maWJfcHJlZnNyYykKLQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfUFJFRlNSQywgZmktPmZpYl9wcmVmc3JjKTsKKwkJTkxBX1BVVF9CRTMyKHNrYiwgUlRBX1BSRUZTUkMsIGZpLT5maWJfcHJlZnNyYyk7CiAKIAlpZiAoZmktPmZpYl9uaHMgPT0gMSkgewogCQlpZiAoZmktPmZpYl9uaC0+bmhfZ3cpCi0JCQlOTEFfUFVUX1UzMihza2IsIFJUQV9HQVRFV0FZLCBmaS0+ZmliX25oLT5uaF9ndyk7CisJCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfR0FURVdBWSwgZmktPmZpYl9uaC0+bmhfZ3cpOwogCiAJCWlmIChmaS0+ZmliX25oLT5uaF9vaWYpCiAJCQlOTEFfUFVUX1UzMihza2IsIFJUQV9PSUYsIGZpLT5maWJfbmgtPm5oX29pZik7CkBAIC05OTMsNyArOTkyLDcgQEAKIAkJCXJ0bmgtPnJ0bmhfaWZpbmRleCA9IG5oLT5uaF9vaWY7CiAKIAkJCWlmIChuaC0+bmhfZ3cpCi0JCQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfR0FURVdBWSwgbmgtPm5oX2d3KTsKKwkJCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfR0FURVdBWSwgbmgtPm5oX2d3KTsKICNpZmRlZiBDT05GSUdfTkVUX0NMU19ST1VURQogCQkJaWYgKG5oLT5uaF90Y2xhc3NpZCkKIAkJCQlOTEFfUFVUX1UzMihza2IsIFJUQV9GTE9XLCBuaC0+bmhfdGNsYXNzaWQpOwpAQCAtMTAxOCw3ICsxMDE3LDcgQEAKICAgIC0gZGV2aWNlIHdlbnQgZG93biAtPiB3ZSBtdXN0IHNodXRkb3duIGFsbCBuZXh0aG9wcyBnb2luZyB2aWEgaXQuCiAgKi8KIAotaW50IGZpYl9zeW5jX2Rvd24odTMyIGxvY2FsLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgZm9yY2UpCitpbnQgZmliX3N5bmNfZG93bihfX2JlMzIgbG9jYWwsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBmb3JjZSkKIHsKIAlpbnQgcmV0ID0gMDsKIAlpbnQgc2NvcGUgPSBSVF9TQ09QRV9OT1dIRVJFOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvZmliX3RyaWUuYyBiL25ldC9pcHY0L2ZpYl90cmllLmMKaW5kZXggOWMzZmY2Yi4uZDE3OTkwZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvZmliX3RyaWUuYworKysgYi9uZXQvaXB2NC9maWJfdHJpZS5jCkBAIC0xODM0LDcgKzE4MzQsNyBAQAogCWludCBpLCBzX2k7CiAJc3RydWN0IGZpYl9hbGlhcyAqZmE7CiAKLQl1MzIgeGtleSA9IGh0b25sKGtleSk7CisJX19iZTMyIHhrZXkgPSBodG9ubChrZXkpOwogCiAJc19pID0gY2ItPmFyZ3NbNF07CiAJaSA9IDA7CkBAIC0yMjgxLDcgKzIyODEsNyBAQAogCiAJaWYgKElTX1ROT0RFKG4pKSB7CiAJCXN0cnVjdCB0bm9kZSAqdG4gPSAoc3RydWN0IHRub2RlICopIG47Ci0JCXRfa2V5IHByZiA9IG50b2hsKE1BU0tfUEZYKHRuLT5rZXksIHRuLT5wb3MpKTsKKwkJX19iZTMyIHByZiA9IGh0b25sKE1BU0tfUEZYKHRuLT5rZXksIHRuLT5wb3MpKTsKIAogCQlpZiAoIU5PREVfUEFSRU5UKG4pKSB7CiAJCQlpZiAoaXRlci0+dHJpZSA9PSB0cmllX2xvY2FsKQpAQCAtMjI5Nyw3ICsyMjk3LDcgQEAKIAl9IGVsc2UgewogCQlzdHJ1Y3QgbGVhZiAqbCA9IChzdHJ1Y3QgbGVhZiAqKSBuOwogCQlpbnQgaTsKLQkJdTMyIHZhbCA9IG50b2hsKGwtPmtleSk7CisJCV9fYmUzMiB2YWwgPSBodG9ubChsLT5rZXkpOwogCiAJCXNlcV9pbmRlbnQoc2VxLCBpdGVyLT5kZXB0aCk7CiAJCXNlcV9wcmludGYoc2VxLCAiICB8LS0gJWQuJWQuJWQuJWRcbiIsIE5JUFFVQUQodmFsKSk7CkBAIC0yMzYwLDcgKzIzNjAsNyBAQAogCS5yZWxlYXNlID0gc2VxX3JlbGVhc2VfcHJpdmF0ZSwKIH07CiAKLXN0YXRpYyB1bnNpZ25lZCBmaWJfZmxhZ190cmFucyhpbnQgdHlwZSwgdTMyIG1hc2ssIGNvbnN0IHN0cnVjdCBmaWJfaW5mbyAqZmkpCitzdGF0aWMgdW5zaWduZWQgZmliX2ZsYWdfdHJhbnMoaW50IHR5cGUsIF9fYmUzMiBtYXNrLCBjb25zdCBzdHJ1Y3QgZmliX2luZm8gKmZpKQogewogCXN0YXRpYyB1bnNpZ25lZCB0eXBlMmZsYWdzW1JUTl9NQVggKyAxXSA9IHsKIAkJWzddID0gUlRGX1JFSkVDVCwgWzhdID0gUlRGX1JFSkVDVCwKQEAgLTIzNjksNyArMjM2OSw3IEBACiAKIAlpZiAoZmkgJiYgZmktPmZpYl9uaC0+bmhfZ3cpCiAJCWZsYWdzIHw9IFJURl9HQVRFV0FZOwotCWlmIChtYXNrID09IDB4RkZGRkZGRkYpCisJaWYgKG1hc2sgPT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCWZsYWdzIHw9IFJURl9IT1NUOwogCWZsYWdzIHw9IFJURl9VUDsKIAlyZXR1cm4gZmxhZ3M7CkBAIC0yNDAzLDcgKzI0MDMsNyBAQAogCWZvciAoaT0zMjsgaT49MDsgaS0tKSB7CiAJCXN0cnVjdCBsZWFmX2luZm8gKmxpID0gZmluZF9sZWFmX2luZm8obCwgaSk7CiAJCXN0cnVjdCBmaWJfYWxpYXMgKmZhOwotCQl1MzIgbWFzaywgcHJlZml4OworCQlfX2JlMzIgbWFzaywgcHJlZml4OwogCiAJCWlmICghbGkpCiAJCQljb250aW51ZTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2ljbXAuYyBiL25ldC9pcHY0L2ljbXAuYwppbmRleCBjMmFkMDdlLi5iMzlhMzdhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pY21wLmMKKysrIGIvbmV0L2lwdjQvaWNtcC5jCkBAIC0xMDQsNyArMTA0LDcgQEAKIAogCXN0cnVjdCB7CiAJCXN0cnVjdCBpY21waGRyIGljbXBoOwotCQlfX3UzMgkgICAgICAgdGltZXNbM107CisJCV9fYmUzMgkgICAgICAgdGltZXNbM107CiAJfSBkYXRhOwogCWludCBoZWFkX2xlbjsKIAlzdHJ1Y3QgaXBfb3B0aW9ucyByZXBseW9wdHM7CkBAIC0zODEsNyArMzgxLDcgQEAKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiLT5kc3Q7Ci0JdTMyIGRhZGRyOworCV9fYmUzMiBkYWRkcjsKIAogCWlmIChpcF9vcHRpb25zX2VjaG8oJmljbXBfcGFyYW0tPnJlcGx5b3B0cywgc2tiKSkKIAkJcmV0dXJuOwpAQCAtNDMwLDE0ICs0MzAsMTQgQEAKICAqCQkJTVVTVCByZXBseSB0byBvbmx5IHRoZSBmaXJzdCBmcmFnbWVudC4KICAqLwogCi12b2lkIGljbXBfc2VuZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2luLCBpbnQgdHlwZSwgaW50IGNvZGUsIHUzMiBpbmZvKQordm9pZCBpY21wX3NlbmQoc3RydWN0IHNrX2J1ZmYgKnNrYl9pbiwgaW50IHR5cGUsIGludCBjb2RlLCBfX2JlMzIgaW5mbykKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKIAlpbnQgcm9vbTsKIAlzdHJ1Y3QgaWNtcF9ieG0gaWNtcF9wYXJhbTsKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IChzdHJ1Y3QgcnRhYmxlICopc2tiX2luLT5kc3Q7CiAJc3RydWN0IGlwY21fY29va2llIGlwYzsKLQl1MzIgc2FkZHI7CisJX19iZTMyIHNhZGRyOwogCXU4ICB0b3M7CiAKIAlpZiAoIXJ0KQpAQCAtODk1LDcgKzg5NSw3IEBACiAJaWYgKGluX2Rldi0+aWZhX2xpc3QgJiYKIAkgICAgSU5fREVWX0xPR19NQVJUSUFOUyhpbl9kZXYpICYmCiAJICAgIElOX0RFVl9GT1JXQVJEKGluX2RldikpIHsKLQkJdTMyIF9tYXNrLCAqbXA7CisJCV9fYmUzMiBfbWFzaywgKm1wOwogCiAJCW1wID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgMCwgc2l6ZW9mKF9tYXNrKSwgJl9tYXNrKTsKIAkJQlVHX09OKG1wID09IE5VTEwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jCmluZGV4IDU4YmU4MjIuLjZlZWU3MTYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lnbXAuYworKysgYi9uZXQvaXB2NC9pZ21wLmMKQEAgLTEzOCwxNCArMTM4LDE0IEBACiAJCXRpbWVfYmVmb3JlKGppZmZpZXMsIChpbl9kZXYpLT5tcl92Ml9zZWVuKSkpCiAKIHN0YXRpYyB2b2lkIGlnbXB2M19hZGRfZGVscmVjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldiwgc3RydWN0IGlwX21jX2xpc3QgKmltKTsKLXN0YXRpYyB2b2lkIGlnbXB2M19kZWxfZGVscmVjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX191MzIgbXVsdGlhZGRyKTsKK3N0YXRpYyB2b2lkIGlnbXB2M19kZWxfZGVscmVjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG11bHRpYWRkcik7CiBzdGF0aWMgdm9pZCBpZ21wdjNfY2xlYXJfZGVscmVjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldik7CiBzdGF0aWMgaW50IHNmX3NldHN0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpOwogc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpOwogI2VuZGlmCiBzdGF0aWMgdm9pZCBpcF9tY19jbGVhcl9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYyk7Ci1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX3UzMiAqcG1jYSwgaW50IHNmbW9kZSwKLQkJCSBpbnQgc2Zjb3VudCwgX191MzIgKnBzZnNyYywgaW50IGRlbHRhKTsKK3N0YXRpYyBpbnQgaXBfbWNfYWRkX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSwKKwkJCSBpbnQgc2Zjb3VudCwgX19iZTMyICpwc2ZzcmMsIGludCBkZWx0YSk7CiAKIHN0YXRpYyB2b2lkIGlwX21hX3B1dChzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0pCiB7CkBAIC00MjYsNyArNDI2LDcgQEAKIAlmaXJzdCA9IDE7CiAJcHNmX3ByZXYgPSBOVUxMOwogCWZvciAocHNmPSpwc2ZfbGlzdDsgcHNmOyBwc2Y9cHNmX25leHQpIHsKLQkJdTMyICpwc3JjOworCQlfX2JlMzIgKnBzcmM7CiAKIAkJcHNmX25leHQgPSBwc2YtPnNmX25leHQ7CiAKQEAgLTQzOSw3ICs0MzksNyBAQAogCQlpZiAoaXNxdWVyeSkKIAkJCXBzZi0+c2ZfZ3NyZXNwID0gMDsKIAotCQlpZiAoQVZBSUxBQkxFKHNrYikgPCBzaXplb2YodTMyKSArCisJCWlmIChBVkFJTEFCTEUoc2tiKSA8IHNpemVvZihfX2JlMzIpICsKIAkJICAgIGZpcnN0KnNpemVvZihzdHJ1Y3QgaWdtcHYzX2dyZWMpKSB7CiAJCQlpZiAodHJ1bmNhdGUgJiYgIWZpcnN0KQogCQkJCWJyZWFrOwkgLyogdHJ1bmNhdGUgdGhlc2UgKi8KQEAgLTQ1NSw3ICs0NTUsNyBAQAogCQkJc2tiID0gYWRkX2dyaGVhZChza2IsIHBtYywgdHlwZSwgJnBncik7CiAJCQlmaXJzdCA9IDA7CiAJCX0KLQkJcHNyYyA9ICh1MzIgKilza2JfcHV0KHNrYiwgc2l6ZW9mKHUzMikpOworCQlwc3JjID0gKF9fYmUzMiAqKXNrYl9wdXQoc2tiLCBzaXplb2YoX19iZTMyKSk7CiAJCSpwc3JjID0gcHNmLT5zZl9pbmFkZHI7CiAJCXNjb3VudCsrOyBzdG90YWwrKzsKIAkJaWYgKCh0eXBlID09IElHTVBWM19BTExPV19ORVdfU09VUkNFUyB8fApAQCAtNjMwLDggKzYzMCw4IEBACiAJc3RydWN0IGlnbXBoZHIgKmloOwogCXN0cnVjdCBydGFibGUgKnJ0OwogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBpbl9kZXYtPmRldjsKLQl1MzIJZ3JvdXAgPSBwbWMgPyBwbWMtPm11bHRpYWRkciA6IDA7Ci0JdTMyCWRzdDsKKwlfX2JlMzIJZ3JvdXAgPSBwbWMgPyBwbWMtPm11bHRpYWRkciA6IDA7CisJX19iZTMyCWRzdDsKIAogCWlmICh0eXBlID09IElHTVBWM19IT1NUX01FTUJFUlNISVBfUkVQT1JUKQogCQlyZXR1cm4gaWdtcHYzX3NlbmRfcmVwb3J0KGluX2RldiwgcG1jKTsKQEAgLTc0OCw3ICs3NDgsNyBAQAogfQogCiAvKiBtYXJrIEVYQ0xVREUtbW9kZSBzb3VyY2VzICovCi1zdGF0aWMgaW50IGlnbXBfeG1hcmtzb3VyY2VzKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBuc3JjcywgX191MzIgKnNyY3MpCitzdGF0aWMgaW50IGlnbXBfeG1hcmtzb3VyY2VzKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBuc3JjcywgX19iZTMyICpzcmNzKQogewogCXN0cnVjdCBpcF9zZl9saXN0ICpwc2Y7CiAJaW50IGksIHNjb3VudDsKQEAgLTc3NSw3ICs3NzUsNyBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgaW50IGlnbXBfbWFya3NvdXJjZXMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IG5zcmNzLCBfX3UzMiAqc3JjcykKK3N0YXRpYyBpbnQgaWdtcF9tYXJrc291cmNlcyhzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCBpbnQgbnNyY3MsIF9fYmUzMiAqc3JjcykKIHsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmOwogCWludCBpLCBzY291bnQ7CkBAIC04MDMsNyArODAzLDcgQEAKIAlyZXR1cm4gMTsKIH0KIAotc3RhdGljIHZvaWQgaWdtcF9oZWFyZF9yZXBvcnQoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgZ3JvdXApCitzdGF0aWMgdm9pZCBpZ21wX2hlYXJkX3JlcG9ydChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBncm91cCkKIHsKIAlzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07CiAKQEAgLTgyOCw3ICs4MjgsNyBAQAogCXN0cnVjdCBpZ21waGRyIAkJKmloID0gc2tiLT5oLmlnbXBoOwogCXN0cnVjdCBpZ21wdjNfcXVlcnkgKmloMyA9IChzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICopaWg7CiAJc3RydWN0IGlwX21jX2xpc3QJKmltOwotCXUzMgkJCWdyb3VwID0gaWgtPmdyb3VwOworCV9fYmUzMgkJCWdyb3VwID0gaWgtPmdyb3VwOwogCWludAkJCW1heF9kZWxheTsKIAlpbnQJCQltYXJrID0gMDsKIApAQCAtODYyLDcgKzg2Miw3IEBACiAJCWloMyA9IChzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICopIHNrYi0+aC5yYXc7CiAJCWlmIChpaDMtPm5zcmNzKSB7CiAJCQlpZiAoIXBza2JfbWF5X3B1bGwoc2tiLCBzaXplb2Yoc3RydWN0IGlnbXB2M19xdWVyeSkgCi0JCQkJCSAgICsgbnRvaHMoaWgzLT5uc3Jjcykqc2l6ZW9mKF9fdTMyKSkpCisJCQkJCSAgICsgbnRvaHMoaWgzLT5uc3Jjcykqc2l6ZW9mKF9fYmUzMikpKQogCQkJCXJldHVybjsKIAkJCWloMyA9IChzdHJ1Y3QgaWdtcHYzX3F1ZXJ5ICopIHNrYi0+aC5yYXc7CiAJCX0KQEAgLTk4NSw3ICs5ODUsNyBAQAogICoJQWRkIGEgZmlsdGVyIHRvIGEgZGV2aWNlCiAgKi8KIAotc3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2FkZChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBhZGRyKQorc3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2FkZChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKQogewogCWNoYXIgYnVmW01BWF9BRERSX0xFTl07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluX2Rldi0+ZGV2OwpAQCAtMTAwNSw3ICsxMDA1LDcgQEAKICAqCVJlbW92ZSBhIGZpbHRlciBmcm9tIGEgZGV2aWNlCiAgKi8KIAotc3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBhZGRyKQorc3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKQogewogCWNoYXIgYnVmW01BWF9BRERSX0xFTl07CiAJc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGluX2Rldi0+ZGV2OwpAQCAtMTA1NSw3ICsxMDU1LDcgQEAKIAlzcGluX3VubG9ja19iaCgmaW5fZGV2LT5tY190b21iX2xvY2spOwogfQogCi1zdGF0aWMgdm9pZCBpZ21wdjNfZGVsX2RlbHJlYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fdTMyIG11bHRpYWRkcikKK3N0YXRpYyB2b2lkIGlnbXB2M19kZWxfZGVscmVjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG11bHRpYWRkcikKIHsKIAlzdHJ1Y3QgaXBfbWNfbGlzdCAqcG1jLCAqcG1jX3ByZXY7CiAJc3RydWN0IGlwX3NmX2xpc3QgKnBzZiwgKnBzZl9uZXh0OwpAQCAtMTE5Myw3ICsxMTkzLDcgQEAKICAqCUEgc29ja2V0IGhhcyBqb2luZWQgYSBtdWx0aWNhc3QgZ3JvdXAgb24gZGV2aWNlIGRldi4KICAqLwogCi12b2lkIGlwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHUzMiBhZGRyKQordm9pZCBpcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcikKIHsKIAlzdHJ1Y3QgaXBfbWNfbGlzdCAqaW07CiAKQEAgLTEyNTIsNyArMTI1Miw3IEBACiAgKglBIHNvY2tldCBoYXMgbGVmdCBhIG11bHRpY2FzdCBncm91cCBvbiBkZXZpY2UgZGV2CiAgKi8KIAotdm9pZCBpcF9tY19kZWNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCB1MzIgYWRkcikKK3ZvaWQgaXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIpCiB7CiAJc3RydWN0IGlwX21jX2xpc3QgKmksICoqaXA7CiAJCkBAIC0xNDAyLDcgKzE0MDIsNyBAQAogCiAKIHN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSwKLQlfX3UzMiAqcHNmc3JjKQorCV9fYmUzMiAqcHNmc3JjKQogewogCXN0cnVjdCBpcF9zZl9saXN0ICpwc2YsICpwc2ZfcHJldjsKIAlpbnQgcnYgPSAwOwpAQCAtMTQ1MCw4ICsxNDUwLDggQEAKICNkZWZpbmUgaWdtcF9pZmNfZXZlbnQoeCkJZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCiAKLXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fdTMyICpwbWNhLCBpbnQgc2Ztb2RlLAotCQkJIGludCBzZmNvdW50LCBfX3UzMiAqcHNmc3JjLCBpbnQgZGVsdGEpCitzdGF0aWMgaW50IGlwX21jX2RlbF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsCisJCQkgaW50IHNmY291bnQsIF9fYmUzMiAqcHNmc3JjLCBpbnQgZGVsdGEpCiB7CiAJc3RydWN0IGlwX21jX2xpc3QgKnBtYzsKIAlpbnQJY2hhbmdlcmVjID0gMDsKQEAgLTE1MTcsNyArMTUxNyw3IEBACiAgKiBBZGQgbXVsdGljYXN0IHNpbmdsZS1zb3VyY2UgZmlsdGVyIHRvIHRoZSBpbnRlcmZhY2UgbGlzdAogICovCiBzdGF0aWMgaW50IGlwX21jX2FkZDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsCi0JX191MzIgKnBzZnNyYywgaW50IGRlbHRhKQorCV9fYmUzMiAqcHNmc3JjLCBpbnQgZGVsdGEpCiB7CiAJc3RydWN0IGlwX3NmX2xpc3QgKnBzZiwgKnBzZl9wcmV2OwogCkBAIC0xNjIzLDggKzE2MjMsOCBAQAogLyoKICAqIEFkZCBtdWx0aWNhc3Qgc291cmNlIGZpbHRlciBsaXN0IHRvIHRoZSBpbnRlcmZhY2UgbGlzdAogICovCi1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX3UzMiAqcG1jYSwgaW50IHNmbW9kZSwKLQkJCSBpbnQgc2Zjb3VudCwgX191MzIgKnBzZnNyYywgaW50IGRlbHRhKQorc3RhdGljIGludCBpcF9tY19hZGRfc3JjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyICpwbWNhLCBpbnQgc2Ztb2RlLAorCQkJIGludCBzZmNvdW50LCBfX2JlMzIgKnBzZnNyYywgaW50IGRlbHRhKQogewogCXN0cnVjdCBpcF9tY19saXN0ICpwbWM7CiAJaW50CWlzZXhjbHVkZTsKQEAgLTE3MTcsNyArMTcxNyw3IEBACiBpbnQgaXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2sgLCBzdHJ1Y3QgaXBfbXJlcW4gKmltcikKIHsKIAlpbnQgZXJyOwotCXUzMiBhZGRyID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkcjsKKwlfX2JlMzIgYWRkciA9IGltci0+aW1yX211bHRpYWRkci5zX2FkZHI7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0ICppbWw9TlVMTCwgKmk7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKQEAgLTE3OTEsNyArMTc5MSw3IEBACiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqaW1sLCAqKmltbHA7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCXUzMiBncm91cCA9IGltci0+aW1yX211bHRpYWRkci5zX2FkZHI7CisJX19iZTMyIGdyb3VwID0gaW1yLT5pbXJfbXVsdGlhZGRyLnNfYWRkcjsKIAl1MzIgaWZpbmRleDsKIAlpbnQgcmV0ID0gLUVBRERSTk9UQVZBSUw7CiAKQEAgLTE4MjksNyArMTgyOSw3IEBACiB7CiAJaW50IGVycjsKIAlzdHJ1Y3QgaXBfbXJlcW4gaW1yOwotCXUzMiBhZGRyID0gbXJlcXMtPmltcl9tdWx0aWFkZHI7CisJX19iZTMyIGFkZHIgPSBtcmVxcy0+aW1yX211bHRpYWRkcjsKIAlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKnBtYzsKIAlzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBOVUxMOwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKQEAgLTE4ODMsNyArMTg4Myw3IEBACiAJCXJ2ID0gITA7CiAJCWZvciAoaT0wOyBpPHBzbC0+c2xfY291bnQ7IGkrKykgewogCQkJcnYgPSBtZW1jbXAoJnBzbC0+c2xfYWRkcltpXSwgJm1yZXFzLT5pbXJfc291cmNlYWRkciwKLQkJCQlzaXplb2YoX191MzIpKTsKKwkJCQlzaXplb2YoX19iZTMyKSk7CiAJCQlpZiAocnYgPT0gMCkKIAkJCQlicmVhazsKIAkJfQpAQCAtMTkzNSw3ICsxOTM1LDcgQEAKIAlydiA9IDE7CS8qID4gMCBmb3IgaW5zZXJ0IGxvZ2ljIGJlbG93IGlmIHNsX2NvdW50IGlzIDAgKi8KIAlmb3IgKGk9MDsgaTxwc2wtPnNsX2NvdW50OyBpKyspIHsKIAkJcnYgPSBtZW1jbXAoJnBzbC0+c2xfYWRkcltpXSwgJm1yZXFzLT5pbXJfc291cmNlYWRkciwKLQkJCXNpemVvZihfX3UzMikpOworCQkJc2l6ZW9mKF9fYmUzMikpOwogCQlpZiAocnYgPT0gMCkKIAkJCWJyZWFrOwogCX0KQEAgLTE5NjAsNyArMTk2MCw3IEBACiB7CiAJaW50IGVyciA9IDA7CiAJc3RydWN0IGlwX21yZXFuCWltcjsKLQl1MzIgYWRkciA9IG1zZi0+aW1zZl9tdWx0aWFkZHI7CisJX19iZTMyIGFkZHIgPSBtc2YtPmltc2ZfbXVsdGlhZGRyOwogCXN0cnVjdCBpcF9tY19zb2NrbGlzdCAqcG1jOwogCXN0cnVjdCBpbl9kZXZpY2UgKmluX2RldjsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CkBAIC0yMDQ0LDcgKzIwNDQsNyBAQAogewogCWludCBlcnIsIGxlbiwgY291bnQsIGNvcHljb3VudDsKIAlzdHJ1Y3QgaXBfbXJlcW4JaW1yOwotCXUzMiBhZGRyID0gbXNmLT5pbXNmX211bHRpYWRkcjsKKwlfX2JlMzIgYWRkciA9IG1zZi0+aW1zZl9tdWx0aWFkZHI7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKQEAgLTIxMDMsNyArMjEwMyw3IEBACiB7CiAJaW50IGVyciwgaSwgY291bnQsIGNvcHljb3VudDsKIAlzdHJ1Y3Qgc29ja2FkZHJfaW4gKnBzaW47Ci0JdTMyIGFkZHI7CisJX19iZTMyIGFkZHI7CiAJc3RydWN0IGlwX21jX3NvY2tsaXN0ICpwbWM7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBpcF9zZl9zb2NrbGlzdCAqcHNsOwpAQCAtMjE1Niw3ICsyMTU2LDcgQEAKIC8qCiAgKiBjaGVjayBpZiBhIG11bHRpY2FzdCBzb3VyY2UgZmlsdGVyIGFsbG93cyBkZWxpdmVyeSBmb3IgYSBnaXZlbiA8c3JjLGRzdCxpbnRmPgogICovCi1pbnQgaXBfbWNfc2ZfYWxsb3coc3RydWN0IHNvY2sgKnNrLCB1MzIgbG9jX2FkZHIsIHUzMiBybXRfYWRkciwgaW50IGRpZikKK2ludCBpcF9tY19zZl9hbGxvdyhzdHJ1Y3Qgc29jayAqc2ssIF9fYmUzMiBsb2NfYWRkciwgX19iZTMyIHJtdF9hZGRyLCBpbnQgZGlmKQogewogCXN0cnVjdCBpbmV0X3NvY2sgKmluZXQgPSBpbmV0X3NrKHNrKTsKIAlzdHJ1Y3QgaXBfbWNfc29ja2xpc3QgKnBtYzsKQEAgLTIyMTYsNyArMjIxNiw3IEBACiAJcnRubF91bmxvY2soKTsKIH0KIAotaW50IGlwX2NoZWNrX21jKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgdTMyIG1jX2FkZHIsIHUzMiBzcmNfYWRkciwgdTE2IHByb3RvKQoraW50IGlwX2NoZWNrX21jKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIG1jX2FkZHIsIF9fYmUzMiBzcmNfYWRkciwgdTE2IHByb3RvKQogewogCXN0cnVjdCBpcF9tY19saXN0ICppbTsKIAlzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYyBiL25ldC9pcHY0L2luZXRfY29ubmVjdGlvbl9zb2NrLmMKaW5kZXggMDcyMDQzOS4uOTZiYmUyYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaW5ldF9jb25uZWN0aW9uX3NvY2suYworKysgYi9uZXQvaXB2NC9pbmV0X2Nvbm5lY3Rpb25fc29jay5jCkBAIC0zOSw3ICszOSw3IEBACiBpbnQgaW5ldF9jc2tfYmluZF9jb25mbGljdChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssCiAJCQkgICBjb25zdCBzdHJ1Y3QgaW5ldF9iaW5kX2J1Y2tldCAqdGIpCiB7Ci0JY29uc3QgdTMyIHNrX3Jjdl9zYWRkciA9IGluZXRfcmN2X3NhZGRyKHNrKTsKKwljb25zdCBfX2JlMzIgc2tfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2spOwogCXN0cnVjdCBzb2NrICpzazI7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CiAJaW50IHJldXNlID0gc2stPnNrX3JldXNlOwpAQCAtNTIsNyArNTIsNyBAQAogCQkgICAgIHNrLT5za19ib3VuZF9kZXZfaWYgPT0gc2syLT5za19ib3VuZF9kZXZfaWYpKSB7CiAJCQlpZiAoIXJldXNlIHx8ICFzazItPnNrX3JldXNlIHx8CiAJCQkgICAgc2syLT5za19zdGF0ZSA9PSBUQ1BfTElTVEVOKSB7Ci0JCQkJY29uc3QgdTMyIHNrMl9yY3Zfc2FkZHIgPSBpbmV0X3Jjdl9zYWRkcihzazIpOworCQkJCWNvbnN0IF9fYmUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKIAkJCQlpZiAoIXNrMl9yY3Zfc2FkZHIgfHwgIXNrX3Jjdl9zYWRkciB8fAogCQkJCSAgICBzazJfcmN2X3NhZGRyID09IHNrX3Jjdl9zYWRkcikKIAkJCQkJYnJlYWs7CkBAIC0zNDIsMTAgKzM0MiwxMCBAQAogCiBFWFBPUlRfU1lNQk9MX0dQTChpbmV0X2Nza19yb3V0ZV9yZXEpOwogCi1zdGF0aWMgaW5saW5lIHUzMiBpbmV0X3N5bnFfaGFzaChjb25zdCB1MzIgcmFkZHIsIGNvbnN0IHUxNiBycG9ydCwKK3N0YXRpYyBpbmxpbmUgdTMyIGluZXRfc3lucV9oYXNoKGNvbnN0IF9fYmUzMiByYWRkciwgY29uc3QgX19iZTE2IHJwb3J0LAogCQkJCSBjb25zdCB1MzIgcm5kLCBjb25zdCB1MTYgc3lucV9oc2l6ZSkKIHsKLQlyZXR1cm4gamhhc2hfMndvcmRzKHJhZGRyLCAodTMyKXJwb3J0LCBybmQpICYgKHN5bnFfaHNpemUgLSAxKTsKKwlyZXR1cm4gamhhc2hfMndvcmRzKChfX2ZvcmNlIHUzMilyYWRkciwgKF9fZm9yY2UgdTMyKXJwb3J0LCBybmQpICYgKHN5bnFfaHNpemUgLSAxKTsKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX0lQVjYpIHx8IGRlZmluZWQoQ09ORklHX0lQVjZfTU9EVUxFKQpAQCAtMzU2LDggKzM1Niw4IEBACiAKIHN0cnVjdCByZXF1ZXN0X3NvY2sgKmluZXRfY3NrX3NlYXJjaF9yZXEoY29uc3Qgc3RydWN0IHNvY2sgKnNrLAogCQkJCQkgc3RydWN0IHJlcXVlc3Rfc29jayAqKipwcmV2cCwKLQkJCQkJIGNvbnN0IF9fdTE2IHJwb3J0LCBjb25zdCBfX3UzMiByYWRkciwKLQkJCQkJIGNvbnN0IF9fdTMyIGxhZGRyKQorCQkJCQkgY29uc3QgX19iZTE2IHJwb3J0LCBjb25zdCBfX2JlMzIgcmFkZHIsCisJCQkJCSBjb25zdCBfX2JlMzIgbGFkZHIpCiB7CiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCBsaXN0ZW5fc29jayAqbG9wdCA9IGljc2stPmljc2tfYWNjZXB0X3F1ZXVlLmxpc3Rlbl9vcHQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pbmV0X2RpYWcuYyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCmluZGV4IDQ5Mjg1OGUuLjc3NzYxYWMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRfZGlhZy5jCisrKyBiL25ldC9pcHY0L2luZXRfZGlhZy5jCkBAIC0zNiw4ICszNiw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGluZXRfZGlhZ19oYW5kbGVyICoqaW5ldF9kaWFnX3RhYmxlOwogCiBzdHJ1Y3QgaW5ldF9kaWFnX2VudHJ5IHsKLQl1MzIgKnNhZGRyOwotCXUzMiAqZGFkZHI7CisJX19iZTMyICpzYWRkcjsKKwlfX2JlMzIgKmRhZGRyOwogCXUxNiBzcG9ydDsKIAl1MTYgZHBvcnQ7CiAJdTE2IGZhbWlseTsKQEAgLTI5NCw3ICsyOTQsNyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgYml0c3RyaW5nX21hdGNoKGNvbnN0IHUzMiAqYTEsIGNvbnN0IHUzMiAqYTIsIGludCBiaXRzKQorc3RhdGljIGludCBiaXRzdHJpbmdfbWF0Y2goY29uc3QgX19iZTMyICphMSwgY29uc3QgX19iZTMyICphMiwgaW50IGJpdHMpCiB7CiAJaW50IHdvcmRzID0gYml0cyA+PiA1OwogCkBAIC0zMDUsOCArMzA1LDggQEAKIAkJCXJldHVybiAwOwogCX0KIAlpZiAoYml0cykgewotCQlfX3UzMiB3MSwgdzI7Ci0JCV9fdTMyIG1hc2s7CisJCV9fYmUzMiB3MSwgdzI7CisJCV9fYmUzMiBtYXNrOwogCiAJCXcxID0gYTFbd29yZHNdOwogCQl3MiA9IGEyW3dvcmRzXTsKQEAgLTM1Miw3ICszNTIsNyBAQAogCQljYXNlIElORVRfRElBR19CQ19TX0NPTkQ6CiAJCWNhc2UgSU5FVF9ESUFHX0JDX0RfQ09ORDogewogCQkJc3RydWN0IGluZXRfZGlhZ19ob3N0Y29uZCAqY29uZDsKLQkJCXUzMiAqYWRkcjsKKwkJCV9fYmUzMiAqYWRkcjsKIAogCQkJY29uZCA9IChzdHJ1Y3QgaW5ldF9kaWFnX2hvc3Rjb25kICopKG9wICsgMSk7CiAJCQlpZiAoY29uZC0+cG9ydCAhPSAtMSAmJgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaW5ldF9oYXNodGFibGVzLmMgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwppbmRleCBmYjI5NmM5Li4yNDRjNGY0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYworKysgYi9uZXQvaXB2NC9pbmV0X2hhc2h0YWJsZXMuYwpAQCAtMTI1LDcgKzEyNSw3IEBACiAgKiB3aWxkY2FyZGVkIGR1cmluZyB0aGUgc2VhcmNoIHNpbmNlIHRoZXkgY2FuIG5ldmVyIGJlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIHN0cnVjdCBzb2NrICppbmV0X2xvb2t1cF9saXN0ZW5lcl9zbG93KGNvbnN0IHN0cnVjdCBobGlzdF9oZWFkICpoZWFkLAotCQkJCQkgICAgICBjb25zdCB1MzIgZGFkZHIsCisJCQkJCSAgICAgIGNvbnN0IF9fYmUzMiBkYWRkciwKIAkJCQkJICAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgaG51bSwKIAkJCQkJICAgICAgY29uc3QgaW50IGRpZikKIHsKQEAgLTEzNyw3ICsxMzcsNyBAQAogCQljb25zdCBzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAKIAkJaWYgKGluZXQtPm51bSA9PSBobnVtICYmICFpcHY2X29ubHlfc29jayhzaykpIHsKLQkJCWNvbnN0IF9fdTMyIHJjdl9zYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwkJCWNvbnN0IF9fYmUzMiByY3Zfc2FkZHIgPSBpbmV0LT5yY3Zfc2FkZHI7CiAJCQlpbnQgc2NvcmUgPSBzay0+c2tfZmFtaWx5ID09IFBGX0lORVQgPyAxIDogMDsKIAogCQkJaWYgKHJjdl9zYWRkcikgewpAQCAtMTYzLDcgKzE2Myw3IEBACiAKIC8qIE9wdGltaXplIHRoZSBjb21tb24gbGlzdGVuZXIgY2FzZS4gKi8KIHN0cnVjdCBzb2NrICpfX2luZXRfbG9va3VwX2xpc3RlbmVyKHN0cnVjdCBpbmV0X2hhc2hpbmZvICpoYXNoaW5mbywKLQkJCQkgICAgY29uc3QgdTMyIGRhZGRyLCBjb25zdCB1bnNpZ25lZCBzaG9ydCBobnVtLAorCQkJCSAgICBjb25zdCBfX2JlMzIgZGFkZHIsIGNvbnN0IHVuc2lnbmVkIHNob3J0IGhudW0sCiAJCQkJICAgIGNvbnN0IGludCBkaWYpCiB7CiAJc3RydWN0IHNvY2sgKnNrID0gTlVMTDsKQEAgLTE5NywxMSArMTk3LDExIEBACiB7CiAJc3RydWN0IGluZXRfaGFzaGluZm8gKmhpbmZvID0gZGVhdGhfcm93LT5oYXNoaW5mbzsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7Ci0JdTMyIGRhZGRyID0gaW5ldC0+cmN2X3NhZGRyOwotCXUzMiBzYWRkciA9IGluZXQtPmRhZGRyOworCV9fYmUzMiBkYWRkciA9IGluZXQtPnJjdl9zYWRkcjsKKwlfX2JlMzIgc2FkZHIgPSBpbmV0LT5kYWRkcjsKIAlpbnQgZGlmID0gc2stPnNrX2JvdW5kX2Rldl9pZjsKIAlJTkVUX0FERFJfQ09PS0lFKGFjb29raWUsIHNhZGRyLCBkYWRkcikKLQljb25zdCBfX3UzMiBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoaW5ldC0+ZHBvcnQsIGxwb3J0KTsKKwljb25zdCBfX3BvcnRwYWlyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOwogCXVuc2lnbmVkIGludCBoYXNoID0gaW5ldF9laGFzaGZuKGRhZGRyLCBscG9ydCwgc2FkZHIsIGluZXQtPmRwb3J0KTsKIAlzdHJ1Y3QgaW5ldF9laGFzaF9idWNrZXQgKmhlYWQgPSBpbmV0X2VoYXNoX2J1Y2tldChoaW5mbywgaGFzaCk7CiAJc3RydWN0IHNvY2sgKnNrMjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2luZXRwZWVyLmMgYi9uZXQvaXB2NC9pbmV0cGVlci5jCmluZGV4IGE2NzU2MDIuLjJiMWE1NGIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2luZXRwZWVyLmMKKysrIGIvbmV0L2lwdjQvaW5ldHBlZXIuYwpAQCAtMTYzLDcgKzE2Myw3IEBACiAJZm9yICh1ID0gcGVlcl9yb290OyB1ICE9IHBlZXJfYXZsX2VtcHR5OyApIHsJCVwKIAkJaWYgKGRhZGRyID09IHUtPnY0ZGFkZHIpCQkJXAogCQkJYnJlYWs7CQkJCQlcCi0JCWlmIChkYWRkciA8IHUtPnY0ZGFkZHIpCQkJCVwKKwkJaWYgKChfX2ZvcmNlIF9fdTMyKWRhZGRyIDwgKF9fZm9yY2UgX191MzIpdS0+djRkYWRkcikJXAogCQkJdiA9ICZ1LT5hdmxfbGVmdDsJCQlcCiAJCWVsc2UJCQkJCQlcCiAJCQl2ID0gJnUtPmF2bF9yaWdodDsJCQlcCkBAIC0zNjgsNyArMzY4LDcgQEAKIH0KIAogLyogQ2FsbGVkIHdpdGggb3Igd2l0aG91dCBsb2NhbCBCSCBiZWluZyBkaXNhYmxlZC4gKi8KLXN0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihfX3UzMiBkYWRkciwgaW50IGNyZWF0ZSkKK3N0cnVjdCBpbmV0X3BlZXIgKmluZXRfZ2V0cGVlcihfX2JlMzIgZGFkZHIsIGludCBjcmVhdGUpCiB7CiAJc3RydWN0IGluZXRfcGVlciAqcCwgKm47CiAJc3RydWN0IGluZXRfcGVlciAqKnN0YWNrW1BFRVJfTUFYREVQVEhdLCAqKipzdGFja3B0cjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMgYi9uZXQvaXB2NC9pcF9mcmFnbWVudC5jCmluZGV4IDE2NWQ3MjguLjc0MDQ2ZWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX2ZyYWdtZW50LmMKKysrIGIvbmV0L2lwdjQvaXBfZnJhZ21lbnQuYwpAQCAtNzcsOSArNzcsOSBAQAogCXN0cnVjdCBobGlzdF9ub2RlIGxpc3Q7CiAJc3RydWN0IGxpc3RfaGVhZCBscnVfbGlzdDsJLyogbHJ1IGxpc3QgbWVtYmVyIAkJCSovCiAJdTMyCQl1c2VyOwotCXUzMgkJc2FkZHI7Ci0JdTMyCQlkYWRkcjsKLQl1MTYJCWlkOworCV9fYmUzMgkJc2FkZHI7CisJX19iZTMyCQlkYWRkcjsKKwlfX2JlMTYJCWlkOwogCXU4CQlwcm90b2NvbDsKIAl1OAkJbGFzdF9pbjsKICNkZWZpbmUgQ09NUExFVEUJCTQKQEAgLTEyMyw5ICsxMjMsMTAgQEAKIAl3cml0ZV91bmxvY2soJmlwZnJhZ19sb2NrKTsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBpcHFoYXNoZm4odTE2IGlkLCB1MzIgc2FkZHIsIHUzMiBkYWRkciwgdTggcHJvdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXBxaGFzaGZuKF9fYmUxNiBpZCwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHU4IHByb3QpCiB7Ci0JcmV0dXJuIGpoYXNoXzN3b3JkcygodTMyKWlkIDw8IDE2IHwgcHJvdCwgc2FkZHIsIGRhZGRyLAorCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWlkIDw8IDE2IHwgcHJvdCwKKwkJCSAgICAoX19mb3JjZSB1MzIpc2FkZHIsIChfX2ZvcmNlIHUzMilkYWRkciwKIAkJCSAgICBpcGZyYWdfaGFzaF9ybmQpICYgKElQUV9IQVNIU1ogLSAxKTsKIH0KIApAQCAtMzg3LDggKzM4OCw4IEBACiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcHEgKmlwX2ZpbmQoc3RydWN0IGlwaGRyICppcGgsIHUzMiB1c2VyKQogewogCV9fYmUxNiBpZCA9IGlwaC0+aWQ7Ci0JX191MzIgc2FkZHIgPSBpcGgtPnNhZGRyOwotCV9fdTMyIGRhZGRyID0gaXBoLT5kYWRkcjsKKwlfX2JlMzIgc2FkZHIgPSBpcGgtPnNhZGRyOworCV9fYmUzMiBkYWRkciA9IGlwaC0+ZGFkZHI7CiAJX191OCBwcm90b2NvbCA9IGlwaC0+cHJvdG9jb2w7CiAJdW5zaWduZWQgaW50IGhhc2g7CiAJc3RydWN0IGlwcSAqcXA7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vcHRpb25zLmMgYi9uZXQvaXB2NC9pcF9vcHRpb25zLmMKaW5kZXggZTc0MzdjMC4uOGRhYmJmYyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfb3B0aW9ucy5jCisrKyBiL25ldC9pcHY0L2lwX29wdGlvbnMuYwpAQCAtMzgsNyArMzgsNyBAQAogICovCiAKIHZvaWQgaXBfb3B0aW9uc19idWlsZChzdHJ1Y3Qgc2tfYnVmZiAqIHNrYiwgc3RydWN0IGlwX29wdGlvbnMgKiBvcHQsCi0JCQkgICAgdTMyIGRhZGRyLCBzdHJ1Y3QgcnRhYmxlICpydCwgaW50IGlzX2ZyYWcpIAorCQkJICAgIF9fYmUzMiBkYWRkciwgc3RydWN0IHJ0YWJsZSAqcnQsIGludCBpc19mcmFnKQogewogCXVuc2lnbmVkIGNoYXIgKiBpcGggPSBza2ItPm5oLnJhdzsKIApAQCAtNTcsNyArNTcsNyBAQAogCQkJaXBfcnRfZ2V0X3NvdXJjZShpcGgrb3B0LT50cytpcGhbb3B0LT50cysyXS05LCBydCk7CiAJCWlmIChvcHQtPnRzX25lZWR0aW1lKSB7CiAJCQlzdHJ1Y3QgdGltZXZhbCB0djsKLQkJCV9fdTMyIG1pZHRpbWU7CisJCQlfX2JlMzIgbWlkdGltZTsKIAkJCWRvX2dldHRpbWVvZmRheSgmdHYpOwogCQkJbWlkdGltZSA9IGh0b25sKCh0di50dl9zZWMgJSA4NjQwMCkgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDApOwogCQkJbWVtY3B5KGlwaCtvcHQtPnRzK2lwaFtvcHQtPnRzKzJdLTUsICZtaWR0aW1lLCA0KTsKQEAgLTkxLDcgKzkxLDcgQEAKIAl1bnNpZ25lZCBjaGFyICpzcHRyLCAqZHB0cjsKIAlpbnQgc29mZnNldCwgZG9mZnNldDsKIAlpbnQJb3B0bGVuOwotCXUzMglkYWRkcjsKKwlfX2JlMzIJZGFkZHI7CiAKIAltZW1zZXQoZG9wdCwgMCwgc2l6ZW9mKHN0cnVjdCBpcF9vcHRpb25zKSk7CiAKQEAgLTE0OCw3ICsxNDgsNyBAQAogCQkJCQlkb3B0LT50c19uZWVkdGltZSA9IDA7CiAKIAkJCQkJaWYgKHNvZmZzZXQgKyA4IDw9IG9wdGxlbikgewotCQkJCQkJX191MzIgYWRkcjsKKwkJCQkJCV9fYmUzMiBhZGRyOwogCiAJCQkJCQltZW1jcHkoJmFkZHIsIHNwdHIrc29mZnNldC0xLCA0KTsKIAkJCQkJCWlmIChpbmV0X2FkZHJfdHlwZShhZGRyKSAhPSBSVE5fTE9DQUwpIHsKQEAgLTE2NSw3ICsxNjUsNyBAQAogCX0KIAlpZiAoc29wdC0+c3JyKSB7CiAJCXVuc2lnbmVkIGNoYXIgKiBzdGFydCA9IHNwdHIrc29wdC0+c3JyOwotCQl1MzIgZmFkZHI7CisJCV9fYmUzMiBmYWRkcjsKIAogCQlvcHRsZW4gID0gc3RhcnRbMV07CiAJCXNvZmZzZXQgPSBzdGFydFsyXTsKQEAgLTM2Miw3ICszNjIsNyBAQAogCQkJCWdvdG8gZXJyb3I7CiAJCQl9CiAJCQlpZiAob3B0cHRyWzJdIDw9IG9wdGxlbikgewotCQkJCV9fdTMyICogdGltZXB0ciA9IE5VTEw7CisJCQkJX19iZTMyICp0aW1lcHRyID0gTlVMTDsKIAkJCQlpZiAob3B0cHRyWzJdKzMgPiBvcHRwdHJbMV0pIHsKIAkJCQkJcHBfcHRyID0gb3B0cHRyICsgMjsKIAkJCQkJZ290byBlcnJvcjsKQEAgLTM3MSw3ICszNzEsNyBAQAogCQkJCSAgICAgIGNhc2UgSVBPUFRfVFNfVFNPTkxZOgogCQkJCQlvcHQtPnRzID0gb3B0cHRyIC0gaXBoOwogCQkJCQlpZiAoc2tiKSAKLQkJCQkJCXRpbWVwdHIgPSAoX191MzIqKSZvcHRwdHJbb3B0cHRyWzJdLTFdOworCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdLTFdOwogCQkJCQlvcHQtPnRzX25lZWR0aW1lID0gMTsKIAkJCQkJb3B0cHRyWzJdICs9IDQ7CiAJCQkJCWJyZWFrOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJCQkJCW9wdC0+dHMgPSBvcHRwdHIgLSBpcGg7CiAJCQkJCWlmIChza2IpIHsKIAkJCQkJCW1lbWNweSgmb3B0cHRyW29wdHB0clsyXS0xXSwgJnJ0LT5ydF9zcGVjX2RzdCwgNCk7Ci0JCQkJCQl0aW1lcHRyID0gKF9fdTMyKikmb3B0cHRyW29wdHB0clsyXSszXTsKKwkJCQkJCXRpbWVwdHIgPSAoX19iZTMyKikmb3B0cHRyW29wdHB0clsyXSszXTsKIAkJCQkJfQogCQkJCQlvcHQtPnRzX25lZWRhZGRyID0gMTsKIAkJCQkJb3B0LT50c19uZWVkdGltZSA9IDE7CkBAIC0zOTYsMTIgKzM5NiwxMiBAQAogCQkJCQl9CiAJCQkJCW9wdC0+dHMgPSBvcHRwdHIgLSBpcGg7CiAJCQkJCXsKLQkJCQkJCXUzMiBhZGRyOworCQkJCQkJX19iZTMyIGFkZHI7CiAJCQkJCQltZW1jcHkoJmFkZHIsICZvcHRwdHJbb3B0cHRyWzJdLTFdLCA0KTsKIAkJCQkJCWlmIChpbmV0X2FkZHJfdHlwZShhZGRyKSA9PSBSVE5fVU5JQ0FTVCkKIAkJCQkJCQlicmVhazsKIAkJCQkJCWlmIChza2IpCi0JCQkJCQkJdGltZXB0ciA9IChfX3UzMiopJm9wdHB0cltvcHRwdHJbMl0rM107CisJCQkJCQkJdGltZXB0ciA9IChfX2JlMzIqKSZvcHRwdHJbb3B0cHRyWzJdKzNdOwogCQkJCQl9CiAJCQkJCW9wdC0+dHNfbmVlZHRpbWUgPSAxOwogCQkJCQlvcHRwdHJbMl0gKz0gODsKQEAgLTQxNSwxMCArNDE1LDEwIEBACiAJCQkJfQogCQkJCWlmICh0aW1lcHRyKSB7CiAJCQkJCXN0cnVjdCB0aW1ldmFsIHR2OwotCQkJCQlfX3UzMiAgbWlkdGltZTsKKwkJCQkJX19iZTMyICBtaWR0aW1lOwogCQkJCQlkb19nZXR0aW1lb2ZkYXkoJnR2KTsKIAkJCQkJbWlkdGltZSA9IGh0b25sKCh0di50dl9zZWMgJSA4NjQwMCkgKiAxMDAwICsgdHYudHZfdXNlYyAvIDEwMDApOwotCQkJCQltZW1jcHkodGltZXB0ciwgJm1pZHRpbWUsIHNpemVvZihfX3UzMikpOworCQkJCQltZW1jcHkodGltZXB0ciwgJm1pZHRpbWUsIHNpemVvZihfX2JlMzIpKTsKIAkJCQkJb3B0LT5pc19jaGFuZ2VkID0gMTsKIAkJCQl9CiAJCQl9IGVsc2UgewpAQCAtNjA3LDcgKzYwNyw3IEBACiB7CiAJc3RydWN0IGlwX29wdGlvbnMgKm9wdCA9ICYoSVBDQihza2IpLT5vcHQpOwogCWludCBzcnJzcGFjZSwgc3JycHRyOwotCXUzMiBuZXh0aG9wOworCV9fYmUzMiBuZXh0aG9wOwogCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiLT5uaC5pcGg7CiAJdW5zaWduZWQgY2hhciAqIG9wdHB0ciA9IHNrYi0+bmgucmF3ICsgb3B0LT5zcnI7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcF9vdXRwdXQuYyBiL25ldC9pcHY0L2lwX291dHB1dC5jCmluZGV4IDk3YWVlNzYuLmZjMTk1YTQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwX291dHB1dC5jCisrKyBiL25ldC9pcHY0L2lwX291dHB1dC5jCkBAIC0xMTgsNyArMTE4LDcgQEAKICAqCiAgKi8KIGludCBpcF9idWlsZF9hbmRfc2VuZF9wa3Qoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHNvY2sgKnNrLAotCQkJICB1MzIgc2FkZHIsIHUzMiBkYWRkciwgc3RydWN0IGlwX29wdGlvbnMgKm9wdCkKKwkJCSAgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHN0cnVjdCBpcF9vcHRpb25zICpvcHQpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKilza2ItPmRzdDsKQEAgLTMwNiw3ICszMDYsNyBAQAogCS8qIE1ha2Ugc3VyZSB3ZSBjYW4gcm91dGUgdGhpcyBwYWNrZXQuICovCiAJcnQgPSAoc3RydWN0IHJ0YWJsZSAqKV9fc2tfZHN0X2NoZWNrKHNrLCAwKTsKIAlpZiAocnQgPT0gTlVMTCkgewotCQl1MzIgZGFkZHI7CisJCV9fYmUzMiBkYWRkcjsKIAogCQkvKiBVc2UgY29ycmVjdCBkZXN0aW5hdGlvbiBhZGRyZXNzIGlmIHdlIGhhdmUgb3B0aW9ucy4gKi8KIAkJZGFkZHIgPSBpbmV0LT5kYWRkcjsKQEAgLTEzNDAsNyArMTM0MCw3IEBACiAJCWNoYXIJCQlkYXRhWzQwXTsKIAl9IHJlcGx5b3B0czsKIAlzdHJ1Y3QgaXBjbV9jb29raWUgaXBjOwotCXUzMiBkYWRkcjsKKwlfX2JlMzIgZGFkZHI7CiAJc3RydWN0IHJ0YWJsZSAqcnQgPSAoc3RydWN0IHJ0YWJsZSopc2tiLT5kc3Q7CiAKIAlpZiAoaXBfb3B0aW9uc19lY2hvKCZyZXBseW9wdHMub3B0LCBza2IpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYyBiL25ldC9pcHY0L2lwX3NvY2tnbHVlLmMKaW5kZXggMmQwNWM0MS4uNGIxMzI5NSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBfc29ja2dsdWUuYworKysgYi9uZXQvaXB2NC9pcF9zb2NrZ2x1ZS5jCkBAIC0yNTQsNyArMjU0LDcgQEAKIH0KIAogdm9pZCBpcF9pY21wX2Vycm9yKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGVyciwgCi0JCSAgIHUxNiBwb3J0LCB1MzIgaW5mbywgdTggKnBheWxvYWQpCisJCSAgIF9fYmUxNiBwb3J0LCB1MzIgaW5mbywgdTggKnBheWxvYWQpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc2spOwogCXN0cnVjdCBzb2NrX2V4dGVycl9za2IgKnNlcnI7CkBAIC0yODMsNyArMjgzLDcgQEAKIAkJa2ZyZWVfc2tiKHNrYik7CiB9CiAKLXZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCB1MzIgZGFkZHIsIHUxNiBwb3J0LCB1MzIgaW5mbykKK3ZvaWQgaXBfbG9jYWxfZXJyb3Ioc3RydWN0IHNvY2sgKnNrLCBpbnQgZXJyLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBwb3J0LCB1MzIgaW5mbykKIHsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IHNvY2tfZXh0ZXJyX3NrYiAqc2VycjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwY29tcC5jIGIvbmV0L2lwdjQvaXBjb21wLmMKaW5kZXggMTczNDI0My4uMjAxN2QzNiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXBjb21wLmMKKysrIGIvbmV0L2lwdjQvaXBjb21wLmMKQEAgLTE4Myw3ICsxODMsNyBAQAogCiBzdGF0aWMgdm9pZCBpcGNvbXA0X2VycihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5mbykKIHsKLQl1MzIgc3BpOworCV9fYmUzMiBzcGk7CiAJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiLT5kYXRhOwogCXN0cnVjdCBpcF9jb21wX2hkciAqaXBjaCA9IChzdHJ1Y3QgaXBfY29tcF9oZHIgKikoc2tiLT5kYXRhKyhpcGgtPmlobDw8MikpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXBtci5jIGIvbmV0L2lwdjQvaXBtci5jCmluZGV4IGJhNDk1ODguLjk3Y2ZhOTcgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwbXIuYworKysgYi9uZXQvaXB2NC9pcG1yLmMKQEAgLTQ2Miw3ICs0NjIsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKF9fdTMyIG9yaWdpbiwgX191MzIgbWNhc3RncnApCitzdGF0aWMgc3RydWN0IG1mY19jYWNoZSAqaXBtcl9jYWNoZV9maW5kKF9fYmUzMiBvcmlnaW4sIF9fYmUzMiBtY2FzdGdycCkKIHsKIAlpbnQgbGluZT1NRkNfSEFTSChtY2FzdGdycCxvcmlnaW4pOwogCXN0cnVjdCBtZmNfY2FjaGUgKmM7CkBAIC0xMDk3LDcgKzEwOTcsNyBAQAogICoJaW1wb3J0YW50IGZvciBtdWx0aWNhc3QgdmlkZW8uCiAgKi8KICAKLXN0YXRpYyB2b2lkIGlwX2VuY2FwKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBzYWRkciwgdTMyIGRhZGRyKQorc3RhdGljIHZvaWQgaXBfZW5jYXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIpCiB7CiAJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopc2tiX3B1c2goc2tiLHNpemVvZihzdHJ1Y3QgaXBoZHIpKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb25uLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwppbmRleCA4N2I4MzgxLi44ODMyZWI1IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Nvbm4uYwpAQCAtMTE1LDkgKzExNSw5IEBACiAvKgogICoJUmV0dXJucyBoYXNoIHZhbHVlIGZvciBJUFZTIGNvbm5lY3Rpb24gZW50cnkKICAqLwotc3RhdGljIHVuc2lnbmVkIGludCBpcF92c19jb25uX2hhc2hrZXkodW5zaWduZWQgcHJvdG8sIF9fdTMyIGFkZHIsIF9fdTE2IHBvcnQpCitzdGF0aWMgdW5zaWduZWQgaW50IGlwX3ZzX2Nvbm5faGFzaGtleSh1bnNpZ25lZCBwcm90bywgX19iZTMyIGFkZHIsIF9fYmUxNiBwb3J0KQogewotCXJldHVybiBqaGFzaF8zd29yZHMoYWRkciwgcG9ydCwgcHJvdG8sIGlwX3ZzX2Nvbm5fcm5kKQorCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKWFkZHIsIChfX2ZvcmNlIHUzMilwb3J0LCBwcm90bywgaXBfdnNfY29ubl9ybmQpCiAJCSYgSVBfVlNfQ09OTl9UQUJfTUFTSzsKIH0KIApAQCAtMTg4LDcgKzE4OCw3IEBACiAgKglkX2FkZHIsIGRfcG9ydDogcGt0IGRlc3QgYWRkcmVzcyAobG9hZCBiYWxhbmNlcikKICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfY29ubiAqX19pcF92c19jb25uX2luX2dldAotKGludCBwcm90b2NvbCwgX191MzIgc19hZGRyLCBfX3UxNiBzX3BvcnQsIF9fdTMyIGRfYWRkciwgX191MTYgZF9wb3J0KQorKGludCBwcm90b2NvbCwgX19iZTMyIHNfYWRkciwgX19iZTE2IHNfcG9ydCwgX19iZTMyIGRfYWRkciwgX19iZTE2IGRfcG9ydCkKIHsKIAl1bnNpZ25lZCBoYXNoOwogCXN0cnVjdCBpcF92c19jb25uICpjcDsKQEAgLTIxNSw3ICsyMTUsNyBAQAogfQogCiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9pbl9nZXQKLShpbnQgcHJvdG9jb2wsIF9fdTMyIHNfYWRkciwgX191MTYgc19wb3J0LCBfX3UzMiBkX2FkZHIsIF9fdTE2IGRfcG9ydCkKKyhpbnQgcHJvdG9jb2wsIF9fYmUzMiBzX2FkZHIsIF9fYmUxNiBzX3BvcnQsIF9fYmUzMiBkX2FkZHIsIF9fYmUxNiBkX3BvcnQpCiB7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwogCkBAIC0yMzQsNyArMjM0LDcgQEAKIAogLyogR2V0IHJlZmVyZW5jZSB0byBjb25uZWN0aW9uIHRlbXBsYXRlICovCiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY3RfaW5fZ2V0Ci0oaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpCisoaW50IHByb3RvY29sLCBfX2JlMzIgc19hZGRyLCBfX2JlMTYgc19wb3J0LCBfX2JlMzIgZF9hZGRyLCBfX2JlMTYgZF9wb3J0KQogewogCXVuc2lnbmVkIGhhc2g7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwpAQCAtMjc0LDcgKzI3NCw3IEBACiAgKglkX2FkZHIsIGRfcG9ydDogcGt0IGRlc3QgYWRkcmVzcyAoZm9yZWlnbiBob3N0KQogICovCiBzdHJ1Y3QgaXBfdnNfY29ubiAqaXBfdnNfY29ubl9vdXRfZ2V0Ci0oaW50IHByb3RvY29sLCBfX3UzMiBzX2FkZHIsIF9fdTE2IHNfcG9ydCwgX191MzIgZF9hZGRyLCBfX3UxNiBkX3BvcnQpCisoaW50IHByb3RvY29sLCBfX2JlMzIgc19hZGRyLCBfX2JlMTYgc19wb3J0LCBfX2JlMzIgZF9hZGRyLCBfX2JlMTYgZF9wb3J0KQogewogCXVuc2lnbmVkIGhhc2g7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCAqcmV0PU5VTEw7CkBAIC0zMjQsNyArMzI0LDcgQEAKIC8qCiAgKglGaWxsIGEgbm9fY2xpZW50X3BvcnQgY29ubmVjdGlvbiB3aXRoIGEgY2xpZW50IHBvcnQgbnVtYmVyCiAgKi8KLXZvaWQgaXBfdnNfY29ubl9maWxsX2Nwb3J0KHN0cnVjdCBpcF92c19jb25uICpjcCwgX191MTYgY3BvcnQpCit2b2lkIGlwX3ZzX2Nvbm5fZmlsbF9jcG9ydChzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIF9fYmUxNiBjcG9ydCkKIHsKIAlpZiAoaXBfdnNfY29ubl91bmhhc2goY3ApKSB7CiAJCXNwaW5fbG9jaygmY3AtPmxvY2spOwpAQCAtNTA4LDEwICs1MDgsMTAgQEAKIAkJLyoKIAkJICogSW52YWxpZGF0ZSB0aGUgY29ubmVjdGlvbiB0ZW1wbGF0ZQogCQkgKi8KLQkJaWYgKGN0LT52cG9ydCAhPSA2NTUzNSkgeworCQlpZiAoY3QtPnZwb3J0ICE9IGh0b25zKDB4ZmZmZikpIHsKIAkJCWlmIChpcF92c19jb25uX3VuaGFzaChjdCkpIHsKLQkJCQljdC0+ZHBvcnQgPSA2NTUzNTsKLQkJCQljdC0+dnBvcnQgPSA2NTUzNTsKKwkJCQljdC0+ZHBvcnQgPSBodG9ucygweGZmZmYpOworCQkJCWN0LT52cG9ydCA9IGh0b25zKDB4ZmZmZik7CiAJCQkJY3QtPmNwb3J0ID0gMDsKIAkJCQlpcF92c19jb25uX2hhc2goY3QpOwogCQkJfQpAQCAtNTk2LDggKzU5Niw4IEBACiAgKglDcmVhdGUgYSBuZXcgY29ubmVjdGlvbiBlbnRyeSBhbmQgaGFzaCBpdCBpbnRvIHRoZSBpcF92c19jb25uX3RhYgogICovCiBzdHJ1Y3QgaXBfdnNfY29ubiAqCi1pcF92c19jb25uX25ldyhpbnQgcHJvdG8sIF9fdTMyIGNhZGRyLCBfX3UxNiBjcG9ydCwgX191MzIgdmFkZHIsIF9fdTE2IHZwb3J0LAotCSAgICAgICBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQsIHVuc2lnbmVkIGZsYWdzLAoraXBfdnNfY29ubl9uZXcoaW50IHByb3RvLCBfX2JlMzIgY2FkZHIsIF9fYmUxNiBjcG9ydCwgX19iZTMyIHZhZGRyLCBfX2JlMTYgdnBvcnQsCisJICAgICAgIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LCB1bnNpZ25lZCBmbGFncywKIAkgICAgICAgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCiB7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19jb3JlLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwppbmRleCAzZjQ3YWQ4Li42ZGVlMDM5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2NvcmUuYwpAQCAtMjA5LDE0ICsyMDksMTQgQEAKIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfY29ubiAqCiBpcF92c19zY2hlZF9wZXJzaXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsCiAJCSAgICBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAotCQkgICAgX191MTYgcG9ydHNbMl0pCisJCSAgICBfX2JlMTYgcG9ydHNbMl0pCiB7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwID0gTlVMTDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOwogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwogCXN0cnVjdCBpcF92c19jb25uICpjdDsKLQlfX3UxNiAgZHBvcnQ7CSAvKiBkZXN0aW5hdGlvbiBwb3J0IHRvIGZvcndhcmQgKi8KLQlfX3UzMiAgc25ldDsJIC8qIHNvdXJjZSBuZXR3b3JrIG9mIHRoZSBjbGllbnQsIGFmdGVyIG1hc2tpbmcgKi8KKwlfX2JlMTYgIGRwb3J0OwkgLyogZGVzdGluYXRpb24gcG9ydCB0byBmb3J3YXJkICovCisJX19iZTMyICBzbmV0OwkgLyogc291cmNlIG5ldHdvcmsgb2YgdGhlIGNsaWVudCwgYWZ0ZXIgbWFza2luZyAqLwogCiAJLyogTWFzayBzYWRkciB3aXRoIHRoZSBuZXRtYXNrIHRvIGFkanVzdCB0ZW1wbGF0ZSBncmFudWxhcml0eSAqLwogCXNuZXQgPSBpcGgtPnNhZGRyICYgc3ZjLT5uZXRtYXNrOwpAQCAtMzgzLDcgKzM4Myw3IEBACiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwID0gTlVMTDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IHNrYi0+bmguaXBoOwogCXN0cnVjdCBpcF92c19kZXN0ICpkZXN0OwotCV9fdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CiAKIAlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLT5paGwqNCwKIAkJCQkgIHNpemVvZihfcG9ydHMpLCBfcG9ydHMpOwpAQCAtNDQ2LDcgKzQ0Niw3IEBACiBpbnQgaXBfdnNfbGVhdmUoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2Yywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCkKIHsKLQlfX3UxNiBfcG9ydHNbMl0sICpwcHRyOworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwogCXN0cnVjdCBpcGhkciAqaXBoID0gc2tiLT5uaC5pcGg7CiAKIAlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLT5paGwqNCwKQEAgLTU3Niw3ICs1NzYsNyBAQAogCiAJLyogdGhlIFRDUC9VRFAgcG9ydCAqLwogCWlmIChJUFBST1RPX1RDUCA9PSBjaXBoLT5wcm90b2NvbCB8fCBJUFBST1RPX1VEUCA9PSBjaXBoLT5wcm90b2NvbCkgewotCQlfX3UxNiAqcG9ydHMgPSAodm9pZCAqKWNpcGggKyBjaXBoLT5paGwqNDsKKwkJX19iZTE2ICpwb3J0cyA9ICh2b2lkICopY2lwaCArIGNpcGgtPmlobCo0OwogCiAJCWlmIChpbm91dCkKIAkJCXBvcnRzWzFdID0gY3AtPnZwb3J0OwpAQCAtNzc1LDcgKzc3NSw3IEBACiAJCWlmIChzeXNjdGxfaXBfdnNfbmF0X2ljbXBfc2VuZCAmJgogCQkgICAgKHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1RDUCB8fAogCQkgICAgIHBwLT5wcm90b2NvbCA9PSBJUFBST1RPX1VEUCkpIHsKLQkJCV9fdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJCQlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKIAogCQkJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIGlobCwKIAkJCQkJCSAgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19jdGwuYwppbmRleCA2YTI4ZmFmLi5mMjYxNjE2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2N0bC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfY3RsLmMKQEAgLTI4Myw3ICsyODMsNyBAQAogICoJUmV0dXJucyBoYXNoIHZhbHVlIGZvciB2aXJ0dWFsIHNlcnZpY2UKICAqLwogc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQKLWlwX3ZzX3N2Y19oYXNoa2V5KHVuc2lnbmVkIHByb3RvLCBfX3UzMiBhZGRyLCBfX3UxNiBwb3J0KQoraXBfdnNfc3ZjX2hhc2hrZXkodW5zaWduZWQgcHJvdG8sIF9fYmUzMiBhZGRyLCBfX2JlMTYgcG9ydCkKIHsKIAlyZWdpc3RlciB1bnNpZ25lZCBwb3J0aCA9IG50b2hzKHBvcnQpOwogCkBAIC0zNjUsNyArMzY1LDcgQEAKICAqCUdldCBzZXJ2aWNlIGJ5IHtwcm90byxhZGRyLHBvcnR9IGluIHRoZSBzZXJ2aWNlIHRhYmxlLgogICovCiBzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgaXBfdnNfc2VydmljZSAqCi1fX2lwX3ZzX3NlcnZpY2VfZ2V0KF9fdTE2IHByb3RvY29sLCBfX3UzMiB2YWRkciwgX191MTYgdnBvcnQpCitfX2lwX3ZzX3NlcnZpY2VfZ2V0KF9fdTE2IHByb3RvY29sLCBfX2JlMzIgdmFkZHIsIF9fYmUxNiB2cG9ydCkKIHsKIAl1bnNpZ25lZCBoYXNoOwogCXN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmM7CkBAIC00MTAsNyArNDEwLDcgQEAKIH0KIAogc3RydWN0IGlwX3ZzX3NlcnZpY2UgKgotaXBfdnNfc2VydmljZV9nZXQoX191MzIgZndtYXJrLCBfX3UxNiBwcm90b2NvbCwgX191MzIgdmFkZHIsIF9fdTE2IHZwb3J0KQoraXBfdnNfc2VydmljZV9nZXQoX191MzIgZndtYXJrLCBfX3UxNiBwcm90b2NvbCwgX19iZTMyIHZhZGRyLCBfX2JlMTYgdnBvcnQpCiB7CiAJc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YzsKIApAQCAtNDgwLDcgKzQ4MCw3IEBACiAvKgogICoJUmV0dXJucyBoYXNoIHZhbHVlIGZvciByZWFsIHNlcnZpY2UKICAqLwotc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaXBfdnNfcnNfaGFzaGtleShfX3UzMiBhZGRyLCBfX3UxNiBwb3J0KQorc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQgaXBfdnNfcnNfaGFzaGtleShfX2JlMzIgYWRkciwgX19iZTE2IHBvcnQpCiB7CiAJcmVnaXN0ZXIgdW5zaWduZWQgcG9ydGggPSBudG9ocyhwb3J0KTsKIApAQCAtNTMxLDcgKzUzMSw3IEBACiAgKglMb29rdXAgcmVhbCBzZXJ2aWNlIGJ5IDxwcm90byxhZGRyLHBvcnQ+IGluIHRoZSByZWFsIHNlcnZpY2UgdGFibGUuCiAgKi8KIHN0cnVjdCBpcF92c19kZXN0ICoKLWlwX3ZzX2xvb2t1cF9yZWFsX3NlcnZpY2UoX191MTYgcHJvdG9jb2wsIF9fdTMyIGRhZGRyLCBfX3UxNiBkcG9ydCkKK2lwX3ZzX2xvb2t1cF9yZWFsX3NlcnZpY2UoX191MTYgcHJvdG9jb2wsIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0KQogewogCXVuc2lnbmVkIGhhc2g7CiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7CkBAIC01NjIsNyArNTYyLDcgQEAKICAqCUxvb2t1cCBkZXN0aW5hdGlvbiBieSB7YWRkcixwb3J0fSBpbiB0aGUgZ2l2ZW4gc2VydmljZQogICovCiBzdGF0aWMgc3RydWN0IGlwX3ZzX2Rlc3QgKgotaXBfdnNfbG9va3VwX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgX191MzIgZGFkZHIsIF9fdTE2IGRwb3J0KQoraXBfdnNfbG9va3VwX2Rlc3Qoc3RydWN0IGlwX3ZzX3NlcnZpY2UgKnN2YywgX19iZTMyIGRhZGRyLCBfX2JlMTYgZHBvcnQpCiB7CiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7CiAKQEAgLTU5MSw3ICs1OTEsNyBAQAogICogIHNjaGVkdWxpbmcuCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgaXBfdnNfZGVzdCAqCi1pcF92c190cmFzaF9nZXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBfX3UzMiBkYWRkciwgX191MTYgZHBvcnQpCitpcF92c190cmFzaF9nZXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBfX2JlMzIgZGFkZHIsIF9fYmUxNiBkcG9ydCkKIHsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdCwgKm54dDsKIApAQCAtNzczLDggKzc3Myw4IEBACiBpcF92c19hZGRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyICp1ZGVzdCkKIHsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDsKLQlfX3UzMiBkYWRkciA9IHVkZXN0LT5hZGRyOwotCV9fdTE2IGRwb3J0ID0gdWRlc3QtPnBvcnQ7CisJX19iZTMyIGRhZGRyID0gdWRlc3QtPmFkZHI7CisJX19iZTE2IGRwb3J0ID0gdWRlc3QtPnBvcnQ7CiAJaW50IHJldDsKIAogCUVudGVyRnVuY3Rpb24oMik7CkBAIC04NzksOCArODc5LDggQEAKIGlwX3ZzX2VkaXRfZGVzdChzdHJ1Y3QgaXBfdnNfc2VydmljZSAqc3ZjLCBzdHJ1Y3QgaXBfdnNfZGVzdF91c2VyICp1ZGVzdCkKIHsKIAlzdHJ1Y3QgaXBfdnNfZGVzdCAqZGVzdDsKLQlfX3UzMiBkYWRkciA9IHVkZXN0LT5hZGRyOwotCV9fdTE2IGRwb3J0ID0gdWRlc3QtPnBvcnQ7CisJX19iZTMyIGRhZGRyID0gdWRlc3QtPmFkZHI7CisJX19iZTE2IGRwb3J0ID0gdWRlc3QtPnBvcnQ7CiAKIAlFbnRlckZ1bmN0aW9uKDIpOwogCkBAIC05OTEsOCArOTkxLDggQEAKIGlwX3ZzX2RlbF9kZXN0KHN0cnVjdCBpcF92c19zZXJ2aWNlICpzdmMsc3RydWN0IGlwX3ZzX2Rlc3RfdXNlciAqdWRlc3QpCiB7CiAJc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3Q7Ci0JX191MzIgZGFkZHIgPSB1ZGVzdC0+YWRkcjsKLQlfX3UxNiBkcG9ydCA9IHVkZXN0LT5wb3J0OworCV9fYmUzMiBkYWRkciA9IHVkZXN0LT5hZGRyOworCV9fYmUxNiBkcG9ydCA9IHVkZXN0LT5wb3J0OwogCiAJRW50ZXJGdW5jdGlvbigyKTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19kaC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19kaC5jCmluZGV4IDlmZWUxOWMuLjUwMjExMWYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfZGguYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2RoLmMKQEAgLTY2LDcgKzY2LDcgQEAKIC8qCiAgKglSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgREggZW50cnkKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcF92c19kaF9oYXNoa2V5KF9fdTMyIGFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlwX3ZzX2RoX2hhc2hrZXkoX19iZTMyIGFkZHIpCiB7CiAJcmV0dXJuIChudG9obChhZGRyKSoyNjU0NDM1NzYxVUwpICYgSVBfVlNfREhfVEFCX01BU0s7CiB9CkBAIC03Niw3ICs3Niw3IEBACiAgKiAgICAgIEdldCBpcF92c19kZXN0IGFzc29jaWF0ZWQgd2l0aCBzdXBwbGllZCBwYXJhbWV0ZXJzLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICoKLWlwX3ZzX2RoX2dldChzdHJ1Y3QgaXBfdnNfZGhfYnVja2V0ICp0YmwsIF9fdTMyIGFkZHIpCitpcF92c19kaF9nZXQoc3RydWN0IGlwX3ZzX2RoX2J1Y2tldCAqdGJsLCBfX2JlMzIgYWRkcikKIHsKIAlyZXR1cm4gKHRibFtpcF92c19kaF9oYXNoa2V5KGFkZHIpXSkuZGVzdDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfZnRwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2Z0cC5jCmluZGV4IDM3ZmFmYjEuLmU0MzNjYjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfZnRwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19mdHAuYwpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2lwLmg+CiAjaW5jbHVkZSA8bmV0L3Byb3RvY29sLmg+CiAjaW5jbHVkZSA8bmV0L3RjcC5oPgorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KIAogI2luY2x1ZGUgPG5ldC9pcF92cy5oPgogCkBAIC00NCw4ICs0NSw4IEBACiAgKiBMaXN0IG9mIHBvcnRzICh1cCB0byBJUF9WU19BUFBfTUFYX1BPUlRTKSB0byBiZSBoYW5kbGVkIGJ5IGhlbHBlcgogICogRmlyc3QgcG9ydCBpcyBzZXQgdG8gdGhlIGRlZmF1bHQgcG9ydC4KICAqLwotc3RhdGljIGludCBwb3J0c1tJUF9WU19BUFBfTUFYX1BPUlRTXSA9IHsyMSwgMH07Ci1tb2R1bGVfcGFyYW1fYXJyYXkocG9ydHMsIGludCwgTlVMTCwgMCk7CitzdGF0aWMgdW5zaWduZWQgc2hvcnQgcG9ydHNbSVBfVlNfQVBQX01BWF9QT1JUU10gPSB7MjEsIDB9OworbW9kdWxlX3BhcmFtX2FycmF5KHBvcnRzLCB1c2hvcnQsIE5VTEwsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwb3J0cywgIlBvcnRzIHRvIG1vbml0b3IgZm9yIEZUUCBjb250cm9sIGNvbW1hbmRzIik7CiAKIApAQCAtNzQsNyArNzUsNyBAQAogICovCiBzdGF0aWMgaW50IGlwX3ZzX2Z0cF9nZXRfYWRkcnBvcnQoY2hhciAqZGF0YSwgY2hhciAqZGF0YV9saW1pdCwKIAkJCQkgIGNvbnN0IGNoYXIgKnBhdHRlcm4sIHNpemVfdCBwbGVuLCBjaGFyIHRlcm0sCi0JCQkJICBfX3UzMiAqYWRkciwgX191MTYgKnBvcnQsCisJCQkJICBfX2JlMzIgKmFkZHIsIF9fYmUxNiAqcG9ydCwKIAkJCQkgIGNoYXIgKipzdGFydCwgY2hhciAqKmVuZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHBbNl07CkBAIC0xMTQsOCArMTE1LDggQEAKIAlpZiAoaSAhPSA1KQogCQlyZXR1cm4gLTE7CiAKLQkqYWRkciA9IChwWzNdPDwyNCkgfCAocFsyXTw8MTYpIHwgKHBbMV08PDgpIHwgcFswXTsKLQkqcG9ydCA9IChwWzVdPDw4KSB8IHBbNF07CisJKmFkZHIgPSBnZXRfdW5hbGlnbmVkKChfX2JlMzIgKilwKTsKKwkqcG9ydCA9IGdldF91bmFsaWduZWQoKF9fYmUxNiAqKShwICsgNCkpOwogCXJldHVybiAxOwogfQogCkBAIC0xNDAsOCArMTQxLDggQEAKIAlzdHJ1Y3QgdGNwaGRyICp0aDsKIAljaGFyICpkYXRhLCAqZGF0YV9saW1pdDsKIAljaGFyICpzdGFydCwgKmVuZDsKLQlfX3UzMiBmcm9tOwotCV9fdTE2IHBvcnQ7CisJX19iZTMyIGZyb207CisJX19iZTE2IHBvcnQ7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKm5fY3A7CiAJY2hhciBidWZbMjRdOwkJLyogeHh4Lnh4eC54eHgueHh4LHBwcCxwcHBcMDAwICovCiAJdW5zaWduZWQgYnVmX2xlbjsKQEAgLTE5OSw3ICsyMDAsNyBAQAogCQlmcm9tID0gbl9jcC0+dmFkZHI7CiAJCXBvcnQgPSBuX2NwLT52cG9ydDsKIAkJc3ByaW50ZihidWYsIiVkLCVkLCVkLCVkLCVkLCVkIiwgTklQUVVBRChmcm9tKSwKLQkJCXBvcnQmMjU1LCAocG9ydD4+OCkmMjU1KTsKKwkJCW50b2hzKHBvcnQpJjI1NSwgKG50b2hzKHBvcnQpPj44KSYyNTUpOwogCQlidWZfbGVuID0gc3RybGVuKGJ1Zik7CiAKIAkJLyoKQEAgLTI0Myw4ICsyNDQsOCBAQAogCXN0cnVjdCB0Y3BoZHIgKnRoOwogCWNoYXIgKmRhdGEsICpkYXRhX3N0YXJ0LCAqZGF0YV9saW1pdDsKIAljaGFyICpzdGFydCwgKmVuZDsKLQlfX3UzMiB0bzsKLQlfX3UxNiBwb3J0OworCV9fYmUzMiB0bzsKKwlfX2JlMTYgcG9ydDsKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqbl9jcDsKIAogCS8qIG5vIGRpZmYgcmVxdWlyZWQgZm9yIGluY29taW5nIHBhY2tldHMgKi8KQEAgLTM2NSwxMiArMzY2LDYgQEAKIAlmb3IgKGk9MDsgaTxJUF9WU19BUFBfTUFYX1BPUlRTOyBpKyspIHsKIAkJaWYgKCFwb3J0c1tpXSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocG9ydHNbaV0gPCAwIHx8IHBvcnRzW2ldID4gMHhmZmZmKSB7Ci0JCQlJUF9WU19XQVJOSU5HKCJpcF92c19mdHA6IElnbm9yaW5nIGludmFsaWQgIgotCQkJCSAgICAgICJjb25maWd1cmF0aW9uIHBvcnRbJWRdID0gJWRcbiIsCi0JCQkJICAgICAgaSwgcG9ydHNbaV0pOwotCQkJY29udGludWU7Ci0JCX0KIAkJcmV0ID0gcmVnaXN0ZXJfaXBfdnNfYXBwX2luYyhhcHAsIGFwcC0+cHJvdG9jb2wsIHBvcnRzW2ldKTsKIAkJaWYgKHJldCkKIAkJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwppbmRleCA2ZTVjYjkyLi41MjQ3NTFlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGMuYwpAQCAtODcsNyArODcsNyBAQAogICovCiBzdHJ1Y3QgaXBfdnNfbGJsY19lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKLQlfX3UzMiAgICAgICAgICAgICAgICAgICBhZGRyOyAgICAgICAgICAgLyogZGVzdGluYXRpb24gSVAgYWRkcmVzcyAqLworCV9fYmUzMiAgICAgICAgICAgICAgICAgIGFkZHI7ICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBJUCBhZGRyZXNzICovCiAJc3RydWN0IGlwX3ZzX2Rlc3QgICAgICAgKmRlc3Q7ICAgICAgICAgIC8qIHJlYWwgc2VydmVyIChjYWNoZSkgKi8KIAl1bnNpZ25lZCBsb25nICAgICAgICAgICBsYXN0dXNlOyAgICAgICAgLyogbGFzdCB1c2VkIHRpbWUgKi8KIH07CkBAIC0xNjAsNyArMTYwLDcgQEAKICAqICAgICAgSVAgYWRkcmVzcyB0byBhIHNlcnZlci4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfbGJsY19lbnRyeSAqCi1pcF92c19sYmxjX25ldyhfX3UzMiBkYWRkciwgc3RydWN0IGlwX3ZzX2Rlc3QgKmRlc3QpCitpcF92c19sYmxjX25ldyhfX2JlMzIgZGFkZHIsIHN0cnVjdCBpcF92c19kZXN0ICpkZXN0KQogewogCXN0cnVjdCBpcF92c19sYmxjX2VudHJ5ICplbjsKIApAQCAtMTk1LDcgKzE5NSw3IEBACiAvKgogICoJUmV0dXJucyBoYXNoIHZhbHVlIGZvciBJUFZTIExCTEMgZW50cnkKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcF92c19sYmxjX2hhc2hrZXkoX191MzIgYWRkcikKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaXBfdnNfbGJsY19oYXNoa2V5KF9fYmUzMiBhZGRyKQogewogCXJldHVybiAobnRvaGwoYWRkcikqMjY1NDQzNTc2MVVMKSAmIElQX1ZTX0xCTENfVEFCX01BU0s7CiB9CkBAIC0yMzQsNyArMjM0LDcgQEAKICAqICBHZXQgaXBfdnNfbGJsY19lbnRyeSBhc3NvY2lhdGVkIHdpdGggc3VwcGxpZWQgcGFyYW1ldGVycy4KICAqLwogc3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfbGJsY19lbnRyeSAqCi1pcF92c19sYmxjX2dldChzdHJ1Y3QgaXBfdnNfbGJsY190YWJsZSAqdGJsLCBfX3UzMiBhZGRyKQoraXBfdnNfbGJsY19nZXQoc3RydWN0IGlwX3ZzX2xibGNfdGFibGUgKnRibCwgX19iZTMyIGFkZHIpCiB7CiAJdW5zaWduZWQgaGFzaDsKIAlzdHJ1Y3QgaXBfdnNfbGJsY19lbnRyeSAqZW47CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX2xibGNyLmMKaW5kZXggMzJiYTM3Yi4uMDg5OTAxOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19sYmxjci5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfbGJsY3IuYwpAQCAtMjc2LDcgKzI3Niw3IEBACiAgKi8KIHN0cnVjdCBpcF92c19sYmxjcl9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZCAgICAgICAgbGlzdDsKLQlfX3UzMiAgICAgICAgICAgICAgICAgICBhZGRyOyAgICAgICAgICAgLyogZGVzdGluYXRpb24gSVAgYWRkcmVzcyAqLworCV9fYmUzMiAgICAgICAgICAgICAgICAgICBhZGRyOyAgICAgICAgICAgLyogZGVzdGluYXRpb24gSVAgYWRkcmVzcyAqLwogCXN0cnVjdCBpcF92c19kZXN0X3NldCAgIHNldDsgICAgICAgICAgICAvKiBkZXN0aW5hdGlvbiBzZXJ2ZXIgc2V0ICovCiAJdW5zaWduZWQgbG9uZyAgICAgICAgICAgbGFzdHVzZTsgICAgICAgIC8qIGxhc3QgdXNlZCB0aW1lICovCiB9OwpAQCAtMzQ4LDcgKzM0OCw3IEBACiAgKiAgICAgIG5ldy9mcmVlIGEgaXBfdnNfbGJsY3JfZW50cnksIHdoaWNoIGlzIGEgbWFwcGluZyBvZiBhIGRlc3RpbmF0aW9uCiAgKiAgICAgIElQIGFkZHJlc3MgdG8gYSBzZXJ2ZXIuCiAgKi8KLXN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2xibGNyX2VudHJ5ICppcF92c19sYmxjcl9uZXcoX191MzIgZGFkZHIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19sYmxjcl9lbnRyeSAqaXBfdnNfbGJsY3JfbmV3KF9fYmUzMiBkYWRkcikKIHsKIAlzdHJ1Y3QgaXBfdnNfbGJsY3JfZW50cnkgKmVuOwogCkBAIC0zODEsNyArMzgxLDcgQEAKIC8qCiAgKglSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgTEJMQ1IgZW50cnkKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcF92c19sYmxjcl9oYXNoa2V5KF9fdTMyIGFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlwX3ZzX2xibGNyX2hhc2hrZXkoX19iZTMyIGFkZHIpCiB7CiAJcmV0dXJuIChudG9obChhZGRyKSoyNjU0NDM1NzYxVUwpICYgSVBfVlNfTEJMQ1JfVEFCX01BU0s7CiB9CkBAIC00MjAsNyArNDIwLDcgQEAKICAqICBHZXQgaXBfdnNfbGJsY3JfZW50cnkgYXNzb2NpYXRlZCB3aXRoIHN1cHBsaWVkIHBhcmFtZXRlcnMuCiAgKi8KIHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX2xibGNyX2VudHJ5ICoKLWlwX3ZzX2xibGNyX2dldChzdHJ1Y3QgaXBfdnNfbGJsY3JfdGFibGUgKnRibCwgX191MzIgYWRkcikKK2lwX3ZzX2xibGNyX2dldChzdHJ1Y3QgaXBfdnNfbGJsY3JfdGFibGUgKnRibCwgX19iZTMyIGFkZHIpCiB7CiAJdW5zaWduZWQgaGFzaDsKIAlzdHJ1Y3QgaXBfdnNfbGJsY3JfZW50cnkgKmVuOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90by5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90by5jCmluZGV4IDg2N2Q0ZTkuLmM0NTI4YjUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG8uYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvLmMKQEAgLTE3Niw3ICsxNzYsNyBAQAogCQkJcHAtPm5hbWUsIE5JUFFVQUQoaWgtPnNhZGRyKSwKIAkJCU5JUFFVQUQoaWgtPmRhZGRyKSk7CiAJZWxzZSB7Ci0JCV9fdTE2IF9wb3J0c1syXSwgKnBwdHIKKwkJX19iZTE2IF9wb3J0c1syXSwgKnBwdHIKIDsKIAkJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCArIGloLT5paGwqNCwKIAkJCQkJICBzaXplb2YoX3BvcnRzKSwgX3BvcnRzKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3RjcC5jCmluZGV4IDgyMGU4MzEuLmJmZTc3OWUgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b190Y3AuYwpAQCAtMjksNyArMjksNyBAQAogdGNwX2Nvbm5faW5fZ2V0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHAsCiAJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLCBpbnQgaW52ZXJzZSkKIHsKLQlfX3UxNiBfcG9ydHNbMl0sICpwcHRyOworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwogCiAJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CiAJaWYgKHBwdHIgPT0gTlVMTCkKQEAgLTUwLDcgKzUwLDcgQEAKIHRjcF9jb25uX291dF9nZXQoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcCwKIAkJIGNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLCBpbnQgaW52ZXJzZSkKIHsKLQlfX3UxNiBfcG9ydHNbMl0sICpwcHRyOworCV9fYmUxNiBfcG9ydHNbMl0sICpwcHRyOwogCiAJcHB0ciA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIHByb3RvX29mZiwgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CiAJaWYgKHBwdHIgPT0gTlVMTCkKQEAgLTExMiwxMiArMTEyLDEyIEBACiAKIAogc3RhdGljIGlubGluZSB2b2lkCi10Y3BfZmFzdF9jc3VtX3VwZGF0ZShzdHJ1Y3QgdGNwaGRyICp0Y3BoLCB1MzIgb2xkaXAsIHUzMiBuZXdpcCwKLQkJICAgICB1MTYgb2xkcG9ydCwgdTE2IG5ld3BvcnQpCit0Y3BfZmFzdF9jc3VtX3VwZGF0ZShzdHJ1Y3QgdGNwaGRyICp0Y3BoLCBfX2JlMzIgb2xkaXAsIF9fYmUzMiBuZXdpcCwKKwkJICAgICBfX2JlMTYgb2xkcG9ydCwgX19iZTE2IG5ld3BvcnQpCiB7CiAJdGNwaC0+Y2hlY2sgPQogCQlpcF92c19jaGVja19kaWZmKH5vbGRpcCwgbmV3aXAsCi0JCQkJIGlwX3ZzX2NoZWNrX2RpZmYob2xkcG9ydCBeIDB4RkZGRiwKKwkJCQkgaXBfdnNfY2hlY2tfZGlmZihvbGRwb3J0IF4gaHRvbmwoMHhGRkZGKSwKIAkJCQkJCSAgbmV3cG9ydCwgdGNwaC0+Y2hlY2spKTsKIH0KIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfcHJvdG9fdWRwLmMKaW5kZXggOTBjODE2Ni4uNTRhYTc2MCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3Byb3RvX3VkcC5jCkBAIC0yOSw3ICsyOSw3IEBACiAJCWNvbnN0IHN0cnVjdCBpcGhkciAqaXBoLCB1bnNpZ25lZCBpbnQgcHJvdG9fb2ZmLCBpbnQgaW52ZXJzZSkKIHsKIAlzdHJ1Y3QgaXBfdnNfY29ubiAqY3A7Ci0JX191MTYgX3BvcnRzWzJdLCAqcHB0cjsKKwlfX2JlMTYgX3BvcnRzWzJdLCAqcHB0cjsKIAogCXBwdHIgPSBza2JfaGVhZGVyX3BvaW50ZXIoc2tiLCBwcm90b19vZmYsIHNpemVvZihfcG9ydHMpLCBfcG9ydHMpOwogCWlmIChwcHRyID09IE5VTEwpCkBAIC01NCw3ICs1NCw3IEBACiAJCSBjb25zdCBzdHJ1Y3QgaXBoZHIgKmlwaCwgdW5zaWduZWQgaW50IHByb3RvX29mZiwgaW50IGludmVyc2UpCiB7CiAJc3RydWN0IGlwX3ZzX2Nvbm4gKmNwOwotCV9fdTE2IF9wb3J0c1syXSwgKnBwdHI7CisJX19iZTE2IF9wb3J0c1syXSwgKnBwdHI7CiAKIAlwcHRyID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgc2tiLT5uaC5pcGgtPmlobCo0LAogCQkJCSAgc2l6ZW9mKF9wb3J0cyksIF9wb3J0cyk7CkBAIC0xMTcsMTUgKzExNywxNSBAQAogCiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotdWRwX2Zhc3RfY3N1bV91cGRhdGUoc3RydWN0IHVkcGhkciAqdWhkciwgdTMyIG9sZGlwLCB1MzIgbmV3aXAsCi0JCSAgICAgdTE2IG9sZHBvcnQsIHUxNiBuZXdwb3J0KQordWRwX2Zhc3RfY3N1bV91cGRhdGUoc3RydWN0IHVkcGhkciAqdWhkciwgX19iZTMyIG9sZGlwLCBfX2JlMzIgbmV3aXAsCisJCSAgICAgX19iZTE2IG9sZHBvcnQsIF9fYmUxNiBuZXdwb3J0KQogewogCXVoZHItPmNoZWNrID0KIAkJaXBfdnNfY2hlY2tfZGlmZih+b2xkaXAsIG5ld2lwLAotCQkJCSBpcF92c19jaGVja19kaWZmKG9sZHBvcnQgXiAweEZGRkYsCisJCQkJIGlwX3ZzX2NoZWNrX2RpZmYob2xkcG9ydCBeIGh0b25sKDB4RkZGRiksCiAJCQkJCQkgIG5ld3BvcnQsIHVoZHItPmNoZWNrKSk7CiAJaWYgKCF1aGRyLT5jaGVjaykKLQkJdWhkci0+Y2hlY2sgPSAweEZGRkY7CisJCXVoZHItPmNoZWNrID0gaHRvbmwoMHhGRkZGKTsKIH0KIAogc3RhdGljIGludApAQCAtMTczLDcgKzE3Myw3IEBACiAJCQkJCQljcC0+cHJvdG9jb2wsCiAJCQkJCQkoKnBza2IpLT5jc3VtKTsKIAkJaWYgKHVkcGgtPmNoZWNrID09IDApCi0JCQl1ZHBoLT5jaGVjayA9IDB4RkZGRjsKKwkJCXVkcGgtPmNoZWNrID0gaHRvbmwoMHhGRkZGKTsKIAkJSVBfVlNfREJHKDExLCAiTy1wa3Q6ICVzIE8tY3N1bT0lZCAoKyV6ZClcbiIsCiAJCQkgIHBwLT5uYW1lLCB1ZHBoLT5jaGVjaywKIAkJCSAgKGNoYXIqKSYodWRwaC0+Y2hlY2spIC0gKGNoYXIqKXVkcGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaXB2cy9pcF92c19zaC5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zaC5jCmluZGV4IDc3NzVlNmMuLjMzODY2OGYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc2guYworKysgYi9uZXQvaXB2NC9pcHZzL2lwX3ZzX3NoLmMKQEAgLTYzLDcgKzYzLDcgQEAKIC8qCiAgKglSZXR1cm5zIGhhc2ggdmFsdWUgZm9yIElQVlMgU0ggZW50cnkKICAqLwotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpcF92c19zaF9oYXNoa2V5KF9fdTMyIGFkZHIpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGlwX3ZzX3NoX2hhc2hrZXkoX19iZTMyIGFkZHIpCiB7CiAJcmV0dXJuIChudG9obChhZGRyKSoyNjU0NDM1NzYxVUwpICYgSVBfVlNfU0hfVEFCX01BU0s7CiB9CkBAIC03Myw3ICs3Myw3IEBACiAgKiAgICAgIEdldCBpcF92c19kZXN0IGFzc29jaWF0ZWQgd2l0aCBzdXBwbGllZCBwYXJhbWV0ZXJzLgogICovCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19kZXN0ICoKLWlwX3ZzX3NoX2dldChzdHJ1Y3QgaXBfdnNfc2hfYnVja2V0ICp0YmwsIF9fdTMyIGFkZHIpCitpcF92c19zaF9nZXQoc3RydWN0IGlwX3ZzX3NoX2J1Y2tldCAqdGJsLCBfX2JlMzIgYWRkcikKIHsKIAlyZXR1cm4gKHRibFtpcF92c19zaF9oYXNoa2V5KGFkZHIpXSkuZGVzdDsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggMWJjYTcxNC4uOTFhMDc1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKKysrIGIvbmV0L2lwdjQvaXB2cy9pcF92c19zeW5jLmMKQEAgLTQ4LDE2ICs0OCwxNiBAQAogCiAJLyogUHJvdG9jb2wsIGFkZHJlc3NlcyBhbmQgcG9ydCBudW1iZXJzICovCiAJX191OAkJCXByb3RvY29sOyAgICAgICAvKiBXaGljaCBwcm90b2NvbCAoVENQL1VEUCkgKi8KLQlfX3UxNgkJCWNwb3J0OwotCV9fdTE2ICAgICAgICAgICAgICAgICAgIHZwb3J0OwotCV9fdTE2ICAgICAgICAgICAgICAgICAgIGRwb3J0OwotCV9fdTMyICAgICAgICAgICAgICAgICAgIGNhZGRyOyAgICAgICAgICAvKiBjbGllbnQgYWRkcmVzcyAqLwotCV9fdTMyICAgICAgICAgICAgICAgICAgIHZhZGRyOyAgICAgICAgICAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KLQlfX3UzMiAgICAgICAgICAgICAgICAgICBkYWRkcjsgICAgICAgICAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLworCV9fYmUxNgkJCWNwb3J0OworCV9fYmUxNiAgICAgICAgICAgICAgICAgIHZwb3J0OworCV9fYmUxNiAgICAgICAgICAgICAgICAgIGRwb3J0OworCV9fYmUzMiAgICAgICAgICAgICAgICAgIGNhZGRyOyAgICAgICAgICAvKiBjbGllbnQgYWRkcmVzcyAqLworCV9fYmUzMiAgICAgICAgICAgICAgICAgIHZhZGRyOyAgICAgICAgICAvKiB2aXJ0dWFsIGFkZHJlc3MgKi8KKwlfX2JlMzIgICAgICAgICAgICAgICAgICBkYWRkcjsgICAgICAgICAgLyogZGVzdGluYXRpb24gYWRkcmVzcyAqLwogCiAJLyogRmxhZ3MgYW5kIHN0YXRlIHRyYW5zaXRpb24gKi8KLQlfX3UxNiAgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogc3RhdHVzIGZsYWdzICovCi0JX191MTYgICAgICAgICAgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIHN0YXRlIGluZm8gKi8KKwlfX2JlMTYgICAgICAgICAgICAgICAgICBmbGFnczsgICAgICAgICAgLyogc3RhdHVzIGZsYWdzICovCisJX19iZTE2ICAgICAgICAgICAgICAgICAgc3RhdGU7ICAgICAgICAgIC8qIHN0YXRlIGluZm8gKi8KIAogCS8qIFRoZSBzZXF1ZW5jZSBvcHRpb25zIHN0YXJ0IGhlcmUgKi8KIH07CkBAIC00NjQsNyArNDY0LDcgQEAKIHN0YXRpYyBpbnQgYmluZF9tY2FzdGlmX2FkZHIoc3RydWN0IHNvY2tldCAqc29jaywgY2hhciAqaWZuYW1lKQogewogCXN0cnVjdCBuZXRfZGV2aWNlICpkZXY7Ci0JdTMyIGFkZHI7CisJX19iZTMyIGFkZHI7CiAJc3RydWN0IHNvY2thZGRyX2luIHNpbjsKIAogCWlmICgoZGV2ID0gX19kZXZfZ2V0X2J5X25hbWUoaWZuYW1lKSkgPT0gTlVMTCkKQEAgLTgzNiw3ICs4MzYsNyBAQAogCiBpbnQgc3RhcnRfc3luY190aHJlYWQoaW50IHN0YXRlLCBjaGFyICptY2FzdF9pZm4sIF9fdTggc3luY2lkKQogewotCURFQ0xBUkVfQ09NUExFVElPTihzdGFydHVwKTsKKwlERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyhzdGFydHVwKTsKIAlwaWRfdCBwaWQ7CiAKIAlpZiAoKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUiAmJiBzeW5jX21hc3Rlcl9waWQpIHx8CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcHZzL2lwX3ZzX3htaXQuYyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jCmluZGV4IDUyYzEyZTkuLmUxZjc3YmQgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jCisrKyBiL25ldC9pcHY0L2lwdnMvaXBfdnNfeG1pdC5jCkBAIC0yMzIsNyArMjMyLDcgQEAKIAogCS8qIGNoZWNrIGlmIGl0IGlzIGEgY29ubmVjdGlvbiBvZiBuby1jbGllbnQtcG9ydCAqLwogCWlmICh1bmxpa2VseShjcC0+ZmxhZ3MgJiBJUF9WU19DT05OX0ZfTk9fQ1BPUlQpKSB7Ci0JCV9fdTE2IF9wdCwgKnA7CisJCV9fYmUxNiBfcHQsICpwOwogCQlwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaXBoLT5paGwqNCwgc2l6ZW9mKF9wdCksICZfcHQpOwogCQlpZiAocCA9PSBOVUxMKQogCQkJZ290byB0eF9lcnJvcjsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMgYi9uZXQvaXB2NC9tdWx0aXBhdGhfd3JhbmRvbS5jCmluZGV4IGQyNWVjNGEuLjkyYjA0ODIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L211bHRpcGF0aF93cmFuZG9tLmMKKysrIGIvbmV0L2lwdjQvbXVsdGlwYXRoX3dyYW5kb20uYwpAQCAtNjAsOCArNjAsOCBAQAogCXN0cnVjdCBsaXN0X2hlYWQJbGlzdDsKIAogCWNvbnN0IHN0cnVjdCBmaWJfbmgJKm5oX2luZm87Ci0JX191MzIJCQluZXRtYXNrOwotCV9fdTMyCQkJbmV0d29yazsKKwlfX2JlMzIJCQluZXRtYXNrOworCV9fYmUzMgkJCW5ldHdvcms7CiAJdW5zaWduZWQgY2hhcgkJcHJlZml4bGVuOwogCiAJc3RydWN0IHJjdV9oZWFkCQlyY3U7CkBAIC03Niw3ICs3Niw3IEBACiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCiAJaW50CQkJb2lmOwotCV9fdTMyCQkJZ3c7CisJX19iZTMyCQkJZ3c7CiAJc3RydWN0IGxpc3RfaGVhZAlkZXN0czsKIAogCXN0cnVjdCByY3VfaGVhZAkJcmN1OwpAQCAtMTI4LDggKzEyOCw4IEBACiAKIAkvKiBmaW5kIHN0YXRlIGVudHJ5IGZvciBkZXN0aW5hdGlvbiAqLwogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmN1KGQsICZ0YXJnZXRfcm91dGUtPmRlc3RzLCBsaXN0KSB7Ci0JCV9fdTMyIHRhcmdldG5ldHdvcmsgPSBmbC0+Zmw0X2RzdCAmIAotCQkJKDB4RkZGRkZGRkYgPj4gKDMyIC0gZC0+cHJlZml4bGVuKSk7CisJCV9fYmUzMiB0YXJnZXRuZXR3b3JrID0gZmwtPmZsNF9kc3QgJgorCQkJaW5ldF9tYWtlX21hc2soZC0+cHJlZml4bGVuKTsKIAogCQlpZiAoKHRhcmdldG5ldHdvcmsgJiBkLT5uZXRtYXNrKSA9PSBkLT5uZXR3b3JrKSB7CiAJCQl3ZWlnaHQgPSBkLT5uaF9pbmZvLT5uaF93ZWlnaHQ7CkBAIC0yMTcsOCArMjE3LDggQEAKIAkqcnAgPSBkZWNpc2lvbjsKIH0KIAotc3RhdGljIHZvaWQgd3JhbmRvbV9zZXRfbmhpbmZvKF9fdTMyIG5ldHdvcmssCi0JCQkgICAgICAgX191MzIgbmV0bWFzaywKK3N0YXRpYyB2b2lkIHdyYW5kb21fc2V0X25oaW5mbyhfX2JlMzIgbmV0d29yaywKKwkJCSAgICAgICBfX2JlMzIgbmV0bWFzaywKIAkJCSAgICAgICB1bnNpZ25lZCBjaGFyIHByZWZpeGxlbiwKIAkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZmliX25oICpuaCkKIHsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKaW5kZXggZjg4MzQ3ZC4uNWFjMTUzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyLmMKQEAgLTEyOCw4ICsxMjgsOCBAQAogICovCiAKIHN0cnVjdCBpcF9ydF9pbmZvIHsKLQl1X2ludDMyX3QgZGFkZHI7Ci0JdV9pbnQzMl90IHNhZGRyOworCV9fYmUzMiBkYWRkcjsKKwlfX2JlMzIgc2FkZHI7CiAJdV9pbnQ4X3QgdG9zOwogfTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9hcnBfdGFibGVzLmMKaW5kZXggODVmMGQ3My4uMTdlMWE2OCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2FycF90YWJsZXMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvYXJwX3RhYmxlcy5jCkBAIC04MCw3ICs4MCw3IEBACiB7CiAJY2hhciAqYXJwcHRyID0gKGNoYXIgKikoYXJwaGRyICsgMSk7CiAJY2hhciAqc3JjX2RldmFkZHIsICp0Z3RfZGV2YWRkcjsKLQl1MzIgc3JjX2lwYWRkciwgdGd0X2lwYWRkcjsKKwlfX2JlMzIgc3JjX2lwYWRkciwgdGd0X2lwYWRkcjsKIAlpbnQgaSwgcmV0OwogCiAjZGVmaW5lIEZXSU5WKGJvb2wsaW52ZmxnKSAoKGJvb2wpIF4gISEoYXJwaW5mby0+aW52ZmxhZ3MgJiBpbnZmbGcpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfYW1hbmRhLmMKaW5kZXggMGE3YmQ3Zi4uNmM3MzgzYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19hbWFuZGEuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2FtYW5kYS5jCkBAIC0xNTUsMTEgKzE1NSwxMSBAQAogCQlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwogCQlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CiAKLQkJZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJCWV4cC0+bWFzay5zcmMuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKIAkJZXhwLT5tYXNrLnNyYy51LnRjcC5wb3J0ID0gMDsKLQkJZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7CisJCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKIAkJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7Ci0JCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwkJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAogCQlpZiAoaXBfbmF0X2FtYW5kYV9ob29rKQogCQkJcmV0ID0gaXBfbmF0X2FtYW5kYV9ob29rKHBza2IsIGN0aW5mbywgb2ZmIC0gZGF0YW9mZiwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfY29yZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKaW5kZXggYzQzMmIzMS4uMTQzYzQ2NiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19jb3JlLmMKQEAgLTE0OSw4ICsxNDksOCBAQAogc3RhdGljIHVfaW50MzJfdCBfX2hhc2hfY29ubnRyYWNrKGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlLAogCQkJICAgIHVuc2lnbmVkIGludCBzaXplLCB1bnNpZ25lZCBpbnQgcm5kKQogewotCXJldHVybiAoamhhc2hfM3dvcmRzKHR1cGxlLT5zcmMuaXAsCi0JICAgICAgICAgICAgICAgICAgICAgKHR1cGxlLT5kc3QuaXAgXiB0dXBsZS0+ZHN0LnByb3RvbnVtKSwKKwlyZXR1cm4gKGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpdHVwbGUtPnNyYy5pcCwKKwkgICAgICAgICAgICAgICAgICAgICAoKF9fZm9yY2UgdTMyKXR1cGxlLT5kc3QuaXAgXiB0dXBsZS0+ZHN0LnByb3RvbnVtKSwKIAkgICAgICAgICAgICAgICAgICAgICAodHVwbGUtPnNyYy51LmFsbCB8ICh0dXBsZS0+ZHN0LnUuYWxsIDw8IDE2KSksCiAJICAgICAgICAgICAgICAgICAgICAgcm5kKSAlIHNpemUpOwogfQpAQCAtMTE2OSw5ICsxMTY5LDkgQEAKIGludCBpcF9jdF9wb3J0X3R1cGxlX3RvX25mYXR0cihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnR1cGxlKQogewotCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fU1JDX1BPUlQsIHNpemVvZih1X2ludDE2X3QpLAorCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fU1JDX1BPUlQsIHNpemVvZihfX2JlMTYpLAogCQkmdHVwbGUtPnNyYy51LnRjcC5wb3J0KTsKLQlORkFfUFVUKHNrYiwgQ1RBX1BST1RPX0RTVF9QT1JULCBzaXplb2YodV9pbnQxNl90KSwKKwlORkFfUFVUKHNrYiwgQ1RBX1BST1RPX0RTVF9QT1JULCBzaXplb2YoX19iZTE2KSwKIAkJJnR1cGxlLT5kc3QudS50Y3AucG9ydCk7CiAJcmV0dXJuIDA7CiAKQEAgLTExODYsOSArMTE4Niw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJdC0+c3JjLnUudGNwLnBvcnQgPQotCQkqKHVfaW50MTZfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19TUkNfUE9SVC0xXSk7CisJCSooX19iZTE2ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX1NSQ19QT1JULTFdKTsKIAl0LT5kc3QudS50Y3AucG9ydCA9Ci0JCSoodV9pbnQxNl90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX0RTVF9QT1JULTFdKTsKKwkJKihfX2JlMTYgKilORkFfREFUQSh0YltDVEFfUFJPVE9fRFNUX1BPUlQtMV0pOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19mdHAuYwppbmRleCAxZDE4Yzg2Li45M2RjZjk2IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2Z0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfZnRwLmMKQEAgLTQyNSw4ICs0MjUsOCBAQAogCWV4cC0+dHVwbGUuc3JjLnUudGNwLnBvcnQgPSAwOyAvKiBEb24ndCBjYXJlLiAqLwogCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7CiAJZXhwLT5tYXNrID0gKChzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlKQotCQl7IHsgMHhGRkZGRkZGRiwgeyAwIH0gfSwKLQkJICB7IDB4RkZGRkZGRkYsIHsgLnRjcCA9IHsgMHhGRkZGIH0gfSwgMHhGRiB9fSk7CisJCXsgeyBodG9ubCgweEZGRkZGRkZGKSwgeyAwIH0gfSwKKwkJICB7IGh0b25sKDB4RkZGRkZGRkYpLCB7IC50Y3AgPSB7IGh0b25zKDB4RkZGRikgfSB9LCAweEZGIH19KTsKIAogCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOwogCWV4cC0+ZmxhZ3MgPSAwOwpAQCAtNDg4LDcgKzQ4OCw3IEBACiAJZm9yIChpID0gMDsgaSA8IHBvcnRzX2M7IGkrKykgewogCQlmdHBbaV0udHVwbGUuc3JjLnUudGNwLnBvcnQgPSBodG9ucyhwb3J0c1tpXSk7CiAJCWZ0cFtpXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKLQkJZnRwW2ldLm1hc2suc3JjLnUudGNwLnBvcnQgPSAweEZGRkY7CisJCWZ0cFtpXS5tYXNrLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAkJZnRwW2ldLm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAkJZnRwW2ldLm1heF9leHBlY3RlZCA9IDE7CiAJCWZ0cFtpXS50aW1lb3V0ID0gNSAqIDYwOyAvKiA1IG1pbnV0ZXMgKi8KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX2gzMjMuYwppbmRleCA5YTM5ZTI5Li43Yjc0NDEyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9oMzIzLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfaDMyMy5jCkBAIC00OSwxMSArNDksMTEgQEAKIGludCAoKnNldF9oMjQ1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCiAJCQkgICBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAotCQkJICAgdV9pbnQzMl90IGlwLCB1X2ludDE2X3QgcG9ydCk7CisJCQkgICBfX2JlMzIgaXAsIHVfaW50MTZfdCBwb3J0KTsKIGludCAoKnNldF9oMjI1X2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCQkgICB1bnNpZ25lZCBjaGFyICoqZGF0YSwgaW50IGRhdGFvZmYsCiAJCQkgICBUcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSAgIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpOworCQkJICAgX19iZTMyIGlwLCB1X2ludDE2X3QgcG9ydCk7CiBpbnQgKCpzZXRfc2lnX2FkZHJfaG9vaykgKHN0cnVjdCBza19idWZmICoqIHBza2IsCiAJCQkgIHN0cnVjdCBpcF9jb25udHJhY2sgKiBjdCwKIAkJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8sCkBAIC0yMDksNyArMjA5LDcgQEAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgaW50IGdldF9oMjQ1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgSDI0NV9UcmFuc3BvcnRBZGRyZXNzICogYWRkciwKLQkJCSB1X2ludDMyX3QgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKKwkJCSBfX2JlMzIgKiBpcCwgdV9pbnQxNl90ICogcG9ydCkKIHsKIAl1bnNpZ25lZCBjaGFyICpwOwogCkBAIC0yMzIsNyArMjMyLDcgQEAKIHsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCByZXQgPSAwOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJdV9pbnQxNl90IHJ0cF9wb3J0OwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpydHBfZXhwOwpAQCAtMjU0LDEwICsyNTQsMTAgQEAKIAlydHBfZXhwLT50dXBsZS5kc3QuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcDsKIAlydHBfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHJ0cF9wb3J0KTsKIAlydHBfZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKLQlydHBfZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJcnRwX2V4cC0+bWFzay5zcmMuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKIAlydHBfZXhwLT5tYXNrLnNyYy51LnVkcC5wb3J0ID0gMDsKLQlydHBfZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JcnRwX2V4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IDB4RkZGRjsKKwlydHBfZXhwLT5tYXNrLmRzdC5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOworCXJ0cF9leHAtPm1hc2suZHN0LnUudWRwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCXJ0cF9leHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAlydHBfZXhwLT5mbGFncyA9IDA7CiAKQEAgLTI3MSwxMCArMjcxLDEwIEBACiAJcnRjcF9leHAtPnR1cGxlLmRzdC5pcCA9IGN0LT50dXBsZWhhc2hbIWRpcl0udHVwbGUuZHN0LmlwOwogCXJ0Y3BfZXhwLT50dXBsZS5kc3QudS51ZHAucG9ydCA9IGh0b25zKHJ0cF9wb3J0ICsgMSk7CiAJcnRjcF9leHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOwotCXJ0Y3BfZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJcnRjcF9leHAtPm1hc2suc3JjLmlwID0gaHRvbmwoMHhGRkZGRkZGRik7CiAJcnRjcF9leHAtPm1hc2suc3JjLnUudWRwLnBvcnQgPSAwOwotCXJ0Y3BfZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JcnRjcF9leHAtPm1hc2suZHN0LnUudWRwLnBvcnQgPSAweEZGRkY7CisJcnRjcF9leHAtPm1hc2suZHN0LmlwID0gaHRvbmwoMHhGRkZGRkZGRik7CisJcnRjcF9leHAtPm1hc2suZHN0LnUudWRwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCXJ0Y3BfZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CiAJcnRjcF9leHAtPmZsYWdzID0gMDsKIApAQCAtMzI1LDcgKzMyNSw3IEBACiB7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlpbnQgcmV0ID0gMDsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCXVfaW50MTZfdCBwb3J0OwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOwogCkBAIC0zNDIsMTAgKzM0MiwxMCBAQAogCWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CiAJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOwogCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7Ci0JZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOwogCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7Ci0JZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCWV4cC0+ZmxhZ3MgPSBJUF9DVF9FWFBFQ1RfUEVSTUFORU5UOwkvKiBBY2NlcHQgbXVsdGlwbGUgY2hhbm5lbHMgKi8KIApAQCAtNjI2LDcgKzYyNiw3IEBACiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogaW50IGdldF9oMjI1X2FkZHIodW5zaWduZWQgY2hhciAqZGF0YSwgVHJhbnNwb3J0QWRkcmVzcyAqIGFkZHIsCi0JCSAgdV9pbnQzMl90ICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCisJCSAgX19iZTMyICogaXAsIHVfaW50MTZfdCAqIHBvcnQpCiB7CiAJdW5zaWduZWQgY2hhciAqcDsKIApAQCAtNjQ4LDcgKzY0OCw3IEBACiB7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlpbnQgcmV0ID0gMDsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCXVfaW50MTZfdCBwb3J0OwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHAgPSBOVUxMOwogCkBAIC02NjUsMTAgKzY2NSwxMCBAQAogCWV4cC0+dHVwbGUuZHN0LmlwID0gY3QtPnR1cGxlaGFzaFshZGlyXS50dXBsZS5kc3QuaXA7CiAJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOwogCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19UQ1A7Ci0JZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOwogCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7Ci0JZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCWV4cC0+ZmxhZ3MgPSAwOwogCkBAIC03MDksNyArNzA5LDcgQEAKIHsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCByZXQgPSAwOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCA9IE5VTEw7CiAKQEAgLTc1MSwxMCArNzUxLDEwIEBACiAJZXhwLT50dXBsZS5kc3QuaXAgPSBpcDsKIAlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CiAJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKLQlleHAtPm1hc2suc3JjLmlwID0gMHhGRkZGRkZGRjsKKwlleHAtPm1hc2suc3JjLmlwID0gaHRvbmwoMHhGRkZGRkZGRik7CiAJZXhwLT5tYXNrLnNyYy51LnRjcC5wb3J0ID0gMDsKLQlleHAtPm1hc2suZHN0LmlwID0gMHhGRkZGRkZGRjsKLQlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSAweEZGRkY7CisJZXhwLT5tYXNrLmRzdC5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOworCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IGh0b25zKDB4RkZGRik7CiAJZXhwLT5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7CiAJZXhwLT5mbGFncyA9IDA7CiAKQEAgLTc5MSw3ICs3OTEsNyBAQAogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IHJldDsKIAlpbnQgaTsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCXVfaW50MTZfdCBwb3J0OwogCiAJREVCVUdQKCJpcF9jdF9xOTMxOiBTZXR1cFxuIik7CkBAIC0xMTg4LDcgKzExODgsNyBAQAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZmluZF9leHBlY3Qoc3RydWN0IGlwX2Nvbm50cmFjayAqY3QsCi0JCQkJCSAgICAgICB1X2ludDMyX3QgaXAsIHVfaW50MTZfdCBwb3J0KQorCQkJCQkgICAgICAgX19iZTMyIGlwLCB1X2ludDE2X3QgcG9ydCkKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCXN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgdHVwbGU7CkBAIC0xMjI4LDcgKzEyMjgsNyBAQAogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IHJldCA9IDA7CiAJaW50IGk7Ci0JdV9pbnQzMl90IGlwOworCV9fYmUzMiBpcDsKIAl1X2ludDE2X3QgcG9ydDsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwOwogCkBAIC0xMjUxLDEwICsxMjUxLDEwIEBACiAJZXhwLT50dXBsZS5kc3QuaXAgPSBjdC0+dHVwbGVoYXNoWyFkaXJdLnR1cGxlLmRzdC5pcDsKIAlleHAtPnR1cGxlLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMocG9ydCk7CiAJZXhwLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKLQlleHAtPm1hc2suc3JjLmlwID0gZ2tyb3V0ZWRfb25seSA/IDB4RkZGRkZGRkYgOiAwOworCWV4cC0+bWFzay5zcmMuaXAgPSBna3JvdXRlZF9vbmx5ID8gaHRvbmwoMHhGRkZGRkZGRikgOiAwOwogCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7Ci0JZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCWV4cC0+ZmxhZ3MgPSBJUF9DVF9FWFBFQ1RfUEVSTUFORU5UOwkvKiBBY2NlcHQgbXVsdGlwbGUgY2FsbHMgKi8KIApAQCAtMTMwNyw3ICsxMzA3LDcgQEAKIHsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCByZXQgPSAwOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cDsKIApAQCAtMTMzMywxMCArMTMzMywxMCBAQAogCWV4cC0+dHVwbGUuZHN0LmlwID0gaXA7CiAJZXhwLT50dXBsZS5kc3QudS50Y3AucG9ydCA9IGh0b25zKHBvcnQpOwogCWV4cC0+dHVwbGUuZHN0LnByb3RvbnVtID0gSVBQUk9UT19VRFA7Ci0JZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOwogCWV4cC0+bWFzay5zcmMudS50Y3AucG9ydCA9IDA7Ci0JZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUudGNwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCWV4cC0+ZmxhZ3MgPSAwOwogCWV4cC0+ZXhwZWN0Zm4gPSBpcF9jb25udHJhY2tfcmFzX2V4cGVjdDsKQEAgLTE0NzcsNyArMTQ3Nyw3IEBACiB7CiAJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAKIAlERUJVR1AoImlwX2N0X3JhczogQVJRXG4iKTsKQEAgLTE1MTMsNyArMTUxMyw3IEBACiB7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlpbnQgcmV0ID0gMDsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCXVfaW50MTZfdCBwb3J0OwogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7CiAKQEAgLTE1MzgsMTAgKzE1MzgsMTAgQEAKIAlleHAtPnR1cGxlLmRzdC5pcCA9IGlwOwogCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0KTsKIAlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwotCWV4cC0+bWFzay5zcmMuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5zcmMuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKIAlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOwotCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOwotCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LmlwID0gaHRvbmwoMHhGRkZGRkZGRik7CisJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKIAlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OwpAQCAtMTU4MSw3ICsxNTgxLDcgQEAKIHsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCByZXQgPSAwOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCA9IE5VTEw7CiAKQEAgLTE1OTgsMTAgKzE1OTgsMTAgQEAKIAlleHAtPnR1cGxlLmRzdC5pcCA9IGlwOwogCWV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQgPSBodG9ucyhwb3J0KTsKIAlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVENQOwotCWV4cC0+bWFzay5zcmMuaXAgPSAweEZGRkZGRkZGOworCWV4cC0+bWFzay5zcmMuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKIAlleHAtPm1hc2suc3JjLnUudGNwLnBvcnQgPSAwOwotCWV4cC0+bWFzay5kc3QuaXAgPSAweEZGRkZGRkZGOwotCWV4cC0+bWFzay5kc3QudS50Y3AucG9ydCA9IDB4RkZGRjsKKwlleHAtPm1hc2suZHN0LmlwID0gaHRvbmwoMHhGRkZGRkZGRik7CisJZXhwLT5tYXNrLmRzdC51LnRjcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAlleHAtPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAlleHAtPmZsYWdzID0gSVBfQ1RfRVhQRUNUX1BFUk1BTkVOVDsKIAlleHAtPmV4cGVjdGZuID0gaXBfY29ubnRyYWNrX3E5MzFfZXhwZWN0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19oZWxwZXJfcHB0cC5jCmluZGV4IGZiMGFlZTYuLmEyYWY1ZTAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaGVscGVyX3BwdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2hlbHBlcl9wcHRwLmMKQEAgLTI0MiwxMCArMjQyLDEwIEBACiAJZXhwX29yaWctPnR1cGxlLmRzdC51LmdyZS5rZXkgPSBjYWxsaWQ7CiAJZXhwX29yaWctPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fR1JFOwogCi0JZXhwX29yaWctPm1hc2suc3JjLmlwID0gMHhmZmZmZmZmZjsKKwlleHBfb3JpZy0+bWFzay5zcmMuaXAgPSBodG9ubCgweGZmZmZmZmZmKTsKIAlleHBfb3JpZy0+bWFzay5zcmMudS5hbGwgPSAwOwogCWV4cF9vcmlnLT5tYXNrLmRzdC51LmdyZS5rZXkgPSBodG9ucygweGZmZmYpOwotCWV4cF9vcmlnLT5tYXNrLmRzdC5pcCA9IDB4ZmZmZmZmZmY7CisJZXhwX29yaWctPm1hc2suZHN0LmlwID0gaHRvbmwoMHhmZmZmZmZmZik7CiAJZXhwX29yaWctPm1hc2suZHN0LnByb3RvbnVtID0gMHhmZjsKIAogCWV4cF9vcmlnLT5tYXN0ZXIgPSBjdDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCmluZGV4IDQ0ODg5MDcuLjc1ZjdjM2RiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX2lyYy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfaXJjLmMKQEAgLTIxOCw3ICsyMTgsOCBAQAogCQkJCSAgICBJUFBST1RPX1RDUCB9fSk7CiAJCQlleHAtPm1hc2sgPSAoKHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUpCiAJCQkJeyB7IDAsIHsgMCB9IH0sCi0JCQkJICB7IDB4RkZGRkZGRkYsIHsgLnRjcCA9IHsgMHhGRkZGIH0gfSwgMHhGRiB9fSk7CisJCQkJICB7IGh0b25sKDB4RkZGRkZGRkYpLAorCQkJCQl7IC50Y3AgPSB7IGh0b25zKDB4RkZGRikgfSB9LCAweEZGIH19KTsKIAkJCWV4cC0+ZXhwZWN0Zm4gPSBOVUxMOwogCQkJZXhwLT5mbGFncyA9IDA7CiAJCQlpZiAoaXBfbmF0X2lyY19ob29rKQpAQCAtMjY2LDcgKzI2Nyw3IEBACiAJCWhscHIgPSAmaXJjX2hlbHBlcnNbaV07CiAJCWhscHItPnR1cGxlLnNyYy51LnRjcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwogCQlobHByLT50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1RDUDsKLQkJaGxwci0+bWFzay5zcmMudS50Y3AucG9ydCA9IDB4RkZGRjsKKwkJaGxwci0+bWFzay5zcmMudS50Y3AucG9ydCA9IGh0b25zKDB4RkZGRik7CiAJCWhscHItPm1hc2suZHN0LnByb3RvbnVtID0gMHhGRjsKIAkJaGxwci0+bWF4X2V4cGVjdGVkID0gbWF4X2RjY19jaGFubmVsczsKIAkJaGxwci0+dGltZW91dCA9IGRjY190aW1lb3V0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRiaW9zX25zLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwppbmRleCAzZDBiNDM4Li5hMWQ2YTg5IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX25ldGJpb3NfbnMuYwpAQCAtNDgsNyArNDgsNyBAQAogCXN0cnVjdCBpcGhkciAqaXBoID0gKCpwc2tiKS0+bmguaXBoOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUgKikoKnBza2IpLT5kc3Q7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2OwotCXVfaW50MzJfdCBtYXNrID0gMDsKKwlfX2JlMzIgbWFzayA9IDA7CiAKIAkvKiB3ZSdyZSBvbmx5IGludGVyZXN0ZWQgaW4gbG9jYWxseSBnZW5lcmF0ZWQgcGFja2V0cyAqLwogCWlmICgoKnBza2IpLT5zayA9PSBOVUxMKQpAQCAtNzgsMTIgKzc4LDEyIEBACiAJCWdvdG8gb3V0OwogCiAJZXhwLT50dXBsZSAgICAgICAgICAgICAgICA9IGN0LT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZTsKLQlleHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gbnRvaHMoTk1CRF9QT1JUKTsKKwlleHAtPnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaHRvbnMoTk1CRF9QT1JUKTsKIAogCWV4cC0+bWFzay5zcmMuaXAgICAgICAgICAgPSBtYXNrOwotCWV4cC0+bWFzay5zcmMudS51ZHAucG9ydCAgPSAweEZGRkY7Ci0JZXhwLT5tYXNrLmRzdC5pcCAgICAgICAgICA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ICA9IDB4RkZGRjsKKwlleHAtPm1hc2suc3JjLnUudWRwLnBvcnQgID0gaHRvbnMoMHhGRkZGKTsKKwlleHAtPm1hc2suZHN0LmlwICAgICAgICAgID0gaHRvbmwoMHhGRkZGRkZGRik7CisJZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ICA9IGh0b25zKDB4RkZGRik7CiAJZXhwLT5tYXNrLmRzdC5wcm90b251bSAgICA9IDB4RkY7CiAKIAlleHAtPmV4cGVjdGZuICAgICAgICAgICAgID0gTlVMTDsKQEAgLTExNSw3ICsxMTUsNyBAQAogCQkuc3JjID0gewogCQkJLnUgPSB7CiAJCQkJLnVkcCA9IHsKLQkJCQkJLnBvcnQJPSAweEZGRkYsCisJCQkJCS5wb3J0CT0gX19jb25zdGFudF9odG9ucygweEZGRkYpLAogCQkJCX0KIAkJCX0KIAkJfSwKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfbmV0bGluay5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKaW5kZXggNTJlZGRlYS4uNTNiNmRmZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19uZXRsaW5rLmMKQEAgLTc4LDggKzc4LDggQEAKIHsKIAlzdHJ1Y3QgbmZhdHRyICpuZXN0X3Bhcm1zID0gTkZBX05FU1Qoc2tiLCBDVEFfVFVQTEVfSVApOwogCQotCU5GQV9QVVQoc2tiLCBDVEFfSVBfVjRfU1JDLCBzaXplb2YodV9pbnQzMl90KSwgJnR1cGxlLT5zcmMuaXApOwotCU5GQV9QVVQoc2tiLCBDVEFfSVBfVjRfRFNULCBzaXplb2YodV9pbnQzMl90KSwgJnR1cGxlLT5kc3QuaXApOworCU5GQV9QVVQoc2tiLCBDVEFfSVBfVjRfU1JDLCBzaXplb2YoX19iZTMyKSwgJnR1cGxlLT5zcmMuaXApOworCU5GQV9QVVQoc2tiLCBDVEFfSVBfVjRfRFNULCBzaXplb2YoX19iZTMyKSwgJnR1cGxlLT5kc3QuaXApOwogCiAJTkZBX05FU1RfRU5EKHNrYiwgbmVzdF9wYXJtcyk7CiAKQEAgLTExMCw3ICsxMTAsNyBAQAogc3RhdGljIGlubGluZSBpbnQKIGN0bmV0bGlua19kdW1wX3N0YXR1cyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKIHsKLQl1X2ludDMyX3Qgc3RhdHVzID0gaHRvbmwoKHVfaW50MzJfdCkgY3QtPnN0YXR1cyk7CisJX19iZTMyIHN0YXR1cyA9IGh0b25sKCh1X2ludDMyX3QpIGN0LT5zdGF0dXMpOwogCU5GQV9QVVQoc2tiLCBDVEFfU1RBVFVTLCBzaXplb2Yoc3RhdHVzKSwgJnN0YXR1cyk7CiAJcmV0dXJuIDA7CiAKQEAgLTEyMiw3ICsxMjIsNyBAQAogY3RuZXRsaW5rX2R1bXBfdGltZW91dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKIHsKIAlsb25nIHRpbWVvdXRfbCA9IGN0LT50aW1lb3V0LmV4cGlyZXMgLSBqaWZmaWVzOwotCXVfaW50MzJfdCB0aW1lb3V0OworCV9fYmUzMiB0aW1lb3V0OwogCiAJaWYgKHRpbWVvdXRfbCA8IDApCiAJCXRpbWVvdXQgPSAwOwpAQCAtMTkyLDEzICsxOTIsMTMgQEAKIHsKIAllbnVtIGN0YXR0cl90eXBlIHR5cGUgPSBkaXIgPyBDVEFfQ09VTlRFUlNfUkVQTFk6IENUQV9DT1VOVEVSU19PUklHOwogCXN0cnVjdCBuZmF0dHIgKm5lc3RfY291bnQgPSBORkFfTkVTVChza2IsIHR5cGUpOwotCXVfaW50MzJfdCB0bXA7CisJX19iZTMyIHRtcDsKIAogCXRtcCA9IGh0b25sKGN0LT5jb3VudGVyc1tkaXJdLnBhY2tldHMpOwotCU5GQV9QVVQoc2tiLCBDVEFfQ09VTlRFUlMzMl9QQUNLRVRTLCBzaXplb2YodV9pbnQzMl90KSwgJnRtcCk7CisJTkZBX1BVVChza2IsIENUQV9DT1VOVEVSUzMyX1BBQ0tFVFMsIHNpemVvZihfX2JlMzIpLCAmdG1wKTsKIAogCXRtcCA9IGh0b25sKGN0LT5jb3VudGVyc1tkaXJdLmJ5dGVzKTsKLQlORkFfUFVUKHNrYiwgQ1RBX0NPVU5URVJTMzJfQllURVMsIHNpemVvZih1X2ludDMyX3QpLCAmdG1wKTsKKwlORkFfUFVUKHNrYiwgQ1RBX0NPVU5URVJTMzJfQllURVMsIHNpemVvZihfX2JlMzIpLCAmdG1wKTsKIAogCU5GQV9ORVNUX0VORChza2IsIG5lc3RfY291bnQpOwogCkBAIC0yMTUsOSArMjE1LDkgQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF9tYXJrKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KQogewotCXVfaW50MzJfdCBtYXJrID0gaHRvbmwoY3QtPm1hcmspOworCV9fYmUzMiBtYXJrID0gaHRvbmwoY3QtPm1hcmspOwogCi0JTkZBX1BVVChza2IsIENUQV9NQVJLLCBzaXplb2YodV9pbnQzMl90KSwgJm1hcmspOworCU5GQV9QVVQoc2tiLCBDVEFfTUFSSywgc2l6ZW9mKF9fYmUzMiksICZtYXJrKTsKIAlyZXR1cm4gMDsKIAogbmZhdHRyX2ZhaWx1cmU6CkBAIC0yMzAsOCArMjMwLDggQEAKIHN0YXRpYyBpbmxpbmUgaW50CiBjdG5ldGxpbmtfZHVtcF9pZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCkKIHsKLQl1X2ludDMyX3QgaWQgPSBodG9ubChjdC0+aWQpOwotCU5GQV9QVVQoc2tiLCBDVEFfSUQsIHNpemVvZih1X2ludDMyX3QpLCAmaWQpOworCV9fYmUzMiBpZCA9IGh0b25sKGN0LT5pZCk7CisJTkZBX1BVVChza2IsIENUQV9JRCwgc2l6ZW9mKF9fYmUzMiksICZpZCk7CiAJcmV0dXJuIDA7CiAKIG5mYXR0cl9mYWlsdXJlOgpAQCAtMjQxLDkgKzI0MSw5IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2R1bXBfdXNlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2sgKmN0KQogewotCXVfaW50MzJfdCB1c2UgPSBodG9ubChhdG9taWNfcmVhZCgmY3QtPmN0X2dlbmVyYWwudXNlKSk7CisJX19iZTMyIHVzZSA9IGh0b25sKGF0b21pY19yZWFkKCZjdC0+Y3RfZ2VuZXJhbC51c2UpKTsKIAkKLQlORkFfUFVUKHNrYiwgQ1RBX1VTRSwgc2l6ZW9mKHVfaW50MzJfdCksICZ1c2UpOworCU5GQV9QVVQoc2tiLCBDVEFfVVNFLCBzaXplb2YoX19iZTMyKSwgJnVzZSk7CiAJcmV0dXJuIDA7CiAKIG5mYXR0cl9mYWlsdXJlOgpAQCAtNDU3LDggKzQ1Nyw4IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzaXplX3QgY3RhX21pbl9pcFtDVEFfSVBfTUFYXSA9IHsKLQlbQ1RBX0lQX1Y0X1NSQy0xXQk9IHNpemVvZih1X2ludDMyX3QpLAotCVtDVEFfSVBfVjRfRFNULTFdCT0gc2l6ZW9mKHVfaW50MzJfdCksCisJW0NUQV9JUF9WNF9TUkMtMV0JPSBzaXplb2YoX19iZTMyKSwKKwlbQ1RBX0lQX1Y0X0RTVC0xXQk9IHNpemVvZihfX2JlMzIpLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTQ3NSwxMSArNDc1LDExIEBACiAKIAlpZiAoIXRiW0NUQV9JUF9WNF9TUkMtMV0pCiAJCXJldHVybiAtRUlOVkFMOwotCXR1cGxlLT5zcmMuaXAgPSAqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW0NUQV9JUF9WNF9TUkMtMV0pOworCXR1cGxlLT5zcmMuaXAgPSAqKF9fYmUzMiAqKU5GQV9EQVRBKHRiW0NUQV9JUF9WNF9TUkMtMV0pOwogCiAJaWYgKCF0YltDVEFfSVBfVjRfRFNULTFdKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl0dXBsZS0+ZHN0LmlwID0gKih1X2ludDMyX3QgKilORkFfREFUQSh0YltDVEFfSVBfVjRfRFNULTFdKTsKKwl0dXBsZS0+ZHN0LmlwID0gKihfX2JlMzIgKilORkFfREFUQSh0YltDVEFfSVBfVjRfRFNULTFdKTsKIAogCURFQlVHUCgibGVhdmluZ1xuIik7CiAKQEAgLTYwMiw4ICs2MDIsOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGN0YV9taW5fbmF0W0NUQV9OQVRfTUFYXSA9IHsKLQlbQ1RBX05BVF9NSU5JUC0xXSAgICAgICA9IHNpemVvZih1X2ludDMyX3QpLAotCVtDVEFfTkFUX01BWElQLTFdICAgICAgID0gc2l6ZW9mKHVfaW50MzJfdCksCisJW0NUQV9OQVRfTUlOSVAtMV0gICAgICAgPSBzaXplb2YoX19iZTMyKSwKKwlbQ1RBX05BVF9NQVhJUC0xXSAgICAgICA9IHNpemVvZihfX2JlMzIpLAogfTsKIAogc3RhdGljIGlubGluZSBpbnQKQEAgLTYyMywxMiArNjIzLDEyIEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHRiW0NUQV9OQVRfTUlOSVAtMV0pCi0JCXJhbmdlLT5taW5faXAgPSAqKHVfaW50MzJfdCAqKU5GQV9EQVRBKHRiW0NUQV9OQVRfTUlOSVAtMV0pOworCQlyYW5nZS0+bWluX2lwID0gKihfX2JlMzIgKilORkFfREFUQSh0YltDVEFfTkFUX01JTklQLTFdKTsKIAogCWlmICghdGJbQ1RBX05BVF9NQVhJUC0xXSkKIAkJcmFuZ2UtPm1heF9pcCA9IHJhbmdlLT5taW5faXA7CiAJZWxzZQotCQlyYW5nZS0+bWF4X2lwID0gKih1X2ludDMyX3QgKilORkFfREFUQSh0YltDVEFfTkFUX01BWElQLTFdKTsKKwkJcmFuZ2UtPm1heF9pcCA9ICooX19iZTMyICopTkZBX0RBVEEodGJbQ1RBX05BVF9NQVhJUC0xXSk7CiAKIAlpZiAocmFuZ2UtPm1pbl9pcCkKIAkJcmFuZ2UtPmZsYWdzIHw9IElQX05BVF9SQU5HRV9NQVBfSVBTOwpAQCAtNjYzLDExICs2NjMsMTEgQEAKIH0KIAogc3RhdGljIGNvbnN0IHNpemVfdCBjdGFfbWluW0NUQV9NQVhdID0gewotCVtDVEFfU1RBVFVTLTFdIAkJPSBzaXplb2YodV9pbnQzMl90KSwKLQlbQ1RBX1RJTUVPVVQtMV0gCT0gc2l6ZW9mKHVfaW50MzJfdCksCi0JW0NUQV9NQVJLLTFdCQk9IHNpemVvZih1X2ludDMyX3QpLAotCVtDVEFfVVNFLTFdCQk9IHNpemVvZih1X2ludDMyX3QpLAotCVtDVEFfSUQtMV0JCT0gc2l6ZW9mKHVfaW50MzJfdCkKKwlbQ1RBX1NUQVRVUy0xXSAJCT0gc2l6ZW9mKF9fYmUzMiksCisJW0NUQV9USU1FT1VULTFdIAk9IHNpemVvZihfX2JlMzIpLAorCVtDVEFfTUFSSy0xXQkJPSBzaXplb2YoX19iZTMyKSwKKwlbQ1RBX1VTRS0xXQkJPSBzaXplb2YoX19iZTMyKSwKKwlbQ1RBX0lELTFdCQk9IHNpemVvZihfX2JlMzIpCiB9OwogCiBzdGF0aWMgaW50CkBAIC03MDYsNyArNzA2LDcgQEAKIAljdCA9IHR1cGxlaGFzaF90b19jdHJhY2soaCk7CiAJCiAJaWYgKGNkYVtDVEFfSUQtMV0pIHsKLQkJdV9pbnQzMl90IGlkID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX0lELTFdKSk7CisJCXVfaW50MzJfdCBpZCA9IG50b2hsKCooX19iZTMyICopTkZBX0RBVEEoY2RhW0NUQV9JRC0xXSkpOwogCQlpZiAoY3QtPmlkICE9IGlkKSB7CiAJCQlpcF9jb25udHJhY2tfcHV0KGN0KTsKIAkJCXJldHVybiAtRU5PRU5UOwpAQCAtODA4LDcgKzgwOCw3IEBACiBjdG5ldGxpbmtfY2hhbmdlX3N0YXR1cyhzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwgc3RydWN0IG5mYXR0ciAqY2RhW10pCiB7CiAJdW5zaWduZWQgbG9uZyBkOwotCXVuc2lnbmVkIHN0YXR1cyA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9TVEFUVVMtMV0pKTsKKwl1bnNpZ25lZCBzdGF0dXMgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfU1RBVFVTLTFdKSk7CiAJZCA9IGN0LT5zdGF0dXMgXiBzdGF0dXM7CiAKIAlpZiAoZCAmIChJUFNfRVhQRUNURUR8SVBTX0NPTkZJUk1FRHxJUFNfRFlJTkcpKQpAQCAtOTAzLDcgKzkwMyw3IEBACiBzdGF0aWMgaW5saW5lIGludAogY3RuZXRsaW5rX2NoYW5nZV90aW1lb3V0KHN0cnVjdCBpcF9jb25udHJhY2sgKmN0LCBzdHJ1Y3QgbmZhdHRyICpjZGFbXSkKIHsKLQl1X2ludDMyX3QgdGltZW91dCA9IG50b2hsKCoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9USU1FT1VULTFdKSk7CisJdV9pbnQzMl90IHRpbWVvdXQgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfVElNRU9VVC0xXSkpOwogCQogCWlmICghZGVsX3RpbWVyKCZjdC0+dGltZW91dCkpCiAJCXJldHVybiAtRVRJTUU7CkBAIC05NjYsNyArOTY2LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUkstMV0pCi0JCWN0LT5tYXJrID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX01BUkstMV0pKTsKKwkJY3QtPm1hcmsgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOwogI2VuZGlmCiAKIAlERUJVR1AoImFsbCBkb25lXG4iKTsKQEAgLTk4OSw3ICs5ODksNyBAQAogCiAJaWYgKCFjZGFbQ1RBX1RJTUVPVVQtMV0pCiAJCWdvdG8gZXJyOwotCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBudG9obCgqKHVfaW50MzJfdCAqKU5GQV9EQVRBKGNkYVtDVEFfVElNRU9VVC0xXSkpOworCWN0LT50aW1lb3V0LmV4cGlyZXMgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfVElNRU9VVC0xXSkpOwogCiAJY3QtPnRpbWVvdXQuZXhwaXJlcyA9IGppZmZpZXMgKyBjdC0+dGltZW91dC5leHBpcmVzICogSFo7CiAJY3QtPnN0YXR1cyB8PSBJUFNfQ09ORklSTUVEOwpAQCAtMTAwNiw3ICsxMDA2LDcgQEAKIAogI2lmIGRlZmluZWQoQ09ORklHX0lQX05GX0NPTk5UUkFDS19NQVJLKQogCWlmIChjZGFbQ1RBX01BUkstMV0pCi0JCWN0LT5tYXJrID0gbnRvaGwoKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX01BUkstMV0pKTsKKwkJY3QtPm1hcmsgPSBudG9obCgqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfTUFSSy0xXSkpOwogI2VuZGlmCiAKIAljdC0+aGVscGVyID0gaXBfY29ubnRyYWNrX2hlbHBlcl9maW5kX2dldChydHVwbGUpOwpAQCAtMTEzOCw4ICsxMTM4LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFja19leHBlY3QgKmV4cCkKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICptYXN0ZXIgPSBleHAtPm1hc3RlcjsKLQl1X2ludDMyX3QgdGltZW91dCA9IGh0b25sKChleHAtPnRpbWVvdXQuZXhwaXJlcyAtIGppZmZpZXMpIC8gSFopOwotCXVfaW50MzJfdCBpZCA9IGh0b25sKGV4cC0+aWQpOworCV9fYmUzMiB0aW1lb3V0ID0gaHRvbmwoKGV4cC0+dGltZW91dC5leHBpcmVzIC0gamlmZmllcykgLyBIWik7CisJX19iZTMyIGlkID0gaHRvbmwoZXhwLT5pZCk7CiAKIAlpZiAoY3RuZXRsaW5rX2V4cF9kdW1wX3R1cGxlKHNrYiwgJmV4cC0+dHVwbGUsIENUQV9FWFBFQ1RfVFVQTEUpIDwgMCkKIAkJZ290byBuZmF0dHJfZmFpbHVyZTsKQEAgLTExNTAsOCArMTE1MCw4IEBACiAJCQkJIENUQV9FWFBFQ1RfTUFTVEVSKSA8IDApCiAJCWdvdG8gbmZhdHRyX2ZhaWx1cmU7CiAJCi0JTkZBX1BVVChza2IsIENUQV9FWFBFQ1RfVElNRU9VVCwgc2l6ZW9mKHRpbWVvdXQpLCAmdGltZW91dCk7Ci0JTkZBX1BVVChza2IsIENUQV9FWFBFQ1RfSUQsIHNpemVvZih1X2ludDMyX3QpLCAmaWQpOworCU5GQV9QVVQoc2tiLCBDVEFfRVhQRUNUX1RJTUVPVVQsIHNpemVvZihfX2JlMzIpLCAmdGltZW91dCk7CisJTkZBX1BVVChza2IsIENUQV9FWFBFQ1RfSUQsIHNpemVvZihfX2JlMzIpLCAmaWQpOwogCiAJcmV0dXJuIDA7CiAJCkBAIC0xMjcyLDggKzEyNzIsOCBAQAogfQogCiBzdGF0aWMgY29uc3Qgc2l6ZV90IGN0YV9taW5fZXhwW0NUQV9FWFBFQ1RfTUFYXSA9IHsKLQlbQ1RBX0VYUEVDVF9USU1FT1VULTFdICAgICAgICAgID0gc2l6ZW9mKHVfaW50MzJfdCksCi0JW0NUQV9FWFBFQ1RfSUQtMV0gICAgICAgICAgICAgICA9IHNpemVvZih1X2ludDMyX3QpCisJW0NUQV9FWFBFQ1RfVElNRU9VVC0xXSAgICAgICAgICA9IHNpemVvZihfX2JlMzIpLAorCVtDVEFfRVhQRUNUX0lELTFdICAgICAgICAgICAgICAgPSBzaXplb2YoX19iZTMyKQogfTsKIAogc3RhdGljIGludApAQCAtMTMyMSw3ICsxMzIxLDcgQEAKIAkJcmV0dXJuIC1FTk9FTlQ7CiAKIAlpZiAoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pIHsKLQkJdV9pbnQzMl90IGlkID0gKih1X2ludDMyX3QgKilORkFfREFUQShjZGFbQ1RBX0VYUEVDVF9JRC0xXSk7CisJCV9fYmUzMiBpZCA9ICooX19iZTMyICopTkZBX0RBVEEoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pOwogCQlpZiAoZXhwLT5pZCAhPSBudG9obChpZCkpIHsKIAkJCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CiAJCQlyZXR1cm4gLUVOT0VOVDsKQEAgLTEzNzUsOCArMTM3NSw4IEBACiAJCQlyZXR1cm4gLUVOT0VOVDsKIAogCQlpZiAoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pIHsKLQkJCXVfaW50MzJfdCBpZCA9IAotCQkJCSoodV9pbnQzMl90ICopTkZBX0RBVEEoY2RhW0NUQV9FWFBFQ1RfSUQtMV0pOworCQkJX19iZTMyIGlkID0KKwkJCQkqKF9fYmUzMiAqKU5GQV9EQVRBKGNkYVtDVEFfRVhQRUNUX0lELTFdKTsKIAkJCWlmIChleHAtPmlkICE9IG50b2hsKGlkKSkgewogCQkJCWlwX2Nvbm50cmFja19leHBlY3RfcHV0KGV4cCk7CiAJCQkJcmV0dXJuIC1FTk9FTlQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX2ljbXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCmluZGV4IDA5YzQwZWIuLjI5NWI2ZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9faWNtcC5jCkBAIC0yNjEsNyArMjYxLDcgQEAKIHN0YXRpYyBpbnQgaWNtcF90dXBsZV90b19uZmF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAkJCQljb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0KQogewotCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fSUNNUF9JRCwgc2l6ZW9mKHVfaW50MTZfdCksCisJTkZBX1BVVChza2IsIENUQV9QUk9UT19JQ01QX0lELCBzaXplb2YoX19iZTE2KSwKIAkJJnQtPnNyYy51LmljbXAuaWQpOwogCU5GQV9QVVQoc2tiLCBDVEFfUFJPVE9fSUNNUF9UWVBFLCBzaXplb2YodV9pbnQ4X3QpLAogCQkmdC0+ZHN0LnUuaWNtcC50eXBlKTsKQEAgLTI4Nyw3ICsyODcsNyBAQAogCXR1cGxlLT5kc3QudS5pY21wLmNvZGUgPQogCQkJKih1X2ludDhfdCAqKU5GQV9EQVRBKHRiW0NUQV9QUk9UT19JQ01QX0NPREUtMV0pOwogCXR1cGxlLT5zcmMudS5pY21wLmlkID0KLQkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPX0lDTVBfSUQtMV0pOworCQkJKihfX2JlMTYgKilORkFfREFUQSh0YltDVEFfUFJPVE9fSUNNUF9JRC0xXSk7CiAKIAlpZiAodHVwbGUtPmRzdC51LmljbXAudHlwZSA+PSBzaXplb2YoaW52bWFwKQogCSAgICB8fCAhaW52bWFwW3R1cGxlLT5kc3QudS5pY21wLnR5cGVdKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b19zY3RwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwppbmRleCBiOTA4YTQ4Li4yNDQzMzIyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3NjdHAuYwpAQCAtMjEwLDcgKzIxMCw3IEBACiBmb3IgKG9mZnNldCA9IHNrYi0+bmguaXBoLT5paGwgKiA0ICsgc2l6ZW9mKHNjdHBfc2N0cGhkcl90KSwgY291bnQgPSAwOwlcCiAJb2Zmc2V0IDwgc2tiLT5sZW4gJiYJCQkJCQlcCiAJKHNjaCA9IHNrYl9oZWFkZXJfcG9pbnRlcihza2IsIG9mZnNldCwgc2l6ZW9mKF9zY2gpLCAmX3NjaCkpOwlcCi0Jb2Zmc2V0ICs9IChodG9ucyhzY2gtPmxlbmd0aCkgKyAzKSAmIH4zLCBjb3VudCsrKQorCW9mZnNldCArPSAobnRvaHMoc2NoLT5sZW5ndGgpICsgMykgJiB+MywgY291bnQrKykKIAogLyogU29tZSB2YWxpZGl0eSBjaGVja3MgdG8gbWFrZSBzdXJlIHRoZSBjaHVua3MgYXJlIGZpbmUgKi8KIHN0YXRpYyBpbnQgZG9fYmFzaWNfY2hlY2tzKHN0cnVjdCBpcF9jb25udHJhY2sgKmNvbm50cmFjaywKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3Byb3RvX3RjcC5jCmluZGV4IDAzYWU5YTAuLjA2ZTRlOGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfcHJvdG9fdGNwLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19wcm90b190Y3AuYwpAQCAtNTE5LDggKzUxOSw4IEBACiAKIAkvKiBGYXN0IHBhdGggZm9yIHRpbWVzdGFtcC1vbmx5IG9wdGlvbiAqLwogCWlmIChsZW5ndGggPT0gVENQT0xFTl9UU1RBTVBfQUxJR05FRCo0Ci0JICAgICYmICooX191MzIgKilwdHIgPT0KLQkgICAgICAgIF9fY29uc3RhbnRfbnRvaGwoKFRDUE9QVF9OT1AgPDwgMjQpIAorCSAgICAmJiAqKF9fYmUzMiAqKXB0ciA9PQorCSAgICAgICAgX19jb25zdGFudF9odG9ubCgoVENQT1BUX05PUCA8PCAyNCkKIAkgICAgICAgIAkJIHwgKFRDUE9QVF9OT1AgPDwgMTYpCiAJICAgICAgICAJCSB8IChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpCiAJICAgICAgICAJCSB8IFRDUE9MRU5fVElNRVNUQU1QKSkKQEAgLTU1MSw3ICs1NTEsNyBAQAogCQkJICAgIAlmb3IgKGkgPSAwOwogCQkJICAgIAkgICAgIGkgPCAob3BzaXplIC0gVENQT0xFTl9TQUNLX0JBU0UpOwogCQkJICAgIAkgICAgIGkgKz0gVENQT0xFTl9TQUNLX1BFUkJMT0NLKSB7Ci0JCQkJCXRtcCA9IG50b2hsKCooKHVfaW50MzJfdCAqKShwdHIraSkrMSkpOworCQkJCQl0bXAgPSBudG9obCgqKChfX2JlMzIgKikocHRyK2kpKzEpKTsKIAkJCQkJCiAJCQkJCWlmIChhZnRlcih0bXAsICpzYWNrKSkKIAkJCQkJCSpzYWNrID0gdG1wOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9jb25udHJhY2tfc2lwLmMKaW5kZXggMjg5M2U5Yy4uZjRmNzU5OSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja19zaXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3NpcC5jCkBAIC0xOTMsNyArMTkzLDcgQEAKIAogLyogU2ltcGxlIGlwYWRkciBwYXJzZXIuLiAqLwogc3RhdGljIGludCBwYXJzZV9pcGFkZHIoY29uc3QgY2hhciAqY3AsCWNvbnN0IGNoYXIgKiplbmRwLAotCQkJdV9pbnQzMl90ICppcGFkZHIsIGNvbnN0IGNoYXIgKmxpbWl0KQorCQkJX19iZTMyICppcGFkZHIsIGNvbnN0IGNoYXIgKmxpbWl0KQogewogCXVuc2lnbmVkIGxvbmcgaW50IHZhbDsKIAlpbnQgaSwgZGlnaXQgPSAwOwpAQCAtMjI3LDcgKzIyNyw3IEBACiBzdGF0aWMgaW50IGVwYWRkcl9sZW4oY29uc3QgY2hhciAqZHB0ciwgY29uc3QgY2hhciAqbGltaXQsIGludCAqc2hpZnQpCiB7CiAJY29uc3QgY2hhciAqYXV4ID0gZHB0cjsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCiAJaWYgKHBhcnNlX2lwYWRkcihkcHRyLCAmZHB0ciwgJmlwLCBsaW1pdCkgPCAwKSB7CiAJCURFQlVHUCgiaXA6ICVzIHBhcnNlIGZhaWxlZC4hXG4iLCBkcHRyKTsKQEAgLTMwMiw3ICszMDIsNyBAQAogc3RhdGljIGludCBzZXRfZXhwZWN0ZWRfcnRwKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCSAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKIAkJCSAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKLQkJCSAgICB1X2ludDMyX3QgaXBhZGRyLCB1X2ludDE2X3QgcG9ydCwKKwkJCSAgICBfX2JlMzIgaXBhZGRyLCB1X2ludDE2X3QgcG9ydCwKIAkJCSAgICBjb25zdCBjaGFyICpkcHRyKQogewogCXN0cnVjdCBpcF9jb25udHJhY2tfZXhwZWN0ICpleHA7CkBAIC0zMTksMTAgKzMxOSwxMCBAQAogCWV4cC0+dHVwbGUuZHN0LnUudWRwLnBvcnQgPSBodG9ucyhwb3J0KTsKIAlleHAtPnR1cGxlLmRzdC5wcm90b251bSA9IElQUFJPVE9fVURQOwogCi0JZXhwLT5tYXNrLnNyYy5pcCA9IDB4RkZGRkZGRkY7CisJZXhwLT5tYXNrLnNyYy5pcCA9IGh0b25sKDB4RkZGRkZGRkYpOwogCWV4cC0+bWFzay5zcmMudS51ZHAucG9ydCA9IDA7Ci0JZXhwLT5tYXNrLmRzdC5pcCA9IDB4RkZGRkZGRkY7Ci0JZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ID0gMHhGRkZGOworCWV4cC0+bWFzay5kc3QuaXAgPSBodG9ubCgweEZGRkZGRkZGKTsKKwlleHAtPm1hc2suZHN0LnUudWRwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCiAJZXhwLT5leHBlY3RmbiA9IE5VTEw7CkBAIC0zNDksNyArMzQ5LDcgQEAKIAljb25zdCBjaGFyICpkcHRyOwogCWludCByZXQgPSBORl9BQ0NFUFQ7CiAJaW50IG1hdGNob2ZmLCBtYXRjaGxlbjsKLQl1X2ludDMyX3QgaXBhZGRyOworCV9fYmUzMiBpcGFkZHI7CiAJdV9pbnQxNl90IHBvcnQ7CiAKIAkvKiBObyBEYXRhID8gKi8KQEAgLTQzOSw3ICs0MzksNyBAQAogCiAJCXNpcFtpXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKIAkJc2lwW2ldLnR1cGxlLnNyYy51LnVkcC5wb3J0ID0gaHRvbnMocG9ydHNbaV0pOwotCQlzaXBbaV0ubWFzay5zcmMudS51ZHAucG9ydCA9IDB4RkZGRjsKKwkJc2lwW2ldLm1hc2suc3JjLnUudWRwLnBvcnQgPSBodG9ucygweEZGRkYpOwogCQlzaXBbaV0ubWFzay5kc3QucHJvdG9udW0gPSAweEZGOwogCQlzaXBbaV0ubWF4X2V4cGVjdGVkID0gMjsKIAkJc2lwW2ldLnRpbWVvdXQgPSAzICogNjA7IC8qIDMgbWludXRlcyAqLwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX2Nvbm50cmFja190ZnRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3RmdHAuYwppbmRleCA3ZTMzZDNiLi5mZTBiNjM0IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3RmdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfY29ubnRyYWNrX3RmdHAuYwpAQCAtNzAsMTAgKzcwLDEwIEBACiAJCQlyZXR1cm4gTkZfRFJPUDsKIAogCQlleHAtPnR1cGxlID0gY3QtPnR1cGxlaGFzaFtJUF9DVF9ESVJfUkVQTFldLnR1cGxlOwotCQlleHAtPm1hc2suc3JjLmlwID0gMHhmZmZmZmZmZjsKKwkJZXhwLT5tYXNrLnNyYy5pcCA9IGh0b25sKDB4ZmZmZmZmZmYpOwogCQlleHAtPm1hc2suc3JjLnUudWRwLnBvcnQgPSAwOwotCQlleHAtPm1hc2suZHN0LmlwID0gMHhmZmZmZmZmZjsKLQkJZXhwLT5tYXNrLmRzdC51LnVkcC5wb3J0ID0gMHhmZmZmOworCQlleHAtPm1hc2suZHN0LmlwID0gaHRvbmwoMHhmZmZmZmZmZik7CisJCWV4cC0+bWFzay5kc3QudS51ZHAucG9ydCA9IGh0b25zKDB4ZmZmZik7CiAJCWV4cC0+bWFzay5kc3QucHJvdG9udW0gPSAweGZmOwogCQlleHAtPmV4cGVjdGZuID0gTlVMTDsKIAkJZXhwLT5mbGFncyA9IDA7CkBAIC0xMjksNyArMTI5LDcgQEAKIAkJdGZ0cFtpXS50dXBsZS5kc3QucHJvdG9udW0gPSBJUFBST1RPX1VEUDsKIAkJdGZ0cFtpXS50dXBsZS5zcmMudS51ZHAucG9ydCA9IGh0b25zKHBvcnRzW2ldKTsKIAkJdGZ0cFtpXS5tYXNrLmRzdC5wcm90b251bSA9IDB4RkY7Ci0JCXRmdHBbaV0ubWFzay5zcmMudS51ZHAucG9ydCA9IDB4RkZGRjsKKwkJdGZ0cFtpXS5tYXNrLnNyYy51LnVkcC5wb3J0ID0gaHRvbnMoMHhGRkZGKTsKIAkJdGZ0cFtpXS5tYXhfZXhwZWN0ZWQgPSAxOwogCQl0ZnRwW2ldLnRpbWVvdXQgPSA1ICogNjA7IC8qIDUgbWludXRlcyAqLwogCQl0ZnRwW2ldLm1lID0gVEhJU19NT0RVTEU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2NvcmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCmluZGV4IDcxZjNlMDkuLjRiNjI2MGEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfY29yZS5jCkBAIC04Miw3ICs4Miw3IEBACiBoYXNoX2J5X3NyYyhjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrX3R1cGxlICp0dXBsZSkKIHsKIAkvKiBPcmlnaW5hbCBzcmMsIHRvIGVuc3VyZSB3ZSBtYXAgaXQgY29uc2lzdGVudGx5IGlmIHBvc3MuICovCi0JcmV0dXJuIGpoYXNoXzN3b3Jkcyh0dXBsZS0+c3JjLmlwLCB0dXBsZS0+c3JjLnUuYWxsLAorCXJldHVybiBqaGFzaF8zd29yZHMoKF9fZm9yY2UgdTMyKXR1cGxlLT5zcmMuaXAsIHR1cGxlLT5zcmMudS5hbGwsCiAJCQkgICAgdHVwbGUtPmRzdC5wcm90b251bSwgMCkgJSBpcF9uYXRfaHRhYmxlX3NpemU7CiB9CiAKQEAgLTE5MCw3ICsxOTAsNyBAQAogCQkgICAgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrLAogCQkgICAgZW51bSBpcF9uYXRfbWFuaXBfdHlwZSBtYW5pcHR5cGUpCiB7Ci0JdV9pbnQzMl90ICp2YXJfaXBwOworCV9fYmUzMiAqdmFyX2lwcDsKIAkvKiBIb3N0IG9yZGVyICovCiAJdV9pbnQzMl90IG1pbmlwLCBtYXhpcCwgajsKIApAQCAtMjE3LDcgKzIxNyw3IEBACiAJICogbGlrZSB0aGlzKSwgZXZlbiBhY3Jvc3MgcmVib290cy4gKi8KIAltaW5pcCA9IG50b2hsKHJhbmdlLT5taW5faXApOwogCW1heGlwID0gbnRvaGwocmFuZ2UtPm1heF9pcCk7Ci0JaiA9IGpoYXNoXzJ3b3Jkcyh0dXBsZS0+c3JjLmlwLCB0dXBsZS0+ZHN0LmlwLCAwKTsKKwlqID0gamhhc2hfMndvcmRzKChfX2ZvcmNlIHUzMil0dXBsZS0+c3JjLmlwLCAoX19mb3JjZSB1MzIpdHVwbGUtPmRzdC5pcCwgMCk7CiAJKnZhcl9pcHAgPSBodG9ubChtaW5pcCArIGogJSAobWF4aXAgLSBtaW5pcCArIDEpKTsKIH0KIApAQCAtNTM0LDkgKzUzNCw5IEBACiBpcF9uYXRfcG9ydF9yYW5nZV90b19uZmF0dHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgCiAJCQkgICAgY29uc3Qgc3RydWN0IGlwX25hdF9yYW5nZSAqcmFuZ2UpCiB7Ci0JTkZBX1BVVChza2IsIENUQV9QUk9UT05BVF9QT1JUX01JTiwgc2l6ZW9mKHVfaW50MTZfdCksCisJTkZBX1BVVChza2IsIENUQV9QUk9UT05BVF9QT1JUX01JTiwgc2l6ZW9mKF9fYmUxNiksCiAJCSZyYW5nZS0+bWluLnRjcC5wb3J0KTsKLQlORkFfUFVUKHNrYiwgQ1RBX1BST1RPTkFUX1BPUlRfTUFYLCBzaXplb2YodV9pbnQxNl90KSwKKwlORkFfUFVUKHNrYiwgQ1RBX1BST1RPTkFUX1BPUlRfTUFYLCBzaXplb2YoX19iZTE2KSwKIAkJJnJhbmdlLT5tYXgudGNwLnBvcnQpOwogCiAJcmV0dXJuIDA7CkBAIC01NTUsNyArNTU1LDcgQEAKIAlpZiAodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUlOLTFdKSB7CiAJCXJldCA9IDE7CiAJCXJhbmdlLT5taW4udGNwLnBvcnQgPSAKLQkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUlOLTFdKTsKKwkJCSooX19iZTE2ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUlOLTFdKTsKIAl9CiAJCiAJaWYgKCF0YltDVEFfUFJPVE9OQVRfUE9SVF9NQVgtMV0pIHsKQEAgLTU2NCw3ICs1NjQsNyBAQAogCX0gZWxzZSB7CiAJCXJldCA9IDE7CiAJCXJhbmdlLT5tYXgudGNwLnBvcnQgPSAKLQkJCSoodV9pbnQxNl90ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUFYLTFdKTsKKwkJCSooX19iZTE2ICopTkZBX0RBVEEodGJbQ1RBX1BST1RPTkFUX1BPUlRfTUFYLTFdKTsKIAl9CiAKIAlyZXR1cm4gcmV0OwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9mdHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfZnRwLmMKaW5kZXggMzMyOGZjNS4uYTcxYzIzMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9mdHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2Z0cC5jCkBAIC0zNCw3ICszNCw3IEBACiAKIHN0YXRpYyBpbnQKIG1hbmdsZV9yZmM5NTlfcGFja2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJICAgICB1X2ludDMyX3QgbmV3aXAsCisJCSAgICAgX19iZTMyIG5ld2lwLAogCQkgICAgIHVfaW50MTZfdCBwb3J0LAogCQkgICAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJICAgICB1bnNpZ25lZCBpbnQgbWF0Y2hsZW4sCkBAIC01Nyw3ICs1Nyw3IEBACiAvKiB8MXwxMzIuMjM1LjEuMnw2Mjc1fCAqLwogc3RhdGljIGludAogbWFuZ2xlX2VwcnRfcGFja2V0KHN0cnVjdCBza19idWZmICoqcHNrYiwKLQkJICAgdV9pbnQzMl90IG5ld2lwLAorCQkgICBfX2JlMzIgbmV3aXAsCiAJCSAgIHVfaW50MTZfdCBwb3J0LAogCQkgICB1bnNpZ25lZCBpbnQgbWF0Y2hvZmYsCiAJCSAgIHVuc2lnbmVkIGludCBtYXRjaGxlbiwKQEAgLTc5LDcgKzc5LDcgQEAKIC8qIHwxfDEzMi4yMzUuMS4yfDYyNzV8ICovCiBzdGF0aWMgaW50CiBtYW5nbGVfZXBzdl9wYWNrZXQoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAotCQkgICB1X2ludDMyX3QgbmV3aXAsCisJCSAgIF9fYmUzMiBuZXdpcCwKIAkJICAgdV9pbnQxNl90IHBvcnQsCiAJCSAgIHVuc2lnbmVkIGludCBtYXRjaG9mZiwKIAkJICAgdW5zaWduZWQgaW50IG1hdGNobGVuLApAQCAtOTgsNyArOTgsNyBAQAogCQkJCQltYXRjaGxlbiwgYnVmZmVyLCBzdHJsZW4oYnVmZmVyKSk7CiB9CiAKLXN0YXRpYyBpbnQgKCptYW5nbGVbXSkoc3RydWN0IHNrX2J1ZmYgKiosIHVfaW50MzJfdCwgdV9pbnQxNl90LAorc3RhdGljIGludCAoKm1hbmdsZVtdKShzdHJ1Y3Qgc2tfYnVmZiAqKiwgX19iZTMyLCB1X2ludDE2X3QsCiAJCSAgICAgdW5zaWduZWQgaW50LAogCQkgICAgIHVuc2lnbmVkIGludCwKIAkJICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICosCkBAIC0xMjAsNyArMTIwLDcgQEAKIAkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrX2V4cGVjdCAqZXhwLAogCQkJICAgICAgIHUzMiAqc2VxKQogewotCXVfaW50MzJfdCBuZXdpcDsKKwlfX2JlMzIgbmV3aXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAJaW50IGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGV4cC0+bWFzdGVyOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyLmMKaW5kZXggN2Y2YTc1OS4uM2JmODU4NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXIuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlci5jCkBAIC0xODksNyArMTg5LDcgQEAKIAkJCQkJICAgCQlkYXRhbGVuLCAwKSk7CiAJfSBlbHNlCiAJCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCQkgICBodG9ucyhvbGRsZW4pIF4gMHhGRkZGLAorCQkJCQkJICAgaHRvbnMob2xkbGVuKSBeIGh0b25zKDB4RkZGRiksCiAJCQkJCQkgICBodG9ucyhkYXRhbGVuKSwKIAkJCQkJCSAgIHRjcGgtPmNoZWNrLCAxKTsKIApAQCAtMjY3LDcgKzI2Nyw3IEBACiAJCQl1ZHBoLT5jaGVjayA9IC0xOwogCX0gZWxzZQogCQl1ZHBoLT5jaGVjayA9IG5mX3Byb3RvX2NzdW1fdXBkYXRlKCpwc2tiLAotCQkJCQkJICAgaHRvbnMob2xkbGVuKSBeIDB4RkZGRiwKKwkJCQkJCSAgIGh0b25zKG9sZGxlbikgXiBodG9ucygweEZGRkYpLAogCQkJCQkJICAgaHRvbnMoZGF0YWxlbiksCiAJCQkJCQkgICB1ZHBoLT5jaGVjaywgMSk7CiAJcmV0dXJuIDE7CkBAIC0yODMsMjcgKzI4MywyNSBAQAogCSAgICBzdHJ1Y3QgaXBfbmF0X3NlcSAqbmF0c2VxKQogewogCXdoaWxlIChzYWNrb2ZmIDwgc2Fja2VuZCkgewotCQlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2sgKnNhY2s7Ci0JCXVfaW50MzJfdCBuZXdfc3RhcnRfc2VxLCBuZXdfZW5kX3NlcTsKKwkJc3RydWN0IHRjcF9zYWNrX2Jsb2NrX3dpcmUgKnNhY2s7CisJCV9fYmUzMiBuZXdfc3RhcnRfc2VxLCBuZXdfZW5kX3NlcTsKIAogCQlzYWNrID0gKHZvaWQgKilza2ItPmRhdGEgKyBzYWNrb2ZmOwogCQlpZiAoYWZ0ZXIobnRvaGwoc2Fjay0+c3RhcnRfc2VxKSAtIG5hdHNlcS0+b2Zmc2V0X2JlZm9yZSwKIAkJCSAgbmF0c2VxLT5jb3JyZWN0aW9uX3BvcykpCi0JCQluZXdfc3RhcnRfc2VxID0gbnRvaGwoc2Fjay0+c3RhcnRfc2VxKSAKLQkJCQkJLSBuYXRzZXEtPm9mZnNldF9hZnRlcjsKKwkJCW5ld19zdGFydF9zZXEgPSBodG9ubChudG9obChzYWNrLT5zdGFydF9zZXEpCisJCQkJCS0gbmF0c2VxLT5vZmZzZXRfYWZ0ZXIpOwogCQllbHNlCi0JCQluZXdfc3RhcnRfc2VxID0gbnRvaGwoc2Fjay0+c3RhcnRfc2VxKSAKLQkJCQkJLSBuYXRzZXEtPm9mZnNldF9iZWZvcmU7Ci0JCW5ld19zdGFydF9zZXEgPSBodG9ubChuZXdfc3RhcnRfc2VxKTsKKwkJCW5ld19zdGFydF9zZXEgPSBodG9ubChudG9obChzYWNrLT5zdGFydF9zZXEpCisJCQkJCS0gbmF0c2VxLT5vZmZzZXRfYmVmb3JlKTsKIAogCQlpZiAoYWZ0ZXIobnRvaGwoc2Fjay0+ZW5kX3NlcSkgLSBuYXRzZXEtPm9mZnNldF9iZWZvcmUsCiAJCQkgIG5hdHNlcS0+Y29ycmVjdGlvbl9wb3MpKQotCQkJbmV3X2VuZF9zZXEgPSBudG9obChzYWNrLT5lbmRfc2VxKQotCQkJCSAgICAgIC0gbmF0c2VxLT5vZmZzZXRfYWZ0ZXI7CisJCQluZXdfZW5kX3NlcSA9IGh0b25sKG50b2hsKHNhY2stPmVuZF9zZXEpCisJCQkJICAgICAgLSBuYXRzZXEtPm9mZnNldF9hZnRlcik7CiAJCWVsc2UKLQkJCW5ld19lbmRfc2VxID0gbnRvaGwoc2Fjay0+ZW5kX3NlcSkKLQkJCQkgICAgICAtIG5hdHNlcS0+b2Zmc2V0X2JlZm9yZTsKLQkJbmV3X2VuZF9zZXEgPSBodG9ubChuZXdfZW5kX3NlcSk7CisJCQluZXdfZW5kX3NlcSA9IGh0b25sKG50b2hsKHNhY2stPmVuZF9zZXEpCisJCQkJICAgICAgLSBuYXRzZXEtPm9mZnNldF9iZWZvcmUpOwogCiAJCURFQlVHUCgic2Fja19hZGp1c3Q6IHN0YXJ0X3NlcTogJWQtPiVkLCBlbmRfc2VxOiAlZC0+JWRcbiIsCiAJCQludG9obChzYWNrLT5zdGFydF9zZXEpLCBuZXdfc3RhcnRfc2VxLApAQCAtMzc1LDcgKzM3Myw4IEBACiAJCSAgZW51bSBpcF9jb25udHJhY2tfaW5mbyBjdGluZm8pCiB7CiAJc3RydWN0IHRjcGhkciAqdGNwaDsKLQlpbnQgZGlyLCBuZXdzZXEsIG5ld2FjazsKKwlpbnQgZGlyOworCV9fYmUzMiBuZXdzZXEsIG5ld2FjazsKIAlzdHJ1Y3QgaXBfbmF0X3NlcSAqdGhpc193YXksICpvdGhlcl93YXk7CQogCiAJZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwpAQCAtMzg4LDE3ICszODcsMTUgQEAKIAogCXRjcGggPSAodm9pZCAqKSgqcHNrYiktPmRhdGEgKyAoKnBza2IpLT5uaC5pcGgtPmlobCo0OwogCWlmIChhZnRlcihudG9obCh0Y3BoLT5zZXEpLCB0aGlzX3dheS0+Y29ycmVjdGlvbl9wb3MpKQotCQluZXdzZXEgPSBudG9obCh0Y3BoLT5zZXEpICsgdGhpc193YXktPm9mZnNldF9hZnRlcjsKKwkJbmV3c2VxID0gaHRvbmwobnRvaGwodGNwaC0+c2VxKSArIHRoaXNfd2F5LT5vZmZzZXRfYWZ0ZXIpOwogCWVsc2UKLQkJbmV3c2VxID0gbnRvaGwodGNwaC0+c2VxKSArIHRoaXNfd2F5LT5vZmZzZXRfYmVmb3JlOwotCW5ld3NlcSA9IGh0b25sKG5ld3NlcSk7CisJCW5ld3NlcSA9IGh0b25sKG50b2hsKHRjcGgtPnNlcSkgKyB0aGlzX3dheS0+b2Zmc2V0X2JlZm9yZSk7CiAKIAlpZiAoYWZ0ZXIobnRvaGwodGNwaC0+YWNrX3NlcSkgLSBvdGhlcl93YXktPm9mZnNldF9iZWZvcmUsCiAJCSAgb3RoZXJfd2F5LT5jb3JyZWN0aW9uX3BvcykpCi0JCW5ld2FjayA9IG50b2hsKHRjcGgtPmFja19zZXEpIC0gb3RoZXJfd2F5LT5vZmZzZXRfYWZ0ZXI7CisJCW5ld2FjayA9IGh0b25sKG50b2hsKHRjcGgtPmFja19zZXEpIC0gb3RoZXJfd2F5LT5vZmZzZXRfYWZ0ZXIpOwogCWVsc2UKLQkJbmV3YWNrID0gbnRvaGwodGNwaC0+YWNrX3NlcSkgLSBvdGhlcl93YXktPm9mZnNldF9iZWZvcmU7Ci0JbmV3YWNrID0gaHRvbmwobmV3YWNrKTsKKwkJbmV3YWNrID0gaHRvbmwobnRvaGwodGNwaC0+YWNrX3NlcSkgLSBvdGhlcl93YXktPm9mZnNldF9iZWZvcmUpOwogCiAJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgfnRjcGgtPnNlcSwgbmV3c2VxLAogCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9oMzIzLmMKaW5kZXggNDE5Yjg3OC4uNGE3ZDM0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfaDMyMy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX2gzMjMuYwpAQCAtMzIsMTMgKzMyLDEzIEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyBpbnQgc2V0X2FkZHIoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCQkgICAgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAotCQkgICAgdW5zaWduZWQgaW50IGFkZHJvZmYsIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpCisJCSAgICB1bnNpZ25lZCBpbnQgYWRkcm9mZiwgX19iZTMyIGlwLCB1X2ludDE2X3QgcG9ydCkKIHsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCA9IGlwX2Nvbm50cmFja19nZXQoKnBza2IsICZjdGluZm8pOwogCXN0cnVjdCB7Ci0JCXVfaW50MzJfdCBpcDsKLQkJdV9pbnQxNl90IHBvcnQ7CisJCV9fYmUzMiBpcDsKKwkJX19iZTE2IHBvcnQ7CiAJfSBfX2F0dHJpYnV0ZV9fICgoX19wYWNrZWRfXykpIGJ1ZjsKIAlzdHJ1Y3QgdGNwaGRyIF90Y3BoLCAqdGg7CiAKQEAgLTg2LDcgKzg2LDcgQEAKIHN0YXRpYyBpbnQgc2V0X2gyMjVfYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqKnBza2IsCiAJCQkgdW5zaWduZWQgY2hhciAqKmRhdGEsIGludCBkYXRhb2ZmLAogCQkJIFRyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAotCQkJIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpCisJCQkgX19iZTMyIGlwLCB1X2ludDE2X3QgcG9ydCkKIHsKIAlyZXR1cm4gc2V0X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwgYWRkci0+aXBBZGRyZXNzLmlwLCBpcCwgcG9ydCk7CiB9CkBAIC05NSw3ICs5NSw3IEBACiBzdGF0aWMgaW50IHNldF9oMjQ1X2FkZHIoc3RydWN0IHNrX2J1ZmYgKipwc2tiLAogCQkJIHVuc2lnbmVkIGNoYXIgKipkYXRhLCBpbnQgZGF0YW9mZiwKIAkJCSBIMjQ1X1RyYW5zcG9ydEFkZHJlc3MgKiBhZGRyLAotCQkJIHVfaW50MzJfdCBpcCwgdV9pbnQxNl90IHBvcnQpCisJCQkgX19iZTMyIGlwLCB1X2ludDE2X3QgcG9ydCkKIHsKIAlyZXR1cm4gc2V0X2FkZHIocHNrYiwgZGF0YSwgZGF0YW9mZiwKIAkJCWFkZHItPnVuaWNhc3RBZGRyZXNzLmlQQWRkcmVzcy5uZXR3b3JrLCBpcCwgcG9ydCk7CkBAIC0xMTAsNyArMTEwLDcgQEAKIAlzdHJ1Y3QgaXBfY3RfaDMyM19tYXN0ZXIgKmluZm8gPSAmY3QtPmhlbHAuY3RfaDMyM19pbmZvOwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CiAJaW50IGk7Ci0JdV9pbnQzMl90IGlwOworCV9fYmUzMiBpcDsKIAl1X2ludDE2X3QgcG9ydDsKIAogCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7CkBAIC0xNjQsNyArMTY0LDcgQEAKIHsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCWludCBpOwotCXVfaW50MzJfdCBpcDsKKwlfX2JlMzIgaXA7CiAJdV9pbnQxNl90IHBvcnQ7CiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewpAQCAtNDMzLDcgKzQzMyw3IEBACiAJc3RydWN0IGlwX2N0X2gzMjNfbWFzdGVyICppbmZvID0gJmN0LT5oZWxwLmN0X2gzMjNfaW5mbzsKIAlpbnQgZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pOwogCXVfaW50MTZfdCBuYXRlZF9wb3J0ID0gcG9ydDsKLQl1X2ludDMyX3QgaXA7CisJX19iZTMyIGlwOwogCiAJLyogU2V0IGV4cGVjdGF0aW9ucyBmb3IgTkFUICovCiAJZXhwLT5zYXZlZF9wcm90by50Y3AucG9ydCA9IGV4cC0+dHVwbGUuZHN0LnUudGNwLnBvcnQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X2hlbHBlcl9wcHRwLmMKaW5kZXggMmZmNTc4OC4uMzI5ZmRjZCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9oZWxwZXJfcHB0cC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfaGVscGVyX3BwdHAuYwpAQCAtNTEsNyArNTEsNyBAQAogCiAjZGVmaW5lIElQX05BVF9QUFRQX1ZFUlNJT04gIjMuMCIKIAotI2RlZmluZSBSRVFfQ0lEKHJlcSwgb2ZmKQkJKCoodV9pbnQxNl90ICopKChjaGFyICopKHJlcSkgKyAob2ZmKSkpCisjZGVmaW5lIFJFUV9DSUQocmVxLCBvZmYpCQkoKihfX2JlMTYgKikoKGNoYXIgKikocmVxKSArIChvZmYpKSkKIAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogTU9EVUxFX0FVVEhPUigiSGFyYWxkIFdlbHRlIDxsYWZvcmdlQGdudW1vbmtzLm9yZz4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9faWNtcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKaW5kZXggZWM1MGNjMi4uM2Y2ZWZjMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b19pY21wLmMKQEAgLTY3LDcgKzY3LDcgQEAKIAogCWhkciA9IChzdHJ1Y3QgaWNtcGhkciAqKSgoKnBza2IpLT5kYXRhICsgaGRyb2ZmKTsKIAloZHItPmNoZWNrc3VtID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCSAgICAgaGRyLT51bi5lY2hvLmlkIF4gMHhGRkZGLAorCQkJCQkgICAgIGhkci0+dW4uZWNoby5pZCBeIGh0b25zKDB4RkZGRiksCiAJCQkJCSAgICAgdHVwbGUtPnNyYy51LmljbXAuaWQsCiAJCQkJCSAgICAgaGRyLT5jaGVja3N1bSwgMCk7CiAJaGRyLT51bi5lY2hvLmlkID0gdHVwbGUtPnNyYy51LmljbXAuaWQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3RjcC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b190Y3AuYwppbmRleCA3MmE2MzA3Li4xMmRlYjEzIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3RjcC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fdGNwLmMKQEAgLTI0LDcgKzI0LDcgQEAKIAkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWluLAogCSAgICAgY29uc3QgdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvICptYXgpCiB7Ci0JdV9pbnQxNl90IHBvcnQ7CisJX19iZTE2IHBvcnQ7CiAKIAlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCiAJCXBvcnQgPSB0dXBsZS0+c3JjLnUudGNwLnBvcnQ7CkBAIC00Miw3ICs0Miw3IEBACiAJCSBjb25zdCBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjb25udHJhY2spCiB7CiAJc3RhdGljIHVfaW50MTZfdCBwb3J0OwotCXVfaW50MTZfdCAqcG9ydHB0cjsKKwlfX2JlMTYgKnBvcnRwdHI7CiAJdW5zaWduZWQgaW50IHJhbmdlX3NpemUsIG1pbiwgaTsKIAogCWlmIChtYW5pcHR5cGUgPT0gSVBfTkFUX01BTklQX1NSQykKQEAgLTkzLDggKzkzLDggQEAKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IChzdHJ1Y3QgaXBoZHIgKikoKCpwc2tiKS0+ZGF0YSArIGlwaGRyb2ZmKTsKIAlzdHJ1Y3QgdGNwaGRyICpoZHI7CiAJdW5zaWduZWQgaW50IGhkcm9mZiA9IGlwaGRyb2ZmICsgaXBoLT5paGwqNDsKLQl1MzIgb2xkaXAsIG5ld2lwOwotCXUxNiAqcG9ydHB0ciwgbmV3cG9ydCwgb2xkcG9ydDsKKwlfX2JlMzIgb2xkaXAsIG5ld2lwOworCV9fYmUxNiAqcG9ydHB0ciwgbmV3cG9ydCwgb2xkcG9ydDsKIAlpbnQgaGRyc2l6ZSA9IDg7IC8qIFRDUCBjb25uZWN0aW9uIHRyYWNraW5nIGd1YXJhbnRlZXMgdGhpcyBtdWNoICovCiAKIAkvKiB0aGlzIGNvdWxkIGJlIGEgaW5uZXIgaGVhZGVyIHJldHVybmVkIGluIGljbXAgcGFja2V0OyBpbiBzdWNoCkBAIC0xMzAsNyArMTMwLDcgQEAKIAkJcmV0dXJuIDE7CiAKIAloZHItPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsIH5vbGRpcCwgbmV3aXAsIGhkci0+Y2hlY2ssIDEpOwotCWhkci0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgb2xkcG9ydCBeIDB4RkZGRiwgbmV3cG9ydCwKKwloZHItPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsIG9sZHBvcnQgXiBodG9ucygweEZGRkYpLCBuZXdwb3J0LAogCQkJCQkgIGhkci0+Y2hlY2ssIDApOwogCXJldHVybiAxOwogfQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b191ZHAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcHJvdG9fdWRwLmMKaW5kZXggNWRhMTk2YS4uNGJiZWM3NyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9wcm90b191ZHAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3Byb3RvX3VkcC5jCkBAIC0yNCw3ICsyNCw3IEBACiAJICAgICBjb25zdCB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gKm1pbiwKIAkgICAgIGNvbnN0IHVuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90byAqbWF4KQogewotCXVfaW50MTZfdCBwb3J0OworCV9fYmUxNiBwb3J0OwogCiAJaWYgKG1hbmlwdHlwZSA9PSBJUF9OQVRfTUFOSVBfU1JDKQogCQlwb3J0ID0gdHVwbGUtPnNyYy51LnVkcC5wb3J0OwpAQCAtNDIsNyArNDIsNyBAQAogCQkgY29uc3Qgc3RydWN0IGlwX2Nvbm50cmFjayAqY29ubnRyYWNrKQogewogCXN0YXRpYyB1X2ludDE2X3QgcG9ydDsKLQl1X2ludDE2X3QgKnBvcnRwdHI7CisJX19iZTE2ICpwb3J0cHRyOwogCXVuc2lnbmVkIGludCByYW5nZV9zaXplLCBtaW4sIGk7CiAKIAlpZiAobWFuaXB0eXBlID09IElQX05BVF9NQU5JUF9TUkMpCkBAIC05MSw4ICs5MSw4IEBACiAJc3RydWN0IGlwaGRyICppcGggPSAoc3RydWN0IGlwaGRyICopKCgqcHNrYiktPmRhdGEgKyBpcGhkcm9mZik7CiAJc3RydWN0IHVkcGhkciAqaGRyOwogCXVuc2lnbmVkIGludCBoZHJvZmYgPSBpcGhkcm9mZiArIGlwaC0+aWhsKjQ7Ci0JdTMyIG9sZGlwLCBuZXdpcDsKLQl1MTYgKnBvcnRwdHIsIG5ld3BvcnQ7CisJX19iZTMyIG9sZGlwLCBuZXdpcDsKKwlfX2JlMTYgKnBvcnRwdHIsIG5ld3BvcnQ7CiAKIAlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIGhkcm9mZiArIHNpemVvZigqaGRyKSkpCiAJCXJldHVybiAwOwpAQCAtMTE4LDcgKzExOCw3IEBACiAJCWhkci0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgfm9sZGlwLCBuZXdpcCwKIAkJCQkJCSAgaGRyLT5jaGVjaywgMSk7CiAJCWhkci0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJCSAgKnBvcnRwdHIgXiAweEZGRkYsIG5ld3BvcnQsCisJCQkJCQkgICpwb3J0cHRyIF4gaHRvbnMoMHhGRkZGKSwgbmV3cG9ydCwKIAkJCQkJCSAgaGRyLT5jaGVjaywgMCk7CiAJCWlmICghaGRyLT5jaGVjaykKIAkJCWhkci0+Y2hlY2sgPSAtMTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfcnVsZS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKaW5kZXggN2I3MDM4My4uYTE3NmFhMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9ydWxlLmMKQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiAvKiBCZWZvcmUgMi42LjExIHdlIGRpZCBpbXBsaWNpdCBzb3VyY2UgTkFUIGlmIHJlcXVpcmVkLiBXYXJuIGFib3V0IGNoYW5nZS4gKi8KLXN0YXRpYyB2b2lkIHdhcm5faWZfZXh0cmFfbWFuZ2xlKHUzMiBkc3RpcCwgdTMyIHNyY2lwKQorc3RhdGljIHZvaWQgd2Fybl9pZl9leHRyYV9tYW5nbGUoX19iZTMyIGRzdGlwLCBfX2JlMzIgc3JjaXApCiB7CiAJc3RhdGljIGludCB3YXJuZWQgPSAwOwogCXN0cnVjdCBmbG93aSBmbCA9IHsgLm5sX3UgPSB7IC5pcDRfdSA9IHsgLmRhZGRyID0gZHN0aXAgfSB9IH07CkBAIC0yMDUsNyArMjA1LDcgQEAKIAkgICBwZXItcHJvdG8gcGFydHMgKGhlbmNlIG5vdCBJUF9OQVRfUkFOR0VfUFJPVE9fU1BFQ0lGSUVEKS4KIAkgICBVc2UgcmVwbHkgaW4gY2FzZSBpdCdzIGFscmVhZHkgYmVlbiBtYW5nbGVkIChlZyBsb2NhbCBwYWNrZXQpLgogCSovCi0JdV9pbnQzMl90IGlwCisJX19iZTMyIGlwCiAJCT0gKEhPT0syTUFOSVAoaG9va251bSkgPT0gSVBfTkFUX01BTklQX1NSQwogCQkgICA/IGNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LmlwCiAJCSAgIDogY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5zcmMuaXApOwpAQCAtMjIyLDcgKzIyMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcF9uYXRfaW5mbyAqaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGhvb2tudW0pCiB7Ci0JdV9pbnQzMl90IGlwCisJX19iZTMyIGlwCiAJCT0gKEhPT0syTUFOSVAoaG9va251bSkgPT0gSVBfTkFUX01BTklQX1NSQwogCQkgICA/IGNvbm50cmFjay0+dHVwbGVoYXNoW0lQX0NUX0RJUl9SRVBMWV0udHVwbGUuZHN0LmlwCiAJCSAgIDogY29ubnRyYWNrLT50dXBsZWhhc2hbSVBfQ1RfRElSX1JFUExZXS50dXBsZS5zcmMuaXApOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc2lwLmMKaW5kZXggNmZmYmE2My4uNzFmYzI3MyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zaXAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3NpcC5jCkBAIC02MCw4ICs2MCw4IEBACiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKIAljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubjpubm5ubiIpXTsKIAl1bnNpZ25lZCBpbnQgYnVmZmxlbiwgZGF0YW9mZjsKLQl1X2ludDMyX3QgaXA7Ci0JdV9pbnQxNl90IHBvcnQ7CisJX19iZTMyIGlwOworCV9fYmUxNiBwb3J0OwogCiAJZGF0YW9mZiA9ICgqcHNrYiktPm5oLmlwaC0+aWhsKjQgKyBzaXplb2Yoc3RydWN0IHVkcGhkcik7CiAKQEAgLTE1OSw3ICsxNTksNyBAQAogc3RhdGljIHVuc2lnbmVkIGludCBtYW5nbGVfc2RwKHN0cnVjdCBza19idWZmICoqcHNrYiwKIAkJCSAgICAgICBlbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbywKIAkJCSAgICAgICBzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdCwKLQkJCSAgICAgICB1X2ludDMyX3QgbmV3aXAsIHVfaW50MTZfdCBwb3J0LAorCQkJICAgICAgIF9fYmUzMiBuZXdpcCwgdV9pbnQxNl90IHBvcnQsCiAJCQkgICAgICAgY29uc3QgY2hhciAqZHB0cikKIHsKIAljaGFyIGJ1ZmZlcltzaXplb2YoIm5ubi5ubm4ubm5uLm5ubiIpXTsKQEAgLTE5NSw3ICsxOTUsNyBAQAogewogCXN0cnVjdCBpcF9jb25udHJhY2sgKmN0ID0gZXhwLT5tYXN0ZXI7CiAJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTsKLQl1X2ludDMyX3QgbmV3aXA7CisJX19iZTMyIG5ld2lwOwogCXVfaW50MTZfdCBwb3J0OwogCiAJREVCVUdQKCJpcF9uYXRfc2RwKCk6XG4iKTsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc25tcF9iYXNpYy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKaW5kZXggMThiN2ZiZC4uMTY4ZjQ1ZiAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwX25hdF9zbm1wX2Jhc2ljLmMKQEAgLTEyMTEsNyArMTIxMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICoqcHNrYikKIHsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICgqcHNrYiktPm5oLmlwaDsKLQlzdHJ1Y3QgdWRwaGRyICp1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKikoKHVfaW50MzJfdCAqKWlwaCArIGlwaC0+aWhsKTsKKwlzdHJ1Y3QgdWRwaGRyICp1ZHBoID0gKHN0cnVjdCB1ZHBoZHIgKikoKF9fYmUzMiAqKWlwaCArIGlwaC0+aWhsKTsKIAl1X2ludDE2X3QgdWRwbGVuID0gbnRvaHModWRwaC0+bGVuKTsKIAl1X2ludDE2X3QgcGF5bGVuID0gdWRwbGVuIC0gc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpOwogCWludCBkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXBfbmF0X3N0YW5kYWxvbmUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCmluZGV4IDljNTc3ZGIuLjAyMTM5NWIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcF9uYXRfc3RhbmRhbG9uZS5jCkBAIC0xOTEsNyArMTkxLDcgQEAKICAgICAgICAgICBpbnQgKCpva2ZuKShzdHJ1Y3Qgc2tfYnVmZiAqKSkKIHsKIAl1bnNpZ25lZCBpbnQgcmV0OwotCXVfaW50MzJfdCBkYWRkciA9ICgqcHNrYiktPm5oLmlwaC0+ZGFkZHI7CisJX19iZTMyIGRhZGRyID0gKCpwc2tiKS0+bmguaXBoLT5kYWRkcjsKIAogCXJldCA9IGlwX25hdF9mbihob29rbnVtLCBwc2tiLCBpbiwgb3V0LCBva2ZuKTsKIAlpZiAocmV0ICE9IE5GX0RST1AgJiYgcmV0ICE9IE5GX1NUT0xFTgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfQ0xVU1RFUklQLmMKaW5kZXggNDE1ODk2Ni4uN2EyOWQ2ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9DTFVTVEVSSVAuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0NMVVNURVJJUC5jCkBAIC01Miw3ICs1Miw3IEBACiAJYXRvbWljX3QgZW50cmllczsJCQkvKiBudW1iZXIgb2YgZW50cmllcy9ydWxlcwogCQkJCQkJICogcmVmZXJlbmNpbmcgdXMgKi8KIAotCXVfaW50MzJfdCBjbHVzdGVyaXA7CQkJLyogdGhlIElQIGFkZHJlc3MgKi8KKwlfX2JlMzIgY2x1c3RlcmlwOwkJCS8qIHRoZSBJUCBhZGRyZXNzICovCiAJdV9pbnQ4X3QgY2x1c3Rlcm1hY1tFVEhfQUxFTl07CQkvKiB0aGUgTUFDIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwkJCS8qIGRldmljZSAqLwogCXVfaW50MTZfdCBudW1fdG90YWxfbm9kZXM7CQkvKiB0b3RhbCBudW1iZXIgb2Ygbm9kZXMgKi8KQEAgLTExOSw3ICsxMTksNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IGNsdXN0ZXJpcF9jb25maWcgKgotX19jbHVzdGVyaXBfY29uZmlnX2ZpbmQodV9pbnQzMl90IGNsdXN0ZXJpcCkKK19fY2x1c3RlcmlwX2NvbmZpZ19maW5kKF9fYmUzMiBjbHVzdGVyaXApCiB7CiAJc3RydWN0IGxpc3RfaGVhZCAqcG9zOwogCkBAIC0xMzYsNyArMTM2LDcgQEAKIH0KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgY2x1c3RlcmlwX2NvbmZpZyAqCi1jbHVzdGVyaXBfY29uZmlnX2ZpbmRfZ2V0KHVfaW50MzJfdCBjbHVzdGVyaXAsIGludCBlbnRyeSkKK2NsdXN0ZXJpcF9jb25maWdfZmluZF9nZXQoX19iZTMyIGNsdXN0ZXJpcCwgaW50IGVudHJ5KQogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwogCkBAIC0xNjYsNyArMTY2LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICoKLWNsdXN0ZXJpcF9jb25maWdfaW5pdChzdHJ1Y3QgaXB0X2NsdXN0ZXJpcF90Z3RfaW5mbyAqaSwgdV9pbnQzMl90IGlwLAorY2x1c3RlcmlwX2NvbmZpZ19pbml0KHN0cnVjdCBpcHRfY2x1c3RlcmlwX3RndF9pbmZvICppLCBfX2JlMzIgaXAsCiAJCQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBjbHVzdGVyaXBfY29uZmlnICpjOwpAQCAtMzg3LDcgKzM4Nyw3IEBACiAJCXJldHVybiAwOwogCiAJfQotCWlmIChlLT5pcC5kbXNrLnNfYWRkciAhPSAweGZmZmZmZmZmCisJaWYgKGUtPmlwLmRtc2suc19hZGRyICE9IGh0b25sKDB4ZmZmZmZmZmYpCiAJICAgIHx8IGUtPmlwLmRzdC5zX2FkZHIgPT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIgIkNMVVNURVJJUDogUGxlYXNlIHNwZWNpZnkgZGVzdGluYXRpb24gSVBcbiIpOwogCQlyZXR1cm4gMDsKQEAgLTQ3Niw5ICs0NzYsOSBAQAogLyogaGFyZGNvZGVkIGZvciA0OGJpdCBldGhlcm5ldCBhbmQgMzJiaXQgaXB2NCBhZGRyZXNzZXMgKi8KIHN0cnVjdCBhcnBfcGF5bG9hZCB7CiAJdV9pbnQ4X3Qgc3JjX2h3W0VUSF9BTEVOXTsKLQl1X2ludDMyX3Qgc3JjX2lwOworCV9fYmUzMiBzcmNfaXA7CiAJdV9pbnQ4X3QgZHN0X2h3W0VUSF9BTEVOXTsKLQl1X2ludDMyX3QgZHN0X2lwOworCV9fYmUzMiBkc3RfaXA7CiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAogI2lmZGVmIENMVVNURVJJUF9ERUJVRwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfRUNOLmMKaW5kZXggMjNmOWM3ZS4uMTJhODE4YSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9FQ04uYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X0VDTi5jCkBAIC0yOCw3ICsyOCw3IEBACiBzZXRfZWN0X2lwKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IGlwdF9FQ05faW5mbyAqZWluZm8pCiB7CiAJc3RydWN0IGlwaGRyICppcGggPSAoKnBza2IpLT5uaC5pcGg7Ci0JdV9pbnQxNl90IG9sZHRvczsKKwlfX2JlMTYgb2xkdG9zOwogCiAJaWYgKChpcGgtPnRvcyAmIElQVF9FQ05fSVBfTUFTSykgIT0gKGVpbmZvLT5pcF9lY3QgJiBJUFRfRUNOX0lQX01BU0spKSB7CiAJCWlmICghc2tiX21ha2Vfd3JpdGFibGUocHNrYiwgc2l6ZW9mKHN0cnVjdCBpcGhkcikpKQpAQCAtMzcsNyArMzcsNyBAQAogCQlvbGR0b3MgPSBpcGgtPnRvczsKIAkJaXBoLT50b3MgJj0gfklQVF9FQ05fSVBfTUFTSzsKIAkJaXBoLT50b3MgfD0gKGVpbmZvLT5pcF9lY3QgJiBJUFRfRUNOX0lQX01BU0spOwotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUob2xkdG9zIF4gMHhGRkZGLCBpcGgtPnRvcywKKwkJaXBoLT5jaGVjayA9IG5mX2NzdW1fdXBkYXRlKG9sZHRvcyBeIGh0b25zKDB4RkZGRiksIGlwaC0+dG9zLAogCQkJCQkgICAgaXBoLT5jaGVjayk7CiAJfSAKIAlyZXR1cm4gMTsKQEAgLTQ4LDcgKzQ4LDcgQEAKIHNldF9lY3RfdGNwKHN0cnVjdCBza19idWZmICoqcHNrYiwgY29uc3Qgc3RydWN0IGlwdF9FQ05faW5mbyAqZWluZm8pCiB7CiAJc3RydWN0IHRjcGhkciBfdGNwaCwgKnRjcGg7Ci0JdV9pbnQxNl90IG9sZHZhbDsKKwlfX2JlMTYgb2xkdmFsOwogCiAJLyogTm90IGVub3VnaHQgaGVhZGVyPyAqLwogCXRjcGggPSBza2JfaGVhZGVyX3BvaW50ZXIoKnBza2IsICgqcHNrYiktPm5oLmlwaC0+aWhsKjQsCkBAIC02NiwxNSArNjYsMTUgQEAKIAkJcmV0dXJuIDA7CiAJdGNwaCA9ICh2b2lkICopKCpwc2tiKS0+bmguaXBoICsgKCpwc2tiKS0+bmguaXBoLT5paGwqNDsKIAotCW9sZHZhbCA9ICgodV9pbnQxNl90ICopdGNwaClbNl07CisJb2xkdmFsID0gKChfX2JlMTYgKil0Y3BoKVs2XTsKIAlpZiAoZWluZm8tPm9wZXJhdGlvbiAmIElQVF9FQ05fT1BfU0VUX0VDRSkKIAkJdGNwaC0+ZWNlID0gZWluZm8tPnByb3RvLnRjcC5lY2U7CiAJaWYgKGVpbmZvLT5vcGVyYXRpb24gJiBJUFRfRUNOX09QX1NFVF9DV1IpCiAJCXRjcGgtPmN3ciA9IGVpbmZvLT5wcm90by50Y3AuY3dyOwogCiAJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgoKnBza2IpLAotCQkJCQkgICBvbGR2YWwgXiAweEZGRkYsCi0JCQkJCSAgICgodV9pbnQxNl90ICopdGNwaClbNl0sCisJCQkJCSAgIG9sZHZhbCBeIGh0b25zKDB4RkZGRiksCisJCQkJCSAgICgoX19iZTE2ICopdGNwaClbNl0sCiAJCQkJCSAgIHRjcGgtPmNoZWNrLCAwKTsKIAlyZXR1cm4gMTsKIH0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTUFTUVVFUkFERS5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKaW5kZXggYmM2NTE2OC4uM2RiZmNmYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9NQVNRVUVSQURFLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAljb25zdCBzdHJ1Y3QgaXBfbmF0X211bHRpX3JhbmdlX2NvbXBhdCAqbXI7CiAJc3RydWN0IGlwX25hdF9yYW5nZSBuZXdyYW5nZTsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKLQl1X2ludDMyX3QgbmV3c3JjOworCV9fYmUzMiBuZXdzcmM7CiAKIAlJUF9ORl9BU1NFUlQoaG9va251bSA9PSBORl9JUF9QT1NUX1JPVVRJTkcpOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9ORVRNQVAuYwppbmRleCBiZWIyOTE0Li41OGE4OGYyIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X05FVE1BUC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfTkVUTUFQLmMKQEAgLTU4LDcgKzU4LDcgQEAKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQl1X2ludDMyX3QgbmV3X2lwLCBuZXRtYXNrOworCV9fYmUzMiBuZXdfaXAsIG5ldG1hc2s7CiAJY29uc3Qgc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CiAJc3RydWN0IGlwX25hdF9yYW5nZSBuZXdyYW5nZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRURJUkVDVC5jCmluZGV4IGYwM2Q0MzYuLmMwZGNmZTkgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVESVJFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFRElSRUNULmMKQEAgLTYxLDcgKzYxLDcgQEAKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQl1X2ludDMyX3QgbmV3ZHN0OworCV9fYmUzMiBuZXdkc3Q7CiAJY29uc3Qgc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQgKm1yID0gdGFyZ2luZm87CiAJc3RydWN0IGlwX25hdF9yYW5nZSBuZXdyYW5nZTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfUkVKRUNULmMKaW5kZXggYjgxODIxZS4uZmQwYzA1ZSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9SRUpFQ1QuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1JFSkVDVC5jCkBAIC0xMDQsOCArMTA0LDggQEAKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9IG9sZHNrYi0+bmguaXBoOwogCXN0cnVjdCB0Y3BoZHIgX290Y3BoLCAqb3RoLCAqdGNwaDsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKLQl1X2ludDE2X3QgdG1wX3BvcnQ7Ci0JdV9pbnQzMl90IHRtcF9hZGRyOworCV9fYmUxNiB0bXBfcG9ydDsKKwlfX2JlMzIgdG1wX2FkZHI7CiAJaW50IG5lZWRzX2FjazsKIAlpbnQgaGhfbGVuOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1NBTUUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfU0FNRS5jCmluZGV4IGVmYmNiMTEuLmIzOGIxMzMgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfU0FNRS5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfU0FNRS5jCkBAIC0xMzUsNyArMTM1LDggQEAKIHsKIAlzdHJ1Y3QgaXBfY29ubnRyYWNrICpjdDsKIAllbnVtIGlwX2Nvbm50cmFja19pbmZvIGN0aW5mbzsKLQl1X2ludDMyX3QgdG1waXAsIGFpbmRleCwgbmV3X2lwOworCXVfaW50MzJfdCB0bXBpcCwgYWluZGV4OworCV9fYmUzMiBuZXdfaXA7CiAJY29uc3Qgc3RydWN0IGlwdF9zYW1lX2luZm8gKnNhbWUgPSB0YXJnaW5mbzsKIAlzdHJ1Y3QgaXBfbmF0X3JhbmdlIG5ld3JhbmdlOwogCWNvbnN0IHN0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUgKnQ7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RDUE1TUy5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UQ1BNU1MuYwppbmRleCA0MjQ2YzQzLi4xMDhiNmI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RDUE1TUy5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVENQTVNTLmMKQEAgLTQyLDcgKzQyLDggQEAKIAljb25zdCBzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvICp0Y3Btc3NpbmZvID0gdGFyZ2luZm87CiAJc3RydWN0IHRjcGhkciAqdGNwaDsKIAlzdHJ1Y3QgaXBoZHIgKmlwaDsKLQl1X2ludDE2X3QgdGNwbGVuLCBuZXd0b3RsZW4sIG9sZHZhbCwgbmV3bXNzOworCXVfaW50MTZfdCB0Y3BsZW4sIG5ld21zczsKKwlfX2JlMTYgbmV3dG90bGVuLCBvbGR2YWw7CiAJdW5zaWduZWQgaW50IGk7CiAJdV9pbnQ4X3QgKm9wdDsKIApAQCAtOTcsNyArOTgsNyBAQAogCQkJb3B0W2krM10gPSAobmV3bXNzICYgMHgwMGZmKTsKIAogCQkJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJCQkgICBodG9ucyhvbGRtc3MpXjB4RkZGRiwKKwkJCQkJCQkgICBodG9ucyhvbGRtc3MpXmh0b25zKDB4RkZGRiksCiAJCQkJCQkJICAgaHRvbnMobmV3bXNzKSwKIAkJCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7CiAJCQlyZXR1cm4gSVBUX0NPTlRJTlVFOwpAQCAtMTI2LDcgKzEyNyw3IEBACiAJbWVtbW92ZShvcHQgKyBUQ1BPTEVOX01TUywgb3B0LCB0Y3BsZW4gLSBzaXplb2Yoc3RydWN0IHRjcGhkcikpOwogCiAJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwKLQkJCQkJICAgaHRvbnModGNwbGVuKSBeIDB4RkZGRiwKKwkJCQkJICAgaHRvbnModGNwbGVuKSBeIGh0b25zKDB4RkZGRiksCiAJCQkJICAgICAgICAgICBodG9ucyh0Y3BsZW4gKyBUQ1BPTEVOX01TUyksCiAJCQkJCSAgIHRjcGgtPmNoZWNrLCAxKTsKIAlvcHRbMF0gPSBUQ1BPUFRfTVNTOwpAQCAtMTM0LDE4ICsxMzUsMTggQEAKIAlvcHRbMl0gPSAobmV3bXNzICYgMHhmZjAwKSA+PiA4OwogCW9wdFszXSA9IChuZXdtc3MgJiAweDAwZmYpOwogCi0JdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgfjAsICooKHVfaW50MzJfdCAqKW9wdCksCisJdGNwaC0+Y2hlY2sgPSBuZl9wcm90b19jc3VtX3VwZGF0ZSgqcHNrYiwgaHRvbmwofjApLCAqKChfX2JlMzIgKilvcHQpLAogCQkJCQkgICB0Y3BoLT5jaGVjaywgMCk7CiAKLQlvbGR2YWwgPSAoKHVfaW50MTZfdCAqKXRjcGgpWzZdOworCW9sZHZhbCA9ICgoX19iZTE2ICopdGNwaClbNl07CiAJdGNwaC0+ZG9mZiArPSBUQ1BPTEVOX01TUy80OwogCXRjcGgtPmNoZWNrID0gbmZfcHJvdG9fY3N1bV91cGRhdGUoKnBza2IsCi0JCQkJCSAgIG9sZHZhbCBeIDB4RkZGRiwKLQkJCQkJICAgKCh1X2ludDE2X3QgKil0Y3BoKVs2XSwKKwkJCQkJICAgb2xkdmFsIF4gaHRvbnMoMHhGRkZGKSwKKwkJCQkJICAgKChfX2JlMTYgKil0Y3BoKVs2XSwKIAkJCQkJICAgdGNwaC0+Y2hlY2ssIDApOwogCiAJbmV3dG90bGVuID0gaHRvbnMobnRvaHMoaXBoLT50b3RfbGVuKSArIFRDUE9MRU5fTVNTKTsKLQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUoaXBoLT50b3RfbGVuIF4gMHhGRkZGLAorCWlwaC0+Y2hlY2sgPSBuZl9jc3VtX3VwZGF0ZShpcGgtPnRvdF9sZW4gXiBodG9ucygweEZGRkYpLAogCQkJCSAgICBuZXd0b3RsZW4sIGlwaC0+Y2hlY2spOwogCWlwaC0+dG90X2xlbiA9IG5ld3RvdGxlbjsKIAlyZXR1cm4gSVBUX0NPTlRJTlVFOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVE9TLmMKaW5kZXggNDcxYTRjNC4uNmI4YjE0YyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UT1MuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RPUy5jCkBAIC0zMCw3ICszMCw3IEBACiB7CiAJY29uc3Qgc3RydWN0IGlwdF90b3NfdGFyZ2V0X2luZm8gKnRvc2luZm8gPSB0YXJnaW5mbzsKIAlzdHJ1Y3QgaXBoZHIgKmlwaCA9ICgqcHNrYiktPm5oLmlwaDsKLQl1X2ludDE2X3Qgb2xkdG9zOworCV9fYmUxNiBvbGR0b3M7CiAKIAlpZiAoKGlwaC0+dG9zICYgSVBUT1NfVE9TX01BU0spICE9IHRvc2luZm8tPnRvcykgewogCQlpZiAoIXNrYl9tYWtlX3dyaXRhYmxlKHBza2IsIHNpemVvZihzdHJ1Y3QgaXBoZHIpKSkKQEAgLTM4LDcgKzM4LDcgQEAKIAkJaXBoID0gKCpwc2tiKS0+bmguaXBoOwogCQlvbGR0b3MgPSBpcGgtPnRvczsKIAkJaXBoLT50b3MgPSAoaXBoLT50b3MgJiBJUFRPU19QUkVDX01BU0spIHwgdG9zaW5mby0+dG9zOwotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUob2xkdG9zIF4gMHhGRkZGLCBpcGgtPnRvcywKKwkJaXBoLT5jaGVjayA9IG5mX2NzdW1fdXBkYXRlKG9sZHRvcyBeIGh0b25zKDB4RkZGRiksIGlwaC0+dG9zLAogCQkJCQkgICAgaXBoLT5jaGVjayk7CiAJfQogCXJldHVybiBJUFRfQ09OVElOVUU7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9UVEwuYwppbmRleCA5NmU3OWNjLi5hYzk1MTdkIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X1RUTC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfVFRMLmMKQEAgLTU0LDggKzU0LDggQEAKIAl9CiAKIAlpZiAobmV3X3R0bCAhPSBpcGgtPnR0bCkgewotCQlpcGgtPmNoZWNrID0gbmZfY3N1bV91cGRhdGUobnRvaHMoKGlwaC0+dHRsIDw8IDgpKSBeIDB4RkZGRiwKLQkJCQkJICAgIG50b2hzKG5ld190dGwgPDwgOCksCisJCWlwaC0+Y2hlY2sgPSBuZl9jc3VtX3VwZGF0ZShodG9ucygoaXBoLT50dGwgPDwgOCkpIF4gaHRvbnMoMHhGRkZGKSwKKwkJCQkJICAgIGh0b25zKG5ld190dGwgPDwgOCksCiAJCQkJCSAgICBpcGgtPmNoZWNrKTsKIAkJaXBoLT50dGwgPSBuZXdfdHRsOwogCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWRkcnR5cGUuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfYWRkcnR5cGUuYwppbmRleCA4OTNkYWUyLi43YjYwZWI3IDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2FkZHJ0eXBlLmMKKysrIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9hZGRydHlwZS5jCkBAIC0yMiw3ICsyMiw3IEBACiBNT0RVTEVfQVVUSE9SKCJQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiaXB0YWJsZXMgYWRkcnR5cGUgbWF0Y2giKTsKIAotc3RhdGljIGlubGluZSBpbnQgbWF0Y2hfdHlwZSh1X2ludDMyX3QgYWRkciwgdV9pbnQxNl90IG1hc2spCitzdGF0aWMgaW5saW5lIGludCBtYXRjaF90eXBlKF9fYmUzMiBhZGRyLCB1X2ludDE2X3QgbWFzaykKIHsKIAlyZXR1cm4gISEobWFzayAmICgxIDw8IGluZXRfYWRkcl90eXBlKGFkZHIpKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jIGIvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9oYXNobGltaXQuYwppbmRleCA0ZjczYTYxLi4zM2NjZGJmIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X2hhc2hsaW1pdC5jCisrKyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfaGFzaGxpbWl0LmMKQEAgLTUwLDExICs1MCwxMSBAQAogLyogaGFzaCB0YWJsZSBjcmFwICovCiAKIHN0cnVjdCBkc3RoYXNoX2RzdCB7Ci0JdV9pbnQzMl90IHNyY19pcDsKLQl1X2ludDMyX3QgZHN0X2lwOworCV9fYmUzMiBzcmNfaXA7CisJX19iZTMyIGRzdF9pcDsKIAkvKiBwb3J0cyBoYXZlIHRvIGJlIGNvbnNlY3V0aXZlICEhISAqLwotCXVfaW50MTZfdCBzcmNfcG9ydDsKLQl1X2ludDE2X3QgZHN0X3BvcnQ7CisJX19iZTE2IHNyY19wb3J0OworCV9fYmUxNiBkc3RfcG9ydDsKIH07CiAKIHN0cnVjdCBkc3RoYXNoX2VudCB7CkBAIC0xMDYsOCArMTA2LDEwIEBACiBzdGF0aWMgaW5saW5lIHVfaW50MzJfdAogaGFzaF9kc3QoY29uc3Qgc3RydWN0IGlwdF9oYXNobGltaXRfaHRhYmxlICpodCwgY29uc3Qgc3RydWN0IGRzdGhhc2hfZHN0ICpkc3QpCiB7Ci0JcmV0dXJuIChqaGFzaF8zd29yZHMoZHN0LT5kc3RfaXAsIChkc3QtPmRzdF9wb3J0PDwxNiB8IGRzdC0+c3JjX3BvcnQpLCAKLQkJCSAgICAgZHN0LT5zcmNfaXAsIGh0LT5ybmQpICUgaHQtPmNmZy5zaXplKTsKKwlyZXR1cm4gKGpoYXNoXzN3b3JkcygoX19mb3JjZSB1MzIpZHN0LT5kc3RfaXAsCisJCQkgICAgKChfX2ZvcmNlIHUzMilkc3QtPmRzdF9wb3J0PDwxNiB8CisJCQkgICAgIChfX2ZvcmNlIHUzMilkc3QtPnNyY19wb3J0KSwKKwkJCSAgICAgKF9fZm9yY2UgdTMyKWRzdC0+c3JjX2lwLCBodC0+cm5kKSAlIGh0LT5jZmcuc2l6ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGRzdGhhc2hfZW50ICoKQEAgLTQwNiw3ICs0MDgsNyBAQAogCQlkc3Quc3JjX2lwID0gc2tiLT5uaC5pcGgtPnNhZGRyOwogCWlmIChoaW5mby0+Y2ZnLm1vZGUgJiBJUFRfSEFTSExJTUlUX0hBU0hfRFBUCiAJICAgIHx8aGluZm8tPmNmZy5tb2RlICYgSVBUX0hBU0hMSU1JVF9IQVNIX1NQVCkgewotCQl1X2ludDE2X3QgX3BvcnRzWzJdLCAqcG9ydHM7CisJCV9fYmUxNiBfcG9ydHNbMl0sICpwb3J0czsKIAogCQlzd2l0Y2ggKHNrYi0+bmguaXBoLT5wcm90b2NvbCkgewogCQljYXNlIElQUFJPVE9fVENQOgpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYyBiL25ldC9pcHY0L25ldGZpbHRlci9pcHRfcmVjZW50LmMKaW5kZXggMzJhZThkNy4uMTI2ZGI0NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdF9yZWNlbnQuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0X3JlY2VudC5jCkBAIC01MCwxMSArNTAsMTAgQEAKIE1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF91aWQsIm93bmVyIG9mIC9wcm9jL25ldC9pcHRfcmVjZW50LyogZmlsZXMiKTsKIE1PRFVMRV9QQVJNX0RFU0MoaXBfbGlzdF9naWQsIm93bmluZyBncm91cCBvZiAvcHJvYy9uZXQvaXB0X3JlY2VudC8qIGZpbGVzIik7CiAKLQogc3RydWN0IHJlY2VudF9lbnRyeSB7CiAJc3RydWN0IGxpc3RfaGVhZAlsaXN0OwogCXN0cnVjdCBsaXN0X2hlYWQJbHJ1X2xpc3Q7Ci0JdV9pbnQzMl90CQlhZGRyOworCV9fYmUzMgkJCWFkZHI7CiAJdV9pbnQ4X3QJCXR0bDsKIAl1X2ludDhfdAkJaW5kZXg7CiAJdV9pbnQxNl90CQluc3RhbXBzOwpAQCAtODUsMTcgKzg0LDE3IEBACiBzdGF0aWMgdV9pbnQzMl90IGhhc2hfcm5kOwogc3RhdGljIGludCBoYXNoX3JuZF9pbml0dGVkOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHJlY2VudF9lbnRyeV9oYXNoKHVfaW50MzJfdCBhZGRyKQorc3RhdGljIHVuc2lnbmVkIGludCByZWNlbnRfZW50cnlfaGFzaChfX2JlMzIgYWRkcikKIHsKIAlpZiAoIWhhc2hfcm5kX2luaXR0ZWQpIHsKIAkJZ2V0X3JhbmRvbV9ieXRlcygmaGFzaF9ybmQsIDQpOwogCQloYXNoX3JuZF9pbml0dGVkID0gMTsKIAl9Ci0JcmV0dXJuIGpoYXNoXzF3b3JkKGFkZHIsIGhhc2hfcm5kKSAmIChpcF9saXN0X2hhc2hfc2l6ZSAtIDEpOworCXJldHVybiBqaGFzaF8xd29yZCgoX19mb3JjZSB1MzIpYWRkciwgaGFzaF9ybmQpICYgKGlwX2xpc3RfaGFzaF9zaXplIC0gMSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcmVjZW50X2VudHJ5ICoKLXJlY2VudF9lbnRyeV9sb29rdXAoY29uc3Qgc3RydWN0IHJlY2VudF90YWJsZSAqdGFibGUsIHVfaW50MzJfdCBhZGRyLCB1X2ludDhfdCB0dGwpCityZWNlbnRfZW50cnlfbG9va3VwKGNvbnN0IHN0cnVjdCByZWNlbnRfdGFibGUgKnRhYmxlLCBfX2JlMzIgYWRkciwgdV9pbnQ4X3QgdHRsKQogewogCXN0cnVjdCByZWNlbnRfZW50cnkgKmU7CiAJdW5zaWduZWQgaW50IGg7CkBAIC0xMTYsNyArMTE1LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCByZWNlbnRfZW50cnkgKgotcmVjZW50X2VudHJ5X2luaXQoc3RydWN0IHJlY2VudF90YWJsZSAqdCwgdV9pbnQzMl90IGFkZHIsIHVfaW50OF90IHR0bCkKK3JlY2VudF9lbnRyeV9pbml0KHN0cnVjdCByZWNlbnRfdGFibGUgKnQsIF9fYmUzMiBhZGRyLCB1X2ludDhfdCB0dGwpCiB7CiAJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKIApAQCAtMTc4LDcgKzE3Nyw3IEBACiAJY29uc3Qgc3RydWN0IGlwdF9yZWNlbnRfaW5mbyAqaW5mbyA9IG1hdGNoaW5mbzsKIAlzdHJ1Y3QgcmVjZW50X3RhYmxlICp0OwogCXN0cnVjdCByZWNlbnRfZW50cnkgKmU7Ci0JdV9pbnQzMl90IGFkZHI7CisJX19iZTMyIGFkZHI7CiAJdV9pbnQ4X3QgdHRsOwogCWludCByZXQgPSBpbmZvLT5pbnZlcnQ7CiAKQEAgLTQwNiw3ICs0MDUsNyBAQAogCXN0cnVjdCByZWNlbnRfdGFibGUgKnQgPSBwZGUtPmRhdGE7CiAJc3RydWN0IHJlY2VudF9lbnRyeSAqZTsKIAljaGFyIGJ1ZltzaXplb2YoIisyNTUuMjU1LjI1NS4yNTUiKV0sICpjID0gYnVmOwotCXVfaW50MzJfdCBhZGRyOworCV9fYmUzMiBhZGRyOwogCWludCBhZGQ7CiAKIAlpZiAoc2l6ZSA+IHNpemVvZihidWYpKQpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvbmV0ZmlsdGVyL2lwdGFibGVfbWFuZ2xlLmMgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwppbmRleCA3OTMzNmNiLi5lNjJlYTJiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYworKysgYi9uZXQvaXB2NC9uZXRmaWx0ZXIvaXB0YWJsZV9tYW5nbGUuYwpAQCAtMTMxLDcgKzEzMSw3IEBACiB7CiAJdW5zaWduZWQgaW50IHJldDsKIAl1X2ludDhfdCB0b3M7Ci0JdV9pbnQzMl90IHNhZGRyLCBkYWRkcjsKKwlfX2JlMzIgc2FkZHIsIGRhZGRyOwogCXVuc2lnbmVkIGxvbmcgbmZtYXJrOwogCiAJLyogcm9vdCBpcyBwbGF5aW5nIHdpdGggcmF3IHNvY2tldHMuICovCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9yYXcuYyBiL25ldC9pcHY0L3Jhdy5jCmluZGV4IDBlOTM1YjQuLmI0MzBjZjIgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3Jhdy5jCisrKyBiL25ldC9pcHY0L3Jhdy5jCkBAIC0zODEsOCArMzgxLDggQEAKIAlzdHJ1Y3QgaXBjbV9jb29raWUgaXBjOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKIAlpbnQgZnJlZSA9IDA7Ci0JdTMyIGRhZGRyOwotCXUzMiBzYWRkcjsKKwlfX2JlMzIgZGFkZHI7CisJX19iZTMyIHNhZGRyOwogCXU4ICB0b3M7CiAJaW50IGVycjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvcm91dGUuYyBiL25ldC9pcHY0L3JvdXRlLmMKaW5kZXggMjBmZmU4ZS4uYzQxZGRiYSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvcm91dGUuYworKysgYi9uZXQvaXB2NC9yb3V0ZS5jCkBAIC0yNjEsNiArMjYxLDEwIEBACiAJCSYgcnRfaGFzaF9tYXNrKTsKIH0KIAorI2RlZmluZSBydF9oYXNoKGRhZGRyLCBzYWRkciwgaWR4KSBcCisJcnRfaGFzaF9jb2RlKChfX2ZvcmNlIHUzMikoX19iZTMyKShkYWRkciksXAorCQkgICAgIChfX2ZvcmNlIHUzMikoX19iZTMyKShzYWRkcikgXiAoKGlkeCkgPDwgNSkpCisKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogc3RydWN0IHJ0X2NhY2hlX2l0ZXJfc3RhdGUgewogCWludCBidWNrZXQ7CkBAIC0xMDc0LDcgKzEwNzgsNyBAQAogCXUzMiBzYWx0OwogCiAJc3Bpbl9sb2NrX2JoKCZpcF9mYl9pZF9sb2NrKTsKLQlzYWx0ID0gc2VjdXJlX2lwX2lkKGlwX2ZhbGxiYWNrX2lkIF4gaXBoLT5kYWRkcik7CisJc2FsdCA9IHNlY3VyZV9pcF9pZCgoX19mb3JjZSBfX2JlMzIpaXBfZmFsbGJhY2tfaWQgXiBpcGgtPmRhZGRyKTsKIAlpcGgtPmlkID0gaHRvbnMoc2FsdCAmIDB4RkZGRik7CiAJaXBfZmFsbGJhY2tfaWQgPSBzYWx0OwogCXNwaW5fdW5sb2NrX2JoKCZpcF9mYl9pZF9sb2NrKTsKQEAgLTExMTgsMTMgKzExMjIsMTMgQEAKIAlzcGluX3VubG9ja19iaChydF9oYXNoX2xvY2tfYWRkcihoYXNoKSk7CiB9CiAKLXZvaWQgaXBfcnRfcmVkaXJlY3QodTMyIG9sZF9ndywgdTMyIGRhZGRyLCB1MzIgbmV3X2d3LAotCQkgICAgdTMyIHNhZGRyLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQordm9pZCBpcF9ydF9yZWRpcmVjdChfX2JlMzIgb2xkX2d3LCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBuZXdfZ3csCisJCSAgICBfX2JlMzIgc2FkZHIsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJaW50IGksIGs7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOwogCXN0cnVjdCBydGFibGUgKnJ0aCwgKipydGhwOwotCXUzMiAgc2tleXNbMl0gPSB7IHNhZGRyLCAwIH07CisJX19iZTMyICBza2V5c1syXSA9IHsgc2FkZHIsIDAgfTsKIAlpbnQgIGlrZXlzWzJdID0geyBkZXYtPmlmaW5kZXgsIDAgfTsKIAlzdHJ1Y3QgbmV0ZXZlbnRfcmVkaXJlY3QgbmV0ZXZlbnQ7CiAKQEAgLTExNDcsOCArMTE1MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7CiAJCWZvciAoayA9IDA7IGsgPCAyOyBrKyspIHsKLQkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsCi0JCQkJCQkgICAgIHNrZXlzW2ldIF4gKGlrZXlzW2tdIDw8IDUpKTsKKwkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoKGRhZGRyLCBza2V5c1tpXSwgaWtleXNba10pOwogCiAJCQlydGhwPSZydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluOwogCkBAIC0xMjYwLDkgKzEyNjMsOCBAQAogCQkJcmV0ID0gTlVMTDsKIAkJfSBlbHNlIGlmICgocnQtPnJ0X2ZsYWdzICYgUlRDRl9SRURJUkVDVEVEKSB8fAogCQkJICAgcnQtPnUuZHN0LmV4cGlyZXMpIHsKLQkJCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoX2NvZGUocnQtPmZsLmZsNF9kc3QsCi0JCQkJCQkgICAgIHJ0LT5mbC5mbDRfc3JjIF4KLQkJCQkJCQkocnQtPmZsLm9pZiA8PCA1KSk7CisJCQl1bnNpZ25lZCBoYXNoID0gcnRfaGFzaChydC0+ZmwuZmw0X2RzdCwgcnQtPmZsLmZsNF9zcmMsCisJCQkJCQlydC0+Zmwub2lmKTsKICNpZiBSVF9DQUNIRV9ERUJVRyA+PSAxCiAJCQlwcmludGsoS0VSTl9ERUJVRyAiaXBfcnRfYWR2aWNlOiByZWRpcmVjdCB0byAiCiAJCQkJCSAgIiV1LiV1LiV1LiV1LyUwMnggZHJvcHBlZFxuIiwKQEAgLTEzOTcsMTUgKzEzOTksMTUgQEAKIAlpbnQgaTsKIAl1bnNpZ25lZCBzaG9ydCBvbGRfbXR1ID0gbnRvaHMoaXBoLT50b3RfbGVuKTsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7Ci0JdTMyICBza2V5c1syXSA9IHsgaXBoLT5zYWRkciwgMCwgfTsKLQl1MzIgIGRhZGRyID0gaXBoLT5kYWRkcjsKKwlfX2JlMzIgIHNrZXlzWzJdID0geyBpcGgtPnNhZGRyLCAwLCB9OworCV9fYmUzMiAgZGFkZHIgPSBpcGgtPmRhZGRyOwogCXVuc2lnbmVkIHNob3J0IGVzdF9tdHUgPSAwOwogCiAJaWYgKGlwdjRfY29uZmlnLm5vX3BtdHVfZGlzYykKIAkJcmV0dXJuIDA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMjsgaSsrKSB7Ci0JCXVuc2lnbmVkIGhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsIHNrZXlzW2ldKTsKKwkJdW5zaWduZWQgaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNrZXlzW2ldLCAwKTsKIAogCQlyY3VfcmVhZF9sb2NrKCk7CiAJCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CkBAIC0xNTMwLDcgKzE1MzIsNyBAQAogCiB2b2lkIGlwX3J0X2dldF9zb3VyY2UodTggKmFkZHIsIHN0cnVjdCBydGFibGUgKnJ0KQogewotCXUzMiBzcmM7CisJX19iZTMyIHNyYzsKIAlzdHJ1Y3QgZmliX3Jlc3VsdCByZXM7CiAKIAlpZiAocnQtPmZsLmlpZiA9PSAwKQpAQCAtMTU5NiwxMiArMTU5OCwxMiBAQAogICAgICAgICBydC0+cnRfdHlwZSA9IHJlcy0+dHlwZTsKIH0KIAotc3RhdGljIGludCBpcF9yb3V0ZV9pbnB1dF9tYyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGFkZHIsIHUzMiBzYWRkciwKK3N0YXRpYyBpbnQgaXBfcm91dGVfaW5wdXRfbWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsCiAJCQkJdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgb3VyKQogewogCXVuc2lnbmVkIGhhc2g7CiAJc3RydWN0IHJ0YWJsZSAqcnRoOwotCXUzMiBzcGVjX2RzdDsKKwlfX2JlMzIgc3BlY19kc3Q7CiAJc3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW5fZGV2X2dldChkZXYpOwogCXUzMiBpdGFnID0gMDsKIApAQCAtMTY2NSw3ICsxNjY3LDcgQEAKIAlSVF9DQUNIRV9TVEFUX0lOQyhpbl9zbG93X21jKTsKIAogCWluX2Rldl9wdXQoaW5fZGV2KTsKLQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChkZXYtPmlmaW5kZXggPDwgNSkpOworCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZGV2LT5pZmluZGV4KTsKIAlyZXR1cm4gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCAoc3RydWN0IHJ0YWJsZSoqKSAmc2tiLT5kc3QpOwogCiBlX25vYnVmczoKQEAgLTE2ODEsOCArMTY4Myw4IEBACiBzdGF0aWMgdm9pZCBpcF9oYW5kbGVfbWFydGlhbl9zb3VyY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwKIAkJCQkgICAgIHN0cnVjdCBza19idWZmICpza2IsCi0JCQkJICAgICB1MzIgZGFkZHIsCi0JCQkJICAgICB1MzIgc2FkZHIpIAorCQkJCSAgICAgX19iZTMyIGRhZGRyLAorCQkJCSAgICAgX19iZTMyIHNhZGRyKQogewogCVJUX0NBQ0hFX1NUQVRfSU5DKGluX21hcnRpYW5fc3JjKTsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfVkVSQk9TRQpAQCAtMTcxMiw3ICsxNzE0LDcgQEAKIHN0YXRpYyBpbmxpbmUgaW50IF9fbWtyb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCAKIAkJCQkgIHN0cnVjdCBmaWJfcmVzdWx0KiByZXMsIAogCQkJCSAgc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCAKLQkJCQkgIHUzMiBkYWRkciwgdTMyIHNhZGRyLCB1MzIgdG9zLCAKKwkJCQkgIF9fYmUzMiBkYWRkciwgX19iZTMyIHNhZGRyLCB1MzIgdG9zLAogCQkJCSAgc3RydWN0IHJ0YWJsZSAqKnJlc3VsdCkgCiB7CiAKQEAgLTE3MjAsNyArMTcyMiw4IEBACiAJaW50IGVycjsKIAlzdHJ1Y3QgaW5fZGV2aWNlICpvdXRfZGV2OwogCXVuc2lnbmVkIGZsYWdzID0gMDsKLQl1MzIgc3BlY19kc3QsIGl0YWc7CisJX19iZTMyIHNwZWNfZHN0OworCXUzMiBpdGFnOwogCiAJLyogZ2V0IGEgd29ya2luZyByZWZlcmVuY2UgdG8gdGhlIG91dHB1dCBkZXZpY2UgKi8KIAlvdXRfZGV2ID0gaW5fZGV2X2dldChGSUJfUkVTX0RFVigqcmVzKSk7CkBAIC0xODEzLDcgKzE4MTYsNyBAQAogCQkJCSAgICAgICBzdHJ1Y3QgZmliX3Jlc3VsdCogcmVzLCAKIAkJCQkgICAgICAgY29uc3Qgc3RydWN0IGZsb3dpICpmbCwKIAkJCQkgICAgICAgc3RydWN0IGluX2RldmljZSAqaW5fZGV2LAotCQkJCSAgICAgICB1MzIgZGFkZHIsIHUzMiBzYWRkciwgdTMyIHRvcykKKwkJCQkgICAgICAgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsIHUzMiB0b3MpCiB7CiAJc3RydWN0IHJ0YWJsZSogcnRoID0gTlVMTDsKIAlpbnQgZXJyOwpAQCAtMTgzMCw3ICsxODMzLDcgQEAKIAkJcmV0dXJuIGVycjsKIAogCS8qIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSAqLwotCWhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsIHNhZGRyIF4gKGZsLT5paWYgPDwgNSkpOworCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgZmwtPmlpZik7CiAJcmV0dXJuIHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgKHN0cnVjdCBydGFibGUqKikmc2tiLT5kc3QpOwkKIH0KIApAQCAtMTgzOCw3ICsxODQxLDcgQEAKIAkJCQkgICBzdHJ1Y3QgZmliX3Jlc3VsdCogcmVzLCAKIAkJCQkgICBjb25zdCBzdHJ1Y3QgZmxvd2kgKmZsLAogCQkJCSAgIHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwKLQkJCQkgICB1MzIgZGFkZHIsIHUzMiBzYWRkciwgdTMyIHRvcykKKwkJCQkgICBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwgdTMyIHRvcykKIHsKICNpZmRlZiBDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIX0NBQ0hFRAogCXN0cnVjdCBydGFibGUqIHJ0aCA9IE5VTEwsICpydHJlczsKQEAgLTE4NzEsNyArMTg3NCw3IEBACiAJCQlyZXR1cm4gZXJyOwogCiAJCS8qIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSAqLwotCQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChmbC0+aWlmIDw8IDUpKTsKKwkJaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBmbC0+aWlmKTsKIAkJZXJyID0gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCAmcnRyZXMpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTE5MDEsNyArMTkwNCw3IEBACiAgKgkyLiBJUCBzcG9vZmluZyBhdHRlbXB0cyBhcmUgZmlsdGVyZWQgd2l0aCAxMDAlIG9mIGd1YXJhbnRlZS4KICAqLwogCi1zdGF0aWMgaW50IGlwX3JvdXRlX2lucHV0X3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGRhZGRyLCB1MzIgc2FkZHIsCitzdGF0aWMgaW50IGlwX3JvdXRlX2lucHV0X3Nsb3coc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTMyIGRhZGRyLCBfX2JlMzIgc2FkZHIsCiAJCQkgICAgICAgdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBmaWJfcmVzdWx0IHJlczsKQEAgLTE5MjAsNyArMTkyMyw3IEBACiAJdTMyCQlpdGFnID0gMDsKIAlzdHJ1Y3QgcnRhYmxlICogcnRoOwogCXVuc2lnbmVkCWhhc2g7Ci0JdTMyCQlzcGVjX2RzdDsKKwlfX2JlMzIJCXNwZWNfZHN0OwogCWludAkJZXJyID0gLUVJTlZBTDsKIAlpbnQJCWZyZWVfcmVzID0gMDsKIApAQCAtMTkzNiw3ICsxOTM5LDcgQEAKIAlpZiAoTVVMVElDQVNUKHNhZGRyKSB8fCBCQURDTEFTUyhzYWRkcikgfHwgTE9PUEJBQ0soc2FkZHIpKQogCQlnb3RvIG1hcnRpYW5fc291cmNlOwogCi0JaWYgKGRhZGRyID09IDB4RkZGRkZGRkYgfHwgKHNhZGRyID09IDAgJiYgZGFkZHIgPT0gMCkpCisJaWYgKGRhZGRyID09IGh0b25sKDB4RkZGRkZGRkYpIHx8IChzYWRkciA9PSAwICYmIGRhZGRyID09IDApKQogCQlnb3RvIGJyZF9pbnB1dDsKIAogCS8qIEFjY2VwdCB6ZXJvIGFkZHJlc3NlcyBvbmx5IHRvIGxpbWl0ZWQgYnJvYWRjYXN0OwpAQCAtMjA0OCw3ICsyMDUxLDcgQEAKIAkJcnRoLT5ydF9mbGFncyAJJj0gflJUQ0ZfTE9DQUw7CiAJfQogCXJ0aC0+cnRfdHlwZQk9IHJlcy50eXBlOwotCWhhc2ggPSBydF9oYXNoX2NvZGUoZGFkZHIsIHNhZGRyIF4gKGZsLmlpZiA8PCA1KSk7CisJaGFzaCA9IHJ0X2hhc2goZGFkZHIsIHNhZGRyLCBmbC5paWYpOwogCWVyciA9IHJ0X2ludGVybl9oYXNoKGhhc2gsIHJ0aCwgKHN0cnVjdCBydGFibGUqKikmc2tiLT5kc3QpOwogCWdvdG8gZG9uZTsKIApAQCAtMjA4Nyw3ICsyMDkwLDcgQEAKIAlnb3RvIGVfaW52YWw7CiB9CiAKLWludCBpcF9yb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgZGFkZHIsIHUzMiBzYWRkciwKK2ludCBpcF9yb3V0ZV9pbnB1dChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMzIgZGFkZHIsIF9fYmUzMiBzYWRkciwKIAkJICAgdTggdG9zLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBydGFibGUgKiBydGg7CkBAIC0yMDk1LDcgKzIwOTgsNyBAQAogCWludCBpaWYgPSBkZXYtPmlmaW5kZXg7CiAKIAl0b3MgJj0gSVBUT1NfUlRfTUFTSzsKLQloYXNoID0gcnRfaGFzaF9jb2RlKGRhZGRyLCBzYWRkciBeIChpaWYgPDwgNSkpOworCWhhc2ggPSBydF9oYXNoKGRhZGRyLCBzYWRkciwgaWlmKTsKIAogCXJjdV9yZWFkX2xvY2soKTsKIAlmb3IgKHJ0aCA9IHJjdV9kZXJlZmVyZW5jZShydF9oYXNoX3RhYmxlW2hhc2hdLmNoYWluKTsgcnRoOwpAQCAtMjE2OSw3ICsyMTcyLDcgQEAKIAlpZiAoTE9PUEJBQ0soZmwtPmZsNF9zcmMpICYmICEoZGV2X291dC0+ZmxhZ3MmSUZGX0xPT1BCQUNLKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZmwtPmZsNF9kc3QgPT0gMHhGRkZGRkZGRikKKwlpZiAoZmwtPmZsNF9kc3QgPT0gaHRvbmwoMHhGRkZGRkZGRikpCiAJCXJlcy0+dHlwZSA9IFJUTl9CUk9BRENBU1Q7CiAJZWxzZSBpZiAoTVVMVElDQVNUKGZsLT5mbDRfZHN0KSkKIAkJcmVzLT50eXBlID0gUlROX01VTFRJQ0FTVDsKQEAgLTIyOTMsOCArMjI5Niw3IEBACiAJaW50IGVyciA9IF9fbWtyb3V0ZV9vdXRwdXQoJnJ0aCwgcmVzLCBmbCwgb2xkZmxwLCBkZXZfb3V0LCBmbGFncyk7CiAJdW5zaWduZWQgaGFzaDsKIAlpZiAoZXJyID09IDApIHsKLQkJaGFzaCA9IHJ0X2hhc2hfY29kZShvbGRmbHAtPmZsNF9kc3QsIAotCQkJCSAgICBvbGRmbHAtPmZsNF9zcmMgXiAob2xkZmxwLT5vaWYgPDwgNSkpOworCQloYXNoID0gcnRfaGFzaChvbGRmbHAtPmZsNF9kc3QsIG9sZGZscC0+Zmw0X3NyYywgb2xkZmxwLT5vaWYpOwogCQllcnIgPSBydF9pbnRlcm5faGFzaChoYXNoLCBydGgsIHJwKTsKIAl9CiAJCkBAIC0yMzM2LDkgKzIzMzgsOCBAQAogCQkJaWYgKGVyciAhPSAwKQogCQkJCWdvdG8gY2xlYW51cDsKIAotCQkJaGFzaCA9IHJ0X2hhc2hfY29kZShvbGRmbHAtPmZsNF9kc3QsIAotCQkJCQkgICAgb2xkZmxwLT5mbDRfc3JjIF4KLQkJCQkJICAgIChvbGRmbHAtPm9pZiA8PCA1KSk7CisJCQloYXNoID0gcnRfaGFzaChvbGRmbHAtPmZsNF9kc3QsIG9sZGZscC0+Zmw0X3NyYywKKwkJCQkJb2xkZmxwLT5vaWYpOwogCQkJZXJyID0gcnRfaW50ZXJuX2hhc2goaGFzaCwgcnRoLCBycCk7CiAKIAkJCS8qIGZvcndhcmQgaG9wIGluZm9ybWF0aW9uIHRvIG11bHRpcGF0aCBpbXBsLiAqLwpAQCAtMjQxNyw3ICsyNDE4LDcgQEAKIAkJICovCiAKIAkJaWYgKG9sZGZscC0+b2lmID09IDAKLQkJICAgICYmIChNVUxUSUNBU1Qob2xkZmxwLT5mbDRfZHN0KSB8fCBvbGRmbHAtPmZsNF9kc3QgPT0gMHhGRkZGRkZGRikpIHsKKwkJICAgICYmIChNVUxUSUNBU1Qob2xkZmxwLT5mbDRfZHN0KSB8fCBvbGRmbHAtPmZsNF9kc3QgPT0gaHRvbmwoMHhGRkZGRkZGRikpKSB7CiAJCQkvKiBTcGVjaWFsIGhhY2s6IHVzZXIgY2FuIGRpcmVjdCBtdWx0aWNhc3RzCiAJCQkgICBhbmQgbGltaXRlZCBicm9hZGNhc3QgdmlhIG5lY2Vzc2FyeSBpbnRlcmZhY2UKIAkJCSAgIHdpdGhvdXQgZmlkZGxpbmcgd2l0aCBJUF9NVUxUSUNBU1RfSUYgb3IgSVBfUEtUSU5GTy4KQEAgLTI0NTQsNyArMjQ1NSw3IEBACiAJCQlnb3RvIG91dDsJLyogV3JvbmcgZXJyb3IgY29kZSAqLwogCQl9CiAKLQkJaWYgKExPQ0FMX01DQVNUKG9sZGZscC0+Zmw0X2RzdCkgfHwgb2xkZmxwLT5mbDRfZHN0ID09IDB4RkZGRkZGRkYpIHsKKwkJaWYgKExPQ0FMX01DQVNUKG9sZGZscC0+Zmw0X2RzdCkgfHwgb2xkZmxwLT5mbDRfZHN0ID09IGh0b25sKDB4RkZGRkZGRkYpKSB7CiAJCQlpZiAoIWZsLmZsNF9zcmMpCiAJCQkJZmwuZmw0X3NyYyA9IGluZXRfc2VsZWN0X2FkZHIoZGV2X291dCwgMCwKIAkJCQkJCQkgICAgICBSVF9TQ09QRV9MSU5LKTsKQEAgLTI1NjcsNyArMjU2OCw3IEBACiAJdW5zaWduZWQgaGFzaDsKIAlzdHJ1Y3QgcnRhYmxlICpydGg7CiAKLQloYXNoID0gcnRfaGFzaF9jb2RlKGZscC0+Zmw0X2RzdCwgZmxwLT5mbDRfc3JjIF4gKGZscC0+b2lmIDw8IDUpKTsKKwloYXNoID0gcnRfaGFzaChmbHAtPmZsNF9kc3QsIGZscC0+Zmw0X3NyYywgZmxwLT5vaWYpOwogCiAJcmN1X3JlYWRfbG9ja19iaCgpOwogCWZvciAocnRoID0gcmN1X2RlcmVmZXJlbmNlKHJ0X2hhc2hfdGFibGVbaGFzaF0uY2hhaW4pOyBydGg7CkBAIC0yNjYwLDExICsyNjYxLDExIEBACiAJaWYgKHJ0LT5ydF9mbGFncyAmIFJUQ0ZfTk9USUZZKQogCQlyLT5ydG1fZmxhZ3MgfD0gUlRNX0ZfTk9USUZZOwogCi0JTkxBX1BVVF9VMzIoc2tiLCBSVEFfRFNULCBydC0+cnRfZHN0KTsKKwlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfRFNULCBydC0+cnRfZHN0KTsKIAogCWlmIChydC0+ZmwuZmw0X3NyYykgewogCQlyLT5ydG1fc3JjX2xlbiA9IDMyOwotCQlOTEFfUFVUX1UzMihza2IsIFJUQV9TUkMsIHJ0LT5mbC5mbDRfc3JjKTsKKwkJTkxBX1BVVF9CRTMyKHNrYiwgUlRBX1NSQywgcnQtPmZsLmZsNF9zcmMpOwogCX0KIAlpZiAocnQtPnUuZHN0LmRldikKIAkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfT0lGLCBydC0+dS5kc3QuZGV2LT5pZmluZGV4KTsKQEAgLTI2NzcsMTIgKzI2NzgsMTIgQEAKIAkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfTVBfQUxHTywgcnQtPnJ0X211bHRpcGF0aF9hbGcpOwogI2VuZGlmCiAJaWYgKHJ0LT5mbC5paWYpCi0JCU5MQV9QVVRfVTMyKHNrYiwgUlRBX1BSRUZTUkMsIHJ0LT5ydF9zcGVjX2RzdCk7CisJCU5MQV9QVVRfQkUzMihza2IsIFJUQV9QUkVGU1JDLCBydC0+cnRfc3BlY19kc3QpOwogCWVsc2UgaWYgKHJ0LT5ydF9zcmMgIT0gcnQtPmZsLmZsNF9zcmMpCi0JCU5MQV9QVVRfVTMyKHNrYiwgUlRBX1BSRUZTUkMsIHJ0LT5ydF9zcmMpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfUFJFRlNSQywgcnQtPnJ0X3NyYyk7CiAKIAlpZiAocnQtPnJ0X2RzdCAhPSBydC0+cnRfZ2F0ZXdheSkKLQkJTkxBX1BVVF9VMzIoc2tiLCBSVEFfR0FURVdBWSwgcnQtPnJ0X2dhdGV3YXkpOworCQlOTEFfUFVUX0JFMzIoc2tiLCBSVEFfR0FURVdBWSwgcnQtPnJ0X2dhdGV3YXkpOwogCiAJaWYgKHJ0bmV0bGlua19wdXRfbWV0cmljcyhza2IsIHJ0LT51LmRzdC5tZXRyaWNzKSA8IDApCiAJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMjcwNiw3ICsyNzA3LDcgQEAKIAogCWlmIChydC0+ZmwuaWlmKSB7CiAjaWZkZWYgQ09ORklHX0lQX01ST1VURQotCQl1MzIgZHN0ID0gcnQtPnJ0X2RzdDsKKwkJX19iZTMyIGRzdCA9IHJ0LT5ydF9kc3Q7CiAKIAkJaWYgKE1VTFRJQ0FTVChkc3QpICYmICFMT0NBTF9NQ0FTVChkc3QpICYmCiAJCSAgICBpcHY0X2RldmNvbmYubWNfZm9yd2FyZGluZykgewpAQCAtMjc0MCw3ICsyNzQxLDkgQEAKIAlzdHJ1Y3QgcnRtc2cgKnJ0bTsKIAlzdHJ1Y3QgbmxhdHRyICp0YltSVEFfTUFYKzFdOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gTlVMTDsKLQl1MzIgZHN0LCBzcmMsIGlpZjsKKwlfX2JlMzIgZHN0ID0gMDsKKwlfX2JlMzIgc3JjID0gMDsKKwl1MzIgaWlmOwogCWludCBlcnI7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKIApAQCAtMjc2NSw4ICsyNzY4LDggQEAKIAlza2ItPm5oLmlwaC0+cHJvdG9jb2wgPSBJUFBST1RPX0lDTVA7CiAJc2tiX3Jlc2VydmUoc2tiLCBNQVhfSEVBREVSICsgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCi0Jc3JjID0gdGJbUlRBX1NSQ10gPyBubGFfZ2V0X3UzMih0YltSVEFfU1JDXSkgOiAwOwotCWRzdCA9IHRiW1JUQV9EU1RdID8gbmxhX2dldF91MzIodGJbUlRBX0RTVF0pIDogMDsKKwlzcmMgPSB0YltSVEFfU1JDXSA/IG5sYV9nZXRfYmUzMih0YltSVEFfU1JDXSkgOiAwOworCWRzdCA9IHRiW1JUQV9EU1RdID8gbmxhX2dldF9iZTMyKHRiW1JUQV9EU1RdKSA6IDA7CiAJaWlmID0gdGJbUlRBX0lJRl0gPyBubGFfZ2V0X3UzMih0YltSVEFfSUlGXSkgOiAwOwogCiAJaWYgKGlpZikgewpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX2lucHV0LmMgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwppbmRleCBiM2RlZjBkLi4zZjg4NGNlIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaW5wdXQuYworKysgYi9uZXQvaXB2NC90Y3BfaW5wdXQuYwpAQCAtOTM1LDcgKzkzNSw3IEBACiAJY29uc3Qgc3RydWN0IGluZXRfY29ubmVjdGlvbl9zb2NrICppY3NrID0gaW5ldF9jc2soc2spOwogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXVuc2lnbmVkIGNoYXIgKnB0ciA9IGFja19za2ItPmgucmF3ICsgVENQX1NLQl9DQihhY2tfc2tiKS0+c2Fja2VkOwotCXN0cnVjdCB0Y3Bfc2Fja19ibG9jayAqc3AgPSAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrICopKHB0cisyKTsKKwlzdHJ1Y3QgdGNwX3NhY2tfYmxvY2tfd2lyZSAqc3AgPSAoc3RydWN0IHRjcF9zYWNrX2Jsb2NrX3dpcmUgKikocHRyKzIpOwogCWludCBudW1fc2Fja3MgPSAocHRyWzFdIC0gVENQT0xFTl9TQUNLX0JBU0UpPj4zOwogCWludCByZW9yZCA9IHRwLT5wYWNrZXRzX291dDsKIAlpbnQgcHJpb3JfZmFja2V0czsKQEAgLTIyMzksMTMgKzIyMzksMTIgQEAKIAlyZXR1cm4gYWNrZWQ7CiB9CiAKLXN0YXRpYyB1MzIgdGNwX3VzcnR0KGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCitzdGF0aWMgdTMyIHRjcF91c3J0dChzdHJ1Y3QgdGltZXZhbCAqdHYpCiB7Ci0Jc3RydWN0IHRpbWV2YWwgdHYsIG5vdzsKKwlzdHJ1Y3QgdGltZXZhbCBub3c7CiAKIAlkb19nZXR0aW1lb2ZkYXkoJm5vdyk7Ci0Jc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOwotCXJldHVybiAobm93LnR2X3NlYyAtIHR2LnR2X3NlYykgKiAxMDAwMDAwICsgKG5vdy50dl91c2VjIC0gdHYudHZfdXNlYyk7CisJcmV0dXJuIChub3cudHZfc2VjIC0gdHYtPnR2X3NlYykgKiAxMDAwMDAwICsgKG5vdy50dl91c2VjIC0gdHYtPnR2X3VzZWMpOwogfQogCiAvKiBSZW1vdmUgYWNrbm93bGVkZ2VkIGZyYW1lcyBmcm9tIHRoZSByZXRyYW5zbWlzc2lvbiBxdWV1ZS4gKi8KQEAgLTIyNjAsNiArMjI1OSw3IEBACiAJdTMyIHBrdHNfYWNrZWQgPSAwOwogCXZvaWQgKCpydHRfc2FtcGxlKShzdHJ1Y3Qgc29jayAqc2ssIHUzMiB1c3J0dCkKIAkJPSBpY3NrLT5pY3NrX2NhX29wcy0+cnR0X3NhbXBsZTsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKIAogCXdoaWxlICgoc2tiID0gc2tiX3BlZWsoJnNrLT5za193cml0ZV9xdWV1ZSkpICYmCiAJICAgICAgIHNrYiAhPSBzay0+c2tfc2VuZF9oZWFkKSB7CkBAIC0yMzA4LDggKzIzMDgsNyBAQAogCQkJCXNlcV9ydHQgPSAtMTsKIAkJCX0gZWxzZSBpZiAoc2VxX3J0dCA8IDApIHsKIAkJCQlzZXFfcnR0ID0gbm93IC0gc2NiLT53aGVuOwotCQkJCWlmIChydHRfc2FtcGxlKQotCQkJCQkoKnJ0dF9zYW1wbGUpKHNrLCB0Y3BfdXNydHQoc2tiKSk7CisJCQkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOwogCQkJfQogCQkJaWYgKHNhY2tlZCAmIFRDUENCX1NBQ0tFRF9BQ0tFRCkKIAkJCQl0cC0+c2Fja2VkX291dCAtPSB0Y3Bfc2tiX3Bjb3VudChza2IpOwpAQCAtMjMyMiw4ICsyMzIxLDcgQEAKIAkJCX0KIAkJfSBlbHNlIGlmIChzZXFfcnR0IDwgMCkgewogCQkJc2VxX3J0dCA9IG5vdyAtIHNjYi0+d2hlbjsKLQkJCWlmIChydHRfc2FtcGxlKQotCQkJCSgqcnR0X3NhbXBsZSkoc2ssIHRjcF91c3J0dChza2IpKTsKKwkJCXNrYl9nZXRfdGltZXN0YW1wKHNrYiwgJnR2KTsKIAkJfQogCQl0Y3BfZGVjX3Bjb3VudF9hcHByb3goJnRwLT5mYWNrZXRzX291dCwgc2tiKTsKIAkJdGNwX3BhY2tldHNfb3V0X2RlYyh0cCwgc2tiKTsKQEAgLTIzMzUsNiArMjMzMyw4IEBACiAJaWYgKGFja2VkJkZMQUdfQUNLRUQpIHsKIAkJdGNwX2Fja191cGRhdGVfcnR0KHNrLCBhY2tlZCwgc2VxX3J0dCk7CiAJCXRjcF9hY2tfcGFja2V0c19vdXQoc2ssIHRwKTsKKwkJaWYgKHJ0dF9zYW1wbGUgJiYgIShhY2tlZCAmIEZMQUdfUkVUUkFOU19EQVRBX0FDS0VEKSkKKwkJCSgqcnR0X3NhbXBsZSkoc2ssIHRjcF91c3J0dCgmdHYpKTsKIAogCQlpZiAoaWNzay0+aWNza19jYV9vcHMtPnBrdHNfYWNrZWQpCiAJCQlpY3NrLT5pY3NrX2NhX29wcy0+cGt0c19hY2tlZChzaywgcGt0c19hY2tlZCk7CkBAIC0yNjI5LDcgKzI2MjksNyBAQAogCSAgCQkJc3dpdGNoKG9wY29kZSkgewogCQkJCWNhc2UgVENQT1BUX01TUzoKIAkJCQkJaWYob3BzaXplPT1UQ1BPTEVOX01TUyAmJiB0aC0+c3luICYmICFlc3RhYikgewotCQkJCQkJdTE2IGluX21zcyA9IG50b2hzKGdldF91bmFsaWduZWQoKF9fdTE2ICopcHRyKSk7CisJCQkJCQl1MTYgaW5fbXNzID0gbnRvaHMoZ2V0X3VuYWxpZ25lZCgoX19iZTE2ICopcHRyKSk7CiAJCQkJCQlpZiAoaW5fbXNzKSB7CiAJCQkJCQkJaWYgKG9wdF9yeC0+dXNlcl9tc3MgJiYgb3B0X3J4LT51c2VyX21zcyA8IGluX21zcykKIAkJCQkJCQkJaW5fbXNzID0gb3B0X3J4LT51c2VyX21zczsKQEAgLTI2NTcsOCArMjY1Nyw4IEBACiAJCQkJCQlpZiAoKGVzdGFiICYmIG9wdF9yeC0+dHN0YW1wX29rKSB8fAogCQkJCQkJICAgICghZXN0YWIgJiYgc3lzY3RsX3RjcF90aW1lc3RhbXBzKSkgewogCQkJCQkJCW9wdF9yeC0+c2F3X3RzdGFtcCA9IDE7Ci0JCQkJCQkJb3B0X3J4LT5yY3ZfdHN2YWwgPSBudG9obChnZXRfdW5hbGlnbmVkKChfX3UzMiAqKXB0cikpOwotCQkJCQkJCW9wdF9yeC0+cmN2X3RzZWNyID0gbnRvaGwoZ2V0X3VuYWxpZ25lZCgoX191MzIgKikocHRyKzQpKSk7CisJCQkJCQkJb3B0X3J4LT5yY3ZfdHN2YWwgPSBudG9obChnZXRfdW5hbGlnbmVkKChfX2JlMzIgKilwdHIpKTsKKwkJCQkJCQlvcHRfcngtPnJjdl90c2VjciA9IG50b2hsKGdldF91bmFsaWduZWQoKF9fYmUzMiAqKShwdHIrNCkpKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlicmVhazsKQEAgLTI2OTUsOCArMjY5NSw4IEBACiAJCXJldHVybiAwOwogCX0gZWxzZSBpZiAodHAtPnJ4X29wdC50c3RhbXBfb2sgJiYKIAkJICAgdGgtPmRvZmYgPT0gKHNpemVvZihzdHJ1Y3QgdGNwaGRyKT4+MikrKFRDUE9MRU5fVFNUQU1QX0FMSUdORUQ+PjIpKSB7Ci0JCV9fdTMyICpwdHIgPSAoX191MzIgKikodGggKyAxKTsKLQkJaWYgKCpwdHIgPT0gbnRvaGwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpCisJCV9fYmUzMiAqcHRyID0gKF9fYmUzMiAqKSh0aCArIDEpOworCQlpZiAoKnB0ciA9PSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX05PUCA8PCAxNikKIAkJCQkgIHwgKFRDUE9QVF9USU1FU1RBTVAgPDwgOCkgfCBUQ1BPTEVOX1RJTUVTVEFNUCkpIHsKIAkJCXRwLT5yeF9vcHQuc2F3X3RzdGFtcCA9IDE7CiAJCQkrK3B0cjsKQEAgLTM5MTEsMTAgKzM5MTEsMTAgQEAKIAogCQkvKiBDaGVjayB0aW1lc3RhbXAgKi8KIAkJaWYgKHRjcF9oZWFkZXJfbGVuID09IHNpemVvZihzdHJ1Y3QgdGNwaGRyKSArIFRDUE9MRU5fVFNUQU1QX0FMSUdORUQpIHsKLQkJCV9fdTMyICpwdHIgPSAoX191MzIgKikodGggKyAxKTsKKwkJCV9fYmUzMiAqcHRyID0gKF9fYmUzMiAqKSh0aCArIDEpOwogCiAJCQkvKiBObz8gU2xvdyBwYXRoISAqLwotCQkJaWYgKCpwdHIgIT0gbnRvaGwoKFRDUE9QVF9OT1AgPDwgMjQpIHwgKFRDUE9QVF9OT1AgPDwgMTYpCisJCQlpZiAoKnB0ciAhPSBodG9ubCgoVENQT1BUX05PUCA8PCAyNCkgfCAoVENQT1BUX05PUCA8PCAxNikKIAkJCQkJICB8IChUQ1BPUFRfVElNRVNUQU1QIDw8IDgpIHwgVENQT0xFTl9USU1FU1RBTVApKQogCQkJCWdvdG8gc2xvd19wYXRoOwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC90Y3BfaXB2NC5jIGIvbmV0L2lwdjQvdGNwX2lwdjQuYwppbmRleCAzOWIxNzk4Li5jODM5MzhiIDEwMDY0NAotLS0gYS9uZXQvaXB2NC90Y3BfaXB2NC5jCisrKyBiL25ldC9pcHY0L3RjcF9pcHY0LmMKQEAgLTE1OSw3ICsxNTksNyBAQAogCXN0cnVjdCB0Y3Bfc29jayAqdHAgPSB0Y3Bfc2soc2spOwogCXN0cnVjdCBzb2NrYWRkcl9pbiAqdXNpbiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKil1YWRkcjsKIAlzdHJ1Y3QgcnRhYmxlICpydDsKLQl1MzIgZGFkZHIsIG5leHRob3A7CisJX19iZTMyIGRhZGRyLCBuZXh0aG9wOwogCWludCB0bXA7CiAJaW50IGVycjsKIApAQCAtNzM0LDggKzczNCw4IEBACiAJc3RydWN0IGluZXRfcmVxdWVzdF9zb2NrICppcmVxOwogCXN0cnVjdCB0Y3Bfb3B0aW9uc19yZWNlaXZlZCB0bXBfb3B0OwogCXN0cnVjdCByZXF1ZXN0X3NvY2sgKnJlcTsKLQlfX3UzMiBzYWRkciA9IHNrYi0+bmguaXBoLT5zYWRkcjsKLQlfX3UzMiBkYWRkciA9IHNrYi0+bmguaXBoLT5kYWRkcjsKKwlfX2JlMzIgc2FkZHIgPSBza2ItPm5oLmlwaC0+c2FkZHI7CisJX19iZTMyIGRhZGRyID0gc2tiLT5uaC5pcGgtPmRhZGRyOwogCV9fdTMyIGlzbiA9IFRDUF9TS0JfQ0Ioc2tiKS0+d2hlbjsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBOVUxMOwogI2lmZGVmIENPTkZJR19TWU5fQ09PS0lFUwpAQCAtMTc2Myw3ICsxNzYzLDcgQEAKIAogc3RhdGljIHZvaWQgZ2V0X3RpbWV3YWl0NF9zb2NrKHN0cnVjdCBpbmV0X3RpbWV3YWl0X3NvY2sgKnR3LCBjaGFyICp0bXBidWYsIGludCBpKQogewotCXVuc2lnbmVkIGludCBkZXN0LCBzcmM7CisJX19iZTMyIGRlc3QsIHNyYzsKIAlfX3UxNiBkZXN0cCwgc3JjcDsKIAlpbnQgdHRkID0gdHctPnR3X3R0ZCAtIGppZmZpZXM7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3RjcF9scC5jIGIvbmV0L2lwdjQvdGNwX2xwLmMKaW5kZXggMzA4ZmI3ZS4uZjBlYmFmMCAxMDA2NDQKLS0tIGEvbmV0L2lwdjQvdGNwX2xwLmMKKysrIGIvbmV0L2lwdjQvdGNwX2xwLmMKQEAgLTMxLDggKzMxLDYgQEAKICAqICAgSHVuZyBIaW5nIEx1biwgTWlrZSA8aGxodW5nM2lAZ21haWwuY29tPgogICogU291cmNlRm9yZ2UgcHJvamVjdCBwYWdlOgogICogICBodHRwOi8vdGNwLWxwLW1vZC5zb3VyY2Vmb3JnZS5uZXQvCi0gKgotICogVmVyc2lvbjogJElkOiB0Y3BfbHAuYyx2IDEuMjQgMjAwNi8wOS8wNSAyMDoyMjo1MyBoc3dvbmczaSBFeHAgJAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KQEAgLTE2NCw3ICsxNjIsNyBAQAogCiAgb3V0OgogCS8qIHJlY29yZCB0aW1lIGZvciBzdWNjZXNzZnVsIHJlbW90ZSBIWiBjYWxjICovCi0JaWYgKHJoeiA+IDApCisJaWYgKChyaHogPj4gNikgPiAwKQogCQlscC0+ZmxhZyB8PSBMUF9WQUxJRF9SSFo7CiAJZWxzZQogCQlscC0+ZmxhZyAmPSB+TFBfVkFMSURfUkhaOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjQvdGNwX291dHB1dC5jIGIvbmV0L2lwdjQvdGNwX291dHB1dC5jCmluZGV4IDA2MWVkZmEuLjlhMjUzZmEgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3RjcF9vdXRwdXQuYworKysgYi9uZXQvaXB2NC90Y3Bfb3V0cHV0LmMKQEAgLTI2OSw3ICsyNjksNyBAQAogCXJldHVybiBuZXdfd2luOwogfQogCi1zdGF0aWMgdm9pZCB0Y3BfYnVpbGRfYW5kX3VwZGF0ZV9vcHRpb25zKF9fdTMyICpwdHIsIHN0cnVjdCB0Y3Bfc29jayAqdHAsCitzdGF0aWMgdm9pZCB0Y3BfYnVpbGRfYW5kX3VwZGF0ZV9vcHRpb25zKF9fYmUzMiAqcHRyLCBzdHJ1Y3QgdGNwX3NvY2sgKnRwLAogCQkJCQkgX191MzIgdHN0YW1wKQogewogCWlmICh0cC0+cnhfb3B0LnRzdGFtcF9vaykgewpAQCAtMzA1LDcgKzMwNSw3IEBACiAgKiBNQVhfU1lOX1NJWkUgdG8gbWF0Y2ggdGhlIG5ldyBtYXhpbXVtIG51bWJlciBvZiBvcHRpb25zIHRoYXQgeW91CiAgKiBjYW4gZ2VuZXJhdGUuCiAgKi8KLXN0YXRpYyB2b2lkIHRjcF9zeW5fYnVpbGRfb3B0aW9ucyhfX3UzMiAqcHRyLCBpbnQgbXNzLCBpbnQgdHMsIGludCBzYWNrLAorc3RhdGljIHZvaWQgdGNwX3N5bl9idWlsZF9vcHRpb25zKF9fYmUzMiAqcHRyLCBpbnQgbXNzLCBpbnQgdHMsIGludCBzYWNrLAogCQkJCSAgaW50IG9mZmVyX3dzY2FsZSwgaW50IHdzY2FsZSwgX191MzIgdHN0YW1wLAogCQkJCSAgX191MzIgdHNfcmVjZW50KQogewpAQCAtNDI0LDcgKzQyNCw3IEBACiAJdGgtPmRlc3QJCT0gaW5ldC0+ZHBvcnQ7CiAJdGgtPnNlcQkJCT0gaHRvbmwodGNiLT5zZXEpOwogCXRoLT5hY2tfc2VxCQk9IGh0b25sKHRwLT5yY3Zfbnh0KTsKLQkqKCgoX191MTYgKil0aCkgKyA2KQk9IGh0b25zKCgodGNwX2hlYWRlcl9zaXplID4+IDIpIDw8IDEyKSB8CisJKigoKF9fYmUxNiAqKXRoKSArIDYpCT0gaHRvbnMoKCh0Y3BfaGVhZGVyX3NpemUgPj4gMikgPDwgMTIpIHwKIAkJCQkJdGNiLT5mbGFncyk7CiAKIAlpZiAodW5saWtlbHkodGNiLT5mbGFncyAmIFRDUENCX0ZMQUdfU1lOKSkgewpAQCAtNDQ1LDcgKzQ0NSw3IEBACiAJfQogCiAJaWYgKHVubGlrZWx5KHRjYi0+ZmxhZ3MgJiBUQ1BDQl9GTEFHX1NZTikpIHsKLQkJdGNwX3N5bl9idWlsZF9vcHRpb25zKChfX3UzMiAqKSh0aCArIDEpLAorCQl0Y3Bfc3luX2J1aWxkX29wdGlvbnMoKF9fYmUzMiAqKSh0aCArIDEpLAogCQkJCSAgICAgIHRjcF9hZHZlcnRpc2VfbXNzKHNrKSwKIAkJCQkgICAgICAoc3lzY3RsX2ZsYWdzICYgU1lTQ1RMX0ZMQUdfVFNUQU1QUyksCiAJCQkJICAgICAgKHN5c2N0bF9mbGFncyAmIFNZU0NUTF9GTEFHX1NBQ0spLApAQCAtNDU0LDcgKzQ1NCw3IEBACiAJCQkJICAgICAgdGNiLT53aGVuLAogCQkJCSAgICAgIHRwLT5yeF9vcHQudHNfcmVjZW50KTsKIAl9IGVsc2UgewotCQl0Y3BfYnVpbGRfYW5kX3VwZGF0ZV9vcHRpb25zKChfX3UzMiAqKSh0aCArIDEpLAorCQl0Y3BfYnVpbGRfYW5kX3VwZGF0ZV9vcHRpb25zKChfX2JlMzIgKikodGggKyAxKSwKIAkJCQkJICAgICB0cCwgdGNiLT53aGVuKTsKIAkJVENQX0VDTl9zZW5kKHNrLCB0cCwgc2tiLCB0Y3BfaGVhZGVyX3NpemUpOwogCX0KQEAgLTIwNzAsNyArMjA3MCw3IEBACiAJdGgtPndpbmRvdyA9IGh0b25zKHJlcS0+cmN2X3duZCk7CiAKIAlUQ1BfU0tCX0NCKHNrYiktPndoZW4gPSB0Y3BfdGltZV9zdGFtcDsKLQl0Y3Bfc3luX2J1aWxkX29wdGlvbnMoKF9fdTMyICopKHRoICsgMSksIGRzdF9tZXRyaWMoZHN0LCBSVEFYX0FEVk1TUyksIGlyZXEtPnRzdGFtcF9vaywKKwl0Y3Bfc3luX2J1aWxkX29wdGlvbnMoKF9fYmUzMiAqKSh0aCArIDEpLCBkc3RfbWV0cmljKGRzdCwgUlRBWF9BRFZNU1MpLCBpcmVxLT50c3RhbXBfb2ssCiAJCQkgICAgICBpcmVxLT5zYWNrX29rLCBpcmVxLT53c2NhbGVfb2ssIGlyZXEtPnJjdl93c2NhbGUsCiAJCQkgICAgICBUQ1BfU0tCX0NCKHNrYiktPndoZW4sCiAJCQkgICAgICByZXEtPnRzX3JlY2VudCk7CmRpZmYgLS1naXQgYS9uZXQvaXB2NC91ZHAuYyBiL25ldC9pcHY0L3VkcC5jCmluZGV4IDc3ZTI2NWQuLjZkNjE0MmYgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3VkcC5jCisrKyBiL25ldC9pcHY0L3VkcC5jCkBAIC0yNDMsOCArMjQzLDggQEAKIC8qIFVEUCBpcyBuZWFybHkgYWx3YXlzIHdpbGRjYXJkcyBvdXQgdGhlIHdhem9vLCBpdCBtYWtlcyBubyBzZW5zZSB0byB0cnkKICAqIGhhcmRlciB0aGFuIHRoaXMuIC1EYXZlTQogICovCi1zdGF0aWMgc3RydWN0IHNvY2sgKnVkcF92NF9sb29rdXBfbG9uZ3dheSh1MzIgc2FkZHIsIHUxNiBzcG9ydCwKLQkJCQkJICB1MzIgZGFkZHIsIHUxNiBkcG9ydCwgaW50IGRpZikKK3N0YXRpYyBzdHJ1Y3Qgc29jayAqdWRwX3Y0X2xvb2t1cF9sb25nd2F5KF9fYmUzMiBzYWRkciwgX19iZTE2IHNwb3J0LAorCQkJCQkgIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LCBpbnQgZGlmKQogewogCXN0cnVjdCBzb2NrICpzaywgKnJlc3VsdCA9IE5VTEw7CiAJc3RydWN0IGhsaXN0X25vZGUgKm5vZGU7CkBAIC0yODgsOCArMjg4LDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3Qgc29jayAqdWRwX3Y0X2xvb2t1cCh1MzIgc2FkZHIsIHUxNiBzcG9ydCwKLQkJCQkJICAgICB1MzIgZGFkZHIsIHUxNiBkcG9ydCwgaW50IGRpZikKK3N0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBzb2NrICp1ZHBfdjRfbG9va3VwKF9fYmUzMiBzYWRkciwgX19iZTE2IHNwb3J0LAorCQkJCQkgICAgIF9fYmUzMiBkYWRkciwgX19iZTE2IGRwb3J0LCBpbnQgZGlmKQogewogCXN0cnVjdCBzb2NrICpzazsKIApAQCAtMzAyLDggKzMwMiw4IEBACiB9CiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IHNvY2sgKnVkcF92NF9tY2FzdF9uZXh0KHN0cnVjdCBzb2NrICpzaywKLQkJCQkJICAgICB1MTYgbG9jX3BvcnQsIHUzMiBsb2NfYWRkciwKLQkJCQkJICAgICB1MTYgcm10X3BvcnQsIHUzMiBybXRfYWRkciwKKwkJCQkJICAgICBfX2JlMTYgbG9jX3BvcnQsIF9fYmUzMiBsb2NfYWRkciwKKwkJCQkJICAgICBfX2JlMTYgcm10X3BvcnQsIF9fYmUzMiBybXRfYWRkciwKIAkJCQkJICAgICBpbnQgZGlmKQogewogCXN0cnVjdCBobGlzdF9ub2RlICpub2RlOwpAQCAtNDk4LDcgKzQ5OCw3IEBACiB9CiAKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IHVkcF9jaGVjayhzdHJ1Y3QgdWRwaGRyICp1aCwgaW50IGxlbiwgdW5zaWduZWQgbG9uZyBzYWRkciwgdW5zaWduZWQgbG9uZyBkYWRkciwgdW5zaWduZWQgbG9uZyBiYXNlKQorc3RhdGljIHVuc2lnbmVkIHNob3J0IHVkcF9jaGVjayhzdHJ1Y3QgdWRwaGRyICp1aCwgaW50IGxlbiwgX19iZTMyIHNhZGRyLCBfX2JlMzIgZGFkZHIsIHVuc2lnbmVkIGxvbmcgYmFzZSkKIHsKIAlyZXR1cm4oY3N1bV90Y3B1ZHBfbWFnaWMoc2FkZHIsIGRhZGRyLCBsZW4sIElQUFJPVE9fVURQLCBiYXNlKSk7CiB9CkBAIC01MTMsOCArNTEzLDggQEAKIAlzdHJ1Y3QgcnRhYmxlICpydCA9IE5VTEw7CiAJaW50IGZyZWUgPSAwOwogCWludCBjb25uZWN0ZWQgPSAwOwotCXUzMiBkYWRkciwgZmFkZHIsIHNhZGRyOwotCXUxNiBkcG9ydDsKKwlfX2JlMzIgZGFkZHIsIGZhZGRyLCBzYWRkcjsKKwlfX2JlMTYgZHBvcnQ7CiAJdTggIHRvczsKIAlpbnQgZXJyOwogCWludCBjb3JrcmVxID0gdXAtPmNvcmtmbGFnIHx8IG1zZy0+bXNnX2ZsYWdzJk1TR19NT1JFOwpAQCAtOTMxLDcgKzkzMSw3IEBACiAJaW50IGlwaGxlbiwgbGVuOwogICAKIAlfX3U4ICp1ZHBkYXRhID0gKF9fdTggKil1aCArIHNpemVvZihzdHJ1Y3QgdWRwaGRyKTsKLQlfX3UzMiAqdWRwZGF0YTMyID0gKF9fdTMyICopdWRwZGF0YTsKKwlfX2JlMzIgKnVkcGRhdGEzMiA9IChfX2JlMzIgKil1ZHBkYXRhOwogCV9fdTE2IGVuY2FwX3R5cGUgPSB1cC0+ZW5jYXBfdHlwZTsKIAogCS8qIGlmIHdlJ3JlIG92ZXJseSBzaG9ydCwgbGV0IFVEUCBoYW5kbGUgaXQgKi8KQEAgLTEwODAsNyArMTA4MCw3IEBACiAgKglzbyB3ZSBkb24ndCBuZWVkIHRvIGxvY2sgdGhlIGhhc2hlcy4KICAqLwogc3RhdGljIGludCB1ZHBfdjRfbWNhc3RfZGVsaXZlcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdWRwaGRyICp1aCwKLQkJCQkgdTMyIHNhZGRyLCB1MzIgZGFkZHIpCisJCQkJIF9fYmUzMiBzYWRkciwgX19iZTMyIGRhZGRyKQogewogCXN0cnVjdCBzb2NrICpzazsKIAlpbnQgZGlmOwpAQCAtMTEyMSw3ICsxMTIxLDcgQEAKICAqIGluY2x1ZGluZyB1ZHAgaGVhZGVyIGFuZCBmb2xkaW5nIGl0IHRvIHNrYi0+Y3N1bS4KICAqLwogc3RhdGljIHZvaWQgdWRwX2NoZWNrc3VtX2luaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHVkcGhkciAqdWgsCi0JCQkgICAgIHVuc2lnbmVkIHNob3J0IHVsZW4sIHUzMiBzYWRkciwgdTMyIGRhZGRyKQorCQkJICAgICB1bnNpZ25lZCBzaG9ydCB1bGVuLCBfX2JlMzIgc2FkZHIsIF9fYmUzMiBkYWRkcikKIHsKIAlpZiAodWgtPmNoZWNrID09IDApIHsKIAkJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9VTk5FQ0VTU0FSWTsKQEAgLTExNDYsOCArMTE0Niw4IEBACiAgIAlzdHJ1Y3QgdWRwaGRyICp1aDsKIAl1bnNpZ25lZCBzaG9ydCB1bGVuOwogCXN0cnVjdCBydGFibGUgKnJ0ID0gKHN0cnVjdCBydGFibGUqKXNrYi0+ZHN0OwotCXUzMiBzYWRkciA9IHNrYi0+bmguaXBoLT5zYWRkcjsKLQl1MzIgZGFkZHIgPSBza2ItPm5oLmlwaC0+ZGFkZHI7CisJX19iZTMyIHNhZGRyID0gc2tiLT5uaC5pcGgtPnNhZGRyOworCV9fYmUzMiBkYWRkciA9IHNrYi0+bmguaXBoLT5kYWRkcjsKIAlpbnQgbGVuID0gc2tiLT5sZW47CiAKIAkvKgpAQCAtMTU2Myw4ICsxNTYzLDggQEAKIHN0YXRpYyB2b2lkIHVkcDRfZm9ybWF0X3NvY2soc3RydWN0IHNvY2sgKnNwLCBjaGFyICp0bXBidWYsIGludCBidWNrZXQpCiB7CiAJc3RydWN0IGluZXRfc29jayAqaW5ldCA9IGluZXRfc2soc3ApOwotCXVuc2lnbmVkIGludCBkZXN0ID0gaW5ldC0+ZGFkZHI7Ci0JdW5zaWduZWQgaW50IHNyYyAgPSBpbmV0LT5yY3Zfc2FkZHI7CisJX19iZTMyIGRlc3QgPSBpbmV0LT5kYWRkcjsKKwlfX2JlMzIgc3JjICA9IGluZXQtPnJjdl9zYWRkcjsKIAlfX3UxNiBkZXN0cAkgID0gbnRvaHMoaW5ldC0+ZHBvcnQpOwogCV9fdTE2IHNyY3AJICA9IG50b2hzKGluZXQtPnNwb3J0KTsKIApkaWZmIC0tZ2l0IGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYyBiL25ldC9pcHY0L3hmcm00X2lucHV0LmMKaW5kZXggMDQwZTg0Ny4uODY1NWQwMyAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfaW5wdXQuYworKysgYi9uZXQvaXB2NC94ZnJtNF9pbnB1dC5jCkBAIC0yMyw3ICsyMyw3IEBACiAKIEVYUE9SVF9TWU1CT0woeGZybTRfcmN2KTsKIAotc3RhdGljIGludCB4ZnJtNF9wYXJzZV9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbmV4dGhkciwgdTMyICpzcGksIHUzMiAqc2VxKQorc3RhdGljIGludCB4ZnJtNF9wYXJzZV9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbmV4dGhkciwgX19iZTMyICpzcGksIF9fYmUzMiAqc2VxKQogewogCXN3aXRjaCAobmV4dGhkcikgewogCWNhc2UgSVBQUk9UT19JUElQOgpAQCAtNTUsNyArNTUsNyBAQAogaW50IHhmcm00X3Jjdl9lbmNhcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX3UxNiBlbmNhcF90eXBlKQogewogCWludCBlcnI7Ci0JdTMyIHNwaSwgc2VxOworCV9fYmUzMiBzcGksIHNlcTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeGZybV92ZWNbWEZSTV9NQVhfREVQVEhdOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwogCWludCB4ZnJtX25yID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3BvbGljeS5jIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKaW5kZXggZWFiY2QyNy4uN2E3YTAwMSAxMDA2NDQKLS0tIGEvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKKysrIGIvbmV0L2lwdjQveGZybTRfcG9saWN5LmMKQEAgLTIyMSw3ICsyMjEsNyBAQAogCiAJCWNhc2UgSVBQUk9UT19FU1A6CiAJCQlpZiAocHNrYl9tYXlfcHVsbChza2IsIHhwcnRoICsgNCAtIHNrYi0+ZGF0YSkpIHsKLQkJCQl1MzIgKmVoZHIgPSAodTMyICopeHBydGg7CisJCQkJX19iZTMyICplaGRyID0gKF9fYmUzMiAqKXhwcnRoOwogCiAJCQkJZmwtPmZsX2lwc2VjX3NwaSA9IGVoZHJbMF07CiAJCQl9CkBAIC0yMjksNyArMjI5LDcgQEAKIAogCQljYXNlIElQUFJPVE9fQUg6CiAJCQlpZiAocHNrYl9tYXlfcHVsbChza2IsIHhwcnRoICsgOCAtIHNrYi0+ZGF0YSkpIHsKLQkJCQl1MzIgKmFoX2hkciA9ICh1MzIqKXhwcnRoOworCQkJCV9fYmUzMiAqYWhfaGRyID0gKF9fYmUzMiopeHBydGg7CiAKIAkJCQlmbC0+ZmxfaXBzZWNfc3BpID0gYWhfaGRyWzFdOwogCQkJfQpAQCAtMjM3LDcgKzIzNyw3IEBACiAKIAkJY2FzZSBJUFBST1RPX0NPTVA6CiAJCQlpZiAocHNrYl9tYXlfcHVsbChza2IsIHhwcnRoICsgNCAtIHNrYi0+ZGF0YSkpIHsKLQkJCQl1MTYgKmlwY29tcF9oZHIgPSAodTE2ICopeHBydGg7CisJCQkJX19iZTE2ICppcGNvbXBfaGRyID0gKF9fYmUxNiAqKXhwcnRoOwogCiAJCQkJZmwtPmZsX2lwc2VjX3NwaSA9IGh0b25sKG50b2hzKGlwY29tcF9oZHJbMV0pKTsKIAkJCX0KZGlmZiAtLWdpdCBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMgYi9uZXQvaXB2NC94ZnJtNF9zdGF0ZS5jCmluZGV4IGZlMjAzNDQuLjNjYzNkZjAgMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L3hmcm00X3N0YXRlLmMKKysrIGIvbmV0L2lwdjQveGZybTRfc3RhdGUuYwpAQCAtMjksOSArMjksOSBAQAogCXgtPnNlbC5kYWRkci5hNCA9IGZsLT5mbDRfZHN0OwogCXgtPnNlbC5zYWRkci5hNCA9IGZsLT5mbDRfc3JjOwogCXgtPnNlbC5kcG9ydCA9IHhmcm1fZmxvd2lfZHBvcnQoZmwpOwotCXgtPnNlbC5kcG9ydF9tYXNrID0gfjA7CisJeC0+c2VsLmRwb3J0X21hc2sgPSBodG9ucygweGZmZmYpOwogCXgtPnNlbC5zcG9ydCA9IHhmcm1fZmxvd2lfc3BvcnQoZmwpOwotCXgtPnNlbC5zcG9ydF9tYXNrID0gfjA7CisJeC0+c2VsLnNwb3J0X21hc2sgPSBodG9ucygweGZmZmYpOwogCXgtPnNlbC5wcmVmaXhsZW5fZCA9IDMyOwogCXgtPnNlbC5wcmVmaXhsZW5fcyA9IDMyOwogCXgtPnNlbC5wcm90byA9IGZsLT5wcm90bzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGMxODY3NjMuLmUwM2MzM2IgMTAwNjQ0Ci0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmMKKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuYwpAQCAtMTI1OCw4ICsxMjU4LDggQEAKIHsKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKnNrX3Jjdl9zYWRkcjYgPSAmaW5ldDZfc2soc2spLT5yY3Zfc2FkZHI7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzazJfcmN2X3NhZGRyNiA9IGluZXQ2X3Jjdl9zYWRkcihzazIpOwotCXUzMiBza19yY3Zfc2FkZHIgPSBpbmV0X3NrKHNrKS0+cmN2X3NhZGRyOwotCXUzMiBzazJfcmN2X3NhZGRyID0gaW5ldF9yY3Zfc2FkZHIoc2syKTsKKwlfX2JlMzIgc2tfcmN2X3NhZGRyID0gaW5ldF9zayhzayktPnJjdl9zYWRkcjsKKwlfX2JlMzIgc2syX3Jjdl9zYWRkciA9IGluZXRfcmN2X3NhZGRyKHNrMik7CiAJaW50IHNrX2lwdjZvbmx5ID0gaXB2Nl9vbmx5X3NvY2soc2spOwogCWludCBzazJfaXB2Nm9ubHkgPSBpbmV0X3Y2X2lwdjZvbmx5KHNrMik7CiAJaW50IGFkZHJfdHlwZSA9IGlwdjZfYWRkcl90eXBlKHNrX3Jjdl9zYWRkcjYpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWZfaW5ldDYuYyBiL25ldC9pcHY2L2FmX2luZXQ2LmMKaW5kZXggYmY2ZThhZi4uZTk0ZWNjYiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWZfaW5ldDYuYworKysgYi9uZXQvaXB2Ni9hZl9pbmV0Ni5jCkBAIC0yNDYsNyArMjQ2LDcgQEAKIAlzdHJ1Y3Qgc29jayAqc2sgPSBzb2NrLT5zazsKIAlzdHJ1Y3QgaW5ldF9zb2NrICppbmV0ID0gaW5ldF9zayhzayk7CiAJc3RydWN0IGlwdjZfcGluZm8gKm5wID0gaW5ldDZfc2soc2spOwotCV9fdTMyIHY0YWRkciA9IDA7CisJX19iZTMyIHY0YWRkciA9IDA7CiAJdW5zaWduZWQgc2hvcnQgc251bTsKIAlpbnQgYWRkcl90eXBlID0gMDsKIAlpbnQgZXJyID0gMDsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYyBiL25ldC9pcHY2L2luZXQ2X2hhc2h0YWJsZXMuYwppbmRleCBkMmYzZmM5Li44YWNjZDFmIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pbmV0Nl9oYXNodGFibGVzLmMKKysrIGIvbmV0L2lwdjYvaW5ldDZfaGFzaHRhYmxlcy5jCkBAIC02NCw3ICs2NCw3IEBACiB7CiAJc3RydWN0IHNvY2sgKnNrOwogCWNvbnN0IHN0cnVjdCBobGlzdF9ub2RlICpub2RlOwotCWNvbnN0IF9fdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhzcG9ydCwgaG51bSk7CisJY29uc3QgX19wb3J0cGFpciBwb3J0cyA9IElORVRfQ09NQklORURfUE9SVFMoc3BvcnQsIGhudW0pOwogCS8qIE9wdGltaXplIGhlcmUgZm9yIGRpcmVjdCBoaXQsIG9ubHkgbGlzdGVuaW5nIGNvbm5lY3Rpb25zIGNhbgogCSAqIGhhdmUgd2lsZGNhcmRzIGFueXdheXMuCiAJICovCkBAIC04Miw3ICs4Miw3IEBACiAJc2tfZm9yX2VhY2goc2ssIG5vZGUsICYoaGVhZCArIGhhc2hpbmZvLT5laGFzaF9zaXplKS0+Y2hhaW4pIHsKIAkJY29uc3Qgc3RydWN0IGluZXRfdGltZXdhaXRfc29jayAqdHcgPSBpbmV0X3R3c2soc2spOwogCi0JCWlmKCooKF9fdTMyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgorCQlpZigqKChfX3BvcnRwYWlyICopJih0dy0+dHdfZHBvcnQpKQk9PSBwb3J0cwkmJgogCQkgICBzay0+c2tfZmFtaWx5CQk9PSBQRl9JTkVUNikgewogCQkJY29uc3Qgc3RydWN0IGluZXQ2X3RpbWV3YWl0X3NvY2sgKnR3NiA9IGluZXQ2X3R3c2soc2spOwogCkBAIC0xNzEsNyArMTcxLDcgQEAKIAljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmRhZGRyID0gJm5wLT5yY3Zfc2FkZHI7CiAJY29uc3Qgc3RydWN0IGluNl9hZGRyICpzYWRkciA9ICZucC0+ZGFkZHI7CiAJY29uc3QgaW50IGRpZiA9IHNrLT5za19ib3VuZF9kZXZfaWY7Ci0JY29uc3QgdTMyIHBvcnRzID0gSU5FVF9DT01CSU5FRF9QT1JUUyhpbmV0LT5kcG9ydCwgbHBvcnQpOworCWNvbnN0IF9fcG9ydHBhaXIgcG9ydHMgPSBJTkVUX0NPTUJJTkVEX1BPUlRTKGluZXQtPmRwb3J0LCBscG9ydCk7CiAJY29uc3QgdW5zaWduZWQgaW50IGhhc2ggPSBpbmV0Nl9laGFzaGZuKGRhZGRyLCBpbmV0LT5udW0sIHNhZGRyLAogCQkJCQkJaW5ldC0+ZHBvcnQpOwogCXN0cnVjdCBpbmV0X2VoYXNoX2J1Y2tldCAqaGVhZCA9IGluZXRfZWhhc2hfYnVja2V0KGhpbmZvLCBoYXNoKTsKQEAgLTE4OCw3ICsxODgsNyBAQAogCiAJCXR3ID0gaW5ldF90d3NrKHNrMik7CiAKLQkJaWYoKigoX191MzIgKikmKHR3LT50d19kcG9ydCkpID09IHBvcnRzCQkgJiYKKwkJaWYoKigoX19wb3J0cGFpciAqKSYodHctPnR3X2Rwb3J0KSkgPT0gcG9ydHMJCSAmJgogCQkgICBzazItPnNrX2ZhbWlseQkgICAgICAgPT0gUEZfSU5FVDYJICYmCiAJCSAgIGlwdjZfYWRkcl9lcXVhbCgmdHc2LT50d192Nl9kYWRkciwgc2FkZHIpCSAmJgogCQkgICBpcHY2X2FkZHJfZXF1YWwoJnR3Ni0+dHdfdjZfcmN2X3NhZGRyLCBkYWRkcikgJiYKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwY29tcDYuYyBiL25ldC9pcHY2L2lwY29tcDYuYwppbmRleCBhZDljNmU4Li5hMjg2MGUzIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcGNvbXA2LmMKKysrIGIvbmV0L2lwdjYvaXBjb21wNi5jCkBAIC0xNzgsNyArMTc4LDcgQEAKIHN0YXRpYyB2b2lkIGlwY29tcDZfZXJyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBpbmV0Nl9za2JfcGFybSAqb3B0LAogCQkgICAgICAgICAgICAgICAgaW50IHR5cGUsIGludCBjb2RlLCBpbnQgb2Zmc2V0LCBfX3UzMiBpbmZvKQogewotCXUzMiBzcGk7CisJX19iZTMyIHNwaTsKIAlzdHJ1Y3QgaXB2NmhkciAqaXBoID0gKHN0cnVjdCBpcHY2aGRyKilza2ItPmRhdGE7CiAJc3RydWN0IGlwdjZfY29tcF9oZHIgKmlwY29tcGggPSAoc3RydWN0IGlwdjZfY29tcF9oZHIqKShza2ItPmRhdGErb2Zmc2V0KTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTIzNCw3ICsyMzQsNyBAQAogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp0ID0gTlVMTDsKLQl1MzIgc3BpOworCV9fYmUzMiBzcGk7CiAKIAlzcGkgPSB4ZnJtNl90dW5uZWxfc3BpX2xvb2t1cCgoeGZybV9hZGRyZXNzX3QgKikmeC0+cHJvcHMuc2FkZHIpOwogCWlmIChzcGkpCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMgYi9uZXQvaXB2Ni9pcHY2X3NvY2tnbHVlLmMKaW5kZXggNGYzYmI3Zi4uZGU2YjkxOSAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvaXB2Nl9zb2NrZ2x1ZS5jCisrKyBiL25ldC9pcHY2L2lwdjZfc29ja2dsdWUuYwpAQCAtMTIzLDYgKzEyMyw5IEBACiAJc3RydWN0IGlwdjZoZHIgKmlwdjZoOwogCXN0cnVjdCBpbmV0Nl9wcm90b2NvbCAqb3BzOwogCisJaWYgKCEoZmVhdHVyZXMgJiBORVRJRl9GX0hXX0NTVU0pKQorCQlmZWF0dXJlcyAmPSB+TkVUSUZfRl9TRzsKKwogCWlmICh1bmxpa2VseShza2Jfc2hpbmZvKHNrYiktPmdzb190eXBlICYKIAkJICAgICB+KFNLQl9HU09fVURQIHwKIAkJICAgICAgIFNLQl9HU09fRE9ER1kgfApkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvdGNwX2lwdjYuYyBiL25ldC9pcHY2L3RjcF9pcHY2LmMKaW5kZXggMjU0NmZjOS4uM2I2NTc1NCAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvdGNwX2lwdjYuYworKysgYi9uZXQvaXB2Ni90Y3BfaXB2Ni5jCkBAIC0xMjM3LDcgKzEyMzcsNyBAQAogCiAJc2tiLT5kZXYgPSBOVUxMOwogCi0JYmhfbG9ja19zb2NrKHNrKTsKKwliaF9sb2NrX3NvY2tfbmVzdGVkKHNrKTsKIAlyZXQgPSAwOwogCWlmICghc29ja19vd25lZF9ieV91c2VyKHNrKSkgewogI2lmZGVmIENPTkZJR19ORVRfRE1BCmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jIGIvbmV0L2lwdjYveGZybTZfaW5wdXQuYwppbmRleCBhNDBhMDU3Li41YzhiN2E1IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9pbnB1dC5jCisrKyBiL25ldC9pcHY2L3hmcm02X2lucHV0LmMKQEAgLTE2LDEwICsxNiwxMCBAQAogI2luY2x1ZGUgPG5ldC9pcHY2Lmg+CiAjaW5jbHVkZSA8bmV0L3hmcm0uaD4KIAotaW50IHhmcm02X3Jjdl9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHNwaSkKK2ludCB4ZnJtNl9yY3Zfc3BpKHN0cnVjdCBza19idWZmICpza2IsIF9fYmUzMiBzcGkpCiB7CiAJaW50IGVycjsKLQl1MzIgc2VxOworCV9fYmUzMiBzZXE7CiAJc3RydWN0IHhmcm1fc3RhdGUgKnhmcm1fdmVjW1hGUk1fTUFYX0RFUFRIXTsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKIAlpbnQgeGZybV9uciA9IDA7CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jIGIvbmV0L2lwdjYveGZybTZfc3RhdGUuYwppbmRleCA3MTFiZmFmLi45ZGRhYTlkIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni94ZnJtNl9zdGF0ZS5jCisrKyBiL25ldC9pcHY2L3hmcm02X3N0YXRlLmMKQEAgLTI5LDkgKzI5LDkgQEAKIAlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopJngtPnNlbC5kYWRkciwgJmZsLT5mbDZfZHN0KTsKIAlpcHY2X2FkZHJfY29weSgoc3RydWN0IGluNl9hZGRyICopJngtPnNlbC5zYWRkciwgJmZsLT5mbDZfc3JjKTsKIAl4LT5zZWwuZHBvcnQgPSB4ZnJtX2Zsb3dpX2Rwb3J0KGZsKTsKLQl4LT5zZWwuZHBvcnRfbWFzayA9IH4wOworCXgtPnNlbC5kcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTsKIAl4LT5zZWwuc3BvcnQgPSB4ZnJtX2Zsb3dpX3Nwb3J0KGZsKTsKLQl4LT5zZWwuc3BvcnRfbWFzayA9IH4wOworCXgtPnNlbC5zcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTsKIAl4LT5zZWwucHJlZml4bGVuX2QgPSAxMjg7CiAJeC0+c2VsLnByZWZpeGxlbl9zID0gMTI4OwogCXgtPnNlbC5wcm90byA9IGZsLT5wcm90bzsKZGlmZiAtLWdpdCBhL25ldC9pcHY2L3hmcm02X3R1bm5lbC5jIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKaW5kZXggNTk2ODVlZS4uN2FmMjI3YiAxMDA2NDQKLS0tIGEvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKKysrIGIvbmV0L2lwdjYveGZybTZfdHVubmVsLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogc3RhdGljIGludCB4ZnJtNl90dW5uZWxfcmN2KHN0cnVjdCBza19idWZmICpza2IpCiB7CiAJc3RydWN0IGlwdjZoZHIgKmlwaCA9IHNrYi0+bmguaXB2Nmg7Ci0JdTMyIHNwaTsKKwlfX2JlMzIgc3BpOwogCiAJc3BpID0geGZybTZfdHVubmVsX3NwaV9sb29rdXAoKHhmcm1fYWRkcmVzc190ICopJmlwaC0+c2FkZHIpOwogCXJldHVybiB4ZnJtNl9yY3Zfc3BpKHNrYiwgc3BpKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2FmX2lyZGEuYyBiL25ldC9pcmRhL2FmX2lyZGEuYwppbmRleCAxNzY5OWVlLi43ZTFhZWE4IDEwMDY0NAotLS0gYS9uZXQvaXJkYS9hZl9pcmRhLmMKKysrIGIvbmV0L2lyZGEvYWZfaXJkYS5jCkBAIC0xMzIsMTMgKzEzMiwxNCBAQAogCiAJLyogUHJldmVudCByYWNlIGNvbmRpdGlvbnMgd2l0aCBpcmRhX3JlbGVhc2UoKSBhbmQgaXJkYV9zaHV0ZG93bigpICovCiAJaWYgKCFzb2NrX2ZsYWcoc2ssIFNPQ0tfREVBRCkgJiYgc2stPnNrX3N0YXRlICE9IFRDUF9DTE9TRSkgeworCQlsb2NrX3NvY2soc2spOwogCQlzay0+c2tfc3RhdGUgICAgID0gVENQX0NMT1NFOwogCQlzay0+c2tfZXJyICAgICAgID0gRUNPTk5SRVNFVDsKIAkJc2stPnNrX3NodXRkb3duIHw9IFNFTkRfU0hVVERPV047CiAKIAkJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7Ci0JCS8qIFVoLW9oLi4uIFNob3VsZCB1c2Ugc29ja19vcnBoYW4gPyAqLwotICAgICAgICAgICAgICAgIHNvY2tfc2V0X2ZsYWcoc2ssIFNPQ0tfREVBRCk7CisgICAgICAgICAgICAgICAgc29ja19vcnBoYW4oc2spOworCQlyZWxlYXNlX3NvY2soc2spOwogCiAJCS8qIENsb3NlIG91ciBUU0FQLgogCQkgKiBJZiB3ZSBsZWF2ZSBpdCBvcGVuLCBJckxNUCBwdXQgaXQgYmFjayBpbnRvIHRoZSBsaXN0IG9mCkBAIC0zMDgsNyArMzA5LDggQEAKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAKLQlza2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCXNrYiA9IGFsbG9jX3NrYihUVFBfTUFYX0hFQURFUiArIFRUUF9TQVJfSEVBREVSLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKHNrYiA9PSBOVUxMKSB7CiAJCUlSREFfREVCVUcoMCwgIiVzKCkgVW5hYmxlIHRvIGFsbG9jYXRlIHNrX2J1ZmYhXG4iLAogCQkJICAgX19GVU5DVElPTl9fKTsKQEAgLTEyMTIsNiArMTIxNCw3IEBACiAgICAgICAgIGlmIChzayA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAorCWxvY2tfc29jayhzayk7CiAJc2stPnNrX3N0YXRlICAgICAgID0gVENQX0NMT1NFOwogCXNrLT5za19zaHV0ZG93biAgIHw9IFNFTkRfU0hVVERPV047CiAJc2stPnNrX3N0YXRlX2NoYW5nZShzayk7CkBAIC0xMjIxLDYgKzEyMjQsNyBAQAogCiAJc29ja19vcnBoYW4oc2spOwogCXNvY2stPnNrICAgPSBOVUxMOworCXJlbGVhc2Vfc29jayhzayk7CiAKIAkvKiBQdXJnZSBxdWV1ZXMgKHNlZSBzb2NrX2luaXRfZGF0YSgpKSAqLwogCXNrYl9xdWV1ZV9wdXJnZSgmc2stPnNrX3JlY2VpdmVfcXVldWUpOwpAQCAtMTM1Myw2ICsxMzU3LDcgQEAKIAlJUkRBX0RFQlVHKDQsICIlcygpXG4iLCBfX0ZVTkNUSU9OX18pOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm4gLTE7KTsKKwlJUkRBX0FTU0VSVCghc29ja19lcnJvcihzayksIHJldHVybiAtMTspOwogCiAJc2tiID0gc2tiX3JlY3ZfZGF0YWdyYW0oc2ssIGZsYWdzICYgfk1TR19ET05UV0FJVCwKIAkJCQlmbGFncyAmIE1TR19ET05UV0FJVCwgJmVycik7CkBAIC0xNDA1LDYgKzE0MTAsNyBAQAogCUlSREFfREVCVUcoMywgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyk7CiAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybiAtMTspOworCUlSREFfQVNTRVJUKCFzb2NrX2Vycm9yKHNrKSwgcmV0dXJuIC0xOyk7CiAKIAlpZiAoc29jay0+ZmxhZ3MgJiBfX1NPX0FDQ0VQVENPTikKIAkJcmV0dXJuKC1FSU5WQUwpOwpkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYyBiL25ldC9pcmRhL2lyY29tbS9pcmNvbW1fbG1wLmMKaW5kZXggOTU5ODc0Yi4uYzhlMGQ4OSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJjb21tL2lyY29tbV9sbXAuYworKysgYi9uZXQvaXJkYS9pcmNvbW0vaXJjb21tX2xtcC5jCkBAIC04MSw3ICs4MSw3IEBACiAJCiAJLyogQW55IHVzZXJkYXRhIHN1cHBsaWVkPyAqLwogCWlmICh1c2VyZGF0YSA9PSBOVUxMKSB7Ci0JCXR4X3NrYiA9IGFsbG9jX3NrYig2NCwgR0ZQX0FUT01JQyk7CisJCXR4X3NrYiA9IGFsbG9jX3NrYihMTVBfTUFYX0hFQURFUiwgR0ZQX0FUT01JQyk7CiAJCWlmICghdHhfc2tiKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKQEAgLTExNSw3ICsxMTUsNyBAQAogCUlSREFfREVCVUcoMCwgIiVzKClcbiIsIF9fRlVOQ1RJT05fXyApOwogCiAgICAgICAgIGlmICghdXNlcmRhdGEpIHsKLQkJdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwkJdHhfc2tiID0gYWxsb2Nfc2tiKExNUF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0eF9za2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcC5jIGIvbmV0L2lyZGEvaXJpYXAuYwppbmRleCA2MTEyOGFhLi40MTVjZjRlIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcC5jCisrKyBiL25ldC9pcmRhL2lyaWFwLmMKQEAgLTM0NSwxMCArMzQ1LDExIEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJQVNfTUFHSUMsIHJldHVybjspOwogCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2IoTE1QX01BWF9IRUFERVIsIEdGUF9BVE9NSUMpOwogCWlmICh0eF9za2IgPT0gTlVMTCkgewotCQlJUkRBX0RFQlVHKDAsICIlcygpLCBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiBsZW5ndGggJWRcbiIsIAotCQkJX19GVU5DVElPTl9fLCA2NCk7CisJCUlSREFfREVCVUcoMCwKKwkJCSAgICIlcygpLCBDb3VsZCBub3QgYWxsb2NhdGUgYW4gc2tfYnVmZiBvZiBsZW5ndGggJWRcbiIsCisJCQkgICBfX0ZVTkNUSU9OX18sIExNUF9NQVhfSEVBREVSKTsKIAkJcmV0dXJuOwogCX0KIApAQCAtNzAxLDcgKzcwMiw3IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJQVNfTUFHSUMsIHJldHVybjspOwogCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2IoTE1QX01BWF9IRUFERVIgKyAxLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXR4X3NrYikKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmlhcF9ldmVudC5jIGIvbmV0L2lyZGEvaXJpYXBfZXZlbnQuYwppbmRleCBkYTE3Mzk1Li45OWIxOGRjIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmlhcF9ldmVudC5jCisrKyBiL25ldC9pcmRhL2lyaWFwX2V2ZW50LmMKQEAgLTM2NSw3ICszNjUsNyBAQAogCiAJc3dpdGNoIChldmVudCkgewogCWNhc2UgSUFQX0xNX0NPTk5FQ1RfSU5ESUNBVElPTjoKLQkJdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwkJdHhfc2tiID0gYWxsb2Nfc2tiKExNUF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAkJaWYgKHR4X3NrYiA9PSBOVUxMKSB7CiAJCQlJUkRBX1dBUk5JTkcoIiVzOiB1bmFibGUgdG8gbWFsbG9jIVxuIiwgX19GVU5DVElPTl9fKTsKIAkJCXJldHVybjsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFuL2lybGFuX2NvbW1vbi5jIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKaW5kZXggN2RkMGEyZi4uOWI5NjJmMiAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKKysrIGIvbmV0L2lyZGEvaXJsYW4vaXJsYW5fY29tbW9uLmMKQEAgLTYzNiw3ICs2MzYsOCBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCi0Jc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIsCisJCQlHRlBfQVRPTUlDKTsKIAlpZiAoIXNrYikKIAkJcmV0dXJuOwogCkBAIC02NjgsNyArNjY5LDEwIEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAJCi0Jc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIk1FRElBIiwgIjgwMi4zIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkFDQ0VTU19UWVBFIiwgIkRJUkVDVCIpLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybjsKIApAQCAtNzA0LDcgKzcwOCw5IEBACiAJaWYgKHNlbGYtPmNsaWVudC50c2FwX2N0cmwgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0Jc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKworCQkJSVJMQU5fQllURV9QQVJBTUVURVJfTEVOKCJEQVRBX0NIQU4iKSwKKwkJCUdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTcxNSw3ICs3MjEsNyBAQAogCQogCS8qIEJ1aWxkIGZyYW1lICovCiAgCWZyYW1lWzBdID0gQ01EX0NMT1NFX0RBVEFfQ0hBTjsKLQlmcmFtZVsxXSA9IDB4MDE7IC8qIFR3byBwYXJhbWV0ZXJzICovCisJZnJhbWVbMV0gPSAweDAxOyAvKiBPbmUgcGFyYW1ldGVyICovCiAKIAlpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShza2IsICJEQVRBX0NIQU4iLCBzZWxmLT5kdHNhcF9zZWxfZGF0YSk7CiAKQEAgLTczOSw3ICs3NDUsMTEgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsJCiAJCi0Jc2tiID0gYWxsb2Nfc2tiKDEyOCwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKElSTEFOX01BWF9IRUFERVIgKyBJUkxBTl9DTURfSEVBREVSICsKKwkJCUlSTEFOX0JZVEVfUEFSQU1FVEVSX0xFTigiREFUQV9DSEFOIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9NT0RFIiwgIkZJTFRFUiIpLAorCQkJR0ZQX0FUT01JQyk7CiAJaWYgKCFza2IpCiAJCXJldHVybjsKIApAQCAtNzc3LDcgKzc4NywxMiBAQAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gSVJMQU5fTUFHSUMsIHJldHVybjspOwogCQotIAlza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTsKKyAJc2tiID0gYWxsb2Nfc2tiKElSTEFOX01BWF9IRUFERVIgKyBJUkxBTl9DTURfSEVBREVSICsKKwkJCUlSTEFOX0JZVEVfUEFSQU1FVEVSX0xFTigiREFUQV9DSEFOIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9UWVBFIiwgIkJST0FEQ0FTVCIpICsKKwkJCS8qIFdlIG1heSB3YXN0ZSBvbmUgYnl0ZSBoZXJlLi4uKi8KKwkJCUlSTEFOX1NUUklOR19QQVJBTUVURVJfTEVOKCJGSUxURVJfTU9ERSIsICJGSUxURVIiKSwKKwkJCUdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTgxNiw3ICs4MzEsMTIgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKIAotIAlza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKworCQkJSVJMQU5fQllURV9QQVJBTUVURVJfTEVOKCJEQVRBX0NIQU4iKSArCisJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiRklMVEVSX1RZUEUiLCAiTVVMVElDQVNUIikgKworCQkJLyogV2UgbWF5IHdhc3RlIG9uZSBieXRlIGhlcmUuLi4qLworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9NT0RFIiwgIk5PTkUiKSwKKwkJCUdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAJCkBAIC04NTYsNyArODc2LDEyIEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAJCi0Jc2tiID0gYWxsb2Nfc2tiKDEyOCwgR0ZQX0FUT01JQyk7CisJc2tiID0gYWxsb2Nfc2tiKElSTEFOX01BWF9IRUFERVIgKyBJUkxBTl9DTURfSEVBREVSICsKKwkJCUlSTEFOX0JZVEVfUEFSQU1FVEVSX0xFTigiREFUQV9DSEFOIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9PUEVSQVRJT04iLAorCQkJCQkJICAgIkRZTkFNSUMiKSwKKwkJCUdGUF9BVE9NSUMpOwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTg5MSw3ICs5MTYsMTAgQEAKIAlJUkRBX0FTU0VSVChzZWxmICE9IE5VTEwsIHJldHVybjspOwogCUlSREFfQVNTRVJUKHNlbGYtPm1hZ2ljID09IElSTEFOX01BR0lDLCByZXR1cm47KTsKIAkKLQlza2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCXNrYiA9IGFsbG9jX3NrYihJUkxBTl9NQVhfSEVBREVSICsgSVJMQU5fQ01EX0hFQURFUiArCisJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiTUVESUEiLCAiODAyLjMiKSwKKwkJCUdGUF9BVE9NSUMpOworCiAJaWYgKCFza2IpCiAJCXJldHVybjsKIApkaWZmIC0tZ2l0IGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYyBiL25ldC9pcmRhL2lybGFuL2lybGFuX3Byb3ZpZGVyLmMKaW5kZXggOWMwZGY4Ni4uNThlZmRlOSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJsYW4vaXJsYW5fcHJvdmlkZXIuYworKysgYi9uZXQvaXJkYS9pcmxhbi9pcmxhbl9wcm92aWRlci5jCkBAIC0yOTYsNyArMjk2LDE0IEBACiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBJUkxBTl9NQUdJQywgcmV0dXJuOyk7CiAKLQlza2IgPSBhbGxvY19za2IoMTI4LCBHRlBfQVRPTUlDKTsKKwlza2IgPSBhbGxvY19za2IoSVJMQU5fTUFYX0hFQURFUiArIElSTEFOX0NNRF9IRUFERVIgKworCQkJLyogQmlnZ2VyIHBhcmFtIGxlbmd0aCBjb21lcyBmcm9tIENNRF9HRVRfTUVESUFfQ0hBUiAqLworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9UWVBFIiwgIkRJUkVDVEVEIikgKworCQkJSVJMQU5fU1RSSU5HX1BBUkFNRVRFUl9MRU4oIkZJTFRFUl9UWVBFIiwgIkJPUkFEQ0FTVCIpICsKKwkJCUlSTEFOX1NUUklOR19QQVJBTUVURVJfTEVOKCJGSUxURVJfVFlQRSIsICJNVUxUSUNBU1QiKSArCisJCQlJUkxBTl9TVFJJTkdfUEFSQU1FVEVSX0xFTigiQUNDRVNTX1RZUEUiLCAiSE9TVEVEIiksCisJCQlHRlBfQVRPTUlDKTsKKwogCWlmICghc2tiKQogCQlyZXR1cm47CiAKQEAgLTM1NCw4ICszNjEsNyBAQAogCQl9IGVsc2UKIAkJCXNrYi0+ZGF0YVsxXSA9IDB4MDI7IC8qIDIgcGFyYW1ldGVycyAqLwogCQlpcmxhbl9pbnNlcnRfYnl0ZV9wYXJhbShza2IsICJEQVRBX0NIQU4iLCBzZWxmLT5zdHNhcF9zZWxfZGF0YSk7Ci0JCWlybGFuX2luc2VydF9hcnJheV9wYXJhbShza2IsICJSRUNPTk5FQ1RfS0VZIiwgIkxJTlVYIFJVTEVTISIsCi0JCQkJCSAxMik7CisJCWlybGFuX2luc2VydF9zdHJpbmdfcGFyYW0oc2tiLCAiUkVDT05ORUNUX0tFWSIsICJMSU5VWCBSVUxFUyEiKTsKIAkJYnJlYWs7CiAJY2FzZSBDTURfRklMVEVSX09QRVJBVElPTjoKIAkJaXJsYW5fZmlsdGVyX3JlcXVlc3Qoc2VsZiwgc2tiKTsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMgYi9uZXQvaXJkYS9pcmxhcF9mcmFtZS5jCmluZGV4IGNjYjk4M2IuLmRiYTM0OWMgMTAwNjQ0Ci0tLSBhL25ldC9pcmRhL2lybGFwX2ZyYW1lLmMKKysrIGIvbmV0L2lyZGEvaXJsYXBfZnJhbWUuYwpAQCAtMTE3LDcgKzExNyw5IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAogCS8qIEFsbG9jYXRlIGZyYW1lICovCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBzbnJtX2ZyYW1lKSArCisJCQkgICBJUkxBUF9ORUdPQ0lBVElPTl9QQVJBTVNfTEVOLAorCQkJICAgR0ZQX0FUT01JQyk7CiAJaWYgKCF0eF9za2IpCiAJCXJldHVybjsKIApAQCAtMTM2LDcgKzEzOCw3IEBACiAJICogIElmIHdlIGFyZSBlc3RhYmxpc2hpbmcgYSBjb25uZWN0aW9uIHRoZW4gaW5zZXJ0IFFvUyBwYXJhbWVydGVycwogCSAqLwogCWlmIChxb3MpIHsKLQkJc2tiX3B1dCh0eF9za2IsIDkpOyAvKiAyMSBsZWZ0ICovCisJCXNrYl9wdXQodHhfc2tiLCA5KTsgLyogMjUgbGVmdCAqLwogCQlmcmFtZS0+c2FkZHIgPSBjcHVfdG9fbGUzMihzZWxmLT5zYWRkcik7CiAJCWZyYW1lLT5kYWRkciA9IGNwdV90b19sZTMyKHNlbGYtPmRhZGRyKTsKIApAQCAtMjEwLDcgKzIxMiw5IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAogCS8qIEFsbG9jYXRlIGZyYW1lICovCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDY0LCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCB1YV9mcmFtZSkgKworCQkJICAgSVJMQVBfTkVHT0NJQVRJT05fUEFSQU1TX0xFTiwKKwkJCSAgIEdGUF9BVE9NSUMpOwogCWlmICghdHhfc2tiKQogCQlyZXR1cm47CiAKQEAgLTI0NSwyMyArMjQ5LDIzIEBACiB2b2lkIGlybGFwX3NlbmRfZG1fZnJhbWUoIHN0cnVjdCBpcmxhcF9jYiAqc2VsZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiID0gTlVMTDsKLQlfX3U4ICpmcmFtZTsKKwlzdHJ1Y3QgZG1fZnJhbWUgKmZyYW1lOwogCiAJSVJEQV9BU1NFUlQoc2VsZiAhPSBOVUxMLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChzZWxmLT5tYWdpYyA9PSBMQVBfTUFHSUMsIHJldHVybjspOwogCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDMyLCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBkbV9mcmFtZSksIEdGUF9BVE9NSUMpOwogCWlmICghdHhfc2tiKQogCQlyZXR1cm47CiAKLQlmcmFtZSA9IHNrYl9wdXQodHhfc2tiLCAyKTsKKwlmcmFtZSA9IChzdHJ1Y3QgZG1fZnJhbWUgKilza2JfcHV0KHR4X3NrYiwgMik7CiAKIAlpZiAoc2VsZi0+c3RhdGUgPT0gTEFQX05ETSkKLQkJZnJhbWVbMF0gPSBDQlJPQURDQVNUOworCQlmcmFtZS0+Y2FkZHIgPSBDQlJPQURDQVNUOwogCWVsc2UKLQkJZnJhbWVbMF0gPSBzZWxmLT5jYWRkcjsKKwkJZnJhbWUtPmNhZGRyID0gc2VsZi0+Y2FkZHI7CiAKLQlmcmFtZVsxXSA9IERNX1JTUCB8IFBGX0JJVDsKKwlmcmFtZS0+Y29udHJvbCA9IERNX1JTUCB8IFBGX0JJVDsKIAogCWlybGFwX3F1ZXVlX3htaXQoc2VsZiwgdHhfc2tiKTsKIH0KQEAgLTI3NSwyMSArMjc5LDIxIEBACiB2b2lkIGlybGFwX3NlbmRfZGlzY19mcmFtZShzdHJ1Y3QgaXJsYXBfY2IgKnNlbGYpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYiA9IE5VTEw7Ci0JX191OCAqZnJhbWU7CisJc3RydWN0IGRpc2NfZnJhbWUgKmZyYW1lOwogCiAJSVJEQV9ERUJVRygzLCAiJXMoKVxuIiwgX19GVU5DVElPTl9fKTsKIAogCUlSREFfQVNTRVJUKHNlbGYgIT0gTlVMTCwgcmV0dXJuOyk7CiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAotCXR4X3NrYiA9IGFsbG9jX3NrYigxNiwgR0ZQX0FUT01JQyk7CisJdHhfc2tiID0gYWxsb2Nfc2tiKHNpemVvZihzdHJ1Y3QgZGlzY19mcmFtZSksIEdGUF9BVE9NSUMpOwogCWlmICghdHhfc2tiKQogCQlyZXR1cm47CiAKLQlmcmFtZSA9IHNrYl9wdXQodHhfc2tiLCAyKTsKKwlmcmFtZSA9IChzdHJ1Y3QgZGlzY19mcmFtZSAqKXNrYl9wdXQodHhfc2tiLCAyKTsKIAotCWZyYW1lWzBdID0gc2VsZi0+Y2FkZHIgfCBDTURfRlJBTUU7Ci0JZnJhbWVbMV0gPSBESVNDX0NNRCB8IFBGX0JJVDsKKwlmcmFtZS0+Y2FkZHIgPSBzZWxmLT5jYWRkciB8IENNRF9GUkFNRTsKKwlmcmFtZS0+Y29udHJvbCA9IERJU0NfQ01EIHwgUEZfQklUOwogCiAJaXJsYXBfcXVldWVfeG1pdChzZWxmLCB0eF9za2IpOwogfQpAQCAtMzE1LDcgKzMxOSw4IEBACiAJSVJEQV9BU1NFUlQoc2VsZi0+bWFnaWMgPT0gTEFQX01BR0lDLCByZXR1cm47KTsKIAlJUkRBX0FTU0VSVChkaXNjb3ZlcnkgIT0gTlVMTCwgcmV0dXJuOyk7CiAKLQl0eF9za2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCXR4X3NrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IHhpZF9mcmFtZSkgKyBJUkxBUF9ESVNDT1ZFUllfSU5GT19MRU4sCisJCQkgICBHRlBfQVRPTUlDKTsKIAlpZiAoIXR4X3NrYikKIAkJcmV0dXJuOwogCkBAIC01NzMsMTggKzU3OCwxOCBAQAogdm9pZCBpcmxhcF9zZW5kX3JyX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZiwgaW50IGNvbW1hbmQpCiB7CiAJc3RydWN0IHNrX2J1ZmYgKnR4X3NrYjsKLQlfX3U4ICpmcmFtZTsKKwlzdHJ1Y3QgcnJfZnJhbWUgKmZyYW1lOwogCi0JdHhfc2tiID0gYWxsb2Nfc2tiKDE2LCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2Ioc2l6ZW9mKHN0cnVjdCBycl9mcmFtZSksIEdGUF9BVE9NSUMpOwogCWlmICghdHhfc2tiKQogCQlyZXR1cm47CiAKLQlmcmFtZSA9IHNrYl9wdXQodHhfc2tiLCAyKTsKKwlmcmFtZSA9IChzdHJ1Y3QgcnJfZnJhbWUgKilza2JfcHV0KHR4X3NrYiwgMik7CiAKLQlmcmFtZVswXSA9IHNlbGYtPmNhZGRyOwotCWZyYW1lWzBdIHw9IChjb21tYW5kKSA/IENNRF9GUkFNRSA6IDA7CisJZnJhbWUtPmNhZGRyID0gc2VsZi0+Y2FkZHI7CisJZnJhbWUtPmNhZGRyIHw9IChjb21tYW5kKSA/IENNRF9GUkFNRSA6IDA7CiAKLQlmcmFtZVsxXSA9IFJSIHwgUEZfQklUIHwgKHNlbGYtPnZyIDw8IDUpOworCWZyYW1lLT5jb250cm9sID0gUlIgfCBQRl9CSVQgfCAoc2VsZi0+dnIgPDwgNSk7CiAKIAlpcmxhcF9xdWV1ZV94bWl0KHNlbGYsIHR4X3NrYik7CiB9CkBAIC01OTgsMTYgKzYwMywxNiBAQAogdm9pZCBpcmxhcF9zZW5kX3JkX2ZyYW1lKHN0cnVjdCBpcmxhcF9jYiAqc2VsZikKIHsKIAlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwotCV9fdTggKmZyYW1lOworCXN0cnVjdCByZF9mcmFtZSAqZnJhbWU7CiAKLQl0eF9za2IgPSBhbGxvY19za2IoMTYsIEdGUF9BVE9NSUMpOworCXR4X3NrYiA9IGFsbG9jX3NrYihzaXplb2Yoc3RydWN0IHJkX2ZyYW1lKSwgR0ZQX0FUT01JQyk7CiAJaWYgKCF0eF9za2IpCiAJCXJldHVybjsKIAotCWZyYW1lID0gc2tiX3B1dCh0eF9za2IsIDIpOworCWZyYW1lID0gKHN0cnVjdCByZF9mcmFtZSAqKXNrYl9wdXQodHhfc2tiLCAyKTsKIAotCWZyYW1lWzBdID0gc2VsZi0+Y2FkZHI7Ci0JZnJhbWVbMV0gPSBSRF9SU1AgfCBQRl9CSVQ7CisJZnJhbWUtPmNhZGRyID0gc2VsZi0+Y2FkZHI7CisJZnJhbWUtPmNhZGRyID0gUkRfUlNQIHwgUEZfQklUOwogCiAJaXJsYXBfcXVldWVfeG1pdChzZWxmLCB0eF9za2IpOwogfQpAQCAtMTIxNCw3ICsxMjE5LDcgQEAKIAlzdHJ1Y3QgdGVzdF9mcmFtZSAqZnJhbWU7CiAJX191OCAqaW5mbzsKIAotCXR4X3NrYiA9IGFsbG9jX3NrYihjbWQtPmxlbitzaXplb2Yoc3RydWN0IHRlc3RfZnJhbWUpLCBHRlBfQVRPTUlDKTsKKwl0eF9za2IgPSBhbGxvY19za2IoY21kLT5sZW4gKyBzaXplb2Yoc3RydWN0IHRlc3RfZnJhbWUpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXR4X3NrYikKIAkJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcmxtcC5jIGIvbmV0L2lyZGEvaXJsbXAuYwppbmRleCBjNDQwOTEzLi41MDczMjYxIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcmxtcC5jCisrKyBiL25ldC9pcmRhL2lybG1wLmMKQEAgLTM5Miw3ICszOTIsNyBAQAogCiAJLyogQW55IHVzZXJkYXRhPyAqLwogCWlmICh0eF9za2IgPT0gTlVMTCkgewotCQl0eF9za2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCQl0eF9za2IgPSBhbGxvY19za2IoTE1QX01BWF9IRUFERVIsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXR4X3NrYikKIAkJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9uZXQvaXJkYS9pcnR0cC5jIGIvbmV0L2lyZGEvaXJ0dHAuYwppbmRleCA0MmFjZjFjLi4zYzJlNzBiIDEwMDY0NAotLS0gYS9uZXQvaXJkYS9pcnR0cC5jCisrKyBiL25ldC9pcmRhL2lydHRwLmMKQEAgLTgwNCwxMiArODA0LDEyIEBACiAJCSAgIHNlbGYtPnNlbmRfY3JlZGl0LCBzZWxmLT5hdmFpbF9jcmVkaXQsIHNlbGYtPnJlbW90ZV9jcmVkaXQpOwogCiAJLyogR2l2ZSBjcmVkaXQgdG8gcGVlciAqLwotCXR4X3NrYiA9IGFsbG9jX3NrYig2NCwgR0ZQX0FUT01JQyk7CisJdHhfc2tiID0gYWxsb2Nfc2tiKFRUUF9NQVhfSEVBREVSLCBHRlBfQVRPTUlDKTsKIAlpZiAoIXR4X3NrYikKIAkJcmV0dXJuOwogCiAJLyogUmVzZXJ2ZSBzcGFjZSBmb3IgTE1QLCBhbmQgTEFQIGhlYWRlciAqLwotCXNrYl9yZXNlcnZlKHR4X3NrYiwgc2VsZi0+bWF4X2hlYWRlcl9zaXplKTsKKwlza2JfcmVzZXJ2ZSh0eF9za2IsIExNUF9NQVhfSEVBREVSKTsKIAogCS8qCiAJICogIFNpbmNlIHdlIGNhbiB0cmFuc21pdCBhbmQgcmVjZWl2ZSBmcmFtZXMgY29uY3VycmVudGx5LApAQCAtMTA5Myw3ICsxMDkzLDggQEAKIAogCS8qIEFueSB1c2VyZGF0YSBzdXBwbGllZD8gKi8KIAlpZiAodXNlcmRhdGEgPT0gTlVMTCkgewotCQl0eF9za2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCQl0eF9za2IgPSBhbGxvY19za2IoVFRQX01BWF9IRUFERVIgKyBUVFBfU0FSX0hFQURFUiwKKwkJCQkgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0eF9za2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTM0MSw3ICsxMzQyLDggQEAKIAogCS8qIEFueSB1c2VyZGF0YSBzdXBwbGllZD8gKi8KIAlpZiAodXNlcmRhdGEgPT0gTlVMTCkgewotCQl0eF9za2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCQl0eF9za2IgPSBhbGxvY19za2IoVFRQX01BWF9IRUFERVIgKyBUVFBfU0FSX0hFQURFUiwKKwkJCQkgICBHRlBfQVRPTUlDKTsKIAkJaWYgKCF0eF9za2IpCiAJCQlyZXR1cm4gLUVOT01FTTsKIApAQCAtMTU0MCwxNCArMTU0MiwxNCBAQAogCiAJaWYgKCF1c2VyZGF0YSkgewogCQlzdHJ1Y3Qgc2tfYnVmZiAqdHhfc2tiOwotCQl0eF9za2IgPSBhbGxvY19za2IoNjQsIEdGUF9BVE9NSUMpOworCQl0eF9za2IgPSBhbGxvY19za2IoTE1QX01BWF9IRUFERVIsIEdGUF9BVE9NSUMpOwogCQlpZiAoIXR4X3NrYikKIAkJCXJldHVybiAtRU5PTUVNOwogCiAJCS8qCiAJCSAqICBSZXNlcnZlIHNwYWNlIGZvciBNVVggYW5kIExBUCBoZWFkZXIKIAkJICovCi0JCXNrYl9yZXNlcnZlKHR4X3NrYiwgVFRQX01BWF9IRUFERVIpOworCQlza2JfcmVzZXJ2ZSh0eF9za2IsIExNUF9NQVhfSEVBREVSKTsKIAogCQl1c2VyZGF0YSA9IHR4X3NrYjsKIAl9CmRpZmYgLS1naXQgYS9uZXQva2V5L2FmX2tleS5jIGIvbmV0L2tleS9hZl9rZXkuYwppbmRleCA4M2I0NDNkLi5mZjk4ZTcwIDEwMDY0NAotLS0gYS9uZXQva2V5L2FmX2tleS5jCisrKyBiL25ldC9rZXkvYWZfa2V5LmMKQEAgLTIxNDAsNyArMjE0MCw3IEBACiAJeHAtPnNlbGVjdG9yLnByb3RvID0gcGZrZXlfcHJvdG9fdG9feGZybShzYS0+c2FkYl9hZGRyZXNzX3Byb3RvKTsKIAl4cC0+c2VsZWN0b3Iuc3BvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShzYSsxKSktPnNpbl9wb3J0OwogCWlmICh4cC0+c2VsZWN0b3Iuc3BvcnQpCi0JCXhwLT5zZWxlY3Rvci5zcG9ydF9tYXNrID0gfjA7CisJCXhwLT5zZWxlY3Rvci5zcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTsKIAogCXNhID0gZXh0X2hkcnNbU0FEQl9FWFRfQUREUkVTU19EU1QtMV0sIAogCXBma2V5X3NhZGJfYWRkcjJ4ZnJtX2FkZHIoc2EsICZ4cC0+c2VsZWN0b3IuZGFkZHIpOwpAQCAtMjE1Myw3ICsyMTUzLDcgQEAKIAogCXhwLT5zZWxlY3Rvci5kcG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopKHNhKzEpKS0+c2luX3BvcnQ7CiAJaWYgKHhwLT5zZWxlY3Rvci5kcG9ydCkKLQkJeHAtPnNlbGVjdG9yLmRwb3J0X21hc2sgPSB+MDsKKwkJeHAtPnNlbGVjdG9yLmRwb3J0X21hc2sgPSBodG9ucygweGZmZmYpOwogCiAJc2VjX2N0eCA9IChzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKikgZXh0X2hkcnNbU0FEQl9YX0VYVF9TRUNfQ1RYLTFdOwogCWlmIChzZWNfY3R4ICE9IE5VTEwpIHsKQEAgLTIyNDMsNyArMjI0Myw3IEBACiAJc2VsLnByb3RvID0gcGZrZXlfcHJvdG9fdG9feGZybShzYS0+c2FkYl9hZGRyZXNzX3Byb3RvKTsKIAlzZWwuc3BvcnQgPSAoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKShzYSsxKSktPnNpbl9wb3J0OwogCWlmIChzZWwuc3BvcnQpCi0JCXNlbC5zcG9ydF9tYXNrID0gfjA7CisJCXNlbC5zcG9ydF9tYXNrID0gaHRvbnMoMHhmZmZmKTsKIAogCXNhID0gZXh0X2hkcnNbU0FEQl9FWFRfQUREUkVTU19EU1QtMV0sIAogCXBma2V5X3NhZGJfYWRkcjJ4ZnJtX2FkZHIoc2EsICZzZWwuZGFkZHIpOwpAQCAtMjI1MSw3ICsyMjUxLDcgQEAKIAlzZWwucHJvdG8gPSBwZmtleV9wcm90b190b194ZnJtKHNhLT5zYWRiX2FkZHJlc3NfcHJvdG8pOwogCXNlbC5kcG9ydCA9ICgoc3RydWN0IHNvY2thZGRyX2luICopKHNhKzEpKS0+c2luX3BvcnQ7CiAJaWYgKHNlbC5kcG9ydCkKLQkJc2VsLmRwb3J0X21hc2sgPSB+MDsKKwkJc2VsLmRwb3J0X21hc2sgPSBodG9ucygweGZmZmYpOwogCiAJc2VjX2N0eCA9IChzdHJ1Y3Qgc2FkYl94X3NlY19jdHggKikgZXh0X2hkcnNbU0FEQl9YX0VYVF9TRUNfQ1RYLTFdOwogCW1lbXNldCgmdG1wLCAwLCBzaXplb2Yoc3RydWN0IHhmcm1fcG9saWN5KSk7CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfY2lwc29fdjQuYyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCmluZGV4IDQxMjVhNTUuLmE2Y2UxZDYgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9jaXBzb192NC5jCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2tidWZmLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgpAQCAtMTYyLDggKzE2Myw3IEBACiAJaW50IG5sYV9hX3JlbTsKIAlpbnQgbmxhX2JfcmVtOwogCi0JaWYgKCFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9ET0ldIHx8Ci0JICAgICFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9UQUdMU1RdIHx8CisJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9UQUdMU1RdIHx8CiAJICAgICFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9NTFNMVkxMU1RdKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzQ0LDggKzM0NCw3IEBACiAJaW50IHJldF92YWw7CiAJc3RydWN0IGNpcHNvX3Y0X2RvaSAqZG9pX2RlZiA9IE5VTEw7CiAKLQlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0gfHwKLQkgICAgIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX1RBR0xTVF0pCisJaWYgKCFpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9UQUdMU1RdKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWRvaV9kZWYgPSBrbWFsbG9jKHNpemVvZigqZG9pX2RlZiksIEdGUF9LRVJORUwpOwpAQCAtMzgxLDIxICszODAsNDAgQEAKIAogewogCWludCByZXRfdmFsID0gLUVJTlZBTDsKLQl1MzIgbWFwX3R5cGU7CisJdTMyIHR5cGU7CisJdTMyIGRvaTsKKwljb25zdCBjaGFyICp0eXBlX3N0ciA9ICIodW5rbm93bikiOworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKLQlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX01UWVBFXSkKKwlpZiAoIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0gfHwKKwkgICAgIWluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX01UWVBFXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQltYXBfdHlwZSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX01UWVBFXSk7Ci0Jc3dpdGNoIChtYXBfdHlwZSkgeworCWRvaSA9IG5sYV9nZXRfdTMyKGluZm8tPmF0dHJzW05MQkxfQ0lQU09WNF9BX0RPSV0pOworCW5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhza2IsICZhdWRpdF9pbmZvKTsKKworCXR5cGUgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9NVFlQRV0pOworCXN3aXRjaCAodHlwZSkgewogCWNhc2UgQ0lQU09fVjRfTUFQX1NURDoKKwkJdHlwZV9zdHIgPSAic3RkIjsKIAkJcmV0X3ZhbCA9IG5ldGxibF9jaXBzb3Y0X2FkZF9zdGQoaW5mbyk7CiAJCWJyZWFrOwogCWNhc2UgQ0lQU09fVjRfTUFQX1BBU1M6CisJCXR5cGVfc3RyID0gInBhc3MiOwogCQlyZXRfdmFsID0gbmV0bGJsX2NpcHNvdjRfYWRkX3Bhc3MoaW5mbyk7CiAJCWJyZWFrOwogCX0KIAorCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX0NJUFNPVjRfQURELAorCQkJCQkgICAgICAmYXVkaXRfaW5mbyk7CisJYXVkaXRfbG9nX2Zvcm1hdChhdWRpdF9idWYsCisJCQkgIiBjaXBzb19kb2k9JXUgY2lwc29fdHlwZT0lcyByZXM9JXUiLAorCQkJIGRvaSwKKwkJCSB0eXBlX3N0ciwKKwkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7CisJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworCiAJcmV0dXJuIHJldF92YWw7CiB9CiAKQEAgLTY1MywxMiArNjcxLDI3IEBACiBzdGF0aWMgaW50IG5ldGxibF9jaXBzb3Y0X3JlbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCWludCByZXRfdmFsID0gLUVJTlZBTDsKLQl1MzIgZG9pOworCXUzMiBkb2kgPSAwOworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKLQlpZiAoaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfRE9JXSkgewotCQlkb2kgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9ET0ldKTsKLQkJcmV0X3ZhbCA9IGNpcHNvX3Y0X2RvaV9yZW1vdmUoZG9pLCBuZXRsYmxfY2lwc292NF9kb2lfZnJlZSk7Ci0JfQorCWlmICghaW5mby0+YXR0cnNbTkxCTF9DSVBTT1Y0X0FfRE9JXSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlkb2kgPSBubGFfZ2V0X3UzMihpbmZvLT5hdHRyc1tOTEJMX0NJUFNPVjRfQV9ET0ldKTsKKwluZXRsYmxfbmV0bGlua19hdWRpdGluZm8oc2tiLCAmYXVkaXRfaW5mbyk7CisKKwlyZXRfdmFsID0gY2lwc29fdjRfZG9pX3JlbW92ZShkb2ksCisJCQkJICAgICAgJmF1ZGl0X2luZm8sCisJCQkJICAgICAgbmV0bGJsX2NpcHNvdjRfZG9pX2ZyZWUpOworCisJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfQ0lQU09WNF9ERUwsCisJCQkJCSAgICAgICZhdWRpdF9pbmZvKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwKKwkJCSAiIGNpcHNvX2RvaT0ldSByZXM9JXUiLAorCQkJIGRvaSwKKwkJCSByZXRfdmFsID09IDAgPyAxIDogMCk7CisJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOwogCiAJcmV0dXJuIHJldF92YWw7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guYwppbmRleCBmNTZkN2E4Li5hZjQzNzFkIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmMKQEAgLTM1LDEyICszNSwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+CisjaW5jbHVkZSA8bGludXgvYXVkaXQuaD4KICNpbmNsdWRlIDxuZXQvbmV0bGFiZWwuaD4KICNpbmNsdWRlIDxuZXQvY2lwc29faXB2NC5oPgogI2luY2x1ZGUgPGFzbS9idWcuaD4KIAogI2luY2x1ZGUgIm5ldGxhYmVsX21nbXQuaCIKICNpbmNsdWRlICJuZXRsYWJlbF9kb21haW5oYXNoLmgiCisjaW5jbHVkZSAibmV0bGFiZWxfdXNlci5oIgogCiBzdHJ1Y3QgbmV0bGJsX2RvbWhzaF90YmwgewogCXN0cnVjdCBsaXN0X2hlYWQgKnRibDsKQEAgLTE4Niw2ICsxODgsNyBAQAogLyoqCiAgKiBuZXRsYmxfZG9taHNoX2FkZCAtIEFkZHMgYSBlbnRyeSB0byB0aGUgZG9tYWluIGhhc2ggdGFibGUKICAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIGFkZAorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBBZGRzIGEgbmV3IGVudHJ5IHRvIHRoZSBkb21haW4gaGFzaCB0YWJsZSBhbmQgaGFuZGxlcyBhbnkgdXBkYXRlcyB0byB0aGUKQEAgLTE5MywxMCArMTk2LDEzIEBACiAgKiBuZWdhdGl2ZSBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IG5ldGxibF9kb21oc2hfYWRkKHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkpCitpbnQgbmV0bGJsX2RvbWhzaF9hZGQoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwKKwkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKIAlpbnQgcmV0X3ZhbDsKIAl1MzIgYmt0OworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKwljaGFyICphdWRpdF9kb21haW47CiAKIAlzd2l0Y2ggKGVudHJ5LT50eXBlKSB7CiAJY2FzZSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDoKQEAgLTIzNiw2ICsyNDIsMjYgQEAKIAkJc3Bpbl91bmxvY2soJm5ldGxibF9kb21oc2hfZGVmX2xvY2spOwogCX0gZWxzZQogCQlyZXRfdmFsID0gLUVJTlZBTDsKKworCWlmIChlbnRyeS0+ZG9tYWluICE9IE5VTEwpCisJCWF1ZGl0X2RvbWFpbiA9IGVudHJ5LT5kb21haW47CisJZWxzZQorCQlhdWRpdF9kb21haW4gPSAiKGRlZmF1bHQpIjsKKwlhdWRpdF9idWYgPSBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uKEFVRElUX01BQ19NQVBfQURELCBhdWRpdF9pbmZvKTsKKwlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBubGJsX2RvbWFpbj0lcyIsIGF1ZGl0X2RvbWFpbik7CisJc3dpdGNoIChlbnRyeS0+dHlwZSkgeworCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIG5sYmxfcHJvdG9jb2w9dW5sYmwiKTsKKwkJYnJlYWs7CisJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CisJCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAorCQkJCSAiIG5sYmxfcHJvdG9jb2w9Y2lwc292NCBjaXBzb19kb2k9JXUiLAorCQkJCSBlbnRyeS0+dHlwZV9kZWYuY2lwc292NC0+ZG9pKTsKKwkJYnJlYWs7CisJfQorCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHJlcz0ldSIsIHJldF92YWwgPT0gMCA/IDEgOiAwKTsKKwlhdWRpdF9sb2dfZW5kKGF1ZGl0X2J1Zik7CisKIAlyY3VfcmVhZF91bmxvY2soKTsKIAogCWlmIChyZXRfdmFsICE9IDApIHsKQEAgLTI1NCw2ICsyODAsNyBAQAogLyoqCiAgKiBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0IC0gQWRkcyB0aGUgZGVmYXVsdCBlbnRyeSB0byB0aGUgZG9tYWluIGhhc2ggdGFibGUKICAqIEBlbnRyeTogdGhlIGVudHJ5IHRvIGFkZAorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBBZGRzIGEgbmV3IGRlZmF1bHQgZW50cnkgdG8gdGhlIGRvbWFpbiBoYXNoIHRhYmxlIGFuZCBoYW5kbGVzIGFueSB1cGRhdGVzCkBAIC0yNjEsMTQgKzI4OCwxNiBAQAogICogbmVnYXRpdmUgb24gZmFpbHVyZS4KICAqCiAgKi8KLWludCBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkpCitpbnQgbmV0bGJsX2RvbWhzaF9hZGRfZGVmYXVsdChzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAorCQkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKLQlyZXR1cm4gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnkpOworCXJldHVybiBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgYXVkaXRfaW5mbyk7CiB9CiAKIC8qKgogICogbmV0bGJsX2RvbWhzaF9yZW1vdmUgLSBSZW1vdmVzIGFuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiBoYXNoIHRhYmxlCiAgKiBAZG9tYWluOiB0aGUgZG9tYWluIHRvIHJlbW92ZQorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBSZW1vdmVzIGFuIGVudHJ5IGZyb20gdGhlIGRvbWFpbiBoYXNoIHRhYmxlIGFuZCBoYW5kbGVzIGFueSB1cGRhdGVzIHRvIHRoZQpAQCAtMjc2LDEwICszMDUsMTIgQEAKICAqIG5lZ2F0aXZlIG9uIGZhaWx1cmUuCiAgKgogICovCi1pbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmUoY29uc3QgY2hhciAqZG9tYWluKQoraW50IG5ldGxibF9kb21oc2hfcmVtb3ZlKGNvbnN0IGNoYXIgKmRvbWFpbiwgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKIHsKIAlpbnQgcmV0X3ZhbCA9IC1FTk9FTlQ7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKKwlzdHJ1Y3QgYXVkaXRfYnVmZmVyICphdWRpdF9idWY7CisJY2hhciAqYXVkaXRfZG9tYWluOwogCiAJcmN1X3JlYWRfbG9jaygpOwogCWlmIChkb21haW4gIT0gTlVMTCkKQEAgLTMxNiw2ICszNDcsMTggQEAKIAkJCXJldF92YWwgPSAtRU5PRU5UOwogCQlzcGluX3VubG9jaygmbmV0bGJsX2RvbWhzaF9kZWZfbG9jayk7CiAJfQorCisJaWYgKGVudHJ5LT5kb21haW4gIT0gTlVMTCkKKwkJYXVkaXRfZG9tYWluID0gZW50cnktPmRvbWFpbjsKKwllbHNlCisJCWF1ZGl0X2RvbWFpbiA9ICIoZGVmYXVsdCkiOworCWF1ZGl0X2J1ZiA9IG5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oQVVESVRfTUFDX01BUF9ERUwsIGF1ZGl0X2luZm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLAorCQkJICIgbmxibF9kb21haW49JXMgcmVzPSV1IiwKKwkJCSBhdWRpdF9kb21haW4sCisJCQkgcmV0X3ZhbCA9PSAwID8gMSA6IDApOworCWF1ZGl0X2xvZ19lbmQoYXVkaXRfYnVmKTsKKwogCWlmIChyZXRfdmFsID09IDApCiAJCWNhbGxfcmN1KCZlbnRyeS0+cmN1LCBuZXRsYmxfZG9taHNoX2ZyZWVfZW50cnkpOwogCkBAIC0zMjYsNiArMzY5LDcgQEAKIAogLyoqCiAgKiBuZXRsYmxfZG9taHNoX3JlbW92ZV9kZWZhdWx0IC0gUmVtb3ZlcyB0aGUgZGVmYXVsdCBlbnRyeSBmcm9tIHRoZSB0YWJsZQorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCiAgKgogICogRGVzY3JpcHRpb246CiAgKiBSZW1vdmVzL3Jlc2V0cyB0aGUgZGVmYXVsdCBlbnRyeSBmb3IgdGhlIGRvbWFpbiBoYXNoIHRhYmxlIGFuZCBoYW5kbGVzIGFueQpAQCAtMzMzLDkgKzM3Nyw5IEBACiAgKiBzdWNjZXNzLCBub24temVybyBvbiBmYWlsdXJlLgogICoKICAqLwotaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlX2RlZmF1bHQodm9pZCkKK2ludCBuZXRsYmxfZG9taHNoX3JlbW92ZV9kZWZhdWx0KHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCiB7Ci0JcmV0dXJuIG5ldGxibF9kb21oc2hfcmVtb3ZlKE5VTEwpOworCXJldHVybiBuZXRsYmxfZG9taHNoX3JlbW92ZShOVUxMLCBhdWRpdF9pbmZvKTsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX2RvbWFpbmhhc2guaAppbmRleCAwMmFmNzJhLi4zNjg5OTU2IDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfZG9tYWluaGFzaC5oCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9kb21haW5oYXNoLmgKQEAgLTU3LDkgKzU3LDExIEBACiBpbnQgbmV0bGJsX2RvbWhzaF9pbml0KHUzMiBzaXplKTsKIAogLyogTWFuaXB1bGF0ZSB0aGUgZG9tYWluIGhhc2ggdGFibGUgKi8KLWludCBuZXRsYmxfZG9taHNoX2FkZChzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5KTsKLWludCBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkpOwotaW50IG5ldGxibF9kb21oc2hfcmVtb3ZlX2RlZmF1bHQodm9pZCk7CitpbnQgbmV0bGJsX2RvbWhzaF9hZGQoc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeSwKKwkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CitpbnQgbmV0bGJsX2RvbWhzaF9hZGRfZGVmYXVsdChzdHJ1Y3QgbmV0bGJsX2RvbV9tYXAgKmVudHJ5LAorCQkJICAgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbyk7CitpbnQgbmV0bGJsX2RvbWhzaF9yZW1vdmVfZGVmYXVsdChzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKTsKIHN0cnVjdCBuZXRsYmxfZG9tX21hcCAqbmV0bGJsX2RvbWhzaF9nZXRlbnRyeShjb25zdCBjaGFyICpkb21haW4pOwogaW50IG5ldGxibF9kb21oc2hfd2Fsayh1MzIgKnNraXBfYmt0LAogCQkgICAgIHUzMiAqc2tpcF9jaGFpbiwKZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCmluZGV4IDg2MjZjOWYuLjUzYzkwNzlhIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfbWdtdC5jCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF9tZ210LmMKQEAgLTg3LDExICs4NywxNCBAQAogCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkgPSBOVUxMOwogCXNpemVfdCB0bXBfc2l6ZTsKIAl1MzIgdG1wX3ZhbDsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0gfHwKIAkgICAgIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX1BST1RPQ09MXSkKIAkJZ290byBhZGRfZmFpbHVyZTsKIAorCW5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhza2IsICZhdWRpdF9pbmZvKTsKKwogCWVudHJ5ID0ga3phbGxvYyhzaXplb2YoKmVudHJ5KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVudHJ5ID09IE5VTEwpIHsKIAkJcmV0X3ZhbCA9IC1FTk9NRU07CkBAIC0xMDgsNyArMTExLDcgQEAKIAogCXN3aXRjaCAoZW50cnktPnR5cGUpIHsKIAljYXNlIE5FVExCTF9OTFRZUEVfVU5MQUJFTEVEOgotCQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnkpOworCQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGQoZW50cnksICZhdWRpdF9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CiAJCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSkKQEAgLTEyNSw3ICsxMjgsNyBAQAogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlnb3RvIGFkZF9mYWlsdXJlOwogCQl9Ci0JCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSk7CisJCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZChlbnRyeSwgJmF1ZGl0X2luZm8pOwogCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTE1NiwxMiArMTU5LDE1IEBACiBzdGF0aWMgaW50IG5ldGxibF9tZ210X3JlbW92ZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgZ2VubF9pbmZvICppbmZvKQogewogCWNoYXIgKmRvbWFpbjsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CiAKIAlpZiAoIWluZm8tPmF0dHJzW05MQkxfTUdNVF9BX0RPTUFJTl0pCiAJCXJldHVybiAtRUlOVkFMOwogCisJbmV0bGJsX25ldGxpbmtfYXVkaXRpbmZvKHNrYiwgJmF1ZGl0X2luZm8pOworCiAJZG9tYWluID0gbmxhX2RhdGEoaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfRE9NQUlOXSk7Ci0JcmV0dXJuIG5ldGxibF9kb21oc2hfcmVtb3ZlKGRvbWFpbik7CisJcmV0dXJuIG5ldGxibF9kb21oc2hfcmVtb3ZlKGRvbWFpbiwgJmF1ZGl0X2luZm8pOwogfQogCiAvKioKQEAgLTI2NCwxMCArMjcwLDEzIEBACiAJaW50IHJldF92YWwgPSAtRUlOVkFMOwogCXN0cnVjdCBuZXRsYmxfZG9tX21hcCAqZW50cnkgPSBOVUxMOwogCXUzMiB0bXBfdmFsOworCXN0cnVjdCBuZXRsYmxfYXVkaXQgYXVkaXRfaW5mbzsKIAogCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfUFJPVE9DT0xdKQogCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwogCisJbmV0bGJsX25ldGxpbmtfYXVkaXRpbmZvKHNrYiwgJmF1ZGl0X2luZm8pOworCiAJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkgewogCQlyZXRfdmFsID0gLUVOT01FTTsKQEAgLTI3Nyw3ICsyODYsNyBAQAogCiAJc3dpdGNoIChlbnRyeS0+dHlwZSkgewogCWNhc2UgTkVUTEJMX05MVFlQRV9VTkxBQkVMRUQ6Ci0JCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KGVudHJ5KTsKKwkJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkX2RlZmF1bHQoZW50cnksICZhdWRpdF9pbmZvKTsKIAkJYnJlYWs7CiAJY2FzZSBORVRMQkxfTkxUWVBFX0NJUFNPVjQ6CiAJCWlmICghaW5mby0+YXR0cnNbTkxCTF9NR01UX0FfQ1Y0RE9JXSkKQEAgLTI5NCw3ICszMDMsNyBAQAogCQkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCQlnb3RvIGFkZGRlZl9mYWlsdXJlOwogCQl9Ci0JCXJldF92YWwgPSBuZXRsYmxfZG9taHNoX2FkZF9kZWZhdWx0KGVudHJ5KTsKKwkJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkX2RlZmF1bHQoZW50cnksICZhdWRpdF9pbmZvKTsKIAkJcmN1X3JlYWRfdW5sb2NrKCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CkBAIC0zMjIsNyArMzMxLDExIEBACiAgKi8KIHN0YXRpYyBpbnQgbmV0bGJsX21nbXRfcmVtb3ZlZGVmKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBnZW5sX2luZm8gKmluZm8pCiB7Ci0JcmV0dXJuIG5ldGxibF9kb21oc2hfcmVtb3ZlX2RlZmF1bHQoKTsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CisKKwluZXRsYmxfbmV0bGlua19hdWRpdGluZm8oc2tiLCAmYXVkaXRfaW5mbyk7CisKKwlyZXR1cm4gbmV0bGJsX2RvbWhzaF9yZW1vdmVfZGVmYXVsdCgmYXVkaXRfaW5mbyk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VubGFiZWxlZC5jCmluZGV4IDQ0MGY1YzQuLjE4MzNhZDIgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91bmxhYmVsZWQuYworKysgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdW5sYWJlbGVkLmMKQEAgLTY0LDYgKzY0LDM0IEBACiB9OwogCiAvKgorICogSGVscGVyIEZ1bmN0aW9ucworICovCisKKy8qKgorICogbmV0bGJsX3VubGFiZWxfYWNjZXB0ZmxnX3NldCAtIFNldCB0aGUgdW5sYWJlbGVkIGFjY2VwdCBmbGFnCisgKiBAdmFsdWU6IGRlc2lyZWQgdmFsdWUKKyAqIEBhdWRpdF9pbmZvOiBOZXRMYWJlbCBhdWRpdCBpbmZvcm1hdGlvbgorICoKKyAqIERlc2NyaXB0aW9uOgorICogU2V0IHRoZSB2YWx1ZSBvZiB0aGUgdW5sYWJlbGVkIGFjY2VwdCBmbGFnIHRvIEB2YWx1ZS4KKyAqCisgKi8KK3N0YXRpYyB2b2lkIG5ldGxibF91bmxhYmVsX2FjY2VwdGZsZ19zZXQodTggdmFsdWUsCisJCQkJCSBzdHJ1Y3QgbmV0bGJsX2F1ZGl0ICphdWRpdF9pbmZvKQoreworCXN0cnVjdCBhdWRpdF9idWZmZXIgKmF1ZGl0X2J1ZjsKKwl1OCBvbGRfdmFsOworCisJb2xkX3ZhbCA9IGF0b21pY19yZWFkKCZuZXRsYWJlbF91bmxhYmVsX2FjY2VwdF9mbGcpOworCWF0b21pY19zZXQoJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0X2ZsZywgdmFsdWUpOworCisJYXVkaXRfYnVmID0gbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihBVURJVF9NQUNfVU5MQkxfQUxMT1csCisJCQkJCSAgICAgIGF1ZGl0X2luZm8pOworCWF1ZGl0X2xvZ19mb3JtYXQoYXVkaXRfYnVmLCAiIHVubGJsX2FjY2VwdD0ldSBvbGQ9JXUiLCB2YWx1ZSwgb2xkX3ZhbCk7CisJYXVkaXRfbG9nX2VuZChhdWRpdF9idWYpOworfQorCisvKgogICogTmV0TGFiZWwgQ29tbWFuZCBIYW5kbGVycwogICovCiAKQEAgLTc5LDE4ICsxMDcsMTkgQEAKICAqLwogc3RhdGljIGludCBuZXRsYmxfdW5sYWJlbF9hY2NlcHQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IGdlbmxfaW5mbyAqaW5mbykKIHsKLQlpbnQgcmV0X3ZhbCA9IC1FSU5WQUw7CiAJdTggdmFsdWU7CisJc3RydWN0IG5ldGxibF9hdWRpdCBhdWRpdF9pbmZvOwogCiAJaWYgKGluZm8tPmF0dHJzW05MQkxfVU5MQUJFTF9BX0FDUFRGTEddKSB7CiAJCXZhbHVlID0gbmxhX2dldF91OChpbmZvLT5hdHRyc1tOTEJMX1VOTEFCRUxfQV9BQ1BURkxHXSk7CiAJCWlmICh2YWx1ZSA9PSAxIHx8IHZhbHVlID09IDApIHsKLQkJCWF0b21pY19zZXQoJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0X2ZsZywgdmFsdWUpOwotCQkJcmV0X3ZhbCA9IDA7CisJCQluZXRsYmxfbmV0bGlua19hdWRpdGluZm8oc2tiLCAmYXVkaXRfaW5mbyk7CisJCQluZXRsYmxfdW5sYWJlbF9hY2NlcHRmbGdfc2V0KHZhbHVlLCAmYXVkaXRfaW5mbyk7CisJCQlyZXR1cm4gMDsKIAkJfQogCX0KIAotCXJldHVybiByZXRfdmFsOworCXJldHVybiAtRUlOVkFMOwogfQogCiAvKioKQEAgLTIyOSwxNiArMjU4LDIzIEBACiB7CiAJaW50IHJldF92YWw7CiAJc3RydWN0IG5ldGxibF9kb21fbWFwICplbnRyeTsKKwlzdHJ1Y3QgbmV0bGJsX2F1ZGl0IGF1ZGl0X2luZm87CisKKwkvKiBPbmx5IHRoZSBrZXJuZWwgaXMgYWxsb3dlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gYW5kIHRoZSBvbmx5IHRpbWUKKwkgKiBpdCBpcyBjYWxsZWQgaXMgYXQgYm9vdHVwIGJlZm9yZSB0aGUgYXVkaXQgc3Vic3lzdGVtIGlzIHJlcG9ydGluZworCSAqIG1lc3NhZ2VzIHNvIGRvbid0IHdvcnJ5IHRvIG11Y2ggYWJvdXQgdGhlc2UgdmFsdWVzLiAqLworCXNlY3VyaXR5X3Rhc2tfZ2V0c2VjaWQoY3VycmVudCwgJmF1ZGl0X2luZm8uc2VjaWQpOworCWF1ZGl0X2luZm8ubG9naW51aWQgPSAwOwogCiAJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW50cnkgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJZW50cnktPnR5cGUgPSBORVRMQkxfTkxUWVBFX1VOTEFCRUxFRDsKLQlyZXRfdmFsID0gbmV0bGJsX2RvbWhzaF9hZGRfZGVmYXVsdChlbnRyeSk7CisJcmV0X3ZhbCA9IG5ldGxibF9kb21oc2hfYWRkX2RlZmF1bHQoZW50cnksICZhdWRpdF9pbmZvKTsKIAlpZiAocmV0X3ZhbCAhPSAwKQogCQlyZXR1cm4gcmV0X3ZhbDsKIAotCWF0b21pY19zZXQoJm5ldGxhYmVsX3VubGFiZWxfYWNjZXB0X2ZsZywgMSk7CisJbmV0bGJsX3VubGFiZWxfYWNjZXB0ZmxnX3NldCgxLCAmYXVkaXRfaW5mbyk7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMgYi9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5jCmluZGV4IGVlYjdkNzYuLjk4YTQxNjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmMKKysrIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuYwpAQCAtMzIsNiArMzIsOSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbGlzdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2F1ZGl0Lmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KICNpbmNsdWRlIDxuZXQvc29jay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgpAQCAtNzQsMyArNzcsNDEgQEAKIAogCXJldHVybiAwOwogfQorCisvKgorICogTmV0TGFiZWwgQXVkaXQgRnVuY3Rpb25zCisgKi8KKworLyoqCisgKiBuZXRsYmxfYXVkaXRfc3RhcnRfY29tbW9uIC0gU3RhcnQgYW4gYXVkaXQgbWVzc2FnZQorICogQHR5cGU6IGF1ZGl0IG1lc3NhZ2UgdHlwZQorICogQGF1ZGl0X2luZm86IE5ldExhYmVsIGF1ZGl0IGluZm9ybWF0aW9uCisgKgorICogRGVzY3JpcHRpb246CisgKiBTdGFydCBhbiBhdWRpdCBtZXNzYWdlIHVzaW5nIHRoZSB0eXBlIHNwZWNpZmllZCBpbiBAdHlwZSBhbmQgZmlsbCB0aGUgYXVkaXQKKyAqIG1lc3NhZ2Ugd2l0aCBzb21lIGZpZWxkcyBjb21tb24gdG8gYWxsIE5ldExhYmVsIGF1ZGl0IG1lc3NhZ2VzLiAgUmV0dXJucworICogYSBwb2ludGVyIHRvIHRoZSBhdWRpdCBidWZmZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICoKKyAqLworc3RydWN0IGF1ZGl0X2J1ZmZlciAqbmV0bGJsX2F1ZGl0X3N0YXJ0X2NvbW1vbihpbnQgdHlwZSwKKwkJCQkJICAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pCit7CisJc3RydWN0IGF1ZGl0X2NvbnRleHQgKmF1ZGl0X2N0eCA9IGN1cnJlbnQtPmF1ZGl0X2NvbnRleHQ7CisJc3RydWN0IGF1ZGl0X2J1ZmZlciAqYXVkaXRfYnVmOworCWNoYXIgKnNlY2N0eDsKKwl1MzIgc2VjY3R4X2xlbjsKKworCWF1ZGl0X2J1ZiA9IGF1ZGl0X2xvZ19zdGFydChhdWRpdF9jdHgsIEdGUF9BVE9NSUMsIHR5cGUpOworCWlmIChhdWRpdF9idWYgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIm5ldGxhYmVsOiBhdWlkPSV1IiwgYXVkaXRfaW5mby0+bG9naW51aWQpOworCisJaWYgKGF1ZGl0X2luZm8tPnNlY2lkICE9IDAgJiYKKwkgICAgc2VjdXJpdHlfc2VjaWRfdG9fc2VjY3R4KGF1ZGl0X2luZm8tPnNlY2lkLAorCQkJCSAgICAgJnNlY2N0eCwKKwkJCQkgICAgICZzZWNjdHhfbGVuKSA9PSAwKQorCQlhdWRpdF9sb2dfZm9ybWF0KGF1ZGl0X2J1ZiwgIiBzdWJqPSVzIiwgc2VjY3R4KTsKKworCXJldHVybiBhdWRpdF9idWY7Cit9CmRpZmYgLS1naXQgYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oIGIvbmV0L25ldGxhYmVsL25ldGxhYmVsX3VzZXIuaAppbmRleCAzZjkzODZiLi40Nzk2N2VmIDEwMDY0NAotLS0gYS9uZXQvbmV0bGFiZWwvbmV0bGFiZWxfdXNlci5oCisrKyBiL25ldC9uZXRsYWJlbC9uZXRsYWJlbF91c2VyLmgKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPgogI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9hdWRpdC5oPgogI2luY2x1ZGUgPG5ldC9uZXRsaW5rLmg+CiAjaW5jbHVkZSA8bmV0L2dlbmV0bGluay5oPgogI2luY2x1ZGUgPG5ldC9uZXRsYWJlbC5oPgpAQCAtNzEsOCArNzIsMjUgQEAKIAkJCSAgIE5FVExCTF9QUk9UT19WRVJTSU9OKTsKIH0KIAorLyoqCisgKiBuZXRsYmxfbmV0bGlua19hdWRpdGluZm8gLSBGZXRjaCB0aGUgYXVkaXQgaW5mb3JtYXRpb24gZnJvbSBhIE5FVExJTksgbXNnCisgKiBAc2tiOiB0aGUgcGFja2V0CisgKiBAYXVkaXRfaW5mbzogTmV0TGFiZWwgYXVkaXQgaW5mb3JtYXRpb24KKyAqLworc3RhdGljIGlubGluZSB2b2lkIG5ldGxibF9uZXRsaW5rX2F1ZGl0aW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJCQkgICAgc3RydWN0IG5ldGxibF9hdWRpdCAqYXVkaXRfaW5mbykKK3sKKwlhdWRpdF9pbmZvLT5zZWNpZCA9IE5FVExJTktfQ0Ioc2tiKS5zaWQ7CisJYXVkaXRfaW5mby0+bG9naW51aWQgPSBORVRMSU5LX0NCKHNrYikubG9naW51aWQ7Cit9CisKIC8qIE5ldExhYmVsIE5FVExJTksgSS9PIGZ1bmN0aW9ucyAqLwogCiBpbnQgbmV0bGJsX25ldGxpbmtfaW5pdCh2b2lkKTsKIAorLyogTmV0TGFiZWwgQXVkaXQgRnVuY3Rpb25zICovCisKK3N0cnVjdCBhdWRpdF9idWZmZXIgKm5ldGxibF9hdWRpdF9zdGFydF9jb21tb24oaW50IHR5cGUsCisJCQkJCSAgICAgIHN0cnVjdCBuZXRsYmxfYXVkaXQgKmF1ZGl0X2luZm8pOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL25ldC9yeHJwYy90cmFuc3BvcnQuYyBiL25ldC9yeHJwYy90cmFuc3BvcnQuYwppbmRleCA0NjVlZmM4Li45NGIyZTJmIDEwMDY0NAotLS0gYS9uZXQvcnhycGMvdHJhbnNwb3J0LmMKKysrIGIvbmV0L3J4cnBjL3RyYW5zcG9ydC5jCkBAIC0zODEsMTEgKzM4MSwxMCBAQAogCiAJCS8qIGFsbG9jYXRlIGEgbmV3IG1lc3NhZ2UgcmVjb3JkICovCiAJCXJldCA9IC1FTk9NRU07Ci0JCW1zZyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCByeHJwY19tZXNzYWdlKSwgR0ZQX0tFUk5FTCk7CisJCW1zZyA9IGttZW1kdXAoanVtYm9tc2csIHNpemVvZihzdHJ1Y3QgcnhycGNfbWVzc2FnZSksIEdGUF9LRVJORUwpOwogCQlpZiAoIW1zZykKIAkJCWdvdG8gZXJyb3I7CiAKLQkJbWVtY3B5KG1zZywganVtYm9tc2csIHNpemVvZigqbXNnKSk7CiAJCWxpc3RfYWRkX3RhaWwoJm1zZy0+bGluaywgbXNncSk7CiAKIAkJLyogYWRqdXN0IHRoZSBqdW1ibyBwYWNrZXQgKi8KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYXBpLmMgYi9uZXQvc2NoZWQvY2xzX2FwaS5jCmluZGV4IDdlMTRmMTQuLjM3YTE4NDAgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9jbHNfYXBpLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19hcGkuYwpAQCAtNDAxLDcgKzQwMSw3IEBACiAJaWYgKChkZXYgPSBkZXZfZ2V0X2J5X2luZGV4KHRjbS0+dGNtX2lmaW5kZXgpKSA9PSBOVUxMKQogCQlyZXR1cm4gc2tiLT5sZW47CiAKLQlyZWFkX2xvY2tfYmgoJnFkaXNjX3RyZWVfbG9jayk7CisJcmVhZF9sb2NrKCZxZGlzY190cmVlX2xvY2spOwogCWlmICghdGNtLT50Y21fcGFyZW50KQogCQlxID0gZGV2LT5xZGlzY19zbGVlcGluZzsKIAllbHNlCkBAIC00NTgsNyArNDU4LDcgQEAKIAlpZiAoY2wpCiAJCWNvcHMtPnB1dChxLCBjbCk7CiBvdXQ6Ci0JcmVhZF91bmxvY2tfYmgoJnFkaXNjX3RyZWVfbG9jayk7CisJcmVhZF91bmxvY2soJnFkaXNjX3RyZWVfbG9jayk7CiAJZGV2X3B1dChkZXYpOwogCXJldHVybiBza2ItPmxlbjsKIH0KZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9jbHNfYmFzaWMuYyBiL25ldC9zY2hlZC9jbHNfYmFzaWMuYwppbmRleCA4NmNhYzQ5Li4wOWZkYTY4IDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvY2xzX2Jhc2ljLmMKKysrIGIvbmV0L3NjaGVkL2Nsc19iYXNpYy5jCkBAIC0xOTQsNyArMTk0LDcgQEAKIAlpZiAoaGFuZGxlKQogCQlmLT5oYW5kbGUgPSBoYW5kbGU7CiAJZWxzZSB7Ci0JCWludCBpID0gMHg4MDAwMDAwMDsKKwkJdW5zaWduZWQgaW50IGkgPSAweDgwMDAwMDAwOwogCQlkbyB7CiAJCQlpZiAoKytoZWFkLT5oZ2VuZXJhdG9yID09IDB4N0ZGRkZGRkYpCiAJCQkJaGVhZC0+aGdlbmVyYXRvciA9IDE7CmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvc2NoX2FwaS5jIGIvbmV0L3NjaGVkL3NjaF9hcGkuYwppbmRleCBhMTllZmYxLi4wYjY0ODkyIDEwMDY0NAotLS0gYS9uZXQvc2NoZWQvc2NoX2FwaS5jCisrKyBiL25ldC9zY2hlZC9zY2hfYXBpLmMKQEAgLTE5NSwxNCArMTk1LDE0IEBACiB7CiAJc3RydWN0IFFkaXNjICpxOwogCi0JcmVhZF9sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCXJlYWRfbG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZkZXYtPnFkaXNjX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHEtPmhhbmRsZSA9PSBoYW5kbGUpIHsKLQkJCXJlYWRfdW5sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCQkJcmVhZF91bmxvY2soJnFkaXNjX3RyZWVfbG9jayk7CiAJCQlyZXR1cm4gcTsKIAkJfQogCX0KLQlyZWFkX3VubG9ja19iaCgmcWRpc2NfdHJlZV9sb2NrKTsKKwlyZWFkX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAlyZXR1cm4gTlVMTDsKIH0KIApAQCAtODM3LDcgKzgzNyw3IEBACiAJCQljb250aW51ZTsKIAkJaWYgKGlkeCA+IHNfaWR4KQogCQkJc19xX2lkeCA9IDA7Ci0JCXJlYWRfbG9ja19iaCgmcWRpc2NfdHJlZV9sb2NrKTsKKwkJcmVhZF9sb2NrKCZxZGlzY190cmVlX2xvY2spOwogCQlxX2lkeCA9IDA7CiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocSwgJmRldi0+cWRpc2NfbGlzdCwgbGlzdCkgewogCQkJaWYgKHFfaWR4IDwgc19xX2lkeCkgewpAQCAtODQ2LDEyICs4NDYsMTIgQEAKIAkJCX0KIAkJCWlmICh0Y19maWxsX3FkaXNjKHNrYiwgcSwgcS0+cGFyZW50LCBORVRMSU5LX0NCKGNiLT5za2IpLnBpZCwKIAkJCQkJICBjYi0+bmxoLT5ubG1zZ19zZXEsIE5MTV9GX01VTFRJLCBSVE1fTkVXUURJU0MpIDw9IDApIHsKLQkJCQlyZWFkX3VubG9ja19iaCgmcWRpc2NfdHJlZV9sb2NrKTsKKwkJCQlyZWFkX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAkJCQlnb3RvIGRvbmU7CiAJCQl9CiAJCQlxX2lkeCsrOwogCQl9Ci0JCXJlYWRfdW5sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCQlyZWFkX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAl9CiAKIGRvbmU6CkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogCXNfdCA9IGNiLT5hcmdzWzBdOwogCXQgPSAwOwogCi0JcmVhZF9sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCXJlYWRfbG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHEsICZkZXYtPnFkaXNjX2xpc3QsIGxpc3QpIHsKIAkJaWYgKHQgPCBzX3QgfHwgIXEtPm9wcy0+Y2xfb3BzIHx8CiAJCSAgICAodGNtLT50Y21fcGFyZW50ICYmCkBAIC0xMDk2LDcgKzEwOTYsNyBAQAogCQkJYnJlYWs7CiAJCXQrKzsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJnFkaXNjX3RyZWVfbG9jayk7CisJcmVhZF91bmxvY2soJnFkaXNjX3RyZWVfbG9jayk7CiAKIAljYi0+YXJnc1swXSA9IHQ7CiAKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfZ2VuZXJpYy5jIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKaW5kZXggNmY5MTUxOC4uODhjNmE5OSAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9nZW5lcmljLmMKQEAgLTQ1LDExICs0NSwxMCBAQAogICAgVGhlIGlkZWEgaXMgdGhlIGZvbGxvd2luZzoKICAgIC0gZW5xdWV1ZSwgZGVxdWV1ZSBhcmUgc2VyaWFsaXplZCB2aWEgdG9wIGxldmVsIGRldmljZQogICAgICBzcGlubG9jayBkZXYtPnF1ZXVlX2xvY2suCi0gICAtIHRyZWUgd2Fsa2luZyBpcyBwcm90ZWN0ZWQgYnkgcmVhZF9sb2NrX2JoKHFkaXNjX3RyZWVfbG9jaykKKyAgIC0gdHJlZSB3YWxraW5nIGlzIHByb3RlY3RlZCBieSByZWFkX2xvY2socWRpc2NfdHJlZV9sb2NrKQogICAgICBhbmQgdGhpcyBsb2NrIGlzIHVzZWQgb25seSBpbiBwcm9jZXNzIGNvbnRleHQuCi0gICAtIHVwZGF0ZXMgdG8gdHJlZSBhcmUgbWFkZSB1bmRlciBydG5sIHNlbWFwaG9yZSBvcgotICAgICBmcm9tIHNvZnRpcnEgY29udGV4dCAoX19xZGlzY19kZXN0cm95IHJjdS1jYWxsYmFjaykKLSAgICAgaGVuY2UgdGhpcyBsb2NrIG5lZWRzIGxvY2FsIGJoIGRpc2FibGluZy4KKyAgIC0gdXBkYXRlcyB0byB0cmVlIGFyZSBtYWRlIG9ubHkgdW5kZXIgcnRubCBzZW1hcGhvcmUsCisgICAgIGhlbmNlIHRoaXMgbG9jayBtYXkgYmUgbWFkZSB3aXRob3V0IGxvY2FsIGJoIGRpc2FibGluZy4KIAogICAgcWRpc2NfdHJlZV9sb2NrIG11c3QgYmUgZ3JhYmJlZCBCRUZPUkUgZGV2LT5xdWV1ZV9sb2NrIQogICovCkBAIC01NywxNCArNTYsMTQgQEAKIAogdm9pZCBxZGlzY19sb2NrX3RyZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKLQl3cml0ZV9sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCXdyaXRlX2xvY2soJnFkaXNjX3RyZWVfbG9jayk7CiAJc3Bpbl9sb2NrX2JoKCZkZXYtPnF1ZXVlX2xvY2spOwogfQogCiB2b2lkIHFkaXNjX3VubG9ja190cmVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3Bpbl91bmxvY2tfYmgoJmRldi0+cXVldWVfbG9jayk7Ci0Jd3JpdGVfdW5sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCXdyaXRlX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIH0KIAogLyogCkBAIC00ODMsMjAgKzQ4Miw2IEBACiBzdGF0aWMgdm9pZCBfX3FkaXNjX2Rlc3Ryb3koc3RydWN0IHJjdV9oZWFkICpoZWFkKQogewogCXN0cnVjdCBRZGlzYyAqcWRpc2MgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IFFkaXNjLCBxX3JjdSk7Ci0Jc3RydWN0IFFkaXNjX29wcyAgKm9wcyA9IHFkaXNjLT5vcHM7Ci0KLSNpZmRlZiBDT05GSUdfTkVUX0VTVElNQVRPUgotCWdlbl9raWxsX2VzdGltYXRvcigmcWRpc2MtPmJzdGF0cywgJnFkaXNjLT5yYXRlX2VzdCk7Ci0jZW5kaWYKLQl3cml0ZV9sb2NrKCZxZGlzY190cmVlX2xvY2spOwotCWlmIChvcHMtPnJlc2V0KQotCQlvcHMtPnJlc2V0KHFkaXNjKTsKLQlpZiAob3BzLT5kZXN0cm95KQotCQlvcHMtPmRlc3Ryb3kocWRpc2MpOwotCXdyaXRlX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKLQltb2R1bGVfcHV0KG9wcy0+b3duZXIpOwotCi0JZGV2X3B1dChxZGlzYy0+ZGV2KTsKIAlrZnJlZSgoY2hhciAqKSBxZGlzYyAtIHFkaXNjLT5wYWRkZWQpOwogfQogCkBAIC01MDQsMzIgKzQ4OSwyMyBAQAogCiB2b2lkIHFkaXNjX2Rlc3Ryb3koc3RydWN0IFFkaXNjICpxZGlzYykKIHsKLQlzdHJ1Y3QgbGlzdF9oZWFkIGNxbCA9IExJU1RfSEVBRF9JTklUKGNxbCk7Ci0Jc3RydWN0IFFkaXNjICpjcSwgKnEsICpuOworCXN0cnVjdCBRZGlzY19vcHMgICpvcHMgPSBxZGlzYy0+b3BzOwogCiAJaWYgKHFkaXNjLT5mbGFncyAmIFRDUV9GX0JVSUxUSU4gfHwKLQkJIWF0b21pY19kZWNfYW5kX3Rlc3QoJnFkaXNjLT5yZWZjbnQpKQorCSAgICAhYXRvbWljX2RlY19hbmRfdGVzdCgmcWRpc2MtPnJlZmNudCkpCiAJCXJldHVybjsKIAotCWlmICghbGlzdF9lbXB0eSgmcWRpc2MtPmxpc3QpKSB7Ci0JCWlmIChxZGlzYy0+b3BzLT5jbF9vcHMgPT0gTlVMTCkKLQkJCWxpc3RfZGVsKCZxZGlzYy0+bGlzdCk7Ci0JCWVsc2UKLQkJCWxpc3RfbW92ZSgmcWRpc2MtPmxpc3QsICZjcWwpOwotCX0KKwlsaXN0X2RlbCgmcWRpc2MtPmxpc3QpOworI2lmZGVmIENPTkZJR19ORVRfRVNUSU1BVE9SCisJZ2VuX2tpbGxfZXN0aW1hdG9yKCZxZGlzYy0+YnN0YXRzLCAmcWRpc2MtPnJhdGVfZXN0KTsKKyNlbmRpZgorCWlmIChvcHMtPnJlc2V0KQorCQlvcHMtPnJlc2V0KHFkaXNjKTsKKwlpZiAob3BzLT5kZXN0cm95KQorCQlvcHMtPmRlc3Ryb3kocWRpc2MpOwogCi0JLyogdW5saW5rIGlubmVyIHFkaXNjcyBmcm9tIGRldi0+cWRpc2NfbGlzdCBpbW1lZGlhdGVseSAqLwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3EsICZjcWwsIGxpc3QpCi0JCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShxLCBuLCAmcWRpc2MtPmRldi0+cWRpc2NfbGlzdCwgbGlzdCkKLQkJCWlmIChUQ19IX01BSihxLT5wYXJlbnQpID09IFRDX0hfTUFKKGNxLT5oYW5kbGUpKSB7Ci0JCQkJaWYgKHEtPm9wcy0+Y2xfb3BzID09IE5VTEwpCi0JCQkJCWxpc3RfZGVsX2luaXQoJnEtPmxpc3QpOwotCQkJCWVsc2UKLQkJCQkJbGlzdF9tb3ZlX3RhaWwoJnEtPmxpc3QsICZjcWwpOwotCQkJfQotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcSwgbiwgJmNxbCwgbGlzdCkKLQkJbGlzdF9kZWxfaW5pdCgmY3EtPmxpc3QpOwotCisJbW9kdWxlX3B1dChvcHMtPm93bmVyKTsKKwlkZXZfcHV0KHFkaXNjLT5kZXYpOwogCWNhbGxfcmN1KCZxZGlzYy0+cV9yY3UsIF9fcWRpc2NfZGVzdHJveSk7CiB9CiAKQEAgLTU0OSwxNSArNTI1LDE1IEBACiAJCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IGFjdGl2YXRpb24gZmFpbGVkXG4iLCBkZXYtPm5hbWUpOwogCQkJCXJldHVybjsKIAkJCX0KLQkJCXdyaXRlX2xvY2tfYmgoJnFkaXNjX3RyZWVfbG9jayk7CisJCQl3cml0ZV9sb2NrKCZxZGlzY190cmVlX2xvY2spOwogCQkJbGlzdF9hZGRfdGFpbCgmcWRpc2MtPmxpc3QsICZkZXYtPnFkaXNjX2xpc3QpOwotCQkJd3JpdGVfdW5sb2NrX2JoKCZxZGlzY190cmVlX2xvY2spOworCQkJd3JpdGVfdW5sb2NrKCZxZGlzY190cmVlX2xvY2spOwogCQl9IGVsc2UgewogCQkJcWRpc2MgPSAgJm5vcXVldWVfcWRpc2M7CiAJCX0KLQkJd3JpdGVfbG9ja19iaCgmcWRpc2NfdHJlZV9sb2NrKTsKKwkJd3JpdGVfbG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAkJZGV2LT5xZGlzY19zbGVlcGluZyA9IHFkaXNjOwotCQl3cml0ZV91bmxvY2tfYmgoJnFkaXNjX3RyZWVfbG9jayk7CisJCXdyaXRlX3VubG9jaygmcWRpc2NfdHJlZV9sb2NrKTsKIAl9CiAKIAlpZiAoIW5ldGlmX2NhcnJpZXJfb2soZGV2KSkKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9zY2hfaHRiLmMgYi9uZXQvc2NoZWQvc2NoX2h0Yi5jCmluZGV4IGJiM2RkZDQuLjZjMDU4ZTMgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9zY2hfaHRiLmMKKysrIGIvbmV0L3NjaGVkL3NjaF9odGIuYwpAQCAtMzkxLDcgKzM5MSw3IEBACiAvKiBJZiB0aGlzIHRyaWdnZXJzLCBpdCBpcyBhIGJ1ZyBpbiB0aGlzIGNvZGUsIGJ1dCBpdCBuZWVkIG5vdCBiZSBmYXRhbCAqLwogc3RhdGljIHZvaWQgaHRiX3NhZmVfcmJfZXJhc2Uoc3RydWN0IHJiX25vZGUgKnJiLCBzdHJ1Y3QgcmJfcm9vdCAqcm9vdCkKIHsKLQlpZiAoUkJfRU1QVFlfTk9ERShyYikpIHsKKwlpZiAoIVJCX0VNUFRZX05PREUocmIpKSB7CiAJCVdBUk5fT04oMSk7CiAJfSBlbHNlIHsKIAkJcmJfZXJhc2UocmIsIHJvb3QpOwpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvaW5wdXQuYyBiL25ldC9zY3RwL2lucHV0LmMKaW5kZXggMDNmNjVkZS4uNjRmNjMwMSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvaW5wdXQuYworKysgYi9uZXQvc2N0cC9pbnB1dC5jCkBAIC0yMTgsMTIgKzIxOCw2IEBACiAJCX0KIAl9CiAKLQkvKiBTQ1RQIHNlZW1zIHRvIGFsd2F5cyBuZWVkIGEgdGltZXN0YW1wIHJpZ2h0IG5vdyAoRklYTUUpICovCi0JaWYgKHNrYi0+dHN0YW1wLm9mZl9zZWMgPT0gMCkgewotCQlfX25ldF90aW1lc3RhbXAoc2tiKTsKLQkJc29ja19lbmFibGVfdGltZXN0YW1wKHNrKTsgCi0JfQotCiAJaWYgKCF4ZnJtX3BvbGljeV9jaGVjayhzaywgWEZSTV9QT0xJQ1lfSU4sIHNrYiwgZmFtaWx5KSkKIAkJZ290byBkaXNjYXJkX3JlbGVhc2U7CiAJbmZfcmVzZXQoc2tiKTsKQEAgLTM4OCw3ICszODIsNyBAQAogCQkJICogcG10dSBkaXNjb3Zlcnkgb24gdGhpcyB0cmFuc3BvcnQuCiAJCQkgKi8KIAkJCXQtPnBhdGhtdHUgPSBTQ1RQX0RFRkFVTFRfTUlOU0VHTUVOVDsKLQkJCXQtPnBhcmFtX2ZsYWdzID0gKHQtPnBhcmFtX2ZsYWdzICYgflNQUF9IQikgfAorCQkJdC0+cGFyYW1fZmxhZ3MgPSAodC0+cGFyYW1fZmxhZ3MgJiB+U1BQX1BNVFVEKSB8CiAJCQkJU1BQX1BNVFVEX0RJU0FCTEU7CiAJCX0gZWxzZSB7CiAJCQl0LT5wYXRobXR1ID0gcG10dTsKZGlmZiAtLWdpdCBhL25ldC9zY3RwL291dHB1dC5jIGIvbmV0L3NjdHAvb3V0cHV0LmMKaW5kZXggY2RjNWEzOS4uM2VmNDM1MSAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cHV0LmMKKysrIGIvbmV0L3NjdHAvb3V0cHV0LmMKQEAgLTYzMyw3ICs2MzMsNyBAQAogCQkgKiBkYXRhIHdpbGwgZml0IG9yIGRlbGF5IGluIGhvcGVzIG9mIGJ1bmRsaW5nIGEgZnVsbAogCQkgKiBzaXplZCBwYWNrZXQuCiAJCSAqLwotCQlpZiAobGVuIDwgYXNvYy0+cGF0aG10dSAtIHBhY2tldC0+b3ZlcmhlYWQpIHsKKwkJaWYgKGxlbiA8IGFzb2MtPmZyYWdfcG9pbnQpIHsKIAkJCXJldHZhbCA9IFNDVFBfWE1JVF9OQUdMRV9ERUxBWTsKIAkJCWdvdG8gZmluaXNoOwogCQl9CkBAIC02NDUsNyArNjQ1LDEzIEBACiAJLyogS2VlcCB0cmFjayBvZiBob3cgbWFueSBieXRlcyBhcmUgaW4gZmxpZ2h0IHRvIHRoZSByZWNlaXZlci4gKi8KIAlhc29jLT5vdXRxdWV1ZS5vdXRzdGFuZGluZ19ieXRlcyArPSBkYXRhc2l6ZTsKIAotCS8qIFVwZGF0ZSBvdXIgdmlldyBvZiB0aGUgcmVjZWl2ZXIncyByd25kLiAqLworCS8qIFVwZGF0ZSBvdXIgdmlldyBvZiB0aGUgcmVjZWl2ZXIncyByd25kLiBJbmNsdWRlIHNrX2J1ZmYgb3ZlcmhlYWQKKwkgKiB3aGlsZSB1cGRhdGluZyBwZWVyLnJ3bmQgc28gdGhhdCBpdCByZWR1Y2VzIHRoZSBjaGFuY2VzIG9mIGEKKwkgKiByZWNlaXZlciBydW5uaW5nIG91dCBvZiByZWNlaXZlIGJ1ZmZlciBzcGFjZSBldmVuIHdoZW4gcmVjZWl2ZQorCSAqIHdpbmRvdyBpcyBzdGlsbCBvcGVuLiBUaGlzIGNhbiBoYXBwZW4gd2hlbiBhIHNlbmRlciBpcyBzZW5kaW5nCisJICogc2VuZGluZyBzbWFsbCBtZXNzYWdlcy4KKwkgKi8KKwlkYXRhc2l6ZSArPSBzaXplb2Yoc3RydWN0IHNrX2J1ZmYpOwogCWlmIChkYXRhc2l6ZSA8IHJ3bmQpCiAJCXJ3bmQgLT0gZGF0YXNpemU7CiAJZWxzZQpkaWZmIC0tZ2l0IGEvbmV0L3NjdHAvb3V0cXVldWUuYyBiL25ldC9zY3RwL291dHF1ZXVlLmMKaW5kZXggMzcwNzRhMy4uNzM5NTgyNCAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvb3V0cXVldWUuYworKysgYi9uZXQvc2N0cC9vdXRxdWV1ZS5jCkBAIC00MTYsNyArNDE2LDggQEAKIAkJCSAqIChTZWN0aW9uIDcuMi40KSksIGFkZCB0aGUgZGF0YSBzaXplIG9mIHRob3NlCiAJCQkgKiBjaHVua3MgdG8gdGhlIHJ3bmQuCiAJCQkgKi8KLQkJCXEtPmFzb2MtPnBlZXIucnduZCArPSBzY3RwX2RhdGFfc2l6ZShjaHVuayk7CisJCQlxLT5hc29jLT5wZWVyLnJ3bmQgKz0gKHNjdHBfZGF0YV9zaXplKGNodW5rKSArCisJCQkJCQlzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTsKIAkJCXEtPm91dHN0YW5kaW5nX2J5dGVzIC09IHNjdHBfZGF0YV9zaXplKGNodW5rKTsKIAkJCXRyYW5zcG9ydC0+ZmxpZ2h0X3NpemUgLT0gc2N0cF9kYXRhX3NpemUoY2h1bmspOwogCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMgYi9uZXQvc2N0cC9zbV9tYWtlX2NodW5rLmMKaW5kZXggNzc0NWJkZS4uNTA3ZGZmNyAxMDA2NDQKLS0tIGEvbmV0L3NjdHAvc21fbWFrZV9jaHVuay5jCisrKyBiL25ldC9zY3RwL3NtX21ha2VfY2h1bmsuYwpAQCAtMTQ0Nyw4ICsxNDQ3LDE2IEBACiAJLyogQ2hlY2sgdG8gc2VlIGlmIHRoZSBjb29raWUgaXMgc3RhbGUuICBJZiB0aGVyZSBpcyBhbHJlYWR5CiAJICogYW4gYXNzb2NpYXRpb24sIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgY29va2llJ3MgZXhwaXJhdGlvbgogCSAqIGZvciBpbml0IGNvbGxpc2lvbiBjYXNlIG9mIGxvc3QgQ09PS0lFIEFDSy4KKwkgKiBJZiBza2IgaGFzIGJlZW4gdGltZXN0YW1wZWQsIHRoZW4gdXNlIHRoZSBzdGFtcCwgb3RoZXJ3aXNlCisJICogdXNlIGN1cnJlbnQgdGltZS4gIFRoaXMgaW50cm9kdWNlcyBhIHNtYWxsIHBvc3NpYmlsaXR5IHRoYXQKKwkgKiB0aGF0IGEgY29va2llIG1heSBiZSBjb25zaWRlcmVkIGV4cGlyZWQsIGJ1dCBoaXMgd291bGQgb25seSBzbG93CisJICogZG93biB0aGUgbmV3IGFzc29jaWF0aW9uIGVzdGFibGlzaG1lbnQgaW5zdGVhZCBvZiBldmVyeSBwYWNrZXQuCiAJICovCi0Jc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOworCWlmIChzb2NrX2ZsYWcoZXAtPmJhc2Uuc2ssIFNPQ0tfVElNRVNUQU1QKSkKKwkJc2tiX2dldF90aW1lc3RhbXAoc2tiLCAmdHYpOworCWVsc2UKKwkJZG9fZ2V0dGltZW9mZGF5KCZ0dik7CisKIAlpZiAoIWFzb2MgJiYgdHZfbHQoYmVhcl9jb29raWUtPmV4cGlyYXRpb24sIHR2KSkgewogCQlfX3UxNiBsZW47CiAJCS8qCmRpZmYgLS1naXQgYS9uZXQvc2N0cC9zb2NrZXQuYyBiL25ldC9zY3RwL3NvY2tldC5jCmluZGV4IDc5YzNlMDcuLjNmZTkwNmQgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3NvY2tldC5jCisrKyBiL25ldC9zY3RwL3NvY2tldC5jCkBAIC0zMDg0LDggKzMwODQsOCBAQAogCSAqLwogCXNwLT5kaXNhYmxlX2ZyYWdtZW50cyA9IDA7CiAKLQkvKiBUdXJuIG9uL29mZiBhbnkgTmFnbGUtbGlrZSBhbGdvcml0aG0uICAqLwotCXNwLT5ub2RlbGF5ICAgICAgICAgICA9IDE7CisJLyogRW5hYmxlIE5hZ2xlIGFsZ29yaXRobSBieSBkZWZhdWx0LiAgKi8KKwlzcC0+bm9kZWxheSAgICAgICAgICAgPSAwOwogCiAJLyogRW5hYmxlIGJ5IGRlZmF1bHQuICovCiAJc3AtPnY0bWFwcGVkICAgICAgICAgID0gMTsKZGlmZiAtLWdpdCBhL25ldC9zb2NrZXQuYyBiL25ldC9zb2NrZXQuYwppbmRleCAxYmM0MTY3Li4wMTkxOGY3IDEwMDY0NAotLS0gYS9uZXQvc29ja2V0LmMKKysrIGIvbmV0L3NvY2tldC5jCkBAIC05NSwxMCArOTUsMTAgQEAKICNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIuaD4KIAogc3RhdGljIGludCBzb2NrX25vX29wZW4oc3RydWN0IGlub2RlICppcnJlbGV2YW50LCBzdHJ1Y3QgZmlsZSAqZG9udGNhcmUpOwotc3RhdGljIHNzaXplX3Qgc29ja19haW9fcmVhZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNoYXIgX191c2VyICpidWYsCi0JCQkgICAgIHNpemVfdCBzaXplLCBsb2ZmX3QgcG9zKTsKLXN0YXRpYyBzc2l6ZV90IHNvY2tfYWlvX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKLQkJCSAgICAgIHNpemVfdCBzaXplLCBsb2ZmX3QgcG9zKTsKK3N0YXRpYyBzc2l6ZV90IHNvY2tfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSB1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpOworc3RhdGljIHNzaXplX3Qgc29ja19haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKTsKIHN0YXRpYyBpbnQgc29ja19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiAKIHN0YXRpYyBpbnQgc29ja19jbG9zZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CkBAIC0xMTAsMTAgKzExMCw2IEBACiAJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAjZW5kaWYKIHN0YXRpYyBpbnQgc29ja19mYXN5bmMoaW50IGZkLCBzdHJ1Y3QgZmlsZSAqZmlscCwgaW50IG9uKTsKLXN0YXRpYyBzc2l6ZV90IHNvY2tfcmVhZHYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yLAotCQkJICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgKnBwb3MpOwotc3RhdGljIHNzaXplX3Qgc29ja193cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqdmVjdG9yLAotCQkJICAgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90ICpwcG9zKTsKIHN0YXRpYyBzc2l6ZV90IHNvY2tfc2VuZHBhZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwYWdlICpwYWdlLAogCQkJICAgICBpbnQgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgbG9mZl90ICpwcG9zLCBpbnQgbW9yZSk7CiAKQEAgLTEzNiw4ICsxMzIsNiBAQAogCS5vcGVuID0JCXNvY2tfbm9fb3BlbiwJLyogc3BlY2lhbCBvcGVuIGNvZGUgdG8gZGlzYWxsb3cgb3BlbiB2aWEgL3Byb2MgKi8KIAkucmVsZWFzZSA9CXNvY2tfY2xvc2UsCiAJLmZhc3luYyA9CXNvY2tfZmFzeW5jLAotCS5yZWFkdiA9CXNvY2tfcmVhZHYsCi0JLndyaXRldiA9CXNvY2tfd3JpdGV2LAogCS5zZW5kcGFnZSA9CXNvY2tfc2VuZHBhZ2UsCiAJLnNwbGljZV93cml0ZSA9IGdlbmVyaWNfc3BsaWNlX3NlbmRwYWdlLAogfTsKQEAgLTY2NCw3ICs2NTgsNiBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNvY2tfaW9jYiAqYWxsb2Nfc29ja19pb2NiKHN0cnVjdCBraW9jYiAqaW9jYiwKLQkJCQkJIGNoYXIgX191c2VyICp1YnVmLCBzaXplX3Qgc2l6ZSwKIAkJCQkJIHN0cnVjdCBzb2NrX2lvY2IgKnNpb2NiKQogewogCWlmICghaXNfc3luY19raW9jYihpb2NiKSkgewpAQCAtNjc1LDE2ICs2NjgsMTMgQEAKIAl9CiAKIAlzaW9jYi0+a2lvY2IgPSBpb2NiOwotCXNpb2NiLT5hc3luY19pb3YuaW92X2Jhc2UgPSB1YnVmOwotCXNpb2NiLT5hc3luY19pb3YuaW92X2xlbiA9IHNpemU7Ci0KIAlpb2NiLT5wcml2YXRlID0gc2lvY2I7CiAJcmV0dXJuIHNpb2NiOwogfQogCiBzdGF0aWMgc3NpemVfdCBkb19zb2NrX3JlYWQoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCQkgICAgc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICAgIHVuc2lnbmVkIGxvbmcgbnJfc2VncykKKwkJc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MpCiB7CiAJc3RydWN0IHNvY2tldCAqc29jayA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzaXplX3Qgc2l6ZSA9IDA7CkBAIC03MDQsNDMgKzY5NCwyNyBAQAogCXJldHVybiBfX3NvY2tfcmVjdm1zZyhpb2NiLCBzb2NrLCBtc2csIHNpemUsIG1zZy0+bXNnX2ZsYWdzKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc29ja19yZWFkdihzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsCi0JCQkgIHVuc2lnbmVkIGxvbmcgbnJfc2VncywgbG9mZl90ICpwcG9zKQotewotCXN0cnVjdCBraW9jYiBpb2NiOwotCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2I7Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0JaW50IHJldDsKLQotCWluaXRfc3luY19raW9jYigmaW9jYiwgTlVMTCk7Ci0JaW9jYi5wcml2YXRlID0gJnNpb2NiOwotCi0JcmV0ID0gZG9fc29ja19yZWFkKCZtc2csICZpb2NiLCBmaWxlLCAoc3RydWN0IGlvdmVjICopaW92LCBucl9zZWdzKTsKLQlpZiAoLUVJT0NCUVVFVUVEID09IHJldCkKLQkJcmV0ID0gd2FpdF9vbl9zeW5jX2tpb2NiKCZpb2NiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBzb2NrX2Fpb19yZWFkKHN0cnVjdCBraW9jYiAqaW9jYiwgY2hhciBfX3VzZXIgKnVidWYsCi0JCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90IHBvcykKK3N0YXRpYyBzc2l6ZV90IHNvY2tfYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCQl1bnNpZ25lZCBsb25nIG5yX3NlZ3MsIGxvZmZfdCBwb3MpCiB7CiAJc3RydWN0IHNvY2tfaW9jYiBzaW9jYiwgKng7CiAKIAlpZiAocG9zICE9IDApCiAJCXJldHVybiAtRVNQSVBFOwotCWlmIChjb3VudCA9PSAwKQkJLyogTWF0Y2ggU1lTNSBiZWhhdmlvdXIgKi8KKworCWlmIChpb2NiLT5raV9sZWZ0ID09IDApCS8qIE1hdGNoIFNZUzUgYmVoYXZpb3VyICovCiAJCXJldHVybiAwOwogCi0JeCA9IGFsbG9jX3NvY2tfaW9jYihpb2NiLCB1YnVmLCBjb3VudCwgJnNpb2NiKTsKKworCXggPSBhbGxvY19zb2NrX2lvY2IoaW9jYiwgJnNpb2NiKTsKIAlpZiAoIXgpCiAJCXJldHVybiAtRU5PTUVNOwotCXJldHVybiBkb19zb2NrX3JlYWQoJngtPmFzeW5jX21zZywgaW9jYiwgaW9jYi0+a2lfZmlscCwKLQkJCSAgICAmeC0+YXN5bmNfaW92LCAxKTsKKwlyZXR1cm4gZG9fc29ja19yZWFkKCZ4LT5hc3luY19tc2csIGlvY2IsIGlvY2ItPmtpX2ZpbHAsIGlvdiwgbnJfc2Vncyk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IGRvX3NvY2tfd3JpdGUoc3RydWN0IG1zZ2hkciAqbXNnLCBzdHJ1Y3Qga2lvY2IgKmlvY2IsCi0JCQkgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgaW92ZWMgKmlvdiwKLQkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzKQorCQkJc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJdW5zaWduZWQgbG9uZyBucl9zZWdzKQogewogCXN0cnVjdCBzb2NrZXQgKnNvY2sgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc2l6ZV90IHNpemUgPSAwOwpAQCAtNzYyLDM5ICs3MzYsMjIgQEAKIAlyZXR1cm4gX19zb2NrX3NlbmRtc2coaW9jYiwgc29jaywgbXNnLCBzaXplKTsKIH0KIAotc3RhdGljIHNzaXplX3Qgc29ja193cml0ZXYoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAotCQkJICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IG1zZ2hkciBtc2c7Ci0Jc3RydWN0IGtpb2NiIGlvY2I7Ci0Jc3RydWN0IHNvY2tfaW9jYiBzaW9jYjsKLQlpbnQgcmV0OwotCi0JaW5pdF9zeW5jX2tpb2NiKCZpb2NiLCBOVUxMKTsKLQlpb2NiLnByaXZhdGUgPSAmc2lvY2I7Ci0KLQlyZXQgPSBkb19zb2NrX3dyaXRlKCZtc2csICZpb2NiLCBmaWxlLCAoc3RydWN0IGlvdmVjICopaW92LCBucl9zZWdzKTsKLQlpZiAoLUVJT0NCUVVFVUVEID09IHJldCkKLQkJcmV0ID0gd2FpdF9vbl9zeW5jX2tpb2NiKCZpb2NiKTsKLQlyZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3NpemVfdCBzb2NrX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IGNoYXIgX191c2VyICp1YnVmLAotCQkJICAgICAgc2l6ZV90IGNvdW50LCBsb2ZmX3QgcG9zKQorc3RhdGljIHNzaXplX3Qgc29ja19haW9fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBzb2NrX2lvY2Igc2lvY2IsICp4OwogCiAJaWYgKHBvcyAhPSAwKQogCQlyZXR1cm4gLUVTUElQRTsKLQlpZiAoY291bnQgPT0gMCkJCS8qIE1hdGNoIFNZUzUgYmVoYXZpb3VyICovCisKKwlpZiAoaW9jYi0+a2lfbGVmdCA9PSAwKQkvKiBNYXRjaCBTWVM1IGJlaGF2aW91ciAqLwogCQlyZXR1cm4gMDsKIAotCXggPSBhbGxvY19zb2NrX2lvY2IoaW9jYiwgKHZvaWQgX191c2VyICopdWJ1ZiwgY291bnQsICZzaW9jYik7CisJeCA9IGFsbG9jX3NvY2tfaW9jYihpb2NiLCAmc2lvY2IpOwogCWlmICgheCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyZXR1cm4gZG9fc29ja193cml0ZSgmeC0+YXN5bmNfbXNnLCBpb2NiLCBpb2NiLT5raV9maWxwLAotCQkJICAgICAmeC0+YXN5bmNfaW92LCAxKTsKKwlyZXR1cm4gZG9fc29ja193cml0ZSgmeC0+YXN5bmNfbXNnLCBpb2NiLCBpb2NiLT5raV9maWxwLCBpb3YsIG5yX3NlZ3MpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoLmMgYi9uZXQvc3VucnBjL2F1dGguYwppbmRleCA1NTE2M2FmLi45OTNmZjFhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGguYworKysgYi9uZXQvc3VucnBjL2F1dGguYwpAQCAtMzMxLDggKzMzMSw4IEBACiAJdGFzay0+dGtfbXNnLnJwY19jcmVkID0gTlVMTDsKIH0KIAotdTMyICoKLXJwY2F1dGhfbWFyc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdTMyICpwKQorX19iZTMyICoKK3JwY2F1dGhfbWFyc2hjcmVkKHN0cnVjdCBycGNfdGFzayAqdGFzaywgX19iZTMyICpwKQogewogCXN0cnVjdCBycGNfY3JlZAkqY3JlZCA9IHRhc2stPnRrX21zZy5ycGNfY3JlZDsKIApAQCAtMzQyLDggKzM0Miw4IEBACiAJcmV0dXJuIGNyZWQtPmNyX29wcy0+Y3JtYXJzaGFsKHRhc2ssIHApOwogfQogCi11MzIgKgotcnBjYXV0aF9jaGVja3ZlcmYoc3RydWN0IHJwY190YXNrICp0YXNrLCB1MzIgKnApCitfX2JlMzIgKgorcnBjYXV0aF9jaGVja3ZlcmYoc3RydWN0IHJwY190YXNrICp0YXNrLCBfX2JlMzIgKnApCiB7CiAJc3RydWN0IHJwY19jcmVkCSpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOwogCkBAIC0zNTUsNyArMzU1LDcgQEAKIAogaW50CiBycGNhdXRoX3dyYXBfcmVxKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLAotCQl1MzIgKmRhdGEsIHZvaWQgKm9iaikKKwkJX19iZTMyICpkYXRhLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOwogCkBAIC0zNjksNyArMzY5LDcgQEAKIAogaW50CiBycGNhdXRoX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywga3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLAotCQl1MzIgKmRhdGEsIHZvaWQgKm9iaikKKwkJX19iZTMyICpkYXRhLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2F1dGhfZ3NzLmMKaW5kZXggNmVlZDNlMS4uYTZlZDJkMiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9hdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3MvYXV0aF9nc3MuYwpAQCAtODI2LDE0ICs4MjYsMTQgQEAKICogTWFyc2hhbCBjcmVkZW50aWFscy4KICogTWF5YmUgd2Ugc2hvdWxkIGtlZXAgYSBjYWNoZWQgY3JlZGVudGlhbCBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucy4KICovCi1zdGF0aWMgdTMyICoKLWdzc19tYXJzaGFsKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdTMyICpwKQorc3RhdGljIF9fYmUzMiAqCitnc3NfbWFyc2hhbChzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIF9fYmUzMiAqcCkKIHsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CiAJc3RydWN0IGdzc19jcmVkCSpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZihjcmVkLCBzdHJ1Y3QgZ3NzX2NyZWQsCiAJCQkJCQkgZ2NfYmFzZSk7CiAJc3RydWN0IGdzc19jbF9jdHgJKmN0eCA9IGdzc19jcmVkX2dldF9jdHgoY3JlZCk7Ci0JdTMyCQkqY3JlZF9sZW47CisJX19iZTMyCQkqY3JlZF9sZW47CiAJc3RydWN0IHJwY19ycXN0ICpyZXEgPSB0YXNrLT50a19ycXN0cDsKIAl1MzIgICAgICAgICAgICAgbWFqX3N0YXQgPSAwOwogCXN0cnVjdCB4ZHJfbmV0b2JqIG1pYzsKQEAgLTg5NCwxMiArODk0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MzIgKgotZ3NzX3ZhbGlkYXRlKHN0cnVjdCBycGNfdGFzayAqdGFzaywgdTMyICpwKQorc3RhdGljIF9fYmUzMiAqCitnc3NfdmFsaWRhdGUoc3RydWN0IHJwY190YXNrICp0YXNrLCBfX2JlMzIgKnApCiB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOwogCXN0cnVjdCBnc3NfY2xfY3R4ICpjdHggPSBnc3NfY3JlZF9nZXRfY3R4KGNyZWQpOwotCXUzMgkJc2VxOworCV9fYmUzMgkJc2VxOwogCXN0cnVjdCBrdmVjCWlvdjsKIAlzdHJ1Y3QgeGRyX2J1Zgl2ZXJmX2J1ZjsKIAlzdHJ1Y3QgeGRyX25ldG9iaiBtaWM7CkBAIC05NDAsMTMgKzk0MCwxNCBAQAogCiBzdGF0aWMgaW5saW5lIGludAogZ3NzX3dyYXBfcmVxX2ludGVnKHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IGdzc19jbF9jdHggKmN0eCwKLQkJa3hkcnByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHUzMiAqcCwgdm9pZCAqb2JqKQorCQlreGRycHJvY190IGVuY29kZSwgc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICpwLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHhkcl9idWYJKnNuZF9idWYgPSAmcnFzdHAtPnJxX3NuZF9idWY7CiAJc3RydWN0IHhkcl9idWYJaW50ZWdfYnVmOwotCXUzMiAgICAgICAgICAgICAqaW50ZWdfbGVuID0gTlVMTDsKKwlfX2JlMzIgICAgICAgICAgKmludGVnX2xlbiA9IE5VTEw7CiAJc3RydWN0IHhkcl9uZXRvYmogbWljOwotCXUzMgkJb2Zmc2V0LCAqcTsKKwl1MzIJCW9mZnNldDsKKwlfX2JlMzIJCSpxOwogCXN0cnVjdCBrdmVjCSppb3Y7CiAJdTMyICAgICAgICAgICAgIG1hal9zdGF0ID0gMDsKIAlpbnQJCXN0YXR1cyA9IC1FSU87CkBAIC0xMDMyLDEzICsxMDMzLDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgaW50CiBnc3Nfd3JhcF9yZXFfcHJpdihzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIHN0cnVjdCBnc3NfY2xfY3R4ICpjdHgsCi0JCWt4ZHJwcm9jX3QgZW5jb2RlLCBzdHJ1Y3QgcnBjX3Jxc3QgKnJxc3RwLCB1MzIgKnAsIHZvaWQgKm9iaikKKwkJa3hkcnByb2NfdCBlbmNvZGUsIHN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqcCwgdm9pZCAqb2JqKQogewogCXN0cnVjdCB4ZHJfYnVmCSpzbmRfYnVmID0gJnJxc3RwLT5ycV9zbmRfYnVmOwogCXUzMgkJb2Zmc2V0OwogCXUzMiAgICAgICAgICAgICBtYWpfc3RhdDsKIAlpbnQJCXN0YXR1czsKLQl1MzIJCSpvcGFxdWVfbGVuOworCV9fYmUzMgkJKm9wYXF1ZV9sZW47CiAJc3RydWN0IHBhZ2UJKippbnBhZ2VzOwogCWludAkJZmlyc3Q7CiAJaW50CQlwYWQ7CkBAIC0xMDk1LDcgKzEwOTYsNyBAQAogCiBzdGF0aWMgaW50CiBnc3Nfd3JhcF9yZXEoc3RydWN0IHJwY190YXNrICp0YXNrLAotCSAgICAga3hkcnByb2NfdCBlbmNvZGUsIHZvaWQgKnJxc3RwLCB1MzIgKnAsIHZvaWQgKm9iaikKKwkgICAgIGt4ZHJwcm9jX3QgZW5jb2RlLCB2b2lkICpycXN0cCwgX19iZTMyICpwLCB2b2lkICpvYmopCiB7CiAJc3RydWN0IHJwY19jcmVkICpjcmVkID0gdGFzay0+dGtfbXNnLnJwY19jcmVkOwogCXN0cnVjdCBnc3NfY3JlZAkqZ3NzX2NyZWQgPSBjb250YWluZXJfb2YoY3JlZCwgc3RydWN0IGdzc19jcmVkLApAQCAtMTEzMiw3ICsxMTMzLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQKIGdzc191bndyYXBfcmVzcF9pbnRlZyhzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQsIHN0cnVjdCBnc3NfY2xfY3R4ICpjdHgsCi0JCXN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIHUzMiAqKnApCisJCXN0cnVjdCBycGNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqKnApCiB7CiAJc3RydWN0IHhkcl9idWYJKnJjdl9idWYgPSAmcnFzdHAtPnJxX3Jjdl9idWY7CiAJc3RydWN0IHhkcl9idWYgaW50ZWdfYnVmOwpAQCAtMTE2OSw3ICsxMTcwLDcgQEAKIAogc3RhdGljIGlubGluZSBpbnQKIGdzc191bndyYXBfcmVzcF9wcml2KHN0cnVjdCBycGNfY3JlZCAqY3JlZCwgc3RydWN0IGdzc19jbF9jdHggKmN0eCwKLQkJc3RydWN0IHJwY19ycXN0ICpycXN0cCwgdTMyICoqcCkKKwkJc3RydWN0IHJwY19ycXN0ICpycXN0cCwgX19iZTMyICoqcCkKIHsKIAlzdHJ1Y3QgeGRyX2J1ZiAgKnJjdl9idWYgPSAmcnFzdHAtPnJxX3Jjdl9idWY7CiAJdTMyIG9mZnNldDsKQEAgLTExOTgsMTMgKzExOTksMTMgQEAKIAogc3RhdGljIGludAogZ3NzX3Vud3JhcF9yZXNwKHN0cnVjdCBycGNfdGFzayAqdGFzaywKLQkJa3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCB1MzIgKnAsIHZvaWQgKm9iaikKKwkJa3hkcnByb2NfdCBkZWNvZGUsIHZvaWQgKnJxc3RwLCBfX2JlMzIgKnAsIHZvaWQgKm9iaikKIHsKIAlzdHJ1Y3QgcnBjX2NyZWQgKmNyZWQgPSB0YXNrLT50a19tc2cucnBjX2NyZWQ7CiAJc3RydWN0IGdzc19jcmVkICpnc3NfY3JlZCA9IGNvbnRhaW5lcl9vZihjcmVkLCBzdHJ1Y3QgZ3NzX2NyZWQsCiAJCQlnY19iYXNlKTsKIAlzdHJ1Y3QgZ3NzX2NsX2N0eCAqY3R4ID0gZ3NzX2NyZWRfZ2V0X2N0eChjcmVkKTsKLQl1MzIJCSpzYXZlZHAgPSBwOworCV9fYmUzMgkJKnNhdmVkcCA9IHA7CiAJc3RydWN0IGt2ZWMJKmhlYWQgPSAoKHN0cnVjdCBycGNfcnFzdCAqKXJxc3RwKS0+cnFfcmN2X2J1Zi5oZWFkOwogCWludAkJc2F2ZWRsZW4gPSBoZWFkLT5pb3ZfbGVuOwogCWludCAgICAgICAgICAgICBzdGF0dXMgPSAtRUlPOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV9zZWFsLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwppbmRleCAyZjMxMjE2Li4wODYwMWVlIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3NlYWwuYwpAQCAtMTE1LDcgKzExNSw3IEBACiAJa3JiNV9oZHIgPSBwdHIgLSAyOwogCW1zZ19zdGFydCA9IGtyYjVfaGRyICsgMjQ7CiAKLQkqKHUxNiAqKShrcmI1X2hkciArIDIpID0gaHRvbnMoY3R4LT5zaWduYWxnKTsKKwkqKF9fYmUxNiAqKShrcmI1X2hkciArIDIpID0gaHRvbnMoY3R4LT5zaWduYWxnKTsKIAltZW1zZXQoa3JiNV9oZHIgKyA0LCAweGZmLCA0KTsKIAogCWlmIChtYWtlX2NoZWNrc3VtKGNoZWNrc3VtX3R5cGUsIGtyYjVfaGRyLCA4LCB0ZXh0LCAwLCAmbWQ1Y2tzdW0pKQpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9nc3Nfa3JiNV93cmFwLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYwppbmRleCBmMTc5NDE1Li5jYzQ1YzE2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYworKysgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL2dzc19rcmI1X3dyYXAuYwpAQCAtMTc3LDkgKzE3Nyw5IEBACiAJbXNnX3N0YXJ0ID0ga3JiNV9oZHIgKyAyNDsKIAkvKiBYWFhKQkY6ICovIEJVR19PTihidWYtPmhlYWRbMF0uaW92X2Jhc2UgKyBvZmZzZXQgKyBoZWFkbGVuICE9IG1zZ19zdGFydCArIGJsb2Nrc2l6ZSk7CiAKLQkqKHUxNiAqKShrcmI1X2hkciArIDIpID0gaHRvbnMoa2N0eC0+c2lnbmFsZyk7CisJKihfX2JlMTYgKikoa3JiNV9oZHIgKyAyKSA9IGh0b25zKGtjdHgtPnNpZ25hbGcpOwogCW1lbXNldChrcmI1X2hkciArIDQsIDB4ZmYsIDQpOwotCSoodTE2ICopKGtyYjVfaGRyICsgNCkgPSBodG9ucyhrY3R4LT5zZWFsYWxnKTsKKwkqKF9fYmUxNiAqKShrcmI1X2hkciArIDQpID0gaHRvbnMoa2N0eC0+c2VhbGFsZyk7CiAKIAltYWtlX2NvbmZvdW5kZXIobXNnX3N0YXJ0LCBibG9ja3NpemUpOwogCmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMgYi9uZXQvc3VucnBjL2F1dGhfZ3NzL3N2Y2F1dGhfZ3NzLmMKaW5kZXggOTQyMTdlYy4uNjM4YzBiNSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX2dzcy9zdmNhdXRoX2dzcy5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9nc3Mvc3ZjYXV0aF9nc3MuYwpAQCAtNjA3LDcgKzYwNyw3IEBACiAKIAlpZiAoYXJndi0+aW92X2xlbiA8IDQpCiAJCXJldHVybiAtMTsKLQlvLT5sZW4gPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsKKwlvLT5sZW4gPSBzdmNfZ2V0bmwoYXJndik7CiAJbCA9IHJvdW5kX3VwX3RvX3F1YWQoby0+bGVuKTsKIAlpZiAoYXJndi0+aW92X2xlbiA8IGwpCiAJCXJldHVybiAtMTsKQEAgLTYyMCwxNyArNjIwLDE3IEBACiBzdGF0aWMgaW5saW5lIGludAogc3ZjX3NhZmVfcHV0bmV0b2JqKHN0cnVjdCBrdmVjICpyZXN2LCBzdHJ1Y3QgeGRyX25ldG9iaiAqbykKIHsKLQl1MzIgKnA7CisJdTggKnA7CiAKIAlpZiAocmVzdi0+aW92X2xlbiArIDQgPiBQQUdFX1NJWkUpCiAJCXJldHVybiAtMTsKLQlzdmNfcHV0dTMyKHJlc3YsIGh0b25sKG8tPmxlbikpOworCXN2Y19wdXRubChyZXN2LCBvLT5sZW4pOwogCXAgPSByZXN2LT5pb3ZfYmFzZSArIHJlc3YtPmlvdl9sZW47CiAJcmVzdi0+aW92X2xlbiArPSByb3VuZF91cF90b19xdWFkKG8tPmxlbik7CiAJaWYgKHJlc3YtPmlvdl9sZW4gPiBQQUdFX1NJWkUpCiAJCXJldHVybiAtMTsKIAltZW1jcHkocCwgby0+ZGF0YSwgby0+bGVuKTsKLQltZW1zZXQoKHU4ICopcCArIG8tPmxlbiwgMCwgcm91bmRfdXBfdG9fcXVhZChvLT5sZW4pIC0gby0+bGVuKTsKKwltZW1zZXQocCArIG8tPmxlbiwgMCwgcm91bmRfdXBfdG9fcXVhZChvLT5sZW4pIC0gby0+bGVuKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNjQwLDcgKzY0MCw3IEBACiAgKi8KIHN0YXRpYyBpbnQKIGdzc192ZXJpZnlfaGVhZGVyKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCByc2MgKnJzY2ksCi0JCSAgdTMyICpycGNzdGFydCwgc3RydWN0IHJwY19nc3Nfd2lyZV9jcmVkICpnYywgdTMyICphdXRocCkKKwkJICBfX2JlMzIgKnJwY3N0YXJ0LCBzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQgKmdjLCBfX2JlMzIgKmF1dGhwKQogewogCXN0cnVjdCBnc3NfY3R4CQkqY3R4X2lkID0gcnNjaS0+bWVjaGN0eDsKIAlzdHJ1Y3QgeGRyX2J1ZgkJcnBjaGRyOwpAQCAtNjU3LDcgKzY1Nyw3IEBACiAJKmF1dGhwID0gcnBjX2F1dGhlcnJfYmFkdmVyZjsKIAlpZiAoYXJndi0+aW92X2xlbiA8IDQpCiAJCXJldHVybiBTVkNfREVOSUVEOwotCWZsYXZvciA9IG50b2hsKHN2Y19nZXR1MzIoYXJndikpOworCWZsYXZvciA9IHN2Y19nZXRubChhcmd2KTsKIAlpZiAoZmxhdm9yICE9IFJQQ19BVVRIX0dTUykKIAkJcmV0dXJuIFNWQ19ERU5JRUQ7CiAJaWYgKHN2Y19zYWZlX2dldG5ldG9iaihhcmd2LCAmY2hlY2tzdW0pKQpAQCAtNjg3LDkgKzY4Nyw5IEBACiBzdGF0aWMgaW50CiBnc3Nfd3JpdGVfbnVsbF92ZXJmKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHApCiB7Ci0JdTMyICAgICAqcDsKKwlfX2JlMzIgICAgICpwOwogCi0Jc3ZjX3B1dHUzMihycXN0cC0+cnFfcmVzLmhlYWQsIGh0b25sKFJQQ19BVVRIX05VTEwpKTsKKwlzdmNfcHV0bmwocnFzdHAtPnJxX3Jlcy5oZWFkLCBSUENfQVVUSF9OVUxMKTsKIAlwID0gcnFzdHAtPnJxX3Jlcy5oZWFkLT5pb3ZfYmFzZSArIHJxc3RwLT5ycV9yZXMuaGVhZC0+aW92X2xlbjsKIAkvKiBkb24ndCByZWFsbHkgbmVlZCB0byBjaGVjayBpZiBoZWFkLT5pb3ZfbGVuID4gUEFHRV9TSVpFIC4uLiAqLwogCSpwKysgPSAwOwpAQCAtNzAxLDE0ICs3MDEsMTQgQEAKIHN0YXRpYyBpbnQKIGdzc193cml0ZV92ZXJmKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHN0cnVjdCBnc3NfY3R4ICpjdHhfaWQsIHUzMiBzZXEpCiB7Ci0JdTMyCQkJeGRyX3NlcTsKKwlfX2JlMzIJCQl4ZHJfc2VxOwogCXUzMgkJCW1hal9zdGF0OwogCXN0cnVjdCB4ZHJfYnVmCQl2ZXJmX2RhdGE7CiAJc3RydWN0IHhkcl9uZXRvYmoJbWljOwotCXUzMgkJCSpwOworCV9fYmUzMgkJCSpwOwogCXN0cnVjdCBrdmVjCQlpb3Y7CiAKLQlzdmNfcHV0dTMyKHJxc3RwLT5ycV9yZXMuaGVhZCwgaHRvbmwoUlBDX0FVVEhfR1NTKSk7CisJc3ZjX3B1dG5sKHJxc3RwLT5ycV9yZXMuaGVhZCwgUlBDX0FVVEhfR1NTKTsKIAl4ZHJfc2VxID0gaHRvbmwoc2VxKTsKIAogCWlvdi5pb3ZfYmFzZSA9ICZ4ZHJfc2VxOwpAQCAtNzgyLDcgKzc4Miw3IEBACiBzdGF0aWMgaW5saW5lIGludAogcmVhZF91MzJfZnJvbV94ZHJfYnVmKHN0cnVjdCB4ZHJfYnVmICpidWYsIGludCBiYXNlLCB1MzIgKm9iaikKIHsKLQl1MzIgICAgIHJhdzsKKwlfX2JlMzIgIHJhdzsKIAlpbnQgICAgIHN0YXR1czsKIAogCXN0YXR1cyA9IHJlYWRfYnl0ZXNfZnJvbV94ZHJfYnVmKGJ1ZiwgYmFzZSwgJnJhdywgc2l6ZW9mKCpvYmopKTsKQEAgLTgwNSw3ICs4MDUsNyBAQAogCXN0cnVjdCB4ZHJfbmV0b2JqIG1pYzsKIAlzdHJ1Y3QgeGRyX2J1ZiBpbnRlZ19idWY7CiAKLQlpbnRlZ19sZW4gPSBudG9obChzdmNfZ2V0dTMyKCZidWYtPmhlYWRbMF0pKTsKKwlpbnRlZ19sZW4gPSBzdmNfZ2V0bmwoJmJ1Zi0+aGVhZFswXSk7CiAJaWYgKGludGVnX2xlbiAmIDMpCiAJCWdvdG8gb3V0OwogCWlmIChpbnRlZ19sZW4gPiBidWYtPmxlbikKQEAgLTgyNSw3ICs4MjUsNyBAQAogCW1hal9zdGF0ID0gZ3NzX3ZlcmlmeV9taWMoY3R4LCAmaW50ZWdfYnVmLCAmbWljKTsKIAlpZiAobWFqX3N0YXQgIT0gR1NTX1NfQ09NUExFVEUpCiAJCWdvdG8gb3V0OwotCWlmIChudG9obChzdmNfZ2V0dTMyKCZidWYtPmhlYWRbMF0pKSAhPSBzZXEpCisJaWYgKHN2Y19nZXRubCgmYnVmLT5oZWFkWzBdKSAhPSBzZXEpCiAJCWdvdG8gb3V0OwogCXN0YXQgPSAwOwogb3V0OgpAQCAtODU3LDcgKzg1Nyw3IEBACiAKIAlycXN0cC0+cnFfc2VuZGZpbGVfb2sgPSAwOwogCi0JcHJpdl9sZW4gPSBudG9obChzdmNfZ2V0dTMyKCZidWYtPmhlYWRbMF0pKTsKKwlwcml2X2xlbiA9IHN2Y19nZXRubCgmYnVmLT5oZWFkWzBdKTsKIAlpZiAocnFzdHAtPnJxX2RlZmVycmVkKSB7CiAJCS8qIEFscmVhZHkgZGVjcnlwdGVkIGxhc3QgdGltZSB0aHJvdWdoISBUaGUgc2VxdWVuY2UgbnVtYmVyCiAJCSAqIGNoZWNrIGF0IG91dF9zZXEgaXMgdW5uZWNlc3NhcnkgYnV0IGhhcm1sZXNzOiAqLwpAQCAtODk1LDcgKzg5NSw3IEBACiAJaWYgKG1hal9zdGF0ICE9IEdTU19TX0NPTVBMRVRFKQogCQlyZXR1cm4gLUVJTlZBTDsKIG91dF9zZXE6Ci0JaWYgKG50b2hsKHN2Y19nZXR1MzIoJmJ1Zi0+aGVhZFswXSkpICE9IHNlcSkKKwlpZiAoc3ZjX2dldG5sKCZidWYtPmhlYWRbMF0pICE9IHNlcSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJcmV0dXJuIDA7CiB9CkBAIC05MDUsNyArOTA1LDcgQEAKIAlzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQJY2xjcmVkOwogCS8qIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgcHJvY2VkdXJlLXNwZWNpZmljIHJlc3VsdHMsCiAJICogd2hpY2ggbWF5IGJlIGVuY3J5cHRlZC9jaGVja3N1bW1lZCBpbiBzdmNhdXRoX2dzc19yZWxlYXNlOiAqLwotCXUzMgkJCQkqYm9keV9zdGFydDsKKwlfX2JlMzIJCQkJKmJvZHlfc3RhcnQ7CiAJc3RydWN0IHJzYwkJCSpyc2NpOwogfTsKIApAQCAtOTQ2LDcgKzk0Niw3IEBACiAgKiByZXNwb25zZSBoZXJlIGFuZCByZXR1cm4gU1ZDX0NPTVBMRVRFLgogICovCiBzdGF0aWMgaW50Ci1zdmNhdXRoX2dzc19hY2NlcHQoc3RydWN0IHN2Y19ycXN0ICpycXN0cCwgdTMyICphdXRocCkKK3N2Y2F1dGhfZ3NzX2FjY2VwdChzdHJ1Y3Qgc3ZjX3Jxc3QgKnJxc3RwLCBfX2JlMzIgKmF1dGhwKQogewogCXN0cnVjdCBrdmVjCSphcmd2ID0gJnJxc3RwLT5ycV9hcmcuaGVhZFswXTsKIAlzdHJ1Y3Qga3ZlYwkqcmVzdiA9ICZycXN0cC0+cnFfcmVzLmhlYWRbMF07CkBAIC05NTYsOCArOTU2LDggQEAKIAlzdHJ1Y3QgcnBjX2dzc193aXJlX2NyZWQgKmdjOwogCXN0cnVjdCByc2MJKnJzY2kgPSBOVUxMOwogCXN0cnVjdCByc2kJKnJzaXAsIHJzaWtleTsKLQl1MzIJCSpycGNzdGFydDsKLQl1MzIJCSpyZWplY3Rfc3RhdCA9IHJlc3YtPmlvdl9iYXNlICsgcmVzdi0+aW92X2xlbjsKKwlfX2JlMzIJCSpycGNzdGFydDsKKwlfX2JlMzIJCSpyZWplY3Rfc3RhdCA9IHJlc3YtPmlvdl9iYXNlICsgcmVzdi0+aW92X2xlbjsKIAlpbnQJCXJldDsKIAogCWRwcmludGsoIlJQQzogICAgICBzdmNhdXRoX2dzczogYXJndi0+aW92X2xlbiA9ICV6ZFxuIixhcmd2LT5pb3ZfbGVuKTsKQEAgLTk4NSwxMiArOTg1LDEyIEBACiAKIAlpZiAoYXJndi0+aW92X2xlbiA8IDUgKiA0KQogCQlnb3RvIGF1dGhfZXJyOwotCWNybGVuID0gbnRvaGwoc3ZjX2dldHUzMihhcmd2KSk7Ci0JaWYgKG50b2hsKHN2Y19nZXR1MzIoYXJndikpICE9IFJQQ19HU1NfVkVSU0lPTikKKwljcmxlbiA9IHN2Y19nZXRubChhcmd2KTsKKwlpZiAoc3ZjX2dldG5sKGFyZ3YpICE9IFJQQ19HU1NfVkVSU0lPTikKIAkJZ290byBhdXRoX2VycjsKLQlnYy0+Z2NfcHJvYyA9IG50b2hsKHN2Y19nZXR1MzIoYXJndikpOwotCWdjLT5nY19zZXEgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsKLQlnYy0+Z2Nfc3ZjID0gbnRvaGwoc3ZjX2dldHUzMihhcmd2KSk7CisJZ2MtPmdjX3Byb2MgPSBzdmNfZ2V0bmwoYXJndik7CisJZ2MtPmdjX3NlcSA9IHN2Y19nZXRubChhcmd2KTsKKwlnYy0+Z2Nfc3ZjID0gc3ZjX2dldG5sKGFyZ3YpOwogCWlmIChzdmNfc2FmZV9nZXRuZXRvYmooYXJndiwgJmdjLT5nY19jdHgpKQogCQlnb3RvIGF1dGhfZXJyOwogCWlmIChjcmxlbiAhPSByb3VuZF91cF90b19xdWFkKGdjLT5nY19jdHgubGVuKSArIDUgKiA0KQpAQCAtMTAxNiw5ICsxMDE2LDkgQEAKIAljYXNlIFJQQ19HU1NfUFJPQ19DT05USU5VRV9JTklUOgogCQlpZiAoYXJndi0+aW92X2xlbiA8IDIgKiA0KQogCQkJZ290byBhdXRoX2VycjsKLQkJaWYgKG50b2hsKHN2Y19nZXR1MzIoYXJndikpICE9IFJQQ19BVVRIX05VTEwpCisJCWlmIChzdmNfZ2V0bmwoYXJndikgIT0gUlBDX0FVVEhfTlVMTCkKIAkJCWdvdG8gYXV0aF9lcnI7Ci0JCWlmIChudG9obChzdmNfZ2V0dTMyKGFyZ3YpKSAhPSAwKQorCQlpZiAoc3ZjX2dldG5sKGFyZ3YpICE9IDApCiAJCQlnb3RvIGF1dGhfZXJyOwogCQlicmVhazsKIAljYXNlIFJQQ19HU1NfUFJPQ19EQVRBOgpAQCAtMTA3NiwxNCArMTA3NiwxNCBAQAogCQkJCWdvdG8gZHJvcDsKIAkJCWlmIChyZXN2LT5pb3ZfbGVuICsgNCA+IFBBR0VfU0laRSkKIAkJCQlnb3RvIGRyb3A7Ci0JCQlzdmNfcHV0dTMyKHJlc3YsIHJwY19zdWNjZXNzKTsKKwkJCXN2Y19wdXRubChyZXN2LCBSUENfU1VDQ0VTUyk7CiAJCQlpZiAoc3ZjX3NhZmVfcHV0bmV0b2JqKHJlc3YsICZyc2lwLT5vdXRfaGFuZGxlKSkKIAkJCQlnb3RvIGRyb3A7CiAJCQlpZiAocmVzdi0+aW92X2xlbiArIDMgKiA0ID4gUEFHRV9TSVpFKQogCQkJCWdvdG8gZHJvcDsKLQkJCXN2Y19wdXR1MzIocmVzdiwgaHRvbmwocnNpcC0+bWFqb3Jfc3RhdHVzKSk7Ci0JCQlzdmNfcHV0dTMyKHJlc3YsIGh0b25sKHJzaXAtPm1pbm9yX3N0YXR1cykpOwotCQkJc3ZjX3B1dHUzMihyZXN2LCBodG9ubChHU1NfU0VRX1dJTikpOworCQkJc3ZjX3B1dG5sKHJlc3YsIHJzaXAtPm1ham9yX3N0YXR1cyk7CisJCQlzdmNfcHV0bmwocmVzdiwgcnNpcC0+bWlub3Jfc3RhdHVzKTsKKwkJCXN2Y19wdXRubChyZXN2LCBHU1NfU0VRX1dJTik7CiAJCQlpZiAoc3ZjX3NhZmVfcHV0bmV0b2JqKHJlc3YsICZyc2lwLT5vdXRfdG9rZW4pKQogCQkJCWdvdG8gZHJvcDsKIAkJCXJxc3RwLT5ycV9jbGllbnQgPSBOVUxMOwpAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIAkJc2V0X2JpdChDQUNIRV9ORUdBVElWRSwgJnJzY2ktPmguZmxhZ3MpOwogCQlpZiAocmVzdi0+aW92X2xlbiArIDQgPiBQQUdFX1NJWkUpCiAJCQlnb3RvIGRyb3A7Ci0JCXN2Y19wdXR1MzIocmVzdiwgcnBjX3N1Y2Nlc3MpOworCQlzdmNfcHV0bmwocmVzdiwgUlBDX1NVQ0NFU1MpOwogCQlnb3RvIGNvbXBsZXRlOwogCWNhc2UgUlBDX0dTU19QUk9DX0RBVEE6CiAJCSphdXRocCA9IHJwY3NlY19nc3NlcnJfY3R4cHJvYmxlbTsKQEAgLTExMTEsOCArMTExMSw4IEBACiAJCQkJZ290byBhdXRoX2VycjsKIAkJCS8qIHBsYWNlaG9sZGVycyBmb3IgbGVuZ3RoIGFuZCBzZXEuIG51bWJlcjogKi8KIAkJCXN2Y2RhdGEtPmJvZHlfc3RhcnQgPSByZXN2LT5pb3ZfYmFzZSArIHJlc3YtPmlvdl9sZW47Ci0JCQlzdmNfcHV0dTMyKHJlc3YsIDApOwotCQkJc3ZjX3B1dHUzMihyZXN2LCAwKTsKKwkJCXN2Y19wdXRubChyZXN2LCAwKTsKKwkJCXN2Y19wdXRubChyZXN2LCAwKTsKIAkJCWJyZWFrOwogCQljYXNlIFJQQ19HU1NfU1ZDX1BSSVZBQ1k6CiAJCQlpZiAodW53cmFwX3ByaXZfZGF0YShycXN0cCwgJnJxc3RwLT5ycV9hcmcsCkBAIC0xMTIwLDggKzExMjAsOCBAQAogCQkJCWdvdG8gYXV0aF9lcnI7CiAJCQkvKiBwbGFjZWhvbGRlcnMgZm9yIGxlbmd0aCBhbmQgc2VxLiBudW1iZXI6ICovCiAJCQlzdmNkYXRhLT5ib2R5X3N0YXJ0ID0gcmVzdi0+aW92X2Jhc2UgKyByZXN2LT5pb3ZfbGVuOwotCQkJc3ZjX3B1dHUzMihyZXN2LCAwKTsKLQkJCXN2Y19wdXR1MzIocmVzdiwgMCk7CisJCQlzdmNfcHV0bmwocmVzdiwgMCk7CisJCQlzdmNfcHV0bmwocmVzdiwgMCk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWdvdG8gYXV0aF9lcnI7CkBAIC0xMTU2LDcgKzExNTYsNyBAQAogCXN0cnVjdCB4ZHJfYnVmIGludGVnX2J1ZjsKIAlzdHJ1Y3QgeGRyX25ldG9iaiBtaWM7CiAJc3RydWN0IGt2ZWMgKnJlc3Y7Ci0JdTMyICpwOworCV9fYmUzMiAqcDsKIAlpbnQgaW50ZWdfb2Zmc2V0LCBpbnRlZ19sZW47CiAJaW50IHN0YXQgPSAtRUlOVkFMOwogCkBAIC0xMTk5LDcgKzExOTksNyBAQAogCW1pYy5kYXRhID0gKHU4ICopcmVzdi0+aW92X2Jhc2UgKyByZXN2LT5pb3ZfbGVuICsgNDsKIAlpZiAoZ3NzX2dldF9taWMoZ3NkLT5yc2NpLT5tZWNoY3R4LCAmaW50ZWdfYnVmLCAmbWljKSkKIAkJZ290byBvdXRfZXJyOwotCXN2Y19wdXR1MzIocmVzdiwgaHRvbmwobWljLmxlbikpOworCXN2Y19wdXRubChyZXN2LCBtaWMubGVuKTsKIAltZW1zZXQobWljLmRhdGEgKyBtaWMubGVuLCAwLAogCQkJcm91bmRfdXBfdG9fcXVhZChtaWMubGVuKSAtIG1pYy5sZW4pOwogCXJlc3YtPmlvdl9sZW4gKz0gWERSX1FVQURMRU4obWljLmxlbikgPDwgMjsKQEAgLTEyMTksOCArMTIxOSw4IEBACiAJc3RydWN0IHJwY19nc3Nfd2lyZV9jcmVkICpnYyA9ICZnc2QtPmNsY3JlZDsKIAlzdHJ1Y3QgeGRyX2J1ZiAqcmVzYnVmID0gJnJxc3RwLT5ycV9yZXM7CiAJc3RydWN0IHBhZ2UgKippbnBhZ2VzID0gTlVMTDsKLQl1MzIgKnA7Ci0JaW50IG9mZnNldCwgKmxlbjsKKwlfX2JlMzIgKnAsICpsZW47CisJaW50IG9mZnNldDsKIAlpbnQgcGFkOwogCiAJcCA9IGdzZC0+Ym9keV9zdGFydDsKQEAgLTEyNjQsNyArMTI2NCw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCSpsZW4gPSBodG9ubChyZXNidWYtPmxlbiAtIG9mZnNldCk7CiAJcGFkID0gMyAtICgocmVzYnVmLT5sZW4gLSBvZmZzZXQgLSAxKSYzKTsKLQlwID0gKHUzMiAqKShyZXNidWYtPnRhaWxbMF0uaW92X2Jhc2UgKyByZXNidWYtPnRhaWxbMF0uaW92X2xlbik7CisJcCA9IChfX2JlMzIgKikocmVzYnVmLT50YWlsWzBdLmlvdl9iYXNlICsgcmVzYnVmLT50YWlsWzBdLmlvdl9sZW4pOwogCW1lbXNldChwLCAwLCBwYWQpOwogCXJlc2J1Zi0+dGFpbFswXS5pb3ZfbGVuICs9IHBhZDsKIAlyZXNidWYtPmxlbiArPSBwYWQ7CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jIGIvbmV0L3N1bnJwYy9hdXRoX251bGwuYwppbmRleCAyZWNjZmZhLi4zYmUyNTdkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2F1dGhfbnVsbC5jCisrKyBiL25ldC9zdW5ycGMvYXV0aF9udWxsLmMKQEAgLTYwLDggKzYwLDggQEAKIC8qCiAgKiBNYXJzaGFsIGNyZWRlbnRpYWwuCiAgKi8KLXN0YXRpYyB1MzIgKgotbnVsX21hcnNoYWwoc3RydWN0IHJwY190YXNrICp0YXNrLCB1MzIgKnApCitzdGF0aWMgX19iZTMyICoKK251bF9tYXJzaGFsKHN0cnVjdCBycGNfdGFzayAqdGFzaywgX19iZTMyICpwKQogewogCSpwKysgPSBodG9ubChSUENfQVVUSF9OVUxMKTsKIAkqcCsrID0gMDsKQEAgLTgxLDggKzgxLDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiAqCi1udWxfdmFsaWRhdGUoc3RydWN0IHJwY190YXNrICp0YXNrLCB1MzIgKnApCitzdGF0aWMgX19iZTMyICoKK251bF92YWxpZGF0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIF9fYmUzMiAqcCkKIHsKIAlycGNfYXV0aGZsYXZvcl90CWZsYXZvcjsKIAl1MzIJCQlzaXplOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9hdXRoX3VuaXguYyBiL25ldC9zdW5ycGMvYXV0aF91bml4LmMKaW5kZXggNzRjNzQwNi4uZjdmOTkwYyAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9hdXRoX3VuaXguYworKysgYi9uZXQvc3VucnBjL2F1dGhfdW5peC5jCkBAIC0xMzcsMTIgKzEzNywxMiBAQAogICogTWFyc2hhbCBjcmVkZW50aWFscy4KICAqIE1heWJlIHdlIHNob3VsZCBrZWVwIGEgY2FjaGVkIGNyZWRlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMuCiAgKi8KLXN0YXRpYyB1MzIgKgotdW54X21hcnNoYWwoc3RydWN0IHJwY190YXNrICp0YXNrLCB1MzIgKnApCitzdGF0aWMgX19iZTMyICoKK3VueF9tYXJzaGFsKHN0cnVjdCBycGNfdGFzayAqdGFzaywgX19iZTMyICpwKQogewogCXN0cnVjdCBycGNfY2xudAkqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKIAlzdHJ1Y3QgdW54X2NyZWQJKmNyZWQgPSAoc3RydWN0IHVueF9jcmVkICopIHRhc2stPnRrX21zZy5ycGNfY3JlZDsKLQl1MzIJCSpiYXNlLCAqaG9sZDsKKwlfX2JlMzIJCSpiYXNlLCAqaG9sZDsKIAlpbnQJCWk7CiAKIAkqcCsrID0gaHRvbmwoUlBDX0FVVEhfVU5JWCk7CkBAIC0xNzgsOCArMTc4LDggQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUzMiAqCi11bnhfdmFsaWRhdGUoc3RydWN0IHJwY190YXNrICp0YXNrLCB1MzIgKnApCitzdGF0aWMgX19iZTMyICoKK3VueF92YWxpZGF0ZShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2ssIF9fYmUzMiAqcCkKIHsKIAlycGNfYXV0aGZsYXZvcl90CWZsYXZvcjsKIAl1MzIJCQlzaXplOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9jbG50LmMgYi9uZXQvc3VucnBjL2NsbnQuYwppbmRleCAwODRhMGFkLi4xMjRmZjBjIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NsbnQuYworKysgYi9uZXQvc3VucnBjL2NsbnQuYwpAQCAtNjAsOCArNjAsOCBAQAogc3RhdGljIHZvaWQJY2FsbF90aW1lb3V0KHN0cnVjdCBycGNfdGFzayAqdGFzayk7CiBzdGF0aWMgdm9pZAljYWxsX2Nvbm5lY3Qoc3RydWN0IHJwY190YXNrICp0YXNrKTsKIHN0YXRpYyB2b2lkCWNhbGxfY29ubmVjdF9zdGF0dXMoc3RydWN0IHJwY190YXNrICp0YXNrKTsKLXN0YXRpYyB1MzIgKgljYWxsX2hlYWRlcihzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwotc3RhdGljIHUzMiAqCWNhbGxfdmVyaWZ5KHN0cnVjdCBycGNfdGFzayAqdGFzayk7CitzdGF0aWMgX19iZTMyICoJY2FsbF9oZWFkZXIoc3RydWN0IHJwY190YXNrICp0YXNrKTsKK3N0YXRpYyBfX2JlMzIgKgljYWxsX3ZlcmlmeShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOwogCiAKIHN0YXRpYyBpbnQKQEAgLTc4Miw3ICs3ODIsNyBAQAogCXN0cnVjdCB4ZHJfYnVmICpyY3ZidWYgPSAmcmVxLT5ycV9yY3ZfYnVmOwogCXVuc2lnbmVkIGludAlidWZzaXo7CiAJa3hkcnByb2NfdAllbmNvZGU7Ci0JdTMyCQkqcDsKKwlfX2JlMzIJCSpwOwogCiAJZHByaW50aygiUlBDOiAlNGQgY2FsbF9lbmNvZGUgKHN0YXR1cyAlZClcbiIsIAogCQkJCXRhc2stPnRrX3BpZCwgdGFzay0+dGtfc3RhdHVzKTsKQEAgLTExMDAsNyArMTEwMCw3IEBACiAJc3RydWN0IHJwY19jbG50CSpjbG50ID0gdGFzay0+dGtfY2xpZW50OwogCXN0cnVjdCBycGNfcnFzdAkqcmVxID0gdGFzay0+dGtfcnFzdHA7CiAJa3hkcnByb2NfdAlkZWNvZGUgPSB0YXNrLT50a19tc2cucnBjX3Byb2MtPnBfZGVjb2RlOwotCXUzMgkJKnA7CisJX19iZTMyCQkqcDsKIAogCWRwcmludGsoIlJQQzogJTRkIGNhbGxfZGVjb2RlIChzdGF0dXMgJWQpXG4iLCAKIAkJCQl0YXNrLT50a19waWQsIHRhc2stPnRrX3N0YXR1cyk7CkBAIC0xMTk3LDEyICsxMTk3LDEyIEBACiAvKgogICogQ2FsbCBoZWFkZXIgc2VyaWFsaXphdGlvbgogICovCi1zdGF0aWMgdTMyICoKK3N0YXRpYyBfX2JlMzIgKgogY2FsbF9oZWFkZXIoc3RydWN0IHJwY190YXNrICp0YXNrKQogewogCXN0cnVjdCBycGNfY2xudCAqY2xudCA9IHRhc2stPnRrX2NsaWVudDsKIAlzdHJ1Y3QgcnBjX3Jxc3QJKnJlcSA9IHRhc2stPnRrX3Jxc3RwOwotCXUzMgkJKnAgPSByZXEtPnJxX3N2ZWNbMF0uaW92X2Jhc2U7CisJX19iZTMyCQkqcCA9IHJlcS0+cnFfc3ZlY1swXS5pb3ZfYmFzZTsKIAogCS8qIEZJWE1FOiBjaGVjayBidWZmZXIgc2l6ZT8gKi8KIApAQCAtMTIyMSwxMiArMTIyMSwxMyBAQAogLyoKICAqIFJlcGx5IGhlYWRlciB2ZXJpZmljYXRpb24KICAqLwotc3RhdGljIHUzMiAqCitzdGF0aWMgX19iZTMyICoKIGNhbGxfdmVyaWZ5KHN0cnVjdCBycGNfdGFzayAqdGFzaykKIHsKIAlzdHJ1Y3Qga3ZlYyAqaW92ID0gJnRhc2stPnRrX3Jxc3RwLT5ycV9yY3ZfYnVmLmhlYWRbMF07CiAJaW50IGxlbiA9IHRhc2stPnRrX3Jxc3RwLT5ycV9yY3ZfYnVmLmxlbiA+PiAyOwotCXUzMgkqcCA9IGlvdi0+aW92X2Jhc2UsIG47CisJX19iZTMyCSpwID0gaW92LT5pb3ZfYmFzZTsKKwl1MzIgbjsKIAlpbnQgZXJyb3IgPSAtRUFDQ0VTOwogCiAJaWYgKCh0YXNrLT50a19ycXN0cC0+cnFfcmN2X2J1Zi5sZW4gJiAzKSAhPSAwKSB7CkBAIC0xMzAzLDcgKzEzMDQsNyBAQAogCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYWxsX3ZlcmlmeTogYXV0aCBjaGVjayBmYWlsZWRcbiIpOwogCQlnb3RvIG91dF9nYXJiYWdlOwkJLyogYmFkIHZlcmlmaWVyLCByZXRyeSAqLwogCX0KLQlsZW4gPSBwIC0gKHUzMiAqKWlvdi0+aW92X2Jhc2UgLSAxOworCWxlbiA9IHAgLSAoX19iZTMyICopaW92LT5pb3ZfYmFzZSAtIDE7CiAJaWYgKGxlbiA8IDApCiAJCWdvdG8gb3V0X292ZXJmbG93OwogCXN3aXRjaCAoKG4gPSBudG9obCgqcCsrKSkpIHsKQEAgLTEzNTgsMTIgKzEzNTksMTIgQEAKIAlnb3RvIG91dF9nYXJiYWdlOwogfQogCi1zdGF0aWMgaW50IHJwY3Byb2NfZW5jb2RlX251bGwodm9pZCAqcnFzdHAsIHUzMiAqZGF0YSwgdm9pZCAqb2JqKQorc3RhdGljIGludCBycGNwcm9jX2VuY29kZV9udWxsKHZvaWQgKnJxc3RwLCBfX2JlMzIgKmRhdGEsIHZvaWQgKm9iaikKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBycGNwcm9jX2RlY29kZV9udWxsKHZvaWQgKnJxc3RwLCB1MzIgKmRhdGEsIHZvaWQgKm9iaikKK3N0YXRpYyBpbnQgcnBjcHJvY19kZWNvZGVfbnVsbCh2b2lkICpycXN0cCwgX19iZTMyICpkYXRhLCB2b2lkICpvYmopCiB7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3BtYXBfY2xudC5jIGIvbmV0L3N1bnJwYy9wbWFwX2NsbnQuYwppbmRleCBjMDQ2MDlkLi45MTlkNWJhIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3BtYXBfY2xudC5jCisrKyBiL25ldC9zdW5ycGMvcG1hcF9jbG50LmMKQEAgLTMwMCw3ICszMDAsNyBAQAogLyoKICAqIFhEUiBlbmNvZGUvZGVjb2RlIGZ1bmN0aW9ucyBmb3IgUE1BUAogICovCi1zdGF0aWMgaW50IHhkcl9lbmNvZGVfbWFwcGluZyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgdTMyICpwLCBzdHJ1Y3QgcG9ydG1hcF9hcmdzICptYXApCitzdGF0aWMgaW50IHhkcl9lbmNvZGVfbWFwcGluZyhzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCBzdHJ1Y3QgcG9ydG1hcF9hcmdzICptYXApCiB7CiAJZHByaW50aygiUlBDOiB4ZHJfZW5jb2RlX21hcHBpbmcoJXUsICV1LCAldSwgJXUpXG4iLAogCQltYXAtPnBtX3Byb2csIG1hcC0+cG1fdmVycywgbWFwLT5wbV9wcm90LCBtYXAtPnBtX3BvcnQpOwpAQCAtMzEzLDEzICszMTMsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB4ZHJfZGVjb2RlX3BvcnQoc3RydWN0IHJwY19ycXN0ICpyZXEsIHUzMiAqcCwgdW5zaWduZWQgc2hvcnQgKnBvcnRwKQorc3RhdGljIGludCB4ZHJfZGVjb2RlX3BvcnQoc3RydWN0IHJwY19ycXN0ICpyZXEsIF9fYmUzMiAqcCwgdW5zaWduZWQgc2hvcnQgKnBvcnRwKQogewogCSpwb3J0cCA9ICh1bnNpZ25lZCBzaG9ydCkgbnRvaGwoKnArKyk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgeGRyX2RlY29kZV9ib29sKHN0cnVjdCBycGNfcnFzdCAqcmVxLCB1MzIgKnAsIHVuc2lnbmVkIGludCAqYm9vbHApCitzdGF0aWMgaW50IHhkcl9kZWNvZGVfYm9vbChzdHJ1Y3QgcnBjX3Jxc3QgKnJlcSwgX19iZTMyICpwLCB1bnNpZ25lZCBpbnQgKmJvb2xwKQogewogCSpib29scCA9ICh1bnNpZ25lZCBpbnQpIG50b2hsKCpwKyspOwogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvbmV0L3N1bnJwYy9ycGNfcGlwZS5jIGIvbmV0L3N1bnJwYy9ycGNfcGlwZS5jCmluZGV4IGRmYTUwNGYuLjlhMGI0MWEgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvcnBjX3BpcGUuYworKysgYi9uZXQvc3VucnBjL3JwY19waXBlLmMKQEAgLTQ4OCwxNCArNDg4LDEzIEBACiAJCXJldHVybiBOVUxMOwogCWlub2RlLT5pX21vZGUgPSBtb2RlOwogCWlub2RlLT5pX3VpZCA9IGlub2RlLT5pX2dpZCA9IDA7Ci0JaW5vZGUtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAlpbm9kZS0+aV9ibG9ja3MgPSAwOwogCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAlzd2l0Y2gobW9kZSAmIFNfSUZNVCkgewogCQljYXNlIFNfSUZESVI6CiAJCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCQkJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwotCQkJaW5vZGUtPmlfbmxpbmsrKzsKKwkJCWluY19ubGluayhpbm9kZSk7CiAJCWRlZmF1bHQ6CiAJCQlicmVhazsKIAl9CkBAIC01NzIsNyArNTcxLDcgQEAKIAkJaWYgKHByaXZhdGUpCiAJCQlycGNfaW5vZGVfc2V0b3duZXIoaW5vZGUsIHByaXZhdGUpOwogCQlpZiAoU19JU0RJUihtb2RlKSkKLQkJCWRpci0+aV9ubGluaysrOworCQkJaW5jX25saW5rKGRpcik7CiAJCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCX0KIAltdXRleF91bmxvY2soJmRpci0+aV9tdXRleCk7CkBAIC01OTQsNyArNTkzLDcgQEAKIAkJZ290byBvdXRfZXJyOwogCWlub2RlLT5pX2lubyA9IGl1bmlxdWUoZGlyLT5pX3NiLCAxMDApOwogCWRfaW5zdGFudGlhdGUoZGVudHJ5LCBpbm9kZSk7Ci0JZGlyLT5pX25saW5rKys7CisJaW5jX25saW5rKGRpcik7CiAJaW5vZGVfZGlyX25vdGlmeShkaXIsIEROX0NSRUFURSk7CiAJcmV0dXJuIDA7CiBvdXRfZXJyOgpAQCAtODU4LDcgKzg1Nyw2IEBACiAKIHZvaWQgdW5yZWdpc3Rlcl9ycGNfcGlwZWZzKHZvaWQpCiB7Ci0JaWYgKGttZW1fY2FjaGVfZGVzdHJveShycGNfaW5vZGVfY2FjaGVwKSkKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUlBDOiB1bmFibGUgdG8gZnJlZSBpbm9kZSBjYWNoZVxuIik7CisJa21lbV9jYWNoZV9kZXN0cm95KHJwY19pbm9kZV9jYWNoZXApOwogCXVucmVnaXN0ZXJfZmlsZXN5c3RlbSgmcnBjX3BpcGVfZnNfdHlwZSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3NjaGVkLmMgYi9uZXQvc3VucnBjL3NjaGVkLmMKaW5kZXggNjM5MDQ2MS4uYTFhYjRlZSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zY2hlZC5jCisrKyBiL25ldC9zdW5ycGMvc2NoZWQuYwpAQCAtMTA1OSwxMCArMTA1OSwxMCBAQAogCQltZW1wb29sX2Rlc3Ryb3kocnBjX2J1ZmZlcl9tZW1wb29sKTsKIAlpZiAocnBjX3Rhc2tfbWVtcG9vbCkKIAkJbWVtcG9vbF9kZXN0cm95KHJwY190YXNrX21lbXBvb2wpOwotCWlmIChycGNfdGFza19zbGFicCAmJiBrbWVtX2NhY2hlX2Rlc3Ryb3kocnBjX3Rhc2tfc2xhYnApKQotCQlwcmludGsoS0VSTl9JTkZPICJycGNfdGFzazogbm90IGFsbCBzdHJ1Y3R1cmVzIHdlcmUgZnJlZWRcbiIpOwotCWlmIChycGNfYnVmZmVyX3NsYWJwICYmIGttZW1fY2FjaGVfZGVzdHJveShycGNfYnVmZmVyX3NsYWJwKSkKLQkJcHJpbnRrKEtFUk5fSU5GTyAicnBjX2J1ZmZlcnM6IG5vdCBhbGwgc3RydWN0dXJlcyB3ZXJlIGZyZWVkXG4iKTsKKwlpZiAocnBjX3Rhc2tfc2xhYnApCisJCWttZW1fY2FjaGVfZGVzdHJveShycGNfdGFza19zbGFicCk7CisJaWYgKHJwY19idWZmZXJfc2xhYnApCisJCWttZW1fY2FjaGVfZGVzdHJveShycGNfYnVmZmVyX3NsYWJwKTsKIH0KIAogaW50CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3N2Yy5jIGIvbmV0L3N1bnJwYy9zdmMuYwppbmRleCBiNzZhMjI3Li40NGI4ZDlkIDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N2Yy5jCisrKyBiL25ldC9zdW5ycGMvc3ZjLmMKQEAgLTI1NiwxMSArMjU2LDExIEBACiAJc3RydWN0IGt2ZWMgKgkJYXJndiA9ICZycXN0cC0+cnFfYXJnLmhlYWRbMF07CiAJc3RydWN0IGt2ZWMgKgkJcmVzdiA9ICZycXN0cC0+cnFfcmVzLmhlYWRbMF07CiAJa3hkcnByb2NfdAkJeGRyOwotCXUzMgkJCSpzdGF0cDsKLQl1MzIJCQlkaXIsIHByb2csIHZlcnMsIHByb2MsCi0JCQkJYXV0aF9zdGF0LCBycGNfc3RhdDsKKwlfX2JlMzIJCQkqc3RhdHA7CisJdTMyCQkJZGlyLCBwcm9nLCB2ZXJzLCBwcm9jOworCV9fYmUzMgkJCWF1dGhfc3RhdCwgcnBjX3N0YXQ7CiAJaW50CQkJYXV0aF9yZXM7Ci0JdTMyCQkJKmFjY2VwdF9zdGF0cDsKKwlfX2JlMzIJCQkqYWNjZXB0X3N0YXRwOwogCiAJcnBjX3N0YXQgPSBycGNfc3VjY2VzczsKIApAQCAtMjg0LDE2ICsyODQsMTYgQEAKIAlycXN0cC0+cnFfc2VuZGZpbGVfb2sgPSAxOwogCS8qIHRjcCBuZWVkcyBhIHNwYWNlIGZvciB0aGUgcmVjb3JkIGxlbmd0aC4uLiAqLwogCWlmIChycXN0cC0+cnFfcHJvdCA9PSBJUFBST1RPX1RDUCkKLQkJc3ZjX3B1dHUzMihyZXN2LCAwKTsKKwkJc3ZjX3B1dG5sKHJlc3YsIDApOwogCiAJcnFzdHAtPnJxX3hpZCA9IHN2Y19nZXR1MzIoYXJndik7CiAJc3ZjX3B1dHUzMihyZXN2LCBycXN0cC0+cnFfeGlkKTsKIAotCWRpciAgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsKLQl2ZXJzID0gbnRvaGwoc3ZjX2dldHUzMihhcmd2KSk7CisJZGlyICA9IHN2Y19nZXRubChhcmd2KTsKKwl2ZXJzID0gc3ZjX2dldG5sKGFyZ3YpOwogCiAJLyogRmlyc3Qgd29yZHMgb2YgcmVwbHk6ICovCi0Jc3ZjX3B1dHUzMihyZXN2LCB4ZHJfb25lKTsJCS8qIFJFUExZICovCisJc3ZjX3B1dG5sKHJlc3YsIDEpOwkJLyogUkVQTFkgKi8KIAogCWlmIChkaXIgIT0gMCkJCS8qIGRpcmVjdGlvbiAhPSBDQUxMICovCiAJCWdvdG8gZXJyX2JhZF9kaXI7CkBAIC0zMDMsMTEgKzMwMywxMSBAQAogCS8qIFNhdmUgcG9zaXRpb24gaW4gY2FzZSB3ZSBsYXRlciBkZWNpZGUgdG8gcmVqZWN0OiAqLwogCWFjY2VwdF9zdGF0cCA9IHJlc3YtPmlvdl9iYXNlICsgcmVzdi0+aW92X2xlbjsKIAotCXN2Y19wdXR1MzIocmVzdiwgeGRyX3plcm8pOwkJLyogQUNDRVBUICovCisJc3ZjX3B1dG5sKHJlc3YsIDApOwkJLyogQUNDRVBUICovCiAKLQlycXN0cC0+cnFfcHJvZyA9IHByb2cgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsJLyogcHJvZ3JhbSBudW1iZXIgKi8KLQlycXN0cC0+cnFfdmVycyA9IHZlcnMgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsJLyogdmVyc2lvbiBudW1iZXIgKi8KLQlycXN0cC0+cnFfcHJvYyA9IHByb2MgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsJLyogcHJvY2VkdXJlIG51bWJlciAqLworCXJxc3RwLT5ycV9wcm9nID0gcHJvZyA9IHN2Y19nZXRubChhcmd2KTsJLyogcHJvZ3JhbSBudW1iZXIgKi8KKwlycXN0cC0+cnFfdmVycyA9IHZlcnMgPSBzdmNfZ2V0bmwoYXJndik7CS8qIHZlcnNpb24gbnVtYmVyICovCisJcnFzdHAtPnJxX3Byb2MgPSBwcm9jID0gc3ZjX2dldG5sKGFyZ3YpOwkvKiBwcm9jZWR1cmUgbnVtYmVyICovCiAKIAlwcm9ncCA9IHNlcnYtPnN2X3Byb2dyYW07CiAKQEAgLTM2MSw3ICszNjEsNyBAQAogCiAJLyogQnVpbGQgdGhlIHJlcGx5IGhlYWRlci4gKi8KIAlzdGF0cCA9IHJlc3YtPmlvdl9iYXNlICtyZXN2LT5pb3ZfbGVuOwotCXN2Y19wdXR1MzIocmVzdiwgcnBjX3N1Y2Nlc3MpOwkJLyogUlBDX1NVQ0NFU1MgKi8KKwlzdmNfcHV0bmwocmVzdiwgUlBDX1NVQ0NFU1MpOwogCiAJLyogQnVtcCBwZXItcHJvY2VkdXJlIHN0YXRzIGNvdW50ZXIgKi8KIAlwcm9jcC0+cGNfY291bnQrKzsKQEAgLTQzOSwxMCArNDM5LDEwIEBACiAKIGVycl9iYWRfcnBjOgogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKLQlzdmNfcHV0dTMyKHJlc3YsIHhkcl9vbmUpOwkvKiBSRUpFQ1QgKi8KLQlzdmNfcHV0dTMyKHJlc3YsIHhkcl96ZXJvKTsJLyogUlBDX01JU01BVENIICovCi0Jc3ZjX3B1dHUzMihyZXN2LCB4ZHJfdHdvKTsJLyogT25seSBSUEN2MiBzdXBwb3J0ZWQgKi8KLQlzdmNfcHV0dTMyKHJlc3YsIHhkcl90d28pOworCXN2Y19wdXRubChyZXN2LCAxKTsJLyogUkVKRUNUICovCisJc3ZjX3B1dG5sKHJlc3YsIDApOwkvKiBSUENfTUlTTUFUQ0ggKi8KKwlzdmNfcHV0bmwocmVzdiwgMik7CS8qIE9ubHkgUlBDdjIgc3VwcG9ydGVkICovCisJc3ZjX3B1dG5sKHJlc3YsIDIpOwogCWdvdG8gc2VuZGl0OwogCiBlcnJfYmFkX2F1dGg6CkBAIC00NTAsMTUgKzQ1MCwxNSBAQAogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRhdXRoKys7CiAJLyogUmVzdG9yZSB3cml0ZSBwb2ludGVyIHRvIGxvY2F0aW9uIG9mIGFjY2VwdCBzdGF0dXM6ICovCiAJeGRyX3Jlc3NpemVfY2hlY2socnFzdHAsIGFjY2VwdF9zdGF0cCk7Ci0Jc3ZjX3B1dHUzMihyZXN2LCB4ZHJfb25lKTsJLyogUkVKRUNUICovCi0Jc3ZjX3B1dHUzMihyZXN2LCB4ZHJfb25lKTsJLyogQVVUSF9FUlJPUiAqLwotCXN2Y19wdXR1MzIocmVzdiwgYXV0aF9zdGF0KTsJLyogc3RhdHVzICovCisJc3ZjX3B1dG5sKHJlc3YsIDEpOwkvKiBSRUpFQ1QgKi8KKwlzdmNfcHV0bmwocmVzdiwgMSk7CS8qIEFVVEhfRVJST1IgKi8KKwlzdmNfcHV0bmwocmVzdiwgbnRvaGwoYXV0aF9zdGF0KSk7CS8qIHN0YXR1cyAqLwogCWdvdG8gc2VuZGl0OwogCiBlcnJfYmFkX3Byb2c6CiAJZHByaW50aygic3ZjOiB1bmtub3duIHByb2dyYW0gJWRcbiIsIHByb2cpOwogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKLQlzdmNfcHV0dTMyKHJlc3YsIHJwY19wcm9nX3VuYXZhaWwpOworCXN2Y19wdXRubChyZXN2LCBSUENfUFJPR19VTkFWQUlMKTsKIAlnb3RvIHNlbmRpdDsKIAogZXJyX2JhZF92ZXJzOgpAQCAtNDY2LDkgKzQ2Niw5IEBACiAJcHJpbnRrKCJzdmM6IHVua25vd24gdmVyc2lvbiAoJWQpXG4iLCB2ZXJzKTsKICNlbmRpZgogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKLQlzdmNfcHV0dTMyKHJlc3YsIHJwY19wcm9nX21pc21hdGNoKTsKLQlzdmNfcHV0dTMyKHJlc3YsIGh0b25sKHByb2dwLT5wZ19sb3ZlcnMpKTsKLQlzdmNfcHV0dTMyKHJlc3YsIGh0b25sKHByb2dwLT5wZ19oaXZlcnMpKTsKKwlzdmNfcHV0bmwocmVzdiwgUlBDX1BST0dfTUlTTUFUQ0gpOworCXN2Y19wdXRubChyZXN2LCBwcm9ncC0+cGdfbG92ZXJzKTsKKwlzdmNfcHV0bmwocmVzdiwgcHJvZ3AtPnBnX2hpdmVycyk7CiAJZ290byBzZW5kaXQ7CiAKIGVycl9iYWRfcHJvYzoKQEAgLTQ3Niw3ICs0NzYsNyBAQAogCXByaW50aygic3ZjOiB1bmtub3duIHByb2NlZHVyZSAoJWQpXG4iLCBwcm9jKTsKICNlbmRpZgogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKLQlzdmNfcHV0dTMyKHJlc3YsIHJwY19wcm9jX3VuYXZhaWwpOworCXN2Y19wdXRubChyZXN2LCBSUENfUFJPQ19VTkFWQUlMKTsKIAlnb3RvIHNlbmRpdDsKIAogZXJyX2dhcmJhZ2U6CkBAIC00ODYsNiArNDg2LDYgQEAKIAlycGNfc3RhdCA9IHJwY19nYXJiYWdlX2FyZ3M7CiBlcnJfYmFkOgogCXNlcnYtPnN2X3N0YXRzLT5ycGNiYWRmbXQrKzsKLQlzdmNfcHV0dTMyKHJlc3YsIHJwY19zdGF0KTsKKwlzdmNfcHV0bmwocmVzdiwgbnRvaGwocnBjX3N0YXQpKTsKIAlnb3RvIHNlbmRpdDsKIH0KZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjYXV0aC5jIGIvbmV0L3N1bnJwYy9zdmNhdXRoLmMKaW5kZXggNWIyOGM2MS4uOGYyMzIwYSAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNhdXRoLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNhdXRoLmMKQEAgLTM1LDE0ICszNSwxNCBAQAogfTsKIAogaW50Ci1zdmNfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqYXV0aHApCitzdmNfYXV0aGVudGljYXRlKHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqYXV0aHApCiB7CiAJcnBjX2F1dGhmbGF2b3JfdAlmbGF2b3I7CiAJc3RydWN0IGF1dGhfb3BzCQkqYW9wczsKIAogCSphdXRocCA9IHJwY19hdXRoX29rOwogCi0JZmxhdm9yID0gbnRvaGwoc3ZjX2dldHUzMigmcnFzdHAtPnJxX2FyZy5oZWFkWzBdKSk7CisJZmxhdm9yID0gc3ZjX2dldG5sKCZycXN0cC0+cnFfYXJnLmhlYWRbMF0pOwogCiAJZHByaW50aygic3ZjOiBzdmNfYXV0aGVudGljYXRlICglZClcbiIsIGZsYXZvcik7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMgYi9uZXQvc3VucnBjL3N2Y2F1dGhfdW5peC5jCmluZGV4IDdlNTcwN2UuLjEwMjBkNTQgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMvc3ZjYXV0aF91bml4LmMKKysrIGIvbmV0L3N1bnJwYy9zdmNhdXRoX3VuaXguYwpAQCAtMTQ1LDcgKzE0NSw3IEBACiB7CiAJY2hhciB0ZXh0X2FkZHJbMjBdOwogCXN0cnVjdCBpcF9tYXAgKmltID0gY29udGFpbmVyX29mKGgsIHN0cnVjdCBpcF9tYXAsIGgpOwotCV9fdTMyIGFkZHIgPSBpbS0+bV9hZGRyLnNfYWRkcjsKKwlfX2JlMzIgYWRkciA9IGltLT5tX2FkZHIuc19hZGRyOwogCQogCXNucHJpbnRmKHRleHRfYWRkciwgMjAsICIldS4ldS4ldS4ldSIsCiAJCSBudG9obChhZGRyKSA+PiAyNCAmIDB4ZmYsCkBAIC0yNDksMTAgKzI0OSwxMCBAQAogCiAJc2VxX3ByaW50ZihtLCAiJXMgJWQuJWQuJWQuJWQgJXNcbiIsCiAJCSAgIGltLT5tX2NsYXNzLAotCQkgICBodG9ubChhZGRyLnNfYWRkcikgPj4gMjQgJiAweGZmLAotCQkgICBodG9ubChhZGRyLnNfYWRkcikgPj4gMTYgJiAweGZmLAotCQkgICBodG9ubChhZGRyLnNfYWRkcikgPj4gIDggJiAweGZmLAotCQkgICBodG9ubChhZGRyLnNfYWRkcikgPj4gIDAgJiAweGZmLAorCQkgICBudG9obChhZGRyLnNfYWRkcikgPj4gMjQgJiAweGZmLAorCQkgICBudG9obChhZGRyLnNfYWRkcikgPj4gMTYgJiAweGZmLAorCQkgICBudG9obChhZGRyLnNfYWRkcikgPj4gIDggJiAweGZmLAorCQkgICBudG9obChhZGRyLnNfYWRkcikgPj4gIDAgJiAweGZmLAogCQkgICBkb20KIAkJICAgKTsKIAlyZXR1cm4gMDsKQEAgLTQxMCw3ICs0MTAsNyBAQAogfQogCiBzdGF0aWMgaW50Ci1zdmNhdXRoX251bGxfYWNjZXB0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqYXV0aHApCitzdmNhdXRoX251bGxfYWNjZXB0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqYXV0aHApCiB7CiAJc3RydWN0IGt2ZWMJKmFyZ3YgPSAmcnFzdHAtPnJxX2FyZy5oZWFkWzBdOwogCXN0cnVjdCBrdmVjCSpyZXN2ID0gJnJxc3RwLT5ycV9yZXMuaGVhZFswXTsKQEAgLTQyNyw3ICs0MjcsNyBAQAogCQkqYXV0aHAgPSBycGNfYXV0aGVycl9iYWRjcmVkOwogCQlyZXR1cm4gU1ZDX0RFTklFRDsKIAl9Ci0JaWYgKHN2Y19nZXR1MzIoYXJndikgIT0gUlBDX0FVVEhfTlVMTCB8fCBzdmNfZ2V0dTMyKGFyZ3YpICE9IDApIHsKKwlpZiAoc3ZjX2dldHUzMihhcmd2KSAhPSBodG9ubChSUENfQVVUSF9OVUxMKSB8fCBzdmNfZ2V0dTMyKGFyZ3YpICE9IDApIHsKIAkJZHByaW50aygic3ZjOiBiYWQgbnVsbCB2ZXJmXG4iKTsKIAkJKmF1dGhwID0gcnBjX2F1dGhlcnJfYmFkdmVyZjsKIAkJcmV0dXJuIFNWQ19ERU5JRUQ7CkBAIC00NDEsOCArNDQxLDggQEAKIAkJcmV0dXJuIFNWQ19EUk9QOyAvKiBrbWFsbG9jIGZhaWx1cmUgLSBjbGllbnQgbXVzdCByZXRyeSAqLwogCiAJLyogUHV0IE5VTEwgdmVyaWZpZXIgKi8KLQlzdmNfcHV0dTMyKHJlc3YsIFJQQ19BVVRIX05VTEwpOwotCXN2Y19wdXR1MzIocmVzdiwgMCk7CisJc3ZjX3B1dG5sKHJlc3YsIFJQQ19BVVRIX05VTEwpOworCXN2Y19wdXRubChyZXN2LCAwKTsKIAogCXJldHVybiBTVkNfT0s7CiB9CkBAIC00NzIsNyArNDcyLDcgQEAKIAogCiBzdGF0aWMgaW50Ci1zdmNhdXRoX3VuaXhfYWNjZXB0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIHUzMiAqYXV0aHApCitzdmNhdXRoX3VuaXhfYWNjZXB0KHN0cnVjdCBzdmNfcnFzdCAqcnFzdHAsIF9fYmUzMiAqYXV0aHApCiB7CiAJc3RydWN0IGt2ZWMJKmFyZ3YgPSAmcnFzdHAtPnJxX2FyZy5oZWFkWzBdOwogCXN0cnVjdCBrdmVjCSpyZXN2ID0gJnJxc3RwLT5ycV9yZXMuaGVhZFswXTsKQEAgLTQ4OCwzMSArNDg4LDMxIEBACiAKIAlzdmNfZ2V0dTMyKGFyZ3YpOwkJCS8qIGxlbmd0aCAqLwogCXN2Y19nZXR1MzIoYXJndik7CQkJLyogdGltZSBzdGFtcCAqLwotCXNsZW4gPSBYRFJfUVVBRExFTihudG9obChzdmNfZ2V0dTMyKGFyZ3YpKSk7CS8qIG1hY2huYW1lIGxlbmd0aCAqLworCXNsZW4gPSBYRFJfUVVBRExFTihzdmNfZ2V0bmwoYXJndikpOwkvKiBtYWNobmFtZSBsZW5ndGggKi8KIAlpZiAoc2xlbiA+IDY0IHx8IChsZW4gLT0gKHNsZW4gKyAzKSo0KSA8IDApCiAJCWdvdG8gYmFkY3JlZDsKLQlhcmd2LT5pb3ZfYmFzZSA9ICh2b2lkKikoKHUzMiopYXJndi0+aW92X2Jhc2UgKyBzbGVuKTsJLyogc2tpcCBtYWNobmFtZSAqLworCWFyZ3YtPmlvdl9iYXNlID0gKHZvaWQqKSgoX19iZTMyKilhcmd2LT5pb3ZfYmFzZSArIHNsZW4pOwkvKiBza2lwIG1hY2huYW1lICovCiAJYXJndi0+aW92X2xlbiAtPSBzbGVuKjQ7CiAKLQljcmVkLT5jcl91aWQgPSBudG9obChzdmNfZ2V0dTMyKGFyZ3YpKTsJCS8qIHVpZCAqLwotCWNyZWQtPmNyX2dpZCA9IG50b2hsKHN2Y19nZXR1MzIoYXJndikpOwkJLyogZ2lkICovCi0Jc2xlbiA9IG50b2hsKHN2Y19nZXR1MzIoYXJndikpOwkJCS8qIGdpZHMgbGVuZ3RoICovCisJY3JlZC0+Y3JfdWlkID0gc3ZjX2dldG5sKGFyZ3YpOwkJLyogdWlkICovCisJY3JlZC0+Y3JfZ2lkID0gc3ZjX2dldG5sKGFyZ3YpOwkJLyogZ2lkICovCisJc2xlbiA9IHN2Y19nZXRubChhcmd2KTsJCQkvKiBnaWRzIGxlbmd0aCAqLwogCWlmIChzbGVuID4gMTYgfHwgKGxlbiAtPSAoc2xlbiArIDIpKjQpIDwgMCkKIAkJZ290byBiYWRjcmVkOwogCWNyZWQtPmNyX2dyb3VwX2luZm8gPSBncm91cHNfYWxsb2Moc2xlbik7CiAJaWYgKGNyZWQtPmNyX2dyb3VwX2luZm8gPT0gTlVMTCkKIAkJcmV0dXJuIFNWQ19EUk9QOwogCWZvciAoaSA9IDA7IGkgPCBzbGVuOyBpKyspCi0JCUdST1VQX0FUKGNyZWQtPmNyX2dyb3VwX2luZm8sIGkpID0gbnRvaGwoc3ZjX2dldHUzMihhcmd2KSk7CisJCUdST1VQX0FUKGNyZWQtPmNyX2dyb3VwX2luZm8sIGkpID0gc3ZjX2dldG5sKGFyZ3YpOwogCi0JaWYgKHN2Y19nZXR1MzIoYXJndikgIT0gUlBDX0FVVEhfTlVMTCB8fCBzdmNfZ2V0dTMyKGFyZ3YpICE9IDApIHsKKwlpZiAoc3ZjX2dldHUzMihhcmd2KSAhPSBodG9ubChSUENfQVVUSF9OVUxMKSB8fCBzdmNfZ2V0dTMyKGFyZ3YpICE9IDApIHsKIAkJKmF1dGhwID0gcnBjX2F1dGhlcnJfYmFkdmVyZjsKIAkJcmV0dXJuIFNWQ19ERU5JRUQ7CiAJfQogCiAJLyogUHV0IE5VTEwgdmVyaWZpZXIgKi8KLQlzdmNfcHV0dTMyKHJlc3YsIFJQQ19BVVRIX05VTEwpOwotCXN2Y19wdXR1MzIocmVzdiwgMCk7CisJc3ZjX3B1dG5sKHJlc3YsIFJQQ19BVVRIX05VTEwpOworCXN2Y19wdXRubChyZXN2LCAwKTsKIAogCXJldHVybiBTVkNfT0s7CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3Zjc29jay5jIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKaW5kZXggOTUzYWZmOC4uNWIwZmUxYiAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy9zdmNzb2NrLmMKKysrIGIvbmV0L3N1bnJwYy9zdmNzb2NrLmMKQEAgLTEwMzAsNyArMTAzMCw3IEBACiB7CiAJc3RydWN0IHhkcl9idWYJKnhidWZwID0gJnJxc3RwLT5ycV9yZXM7CiAJaW50IHNlbnQ7Ci0JdTMyIHJlY2xlbjsKKwlfX2JlMzIgcmVjbGVuOwogCiAJLyogU2V0IHVwIHRoZSBmaXJzdCBlbGVtZW50IG9mIHRoZSByZXBseSBrdmVjLgogCSAqIEFueSBvdGhlciBrdmVjcyB0aGF0IG1heSBiZSBpbiB1c2UgaGF2ZSBiZWVuIHRha2VuCkBAIC0xMzkzLDE0ICsxMzkzLDEyIEBACiAJaWYgKChlcnJvciA9IHNvY2tfY3JlYXRlX2tlcm4oUEZfSU5FVCwgdHlwZSwgcHJvdG9jb2wsICZzb2NrKSkgPCAwKQogCQlyZXR1cm4gZXJyb3I7CiAKLQlpZiAoc2luICE9IE5VTEwpIHsKLQkJaWYgKHR5cGUgPT0gU09DS19TVFJFQU0pCi0JCQlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOyAvKiBhbGxvdyBhZGRyZXNzIHJldXNlICovCi0JCWVycm9yID0ga2VybmVsX2JpbmQoc29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBzaW4sCi0JCQkJCQlzaXplb2YoKnNpbikpOwotCQlpZiAoZXJyb3IgPCAwKQotCQkJZ290byBidW1tZXI7Ci0JfQorCWlmICh0eXBlID09IFNPQ0tfU1RSRUFNKQorCQlzb2NrLT5zay0+c2tfcmV1c2UgPSAxOyAvKiBhbGxvdyBhZGRyZXNzIHJldXNlICovCisJZXJyb3IgPSBrZXJuZWxfYmluZChzb2NrLCAoc3RydWN0IHNvY2thZGRyICopIHNpbiwKKwkJCQkJc2l6ZW9mKCpzaW4pKTsKKwlpZiAoZXJyb3IgPCAwKQorCQlnb3RvIGJ1bW1lcjsKIAogCWlmIChwcm90b2NvbCA9PSBJUFBST1RPX1RDUCkgewogCQlpZiAoKGVycm9yID0ga2VybmVsX2xpc3Rlbihzb2NrLCA2NCkpIDwgMCkKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMveGRyLmMgYi9uZXQvc3VucnBjL3hkci5jCmluZGV4IDZhYzQ1MTAuLjkwMjJlYjggMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveGRyLmMKKysrIGIvbmV0L3N1bnJwYy94ZHIuYwpAQCAtMTgsOCArMTgsOCBAQAogLyoKICAqIFhEUiBmdW5jdGlvbnMgZm9yIGJhc2ljIE5GUyB0eXBlcwogICovCi11MzIgKgoteGRyX2VuY29kZV9uZXRvYmoodTMyICpwLCBjb25zdCBzdHJ1Y3QgeGRyX25ldG9iaiAqb2JqKQorX19iZTMyICoKK3hkcl9lbmNvZGVfbmV0b2JqKF9fYmUzMiAqcCwgY29uc3Qgc3RydWN0IHhkcl9uZXRvYmogKm9iaikKIHsKIAl1bnNpZ25lZCBpbnQJcXVhZGxlbiA9IFhEUl9RVUFETEVOKG9iai0+bGVuKTsKIApAQCAtMjksOCArMjksOCBAQAogCXJldHVybiBwICsgWERSX1FVQURMRU4ob2JqLT5sZW4pOwogfQogCi11MzIgKgoteGRyX2RlY29kZV9uZXRvYmoodTMyICpwLCBzdHJ1Y3QgeGRyX25ldG9iaiAqb2JqKQorX19iZTMyICoKK3hkcl9kZWNvZGVfbmV0b2JqKF9fYmUzMiAqcCwgc3RydWN0IHhkcl9uZXRvYmogKm9iaikKIHsKIAl1bnNpZ25lZCBpbnQJbGVuOwogCkBAIC01NSw3ICs1NSw3IEBACiAgKiBSZXR1cm5zIHRoZSB1cGRhdGVkIGN1cnJlbnQgWERSIGJ1ZmZlciBwb3NpdGlvbgogICoKICAqLwotdTMyICp4ZHJfZW5jb2RlX29wYXF1ZV9maXhlZCh1MzIgKnAsIGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IG5ieXRlcykKK19fYmUzMiAqeGRyX2VuY29kZV9vcGFxdWVfZml4ZWQoX19iZTMyICpwLCBjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJaWYgKGxpa2VseShuYnl0ZXMgIT0gMCkpIHsKIAkJdW5zaWduZWQgaW50IHF1YWRsZW4gPSBYRFJfUVVBRExFTihuYnl0ZXMpOwpAQCAtNzksMjEgKzc5LDIxIEBACiAgKgogICogUmV0dXJucyB0aGUgdXBkYXRlZCBjdXJyZW50IFhEUiBidWZmZXIgcG9zaXRpb24KICAqLwotdTMyICp4ZHJfZW5jb2RlX29wYXF1ZSh1MzIgKnAsIGNvbnN0IHZvaWQgKnB0ciwgdW5zaWduZWQgaW50IG5ieXRlcykKK19fYmUzMiAqeGRyX2VuY29kZV9vcGFxdWUoX19iZTMyICpwLCBjb25zdCB2b2lkICpwdHIsIHVuc2lnbmVkIGludCBuYnl0ZXMpCiB7CiAJKnArKyA9IGh0b25sKG5ieXRlcyk7CiAJcmV0dXJuIHhkcl9lbmNvZGVfb3BhcXVlX2ZpeGVkKHAsIHB0ciwgbmJ5dGVzKTsKIH0KIEVYUE9SVF9TWU1CT0woeGRyX2VuY29kZV9vcGFxdWUpOwogCi11MzIgKgoteGRyX2VuY29kZV9zdHJpbmcodTMyICpwLCBjb25zdCBjaGFyICpzdHJpbmcpCitfX2JlMzIgKgoreGRyX2VuY29kZV9zdHJpbmcoX19iZTMyICpwLCBjb25zdCBjaGFyICpzdHJpbmcpCiB7CiAJcmV0dXJuIHhkcl9lbmNvZGVfYXJyYXkocCwgc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7CiB9CiAKLXUzMiAqCi14ZHJfZGVjb2RlX3N0cmluZ19pbnBsYWNlKHUzMiAqcCwgY2hhciAqKnNwLCBpbnQgKmxlbnAsIGludCBtYXhsZW4pCitfX2JlMzIgKgoreGRyX2RlY29kZV9zdHJpbmdfaW5wbGFjZShfX2JlMzIgKnAsIGNoYXIgKipzcCwgaW50ICpsZW5wLCBpbnQgbWF4bGVuKQogewogCXVuc2lnbmVkIGludAlsZW47CiAKQEAgLTQzMiw3ICs0MzIsNyBAQAogICoJIG9mIHRoZSBidWZmZXIgbGVuZ3RoLCBhbmQgdGFrZXMgY2FyZSBvZiBhZGp1c3RpbmcgdGhlIGt2ZWMKICAqCSBsZW5ndGggZm9yIHVzLgogICovCi12b2lkIHhkcl9pbml0X2VuY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1aW50MzJfdCAqcCkKK3ZvaWQgeGRyX2luaXRfZW5jb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCB4ZHJfYnVmICpidWYsIF9fYmUzMiAqcCkKIHsKIAlzdHJ1Y3Qga3ZlYyAqaW92ID0gYnVmLT5oZWFkOwogCWludCBzY3JhdGNoX2xlbiA9IGJ1Zi0+YnVmbGVuIC0gYnVmLT5wYWdlX2xlbiAtIGJ1Zi0+dGFpbFswXS5pb3ZfbGVuOwpAQCAtNDQwLDggKzQ0MCw4IEBACiAJQlVHX09OKHNjcmF0Y2hfbGVuIDwgMCk7CiAJeGRyLT5idWYgPSBidWY7CiAJeGRyLT5pb3YgPSBpb3Y7Ci0JeGRyLT5wID0gKHVpbnQzMl90ICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIGlvdi0+aW92X2xlbik7Ci0JeGRyLT5lbmQgPSAodWludDMyX3QgKikoKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgc2NyYXRjaF9sZW4pOworCXhkci0+cCA9IChfX2JlMzIgKikoKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgaW92LT5pb3ZfbGVuKTsKKwl4ZHItPmVuZCA9IChfX2JlMzIgKikoKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgc2NyYXRjaF9sZW4pOwogCUJVR19PTihpb3YtPmlvdl9sZW4gPiBzY3JhdGNoX2xlbik7CiAKIAlpZiAocCAhPSB4ZHItPnAgJiYgcCAhPSBOVUxMKSB7CkBAIC00NjUsMTAgKzQ2NSwxMCBAQAogICogYnl0ZXMgb2YgZGF0YS4gSWYgc28sIHVwZGF0ZSB0aGUgdG90YWwgeGRyX2J1ZiBsZW5ndGgsIGFuZAogICogYWRqdXN0IHRoZSBsZW5ndGggb2YgdGhlIGN1cnJlbnQga3ZlYy4KICAqLwotdWludDMyX3QgKiB4ZHJfcmVzZXJ2ZV9zcGFjZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzaXplX3QgbmJ5dGVzKQorX19iZTMyICogeGRyX3Jlc2VydmVfc3BhY2Uoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcykKIHsKLQl1aW50MzJfdCAqcCA9IHhkci0+cDsKLQl1aW50MzJfdCAqcTsKKwlfX2JlMzIgKnAgPSB4ZHItPnA7CisJX19iZTMyICpxOwogCiAJLyogYWxpZ24gbmJ5dGVzIG9uIHRoZSBuZXh0IDMyLWJpdCBib3VuZGFyeSAqLwogCW5ieXRlcyArPSAzOwpAQCAtNTI0LDcgKzUyNCw3IEBACiAgKiBAYnVmOiBwb2ludGVyIHRvIFhEUiBidWZmZXIgZnJvbSB3aGljaCB0byBkZWNvZGUgZGF0YQogICogQHA6IGN1cnJlbnQgcG9pbnRlciBpbnNpZGUgWERSIGJ1ZmZlcgogICovCi12b2lkIHhkcl9pbml0X2RlY29kZShzdHJ1Y3QgeGRyX3N0cmVhbSAqeGRyLCBzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCB1aW50MzJfdCAqcCkKK3ZvaWQgeGRyX2luaXRfZGVjb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHN0cnVjdCB4ZHJfYnVmICpidWYsIF9fYmUzMiAqcCkKIHsKIAlzdHJ1Y3Qga3ZlYyAqaW92ID0gYnVmLT5oZWFkOwogCXVuc2lnbmVkIGludCBsZW4gPSBpb3YtPmlvdl9sZW47CkBAIC01MzQsNyArNTM0LDcgQEAKIAl4ZHItPmJ1ZiA9IGJ1ZjsKIAl4ZHItPmlvdiA9IGlvdjsKIAl4ZHItPnAgPSBwOwotCXhkci0+ZW5kID0gKHVpbnQzMl90ICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIGxlbik7CisJeGRyLT5lbmQgPSAoX19iZTMyICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MKHhkcl9pbml0X2RlY29kZSk7CiAKQEAgLTU0OCwxMCArNTQ4LDEwIEBACiAgKiBJZiBzbyByZXR1cm4gdGhlIGN1cnJlbnQgcG9pbnRlciwgdGhlbiB1cGRhdGUgdGhlIGN1cnJlbnQKICAqIHBvaW50ZXIgcG9zaXRpb24uCiAgKi8KLXVpbnQzMl90ICogeGRyX2lubGluZV9kZWNvZGUoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwgc2l6ZV90IG5ieXRlcykKK19fYmUzMiAqIHhkcl9pbmxpbmVfZGVjb2RlKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsIHNpemVfdCBuYnl0ZXMpCiB7Ci0JdWludDMyX3QgKnAgPSB4ZHItPnA7Ci0JdWludDMyX3QgKnEgPSBwICsgWERSX1FVQURMRU4obmJ5dGVzKTsKKwlfX2JlMzIgKnAgPSB4ZHItPnA7CisJX19iZTMyICpxID0gcCArIFhEUl9RVUFETEVOKG5ieXRlcyk7CiAKIAlpZiAodW5saWtlbHkocSA+IHhkci0+ZW5kIHx8IHEgPCBwKSkKIAkJcmV0dXJuIE5VTEw7CkBAIC01OTksOCArNTk5LDggQEAKIAkgKiBQb3NpdGlvbiBjdXJyZW50IHBvaW50ZXIgYXQgYmVnaW5uaW5nIG9mIHRhaWwsIGFuZAogCSAqIHNldCByZW1haW5pbmcgbWVzc2FnZSBsZW5ndGguCiAJICovCi0JeGRyLT5wID0gKHVpbnQzMl90ICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIHBhZGRpbmcpOwotCXhkci0+ZW5kID0gKHVpbnQzMl90ICopKChjaGFyICopaW92LT5pb3ZfYmFzZSArIGVuZCk7CisJeGRyLT5wID0gKF9fYmUzMiAqKSgoY2hhciAqKWlvdi0+aW92X2Jhc2UgKyBwYWRkaW5nKTsKKwl4ZHItPmVuZCA9IChfX2JlMzIgKikoKGNoYXIgKilpb3YtPmlvdl9iYXNlICsgZW5kKTsKIH0KIEVYUE9SVF9TWU1CT0woeGRyX3JlYWRfcGFnZXMpOwogCkBAIC02MjQsOCArNjI0LDggQEAKIAkgKi8KIAlpZiAobGVuID4gUEFHRV9DQUNIRV9TSVpFIC0geGRyLT5idWYtPnBhZ2VfYmFzZSkKIAkJbGVuID0gUEFHRV9DQUNIRV9TSVpFIC0geGRyLT5idWYtPnBhZ2VfYmFzZTsKLQl4ZHItPnAgPSAodWludDMyX3QgKikoa2FkZHIgKyB4ZHItPmJ1Zi0+cGFnZV9iYXNlKTsKLQl4ZHItPmVuZCA9ICh1aW50MzJfdCAqKSgoY2hhciAqKXhkci0+cCArIGxlbik7CisJeGRyLT5wID0gKF9fYmUzMiAqKShrYWRkciArIHhkci0+YnVmLT5wYWdlX2Jhc2UpOworCXhkci0+ZW5kID0gKF9fYmUzMiAqKSgoY2hhciAqKXhkci0+cCArIGxlbik7CiB9CiBFWFBPUlRfU1lNQk9MKHhkcl9lbnRlcl9wYWdlKTsKIApAQCAtNzQzLDcgKzc0Myw3IEBACiBpbnQKIHhkcl9kZWNvZGVfd29yZChzdHJ1Y3QgeGRyX2J1ZiAqYnVmLCBpbnQgYmFzZSwgdTMyICpvYmopCiB7Ci0JdTMyCXJhdzsKKwlfX2JlMzIJcmF3OwogCWludAlzdGF0dXM7CiAKIAlzdGF0dXMgPSByZWFkX2J5dGVzX2Zyb21feGRyX2J1ZihidWYsIGJhc2UsICZyYXcsIHNpemVvZigqb2JqKSk7CkBAIC03NTYsNyArNzU2LDcgQEAKIGludAogeGRyX2VuY29kZV93b3JkKHN0cnVjdCB4ZHJfYnVmICpidWYsIGludCBiYXNlLCB1MzIgb2JqKQogewotCXUzMglyYXcgPSBodG9ubChvYmopOworCV9fYmUzMglyYXcgPSBodG9ubChvYmopOwogCiAJcmV0dXJuIHdyaXRlX2J5dGVzX3RvX3hkcl9idWYoYnVmLCBiYXNlLCAmcmF3LCBzaXplb2Yob2JqKSk7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnQuYyBiL25ldC9zdW5ycGMveHBydC5jCmluZGV4IDFmNzg2ZjYuLjgwODU3NDcgMTAwNjQ0Ci0tLSBhL25ldC9zdW5ycGMveHBydC5jCisrKyBiL25ldC9zdW5ycGMveHBydC5jCkBAIC01OTQsNyArNTk0LDcgQEAKICAqIEB4aWQ6IFJQQyBYSUQgb2YgaW5jb21pbmcgcmVwbHkKICAqCiAgKi8KLXN0cnVjdCBycGNfcnFzdCAqeHBydF9sb29rdXBfcnFzdChzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQsIHUzMiB4aWQpCitzdHJ1Y3QgcnBjX3Jxc3QgKnhwcnRfbG9va3VwX3Jxc3Qoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBfX2JlMzIgeGlkKQogewogCXN0cnVjdCBsaXN0X2hlYWQgKnBvczsKIApAQCAtODAxLDcgKzgwMSw3IEBACiAJc3Bpbl91bmxvY2soJnhwcnQtPnJlc2VydmVfbG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdTMyIHhwcnRfYWxsb2NfeGlkKHN0cnVjdCBycGNfeHBydCAqeHBydCkKK3N0YXRpYyBpbmxpbmUgX19iZTMyIHhwcnRfYWxsb2NfeGlkKHN0cnVjdCBycGNfeHBydCAqeHBydCkKIHsKIAlyZXR1cm4geHBydC0+eGlkKys7CiB9CmRpZmYgLS1naXQgYS9uZXQvc3VucnBjL3hwcnRzb2NrLmMgYi9uZXQvc3VucnBjL3hwcnRzb2NrLmMKaW5kZXggOWI2MjkyMy4uMjgxMDBlMCAxMDA2NDQKLS0tIGEvbmV0L3N1bnJwYy94cHJ0c29jay5jCisrKyBiL25ldC9zdW5ycGMveHBydHNvY2suYwpAQCAtNTQ4LDcgKzU0OCw4IEBACiAJc3RydWN0IHJwY19ycXN0ICpyb3ZyOwogCXN0cnVjdCBza19idWZmICpza2I7CiAJaW50IGVyciwgcmVwc2l6ZSwgY29waWVkOwotCXUzMiBfeGlkLCAqeHA7CisJdTMyIF94aWQ7CisJX19iZTMyICp4cDsKIAogCXJlYWRfbG9jaygmc2stPnNrX2NhbGxiYWNrX2xvY2spOwogCWRwcmludGsoIlJQQzogICAgICB4c191ZHBfZGF0YV9yZWFkeS4uLlxuIik7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2hhc2guaCBiL25ldC94ZnJtL3hmcm1faGFzaC5oCmluZGV4IGQzYWJiMGIuLjZhYzRlNGYgMTAwNjQ0Ci0tLSBhL25ldC94ZnJtL3hmcm1faGFzaC5oCisrKyBiL25ldC94ZnJtL3hmcm1faGFzaC5oCkBAIC01OCwxMCArNTgsMTAgQEAKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKLV9feGZybV9zcGlfaGFzaCh4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHUzMiBzcGksIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHksCitfX3hmcm1fc3BpX2hhc2goeGZybV9hZGRyZXNzX3QgKmRhZGRyLCBfX2JlMzIgc3BpLCB1OCBwcm90bywgdW5zaWduZWQgc2hvcnQgZmFtaWx5LAogCQl1bnNpZ25lZCBpbnQgaG1hc2spCiB7Ci0JdW5zaWduZWQgaW50IGggPSBzcGkgXiBwcm90bzsKKwl1bnNpZ25lZCBpbnQgaCA9IChfX2ZvcmNlIHUzMilzcGkgXiBwcm90bzsKIAlzd2l0Y2ggKGZhbWlseSkgewogCWNhc2UgQUZfSU5FVDoKIAkJaCBePSBfX3hmcm00X2FkZHJfaGFzaChkYWRkcik7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lucHV0LmMgYi9uZXQveGZybS94ZnJtX2lucHV0LmMKaW5kZXggZGZjOTBiYi4uZTgxOThhMiAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9pbnB1dC5jCisrKyBiL25ldC94ZnJtL3hmcm1faW5wdXQuYwpAQCAtNDYsNyArNDYsNyBAQAogCiAvKiBGZXRjaCBzcGkgYW5kIHNlcSBmcm9tIGlwc2VjIGhlYWRlciAqLwogCi1pbnQgeGZybV9wYXJzZV9zcGkoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggbmV4dGhkciwgdTMyICpzcGksIHUzMiAqc2VxKQoraW50IHhmcm1fcGFyc2Vfc3BpKHN0cnVjdCBza19idWZmICpza2IsIHU4IG5leHRoZHIsIF9fYmUzMiAqc3BpLCBfX2JlMzIgKnNlcSkKIHsKIAlpbnQgb2Zmc2V0LCBvZmZzZXRfc2VxOwogCkBAIC02Miw3ICs2Miw3IEBACiAJY2FzZSBJUFBST1RPX0NPTVA6CiAJCWlmICghcHNrYl9tYXlfcHVsbChza2IsIHNpemVvZihzdHJ1Y3QgaXBfY29tcF9oZHIpKSkKIAkJCXJldHVybiAtRUlOVkFMOwotCQkqc3BpID0gaHRvbmwobnRvaHMoKih1MTYqKShza2ItPmgucmF3ICsgMikpKTsKKwkJKnNwaSA9IGh0b25sKG50b2hzKCooX19iZTE2Kikoc2tiLT5oLnJhdyArIDIpKSk7CiAJCSpzZXEgPSAwOwogCQlyZXR1cm4gMDsKIAlkZWZhdWx0OgpAQCAtNzIsOCArNzIsOCBAQAogCWlmICghcHNrYl9tYXlfcHVsbChza2IsIDE2KSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkqc3BpID0gKih1MzIqKShza2ItPmgucmF3ICsgb2Zmc2V0KTsKLQkqc2VxID0gKih1MzIqKShza2ItPmgucmF3ICsgb2Zmc2V0X3NlcSk7CisJKnNwaSA9ICooX19iZTMyKikoc2tiLT5oLnJhdyArIG9mZnNldCk7CisJKnNlcSA9ICooX19iZTMyKikoc2tiLT5oLnJhdyArIG9mZnNldF9zZXEpOwogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3BhcnNlX3NwaSk7CmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX3N0YXRlLmMgYi9uZXQveGZybS94ZnJtX3N0YXRlLmMKaW5kZXggOWY2M2VkZC4uZjkyN2I3MyAxMDA2NDQKLS0tIGEvbmV0L3hmcm0veGZybV9zdGF0ZS5jCisrKyBiL25ldC94ZnJtL3hmcm1fc3RhdGUuYwpAQCAtNzAsNyArNzAsNyBAQAogfQogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAoteGZybV9zcGlfaGFzaCh4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIHUzMiBzcGksIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCit4ZnJtX3NwaV9oYXNoKHhmcm1fYWRkcmVzc190ICpkYWRkciwgX19iZTMyIHNwaSwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlyZXR1cm4gX194ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHksIHhmcm1fc3RhdGVfaG1hc2spOwogfQpAQCAtOTYsOSArOTYsMTIgQEAKIAkJCQkgICAgbmhhc2htYXNrKTsKIAkJaGxpc3RfYWRkX2hlYWQoJngtPmJ5c3JjLCBuc3JjdGFibGUraCk7CiAKLQkJaCA9IF9feGZybV9zcGlfaGFzaCgmeC0+aWQuZGFkZHIsIHgtPmlkLnNwaSwgeC0+aWQucHJvdG8sCi0JCQkJICAgIHgtPnByb3BzLmZhbWlseSwgbmhhc2htYXNrKTsKLQkJaGxpc3RfYWRkX2hlYWQoJngtPmJ5c3BpLCBuc3BpdGFibGUraCk7CisJCWlmICh4LT5pZC5zcGkpIHsKKwkJCWggPSBfX3hmcm1fc3BpX2hhc2goJngtPmlkLmRhZGRyLCB4LT5pZC5zcGksCisJCQkJCSAgICB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5LAorCQkJCQkgICAgbmhhc2htYXNrKTsKKwkJCWhsaXN0X2FkZF9oZWFkKCZ4LT5ieXNwaSwgbnNwaXRhYmxlK2gpOworCQl9CiAJfQogfQogCkBAIC00MjEsNyArNDI0LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCB4ZnJtX3N0YXRlICpfX3hmcm1fc3RhdGVfbG9va3VwKHhmcm1fYWRkcmVzc190ICpkYWRkciwgdTMyIHNwaSwgdTggcHJvdG8sIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKK3N0YXRpYyBzdHJ1Y3QgeGZybV9zdGF0ZSAqX194ZnJtX3N0YXRlX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksIHU4IHByb3RvLCB1bnNpZ25lZCBzaG9ydCBmYW1pbHkpCiB7CiAJdW5zaWduZWQgaW50IGggPSB4ZnJtX3NwaV9oYXNoKGRhZGRyLCBzcGksIHByb3RvLCBmYW1pbHkpOwogCXN0cnVjdCB4ZnJtX3N0YXRlICp4OwpAQCAtNjIyLDcgKzYyNSw3IEBACiAJaCA9IHhmcm1fc3JjX2hhc2goJngtPnByb3BzLnNhZGRyLCB4LT5wcm9wcy5mYW1pbHkpOwogCWhsaXN0X2FkZF9oZWFkKCZ4LT5ieXNyYywgeGZybV9zdGF0ZV9ieXNyYytoKTsKIAotCWlmICh4ZnJtX2lkX3Byb3RvX21hdGNoKHgtPmlkLnByb3RvLCBJUFNFQ19QUk9UT19BTlkpKSB7CisJaWYgKHgtPmlkLnNwaSkgewogCQloID0geGZybV9zcGlfaGFzaCgmeC0+aWQuZGFkZHIsIHgtPmlkLnNwaSwgeC0+aWQucHJvdG8sCiAJCQkJICB4LT5wcm9wcy5mYW1pbHkpOwogCkBAIC05MTYsNyArOTE5LDcgQEAKIEVYUE9SVF9TWU1CT0woeGZybV9zdGF0ZV9jaGVjayk7CiAKIHN0cnVjdCB4ZnJtX3N0YXRlICoKLXhmcm1fc3RhdGVfbG9va3VwKHhmcm1fYWRkcmVzc190ICpkYWRkciwgdTMyIHNwaSwgdTggcHJvdG8sCit4ZnJtX3N0YXRlX2xvb2t1cCh4ZnJtX2FkZHJlc3NfdCAqZGFkZHIsIF9fYmUzMiBzcGksIHU4IHByb3RvLAogCQkgIHVuc2lnbmVkIHNob3J0IGZhbWlseSkKIHsKIAlzdHJ1Y3QgeGZybV9zdGF0ZSAqeDsKQEAgLTEwNDAsNyArMTA0Myw3IEBACiBFWFBPUlRfU1lNQk9MKHhmcm1fZ2V0X2FjcXNlcSk7CiAKIHZvaWQKLXhmcm1fYWxsb2Nfc3BpKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCB1MzIgbWluc3BpLCB1MzIgbWF4c3BpKQoreGZybV9hbGxvY19zcGkoc3RydWN0IHhmcm1fc3RhdGUgKngsIF9fYmUzMiBtaW5zcGksIF9fYmUzMiBtYXhzcGkpCiB7CiAJdW5zaWduZWQgaW50IGg7CiAJc3RydWN0IHhmcm1fc3RhdGUgKngwOwpAQCAtMTA1NywxMCArMTA2MCwxMCBAQAogCQl4LT5pZC5zcGkgPSBtaW5zcGk7CiAJfSBlbHNlIHsKIAkJdTMyIHNwaSA9IDA7Ci0JCW1pbnNwaSA9IG50b2hsKG1pbnNwaSk7Ci0JCW1heHNwaSA9IG50b2hsKG1heHNwaSk7Ci0JCWZvciAoaD0wOyBoPG1heHNwaS1taW5zcGkrMTsgaCsrKSB7Ci0JCQlzcGkgPSBtaW5zcGkgKyBuZXRfcmFuZG9tKCklKG1heHNwaS1taW5zcGkrMSk7CisJCXUzMiBsb3cgPSBudG9obChtaW5zcGkpOworCQl1MzIgaGlnaCA9IG50b2hsKG1heHNwaSk7CisJCWZvciAoaD0wOyBoPGhpZ2gtbG93KzE7IGgrKykgeworCQkJc3BpID0gbG93ICsgbmV0X3JhbmRvbSgpJShoaWdoLWxvdysxKTsKIAkJCXgwID0geGZybV9zdGF0ZV9sb29rdXAoJngtPmlkLmRhZGRyLCBodG9ubChzcGkpLCB4LT5pZC5wcm90bywgeC0+cHJvcHMuZmFtaWx5KTsKIAkJCWlmICh4MCA9PSBOVUxMKSB7CiAJCQkJeC0+aWQuc3BpID0gaHRvbmwoc3BpKTsKQEAgLTExODAsMTEgKzExODMsMTAgQEAKIAlzcGluX3VubG9jaygmeC0+bG9jayk7CiB9CiAKLWludCB4ZnJtX3JlcGxheV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIHNlcSkKK2ludCB4ZnJtX3JlcGxheV9jaGVjayhzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgX19iZTMyIG5ldF9zZXEpCiB7CiAJdTMyIGRpZmY7Ci0KLQlzZXEgPSBudG9obChzZXEpOworCXUzMiBzZXEgPSBudG9obChuZXRfc2VxKTsKIAogCWlmICh1bmxpa2VseShzZXEgPT0gMCkpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTIwNiwxMSArMTIwOCwxMCBAQAogfQogRVhQT1JUX1NZTUJPTCh4ZnJtX3JlcGxheV9jaGVjayk7CiAKLXZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIHNlcSkKK3ZvaWQgeGZybV9yZXBsYXlfYWR2YW5jZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgX19iZTMyIG5ldF9zZXEpCiB7CiAJdTMyIGRpZmY7Ci0KLQlzZXEgPSBudG9obChzZXEpOworCXUzMiBzZXEgPSBudG9obChuZXRfc2VxKTsKIAogCWlmIChzZXEgPiB4LT5yZXBsYXkuc2VxKSB7CiAJCWRpZmYgPSBzZXEgLSB4LT5yZXBsYXkuc2VxOwpkaWZmIC0tZ2l0IGEvc2NyaXB0cy9NYWtlZmlsZSBiL3NjcmlwdHMvTWFrZWZpbGUKaW5kZXggZWE0MWRlOC4uMWM3M2M1YSAxMDA2NDQKLS0tIGEvc2NyaXB0cy9NYWtlZmlsZQorKysgYi9zY3JpcHRzL01ha2VmaWxlCkBAIC0xMyw3ICsxMyw3IEBACiBob3N0cHJvZ3MtJChDT05GSUdfUFJPTV9DT05TT0xFKSArPSBjb25tYWtlaGFzaAogaG9zdHByb2dzLSQoQ09ORklHX0lLQ09ORklHKSAgICAgKz0gYmluMmMKIAotYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KQorYWx3YXlzCQk6PSAkKGhvc3Rwcm9ncy15KSAkKGhvc3Rwcm9ncy1tKQogCiAjIFRoZSBmb2xsb3dpbmcgaG9zdHByb2dzLXkgcHJvZ3JhbXMgYXJlIG9ubHkgYnVpbGQgb24gZGVtYW5kCiBob3N0cHJvZ3MteSArPSB1bmlmZGVmCmRpZmYgLS1naXQgYS9zY3JpcHRzL2Jhc2ljL2RvY3Byb2MuYyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCmluZGV4IGNiMDJiYWEuLjRhYjZjYmYgMTAwNjQ0Ci0tLSBhL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCisrKyBiL3NjcmlwdHMvYmFzaWMvZG9jcHJvYy5jCkBAIC0xNzcsNiArMTc3LDcgQEAKIAkJewogCQkJZnByaW50ZihzdGRlcnIsICJkb2Nwcm9jOiAiKTsKIAkJCXBlcnJvcihyZWFsX2ZpbGVuYW1lKTsKKwkJCWV4aXQoMSk7CiAJCX0KIAkJd2hpbGUoZmdldHMobGluZSwgTUFYTElORVNaLCBmcCkpIHsKIAkJCWNoYXIgKnA7CmRpZmYgLS1naXQgYS9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMgYi9zY3JpcHRzL21vZC9maWxlMmFsaWFzLmMKaW5kZXggZGU3NmRhOC4uZjYxYzljYyAxMDA2NDQKLS0tIGEvc2NyaXB0cy9tb2QvZmlsZTJhbGlhcy5jCisrKyBiL3NjcmlwdHMvbW9kL2ZpbGUyYWxpYXMuYwpAQCAtNDQ0LDYgKzQ0NCwxNCBAQAogCXJldHVybiAxOwogfQogCitzdGF0aWMgaW50IGRvX2Vpc2FfZW50cnkoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBlaXNhX2RldmljZV9pZCAqZWlzYSwKKwkJY2hhciAqYWxpYXMpCit7CisJaWYgKGVpc2EtPnNpZ1swXSkKKwkJc3ByaW50ZihhbGlhcywgRUlTQV9ERVZJQ0VfTU9EQUxJQVNfRk1UICIqIiwgZWlzYS0+c2lnKTsKKwlyZXR1cm4gMTsKK30KKwogLyogSWdub3JlIGFueSBwcmVmaXgsIGVnLiB2ODUwIHByZXBlbmRzIF8gKi8KIHN0YXRpYyBpbmxpbmUgaW50IHN5bV9pcyhjb25zdCBjaGFyICpzeW1ib2wsIGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC01NDcsNiArNTU1LDEwIEBACiAJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAogCQkJIHNpemVvZihzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkKSwgImlucHV0IiwKIAkJCSBkb19pbnB1dF9lbnRyeSwgbW9kKTsKKwllbHNlIGlmIChzeW1faXMoc3ltbmFtZSwgIl9fbW9kX2Vpc2FfZGV2aWNlX3RhYmxlIikpCisJCWRvX3RhYmxlKHN5bXZhbCwgc3ltLT5zdF9zaXplLAorCQkJIHNpemVvZihzdHJ1Y3QgZWlzYV9kZXZpY2VfaWQpLCAiZWlzYSIsCisJCQkgZG9fZWlzYV9lbnRyeSwgbW9kKTsKIH0KIAogLyogTm93IGFkZCBvdXQgYnVmZmVyZWQgaW5mb3JtYXRpb24gdG8gdGhlIGdlbmVyYXRlZCBDIHNvdXJjZSAqLwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvS2NvbmZpZyBiL3NlY3VyaXR5L0tjb25maWcKaW5kZXggNjc3ODVkZi4uNDYwZTVjOSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvS2NvbmZpZworKysgYi9zZWN1cml0eS9LY29uZmlnCkBAIC05MywxOCArOTMsNiBAQAogCSAgCiAJICBJZiB5b3UgYXJlIHVuc3VyZSBob3cgdG8gYW5zd2VyIHRoaXMgcXVlc3Rpb24sIGFuc3dlciBOLgogCi1jb25maWcgU0VDVVJJVFlfU0VDTFZMCi0JdHJpc3RhdGUgIkJTRCBTZWN1cmUgTGV2ZWxzIgotCWRlcGVuZHMgb24gU0VDVVJJVFkKLQlzZWxlY3QgQ1JZUFRPCi0Jc2VsZWN0IENSWVBUT19TSEExCi0JaGVscAotCSAgSW1wbGVtZW50cyBCU0QgU2VjdXJlIExldmVscyBhcyBhbiBMU00uICBTZWUKLQkgIDxmaWxlOkRvY3VtZW50YXRpb24vc2VjbHZsLnR4dD4gZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gdXNlIHRoaXMKLQkgIG1vZHVsZS4KLQotCSAgSWYgeW91IGFyZSB1bnN1cmUgaG93IHRvIGFuc3dlciB0aGlzIHF1ZXN0aW9uLCBhbnN3ZXIgTi4KLQogc291cmNlIHNlY3VyaXR5L3NlbGludXgvS2NvbmZpZwogCiBlbmRtZW51CmRpZmYgLS1naXQgYS9zZWN1cml0eS9NYWtlZmlsZSBiL3NlY3VyaXR5L01ha2VmaWxlCmluZGV4IDhjYmJmMmYuLmVmODdkZjIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L01ha2VmaWxlCisrKyBiL3NlY3VyaXR5L01ha2VmaWxlCkBAIC0xNiw0ICsxNiwzIEBACiBvYmotJChDT05GSUdfU0VDVVJJVFlfU0VMSU5VWCkJCSs9IHNlbGludXgvYnVpbHQtaW4ubwogb2JqLSQoQ09ORklHX1NFQ1VSSVRZX0NBUEFCSUxJVElFUykJKz0gY29tbW9uY2FwLm8gY2FwYWJpbGl0eS5vCiBvYmotJChDT05GSUdfU0VDVVJJVFlfUk9PVFBMVUcpCQkrPSBjb21tb25jYXAubyByb290X3BsdWcubwotb2JqLSQoQ09ORklHX1NFQ1VSSVRZX1NFQ0xWTCkJCSs9IHNlY2x2bC5vCmRpZmYgLS1naXQgYS9zZWN1cml0eS9jb21tb25jYXAuYyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCmluZGV4IGY1MGZjMjkuLjVhNWVmNWMgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2NvbW1vbmNhcC5jCisrKyBiL3NlY3VyaXR5L2NvbW1vbmNhcC5jCkBAIC0xNjksNyArMTY5LDcgQEAKIAkvKiBGb3IgaW5pdCwgd2Ugd2FudCB0byByZXRhaW4gdGhlIGNhcGFiaWxpdGllcyBzZXQKIAkgKiBpbiB0aGUgaW5pdF90YXNrIHN0cnVjdC4gVGh1cyB3ZSBza2lwIHRoZSB1c3VhbAogCSAqIGNhcGFiaWxpdHkgcnVsZXMgKi8KLQlpZiAoY3VycmVudC0+cGlkICE9IDEpIHsKKwlpZiAoIWlzX2luaXQoY3VycmVudCkpIHsKIAkJY3VycmVudC0+Y2FwX3Blcm1pdHRlZCA9IG5ld19wZXJtaXR0ZWQ7CiAJCWN1cnJlbnQtPmNhcF9lZmZlY3RpdmUgPQogCQkgICAgY2FwX2ludGVyc2VjdCAobmV3X3Blcm1pdHRlZCwgYnBybS0+Y2FwX2VmZmVjdGl2ZSk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9pbm9kZS5jIGIvc2VjdXJpdHkvaW5vZGUuYwppbmRleCA0N2ViNjM0Li45YjE2ZTE0IDEwMDY0NAotLS0gYS9zZWN1cml0eS9pbm9kZS5jCisrKyBiL3NlY3VyaXR5L2lub2RlLmMKQEAgLTQ0LDggKzQ0LDggQEAKIAogc3RhdGljIGludCBkZWZhdWx0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JaWYgKGlub2RlLT51LmdlbmVyaWNfaXApCi0JCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT51LmdlbmVyaWNfaXA7CisJaWYgKGlub2RlLT5pX3ByaXZhdGUpCisJCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY0LDcgKzY0LDYgQEAKIAkJaW5vZGUtPmlfbW9kZSA9IG1vZGU7CiAJCWlub2RlLT5pX3VpZCA9IDA7CiAJCWlub2RlLT5pX2dpZCA9IDA7Ci0JCWlub2RlLT5pX2Jsa3NpemUgPSBQQUdFX0NBQ0hFX1NJWkU7CiAJCWlub2RlLT5pX2Jsb2NrcyA9IDA7CiAJCWlub2RlLT5pX2F0aW1lID0gaW5vZGUtPmlfbXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJc3dpdGNoIChtb2RlICYgU19JRk1UKSB7CkBAIC03OSw3ICs3OCw3IEBACiAJCQlpbm9kZS0+aV9mb3AgPSAmc2ltcGxlX2Rpcl9vcGVyYXRpb25zOwogCiAJCQkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICIuIiBlbnRyeSkgKi8KLQkJCWlub2RlLT5pX25saW5rKys7CisJCQlpbmNfbmxpbmsoaW5vZGUpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0xMTIsNyArMTExLDcgQEAKIAltb2RlID0gKG1vZGUgJiAoU19JUldYVUdPIHwgU19JU1ZUWCkpIHwgU19JRkRJUjsKIAlyZXMgPSBta25vZChkaXIsIGRlbnRyeSwgbW9kZSwgMCk7CiAJaWYgKCFyZXMpCi0JCWRpci0+aV9ubGluaysrOworCQlpbmNfbmxpbmsoZGlyKTsKIAlyZXR1cm4gcmVzOwogfQogCkBAIC0xOTQsNyArMTkzLDcgQEAKICAqICAgICAgICAgIGRpcmVjdG9yeSBkZW50cnkgaWYgc2V0LiAgSWYgdGhpcyBwYXJhbWF0ZXIgaXMgTlVMTCwgdGhlbiB0aGUKICAqICAgICAgICAgIGZpbGUgd2lsbCBiZSBjcmVhdGVkIGluIHRoZSByb290IG9mIHRoZSBzZWN1cml0eWZzIGZpbGVzeXN0ZW0uCiAgKiBAZGF0YTogYSBwb2ludGVyIHRvIHNvbWV0aGluZyB0aGF0IHRoZSBjYWxsZXIgd2lsbCB3YW50IHRvIGdldCB0byBsYXRlcgotICogICAgICAgIG9uLiAgVGhlIGlub2RlLnUuZ2VuZXJpY19pcCBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgorICogICAgICAgIG9uLiAgVGhlIGlub2RlLmlfcHJpdmF0ZSBwb2ludGVyIHdpbGwgcG9pbnQgdG8gdGhpcyB2YWx1ZSBvbgogICogICAgICAgIHRoZSBvcGVuKCkgY2FsbC4KICAqIEBmb3BzOiBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yCiAgKiAgICAgICAgdGhpcyBmaWxlLgpAQCAtMjQwLDcgKzIzOSw3IEBACiAJCWlmIChmb3BzKQogCQkJZGVudHJ5LT5kX2lub2RlLT5pX2ZvcCA9IGZvcHM7CiAJCWlmIChkYXRhKQotCQkJZGVudHJ5LT5kX2lub2RlLT51LmdlbmVyaWNfaXAgPSBkYXRhOworCQkJZGVudHJ5LT5kX2lub2RlLT5pX3ByaXZhdGUgPSBkYXRhOwogCX0KIGV4aXQ6CiAJcmV0dXJuIGRlbnRyeTsKZGlmZiAtLWdpdCBhL3NlY3VyaXR5L3NlY2x2bC5jIGIvc2VjdXJpdHkvc2VjbHZsLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmNjI5MTkuLjAwMDAwMDAKLS0tIGEvc2VjdXJpdHkvc2VjbHZsLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NzEgKzAsMCBAQAotLyoqCi0gKiBCU0QgU2VjdXJlIExldmVscyBMU00KLSAqCi0gKiBNYWludGFpbmVyczoKLSAqCU1pY2hhZWwgQS4gSGFsY3JvdyA8bWlrZUBoYWxjcm93LnVzPgotICoJU2VyZ2UgSGFsbHluIDxoYWxseW5AY3Mud20uZWR1PgotICoKLSAqIENvcHlyaWdodCAoYykgMjAwMSBXaXJlWCBDb21tdW5pY2F0aW9ucywgSW5jIDxjaHJpc0B3aXJleC5jb20+Ci0gKiBDb3B5cmlnaHQgKGMpIDIwMDEgR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVnQGtyb2FoLmNvbT4KLSAqIENvcHlyaWdodCAoYykgMjAwMiBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIDxyb2JiQGF1c3Rpbi5pYm0uY29tPgotICogQ29weXJpZ2h0IChjKSAyMDA2IERhdmkgRS4gTS4gQXJuYXV0IDxkYXZpLmFybmF1dEBnbWFpbC5jb20+Ci0gKgotICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqCWl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKgl0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgotICoJKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqLwotCi0jaW5jbHVkZSA8bGludXgvZXJyLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvc2VjdXJpdHkuaD4KLSNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+Ci0jaW5jbHVkZSA8bGludXgvZnMuaD4KLSNpbmNsdWRlIDxsaW51eC9uYW1laS5oPgotI2luY2x1ZGUgPGxpbnV4L21vdW50Lmg+Ci0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPgotI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KLSNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+Ci0jaW5jbHVkZSA8bGludXgva29iamVjdC5oPgotI2luY2x1ZGUgPGxpbnV4L2NyeXB0by5oPgotI2luY2x1ZGUgPGFzbS9zY2F0dGVybGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+Ci0jaW5jbHVkZSA8bGludXgvZ2ZwLmg+Ci0jaW5jbHVkZSA8bGludXgvc3lzZnMuaD4KLQotI2RlZmluZSBTSEExX0RJR0VTVF9TSVpFIDIwCi0KLS8qKgotICogTW9kdWxlIHBhcmFtZXRlciB0aGF0IGRlZmluZXMgdGhlIGluaXRpYWwgc2VjdXJlIGxldmVsLgotICoKLSAqIFdoZW4gYnVpbHQgYXMgYSBtb2R1bGUsIGl0IGRlZmF1bHRzIHRvIHNlY2x2bCAxLCB3aGljaCBpcyB0aGUKLSAqIGJlaGF2aW9yIG9mIEJTRCBzZWN1cmUgbGV2ZWxzLiAgTm90ZSB0aGF0IHRoaXMgZGVmYXVsdCBiZWhhdmlvcgotICogd3JlY2tzIGhhdm9jIG9uIGEgbWFjaGluZSB3aGVuIHRoZSBzZWNsdmwgbW9kdWxlIGlzIGNvbXBpbGVkIGludG8KLSAqIHRoZSBrZXJuZWwuCUluIHRoYXQgY2FzZSwgd2UgZGVmYXVsdCB0byBzZWNsdmwgMC4KLSAqLwotI2lmZGVmIENPTkZJR19TRUNVUklUWV9TRUNMVkxfTU9EVUxFCi1zdGF0aWMgaW50IGluaXRsdmwgPSAxOwotI2Vsc2UKLXN0YXRpYyBpbnQgaW5pdGx2bDsKLSNlbmRpZgotbW9kdWxlX3BhcmFtKGluaXRsdmwsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGluaXRsdmwsICJJbml0aWFsIHNlY3VyZSBsZXZlbCAoZGVmYXVsdHMgdG8gMSkiKTsKLQotLyogTW9kdWxlIHBhcmFtZXRlciB0aGF0IGRlZmluZXMgdGhlIHZlcmJvc2l0eSBsZXZlbCAqLwotc3RhdGljIGludCB2ZXJib3NpdHk7Ci1tb2R1bGVfcGFyYW0odmVyYm9zaXR5LCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyh2ZXJib3NpdHksICJJbml0aWFsIHZlcmJvc2l0eSBsZXZlbCAoMCBvciAxOyBkZWZhdWx0cyB0byAiCi0JCSAiMCwgd2hpY2ggaXMgUXVpZXQpIik7Ci0KLS8qKgotICogT3B0aW9uYWwgcGFzc3dvcmQgd2hpY2ggY2FuIGJlIHBhc3NlZCBpbiB0byBicmluZyBzZWNsdmwgdG8gMAotICogKGkuZS4sIGZvciBoYWx0L3JlYm9vdCkuICBEZWZhdWx0cyB0byBOVUxMICh0aGUgcGFzc3dkIGF0dHJpYnV0ZQotICogZmlsZSB3aWxsIG5vdCBiZSByZWdpc3RlcmVkIGluIHN5c2ZzKS4KLSAqCi0gKiBUaGlzIGdldHMgY29udmVydGVkIHRvIGl0cyBTSEExIGhhc2ggd2hlbiBzdG9yZWQuICBJdCdzIHByb2JhYmx5Ci0gKiBub3QgYSBnb29kIGlkZWEgdG8gdXNlIHRoaXMgcGFyYW1ldGVyIHdoZW4gbG9hZGluZyBzZWNsdmwgZnJvbSBhCi0gKiBzY3JpcHQ7IHVzZSBzaGExX3Bhc3N3ZCBpbnN0ZWFkLgotICovCi0KLSNkZWZpbmUgTUFYX1BBU1NXRF9TSVpFCTMyCi1zdGF0aWMgY2hhciBwYXNzd2RbTUFYX1BBU1NXRF9TSVpFXTsKLW1vZHVsZV9wYXJhbV9zdHJpbmcocGFzc3dkLCBwYXNzd2QsIHNpemVvZihwYXNzd2QpLCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MocGFzc3dkLAotCQkgIlBsYWludGV4dCBvZiBwYXNzd29yZCB0aGF0IHNldHMgc2VjbHZsPTAgd2hlbiB3cml0dGVuIHRvICIKLQkJICIoc3lzZnMgbW91bnQgcG9pbnQpL3NlY2x2bC9wYXNzd2RcbiIpOwotCi0vKioKLSAqIFNIQTEgaGFzaGVkIHZlcnNpb24gb2YgdGhlIG9wdGlvbmFsIHBhc3N3b3JkIHdoaWNoIGNhbiBiZSBwYXNzZWQgaW4KLSAqIHRvIGJyaW5nIHNlY2x2bCB0byAwIChpLmUuLCBmb3IgaGFsdC9yZWJvb3QpLiAgTXVzdCBiZSBpbgotICogaGV4YWRlY2ltYWwgZm9ybWF0ICg0MCBjaGFyYWN0ZXJzKS4JRGVmYXVsdHMgdG8gTlVMTCAodGhlIHBhc3N3ZAotICogYXR0cmlidXRlIGZpbGUgd2lsbCBub3QgYmUgcmVnaXN0ZXJlZCBpbiBzeXNmcykuCi0gKgotICogVXNlIHRoZSBzaGExc3VtIHV0aWxpdHkgdG8gZ2VuZXJhdGUgdGhlIFNIQTEgaGFzaCBvZiBhIHBhc3N3b3JkOgotICoKLSAqIGVjaG8gLW4gInNlY3JldCIgfCBzaGExc3VtCi0gKi8KLSNkZWZpbmUgTUFYX1NIQTFfUEFTU1dECTQxCi1zdGF0aWMgY2hhciBzaGExX3Bhc3N3ZFtNQVhfU0hBMV9QQVNTV0RdOwotbW9kdWxlX3BhcmFtX3N0cmluZyhzaGExX3Bhc3N3ZCwgc2hhMV9wYXNzd2QsIHNpemVvZihzaGExX3Bhc3N3ZCksIDApOwotTU9EVUxFX1BBUk1fREVTQyhzaGExX3Bhc3N3ZCwKLQkJICJTSEExIGhhc2ggKDQwIGhleGFkZWNpbWFsIGNoYXJhY3RlcnMpIG9mIHBhc3N3b3JkIHRoYXQgIgotCQkgInNldHMgc2VjbHZsPTAgd2hlbiBwbGFpbnRleHQgcGFzc3dvcmQgaXMgd3JpdHRlbiB0byAiCi0JCSAiKHN5c2ZzIG1vdW50IHBvaW50KS9zZWNsdmwvcGFzc3dkXG4iKTsKLQotc3RhdGljIGludCBoaWRlSGFzaCA9IDE7Ci1tb2R1bGVfcGFyYW0oaGlkZUhhc2gsIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGhpZGVIYXNoLCAiV2hlbiBzZXQgdG8gMCwgcmVhZGluZyBzZWNsdmwvcGFzc3dkIGZyb20gc3lzZnMgIgotCQkgIndpbGwgcmV0dXJuIHRoZSBTSEExLWhhc2hlZCB2YWx1ZSBvZiB0aGUgcGFzc3dvcmQgdGhhdCAiCi0JCSAibG93ZXJzIHRoZSBzZWN1cmUgbGV2ZWwgdG8gMC5cbiIpOwotCi0jZGVmaW5lIE1ZX05BTUUgInNlY2x2bCIKLQotLyoqCi0gKiBUaGlzIHRpbWUtbGltaXRzIGxvZyB3cml0ZXMgdG8gb25lIHBlciBzZWNvbmQuCi0gKi8KLSNkZWZpbmUgc2VjbHZsX3ByaW50ayh2ZXJiLCB0eXBlLCBmbXQsIGFyZy4uLikJCQlcCi0JZG8gewkJCQkJCQlcCi0JCWlmICh2ZXJib3NpdHkgPj0gdmVyYikgewkJCVwKLQkJCXN0YXRpYyB1bnNpZ25lZCBsb25nIF9wcmlvcjsJCVwKLQkJCXVuc2lnbmVkIGxvbmcgX25vdyA9IGppZmZpZXM7CQlcCi0JCQlpZiAoKF9ub3cgLSBfcHJpb3IpID4gSFopIHsJCVwKLQkJCQlwcmludGsodHlwZSAiJXM6ICVzOiAiIGZtdCwJXAotCQkJCQlNWV9OQU1FLCBfX0ZVTkNUSU9OX18gLAlcCi0JCQkJCSMjIGFyZyk7CQlcCi0JCQkJX3ByaW9yID0gX25vdzsJCQlcCi0JCQl9CQkJCQlcCi0JCX0JCQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotLyoqCi0gKiBUaGUgYWN0dWFsIHNlY3VyaXR5IGxldmVsLiAgUmFuZ2VzIGJldHdlZW4gLTEgYW5kIDIgaW5jbHVzaXZlLgotICovCi1zdGF0aWMgaW50IHNlY2x2bDsKLQotLyoqCi0gKiBmbGFnIHRvIGtlZXAgdHJhY2sgb2YgaG93IHdlIHdlcmUgcmVnaXN0ZXJlZAotICovCi1zdGF0aWMgaW50IHNlY29uZGFyeTsKLQotLyoqCi0gKiBWZXJpZmllcyB0aGF0IHRoZSByZXF1ZXN0ZWQgc2VjdXJlIGxldmVsIGlzIHZhbGlkLCBnaXZlbiB0aGUgY3VycmVudAotICogc2VjdXJlIGxldmVsLgotICovCi1zdGF0aWMgaW50IHNlY2x2bF9zYW5pdHkoaW50IHJlcWx2bCkKLXsKLQlpZiAoKHJlcWx2bCA8IC0xKSB8fCAocmVxbHZsID4gMikpIHsKLQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvIHNldCBzZWNsdmwgb3V0IG9mICIKLQkJCSAgICAgICJyYW5nZTogWyVkXVxuIiwgcmVxbHZsKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmICgoc2VjbHZsID09IDApICYmIChyZXFsdmwgPT0gLTEpKQotCQlyZXR1cm4gMDsKLQlpZiAocmVxbHZsIDwgc2VjbHZsKSB7Ci0JCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBsb3dlciBzZWNsdmwgdG8gIgotCQkJICAgICAgIlslZF1cbiIsIHJlcWx2bCk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCXJldHVybiAwOwotfQotCi0vKioKLSAqIHNlY3VyaXR5IGxldmVsIGFkdmFuY2VtZW50IHJ1bGVzOgotICogICBWYWxpZCBsZXZlbHMgYXJlIC0xIHRocm91Z2ggMiwgaW5jbHVzaXZlLgotICogICBGcm9tIC0xLCBzdHVjay4gIFsgaW4gY2FzZSBjb21waWxlZCBpbnRvIGtlcm5lbCBdCi0gKiAgIEZyb20gMCBvciBhYm92ZSwgY2FuIG9ubHkgaW5jcmVtZW50LgotICovCi1zdGF0aWMgdm9pZCBkb19zZWNsdmxfYWR2YW5jZSh2b2lkICpkYXRhLCB1NjQgdmFsKQotewotCWludCByZXQ7Ci0JaW50IG5ld2x2bCA9IChpbnQpdmFsOwotCi0JcmV0ID0gc2VjbHZsX3Nhbml0eShuZXdsdmwpOwotCWlmIChyZXQpCi0JCXJldHVybjsKLQotCWlmIChuZXdsdmwgPiAyKSB7Ci0JCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQ2Fubm90IGFkdmFuY2UgdG8gc2VjbHZsICIKLQkJCSAgICAgICJbJWRdXG4iLCBuZXdsdmwpOwotCQlyZXR1cm47Ci0JfQotCWlmIChzZWNsdmwgPT0gLTEpIHsKLQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJOb3QgYWxsb3dlZCB0byBhZHZhbmNlIHRvICIKLQkJCSAgICAgICJzZWNsdmwgWyVkXVxuIiwgc2VjbHZsKTsKLQkJcmV0dXJuOwotCX0KLQlzZWNsdmwgPSBuZXdsdmw7ICAvKiB3b3VsZCBpdCBiZSBtb3JlICJjb3JyZWN0IiB0byBzZXQgKmRhdGE/ICovCi0JcmV0dXJuOwotfQotCi1zdGF0aWMgdTY0IHNlY2x2bF9pbnRfZ2V0KHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuICooaW50ICopZGF0YTsKLX0KLQotREVGSU5FX1NJTVBMRV9BVFRSSUJVVEUoc2VjbHZsX2ZpbGVfb3BzLCBzZWNsdmxfaW50X2dldCwgZG9fc2VjbHZsX2FkdmFuY2UsICIlbGxkXG4iKTsKLQotc3RhdGljIHVuc2lnbmVkIGNoYXIgaGFzaGVkUGFzc3dvcmRbU0hBMV9ESUdFU1RfU0laRV07Ci0KLS8qKgotICogQ29udmVydHMgYSBibG9jayBvZiBwbGFpbnRleHQgb2YgaW50byBpdHMgU0hBMSBoYXNoZWQgdmFsdWUuCi0gKgotICogSXQgd291bGQgYmUgbmljZSBpZiBjcnlwdG8gaGFkIGEgd3JhcHBlciB0byBkbyB0aGlzIGZvciB1cyBsaW5lYXIKLSAqIHBlb3BsZS4uLgotICovCi1zdGF0aWMgaW50Ci1wbGFpbnRleHRfdG9fc2hhMSh1bnNpZ25lZCBjaGFyICpoYXNoLCBjb25zdCBjaGFyICpwbGFpbnRleHQsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0Jc3RydWN0IGhhc2hfZGVzYyBkZXNjOwotCXN0cnVjdCBzY2F0dGVybGlzdCBzZzsKLQlpbnQgZXJyOwotCi0JaWYgKGxlbiA+IFBBR0VfU0laRSkgewotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiUGxhaW50ZXh0IHBhc3N3b3JkIHRvbyBsYXJnZSAoJWQgIgotCQkJICAgICAgImNoYXJhY3RlcnMpLiAgTGFyZ2VzdCBwb3NzaWJsZSBpcyAlbHUgIgotCQkJICAgICAgImJ5dGVzLlxuIiwgbGVuLCBQQUdFX1NJWkUpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JZGVzYy50Zm0gPSBjcnlwdG9fYWxsb2NfaGFzaCgic2hhMSIsIDAsIENSWVBUT19BTEdfQVNZTkMpOwotCWlmIChJU19FUlIoZGVzYy50Zm0pKSB7Ci0JCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsCi0JCQkgICAgICAiRmFpbGVkIHRvIGxvYWQgdHJhbnNmb3JtIGZvciBTSEExXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCXNnX2luaXRfb25lKCZzZywgKHU4ICopcGxhaW50ZXh0LCBsZW4pOwotCWRlc2MuZmxhZ3MgPSBDUllQVE9fVEZNX1JFUV9NQVlfU0xFRVA7Ci0JZXJyID0gY3J5cHRvX2hhc2hfZGlnZXN0KCZkZXNjLCAmc2csIGxlbiwgaGFzaCk7Ci0JY3J5cHRvX2ZyZWVfaGFzaChkZXNjLnRmbSk7Ci0JcmV0dXJuIGVycjsKLX0KLQotLyoqCi0gKiBDYWxsZWQgd2hlbmV2ZXIgdGhlIHVzZXIgd3JpdGVzIHRvIHRoZSBzeXNmcyBwYXNzd2QgaGFuZGxlIHRvIHRoaXMga2VybmVsCi0gKiBvYmplY3QuICBJdCBoYXNoZXMgdGhlIHBhc3N3b3JkIGFuZCBjb21wYXJlcyB0aGUgaGFzaGVkIHJlc3VsdHMuCi0gKi8KLXN0YXRpYyBzc2l6ZV90Ci1wYXNzd2Rfd3JpdGVfZmlsZShzdHJ1Y3QgZmlsZSAqIGZpbGUsIGNvbnN0IGNoYXIgX191c2VyICogYnVmLAotCQkJCXNpemVfdCBjb3VudCwgbG9mZl90ICpwcG9zKQotewotCWNoYXIgKnA7Ci0JaW50IGxlbjsKLQl1bnNpZ25lZCBjaGFyIHRtcFtTSEExX0RJR0VTVF9TSVpFXTsKLQotCWlmICghKnBhc3N3ZCAmJiAhKnNoYTFfcGFzc3dkKSB7Ci0JCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJBdHRlbXB0IHRvIHBhc3N3b3JkLXVubG9jayB0aGUgIgotCQkJICAgICAgInNlY2x2bCBtb2R1bGUsIGJ1dCBuZWl0aGVyIGEgcGxhaW4gdGV4dCAiCi0JCQkgICAgICAicGFzc3dvcmQgbm9yIGEgU0hBMSBoYXNoZWQgcGFzc3dvcmQgd2FzICIKLQkJCSAgICAgICJwYXNzZWQgaW4gYXMgYSBtb2R1bGUgcGFyYW1ldGVyISAgVGhpcyBpcyBhICIKLQkJCSAgICAgICJidWcsIHNpbmNlIGl0IHNob3VsZCBub3QgYmUgcG9zc2libGUgdG8gYmUgaW4gIgotCQkJICAgICAgInRoaXMgcGFydCBvZiB0aGUgbW9kdWxlOyBwbGVhc2UgdGVsbCBhICIKLQkJCSAgICAgICJtYWludGFpbmVyIGFib3V0IHRoaXMgZXZlbnQuXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JaWYgKGNvdW50ID49IFBBR0VfU0laRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCpwcG9zICE9IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXAgPSBrbWFsbG9jKGNvdW50LCBHRlBfS0VSTkVMKTsKLQlpZiAoIXApCi0JCXJldHVybiAtRU5PTUVNOwotCWxlbiA9IC1FRkFVTFQ7Ci0JaWYgKGNvcHlfZnJvbV91c2VyKHAsIGJ1ZiwgY291bnQpKQotCQlnb3RvIG91dDsKLQkKLQlsZW4gPSBjb3VudDsKLQkvKiBgYGVjaG8gInNlY3JldCIgPiBzZWNsdmwvcGFzc3dkJycgaW5jbHVkZXMgYSBuZXdsaW5lICovCi0JaWYgKHBbbGVuIC0gMV0gPT0gJ1xuJykKLQkJbGVuLS07Ci0JLyogSGFzaCB0aGUgcGFzc3dvcmQsIHRoZW4gY29tcGFyZSB0aGUgaGFzaGVkIHZhbHVlcyAqLwotCWlmICgobGVuID0gcGxhaW50ZXh0X3RvX3NoYTEodG1wLCBwLCBsZW4pKSkgewotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3IgaGFzaGluZyBwYXNzd29yZDogcmMgPSAiCi0JCQkgICAgICAiWyVkXVxuIiwgbGVuKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbGVuID0gLUVQRVJNOwotCWlmIChtZW1jbXAoaGFzaGVkUGFzc3dvcmQsIHRtcCwgU0hBMV9ESUdFU1RfU0laRSkpCi0JCWdvdG8gb3V0OwotCi0Jc2VjbHZsX3ByaW50aygwLCBLRVJOX0lORk8sCi0JCSAgICAgICJQYXNzd29yZCBhY2NlcHRlZDsgc2VjbHZsIHJlZHVjZWQgdG8gMC5cbiIpOwotCXNlY2x2bCA9IDA7Ci0JbGVuID0gY291bnQ7Ci0KLW91dDoKLQlrZnJlZSAocCk7Ci0JcmV0dXJuIGxlbjsKLX0KLQotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcGFzc3dkX2ZpbGVfb3BzID0gewotCS53cml0ZSA9IHBhc3N3ZF93cml0ZV9maWxlLAotfTsKLQotLyoqCi0gKiBFeHBsaWNpdGVseSBkaXNhbGxvdyBwdHJhY2UnaW5nIHRoZSBpbml0IHByb2Nlc3MuCi0gKi8KLXN0YXRpYyBpbnQgc2VjbHZsX3B0cmFjZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnBhcmVudCwgc3RydWN0IHRhc2tfc3RydWN0ICpjaGlsZCkKLXsKLQlpZiAoc2VjbHZsID49IDAgJiYgY2hpbGQtPnBpZCA9PSAxKSB7Ci0JCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBwdHJhY2UgIgotCQkJICAgICAgInRoZSBpbml0IHByb2Nlc3MgZGlzc2FsbG93ZWQgaW4gIgotCQkJICAgICAgInNlY3VyZSBsZXZlbCAlZFxuIiwgc2VjbHZsKTsKLQkJcmV0dXJuIC1FUEVSTTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogQ2FwYWJpbGl0eSBjaGVja3MgZm9yIHNlY2x2bC4gIFRoZSBtYWpvcml0eSBvZiB0aGUgcG9saWN5Ci0gKiBlbmZvcmNlbWVudCBmb3Igc2VjbHZsIHRha2VzIHBsYWNlIGhlcmUuCi0gKi8KLXN0YXRpYyBpbnQgc2VjbHZsX2NhcGFibGUoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGludCBjYXApCi17Ci0JaW50IHJjID0gMDsKLQotCS8qIGluaXQgY2FuIGRvIGFueXRoaW5nIGl0IHdhbnRzICovCi0JaWYgKHRzay0+cGlkID09IDEpCi0JCXJldHVybiAwOwotCi0JaWYgKHNlY2x2bCA+IDApIHsKLQkJcmMgPSAtRVBFUk07Ci0KLQkJaWYgKGNhcCA9PSBDQVBfTElOVVhfSU1NVVRBQkxFKQotCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvIG1vZGlmeSAiCi0JCQkJICAgICAgInRoZSBJTU1VVEFCTEUgYW5kL29yIEFQUEVORCBleHRlbmRlZCAiCi0JCQkJICAgICAgImF0dHJpYnV0ZSBvbiBhIGZpbGUgd2l0aCB0aGUgSU1NVVRBQkxFICIKLQkJCQkgICAgICAiYW5kL29yIEFQUEVORCBleHRlbmRlZCBhdHRyaWJ1dGUgc2V0ICIKLQkJCQkgICAgICAiZGVuaWVkIGluIHNlY2x2bCBbJWRdXG4iLCBzZWNsdmwpOwotCQllbHNlIGlmIChjYXAgPT0gQ0FQX1NZU19SQVdJTykKLQkJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byBwZXJmb3JtICIKLQkJCQkgICAgICAicmF3IEkvTyB3aGlsZSBpbiBzZWN1cmUgbGV2ZWwgWyVkXSAiCi0JCQkJICAgICAgImRlbmllZFxuIiwgc2VjbHZsKTsKLQkJZWxzZSBpZiAoY2FwID09IENBUF9ORVRfQURNSU4pCi0JCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gcGVyZm9ybSAiCi0JCQkJICAgICAgIm5ldHdvcmsgYWRtaW5pc3RyYXRpdmUgdGFzayB3aGlsZSAiCi0JCQkJICAgICAgImluIHNlY3VyZSBsZXZlbCBbJWRdIGRlbmllZFxuIiwgc2VjbHZsKTsKLQkJZWxzZSBpZiAoY2FwID09IENBUF9TRVRVSUQpCi0JCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gc2V0dWlkICIKLQkJCQkgICAgICAid2hpbGUgaW4gc2VjdXJlIGxldmVsIFslZF0gZGVuaWVkXG4iLAotCQkJCSAgICAgIHNlY2x2bCk7Ci0JCWVsc2UgaWYgKGNhcCA9PSBDQVBfU0VUR0lEKQotCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvIHNldGdpZCAiCi0JCQkJICAgICAgIndoaWxlIGluIHNlY3VyZSBsZXZlbCBbJWRdIGRlbmllZFxuIiwKLQkJCQkgICAgICBzZWNsdmwpOwotCQllbHNlIGlmIChjYXAgPT0gQ0FQX1NZU19NT0RVTEUpCi0JCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gcGVyZm9ybSAiCi0JCQkJICAgICAgImEgbW9kdWxlIG9wZXJhdGlvbiB3aGlsZSBpbiBzZWN1cmUgIgotCQkJCSAgICAgICJsZXZlbCBbJWRdIGRlbmllZFxuIiwgc2VjbHZsKTsKLQkJZWxzZQotCQkJcmMgPSAwOwotCX0KLQotCWlmICghcmMpIHsKLQkJaWYgKCEoY2FwX2lzX2ZzX2NhcChjYXApID8gdHNrLT5mc3VpZCA9PSAwIDogdHNrLT5ldWlkID09IDApKQotCQkJcmMgPSAtRVBFUk07Ci0JfQotCi0JaWYgKHJjKQotCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkNhcGFiaWxpdHkgZGVuaWVkXG4iKTsKLQotCXJldHVybiByYzsKLX0KLQotLyoqCi0gKiBEaXNhbGxvdyByZXZlcnNpbmcgdGhlIGNsb2NrIGluIHNlY2x2bCA+IDEKLSAqLwotc3RhdGljIGludCBzZWNsdmxfc2V0dGltZShzdHJ1Y3QgdGltZXNwZWMgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQotewotCWlmICh0diAmJiBzZWNsdmwgPiAxKSB7Ci0JCXN0cnVjdCB0aW1lc3BlYyBub3c7Ci0JCW5vdyA9IGN1cnJlbnRfa2VybmVsX3RpbWUoKTsKLQkJaWYgKHR2LT50dl9zZWMgPCBub3cudHZfc2VjIHx8Ci0JCSAgICAodHYtPnR2X3NlYyA9PSBub3cudHZfc2VjICYmIHR2LT50dl9uc2VjIDwgbm93LnR2X25zZWMpKSB7Ci0JCQlzZWNsdmxfcHJpbnRrKDEsIEtFUk5fV0FSTklORywgIkF0dGVtcHQgdG8gZGVjcmVtZW50ICIKLQkJCQkgICAgICAidGltZSBpbiBzZWN1cmUgbGV2ZWwgJWQgZGVuaWVkOiAiCi0JCQkJICAgICAgImN1cnJlbnQtPnBpZCA9IFslZF0sICIKLQkJCQkgICAgICAiY3VycmVudC0+Z3JvdXBfbGVhZGVyLT5waWQgPSBbJWRdXG4iLAotCQkJCSAgICAgIHNlY2x2bCwgY3VycmVudC0+cGlkLAotCQkJCSAgICAgIGN1cnJlbnQtPmdyb3VwX2xlYWRlci0+cGlkKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0JCS8qIGlmIGF0dGVtcHQgdG8gZGVjcmVtZW50IHRpbWUgKi8KLQl9CQkJLyogaWYgc2VjbHZsID4gMSAqLwotCXJldHVybiAwOwotfQotCi0vKiBjbGFpbSB0aGUgYmxvY2tkZXYgdG8gZXhjbHVkZSBtb3VudGVycywgcmVsZWFzZSBvbiBmaWxlIGNsb3NlICovCi1zdGF0aWMgaW50IHNlY2x2bF9iZF9jbGFpbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWludCBob2xkZXI7Ci0Jc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiA9IE5VTEw7Ci0JZGV2X3QgZGV2ID0gaW5vZGUtPmlfcmRldjsKLQliZGV2ID0gb3Blbl9ieV9kZXZudW0oZGV2LCBGTU9ERV9XUklURSk7Ci0JaWYgKGJkZXYpIHsKLQkJaWYgKGJkX2NsYWltKGJkZXYsICZob2xkZXIpKSB7Ci0JCQlibGtkZXZfcHV0KGJkZXYpOwotCQkJcmV0dXJuIC1FUEVSTTsKLQkJfQotCQkvKiBjbGFpbWVkLCBtYXJrIGl0IHRvIHJlbGVhc2Ugb24gY2xvc2UgKi8KLQkJaW5vZGUtPmlfc2VjdXJpdHkgPSBjdXJyZW50OwotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogcmVsZWFzZSB0aGUgYmxvY2tkZXYgaWYgeW91IGNsYWltZWQgaXQgKi8KLXN0YXRpYyB2b2lkIHNlY2x2bF9iZF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaWYgKGlub2RlICYmIFNfSVNCTEsoaW5vZGUtPmlfbW9kZSkgJiYgaW5vZGUtPmlfc2VjdXJpdHkgPT0gY3VycmVudCkgewotCQlzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2ID0gaW5vZGUtPmlfYmRldjsKLQkJaWYgKGJkZXYpIHsKLQkJCWJkX3JlbGVhc2UoYmRldik7Ci0JCQlibGtkZXZfcHV0KGJkZXYpOwotCQkJaW5vZGUtPmlfc2VjdXJpdHkgPSBOVUxMOwotCQl9Ci0JfQotfQotCi0vKioKLSAqIFNlY3VyaXR5IGZvciB3cml0ZXMgdG8gYmxvY2sgZGV2aWNlcyBpcyByZWd1bGF0ZWQgYnkgdGhpcyBzZWNsdmwKLSAqIGZ1bmN0aW9uLiAgRGVueSBhbGwgd3JpdGVzIHRvIGJsb2NrIGRldmljZXMgaW4gc2VjbHZsIDIuICBJbgotICogc2VjbHZsIDEsIHdlIG9ubHkgZGVueSB3cml0ZXMgdG8gKm1vdW50ZWQqIGJsb2NrIGRldmljZXMuCi0gKi8KLXN0YXRpYyBpbnQKLXNlY2x2bF9pbm9kZV9wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrLCBzdHJ1Y3QgbmFtZWlkYXRhICpuZCkKLXsKLQlpZiAoY3VycmVudC0+cGlkICE9IDEgJiYgU19JU0JMSyhpbm9kZS0+aV9tb2RlKSAmJiAobWFzayAmIE1BWV9XUklURSkpIHsKLQkJc3dpdGNoIChzZWNsdmwpIHsKLQkJY2FzZSAyOgotCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJXcml0ZSB0byBibG9jayBkZXZpY2UgIgotCQkJCSAgICAgICJkZW5pZWQgaW4gc2VjdXJlIGxldmVsIFslZF1cbiIsIHNlY2x2bCk7Ci0JCQlyZXR1cm4gLUVQRVJNOwotCQljYXNlIDE6Ci0JCQlpZiAoc2VjbHZsX2JkX2NsYWltKGlub2RlKSkgewotCQkJCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLAotCQkJCQkgICAgICAiV3JpdGUgdG8gbW91bnRlZCBibG9jayBkZXZpY2UgIgotCQkJCQkgICAgICAiZGVuaWVkIGluIHNlY3VyZSBsZXZlbCBbJWRdXG4iLAotCQkJCQkgICAgICBzZWNsdmwpOwotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCX0KLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qKgotICogVGhlIFNVSUQgYW5kIFNHSUQgYml0cyBjYW5ub3QgYmUgc2V0IGluIHNlY2x2bCA+PSAxCi0gKi8KLXN0YXRpYyBpbnQgc2VjbHZsX2lub2RlX3NldGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKQotewotCWlmIChzZWNsdmwgPiAwKSB7Ci0JCWlmIChpYXR0ci0+aWFfdmFsaWQgJiBBVFRSX01PREUpCi0JCQlpZiAoaWF0dHItPmlhX21vZGUgJiBTX0lTVUlEIHx8Ci0JCQkgICAgaWF0dHItPmlhX21vZGUgJiBTX0lTR0lEKSB7Ci0JCQkJc2VjbHZsX3ByaW50aygxLCBLRVJOX1dBUk5JTkcsICJBdHRlbXB0IHRvICIKLQkJCQkJICAgICAgIm1vZGlmeSBTVUlEIG9yIFNHSUQgYml0ICIKLQkJCQkJICAgICAgImRlbmllZCBpbiBzZWNsdmwgWyVkXVxuIiwKLQkJCQkJICAgICAgc2VjbHZsKTsKLQkJCQlyZXR1cm4gLUVQRVJNOwotCQkJfQotCX0KLQlyZXR1cm4gMDsKLX0KLQotLyogcmVsZWFzZSBidXNpZWQgYmxvY2sgZGV2aWNlcyAqLwotc3RhdGljIHZvaWQgc2VjbHZsX2ZpbGVfZnJlZV9zZWN1cml0eShzdHJ1Y3QgZmlsZSAqZmlscCkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBmaWxwLT5mX2RlbnRyeTsKLQotCWlmIChkZW50cnkpCi0JCXNlY2x2bF9iZF9yZWxlYXNlKGRlbnRyeS0+ZF9pbm9kZSk7Ci19Ci0KLS8qKgotICogQ2Fubm90IHVubW91bnQgaW4gc2VjdXJlIGxldmVsIDIKLSAqLwotc3RhdGljIGludCBzZWNsdmxfdW1vdW50KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBpbnQgZmxhZ3MpCi17Ci0JaWYgKGN1cnJlbnQtPnBpZCAhPSAxICYmIHNlY2x2bCA9PSAyKSB7Ci0JCXNlY2x2bF9wcmludGsoMSwgS0VSTl9XQVJOSU5HLCAiQXR0ZW1wdCB0byB1bm1vdW50IGluIHNlY3VyZSAiCi0JCQkgICAgICAibGV2ZWwgJWRcbiIsIHNlY2x2bCk7Ci0JCXJldHVybiAtRVBFUk07Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IHNlY3VyaXR5X29wZXJhdGlvbnMgc2VjbHZsX29wcyA9IHsKLQkucHRyYWNlID0gc2VjbHZsX3B0cmFjZSwKLQkuY2FwYWJsZSA9IHNlY2x2bF9jYXBhYmxlLAotCS5pbm9kZV9wZXJtaXNzaW9uID0gc2VjbHZsX2lub2RlX3Blcm1pc3Npb24sCi0JLmlub2RlX3NldGF0dHIgPSBzZWNsdmxfaW5vZGVfc2V0YXR0ciwKLQkuZmlsZV9mcmVlX3NlY3VyaXR5ID0gc2VjbHZsX2ZpbGVfZnJlZV9zZWN1cml0eSwKLQkuc2V0dGltZSA9IHNlY2x2bF9zZXR0aW1lLAotCS5zYl91bW91bnQgPSBzZWNsdmxfdW1vdW50LAotfTsKLQotLyoqCi0gKiBQcm9jZXNzIHRoZSBwYXNzd29yZC1yZWxhdGVkIG1vZHVsZSBwYXJhbWV0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgcHJvY2Vzc1Bhc3N3b3JkKHZvaWQpCi17Ci0JaW50IHJjID0gMDsKLQlpZiAoKnBhc3N3ZCkgewotCQljaGFyICpwOwotCi0JCWlmICgqc2hhMV9wYXNzd2QpIHsKLQkJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJFcnJvcjogQm90aCAiCi0JCQkJICAgICAgInBhc3N3ZCBhbmQgc2hhMV9wYXNzd2QgIgotCQkJCSAgICAgICJ3ZXJlIHNldCwgYnV0IHRoZXkgYXJlIG11dHVhbGx5ICIKLQkJCQkgICAgICAiZXhjbHVzaXZlLlxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCXAgPSBrc3RyZHVwKHBhc3N3ZCwgR0ZQX0tFUk5FTCk7Ci0JCWlmIChwID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQotCQlpZiAoKHJjID0gcGxhaW50ZXh0X3RvX3NoYTEoaGFzaGVkUGFzc3dvcmQsIHAsIHN0cmxlbihwKSkpKQotCQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yOiBTSEExIHN1cHBvcnQgbm90ICIKLQkJCQkgICAgICAiaW4ga2VybmVsXG4iKTsKLQotCQlrZnJlZSAocCk7Ci0JCS8qIEFsbCBzdGF0aWMgZGF0YSBnb2VzIHRvIHRoZSBCU1MsIHdoaWNoIHplcm8ncyB0aGUKLQkJICogcGxhaW50ZXh0IHBhc3N3b3JkIG91dCBmb3IgdXMuICovCi0JfSBlbHNlIGlmICgqc2hhMV9wYXNzd2QpIHsJLy8gQmFzZSAxNgotCQlpbnQgaTsKLQkJaSA9IHN0cmxlbihzaGExX3Bhc3N3ZCk7Ci0JCWlmIChpICE9IChTSEExX0RJR0VTVF9TSVpFICogMikpIHsKLQkJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJSZWNlaXZlZCBbJWRdIGJ5dGVzOyAiCi0JCQkJICAgICAgImV4cGVjdGVkIFslZF0gZm9yIHRoZSBoZXhhZGVjaW1hbCAiCi0JCQkJICAgICAgInJlcHJlc2VudGF0aW9uIG9mIHRoZSBTSEExIGhhc2ggb2YgIgotCQkJCSAgICAgICJ0aGUgcGFzc3dvcmQuXG4iLAotCQkJCSAgICAgIGksIChTSEExX0RJR0VTVF9TSVpFICogMikpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJd2hpbGUgKChpIC09IDIpICsgMikgewotCQkJdW5zaWduZWQgY2hhciB0bXA7Ci0JCQl0bXAgPSBzaGExX3Bhc3N3ZFtpICsgMl07Ci0JCQlzaGExX3Bhc3N3ZFtpICsgMl0gPSAnXDAnOwotCQkJaGFzaGVkUGFzc3dvcmRbaSAvIDJdID0gKHVuc2lnbmVkIGNoYXIpCi0JCQkgICAgc2ltcGxlX3N0cnRvbCgmc2hhMV9wYXNzd2RbaV0sIE5VTEwsIDE2KTsKLQkJCXNoYTFfcGFzc3dkW2kgKyAyXSA9IHRtcDsKLQkJfQotCX0KLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogc2VjdXJpdHlmcyByZWdpc3RyYXRpb25zCi0gKi8KLXN0cnVjdCBkZW50cnkgKmRpcl9pbm8sICpzZWNsdmxfaW5vLCAqcGFzc3dkX2lubzsKLQotc3RhdGljIGludCBzZWNsdmxmc19yZWdpc3Rlcih2b2lkKQotewotCWludCByYyA9IDA7Ci0KLQlkaXJfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZGlyKCJzZWNsdmwiLCBOVUxMKTsKLQotCWlmIChJU19FUlIoZGlyX2lubykpCi0JCXJldHVybiBQVFJfRVJSKGRpcl9pbm8pOwotCi0Jc2VjbHZsX2lubyA9IHNlY3VyaXR5ZnNfY3JlYXRlX2ZpbGUoInNlY2x2bCIsIFNfSVJVR08gfCBTX0lXVVNSLAotCQkJCWRpcl9pbm8sICZzZWNsdmwsICZzZWNsdmxfZmlsZV9vcHMpOwotCWlmIChJU19FUlIoc2VjbHZsX2lubykpIHsKLQkJcmMgPSBQVFJfRVJSKHNlY2x2bF9pbm8pOwotCQlnb3RvIG91dF9kZWxkaXI7Ci0JfQotCWlmICgqcGFzc3dkIHx8ICpzaGExX3Bhc3N3ZCkgewotCQlwYXNzd2RfaW5vID0gc2VjdXJpdHlmc19jcmVhdGVfZmlsZSgicGFzc3dkIiwgU19JUlVHTyB8IFNfSVdVU1IsCi0JCQkJZGlyX2lubywgTlVMTCwgJnBhc3N3ZF9maWxlX29wcyk7Ci0JCWlmIChJU19FUlIocGFzc3dkX2lubykpIHsKLQkJCXJjID0gUFRSX0VSUihwYXNzd2RfaW5vKTsKLQkJCWdvdG8gb3V0X2RlbGY7Ci0JCX0KLQl9Ci0JcmV0dXJuIHJjOwotCi1vdXRfZGVsZjoKLQlzZWN1cml0eWZzX3JlbW92ZShzZWNsdmxfaW5vKTsKLQotb3V0X2RlbGRpcjoKLQlzZWN1cml0eWZzX3JlbW92ZShkaXJfaW5vKTsKLQotCXJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQgc2VjbHZsZnNfdW5yZWdpc3Rlcih2b2lkKQotewotCXNlY3VyaXR5ZnNfcmVtb3ZlKHNlY2x2bF9pbm8pOwotCi0JaWYgKCpwYXNzd2QgfHwgKnNoYTFfcGFzc3dkKQotCQlzZWN1cml0eWZzX3JlbW92ZShwYXNzd2RfaW5vKTsKLQotCXNlY3VyaXR5ZnNfcmVtb3ZlKGRpcl9pbm8pOwotfQotCi0vKioKLSAqIEluaXRpYWxpemUgdGhlIHNlY2x2bCBtb2R1bGUuCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IHNlY2x2bF9pbml0KHZvaWQpCi17Ci0JaW50IHJjID0gMDsKLQlzdGF0aWMgY2hhciBvbmNlOwotCi0JaWYgKHZlcmJvc2l0eSA8IDAgfHwgdmVyYm9zaXR5ID4gMSkgewotCQlwcmludGsoS0VSTl9FUlIgIkVycm9yOiBiYWQgdmVyYm9zaXR5IFslZF07IG9ubHkgMCBvciAxICIKLQkJICAgICAgICJhcmUgdmFsaWQgdmFsdWVzXG4iLCB2ZXJib3NpdHkpOwotCQlyYyA9IC1FSU5WQUw7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JaWYgKGluaXRsdmwgPCAtMSB8fCBpbml0bHZsID4gMikgewotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3I6IGJhZCBpbml0aWFsIHNlY3VyZWxldmVsICIKLQkJCSAgICAgICJbJWRdLlxuIiwgaW5pdGx2bCk7Ci0JCXJjID0gLUVJTlZBTDsKLQkJZ290byBleGl0OwotCX0KLQlzZWNsdmwgPSBpbml0bHZsOwotCWlmICgocmMgPSBwcm9jZXNzUGFzc3dvcmQoKSkpIHsKLQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwgIkVycm9yIHByb2Nlc3NpbmcgdGhlIHBhc3N3b3JkICIKLQkJCSAgICAgICJtb2R1bGUgcGFyYW1ldGVyKHMpOiByYyA9IFslZF1cbiIsIHJjKTsKLQkJZ290byBleGl0OwotCX0KLQotCWlmICgocmMgPSBzZWNsdmxmc19yZWdpc3RlcigpKSkgewotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fRVJSLCAiRXJyb3IgcmVnaXN0ZXJpbmcgd2l0aCBzeXNmc1xuIik7Ci0JCWdvdG8gZXhpdDsKLQl9Ci0JLyogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIHNlY3VyaXR5IGZyYW1ld29yayAqLwotCWlmIChyZWdpc3Rlcl9zZWN1cml0eSgmc2VjbHZsX29wcykpIHsKLQkJc2VjbHZsX3ByaW50aygwLCBLRVJOX0VSUiwKLQkJCSAgICAgICJzZWNsdmw6IEZhaWx1cmUgcmVnaXN0ZXJpbmcgd2l0aCB0aGUgIgotCQkJICAgICAgImtlcm5lbC5cbiIpOwotCQkvKiB0cnkgcmVnaXN0ZXJpbmcgd2l0aCBwcmltYXJ5IG1vZHVsZSAqLwotCQlyYyA9IG1vZF9yZWdfc2VjdXJpdHkoTVlfTkFNRSwgJnNlY2x2bF9vcHMpOwotCQlpZiAocmMpIHsKLQkJCXNlY2x2bF9wcmludGsoMCwgS0VSTl9FUlIsICJzZWNsdmw6IEZhaWx1cmUgIgotCQkJCSAgICAgICJyZWdpc3RlcmluZyB3aXRoIHByaW1hcnkgc2VjdXJpdHkgIgotCQkJCSAgICAgICJtb2R1bGUuXG4iKTsKLQkJCXNlY2x2bGZzX3VucmVnaXN0ZXIoKTsKLQkJCWdvdG8gZXhpdDsKLQkJfQkJLyogaWYgcHJpbWFyeSBtb2R1bGUgcmVnaXN0ZXJlZCAqLwotCQlzZWNvbmRhcnkgPSAxOwotCX0JCQkvKiBpZiB3ZSByZWdpc3RlcmVkIG91cnNlbHZlcyB3aXRoIHRoZSBzZWN1cml0eSBmcmFtZXdvcmsgKi8KLQotCXNlY2x2bF9wcmludGsoMCwgS0VSTl9JTkZPLCAic2VjbHZsOiBTdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuXG4iKTsKLQotCWlmIChvbmNlKSB7Ci0JCW9uY2UgPSAxOwotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fSU5GTywgInNlY2x2bCBpcyBnb2luZyBhd2F5LiBJdCBoYXMgYmVlbiAiCi0JCQkJImJ1Z2d5IGZvciBhZ2VzLiBBbHNvLCBiZSB3YXJuZWQgdGhhdCAiCi0JCQkJIlNlY3VyZWxldmVscyBhcmUgdXNlbGVzcy4iKTsKLQl9Ci0gZXhpdDoKLQlpZiAocmMpCi0JCXByaW50ayhLRVJOX0VSUiAic2VjbHZsOiBFcnJvciBkdXJpbmcgaW5pdGlhbGl6YXRpb246IHJjID0gIgotCQkgICAgICAgIlslZF1cbiIsIHJjKTsKLQlyZXR1cm4gcmM7Ci19Ci0KLS8qKgotICogUmVtb3ZlIHRoZSBzZWNsdmwgbW9kdWxlLgotICovCi1zdGF0aWMgdm9pZCBfX2V4aXQgc2VjbHZsX2V4aXQodm9pZCkKLXsKLQlzZWNsdmxmc191bnJlZ2lzdGVyKCk7Ci0KLQlpZiAoc2Vjb25kYXJ5KQotCQltb2RfdW5yZWdfc2VjdXJpdHkoTVlfTkFNRSwgJnNlY2x2bF9vcHMpOwotCWVsc2UgaWYgKHVucmVnaXN0ZXJfc2VjdXJpdHkoJnNlY2x2bF9vcHMpKQotCQlzZWNsdmxfcHJpbnRrKDAsIEtFUk5fSU5GTywKLQkJCSAgICAgICJzZWNsdmw6IEZhaWx1cmUgdW5yZWdpc3RlcmluZyB3aXRoIHRoZSAiCi0JCQkgICAgICAia2VybmVsXG4iKTsKLX0KLQotbW9kdWxlX2luaXQoc2VjbHZsX2luaXQpOwotbW9kdWxlX2V4aXQoc2VjbHZsX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEEuIEhhbGNyb3cgPG1pa2VAaGFsY3Jvdy51cz4iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiTFNNIGltcGxlbWVudGF0aW9uIG9mIHRoZSBCU0QgU2VjdXJlIExldmVscyIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jIGIvc2VjdXJpdHkvc2VsaW51eC9ob29rcy5jCmluZGV4IGU0ZDgxYTQuLmU5OTY5YTIgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L3NlbGludXgvaG9va3MuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L2hvb2tzLmMKQEAgLTM5OCw3ICszOTgsNyBAQAogCQkvKiBTdGFuZGFyZCBzdHJpbmctYmFzZWQgb3B0aW9ucy4gKi8KIAkJY2hhciAqcCwgKm9wdGlvbnMgPSBkYXRhOwogCi0JCXdoaWxlICgocCA9IHN0cnNlcCgmb3B0aW9ucywgIiwiKSkgIT0gTlVMTCkgeworCQl3aGlsZSAoKHAgPSBzdHJzZXAoJm9wdGlvbnMsICJ8IikpICE9IE5VTEwpIHsKIAkJCWludCB0b2tlbjsKIAkJCXN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTsKIApAQCAtMTkyMywxOCArMTkyMyw0MCBAQAogCWlmICghKmZpcnN0KSB7CiAJCSoqdG8gPSAnLCc7CiAJCSp0byArPSAxOwotCX0KLQllbHNlCisJfSBlbHNlCiAJCSpmaXJzdCA9IDA7CiAJbWVtY3B5KCp0bywgZnJvbSwgbGVuKTsKIAkqdG8gKz0gbGVuOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgdGFrZV9zZWxpbnV4X29wdGlvbihjaGFyICoqdG8sIGNoYXIgKmZyb20sIGludCAqZmlyc3QsIAorCQkgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4pCit7CisJaW50IGN1cnJlbnRfc2l6ZSA9IDA7CisKKwlpZiAoISpmaXJzdCkgeworCQkqKnRvID0gJ3wnOworCQkqdG8gKz0gMTsKKwl9CisJZWxzZQorCQkqZmlyc3QgPSAwOworCisJd2hpbGUgKGN1cnJlbnRfc2l6ZSA8IGxlbikgeworCQlpZiAoKmZyb20gIT0gJyInKSB7CisJCQkqKnRvID0gKmZyb207CisJCQkqdG8gKz0gMTsKKwkJfQorCQlmcm9tICs9IDE7CisJCWN1cnJlbnRfc2l6ZSArPSAxOworCX0KK30KKwogc3RhdGljIGludCBzZWxpbnV4X3NiX2NvcHlfZGF0YShzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqdHlwZSwgdm9pZCAqb3JpZywgdm9pZCAqY29weSkKIHsKIAlpbnQgZm5vc2VjLCBmc2VjLCByYyA9IDA7CiAJY2hhciAqaW5fc2F2ZSwgKmluX2N1cnIsICppbl9lbmQ7CiAJY2hhciAqc2VjX2N1cnIsICpub3NlY19zYXZlLCAqbm9zZWM7CisJaW50IG9wZW5fcXVvdGUgPSAwOwogCiAJaW5fY3VyciA9IG9yaWc7CiAJc2VjX2N1cnIgPSBjb3B5OwpAQCAtMTk1NiwxMSArMTk3OCwxNCBAQAogCWluX3NhdmUgPSBpbl9lbmQgPSBvcmlnOwogCiAJZG8gewotCQlpZiAoKmluX2VuZCA9PSAnLCcgfHwgKmluX2VuZCA9PSAnXDAnKSB7CisJCWlmICgqaW5fZW5kID09ICciJykKKwkJCW9wZW5fcXVvdGUgPSAhb3Blbl9xdW90ZTsKKwkJaWYgKCgqaW5fZW5kID09ICcsJyAmJiBvcGVuX3F1b3RlID09IDApIHx8CisJCQkJKmluX2VuZCA9PSAnXDAnKSB7CiAJCQlpbnQgbGVuID0gaW5fZW5kIC0gaW5fY3VycjsKIAogCQkJaWYgKHNlbGludXhfb3B0aW9uKGluX2N1cnIsIGxlbikpCi0JCQkJdGFrZV9vcHRpb24oJnNlY19jdXJyLCBpbl9jdXJyLCAmZnNlYywgbGVuKTsKKwkJCQl0YWtlX3NlbGludXhfb3B0aW9uKCZzZWNfY3VyciwgaW5fY3VyciwgJmZzZWMsIGxlbik7CiAJCQllbHNlCiAJCQkJdGFrZV9vcHRpb24oJm5vc2VjLCBpbl9jdXJyLCAmZm5vc2VjLCBsZW4pOwogCkBAIC0zNTk0LDcgKzM2MTksOSBAQAogCXN0cnVjdCBpbm9kZV9zZWN1cml0eV9zdHJ1Y3QgKmlzZWMgPSBTT0NLX0lOT0RFKHBhcmVudCktPmlfc2VjdXJpdHk7CiAJc3RydWN0IHNrX3NlY3VyaXR5X3N0cnVjdCAqc2tzZWMgPSBzay0+c2tfc2VjdXJpdHk7CiAKLQlpc2VjLT5zaWQgPSBza3NlYy0+c2lkOworCWlmIChzay0+c2tfZmFtaWx5ID09IFBGX0lORVQgfHwgc2stPnNrX2ZhbWlseSA9PSBQRl9JTkVUNiB8fAorCSAgICBzay0+c2tfZmFtaWx5ID09IFBGX1VOSVgpCisJCWlzZWMtPnNpZCA9IHNrc2VjLT5zaWQ7CiAKIAlzZWxpbnV4X25ldGxibF9zb2NrX2dyYWZ0KHNrLCBwYXJlbnQpOwogfQpkaWZmIC0tZ2l0IGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYyBiL3NlY3VyaXR5L3NlbGludXgvc2VsaW51eGZzLmMKaW5kZXggMDA1MzRjMy4uY2QyNDQ0MSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkvc2VsaW51eC9zZWxpbnV4ZnMuYworKysgYi9zZWN1cml0eS9zZWxpbnV4L3NlbGludXhmcy5jCkBAIC03NzEsNyArNzcxLDYgQEAKIAlpZiAocmV0KSB7CiAJCXJldC0+aV9tb2RlID0gbW9kZTsKIAkJcmV0LT5pX3VpZCA9IHJldC0+aV9naWQgPSAwOwotCQlyZXQtPmlfYmxrc2l6ZSA9IFBBR0VfQ0FDSEVfU0laRTsKIAkJcmV0LT5pX2Jsb2NrcyA9IDA7CiAJCXJldC0+aV9hdGltZSA9IHJldC0+aV9tdGltZSA9IHJldC0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAl9CkBAIC0xMjU0LDEwICsxMjUzLDEwIEBACiAJaW5vZGUtPmlfb3AgPSAmc2ltcGxlX2Rpcl9pbm9kZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX2ZvcCA9ICZzaW1wbGVfZGlyX29wZXJhdGlvbnM7CiAJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAiLiIgZW50cnkpICovCi0JaW5vZGUtPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoaW5vZGUpOwogCWRfYWRkKGRlbnRyeSwgaW5vZGUpOwogCS8qIGJ1bXAgbGluayBjb3VudCBvbiBwYXJlbnQgZGlyZWN0b3J5LCB0b28gKi8KLQlkaXItPmlfbmxpbmsrKzsKKwlpbmNfbmxpbmsoZGlyKTsKIG91dDoKIAlyZXR1cm4gcmV0OwogfQpkaWZmIC0tZ2l0IGEvc291bmQvTWFrZWZpbGUgYi9zb3VuZC9NYWtlZmlsZQppbmRleCAxZjYwNzk3Li41ZjZiZWY1IDEwMDY0NAotLS0gYS9zb3VuZC9NYWtlZmlsZQorKysgYi9zb3VuZC9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKICMKIAogb2JqLSQoQ09ORklHX1NPVU5EKSArPSBzb3VuZGNvcmUubworb2JqLSQoQ09ORklHX1NPVU5EX1BSSU1FKSArPSBzb3VuZF9maXJtd2FyZS5vCiBvYmotJChDT05GSUdfU09VTkRfUFJJTUUpICs9IG9zcy8KIG9iai0kKENPTkZJR19ETUFTT1VORCkgKz0gb3NzLwogb2JqLSQoQ09ORklHX1NORCkgKz0gY29yZS8gaTJjLyBkcml2ZXJzLyBpc2EvIHBjaS8gcHBjLyBhcm0vIHN5bnRoLyB1c2IvIHNwYXJjLyBwYXJpc2MvIHBjbWNpYS8gbWlwcy8KQEAgLTExLDQgKzEyLDQgQEAKICAgb2JqLXkgKz0gbGFzdC5vCiBlbmRpZgogCi1zb3VuZGNvcmUtb2JqcyAgOj0gc291bmRfY29yZS5vIHNvdW5kX2Zpcm13YXJlLm8KK3NvdW5kY29yZS1vYmpzICA6PSBzb3VuZF9jb3JlLm8KZGlmZiAtLWdpdCBhL3NvdW5kL2NvcmUvcGNtLmMgYi9zb3VuZC9jb3JlL3BjbS5jCmluZGV4IGJmOGY0MTIuLmZiYmJjZDIgMTAwNjQ0Ci0tLSBhL3NvdW5kL2NvcmUvcGNtLmMKKysrIGIvc291bmQvY29yZS9wY20uYwpAQCAtNjI5LDYgKzYyOSw5IEBACiAJCXN1YnN0cmVhbS0+bnVtYmVyID0gaWR4OwogCQlzdWJzdHJlYW0tPnN0cmVhbSA9IHN0cmVhbTsKIAkJc3ByaW50ZihzdWJzdHJlYW0tPm5hbWUsICJzdWJkZXZpY2UgIyVpIiwgaWR4KTsKKwkJc25wcmludGYoc3Vic3RyZWFtLT5sYXRlbmN5X2lkLCBzaXplb2Yoc3Vic3RyZWFtLT5sYXRlbmN5X2lkKSwKKwkJCSAiQUxTQS1QQ00lZC0lZCVjJWQiLCBwY20tPmNhcmQtPm51bWJlciwgcGNtLT5kZXZpY2UsCisJCQkgKHN0cmVhbSA/ICdjJyA6ICdwJyksIGlkeCk7CiAJCXN1YnN0cmVhbS0+YnVmZmVyX2J5dGVzX21heCA9IFVJTlRfTUFYOwogCQlpZiAocHJldiA9PSBOVUxMKQogCQkJcHN0ci0+c3Vic3RyZWFtID0gc3Vic3RyZWFtOwpkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9wY21fbmF0aXZlLmMgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwppbmRleCAwMjI0YzcwLi4zN2I0YjEwIDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYworKysgYi9zb3VuZC9jb3JlL3BjbV9uYXRpdmUuYwpAQCAtMjUsNiArMjUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZpbGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2xhdGVuY3kuaD4KICNpbmNsdWRlIDxsaW51eC91aW8uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvY29udHJvbC5oPgpAQCAtMzQ3LDExICszNDgsMjYgQEAKIAlyZXR1cm4gZXJyOwogfQogCitzdGF0aWMgaW50IHBlcmlvZF90b191c2VjcyhzdHJ1Y3Qgc25kX3BjbV9ydW50aW1lICpydW50aW1lKQoreworCWludCB1c2VjczsKKworCWlmICghIHJ1bnRpbWUtPnJhdGUpCisJCXJldHVybiAtMTsgLyogaW52YWxpZCAqLworCisJLyogdGFrZSA3NSUgb2YgcGVyaW9kIHRpbWUgYXMgdGhlIGRlYWRsaW5lICovCisJdXNlY3MgPSAoNzUwMDAwIC8gcnVudGltZS0+cmF0ZSkgKiBydW50aW1lLT5wZXJpb2Rfc2l6ZTsKKwl1c2VjcyArPSAoKDc1MDAwMCAlIHJ1bnRpbWUtPnJhdGUpICogcnVudGltZS0+cGVyaW9kX3NpemUpIC8KKwkJcnVudGltZS0+cmF0ZTsKKworCXJldHVybiB1c2VjczsKK30KKwogc3RhdGljIGludCBzbmRfcGNtX2h3X3BhcmFtcyhzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0gKnN1YnN0cmVhbSwKIAkJCSAgICAgc3RydWN0IHNuZF9wY21faHdfcGFyYW1zICpwYXJhbXMpCiB7CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAqcnVudGltZTsKLQlpbnQgZXJyOworCWludCBlcnIsIHVzZWNzOwogCXVuc2lnbmVkIGludCBiaXRzOwogCXNuZF9wY21fdWZyYW1lc190IGZyYW1lczsKIApAQCAtNDMxLDYgKzQ0NywxMCBAQAogCiAJc25kX3BjbV90aW1lcl9yZXNvbHV0aW9uX2NoYW5nZShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfU0VUVVA7CisKKwlyZW1vdmVfYWNjZXB0YWJsZV9sYXRlbmN5KHN1YnN0cmVhbS0+bGF0ZW5jeV9pZCk7CisJaWYgKCh1c2VjcyA9IHBlcmlvZF90b191c2VjcyhydW50aW1lKSkgPj0gMCkKKwkJc2V0X2FjY2VwdGFibGVfbGF0ZW5jeShzdWJzdHJlYW0tPmxhdGVuY3lfaWQsIHVzZWNzKTsKIAlyZXR1cm4gMDsKICBfZXJyb3I6CiAJLyogaGFyZHdhcmUgbWlnaHQgYmUgdW51c2VhYmxlIGZyb20gdGhpcyB0aW1lLApAQCAtNDkwLDYgKzUxMCw3IEBACiAJaWYgKHN1YnN0cmVhbS0+b3BzLT5od19mcmVlKQogCQlyZXN1bHQgPSBzdWJzdHJlYW0tPm9wcy0+aHdfZnJlZShzdWJzdHJlYW0pOwogCXJ1bnRpbWUtPnN0YXR1cy0+c3RhdGUgPSBTTkRSVl9QQ01fU1RBVEVfT1BFTjsKKwlyZW1vdmVfYWNjZXB0YWJsZV9sYXRlbmN5KHN1YnN0cmVhbS0+bGF0ZW5jeV9pZCk7CiAJcmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMjgzMSw4ICsyODUyLDggQEAKIAlyZXR1cm4gcmVzdWx0OwogfQogCi1zdGF0aWMgc3NpemVfdCBzbmRfcGNtX3JlYWR2KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKl92ZWN0b3IsCi0JCQkgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIGxvZmZfdCAqIG9mZnNldCkKK3N0YXRpYyBzc2l6ZV90IHNuZF9wY21fYWlvX3JlYWQoc3RydWN0IGtpb2NiICppb2NiLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogCiB7CiAJc3RydWN0IHNuZF9wY21fZmlsZSAqcGNtX2ZpbGU7CkBAIC0yODQzLDIyICsyODY0LDIyIEBACiAJdm9pZCBfX3VzZXIgKipidWZzOwogCXNuZF9wY21fdWZyYW1lc190IGZyYW1lczsKIAotCXBjbV9maWxlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXBjbV9maWxlID0gaW9jYi0+a2lfZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN1YnN0cmVhbSA9IHBjbV9maWxlLT5zdWJzdHJlYW07CiAJc25kX2Fzc2VydChzdWJzdHJlYW0gIT0gTlVMTCwgcmV0dXJuIC1FTlhJTyk7CiAJcnVudGltZSA9IHN1YnN0cmVhbS0+cnVudGltZTsKIAlpZiAocnVudGltZS0+c3RhdHVzLT5zdGF0ZSA9PSBTTkRSVl9QQ01fU1RBVEVfT1BFTikKIAkJcmV0dXJuIC1FQkFERkQ7Ci0JaWYgKGNvdW50ID4gMTAyNCB8fCBjb3VudCAhPSBydW50aW1lLT5jaGFubmVscykKKwlpZiAobnJfc2VncyA+IDEwMjQgfHwgbnJfc2VncyAhPSBydW50aW1lLT5jaGFubmVscykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCFmcmFtZV9hbGlnbmVkKHJ1bnRpbWUsIF92ZWN0b3ItPmlvdl9sZW4pKQorCWlmICghZnJhbWVfYWxpZ25lZChydW50aW1lLCBpb3YtPmlvdl9sZW4pKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlmcmFtZXMgPSBieXRlc190b19zYW1wbGVzKHJ1bnRpbWUsIF92ZWN0b3ItPmlvdl9sZW4pOwotCWJ1ZnMgPSBrbWFsbG9jKHNpemVvZih2b2lkICopICogY291bnQsIEdGUF9LRVJORUwpOworCWZyYW1lcyA9IGJ5dGVzX3RvX3NhbXBsZXMocnVudGltZSwgaW92LT5pb3ZfbGVuKTsKKwlidWZzID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG5yX3NlZ3MsIEdGUF9LRVJORUwpOwogCWlmIChidWZzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotCQlidWZzW2ldID0gX3ZlY3RvcltpXS5pb3ZfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgKytpKQorCQlidWZzW2ldID0gaW92W2ldLmlvdl9iYXNlOwogCXJlc3VsdCA9IHNuZF9wY21fbGliX3JlYWR2KHN1YnN0cmVhbSwgYnVmcywgZnJhbWVzKTsKIAlpZiAocmVzdWx0ID4gMCkKIAkJcmVzdWx0ID0gZnJhbWVzX3RvX2J5dGVzKHJ1bnRpbWUsIHJlc3VsdCk7CkBAIC0yODY2LDggKzI4ODcsOCBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBzc2l6ZV90IHNuZF9wY21fd3JpdGV2KHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKl92ZWN0b3IsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGNvdW50LCBsb2ZmX3QgKiBvZmZzZXQpCitzdGF0aWMgc3NpemVfdCBzbmRfcGNtX2Fpb193cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LAorCQkJICAgICAgdW5zaWduZWQgbG9uZyBucl9zZWdzLCBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBzbmRfcGNtX2ZpbGUgKnBjbV9maWxlOwogCXN0cnVjdCBzbmRfcGNtX3N1YnN0cmVhbSAqc3Vic3RyZWFtOwpAQCAtMjg3Nyw3ICsyODk4LDcgQEAKIAl2b2lkIF9fdXNlciAqKmJ1ZnM7CiAJc25kX3BjbV91ZnJhbWVzX3QgZnJhbWVzOwogCi0JcGNtX2ZpbGUgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJcGNtX2ZpbGUgPSBpb2NiLT5raV9maWxwLT5wcml2YXRlX2RhdGE7CiAJc3Vic3RyZWFtID0gcGNtX2ZpbGUtPnN1YnN0cmVhbTsKIAlzbmRfYXNzZXJ0KHN1YnN0cmVhbSAhPSBOVUxMLCByZXN1bHQgPSAtRU5YSU87IGdvdG8gZW5kKTsKIAlydW50aW1lID0gc3Vic3RyZWFtLT5ydW50aW1lOwpAQCAtMjg4NSwxNyArMjkwNiwxNyBAQAogCQlyZXN1bHQgPSAtRUJBREZEOwogCQlnb3RvIGVuZDsKIAl9Ci0JaWYgKGNvdW50ID4gMTI4IHx8IGNvdW50ICE9IHJ1bnRpbWUtPmNoYW5uZWxzIHx8Ci0JICAgICFmcmFtZV9hbGlnbmVkKHJ1bnRpbWUsIF92ZWN0b3ItPmlvdl9sZW4pKSB7CisJaWYgKG5yX3NlZ3MgPiAxMjggfHwgbnJfc2VncyAhPSBydW50aW1lLT5jaGFubmVscyB8fAorCSAgICAhZnJhbWVfYWxpZ25lZChydW50aW1lLCBpb3YtPmlvdl9sZW4pKSB7CiAJCXJlc3VsdCA9IC1FSU5WQUw7CiAJCWdvdG8gZW5kOwogCX0KLQlmcmFtZXMgPSBieXRlc190b19zYW1wbGVzKHJ1bnRpbWUsIF92ZWN0b3ItPmlvdl9sZW4pOwotCWJ1ZnMgPSBrbWFsbG9jKHNpemVvZih2b2lkICopICogY291bnQsIEdGUF9LRVJORUwpOworCWZyYW1lcyA9IGJ5dGVzX3RvX3NhbXBsZXMocnVudGltZSwgaW92LT5pb3ZfbGVuKTsKKwlidWZzID0ga21hbGxvYyhzaXplb2Yodm9pZCAqKSAqIG5yX3NlZ3MsIEdGUF9LRVJORUwpOwogCWlmIChidWZzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgKytpKQotCQlidWZzW2ldID0gX3ZlY3RvcltpXS5pb3ZfYmFzZTsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfc2VnczsgKytpKQorCQlidWZzW2ldID0gaW92W2ldLmlvdl9iYXNlOwogCXJlc3VsdCA9IHNuZF9wY21fbGliX3dyaXRldihzdWJzdHJlYW0sIGJ1ZnMsIGZyYW1lcyk7CiAJaWYgKHJlc3VsdCA+IDApCiAJCXJlc3VsdCA9IGZyYW1lc190b19ieXRlcyhydW50aW1lLCByZXN1bHQpOwpAQCAtMzQwNSw3ICszNDI2LDcgQEAKIAl7CiAJCS5vd25lciA9CQlUSElTX01PRFVMRSwKIAkJLndyaXRlID0JCXNuZF9wY21fd3JpdGUsCi0JCS53cml0ZXYgPQkJc25kX3BjbV93cml0ZXYsCisJCS5haW9fd3JpdGUgPQkJc25kX3BjbV9haW9fd3JpdGUsCiAJCS5vcGVuID0JCQlzbmRfcGNtX3BsYXliYWNrX29wZW4sCiAJCS5yZWxlYXNlID0JCXNuZF9wY21fcmVsZWFzZSwKIAkJLnBvbGwgPQkJCXNuZF9wY21fcGxheWJhY2tfcG9sbCwKQEAgLTM0MTcsNyArMzQzOCw3IEBACiAJewogCQkub3duZXIgPQkJVEhJU19NT0RVTEUsCiAJCS5yZWFkID0JCQlzbmRfcGNtX3JlYWQsCi0JCS5yZWFkdiA9CQlzbmRfcGNtX3JlYWR2LAorCQkuYWlvX3JlYWQgPQkJc25kX3BjbV9haW9fcmVhZCwKIAkJLm9wZW4gPQkJCXNuZF9wY21fY2FwdHVyZV9vcGVuLAogCQkucmVsZWFzZSA9CQlzbmRfcGNtX3JlbGVhc2UsCiAJCS5wb2xsID0JCQlzbmRfcGNtX2NhcHR1cmVfcG9sbCwKZGlmZiAtLWdpdCBhL3NvdW5kL21pcHMvYXUxeDAwLmMgYi9zb3VuZC9taXBzL2F1MXgwMC5jCmluZGV4IGMzMWIzODYuLmZmNmU2ZmMgMTAwNjQ0Ci0tLSBhL3NvdW5kL21pcHMvYXUxeDAwLmMKKysrIGIvc291bmQvbWlwcy9hdTF4MDAuYwpAQCAtMjU4LDcgKzI1OCw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmF0ZXNbXSA9IHs4MDAwLCAxMTAyNSwgMTYwMDAsIDIyMDUwfTsKIHN0YXRpYyBzdHJ1Y3Qgc25kX3BjbV9od19jb25zdHJhaW50X2xpc3QgaHdfY29uc3RyYWludHNfcmF0ZXMgPSB7Ci0JLmNvdW50CT0gIHNpemVvZihyYXRlcykgLyBzaXplb2YocmF0ZXNbMF0pLAorCS5jb3VudAk9IEFSUkFZX1NJWkUocmF0ZXMpLAogCS5saXN0CT0gcmF0ZXMsCiAJLm1hc2sJPSAwLAogfTsKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9DT1BZSU5HIGIvc291bmQvb3NzL0NPUFlJTkcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxNmQxZjAuLjAwMDAwMDAKLS0tIGEvc291bmQvb3NzL0NPUFlJTkcKKysrIC9kZXYvbnVsbApAQCAtMSwzMzkgKzAsMCBAQAotCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKLQkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCi0KLSBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCi0gNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVTQQotIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcwotIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgotCi0JCQkgICAgUHJlYW1ibGUKLQotICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCi1mcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwotTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQotc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKLUdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCi11c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Ci10aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KLXlvdXIgcHJvZ3JhbXMsIHRvby4KLQotICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90Ci1wcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91Ci1oYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCi10aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKLWlmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0Ci1pbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCi0KLSAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAotYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgotVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKLWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KLQotICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCi1ncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKLXlvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCi1zb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCi1yaWdodHMuCi0KLSAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAotKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKLWRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCi0KLSAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KLXRoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCi1zb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKLXdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCi10aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAotYXV0aG9ycycgcmVwdXRhdGlvbnMuCi0KLSAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKLXBhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKLXByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKLXByb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQotcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KLQotICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAotbW9kaWZpY2F0aW9uIGZvbGxvdy4KLQwKLQkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCi0gICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KLQotICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCi1hIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAotdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAotcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCi1tZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgotdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKLWVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCi1sYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCi10aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KLQotQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKLWNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKLXJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KLWlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgotV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCi0KLSAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCi1zb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKLWNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKLWNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKLW5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKLWFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKLWFsb25nIHdpdGggdGhlIFByb2dyYW0uCi0KLVlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoteW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KLQotICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCi1vZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCi1kaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKLWFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6Ci0KLSAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKLSAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgotCi0gICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCi0gICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55Ci0gICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKLSAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5Ci0gICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAotICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KLSAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKLSAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKLSAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCi0gICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKLSAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAotICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KLSAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKLQwKLVRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKLWlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCi1hbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KLXRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKLXNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQotZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCi1vbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKLXRoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCi1lbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCi0KLVRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoteW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCi1leGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKLWNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCi0KLUluIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KLXdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgotYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKLXRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCi11bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKLVNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKLQotICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKLSAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKLSAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKLQotICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCi0gICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKLSAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCi0gICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQotICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCi0gICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAotCi0gICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKLSAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcwotICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91Ci0gICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAotICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQotCi1UaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCi1tYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQotY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKLWFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bwotY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQotc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCi1hbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQotZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKLW9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50Ci1pdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCi0KLUlmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKLWFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKLWFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcwotZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Ci1jb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgotDAotICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KLWV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKLW90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwotdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgotSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKLXRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCi1wYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCi0KLSAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90Ci1zaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgotZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCi1wcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Ci1tb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKLVByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCi1hbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCi10aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KLQotICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCi1Qcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQotb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwotdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKLXJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KLVlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCi10aGlzIExpY2Vuc2UuCi0KLSAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAotaW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKLWNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKLW90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKLWV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90Ci1kaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCi1MaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91Ci1tYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50Ci1saWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5Ci1hbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KLXRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KLXJlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCi0KLUlmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgotYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bwotYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKLWNpcmN1bXN0YW5jZXMuCi0KLUl0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKLXBhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55Ci1zdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCi1pbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKLWltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQotZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAotdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKLXN5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKLXRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAotaW1wb3NlIHRoYXQgY2hvaWNlLgotCi1UaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KLWJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgotDAotICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgotY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCi1vcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCi1tYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKLXRob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKLWNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwotdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCi0KLSAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKLW9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAotYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCi1hZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KLQotRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQotc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKLWxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKLWVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCi1Tb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCi10aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCi1Gb3VuZGF0aW9uLgotCi0gIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKLXByb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKLXRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQotU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCi1tYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscwotb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAotb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCi0KLQkJCSAgICBOTyBXQVJSQU5UWQotCi0gIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQotRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCi1PVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCi1QUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAotT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKLU1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKLVRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKLVBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAotUkVQQUlSIE9SIENPUlJFQ1RJT04uCi0KLSAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwotV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgotUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKLUlOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORwotT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAotVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCi1ZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgotUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCi1QT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCi0KLQkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKLQwKLQlBcHBlbmRpeDogSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCi0KLSAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAotcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAotZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCi0KLSAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKLXRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKLWNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Ci10aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KLQotICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+Ci0gICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+Ci0KLSAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCi0KLUFsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgotCi1JZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCi13aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgotCi0gICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yCi0gICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgotICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKLSAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCi0KLVRoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQotcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQotYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCi1tb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgotCi1Zb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgotc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKLW5lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKLQotICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCi0gIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgotCi0gIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQotICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQotCi1UaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KLXByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Ci1jb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKLWxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAotUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvY3M0Nnh4LmMgYi9zb3VuZC9vc3MvY3M0Nnh4LmMKaW5kZXggNTE5NWJmOS4uNDMxOTM1OCAxMDA2NDQKLS0tIGEvc291bmQvb3NzL2NzNDZ4eC5jCisrKyBiL3NvdW5kL29zcy9jczQ2eHguYwpAQCAtOTYsNyArOTYsNyBAQAogI2luY2x1ZGUgPGFzbS9kbWEuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogCi0jaW5jbHVkZSAiY3M0Nnh4cG0tMjQuaCIKKyNpbmNsdWRlICJjczQ2eHhwbS5oIgogI2luY2x1ZGUgImNzNDZ4eF93cmFwcGVyLTI0LmgiCiAjaW5jbHVkZSAiY3M0NjF4LmgiCiAKQEAgLTM4OSw4ICszODksMTAgQEAKIHN0YXRpYyBpbnQgY3M0Nnh4X3Bvd2VydXAoc3RydWN0IGNzX2NhcmQgKmNhcmQsIHVuc2lnbmVkIGludCB0eXBlKTsKIHN0YXRpYyBpbnQgY3M0NjF4X3Bvd2VyZG93bihzdHJ1Y3QgY3NfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IHR5cGUsIGludCBzdXNwZW5kZmxhZyk7CiBzdGF0aWMgdm9pZCBjczQ2MXhfY2xlYXJfc2VyaWFsX0ZJRk9zKHN0cnVjdCBjc19jYXJkICpjYXJkLCBpbnQgdHlwZSk7CisjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGNzNDZ4eF9zdXNwZW5kX3RibChzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogc3RhdGljIGludCBjczQ2eHhfcmVzdW1lX3RibChzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKKyNlbmRpZgogCiAjaWYgQ1NERUJVRwogCkBAIC0yOTgwLDcgKzI5ODIsNyBAQAogCQogCWNhcmQtPmFjdGl2ZSs9Y2hhbmdlOwogCQotCWFjcGlfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLCBOVUxMKTsKKwlhY3BpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8zLCBOVUxMKTsKIAlpZiAoYWNwaV9kZXYgPT0gTlVMTCkKIAkJcmV0dXJuOwkJLyogTm90IGEgdGhpbmtwYWQgdGhhdHMgZm9yIHN1cmUgKi8KIApAQCAtMzAwNiw2ICszMDA4LDcgQEAKIAkJCQljaGFuZ2UsY2FyZC0+YWN0aXZlKSk7CiAJCW91dHcoY29udHJvbCZ+MHgyMDAwLCBwb3J0KzB4MTApOwogCX0KKwlwY2lfZGV2X3B1dChhY3BpX2Rldik7CiB9CiAKIAkKQEAgLTUzODksOCArNTM5MiwxMCBAQAogCS5pZF90YWJsZSA9IGNzNDZ4eF9wY2lfdGJsLAogCS5wcm9iZQkgID0gY3M0Nnh4X3Byb2JlLAogCS5yZW1vdmUJICA9IF9fZGV2ZXhpdF9wKGNzNDZ4eF9yZW1vdmUpLAotCS5zdXNwZW5kICA9IENTNDZYWF9TVVNQRU5EX1RCTCwKLQkucmVzdW1lCSAgPSBDUzQ2WFhfUkVTVU1FX1RCTCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCAgPSBjczQ2eHhfc3VzcGVuZF90YmwsCisJLnJlc3VtZQkgID0gY3M0Nnh4X3Jlc3VtZV90YmwsCisjZW5kaWYKIH07CiAKIHN0YXRpYyBpbnQgX19pbml0IGNzNDZ4eF9pbml0X21vZHVsZSh2b2lkKQpAQCAtNTQyMCw3ICs1NDI1LDcgQEAKIG1vZHVsZV9pbml0KGNzNDZ4eF9pbml0X21vZHVsZSk7CiBtb2R1bGVfZXhpdChjczQ2eHhfY2xlYW51cF9tb2R1bGUpOwogCi0jaWYgQ1M0NlhYX0FDUElfU1VQUE9SVAorI2lmZGVmIENPTkZJR19QTQogc3RhdGljIGludCBjczQ2eHhfc3VzcGVuZF90Ymwoc3RydWN0IHBjaV9kZXYgKnBjaWRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBjc19jYXJkICpzID0gUENJX0dFVF9EUklWRVJfREFUQShwY2lkZXYpOwpkaWZmIC0tZ2l0IGEvc291bmQvb3NzL2NzNDZ4eHBtLTI0LmggYi9zb3VuZC9vc3MvY3M0Nnh4cG0tMjQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWQ4MmRiOC4uMDAwMDAwMAotLS0gYS9zb3VuZC9vc3MvY3M0Nnh4cG0tMjQuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qICAgICAgImNzNDZ4eHBtLTI0LmgiIC0tICBDaXJydXMgTG9naWMtQ3J5c3RhbCBDUzQ2WFggbGludXggYXVkaW8gZHJpdmVyLgotKgotKiAgICAgIENvcHlyaWdodCAoQykgMjAwMCwyMDAxICBDaXJydXMgTG9naWMgQ29ycC4gIAotKiAgICAgICAgICAgIC0tIHRvbSB3b2xsZXIgKHR3b2xsZXJAY3J5c3RhbC5jaXJydXMuY29tKSBvcgotKiAgICAgICAgICAgICAgIChwY2F1ZGlvQGNyeXN0YWwuY2lycnVzLmNvbSkuCi0qCi0qICAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSogICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotKiAgICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0qICAgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSoKLSogICAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSogICAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotKiAgICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSogICAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotKgotKiAgICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0qICAgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSogICAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KLSoKLSogMTIvMjIvMDAgdHJ3IC0gbmV3IGZpbGUuIAotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLSNpZm5kZWYgX19DUzQ2WFhQTTI0X0gKLSNkZWZpbmUgX19DUzQ2WFhQTTI0X0gKLQotI2luY2x1ZGUgPGxpbnV4L3BtLmg+Ci0jaW5jbHVkZSAiY3M0Nnh4cG0uaCIKLQotCi0jZGVmaW5lIENTNDZYWF9BQ1BJX1NVUFBPUlQgMQotI2lmZGVmIENTNDZYWF9BQ1BJX1NVUFBPUlQKLS8qIAotKiBmb3Igbm93ICgxMi8yMi8wMCkgb25seSBlbmFibGUgdGhlIHBtX3JlZ2lzdGVyIFBNIHN1cHBvcnQuCi0qIGFsbG93IHRoZXNlIHRhYmxlIGVudHJpZXMgdG8gYmUgbnVsbC4KLSovCi1zdGF0aWMgaW50IGNzNDZ4eF9zdXNwZW5kX3RibChzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwotc3RhdGljIGludCBjczQ2eHhfcmVzdW1lX3RibChzdHJ1Y3QgcGNpX2RldiAqcGNpZGV2KTsKLSNkZWZpbmUgQ1M0NlhYX1NVU1BFTkRfVEJMIGNzNDZ4eF9zdXNwZW5kX3RibAotI2RlZmluZSBDUzQ2WFhfUkVTVU1FX1RCTCBjczQ2eHhfcmVzdW1lX3RibAotI2Vsc2UKLSNkZWZpbmUgQ1M0NlhYX1NVU1BFTkRfVEJMIGNzNDZ4eF9udWxsCi0jZGVmaW5lIENTNDZYWF9SRVNVTUVfVEJMIGNzNDZ4eF9udWxsCi0jZW5kaWYKLQotI2VuZGlmCmRpZmYgLS1naXQgYS9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMgYi9zb3VuZC9vc3Mvc2hfZGFjX2F1ZGlvLmMKaW5kZXggN2IxNjhkOC4uODNmZjhhNyAxMDA2NDQKLS0tIGEvc291bmQvb3NzL3NoX2RhY19hdWRpby5jCisrKyBiL3NvdW5kL29zcy9zaF9kYWNfYXVkaW8uYwpAQCAtMSwzICsxLDE0IEBACisvKgorICogc291bmQvb3NzL3NoX2RhY19hdWRpby5jCisgKgorICogU0ggREFDIGJhc2VkIHNvdW5kIDooCisgKgorICogIENvcHlyaWdodCAoQykgMjAwNCwyMDA1ICBBbmRyaXkgU2t1bHlzaAorICoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CkBAIC02LDE4ICsxNywxNyBAQAogI2luY2x1ZGUgPGxpbnV4L2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc291bmQuaD4KICNpbmNsdWRlIDxsaW51eC9zb3VuZGNhcmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KICNpbmNsdWRlIDxhc20vZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLQorI2luY2x1ZGUgPGFzbS9jbG9jay5oPgogI2luY2x1ZGUgPGFzbS9jcHUvZGFjLmg+Ci0KLSNpZmRlZiBNQUNIX0hQNjAwCisjaW5jbHVkZSA8YXNtL2NwdS90aW1lci5oPgorI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAjaW5jbHVkZSA8YXNtL2hwNnh4L2hwNnh4Lmg+Ci0jaW5jbHVkZSA8YXNtL2hkNjQ0NjEvaGQ2NDQ2MS5oPgotI2VuZGlmCisjaW5jbHVkZSA8YXNtL2hkNjQ0NjEuaD4KIAogI2RlZmluZSBNT0ROQU1FICJzaF9kYWNfYXVkaW8iCiAKQEAgLTI2LDExICszNiw2IEBACiAjZGVmaW5lIFRNVTFfVENSX0lOSVQJMHgwMDIwCS8qIENsb2NrLzQsIHJpc2luZyBlZGdlOyBpbnRlcnJ1cHQgb24gKi8KICNkZWZpbmUgVE1VMV9UU1RSX0lOSVQgIDB4MDIJLyogQml0IHRvIHR1cm4gb24gVE1VMSAqLwogCi0jZGVmaW5lIFRNVV9UU1RSCTB4ZmZmZmZlOTIKLSNkZWZpbmUgVE1VMV9UQ09SCTB4ZmZmZmZlYTAKLSNkZWZpbmUgVE1VMV9UQ05UCTB4ZmZmZmZlYTQKLSNkZWZpbmUgVE1VMV9UQ1IJMHhmZmZmZmVhOAotCiAjZGVmaW5lIEJVRkZFUl9TSVpFIDQ4MDAwCiAKIHN0YXRpYyBpbnQgcmF0ZTsKQEAgLTcxLDM0ICs3NiwzNyBAQAogCiBzdGF0aWMgdm9pZCBkYWNfYXVkaW9fc3RhcnQodm9pZCkKIHsKLSNpZmRlZiBNQUNIX0hQNjAwCi0JdTE2IHY7Ci0JdiA9IGludyhIRDY0NDYxX0dQQURSKTsKLQl2ICY9IH5IRDY0NDYxX0dQQURSX1NQRUFLRVI7Ci0Jb3V0dyh2LCBIRDY0NDYxX0dQQURSKTsKLSNlbmRpZgorCWlmIChtYWNoX2lzX2hwNnh4KCkpIHsKKwkJdTE2IHYgPSBpbncoSEQ2NDQ2MV9HUEFEUik7CisJCXYgJj0gfkhENjQ0NjFfR1BBRFJfU1BFQUtFUjsKKwkJb3V0dyh2LCBIRDY0NDYxX0dQQURSKTsKKwl9CisKIAlzaF9kYWNfZW5hYmxlKENPTkZJR19TT1VORF9TSF9EQUNfQVVESU9fQ0hBTk5FTCk7CiAJY3RybF9vdXR3KFRNVTFfVENSX0lOSVQsIFRNVTFfVENSKTsKIH0KIHN0YXRpYyB2b2lkIGRhY19hdWRpb19zdG9wKHZvaWQpCiB7Ci0jaWZkZWYgTUFDSF9IUDYwMAotCXUxNiB2OwotI2VuZGlmCiAJZGFjX2F1ZGlvX3N0b3BfdGltZXIoKTsKLSNpZmRlZiBNQUNIX0hQNjAwCi0JdiA9IGludyhIRDY0NDYxX0dQQURSKTsKLQl2IHw9IEhENjQ0NjFfR1BBRFJfU1BFQUtFUjsKLQlvdXR3KHYsIEhENjQ0NjFfR1BBRFIpOwotI2VuZGlmCisKKwlpZiAobWFjaF9pc19ocDZ4eCgpKSB7CisJCXUxNiB2ID0gaW53KEhENjQ0NjFfR1BBRFIpOworCQl2IHw9IEhENjQ0NjFfR1BBRFJfU1BFQUtFUjsKKwkJb3V0dyh2LCBIRDY0NDYxX0dQQURSKTsKKwl9CisKKyAJc2hfZGFjX291dHB1dCgwLCBDT05GSUdfU09VTkRfU0hfREFDX0FVRElPX0NIQU5ORUwpOwogCXNoX2RhY19kaXNhYmxlKENPTkZJR19TT1VORF9TSF9EQUNfQVVESU9fQ0hBTk5FTCk7CiB9CiAKIHN0YXRpYyB2b2lkIGRhY19hdWRpb19zZXRfcmF0ZSh2b2lkKQogewogCXVuc2lnbmVkIGxvbmcgaW50ZXJ2YWw7CisgCXN0cnVjdCBjbGsgKmNsazsKIAotCWludGVydmFsID0gKGN1cnJlbnRfY3B1X2RhdGEubW9kdWxlX2Nsb2NrIC8gNCkgLyByYXRlOworIAljbGsgPSBjbGtfZ2V0KCJtb2R1bGVfY2xrIik7CisgCWludGVydmFsID0gKGNsa19nZXRfcmF0ZShjbGspIC8gNCkgLyByYXRlOworIAljbGtfcHV0KGNsayk7CiAJY3RybF9vdXRsKGludGVydmFsLCBUTVUxX1RDT1IpOwogCWN0cmxfb3V0bChpbnRlcnZhbCwgVE1VMV9UQ05UKTsKIH0KZGlmZiAtLWdpdCBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMgYi9zb3VuZC9vc3Mvc3dhcm1fY3M0Mjk3YS5jCmluZGV4IGViNWVhMzIuLjNlZGY4ZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL29zcy9zd2FybV9jczQyOTdhLmMKKysrIGIvc291bmQvb3NzL3N3YXJtX2NzNDI5N2EuYwpAQCAtNzI1LDcgKzcyNSw3IEBACiAgICAgICAgIHNlcmRtYV90ICpkID0gJnMtPmRtYV9kYWM7CiAgICAgICAgIHU2NCAqZGF0YV9wOwogICAgICAgICB1bnNpZ25lZCBzd3B0cjsKLSAgICAgICAgaW50IGZsYWdzOworICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICBzZXJkbWFfZGVzY3JfdCAqZGVzY3I7CiAKICAgICAgICAgaWYgKHMtPnJlZ19yZXF1ZXN0KSB7CmRpZmYgLS1naXQgYS9zb3VuZC9vc3MvdHJpZGVudC5jIGIvc291bmQvb3NzL3RyaWRlbnQuYwppbmRleCAyODEzZTRjLi5jZTc5Y2Q4IDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdHJpZGVudC5jCisrKyBiL3NvdW5kL29zcy90cmlkZW50LmMKQEAgLTQ4OCwxMCArNDg4LDYgQEAKIHN0YXRpYyB2b2lkIGFsaV9lbmFibGVfc3BlY2lhbF9jaGFubmVsKHN0cnVjdCB0cmlkZW50X3N0YXRlICpzdGF0KTsKIHN0YXRpYyBzdHJ1Y3QgdHJpZGVudF9jaGFubmVsICphbGlfYWxsb2NfcmVjX3BjbV9jaGFubmVsKHN0cnVjdCB0cmlkZW50X2NhcmQgKmNhcmQpOwogc3RhdGljIHN0cnVjdCB0cmlkZW50X2NoYW5uZWwgKmFsaV9hbGxvY19wY21fY2hhbm5lbChzdHJ1Y3QgdHJpZGVudF9jYXJkICpjYXJkKTsKLXN0YXRpYyB2b2lkIGFsaV9yZXN0b3JlX3JlZ3Moc3RydWN0IHRyaWRlbnRfY2FyZCAqY2FyZCk7Ci1zdGF0aWMgdm9pZCBhbGlfc2F2ZV9yZWdzKHN0cnVjdCB0cmlkZW50X2NhcmQgKmNhcmQpOwotc3RhdGljIGludCB0cmlkZW50X3N1c3BlbmQoc3RydWN0IHBjaV9kZXYgKmRldiwgcG1fbWVzc2FnZV90IHVudXNlZCk7Ci1zdGF0aWMgaW50IHRyaWRlbnRfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogc3RhdGljIHZvaWQgYWxpX2ZyZWVfcGNtX2NoYW5uZWwoc3RydWN0IHRyaWRlbnRfY2FyZCAqY2FyZCwgdW5zaWduZWQgaW50IGNoYW5uZWwpOwogc3RhdGljIGludCBhbGlfc2V0dXBfbXVsdGlfY2hhbm5lbHMoc3RydWN0IHRyaWRlbnRfY2FyZCAqY2FyZCwgaW50IGNoYW5fbnVtcyk7CiBzdGF0aWMgdW5zaWduZWQgaW50IGFsaV9nZXRfc3BkaWZfaW5fcmF0ZShzdHJ1Y3QgdHJpZGVudF9jYXJkICpjYXJkKTsKQEAgLTUwNywxMyArNTAzLDYgQEAKIAkJCQkJICAgICAgIGludCBjaGFuX251bXMpOwogc3RhdGljIHZvaWQgYWxpX2ZyZWVfb3RoZXJfc3RhdGVzX3Jlc291cmNlcyhzdHJ1Y3QgdHJpZGVudF9zdGF0ZSAqc3RhdGUpOwogCi0vKiBzYXZlIHJlZ2lzdGVycyBmb3IgQUxpIFBvd2VyIE1hbmFnZW1lbnQgKi8KLXN0YXRpYyBzdHJ1Y3QgYWxpX3NhdmVkX3JlZ2lzdGVycyB7Ci0JdW5zaWduZWQgbG9uZyBnbG9iYWxfcmVnc1tBTElfR0xPQkFMX1JFR1NdOwotCXVuc2lnbmVkIGxvbmcgY2hhbm5lbF9yZWdzW0FMSV9DSEFOTkVMU11bQUxJX0NIQU5ORUxfUkVHU107Ci0JdW5zaWduZWQgbWl4ZXJfcmVnc1tBTElfTUlYRVJfUkVHU107Ci19IGFsaV9yZWdpc3RlcnM7Ci0KICNkZWZpbmUgc2Vla19vZmZzZXQoZG1hX3B0ciwgYnVmZmVyLCBjbnQsIG9mZnNldCwgY29weV9jb3VudCkJZG8geyBcCiAgICAgICAgIChkbWFfcHRyKSArPSAob2Zmc2V0KTsJICBcCiAJKGJ1ZmZlcikgKz0gKG9mZnNldCk7CSAgXApAQCAtMzI4MCw4ICszMjY5LDggQEAKIAljaGFyIHRlbXA7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSBOVUxMOwogCi0JcGNpX2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX00xNTMzLCAKLQkJCQkgIHBjaV9kZXYpOworCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX00xNTMzLAorCQkJCSBwY2lfZGV2KTsKIAlpZiAocGNpX2RldiA9PSBOVUxMKQogCQlyZXR1cm47CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgMHg2MSwgJnRlbXApOwpAQCAtMzI5NSw2ICszMjg0LDggQEAKIAl0ZW1wIHw9IDB4MTA7CiAJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBjaV9kZXYsIDB4N2UsIHRlbXApOwogCisJcGNpX2Rldl9wdXQocGNpX2Rldik7CisKIAljaCA9IGluYihUUklEX1JFRyhjYXJkLCBBTElfU0NUUkwpKTsKIAlvdXRiKGNoIHwgQUxJX1NQRElGX09VVF9FTkFCTEUsIFRSSURfUkVHKGNhcmQsIEFMSV9TQ1RSTCkpOwogCWNoID0gaW5iKFRSSURfUkVHKGNhcmQsIEFMSV9TUERJRl9DVFJMKSk7CkBAIC0zNTAxLDE2ICszNDkyLDE5IEBACiAJY2hhciB0ZW1wID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CiAKLQlwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsIAotCQkJCSAgcGNpX2Rldik7CisJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsCisJCQkJIHBjaV9kZXYpOwogCWlmIChwY2lfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtMTsKKwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIDB4NTksICZ0ZW1wKTsKIAl0ZW1wICY9IH4weDgwOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfZGV2LCAweDU5LCB0ZW1wKTsKIAotCXBjaV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NNzEwMSwgCi0JCQkJICBwY2lfZGV2KTsKKwlwY2lfZGV2X3B1dChwY2lfZGV2KTsKKworCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAorCQkJCSBOVUxMKTsKIAlpZiAocGNpX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKQEAgLTM1MTgsNiArMzUxMiw4IEBACiAJdGVtcCAmPSB+MHgyMDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGNpX2RldiwgMHhCOCwgdGVtcCk7CiAKKwlwY2lfZGV2X3B1dChwY2lfZGV2KTsKKwogCXJldHVybiAwOwogfQogCkBAIC0zNTI4LDIxICszNTI0LDI2IEBACiAJY2hhciB0ZW1wID0gMDsKIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IE5VTEw7CiAKLQlwY2lfZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsIAotCQkJCSAgcGNpX2Rldik7CisJcGNpX2RldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9WRU5ET1JfSURfQUwsIFBDSV9ERVZJQ0VfSURfQUxfTTE1MzMsCisJCQkJIHBjaV9kZXYpOwogCWlmIChwY2lfZGV2ID09IE5VTEwpCiAJCXJldHVybiAtMTsKIAlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCAweDU5LCAmdGVtcCk7CiAJdGVtcCB8PSAweDgwOwogCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfZGV2LCAweDU5LCB0ZW1wKTsKIAotCXBjaV9kZXYgPSBwY2lfZmluZF9kZXZpY2UoUENJX1ZFTkRPUl9JRF9BTCwgUENJX0RFVklDRV9JRF9BTF9NNzEwMSwgCi0JCQkJICBwY2lfZGV2KTsKKwlwY2lfZGV2X3B1dChwY2lfZGV2KTsKKworCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX003MTAxLAorCQkJCSBOVUxMKTsKIAlpZiAocGNpX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGNpX2RldiwgKGludCkgMHhCOCwgJnRlbXApOwogCXRlbXAgfD0gMHgyMDsKIAlwY2lfd3JpdGVfY29uZmlnX2J5dGUocGNpX2RldiwgKGludCkgMHhCOCwgKHU4KSB0ZW1wKTsKKworCXBjaV9kZXZfcHV0KHBjaV9kZXYpOworCiAJaWYgKGNoYW5fbnVtcyA9PSA2KSB7CiAJCWR3VmFsdWUgPSBpbmwoVFJJRF9SRUcoY2FyZCwgQUxJX1NDVFJMKSkgfCAweDAwMGYwMDAwOwogCQlvdXRsKGR3VmFsdWUsIFRSSURfUkVHKGNhcmQsIEFMSV9TQ1RSTCkpOwpAQCAtMzY1Myw2ICszNjU0LDE0IEBACiAJcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBDT05GSUdfUE0KKy8qIHNhdmUgcmVnaXN0ZXJzIGZvciBBTGkgUG93ZXIgTWFuYWdlbWVudCAqLworc3RhdGljIHN0cnVjdCBhbGlfc2F2ZWRfcmVnaXN0ZXJzIHsKKwl1bnNpZ25lZCBsb25nIGdsb2JhbF9yZWdzW0FMSV9HTE9CQUxfUkVHU107CisJdW5zaWduZWQgbG9uZyBjaGFubmVsX3JlZ3NbQUxJX0NIQU5ORUxTXVtBTElfQ0hBTk5FTF9SRUdTXTsKKwl1bnNpZ25lZCBtaXhlcl9yZWdzW0FMSV9NSVhFUl9SRUdTXTsKK30gYWxpX3JlZ2lzdGVyczsKKwogc3RhdGljIHZvaWQKIGFsaV9zYXZlX3JlZ3Moc3RydWN0IHRyaWRlbnRfY2FyZCAqY2FyZCkKIHsKQEAgLTM3NDYsNiArMzc1NSw3IEBACiAJfQogCXJldHVybiAwOwogfQorI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdHJpZGVudF9jaGFubmVsICoKIGFsaV9hbGxvY19wY21fY2hhbm5lbChzdHJ1Y3QgdHJpZGVudF9jYXJkICpjYXJkKQpAQCAtNDEwNSw4ICs0MTE1LDggQEAKIAl1bnNpZ25lZCBpbnQgZHdWYWw7CiAJdW5zaWduZWQgc2hvcnQgd0NvdW50LCB3UmVnOwogCi0JcGNpX2RldiA9IHBjaV9maW5kX2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX00xNTMzLCAKLQkJCQkgIHBjaV9kZXYpOworCXBjaV9kZXYgPSBwY2lfZ2V0X2RldmljZShQQ0lfVkVORE9SX0lEX0FMLCBQQ0lfREVWSUNFX0lEX0FMX00xNTMzLAorCQkJCSBwY2lfZGV2KTsKIAlpZiAocGNpX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKQEAgLTQxMTYsNiArNDEyNiw3IEBACiAJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBjaV9kZXYsIDB4N2MsICZkd1ZhbCk7CiAJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwY2lfZGV2LCAweDdjLCBkd1ZhbCAmIDB4ZjdmZmZmZmYpOwogCXVkZWxheSg1MDAwKTsKKwlwY2lfZGV2X3B1dChwY2lfZGV2KTsKIAogCXBjaV9kZXYgPSBjYXJkLT5wY2lfZGV2OwogCWlmIChwY2lfZGV2ID09IE5VTEwpCkBAIC00Mzk1LDcgKzQ0MDYsNyBAQAogCiAJaW5pdF90aW1lcigmY2FyZC0+dGltZXIpOwogCWNhcmQtPmlvYmFzZSA9IGlvYmFzZTsKLQljYXJkLT5wY2lfZGV2ID0gcGNpX2RldjsKKwljYXJkLT5wY2lfZGV2ID0gcGNpX2Rldl9nZXQocGNpX2Rldik7CiAJY2FyZC0+cGNpX2lkID0gcGNpX2lkLT5kZXZpY2U7CiAJY2FyZC0+cmV2aXNpb24gPSByZXZpc2lvbjsKIAljYXJkLT5pcnEgPSBwY2lfZGV2LT5pcnE7CkBAIC00NTQ5LDYgKzQ1NjAsNyBAQAogb3V0X2ZyZWVfaXJxOgogCWZyZWVfaXJxKGNhcmQtPmlycSwgY2FyZCk7CiBvdXRfcHJvY19mczoKKwlwY2lfZGV2X3B1dChjYXJkLT5wY2lfZGV2KTsKIAlpZiAocmVzKSB7CiAJCXJlbW92ZV9wcm9jX2VudHJ5KCJBTGk1NDUxIiwgTlVMTCk7CiAJCXJlcyA9IE5VTEw7CkBAIC00NTk5LDkgKzQ2MTEsOSBAQAogCQl9CiAJdW5yZWdpc3Rlcl9zb3VuZF9kc3AoY2FyZC0+ZGV2X2F1ZGlvKTsKIAotCWtmcmVlKGNhcmQpOwotCiAJcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOworCXBjaV9kZXZfcHV0KGNhcmQtPnBjaV9kZXYpOworCWtmcmVlKGNhcmQpOwogfQogCiBNT0RVTEVfQVVUSE9SKCJBbGFuIENveCwgQWFyb24gSG9sdHptYW4sIE9sbGllIExobywgQ2hpbmcgTGluZyBMZWUsIE11bGkgQmVuLVllaHVkYSIpOwpAQCAtNDYxNiw4ICs0NjI4LDEwIEBACiAJLmlkX3RhYmxlID0gdHJpZGVudF9wY2lfdGJsLAogCS5wcm9iZSA9IHRyaWRlbnRfcHJvYmUsCiAJLnJlbW92ZSA9IF9fZGV2ZXhpdF9wKHRyaWRlbnRfcmVtb3ZlKSwKKyNpZmRlZiBDT05GSUdfUE0KIAkuc3VzcGVuZCA9IHRyaWRlbnRfc3VzcGVuZCwKIAkucmVzdW1lID0gdHJpZGVudF9yZXN1bWUKKyNlbmRpZgogfTsKIAogc3RhdGljIGludCBfX2luaXQKZGlmZiAtLWdpdCBhL3NvdW5kL29zcy92aWE4MmN4eHhfYXVkaW8uYyBiL3NvdW5kL29zcy92aWE4MmN4eHhfYXVkaW8uYwppbmRleCAwOGQ4Yzk0Li4yZmVjNDJmIDEwMDY0NAotLS0gYS9zb3VuZC9vc3MvdmlhODJjeHh4X2F1ZGlvLmMKKysrIGIvc291bmQvb3NzL3ZpYTgyY3h4eF9hdWRpby5jCkBAIC0xNTQ3LDcgKzE1NDcsNyBAQAogCiAJRFBSSU5USyAoIkVOVEVSXG4iKTsKIAotCXdoaWxlICgocGRldiA9IHBjaV9maW5kX2RldmljZShQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCBwZGV2KSkgIT0gTlVMTCkgeworCXdoaWxlICgocGRldiA9IHBjaV9nZXRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSAhPSBOVUxMKSB7CiAJCWRydnIgPSBwY2lfZGV2X2RyaXZlciAocGRldik7CiAJCWlmIChkcnZyID09ICZ2aWFfZHJpdmVyKSB7CiAJCQlhc3NlcnQgKHBjaV9nZXRfZHJ2ZGF0YSAocGRldikgIT0gTlVMTCk7CkBAIC0xNTYyLDYgKzE1NjIsNyBAQAogCXJldHVybiAtRU5PREVWOwogCiBtYXRjaDoKKwlwY2lfZGV2X3B1dChwZGV2KTsKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBjYXJkLT5hYzk3OwogCiAJRFBSSU5USyAoIkVYSVQsIHJldHVybmluZyAwXG4iKTsKQEAgLTMyNDUsNyArMzI0Niw3IEBACiAJfQogCiAJY2FyZCA9IE5VTEw7Ci0Jd2hpbGUgKChwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBkZXYpKSAhPSBOVUxMKSB7CisJd2hpbGUgKChwZGV2ID0gcGNpX2dldF9kZXZpY2UoUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgcGRldikpICE9IE5VTEwpIHsKIAkJZHJ2ciA9IHBjaV9kZXZfZHJpdmVyIChwZGV2KTsKIAkJaWYgKGRydnIgPT0gJnZpYV9kcml2ZXIpIHsKIAkJCWFzc2VydCAocGNpX2dldF9kcnZkYXRhIChwZGV2KSAhPSBOVUxMKTsKQEAgLTMyNjQsNiArMzI2NSw3IEBACiAJcmV0dXJuIC1FTk9ERVY7CiAKIG1hdGNoOgorCXBjaV9kZXZfcHV0KHBkZXYpOwogCWlmIChub25ibG9jaykgewogCQlpZiAoIW11dGV4X3RyeWxvY2soJmNhcmQtPm9wZW5fbXV0ZXgpKSB7CiAJCQlEUFJJTlRLICgiRVhJVCwgcmV0dXJuaW5nIC1FQUdBSU5cbiIpOwpkaWZmIC0tZ2l0IGEvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jIGIvc291bmQvcGNpL2VjaG9hdWRpby9sYXlsYTI0X2RzcC5jCmluZGV4IDdlYzViNjMuLjk3ZTQyZTEgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9lY2hvYXVkaW8vbGF5bGEyNF9kc3AuYworKysgYi9zb3VuZC9wY2kvZWNob2F1ZGlvL2xheWxhMjRfZHNwLmMKQEAgLTMwMiwxMSArMzAyLDExIEBACiAKIAkvKiAgQ2hlY2sgdG8gc2VlIGlmIHRoaXMgaXMgYWxyZWFkeSBsb2FkZWQgKi8KIAlpZiAoYXNpYyAhPSBjaGlwLT5hc2ljX2NvZGUpIHsKLQkJbW9uaXRvcnMgPSBrbWFsbG9jKE1PTklUT1JfQVJSQVlfU0laRSwgR0ZQX0tFUk5FTCk7CisJCW1vbml0b3JzID0ga21lbWR1cChjaGlwLT5jb21tX3BhZ2UtPm1vbml0b3JzLAorCQkJCQlNT05JVE9SX0FSUkFZX1NJWkUsIEdGUF9LRVJORUwpOwogCQlpZiAoISBtb25pdG9ycykKIAkJCXJldHVybiAtRU5PTUVNOwogCi0JCW1lbWNweShtb25pdG9ycywgY2hpcC0+Y29tbV9wYWdlLT5tb25pdG9ycywgTU9OSVRPUl9BUlJBWV9TSVpFKTsKIAkJbWVtc2V0KGNoaXAtPmNvbW1fcGFnZS0+bW9uaXRvcnMsIEVDSE9HQUlOX01VVEVELAogCQkgICAgICAgTU9OSVRPUl9BUlJBWV9TSVpFKTsKIApkaWZmIC0tZ2l0IGEvc291bmQvc291bmRfY29yZS5jIGIvc291bmQvc291bmRfY29yZS5jCmluZGV4IDYyZDRkMGMuLjBiMGEwMTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2NvcmUuYworKysgYi9zb3VuZC9zb3VuZF9jb3JlLmMKQEAgLTU1MSwxMCArNTUxLDYgQEAKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotZXh0ZXJuIGludCBtb2RfZmlybXdhcmVfbG9hZChjb25zdCBjaGFyICosIGNoYXIgKiopOwotRVhQT1JUX1NZTUJPTChtb2RfZmlybXdhcmVfbG9hZCk7Ci0KLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJDb3JlIHNvdW5kIG1vZHVsZSIpOwogTU9EVUxFX0FVVEhPUigiQWxhbiBDb3giKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL3NvdW5kL3NvdW5kX2Zpcm13YXJlLmMgYi9zb3VuZC9zb3VuZF9maXJtd2FyZS5jCmluZGV4IDZkZGFkZmEuLjNhMTgxZDQgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NvdW5kX2Zpcm13YXJlLmMKKysrIGIvc291bmQvc291bmRfZmlybXdhcmUuYwpAQCAtNCw2ICs0LDcgQEAKICNpbmNsdWRlIDxsaW51eC9tbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgIm9zcy9zb3VuZF9maXJtd2FyZS5oIgogCiBzdGF0aWMgaW50IGRvX21vZF9maXJtd2FyZV9sb2FkKGNvbnN0IGNoYXIgKmZuLCBjaGFyICoqZnApCiB7CkBAIC01OSw4ICs2MCw3IEBACiAgKgl2YWx1ZSB6ZXJvIG9uIGEgZmFpbHVyZS4KICAqCiAgKglDYXV0aW9uOiBUaGlzIEFQSSBpcyBub3QgcmVjb21tZW5kZWQuIEZpcm13YXJlIHNob3VsZCBiZSBsb2FkZWQgdmlhCi0gKglhbiBpb2N0bCBjYWxsIGFuZCBhIHNldHVwIGFwcGxpY2F0aW9uLiBUaGlzIGZ1bmN0aW9uIG1heSBkaXNhcHBlYXIKLSAqCWluIGZ1dHVyZS4KKyAqCXJlcXVlc3RfZmlybXdhcmUuCiAgKi8KICAKIGludCBtb2RfZmlybXdhcmVfbG9hZChjb25zdCBjaGFyICpmbiwgY2hhciAqKmZwKQpAQCAtNzMsNCArNzMsNiBAQAogCXNldF9mcyhmcyk7CiAJcmV0dXJuIHI7CiB9CitFWFBPUlRfU1lNQk9MKG1vZF9maXJtd2FyZV9sb2FkKTsKIAorTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvc291bmQvc3BhcmMvZGJyaS5jIGIvc291bmQvc3BhcmMvZGJyaS5jCmluZGV4IDgwMTY1NDEuLjVhOTdiZTYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3NwYXJjL2RicmkuYworKysgYi9zb3VuZC9zcGFyYy9kYnJpLmMKQEAgLTI0MTIsOCArMjQxMiw2IEBACiAJQ1M0MjE1X1NJTkdMRSgiTWljIGJvb3N0IiwgNCwgNCwgMSwgMSkKIH07CiAKLSNkZWZpbmUgTlVNX0NTNDIxNV9DT05UUk9MUyAoc2l6ZW9mKGRicmlfY29udHJvbHMpL3NpemVvZihzdHJ1Y3Qgc25kX2tjb250cm9sX25ldykpCi0KIHN0YXRpYyBpbnQgX19pbml0IHNuZF9kYnJpX21peGVyKHN0cnVjdCBzbmRfZGJyaSAqIGRicmkpCiB7CiAJc3RydWN0IHNuZF9jYXJkICpjYXJkOwpAQCAtMjQyNCw3ICsyNDIyLDcgQEAKIAljYXJkID0gZGJyaS0+Y2FyZDsKIAlzdHJjcHkoY2FyZC0+bWl4ZXJuYW1lLCBjYXJkLT5zaG9ydG5hbWUpOwogCi0JZm9yIChpZHggPSAwOyBpZHggPCBOVU1fQ1M0MjE1X0NPTlRST0xTOyBpZHgrKykgeworCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShkYnJpX2NvbnRyb2xzKTsgaWR4KyspIHsKIAkJaWYgKChlcnIgPSBzbmRfY3RsX2FkZChjYXJkLAogCQkJCXNuZF9jdGxfbmV3MSgmZGJyaV9jb250cm9sc1tpZHhdLCBkYnJpKSkpIDwgMCkKIAkJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNiYXVkaW8uYyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCmluZGV4IDQ5MjQ4ZmEuLmE0MmFjZjYgMTAwNjQ0Ci0tLSBhL3NvdW5kL3VzYi91c2JhdWRpby5jCisrKyBiL3NvdW5kL3VzYi91c2JhdWRpby5jCkBAIC0yMDQ2LDEwICsyMDQ2LDkgQEAKIAl2b2lkICpidWYgPSBOVUxMOwogCiAJaWYgKHNpemUgPiAwKSB7Ci0JCWJ1ZiA9IGttYWxsb2Moc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWJ1ZiA9IGttZW1kdXAoZGF0YSwgc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYnVmKQogCQkJcmV0dXJuIC1FTk9NRU07Ci0JCW1lbWNweShidWYsIGRhdGEsIHNpemUpOwogCX0KIAllcnIgPSB1c2JfY29udHJvbF9tc2coZGV2LCBwaXBlLCByZXF1ZXN0LCByZXF1ZXN0dHlwZSwKIAkJCSAgICAgIHZhbHVlLCBpbmRleCwgYnVmLCBzaXplLCB0aW1lb3V0KTsKQEAgLTI4NDYsMTIgKzI4NDUsMTEgQEAKIAlpbnQgc3RyZWFtLCBlcnI7CiAJaW50ICpyYXRlX3RhYmxlID0gTlVMTDsKIAotCWZwID0ga21hbGxvYyhzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7CisJZnAgPSBrbWVtZHVwKHF1aXJrLT5kYXRhLCBzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCEgZnApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiY2Fubm90IG1hbGxvY1xuIik7CisJCXNuZF9wcmludGsoS0VSTl9FUlIgImNhbm5vdCBtZW1kdXBcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JbWVtY3B5KGZwLCBxdWlyay0+ZGF0YSwgc2l6ZW9mKCpmcCkpOwogCWlmIChmcC0+bnJfcmF0ZXMgPiAwKSB7CiAJCXJhdGVfdGFibGUgPSBrbWFsbG9jKHNpemVvZihpbnQpICogZnAtPm5yX3JhdGVzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFyYXRlX3RhYmxlKSB7CkBAIC0zMDI5LDEwICszMDI3LDkgQEAKIAkgICAgYWx0c2QtPmJOdW1FbmRwb2ludHMgIT0gMSkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWZwID0ga21hbGxvYyhzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7CisJZnAgPSBrbWVtZHVwKCZ1YTEwMDBfZm9ybWF0LCBzaXplb2YoKmZwKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFmcCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGZwLCAmdWExMDAwX2Zvcm1hdCwgc2l6ZW9mKCpmcCkpOwogCiAJZnAtPmNoYW5uZWxzID0gYWx0cy0+ZXh0cmFbNF07CiAJZnAtPmlmYWNlID0gYWx0c2QtPmJJbnRlcmZhY2VOdW1iZXI7CmRpZmYgLS1naXQgYS9zb3VuZC91c2IvdXNibWlkaS5jIGIvc291bmQvdXNiL3VzYm1pZGkuYwppbmRleCA1MTA1YjZiLi4wZGNmNzhhIDEwMDY0NAotLS0gYS9zb3VuZC91c2IvdXNibWlkaS5jCisrKyBiL3NvdW5kL3VzYi91c2JtaWRpLmMKQEAgLTE4MSw5ICsxODEsOSBAQAogCWNhc2UgLUVOT0RFVjoKIAkJcmV0dXJuIC1FTk9ERVY7CiAJLyogZXJyb3JzIHRoYXQgbWlnaHQgb2NjdXIgZHVyaW5nIHVucGx1Z2dpbmcgKi8KLQljYXNlIC1FUFJPVE86ICAgIC8qIEVIQ0kgKi8KLQljYXNlIC1FVElNRURPVVQ6IC8qIE9IQ0kgKi8KLQljYXNlIC1FSUxTRVE6ICAgIC8qIFVIQ0kgKi8KKwljYXNlIC1FUFJPVE86CisJY2FzZSAtRVRJTUU6CisJY2FzZSAtRUlMU0VROgogCQlyZXR1cm4gLUVJTzsKIAlkZWZhdWx0OgogCQlzbmRfcHJpbnRrKEtFUk5fRVJSICJ1cmIgc3RhdHVzICVkXG4iLCBzdGF0dXMpOwpAQCAtMzIzLDEwICszMjMsOSBAQAogCQkJCSBjb25zdCB2b2lkICpkYXRhLCBpbnQgbGVuKQogewogCWludCBlcnI7Ci0Jdm9pZCAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCXZvaWQgKmJ1ZiA9IGttZW1kdXAoZGF0YSwgbGVuLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWJ1ZikKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbWVtY3B5KGJ1ZiwgZGF0YSwgbGVuKTsKIAlkdW1wX3VyYigic2VuZGluZyIsIGJ1ZiwgbGVuKTsKIAllcnIgPSB1c2JfYnVsa19tc2coZXAtPnVtaWRpLT5jaGlwLT5kZXYsIGVwLT51cmItPnBpcGUsIGJ1ZiwgbGVuLAogCQkJICAgTlVMTCwgMjUwKTsK